diff --git a/CHANGELOG.md b/CHANGELOG.md index 3aca1285e..778e2f80b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,6 +3,17 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## 2.14.1 (2023-05-14) + + +### Bug Fixes + +* configure git when trying to release ([fc4ae96](https://github.com/HSF/phoenix/commit/fc4ae96efdb5ce47db09c0e026fce4561a42ec24)) + + + + + # [2.14.0](https://github.com/HSF/phoenix/compare/v2.13.0...v2.14.0) (2023-03-22) **Note:** Version bump only for package root diff --git a/docs/137.cced59b964dda1c3.js b/docs/137.a7c613d6c5e66079.js similarity index 66% rename from docs/137.cced59b964dda1c3.js rename to docs/137.a7c613d6c5e66079.js index 0d6ab9fac..80d2ca493 100644 --- a/docs/137.cced59b964dda1c3.js +++ b/docs/137.a7c613d6c5e66079.js @@ -1,2 +1,2 @@ -"use strict";(self.webpackChunkphoenix_app=self.webpackChunkphoenix_app||[]).push([[137],{8137:(p,o,r)=>{r.r(o),r.d(o,{TGraphTimePainter:()=>a});var h=r(4788),_=r(9542),m=r(3675),f=r(6458),l=r(9670),u=r(7825);class a extends f.tK{redraw(){void 0===this.step&&this.startDrawing()}decodeOptions(e){let t=new m.pc(e||"REPEAT");this.options||(this.options={}),Object.assign(this.options,{once:t.check("ONCE"),repeat:t.check("REPEAT"),first:t.check("FIRST")}),this.storeDrawOpt(e)}drawPrimitives(e){var t=this;return(0,h.Z)(function*(){e||(e=0,t._doing_primitives=!0);let i=t.getObject()?.fSteps.arr[t.step];if(i&&!(e>=i.arr.length))return(0,u.ii)(t.getDom(),i.arr[e],i.opt[e]).then(s=>(s&&(s.$grtimeid=t.selfid,s.$grstep=t.step),t.drawPrimitives(e+1)));delete t._doing_primitives})()}continueDrawing(){if(!this.options)return;let e=this.getObject();if(this.options.first)delete this.step;else if(this.wait_animation_frame){delete this.wait_animation_frame;let t=this.getPadPainter();if(!t)return void delete this.step;this.drawPrimitives().then(()=>{t.cleanPrimitives(i=>i.$grtimeid===this.selfid&&i.$grstep!==this.step),this.continueDrawing()})}else if(this.running_timeout)clearTimeout(this.running_timeout),delete this.running_timeout,this.wait_animation_frame=!0,requestAnimationFrame(()=>this.continueDrawing());else{let t=Math.max(e.fSleepTime,10);if(++this.step>e.fSteps.arr.length){if(!this.options.repeat)return void delete this.step;this.step=0,t=Math.max(5e3,5*t)}this.running_timeout=setTimeout(()=>this.continueDrawing(),t)}}startDrawing(){return this.step=0,this.drawPrimitives().then(()=>(this.continueDrawing(),this))}static draw(e,t,i){return(0,h.Z)(function*(){if(!t.fFrame)return console.error("Frame histogram not exists"),null;let s=new a(e,t);if(s.getMainPainter())return console.error("Cannot draw graph time on top of other histograms"),null;if(s.decodeOptions(i),!t.fFrame.fTitle&&t.fTitle){let n=t.fTitle.split(";");t.fFrame.fTitle=n[0],n[1]&&(t.fFrame.fXaxis.fTitle=n[1]),n[2]&&(t.fFrame.fYaxis.fTitle=n[2])}return s.selfid="grtime_"+_.internals.id_counter++,l.f.draw(e,t.fFrame,"AXIS").then(()=>(s.addToPadPrimitives(),s.startDrawing()))})()}}}}]); -//# sourceMappingURL=137.cced59b964dda1c3.js.map \ No newline at end of file +"use strict";(self.webpackChunkphoenix_app=self.webpackChunkphoenix_app||[]).push([[137],{8137:(d,o,s)=>{s.r(o),s.d(o,{TGraphTimePainter:()=>a});var h=s(5835),_=s(9542),l=s(3675),m=s(6458),f=s(9670),u=s(7825);class a extends m.tK{redraw(){void 0===this.step&&this.startDrawing()}decodeOptions(e){let t=new l.pc(e||"REPEAT");this.options||(this.options={}),Object.assign(this.options,{once:t.check("ONCE"),repeat:t.check("REPEAT"),first:t.check("FIRST")}),this.storeDrawOpt(e)}drawPrimitives(e){var t=this;return(0,h.Z)(function*(){e||(e=0,t._doing_primitives=!0);let i=t.getObject()?.fSteps.arr[t.step];if(i&&!(e>=i.arr.length))return(0,u.ii)(t.getDom(),i.arr[e],i.opt[e]).then(r=>(r&&(r.$grtimeid=t.selfid,r.$grstep=t.step),t.drawPrimitives(e+1)));delete t._doing_primitives})()}continueDrawing(){if(!this.options)return;let e=this.getObject();if(this.options.first)delete this.step;else if(this.wait_animation_frame){delete this.wait_animation_frame;let t=this.getPadPainter();if(!t)return void delete this.step;this.drawPrimitives().then(()=>{t.cleanPrimitives(i=>i.$grtimeid===this.selfid&&i.$grstep!==this.step),this.continueDrawing()})}else if(this.running_timeout)clearTimeout(this.running_timeout),delete this.running_timeout,this.wait_animation_frame=!0,requestAnimationFrame(()=>this.continueDrawing());else{let t=Math.max(e.fSleepTime,10);if(++this.step>e.fSteps.arr.length){if(!this.options.repeat)return void delete this.step;this.step=0,t=Math.max(5e3,5*t)}this.running_timeout=setTimeout(()=>this.continueDrawing(),t)}}startDrawing(){return this.step=0,this.drawPrimitives().then(()=>(this.continueDrawing(),this))}static draw(e,t,i){return(0,h.Z)(function*(){if(!t.fFrame)return console.error("Frame histogram not exists"),null;let r=new a(e,t);if(r.getMainPainter())return console.error("Cannot draw graph time on top of other histograms"),null;if(r.decodeOptions(i),!t.fFrame.fTitle&&t.fTitle){let n=t.fTitle.split(";");t.fFrame.fTitle=n[0],n[1]&&(t.fFrame.fXaxis.fTitle=n[1]),n[2]&&(t.fFrame.fYaxis.fTitle=n[2])}return r.selfid="grtime_"+_.internals.id_counter++,f.f.draw(e,t.fFrame,"AXIS").then(()=>(r.addToPadPrimitives(),r.startDrawing()))})()}}}}]); +//# sourceMappingURL=137.a7c613d6c5e66079.js.map \ No newline at end of file diff --git a/docs/137.cced59b964dda1c3.js.map b/docs/137.a7c613d6c5e66079.js.map similarity index 95% rename from docs/137.cced59b964dda1c3.js.map rename to docs/137.a7c613d6c5e66079.js.map index 1f2be1d32..1ce09d6ac 100644 --- a/docs/137.cced59b964dda1c3.js.map +++ b/docs/137.a7c613d6c5e66079.js.map @@ -1 +1 @@ -{"version":3,"file":"137.cced59b964dda1c3.js","mappings":"iNAaA,MAAMA,UAA0BC,KAG7BC,cACqBC,IAAdC,KAAKC,MAAoBD,KAAKE,cACrC,CAGAC,cAAcC,GAEX,IAAIC,EAAI,IAAIC,KAAYF,GAAO,UAE1BJ,KAAKO,UAASP,KAAKO,QAAU,CAAC,GAEnCC,OAAOC,OAAOT,KAAKO,QAAS,CACxBG,KAAML,EAAEM,MAAM,QACdC,OAAQP,EAAEM,MAAM,UAChBE,MAAOR,EAAEM,MAAM,WAGnBX,KAAKc,aAAaV,EACrB,CAGMW,eAAeC,GAAM,qCAEnBA,IACFA,EAAO,EACPC,EAAKC,mBAAoB,GAG5B,IAAIC,EAAMF,EAAKG,aAAaC,OAAOC,IAAIL,EAAKhB,MAE5C,GAAKkB,KAAQH,GAAQG,EAAIG,IAAIC,QAK7B,SAAOC,MAAKP,EAAKQ,SAAUN,EAAIG,IAAIN,GAAOG,EAAIf,IAAIY,IAAOU,KAAKC,IAEvDA,IACDA,EAAEC,UAAYX,EAAKY,OACnBF,EAAEG,QAAUb,EAAKhB,MAEbgB,EAAKF,eAAeC,EAAK,YAVzBC,EAAKC,iBAYZ,EAtBqB,EAuB3B,CAGAa,kBACG,IAAK/B,KAAKO,QAAS,OAEnB,IAAIyB,EAAKhC,KAAKoB,YAEd,GAAIpB,KAAKO,QAAQM,aAEPb,KAAKC,UAIf,GAAID,KAAKiC,qBAAsB,QACrBjC,KAAKiC,qBAGZ,IAAIC,EAAKlC,KAAKmC,gBACd,IAAKD,EAGF,mBADOlC,KAAKC,KAKfD,KAAKe,iBAAiBW,KAAK,KAExBQ,EAAGE,gBAAgBT,GAAeA,EAAEC,YAAc5B,KAAK6B,QAAYF,EAAEG,UAAY9B,KAAKC,MAEtFD,KAAK+B,iBAAe,EAE1B,SAAW/B,KAAKqC,gBACbC,aAAatC,KAAKqC,wBACXrC,KAAKqC,gBAEZrC,KAAKiC,sBAAuB,EAE5BM,sBAAsB,IAAMvC,KAAK+B,uBAC7B,CAEJ,IAAIS,EAAYC,KAAKC,IAAIV,EAAGW,WAAY,IAExC,KAAM3C,KAAKC,KAAO+B,EAAGX,OAAOC,IAAIC,OAC7B,KAAIvB,KAAKO,QAAQK,OAKd,mBADOZ,KAAKC,KAHZD,KAAKC,KAAO,EACZuC,EAAYC,KAAKC,IAAI,IAAM,EAAEF,EAIhC,CAGHxC,KAAKqC,gBAAkBO,WAAW,IAAM5C,KAAK+B,kBAAmBS,EACnE,CACH,CAGAtC,eACG,YAAKD,KAAO,EAELD,KAAKe,iBAAiBW,KAAK,KAC/B1B,KAAK+B,kBACE/B,MAEb,CAGA6C,YAAkBC,EAAKd,EAAI5B,GAAK,0BAC7B,IAAK4B,EAAGe,OACNC,eAAQC,MAAM,8BACP,KAGT,IAAIC,EAAU,IAAItD,EAAkBkD,EAAKd,GAEzC,GAAIkB,EAAQC,iBACTH,eAAQC,MAAM,qDACP,KAKV,GAFAC,EAAQ/C,cAAcC,IAEjB4B,EAAGe,OAAOK,QAAUpB,EAAGoB,OAAQ,CACjC,IAAI9B,EAAMU,EAAGoB,OAAOC,MAAM,KAC1BrB,EAAGe,OAAOK,OAAS9B,EAAI,GACnBA,EAAI,KAAIU,EAAGe,OAAOO,OAAOF,OAAS9B,EAAI,IACtCA,EAAI,KAAIU,EAAGe,OAAOQ,OAAOH,OAAS9B,EAAI,GAC7C,CAEA4B,SAAQrB,OAAS,UAAY2B,yBAEtBC,SAAgBX,EAAKd,EAAGe,OAAQ,QAAQrB,KAAK,KACjDwB,EAAQQ,qBACDR,EAAQhD,gBACf,EA3B0B,EA4BhC","names":["TGraphTimePainter","ObjectPainter","redraw","undefined","this","step","startDrawing","decodeOptions","opt","d","DrawOptions","options","Object","assign","once","check","repeat","first","storeDrawOpt","drawPrimitives","indx","_this","_doing_primitives","lst","getObject","fSteps","arr","length","draw","getDom","then","p","$grtimeid","selfid","$grstep","continueDrawing","gr","wait_animation_frame","pp","getPadPainter","cleanPrimitives","running_timeout","clearTimeout","requestAnimationFrame","sleeptime","Math","max","fSleepTime","setTimeout","static","dom","fFrame","console","error","painter","getMainPainter","fTitle","split","fXaxis","fYaxis","internals","TH1Painter","addToPadPrimitives"],"sourceRoot":"webpack:///","sources":["../node_modules/jsroot/modules/hist/TGraphTimePainter.mjs"],"sourcesContent":["import { internals } from '../core.mjs';\nimport { DrawOptions } from '../base/BasePainter.mjs';\nimport { ObjectPainter } from '../base/ObjectPainter.mjs';\nimport { TH1Painter } from '../hist2d/TH1Painter.mjs';\nimport { draw } from '../draw.mjs';\n\n\n/**\n * @summary Painter for TGraphTime object\n *\n * @private\n */\n\nclass TGraphTimePainter extends ObjectPainter {\n\n /** @summary Redraw object */\n redraw() {\n if (this.step === undefined) this.startDrawing();\n }\n\n /** @summary Decode drawing options */\n decodeOptions(opt) {\n\n let d = new DrawOptions(opt || 'REPEAT');\n\n if (!this.options) this.options = {};\n\n Object.assign(this.options, {\n once: d.check('ONCE'),\n repeat: d.check('REPEAT'),\n first: d.check('FIRST')\n });\n\n this.storeDrawOpt(opt);\n }\n\n /** @summary Draw primitives */\n async drawPrimitives(indx) {\n\n if (!indx) {\n indx = 0;\n this._doing_primitives = true;\n }\n\n let lst = this.getObject()?.fSteps.arr[this.step];\n\n if (!lst || (indx >= lst.arr.length)) {\n delete this._doing_primitives;\n return;\n }\n\n return draw(this.getDom(), lst.arr[indx], lst.opt[indx]).then(p => {\n\n if (p) {\n p.$grtimeid = this.selfid; // indicator that painter created by ourself\n p.$grstep = this.step; // remember step\n }\n return this.drawPrimitives(indx+1);\n\n });\n }\n\n /** @summary Continue drawing */\n continueDrawing() {\n if (!this.options) return;\n\n let gr = this.getObject();\n\n if (this.options.first) {\n // draw only single frame, cancel all others\n delete this.step;\n return;\n }\n\n if (this.wait_animation_frame) {\n delete this.wait_animation_frame;\n\n // clear pad\n let pp = this.getPadPainter();\n if (!pp) {\n // most probably, pad is cleared\n delete this.step;\n return;\n }\n\n // draw ptrimitives again\n this.drawPrimitives().then(() => {\n // clear primitives produced by previous drawing to avoid flicking\n pp.cleanPrimitives(p => { return (p.$grtimeid === this.selfid) && (p.$grstep !== this.step); });\n\n this.continueDrawing();\n });\n } else if (this.running_timeout) {\n clearTimeout(this.running_timeout);\n delete this.running_timeout;\n\n this.wait_animation_frame = true;\n // use animation frame to disable update in inactive form\n requestAnimationFrame(() => this.continueDrawing());\n } else {\n\n let sleeptime = Math.max(gr.fSleepTime, 10);\n\n if (++this.step > gr.fSteps.arr.length) {\n if (this.options.repeat) {\n this.step = 0; // start again\n sleeptime = Math.max(5000, 5*sleeptime); // increase sleep time\n } else {\n delete this.step; // clear indicator that animation running\n return;\n }\n }\n\n this.running_timeout = setTimeout(() => this.continueDrawing(), sleeptime);\n }\n }\n\n /** @ummary Start drawing of graph time */\n startDrawing() {\n this.step = 0;\n\n return this.drawPrimitives().then(() => {\n this.continueDrawing();\n return this;\n });\n }\n\n /** @summary Draw TGraphTime object */\n static async draw(dom, gr, opt) {\n if (!gr.fFrame) {\n console.error('Frame histogram not exists');\n return null;\n }\n\n let painter = new TGraphTimePainter(dom, gr);\n\n if (painter.getMainPainter()) {\n console.error('Cannot draw graph time on top of other histograms');\n return null;\n }\n\n painter.decodeOptions(opt);\n\n if (!gr.fFrame.fTitle && gr.fTitle) {\n let arr = gr.fTitle.split(\";\");\n gr.fFrame.fTitle = arr[0];\n if (arr[1]) gr.fFrame.fXaxis.fTitle = arr[1];\n if (arr[2]) gr.fFrame.fYaxis.fTitle = arr[2];\n }\n\n painter.selfid = 'grtime_' + internals.id_counter++; // use to identify primitives which should be clean\n\n return TH1Painter.draw(dom, gr.fFrame, 'AXIS').then(() => {\n painter.addToPadPrimitives();\n return painter.startDrawing();\n });\n }\n\n} // class TGraphTimePainter\n\nexport { TGraphTimePainter };\n"],"x_google_ignoreList":[0]} \ No newline at end of file +{"version":3,"file":"137.a7c613d6c5e66079.js","mappings":"iNAaA,MAAMA,UAA0BC,KAG7BC,cACqBC,IAAdC,KAAKC,MAAoBD,KAAKE,cACrC,CAGAC,cAAcC,GAEX,IAAIC,EAAI,IAAIC,KAAYF,GAAO,UAE1BJ,KAAKO,UAASP,KAAKO,QAAU,CAAC,GAEnCC,OAAOC,OAAOT,KAAKO,QAAS,CACxBG,KAAML,EAAEM,MAAM,QACdC,OAAQP,EAAEM,MAAM,UAChBE,MAAOR,EAAEM,MAAM,WAGnBX,KAAKc,aAAaV,EACrB,CAGMW,eAAeC,GAAM,qCAEnBA,IACFA,EAAO,EACPC,EAAKC,mBAAoB,GAG5B,IAAIC,EAAMF,EAAKG,aAAaC,OAAOC,IAAIL,EAAKhB,MAE5C,GAAKkB,KAAQH,GAAQG,EAAIG,IAAIC,QAK7B,SAAOC,MAAKP,EAAKQ,SAAUN,EAAIG,IAAIN,GAAOG,EAAIf,IAAIY,IAAOU,KAAKC,IAEvDA,IACDA,EAAEC,UAAYX,EAAKY,OACnBF,EAAEG,QAAUb,EAAKhB,MAEbgB,EAAKF,eAAeC,EAAK,YAVzBC,EAAKC,iBAYZ,EAtBqB,EAuB3B,CAGAa,kBACG,IAAK/B,KAAKO,QAAS,OAEnB,IAAIyB,EAAKhC,KAAKoB,YAEd,GAAIpB,KAAKO,QAAQM,aAEPb,KAAKC,UAIf,GAAID,KAAKiC,qBAAsB,QACrBjC,KAAKiC,qBAGZ,IAAIC,EAAKlC,KAAKmC,gBACd,IAAKD,EAGF,mBADOlC,KAAKC,KAKfD,KAAKe,iBAAiBW,KAAK,KAExBQ,EAAGE,gBAAgBT,GAAeA,EAAEC,YAAc5B,KAAK6B,QAAYF,EAAEG,UAAY9B,KAAKC,MAEtFD,KAAK+B,iBAAe,EACtB,SACO/B,KAAKqC,gBACbC,aAAatC,KAAKqC,wBACXrC,KAAKqC,gBAEZrC,KAAKiC,sBAAuB,EAE5BM,sBAAsB,IAAMvC,KAAK+B,uBAC7B,CAEJ,IAAIS,EAAYC,KAAKC,IAAIV,EAAGW,WAAY,IAExC,KAAM3C,KAAKC,KAAO+B,EAAGX,OAAOC,IAAIC,OAC7B,KAAIvB,KAAKO,QAAQK,OAKd,mBADOZ,KAAKC,KAHZD,KAAKC,KAAO,EACZuC,EAAYC,KAAKC,IAAI,IAAM,EAAEF,EAG7B,CAINxC,KAAKqC,gBAAkBO,WAAW,IAAM5C,KAAK+B,kBAAmBS,EAAS,CAE/E,CAGAtC,eACG,YAAKD,KAAO,EAELD,KAAKe,iBAAiBW,KAAK,KAC/B1B,KAAK+B,kBACE/B,MAEb,CAGA6C,YAAkBC,EAAKd,EAAI5B,GAAK,0BAC7B,IAAK4B,EAAGe,OACNC,eAAQC,MAAM,8BACP,KAGT,IAAIC,EAAU,IAAItD,EAAkBkD,EAAKd,GAEzC,GAAIkB,EAAQC,iBACTH,eAAQC,MAAM,qDACP,KAKV,GAFAC,EAAQ/C,cAAcC,IAEjB4B,EAAGe,OAAOK,QAAUpB,EAAGoB,OAAQ,CACjC,IAAI9B,EAAMU,EAAGoB,OAAOC,MAAM,KAC1BrB,EAAGe,OAAOK,OAAS9B,EAAI,GACnBA,EAAI,KAAIU,EAAGe,OAAOO,OAAOF,OAAS9B,EAAI,IACtCA,EAAI,KAAIU,EAAGe,OAAOQ,OAAOH,OAAS9B,EAAI,GAAC,CAG9C4B,SAAQrB,OAAS,UAAY2B,yBAEtBC,SAAgBX,EAAKd,EAAGe,OAAQ,QAAQrB,KAAK,KACjDwB,EAAQQ,qBACDR,EAAQhD,gBACf,EA3B0B,EA4BhC","names":["TGraphTimePainter","ObjectPainter","redraw","undefined","this","step","startDrawing","decodeOptions","opt","d","DrawOptions","options","Object","assign","once","check","repeat","first","storeDrawOpt","drawPrimitives","indx","_this","_doing_primitives","lst","getObject","fSteps","arr","length","draw","getDom","then","p","$grtimeid","selfid","$grstep","continueDrawing","gr","wait_animation_frame","pp","getPadPainter","cleanPrimitives","running_timeout","clearTimeout","requestAnimationFrame","sleeptime","Math","max","fSleepTime","setTimeout","static","dom","fFrame","console","error","painter","getMainPainter","fTitle","split","fXaxis","fYaxis","internals","TH1Painter","addToPadPrimitives"],"sourceRoot":"webpack:///","sources":["../node_modules/jsroot/modules/hist/TGraphTimePainter.mjs"],"sourcesContent":["import { internals } from '../core.mjs';\nimport { DrawOptions } from '../base/BasePainter.mjs';\nimport { ObjectPainter } from '../base/ObjectPainter.mjs';\nimport { TH1Painter } from '../hist2d/TH1Painter.mjs';\nimport { draw } from '../draw.mjs';\n\n\n/**\n * @summary Painter for TGraphTime object\n *\n * @private\n */\n\nclass TGraphTimePainter extends ObjectPainter {\n\n /** @summary Redraw object */\n redraw() {\n if (this.step === undefined) this.startDrawing();\n }\n\n /** @summary Decode drawing options */\n decodeOptions(opt) {\n\n let d = new DrawOptions(opt || 'REPEAT');\n\n if (!this.options) this.options = {};\n\n Object.assign(this.options, {\n once: d.check('ONCE'),\n repeat: d.check('REPEAT'),\n first: d.check('FIRST')\n });\n\n this.storeDrawOpt(opt);\n }\n\n /** @summary Draw primitives */\n async drawPrimitives(indx) {\n\n if (!indx) {\n indx = 0;\n this._doing_primitives = true;\n }\n\n let lst = this.getObject()?.fSteps.arr[this.step];\n\n if (!lst || (indx >= lst.arr.length)) {\n delete this._doing_primitives;\n return;\n }\n\n return draw(this.getDom(), lst.arr[indx], lst.opt[indx]).then(p => {\n\n if (p) {\n p.$grtimeid = this.selfid; // indicator that painter created by ourself\n p.$grstep = this.step; // remember step\n }\n return this.drawPrimitives(indx+1);\n\n });\n }\n\n /** @summary Continue drawing */\n continueDrawing() {\n if (!this.options) return;\n\n let gr = this.getObject();\n\n if (this.options.first) {\n // draw only single frame, cancel all others\n delete this.step;\n return;\n }\n\n if (this.wait_animation_frame) {\n delete this.wait_animation_frame;\n\n // clear pad\n let pp = this.getPadPainter();\n if (!pp) {\n // most probably, pad is cleared\n delete this.step;\n return;\n }\n\n // draw ptrimitives again\n this.drawPrimitives().then(() => {\n // clear primitives produced by previous drawing to avoid flicking\n pp.cleanPrimitives(p => { return (p.$grtimeid === this.selfid) && (p.$grstep !== this.step); });\n\n this.continueDrawing();\n });\n } else if (this.running_timeout) {\n clearTimeout(this.running_timeout);\n delete this.running_timeout;\n\n this.wait_animation_frame = true;\n // use animation frame to disable update in inactive form\n requestAnimationFrame(() => this.continueDrawing());\n } else {\n\n let sleeptime = Math.max(gr.fSleepTime, 10);\n\n if (++this.step > gr.fSteps.arr.length) {\n if (this.options.repeat) {\n this.step = 0; // start again\n sleeptime = Math.max(5000, 5*sleeptime); // increase sleep time\n } else {\n delete this.step; // clear indicator that animation running\n return;\n }\n }\n\n this.running_timeout = setTimeout(() => this.continueDrawing(), sleeptime);\n }\n }\n\n /** @ummary Start drawing of graph time */\n startDrawing() {\n this.step = 0;\n\n return this.drawPrimitives().then(() => {\n this.continueDrawing();\n return this;\n });\n }\n\n /** @summary Draw TGraphTime object */\n static async draw(dom, gr, opt) {\n if (!gr.fFrame) {\n console.error('Frame histogram not exists');\n return null;\n }\n\n let painter = new TGraphTimePainter(dom, gr);\n\n if (painter.getMainPainter()) {\n console.error('Cannot draw graph time on top of other histograms');\n return null;\n }\n\n painter.decodeOptions(opt);\n\n if (!gr.fFrame.fTitle && gr.fTitle) {\n let arr = gr.fTitle.split(\";\");\n gr.fFrame.fTitle = arr[0];\n if (arr[1]) gr.fFrame.fXaxis.fTitle = arr[1];\n if (arr[2]) gr.fFrame.fYaxis.fTitle = arr[2];\n }\n\n painter.selfid = 'grtime_' + internals.id_counter++; // use to identify primitives which should be clean\n\n return TH1Painter.draw(dom, gr.fFrame, 'AXIS').then(() => {\n painter.addToPadPrimitives();\n return painter.startDrawing();\n });\n }\n\n} // class TGraphTimePainter\n\nexport { TGraphTimePainter };\n"],"x_google_ignoreList":[0]} \ No newline at end of file diff --git a/docs/15.4def682f3a97b1e2.js b/docs/15.4def682f3a97b1e2.js deleted file mode 100644 index 4dae3a07e..000000000 --- a/docs/15.4def682f3a97b1e2.js +++ /dev/null @@ -1,2 +0,0 @@ -"use strict";(self.webpackChunkphoenix_app=self.webpackChunkphoenix_app||[]).push([[15],{15:(w,P,g)=>{g.r(P),g.d(P,{TWebPaintingPainter:()=>b});var O=g(4788),M=g(3038),S=g(6458);class b extends S.tK{updateObject(e){return!!this.matchObjectType(e)&&(this.assignObject(e),!0)}redraw(){var e=this;return(0,O.Z)(function*(){const r=e.getObject(),n=e.getAxisToSvgFunc();if(!r?.fOper||!n)return;let h,T,a,l=0,i={},p=null,m="none",_="",o=r.fOper.split(";");const c=t=>{if(t!=m&&(p&&(p.attr("d",_),_="",p=null,m="none"),t))switch(m=t,p=e.draw_g.append("svg:path"),t){case"f":p.call(e.fillatt.func);break;case"l":p.call(e.lineatt.func).style("fill","none");break;case"m":p.call(e.markeratt.func)}},y=(t,x)=>{let f=0,s={_typename:"any"};for(let u=0;uf?d:void 0)),f=d}return s},B=t=>{for(;++t0?"L":"M")+n.x(r.fBuf[l++])+","+n.y(r.fBuf[l++]);"f"==h&&(_+="Z");continue;case"m":for(c(h),T=parseInt(o[t].slice(1)),e.markeratt.resetPos(),a=0;a1?i.fTextSize:e.getPadPainter().getPadHeight()*i.fTextSize,f=i.fTextAngle,s=o[t].slice(1),u=e.draw_g.append("svg:g");if(f>=360&&(f-=360*Math.floor(f/360)),e.startTextDrawing(i.fTextFont,x,u),"h"==h){let d="";for(a=0;aB(t))}continue;default:console.log(`unsupported operation ${h}`)}return Promise.resolve(!0)};return e.createG(),B(-1).then(()=>(c(),e))})()}static draw(e,r){return(0,O.Z)(function*(){let n=new b(e,r);return n.addToPadPrimitives(),n.redraw()})()}}}}]); -//# sourceMappingURL=15.4def682f3a97b1e2.js.map \ No newline at end of file diff --git a/docs/15.4def682f3a97b1e2.js.map b/docs/15.4def682f3a97b1e2.js.map deleted file mode 100644 index 39134022a..000000000 --- a/docs/15.4def682f3a97b1e2.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"15.4def682f3a97b1e2.js","mappings":"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","names":["TWebPaintingPainter","ObjectPainter","updateObject","obj","this","matchObjectType","assignObject","redraw","_this","getObject","func","getAxisToSvgFunc","fOper","oper","npoints","n","indx","attr","lastpath","lastkind","d","arr","split","check_attributes","kind","draw_g","append","call","fillatt","lineatt","style","markeratt","read_attr","str","names","lastp","_typename","k","length","p","indexOf","parseInt","slice","undefined","process","createAttLine","force","createAttFill","createAttMarker","fTextSize","x1","x","fBuf","y1","y","x2","y2","resetPos","create","height","getPadPainter","getPadHeight","angle","fTextAngle","txt","group","Math","floor","startTextDrawing","fTextFont","res","String","fromCharCode","drawText","align","fTextAlign","rotate","text","color","getColor","fTextColor","latex","finishTextDrawing","then","console","log","Promise","resolve","createG","static","dom","painter","addToPadPrimitives"],"sourceRoot":"webpack:///","sources":["../node_modules/jsroot/modules/draw/TWebPaintingPainter.mjs"],"sourcesContent":["import { getColor } from '../base/colors.mjs';\nimport { ObjectPainter } from '../base/ObjectPainter.mjs';\n\n\n/** @summary Draw direct TVirtualX commands into SVG\n * @private */\n\nclass TWebPaintingPainter extends ObjectPainter {\n\n /** @summary Update TWebPainting object */\n updateObject(obj) {\n if (!this.matchObjectType(obj)) return false;\n this.assignObject(obj);\n return true;\n }\n\n /** @summary draw TWebPainting object */\n async redraw() {\n\n const obj = this.getObject(), func = this.getAxisToSvgFunc();\n\n if (!obj?.fOper || !func) return;\n\n let indx = 0, attr = {}, lastpath = null, lastkind = 'none', d = '',\n oper, npoints, n, arr = obj.fOper.split(';');\n\n const check_attributes = kind => {\n if (kind == lastkind) return;\n\n if (lastpath) {\n lastpath.attr('d', d); // flush previous\n d = ''; lastpath = null; lastkind = 'none';\n }\n\n if (!kind) return;\n\n lastkind = kind;\n lastpath = this.draw_g.append('svg:path');\n switch (kind) {\n case 'f': lastpath.call(this.fillatt.func); break;\n case 'l': lastpath.call(this.lineatt.func).style('fill', 'none'); break;\n case 'm': lastpath.call(this.markeratt.func); break;\n }\n }, read_attr = (str, names) => {\n let lastp = 0, obj = { _typename: 'any' };\n for (let k = 0; k < names.length; ++k) {\n let p = str.indexOf(':', lastp+1);\n obj[names[k]] = parseInt(str.slice(lastp+1, (p > lastp) ? p : undefined));\n lastp = p;\n }\n return obj;\n }, process = k => {\n while (++k < arr.length) {\n oper = arr[k][0];\n switch (oper) {\n case 'z':\n this.createAttLine({ attr: read_attr(arr[k], ['fLineColor', 'fLineStyle', 'fLineWidth']), force: true });\n check_attributes();\n continue;\n case 'y':\n this.createAttFill({ attr: read_attr(arr[k], ['fFillColor', 'fFillStyle']), force: true });\n check_attributes();\n continue;\n case 'x':\n this.createAttMarker({ attr: read_attr(arr[k], ['fMarkerColor', 'fMarkerStyle', 'fMarkerSize']), force: true });\n check_attributes();\n continue;\n case 'o':\n attr = read_attr(arr[k], ['fTextColor', 'fTextFont', 'fTextSize', 'fTextAlign', 'fTextAngle']);\n if (attr.fTextSize < 0) attr.fTextSize *= -0.001;\n check_attributes();\n continue;\n case 'r':\n case 'b': {\n\n check_attributes((oper == 'b') ? 'f' : 'l');\n\n let x1 = func.x(obj.fBuf[indx++]),\n y1 = func.y(obj.fBuf[indx++]),\n x2 = func.x(obj.fBuf[indx++]),\n y2 = func.y(obj.fBuf[indx++]);\n\n d += `M${x1},${y1}h${x2-x1}v${y2-y1}h${x1-x2}z`;\n\n continue;\n }\n case 'l':\n case 'f': {\n\n check_attributes(oper);\n\n npoints = parseInt(arr[k].slice(1));\n\n for (n = 0; n < npoints; ++n)\n d += ((n > 0) ? 'L' : 'M') +\n func.x(obj.fBuf[indx++]) + ',' + func.y(obj.fBuf[indx++]);\n\n if (oper == 'f') d+='Z';\n\n continue;\n }\n\n case 'm': {\n\n check_attributes(oper);\n\n npoints = parseInt(arr[k].slice(1));\n\n this.markeratt.resetPos();\n for (n = 0; n < npoints; ++n)\n d += this.markeratt.create(func.x(obj.fBuf[indx++]), func.y(obj.fBuf[indx++]));\n\n continue;\n }\n\n case 'h':\n case 't': {\n if (attr.fTextSize) {\n\n check_attributes();\n\n let height = (attr.fTextSize > 1) ? attr.fTextSize : this.getPadPainter().getPadHeight() * attr.fTextSize,\n angle = attr.fTextAngle,\n txt = arr[k].slice(1),\n group = this.draw_g.append('svg:g');\n\n if (angle >= 360) angle -= Math.floor(angle/360) * 360;\n\n this.startTextDrawing(attr.fTextFont, height, group);\n\n if (oper == 'h') {\n let res = '';\n for (n = 0; n < txt.length; n += 2)\n res += String.fromCharCode(parseInt(txt.slice(n,n+2), 16));\n txt = res;\n }\n\n // todo - correct support of angle\n this.drawText({ align: attr.fTextAlign,\n x: func.x(obj.fBuf[indx++]),\n y: func.y(obj.fBuf[indx++]),\n rotate: -angle,\n text: txt,\n color: getColor(attr.fTextColor),\n latex: 0, draw_g: group });\n\n return this.finishTextDrawing(group).then(() => process(k));\n }\n continue;\n }\n\n default:\n console.log(`unsupported operation ${oper}`);\n }\n };\n\n return Promise.resolve(true);\n }\n\n this.createG();\n\n return process(-1).then(() => { check_attributes(); return this; });\n }\n\n static async draw(dom, obj) {\n let painter = new TWebPaintingPainter(dom, obj);\n painter.addToPadPrimitives();\n return painter.redraw();\n }\n\n} // class TWebPaintingPainter\n\nexport { TWebPaintingPainter };\n"],"x_google_ignoreList":[0]} \ No newline at end of file diff --git a/docs/15.9b5753ba71e4088a.js b/docs/15.9b5753ba71e4088a.js new file mode 100644 index 000000000..a1fc5388a --- /dev/null +++ b/docs/15.9b5753ba71e4088a.js @@ -0,0 +1,2 @@ +"use strict";(self.webpackChunkphoenix_app=self.webpackChunkphoenix_app||[]).push([[15],{15:(S,P,g)=>{g.r(P),g.d(P,{TWebPaintingPainter:()=>m});var O=g(5835),B=g(3038),M=g(6458);class m extends M.tK{updateObject(e){return!!this.matchObjectType(e)&&(this.assignObject(e),!0)}redraw(){var e=this;return(0,O.Z)(function*(){const r=e.getObject(),n=e.getAxisToSvgFunc();if(!r?.fOper||!n)return;let _,T,a,l=0,i={},h=null,y="none",d="",o=r.fOper.split(";");const c=t=>{if(t!=y&&(h&&(h.attr("d",d),d="",h=null,y="none"),t))switch(y=t,h=e.draw_g.append("svg:path"),t){case"f":h.call(e.fillatt.func);break;case"l":h.call(e.lineatt.func).style("fill","none");break;case"m":h.call(e.markeratt.func)}},b=(t,x)=>{let f=0,s={_typename:"any"};for(let u=0;uf?p:void 0)),f=p}return s},w=t=>{for(;++t0?"L":"M")+n.x(r.fBuf[l++])+","+n.y(r.fBuf[l++]);"f"==_&&(d+="Z");continue;case"m":for(c(_),T=parseInt(o[t].slice(1)),e.markeratt.resetPos(),a=0;a1?i.fTextSize:e.getPadPainter().getPadHeight()*i.fTextSize,f=i.fTextAngle,s=o[t].slice(1),u=e.draw_g.append("svg:g");if(f>=360&&(f-=360*Math.floor(f/360)),e.startTextDrawing(i.fTextFont,x,u),"h"==_){let p="";for(a=0;aw(t))}continue;default:console.log(`unsupported operation ${_}`)}return Promise.resolve(!0)};return e.createG(),w(-1).then(()=>(c(),e))})()}static draw(e,r){return(0,O.Z)(function*(){let n=new m(e,r);return n.addToPadPrimitives(),n.redraw()})()}}}}]); +//# sourceMappingURL=15.9b5753ba71e4088a.js.map \ No newline at end of file diff --git a/docs/15.9b5753ba71e4088a.js.map b/docs/15.9b5753ba71e4088a.js.map new file mode 100644 index 000000000..8b363ce66 --- /dev/null +++ b/docs/15.9b5753ba71e4088a.js.map @@ -0,0 +1 @@ +{"version":3,"file":"15.9b5753ba71e4088a.js","mappings":"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","names":["TWebPaintingPainter","ObjectPainter","updateObject","obj","this","matchObjectType","assignObject","redraw","_this","getObject","func","getAxisToSvgFunc","fOper","oper","npoints","n","indx","attr","lastpath","lastkind","d","arr","split","check_attributes","kind","draw_g","append","call","fillatt","lineatt","style","markeratt","read_attr","str","names","lastp","_typename","k","length","p","indexOf","parseInt","slice","undefined","process","createAttLine","force","createAttFill","createAttMarker","fTextSize","x1","x","fBuf","y1","y","x2","y2","resetPos","create","height","getPadPainter","getPadHeight","angle","fTextAngle","txt","group","Math","floor","startTextDrawing","fTextFont","res","String","fromCharCode","drawText","align","fTextAlign","rotate","text","color","getColor","fTextColor","latex","finishTextDrawing","then","console","log","Promise","resolve","createG","static","dom","painter","addToPadPrimitives"],"sourceRoot":"webpack:///","sources":["../node_modules/jsroot/modules/draw/TWebPaintingPainter.mjs"],"sourcesContent":["import { getColor } from '../base/colors.mjs';\nimport { ObjectPainter } from '../base/ObjectPainter.mjs';\n\n\n/** @summary Draw direct TVirtualX commands into SVG\n * @private */\n\nclass TWebPaintingPainter extends ObjectPainter {\n\n /** @summary Update TWebPainting object */\n updateObject(obj) {\n if (!this.matchObjectType(obj)) return false;\n this.assignObject(obj);\n return true;\n }\n\n /** @summary draw TWebPainting object */\n async redraw() {\n\n const obj = this.getObject(), func = this.getAxisToSvgFunc();\n\n if (!obj?.fOper || !func) return;\n\n let indx = 0, attr = {}, lastpath = null, lastkind = 'none', d = '',\n oper, npoints, n, arr = obj.fOper.split(';');\n\n const check_attributes = kind => {\n if (kind == lastkind) return;\n\n if (lastpath) {\n lastpath.attr('d', d); // flush previous\n d = ''; lastpath = null; lastkind = 'none';\n }\n\n if (!kind) return;\n\n lastkind = kind;\n lastpath = this.draw_g.append('svg:path');\n switch (kind) {\n case 'f': lastpath.call(this.fillatt.func); break;\n case 'l': lastpath.call(this.lineatt.func).style('fill', 'none'); break;\n case 'm': lastpath.call(this.markeratt.func); break;\n }\n }, read_attr = (str, names) => {\n let lastp = 0, obj = { _typename: 'any' };\n for (let k = 0; k < names.length; ++k) {\n let p = str.indexOf(':', lastp+1);\n obj[names[k]] = parseInt(str.slice(lastp+1, (p > lastp) ? p : undefined));\n lastp = p;\n }\n return obj;\n }, process = k => {\n while (++k < arr.length) {\n oper = arr[k][0];\n switch (oper) {\n case 'z':\n this.createAttLine({ attr: read_attr(arr[k], ['fLineColor', 'fLineStyle', 'fLineWidth']), force: true });\n check_attributes();\n continue;\n case 'y':\n this.createAttFill({ attr: read_attr(arr[k], ['fFillColor', 'fFillStyle']), force: true });\n check_attributes();\n continue;\n case 'x':\n this.createAttMarker({ attr: read_attr(arr[k], ['fMarkerColor', 'fMarkerStyle', 'fMarkerSize']), force: true });\n check_attributes();\n continue;\n case 'o':\n attr = read_attr(arr[k], ['fTextColor', 'fTextFont', 'fTextSize', 'fTextAlign', 'fTextAngle']);\n if (attr.fTextSize < 0) attr.fTextSize *= -0.001;\n check_attributes();\n continue;\n case 'r':\n case 'b': {\n\n check_attributes((oper == 'b') ? 'f' : 'l');\n\n let x1 = func.x(obj.fBuf[indx++]),\n y1 = func.y(obj.fBuf[indx++]),\n x2 = func.x(obj.fBuf[indx++]),\n y2 = func.y(obj.fBuf[indx++]);\n\n d += `M${x1},${y1}h${x2-x1}v${y2-y1}h${x1-x2}z`;\n\n continue;\n }\n case 'l':\n case 'f': {\n\n check_attributes(oper);\n\n npoints = parseInt(arr[k].slice(1));\n\n for (n = 0; n < npoints; ++n)\n d += ((n > 0) ? 'L' : 'M') +\n func.x(obj.fBuf[indx++]) + ',' + func.y(obj.fBuf[indx++]);\n\n if (oper == 'f') d+='Z';\n\n continue;\n }\n\n case 'm': {\n\n check_attributes(oper);\n\n npoints = parseInt(arr[k].slice(1));\n\n this.markeratt.resetPos();\n for (n = 0; n < npoints; ++n)\n d += this.markeratt.create(func.x(obj.fBuf[indx++]), func.y(obj.fBuf[indx++]));\n\n continue;\n }\n\n case 'h':\n case 't': {\n if (attr.fTextSize) {\n\n check_attributes();\n\n let height = (attr.fTextSize > 1) ? attr.fTextSize : this.getPadPainter().getPadHeight() * attr.fTextSize,\n angle = attr.fTextAngle,\n txt = arr[k].slice(1),\n group = this.draw_g.append('svg:g');\n\n if (angle >= 360) angle -= Math.floor(angle/360) * 360;\n\n this.startTextDrawing(attr.fTextFont, height, group);\n\n if (oper == 'h') {\n let res = '';\n for (n = 0; n < txt.length; n += 2)\n res += String.fromCharCode(parseInt(txt.slice(n,n+2), 16));\n txt = res;\n }\n\n // todo - correct support of angle\n this.drawText({ align: attr.fTextAlign,\n x: func.x(obj.fBuf[indx++]),\n y: func.y(obj.fBuf[indx++]),\n rotate: -angle,\n text: txt,\n color: getColor(attr.fTextColor),\n latex: 0, draw_g: group });\n\n return this.finishTextDrawing(group).then(() => process(k));\n }\n continue;\n }\n\n default:\n console.log(`unsupported operation ${oper}`);\n }\n };\n\n return Promise.resolve(true);\n }\n\n this.createG();\n\n return process(-1).then(() => { check_attributes(); return this; });\n }\n\n static async draw(dom, obj) {\n let painter = new TWebPaintingPainter(dom, obj);\n painter.addToPadPrimitives();\n return painter.redraw();\n }\n\n} // class TWebPaintingPainter\n\nexport { TWebPaintingPainter };\n"],"x_google_ignoreList":[0]} \ No newline at end of file diff --git a/docs/172.e4469fbbca37f633.js.map b/docs/172.e4469fbbca37f633.js.map deleted file mode 100644 index a7eb1cab1..000000000 --- a/docs/172.e4469fbbca37f633.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"172.e4469fbbca37f633.js","mappings":"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","names":["assignRAxisMethods","axis","_typename","fInvBinWidth","$dummy","fNBinsNoOver","fLow","min","max","GetNumBins","this","GetBinCoord","bin","FindBin","x","add","Math","floor","fBinBorders","length","indx","round","indx2","abs","k","GetBinCenter","GetBinLowEdge","getHImpl","obj","fHistImpl","fIO","RHistPainter","RObjectPainter","constructor","dom","histo","super","csstype","draw_content","nbinsx","nbinsy","accept_drops","mode3d","getHisto","isDisplayItem","getObject","fAxes","force","getBinContent","nx","fIndicies","dx","stepx","ny","dy","stepy","nz","dz","stepz","getBin","y","z","getBin0","fBinContent","getBinError","sqrt","_2","_0","_1","fStatistics","fSumWeightsSquared","decodeOptions","options","Hist","copyOptionsFrom","src","Mode3D","copyOptionsToOthers","forEachPainter","painter","isFunc","clear3DScene","fp","getFramePainter","create3DScene","cleanup","getDimension","scanContent","drawFrameAxes","main","_this","isMainPainter","cleanupAxes","xmin","xmax","ymin","ymax","zmin","zmax","setAxesRanges","getAxis","drawAxes","second_x","second_y","setAxes2Ranges","drawAxes2","createHistDrawAttributes","createv7AttFill","createv7AttLine","updateDisplayItem","fContMin","fContMinPos","fContMax","updateObject","origin","matchObjectType","horigin","hobj","fTitle","histogram_updated","name","getAxisBinTip","step","pmain","handle","x1","kind","axisAsText","x2","extractAxesProperties","ndim","nbinsz","addInteractivity","ismain","second_axis","processItemReply","reply","req","console","error","reqid","current_item_reqid","item","resolveFunc","drawingBins","reason","is_axes_zoomed","isStr","indexOf","_this2","v7NormalMode","prepareDraw","only_indexes","incomplete","Promise","v7SubmitRequest","bind","setTimeout","toggleStat","getSelectIndex","size","taxis","nbins","autoZoom","clickButton","funcname","zoom_xmin","zoom_xmax","zoom_ymin","zoom_ymax","zoom_zmin","zoom_zmax","unzoom","zoomChangedInteractive","toggleAxisLog","fillToolbar","not_shown","pp","getPadPainter","addPadButton","showPadButtons","get3DToolTip","tip","fName","title","ix","iy","value","lines","getBinTooltips","iz","createContour","palette","args","nlevels","gStyle","minbin","maxbin","zminpos","minposbin","scatter_plot","gminbin","gmaxbin","gminposbin","full_z_range","setFullRange","logz","scale_zmin","colzmin","scale_zmax","colzmax","changeValuesRange","menu","arg","prefix","isAxisZoomed","input","then","res","JSON","parse","isObject","Number","isFinite","zoom","fillContextMenu","addchk","fillHistContextMenu","getMainPainter","isTooltipAllowed","setTooltipAllowed","enable_highlight","highlightBin3D","render3D","FrontBox","BackBox","Zero","redrawPad","Lego","fillPaletteMenu","control","reset","addAttributesMenu","updatePaletteDraw","findPainterFor","undefined","drawPalette","addPaletteMenu","Palette","settings","parseInt","redraw","toggleMode3D","Surf","Error","Color","interactiveRedraw","rounding","extra","middle","right_extra","i","j","binz","binarea","xaxis","yaxis","hdim","i1","i2","j1","j2","k1","k2","stepi","stepj","stepk","sumz","xbar1","xbar2","ybar1","ybar2","grx","Array","gry","original","origx","origy","pixel_density","funcs","getGrFuncs","logx","use3d","size_x3d","logy","size_y3d","getHistPalette"],"sourceRoot":"webpack:///","sources":["../node_modules/jsroot/modules/hist2d/RHistPainter.mjs"],"sourcesContent":["import { gStyle, settings, isObject, isFunc, isStr } from '../core.mjs';\nimport { RObjectPainter } from '../base/RObjectPainter.mjs';\n\n\n/** @summary assign methods for the RAxis objects\n * @private */\nfunction assignRAxisMethods(axis) {\n if ((axis._typename == 'ROOT::Experimental::RAxisEquidistant') || (axis._typename == 'ROOT::Experimental::RAxisLabels')) {\n if (axis.fInvBinWidth === 0) {\n axis.$dummy = true;\n axis.fInvBinWidth = 1;\n axis.fNBinsNoOver = 0;\n axis.fLow = 0;\n }\n\n axis.min = axis.fLow;\n axis.max = axis.fLow + axis.fNBinsNoOver/axis.fInvBinWidth;\n axis.GetNumBins = function() { return this.fNBinsNoOver; }\n axis.GetBinCoord = function(bin) { return this.fLow + bin/this.fInvBinWidth; }\n axis.FindBin = function(x,add) { return Math.floor((x - this.fLow)*this.fInvBinWidth + add); }\n } else if (axis._typename == 'ROOT::Experimental::RAxisIrregular') {\n axis.min = axis.fBinBorders[0];\n axis.max = axis.fBinBorders[axis.fBinBorders.length - 1];\n axis.GetNumBins = function() { return this.fBinBorders.length; }\n axis.GetBinCoord = function(bin) {\n let indx = Math.round(bin);\n if (indx <= 0) return this.fBinBorders[0];\n if (indx >= this.fBinBorders.length) return this.fBinBorders[this.fBinBorders.length - 1];\n if (indx==bin) return this.fBinBorders[indx];\n let indx2 = (bin < indx) ? indx - 1 : indx + 1;\n return this.fBinBorders[indx] * Math.abs(bin-indx2) + this.fBinBorders[indx2] * Math.abs(bin-indx);\n }\n axis.FindBin = function(x,add) {\n for (let k = 1; k < this.fBinBorders.length; ++k)\n if (x < this.fBinBorders[k]) return Math.floor(k-1+add);\n return this.fBinBorders.length - 1;\n }\n }\n\n // to support some code from ROOT6 drawing\n\n axis.GetBinCenter = function(bin) { return this.GetBinCoord(bin-0.5); }\n axis.GetBinLowEdge = function(bin) { return this.GetBinCoord(bin-1); }\n}\n\n/** @summary Returns real histogram impl\n * @private */\nfunction getHImpl(obj) {\n return (obj && obj.fHistImpl) ? obj.fHistImpl.fIO : null;\n}\n\n\n/** @summary Base painter class for RHist objects\n *\n * @private\n */\n\nclass RHistPainter extends RObjectPainter {\n\n /** @summary Constructor\n * @param {object|string} dom - DOM element for drawing or element id\n * @param {object} histo - RHist object */\n constructor(dom, histo) {\n super(dom, histo);\n this.csstype = 'hist';\n this.draw_content = true;\n this.nbinsx = 0;\n this.nbinsy = 0;\n this.accept_drops = true; // indicate that one can drop other objects like doing Draw('same')\n this.mode3d = false;\n\n // initialize histogram methods\n this.getHisto(true);\n }\n\n /** @summary Returns true if RHistDisplayItem is used */\n isDisplayItem() {\n let obj = this.getObject();\n return obj && obj.fAxes ? true : false;\n }\n\n /** @summary get histogram */\n getHisto(force) {\n let obj = this.getObject(), histo = getHImpl(obj);\n\n if (histo && (!histo.getBinContent || force)) {\n if (histo.fAxes._2) {\n assignRAxisMethods(histo.fAxes._0);\n assignRAxisMethods(histo.fAxes._1);\n assignRAxisMethods(histo.fAxes._2);\n histo.getBin = function(x, y, z) { return (x-1) + this.fAxes._0.GetNumBins()*(y-1) + this.fAxes._0.GetNumBins()*this.fAxes._1.GetNumBins()*(z-1); }\n // FIXME: all normal ROOT methods uses indx+1 logic, but RHist has no underflow/overflow bins now\n histo.getBinContent = function(x, y, z) { return this.fStatistics.fBinContent[this.getBin(x, y, z)]; }\n histo.getBinError = function(x, y, z) {\n let bin = this.getBin(x, y, z);\n if (this.fStatistics.fSumWeightsSquared)\n return Math.sqrt(this.fStatistics.fSumWeightsSquared[bin]);\n return Math.sqrt(Math.abs(this.fStatistics.fBinContent[bin]));\n }\n } else if (histo.fAxes._1) {\n assignRAxisMethods(histo.fAxes._0);\n assignRAxisMethods(histo.fAxes._1);\n histo.getBin = function(x, y) { return (x-1) + this.fAxes._0.GetNumBins()*(y-1); }\n // FIXME: all normal ROOT methods uses indx+1 logic, but RHist has no underflow/overflow bins now\n histo.getBinContent = function(x, y) { return this.fStatistics.fBinContent[this.getBin(x, y)]; }\n histo.getBinError = function(x, y) {\n let bin = this.getBin(x, y);\n if (this.fStatistics.fSumWeightsSquared)\n return Math.sqrt(this.fStatistics.fSumWeightsSquared[bin]);\n return Math.sqrt(Math.abs(this.fStatistics.fBinContent[bin]));\n }\n } else {\n assignRAxisMethods(histo.fAxes._0);\n histo.getBin = function(x) { return x-1; }\n // FIXME: all normal ROOT methods uses indx+1 logic, but RHist has no underflow/overflow bins now\n histo.getBinContent = function(x) { return this.fStatistics.fBinContent[x-1]; }\n histo.getBinError = function(x) {\n if (this.fStatistics.fSumWeightsSquared)\n return Math.sqrt(this.fStatistics.fSumWeightsSquared[x-1]);\n return Math.sqrt(Math.abs(this.fStatistics.fBinContent[x-1]));\n }\n }\n } else if (!histo && obj && obj.fAxes) {\n // case of RHistDisplayItem\n\n histo = obj;\n\n if (!histo.getBinContent || force) {\n if (histo.fAxes.length == 3) {\n assignRAxisMethods(histo.fAxes[0]);\n assignRAxisMethods(histo.fAxes[1]);\n assignRAxisMethods(histo.fAxes[2]);\n\n histo.nx = histo.fIndicies[1] - histo.fIndicies[0];\n histo.dx = histo.fIndicies[0] + 1;\n histo.stepx = histo.fIndicies[2];\n\n histo.ny = histo.fIndicies[4] - histo.fIndicies[3];\n histo.dy = histo.fIndicies[3] + 1;\n histo.stepy = histo.fIndicies[5];\n\n histo.nz = histo.fIndicies[7] - histo.fIndicies[6];\n histo.dz = histo.fIndicies[6] + 1;\n histo.stepz = histo.fIndicies[8];\n\n // this is index in original histogram\n histo.getBin = function(x, y, z) { return (x-1) + this.fAxes[0].GetNumBins()*(y-1) + this.fAxes[0].GetNumBins()*this.fAxes[1].GetNumBins()*(z-1); }\n\n // this is index in current available data\n if ((histo.stepx > 1) || (histo.stepy > 1) || (histo.stepz > 1))\n histo.getBin0 = function(x, y, z) { return Math.floor((x-this.dx)/this.stepx) + this.nx/this.stepx*Math.floor((y-this.dy)/this.stepy) + this.nx/this.stepx*this.ny/this.stepy*Math.floor((z-this.dz)/this.stepz); }\n else\n histo.getBin0 = function(x, y, z) { return (x-this.dx) + this.nx*(y-this.dy) + this.nx*this.ny*(z-dz); }\n\n histo.getBinContent = function(x, y, z) { return this.fBinContent[this.getBin0(x, y, z)]; }\n histo.getBinError = function(x, y, z) { return Math.sqrt(Math.abs(this.getBinContent(x, y, z))); }\n\n\n } else if (histo.fAxes.length == 2) {\n assignRAxisMethods(histo.fAxes[0]);\n assignRAxisMethods(histo.fAxes[1]);\n\n histo.nx = histo.fIndicies[1] - histo.fIndicies[0];\n histo.dx = histo.fIndicies[0] + 1;\n histo.stepx = histo.fIndicies[2];\n\n histo.ny = histo.fIndicies[4] - histo.fIndicies[3];\n histo.dy = histo.fIndicies[3] + 1;\n histo.stepy = histo.fIndicies[5];\n\n // this is index in original histogram\n histo.getBin = function(x, y) { return (x-1) + this.fAxes[0].GetNumBins()*(y-1); }\n\n // this is index in current available data\n if ((histo.stepx > 1) || (histo.stepy > 1))\n histo.getBin0 = function(x, y) { return Math.floor((x-this.dx)/this.stepx) + this.nx/this.stepx*Math.floor((y-this.dy)/this.stepy); }\n else\n histo.getBin0 = function(x, y) { return (x-this.dx) + this.nx*(y-this.dy); }\n\n histo.getBinContent = function(x, y) { return this.fBinContent[this.getBin0(x, y)]; }\n histo.getBinError = function(x, y) { return Math.sqrt(Math.abs(this.getBinContent(x, y))); }\n } else {\n assignRAxisMethods(histo.fAxes[0]);\n histo.nx = histo.fIndicies[1] - histo.fIndicies[0];\n histo.dx = histo.fIndicies[0] + 1;\n histo.stepx = histo.fIndicies[2];\n\n histo.getBin = function(x) { return x-1; }\n if (histo.stepx > 1)\n histo.getBin0 = function(x) { return Math.floor((x-this.dx)/this.stepx); }\n else\n histo.getBin0 = function(x) { return x-this.dx; }\n histo.getBinContent = function(x) { return this.fBinContent[this.getBin0(x)]; }\n histo.getBinError = function(x) { return Math.sqrt(Math.abs(this.getBinContent(x))); }\n }\n }\n }\n return histo;\n }\n\n /** @summary Decode options */\n decodeOptions(/*opt*/) {\n if (!this.options) this.options = { Hist : 1 };\n }\n\n /** @summary Copy draw options from other painter */\n copyOptionsFrom(src) {\n if (src === this) return;\n let o = this.options, o0 = src.options;\n o.Mode3D = o0.Mode3D;\n }\n\n /** @summary copy draw options to all other histograms in the pad*/\n copyOptionsToOthers() {\n this.forEachPainter(painter => {\n if ((painter !== this) && isFunc(painter.copyOptionsFrom))\n painter.copyOptionsFrom(this);\n }, 'objects');\n }\n\n /** @summary Clear 3d drawings - if any */\n clear3DScene() {\n let fp = this.getFramePainter();\n if (isFunc(fp?.create3DScene))\n fp.create3DScene(-1);\n this.mode3d = false;\n }\n\n /** @summary Cleanup hist painter */\n cleanup() {\n this.clear3DScene();\n\n delete this.options;\n\n super.cleanup();\n }\n\n /** @summary Returns histogram dimension */\n getDimension() { return 1; }\n\n /** @summary Scan histogram content\n * @abstract */\n scanContent(/*when_axis_changed*/) {\n // function will be called once new histogram or\n // new histogram content is assigned\n // one should find min,max,nbins, maxcontent values\n // if when_axis_changed === true specified, content will be scanned after axis zoom changed\n }\n\n /** @summary Draw axes */\n async drawFrameAxes() {\n // return true when axes was drawn\n let main = this.getFramePainter();\n if (!main)\n return false;\n\n if (!this.draw_content)\n return true;\n\n if (!this.isMainPainter()) {\n if (!this.options.second_x && !this.options.second_y)\n return true;\n\n main.setAxes2Ranges(this.options.second_x, this.getAxis('x'), this.xmin, this.xmax, this.options.second_y, this.getAxis('y'), this.ymin, this.ymax);\n return main.drawAxes2(this.options.second_x, this.options.second_y);\n }\n\n main.cleanupAxes();\n main.xmin = main.xmax = 0;\n main.ymin = main.ymax = 0;\n main.zmin = main.zmax = 0;\n main.setAxesRanges(this.getAxis('x'), this.xmin, this.xmax, this.getAxis('y'), this.ymin, this.ymax, this.getAxis('z'), this.zmin, this.zmax);\n return main.drawAxes();\n }\n\n /** @summary create attributes */\n createHistDrawAttributes() {\n this.createv7AttFill();\n this.createv7AttLine();\n }\n\n /** @summary update display item */\n updateDisplayItem(obj, src) {\n if (!obj || !src) return false;\n\n obj.fAxes = src.fAxes;\n obj.fIndicies = src.fIndicies;\n obj.fBinContent = src.fBinContent;\n obj.fContMin = src.fContMin;\n obj.fContMinPos = src.fContMinPos;\n obj.fContMax = src.fContMax;\n\n // update histogram attributes\n this.getHisto(true);\n\n return true;\n }\n\n /** @summary update histogram object */\n updateObject(obj /*, opt*/) {\n\n let origin = this.getObject();\n\n if (obj !== origin) {\n\n if (!this.matchObjectType(obj)) return false;\n\n if (this.isDisplayItem()) {\n\n this.updateDisplayItem(origin, obj);\n\n } else {\n\n let horigin = getHImpl(origin),\n hobj = getHImpl(obj);\n\n if (!horigin || !hobj) return false;\n\n // make it easy - copy statistics without axes\n horigin.fStatistics = hobj.fStatistics;\n\n origin.fTitle = obj.fTitle;\n }\n }\n\n this.scanContent();\n\n this.histogram_updated = true; // indicate that object updated\n\n return true;\n }\n\n /** @summary Get axis object */\n getAxis(name) {\n let histo = this.getHisto(), obj = this.getObject(), axis = null;\n\n if (obj && obj.fAxes) {\n switch(name) {\n case 'x': axis = obj.fAxes[0]; break;\n case 'y': axis = obj.fAxes[1]; break;\n case 'z': axis = obj.fAxes[2]; break;\n default: axis = obj.fAxes[0]; break;\n }\n } else if (histo && histo.fAxes) {\n switch(name) {\n case 'x': axis = histo.fAxes._0; break;\n case 'y': axis = histo.fAxes._1; break;\n case 'z': axis = histo.fAxes._2; break;\n default: axis = histo.fAxes._0; break;\n }\n }\n\n if (axis && !axis.GetBinCoord)\n assignRAxisMethods(axis);\n\n return axis;\n }\n\n /** @summary Get tip text for axis bin */\n getAxisBinTip(name, bin, step) {\n let pmain = this.getFramePainter(),\n handle = pmain[name+'_handle'],\n axis = this.getAxis(name),\n x1 = axis.GetBinCoord(bin);\n\n if (handle.kind === 'labels')\n return pmain.axisAsText(name, x1);\n\n let x2 = axis.GetBinCoord(bin+(step || 1));\n\n if (handle.kind === 'time')\n return pmain.axisAsText(name, (x1+x2)/2);\n\n return '[' + pmain.axisAsText(name, x1) + ', ' + pmain.axisAsText(name, x2) + ')';\n }\n\n /** @summary Extract axes ranges and bins numbers\n * @desc Also here ensured that all axes objects got their necessary methods */\n extractAxesProperties(ndim) {\n\n let histo = this.getHisto();\n if (!histo) return;\n\n this.nbinsx = this.nbinsy = this.nbinsz = 0;\n\n let axis = this.getAxis('x');\n this.nbinsx = axis.GetNumBins();\n this.xmin = axis.min;\n this.xmax = axis.max;\n\n if (ndim < 2) return;\n axis = this.getAxis('y');\n this.nbinsy = axis.GetNumBins();\n this.ymin = axis.min;\n this.ymax = axis.max;\n\n if (ndim < 3) return;\n axis = this.getAxis('z');\n this.nbinsz = axis.GetNumBins();\n this.zmin = axis.min;\n this.zmax = axis.max;\n }\n\n /** @summary Add interactive features, only main painter does it */\n addInteractivity() {\n // only first painter in list allowed to add interactive functionality to the frame\n\n let ismain = this.isMainPainter(),\n second_axis = this.options.second_x || this.options.second_y,\n fp = ismain || second_axis ? this.getFramePainter() : null;\n return fp ? fp.addInteractivity(!ismain && second_axis) : true;\n }\n\n /** @summary Process item reply */\n processItemReply(reply, req) {\n if (!this.isDisplayItem())\n return console.error('Get item when display normal histogram');\n\n if (req.reqid === this.current_item_reqid) {\n\n if (reply !== null) {\n this.updateDisplayItem(this.getObject(), reply.item);\n }\n\n req.resolveFunc(true);\n }\n }\n\n /** @summary Special method to request bins from server if existing data insufficient\n * @return {Promise} when ready */\n async drawingBins(reason) {\n\n let is_axes_zoomed = false;\n if (reason && isStr(reason) && (reason.indexOf('zoom') == 0)) {\n if (reason.indexOf('0') > 0) is_axes_zoomed = true;\n if ((this.getDimension() > 1) && (reason.indexOf('1') > 0)) is_axes_zoomed = true;\n if ((this.getDimension() > 2) && (reason.indexOf('2') > 0)) is_axes_zoomed = true;\n }\n\n if (this.isDisplayItem() && is_axes_zoomed && this.v7NormalMode()) {\n\n let handle = this.prepareDraw({ only_indexes: true });\n\n // submit request if histogram data not enough for display\n if (handle.incomplete)\n return new Promise(resolveFunc => {\n // use empty kind to always submit request\n let req = this.v7SubmitRequest('', { _typename: 'ROOT::Experimental::RHistDrawableBase::RRequest' },\n this.processItemReply.bind(this));\n if (req) {\n this.current_item_reqid = req.reqid; // ignore all previous requests, only this one will be processed\n req.resolveFunc = resolveFunc;\n setTimeout(this.processItemReply.bind(this, null, req), 1000); // after 1 s draw something that we can\n } else {\n resolveFunc(true);\n }\n });\n }\n\n return true;\n }\n\n /** @summary Toggle statbox drawing\n * @desc Not yet implemented */\n toggleStat(/*arg*/) {}\n\n /** @summary get selected index for axis */\n getSelectIndex(axis, size, add) {\n // be aware - here indexes starts from 0\n let indx = 0,\n taxis = this.getAxis(axis),\n nbins = this['nbins'+axis] || 0;\n\n if (this.options.second_x && axis == 'x') axis = 'x2';\n if (this.options.second_y && axis == 'y') axis = 'y2';\n\n let main = this.getFramePainter(),\n min = main ? main['zoom_' + axis + 'min'] : 0,\n max = main ? main['zoom_' + axis + 'max'] : 0;\n\n if ((min !== max) && taxis) {\n if (size == 'left')\n indx = taxis.FindBin(min, add || 0);\n else\n indx = taxis.FindBin(max, (add || 0) + 0.5);\n if (indx < 0) indx = 0; else if (indx>nbins) indx = nbins;\n } else {\n indx = (size == 'left') ? 0 : nbins;\n }\n\n return indx;\n }\n\n /** @summary Auto zoom into histogram non-empty range\n * @abstract */\n autoZoom() {}\n\n /** @summary Process click on histogram-defined buttons */\n clickButton(funcname) {\n // TODO: move to frame painter\n switch(funcname) {\n case 'ToggleZoom':\n if ((this.zoom_xmin !== this.zoom_xmax) || (this.zoom_ymin !== this.zoom_ymax) || (this.zoom_zmin !== this.zoom_zmax)) {\n this.unzoom();\n this.getFramePainter().zoomChangedInteractive('reset');\n return true;\n }\n if (this.draw_content) {\n this.autoZoom();\n return true;\n }\n break;\n case 'ToggleLogX': this.getFramePainter().toggleAxisLog('x'); break;\n case 'ToggleLogY': this.getFramePainter().toggleAxisLog('y'); break;\n case 'ToggleLogZ': this.getFramePainter().toggleAxisLog('z'); break;\n case 'ToggleStatBox': this.toggleStat(); return true;\n }\n return false;\n }\n\n /** @summary Fill pad toolbar with hist-related functions */\n fillToolbar(not_shown) {\n let pp = this.getPadPainter();\n if (!pp) return;\n\n pp.addPadButton('auto_zoom', 'Toggle between unzoom and autozoom-in', 'ToggleZoom', 'Ctrl *');\n pp.addPadButton('arrow_right', 'Toggle log x', 'ToggleLogX', 'PageDown');\n pp.addPadButton('arrow_up', 'Toggle log y', 'ToggleLogY', 'PageUp');\n if (this.getDimension() > 1)\n pp.addPadButton('arrow_diag', 'Toggle log z', 'ToggleLogZ');\n if (this.draw_content)\n pp.addPadButton('statbox', 'Toggle stat box', 'ToggleStatBox');\n if (!not_shown) pp.showPadButtons();\n }\n\n /** @summary get tool tips used in 3d mode */\n get3DToolTip(indx) {\n let histo = this.getHisto(),\n tip = { bin: indx, name: histo.fName || 'histo', title: histo.fTitle };\n switch (this.getDimension()) {\n case 1:\n tip.ix = indx + 1; tip.iy = 1;\n tip.value = histo.getBinContent(tip.ix);\n tip.error = histo.getBinError(tip.ix);\n tip.lines = this.getBinTooltips(indx-1);\n break;\n case 2:\n tip.ix = (indx % this.nbinsx) + 1;\n tip.iy = (indx - (tip.ix - 1)) / this.nbinsx + 1;\n tip.value = histo.getBinContent(tip.ix, tip.iy);\n tip.error = histo.getBinError(tip.ix, tip.iy);\n tip.lines = this.getBinTooltips(tip.ix-1, tip.iy-1);\n break;\n case 3:\n tip.ix = indx % this.nbinsx + 1;\n tip.iy = ((indx - (tip.ix - 1)) / this.nbinsx) % this.nbinsy + 1;\n tip.iz = (indx - (tip.ix - 1) - (tip.iy - 1) * this.nbinsx) / this.nbinsx / this.nbinsy + 1;\n tip.value = histo.getBinContent(tip.ix, tip.iy, tip.iz);\n tip.error = histo.getBinError(tip.ix, tip.iy, tip.iz);\n tip.lines = this.getBinTooltips(tip.ix-1, tip.iy-1, tip.iz-1);\n break;\n }\n\n return tip;\n }\n\n /** @summary Create contour levels for currently selected Z range */\n createContour(main, palette, args) {\n if (!main || !palette) return;\n\n if (!args) args = {};\n\n let nlevels = gStyle.fNumberContours,\n zmin = this.minbin, zmax = this.maxbin, zminpos = this.minposbin;\n\n if (args.scatter_plot) {\n if (nlevels > 50) nlevels = 50;\n zmin = this.minposbin;\n }\n\n if (zmin === zmax) { zmin = this.gminbin; zmax = this.gmaxbin; zminpos = this.gminposbin; }\n\n if (this.getDimension() < 3) {\n if (main.zoom_zmin !== main.zoom_zmax) {\n zmin = main.zoom_zmin;\n zmax = main.zoom_zmax;\n } else if (args.full_z_range) {\n zmin = main.zmin;\n zmax = main.zmax;\n }\n }\n\n palette.setFullRange(main.zmin, main.zmax);\n palette.createContour(main.logz, nlevels, zmin, zmax, zminpos);\n\n if (this.getDimension() < 3) {\n main.scale_zmin = palette.colzmin;\n main.scale_zmax = palette.colzmax;\n }\n }\n\n /** @summary Start dialog to modify range of axis where histogram values are displayed */\n changeValuesRange(menu, arg) {\n let pmain = this.getFramePainter();\n if (!pmain) return;\n let prefix = pmain.isAxisZoomed(arg) ? 'zoom_' + arg : arg,\n curr = '[' + pmain[prefix+'min'] + ',' + pmain[prefix+'max'] + ']';\n menu.input('Enter values range for axis ' + arg + ' like [0,100] or empty string to unzoom', curr).then(res => {\n res = res ? JSON.parse(res) : [];\n if (!isObject(res) || (res.length != 2) || !Number.isFinite(res[0]) || !Number.isFinite(res[1]))\n pmain.unzoom(arg);\n else\n pmain.zoom(arg, res[0], res[1]);\n });\n }\n\n /** @summary Fill histogram context menu */\n fillContextMenu(menu) {\n\n menu.add('header:v7histo::anyname');\n\n if (this.draw_content) {\n menu.addchk(this.toggleStat('only-check'), 'Show statbox', () => this.toggleStat());\n\n if (this.getDimension() == 2)\n menu.add('Values range', () => this.changeValuesRange(menu, 'z'));\n\n if (isFunc(this.fillHistContextMenu))\n this.fillHistContextMenu(menu);\n }\n\n let fp = this.getFramePainter();\n\n if (this.options.Mode3D) {\n // menu for 3D drawings\n\n if (menu.size() > 0)\n menu.add('separator');\n\n let main = this.getMainPainter() || this;\n\n menu.addchk(main.isTooltipAllowed(), 'Show tooltips', () => main.setTooltipAllowed('toggle'));\n\n menu.addchk(fp.enable_highlight, 'Highlight bins', () => {\n fp.enable_highlight = !fp.enable_highlight;\n if (!fp.enable_highlight && main.highlightBin3D && main.mode3d) main.highlightBin3D(null);\n });\n\n if (isFunc(fp?.render3D)) {\n menu.addchk(main.options.FrontBox, 'Front box', () => {\n main.options.FrontBox = !main.options.FrontBox;\n fp.render3D();\n });\n menu.addchk(main.options.BackBox, 'Back box', () => {\n main.options.BackBox = !main.options.BackBox;\n fp.render3D();\n });\n }\n\n if (this.draw_content) {\n menu.addchk(!this.options.Zero, 'Suppress zeros', () => {\n this.options.Zero = !this.options.Zero;\n this.redrawPad();\n });\n\n if ((this.options.Lego == 12) || (this.options.Lego == 14)) {\n if (this.fillPaletteMenu)\n this.fillPaletteMenu(menu);\n }\n }\n\n if (isFunc(main.control?.reset))\n menu.add('Reset camera', () => main.control.reset());\n }\n\n menu.addAttributesMenu(this);\n\n if (this.histogram_updated && fp.zoomChangedInteractive())\n menu.add('Let update zoom', () => fp.zoomChangedInteractive('reset'));\n\n return true;\n }\n\n /** @summary Update palette drawing */\n updatePaletteDraw() {\n if (this.isMainPainter())\n this.getPadPainter().findPainterFor(undefined, undefined, 'ROOT::Experimental::RPaletteDrawable')?.drawPalette();\n }\n\n /** @summary Fill menu entries for palette */\n fillPaletteMenu(menu) {\n menu.addPaletteMenu(this.options.Palette || settings.Palette, arg => {\n // TODO: rewrite for RPalette functionality\n this.options.Palette = parseInt(arg);\n this.redraw(); // redraw histogram\n });\n }\n\n /** @summary Toggle 3D drawing mode */\n toggleMode3D() {\n this.options.Mode3D = !this.options.Mode3D;\n\n if (this.options.Mode3D) {\n if (!this.options.Surf && !this.options.Lego && !this.options.Error) {\n if ((this.nbinsx>=50) || (this.nbinsy>=50))\n this.options.Lego = this.options.Color ? 14 : 13;\n else\n this.options.Lego = this.options.Color ? 12 : 1;\n\n this.options.Zero = false; // do not show zeros by default\n }\n }\n\n this.copyOptionsToOthers();\n this.interactiveRedraw('pad', 'drawopt');\n }\n\n /** @summary Calculate histogram inidicies and axes values for each visible bin */\n prepareDraw(args) {\n\n if (!args) args = { rounding: true, extra: 0, middle: 0 };\n\n if (args.extra === undefined) args.extra = 0;\n if (args.right_extra === undefined) args.right_extra = args.extra;\n if (args.middle === undefined) args.middle = 0;\n\n let histo = this.getHisto(), xaxis = this.getAxis('x'), yaxis = this.getAxis('y'),\n pmain = this.getFramePainter(),\n hdim = this.getDimension(),\n i, j, x, y, binz, binarea,\n res = {\n i1: this.getSelectIndex('x', 'left', 0 - args.extra),\n i2: this.getSelectIndex('x', 'right', 1 + args.right_extra),\n j1: (hdim < 2) ? 0 : this.getSelectIndex('y', 'left', 0 - args.extra),\n j2: (hdim < 2) ? 1 : this.getSelectIndex('y', 'right', 1 + args.right_extra),\n k1: (hdim < 3) ? 0 : this.getSelectIndex('z', 'left', 0 - args.extra),\n k2: (hdim < 3) ? 1 : this.getSelectIndex('z', 'right', 1 + args.right_extra),\n stepi: 1, stepj: 1, stepk: 1,\n min: 0, max: 0, sumz: 0, xbar1: 0, xbar2: 1, ybar1: 0, ybar2: 1\n };\n\n if (this.isDisplayItem() && histo.fIndicies) {\n if (res.i1 < histo.fIndicies[0]) { res.i1 = histo.fIndicies[0]; res.incomplete = true; }\n if (res.i2 > histo.fIndicies[1]) { res.i2 = histo.fIndicies[1]; res.incomplete = true; }\n res.stepi = histo.fIndicies[2];\n if (res.stepi > 1) res.incomplete = true;\n if ((hdim > 1) && (histo.fIndicies.length > 5)) {\n if (res.j1 < histo.fIndicies[3]) { res.j1 = histo.fIndicies[3]; res.incomplete = true; }\n if (res.j2 > histo.fIndicies[4]) { res.j2 = histo.fIndicies[4]; res.incomplete = true; }\n res.stepj = histo.fIndicies[5];\n if (res.stepj > 1) res.incomplete = true;\n }\n if ((hdim > 2) && (histo.fIndicies.length > 8)) {\n if (res.k1 < histo.fIndicies[6]) { res.k1 = histo.fIndicies[6]; res.incomplete = true; }\n if (res.k2 > histo.fIndicies[7]) { res.k2 = histo.fIndicies[7]; res.incomplete = true; }\n res.stepk = histo.fIndicies[8];\n if (res.stepk > 1) res.incomplete = true;\n }\n }\n\n if (args.only_indexes) return res;\n\n // no need for Float32Array, plain Array is 10% faster\n // reserve more places to avoid complex boundary checks\n\n res.grx = new Array(res.i2+res.stepi+1);\n res.gry = new Array(res.j2+res.stepj+1);\n\n if (args.original) {\n res.original = true;\n res.origx = new Array(res.i2+1);\n res.origy = new Array(res.j2+1);\n }\n\n if (args.pixel_density) args.rounding = true;\n\n let funcs = pmain.getGrFuncs(this.options.second_x, this.options.second_y);\n\n // calculate graphical coordinates in advance\n for (i = res.i1; i <= res.i2; ++i) {\n x = xaxis.GetBinCoord(i + args.middle);\n if (funcs.logx && (x <= 0)) { res.i1 = i+1; continue; }\n if (res.origx) res.origx[i] = x;\n res.grx[i] = funcs.grx(x);\n if (args.rounding) res.grx[i] = Math.round(res.grx[i]);\n\n if (args.use3d) {\n if (res.grx[i] < -pmain.size_x3d) { res.i1 = i; res.grx[i] = -pmain.size_x3d; }\n if (res.grx[i] > pmain.size_x3d) { res.i2 = i; res.grx[i] = pmain.size_x3d; }\n }\n }\n\n if (args.use3d) {\n if ((res.i1 < res.i2-2) && (res.grx[res.i1] == res.grx[res.i1+1])) res.i1++;\n if ((res.i1 < res.i2-2) && (res.grx[res.i2-1] == res.grx[res.i2])) res.i2--;\n }\n\n // copy last valid value to higher indicies\n while (i < res.i2 + res.stepi + 1)\n res.grx[i++] = res.grx[res.i2];\n\n if (hdim === 1) {\n res.gry[0] = funcs.gry(0);\n res.gry[1] = funcs.gry(1);\n } else\n for (j = res.j1; j <= res.j2; ++j) {\n y = yaxis.GetBinCoord(j + args.middle);\n if (funcs.logy && (y <= 0)) { res.j1 = j+1; continue; }\n if (res.origy) res.origy[j] = y;\n res.gry[j] = funcs.gry(y);\n if (args.rounding) res.gry[j] = Math.round(res.gry[j]);\n\n if (args.use3d) {\n if (res.gry[j] < -pmain.size_y3d) { res.j1 = j; res.gry[j] = -pmain.size_y3d; }\n if (res.gry[j] > pmain.size_y3d) { res.j2 = j; res.gry[j] = pmain.size_y3d; }\n }\n }\n\n if (args.use3d && (hdim > 1)) {\n if ((res.j1 < res.j2-2) && (res.gry[res.j1] == res.gry[res.j1+1])) res.j1++;\n if ((res.j1 < res.j2-2) && (res.gry[res.j2-1] == res.gry[res.j2])) res.j2--;\n }\n\n // copy last valid value to higher indicies\n while ((hdim > 1) && (j < res.j2 + res.stepj + 1))\n res.gry[j++] = res.gry[res.j2];\n\n // find min/max values in selected range\n this.maxbin = this.minbin = this.minposbin = null;\n\n for (i = res.i1; i < res.i2; i += res.stepi) {\n for (j = res.j1; j < res.j2; j += res.stepj) {\n binz = histo.getBinContent(i + 1, j + 1);\n if (!Number.isFinite(binz)) continue;\n res.sumz += binz;\n if (args.pixel_density) {\n binarea = (res.grx[i+res.stepi]-res.grx[i])*(res.gry[j]-res.gry[j+res.stepj]);\n if (binarea <= 0) continue;\n res.max = Math.max(res.max, binz);\n if ((binz > 0) && ((binz < res.min) || (res.min === 0))) res.min = binz;\n binz = binz/binarea;\n }\n if (this.maxbin === null) {\n this.maxbin = this.minbin = binz;\n } else {\n this.maxbin = Math.max(this.maxbin, binz);\n this.minbin = Math.min(this.minbin, binz);\n }\n if (binz > 0)\n if ((this.minposbin === null) || (binz < this.minposbin)) this.minposbin = binz;\n }\n }\n\n res.palette = pmain.getHistPalette();\n\n if (res.palette)\n this.createContour(pmain, res.palette, args);\n\n return res;\n }\n\n} // class RHistPainter\n\nexport { RHistPainter };\n"],"x_google_ignoreList":[0]} \ No newline at end of file diff --git a/docs/172.e4469fbbca37f633.js b/docs/172.e5a544e7e357d142.js similarity index 98% rename from docs/172.e4469fbbca37f633.js rename to docs/172.e5a544e7e357d142.js index eff1aedf4..357bdf04f 100644 --- a/docs/172.e4469fbbca37f633.js +++ b/docs/172.e5a544e7e357d142.js @@ -1,2 +1,2 @@ -"use strict";(self.webpackChunkphoenix_app=self.webpackChunkphoenix_app||[]).push([[172],{8172:(A,_,c)=>{c.d(_,{n:()=>z});var y=c(4788),u=c(9542),b=c(3029);function d(f){"ROOT::Experimental::RAxisEquidistant"==f._typename||"ROOT::Experimental::RAxisLabels"==f._typename?(0===f.fInvBinWidth&&(f.$dummy=!0,f.fInvBinWidth=1,f.fNBinsNoOver=0,f.fLow=0),f.min=f.fLow,f.max=f.fLow+f.fNBinsNoOver/f.fInvBinWidth,f.GetNumBins=function(){return this.fNBinsNoOver},f.GetBinCoord=function(i){return this.fLow+i/this.fInvBinWidth},f.FindBin=function(i,e){return Math.floor((i-this.fLow)*this.fInvBinWidth+e)}):"ROOT::Experimental::RAxisIrregular"==f._typename&&(f.min=f.fBinBorders[0],f.max=f.fBinBorders[f.fBinBorders.length-1],f.GetNumBins=function(){return this.fBinBorders.length},f.GetBinCoord=function(i){let e=Math.round(i);if(e<=0)return this.fBinBorders[0];if(e>=this.fBinBorders.length)return this.fBinBorders[this.fBinBorders.length-1];if(e==i)return this.fBinBorders[e];let t=i1||t.stepy>1||t.stepz>1?function(s,o,r){return Math.floor((s-this.dx)/this.stepx)+this.nx/this.stepx*Math.floor((o-this.dy)/this.stepy)+this.nx/this.stepx*this.ny/this.stepy*Math.floor((r-this.dz)/this.stepz)}:function(s,o,r){return s-this.dx+this.nx*(o-this.dy)+this.nx*this.ny*(r-dz)},t.getBinContent=function(s,o,r){return this.fBinContent[this.getBin0(s,o,r)]},t.getBinError=function(s,o,r){return Math.sqrt(Math.abs(this.getBinContent(s,o,r)))}):2==t.fAxes.length?(d(t.fAxes[0]),d(t.fAxes[1]),t.nx=t.fIndicies[1]-t.fIndicies[0],t.dx=t.fIndicies[0]+1,t.stepx=t.fIndicies[2],t.ny=t.fIndicies[4]-t.fIndicies[3],t.dy=t.fIndicies[3]+1,t.stepy=t.fIndicies[5],t.getBin=function(s,o){return s-1+this.fAxes[0].GetNumBins()*(o-1)},t.getBin0=t.stepx>1||t.stepy>1?function(s,o){return Math.floor((s-this.dx)/this.stepx)+this.nx/this.stepx*Math.floor((o-this.dy)/this.stepy)}:function(s,o){return s-this.dx+this.nx*(o-this.dy)},t.getBinContent=function(s,o){return this.fBinContent[this.getBin0(s,o)]},t.getBinError=function(s,o){return Math.sqrt(Math.abs(this.getBinContent(s,o)))}):(d(t.fAxes[0]),t.nx=t.fIndicies[1]-t.fIndicies[0],t.dx=t.fIndicies[0]+1,t.stepx=t.fIndicies[2],t.getBin=function(s){return s-1},t.getBin0=t.stepx>1?function(s){return Math.floor((s-this.dx)/this.stepx)}:function(s){return s-this.dx},t.getBinContent=function(s){return this.fBinContent[this.getBin0(s)]},t.getBinError=function(s){return Math.sqrt(Math.abs(this.getBinContent(s)))}))):t.fAxes._2?(d(t.fAxes._0),d(t.fAxes._1),d(t.fAxes._2),t.getBin=function(s,o,r){return s-1+this.fAxes._0.GetNumBins()*(o-1)+this.fAxes._0.GetNumBins()*this.fAxes._1.GetNumBins()*(r-1)},t.getBinContent=function(s,o,r){return this.fStatistics.fBinContent[this.getBin(s,o,r)]},t.getBinError=function(s,o,r){let h=this.getBin(s,o,r);return this.fStatistics.fSumWeightsSquared?Math.sqrt(this.fStatistics.fSumWeightsSquared[h]):Math.sqrt(Math.abs(this.fStatistics.fBinContent[h]))}):t.fAxes._1?(d(t.fAxes._0),d(t.fAxes._1),t.getBin=function(s,o){return s-1+this.fAxes._0.GetNumBins()*(o-1)},t.getBinContent=function(s,o){return this.fStatistics.fBinContent[this.getBin(s,o)]},t.getBinError=function(s,o){let r=this.getBin(s,o);return this.fStatistics.fSumWeightsSquared?Math.sqrt(this.fStatistics.fSumWeightsSquared[r]):Math.sqrt(Math.abs(this.fStatistics.fBinContent[r]))}):(d(t.fAxes._0),t.getBin=function(s){return s-1},t.getBinContent=function(s){return this.fStatistics.fBinContent[s-1]},t.getBinError=function(s){return this.fStatistics.fSumWeightsSquared?Math.sqrt(this.fStatistics.fSumWeightsSquared[s-1]):Math.sqrt(Math.abs(this.fStatistics.fBinContent[s-1]))}),t}decodeOptions(){this.options||(this.options={Hist:1})}copyOptionsFrom(i){i!==this&&(this.options.Mode3D=i.options.Mode3D)}copyOptionsToOthers(){this.forEachPainter(i=>{i!==this&&(0,u.isFunc)(i.copyOptionsFrom)&&i.copyOptionsFrom(this)},"objects")}clear3DScene(){let i=this.getFramePainter();(0,u.isFunc)(i?.create3DScene)&&i.create3DScene(-1),this.mode3d=!1}cleanup(){this.clear3DScene(),delete this.options,super.cleanup()}getDimension(){return 1}scanContent(){}drawFrameAxes(){var i=this;return(0,y.Z)(function*(){let e=i.getFramePainter();return!!e&&(!i.draw_content||(i.isMainPainter()?(e.cleanupAxes(),e.xmin=e.xmax=0,e.ymin=e.ymax=0,e.zmin=e.zmax=0,e.setAxesRanges(i.getAxis("x"),i.xmin,i.xmax,i.getAxis("y"),i.ymin,i.ymax,i.getAxis("z"),i.zmin,i.zmax),e.drawAxes()):!i.options.second_x&&!i.options.second_y||(e.setAxes2Ranges(i.options.second_x,i.getAxis("x"),i.xmin,i.xmax,i.options.second_y,i.getAxis("y"),i.ymin,i.ymax),e.drawAxes2(i.options.second_x,i.options.second_y))))})()}createHistDrawAttributes(){this.createv7AttFill(),this.createv7AttLine()}updateDisplayItem(i,e){return!(!i||!e||(i.fAxes=e.fAxes,i.fIndicies=e.fIndicies,i.fBinContent=e.fBinContent,i.fContMin=e.fContMin,i.fContMinPos=e.fContMinPos,i.fContMax=e.fContMax,this.getHisto(!0),0))}updateObject(i){let e=this.getObject();if(i!==e){if(!this.matchObjectType(i))return!1;if(this.isDisplayItem())this.updateDisplayItem(e,i);else{let t=p(e),s=p(i);if(!t||!s)return!1;t.fStatistics=s.fStatistics,e.fTitle=i.fTitle}}return this.scanContent(),this.histogram_updated=!0,!0}getAxis(i){let e=this.getHisto(),t=this.getObject(),s=null;if(t&&t.fAxes)switch(i){case"x":default:s=t.fAxes[0];break;case"y":s=t.fAxes[1];break;case"z":s=t.fAxes[2]}else if(e&&e.fAxes)switch(i){case"x":default:s=e.fAxes._0;break;case"y":s=e.fAxes._1;break;case"z":s=e.fAxes._2}return s&&!s.GetBinCoord&&d(s),s}getAxisBinTip(i,e,t){let s=this.getFramePainter(),o=s[i+"_handle"],r=this.getAxis(i),h=r.GetBinCoord(e);if("labels"===o.kind)return s.axisAsText(i,h);let a=r.GetBinCoord(e+(t||1));return"time"===o.kind?s.axisAsText(i,(h+a)/2):"["+s.axisAsText(i,h)+", "+s.axisAsText(i,a)+")"}extractAxesProperties(i){if(!this.getHisto())return;this.nbinsx=this.nbinsy=this.nbinsz=0;let t=this.getAxis("x");this.nbinsx=t.GetNumBins(),this.xmin=t.min,this.xmax=t.max,!(i<2)&&(t=this.getAxis("y"),this.nbinsy=t.GetNumBins(),this.ymin=t.min,this.ymax=t.max,!(i<3)&&(t=this.getAxis("z"),this.nbinsz=t.GetNumBins(),this.zmin=t.min,this.zmax=t.max))}addInteractivity(){let i=this.isMainPainter(),e=this.options.second_x||this.options.second_y,t=i||e?this.getFramePainter():null;return!t||t.addInteractivity(!i&&e)}processItemReply(i,e){if(!this.isDisplayItem())return console.error("Get item when display normal histogram");e.reqid===this.current_item_reqid&&(null!==i&&this.updateDisplayItem(this.getObject(),i.item),e.resolveFunc(!0))}drawingBins(i){var e=this;return(0,y.Z)(function*(){let t=!1;return i&&(0,u.isStr)(i)&&0==i.indexOf("zoom")&&(i.indexOf("0")>0&&(t=!0),e.getDimension()>1&&i.indexOf("1")>0&&(t=!0),e.getDimension()>2&&i.indexOf("2")>0&&(t=!0)),!(e.isDisplayItem()&&t&&e.v7NormalMode()&&e.prepareDraw({only_indexes:!0}).incomplete)||new Promise(o=>{let r=e.v7SubmitRequest("",{_typename:"ROOT::Experimental::RHistDrawableBase::RRequest"},e.processItemReply.bind(e));r?(e.current_item_reqid=r.reqid,r.resolveFunc=o,setTimeout(e.processItemReply.bind(e,null,r),1e3)):o(!0)})})()}toggleStat(){}getSelectIndex(i,e,t){let s=0,o=this.getAxis(i),r=this["nbins"+i]||0;this.options.second_x&&"x"==i&&(i="x2"),this.options.second_y&&"y"==i&&(i="y2");let h=this.getFramePainter(),a=h?h["zoom_"+i+"min"]:0,g=h?h["zoom_"+i+"max"]:0;return a!==g&&o?(s="left"==e?o.FindBin(a,t||0):o.FindBin(g,(t||0)+.5),s<0?s=0:s>r&&(s=r)):s="left"==e?0:r,s}autoZoom(){}clickButton(i){switch(i){case"ToggleZoom":if(this.zoom_xmin!==this.zoom_xmax||this.zoom_ymin!==this.zoom_ymax||this.zoom_zmin!==this.zoom_zmax)return this.unzoom(),this.getFramePainter().zoomChangedInteractive("reset"),!0;if(this.draw_content)return this.autoZoom(),!0;break;case"ToggleLogX":this.getFramePainter().toggleAxisLog("x");break;case"ToggleLogY":this.getFramePainter().toggleAxisLog("y");break;case"ToggleLogZ":this.getFramePainter().toggleAxisLog("z");break;case"ToggleStatBox":return this.toggleStat(),!0}return!1}fillToolbar(i){let e=this.getPadPainter();e&&(e.addPadButton("auto_zoom","Toggle between unzoom and autozoom-in","ToggleZoom","Ctrl *"),e.addPadButton("arrow_right","Toggle log x","ToggleLogX","PageDown"),e.addPadButton("arrow_up","Toggle log y","ToggleLogY","PageUp"),this.getDimension()>1&&e.addPadButton("arrow_diag","Toggle log z","ToggleLogZ"),this.draw_content&&e.addPadButton("statbox","Toggle stat box","ToggleStatBox"),i||e.showPadButtons())}get3DToolTip(i){let e=this.getHisto(),t={bin:i,name:e.fName||"histo",title:e.fTitle};switch(this.getDimension()){case 1:t.ix=i+1,t.iy=1,t.value=e.getBinContent(t.ix),t.error=e.getBinError(t.ix),t.lines=this.getBinTooltips(i-1);break;case 2:t.ix=i%this.nbinsx+1,t.iy=(i-(t.ix-1))/this.nbinsx+1,t.value=e.getBinContent(t.ix,t.iy),t.error=e.getBinError(t.ix,t.iy),t.lines=this.getBinTooltips(t.ix-1,t.iy-1);break;case 3:t.ix=i%this.nbinsx+1,t.iy=(i-(t.ix-1))/this.nbinsx%this.nbinsy+1,t.iz=(i-(t.ix-1)-(t.iy-1)*this.nbinsx)/this.nbinsx/this.nbinsy+1,t.value=e.getBinContent(t.ix,t.iy,t.iz),t.error=e.getBinError(t.ix,t.iy,t.iz),t.lines=this.getBinTooltips(t.ix-1,t.iy-1,t.iz-1)}return t}createContour(i,e,t){if(!i||!e)return;t||(t={});let s=u.gStyle.fNumberContours,o=this.minbin,r=this.maxbin,h=this.minposbin;t.scatter_plot&&(s>50&&(s=50),o=this.minposbin),o===r&&(o=this.gminbin,r=this.gmaxbin,h=this.gminposbin),this.getDimension()<3&&(i.zoom_zmin!==i.zoom_zmax?(o=i.zoom_zmin,r=i.zoom_zmax):t.full_z_range&&(o=i.zmin,r=i.zmax)),e.setFullRange(i.zmin,i.zmax),e.createContour(i.logz,s,o,r,h),this.getDimension()<3&&(i.scale_zmin=e.colzmin,i.scale_zmax=e.colzmax)}changeValuesRange(i,e){let t=this.getFramePainter();if(!t)return;let s=t.isAxisZoomed(e)?"zoom_"+e:e;i.input("Enter values range for axis "+e+" like [0,100] or empty string to unzoom","["+t[s+"min"]+","+t[s+"max"]+"]").then(r=>{r=r?JSON.parse(r):[],(0,u.isObject)(r)&&2==r.length&&Number.isFinite(r[0])&&Number.isFinite(r[1])?t.zoom(e,r[0],r[1]):t.unzoom(e)})}fillContextMenu(i){i.add("header:v7histo::anyname"),this.draw_content&&(i.addchk(this.toggleStat("only-check"),"Show statbox",()=>this.toggleStat()),2==this.getDimension()&&i.add("Values range",()=>this.changeValuesRange(i,"z")),(0,u.isFunc)(this.fillHistContextMenu)&&this.fillHistContextMenu(i));let e=this.getFramePainter();if(this.options.Mode3D){i.size()>0&&i.add("separator");let t=this.getMainPainter()||this;i.addchk(t.isTooltipAllowed(),"Show tooltips",()=>t.setTooltipAllowed("toggle")),i.addchk(e.enable_highlight,"Highlight bins",()=>{e.enable_highlight=!e.enable_highlight,!e.enable_highlight&&t.highlightBin3D&&t.mode3d&&t.highlightBin3D(null)}),(0,u.isFunc)(e?.render3D)&&(i.addchk(t.options.FrontBox,"Front box",()=>{t.options.FrontBox=!t.options.FrontBox,e.render3D()}),i.addchk(t.options.BackBox,"Back box",()=>{t.options.BackBox=!t.options.BackBox,e.render3D()})),this.draw_content&&(i.addchk(!this.options.Zero,"Suppress zeros",()=>{this.options.Zero=!this.options.Zero,this.redrawPad()}),(12==this.options.Lego||14==this.options.Lego)&&this.fillPaletteMenu&&this.fillPaletteMenu(i)),(0,u.isFunc)(t.control?.reset)&&i.add("Reset camera",()=>t.control.reset())}return i.addAttributesMenu(this),this.histogram_updated&&e.zoomChangedInteractive()&&i.add("Let update zoom",()=>e.zoomChangedInteractive("reset")),!0}updatePaletteDraw(){this.isMainPainter()&&this.getPadPainter().findPainterFor(void 0,void 0,"ROOT::Experimental::RPaletteDrawable")?.drawPalette()}fillPaletteMenu(i){i.addPaletteMenu(this.options.Palette||u.settings.Palette,e=>{this.options.Palette=parseInt(e),this.redraw()})}toggleMode3D(){this.options.Mode3D=!this.options.Mode3D,this.options.Mode3D&&!this.options.Surf&&!this.options.Lego&&!this.options.Error&&(this.options.Lego=this.nbinsx>=50||this.nbinsy>=50?this.options.Color?14:13:this.options.Color?12:1,this.options.Zero=!1),this.copyOptionsToOthers(),this.interactiveRedraw("pad","drawopt")}prepareDraw(i){i||(i={rounding:!0,extra:0,middle:0}),void 0===i.extra&&(i.extra=0),void 0===i.right_extra&&(i.right_extra=i.extra),void 0===i.middle&&(i.middle=0);let h,a,g,m,l,B,e=this.getHisto(),t=this.getAxis("x"),s=this.getAxis("y"),o=this.getFramePainter(),r=this.getDimension(),n={i1:this.getSelectIndex("x","left",0-i.extra),i2:this.getSelectIndex("x","right",1+i.right_extra),j1:r<2?0:this.getSelectIndex("y","left",0-i.extra),j2:r<2?1:this.getSelectIndex("y","right",1+i.right_extra),k1:r<3?0:this.getSelectIndex("z","left",0-i.extra),k2:r<3?1:this.getSelectIndex("z","right",1+i.right_extra),stepi:1,stepj:1,stepk:1,min:0,max:0,sumz:0,xbar1:0,xbar2:1,ybar1:0,ybar2:1};if(this.isDisplayItem()&&e.fIndicies&&(n.i1e.fIndicies[1]&&(n.i2=e.fIndicies[1],n.incomplete=!0),n.stepi=e.fIndicies[2],n.stepi>1&&(n.incomplete=!0),r>1&&e.fIndicies.length>5&&(n.j1e.fIndicies[4]&&(n.j2=e.fIndicies[4],n.incomplete=!0),n.stepj=e.fIndicies[5],n.stepj>1&&(n.incomplete=!0)),r>2&&e.fIndicies.length>8&&(n.k1e.fIndicies[7]&&(n.k2=e.fIndicies[7],n.incomplete=!0),n.stepk=e.fIndicies[8],n.stepk>1&&(n.incomplete=!0))),i.only_indexes)return n;n.grx=new Array(n.i2+n.stepi+1),n.gry=new Array(n.j2+n.stepj+1),i.original&&(n.original=!0,n.origx=new Array(n.i2+1),n.origy=new Array(n.j2+1)),i.pixel_density&&(i.rounding=!0);let x=o.getGrFuncs(this.options.second_x,this.options.second_y);for(h=n.i1;h<=n.i2;++h)g=t.GetBinCoord(h+i.middle),x.logx&&g<=0?n.i1=h+1:(n.origx&&(n.origx[h]=g),n.grx[h]=x.grx(g),i.rounding&&(n.grx[h]=Math.round(n.grx[h])),i.use3d&&(n.grx[h]<-o.size_x3d&&(n.i1=h,n.grx[h]=-o.size_x3d),n.grx[h]>o.size_x3d&&(n.i2=h,n.grx[h]=o.size_x3d)));for(i.use3d&&(n.i1o.size_y3d&&(n.j2=a,n.gry[a]=o.size_y3d)));for(i.use3d&&r>1&&(n.j11&&a0&&(l0&&(null===this.minposbin||l{c.d(y,{n:()=>z});var _=c(5835),u=c(9542),b=c(3029);function d(f){"ROOT::Experimental::RAxisEquidistant"==f._typename||"ROOT::Experimental::RAxisLabels"==f._typename?(0===f.fInvBinWidth&&(f.$dummy=!0,f.fInvBinWidth=1,f.fNBinsNoOver=0,f.fLow=0),f.min=f.fLow,f.max=f.fLow+f.fNBinsNoOver/f.fInvBinWidth,f.GetNumBins=function(){return this.fNBinsNoOver},f.GetBinCoord=function(i){return this.fLow+i/this.fInvBinWidth},f.FindBin=function(i,e){return Math.floor((i-this.fLow)*this.fInvBinWidth+e)}):"ROOT::Experimental::RAxisIrregular"==f._typename&&(f.min=f.fBinBorders[0],f.max=f.fBinBorders[f.fBinBorders.length-1],f.GetNumBins=function(){return this.fBinBorders.length},f.GetBinCoord=function(i){let e=Math.round(i);if(e<=0)return this.fBinBorders[0];if(e>=this.fBinBorders.length)return this.fBinBorders[this.fBinBorders.length-1];if(e==i)return this.fBinBorders[e];let t=i1||t.stepy>1||t.stepz>1?function(s,o,r){return Math.floor((s-this.dx)/this.stepx)+this.nx/this.stepx*Math.floor((o-this.dy)/this.stepy)+this.nx/this.stepx*this.ny/this.stepy*Math.floor((r-this.dz)/this.stepz)}:function(s,o,r){return s-this.dx+this.nx*(o-this.dy)+this.nx*this.ny*(r-dz)},t.getBinContent=function(s,o,r){return this.fBinContent[this.getBin0(s,o,r)]},t.getBinError=function(s,o,r){return Math.sqrt(Math.abs(this.getBinContent(s,o,r)))}):2==t.fAxes.length?(d(t.fAxes[0]),d(t.fAxes[1]),t.nx=t.fIndicies[1]-t.fIndicies[0],t.dx=t.fIndicies[0]+1,t.stepx=t.fIndicies[2],t.ny=t.fIndicies[4]-t.fIndicies[3],t.dy=t.fIndicies[3]+1,t.stepy=t.fIndicies[5],t.getBin=function(s,o){return s-1+this.fAxes[0].GetNumBins()*(o-1)},t.getBin0=t.stepx>1||t.stepy>1?function(s,o){return Math.floor((s-this.dx)/this.stepx)+this.nx/this.stepx*Math.floor((o-this.dy)/this.stepy)}:function(s,o){return s-this.dx+this.nx*(o-this.dy)},t.getBinContent=function(s,o){return this.fBinContent[this.getBin0(s,o)]},t.getBinError=function(s,o){return Math.sqrt(Math.abs(this.getBinContent(s,o)))}):(d(t.fAxes[0]),t.nx=t.fIndicies[1]-t.fIndicies[0],t.dx=t.fIndicies[0]+1,t.stepx=t.fIndicies[2],t.getBin=function(s){return s-1},t.getBin0=t.stepx>1?function(s){return Math.floor((s-this.dx)/this.stepx)}:function(s){return s-this.dx},t.getBinContent=function(s){return this.fBinContent[this.getBin0(s)]},t.getBinError=function(s){return Math.sqrt(Math.abs(this.getBinContent(s)))}))):t.fAxes._2?(d(t.fAxes._0),d(t.fAxes._1),d(t.fAxes._2),t.getBin=function(s,o,r){return s-1+this.fAxes._0.GetNumBins()*(o-1)+this.fAxes._0.GetNumBins()*this.fAxes._1.GetNumBins()*(r-1)},t.getBinContent=function(s,o,r){return this.fStatistics.fBinContent[this.getBin(s,o,r)]},t.getBinError=function(s,o,r){let h=this.getBin(s,o,r);return this.fStatistics.fSumWeightsSquared?Math.sqrt(this.fStatistics.fSumWeightsSquared[h]):Math.sqrt(Math.abs(this.fStatistics.fBinContent[h]))}):t.fAxes._1?(d(t.fAxes._0),d(t.fAxes._1),t.getBin=function(s,o){return s-1+this.fAxes._0.GetNumBins()*(o-1)},t.getBinContent=function(s,o){return this.fStatistics.fBinContent[this.getBin(s,o)]},t.getBinError=function(s,o){let r=this.getBin(s,o);return this.fStatistics.fSumWeightsSquared?Math.sqrt(this.fStatistics.fSumWeightsSquared[r]):Math.sqrt(Math.abs(this.fStatistics.fBinContent[r]))}):(d(t.fAxes._0),t.getBin=function(s){return s-1},t.getBinContent=function(s){return this.fStatistics.fBinContent[s-1]},t.getBinError=function(s){return this.fStatistics.fSumWeightsSquared?Math.sqrt(this.fStatistics.fSumWeightsSquared[s-1]):Math.sqrt(Math.abs(this.fStatistics.fBinContent[s-1]))}),t}decodeOptions(){this.options||(this.options={Hist:1})}copyOptionsFrom(i){i!==this&&(this.options.Mode3D=i.options.Mode3D)}copyOptionsToOthers(){this.forEachPainter(i=>{i!==this&&(0,u.isFunc)(i.copyOptionsFrom)&&i.copyOptionsFrom(this)},"objects")}clear3DScene(){let i=this.getFramePainter();(0,u.isFunc)(i?.create3DScene)&&i.create3DScene(-1),this.mode3d=!1}cleanup(){this.clear3DScene(),delete this.options,super.cleanup()}getDimension(){return 1}scanContent(){}drawFrameAxes(){var i=this;return(0,_.Z)(function*(){let e=i.getFramePainter();return!!e&&(!i.draw_content||(i.isMainPainter()?(e.cleanupAxes(),e.xmin=e.xmax=0,e.ymin=e.ymax=0,e.zmin=e.zmax=0,e.setAxesRanges(i.getAxis("x"),i.xmin,i.xmax,i.getAxis("y"),i.ymin,i.ymax,i.getAxis("z"),i.zmin,i.zmax),e.drawAxes()):!i.options.second_x&&!i.options.second_y||(e.setAxes2Ranges(i.options.second_x,i.getAxis("x"),i.xmin,i.xmax,i.options.second_y,i.getAxis("y"),i.ymin,i.ymax),e.drawAxes2(i.options.second_x,i.options.second_y))))})()}createHistDrawAttributes(){this.createv7AttFill(),this.createv7AttLine()}updateDisplayItem(i,e){return!(!i||!e||(i.fAxes=e.fAxes,i.fIndicies=e.fIndicies,i.fBinContent=e.fBinContent,i.fContMin=e.fContMin,i.fContMinPos=e.fContMinPos,i.fContMax=e.fContMax,this.getHisto(!0),0))}updateObject(i){let e=this.getObject();if(i!==e){if(!this.matchObjectType(i))return!1;if(this.isDisplayItem())this.updateDisplayItem(e,i);else{let t=p(e),s=p(i);if(!t||!s)return!1;t.fStatistics=s.fStatistics,e.fTitle=i.fTitle}}return this.scanContent(),this.histogram_updated=!0,!0}getAxis(i){let e=this.getHisto(),t=this.getObject(),s=null;if(t&&t.fAxes)switch(i){case"x":default:s=t.fAxes[0];break;case"y":s=t.fAxes[1];break;case"z":s=t.fAxes[2]}else if(e&&e.fAxes)switch(i){case"x":default:s=e.fAxes._0;break;case"y":s=e.fAxes._1;break;case"z":s=e.fAxes._2}return s&&!s.GetBinCoord&&d(s),s}getAxisBinTip(i,e,t){let s=this.getFramePainter(),o=s[i+"_handle"],r=this.getAxis(i),h=r.GetBinCoord(e);if("labels"===o.kind)return s.axisAsText(i,h);let a=r.GetBinCoord(e+(t||1));return"time"===o.kind?s.axisAsText(i,(h+a)/2):"["+s.axisAsText(i,h)+", "+s.axisAsText(i,a)+")"}extractAxesProperties(i){if(!this.getHisto())return;this.nbinsx=this.nbinsy=this.nbinsz=0;let t=this.getAxis("x");this.nbinsx=t.GetNumBins(),this.xmin=t.min,this.xmax=t.max,!(i<2)&&(t=this.getAxis("y"),this.nbinsy=t.GetNumBins(),this.ymin=t.min,this.ymax=t.max,!(i<3)&&(t=this.getAxis("z"),this.nbinsz=t.GetNumBins(),this.zmin=t.min,this.zmax=t.max))}addInteractivity(){let i=this.isMainPainter(),e=this.options.second_x||this.options.second_y,t=i||e?this.getFramePainter():null;return!t||t.addInteractivity(!i&&e)}processItemReply(i,e){if(!this.isDisplayItem())return console.error("Get item when display normal histogram");e.reqid===this.current_item_reqid&&(null!==i&&this.updateDisplayItem(this.getObject(),i.item),e.resolveFunc(!0))}drawingBins(i){var e=this;return(0,_.Z)(function*(){let t=!1;return i&&(0,u.isStr)(i)&&0==i.indexOf("zoom")&&(i.indexOf("0")>0&&(t=!0),e.getDimension()>1&&i.indexOf("1")>0&&(t=!0),e.getDimension()>2&&i.indexOf("2")>0&&(t=!0)),!(e.isDisplayItem()&&t&&e.v7NormalMode()&&e.prepareDraw({only_indexes:!0}).incomplete)||new Promise(o=>{let r=e.v7SubmitRequest("",{_typename:"ROOT::Experimental::RHistDrawableBase::RRequest"},e.processItemReply.bind(e));r?(e.current_item_reqid=r.reqid,r.resolveFunc=o,setTimeout(e.processItemReply.bind(e,null,r),1e3)):o(!0)})})()}toggleStat(){}getSelectIndex(i,e,t){let s=0,o=this.getAxis(i),r=this["nbins"+i]||0;this.options.second_x&&"x"==i&&(i="x2"),this.options.second_y&&"y"==i&&(i="y2");let h=this.getFramePainter(),a=h?h["zoom_"+i+"min"]:0,g=h?h["zoom_"+i+"max"]:0;return a!==g&&o?(s="left"==e?o.FindBin(a,t||0):o.FindBin(g,(t||0)+.5),s<0?s=0:s>r&&(s=r)):s="left"==e?0:r,s}autoZoom(){}clickButton(i){switch(i){case"ToggleZoom":if(this.zoom_xmin!==this.zoom_xmax||this.zoom_ymin!==this.zoom_ymax||this.zoom_zmin!==this.zoom_zmax)return this.unzoom(),this.getFramePainter().zoomChangedInteractive("reset"),!0;if(this.draw_content)return this.autoZoom(),!0;break;case"ToggleLogX":this.getFramePainter().toggleAxisLog("x");break;case"ToggleLogY":this.getFramePainter().toggleAxisLog("y");break;case"ToggleLogZ":this.getFramePainter().toggleAxisLog("z");break;case"ToggleStatBox":return this.toggleStat(),!0}return!1}fillToolbar(i){let e=this.getPadPainter();e&&(e.addPadButton("auto_zoom","Toggle between unzoom and autozoom-in","ToggleZoom","Ctrl *"),e.addPadButton("arrow_right","Toggle log x","ToggleLogX","PageDown"),e.addPadButton("arrow_up","Toggle log y","ToggleLogY","PageUp"),this.getDimension()>1&&e.addPadButton("arrow_diag","Toggle log z","ToggleLogZ"),this.draw_content&&e.addPadButton("statbox","Toggle stat box","ToggleStatBox"),i||e.showPadButtons())}get3DToolTip(i){let e=this.getHisto(),t={bin:i,name:e.fName||"histo",title:e.fTitle};switch(this.getDimension()){case 1:t.ix=i+1,t.iy=1,t.value=e.getBinContent(t.ix),t.error=e.getBinError(t.ix),t.lines=this.getBinTooltips(i-1);break;case 2:t.ix=i%this.nbinsx+1,t.iy=(i-(t.ix-1))/this.nbinsx+1,t.value=e.getBinContent(t.ix,t.iy),t.error=e.getBinError(t.ix,t.iy),t.lines=this.getBinTooltips(t.ix-1,t.iy-1);break;case 3:t.ix=i%this.nbinsx+1,t.iy=(i-(t.ix-1))/this.nbinsx%this.nbinsy+1,t.iz=(i-(t.ix-1)-(t.iy-1)*this.nbinsx)/this.nbinsx/this.nbinsy+1,t.value=e.getBinContent(t.ix,t.iy,t.iz),t.error=e.getBinError(t.ix,t.iy,t.iz),t.lines=this.getBinTooltips(t.ix-1,t.iy-1,t.iz-1)}return t}createContour(i,e,t){if(!i||!e)return;t||(t={});let s=u.gStyle.fNumberContours,o=this.minbin,r=this.maxbin,h=this.minposbin;t.scatter_plot&&(s>50&&(s=50),o=this.minposbin),o===r&&(o=this.gminbin,r=this.gmaxbin,h=this.gminposbin),this.getDimension()<3&&(i.zoom_zmin!==i.zoom_zmax?(o=i.zoom_zmin,r=i.zoom_zmax):t.full_z_range&&(o=i.zmin,r=i.zmax)),e.setFullRange(i.zmin,i.zmax),e.createContour(i.logz,s,o,r,h),this.getDimension()<3&&(i.scale_zmin=e.colzmin,i.scale_zmax=e.colzmax)}changeValuesRange(i,e){let t=this.getFramePainter();if(!t)return;let s=t.isAxisZoomed(e)?"zoom_"+e:e;i.input("Enter values range for axis "+e+" like [0,100] or empty string to unzoom","["+t[s+"min"]+","+t[s+"max"]+"]").then(r=>{r=r?JSON.parse(r):[],(0,u.isObject)(r)&&2==r.length&&Number.isFinite(r[0])&&Number.isFinite(r[1])?t.zoom(e,r[0],r[1]):t.unzoom(e)})}fillContextMenu(i){i.add("header:v7histo::anyname"),this.draw_content&&(i.addchk(this.toggleStat("only-check"),"Show statbox",()=>this.toggleStat()),2==this.getDimension()&&i.add("Values range",()=>this.changeValuesRange(i,"z")),(0,u.isFunc)(this.fillHistContextMenu)&&this.fillHistContextMenu(i));let e=this.getFramePainter();if(this.options.Mode3D){i.size()>0&&i.add("separator");let t=this.getMainPainter()||this;i.addchk(t.isTooltipAllowed(),"Show tooltips",()=>t.setTooltipAllowed("toggle")),i.addchk(e.enable_highlight,"Highlight bins",()=>{e.enable_highlight=!e.enable_highlight,!e.enable_highlight&&t.highlightBin3D&&t.mode3d&&t.highlightBin3D(null)}),(0,u.isFunc)(e?.render3D)&&(i.addchk(t.options.FrontBox,"Front box",()=>{t.options.FrontBox=!t.options.FrontBox,e.render3D()}),i.addchk(t.options.BackBox,"Back box",()=>{t.options.BackBox=!t.options.BackBox,e.render3D()})),this.draw_content&&(i.addchk(!this.options.Zero,"Suppress zeros",()=>{this.options.Zero=!this.options.Zero,this.redrawPad()}),(12==this.options.Lego||14==this.options.Lego)&&this.fillPaletteMenu&&this.fillPaletteMenu(i)),(0,u.isFunc)(t.control?.reset)&&i.add("Reset camera",()=>t.control.reset())}return i.addAttributesMenu(this),this.histogram_updated&&e.zoomChangedInteractive()&&i.add("Let update zoom",()=>e.zoomChangedInteractive("reset")),!0}updatePaletteDraw(){this.isMainPainter()&&this.getPadPainter().findPainterFor(void 0,void 0,"ROOT::Experimental::RPaletteDrawable")?.drawPalette()}fillPaletteMenu(i){i.addPaletteMenu(this.options.Palette||u.settings.Palette,e=>{this.options.Palette=parseInt(e),this.redraw()})}toggleMode3D(){this.options.Mode3D=!this.options.Mode3D,this.options.Mode3D&&!this.options.Surf&&!this.options.Lego&&!this.options.Error&&(this.options.Lego=this.nbinsx>=50||this.nbinsy>=50?this.options.Color?14:13:this.options.Color?12:1,this.options.Zero=!1),this.copyOptionsToOthers(),this.interactiveRedraw("pad","drawopt")}prepareDraw(i){i||(i={rounding:!0,extra:0,middle:0}),void 0===i.extra&&(i.extra=0),void 0===i.right_extra&&(i.right_extra=i.extra),void 0===i.middle&&(i.middle=0);let h,a,g,m,l,B,e=this.getHisto(),t=this.getAxis("x"),s=this.getAxis("y"),o=this.getFramePainter(),r=this.getDimension(),n={i1:this.getSelectIndex("x","left",0-i.extra),i2:this.getSelectIndex("x","right",1+i.right_extra),j1:r<2?0:this.getSelectIndex("y","left",0-i.extra),j2:r<2?1:this.getSelectIndex("y","right",1+i.right_extra),k1:r<3?0:this.getSelectIndex("z","left",0-i.extra),k2:r<3?1:this.getSelectIndex("z","right",1+i.right_extra),stepi:1,stepj:1,stepk:1,min:0,max:0,sumz:0,xbar1:0,xbar2:1,ybar1:0,ybar2:1};if(this.isDisplayItem()&&e.fIndicies&&(n.i1e.fIndicies[1]&&(n.i2=e.fIndicies[1],n.incomplete=!0),n.stepi=e.fIndicies[2],n.stepi>1&&(n.incomplete=!0),r>1&&e.fIndicies.length>5&&(n.j1e.fIndicies[4]&&(n.j2=e.fIndicies[4],n.incomplete=!0),n.stepj=e.fIndicies[5],n.stepj>1&&(n.incomplete=!0)),r>2&&e.fIndicies.length>8&&(n.k1e.fIndicies[7]&&(n.k2=e.fIndicies[7],n.incomplete=!0),n.stepk=e.fIndicies[8],n.stepk>1&&(n.incomplete=!0))),i.only_indexes)return n;n.grx=new Array(n.i2+n.stepi+1),n.gry=new Array(n.j2+n.stepj+1),i.original&&(n.original=!0,n.origx=new Array(n.i2+1),n.origy=new Array(n.j2+1)),i.pixel_density&&(i.rounding=!0);let x=o.getGrFuncs(this.options.second_x,this.options.second_y);for(h=n.i1;h<=n.i2;++h)g=t.GetBinCoord(h+i.middle),x.logx&&g<=0?n.i1=h+1:(n.origx&&(n.origx[h]=g),n.grx[h]=x.grx(g),i.rounding&&(n.grx[h]=Math.round(n.grx[h])),i.use3d&&(n.grx[h]<-o.size_x3d&&(n.i1=h,n.grx[h]=-o.size_x3d),n.grx[h]>o.size_x3d&&(n.i2=h,n.grx[h]=o.size_x3d)));for(i.use3d&&(n.i1o.size_y3d&&(n.j2=a,n.gry[a]=o.size_y3d)));for(i.use3d&&r>1&&(n.j11&&a0&&(l0&&(null===this.minposbin||l= this.fBinBorders.length) return this.fBinBorders[this.fBinBorders.length - 1];\n if (indx==bin) return this.fBinBorders[indx];\n let indx2 = (bin < indx) ? indx - 1 : indx + 1;\n return this.fBinBorders[indx] * Math.abs(bin-indx2) + this.fBinBorders[indx2] * Math.abs(bin-indx);\n }\n axis.FindBin = function(x,add) {\n for (let k = 1; k < this.fBinBorders.length; ++k)\n if (x < this.fBinBorders[k]) return Math.floor(k-1+add);\n return this.fBinBorders.length - 1;\n }\n }\n\n // to support some code from ROOT6 drawing\n\n axis.GetBinCenter = function(bin) { return this.GetBinCoord(bin-0.5); }\n axis.GetBinLowEdge = function(bin) { return this.GetBinCoord(bin-1); }\n}\n\n/** @summary Returns real histogram impl\n * @private */\nfunction getHImpl(obj) {\n return (obj && obj.fHistImpl) ? obj.fHistImpl.fIO : null;\n}\n\n\n/** @summary Base painter class for RHist objects\n *\n * @private\n */\n\nclass RHistPainter extends RObjectPainter {\n\n /** @summary Constructor\n * @param {object|string} dom - DOM element for drawing or element id\n * @param {object} histo - RHist object */\n constructor(dom, histo) {\n super(dom, histo);\n this.csstype = 'hist';\n this.draw_content = true;\n this.nbinsx = 0;\n this.nbinsy = 0;\n this.accept_drops = true; // indicate that one can drop other objects like doing Draw('same')\n this.mode3d = false;\n\n // initialize histogram methods\n this.getHisto(true);\n }\n\n /** @summary Returns true if RHistDisplayItem is used */\n isDisplayItem() {\n let obj = this.getObject();\n return obj && obj.fAxes ? true : false;\n }\n\n /** @summary get histogram */\n getHisto(force) {\n let obj = this.getObject(), histo = getHImpl(obj);\n\n if (histo && (!histo.getBinContent || force)) {\n if (histo.fAxes._2) {\n assignRAxisMethods(histo.fAxes._0);\n assignRAxisMethods(histo.fAxes._1);\n assignRAxisMethods(histo.fAxes._2);\n histo.getBin = function(x, y, z) { return (x-1) + this.fAxes._0.GetNumBins()*(y-1) + this.fAxes._0.GetNumBins()*this.fAxes._1.GetNumBins()*(z-1); }\n // FIXME: all normal ROOT methods uses indx+1 logic, but RHist has no underflow/overflow bins now\n histo.getBinContent = function(x, y, z) { return this.fStatistics.fBinContent[this.getBin(x, y, z)]; }\n histo.getBinError = function(x, y, z) {\n let bin = this.getBin(x, y, z);\n if (this.fStatistics.fSumWeightsSquared)\n return Math.sqrt(this.fStatistics.fSumWeightsSquared[bin]);\n return Math.sqrt(Math.abs(this.fStatistics.fBinContent[bin]));\n }\n } else if (histo.fAxes._1) {\n assignRAxisMethods(histo.fAxes._0);\n assignRAxisMethods(histo.fAxes._1);\n histo.getBin = function(x, y) { return (x-1) + this.fAxes._0.GetNumBins()*(y-1); }\n // FIXME: all normal ROOT methods uses indx+1 logic, but RHist has no underflow/overflow bins now\n histo.getBinContent = function(x, y) { return this.fStatistics.fBinContent[this.getBin(x, y)]; }\n histo.getBinError = function(x, y) {\n let bin = this.getBin(x, y);\n if (this.fStatistics.fSumWeightsSquared)\n return Math.sqrt(this.fStatistics.fSumWeightsSquared[bin]);\n return Math.sqrt(Math.abs(this.fStatistics.fBinContent[bin]));\n }\n } else {\n assignRAxisMethods(histo.fAxes._0);\n histo.getBin = function(x) { return x-1; }\n // FIXME: all normal ROOT methods uses indx+1 logic, but RHist has no underflow/overflow bins now\n histo.getBinContent = function(x) { return this.fStatistics.fBinContent[x-1]; }\n histo.getBinError = function(x) {\n if (this.fStatistics.fSumWeightsSquared)\n return Math.sqrt(this.fStatistics.fSumWeightsSquared[x-1]);\n return Math.sqrt(Math.abs(this.fStatistics.fBinContent[x-1]));\n }\n }\n } else if (!histo && obj && obj.fAxes) {\n // case of RHistDisplayItem\n\n histo = obj;\n\n if (!histo.getBinContent || force) {\n if (histo.fAxes.length == 3) {\n assignRAxisMethods(histo.fAxes[0]);\n assignRAxisMethods(histo.fAxes[1]);\n assignRAxisMethods(histo.fAxes[2]);\n\n histo.nx = histo.fIndicies[1] - histo.fIndicies[0];\n histo.dx = histo.fIndicies[0] + 1;\n histo.stepx = histo.fIndicies[2];\n\n histo.ny = histo.fIndicies[4] - histo.fIndicies[3];\n histo.dy = histo.fIndicies[3] + 1;\n histo.stepy = histo.fIndicies[5];\n\n histo.nz = histo.fIndicies[7] - histo.fIndicies[6];\n histo.dz = histo.fIndicies[6] + 1;\n histo.stepz = histo.fIndicies[8];\n\n // this is index in original histogram\n histo.getBin = function(x, y, z) { return (x-1) + this.fAxes[0].GetNumBins()*(y-1) + this.fAxes[0].GetNumBins()*this.fAxes[1].GetNumBins()*(z-1); }\n\n // this is index in current available data\n if ((histo.stepx > 1) || (histo.stepy > 1) || (histo.stepz > 1))\n histo.getBin0 = function(x, y, z) { return Math.floor((x-this.dx)/this.stepx) + this.nx/this.stepx*Math.floor((y-this.dy)/this.stepy) + this.nx/this.stepx*this.ny/this.stepy*Math.floor((z-this.dz)/this.stepz); }\n else\n histo.getBin0 = function(x, y, z) { return (x-this.dx) + this.nx*(y-this.dy) + this.nx*this.ny*(z-dz); }\n\n histo.getBinContent = function(x, y, z) { return this.fBinContent[this.getBin0(x, y, z)]; }\n histo.getBinError = function(x, y, z) { return Math.sqrt(Math.abs(this.getBinContent(x, y, z))); }\n\n\n } else if (histo.fAxes.length == 2) {\n assignRAxisMethods(histo.fAxes[0]);\n assignRAxisMethods(histo.fAxes[1]);\n\n histo.nx = histo.fIndicies[1] - histo.fIndicies[0];\n histo.dx = histo.fIndicies[0] + 1;\n histo.stepx = histo.fIndicies[2];\n\n histo.ny = histo.fIndicies[4] - histo.fIndicies[3];\n histo.dy = histo.fIndicies[3] + 1;\n histo.stepy = histo.fIndicies[5];\n\n // this is index in original histogram\n histo.getBin = function(x, y) { return (x-1) + this.fAxes[0].GetNumBins()*(y-1); }\n\n // this is index in current available data\n if ((histo.stepx > 1) || (histo.stepy > 1))\n histo.getBin0 = function(x, y) { return Math.floor((x-this.dx)/this.stepx) + this.nx/this.stepx*Math.floor((y-this.dy)/this.stepy); }\n else\n histo.getBin0 = function(x, y) { return (x-this.dx) + this.nx*(y-this.dy); }\n\n histo.getBinContent = function(x, y) { return this.fBinContent[this.getBin0(x, y)]; }\n histo.getBinError = function(x, y) { return Math.sqrt(Math.abs(this.getBinContent(x, y))); }\n } else {\n assignRAxisMethods(histo.fAxes[0]);\n histo.nx = histo.fIndicies[1] - histo.fIndicies[0];\n histo.dx = histo.fIndicies[0] + 1;\n histo.stepx = histo.fIndicies[2];\n\n histo.getBin = function(x) { return x-1; }\n if (histo.stepx > 1)\n histo.getBin0 = function(x) { return Math.floor((x-this.dx)/this.stepx); }\n else\n histo.getBin0 = function(x) { return x-this.dx; }\n histo.getBinContent = function(x) { return this.fBinContent[this.getBin0(x)]; }\n histo.getBinError = function(x) { return Math.sqrt(Math.abs(this.getBinContent(x))); }\n }\n }\n }\n return histo;\n }\n\n /** @summary Decode options */\n decodeOptions(/*opt*/) {\n if (!this.options) this.options = { Hist : 1 };\n }\n\n /** @summary Copy draw options from other painter */\n copyOptionsFrom(src) {\n if (src === this) return;\n let o = this.options, o0 = src.options;\n o.Mode3D = o0.Mode3D;\n }\n\n /** @summary copy draw options to all other histograms in the pad*/\n copyOptionsToOthers() {\n this.forEachPainter(painter => {\n if ((painter !== this) && isFunc(painter.copyOptionsFrom))\n painter.copyOptionsFrom(this);\n }, 'objects');\n }\n\n /** @summary Clear 3d drawings - if any */\n clear3DScene() {\n let fp = this.getFramePainter();\n if (isFunc(fp?.create3DScene))\n fp.create3DScene(-1);\n this.mode3d = false;\n }\n\n /** @summary Cleanup hist painter */\n cleanup() {\n this.clear3DScene();\n\n delete this.options;\n\n super.cleanup();\n }\n\n /** @summary Returns histogram dimension */\n getDimension() { return 1; }\n\n /** @summary Scan histogram content\n * @abstract */\n scanContent(/*when_axis_changed*/) {\n // function will be called once new histogram or\n // new histogram content is assigned\n // one should find min,max,nbins, maxcontent values\n // if when_axis_changed === true specified, content will be scanned after axis zoom changed\n }\n\n /** @summary Draw axes */\n async drawFrameAxes() {\n // return true when axes was drawn\n let main = this.getFramePainter();\n if (!main)\n return false;\n\n if (!this.draw_content)\n return true;\n\n if (!this.isMainPainter()) {\n if (!this.options.second_x && !this.options.second_y)\n return true;\n\n main.setAxes2Ranges(this.options.second_x, this.getAxis('x'), this.xmin, this.xmax, this.options.second_y, this.getAxis('y'), this.ymin, this.ymax);\n return main.drawAxes2(this.options.second_x, this.options.second_y);\n }\n\n main.cleanupAxes();\n main.xmin = main.xmax = 0;\n main.ymin = main.ymax = 0;\n main.zmin = main.zmax = 0;\n main.setAxesRanges(this.getAxis('x'), this.xmin, this.xmax, this.getAxis('y'), this.ymin, this.ymax, this.getAxis('z'), this.zmin, this.zmax);\n return main.drawAxes();\n }\n\n /** @summary create attributes */\n createHistDrawAttributes() {\n this.createv7AttFill();\n this.createv7AttLine();\n }\n\n /** @summary update display item */\n updateDisplayItem(obj, src) {\n if (!obj || !src) return false;\n\n obj.fAxes = src.fAxes;\n obj.fIndicies = src.fIndicies;\n obj.fBinContent = src.fBinContent;\n obj.fContMin = src.fContMin;\n obj.fContMinPos = src.fContMinPos;\n obj.fContMax = src.fContMax;\n\n // update histogram attributes\n this.getHisto(true);\n\n return true;\n }\n\n /** @summary update histogram object */\n updateObject(obj /*, opt*/) {\n\n let origin = this.getObject();\n\n if (obj !== origin) {\n\n if (!this.matchObjectType(obj)) return false;\n\n if (this.isDisplayItem()) {\n\n this.updateDisplayItem(origin, obj);\n\n } else {\n\n let horigin = getHImpl(origin),\n hobj = getHImpl(obj);\n\n if (!horigin || !hobj) return false;\n\n // make it easy - copy statistics without axes\n horigin.fStatistics = hobj.fStatistics;\n\n origin.fTitle = obj.fTitle;\n }\n }\n\n this.scanContent();\n\n this.histogram_updated = true; // indicate that object updated\n\n return true;\n }\n\n /** @summary Get axis object */\n getAxis(name) {\n let histo = this.getHisto(), obj = this.getObject(), axis = null;\n\n if (obj && obj.fAxes) {\n switch(name) {\n case 'x': axis = obj.fAxes[0]; break;\n case 'y': axis = obj.fAxes[1]; break;\n case 'z': axis = obj.fAxes[2]; break;\n default: axis = obj.fAxes[0]; break;\n }\n } else if (histo && histo.fAxes) {\n switch(name) {\n case 'x': axis = histo.fAxes._0; break;\n case 'y': axis = histo.fAxes._1; break;\n case 'z': axis = histo.fAxes._2; break;\n default: axis = histo.fAxes._0; break;\n }\n }\n\n if (axis && !axis.GetBinCoord)\n assignRAxisMethods(axis);\n\n return axis;\n }\n\n /** @summary Get tip text for axis bin */\n getAxisBinTip(name, bin, step) {\n let pmain = this.getFramePainter(),\n handle = pmain[name+'_handle'],\n axis = this.getAxis(name),\n x1 = axis.GetBinCoord(bin);\n\n if (handle.kind === 'labels')\n return pmain.axisAsText(name, x1);\n\n let x2 = axis.GetBinCoord(bin+(step || 1));\n\n if (handle.kind === 'time')\n return pmain.axisAsText(name, (x1+x2)/2);\n\n return '[' + pmain.axisAsText(name, x1) + ', ' + pmain.axisAsText(name, x2) + ')';\n }\n\n /** @summary Extract axes ranges and bins numbers\n * @desc Also here ensured that all axes objects got their necessary methods */\n extractAxesProperties(ndim) {\n\n let histo = this.getHisto();\n if (!histo) return;\n\n this.nbinsx = this.nbinsy = this.nbinsz = 0;\n\n let axis = this.getAxis('x');\n this.nbinsx = axis.GetNumBins();\n this.xmin = axis.min;\n this.xmax = axis.max;\n\n if (ndim < 2) return;\n axis = this.getAxis('y');\n this.nbinsy = axis.GetNumBins();\n this.ymin = axis.min;\n this.ymax = axis.max;\n\n if (ndim < 3) return;\n axis = this.getAxis('z');\n this.nbinsz = axis.GetNumBins();\n this.zmin = axis.min;\n this.zmax = axis.max;\n }\n\n /** @summary Add interactive features, only main painter does it */\n addInteractivity() {\n // only first painter in list allowed to add interactive functionality to the frame\n\n let ismain = this.isMainPainter(),\n second_axis = this.options.second_x || this.options.second_y,\n fp = ismain || second_axis ? this.getFramePainter() : null;\n return fp ? fp.addInteractivity(!ismain && second_axis) : true;\n }\n\n /** @summary Process item reply */\n processItemReply(reply, req) {\n if (!this.isDisplayItem())\n return console.error('Get item when display normal histogram');\n\n if (req.reqid === this.current_item_reqid) {\n\n if (reply !== null) {\n this.updateDisplayItem(this.getObject(), reply.item);\n }\n\n req.resolveFunc(true);\n }\n }\n\n /** @summary Special method to request bins from server if existing data insufficient\n * @return {Promise} when ready */\n async drawingBins(reason) {\n\n let is_axes_zoomed = false;\n if (reason && isStr(reason) && (reason.indexOf('zoom') == 0)) {\n if (reason.indexOf('0') > 0) is_axes_zoomed = true;\n if ((this.getDimension() > 1) && (reason.indexOf('1') > 0)) is_axes_zoomed = true;\n if ((this.getDimension() > 2) && (reason.indexOf('2') > 0)) is_axes_zoomed = true;\n }\n\n if (this.isDisplayItem() && is_axes_zoomed && this.v7NormalMode()) {\n\n let handle = this.prepareDraw({ only_indexes: true });\n\n // submit request if histogram data not enough for display\n if (handle.incomplete)\n return new Promise(resolveFunc => {\n // use empty kind to always submit request\n let req = this.v7SubmitRequest('', { _typename: 'ROOT::Experimental::RHistDrawableBase::RRequest' },\n this.processItemReply.bind(this));\n if (req) {\n this.current_item_reqid = req.reqid; // ignore all previous requests, only this one will be processed\n req.resolveFunc = resolveFunc;\n setTimeout(this.processItemReply.bind(this, null, req), 1000); // after 1 s draw something that we can\n } else {\n resolveFunc(true);\n }\n });\n }\n\n return true;\n }\n\n /** @summary Toggle statbox drawing\n * @desc Not yet implemented */\n toggleStat(/*arg*/) {}\n\n /** @summary get selected index for axis */\n getSelectIndex(axis, size, add) {\n // be aware - here indexes starts from 0\n let indx = 0,\n taxis = this.getAxis(axis),\n nbins = this['nbins'+axis] || 0;\n\n if (this.options.second_x && axis == 'x') axis = 'x2';\n if (this.options.second_y && axis == 'y') axis = 'y2';\n\n let main = this.getFramePainter(),\n min = main ? main['zoom_' + axis + 'min'] : 0,\n max = main ? main['zoom_' + axis + 'max'] : 0;\n\n if ((min !== max) && taxis) {\n if (size == 'left')\n indx = taxis.FindBin(min, add || 0);\n else\n indx = taxis.FindBin(max, (add || 0) + 0.5);\n if (indx < 0) indx = 0; else if (indx>nbins) indx = nbins;\n } else {\n indx = (size == 'left') ? 0 : nbins;\n }\n\n return indx;\n }\n\n /** @summary Auto zoom into histogram non-empty range\n * @abstract */\n autoZoom() {}\n\n /** @summary Process click on histogram-defined buttons */\n clickButton(funcname) {\n // TODO: move to frame painter\n switch(funcname) {\n case 'ToggleZoom':\n if ((this.zoom_xmin !== this.zoom_xmax) || (this.zoom_ymin !== this.zoom_ymax) || (this.zoom_zmin !== this.zoom_zmax)) {\n this.unzoom();\n this.getFramePainter().zoomChangedInteractive('reset');\n return true;\n }\n if (this.draw_content) {\n this.autoZoom();\n return true;\n }\n break;\n case 'ToggleLogX': this.getFramePainter().toggleAxisLog('x'); break;\n case 'ToggleLogY': this.getFramePainter().toggleAxisLog('y'); break;\n case 'ToggleLogZ': this.getFramePainter().toggleAxisLog('z'); break;\n case 'ToggleStatBox': this.toggleStat(); return true;\n }\n return false;\n }\n\n /** @summary Fill pad toolbar with hist-related functions */\n fillToolbar(not_shown) {\n let pp = this.getPadPainter();\n if (!pp) return;\n\n pp.addPadButton('auto_zoom', 'Toggle between unzoom and autozoom-in', 'ToggleZoom', 'Ctrl *');\n pp.addPadButton('arrow_right', 'Toggle log x', 'ToggleLogX', 'PageDown');\n pp.addPadButton('arrow_up', 'Toggle log y', 'ToggleLogY', 'PageUp');\n if (this.getDimension() > 1)\n pp.addPadButton('arrow_diag', 'Toggle log z', 'ToggleLogZ');\n if (this.draw_content)\n pp.addPadButton('statbox', 'Toggle stat box', 'ToggleStatBox');\n if (!not_shown) pp.showPadButtons();\n }\n\n /** @summary get tool tips used in 3d mode */\n get3DToolTip(indx) {\n let histo = this.getHisto(),\n tip = { bin: indx, name: histo.fName || 'histo', title: histo.fTitle };\n switch (this.getDimension()) {\n case 1:\n tip.ix = indx + 1; tip.iy = 1;\n tip.value = histo.getBinContent(tip.ix);\n tip.error = histo.getBinError(tip.ix);\n tip.lines = this.getBinTooltips(indx-1);\n break;\n case 2:\n tip.ix = (indx % this.nbinsx) + 1;\n tip.iy = (indx - (tip.ix - 1)) / this.nbinsx + 1;\n tip.value = histo.getBinContent(tip.ix, tip.iy);\n tip.error = histo.getBinError(tip.ix, tip.iy);\n tip.lines = this.getBinTooltips(tip.ix-1, tip.iy-1);\n break;\n case 3:\n tip.ix = indx % this.nbinsx + 1;\n tip.iy = ((indx - (tip.ix - 1)) / this.nbinsx) % this.nbinsy + 1;\n tip.iz = (indx - (tip.ix - 1) - (tip.iy - 1) * this.nbinsx) / this.nbinsx / this.nbinsy + 1;\n tip.value = histo.getBinContent(tip.ix, tip.iy, tip.iz);\n tip.error = histo.getBinError(tip.ix, tip.iy, tip.iz);\n tip.lines = this.getBinTooltips(tip.ix-1, tip.iy-1, tip.iz-1);\n break;\n }\n\n return tip;\n }\n\n /** @summary Create contour levels for currently selected Z range */\n createContour(main, palette, args) {\n if (!main || !palette) return;\n\n if (!args) args = {};\n\n let nlevels = gStyle.fNumberContours,\n zmin = this.minbin, zmax = this.maxbin, zminpos = this.minposbin;\n\n if (args.scatter_plot) {\n if (nlevels > 50) nlevels = 50;\n zmin = this.minposbin;\n }\n\n if (zmin === zmax) { zmin = this.gminbin; zmax = this.gmaxbin; zminpos = this.gminposbin; }\n\n if (this.getDimension() < 3) {\n if (main.zoom_zmin !== main.zoom_zmax) {\n zmin = main.zoom_zmin;\n zmax = main.zoom_zmax;\n } else if (args.full_z_range) {\n zmin = main.zmin;\n zmax = main.zmax;\n }\n }\n\n palette.setFullRange(main.zmin, main.zmax);\n palette.createContour(main.logz, nlevels, zmin, zmax, zminpos);\n\n if (this.getDimension() < 3) {\n main.scale_zmin = palette.colzmin;\n main.scale_zmax = palette.colzmax;\n }\n }\n\n /** @summary Start dialog to modify range of axis where histogram values are displayed */\n changeValuesRange(menu, arg) {\n let pmain = this.getFramePainter();\n if (!pmain) return;\n let prefix = pmain.isAxisZoomed(arg) ? 'zoom_' + arg : arg,\n curr = '[' + pmain[prefix+'min'] + ',' + pmain[prefix+'max'] + ']';\n menu.input('Enter values range for axis ' + arg + ' like [0,100] or empty string to unzoom', curr).then(res => {\n res = res ? JSON.parse(res) : [];\n if (!isObject(res) || (res.length != 2) || !Number.isFinite(res[0]) || !Number.isFinite(res[1]))\n pmain.unzoom(arg);\n else\n pmain.zoom(arg, res[0], res[1]);\n });\n }\n\n /** @summary Fill histogram context menu */\n fillContextMenu(menu) {\n\n menu.add('header:v7histo::anyname');\n\n if (this.draw_content) {\n menu.addchk(this.toggleStat('only-check'), 'Show statbox', () => this.toggleStat());\n\n if (this.getDimension() == 2)\n menu.add('Values range', () => this.changeValuesRange(menu, 'z'));\n\n if (isFunc(this.fillHistContextMenu))\n this.fillHistContextMenu(menu);\n }\n\n let fp = this.getFramePainter();\n\n if (this.options.Mode3D) {\n // menu for 3D drawings\n\n if (menu.size() > 0)\n menu.add('separator');\n\n let main = this.getMainPainter() || this;\n\n menu.addchk(main.isTooltipAllowed(), 'Show tooltips', () => main.setTooltipAllowed('toggle'));\n\n menu.addchk(fp.enable_highlight, 'Highlight bins', () => {\n fp.enable_highlight = !fp.enable_highlight;\n if (!fp.enable_highlight && main.highlightBin3D && main.mode3d) main.highlightBin3D(null);\n });\n\n if (isFunc(fp?.render3D)) {\n menu.addchk(main.options.FrontBox, 'Front box', () => {\n main.options.FrontBox = !main.options.FrontBox;\n fp.render3D();\n });\n menu.addchk(main.options.BackBox, 'Back box', () => {\n main.options.BackBox = !main.options.BackBox;\n fp.render3D();\n });\n }\n\n if (this.draw_content) {\n menu.addchk(!this.options.Zero, 'Suppress zeros', () => {\n this.options.Zero = !this.options.Zero;\n this.redrawPad();\n });\n\n if ((this.options.Lego == 12) || (this.options.Lego == 14)) {\n if (this.fillPaletteMenu)\n this.fillPaletteMenu(menu);\n }\n }\n\n if (isFunc(main.control?.reset))\n menu.add('Reset camera', () => main.control.reset());\n }\n\n menu.addAttributesMenu(this);\n\n if (this.histogram_updated && fp.zoomChangedInteractive())\n menu.add('Let update zoom', () => fp.zoomChangedInteractive('reset'));\n\n return true;\n }\n\n /** @summary Update palette drawing */\n updatePaletteDraw() {\n if (this.isMainPainter())\n this.getPadPainter().findPainterFor(undefined, undefined, 'ROOT::Experimental::RPaletteDrawable')?.drawPalette();\n }\n\n /** @summary Fill menu entries for palette */\n fillPaletteMenu(menu) {\n menu.addPaletteMenu(this.options.Palette || settings.Palette, arg => {\n // TODO: rewrite for RPalette functionality\n this.options.Palette = parseInt(arg);\n this.redraw(); // redraw histogram\n });\n }\n\n /** @summary Toggle 3D drawing mode */\n toggleMode3D() {\n this.options.Mode3D = !this.options.Mode3D;\n\n if (this.options.Mode3D) {\n if (!this.options.Surf && !this.options.Lego && !this.options.Error) {\n if ((this.nbinsx>=50) || (this.nbinsy>=50))\n this.options.Lego = this.options.Color ? 14 : 13;\n else\n this.options.Lego = this.options.Color ? 12 : 1;\n\n this.options.Zero = false; // do not show zeros by default\n }\n }\n\n this.copyOptionsToOthers();\n this.interactiveRedraw('pad', 'drawopt');\n }\n\n /** @summary Calculate histogram inidicies and axes values for each visible bin */\n prepareDraw(args) {\n\n if (!args) args = { rounding: true, extra: 0, middle: 0 };\n\n if (args.extra === undefined) args.extra = 0;\n if (args.right_extra === undefined) args.right_extra = args.extra;\n if (args.middle === undefined) args.middle = 0;\n\n let histo = this.getHisto(), xaxis = this.getAxis('x'), yaxis = this.getAxis('y'),\n pmain = this.getFramePainter(),\n hdim = this.getDimension(),\n i, j, x, y, binz, binarea,\n res = {\n i1: this.getSelectIndex('x', 'left', 0 - args.extra),\n i2: this.getSelectIndex('x', 'right', 1 + args.right_extra),\n j1: (hdim < 2) ? 0 : this.getSelectIndex('y', 'left', 0 - args.extra),\n j2: (hdim < 2) ? 1 : this.getSelectIndex('y', 'right', 1 + args.right_extra),\n k1: (hdim < 3) ? 0 : this.getSelectIndex('z', 'left', 0 - args.extra),\n k2: (hdim < 3) ? 1 : this.getSelectIndex('z', 'right', 1 + args.right_extra),\n stepi: 1, stepj: 1, stepk: 1,\n min: 0, max: 0, sumz: 0, xbar1: 0, xbar2: 1, ybar1: 0, ybar2: 1\n };\n\n if (this.isDisplayItem() && histo.fIndicies) {\n if (res.i1 < histo.fIndicies[0]) { res.i1 = histo.fIndicies[0]; res.incomplete = true; }\n if (res.i2 > histo.fIndicies[1]) { res.i2 = histo.fIndicies[1]; res.incomplete = true; }\n res.stepi = histo.fIndicies[2];\n if (res.stepi > 1) res.incomplete = true;\n if ((hdim > 1) && (histo.fIndicies.length > 5)) {\n if (res.j1 < histo.fIndicies[3]) { res.j1 = histo.fIndicies[3]; res.incomplete = true; }\n if (res.j2 > histo.fIndicies[4]) { res.j2 = histo.fIndicies[4]; res.incomplete = true; }\n res.stepj = histo.fIndicies[5];\n if (res.stepj > 1) res.incomplete = true;\n }\n if ((hdim > 2) && (histo.fIndicies.length > 8)) {\n if (res.k1 < histo.fIndicies[6]) { res.k1 = histo.fIndicies[6]; res.incomplete = true; }\n if (res.k2 > histo.fIndicies[7]) { res.k2 = histo.fIndicies[7]; res.incomplete = true; }\n res.stepk = histo.fIndicies[8];\n if (res.stepk > 1) res.incomplete = true;\n }\n }\n\n if (args.only_indexes) return res;\n\n // no need for Float32Array, plain Array is 10% faster\n // reserve more places to avoid complex boundary checks\n\n res.grx = new Array(res.i2+res.stepi+1);\n res.gry = new Array(res.j2+res.stepj+1);\n\n if (args.original) {\n res.original = true;\n res.origx = new Array(res.i2+1);\n res.origy = new Array(res.j2+1);\n }\n\n if (args.pixel_density) args.rounding = true;\n\n let funcs = pmain.getGrFuncs(this.options.second_x, this.options.second_y);\n\n // calculate graphical coordinates in advance\n for (i = res.i1; i <= res.i2; ++i) {\n x = xaxis.GetBinCoord(i + args.middle);\n if (funcs.logx && (x <= 0)) { res.i1 = i+1; continue; }\n if (res.origx) res.origx[i] = x;\n res.grx[i] = funcs.grx(x);\n if (args.rounding) res.grx[i] = Math.round(res.grx[i]);\n\n if (args.use3d) {\n if (res.grx[i] < -pmain.size_x3d) { res.i1 = i; res.grx[i] = -pmain.size_x3d; }\n if (res.grx[i] > pmain.size_x3d) { res.i2 = i; res.grx[i] = pmain.size_x3d; }\n }\n }\n\n if (args.use3d) {\n if ((res.i1 < res.i2-2) && (res.grx[res.i1] == res.grx[res.i1+1])) res.i1++;\n if ((res.i1 < res.i2-2) && (res.grx[res.i2-1] == res.grx[res.i2])) res.i2--;\n }\n\n // copy last valid value to higher indicies\n while (i < res.i2 + res.stepi + 1)\n res.grx[i++] = res.grx[res.i2];\n\n if (hdim === 1) {\n res.gry[0] = funcs.gry(0);\n res.gry[1] = funcs.gry(1);\n } else\n for (j = res.j1; j <= res.j2; ++j) {\n y = yaxis.GetBinCoord(j + args.middle);\n if (funcs.logy && (y <= 0)) { res.j1 = j+1; continue; }\n if (res.origy) res.origy[j] = y;\n res.gry[j] = funcs.gry(y);\n if (args.rounding) res.gry[j] = Math.round(res.gry[j]);\n\n if (args.use3d) {\n if (res.gry[j] < -pmain.size_y3d) { res.j1 = j; res.gry[j] = -pmain.size_y3d; }\n if (res.gry[j] > pmain.size_y3d) { res.j2 = j; res.gry[j] = pmain.size_y3d; }\n }\n }\n\n if (args.use3d && (hdim > 1)) {\n if ((res.j1 < res.j2-2) && (res.gry[res.j1] == res.gry[res.j1+1])) res.j1++;\n if ((res.j1 < res.j2-2) && (res.gry[res.j2-1] == res.gry[res.j2])) res.j2--;\n }\n\n // copy last valid value to higher indicies\n while ((hdim > 1) && (j < res.j2 + res.stepj + 1))\n res.gry[j++] = res.gry[res.j2];\n\n // find min/max values in selected range\n this.maxbin = this.minbin = this.minposbin = null;\n\n for (i = res.i1; i < res.i2; i += res.stepi) {\n for (j = res.j1; j < res.j2; j += res.stepj) {\n binz = histo.getBinContent(i + 1, j + 1);\n if (!Number.isFinite(binz)) continue;\n res.sumz += binz;\n if (args.pixel_density) {\n binarea = (res.grx[i+res.stepi]-res.grx[i])*(res.gry[j]-res.gry[j+res.stepj]);\n if (binarea <= 0) continue;\n res.max = Math.max(res.max, binz);\n if ((binz > 0) && ((binz < res.min) || (res.min === 0))) res.min = binz;\n binz = binz/binarea;\n }\n if (this.maxbin === null) {\n this.maxbin = this.minbin = binz;\n } else {\n this.maxbin = Math.max(this.maxbin, binz);\n this.minbin = Math.min(this.minbin, binz);\n }\n if (binz > 0)\n if ((this.minposbin === null) || (binz < this.minposbin)) this.minposbin = binz;\n }\n }\n\n res.palette = pmain.getHistPalette();\n\n if (res.palette)\n this.createContour(pmain, res.palette, args);\n\n return res;\n }\n\n} // class RHistPainter\n\nexport { RHistPainter };\n"],"x_google_ignoreList":[0]} \ No newline at end of file diff --git a/docs/230.31b4fc5b5095a7bd.js b/docs/230.31b4fc5b5095a7bd.js new file mode 100644 index 000000000..83d25d8aa --- /dev/null +++ b/docs/230.31b4fc5b5095a7bd.js @@ -0,0 +1,2 @@ +"use strict";(self.webpackChunkphoenix_app=self.webpackChunkphoenix_app||[]).push([[230],{4230:(b,E,h)=>{h.r(E),h.d(E,{TRatioPlotPainter:()=>m});var x=h(5835),u=h(9542),w=h(6458),X=h(49),L=h(4971);class m extends w.tK{setGridsRange(a,i){let l=this.getObject();if(a===i){let r=this.getPadPainter()?.findPainterFor(l.fLowerPad,"lower_pad",u.clTPad)?.getFramePainter()?.x_handle;if(!r)return;a=r.full_min,i=r.full_max}l.fGridlines.forEach(r=>{r.fX1=a,r.fX2=i})}redraw(){var a=this;return(0,x.Z)(function*(){let i=a.getObject(),l=a.getPadPainter(),r=l.findPainterFor(i.fTopPad,"top_pad",u.clTPad);r&&r.disablePadDrawing();let f=l.findPainterFor(i.fUpperPad,"upper_pad",u.clTPad),P=f?.getMainPainter(),e=f?.getFramePainter(),p=l.findPainterFor(i.fLowerPad,"lower_pad",u.clTPad),z=p?.getMainPainter(),o=p?.getFramePainter(),_=20,D=Promise.resolve(!0);if(f&&P&&e&&o&&!f._ratio_configured){f._ratio_configured=!0,P.options.Axis=0,_=P.getHisto().fYaxis.fLabelSize,_<1&&(_=Math.round(_*Math.min(f.getPadWidth(),f.getPadHeight())));let s=P.getHisto();s.fXaxis.fLabelSize=0,s.fXaxis.fTitle="",s.fYaxis.fLabelSize=_,s.fYaxis.fTitleSize=_,f.getRootPad().fTicky=1,D=f.redrawPad().then(()=>(e.o_zoom=e.zoom,e._ratio_low_fp=o,e._ratio_painter=a,e.zoom=function(g,c,n,d,t,C){return this.o_zoom(g,c,n,d,t,C).then(T=>(this._ratio_painter.setGridsRange(e.scale_xmin,e.scale_xmax),this._ratio_low_fp.o_zoom(e.scale_xmin,e.scale_xmax),T))},e.o_sizeChanged=e.sizeChanged,e.sizeChanged=function(){this.o_sizeChanged(),this._ratio_low_fp.fX1NDC=this.fX1NDC,this._ratio_low_fp.fX2NDC=this.fX2NDC,this._ratio_low_fp.o_sizeChanged()},!0))}return D.then(()=>{if(!p||!z||!o||!e||p._ratio_configured)return a;p._ratio_configured=!0,z.options.Axis=0;let s=z.getHisto();s.fXaxis.fTitle="x",s.fXaxis.fLabelSize=_,s.fXaxis.fTitleSize=_,s.fYaxis.fLabelSize=_,s.fYaxis.fTitleSize=_,p.getRootPad().fTicky=1,p.forEachPainterInPad(n=>{(0,u.isFunc)(n?.testEditable)&&n.testEditable(!1)});let c,g=[];return i.fGridlinePositions.length>0&&i.fGridlines.length{let d=!1;if(i.fGridlines.forEach(t=>{t.fY1==t.fY2&&Math.abs(t.fY1-n)<1e-6&&(d=!0)}),!d){let t=(0,u.create)(u.clTLine);t.fX1=e.scale_xmin,t.fX2=e.scale_xmax,t.fY1=t.fY2=n,t.fLineStyle=2,i.fGridlines.push(t),void 0===c&&(c=a.selectCurrentPad(i.fLowerPad.fName)),g.push((0,L.drawTLine)(a.getDom(),t))}}),Promise.all(g).then(()=>o.zoom(e.scale_xmin,e.scale_xmax)).then(()=>(o.o_zoom=o.zoom,o._ratio_up_fp=e,o._ratio_painter=a,o.zoom=function(n,d,t,C,T,M){return this._ratio_painter.setGridsRange(n,d),this._ratio_up_fp.o_zoom(n,d),this.o_zoom(n,d,t,C,T,M)},o.o_sizeChanged=o.sizeChanged,o.sizeChanged=function(){this.o_sizeChanged(),this._ratio_up_fp.fX1NDC=this.fX1NDC,this._ratio_up_fp.fX2NDC=this.fX2NDC,this._ratio_up_fp.o_sizeChanged()},a))})})()}static draw(a,i,l){return(0,x.Z)(function*(){let r=new m(a,i,l);return(0,X.ensureTCanvas)(r,!1).then(()=>r.redraw())})()}}}}]); +//# sourceMappingURL=230.31b4fc5b5095a7bd.js.map \ No newline at end of file diff --git a/docs/230.31b4fc5b5095a7bd.js.map b/docs/230.31b4fc5b5095a7bd.js.map new file mode 100644 index 000000000..58d10e5ca --- /dev/null +++ b/docs/230.31b4fc5b5095a7bd.js.map @@ -0,0 +1 @@ +{"version":3,"file":"230.31b4fc5b5095a7bd.js","mappings":"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","names":["TRatioPlotPainter","ObjectPainter","setGridsRange","xmin","xmax","ratio","this","getObject","x_handle","getPadPainter","findPainterFor","fLowerPad","clTPad","getFramePainter","full_min","full_max","fGridlines","forEach","line","fX1","fX2","redraw","_this","pp","top_p","fTopPad","disablePadDrawing","up_p","fUpperPad","up_main","getMainPainter","up_fp","low_p","low_main","low_fp","lbl_size","promise_up","Promise","resolve","_ratio_configured","options","Axis","getHisto","fYaxis","fLabelSize","Math","round","min","getPadWidth","getPadHeight","h","fXaxis","fTitle","fTitleSize","getRootPad","fTicky","redrawPad","then","o_zoom","zoom","_ratio_low_fp","_ratio_painter","ymin","ymax","zmin","zmax","res","scale_xmin","scale_xmax","o_sizeChanged","sizeChanged","fX1NDC","fX2NDC","forEachPainterInPad","objp","isFunc","testEditable","currpad","arr","fGridlinePositions","length","gridy","found","fY1","fY2","abs","create","clTLine","fLineStyle","push","undefined","selectCurrentPad","fName","drawTLine","getDom","all","_ratio_up_fp","static","dom","opt","painter","ensureTCanvas"],"sourceRoot":"webpack:///","sources":["../node_modules/jsroot/modules/draw/TRatioPlotPainter.mjs"],"sourcesContent":["import { create, clTPad, clTLine, isFunc } from '../core.mjs';\nimport { ObjectPainter } from '../base/ObjectPainter.mjs';\nimport { ensureTCanvas } from '../gpad/TCanvasPainter.mjs';\nimport { drawTLine } from './more.mjs';\n\n\n/**\n * @summary Painter class for TRatioPlot\n *\n * @private\n */\n\nclass TRatioPlotPainter extends ObjectPainter {\n\n /** @summary Set grids range */\n setGridsRange(xmin, xmax) {\n let ratio = this.getObject();\n if (xmin === xmax) {\n let x_handle = this.getPadPainter()?.findPainterFor(ratio.fLowerPad, 'lower_pad', clTPad)?.getFramePainter()?.x_handle;\n if (!x_handle) return;\n xmin = x_handle.full_min;\n xmax = x_handle.full_max;\n }\n\n ratio.fGridlines.forEach(line => {\n line.fX1 = xmin;\n line.fX2 = xmax;\n });\n }\n\n /** @summary Redraw TRatioPlot */\n async redraw() {\n let ratio = this.getObject(),\n pp = this.getPadPainter();\n\n let top_p = pp.findPainterFor(ratio.fTopPad, 'top_pad', clTPad);\n if (top_p) top_p.disablePadDrawing();\n\n let up_p = pp.findPainterFor(ratio.fUpperPad, 'upper_pad', clTPad),\n up_main = up_p?.getMainPainter(),\n up_fp = up_p?.getFramePainter(),\n low_p = pp.findPainterFor(ratio.fLowerPad, 'lower_pad', clTPad),\n low_main = low_p?.getMainPainter(),\n low_fp = low_p?.getFramePainter(),\n lbl_size = 20, promise_up = Promise.resolve(true);\n\n if (up_p && up_main && up_fp && low_fp && !up_p._ratio_configured) {\n up_p._ratio_configured = true;\n up_main.options.Axis = 0; // draw both axes\n\n lbl_size = up_main.getHisto().fYaxis.fLabelSize;\n if (lbl_size < 1) lbl_size = Math.round(lbl_size*Math.min(up_p.getPadWidth(), up_p.getPadHeight()));\n\n let h = up_main.getHisto();\n h.fXaxis.fLabelSize = 0; // do not draw X axis labels\n h.fXaxis.fTitle = ''; // do not draw X axis title\n h.fYaxis.fLabelSize = lbl_size;\n h.fYaxis.fTitleSize = lbl_size;\n\n up_p.getRootPad().fTicky = 1;\n\n promise_up = up_p.redrawPad().then(() => {\n up_fp.o_zoom = up_fp.zoom;\n up_fp._ratio_low_fp = low_fp;\n up_fp._ratio_painter = this;\n\n up_fp.zoom = function(xmin,xmax,ymin,ymax,zmin,zmax) {\n return this.o_zoom(xmin,xmax,ymin,ymax,zmin,zmax).then(res => {\n this._ratio_painter.setGridsRange(up_fp.scale_xmin, up_fp.scale_xmax);\n this._ratio_low_fp.o_zoom(up_fp.scale_xmin, up_fp.scale_xmax);\n return res;\n });\n }\n\n up_fp.o_sizeChanged = up_fp.sizeChanged;\n up_fp.sizeChanged = function() {\n this.o_sizeChanged();\n this._ratio_low_fp.fX1NDC = this.fX1NDC;\n this._ratio_low_fp.fX2NDC = this.fX2NDC;\n this._ratio_low_fp.o_sizeChanged();\n }\n return true;\n });\n }\n\n return promise_up.then(() => {\n\n if (!low_p || !low_main || !low_fp || !up_fp || low_p._ratio_configured)\n return this;\n\n low_p._ratio_configured = true;\n low_main.options.Axis = 0; // draw both axes\n let h = low_main.getHisto();\n h.fXaxis.fTitle = 'x';\n h.fXaxis.fLabelSize = lbl_size;\n h.fXaxis.fTitleSize = lbl_size;\n h.fYaxis.fLabelSize = lbl_size;\n h.fYaxis.fTitleSize = lbl_size;\n low_p.getRootPad().fTicky = 1;\n\n low_p.forEachPainterInPad(objp => {\n if (isFunc(objp?.testEditable))\n objp.testEditable(false);\n });\n\n let arr = [], currpad;\n\n if ((ratio.fGridlinePositions.length > 0) && (ratio.fGridlines.length < ratio.fGridlinePositions.length)) {\n ratio.fGridlinePositions.forEach(gridy => {\n let found = false;\n ratio.fGridlines.forEach(line => {\n if ((line.fY1 == line.fY2) && (Math.abs(line.fY1 - gridy) < 1e-6)) found = true;\n });\n if (!found) {\n let line = create(clTLine);\n line.fX1 = up_fp.scale_xmin;\n line.fX2 = up_fp.scale_xmax;\n line.fY1 = line.fY2 = gridy;\n line.fLineStyle = 2;\n ratio.fGridlines.push(line);\n if (currpad === undefined)\n currpad = this.selectCurrentPad(ratio.fLowerPad.fName);\n arr.push(drawTLine(this.getDom(), line));\n }\n });\n }\n\n return Promise.all(arr).then(() => low_fp.zoom(up_fp.scale_xmin, up_fp.scale_xmax)).then(() => {\n\n low_fp.o_zoom = low_fp.zoom;\n low_fp._ratio_up_fp = up_fp;\n low_fp._ratio_painter = this;\n\n low_fp.zoom = function(xmin,xmax,ymin,ymax,zmin,zmax) {\n this._ratio_painter.setGridsRange(xmin, xmax);\n this._ratio_up_fp.o_zoom(xmin,xmax);\n return this.o_zoom(xmin,xmax,ymin,ymax,zmin,zmax);\n }\n\n low_fp.o_sizeChanged = low_fp.sizeChanged;\n low_fp.sizeChanged = function() {\n this.o_sizeChanged();\n this._ratio_up_fp.fX1NDC = this.fX1NDC;\n this._ratio_up_fp.fX2NDC = this.fX2NDC;\n this._ratio_up_fp.o_sizeChanged();\n }\n return this;\n });\n });\n }\n\n /** @summary Draw TRatioPlot */\n static async draw(dom, ratio, opt) {\n let painter = new TRatioPlotPainter(dom, ratio, opt);\n\n return ensureTCanvas(painter, false).then(() => painter.redraw());\n }\n\n} // class TRatioPlotPainter\n\nexport { TRatioPlotPainter };\n"],"x_google_ignoreList":[0]} \ No newline at end of file diff --git a/docs/230.9df4c215ca49efed.js b/docs/230.9df4c215ca49efed.js deleted file mode 100644 index 052868f93..000000000 --- a/docs/230.9df4c215ca49efed.js +++ /dev/null @@ -1,2 +0,0 @@ -"use strict";(self.webpackChunkphoenix_app=self.webpackChunkphoenix_app||[]).push([[230],{4230:(b,T,h)=>{h.r(T),h.d(T,{TRatioPlotPainter:()=>z});var E=h(4788),p=h(9542),w=h(6458),X=h(49),L=h(4971);class z extends w.tK{setGridsRange(a,e){let l=this.getObject();if(a===e){let o=this.getPadPainter()?.findPainterFor(l.fLowerPad,"lower_pad",p.clTPad)?.getFramePainter()?.x_handle;if(!o)return;a=o.full_min,e=o.full_max}l.fGridlines.forEach(o=>{o.fX1=a,o.fX2=e})}redraw(){var a=this;return(0,E.Z)(function*(){let e=a.getObject(),l=a.getPadPainter(),o=l.findPainterFor(e.fTopPad,"top_pad",p.clTPad);o&&o.disablePadDrawing();let f=l.findPainterFor(e.fUpperPad,"upper_pad",p.clTPad),c=f?.getMainPainter(),i=f?.getFramePainter(),u=l.findPainterFor(e.fLowerPad,"lower_pad",p.clTPad),C=u?.getMainPainter(),r=u?.getFramePainter(),_=20,D=Promise.resolve(!0);if(f&&c&&i&&r&&!f._ratio_configured){f._ratio_configured=!0,c.options.Axis=0,_=c.getHisto().fYaxis.fLabelSize,_<1&&(_=Math.round(_*Math.min(f.getPadWidth(),f.getPadHeight())));let s=c.getHisto();s.fXaxis.fLabelSize=0,s.fXaxis.fTitle="",s.fYaxis.fLabelSize=_,s.fYaxis.fTitleSize=_,f.getRootPad().fTicky=1,D=f.redrawPad().then(()=>(i.o_zoom=i.zoom,i._ratio_low_fp=r,i._ratio_painter=a,i.zoom=function(P,g,n,d,t,m){return this._ratio_painter.setGridsRange(P,g),this._ratio_low_fp.o_zoom(P,g),this.o_zoom(P,g,n,d,t,m)},i.o_sizeChanged=i.sizeChanged,i.sizeChanged=function(){this.o_sizeChanged(),this._ratio_low_fp.fX1NDC=this.fX1NDC,this._ratio_low_fp.fX2NDC=this.fX2NDC,this._ratio_low_fp.o_sizeChanged()},!0))}return D.then(()=>{if(!u||!C||!r||!i||u._ratio_configured)return a;u._ratio_configured=!0,C.options.Axis=0;let s=C.getHisto();s.fXaxis.fTitle="x",s.fXaxis.fLabelSize=_,s.fXaxis.fTitleSize=_,s.fYaxis.fLabelSize=_,s.fYaxis.fTitleSize=_,u.getRootPad().fTicky=1,u.forEachPainterInPad(n=>{(0,p.isFunc)(n?.testEditable)&&n.testEditable(!1)});let g,P=[];return e.fGridlinePositions.length>0&&e.fGridlines.length{let d=!1;if(e.fGridlines.forEach(t=>{t.fY1==t.fY2&&Math.abs(t.fY1-n)<1e-6&&(d=!0)}),!d){let t=(0,p.create)(p.clTLine);t.fX1=i.scale_xmin,t.fX2=i.scale_xmax,t.fY1=t.fY2=n,t.fLineStyle=2,e.fGridlines.push(t),void 0===g&&(g=a.selectCurrentPad(e.fLowerPad.fName)),P.push((0,L.drawTLine)(a.getDom(),t))}}),Promise.all(P).then(()=>r.zoom(i.scale_xmin,i.scale_xmax)).then(()=>(r.o_zoom=r.zoom,r._ratio_up_fp=i,r._ratio_painter=a,r.zoom=function(n,d,t,m,M,O){return this._ratio_painter.setGridsRange(n,d),this._ratio_up_fp.o_zoom(n,d),this.o_zoom(n,d,t,m,M,O)},r.o_sizeChanged=r.sizeChanged,r.sizeChanged=function(){this.o_sizeChanged(),this._ratio_up_fp.fX1NDC=this.fX1NDC,this._ratio_up_fp.fX2NDC=this.fX2NDC,this._ratio_up_fp.o_sizeChanged()},a))})})()}static draw(a,e,l){return(0,E.Z)(function*(){let o=new z(a,e,l);return(0,X.ensureTCanvas)(o,!1).then(()=>o.redraw())})()}}}}]); -//# sourceMappingURL=230.9df4c215ca49efed.js.map \ No newline at end of file diff --git a/docs/230.9df4c215ca49efed.js.map b/docs/230.9df4c215ca49efed.js.map deleted file mode 100644 index c6a1bbe01..000000000 --- a/docs/230.9df4c215ca49efed.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"230.9df4c215ca49efed.js","mappings":"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","names":["TRatioPlotPainter","ObjectPainter","setGridsRange","xmin","xmax","ratio","this","getObject","x_handle","getPadPainter","findPainterFor","fLowerPad","clTPad","getFramePainter","full_min","full_max","fGridlines","forEach","line","fX1","fX2","redraw","_this","pp","top_p","fTopPad","disablePadDrawing","up_p","fUpperPad","up_main","getMainPainter","up_fp","low_p","low_main","low_fp","lbl_size","promise_up","Promise","resolve","_ratio_configured","options","Axis","getHisto","fYaxis","fLabelSize","Math","round","min","getPadWidth","getPadHeight","h","fXaxis","fTitle","fTitleSize","getRootPad","fTicky","redrawPad","then","o_zoom","zoom","_ratio_low_fp","_ratio_painter","ymin","ymax","zmin","zmax","o_sizeChanged","sizeChanged","fX1NDC","fX2NDC","forEachPainterInPad","objp","isFunc","testEditable","currpad","arr","fGridlinePositions","length","gridy","found","fY1","fY2","abs","create","clTLine","scale_xmin","scale_xmax","fLineStyle","push","undefined","selectCurrentPad","fName","drawTLine","getDom","all","_ratio_up_fp","static","dom","opt","painter","ensureTCanvas"],"sourceRoot":"webpack:///","sources":["../node_modules/jsroot/modules/draw/TRatioPlotPainter.mjs"],"sourcesContent":["import { create, clTPad, clTLine, isFunc } from '../core.mjs';\nimport { ObjectPainter } from '../base/ObjectPainter.mjs';\nimport { ensureTCanvas } from '../gpad/TCanvasPainter.mjs';\nimport { drawTLine } from './more.mjs';\n\n\n/**\n * @summary Painter class for TRatioPlot\n *\n * @private\n */\n\nclass TRatioPlotPainter extends ObjectPainter {\n\n /** @summary Set grids range */\n setGridsRange(xmin, xmax) {\n let ratio = this.getObject();\n if (xmin === xmax) {\n let x_handle = this.getPadPainter()?.findPainterFor(ratio.fLowerPad, 'lower_pad', clTPad)?.getFramePainter()?.x_handle;\n if (!x_handle) return;\n xmin = x_handle.full_min;\n xmax = x_handle.full_max;\n }\n\n ratio.fGridlines.forEach(line => {\n line.fX1 = xmin;\n line.fX2 = xmax;\n });\n }\n\n /** @summary Redraw TRatioPlot */\n async redraw() {\n let ratio = this.getObject(),\n pp = this.getPadPainter();\n\n let top_p = pp.findPainterFor(ratio.fTopPad, 'top_pad', clTPad);\n if (top_p) top_p.disablePadDrawing();\n\n let up_p = pp.findPainterFor(ratio.fUpperPad, 'upper_pad', clTPad),\n up_main = up_p?.getMainPainter(),\n up_fp = up_p?.getFramePainter(),\n low_p = pp.findPainterFor(ratio.fLowerPad, 'lower_pad', clTPad),\n low_main = low_p?.getMainPainter(),\n low_fp = low_p?.getFramePainter(),\n lbl_size = 20, promise_up = Promise.resolve(true);\n\n if (up_p && up_main && up_fp && low_fp && !up_p._ratio_configured) {\n up_p._ratio_configured = true;\n up_main.options.Axis = 0; // draw both axes\n\n lbl_size = up_main.getHisto().fYaxis.fLabelSize;\n if (lbl_size < 1) lbl_size = Math.round(lbl_size*Math.min(up_p.getPadWidth(), up_p.getPadHeight()));\n\n let h = up_main.getHisto();\n h.fXaxis.fLabelSize = 0; // do not draw X axis labels\n h.fXaxis.fTitle = ''; // do not draw X axis title\n h.fYaxis.fLabelSize = lbl_size;\n h.fYaxis.fTitleSize = lbl_size;\n\n up_p.getRootPad().fTicky = 1;\n\n promise_up = up_p.redrawPad().then(() => {\n up_fp.o_zoom = up_fp.zoom;\n up_fp._ratio_low_fp = low_fp;\n up_fp._ratio_painter = this;\n\n up_fp.zoom = function(xmin,xmax,ymin,ymax,zmin,zmax) {\n this._ratio_painter.setGridsRange(xmin, xmax);\n this._ratio_low_fp.o_zoom(xmin,xmax);\n return this.o_zoom(xmin,xmax,ymin,ymax,zmin,zmax);\n }\n\n up_fp.o_sizeChanged = up_fp.sizeChanged;\n up_fp.sizeChanged = function() {\n this.o_sizeChanged();\n this._ratio_low_fp.fX1NDC = this.fX1NDC;\n this._ratio_low_fp.fX2NDC = this.fX2NDC;\n this._ratio_low_fp.o_sizeChanged();\n }\n return true;\n });\n }\n\n return promise_up.then(() => {\n\n if (!low_p || !low_main || !low_fp || !up_fp || low_p._ratio_configured)\n return this;\n\n low_p._ratio_configured = true;\n low_main.options.Axis = 0; // draw both axes\n let h = low_main.getHisto();\n h.fXaxis.fTitle = 'x';\n h.fXaxis.fLabelSize = lbl_size;\n h.fXaxis.fTitleSize = lbl_size;\n h.fYaxis.fLabelSize = lbl_size;\n h.fYaxis.fTitleSize = lbl_size;\n low_p.getRootPad().fTicky = 1;\n\n low_p.forEachPainterInPad(objp => {\n if (isFunc(objp?.testEditable))\n objp.testEditable(false);\n });\n\n let arr = [], currpad;\n\n if ((ratio.fGridlinePositions.length > 0) && (ratio.fGridlines.length < ratio.fGridlinePositions.length)) {\n ratio.fGridlinePositions.forEach(gridy => {\n let found = false;\n ratio.fGridlines.forEach(line => {\n if ((line.fY1 == line.fY2) && (Math.abs(line.fY1 - gridy) < 1e-6)) found = true;\n });\n if (!found) {\n let line = create(clTLine);\n line.fX1 = up_fp.scale_xmin;\n line.fX2 = up_fp.scale_xmax;\n line.fY1 = line.fY2 = gridy;\n line.fLineStyle = 2;\n ratio.fGridlines.push(line);\n if (currpad === undefined)\n currpad = this.selectCurrentPad(ratio.fLowerPad.fName);\n arr.push(drawTLine(this.getDom(), line));\n }\n });\n }\n\n return Promise.all(arr).then(() => low_fp.zoom(up_fp.scale_xmin, up_fp.scale_xmax)).then(() => {\n\n low_fp.o_zoom = low_fp.zoom;\n low_fp._ratio_up_fp = up_fp;\n low_fp._ratio_painter = this;\n\n low_fp.zoom = function(xmin,xmax,ymin,ymax,zmin,zmax) {\n this._ratio_painter.setGridsRange(xmin, xmax);\n this._ratio_up_fp.o_zoom(xmin,xmax);\n return this.o_zoom(xmin,xmax,ymin,ymax,zmin,zmax);\n }\n\n low_fp.o_sizeChanged = low_fp.sizeChanged;\n low_fp.sizeChanged = function() {\n this.o_sizeChanged();\n this._ratio_up_fp.fX1NDC = this.fX1NDC;\n this._ratio_up_fp.fX2NDC = this.fX2NDC;\n this._ratio_up_fp.o_sizeChanged();\n }\n return this;\n });\n });\n }\n\n /** @summary Draw TRatioPlot */\n static async draw(dom, ratio, opt) {\n let painter = new TRatioPlotPainter(dom, ratio, opt);\n\n return ensureTCanvas(painter, false).then(() => painter.redraw());\n }\n\n} // class TRatioPlotPainter\n\nexport { TRatioPlotPainter };\n"],"x_google_ignoreList":[0]} \ No newline at end of file diff --git a/docs/241.4ed7b8d7fa416235.js b/docs/241.0104cfbdf782cd5b.js similarity index 86% rename from docs/241.4ed7b8d7fa416235.js rename to docs/241.0104cfbdf782cd5b.js index e9660aa4b..5da8b12ac 100644 --- a/docs/241.4ed7b8d7fa416235.js +++ b/docs/241.0104cfbdf782cd5b.js @@ -1,2 +1,2 @@ -"use strict";(self.webpackChunkphoenix_app=self.webpackChunkphoenix_app||[]).push([[241],{8241:(D,Y,M)=>{M.r(Y),M.d(Y,{TGraphPainter:()=>A,clTGraphAsymmErrors:()=>C});var $=M(4788),_=M(9542),P=M(2253),w=M(3675),G=M(6458),j=M(9670),O=M(6367),L=M(3627),N=M(9622);const T=(0,_.BIT)(18),X="TGraphErrors",C="TGraphAsymmErrors",z="TGraphBentErrors",S="TGraphMultiErrors";class A extends G.tK{constructor(t,i){super(t,i),this.axes_draw=!1,this.bins=null,this.xmin=this.ymin=this.xmax=this.ymax=0,this.wheel_zoomy=!0,this.is_bent=i._typename==z,this.has_errors=i._typename==X||i._typename==S||i._typename==C||this.is_bent||i._typename.match(/^RooHist/)}redraw(){var t=this;return(0,$.Z)(function*(){let i=Promise.resolve(!0);if(t.$redraw_hist){delete t.$redraw_hist;let r=t.getMainPainter();r?.$secondary&&t.axes_draw&&(i=r.redraw())}return i.then(()=>t.drawGraph())})()}cleanup(){delete this.interactive_bin,delete this.bins,super.cleanup()}get_gme(){let t=this.getObject();return t?._typename==S?t:null}decodeOptions(t,i){(0,_.isStr)(t)&&0==t.indexOf("same ")&&(t=t.slice(5));let r=this.getObject(),s=!!this.get_gme(),n=[],l=i?!!this.getMainPainter():!this.axes_draw;this.options||(this.options={});const g=(x,e)=>{Object.assign(e,{Line:0,Curve:0,Rect:0,Mark:0,Bar:0,OutRange:0,EF:0,Fill:0,MainError:1,Ends:1,ScaleErrX:1}),s&&x.check("S=",!0)&&(e.ScaleErrX=x.partAsFloat()),x.check("L")&&(e.Line=1),x.check("F")&&(e.Fill=1),x.check("CC")&&(e.Curve=2),x.check("C")&&(e.Curve=1),x.check("*")&&(e.Mark=103),x.check("P0")&&(e.Mark=104),x.check("P")&&(e.Mark=1),x.check("B")&&(e.Bar=1,e.Errors=0),x.check("Z")&&(e.Errors=1,e.Ends=0),x.check("||")&&(e.Errors=1,e.MainError=0,e.Ends=1),x.check("[]")&&(e.Errors=1,e.MainError=0,e.Ends=2),x.check("|>")&&(e.Errors=1,e.Ends=3),x.check(">")&&(e.Errors=1,e.Ends=4),x.check("0")&&(e.Mark=1,e.Errors=1,e.OutRange=1),x.check("1")&&1==e.Bar&&(e.Bar=2),x.check("2")&&(e.Rect=1,e.Errors=0),x.check("3")&&(e.EF=1,e.Errors=0),x.check("4")&&(e.EF=2,e.Errors=0),x.check("5")&&(e.Rect=2,e.Errors=0),x.check("X")&&(e.Errors=0)};Object.assign(this.options,{Axis:"",NoOpt:0,PadStats:!1,original:t,second_x:!1,second_y:!1,individual_styles:!1}),s&&t&&(t.indexOf(";")>0?(n=t.split(";"),t=n.shift()):t.indexOf("_")>0&&(n=t.split("_"),t=n.shift()));let a=this.options,f=new w.pc(t);a.PadStats=f.check("USE_PAD_STATS");let y="";if(["USE_PAD_TITLE","LOGXY","LOGX","LOGY","LOGZ","GRIDXY","GRIDX","GRIDY","TICKXY","TICKX","TICKY"].forEach(x=>{f.check(x)&&(y+=";"+x)}),f.check("XAXIS_",!0)&&(y+=";XAXIS_"+f.part),f.check("YAXIS_",!0)&&(y+=";YAXIS_"+f.part),f.empty()&&(a.original=l?"lp":"alp",f=new w.pc(a.original)),f.check("NOOPT")&&(a.NoOpt=1),f.check("POS3D_",!0)&&(a.pos3d=f.partAsInt()-.5),a._pfc=f.check("PFC"),a._plc=f.check("PLC"),a._pmc=f.check("PMC"),f.check("A")&&(a.Axis=f.check("I")?"A":"AXIS"),f.check("X+")&&(a.Axis+="X+",a.second_x=l),f.check("Y+")&&(a.Axis+="Y+",a.second_y=l),f.check("RX")&&(a.Axis+="RX"),f.check("RY")&&(a.Axis+="RY"),s&&(a.blocks=[],a.skip_errors_x0=a.skip_errors_y0=!1,f.check("X0")&&(a.skip_errors_x0=!0),f.check("Y0")&&(a.skip_errors_y0=!0)),g(f,a),s&&f.check("S")&&(a.individual_styles=!0),void 0===a.Errors&&(a.Errors=!this.has_errors||s&&n.length?0:1),1==a.Mark&&1==r.fMarkerStyle&&(a.Mark=101),a.Line+a.Fill+a.Curve+a.Mark+a.Bar+a.EF+a.Rect+a.Errors==0&&f.empty()&&(a.Line=1),r._typename==X){let x=r.fEX.length,e=0;for(let h=0;h{r.eylow=i.fEyL[t][r.indx],r.eyhigh=i.fEyH[t][r.indx]})}createBins(){let t=this.getObject();if(!t)return;let i=0,r=t.fNpoints;t._typename===_.clTCutG&&r>3&&r--,t._typename==X?i=1:t._typename==S?i=2:(t._typename==C||t._typename==z||t._typename.match(/^RooHist/))&&(i=3),this.bins=new Array(r);for(let s=0;s0?(this.xmin=Math.min(this.xmin,n.x-n.exlow,n.x+n.exhigh),this.xmax=Math.max(this.xmax,n.x-n.exlow,n.x+n.exhigh),this.ymin=Math.min(this.ymin,n.y-n.eylow,n.y+n.eyhigh),this.ymax=Math.max(this.ymax,n.y-n.eylow,n.y+n.eyhigh)):(this.xmin=Math.min(this.xmin,n.x),this.xmax=Math.max(this.xmax,n.x),this.ymin=Math.min(this.ymin,n.y),this.ymax=Math.max(this.ymax,n.y))}}createHistogram(t,i){!t&&!i&&(t=i=!0);let r=this.xmin,s=this.xmax,n=this.ymin,l=this.ymax;r>=s&&(s=r+1),n>=l&&(l=n+1);let g=.1*(s-r),a=.1*(l-n),f=r-g,y=s+g,o=n-a,x=l+a;f<0&&r>=0&&(f=.9*r),y>0&&s<=0&&(y=0);let e=this.getObject(),h=e.fHistogram,m=o,c=x;if(h)h.fMaximum!=_.kNoZoom&&h.fMinimum!=_.kNoZoom&&(o=h.fMinimum,x=h.fMaximum);else{h=e.fHistogram=(0,_.createHistogram)("TH1F",100),h.fName=e.fName+"_h";const d=(0,_.BIT)(9);h.fBits=h.fBits|d,this._own_histogram=!0}return e.fMinimum!=_.kNoZoom&&(o=n=e.fMinimum),e.fMaximum!=_.kNoZoom&&(x=e.fMaximum),o<0&&n>=0&&(o=.9*n),h.fTitle=e.fTitle,t&&(h.fXaxis.fXmin=f,h.fXaxis.fXmax=y),i&&(h.fYaxis.fXmin=Math.min(m,o),h.fYaxis.fXmax=Math.max(c,x),h.fMinimum=o,h.fMaximum=x),h}unzoomUserRange(t,i){let r=this.getObject();if(this._own_histogram||!r)return!1;let s=r.fHistogram;return i=i&&s&&(s.fYaxis.fXmin>this.ymin||s.fYaxis.fXmaxthis.xmin||s.fXaxis.fXmax0&&!this.options.NoOpt}optimizeBins(t,i){if(this.bins.length<30&&!i)return this.bins;let r=null;if((0,_.isFunc)(i))for(let l=0;l0)&&"normal"==s.y_handle.kind&&(t.eylow||t.eyhigh)&&r.push("error y = -"+s.axisAsText("y",t.eylow)+"/+"+s.axisAsText("y",t.eyhigh));return r}get_main(){let t=this.getFramePainter();if(t&&t.grx&&t.gry)return t;let i=this.getPadPainter(),r=i?.getPadRect()||{width:800,height:600};return t={pad_layer:!0,pad:i?.getRootPad(!0),pw:r.width,ph:r.height,getFrameWidth(){return this.pw},getFrameHeight(){return this.ph},grx(s){return(s=this.pad.fLogx?s>0?Math.log10(s):this.pad.fUxmin:(s-this.pad.fX1)/(this.pad.fX2-this.pad.fX1))*this.pw},gry(s){return(1-(s=this.pad.fLogy?s>0?Math.log10(s):this.pad.fUymin:(s-this.pad.fY1)/(this.pad.fY2-this.pad.fY1)))*this.ph},revertAxis(s,n){return"x"==s?n/this.pw*(this.pad.fX2-this.pad.fX1)+this.pad.fX1:"y"==s?(1-n/this.ph)*(this.pad.fY2-this.pad.fY1)+this.pad.fY1:n},getGrFuncs(){return this}},t.pad?t:null}appendExclusion(t,i,r,s){let n=[];for(let g=r.length-1;g>=0;--g){let a=r[g],f=Math.sqrt(a.dgrx**2+a.dgry**2);a.grx+=s*a.dgry/f,a.gry-=s*a.dgrx/f,n.push(a)}let l=(0,w.Cq)(t?"Lbezier":"Lline",n);this.draw_g.append("svg:path").attr("d",i.path+l.path+"Z").call(this.fillatt.func).style("opacity",.75)}drawBins(t,i,r,s,n,l,g,a){let f=this.getObject(),y=0,o=null;if(a&&l.excl_side&&(y=l.excl_width,l.width>0&&!i.Line&&!i.Curve&&(i.Line=1)),i.EF){o=this.optimizeBins(i.EF>1?2e4:0);for(let c=0;c1?"bezier":"line",o),h=[];for(let c=o.length-1;c>=0;--c){let d=o[c];d.gry=t.gry(d.y+d.eyhigh),h.push(d)}let m=(0,w.Cq)(i.EF>1?"Lbezier":"Lline",h);r.append("svg:path").attr("d",e.path+m.path+"Z").call(g.func),a&&(this.draw_kind="lines")}if(i.Line||i.Fill){let e="";f._typename==_.clTCutG&&(i.Fill=1),i.Fill&&(e="Z",y=0),o||(o=this.optimizeBins(0));for(let d=0;d2e4){e=this.optimizeBins(1==i.Curve?2e4:0);for(let c=0;c{let m=t.grx(e.x);if(!i.Bar&&(m<0||m>s))return!0;let c=t.gry(e.y);return!i.Bar&&!i.OutRange&&(c<0||c>n)||(e.grx1=Math.round(m),e.gry1=Math.round(c),this.has_errors&&(e.grx0=Math.round(t.grx(e.x-i.ScaleErrX*e.exlow)-m),e.grx2=Math.round(t.grx(e.x+i.ScaleErrX*e.exhigh)-m),e.gry0=Math.round(t.gry(e.y-e.eylow)-c),e.gry2=Math.round(t.gry(e.y+e.eyhigh)-c),this.is_bent?(e.grdx0=Math.round(t.gry(e.y+f.fEXlowd[h])-c),e.grdx2=Math.round(t.gry(e.y+f.fEXhighd[h])-c),e.grdy0=Math.round(t.grx(e.x+f.fEYlowd[h])-m),e.grdy2=Math.round(t.grx(e.x+f.fEYhighd[h])-m)):e.grdx0=e.grdx2=e.grdy0=e.grdy2=0),!1)}),a&&(this.draw_kind="nodes"),x=r.selectAll(".grpoint").data(o).enter().append("svg:g").attr("class","grpoint").attr("transform",e=>`translate(${e.grx1},${e.gry1})`)),i.Bar){for(let m=1;m{m.bar=!0;let c=Math.round(-m.width/2),d=Math.round(m.width);return`M${c},${1!==i.Bar?0:m.gry1>e?e-m.gry1:0}h${d}v${1!==i.Bar?n>m.gry1?n-m.gry1:0:Math.abs(e-m.gry1)}h${-d}z`}).call(h.func)}if(i.Rect&&x.filter(e=>e.exlow>0&&e.exhigh>0&&e.eylow>0&&e.eyhigh>0).append("svg:path").attr("d",e=>(e.rect=!0,`M${e.grx0},${e.gry0}H${e.grx2}V${e.gry2}H${e.grx0}Z`)).call(g.func).call(2===i.Rect?l.func:()=>{}),this.error_size=0,i.Errors){let e=l.width+_.gStyle.fEndErrorSize,h=0,m=i.Ends?`m0,${e}v${-2*e}`:"",c=i.Ends?`m${e},0h${-2*e}`:"",d=m,p=m,b=c,k=c;const E=(u,F)=>{if(!i.MainError)return`M${u},${F}`;let B="M0,0";return u?B+(F?`L${u},${F}`:`H${u}`):F?B+`V${F}`:B};switch(i.Ends){case 2:h=Math.max(l.width+1,Math.round(.66*e)),d=`m${h},${e}h${-h}v${-2*e}h${h}`,p=`m${-h},${e}h${h}v${-2*e}h${-h}`,b=`m${-e},${h}v${-h}h${2*e}v${h}`,k=`m${-e},${-h}v${h}h${2*e}v${-h}`;break;case 3:e=Math.max(e,Math.round(8*f.fMarkerSize*.66)),h=Math.max(l.width+1,Math.round(.66*e)),d=`l${h},${e}v${-2*e}l${-h},${e}`,p=`l${-h},${e}v${-2*e}l${h},${e}`,b=`l${-e},${h}h${2*e}l${-e},${-h}`,k=`l${-e},${-h}h${2*e}l${-e},${h}`;break;case 4:e=Math.max(e,Math.round(8*f.fMarkerSize*.66)),h=Math.max(l.width+1,Math.round(.66*e)),d=`l${h},${e}m0,${-2*e}l${-h},${e}`,p=`l${-h},${e}m0,${-2*e}l${h},${e}`,b=`l${-e},${h}m${2*e},0l${-e},${-h}`,k=`l${-e},${-h}m${2*e},0l${-e},${h}`}this.error_size=e,e=Math.floor((l.width-1)/2);let v=x.filter(u=>u.exlow>0||u.exhigh>0||u.eylow>0||u.eyhigh>0);(i.skip_errors_x0||i.skip_errors_y0)&&(v=v.filter(u=>!(0==u.x&&i.skip_errors_x0||0==u.y&&i.skip_errors_y0))),!(0,_.isBatchMode)()&&_.settings.Tooltip&&a&&v.append("svg:path").style("fill","none").style("pointer-events","visibleFill").attr("d",u=>`M${u.grx0},${u.gry0}h${u.grx2-u.grx0}v${u.gry2-u.gry0}h${u.grx0-u.grx2}z`),v.append("svg:path").call(l.func).style("fill","none").attr("d",u=>(u.error=!0,(u.exlow>0?E(u.grx0+e,u.grdx0)+d:"")+(u.exhigh>0?E(u.grx2-e,u.grdx2)+p:"")+(u.eylow>0?E(u.grdy0,u.gry0-e)+k:"")+(u.eyhigh>0?E(u.grdy2,u.gry2+e)+b:"")))}if(i.Mark){this.createAttMarker({attr:f,style:i.Mark-100}),this.marker_size=this.markeratt.getFullSize(),this.markeratt.resetPos();let h,m,c,e="",d=!(0,_.isBatchMode)()&&_.settings.Tooltip&&(!this.markeratt.fill||this.marker_size<7)&&!x&&a,p="",b=Math.max(5,Math.round(.7*this.marker_size)),k=1e6/(this.markeratt.getMarkerLength()+7),E=1;o?this.canOptimize()&&o.length>1.5*k&&(E=Math.min(2,Math.round(o.length/k))):o=this.optimizeBins(k);for(let v=0;v-this.marker_size&&m-this.marker_size&&c`M${t.grx(e)},${t.gry(h)}L${t.grx(m)},${t.gry(c)}`,f=(i.fYq2-i.fYq1)*(t.scale_xmin-i.fXq1)/(i.fXq2-i.fXq1)+i.fYq1,y=(i.fYq2-i.fYq1)*(t.scale_xmax-i.fXq1)/(i.fXq2-i.fXq1)+i.fYq1;g=ft.scale_ymax?a(s,l,(i.fXq2-i.fXq1)*(t.scale_ymax-i.fYq1)/(i.fYq2-i.fYq1)+i.fXq1,t.scale_ymax):a(s,l,t.scale_xmax,y);let o=new O.rE({style:1,width:1,color:"black"}),x=new O.rE({style:2,width:1,color:"black"});this.draw_g.append("path").attr("d",a(r,n,s,l)).call(o.func).style("fill","none"),this.draw_g.append("path").attr("d",g).call(x.func).style("fill","none")}drawBins3D(){console.log("Load ./hist/TGraphPainter.mjs to draw graph in 3D")}drawGraph(){let t=this.get_main(),i=this.getObject();if(!t)return;if(this.options.pos3d)return this.drawBins3D(t,i);let r=!!this.get_gme(),s=t.getGrFuncs(this.options.second_x,this.options.second_y),n=t.getFrameWidth(),l=t.getFrameHeight();if(this.createG(!t.pad_layer),this.options._pfc||this.options._plc||this.options._pmc){let a=this.getMainPainter();if((0,_.isFunc)(a?.createAutoColor)){let f=a.createAutoColor();this.options._pfc&&(i.fFillColor=f,delete this.fillatt),this.options._plc&&(i.fLineColor=f,delete this.lineatt),this.options._pmc&&(i.fMarkerColor=f,delete this.markeratt),this.options._pfc=this.options._plc=this.options._pmc=!1}}this.createAttLine({attr:i,can_excl:!0}),this.createAttFill({attr:i}),this.fillatt.used=!1,this.draw_kind="none",this.marker_size=0;let g=r?this.draw_g.append("svg:g"):this.draw_g;if(this.drawBins(s,this.options,g,n,l,this.lineatt,this.fillatt,!0),"TGraphQQ"==i._typename&&this.appendQQ(s,i),r){for(let a=0;a=a)return;if(h.error||h.rect||h.marker)c={x1:Math.min(-s,h.grx0,-y),x2:Math.max(s,h.grx2,y),y1:Math.min(-s,h.gry2,-y),y2:Math.max(s,h.gry0,y)};else if(h.bar){if(c={x1:-h.width/2,x2:h.width/2,y1:0,y2:r-h.gry1},n){let b=l.gry(0);c.y1=h.gry1>b?b-h.gry1:0,c.y2=h.gry1>b?0:b-h.gry1}}else c={x1:-5,x2:5,y1:-5,y2:5};let p=t.y>=h.gry1+c.y1&&t.y<=h.gry1+c.y2;t.x>=h.grx1+c.x1&&t.x<=h.grx1+c.x2&&(p||t.nproc>1)&&(a=m,g=this,f=c,f.exact=p)}),null===g)return null;let o=(0,P.Ys)(g).datum(),x=this.getObject(),e={name:x.fName,title:x.fTitle,x:o.grx1,y:o.gry1,color1:this.lineatt.color,lines:this.getTooltips(o),rect:f,d3bin:g};return e.user_info={obj:x,name:x.fName,bin:o.indx,cont:o.y,grx:o.grx1,gry:o.gry1},this.fillatt&&this.fillatt.used&&!this.fillatt.empty()&&(e.color2=this.fillatt.getFillColor()),f.exact&&(e.exact=!0),e.menu=e.exact,e.menu_dist=3,e.bin=o,e.binindx=o.indx,e}showTooltip(t){if(!t)return void(this.draw_g&&this.draw_g.select(".tooltip_bin").remove());if(t.usepath)return this.showTooltipForPath(t);let i=(0,P.Ys)(t.d3bin).datum(),r=this.draw_g.select(".tooltip_bin");r.empty()&&(r=this.draw_g.append("svg:rect").attr("class","tooltip_bin h1bin").style("pointer-events","none")),t.changed=r.property("current_bin")!==t.d3bin,t.changed&&r.attr("x",i.grx1+t.rect.x1).attr("width",t.rect.x2-t.rect.x1).attr("y",i.gry1+t.rect.y1).attr("height",t.rect.y2-t.rect.y1).style("opacity","0.3").property("current_bin",t.d3bin)}processTooltipEvent(t){let i=this.extractTooltip(t);return(!t||!t.disabled)&&this.showTooltip(i),i}findBestBin(t){if(!this.bins)return null;let g,a,f,y,o,i="lines"==this.draw_kind,r=-1,s=null,n=1e10,l=this.get_main().getGrFuncs(this.options.second_x,this.options.second_y);for(y=0;y100&&i&&(s=null);let x=Math.max(this.lineatt.width+3,4);this.marker_size>0&&(x=Math.max(this.marker_size,x)),s&&(n=Math.sqrt((t.x-l.grx(s.x))**2+(t.y-l.gry(s.y))**2)),!i&&n>x&&(s=null),s||(r=-1);let e={bin:s,indx:r,dist:n,radius:Math.round(x)};if(!s&&i){n=1e10;const h=(b,k,E)=>k>=b&&b>=E||k<=b&&b<=E;let d,m=this.bins[0],c=l.grx(m.x),p=0;for(y=1;y1&&i.append("svg:circle").attr("cy",Math.round(t.gry2));let r=i.selectAll("circle").attr("r",t.radius).attr("cx",Math.round(t.x));t.islines?(this.options.Line||this.options.Curve?r.call(this.lineatt.func):r.style("stroke","black"),this.options.Fill?r.call(this.fillatt.func):r.style("fill","none")):r.style("stroke","black"==t.color1?"green":"black").style("fill","none")}}else i.remove()}moveEnabled(){return this.testEditable()}moveStart(t,i){this.pos_dx=this.pos_dy=0,this.move_funcs=this.get_main().getGrFuncs(this.options.second_x,this.options.second_y);let r=this.extractTooltip({x:t,y:i});r&&r.exact&&void 0!==r.binindx?(this.move_binindx=r.binindx,this.move_bin=r.bin,this.move_x0=this.move_funcs.grx(this.move_bin.x),this.move_y0=this.move_funcs.gry(this.move_bin.y)):delete this.move_binindx}moveDrag(t,i){this.pos_dx+=t,this.pos_dy+=i,void 0===this.move_binindx?this.draw_g.attr("transform",`translate(${this.pos_dx},${this.pos_dy})`):this.move_funcs&&this.move_bin&&(this.move_bin.x=this.move_funcs.revertAxis("x",this.move_x0+this.pos_dx),this.move_bin.y=this.move_funcs.revertAxis("y",this.move_y0+this.pos_dy),this.drawGraph())}moveEnd(t){let i="";if(void 0===this.move_binindx){if(this.draw_g.attr("transform",null),this.move_funcs&&this.bins&&!t){for(let r=0;r{this.testEditable("toggle"),this.drawGraph()}),t.size()>0}executeMenuCommand(t,i){if(super.executeMenuCommand(t,i))return!0;let r=this.getCanvPainter(),s=this.get_main();if("RemovePoint"==t.fName||"InsertPoint"==t.fName){if(!r||r._readonly)return!0;let n=this.extractTooltip(pnt);if("InsertPoint"==t.fName){let l=(0,_.isFunc)(s.getLastEventPos)?s.getLastEventPos():null;if(l){let g=s.getGrFuncs(this.options.second_x,this.options.second_y),a=g.revertAxis("x",l.x)??0,f=g.revertAxis("y",l.y)??0;this.submitCanvExec(`AddPoint(${a.toFixed(3)}, ${f.toFixed(3)})`,this.args_menu_id)}}else this.args_menu_id&&void 0!==n?.binindx&&this.submitCanvExec(`RemovePoint(${n.binindx})`,this.args_menu_id);return!0}return!1}updateObject(t,i){if(!this.matchObjectType(t))return!1;i&&i!=this.options.original&&this.decodeOptions(i);let r=this.getObject();if(r.fBits=t.fBits,r.fTitle=t.fTitle,r.fX=t.fX,r.fY=t.fY,r.fNpoints=t.fNpoints,r.fMinimum=t.fMinimum,r.fMaximum=t.fMaximum,this.createBins(),delete this.$redraw_hist,this.axes_draw){let s=this.createHistogram();s.fTitle=r.fTitle;let n=this.getMainPainter();n?.$secondary&&(n.updateObject(s,this.options.Axis),this.$redraw_hist=!0)}return!0}canZoomInside(t,i,r){let s=this.getObject();if(!s||t!==(this.options.pos3d?"y":"x"))return!1;for(let n=0;ni._typename==_.clTF1||i._typename==_.clTF2):null}findStat(){let t=this.getObject();if(t?.fFunctions?.arr)for(let i=0;i=(r?.fFunctions?.arr?.length||0))return i;let s=i.getPadPainter(),n=r.fFunctions.arr[t],l=r.fFunctions.opt[t];return n.$main_painter=i,s.drawObject(i.getDom(),n,l).then(()=>i.drawNextFunction(t+1))})()}drawAxisHisto(){var t=this;return(0,$.Z)(function*(){let i=t.createHistogram();return j.f.draw(t.getDom(),i,t.options.Axis)})()}static _drawGraph(t,i){return(0,$.Z)(function*(){t.decodeOptions(i,!0),t.createBins(),t.createStat(),!_.settings.DragGraphs&&!graph.TestBit(T)&&graph.InvertBit(T);let r=Promise.resolve();return(!t.getMainPainter()||t.options.second_x||t.options.second_y)&&t.options.Axis&&(r=t.drawAxisHisto().then(s=>{s&&(t.axes_draw=!0,t._own_histogram||(t.$primary=!0),s.$secondary="hist")})),r.then(()=>(t.addToPadPrimitives(),t.drawGraph())).then(()=>t.drawNextFunction(0))})()}static draw(t,i,r){return(0,$.Z)(function*(){return A._drawGraph(new A(t,i),r)})()}}}}]); -//# sourceMappingURL=241.4ed7b8d7fa416235.js.map \ No newline at end of file +"use strict";(self.webpackChunkphoenix_app=self.webpackChunkphoenix_app||[]).push([[241],{8241:(D,Y,M)=>{M.r(Y),M.d(Y,{TGraphPainter:()=>A,clTGraphAsymmErrors:()=>C});var $=M(5835),_=M(9542),P=M(2253),w=M(3675),G=M(6458),N=M(9670),O=M(6367),L=M(3627),j=M(9622);const T=(0,_.BIT)(18),X="TGraphErrors",C="TGraphAsymmErrors",z="TGraphBentErrors",S="TGraphMultiErrors";class A extends G.tK{constructor(t,i){super(t,i),this.axes_draw=!1,this.bins=null,this.xmin=this.ymin=this.xmax=this.ymax=0,this.wheel_zoomy=!0,this.is_bent=i._typename==z,this.has_errors=i._typename==X||i._typename==S||i._typename==C||this.is_bent||i._typename.match(/^RooHist/)}redraw(){var t=this;return(0,$.Z)(function*(){let i=Promise.resolve(!0);if(t.$redraw_hist){delete t.$redraw_hist;let r=t.getMainPainter();r?.$secondary&&t.axes_draw&&(i=r.redraw())}return i.then(()=>t.drawGraph())})()}cleanup(){delete this.interactive_bin,delete this.bins,super.cleanup()}get_gme(){let t=this.getObject();return t?._typename==S?t:null}decodeOptions(t,i){(0,_.isStr)(t)&&0==t.indexOf("same ")&&(t=t.slice(5));let r=this.getObject(),s=!!this.get_gme(),n=[],l=i?!!this.getMainPainter():!this.axes_draw;this.options||(this.options={});const g=(x,e)=>{Object.assign(e,{Line:0,Curve:0,Rect:0,Mark:0,Bar:0,OutRange:0,EF:0,Fill:0,MainError:1,Ends:1,ScaleErrX:1}),s&&x.check("S=",!0)&&(e.ScaleErrX=x.partAsFloat()),x.check("L")&&(e.Line=1),x.check("F")&&(e.Fill=1),x.check("CC")&&(e.Curve=2),x.check("C")&&(e.Curve=1),x.check("*")&&(e.Mark=103),x.check("P0")&&(e.Mark=104),x.check("P")&&(e.Mark=1),x.check("B")&&(e.Bar=1,e.Errors=0),x.check("Z")&&(e.Errors=1,e.Ends=0),x.check("||")&&(e.Errors=1,e.MainError=0,e.Ends=1),x.check("[]")&&(e.Errors=1,e.MainError=0,e.Ends=2),x.check("|>")&&(e.Errors=1,e.Ends=3),x.check(">")&&(e.Errors=1,e.Ends=4),x.check("0")&&(e.Mark=1,e.Errors=1,e.OutRange=1),x.check("1")&&1==e.Bar&&(e.Bar=2),x.check("2")&&(e.Rect=1,e.Errors=0),x.check("3")&&(e.EF=1,e.Errors=0),x.check("4")&&(e.EF=2,e.Errors=0),x.check("5")&&(e.Rect=2,e.Errors=0),x.check("X")&&(e.Errors=0)};Object.assign(this.options,{Axis:"",NoOpt:0,PadStats:!1,original:t,second_x:!1,second_y:!1,individual_styles:!1}),s&&t&&(t.indexOf(";")>0?(n=t.split(";"),t=n.shift()):t.indexOf("_")>0&&(n=t.split("_"),t=n.shift()));let a=this.options,f=new w.pc(t);a.PadStats=f.check("USE_PAD_STATS");let y="";if(["USE_PAD_TITLE","LOGXY","LOGX","LOGY","LOGZ","GRIDXY","GRIDX","GRIDY","TICKXY","TICKX","TICKY"].forEach(x=>{f.check(x)&&(y+=";"+x)}),f.check("XAXIS_",!0)&&(y+=";XAXIS_"+f.part),f.check("YAXIS_",!0)&&(y+=";YAXIS_"+f.part),f.empty()&&(a.original=l?"lp":"alp",f=new w.pc(a.original)),f.check("NOOPT")&&(a.NoOpt=1),f.check("POS3D_",!0)&&(a.pos3d=f.partAsInt()-.5),a._pfc=f.check("PFC"),a._plc=f.check("PLC"),a._pmc=f.check("PMC"),f.check("A")&&(a.Axis=f.check("I")?"A":"AXIS"),f.check("X+")&&(a.Axis+="X+",a.second_x=l),f.check("Y+")&&(a.Axis+="Y+",a.second_y=l),f.check("RX")&&(a.Axis+="RX"),f.check("RY")&&(a.Axis+="RY"),s&&(a.blocks=[],a.skip_errors_x0=a.skip_errors_y0=!1,f.check("X0")&&(a.skip_errors_x0=!0),f.check("Y0")&&(a.skip_errors_y0=!0)),g(f,a),s&&f.check("S")&&(a.individual_styles=!0),void 0===a.Errors&&(a.Errors=!this.has_errors||s&&n.length?0:1),1==a.Mark&&1==r.fMarkerStyle&&(a.Mark=101),a.Line+a.Fill+a.Curve+a.Mark+a.Bar+a.EF+a.Rect+a.Errors==0&&f.empty()&&(a.Line=1),r._typename==X){let x=r.fEX.length,e=0;for(let h=0;h{r.eylow=i.fEyL[t][r.indx],r.eyhigh=i.fEyH[t][r.indx]})}createBins(){let t=this.getObject();if(!t)return;let i=0,r=t.fNpoints;t._typename===_.clTCutG&&r>3&&r--,t._typename==X?i=1:t._typename==S?i=2:(t._typename==C||t._typename==z||t._typename.match(/^RooHist/))&&(i=3),this.bins=new Array(r);for(let s=0;s0?(this.xmin=Math.min(this.xmin,n.x-n.exlow,n.x+n.exhigh),this.xmax=Math.max(this.xmax,n.x-n.exlow,n.x+n.exhigh),this.ymin=Math.min(this.ymin,n.y-n.eylow,n.y+n.eyhigh),this.ymax=Math.max(this.ymax,n.y-n.eylow,n.y+n.eyhigh)):(this.xmin=Math.min(this.xmin,n.x),this.xmax=Math.max(this.xmax,n.x),this.ymin=Math.min(this.ymin,n.y),this.ymax=Math.max(this.ymax,n.y))}}createHistogram(t,i){!t&&!i&&(t=i=!0);let r=this.xmin,s=this.xmax,n=this.ymin,l=this.ymax;r>=s&&(s=r+1),n>=l&&(l=n+1);let g=.1*(s-r),a=.1*(l-n),f=r-g,y=s+g,o=n-a,x=l+a;f<0&&r>=0&&(f=.9*r),y>0&&s<=0&&(y=0);let e=this.getObject(),h=e.fHistogram,m=o,c=x;if(h)h.fMaximum!=_.kNoZoom&&h.fMinimum!=_.kNoZoom&&(o=h.fMinimum,x=h.fMaximum);else{h=e.fHistogram=(0,_.createHistogram)("TH1F",100),h.fName=e.fName+"_h";const d=(0,_.BIT)(9);h.fBits=h.fBits|d,this._own_histogram=!0}return e.fMinimum!=_.kNoZoom&&(o=n=e.fMinimum),e.fMaximum!=_.kNoZoom&&(x=e.fMaximum),o<0&&n>=0&&(o=.9*n),h.fTitle=e.fTitle,t&&(h.fXaxis.fXmin=f,h.fXaxis.fXmax=y),i&&(h.fYaxis.fXmin=Math.min(m,o),h.fYaxis.fXmax=Math.max(c,x),h.fMinimum=o,h.fMaximum=x),h}unzoomUserRange(t,i){let r=this.getObject();if(this._own_histogram||!r)return!1;let s=r.fHistogram;return i=i&&s&&(s.fYaxis.fXmin>this.ymin||s.fYaxis.fXmaxthis.xmin||s.fXaxis.fXmax0&&!this.options.NoOpt}optimizeBins(t,i){if(this.bins.length<30&&!i)return this.bins;let r=null;if((0,_.isFunc)(i))for(let l=0;l0)&&"normal"==s.y_handle.kind&&(t.eylow||t.eyhigh)&&r.push("error y = -"+s.axisAsText("y",t.eylow)+"/+"+s.axisAsText("y",t.eyhigh));return r}get_main(){let t=this.getFramePainter();if(t&&t.grx&&t.gry)return t;let i=this.getPadPainter(),r=i?.getPadRect()||{width:800,height:600};return t={pad_layer:!0,pad:i?.getRootPad(!0),pw:r.width,ph:r.height,getFrameWidth(){return this.pw},getFrameHeight(){return this.ph},grx(s){return(s=this.pad.fLogx?s>0?Math.log10(s):this.pad.fUxmin:(s-this.pad.fX1)/(this.pad.fX2-this.pad.fX1))*this.pw},gry(s){return(1-(s=this.pad.fLogy?s>0?Math.log10(s):this.pad.fUymin:(s-this.pad.fY1)/(this.pad.fY2-this.pad.fY1)))*this.ph},revertAxis(s,n){return"x"==s?n/this.pw*(this.pad.fX2-this.pad.fX1)+this.pad.fX1:"y"==s?(1-n/this.ph)*(this.pad.fY2-this.pad.fY1)+this.pad.fY1:n},getGrFuncs(){return this}},t.pad?t:null}appendExclusion(t,i,r,s){let n=[];for(let g=r.length-1;g>=0;--g){let a=r[g],f=Math.sqrt(a.dgrx**2+a.dgry**2);a.grx+=s*a.dgry/f,a.gry-=s*a.dgrx/f,n.push(a)}let l=(0,w.Cq)(t?"Lbezier":"Lline",n);this.draw_g.append("svg:path").attr("d",i.path+l.path+"Z").call(this.fillatt.func).style("opacity",.75)}drawBins(t,i,r,s,n,l,g,a){let f=this.getObject(),y=0,o=null;if(a&&l.excl_side&&(y=l.excl_width,l.width>0&&!i.Line&&!i.Curve&&(i.Line=1)),i.EF){o=this.optimizeBins(i.EF>1?2e4:0);for(let c=0;c1?"bezier":"line",o),h=[];for(let c=o.length-1;c>=0;--c){let d=o[c];d.gry=t.gry(d.y+d.eyhigh),h.push(d)}let m=(0,w.Cq)(i.EF>1?"Lbezier":"Lline",h);r.append("svg:path").attr("d",e.path+m.path+"Z").call(g.func),a&&(this.draw_kind="lines")}if(i.Line||i.Fill){let e="";f._typename==_.clTCutG&&(i.Fill=1),i.Fill&&(e="Z",y=0),o||(o=this.optimizeBins(0));for(let d=0;d2e4){e=this.optimizeBins(1==i.Curve?2e4:0);for(let c=0;c{let m=t.grx(e.x);if(!i.Bar&&(m<0||m>s))return!0;let c=t.gry(e.y);return!i.Bar&&!i.OutRange&&(c<0||c>n)||(e.grx1=Math.round(m),e.gry1=Math.round(c),this.has_errors&&(e.grx0=Math.round(t.grx(e.x-i.ScaleErrX*e.exlow)-m),e.grx2=Math.round(t.grx(e.x+i.ScaleErrX*e.exhigh)-m),e.gry0=Math.round(t.gry(e.y-e.eylow)-c),e.gry2=Math.round(t.gry(e.y+e.eyhigh)-c),this.is_bent?(e.grdx0=Math.round(t.gry(e.y+f.fEXlowd[h])-c),e.grdx2=Math.round(t.gry(e.y+f.fEXhighd[h])-c),e.grdy0=Math.round(t.grx(e.x+f.fEYlowd[h])-m),e.grdy2=Math.round(t.grx(e.x+f.fEYhighd[h])-m)):e.grdx0=e.grdx2=e.grdy0=e.grdy2=0),!1)}),a&&(this.draw_kind="nodes"),x=r.selectAll(".grpoint").data(o).enter().append("svg:g").attr("class","grpoint").attr("transform",e=>`translate(${e.grx1},${e.gry1})`)),i.Bar){for(let m=1;m{m.bar=!0;let c=Math.round(-m.width/2),d=Math.round(m.width);return`M${c},${1!==i.Bar?0:m.gry1>e?e-m.gry1:0}h${d}v${1!==i.Bar?n>m.gry1?n-m.gry1:0:Math.abs(e-m.gry1)}h${-d}z`}).call(h.func)}if(i.Rect&&x.filter(e=>e.exlow>0&&e.exhigh>0&&e.eylow>0&&e.eyhigh>0).append("svg:path").attr("d",e=>(e.rect=!0,`M${e.grx0},${e.gry0}H${e.grx2}V${e.gry2}H${e.grx0}Z`)).call(g.func).call(2===i.Rect?l.func:()=>{}),this.error_size=0,i.Errors){let e=l.width+_.gStyle.fEndErrorSize,h=0,m=i.Ends?`m0,${e}v${-2*e}`:"",c=i.Ends?`m${e},0h${-2*e}`:"",d=m,p=m,b=c,k=c;const E=(u,F)=>{if(!i.MainError)return`M${u},${F}`;let B="M0,0";return u?B+(F?`L${u},${F}`:`H${u}`):F?B+`V${F}`:B};switch(i.Ends){case 2:h=Math.max(l.width+1,Math.round(.66*e)),d=`m${h},${e}h${-h}v${-2*e}h${h}`,p=`m${-h},${e}h${h}v${-2*e}h${-h}`,b=`m${-e},${h}v${-h}h${2*e}v${h}`,k=`m${-e},${-h}v${h}h${2*e}v${-h}`;break;case 3:e=Math.max(e,Math.round(8*f.fMarkerSize*.66)),h=Math.max(l.width+1,Math.round(.66*e)),d=`l${h},${e}v${-2*e}l${-h},${e}`,p=`l${-h},${e}v${-2*e}l${h},${e}`,b=`l${-e},${h}h${2*e}l${-e},${-h}`,k=`l${-e},${-h}h${2*e}l${-e},${h}`;break;case 4:e=Math.max(e,Math.round(8*f.fMarkerSize*.66)),h=Math.max(l.width+1,Math.round(.66*e)),d=`l${h},${e}m0,${-2*e}l${-h},${e}`,p=`l${-h},${e}m0,${-2*e}l${h},${e}`,b=`l${-e},${h}m${2*e},0l${-e},${-h}`,k=`l${-e},${-h}m${2*e},0l${-e},${h}`}this.error_size=e,e=Math.floor((l.width-1)/2);let v=x.filter(u=>u.exlow>0||u.exhigh>0||u.eylow>0||u.eyhigh>0);(i.skip_errors_x0||i.skip_errors_y0)&&(v=v.filter(u=>!(0==u.x&&i.skip_errors_x0||0==u.y&&i.skip_errors_y0))),!(0,_.isBatchMode)()&&_.settings.Tooltip&&a&&v.append("svg:path").style("fill","none").style("pointer-events","visibleFill").attr("d",u=>`M${u.grx0},${u.gry0}h${u.grx2-u.grx0}v${u.gry2-u.gry0}h${u.grx0-u.grx2}z`),v.append("svg:path").call(l.func).style("fill","none").attr("d",u=>(u.error=!0,(u.exlow>0?E(u.grx0+e,u.grdx0)+d:"")+(u.exhigh>0?E(u.grx2-e,u.grdx2)+p:"")+(u.eylow>0?E(u.grdy0,u.gry0-e)+k:"")+(u.eyhigh>0?E(u.grdy2,u.gry2+e)+b:"")))}if(i.Mark){this.createAttMarker({attr:f,style:i.Mark-100}),this.marker_size=this.markeratt.getFullSize(),this.markeratt.resetPos();let h,m,c,e="",d=!(0,_.isBatchMode)()&&_.settings.Tooltip&&(!this.markeratt.fill||this.marker_size<7)&&!x&&a,p="",b=Math.max(5,Math.round(.7*this.marker_size)),k=1e6/(this.markeratt.getMarkerLength()+7),E=1;o?this.canOptimize()&&o.length>1.5*k&&(E=Math.min(2,Math.round(o.length/k))):o=this.optimizeBins(k);for(let v=0;v-this.marker_size&&m-this.marker_size&&c`M${t.grx(e)},${t.gry(h)}L${t.grx(m)},${t.gry(c)}`,f=(i.fYq2-i.fYq1)*(t.scale_xmin-i.fXq1)/(i.fXq2-i.fXq1)+i.fYq1,y=(i.fYq2-i.fYq1)*(t.scale_xmax-i.fXq1)/(i.fXq2-i.fXq1)+i.fYq1;g=ft.scale_ymax?a(s,l,(i.fXq2-i.fXq1)*(t.scale_ymax-i.fYq1)/(i.fYq2-i.fYq1)+i.fXq1,t.scale_ymax):a(s,l,t.scale_xmax,y);let o=new O.rE({style:1,width:1,color:"black"}),x=new O.rE({style:2,width:1,color:"black"});this.draw_g.append("path").attr("d",a(r,n,s,l)).call(o.func).style("fill","none"),this.draw_g.append("path").attr("d",g).call(x.func).style("fill","none")}drawBins3D(){console.log("Load ./hist/TGraphPainter.mjs to draw graph in 3D")}drawGraph(){let t=this.get_main(),i=this.getObject();if(!t)return;if(this.options.pos3d)return this.drawBins3D(t,i);let r=!!this.get_gme(),s=t.getGrFuncs(this.options.second_x,this.options.second_y),n=t.getFrameWidth(),l=t.getFrameHeight();if(this.createG(!t.pad_layer),this.options._pfc||this.options._plc||this.options._pmc){let a=this.getMainPainter();if((0,_.isFunc)(a?.createAutoColor)){let f=a.createAutoColor();this.options._pfc&&(i.fFillColor=f,delete this.fillatt),this.options._plc&&(i.fLineColor=f,delete this.lineatt),this.options._pmc&&(i.fMarkerColor=f,delete this.markeratt),this.options._pfc=this.options._plc=this.options._pmc=!1}}this.createAttLine({attr:i,can_excl:!0}),this.createAttFill({attr:i}),this.fillatt.used=!1,this.draw_kind="none",this.marker_size=0;let g=r?this.draw_g.append("svg:g"):this.draw_g;if(this.drawBins(s,this.options,g,n,l,this.lineatt,this.fillatt,!0),"TGraphQQ"==i._typename&&this.appendQQ(s,i),r){for(let a=0;a=a)return;if(h.error||h.rect||h.marker)c={x1:Math.min(-s,h.grx0,-y),x2:Math.max(s,h.grx2,y),y1:Math.min(-s,h.gry2,-y),y2:Math.max(s,h.gry0,y)};else if(h.bar){if(c={x1:-h.width/2,x2:h.width/2,y1:0,y2:r-h.gry1},n){let b=l.gry(0);c.y1=h.gry1>b?b-h.gry1:0,c.y2=h.gry1>b?0:b-h.gry1}}else c={x1:-5,x2:5,y1:-5,y2:5};let p=t.y>=h.gry1+c.y1&&t.y<=h.gry1+c.y2;t.x>=h.grx1+c.x1&&t.x<=h.grx1+c.x2&&(p||t.nproc>1)&&(a=m,g=this,f=c,f.exact=p)}),null===g)return null;let o=(0,P.Ys)(g).datum(),x=this.getObject(),e={name:x.fName,title:x.fTitle,x:o.grx1,y:o.gry1,color1:this.lineatt.color,lines:this.getTooltips(o),rect:f,d3bin:g};return e.user_info={obj:x,name:x.fName,bin:o.indx,cont:o.y,grx:o.grx1,gry:o.gry1},this.fillatt&&this.fillatt.used&&!this.fillatt.empty()&&(e.color2=this.fillatt.getFillColor()),f.exact&&(e.exact=!0),e.menu=e.exact,e.menu_dist=3,e.bin=o,e.binindx=o.indx,e}showTooltip(t){if(!t)return void(this.draw_g&&this.draw_g.select(".tooltip_bin").remove());if(t.usepath)return this.showTooltipForPath(t);let i=(0,P.Ys)(t.d3bin).datum(),r=this.draw_g.select(".tooltip_bin");r.empty()&&(r=this.draw_g.append("svg:rect").attr("class","tooltip_bin h1bin").style("pointer-events","none")),t.changed=r.property("current_bin")!==t.d3bin,t.changed&&r.attr("x",i.grx1+t.rect.x1).attr("width",t.rect.x2-t.rect.x1).attr("y",i.gry1+t.rect.y1).attr("height",t.rect.y2-t.rect.y1).style("opacity","0.3").property("current_bin",t.d3bin)}processTooltipEvent(t){let i=this.extractTooltip(t);return(!t||!t.disabled)&&this.showTooltip(i),i}findBestBin(t){if(!this.bins)return null;let g,a,f,y,o,i="lines"==this.draw_kind,r=-1,s=null,n=1e10,l=this.get_main().getGrFuncs(this.options.second_x,this.options.second_y);for(y=0;y100&&i&&(s=null);let x=Math.max(this.lineatt.width+3,4);this.marker_size>0&&(x=Math.max(this.marker_size,x)),s&&(n=Math.sqrt((t.x-l.grx(s.x))**2+(t.y-l.gry(s.y))**2)),!i&&n>x&&(s=null),s||(r=-1);let e={bin:s,indx:r,dist:n,radius:Math.round(x)};if(!s&&i){n=1e10;const h=(b,k,E)=>k>=b&&b>=E||k<=b&&b<=E;let d,m=this.bins[0],c=l.grx(m.x),p=0;for(y=1;y1&&i.append("svg:circle").attr("cy",Math.round(t.gry2));let r=i.selectAll("circle").attr("r",t.radius).attr("cx",Math.round(t.x));t.islines?(this.options.Line||this.options.Curve?r.call(this.lineatt.func):r.style("stroke","black"),this.options.Fill?r.call(this.fillatt.func):r.style("fill","none")):r.style("stroke","black"==t.color1?"green":"black").style("fill","none")}}else i.remove()}moveEnabled(){return this.testEditable()}moveStart(t,i){this.pos_dx=this.pos_dy=0,this.move_funcs=this.get_main().getGrFuncs(this.options.second_x,this.options.second_y);let r=this.extractTooltip({x:t,y:i});r&&r.exact&&void 0!==r.binindx?(this.move_binindx=r.binindx,this.move_bin=r.bin,this.move_x0=this.move_funcs.grx(this.move_bin.x),this.move_y0=this.move_funcs.gry(this.move_bin.y)):delete this.move_binindx}moveDrag(t,i){this.pos_dx+=t,this.pos_dy+=i,void 0===this.move_binindx?this.draw_g.attr("transform",`translate(${this.pos_dx},${this.pos_dy})`):this.move_funcs&&this.move_bin&&(this.move_bin.x=this.move_funcs.revertAxis("x",this.move_x0+this.pos_dx),this.move_bin.y=this.move_funcs.revertAxis("y",this.move_y0+this.pos_dy),this.drawGraph())}moveEnd(t){let i="";if(void 0===this.move_binindx){if(this.draw_g.attr("transform",null),this.move_funcs&&this.bins&&!t){for(let r=0;r{this.testEditable("toggle"),this.drawGraph()}),t.size()>0}executeMenuCommand(t,i){if(super.executeMenuCommand(t,i))return!0;let r=this.getCanvPainter(),s=this.get_main();if("RemovePoint"==t.fName||"InsertPoint"==t.fName){if(!r||r._readonly)return!0;let n=(0,_.isFunc)(s?.getLastEventPos)?s.getLastEventPos():null,l=this.extractTooltip(n);if("InsertPoint"==t.fName){if(n){let g=s.getGrFuncs(this.options.second_x,this.options.second_y),a=g.revertAxis("x",n.x)??0,f=g.revertAxis("y",n.y)??0;this.submitCanvExec(`AddPoint(${a.toFixed(3)}, ${f.toFixed(3)})`,this.args_menu_id)}}else this.args_menu_id&&void 0!==l?.binindx&&this.submitCanvExec(`RemovePoint(${l.binindx})`,this.args_menu_id);return!0}return!1}updateObject(t,i){if(!this.matchObjectType(t))return!1;i&&i!=this.options.original&&this.decodeOptions(i);let r=this.getObject();if(r.fBits=t.fBits,r.fTitle=t.fTitle,r.fX=t.fX,r.fY=t.fY,r.fNpoints=t.fNpoints,r.fMinimum=t.fMinimum,r.fMaximum=t.fMaximum,this.createBins(),delete this.$redraw_hist,this.axes_draw){let s=this.createHistogram();s.fTitle=r.fTitle;let n=this.getMainPainter();n?.$secondary&&(n.updateObject(s,this.options.Axis),this.$redraw_hist=!0)}return!0}canZoomInside(t,i,r){let s=this.getObject();if(!s||t!==(this.options.pos3d?"y":"x"))return!1;for(let n=0;ni._typename==_.clTF1||i._typename==_.clTF2):null}findStat(){let t=this.getObject();if(t?.fFunctions?.arr)for(let i=0;i=(r?.fFunctions?.arr?.length||0))return i;let s=i.getPadPainter(),n=r.fFunctions.arr[t],l=r.fFunctions.opt[t];return n.$main_painter=i,s.drawObject(i.getDom(),n,l).then(()=>i.drawNextFunction(t+1))})()}drawAxisHisto(){var t=this;return(0,$.Z)(function*(){let i=t.createHistogram();return N.f.draw(t.getDom(),i,t.options.Axis)})()}static _drawGraph(t,i){return(0,$.Z)(function*(){t.decodeOptions(i,!0),t.createBins(),t.createStat(),!_.settings.DragGraphs&&!graph.TestBit(T)&&graph.InvertBit(T);let r=Promise.resolve();return(!t.getMainPainter()||t.options.second_x||t.options.second_y)&&t.options.Axis&&(r=t.drawAxisHisto().then(s=>{s&&(t.axes_draw=!0,t._own_histogram||(t.$primary=!0),s.$secondary="hist")})),r.then(()=>(t.addToPadPrimitives(),t.drawGraph())).then(()=>t.drawNextFunction(0))})()}static draw(t,i,r){return(0,$.Z)(function*(){return A._drawGraph(new A(t,i),r)})()}}}}]); +//# sourceMappingURL=241.0104cfbdf782cd5b.js.map \ No newline at end of file diff --git a/docs/241.0104cfbdf782cd5b.js.map b/docs/241.0104cfbdf782cd5b.js.map new file mode 100644 index 000000000..3ec8d86b3 --- /dev/null +++ b/docs/241.0104cfbdf782cd5b.js.map @@ -0,0 +1 @@ +{"version":3,"file":"241.0104cfbdf782cd5b.js","mappings":"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","names":["kNotEditable","BIT","clTGraphErrors","clTGraphAsymmErrors","clTGraphBentErrors","clTGraphMultiErrors","TGraphPainter","ObjectPainter","constructor","dom","graph","super","this","axes_draw","bins","xmin","ymin","xmax","ymax","wheel_zoomy","is_bent","_typename","has_errors","match","redraw","promise","Promise","resolve","_this","$redraw_hist","hist_painter","getMainPainter","$secondary","then","drawGraph","cleanup","interactive_bin","get_gme","getObject","decodeOptions","opt","first_time","isStr","indexOf","slice","is_gme","blocks_gme","has_main","options","decodeBlock","d","res","Object","assign","Line","Curve","Rect","Mark","Bar","OutRange","EF","Fill","MainError","Ends","ScaleErrX","check","partAsFloat","Errors","Axis","NoOpt","PadStats","original","second_x","second_y","individual_styles","split","shift","DrawOptions","hopt","forEach","name","part","empty","pos3d","partAsInt","_pfc","_plc","_pmc","blocks","skip_errors_x0","skip_errors_y0","undefined","length","fMarkerStyle","len","fEX","m","k","Math","max","fEY","pad","getPadPainter","getRootPad","fPrimitives","arr","bl","subres","push","extractGmeErrors","nblock","gr","bin","eylow","fEyL","indx","eyhigh","fEyH","createBins","kind","npoints","fNpoints","clTCutG","Array","p","x","fX","y","fY","exlow","exhigh","fExL","fExH","fEXlow","fEXhigh","fEYlow","fEYhigh","min","createHistogram","set_x","set_y","dx","dy","uxmin","uxmax","minimum","maximum","histo","fHistogram","minimum0","maximum0","fMaximum","kNoZoom","fMinimum","fName","kNoStats","fBits","_own_histogram","fTitle","fXaxis","fXmin","fXmax","fYaxis","unzoomUserRange","dox","doy","extractAxesProperties","canOptimize","settings","optimizeBins","maxpnt","filter_func","selbins","isFunc","n","step","floor","optbins","getTooltips","lines","funcs","get_main","getGrFuncs","gme","getObjectHint","axisAsText","x_handle","ny","fNYErrors","y_handle","pmain","getFramePainter","grx","gry","pp","rect","getPadRect","width","height","pad_layer","pw","ph","getFrameWidth","getFrameHeight","value","fLogx","log10","fUxmin","fX1","fX2","fLogy","fUymin","fY1","fY2","revertAxis","v","appendExclusion","is_curve","path","drawbins","excl_width","extrabins","dlen","sqrt","dgrx","dgry","path2","buildSvgPath","draw_g","append","attr","call","fillatt","func","style","drawBins","w","h","lineatt","main_block","excl_side","path1","bins2","draw_kind","close_symbol","elem","curvebins","nodes","pnt","i","grx1","round","gry1","grx0","grx2","gry0","gry2","grdx0","fEXlowd","grdx2","fEXhighd","grdy0","fEYlowd","grdy2","fEYhighd","selectAll","data","enter","yy0","usefill","fp","fpcol","getFillColor","TAttFillHandler","color","pattern","bar","dw","abs","filter","error_size","lw","gStyle","bb","vv","hh","vleft","vright","htop","hbottom","mainLine","fMarkerSize","visible","isBatchMode","error","createAttMarker","marker_size","markeratt","getFullSize","resetPos","want_tooltip","fill","hints_marker","hsz","maxnummarker","getMarkerLength","create","appendQQ","xqmin","scale_xmin","fXq1","xqmax","scale_xmax","fXq2","yqmin","scale_ymin","fYq1","yqmax","scale_ymax","fYq2","makeLine","x1","y1","x2","y2","yxmin","yxmax","latt1","TAttLineHandler","latt2","drawBins3D","console","log","createG","mp","createAutoColor","icolor","fFillColor","fLineColor","fMarkerColor","createAttLine","can_excl","createAttFill","used","fAttLine","std","fAttFill","svg","getCanvSvg","sub_g","addMoveHandler","testEditable","extractTooltip","extractTooltipForPath","esz","isbar1","findbin","best_dist2","best","msize","each","d3_select","datum","dist2","nproc","marker","matchy","exact","title","color1","d3bin","user_info","obj","cont","color2","menu","menu_dist","binindx","showTooltip","hint","select","remove","usepath","showTooltipForPath","ttrect","changed","property","processTooltipEvent","disabled","findBestBin","dist","islines","bestindx","bestbin","bestdist","radius","IsInside","bin0","posy","linex","liney","linedist","closeline","arg","TestBit","InvertBit","ismark","getColor","ttbin","moveEnabled","moveStart","pos_dx","pos_dy","move_funcs","move_binindx","move_bin","move_x0","move_y0","moveDrag","moveEnd","not_changed","exec","matchObjectType","submitCanvExec","fillContextMenu","snapid","addchk","size","executeMenuCommand","method","args","canp","getCanvPainter","_readonly","getLastEventPos","userx","usery","toFixed","args_menu_id","updateObject","canZoomInside","axis","clickButton","funcname","main","zoom","findFunc","fFunctions","find","clTF1","clTF2","findStat","clTPaveStats","createStat","stats","normal_canvas","create_stats","st","fOptStat","fOptFit","fBorderSize","fX1NDC","fStatX","fStatW","fY1NDC","fStatY","fStatH","fX2NDC","fY2NDC","fStatColor","fFillStyle","fStatStyle","fTextAngle","fTextSize","fStatFontSize","fTextAlign","fTextColor","fStatTextColor","fTextFont","fStatFont","AddText","Add","fillStatistic","stat","dostat","dofit","clearPave","fillFunctionStat","drawNextFunction","_this2","$main_painter","drawObject","getDom","drawAxisHisto","_this3","TH1Painter","static","painter","$primary","addToPadPrimitives","_drawGraph"],"sourceRoot":"webpack:///","sources":["../node_modules/jsroot/modules/hist2d/TGraphPainter.mjs"],"sourcesContent":["import { gStyle, BIT, settings, create, createHistogram, isBatchMode, isFunc, isStr,\n clTPaveStats, clTCutG, clTF1, clTF2, kNoZoom } from '../core.mjs';\nimport { select as d3_select } from '../d3.mjs';\nimport { DrawOptions, buildSvgPath } from '../base/BasePainter.mjs';\nimport { ObjectPainter } from '../base/ObjectPainter.mjs';\nimport { TH1Painter } from './TH1Painter.mjs';\nimport { TAttLineHandler } from '../base/TAttLineHandler.mjs';\nimport { TAttFillHandler } from '../base/TAttFillHandler.mjs';\nimport { addMoveHandler } from '../gui/utils.mjs';\n\n\nconst kNotEditable = BIT(18), // bit set if graph is non editable\n clTGraphErrors = 'TGraphErrors',\n clTGraphAsymmErrors = 'TGraphAsymmErrors',\n clTGraphBentErrors = 'TGraphBentErrors',\n clTGraphMultiErrors = 'TGraphMultiErrors';\n\n/**\n * @summary Painter for TGraph object.\n *\n * @private\n */\n\nclass TGraphPainter extends ObjectPainter {\n\n constructor(dom, graph) {\n super(dom, graph);\n this.axes_draw = false; // indicate if graph histogram was drawn for axes\n this.bins = null;\n this.xmin = this.ymin = this.xmax = this.ymax = 0;\n this.wheel_zoomy = true;\n this.is_bent = (graph._typename == clTGraphBentErrors);\n this.has_errors = (graph._typename == clTGraphErrors) ||\n (graph._typename == clTGraphMultiErrors) ||\n (graph._typename == clTGraphAsymmErrors) ||\n this.is_bent || graph._typename.match(/^RooHist/);\n }\n\n /** @summary Redraw graph\n * @desc may redraw histogram which was used to draw axes\n * @return {Promise} for ready */\n async redraw() {\n let promise = Promise.resolve(true);\n\n if (this.$redraw_hist) {\n delete this.$redraw_hist;\n let hist_painter = this.getMainPainter();\n if (hist_painter?.$secondary && this.axes_draw)\n promise = hist_painter.redraw();\n }\n\n return promise.then(() => this.drawGraph());\n }\n\n /** @summary Cleanup graph painter */\n cleanup() {\n delete this.interactive_bin; // break mouse handling\n delete this.bins;\n super.cleanup();\n }\n\n /** @summary Returns object if this drawing TGraphMultiErrors object */\n get_gme() {\n let graph = this.getObject();\n return graph?._typename == clTGraphMultiErrors ? graph : null;\n }\n\n /** @summary Decode options */\n decodeOptions(opt, first_time) {\n\n if (isStr(opt) && (opt.indexOf('same ') == 0))\n opt = opt.slice(5);\n\n let graph = this.getObject(),\n is_gme = !!this.get_gme(),\n blocks_gme = [],\n has_main = first_time ? !!this.getMainPainter() : !this.axes_draw;\n\n if (!this.options) this.options = {};\n\n // decode main draw options for the graph\n const decodeBlock = (d, res) => {\n Object.assign(res, { Line: 0, Curve: 0, Rect: 0, Mark: 0, Bar: 0, OutRange: 0, EF:0, Fill: 0, MainError: 1, Ends: 1, ScaleErrX: 1 });\n\n if (is_gme && d.check('S=', true)) res.ScaleErrX = d.partAsFloat();\n\n if (d.check('L')) res.Line = 1;\n if (d.check('F')) res.Fill = 1;\n if (d.check('CC')) res.Curve = 2; // draw all points without reduction\n if (d.check('C')) res.Curve = 1;\n if (d.check('*')) res.Mark = 103;\n if (d.check('P0')) res.Mark = 104;\n if (d.check('P')) res.Mark = 1;\n if (d.check('B')) { res.Bar = 1; res.Errors = 0; }\n if (d.check('Z')) { res.Errors = 1; res.Ends = 0; }\n if (d.check('||')) { res.Errors = 1; res.MainError = 0; res.Ends = 1; }\n if (d.check('[]')) { res.Errors = 1; res.MainError = 0; res.Ends = 2; }\n if (d.check('|>')) { res.Errors = 1; res.Ends = 3; }\n if (d.check('>')) { res.Errors = 1; res.Ends = 4; }\n if (d.check('0')) { res.Mark = 1; res.Errors = 1; res.OutRange = 1; }\n if (d.check('1')) { if (res.Bar == 1) res.Bar = 2; }\n if (d.check('2')) { res.Rect = 1; res.Errors = 0; }\n if (d.check('3')) { res.EF = 1; res.Errors = 0; }\n if (d.check('4')) { res.EF = 2; res.Errors = 0; }\n if (d.check('5')) { res.Rect = 2; res.Errors = 0; }\n if (d.check('X')) res.Errors = 0;\n };\n\n Object.assign(this.options, { Axis: '', NoOpt: 0, PadStats: false, original: opt, second_x: false, second_y: false, individual_styles: false });\n\n if (is_gme && opt) {\n if (opt.indexOf(';') > 0) {\n blocks_gme = opt.split(';');\n opt = blocks_gme.shift();\n } else if (opt.indexOf('_') > 0) {\n blocks_gme = opt.split('_');\n opt = blocks_gme.shift();\n }\n }\n\n let res = this.options,\n d = new DrawOptions(opt);\n\n // check pad options first\n res.PadStats = d.check('USE_PAD_STATS');\n let hopt = '', checkhopt = ['USE_PAD_TITLE', 'LOGXY', 'LOGX', 'LOGY', 'LOGZ', 'GRIDXY', 'GRIDX', 'GRIDY', 'TICKXY', 'TICKX', 'TICKY'];\n checkhopt.forEach(name => { if (d.check(name)) hopt += ';' + name; });\n if (d.check('XAXIS_', true)) hopt += ';XAXIS_' + d.part;\n if (d.check('YAXIS_', true)) hopt += ';YAXIS_' + d.part;\n\n if (d.empty()) {\n res.original = has_main ? 'lp' : 'alp';\n d = new DrawOptions(res.original);\n }\n\n if (d.check('NOOPT')) res.NoOpt = 1;\n\n if (d.check('POS3D_', true)) res.pos3d = d.partAsInt() - 0.5;\n\n res._pfc = d.check('PFC');\n res._plc = d.check('PLC');\n res._pmc = d.check('PMC');\n\n if (d.check('A')) res.Axis = d.check('I') ? 'A' : 'AXIS'; // I means invisible axis\n if (d.check('X+')) { res.Axis += 'X+'; res.second_x = has_main; }\n if (d.check('Y+')) { res.Axis += 'Y+'; res.second_y = has_main; }\n if (d.check('RX')) res.Axis += 'RX';\n if (d.check('RY')) res.Axis += 'RY';\n\n if (is_gme) {\n res.blocks = [];\n res.skip_errors_x0 = res.skip_errors_y0 = false;\n if (d.check('X0')) res.skip_errors_x0 = true;\n if (d.check('Y0')) res.skip_errors_y0 = true;\n }\n\n decodeBlock(d, res);\n\n if (is_gme) {\n if (d.check('S')) res.individual_styles = true;\n }\n\n // if (d.check('E')) res.Errors = 1; // E option only defined for TGraphPolar\n\n if (res.Errors === undefined)\n res.Errors = this.has_errors && (!is_gme || !blocks_gme.length) ? 1 : 0;\n\n // special case - one could use svg:path to draw many pixels (\n if ((res.Mark == 1) && (graph.fMarkerStyle == 1)) res.Mark = 101;\n\n // if no drawing option is selected and if opt == '' nothing is done.\n if (res.Line + res.Fill + res.Curve + res.Mark + res.Bar + res.EF + res.Rect + res.Errors == 0) {\n if (d.empty()) res.Line = 1;\n }\n\n if (graph._typename == clTGraphErrors) {\n let len = graph.fEX.length, m = 0;\n for (let k = 0; k < len; ++k)\n m = Math.max(m, graph.fEX[k], graph.fEY[k]);\n if (m < 1e-100)\n res.Errors = 0;\n }\n\n if (!res.Axis) {\n // check if axis should be drawn\n // either graph drawn directly or\n // graph is first object in list of primitives\n let pp = this.getPadPainter(),\n pad = pp?.getRootPad(true);\n if (!pad || (pad?.fPrimitives?.arr[0] === graph)) res.Axis = 'AXIS';\n } else if (res.Axis.indexOf('A') < 0) {\n res.Axis = 'AXIS,' + res.Axis;\n }\n\n res.Axis += hopt;\n\n for (let bl = 0; bl < blocks_gme.length; ++bl) {\n let subd = new DrawOptions(blocks_gme[bl]), subres = {};\n decodeBlock(subd, subres);\n subres.skip_errors_x0 = res.skip_errors_x0;\n subres.skip_errors_y0 = res.skip_errors_y0;\n res.blocks.push(subres);\n }\n }\n\n /** @summary Extract errors for TGraphMultiErrors */\n extractGmeErrors(nblock) {\n if (!this.bins) return;\n let gr = this.getObject();\n this.bins.forEach(bin => {\n bin.eylow = gr.fEyL[nblock][bin.indx];\n bin.eyhigh = gr.fEyH[nblock][bin.indx];\n });\n }\n\n /** @summary Create bins for TF1 drawing */\n createBins() {\n let gr = this.getObject();\n if (!gr) return;\n\n let kind = 0, npoints = gr.fNpoints;\n if ((gr._typename === clTCutG) && (npoints > 3)) npoints--;\n\n if (gr._typename == clTGraphErrors)\n kind = 1;\n else if (gr._typename == clTGraphMultiErrors)\n kind = 2;\n else if (gr._typename == clTGraphAsymmErrors || gr._typename == clTGraphBentErrors || gr._typename.match(/^RooHist/))\n kind = 3;\n\n this.bins = new Array(npoints);\n\n for (let p = 0; p < npoints; ++p) {\n let bin = this.bins[p] = { x: gr.fX[p], y: gr.fY[p], indx: p };\n switch(kind) {\n case 1:\n bin.exlow = bin.exhigh = gr.fEX[p];\n bin.eylow = bin.eyhigh = gr.fEY[p];\n break;\n case 2:\n bin.exlow = gr.fExL[p];\n bin.exhigh = gr.fExH[p];\n bin.eylow = gr.fEyL[0][p];\n bin.eyhigh = gr.fEyH[0][p];\n break;\n case 3:\n bin.exlow = gr.fEXlow[p];\n bin.exhigh = gr.fEXhigh[p];\n bin.eylow = gr.fEYlow[p];\n bin.eyhigh = gr.fEYhigh[p];\n break;\n }\n\n if (p === 0) {\n this.xmin = this.xmax = bin.x;\n this.ymin = this.ymax = bin.y;\n }\n\n if (kind > 0) {\n this.xmin = Math.min(this.xmin, bin.x - bin.exlow, bin.x + bin.exhigh);\n this.xmax = Math.max(this.xmax, bin.x - bin.exlow, bin.x + bin.exhigh);\n this.ymin = Math.min(this.ymin, bin.y - bin.eylow, bin.y + bin.eyhigh);\n this.ymax = Math.max(this.ymax, bin.y - bin.eylow, bin.y + bin.eyhigh);\n } else {\n this.xmin = Math.min(this.xmin, bin.x);\n this.xmax = Math.max(this.xmax, bin.x);\n this.ymin = Math.min(this.ymin, bin.y);\n this.ymax = Math.max(this.ymax, bin.y);\n }\n }\n }\n\n /** @summary Create histogram for graph\n * @desc graph bins should be created when calling this function\n * @param {boolean} [set_x] - set X axis range\n * @param {boolean} [set_y] - set Y axis range */\n createHistogram(set_x, set_y) {\n if (!set_x && !set_y)\n set_x = set_y = true;\n\n let xmin = this.xmin, xmax = this.xmax, ymin = this.ymin, ymax = this.ymax;\n\n if (xmin >= xmax) xmax = xmin+1;\n if (ymin >= ymax) ymax = ymin+1;\n let dx = (xmax-xmin)*0.1, dy = (ymax-ymin)*0.1,\n uxmin = xmin - dx, uxmax = xmax + dx,\n minimum = ymin - dy, maximum = ymax + dy;\n\n if ((uxmin < 0) && (xmin >= 0)) uxmin = xmin*0.9;\n if ((uxmax > 0) && (xmax <= 0)) uxmax = 0;\n\n let graph = this.getObject(),\n histo = graph.fHistogram,\n minimum0 = minimum, maximum0 = maximum;\n\n if (!histo) {\n histo = graph.fHistogram = createHistogram('TH1F', 100);\n histo.fName = graph.fName + '_h';\n const kNoStats = BIT(9);\n histo.fBits = histo.fBits | kNoStats;\n this._own_histogram = true;\n } else if ((histo.fMaximum != kNoZoom) && (histo.fMinimum != kNoZoom)) {\n minimum = histo.fMinimum;\n maximum = histo.fMaximum;\n }\n\n if (graph.fMinimum != kNoZoom) minimum = ymin = graph.fMinimum;\n if (graph.fMaximum != kNoZoom) maximum = graph.fMaximum;\n if ((minimum < 0) && (ymin >= 0)) minimum = 0.9*ymin;\n\n histo.fTitle = graph.fTitle;\n\n if (set_x) {\n histo.fXaxis.fXmin = uxmin;\n histo.fXaxis.fXmax = uxmax;\n }\n\n if (set_y) {\n histo.fYaxis.fXmin = Math.min(minimum0, minimum);\n histo.fYaxis.fXmax = Math.max(maximum0, maximum);\n histo.fMinimum = minimum;\n histo.fMaximum = maximum;\n }\n\n return histo;\n }\n\n /** @summary Check if user range can be unzommed\n * @desc Used when graph points covers larger range than provided histogram */\n unzoomUserRange(dox, doy /*, doz*/) {\n let graph = this.getObject();\n if (this._own_histogram || !graph) return false;\n\n let histo = graph.fHistogram;\n\n dox = dox && histo && ((histo.fXaxis.fXmin > this.xmin) || (histo.fXaxis.fXmax < this.xmax));\n doy = doy && histo && ((histo.fYaxis.fXmin > this.ymin) || (histo.fYaxis.fXmax < this.ymax));\n if (!dox && !doy) return false;\n\n this.createHistogram(dox, doy);\n this.getMainPainter()?.extractAxesProperties(1); // just to enforce ranges extraction\n\n return true;\n }\n\n /** @summary Returns true if graph drawing can be optimize */\n canOptimize() {\n return (settings.OptimizeDraw > 0) && !this.options.NoOpt;\n }\n\n /** @summary Returns optimized bins - if optimization enabled */\n optimizeBins(maxpnt, filter_func) {\n if ((this.bins.length < 30) && !filter_func) return this.bins;\n\n let selbins = null;\n if (isFunc(filter_func)) {\n for (let n = 0; n < this.bins.length; ++n) {\n if (filter_func(this.bins[n],n)) {\n if (!selbins) selbins = (n == 0) ? [] : this.bins.slice(0, n);\n } else {\n if (selbins) selbins.push(this.bins[n]);\n }\n }\n }\n if (!selbins) selbins = this.bins;\n\n if (!maxpnt) maxpnt = 500000;\n\n if ((selbins.length < maxpnt) || !this.canOptimize()) return selbins;\n let step = Math.floor(selbins.length / maxpnt);\n if (step < 2) step = 2;\n let optbins = [];\n for (let n = 0; n < selbins.length; n+=step)\n optbins.push(selbins[n]);\n\n return optbins;\n }\n\n /** @summary Returns tooltip for specified bin */\n getTooltips(d) {\n let pmain = this.get_main(), lines = [],\n funcs = pmain.getGrFuncs(this.options.second_x, this.options.second_y),\n gme = this.get_gme();\n\n lines.push(this.getObjectHint());\n\n if (d && funcs) {\n if (d.indx !== undefined)\n lines.push('p = ' + d.indx);\n lines.push('x = ' + funcs.axisAsText('x', d.x), 'y = ' + funcs.axisAsText('y', d.y));\n if (gme)\n lines.push('error x = -' + funcs.axisAsText('x', gme.fExL[d.indx]) + '/+' + funcs.axisAsText('x', gme.fExH[d.indx]));\n else if (this.options.Errors && (funcs.x_handle.kind == 'normal') && (d.exlow || d.exhigh))\n lines.push('error x = -' + funcs.axisAsText('x', d.exlow) + '/+' + funcs.axisAsText('x', d.exhigh));\n\n if (gme) {\n for (let ny = 0; ny < gme.fNYErrors; ++ny)\n lines.push(`error y${ny} = -${funcs.axisAsText('y', gme.fEyL[ny][d.indx])}/+${funcs.axisAsText('y', gme.fEyH[ny][d.indx])}`);\n } else if ((this.options.Errors || (this.options.EF > 0)) && (funcs.y_handle.kind == 'normal') && (d.eylow || d.eyhigh))\n lines.push('error y = -' + funcs.axisAsText('y', d.eylow) + '/+' + funcs.axisAsText('y', d.eyhigh));\n\n }\n return lines;\n }\n\n /** @summary Provide frame painter for graph\n * @desc If not exists, emulate its behaviour */\n get_main() {\n let pmain = this.getFramePainter();\n\n if (pmain && pmain.grx && pmain.gry) return pmain;\n\n // FIXME: check if needed, can be removed easily\n let pp = this.getPadPainter(),\n rect = pp?.getPadRect() || { width: 800, height: 600 };\n\n pmain = {\n pad_layer: true,\n pad: pp?.getRootPad(true),\n pw: rect.width,\n ph: rect.height,\n getFrameWidth() { return this.pw; },\n getFrameHeight() { return this.ph; },\n grx(value) {\n if (this.pad.fLogx)\n value = (value > 0) ? Math.log10(value) : this.pad.fUxmin;\n else\n value = (value - this.pad.fX1) / (this.pad.fX2 - this.pad.fX1);\n return value * this.pw;\n },\n gry(value) {\n if (this.pad.fLogy)\n value = (value > 0) ? Math.log10(value) : this.pad.fUymin;\n else\n value = (value - this.pad.fY1) / (this.pad.fY2 - this.pad.fY1);\n return (1 - value) * this.ph;\n },\n revertAxis(name, v) {\n if (name == 'x')\n return v / this.pw * (this.pad.fX2 - this.pad.fX1) + this.pad.fX1;\n if (name == 'y')\n return (1 - v / this.ph) * (this.pad.fY2 - this.pad.fY1) + this.pad.fY1;\n return v;\n },\n getGrFuncs() { return this; }\n }\n\n return pmain.pad ? pmain : null;\n }\n\n /** @summary append exclusion area to created path */\n appendExclusion(is_curve, path, drawbins, excl_width) {\n let extrabins = [];\n for (let n = drawbins.length-1; n >= 0; --n) {\n let bin = drawbins[n],\n dlen = Math.sqrt(bin.dgrx**2 + bin.dgry**2);\n // shift point\n bin.grx += excl_width*bin.dgry/dlen;\n bin.gry -= excl_width*bin.dgrx/dlen;\n extrabins.push(bin);\n }\n\n let path2 = buildSvgPath(is_curve ? 'Lbezier' : 'Lline', extrabins);\n\n this.draw_g.append('svg:path')\n .attr('d', path.path + path2.path + 'Z')\n .call(this.fillatt.func)\n .style('opacity', 0.75);\n }\n\n /** @summary draw TGraph bins with specified options\n * @desc Can be called several times */\n drawBins(funcs, options, draw_g, w, h, lineatt, fillatt, main_block) {\n let graph = this.getObject(),\n excl_width = 0, drawbins = null;\n\n if (main_block && lineatt.excl_side) {\n excl_width = lineatt.excl_width;\n if ((lineatt.width > 0) && !options.Line && !options.Curve) options.Line = 1;\n }\n\n if (options.EF) {\n drawbins = this.optimizeBins((options.EF > 1) ? 20000 : 0);\n\n // build lower part\n for (let n = 0; n < drawbins.length; ++n) {\n let bin = drawbins[n];\n bin.grx = funcs.grx(bin.x);\n bin.gry = funcs.gry(bin.y - bin.eylow);\n }\n\n let path1 = buildSvgPath((options.EF > 1) ? 'bezier' : 'line', drawbins),\n bins2 = [];\n\n for (let n = drawbins.length-1; n >= 0; --n) {\n let bin = drawbins[n];\n bin.gry = funcs.gry(bin.y + bin.eyhigh);\n bins2.push(bin);\n }\n\n // build upper part (in reverse direction)\n let path2 = buildSvgPath((options.EF > 1) ? 'Lbezier' : 'Lline', bins2);\n\n draw_g.append('svg:path')\n .attr('d', path1.path + path2.path + 'Z')\n .call(fillatt.func);\n if (main_block)\n this.draw_kind = 'lines';\n }\n\n if (options.Line || options.Fill) {\n\n let close_symbol = '';\n if (graph._typename == clTCutG) options.Fill = 1;\n\n if (options.Fill) {\n close_symbol = 'Z'; // always close area if we want to fill it\n excl_width = 0;\n }\n\n if (!drawbins) drawbins = this.optimizeBins(0);\n\n for (let n = 0; n < drawbins.length; ++n) {\n let bin = drawbins[n];\n bin.grx = funcs.grx(bin.x);\n bin.gry = funcs.gry(bin.y);\n }\n\n let kind = 'line'; // simple line\n if (excl_width) kind += 'calc'; // we need to calculated deltas to build exclusion points\n\n let path = buildSvgPath(kind, drawbins);\n\n if (excl_width)\n this.appendExclusion(false, path, drawbins, excl_width);\n\n let elem = draw_g.append('svg:path').attr('d', path.path + close_symbol);\n if (options.Line)\n elem.call(lineatt.func);\n\n if (options.Fill)\n elem.call(fillatt.func);\n else\n elem.style('fill', 'none');\n\n if (main_block)\n this.draw_kind = 'lines';\n }\n\n if (options.Curve) {\n let curvebins = drawbins;\n if ((this.draw_kind != 'lines') || !curvebins || ((options.Curve == 1) && (curvebins.length > 20000))) {\n curvebins = this.optimizeBins((options.Curve == 1) ? 20000 : 0);\n for (let n = 0; n < curvebins.length; ++n) {\n let bin = curvebins[n];\n bin.grx = funcs.grx(bin.x);\n bin.gry = funcs.gry(bin.y);\n }\n }\n\n let kind = 'bezier';\n if (excl_width) kind += 'calc'; // we need to calculated deltas to build exclusion points\n\n let path = buildSvgPath(kind, curvebins);\n\n if (excl_width)\n this.appendExclusion(true, path, curvebins, excl_width);\n\n draw_g.append('svg:path')\n .attr('d', path.path)\n .call(lineatt.func)\n .style('fill', 'none');\n if (main_block)\n this.draw_kind = 'lines'; // handled same way as lines\n }\n\n let nodes = null;\n\n if (options.Errors || options.Rect || options.Bar) {\n\n drawbins = this.optimizeBins(5000, (pnt,i) => {\n\n let grx = funcs.grx(pnt.x);\n\n // when drawing bars, take all points\n if (!options.Bar && ((grx < 0) || (grx > w))) return true;\n\n let gry = funcs.gry(pnt.y);\n\n if (!options.Bar && !options.OutRange && ((gry < 0) || (gry > h))) return true;\n\n pnt.grx1 = Math.round(grx);\n pnt.gry1 = Math.round(gry);\n\n if (this.has_errors) {\n pnt.grx0 = Math.round(funcs.grx(pnt.x - options.ScaleErrX*pnt.exlow) - grx);\n pnt.grx2 = Math.round(funcs.grx(pnt.x + options.ScaleErrX*pnt.exhigh) - grx);\n pnt.gry0 = Math.round(funcs.gry(pnt.y - pnt.eylow) - gry);\n pnt.gry2 = Math.round(funcs.gry(pnt.y + pnt.eyhigh) - gry);\n\n if (this.is_bent) {\n pnt.grdx0 = Math.round(funcs.gry(pnt.y + graph.fEXlowd[i]) - gry);\n pnt.grdx2 = Math.round(funcs.gry(pnt.y + graph.fEXhighd[i]) - gry);\n pnt.grdy0 = Math.round(funcs.grx(pnt.x + graph.fEYlowd[i]) - grx);\n pnt.grdy2 = Math.round(funcs.grx(pnt.x + graph.fEYhighd[i]) - grx);\n } else {\n pnt.grdx0 = pnt.grdx2 = pnt.grdy0 = pnt.grdy2 = 0;\n }\n }\n\n return false;\n });\n\n if (main_block)\n this.draw_kind = 'nodes';\n\n nodes = draw_g.selectAll('.grpoint')\n .data(drawbins)\n .enter()\n .append('svg:g')\n .attr('class', 'grpoint')\n .attr('transform', d => `translate(${d.grx1},${d.gry1})`);\n }\n\n if (options.Bar) {\n // calculate bar width\n for (let i = 1; i < drawbins.length-1; ++i)\n drawbins[i].width = Math.max(2, (drawbins[i+1].grx1 - drawbins[i-1].grx1) / 2 - 2);\n\n // first and last bins\n switch (drawbins.length) {\n case 0: break;\n case 1: drawbins[0].width = w/4; break; // pathologic case of single bin\n case 2: drawbins[0].width = drawbins[1].width = (drawbins[1].grx1-drawbins[0].grx1)/2; break;\n default:\n drawbins[0].width = drawbins[1].width;\n drawbins[drawbins.length-1].width = drawbins[drawbins.length-2].width;\n }\n\n let yy0 = Math.round(funcs.gry(0)), usefill = fillatt;\n\n if (main_block) {\n let fp = this.getFramePainter(),\n fpcol = fp?.fillatt && !fp?.fillatt.empty() ? fp.fillatt.getFillColor() : -1;\n if (fpcol === fillatt.getFillColor())\n usefill = new TAttFillHandler({ color: fpcol == 'white' ? 1 : 0, pattern: 1001 });\n }\n\n nodes.append('svg:path')\n .attr('d', d => {\n d.bar = true; // element drawn as bar\n let dx = Math.round(-d.width/2),\n dw = Math.round(d.width),\n dy = (options.Bar !== 1) ? 0 : ((d.gry1 > yy0) ? yy0-d.gry1 : 0),\n dh = (options.Bar !== 1) ? (h > d.gry1 ? h - d.gry1 : 0) : Math.abs(yy0 - d.gry1);\n return `M${dx},${dy}h${dw}v${dh}h${-dw}z`;\n })\n .call(usefill.func);\n }\n\n if (options.Rect) {\n nodes.filter(d => (d.exlow > 0) && (d.exhigh > 0) && (d.eylow > 0) && (d.eyhigh > 0))\n .append('svg:path')\n .attr('d', d => {\n d.rect = true;\n return `M${d.grx0},${d.gry0}H${d.grx2}V${d.gry2}H${d.grx0}Z`;\n })\n .call(fillatt.func)\n .call(options.Rect === 2 ? lineatt.func : () => {});\n }\n\n this.error_size = 0;\n\n if (options.Errors) {\n // to show end of error markers, use line width attribute\n let lw = lineatt.width + gStyle.fEndErrorSize, bb = 0,\n vv = options.Ends ? `m0,${lw}v${-2*lw}` : '',\n hh = options.Ends ? `m${lw},0h${-2*lw}` : '',\n vleft = vv, vright = vv, htop = hh, hbottom = hh;\n\n const mainLine = (dx,dy) => {\n if (!options.MainError) return `M${dx},${dy}`;\n let res = 'M0,0';\n if (dx) return res + (dy ? `L${dx},${dy}` : `H${dx}`);\n return dy ? res + `V${dy}` : res;\n };\n\n switch (options.Ends) {\n case 2: // option []\n bb = Math.max(lineatt.width+1, Math.round(lw*0.66));\n vleft = `m${bb},${lw}h${-bb}v${-2*lw}h${bb}`;\n vright = `m${-bb},${lw}h${bb}v${-2*lw}h${-bb}`;\n htop = `m${-lw},${bb}v${-bb}h${2*lw}v${bb}`;\n hbottom = `m${-lw},${-bb}v${bb}h${2*lw}v${-bb}`;\n break;\n case 3: // option |>\n lw = Math.max(lw, Math.round(graph.fMarkerSize*8*0.66));\n bb = Math.max(lineatt.width+1, Math.round(lw*0.66));\n vleft = `l${bb},${lw}v${-2*lw}l${-bb},${lw}`;\n vright = `l${-bb},${lw}v${-2*lw}l${bb},${lw}`;\n htop = `l${-lw},${bb}h${2*lw}l${-lw},${-bb}`;\n hbottom = `l${-lw},${-bb}h${2*lw}l${-lw},${bb}`;\n break;\n case 4: // option >\n lw = Math.max(lw, Math.round(graph.fMarkerSize*8*0.66));\n bb = Math.max(lineatt.width+1, Math.round(lw*0.66));\n vleft = `l${bb},${lw}m0,${-2*lw}l${-bb},${lw}`;\n vright = `l${-bb},${lw}m0,${-2*lw}l${bb},${lw}`;\n htop = `l${-lw},${bb}m${2*lw},0l${-lw},${-bb}`;\n hbottom = `l${-lw},${-bb}m${2*lw},0l${-lw},${bb}`;\n break;\n }\n\n this.error_size = lw;\n\n lw = Math.floor((lineatt.width-1)/2); // one should take into account half of end-cup line width\n\n let visible = nodes.filter(d => (d.exlow > 0) || (d.exhigh > 0) || (d.eylow > 0) || (d.eyhigh > 0));\n if (options.skip_errors_x0 || options.skip_errors_y0)\n visible = visible.filter(d => ((d.x != 0) || !options.skip_errors_x0) && ((d.y != 0) || !options.skip_errors_y0));\n\n if (!isBatchMode() && settings.Tooltip && main_block)\n visible.append('svg:path')\n .style('fill', 'none')\n .style('pointer-events', 'visibleFill')\n .attr('d', d => `M${d.grx0},${d.gry0}h${d.grx2-d.grx0}v${d.gry2-d.gry0}h${d.grx0-d.grx2}z`);\n\n visible.append('svg:path')\n .call(lineatt.func)\n .style('fill', 'none')\n .attr('d', d => {\n d.error = true;\n return ((d.exlow > 0) ? mainLine(d.grx0+lw, d.grdx0) + vleft : '') +\n ((d.exhigh > 0) ? mainLine(d.grx2-lw, d.grdx2) + vright : '') +\n ((d.eylow > 0) ? mainLine(d.grdy0, d.gry0-lw) + hbottom : '') +\n ((d.eyhigh > 0) ? mainLine(d.grdy2, d.gry2+lw) + htop : '');\n });\n }\n\n if (options.Mark) {\n // for tooltips use markers only if nodes were not created\n this.createAttMarker({ attr: graph, style: options.Mark - 100 });\n\n this.marker_size = this.markeratt.getFullSize();\n\n this.markeratt.resetPos();\n\n let path = '', pnt, grx, gry,\n want_tooltip = !isBatchMode() && settings.Tooltip && (!this.markeratt.fill || (this.marker_size < 7)) && !nodes && main_block,\n hints_marker = '', hsz = Math.max(5, Math.round(this.marker_size*0.7)),\n maxnummarker = 1000000 / (this.markeratt.getMarkerLength() + 7), step = 1; // let produce SVG at maximum 1MB\n\n if (!drawbins)\n drawbins = this.optimizeBins(maxnummarker);\n else if (this.canOptimize() && (drawbins.length > 1.5*maxnummarker))\n step = Math.min(2, Math.round(drawbins.length/maxnummarker));\n\n for (let n = 0; n < drawbins.length; n += step) {\n pnt = drawbins[n];\n grx = funcs.grx(pnt.x);\n if ((grx > -this.marker_size) && (grx < w + this.marker_size)) {\n gry = funcs.gry(pnt.y);\n if ((gry > -this.marker_size) && (gry < h + this.marker_size)) {\n path += this.markeratt.create(grx, gry);\n if (want_tooltip) hints_marker += `M${grx-hsz},${gry-hsz}h${2*hsz}v${2*hsz}h${-2*hsz}z`;\n }\n }\n }\n\n if (path) {\n draw_g.append('svg:path')\n .attr('d', path)\n .call(this.markeratt.func);\n if ((nodes === null) && (this.draw_kind == 'none') && main_block)\n this.draw_kind = (options.Mark == 101) ? 'path' : 'mark';\n }\n if (want_tooltip && hints_marker)\n draw_g.append('svg:path')\n .attr('d', hints_marker)\n .style('fill', 'none')\n .style('pointer-events', 'visibleFill');\n }\n }\n\n /** @summary append TGraphQQ part */\n appendQQ(funcs, graph) {\n let xqmin = Math.max(funcs.scale_xmin, graph.fXq1),\n xqmax = Math.min(funcs.scale_xmax, graph.fXq2),\n yqmin = Math.max(funcs.scale_ymin, graph.fYq1),\n yqmax = Math.min(funcs.scale_ymax, graph.fYq2),\n path2 = '',\n makeLine = (x1,y1,x2,y2) => `M${funcs.grx(x1)},${funcs.gry(y1)}L${funcs.grx(x2)},${funcs.gry(y2)}`,\n yxmin = (graph.fYq2 - graph.fYq1)*(funcs.scale_xmin-graph.fXq1)/(graph.fXq2-graph.fXq1) + graph.fYq1,\n yxmax = (graph.fYq2-graph.fYq1)*(funcs.scale_xmax-graph.fXq1)/(graph.fXq2-graph.fXq1) + graph.fYq1;\n\n if (yxmin < funcs.scale_ymin) {\n let xymin = (graph.fXq2 - graph.fXq1)*(funcs.scale_ymin-graph.fYq1)/(graph.fYq2-graph.fYq1) + graph.fXq1;\n path2 = makeLine(xymin, funcs.scale_ymin, xqmin, yqmin);\n } else {\n path2 = makeLine(funcs.scale_xmin, yxmin, xqmin, yqmin);\n }\n\n if (yxmax > funcs.scale_ymax) {\n let xymax = (graph.fXq2-graph.fXq1)*(funcs.scale_ymax-graph.fYq1)/(graph.fYq2-graph.fYq1) + graph.fXq1;\n path2 += makeLine(xqmax, yqmax, xymax, funcs.scale_ymax);\n } else {\n path2 += makeLine(xqmax, yqmax, funcs.scale_xmax, yxmax);\n }\n\n let latt1 = new TAttLineHandler({ style: 1, width: 1, color: 'black' }),\n latt2 = new TAttLineHandler({ style: 2, width: 1, color: 'black' });\n\n this.draw_g.append('path')\n .attr('d', makeLine(xqmin,yqmin,xqmax,yqmax))\n .call(latt1.func)\n .style('fill', 'none');\n\n this.draw_g.append('path')\n .attr('d', path2)\n .call(latt2.func)\n .style('fill', 'none');\n }\n\n drawBins3D(/*fp, graph*/) {\n console.log('Load ./hist/TGraphPainter.mjs to draw graph in 3D');\n }\n\n /** @summary draw TGraph */\n drawGraph() {\n\n let pmain = this.get_main(),\n graph = this.getObject();\n if (!pmain) return;\n\n // special mode for TMultiGraph 3d drawing\n if (this.options.pos3d)\n return this.drawBins3D(pmain, graph);\n\n let is_gme = !!this.get_gme(),\n funcs = pmain.getGrFuncs(this.options.second_x, this.options.second_y),\n w = pmain.getFrameWidth(),\n h = pmain.getFrameHeight();\n\n this.createG(!pmain.pad_layer);\n\n if (this.options._pfc || this.options._plc || this.options._pmc) {\n let mp = this.getMainPainter();\n if (isFunc(mp?.createAutoColor)) {\n let icolor = mp.createAutoColor();\n if (this.options._pfc) { graph.fFillColor = icolor; delete this.fillatt; }\n if (this.options._plc) { graph.fLineColor = icolor; delete this.lineatt; }\n if (this.options._pmc) { graph.fMarkerColor = icolor; delete this.markeratt; }\n this.options._pfc = this.options._plc = this.options._pmc = false;\n }\n }\n\n this.createAttLine({ attr: graph, can_excl: true });\n this.createAttFill({ attr: graph });\n\n this.fillatt.used = false; // mark used only when really used\n\n this.draw_kind = 'none'; // indicate if special svg:g were created for each bin\n this.marker_size = 0; // indicate if markers are drawn\n let draw_g = is_gme ? this.draw_g.append('svg:g') : this.draw_g;\n\n this.drawBins(funcs, this.options, draw_g, w, h, this.lineatt, this.fillatt, true);\n\n if (graph._typename == 'TGraphQQ')\n this.appendQQ(funcs, graph);\n\n if (is_gme) {\n for (let k = 0; k < graph.fNYErrors; ++k) {\n let lineatt = this.lineatt, fillatt = this.fillatt;\n if (this.options.individual_styles) {\n lineatt = new TAttLineHandler({ attr: graph.fAttLine[k], std: false });\n fillatt = new TAttFillHandler({ attr: graph.fAttFill[k], std: false, svg: this.getCanvSvg() });\n }\n let sub_g = this.draw_g.append('svg:g'),\n options = k < this.options.blocks.length ? this.options.blocks[k] : this.options;\n this.extractGmeErrors(k);\n this.drawBins(funcs, options, sub_g, w, h, lineatt, fillatt);\n }\n this.extractGmeErrors(0); // ensure that first block kept at the end\n }\n\n if (!isBatchMode())\n addMoveHandler(this, this.testEditable());\n }\n\n /** @summary Provide tooltip at specified point */\n extractTooltip(pnt) {\n if (!pnt) return null;\n\n if ((this.draw_kind == 'lines') || (this.draw_kind == 'path') || (this.draw_kind == 'mark'))\n return this.extractTooltipForPath(pnt);\n\n if (this.draw_kind != 'nodes') return null;\n\n let pmain = this.get_main(),\n height = pmain.getFrameHeight(),\n esz = this.error_size,\n isbar1 = (this.options.Bar === 1),\n funcs = isbar1 ? pmain.getGrFuncs(this.options.second_x, this.options.second_y) : null,\n findbin = null, best_dist2 = 1e10, best = null,\n msize = this.marker_size ? Math.round(this.marker_size/2 + 1.5) : 0;\n\n this.draw_g.selectAll('.grpoint').each(function() {\n let d = d3_select(this).datum();\n if (d === undefined) return;\n let dist2 = (pnt.x - d.grx1) ** 2;\n if (pnt.nproc === 1) dist2 += (pnt.y - d.gry1) ** 2;\n if (dist2 >= best_dist2) return;\n\n let rect;\n\n if (d.error || d.rect || d.marker) {\n rect = { x1: Math.min(-esz, d.grx0, -msize),\n x2: Math.max(esz, d.grx2, msize),\n y1: Math.min(-esz, d.gry2, -msize),\n y2: Math.max(esz, d.gry0, msize) };\n } else if (d.bar) {\n rect = { x1: -d.width/2, x2: d.width/2, y1: 0, y2: height - d.gry1 };\n\n if (isbar1) {\n let yy0 = funcs.gry(0);\n rect.y1 = (d.gry1 > yy0) ? yy0-d.gry1 : 0;\n rect.y2 = (d.gry1 > yy0) ? 0 : yy0-d.gry1;\n }\n } else {\n rect = { x1: -5, x2: 5, y1: -5, y2: 5 };\n }\n let matchx = (pnt.x >= d.grx1 + rect.x1) && (pnt.x <= d.grx1 + rect.x2),\n matchy = (pnt.y >= d.gry1 + rect.y1) && (pnt.y <= d.gry1 + rect.y2);\n\n if (matchx && (matchy || (pnt.nproc > 1))) {\n best_dist2 = dist2;\n findbin = this;\n best = rect;\n best.exact = /* matchx && */ matchy;\n }\n });\n\n if (findbin === null) return null;\n\n let d = d3_select(findbin).datum(),\n gr = this.getObject(),\n res = { name: gr.fName, title: gr.fTitle,\n x: d.grx1, y: d.gry1,\n color1: this.lineatt.color,\n lines: this.getTooltips(d),\n rect: best, d3bin: findbin };\n\n res.user_info = { obj: gr, name: gr.fName, bin: d.indx, cont: d.y, grx: d.grx1, gry: d.gry1 };\n\n if (this.fillatt && this.fillatt.used && !this.fillatt.empty())\n res.color2 = this.fillatt.getFillColor();\n\n if (best.exact) res.exact = true;\n res.menu = res.exact; // activate menu only when exactly locate bin\n res.menu_dist = 3; // distance always fixed\n res.bin = d;\n res.binindx = d.indx;\n\n return res;\n }\n\n /** @summary Show tooltip */\n showTooltip(hint) {\n\n if (!hint) {\n if (this.draw_g) this.draw_g.select('.tooltip_bin').remove();\n return;\n }\n\n if (hint.usepath) return this.showTooltipForPath(hint);\n\n let d = d3_select(hint.d3bin).datum(),\n ttrect = this.draw_g.select('.tooltip_bin');\n\n if (ttrect.empty())\n ttrect = this.draw_g.append('svg:rect')\n .attr('class', 'tooltip_bin h1bin')\n .style('pointer-events', 'none');\n\n hint.changed = ttrect.property('current_bin') !== hint.d3bin;\n\n if (hint.changed)\n ttrect.attr('x', d.grx1 + hint.rect.x1)\n .attr('width', hint.rect.x2 - hint.rect.x1)\n .attr('y', d.gry1 + hint.rect.y1)\n .attr('height', hint.rect.y2 - hint.rect.y1)\n .style('opacity', '0.3')\n .property('current_bin', hint.d3bin);\n }\n\n /** @summary Process tooltip event */\n processTooltipEvent(pnt) {\n let hint = this.extractTooltip(pnt);\n if (!pnt || !pnt.disabled) this.showTooltip(hint);\n return hint;\n }\n\n /** @summary Find best bin index for specified point */\n findBestBin(pnt) {\n if (!this.bins) return null;\n\n let islines = (this.draw_kind == 'lines'),\n bestindx = -1,\n bestbin = null,\n bestdist = 1e10,\n funcs = this.get_main().getGrFuncs(this.options.second_x, this.options.second_y),\n dist, grx, gry, n, bin;\n\n for (n = 0; n < this.bins.length; ++n) {\n bin = this.bins[n];\n\n grx = funcs.grx(bin.x);\n gry = funcs.gry(bin.y);\n\n dist = (pnt.x-grx)**2 + (pnt.y-gry)**2;\n\n if (dist < bestdist) {\n bestdist = dist;\n bestbin = bin;\n bestindx = n;\n }\n }\n\n // check last point\n if ((bestdist > 100) && islines) bestbin = null;\n\n let radius = Math.max(this.lineatt.width + 3, 4);\n\n if (this.marker_size > 0) radius = Math.max(this.marker_size, radius);\n\n if (bestbin)\n bestdist = Math.sqrt((pnt.x-funcs.grx(bestbin.x))**2 + (pnt.y-funcs.gry(bestbin.y))**2);\n\n if (!islines && (bestdist > radius)) bestbin = null;\n\n if (!bestbin) bestindx = -1;\n\n let res = { bin: bestbin, indx: bestindx, dist: bestdist, radius: Math.round(radius) };\n\n if (!bestbin && islines) {\n\n bestdist = 1e10;\n\n const IsInside = (x, x1, x2) => ((x1 >= x) && (x >= x2)) || ((x1 <= x) && (x <= x2));\n\n let bin0 = this.bins[0], grx0 = funcs.grx(bin0.x), gry0, posy = 0;\n for (n = 1; n < this.bins.length; ++n) {\n bin = this.bins[n];\n grx = funcs.grx(bin.x);\n\n if (IsInside(pnt.x, grx0, grx)) {\n // if inside interval, check Y distance\n gry0 = funcs.gry(bin0.y);\n gry = funcs.gry(bin.y);\n\n if (Math.abs(grx - grx0) < 1) {\n // very close x - check only y\n posy = pnt.y;\n dist = IsInside(pnt.y, gry0, gry) ? 0 : Math.min(Math.abs(pnt.y-gry0), Math.abs(pnt.y-gry));\n } else {\n posy = gry0 + (pnt.x - grx0) / (grx - grx0) * (gry - gry0);\n dist = Math.abs(posy - pnt.y);\n }\n\n if (dist < bestdist) {\n bestdist = dist;\n res.linex = pnt.x;\n res.liney = posy;\n }\n }\n\n bin0 = bin;\n grx0 = grx;\n }\n\n if (bestdist < radius*0.5) {\n res.linedist = bestdist;\n res.closeline = true;\n }\n }\n\n return res;\n }\n\n /** @summary Check editable flag for TGraph\n * @desc if arg specified changes or toggles editable flag */\n testEditable(arg) {\n let obj = this.getObject();\n if (!obj) return false;\n if ((arg == 'toggle') || ((arg !== undefined) && (!arg != obj.TestBit(kNotEditable))))\n obj.InvertBit(kNotEditable);\n return !obj.TestBit(kNotEditable);\n }\n\n /** @summary Provide tooltip at specified point for path-based drawing */\n extractTooltipForPath(pnt) {\n\n if (this.bins === null) return null;\n\n let best = this.findBestBin(pnt);\n\n if (!best || (!best.bin && !best.closeline)) return null;\n\n let islines = (this.draw_kind == 'lines'),\n ismark = (this.draw_kind == 'mark'),\n pmain = this.get_main(),\n funcs = pmain.getGrFuncs(this.options.second_x, this.options.second_y),\n gr = this.getObject(),\n res = { name: gr.fName, title: gr.fTitle,\n x: best.bin ? funcs.grx(best.bin.x) : best.linex,\n y: best.bin ? funcs.gry(best.bin.y) : best.liney,\n color1: this.lineatt.color,\n lines: this.getTooltips(best.bin),\n usepath: true };\n\n res.user_info = { obj: gr, name: gr.fName, bin: 0, cont: 0, grx: res.x, gry: res.y };\n\n res.ismark = ismark;\n res.islines = islines;\n\n if (best.closeline) {\n res.menu = res.exact = true;\n res.menu_dist = best.linedist;\n } else if (best.bin) {\n if (this.options.EF && islines) {\n res.gry1 = funcs.gry(best.bin.y - best.bin.eylow);\n res.gry2 = funcs.gry(best.bin.y + best.bin.eyhigh);\n } else {\n res.gry1 = res.gry2 = funcs.gry(best.bin.y);\n }\n\n res.binindx = best.indx;\n res.bin = best.bin;\n res.radius = best.radius;\n res.user_info.bin = best.indx;\n res.user_info.cont = best.bin.y;\n\n res.exact = (Math.abs(pnt.x - res.x) <= best.radius) &&\n ((Math.abs(pnt.y - res.gry1) <= best.radius) || (Math.abs(pnt.y - res.gry2) <= best.radius));\n\n res.menu = res.exact;\n res.menu_dist = Math.sqrt((pnt.x-res.x)**2 + Math.min(Math.abs(pnt.y-res.gry1), Math.abs(pnt.y-res.gry2))**2);\n }\n\n if (this.fillatt && this.fillatt.used && !this.fillatt.empty())\n res.color2 = this.fillatt.getFillColor();\n\n if (!islines) {\n res.color1 = this.getColor(gr.fMarkerColor);\n if (!res.color2) res.color2 = res.color1;\n }\n\n return res;\n }\n\n /** @summary Show tooltip for path drawing */\n showTooltipForPath(hint) {\n\n let ttbin = this.draw_g.select('.tooltip_bin');\n\n if (!hint || !hint.bin) {\n ttbin.remove();\n return;\n }\n\n if (ttbin.empty())\n ttbin = this.draw_g.append('svg:g').attr('class', 'tooltip_bin');\n\n hint.changed = ttbin.property('current_bin') !== hint.bin;\n\n if (hint.changed) {\n ttbin.selectAll('*').remove(); // first delete all children\n ttbin.property('current_bin', hint.bin);\n\n if (hint.ismark) {\n ttbin.append('svg:rect')\n .attr('class','h1bin')\n .style('pointer-events','none')\n .style('opacity', '0.3')\n .attr('x', Math.round(hint.x - hint.radius))\n .attr('y', Math.round(hint.y - hint.radius))\n .attr('width', 2*hint.radius)\n .attr('height', 2*hint.radius);\n } else {\n ttbin.append('svg:circle').attr('cy', Math.round(hint.gry1));\n if (Math.abs(hint.gry1-hint.gry2) > 1)\n ttbin.append('svg:circle').attr('cy', Math.round(hint.gry2));\n\n let elem = ttbin.selectAll('circle')\n .attr('r', hint.radius)\n .attr('cx', Math.round(hint.x));\n\n if (!hint.islines) {\n elem.style('stroke', hint.color1 == 'black' ? 'green' : 'black').style('fill','none');\n } else {\n if (this.options.Line || this.options.Curve)\n elem.call(this.lineatt.func);\n else\n elem.style('stroke','black');\n if (this.options.Fill)\n elem.call(this.fillatt.func);\n else\n elem.style('fill','none');\n }\n }\n }\n }\n\n /** @summary Check if graph moving is enabled */\n moveEnabled() {\n return this.testEditable();\n }\n\n /** @summary Start moving of TGraph */\n moveStart(x,y) {\n this.pos_dx = this.pos_dy = 0;\n this.move_funcs = this.get_main().getGrFuncs(this.options.second_x, this.options.second_y);\n let hint = this.extractTooltip({x, y});\n if (hint && hint.exact && (hint.binindx !== undefined)) {\n this.move_binindx = hint.binindx;\n this.move_bin = hint.bin;\n this.move_x0 = this.move_funcs.grx(this.move_bin.x);\n this.move_y0 = this.move_funcs.gry(this.move_bin.y);\n } else {\n delete this.move_binindx;\n }\n }\n\n /** @summary Perform moving */\n moveDrag(dx,dy) {\n this.pos_dx += dx;\n this.pos_dy += dy;\n\n if (this.move_binindx === undefined) {\n this.draw_g.attr('transform', `translate(${this.pos_dx},${this.pos_dy})`);\n } else if (this.move_funcs && this.move_bin) {\n this.move_bin.x = this.move_funcs.revertAxis('x', this.move_x0 + this.pos_dx);\n this.move_bin.y = this.move_funcs.revertAxis('y', this.move_y0 + this.pos_dy);\n this.drawGraph();\n }\n }\n\n /** @summary Complete moving */\n moveEnd(not_changed) {\n let exec = '';\n\n if (this.move_binindx === undefined) {\n this.draw_g.attr('transform', null);\n\n if (this.move_funcs && this.bins && !not_changed) {\n for (let k = 0; k < this.bins.length; ++k) {\n let bin = this.bins[k];\n bin.x = this.move_funcs.revertAxis('x', this.move_funcs.grx(bin.x) + this.pos_dx);\n bin.y = this.move_funcs.revertAxis('y', this.move_funcs.gry(bin.y) + this.pos_dy);\n exec += `SetPoint(${bin.indx},${bin.x},${bin.y});;`;\n if ((bin.indx == 0) && this.matchObjectType(clTCutG))\n exec += `SetPoint(${this.getObject().fNpoints-1},${bin.x},${bin.y});;`;\n }\n this.drawGraph();\n }\n } else {\n exec = `SetPoint(${this.move_bin.indx},${this.move_bin.x},${this.move_bin.y});;`;\n if ((this.move_bin.indx == 0) && this.matchObjectType(clTCutG))\n exec += `SetPoint(${this.getObject().fNpoints-1},${this.move_bin.x},${this.move_bin.y});;`;\n delete this.move_binindx;\n }\n\n delete this.move_funcs;\n\n if (exec && !not_changed)\n this.submitCanvExec(exec);\n }\n\n /** @summary Fill context menu */\n fillContextMenu(menu) {\n super.fillContextMenu(menu);\n\n if (!this.snapid)\n menu.addchk(this.testEditable(), 'Editable', () => { this.testEditable('toggle'); this.drawGraph(); });\n\n return menu.size() > 0;\n }\n\n /** @summary Execute menu command\n * @private */\n executeMenuCommand(method, args) {\n if (super.executeMenuCommand(method,args)) return true;\n\n let canp = this.getCanvPainter(), pmain = this.get_main();\n\n if ((method.fName == 'RemovePoint') || (method.fName == 'InsertPoint')) {\n if (!canp || canp._readonly) return true; // ignore function\n\n let pnt = isFunc(pmain?.getLastEventPos) ? pmain.getLastEventPos() : null,\n hint = this.extractTooltip(pnt);\n\n if (method.fName == 'InsertPoint') {\n if (pnt) {\n let funcs = pmain.getGrFuncs(this.options.second_x, this.options.second_y),\n userx = funcs.revertAxis('x', pnt.x) ?? 0,\n usery = funcs.revertAxis('y', pnt.y) ?? 0;\n this.submitCanvExec(`AddPoint(${userx.toFixed(3)}, ${usery.toFixed(3)})`, this.args_menu_id);\n }\n } else if (this.args_menu_id && (hint?.binindx !== undefined)) {\n this.submitCanvExec(`RemovePoint(${hint.binindx})`, this.args_menu_id);\n }\n\n return true; // call is processed\n }\n\n return false;\n }\n\n /** @summary Update TGraph object */\n updateObject(obj, opt) {\n if (!this.matchObjectType(obj)) return false;\n\n if (opt && (opt != this.options.original))\n this.decodeOptions(opt);\n\n let graph = this.getObject();\n // TODO: make real update of TGraph object content\n graph.fBits = obj.fBits;\n graph.fTitle = obj.fTitle;\n graph.fX = obj.fX;\n graph.fY = obj.fY;\n graph.fNpoints = obj.fNpoints;\n graph.fMinimum = obj.fMinimum;\n graph.fMaximum = obj.fMaximum;\n this.createBins();\n\n delete this.$redraw_hist;\n\n // if our own histogram was used as axis drawing, we need update histogram as well\n if (this.axes_draw) {\n let histo = this.createHistogram();\n histo.fTitle = graph.fTitle; // copy title\n\n let hist_painter = this.getMainPainter();\n if (hist_painter?.$secondary) {\n hist_painter.updateObject(histo, this.options.Axis);\n this.$redraw_hist = true;\n }\n }\n\n return true;\n }\n\n /** @summary Checks if it makes sense to zoom inside specified axis range\n * @desc allow to zoom TGraph only when at least one point in the range */\n canZoomInside(axis,min,max) {\n let gr = this.getObject();\n if (!gr || (axis !== (this.options.pos3d ? 'y' : 'x'))) return false;\n\n for (let n = 0; n < gr.fNpoints; ++n)\n if ((min < gr.fX[n]) && (gr.fX[n] < max)) return true;\n\n return false;\n }\n\n /** @summary Process click on graph-defined buttons */\n clickButton(funcname) {\n if (funcname !== 'ToggleZoom') return false;\n\n let main = this.getFramePainter();\n if (!main) return false;\n\n if ((this.xmin === this.xmax) && (this.ymin === this.ymax)) return false;\n\n main.zoom(this.xmin, this.xmax, this.ymin, this.ymax);\n\n return true;\n }\n\n /** @summary Find TF1/TF2 in TGraph list of functions */\n findFunc() {\n let gr = this.getObject();\n if (gr?.fFunctions?.arr)\n return gr?.fFunctions?.arr.find(func => (func._typename == clTF1) || (func._typename == clTF2));\n return null;\n }\n\n /** @summary Find stat box in TGraph list of functions */\n findStat() {\n let gr = this.getObject();\n if (gr?.fFunctions?.arr)\n for (let i = 0; i < gr.fFunctions.arr.length; ++i) {\n let func = gr.fFunctions.arr[i];\n if ((func._typename == clTPaveStats) && (func.fName == 'stats')) return func;\n }\n return null;\n }\n\n /** @summary Create stat box */\n createStat() {\n let func = this.findFunc();\n if (!func) return null;\n\n let stats = this.findStat();\n if (stats) return stats;\n\n // do not create stats box when drawing canvas\n if (this.getCanvPainter()?.normal_canvas || this.options.PadStats) return null;\n\n this.create_stats = true;\n\n const st = gStyle;\n\n stats = create(clTPaveStats);\n Object.assign(stats, { fName : 'stats', fOptStat: 0, fOptFit: st.fOptFit || 111, fBorderSize: 1 });\n\n stats.fX1NDC = st.fStatX - st.fStatW;\n stats.fY1NDC = st.fStatY - st.fStatH;\n stats.fX2NDC = st.fStatX;\n stats.fY2NDC = st.fStatY;\n\n stats.fFillColor = st.fStatColor;\n stats.fFillStyle = st.fStatStyle;\n\n stats.fTextAngle = 0;\n stats.fTextSize = st.fStatFontSize; // 9 ??\n stats.fTextAlign = 12;\n stats.fTextColor = st.fStatTextColor;\n stats.fTextFont = st.fStatFont;\n\n stats.AddText(func.fName);\n\n // while TF1 was found, one can be sure that stats is existing\n this.getObject().fFunctions.Add(stats);\n\n return stats;\n }\n\n /** @summary Fill statistic */\n fillStatistic(stat, dostat, dofit) {\n\n // cannot fill stats without func\n let func = this.findFunc();\n\n if (!func || !dofit || !this.create_stats) return false;\n\n stat.clearPave();\n\n stat.fillFunctionStat(func, dofit);\n\n return true;\n }\n\n /** @summary method draws next function from the functions list\n * @return {Promise} */\n async drawNextFunction(indx) {\n\n let graph = this.getObject();\n\n if (indx >= (graph?.fFunctions?.arr?.length || 0))\n return this;\n\n let pp = this.getPadPainter(),\n func = graph.fFunctions.arr[indx],\n opt = graph.fFunctions.opt[indx];\n\n // required for stats filling\n // TODO: use weak reference (via pad list of painters and any kind of string)\n func.$main_painter = this;\n\n return pp.drawObject(this.getDom(), func, opt).then(() => this.drawNextFunction(indx+1));\n }\n\n /** @summary Draw axis histogram\n * @private */\n async drawAxisHisto() {\n let histo = this.createHistogram();\n return TH1Painter.draw(this.getDom(), histo, this.options.Axis)\n }\n\n /** @summary Draw TGraph\n * @private */\n static async _drawGraph(painter, opt) {\n painter.decodeOptions(opt, true);\n painter.createBins();\n painter.createStat();\n if (!settings.DragGraphs && !graph.TestBit(kNotEditable))\n graph.InvertBit(kNotEditable);\n\n let promise = Promise.resolve();\n\n if ((!painter.getMainPainter() || painter.options.second_x || painter.options.second_y) && painter.options.Axis)\n promise = painter.drawAxisHisto().then(hist_painter => {\n if (hist_painter) {\n painter.axes_draw = true;\n if (!painter._own_histogram) painter.$primary = true;\n hist_painter.$secondary = 'hist';\n }\n });\n\n return promise.then(() => {\n painter.addToPadPrimitives();\n return painter.drawGraph();\n }).then(() => painter.drawNextFunction(0));\n }\n\n static async draw(dom, graph, opt) {\n return TGraphPainter._drawGraph(new TGraphPainter(dom, graph), opt);\n }\n\n} // class TGraphPainter\n\nexport { clTGraphAsymmErrors, TGraphPainter };\n"],"x_google_ignoreList":[0]} \ No newline at end of file diff --git a/docs/241.4ed7b8d7fa416235.js.map b/docs/241.4ed7b8d7fa416235.js.map deleted file mode 100644 index aa8a137e5..000000000 --- a/docs/241.4ed7b8d7fa416235.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"241.4ed7b8d7fa416235.js","mappings":"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","names":["kNotEditable","BIT","clTGraphErrors","clTGraphAsymmErrors","clTGraphBentErrors","clTGraphMultiErrors","TGraphPainter","ObjectPainter","constructor","dom","graph","super","this","axes_draw","bins","xmin","ymin","xmax","ymax","wheel_zoomy","is_bent","_typename","has_errors","match","redraw","promise","Promise","resolve","_this","$redraw_hist","hist_painter","getMainPainter","$secondary","then","drawGraph","cleanup","interactive_bin","get_gme","getObject","decodeOptions","opt","first_time","isStr","indexOf","slice","is_gme","blocks_gme","has_main","options","decodeBlock","d","res","Object","assign","Line","Curve","Rect","Mark","Bar","OutRange","EF","Fill","MainError","Ends","ScaleErrX","check","partAsFloat","Errors","Axis","NoOpt","PadStats","original","second_x","second_y","individual_styles","split","shift","DrawOptions","hopt","forEach","name","part","empty","pos3d","partAsInt","_pfc","_plc","_pmc","blocks","skip_errors_x0","skip_errors_y0","undefined","length","fMarkerStyle","len","fEX","m","k","Math","max","fEY","pad","getPadPainter","getRootPad","fPrimitives","arr","bl","subres","push","extractGmeErrors","nblock","gr","bin","eylow","fEyL","indx","eyhigh","fEyH","createBins","kind","npoints","fNpoints","clTCutG","Array","p","x","fX","y","fY","exlow","exhigh","fExL","fExH","fEXlow","fEXhigh","fEYlow","fEYhigh","min","createHistogram","set_x","set_y","dx","dy","uxmin","uxmax","minimum","maximum","histo","fHistogram","minimum0","maximum0","fMaximum","kNoZoom","fMinimum","fName","kNoStats","fBits","_own_histogram","fTitle","fXaxis","fXmin","fXmax","fYaxis","unzoomUserRange","dox","doy","extractAxesProperties","canOptimize","settings","optimizeBins","maxpnt","filter_func","selbins","isFunc","n","step","floor","optbins","getTooltips","lines","funcs","get_main","getGrFuncs","gme","getObjectHint","axisAsText","x_handle","ny","fNYErrors","y_handle","pmain","getFramePainter","grx","gry","pp","rect","getPadRect","width","height","pad_layer","pw","ph","getFrameWidth","getFrameHeight","value","fLogx","log10","fUxmin","fX1","fX2","fLogy","fUymin","fY1","fY2","revertAxis","v","appendExclusion","is_curve","path","drawbins","excl_width","extrabins","dlen","sqrt","dgrx","dgry","path2","buildSvgPath","draw_g","append","attr","call","fillatt","func","style","drawBins","w","h","lineatt","main_block","excl_side","path1","bins2","draw_kind","close_symbol","elem","curvebins","nodes","pnt","i","grx1","round","gry1","grx0","grx2","gry0","gry2","grdx0","fEXlowd","grdx2","fEXhighd","grdy0","fEYlowd","grdy2","fEYhighd","selectAll","data","enter","yy0","usefill","fp","fpcol","getFillColor","TAttFillHandler","color","pattern","bar","dw","abs","filter","error_size","lw","gStyle","bb","vv","hh","vleft","vright","htop","hbottom","mainLine","fMarkerSize","visible","isBatchMode","error","createAttMarker","marker_size","markeratt","getFullSize","resetPos","want_tooltip","fill","hints_marker","hsz","maxnummarker","getMarkerLength","create","appendQQ","xqmin","scale_xmin","fXq1","xqmax","scale_xmax","fXq2","yqmin","scale_ymin","fYq1","yqmax","scale_ymax","fYq2","makeLine","x1","y1","x2","y2","yxmin","yxmax","latt1","TAttLineHandler","latt2","drawBins3D","console","log","createG","mp","createAutoColor","icolor","fFillColor","fLineColor","fMarkerColor","createAttLine","can_excl","createAttFill","used","fAttLine","std","fAttFill","svg","getCanvSvg","sub_g","addMoveHandler","testEditable","extractTooltip","extractTooltipForPath","esz","isbar1","findbin","best_dist2","best","msize","each","d3_select","datum","dist2","nproc","marker","matchy","exact","title","color1","d3bin","user_info","obj","cont","color2","menu","menu_dist","binindx","showTooltip","hint","select","remove","usepath","showTooltipForPath","ttrect","changed","property","processTooltipEvent","disabled","findBestBin","dist","islines","bestindx","bestbin","bestdist","radius","IsInside","bin0","posy","linex","liney","linedist","closeline","arg","TestBit","InvertBit","ismark","getColor","ttbin","moveEnabled","moveStart","pos_dx","pos_dy","move_funcs","move_binindx","move_bin","move_x0","move_y0","moveDrag","moveEnd","not_changed","exec","matchObjectType","submitCanvExec","fillContextMenu","snapid","addchk","size","executeMenuCommand","method","args","canp","getCanvPainter","_readonly","getLastEventPos","userx","usery","toFixed","args_menu_id","updateObject","canZoomInside","axis","clickButton","funcname","main","zoom","findFunc","fFunctions","find","clTF1","clTF2","findStat","clTPaveStats","createStat","stats","normal_canvas","create_stats","st","fOptStat","fOptFit","fBorderSize","fX1NDC","fStatX","fStatW","fY1NDC","fStatY","fStatH","fX2NDC","fY2NDC","fStatColor","fFillStyle","fStatStyle","fTextAngle","fTextSize","fStatFontSize","fTextAlign","fTextColor","fStatTextColor","fTextFont","fStatFont","AddText","Add","fillStatistic","stat","dostat","dofit","clearPave","fillFunctionStat","drawNextFunction","_this2","$main_painter","drawObject","getDom","drawAxisHisto","_this3","TH1Painter","static","painter","$primary","addToPadPrimitives","_drawGraph"],"sourceRoot":"webpack:///","sources":["../node_modules/jsroot/modules/hist2d/TGraphPainter.mjs"],"sourcesContent":["import { gStyle, BIT, settings, create, createHistogram, isBatchMode, isFunc, isStr,\n clTPaveStats, clTCutG, clTF1, clTF2, kNoZoom } from '../core.mjs';\nimport { select as d3_select } from '../d3.mjs';\nimport { DrawOptions, buildSvgPath } from '../base/BasePainter.mjs';\nimport { ObjectPainter } from '../base/ObjectPainter.mjs';\nimport { TH1Painter } from './TH1Painter.mjs';\nimport { TAttLineHandler } from '../base/TAttLineHandler.mjs';\nimport { TAttFillHandler } from '../base/TAttFillHandler.mjs';\nimport { addMoveHandler } from '../gui/utils.mjs';\n\n\nconst kNotEditable = BIT(18), // bit set if graph is non editable\n clTGraphErrors = 'TGraphErrors',\n clTGraphAsymmErrors = 'TGraphAsymmErrors',\n clTGraphBentErrors = 'TGraphBentErrors',\n clTGraphMultiErrors = 'TGraphMultiErrors';\n\n/**\n * @summary Painter for TGraph object.\n *\n * @private\n */\n\nclass TGraphPainter extends ObjectPainter {\n\n constructor(dom, graph) {\n super(dom, graph);\n this.axes_draw = false; // indicate if graph histogram was drawn for axes\n this.bins = null;\n this.xmin = this.ymin = this.xmax = this.ymax = 0;\n this.wheel_zoomy = true;\n this.is_bent = (graph._typename == clTGraphBentErrors);\n this.has_errors = (graph._typename == clTGraphErrors) ||\n (graph._typename == clTGraphMultiErrors) ||\n (graph._typename == clTGraphAsymmErrors) ||\n this.is_bent || graph._typename.match(/^RooHist/);\n }\n\n /** @summary Redraw graph\n * @desc may redraw histogram which was used to draw axes\n * @return {Promise} for ready */\n async redraw() {\n let promise = Promise.resolve(true);\n\n if (this.$redraw_hist) {\n delete this.$redraw_hist;\n let hist_painter = this.getMainPainter();\n if (hist_painter?.$secondary && this.axes_draw)\n promise = hist_painter.redraw();\n }\n\n return promise.then(() => this.drawGraph());\n }\n\n /** @summary Cleanup graph painter */\n cleanup() {\n delete this.interactive_bin; // break mouse handling\n delete this.bins;\n super.cleanup();\n }\n\n /** @summary Returns object if this drawing TGraphMultiErrors object */\n get_gme() {\n let graph = this.getObject();\n return graph?._typename == clTGraphMultiErrors ? graph : null;\n }\n\n /** @summary Decode options */\n decodeOptions(opt, first_time) {\n\n if (isStr(opt) && (opt.indexOf('same ') == 0))\n opt = opt.slice(5);\n\n let graph = this.getObject(),\n is_gme = !!this.get_gme(),\n blocks_gme = [],\n has_main = first_time ? !!this.getMainPainter() : !this.axes_draw;\n\n if (!this.options) this.options = {};\n\n // decode main draw options for the graph\n const decodeBlock = (d, res) => {\n Object.assign(res, { Line: 0, Curve: 0, Rect: 0, Mark: 0, Bar: 0, OutRange: 0, EF:0, Fill: 0, MainError: 1, Ends: 1, ScaleErrX: 1 });\n\n if (is_gme && d.check('S=', true)) res.ScaleErrX = d.partAsFloat();\n\n if (d.check('L')) res.Line = 1;\n if (d.check('F')) res.Fill = 1;\n if (d.check('CC')) res.Curve = 2; // draw all points without reduction\n if (d.check('C')) res.Curve = 1;\n if (d.check('*')) res.Mark = 103;\n if (d.check('P0')) res.Mark = 104;\n if (d.check('P')) res.Mark = 1;\n if (d.check('B')) { res.Bar = 1; res.Errors = 0; }\n if (d.check('Z')) { res.Errors = 1; res.Ends = 0; }\n if (d.check('||')) { res.Errors = 1; res.MainError = 0; res.Ends = 1; }\n if (d.check('[]')) { res.Errors = 1; res.MainError = 0; res.Ends = 2; }\n if (d.check('|>')) { res.Errors = 1; res.Ends = 3; }\n if (d.check('>')) { res.Errors = 1; res.Ends = 4; }\n if (d.check('0')) { res.Mark = 1; res.Errors = 1; res.OutRange = 1; }\n if (d.check('1')) { if (res.Bar == 1) res.Bar = 2; }\n if (d.check('2')) { res.Rect = 1; res.Errors = 0; }\n if (d.check('3')) { res.EF = 1; res.Errors = 0; }\n if (d.check('4')) { res.EF = 2; res.Errors = 0; }\n if (d.check('5')) { res.Rect = 2; res.Errors = 0; }\n if (d.check('X')) res.Errors = 0;\n };\n\n Object.assign(this.options, { Axis: '', NoOpt: 0, PadStats: false, original: opt, second_x: false, second_y: false, individual_styles: false });\n\n if (is_gme && opt) {\n if (opt.indexOf(';') > 0) {\n blocks_gme = opt.split(';');\n opt = blocks_gme.shift();\n } else if (opt.indexOf('_') > 0) {\n blocks_gme = opt.split('_');\n opt = blocks_gme.shift();\n }\n }\n\n let res = this.options,\n d = new DrawOptions(opt);\n\n // check pad options first\n res.PadStats = d.check('USE_PAD_STATS');\n let hopt = '', checkhopt = ['USE_PAD_TITLE', 'LOGXY', 'LOGX', 'LOGY', 'LOGZ', 'GRIDXY', 'GRIDX', 'GRIDY', 'TICKXY', 'TICKX', 'TICKY'];\n checkhopt.forEach(name => { if (d.check(name)) hopt += ';' + name; });\n if (d.check('XAXIS_', true)) hopt += ';XAXIS_' + d.part;\n if (d.check('YAXIS_', true)) hopt += ';YAXIS_' + d.part;\n\n if (d.empty()) {\n res.original = has_main ? 'lp' : 'alp';\n d = new DrawOptions(res.original);\n }\n\n if (d.check('NOOPT')) res.NoOpt = 1;\n\n if (d.check('POS3D_', true)) res.pos3d = d.partAsInt() - 0.5;\n\n res._pfc = d.check('PFC');\n res._plc = d.check('PLC');\n res._pmc = d.check('PMC');\n\n if (d.check('A')) res.Axis = d.check('I') ? 'A' : 'AXIS'; // I means invisible axis\n if (d.check('X+')) { res.Axis += 'X+'; res.second_x = has_main; }\n if (d.check('Y+')) { res.Axis += 'Y+'; res.second_y = has_main; }\n if (d.check('RX')) res.Axis += 'RX';\n if (d.check('RY')) res.Axis += 'RY';\n\n if (is_gme) {\n res.blocks = [];\n res.skip_errors_x0 = res.skip_errors_y0 = false;\n if (d.check('X0')) res.skip_errors_x0 = true;\n if (d.check('Y0')) res.skip_errors_y0 = true;\n }\n\n decodeBlock(d, res);\n\n if (is_gme) {\n if (d.check('S')) res.individual_styles = true;\n }\n\n // if (d.check('E')) res.Errors = 1; // E option only defined for TGraphPolar\n\n if (res.Errors === undefined)\n res.Errors = this.has_errors && (!is_gme || !blocks_gme.length) ? 1 : 0;\n\n // special case - one could use svg:path to draw many pixels (\n if ((res.Mark == 1) && (graph.fMarkerStyle == 1)) res.Mark = 101;\n\n // if no drawing option is selected and if opt == '' nothing is done.\n if (res.Line + res.Fill + res.Curve + res.Mark + res.Bar + res.EF + res.Rect + res.Errors == 0) {\n if (d.empty()) res.Line = 1;\n }\n\n if (graph._typename == clTGraphErrors) {\n let len = graph.fEX.length, m = 0;\n for (let k = 0; k < len; ++k)\n m = Math.max(m, graph.fEX[k], graph.fEY[k]);\n if (m < 1e-100)\n res.Errors = 0;\n }\n\n if (!res.Axis) {\n // check if axis should be drawn\n // either graph drawn directly or\n // graph is first object in list of primitives\n let pp = this.getPadPainter(),\n pad = pp?.getRootPad(true);\n if (!pad || (pad?.fPrimitives?.arr[0] === graph)) res.Axis = 'AXIS';\n } else if (res.Axis.indexOf('A') < 0) {\n res.Axis = 'AXIS,' + res.Axis;\n }\n\n res.Axis += hopt;\n\n for (let bl = 0; bl < blocks_gme.length; ++bl) {\n let subd = new DrawOptions(blocks_gme[bl]), subres = {};\n decodeBlock(subd, subres);\n subres.skip_errors_x0 = res.skip_errors_x0;\n subres.skip_errors_y0 = res.skip_errors_y0;\n res.blocks.push(subres);\n }\n }\n\n /** @summary Extract errors for TGraphMultiErrors */\n extractGmeErrors(nblock) {\n if (!this.bins) return;\n let gr = this.getObject();\n this.bins.forEach(bin => {\n bin.eylow = gr.fEyL[nblock][bin.indx];\n bin.eyhigh = gr.fEyH[nblock][bin.indx];\n });\n }\n\n /** @summary Create bins for TF1 drawing */\n createBins() {\n let gr = this.getObject();\n if (!gr) return;\n\n let kind = 0, npoints = gr.fNpoints;\n if ((gr._typename === clTCutG) && (npoints > 3)) npoints--;\n\n if (gr._typename == clTGraphErrors)\n kind = 1;\n else if (gr._typename == clTGraphMultiErrors)\n kind = 2;\n else if (gr._typename == clTGraphAsymmErrors || gr._typename == clTGraphBentErrors || gr._typename.match(/^RooHist/))\n kind = 3;\n\n this.bins = new Array(npoints);\n\n for (let p = 0; p < npoints; ++p) {\n let bin = this.bins[p] = { x: gr.fX[p], y: gr.fY[p], indx: p };\n switch(kind) {\n case 1:\n bin.exlow = bin.exhigh = gr.fEX[p];\n bin.eylow = bin.eyhigh = gr.fEY[p];\n break;\n case 2:\n bin.exlow = gr.fExL[p];\n bin.exhigh = gr.fExH[p];\n bin.eylow = gr.fEyL[0][p];\n bin.eyhigh = gr.fEyH[0][p];\n break;\n case 3:\n bin.exlow = gr.fEXlow[p];\n bin.exhigh = gr.fEXhigh[p];\n bin.eylow = gr.fEYlow[p];\n bin.eyhigh = gr.fEYhigh[p];\n break;\n }\n\n if (p === 0) {\n this.xmin = this.xmax = bin.x;\n this.ymin = this.ymax = bin.y;\n }\n\n if (kind > 0) {\n this.xmin = Math.min(this.xmin, bin.x - bin.exlow, bin.x + bin.exhigh);\n this.xmax = Math.max(this.xmax, bin.x - bin.exlow, bin.x + bin.exhigh);\n this.ymin = Math.min(this.ymin, bin.y - bin.eylow, bin.y + bin.eyhigh);\n this.ymax = Math.max(this.ymax, bin.y - bin.eylow, bin.y + bin.eyhigh);\n } else {\n this.xmin = Math.min(this.xmin, bin.x);\n this.xmax = Math.max(this.xmax, bin.x);\n this.ymin = Math.min(this.ymin, bin.y);\n this.ymax = Math.max(this.ymax, bin.y);\n }\n }\n }\n\n /** @summary Create histogram for graph\n * @desc graph bins should be created when calling this function\n * @param {boolean} [set_x] - set X axis range\n * @param {boolean} [set_y] - set Y axis range */\n createHistogram(set_x, set_y) {\n if (!set_x && !set_y)\n set_x = set_y = true;\n\n let xmin = this.xmin, xmax = this.xmax, ymin = this.ymin, ymax = this.ymax;\n\n if (xmin >= xmax) xmax = xmin+1;\n if (ymin >= ymax) ymax = ymin+1;\n let dx = (xmax-xmin)*0.1, dy = (ymax-ymin)*0.1,\n uxmin = xmin - dx, uxmax = xmax + dx,\n minimum = ymin - dy, maximum = ymax + dy;\n\n if ((uxmin < 0) && (xmin >= 0)) uxmin = xmin*0.9;\n if ((uxmax > 0) && (xmax <= 0)) uxmax = 0;\n\n let graph = this.getObject(),\n histo = graph.fHistogram,\n minimum0 = minimum, maximum0 = maximum;\n\n if (!histo) {\n histo = graph.fHistogram = createHistogram('TH1F', 100);\n histo.fName = graph.fName + '_h';\n const kNoStats = BIT(9);\n histo.fBits = histo.fBits | kNoStats;\n this._own_histogram = true;\n } else if ((histo.fMaximum != kNoZoom) && (histo.fMinimum != kNoZoom)) {\n minimum = histo.fMinimum;\n maximum = histo.fMaximum;\n }\n\n if (graph.fMinimum != kNoZoom) minimum = ymin = graph.fMinimum;\n if (graph.fMaximum != kNoZoom) maximum = graph.fMaximum;\n if ((minimum < 0) && (ymin >= 0)) minimum = 0.9*ymin;\n\n histo.fTitle = graph.fTitle;\n\n if (set_x) {\n histo.fXaxis.fXmin = uxmin;\n histo.fXaxis.fXmax = uxmax;\n }\n\n if (set_y) {\n histo.fYaxis.fXmin = Math.min(minimum0, minimum);\n histo.fYaxis.fXmax = Math.max(maximum0, maximum);\n histo.fMinimum = minimum;\n histo.fMaximum = maximum;\n }\n\n return histo;\n }\n\n /** @summary Check if user range can be unzommed\n * @desc Used when graph points covers larger range than provided histogram */\n unzoomUserRange(dox, doy /*, doz*/) {\n let graph = this.getObject();\n if (this._own_histogram || !graph) return false;\n\n let histo = graph.fHistogram;\n\n dox = dox && histo && ((histo.fXaxis.fXmin > this.xmin) || (histo.fXaxis.fXmax < this.xmax));\n doy = doy && histo && ((histo.fYaxis.fXmin > this.ymin) || (histo.fYaxis.fXmax < this.ymax));\n if (!dox && !doy) return false;\n\n this.createHistogram(dox, doy);\n this.getMainPainter()?.extractAxesProperties(1); // just to enforce ranges extraction\n\n return true;\n }\n\n /** @summary Returns true if graph drawing can be optimize */\n canOptimize() {\n return (settings.OptimizeDraw > 0) && !this.options.NoOpt;\n }\n\n /** @summary Returns optimized bins - if optimization enabled */\n optimizeBins(maxpnt, filter_func) {\n if ((this.bins.length < 30) && !filter_func) return this.bins;\n\n let selbins = null;\n if (isFunc(filter_func)) {\n for (let n = 0; n < this.bins.length; ++n) {\n if (filter_func(this.bins[n],n)) {\n if (!selbins) selbins = (n == 0) ? [] : this.bins.slice(0, n);\n } else {\n if (selbins) selbins.push(this.bins[n]);\n }\n }\n }\n if (!selbins) selbins = this.bins;\n\n if (!maxpnt) maxpnt = 500000;\n\n if ((selbins.length < maxpnt) || !this.canOptimize()) return selbins;\n let step = Math.floor(selbins.length / maxpnt);\n if (step < 2) step = 2;\n let optbins = [];\n for (let n = 0; n < selbins.length; n+=step)\n optbins.push(selbins[n]);\n\n return optbins;\n }\n\n /** @summary Returns tooltip for specified bin */\n getTooltips(d) {\n let pmain = this.get_main(), lines = [],\n funcs = pmain.getGrFuncs(this.options.second_x, this.options.second_y),\n gme = this.get_gme();\n\n lines.push(this.getObjectHint());\n\n if (d && funcs) {\n if (d.indx !== undefined)\n lines.push('p = ' + d.indx);\n lines.push('x = ' + funcs.axisAsText('x', d.x), 'y = ' + funcs.axisAsText('y', d.y));\n if (gme)\n lines.push('error x = -' + funcs.axisAsText('x', gme.fExL[d.indx]) + '/+' + funcs.axisAsText('x', gme.fExH[d.indx]));\n else if (this.options.Errors && (funcs.x_handle.kind == 'normal') && (d.exlow || d.exhigh))\n lines.push('error x = -' + funcs.axisAsText('x', d.exlow) + '/+' + funcs.axisAsText('x', d.exhigh));\n\n if (gme) {\n for (let ny = 0; ny < gme.fNYErrors; ++ny)\n lines.push(`error y${ny} = -${funcs.axisAsText('y', gme.fEyL[ny][d.indx])}/+${funcs.axisAsText('y', gme.fEyH[ny][d.indx])}`);\n } else if ((this.options.Errors || (this.options.EF > 0)) && (funcs.y_handle.kind == 'normal') && (d.eylow || d.eyhigh))\n lines.push('error y = -' + funcs.axisAsText('y', d.eylow) + '/+' + funcs.axisAsText('y', d.eyhigh));\n\n }\n return lines;\n }\n\n /** @summary Provide frame painter for graph\n * @desc If not exists, emulate its behaviour */\n get_main() {\n let pmain = this.getFramePainter();\n\n if (pmain && pmain.grx && pmain.gry) return pmain;\n\n // FIXME: check if needed, can be removed easily\n let pp = this.getPadPainter(),\n rect = pp?.getPadRect() || { width: 800, height: 600 };\n\n pmain = {\n pad_layer: true,\n pad: pp?.getRootPad(true),\n pw: rect.width,\n ph: rect.height,\n getFrameWidth() { return this.pw; },\n getFrameHeight() { return this.ph; },\n grx(value) {\n if (this.pad.fLogx)\n value = (value > 0) ? Math.log10(value) : this.pad.fUxmin;\n else\n value = (value - this.pad.fX1) / (this.pad.fX2 - this.pad.fX1);\n return value * this.pw;\n },\n gry(value) {\n if (this.pad.fLogy)\n value = (value > 0) ? Math.log10(value) : this.pad.fUymin;\n else\n value = (value - this.pad.fY1) / (this.pad.fY2 - this.pad.fY1);\n return (1 - value) * this.ph;\n },\n revertAxis(name, v) {\n if (name == 'x')\n return v / this.pw * (this.pad.fX2 - this.pad.fX1) + this.pad.fX1;\n if (name == 'y')\n return (1 - v / this.ph) * (this.pad.fY2 - this.pad.fY1) + this.pad.fY1;\n return v;\n },\n getGrFuncs() { return this; }\n }\n\n return pmain.pad ? pmain : null;\n }\n\n /** @summary append exclusion area to created path */\n appendExclusion(is_curve, path, drawbins, excl_width) {\n let extrabins = [];\n for (let n = drawbins.length-1; n >= 0; --n) {\n let bin = drawbins[n],\n dlen = Math.sqrt(bin.dgrx**2 + bin.dgry**2);\n // shift point\n bin.grx += excl_width*bin.dgry/dlen;\n bin.gry -= excl_width*bin.dgrx/dlen;\n extrabins.push(bin);\n }\n\n let path2 = buildSvgPath(is_curve ? 'Lbezier' : 'Lline', extrabins);\n\n this.draw_g.append('svg:path')\n .attr('d', path.path + path2.path + 'Z')\n .call(this.fillatt.func)\n .style('opacity', 0.75);\n }\n\n /** @summary draw TGraph bins with specified options\n * @desc Can be called several times */\n drawBins(funcs, options, draw_g, w, h, lineatt, fillatt, main_block) {\n let graph = this.getObject(),\n excl_width = 0, drawbins = null;\n\n if (main_block && lineatt.excl_side) {\n excl_width = lineatt.excl_width;\n if ((lineatt.width > 0) && !options.Line && !options.Curve) options.Line = 1;\n }\n\n if (options.EF) {\n drawbins = this.optimizeBins((options.EF > 1) ? 20000 : 0);\n\n // build lower part\n for (let n = 0; n < drawbins.length; ++n) {\n let bin = drawbins[n];\n bin.grx = funcs.grx(bin.x);\n bin.gry = funcs.gry(bin.y - bin.eylow);\n }\n\n let path1 = buildSvgPath((options.EF > 1) ? 'bezier' : 'line', drawbins),\n bins2 = [];\n\n for (let n = drawbins.length-1; n >= 0; --n) {\n let bin = drawbins[n];\n bin.gry = funcs.gry(bin.y + bin.eyhigh);\n bins2.push(bin);\n }\n\n // build upper part (in reverse direction)\n let path2 = buildSvgPath((options.EF > 1) ? 'Lbezier' : 'Lline', bins2);\n\n draw_g.append('svg:path')\n .attr('d', path1.path + path2.path + 'Z')\n .call(fillatt.func);\n if (main_block)\n this.draw_kind = 'lines';\n }\n\n if (options.Line || options.Fill) {\n\n let close_symbol = '';\n if (graph._typename == clTCutG) options.Fill = 1;\n\n if (options.Fill) {\n close_symbol = 'Z'; // always close area if we want to fill it\n excl_width = 0;\n }\n\n if (!drawbins) drawbins = this.optimizeBins(0);\n\n for (let n = 0; n < drawbins.length; ++n) {\n let bin = drawbins[n];\n bin.grx = funcs.grx(bin.x);\n bin.gry = funcs.gry(bin.y);\n }\n\n let kind = 'line'; // simple line\n if (excl_width) kind += 'calc'; // we need to calculated deltas to build exclusion points\n\n let path = buildSvgPath(kind, drawbins);\n\n if (excl_width)\n this.appendExclusion(false, path, drawbins, excl_width);\n\n let elem = draw_g.append('svg:path').attr('d', path.path + close_symbol);\n if (options.Line)\n elem.call(lineatt.func);\n\n if (options.Fill)\n elem.call(fillatt.func);\n else\n elem.style('fill', 'none');\n\n if (main_block)\n this.draw_kind = 'lines';\n }\n\n if (options.Curve) {\n let curvebins = drawbins;\n if ((this.draw_kind != 'lines') || !curvebins || ((options.Curve == 1) && (curvebins.length > 20000))) {\n curvebins = this.optimizeBins((options.Curve == 1) ? 20000 : 0);\n for (let n = 0; n < curvebins.length; ++n) {\n let bin = curvebins[n];\n bin.grx = funcs.grx(bin.x);\n bin.gry = funcs.gry(bin.y);\n }\n }\n\n let kind = 'bezier';\n if (excl_width) kind += 'calc'; // we need to calculated deltas to build exclusion points\n\n let path = buildSvgPath(kind, curvebins);\n\n if (excl_width)\n this.appendExclusion(true, path, curvebins, excl_width);\n\n draw_g.append('svg:path')\n .attr('d', path.path)\n .call(lineatt.func)\n .style('fill', 'none');\n if (main_block)\n this.draw_kind = 'lines'; // handled same way as lines\n }\n\n let nodes = null;\n\n if (options.Errors || options.Rect || options.Bar) {\n\n drawbins = this.optimizeBins(5000, (pnt,i) => {\n\n let grx = funcs.grx(pnt.x);\n\n // when drawing bars, take all points\n if (!options.Bar && ((grx < 0) || (grx > w))) return true;\n\n let gry = funcs.gry(pnt.y);\n\n if (!options.Bar && !options.OutRange && ((gry < 0) || (gry > h))) return true;\n\n pnt.grx1 = Math.round(grx);\n pnt.gry1 = Math.round(gry);\n\n if (this.has_errors) {\n pnt.grx0 = Math.round(funcs.grx(pnt.x - options.ScaleErrX*pnt.exlow) - grx);\n pnt.grx2 = Math.round(funcs.grx(pnt.x + options.ScaleErrX*pnt.exhigh) - grx);\n pnt.gry0 = Math.round(funcs.gry(pnt.y - pnt.eylow) - gry);\n pnt.gry2 = Math.round(funcs.gry(pnt.y + pnt.eyhigh) - gry);\n\n if (this.is_bent) {\n pnt.grdx0 = Math.round(funcs.gry(pnt.y + graph.fEXlowd[i]) - gry);\n pnt.grdx2 = Math.round(funcs.gry(pnt.y + graph.fEXhighd[i]) - gry);\n pnt.grdy0 = Math.round(funcs.grx(pnt.x + graph.fEYlowd[i]) - grx);\n pnt.grdy2 = Math.round(funcs.grx(pnt.x + graph.fEYhighd[i]) - grx);\n } else {\n pnt.grdx0 = pnt.grdx2 = pnt.grdy0 = pnt.grdy2 = 0;\n }\n }\n\n return false;\n });\n\n if (main_block)\n this.draw_kind = 'nodes';\n\n nodes = draw_g.selectAll('.grpoint')\n .data(drawbins)\n .enter()\n .append('svg:g')\n .attr('class', 'grpoint')\n .attr('transform', d => `translate(${d.grx1},${d.gry1})`);\n }\n\n if (options.Bar) {\n // calculate bar width\n for (let i = 1; i < drawbins.length-1; ++i)\n drawbins[i].width = Math.max(2, (drawbins[i+1].grx1 - drawbins[i-1].grx1) / 2 - 2);\n\n // first and last bins\n switch (drawbins.length) {\n case 0: break;\n case 1: drawbins[0].width = w/4; break; // pathologic case of single bin\n case 2: drawbins[0].width = drawbins[1].width = (drawbins[1].grx1-drawbins[0].grx1)/2; break;\n default:\n drawbins[0].width = drawbins[1].width;\n drawbins[drawbins.length-1].width = drawbins[drawbins.length-2].width;\n }\n\n let yy0 = Math.round(funcs.gry(0)), usefill = fillatt;\n\n if (main_block) {\n let fp = this.getFramePainter(),\n fpcol = fp?.fillatt && !fp?.fillatt.empty() ? fp.fillatt.getFillColor() : -1;\n if (fpcol === fillatt.getFillColor())\n usefill = new TAttFillHandler({ color: fpcol == 'white' ? 1 : 0, pattern: 1001 });\n }\n\n nodes.append('svg:path')\n .attr('d', d => {\n d.bar = true; // element drawn as bar\n let dx = Math.round(-d.width/2),\n dw = Math.round(d.width),\n dy = (options.Bar !== 1) ? 0 : ((d.gry1 > yy0) ? yy0-d.gry1 : 0),\n dh = (options.Bar !== 1) ? (h > d.gry1 ? h - d.gry1 : 0) : Math.abs(yy0 - d.gry1);\n return `M${dx},${dy}h${dw}v${dh}h${-dw}z`;\n })\n .call(usefill.func);\n }\n\n if (options.Rect) {\n nodes.filter(d => (d.exlow > 0) && (d.exhigh > 0) && (d.eylow > 0) && (d.eyhigh > 0))\n .append('svg:path')\n .attr('d', d => {\n d.rect = true;\n return `M${d.grx0},${d.gry0}H${d.grx2}V${d.gry2}H${d.grx0}Z`;\n })\n .call(fillatt.func)\n .call(options.Rect === 2 ? lineatt.func : () => {});\n }\n\n this.error_size = 0;\n\n if (options.Errors) {\n // to show end of error markers, use line width attribute\n let lw = lineatt.width + gStyle.fEndErrorSize, bb = 0,\n vv = options.Ends ? `m0,${lw}v${-2*lw}` : '',\n hh = options.Ends ? `m${lw},0h${-2*lw}` : '',\n vleft = vv, vright = vv, htop = hh, hbottom = hh;\n\n const mainLine = (dx,dy) => {\n if (!options.MainError) return `M${dx},${dy}`;\n let res = 'M0,0';\n if (dx) return res + (dy ? `L${dx},${dy}` : `H${dx}`);\n return dy ? res + `V${dy}` : res;\n };\n\n switch (options.Ends) {\n case 2: // option []\n bb = Math.max(lineatt.width+1, Math.round(lw*0.66));\n vleft = `m${bb},${lw}h${-bb}v${-2*lw}h${bb}`;\n vright = `m${-bb},${lw}h${bb}v${-2*lw}h${-bb}`;\n htop = `m${-lw},${bb}v${-bb}h${2*lw}v${bb}`;\n hbottom = `m${-lw},${-bb}v${bb}h${2*lw}v${-bb}`;\n break;\n case 3: // option |>\n lw = Math.max(lw, Math.round(graph.fMarkerSize*8*0.66));\n bb = Math.max(lineatt.width+1, Math.round(lw*0.66));\n vleft = `l${bb},${lw}v${-2*lw}l${-bb},${lw}`;\n vright = `l${-bb},${lw}v${-2*lw}l${bb},${lw}`;\n htop = `l${-lw},${bb}h${2*lw}l${-lw},${-bb}`;\n hbottom = `l${-lw},${-bb}h${2*lw}l${-lw},${bb}`;\n break;\n case 4: // option >\n lw = Math.max(lw, Math.round(graph.fMarkerSize*8*0.66));\n bb = Math.max(lineatt.width+1, Math.round(lw*0.66));\n vleft = `l${bb},${lw}m0,${-2*lw}l${-bb},${lw}`;\n vright = `l${-bb},${lw}m0,${-2*lw}l${bb},${lw}`;\n htop = `l${-lw},${bb}m${2*lw},0l${-lw},${-bb}`;\n hbottom = `l${-lw},${-bb}m${2*lw},0l${-lw},${bb}`;\n break;\n }\n\n this.error_size = lw;\n\n lw = Math.floor((lineatt.width-1)/2); // one should take into account half of end-cup line width\n\n let visible = nodes.filter(d => (d.exlow > 0) || (d.exhigh > 0) || (d.eylow > 0) || (d.eyhigh > 0));\n if (options.skip_errors_x0 || options.skip_errors_y0)\n visible = visible.filter(d => ((d.x != 0) || !options.skip_errors_x0) && ((d.y != 0) || !options.skip_errors_y0));\n\n if (!isBatchMode() && settings.Tooltip && main_block)\n visible.append('svg:path')\n .style('fill', 'none')\n .style('pointer-events', 'visibleFill')\n .attr('d', d => `M${d.grx0},${d.gry0}h${d.grx2-d.grx0}v${d.gry2-d.gry0}h${d.grx0-d.grx2}z`);\n\n visible.append('svg:path')\n .call(lineatt.func)\n .style('fill', 'none')\n .attr('d', d => {\n d.error = true;\n return ((d.exlow > 0) ? mainLine(d.grx0+lw, d.grdx0) + vleft : '') +\n ((d.exhigh > 0) ? mainLine(d.grx2-lw, d.grdx2) + vright : '') +\n ((d.eylow > 0) ? mainLine(d.grdy0, d.gry0-lw) + hbottom : '') +\n ((d.eyhigh > 0) ? mainLine(d.grdy2, d.gry2+lw) + htop : '');\n });\n }\n\n if (options.Mark) {\n // for tooltips use markers only if nodes were not created\n this.createAttMarker({ attr: graph, style: options.Mark - 100 });\n\n this.marker_size = this.markeratt.getFullSize();\n\n this.markeratt.resetPos();\n\n let path = '', pnt, grx, gry,\n want_tooltip = !isBatchMode() && settings.Tooltip && (!this.markeratt.fill || (this.marker_size < 7)) && !nodes && main_block,\n hints_marker = '', hsz = Math.max(5, Math.round(this.marker_size*0.7)),\n maxnummarker = 1000000 / (this.markeratt.getMarkerLength() + 7), step = 1; // let produce SVG at maximum 1MB\n\n if (!drawbins)\n drawbins = this.optimizeBins(maxnummarker);\n else if (this.canOptimize() && (drawbins.length > 1.5*maxnummarker))\n step = Math.min(2, Math.round(drawbins.length/maxnummarker));\n\n for (let n = 0; n < drawbins.length; n += step) {\n pnt = drawbins[n];\n grx = funcs.grx(pnt.x);\n if ((grx > -this.marker_size) && (grx < w + this.marker_size)) {\n gry = funcs.gry(pnt.y);\n if ((gry > -this.marker_size) && (gry < h + this.marker_size)) {\n path += this.markeratt.create(grx, gry);\n if (want_tooltip) hints_marker += `M${grx-hsz},${gry-hsz}h${2*hsz}v${2*hsz}h${-2*hsz}z`;\n }\n }\n }\n\n if (path) {\n draw_g.append('svg:path')\n .attr('d', path)\n .call(this.markeratt.func);\n if ((nodes === null) && (this.draw_kind == 'none') && main_block)\n this.draw_kind = (options.Mark == 101) ? 'path' : 'mark';\n }\n if (want_tooltip && hints_marker)\n draw_g.append('svg:path')\n .attr('d', hints_marker)\n .style('fill', 'none')\n .style('pointer-events', 'visibleFill');\n }\n }\n\n /** @summary append TGraphQQ part */\n appendQQ(funcs, graph) {\n let xqmin = Math.max(funcs.scale_xmin, graph.fXq1),\n xqmax = Math.min(funcs.scale_xmax, graph.fXq2),\n yqmin = Math.max(funcs.scale_ymin, graph.fYq1),\n yqmax = Math.min(funcs.scale_ymax, graph.fYq2),\n path2 = '',\n makeLine = (x1,y1,x2,y2) => `M${funcs.grx(x1)},${funcs.gry(y1)}L${funcs.grx(x2)},${funcs.gry(y2)}`,\n yxmin = (graph.fYq2 - graph.fYq1)*(funcs.scale_xmin-graph.fXq1)/(graph.fXq2-graph.fXq1) + graph.fYq1,\n yxmax = (graph.fYq2-graph.fYq1)*(funcs.scale_xmax-graph.fXq1)/(graph.fXq2-graph.fXq1) + graph.fYq1;\n\n if (yxmin < funcs.scale_ymin) {\n let xymin = (graph.fXq2 - graph.fXq1)*(funcs.scale_ymin-graph.fYq1)/(graph.fYq2-graph.fYq1) + graph.fXq1;\n path2 = makeLine(xymin, funcs.scale_ymin, xqmin, yqmin);\n } else {\n path2 = makeLine(funcs.scale_xmin, yxmin, xqmin, yqmin);\n }\n\n if (yxmax > funcs.scale_ymax) {\n let xymax = (graph.fXq2-graph.fXq1)*(funcs.scale_ymax-graph.fYq1)/(graph.fYq2-graph.fYq1) + graph.fXq1;\n path2 += makeLine(xqmax, yqmax, xymax, funcs.scale_ymax);\n } else {\n path2 += makeLine(xqmax, yqmax, funcs.scale_xmax, yxmax);\n }\n\n let latt1 = new TAttLineHandler({ style: 1, width: 1, color: 'black' }),\n latt2 = new TAttLineHandler({ style: 2, width: 1, color: 'black' });\n\n this.draw_g.append('path')\n .attr('d', makeLine(xqmin,yqmin,xqmax,yqmax))\n .call(latt1.func)\n .style('fill', 'none');\n\n this.draw_g.append('path')\n .attr('d', path2)\n .call(latt2.func)\n .style('fill', 'none');\n }\n\n drawBins3D(/*fp, graph*/) {\n console.log('Load ./hist/TGraphPainter.mjs to draw graph in 3D');\n }\n\n /** @summary draw TGraph */\n drawGraph() {\n\n let pmain = this.get_main(),\n graph = this.getObject();\n if (!pmain) return;\n\n // special mode for TMultiGraph 3d drawing\n if (this.options.pos3d)\n return this.drawBins3D(pmain, graph);\n\n let is_gme = !!this.get_gme(),\n funcs = pmain.getGrFuncs(this.options.second_x, this.options.second_y),\n w = pmain.getFrameWidth(),\n h = pmain.getFrameHeight();\n\n this.createG(!pmain.pad_layer);\n\n if (this.options._pfc || this.options._plc || this.options._pmc) {\n let mp = this.getMainPainter();\n if (isFunc(mp?.createAutoColor)) {\n let icolor = mp.createAutoColor();\n if (this.options._pfc) { graph.fFillColor = icolor; delete this.fillatt; }\n if (this.options._plc) { graph.fLineColor = icolor; delete this.lineatt; }\n if (this.options._pmc) { graph.fMarkerColor = icolor; delete this.markeratt; }\n this.options._pfc = this.options._plc = this.options._pmc = false;\n }\n }\n\n this.createAttLine({ attr: graph, can_excl: true });\n this.createAttFill({ attr: graph });\n\n this.fillatt.used = false; // mark used only when really used\n\n this.draw_kind = 'none'; // indicate if special svg:g were created for each bin\n this.marker_size = 0; // indicate if markers are drawn\n let draw_g = is_gme ? this.draw_g.append('svg:g') : this.draw_g;\n\n this.drawBins(funcs, this.options, draw_g, w, h, this.lineatt, this.fillatt, true);\n\n if (graph._typename == 'TGraphQQ')\n this.appendQQ(funcs, graph);\n\n if (is_gme) {\n for (let k = 0; k < graph.fNYErrors; ++k) {\n let lineatt = this.lineatt, fillatt = this.fillatt;\n if (this.options.individual_styles) {\n lineatt = new TAttLineHandler({ attr: graph.fAttLine[k], std: false });\n fillatt = new TAttFillHandler({ attr: graph.fAttFill[k], std: false, svg: this.getCanvSvg() });\n }\n let sub_g = this.draw_g.append('svg:g'),\n options = k < this.options.blocks.length ? this.options.blocks[k] : this.options;\n this.extractGmeErrors(k);\n this.drawBins(funcs, options, sub_g, w, h, lineatt, fillatt);\n }\n this.extractGmeErrors(0); // ensure that first block kept at the end\n }\n\n if (!isBatchMode())\n addMoveHandler(this, this.testEditable());\n }\n\n /** @summary Provide tooltip at specified point */\n extractTooltip(pnt) {\n if (!pnt) return null;\n\n if ((this.draw_kind == 'lines') || (this.draw_kind == 'path') || (this.draw_kind == 'mark'))\n return this.extractTooltipForPath(pnt);\n\n if (this.draw_kind != 'nodes') return null;\n\n let pmain = this.get_main(),\n height = pmain.getFrameHeight(),\n esz = this.error_size,\n isbar1 = (this.options.Bar === 1),\n funcs = isbar1 ? pmain.getGrFuncs(this.options.second_x, this.options.second_y) : null,\n findbin = null, best_dist2 = 1e10, best = null,\n msize = this.marker_size ? Math.round(this.marker_size/2 + 1.5) : 0;\n\n this.draw_g.selectAll('.grpoint').each(function() {\n let d = d3_select(this).datum();\n if (d === undefined) return;\n let dist2 = (pnt.x - d.grx1) ** 2;\n if (pnt.nproc === 1) dist2 += (pnt.y - d.gry1) ** 2;\n if (dist2 >= best_dist2) return;\n\n let rect;\n\n if (d.error || d.rect || d.marker) {\n rect = { x1: Math.min(-esz, d.grx0, -msize),\n x2: Math.max(esz, d.grx2, msize),\n y1: Math.min(-esz, d.gry2, -msize),\n y2: Math.max(esz, d.gry0, msize) };\n } else if (d.bar) {\n rect = { x1: -d.width/2, x2: d.width/2, y1: 0, y2: height - d.gry1 };\n\n if (isbar1) {\n let yy0 = funcs.gry(0);\n rect.y1 = (d.gry1 > yy0) ? yy0-d.gry1 : 0;\n rect.y2 = (d.gry1 > yy0) ? 0 : yy0-d.gry1;\n }\n } else {\n rect = { x1: -5, x2: 5, y1: -5, y2: 5 };\n }\n let matchx = (pnt.x >= d.grx1 + rect.x1) && (pnt.x <= d.grx1 + rect.x2),\n matchy = (pnt.y >= d.gry1 + rect.y1) && (pnt.y <= d.gry1 + rect.y2);\n\n if (matchx && (matchy || (pnt.nproc > 1))) {\n best_dist2 = dist2;\n findbin = this;\n best = rect;\n best.exact = /* matchx && */ matchy;\n }\n });\n\n if (findbin === null) return null;\n\n let d = d3_select(findbin).datum(),\n gr = this.getObject(),\n res = { name: gr.fName, title: gr.fTitle,\n x: d.grx1, y: d.gry1,\n color1: this.lineatt.color,\n lines: this.getTooltips(d),\n rect: best, d3bin: findbin };\n\n res.user_info = { obj: gr, name: gr.fName, bin: d.indx, cont: d.y, grx: d.grx1, gry: d.gry1 };\n\n if (this.fillatt && this.fillatt.used && !this.fillatt.empty())\n res.color2 = this.fillatt.getFillColor();\n\n if (best.exact) res.exact = true;\n res.menu = res.exact; // activate menu only when exactly locate bin\n res.menu_dist = 3; // distance always fixed\n res.bin = d;\n res.binindx = d.indx;\n\n return res;\n }\n\n /** @summary Show tooltip */\n showTooltip(hint) {\n\n if (!hint) {\n if (this.draw_g) this.draw_g.select('.tooltip_bin').remove();\n return;\n }\n\n if (hint.usepath) return this.showTooltipForPath(hint);\n\n let d = d3_select(hint.d3bin).datum(),\n ttrect = this.draw_g.select('.tooltip_bin');\n\n if (ttrect.empty())\n ttrect = this.draw_g.append('svg:rect')\n .attr('class', 'tooltip_bin h1bin')\n .style('pointer-events', 'none');\n\n hint.changed = ttrect.property('current_bin') !== hint.d3bin;\n\n if (hint.changed)\n ttrect.attr('x', d.grx1 + hint.rect.x1)\n .attr('width', hint.rect.x2 - hint.rect.x1)\n .attr('y', d.gry1 + hint.rect.y1)\n .attr('height', hint.rect.y2 - hint.rect.y1)\n .style('opacity', '0.3')\n .property('current_bin', hint.d3bin);\n }\n\n /** @summary Process tooltip event */\n processTooltipEvent(pnt) {\n let hint = this.extractTooltip(pnt);\n if (!pnt || !pnt.disabled) this.showTooltip(hint);\n return hint;\n }\n\n /** @summary Find best bin index for specified point */\n findBestBin(pnt) {\n if (!this.bins) return null;\n\n let islines = (this.draw_kind == 'lines'),\n bestindx = -1,\n bestbin = null,\n bestdist = 1e10,\n funcs = this.get_main().getGrFuncs(this.options.second_x, this.options.second_y),\n dist, grx, gry, n, bin;\n\n for (n = 0; n < this.bins.length; ++n) {\n bin = this.bins[n];\n\n grx = funcs.grx(bin.x);\n gry = funcs.gry(bin.y);\n\n dist = (pnt.x-grx)**2 + (pnt.y-gry)**2;\n\n if (dist < bestdist) {\n bestdist = dist;\n bestbin = bin;\n bestindx = n;\n }\n }\n\n // check last point\n if ((bestdist > 100) && islines) bestbin = null;\n\n let radius = Math.max(this.lineatt.width + 3, 4);\n\n if (this.marker_size > 0) radius = Math.max(this.marker_size, radius);\n\n if (bestbin)\n bestdist = Math.sqrt((pnt.x-funcs.grx(bestbin.x))**2 + (pnt.y-funcs.gry(bestbin.y))**2);\n\n if (!islines && (bestdist > radius)) bestbin = null;\n\n if (!bestbin) bestindx = -1;\n\n let res = { bin: bestbin, indx: bestindx, dist: bestdist, radius: Math.round(radius) };\n\n if (!bestbin && islines) {\n\n bestdist = 1e10;\n\n const IsInside = (x, x1, x2) => ((x1 >= x) && (x >= x2)) || ((x1 <= x) && (x <= x2));\n\n let bin0 = this.bins[0], grx0 = funcs.grx(bin0.x), gry0, posy = 0;\n for (n = 1; n < this.bins.length; ++n) {\n bin = this.bins[n];\n grx = funcs.grx(bin.x);\n\n if (IsInside(pnt.x, grx0, grx)) {\n // if inside interval, check Y distance\n gry0 = funcs.gry(bin0.y);\n gry = funcs.gry(bin.y);\n\n if (Math.abs(grx - grx0) < 1) {\n // very close x - check only y\n posy = pnt.y;\n dist = IsInside(pnt.y, gry0, gry) ? 0 : Math.min(Math.abs(pnt.y-gry0), Math.abs(pnt.y-gry));\n } else {\n posy = gry0 + (pnt.x - grx0) / (grx - grx0) * (gry - gry0);\n dist = Math.abs(posy - pnt.y);\n }\n\n if (dist < bestdist) {\n bestdist = dist;\n res.linex = pnt.x;\n res.liney = posy;\n }\n }\n\n bin0 = bin;\n grx0 = grx;\n }\n\n if (bestdist < radius*0.5) {\n res.linedist = bestdist;\n res.closeline = true;\n }\n }\n\n return res;\n }\n\n /** @summary Check editable flag for TGraph\n * @desc if arg specified changes or toggles editable flag */\n testEditable(arg) {\n let obj = this.getObject();\n if (!obj) return false;\n if ((arg == 'toggle') || ((arg !== undefined) && (!arg != obj.TestBit(kNotEditable))))\n obj.InvertBit(kNotEditable);\n return !obj.TestBit(kNotEditable);\n }\n\n /** @summary Provide tooltip at specified point for path-based drawing */\n extractTooltipForPath(pnt) {\n\n if (this.bins === null) return null;\n\n let best = this.findBestBin(pnt);\n\n if (!best || (!best.bin && !best.closeline)) return null;\n\n let islines = (this.draw_kind == 'lines'),\n ismark = (this.draw_kind == 'mark'),\n pmain = this.get_main(),\n funcs = pmain.getGrFuncs(this.options.second_x, this.options.second_y),\n gr = this.getObject(),\n res = { name: gr.fName, title: gr.fTitle,\n x: best.bin ? funcs.grx(best.bin.x) : best.linex,\n y: best.bin ? funcs.gry(best.bin.y) : best.liney,\n color1: this.lineatt.color,\n lines: this.getTooltips(best.bin),\n usepath: true };\n\n res.user_info = { obj: gr, name: gr.fName, bin: 0, cont: 0, grx: res.x, gry: res.y };\n\n res.ismark = ismark;\n res.islines = islines;\n\n if (best.closeline) {\n res.menu = res.exact = true;\n res.menu_dist = best.linedist;\n } else if (best.bin) {\n if (this.options.EF && islines) {\n res.gry1 = funcs.gry(best.bin.y - best.bin.eylow);\n res.gry2 = funcs.gry(best.bin.y + best.bin.eyhigh);\n } else {\n res.gry1 = res.gry2 = funcs.gry(best.bin.y);\n }\n\n res.binindx = best.indx;\n res.bin = best.bin;\n res.radius = best.radius;\n res.user_info.bin = best.indx;\n res.user_info.cont = best.bin.y;\n\n res.exact = (Math.abs(pnt.x - res.x) <= best.radius) &&\n ((Math.abs(pnt.y - res.gry1) <= best.radius) || (Math.abs(pnt.y - res.gry2) <= best.radius));\n\n res.menu = res.exact;\n res.menu_dist = Math.sqrt((pnt.x-res.x)**2 + Math.min(Math.abs(pnt.y-res.gry1), Math.abs(pnt.y-res.gry2))**2);\n }\n\n if (this.fillatt && this.fillatt.used && !this.fillatt.empty())\n res.color2 = this.fillatt.getFillColor();\n\n if (!islines) {\n res.color1 = this.getColor(gr.fMarkerColor);\n if (!res.color2) res.color2 = res.color1;\n }\n\n return res;\n }\n\n /** @summary Show tooltip for path drawing */\n showTooltipForPath(hint) {\n\n let ttbin = this.draw_g.select('.tooltip_bin');\n\n if (!hint || !hint.bin) {\n ttbin.remove();\n return;\n }\n\n if (ttbin.empty())\n ttbin = this.draw_g.append('svg:g').attr('class', 'tooltip_bin');\n\n hint.changed = ttbin.property('current_bin') !== hint.bin;\n\n if (hint.changed) {\n ttbin.selectAll('*').remove(); // first delete all children\n ttbin.property('current_bin', hint.bin);\n\n if (hint.ismark) {\n ttbin.append('svg:rect')\n .attr('class','h1bin')\n .style('pointer-events','none')\n .style('opacity', '0.3')\n .attr('x', Math.round(hint.x - hint.radius))\n .attr('y', Math.round(hint.y - hint.radius))\n .attr('width', 2*hint.radius)\n .attr('height', 2*hint.radius);\n } else {\n ttbin.append('svg:circle').attr('cy', Math.round(hint.gry1));\n if (Math.abs(hint.gry1-hint.gry2) > 1)\n ttbin.append('svg:circle').attr('cy', Math.round(hint.gry2));\n\n let elem = ttbin.selectAll('circle')\n .attr('r', hint.radius)\n .attr('cx', Math.round(hint.x));\n\n if (!hint.islines) {\n elem.style('stroke', hint.color1 == 'black' ? 'green' : 'black').style('fill','none');\n } else {\n if (this.options.Line || this.options.Curve)\n elem.call(this.lineatt.func);\n else\n elem.style('stroke','black');\n if (this.options.Fill)\n elem.call(this.fillatt.func);\n else\n elem.style('fill','none');\n }\n }\n }\n }\n\n /** @summary Check if graph moving is enabled */\n moveEnabled() {\n return this.testEditable();\n }\n\n /** @summary Start moving of TGraph */\n moveStart(x,y) {\n this.pos_dx = this.pos_dy = 0;\n this.move_funcs = this.get_main().getGrFuncs(this.options.second_x, this.options.second_y);\n let hint = this.extractTooltip({x, y});\n if (hint && hint.exact && (hint.binindx !== undefined)) {\n this.move_binindx = hint.binindx;\n this.move_bin = hint.bin;\n this.move_x0 = this.move_funcs.grx(this.move_bin.x);\n this.move_y0 = this.move_funcs.gry(this.move_bin.y);\n } else {\n delete this.move_binindx;\n }\n }\n\n /** @summary Perform moving */\n moveDrag(dx,dy) {\n this.pos_dx += dx;\n this.pos_dy += dy;\n\n if (this.move_binindx === undefined) {\n this.draw_g.attr('transform', `translate(${this.pos_dx},${this.pos_dy})`);\n } else if (this.move_funcs && this.move_bin) {\n this.move_bin.x = this.move_funcs.revertAxis('x', this.move_x0 + this.pos_dx);\n this.move_bin.y = this.move_funcs.revertAxis('y', this.move_y0 + this.pos_dy);\n this.drawGraph();\n }\n }\n\n /** @summary Complete moving */\n moveEnd(not_changed) {\n let exec = '';\n\n if (this.move_binindx === undefined) {\n this.draw_g.attr('transform', null);\n\n if (this.move_funcs && this.bins && !not_changed) {\n for (let k = 0; k < this.bins.length; ++k) {\n let bin = this.bins[k];\n bin.x = this.move_funcs.revertAxis('x', this.move_funcs.grx(bin.x) + this.pos_dx);\n bin.y = this.move_funcs.revertAxis('y', this.move_funcs.gry(bin.y) + this.pos_dy);\n exec += `SetPoint(${bin.indx},${bin.x},${bin.y});;`;\n if ((bin.indx == 0) && this.matchObjectType(clTCutG))\n exec += `SetPoint(${this.getObject().fNpoints-1},${bin.x},${bin.y});;`;\n }\n this.drawGraph();\n }\n } else {\n exec = `SetPoint(${this.move_bin.indx},${this.move_bin.x},${this.move_bin.y});;`;\n if ((this.move_bin.indx == 0) && this.matchObjectType(clTCutG))\n exec += `SetPoint(${this.getObject().fNpoints-1},${this.move_bin.x},${this.move_bin.y});;`;\n delete this.move_binindx;\n }\n\n delete this.move_funcs;\n\n if (exec && !not_changed)\n this.submitCanvExec(exec);\n }\n\n /** @summary Fill context menu */\n fillContextMenu(menu) {\n super.fillContextMenu(menu);\n\n if (!this.snapid)\n menu.addchk(this.testEditable(), 'Editable', () => { this.testEditable('toggle'); this.drawGraph(); });\n\n return menu.size() > 0;\n }\n\n /** @summary Execute menu command\n * @private */\n executeMenuCommand(method, args) {\n if (super.executeMenuCommand(method,args)) return true;\n\n let canp = this.getCanvPainter(), pmain = this.get_main();\n\n if ((method.fName == 'RemovePoint') || (method.fName == 'InsertPoint')) {\n if (!canp || canp._readonly) return true; // ignore function\n\n let hint = this.extractTooltip(pnt);\n\n if (method.fName == 'InsertPoint') {\n let pnt = isFunc(pmain.getLastEventPos) ? pmain.getLastEventPos() : null;\n if (pnt) {\n let funcs = pmain.getGrFuncs(this.options.second_x, this.options.second_y),\n userx = funcs.revertAxis('x', pnt.x) ?? 0,\n usery = funcs.revertAxis('y', pnt.y) ?? 0;\n this.submitCanvExec(`AddPoint(${userx.toFixed(3)}, ${usery.toFixed(3)})`, this.args_menu_id);\n }\n } else if (this.args_menu_id && (hint?.binindx !== undefined)) {\n this.submitCanvExec(`RemovePoint(${hint.binindx})`, this.args_menu_id);\n }\n\n return true; // call is processed\n }\n\n return false;\n }\n\n /** @summary Update TGraph object */\n updateObject(obj, opt) {\n if (!this.matchObjectType(obj)) return false;\n\n if (opt && (opt != this.options.original))\n this.decodeOptions(opt);\n\n let graph = this.getObject();\n // TODO: make real update of TGraph object content\n graph.fBits = obj.fBits;\n graph.fTitle = obj.fTitle;\n graph.fX = obj.fX;\n graph.fY = obj.fY;\n graph.fNpoints = obj.fNpoints;\n graph.fMinimum = obj.fMinimum;\n graph.fMaximum = obj.fMaximum;\n this.createBins();\n\n delete this.$redraw_hist;\n\n // if our own histogram was used as axis drawing, we need update histogram as well\n if (this.axes_draw) {\n let histo = this.createHistogram();\n histo.fTitle = graph.fTitle; // copy title\n\n let hist_painter = this.getMainPainter();\n if (hist_painter?.$secondary) {\n hist_painter.updateObject(histo, this.options.Axis);\n this.$redraw_hist = true;\n }\n }\n\n return true;\n }\n\n /** @summary Checks if it makes sense to zoom inside specified axis range\n * @desc allow to zoom TGraph only when at least one point in the range */\n canZoomInside(axis,min,max) {\n let gr = this.getObject();\n if (!gr || (axis !== (this.options.pos3d ? 'y' : 'x'))) return false;\n\n for (let n = 0; n < gr.fNpoints; ++n)\n if ((min < gr.fX[n]) && (gr.fX[n] < max)) return true;\n\n return false;\n }\n\n /** @summary Process click on graph-defined buttons */\n clickButton(funcname) {\n if (funcname !== 'ToggleZoom') return false;\n\n let main = this.getFramePainter();\n if (!main) return false;\n\n if ((this.xmin === this.xmax) && (this.ymin === this.ymax)) return false;\n\n main.zoom(this.xmin, this.xmax, this.ymin, this.ymax);\n\n return true;\n }\n\n /** @summary Find TF1/TF2 in TGraph list of functions */\n findFunc() {\n let gr = this.getObject();\n if (gr?.fFunctions?.arr)\n return gr?.fFunctions?.arr.find(func => (func._typename == clTF1) || (func._typename == clTF2));\n return null;\n }\n\n /** @summary Find stat box in TGraph list of functions */\n findStat() {\n let gr = this.getObject();\n if (gr?.fFunctions?.arr)\n for (let i = 0; i < gr.fFunctions.arr.length; ++i) {\n let func = gr.fFunctions.arr[i];\n if ((func._typename == clTPaveStats) && (func.fName == 'stats')) return func;\n }\n return null;\n }\n\n /** @summary Create stat box */\n createStat() {\n let func = this.findFunc();\n if (!func) return null;\n\n let stats = this.findStat();\n if (stats) return stats;\n\n // do not create stats box when drawing canvas\n if (this.getCanvPainter()?.normal_canvas || this.options.PadStats) return null;\n\n this.create_stats = true;\n\n const st = gStyle;\n\n stats = create(clTPaveStats);\n Object.assign(stats, { fName : 'stats', fOptStat: 0, fOptFit: st.fOptFit || 111, fBorderSize: 1 });\n\n stats.fX1NDC = st.fStatX - st.fStatW;\n stats.fY1NDC = st.fStatY - st.fStatH;\n stats.fX2NDC = st.fStatX;\n stats.fY2NDC = st.fStatY;\n\n stats.fFillColor = st.fStatColor;\n stats.fFillStyle = st.fStatStyle;\n\n stats.fTextAngle = 0;\n stats.fTextSize = st.fStatFontSize; // 9 ??\n stats.fTextAlign = 12;\n stats.fTextColor = st.fStatTextColor;\n stats.fTextFont = st.fStatFont;\n\n stats.AddText(func.fName);\n\n // while TF1 was found, one can be sure that stats is existing\n this.getObject().fFunctions.Add(stats);\n\n return stats;\n }\n\n /** @summary Fill statistic */\n fillStatistic(stat, dostat, dofit) {\n\n // cannot fill stats without func\n let func = this.findFunc();\n\n if (!func || !dofit || !this.create_stats) return false;\n\n stat.clearPave();\n\n stat.fillFunctionStat(func, dofit);\n\n return true;\n }\n\n /** @summary method draws next function from the functions list\n * @return {Promise} */\n async drawNextFunction(indx) {\n\n let graph = this.getObject();\n\n if (indx >= (graph?.fFunctions?.arr?.length || 0))\n return this;\n\n let pp = this.getPadPainter(),\n func = graph.fFunctions.arr[indx],\n opt = graph.fFunctions.opt[indx];\n\n // required for stats filling\n // TODO: use weak reference (via pad list of painters and any kind of string)\n func.$main_painter = this;\n\n return pp.drawObject(this.getDom(), func, opt).then(() => this.drawNextFunction(indx+1));\n }\n\n /** @summary Draw axis histogram\n * @private */\n async drawAxisHisto() {\n let histo = this.createHistogram();\n return TH1Painter.draw(this.getDom(), histo, this.options.Axis)\n }\n\n /** @summary Draw TGraph\n * @private */\n static async _drawGraph(painter, opt) {\n painter.decodeOptions(opt, true);\n painter.createBins();\n painter.createStat();\n if (!settings.DragGraphs && !graph.TestBit(kNotEditable))\n graph.InvertBit(kNotEditable);\n\n let promise = Promise.resolve();\n\n if ((!painter.getMainPainter() || painter.options.second_x || painter.options.second_y) && painter.options.Axis)\n promise = painter.drawAxisHisto().then(hist_painter => {\n if (hist_painter) {\n painter.axes_draw = true;\n if (!painter._own_histogram) painter.$primary = true;\n hist_painter.$secondary = 'hist';\n }\n });\n\n return promise.then(() => {\n painter.addToPadPrimitives();\n return painter.drawGraph();\n }).then(() => painter.drawNextFunction(0));\n }\n\n static async draw(dom, graph, opt) {\n return TGraphPainter._drawGraph(new TGraphPainter(dom, graph), opt);\n }\n\n} // class TGraphPainter\n\nexport { clTGraphAsymmErrors, TGraphPainter };\n"],"x_google_ignoreList":[0]} \ No newline at end of file diff --git a/docs/260.081a22df4eb6dd7f.js.map b/docs/260.081a22df4eb6dd7f.js.map deleted file mode 100644 index e7e945e1a..000000000 --- a/docs/260.081a22df4eb6dd7f.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"260.081a22df4eb6dd7f.js","mappings":"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","names":["drawText","text","this","getObject","pp","getPadPainter","onframe","v7EvalAttr","getFramePainter","clipping","p","getCoordinate","fPos","textFont","v7EvalFont","size","color","align","createG","startTextDrawing","x","y","fText","latex","finishTextDrawing","drawLine","line","p1","fP1","p2","fP2","createv7AttLine","draw_g","append","attr","call","lineatt","func","drawBox","box","createv7AttFill","fillatt","drawMarker","marker","fP","createv7AttMarker","path","markeratt","create","RPalettePainter","RObjectPainter","getHistPalette","drawable","pal","fPalette","getColor","addMethods","drawPalette","drag","palette","contour","getContour","framep","console","log","palette_x","palette_y","palette_width","palette_height","gmin","full_min","gmax","full_max","zmin","zmax","length","rect","getFrameRect","pad_width","getPadWidth","pad_height","getPadHeight","visible","vertical","width","height","changes","v7AttrChange","v7SendAttrChanges","margin","v7EvalLength","Math","round","g_btns","select","empty","selectAll","remove","style","undefined","z_handle","configureAxis","reverse","i","z0","gr","z1","col","getContourColor","r","property","d3_rgb","darker","toString","isTooltipAllowed","on","d3_select","transition","duration","toFixed","settings","unzoom","maxTickSize","promise","drawAxis","isBatchMode","then","evnt","stopPropagation","preventDefault","createMenu","menu","add","addchk","flag","v7SetAttr","redrawPad","fillAxisContextMenu","show","addDragHandler","minwidth","minheight","no_change_x","no_change_y","redraw","d","zoom_rect","zoom_rect_visible","moving_labels","last_pos","doing_zoom","sel1","sel2","moveRectSel","d3_pointer","node","processLabelsMove","min","max","sz","abs","endRectSel","window","z","invert","z2","zoom","startRectSel","setTimeout","assignHandlers","pos","item","analyzeWheelEvent","changed","setAfterDrawHandler","static","dom","opt","painter","ensureRCanvas"],"sourceRoot":"webpack:///","sources":["../node_modules/jsroot/modules/draw/v7more.mjs"],"sourcesContent":["import { addMethods, settings, isBatchMode } from '../core.mjs';\nimport { select as d3_select, rgb as d3_rgb, pointer as d3_pointer } from '../d3.mjs';\nimport { RObjectPainter } from '../base/RObjectPainter.mjs';\nimport { addDragHandler } from '../gpad/TFramePainter.mjs';\nimport { ensureRCanvas } from '../gpad/RCanvasPainter.mjs';\nimport { createMenu } from '../gui/menu.mjs';\n\n\n/** @summary draw RText object\n * @private */\nfunction drawText() {\n let text = this.getObject(),\n pp = this.getPadPainter(),\n onframe = this.v7EvalAttr('onFrame', false) ? pp.getFramePainter() : null,\n clipping = onframe ? this.v7EvalAttr('clipping', false) : false,\n p = pp.getCoordinate(text.fPos, onframe),\n textFont = this.v7EvalFont('text', { size: 12, color: 'black', align: 22 });\n\n this.createG(clipping ? 'main_layer' : (onframe ? 'upper_layer' : false));\n\n this.startTextDrawing(textFont, 'font');\n\n this.drawText({ x: p.x, y: p.y, text: text.fText, latex: 1 });\n\n return this.finishTextDrawing();\n}\n\n/** @summary draw RLine object\n * @private */\nfunction drawLine() {\n\n let line = this.getObject(),\n pp = this.getPadPainter(),\n onframe = this.v7EvalAttr('onFrame', false) ? pp.getFramePainter() : null,\n clipping = onframe ? this.v7EvalAttr('clipping', false) : false,\n p1 = pp.getCoordinate(line.fP1, onframe),\n p2 = pp.getCoordinate(line.fP2, onframe);\n\n this.createG(clipping ? 'main_layer' : (onframe ? 'upper_layer' : false));\n\n this.createv7AttLine();\n\n this.draw_g\n .append('svg:path')\n .attr('d',`M${p1.x},${p1.y}L${p2.x},${p2.y}`)\n .call(this.lineatt.func);\n}\n\n/** @summary draw RBox object\n * @private */\nfunction drawBox() {\n\n let box = this.getObject(),\n pp = this.getPadPainter(),\n onframe = this.v7EvalAttr('onFrame', false) ? pp.getFramePainter() : null,\n clipping = onframe ? this.v7EvalAttr('clipping', false) : false,\n p1 = pp.getCoordinate(box.fP1, onframe),\n p2 = pp.getCoordinate(box.fP2, onframe);\n\n this.createG(clipping ? 'main_layer' : (onframe ? 'upper_layer' : false));\n\n this.createv7AttLine('border_');\n\n this.createv7AttFill();\n\n this.draw_g\n .append('svg:path')\n .attr('d',`M${p1.x},${p1.y}H${p2.x}V${p2.y}H${p1.x}Z`)\n .call(this.lineatt.func)\n .call(this.fillatt.func);\n}\n\n/** @summary draw RMarker object\n * @private */\nfunction drawMarker() {\n let marker = this.getObject(),\n pp = this.getPadPainter(),\n onframe = this.v7EvalAttr('onFrame', false) ? pp.getFramePainter() : null,\n clipping = onframe ? this.v7EvalAttr('clipping', false) : false,\n p = pp.getCoordinate(marker.fP, onframe);\n\n this.createG(clipping ? 'main_layer' : (onframe ? 'upper_layer' : false));\n\n this.createv7AttMarker();\n\n let path = this.markeratt.create(p.x, p.y);\n\n if (path)\n this.draw_g.append('svg:path')\n .attr('d', path)\n .call(this.markeratt.func);\n}\n\n/** @summary painter for RPalette\n *\n * @private\n */\n\nclass RPalettePainter extends RObjectPainter {\n\n /** @summary get palette */\n getHistPalette() {\n let drawable = this.getObject(),\n pal = drawable ? drawable.fPalette : null;\n\n if (pal && !pal.getColor)\n addMethods(pal, 'ROOT::Experimental::RPalette');\n\n return pal;\n }\n\n /** @summary Draw palette */\n drawPalette(drag) {\n\n let palette = this.getHistPalette(),\n contour = palette.getContour(),\n framep = this.getFramePainter();\n\n if (!contour)\n return console.log('no contour - no palette');\n\n // frame painter must be there\n if (!framep)\n return console.log('no frame painter - no palette');\n\n let gmin = palette.full_min,\n gmax = palette.full_max,\n zmin = contour[0],\n zmax = contour[contour.length-1],\n rect = framep.getFrameRect(),\n pad_width = this.getPadPainter().getPadWidth(),\n pad_height = this.getPadPainter().getPadHeight(),\n visible = this.v7EvalAttr('visible', true),\n vertical = this.v7EvalAttr('vertical', true),\n palette_x, palette_y, palette_width, palette_height;\n\n if (drag) {\n palette_width = drag.width;\n palette_height = drag.height;\n\n let changes = {};\n if (vertical) {\n this.v7AttrChange(changes, 'margin', (drag.x - rect.x - rect.width) / pad_width);\n this.v7AttrChange(changes, 'width', palette_width / pad_width);\n } else {\n this.v7AttrChange(changes, 'margin', (drag.y - rect.y - rect.height) / pad_width);\n this.v7AttrChange(changes, 'width', palette_height / pad_height);\n }\n this.v7SendAttrChanges(changes, false); // do not invoke canvas update on the server\n } else {\n if (vertical) {\n let margin = this.v7EvalLength('margin', pad_width, 0.02);\n palette_x = Math.round(rect.x + rect.width + margin);\n palette_width = this.v7EvalLength('width', pad_width, 0.05);\n palette_y = rect.y;\n palette_height = rect.height;\n } else {\n let margin = this.v7EvalLength('margin', pad_height, 0.02);\n palette_x = rect.x;\n palette_width = rect.width;\n palette_y = Math.round(rect.y + rect.height + margin);\n palette_height = this.v7EvalLength('width', pad_height, 0.05);\n }\n\n // x,y,width,height attributes used for drag functionality\n this.draw_g.attr('transform',`translate(${palette_x},${palette_y})`);\n }\n\n let g_btns = this.draw_g.select('.colbtns');\n if (g_btns.empty())\n g_btns = this.draw_g.append('svg:g').attr('class', 'colbtns');\n else\n g_btns.selectAll('*').remove();\n\n if (!visible) return;\n\n g_btns.append('svg:path')\n .attr('d', `M0,0H${palette_width}V${palette_height}H0Z`)\n .style('stroke', 'black')\n .style('fill', 'none');\n\n if ((gmin === undefined) || (gmax === undefined)) { gmin = zmin; gmax = zmax; }\n\n if (vertical)\n framep.z_handle.configureAxis('zaxis', gmin, gmax, zmin, zmax, true, [palette_height, 0], -palette_height, { reverse: false });\n else\n framep.z_handle.configureAxis('zaxis', gmin, gmax, zmin, zmax, false, [0, palette_width], palette_width, { reverse: false });\n\n for (let i = 0; i < contour.length-1; ++i) {\n let z0 = Math.round(framep.z_handle.gr(contour[i])),\n z1 = Math.round(framep.z_handle.gr(contour[i+1])),\n col = palette.getContourColor((contour[i]+contour[i+1])/2);\n\n let r = g_btns.append('svg:path')\n .attr('d', vertical ? `M0,${z1}H${palette_width}V${z0}H0Z` : `M${z0},0V${palette_height}H${z1}V0Z`)\n .style('fill', col)\n .style('stroke', col)\n .property('fill0', col)\n .property('fill1', d3_rgb(col).darker(0.5).toString());\n\n if (this.isTooltipAllowed())\n r.on('mouseover', function() {\n d3_select(this).transition().duration(100).style('fill', d3_select(this).property('fill1'));\n }).on('mouseout', function() {\n d3_select(this).transition().duration(100).style('fill', d3_select(this).property('fill0'));\n }).append('svg:title').text(contour[i].toFixed(2) + ' - ' + contour[i+1].toFixed(2));\n\n if (settings.Zooming)\n r.on('dblclick', () => framep.unzoom('z'));\n }\n\n framep.z_handle.maxTickSize = Math.round(palette_width*0.3);\n\n let promise = framep.z_handle.drawAxis(this.draw_g, vertical ? `translate(${palette_width},${palette_height})` : `translate(0,${palette_height})`, vertical ? -1 : 1);\n\n if (isBatchMode() || drag)\n return promise;\n\n return promise.then(() => {\n\n if (settings.ContextMenu)\n this.draw_g.on('contextmenu', evnt => {\n evnt.stopPropagation(); // disable main context menu\n evnt.preventDefault(); // disable browser context menu\n createMenu(evnt, this).then(menu => {\n menu.add('header:Palette');\n menu.addchk(vertical, 'Vertical', flag => { this.v7SetAttr('vertical', flag); this.redrawPad(); });\n framep.z_handle.fillAxisContextMenu(menu, 'z');\n menu.show();\n });\n });\n\n addDragHandler(this, { x: palette_x, y: palette_y, width: palette_width, height: palette_height,\n minwidth: 20, minheight: 20, no_change_x: !vertical, no_change_y: vertical, redraw: d => this.drawPalette(d) });\n\n if (!settings.Zooming) return;\n\n let doing_zoom = false, sel1 = 0, sel2 = 0, zoom_rect, zoom_rect_visible, moving_labels, last_pos;\n\n const moveRectSel = evnt => {\n\n if (!doing_zoom) return;\n evnt.preventDefault();\n\n last_pos = d3_pointer(evnt, this.draw_g.node());\n\n if (moving_labels)\n return framep.z_handle.processLabelsMove('move', last_pos);\n\n if (vertical)\n sel2 = Math.min(Math.max(last_pos[1], 0), palette_height);\n else\n sel2 = Math.min(Math.max(last_pos[0], 0), palette_width);\n\n let sz = Math.abs(sel2-sel1);\n\n if (!zoom_rect_visible && (sz > 1)) {\n zoom_rect.style('display', null);\n zoom_rect_visible = true;\n }\n\n if (vertical)\n zoom_rect.attr('y', Math.min(sel1, sel2)).attr('height', sz);\n else\n zoom_rect.attr('x', Math.min(sel1, sel2)).attr('width', sz);\n }, endRectSel = evnt => {\n if (!doing_zoom) return;\n\n evnt.preventDefault();\n d3_select(window).on('mousemove.colzoomRect', null)\n .on('mouseup.colzoomRect', null);\n zoom_rect.remove();\n zoom_rect = null;\n doing_zoom = false;\n\n if (moving_labels) {\n framep.z_handle.processLabelsMove('stop', last_pos);\n } else {\n let z = framep.z_handle.func, z1 = z.invert(sel1), z2 = z.invert(sel2);\n this.getFramePainter().zoom('z', Math.min(z1, z2), Math.max(z1, z2));\n }\n }, startRectSel = evnt => {\n // ignore when touch selection is activated\n if (doing_zoom) return;\n doing_zoom = true;\n\n evnt.preventDefault();\n evnt.stopPropagation();\n\n last_pos = d3_pointer(evnt, this.draw_g.node());\n sel1 = sel2 = last_pos[vertical ? 1 : 0];\n zoom_rect_visible = false;\n moving_labels = false;\n zoom_rect = g_btns\n .append('svg:rect')\n .attr('class', 'zoom')\n .attr('id', 'colzoomRect')\n .style('display', 'none');\n if (vertical)\n zoom_rect.attr('x', 0).attr('width', palette_width).attr('y', sel1).attr('height', 1);\n else\n zoom_rect.attr('x', sel1).attr('width', 1).attr('y', 0).attr('height', palette_height);\n\n d3_select(window).on('mousemove.colzoomRect', moveRectSel)\n .on('mouseup.colzoomRect', endRectSel, true);\n\n setTimeout(() => {\n if (!zoom_rect_visible && doing_zoom)\n moving_labels = framep.z_handle.processLabelsMove('start', last_pos);\n }, 500);\n }, assignHandlers = () => {\n this.draw_g.selectAll('.axis_zoom, .axis_labels')\n .on('mousedown', startRectSel)\n .on('dblclick', () => framep.unzoom('z'));\n\n if (settings.ZoomWheel)\n this.draw_g.on('wheel', evnt => {\n evnt.stopPropagation();\n evnt.preventDefault();\n\n let pos = d3_pointer(evnt, this.draw_g.node()),\n coord = vertical ? (1 - pos[1] / palette_height) : pos[0] / palette_width;\n\n let item = framep.z_handle.analyzeWheelEvent(evnt, coord);\n if (item.changed)\n framep.zoom('z', item.min, item.max);\n });\n };\n\n framep.z_handle.setAfterDrawHandler(assignHandlers);\n\n assignHandlers();\n });\n }\n\n /** @summary draw RPalette object */\n static async draw(dom, palette, opt) {\n let painter = new RPalettePainter(dom, palette, opt, 'palette');\n return ensureRCanvas(painter, false).then(() => {\n painter.createG(); // just create container, real drawing will be done by histogram\n return painter;\n });\n }\n\n} // class RPalettePainter\n\nexport { RPalettePainter, drawText, drawLine, drawBox, drawMarker };\n"],"x_google_ignoreList":[0]} \ No newline at end of file diff --git a/docs/260.081a22df4eb6dd7f.js b/docs/260.21b9eaebb64f4b0e.js similarity index 78% rename from docs/260.081a22df4eb6dd7f.js rename to docs/260.21b9eaebb64f4b0e.js index 6f2cd3801..4bc3dbd11 100644 --- a/docs/260.081a22df4eb6dd7f.js +++ b/docs/260.21b9eaebb64f4b0e.js @@ -1,2 +1,2 @@ -"use strict";(self.webpackChunkphoenix_app=self.webpackChunkphoenix_app||[]).push([[260],{260:(J,L,u)=>{u.r(L),u.d(L,{RPalettePainter:()=>D,drawBox:()=>K,drawLine:()=>I,drawMarker:()=>S,drawText:()=>Z});var j=u(4788),P=u(9542),f=u(2253),k=u(3029),H=u(6116),B=u(9056),W=u(4383);function Z(){let c=this.getObject(),a=this.getPadPainter(),e=this.v7EvalAttr("onFrame",!1)?a.getFramePainter():null,l=!!e&&this.v7EvalAttr("clipping",!1),t=a.getCoordinate(c.fPos,e),n=this.v7EvalFont("text",{size:12,color:"black",align:22});return this.createG(l?"main_layer":!!e&&"upper_layer"),this.startTextDrawing(n,"font"),this.drawText({x:t.x,y:t.y,text:c.fText,latex:1}),this.finishTextDrawing()}function I(){let c=this.getObject(),a=this.getPadPainter(),e=this.v7EvalAttr("onFrame",!1)?a.getFramePainter():null,l=!!e&&this.v7EvalAttr("clipping",!1),t=a.getCoordinate(c.fP1,e),n=a.getCoordinate(c.fP2,e);this.createG(l?"main_layer":!!e&&"upper_layer"),this.createv7AttLine(),this.draw_g.append("svg:path").attr("d",`M${t.x},${t.y}L${n.x},${n.y}`).call(this.lineatt.func)}function K(){let c=this.getObject(),a=this.getPadPainter(),e=this.v7EvalAttr("onFrame",!1)?a.getFramePainter():null,l=!!e&&this.v7EvalAttr("clipping",!1),t=a.getCoordinate(c.fP1,e),n=a.getCoordinate(c.fP2,e);this.createG(l?"main_layer":!!e&&"upper_layer"),this.createv7AttLine("border_"),this.createv7AttFill(),this.draw_g.append("svg:path").attr("d",`M${t.x},${t.y}H${n.x}V${n.y}H${t.x}Z`).call(this.lineatt.func).call(this.fillatt.func)}function S(){let c=this.getObject(),a=this.getPadPainter(),e=this.v7EvalAttr("onFrame",!1)?a.getFramePainter():null,l=!!e&&this.v7EvalAttr("clipping",!1),t=a.getCoordinate(c.fP,e);this.createG(l?"main_layer":!!e&&"upper_layer"),this.createv7AttMarker();let n=this.markeratt.create(t.x,t.y);n&&this.draw_g.append("svg:path").attr("d",n).call(this.markeratt.func)}class D extends k.p{getHistPalette(){let a=this.getObject(),e=a?a.fPalette:null;return e&&!e.getColor&&(0,P.addMethods)(e,"ROOT::Experimental::RPalette"),e}drawPalette(a){let e=this.getHistPalette(),l=e.getContour(),t=this.getFramePainter();if(!l)return console.log("no contour - no palette");if(!t)return console.log("no frame painter - no palette");let A,C,o,h,n=e.full_min,E=e.full_max,O=l[0],R=l[l.length-1],p=t.getFrameRect(),y=this.getPadPainter().getPadWidth(),$=this.getPadPainter().getPadHeight(),U=this.v7EvalAttr("visible",!0),s=this.v7EvalAttr("vertical",!0);if(a){o=a.width,h=a.height;let i={};s?(this.v7AttrChange(i,"margin",(a.x-p.x-p.width)/y),this.v7AttrChange(i,"width",o/y)):(this.v7AttrChange(i,"margin",(a.y-p.y-p.height)/y),this.v7AttrChange(i,"width",h/$)),this.v7SendAttrChanges(i,!1)}else{if(s){let i=this.v7EvalLength("margin",y,.02);A=Math.round(p.x+p.width+i),o=this.v7EvalLength("width",y,.05),C=p.y,h=p.height}else{let i=this.v7EvalLength("margin",$,.02);A=p.x,o=p.width,C=Math.round(p.y+p.height+i),h=this.v7EvalLength("width",$,.05)}this.draw_g.attr("transform",`translate(${A},${C})`)}let w=this.draw_g.select(".colbtns");if(w.empty()?w=this.draw_g.append("svg:g").attr("class","colbtns"):w.selectAll("*").remove(),!U)return;w.append("svg:path").attr("d",`M0,0H${o}V${h}H0Z`).style("stroke","black").style("fill","none"),(void 0===n||void 0===E)&&(n=O,E=R),s?t.z_handle.configureAxis("zaxis",n,E,O,R,!0,[h,0],-h,{reverse:!1}):t.z_handle.configureAxis("zaxis",n,E,O,R,!1,[0,o],o,{reverse:!1});for(let i=0;it.unzoom("z"))}t.z_handle.maxTickSize=Math.round(.3*o);let T=t.z_handle.drawAxis(this.draw_g,s?`translate(${o},${h})`:`translate(0,${h})`,s?-1:1);return(0,P.isBatchMode)()||a?T:T.then(()=>{if(P.settings.ContextMenu&&this.draw_g.on("contextmenu",r=>{r.stopPropagation(),r.preventDefault(),(0,W.Z)(r,this).then(d=>{d.add("header:Palette"),d.addchk(s,"Vertical",z=>{this.v7SetAttr("vertical",z),this.redrawPad()}),t.z_handle.fillAxisContextMenu(d,"z"),d.show()})}),(0,H.uI)(this,{x:A,y:C,width:o,height:h,minwidth:20,minheight:20,no_change_x:!s,no_change_y:s,redraw:r=>this.drawPalette(r)}),!P.settings.Zooming)return;let g,x,b,v,i=!1,_=0,m=0;const G=r=>{if(!i)return;if(r.preventDefault(),v=(0,f.cx)(r,this.draw_g.node()),b)return t.z_handle.processLabelsMove("move",v);m=s?Math.min(Math.max(v[1],0),h):Math.min(Math.max(v[0],0),o);let d=Math.abs(m-_);!x&&d>1&&(g.style("display",null),x=!0),s?g.attr("y",Math.min(_,m)).attr("height",d):g.attr("x",Math.min(_,m)).attr("width",d)},V=r=>{if(i)if(r.preventDefault(),(0,f.Ys)(window).on("mousemove.colzoomRect",null).on("mouseup.colzoomRect",null),g.remove(),g=null,i=!1,b)t.z_handle.processLabelsMove("stop",v);else{let d=t.z_handle.func,z=d.invert(_),M=d.invert(m);this.getFramePainter().zoom("z",Math.min(z,M),Math.max(z,M))}},Y=r=>{i||(i=!0,r.preventDefault(),r.stopPropagation(),v=(0,f.cx)(r,this.draw_g.node()),_=m=v[s?1:0],x=!1,b=!1,g=w.append("svg:rect").attr("class","zoom").attr("id","colzoomRect").style("display","none"),s?g.attr("x",0).attr("width",o).attr("y",_).attr("height",1):g.attr("x",_).attr("width",1).attr("y",0).attr("height",h),(0,f.Ys)(window).on("mousemove.colzoomRect",G).on("mouseup.colzoomRect",V,!0),setTimeout(()=>{!x&&i&&(b=t.z_handle.processLabelsMove("start",v))},500))},F=()=>{this.draw_g.selectAll(".axis_zoom, .axis_labels").on("mousedown",Y).on("dblclick",()=>t.unzoom("z")),P.settings.ZoomWheel&&this.draw_g.on("wheel",r=>{r.stopPropagation(),r.preventDefault();let d=(0,f.cx)(r,this.draw_g.node()),M=t.z_handle.analyzeWheelEvent(r,s?1-d[1]/h:d[0]/o);M.changed&&t.zoom("z",M.min,M.max)})};t.z_handle.setAfterDrawHandler(F),F()})}static draw(a,e,l){return(0,j.Z)(function*(){let t=new D(a,e,l,"palette");return(0,B.ensureRCanvas)(t,!1).then(()=>(t.createG(),t))})()}}}}]); -//# sourceMappingURL=260.081a22df4eb6dd7f.js.map \ No newline at end of file +"use strict";(self.webpackChunkphoenix_app=self.webpackChunkphoenix_app||[]).push([[260],{260:(J,L,u)=>{u.r(L),u.d(L,{RPalettePainter:()=>D,drawBox:()=>K,drawLine:()=>I,drawMarker:()=>S,drawText:()=>Z});var k=u(5835),P=u(9542),f=u(2253),j=u(3029),H=u(6116),B=u(9056),W=u(4383);function Z(){let _=this.getObject(),a=this.getPadPainter(),e=this.v7EvalAttr("onFrame",!1)?a.getFramePainter():null,l=!!e&&this.v7EvalAttr("clipping",!1),t=a.getCoordinate(_.fPos,e),n=this.v7EvalFont("text",{size:12,color:"black",align:22});return this.createG(l?"main_layer":!!e&&"upper_layer"),this.startTextDrawing(n,"font"),this.drawText({x:t.x,y:t.y,text:_.fText,latex:1}),this.finishTextDrawing()}function I(){let _=this.getObject(),a=this.getPadPainter(),e=this.v7EvalAttr("onFrame",!1)?a.getFramePainter():null,l=!!e&&this.v7EvalAttr("clipping",!1),t=a.getCoordinate(_.fP1,e),n=a.getCoordinate(_.fP2,e);this.createG(l?"main_layer":!!e&&"upper_layer"),this.createv7AttLine(),this.draw_g.append("svg:path").attr("d",`M${t.x},${t.y}L${n.x},${n.y}`).call(this.lineatt.func)}function K(){let _=this.getObject(),a=this.getPadPainter(),e=this.v7EvalAttr("onFrame",!1)?a.getFramePainter():null,l=!!e&&this.v7EvalAttr("clipping",!1),t=a.getCoordinate(_.fP1,e),n=a.getCoordinate(_.fP2,e);this.createG(l?"main_layer":!!e&&"upper_layer"),this.createv7AttLine("border_"),this.createv7AttFill(),this.draw_g.append("svg:path").attr("d",`M${t.x},${t.y}H${n.x}V${n.y}H${t.x}Z`).call(this.lineatt.func).call(this.fillatt.func)}function S(){let _=this.getObject(),a=this.getPadPainter(),e=this.v7EvalAttr("onFrame",!1)?a.getFramePainter():null,l=!!e&&this.v7EvalAttr("clipping",!1),t=a.getCoordinate(_.fP,e);this.createG(l?"main_layer":!!e&&"upper_layer"),this.createv7AttMarker();let n=this.markeratt.create(t.x,t.y);n&&this.draw_g.append("svg:path").attr("d",n).call(this.markeratt.func)}class D extends j.p{getHistPalette(){let a=this.getObject(),e=a?a.fPalette:null;return e&&!e.getColor&&(0,P.addMethods)(e,"ROOT::Experimental::RPalette"),e}drawPalette(a){let e=this.getHistPalette(),l=e.getContour(),t=this.getFramePainter();if(!l)return console.log("no contour - no palette");if(!t)return console.log("no frame painter - no palette");let A,C,o,h,n=e.full_min,E=e.full_max,O=l[0],R=l[l.length-1],p=t.getFrameRect(),y=this.getPadPainter().getPadWidth(),$=this.getPadPainter().getPadHeight(),U=this.v7EvalAttr("visible",!0),s=this.v7EvalAttr("vertical",!0);if(a){o=a.width,h=a.height;let i={};s?(this.v7AttrChange(i,"margin",(a.x-p.x-p.width)/y),this.v7AttrChange(i,"width",o/y)):(this.v7AttrChange(i,"margin",(a.y-p.y-p.height)/y),this.v7AttrChange(i,"width",h/$)),this.v7SendAttrChanges(i,!1)}else{if(s){let i=this.v7EvalLength("margin",y,.02);A=Math.round(p.x+p.width+i),o=this.v7EvalLength("width",y,.05),C=p.y,h=p.height}else{let i=this.v7EvalLength("margin",$,.02);A=p.x,o=p.width,C=Math.round(p.y+p.height+i),h=this.v7EvalLength("width",$,.05)}this.draw_g.attr("transform",`translate(${A},${C})`)}let w=this.draw_g.select(".colbtns");if(w.empty()?w=this.draw_g.append("svg:g").attr("class","colbtns"):w.selectAll("*").remove(),!U)return;w.append("svg:path").attr("d",`M0,0H${o}V${h}H0Z`).style("stroke","black").style("fill","none"),(void 0===n||void 0===E)&&(n=O,E=R),s?t.z_handle.configureAxis("zaxis",n,E,O,R,!0,[h,0],-h,{reverse:!1}):t.z_handle.configureAxis("zaxis",n,E,O,R,!1,[0,o],o,{reverse:!1});for(let i=0;it.unzoom("z"))}t.z_handle.maxTickSize=Math.round(.3*o);let T=t.z_handle.drawAxis(this.draw_g,s?`translate(${o},${h})`:`translate(0,${h})`,s?-1:1);return(0,P.isBatchMode)()||a?T:T.then(()=>{if(P.settings.ContextMenu&&this.draw_g.on("contextmenu",r=>{r.stopPropagation(),r.preventDefault(),(0,W.Z)(r,this).then(d=>{d.add("header:Palette"),d.addchk(s,"Vertical",z=>{this.v7SetAttr("vertical",z),this.redrawPad()}),t.z_handle.fillAxisContextMenu(d,"z"),d.show()})}),(0,H.uI)(this,{x:A,y:C,width:o,height:h,minwidth:20,minheight:20,no_change_x:!s,no_change_y:s,redraw:r=>this.drawPalette(r)}),!P.settings.Zooming)return;let g,x,b,v,i=!1,c=0,m=0;const G=r=>{if(!i)return;if(r.preventDefault(),v=(0,f.cx)(r,this.draw_g.node()),b)return t.z_handle.processLabelsMove("move",v);m=s?Math.min(Math.max(v[1],0),h):Math.min(Math.max(v[0],0),o);let d=Math.abs(m-c);!x&&d>1&&(g.style("display",null),x=!0),s?g.attr("y",Math.min(c,m)).attr("height",d):g.attr("x",Math.min(c,m)).attr("width",d)},V=r=>{if(i)if(r.preventDefault(),(0,f.Ys)(window).on("mousemove.colzoomRect",null).on("mouseup.colzoomRect",null),g.remove(),g=null,i=!1,b)t.z_handle.processLabelsMove("stop",v);else{let d=t.z_handle.func,z=d.invert(c),M=d.invert(m);this.getFramePainter().zoom("z",Math.min(z,M),Math.max(z,M))}},Y=r=>{i||(i=!0,r.preventDefault(),r.stopPropagation(),v=(0,f.cx)(r,this.draw_g.node()),c=m=v[s?1:0],x=!1,b=!1,g=w.append("svg:rect").attr("class","zoom").attr("id","colzoomRect").style("display","none"),s?g.attr("x",0).attr("width",o).attr("y",c).attr("height",1):g.attr("x",c).attr("width",1).attr("y",0).attr("height",h),(0,f.Ys)(window).on("mousemove.colzoomRect",G).on("mouseup.colzoomRect",V,!0),setTimeout(()=>{!x&&i&&(b=t.z_handle.processLabelsMove("start",v))},500))},F=()=>{this.draw_g.selectAll(".axis_zoom, .axis_labels").on("mousedown",Y).on("dblclick",()=>t.unzoom("z")),P.settings.ZoomWheel&&this.draw_g.on("wheel",r=>{r.stopPropagation(),r.preventDefault();let d=(0,f.cx)(r,this.draw_g.node()),M=t.z_handle.analyzeWheelEvent(r,s?1-d[1]/h:d[0]/o);M.changed&&t.zoom("z",M.min,M.max)})};t.z_handle.setAfterDrawHandler(F),F()})}static draw(a,e,l){return(0,k.Z)(function*(){let t=new D(a,e,l,"palette");return(0,B.ensureRCanvas)(t,!1).then(()=>(t.createG(),t))})()}}}}]); +//# sourceMappingURL=260.21b9eaebb64f4b0e.js.map \ No newline at end of file diff --git a/docs/260.21b9eaebb64f4b0e.js.map b/docs/260.21b9eaebb64f4b0e.js.map new file mode 100644 index 000000000..a19c4248a --- /dev/null +++ b/docs/260.21b9eaebb64f4b0e.js.map @@ -0,0 +1 @@ +{"version":3,"file":"260.21b9eaebb64f4b0e.js","mappings":"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","names":["drawText","text","this","getObject","pp","getPadPainter","onframe","v7EvalAttr","getFramePainter","clipping","p","getCoordinate","fPos","textFont","v7EvalFont","size","color","align","createG","startTextDrawing","x","y","fText","latex","finishTextDrawing","drawLine","line","p1","fP1","p2","fP2","createv7AttLine","draw_g","append","attr","call","lineatt","func","drawBox","box","createv7AttFill","fillatt","drawMarker","marker","fP","createv7AttMarker","path","markeratt","create","RPalettePainter","RObjectPainter","getHistPalette","drawable","pal","fPalette","getColor","addMethods","drawPalette","drag","palette","contour","getContour","framep","console","log","palette_x","palette_y","palette_width","palette_height","gmin","full_min","gmax","full_max","zmin","zmax","length","rect","getFrameRect","pad_width","getPadWidth","pad_height","getPadHeight","visible","vertical","width","height","changes","v7AttrChange","v7SendAttrChanges","margin","v7EvalLength","Math","round","g_btns","select","empty","selectAll","remove","style","undefined","z_handle","configureAxis","reverse","i","z0","gr","z1","col","getContourColor","r","property","d3_rgb","darker","toString","isTooltipAllowed","on","d3_select","transition","duration","toFixed","settings","unzoom","maxTickSize","promise","drawAxis","isBatchMode","then","evnt","stopPropagation","preventDefault","createMenu","menu","add","addchk","flag","v7SetAttr","redrawPad","fillAxisContextMenu","show","addDragHandler","minwidth","minheight","no_change_x","no_change_y","redraw","d","zoom_rect","zoom_rect_visible","moving_labels","last_pos","doing_zoom","sel1","sel2","moveRectSel","d3_pointer","node","processLabelsMove","min","max","sz","abs","endRectSel","window","z","invert","z2","zoom","startRectSel","setTimeout","assignHandlers","pos","item","analyzeWheelEvent","changed","setAfterDrawHandler","static","dom","opt","painter","ensureRCanvas"],"sourceRoot":"webpack:///","sources":["../node_modules/jsroot/modules/draw/v7more.mjs"],"sourcesContent":["import { addMethods, settings, isBatchMode } from '../core.mjs';\nimport { select as d3_select, rgb as d3_rgb, pointer as d3_pointer } from '../d3.mjs';\nimport { RObjectPainter } from '../base/RObjectPainter.mjs';\nimport { addDragHandler } from '../gpad/TFramePainter.mjs';\nimport { ensureRCanvas } from '../gpad/RCanvasPainter.mjs';\nimport { createMenu } from '../gui/menu.mjs';\n\n\n/** @summary draw RText object\n * @private */\nfunction drawText() {\n let text = this.getObject(),\n pp = this.getPadPainter(),\n onframe = this.v7EvalAttr('onFrame', false) ? pp.getFramePainter() : null,\n clipping = onframe ? this.v7EvalAttr('clipping', false) : false,\n p = pp.getCoordinate(text.fPos, onframe),\n textFont = this.v7EvalFont('text', { size: 12, color: 'black', align: 22 });\n\n this.createG(clipping ? 'main_layer' : (onframe ? 'upper_layer' : false));\n\n this.startTextDrawing(textFont, 'font');\n\n this.drawText({ x: p.x, y: p.y, text: text.fText, latex: 1 });\n\n return this.finishTextDrawing();\n}\n\n/** @summary draw RLine object\n * @private */\nfunction drawLine() {\n\n let line = this.getObject(),\n pp = this.getPadPainter(),\n onframe = this.v7EvalAttr('onFrame', false) ? pp.getFramePainter() : null,\n clipping = onframe ? this.v7EvalAttr('clipping', false) : false,\n p1 = pp.getCoordinate(line.fP1, onframe),\n p2 = pp.getCoordinate(line.fP2, onframe);\n\n this.createG(clipping ? 'main_layer' : (onframe ? 'upper_layer' : false));\n\n this.createv7AttLine();\n\n this.draw_g\n .append('svg:path')\n .attr('d',`M${p1.x},${p1.y}L${p2.x},${p2.y}`)\n .call(this.lineatt.func);\n}\n\n/** @summary draw RBox object\n * @private */\nfunction drawBox() {\n\n let box = this.getObject(),\n pp = this.getPadPainter(),\n onframe = this.v7EvalAttr('onFrame', false) ? pp.getFramePainter() : null,\n clipping = onframe ? this.v7EvalAttr('clipping', false) : false,\n p1 = pp.getCoordinate(box.fP1, onframe),\n p2 = pp.getCoordinate(box.fP2, onframe);\n\n this.createG(clipping ? 'main_layer' : (onframe ? 'upper_layer' : false));\n\n this.createv7AttLine('border_');\n\n this.createv7AttFill();\n\n this.draw_g\n .append('svg:path')\n .attr('d',`M${p1.x},${p1.y}H${p2.x}V${p2.y}H${p1.x}Z`)\n .call(this.lineatt.func)\n .call(this.fillatt.func);\n}\n\n/** @summary draw RMarker object\n * @private */\nfunction drawMarker() {\n let marker = this.getObject(),\n pp = this.getPadPainter(),\n onframe = this.v7EvalAttr('onFrame', false) ? pp.getFramePainter() : null,\n clipping = onframe ? this.v7EvalAttr('clipping', false) : false,\n p = pp.getCoordinate(marker.fP, onframe);\n\n this.createG(clipping ? 'main_layer' : (onframe ? 'upper_layer' : false));\n\n this.createv7AttMarker();\n\n let path = this.markeratt.create(p.x, p.y);\n\n if (path)\n this.draw_g.append('svg:path')\n .attr('d', path)\n .call(this.markeratt.func);\n}\n\n/** @summary painter for RPalette\n *\n * @private\n */\n\nclass RPalettePainter extends RObjectPainter {\n\n /** @summary get palette */\n getHistPalette() {\n let drawable = this.getObject(),\n pal = drawable ? drawable.fPalette : null;\n\n if (pal && !pal.getColor)\n addMethods(pal, 'ROOT::Experimental::RPalette');\n\n return pal;\n }\n\n /** @summary Draw palette */\n drawPalette(drag) {\n\n let palette = this.getHistPalette(),\n contour = palette.getContour(),\n framep = this.getFramePainter();\n\n if (!contour)\n return console.log('no contour - no palette');\n\n // frame painter must be there\n if (!framep)\n return console.log('no frame painter - no palette');\n\n let gmin = palette.full_min,\n gmax = palette.full_max,\n zmin = contour[0],\n zmax = contour[contour.length-1],\n rect = framep.getFrameRect(),\n pad_width = this.getPadPainter().getPadWidth(),\n pad_height = this.getPadPainter().getPadHeight(),\n visible = this.v7EvalAttr('visible', true),\n vertical = this.v7EvalAttr('vertical', true),\n palette_x, palette_y, palette_width, palette_height;\n\n if (drag) {\n palette_width = drag.width;\n palette_height = drag.height;\n\n let changes = {};\n if (vertical) {\n this.v7AttrChange(changes, 'margin', (drag.x - rect.x - rect.width) / pad_width);\n this.v7AttrChange(changes, 'width', palette_width / pad_width);\n } else {\n this.v7AttrChange(changes, 'margin', (drag.y - rect.y - rect.height) / pad_width);\n this.v7AttrChange(changes, 'width', palette_height / pad_height);\n }\n this.v7SendAttrChanges(changes, false); // do not invoke canvas update on the server\n } else {\n if (vertical) {\n let margin = this.v7EvalLength('margin', pad_width, 0.02);\n palette_x = Math.round(rect.x + rect.width + margin);\n palette_width = this.v7EvalLength('width', pad_width, 0.05);\n palette_y = rect.y;\n palette_height = rect.height;\n } else {\n let margin = this.v7EvalLength('margin', pad_height, 0.02);\n palette_x = rect.x;\n palette_width = rect.width;\n palette_y = Math.round(rect.y + rect.height + margin);\n palette_height = this.v7EvalLength('width', pad_height, 0.05);\n }\n\n // x,y,width,height attributes used for drag functionality\n this.draw_g.attr('transform',`translate(${palette_x},${palette_y})`);\n }\n\n let g_btns = this.draw_g.select('.colbtns');\n if (g_btns.empty())\n g_btns = this.draw_g.append('svg:g').attr('class', 'colbtns');\n else\n g_btns.selectAll('*').remove();\n\n if (!visible) return;\n\n g_btns.append('svg:path')\n .attr('d', `M0,0H${palette_width}V${palette_height}H0Z`)\n .style('stroke', 'black')\n .style('fill', 'none');\n\n if ((gmin === undefined) || (gmax === undefined)) { gmin = zmin; gmax = zmax; }\n\n if (vertical)\n framep.z_handle.configureAxis('zaxis', gmin, gmax, zmin, zmax, true, [palette_height, 0], -palette_height, { reverse: false });\n else\n framep.z_handle.configureAxis('zaxis', gmin, gmax, zmin, zmax, false, [0, palette_width], palette_width, { reverse: false });\n\n for (let i = 0; i < contour.length-1; ++i) {\n let z0 = Math.round(framep.z_handle.gr(contour[i])),\n z1 = Math.round(framep.z_handle.gr(contour[i+1])),\n col = palette.getContourColor((contour[i]+contour[i+1])/2);\n\n let r = g_btns.append('svg:path')\n .attr('d', vertical ? `M0,${z1}H${palette_width}V${z0}H0Z` : `M${z0},0V${palette_height}H${z1}V0Z`)\n .style('fill', col)\n .style('stroke', col)\n .property('fill0', col)\n .property('fill1', d3_rgb(col).darker(0.5).toString());\n\n if (this.isTooltipAllowed())\n r.on('mouseover', function() {\n d3_select(this).transition().duration(100).style('fill', d3_select(this).property('fill1'));\n }).on('mouseout', function() {\n d3_select(this).transition().duration(100).style('fill', d3_select(this).property('fill0'));\n }).append('svg:title').text(contour[i].toFixed(2) + ' - ' + contour[i+1].toFixed(2));\n\n if (settings.Zooming)\n r.on('dblclick', () => framep.unzoom('z'));\n }\n\n framep.z_handle.maxTickSize = Math.round(palette_width*0.3);\n\n let promise = framep.z_handle.drawAxis(this.draw_g, vertical ? `translate(${palette_width},${palette_height})` : `translate(0,${palette_height})`, vertical ? -1 : 1);\n\n if (isBatchMode() || drag)\n return promise;\n\n return promise.then(() => {\n\n if (settings.ContextMenu)\n this.draw_g.on('contextmenu', evnt => {\n evnt.stopPropagation(); // disable main context menu\n evnt.preventDefault(); // disable browser context menu\n createMenu(evnt, this).then(menu => {\n menu.add('header:Palette');\n menu.addchk(vertical, 'Vertical', flag => { this.v7SetAttr('vertical', flag); this.redrawPad(); });\n framep.z_handle.fillAxisContextMenu(menu, 'z');\n menu.show();\n });\n });\n\n addDragHandler(this, { x: palette_x, y: palette_y, width: palette_width, height: palette_height,\n minwidth: 20, minheight: 20, no_change_x: !vertical, no_change_y: vertical, redraw: d => this.drawPalette(d) });\n\n if (!settings.Zooming) return;\n\n let doing_zoom = false, sel1 = 0, sel2 = 0, zoom_rect, zoom_rect_visible, moving_labels, last_pos;\n\n const moveRectSel = evnt => {\n\n if (!doing_zoom) return;\n evnt.preventDefault();\n\n last_pos = d3_pointer(evnt, this.draw_g.node());\n\n if (moving_labels)\n return framep.z_handle.processLabelsMove('move', last_pos);\n\n if (vertical)\n sel2 = Math.min(Math.max(last_pos[1], 0), palette_height);\n else\n sel2 = Math.min(Math.max(last_pos[0], 0), palette_width);\n\n let sz = Math.abs(sel2-sel1);\n\n if (!zoom_rect_visible && (sz > 1)) {\n zoom_rect.style('display', null);\n zoom_rect_visible = true;\n }\n\n if (vertical)\n zoom_rect.attr('y', Math.min(sel1, sel2)).attr('height', sz);\n else\n zoom_rect.attr('x', Math.min(sel1, sel2)).attr('width', sz);\n }, endRectSel = evnt => {\n if (!doing_zoom) return;\n\n evnt.preventDefault();\n d3_select(window).on('mousemove.colzoomRect', null)\n .on('mouseup.colzoomRect', null);\n zoom_rect.remove();\n zoom_rect = null;\n doing_zoom = false;\n\n if (moving_labels) {\n framep.z_handle.processLabelsMove('stop', last_pos);\n } else {\n let z = framep.z_handle.func, z1 = z.invert(sel1), z2 = z.invert(sel2);\n this.getFramePainter().zoom('z', Math.min(z1, z2), Math.max(z1, z2));\n }\n }, startRectSel = evnt => {\n // ignore when touch selection is activated\n if (doing_zoom) return;\n doing_zoom = true;\n\n evnt.preventDefault();\n evnt.stopPropagation();\n\n last_pos = d3_pointer(evnt, this.draw_g.node());\n sel1 = sel2 = last_pos[vertical ? 1 : 0];\n zoom_rect_visible = false;\n moving_labels = false;\n zoom_rect = g_btns\n .append('svg:rect')\n .attr('class', 'zoom')\n .attr('id', 'colzoomRect')\n .style('display', 'none');\n if (vertical)\n zoom_rect.attr('x', 0).attr('width', palette_width).attr('y', sel1).attr('height', 1);\n else\n zoom_rect.attr('x', sel1).attr('width', 1).attr('y', 0).attr('height', palette_height);\n\n d3_select(window).on('mousemove.colzoomRect', moveRectSel)\n .on('mouseup.colzoomRect', endRectSel, true);\n\n setTimeout(() => {\n if (!zoom_rect_visible && doing_zoom)\n moving_labels = framep.z_handle.processLabelsMove('start', last_pos);\n }, 500);\n }, assignHandlers = () => {\n this.draw_g.selectAll('.axis_zoom, .axis_labels')\n .on('mousedown', startRectSel)\n .on('dblclick', () => framep.unzoom('z'));\n\n if (settings.ZoomWheel)\n this.draw_g.on('wheel', evnt => {\n evnt.stopPropagation();\n evnt.preventDefault();\n\n let pos = d3_pointer(evnt, this.draw_g.node()),\n coord = vertical ? (1 - pos[1] / palette_height) : pos[0] / palette_width;\n\n let item = framep.z_handle.analyzeWheelEvent(evnt, coord);\n if (item.changed)\n framep.zoom('z', item.min, item.max);\n });\n };\n\n framep.z_handle.setAfterDrawHandler(assignHandlers);\n\n assignHandlers();\n });\n }\n\n /** @summary draw RPalette object */\n static async draw(dom, palette, opt) {\n let painter = new RPalettePainter(dom, palette, opt, 'palette');\n return ensureRCanvas(painter, false).then(() => {\n painter.createG(); // just create container, real drawing will be done by histogram\n return painter;\n });\n }\n\n} // class RPalettePainter\n\nexport { RPalettePainter, drawText, drawLine, drawBox, drawMarker };\n"],"x_google_ignoreList":[0]} \ No newline at end of file diff --git a/docs/267.1edce052784b4e46.js b/docs/267.1edce052784b4e46.js new file mode 100644 index 000000000..727952248 --- /dev/null +++ b/docs/267.1edce052784b4e46.js @@ -0,0 +1,2 @@ +"use strict";(self.webpackChunkphoenix_app=self.webpackChunkphoenix_app||[]).push([[267],{8267:(Je,re,ae)=>{function R(n,e){var t=n.__state.conversionName.toString(),i=Math.round(n.r),o=Math.round(n.g),r=Math.round(n.b),d=n.a,l=Math.round(n.h),u=n.s.toFixed(1),f=n.v.toFixed(1);if(e||"THREE_CHAR_HEX"===t||"SIX_CHAR_HEX"===t){for(var m=n.hex.toString(16);m.length<6;)m="0"+m;return"#"+m}return"CSS_RGB"===t?"rgb("+i+","+o+","+r+")":"CSS_RGBA"===t?"rgba("+i+","+o+","+r+","+d+")":"HEX"===t?"0x"+n.hex.toString(16):"RGB_ARRAY"===t?"["+i+","+o+","+r+"]":"RGBA_ARRAY"===t?"["+i+","+o+","+r+","+d+"]":"RGB_OBJ"===t?"{r:"+i+",g:"+o+",b:"+r+"}":"RGBA_OBJ"===t?"{r:"+i+",g:"+o+",b:"+r+",a:"+d+"}":"HSV_OBJ"===t?"{h:"+l+",s:"+u+",v:"+f+"}":"HSVA_OBJ"===t?"{h:"+l+",s:"+u+",v:"+f+",a:"+d+"}":"unknown format"}ae.r(re),ae.d(re,{GUI:()=>Oe,color:()=>Ee,controllers:()=>Ae,default:()=>We,dom:()=>Se,gui:()=>ke});var se=Array.prototype.forEach,N=Array.prototype.slice,s={BREAK:{},extend:function(e){return this.each(N.call(arguments,1),function(t){(this.isObject(t)?Object.keys(t):[]).forEach(function(o){this.isUndefined(t[o])||(e[o]=t[o])}.bind(this))},this),e},defaults:function(e){return this.each(N.call(arguments,1),function(t){(this.isObject(t)?Object.keys(t):[]).forEach(function(o){this.isUndefined(e[o])&&(e[o]=t[o])}.bind(this))},this),e},compose:function(){var e=N.call(arguments);return function(){for(var t=N.call(arguments),i=e.length-1;i>=0;i--)t=[e[i].apply(this,t)];return t[0]}},each:function(e,t,i){if(e)if(se&&e.forEach&&e.forEach===se)e.forEach(t,i);else if(e.length===e.length+0){var r,o=void 0;for(o=0,r=e.length;o1?s.toArray(arguments):arguments[0];return s.each(Re,function(t){if(t.litmus(e))return s.each(t.conversions,function(i,o){if(F=i.read(e),!1===G&&!1!==F)return G=F,F.conversionName=o,F.conversion=i,s.BREAK}),s.BREAK}),G},de=void 0,H={hsv_to_rgb:function(e,t,i){var o=Math.floor(e/60)%6,r=e/60-Math.floor(e/60),d=i*(1-t),l=i*(1-r*t),u=i*(1-(1-r)*t),f=[[i,u,d],[l,i,d],[d,i,u],[d,l,i],[u,d,i],[i,d,l]][o];return{r:255*f[0],g:255*f[1],b:255*f[2]}},rgb_to_hsv:function(e,t,i){var o=Math.min(e,t,i),r=Math.max(e,t,i),d=r-o,l=void 0;return 0===r?{h:NaN,s:0,v:0}:(l=e===r?(t-i)/d:t===r?2+(i-e)/d:4+(e-t)/d,(l/=6)<0&&(l+=1),{h:360*l,s:d/r,v:r/255})},rgb_to_hex:function(e,t,i){var o=this.hex_with_component(0,2,e);return o=this.hex_with_component(o,1,t),this.hex_with_component(o,0,i)},component_from_hex:function(e,t){return e>>8*t&255},hex_with_component:function(e,t,i){return i<<(de=8*t)|e&~(255<-1?e.length-e.indexOf(".")-1:0}var Q=function(n){function e(t,i,o){y(this,e);var r=S(this,(e.__proto__||Object.getPrototypeOf(e)).call(this,t,i)),d=o||{};return r.__min=d.min,r.__max=d.max,r.__step=d.step,r.__impliedStep=s.isUndefined(r.__step)?0===r.initialValue?1:Math.pow(10,Math.floor(Math.log(Math.abs(r.initialValue))/Math.LN10))/10:r.__step,r.__precision=fe(r.__impliedStep),r}return A(e,n),w(e,[{key:"setValue",value:function(i){var o=i;return void 0!==this.__min&&othis.__max&&(o=this.__max),void 0!==this.__step&&o%this.__step!=0&&(o=Math.round(o/this.__step)*this.__step),E(e.prototype.__proto__||Object.getPrototypeOf(e.prototype),"setValue",this).call(this,o)}},{key:"min",value:function(i){return this.__min=i,this}},{key:"max",value:function(i){return this.__max=i,this}},{key:"step",value:function(i){return this.__step=i,this.__impliedStep=i,this.__precision=fe(i),this}}]),e}(k),D=function(n){function e(t,i,o){y(this,e);var r=S(this,(e.__proto__||Object.getPrototypeOf(e)).call(this,t,i,o));r.__truncationSuspended=!1;var d=r,l=void 0;function f(){d.__onFinishChange&&d.__onFinishChange.call(d,d.getValue())}function c(b){var _=l-b.clientY;d.setValue(d.getValue()+_*d.__impliedStep),l=b.clientY}function p(){a.unbind(window,"mousemove",c),a.unbind(window,"mouseup",p),f()}return r.__input=document.createElement("input"),r.__input.setAttribute("type","text"),a.bind(r.__input,"change",function u(){var b=parseFloat(d.__input.value);s.isNaN(b)||d.setValue(b)}),a.bind(r.__input,"blur",function m(){f()}),a.bind(r.__input,"mousedown",function x(b){a.bind(window,"mousemove",c),a.bind(window,"mouseup",p),l=b.clientY}),a.bind(r.__input,"keydown",function(b){13===b.keyCode&&(d.__truncationSuspended=!0,this.blur(),d.__truncationSuspended=!1,f())}),r.updateDisplay(),r.domElement.appendChild(r.__input),r}return A(e,n),w(e,[{key:"updateDisplay",value:function(){return this.__input.value=this.__truncationSuspended?this.getValue():function Fe(n,e){var t=Math.pow(10,e);return Math.round(n*t)/t}(this.getValue(),this.__precision),E(e.prototype.__proto__||Object.getPrototypeOf(e.prototype),"updateDisplay",this).call(this)}}]),e}(Q);function _e(n,e,t,i,o){return i+(n-e)/(t-e)*(o-i)}var X=function(n){function e(t,i,o,r,d){y(this,e);var l=S(this,(e.__proto__||Object.getPrototypeOf(e)).call(this,t,i,{min:o,max:r,step:d})),u=l;function m(_){_.preventDefault();var v=u.__background.getBoundingClientRect();return u.setValue(_e(_.clientX,v.left,v.right,u.__min,u.__max)),!1}function c(){a.unbind(window,"mousemove",m),a.unbind(window,"mouseup",c),u.__onFinishChange&&u.__onFinishChange.call(u,u.getValue())}function x(_){var v=_.touches[0].clientX,O=u.__background.getBoundingClientRect();u.setValue(_e(v,O.left,O.right,u.__min,u.__max))}function b(){a.unbind(window,"touchmove",x),a.unbind(window,"touchend",b),u.__onFinishChange&&u.__onFinishChange.call(u,u.getValue())}return l.__background=document.createElement("div"),l.__foreground=document.createElement("div"),a.bind(l.__background,"mousedown",function f(_){document.activeElement.blur(),a.bind(window,"mousemove",m),a.bind(window,"mouseup",c),m(_)}),a.bind(l.__background,"touchstart",function p(_){1===_.touches.length&&(a.bind(window,"touchmove",x),a.bind(window,"touchend",b),x(_))}),a.addClass(l.__background,"slider"),a.addClass(l.__foreground,"slider-fg"),l.updateDisplay(),l.__background.appendChild(l.__foreground),l.domElement.appendChild(l.__background),l}return A(e,n),w(e,[{key:"updateDisplay",value:function(){var i=(this.getValue()-this.__min)/(this.__max-this.__min);return this.__foreground.style.width=100*i+"%",E(e.prototype.__proto__||Object.getPrototypeOf(e.prototype),"updateDisplay",this).call(this)}}]),e}(Q),q=function(n){function e(t,i,o){y(this,e);var r=S(this,(e.__proto__||Object.getPrototypeOf(e)).call(this,t,i)),d=r;return r.__button=document.createElement("div"),r.__button.innerHTML=void 0===o?"Fire":o,a.bind(r.__button,"click",function(l){return l.preventDefault(),d.fire(),!1}),a.addClass(r.__button,"button"),r.domElement.appendChild(r.__button),r}return A(e,n),w(e,[{key:"fire",value:function(){this.__onChange&&this.__onChange.call(this),this.getValue().call(this.object),this.__onFinishChange&&this.__onFinishChange.call(this,this.getValue())}}]),e}(k),j=function(n){function e(t,i){y(this,e);var o=S(this,(e.__proto__||Object.getPrototypeOf(e)).call(this,t,i));o.__color=new g(o.getValue()),o.__temp=new g(0);var r=o;o.domElement=document.createElement("div"),a.makeSelectable(o.domElement,!1),o.__selector=document.createElement("div"),o.__selector.className="selector",o.__saturation_field=document.createElement("div"),o.__saturation_field.className="saturation-field",o.__field_knob=document.createElement("div"),o.__field_knob.className="field-knob",o.__field_knob_border="2px solid ",o.__hue_knob=document.createElement("div"),o.__hue_knob.className="hue-knob",o.__hue_field=document.createElement("div"),o.__hue_field.className="hue-field",o.__input=document.createElement("input"),o.__input.type="text",o.__input_textShadow="0 1px 1px ",a.bind(o.__input,"keydown",function(_){13===_.keyCode&&c.call(this)}),a.bind(o.__input,"blur",c),a.bind(o.__selector,"mousedown",function(){a.addClass(this,"drag").bind(window,"mouseup",function(){a.removeClass(r.__selector,"drag")})}),a.bind(o.__selector,"touchstart",function(){a.addClass(this,"drag").bind(window,"touchend",function(){a.removeClass(r.__selector,"drag")})});var d=document.createElement("div");function l(_){x(_),a.bind(window,"mousemove",x),a.bind(window,"touchmove",x),a.bind(window,"mouseup",f),a.bind(window,"touchend",f)}function u(_){b(_),a.bind(window,"mousemove",b),a.bind(window,"touchmove",b),a.bind(window,"mouseup",m),a.bind(window,"touchend",m)}function f(){a.unbind(window,"mousemove",x),a.unbind(window,"touchmove",x),a.unbind(window,"mouseup",f),a.unbind(window,"touchend",f),p()}function m(){a.unbind(window,"mousemove",b),a.unbind(window,"touchmove",b),a.unbind(window,"mouseup",m),a.unbind(window,"touchend",m),p()}function c(){var _=$(this.value);!1!==_?(r.__color.__state=_,r.setValue(r.__color.toOriginal())):this.value=r.__color.toString()}function p(){r.__onFinishChange&&r.__onFinishChange.call(r,r.__color.toOriginal())}function x(_){-1===_.type.indexOf("touch")&&_.preventDefault();var v=r.__saturation_field.getBoundingClientRect(),O=_.touches&&_.touches[0]||_,z=(O.clientX-v.left)/(v.right-v.left),U=1-(O.clientY-v.top)/(v.bottom-v.top);return U>1?U=1:U<0&&(U=0),z>1?z=1:z<0&&(z=0),r.__color.v=U,r.__color.s=z,r.setValue(r.__color.toOriginal()),!1}function b(_){-1===_.type.indexOf("touch")&&_.preventDefault();var v=r.__hue_field.getBoundingClientRect(),T=1-((_.touches&&_.touches[0]||_).clientY-v.top)/(v.bottom-v.top);return T>1?T=1:T<0&&(T=0),r.__color.h=360*T,r.setValue(r.__color.toOriginal()),!1}return s.extend(o.__selector.style,{width:"122px",height:"102px",padding:"3px",backgroundColor:"#222",boxShadow:"0px 1px 3px rgba(0,0,0,0.3)"}),s.extend(o.__field_knob.style,{position:"absolute",width:"12px",height:"12px",border:o.__field_knob_border+(o.__color.v<.5?"#fff":"#000"),boxShadow:"0px 1px 3px rgba(0,0,0,0.5)",borderRadius:"12px",zIndex:1}),s.extend(o.__hue_knob.style,{position:"absolute",width:"15px",height:"2px",borderRight:"4px solid #fff",zIndex:1}),s.extend(o.__saturation_field.style,{width:"100px",height:"100px",border:"1px solid #555",marginRight:"3px",display:"inline-block",cursor:"pointer"}),s.extend(d.style,{width:"100%",height:"100%",background:"none"}),he(d,"top","rgba(0,0,0,0)","#000"),s.extend(o.__hue_field.style,{width:"15px",height:"100px",border:"1px solid #555",cursor:"ns-resize",position:"absolute",top:"3px",right:"3px"}),function De(n){n.style.background="",n.style.cssText+="background: -moz-linear-gradient(top, #ff0000 0%, #ff00ff 17%, #0000ff 34%, #00ffff 50%, #00ff00 67%, #ffff00 84%, #ff0000 100%);",n.style.cssText+="background: -webkit-linear-gradient(top, #ff0000 0%,#ff00ff 17%,#0000ff 34%,#00ffff 50%,#00ff00 67%,#ffff00 84%,#ff0000 100%);",n.style.cssText+="background: -o-linear-gradient(top, #ff0000 0%,#ff00ff 17%,#0000ff 34%,#00ffff 50%,#00ff00 67%,#ffff00 84%,#ff0000 100%);",n.style.cssText+="background: -ms-linear-gradient(top, #ff0000 0%,#ff00ff 17%,#0000ff 34%,#00ffff 50%,#00ff00 67%,#ffff00 84%,#ff0000 100%);",n.style.cssText+="background: linear-gradient(top, #ff0000 0%,#ff00ff 17%,#0000ff 34%,#00ffff 50%,#00ff00 67%,#ffff00 84%,#ff0000 100%);"}(o.__hue_field),s.extend(o.__input.style,{outline:"none",textAlign:"center",color:"#fff",border:0,fontWeight:"bold",textShadow:o.__input_textShadow+"rgba(0,0,0,0.7)"}),a.bind(o.__saturation_field,"mousedown",l),a.bind(o.__saturation_field,"touchstart",l),a.bind(o.__field_knob,"mousedown",l),a.bind(o.__field_knob,"touchstart",l),a.bind(o.__hue_field,"mousedown",u),a.bind(o.__hue_field,"touchstart",u),o.__saturation_field.appendChild(d),o.__selector.appendChild(o.__field_knob),o.__selector.appendChild(o.__saturation_field),o.__selector.appendChild(o.__hue_field),o.__hue_field.appendChild(o.__hue_knob),o.domElement.appendChild(o.__input),o.domElement.appendChild(o.__selector),o.updateDisplay(),o}return A(e,n),w(e,[{key:"updateDisplay",value:function(){var i=$(this.getValue());if(!1!==i){var o=!1;s.each(g.COMPONENTS,function(l){if(!s.isUndefined(i[l])&&!s.isUndefined(this.__color.__state[l])&&i[l]!==this.__color.__state[l])return o=!0,{}},this),o&&s.extend(this.__color.__state,i)}s.extend(this.__temp.__state,this.__color.__state),this.__temp.a=1;var r=this.__color.v<.5||this.__color.s>.5?255:0,d=255-r;s.extend(this.__field_knob.style,{marginLeft:100*this.__color.s-7+"px",marginTop:100*(1-this.__color.v)-7+"px",backgroundColor:this.__temp.toHexString(),border:this.__field_knob_border+"rgb("+r+","+r+","+r+")"}),this.__hue_knob.style.marginTop=100*(1-this.__color.h/360)+"px",this.__temp.s=1,this.__temp.v=1,he(this.__saturation_field,"left","#fff",this.__temp.toHexString()),this.__input.value=this.__color.toString(),s.extend(this.__input.style,{backgroundColor:this.__color.toHexString(),color:"rgb("+r+","+r+","+r+")",textShadow:this.__input_textShadow+"rgba("+d+","+d+","+d+",.7)"})}}]),e}(k),He=["-moz-","-o-","-webkit-","-ms-",""];function he(n,e,t,i){n.style.background="",s.each(He,function(o){n.style.cssText+="background: "+o+"linear-gradient("+e+", "+t+" 0%, "+i+" 100%); "})}var Ve='
\n\n Here\'s the new load parameter for your GUI\'s constructor:\n\n \n\n
\n\n Automatically save\n values to localStorage on exit.\n\n
The values saved to localStorage will\n override those passed to dat.GUI\'s constructor. This makes it\n easier to work incrementally, but localStorage is fragile,\n and your friends may not see the same values you do.\n\n
\n\n
\n\n
',Ie=function(e,t){var i=e[t];return s.isArray(arguments[2])||s.isObject(arguments[2])?new ue(e,t,arguments[2]):s.isNumber(i)?s.isNumber(arguments[2])&&s.isNumber(arguments[3])?s.isNumber(arguments[4])?new X(e,t,arguments[2],arguments[3],arguments[4]):new X(e,t,arguments[2],arguments[3]):s.isNumber(arguments[4])?new D(e,t,{min:arguments[2],max:arguments[3],step:arguments[4]}):new D(e,t,{min:arguments[2],max:arguments[3]}):s.isString(i)?new ce(e,t):s.isFunction(i)?new q(e,t,""):s.isBoolean(i)?new J(e,t):null},ze=window.requestAnimationFrame||window.webkitRequestAnimationFrame||window.mozRequestAnimationFrame||window.oRequestAnimationFrame||window.msRequestAnimationFrame||function Me(n){setTimeout(n,1e3/60)},Ue=function(){function n(){y(this,n),this.backgroundElement=document.createElement("div"),s.extend(this.backgroundElement.style,{backgroundColor:"rgba(0,0,0,0.8)",top:0,left:0,display:"none",zIndex:"1000",opacity:0,WebkitTransition:"opacity 0.2s linear",transition:"opacity 0.2s linear"}),a.makeFullscreen(this.backgroundElement),this.backgroundElement.style.position="fixed",this.domElement=document.createElement("div"),s.extend(this.domElement.style,{position:"fixed",display:"none",zIndex:"1001",opacity:0,WebkitTransition:"-webkit-transform 0.2s ease-out, opacity 0.2s linear",transition:"transform 0.2s ease-out, opacity 0.2s linear"}),document.body.appendChild(this.backgroundElement),document.body.appendChild(this.domElement);var e=this;a.bind(this.backgroundElement,"click",function(){e.hide()})}return w(n,[{key:"show",value:function(){var t=this;this.backgroundElement.style.display="block",this.domElement.style.display="block",this.domElement.style.opacity=0,this.domElement.style.webkitTransform="scale(1.1)",this.layout(),s.defer(function(){t.backgroundElement.style.opacity=1,t.domElement.style.opacity=1,t.domElement.style.webkitTransform="scale(1)"})}},{key:"hide",value:function(){var t=this,i=function o(){t.domElement.style.display="none",t.backgroundElement.style.display="none",a.unbind(t.domElement,"webkitTransitionEnd",o),a.unbind(t.domElement,"transitionend",o),a.unbind(t.domElement,"oTransitionEnd",o)};a.bind(this.domElement,"webkitTransitionEnd",i),a.bind(this.domElement,"transitionend",i),a.bind(this.domElement,"oTransitionEnd",i),this.backgroundElement.style.opacity=0,this.domElement.style.opacity=0,this.domElement.style.webkitTransform="scale(1.1)"}},{key:"layout",value:function(){this.domElement.style.left=window.innerWidth/2-a.getWidth(this.domElement)/2+"px",this.domElement.style.top=window.innerHeight/2-a.getHeight(this.domElement)/2+"px"}}]),n}();!function(e,t){var i=t||document,o=document.createElement("style");o.type="text/css",o.innerHTML=e;var r=i.getElementsByTagName("head")[0];try{r.appendChild(o)}catch{}}(function Te(n){if(n&&!(typeof window>"u")){var e=document.createElement("style");return e.setAttribute("type","text/css"),e.innerHTML=n,document.head.appendChild(e),n}}(".dg ul{list-style:none;margin:0;padding:0;width:100%;clear:both}.dg.ac{position:fixed;top:0;left:0;right:0;height:0;z-index:0}.dg:not(.ac) .main{overflow:hidden}.dg.main{-webkit-transition:opacity .1s linear;-o-transition:opacity .1s linear;-moz-transition:opacity .1s linear;transition:opacity .1s linear}.dg.main.taller-than-window{overflow-y:auto}.dg.main.taller-than-window .close-button{opacity:1;margin-top:-1px;border-top:1px solid #2c2c2c}.dg.main ul.closed .close-button{opacity:1 !important}.dg.main:hover .close-button,.dg.main .close-button.drag{opacity:1}.dg.main .close-button{-webkit-transition:opacity .1s linear;-o-transition:opacity .1s linear;-moz-transition:opacity .1s linear;transition:opacity .1s linear;border:0;line-height:19px;height:20px;cursor:pointer;text-align:center;background-color:#000}.dg.main .close-button.close-top{position:relative}.dg.main .close-button.close-bottom{position:absolute}.dg.main .close-button:hover{background-color:#111}.dg.a{float:right;margin-right:15px;overflow-y:visible}.dg.a.has-save>ul.close-top{margin-top:0}.dg.a.has-save>ul.close-bottom{margin-top:27px}.dg.a.has-save>ul.closed{margin-top:0}.dg.a .save-row{top:0;z-index:1002}.dg.a .save-row.close-top{position:relative}.dg.a .save-row.close-bottom{position:fixed}.dg li{-webkit-transition:height .1s ease-out;-o-transition:height .1s ease-out;-moz-transition:height .1s ease-out;transition:height .1s ease-out;-webkit-transition:overflow .1s linear;-o-transition:overflow .1s linear;-moz-transition:overflow .1s linear;transition:overflow .1s linear}.dg li:not(.folder){cursor:auto;height:27px;line-height:27px;padding:0 4px 0 5px}.dg li.folder{padding:0;border-left:4px solid rgba(0,0,0,0)}.dg li.title{cursor:pointer;margin-left:-4px}.dg .closed li:not(.title),.dg .closed ul li,.dg .closed ul li>*{height:0;overflow:hidden;border:0}.dg .cr{clear:both;padding-left:3px;height:27px;overflow:hidden}.dg .property-name{cursor:default;float:left;clear:left;width:40%;overflow:hidden;text-overflow:ellipsis}.dg .cr.function .property-name{width:100%}.dg .c{float:left;width:60%;position:relative}.dg .c input[type=text]{border:0;margin-top:4px;padding:3px;width:100%;float:right}.dg .has-slider input[type=text]{width:30%;margin-left:0}.dg .slider{float:left;width:66%;margin-left:-5px;margin-right:0;height:19px;margin-top:4px}.dg .slider-fg{height:100%}.dg .c input[type=checkbox]{margin-top:7px}.dg .c select{margin-top:5px}.dg .cr.function,.dg .cr.function .property-name,.dg .cr.function *,.dg .cr.boolean,.dg .cr.boolean *{cursor:pointer}.dg .cr.color{overflow:visible}.dg .selector{display:none;position:absolute;margin-left:-9px;margin-top:23px;z-index:10}.dg .c:hover .selector,.dg .selector.drag{display:block}.dg li.save-row{padding:0}.dg li.save-row .button{display:inline-block;padding:0px 6px}.dg.dialogue{background-color:#222;width:460px;padding:15px;font-size:13px;line-height:15px}#dg-new-constructor{padding:10px;color:#222;font-family:Monaco, monospace;font-size:10px;border:0;resize:none;box-shadow:inset 1px 1px 1px #888;word-wrap:break-word;margin:12px 0;display:block;width:440px;overflow-y:scroll;height:100px;position:relative}#dg-local-explain{display:none;font-size:11px;line-height:17px;border-radius:3px;background-color:#333;padding:8px;margin-top:10px}#dg-local-explain code{font-size:10px}#dat-gui-save-locally{display:none}.dg{color:#eee;font:11px 'Lucida Grande', sans-serif;text-shadow:0 -1px 0 #111}.dg.main::-webkit-scrollbar{width:5px;background:#1a1a1a}.dg.main::-webkit-scrollbar-corner{height:0;display:none}.dg.main::-webkit-scrollbar-thumb{border-radius:5px;background:#676767}.dg li:not(.folder){background:#1a1a1a;border-bottom:1px solid #2c2c2c}.dg li.save-row{line-height:25px;background:#dad5cb;border:0}.dg li.save-row select{margin-left:5px;width:108px}.dg li.save-row .button{margin-left:5px;margin-top:1px;border-radius:2px;font-size:9px;line-height:7px;padding:4px 4px 5px 4px;background:#c5bdad;color:#fff;text-shadow:0 1px 0 #b0a58f;box-shadow:0 -1px 0 #b0a58f;cursor:pointer}.dg li.save-row .button.gears{background:#c5bdad url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAsAAAANCAYAAAB/9ZQ7AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAQJJREFUeNpiYKAU/P//PwGIC/ApCABiBSAW+I8AClAcgKxQ4T9hoMAEUrxx2QSGN6+egDX+/vWT4e7N82AMYoPAx/evwWoYoSYbACX2s7KxCxzcsezDh3evFoDEBYTEEqycggWAzA9AuUSQQgeYPa9fPv6/YWm/Acx5IPb7ty/fw+QZblw67vDs8R0YHyQhgObx+yAJkBqmG5dPPDh1aPOGR/eugW0G4vlIoTIfyFcA+QekhhHJhPdQxbiAIguMBTQZrPD7108M6roWYDFQiIAAv6Aow/1bFwXgis+f2LUAynwoIaNcz8XNx3Dl7MEJUDGQpx9gtQ8YCueB+D26OECAAQDadt7e46D42QAAAABJRU5ErkJggg==) 2px 1px no-repeat;height:7px;width:8px}.dg li.save-row .button:hover{background-color:#bab19e;box-shadow:0 -1px 0 #b0a58f}.dg li.folder{border-bottom:0}.dg li.title{padding-left:16px;background:#000 url(data:image/gif;base64,R0lGODlhBQAFAJEAAP////Pz8////////yH5BAEAAAIALAAAAAAFAAUAAAIIlI+hKgFxoCgAOw==) 6px 10px no-repeat;cursor:pointer;border-bottom:1px solid rgba(255,255,255,0.2)}.dg .closed li.title{background-image:url(data:image/gif;base64,R0lGODlhBQAFAJEAAP////Pz8////////yH5BAEAAAIALAAAAAAFAAUAAAIIlGIWqMCbWAEAOw==)}.dg .cr.boolean{border-left:3px solid #806787}.dg .cr.color{border-left:3px solid}.dg .cr.function{border-left:3px solid #e61d5f}.dg .cr.number{border-left:3px solid #2FA1D6}.dg .cr.number input[type=text]{color:#2FA1D6}.dg .cr.string{border-left:3px solid #1ed36f}.dg .cr.string input[type=text]{color:#1ed36f}.dg .cr.function:hover,.dg .cr.boolean:hover{background:#111}.dg .c input[type=text]{background:#303030;outline:none}.dg .c input[type=text]:hover{background:#3c3c3c}.dg .c input[type=text]:focus{background:#494949;color:#fff}.dg .c .slider{background:#303030;cursor:ew-resize}.dg .c .slider-fg{background:#2FA1D6;max-width:100%}.dg .c .slider:hover{background:#3c3c3c}.dg .c .slider:hover .slider-fg{background:#44abda}\n"));var P="Default",V=function(){try{return!!window.localStorage}catch{return!1}}(),I=void 0,be=!0,L=void 0,Z=!1,ve=[],h=function n(e){var t=this,i=e||{};this.domElement=document.createElement("div"),this.__ul=document.createElement("ul"),this.domElement.appendChild(this.__ul),a.addClass(this.domElement,"dg"),this.__folders={},this.__controllers=[],this.__rememberedObjects=[],this.__rememberedObjectIndecesToControllers=[],this.__listening=[],i=s.defaults(i,{closeOnTop:!1,autoPlace:!0,width:n.DEFAULT_WIDTH}),i=s.defaults(i,{resizable:i.autoPlace,hideable:i.autoPlace}),s.isUndefined(i.load)?i.load={preset:P}:i.preset&&(i.load.preset=i.preset),s.isUndefined(i.parent)&&i.hideable&&ve.push(this),i.resizable=s.isUndefined(i.parent)&&i.resizable,i.autoPlace&&s.isUndefined(i.scrollable)&&(i.scrollable=!0);var o=V&&"true"===localStorage.getItem(B(0,"isLocal")),r=void 0,d=void 0;if(Object.defineProperties(this,{parent:{get:function(){return i.parent}},scrollable:{get:function(){return i.scrollable}},autoPlace:{get:function(){return i.autoPlace}},closeOnTop:{get:function(){return i.closeOnTop}},preset:{get:function(){return t.parent?t.getRoot().preset:i.load.preset},set:function(p){t.parent?t.getRoot().preset=p:i.load.preset=p,function Ye(n){for(var e=0;e1){var l=t.__li.nextElementSibling;return t.remove(),M(n,t.object,t.property,{before:l,factoryArgs:[s.toArray(arguments)]})}if(s.isArray(d)||s.isObject(d)){var u=t.__li.nextElementSibling;return t.remove(),M(n,t.object,t.property,{before:u,factoryArgs:[d]})}},name:function(d){return t.__li.firstElementChild.firstElementChild.innerHTML=d,t},listen:function(){return t.__gui.listen(t),t},remove:function(){return t.__gui.remove(t),t}}),t instanceof X){var i=new D(t.object,t.property,{min:t.__min,max:t.__max,step:t.__step});s.each(["updateDisplay","onChange","onFinishChange","step","min","max"],function(r){var d=t[r],l=i[r];t[r]=i[r]=function(){var u=Array.prototype.slice.call(arguments);return l.apply(i,u),d.apply(t,u)}}),a.addClass(e,"has-slider"),t.domElement.insertBefore(i.domElement,t.domElement.firstElementChild)}else if(t instanceof D){var o=function(d){if(s.isNumber(t.__min)&&s.isNumber(t.__max)){var l=t.__li.firstElementChild.firstElementChild.innerHTML,u=t.__gui.__listening.indexOf(t)>-1;t.remove();var f=M(n,t.object,t.property,{before:t.__li.nextElementSibling,factoryArgs:[t.__min,t.__max,t.__step]});return f.name(l),u&&f.listen(),f}return d};t.min=s.compose(o,t.min),t.max=s.compose(o,t.max)}else t instanceof J?(a.bind(e,"click",function(){a.fakeEvent(t.__checkbox,"click")}),a.bind(t.__checkbox,"click",function(r){r.stopPropagation()})):t instanceof q?(a.bind(e,"click",function(){a.fakeEvent(t.__button,"click")}),a.bind(e,"mouseover",function(){a.addClass(t.__button,"hover")}),a.bind(e,"mouseout",function(){a.removeClass(t.__button,"hover")})):t instanceof j&&(a.addClass(e,"color"),t.updateDisplay=s.compose(function(r){return e.style.borderLeftColor=t.__color.toString(),r},t.updateDisplay),t.updateDisplay());t.setValue=s.compose(function(r){return n.getRoot().__preset_select&&t.isModified()&&te(n.getRoot(),!0),r},t.setValue)}(n,u,o),n.__controllers.push(o),o}function B(n,e){return document.location.href+"."+e}function ne(n,e,t){var i=document.createElement("option");i.innerHTML=e,i.value=e,n.__preset_select.appendChild(i),t&&(n.__preset_select.selectedIndex=n.__preset_select.length-1)}function xe(n,e){e.style.display=n.useLocalStorage?"block":"none"}function ie(n,e){n.domElement.style.width=e+"px",n.__save_row&&n.autoPlace&&(n.__save_row.style.width=e+"px"),n.__closeButton&&(n.__closeButton.style.width=e+"px")}function Y(n,e){var t={};return s.each(n.__rememberedObjects,function(i,o){var r={};s.each(n.__rememberedObjectIndecesToControllers[o],function(l,u){r[u]=e?l.initialValue:l.getValue()}),t[o]=r}),t}function Ce(n){0!==n.length&&ze.call(window,function(){Ce(n)}),s.each(n,function(e){e.updateDisplay()})}h.toggleHide=function(){Z=!Z,s.each(ve,function(n){n.domElement.style.display=Z?"none":""})},h.CLASS_AUTO_PLACE="a",h.CLASS_AUTO_PLACE_CONTAINER="ac",h.CLASS_MAIN="main",h.CLASS_CONTROLLER_ROW="cr",h.CLASS_TOO_TALL="taller-than-window",h.CLASS_CLOSED="closed",h.CLASS_CLOSE_BUTTON="close-button",h.CLASS_CLOSE_TOP="close-top",h.CLASS_CLOSE_BOTTOM="close-bottom",h.CLASS_DRAG="drag",h.DEFAULT_WIDTH=245,h.TEXT_CLOSED="Close Controls",h.TEXT_OPEN="Open Controls",h._keydownHandler=function(n){"text"!==document.activeElement.type&&(72===n.which||72===n.keyCode)&&h.toggleHide()},a.bind(window,"keydown",h._keydownHandler,!1),s.extend(h.prototype,{add:function(e,t){return M(this,e,t,{factoryArgs:Array.prototype.slice.call(arguments,2)})},addColor:function(e,t){return M(this,e,t,{color:!0})},remove:function(e){this.__ul.removeChild(e.__li),this.__controllers.splice(this.__controllers.indexOf(e),1);var t=this;s.defer(function(){t.onResize()})},destroy:function(){if(this.parent)throw new Error("Only the root GUI should be removed with .destroy(). For subfolders, use gui.removeFolder(folder) instead.");this.autoPlace&&L.removeChild(this.domElement);var e=this;s.each(this.__folders,function(t){e.removeFolder(t)}),a.unbind(window,"keydown",h._keydownHandler,!1),ye(this)},addFolder:function(e){if(void 0!==this.__folders[e])throw new Error('You already have a folder in this GUI by the name "'+e+'"');var t={name:e,parent:this};t.autoPlace=this.autoPlace,this.load&&this.load.folders&&this.load.folders[e]&&(t.closed=this.load.folders[e].closed,t.load=this.load.folders[e]);var i=new h(t);this.__folders[e]=i;var o=ee(this,i.domElement);return a.addClass(o,"folder"),i},removeFolder:function(e){this.__ul.removeChild(e.domElement.parentElement),delete this.__folders[e.name],this.load&&this.load.folders&&this.load.folders[e.name]&&delete this.load.folders[e.name],ye(e);var t=this;s.each(e.__folders,function(i){e.removeFolder(i)}),s.defer(function(){t.onResize()})},open:function(){this.closed=!1},close:function(){this.closed=!0},hide:function(){this.domElement.style.display="none"},show:function(){this.domElement.style.display=""},onResize:function(){var e=this.getRoot();if(e.scrollable){var t=a.getOffset(e.__ul).top,i=0;s.each(e.__ul.childNodes,function(o){e.autoPlace&&o===e.__save_row||(i+=a.getHeight(o))}),window.innerHeight-t-200&&(e.preset=this.preset,e.remembered||(e.remembered={}),e.remembered[this.preset]=Y(this)),e.folders={},s.each(this.__folders,function(t,i){e.folders[i]=t.getSaveObject()}),e},save:function(){this.load.remembered||(this.load.remembered={}),this.load.remembered[this.preset]=Y(this),te(this,!1),this.saveToLocalStorageIfPossible()},saveAs:function(e){this.load.remembered||(this.load.remembered={},this.load.remembered[P]=Y(this,!0)),this.load.remembered[e]=Y(this),this.preset=e,ne(this,e,!0),this.saveToLocalStorageIfPossible()},revert:function(e){s.each(this.__controllers,function(t){this.getRoot().load.remembered?we(e||this.getRoot(),t):t.setValue(t.initialValue),t.__onFinishChange&&t.__onFinishChange.call(t,t.getValue())},this),s.each(this.__folders,function(t){t.revert(t)}),e||te(this.getRoot(),!1)},listen:function(e){var t=0===this.__listening.length;this.__listening.push(e),t&&Ce(this.__listening)},updateDisplay:function(){s.each(this.__controllers,function(e){e.updateDisplay()}),s.each(this.__folders,function(e){e.updateDisplay()})}});var Ee={Color:g,math:H,interpret:$},Ae={Controller:k,BooleanController:J,OptionController:ue,StringController:ce,NumberController:Q,NumberControllerBox:D,NumberControllerSlider:X,FunctionController:q,ColorController:j},Se={dom:a},ke={GUI:h},Oe=h;const We={color:Ee,controllers:Ae,dom:Se,gui:ke,GUI:h}}}]); +//# sourceMappingURL=267.1edce052784b4e46.js.map \ No newline at end of file diff --git a/docs/267.1edce052784b4e46.js.map b/docs/267.1edce052784b4e46.js.map new file mode 100644 index 000000000..b726c7d40 --- /dev/null +++ b/docs/267.1edce052784b4e46.js.map @@ -0,0 +1 @@ +{"version":3,"file":"267.1edce052784b4e46.js","mappings":"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","names":["colorToString","color","forceCSSHex","colorFormat","__state","conversionName","toString","r","Math","round","g","b","a","h","s","toFixed","v","str","hex","length","ARR_EACH","Array","prototype","forEach","ARR_SLICE","slice","Common","BREAK","extend","target","each","call","arguments","obj","this","isObject","Object","keys","key","isUndefined","bind","defaults","compose","toCall","args","i","apply","itr","scope","l","_key","defer","fnc","setTimeout","debounce","func","threshold","callImmediately","timeout","callNow","clearTimeout","delayed","toArray","undefined","isNull","isNaN","_isNaN","_x","isArray","constructor","isNumber","isString","isBoolean","isFunction","Function","INTERPRETATIONS","litmus","conversions","THREE_CHAR_HEX","read","original","test","match","space","parseInt","write","SIX_CHAR_HEX","CSS_RGB","parseFloat","CSS_RGBA","HEX","RGB_ARRAY","RGBA_ARRAY","RGBA_OBJ","RGB_OBJ","HSVA_OBJ","HSV_OBJ","result","toReturn","interpret","family","conversion","tmpComponent","ColorMath","hsv_to_rgb","hi","floor","f","p","q","t","c","rgb_to_hsv","min","max","delta","NaN","rgb_to_hex","hex_with_component","component_from_hex","componentIndex","value","_typeof","Symbol","iterator","classCallCheck","instance","Constructor","TypeError","createClass","defineProperties","props","descriptor","enumerable","configurable","writable","defineProperty","protoProps","staticProps","get","object","property","receiver","desc","getOwnPropertyDescriptor","parent","getPrototypeOf","getter","inherits","subClass","superClass","create","setPrototypeOf","__proto__","possibleConstructorReturn","self","ReferenceError","Color","Error","defineRGBComponent","component","componentHexIndex","recalculateRGB","set","defineHSVComponent","recalculateHSV","COMPONENTS","Controller","initialValue","domElement","document","createElement","__onChange","__onFinishChange","newValue","updateDisplay","getValue","EVENT_MAP_INV","HTMLEvents","MouseEvents","KeyboardEvents","k","e","CSS_VALUE_PIXELS","cssValueToPixels","val","dom","makeSelectable","elem","selectable","style","onselectstart","MozUserSelect","KhtmlUserSelect","unselectable","makeFullscreen","hor","vert","vertical","horizontal","position","left","right","top","bottom","fakeEvent","eventType","pars","aux","params","className","evt","createEvent","initMouseEvent","bubbles","cancelable","window","clickCount","x","clientX","y","clientY","init","initKeyboardEvent","initKeyEvent","ctrlKey","altKey","shiftKey","metaKey","keyCode","charCode","initEvent","dispatchEvent","event","newBool","addEventListener","attachEvent","unbind","removeEventListener","detachEvent","addClass","classes","split","indexOf","push","join","replace","removeClass","removeAttribute","index","splice","hasClass","RegExp","getWidth","getComputedStyle","width","getHeight","height","getOffset","el","offset","offsetParent","offsetLeft","offsetTop","isActive","activeElement","type","href","BooleanController","_Controller","_this2","_this","__prev","__checkbox","setAttribute","onChange","setValue","appendChild","checked","OptionController","opts","options","__select","map","element","opt","innerHTML","selectedIndex","StringController","__input","onBlur","blur","numDecimals","NumberController","_params","__min","__max","__step","step","__impliedStep","pow","log","abs","LN10","__precision","_v","minValue","maxValue","stepValue","NumberControllerBox","_NumberController","__truncationSuspended","prevY","onFinish","onMouseDrag","diff","onMouseUp","attempted","onMouseDown","roundToDecimal","decimals","tenTo","i1","i2","o1","o2","NumberControllerSlider","preventDefault","bgRect","__background","getBoundingClientRect","onTouchMove","touches","onTouchEnd","__foreground","onTouchStart","pct","FunctionController","text","__button","fire","ColorController","__color","__temp","__selector","__saturation_field","__field_knob","__field_knob_border","__hue_knob","__hue_field","__input_textShadow","valueField","fieldDown","setSV","fieldUpSV","fieldDownH","setH","fieldUpH","toOriginal","fieldRect","_ref","padding","backgroundColor","boxShadow","border","borderRadius","zIndex","borderRight","marginRight","display","cursor","background","linearGradient","hueGradient","cssText","outline","textAlign","fontWeight","textShadow","mismatch","flip","_flip","marginLeft","marginTop","toHexString","vendors","vendor","saveDialogContents","ControllerFactory","requestAnimationFrame$1","requestAnimationFrame","webkitRequestAnimationFrame","mozRequestAnimationFrame","oRequestAnimationFrame","msRequestAnimationFrame","callback","CenteredDiv","backgroundElement","opacity","WebkitTransition","transition","body","hide","webkitTransform","layout","innerWidth","innerHeight","cssContent","indoc","doc","injected","head","getElementsByTagName","css","___$insertStyle","DEFAULT_DEFAULT_PRESET_NAME","SUPPORTS_LOCAL_STORAGE","localStorage","SAVE_DIALOGUE","autoPlaceVirgin","autoPlaceContainer","hideableGuis","GUI","__ul","__folders","__controllers","__rememberedObjects","__rememberedObjectIndecesToControllers","__listening","closeOnTop","autoPlace","DEFAULT_WIDTH","resizable","hideable","load","preset","scrollable","useLocalStorage","getItem","getLocalStorageHash","saveToLocalStorage","titleRow","getRoot","setPresetSelectIndex","gui","__preset_select","revert","setWidth","name","closed","CLASS_CLOSED","onResize","__closeButton","TEXT_OPEN","TEXT_CLOSED","bool","setItem","CLASS_MAIN","savedGui","JSON","parse","CLASS_CLOSE_BUTTON","CLASS_CLOSE_TOP","insertBefore","childNodes","CLASS_CLOSE_BOTTOM","titleRowName","createTextNode","addRow","CLASS_AUTO_PLACE_CONTAINER","CLASS_AUTO_PLACE","__resizeHandler","onResizeDebounced","addResizeHandle","pmouseX","drag","dragStop","CLASS_DRAG","dragStart","__resize_handle","firstElementChild","saveToLocalStorageIfPossible","stringify","getSaveObject","resetWidth","root","newDom","liBefore","li","removeListeners","markPresetModified","modified","recallSavedValue","controller","matchedIndex","controllerMap","remembered","presetMap","_add","factoryArgs","concat","before","__li","container","CLASS_CONTROLLER_ROW","augmentController","__gui","_options","nextSibling","nextElementSibling","remove","_nextSibling","_name","listen","box","method","pc","pb","returned","oldName","wasListening","newController","stopPropagation","borderLeftColor","isModified","location","addPresetOption","setSelected","showHideExplain","explain","w","__save_row","getCurrentPreset","useInitialValues","savedValues","updateDisplays","controllerArray","toggleHide","CLASS_TOO_TALL","_keydownHandler","which","add","addColor","removeChild","destroy","subfolder","removeFolder","addFolder","newGuiParams","folders","folder","parentElement","open","close","show","node","offsetHeight","remember","addSaveMenu","div","firstChild","gears","button","button2","button3","select","getElementById","localStorageCheckBox","newConstructorTextArea","focus","save","presetName","prompt","saveAs","math","controllers","dom$1","GUI$1"],"sourceRoot":"webpack:///","sources":["../node_modules/jsroot/modules/gui/dat.gui.mjs"],"sourcesContent":["/**\n * dat-gui JavaScript Controller Library\n * https://github.com/dataarts/dat.gui\n *\n * Copyright 2011 Data Arts Team, Google Creative Lab\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n */\n\nfunction ___$insertStyle(css) {\n if (!css) {\n return;\n }\n if (typeof window === 'undefined') {\n return;\n }\n\n var style = document.createElement('style');\n\n style.setAttribute('type', 'text/css');\n style.innerHTML = css;\n document.head.appendChild(style);\n\n return css;\n}\n\nfunction colorToString (color, forceCSSHex) {\n var colorFormat = color.__state.conversionName.toString();\n var r = Math.round(color.r);\n var g = Math.round(color.g);\n var b = Math.round(color.b);\n var a = color.a;\n var h = Math.round(color.h);\n var s = color.s.toFixed(1);\n var v = color.v.toFixed(1);\n if (forceCSSHex || colorFormat === 'THREE_CHAR_HEX' || colorFormat === 'SIX_CHAR_HEX') {\n var str = color.hex.toString(16);\n while (str.length < 6) {\n str = '0' + str;\n }\n return '#' + str;\n } else if (colorFormat === 'CSS_RGB') {\n return 'rgb(' + r + ',' + g + ',' + b + ')';\n } else if (colorFormat === 'CSS_RGBA') {\n return 'rgba(' + r + ',' + g + ',' + b + ',' + a + ')';\n } else if (colorFormat === 'HEX') {\n return '0x' + color.hex.toString(16);\n } else if (colorFormat === 'RGB_ARRAY') {\n return '[' + r + ',' + g + ',' + b + ']';\n } else if (colorFormat === 'RGBA_ARRAY') {\n return '[' + r + ',' + g + ',' + b + ',' + a + ']';\n } else if (colorFormat === 'RGB_OBJ') {\n return '{r:' + r + ',g:' + g + ',b:' + b + '}';\n } else if (colorFormat === 'RGBA_OBJ') {\n return '{r:' + r + ',g:' + g + ',b:' + b + ',a:' + a + '}';\n } else if (colorFormat === 'HSV_OBJ') {\n return '{h:' + h + ',s:' + s + ',v:' + v + '}';\n } else if (colorFormat === 'HSVA_OBJ') {\n return '{h:' + h + ',s:' + s + ',v:' + v + ',a:' + a + '}';\n }\n return 'unknown format';\n}\n\nvar ARR_EACH = Array.prototype.forEach;\nvar ARR_SLICE = Array.prototype.slice;\nvar Common = {\n BREAK: {},\n extend: function extend(target) {\n this.each(ARR_SLICE.call(arguments, 1), function (obj) {\n var keys = this.isObject(obj) ? Object.keys(obj) : [];\n keys.forEach(function (key) {\n if (!this.isUndefined(obj[key])) {\n target[key] = obj[key];\n }\n }.bind(this));\n }, this);\n return target;\n },\n defaults: function defaults(target) {\n this.each(ARR_SLICE.call(arguments, 1), function (obj) {\n var keys = this.isObject(obj) ? Object.keys(obj) : [];\n keys.forEach(function (key) {\n if (this.isUndefined(target[key])) {\n target[key] = obj[key];\n }\n }.bind(this));\n }, this);\n return target;\n },\n compose: function compose() {\n var toCall = ARR_SLICE.call(arguments);\n return function () {\n var args = ARR_SLICE.call(arguments);\n for (var i = toCall.length - 1; i >= 0; i--) {\n args = [toCall[i].apply(this, args)];\n }\n return args[0];\n };\n },\n each: function each(obj, itr, scope) {\n if (!obj) {\n return;\n }\n if (ARR_EACH && obj.forEach && obj.forEach === ARR_EACH) {\n obj.forEach(itr, scope);\n } else if (obj.length === obj.length + 0) {\n var key = void 0;\n var l = void 0;\n for (key = 0, l = obj.length; key < l; key++) {\n if (key in obj && itr.call(scope, obj[key], key) === this.BREAK) {\n return;\n }\n }\n } else {\n for (var _key in obj) {\n if (itr.call(scope, obj[_key], _key) === this.BREAK) {\n return;\n }\n }\n }\n },\n defer: function defer(fnc) {\n setTimeout(fnc, 0);\n },\n debounce: function debounce(func, threshold, callImmediately) {\n var timeout = void 0;\n return function () {\n var obj = this;\n var args = arguments;\n function delayed() {\n timeout = null;\n if (!callImmediately) func.apply(obj, args);\n }\n var callNow = callImmediately || !timeout;\n clearTimeout(timeout);\n timeout = setTimeout(delayed, threshold);\n if (callNow) {\n func.apply(obj, args);\n }\n };\n },\n toArray: function toArray(obj) {\n if (obj.toArray) return obj.toArray();\n return ARR_SLICE.call(obj);\n },\n isUndefined: function isUndefined(obj) {\n return obj === undefined;\n },\n isNull: function isNull(obj) {\n return obj === null;\n },\n isNaN: function (_isNaN) {\n function isNaN(_x) {\n return _isNaN.apply(this, arguments);\n }\n isNaN.toString = function () {\n return _isNaN.toString();\n };\n return isNaN;\n }(function (obj) {\n return isNaN(obj);\n }),\n isArray: Array.isArray || function (obj) {\n return obj.constructor === Array;\n },\n isObject: function isObject(obj) {\n return obj === Object(obj);\n },\n isNumber: function isNumber(obj) {\n return obj === obj + 0;\n },\n isString: function isString(obj) {\n return obj === obj + '';\n },\n isBoolean: function isBoolean(obj) {\n return obj === false || obj === true;\n },\n isFunction: function isFunction(obj) {\n return obj instanceof Function;\n }\n};\n\nvar INTERPRETATIONS = [\n{\n litmus: Common.isString,\n conversions: {\n THREE_CHAR_HEX: {\n read: function read(original) {\n var test = original.match(/^#([A-F0-9])([A-F0-9])([A-F0-9])$/i);\n if (test === null) {\n return false;\n }\n return {\n space: 'HEX',\n hex: parseInt('0x' + test[1].toString() + test[1].toString() + test[2].toString() + test[2].toString() + test[3].toString() + test[3].toString(), 0)\n };\n },\n write: colorToString\n },\n SIX_CHAR_HEX: {\n read: function read(original) {\n var test = original.match(/^#([A-F0-9]{6})$/i);\n if (test === null) {\n return false;\n }\n return {\n space: 'HEX',\n hex: parseInt('0x' + test[1].toString(), 0)\n };\n },\n write: colorToString\n },\n CSS_RGB: {\n read: function read(original) {\n var test = original.match(/^rgb\\(\\s*(\\S+)\\s*,\\s*(\\S+)\\s*,\\s*(\\S+)\\s*\\)/);\n if (test === null) {\n return false;\n }\n return {\n space: 'RGB',\n r: parseFloat(test[1]),\n g: parseFloat(test[2]),\n b: parseFloat(test[3])\n };\n },\n write: colorToString\n },\n CSS_RGBA: {\n read: function read(original) {\n var test = original.match(/^rgba\\(\\s*(\\S+)\\s*,\\s*(\\S+)\\s*,\\s*(\\S+)\\s*,\\s*(\\S+)\\s*\\)/);\n if (test === null) {\n return false;\n }\n return {\n space: 'RGB',\n r: parseFloat(test[1]),\n g: parseFloat(test[2]),\n b: parseFloat(test[3]),\n a: parseFloat(test[4])\n };\n },\n write: colorToString\n }\n }\n},\n{\n litmus: Common.isNumber,\n conversions: {\n HEX: {\n read: function read(original) {\n return {\n space: 'HEX',\n hex: original,\n conversionName: 'HEX'\n };\n },\n write: function write(color) {\n return color.hex;\n }\n }\n }\n},\n{\n litmus: Common.isArray,\n conversions: {\n RGB_ARRAY: {\n read: function read(original) {\n if (original.length !== 3) {\n return false;\n }\n return {\n space: 'RGB',\n r: original[0],\n g: original[1],\n b: original[2]\n };\n },\n write: function write(color) {\n return [color.r, color.g, color.b];\n }\n },\n RGBA_ARRAY: {\n read: function read(original) {\n if (original.length !== 4) return false;\n return {\n space: 'RGB',\n r: original[0],\n g: original[1],\n b: original[2],\n a: original[3]\n };\n },\n write: function write(color) {\n return [color.r, color.g, color.b, color.a];\n }\n }\n }\n},\n{\n litmus: Common.isObject,\n conversions: {\n RGBA_OBJ: {\n read: function read(original) {\n if (Common.isNumber(original.r) && Common.isNumber(original.g) && Common.isNumber(original.b) && Common.isNumber(original.a)) {\n return {\n space: 'RGB',\n r: original.r,\n g: original.g,\n b: original.b,\n a: original.a\n };\n }\n return false;\n },\n write: function write(color) {\n return {\n r: color.r,\n g: color.g,\n b: color.b,\n a: color.a\n };\n }\n },\n RGB_OBJ: {\n read: function read(original) {\n if (Common.isNumber(original.r) && Common.isNumber(original.g) && Common.isNumber(original.b)) {\n return {\n space: 'RGB',\n r: original.r,\n g: original.g,\n b: original.b\n };\n }\n return false;\n },\n write: function write(color) {\n return {\n r: color.r,\n g: color.g,\n b: color.b\n };\n }\n },\n HSVA_OBJ: {\n read: function read(original) {\n if (Common.isNumber(original.h) && Common.isNumber(original.s) && Common.isNumber(original.v) && Common.isNumber(original.a)) {\n return {\n space: 'HSV',\n h: original.h,\n s: original.s,\n v: original.v,\n a: original.a\n };\n }\n return false;\n },\n write: function write(color) {\n return {\n h: color.h,\n s: color.s,\n v: color.v,\n a: color.a\n };\n }\n },\n HSV_OBJ: {\n read: function read(original) {\n if (Common.isNumber(original.h) && Common.isNumber(original.s) && Common.isNumber(original.v)) {\n return {\n space: 'HSV',\n h: original.h,\n s: original.s,\n v: original.v\n };\n }\n return false;\n },\n write: function write(color) {\n return {\n h: color.h,\n s: color.s,\n v: color.v\n };\n }\n }\n }\n}];\nvar result = void 0;\nvar toReturn = void 0;\nvar interpret = function interpret() {\n toReturn = false;\n var original = arguments.length > 1 ? Common.toArray(arguments) : arguments[0];\n Common.each(INTERPRETATIONS, function (family) {\n if (family.litmus(original)) {\n Common.each(family.conversions, function (conversion, conversionName) {\n result = conversion.read(original);\n if (toReturn === false && result !== false) {\n toReturn = result;\n result.conversionName = conversionName;\n result.conversion = conversion;\n return Common.BREAK;\n }\n });\n return Common.BREAK;\n }\n });\n return toReturn;\n};\n\nvar tmpComponent = void 0;\nvar ColorMath = {\n hsv_to_rgb: function hsv_to_rgb(h, s, v) {\n var hi = Math.floor(h / 60) % 6;\n var f = h / 60 - Math.floor(h / 60);\n var p = v * (1.0 - s);\n var q = v * (1.0 - f * s);\n var t = v * (1.0 - (1.0 - f) * s);\n var c = [[v, t, p], [q, v, p], [p, v, t], [p, q, v], [t, p, v], [v, p, q]][hi];\n return {\n r: c[0] * 255,\n g: c[1] * 255,\n b: c[2] * 255\n };\n },\n rgb_to_hsv: function rgb_to_hsv(r, g, b) {\n var min = Math.min(r, g, b);\n var max = Math.max(r, g, b);\n var delta = max - min;\n var h = void 0;\n var s = void 0;\n if (max !== 0) {\n s = delta / max;\n } else {\n return {\n h: NaN,\n s: 0,\n v: 0\n };\n }\n if (r === max) {\n h = (g - b) / delta;\n } else if (g === max) {\n h = 2 + (b - r) / delta;\n } else {\n h = 4 + (r - g) / delta;\n }\n h /= 6;\n if (h < 0) {\n h += 1;\n }\n return {\n h: h * 360,\n s: s,\n v: max / 255\n };\n },\n rgb_to_hex: function rgb_to_hex(r, g, b) {\n var hex = this.hex_with_component(0, 2, r);\n hex = this.hex_with_component(hex, 1, g);\n hex = this.hex_with_component(hex, 0, b);\n return hex;\n },\n component_from_hex: function component_from_hex(hex, componentIndex) {\n return hex >> componentIndex * 8 & 0xFF;\n },\n hex_with_component: function hex_with_component(hex, componentIndex, value) {\n return value << (tmpComponent = componentIndex * 8) | hex & ~(0xFF << tmpComponent);\n }\n};\n\nvar _typeof = typeof Symbol === 'function' && typeof Symbol.iterator === \"symbol\" ? function (obj) {\n return typeof obj;\n} : function (obj) {\n return obj && typeof Symbol === 'function' && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n};\n\n\n\n\n\n\n\n\n\n\n\nvar classCallCheck = function (instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError(\"Cannot call a class as a function\");\n }\n};\n\nvar createClass = function () {\n function defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if (\"value\" in descriptor) descriptor.writable = true;\n Object.defineProperty(target, descriptor.key, descriptor);\n }\n }\n\n return function (Constructor, protoProps, staticProps) {\n if (protoProps) defineProperties(Constructor.prototype, protoProps);\n if (staticProps) defineProperties(Constructor, staticProps);\n return Constructor;\n };\n}();\n\n\n\n\n\n\n\nvar get = function get(object, property, receiver) {\n if (object === null) object = Function.prototype;\n var desc = Object.getOwnPropertyDescriptor(object, property);\n\n if (desc === undefined) {\n var parent = Object.getPrototypeOf(object);\n\n if (parent === null) {\n return undefined;\n } else {\n return get(parent, property, receiver);\n }\n } else if (\"value\" in desc) {\n return desc.value;\n } else {\n var getter = desc.get;\n\n if (getter === undefined) {\n return undefined;\n }\n\n return getter.call(receiver);\n }\n};\n\nvar inherits = function (subClass, superClass) {\n if (typeof superClass !== 'function' && superClass !== null) {\n throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass);\n }\n\n subClass.prototype = Object.create(superClass && superClass.prototype, {\n constructor: {\n value: subClass,\n enumerable: false,\n writable: true,\n configurable: true\n }\n });\n if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass;\n};\n\n\n\n\n\n\n\n\n\n\n\nvar possibleConstructorReturn = function (self, call) {\n if (!self) {\n throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");\n }\n\n return call && (typeof call === 'object' || typeof call === 'function') ? call : self;\n};\n\nvar Color = function () {\n function Color() {\n classCallCheck(this, Color);\n this.__state = interpret.apply(this, arguments);\n if (this.__state === false) {\n throw new Error('Failed to interpret color arguments');\n }\n this.__state.a = this.__state.a || 1;\n }\n createClass(Color, [{\n key: 'toString',\n value: function toString() {\n return colorToString(this);\n }\n }, {\n key: 'toHexString',\n value: function toHexString() {\n return colorToString(this, true);\n }\n }, {\n key: 'toOriginal',\n value: function toOriginal() {\n return this.__state.conversion.write(this);\n }\n }]);\n return Color;\n}();\nfunction defineRGBComponent(target, component, componentHexIndex) {\n Object.defineProperty(target, component, {\n get: function get$$1() {\n if (this.__state.space === 'RGB') {\n return this.__state[component];\n }\n Color.recalculateRGB(this, component, componentHexIndex);\n return this.__state[component];\n },\n set: function set$$1(v) {\n if (this.__state.space !== 'RGB') {\n Color.recalculateRGB(this, component, componentHexIndex);\n this.__state.space = 'RGB';\n }\n this.__state[component] = v;\n }\n });\n}\nfunction defineHSVComponent(target, component) {\n Object.defineProperty(target, component, {\n get: function get$$1() {\n if (this.__state.space === 'HSV') {\n return this.__state[component];\n }\n Color.recalculateHSV(this);\n return this.__state[component];\n },\n set: function set$$1(v) {\n if (this.__state.space !== 'HSV') {\n Color.recalculateHSV(this);\n this.__state.space = 'HSV';\n }\n this.__state[component] = v;\n }\n });\n}\nColor.recalculateRGB = function (color, component, componentHexIndex) {\n if (color.__state.space === 'HEX') {\n color.__state[component] = ColorMath.component_from_hex(color.__state.hex, componentHexIndex);\n } else if (color.__state.space === 'HSV') {\n Common.extend(color.__state, ColorMath.hsv_to_rgb(color.__state.h, color.__state.s, color.__state.v));\n } else {\n throw new Error('Corrupted color state');\n }\n};\nColor.recalculateHSV = function (color) {\n var result = ColorMath.rgb_to_hsv(color.r, color.g, color.b);\n Common.extend(color.__state, {\n s: result.s,\n v: result.v\n });\n if (!Common.isNaN(result.h)) {\n color.__state.h = result.h;\n } else if (Common.isUndefined(color.__state.h)) {\n color.__state.h = 0;\n }\n};\nColor.COMPONENTS = ['r', 'g', 'b', 'h', 's', 'v', 'hex', 'a'];\ndefineRGBComponent(Color.prototype, 'r', 2);\ndefineRGBComponent(Color.prototype, 'g', 1);\ndefineRGBComponent(Color.prototype, 'b', 0);\ndefineHSVComponent(Color.prototype, 'h');\ndefineHSVComponent(Color.prototype, 's');\ndefineHSVComponent(Color.prototype, 'v');\nObject.defineProperty(Color.prototype, 'a', {\n get: function get$$1() {\n return this.__state.a;\n },\n set: function set$$1(v) {\n this.__state.a = v;\n }\n});\nObject.defineProperty(Color.prototype, 'hex', {\n get: function get$$1() {\n if (this.__state.space !== 'HEX') {\n this.__state.hex = ColorMath.rgb_to_hex(this.r, this.g, this.b);\n this.__state.space = 'HEX';\n }\n return this.__state.hex;\n },\n set: function set$$1(v) {\n this.__state.space = 'HEX';\n this.__state.hex = v;\n }\n});\n\nvar Controller = function () {\n function Controller(object, property) {\n classCallCheck(this, Controller);\n this.initialValue = object[property];\n this.domElement = document.createElement('div');\n this.object = object;\n this.property = property;\n this.__onChange = undefined;\n this.__onFinishChange = undefined;\n }\n createClass(Controller, [{\n key: 'onChange',\n value: function onChange(fnc) {\n this.__onChange = fnc;\n return this;\n }\n }, {\n key: 'onFinishChange',\n value: function onFinishChange(fnc) {\n this.__onFinishChange = fnc;\n return this;\n }\n }, {\n key: 'setValue',\n value: function setValue(newValue) {\n this.object[this.property] = newValue;\n if (this.__onChange) {\n this.__onChange.call(this, newValue);\n }\n this.updateDisplay();\n return this;\n }\n }, {\n key: 'getValue',\n value: function getValue() {\n return this.object[this.property];\n }\n }, {\n key: 'updateDisplay',\n value: function updateDisplay() {\n return this;\n }\n }, {\n key: 'isModified',\n value: function isModified() {\n return this.initialValue !== this.getValue();\n }\n }]);\n return Controller;\n}();\n\nvar EVENT_MAP = {\n HTMLEvents: ['change'],\n MouseEvents: ['click', 'mousemove', 'mousedown', 'mouseup', 'mouseover'],\n KeyboardEvents: ['keydown']\n};\nvar EVENT_MAP_INV = {};\nCommon.each(EVENT_MAP, function (v, k) {\n Common.each(v, function (e) {\n EVENT_MAP_INV[e] = k;\n });\n});\nvar CSS_VALUE_PIXELS = /(\\d+(\\.\\d+)?)px/;\nfunction cssValueToPixels(val) {\n if (val === '0' || Common.isUndefined(val)) {\n return 0;\n }\n var match = val.match(CSS_VALUE_PIXELS);\n if (!Common.isNull(match)) {\n return parseFloat(match[1]);\n }\n return 0;\n}\nvar dom = {\n makeSelectable: function makeSelectable(elem, selectable) {\n if (elem === undefined || elem.style === undefined) return;\n elem.onselectstart = selectable ? function () {\n return false;\n } : function () {};\n elem.style.MozUserSelect = selectable ? 'auto' : 'none';\n elem.style.KhtmlUserSelect = selectable ? 'auto' : 'none';\n elem.unselectable = selectable ? 'on' : 'off';\n },\n makeFullscreen: function makeFullscreen(elem, hor, vert) {\n var vertical = vert;\n var horizontal = hor;\n if (Common.isUndefined(horizontal)) {\n horizontal = true;\n }\n if (Common.isUndefined(vertical)) {\n vertical = true;\n }\n elem.style.position = 'absolute';\n if (horizontal) {\n elem.style.left = 0;\n elem.style.right = 0;\n }\n if (vertical) {\n elem.style.top = 0;\n elem.style.bottom = 0;\n }\n },\n fakeEvent: function fakeEvent(elem, eventType, pars, aux) {\n var params = pars || {};\n var className = EVENT_MAP_INV[eventType];\n if (!className) {\n throw new Error('Event type ' + eventType + ' not supported.');\n }\n var evt = document.createEvent(className);\n switch (className) {\n case 'MouseEvents':\n {\n var clientX = params.x || params.clientX || 0;\n var clientY = params.y || params.clientY || 0;\n evt.initMouseEvent(eventType, params.bubbles || false, params.cancelable || true, window, params.clickCount || 1, 0,\n 0,\n clientX,\n clientY,\n false, false, false, false, 0, null);\n break;\n }\n case 'KeyboardEvents':\n {\n var init = evt.initKeyboardEvent || evt.initKeyEvent;\n Common.defaults(params, {\n cancelable: true,\n ctrlKey: false,\n altKey: false,\n shiftKey: false,\n metaKey: false,\n keyCode: undefined,\n charCode: undefined\n });\n init(eventType, params.bubbles || false, params.cancelable, window, params.ctrlKey, params.altKey, params.shiftKey, params.metaKey, params.keyCode, params.charCode);\n break;\n }\n default:\n {\n evt.initEvent(eventType, params.bubbles || false, params.cancelable || true);\n break;\n }\n }\n Common.defaults(evt, aux);\n elem.dispatchEvent(evt);\n },\n bind: function bind(elem, event, func, newBool) {\n var bool = newBool || false;\n if (elem.addEventListener) {\n elem.addEventListener(event, func, bool);\n } else if (elem.attachEvent) {\n elem.attachEvent('on' + event, func);\n }\n return dom;\n },\n unbind: function unbind(elem, event, func, newBool) {\n var bool = newBool || false;\n if (elem.removeEventListener) {\n elem.removeEventListener(event, func, bool);\n } else if (elem.detachEvent) {\n elem.detachEvent('on' + event, func);\n }\n return dom;\n },\n addClass: function addClass(elem, className) {\n if (elem.className === undefined) {\n elem.className = className;\n } else if (elem.className !== className) {\n var classes = elem.className.split(/ +/);\n if (classes.indexOf(className) === -1) {\n classes.push(className);\n elem.className = classes.join(' ').replace(/^\\s+/, '').replace(/\\s+$/, '');\n }\n }\n return dom;\n },\n removeClass: function removeClass(elem, className) {\n if (className) {\n if (elem.className === className) {\n elem.removeAttribute('class');\n } else {\n var classes = elem.className.split(/ +/);\n var index = classes.indexOf(className);\n if (index !== -1) {\n classes.splice(index, 1);\n elem.className = classes.join(' ');\n }\n }\n } else {\n elem.className = undefined;\n }\n return dom;\n },\n hasClass: function hasClass(elem, className) {\n return new RegExp('(?:^|\\\\s+)' + className + '(?:\\\\s+|$)').test(elem.className) || false;\n },\n getWidth: function getWidth(elem) {\n var style = getComputedStyle(elem);\n return cssValueToPixels(style['border-left-width']) + cssValueToPixels(style['border-right-width']) + cssValueToPixels(style['padding-left']) + cssValueToPixels(style['padding-right']) + cssValueToPixels(style.width);\n },\n getHeight: function getHeight(elem) {\n var style = getComputedStyle(elem);\n return cssValueToPixels(style['border-top-width']) + cssValueToPixels(style['border-bottom-width']) + cssValueToPixels(style['padding-top']) + cssValueToPixels(style['padding-bottom']) + cssValueToPixels(style.height);\n },\n getOffset: function getOffset(el) {\n var elem = el;\n var offset = { left: 0, top: 0 };\n if (elem.offsetParent) {\n do {\n offset.left += elem.offsetLeft;\n offset.top += elem.offsetTop;\n elem = elem.offsetParent;\n } while (elem);\n }\n return offset;\n },\n isActive: function isActive(elem) {\n return elem === document.activeElement && (elem.type || elem.href);\n }\n};\n\nvar BooleanController = function (_Controller) {\n inherits(BooleanController, _Controller);\n function BooleanController(object, property) {\n classCallCheck(this, BooleanController);\n var _this2 = possibleConstructorReturn(this, (BooleanController.__proto__ || Object.getPrototypeOf(BooleanController)).call(this, object, property));\n var _this = _this2;\n _this2.__prev = _this2.getValue();\n _this2.__checkbox = document.createElement('input');\n _this2.__checkbox.setAttribute('type', 'checkbox');\n function onChange() {\n _this.setValue(!_this.__prev);\n }\n dom.bind(_this2.__checkbox, 'change', onChange, false);\n _this2.domElement.appendChild(_this2.__checkbox);\n _this2.updateDisplay();\n return _this2;\n }\n createClass(BooleanController, [{\n key: 'setValue',\n value: function setValue(v) {\n var toReturn = get(BooleanController.prototype.__proto__ || Object.getPrototypeOf(BooleanController.prototype), 'setValue', this).call(this, v);\n if (this.__onFinishChange) {\n this.__onFinishChange.call(this, this.getValue());\n }\n this.__prev = this.getValue();\n return toReturn;\n }\n }, {\n key: 'updateDisplay',\n value: function updateDisplay() {\n if (this.getValue() === true) {\n this.__checkbox.setAttribute('checked', 'checked');\n this.__checkbox.checked = true;\n this.__prev = true;\n } else {\n this.__checkbox.checked = false;\n this.__prev = false;\n }\n return get(BooleanController.prototype.__proto__ || Object.getPrototypeOf(BooleanController.prototype), 'updateDisplay', this).call(this);\n }\n }]);\n return BooleanController;\n}(Controller);\n\nvar OptionController = function (_Controller) {\n inherits(OptionController, _Controller);\n function OptionController(object, property, opts) {\n classCallCheck(this, OptionController);\n var _this2 = possibleConstructorReturn(this, (OptionController.__proto__ || Object.getPrototypeOf(OptionController)).call(this, object, property));\n var options = opts;\n var _this = _this2;\n _this2.__select = document.createElement('select');\n if (Common.isArray(options)) {\n var map = {};\n Common.each(options, function (element) {\n map[element] = element;\n });\n options = map;\n }\n Common.each(options, function (value, key) {\n var opt = document.createElement('option');\n opt.innerHTML = key;\n opt.setAttribute('value', value);\n _this.__select.appendChild(opt);\n });\n _this2.updateDisplay();\n dom.bind(_this2.__select, 'change', function () {\n var desiredValue = this.options[this.selectedIndex].value;\n _this.setValue(desiredValue);\n });\n _this2.domElement.appendChild(_this2.__select);\n return _this2;\n }\n createClass(OptionController, [{\n key: 'setValue',\n value: function setValue(v) {\n var toReturn = get(OptionController.prototype.__proto__ || Object.getPrototypeOf(OptionController.prototype), 'setValue', this).call(this, v);\n if (this.__onFinishChange) {\n this.__onFinishChange.call(this, this.getValue());\n }\n return toReturn;\n }\n }, {\n key: 'updateDisplay',\n value: function updateDisplay() {\n if (dom.isActive(this.__select)) return this;\n this.__select.value = this.getValue();\n return get(OptionController.prototype.__proto__ || Object.getPrototypeOf(OptionController.prototype), 'updateDisplay', this).call(this);\n }\n }]);\n return OptionController;\n}(Controller);\n\nvar StringController = function (_Controller) {\n inherits(StringController, _Controller);\n function StringController(object, property) {\n classCallCheck(this, StringController);\n var _this2 = possibleConstructorReturn(this, (StringController.__proto__ || Object.getPrototypeOf(StringController)).call(this, object, property));\n var _this = _this2;\n function onChange() {\n _this.setValue(_this.__input.value);\n }\n function onBlur() {\n if (_this.__onFinishChange) {\n _this.__onFinishChange.call(_this, _this.getValue());\n }\n }\n _this2.__input = document.createElement('input');\n _this2.__input.setAttribute('type', 'text');\n dom.bind(_this2.__input, 'keyup', onChange);\n dom.bind(_this2.__input, 'change', onChange);\n dom.bind(_this2.__input, 'blur', onBlur);\n dom.bind(_this2.__input, 'keydown', function (e) {\n if (e.keyCode === 13) {\n this.blur();\n }\n });\n _this2.updateDisplay();\n _this2.domElement.appendChild(_this2.__input);\n return _this2;\n }\n createClass(StringController, [{\n key: 'updateDisplay',\n value: function updateDisplay() {\n if (!dom.isActive(this.__input)) {\n this.__input.value = this.getValue();\n }\n return get(StringController.prototype.__proto__ || Object.getPrototypeOf(StringController.prototype), 'updateDisplay', this).call(this);\n }\n }]);\n return StringController;\n}(Controller);\n\nfunction numDecimals(x) {\n var _x = x.toString();\n if (_x.indexOf('.') > -1) {\n return _x.length - _x.indexOf('.') - 1;\n }\n return 0;\n}\nvar NumberController = function (_Controller) {\n inherits(NumberController, _Controller);\n function NumberController(object, property, params) {\n classCallCheck(this, NumberController);\n var _this = possibleConstructorReturn(this, (NumberController.__proto__ || Object.getPrototypeOf(NumberController)).call(this, object, property));\n var _params = params || {};\n _this.__min = _params.min;\n _this.__max = _params.max;\n _this.__step = _params.step;\n if (Common.isUndefined(_this.__step)) {\n if (_this.initialValue === 0) {\n _this.__impliedStep = 1;\n } else {\n _this.__impliedStep = Math.pow(10, Math.floor(Math.log(Math.abs(_this.initialValue)) / Math.LN10)) / 10;\n }\n } else {\n _this.__impliedStep = _this.__step;\n }\n _this.__precision = numDecimals(_this.__impliedStep);\n return _this;\n }\n createClass(NumberController, [{\n key: 'setValue',\n value: function setValue(v) {\n var _v = v;\n if (this.__min !== undefined && _v < this.__min) {\n _v = this.__min;\n } else if (this.__max !== undefined && _v > this.__max) {\n _v = this.__max;\n }\n if (this.__step !== undefined && _v % this.__step !== 0) {\n _v = Math.round(_v / this.__step) * this.__step;\n }\n return get(NumberController.prototype.__proto__ || Object.getPrototypeOf(NumberController.prototype), 'setValue', this).call(this, _v);\n }\n }, {\n key: 'min',\n value: function min(minValue) {\n this.__min = minValue;\n return this;\n }\n }, {\n key: 'max',\n value: function max(maxValue) {\n this.__max = maxValue;\n return this;\n }\n }, {\n key: 'step',\n value: function step(stepValue) {\n this.__step = stepValue;\n this.__impliedStep = stepValue;\n this.__precision = numDecimals(stepValue);\n return this;\n }\n }]);\n return NumberController;\n}(Controller);\n\nfunction roundToDecimal(value, decimals) {\n var tenTo = Math.pow(10, decimals);\n return Math.round(value * tenTo) / tenTo;\n}\nvar NumberControllerBox = function (_NumberController) {\n inherits(NumberControllerBox, _NumberController);\n function NumberControllerBox(object, property, params) {\n classCallCheck(this, NumberControllerBox);\n var _this2 = possibleConstructorReturn(this, (NumberControllerBox.__proto__ || Object.getPrototypeOf(NumberControllerBox)).call(this, object, property, params));\n _this2.__truncationSuspended = false;\n var _this = _this2;\n var prevY = void 0;\n function onChange() {\n var attempted = parseFloat(_this.__input.value);\n if (!Common.isNaN(attempted)) {\n _this.setValue(attempted);\n }\n }\n function onFinish() {\n if (_this.__onFinishChange) {\n _this.__onFinishChange.call(_this, _this.getValue());\n }\n }\n function onBlur() {\n onFinish();\n }\n function onMouseDrag(e) {\n var diff = prevY - e.clientY;\n _this.setValue(_this.getValue() + diff * _this.__impliedStep);\n prevY = e.clientY;\n }\n function onMouseUp() {\n dom.unbind(window, 'mousemove', onMouseDrag);\n dom.unbind(window, 'mouseup', onMouseUp);\n onFinish();\n }\n function onMouseDown(e) {\n dom.bind(window, 'mousemove', onMouseDrag);\n dom.bind(window, 'mouseup', onMouseUp);\n prevY = e.clientY;\n }\n _this2.__input = document.createElement('input');\n _this2.__input.setAttribute('type', 'text');\n dom.bind(_this2.__input, 'change', onChange);\n dom.bind(_this2.__input, 'blur', onBlur);\n dom.bind(_this2.__input, 'mousedown', onMouseDown);\n dom.bind(_this2.__input, 'keydown', function (e) {\n if (e.keyCode === 13) {\n _this.__truncationSuspended = true;\n this.blur();\n _this.__truncationSuspended = false;\n onFinish();\n }\n });\n _this2.updateDisplay();\n _this2.domElement.appendChild(_this2.__input);\n return _this2;\n }\n createClass(NumberControllerBox, [{\n key: 'updateDisplay',\n value: function updateDisplay() {\n this.__input.value = this.__truncationSuspended ? this.getValue() : roundToDecimal(this.getValue(), this.__precision);\n return get(NumberControllerBox.prototype.__proto__ || Object.getPrototypeOf(NumberControllerBox.prototype), 'updateDisplay', this).call(this);\n }\n }]);\n return NumberControllerBox;\n}(NumberController);\n\nfunction map(v, i1, i2, o1, o2) {\n return o1 + (o2 - o1) * ((v - i1) / (i2 - i1));\n}\nvar NumberControllerSlider = function (_NumberController) {\n inherits(NumberControllerSlider, _NumberController);\n function NumberControllerSlider(object, property, min, max, step) {\n classCallCheck(this, NumberControllerSlider);\n var _this2 = possibleConstructorReturn(this, (NumberControllerSlider.__proto__ || Object.getPrototypeOf(NumberControllerSlider)).call(this, object, property, { min: min, max: max, step: step }));\n var _this = _this2;\n _this2.__background = document.createElement('div');\n _this2.__foreground = document.createElement('div');\n dom.bind(_this2.__background, 'mousedown', onMouseDown);\n dom.bind(_this2.__background, 'touchstart', onTouchStart);\n dom.addClass(_this2.__background, 'slider');\n dom.addClass(_this2.__foreground, 'slider-fg');\n function onMouseDown(e) {\n document.activeElement.blur();\n dom.bind(window, 'mousemove', onMouseDrag);\n dom.bind(window, 'mouseup', onMouseUp);\n onMouseDrag(e);\n }\n function onMouseDrag(e) {\n e.preventDefault();\n var bgRect = _this.__background.getBoundingClientRect();\n _this.setValue(map(e.clientX, bgRect.left, bgRect.right, _this.__min, _this.__max));\n return false;\n }\n function onMouseUp() {\n dom.unbind(window, 'mousemove', onMouseDrag);\n dom.unbind(window, 'mouseup', onMouseUp);\n if (_this.__onFinishChange) {\n _this.__onFinishChange.call(_this, _this.getValue());\n }\n }\n function onTouchStart(e) {\n if (e.touches.length !== 1) {\n return;\n }\n dom.bind(window, 'touchmove', onTouchMove);\n dom.bind(window, 'touchend', onTouchEnd);\n onTouchMove(e);\n }\n function onTouchMove(e) {\n var clientX = e.touches[0].clientX;\n var bgRect = _this.__background.getBoundingClientRect();\n _this.setValue(map(clientX, bgRect.left, bgRect.right, _this.__min, _this.__max));\n }\n function onTouchEnd() {\n dom.unbind(window, 'touchmove', onTouchMove);\n dom.unbind(window, 'touchend', onTouchEnd);\n if (_this.__onFinishChange) {\n _this.__onFinishChange.call(_this, _this.getValue());\n }\n }\n _this2.updateDisplay();\n _this2.__background.appendChild(_this2.__foreground);\n _this2.domElement.appendChild(_this2.__background);\n return _this2;\n }\n createClass(NumberControllerSlider, [{\n key: 'updateDisplay',\n value: function updateDisplay() {\n var pct = (this.getValue() - this.__min) / (this.__max - this.__min);\n this.__foreground.style.width = pct * 100 + '%';\n return get(NumberControllerSlider.prototype.__proto__ || Object.getPrototypeOf(NumberControllerSlider.prototype), 'updateDisplay', this).call(this);\n }\n }]);\n return NumberControllerSlider;\n}(NumberController);\n\nvar FunctionController = function (_Controller) {\n inherits(FunctionController, _Controller);\n function FunctionController(object, property, text) {\n classCallCheck(this, FunctionController);\n var _this2 = possibleConstructorReturn(this, (FunctionController.__proto__ || Object.getPrototypeOf(FunctionController)).call(this, object, property));\n var _this = _this2;\n _this2.__button = document.createElement('div');\n _this2.__button.innerHTML = text === undefined ? 'Fire' : text;\n dom.bind(_this2.__button, 'click', function (e) {\n e.preventDefault();\n _this.fire();\n return false;\n });\n dom.addClass(_this2.__button, 'button');\n _this2.domElement.appendChild(_this2.__button);\n return _this2;\n }\n createClass(FunctionController, [{\n key: 'fire',\n value: function fire() {\n if (this.__onChange) {\n this.__onChange.call(this);\n }\n this.getValue().call(this.object);\n if (this.__onFinishChange) {\n this.__onFinishChange.call(this, this.getValue());\n }\n }\n }]);\n return FunctionController;\n}(Controller);\n\nvar ColorController = function (_Controller) {\n inherits(ColorController, _Controller);\n function ColorController(object, property) {\n classCallCheck(this, ColorController);\n var _this2 = possibleConstructorReturn(this, (ColorController.__proto__ || Object.getPrototypeOf(ColorController)).call(this, object, property));\n _this2.__color = new Color(_this2.getValue());\n _this2.__temp = new Color(0);\n var _this = _this2;\n _this2.domElement = document.createElement('div');\n dom.makeSelectable(_this2.domElement, false);\n _this2.__selector = document.createElement('div');\n _this2.__selector.className = 'selector';\n _this2.__saturation_field = document.createElement('div');\n _this2.__saturation_field.className = 'saturation-field';\n _this2.__field_knob = document.createElement('div');\n _this2.__field_knob.className = 'field-knob';\n _this2.__field_knob_border = '2px solid ';\n _this2.__hue_knob = document.createElement('div');\n _this2.__hue_knob.className = 'hue-knob';\n _this2.__hue_field = document.createElement('div');\n _this2.__hue_field.className = 'hue-field';\n _this2.__input = document.createElement('input');\n _this2.__input.type = 'text';\n _this2.__input_textShadow = '0 1px 1px ';\n dom.bind(_this2.__input, 'keydown', function (e) {\n if (e.keyCode === 13) {\n onBlur.call(this);\n }\n });\n dom.bind(_this2.__input, 'blur', onBlur);\n dom.bind(_this2.__selector, 'mousedown', function () {\n dom.addClass(this, 'drag').bind(window, 'mouseup', function () {\n dom.removeClass(_this.__selector, 'drag');\n });\n });\n dom.bind(_this2.__selector, 'touchstart', function () {\n dom.addClass(this, 'drag').bind(window, 'touchend', function () {\n dom.removeClass(_this.__selector, 'drag');\n });\n });\n var valueField = document.createElement('div');\n Common.extend(_this2.__selector.style, {\n width: '122px',\n height: '102px',\n padding: '3px',\n backgroundColor: '#222',\n boxShadow: '0px 1px 3px rgba(0,0,0,0.3)'\n });\n Common.extend(_this2.__field_knob.style, {\n position: 'absolute',\n width: '12px',\n height: '12px',\n border: _this2.__field_knob_border + (_this2.__color.v < 0.5 ? '#fff' : '#000'),\n boxShadow: '0px 1px 3px rgba(0,0,0,0.5)',\n borderRadius: '12px',\n zIndex: 1\n });\n Common.extend(_this2.__hue_knob.style, {\n position: 'absolute',\n width: '15px',\n height: '2px',\n borderRight: '4px solid #fff',\n zIndex: 1\n });\n Common.extend(_this2.__saturation_field.style, {\n width: '100px',\n height: '100px',\n border: '1px solid #555',\n marginRight: '3px',\n display: 'inline-block',\n cursor: 'pointer'\n });\n Common.extend(valueField.style, {\n width: '100%',\n height: '100%',\n background: 'none'\n });\n linearGradient(valueField, 'top', 'rgba(0,0,0,0)', '#000');\n Common.extend(_this2.__hue_field.style, {\n width: '15px',\n height: '100px',\n border: '1px solid #555',\n cursor: 'ns-resize',\n position: 'absolute',\n top: '3px',\n right: '3px'\n });\n hueGradient(_this2.__hue_field);\n Common.extend(_this2.__input.style, {\n outline: 'none',\n textAlign: 'center',\n color: '#fff',\n border: 0,\n fontWeight: 'bold',\n textShadow: _this2.__input_textShadow + 'rgba(0,0,0,0.7)'\n });\n dom.bind(_this2.__saturation_field, 'mousedown', fieldDown);\n dom.bind(_this2.__saturation_field, 'touchstart', fieldDown);\n dom.bind(_this2.__field_knob, 'mousedown', fieldDown);\n dom.bind(_this2.__field_knob, 'touchstart', fieldDown);\n dom.bind(_this2.__hue_field, 'mousedown', fieldDownH);\n dom.bind(_this2.__hue_field, 'touchstart', fieldDownH);\n function fieldDown(e) {\n setSV(e);\n dom.bind(window, 'mousemove', setSV);\n dom.bind(window, 'touchmove', setSV);\n dom.bind(window, 'mouseup', fieldUpSV);\n dom.bind(window, 'touchend', fieldUpSV);\n }\n function fieldDownH(e) {\n setH(e);\n dom.bind(window, 'mousemove', setH);\n dom.bind(window, 'touchmove', setH);\n dom.bind(window, 'mouseup', fieldUpH);\n dom.bind(window, 'touchend', fieldUpH);\n }\n function fieldUpSV() {\n dom.unbind(window, 'mousemove', setSV);\n dom.unbind(window, 'touchmove', setSV);\n dom.unbind(window, 'mouseup', fieldUpSV);\n dom.unbind(window, 'touchend', fieldUpSV);\n onFinish();\n }\n function fieldUpH() {\n dom.unbind(window, 'mousemove', setH);\n dom.unbind(window, 'touchmove', setH);\n dom.unbind(window, 'mouseup', fieldUpH);\n dom.unbind(window, 'touchend', fieldUpH);\n onFinish();\n }\n function onBlur() {\n var i = interpret(this.value);\n if (i !== false) {\n _this.__color.__state = i;\n _this.setValue(_this.__color.toOriginal());\n } else {\n this.value = _this.__color.toString();\n }\n }\n function onFinish() {\n if (_this.__onFinishChange) {\n _this.__onFinishChange.call(_this, _this.__color.toOriginal());\n }\n }\n _this2.__saturation_field.appendChild(valueField);\n _this2.__selector.appendChild(_this2.__field_knob);\n _this2.__selector.appendChild(_this2.__saturation_field);\n _this2.__selector.appendChild(_this2.__hue_field);\n _this2.__hue_field.appendChild(_this2.__hue_knob);\n _this2.domElement.appendChild(_this2.__input);\n _this2.domElement.appendChild(_this2.__selector);\n _this2.updateDisplay();\n function setSV(e) {\n if (e.type.indexOf('touch') === -1) {\n e.preventDefault();\n }\n var fieldRect = _this.__saturation_field.getBoundingClientRect();\n var _ref = e.touches && e.touches[0] || e,\n clientX = _ref.clientX,\n clientY = _ref.clientY;\n var s = (clientX - fieldRect.left) / (fieldRect.right - fieldRect.left);\n var v = 1 - (clientY - fieldRect.top) / (fieldRect.bottom - fieldRect.top);\n if (v > 1) {\n v = 1;\n } else if (v < 0) {\n v = 0;\n }\n if (s > 1) {\n s = 1;\n } else if (s < 0) {\n s = 0;\n }\n _this.__color.v = v;\n _this.__color.s = s;\n _this.setValue(_this.__color.toOriginal());\n return false;\n }\n function setH(e) {\n if (e.type.indexOf('touch') === -1) {\n e.preventDefault();\n }\n var fieldRect = _this.__hue_field.getBoundingClientRect();\n var _ref2 = e.touches && e.touches[0] || e,\n clientY = _ref2.clientY;\n var h = 1 - (clientY - fieldRect.top) / (fieldRect.bottom - fieldRect.top);\n if (h > 1) {\n h = 1;\n } else if (h < 0) {\n h = 0;\n }\n _this.__color.h = h * 360;\n _this.setValue(_this.__color.toOriginal());\n return false;\n }\n return _this2;\n }\n createClass(ColorController, [{\n key: 'updateDisplay',\n value: function updateDisplay() {\n var i = interpret(this.getValue());\n if (i !== false) {\n var mismatch = false;\n Common.each(Color.COMPONENTS, function (component) {\n if (!Common.isUndefined(i[component]) && !Common.isUndefined(this.__color.__state[component]) && i[component] !== this.__color.__state[component]) {\n mismatch = true;\n return {};\n }\n }, this);\n if (mismatch) {\n Common.extend(this.__color.__state, i);\n }\n }\n Common.extend(this.__temp.__state, this.__color.__state);\n this.__temp.a = 1;\n var flip = this.__color.v < 0.5 || this.__color.s > 0.5 ? 255 : 0;\n var _flip = 255 - flip;\n Common.extend(this.__field_knob.style, {\n marginLeft: 100 * this.__color.s - 7 + 'px',\n marginTop: 100 * (1 - this.__color.v) - 7 + 'px',\n backgroundColor: this.__temp.toHexString(),\n border: this.__field_knob_border + 'rgb(' + flip + ',' + flip + ',' + flip + ')'\n });\n this.__hue_knob.style.marginTop = (1 - this.__color.h / 360) * 100 + 'px';\n this.__temp.s = 1;\n this.__temp.v = 1;\n linearGradient(this.__saturation_field, 'left', '#fff', this.__temp.toHexString());\n this.__input.value = this.__color.toString();\n Common.extend(this.__input.style, {\n backgroundColor: this.__color.toHexString(),\n color: 'rgb(' + flip + ',' + flip + ',' + flip + ')',\n textShadow: this.__input_textShadow + 'rgba(' + _flip + ',' + _flip + ',' + _flip + ',.7)'\n });\n }\n }]);\n return ColorController;\n}(Controller);\nvar vendors = ['-moz-', '-o-', '-webkit-', '-ms-', ''];\nfunction linearGradient(elem, x, a, b) {\n elem.style.background = '';\n Common.each(vendors, function (vendor) {\n elem.style.cssText += 'background: ' + vendor + 'linear-gradient(' + x + ', ' + a + ' 0%, ' + b + ' 100%); ';\n });\n}\nfunction hueGradient(elem) {\n elem.style.background = '';\n elem.style.cssText += 'background: -moz-linear-gradient(top, #ff0000 0%, #ff00ff 17%, #0000ff 34%, #00ffff 50%, #00ff00 67%, #ffff00 84%, #ff0000 100%);';\n elem.style.cssText += 'background: -webkit-linear-gradient(top, #ff0000 0%,#ff00ff 17%,#0000ff 34%,#00ffff 50%,#00ff00 67%,#ffff00 84%,#ff0000 100%);';\n elem.style.cssText += 'background: -o-linear-gradient(top, #ff0000 0%,#ff00ff 17%,#0000ff 34%,#00ffff 50%,#00ff00 67%,#ffff00 84%,#ff0000 100%);';\n elem.style.cssText += 'background: -ms-linear-gradient(top, #ff0000 0%,#ff00ff 17%,#0000ff 34%,#00ffff 50%,#00ff00 67%,#ffff00 84%,#ff0000 100%);';\n elem.style.cssText += 'background: linear-gradient(top, #ff0000 0%,#ff00ff 17%,#0000ff 34%,#00ffff 50%,#00ff00 67%,#ffff00 84%,#ff0000 100%);';\n}\n\nvar css = {\n load: function load(url, indoc) {\n var doc = indoc || document;\n var link = doc.createElement('link');\n link.type = 'text/css';\n link.rel = 'stylesheet';\n link.href = url;\n doc.getElementsByTagName('head')[0].appendChild(link);\n },\n inject: function inject(cssContent, indoc) {\n var doc = indoc || document;\n var injected = document.createElement('style');\n injected.type = 'text/css';\n injected.innerHTML = cssContent;\n var head = doc.getElementsByTagName('head')[0];\n try {\n head.appendChild(injected);\n } catch (e) {\n }\n }\n};\n\nvar saveDialogContents = \"
\\n\\n Here's the new load parameter for your GUI's constructor:\\n\\n \\n\\n
\\n\\n Automatically save\\n values to localStorage on exit.\\n\\n
The values saved to localStorage will\\n override those passed to dat.GUI's constructor. This makes it\\n easier to work incrementally, but localStorage is fragile,\\n and your friends may not see the same values you do.\\n\\n
\\n\\n
\\n\\n
\";\n\nvar ControllerFactory = function ControllerFactory(object, property) {\n var initialValue = object[property];\n if (Common.isArray(arguments[2]) || Common.isObject(arguments[2])) {\n return new OptionController(object, property, arguments[2]);\n }\n if (Common.isNumber(initialValue)) {\n if (Common.isNumber(arguments[2]) && Common.isNumber(arguments[3])) {\n if (Common.isNumber(arguments[4])) {\n return new NumberControllerSlider(object, property, arguments[2], arguments[3], arguments[4]);\n }\n return new NumberControllerSlider(object, property, arguments[2], arguments[3]);\n }\n if (Common.isNumber(arguments[4])) {\n return new NumberControllerBox(object, property, { min: arguments[2], max: arguments[3], step: arguments[4] });\n }\n return new NumberControllerBox(object, property, { min: arguments[2], max: arguments[3] });\n }\n if (Common.isString(initialValue)) {\n return new StringController(object, property);\n }\n if (Common.isFunction(initialValue)) {\n return new FunctionController(object, property, '');\n }\n if (Common.isBoolean(initialValue)) {\n return new BooleanController(object, property);\n }\n return null;\n};\n\nfunction requestAnimationFrame(callback) {\n setTimeout(callback, 1000 / 60);\n}\nvar requestAnimationFrame$1 = window.requestAnimationFrame || window.webkitRequestAnimationFrame || window.mozRequestAnimationFrame || window.oRequestAnimationFrame || window.msRequestAnimationFrame || requestAnimationFrame;\n\nvar CenteredDiv = function () {\n function CenteredDiv() {\n classCallCheck(this, CenteredDiv);\n this.backgroundElement = document.createElement('div');\n Common.extend(this.backgroundElement.style, {\n backgroundColor: 'rgba(0,0,0,0.8)',\n top: 0,\n left: 0,\n display: 'none',\n zIndex: '1000',\n opacity: 0,\n WebkitTransition: 'opacity 0.2s linear',\n transition: 'opacity 0.2s linear'\n });\n dom.makeFullscreen(this.backgroundElement);\n this.backgroundElement.style.position = 'fixed';\n this.domElement = document.createElement('div');\n Common.extend(this.domElement.style, {\n position: 'fixed',\n display: 'none',\n zIndex: '1001',\n opacity: 0,\n WebkitTransition: '-webkit-transform 0.2s ease-out, opacity 0.2s linear',\n transition: 'transform 0.2s ease-out, opacity 0.2s linear'\n });\n document.body.appendChild(this.backgroundElement);\n document.body.appendChild(this.domElement);\n var _this = this;\n dom.bind(this.backgroundElement, 'click', function () {\n _this.hide();\n });\n }\n createClass(CenteredDiv, [{\n key: 'show',\n value: function show() {\n var _this = this;\n this.backgroundElement.style.display = 'block';\n this.domElement.style.display = 'block';\n this.domElement.style.opacity = 0;\n this.domElement.style.webkitTransform = 'scale(1.1)';\n this.layout();\n Common.defer(function () {\n _this.backgroundElement.style.opacity = 1;\n _this.domElement.style.opacity = 1;\n _this.domElement.style.webkitTransform = 'scale(1)';\n });\n }\n }, {\n key: 'hide',\n value: function hide() {\n var _this = this;\n var hide = function hide() {\n _this.domElement.style.display = 'none';\n _this.backgroundElement.style.display = 'none';\n dom.unbind(_this.domElement, 'webkitTransitionEnd', hide);\n dom.unbind(_this.domElement, 'transitionend', hide);\n dom.unbind(_this.domElement, 'oTransitionEnd', hide);\n };\n dom.bind(this.domElement, 'webkitTransitionEnd', hide);\n dom.bind(this.domElement, 'transitionend', hide);\n dom.bind(this.domElement, 'oTransitionEnd', hide);\n this.backgroundElement.style.opacity = 0;\n this.domElement.style.opacity = 0;\n this.domElement.style.webkitTransform = 'scale(1.1)';\n }\n }, {\n key: 'layout',\n value: function layout() {\n this.domElement.style.left = window.innerWidth / 2 - dom.getWidth(this.domElement) / 2 + 'px';\n this.domElement.style.top = window.innerHeight / 2 - dom.getHeight(this.domElement) / 2 + 'px';\n }\n }]);\n return CenteredDiv;\n}();\n\nvar styleSheet = ___$insertStyle(\".dg ul{list-style:none;margin:0;padding:0;width:100%;clear:both}.dg.ac{position:fixed;top:0;left:0;right:0;height:0;z-index:0}.dg:not(.ac) .main{overflow:hidden}.dg.main{-webkit-transition:opacity .1s linear;-o-transition:opacity .1s linear;-moz-transition:opacity .1s linear;transition:opacity .1s linear}.dg.main.taller-than-window{overflow-y:auto}.dg.main.taller-than-window .close-button{opacity:1;margin-top:-1px;border-top:1px solid #2c2c2c}.dg.main ul.closed .close-button{opacity:1 !important}.dg.main:hover .close-button,.dg.main .close-button.drag{opacity:1}.dg.main .close-button{-webkit-transition:opacity .1s linear;-o-transition:opacity .1s linear;-moz-transition:opacity .1s linear;transition:opacity .1s linear;border:0;line-height:19px;height:20px;cursor:pointer;text-align:center;background-color:#000}.dg.main .close-button.close-top{position:relative}.dg.main .close-button.close-bottom{position:absolute}.dg.main .close-button:hover{background-color:#111}.dg.a{float:right;margin-right:15px;overflow-y:visible}.dg.a.has-save>ul.close-top{margin-top:0}.dg.a.has-save>ul.close-bottom{margin-top:27px}.dg.a.has-save>ul.closed{margin-top:0}.dg.a .save-row{top:0;z-index:1002}.dg.a .save-row.close-top{position:relative}.dg.a .save-row.close-bottom{position:fixed}.dg li{-webkit-transition:height .1s ease-out;-o-transition:height .1s ease-out;-moz-transition:height .1s ease-out;transition:height .1s ease-out;-webkit-transition:overflow .1s linear;-o-transition:overflow .1s linear;-moz-transition:overflow .1s linear;transition:overflow .1s linear}.dg li:not(.folder){cursor:auto;height:27px;line-height:27px;padding:0 4px 0 5px}.dg li.folder{padding:0;border-left:4px solid rgba(0,0,0,0)}.dg li.title{cursor:pointer;margin-left:-4px}.dg .closed li:not(.title),.dg .closed ul li,.dg .closed ul li>*{height:0;overflow:hidden;border:0}.dg .cr{clear:both;padding-left:3px;height:27px;overflow:hidden}.dg .property-name{cursor:default;float:left;clear:left;width:40%;overflow:hidden;text-overflow:ellipsis}.dg .cr.function .property-name{width:100%}.dg .c{float:left;width:60%;position:relative}.dg .c input[type=text]{border:0;margin-top:4px;padding:3px;width:100%;float:right}.dg .has-slider input[type=text]{width:30%;margin-left:0}.dg .slider{float:left;width:66%;margin-left:-5px;margin-right:0;height:19px;margin-top:4px}.dg .slider-fg{height:100%}.dg .c input[type=checkbox]{margin-top:7px}.dg .c select{margin-top:5px}.dg .cr.function,.dg .cr.function .property-name,.dg .cr.function *,.dg .cr.boolean,.dg .cr.boolean *{cursor:pointer}.dg .cr.color{overflow:visible}.dg .selector{display:none;position:absolute;margin-left:-9px;margin-top:23px;z-index:10}.dg .c:hover .selector,.dg .selector.drag{display:block}.dg li.save-row{padding:0}.dg li.save-row .button{display:inline-block;padding:0px 6px}.dg.dialogue{background-color:#222;width:460px;padding:15px;font-size:13px;line-height:15px}#dg-new-constructor{padding:10px;color:#222;font-family:Monaco, monospace;font-size:10px;border:0;resize:none;box-shadow:inset 1px 1px 1px #888;word-wrap:break-word;margin:12px 0;display:block;width:440px;overflow-y:scroll;height:100px;position:relative}#dg-local-explain{display:none;font-size:11px;line-height:17px;border-radius:3px;background-color:#333;padding:8px;margin-top:10px}#dg-local-explain code{font-size:10px}#dat-gui-save-locally{display:none}.dg{color:#eee;font:11px 'Lucida Grande', sans-serif;text-shadow:0 -1px 0 #111}.dg.main::-webkit-scrollbar{width:5px;background:#1a1a1a}.dg.main::-webkit-scrollbar-corner{height:0;display:none}.dg.main::-webkit-scrollbar-thumb{border-radius:5px;background:#676767}.dg li:not(.folder){background:#1a1a1a;border-bottom:1px solid #2c2c2c}.dg li.save-row{line-height:25px;background:#dad5cb;border:0}.dg li.save-row select{margin-left:5px;width:108px}.dg li.save-row .button{margin-left:5px;margin-top:1px;border-radius:2px;font-size:9px;line-height:7px;padding:4px 4px 5px 4px;background:#c5bdad;color:#fff;text-shadow:0 1px 0 #b0a58f;box-shadow:0 -1px 0 #b0a58f;cursor:pointer}.dg li.save-row .button.gears{background:#c5bdad url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAsAAAANCAYAAAB/9ZQ7AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAQJJREFUeNpiYKAU/P//PwGIC/ApCABiBSAW+I8AClAcgKxQ4T9hoMAEUrxx2QSGN6+egDX+/vWT4e7N82AMYoPAx/evwWoYoSYbACX2s7KxCxzcsezDh3evFoDEBYTEEqycggWAzA9AuUSQQgeYPa9fPv6/YWm/Acx5IPb7ty/fw+QZblw67vDs8R0YHyQhgObx+yAJkBqmG5dPPDh1aPOGR/eugW0G4vlIoTIfyFcA+QekhhHJhPdQxbiAIguMBTQZrPD7108M6roWYDFQiIAAv6Aow/1bFwXgis+f2LUAynwoIaNcz8XNx3Dl7MEJUDGQpx9gtQ8YCueB+D26OECAAQDadt7e46D42QAAAABJRU5ErkJggg==) 2px 1px no-repeat;height:7px;width:8px}.dg li.save-row .button:hover{background-color:#bab19e;box-shadow:0 -1px 0 #b0a58f}.dg li.folder{border-bottom:0}.dg li.title{padding-left:16px;background:#000 url(data:image/gif;base64,R0lGODlhBQAFAJEAAP////Pz8////////yH5BAEAAAIALAAAAAAFAAUAAAIIlI+hKgFxoCgAOw==) 6px 10px no-repeat;cursor:pointer;border-bottom:1px solid rgba(255,255,255,0.2)}.dg .closed li.title{background-image:url(data:image/gif;base64,R0lGODlhBQAFAJEAAP////Pz8////////yH5BAEAAAIALAAAAAAFAAUAAAIIlGIWqMCbWAEAOw==)}.dg .cr.boolean{border-left:3px solid #806787}.dg .cr.color{border-left:3px solid}.dg .cr.function{border-left:3px solid #e61d5f}.dg .cr.number{border-left:3px solid #2FA1D6}.dg .cr.number input[type=text]{color:#2FA1D6}.dg .cr.string{border-left:3px solid #1ed36f}.dg .cr.string input[type=text]{color:#1ed36f}.dg .cr.function:hover,.dg .cr.boolean:hover{background:#111}.dg .c input[type=text]{background:#303030;outline:none}.dg .c input[type=text]:hover{background:#3c3c3c}.dg .c input[type=text]:focus{background:#494949;color:#fff}.dg .c .slider{background:#303030;cursor:ew-resize}.dg .c .slider-fg{background:#2FA1D6;max-width:100%}.dg .c .slider:hover{background:#3c3c3c}.dg .c .slider:hover .slider-fg{background:#44abda}\\n\");\n\ncss.inject(styleSheet);\nvar CSS_NAMESPACE = 'dg';\nvar HIDE_KEY_CODE = 72;\nvar CLOSE_BUTTON_HEIGHT = 20;\nvar DEFAULT_DEFAULT_PRESET_NAME = 'Default';\nvar SUPPORTS_LOCAL_STORAGE = function () {\n try {\n return !!window.localStorage;\n } catch (e) {\n return false;\n }\n}();\nvar SAVE_DIALOGUE = void 0;\nvar autoPlaceVirgin = true;\nvar autoPlaceContainer = void 0;\nvar hide = false;\nvar hideableGuis = [];\nvar GUI = function GUI(pars) {\n var _this = this;\n var params = pars || {};\n this.domElement = document.createElement('div');\n this.__ul = document.createElement('ul');\n this.domElement.appendChild(this.__ul);\n dom.addClass(this.domElement, CSS_NAMESPACE);\n this.__folders = {};\n this.__controllers = [];\n this.__rememberedObjects = [];\n this.__rememberedObjectIndecesToControllers = [];\n this.__listening = [];\n params = Common.defaults(params, {\n closeOnTop: false,\n autoPlace: true,\n width: GUI.DEFAULT_WIDTH\n });\n params = Common.defaults(params, {\n resizable: params.autoPlace,\n hideable: params.autoPlace\n });\n if (!Common.isUndefined(params.load)) {\n if (params.preset) {\n params.load.preset = params.preset;\n }\n } else {\n params.load = { preset: DEFAULT_DEFAULT_PRESET_NAME };\n }\n if (Common.isUndefined(params.parent) && params.hideable) {\n hideableGuis.push(this);\n }\n params.resizable = Common.isUndefined(params.parent) && params.resizable;\n if (params.autoPlace && Common.isUndefined(params.scrollable)) {\n params.scrollable = true;\n }\n var useLocalStorage = SUPPORTS_LOCAL_STORAGE && localStorage.getItem(getLocalStorageHash(this, 'isLocal')) === 'true';\n var saveToLocalStorage = void 0;\n var titleRow = void 0;\n Object.defineProperties(this,\n {\n parent: {\n get: function get$$1() {\n return params.parent;\n }\n },\n scrollable: {\n get: function get$$1() {\n return params.scrollable;\n }\n },\n autoPlace: {\n get: function get$$1() {\n return params.autoPlace;\n }\n },\n closeOnTop: {\n get: function get$$1() {\n return params.closeOnTop;\n }\n },\n preset: {\n get: function get$$1() {\n if (_this.parent) {\n return _this.getRoot().preset;\n }\n return params.load.preset;\n },\n set: function set$$1(v) {\n if (_this.parent) {\n _this.getRoot().preset = v;\n } else {\n params.load.preset = v;\n }\n setPresetSelectIndex(this);\n _this.revert();\n }\n },\n width: {\n get: function get$$1() {\n return params.width;\n },\n set: function set$$1(v) {\n params.width = v;\n setWidth(_this, v);\n }\n },\n name: {\n get: function get$$1() {\n return params.name;\n },\n set: function set$$1(v) {\n params.name = v;\n if (titleRow) {\n titleRow.innerHTML = params.name;\n }\n }\n },\n closed: {\n get: function get$$1() {\n return params.closed;\n },\n set: function set$$1(v) {\n params.closed = v;\n if (params.closed) {\n dom.addClass(_this.__ul, GUI.CLASS_CLOSED);\n } else {\n dom.removeClass(_this.__ul, GUI.CLASS_CLOSED);\n }\n this.onResize();\n if (_this.__closeButton) {\n _this.__closeButton.innerHTML = v ? GUI.TEXT_OPEN : GUI.TEXT_CLOSED;\n }\n }\n },\n load: {\n get: function get$$1() {\n return params.load;\n }\n },\n useLocalStorage: {\n get: function get$$1() {\n return useLocalStorage;\n },\n set: function set$$1(bool) {\n if (SUPPORTS_LOCAL_STORAGE) {\n useLocalStorage = bool;\n if (bool) {\n dom.bind(window, 'unload', saveToLocalStorage);\n } else {\n dom.unbind(window, 'unload', saveToLocalStorage);\n }\n localStorage.setItem(getLocalStorageHash(_this, 'isLocal'), bool);\n }\n }\n }\n });\n if (Common.isUndefined(params.parent)) {\n this.closed = params.closed || false;\n dom.addClass(this.domElement, GUI.CLASS_MAIN);\n dom.makeSelectable(this.domElement, false);\n if (SUPPORTS_LOCAL_STORAGE) {\n if (useLocalStorage) {\n _this.useLocalStorage = true;\n var savedGui = localStorage.getItem(getLocalStorageHash(this, 'gui'));\n if (savedGui) {\n params.load = JSON.parse(savedGui);\n }\n }\n }\n this.__closeButton = document.createElement('div');\n this.__closeButton.innerHTML = GUI.TEXT_CLOSED;\n dom.addClass(this.__closeButton, GUI.CLASS_CLOSE_BUTTON);\n if (params.closeOnTop) {\n dom.addClass(this.__closeButton, GUI.CLASS_CLOSE_TOP);\n this.domElement.insertBefore(this.__closeButton, this.domElement.childNodes[0]);\n } else {\n dom.addClass(this.__closeButton, GUI.CLASS_CLOSE_BOTTOM);\n this.domElement.appendChild(this.__closeButton);\n }\n dom.bind(this.__closeButton, 'click', function () {\n _this.closed = !_this.closed;\n });\n } else {\n if (params.closed === undefined) {\n params.closed = true;\n }\n var titleRowName = document.createTextNode(params.name);\n dom.addClass(titleRowName, 'controller-name');\n titleRow = addRow(_this, titleRowName);\n var onClickTitle = function onClickTitle(e) {\n e.preventDefault();\n _this.closed = !_this.closed;\n return false;\n };\n dom.addClass(this.__ul, GUI.CLASS_CLOSED);\n dom.addClass(titleRow, 'title');\n dom.bind(titleRow, 'click', onClickTitle);\n if (!params.closed) {\n this.closed = false;\n }\n }\n if (params.autoPlace) {\n if (Common.isUndefined(params.parent)) {\n if (autoPlaceVirgin) {\n autoPlaceContainer = document.createElement('div');\n dom.addClass(autoPlaceContainer, CSS_NAMESPACE);\n dom.addClass(autoPlaceContainer, GUI.CLASS_AUTO_PLACE_CONTAINER);\n document.body.appendChild(autoPlaceContainer);\n autoPlaceVirgin = false;\n }\n autoPlaceContainer.appendChild(this.domElement);\n dom.addClass(this.domElement, GUI.CLASS_AUTO_PLACE);\n }\n if (!this.parent) {\n setWidth(_this, params.width);\n }\n }\n this.__resizeHandler = function () {\n _this.onResizeDebounced();\n };\n dom.bind(window, 'resize', this.__resizeHandler);\n dom.bind(this.__ul, 'webkitTransitionEnd', this.__resizeHandler);\n dom.bind(this.__ul, 'transitionend', this.__resizeHandler);\n dom.bind(this.__ul, 'oTransitionEnd', this.__resizeHandler);\n this.onResize();\n if (params.resizable) {\n addResizeHandle(this);\n }\n saveToLocalStorage = function saveToLocalStorage() {\n if (SUPPORTS_LOCAL_STORAGE && localStorage.getItem(getLocalStorageHash(_this, 'isLocal')) === 'true') {\n localStorage.setItem(getLocalStorageHash(_this, 'gui'), JSON.stringify(_this.getSaveObject()));\n }\n };\n this.saveToLocalStorageIfPossible = saveToLocalStorage;\n function resetWidth() {\n var root = _this.getRoot();\n root.width += 1;\n Common.defer(function () {\n root.width -= 1;\n });\n }\n if (!params.parent) {\n resetWidth();\n }\n};\nGUI.toggleHide = function () {\n hide = !hide;\n Common.each(hideableGuis, function (gui) {\n gui.domElement.style.display = hide ? 'none' : '';\n });\n};\nGUI.CLASS_AUTO_PLACE = 'a';\nGUI.CLASS_AUTO_PLACE_CONTAINER = 'ac';\nGUI.CLASS_MAIN = 'main';\nGUI.CLASS_CONTROLLER_ROW = 'cr';\nGUI.CLASS_TOO_TALL = 'taller-than-window';\nGUI.CLASS_CLOSED = 'closed';\nGUI.CLASS_CLOSE_BUTTON = 'close-button';\nGUI.CLASS_CLOSE_TOP = 'close-top';\nGUI.CLASS_CLOSE_BOTTOM = 'close-bottom';\nGUI.CLASS_DRAG = 'drag';\nGUI.DEFAULT_WIDTH = 245;\nGUI.TEXT_CLOSED = 'Close Controls';\nGUI.TEXT_OPEN = 'Open Controls';\nGUI._keydownHandler = function (e) {\n if (document.activeElement.type !== 'text' && (e.which === HIDE_KEY_CODE || e.keyCode === HIDE_KEY_CODE)) {\n GUI.toggleHide();\n }\n};\ndom.bind(window, 'keydown', GUI._keydownHandler, false);\nCommon.extend(GUI.prototype,\n{\n add: function add(object, property) {\n return _add(this, object, property, {\n factoryArgs: Array.prototype.slice.call(arguments, 2)\n });\n },\n addColor: function addColor(object, property) {\n return _add(this, object, property, {\n color: true\n });\n },\n remove: function remove(controller) {\n this.__ul.removeChild(controller.__li);\n this.__controllers.splice(this.__controllers.indexOf(controller), 1);\n var _this = this;\n Common.defer(function () {\n _this.onResize();\n });\n },\n destroy: function destroy() {\n if (this.parent) {\n throw new Error('Only the root GUI should be removed with .destroy(). ' + 'For subfolders, use gui.removeFolder(folder) instead.');\n }\n if (this.autoPlace) {\n autoPlaceContainer.removeChild(this.domElement);\n }\n var _this = this;\n Common.each(this.__folders, function (subfolder) {\n _this.removeFolder(subfolder);\n });\n dom.unbind(window, 'keydown', GUI._keydownHandler, false);\n removeListeners(this);\n },\n addFolder: function addFolder(name) {\n if (this.__folders[name] !== undefined) {\n throw new Error('You already have a folder in this GUI by the' + ' name \"' + name + '\"');\n }\n var newGuiParams = { name: name, parent: this };\n newGuiParams.autoPlace = this.autoPlace;\n if (this.load &&\n this.load.folders &&\n this.load.folders[name]) {\n newGuiParams.closed = this.load.folders[name].closed;\n newGuiParams.load = this.load.folders[name];\n }\n var gui = new GUI(newGuiParams);\n this.__folders[name] = gui;\n var li = addRow(this, gui.domElement);\n dom.addClass(li, 'folder');\n return gui;\n },\n removeFolder: function removeFolder(folder) {\n this.__ul.removeChild(folder.domElement.parentElement);\n delete this.__folders[folder.name];\n if (this.load &&\n this.load.folders &&\n this.load.folders[folder.name]) {\n delete this.load.folders[folder.name];\n }\n removeListeners(folder);\n var _this = this;\n Common.each(folder.__folders, function (subfolder) {\n folder.removeFolder(subfolder);\n });\n Common.defer(function () {\n _this.onResize();\n });\n },\n open: function open() {\n this.closed = false;\n },\n close: function close() {\n this.closed = true;\n },\n hide: function hide() {\n this.domElement.style.display = 'none';\n },\n show: function show() {\n this.domElement.style.display = '';\n },\n onResize: function onResize() {\n var root = this.getRoot();\n if (root.scrollable) {\n var top = dom.getOffset(root.__ul).top;\n var h = 0;\n Common.each(root.__ul.childNodes, function (node) {\n if (!(root.autoPlace && node === root.__save_row)) {\n h += dom.getHeight(node);\n }\n });\n if (window.innerHeight - top - CLOSE_BUTTON_HEIGHT < h) {\n dom.addClass(root.domElement, GUI.CLASS_TOO_TALL);\n root.__ul.style.height = window.innerHeight - top - CLOSE_BUTTON_HEIGHT + 'px';\n } else {\n dom.removeClass(root.domElement, GUI.CLASS_TOO_TALL);\n root.__ul.style.height = 'auto';\n }\n }\n if (root.__resize_handle) {\n Common.defer(function () {\n root.__resize_handle.style.height = root.__ul.offsetHeight + 'px';\n });\n }\n if (root.__closeButton) {\n root.__closeButton.style.width = root.width + 'px';\n }\n },\n onResizeDebounced: Common.debounce(function () {\n this.onResize();\n }, 50),\n remember: function remember() {\n if (Common.isUndefined(SAVE_DIALOGUE)) {\n SAVE_DIALOGUE = new CenteredDiv();\n SAVE_DIALOGUE.domElement.innerHTML = saveDialogContents;\n }\n if (this.parent) {\n throw new Error('You can only call remember on a top level GUI.');\n }\n var _this = this;\n Common.each(Array.prototype.slice.call(arguments), function (object) {\n if (_this.__rememberedObjects.length === 0) {\n addSaveMenu(_this);\n }\n if (_this.__rememberedObjects.indexOf(object) === -1) {\n _this.__rememberedObjects.push(object);\n }\n });\n if (this.autoPlace) {\n setWidth(this, this.width);\n }\n },\n getRoot: function getRoot() {\n var gui = this;\n while (gui.parent) {\n gui = gui.parent;\n }\n return gui;\n },\n getSaveObject: function getSaveObject() {\n var toReturn = this.load;\n toReturn.closed = this.closed;\n if (this.__rememberedObjects.length > 0) {\n toReturn.preset = this.preset;\n if (!toReturn.remembered) {\n toReturn.remembered = {};\n }\n toReturn.remembered[this.preset] = getCurrentPreset(this);\n }\n toReturn.folders = {};\n Common.each(this.__folders, function (element, key) {\n toReturn.folders[key] = element.getSaveObject();\n });\n return toReturn;\n },\n save: function save() {\n if (!this.load.remembered) {\n this.load.remembered = {};\n }\n this.load.remembered[this.preset] = getCurrentPreset(this);\n markPresetModified(this, false);\n this.saveToLocalStorageIfPossible();\n },\n saveAs: function saveAs(presetName) {\n if (!this.load.remembered) {\n this.load.remembered = {};\n this.load.remembered[DEFAULT_DEFAULT_PRESET_NAME] = getCurrentPreset(this, true);\n }\n this.load.remembered[presetName] = getCurrentPreset(this);\n this.preset = presetName;\n addPresetOption(this, presetName, true);\n this.saveToLocalStorageIfPossible();\n },\n revert: function revert(gui) {\n Common.each(this.__controllers, function (controller) {\n if (!this.getRoot().load.remembered) {\n controller.setValue(controller.initialValue);\n } else {\n recallSavedValue(gui || this.getRoot(), controller);\n }\n if (controller.__onFinishChange) {\n controller.__onFinishChange.call(controller, controller.getValue());\n }\n }, this);\n Common.each(this.__folders, function (folder) {\n folder.revert(folder);\n });\n if (!gui) {\n markPresetModified(this.getRoot(), false);\n }\n },\n listen: function listen(controller) {\n var init = this.__listening.length === 0;\n this.__listening.push(controller);\n if (init) {\n updateDisplays(this.__listening);\n }\n },\n updateDisplay: function updateDisplay() {\n Common.each(this.__controllers, function (controller) {\n controller.updateDisplay();\n });\n Common.each(this.__folders, function (folder) {\n folder.updateDisplay();\n });\n }\n});\nfunction addRow(gui, newDom, liBefore) {\n var li = document.createElement('li');\n if (newDom) {\n li.appendChild(newDom);\n }\n if (liBefore) {\n gui.__ul.insertBefore(li, liBefore);\n } else {\n gui.__ul.appendChild(li);\n }\n gui.onResize();\n return li;\n}\nfunction removeListeners(gui) {\n dom.unbind(window, 'resize', gui.__resizeHandler);\n if (gui.saveToLocalStorageIfPossible) {\n dom.unbind(window, 'unload', gui.saveToLocalStorageIfPossible);\n }\n}\nfunction markPresetModified(gui, modified) {\n var opt = gui.__preset_select[gui.__preset_select.selectedIndex];\n if (modified) {\n opt.innerHTML = opt.value + '*';\n } else {\n opt.innerHTML = opt.value;\n }\n}\nfunction augmentController(gui, li, controller) {\n controller.__li = li;\n controller.__gui = gui;\n Common.extend(controller, {\n options: function options(_options) {\n if (arguments.length > 1) {\n var nextSibling = controller.__li.nextElementSibling;\n controller.remove();\n return _add(gui, controller.object, controller.property, {\n before: nextSibling,\n factoryArgs: [Common.toArray(arguments)]\n });\n }\n if (Common.isArray(_options) || Common.isObject(_options)) {\n var _nextSibling = controller.__li.nextElementSibling;\n controller.remove();\n return _add(gui, controller.object, controller.property, {\n before: _nextSibling,\n factoryArgs: [_options]\n });\n }\n },\n name: function name(_name) {\n controller.__li.firstElementChild.firstElementChild.innerHTML = _name;\n return controller;\n },\n listen: function listen() {\n controller.__gui.listen(controller);\n return controller;\n },\n remove: function remove() {\n controller.__gui.remove(controller);\n return controller;\n }\n });\n if (controller instanceof NumberControllerSlider) {\n var box = new NumberControllerBox(controller.object, controller.property, { min: controller.__min, max: controller.__max, step: controller.__step });\n Common.each(['updateDisplay', 'onChange', 'onFinishChange', 'step', 'min', 'max'], function (method) {\n var pc = controller[method];\n var pb = box[method];\n controller[method] = box[method] = function () {\n var args = Array.prototype.slice.call(arguments);\n pb.apply(box, args);\n return pc.apply(controller, args);\n };\n });\n dom.addClass(li, 'has-slider');\n controller.domElement.insertBefore(box.domElement, controller.domElement.firstElementChild);\n } else if (controller instanceof NumberControllerBox) {\n var r = function r(returned) {\n if (Common.isNumber(controller.__min) && Common.isNumber(controller.__max)) {\n var oldName = controller.__li.firstElementChild.firstElementChild.innerHTML;\n var wasListening = controller.__gui.__listening.indexOf(controller) > -1;\n controller.remove();\n var newController = _add(gui, controller.object, controller.property, {\n before: controller.__li.nextElementSibling,\n factoryArgs: [controller.__min, controller.__max, controller.__step]\n });\n newController.name(oldName);\n if (wasListening) newController.listen();\n return newController;\n }\n return returned;\n };\n controller.min = Common.compose(r, controller.min);\n controller.max = Common.compose(r, controller.max);\n } else if (controller instanceof BooleanController) {\n dom.bind(li, 'click', function () {\n dom.fakeEvent(controller.__checkbox, 'click');\n });\n dom.bind(controller.__checkbox, 'click', function (e) {\n e.stopPropagation();\n });\n } else if (controller instanceof FunctionController) {\n dom.bind(li, 'click', function () {\n dom.fakeEvent(controller.__button, 'click');\n });\n dom.bind(li, 'mouseover', function () {\n dom.addClass(controller.__button, 'hover');\n });\n dom.bind(li, 'mouseout', function () {\n dom.removeClass(controller.__button, 'hover');\n });\n } else if (controller instanceof ColorController) {\n dom.addClass(li, 'color');\n controller.updateDisplay = Common.compose(function (val) {\n li.style.borderLeftColor = controller.__color.toString();\n return val;\n }, controller.updateDisplay);\n controller.updateDisplay();\n }\n controller.setValue = Common.compose(function (val) {\n if (gui.getRoot().__preset_select && controller.isModified()) {\n markPresetModified(gui.getRoot(), true);\n }\n return val;\n }, controller.setValue);\n}\nfunction recallSavedValue(gui, controller) {\n var root = gui.getRoot();\n var matchedIndex = root.__rememberedObjects.indexOf(controller.object);\n if (matchedIndex !== -1) {\n var controllerMap = root.__rememberedObjectIndecesToControllers[matchedIndex];\n if (controllerMap === undefined) {\n controllerMap = {};\n root.__rememberedObjectIndecesToControllers[matchedIndex] = controllerMap;\n }\n controllerMap[controller.property] = controller;\n if (root.load && root.load.remembered) {\n var presetMap = root.load.remembered;\n var preset = void 0;\n if (presetMap[gui.preset]) {\n preset = presetMap[gui.preset];\n } else if (presetMap[DEFAULT_DEFAULT_PRESET_NAME]) {\n preset = presetMap[DEFAULT_DEFAULT_PRESET_NAME];\n } else {\n return;\n }\n if (preset[matchedIndex] && preset[matchedIndex][controller.property] !== undefined) {\n var value = preset[matchedIndex][controller.property];\n controller.initialValue = value;\n controller.setValue(value);\n }\n }\n }\n}\nfunction _add(gui, object, property, params) {\n if (object[property] === undefined) {\n throw new Error('Object \"' + object + '\" has no property \"' + property + '\"');\n }\n var controller = void 0;\n if (params.color) {\n controller = new ColorController(object, property);\n } else {\n var factoryArgs = [object, property].concat(params.factoryArgs);\n controller = ControllerFactory.apply(gui, factoryArgs);\n }\n if (params.before instanceof Controller) {\n params.before = params.before.__li;\n }\n recallSavedValue(gui, controller);\n dom.addClass(controller.domElement, 'c');\n var name = document.createElement('span');\n dom.addClass(name, 'property-name');\n name.innerHTML = controller.property;\n var container = document.createElement('div');\n container.appendChild(name);\n container.appendChild(controller.domElement);\n var li = addRow(gui, container, params.before);\n dom.addClass(li, GUI.CLASS_CONTROLLER_ROW);\n if (controller instanceof ColorController) {\n dom.addClass(li, 'color');\n } else {\n dom.addClass(li, _typeof(controller.getValue()));\n }\n augmentController(gui, li, controller);\n gui.__controllers.push(controller);\n return controller;\n}\nfunction getLocalStorageHash(gui, key) {\n return document.location.href + '.' + key;\n}\nfunction addPresetOption(gui, name, setSelected) {\n var opt = document.createElement('option');\n opt.innerHTML = name;\n opt.value = name;\n gui.__preset_select.appendChild(opt);\n if (setSelected) {\n gui.__preset_select.selectedIndex = gui.__preset_select.length - 1;\n }\n}\nfunction showHideExplain(gui, explain) {\n explain.style.display = gui.useLocalStorage ? 'block' : 'none';\n}\nfunction addSaveMenu(gui) {\n var div = gui.__save_row = document.createElement('li');\n dom.addClass(gui.domElement, 'has-save');\n gui.__ul.insertBefore(div, gui.__ul.firstChild);\n dom.addClass(div, 'save-row');\n var gears = document.createElement('span');\n gears.innerHTML = ' ';\n dom.addClass(gears, 'button gears');\n var button = document.createElement('span');\n button.innerHTML = 'Save';\n dom.addClass(button, 'button');\n dom.addClass(button, 'save');\n var button2 = document.createElement('span');\n button2.innerHTML = 'New';\n dom.addClass(button2, 'button');\n dom.addClass(button2, 'save-as');\n var button3 = document.createElement('span');\n button3.innerHTML = 'Revert';\n dom.addClass(button3, 'button');\n dom.addClass(button3, 'revert');\n var select = gui.__preset_select = document.createElement('select');\n if (gui.load && gui.load.remembered) {\n Common.each(gui.load.remembered, function (value, key) {\n addPresetOption(gui, key, key === gui.preset);\n });\n } else {\n addPresetOption(gui, DEFAULT_DEFAULT_PRESET_NAME, false);\n }\n dom.bind(select, 'change', function () {\n for (var index = 0; index < gui.__preset_select.length; index++) {\n gui.__preset_select[index].innerHTML = gui.__preset_select[index].value;\n }\n gui.preset = this.value;\n });\n div.appendChild(select);\n div.appendChild(gears);\n div.appendChild(button);\n div.appendChild(button2);\n div.appendChild(button3);\n if (SUPPORTS_LOCAL_STORAGE) {\n var explain = document.getElementById('dg-local-explain');\n var localStorageCheckBox = document.getElementById('dg-local-storage');\n var saveLocally = document.getElementById('dg-save-locally');\n saveLocally.style.display = 'block';\n if (localStorage.getItem(getLocalStorageHash(gui, 'isLocal')) === 'true') {\n localStorageCheckBox.setAttribute('checked', 'checked');\n }\n showHideExplain(gui, explain);\n dom.bind(localStorageCheckBox, 'change', function () {\n gui.useLocalStorage = !gui.useLocalStorage;\n showHideExplain(gui, explain);\n });\n }\n var newConstructorTextArea = document.getElementById('dg-new-constructor');\n dom.bind(newConstructorTextArea, 'keydown', function (e) {\n if (e.metaKey && (e.which === 67 || e.keyCode === 67)) {\n SAVE_DIALOGUE.hide();\n }\n });\n dom.bind(gears, 'click', function () {\n newConstructorTextArea.innerHTML = JSON.stringify(gui.getSaveObject(), undefined, 2);\n SAVE_DIALOGUE.show();\n newConstructorTextArea.focus();\n newConstructorTextArea.select();\n });\n dom.bind(button, 'click', function () {\n gui.save();\n });\n dom.bind(button2, 'click', function () {\n var presetName = prompt('Enter a new preset name.');\n if (presetName) {\n gui.saveAs(presetName);\n }\n });\n dom.bind(button3, 'click', function () {\n gui.revert();\n });\n}\nfunction addResizeHandle(gui) {\n var pmouseX = void 0;\n gui.__resize_handle = document.createElement('div');\n Common.extend(gui.__resize_handle.style, {\n width: '6px',\n marginLeft: '-3px',\n height: '200px',\n cursor: 'ew-resize',\n position: 'absolute'\n });\n function drag(e) {\n e.preventDefault();\n gui.width += pmouseX - e.clientX;\n gui.onResize();\n pmouseX = e.clientX;\n return false;\n }\n function dragStop() {\n dom.removeClass(gui.__closeButton, GUI.CLASS_DRAG);\n dom.unbind(window, 'mousemove', drag);\n dom.unbind(window, 'mouseup', dragStop);\n }\n function dragStart(e) {\n e.preventDefault();\n pmouseX = e.clientX;\n dom.addClass(gui.__closeButton, GUI.CLASS_DRAG);\n dom.bind(window, 'mousemove', drag);\n dom.bind(window, 'mouseup', dragStop);\n return false;\n }\n dom.bind(gui.__resize_handle, 'mousedown', dragStart);\n dom.bind(gui.__closeButton, 'mousedown', dragStart);\n gui.domElement.insertBefore(gui.__resize_handle, gui.domElement.firstElementChild);\n}\nfunction setWidth(gui, w) {\n gui.domElement.style.width = w + 'px';\n if (gui.__save_row && gui.autoPlace) {\n gui.__save_row.style.width = w + 'px';\n }\n if (gui.__closeButton) {\n gui.__closeButton.style.width = w + 'px';\n }\n}\nfunction getCurrentPreset(gui, useInitialValues) {\n var toReturn = {};\n Common.each(gui.__rememberedObjects, function (val, index) {\n var savedValues = {};\n var controllerMap = gui.__rememberedObjectIndecesToControllers[index];\n Common.each(controllerMap, function (controller, property) {\n savedValues[property] = useInitialValues ? controller.initialValue : controller.getValue();\n });\n toReturn[index] = savedValues;\n });\n return toReturn;\n}\nfunction setPresetSelectIndex(gui) {\n for (var index = 0; index < gui.__preset_select.length; index++) {\n if (gui.__preset_select[index].value === gui.preset) {\n gui.__preset_select.selectedIndex = index;\n }\n }\n}\nfunction updateDisplays(controllerArray) {\n if (controllerArray.length !== 0) {\n requestAnimationFrame$1.call(window, function () {\n updateDisplays(controllerArray);\n });\n }\n Common.each(controllerArray, function (c) {\n c.updateDisplay();\n });\n}\n\nvar color = {\n Color: Color,\n math: ColorMath,\n interpret: interpret\n};\nvar controllers = {\n Controller: Controller,\n BooleanController: BooleanController,\n OptionController: OptionController,\n StringController: StringController,\n NumberController: NumberController,\n NumberControllerBox: NumberControllerBox,\n NumberControllerSlider: NumberControllerSlider,\n FunctionController: FunctionController,\n ColorController: ColorController\n};\nvar dom$1 = { dom: dom };\nvar gui = { GUI: GUI };\nvar GUI$1 = GUI;\nvar index = {\n color: color,\n controllers: controllers,\n dom: dom$1,\n gui: gui,\n GUI: GUI$1\n};\n\nexport { color, controllers, dom$1 as dom, gui, GUI$1 as GUI };\nexport default index;\n"],"x_google_ignoreList":[0]} \ No newline at end of file diff --git a/docs/267.7e1bf61fc32a98a5.js b/docs/267.7e1bf61fc32a98a5.js deleted file mode 100644 index 9c755eaa5..000000000 --- a/docs/267.7e1bf61fc32a98a5.js +++ /dev/null @@ -1,2 +0,0 @@ -"use strict";(self.webpackChunkphoenix_app=self.webpackChunkphoenix_app||[]).push([[267],{8267:(Je,re,ae)=>{function R(n,e){var t=n.__state.conversionName.toString(),i=Math.round(n.r),o=Math.round(n.g),r=Math.round(n.b),d=n.a,l=Math.round(n.h),u=n.s.toFixed(1),f=n.v.toFixed(1);if(e||"THREE_CHAR_HEX"===t||"SIX_CHAR_HEX"===t){for(var m=n.hex.toString(16);m.length<6;)m="0"+m;return"#"+m}return"CSS_RGB"===t?"rgb("+i+","+o+","+r+")":"CSS_RGBA"===t?"rgba("+i+","+o+","+r+","+d+")":"HEX"===t?"0x"+n.hex.toString(16):"RGB_ARRAY"===t?"["+i+","+o+","+r+"]":"RGBA_ARRAY"===t?"["+i+","+o+","+r+","+d+"]":"RGB_OBJ"===t?"{r:"+i+",g:"+o+",b:"+r+"}":"RGBA_OBJ"===t?"{r:"+i+",g:"+o+",b:"+r+",a:"+d+"}":"HSV_OBJ"===t?"{h:"+l+",s:"+u+",v:"+f+"}":"HSVA_OBJ"===t?"{h:"+l+",s:"+u+",v:"+f+",a:"+d+"}":"unknown format"}ae.r(re),ae.d(re,{GUI:()=>Oe,color:()=>Ee,controllers:()=>Ae,default:()=>We,dom:()=>Se,gui:()=>ke});var se=Array.prototype.forEach,N=Array.prototype.slice,s={BREAK:{},extend:function(e){return this.each(N.call(arguments,1),function(t){(this.isObject(t)?Object.keys(t):[]).forEach(function(o){this.isUndefined(t[o])||(e[o]=t[o])}.bind(this))},this),e},defaults:function(e){return this.each(N.call(arguments,1),function(t){(this.isObject(t)?Object.keys(t):[]).forEach(function(o){this.isUndefined(e[o])&&(e[o]=t[o])}.bind(this))},this),e},compose:function(){var e=N.call(arguments);return function(){for(var t=N.call(arguments),i=e.length-1;i>=0;i--)t=[e[i].apply(this,t)];return t[0]}},each:function(e,t,i){if(e)if(se&&e.forEach&&e.forEach===se)e.forEach(t,i);else if(e.length===e.length+0){var r,o=void 0;for(o=0,r=e.length;o1?s.toArray(arguments):arguments[0];return s.each(Re,function(t){if(t.litmus(e))return s.each(t.conversions,function(i,o){if(F=i.read(e),!1===G&&!1!==F)return G=F,F.conversionName=o,F.conversion=i,s.BREAK}),s.BREAK}),G},de=void 0,H={hsv_to_rgb:function(e,t,i){var o=Math.floor(e/60)%6,r=e/60-Math.floor(e/60),d=i*(1-t),l=i*(1-r*t),u=i*(1-(1-r)*t),f=[[i,u,d],[l,i,d],[d,i,u],[d,l,i],[u,d,i],[i,d,l]][o];return{r:255*f[0],g:255*f[1],b:255*f[2]}},rgb_to_hsv:function(e,t,i){var o=Math.min(e,t,i),r=Math.max(e,t,i),d=r-o,l=void 0;return 0===r?{h:NaN,s:0,v:0}:(l=e===r?(t-i)/d:t===r?2+(i-e)/d:4+(e-t)/d,(l/=6)<0&&(l+=1),{h:360*l,s:d/r,v:r/255})},rgb_to_hex:function(e,t,i){var o=this.hex_with_component(0,2,e);return o=this.hex_with_component(o,1,t),this.hex_with_component(o,0,i)},component_from_hex:function(e,t){return e>>8*t&255},hex_with_component:function(e,t,i){return i<<(de=8*t)|e&~(255<-1?e.length-e.indexOf(".")-1:0}var Q=function(n){function e(t,i,o){y(this,e);var r=S(this,(e.__proto__||Object.getPrototypeOf(e)).call(this,t,i)),d=o||{};return r.__min=d.min,r.__max=d.max,r.__step=d.step,r.__impliedStep=s.isUndefined(r.__step)?0===r.initialValue?1:Math.pow(10,Math.floor(Math.log(Math.abs(r.initialValue))/Math.LN10))/10:r.__step,r.__precision=fe(r.__impliedStep),r}return A(e,n),w(e,[{key:"setValue",value:function(i){var o=i;return void 0!==this.__min&&othis.__max&&(o=this.__max),void 0!==this.__step&&o%this.__step!=0&&(o=Math.round(o/this.__step)*this.__step),E(e.prototype.__proto__||Object.getPrototypeOf(e.prototype),"setValue",this).call(this,o)}},{key:"min",value:function(i){return this.__min=i,this}},{key:"max",value:function(i){return this.__max=i,this}},{key:"step",value:function(i){return this.__step=i,this.__impliedStep=i,this.__precision=fe(i),this}}]),e}(k),D=function(n){function e(t,i,o){y(this,e);var r=S(this,(e.__proto__||Object.getPrototypeOf(e)).call(this,t,i,o));r.__truncationSuspended=!1;var d=r,l=void 0;function f(){d.__onFinishChange&&d.__onFinishChange.call(d,d.getValue())}function c(b){var _=l-b.clientY;d.setValue(d.getValue()+_*d.__impliedStep),l=b.clientY}function p(){a.unbind(window,"mousemove",c),a.unbind(window,"mouseup",p),f()}return r.__input=document.createElement("input"),r.__input.setAttribute("type","text"),a.bind(r.__input,"change",function u(){var b=parseFloat(d.__input.value);s.isNaN(b)||d.setValue(b)}),a.bind(r.__input,"blur",function m(){f()}),a.bind(r.__input,"mousedown",function x(b){a.bind(window,"mousemove",c),a.bind(window,"mouseup",p),l=b.clientY}),a.bind(r.__input,"keydown",function(b){13===b.keyCode&&(d.__truncationSuspended=!0,this.blur(),d.__truncationSuspended=!1,f())}),r.updateDisplay(),r.domElement.appendChild(r.__input),r}return A(e,n),w(e,[{key:"updateDisplay",value:function(){return this.__input.value=this.__truncationSuspended?this.getValue():function Fe(n,e){var t=Math.pow(10,e);return Math.round(n*t)/t}(this.getValue(),this.__precision),E(e.prototype.__proto__||Object.getPrototypeOf(e.prototype),"updateDisplay",this).call(this)}}]),e}(Q);function _e(n,e,t,i,o){return i+(n-e)/(t-e)*(o-i)}var X=function(n){function e(t,i,o,r,d){y(this,e);var l=S(this,(e.__proto__||Object.getPrototypeOf(e)).call(this,t,i,{min:o,max:r,step:d})),u=l;function m(_){_.preventDefault();var v=u.__background.getBoundingClientRect();return u.setValue(_e(_.clientX,v.left,v.right,u.__min,u.__max)),!1}function c(){a.unbind(window,"mousemove",m),a.unbind(window,"mouseup",c),u.__onFinishChange&&u.__onFinishChange.call(u,u.getValue())}function x(_){var v=_.touches[0].clientX,O=u.__background.getBoundingClientRect();u.setValue(_e(v,O.left,O.right,u.__min,u.__max))}function b(){a.unbind(window,"touchmove",x),a.unbind(window,"touchend",b),u.__onFinishChange&&u.__onFinishChange.call(u,u.getValue())}return l.__background=document.createElement("div"),l.__foreground=document.createElement("div"),a.bind(l.__background,"mousedown",function f(_){document.activeElement.blur(),a.bind(window,"mousemove",m),a.bind(window,"mouseup",c),m(_)}),a.bind(l.__background,"touchstart",function p(_){1===_.touches.length&&(a.bind(window,"touchmove",x),a.bind(window,"touchend",b),x(_))}),a.addClass(l.__background,"slider"),a.addClass(l.__foreground,"slider-fg"),l.updateDisplay(),l.__background.appendChild(l.__foreground),l.domElement.appendChild(l.__background),l}return A(e,n),w(e,[{key:"updateDisplay",value:function(){var i=(this.getValue()-this.__min)/(this.__max-this.__min);return this.__foreground.style.width=100*i+"%",E(e.prototype.__proto__||Object.getPrototypeOf(e.prototype),"updateDisplay",this).call(this)}}]),e}(Q),q=function(n){function e(t,i,o){y(this,e);var r=S(this,(e.__proto__||Object.getPrototypeOf(e)).call(this,t,i)),d=r;return r.__button=document.createElement("div"),r.__button.innerHTML=void 0===o?"Fire":o,a.bind(r.__button,"click",function(l){return l.preventDefault(),d.fire(),!1}),a.addClass(r.__button,"button"),r.domElement.appendChild(r.__button),r}return A(e,n),w(e,[{key:"fire",value:function(){this.__onChange&&this.__onChange.call(this),this.getValue().call(this.object),this.__onFinishChange&&this.__onFinishChange.call(this,this.getValue())}}]),e}(k),j=function(n){function e(t,i){y(this,e);var o=S(this,(e.__proto__||Object.getPrototypeOf(e)).call(this,t,i));o.__color=new g(o.getValue()),o.__temp=new g(0);var r=o;o.domElement=document.createElement("div"),a.makeSelectable(o.domElement,!1),o.__selector=document.createElement("div"),o.__selector.className="selector",o.__saturation_field=document.createElement("div"),o.__saturation_field.className="saturation-field",o.__field_knob=document.createElement("div"),o.__field_knob.className="field-knob",o.__field_knob_border="2px solid ",o.__hue_knob=document.createElement("div"),o.__hue_knob.className="hue-knob",o.__hue_field=document.createElement("div"),o.__hue_field.className="hue-field",o.__input=document.createElement("input"),o.__input.type="text",o.__input_textShadow="0 1px 1px ",a.bind(o.__input,"keydown",function(_){13===_.keyCode&&c.call(this)}),a.bind(o.__input,"blur",c),a.bind(o.__selector,"mousedown",function(){a.addClass(this,"drag").bind(window,"mouseup",function(){a.removeClass(r.__selector,"drag")})}),a.bind(o.__selector,"touchstart",function(){a.addClass(this,"drag").bind(window,"touchend",function(){a.removeClass(r.__selector,"drag")})});var d=document.createElement("div");function l(_){x(_),a.bind(window,"mousemove",x),a.bind(window,"touchmove",x),a.bind(window,"mouseup",f),a.bind(window,"touchend",f)}function u(_){b(_),a.bind(window,"mousemove",b),a.bind(window,"touchmove",b),a.bind(window,"mouseup",m),a.bind(window,"touchend",m)}function f(){a.unbind(window,"mousemove",x),a.unbind(window,"touchmove",x),a.unbind(window,"mouseup",f),a.unbind(window,"touchend",f),p()}function m(){a.unbind(window,"mousemove",b),a.unbind(window,"touchmove",b),a.unbind(window,"mouseup",m),a.unbind(window,"touchend",m),p()}function c(){var _=$(this.value);!1!==_?(r.__color.__state=_,r.setValue(r.__color.toOriginal())):this.value=r.__color.toString()}function p(){r.__onFinishChange&&r.__onFinishChange.call(r,r.__color.toOriginal())}function x(_){-1===_.type.indexOf("touch")&&_.preventDefault();var v=r.__saturation_field.getBoundingClientRect(),O=_.touches&&_.touches[0]||_,z=(O.clientX-v.left)/(v.right-v.left),U=1-(O.clientY-v.top)/(v.bottom-v.top);return U>1?U=1:U<0&&(U=0),z>1?z=1:z<0&&(z=0),r.__color.v=U,r.__color.s=z,r.setValue(r.__color.toOriginal()),!1}function b(_){-1===_.type.indexOf("touch")&&_.preventDefault();var v=r.__hue_field.getBoundingClientRect(),T=1-((_.touches&&_.touches[0]||_).clientY-v.top)/(v.bottom-v.top);return T>1?T=1:T<0&&(T=0),r.__color.h=360*T,r.setValue(r.__color.toOriginal()),!1}return s.extend(o.__selector.style,{width:"122px",height:"102px",padding:"3px",backgroundColor:"#222",boxShadow:"0px 1px 3px rgba(0,0,0,0.3)"}),s.extend(o.__field_knob.style,{position:"absolute",width:"12px",height:"12px",border:o.__field_knob_border+(o.__color.v<.5?"#fff":"#000"),boxShadow:"0px 1px 3px rgba(0,0,0,0.5)",borderRadius:"12px",zIndex:1}),s.extend(o.__hue_knob.style,{position:"absolute",width:"15px",height:"2px",borderRight:"4px solid #fff",zIndex:1}),s.extend(o.__saturation_field.style,{width:"100px",height:"100px",border:"1px solid #555",marginRight:"3px",display:"inline-block",cursor:"pointer"}),s.extend(d.style,{width:"100%",height:"100%",background:"none"}),he(d,"top","rgba(0,0,0,0)","#000"),s.extend(o.__hue_field.style,{width:"15px",height:"100px",border:"1px solid #555",cursor:"ns-resize",position:"absolute",top:"3px",right:"3px"}),function De(n){n.style.background="",n.style.cssText+="background: -moz-linear-gradient(top, #ff0000 0%, #ff00ff 17%, #0000ff 34%, #00ffff 50%, #00ff00 67%, #ffff00 84%, #ff0000 100%);",n.style.cssText+="background: -webkit-linear-gradient(top, #ff0000 0%,#ff00ff 17%,#0000ff 34%,#00ffff 50%,#00ff00 67%,#ffff00 84%,#ff0000 100%);",n.style.cssText+="background: -o-linear-gradient(top, #ff0000 0%,#ff00ff 17%,#0000ff 34%,#00ffff 50%,#00ff00 67%,#ffff00 84%,#ff0000 100%);",n.style.cssText+="background: -ms-linear-gradient(top, #ff0000 0%,#ff00ff 17%,#0000ff 34%,#00ffff 50%,#00ff00 67%,#ffff00 84%,#ff0000 100%);",n.style.cssText+="background: linear-gradient(top, #ff0000 0%,#ff00ff 17%,#0000ff 34%,#00ffff 50%,#00ff00 67%,#ffff00 84%,#ff0000 100%);"}(o.__hue_field),s.extend(o.__input.style,{outline:"none",textAlign:"center",color:"#fff",border:0,fontWeight:"bold",textShadow:o.__input_textShadow+"rgba(0,0,0,0.7)"}),a.bind(o.__saturation_field,"mousedown",l),a.bind(o.__saturation_field,"touchstart",l),a.bind(o.__field_knob,"mousedown",l),a.bind(o.__field_knob,"touchstart",l),a.bind(o.__hue_field,"mousedown",u),a.bind(o.__hue_field,"touchstart",u),o.__saturation_field.appendChild(d),o.__selector.appendChild(o.__field_knob),o.__selector.appendChild(o.__saturation_field),o.__selector.appendChild(o.__hue_field),o.__hue_field.appendChild(o.__hue_knob),o.domElement.appendChild(o.__input),o.domElement.appendChild(o.__selector),o.updateDisplay(),o}return A(e,n),w(e,[{key:"updateDisplay",value:function(){var i=$(this.getValue());if(!1!==i){var o=!1;s.each(g.COMPONENTS,function(l){if(!s.isUndefined(i[l])&&!s.isUndefined(this.__color.__state[l])&&i[l]!==this.__color.__state[l])return o=!0,{}},this),o&&s.extend(this.__color.__state,i)}s.extend(this.__temp.__state,this.__color.__state),this.__temp.a=1;var r=this.__color.v<.5||this.__color.s>.5?255:0,d=255-r;s.extend(this.__field_knob.style,{marginLeft:100*this.__color.s-7+"px",marginTop:100*(1-this.__color.v)-7+"px",backgroundColor:this.__temp.toHexString(),border:this.__field_knob_border+"rgb("+r+","+r+","+r+")"}),this.__hue_knob.style.marginTop=100*(1-this.__color.h/360)+"px",this.__temp.s=1,this.__temp.v=1,he(this.__saturation_field,"left","#fff",this.__temp.toHexString()),this.__input.value=this.__color.toString(),s.extend(this.__input.style,{backgroundColor:this.__color.toHexString(),color:"rgb("+r+","+r+","+r+")",textShadow:this.__input_textShadow+"rgba("+d+","+d+","+d+",.7)"})}}]),e}(k),He=["-moz-","-o-","-webkit-","-ms-",""];function he(n,e,t,i){n.style.background="",s.each(He,function(o){n.style.cssText+="background: "+o+"linear-gradient("+e+", "+t+" 0%, "+i+" 100%); "})}var Ve='
\n\n Here\'s the new load parameter for your GUI\'s constructor:\n\n \n\n
\n\n Automatically save\n values to localStorage on exit.\n\n
The values saved to localStorage will\n override those passed to dat.GUI\'s constructor. This makes it\n easier to work incrementally, but localStorage is fragile,\n and your friends may not see the same values you do.\n\n
\n\n
\n\n
',Ie=function(e,t){var i=e[t];return s.isArray(arguments[2])||s.isObject(arguments[2])?new ue(e,t,arguments[2]):s.isNumber(i)?s.isNumber(arguments[2])&&s.isNumber(arguments[3])?s.isNumber(arguments[4])?new X(e,t,arguments[2],arguments[3],arguments[4]):new X(e,t,arguments[2],arguments[3]):s.isNumber(arguments[4])?new D(e,t,{min:arguments[2],max:arguments[3],step:arguments[4]}):new D(e,t,{min:arguments[2],max:arguments[3]}):s.isString(i)?new ce(e,t):s.isFunction(i)?new q(e,t,""):s.isBoolean(i)?new J(e,t):null},ze=window.requestAnimationFrame||window.webkitRequestAnimationFrame||window.mozRequestAnimationFrame||window.oRequestAnimationFrame||window.msRequestAnimationFrame||function Me(n){setTimeout(n,1e3/60)},Ue=function(){function n(){y(this,n),this.backgroundElement=document.createElement("div"),s.extend(this.backgroundElement.style,{backgroundColor:"rgba(0,0,0,0.8)",top:0,left:0,display:"none",zIndex:"1000",opacity:0,WebkitTransition:"opacity 0.2s linear",transition:"opacity 0.2s linear"}),a.makeFullscreen(this.backgroundElement),this.backgroundElement.style.position="fixed",this.domElement=document.createElement("div"),s.extend(this.domElement.style,{position:"fixed",display:"none",zIndex:"1001",opacity:0,WebkitTransition:"-webkit-transform 0.2s ease-out, opacity 0.2s linear",transition:"transform 0.2s ease-out, opacity 0.2s linear"}),document.body.appendChild(this.backgroundElement),document.body.appendChild(this.domElement);var e=this;a.bind(this.backgroundElement,"click",function(){e.hide()})}return w(n,[{key:"show",value:function(){var t=this;this.backgroundElement.style.display="block",this.domElement.style.display="block",this.domElement.style.opacity=0,this.domElement.style.webkitTransform="scale(1.1)",this.layout(),s.defer(function(){t.backgroundElement.style.opacity=1,t.domElement.style.opacity=1,t.domElement.style.webkitTransform="scale(1)"})}},{key:"hide",value:function(){var t=this,i=function o(){t.domElement.style.display="none",t.backgroundElement.style.display="none",a.unbind(t.domElement,"webkitTransitionEnd",o),a.unbind(t.domElement,"transitionend",o),a.unbind(t.domElement,"oTransitionEnd",o)};a.bind(this.domElement,"webkitTransitionEnd",i),a.bind(this.domElement,"transitionend",i),a.bind(this.domElement,"oTransitionEnd",i),this.backgroundElement.style.opacity=0,this.domElement.style.opacity=0,this.domElement.style.webkitTransform="scale(1.1)"}},{key:"layout",value:function(){this.domElement.style.left=window.innerWidth/2-a.getWidth(this.domElement)/2+"px",this.domElement.style.top=window.innerHeight/2-a.getHeight(this.domElement)/2+"px"}}]),n}();!function(e,t){var i=t||document,o=document.createElement("style");o.type="text/css",o.innerHTML=e;var r=i.getElementsByTagName("head")[0];try{r.appendChild(o)}catch{}}(function Te(n){if(n&&!(typeof window>"u")){var e=document.createElement("style");return e.setAttribute("type","text/css"),e.innerHTML=n,document.head.appendChild(e),n}}(".dg ul{list-style:none;margin:0;padding:0;width:100%;clear:both}.dg.ac{position:fixed;top:0;left:0;right:0;height:0;z-index:0}.dg:not(.ac) .main{overflow:hidden}.dg.main{-webkit-transition:opacity .1s linear;-o-transition:opacity .1s linear;-moz-transition:opacity .1s linear;transition:opacity .1s linear}.dg.main.taller-than-window{overflow-y:auto}.dg.main.taller-than-window .close-button{opacity:1;margin-top:-1px;border-top:1px solid #2c2c2c}.dg.main ul.closed .close-button{opacity:1 !important}.dg.main:hover .close-button,.dg.main .close-button.drag{opacity:1}.dg.main .close-button{-webkit-transition:opacity .1s linear;-o-transition:opacity .1s linear;-moz-transition:opacity .1s linear;transition:opacity .1s linear;border:0;line-height:19px;height:20px;cursor:pointer;text-align:center;background-color:#000}.dg.main .close-button.close-top{position:relative}.dg.main .close-button.close-bottom{position:absolute}.dg.main .close-button:hover{background-color:#111}.dg.a{float:right;margin-right:15px;overflow-y:visible}.dg.a.has-save>ul.close-top{margin-top:0}.dg.a.has-save>ul.close-bottom{margin-top:27px}.dg.a.has-save>ul.closed{margin-top:0}.dg.a .save-row{top:0;z-index:1002}.dg.a .save-row.close-top{position:relative}.dg.a .save-row.close-bottom{position:fixed}.dg li{-webkit-transition:height .1s ease-out;-o-transition:height .1s ease-out;-moz-transition:height .1s ease-out;transition:height .1s ease-out;-webkit-transition:overflow .1s linear;-o-transition:overflow .1s linear;-moz-transition:overflow .1s linear;transition:overflow .1s linear}.dg li:not(.folder){cursor:auto;height:27px;line-height:27px;padding:0 4px 0 5px}.dg li.folder{padding:0;border-left:4px solid rgba(0,0,0,0)}.dg li.title{cursor:pointer;margin-left:-4px}.dg .closed li:not(.title),.dg .closed ul li,.dg .closed ul li>*{height:0;overflow:hidden;border:0}.dg .cr{clear:both;padding-left:3px;height:27px;overflow:hidden}.dg .property-name{cursor:default;float:left;clear:left;width:40%;overflow:hidden;text-overflow:ellipsis}.dg .cr.function .property-name{width:100%}.dg .c{float:left;width:60%;position:relative}.dg .c input[type=text]{border:0;margin-top:4px;padding:3px;width:100%;float:right}.dg .has-slider input[type=text]{width:30%;margin-left:0}.dg .slider{float:left;width:66%;margin-left:-5px;margin-right:0;height:19px;margin-top:4px}.dg .slider-fg{height:100%}.dg .c input[type=checkbox]{margin-top:7px}.dg .c select{margin-top:5px}.dg .cr.function,.dg .cr.function .property-name,.dg .cr.function *,.dg .cr.boolean,.dg .cr.boolean *{cursor:pointer}.dg .cr.color{overflow:visible}.dg .selector{display:none;position:absolute;margin-left:-9px;margin-top:23px;z-index:10}.dg .c:hover .selector,.dg .selector.drag{display:block}.dg li.save-row{padding:0}.dg li.save-row .button{display:inline-block;padding:0px 6px}.dg.dialogue{background-color:#222;width:460px;padding:15px;font-size:13px;line-height:15px}#dg-new-constructor{padding:10px;color:#222;font-family:Monaco, monospace;font-size:10px;border:0;resize:none;box-shadow:inset 1px 1px 1px #888;word-wrap:break-word;margin:12px 0;display:block;width:440px;overflow-y:scroll;height:100px;position:relative}#dg-local-explain{display:none;font-size:11px;line-height:17px;border-radius:3px;background-color:#333;padding:8px;margin-top:10px}#dg-local-explain code{font-size:10px}#dat-gui-save-locally{display:none}.dg{color:#eee;font:11px 'Lucida Grande', sans-serif;text-shadow:0 -1px 0 #111}.dg.main::-webkit-scrollbar{width:5px;background:#1a1a1a}.dg.main::-webkit-scrollbar-corner{height:0;display:none}.dg.main::-webkit-scrollbar-thumb{border-radius:5px;background:#676767}.dg li:not(.folder){background:#1a1a1a;border-bottom:1px solid #2c2c2c}.dg li.save-row{line-height:25px;background:#dad5cb;border:0}.dg li.save-row select{margin-left:5px;width:108px}.dg li.save-row .button{margin-left:5px;margin-top:1px;border-radius:2px;font-size:9px;line-height:7px;padding:4px 4px 5px 4px;background:#c5bdad;color:#fff;text-shadow:0 1px 0 #b0a58f;box-shadow:0 -1px 0 #b0a58f;cursor:pointer}.dg li.save-row .button.gears{background:#c5bdad url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAsAAAANCAYAAAB/9ZQ7AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAQJJREFUeNpiYKAU/P//PwGIC/ApCABiBSAW+I8AClAcgKxQ4T9hoMAEUrxx2QSGN6+egDX+/vWT4e7N82AMYoPAx/evwWoYoSYbACX2s7KxCxzcsezDh3evFoDEBYTEEqycggWAzA9AuUSQQgeYPa9fPv6/YWm/Acx5IPb7ty/fw+QZblw67vDs8R0YHyQhgObx+yAJkBqmG5dPPDh1aPOGR/eugW0G4vlIoTIfyFcA+QekhhHJhPdQxbiAIguMBTQZrPD7108M6roWYDFQiIAAv6Aow/1bFwXgis+f2LUAynwoIaNcz8XNx3Dl7MEJUDGQpx9gtQ8YCueB+D26OECAAQDadt7e46D42QAAAABJRU5ErkJggg==) 2px 1px no-repeat;height:7px;width:8px}.dg li.save-row .button:hover{background-color:#bab19e;box-shadow:0 -1px 0 #b0a58f}.dg li.folder{border-bottom:0}.dg li.title{padding-left:16px;background:#000 url(data:image/gif;base64,R0lGODlhBQAFAJEAAP////Pz8////////yH5BAEAAAIALAAAAAAFAAUAAAIIlI+hKgFxoCgAOw==) 6px 10px no-repeat;cursor:pointer;border-bottom:1px solid rgba(255,255,255,0.2)}.dg .closed li.title{background-image:url(data:image/gif;base64,R0lGODlhBQAFAJEAAP////Pz8////////yH5BAEAAAIALAAAAAAFAAUAAAIIlGIWqMCbWAEAOw==)}.dg .cr.boolean{border-left:3px solid #806787}.dg .cr.color{border-left:3px solid}.dg .cr.function{border-left:3px solid #e61d5f}.dg .cr.number{border-left:3px solid #2FA1D6}.dg .cr.number input[type=text]{color:#2FA1D6}.dg .cr.string{border-left:3px solid #1ed36f}.dg .cr.string input[type=text]{color:#1ed36f}.dg .cr.function:hover,.dg .cr.boolean:hover{background:#111}.dg .c input[type=text]{background:#303030;outline:none}.dg .c input[type=text]:hover{background:#3c3c3c}.dg .c input[type=text]:focus{background:#494949;color:#fff}.dg .c .slider{background:#303030;cursor:ew-resize}.dg .c .slider-fg{background:#2FA1D6;max-width:100%}.dg .c .slider:hover{background:#3c3c3c}.dg .c .slider:hover .slider-fg{background:#44abda}\n"));var P="Default",V=function(){try{return!!window.localStorage}catch{return!1}}(),I=void 0,be=!0,L=void 0,Z=!1,ve=[],h=function n(e){var t=this,i=e||{};this.domElement=document.createElement("div"),this.__ul=document.createElement("ul"),this.domElement.appendChild(this.__ul),a.addClass(this.domElement,"dg"),this.__folders={},this.__controllers=[],this.__rememberedObjects=[],this.__rememberedObjectIndecesToControllers=[],this.__listening=[],i=s.defaults(i,{closeOnTop:!1,autoPlace:!0,width:n.DEFAULT_WIDTH}),i=s.defaults(i,{resizable:i.autoPlace,hideable:i.autoPlace}),s.isUndefined(i.load)?i.load={preset:P}:i.preset&&(i.load.preset=i.preset),s.isUndefined(i.parent)&&i.hideable&&ve.push(this),i.resizable=s.isUndefined(i.parent)&&i.resizable,i.autoPlace&&s.isUndefined(i.scrollable)&&(i.scrollable=!0);var o=V&&"true"===localStorage.getItem(B(0,"isLocal")),r=void 0,d=void 0;if(Object.defineProperties(this,{parent:{get:function(){return i.parent}},scrollable:{get:function(){return i.scrollable}},autoPlace:{get:function(){return i.autoPlace}},closeOnTop:{get:function(){return i.closeOnTop}},preset:{get:function(){return t.parent?t.getRoot().preset:i.load.preset},set:function(p){t.parent?t.getRoot().preset=p:i.load.preset=p,function Ye(n){for(var e=0;e1){var l=t.__li.nextElementSibling;return t.remove(),M(n,t.object,t.property,{before:l,factoryArgs:[s.toArray(arguments)]})}if(s.isArray(d)||s.isObject(d)){var u=t.__li.nextElementSibling;return t.remove(),M(n,t.object,t.property,{before:u,factoryArgs:[d]})}},name:function(d){return t.__li.firstElementChild.firstElementChild.innerHTML=d,t},listen:function(){return t.__gui.listen(t),t},remove:function(){return t.__gui.remove(t),t}}),t instanceof X){var i=new D(t.object,t.property,{min:t.__min,max:t.__max,step:t.__step});s.each(["updateDisplay","onChange","onFinishChange","step","min","max"],function(r){var d=t[r],l=i[r];t[r]=i[r]=function(){var u=Array.prototype.slice.call(arguments);return l.apply(i,u),d.apply(t,u)}}),a.addClass(e,"has-slider"),t.domElement.insertBefore(i.domElement,t.domElement.firstElementChild)}else if(t instanceof D){var o=function(d){if(s.isNumber(t.__min)&&s.isNumber(t.__max)){var l=t.__li.firstElementChild.firstElementChild.innerHTML,u=t.__gui.__listening.indexOf(t)>-1;t.remove();var f=M(n,t.object,t.property,{before:t.__li.nextElementSibling,factoryArgs:[t.__min,t.__max,t.__step]});return f.name(l),u&&f.listen(),f}return d};t.min=s.compose(o,t.min),t.max=s.compose(o,t.max)}else t instanceof J?(a.bind(e,"click",function(){a.fakeEvent(t.__checkbox,"click")}),a.bind(t.__checkbox,"click",function(r){r.stopPropagation()})):t instanceof q?(a.bind(e,"click",function(){a.fakeEvent(t.__button,"click")}),a.bind(e,"mouseover",function(){a.addClass(t.__button,"hover")}),a.bind(e,"mouseout",function(){a.removeClass(t.__button,"hover")})):t instanceof j&&(a.addClass(e,"color"),t.updateDisplay=s.compose(function(r){return e.style.borderLeftColor=t.__color.toString(),r},t.updateDisplay),t.updateDisplay());t.setValue=s.compose(function(r){return n.getRoot().__preset_select&&t.isModified()&&te(n.getRoot(),!0),r},t.setValue)}(n,u,o),n.__controllers.push(o),o}function B(n,e){return document.location.href+"."+e}function ne(n,e,t){var i=document.createElement("option");i.innerHTML=e,i.value=e,n.__preset_select.appendChild(i),t&&(n.__preset_select.selectedIndex=n.__preset_select.length-1)}function xe(n,e){e.style.display=n.useLocalStorage?"block":"none"}function Xe(n){var e=n.__save_row=document.createElement("li");a.addClass(n.domElement,"has-save"),n.__ul.insertBefore(e,n.__ul.firstChild),a.addClass(e,"save-row");var t=document.createElement("span");t.innerHTML=" ",a.addClass(t,"button gears");var i=document.createElement("span");i.innerHTML="Save",a.addClass(i,"button"),a.addClass(i,"save");var o=document.createElement("span");o.innerHTML="New",a.addClass(o,"button"),a.addClass(o,"save-as");var r=document.createElement("span");r.innerHTML="Revert",a.addClass(r,"button"),a.addClass(r,"revert");var d=n.__preset_select=document.createElement("select");if(n.load&&n.load.remembered?s.each(n.load.remembered,function(c,p){ne(n,p,p===n.preset)}):ne(n,P,!1),a.bind(d,"change",function(){for(var c=0;c0&&(e.preset=this.preset,e.remembered||(e.remembered={}),e.remembered[this.preset]=Y(this)),e.folders={},s.each(this.__folders,function(t,i){e.folders[i]=t.getSaveObject()}),e},save:function(){this.load.remembered||(this.load.remembered={}),this.load.remembered[this.preset]=Y(this),te(this,!1),this.saveToLocalStorageIfPossible()},saveAs:function(e){this.load.remembered||(this.load.remembered={},this.load.remembered[P]=Y(this,!0)),this.load.remembered[e]=Y(this),this.preset=e,ne(this,e,!0),this.saveToLocalStorageIfPossible()},revert:function(e){s.each(this.__controllers,function(t){this.getRoot().load.remembered?we(e||this.getRoot(),t):t.setValue(t.initialValue),t.__onFinishChange&&t.__onFinishChange.call(t,t.getValue())},this),s.each(this.__folders,function(t){t.revert(t)}),e||te(this.getRoot(),!1)},listen:function(e){var t=0===this.__listening.length;this.__listening.push(e),t&&Ce(this.__listening)},updateDisplay:function(){s.each(this.__controllers,function(e){e.updateDisplay()}),s.each(this.__folders,function(e){e.updateDisplay()})}});var Ee={Color:g,math:H,interpret:$},Ae={Controller:k,BooleanController:J,OptionController:ue,StringController:ce,NumberController:Q,NumberControllerBox:D,NumberControllerSlider:X,FunctionController:q,ColorController:j},Se={dom:a},ke={GUI:h},Oe=h;const We={color:Ee,controllers:Ae,dom:Se,gui:ke,GUI:h}}}]); -//# sourceMappingURL=267.7e1bf61fc32a98a5.js.map \ No newline at end of file diff --git a/docs/267.7e1bf61fc32a98a5.js.map b/docs/267.7e1bf61fc32a98a5.js.map deleted file mode 100644 index edd9ec91f..000000000 --- a/docs/267.7e1bf61fc32a98a5.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"267.7e1bf61fc32a98a5.js","mappings":"4GA8BA,SAASA,EAAeC,EAAOC,GAC7B,IAAIC,EAAcF,EAAMG,QAAQC,eAAeC,WAC3CC,EAAIC,KAAKC,MAAMR,EAAMM,GACrBG,EAAIF,KAAKC,MAAMR,EAAMS,GACrBC,EAAIH,KAAKC,MAAMR,EAAMU,GACrBC,EAAIX,EAAMW,EACVC,EAAIL,KAAKC,MAAMR,EAAMY,GACrBC,EAAIb,EAAMa,EAAEC,QAAQ,GACpBC,EAAIf,EAAMe,EAAED,QAAQ,GACxB,GAAIb,GAA+B,mBAAhBC,GAAoD,iBAAhBA,EAAgC,CAErF,QADIc,EAAMhB,EAAMiB,IAAIZ,SAAS,IACtBW,EAAIE,OAAS,GAClBF,EAAM,IAAMA,EAEd,MAAO,IAAMA,CACf,CAAO,MAAoB,YAAhBd,EACF,OAASI,EAAI,IAAMG,EAAI,IAAMC,EAAI,IACf,aAAhBR,EACF,QAAUI,EAAI,IAAMG,EAAI,IAAMC,EAAI,IAAMC,EAAI,IAC1B,QAAhBT,EACF,KAAOF,EAAMiB,IAAIZ,SAAS,IACR,cAAhBH,EACF,IAAMI,EAAI,IAAMG,EAAI,IAAMC,EAAI,IACZ,eAAhBR,EACF,IAAMI,EAAI,IAAMG,EAAI,IAAMC,EAAI,IAAMC,EAAI,IACtB,YAAhBT,EACF,MAAQI,EAAI,MAAQG,EAAI,MAAQC,EAAI,IAClB,aAAhBR,EACF,MAAQI,EAAI,MAAQG,EAAI,MAAQC,EAAI,MAAQC,EAAI,IAC9B,YAAhBT,EACF,MAAQU,EAAI,MAAQC,EAAI,MAAQE,EAAI,IAClB,aAAhBb,EACF,MAAQU,EAAI,MAAQC,EAAI,MAAQE,EAAI,MAAQJ,EAAI,IAElD,gBACT,qGAEA,IAAIQ,GAAWC,MAAMC,UAAUC,QAC3BC,EAAYH,MAAMC,UAAUG,MAC5BC,EAAS,CACXC,MAAO,CAAC,EACRC,OAAQ,SAAgBC,GACtB,YAAKC,KAAKN,EAAUO,KAAKC,UAAW,GAAI,SAAUC,IACrCC,KAAKC,SAASF,GAAOG,OAAOC,KAAKJ,GAAO,IAC9CV,QAAQ,SAAUe,GAChBJ,KAAKK,YAAYN,EAAIK,MACxBT,EAAOS,GAAOL,EAAIK,GAEtB,EAAEE,KAAKN,MACT,EAAGA,MACIL,CACT,EACAY,SAAU,SAAkBZ,GAC1B,YAAKC,KAAKN,EAAUO,KAAKC,UAAW,GAAI,SAAUC,IACrCC,KAAKC,SAASF,GAAOG,OAAOC,KAAKJ,GAAO,IAC9CV,QAAQ,SAAUe,GACjBJ,KAAKK,YAAYV,EAAOS,MAC1BT,EAAOS,GAAOL,EAAIK,GAEtB,EAAEE,KAAKN,MACT,EAAGA,MACIL,CACT,EACAa,QAAS,WACP,IAAIC,EAASnB,EAAUO,KAAKC,WAC5B,OAAO,WAEL,QADIY,EAAOpB,EAAUO,KAAKC,WACjBa,EAAIF,EAAOxB,OAAS,EAAG0B,GAAK,EAAGA,IACtCD,EAAO,CAACD,EAAOE,GAAGC,MAAMZ,KAAMU,IAEhC,OAAOA,EAAK,EACd,CACF,EACAd,KAAM,SAAcG,EAAKc,EAAKC,GAC5B,GAAKf,EAGL,GAAIb,IAAYa,EAAIV,SAAWU,EAAIV,UAAYH,GAC7Ca,EAAIV,QAAQwB,EAAKC,QAAK,GACbf,EAAId,SAAWc,EAAId,OAAS,EAAG,CACxC,IACI8B,EADAX,OAAM,EAEV,IAAKA,EAAM,EAAGW,EAAIhB,EAAId,OAAQmB,EAAMW,EAAGX,IACrC,GAAIA,KAAOL,GAAOc,EAAIhB,KAAKiB,EAAOf,EAAIK,GAAMA,KAASJ,KAAKP,MACxD,MAGN,MACE,QAASuB,KAAQjB,EACf,GAAIc,EAAIhB,KAAKiB,EAAOf,EAAIiB,GAAOA,KAAUhB,KAAKP,MAC5C,MAIR,EACAwB,MAAO,SAAeC,GACpBC,WAAWD,EAAK,EAClB,EACAE,SAAU,SAAkBC,EAAMC,EAAWC,GAC3C,IAAIC,OAAU,EACd,OAAO,WACL,IAAIzB,EAAMC,KACNU,EAAOZ,UACX,SAAS2B,IACPD,EAAU,KACLD,GAAiBF,EAAKT,MAAMb,EAAKW,EACxC,CACA,IAAIgB,EAAUH,IAAoBC,EAClCG,aAAaH,GACbA,EAAUL,WAAWM,EAASH,GAC1BI,GACFL,EAAKT,MAAMb,EAAKW,EAEpB,CACF,EACAkB,QAAS,SAAiB7B,GACxB,OAAIA,EAAI6B,QAAgB7B,EAAI6B,UACrBtC,EAAUO,KAAKE,EACxB,EACAM,YAAa,SAAqBN,GAChC,YAAe8B,IAAR9B,CACT,EACA+B,OAAQ,SAAgB/B,GACtB,OAAe,OAARA,CACT,EACAgC,MAAO,SAAUC,GACf,SAASD,EAAME,GACb,OAAOD,EAAOpB,MAAMZ,KAAMF,UAC5B,CACAiC,SAAM3D,SAAW,WACf,OAAO4D,EAAO5D,UAChB,EACO2D,CACT,CARO,CAQL,SAAUhC,GACV,OAAOgC,MAAMhC,EACf,GACAmC,QAAS/C,MAAM+C,SAAW,SAAUnC,GAClC,OAAOA,EAAIoC,cAAgBhD,KAC7B,EACAc,SAAU,SAAkBF,GAC1B,OAAOA,IAAQG,OAAOH,EACxB,EACAqC,SAAU,SAAkBrC,GAC1B,OAAOA,IAAQA,EAAM,CACvB,EACAsC,SAAU,SAAkBtC,GAC1B,OAAOA,IAAQA,EAAM,EACvB,EACAuC,UAAW,SAAmBvC,GAC5B,OAAe,IAARA,IAAyB,IAARA,CAC1B,EACAwC,WAAY,SAAoBxC,GAC9B,OAAOA,aAAeyC,QACxB,GAGEC,GAAkB,CACtB,CACEC,OAAQlD,EAAO6C,SACfM,YAAa,CACXC,eAAgB,CACdC,KAAM,SAAcC,GAClB,IAAIC,EAAOD,EAASE,MAAM,sCAC1B,OAAa,OAATD,GAGG,CACLE,MAAO,MACPjE,IAAKkE,SAAS,KAAOH,EAAK,GAAG3E,WAAa2E,EAAK,GAAG3E,WAAa2E,EAAK,GAAG3E,WAAa2E,EAAK,GAAG3E,WAAa2E,EAAK,GAAG3E,WAAa2E,EAAK,GAAG3E,WAAY,GAEtJ,EACA+E,MAAOrF,GAETsF,aAAc,CACZP,KAAM,SAAcC,GAClB,IAAIC,EAAOD,EAASE,MAAM,qBAC1B,OAAa,OAATD,GAGG,CACLE,MAAO,MACPjE,IAAKkE,SAAS,KAAOH,EAAK,GAAG3E,WAAY,GAE7C,EACA+E,MAAOrF,GAETuF,QAAS,CACPR,KAAM,SAAcC,GAClB,IAAIC,EAAOD,EAASE,MAAM,+CAC1B,OAAa,OAATD,GAGG,CACLE,MAAO,MACP5E,EAAGiF,WAAWP,EAAK,IACnBvE,EAAG8E,WAAWP,EAAK,IACnBtE,EAAG6E,WAAWP,EAAK,IAEvB,EACAI,MAAOrF,GAETyF,SAAU,CACRV,KAAM,SAAcC,GAClB,IAAIC,EAAOD,EAASE,MAAM,4DAC1B,OAAa,OAATD,GAGG,CACLE,MAAO,MACP5E,EAAGiF,WAAWP,EAAK,IACnBvE,EAAG8E,WAAWP,EAAK,IACnBtE,EAAG6E,WAAWP,EAAK,IACnBrE,EAAG4E,WAAWP,EAAK,IAEvB,EACAI,MAAOrF,KAIb,CACE4E,OAAQlD,EAAO4C,SACfO,YAAa,CACXa,IAAK,CACHX,KAAM,SAAcC,GAClB,MAAO,CACLG,MAAO,MACPjE,IAAK8D,EACL3E,eAAgB,MAEpB,EACAgF,MAAO,SAAepF,GACpB,OAAOA,EAAMiB,GACf,KAIN,CACE0D,OAAQlD,EAAO0C,QACfS,YAAa,CACXc,UAAW,CACTZ,KAAM,SAAcC,GAClB,OAAwB,IAApBA,EAAS7D,QAGN,CACLgE,MAAO,MACP5E,EAAGyE,EAAS,GACZtE,EAAGsE,EAAS,GACZrE,EAAGqE,EAAS,GAEhB,EACAK,MAAO,SAAepF,GACpB,MAAO,CAACA,EAAMM,EAAGN,EAAMS,EAAGT,EAAMU,EAClC,GAEFiF,WAAY,CACVb,KAAM,SAAcC,GAClB,OAAwB,IAApBA,EAAS7D,QACN,CACLgE,MAAO,MACP5E,EAAGyE,EAAS,GACZtE,EAAGsE,EAAS,GACZrE,EAAGqE,EAAS,GACZpE,EAAGoE,EAAS,GAEhB,EACAK,MAAO,SAAepF,GACpB,MAAO,CAACA,EAAMM,EAAGN,EAAMS,EAAGT,EAAMU,EAAGV,EAAMW,EAC3C,KAIN,CACEgE,OAAQlD,EAAOS,SACf0C,YAAa,CACXgB,SAAU,CACRd,KAAM,SAAcC,GAClB,SAAItD,EAAO4C,SAASU,EAASzE,IAAMmB,EAAO4C,SAASU,EAAStE,IAAMgB,EAAO4C,SAASU,EAASrE,IAAMe,EAAO4C,SAASU,EAASpE,KACjH,CACLuE,MAAO,MACP5E,EAAGyE,EAASzE,EACZG,EAAGsE,EAAStE,EACZC,EAAGqE,EAASrE,EACZC,EAAGoE,EAASpE,EAIlB,EACAyE,MAAO,SAAepF,GACpB,MAAO,CACLM,EAAGN,EAAMM,EACTG,EAAGT,EAAMS,EACTC,EAAGV,EAAMU,EACTC,EAAGX,EAAMW,EAEb,GAEFkF,QAAS,CACPf,KAAM,SAAcC,GAClB,SAAItD,EAAO4C,SAASU,EAASzE,IAAMmB,EAAO4C,SAASU,EAAStE,IAAMgB,EAAO4C,SAASU,EAASrE,KAClF,CACLwE,MAAO,MACP5E,EAAGyE,EAASzE,EACZG,EAAGsE,EAAStE,EACZC,EAAGqE,EAASrE,EAIlB,EACA0E,MAAO,SAAepF,GACpB,MAAO,CACLM,EAAGN,EAAMM,EACTG,EAAGT,EAAMS,EACTC,EAAGV,EAAMU,EAEb,GAEFoF,SAAU,CACRhB,KAAM,SAAcC,GAClB,SAAItD,EAAO4C,SAASU,EAASnE,IAAMa,EAAO4C,SAASU,EAASlE,IAAMY,EAAO4C,SAASU,EAAShE,IAAMU,EAAO4C,SAASU,EAASpE,KACjH,CACLuE,MAAO,MACPtE,EAAGmE,EAASnE,EACZC,EAAGkE,EAASlE,EACZE,EAAGgE,EAAShE,EACZJ,EAAGoE,EAASpE,EAIlB,EACAyE,MAAO,SAAepF,GACpB,MAAO,CACLY,EAAGZ,EAAMY,EACTC,EAAGb,EAAMa,EACTE,EAAGf,EAAMe,EACTJ,EAAGX,EAAMW,EAEb,GAEFoF,QAAS,CACPjB,KAAM,SAAcC,GAClB,SAAItD,EAAO4C,SAASU,EAASnE,IAAMa,EAAO4C,SAASU,EAASlE,IAAMY,EAAO4C,SAASU,EAAShE,KAClF,CACLmE,MAAO,MACPtE,EAAGmE,EAASnE,EACZC,EAAGkE,EAASlE,EACZE,EAAGgE,EAAShE,EAIlB,EACAqE,MAAO,SAAepF,GACpB,MAAO,CACLY,EAAGZ,EAAMY,EACTC,EAAGb,EAAMa,EACTE,EAAGf,EAAMe,EAEb,MAIFiF,OAAS,EACTC,OAAW,EACXC,EAAY,WACdD,GAAW,EACX,IAAIlB,EAAWhD,UAAUb,OAAS,EAAIO,EAAOoC,QAAQ9B,WAAaA,UAAU,GAC5EN,SAAOI,KAAK6C,GAAiB,SAAUyB,GACrC,GAAIA,EAAOxB,OAAOI,GAChBtD,SAAOI,KAAKsE,EAAOvB,YAAa,SAAUwB,EAAYhG,GAEpD,GADA4F,EAASI,EAAWtB,KAAKC,IACR,IAAbkB,IAAiC,IAAXD,EACxBC,SAAWD,EACXA,EAAO5F,eAAiBA,EACxB4F,EAAOI,WAAaA,EACb3E,EAAOC,KAElB,GACOD,EAAOC,KAElB,GACOuE,CACT,EAEII,QAAe,EACfC,EAAY,CACdC,WAAY,SAAoB3F,EAAGC,EAAGE,GACpC,IAAIyF,EAAKjG,KAAKkG,MAAM7F,EAAI,IAAM,EAC1B8F,EAAI9F,EAAI,GAAKL,KAAKkG,MAAM7F,EAAI,IAC5B+F,EAAI5F,GAAK,EAAMF,GACf+F,EAAI7F,GAAK,EAAM2F,EAAI7F,GACnBgG,EAAI9F,GAAK,GAAO,EAAM2F,GAAK7F,GAC3BiG,EAAI,CAAC,CAAC/F,EAAG8F,EAAGF,GAAI,CAACC,EAAG7F,EAAG4F,GAAI,CAACA,EAAG5F,EAAG8F,GAAI,CAACF,EAAGC,EAAG7F,GAAI,CAAC8F,EAAGF,EAAG5F,GAAI,CAACA,EAAG4F,EAAGC,IAAIJ,GAC3E,MAAO,CACLlG,EAAU,IAAPwG,EAAE,GACLrG,EAAU,IAAPqG,EAAE,GACLpG,EAAU,IAAPoG,EAAE,GAET,EACAC,WAAY,SAAoBzG,EAAGG,EAAGC,GACpC,IAAIsG,EAAMzG,KAAKyG,IAAI1G,EAAGG,EAAGC,GACrBuG,EAAM1G,KAAK0G,IAAI3G,EAAGG,EAAGC,GACrBwG,EAAQD,EAAMD,EACdpG,OAAI,EAER,OAAY,IAARqG,EAGK,CACLrG,EAAGuG,IACHtG,EAAG,EACHE,EAAG,IAILH,EADEN,IAAM2G,GACHxG,EAAIC,GAAKwG,EACLzG,IAAMwG,EACX,GAAKvG,EAAIJ,GAAK4G,EAEd,GAAK5G,EAAIG,GAAKyG,GAEpBtG,GAAK,GACG,IACNA,GAAK,GAEA,CACLA,EAAO,IAAJA,EACHC,EArBIqG,EAAQD,EAsBZlG,EAAGkG,EAAM,KAEb,EACAG,WAAY,SAAoB9G,EAAGG,EAAGC,GACpC,IAAIO,EAAMgB,KAAKoF,mBAAmB,EAAG,EAAG/G,GACxCW,SAAMgB,KAAKoF,mBAAmBpG,EAAK,EAAGR,GAChCwB,KAAKoF,mBAAmBpG,EAAK,EAAGP,EAExC,EACA4G,mBAAoB,SAA4BrG,EAAKsG,GACnD,OAAOtG,GAAwB,EAAjBsG,EAAqB,GACrC,EACAF,mBAAoB,SAA4BpG,EAAKsG,EAAgBC,GACnE,OAAOA,IAAUnB,GAAgC,EAAjBkB,GAAsBtG,IAAQ,KAAQoF,GACxE,GAGEoB,GAA4B,mBAAXC,QAAoD,iBAApBA,OAAOC,SAAwB,SAAU3F,GAC5F,cAAcA,CAChB,EAAI,SAAUA,GACZ,OAAOA,GAAyB,mBAAX0F,QAAyB1F,EAAIoC,cAAgBsD,QAAU1F,IAAQ0F,OAAOrG,UAAY,gBAAkBW,CAC3H,EAYI4F,EAAiB,SAAUC,EAAUC,GACvC,KAAMD,aAAoBC,GACxB,MAAM,IAAIC,UAAU,oCAExB,EAEIC,EAAc,WAChB,SAASC,EAAiBrG,EAAQsG,GAChC,QAAStF,EAAI,EAAGA,EAAIsF,EAAMhH,OAAQ0B,IAAK,CACrC,IAAIuF,EAAaD,EAAMtF,GACvBuF,EAAWC,WAAaD,EAAWC,aAAc,EACjDD,EAAWE,cAAe,EACtB,UAAWF,IAAYA,EAAWG,UAAW,GACjDnG,OAAOoG,eAAe3G,EAAQuG,EAAW9F,IAAK8F,EAChD,CACF,CAEA,OAAO,SAAUL,EAAaU,EAAYC,GACxC,OAAID,GAAYP,EAAiBH,EAAYzG,UAAWmH,GACpDC,GAAaR,EAAiBH,EAAaW,GACxCX,CACT,CACF,CAhBkB,GAwBdY,EAAM,SAASA,EAAIC,EAAQC,EAAUC,GACxB,OAAXF,IAAiBA,EAASlE,SAASpD,WACvC,IAAIyH,EAAO3G,OAAO4G,yBAAyBJ,EAAQC,GAEnD,QAAa9E,IAATgF,EAAoB,CACtB,IAAIE,EAAS7G,OAAO8G,eAAeN,GAEnC,OAAe,OAAXK,OACF,EAEON,EAAIM,EAAQJ,EAAUC,EAEjC,CAAO,GAAI,UAAWC,EACpB,OAAOA,EAAKtB,MAEZ,IAAI0B,EAASJ,EAAKJ,IAElB,YAAe5E,IAAXoF,OACF,EAGKA,EAAOpH,KAAK+G,EAEvB,EAEIM,EAAW,SAAUC,EAAUC,GACjC,GAA0B,mBAAfA,GAA4C,OAAfA,EACtC,MAAM,IAAItB,UAAU,kEAAoEsB,GAG1FD,EAAS/H,UAAYc,OAAOmH,OAAOD,GAAcA,EAAWhI,UAAW,CACrE+C,YAAa,CACXoD,MAAO4B,EACPhB,YAAY,EACZE,UAAU,EACVD,cAAc,KAGdgB,IAAYlH,OAAOoH,eAAiBpH,OAAOoH,eAAeH,EAAUC,GAAcD,EAASI,UAAYH,EAC7G,EAYII,EAA4B,SAAUC,EAAM5H,GAC9C,IAAK4H,EACH,MAAM,IAAIC,eAAe,6DAG3B,OAAO7H,GAAyB,iBAATA,GAAqC,mBAATA,EAA8B4H,EAAP5H,CAC5E,EAEI8H,EAAQ,WACV,SAASA,IAGP,GAFAhC,EAAe3F,KAAM2H,GACrB3H,KAAK9B,QAAU+F,EAAUrD,MAAMZ,KAAMF,YAChB,IAAjBE,KAAK9B,QACP,MAAM,IAAI0J,MAAM,uCAElB5H,KAAK9B,QAAQQ,EAAIsB,KAAK9B,QAAQQ,GAAK,CACrC,CACAqH,SAAY4B,EAAO,CAAC,CAClBvH,IAAK,WACLmF,MAAO,WACL,OAAOzH,EAAckC,KACvB,GACC,CACDI,IAAK,cACLmF,MAAO,WACL,OAAOzH,EAAckC,MAAM,EAC7B,GACC,CACDI,IAAK,aACLmF,MAAO,WACL,OAAOvF,KAAK9B,QAAQiG,WAAWhB,MAAMnD,KACvC,KAEK2H,CACT,CA1BY,GA2BZ,SAASE,EAAmBlI,EAAQmI,EAAWC,GAC7C7H,OAAOoG,eAAe3G,EAAQmI,EAAW,CACvCrB,IAAK,WACH,MAA2B,QAAvBzG,KAAK9B,QAAQ+E,OAGjB0E,EAAMK,eAAehI,KAAM8H,EAAWC,GAF7B/H,KAAK9B,QAAQ4J,EAIxB,EACAG,IAAK,SAAgBnJ,GACQ,QAAvBkB,KAAK9B,QAAQ+E,QACf0E,EAAMK,eAAehI,KAAM8H,EAAWC,GACtC/H,KAAK9B,QAAQ+E,MAAQ,OAEvBjD,KAAK9B,QAAQ4J,GAAahJ,CAC5B,GAEJ,CACA,SAASoJ,EAAmBvI,EAAQmI,GAClC5H,OAAOoG,eAAe3G,EAAQmI,EAAW,CACvCrB,IAAK,WACH,MAA2B,QAAvBzG,KAAK9B,QAAQ+E,OAGjB0E,EAAMQ,eAAenI,MAFZA,KAAK9B,QAAQ4J,EAIxB,EACAG,IAAK,SAAgBnJ,GACQ,QAAvBkB,KAAK9B,QAAQ+E,QACf0E,EAAMQ,eAAenI,MACrBA,KAAK9B,QAAQ+E,MAAQ,OAEvBjD,KAAK9B,QAAQ4J,GAAahJ,CAC5B,GAEJ,CACA6I,EAAMK,eAAiB,SAAUjK,EAAO+J,EAAWC,GACjD,GAA4B,QAAxBhK,EAAMG,QAAQ+E,MAChBlF,EAAMG,QAAQ4J,GAAazD,EAAUgB,mBAAmBtH,EAAMG,QAAQc,IAAK+I,OAAiB,IAC3D,QAAxBhK,EAAMG,QAAQ+E,MAGvB,MAAM,IAAI2E,MAAM,yBAFhBpI,EAAOE,OAAO3B,EAAMG,QAASmG,EAAUC,WAAWvG,EAAMG,QAAQS,EAAGZ,EAAMG,QAAQU,EAAGb,EAAMG,QAAQY,GAE3D,CAE3C,EACA6I,EAAMQ,eAAiB,SAAUpK,GAC/B,IAAIgG,EAASM,EAAUS,WAAW/G,EAAMM,EAAGN,EAAMS,EAAGT,EAAMU,GAC1De,EAAOE,OAAO3B,EAAMG,QAAS,CAC3BU,EAAGmF,EAAOnF,EACVE,EAAGiF,EAAOjF,IAEPU,EAAOuC,MAAMgC,EAAOpF,GAEda,EAAOa,YAAYtC,EAAMG,QAAQS,KAC1CZ,EAAMG,QAAQS,EAAI,GAFlBZ,EAAMG,QAAQS,EAAIoF,EAAOpF,CAI7B,EACAgJ,EAAMS,WAAa,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,MAAO,KACzDP,EAAmBF,EAAMvI,UAAW,IAAK,GACzCyI,EAAmBF,EAAMvI,UAAW,IAAK,GACzCyI,EAAmBF,EAAMvI,UAAW,IAAK,GACzC8I,EAAmBP,EAAMvI,UAAW,KACpC8I,EAAmBP,EAAMvI,UAAW,KACpC8I,EAAmBP,EAAMvI,UAAW,KACpCc,OAAOoG,eAAeqB,EAAMvI,UAAW,IAAK,CAC1CqH,IAAK,WACH,OAAOzG,KAAK9B,QAAQQ,CACtB,EACAuJ,IAAK,SAAgBnJ,GACnBkB,KAAK9B,QAAQQ,EAAII,CACnB,IAEFoB,OAAOoG,eAAeqB,EAAMvI,UAAW,MAAO,CAC5CqH,IAAK,WACH,MAA2B,QAAvBzG,KAAK9B,QAAQ+E,QACfjD,KAAK9B,QAAQc,IAAMqF,EAAUc,WAAWnF,KAAK3B,EAAG2B,KAAKxB,EAAGwB,KAAKvB,GAC7DuB,KAAK9B,QAAQ+E,MAAQ,OAEhBjD,KAAK9B,QAAQc,GACtB,EACAiJ,IAAK,SAAgBnJ,GACnBkB,KAAK9B,QAAQ+E,MAAQ,MACrBjD,KAAK9B,QAAQc,IAAMF,CACrB,IAGF,IAAIuJ,EAAa,WACf,SAASA,EAAW3B,EAAQC,GAC1BhB,EAAe3F,KAAMqI,GACrBrI,KAAKsI,aAAe5B,EAAOC,GAC3B3G,KAAKuI,WAAaC,SAASC,cAAc,OACzCzI,KAAK0G,OAASA,EACd1G,KAAK2G,SAAWA,EAChB3G,KAAK0I,gBAAa7G,EAClB7B,KAAK2I,sBAAmB9G,CAC1B,CACAkE,SAAYsC,EAAY,CAAC,CACvBjI,IAAK,WACLmF,MAAO,SAAkBrE,GACvB,YAAKwH,WAAaxH,EACXlB,IACT,GACC,CACDI,IAAK,iBACLmF,MAAO,SAAwBrE,GAC7B,YAAKyH,iBAAmBzH,EACjBlB,IACT,GACC,CACDI,IAAK,WACLmF,MAAO,SAAkBqD,GACvB,YAAKlC,OAAO1G,KAAK2G,UAAYiC,EACzB5I,KAAK0I,YACP1I,KAAK0I,WAAW7I,KAAKG,KAAM4I,GAE7B5I,KAAK6I,gBACE7I,IACT,GACC,CACDI,IAAK,WACLmF,MAAO,WACL,OAAOvF,KAAK0G,OAAO1G,KAAK2G,SAC1B,GACC,CACDvG,IAAK,gBACLmF,MAAO,WACL,OAAOvF,IACT,GACC,CACDI,IAAK,aACLmF,MAAO,WACL,OAAOvF,KAAKsI,eAAiBtI,KAAK8I,UACpC,KAEKT,CACT,CAjDiB,GAwDbU,GAAgB,CAAC,EACrBvJ,EAAOI,KANS,CACdoJ,WAAY,CAAC,UACbC,YAAa,CAAC,QAAS,YAAa,YAAa,UAAW,aAC5DC,eAAgB,CAAC,YAGI,SAAUpK,EAAGqK,GAClC3J,EAAOI,KAAKd,EAAG,SAAUsK,GACvBL,GAAcK,GAAKD,CACrB,EACF,GACA,IAAIE,GAAmB,kBACvB,SAASC,EAAiBC,GACxB,GAAY,MAARA,GAAe/J,EAAOa,YAAYkJ,GACpC,OAAO,EAET,IAAIvG,EAAQuG,EAAIvG,MAAMqG,IACtB,OAAK7J,EAAOsC,OAAOkB,GAGZ,EAFEM,WAAWN,EAAM,GAG5B,CACA,IAAIwG,EAAM,CACRC,eAAgB,SAAwBC,EAAMC,QAC/B9H,IAAT6H,QAAqC7H,IAAf6H,EAAKE,QAC/BF,EAAKG,cAAgBF,EAAa,WAChC,OAAO,CACT,EAAI,WAAa,EACjBD,EAAKE,MAAME,cAAgBH,EAAa,OAAS,OACjDD,EAAKE,MAAMG,gBAAkBJ,EAAa,OAAS,OACnDD,EAAKM,aAAeL,EAAa,KAAO,MAC1C,EACAM,eAAgB,SAAwBP,EAAMQ,EAAKC,GACjD,IAAIC,EAAWD,EACXE,EAAaH,EACb1K,EAAOa,YAAYgK,KACrBA,GAAa,GAEX7K,EAAOa,YAAY+J,KACrBA,GAAW,GAEbV,EAAKE,MAAMU,SAAW,WAClBD,IACFX,EAAKE,MAAMW,KAAO,EAClBb,EAAKE,MAAMY,MAAQ,GAEjBJ,IACFV,EAAKE,MAAMa,IAAM,EACjBf,EAAKE,MAAMc,OAAS,EAExB,EACAC,UAAW,SAAmBjB,EAAMkB,EAAWC,EAAMC,GACnD,IAAIC,EAASF,GAAQ,CAAC,EAClBG,EAAYjC,GAAc6B,GAC9B,IAAKI,EACH,MAAM,IAAIpD,MAAM,cAAgBgD,EAAY,mBAE9C,IAAIK,EAAMzC,SAAS0C,YAAYF,GAC/B,OAAQA,GACN,IAAK,cAIDC,EAAIE,eAAeP,EAAWG,EAAOK,UAAW,EAAOL,EAAOM,aAAc,EAAMC,OAAQP,EAAOQ,YAAc,EAAG,EAClH,EAHcR,EAAOS,GAAKT,EAAOU,SAAW,EAC9BV,EAAOW,GAAKX,EAAOY,SAAW,GAK5C,GAAO,GAAO,GAAO,EAAO,EAAG,MAC/B,MAEJ,IAAK,iBAED,IAAIC,EAAOX,EAAIY,mBAAqBZ,EAAIa,aACxCtM,EAAOe,SAASwK,EAAQ,CACtBM,YAAY,EACZU,SAAS,EACTC,QAAQ,EACRC,UAAU,EACVC,SAAS,EACTC,aAAStK,EACTuK,cAAUvK,IAEZ+J,EAAKhB,EAAWG,EAAOK,UAAW,EAAOL,EAAOM,WAAYC,OAAQP,EAAOgB,QAAShB,EAAOiB,OAAQjB,EAAOkB,SAAUlB,EAAOmB,QAASnB,EAAOoB,QAASpB,EAAOqB,UAC3J,MAEJ,QAEInB,EAAIoB,UAAUzB,EAAWG,EAAOK,UAAW,EAAOL,EAAOM,aAAc,GAI7E7L,EAAOe,SAAS0K,EAAKH,GACrBpB,EAAK4C,cAAcrB,EACrB,EACA3K,KAAM,SAAcoJ,EAAM6C,EAAOlL,EAAMmL,GAErC,OAAI9C,EAAK+C,iBACP/C,EAAK+C,iBAAiBF,EAAOlL,EAFpBmL,IAAW,GAGX9C,EAAKgD,aACdhD,EAAKgD,YAAY,KAAOH,EAAOlL,GAE1BmI,CACT,EACAmD,OAAQ,SAAgBjD,EAAM6C,EAAOlL,EAAMmL,GAEzC,OAAI9C,EAAKkD,oBACPlD,EAAKkD,oBAAoBL,EAAOlL,EAFvBmL,IAAW,GAGX9C,EAAKmD,aACdnD,EAAKmD,YAAY,KAAON,EAAOlL,GAE1BmI,CACT,EACAsD,SAAU,SAAkBpD,EAAMsB,GAChC,QAAuBnJ,IAAnB6H,EAAKsB,UACPtB,EAAKsB,UAAYA,UACRtB,EAAKsB,YAAcA,EAAW,CACvC,IAAI+B,EAAUrD,EAAKsB,UAAUgC,MAAM,OACA,IAA/BD,EAAQE,QAAQjC,KAClB+B,EAAQG,KAAKlC,GACbtB,EAAKsB,UAAY+B,EAAQI,KAAK,KAAKC,QAAQ,OAAQ,IAAIA,QAAQ,OAAQ,IAE3E,CACA,OAAO5D,CACT,EACA6D,YAAa,SAAqB3D,EAAMsB,GACtC,GAAIA,EACF,GAAItB,EAAKsB,YAAcA,EACrBtB,EAAK4D,gBAAgB,aAChB,CACL,IAAIP,EAAUrD,EAAKsB,UAAUgC,MAAM,MAC/BO,EAAQR,EAAQE,QAAQjC,IACd,IAAVuC,IACFR,EAAQS,OAAOD,EAAO,GACtB7D,EAAKsB,UAAY+B,EAAQI,KAAK,KAElC,MAEAzD,EAAKsB,eAAYnJ,EAEnB,OAAO2H,CACT,EACAiE,SAAU,SAAkB/D,EAAMsB,GAChC,OAAO,IAAI0C,OAAO,aAAe1C,EAAY,cAAcjI,KAAK2G,EAAKsB,aAAc,CACrF,EACA2C,SAAU,SAAkBjE,GAC1B,IAAIE,EAAQgE,iBAAiBlE,GAC7B,OAAOJ,EAAiBM,EAAM,sBAAwBN,EAAiBM,EAAM,uBAAyBN,EAAiBM,EAAM,iBAAmBN,EAAiBM,EAAM,kBAAoBN,EAAiBM,EAAMiE,MACpN,EACAC,UAAW,SAAmBpE,GAC5B,IAAIE,EAAQgE,iBAAiBlE,GAC7B,OAAOJ,EAAiBM,EAAM,qBAAuBN,EAAiBM,EAAM,wBAA0BN,EAAiBM,EAAM,gBAAkBN,EAAiBM,EAAM,mBAAqBN,EAAiBM,EAAMmE,OACpN,EACAC,UAAW,SAAmBC,GAC5B,IAAIvE,EAAOuE,EACPC,EAAS,CAAE3D,KAAM,EAAGE,IAAK,GAC7B,GAAIf,EAAKyE,aACP,GACED,EAAO3D,MAAQb,EAAK0E,WACpBF,EAAOzD,KAAOf,EAAK2E,UACnB3E,EAAOA,EAAKyE,mBACLzE,GAEX,OAAOwE,CACT,EACAI,SAAU,SAAkB5E,GAC1B,OAAOA,IAASlB,SAAS+F,gBAAkB7E,EAAK8E,MAAQ9E,EAAK+E,KAC/D,GAGEC,EAAoB,SAAUC,GAEhC,SAASD,EAAkBhI,EAAQC,GACjChB,EAAe3F,KAAM0O,GACrB,IAAIE,EAASpH,EAA0BxH,MAAO0O,EAAkBnH,WAAarH,OAAO8G,eAAe0H,IAAoB7O,KAAKG,KAAM0G,EAAQC,IACtIkI,EAAQD,EAOZpF,OANAoF,EAAOE,OAASF,EAAO9F,WACvB8F,EAAOG,WAAavG,SAASC,cAAc,SAC3CmG,EAAOG,WAAWC,aAAa,OAAQ,YAIvCxF,EAAIlJ,KAAKsO,EAAOG,WAAY,SAH5B,SAASE,IACPJ,EAAMK,UAAUL,EAAMC,OACxB,GACgD,GAChDF,EAAOrG,WAAW4G,YAAYP,EAAOG,YACrCH,EAAO/F,gBACA+F,CACT,CACA7I,OAhBAmB,EAASwH,EAAmBC,GAgB5B5I,EAAY2I,EAAmB,CAAC,CAC9BtO,IAAK,WACLmF,MAAO,SAAkBzG,GACvB,IAAIkF,EAAWyC,EAAIiI,EAAkBtP,UAAUmI,WAAarH,OAAO8G,eAAe0H,EAAkBtP,WAAY,WAAYY,MAAMH,KAAKG,KAAMlB,GAC7I,OAAIkB,KAAK2I,kBACP3I,KAAK2I,iBAAiB9I,KAAKG,KAAMA,KAAK8I,YAExC9I,KAAK8O,OAAS9O,KAAK8I,WACZ9E,CACT,GACC,CACD5D,IAAK,gBACLmF,MAAO,WACL,OAAwB,IAApBvF,KAAK8I,YACP9I,KAAK+O,WAAWC,aAAa,UAAW,WACxChP,KAAK+O,WAAWK,SAAU,EAC1BpP,KAAK8O,QAAS,IAEd9O,KAAK+O,WAAWK,SAAU,EAC1BpP,KAAK8O,QAAS,GAETrI,EAAIiI,EAAkBtP,UAAUmI,WAAarH,OAAO8G,eAAe0H,EAAkBtP,WAAY,gBAAiBY,MAAMH,KAAKG,KACtI,KAEK0O,CACT,CA1CwB,CA0CtBrG,GAEEgH,GAAmB,SAAUV,GAE/B,SAASU,EAAiB3I,EAAQC,EAAU2I,GAC1C3J,EAAe3F,KAAMqP,GACrB,IAAIT,EAASpH,EAA0BxH,MAAOqP,EAAiB9H,WAAarH,OAAO8G,eAAeqI,IAAmBxP,KAAKG,KAAM0G,EAAQC,IACpI4I,EAAUD,EACVT,EAAQD,EAEZ,GADAA,EAAOY,SAAWhH,SAASC,cAAc,UACrCjJ,EAAO0C,QAAQqN,GAAU,CAC3B,IAAIE,EAAM,CAAC,EACXjQ,EAAOI,KAAK2P,EAAS,SAAUG,GAC7BD,EAAIC,GAAWA,CACjB,GACAH,EAAUE,CACZ,CACAjQ,SAAOI,KAAK2P,EAAS,SAAUhK,EAAOnF,GACpC,IAAIuP,EAAMnH,SAASC,cAAc,UACjCkH,EAAIC,UAAYxP,EAChBuP,EAAIX,aAAa,QAASzJ,GAC1BsJ,EAAMW,SAASL,YAAYQ,EAC7B,GACAf,EAAO/F,gBACPW,EAAIlJ,KAAKsO,EAAOY,SAAU,SAAU,WAElCX,EAAMK,SADalP,KAAKuP,QAAQvP,KAAK6P,eAAetK,MAEtD,GACAqJ,EAAOrG,WAAW4G,YAAYP,EAAOY,UAC9BZ,CACT,CACA7I,OA5BAmB,EAASmI,EAAkBV,GA4B3B5I,EAAYsJ,EAAkB,CAAC,CAC7BjP,IAAK,WACLmF,MAAO,SAAkBzG,GACvB,IAAIkF,EAAWyC,EAAI4I,EAAiBjQ,UAAUmI,WAAarH,OAAO8G,eAAeqI,EAAiBjQ,WAAY,WAAYY,MAAMH,KAAKG,KAAMlB,GAC3I,OAAIkB,KAAK2I,kBACP3I,KAAK2I,iBAAiB9I,KAAKG,KAAMA,KAAK8I,YAEjC9E,CACT,GACC,CACD5D,IAAK,gBACLmF,MAAO,WACL,OAAIiE,EAAI8E,SAAStO,KAAKwP,UAAkBxP,MACxCA,KAAKwP,SAASjK,MAAQvF,KAAK8I,WACpBrC,EAAI4I,EAAiBjQ,UAAUmI,WAAarH,OAAO8G,eAAeqI,EAAiBjQ,WAAY,gBAAiBY,MAAMH,KAAKG,MACpI,KAEKqP,CACT,CA/CuB,CA+CrBhH,GAEEyH,GAAmB,SAAUnB,GAE/B,SAASmB,EAAiBpJ,EAAQC,GAChChB,EAAe3F,KAAM8P,GACrB,IAAIlB,EAASpH,EAA0BxH,MAAO8P,EAAiBvI,WAAarH,OAAO8G,eAAe8I,IAAmBjQ,KAAKG,KAAM0G,EAAQC,IACpIkI,EAAQD,EACZ,SAASK,IACPJ,EAAMK,SAASL,EAAMkB,QAAQxK,MAC/B,CAMAqJ,SAAOmB,QAAUvH,SAASC,cAAc,SACxCmG,EAAOmB,QAAQf,aAAa,OAAQ,QACpCxF,EAAIlJ,KAAKsO,EAAOmB,QAAS,QAASd,GAClCzF,EAAIlJ,KAAKsO,EAAOmB,QAAS,SAAUd,GACnCzF,EAAIlJ,KAAKsO,EAAOmB,QAAS,OATzB,SAASC,IACHnB,EAAMlG,kBACRkG,EAAMlG,iBAAiB9I,KAAKgP,EAAOA,EAAM/F,WAE7C,GAMAU,EAAIlJ,KAAKsO,EAAOmB,QAAS,UAAW,SAAU3G,GAC1B,KAAdA,EAAE+C,SACJnM,KAAKiQ,MAET,GACArB,EAAO/F,gBACP+F,EAAOrG,WAAW4G,YAAYP,EAAOmB,SAC9BnB,CACT,CACA7I,OA3BAmB,EAAS4I,EAAkBnB,GA2B3B5I,EAAY+J,EAAkB,CAAC,CAC7B1P,IAAK,gBACLmF,MAAO,WACL,OAAKiE,EAAI8E,SAAStO,KAAK+P,WACrB/P,KAAK+P,QAAQxK,MAAQvF,KAAK8I,YAErBrC,EAAIqJ,EAAiB1Q,UAAUmI,WAAarH,OAAO8G,eAAe8I,EAAiB1Q,WAAY,gBAAiBY,MAAMH,KAAKG,KACpI,KAEK8P,CACT,CAtCuB,CAsCrBzH,GAEF,SAAS6H,GAAY1E,GACnB,IAAIvJ,EAAKuJ,EAAEpN,WACX,OAAI6D,EAAGgL,QAAQ,MAAO,EACbhL,EAAGhD,OAASgD,EAAGgL,QAAQ,KAAO,EAEhC,CACT,CACA,IAAIkD,EAAmB,SAAUxB,GAE/B,SAASwB,EAAiBzJ,EAAQC,EAAUoE,GAC1CpF,EAAe3F,KAAMmQ,GACrB,IAAItB,EAAQrH,EAA0BxH,MAAOmQ,EAAiB5I,WAAarH,OAAO8G,eAAemJ,IAAmBtQ,KAAKG,KAAM0G,EAAQC,IACnIyJ,EAAUrF,GAAU,CAAC,EACzB8D,SAAMwB,MAAQD,EAAQrL,IACtB8J,EAAMyB,MAAQF,EAAQpL,IACtB6J,EAAM0B,OAASH,EAAQI,KAGnB3B,EAAM4B,cAFNjR,EAAOa,YAAYwO,EAAM0B,QACA,IAAvB1B,EAAMvG,aACc,EAEAhK,KAAKoS,IAAI,GAAIpS,KAAKkG,MAAMlG,KAAKqS,IAAIrS,KAAKsS,IAAI/B,EAAMvG,eAAiBhK,KAAKuS,OAAS,GAGjFhC,EAAM0B,OAE9B1B,EAAMiC,YAAcZ,GAAYrB,EAAM4B,eAC/B5B,CACT,CACA9I,OApBAmB,EAASiJ,EAAkBxB,GAoB3B5I,EAAYoK,EAAkB,CAAC,CAC7B/P,IAAK,WACLmF,MAAO,SAAkBzG,GACvB,IAAIiS,EAAKjS,EACT,YAAmB+C,IAAf7B,KAAKqQ,OAAuBU,EAAK/Q,KAAKqQ,MACxCU,EAAK/Q,KAAKqQ,WACcxO,IAAf7B,KAAKsQ,OAAuBS,EAAK/Q,KAAKsQ,QAC/CS,EAAK/Q,KAAKsQ,YAEQzO,IAAhB7B,KAAKuQ,QAAwBQ,EAAK/Q,KAAKuQ,QAAW,IACpDQ,EAAKzS,KAAKC,MAAMwS,EAAK/Q,KAAKuQ,QAAUvQ,KAAKuQ,QAEpC9J,EAAI0J,EAAiB/Q,UAAUmI,WAAarH,OAAO8G,eAAemJ,EAAiB/Q,WAAY,WAAYY,MAAMH,KAAKG,KAAM+Q,EACrI,GACC,CACD3Q,IAAK,MACLmF,MAAO,SAAayL,GAClB,YAAKX,MAAQW,EACNhR,IACT,GACC,CACDI,IAAK,MACLmF,MAAO,SAAa0L,GAClB,YAAKX,MAAQW,EACNjR,IACT,GACC,CACDI,IAAK,OACLmF,MAAO,SAAc2L,GACnB,YAAKX,OAASW,EACdlR,KAAKyQ,cAAgBS,EACrBlR,KAAK8Q,YAAcZ,GAAYgB,GACxBlR,IACT,KAEKmQ,CACT,CAzDuB,CAyDrB9H,GAME8I,EAAsB,SAAUC,GAElC,SAASD,EAAoBzK,EAAQC,EAAUoE,GAC7CpF,EAAe3F,KAAMmR,GACrB,IAAIvC,EAASpH,EAA0BxH,MAAOmR,EAAoB5J,WAAarH,OAAO8G,eAAemK,IAAsBtR,KAAKG,KAAM0G,EAAQC,EAAUoE,IACxJ6D,EAAOyC,uBAAwB,EAC/B,IAAIxC,EAAQD,EACR0C,OAAQ,EAOZ,SAASC,IACH1C,EAAMlG,kBACRkG,EAAMlG,iBAAiB9I,KAAKgP,EAAOA,EAAM/F,WAE7C,CAIA,SAAS0I,EAAYpI,GACnB,IAAIqI,EAAOH,EAAQlI,EAAEuC,QACrBkD,EAAMK,SAASL,EAAM/F,WAAa2I,EAAO5C,EAAM4B,eAC/Ca,EAAQlI,EAAEuC,OACZ,CACA,SAAS+F,IACPlI,EAAImD,OAAOrB,OAAQ,YAAakG,GAChChI,EAAImD,OAAOrB,OAAQ,UAAWoG,GAC9BH,GACF,CAMA3C,SAAOmB,QAAUvH,SAASC,cAAc,SACxCmG,EAAOmB,QAAQf,aAAa,OAAQ,QACpCxF,EAAIlJ,KAAKsO,EAAOmB,QAAS,SA/BzB,SAASd,IACP,IAAI0C,EAAYrO,WAAWuL,EAAMkB,QAAQxK,OACpC/F,EAAOuC,MAAM4P,IAChB9C,EAAMK,SAASyC,EAEnB,GA2BAnI,EAAIlJ,KAAKsO,EAAOmB,QAAS,OArBzB,SAASC,IACPuB,GACF,GAoBA/H,EAAIlJ,KAAKsO,EAAOmB,QAAS,YATzB,SAAS6B,EAAYxI,GACnBI,EAAIlJ,KAAKgL,OAAQ,YAAakG,GAC9BhI,EAAIlJ,KAAKgL,OAAQ,UAAWoG,GAC5BJ,EAAQlI,EAAEuC,OACZ,GAMAnC,EAAIlJ,KAAKsO,EAAOmB,QAAS,UAAW,SAAU3G,GAC1B,KAAdA,EAAE+C,UACJ0C,EAAMwC,uBAAwB,EAC9BrR,KAAKiQ,OACLpB,EAAMwC,uBAAwB,EAC9BE,IAEJ,GACA3C,EAAO/F,gBACP+F,EAAOrG,WAAW4G,YAAYP,EAAOmB,SAC9BnB,CACT,CACA7I,OArDAmB,EAASiK,EAAqBC,GAqD9BrL,EAAYoL,EAAqB,CAAC,CAChC/Q,IAAK,gBACLmF,MAAO,WACL,YAAKwK,QAAQxK,MAAQvF,KAAKqR,sBAAwBrR,KAAK8I,WA7D7D,SAAS+I,GAAetM,EAAOuM,GAC7B,IAAIC,EAAQzT,KAAKoS,IAAI,GAAIoB,GACzB,OAAOxT,KAAKC,MAAMgH,EAAQwM,GAASA,CACrC,CA0D0EF,CAAe7R,KAAK8I,WAAY9I,KAAK8Q,aAClGrK,EAAI0K,EAAoB/R,UAAUmI,WAAarH,OAAO8G,eAAemK,EAAoB/R,WAAY,gBAAiBY,MAAMH,KAAKG,KAC1I,KAEKmR,CACT,CA9D0B,CA8DxBhB,GAEF,SAASV,GAAI3Q,EAAGkT,EAAIC,EAAIC,EAAIC,GAC1B,OAAOD,GAAmBpT,EAAIkT,IAAOC,EAAKD,IAA7BG,EAAKD,EACpB,CACA,IAAIE,EAAyB,SAAUhB,GAErC,SAASgB,EAAuB1L,EAAQC,EAAU5B,EAAKC,EAAKwL,GAC1D7K,EAAe3F,KAAMoS,GACrB,IAAIxD,EAASpH,EAA0BxH,MAAOoS,EAAuB7K,WAAarH,OAAO8G,eAAeoL,IAAyBvS,KAAKG,KAAM0G,EAAQC,EAAU,CAAE5B,IAAKA,EAAKC,IAAKA,EAAKwL,KAAMA,KACtL3B,EAAQD,EAaZ,SAAS4C,EAAYpI,GACnBA,EAAEiJ,iBACF,IAAIC,EAASzD,EAAM0D,aAAaC,wBAChC3D,SAAMK,SAASO,GAAIrG,EAAEqC,QAAS6G,EAAO/H,KAAM+H,EAAO9H,MAAOqE,EAAMwB,MAAOxB,EAAMyB,SACrE,CACT,CACA,SAASoB,IACPlI,EAAImD,OAAOrB,OAAQ,YAAakG,GAChChI,EAAImD,OAAOrB,OAAQ,UAAWoG,GAC1B7C,EAAMlG,kBACRkG,EAAMlG,iBAAiB9I,KAAKgP,EAAOA,EAAM/F,WAE7C,CASA,SAAS2J,EAAYrJ,GACnB,IAAIqC,EAAUrC,EAAEsJ,QAAQ,GAAGjH,QACvB6G,EAASzD,EAAM0D,aAAaC,wBAChC3D,EAAMK,SAASO,GAAIhE,EAAS6G,EAAO/H,KAAM+H,EAAO9H,MAAOqE,EAAMwB,MAAOxB,EAAMyB,OAC5E,CACA,SAASqC,IACPnJ,EAAImD,OAAOrB,OAAQ,YAAamH,GAChCjJ,EAAImD,OAAOrB,OAAQ,WAAYqH,GAC3B9D,EAAMlG,kBACRkG,EAAMlG,iBAAiB9I,KAAKgP,EAAOA,EAAM/F,WAE7C,CACA8F,OA7CAA,EAAO2D,aAAe/J,SAASC,cAAc,OAC7CmG,EAAOgE,aAAepK,SAASC,cAAc,OAC7Ce,EAAIlJ,KAAKsO,EAAO2D,aAAc,YAI9B,SAASX,EAAYxI,GACnBZ,SAAS+F,cAAc0B,OACvBzG,EAAIlJ,KAAKgL,OAAQ,YAAakG,GAC9BhI,EAAIlJ,KAAKgL,OAAQ,UAAWoG,GAC5BF,EAAYpI,EACd,GARAI,EAAIlJ,KAAKsO,EAAO2D,aAAc,aAsB9B,SAASM,EAAazJ,GACK,IAArBA,EAAEsJ,QAAQzT,SAGduK,EAAIlJ,KAAKgL,OAAQ,YAAamH,GAC9BjJ,EAAIlJ,KAAKgL,OAAQ,WAAYqH,GAC7BF,EAAYrJ,GACd,GA5BAI,EAAIsD,SAAS8B,EAAO2D,aAAc,UAClC/I,EAAIsD,SAAS8B,EAAOgE,aAAc,aAwClChE,EAAO/F,gBACP+F,EAAO2D,aAAapD,YAAYP,EAAOgE,cACvChE,EAAOrG,WAAW4G,YAAYP,EAAO2D,cAC9B3D,CACT,CACA7I,OAvDAmB,EAASkL,EAAwBhB,GAuDjCrL,EAAYqM,EAAwB,CAAC,CACnChS,IAAK,gBACLmF,MAAO,WACL,IAAIuN,GAAO9S,KAAK8I,WAAa9I,KAAKqQ,QAAUrQ,KAAKsQ,MAAQtQ,KAAKqQ,OAC9D,YAAKuC,aAAahJ,MAAMiE,MAAc,IAANiF,EAAY,IACrCrM,EAAI2L,EAAuBhT,UAAUmI,WAAarH,OAAO8G,eAAeoL,EAAuBhT,WAAY,gBAAiBY,MAAMH,KAAKG,KAChJ,KAEKoS,CACT,CAjE6B,CAiE3BjC,GAEE4C,EAAqB,SAAUpE,GAEjC,SAASoE,EAAmBrM,EAAQC,EAAUqM,GAC5CrN,EAAe3F,KAAM+S,GACrB,IAAInE,EAASpH,EAA0BxH,MAAO+S,EAAmBxL,WAAarH,OAAO8G,eAAe+L,IAAqBlT,KAAKG,KAAM0G,EAAQC,IACxIkI,EAAQD,EACZA,SAAOqE,SAAWzK,SAASC,cAAc,OACzCmG,EAAOqE,SAASrD,eAAqB/N,IAATmR,EAAqB,OAASA,EAC1DxJ,EAAIlJ,KAAKsO,EAAOqE,SAAU,QAAS,SAAU7J,GAC3CA,SAAEiJ,iBACFxD,EAAMqE,QACC,CACT,GACA1J,EAAIsD,SAAS8B,EAAOqE,SAAU,UAC9BrE,EAAOrG,WAAW4G,YAAYP,EAAOqE,UAC9BrE,CACT,CACA7I,OAhBAmB,EAAS6L,EAAoBpE,GAgB7B5I,EAAYgN,EAAoB,CAAC,CAC/B3S,IAAK,OACLmF,MAAO,WACDvF,KAAK0I,YACP1I,KAAK0I,WAAW7I,KAAKG,MAEvBA,KAAK8I,WAAWjJ,KAAKG,KAAK0G,QACtB1G,KAAK2I,kBACP3I,KAAK2I,iBAAiB9I,KAAKG,KAAMA,KAAK8I,WAE1C,KAEKiK,CACT,CA9ByB,CA8BvB1K,GAEE8K,EAAkB,SAAUxE,GAE9B,SAASwE,EAAgBzM,EAAQC,GAC/BhB,EAAe3F,KAAMmT,GACrB,IAAIvE,EAASpH,EAA0BxH,MAAOmT,EAAgB5L,WAAarH,OAAO8G,eAAemM,IAAkBtT,KAAKG,KAAM0G,EAAQC,IACtIiI,EAAOwE,QAAU,IAAIzL,EAAMiH,EAAO9F,YAClC8F,EAAOyE,OAAS,IAAI1L,EAAM,GAC1B,IAAIkH,EAAQD,EACZA,EAAOrG,WAAaC,SAASC,cAAc,OAC3Ce,EAAIC,eAAemF,EAAOrG,YAAY,GACtCqG,EAAO0E,WAAa9K,SAASC,cAAc,OAC3CmG,EAAO0E,WAAWtI,UAAY,WAC9B4D,EAAO2E,mBAAqB/K,SAASC,cAAc,OACnDmG,EAAO2E,mBAAmBvI,UAAY,mBACtC4D,EAAO4E,aAAehL,SAASC,cAAc,OAC7CmG,EAAO4E,aAAaxI,UAAY,aAChC4D,EAAO6E,oBAAsB,aAC7B7E,EAAO8E,WAAalL,SAASC,cAAc,OAC3CmG,EAAO8E,WAAW1I,UAAY,WAC9B4D,EAAO+E,YAAcnL,SAASC,cAAc,OAC5CmG,EAAO+E,YAAY3I,UAAY,YAC/B4D,EAAOmB,QAAUvH,SAASC,cAAc,SACxCmG,EAAOmB,QAAQvB,KAAO,OACtBI,EAAOgF,mBAAqB,aAC5BpK,EAAIlJ,KAAKsO,EAAOmB,QAAS,UAAW,SAAU3G,GAC1B,KAAdA,EAAE+C,SACJ6D,EAAOnQ,KAAKG,KAEhB,GACAwJ,EAAIlJ,KAAKsO,EAAOmB,QAAS,OAAQC,GACjCxG,EAAIlJ,KAAKsO,EAAO0E,WAAY,YAAa,WACvC9J,EAAIsD,SAAS9M,KAAM,QAAQM,KAAKgL,OAAQ,UAAW,WACjD9B,EAAI6D,YAAYwB,EAAMyE,WAAY,OACpC,EACF,GACA9J,EAAIlJ,KAAKsO,EAAO0E,WAAY,aAAc,WACxC9J,EAAIsD,SAAS9M,KAAM,QAAQM,KAAKgL,OAAQ,WAAY,WAClD9B,EAAI6D,YAAYwB,EAAMyE,WAAY,OACpC,EACF,GACA,IAAIO,EAAarL,SAASC,cAAc,OA8DxC,SAASqL,EAAU1K,GACjB2K,EAAM3K,GACNI,EAAIlJ,KAAKgL,OAAQ,YAAayI,GAC9BvK,EAAIlJ,KAAKgL,OAAQ,YAAayI,GAC9BvK,EAAIlJ,KAAKgL,OAAQ,UAAW0I,GAC5BxK,EAAIlJ,KAAKgL,OAAQ,WAAY0I,EAC/B,CACA,SAASC,EAAW7K,GAClB8K,EAAK9K,GACLI,EAAIlJ,KAAKgL,OAAQ,YAAa4I,GAC9B1K,EAAIlJ,KAAKgL,OAAQ,YAAa4I,GAC9B1K,EAAIlJ,KAAKgL,OAAQ,UAAW6I,GAC5B3K,EAAIlJ,KAAKgL,OAAQ,WAAY6I,EAC/B,CACA,SAASH,IACPxK,EAAImD,OAAOrB,OAAQ,YAAayI,GAChCvK,EAAImD,OAAOrB,OAAQ,YAAayI,GAChCvK,EAAImD,OAAOrB,OAAQ,UAAW0I,GAC9BxK,EAAImD,OAAOrB,OAAQ,WAAY0I,GAC/BzC,GACF,CACA,SAAS4C,IACP3K,EAAImD,OAAOrB,OAAQ,YAAa4I,GAChC1K,EAAImD,OAAOrB,OAAQ,YAAa4I,GAChC1K,EAAImD,OAAOrB,OAAQ,UAAW6I,GAC9B3K,EAAImD,OAAOrB,OAAQ,WAAY6I,GAC/B5C,GACF,CACA,SAASvB,IACP,IAAIrP,EAAIsD,EAAUjE,KAAKuF,QACb,IAAN5E,GACFkO,EAAMuE,QAAQlV,QAAUyC,EACxBkO,EAAMK,SAASL,EAAMuE,QAAQgB,eAE7BpU,KAAKuF,MAAQsJ,EAAMuE,QAAQhV,UAE/B,CACA,SAASmT,IACH1C,EAAMlG,kBACRkG,EAAMlG,iBAAiB9I,KAAKgP,EAAOA,EAAMuE,QAAQgB,aAErD,CASA,SAASL,EAAM3K,IACmB,IAA5BA,EAAEoF,KAAKvB,QAAQ,UACjB7D,EAAEiJ,iBAEJ,IAAIgC,EAAYxF,EAAM0E,mBAAmBf,wBACrC8B,EAAOlL,EAAEsJ,SAAWtJ,EAAEsJ,QAAQ,IAAMtJ,EAGpCxK,GAFU0V,EAAK7I,QAEA4I,EAAU9J,OAAS8J,EAAU7J,MAAQ6J,EAAU9J,MAC9DzL,EAAI,GAFMwV,EAAK3I,QAEI0I,EAAU5J,MAAQ4J,EAAU3J,OAAS2J,EAAU5J,KACtE,OAAI3L,EAAI,EACNA,EAAI,EACKA,EAAI,IACbA,EAAI,GAEFF,EAAI,EACNA,EAAI,EACKA,EAAI,IACbA,EAAI,GAENiQ,EAAMuE,QAAQtU,EAAIA,EAClB+P,EAAMuE,QAAQxU,EAAIA,EAClBiQ,EAAMK,SAASL,EAAMuE,QAAQgB,eACtB,CACT,CACA,SAASF,EAAK9K,IACoB,IAA5BA,EAAEoF,KAAKvB,QAAQ,UACjB7D,EAAEiJ,iBAEJ,IAAIgC,EAAYxF,EAAM8E,YAAYnB,wBAG9B7T,EAAI,IAFIyK,EAAEsJ,SAAWtJ,EAAEsJ,QAAQ,IAAMtJ,GACrBuC,QACG0I,EAAU5J,MAAQ4J,EAAU3J,OAAS2J,EAAU5J,KACtE,OAAI9L,EAAI,EACNA,EAAI,EACKA,EAAI,IACbA,EAAI,GAENkQ,EAAMuE,QAAQzU,EAAQ,IAAJA,EAClBkQ,EAAMK,SAASL,EAAMuE,QAAQgB,eACtB,CACT,CACA,OAzJA5U,EAAOE,OAAOkP,EAAO0E,WAAW1J,MAAO,CACrCiE,MAAO,QACPE,OAAQ,QACRwG,QAAS,MACTC,gBAAiB,OACjBC,UAAW,gCAEbjV,EAAOE,OAAOkP,EAAO4E,aAAa5J,MAAO,CACvCU,SAAU,WACVuD,MAAO,OACPE,OAAQ,OACR2G,OAAQ9F,EAAO6E,qBAAuB7E,EAAOwE,QAAQtU,EAAI,GAAM,OAAS,QACxE2V,UAAW,8BACXE,aAAc,OACdC,OAAQ,IAEVpV,EAAOE,OAAOkP,EAAO8E,WAAW9J,MAAO,CACrCU,SAAU,WACVuD,MAAO,OACPE,OAAQ,MACR8G,YAAa,iBACbD,OAAQ,IAEVpV,EAAOE,OAAOkP,EAAO2E,mBAAmB3J,MAAO,CAC7CiE,MAAO,QACPE,OAAQ,QACR2G,OAAQ,iBACRI,YAAa,MACbC,QAAS,eACTC,OAAQ,YAEVxV,EAAOE,OAAOmU,EAAWjK,MAAO,CAC9BiE,MAAO,OACPE,OAAQ,OACRkH,WAAY,SAEdC,GAAerB,EAAY,MAAO,gBAAiB,QACnDrU,EAAOE,OAAOkP,EAAO+E,YAAY/J,MAAO,CACtCiE,MAAO,OACPE,OAAQ,QACR2G,OAAQ,iBACRM,OAAQ,YACR1K,SAAU,WACVG,IAAK,MACLD,MAAO,QA8Jb,SAAS2K,GAAYzL,GACnBA,EAAKE,MAAMqL,WAAa,GACxBvL,EAAKE,MAAMwL,SAAW,qIACtB1L,EAAKE,MAAMwL,SAAW,kIACtB1L,EAAKE,MAAMwL,SAAW,6HACtB1L,EAAKE,MAAMwL,SAAW,8HACtB1L,EAAKE,MAAMwL,SAAW,yHACxB,CAnKID,CAAYvG,EAAO+E,aACnBnU,EAAOE,OAAOkP,EAAOmB,QAAQnG,MAAO,CAClCyL,QAAS,OACTC,UAAW,SACXvX,MAAO,OACP2W,OAAQ,EACRa,WAAY,OACZC,WAAY5G,EAAOgF,mBAAqB,oBAE1CpK,EAAIlJ,KAAKsO,EAAO2E,mBAAoB,YAAaO,GACjDtK,EAAIlJ,KAAKsO,EAAO2E,mBAAoB,aAAcO,GAClDtK,EAAIlJ,KAAKsO,EAAO4E,aAAc,YAAaM,GAC3CtK,EAAIlJ,KAAKsO,EAAO4E,aAAc,aAAcM,GAC5CtK,EAAIlJ,KAAKsO,EAAO+E,YAAa,YAAaM,GAC1CzK,EAAIlJ,KAAKsO,EAAO+E,YAAa,aAAcM,GA2C3CrF,EAAO2E,mBAAmBpE,YAAY0E,GACtCjF,EAAO0E,WAAWnE,YAAYP,EAAO4E,cACrC5E,EAAO0E,WAAWnE,YAAYP,EAAO2E,oBACrC3E,EAAO0E,WAAWnE,YAAYP,EAAO+E,aACrC/E,EAAO+E,YAAYxE,YAAYP,EAAO8E,YACtC9E,EAAOrG,WAAW4G,YAAYP,EAAOmB,SACrCnB,EAAOrG,WAAW4G,YAAYP,EAAO0E,YACrC1E,EAAO/F,gBA2CA+F,CACT,CACA7I,OAnMAmB,EAASiM,EAAiBxE,GAmM1B5I,EAAYoN,EAAiB,CAAC,CAC5B/S,IAAK,gBACLmF,MAAO,WACL,IAAI5E,EAAIsD,EAAUjE,KAAK8I,YACvB,IAAU,IAANnI,EAAa,CACf,IAAI8U,GAAW,EACfjW,EAAOI,KAAK+H,EAAMS,WAAY,SAAUN,GACtC,IAAKtI,EAAOa,YAAYM,EAAEmH,MAAgBtI,EAAOa,YAAYL,KAAKoT,QAAQlV,QAAQ4J,KAAenH,EAAEmH,KAAe9H,KAAKoT,QAAQlV,QAAQ4J,GACrI2N,UAAW,EACJ,CAAC,CAEZ,EAAGzV,MACCyV,GACFjW,EAAOE,OAAOM,KAAKoT,QAAQlV,QAASyC,EAExC,CACAnB,EAAOE,OAAOM,KAAKqT,OAAOnV,QAAS8B,KAAKoT,QAAQlV,SAChD8B,KAAKqT,OAAO3U,EAAI,EAChB,IAAIgX,EAAO1V,KAAKoT,QAAQtU,EAAI,IAAOkB,KAAKoT,QAAQxU,EAAI,GAAM,IAAM,EAC5D+W,EAAQ,IAAMD,EAClBlW,EAAOE,OAAOM,KAAKwT,aAAa5J,MAAO,CACrCgM,WAAY,IAAM5V,KAAKoT,QAAQxU,EAAI,EAAI,KACvCiX,UAAW,KAAO,EAAI7V,KAAKoT,QAAQtU,GAAK,EAAI,KAC5C0V,gBAAiBxU,KAAKqT,OAAOyC,cAC7BpB,OAAQ1U,KAAKyT,oBAAsB,OAASiC,EAAO,IAAMA,EAAO,IAAMA,EAAO,MAE/E1V,KAAK0T,WAAW9J,MAAMiM,UAAyC,KAA5B,EAAI7V,KAAKoT,QAAQzU,EAAI,KAAa,KACrEqB,KAAKqT,OAAOzU,EAAI,EAChBoB,KAAKqT,OAAOvU,EAAI,EAChBoW,GAAelV,KAAKuT,mBAAoB,OAAQ,OAAQvT,KAAKqT,OAAOyC,eACpE9V,KAAK+P,QAAQxK,MAAQvF,KAAKoT,QAAQhV,WAClCoB,EAAOE,OAAOM,KAAK+P,QAAQnG,MAAO,CAChC4K,gBAAiBxU,KAAKoT,QAAQ0C,cAC9B/X,MAAO,OAAS2X,EAAO,IAAMA,EAAO,IAAMA,EAAO,IACjDF,WAAYxV,KAAK4T,mBAAqB,QAAU+B,EAAQ,IAAMA,EAAQ,IAAMA,EAAQ,QAExF,KAEKxC,CACT,CA3OsB,CA2OpB9K,GACE0N,GAAU,CAAC,QAAS,MAAO,WAAY,OAAQ,IACnD,SAASb,GAAexL,EAAM8B,EAAG9M,EAAGD,GAClCiL,EAAKE,MAAMqL,WAAa,GACxBzV,EAAOI,KAAKmW,GAAS,SAAUC,GAC7BtM,EAAKE,MAAMwL,SAAW,eAAiBY,EAAS,mBAAqBxK,EAAI,KAAO9M,EAAI,QAAUD,EAAI,UACpG,EACF,CAUA,IAsBIwX,GAAqB,4pBAErBC,GAAoB,SAA2BxP,EAAQC,GACzD,IAAI2B,EAAe5B,EAAOC,GAC1B,OAAInH,EAAO0C,QAAQpC,UAAU,KAAON,EAAOS,SAASH,UAAU,IACrD,IAAIuP,GAAiB3I,EAAQC,EAAU7G,UAAU,IAEtDN,EAAO4C,SAASkG,GACd9I,EAAO4C,SAAStC,UAAU,KAAON,EAAO4C,SAAStC,UAAU,IACzDN,EAAO4C,SAAStC,UAAU,IACrB,IAAIsS,EAAuB1L,EAAQC,EAAU7G,UAAU,GAAIA,UAAU,GAAIA,UAAU,IAErF,IAAIsS,EAAuB1L,EAAQC,EAAU7G,UAAU,GAAIA,UAAU,IAE1EN,EAAO4C,SAAStC,UAAU,IACrB,IAAIqR,EAAoBzK,EAAQC,EAAU,CAAE5B,IAAKjF,UAAU,GAAIkF,IAAKlF,UAAU,GAAI0Q,KAAM1Q,UAAU,KAEpG,IAAIqR,EAAoBzK,EAAQC,EAAU,CAAE5B,IAAKjF,UAAU,GAAIkF,IAAKlF,UAAU,KAEnFN,EAAO6C,SAASiG,GACX,IAAIwH,GAAiBpJ,EAAQC,GAElCnH,EAAO+C,WAAW+F,GACb,IAAIyK,EAAmBrM,EAAQC,EAAU,IAE9CnH,EAAO8C,UAAUgG,GACZ,IAAIoG,EAAkBhI,EAAQC,GAEhC,IACT,EAKIwP,GAA0B7K,OAAO8K,uBAAyB9K,OAAO+K,6BAA+B/K,OAAOgL,0BAA4BhL,OAAOiL,wBAA0BjL,OAAOkL,yBAH/K,SAASJ,GAAsBK,GAC7BtV,WAAWsV,EAAU,IAAO,GAC9B,EAGIC,GAAc,WAChB,SAASA,IACP/Q,EAAe3F,KAAM0W,GACrB1W,KAAK2W,kBAAoBnO,SAASC,cAAc,OAChDjJ,EAAOE,OAAOM,KAAK2W,kBAAkB/M,MAAO,CAC1C4K,gBAAiB,kBACjB/J,IAAK,EACLF,KAAM,EACNwK,QAAS,OACTH,OAAQ,OACRgC,QAAS,EACTC,iBAAkB,sBAClBC,WAAY,wBAEdtN,EAAIS,eAAejK,KAAK2W,mBACxB3W,KAAK2W,kBAAkB/M,MAAMU,SAAW,QACxCtK,KAAKuI,WAAaC,SAASC,cAAc,OACzCjJ,EAAOE,OAAOM,KAAKuI,WAAWqB,MAAO,CACnCU,SAAU,QACVyK,QAAS,OACTH,OAAQ,OACRgC,QAAS,EACTC,iBAAkB,uDAClBC,WAAY,iDAEdtO,SAASuO,KAAK5H,YAAYnP,KAAK2W,mBAC/BnO,SAASuO,KAAK5H,YAAYnP,KAAKuI,YAC/B,IAAIsG,EAAQ7O,KACZwJ,EAAIlJ,KAAKN,KAAK2W,kBAAmB,QAAS,WACxC9H,EAAMmI,MACR,EACF,CACAjR,SAAY2Q,EAAa,CAAC,CACxBtW,IAAK,OACLmF,MAAO,WACL,IAAIsJ,EAAQ7O,KACZA,KAAK2W,kBAAkB/M,MAAMmL,QAAU,QACvC/U,KAAKuI,WAAWqB,MAAMmL,QAAU,QAChC/U,KAAKuI,WAAWqB,MAAMgN,QAAU,EAChC5W,KAAKuI,WAAWqB,MAAMqN,gBAAkB,aACxCjX,KAAKkX,SACL1X,EAAOyB,MAAM,WACX4N,EAAM8H,kBAAkB/M,MAAMgN,QAAU,EACxC/H,EAAMtG,WAAWqB,MAAMgN,QAAU,EACjC/H,EAAMtG,WAAWqB,MAAMqN,gBAAkB,UAC3C,EACF,GACC,CACD7W,IAAK,OACLmF,MAAO,WACL,IAAIsJ,EAAQ7O,KACRgX,EAAO,SAASA,IAClBnI,EAAMtG,WAAWqB,MAAMmL,QAAU,OACjClG,EAAM8H,kBAAkB/M,MAAMmL,QAAU,OACxCvL,EAAImD,OAAOkC,EAAMtG,WAAY,sBAAuByO,GACpDxN,EAAImD,OAAOkC,EAAMtG,WAAY,gBAAiByO,GAC9CxN,EAAImD,OAAOkC,EAAMtG,WAAY,iBAAkByO,EACjD,EACAxN,EAAIlJ,KAAKN,KAAKuI,WAAY,sBAAuByO,GACjDxN,EAAIlJ,KAAKN,KAAKuI,WAAY,gBAAiByO,GAC3CxN,EAAIlJ,KAAKN,KAAKuI,WAAY,iBAAkByO,GAC5ChX,KAAK2W,kBAAkB/M,MAAMgN,QAAU,EACvC5W,KAAKuI,WAAWqB,MAAMgN,QAAU,EAChC5W,KAAKuI,WAAWqB,MAAMqN,gBAAkB,YAC1C,GACC,CACD7W,IAAK,SACLmF,MAAO,WACLvF,KAAKuI,WAAWqB,MAAMW,KAAOe,OAAO6L,WAAa,EAAI3N,EAAImE,SAAS3N,KAAKuI,YAAc,EAAI,KACzFvI,KAAKuI,WAAWqB,MAAMa,IAAMa,OAAO8L,YAAc,EAAI5N,EAAIsE,UAAU9N,KAAKuI,YAAc,EAAI,IAC5F,KAEKmO,CACT,CAzEkB,IAjDR,SAAgBW,EAAYC,GAClC,IAAIC,EAAMD,GAAS9O,SACfgP,EAAWhP,SAASC,cAAc,SACtC+O,EAAShJ,KAAO,WAChBgJ,EAAS5H,UAAYyH,EACrB,IAAII,EAAOF,EAAIG,qBAAqB,QAAQ,GAC5C,IACED,EAAKtI,YAAYqI,EAEnB,CADA,MACA,CACF,CAoHFG,CAvnDA,SAASC,GAAgBD,GACvB,GAAKA,YAGMrM,OAAW,KAItB,KAAI1B,EAAQpB,SAASC,cAAc,SAEnCmB,SAAMoF,aAAa,OAAQ,YAC3BpF,EAAMgG,UAAY+H,EAClBnP,SAASiP,KAAKtI,YAAYvF,GAEnB+N,EACT,CAsmDiBC,CAAgB,kuLAGjC,IAGIC,EAA8B,UAC9BC,EAAyB,WAC3B,IACE,QAASxM,OAAOyM,YAGlB,CAFA,MACE,OAAO,CACT,CACF,CAN6B,GAOzBC,OAAgB,EAChBC,IAAkB,EAClBC,OAAqB,EACrBlB,GAAO,EACPmB,GAAe,GACfC,EAAM,SAASA,EAAIvN,GACrB,IAAIgE,EAAQ7O,KACR+K,EAASF,GAAQ,CAAC,EACtB7K,KAAKuI,WAAaC,SAASC,cAAc,OACzCzI,KAAKqY,KAAO7P,SAASC,cAAc,MACnCzI,KAAKuI,WAAW4G,YAAYnP,KAAKqY,MACjC7O,EAAIsD,SAAS9M,KAAKuI,WAtBA,MAuBlBvI,KAAKsY,UAAY,CAAC,EAClBtY,KAAKuY,cAAgB,GACrBvY,KAAKwY,oBAAsB,GAC3BxY,KAAKyY,uCAAyC,GAC9CzY,KAAK0Y,YAAc,GACnB3N,EAASvL,EAAOe,SAASwK,EAAQ,CAC/B4N,YAAY,EACZC,WAAW,EACX/K,MAAOuK,EAAIS,gBAEb9N,EAASvL,EAAOe,SAASwK,EAAQ,CAC/B+N,UAAW/N,EAAO6N,UAClBG,SAAUhO,EAAO6N,YAEdpZ,EAAOa,YAAY0K,EAAOiO,MAK7BjO,EAAOiO,KAAO,CAAEC,OAAQpB,GAJpB9M,EAAOkO,SACTlO,EAAOiO,KAAKC,OAASlO,EAAOkO,QAK5BzZ,EAAOa,YAAY0K,EAAOhE,SAAWgE,EAAOgO,UAC9CZ,GAAajL,KAAKlN,MAEpB+K,EAAO+N,UAAYtZ,EAAOa,YAAY0K,EAAOhE,SAAWgE,EAAO+N,UAC3D/N,EAAO6N,WAAapZ,EAAOa,YAAY0K,EAAOmO,cAChDnO,EAAOmO,YAAa,GAEtB,IAAIC,EAAkBrB,GAAyF,SAA/DC,aAAaqB,QAAQC,EAAoBrZ,EAAM,YAC3FsZ,OAAqB,EACrBC,OAAW,EAmGf,GAlGArZ,OAAO8F,iBAAiBhG,KACxB,CACE+G,OAAQ,CACNN,IAAK,WACH,OAAOsE,EAAOhE,MAChB,GAEFmS,WAAY,CACVzS,IAAK,WACH,OAAOsE,EAAOmO,UAChB,GAEFN,UAAW,CACTnS,IAAK,WACH,OAAOsE,EAAO6N,SAChB,GAEFD,WAAY,CACVlS,IAAK,WACH,OAAOsE,EAAO4N,UAChB,GAEFM,OAAQ,CACNxS,IAAK,WACH,OAAIoI,EAAM9H,OACD8H,EAAM2K,UAAUP,OAElBlO,EAAOiO,KAAKC,MACrB,EACAhR,IAAK,SAAgBnJ,GACf+P,EAAM9H,OACR8H,EAAM2K,UAAUP,OAASna,EAEzBiM,EAAOiO,KAAKC,OAASna,EAgtB/B,SAAS2a,GAAqBC,GAC5B,QAASnM,EAAQ,EAAGA,EAAQmM,EAAIC,gBAAgB1a,OAAQsO,IAClDmM,EAAIC,gBAAgBpM,GAAOhI,QAAUmU,EAAIT,SAC3CS,EAAIC,gBAAgB9J,cAAgBtC,EAG1C,CAptBQkM,CAAqBzZ,MACrB6O,EAAM+K,QACR,GAEF/L,MAAO,CACLpH,IAAK,WACH,OAAOsE,EAAO8C,KAChB,EACA5F,IAAK,SAAgBnJ,GACnBiM,EAAO8C,MAAQ/O,EACf+a,GAAShL,EAAO/P,EAClB,GAEFgb,KAAM,CACJrT,IAAK,WACH,OAAOsE,EAAO+O,IAChB,EACA7R,IAAK,SAAgBnJ,GACnBiM,EAAO+O,KAAOhb,EACVya,IACFA,EAAS3J,UAAY7E,EAAO+O,KAEhC,GAEFC,OAAQ,CACNtT,IAAK,WACH,OAAOsE,EAAOgP,MAChB,EACA9R,IAAK,SAAgBnJ,GACnBiM,EAAOgP,OAASjb,EACZiM,EAAOgP,OACTvQ,EAAIsD,SAAS+B,EAAMwJ,KAAMD,EAAI4B,cAE7BxQ,EAAI6D,YAAYwB,EAAMwJ,KAAMD,EAAI4B,cAElCha,KAAKia,WACDpL,EAAMqL,gBACRrL,EAAMqL,cAActK,UAAY9Q,EAAIsZ,EAAI+B,UAAY/B,EAAIgC,YAE5D,GAEFpB,KAAM,CACJvS,IAAK,WACH,OAAOsE,EAAOiO,IAChB,GAEFG,gBAAiB,CACf1S,IAAK,WACH,OAAO0S,CACT,EACAlR,IAAK,SAAgBoS,GACfvC,IACFqB,EAAkBkB,EACdA,EACF7Q,EAAIlJ,KAAKgL,OAAQ,SAAUgO,GAE3B9P,EAAImD,OAAOrB,OAAQ,SAAUgO,GAE/BvB,aAAauC,QAAQjB,EAAoBxK,EAAO,WAAYwL,GAEhE,KAGA7a,EAAOa,YAAY0K,EAAOhE,QAAS,CAIrC,GAHA/G,KAAK+Z,OAAShP,EAAOgP,SAAU,EAC/BvQ,EAAIsD,SAAS9M,KAAKuI,WAAY6P,EAAImC,YAClC/Q,EAAIC,eAAezJ,KAAKuI,YAAY,GAChCuP,GACEqB,EAAiB,CACnBtK,EAAMsK,iBAAkB,EACxB,IAAIqB,EAAWzC,aAAaqB,QAAQC,EAAoBrZ,EAAM,QAC1Dwa,IACFzP,EAAOiO,KAAOyB,KAAKC,MAAMF,GAE7B,CAEFxa,KAAKka,cAAgB1R,SAASC,cAAc,OAC5CzI,KAAKka,cAActK,UAAYwI,EAAIgC,YACnC5Q,EAAIsD,SAAS9M,KAAKka,cAAe9B,EAAIuC,oBACjC5P,EAAO4N,YACTnP,EAAIsD,SAAS9M,KAAKka,cAAe9B,EAAIwC,iBACrC5a,KAAKuI,WAAWsS,aAAa7a,KAAKka,cAAela,KAAKuI,WAAWuS,WAAW,MAE5EtR,EAAIsD,SAAS9M,KAAKka,cAAe9B,EAAI2C,oBACrC/a,KAAKuI,WAAW4G,YAAYnP,KAAKka,gBAEnC1Q,EAAIlJ,KAAKN,KAAKka,cAAe,QAAS,WACpCrL,EAAMkL,QAAUlL,EAAMkL,MACxB,EACF,KAAO,MACiBlY,IAAlBkJ,EAAOgP,SACThP,EAAOgP,QAAS,GAElB,IAAIiB,EAAexS,SAASyS,eAAelQ,EAAO+O,MAClDtQ,EAAIsD,SAASkO,EAAc,mBAC3BzB,EAAW2B,GAAOrM,EAAOmM,GAMzBxR,EAAIsD,SAAS9M,KAAKqY,KAAMD,EAAI4B,cAC5BxQ,EAAIsD,SAASyM,EAAU,SACvB/P,EAAIlJ,KAAKiZ,EAAU,QAPA,SAAsBnQ,GACvCA,SAAEiJ,iBACFxD,EAAMkL,QAAUlL,EAAMkL,QACf,CACT,GAIKhP,EAAOgP,SACV/Z,KAAK+Z,QAAS,EAElB,CACIhP,EAAO6N,YACLpZ,EAAOa,YAAY0K,EAAOhE,UACxBkR,KACFC,EAAqB1P,SAASC,cAAc,OAC5Ce,EAAIsD,SAASoL,EAzMD,MA0MZ1O,EAAIsD,SAASoL,EAAoBE,EAAI+C,4BACrC3S,SAASuO,KAAK5H,YAAY+I,GAC1BD,IAAkB,GAEpBC,EAAmB/I,YAAYnP,KAAKuI,YACpCiB,EAAIsD,SAAS9M,KAAKuI,WAAY6P,EAAIgD,mBAE/Bpb,KAAK+G,QACR8S,GAAShL,EAAO9D,EAAO8C,QAG3B7N,KAAKqb,gBAAkB,WACrBxM,EAAMyM,mBACR,EACA9R,EAAIlJ,KAAKgL,OAAQ,SAAUtL,KAAKqb,iBAChC7R,EAAIlJ,KAAKN,KAAKqY,KAAM,sBAAuBrY,KAAKqb,iBAChD7R,EAAIlJ,KAAKN,KAAKqY,KAAM,gBAAiBrY,KAAKqb,iBAC1C7R,EAAIlJ,KAAKN,KAAKqY,KAAM,iBAAkBrY,KAAKqb,iBAC3Crb,KAAKia,WACDlP,EAAO+N,WAmhBb,SAASyC,GAAgB7B,GACvB,IAAI8B,OAAU,EASd,SAASC,EAAKrS,GACZA,SAAEiJ,iBACFqH,EAAI7L,OAAS2N,EAAUpS,EAAEqC,QACzBiO,EAAIO,WACJuB,EAAUpS,EAAEqC,SACL,CACT,CACA,SAASiQ,IACPlS,EAAI6D,YAAYqM,EAAIQ,cAAe9B,EAAIuD,YACvCnS,EAAImD,OAAOrB,OAAQ,YAAamQ,GAChCjS,EAAImD,OAAOrB,OAAQ,UAAWoQ,EAChC,CACA,SAASE,EAAUxS,GACjBA,SAAEiJ,iBACFmJ,EAAUpS,EAAEqC,QACZjC,EAAIsD,SAAS4M,EAAIQ,cAAe9B,EAAIuD,YACpCnS,EAAIlJ,KAAKgL,OAAQ,YAAamQ,GAC9BjS,EAAIlJ,KAAKgL,OAAQ,UAAWoQ,IACrB,CACT,CA3BAhC,EAAImC,gBAAkBrT,SAASC,cAAc,OAC7CjJ,EAAOE,OAAOga,EAAImC,gBAAgBjS,MAAO,CACvCiE,MAAO,MACP+H,WAAY,OACZ7H,OAAQ,QACRiH,OAAQ,YACR1K,SAAU,aAsBZd,EAAIlJ,KAAKoZ,EAAImC,gBAAiB,YAAaD,GAC3CpS,EAAIlJ,KAAKoZ,EAAIQ,cAAe,YAAa0B,GACzClC,EAAInR,WAAWsS,aAAanB,EAAImC,gBAAiBnC,EAAInR,WAAWuT,kBAClE,CAnjBIP,CAAgBvb,MAOlBA,KAAK+b,6BALLzC,EAAqB,WACfxB,GAA0F,SAAhEC,aAAaqB,QAAQC,EAAoBxK,EAAO,aAC5EkJ,aAAauC,QAAQjB,EAAoBxK,EAAO,OAAQ4L,KAAKuB,UAAUnN,EAAMoN,iBAEjF,EASKlR,EAAOhE,QAPZ,SAASmV,IACP,IAAIC,EAAOtN,EAAM2K,UACjB2C,EAAKtO,OAAS,EACdrO,EAAOyB,MAAM,WACXkb,EAAKtO,OAAS,CAChB,EACF,CAEEqO,EAEJ,EAyOA,SAAShB,GAAOxB,EAAK0C,EAAQC,GAC3B,IAAIC,EAAK9T,SAASC,cAAc,MAChC,OAAI2T,GACFE,EAAGnN,YAAYiN,GAEbC,EACF3C,EAAIrB,KAAKwC,aAAayB,EAAID,GAE1B3C,EAAIrB,KAAKlJ,YAAYmN,GAEvB5C,EAAIO,WACGqC,CACT,CACA,SAASC,GAAgB7C,GACvBlQ,EAAImD,OAAOrB,OAAQ,SAAUoO,EAAI2B,iBAC7B3B,EAAIqC,8BACNvS,EAAImD,OAAOrB,OAAQ,SAAUoO,EAAIqC,6BAErC,CACA,SAASS,GAAmB9C,EAAK+C,GAC/B,IAAI9M,EAAM+J,EAAIC,gBAAgBD,EAAIC,gBAAgB9J,eAEhDF,EAAIC,UADF6M,EACc9M,EAAIpK,MAAQ,IAEZoK,EAAIpK,KAExB,CAmGA,SAASmX,GAAiBhD,EAAKiD,GAC7B,IAAIR,EAAOzC,EAAIF,UACXoD,EAAeT,EAAK3D,oBAAoBvL,QAAQ0P,EAAWjW,QAC/D,IAAqB,IAAjBkW,EAAqB,CACvB,IAAIC,EAAgBV,EAAK1D,uCAAuCmE,GAMhE,QALsB/a,IAAlBgb,IAEFV,EAAK1D,uCAAuCmE,GAD5CC,EAAgB,CAAC,GAGnBA,EAAcF,EAAWhW,UAAYgW,EACjCR,EAAKnD,MAAQmD,EAAKnD,KAAK8D,WAAY,CACrC,IAAIC,EAAYZ,EAAKnD,KAAK8D,WACtB7D,OAAS,EACb,GAAI8D,EAAUrD,EAAIT,QAChBA,EAAS8D,EAAUrD,EAAIT,YAAM,KACpB8D,EAAUlF,GAGnB,OAFAoB,EAAS8D,EAAUlF,EAEnB,CAEF,GAAIoB,EAAO2D,SAA+D/a,IAA9CoX,EAAO2D,GAAcD,EAAWhW,UAAyB,CACnF,IAAIpB,EAAQ0T,EAAO2D,GAAcD,EAAWhW,UAC5CgW,EAAWrU,aAAe/C,EAC1BoX,EAAWzN,SAAS3J,EACtB,CACF,CACF,CACF,CACA,SAASyX,EAAKtD,EAAKhT,EAAQC,EAAUoE,GACnC,QAAyBlJ,IAArB6E,EAAOC,GACT,MAAM,IAAIiB,MAAM,WAAalB,EAAS,sBAAwBC,EAAW,KAE3E,IAAIgW,OAAa,EACjB,GAAI5R,EAAOhN,MACT4e,EAAa,IAAIxJ,EAAgBzM,EAAQC,OACpC,CACL,IAAIsW,EAAc,CAACvW,EAAQC,GAAUuW,OAAOnS,EAAOkS,aACnDN,EAAazG,GAAkBtV,MAAM8Y,EAAKuD,EAC5C,CACIlS,EAAOoS,kBAAkB9U,IAC3B0C,EAAOoS,OAASpS,EAAOoS,OAAOC,MAEhCV,GAAiBhD,EAAKiD,GACtBnT,EAAIsD,SAAS6P,EAAWpU,WAAY,KACpC,IAAIuR,EAAOtR,SAASC,cAAc,QAClCe,EAAIsD,SAASgN,EAAM,iBACnBA,EAAKlK,UAAY+M,EAAWhW,SAC5B,IAAI0W,EAAY7U,SAASC,cAAc,OACvC4U,EAAUlO,YAAY2K,GACtBuD,EAAUlO,YAAYwN,EAAWpU,YACjC,IAAI+T,EAAKpB,GAAOxB,EAAK2D,EAAWtS,EAAOoS,QACvC3T,SAAIsD,SAASwP,EAAIlE,EAAIkF,sBAEnB9T,EAAIsD,SAASwP,EADXK,aAAsBxJ,EACP,QAEA3N,GAAQmX,EAAW7T,aAzJxC,SAASyU,GAAkB7D,EAAK4C,EAAIK,GAmClC,GAlCAA,EAAWS,KAAOd,EAClBK,EAAWa,MAAQ9D,EACnBla,EAAOE,OAAOid,EAAY,CACxBpN,QAAS,SAAiBkO,GACxB,GAAI3d,UAAUb,OAAS,EAAG,CACxB,IAAIye,EAAcf,EAAWS,KAAKO,mBAClChB,SAAWiB,SACJZ,EAAKtD,EAAKiD,EAAWjW,OAAQiW,EAAWhW,SAAU,CACvDwW,OAAQO,EACRT,YAAa,CAACzd,EAAOoC,QAAQ9B,aAEjC,CACA,GAAIN,EAAO0C,QAAQub,IAAaje,EAAOS,SAASwd,GAAW,CACzD,IAAII,EAAelB,EAAWS,KAAKO,mBACnChB,SAAWiB,SACJZ,EAAKtD,EAAKiD,EAAWjW,OAAQiW,EAAWhW,SAAU,CACvDwW,OAAQU,EACRZ,YAAa,CAACQ,IAElB,CACF,EACA3D,KAAM,SAAcgE,GAClBnB,SAAWS,KAAKtB,kBAAkBA,kBAAkBlM,UAAYkO,EACzDnB,CACT,EACAoB,OAAQ,WACNpB,SAAWa,MAAMO,OAAOpB,GACjBA,CACT,EACAiB,OAAQ,WACNjB,SAAWa,MAAMI,OAAOjB,GACjBA,CACT,IAEEA,aAAsBvK,EAAwB,CAChD,IAAI4L,EAAM,IAAI7M,EAAoBwL,EAAWjW,OAAQiW,EAAWhW,SAAU,CAAE5B,IAAK4X,EAAWtM,MAAOrL,IAAK2X,EAAWrM,MAAOE,KAAMmM,EAAWpM,SAC3I/Q,EAAOI,KAAK,CAAC,gBAAiB,WAAY,iBAAkB,OAAQ,MAAO,OAAQ,SAAUqe,GAC3F,IAAIC,EAAKvB,EAAWsB,GAChBE,EAAKH,EAAIC,GACbtB,EAAWsB,GAAUD,EAAIC,GAAU,WACjC,IAAIvd,EAAOvB,MAAMC,UAAUG,MAAMM,KAAKC,WACtCqe,SAAGvd,MAAMod,EAAKtd,GACPwd,EAAGtd,MAAM+b,EAAYjc,EAC9B,CACF,GACA8I,EAAIsD,SAASwP,EAAI,cACjBK,EAAWpU,WAAWsS,aAAamD,EAAIzV,WAAYoU,EAAWpU,WAAWuT,kBAC3E,SAAWa,aAAsBxL,EAAqB,CACpD,IAAI9S,EAAI,SAAW+f,GACjB,GAAI5e,EAAO4C,SAASua,EAAWtM,QAAU7Q,EAAO4C,SAASua,EAAWrM,OAAQ,CAC1E,IAAI+N,EAAU1B,EAAWS,KAAKtB,kBAAkBA,kBAAkBlM,UAC9D0O,EAAe3B,EAAWa,MAAM9E,YAAYzL,QAAQ0P,IAAc,EACtEA,EAAWiB,SACX,IAAIW,EAAgBvB,EAAKtD,EAAKiD,EAAWjW,OAAQiW,EAAWhW,SAAU,CACpEwW,OAAQR,EAAWS,KAAKO,mBACxBV,YAAa,CAACN,EAAWtM,MAAOsM,EAAWrM,MAAOqM,EAAWpM,UAE/DgO,SAAczE,KAAKuE,GACfC,GAAcC,EAAcR,SACzBQ,CACT,CACA,OAAOH,CACT,EACAzB,EAAW5X,IAAMvF,EAAOgB,QAAQnC,EAAGse,EAAW5X,KAC9C4X,EAAW3X,IAAMxF,EAAOgB,QAAQnC,EAAGse,EAAW3X,IAChD,MAAW2X,aAAsBjO,GAC/BlF,EAAIlJ,KAAKgc,EAAI,QAAS,WACpB9S,EAAImB,UAAUgS,EAAW5N,WAAY,QACvC,GACAvF,EAAIlJ,KAAKqc,EAAW5N,WAAY,QAAS,SAAU3F,GACjDA,EAAEoV,iBACJ,IACS7B,aAAsB5J,GAC/BvJ,EAAIlJ,KAAKgc,EAAI,QAAS,WACpB9S,EAAImB,UAAUgS,EAAW1J,SAAU,QACrC,GACAzJ,EAAIlJ,KAAKgc,EAAI,YAAa,WACxB9S,EAAIsD,SAAS6P,EAAW1J,SAAU,QACpC,GACAzJ,EAAIlJ,KAAKgc,EAAI,WAAY,WACvB9S,EAAI6D,YAAYsP,EAAW1J,SAAU,QACvC,IACS0J,aAAsBxJ,IAC/B3J,EAAIsD,SAASwP,EAAI,SACjBK,EAAW9T,cAAgBrJ,EAAOgB,QAAQ,SAAU+I,GAClD+S,SAAG1S,MAAM6U,gBAAkB9B,EAAWvJ,QAAQhV,WACvCmL,CACT,EAAGoT,EAAW9T,eACd8T,EAAW9T,iBAEb8T,EAAWzN,SAAW1P,EAAOgB,QAAQ,SAAU+I,GAC7C,OAAImQ,EAAIF,UAAUG,iBAAmBgD,EAAW+B,cAC9ClC,GAAmB9C,EAAIF,WAAW,GAE7BjQ,CACT,EAAGoT,EAAWzN,SAChB,CA0DEqO,CAAkB7D,EAAK4C,EAAIK,GAC3BjD,EAAInB,cAAcrL,KAAKyP,GAChBA,CACT,CACA,SAAStD,EAAoBK,EAAKtZ,GAChC,OAAOoI,SAASmW,SAASlQ,KAAO,IAAMrO,CACxC,CACA,SAASwe,GAAgBlF,EAAKI,EAAM+E,GAClC,IAAIlP,EAAMnH,SAASC,cAAc,UACjCkH,EAAIC,UAAYkK,EAChBnK,EAAIpK,MAAQuU,EACZJ,EAAIC,gBAAgBxK,YAAYQ,GAC5BkP,IACFnF,EAAIC,gBAAgB9J,cAAgB6J,EAAIC,gBAAgB1a,OAAS,EAErE,CACA,SAAS6f,GAAgBpF,EAAKqF,GAC5BA,EAAQnV,MAAMmL,QAAU2E,EAAIP,gBAAkB,QAAU,MAC1D,CACA,SAAS6F,GAAYtF,GACnB,IAAIuF,EAAMvF,EAAIwF,WAAa1W,SAASC,cAAc,MAClDe,EAAIsD,SAAS4M,EAAInR,WAAY,YAC7BmR,EAAIrB,KAAKwC,aAAaoE,EAAKvF,EAAIrB,KAAK8G,YACpC3V,EAAIsD,SAASmS,EAAK,YAClB,IAAIG,EAAQ5W,SAASC,cAAc,QACnC2W,EAAMxP,UAAY,SAClBpG,EAAIsD,SAASsS,EAAO,gBACpB,IAAIC,EAAS7W,SAASC,cAAc,QACpC4W,EAAOzP,UAAY,OACnBpG,EAAIsD,SAASuS,EAAQ,UACrB7V,EAAIsD,SAASuS,EAAQ,QACrB,IAAIC,EAAU9W,SAASC,cAAc,QACrC6W,EAAQ1P,UAAY,MACpBpG,EAAIsD,SAASwS,EAAS,UACtB9V,EAAIsD,SAASwS,EAAS,WACtB,IAAIC,EAAU/W,SAASC,cAAc,QACrC8W,EAAQ3P,UAAY,SACpBpG,EAAIsD,SAASyS,EAAS,UACtB/V,EAAIsD,SAASyS,EAAS,UACtB,IAAIC,EAAS9F,EAAIC,gBAAkBnR,SAASC,cAAc,UAmB1D,GAlBIiR,EAAIV,MAAQU,EAAIV,KAAK8D,WACvBtd,EAAOI,KAAK8Z,EAAIV,KAAK8D,WAAY,SAAUvX,EAAOnF,GAChDwe,GAAgBlF,EAAKtZ,EAAKA,IAAQsZ,EAAIT,OACxC,GAEA2F,GAAgBlF,EAAK7B,GAA6B,GAEpDrO,EAAIlJ,KAAKkf,EAAQ,SAAU,WACzB,QAASjS,EAAQ,EAAGA,EAAQmM,EAAIC,gBAAgB1a,OAAQsO,IACtDmM,EAAIC,gBAAgBpM,GAAOqC,UAAY8J,EAAIC,gBAAgBpM,GAAOhI,MAEpEmU,EAAIT,OAASjZ,KAAKuF,KACpB,GACA0Z,EAAI9P,YAAYqQ,GAChBP,EAAI9P,YAAYiQ,GAChBH,EAAI9P,YAAYkQ,GAChBJ,EAAI9P,YAAYmQ,GAChBL,EAAI9P,YAAYoQ,GACZzH,EAAwB,CAC1B,IAAIiH,EAAUvW,SAASiX,eAAe,oBAClCC,EAAuBlX,SAASiX,eAAe,oBACjCjX,SAASiX,eAAe,mBAC9B7V,MAAMmL,QAAU,QACsC,SAA9DgD,aAAaqB,QAAQC,EAAoBK,EAAK,aAChDgG,EAAqB1Q,aAAa,UAAW,WAE/C8P,GAAgBpF,EAAKqF,GACrBvV,EAAIlJ,KAAKof,EAAsB,SAAU,WACvChG,EAAIP,iBAAmBO,EAAIP,gBAC3B2F,GAAgBpF,EAAKqF,EACvB,EACF,CACA,IAAIY,EAAyBnX,SAASiX,eAAe,sBACrDjW,EAAIlJ,KAAKqf,EAAwB,UAAW,SAAUvW,GAChDA,EAAE8C,UAAwB,KAAZ9C,EAAEwW,OAA8B,KAAdxW,EAAE+C,UACpC6L,EAAchB,MAElB,GACAxN,EAAIlJ,KAAK8e,EAAO,QAAS,WACvBO,EAAuB/P,UAAY6K,KAAKuB,UAAUtC,EAAIuC,qBAAiBpa,EAAW,GAClFmW,EAAc6H,OACdF,EAAuBG,QACvBH,EAAuBH,QACzB,GACAhW,EAAIlJ,KAAK+e,EAAQ,QAAS,WACxB3F,EAAIqG,MACN,GACAvW,EAAIlJ,KAAKgf,EAAS,QAAS,WACzB,IAAIU,EAAaC,OAAO,4BACpBD,GACFtG,EAAIwG,OAAOF,EAEf,GACAxW,EAAIlJ,KAAKif,EAAS,QAAS,WACzB7F,EAAIE,QACN,EACF,CAmCA,SAASC,GAASH,EAAKyG,GACrBzG,EAAInR,WAAWqB,MAAMiE,MAAQsS,EAAI,KAC7BzG,EAAIwF,YAAcxF,EAAId,YACxBc,EAAIwF,WAAWtV,MAAMiE,MAAQsS,EAAI,MAE/BzG,EAAIQ,gBACNR,EAAIQ,cAActQ,MAAMiE,MAAQsS,EAAI,KAExC,CACA,SAASC,EAAiB1G,EAAK2G,GAC7B,IAAIrc,EAAW,CAAC,EAChBxE,SAAOI,KAAK8Z,EAAIlB,oBAAqB,SAAUjP,EAAKgE,GAClD,IAAI+S,EAAc,CAAC,EAEnB9gB,EAAOI,KADa8Z,EAAIjB,uCAAuClL,GACpC,SAAUoP,EAAYhW,GAC/C2Z,EAAY3Z,GAAY0Z,EAAmB1D,EAAWrU,aAAeqU,EAAW7T,UAClF,GACA9E,EAASuJ,GAAS+S,CACpB,GACOtc,CACT,CAQA,SAASuc,GAAeC,GACS,IAA3BA,EAAgBvhB,QAClBkX,GAAwBtW,KAAKyL,OAAQ,WACnCiV,GAAeC,EACjB,GAEFhhB,EAAOI,KAAK4gB,EAAiB,SAAU3b,GACrCA,EAAEgE,eACJ,EACF,CAtkBAuP,EAAIqI,WAAa,WACfzJ,GAAQA,EACRxX,EAAOI,KAAKuY,GAAc,SAAUuB,GAClCA,EAAInR,WAAWqB,MAAMmL,QAAUiC,EAAO,OAAS,EACjD,EACF,EACAoB,EAAIgD,iBAAmB,IACvBhD,EAAI+C,2BAA6B,KACjC/C,EAAImC,WAAa,OACjBnC,EAAIkF,qBAAuB,KAC3BlF,EAAIsI,eAAiB,qBACrBtI,EAAI4B,aAAe,SACnB5B,EAAIuC,mBAAqB,eACzBvC,EAAIwC,gBAAkB,YACtBxC,EAAI2C,mBAAqB,eACzB3C,EAAIuD,WAAa,OACjBvD,EAAIS,cAAgB,IACpBT,EAAIgC,YAAc,iBAClBhC,EAAI+B,UAAY,gBAChB/B,EAAIuI,gBAAkB,SAAUvX,GACM,SAAhCZ,SAAS+F,cAAcC,OApQT,KAoQ6BpF,EAAEwW,OApQ/B,KAoQ0DxW,EAAE+C,UAC5EiM,EAAIqI,YAER,EACAjX,EAAIlJ,KAAKgL,OAAQ,UAAW8M,EAAIuI,iBAAiB,GACjDnhB,EAAOE,OAAO0Y,EAAIhZ,UAClB,CACEwhB,IAAK,SAAala,EAAQC,GACxB,OAAOqW,EAAKhd,KAAM0G,EAAQC,EAAU,CAClCsW,YAAa9d,MAAMC,UAAUG,MAAMM,KAAKC,UAAW,IAEvD,EACA+gB,SAAU,SAAkBna,EAAQC,GAClC,OAAOqW,EAAKhd,KAAM0G,EAAQC,EAAU,CAClC5I,OAAO,GAEX,EACA6f,OAAQ,SAAgBjB,GACtB3c,KAAKqY,KAAKyI,YAAYnE,EAAWS,MACjCpd,KAAKuY,cAAc/K,OAAOxN,KAAKuY,cAActL,QAAQ0P,GAAa,GAClE,IAAI9N,EAAQ7O,KACZR,EAAOyB,MAAM,WACX4N,EAAMoL,UACR,EACF,EACA8G,QAAS,WACP,GAAI/gB,KAAK+G,OACP,MAAM,IAAIa,MAAM,8GAEd5H,KAAK4Y,WACPV,EAAmB4I,YAAY9gB,KAAKuI,YAEtC,IAAIsG,EAAQ7O,KACZR,EAAOI,KAAKI,KAAKsY,UAAW,SAAU0I,GACpCnS,EAAMoS,aAAaD,EACrB,GACAxX,EAAImD,OAAOrB,OAAQ,UAAW8M,EAAIuI,iBAAiB,GACnDpE,GAAgBvc,KAClB,EACAkhB,UAAW,SAAmBpH,GAC5B,QAA6BjY,IAAzB7B,KAAKsY,UAAUwB,GACjB,MAAM,IAAIlS,MAAM,sDAA6DkS,EAAO,KAEtF,IAAIqH,EAAe,CAAErH,KAAMA,EAAM/S,OAAQ/G,MACzCmhB,EAAavI,UAAY5Y,KAAK4Y,UAC1B5Y,KAAKgZ,MACThZ,KAAKgZ,KAAKoI,SACVphB,KAAKgZ,KAAKoI,QAAQtH,KAChBqH,EAAapH,OAAS/Z,KAAKgZ,KAAKoI,QAAQtH,GAAMC,OAC9CoH,EAAanI,KAAOhZ,KAAKgZ,KAAKoI,QAAQtH,IAExC,IAAIJ,EAAM,IAAItB,EAAI+I,GAClBnhB,KAAKsY,UAAUwB,GAAQJ,EACvB,IAAI4C,EAAKpB,GAAOlb,KAAM0Z,EAAInR,YAC1BiB,SAAIsD,SAASwP,EAAI,UACV5C,CACT,EACAuH,aAAc,SAAsBI,GAClCrhB,KAAKqY,KAAKyI,YAAYO,EAAO9Y,WAAW+Y,sBACjCthB,KAAKsY,UAAU+I,EAAOvH,MACzB9Z,KAAKgZ,MACThZ,KAAKgZ,KAAKoI,SACVphB,KAAKgZ,KAAKoI,QAAQC,EAAOvH,cAChB9Z,KAAKgZ,KAAKoI,QAAQC,EAAOvH,MAElCyC,GAAgB8E,GAChB,IAAIxS,EAAQ7O,KACZR,EAAOI,KAAKyhB,EAAO/I,UAAW,SAAU0I,GACtCK,EAAOJ,aAAaD,EACtB,GACAxhB,EAAOyB,MAAM,WACX4N,EAAMoL,UACR,EACF,EACAsH,KAAM,WACJvhB,KAAK+Z,QAAS,CAChB,EACAyH,MAAO,WACLxhB,KAAK+Z,QAAS,CAChB,EACA/C,KAAM,WACJhX,KAAKuI,WAAWqB,MAAMmL,QAAU,MAClC,EACA8K,KAAM,WACJ7f,KAAKuI,WAAWqB,MAAMmL,QAAU,EAClC,EACAkF,SAAU,WACR,IAAIkC,EAAOnc,KAAKwZ,UAChB,GAAI2C,EAAKjD,WAAY,CACnB,IAAIzO,EAAMjB,EAAIwE,UAAUmO,EAAK9D,MAAM5N,IAC/B9L,EAAI,EACRa,EAAOI,KAAKuc,EAAK9D,KAAKyC,WAAY,SAAU2G,GACpCtF,EAAKvD,WAAa6I,IAAStF,EAAK+C,aACpCvgB,GAAK6K,EAAIsE,UAAU2T,GAEvB,GACInW,OAAO8L,YAAc3M,EAnWL,GAmWiC9L,GACnD6K,EAAIsD,SAASqP,EAAK5T,WAAY6P,EAAIsI,gBAClCvE,EAAK9D,KAAKzO,MAAMmE,OAASzC,OAAO8L,YAAc3M,EArW5B,GAqWwD,OAE1EjB,EAAI6D,YAAY8O,EAAK5T,WAAY6P,EAAIsI,gBACrCvE,EAAK9D,KAAKzO,MAAMmE,OAAS,OAE7B,CACIoO,EAAKN,iBACPrc,EAAOyB,MAAM,WACXkb,EAAKN,gBAAgBjS,MAAMmE,OAASoO,EAAK9D,KAAKqJ,aAAe,IAC/D,GAEEvF,EAAKjC,gBACPiC,EAAKjC,cAActQ,MAAMiE,MAAQsO,EAAKtO,MAAQ,KAElD,EACAyN,kBAAmB9b,EAAO4B,SAAS,WACjCpB,KAAKia,UACP,EAAG,IACH0H,SAAU,WAKR,GAJIniB,EAAOa,YAAY2X,MACrBA,EAAgB,IAAItB,IACNnO,WAAWqH,UAAYqG,IAEnCjW,KAAK+G,OACP,MAAM,IAAIa,MAAM,kDAElB,IAAIiH,EAAQ7O,KACZR,EAAOI,KAAKT,MAAMC,UAAUG,MAAMM,KAAKC,WAAY,SAAU4G,GAClB,IAArCmI,EAAM2J,oBAAoBvZ,QAC5B+f,GAAYnQ,IAEoC,IAA9CA,EAAM2J,oBAAoBvL,QAAQvG,IACpCmI,EAAM2J,oBAAoBtL,KAAKxG,EAEnC,GACI1G,KAAK4Y,WACPiB,GAAS7Z,KAAMA,KAAK6N,MAExB,EACA2L,QAAS,WAEP,QADIE,EAAM1Z,KACH0Z,EAAI3S,QACT2S,EAAMA,EAAI3S,OAEZ,OAAO2S,CACT,EACAuC,cAAe,WACb,IAAIjY,EAAWhE,KAAKgZ,KACpBhV,SAAS+V,OAAS/Z,KAAK+Z,OACnB/Z,KAAKwY,oBAAoBvZ,OAAS,IACpC+E,EAASiV,OAASjZ,KAAKiZ,OAClBjV,EAAS8Y,aACZ9Y,EAAS8Y,WAAa,CAAC,GAEzB9Y,EAAS8Y,WAAW9c,KAAKiZ,QAAUmH,EAAiBpgB,OAEtDgE,EAASod,QAAU,CAAC,EACpB5hB,EAAOI,KAAKI,KAAKsY,UAAW,SAAU5I,EAAStP,GAC7C4D,EAASod,QAAQhhB,GAAOsP,EAAQuM,eAClC,GACOjY,CACT,EACA+b,KAAM,WACC/f,KAAKgZ,KAAK8D,aACb9c,KAAKgZ,KAAK8D,WAAa,CAAC,GAE1B9c,KAAKgZ,KAAK8D,WAAW9c,KAAKiZ,QAAUmH,EAAiBpgB,MACrDwc,GAAmBxc,MAAM,GACzBA,KAAK+b,8BACP,EACAmE,OAAQ,SAAgBF,GACjBhgB,KAAKgZ,KAAK8D,aACb9c,KAAKgZ,KAAK8D,WAAa,CAAC,EACxB9c,KAAKgZ,KAAK8D,WAAWjF,GAA+BuI,EAAiBpgB,MAAM,IAE7EA,KAAKgZ,KAAK8D,WAAWkD,GAAcI,EAAiBpgB,MACpDA,KAAKiZ,OAAS+G,EACdpB,GAAgB5e,KAAMggB,GAAY,GAClChgB,KAAK+b,8BACP,EACAnC,OAAQ,SAAgBF,GACtBla,EAAOI,KAAKI,KAAKuY,cAAe,SAAUoE,GACnC3c,KAAKwZ,UAAUR,KAAK8D,WAGvBJ,GAAiBhD,GAAO1Z,KAAKwZ,UAAWmD,GAFxCA,EAAWzN,SAASyN,EAAWrU,cAI7BqU,EAAWhU,kBACbgU,EAAWhU,iBAAiB9I,KAAK8c,EAAYA,EAAW7T,WAE5D,EAAG9I,MACHR,EAAOI,KAAKI,KAAKsY,UAAW,SAAU+I,GACpCA,EAAOzH,OAAOyH,EAChB,GACK3H,GACH8C,GAAmBxc,KAAKwZ,WAAW,EAEvC,EACAuE,OAAQ,SAAgBpB,GACtB,IAAI/Q,EAAmC,IAA5B5L,KAAK0Y,YAAYzZ,OAC5Be,KAAK0Y,YAAYxL,KAAKyP,GAClB/Q,GACF2U,GAAevgB,KAAK0Y,YAExB,EACA7P,cAAe,WACbrJ,EAAOI,KAAKI,KAAKuY,cAAe,SAAUoE,GACxCA,EAAW9T,eACb,GACArJ,EAAOI,KAAKI,KAAKsY,UAAW,SAAU+I,GACpCA,EAAOxY,eACT,EACF,IAkWF,IAAI9K,GAAQ,CACV4J,MAAOA,EACPia,KAAMvd,EACNJ,UAAWA,GAET4d,GAAc,CAChBxZ,WAAYA,EACZqG,kBAAmBA,EACnBW,iBAAkBA,GAClBS,iBAAkBA,GAClBK,iBAAkBA,EAClBgB,oBAAqBA,EACrBiB,uBAAwBA,EACxBW,mBAAoBA,EACpBI,gBAAiBA,GAEf2O,GAAQ,CAAEtY,IAAKA,GACfkQ,GAAM,CAAEtB,IAAKA,GACb2J,GAAQ3J,EAUZ,SATY,CACVra,MAAOA,GACP8jB,YAAaA,GACbrY,IAAKsY,GACLpI,IAAKA,GACLtB,IANUA","names":["colorToString","color","forceCSSHex","colorFormat","__state","conversionName","toString","r","Math","round","g","b","a","h","s","toFixed","v","str","hex","length","ARR_EACH","Array","prototype","forEach","ARR_SLICE","slice","Common","BREAK","extend","target","each","call","arguments","obj","this","isObject","Object","keys","key","isUndefined","bind","defaults","compose","toCall","args","i","apply","itr","scope","l","_key","defer","fnc","setTimeout","debounce","func","threshold","callImmediately","timeout","delayed","callNow","clearTimeout","toArray","undefined","isNull","isNaN","_isNaN","_x","isArray","constructor","isNumber","isString","isBoolean","isFunction","Function","INTERPRETATIONS","litmus","conversions","THREE_CHAR_HEX","read","original","test","match","space","parseInt","write","SIX_CHAR_HEX","CSS_RGB","parseFloat","CSS_RGBA","HEX","RGB_ARRAY","RGBA_ARRAY","RGBA_OBJ","RGB_OBJ","HSVA_OBJ","HSV_OBJ","result","toReturn","interpret","family","conversion","tmpComponent","ColorMath","hsv_to_rgb","hi","floor","f","p","q","t","c","rgb_to_hsv","min","max","delta","NaN","rgb_to_hex","hex_with_component","component_from_hex","componentIndex","value","_typeof","Symbol","iterator","classCallCheck","instance","Constructor","TypeError","createClass","defineProperties","props","descriptor","enumerable","configurable","writable","defineProperty","protoProps","staticProps","get","object","property","receiver","desc","getOwnPropertyDescriptor","parent","getPrototypeOf","getter","inherits","subClass","superClass","create","setPrototypeOf","__proto__","possibleConstructorReturn","self","ReferenceError","Color","Error","defineRGBComponent","component","componentHexIndex","recalculateRGB","set","defineHSVComponent","recalculateHSV","COMPONENTS","Controller","initialValue","domElement","document","createElement","__onChange","__onFinishChange","newValue","updateDisplay","getValue","EVENT_MAP_INV","HTMLEvents","MouseEvents","KeyboardEvents","k","e","CSS_VALUE_PIXELS","cssValueToPixels","val","dom","makeSelectable","elem","selectable","style","onselectstart","MozUserSelect","KhtmlUserSelect","unselectable","makeFullscreen","hor","vert","vertical","horizontal","position","left","right","top","bottom","fakeEvent","eventType","pars","aux","params","className","evt","createEvent","initMouseEvent","bubbles","cancelable","window","clickCount","x","clientX","y","clientY","init","initKeyboardEvent","initKeyEvent","ctrlKey","altKey","shiftKey","metaKey","keyCode","charCode","initEvent","dispatchEvent","event","newBool","addEventListener","attachEvent","unbind","removeEventListener","detachEvent","addClass","classes","split","indexOf","push","join","replace","removeClass","removeAttribute","index","splice","hasClass","RegExp","getWidth","getComputedStyle","width","getHeight","height","getOffset","el","offset","offsetParent","offsetLeft","offsetTop","isActive","activeElement","type","href","BooleanController","_Controller","_this2","_this","__prev","__checkbox","setAttribute","onChange","setValue","appendChild","checked","OptionController","opts","options","__select","map","element","opt","innerHTML","selectedIndex","StringController","__input","onBlur","blur","numDecimals","NumberController","_params","__min","__max","__step","step","__impliedStep","pow","log","abs","LN10","__precision","_v","minValue","maxValue","stepValue","NumberControllerBox","_NumberController","__truncationSuspended","prevY","onFinish","onMouseDrag","diff","onMouseUp","attempted","onMouseDown","roundToDecimal","decimals","tenTo","i1","i2","o1","o2","NumberControllerSlider","preventDefault","bgRect","__background","getBoundingClientRect","onTouchMove","touches","onTouchEnd","__foreground","onTouchStart","pct","FunctionController","text","__button","fire","ColorController","__color","__temp","__selector","__saturation_field","__field_knob","__field_knob_border","__hue_knob","__hue_field","__input_textShadow","valueField","fieldDown","setSV","fieldUpSV","fieldDownH","setH","fieldUpH","toOriginal","fieldRect","_ref","padding","backgroundColor","boxShadow","border","borderRadius","zIndex","borderRight","marginRight","display","cursor","background","linearGradient","hueGradient","cssText","outline","textAlign","fontWeight","textShadow","mismatch","flip","_flip","marginLeft","marginTop","toHexString","vendors","vendor","saveDialogContents","ControllerFactory","requestAnimationFrame$1","requestAnimationFrame","webkitRequestAnimationFrame","mozRequestAnimationFrame","oRequestAnimationFrame","msRequestAnimationFrame","callback","CenteredDiv","backgroundElement","opacity","WebkitTransition","transition","body","hide","webkitTransform","layout","innerWidth","innerHeight","cssContent","indoc","doc","injected","head","getElementsByTagName","css","___$insertStyle","DEFAULT_DEFAULT_PRESET_NAME","SUPPORTS_LOCAL_STORAGE","localStorage","SAVE_DIALOGUE","autoPlaceVirgin","autoPlaceContainer","hideableGuis","GUI","__ul","__folders","__controllers","__rememberedObjects","__rememberedObjectIndecesToControllers","__listening","closeOnTop","autoPlace","DEFAULT_WIDTH","resizable","hideable","load","preset","scrollable","useLocalStorage","getItem","getLocalStorageHash","saveToLocalStorage","titleRow","getRoot","setPresetSelectIndex","gui","__preset_select","revert","setWidth","name","closed","CLASS_CLOSED","onResize","__closeButton","TEXT_OPEN","TEXT_CLOSED","bool","setItem","CLASS_MAIN","savedGui","JSON","parse","CLASS_CLOSE_BUTTON","CLASS_CLOSE_TOP","insertBefore","childNodes","CLASS_CLOSE_BOTTOM","titleRowName","createTextNode","addRow","CLASS_AUTO_PLACE_CONTAINER","CLASS_AUTO_PLACE","__resizeHandler","onResizeDebounced","addResizeHandle","pmouseX","drag","dragStop","CLASS_DRAG","dragStart","__resize_handle","firstElementChild","saveToLocalStorageIfPossible","stringify","getSaveObject","resetWidth","root","newDom","liBefore","li","removeListeners","markPresetModified","modified","recallSavedValue","controller","matchedIndex","controllerMap","remembered","presetMap","_add","factoryArgs","concat","before","__li","container","CLASS_CONTROLLER_ROW","augmentController","__gui","_options","nextSibling","nextElementSibling","remove","_nextSibling","_name","listen","box","method","pc","pb","returned","oldName","wasListening","newController","stopPropagation","borderLeftColor","isModified","location","addPresetOption","setSelected","showHideExplain","explain","addSaveMenu","div","__save_row","firstChild","gears","button","button2","button3","select","getElementById","localStorageCheckBox","newConstructorTextArea","which","show","focus","save","presetName","prompt","saveAs","w","getCurrentPreset","useInitialValues","savedValues","updateDisplays","controllerArray","toggleHide","CLASS_TOO_TALL","_keydownHandler","add","addColor","removeChild","destroy","subfolder","removeFolder","addFolder","newGuiParams","folders","folder","parentElement","open","close","node","offsetHeight","remember","math","controllers","dom$1","GUI$1"],"sourceRoot":"webpack:///","sources":["../node_modules/jsroot/modules/gui/dat.gui.mjs"],"sourcesContent":["/**\n * dat-gui JavaScript Controller Library\n * https://github.com/dataarts/dat.gui\n *\n * Copyright 2011 Data Arts Team, Google Creative Lab\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n */\n\nfunction ___$insertStyle(css) {\n if (!css) {\n return;\n }\n if (typeof window === 'undefined') {\n return;\n }\n\n var style = document.createElement('style');\n\n style.setAttribute('type', 'text/css');\n style.innerHTML = css;\n document.head.appendChild(style);\n\n return css;\n}\n\nfunction colorToString (color, forceCSSHex) {\n var colorFormat = color.__state.conversionName.toString();\n var r = Math.round(color.r);\n var g = Math.round(color.g);\n var b = Math.round(color.b);\n var a = color.a;\n var h = Math.round(color.h);\n var s = color.s.toFixed(1);\n var v = color.v.toFixed(1);\n if (forceCSSHex || colorFormat === 'THREE_CHAR_HEX' || colorFormat === 'SIX_CHAR_HEX') {\n var str = color.hex.toString(16);\n while (str.length < 6) {\n str = '0' + str;\n }\n return '#' + str;\n } else if (colorFormat === 'CSS_RGB') {\n return 'rgb(' + r + ',' + g + ',' + b + ')';\n } else if (colorFormat === 'CSS_RGBA') {\n return 'rgba(' + r + ',' + g + ',' + b + ',' + a + ')';\n } else if (colorFormat === 'HEX') {\n return '0x' + color.hex.toString(16);\n } else if (colorFormat === 'RGB_ARRAY') {\n return '[' + r + ',' + g + ',' + b + ']';\n } else if (colorFormat === 'RGBA_ARRAY') {\n return '[' + r + ',' + g + ',' + b + ',' + a + ']';\n } else if (colorFormat === 'RGB_OBJ') {\n return '{r:' + r + ',g:' + g + ',b:' + b + '}';\n } else if (colorFormat === 'RGBA_OBJ') {\n return '{r:' + r + ',g:' + g + ',b:' + b + ',a:' + a + '}';\n } else if (colorFormat === 'HSV_OBJ') {\n return '{h:' + h + ',s:' + s + ',v:' + v + '}';\n } else if (colorFormat === 'HSVA_OBJ') {\n return '{h:' + h + ',s:' + s + ',v:' + v + ',a:' + a + '}';\n }\n return 'unknown format';\n}\n\nvar ARR_EACH = Array.prototype.forEach;\nvar ARR_SLICE = Array.prototype.slice;\nvar Common = {\n BREAK: {},\n extend: function extend(target) {\n this.each(ARR_SLICE.call(arguments, 1), function (obj) {\n var keys = this.isObject(obj) ? Object.keys(obj) : [];\n keys.forEach(function (key) {\n if (!this.isUndefined(obj[key])) {\n target[key] = obj[key];\n }\n }.bind(this));\n }, this);\n return target;\n },\n defaults: function defaults(target) {\n this.each(ARR_SLICE.call(arguments, 1), function (obj) {\n var keys = this.isObject(obj) ? Object.keys(obj) : [];\n keys.forEach(function (key) {\n if (this.isUndefined(target[key])) {\n target[key] = obj[key];\n }\n }.bind(this));\n }, this);\n return target;\n },\n compose: function compose() {\n var toCall = ARR_SLICE.call(arguments);\n return function () {\n var args = ARR_SLICE.call(arguments);\n for (var i = toCall.length - 1; i >= 0; i--) {\n args = [toCall[i].apply(this, args)];\n }\n return args[0];\n };\n },\n each: function each(obj, itr, scope) {\n if (!obj) {\n return;\n }\n if (ARR_EACH && obj.forEach && obj.forEach === ARR_EACH) {\n obj.forEach(itr, scope);\n } else if (obj.length === obj.length + 0) {\n var key = void 0;\n var l = void 0;\n for (key = 0, l = obj.length; key < l; key++) {\n if (key in obj && itr.call(scope, obj[key], key) === this.BREAK) {\n return;\n }\n }\n } else {\n for (var _key in obj) {\n if (itr.call(scope, obj[_key], _key) === this.BREAK) {\n return;\n }\n }\n }\n },\n defer: function defer(fnc) {\n setTimeout(fnc, 0);\n },\n debounce: function debounce(func, threshold, callImmediately) {\n var timeout = void 0;\n return function () {\n var obj = this;\n var args = arguments;\n function delayed() {\n timeout = null;\n if (!callImmediately) func.apply(obj, args);\n }\n var callNow = callImmediately || !timeout;\n clearTimeout(timeout);\n timeout = setTimeout(delayed, threshold);\n if (callNow) {\n func.apply(obj, args);\n }\n };\n },\n toArray: function toArray(obj) {\n if (obj.toArray) return obj.toArray();\n return ARR_SLICE.call(obj);\n },\n isUndefined: function isUndefined(obj) {\n return obj === undefined;\n },\n isNull: function isNull(obj) {\n return obj === null;\n },\n isNaN: function (_isNaN) {\n function isNaN(_x) {\n return _isNaN.apply(this, arguments);\n }\n isNaN.toString = function () {\n return _isNaN.toString();\n };\n return isNaN;\n }(function (obj) {\n return isNaN(obj);\n }),\n isArray: Array.isArray || function (obj) {\n return obj.constructor === Array;\n },\n isObject: function isObject(obj) {\n return obj === Object(obj);\n },\n isNumber: function isNumber(obj) {\n return obj === obj + 0;\n },\n isString: function isString(obj) {\n return obj === obj + '';\n },\n isBoolean: function isBoolean(obj) {\n return obj === false || obj === true;\n },\n isFunction: function isFunction(obj) {\n return obj instanceof Function;\n }\n};\n\nvar INTERPRETATIONS = [\n{\n litmus: Common.isString,\n conversions: {\n THREE_CHAR_HEX: {\n read: function read(original) {\n var test = original.match(/^#([A-F0-9])([A-F0-9])([A-F0-9])$/i);\n if (test === null) {\n return false;\n }\n return {\n space: 'HEX',\n hex: parseInt('0x' + test[1].toString() + test[1].toString() + test[2].toString() + test[2].toString() + test[3].toString() + test[3].toString(), 0)\n };\n },\n write: colorToString\n },\n SIX_CHAR_HEX: {\n read: function read(original) {\n var test = original.match(/^#([A-F0-9]{6})$/i);\n if (test === null) {\n return false;\n }\n return {\n space: 'HEX',\n hex: parseInt('0x' + test[1].toString(), 0)\n };\n },\n write: colorToString\n },\n CSS_RGB: {\n read: function read(original) {\n var test = original.match(/^rgb\\(\\s*(\\S+)\\s*,\\s*(\\S+)\\s*,\\s*(\\S+)\\s*\\)/);\n if (test === null) {\n return false;\n }\n return {\n space: 'RGB',\n r: parseFloat(test[1]),\n g: parseFloat(test[2]),\n b: parseFloat(test[3])\n };\n },\n write: colorToString\n },\n CSS_RGBA: {\n read: function read(original) {\n var test = original.match(/^rgba\\(\\s*(\\S+)\\s*,\\s*(\\S+)\\s*,\\s*(\\S+)\\s*,\\s*(\\S+)\\s*\\)/);\n if (test === null) {\n return false;\n }\n return {\n space: 'RGB',\n r: parseFloat(test[1]),\n g: parseFloat(test[2]),\n b: parseFloat(test[3]),\n a: parseFloat(test[4])\n };\n },\n write: colorToString\n }\n }\n},\n{\n litmus: Common.isNumber,\n conversions: {\n HEX: {\n read: function read(original) {\n return {\n space: 'HEX',\n hex: original,\n conversionName: 'HEX'\n };\n },\n write: function write(color) {\n return color.hex;\n }\n }\n }\n},\n{\n litmus: Common.isArray,\n conversions: {\n RGB_ARRAY: {\n read: function read(original) {\n if (original.length !== 3) {\n return false;\n }\n return {\n space: 'RGB',\n r: original[0],\n g: original[1],\n b: original[2]\n };\n },\n write: function write(color) {\n return [color.r, color.g, color.b];\n }\n },\n RGBA_ARRAY: {\n read: function read(original) {\n if (original.length !== 4) return false;\n return {\n space: 'RGB',\n r: original[0],\n g: original[1],\n b: original[2],\n a: original[3]\n };\n },\n write: function write(color) {\n return [color.r, color.g, color.b, color.a];\n }\n }\n }\n},\n{\n litmus: Common.isObject,\n conversions: {\n RGBA_OBJ: {\n read: function read(original) {\n if (Common.isNumber(original.r) && Common.isNumber(original.g) && Common.isNumber(original.b) && Common.isNumber(original.a)) {\n return {\n space: 'RGB',\n r: original.r,\n g: original.g,\n b: original.b,\n a: original.a\n };\n }\n return false;\n },\n write: function write(color) {\n return {\n r: color.r,\n g: color.g,\n b: color.b,\n a: color.a\n };\n }\n },\n RGB_OBJ: {\n read: function read(original) {\n if (Common.isNumber(original.r) && Common.isNumber(original.g) && Common.isNumber(original.b)) {\n return {\n space: 'RGB',\n r: original.r,\n g: original.g,\n b: original.b\n };\n }\n return false;\n },\n write: function write(color) {\n return {\n r: color.r,\n g: color.g,\n b: color.b\n };\n }\n },\n HSVA_OBJ: {\n read: function read(original) {\n if (Common.isNumber(original.h) && Common.isNumber(original.s) && Common.isNumber(original.v) && Common.isNumber(original.a)) {\n return {\n space: 'HSV',\n h: original.h,\n s: original.s,\n v: original.v,\n a: original.a\n };\n }\n return false;\n },\n write: function write(color) {\n return {\n h: color.h,\n s: color.s,\n v: color.v,\n a: color.a\n };\n }\n },\n HSV_OBJ: {\n read: function read(original) {\n if (Common.isNumber(original.h) && Common.isNumber(original.s) && Common.isNumber(original.v)) {\n return {\n space: 'HSV',\n h: original.h,\n s: original.s,\n v: original.v\n };\n }\n return false;\n },\n write: function write(color) {\n return {\n h: color.h,\n s: color.s,\n v: color.v\n };\n }\n }\n }\n}];\nvar result = void 0;\nvar toReturn = void 0;\nvar interpret = function interpret() {\n toReturn = false;\n var original = arguments.length > 1 ? Common.toArray(arguments) : arguments[0];\n Common.each(INTERPRETATIONS, function (family) {\n if (family.litmus(original)) {\n Common.each(family.conversions, function (conversion, conversionName) {\n result = conversion.read(original);\n if (toReturn === false && result !== false) {\n toReturn = result;\n result.conversionName = conversionName;\n result.conversion = conversion;\n return Common.BREAK;\n }\n });\n return Common.BREAK;\n }\n });\n return toReturn;\n};\n\nvar tmpComponent = void 0;\nvar ColorMath = {\n hsv_to_rgb: function hsv_to_rgb(h, s, v) {\n var hi = Math.floor(h / 60) % 6;\n var f = h / 60 - Math.floor(h / 60);\n var p = v * (1.0 - s);\n var q = v * (1.0 - f * s);\n var t = v * (1.0 - (1.0 - f) * s);\n var c = [[v, t, p], [q, v, p], [p, v, t], [p, q, v], [t, p, v], [v, p, q]][hi];\n return {\n r: c[0] * 255,\n g: c[1] * 255,\n b: c[2] * 255\n };\n },\n rgb_to_hsv: function rgb_to_hsv(r, g, b) {\n var min = Math.min(r, g, b);\n var max = Math.max(r, g, b);\n var delta = max - min;\n var h = void 0;\n var s = void 0;\n if (max !== 0) {\n s = delta / max;\n } else {\n return {\n h: NaN,\n s: 0,\n v: 0\n };\n }\n if (r === max) {\n h = (g - b) / delta;\n } else if (g === max) {\n h = 2 + (b - r) / delta;\n } else {\n h = 4 + (r - g) / delta;\n }\n h /= 6;\n if (h < 0) {\n h += 1;\n }\n return {\n h: h * 360,\n s: s,\n v: max / 255\n };\n },\n rgb_to_hex: function rgb_to_hex(r, g, b) {\n var hex = this.hex_with_component(0, 2, r);\n hex = this.hex_with_component(hex, 1, g);\n hex = this.hex_with_component(hex, 0, b);\n return hex;\n },\n component_from_hex: function component_from_hex(hex, componentIndex) {\n return hex >> componentIndex * 8 & 0xFF;\n },\n hex_with_component: function hex_with_component(hex, componentIndex, value) {\n return value << (tmpComponent = componentIndex * 8) | hex & ~(0xFF << tmpComponent);\n }\n};\n\nvar _typeof = typeof Symbol === 'function' && typeof Symbol.iterator === \"symbol\" ? function (obj) {\n return typeof obj;\n} : function (obj) {\n return obj && typeof Symbol === 'function' && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n};\n\n\n\n\n\n\n\n\n\n\n\nvar classCallCheck = function (instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError(\"Cannot call a class as a function\");\n }\n};\n\nvar createClass = function () {\n function defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if (\"value\" in descriptor) descriptor.writable = true;\n Object.defineProperty(target, descriptor.key, descriptor);\n }\n }\n\n return function (Constructor, protoProps, staticProps) {\n if (protoProps) defineProperties(Constructor.prototype, protoProps);\n if (staticProps) defineProperties(Constructor, staticProps);\n return Constructor;\n };\n}();\n\n\n\n\n\n\n\nvar get = function get(object, property, receiver) {\n if (object === null) object = Function.prototype;\n var desc = Object.getOwnPropertyDescriptor(object, property);\n\n if (desc === undefined) {\n var parent = Object.getPrototypeOf(object);\n\n if (parent === null) {\n return undefined;\n } else {\n return get(parent, property, receiver);\n }\n } else if (\"value\" in desc) {\n return desc.value;\n } else {\n var getter = desc.get;\n\n if (getter === undefined) {\n return undefined;\n }\n\n return getter.call(receiver);\n }\n};\n\nvar inherits = function (subClass, superClass) {\n if (typeof superClass !== 'function' && superClass !== null) {\n throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass);\n }\n\n subClass.prototype = Object.create(superClass && superClass.prototype, {\n constructor: {\n value: subClass,\n enumerable: false,\n writable: true,\n configurable: true\n }\n });\n if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass;\n};\n\n\n\n\n\n\n\n\n\n\n\nvar possibleConstructorReturn = function (self, call) {\n if (!self) {\n throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");\n }\n\n return call && (typeof call === 'object' || typeof call === 'function') ? call : self;\n};\n\nvar Color = function () {\n function Color() {\n classCallCheck(this, Color);\n this.__state = interpret.apply(this, arguments);\n if (this.__state === false) {\n throw new Error('Failed to interpret color arguments');\n }\n this.__state.a = this.__state.a || 1;\n }\n createClass(Color, [{\n key: 'toString',\n value: function toString() {\n return colorToString(this);\n }\n }, {\n key: 'toHexString',\n value: function toHexString() {\n return colorToString(this, true);\n }\n }, {\n key: 'toOriginal',\n value: function toOriginal() {\n return this.__state.conversion.write(this);\n }\n }]);\n return Color;\n}();\nfunction defineRGBComponent(target, component, componentHexIndex) {\n Object.defineProperty(target, component, {\n get: function get$$1() {\n if (this.__state.space === 'RGB') {\n return this.__state[component];\n }\n Color.recalculateRGB(this, component, componentHexIndex);\n return this.__state[component];\n },\n set: function set$$1(v) {\n if (this.__state.space !== 'RGB') {\n Color.recalculateRGB(this, component, componentHexIndex);\n this.__state.space = 'RGB';\n }\n this.__state[component] = v;\n }\n });\n}\nfunction defineHSVComponent(target, component) {\n Object.defineProperty(target, component, {\n get: function get$$1() {\n if (this.__state.space === 'HSV') {\n return this.__state[component];\n }\n Color.recalculateHSV(this);\n return this.__state[component];\n },\n set: function set$$1(v) {\n if (this.__state.space !== 'HSV') {\n Color.recalculateHSV(this);\n this.__state.space = 'HSV';\n }\n this.__state[component] = v;\n }\n });\n}\nColor.recalculateRGB = function (color, component, componentHexIndex) {\n if (color.__state.space === 'HEX') {\n color.__state[component] = ColorMath.component_from_hex(color.__state.hex, componentHexIndex);\n } else if (color.__state.space === 'HSV') {\n Common.extend(color.__state, ColorMath.hsv_to_rgb(color.__state.h, color.__state.s, color.__state.v));\n } else {\n throw new Error('Corrupted color state');\n }\n};\nColor.recalculateHSV = function (color) {\n var result = ColorMath.rgb_to_hsv(color.r, color.g, color.b);\n Common.extend(color.__state, {\n s: result.s,\n v: result.v\n });\n if (!Common.isNaN(result.h)) {\n color.__state.h = result.h;\n } else if (Common.isUndefined(color.__state.h)) {\n color.__state.h = 0;\n }\n};\nColor.COMPONENTS = ['r', 'g', 'b', 'h', 's', 'v', 'hex', 'a'];\ndefineRGBComponent(Color.prototype, 'r', 2);\ndefineRGBComponent(Color.prototype, 'g', 1);\ndefineRGBComponent(Color.prototype, 'b', 0);\ndefineHSVComponent(Color.prototype, 'h');\ndefineHSVComponent(Color.prototype, 's');\ndefineHSVComponent(Color.prototype, 'v');\nObject.defineProperty(Color.prototype, 'a', {\n get: function get$$1() {\n return this.__state.a;\n },\n set: function set$$1(v) {\n this.__state.a = v;\n }\n});\nObject.defineProperty(Color.prototype, 'hex', {\n get: function get$$1() {\n if (this.__state.space !== 'HEX') {\n this.__state.hex = ColorMath.rgb_to_hex(this.r, this.g, this.b);\n this.__state.space = 'HEX';\n }\n return this.__state.hex;\n },\n set: function set$$1(v) {\n this.__state.space = 'HEX';\n this.__state.hex = v;\n }\n});\n\nvar Controller = function () {\n function Controller(object, property) {\n classCallCheck(this, Controller);\n this.initialValue = object[property];\n this.domElement = document.createElement('div');\n this.object = object;\n this.property = property;\n this.__onChange = undefined;\n this.__onFinishChange = undefined;\n }\n createClass(Controller, [{\n key: 'onChange',\n value: function onChange(fnc) {\n this.__onChange = fnc;\n return this;\n }\n }, {\n key: 'onFinishChange',\n value: function onFinishChange(fnc) {\n this.__onFinishChange = fnc;\n return this;\n }\n }, {\n key: 'setValue',\n value: function setValue(newValue) {\n this.object[this.property] = newValue;\n if (this.__onChange) {\n this.__onChange.call(this, newValue);\n }\n this.updateDisplay();\n return this;\n }\n }, {\n key: 'getValue',\n value: function getValue() {\n return this.object[this.property];\n }\n }, {\n key: 'updateDisplay',\n value: function updateDisplay() {\n return this;\n }\n }, {\n key: 'isModified',\n value: function isModified() {\n return this.initialValue !== this.getValue();\n }\n }]);\n return Controller;\n}();\n\nvar EVENT_MAP = {\n HTMLEvents: ['change'],\n MouseEvents: ['click', 'mousemove', 'mousedown', 'mouseup', 'mouseover'],\n KeyboardEvents: ['keydown']\n};\nvar EVENT_MAP_INV = {};\nCommon.each(EVENT_MAP, function (v, k) {\n Common.each(v, function (e) {\n EVENT_MAP_INV[e] = k;\n });\n});\nvar CSS_VALUE_PIXELS = /(\\d+(\\.\\d+)?)px/;\nfunction cssValueToPixels(val) {\n if (val === '0' || Common.isUndefined(val)) {\n return 0;\n }\n var match = val.match(CSS_VALUE_PIXELS);\n if (!Common.isNull(match)) {\n return parseFloat(match[1]);\n }\n return 0;\n}\nvar dom = {\n makeSelectable: function makeSelectable(elem, selectable) {\n if (elem === undefined || elem.style === undefined) return;\n elem.onselectstart = selectable ? function () {\n return false;\n } : function () {};\n elem.style.MozUserSelect = selectable ? 'auto' : 'none';\n elem.style.KhtmlUserSelect = selectable ? 'auto' : 'none';\n elem.unselectable = selectable ? 'on' : 'off';\n },\n makeFullscreen: function makeFullscreen(elem, hor, vert) {\n var vertical = vert;\n var horizontal = hor;\n if (Common.isUndefined(horizontal)) {\n horizontal = true;\n }\n if (Common.isUndefined(vertical)) {\n vertical = true;\n }\n elem.style.position = 'absolute';\n if (horizontal) {\n elem.style.left = 0;\n elem.style.right = 0;\n }\n if (vertical) {\n elem.style.top = 0;\n elem.style.bottom = 0;\n }\n },\n fakeEvent: function fakeEvent(elem, eventType, pars, aux) {\n var params = pars || {};\n var className = EVENT_MAP_INV[eventType];\n if (!className) {\n throw new Error('Event type ' + eventType + ' not supported.');\n }\n var evt = document.createEvent(className);\n switch (className) {\n case 'MouseEvents':\n {\n var clientX = params.x || params.clientX || 0;\n var clientY = params.y || params.clientY || 0;\n evt.initMouseEvent(eventType, params.bubbles || false, params.cancelable || true, window, params.clickCount || 1, 0,\n 0,\n clientX,\n clientY,\n false, false, false, false, 0, null);\n break;\n }\n case 'KeyboardEvents':\n {\n var init = evt.initKeyboardEvent || evt.initKeyEvent;\n Common.defaults(params, {\n cancelable: true,\n ctrlKey: false,\n altKey: false,\n shiftKey: false,\n metaKey: false,\n keyCode: undefined,\n charCode: undefined\n });\n init(eventType, params.bubbles || false, params.cancelable, window, params.ctrlKey, params.altKey, params.shiftKey, params.metaKey, params.keyCode, params.charCode);\n break;\n }\n default:\n {\n evt.initEvent(eventType, params.bubbles || false, params.cancelable || true);\n break;\n }\n }\n Common.defaults(evt, aux);\n elem.dispatchEvent(evt);\n },\n bind: function bind(elem, event, func, newBool) {\n var bool = newBool || false;\n if (elem.addEventListener) {\n elem.addEventListener(event, func, bool);\n } else if (elem.attachEvent) {\n elem.attachEvent('on' + event, func);\n }\n return dom;\n },\n unbind: function unbind(elem, event, func, newBool) {\n var bool = newBool || false;\n if (elem.removeEventListener) {\n elem.removeEventListener(event, func, bool);\n } else if (elem.detachEvent) {\n elem.detachEvent('on' + event, func);\n }\n return dom;\n },\n addClass: function addClass(elem, className) {\n if (elem.className === undefined) {\n elem.className = className;\n } else if (elem.className !== className) {\n var classes = elem.className.split(/ +/);\n if (classes.indexOf(className) === -1) {\n classes.push(className);\n elem.className = classes.join(' ').replace(/^\\s+/, '').replace(/\\s+$/, '');\n }\n }\n return dom;\n },\n removeClass: function removeClass(elem, className) {\n if (className) {\n if (elem.className === className) {\n elem.removeAttribute('class');\n } else {\n var classes = elem.className.split(/ +/);\n var index = classes.indexOf(className);\n if (index !== -1) {\n classes.splice(index, 1);\n elem.className = classes.join(' ');\n }\n }\n } else {\n elem.className = undefined;\n }\n return dom;\n },\n hasClass: function hasClass(elem, className) {\n return new RegExp('(?:^|\\\\s+)' + className + '(?:\\\\s+|$)').test(elem.className) || false;\n },\n getWidth: function getWidth(elem) {\n var style = getComputedStyle(elem);\n return cssValueToPixels(style['border-left-width']) + cssValueToPixels(style['border-right-width']) + cssValueToPixels(style['padding-left']) + cssValueToPixels(style['padding-right']) + cssValueToPixels(style.width);\n },\n getHeight: function getHeight(elem) {\n var style = getComputedStyle(elem);\n return cssValueToPixels(style['border-top-width']) + cssValueToPixels(style['border-bottom-width']) + cssValueToPixels(style['padding-top']) + cssValueToPixels(style['padding-bottom']) + cssValueToPixels(style.height);\n },\n getOffset: function getOffset(el) {\n var elem = el;\n var offset = { left: 0, top: 0 };\n if (elem.offsetParent) {\n do {\n offset.left += elem.offsetLeft;\n offset.top += elem.offsetTop;\n elem = elem.offsetParent;\n } while (elem);\n }\n return offset;\n },\n isActive: function isActive(elem) {\n return elem === document.activeElement && (elem.type || elem.href);\n }\n};\n\nvar BooleanController = function (_Controller) {\n inherits(BooleanController, _Controller);\n function BooleanController(object, property) {\n classCallCheck(this, BooleanController);\n var _this2 = possibleConstructorReturn(this, (BooleanController.__proto__ || Object.getPrototypeOf(BooleanController)).call(this, object, property));\n var _this = _this2;\n _this2.__prev = _this2.getValue();\n _this2.__checkbox = document.createElement('input');\n _this2.__checkbox.setAttribute('type', 'checkbox');\n function onChange() {\n _this.setValue(!_this.__prev);\n }\n dom.bind(_this2.__checkbox, 'change', onChange, false);\n _this2.domElement.appendChild(_this2.__checkbox);\n _this2.updateDisplay();\n return _this2;\n }\n createClass(BooleanController, [{\n key: 'setValue',\n value: function setValue(v) {\n var toReturn = get(BooleanController.prototype.__proto__ || Object.getPrototypeOf(BooleanController.prototype), 'setValue', this).call(this, v);\n if (this.__onFinishChange) {\n this.__onFinishChange.call(this, this.getValue());\n }\n this.__prev = this.getValue();\n return toReturn;\n }\n }, {\n key: 'updateDisplay',\n value: function updateDisplay() {\n if (this.getValue() === true) {\n this.__checkbox.setAttribute('checked', 'checked');\n this.__checkbox.checked = true;\n this.__prev = true;\n } else {\n this.__checkbox.checked = false;\n this.__prev = false;\n }\n return get(BooleanController.prototype.__proto__ || Object.getPrototypeOf(BooleanController.prototype), 'updateDisplay', this).call(this);\n }\n }]);\n return BooleanController;\n}(Controller);\n\nvar OptionController = function (_Controller) {\n inherits(OptionController, _Controller);\n function OptionController(object, property, opts) {\n classCallCheck(this, OptionController);\n var _this2 = possibleConstructorReturn(this, (OptionController.__proto__ || Object.getPrototypeOf(OptionController)).call(this, object, property));\n var options = opts;\n var _this = _this2;\n _this2.__select = document.createElement('select');\n if (Common.isArray(options)) {\n var map = {};\n Common.each(options, function (element) {\n map[element] = element;\n });\n options = map;\n }\n Common.each(options, function (value, key) {\n var opt = document.createElement('option');\n opt.innerHTML = key;\n opt.setAttribute('value', value);\n _this.__select.appendChild(opt);\n });\n _this2.updateDisplay();\n dom.bind(_this2.__select, 'change', function () {\n var desiredValue = this.options[this.selectedIndex].value;\n _this.setValue(desiredValue);\n });\n _this2.domElement.appendChild(_this2.__select);\n return _this2;\n }\n createClass(OptionController, [{\n key: 'setValue',\n value: function setValue(v) {\n var toReturn = get(OptionController.prototype.__proto__ || Object.getPrototypeOf(OptionController.prototype), 'setValue', this).call(this, v);\n if (this.__onFinishChange) {\n this.__onFinishChange.call(this, this.getValue());\n }\n return toReturn;\n }\n }, {\n key: 'updateDisplay',\n value: function updateDisplay() {\n if (dom.isActive(this.__select)) return this;\n this.__select.value = this.getValue();\n return get(OptionController.prototype.__proto__ || Object.getPrototypeOf(OptionController.prototype), 'updateDisplay', this).call(this);\n }\n }]);\n return OptionController;\n}(Controller);\n\nvar StringController = function (_Controller) {\n inherits(StringController, _Controller);\n function StringController(object, property) {\n classCallCheck(this, StringController);\n var _this2 = possibleConstructorReturn(this, (StringController.__proto__ || Object.getPrototypeOf(StringController)).call(this, object, property));\n var _this = _this2;\n function onChange() {\n _this.setValue(_this.__input.value);\n }\n function onBlur() {\n if (_this.__onFinishChange) {\n _this.__onFinishChange.call(_this, _this.getValue());\n }\n }\n _this2.__input = document.createElement('input');\n _this2.__input.setAttribute('type', 'text');\n dom.bind(_this2.__input, 'keyup', onChange);\n dom.bind(_this2.__input, 'change', onChange);\n dom.bind(_this2.__input, 'blur', onBlur);\n dom.bind(_this2.__input, 'keydown', function (e) {\n if (e.keyCode === 13) {\n this.blur();\n }\n });\n _this2.updateDisplay();\n _this2.domElement.appendChild(_this2.__input);\n return _this2;\n }\n createClass(StringController, [{\n key: 'updateDisplay',\n value: function updateDisplay() {\n if (!dom.isActive(this.__input)) {\n this.__input.value = this.getValue();\n }\n return get(StringController.prototype.__proto__ || Object.getPrototypeOf(StringController.prototype), 'updateDisplay', this).call(this);\n }\n }]);\n return StringController;\n}(Controller);\n\nfunction numDecimals(x) {\n var _x = x.toString();\n if (_x.indexOf('.') > -1) {\n return _x.length - _x.indexOf('.') - 1;\n }\n return 0;\n}\nvar NumberController = function (_Controller) {\n inherits(NumberController, _Controller);\n function NumberController(object, property, params) {\n classCallCheck(this, NumberController);\n var _this = possibleConstructorReturn(this, (NumberController.__proto__ || Object.getPrototypeOf(NumberController)).call(this, object, property));\n var _params = params || {};\n _this.__min = _params.min;\n _this.__max = _params.max;\n _this.__step = _params.step;\n if (Common.isUndefined(_this.__step)) {\n if (_this.initialValue === 0) {\n _this.__impliedStep = 1;\n } else {\n _this.__impliedStep = Math.pow(10, Math.floor(Math.log(Math.abs(_this.initialValue)) / Math.LN10)) / 10;\n }\n } else {\n _this.__impliedStep = _this.__step;\n }\n _this.__precision = numDecimals(_this.__impliedStep);\n return _this;\n }\n createClass(NumberController, [{\n key: 'setValue',\n value: function setValue(v) {\n var _v = v;\n if (this.__min !== undefined && _v < this.__min) {\n _v = this.__min;\n } else if (this.__max !== undefined && _v > this.__max) {\n _v = this.__max;\n }\n if (this.__step !== undefined && _v % this.__step !== 0) {\n _v = Math.round(_v / this.__step) * this.__step;\n }\n return get(NumberController.prototype.__proto__ || Object.getPrototypeOf(NumberController.prototype), 'setValue', this).call(this, _v);\n }\n }, {\n key: 'min',\n value: function min(minValue) {\n this.__min = minValue;\n return this;\n }\n }, {\n key: 'max',\n value: function max(maxValue) {\n this.__max = maxValue;\n return this;\n }\n }, {\n key: 'step',\n value: function step(stepValue) {\n this.__step = stepValue;\n this.__impliedStep = stepValue;\n this.__precision = numDecimals(stepValue);\n return this;\n }\n }]);\n return NumberController;\n}(Controller);\n\nfunction roundToDecimal(value, decimals) {\n var tenTo = Math.pow(10, decimals);\n return Math.round(value * tenTo) / tenTo;\n}\nvar NumberControllerBox = function (_NumberController) {\n inherits(NumberControllerBox, _NumberController);\n function NumberControllerBox(object, property, params) {\n classCallCheck(this, NumberControllerBox);\n var _this2 = possibleConstructorReturn(this, (NumberControllerBox.__proto__ || Object.getPrototypeOf(NumberControllerBox)).call(this, object, property, params));\n _this2.__truncationSuspended = false;\n var _this = _this2;\n var prevY = void 0;\n function onChange() {\n var attempted = parseFloat(_this.__input.value);\n if (!Common.isNaN(attempted)) {\n _this.setValue(attempted);\n }\n }\n function onFinish() {\n if (_this.__onFinishChange) {\n _this.__onFinishChange.call(_this, _this.getValue());\n }\n }\n function onBlur() {\n onFinish();\n }\n function onMouseDrag(e) {\n var diff = prevY - e.clientY;\n _this.setValue(_this.getValue() + diff * _this.__impliedStep);\n prevY = e.clientY;\n }\n function onMouseUp() {\n dom.unbind(window, 'mousemove', onMouseDrag);\n dom.unbind(window, 'mouseup', onMouseUp);\n onFinish();\n }\n function onMouseDown(e) {\n dom.bind(window, 'mousemove', onMouseDrag);\n dom.bind(window, 'mouseup', onMouseUp);\n prevY = e.clientY;\n }\n _this2.__input = document.createElement('input');\n _this2.__input.setAttribute('type', 'text');\n dom.bind(_this2.__input, 'change', onChange);\n dom.bind(_this2.__input, 'blur', onBlur);\n dom.bind(_this2.__input, 'mousedown', onMouseDown);\n dom.bind(_this2.__input, 'keydown', function (e) {\n if (e.keyCode === 13) {\n _this.__truncationSuspended = true;\n this.blur();\n _this.__truncationSuspended = false;\n onFinish();\n }\n });\n _this2.updateDisplay();\n _this2.domElement.appendChild(_this2.__input);\n return _this2;\n }\n createClass(NumberControllerBox, [{\n key: 'updateDisplay',\n value: function updateDisplay() {\n this.__input.value = this.__truncationSuspended ? this.getValue() : roundToDecimal(this.getValue(), this.__precision);\n return get(NumberControllerBox.prototype.__proto__ || Object.getPrototypeOf(NumberControllerBox.prototype), 'updateDisplay', this).call(this);\n }\n }]);\n return NumberControllerBox;\n}(NumberController);\n\nfunction map(v, i1, i2, o1, o2) {\n return o1 + (o2 - o1) * ((v - i1) / (i2 - i1));\n}\nvar NumberControllerSlider = function (_NumberController) {\n inherits(NumberControllerSlider, _NumberController);\n function NumberControllerSlider(object, property, min, max, step) {\n classCallCheck(this, NumberControllerSlider);\n var _this2 = possibleConstructorReturn(this, (NumberControllerSlider.__proto__ || Object.getPrototypeOf(NumberControllerSlider)).call(this, object, property, { min: min, max: max, step: step }));\n var _this = _this2;\n _this2.__background = document.createElement('div');\n _this2.__foreground = document.createElement('div');\n dom.bind(_this2.__background, 'mousedown', onMouseDown);\n dom.bind(_this2.__background, 'touchstart', onTouchStart);\n dom.addClass(_this2.__background, 'slider');\n dom.addClass(_this2.__foreground, 'slider-fg');\n function onMouseDown(e) {\n document.activeElement.blur();\n dom.bind(window, 'mousemove', onMouseDrag);\n dom.bind(window, 'mouseup', onMouseUp);\n onMouseDrag(e);\n }\n function onMouseDrag(e) {\n e.preventDefault();\n var bgRect = _this.__background.getBoundingClientRect();\n _this.setValue(map(e.clientX, bgRect.left, bgRect.right, _this.__min, _this.__max));\n return false;\n }\n function onMouseUp() {\n dom.unbind(window, 'mousemove', onMouseDrag);\n dom.unbind(window, 'mouseup', onMouseUp);\n if (_this.__onFinishChange) {\n _this.__onFinishChange.call(_this, _this.getValue());\n }\n }\n function onTouchStart(e) {\n if (e.touches.length !== 1) {\n return;\n }\n dom.bind(window, 'touchmove', onTouchMove);\n dom.bind(window, 'touchend', onTouchEnd);\n onTouchMove(e);\n }\n function onTouchMove(e) {\n var clientX = e.touches[0].clientX;\n var bgRect = _this.__background.getBoundingClientRect();\n _this.setValue(map(clientX, bgRect.left, bgRect.right, _this.__min, _this.__max));\n }\n function onTouchEnd() {\n dom.unbind(window, 'touchmove', onTouchMove);\n dom.unbind(window, 'touchend', onTouchEnd);\n if (_this.__onFinishChange) {\n _this.__onFinishChange.call(_this, _this.getValue());\n }\n }\n _this2.updateDisplay();\n _this2.__background.appendChild(_this2.__foreground);\n _this2.domElement.appendChild(_this2.__background);\n return _this2;\n }\n createClass(NumberControllerSlider, [{\n key: 'updateDisplay',\n value: function updateDisplay() {\n var pct = (this.getValue() - this.__min) / (this.__max - this.__min);\n this.__foreground.style.width = pct * 100 + '%';\n return get(NumberControllerSlider.prototype.__proto__ || Object.getPrototypeOf(NumberControllerSlider.prototype), 'updateDisplay', this).call(this);\n }\n }]);\n return NumberControllerSlider;\n}(NumberController);\n\nvar FunctionController = function (_Controller) {\n inherits(FunctionController, _Controller);\n function FunctionController(object, property, text) {\n classCallCheck(this, FunctionController);\n var _this2 = possibleConstructorReturn(this, (FunctionController.__proto__ || Object.getPrototypeOf(FunctionController)).call(this, object, property));\n var _this = _this2;\n _this2.__button = document.createElement('div');\n _this2.__button.innerHTML = text === undefined ? 'Fire' : text;\n dom.bind(_this2.__button, 'click', function (e) {\n e.preventDefault();\n _this.fire();\n return false;\n });\n dom.addClass(_this2.__button, 'button');\n _this2.domElement.appendChild(_this2.__button);\n return _this2;\n }\n createClass(FunctionController, [{\n key: 'fire',\n value: function fire() {\n if (this.__onChange) {\n this.__onChange.call(this);\n }\n this.getValue().call(this.object);\n if (this.__onFinishChange) {\n this.__onFinishChange.call(this, this.getValue());\n }\n }\n }]);\n return FunctionController;\n}(Controller);\n\nvar ColorController = function (_Controller) {\n inherits(ColorController, _Controller);\n function ColorController(object, property) {\n classCallCheck(this, ColorController);\n var _this2 = possibleConstructorReturn(this, (ColorController.__proto__ || Object.getPrototypeOf(ColorController)).call(this, object, property));\n _this2.__color = new Color(_this2.getValue());\n _this2.__temp = new Color(0);\n var _this = _this2;\n _this2.domElement = document.createElement('div');\n dom.makeSelectable(_this2.domElement, false);\n _this2.__selector = document.createElement('div');\n _this2.__selector.className = 'selector';\n _this2.__saturation_field = document.createElement('div');\n _this2.__saturation_field.className = 'saturation-field';\n _this2.__field_knob = document.createElement('div');\n _this2.__field_knob.className = 'field-knob';\n _this2.__field_knob_border = '2px solid ';\n _this2.__hue_knob = document.createElement('div');\n _this2.__hue_knob.className = 'hue-knob';\n _this2.__hue_field = document.createElement('div');\n _this2.__hue_field.className = 'hue-field';\n _this2.__input = document.createElement('input');\n _this2.__input.type = 'text';\n _this2.__input_textShadow = '0 1px 1px ';\n dom.bind(_this2.__input, 'keydown', function (e) {\n if (e.keyCode === 13) {\n onBlur.call(this);\n }\n });\n dom.bind(_this2.__input, 'blur', onBlur);\n dom.bind(_this2.__selector, 'mousedown', function () {\n dom.addClass(this, 'drag').bind(window, 'mouseup', function () {\n dom.removeClass(_this.__selector, 'drag');\n });\n });\n dom.bind(_this2.__selector, 'touchstart', function () {\n dom.addClass(this, 'drag').bind(window, 'touchend', function () {\n dom.removeClass(_this.__selector, 'drag');\n });\n });\n var valueField = document.createElement('div');\n Common.extend(_this2.__selector.style, {\n width: '122px',\n height: '102px',\n padding: '3px',\n backgroundColor: '#222',\n boxShadow: '0px 1px 3px rgba(0,0,0,0.3)'\n });\n Common.extend(_this2.__field_knob.style, {\n position: 'absolute',\n width: '12px',\n height: '12px',\n border: _this2.__field_knob_border + (_this2.__color.v < 0.5 ? '#fff' : '#000'),\n boxShadow: '0px 1px 3px rgba(0,0,0,0.5)',\n borderRadius: '12px',\n zIndex: 1\n });\n Common.extend(_this2.__hue_knob.style, {\n position: 'absolute',\n width: '15px',\n height: '2px',\n borderRight: '4px solid #fff',\n zIndex: 1\n });\n Common.extend(_this2.__saturation_field.style, {\n width: '100px',\n height: '100px',\n border: '1px solid #555',\n marginRight: '3px',\n display: 'inline-block',\n cursor: 'pointer'\n });\n Common.extend(valueField.style, {\n width: '100%',\n height: '100%',\n background: 'none'\n });\n linearGradient(valueField, 'top', 'rgba(0,0,0,0)', '#000');\n Common.extend(_this2.__hue_field.style, {\n width: '15px',\n height: '100px',\n border: '1px solid #555',\n cursor: 'ns-resize',\n position: 'absolute',\n top: '3px',\n right: '3px'\n });\n hueGradient(_this2.__hue_field);\n Common.extend(_this2.__input.style, {\n outline: 'none',\n textAlign: 'center',\n color: '#fff',\n border: 0,\n fontWeight: 'bold',\n textShadow: _this2.__input_textShadow + 'rgba(0,0,0,0.7)'\n });\n dom.bind(_this2.__saturation_field, 'mousedown', fieldDown);\n dom.bind(_this2.__saturation_field, 'touchstart', fieldDown);\n dom.bind(_this2.__field_knob, 'mousedown', fieldDown);\n dom.bind(_this2.__field_knob, 'touchstart', fieldDown);\n dom.bind(_this2.__hue_field, 'mousedown', fieldDownH);\n dom.bind(_this2.__hue_field, 'touchstart', fieldDownH);\n function fieldDown(e) {\n setSV(e);\n dom.bind(window, 'mousemove', setSV);\n dom.bind(window, 'touchmove', setSV);\n dom.bind(window, 'mouseup', fieldUpSV);\n dom.bind(window, 'touchend', fieldUpSV);\n }\n function fieldDownH(e) {\n setH(e);\n dom.bind(window, 'mousemove', setH);\n dom.bind(window, 'touchmove', setH);\n dom.bind(window, 'mouseup', fieldUpH);\n dom.bind(window, 'touchend', fieldUpH);\n }\n function fieldUpSV() {\n dom.unbind(window, 'mousemove', setSV);\n dom.unbind(window, 'touchmove', setSV);\n dom.unbind(window, 'mouseup', fieldUpSV);\n dom.unbind(window, 'touchend', fieldUpSV);\n onFinish();\n }\n function fieldUpH() {\n dom.unbind(window, 'mousemove', setH);\n dom.unbind(window, 'touchmove', setH);\n dom.unbind(window, 'mouseup', fieldUpH);\n dom.unbind(window, 'touchend', fieldUpH);\n onFinish();\n }\n function onBlur() {\n var i = interpret(this.value);\n if (i !== false) {\n _this.__color.__state = i;\n _this.setValue(_this.__color.toOriginal());\n } else {\n this.value = _this.__color.toString();\n }\n }\n function onFinish() {\n if (_this.__onFinishChange) {\n _this.__onFinishChange.call(_this, _this.__color.toOriginal());\n }\n }\n _this2.__saturation_field.appendChild(valueField);\n _this2.__selector.appendChild(_this2.__field_knob);\n _this2.__selector.appendChild(_this2.__saturation_field);\n _this2.__selector.appendChild(_this2.__hue_field);\n _this2.__hue_field.appendChild(_this2.__hue_knob);\n _this2.domElement.appendChild(_this2.__input);\n _this2.domElement.appendChild(_this2.__selector);\n _this2.updateDisplay();\n function setSV(e) {\n if (e.type.indexOf('touch') === -1) {\n e.preventDefault();\n }\n var fieldRect = _this.__saturation_field.getBoundingClientRect();\n var _ref = e.touches && e.touches[0] || e,\n clientX = _ref.clientX,\n clientY = _ref.clientY;\n var s = (clientX - fieldRect.left) / (fieldRect.right - fieldRect.left);\n var v = 1 - (clientY - fieldRect.top) / (fieldRect.bottom - fieldRect.top);\n if (v > 1) {\n v = 1;\n } else if (v < 0) {\n v = 0;\n }\n if (s > 1) {\n s = 1;\n } else if (s < 0) {\n s = 0;\n }\n _this.__color.v = v;\n _this.__color.s = s;\n _this.setValue(_this.__color.toOriginal());\n return false;\n }\n function setH(e) {\n if (e.type.indexOf('touch') === -1) {\n e.preventDefault();\n }\n var fieldRect = _this.__hue_field.getBoundingClientRect();\n var _ref2 = e.touches && e.touches[0] || e,\n clientY = _ref2.clientY;\n var h = 1 - (clientY - fieldRect.top) / (fieldRect.bottom - fieldRect.top);\n if (h > 1) {\n h = 1;\n } else if (h < 0) {\n h = 0;\n }\n _this.__color.h = h * 360;\n _this.setValue(_this.__color.toOriginal());\n return false;\n }\n return _this2;\n }\n createClass(ColorController, [{\n key: 'updateDisplay',\n value: function updateDisplay() {\n var i = interpret(this.getValue());\n if (i !== false) {\n var mismatch = false;\n Common.each(Color.COMPONENTS, function (component) {\n if (!Common.isUndefined(i[component]) && !Common.isUndefined(this.__color.__state[component]) && i[component] !== this.__color.__state[component]) {\n mismatch = true;\n return {};\n }\n }, this);\n if (mismatch) {\n Common.extend(this.__color.__state, i);\n }\n }\n Common.extend(this.__temp.__state, this.__color.__state);\n this.__temp.a = 1;\n var flip = this.__color.v < 0.5 || this.__color.s > 0.5 ? 255 : 0;\n var _flip = 255 - flip;\n Common.extend(this.__field_knob.style, {\n marginLeft: 100 * this.__color.s - 7 + 'px',\n marginTop: 100 * (1 - this.__color.v) - 7 + 'px',\n backgroundColor: this.__temp.toHexString(),\n border: this.__field_knob_border + 'rgb(' + flip + ',' + flip + ',' + flip + ')'\n });\n this.__hue_knob.style.marginTop = (1 - this.__color.h / 360) * 100 + 'px';\n this.__temp.s = 1;\n this.__temp.v = 1;\n linearGradient(this.__saturation_field, 'left', '#fff', this.__temp.toHexString());\n this.__input.value = this.__color.toString();\n Common.extend(this.__input.style, {\n backgroundColor: this.__color.toHexString(),\n color: 'rgb(' + flip + ',' + flip + ',' + flip + ')',\n textShadow: this.__input_textShadow + 'rgba(' + _flip + ',' + _flip + ',' + _flip + ',.7)'\n });\n }\n }]);\n return ColorController;\n}(Controller);\nvar vendors = ['-moz-', '-o-', '-webkit-', '-ms-', ''];\nfunction linearGradient(elem, x, a, b) {\n elem.style.background = '';\n Common.each(vendors, function (vendor) {\n elem.style.cssText += 'background: ' + vendor + 'linear-gradient(' + x + ', ' + a + ' 0%, ' + b + ' 100%); ';\n });\n}\nfunction hueGradient(elem) {\n elem.style.background = '';\n elem.style.cssText += 'background: -moz-linear-gradient(top, #ff0000 0%, #ff00ff 17%, #0000ff 34%, #00ffff 50%, #00ff00 67%, #ffff00 84%, #ff0000 100%);';\n elem.style.cssText += 'background: -webkit-linear-gradient(top, #ff0000 0%,#ff00ff 17%,#0000ff 34%,#00ffff 50%,#00ff00 67%,#ffff00 84%,#ff0000 100%);';\n elem.style.cssText += 'background: -o-linear-gradient(top, #ff0000 0%,#ff00ff 17%,#0000ff 34%,#00ffff 50%,#00ff00 67%,#ffff00 84%,#ff0000 100%);';\n elem.style.cssText += 'background: -ms-linear-gradient(top, #ff0000 0%,#ff00ff 17%,#0000ff 34%,#00ffff 50%,#00ff00 67%,#ffff00 84%,#ff0000 100%);';\n elem.style.cssText += 'background: linear-gradient(top, #ff0000 0%,#ff00ff 17%,#0000ff 34%,#00ffff 50%,#00ff00 67%,#ffff00 84%,#ff0000 100%);';\n}\n\nvar css = {\n load: function load(url, indoc) {\n var doc = indoc || document;\n var link = doc.createElement('link');\n link.type = 'text/css';\n link.rel = 'stylesheet';\n link.href = url;\n doc.getElementsByTagName('head')[0].appendChild(link);\n },\n inject: function inject(cssContent, indoc) {\n var doc = indoc || document;\n var injected = document.createElement('style');\n injected.type = 'text/css';\n injected.innerHTML = cssContent;\n var head = doc.getElementsByTagName('head')[0];\n try {\n head.appendChild(injected);\n } catch (e) {\n }\n }\n};\n\nvar saveDialogContents = \"
\\n\\n Here's the new load parameter for your GUI's constructor:\\n\\n \\n\\n
\\n\\n Automatically save\\n values to localStorage on exit.\\n\\n
The values saved to localStorage will\\n override those passed to dat.GUI's constructor. This makes it\\n easier to work incrementally, but localStorage is fragile,\\n and your friends may not see the same values you do.\\n\\n
\\n\\n
\\n\\n
\";\n\nvar ControllerFactory = function ControllerFactory(object, property) {\n var initialValue = object[property];\n if (Common.isArray(arguments[2]) || Common.isObject(arguments[2])) {\n return new OptionController(object, property, arguments[2]);\n }\n if (Common.isNumber(initialValue)) {\n if (Common.isNumber(arguments[2]) && Common.isNumber(arguments[3])) {\n if (Common.isNumber(arguments[4])) {\n return new NumberControllerSlider(object, property, arguments[2], arguments[3], arguments[4]);\n }\n return new NumberControllerSlider(object, property, arguments[2], arguments[3]);\n }\n if (Common.isNumber(arguments[4])) {\n return new NumberControllerBox(object, property, { min: arguments[2], max: arguments[3], step: arguments[4] });\n }\n return new NumberControllerBox(object, property, { min: arguments[2], max: arguments[3] });\n }\n if (Common.isString(initialValue)) {\n return new StringController(object, property);\n }\n if (Common.isFunction(initialValue)) {\n return new FunctionController(object, property, '');\n }\n if (Common.isBoolean(initialValue)) {\n return new BooleanController(object, property);\n }\n return null;\n};\n\nfunction requestAnimationFrame(callback) {\n setTimeout(callback, 1000 / 60);\n}\nvar requestAnimationFrame$1 = window.requestAnimationFrame || window.webkitRequestAnimationFrame || window.mozRequestAnimationFrame || window.oRequestAnimationFrame || window.msRequestAnimationFrame || requestAnimationFrame;\n\nvar CenteredDiv = function () {\n function CenteredDiv() {\n classCallCheck(this, CenteredDiv);\n this.backgroundElement = document.createElement('div');\n Common.extend(this.backgroundElement.style, {\n backgroundColor: 'rgba(0,0,0,0.8)',\n top: 0,\n left: 0,\n display: 'none',\n zIndex: '1000',\n opacity: 0,\n WebkitTransition: 'opacity 0.2s linear',\n transition: 'opacity 0.2s linear'\n });\n dom.makeFullscreen(this.backgroundElement);\n this.backgroundElement.style.position = 'fixed';\n this.domElement = document.createElement('div');\n Common.extend(this.domElement.style, {\n position: 'fixed',\n display: 'none',\n zIndex: '1001',\n opacity: 0,\n WebkitTransition: '-webkit-transform 0.2s ease-out, opacity 0.2s linear',\n transition: 'transform 0.2s ease-out, opacity 0.2s linear'\n });\n document.body.appendChild(this.backgroundElement);\n document.body.appendChild(this.domElement);\n var _this = this;\n dom.bind(this.backgroundElement, 'click', function () {\n _this.hide();\n });\n }\n createClass(CenteredDiv, [{\n key: 'show',\n value: function show() {\n var _this = this;\n this.backgroundElement.style.display = 'block';\n this.domElement.style.display = 'block';\n this.domElement.style.opacity = 0;\n this.domElement.style.webkitTransform = 'scale(1.1)';\n this.layout();\n Common.defer(function () {\n _this.backgroundElement.style.opacity = 1;\n _this.domElement.style.opacity = 1;\n _this.domElement.style.webkitTransform = 'scale(1)';\n });\n }\n }, {\n key: 'hide',\n value: function hide() {\n var _this = this;\n var hide = function hide() {\n _this.domElement.style.display = 'none';\n _this.backgroundElement.style.display = 'none';\n dom.unbind(_this.domElement, 'webkitTransitionEnd', hide);\n dom.unbind(_this.domElement, 'transitionend', hide);\n dom.unbind(_this.domElement, 'oTransitionEnd', hide);\n };\n dom.bind(this.domElement, 'webkitTransitionEnd', hide);\n dom.bind(this.domElement, 'transitionend', hide);\n dom.bind(this.domElement, 'oTransitionEnd', hide);\n this.backgroundElement.style.opacity = 0;\n this.domElement.style.opacity = 0;\n this.domElement.style.webkitTransform = 'scale(1.1)';\n }\n }, {\n key: 'layout',\n value: function layout() {\n this.domElement.style.left = window.innerWidth / 2 - dom.getWidth(this.domElement) / 2 + 'px';\n this.domElement.style.top = window.innerHeight / 2 - dom.getHeight(this.domElement) / 2 + 'px';\n }\n }]);\n return CenteredDiv;\n}();\n\nvar styleSheet = ___$insertStyle(\".dg ul{list-style:none;margin:0;padding:0;width:100%;clear:both}.dg.ac{position:fixed;top:0;left:0;right:0;height:0;z-index:0}.dg:not(.ac) .main{overflow:hidden}.dg.main{-webkit-transition:opacity .1s linear;-o-transition:opacity .1s linear;-moz-transition:opacity .1s linear;transition:opacity .1s linear}.dg.main.taller-than-window{overflow-y:auto}.dg.main.taller-than-window .close-button{opacity:1;margin-top:-1px;border-top:1px solid #2c2c2c}.dg.main ul.closed .close-button{opacity:1 !important}.dg.main:hover .close-button,.dg.main .close-button.drag{opacity:1}.dg.main .close-button{-webkit-transition:opacity .1s linear;-o-transition:opacity .1s linear;-moz-transition:opacity .1s linear;transition:opacity .1s linear;border:0;line-height:19px;height:20px;cursor:pointer;text-align:center;background-color:#000}.dg.main .close-button.close-top{position:relative}.dg.main .close-button.close-bottom{position:absolute}.dg.main .close-button:hover{background-color:#111}.dg.a{float:right;margin-right:15px;overflow-y:visible}.dg.a.has-save>ul.close-top{margin-top:0}.dg.a.has-save>ul.close-bottom{margin-top:27px}.dg.a.has-save>ul.closed{margin-top:0}.dg.a .save-row{top:0;z-index:1002}.dg.a .save-row.close-top{position:relative}.dg.a .save-row.close-bottom{position:fixed}.dg li{-webkit-transition:height .1s ease-out;-o-transition:height .1s ease-out;-moz-transition:height .1s ease-out;transition:height .1s ease-out;-webkit-transition:overflow .1s linear;-o-transition:overflow .1s linear;-moz-transition:overflow .1s linear;transition:overflow .1s linear}.dg li:not(.folder){cursor:auto;height:27px;line-height:27px;padding:0 4px 0 5px}.dg li.folder{padding:0;border-left:4px solid rgba(0,0,0,0)}.dg li.title{cursor:pointer;margin-left:-4px}.dg .closed li:not(.title),.dg .closed ul li,.dg .closed ul li>*{height:0;overflow:hidden;border:0}.dg .cr{clear:both;padding-left:3px;height:27px;overflow:hidden}.dg .property-name{cursor:default;float:left;clear:left;width:40%;overflow:hidden;text-overflow:ellipsis}.dg .cr.function .property-name{width:100%}.dg .c{float:left;width:60%;position:relative}.dg .c input[type=text]{border:0;margin-top:4px;padding:3px;width:100%;float:right}.dg .has-slider input[type=text]{width:30%;margin-left:0}.dg .slider{float:left;width:66%;margin-left:-5px;margin-right:0;height:19px;margin-top:4px}.dg .slider-fg{height:100%}.dg .c input[type=checkbox]{margin-top:7px}.dg .c select{margin-top:5px}.dg .cr.function,.dg .cr.function .property-name,.dg .cr.function *,.dg .cr.boolean,.dg .cr.boolean *{cursor:pointer}.dg .cr.color{overflow:visible}.dg .selector{display:none;position:absolute;margin-left:-9px;margin-top:23px;z-index:10}.dg .c:hover .selector,.dg .selector.drag{display:block}.dg li.save-row{padding:0}.dg li.save-row .button{display:inline-block;padding:0px 6px}.dg.dialogue{background-color:#222;width:460px;padding:15px;font-size:13px;line-height:15px}#dg-new-constructor{padding:10px;color:#222;font-family:Monaco, monospace;font-size:10px;border:0;resize:none;box-shadow:inset 1px 1px 1px #888;word-wrap:break-word;margin:12px 0;display:block;width:440px;overflow-y:scroll;height:100px;position:relative}#dg-local-explain{display:none;font-size:11px;line-height:17px;border-radius:3px;background-color:#333;padding:8px;margin-top:10px}#dg-local-explain code{font-size:10px}#dat-gui-save-locally{display:none}.dg{color:#eee;font:11px 'Lucida Grande', sans-serif;text-shadow:0 -1px 0 #111}.dg.main::-webkit-scrollbar{width:5px;background:#1a1a1a}.dg.main::-webkit-scrollbar-corner{height:0;display:none}.dg.main::-webkit-scrollbar-thumb{border-radius:5px;background:#676767}.dg li:not(.folder){background:#1a1a1a;border-bottom:1px solid #2c2c2c}.dg li.save-row{line-height:25px;background:#dad5cb;border:0}.dg li.save-row select{margin-left:5px;width:108px}.dg li.save-row .button{margin-left:5px;margin-top:1px;border-radius:2px;font-size:9px;line-height:7px;padding:4px 4px 5px 4px;background:#c5bdad;color:#fff;text-shadow:0 1px 0 #b0a58f;box-shadow:0 -1px 0 #b0a58f;cursor:pointer}.dg li.save-row .button.gears{background:#c5bdad url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAsAAAANCAYAAAB/9ZQ7AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAQJJREFUeNpiYKAU/P//PwGIC/ApCABiBSAW+I8AClAcgKxQ4T9hoMAEUrxx2QSGN6+egDX+/vWT4e7N82AMYoPAx/evwWoYoSYbACX2s7KxCxzcsezDh3evFoDEBYTEEqycggWAzA9AuUSQQgeYPa9fPv6/YWm/Acx5IPb7ty/fw+QZblw67vDs8R0YHyQhgObx+yAJkBqmG5dPPDh1aPOGR/eugW0G4vlIoTIfyFcA+QekhhHJhPdQxbiAIguMBTQZrPD7108M6roWYDFQiIAAv6Aow/1bFwXgis+f2LUAynwoIaNcz8XNx3Dl7MEJUDGQpx9gtQ8YCueB+D26OECAAQDadt7e46D42QAAAABJRU5ErkJggg==) 2px 1px no-repeat;height:7px;width:8px}.dg li.save-row .button:hover{background-color:#bab19e;box-shadow:0 -1px 0 #b0a58f}.dg li.folder{border-bottom:0}.dg li.title{padding-left:16px;background:#000 url(data:image/gif;base64,R0lGODlhBQAFAJEAAP////Pz8////////yH5BAEAAAIALAAAAAAFAAUAAAIIlI+hKgFxoCgAOw==) 6px 10px no-repeat;cursor:pointer;border-bottom:1px solid rgba(255,255,255,0.2)}.dg .closed li.title{background-image:url(data:image/gif;base64,R0lGODlhBQAFAJEAAP////Pz8////////yH5BAEAAAIALAAAAAAFAAUAAAIIlGIWqMCbWAEAOw==)}.dg .cr.boolean{border-left:3px solid #806787}.dg .cr.color{border-left:3px solid}.dg .cr.function{border-left:3px solid #e61d5f}.dg .cr.number{border-left:3px solid #2FA1D6}.dg .cr.number input[type=text]{color:#2FA1D6}.dg .cr.string{border-left:3px solid #1ed36f}.dg .cr.string input[type=text]{color:#1ed36f}.dg .cr.function:hover,.dg .cr.boolean:hover{background:#111}.dg .c input[type=text]{background:#303030;outline:none}.dg .c input[type=text]:hover{background:#3c3c3c}.dg .c input[type=text]:focus{background:#494949;color:#fff}.dg .c .slider{background:#303030;cursor:ew-resize}.dg .c .slider-fg{background:#2FA1D6;max-width:100%}.dg .c .slider:hover{background:#3c3c3c}.dg .c .slider:hover .slider-fg{background:#44abda}\\n\");\n\ncss.inject(styleSheet);\nvar CSS_NAMESPACE = 'dg';\nvar HIDE_KEY_CODE = 72;\nvar CLOSE_BUTTON_HEIGHT = 20;\nvar DEFAULT_DEFAULT_PRESET_NAME = 'Default';\nvar SUPPORTS_LOCAL_STORAGE = function () {\n try {\n return !!window.localStorage;\n } catch (e) {\n return false;\n }\n}();\nvar SAVE_DIALOGUE = void 0;\nvar autoPlaceVirgin = true;\nvar autoPlaceContainer = void 0;\nvar hide = false;\nvar hideableGuis = [];\nvar GUI = function GUI(pars) {\n var _this = this;\n var params = pars || {};\n this.domElement = document.createElement('div');\n this.__ul = document.createElement('ul');\n this.domElement.appendChild(this.__ul);\n dom.addClass(this.domElement, CSS_NAMESPACE);\n this.__folders = {};\n this.__controllers = [];\n this.__rememberedObjects = [];\n this.__rememberedObjectIndecesToControllers = [];\n this.__listening = [];\n params = Common.defaults(params, {\n closeOnTop: false,\n autoPlace: true,\n width: GUI.DEFAULT_WIDTH\n });\n params = Common.defaults(params, {\n resizable: params.autoPlace,\n hideable: params.autoPlace\n });\n if (!Common.isUndefined(params.load)) {\n if (params.preset) {\n params.load.preset = params.preset;\n }\n } else {\n params.load = { preset: DEFAULT_DEFAULT_PRESET_NAME };\n }\n if (Common.isUndefined(params.parent) && params.hideable) {\n hideableGuis.push(this);\n }\n params.resizable = Common.isUndefined(params.parent) && params.resizable;\n if (params.autoPlace && Common.isUndefined(params.scrollable)) {\n params.scrollable = true;\n }\n var useLocalStorage = SUPPORTS_LOCAL_STORAGE && localStorage.getItem(getLocalStorageHash(this, 'isLocal')) === 'true';\n var saveToLocalStorage = void 0;\n var titleRow = void 0;\n Object.defineProperties(this,\n {\n parent: {\n get: function get$$1() {\n return params.parent;\n }\n },\n scrollable: {\n get: function get$$1() {\n return params.scrollable;\n }\n },\n autoPlace: {\n get: function get$$1() {\n return params.autoPlace;\n }\n },\n closeOnTop: {\n get: function get$$1() {\n return params.closeOnTop;\n }\n },\n preset: {\n get: function get$$1() {\n if (_this.parent) {\n return _this.getRoot().preset;\n }\n return params.load.preset;\n },\n set: function set$$1(v) {\n if (_this.parent) {\n _this.getRoot().preset = v;\n } else {\n params.load.preset = v;\n }\n setPresetSelectIndex(this);\n _this.revert();\n }\n },\n width: {\n get: function get$$1() {\n return params.width;\n },\n set: function set$$1(v) {\n params.width = v;\n setWidth(_this, v);\n }\n },\n name: {\n get: function get$$1() {\n return params.name;\n },\n set: function set$$1(v) {\n params.name = v;\n if (titleRow) {\n titleRow.innerHTML = params.name;\n }\n }\n },\n closed: {\n get: function get$$1() {\n return params.closed;\n },\n set: function set$$1(v) {\n params.closed = v;\n if (params.closed) {\n dom.addClass(_this.__ul, GUI.CLASS_CLOSED);\n } else {\n dom.removeClass(_this.__ul, GUI.CLASS_CLOSED);\n }\n this.onResize();\n if (_this.__closeButton) {\n _this.__closeButton.innerHTML = v ? GUI.TEXT_OPEN : GUI.TEXT_CLOSED;\n }\n }\n },\n load: {\n get: function get$$1() {\n return params.load;\n }\n },\n useLocalStorage: {\n get: function get$$1() {\n return useLocalStorage;\n },\n set: function set$$1(bool) {\n if (SUPPORTS_LOCAL_STORAGE) {\n useLocalStorage = bool;\n if (bool) {\n dom.bind(window, 'unload', saveToLocalStorage);\n } else {\n dom.unbind(window, 'unload', saveToLocalStorage);\n }\n localStorage.setItem(getLocalStorageHash(_this, 'isLocal'), bool);\n }\n }\n }\n });\n if (Common.isUndefined(params.parent)) {\n this.closed = params.closed || false;\n dom.addClass(this.domElement, GUI.CLASS_MAIN);\n dom.makeSelectable(this.domElement, false);\n if (SUPPORTS_LOCAL_STORAGE) {\n if (useLocalStorage) {\n _this.useLocalStorage = true;\n var savedGui = localStorage.getItem(getLocalStorageHash(this, 'gui'));\n if (savedGui) {\n params.load = JSON.parse(savedGui);\n }\n }\n }\n this.__closeButton = document.createElement('div');\n this.__closeButton.innerHTML = GUI.TEXT_CLOSED;\n dom.addClass(this.__closeButton, GUI.CLASS_CLOSE_BUTTON);\n if (params.closeOnTop) {\n dom.addClass(this.__closeButton, GUI.CLASS_CLOSE_TOP);\n this.domElement.insertBefore(this.__closeButton, this.domElement.childNodes[0]);\n } else {\n dom.addClass(this.__closeButton, GUI.CLASS_CLOSE_BOTTOM);\n this.domElement.appendChild(this.__closeButton);\n }\n dom.bind(this.__closeButton, 'click', function () {\n _this.closed = !_this.closed;\n });\n } else {\n if (params.closed === undefined) {\n params.closed = true;\n }\n var titleRowName = document.createTextNode(params.name);\n dom.addClass(titleRowName, 'controller-name');\n titleRow = addRow(_this, titleRowName);\n var onClickTitle = function onClickTitle(e) {\n e.preventDefault();\n _this.closed = !_this.closed;\n return false;\n };\n dom.addClass(this.__ul, GUI.CLASS_CLOSED);\n dom.addClass(titleRow, 'title');\n dom.bind(titleRow, 'click', onClickTitle);\n if (!params.closed) {\n this.closed = false;\n }\n }\n if (params.autoPlace) {\n if (Common.isUndefined(params.parent)) {\n if (autoPlaceVirgin) {\n autoPlaceContainer = document.createElement('div');\n dom.addClass(autoPlaceContainer, CSS_NAMESPACE);\n dom.addClass(autoPlaceContainer, GUI.CLASS_AUTO_PLACE_CONTAINER);\n document.body.appendChild(autoPlaceContainer);\n autoPlaceVirgin = false;\n }\n autoPlaceContainer.appendChild(this.domElement);\n dom.addClass(this.domElement, GUI.CLASS_AUTO_PLACE);\n }\n if (!this.parent) {\n setWidth(_this, params.width);\n }\n }\n this.__resizeHandler = function () {\n _this.onResizeDebounced();\n };\n dom.bind(window, 'resize', this.__resizeHandler);\n dom.bind(this.__ul, 'webkitTransitionEnd', this.__resizeHandler);\n dom.bind(this.__ul, 'transitionend', this.__resizeHandler);\n dom.bind(this.__ul, 'oTransitionEnd', this.__resizeHandler);\n this.onResize();\n if (params.resizable) {\n addResizeHandle(this);\n }\n saveToLocalStorage = function saveToLocalStorage() {\n if (SUPPORTS_LOCAL_STORAGE && localStorage.getItem(getLocalStorageHash(_this, 'isLocal')) === 'true') {\n localStorage.setItem(getLocalStorageHash(_this, 'gui'), JSON.stringify(_this.getSaveObject()));\n }\n };\n this.saveToLocalStorageIfPossible = saveToLocalStorage;\n function resetWidth() {\n var root = _this.getRoot();\n root.width += 1;\n Common.defer(function () {\n root.width -= 1;\n });\n }\n if (!params.parent) {\n resetWidth();\n }\n};\nGUI.toggleHide = function () {\n hide = !hide;\n Common.each(hideableGuis, function (gui) {\n gui.domElement.style.display = hide ? 'none' : '';\n });\n};\nGUI.CLASS_AUTO_PLACE = 'a';\nGUI.CLASS_AUTO_PLACE_CONTAINER = 'ac';\nGUI.CLASS_MAIN = 'main';\nGUI.CLASS_CONTROLLER_ROW = 'cr';\nGUI.CLASS_TOO_TALL = 'taller-than-window';\nGUI.CLASS_CLOSED = 'closed';\nGUI.CLASS_CLOSE_BUTTON = 'close-button';\nGUI.CLASS_CLOSE_TOP = 'close-top';\nGUI.CLASS_CLOSE_BOTTOM = 'close-bottom';\nGUI.CLASS_DRAG = 'drag';\nGUI.DEFAULT_WIDTH = 245;\nGUI.TEXT_CLOSED = 'Close Controls';\nGUI.TEXT_OPEN = 'Open Controls';\nGUI._keydownHandler = function (e) {\n if (document.activeElement.type !== 'text' && (e.which === HIDE_KEY_CODE || e.keyCode === HIDE_KEY_CODE)) {\n GUI.toggleHide();\n }\n};\ndom.bind(window, 'keydown', GUI._keydownHandler, false);\nCommon.extend(GUI.prototype,\n{\n add: function add(object, property) {\n return _add(this, object, property, {\n factoryArgs: Array.prototype.slice.call(arguments, 2)\n });\n },\n addColor: function addColor(object, property) {\n return _add(this, object, property, {\n color: true\n });\n },\n remove: function remove(controller) {\n this.__ul.removeChild(controller.__li);\n this.__controllers.splice(this.__controllers.indexOf(controller), 1);\n var _this = this;\n Common.defer(function () {\n _this.onResize();\n });\n },\n destroy: function destroy() {\n if (this.parent) {\n throw new Error('Only the root GUI should be removed with .destroy(). ' + 'For subfolders, use gui.removeFolder(folder) instead.');\n }\n if (this.autoPlace) {\n autoPlaceContainer.removeChild(this.domElement);\n }\n var _this = this;\n Common.each(this.__folders, function (subfolder) {\n _this.removeFolder(subfolder);\n });\n dom.unbind(window, 'keydown', GUI._keydownHandler, false);\n removeListeners(this);\n },\n addFolder: function addFolder(name) {\n if (this.__folders[name] !== undefined) {\n throw new Error('You already have a folder in this GUI by the' + ' name \"' + name + '\"');\n }\n var newGuiParams = { name: name, parent: this };\n newGuiParams.autoPlace = this.autoPlace;\n if (this.load &&\n this.load.folders &&\n this.load.folders[name]) {\n newGuiParams.closed = this.load.folders[name].closed;\n newGuiParams.load = this.load.folders[name];\n }\n var gui = new GUI(newGuiParams);\n this.__folders[name] = gui;\n var li = addRow(this, gui.domElement);\n dom.addClass(li, 'folder');\n return gui;\n },\n removeFolder: function removeFolder(folder) {\n this.__ul.removeChild(folder.domElement.parentElement);\n delete this.__folders[folder.name];\n if (this.load &&\n this.load.folders &&\n this.load.folders[folder.name]) {\n delete this.load.folders[folder.name];\n }\n removeListeners(folder);\n var _this = this;\n Common.each(folder.__folders, function (subfolder) {\n folder.removeFolder(subfolder);\n });\n Common.defer(function () {\n _this.onResize();\n });\n },\n open: function open() {\n this.closed = false;\n },\n close: function close() {\n this.closed = true;\n },\n hide: function hide() {\n this.domElement.style.display = 'none';\n },\n show: function show() {\n this.domElement.style.display = '';\n },\n onResize: function onResize() {\n var root = this.getRoot();\n if (root.scrollable) {\n var top = dom.getOffset(root.__ul).top;\n var h = 0;\n Common.each(root.__ul.childNodes, function (node) {\n if (!(root.autoPlace && node === root.__save_row)) {\n h += dom.getHeight(node);\n }\n });\n if (window.innerHeight - top - CLOSE_BUTTON_HEIGHT < h) {\n dom.addClass(root.domElement, GUI.CLASS_TOO_TALL);\n root.__ul.style.height = window.innerHeight - top - CLOSE_BUTTON_HEIGHT + 'px';\n } else {\n dom.removeClass(root.domElement, GUI.CLASS_TOO_TALL);\n root.__ul.style.height = 'auto';\n }\n }\n if (root.__resize_handle) {\n Common.defer(function () {\n root.__resize_handle.style.height = root.__ul.offsetHeight + 'px';\n });\n }\n if (root.__closeButton) {\n root.__closeButton.style.width = root.width + 'px';\n }\n },\n onResizeDebounced: Common.debounce(function () {\n this.onResize();\n }, 50),\n remember: function remember() {\n if (Common.isUndefined(SAVE_DIALOGUE)) {\n SAVE_DIALOGUE = new CenteredDiv();\n SAVE_DIALOGUE.domElement.innerHTML = saveDialogContents;\n }\n if (this.parent) {\n throw new Error('You can only call remember on a top level GUI.');\n }\n var _this = this;\n Common.each(Array.prototype.slice.call(arguments), function (object) {\n if (_this.__rememberedObjects.length === 0) {\n addSaveMenu(_this);\n }\n if (_this.__rememberedObjects.indexOf(object) === -1) {\n _this.__rememberedObjects.push(object);\n }\n });\n if (this.autoPlace) {\n setWidth(this, this.width);\n }\n },\n getRoot: function getRoot() {\n var gui = this;\n while (gui.parent) {\n gui = gui.parent;\n }\n return gui;\n },\n getSaveObject: function getSaveObject() {\n var toReturn = this.load;\n toReturn.closed = this.closed;\n if (this.__rememberedObjects.length > 0) {\n toReturn.preset = this.preset;\n if (!toReturn.remembered) {\n toReturn.remembered = {};\n }\n toReturn.remembered[this.preset] = getCurrentPreset(this);\n }\n toReturn.folders = {};\n Common.each(this.__folders, function (element, key) {\n toReturn.folders[key] = element.getSaveObject();\n });\n return toReturn;\n },\n save: function save() {\n if (!this.load.remembered) {\n this.load.remembered = {};\n }\n this.load.remembered[this.preset] = getCurrentPreset(this);\n markPresetModified(this, false);\n this.saveToLocalStorageIfPossible();\n },\n saveAs: function saveAs(presetName) {\n if (!this.load.remembered) {\n this.load.remembered = {};\n this.load.remembered[DEFAULT_DEFAULT_PRESET_NAME] = getCurrentPreset(this, true);\n }\n this.load.remembered[presetName] = getCurrentPreset(this);\n this.preset = presetName;\n addPresetOption(this, presetName, true);\n this.saveToLocalStorageIfPossible();\n },\n revert: function revert(gui) {\n Common.each(this.__controllers, function (controller) {\n if (!this.getRoot().load.remembered) {\n controller.setValue(controller.initialValue);\n } else {\n recallSavedValue(gui || this.getRoot(), controller);\n }\n if (controller.__onFinishChange) {\n controller.__onFinishChange.call(controller, controller.getValue());\n }\n }, this);\n Common.each(this.__folders, function (folder) {\n folder.revert(folder);\n });\n if (!gui) {\n markPresetModified(this.getRoot(), false);\n }\n },\n listen: function listen(controller) {\n var init = this.__listening.length === 0;\n this.__listening.push(controller);\n if (init) {\n updateDisplays(this.__listening);\n }\n },\n updateDisplay: function updateDisplay() {\n Common.each(this.__controllers, function (controller) {\n controller.updateDisplay();\n });\n Common.each(this.__folders, function (folder) {\n folder.updateDisplay();\n });\n }\n});\nfunction addRow(gui, newDom, liBefore) {\n var li = document.createElement('li');\n if (newDom) {\n li.appendChild(newDom);\n }\n if (liBefore) {\n gui.__ul.insertBefore(li, liBefore);\n } else {\n gui.__ul.appendChild(li);\n }\n gui.onResize();\n return li;\n}\nfunction removeListeners(gui) {\n dom.unbind(window, 'resize', gui.__resizeHandler);\n if (gui.saveToLocalStorageIfPossible) {\n dom.unbind(window, 'unload', gui.saveToLocalStorageIfPossible);\n }\n}\nfunction markPresetModified(gui, modified) {\n var opt = gui.__preset_select[gui.__preset_select.selectedIndex];\n if (modified) {\n opt.innerHTML = opt.value + '*';\n } else {\n opt.innerHTML = opt.value;\n }\n}\nfunction augmentController(gui, li, controller) {\n controller.__li = li;\n controller.__gui = gui;\n Common.extend(controller, {\n options: function options(_options) {\n if (arguments.length > 1) {\n var nextSibling = controller.__li.nextElementSibling;\n controller.remove();\n return _add(gui, controller.object, controller.property, {\n before: nextSibling,\n factoryArgs: [Common.toArray(arguments)]\n });\n }\n if (Common.isArray(_options) || Common.isObject(_options)) {\n var _nextSibling = controller.__li.nextElementSibling;\n controller.remove();\n return _add(gui, controller.object, controller.property, {\n before: _nextSibling,\n factoryArgs: [_options]\n });\n }\n },\n name: function name(_name) {\n controller.__li.firstElementChild.firstElementChild.innerHTML = _name;\n return controller;\n },\n listen: function listen() {\n controller.__gui.listen(controller);\n return controller;\n },\n remove: function remove() {\n controller.__gui.remove(controller);\n return controller;\n }\n });\n if (controller instanceof NumberControllerSlider) {\n var box = new NumberControllerBox(controller.object, controller.property, { min: controller.__min, max: controller.__max, step: controller.__step });\n Common.each(['updateDisplay', 'onChange', 'onFinishChange', 'step', 'min', 'max'], function (method) {\n var pc = controller[method];\n var pb = box[method];\n controller[method] = box[method] = function () {\n var args = Array.prototype.slice.call(arguments);\n pb.apply(box, args);\n return pc.apply(controller, args);\n };\n });\n dom.addClass(li, 'has-slider');\n controller.domElement.insertBefore(box.domElement, controller.domElement.firstElementChild);\n } else if (controller instanceof NumberControllerBox) {\n var r = function r(returned) {\n if (Common.isNumber(controller.__min) && Common.isNumber(controller.__max)) {\n var oldName = controller.__li.firstElementChild.firstElementChild.innerHTML;\n var wasListening = controller.__gui.__listening.indexOf(controller) > -1;\n controller.remove();\n var newController = _add(gui, controller.object, controller.property, {\n before: controller.__li.nextElementSibling,\n factoryArgs: [controller.__min, controller.__max, controller.__step]\n });\n newController.name(oldName);\n if (wasListening) newController.listen();\n return newController;\n }\n return returned;\n };\n controller.min = Common.compose(r, controller.min);\n controller.max = Common.compose(r, controller.max);\n } else if (controller instanceof BooleanController) {\n dom.bind(li, 'click', function () {\n dom.fakeEvent(controller.__checkbox, 'click');\n });\n dom.bind(controller.__checkbox, 'click', function (e) {\n e.stopPropagation();\n });\n } else if (controller instanceof FunctionController) {\n dom.bind(li, 'click', function () {\n dom.fakeEvent(controller.__button, 'click');\n });\n dom.bind(li, 'mouseover', function () {\n dom.addClass(controller.__button, 'hover');\n });\n dom.bind(li, 'mouseout', function () {\n dom.removeClass(controller.__button, 'hover');\n });\n } else if (controller instanceof ColorController) {\n dom.addClass(li, 'color');\n controller.updateDisplay = Common.compose(function (val) {\n li.style.borderLeftColor = controller.__color.toString();\n return val;\n }, controller.updateDisplay);\n controller.updateDisplay();\n }\n controller.setValue = Common.compose(function (val) {\n if (gui.getRoot().__preset_select && controller.isModified()) {\n markPresetModified(gui.getRoot(), true);\n }\n return val;\n }, controller.setValue);\n}\nfunction recallSavedValue(gui, controller) {\n var root = gui.getRoot();\n var matchedIndex = root.__rememberedObjects.indexOf(controller.object);\n if (matchedIndex !== -1) {\n var controllerMap = root.__rememberedObjectIndecesToControllers[matchedIndex];\n if (controllerMap === undefined) {\n controllerMap = {};\n root.__rememberedObjectIndecesToControllers[matchedIndex] = controllerMap;\n }\n controllerMap[controller.property] = controller;\n if (root.load && root.load.remembered) {\n var presetMap = root.load.remembered;\n var preset = void 0;\n if (presetMap[gui.preset]) {\n preset = presetMap[gui.preset];\n } else if (presetMap[DEFAULT_DEFAULT_PRESET_NAME]) {\n preset = presetMap[DEFAULT_DEFAULT_PRESET_NAME];\n } else {\n return;\n }\n if (preset[matchedIndex] && preset[matchedIndex][controller.property] !== undefined) {\n var value = preset[matchedIndex][controller.property];\n controller.initialValue = value;\n controller.setValue(value);\n }\n }\n }\n}\nfunction _add(gui, object, property, params) {\n if (object[property] === undefined) {\n throw new Error('Object \"' + object + '\" has no property \"' + property + '\"');\n }\n var controller = void 0;\n if (params.color) {\n controller = new ColorController(object, property);\n } else {\n var factoryArgs = [object, property].concat(params.factoryArgs);\n controller = ControllerFactory.apply(gui, factoryArgs);\n }\n if (params.before instanceof Controller) {\n params.before = params.before.__li;\n }\n recallSavedValue(gui, controller);\n dom.addClass(controller.domElement, 'c');\n var name = document.createElement('span');\n dom.addClass(name, 'property-name');\n name.innerHTML = controller.property;\n var container = document.createElement('div');\n container.appendChild(name);\n container.appendChild(controller.domElement);\n var li = addRow(gui, container, params.before);\n dom.addClass(li, GUI.CLASS_CONTROLLER_ROW);\n if (controller instanceof ColorController) {\n dom.addClass(li, 'color');\n } else {\n dom.addClass(li, _typeof(controller.getValue()));\n }\n augmentController(gui, li, controller);\n gui.__controllers.push(controller);\n return controller;\n}\nfunction getLocalStorageHash(gui, key) {\n return document.location.href + '.' + key;\n}\nfunction addPresetOption(gui, name, setSelected) {\n var opt = document.createElement('option');\n opt.innerHTML = name;\n opt.value = name;\n gui.__preset_select.appendChild(opt);\n if (setSelected) {\n gui.__preset_select.selectedIndex = gui.__preset_select.length - 1;\n }\n}\nfunction showHideExplain(gui, explain) {\n explain.style.display = gui.useLocalStorage ? 'block' : 'none';\n}\nfunction addSaveMenu(gui) {\n var div = gui.__save_row = document.createElement('li');\n dom.addClass(gui.domElement, 'has-save');\n gui.__ul.insertBefore(div, gui.__ul.firstChild);\n dom.addClass(div, 'save-row');\n var gears = document.createElement('span');\n gears.innerHTML = ' ';\n dom.addClass(gears, 'button gears');\n var button = document.createElement('span');\n button.innerHTML = 'Save';\n dom.addClass(button, 'button');\n dom.addClass(button, 'save');\n var button2 = document.createElement('span');\n button2.innerHTML = 'New';\n dom.addClass(button2, 'button');\n dom.addClass(button2, 'save-as');\n var button3 = document.createElement('span');\n button3.innerHTML = 'Revert';\n dom.addClass(button3, 'button');\n dom.addClass(button3, 'revert');\n var select = gui.__preset_select = document.createElement('select');\n if (gui.load && gui.load.remembered) {\n Common.each(gui.load.remembered, function (value, key) {\n addPresetOption(gui, key, key === gui.preset);\n });\n } else {\n addPresetOption(gui, DEFAULT_DEFAULT_PRESET_NAME, false);\n }\n dom.bind(select, 'change', function () {\n for (var index = 0; index < gui.__preset_select.length; index++) {\n gui.__preset_select[index].innerHTML = gui.__preset_select[index].value;\n }\n gui.preset = this.value;\n });\n div.appendChild(select);\n div.appendChild(gears);\n div.appendChild(button);\n div.appendChild(button2);\n div.appendChild(button3);\n if (SUPPORTS_LOCAL_STORAGE) {\n var explain = document.getElementById('dg-local-explain');\n var localStorageCheckBox = document.getElementById('dg-local-storage');\n var saveLocally = document.getElementById('dg-save-locally');\n saveLocally.style.display = 'block';\n if (localStorage.getItem(getLocalStorageHash(gui, 'isLocal')) === 'true') {\n localStorageCheckBox.setAttribute('checked', 'checked');\n }\n showHideExplain(gui, explain);\n dom.bind(localStorageCheckBox, 'change', function () {\n gui.useLocalStorage = !gui.useLocalStorage;\n showHideExplain(gui, explain);\n });\n }\n var newConstructorTextArea = document.getElementById('dg-new-constructor');\n dom.bind(newConstructorTextArea, 'keydown', function (e) {\n if (e.metaKey && (e.which === 67 || e.keyCode === 67)) {\n SAVE_DIALOGUE.hide();\n }\n });\n dom.bind(gears, 'click', function () {\n newConstructorTextArea.innerHTML = JSON.stringify(gui.getSaveObject(), undefined, 2);\n SAVE_DIALOGUE.show();\n newConstructorTextArea.focus();\n newConstructorTextArea.select();\n });\n dom.bind(button, 'click', function () {\n gui.save();\n });\n dom.bind(button2, 'click', function () {\n var presetName = prompt('Enter a new preset name.');\n if (presetName) {\n gui.saveAs(presetName);\n }\n });\n dom.bind(button3, 'click', function () {\n gui.revert();\n });\n}\nfunction addResizeHandle(gui) {\n var pmouseX = void 0;\n gui.__resize_handle = document.createElement('div');\n Common.extend(gui.__resize_handle.style, {\n width: '6px',\n marginLeft: '-3px',\n height: '200px',\n cursor: 'ew-resize',\n position: 'absolute'\n });\n function drag(e) {\n e.preventDefault();\n gui.width += pmouseX - e.clientX;\n gui.onResize();\n pmouseX = e.clientX;\n return false;\n }\n function dragStop() {\n dom.removeClass(gui.__closeButton, GUI.CLASS_DRAG);\n dom.unbind(window, 'mousemove', drag);\n dom.unbind(window, 'mouseup', dragStop);\n }\n function dragStart(e) {\n e.preventDefault();\n pmouseX = e.clientX;\n dom.addClass(gui.__closeButton, GUI.CLASS_DRAG);\n dom.bind(window, 'mousemove', drag);\n dom.bind(window, 'mouseup', dragStop);\n return false;\n }\n dom.bind(gui.__resize_handle, 'mousedown', dragStart);\n dom.bind(gui.__closeButton, 'mousedown', dragStart);\n gui.domElement.insertBefore(gui.__resize_handle, gui.domElement.firstElementChild);\n}\nfunction setWidth(gui, w) {\n gui.domElement.style.width = w + 'px';\n if (gui.__save_row && gui.autoPlace) {\n gui.__save_row.style.width = w + 'px';\n }\n if (gui.__closeButton) {\n gui.__closeButton.style.width = w + 'px';\n }\n}\nfunction getCurrentPreset(gui, useInitialValues) {\n var toReturn = {};\n Common.each(gui.__rememberedObjects, function (val, index) {\n var savedValues = {};\n var controllerMap = gui.__rememberedObjectIndecesToControllers[index];\n Common.each(controllerMap, function (controller, property) {\n savedValues[property] = useInitialValues ? controller.initialValue : controller.getValue();\n });\n toReturn[index] = savedValues;\n });\n return toReturn;\n}\nfunction setPresetSelectIndex(gui) {\n for (var index = 0; index < gui.__preset_select.length; index++) {\n if (gui.__preset_select[index].value === gui.preset) {\n gui.__preset_select.selectedIndex = index;\n }\n }\n}\nfunction updateDisplays(controllerArray) {\n if (controllerArray.length !== 0) {\n requestAnimationFrame$1.call(window, function () {\n updateDisplays(controllerArray);\n });\n }\n Common.each(controllerArray, function (c) {\n c.updateDisplay();\n });\n}\n\nvar color = {\n Color: Color,\n math: ColorMath,\n interpret: interpret\n};\nvar controllers = {\n Controller: Controller,\n BooleanController: BooleanController,\n OptionController: OptionController,\n StringController: StringController,\n NumberController: NumberController,\n NumberControllerBox: NumberControllerBox,\n NumberControllerSlider: NumberControllerSlider,\n FunctionController: FunctionController,\n ColorController: ColorController\n};\nvar dom$1 = { dom: dom };\nvar gui = { GUI: GUI };\nvar GUI$1 = GUI;\nvar index = {\n color: color,\n controllers: controllers,\n dom: dom$1,\n gui: gui,\n GUI: GUI$1\n};\n\nexport { color, controllers, dom$1 as dom, gui, GUI$1 as GUI };\nexport default index;\n"],"x_google_ignoreList":[0]} \ No newline at end of file diff --git a/docs/274.7d4546dc06404ec9.js b/docs/274.2cd013e8485931ac.js similarity index 78% rename from docs/274.7d4546dc06404ec9.js rename to docs/274.2cd013e8485931ac.js index e1692f06b..4b12b8a49 100644 --- a/docs/274.7d4546dc06404ec9.js +++ b/docs/274.2cd013e8485931ac.js @@ -1,2 +1,2 @@ -"use strict";(self.webpackChunkphoenix_app=self.webpackChunkphoenix_app||[]).push([[274],{6274:(b,y,p)=>{p.r(y),p.d(y,{TGraphPolarPainter:()=>M,TGraphPolargramPainter:()=>x});var P=p(4788),g=p(9542),u=p(2253),w=p(3675),_=p(6458),E=p(6367),T=p(49),v=p(6116);class x extends _.tK{constructor(t,e){super(t,e),this.$polargram=!0,this.zoom_rmin=this.zoom_rmax=0}translate(t,e,a){let i=this.r(e),r=i/this.szx*this.szy,s={x:i*Math.cos(-t-this.angle),y:r*Math.sin(-t-this.angle),rx:i,ry:r};return a||(s.x=Math.round(s.x),s.y=Math.round(s.y),s.rx=Math.round(s.rx),s.ry=Math.round(s.ry)),s}format(t){return t===Math.round(t)?t.toString():this.ndig>10?t.toExponential(4):t.toFixed(this.ndig>0?this.ndig:0)}axisAsText(t,e){return"r"==t?e===Math.round(e)?e.toString():this.ndig>10?e.toExponential(4):e.toFixed(this.ndig+2):(e*=180/Math.PI)===Math.round(e)?e.toString():e.toFixed(1)}getFrameRect(){let t=this.getPadPainter(),e=t.getRootPad(!0),a=t.getPadWidth(),i=t.getPadHeight(),r={};return e?(r.szx=Math.round(Math.max(.1,.5-Math.max(e.fLeftMargin,e.fRightMargin))*a),r.szy=Math.round(Math.max(.1,.5-Math.max(e.fBottomMargin,e.fTopMargin))*i)):(r.szx=Math.round(.5*a),r.szy=Math.round(.5*i)),r.width=2*r.szx,r.height=2*r.szy,r.x=Math.round(a/2-r.szx),r.y=Math.round(i/2-r.szy),r.hint_delta_x=r.szx,r.hint_delta_y=r.szy,r.transform=`translate(${r.x},${r.y})`,r}mouseEvent(t,e){let i=this.getLayerSvg("primitives_layer").select(".interactive_ellipse");if(i.empty())return;let r=null;if("leave"!==t){let s=(0,u.cx)(e,i.node());r={x:s[0],y:s[1],touch:!1}}this.processFrameTooltipEvent(r)}mouseWheel(t){t.stopPropagation(),t.preventDefault(),this.processFrameTooltipEvent(null);let e=this.getObject();if(!e)return;let a=t.wheelDelta?-t.wheelDelta:t.deltaY||t.detail;if(!a)return;a=a<0?-.2:.2;let i=this.scale_rmin,r=this.scale_rmax;r+=a*(r-i),(ie.fRwrmax)&&(i=r=0),(this.zoom_rmin!=i||this.zoom_rmax!=r)&&(this.zoom_rmin=i,this.zoom_rmax=r,this.redrawPad())}redraw(){if(!this.isMainPainter())return;let t=this.getObject(),e=this.getPadPainter().getFrameRect();this.createG(),this.draw_g.attr("transform",`translate(${Math.round(e.x+e.width/2)},${Math.round(e.y+e.height/2)})`),this.szx=e.szx,this.szy=e.szy,this.scale_rmin=t.fRwrmin,this.scale_rmax=t.fRwrmax,this.zoom_rmin!=this.zoom_rmax&&(this.scale_rmin=this.zoom_rmin,this.scale_rmax=this.zoom_rmax),this.r=(0,u.BY)().domain([this.scale_rmin,this.scale_rmax]).range([0,this.szx]),this.angle=t.fAxisAngle||0;let a=this.r.ticks(5),i=Math.floor(t.fNdivRad%1e4/100);this.createAttLine({attr:t}),this.gridatt||(this.gridatt=new E.rE({color:t.fLineColor,style:2,width:1}));let r=Math.abs(t.fRwrmax-t.fRwrmin);this.ndig=r<=0?-3:Math.round(Math.log10(a.length/r));let s=[],l=0;for(;l=0){if(++this.ndig>10)break;s=[],l=0}else s.push(n),l++}let f=!1;a[a.length-1]1&&(nthis.scale_rmax)break;d=this.r(z),h=d/this.szx*this.szy,this.draw_g.append("ellipse").attr("cx",0).attr("cy",0).attr("rx",Math.round(d)).attr("ry",Math.round(h)).style("fill","none").call(this.gridatt.func)}}}let o=t.fNdivPol%100;return 8!==o&&3!==o&&(o=8),this.finishTextDrawing().then(()=>{let n=Math.round(t.fPolarTextSize*this.szy*2);this.startTextDrawing(t.fPolarLabelFont,n),s=8==o?["0","#frac{#pi}{4}","#frac{#pi}{2}","#frac{3#pi}{4}","#pi","#frac{5#pi}{4}","#frac{3#pi}{2}","#frac{7#pi}{4}"]:["0","#frac{2#pi}{3}","#frac{4#pi}{3}"];let d=[12,11,21,31,32,33,23,13];for(let h=0;h{if(i=Math.floor(t.fNdivPol%1e4/100),i>1)for(let h=0;hthis.mouseEvent("enter",h)).on("mousemove",h=>this.mouseEvent("move",h)).on("mouseleave",h=>this.mouseEvent("leave",h))),d.attr("rx",this.szx).attr("ry",this.szy),(0,u.Ys)(d.node().parentNode).attr("transform",this.draw_g.attr("transform")),g.settings.Zooming&&g.settings.ZoomWheel&&d.on("wheel",h=>this.mouseWheel(h))})}static draw(t,e){return(0,P.Z)(function*(){let a=(0,_.SO)(t);if(a){if(a.getObject()===e)return a;throw Error("Cannot superimpose TGraphPolargram with any other drawings")}let i=new x(t,e);return(0,T.ensureTCanvas)(i,!1).then(()=>(i.setAsMainPainter(),i.redraw())).then(()=>i)})()}}class M extends _.tK{redraw(){this.drawGraphPolar()}decodeOptions(t){let e=new w.pc(t||"L");this.options||(this.options={}),Object.assign(this.options,{mark:e.check("P"),err:e.check("E"),fill:e.check("F"),line:e.check("L"),curve:e.check("C")}),this.storeDrawOpt(t)}drawGraphPolar(){let t=this.getObject(),e=this.getMainPainter();if(!t||!e?.$polargram)return;this.options.mark&&this.createAttMarker({attr:t}),(this.options.err||this.options.line||this.options.curve)&&this.createAttLine({attr:t}),this.options.fill&&this.createAttFill({attr:t}),this.createG(),this.draw_g.attr("transform",e.draw_g.attr("transform"));let a="",i="",r="",s=[];for(let l=0;le.scale_rmax)continue;if(this.options.err){let o=e.translate(t.fX[l],t.fY[l]-t.fEY[l]),n=e.translate(t.fX[l],t.fY[l]+t.fEY[l]);i+=`M${o.x},${o.y}L${n.x},${n.y}`,o=e.translate(t.fX[l]+t.fEX[l],t.fY[l]),n=e.translate(t.fX[l]-t.fEX[l],t.fY[l]),i+=`M${o.x},${o.y}A${n.rx},${n.ry},0,0,1,${n.x},${n.y}`}let f=e.translate(t.fX[l],t.fY[l]);this.options.mark&&(a+=this.markeratt.create(f.x,f.y)),(this.options.line||this.options.fill)&&(r+=(r?"L":"M")+f.x+","+f.y),this.options.curve&&(f.grx=f.x,f.gry=f.y,s.push(f))}this.options.fill&&r&&this.draw_g.append("svg:path").attr("d",r+"Z").call(this.fillatt.func),this.options.line&&r&&this.draw_g.append("svg:path").attr("d",r).style("fill","none").call(this.lineatt.func),this.options.curve&&s.length&&this.draw_g.append("svg:path").attr("d",(0,w.Cq)("bezier",s).path).style("fill","none").call(this.lineatt.func),i&&this.draw_g.append("svg:path").attr("d",i).style("fill","none").call(this.lineatt.func),a&&this.draw_g.append("svg:path").attr("d",a).call(this.markeratt.func)}createPolargram(){let t=(0,g.create)("TGraphPolargram"),e=this.getObject(),a=e.fY[0]||0,i=a;for(let r=0;rl)return null;let f={name:this.getObject().fName,title:this.getObject().fTitle,x:s.x,y:s.y,color1:this.markeratt&&this.markeratt.used?this.markeratt.color:this.lineatt.color,exact:Math.sqrt(i)<4,lines:[this.getObjectHint()],binindx:r,menu_dist:l,radius:l};return f.lines.push("r = "+a.axisAsText("r",e.fY[r])),f.lines.push("phi = "+a.axisAsText("phi",e.fX[r])),e.fEY&&e.fEY[r]&&f.lines.push("error r = "+a.axisAsText("r",e.fEY[r])),e.fEX&&e.fEX[r]&&f.lines.push("error phi = "+a.axisAsText("phi",e.fEX[r])),f}showTooltip(t){if(!this.draw_g)return;let e=this.draw_g.select(".tooltip_bin");t?(e.empty()&&(e=this.draw_g.append("svg:ellipse").attr("class","tooltip_bin").style("pointer-events","none")),t.changed=e.property("current_bin")!==t.binindx,t.changed&&e.attr("cx",t.x).attr("cy",t.y).attr("rx",Math.round(t.radius)).attr("ry",Math.round(t.radius)).style("fill","none").style("stroke",t.color1).property("current_bin",t.binindx)):e.remove()}processTooltipEvent(t){let e=this.extractTooltip(t);return(!t||!t.disabled)&&this.showTooltip(e),e}static draw(t,e,a){return(0,P.Z)(function*(){let i=new M(t,e);i.decodeOptions(a);let r=i.getMainPainter();if(r&&!r.$polargram)return console.error("Cannot superimpose TGraphPolar with plain histograms"),null;let s=Promise.resolve(null);return r||(e.fPolargram||(e.fPolargram=i.createPolargram()),s=x.draw(t,e.fPolargram)),s.then(()=>(i.addToPadPrimitives(),i.drawGraphPolar(),i))})()}}}}]); -//# sourceMappingURL=274.7d4546dc06404ec9.js.map \ No newline at end of file +"use strict";(self.webpackChunkphoenix_app=self.webpackChunkphoenix_app||[]).push([[274],{6274:(b,y,p)=>{p.r(y),p.d(y,{TGraphPolarPainter:()=>M,TGraphPolargramPainter:()=>x});var P=p(5835),g=p(9542),u=p(2253),w=p(3675),_=p(6458),E=p(6367),T=p(49),v=p(6116);class x extends _.tK{constructor(t,e){super(t,e),this.$polargram=!0,this.zoom_rmin=this.zoom_rmax=0}translate(t,e,a){let i=this.r(e),r=i/this.szx*this.szy,s={x:i*Math.cos(-t-this.angle),y:r*Math.sin(-t-this.angle),rx:i,ry:r};return a||(s.x=Math.round(s.x),s.y=Math.round(s.y),s.rx=Math.round(s.rx),s.ry=Math.round(s.ry)),s}format(t){return t===Math.round(t)?t.toString():this.ndig>10?t.toExponential(4):t.toFixed(this.ndig>0?this.ndig:0)}axisAsText(t,e){return"r"==t?e===Math.round(e)?e.toString():this.ndig>10?e.toExponential(4):e.toFixed(this.ndig+2):(e*=180/Math.PI)===Math.round(e)?e.toString():e.toFixed(1)}getFrameRect(){let t=this.getPadPainter(),e=t.getRootPad(!0),a=t.getPadWidth(),i=t.getPadHeight(),r={};return e?(r.szx=Math.round(Math.max(.1,.5-Math.max(e.fLeftMargin,e.fRightMargin))*a),r.szy=Math.round(Math.max(.1,.5-Math.max(e.fBottomMargin,e.fTopMargin))*i)):(r.szx=Math.round(.5*a),r.szy=Math.round(.5*i)),r.width=2*r.szx,r.height=2*r.szy,r.x=Math.round(a/2-r.szx),r.y=Math.round(i/2-r.szy),r.hint_delta_x=r.szx,r.hint_delta_y=r.szy,r.transform=`translate(${r.x},${r.y})`,r}mouseEvent(t,e){let i=this.getLayerSvg("primitives_layer").select(".interactive_ellipse");if(i.empty())return;let r=null;if("leave"!==t){let s=(0,u.cx)(e,i.node());r={x:s[0],y:s[1],touch:!1}}this.processFrameTooltipEvent(r)}mouseWheel(t){t.stopPropagation(),t.preventDefault(),this.processFrameTooltipEvent(null);let e=this.getObject();if(!e)return;let a=t.wheelDelta?-t.wheelDelta:t.deltaY||t.detail;if(!a)return;a=a<0?-.2:.2;let i=this.scale_rmin,r=this.scale_rmax;r+=a*(r-i),(ie.fRwrmax)&&(i=r=0),(this.zoom_rmin!=i||this.zoom_rmax!=r)&&(this.zoom_rmin=i,this.zoom_rmax=r,this.redrawPad())}redraw(){if(!this.isMainPainter())return;let t=this.getObject(),e=this.getPadPainter().getFrameRect();this.createG(),this.draw_g.attr("transform",`translate(${Math.round(e.x+e.width/2)},${Math.round(e.y+e.height/2)})`),this.szx=e.szx,this.szy=e.szy,this.scale_rmin=t.fRwrmin,this.scale_rmax=t.fRwrmax,this.zoom_rmin!=this.zoom_rmax&&(this.scale_rmin=this.zoom_rmin,this.scale_rmax=this.zoom_rmax),this.r=(0,u.BY)().domain([this.scale_rmin,this.scale_rmax]).range([0,this.szx]),this.angle=t.fAxisAngle||0;let a=this.r.ticks(5),i=Math.floor(t.fNdivRad%1e4/100);this.createAttLine({attr:t}),this.gridatt||(this.gridatt=new E.rE({color:t.fLineColor,style:2,width:1}));let r=Math.abs(t.fRwrmax-t.fRwrmin);this.ndig=r<=0?-3:Math.round(Math.log10(a.length/r));let s=[],l=0;for(;l=0){if(++this.ndig>10)break;s=[],l=0}else s.push(n),l++}let f=!1;a[a.length-1]1&&(nthis.scale_rmax)break;d=this.r(z),o=d/this.szx*this.szy,this.draw_g.append("ellipse").attr("cx",0).attr("cy",0).attr("rx",Math.round(d)).attr("ry",Math.round(o)).style("fill","none").call(this.gridatt.func)}}}let h=t.fNdivPol%100;return 8!==h&&3!==h&&(h=8),this.finishTextDrawing().then(()=>{let n=Math.round(t.fPolarTextSize*this.szy*2);this.startTextDrawing(t.fPolarLabelFont,n),s=8==h?["0","#frac{#pi}{4}","#frac{#pi}{2}","#frac{3#pi}{4}","#pi","#frac{5#pi}{4}","#frac{3#pi}{2}","#frac{7#pi}{4}"]:["0","#frac{2#pi}{3}","#frac{4#pi}{3}"];let d=[12,11,21,31,32,33,23,13];for(let o=0;o{if(i=Math.floor(t.fNdivPol%1e4/100),i>1)for(let o=0;othis.mouseEvent("enter",o)).on("mousemove",o=>this.mouseEvent("move",o)).on("mouseleave",o=>this.mouseEvent("leave",o))),d.attr("rx",this.szx).attr("ry",this.szy),(0,u.Ys)(d.node().parentNode).attr("transform",this.draw_g.attr("transform")),g.settings.Zooming&&g.settings.ZoomWheel&&d.on("wheel",o=>this.mouseWheel(o))})}static draw(t,e){return(0,P.Z)(function*(){let a=(0,_.SO)(t);if(a){if(a.getObject()===e)return a;throw Error("Cannot superimpose TGraphPolargram with any other drawings")}let i=new x(t,e);return(0,T.ensureTCanvas)(i,!1).then(()=>(i.setAsMainPainter(),i.redraw())).then(()=>i)})()}}class M extends _.tK{redraw(){this.drawGraphPolar()}decodeOptions(t){let e=new w.pc(t||"L");this.options||(this.options={}),Object.assign(this.options,{mark:e.check("P"),err:e.check("E"),fill:e.check("F"),line:e.check("L"),curve:e.check("C")}),this.storeDrawOpt(t)}drawGraphPolar(){let t=this.getObject(),e=this.getMainPainter();if(!t||!e?.$polargram)return;this.options.mark&&this.createAttMarker({attr:t}),(this.options.err||this.options.line||this.options.curve)&&this.createAttLine({attr:t}),this.options.fill&&this.createAttFill({attr:t}),this.createG(),this.draw_g.attr("transform",e.draw_g.attr("transform"));let a="",i="",r="",s=[];for(let l=0;le.scale_rmax)continue;if(this.options.err){let h=e.translate(t.fX[l],t.fY[l]-t.fEY[l]),n=e.translate(t.fX[l],t.fY[l]+t.fEY[l]);i+=`M${h.x},${h.y}L${n.x},${n.y}`,h=e.translate(t.fX[l]+t.fEX[l],t.fY[l]),n=e.translate(t.fX[l]-t.fEX[l],t.fY[l]),i+=`M${h.x},${h.y}A${n.rx},${n.ry},0,0,1,${n.x},${n.y}`}let f=e.translate(t.fX[l],t.fY[l]);this.options.mark&&(a+=this.markeratt.create(f.x,f.y)),(this.options.line||this.options.fill)&&(r+=(r?"L":"M")+f.x+","+f.y),this.options.curve&&(f.grx=f.x,f.gry=f.y,s.push(f))}this.options.fill&&r&&this.draw_g.append("svg:path").attr("d",r+"Z").call(this.fillatt.func),this.options.line&&r&&this.draw_g.append("svg:path").attr("d",r).style("fill","none").call(this.lineatt.func),this.options.curve&&s.length&&this.draw_g.append("svg:path").attr("d",(0,w.Cq)("bezier",s).path).style("fill","none").call(this.lineatt.func),i&&this.draw_g.append("svg:path").attr("d",i).style("fill","none").call(this.lineatt.func),a&&this.draw_g.append("svg:path").attr("d",a).call(this.markeratt.func)}createPolargram(){let t=(0,g.create)("TGraphPolargram"),e=this.getObject(),a=e.fY[0]||0,i=a;for(let r=0;rl)return null;let f={name:this.getObject().fName,title:this.getObject().fTitle,x:s.x,y:s.y,color1:this.markeratt&&this.markeratt.used?this.markeratt.color:this.lineatt.color,exact:Math.sqrt(i)<4,lines:[this.getObjectHint()],binindx:r,menu_dist:l,radius:l};return f.lines.push("r = "+a.axisAsText("r",e.fY[r])),f.lines.push("phi = "+a.axisAsText("phi",e.fX[r])),e.fEY&&e.fEY[r]&&f.lines.push("error r = "+a.axisAsText("r",e.fEY[r])),e.fEX&&e.fEX[r]&&f.lines.push("error phi = "+a.axisAsText("phi",e.fEX[r])),f}showTooltip(t){if(!this.draw_g)return;let e=this.draw_g.select(".tooltip_bin");t?(e.empty()&&(e=this.draw_g.append("svg:ellipse").attr("class","tooltip_bin").style("pointer-events","none")),t.changed=e.property("current_bin")!==t.binindx,t.changed&&e.attr("cx",t.x).attr("cy",t.y).attr("rx",Math.round(t.radius)).attr("ry",Math.round(t.radius)).style("fill","none").style("stroke",t.color1).property("current_bin",t.binindx)):e.remove()}processTooltipEvent(t){let e=this.extractTooltip(t);return(!t||!t.disabled)&&this.showTooltip(e),e}static draw(t,e,a){return(0,P.Z)(function*(){let i=new M(t,e);i.decodeOptions(a);let r=i.getMainPainter();if(r&&!r.$polargram)return console.error("Cannot superimpose TGraphPolar with plain histograms"),null;let s=Promise.resolve(null);return r||(e.fPolargram||(e.fPolargram=i.createPolargram()),s=x.draw(t,e.fPolargram)),s.then(()=>(i.addToPadPrimitives(),i.drawGraphPolar(),i))})()}}}}]); +//# sourceMappingURL=274.2cd013e8485931ac.js.map \ No newline at end of file diff --git a/docs/274.2cd013e8485931ac.js.map b/docs/274.2cd013e8485931ac.js.map new file mode 100644 index 000000000..fa7b3932f --- /dev/null +++ b/docs/274.2cd013e8485931ac.js.map @@ -0,0 +1 @@ +{"version":3,"file":"274.2cd013e8485931ac.js","mappings":"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","names":["TGraphPolargramPainter","ObjectPainter","constructor","dom","polargram","super","this","$polargram","zoom_rmin","zoom_rmax","translate","angle","radius","keep_float","_rx","r","_ry","szx","szy","pos","x","Math","cos","y","sin","rx","ry","round","format","toString","ndig","toExponential","toFixed","axisAsText","axis","value","PI","getFrameRect","pp","getPadPainter","pad","getRootPad","w","getPadWidth","h","getPadHeight","rect","max","fLeftMargin","fRightMargin","fBottomMargin","fTopMargin","width","height","hint_delta_x","hint_delta_y","transform","mouseEvent","kind","evnt","interactive","getLayerSvg","select","empty","pnt","d3_pointer","node","touch","processFrameTooltipEvent","mouseWheel","stopPropagation","preventDefault","polar","getObject","delta","wheelDelta","deltaY","detail","rmin","scale_rmin","rmax","scale_rmax","fRwrmin","fRwrmax","redrawPad","redraw","isMainPainter","createG","draw_g","attr","scaleLinear","domain","range","fAxisAngle","ticks","nminor","floor","fNdivRad","createAttLine","gridatt","TAttLineHandler","color","fLineColor","style","abs","log10","length","lbls","indx","lbl","indexOf","push","exclude_last","startTextDrawing","fRadialLabelFont","fRadialTextSize","n","append","call","lineatt","func","drawText","align","text","getColor","fRadialLabelColor","latex","dr","nn","gridr","nmajor","fNdivPol","finishTextDrawing","then","fontsize","fPolarTextSize","fPolarLabelFont","aligns","aindx","fPolarLabelColor","isBatchMode","TooltipHandler","layer","classed","on","d3_select","parentNode","settings","static","main","getElementMainPainter","Error","painter","ensureTCanvas","setAsMainPainter","TGraphPolarPainter","drawGraphPolar","decodeOptions","opt","d","DrawOptions","options","Object","assign","mark","check","err","fill","line","curve","storeDrawOpt","graph","getMainPainter","createAttMarker","createAttFill","mpath","epath","lpath","bins","fNpoints","fY","pos1","fX","fEY","pos2","fEX","markeratt","create","grx","gry","fillatt","buildSvgPath","path","createPolargram","gr","min","extractTooltip","best_dist2","bestindx","bestpos","dist2","match_distance","used","getFullSize","sqrt","res","name","fName","title","fTitle","color1","exact","lines","getObjectHint","binindx","menu_dist","showTooltip","hint","ttcircle","changed","property","remove","processTooltipEvent","disabled","console","error","pr","Promise","resolve","fPolargram","draw","addToPadPrimitives"],"sourceRoot":"webpack:///","sources":["../node_modules/jsroot/modules/draw/TGraphPolarPainter.mjs"],"sourcesContent":["import { settings, create, isBatchMode } from '../core.mjs';\nimport { scaleLinear, select as d3_select, pointer as d3_pointer } from '../d3.mjs';\nimport { DrawOptions, buildSvgPath } from '../base/BasePainter.mjs';\nimport { ObjectPainter, getElementMainPainter } from '../base/ObjectPainter.mjs';\nimport { TAttLineHandler } from '../base/TAttLineHandler.mjs';\nimport { ensureTCanvas } from '../gpad/TCanvasPainter.mjs';\nimport { TooltipHandler } from '../gpad/TFramePainter.mjs';\n\n\n/**\n * @summary Painter for TGraphPolargram objects.\n *\n * @private */\n\nclass TGraphPolargramPainter extends ObjectPainter {\n\n /** @summary Create painter\n * @param {object|string} dom - DOM element for drawing or element id\n * @param {object} polargram - object to draw */\n constructor(dom, polargram) {\n super(dom, polargram);\n this.$polargram = true; // indicate that this is polargram\n this.zoom_rmin = this.zoom_rmax = 0;\n }\n\n /** @summary Translate coordinates */\n translate(angle, radius, keep_float) {\n let _rx = this.r(radius), _ry = _rx/this.szx*this.szy,\n pos = {\n x: _rx * Math.cos(-angle - this.angle),\n y: _ry * Math.sin(-angle - this.angle),\n rx: _rx,\n ry: _ry\n };\n\n if (!keep_float) {\n pos.x = Math.round(pos.x);\n pos.y = Math.round(pos.y);\n pos.rx = Math.round(pos.rx);\n pos.ry = Math.round(pos.ry);\n }\n return pos;\n }\n\n /** @summary format label for radius ticks */\n format(radius) {\n\n if (radius === Math.round(radius)) return radius.toString();\n if (this.ndig > 10) return radius.toExponential(4);\n\n return radius.toFixed((this.ndig > 0) ? this.ndig : 0);\n }\n\n /** @summary Convert axis values to text */\n axisAsText(axis, value) {\n\n if (axis == 'r') {\n if (value === Math.round(value)) return value.toString();\n if (this.ndig>10) return value.toExponential(4);\n return value.toFixed(this.ndig+2);\n }\n\n value *= 180/Math.PI;\n return (value === Math.round(value)) ? value.toString() : value.toFixed(1);\n }\n\n /** @summary Returns coordinate of frame - without using frame itself */\n getFrameRect() {\n let pp = this.getPadPainter(),\n pad = pp.getRootPad(true),\n w = pp.getPadWidth(),\n h = pp.getPadHeight(),\n rect = {};\n\n if (pad) {\n rect.szx = Math.round(Math.max(0.1, 0.5 - Math.max(pad.fLeftMargin, pad.fRightMargin))*w);\n rect.szy = Math.round(Math.max(0.1, 0.5 - Math.max(pad.fBottomMargin, pad.fTopMargin))*h);\n } else {\n rect.szx = Math.round(0.5*w);\n rect.szy = Math.round(0.5*h);\n }\n\n rect.width = 2*rect.szx;\n rect.height = 2*rect.szy;\n rect.x = Math.round(w/2 - rect.szx);\n rect.y = Math.round(h/2 - rect.szy);\n\n rect.hint_delta_x = rect.szx;\n rect.hint_delta_y = rect.szy;\n\n rect.transform = `translate(${rect.x},${rect.y})`;\n\n return rect;\n }\n\n /** @summary Process mouse event */\n mouseEvent(kind, evnt) {\n let layer = this.getLayerSvg('primitives_layer'),\n interactive = layer.select('.interactive_ellipse');\n if (interactive.empty()) return;\n\n let pnt = null;\n\n if (kind !== 'leave') {\n let pos = d3_pointer(evnt, interactive.node());\n pnt = { x: pos[0], y: pos[1], touch: false };\n }\n\n this.processFrameTooltipEvent(pnt);\n }\n\n /** @summary Process mouse wheel event */\n mouseWheel(evnt) {\n evnt.stopPropagation();\n evnt.preventDefault();\n\n this.processFrameTooltipEvent(null); // remove all tooltips\n\n let polar = this.getObject();\n\n if (!polar) return;\n\n let delta = evnt.wheelDelta ? -evnt.wheelDelta : (evnt.deltaY || evnt.detail);\n if (!delta) return;\n\n delta = (delta < 0) ? -0.2 : 0.2;\n\n let rmin = this.scale_rmin, rmax = this.scale_rmax, range = rmax - rmin;\n\n // rmin -= delta*range;\n rmax += delta*range;\n\n if ((rminpolar.fRwrmax)) rmin = rmax = 0;\n\n if ((this.zoom_rmin != rmin) || (this.zoom_rmax != rmax)) {\n this.zoom_rmin = rmin;\n this.zoom_rmax = rmax;\n this.redrawPad();\n }\n }\n\n /** @summary Redraw polargram */\n redraw() {\n if (!this.isMainPainter()) return;\n\n let polar = this.getObject(),\n rect = this.getPadPainter().getFrameRect();\n\n this.createG();\n\n this.draw_g.attr('transform', `translate(${Math.round(rect.x + rect.width/2)},${Math.round(rect.y + rect.height/2)})`);\n this.szx = rect.szx;\n this.szy = rect.szy;\n\n this.scale_rmin = polar.fRwrmin;\n this.scale_rmax = polar.fRwrmax;\n if (this.zoom_rmin != this.zoom_rmax) {\n this.scale_rmin = this.zoom_rmin;\n this.scale_rmax = this.zoom_rmax;\n }\n\n this.r = scaleLinear().domain([this.scale_rmin, this.scale_rmax]).range([ 0, this.szx ]);\n this.angle = polar.fAxisAngle || 0;\n\n let ticks = this.r.ticks(5),\n nminor = Math.floor((polar.fNdivRad % 10000) / 100);\n\n this.createAttLine({ attr: polar });\n if (!this.gridatt) this.gridatt = new TAttLineHandler({ color: polar.fLineColor, style: 2, width: 1 });\n\n let range = Math.abs(polar.fRwrmax - polar.fRwrmin);\n this.ndig = (range <= 0) ? -3 : Math.round(Math.log10(ticks.length / range));\n\n // verify that all radius labels are unique\n let lbls = [], indx = 0;\n while (indx= 0) {\n if (++this.ndig>10) break;\n lbls = []; indx = 0; continue;\n }\n lbls.push(lbl);\n indx++;\n }\n\n let exclude_last = false;\n\n if ((ticks[ticks.length-1] < polar.fRwrmax) && (this.zoom_rmin == this.zoom_rmax)) {\n ticks.push(polar.fRwrmax);\n exclude_last = true;\n }\n\n this.startTextDrawing(polar.fRadialLabelFont, Math.round(polar.fRadialTextSize * this.szy * 2));\n\n for (let n = 0; n < ticks.length; ++n) {\n let rx = this.r(ticks[n]), ry = rx/this.szx*this.szy;\n this.draw_g.append('ellipse')\n .attr('cx',0)\n .attr('cy',0)\n .attr('rx',Math.round(rx))\n .attr('ry',Math.round(ry))\n .style('fill', 'none')\n .call(this.lineatt.func);\n\n if ((n < ticks.length-1) || !exclude_last)\n this.drawText({ align: 23, x: Math.round(rx), y: Math.round(polar.fRadialTextSize * this.szy * 0.5),\n text: this.format(ticks[n]), color: this.getColor(polar.fRadialLabelColor), latex: 0 });\n\n if ((nminor>1) && ((n < ticks.length-1) || !exclude_last)) {\n let dr = (ticks[1] - ticks[0]) / nminor;\n for (let nn = 1; nn < nminor; ++nn) {\n let gridr = ticks[n] + dr*nn;\n if (gridr > this.scale_rmax) break;\n rx = this.r(gridr); ry = rx/this.szx*this.szy;\n this.draw_g.append('ellipse')\n .attr('cx',0)\n .attr('cy',0)\n .attr('rx',Math.round(rx))\n .attr('ry',Math.round(ry))\n .style('fill', 'none')\n .call(this.gridatt.func);\n }\n }\n }\n\n let nmajor = polar.fNdivPol % 100;\n if ((nmajor !== 8) && (nmajor !== 3)) nmajor = 8;\n\n return this.finishTextDrawing().then(() => {\n\n let fontsize = Math.round(polar.fPolarTextSize * this.szy * 2);\n this.startTextDrawing(polar.fPolarLabelFont, fontsize);\n\n lbls = (nmajor==8) ? ['0', '#frac{#pi}{4}', '#frac{#pi}{2}', '#frac{3#pi}{4}', '#pi', '#frac{5#pi}{4}', '#frac{3#pi}{2}', '#frac{7#pi}{4}'] : ['0', '#frac{2#pi}{3}', '#frac{4#pi}{3}'];\n let aligns = [12, 11, 21, 31, 32, 33, 23, 13];\n\n for (let n = 0; n < nmajor; ++n) {\n let angle = -n*2*Math.PI/nmajor - this.angle;\n this.draw_g.append('svg:path')\n .attr('d',`M0,0L${Math.round(this.szx*Math.cos(angle))},${Math.round(this.szy*Math.sin(angle))}`)\n .call(this.lineatt.func);\n\n let aindx = Math.round(16 -angle/Math.PI*4) % 8; // index in align table, here absolute angle is important\n\n this.drawText({ align: aligns[aindx],\n x: Math.round((this.szx+fontsize)*Math.cos(angle)),\n y: Math.round((this.szy + fontsize/this.szx*this.szy)*(Math.sin(angle))),\n text: lbls[n],\n color: this.getColor(polar.fPolarLabelColor), latex: 1 });\n }\n\n return this.finishTextDrawing();\n }).then(() => {\n\n nminor = Math.floor((polar.fNdivPol % 10000) / 100);\n\n if (nminor > 1)\n for (let n = 0; n < nmajor*nminor; ++n) {\n if (n % nminor === 0) continue;\n let angle = -n*2*Math.PI/nmajor/nminor - this.angle;\n this.draw_g.append('svg:path')\n .attr('d',`M0,0L${Math.round(this.szx*Math.cos(angle))},${Math.round(this.szy*Math.sin(angle))}`)\n .call(this.gridatt.func);\n }\n\n if (isBatchMode()) return;\n\n TooltipHandler.assign(this);\n\n let layer = this.getLayerSvg('primitives_layer'),\n interactive = layer.select('.interactive_ellipse');\n\n if (interactive.empty())\n interactive = layer.append('g')\n .classed('most_upper_primitives', true)\n .append('ellipse')\n .classed('interactive_ellipse', true)\n .attr('cx', 0)\n .attr('cy', 0)\n .style('fill', 'none')\n .style('pointer-events', 'visibleFill')\n .on('mouseenter', evnt => this.mouseEvent('enter', evnt))\n .on('mousemove', evnt => this.mouseEvent('move', evnt))\n .on('mouseleave', evnt => this.mouseEvent('leave', evnt));\n\n interactive.attr('rx', this.szx).attr('ry', this.szy);\n\n d3_select(interactive.node().parentNode).attr('transform', this.draw_g.attr('transform'));\n\n if (settings.Zooming && settings.ZoomWheel)\n interactive.on('wheel', evnt => this.mouseWheel(evnt));\n });\n }\n\n /** @summary Draw TGraphPolargram */\n static async draw(dom, polargram /*, opt*/) {\n\n let main = getElementMainPainter(dom);\n if (main) {\n if (main.getObject() === polargram)\n return main;\n throw Error('Cannot superimpose TGraphPolargram with any other drawings');\n }\n\n let painter = new TGraphPolargramPainter(dom, polargram);\n return ensureTCanvas(painter, false).then(() => {\n painter.setAsMainPainter();\n return painter.redraw();\n }).then(() => painter);\n }\n\n} // class TGraphPolargramPainter\n\n\n/**\n * @summary Painter for TGraphPolar objects.\n *\n * @private\n */\n\nclass TGraphPolarPainter extends ObjectPainter {\n\n /** @summary Redraw TGraphPolar */\n redraw() {\n this.drawGraphPolar();\n }\n\n /** @summary Decode options for drawing TGraphPolar */\n decodeOptions(opt) {\n\n let d = new DrawOptions(opt || 'L');\n\n if (!this.options) this.options = {};\n\n Object.assign(this.options, {\n mark: d.check('P'),\n err: d.check('E'),\n fill: d.check('F'),\n line: d.check('L'),\n curve: d.check('C')\n });\n\n this.storeDrawOpt(opt);\n }\n\n /** @summary Drawing TGraphPolar */\n drawGraphPolar() {\n let graph = this.getObject(),\n main = this.getMainPainter();\n\n if (!graph || !main?.$polargram) return;\n\n if (this.options.mark) this.createAttMarker({ attr: graph });\n if (this.options.err || this.options.line || this.options.curve) this.createAttLine({ attr: graph });\n if (this.options.fill) this.createAttFill({ attr: graph });\n\n this.createG();\n\n this.draw_g.attr('transform', main.draw_g.attr('transform'));\n\n let mpath = '', epath = '', lpath = '', bins = [];\n\n for (let n = 0; n < graph.fNpoints; ++n) {\n\n if (graph.fY[n] > main.scale_rmax) continue;\n\n if (this.options.err) {\n let pos1 = main.translate(graph.fX[n], graph.fY[n] - graph.fEY[n]),\n pos2 = main.translate(graph.fX[n], graph.fY[n] + graph.fEY[n]);\n epath += `M${pos1.x},${pos1.y}L${pos2.x},${pos2.y}`;\n\n pos1 = main.translate(graph.fX[n] + graph.fEX[n], graph.fY[n]);\n pos2 = main.translate(graph.fX[n] - graph.fEX[n], graph.fY[n]);\n\n epath += `M${pos1.x},${pos1.y}A${pos2.rx},${pos2.ry},0,0,1,${pos2.x},${pos2.y}`;\n }\n\n let pos = main.translate(graph.fX[n], graph.fY[n]);\n\n if (this.options.mark) {\n mpath += this.markeratt.create(pos.x, pos.y);\n }\n\n if (this.options.line || this.options.fill) {\n lpath += (lpath ? 'L' : 'M') + pos.x + ',' + pos.y;\n }\n\n if (this.options.curve) {\n pos.grx = pos.x;\n pos.gry = pos.y;\n bins.push(pos);\n }\n }\n\n if (this.options.fill && lpath)\n this.draw_g.append('svg:path')\n .attr('d', lpath + 'Z')\n .call(this.fillatt.func);\n\n if (this.options.line && lpath)\n this.draw_g.append('svg:path')\n .attr('d', lpath)\n .style('fill', 'none')\n .call(this.lineatt.func);\n\n if (this.options.curve && bins.length)\n this.draw_g.append('svg:path')\n .attr('d', buildSvgPath('bezier', bins).path)\n .style('fill', 'none')\n .call(this.lineatt.func);\n\n if (epath)\n this.draw_g.append('svg:path')\n .attr('d', epath)\n .style('fill','none')\n .call(this.lineatt.func);\n\n if (mpath)\n this.draw_g.append('svg:path')\n .attr('d', mpath)\n .call(this.markeratt.func);\n }\n\n /** @summary Create polargram object */\n createPolargram() {\n let polargram = create('TGraphPolargram'),\n gr = this.getObject();\n\n let rmin = gr.fY[0] || 0, rmax = rmin;\n for (let n = 0; n < gr.fNpoints; ++n) {\n rmin = Math.min(rmin, gr.fY[n] - gr.fEY[n]);\n rmax = Math.max(rmax, gr.fY[n] + gr.fEY[n]);\n }\n\n polargram.fRwrmin = rmin - (rmax-rmin)*0.1;\n polargram.fRwrmax = rmax + (rmax-rmin)*0.1;\n\n return polargram;\n }\n\n /** @summary Provide tooltip at specified point */\n extractTooltip(pnt) {\n if (!pnt) return null;\n\n let graph = this.getObject(),\n main = this.getMainPainter(),\n best_dist2 = 1e10, bestindx = -1, bestpos = null;\n\n for (let n = 0; n < graph.fNpoints; ++n) {\n let pos = main.translate(graph.fX[n], graph.fY[n]),\n dist2 = (pos.x-pnt.x)**2 + (pos.y-pnt.y)**2;\n if (dist2 < best_dist2) { best_dist2 = dist2; bestindx = n; bestpos = pos; }\n }\n\n let match_distance = 5;\n if (this.markeratt && this.markeratt.used) match_distance = this.markeratt.getFullSize();\n\n if (Math.sqrt(best_dist2) > match_distance) return null;\n\n let res = { name: this.getObject().fName, title: this.getObject().fTitle,\n x: bestpos.x, y: bestpos.y,\n color1: this.markeratt && this.markeratt.used ? this.markeratt.color : this.lineatt.color,\n exact: Math.sqrt(best_dist2) < 4,\n lines: [ this.getObjectHint() ],\n binindx: bestindx,\n menu_dist: match_distance,\n radius: match_distance\n };\n\n res.lines.push('r = ' + main.axisAsText('r', graph.fY[bestindx]));\n res.lines.push('phi = ' + main.axisAsText('phi',graph.fX[bestindx]));\n\n if (graph.fEY && graph.fEY[bestindx])\n res.lines.push('error r = ' + main.axisAsText('r', graph.fEY[bestindx]));\n\n if (graph.fEX && graph.fEX[bestindx])\n res.lines.push('error phi = ' + main.axisAsText('phi', graph.fEX[bestindx]));\n\n return res;\n }\n\n /** @summary Show tooltip */\n showTooltip(hint) {\n\n if (!this.draw_g) return;\n\n let ttcircle = this.draw_g.select('.tooltip_bin');\n\n if (!hint) {\n ttcircle.remove();\n return;\n }\n\n if (ttcircle.empty())\n ttcircle = this.draw_g.append('svg:ellipse')\n .attr('class','tooltip_bin')\n .style('pointer-events','none');\n\n hint.changed = ttcircle.property('current_bin') !== hint.binindx;\n\n if (hint.changed)\n ttcircle.attr('cx', hint.x)\n .attr('cy', hint.y)\n .attr('rx', Math.round(hint.radius))\n .attr('ry', Math.round(hint.radius))\n .style('fill', 'none')\n .style('stroke', hint.color1)\n .property('current_bin', hint.binindx);\n }\n\n /** @summary Process tooltip event */\n processTooltipEvent(pnt) {\n let hint = this.extractTooltip(pnt);\n if (!pnt || !pnt.disabled) this.showTooltip(hint);\n return hint;\n }\n\n /** @summary Draw TGraphPolar */\n static async draw(dom, graph, opt) {\n let painter = new TGraphPolarPainter(dom, graph);\n painter.decodeOptions(opt);\n\n let main = painter.getMainPainter();\n if (main && !main.$polargram) {\n console.error('Cannot superimpose TGraphPolar with plain histograms');\n return null;\n }\n\n let pr = Promise.resolve(null);\n if (!main) {\n if (!graph.fPolargram)\n graph.fPolargram = painter.createPolargram();\n pr = TGraphPolargramPainter.draw(dom, graph.fPolargram);\n }\n\n return pr.then(() => {\n painter.addToPadPrimitives();\n painter.drawGraphPolar();\n return painter;\n });\n }\n\n} // class TGraphPolarPainter\n\nexport { TGraphPolargramPainter, TGraphPolarPainter };\n"],"x_google_ignoreList":[0]} \ No newline at end of file diff --git a/docs/274.7d4546dc06404ec9.js.map b/docs/274.7d4546dc06404ec9.js.map deleted file mode 100644 index 03cd42cf1..000000000 --- a/docs/274.7d4546dc06404ec9.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"274.7d4546dc06404ec9.js","mappings":"iQAcA,MAAMA,UAA+BC,KAKlCC,YAAYC,EAAKC,GACdC,MAAMF,EAAKC,GACXE,KAAKC,YAAa,EAClBD,KAAKE,UAAYF,KAAKG,UAAY,CACrC,CAGAC,UAAUC,EAAOC,EAAQC,GACtB,IAAIC,EAAMR,KAAKS,EAAEH,GAASI,EAAMF,EAAIR,KAAKW,IAAIX,KAAKY,IAC9CC,EAAM,CACJC,EAAGN,EAAMO,KAAKC,KAAKX,EAAQL,KAAKK,OAChCY,EAAGP,EAAMK,KAAKG,KAAKb,EAAQL,KAAKK,OAChCc,GAAIX,EACJY,GAAIV,GAGV,OAAKH,IACFM,EAAIC,EAAIC,KAAKM,MAAMR,EAAIC,GACvBD,EAAII,EAAIF,KAAKM,MAAMR,EAAII,GACvBJ,EAAIM,GAAMJ,KAAKM,MAAMR,EAAIM,IACzBN,EAAIO,GAAML,KAAKM,MAAMR,EAAIO,KAErBP,CACV,CAGAS,OAAOhB,GAEJ,OAAIA,IAAWS,KAAKM,MAAMf,GAAgBA,EAAOiB,WAC7CvB,KAAKwB,KAAO,GAAWlB,EAAOmB,cAAc,GAEzCnB,EAAOoB,QAAS1B,KAAKwB,KAAO,EAAKxB,KAAKwB,KAAO,EACvD,CAGAG,WAAWC,EAAMC,GAEd,MAAY,KAARD,EACGC,IAAUd,KAAKM,MAAMQ,GAAeA,EAAMN,WAC1CvB,KAAKwB,KAAK,GAAWK,EAAMJ,cAAc,GACtCI,EAAMH,QAAQ1B,KAAKwB,KAAK,IAGlCK,GAAS,IAAId,KAAKe,MACAf,KAAKM,MAAMQ,GAAUA,EAAMN,WAAaM,EAAMH,QAAQ,EAC3E,CAGAK,eACG,IAAIC,EAAKhC,KAAKiC,gBACVC,EAAMF,EAAGG,YAAW,GACpBC,EAAIJ,EAAGK,cACPC,EAAIN,EAAGO,eACPC,EAAO,CAAC,EAEZ,OAAIN,GACDM,EAAK7B,IAAMI,KAAKM,MAAMN,KAAK0B,IAAI,GAAK,GAAM1B,KAAK0B,IAAIP,EAAIQ,YAAaR,EAAIS,eAAeP,GACvFI,EAAK5B,IAAMG,KAAKM,MAAMN,KAAK0B,IAAI,GAAK,GAAM1B,KAAK0B,IAAIP,EAAIU,cAAeV,EAAIW,aAAaP,KAEvFE,EAAK7B,IAAMI,KAAKM,MAAM,GAAIe,GAC1BI,EAAK5B,IAAMG,KAAKM,MAAM,GAAIiB,IAG7BE,EAAKM,MAAQ,EAAEN,EAAK7B,IACpB6B,EAAKO,OAAS,EAAEP,EAAK5B,IACrB4B,EAAK1B,EAAIC,KAAKM,MAAMe,EAAE,EAAII,EAAK7B,KAC/B6B,EAAKvB,EAAIF,KAAKM,MAAMiB,EAAE,EAAIE,EAAK5B,KAE/B4B,EAAKQ,aAAeR,EAAK7B,IACzB6B,EAAKS,aAAeT,EAAK5B,IAEzB4B,EAAKU,UAAa,aAAYV,EAAK1B,KAAK0B,EAAKvB,KAEtCuB,CACV,CAGAW,WAAWC,EAAMC,GACd,IACIC,EADQtD,KAAKuD,YAAY,oBACLC,OAAO,wBAC/B,GAAIF,EAAYG,QAAS,OAEzB,IAAIC,EAAM,KAEV,GAAa,UAATN,EAAkB,CACnB,IAAIvC,KAAM8C,MAAWN,EAAMC,EAAYM,QACvCF,EAAM,CAAE5C,EAAGD,EAAI,GAAII,EAAGJ,EAAI,GAAIgD,OAAO,EACxC,CAEA7D,KAAK8D,yBAAyBJ,EACjC,CAGAK,WAAWV,GACRA,EAAKW,kBACLX,EAAKY,iBAELjE,KAAK8D,yBAAyB,MAE9B,IAAII,EAAQlE,KAAKmE,YAEjB,IAAKD,EAAO,OAEZ,IAAIE,EAAQf,EAAKgB,YAAchB,EAAKgB,WAAchB,EAAKiB,QAAUjB,EAAKkB,OACtE,IAAKH,EAAO,OAEZA,EAASA,EAAQ,GAAK,GAAO,GAE7B,IAAII,EAAOxE,KAAKyE,WAAYC,EAAO1E,KAAK2E,WAGxCD,GAAQN,GAHoDM,EAAOF,IAK9DA,EAAKN,EAAMU,SAAaF,EAAKR,EAAMW,WAAUL,EAAOE,EAAO,IAE3D1E,KAAKE,WAAasE,GAAUxE,KAAKG,WAAauE,KAChD1E,KAAKE,UAAYsE,EACjBxE,KAAKG,UAAYuE,EACjB1E,KAAK8E,YAEX,CAGAC,SACG,IAAK/E,KAAKgF,gBAAiB,OAE3B,IAAId,EAAQlE,KAAKmE,YACb3B,EAAOxC,KAAKiC,gBAAgBF,eAEhC/B,KAAKiF,UAELjF,KAAKkF,OAAOC,KAAK,YAAc,aAAYpE,KAAKM,MAAMmB,EAAK1B,EAAI0B,EAAKM,MAAM,MAAM/B,KAAKM,MAAMmB,EAAKvB,EAAIuB,EAAKO,OAAO,OAChH/C,KAAKW,IAAM6B,EAAK7B,IAChBX,KAAKY,IAAM4B,EAAK5B,IAEhBZ,KAAKyE,WAAaP,EAAMU,QACxB5E,KAAK2E,WAAaT,EAAMW,QACpB7E,KAAKE,WAAaF,KAAKG,YACxBH,KAAKyE,WAAazE,KAAKE,UACvBF,KAAK2E,WAAa3E,KAAKG,WAG1BH,KAAKS,KAAI2E,QAAcC,OAAO,CAACrF,KAAKyE,WAAYzE,KAAK2E,aAAaW,MAAM,CAAE,EAAGtF,KAAKW,MAClFX,KAAKK,MAAQ6D,EAAMqB,YAAc,EAEjC,IAAIC,EAAQxF,KAAKS,EAAE+E,MAAM,GACrBC,EAAS1E,KAAK2E,MAAOxB,EAAMyB,SAAW,IAAS,KAEnD3F,KAAK4F,cAAc,CAAET,KAAMjB,IACtBlE,KAAK6F,UAAS7F,KAAK6F,QAAU,IAAIC,KAAgB,CAAEC,MAAO7B,EAAM8B,WAAYC,MAAO,EAAGnD,MAAO,KAElG,IAAIwC,EAAQvE,KAAKmF,IAAIhC,EAAMW,QAAUX,EAAMU,SAC3C5E,KAAKwB,KAAQ8D,GAAS,GAAK,EAAKvE,KAAKM,MAAMN,KAAKoF,MAAMX,EAAMY,OAASd,IAGrE,IAAIe,EAAO,GAAIC,EAAO,EACtB,KAAOA,EAAKd,EAAMY,QAAQ,CACvB,IAAIG,EAAMvG,KAAKsB,OAAOkE,EAAMc,IAC5B,GAAID,EAAKG,QAAQD,IAAQ,EAAzB,CACG,KAAMvG,KAAKwB,KAAK,GAAI,MACpB6E,EAAO,GAAIC,EAAO,CACpB,MACDD,EAAKI,KAAKF,GACVD,GACH,CAEA,IAAII,GAAe,EAEdlB,EAAMA,EAAMY,OAAO,GAAKlC,EAAMW,SAAa7E,KAAKE,WAAaF,KAAKG,YACpEqF,EAAMiB,KAAKvC,EAAMW,SACjB6B,GAAe,GAGlB1G,KAAK2G,iBAAiBzC,EAAM0C,iBAAkB7F,KAAKM,MAAM6C,EAAM2C,gBAAkB7G,KAAKY,IAAM,IAE5F,QAASkG,EAAI,EAAGA,EAAItB,EAAMY,SAAUU,EAAG,CACpC,IAAI3F,EAAKnB,KAAKS,EAAE+E,EAAMsB,IAAK1F,EAAKD,EAAGnB,KAAKW,IAAIX,KAAKY,IAajD,GAZAZ,KAAKkF,OAAO6B,OAAO,WACd5B,KAAK,KAAK,GACVA,KAAK,KAAK,GACVA,KAAK,KAAKpE,KAAKM,MAAMF,IACrBgE,KAAK,KAAKpE,KAAKM,MAAMD,IACrB6E,MAAM,OAAQ,QACde,KAAKhH,KAAKiH,QAAQC,OAElBJ,EAAItB,EAAMY,OAAO,IAAOM,IAC1B1G,KAAKmH,SAAS,CAAEC,MAAO,GAAItG,EAAGC,KAAKM,MAAMF,GAAKF,EAAGF,KAAKM,MAAM6C,EAAM2C,gBAAkB7G,KAAKY,IAAM,IAC/EyG,KAAMrH,KAAKsB,OAAOkE,EAAMsB,IAAKf,MAAO/F,KAAKsH,SAASpD,EAAMqD,mBAAoBC,MAAO,IAEjG/B,EAAO,IAAQqB,EAAItB,EAAMY,OAAO,IAAOM,GAAe,CACxD,IAAIe,GAAMjC,EAAM,GAAKA,EAAM,IAAMC,EACjC,QAASiC,EAAK,EAAGA,EAAKjC,IAAUiC,EAAI,CACjC,IAAIC,EAAQnC,EAAMsB,GAAKW,EAAGC,EAC1B,GAAIC,EAAQ3H,KAAK2E,WAAY,MAC7BxD,EAAKnB,KAAKS,EAAEkH,GAAQvG,EAAKD,EAAGnB,KAAKW,IAAIX,KAAKY,IAC1CZ,KAAKkF,OAAO6B,OAAO,WACd5B,KAAK,KAAK,GACVA,KAAK,KAAK,GACVA,KAAK,KAAKpE,KAAKM,MAAMF,IACrBgE,KAAK,KAAKpE,KAAKM,MAAMD,IACrB6E,MAAM,OAAQ,QACde,KAAKhH,KAAK6F,QAAQqB,KAC1B,CACH,CACH,CAEA,IAAIU,EAAS1D,EAAM2D,SAAW,IAC9B,OAAgB,IAAXD,GAA6B,IAAXA,IAAeA,EAAS,GAExC5H,KAAK8H,oBAAoBC,KAAK,KAElC,IAAIC,EAAWjH,KAAKM,MAAM6C,EAAM+D,eAAiBjI,KAAKY,IAAM,GAC5DZ,KAAK2G,iBAAiBzC,EAAMgE,gBAAiBF,GAE7C3B,EAAgB,GAARuB,EAAa,CAAC,IAAK,gBAAiB,gBAAiB,iBAAkB,MAAO,iBAAkB,iBAAkB,kBAAoB,CAAC,IAAK,iBAAkB,kBACtK,IAAIO,EAAS,CAAC,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,IAE1C,QAASrB,EAAI,EAAGA,EAAIc,IAAUd,EAAG,CAC9B,IAAIzG,EAAW,GAAFyG,EAAI/F,KAAKe,GAAG8F,EAAS5H,KAAKK,MACvCL,KAAKkF,OAAO6B,OAAO,YACd5B,KAAK,IAAK,QAAOpE,KAAKM,MAAMrB,KAAKW,IAAII,KAAKC,IAAIX,OAAWU,KAAKM,MAAMrB,KAAKY,IAAIG,KAAKG,IAAIb,OACtF2G,KAAKhH,KAAKiH,QAAQC,MAEvB,IAAIkB,EAAQrH,KAAKM,MAAM,GAAIhB,EAAMU,KAAKe,GAAG,GAAK,EAE9C9B,KAAKmH,SAAS,CAAEC,MAAOe,EAAOC,GACdtH,EAAGC,KAAKM,OAAOrB,KAAKW,IAAIqH,GAAUjH,KAAKC,IAAIX,IAC3CY,EAAGF,KAAKM,OAAOrB,KAAKY,IAAMoH,EAAShI,KAAKW,IAAIX,KAAKY,KAAMG,KAAKG,IAAIb,IAChEgH,KAAMhB,EAAKS,GACXf,MAAO/F,KAAKsH,SAASpD,EAAMmE,kBAAmBb,MAAO,GACxE,CAEA,OAAOxH,KAAK8H,mBAAiB,GAC7BC,KAAK,KAIL,GAFAtC,EAAS1E,KAAK2E,MAAOxB,EAAM2D,SAAW,IAAS,KAE3CpC,EAAS,EACV,QAASqB,EAAI,EAAGA,EAAIc,EAAOnC,IAAUqB,EAAG,CACrC,GAAIA,EAAIrB,GAAW,EAAG,SACtB,IAAIpF,EAAW,GAAFyG,EAAI/F,KAAKe,GAAG8F,EAAOnC,EAASzF,KAAKK,MAC9CL,KAAKkF,OAAO6B,OAAO,YACd5B,KAAK,IAAK,QAAOpE,KAAKM,MAAMrB,KAAKW,IAAII,KAAKC,IAAIX,OAAWU,KAAKM,MAAMrB,KAAKY,IAAIG,KAAKG,IAAIb,OACtF2G,KAAKhH,KAAK6F,QAAQqB,KAC1B,CAEH,MAAIoB,iBAAe,OAEnBC,YAAsBvI,MAEtB,IAAIwI,EAAQxI,KAAKuD,YAAY,oBACzBD,EAAckF,EAAMhF,OAAO,wBAE3BF,EAAYG,UACbH,EAAckF,EAAMzB,OAAO,KACP0B,QAAQ,yBAAyB,GACjC1B,OAAO,WACP0B,QAAQ,uBAAuB,GAC/BtD,KAAK,KAAM,GACXA,KAAK,KAAM,GACXc,MAAM,OAAQ,QACdA,MAAM,iBAAkB,eACxByC,GAAG,aAAcrF,GAAQrD,KAAKmD,WAAW,QAASE,IAClDqF,GAAG,YAAarF,GAAQrD,KAAKmD,WAAW,OAAQE,IAChDqF,GAAG,aAAcrF,GAAQrD,KAAKmD,WAAW,QAASE,KAEzEC,EAAY6B,KAAK,KAAMnF,KAAKW,KAAKwE,KAAK,KAAMnF,KAAKY,MAAG,EAEpD+H,MAAUrF,EAAYM,OAAOgF,YAAYzD,KAAK,YAAanF,KAAKkF,OAAOC,KAAK,cAExE0D,oBAAoBA,sBACrBvF,EAAYoF,GAAG,QAASrF,GAAQrD,KAAK+D,WAAWV,GAAK,EAE9D,CAGAyF,YAAkBjJ,EAAKC,GAAqB,0BAEzC,IAAIiJ,KAAOC,MAAsBnJ,GACjC,GAAIkJ,EAAM,CACP,GAAIA,EAAK5E,cAAgBrE,EACtB,OAAOiJ,EACV,MAAME,MAAM,6DACf,CAEA,IAAIC,EAAU,IAAIxJ,EAAuBG,EAAKC,GAC9C,SAAOqJ,iBAAcD,GAAS,GAAOnB,KAAK,KACvCmB,EAAQE,mBACDF,EAAQnE,WACfgD,KAAK,IAAMmB,EAAS,EAbkB,EAc5C,EAWH,MAAMG,UAA2B1J,KAG9BoF,SACG/E,KAAKsJ,gBACR,CAGAC,cAAcC,GAEX,IAAIC,EAAI,IAAIC,KAAYF,GAAO,KAE1BxJ,KAAK2J,UAAS3J,KAAK2J,QAAU,CAAC,GAEnCC,OAAOC,OAAO7J,KAAK2J,QAAS,CACxBG,KAAML,EAAEM,MAAM,KACdC,IAAKP,EAAEM,MAAM,KACbE,KAAMR,EAAEM,MAAM,KACdG,KAAMT,EAAEM,MAAM,KACdI,MAAOV,EAAEM,MAAM,OAGnB/J,KAAKoK,aAAaZ,EACrB,CAGAF,iBACG,IAAIe,EAAQrK,KAAKmE,YACb4E,EAAO/I,KAAKsK,iBAEhB,IAAKD,IAAUtB,GAAM9I,WAAY,OAE7BD,KAAK2J,QAAQG,MAAM9J,KAAKuK,gBAAgB,CAAEpF,KAAMkF,KAChDrK,KAAK2J,QAAQK,KAAOhK,KAAK2J,QAAQO,MAAQlK,KAAK2J,QAAQQ,QAAOnK,KAAK4F,cAAc,CAAET,KAAMkF,IACxFrK,KAAK2J,QAAQM,MAAMjK,KAAKwK,cAAc,CAAErF,KAAMkF,IAElDrK,KAAKiF,UAELjF,KAAKkF,OAAOC,KAAK,YAAa4D,EAAK7D,OAAOC,KAAK,cAE/C,IAAIsF,EAAQ,GAAIC,EAAQ,GAAIC,EAAQ,GAAIC,EAAO,GAE/C,QAAS9D,EAAI,EAAGA,EAAIuD,EAAMQ,WAAY/D,EAAG,CAEtC,GAAIuD,EAAMS,GAAGhE,GAAKiC,EAAKpE,WAAY,SAEnC,GAAI3E,KAAK2J,QAAQK,IAAK,CACnB,IAAIe,EAAOhC,EAAK3I,UAAUiK,EAAMW,GAAGlE,GAAIuD,EAAMS,GAAGhE,GAAKuD,EAAMY,IAAInE,IAC3DoE,EAAOnC,EAAK3I,UAAUiK,EAAMW,GAAGlE,GAAIuD,EAAMS,GAAGhE,GAAKuD,EAAMY,IAAInE,IAC/D4D,GAAU,IAAGK,EAAKjK,KAAKiK,EAAK9J,KAAKiK,EAAKpK,KAAKoK,EAAKjK,IAEhD8J,EAAOhC,EAAK3I,UAAUiK,EAAMW,GAAGlE,GAAKuD,EAAMc,IAAIrE,GAAIuD,EAAMS,GAAGhE,IAC3DoE,EAAOnC,EAAK3I,UAAUiK,EAAMW,GAAGlE,GAAKuD,EAAMc,IAAIrE,GAAIuD,EAAMS,GAAGhE,IAE3D4D,GAAU,IAAGK,EAAKjK,KAAKiK,EAAK9J,KAAKiK,EAAK/J,MAAM+J,EAAK9J,YAAY8J,EAAKpK,KAAKoK,EAAKjK,GAC/E,CAEA,IAAIJ,EAAMkI,EAAK3I,UAAUiK,EAAMW,GAAGlE,GAAIuD,EAAMS,GAAGhE,IAE3C9G,KAAK2J,QAAQG,OACdW,GAASzK,KAAKoL,UAAUC,OAAOxK,EAAIC,EAAGD,EAAII,KAGzCjB,KAAK2J,QAAQO,MAAQlK,KAAK2J,QAAQM,QACnCU,IAAUA,EAAQ,IAAM,KAAO9J,EAAIC,EAAI,IAAMD,EAAII,GAGhDjB,KAAK2J,QAAQQ,QACdtJ,EAAIyK,IAAMzK,EAAIC,EACdD,EAAI0K,IAAM1K,EAAII,EACd2J,EAAKnE,KAAK5F,GAEhB,CAEIb,KAAK2J,QAAQM,MAAQU,GACtB3K,KAAKkF,OAAO6B,OAAO,YACd5B,KAAK,IAAKwF,EAAQ,KAClB3D,KAAKhH,KAAKwL,QAAQtE,MAEtBlH,KAAK2J,QAAQO,MAAQS,GACtB3K,KAAKkF,OAAO6B,OAAO,YACd5B,KAAK,IAAKwF,GACV1E,MAAM,OAAQ,QACde,KAAKhH,KAAKiH,QAAQC,MAEtBlH,KAAK2J,QAAQQ,OAASS,EAAKxE,QAC5BpG,KAAKkF,OAAO6B,OAAO,YACV5B,KAAK,OAAKsG,MAAa,SAAUb,GAAMc,MACvCzF,MAAM,OAAQ,QACde,KAAKhH,KAAKiH,QAAQC,MAE1BwD,GACD1K,KAAKkF,OAAO6B,OAAO,YACd5B,KAAK,IAAKuF,GACVzE,MAAM,OAAO,QACbe,KAAKhH,KAAKiH,QAAQC,MAEtBuD,GACDzK,KAAKkF,OAAO6B,OAAO,YACZ5B,KAAK,IAAKsF,GACVzD,KAAKhH,KAAKoL,UAAUlE,KACjC,CAGAyE,kBACG,IAAI7L,KAAYuL,UAAO,mBACnBO,EAAK5L,KAAKmE,YAEVK,EAAOoH,EAAGd,GAAG,IAAM,EAAGpG,EAAOF,EACjC,QAASsC,EAAI,EAAGA,EAAI8E,EAAGf,WAAY/D,EAChCtC,EAAOzD,KAAK8K,IAAIrH,EAAMoH,EAAGd,GAAGhE,GAAK8E,EAAGX,IAAInE,IACxCpC,EAAO3D,KAAK0B,IAAIiC,EAAMkH,EAAGd,GAAGhE,GAAK8E,EAAGX,IAAInE,IAG3ChH,SAAU8E,QAAUJ,EAAmB,IAAXE,EAAKF,GACjC1E,EAAU+E,QAAUH,EAAmB,IAAXA,EAAKF,GAE1B1E,CACV,CAGAgM,eAAepI,GACZ,IAAKA,EAAK,OAAO,KAEjB,IAAI2G,EAAQrK,KAAKmE,YACb4E,EAAO/I,KAAKsK,iBACZyB,EAAa,KAAMC,GAAW,EAAIC,EAAU,KAEhD,QAASnF,EAAI,EAAGA,EAAIuD,EAAMQ,WAAY/D,EAAG,CACtC,IAAIjG,EAAMkI,EAAK3I,UAAUiK,EAAMW,GAAGlE,GAAIuD,EAAMS,GAAGhE,IAC3CoF,GAASrL,EAAIC,EAAE4C,EAAI5C,IAAI,GAAKD,EAAII,EAAEyC,EAAIzC,IAAI,EAC1CiL,EAAQH,IAAcA,EAAaG,EAAOF,EAAWlF,EAAGmF,EAAUpL,EACzE,CAEA,IAAIsL,EAAiB,EAGrB,GAFInM,KAAKoL,WAAapL,KAAKoL,UAAUgB,OAAMD,EAAiBnM,KAAKoL,UAAUiB,eAEvEtL,KAAKuL,KAAKP,GAAcI,EAAgB,OAAO,KAEnD,IAAII,EAAM,CAAEC,KAAMxM,KAAKmE,YAAYsI,MAAOC,MAAO1M,KAAKmE,YAAYwI,OACtD7L,EAAGmL,EAAQnL,EAAGG,EAAGgL,EAAQhL,EACzB2L,OAAQ5M,KAAKoL,WAAapL,KAAKoL,UAAUgB,KAAOpM,KAAKoL,UAAUrF,MAAQ/F,KAAKiH,QAAQlB,MACpF8G,MAAO9L,KAAKuL,KAAKP,GAAc,EAC/Be,MAAO,CAAE9M,KAAK+M,iBACdC,QAAShB,EACTiB,UAAWd,EACX7L,OAAQ6L,GAGpBI,SAAIO,MAAMrG,KAAK,OAASsC,EAAKpH,WAAW,IAAK0I,EAAMS,GAAGkB,KACtDO,EAAIO,MAAMrG,KAAK,SAAWsC,EAAKpH,WAAW,MAAM0I,EAAMW,GAAGgB,KAErD3B,EAAMY,KAAOZ,EAAMY,IAAIe,IACxBO,EAAIO,MAAMrG,KAAK,aAAesC,EAAKpH,WAAW,IAAK0I,EAAMY,IAAIe,KAE5D3B,EAAMc,KAAOd,EAAMc,IAAIa,IACxBO,EAAIO,MAAMrG,KAAK,eAAiBsC,EAAKpH,WAAW,MAAO0I,EAAMc,IAAIa,KAE7DO,CACV,CAGAW,YAAYC,GAET,IAAKnN,KAAKkF,OAAQ,OAElB,IAAIkI,EAAWpN,KAAKkF,OAAO1B,OAAO,gBAE7B2J,GAKDC,EAAS3J,UACV2J,EAAWpN,KAAKkF,OAAO6B,OAAO,eACT5B,KAAK,QAAQ,eACbc,MAAM,iBAAiB,SAE/CkH,EAAKE,QAAUD,EAASE,SAAS,iBAAmBH,EAAKH,QAErDG,EAAKE,SACND,EAASjI,KAAK,KAAMgI,EAAKrM,GAClBqE,KAAK,KAAMgI,EAAKlM,GAChBkE,KAAK,KAAMpE,KAAKM,MAAM8L,EAAK7M,SAC3B6E,KAAK,KAAMpE,KAAKM,MAAM8L,EAAK7M,SAC3B2F,MAAM,OAAQ,QACdA,MAAM,SAAUkH,EAAKP,QACrBU,SAAS,cAAeH,EAAKH,UAlBpCI,EAASG,QAmBf,CAGAC,oBAAoB9J,GACjB,IAAIyJ,EAAOnN,KAAK8L,eAAepI,GAC/B,QAAKA,IAAQA,EAAI+J,WAAUzN,KAAKkN,YAAYC,GACrCA,CACV,CAGArE,YAAkBjJ,EAAKwK,EAAOb,GAAK,0BAChC,IAAIN,EAAU,IAAIG,EAAmBxJ,EAAKwK,GAC1CnB,EAAQK,cAAcC,GAEtB,IAAIT,EAAOG,EAAQoB,iBACnB,GAAIvB,IAASA,EAAK9I,WACfyN,eAAQC,MAAM,wDACP,KAGV,IAAIC,EAAKC,QAAQC,QAAQ,MACzB,OAAK/E,IACGsB,EAAM0D,aACR1D,EAAM0D,WAAa7E,EAAQyC,mBAC9BiC,EAAKlO,EAAuBsO,KAAKnO,EAAKwK,EAAM0D,aAGxCH,EAAG7F,KAAK,KACZmB,EAAQ+E,qBACR/E,EAAQI,iBACDJ,GACP,EArB6B,EAsBnC","names":["TGraphPolargramPainter","ObjectPainter","constructor","dom","polargram","super","this","$polargram","zoom_rmin","zoom_rmax","translate","angle","radius","keep_float","_rx","r","_ry","szx","szy","pos","x","Math","cos","y","sin","rx","ry","round","format","toString","ndig","toExponential","toFixed","axisAsText","axis","value","PI","getFrameRect","pp","getPadPainter","pad","getRootPad","w","getPadWidth","h","getPadHeight","rect","max","fLeftMargin","fRightMargin","fBottomMargin","fTopMargin","width","height","hint_delta_x","hint_delta_y","transform","mouseEvent","kind","evnt","interactive","getLayerSvg","select","empty","pnt","d3_pointer","node","touch","processFrameTooltipEvent","mouseWheel","stopPropagation","preventDefault","polar","getObject","delta","wheelDelta","deltaY","detail","rmin","scale_rmin","rmax","scale_rmax","fRwrmin","fRwrmax","redrawPad","redraw","isMainPainter","createG","draw_g","attr","scaleLinear","domain","range","fAxisAngle","ticks","nminor","floor","fNdivRad","createAttLine","gridatt","TAttLineHandler","color","fLineColor","style","abs","log10","length","lbls","indx","lbl","indexOf","push","exclude_last","startTextDrawing","fRadialLabelFont","fRadialTextSize","n","append","call","lineatt","func","drawText","align","text","getColor","fRadialLabelColor","latex","dr","nn","gridr","nmajor","fNdivPol","finishTextDrawing","then","fontsize","fPolarTextSize","fPolarLabelFont","aligns","aindx","fPolarLabelColor","isBatchMode","TooltipHandler","layer","classed","on","d3_select","parentNode","settings","static","main","getElementMainPainter","Error","painter","ensureTCanvas","setAsMainPainter","TGraphPolarPainter","drawGraphPolar","decodeOptions","opt","d","DrawOptions","options","Object","assign","mark","check","err","fill","line","curve","storeDrawOpt","graph","getMainPainter","createAttMarker","createAttFill","mpath","epath","lpath","bins","fNpoints","fY","pos1","fX","fEY","pos2","fEX","markeratt","create","grx","gry","fillatt","buildSvgPath","path","createPolargram","gr","min","extractTooltip","best_dist2","bestindx","bestpos","dist2","match_distance","used","getFullSize","sqrt","res","name","fName","title","fTitle","color1","exact","lines","getObjectHint","binindx","menu_dist","showTooltip","hint","ttcircle","changed","property","remove","processTooltipEvent","disabled","console","error","pr","Promise","resolve","fPolargram","draw","addToPadPrimitives"],"sourceRoot":"webpack:///","sources":["../node_modules/jsroot/modules/draw/TGraphPolarPainter.mjs"],"sourcesContent":["import { settings, create, isBatchMode } from '../core.mjs';\nimport { scaleLinear, select as d3_select, pointer as d3_pointer } from '../d3.mjs';\nimport { DrawOptions, buildSvgPath } from '../base/BasePainter.mjs';\nimport { ObjectPainter, getElementMainPainter } from '../base/ObjectPainter.mjs';\nimport { TAttLineHandler } from '../base/TAttLineHandler.mjs';\nimport { ensureTCanvas } from '../gpad/TCanvasPainter.mjs';\nimport { TooltipHandler } from '../gpad/TFramePainter.mjs';\n\n\n/**\n * @summary Painter for TGraphPolargram objects.\n *\n * @private */\n\nclass TGraphPolargramPainter extends ObjectPainter {\n\n /** @summary Create painter\n * @param {object|string} dom - DOM element for drawing or element id\n * @param {object} polargram - object to draw */\n constructor(dom, polargram) {\n super(dom, polargram);\n this.$polargram = true; // indicate that this is polargram\n this.zoom_rmin = this.zoom_rmax = 0;\n }\n\n /** @summary Translate coordinates */\n translate(angle, radius, keep_float) {\n let _rx = this.r(radius), _ry = _rx/this.szx*this.szy,\n pos = {\n x: _rx * Math.cos(-angle - this.angle),\n y: _ry * Math.sin(-angle - this.angle),\n rx: _rx,\n ry: _ry\n };\n\n if (!keep_float) {\n pos.x = Math.round(pos.x);\n pos.y = Math.round(pos.y);\n pos.rx = Math.round(pos.rx);\n pos.ry = Math.round(pos.ry);\n }\n return pos;\n }\n\n /** @summary format label for radius ticks */\n format(radius) {\n\n if (radius === Math.round(radius)) return radius.toString();\n if (this.ndig > 10) return radius.toExponential(4);\n\n return radius.toFixed((this.ndig > 0) ? this.ndig : 0);\n }\n\n /** @summary Convert axis values to text */\n axisAsText(axis, value) {\n\n if (axis == 'r') {\n if (value === Math.round(value)) return value.toString();\n if (this.ndig>10) return value.toExponential(4);\n return value.toFixed(this.ndig+2);\n }\n\n value *= 180/Math.PI;\n return (value === Math.round(value)) ? value.toString() : value.toFixed(1);\n }\n\n /** @summary Returns coordinate of frame - without using frame itself */\n getFrameRect() {\n let pp = this.getPadPainter(),\n pad = pp.getRootPad(true),\n w = pp.getPadWidth(),\n h = pp.getPadHeight(),\n rect = {};\n\n if (pad) {\n rect.szx = Math.round(Math.max(0.1, 0.5 - Math.max(pad.fLeftMargin, pad.fRightMargin))*w);\n rect.szy = Math.round(Math.max(0.1, 0.5 - Math.max(pad.fBottomMargin, pad.fTopMargin))*h);\n } else {\n rect.szx = Math.round(0.5*w);\n rect.szy = Math.round(0.5*h);\n }\n\n rect.width = 2*rect.szx;\n rect.height = 2*rect.szy;\n rect.x = Math.round(w/2 - rect.szx);\n rect.y = Math.round(h/2 - rect.szy);\n\n rect.hint_delta_x = rect.szx;\n rect.hint_delta_y = rect.szy;\n\n rect.transform = `translate(${rect.x},${rect.y})`;\n\n return rect;\n }\n\n /** @summary Process mouse event */\n mouseEvent(kind, evnt) {\n let layer = this.getLayerSvg('primitives_layer'),\n interactive = layer.select('.interactive_ellipse');\n if (interactive.empty()) return;\n\n let pnt = null;\n\n if (kind !== 'leave') {\n let pos = d3_pointer(evnt, interactive.node());\n pnt = { x: pos[0], y: pos[1], touch: false };\n }\n\n this.processFrameTooltipEvent(pnt);\n }\n\n /** @summary Process mouse wheel event */\n mouseWheel(evnt) {\n evnt.stopPropagation();\n evnt.preventDefault();\n\n this.processFrameTooltipEvent(null); // remove all tooltips\n\n let polar = this.getObject();\n\n if (!polar) return;\n\n let delta = evnt.wheelDelta ? -evnt.wheelDelta : (evnt.deltaY || evnt.detail);\n if (!delta) return;\n\n delta = (delta < 0) ? -0.2 : 0.2;\n\n let rmin = this.scale_rmin, rmax = this.scale_rmax, range = rmax - rmin;\n\n // rmin -= delta*range;\n rmax += delta*range;\n\n if ((rminpolar.fRwrmax)) rmin = rmax = 0;\n\n if ((this.zoom_rmin != rmin) || (this.zoom_rmax != rmax)) {\n this.zoom_rmin = rmin;\n this.zoom_rmax = rmax;\n this.redrawPad();\n }\n }\n\n /** @summary Redraw polargram */\n redraw() {\n if (!this.isMainPainter()) return;\n\n let polar = this.getObject(),\n rect = this.getPadPainter().getFrameRect();\n\n this.createG();\n\n this.draw_g.attr('transform', `translate(${Math.round(rect.x + rect.width/2)},${Math.round(rect.y + rect.height/2)})`);\n this.szx = rect.szx;\n this.szy = rect.szy;\n\n this.scale_rmin = polar.fRwrmin;\n this.scale_rmax = polar.fRwrmax;\n if (this.zoom_rmin != this.zoom_rmax) {\n this.scale_rmin = this.zoom_rmin;\n this.scale_rmax = this.zoom_rmax;\n }\n\n this.r = scaleLinear().domain([this.scale_rmin, this.scale_rmax]).range([ 0, this.szx ]);\n this.angle = polar.fAxisAngle || 0;\n\n let ticks = this.r.ticks(5),\n nminor = Math.floor((polar.fNdivRad % 10000) / 100);\n\n this.createAttLine({ attr: polar });\n if (!this.gridatt) this.gridatt = new TAttLineHandler({ color: polar.fLineColor, style: 2, width: 1 });\n\n let range = Math.abs(polar.fRwrmax - polar.fRwrmin);\n this.ndig = (range <= 0) ? -3 : Math.round(Math.log10(ticks.length / range));\n\n // verify that all radius labels are unique\n let lbls = [], indx = 0;\n while (indx= 0) {\n if (++this.ndig>10) break;\n lbls = []; indx = 0; continue;\n }\n lbls.push(lbl);\n indx++;\n }\n\n let exclude_last = false;\n\n if ((ticks[ticks.length-1] < polar.fRwrmax) && (this.zoom_rmin == this.zoom_rmax)) {\n ticks.push(polar.fRwrmax);\n exclude_last = true;\n }\n\n this.startTextDrawing(polar.fRadialLabelFont, Math.round(polar.fRadialTextSize * this.szy * 2));\n\n for (let n = 0; n < ticks.length; ++n) {\n let rx = this.r(ticks[n]), ry = rx/this.szx*this.szy;\n this.draw_g.append('ellipse')\n .attr('cx',0)\n .attr('cy',0)\n .attr('rx',Math.round(rx))\n .attr('ry',Math.round(ry))\n .style('fill', 'none')\n .call(this.lineatt.func);\n\n if ((n < ticks.length-1) || !exclude_last)\n this.drawText({ align: 23, x: Math.round(rx), y: Math.round(polar.fRadialTextSize * this.szy * 0.5),\n text: this.format(ticks[n]), color: this.getColor(polar.fRadialLabelColor), latex: 0 });\n\n if ((nminor>1) && ((n < ticks.length-1) || !exclude_last)) {\n let dr = (ticks[1] - ticks[0]) / nminor;\n for (let nn = 1; nn < nminor; ++nn) {\n let gridr = ticks[n] + dr*nn;\n if (gridr > this.scale_rmax) break;\n rx = this.r(gridr); ry = rx/this.szx*this.szy;\n this.draw_g.append('ellipse')\n .attr('cx',0)\n .attr('cy',0)\n .attr('rx',Math.round(rx))\n .attr('ry',Math.round(ry))\n .style('fill', 'none')\n .call(this.gridatt.func);\n }\n }\n }\n\n let nmajor = polar.fNdivPol % 100;\n if ((nmajor !== 8) && (nmajor !== 3)) nmajor = 8;\n\n return this.finishTextDrawing().then(() => {\n\n let fontsize = Math.round(polar.fPolarTextSize * this.szy * 2);\n this.startTextDrawing(polar.fPolarLabelFont, fontsize);\n\n lbls = (nmajor==8) ? ['0', '#frac{#pi}{4}', '#frac{#pi}{2}', '#frac{3#pi}{4}', '#pi', '#frac{5#pi}{4}', '#frac{3#pi}{2}', '#frac{7#pi}{4}'] : ['0', '#frac{2#pi}{3}', '#frac{4#pi}{3}'];\n let aligns = [12, 11, 21, 31, 32, 33, 23, 13];\n\n for (let n = 0; n < nmajor; ++n) {\n let angle = -n*2*Math.PI/nmajor - this.angle;\n this.draw_g.append('svg:path')\n .attr('d',`M0,0L${Math.round(this.szx*Math.cos(angle))},${Math.round(this.szy*Math.sin(angle))}`)\n .call(this.lineatt.func);\n\n let aindx = Math.round(16 -angle/Math.PI*4) % 8; // index in align table, here absolute angle is important\n\n this.drawText({ align: aligns[aindx],\n x: Math.round((this.szx+fontsize)*Math.cos(angle)),\n y: Math.round((this.szy + fontsize/this.szx*this.szy)*(Math.sin(angle))),\n text: lbls[n],\n color: this.getColor(polar.fPolarLabelColor), latex: 1 });\n }\n\n return this.finishTextDrawing();\n }).then(() => {\n\n nminor = Math.floor((polar.fNdivPol % 10000) / 100);\n\n if (nminor > 1)\n for (let n = 0; n < nmajor*nminor; ++n) {\n if (n % nminor === 0) continue;\n let angle = -n*2*Math.PI/nmajor/nminor - this.angle;\n this.draw_g.append('svg:path')\n .attr('d',`M0,0L${Math.round(this.szx*Math.cos(angle))},${Math.round(this.szy*Math.sin(angle))}`)\n .call(this.gridatt.func);\n }\n\n if (isBatchMode()) return;\n\n TooltipHandler.assign(this);\n\n let layer = this.getLayerSvg('primitives_layer'),\n interactive = layer.select('.interactive_ellipse');\n\n if (interactive.empty())\n interactive = layer.append('g')\n .classed('most_upper_primitives', true)\n .append('ellipse')\n .classed('interactive_ellipse', true)\n .attr('cx', 0)\n .attr('cy', 0)\n .style('fill', 'none')\n .style('pointer-events', 'visibleFill')\n .on('mouseenter', evnt => this.mouseEvent('enter', evnt))\n .on('mousemove', evnt => this.mouseEvent('move', evnt))\n .on('mouseleave', evnt => this.mouseEvent('leave', evnt));\n\n interactive.attr('rx', this.szx).attr('ry', this.szy);\n\n d3_select(interactive.node().parentNode).attr('transform', this.draw_g.attr('transform'));\n\n if (settings.Zooming && settings.ZoomWheel)\n interactive.on('wheel', evnt => this.mouseWheel(evnt));\n });\n }\n\n /** @summary Draw TGraphPolargram */\n static async draw(dom, polargram /*, opt*/) {\n\n let main = getElementMainPainter(dom);\n if (main) {\n if (main.getObject() === polargram)\n return main;\n throw Error('Cannot superimpose TGraphPolargram with any other drawings');\n }\n\n let painter = new TGraphPolargramPainter(dom, polargram);\n return ensureTCanvas(painter, false).then(() => {\n painter.setAsMainPainter();\n return painter.redraw();\n }).then(() => painter);\n }\n\n} // class TGraphPolargramPainter\n\n\n/**\n * @summary Painter for TGraphPolar objects.\n *\n * @private\n */\n\nclass TGraphPolarPainter extends ObjectPainter {\n\n /** @summary Redraw TGraphPolar */\n redraw() {\n this.drawGraphPolar();\n }\n\n /** @summary Decode options for drawing TGraphPolar */\n decodeOptions(opt) {\n\n let d = new DrawOptions(opt || 'L');\n\n if (!this.options) this.options = {};\n\n Object.assign(this.options, {\n mark: d.check('P'),\n err: d.check('E'),\n fill: d.check('F'),\n line: d.check('L'),\n curve: d.check('C')\n });\n\n this.storeDrawOpt(opt);\n }\n\n /** @summary Drawing TGraphPolar */\n drawGraphPolar() {\n let graph = this.getObject(),\n main = this.getMainPainter();\n\n if (!graph || !main?.$polargram) return;\n\n if (this.options.mark) this.createAttMarker({ attr: graph });\n if (this.options.err || this.options.line || this.options.curve) this.createAttLine({ attr: graph });\n if (this.options.fill) this.createAttFill({ attr: graph });\n\n this.createG();\n\n this.draw_g.attr('transform', main.draw_g.attr('transform'));\n\n let mpath = '', epath = '', lpath = '', bins = [];\n\n for (let n = 0; n < graph.fNpoints; ++n) {\n\n if (graph.fY[n] > main.scale_rmax) continue;\n\n if (this.options.err) {\n let pos1 = main.translate(graph.fX[n], graph.fY[n] - graph.fEY[n]),\n pos2 = main.translate(graph.fX[n], graph.fY[n] + graph.fEY[n]);\n epath += `M${pos1.x},${pos1.y}L${pos2.x},${pos2.y}`;\n\n pos1 = main.translate(graph.fX[n] + graph.fEX[n], graph.fY[n]);\n pos2 = main.translate(graph.fX[n] - graph.fEX[n], graph.fY[n]);\n\n epath += `M${pos1.x},${pos1.y}A${pos2.rx},${pos2.ry},0,0,1,${pos2.x},${pos2.y}`;\n }\n\n let pos = main.translate(graph.fX[n], graph.fY[n]);\n\n if (this.options.mark) {\n mpath += this.markeratt.create(pos.x, pos.y);\n }\n\n if (this.options.line || this.options.fill) {\n lpath += (lpath ? 'L' : 'M') + pos.x + ',' + pos.y;\n }\n\n if (this.options.curve) {\n pos.grx = pos.x;\n pos.gry = pos.y;\n bins.push(pos);\n }\n }\n\n if (this.options.fill && lpath)\n this.draw_g.append('svg:path')\n .attr('d', lpath + 'Z')\n .call(this.fillatt.func);\n\n if (this.options.line && lpath)\n this.draw_g.append('svg:path')\n .attr('d', lpath)\n .style('fill', 'none')\n .call(this.lineatt.func);\n\n if (this.options.curve && bins.length)\n this.draw_g.append('svg:path')\n .attr('d', buildSvgPath('bezier', bins).path)\n .style('fill', 'none')\n .call(this.lineatt.func);\n\n if (epath)\n this.draw_g.append('svg:path')\n .attr('d', epath)\n .style('fill','none')\n .call(this.lineatt.func);\n\n if (mpath)\n this.draw_g.append('svg:path')\n .attr('d', mpath)\n .call(this.markeratt.func);\n }\n\n /** @summary Create polargram object */\n createPolargram() {\n let polargram = create('TGraphPolargram'),\n gr = this.getObject();\n\n let rmin = gr.fY[0] || 0, rmax = rmin;\n for (let n = 0; n < gr.fNpoints; ++n) {\n rmin = Math.min(rmin, gr.fY[n] - gr.fEY[n]);\n rmax = Math.max(rmax, gr.fY[n] + gr.fEY[n]);\n }\n\n polargram.fRwrmin = rmin - (rmax-rmin)*0.1;\n polargram.fRwrmax = rmax + (rmax-rmin)*0.1;\n\n return polargram;\n }\n\n /** @summary Provide tooltip at specified point */\n extractTooltip(pnt) {\n if (!pnt) return null;\n\n let graph = this.getObject(),\n main = this.getMainPainter(),\n best_dist2 = 1e10, bestindx = -1, bestpos = null;\n\n for (let n = 0; n < graph.fNpoints; ++n) {\n let pos = main.translate(graph.fX[n], graph.fY[n]),\n dist2 = (pos.x-pnt.x)**2 + (pos.y-pnt.y)**2;\n if (dist2 < best_dist2) { best_dist2 = dist2; bestindx = n; bestpos = pos; }\n }\n\n let match_distance = 5;\n if (this.markeratt && this.markeratt.used) match_distance = this.markeratt.getFullSize();\n\n if (Math.sqrt(best_dist2) > match_distance) return null;\n\n let res = { name: this.getObject().fName, title: this.getObject().fTitle,\n x: bestpos.x, y: bestpos.y,\n color1: this.markeratt && this.markeratt.used ? this.markeratt.color : this.lineatt.color,\n exact: Math.sqrt(best_dist2) < 4,\n lines: [ this.getObjectHint() ],\n binindx: bestindx,\n menu_dist: match_distance,\n radius: match_distance\n };\n\n res.lines.push('r = ' + main.axisAsText('r', graph.fY[bestindx]));\n res.lines.push('phi = ' + main.axisAsText('phi',graph.fX[bestindx]));\n\n if (graph.fEY && graph.fEY[bestindx])\n res.lines.push('error r = ' + main.axisAsText('r', graph.fEY[bestindx]));\n\n if (graph.fEX && graph.fEX[bestindx])\n res.lines.push('error phi = ' + main.axisAsText('phi', graph.fEX[bestindx]));\n\n return res;\n }\n\n /** @summary Show tooltip */\n showTooltip(hint) {\n\n if (!this.draw_g) return;\n\n let ttcircle = this.draw_g.select('.tooltip_bin');\n\n if (!hint) {\n ttcircle.remove();\n return;\n }\n\n if (ttcircle.empty())\n ttcircle = this.draw_g.append('svg:ellipse')\n .attr('class','tooltip_bin')\n .style('pointer-events','none');\n\n hint.changed = ttcircle.property('current_bin') !== hint.binindx;\n\n if (hint.changed)\n ttcircle.attr('cx', hint.x)\n .attr('cy', hint.y)\n .attr('rx', Math.round(hint.radius))\n .attr('ry', Math.round(hint.radius))\n .style('fill', 'none')\n .style('stroke', hint.color1)\n .property('current_bin', hint.binindx);\n }\n\n /** @summary Process tooltip event */\n processTooltipEvent(pnt) {\n let hint = this.extractTooltip(pnt);\n if (!pnt || !pnt.disabled) this.showTooltip(hint);\n return hint;\n }\n\n /** @summary Draw TGraphPolar */\n static async draw(dom, graph, opt) {\n let painter = new TGraphPolarPainter(dom, graph);\n painter.decodeOptions(opt);\n\n let main = painter.getMainPainter();\n if (main && !main.$polargram) {\n console.error('Cannot superimpose TGraphPolar with plain histograms');\n return null;\n }\n\n let pr = Promise.resolve(null);\n if (!main) {\n if (!graph.fPolargram)\n graph.fPolargram = painter.createPolargram();\n pr = TGraphPolargramPainter.draw(dom, graph.fPolargram);\n }\n\n return pr.then(() => {\n painter.addToPadPrimitives();\n painter.drawGraphPolar();\n return painter;\n });\n }\n\n} // class TGraphPolarPainter\n\nexport { TGraphPolargramPainter, TGraphPolarPainter };\n"],"x_google_ignoreList":[0]} \ No newline at end of file diff --git a/docs/351.7dfe5ad1980ea70b.js.map b/docs/351.7dfe5ad1980ea70b.js.map deleted file mode 100644 index 290e1c66e..000000000 --- a/docs/351.7dfe5ad1980ea70b.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"351.7dfe5ad1980ea70b.js","mappings":"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","names":["TGraph2DPainter","ObjectPainter","decodeOptions","opt","gr","d","DrawOptions","this","options","res","Color","check","Line","Error","matchObjectType","Circles","Markers","fMarkerSize","fMarkerStyle","storeDrawOpt","createHistogram","getObject","asymm","xmin","fX","xmax","ymin","fY","ymax","zmin","fZ","zmax","p","fNpoints","x","y","z","Math","min","fEXlow","fEX","max","fEXhigh","fEYlow","fEY","fEYhigh","fEZlow","fEZ","fEZhigh","dx","dy","dz","uxmin","uxmax","uymin","uymax","uzmin","uzmax","graph","fMinimum","kNoZoom","fMaximum","histo","fName","fTitle","fXaxis","fXmin","fXmax","fYaxis","fZaxis","kNoStats","BIT","fBits","graph2DTooltip","intersect","Number","isInteger","index","console","error","REVISION","indx","floor","nvertex","length","sqr","v","painter","grx","gry","grz","check_next","point","grx1","gry1","grz1","x1","scale0","x2","y1","y2","z1","z2","color","tip_color","lines","tip_name","axisAsText","redraw","main","_this","getMainPainter","fp","getFramePainter","step","mode3d","countSelected","cnt","i","scale_xmin","scale_xmax","scale_ymin","scale_ymax","settings","webgl","numselected","scale_zmin","scale_zmax","sizelimit","markeratt","TAttMarkerHandler","palette","levels","scale","size_x3d","getFullSize","promises","usesvg","getContourLevels","getHistPalette","lvl","lvl_zmin","lvl_zmax","size","pnts","select","Int32Array","icnt","err","line","ierr","iline","PointsCreator","Float32Array","addPoint","lcolor","getColor","fLineColor","material","LineBasicMaterial","linewidth","fLineWidth","linemesh","createLineSegments","toplevel","add","getObjectHint","fMarkerColor","tooltip","errmesh","fcolor","calcColor","pr","createPoints","style","then","mesh","push","Promise","all","render3D","static","dom","promise","resolve","fHistogram","TH2Painter","ownhisto","addToPadPrimitives"],"sourceRoot":"webpack:///","sources":["../node_modules/jsroot/modules/hist/TGraph2DPainter.mjs"],"sourcesContent":["import { BIT, settings, createHistogram, kNoZoom } from '../core.mjs';\nimport { REVISION, Color, LineBasicMaterial } from '../three.mjs';\nimport { DrawOptions } from '../base/BasePainter.mjs';\nimport { ObjectPainter } from '../base/ObjectPainter.mjs';\nimport { TAttMarkerHandler } from '../base/TAttMarkerHandler.mjs';\nimport { TH2Painter } from './TH2Painter.mjs';\nimport { createLineSegments, PointsCreator } from '../base/base3d.mjs';\n\n/**\n * @summary Painter for TGraph2D classes\n * @private\n */\n\nclass TGraph2DPainter extends ObjectPainter {\n\n /** @summary Decode options string */\n decodeOptions(opt, gr) {\n let d = new DrawOptions(opt);\n\n if (!this.options)\n this.options = {};\n\n let res = this.options;\n\n res.Color = d.check('COL');\n res.Line = d.check('LINE');\n res.Error = d.check('ERR') && (this.matchObjectType('TGraph2DErrors') || this.matchObjectType('TGraph2DAsymmErrors'));\n res.Circles = d.check('P0');\n res.Markers = d.check('P');\n\n if (!res.Markers && !res.Error && !res.Circles && !res.Line) {\n if ((gr.fMarkerSize == 1) && (gr.fMarkerStyle == 1))\n res.Circles = true;\n else\n res.Markers = true;\n }\n if (!res.Markers) res.Color = false;\n\n this.storeDrawOpt(opt);\n }\n\n /** @summary Create histogram for axes drawing */\n createHistogram() {\n let gr = this.getObject(),\n asymm = this.matchObjectType('TGraph2DAsymmErrors'),\n xmin = gr.fX[0], xmax = xmin,\n ymin = gr.fY[0], ymax = ymin,\n zmin = gr.fZ[0], zmax = zmin;\n\n for (let p = 0; p < gr.fNpoints;++p) {\n\n let x = gr.fX[p], y = gr.fY[p], z = gr.fZ[p];\n\n if (this.options.Error) {\n xmin = Math.min(xmin, x - (asymm ? gr.fEXlow[p] : gr.fEX[p]));\n xmax = Math.max(xmax, x + (asymm ? gr.fEXhigh[p] : gr.fEX[p]));\n ymin = Math.min(ymin, y - (asymm ? gr.fEYlow[p] : gr.fEY[p]));\n ymax = Math.max(ymax, y + (asymm ? gr.fEYhigh[p] : gr.fEY[p]));\n zmin = Math.min(zmin, z - (asymm ? gr.fEZlow[p] : gr.fEZ[p]));\n zmax = Math.max(zmax, z + (asymm ? gr.fEZhigh[p] : gr.fEZ[p]));\n } else {\n xmin = Math.min(xmin, x);\n xmax = Math.max(xmax, x);\n ymin = Math.min(ymin, y);\n ymax = Math.max(ymax, y);\n zmin = Math.min(zmin, z);\n zmax = Math.max(zmax, z);\n }\n }\n\n if (xmin >= xmax) xmax = xmin+1;\n if (ymin >= ymax) ymax = ymin+1;\n if (zmin >= zmax) zmax = zmin+1;\n let dx = (xmax-xmin)*0.02, dy = (ymax-ymin)*0.02, dz = (zmax-zmin)*0.02,\n uxmin = xmin - dx, uxmax = xmax + dx,\n uymin = ymin - dy, uymax = ymax + dy,\n uzmin = zmin - dz, uzmax = zmax + dz;\n\n if ((uxmin < 0) && (xmin >= 0)) uxmin = xmin*0.98;\n if ((uxmax > 0) && (xmax <= 0)) uxmax = 0;\n\n if ((uymin < 0) && (ymin >= 0)) uymin = ymin*0.98;\n if ((uymax > 0) && (ymax <= 0)) uymax = 0;\n\n if ((uzmin < 0) && (zmin >= 0)) uzmin = zmin*0.98;\n if ((uzmax > 0) && (zmax <= 0)) uzmax = 0;\n\n let graph = this.getObject();\n\n if (graph.fMinimum != kNoZoom) uzmin = graph.fMinimum;\n if (graph.fMaximum != kNoZoom) uzmax = graph.fMaximum;\n\n let histo = createHistogram('TH2I', 10, 10);\n histo.fName = graph.fName + '_h';\n histo.fTitle = graph.fTitle;\n histo.fXaxis.fXmin = uxmin;\n histo.fXaxis.fXmax = uxmax;\n histo.fYaxis.fXmin = uymin;\n histo.fYaxis.fXmax = uymax;\n histo.fZaxis.fXmin = uzmin;\n histo.fZaxis.fXmax = uzmax;\n histo.fMinimum = uzmin;\n histo.fMaximum = uzmax;\n let kNoStats = BIT(9);\n histo.fBits = histo.fBits | kNoStats;\n return histo;\n }\n\n /** @summary Function handles tooltips in the mesh */\n graph2DTooltip(intersect) {\n if (!Number.isInteger(intersect.index)) {\n console.error(`intersect.index not provided, three.js version ${REVISION}`);\n return null;\n }\n\n let indx = Math.floor(intersect.index / this.nvertex);\n if ((indx < 0) || (indx >= this.index.length)) return null;\n let sqr = v => v*v;\n\n indx = this.index[indx];\n\n let p = this.painter, gr = this.graph,\n grx = p.grx(gr.fX[indx]),\n gry = p.gry(gr.fY[indx]),\n grz = p.grz(gr.fZ[indx]);\n\n if (this.check_next && indx+1 {\n let cnt = 0;\n for (let i = 0; i < graph.fNpoints; ++i) {\n if ((graph.fX[i] < fp.scale_xmin) || (graph.fX[i] > fp.scale_xmax) ||\n (graph.fY[i] < fp.scale_ymin) || (graph.fY[i] > fp.scale_ymax) ||\n (graph.fZ[i] < zmin) || (graph.fZ[i] >= zmax)) continue;\n\n ++cnt;\n }\n return cnt;\n };\n\n // try to define scale-down factor\n if ((settings.OptimizeDraw > 0) && !fp.webgl) {\n let numselected = countSelected(fp.scale_zmin, fp.scale_zmax),\n sizelimit = 50000;\n\n if (numselected > sizelimit) {\n step = Math.floor(numselected / sizelimit);\n if (step <= 2) step = 2;\n }\n }\n\n let markeratt = new TAttMarkerHandler(graph),\n palette = null,\n levels = [fp.scale_zmin, fp.scale_zmax],\n scale = fp.size_x3d / 100 * markeratt.getFullSize(),\n promises = [];\n\n if (this.options.Circles) scale = 0.06*fp.size_x3d;\n\n if (fp.usesvg) scale *= 0.3;\n\n if (this.options.Color) {\n levels = main.getContourLevels();\n palette = main.getHistPalette();\n }\n\n for (let lvl = 0; lvl < levels.length-1; ++lvl) {\n\n let lvl_zmin = Math.max(levels[lvl], fp.scale_zmin),\n lvl_zmax = Math.min(levels[lvl+1], fp.scale_zmax);\n\n if (lvl_zmin >= lvl_zmax) continue;\n\n let size = Math.floor(countSelected(lvl_zmin, lvl_zmax) / step),\n pnts = null, select = 0,\n index = new Int32Array(size), icnt = 0,\n err = null, asymm = false, line = null, ierr = 0, iline = 0;\n\n if (this.options.Markers || this.options.Circles)\n pnts = new PointsCreator(size, fp.webgl, scale/3);\n\n if (this.options.Error) {\n err = new Float32Array(size*6*3);\n asymm = this.matchObjectType('TGraph2DAsymmErrors');\n }\n\n if (this.options.Line)\n line = new Float32Array((size-1)*6);\n\n for (let i = 0; i < graph.fNpoints; ++i) {\n if ((graph.fX[i] < fp.scale_xmin) || (graph.fX[i] > fp.scale_xmax) ||\n (graph.fY[i] < fp.scale_ymin) || (graph.fY[i] > fp.scale_ymax) ||\n (graph.fZ[i] < lvl_zmin) || (graph.fZ[i] >= lvl_zmax)) continue;\n\n if (step > 1) {\n select = (select+1) % step;\n if (select !== 0) continue;\n }\n\n index[icnt++] = i; // remember point index for tooltip\n\n let x = fp.grx(graph.fX[i]),\n y = fp.gry(graph.fY[i]),\n z = fp.grz(graph.fZ[i]);\n\n if (pnts) pnts.addPoint(x,y,z);\n\n if (err) {\n err[ierr] = fp.grx(graph.fX[i] - (asymm ? graph.fEXlow[i] : graph.fEX[i]));\n err[ierr+1] = y;\n err[ierr+2] = z;\n err[ierr+3] = fp.grx(graph.fX[i] + (asymm ? graph.fEXhigh[i] : graph.fEX[i]));\n err[ierr+4] = y;\n err[ierr+5] = z;\n ierr+=6;\n err[ierr] = x;\n err[ierr+1] = fp.gry(graph.fY[i] - (asymm ? graph.fEYlow[i] : graph.fEY[i]));\n err[ierr+2] = z;\n err[ierr+3] = x;\n err[ierr+4] = fp.gry(graph.fY[i] + (asymm ? graph.fEYhigh[i] : graph.fEY[i]));\n err[ierr+5] = z;\n ierr+=6;\n err[ierr] = x;\n err[ierr+1] = y;\n err[ierr+2] = fp.grz(graph.fZ[i] - (asymm ? graph.fEZlow[i] : graph.fEZ[i]));\n err[ierr+3] = x;\n err[ierr+4] = y;\n err[ierr+5] = fp.grz(graph.fZ[i] + (asymm ? graph.fEZhigh[i] : graph.fEZ[i]));\n ierr+=6;\n }\n\n if (line) {\n if (iline>=6) {\n line[iline] = line[iline-3];\n line[iline+1] = line[iline-2];\n line[iline+2] = line[iline-1];\n iline+=3;\n }\n line[iline] = x;\n line[iline+1] = y;\n line[iline+2] = z;\n iline+=3;\n }\n }\n\n if (line && (iline > 3) && (line.length == iline)) {\n let lcolor = this.getColor(graph.fLineColor),\n material = new LineBasicMaterial({ color: new Color(lcolor), linewidth: graph.fLineWidth }),\n linemesh = createLineSegments(line, material);\n fp.toplevel.add(linemesh);\n\n linemesh.graph = graph;\n linemesh.index = index;\n linemesh.painter = fp;\n linemesh.scale0 = 0.7*scale;\n linemesh.tip_name = this.getObjectHint();\n linemesh.tip_color = (graph.fMarkerColor === 3) ? 0xFF0000 : 0x00FF00;\n linemesh.nvertex = 2;\n linemesh.check_next = true;\n\n linemesh.tooltip = this.graph2DTooltip;\n }\n\n if (err) {\n let lcolor = this.getColor(graph.fLineColor),\n material = new LineBasicMaterial({ color: new Color(lcolor), linewidth: graph.fLineWidth }),\n errmesh = createLineSegments(err, material);\n fp.toplevel.add(errmesh);\n\n errmesh.graph = graph;\n errmesh.index = index;\n errmesh.painter = fp;\n errmesh.scale0 = 0.7*scale;\n errmesh.tip_name = this.getObjectHint();\n errmesh.tip_color = (graph.fMarkerColor === 3) ? 0xFF0000 : 0x00FF00;\n errmesh.nvertex = 6;\n\n errmesh.tooltip = this.graph2DTooltip;\n }\n\n if (pnts) {\n let fcolor = 'blue';\n\n if (!this.options.Circles)\n fcolor = palette ? palette.calcColor(lvl, levels.length)\n : this.getColor(graph.fMarkerColor);\n\n let pr = pnts.createPoints({ color: fcolor, style: this.options.Circles ? 4 : graph.fMarkerStyle }).then(mesh => {\n mesh.graph = graph;\n mesh.painter = fp;\n mesh.tip_color = (graph.fMarkerColor === 3) ? 0xFF0000 : 0x00FF00;\n mesh.scale0 = 0.3*scale;\n mesh.index = index;\n\n mesh.tip_name = this.getObjectHint();\n mesh.tooltip = this.graph2DTooltip;\n fp.toplevel.add(mesh);\n });\n\n promises.push(pr);\n }\n }\n\n return Promise.all(promises).then(() => {\n fp.render3D(100);\n return this;\n });\n }\n\n /** @summary draw TGraph2D object */\n static async draw(dom, gr, opt) {\n let painter = new TGraph2DPainter(dom, gr);\n painter.decodeOptions(opt, gr);\n\n let promise = Promise.resolve(true);\n\n if (!painter.getMainPainter()) {\n if (!gr.fHistogram)\n gr.fHistogram = painter.createHistogram();\n promise = TH2Painter.draw(dom, gr.fHistogram, 'lego;axis');\n painter.ownhisto = true;\n }\n\n return promise.then(() => {\n painter.addToPadPrimitives();\n return painter.redraw();\n });\n }\n\n} // class TGraph2DPainter\n\nexport { TGraph2DPainter };\n"],"x_google_ignoreList":[0]} \ No newline at end of file diff --git a/docs/351.7dfe5ad1980ea70b.js b/docs/351.a24ea1225217f8ac.js similarity index 57% rename from docs/351.7dfe5ad1980ea70b.js rename to docs/351.a24ea1225217f8ac.js index 7d19860fa..866715727 100644 --- a/docs/351.7dfe5ad1980ea70b.js +++ b/docs/351.a24ea1225217f8ac.js @@ -1,2 +1,2 @@ -"use strict";(self.webpackChunkphoenix_app=self.webpackChunkphoenix_app||[]).push([[351],{7351:(H,Y,T)=>{T.r(Y),T.d(Y,{TGraph2DPainter:()=>w});var j=T(4788),Z=T(9542),v=T(9900),A=T(3675),L=T(6458),b=T(6417),F=T(8189),k=T(1968);class w extends L.tK{decodeOptions(i,a){let t=new A.pc(i);this.options||(this.options={});let e=this.options;e.Color=t.check("COL"),e.Line=t.check("LINE"),e.Error=t.check("ERR")&&(this.matchObjectType("TGraph2DErrors")||this.matchObjectType("TGraph2DAsymmErrors")),e.Circles=t.check("P0"),e.Markers=t.check("P"),!e.Markers&&!e.Error&&!e.Circles&&!e.Line&&(1==a.fMarkerSize&&1==a.fMarkerStyle?e.Circles=!0:e.Markers=!0),e.Markers||(e.Color=!1),this.storeDrawOpt(i)}createHistogram(){let i=this.getObject(),a=this.matchObjectType("TGraph2DAsymmErrors"),t=i.fX[0],e=t,n=i.fY[0],_=n,c=i.fZ[0],x=c;for(let s=0;s=e&&(e=t+1),n>=_&&(_=n+1),c>=x&&(x=c+1);let p=.02*(e-t),d=.02*(_-n),X=.02*(x-c),g=t-p,u=e+p,C=n-d,E=_+d,z=c-X,O=x+X;g<0&&t>=0&&(g=.98*t),u>0&&e<=0&&(u=0),C<0&&n>=0&&(C=.98*n),E>0&&_<=0&&(E=0),z<0&&c>=0&&(z=.98*c),O>0&&x<=0&&(O=0);let P=this.getObject();P.fMinimum!=Z.kNoZoom&&(z=P.fMinimum),P.fMaximum!=Z.kNoZoom&&(O=P.fMaximum);let M=(0,Z.createHistogram)("TH2I",10,10);M.fName=P.fName+"_h",M.fTitle=P.fTitle,M.fXaxis.fXmin=g,M.fXaxis.fXmax=u,M.fYaxis.fXmin=C,M.fYaxis.fXmax=E,M.fZaxis.fXmin=z,M.fZaxis.fXmax=O,M.fMinimum=z,M.fMaximum=O;let f=(0,Z.BIT)(9);return M.fBits=M.fBits|f,M}graph2DTooltip(i){if(!Number.isInteger(i.index))return console.error(`intersect.index not provided, three.js version ${v.UZH}`),null;let a=Math.floor(i.index/this.nvertex);if(a<0||a>=this.index.length)return null;let t=p=>p*p;a=this.index[a];let e=this.painter,n=this.graph,_=e.grx(n.fX[a]),c=e.gry(n.fY[a]),x=e.grz(n.fZ[a]);if(this.check_next&&a+1{let C=0;for(let E=0;Et.scale_xmax||e.fY[E]t.scale_ymax||e.fZ[E]=u||++C;return C};if(Z.settings.OptimizeDraw>0&&!t.webgl){let g=_(t.scale_zmin,t.scale_zmax),u=5e4;g>u&&(n=Math.floor(g/u),n<=2&&(n=2))}let c=new b.M(e),x=null,p=[t.scale_zmin,t.scale_zmax],d=t.size_x3d/100*c.getFullSize(),X=[];i.options.Circles&&(d=.06*t.size_x3d),t.usesvg&&(d*=.3),i.options.Color&&(p=a.getContourLevels(),x=a.getHistPalette());for(let g=0;g=C)continue;let E=Math.floor(_(u,C)/n),z=null,O=0,P=new Int32Array(E),M=0,f=null,s=!1,m=null,o=0,h=0;(i.options.Markers||i.options.Circles)&&(z=new k.B_(E,t.webgl,d/3)),i.options.Error&&(f=new Float32Array(6*E*3),s=i.matchObjectType("TGraph2DAsymmErrors")),i.options.Line&&(m=new Float32Array(6*(E-1)));for(let r=0;rt.scale_xmax||e.fY[r]t.scale_ymax||e.fZ[r]=C||n>1&&(O=(O+1)%n,0!==O))continue;P[M++]=r;let y=t.grx(e.fX[r]),l=t.gry(e.fY[r]),D=t.grz(e.fZ[r]);z&&z.addPoint(y,l,D),f&&(f[o]=t.grx(e.fX[r]-(s?e.fEXlow[r]:e.fEX[r])),f[o+1]=l,f[o+2]=D,f[o+3]=t.grx(e.fX[r]+(s?e.fEXhigh[r]:e.fEX[r])),f[o+4]=l,f[o+5]=D,o+=6,f[o]=y,f[o+1]=t.gry(e.fY[r]-(s?e.fEYlow[r]:e.fEY[r])),f[o+2]=D,f[o+3]=y,f[o+4]=t.gry(e.fY[r]+(s?e.fEYhigh[r]:e.fEY[r])),f[o+5]=D,o+=6,f[o]=y,f[o+1]=l,f[o+2]=t.grz(e.fZ[r]-(s?e.fEZlow[r]:e.fEZ[r])),f[o+3]=y,f[o+4]=l,f[o+5]=t.grz(e.fZ[r]+(s?e.fEZhigh[r]:e.fEZ[r])),o+=6),m&&(h>=6&&(m[h]=m[h-3],m[h+1]=m[h-2],m[h+2]=m[h-1],h+=3),m[h]=y,m[h+1]=l,m[h+2]=D,h+=3)}if(m&&h>3&&m.length==h){let r=i.getColor(e.fLineColor),y=new v.nls({color:new v.Ilk(r),linewidth:e.fLineWidth}),l=(0,k.Qy)(m,y);t.toplevel.add(l),l.graph=e,l.index=P,l.painter=t,l.scale0=.7*d,l.tip_name=i.getObjectHint(),l.tip_color=3===e.fMarkerColor?16711680:65280,l.nvertex=2,l.check_next=!0,l.tooltip=i.graph2DTooltip}if(f){let r=i.getColor(e.fLineColor),y=new v.nls({color:new v.Ilk(r),linewidth:e.fLineWidth}),l=(0,k.Qy)(f,y);t.toplevel.add(l),l.graph=e,l.index=P,l.painter=t,l.scale0=.7*d,l.tip_name=i.getObjectHint(),l.tip_color=3===e.fMarkerColor?16711680:65280,l.nvertex=6,l.tooltip=i.graph2DTooltip}if(z){let r="blue";i.options.Circles||(r=x?x.calcColor(g,p.length):i.getColor(e.fMarkerColor));let y=z.createPoints({color:r,style:i.options.Circles?4:e.fMarkerStyle}).then(l=>{l.graph=e,l.painter=t,l.tip_color=3===e.fMarkerColor?16711680:65280,l.scale0=.3*d,l.index=P,l.tip_name=i.getObjectHint(),l.tooltip=i.graph2DTooltip,t.toplevel.add(l)});X.push(y)}}return Promise.all(X).then(()=>(t.render3D(100),i))})()}static draw(i,a,t){return(0,j.Z)(function*(){let e=new w(i,a);e.decodeOptions(t,a);let n=Promise.resolve(!0);return e.getMainPainter()||(a.fHistogram||(a.fHistogram=e.createHistogram()),n=F.TH2Painter.draw(i,a.fHistogram,"lego;axis"),e.ownhisto=!0),n.then(()=>(e.addToPadPrimitives(),e.redraw()))})()}}}}]); -//# sourceMappingURL=351.7dfe5ad1980ea70b.js.map \ No newline at end of file +"use strict";(self.webpackChunkphoenix_app=self.webpackChunkphoenix_app||[]).push([[351],{7351:(H,Y,T)=>{T.r(Y),T.d(Y,{TGraph2DPainter:()=>w});var j=T(5835),Z=T(9542),v=T(9900),A=T(3675),L=T(6458),b=T(6417),F=T(8189),k=T(1968);class w extends L.tK{decodeOptions(i,a){let t=new A.pc(i);this.options||(this.options={});let e=this.options;e.Color=t.check("COL"),e.Line=t.check("LINE"),e.Error=t.check("ERR")&&(this.matchObjectType("TGraph2DErrors")||this.matchObjectType("TGraph2DAsymmErrors")),e.Circles=t.check("P0"),e.Markers=t.check("P"),!e.Markers&&!e.Error&&!e.Circles&&!e.Line&&(1==a.fMarkerSize&&1==a.fMarkerStyle?e.Circles=!0:e.Markers=!0),e.Markers||(e.Color=!1),this.storeDrawOpt(i)}createHistogram(){let i=this.getObject(),a=this.matchObjectType("TGraph2DAsymmErrors"),t=i.fX[0],e=t,n=i.fY[0],p=n,c=i.fZ[0],x=c;for(let s=0;s=e&&(e=t+1),n>=p&&(p=n+1),c>=x&&(x=c+1);let _=.02*(e-t),M=.02*(p-n),X=.02*(x-c),g=t-_,u=e+_,C=n-M,d=p+M,z=c-X,O=x+X;g<0&&t>=0&&(g=.98*t),u>0&&e<=0&&(u=0),C<0&&n>=0&&(C=.98*n),d>0&&p<=0&&(d=0),z<0&&c>=0&&(z=.98*c),O>0&&x<=0&&(O=0);let P=this.getObject();P.fMinimum!=Z.kNoZoom&&(z=P.fMinimum),P.fMaximum!=Z.kNoZoom&&(O=P.fMaximum);let E=(0,Z.createHistogram)("TH2I",10,10);E.fName=P.fName+"_h",E.fTitle=P.fTitle,E.fXaxis.fXmin=g,E.fXaxis.fXmax=u,E.fYaxis.fXmin=C,E.fYaxis.fXmax=d,E.fZaxis.fXmin=z,E.fZaxis.fXmax=O,E.fMinimum=z,E.fMaximum=O;let f=(0,Z.BIT)(9);return E.fBits=E.fBits|f,E}graph2DTooltip(i){if(!Number.isInteger(i.index))return console.error(`intersect.index not provided, three.js version ${v.UZH}`),null;let a=Math.floor(i.index/this.nvertex);if(a<0||a>=this.index.length)return null;let t=_=>_*_;a=this.index[a];let e=this.painter,n=this.graph,p=e.grx(n.fX[a]),c=e.gry(n.fY[a]),x=e.grz(n.fZ[a]);if(this.check_next&&a+1{let C=0;for(let d=0;dt.scale_xmax||e.fY[d]t.scale_ymax||e.fZ[d]=u||++C;return C};if(Z.settings.OptimizeDraw>0&&!t.webgl){let g=p(t.scale_zmin,t.scale_zmax),u=5e4;g>u&&(n=Math.floor(g/u),n<=2&&(n=2))}let c=new b.M(e),x=null,_=[t.scale_zmin,t.scale_zmax],M=t.size_x3d/100*c.getFullSize(),X=[];i.options.Circles&&(M=.06*t.size_x3d),t.usesvg&&(M*=.3),i.options.Color&&(_=a.getContourLevels(),x=a.getHistPalette());for(let g=0;g<_.length-1;++g){let u=Math.max(_[g],t.scale_zmin),C=Math.min(_[g+1],t.scale_zmax);if(u>=C)continue;let d=Math.floor(p(u,C)/n),z=null,O=0,P=new Int32Array(d),E=0,f=null,s=!1,m=null,o=0,h=0;(i.options.Markers||i.options.Circles)&&(z=new k.B_(d,t.webgl,M/3)),i.options.Error&&(f=new Float32Array(6*d*3),s=i.matchObjectType("TGraph2DAsymmErrors")),i.options.Line&&(m=new Float32Array(6*(d-1)));for(let r=0;rt.scale_xmax||e.fY[r]t.scale_ymax||e.fZ[r]=C||n>1&&(O=(O+1)%n,0!==O))continue;P[E++]=r;let y=t.grx(e.fX[r]),l=t.gry(e.fY[r]),D=t.grz(e.fZ[r]);z&&z.addPoint(y,l,D),f&&(f[o]=t.grx(e.fX[r]-(s?e.fEXlow[r]:e.fEX[r])),f[o+1]=l,f[o+2]=D,f[o+3]=t.grx(e.fX[r]+(s?e.fEXhigh[r]:e.fEX[r])),f[o+4]=l,f[o+5]=D,o+=6,f[o]=y,f[o+1]=t.gry(e.fY[r]-(s?e.fEYlow[r]:e.fEY[r])),f[o+2]=D,f[o+3]=y,f[o+4]=t.gry(e.fY[r]+(s?e.fEYhigh[r]:e.fEY[r])),f[o+5]=D,o+=6,f[o]=y,f[o+1]=l,f[o+2]=t.grz(e.fZ[r]-(s?e.fEZlow[r]:e.fEZ[r])),f[o+3]=y,f[o+4]=l,f[o+5]=t.grz(e.fZ[r]+(s?e.fEZhigh[r]:e.fEZ[r])),o+=6),m&&(h>=6&&(m[h]=m[h-3],m[h+1]=m[h-2],m[h+2]=m[h-1],h+=3),m[h]=y,m[h+1]=l,m[h+2]=D,h+=3)}if(m&&h>3&&m.length==h){let r=i.getColor(e.fLineColor),y=new v.nls({color:new v.Ilk(r),linewidth:e.fLineWidth}),l=(0,k.Qy)(m,y);t.toplevel.add(l),l.graph=e,l.index=P,l.painter=t,l.scale0=.7*M,l.tip_name=i.getObjectHint(),l.tip_color=3===e.fMarkerColor?16711680:65280,l.nvertex=2,l.check_next=!0,l.tooltip=i.graph2DTooltip}if(f){let r=i.getColor(e.fLineColor),y=new v.nls({color:new v.Ilk(r),linewidth:e.fLineWidth}),l=(0,k.Qy)(f,y);t.toplevel.add(l),l.graph=e,l.index=P,l.painter=t,l.scale0=.7*M,l.tip_name=i.getObjectHint(),l.tip_color=3===e.fMarkerColor?16711680:65280,l.nvertex=6,l.tooltip=i.graph2DTooltip}if(z){let r="blue";i.options.Circles||(r=x?x.calcColor(g,_.length):i.getColor(e.fMarkerColor));let y=z.createPoints({color:r,style:i.options.Circles?4:e.fMarkerStyle}).then(l=>{l.graph=e,l.painter=t,l.tip_color=3===e.fMarkerColor?16711680:65280,l.scale0=.3*M,l.index=P,l.tip_name=i.getObjectHint(),l.tooltip=i.graph2DTooltip,t.toplevel.add(l)});X.push(y)}}return Promise.all(X).then(()=>(t.render3D(100),i))})()}static draw(i,a,t){return(0,j.Z)(function*(){let e=new w(i,a);e.decodeOptions(t,a);let n=Promise.resolve(!0);return e.getMainPainter()||(a.fHistogram||(a.fHistogram=e.createHistogram()),n=F.TH2Painter.draw(i,a.fHistogram,"lego;axis"),e.ownhisto=!0),n.then(()=>(e.addToPadPrimitives(),e.redraw()))})()}}}}]); +//# sourceMappingURL=351.a24ea1225217f8ac.js.map \ No newline at end of file diff --git a/docs/351.a24ea1225217f8ac.js.map b/docs/351.a24ea1225217f8ac.js.map new file mode 100644 index 000000000..839ef88f4 --- /dev/null +++ b/docs/351.a24ea1225217f8ac.js.map @@ -0,0 +1 @@ +{"version":3,"file":"351.a24ea1225217f8ac.js","mappings":"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","names":["TGraph2DPainter","ObjectPainter","decodeOptions","opt","gr","d","DrawOptions","this","options","res","Color","check","Line","Error","matchObjectType","Circles","Markers","fMarkerSize","fMarkerStyle","storeDrawOpt","createHistogram","getObject","asymm","xmin","fX","xmax","ymin","fY","ymax","zmin","fZ","zmax","p","fNpoints","x","y","z","Math","min","fEXlow","fEX","max","fEXhigh","fEYlow","fEY","fEYhigh","fEZlow","fEZ","fEZhigh","dx","dy","dz","uxmin","uxmax","uymin","uymax","uzmin","uzmax","graph","fMinimum","kNoZoom","fMaximum","histo","fName","fTitle","fXaxis","fXmin","fXmax","fYaxis","fZaxis","kNoStats","BIT","fBits","graph2DTooltip","intersect","Number","isInteger","index","console","error","REVISION","indx","floor","nvertex","length","sqr","v","painter","grx","gry","grz","check_next","point","grx1","gry1","grz1","x1","scale0","x2","y1","y2","z1","z2","color","tip_color","lines","tip_name","axisAsText","redraw","main","_this","getMainPainter","fp","getFramePainter","step","mode3d","countSelected","cnt","i","scale_xmin","scale_xmax","scale_ymin","scale_ymax","settings","webgl","numselected","scale_zmin","scale_zmax","sizelimit","markeratt","TAttMarkerHandler","palette","levels","scale","size_x3d","getFullSize","promises","usesvg","getContourLevels","getHistPalette","lvl","lvl_zmin","lvl_zmax","size","pnts","select","Int32Array","icnt","err","line","ierr","iline","PointsCreator","Float32Array","addPoint","lcolor","getColor","fLineColor","material","LineBasicMaterial","linewidth","fLineWidth","linemesh","createLineSegments","toplevel","add","getObjectHint","fMarkerColor","tooltip","errmesh","fcolor","calcColor","pr","createPoints","style","then","mesh","push","Promise","all","render3D","static","dom","promise","resolve","fHistogram","TH2Painter","ownhisto","addToPadPrimitives"],"sourceRoot":"webpack:///","sources":["../node_modules/jsroot/modules/hist/TGraph2DPainter.mjs"],"sourcesContent":["import { BIT, settings, createHistogram, kNoZoom } from '../core.mjs';\nimport { REVISION, Color, LineBasicMaterial } from '../three.mjs';\nimport { DrawOptions } from '../base/BasePainter.mjs';\nimport { ObjectPainter } from '../base/ObjectPainter.mjs';\nimport { TAttMarkerHandler } from '../base/TAttMarkerHandler.mjs';\nimport { TH2Painter } from './TH2Painter.mjs';\nimport { createLineSegments, PointsCreator } from '../base/base3d.mjs';\n\n/**\n * @summary Painter for TGraph2D classes\n * @private\n */\n\nclass TGraph2DPainter extends ObjectPainter {\n\n /** @summary Decode options string */\n decodeOptions(opt, gr) {\n let d = new DrawOptions(opt);\n\n if (!this.options)\n this.options = {};\n\n let res = this.options;\n\n res.Color = d.check('COL');\n res.Line = d.check('LINE');\n res.Error = d.check('ERR') && (this.matchObjectType('TGraph2DErrors') || this.matchObjectType('TGraph2DAsymmErrors'));\n res.Circles = d.check('P0');\n res.Markers = d.check('P');\n\n if (!res.Markers && !res.Error && !res.Circles && !res.Line) {\n if ((gr.fMarkerSize == 1) && (gr.fMarkerStyle == 1))\n res.Circles = true;\n else\n res.Markers = true;\n }\n if (!res.Markers) res.Color = false;\n\n this.storeDrawOpt(opt);\n }\n\n /** @summary Create histogram for axes drawing */\n createHistogram() {\n let gr = this.getObject(),\n asymm = this.matchObjectType('TGraph2DAsymmErrors'),\n xmin = gr.fX[0], xmax = xmin,\n ymin = gr.fY[0], ymax = ymin,\n zmin = gr.fZ[0], zmax = zmin;\n\n for (let p = 0; p < gr.fNpoints;++p) {\n\n let x = gr.fX[p], y = gr.fY[p], z = gr.fZ[p];\n\n if (this.options.Error) {\n xmin = Math.min(xmin, x - (asymm ? gr.fEXlow[p] : gr.fEX[p]));\n xmax = Math.max(xmax, x + (asymm ? gr.fEXhigh[p] : gr.fEX[p]));\n ymin = Math.min(ymin, y - (asymm ? gr.fEYlow[p] : gr.fEY[p]));\n ymax = Math.max(ymax, y + (asymm ? gr.fEYhigh[p] : gr.fEY[p]));\n zmin = Math.min(zmin, z - (asymm ? gr.fEZlow[p] : gr.fEZ[p]));\n zmax = Math.max(zmax, z + (asymm ? gr.fEZhigh[p] : gr.fEZ[p]));\n } else {\n xmin = Math.min(xmin, x);\n xmax = Math.max(xmax, x);\n ymin = Math.min(ymin, y);\n ymax = Math.max(ymax, y);\n zmin = Math.min(zmin, z);\n zmax = Math.max(zmax, z);\n }\n }\n\n if (xmin >= xmax) xmax = xmin+1;\n if (ymin >= ymax) ymax = ymin+1;\n if (zmin >= zmax) zmax = zmin+1;\n let dx = (xmax-xmin)*0.02, dy = (ymax-ymin)*0.02, dz = (zmax-zmin)*0.02,\n uxmin = xmin - dx, uxmax = xmax + dx,\n uymin = ymin - dy, uymax = ymax + dy,\n uzmin = zmin - dz, uzmax = zmax + dz;\n\n if ((uxmin < 0) && (xmin >= 0)) uxmin = xmin*0.98;\n if ((uxmax > 0) && (xmax <= 0)) uxmax = 0;\n\n if ((uymin < 0) && (ymin >= 0)) uymin = ymin*0.98;\n if ((uymax > 0) && (ymax <= 0)) uymax = 0;\n\n if ((uzmin < 0) && (zmin >= 0)) uzmin = zmin*0.98;\n if ((uzmax > 0) && (zmax <= 0)) uzmax = 0;\n\n let graph = this.getObject();\n\n if (graph.fMinimum != kNoZoom) uzmin = graph.fMinimum;\n if (graph.fMaximum != kNoZoom) uzmax = graph.fMaximum;\n\n let histo = createHistogram('TH2I', 10, 10);\n histo.fName = graph.fName + '_h';\n histo.fTitle = graph.fTitle;\n histo.fXaxis.fXmin = uxmin;\n histo.fXaxis.fXmax = uxmax;\n histo.fYaxis.fXmin = uymin;\n histo.fYaxis.fXmax = uymax;\n histo.fZaxis.fXmin = uzmin;\n histo.fZaxis.fXmax = uzmax;\n histo.fMinimum = uzmin;\n histo.fMaximum = uzmax;\n let kNoStats = BIT(9);\n histo.fBits = histo.fBits | kNoStats;\n return histo;\n }\n\n /** @summary Function handles tooltips in the mesh */\n graph2DTooltip(intersect) {\n if (!Number.isInteger(intersect.index)) {\n console.error(`intersect.index not provided, three.js version ${REVISION}`);\n return null;\n }\n\n let indx = Math.floor(intersect.index / this.nvertex);\n if ((indx < 0) || (indx >= this.index.length)) return null;\n let sqr = v => v*v;\n\n indx = this.index[indx];\n\n let p = this.painter, gr = this.graph,\n grx = p.grx(gr.fX[indx]),\n gry = p.gry(gr.fY[indx]),\n grz = p.grz(gr.fZ[indx]);\n\n if (this.check_next && indx+1 {\n let cnt = 0;\n for (let i = 0; i < graph.fNpoints; ++i) {\n if ((graph.fX[i] < fp.scale_xmin) || (graph.fX[i] > fp.scale_xmax) ||\n (graph.fY[i] < fp.scale_ymin) || (graph.fY[i] > fp.scale_ymax) ||\n (graph.fZ[i] < zmin) || (graph.fZ[i] >= zmax)) continue;\n\n ++cnt;\n }\n return cnt;\n };\n\n // try to define scale-down factor\n if ((settings.OptimizeDraw > 0) && !fp.webgl) {\n let numselected = countSelected(fp.scale_zmin, fp.scale_zmax),\n sizelimit = 50000;\n\n if (numselected > sizelimit) {\n step = Math.floor(numselected / sizelimit);\n if (step <= 2) step = 2;\n }\n }\n\n let markeratt = new TAttMarkerHandler(graph),\n palette = null,\n levels = [fp.scale_zmin, fp.scale_zmax],\n scale = fp.size_x3d / 100 * markeratt.getFullSize(),\n promises = [];\n\n if (this.options.Circles) scale = 0.06*fp.size_x3d;\n\n if (fp.usesvg) scale *= 0.3;\n\n if (this.options.Color) {\n levels = main.getContourLevels();\n palette = main.getHistPalette();\n }\n\n for (let lvl = 0; lvl < levels.length-1; ++lvl) {\n\n let lvl_zmin = Math.max(levels[lvl], fp.scale_zmin),\n lvl_zmax = Math.min(levels[lvl+1], fp.scale_zmax);\n\n if (lvl_zmin >= lvl_zmax) continue;\n\n let size = Math.floor(countSelected(lvl_zmin, lvl_zmax) / step),\n pnts = null, select = 0,\n index = new Int32Array(size), icnt = 0,\n err = null, asymm = false, line = null, ierr = 0, iline = 0;\n\n if (this.options.Markers || this.options.Circles)\n pnts = new PointsCreator(size, fp.webgl, scale/3);\n\n if (this.options.Error) {\n err = new Float32Array(size*6*3);\n asymm = this.matchObjectType('TGraph2DAsymmErrors');\n }\n\n if (this.options.Line)\n line = new Float32Array((size-1)*6);\n\n for (let i = 0; i < graph.fNpoints; ++i) {\n if ((graph.fX[i] < fp.scale_xmin) || (graph.fX[i] > fp.scale_xmax) ||\n (graph.fY[i] < fp.scale_ymin) || (graph.fY[i] > fp.scale_ymax) ||\n (graph.fZ[i] < lvl_zmin) || (graph.fZ[i] >= lvl_zmax)) continue;\n\n if (step > 1) {\n select = (select+1) % step;\n if (select !== 0) continue;\n }\n\n index[icnt++] = i; // remember point index for tooltip\n\n let x = fp.grx(graph.fX[i]),\n y = fp.gry(graph.fY[i]),\n z = fp.grz(graph.fZ[i]);\n\n if (pnts) pnts.addPoint(x,y,z);\n\n if (err) {\n err[ierr] = fp.grx(graph.fX[i] - (asymm ? graph.fEXlow[i] : graph.fEX[i]));\n err[ierr+1] = y;\n err[ierr+2] = z;\n err[ierr+3] = fp.grx(graph.fX[i] + (asymm ? graph.fEXhigh[i] : graph.fEX[i]));\n err[ierr+4] = y;\n err[ierr+5] = z;\n ierr+=6;\n err[ierr] = x;\n err[ierr+1] = fp.gry(graph.fY[i] - (asymm ? graph.fEYlow[i] : graph.fEY[i]));\n err[ierr+2] = z;\n err[ierr+3] = x;\n err[ierr+4] = fp.gry(graph.fY[i] + (asymm ? graph.fEYhigh[i] : graph.fEY[i]));\n err[ierr+5] = z;\n ierr+=6;\n err[ierr] = x;\n err[ierr+1] = y;\n err[ierr+2] = fp.grz(graph.fZ[i] - (asymm ? graph.fEZlow[i] : graph.fEZ[i]));\n err[ierr+3] = x;\n err[ierr+4] = y;\n err[ierr+5] = fp.grz(graph.fZ[i] + (asymm ? graph.fEZhigh[i] : graph.fEZ[i]));\n ierr+=6;\n }\n\n if (line) {\n if (iline>=6) {\n line[iline] = line[iline-3];\n line[iline+1] = line[iline-2];\n line[iline+2] = line[iline-1];\n iline+=3;\n }\n line[iline] = x;\n line[iline+1] = y;\n line[iline+2] = z;\n iline+=3;\n }\n }\n\n if (line && (iline > 3) && (line.length == iline)) {\n let lcolor = this.getColor(graph.fLineColor),\n material = new LineBasicMaterial({ color: new Color(lcolor), linewidth: graph.fLineWidth }),\n linemesh = createLineSegments(line, material);\n fp.toplevel.add(linemesh);\n\n linemesh.graph = graph;\n linemesh.index = index;\n linemesh.painter = fp;\n linemesh.scale0 = 0.7*scale;\n linemesh.tip_name = this.getObjectHint();\n linemesh.tip_color = (graph.fMarkerColor === 3) ? 0xFF0000 : 0x00FF00;\n linemesh.nvertex = 2;\n linemesh.check_next = true;\n\n linemesh.tooltip = this.graph2DTooltip;\n }\n\n if (err) {\n let lcolor = this.getColor(graph.fLineColor),\n material = new LineBasicMaterial({ color: new Color(lcolor), linewidth: graph.fLineWidth }),\n errmesh = createLineSegments(err, material);\n fp.toplevel.add(errmesh);\n\n errmesh.graph = graph;\n errmesh.index = index;\n errmesh.painter = fp;\n errmesh.scale0 = 0.7*scale;\n errmesh.tip_name = this.getObjectHint();\n errmesh.tip_color = (graph.fMarkerColor === 3) ? 0xFF0000 : 0x00FF00;\n errmesh.nvertex = 6;\n\n errmesh.tooltip = this.graph2DTooltip;\n }\n\n if (pnts) {\n let fcolor = 'blue';\n\n if (!this.options.Circles)\n fcolor = palette ? palette.calcColor(lvl, levels.length)\n : this.getColor(graph.fMarkerColor);\n\n let pr = pnts.createPoints({ color: fcolor, style: this.options.Circles ? 4 : graph.fMarkerStyle }).then(mesh => {\n mesh.graph = graph;\n mesh.painter = fp;\n mesh.tip_color = (graph.fMarkerColor === 3) ? 0xFF0000 : 0x00FF00;\n mesh.scale0 = 0.3*scale;\n mesh.index = index;\n\n mesh.tip_name = this.getObjectHint();\n mesh.tooltip = this.graph2DTooltip;\n fp.toplevel.add(mesh);\n });\n\n promises.push(pr);\n }\n }\n\n return Promise.all(promises).then(() => {\n fp.render3D(100);\n return this;\n });\n }\n\n /** @summary draw TGraph2D object */\n static async draw(dom, gr, opt) {\n let painter = new TGraph2DPainter(dom, gr);\n painter.decodeOptions(opt, gr);\n\n let promise = Promise.resolve(true);\n\n if (!painter.getMainPainter()) {\n if (!gr.fHistogram)\n gr.fHistogram = painter.createHistogram();\n promise = TH2Painter.draw(dom, gr.fHistogram, 'lego;axis');\n painter.ownhisto = true;\n }\n\n return promise.then(() => {\n painter.addToPadPrimitives();\n return painter.redraw();\n });\n }\n\n} // class TGraph2DPainter\n\nexport { TGraph2DPainter };\n"],"x_google_ignoreList":[0]} \ No newline at end of file diff --git a/docs/3rdpartylicenses.txt b/docs/3rdpartylicenses.txt index 446967016..265136372 100644 --- a/docs/3rdpartylicenses.txt +++ b/docs/3rdpartylicenses.txt @@ -92,31 +92,6 @@ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -@rp3e11/ngx-slider -MIT -The MIT License (MIT) - -Copyright (c) 2013 Rafal Zajac -Copyright (c) 2018 Piotr Dziwinski - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. - @tweenjs/tween.js MIT The MIT License @@ -373,31 +348,6 @@ Apache-2.0 limitations under the License. -detect-passive-events -MIT -The MIT License (MIT) - -Copyright (c) 2016 Rafael Pedicini - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. - - dijkstrajs MIT ``` diff --git a/docs/404.html b/docs/404.html index 2e447d9e6..b3163dce7 100644 --- a/docs/404.html +++ b/docs/404.html @@ -24,10 +24,10 @@ - + - + \ No newline at end of file diff --git a/docs/476.8cae8d64bbb01c50.js b/docs/476.8cae8d64bbb01c50.js new file mode 100644 index 000000000..64a3e238f --- /dev/null +++ b/docs/476.8cae8d64bbb01c50.js @@ -0,0 +1,2 @@ +"use strict";(self.webpackChunkphoenix_app=self.webpackChunkphoenix_app||[]).push([[476],{6476:(bt,ot,A)=>{A.r(ot),A.d(ot,{RH2Painter:()=>J});var H=A(5835),F=A(9542),st=A(2253),at=A(6367),it=A(3675),xt=A(8172),ct=A(9056);class W extends xt.n{constructor(t,i){super(t,i),this.wheel_zoomy=!0}cleanup(){delete this.tt_handle,super.cleanup()}getDimension(){return 2}toggleProjection(t,i){if("Projections"==t&&(t=""),(0,F.isStr)(t)&&t.length>1&&(i=parseInt(t.slice(1)),t=t[0]),i||(i=1),t&&this.is_projection==t){if(this.projection_width!==i)return void(this.projection_width=i);t=""}delete this.proj_hist;let e=this.is_projection===t?"":t;this.is_projection="",this.projection_width=i,this.provideSpecialDrawArea(e).then(()=>(this.is_projection=e,this.redrawProjection()))}redrawProjection(){}executeMenuCommand(t,i){return!!super.executeMenuCommand(t,i)||("SetShowProjectionX"==t.fName||"SetShowProjectionY"==t.fName)&&(this.toggleProjection(t.fName[17],i&&parseInt(i)?parseInt(i):1),!0)}fillHistContextMenu(t){t.add("sub:Projections",()=>this.toggleProjection());let i=this.is_projection||"";i&&(i+=this.projection_width);let e=["X1","X2","X3","X5","X10","Y1","Y2","Y3","Y5","Y10"];for(let o=0;othis.toggleProjection(l));t.add("endsub:"),t.add("Auto zoom-in",()=>this.autoZoom());let r=this.getSupportedDrawOptions();t.addDrawMenu("Draw with",r,o=>{if("inspect"===o)return this.showInspector();this.decodeOptions(o),this.interactiveRedraw("pad","drawopt")}),this.options.Color&&this.fillPaletteMenu(t)}clickButton(t){if(super.clickButton(t))return!0;switch(t){case"ToggleColor":this.toggleColor();break;case"Toggle3D":this.toggleMode3D();break;default:return!1}return!0}fillToolbar(){super.fillToolbar(!0);let t=this.getPadPainter();t&&(t.addPadButton("th2color","Toggle color","ToggleColor"),t.addPadButton("th2colorz","Toggle color palette","ToggleColorZ"),t.addPadButton("th2draw3d","Toggle 3D mode","Toggle3D"),t.showPadButtons())}toggleColor(){this.options.Mode3D?(this.options.Mode3D=!1,this.options.Color=!0):this.options.Color=!this.options.Color,this.redraw()}autoZoom(){let o,l,t=this.getSelectIndex("x","left",-1),i=this.getSelectIndex("x","right",1),e=this.getSelectIndex("y","left",-1),r=this.getSelectIndex("y","right",1),u=this.getHisto(),f=this.getAxis("x"),w=this.getAxis("y");if(t==i||e==r)return;let x=u.getBinContent(t+1,e+1);for(o=t;o0)return;let h=i,n=t,a=r,c=e;for(o=t;ox&&(o=n&&(n=o+1),l=c&&(c=l+1));let g,m,d,y,s=!1;return h===n-1&&h>t+1&&ne+1&&ct||ne||c0?r.fContMinPos:null,this.gmaxbin=r.fContMax;else for(this.gminbin=this.gmaxbin=r.getBinContent(1,1),this.gminposbin=null,i=0;ithis.gmaxbin&&(this.gmaxbin=o),o>0&&(null===this.gminposbin||this.gminposbin>o)&&(this.gminposbin=o)}this.zmin=this.gminbin,this.zmax=this.gmaxbin,null===this.gminposbin&&(this.gminposbin=1e-4*this.gmaxbin),this.draw_content=!(this.options.Axis>0)&&this.gmaxbin>0}countStat(t){let f,w,x,h,n,y,s,i=this.getHisto(),e=0,r=0,o=0,l=0,u=0,a={name:"histo",entries:0,integral:0,meanx:0,meany:0,rmsx:0,rmsy:0,matrix:[0,0,0,0,0,0,0,0,0],xmax:0,ymax:0,wmax:null},c=this.getSelectIndex("x","left"),g=this.getSelectIndex("x","right"),m=this.getSelectIndex("y","left"),d=this.getSelectIndex("y","right"),M=this.getAxis("x"),b=this.getAxis("y");for(y=1;y<=this.nbinsx;++y)for(f=y<=c+1?0:y>g+1?2:1,x=M.GetBinCoord(y-.5),s=1;s<=this.nbinsy;++s)w=s<=m+1?0:s>d+1?2:1,h=b.GetBinCoord(s-.5),n=i.getBinContent(y,s),a.entries+=n,a.matrix[3*w+f]+=n,1==f&&1==w&&(t&&!t(x,h)||((null===a.wmax||n>a.wmax)&&(a.wmax=n,a.xmax=x,a.ymax=h),e+=n,r+=x*n,o+=h*n,l+=x**2*n,u+=h**2*n));return Math.abs(e)>1e-300&&(a.meanx=r/e,a.meany=o/e,a.rmsx=Math.sqrt(Math.abs(l/e-a.meanx**2)),a.rmsy=Math.sqrt(Math.abs(u/e-a.meany**2))),null===a.wmax&&(a.wmax=0),a.integral=e,a}fillStatistic(t,i){let e=this.countStat(),r=Math.floor(i%10),o=Math.floor(i/10)%10,l=Math.floor(i/100)%10,u=Math.floor(i/1e3)%10,f=Math.floor(i/1e4)%10,w=Math.floor(i/1e5)%10,x=Math.floor(i/1e6)%10,h=Math.floor(i/1e7)%10,n=Math.floor(i/1e8)%10;if(t.clearStat(),r>0&&t.addText(e.name),o>0&&t.addText("Entries = "+t.format(e.entries,"entries")),l>0&&(t.addText("Mean x = "+t.format(e.meanx)),t.addText("Mean y = "+t.format(e.meany))),u>0&&(t.addText("Std Dev x = "+t.format(e.rmsx)),t.addText("Std Dev y = "+t.format(e.rmsy))),x>0&&t.addText("Integral = "+t.format(e.matrix[4],"entries")),h>0&&(t.addText("Skewness x = "),t.addText("Skewness y = ")),n>0&&t.addText("Kurt = "),f>0||w>0){let a=e.matrix;t.addText(a[6].toFixed(0)+" | "+a[7].toFixed(0)+" | "+a[7].toFixed(0)),t.addText(a[3].toFixed(0)+" | "+a[4].toFixed(0)+" | "+a[5].toFixed(0)),t.addText(a[0].toFixed(0)+" | "+a[1].toFixed(0)+" | "+a[2].toFixed(0))}return!0}drawBinsColor(){const t=this.getHisto(),i=this.prepareDraw(),e=i.stepi,r=i.stepj,o=[];let u,f,w,x,h,n,a,c,g,m;const d=()=>{m.path+=`h${a}v${m.y2-m.y}h${-a}z`,m.dy=0,m=null};for(x=i.i1;x{y&&this.draw_g.append("svg:path").style("fill",i.palette.getColor(s)).attr("d",y.path)}),this.updatePaletteDraw(),i}buildContour(t,i,e,r){let n,a,g,b,_,B,C,j,p,P,k,Z,T,lt,I,o=this.getHisto(),l=2004,f=new Float32Array(2*l),w=new Float32Array(2*l),x=new Int32Array(2*l),h=0,c=[],m=0,d=[0,0,0,0],y=[0,0,0,0],s=[0,0,0,0],M=[0,0,0,0],Q=t.stepi,E=t.stepj;function pt(G){for(let v=0;vs[j]&&(C=j),C++,h=1,p=1;p<=4;p++)j=C%4+1,P=ht(s[C-1],M[C-1],d[C-1],y[C-1],s[j-1],M[j-1],d[j-1],y[j-1]),h+=2*P,C=j;for(C=s[0]<=s[1]?0:1,j=s[2]<=s[3]?2:3,s[C]>s[j]&&(C=j),C++,h=2,p=1;p<=4;p++)j=1==C?4:C-1,P=ht(s[C-1],M[C-1],d[C-1],y[C-1],s[j-1],M[j-1],d[j-1],y[j-1]),h+=2*P,C=j;for(k=0,p=1;p<=h-5;p+=2)for(;x[p-1]!=x[p];){for(Z=f[p],T=w[p],lt=x[p],I=p;I<=h-5;I+=2)f[I]=f[I+2],w[I]=w[I+2],x[I]=x[I+2];if(f[h-3]=Z,w[h-3]=T,x[h-3]=lt,k>2e3)break;k++}if(k>2e3)continue;for(p=1;p<=h-2;p+=2)n=x[p-1],n>=0&&n=0){rt=n;break}for(B=0,n=rt-1;n>=0;n--)et[B]=n,B++;for(n=rt;n0&&v[b+1]===X[D]&&$[b+1]===L[D]&&(D--,X[D]=v[b],L[D]=$[b],v[b]=v[b+1]=R,$[b]=$[b+1]=O,U++);if(0==U)break}for(D+1=0&&r(G,X,L,D,z,n),S=0,b=2;b{let m,d,y,s,g="";for(let M=n;M<=a;++M){if(f?(d=f(x[M],h[M]),d.x=Math.round(t.grx(d.x)),d.y=Math.round(t.gry(d.y))):d={x:Math.round(x[M]),y:Math.round(h[M])},g)if(M==a&&y&&d.x==y.x&&d.y==y.y){if(!s)return"";g+="z",c=!1}else d.x!=m.x&&d.y!=m.y?(g+="l"+(d.x-m.x)+","+(d.y-m.y),s=!0):d.x!=m.x?(g+="h"+(d.x-m.x),s=!0):d.y!=m.y&&(g+="v"+(d.y-m.y),s=!0);else g="M"+d.x+","+d.y,y=d;m=d}return c&&(g+="z"),g};if(14===this.options.Contour){let x=`M0,0h${i}v${e}h${-i}z`;if(this.options.Proj){let h=r.stepj,n=parseInt((r.j2-r.j1)/h),a=new Float32Array(2*n),c=new Float32Array(2*n);for(let g=0;g{let d,g=l.getColor(x),m=g;switch(this.options.Contour){case 1:case 14:break;case 11:m="none",d=new at.rE({color:g});break;case 12:m="none",d=new at.rE({color:1,style:x%5+1,width:1});break;case 13:m="none",d=this.lineatt}let y=w(h,n,a,c,"none"!=m);if(!y)return;let s=this.draw_g.append("svg:path").attr("class","th2_contour").attr("d",y).style("fill",m);d&&s.call(d.func)}),r.hide_only_zeros=!0,r}createPolyBin(){return""}drawBinsText(t){let e,r,o,l,u,f,w,x,h,n,i=this.getHisto();null===t&&(t=this.prepareDraw({rounding:!1}));let a=this.v7EvalFont("text",{size:20,color:"black",align:22}),c=0,g=this.draw_g.append("svg:g").attr("class","th2_text"),m=t.stepi,d=t.stepj;for(this.options.BarOffset&&(c=this.options.BarOffset),this.startTextDrawing(a,"font",g),e=t.i1;e(t.hide_only_zeros=!0,t))}drawBinsArrow(){let e,r,l,u,f,w,x,h,n,a,c,g,m,d,y,t=this.getHisto(),i="",o=1e-30,s=this.prepareDraw({rounding:!1}),M=(s.grx[s.i2]-s.grx[s.i1])/(s.i2-s.i1+1-.03)/2,b=(s.gry[s.j2]-s.gry[s.j1])/(s.j2-s.j1+1-.03)/2,_=s.stepi,B=s.stepj;const C=(j,p)=>j?p?`l${j},${p}`:`h${j}`:p?`v${p}`:"";for(let j=0;j<2;++j)for(e=s.i1;e=s.i2-_?t.getBinContent(e+1,r+1)-t.getBinContent(e+1-_,r+1):.5*(t.getBinContent(e+1+_,r+1)-t.getBinContent(e+1-_,r+1)),u=r===s.j1?t.getBinContent(e+1,r+1+B)-t.getBinContent(e+1,r+1):r>=s.j2-B?t.getBinContent(e+1,r+1)-t.getBinContent(e+1,r+1-B):.5*(t.getBinContent(e+1,r+1+B)-t.getBinContent(e+1,r+1-B)),0===j?o=Math.max(o,Math.abs(l),Math.abs(u)):(f=(s.grx[e]+s.grx[e+_])/2,w=(s.gry[r]+s.gry[r+B])/2,x=M*l/o,h=b*u/o,n=f-x,a=f+x,c=w-h,g=w+h,l=Math.round(a-n),u=Math.round(g-c),(0!==l||0!==u)&&(i+="M"+Math.round(n)+","+Math.round(c)+C(l,u),(Math.abs(l)>5||Math.abs(u)>5)&&(m=Math.sqrt(2/(l**2+u**2)),d=Math.round(m*(l+u)),y=Math.round(m*(l-u)),(d||y)&&(i+=`m${-d},${y}`+C(d,-y)+C(-y,-d)))));return this.draw_g.append("svg:path").attr("d",i).style("fill","none").call(this.lineatt.func),s}drawBinsBox(){let t=this.getHisto(),i=this.prepareDraw({rounding:!1}),e=this.getFramePainter();e.maxbin===e.minbin&&(e.maxbin=this.gmaxbin,e.minbin=this.gminbin,e.minposbin=this.gminposbin),e.maxbin===e.minbin&&(e.minbin=Math.min(0,e.maxbin-1));let l,u,f,w,c,g,m,d,y,s,M,b,r=Math.max(Math.abs(e.maxbin),Math.abs(e.minbin)),o=Math.max(0,e.minbin),x="",h="",n="",a="",_=!1,B=0,C=i.stepi,j=i.stepj;if(e.logz&&r>0){_=!0;let p=Math.log(r);B=o>0?Math.log(o):e.minposbin>=1&&e.minposbin<100?Math.log(.7):e.minposbin>0?Math.log(.7*e.minposbin):p-10,B>=p&&(B=p-10),b=1/(p-B)}else b=1/(r-o);for(l=i.i1;l0?Math.log(w)-B:0:w-o,c=.5*(c<0?1:1-Math.sqrt(c*b)),c<0&&(c=0),s=i.grx[l+C]-i.grx[l],M=i.gry[u]-i.gry[u+j],g=c*s,m=c*M,d=Math.round(i.grx[l]+g),y=Math.round(i.gry[u+j]+m),s=Math.max(Math.round(s-2*g),1),M=Math.max(Math.round(M-2*m),1),x+=`M${d},${y}v${M}h${s}v${-M}z`,f<0&&10===this.options.BoxStyle&&(h+=`M${d},${y}l${s},${M}M${d+s},${y}l${-s},${M}`),11===this.options.BoxStyle&&s>5&&M>5)){let p=Math.round(.1*s),P=Math.round(.1*M),k=`M${d},${y}h${s}l${-p},${P}h${2*p-s}v${M-2*P}l${-p},${P}z`,Z=`M${d+s},${y+M}v${-M}l${-p},${P}v${M-2*P}h${2*p-s}l${-p},${P}z`;f<0?(a+=k,n+=Z):(n+=k,a+=Z)}if(x){let p=this.draw_g.append("svg:path").attr("d",x).call(this.fillatt.func);11!==this.options.BoxStyle&&this.fillatt.empty()&&p.call(this.lineatt.func)}if(n&&this.fillatt.hasColor()&&this.draw_g.append("svg:path").attr("d",n).call(this.fillatt.func).style("fill",(0,st.B8)(this.fillatt.color).brighter(.5).formatHex()),a&&this.draw_g.append("svg:path").attr("d",a).call(this.fillatt.func).style("fill",this.fillatt.hasColor()?(0,st.B8)(this.fillatt.color).darker(.5).formatHex():"red"),h){let p=this.draw_g.append("svg:path").attr("d",h).style("fill","none");this.lineatt.empty()||p.call(this.lineatt.func)}return i}drawBinsScatter(){let f,w,x,h,n,a,c,g,t=this.getHisto(),i=this.prepareDraw({rounding:!0,pixel_density:!0,scatter_plot:!0}),e=[],r=[],o=[],l=[],u=[],m=1,d=this.options.ScatCoef*(this.gmaxbin>2e3?2e3/this.gmaxbin:1),y=i.stepi,s=i.stepj,M=new it.q9(i.sumz);if(d*i.sumz<1e5){this.createv7AttMarker(),this.markeratt.resetPos();let j,p,C="";for(h=i.i1;h.7&&(m=.7/this.maxbin),h=i.i1;h0&&(_=b.insert("svg:defs",":first-child")),this.createv7AttMarker();let B=i.palette.getContour();for(f=0;f0&&(o=t.drawBinsContour(r,e.width,e.height)),t.options.Text&&(l=t.drawBinsText(o)),!o&&!l&&(o=t.drawBinsColor()),l||(l=Promise.resolve(o)),l.then(u=>(t.tt_handle=u,t))})()}getBinTooltips(t,i){let e=[],r=this.getHisto(),o=r.getBinContent(t+1,i+1),l=1,u=1;this.isDisplayItem()&&(l=r.stepx||1,u=r.stepy||1),e.push(this.getObjectHint()||"histo<2>"),e.push("x = "+this.getAxisBinTip("x",t,l),"y = "+this.getAxisBinTip("y",i,u)),e.push(`bin = ${t+1}, ${i+1}`),r.$baseh&&(o-=r.$baseh.getBinContent(t+1,i+1));let f="entries = "+(l>1||u>1?"~":"");return o===Math.round(o)?e.push(f+o):e.push(f+(0,it.Ee)(o,F.gStyle.fStatFormat)),e}getPolyBinTooltips(){return[]}processTooltipEvent(t){if(!t||!this.draw_content||!this.draw_g||!this.tt_handle||this.options.Proj)return this.draw_g&&this.draw_g.select(".tooltip_bin").remove(),null;let i=this.getHisto(),e=this.tt_handle,r=this.draw_g.select(".tooltip_bin");if(e.poly)return null;let o,l,u=0,f=null;for(o=e.i1;o=e.grx[o]&&t.x<=e.grx[o+1]);++o);for(l=e.j1;l=e.gry[l+1]&&t.y<=e.gry[l]);++l);if(o1){let s=(this.projection_width-1)/2;a+s>=e.j2?(a=Math.min(Math.round(a+s),e.j2),n=Math.max(a-this.projection_width,e.j1)):(n=Math.max(Math.round(n-s),e.j1),a=Math.min(n+this.projection_width,e.j2))}m=e.gry[a],d=e.gry[n],y=777*n+333*a}else if("Y"==this.is_projection){if(m=0,d=this.getFramePainter().getFrameHeight(),this.projection_width>1){let s=(this.projection_width-1)/2;h+s>=e.i2?(h=Math.min(Math.round(h+s),e.i2),x=Math.max(h-this.projection_width,e.i1)):(x=Math.max(Math.round(x-s),e.i1),h=Math.min(x+this.projection_width,e.i2))}c=e.grx[x],g=e.grx[h],y=777*x+333*h}w.changed=r.property("current_bin")!==y,w.changed&&r.attr("x",c).attr("width",g-c).attr("y",m).attr("height",d-m).style("opacity","0.7").property("current_bin",y),this.is_projection&&w.changed&&this.redrawProjection(x,h,n,a)}return w.changed&&(w.user_info={obj:i,name:"histo",bin:i.getBin(o+1,l+1),cont:u,binx:o+1,biny:l+1,grx:t.x,gry:t.y}),w}canZoomInside(t,i,e){if("z"==t)return!0;let r=this.getAxis(t);return r.FindBin(e,.5)-r.FindBin(i,0)>1}draw2D(t){var i=this;return(0,H.Z)(function*(){return i.clear3DScene(),i.drawFrameAxes().then(e=>!!e&&i.drawingBins(t)).then(e=>{if(e)return i.draw2DBins().then(()=>i.addInteractivity())}).then(()=>i)})()}draw3D(t){var i=this;return(0,H.Z)(function*(){return console.log("3D drawing is disabled, load ./hist/RH1Painter.mjs"),i.draw2D(t)})()}callDrawFunc(t){var i=this;return(0,H.Z)(function*(){let e=i.getFramePainter();return e&&e.mode3d!==i.options.Mode3D&&!i.isMainPainter()&&(i.options.Mode3D=e.mode3d),i.options.Mode3D?i.draw3D(t):i.draw2D(t)})()}redraw(t){var i=this;return(0,H.Z)(function*(){return i.callDrawFunc(t)})()}static _draw(t){return(0,H.Z)(function*(){return(0,ct.ensureRCanvas)(t).then(()=>{t.setAsMainPainter(),t.options={Hist:!1,Error:!1,Zero:!1,Mark:!1,Line:!1,Fill:!1,Lego:0,Surf:0,Text:!0,TextAngle:0,TextKind:"",BaseLine:!1,Mode3D:!1,AutoColor:0,Color:!1,Scat:!1,ScatCoef:1,Box:!1,BoxStyle:0,Arrow:!1,Contour:0,Proj:0,BarOffset:0,BarWidth:1,minimum:F.kNoZoom,maximum:F.kNoZoom};let i=t.v7EvalAttr("kind",""),e=t.v7EvalAttr("sub",0),r=t.options;switch(r.Text=t.v7EvalAttr("drawtext",!1),i){case"lego":r.Lego=e>0?10+e:12,r.Mode3D=!0;break;case"surf":r.Surf=e>0?10+e:1,r.Mode3D=!0;break;case"box":r.Box=!0,r.BoxStyle=10+e;break;case"err":r.Error=!0,r.Mode3D=!0;break;case"cont":r.Contour=e>0?10+e:1;break;case"arr":r.Arrow=!0;break;case"scat":r.Scat=!0;break;case"col":r.Color=!0;break;default:r.Text||(r.Color=!0)}return t._show_empty_bins=!1,t.scanContent(),t.callDrawFunc()})})()}static draw(t,i,e){return(0,H.Z)(function*(){return W._draw(new W(t,i),e)})()}}var mt=A(9850),K=A(7238);class J extends W{draw3DBins(){if(this.draw_content){if(this.options.Surf)return(0,K.c5)(this,!0);if(this.options.Error)return(0,K.me)(this,!0);if(this.options.Contour)return(0,K.ME)(this,!0,!0);(0,K.UR)(this,!0),this.updatePaletteDraw()}}draw3D(t){this.mode3d=!0;let i=this.getFramePainter(),e=this.isMainPainter(),r=Promise.resolve(this);if("resize"==t)return e&&i.resize3D()&&i.render3D(),r;let o=1+2*F.gStyle.fHistTopMargin;return this.zmin=i.logz?.3*this.gminposbin:this.gminbin,this.zmax=this.gmaxbin,this.options.minimum!==F.kNoZoom&&(this.zmin=this.options.minimum),this.options.maximum!==F.kNoZoom&&(this.zmax=this.options.maximum,o=1),i.logz&&this.zmin<=0&&(this.zmin=1e-5*this.zmax),this.deleteAttr(),e&&((0,K.g_)(i),r=i.create3DScene(this.options.Render3D).then(()=>{i.setAxesRanges(this.getAxis("x"),this.xmin,this.xmax,this.getAxis("y"),this.ymin,this.ymax,null,this.zmin,this.zmax),i.set3DOptions(this.options),i.drawXYZ(i.toplevel,mt.C,{zmult:o,zoom:F.settings.Zooming,ndim:2,draw:!0,v7:!0})})),i.mode3d?r.then(()=>this.drawingBins(t)).then(()=>{let l=this.getFramePainter();return this.draw3DBins(),l.render3D(),l.addKeysHandler(),this}):r}static draw(t,i,e){return(0,H.Z)(function*(){return J._draw(new J(t,i),e)})()}}}}]); +//# sourceMappingURL=476.8cae8d64bbb01c50.js.map \ No newline at end of file diff --git a/docs/476.f27d0b39c577e2e0.js.map b/docs/476.8cae8d64bbb01c50.js.map similarity index 72% rename from docs/476.f27d0b39c577e2e0.js.map rename to docs/476.8cae8d64bbb01c50.js.map index 5623f8e62..ac9d37723 100644 --- a/docs/476.f27d0b39c577e2e0.js.map +++ b/docs/476.8cae8d64bbb01c50.js.map @@ -1 +1 @@ -{"version":3,"file":"476.f27d0b39c577e2e0.js","mappings":"6NAaA,MAAMA,UAAmBC,KAKtBC,YAAYC,EAAKC,GACdC,MAAMF,EAAKC,GACXE,KAAKC,aAAc,CACtB,CAGAC,iBACUF,KAAKG,UACZJ,MAAMG,SACT,CAGAE,eAAiB,OAAO,CAAG,CAG3BC,iBAAiBC,EAAMC,GAWpB,GATY,eAARD,IAAuBA,EAAO,OAE9BE,SAAMF,IAAUA,EAAKG,OAAS,IAC9BF,EAAQG,SAASJ,EAAKK,MAAM,IAC5BL,EAAOA,EAAK,IAGXC,IAAOA,EAAQ,GAEhBD,GAASN,KAAKY,eAAeN,EAC9B,IAAIN,KAAKa,mBAAqBN,EAI3B,YADAP,KAAKa,iBAAmBN,GAFxBD,EAAO,EAIV,QAGIN,KAAKc,UAEZ,IAAIC,EAAYf,KAAKY,gBAAkBN,EAAQ,GAAKA,EACpDN,KAAKY,cAAgB,GACrBZ,KAAKa,iBAAmBN,EAExBP,KAAKgB,uBAAuBD,GAAUE,KAAK,KAAQjB,KAAKY,cAAgBG,EAAiBf,KAAKkB,oBACjG,CAGAA,mBAIA,CAGAC,mBAAmBC,EAAQC,GACxB,QAAItB,MAAMoB,mBAAmBC,EAAQC,KAEhB,sBAAhBD,EAAOE,OAAmD,sBAAhBF,EAAOE,SACnDtB,KAAKK,iBAAiBe,EAAOE,MAAM,IAAKD,GAAQX,SAASW,GAAQX,SAASW,GAAQ,IAC3E,EAIb,CAGAE,oBAAoBC,GACjBA,EAAKC,IAAI,kBAAmB,IAAMzB,KAAKK,oBACvC,IAAIC,EAAON,KAAKY,eAAiB,GAC7BN,IAAMA,GAAQN,KAAKa,kBACvB,IAAIa,EAAQ,CAAC,KAAM,KAAM,KAAM,KAAM,MAAO,KAAM,KAAM,KAAM,KAAM,OACpE,QAASC,EAAI,EAAGA,EAAID,EAAMjB,SAAUkB,EACjCH,EAAKI,OAAOtB,GAAQoB,EAAMC,GAAID,EAAMC,GAAID,EAAMC,GAAIE,GAAO7B,KAAKK,iBAAiBwB,IAClFL,EAAKC,IAAI,WAETD,EAAKC,IAAI,eAAgB,IAAMzB,KAAK8B,YAEpC,IAAIC,EAAO/B,KAAKgC,0BAEhBR,EAAKS,YAAY,YAAaF,EAAMF,IACjC,GAAY,YAARA,EACD,OAAO7B,KAAKkC,gBACflC,KAAKmC,cAAcN,GACnB7B,KAAKoC,kBAAkB,MAAO,UAAS,GAGtCpC,KAAKqC,QAAQC,OACdtC,KAAKuC,gBAAgBf,EAC3B,CAGAgB,YAAYC,GACT,GAAI1C,MAAMyC,YAAYC,GAAW,OAAO,EAExC,OAAOA,GACJ,IAAK,cAAezC,KAAK0C,cAAe,MACxC,IAAK,WAAY1C,KAAK2C,eAAgB,MACtC,QAAS,OAAO,EAInB,OAAO,CACV,CAGAC,cACG7C,MAAM6C,aAAY,GAElB,IAAIC,EAAK7C,KAAK8C,gBACTD,IAELA,EAAGE,aAAa,WAAY,eAAgB,eAC5CF,EAAGE,aAAa,YAAa,uBAAwB,gBACrDF,EAAGE,aAAa,YAAa,iBAAkB,YAC/CF,EAAGG,iBACN,CAGAN,cAEO1C,KAAKqC,QAAQY,QACdjD,KAAKqC,QAAQY,QAAS,EACtBjD,KAAKqC,QAAQC,OAAQ,GAErBtC,KAAKqC,QAAQC,OAAStC,KAAKqC,QAAQC,MAGtCtC,KAAKkD,QACR,CAGApB,WACG,IAIIqB,EAAEC,EAJFC,EAAKrD,KAAKsD,eAAe,IAAK,QAAQ,GACtCC,EAAKvD,KAAKsD,eAAe,IAAK,QAAS,GACvCE,EAAKxD,KAAKsD,eAAe,IAAK,QAAQ,GACtCG,EAAKzD,KAAKsD,eAAe,IAAK,QAAS,GAClCxD,EAAQE,KAAK0D,WAAYC,EAAQ3D,KAAK4D,QAAQ,KAAMC,EAAQ7D,KAAK4D,QAAQ,KAElF,GAAKP,GAAME,GAAQC,GAAMC,EAAK,OAG9B,IAAIK,EAAMhE,EAAMiE,cAAcV,EAAK,EAAGG,EAAK,GAC3C,IAAKL,EAAIE,EAAIF,EAAII,IAAMJ,EACpB,IAAKC,EAAII,EAAIJ,EAAIK,IAAML,EACpBU,EAAME,KAAKF,IAAIA,EAAKhE,EAAMiE,cAAcZ,EAAE,EAAGC,EAAE,IACrD,GAAIU,EAAM,EAAG,OAEb,IAAIG,EAAQV,EAAIW,EAASb,EAAIc,EAAQV,EAAIW,EAASZ,EAElD,IAAKL,EAAIE,EAAIF,EAAII,IAAMJ,EACpB,IAAKC,EAAII,EAAIJ,EAAIK,IAAML,EAChBtD,EAAMiE,cAAcZ,EAAI,EAAGC,EAAI,GAAKU,IACjCX,EAAIc,IAAOA,EAAQd,GACnBA,GAAKe,IAAQA,EAASf,EAAI,GAC1BC,EAAIe,IAAOA,EAAQf,GACnBA,GAAKgB,IAAQA,EAAShB,EAAI,IAGvC,IAAIiB,EAAMC,EAAMC,EAAMC,EAAMC,GAAQ,EAiBpC,OAfKR,IAAUC,EAAO,GAAOD,EAAQZ,EAAG,GAAOa,EAASX,EAAG,IAAMU,IAASC,KACrEC,IAAUC,EAAO,GAAOD,EAAQX,EAAG,GAAOY,EAASX,EAAG,IAAMU,IAASC,MAErEH,EAAQZ,GAAMa,EAASX,IAAQU,EAAQC,EAAS,IAClDG,EAAOV,EAAMe,YAAYT,GACzBK,EAAOX,EAAMe,YAAYR,GACzBO,GAAQ,IAGNN,EAAQX,GAAMY,EAASX,IAAQU,EAAQC,EAAS,IAClDG,EAAOV,EAAMa,YAAYP,GACzBK,EAAOX,EAAMa,YAAYN,GACzBK,GAAQ,GAGPA,EACMzE,KAAK2E,kBAAkBC,KAAKP,EAAMC,EAAMC,EAAMC,QADxD,CAEH,CAGAK,YAAYC,GAGT,GAAIA,GAAqB9E,KAAK+E,QAAU/E,KAAKgF,OAAQ,OAErD,IAAI7B,EAAGC,EAAGtD,EAAQE,KAAK0D,WAIvB,GAFA1D,KAAKiF,sBAAsB,GAEvBjF,KAAKkF,gBAENlF,KAAKmF,QAAUrF,EAAMsF,SACrBpF,KAAKqF,WAAavF,EAAMwF,YAAc,EAAIxF,EAAMwF,YAAc,KAC9DtF,KAAKuF,QAAUzF,EAAM0F,cAKrB,IAFAxF,KAAKmF,QAAUnF,KAAKuF,QAAUzF,EAAMiE,cAAc,EAAG,GACrD/D,KAAKqF,WAAa,KACblC,EAAI,EAAGA,EAAInD,KAAK+E,SAAU5B,EAC5B,IAAKC,EAAI,EAAGA,EAAIpD,KAAKgF,SAAU5B,EAAG,CAC/B,IAAIqC,EAAc3F,EAAMiE,cAAcZ,EAAE,EAAGC,EAAE,GACzCqC,EAAczF,KAAKmF,QAASnF,KAAKmF,QAAUM,EACxCA,EAAczF,KAAKuF,UAASvF,KAAKuF,QAAUE,GAC9CA,EAAc,IACU,OAApBzF,KAAKqF,YAAyBrF,KAAKqF,WAAaI,KAAczF,KAAKqF,WAAaI,EAC3F,CAINzF,KAAK0F,KAAO1F,KAAKmF,QACjBnF,KAAK2F,KAAO3F,KAAKuF,QAGO,OAApBvF,KAAKqF,aAAqBrF,KAAKqF,WAA0B,KAAbrF,KAAKuF,SAGlDvF,KAAK4F,eADJ5F,KAAKqC,QAAQwD,KAAO,IAGD7F,KAAKuF,QAAU,CAEzC,CAGAO,UAAUC,GACP,IAGIC,EAAOC,EAAOC,EAAIC,EAAIC,EAOtBC,EAAIC,EAVJxG,EAAQE,KAAK0D,WACb6C,EAAY,EAAGC,EAAa,EAAGC,EAAa,EAC5CC,EAAa,EAAGC,EAAa,EAE7BC,EAAM,CAAEC,KAAM,QAASC,QAAS,EAAGC,SAAU,EAAGC,MAAO,EAAGC,MAAO,EAAGC,KAAM,EAAGC,KAAM,EAAGC,OAAQ,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAI9C,KAAM,EAAGE,KAAK,EAAG6C,KAAM,MAE1IC,EAAQtH,KAAKsD,eAAe,IAAK,QACjCiE,EAASvH,KAAKsD,eAAe,IAAK,SAClCkE,EAAQxH,KAAKsD,eAAe,IAAK,QACjCmE,EAASzH,KAAKsD,eAAe,IAAK,SAC1BK,EAAQ3D,KAAK4D,QAAQ,KAAMC,EAAQ7D,KAAK4D,QAAQ,KAG5D,IAAKyC,EAAK,EAAGA,GAAMrG,KAAK+E,SAAUsB,EAI/B,IAHAL,EAASK,GAAMiB,EAAM,EAAK,EAAKjB,EAAKkB,EAAO,EAAI,EAAI,EACnDrB,EAAKvC,EAAMe,YAAY2B,EAAK,IAEvBC,EAAK,EAAGA,GAAMtG,KAAKgF,SAAUsB,EAC/BL,EAASK,GAAMkB,EAAM,EAAK,EAAKlB,EAAKmB,EAAO,EAAI,EAAI,EACnDtB,EAAKtC,EAAMa,YAAY4B,EAAK,IAE5BF,EAAKtG,EAAMiE,cAAcsC,EAAIC,GAE7BM,EAAIE,SAAWV,EAEfQ,EAAIQ,OAAe,EAARnB,EAAYD,IAAUI,EAEnB,GAATJ,GAAyB,GAATC,IAEjBF,IAASA,EAAKG,EAAGC,MAEH,OAAbS,EAAIS,MAAmBjB,EAAKQ,EAAIS,QAAST,EAAIS,KAAOjB,EAAIQ,EAAItC,KAAO4B,EAAIU,EAAIpC,KAAO2B,GAEvFI,GAAaH,EACbI,GAAcN,EAAKE,EACnBK,GAAcN,EAAKC,EACnBM,GAAcR,GAAI,EAAIE,EACtBO,GAAcR,GAAI,EAAIC,IAI5B,OAAIpC,KAAK0D,IAAInB,GAAa,SACvBK,EAAII,MAAQR,EAAaD,EACzBK,EAAIK,MAAQR,EAAaF,EACzBK,EAAIM,KAAOlD,KAAK2D,KAAK3D,KAAK0D,IAAIhB,EAAaH,EAAYK,EAAII,OAAO,IAClEJ,EAAIO,KAAOnD,KAAK2D,KAAK3D,KAAK0D,IAAIf,EAAaJ,EAAYK,EAAIK,OAAO,KAGpD,OAAbL,EAAIS,OAAeT,EAAIS,KAAO,GAClCT,EAAIG,SAAWR,EACRK,CACV,CAGAgB,cAAcC,EAAMC,GAEjB,IAAIC,EAAO/H,KAAK8F,YACZkC,EAAahE,KAAKiE,MAAMH,EAAS,IACjCI,EAAgBlE,KAAKiE,MAAMH,EAAS,IAAM,GAC1CK,EAAanE,KAAKiE,MAAMH,EAAS,KAAO,GACxCM,EAAYpE,KAAKiE,MAAMH,EAAS,KAAQ,GACxCO,EAAcrE,KAAKiE,MAAMH,EAAS,KAAS,GAC3CQ,EAAatE,KAAKiE,MAAMH,EAAS,KAAU,GAC3CS,EAAiBvE,KAAKiE,MAAMH,EAAS,KAAW,GAChDU,EAAaxE,KAAKiE,MAAMH,EAAS,KAAY,GAC7CW,EAAazE,KAAKiE,MAAMH,EAAS,KAAa,GA+BlD,GA7BAD,EAAKa,YAEDV,EAAa,GACdH,EAAKc,QAAQZ,EAAKlB,MAEjBqB,EAAgB,GACjBL,EAAKc,QAAQ,aAAed,EAAKe,OAAOb,EAAKjB,QAAQ,YAEpDqB,EAAa,IACdN,EAAKc,QAAQ,YAAcd,EAAKe,OAAOb,EAAKf,QAC5Ca,EAAKc,QAAQ,YAAcd,EAAKe,OAAOb,EAAKd,SAG3CmB,EAAY,IACbP,EAAKc,QAAQ,eAAiBd,EAAKe,OAAOb,EAAKb,OAC/CW,EAAKc,QAAQ,eAAiBd,EAAKe,OAAOb,EAAKZ,QAG9CoB,EAAiB,GAClBV,EAAKc,QAAQ,cAAgBd,EAAKe,OAAOb,EAAKX,OAAO,GAAI,YAExDoB,EAAa,IACdX,EAAKc,QAAQ,wBACbd,EAAKc,QAAQ,yBAGZF,EAAa,GACdZ,EAAKc,QAAQ,kBAEXN,EAAc,GAAOC,EAAa,EAAI,CACxC,IAAIO,EAAId,EAAKX,OAEbS,EAAKc,QAAaE,EAAE,GAAGC,QAAQ,GAAK,MAAQD,EAAE,GAAGC,QAAQ,GAAK,MAASD,EAAE,GAAGC,QAAQ,IACpFjB,EAAKc,QAAaE,EAAE,GAAGC,QAAQ,GAAK,MAAQD,EAAE,GAAGC,QAAQ,GAAK,MAASD,EAAE,GAAGC,QAAQ,IACpFjB,EAAKc,QAAaE,EAAE,GAAGC,QAAQ,GAAK,MAAQD,EAAE,GAAGC,QAAQ,GAAK,MAASD,EAAE,GAAGC,QAAQ,GACvF,CAEA,OAAO,CACV,CAGAC,gBACG,MAAMjJ,EAAQE,KAAK0D,WACbsF,EAAShJ,KAAKiJ,cACdC,EAAKF,EAAOG,MAAOC,EAAKJ,EAAOK,MAC/BvC,EAAU,GAEhB,IAAIwC,EAASC,EAAMC,EAAMrG,EAAGC,EAAGqG,EAAMC,EAAIC,EAAIC,EAAOC,EAEpD,MAAMC,EAAmB,KACtBD,EAAWE,MAAS,IAAGL,KAAMG,EAAWG,GAAGH,EAAWI,MAAMP,KAC5DG,EAAWF,GAAK,EAChBE,EAAa,MAIhB,IAAK1G,EAAI6F,EAAO3F,GAAIF,EAAI6F,EAAOzF,GAAIJ,GAAK+F,EAAI,CAGzC,IAFAQ,EAAMV,EAAOkB,IAAI/G,EAAE+F,GAAMF,EAAOkB,IAAI/G,IAAO,EAEtCC,EAAI4F,EAAOxF,GAAIJ,EAAI4F,EAAOvF,GAAIL,GAAKgG,EASrC,GARAK,EAAO3J,EAAMiE,cAAcZ,EAAE,EAAGC,EAAE,GAClCkG,EAAUN,EAAOmB,QAAQC,gBAAgBX,GAC5B,IAATA,IACIzJ,KAAKqC,QAAQgI,KAEI,OAAZf,GAAqBtJ,KAAKsK,mBACjChB,EAAU,GAFVA,EAAU,MAIA,OAAZA,EAAJ,CAWA,GANAC,EAAQ,IAAGP,EAAOkB,IAAI/G,MAAM6F,EAAOuB,IAAInH,KAEvCuG,EAAMX,EAAOuB,IAAInH,EAAEgG,GAAMJ,EAAOuB,IAAInH,KAAO,EAE3CwG,EAAQ9C,EAAQwC,QAEFkB,IAAVZ,EACDA,EAAQ9C,EAAQwC,GAAW,CAAES,KAAMR,OAAK,IAClBK,IAAUC,EAAa,CAC7CD,EAAMI,GAAKhB,EAAOuB,IAAInH,GAAKuG,EAC3B,QACH,CACGH,EAAQ,IAAGR,EAAOkB,IAAI/G,GAAGyG,EAAMa,KAAKzB,EAAOuB,IAAInH,GAAGwG,EAAMK,IACxDL,EAAMG,MAASP,EAAK/I,OAAS8I,EAAK9I,OAAU+I,EAAOD,EAElDM,GAAYC,IAChBF,EAAMa,EAAIzB,EAAOkB,IAAI/G,GACrByG,EAAMK,EAAIjB,EAAOuB,IAAInH,GAElBwG,EAAMI,GAAKhB,EAAOuB,IAAInH,GAAKuG,EAC3BE,EAAaD,CAtBhB,MAFOC,GAAYC,IA6BlBD,GAAYC,GACnB,CAEAhD,SAAQ4D,QAAQ,CAACd,EAAMN,KACjBM,GACD5J,KAAK2K,OACAC,OAAO,YACPC,MAAM,OAAQ7B,EAAOmB,QAAQW,SAASxB,IACtCyB,KAAK,IAAKnB,EAAMG,KAAI,GAG9B/J,KAAKgL,oBAEEhC,CACV,CAGAiC,aAAajC,EAAQkC,EAAQf,EAASgB,GACnC,IAOYC,EAAOC,EAAkBC,EAEjCnI,EAAGC,EAAGzB,EAAG4J,EAAG1C,EAAG2C,EAAIC,EAAQC,EAC3BC,EAAOC,EAAOC,GAAOC,EAVrBhM,EAAQE,KAAK0D,WACbqI,EAAc,KAGdC,EAAO,IAAIC,aAAa,EAAEF,GAC1BG,EAAO,IAAID,aAAa,EAAEF,GAC1BI,EAAQ,IAAIC,WAAW,EAAEL,GACzBM,EAAK,EAAgBC,EAAQ,GAAQC,EAAQ,EAC7C9B,EAAI,CAAC,EAAG,EAAG,EAAG,GAAKR,EAAI,CAAC,EAAG,EAAG,EAAG,GAAKuC,EAAK,CAAC,EAAG,EAAG,EAAG,GAAKC,EAAK,CAAC,EAAE,EAAE,EAAE,GAGtEvD,EAAKF,EAAOG,MAAOC,EAAKJ,EAAOK,MAEnC,SAASqD,GAAaF,GACnB,QAASG,EAAG,EAAEA,EAAGzB,EAAOzK,SAASkM,EAC9B,GAAIH,EAAGtB,EAAOyB,GAAK,OAAOA,EAAG,EAChC,OAAOzB,EAAOzK,OAAO,CACxB,CAEA,SAASmM,GAAiBC,EAAOC,EAAQC,EAAIC,EAAKC,EAAOC,EAAQC,EAAInD,GAElE,IAOIoD,GAAMC,GAAMC,GAAMC,GAPlBC,EAAQT,IAAOI,EACfM,EAAOD,EAAQxD,EAAKgD,EAAOG,EAAKJ,EAChCxB,GAAIuB,EAAQ,EACZY,GAAOT,EAAQJ,EACfc,EAAKtB,EAAG,EACRuB,GAAQ7B,IAAmBM,EAC3BwB,GAAS,EAGb,KAAOtC,IAAK2B,GAAUS,GAAMC,IACzBL,GAAOrC,EAAOK,IACd+B,GAAOC,GAAOV,EACdQ,GAAOC,GAAKI,GACZN,GAAOK,EAAKJ,GACRG,GACDxB,EAAK2B,GAAMZ,EACXb,EAAKyB,GAAMX,EAAKI,KAEhBpB,EAAK2B,GAAMZ,EAAKK,GAChBlB,EAAKyB,GAAMX,GAEdb,EAAMwB,GAAMpC,GACZsC,KACAF,GAAK,EACLpC,KAEH,OAAOsC,EACV,CAEA,IAAIC,EAAO9E,EAAO+E,SAAW/E,EAAOgF,MAAQhF,EAAOkB,IAC/C+D,EAAOjF,EAAO+E,SAAW/E,EAAOkF,MAAQlF,EAAOuB,IAEnD,IAAKnH,EAAI4F,EAAOxF,GAAIJ,EAAI4F,EAAOvF,GAAG2F,EAAIhG,GAAKgG,EAKxC,IAHAa,EAAE,GAAKA,EAAE,IAAMgE,EAAK7K,GAAK6K,EAAK7K,EAAEgG,IAAK,EACrCa,EAAE,GAAKA,EAAE,IAAMgE,EAAK7K,EAAEgG,GAAM6E,EAAK7K,EAAE,EAAEgG,IAAK,EAErCjG,EAAI6F,EAAO3F,GAAIF,EAAI6F,EAAOzF,GAAG2F,EAAI/F,GAAK+F,EAAI,CAO5C,IALAsD,EAAG,GAAK1M,EAAMiE,cAAcZ,EAAE,EAAGC,EAAE,GACnCoJ,EAAG,GAAK1M,EAAMiE,cAAcZ,EAAE,EAAE+F,EAAI9F,EAAE,GACtCoJ,EAAG,GAAK1M,EAAMiE,cAAcZ,EAAE,EAAE+F,EAAI9F,EAAE,EAAEgG,GACxCoD,EAAG,GAAK1M,EAAMiE,cAAcZ,EAAE,EAAGC,EAAE,EAAEgG,GAEhCzH,EAAE,EAAEA,EAAE,EAAEA,IACV8K,EAAG9K,GAAK+K,GAAaF,EAAG7K,IAE3B,GAAK8K,EAAG,KAAOA,EAAG,IAAQA,EAAG,KAAOA,EAAG,IAAQA,EAAG,KAAOA,EAAG,IAAQA,EAAG,KAAOA,EAAG,GAAK,CASnF,IARAhC,EAAE,GAAKA,EAAE,IAAMqD,EAAK3K,GAAK2K,EAAK3K,EAAE,IAAI,EACpCsH,EAAE,GAAKA,EAAE,IAAMqD,EAAK3K,EAAE,GAAK2K,EAAK3K,EAAE,IAAI,EAElBoI,EAAhBiB,EAAG,IAAMA,EAAG,GAAQ,EAAY,EAChB3D,EAAhB2D,EAAG,IAAMA,EAAG,GAAQ,EAAY,EAChCA,EAAGjB,GAAKiB,EAAG3D,KAAI0C,EAAI1C,GACvB0C,IACAc,EAAG,EACEb,EAAG,EAAEA,GAAI,EAAEA,IACb3C,EAAI0C,EAAE,EAAI,EACVE,EAASmB,GAAiBJ,EAAGjB,EAAE,GAAGkB,EAAGlB,EAAE,GAAGd,EAAEc,EAAE,GAAGtB,EAAEsB,EAAE,GAC/CiB,EAAG3D,EAAE,GAAG4D,EAAG5D,EAAE,GAAG4B,EAAE5B,EAAE,GAAGoB,EAAEpB,EAAE,IACjCwD,GAAM,EAAEZ,EACRF,EAAI1C,EAQP,IALoB0C,EAAhBiB,EAAG,IAAMA,EAAG,GAAQ,EAAY,EAChB3D,EAAhB2D,EAAG,IAAMA,EAAG,GAAQ,EAAY,EAChCA,EAAGjB,GAAKiB,EAAG3D,KAAI0C,EAAI1C,GACvB0C,IACAc,EAAG,EACEb,EAAG,EAAEA,GAAI,EAAEA,IACD3C,EAAH,GAAL0C,EAAY,EACAA,EAAE,EAClBE,EAASmB,GAAiBJ,EAAGjB,EAAE,GAAGkB,EAAGlB,EAAE,GAAGd,EAAEc,EAAE,GAAGtB,EAAEsB,EAAE,GAC/CiB,EAAG3D,EAAE,GAAG4D,EAAG5D,EAAE,GAAG4B,EAAE5B,EAAE,GAAGoB,EAAEpB,EAAE,IACjCwD,GAAM,EAAEZ,EACRF,EAAI1C,EAKP,IADA6C,EAAQ,EACHF,EAAG,EAAGA,GAAIa,EAAG,EAAGb,GAAK,EAEvB,KAAOW,EAAMX,EAAG,IAAMW,EAAMX,IAAK,CAI9B,IAHAG,EAAQK,EAAKR,GACbI,EAAQM,EAAKV,GACbK,GAAQM,EAAMX,GACTM,EAAGN,EAAIM,GAAIO,EAAG,EAAGP,GAAK,EACxBE,EAAKF,GAAOE,EAAKF,EAAG,GACpBI,EAAKJ,GAAOI,EAAKJ,EAAG,GACpBK,EAAML,GAAMK,EAAML,EAAG,GAKxB,GAHAE,EAAKK,EAAG,GAAMV,EACdO,EAAKG,EAAG,GAAMT,EACdO,EAAME,EAAG,GAAKR,GACVH,EAjHH,IAiHsB,MACvBA,GACH,CAGH,GAAIA,EAtHG,IAsHgB,SAEvB,IAAKF,EAAG,EAAGA,GAAIa,EAAG,EAAGb,GAAK,EAEvBJ,EAAQe,EAAMX,EAAG,GAEZJ,GAAS,GAAOA,EAAQF,EAAOzK,SACjC4K,EAAOiB,EAAMlB,GACRC,IACFA,EAAOiB,EAAMlB,IAAK,EAAI+C,mBAA4B,EAAZpC,GAAe,IAExDT,EAAKD,EAAK+C,WACN9C,EAAKD,EAAKgD,GAAG,IACdhD,EAAKiD,GAAGhD,EAAG,GAAKtH,KAAKuK,MAAMvC,EAAKR,EAAG,IAAKH,EAAKmD,GAAGlD,EAAG,GAAKtH,KAAKuK,MAAMrC,EAAKV,EAAG,IAC3EH,EAAKiD,GAAGhD,EAAG,GAAKtH,KAAKuK,MAAMvC,EAAKR,IAAMH,EAAKmD,GAAGlD,EAAG,GAAKtH,KAAKuK,MAAMrC,EAAKV,IACtEH,EAAK+C,WAAa9C,EAAG,EACrBiB,EAAQvI,KAAKyK,IAAIlC,EAAOlB,EAAK+C,WAAW,IAMpD,CACH,CAGH,IAAIM,GAAW,IAAItC,WAAWlB,EAAOzK,QAASkO,GAAQ,EAEtD,IAAKvD,EAAM,EAAEA,EAAMF,EAAOzK,OAAO2K,IAC9B,GAAIF,EAAOE,IAAU,EAAG,CAAEuD,GAAQvD,EAAO,KAAO,CAInD,IADAzJ,EAAI,EACCyJ,EAAQuD,GAAQ,EAAGvD,GAAS,EAAGA,IAAWsD,GAAS/M,GAAKyJ,EAAOzJ,IACpE,IAAKyJ,EAAQuD,GAAOvD,EAAQF,EAAOzK,OAAQ2K,IAAWsD,GAAS/M,GAAKyJ,EAAOzJ,IAE3E,IAAIiN,EAAK,IAAI3C,aAAa,EAAEM,GACxBsC,EAAK,IAAI5C,aAAa,EAAEM,GAE5B,IAAK5K,EAAE,EAAEA,EAAEuJ,EAAOzK,SAASkB,EAAG,CAI3B,GAFAyJ,EAAQsD,GAAS/M,GACjB0J,EAAOiB,EAAMlB,IACRC,EAAM,SAEX,IAEgByD,EAAQC,EAA2BC,EAF/C1F,EAAU8B,EACVlF,EAAKmF,EAAKiD,GAAInI,EAAKkF,EAAKmD,GAAIlD,EAAKD,EAAK+C,WAAW,EACjDa,EAAS,EAAkB5K,EAAO,EAAGE,EAAO,EAEhD,OAAa,CAQV,IANAuK,EAASvC,EACTwC,EAASD,EAAO,EAChBF,EAAGE,GAAS5I,EAAG+I,GAAWJ,EAAGC,GAAU3I,EAAG8I,GAC1CL,EAAGG,GAAS7I,EAAG+I,EAAO,GAAIJ,EAAGE,GAAU5I,EAAG8I,EAAO,GACjD/I,EAAG+I,GAAU/I,EAAG+I,EAAO,GAAK5K,EAC5B8B,EAAG8I,GAAU9I,EAAG8I,EAAO,GAAK1K,IACf,CAEV,IADAyK,EAAO,EACF7L,EAAI,EAAGA,EAAImI,EAAInI,GAAK,EACjB4L,EAAQ,EAAExC,EAAM,GAAOrG,EAAG/C,KAAOyL,EAAGG,IAAY5I,EAAGhD,KAAO0L,EAAGE,KAC/DA,IACAH,EAAGG,GAAS7I,EAAG/C,EAAE,GAAI0L,EAAGE,GAAS5I,EAAGhD,EAAE,GACtC+C,EAAG/C,GAAK+C,EAAG/C,EAAE,GAAKkB,EAClB8B,EAAGhD,GAAKgD,EAAGhD,EAAE,GAAKoB,EAClByK,KAEEF,EAAS,GAAO5I,EAAG/C,EAAE,KAAOyL,EAAGE,IAAa3I,EAAGhD,EAAE,KAAO0L,EAAGC,KAC7DA,IACAF,EAAGE,GAAU5I,EAAG/C,GAAI0L,EAAGC,GAAU3I,EAAGhD,GACpC+C,EAAG/C,GAAK+C,EAAG/C,EAAE,GAAKkB,EAClB8B,EAAGhD,GAAKgD,EAAGhD,EAAE,GAAKoB,EAClByK,KAGN,GAAY,GAARA,EAAW,KAClB,CAMA,IAJKF,EAAO,EAAIC,GAAWD,GAAU,GAClC3D,EAAa7B,EAASsF,EAAIC,EAAIC,EAAQC,EAAO3D,GAEhD6D,EAAS,EACJ9L,EAAE,EAAEA,EAAEmI,EAAGnI,GAAG,EACd,GAAI+C,EAAG/C,KAAOkB,GAAQ8B,EAAGhD,KAAOoB,EAAM,CACnC0K,EAAS9L,EACT,KACH,CAGH,GAAe,IAAX8L,EAAc,KACrB,CACH,CACH,CAGAC,gBAAgBC,EAAOC,EAAQC,GAC5B,IAAIrG,EAAShJ,KAAKiJ,YAAY,CAAEqG,UAAU,EAAOC,MAAO,IAAKxB,SAA+B,GAArB/N,KAAKqC,QAAQmN,OAChFC,EAAOzP,KAAK2E,kBACZwF,EAAUsF,EAAKC,iBACfxE,EAASf,EAAQwF,aACjBC,EAAOH,EAAKI,oBAEZC,EAAY,CAAClB,EAAGC,EAAGC,EAAOC,EAAMgB,KACjC,IAAcC,EAAMC,EAAKtB,EAAOlK,EAA5ByL,EAAM,GACV,QAAS/M,EAAI2L,EAAQ3L,GAAK4L,IAAS5L,EAAG,CAQnC,GAPIyM,GACDK,EAAML,EAAKhB,EAAGzL,GAAI0L,EAAG1L,IACrB8M,EAAIxF,EAAIzG,KAAKuK,MAAMY,EAAMjF,IAAI+F,EAAIxF,IACjCwF,EAAIhG,EAAIjG,KAAKuK,MAAMY,EAAM5E,IAAI0F,EAAIhG,KAEjCgG,EAAM,CAAExF,EAAGzG,KAAKuK,MAAMK,EAAGzL,IAAK8G,EAAGjG,KAAKuK,MAAMM,EAAG1L,KAE7C+M,EACuCD,GAChC9M,GAAK4L,GAAUJ,GAAUsB,EAAIxF,GAAKkE,EAAMlE,GAAOwF,EAAIhG,GAAK0E,EAAM1E,EAAI,CAC3E,IAAKxF,EAAO,MAAO,GACnByL,GAAO,IAAKH,GAAW,CAC1B,MAAYE,EAAIxF,GAAKuF,EAAKvF,GAAOwF,EAAIhG,GAAK+F,EAAK/F,GAC5CiG,GAAQ,KAAOD,EAAIxF,EAAIuF,EAAKvF,GAAK,KAAOwF,EAAIhG,EAAI+F,EAAK/F,GAAIxF,GAAQ,GACzDwL,EAAIxF,GAAKuF,EAAKvF,GACtByF,GAAQ,KAAOD,EAAIxF,EAAIuF,EAAKvF,GAAIhG,GAAQ,GAChCwL,EAAIhG,GAAK+F,EAAK/F,IACtBiG,GAAQ,KAAOD,EAAIhG,EAAI+F,EAAK/F,GAAIxF,GAAQ,QATxCyL,EAAM,IAAMD,EAAIxF,EAAI,IAAMwF,EAAIhG,EAAG0E,EAAQsB,EAW5CD,EAAOC,CACV,CACA,OAAIF,IAAUG,GAAO,KACdA,GAGV,GAA6B,KAAzBlQ,KAAKqC,QAAQ8N,QAAgB,CAC9B,IAAIC,EAAM,QAAOhB,KAAWC,MAAYD,KACxC,GAAIpP,KAAKqC,QAAQmN,KAAM,CACpB,IAAIpG,EAAKJ,EAAOK,MAAOgH,EAAK3P,UAAUsI,EAAOvF,GAAKuF,EAAOxF,IAAI4F,GACzDkH,EAAK,IAAIrE,aAAgB,EAAHoE,GAAOE,EAAK,IAAItE,aAAgB,EAAHoE,GACvD,QAASlN,EAAE,EAAEA,EAAEkN,IAAKlN,EACjBmN,EAAGnN,GAAK6F,EAAOgF,MAAMhF,EAAO3F,IAC5BkN,EAAGpN,IAAM6F,EAAOkF,MAAMlF,EAAOxF,KAAKL,EAAEiG,EAAG,IAAOJ,EAAOkF,MAAMlF,EAAOvF,KAAK4M,EAAG,GAAIlN,EAAEiG,IAAKiH,EACrFC,EAAGnN,EAAEkN,GAAMrH,EAAOgF,MAAMhF,EAAOzF,IAC/BgN,EAAGpN,EAAEkN,IAAOrH,EAAOkF,MAAMlF,EAAOvF,KAAKN,EAAEiG,EAAG,IAAOJ,EAAOkF,MAAMlF,EAAOxF,KAAK6M,EAAG,GAAIlN,EAAEiG,IAAKiH,EAE3FD,EAAKN,EAAUQ,EAAGC,EAAG,EAAE,EAAEF,EAAG,GAAE,EACjC,CAEArQ,KAAK2K,OACAC,OAAO,YACPG,KAAK,IAAKqF,GACVvF,MAAM,OAAQV,EAAQW,SAAS,GACvC,CAEA,YAAKG,aAAajC,EAAQkC,EAAQf,EAC/B,CAACb,EAAQsF,EAAGC,EAAGC,EAAOC,KACnB,IACsByB,EADlBC,EAAOtG,EAAQW,SAASxB,GACxBoH,EAAYD,EAEhB,OAAQzQ,KAAKqC,QAAQ8N,SAClB,KAAK,EAIL,KAAK,GAAI,MAHT,KAAK,GAAIO,EAAY,OAAQF,EAAU,IAAIG,MAAgB,CAAEC,MAAOH,IAAS,MAC7E,KAAK,GAAIC,EAAY,OAAQF,EAAU,IAAIG,MAAgB,CAAEC,MAAM,EAAG/F,MAAQvB,EAAQ,EAAI,EAAI/I,MAAO,IAAM,MAC3G,KAAK,GAAImQ,EAAY,OAAQF,EAAUxQ,KAAKwQ,QAI/C,IAAIJ,EAAKN,EAAUlB,EAAIC,EAAIC,EAAQC,EAAoB,QAAb2B,GAC1C,IAAKN,EAAI,OAET,IAAIS,EAAO7Q,KAAK2K,OACDC,OAAO,YACPG,KAAK,QAAQ,eACbA,KAAK,IAAKqF,GACVvF,MAAM,OAAQ6F,GAEzBF,GACDK,EAAKC,KAAKN,EAAQZ,KAAI,GAI/B5G,EAAO+H,iBAAkB,EAElB/H,CACV,CAGAgI,gBAEG,MAAO,EACV,CAGAC,aAAajI,GACV,IACI7F,EAAGC,EAAGqG,EAAMyH,EAAMC,EAAMC,EAAM3G,EAAGR,EAAG1J,EAAO8Q,EAD3CvR,EAAQE,KAAK0D,WAGF,OAAXsF,IAAiBA,EAAShJ,KAAKiJ,YAAY,CAAEqG,UAAU,KAE3D,IAAIgC,EAAYtR,KAAKuR,WAAW,OAAQ,CAAEC,KAAM,GAAIZ,MAAO,QAASa,MAAO,KACvEC,EAAc,EACdC,EAAS3R,KAAK2K,OAAOC,OAAO,SAASG,KAAK,QAAQ,YAClD7B,EAAKF,EAAOG,MAAOC,EAAKJ,EAAOK,MAOnC,IAJIrJ,KAAKqC,QAAQuP,YAAWF,EAAc1R,KAAKqC,QAAQuP,WAEvD5R,KAAK6R,iBAAiBP,EAAU,OAAQK,GAEnCxO,EAAI6F,EAAO3F,GAAIF,EAAI6F,EAAOzF,GAAIJ,GAAK+F,EACrC,IAAK9F,EAAI4F,EAAOxF,GAAIJ,EAAI4F,EAAOvF,GAAIL,GAAKgG,EACrCK,EAAO3J,EAAMiE,cAAcZ,EAAE,EAAGC,EAAE,IACpB,IAATqG,GAAgBzJ,KAAKsK,oBAE1B4G,EAAOlI,EAAOkB,IAAI/G,EAAE+F,GAAMF,EAAOkB,IAAI/G,GACrCgO,EAAOnI,EAAOuB,IAAInH,GAAK4F,EAAOuB,IAAInH,EAAEgG,GAKpCgI,EAAQ3H,IAASzF,KAAKuK,MAAM9E,GAASA,EAAKqI,YAAQ,EACxCC,OAActI,EAAMuI,2BAE1BV,EAASW,OACVxH,EAAIzG,KAAKuK,MAAMvF,EAAOkB,IAAI/G,GAAU,GAAL+N,GAC/BjH,EAAIjG,KAAKuK,MAAMvF,EAAOuB,IAAInH,EAAEgG,GAAM+H,GAAM,GAAMO,IAC9CnR,EAAQ8Q,EAAS,IAEjB5G,EAAIzG,KAAKuK,MAAMvF,EAAOkB,IAAI/G,GAAU,GAAL+N,GAC/BjH,EAAIjG,KAAKuK,MAAMvF,EAAOuB,IAAInH,EAAEgG,GAAM+H,GAAM,GAAMO,IAC9CnR,EAAQyD,KAAKuK,MAAW,GAAL2C,GACnBG,EAASrN,KAAKuK,MAAW,GAAL4C,IAGvBnR,KAAKkS,SAAS,CAAET,MAAO,GAAIhH,IAAGR,IAAG1J,QAAO8Q,SAAQD,OAAMe,MAAO,EAAGxH,OAAQgH,KAG9E,OAAO3R,KAAKoS,kBAAkBT,GAAQ,GAAM1Q,KAAK,KAE9C+H,EAAO+H,iBAAkB,EAElB/H,GAEb,CAGAqJ,gBACG,IACIlP,EAAEC,EAAesG,EAAIC,EAAI2I,EAAGC,EAC5BC,EAAIC,EAAI1F,EAAGI,EAAGH,EAAGhD,EAAI0I,EAAIC,EAAGC,EAF5B9S,EAAQE,KAAK0D,WAAYwM,EAAM,GAC1B2C,EAAK,MAEV7J,EAAShJ,KAAKiJ,YAAY,CAAEqG,UAAU,IACtCwD,GAAW9J,EAAOkB,IAAIlB,EAAOzF,IAAMyF,EAAOkB,IAAIlB,EAAO3F,MAAM2F,EAAOzF,GAAKyF,EAAO3F,GAAK,EAAE,KAAM,EAC3F0P,GAAW/J,EAAOuB,IAAIvB,EAAOvF,IAAMuF,EAAOuB,IAAIvB,EAAOxF,MAAMwF,EAAOvF,GAAKuF,EAAOxF,GAAK,EAAE,KAAM,EAC3F0F,EAAKF,EAAOG,MAAOC,EAAKJ,EAAOK,MAEnC,MAAM2J,EAAW,CAACtJ,EAAIC,IACfD,EACMC,EAAM,IAAGD,KAAMC,IAAQ,IAAGD,IAC7BC,EAAM,IAAGA,IAAO,GAG1B,QAASsJ,EAAO,EAAGA,EAAO,IAAKA,EAC5B,IAAK9P,EAAI6F,EAAO3F,GAAIF,EAAI6F,EAAOzF,GAAIJ,GAAK+F,EACrC,IAAK9F,EAAI4F,EAAOxF,GAAIJ,EAAI4F,EAAOvF,GAAIL,GAAKgG,EAGlCM,EADCvG,IAAM6F,EAAO3F,GACTvD,EAAMiE,cAAcZ,EAAE,EAAE+F,EAAI9F,EAAE,GAAKtD,EAAMiE,cAAcZ,EAAE,EAAGC,EAAE,GAC3DD,GAAK6F,EAAOzF,GAAG2F,EAClBpJ,EAAMiE,cAAcZ,EAAE,EAAGC,EAAE,GAAKtD,EAAMiE,cAAcZ,EAAE,EAAE+F,EAAI9F,EAAE,GAE9D,IAAKtD,EAAMiE,cAAcZ,EAAE,EAAE+F,EAAI9F,EAAE,GAAKtD,EAAMiE,cAAcZ,EAAE,EAAE+F,EAAI9F,EAAE,IAG3EuG,EADCvG,IAAM4F,EAAOxF,GACT1D,EAAMiE,cAAcZ,EAAE,EAAGC,EAAE,EAAEgG,GAAMtJ,EAAMiE,cAAcZ,EAAE,EAAGC,EAAE,GAC3DA,GAAK4F,EAAOvF,GAAG2F,EAClBtJ,EAAMiE,cAAcZ,EAAE,EAAGC,EAAE,GAAKtD,EAAMiE,cAAcZ,EAAE,EAAGC,EAAE,EAAEgG,GAE7D,IAAKtJ,EAAMiE,cAAcZ,EAAE,EAAGC,EAAE,EAAEgG,GAAMtJ,EAAMiE,cAAcZ,EAAE,EAAGC,EAAE,EAAEgG,IAGhE,IAAT6J,EACDJ,EAAK7O,KAAKyK,IAAIoE,EAAI7O,KAAK0D,IAAIgC,GAAK1F,KAAK0D,IAAIiC,KAEzC2I,GAAMtJ,EAAOkB,IAAI/G,GAAK6F,EAAOkB,IAAI/G,EAAE+F,IAAK,EACxCqJ,GAAMvJ,EAAOuB,IAAInH,GAAK4F,EAAOuB,IAAInH,EAAEgG,IAAK,EACxCoJ,EAAMM,EAAQpJ,EAAGmJ,EACjBJ,EAAMM,EAAQpJ,EAAGkJ,EACjB9F,EAAMuF,EAAKE,EACXrF,EAAMmF,EAAKE,EACXxF,EAAMuF,EAAKE,EACXzI,EAAMuI,EAAKE,EACX/I,EAAK1F,KAAKuK,MAAMpB,EAAGJ,GACnBpD,EAAK3F,KAAKuK,MAAMvE,EAAGgD,IAEP,IAAPtD,GAAqB,IAAPC,KAChBuG,GAAO,IAAIlM,KAAKuK,MAAMxB,GAAI,IAAI/I,KAAKuK,MAAMvB,GAAMgG,EAAStJ,EAAGC,IAEvD3F,KAAK0D,IAAIgC,GAAM,GAAK1F,KAAK0D,IAAIiC,GAAM,KACpC+I,EAAM1O,KAAK2D,KAAK,GAAG+B,GAAI,EAAIC,GAAI,IAC/BgJ,EAAM3O,KAAKuK,MAAMmE,GAAKhJ,EAAKC,IAC3BiJ,EAAM5O,KAAKuK,MAAMmE,GAAKhJ,EAAKC,KACvBgJ,GAAMC,KACP1C,GAAQ,KAAIyC,KAAMC,IAAOI,EAASL,GAAIC,GAAMI,GAAUJ,GAAID,OAM/E,YAAKhI,OACDC,OAAO,YACPG,KAAK,IAAKmF,GACVrF,MAAM,OAAQ,QACdiG,KAAK9Q,KAAKwQ,QAAQZ,MAEf5G,CACV,CAGAkK,cAEG,IAAIpT,EAAQE,KAAK0D,WACbsF,EAAShJ,KAAKiJ,YAAY,CAAEqG,UAAU,IACtCG,EAAOzP,KAAK2E,kBAEZ8K,EAAK0D,SAAW1D,EAAK2D,SACtB3D,EAAK0D,OAASnT,KAAKuF,QACnBkK,EAAK2D,OAASpT,KAAKmF,QACnBsK,EAAK4D,UAAYrT,KAAKqF,YAErBoK,EAAK0D,SAAW1D,EAAK2D,SACtB3D,EAAK2D,OAASpP,KAAKF,IAAI,EAAG2L,EAAK0D,OAAO,IAEzC,IAEIhQ,EAAGC,EAAGqG,EAAM6J,EACZC,EAAOC,EAAMC,EAAMvN,EAAIC,EAAIuN,EAAIC,EAC/BC,EAJAC,EAAS7P,KAAKyK,IAAIzK,KAAK0D,IAAI+H,EAAK0D,QAASnP,KAAK0D,IAAI+H,EAAK2D,SACvDU,EAAS9P,KAAKyK,IAAI,EAAGgB,EAAK2D,QACRxM,EAAM,GAAImN,EAAQ,GAAIC,EAAO,GAAIC,EAAO,GAEhDC,GAAU,EAAOC,EAAS,EACpCjL,EAAKF,EAAOG,MAAOC,EAAKJ,EAAOK,MAEnC,GAAIoG,EAAK2E,MAASP,EAAS,EAAI,CAC5BK,GAAU,EACV,IAAIG,EAASrQ,KAAKsQ,IAAIT,GAEnBM,EADCL,EAAS,EACD9P,KAAKsQ,IAAIR,GACXrE,EAAK4D,WAAa,GAAO5D,EAAK4D,UAAY,IACxCrP,KAAKsQ,IAAI,IAER7E,EAAK4D,UAAY,EAAKrP,KAAKsQ,IAAI,GAAI7E,EAAK4D,WAAagB,EAAS,GACvEF,GAAUE,IAAQF,EAASE,EAAS,IACxCT,EAAW,GAAMS,EAASF,EAC7B,MACGP,EAAW,GAAMC,EAASC,GAI7B,IAAK3Q,EAAI6F,EAAO3F,GAAIF,EAAI6F,EAAOzF,GAAIJ,GAAK+F,EACrC,IAAK9F,EAAI4F,EAAOxF,GAAIJ,EAAI4F,EAAOvF,GAAIL,GAAKgG,EAGrC,GAFAK,EAAO3J,EAAMiE,cAAcZ,EAAI,EAAGC,EAAI,GACtCkQ,EAAOtP,KAAK0D,IAAI+B,KACF,IAAT6J,GAAgBA,EAAOQ,KAE5BP,EAAQW,EAAYZ,EAAO,EAAKtP,KAAKsQ,IAAIhB,GAAQa,EAAS,EAAMb,EAAOQ,EAEvEP,EAAQ,IAAQA,EAAQ,EAAK,EAAK,EAAIvP,KAAK2D,KAAK4L,EAAQK,IAEpDL,EAAQ,IAAGA,EAAQ,GAEvBG,EAAK1K,EAAOkB,IAAI/G,EAAE+F,GAAMF,EAAOkB,IAAI/G,GACnCwQ,EAAK3K,EAAOuB,IAAInH,GAAK4F,EAAOuB,IAAInH,EAAEgG,GAElCoK,EAAOD,EAAQG,EACfD,EAAOF,EAAQI,EAEfzN,EAAKlC,KAAKuK,MAAMvF,EAAOkB,IAAI/G,GAAKqQ,GAChCrN,EAAKnC,KAAKuK,MAAMvF,EAAOuB,IAAInH,EAAEgG,GAAMqK,GAEnCC,EAAK1P,KAAKyK,IAAIzK,KAAKuK,MAAMmF,EAAK,EAAEF,GAAO,GACvCG,EAAK3P,KAAKyK,IAAIzK,KAAKuK,MAAMoF,EAAK,EAAEF,GAAO,GAEvC7M,GAAQ,IAAGV,KAAMC,KAAMwN,KAAMD,MAAOC,KAE/BlK,EAAO,GAAiC,KAA1BzJ,KAAKqC,QAAQkS,WAC7BR,GAAU,IAAG7N,KAAMC,KAAMuN,KAAMC,KAAMzN,EAAGwN,KAAMvN,MAAOuN,KAAMC,KAE/B,KAA1B3T,KAAKqC,QAAQkS,UAAqBb,EAAG,GAAOC,EAAG,GAAI,CACrD,IAAIa,EAAMxQ,KAAKuK,MAAS,GAAHmF,GACjBe,EAAMzQ,KAAKuK,MAAS,GAAHoF,GACjBe,EAAS,IAAGxO,KAAMC,KAAMuN,MAAOc,KAAOC,KAAO,EAAED,EAAId,KAAMC,EAAG,EAAEc,MAAQD,KAAOC,KAC7EE,EAAS,IAAGzO,EAAGwN,KAAMvN,EAAGwN,MAAOA,MAAOa,KAAOC,KAAOd,EAAG,EAAEc,KAAO,EAAED,EAAId,MAAOc,KAAOC,KACpFhL,EAAO,GAAKwK,GAAQS,EAAOV,GAAQW,IACvBX,GAAQU,EAAOT,GAAQU,EAC1C,CAIN,GAAI/N,EAAK,CACN,IAAIiK,EAAO7Q,KAAK2K,OACAC,OAAO,YACPG,KAAK,IAAKnE,GACVkK,KAAK9Q,KAAK4U,QAAQhF,MACH,KAA1B5P,KAAKqC,QAAQkS,UAAoBvU,KAAK4U,QAAQC,SAChDhE,EAAKC,KAAK9Q,KAAKwQ,QAAQZ,KAC7B,CAcA,GAZIoE,GAAQhU,KAAK4U,QAAQE,YACtB9U,KAAK2K,OAAOC,OAAO,YACPG,KAAK,IAAKiJ,GACVlD,KAAK9Q,KAAK4U,QAAQhF,MAClB/E,MAAM,UAAQkK,OAAO/U,KAAK4U,QAAQhE,OAAOoE,SAAS,IAAKC,aAElEhB,GACDjU,KAAK2K,OAAOC,OAAO,YACPG,KAAK,IAAKkJ,GACVnD,KAAK9Q,KAAK4U,QAAQhF,MAClB/E,MAAM,OAAS7K,KAAK4U,QAAQE,YAAQ,EAAaC,OAAO/U,KAAK4U,QAAQhE,OAAOsE,OAAO,IAAKD,YAA/C,OAEpDlB,EAAO,CACR,IAAIlD,EAAO7Q,KAAK2K,OAAOC,OAAO,YACPG,KAAK,IAAKgJ,GACVlJ,MAAM,OAAQ,QAChC7K,KAAKwQ,QAAQqE,SACfhE,EAAKC,KAAK9Q,KAAKwQ,QAAQZ,KAC7B,CAEA,OAAO5G,CACV,CAGAmM,kBACG,IAGI7L,EAASC,EAAMC,EAAMrG,EAAGC,EAAGqG,EAAM2L,EAAIC,EAHrCvV,EAAQE,KAAK0D,WACbsF,EAAShJ,KAAKiJ,YAAY,CAAEqG,UAAU,EAAMgG,eAAe,EAAMC,cAAc,IAC/EC,EAAW,GAAIC,EAAQ,GAAIC,EAAQ,GAAIC,EAAS,GAAIC,EAAS,GACpBC,EAAS,EAClDC,EAAQ9V,KAAKqC,QAAQ0T,UAAa/V,KAAKuF,QAAW,IAAO,IAAQvF,KAAKuF,QAAU,GAChF2D,EAAKF,EAAOG,MAAOC,EAAKJ,EAAOK,MAE/B2M,EAAM,IAAIC,MAAQjN,EAAOkN,MAE7B,GAAIJ,EAAM9M,EAAOkN,KAAO,IAAK,CAG1BlW,KAAKmW,oBAELnW,KAAKoW,UAAUC,WAEf,IAAe1U,EAAG2U,EAAdvM,EAAO,GACX,IAAK5G,EAAI6F,EAAO3F,GAAIF,EAAI6F,EAAOzF,GAAIJ,GAAK+F,EAErC,IADAkM,EAAKpM,EAAOkB,IAAI/G,EAAE+F,GAAMF,EAAOkB,IAAI/G,GAC9BC,EAAI4F,EAAOxF,GAAIJ,EAAI4F,EAAOvF,GAAIL,GAAKgG,EAKrC,GAJAiM,EAAKrM,EAAOuB,IAAInH,GAAK4F,EAAOuB,IAAInH,EAAEgG,GAClCK,EAAO3J,EAAMiE,cAAcZ,EAAI,EAAGC,EAAI,GAEtCkT,EAAOtS,KAAKuK,MAAMuH,EAAMrM,KACpB6M,GAAQ,GAEZ,IAAK3U,EAAI,EAAGA,EAAI2U,IAAQ3U,EACrBoI,GAAQ/J,KAAKoW,UAAUG,OACbvS,KAAKuK,MAAMvF,EAAOkB,IAAI/G,GAAKiS,EAAKY,EAAIQ,UACpCxS,KAAKuK,MAAMvF,EAAOuB,IAAInH,EAAE,GAAKiS,EAAKW,EAAIQ,WAIzD,YAAK7L,OACCC,OAAO,YACPG,KAAK,IAAKhB,GACV+G,KAAK9Q,KAAKoW,UAAUxG,MAEnB5G,CACV,CAQA,IALIhJ,KAAKmT,OAAS,KAAK0C,EAAS,GAAI7V,KAAKmT,QAKpChQ,EAAI6F,EAAO3F,GAAIF,EAAI6F,EAAOzF,GAAIJ,GAAK+F,EACrC,IAAK9F,EAAI4F,EAAOxF,GAAIJ,EAAI4F,EAAOvF,GAAIL,GAAKgG,EACrCK,EAAO3J,EAAMiE,cAAcZ,EAAI,EAAGC,EAAI,KACjCqG,GAAQ,GAAOA,EAAOzJ,KAAKoT,UAEhCgC,EAAKpM,EAAOkB,IAAI/G,EAAE+F,GAAMF,EAAOkB,IAAI/G,GACnCkS,EAAKrM,EAAOuB,IAAInH,GAAK4F,EAAOuB,IAAInH,EAAEgG,KAC9BgM,EAAGC,GAAM,KAEb/L,EAAUN,EAAOmB,QAAQC,gBAAgBX,EAAK2L,EAAGC,KAC7C/L,EAAU,KAEdC,EAAQ,IAAGP,EAAOkB,IAAI/G,MAAM6F,EAAOuB,IAAInH,EAAEgG,UACfoB,IAAtBgL,EAASlM,IACVkM,EAASlM,GAAWC,EACpBoM,EAAOrM,GAAW8L,EAClBQ,EAAOtM,GAAW+L,IAElB7L,EAAQ,IAAGR,EAAOkB,IAAI/G,GAAGsS,EAAMnM,MAAYN,EAAOuB,IAAInH,EAAEgG,GAAMsM,EAAMpM,KACpEkM,EAASlM,IAAaE,EAAK/I,OAAS8I,EAAK9I,OAAU+I,EAAOD,EAC1DoM,EAAOrM,GAAWtF,KAAKyK,IAAIkH,EAAOrM,GAAU8L,GAC5CQ,EAAOtM,GAAWtF,KAAKyK,IAAImH,EAAOtM,GAAU+L,IAG/CI,EAAMnM,GAAWN,EAAOkB,IAAI/G,GAC5BuS,EAAMpM,GAAWN,EAAOuB,IAAInH,EAAEgG,GAE9BoM,EAASlM,IAAa,IAAG+L,KAAMD,MAAOC,QAI5C,IAAIoB,EAAQzW,KAAK0W,cAAcC,OAAO,eAClCC,EAAOH,EAAME,OAAO,OACpBC,EAAK/B,SAAYW,EAAS/U,OAAS,IACpCmW,EAAOH,EAAMI,OAAO,WAAY,iBAEnC7W,KAAKmW,oBAEL,IAAIW,EAAO9N,EAAOmB,QAAQwF,aAE1B,IAAKrG,EAAU,EAAGA,EAAUkM,EAAS/U,SAAU6I,EAC7C,QAA2BkB,IAAtBgL,EAASlM,IAA4BA,EAAQwN,EAAKrW,OAAS,CAC7D,IAAIsW,EAAgB,WAAazN,EAC7B0N,EAAUJ,EAAKD,OAAO,IAAMI,GAC5BC,EAAQnC,QACTmC,EAAUJ,EAAKhM,OAAO,eACPG,KAAK,QAASgM,GACdhM,KAAK,KAAM,0BAA4BkM,0BACvClM,KAAK,eAAe,kBAEnCiM,EAAQE,UAAU,KAAKC,SAE1B,IAAIb,EAAOtS,KAAKuK,MAAMsH,EAAOiB,EAAKxN,GAASqM,EAAOrM,GAASsM,EAAOtM,IAC9DgN,EAAO,IAAGA,EAAO,GAErB,IAAIxI,EAAO,IAAI7B,aAAaqK,GAAOrI,EAAO,IAAIhC,aAAaqK,GAE3D,GAAa,IAATA,EACDxI,EAAK,GAAKG,EAAK,GAAK,QAEpB,QAAS1C,EAAI,EAAGA,EAAI+K,IAAQ/K,EACzBuC,EAAKvC,GAAKyK,EAAIQ,SACdvI,EAAK1C,GAAKyK,EAAIQ,SAMpBxW,KAAKoW,UAAUC,WAEf,IAAItM,EAAO,GAEX,QAASwB,EAAI,EAAGA,EAAI+K,IAAQ/K,EACzBxB,GAAQ/J,KAAKoW,UAAUG,OAAOzI,EAAKvC,GAAKoK,EAAOrM,GAAU2E,EAAK1C,GAAKqK,EAAOtM,IAE7E0N,EAAQjM,KAAK,QAAS4K,EAAOrM,IACrByB,KAAK,SAAU6K,EAAOtM,IACtBsB,OAAO,YACPG,KAAK,IAAIhB,GACT+G,KAAK9Q,KAAKoW,UAAUxG,MAE5B5P,KAAK2K,OACAC,OAAO,YACPG,KAAK,gBAAiBzB,GACtBuB,MAAM,OAAS,QAAOmM,EAAQjM,KAAK,UACnCA,KAAK,IAAKyK,EAASlM,GAC3B,CAEF,OAAON,CACV,CAGMoO,aAAa,qCAEhB,IAAKC,EAAKzR,aACP,SAAK0R,WACE,EAGVD,EAAKE,2BAELF,EAAKG,SAAQ,GAEb,IAAIC,EAAQJ,EAAK1S,kBACb+S,EAAOD,EAAME,eACbxI,EAAQsI,EAAMG,WAAWP,EAAKhV,QAAQwV,SAAUR,EAAKhV,QAAQyV,UAC7D9O,EAAS,KAAM+O,EAAK,KAIxB,OAAIV,EAAKhV,QAAQ2V,KACdhP,EAASqO,EAAKlC,kBACRkC,EAAKhV,QAAQC,MACnB0G,EAASqO,EAAKtO,gBACRsO,EAAKhV,QAAQ4V,IACnBjP,EAASqO,EAAKnE,cACRmE,EAAKhV,QAAQ6V,MACnBlP,EAASqO,EAAKhF,gBACRgF,EAAKhV,QAAQ8N,QAAU,IAC7BnH,EAASqO,EAAKnI,gBAAgBC,EAAOuI,EAAKnX,MAAOmX,EAAKrG,SAErDgG,EAAKhV,QAAQ8V,OACdJ,EAAKV,EAAKpG,aAAajI,KAErBA,IAAW+O,IACb/O,EAASqO,EAAKtO,iBAEZgP,IAAIA,EAAKK,QAAQC,QAAQrP,IAEvB+O,EAAG9W,KAAKqX,IACZjB,EAAKlX,UAAYmY,EACVjB,GACP,EAxCa,EAyCnB,CAGAkB,eAAepV,EAAGC,GACf,IAAIoV,EAAQ,GACP1Y,EAAQE,KAAK0D,WACb+F,EAAO3J,EAAMiE,cAAcZ,EAAE,EAAEC,EAAE,GACjC8F,EAAK,EAAGE,EAAK,EAEdpJ,KAAKkF,kBACNgE,EAAKpJ,EAAM2Y,OAAS,EACpBrP,EAAKtJ,EAAM4Y,OAAS,GAGvBF,EAAMG,KAAK3Y,KAAK4Y,iBAAmB,YACnCJ,EAAMG,KAAK,OAAS3Y,KAAK6Y,cAAc,IAAK1V,EAAG+F,GACpC,OAASlJ,KAAK6Y,cAAc,IAAKzV,EAAGgG,IAE/CoP,EAAMG,KAAM,SAAQxV,EAAE,MAAMC,EAAE,KAE1BtD,EAAMgZ,SAAQrP,GAAQ3J,EAAMgZ,OAAO/U,cAAcZ,EAAE,EAAEC,EAAE,IAE3D,IAAI2V,EAAM,cAAiB7P,EAAK,GAAOE,EAAK,EAAK,IAAM,IAEvD,OAAIK,IAASzF,KAAKuK,MAAM9E,GACrB+O,EAAMG,KAAKI,EAAMtP,GAEjB+O,EAAMG,KAAKI,KAAMhH,OAActI,EAAMuI,uBAEjCwG,CACV,CAGAQ,qBAEG,MAAO,EACV,CAGAC,oBAAoBhJ,GACjB,IAAKA,IAAQjQ,KAAK4F,eAAiB5F,KAAK2K,SAAW3K,KAAKG,WAAaH,KAAKqC,QAAQmN,KAC/E,OAAIxP,KAAK2K,QACN3K,KAAK2K,OAAOgM,OAAO,gBAAgBQ,SAC/B,KAGV,IAAIrX,EAAQE,KAAK0D,WACb4U,EAAItY,KAAKG,UACT+Y,EAASlZ,KAAK2K,OAAOgM,OAAO,gBAEhC,GAAI2B,EAAEjN,KAEH,OAAO,KAGV,IAAIlI,EAAGC,EAAGqG,EAAO,EAAGH,EAAU,KAG9B,IAAKnG,EAAImV,EAAEjV,GAAIF,EAAImV,EAAE/U,MACb0M,EAAIxF,GAAG6N,EAAEpO,IAAI/G,IAAQ8M,EAAIxF,GAAG6N,EAAEpO,IAAI/G,EAAE,MADjBA,GAG3B,IAAKC,EAAIkV,EAAE9U,GAAIJ,EAAIkV,EAAE7U,MACbwM,EAAIhG,GAAGqO,EAAE/N,IAAInH,EAAE,IAAQ6M,EAAIhG,GAAGqO,EAAE/N,IAAInH,MADjBA,GAe3B,GAZKD,EAAImV,EAAE/U,IAAQH,EAAIkV,EAAE7U,KACtBgG,EAAO3J,EAAMiE,cAAcZ,EAAE,EAAEC,EAAE,GAC7BpD,KAAKY,cACN0I,EAAU,EACFgP,EAAEvH,gBACVzH,EAAoB,IAATG,GAAgBzJ,KAAKsK,iBAA0B,EAAP,MAEnDhB,EAAUgP,EAAEnO,QAAQC,gBAAgBX,GACnB,OAAZH,GAA+B,IAATG,GAAezJ,KAAKsK,mBAAkBhB,EAAU,KAIjE,OAAZA,EACD4P,SAAO/B,SACA,KAGV,IAAIvQ,EAAM,CAAEC,KAAM,QAASsS,MAAOrZ,EAAMsZ,QAAU,QACtC3O,EAAGwF,EAAIxF,EAAGR,EAAGgG,EAAIhG,EACjBoP,OAAQrZ,KAAKwQ,QAAUxQ,KAAKwQ,QAAQI,MAAQ,QAC5C0I,OAAQtZ,KAAK4U,QAAU5U,KAAK4U,QAAQ2E,gBAAgB,QAAU,OAC9Df,MAAOxY,KAAKuY,eAAepV,EAAGC,GAAIoW,OAAO,EAAMhY,MAAM,GAIjE,GAFIxB,KAAKqC,QAAQC,QAAOsE,EAAI0S,OAAShB,EAAEnO,QAAQW,SAASxB,IAEpD2G,EAAIwJ,WAAazZ,KAAKY,cACvBsY,EAAO/B,SACPvQ,EAAI8S,SAAU,MACV,CACAR,EAAOrE,UACRqE,EAASlZ,KAAK2K,OAAOC,OAAO,YACPG,KAAK,QAAQ,qBACbF,MAAM,iBAAiB,SAE/C,IAAIxH,EAAKF,EAAGI,EAAKJ,EAAE,EACfK,EAAKJ,EAAGK,EAAKL,EAAE,EACf2J,EAAKuL,EAAEpO,IAAI7G,GAAK8J,EAAKmL,EAAEpO,IAAI3G,GAC3ByJ,EAAKsL,EAAE/N,IAAI9G,GAAKuG,EAAKsO,EAAE/N,IAAI/G,GAC3BmW,EAAU,IAAFxW,EAAUC,EAEtB,GAA0B,KAAtBpD,KAAKY,cAAsB,CAE5B,GADAmM,EAAK,EAAGI,EAAKnN,KAAK2E,kBAAkBiV,gBAChC5Z,KAAKa,iBAAmB,EAAG,CAC5B,IAAIuP,GAAMpQ,KAAKa,iBAAiB,GAAG,EAC/B4C,EAAG2M,GAAMkI,EAAE7U,IAAMA,EAAKO,KAAKF,IAAIE,KAAKuK,MAAM9K,EAAG2M,GAAKkI,EAAE7U,IAAKD,EAAKQ,KAAKyK,IAAIhL,EAAKzD,KAAKa,iBAAkByX,EAAE9U,MACpFA,EAAKQ,KAAKyK,IAAIzK,KAAKuK,MAAM/K,EAAG4M,GAAKkI,EAAE9U,IAAKC,EAAKO,KAAKF,IAAIN,EAAKxD,KAAKa,iBAAkByX,EAAE7U,IAC5G,CACAuJ,EAAKsL,EAAE/N,IAAI9G,GAAKuG,EAAKsO,EAAE/N,IAAI/G,GAC3BmW,EAAW,IAAHnW,EAAY,IAAHC,CACpB,SAAiC,KAAtBzD,KAAKY,cAAsB,CAEnC,GADAoM,EAAK,EAAGhD,EAAKhK,KAAK2E,kBAAkBkV,iBAChC7Z,KAAKa,iBAAmB,EAAG,CAC5B,IAAIuP,GAAMpQ,KAAKa,iBAAiB,GAAG,EAC/B0C,EAAG6M,GAAMkI,EAAE/U,IAAMA,EAAKS,KAAKF,IAAIE,KAAKuK,MAAMhL,EAAG6M,GAAKkI,EAAE/U,IAAKF,EAAKW,KAAKyK,IAAIlL,EAAKvD,KAAKa,iBAAkByX,EAAEjV,MACpFA,EAAKW,KAAKyK,IAAIzK,KAAKuK,MAAMlL,EAAG+M,GAAKkI,EAAEjV,IAAKE,EAAKS,KAAKF,IAAIT,EAAKrD,KAAKa,iBAAkByX,EAAE/U,IAC5G,CACAwJ,EAAKuL,EAAEpO,IAAI7G,GAAK8J,EAAKmL,EAAEpO,IAAI3G,GAC3BoW,EAAW,IAAHtW,EAAY,IAAHE,CACpB,CAEAqD,EAAI8S,QAAUR,EAAOY,SAAS,iBAAmBH,EAE7C/S,EAAI8S,SACLR,EAAOnO,KAAK,IAAKgC,GACVhC,KAAK,QAASoC,EAAKJ,GACnBhC,KAAK,IAAKiC,GACVjC,KAAK,SAAUf,EAAKgD,GACpBnC,MAAM,UAAW,OACjBiP,SAAS,cAAeH,GAE9B3Z,KAAKY,eAAiBgG,EAAI8S,SAC3B1Z,KAAKkB,iBAAiBmC,EAAIE,EAAIC,EAAIC,EACxC,CAEA,OAAImD,EAAI8S,UACL9S,EAAImT,UAAY,CAAEC,IAAKla,EAAO+G,KAAM,QAClBoT,IAAKna,EAAMoa,OAAO/W,EAAE,EAAGC,EAAE,GAAI+W,KAAM1Q,EAAM2Q,KAAMjX,EAAE,EAAGkX,KAAMjX,EAAE,EAC5D8G,IAAK+F,EAAIxF,EAAGF,IAAK0F,EAAIhG,IAEnCrD,CACV,CAGA0T,cAAcC,EAAKzW,EAAI2K,GACpB,GAAY,KAAR8L,EAAa,OAAO,EACxB,IAAIP,EAAMha,KAAK4D,QAAQ2W,GACvB,OAAOP,EAAIQ,QAAQ/L,EAAI,IAAOuL,EAAIQ,QAAQ1W,EAAI,GAAK,CACtD,CAIM2W,OAAOC,GAAQ,qCAClB,SAAKC,eAEEC,EAAKC,gBAAgB5Z,KAAK2F,KACxBA,GAAMgU,EAAKE,YAAYJ,IAC7BzZ,KAAK2F,IACL,GAAIA,EAAK,OAAOgU,EAAKxD,aAAanW,KAAK,IAAM2Z,EAAKG,mBAAkB,GACpE9Z,KAAK,IAAM2Z,EAAM,EAPF,EAQrB,CAIMI,OAAON,GAAQ,qCAClBO,eAAQ3G,IAAI,sDACL4G,EAAKT,OAAOC,EAAQ,EAFT,EAGrB,CAGMS,aAAaT,GAAQ,qCACxB,IAAIjL,EAAO2L,EAAKzW,kBAEhB,OAAI8K,GAASA,EAAK4L,SAAWD,EAAK/Y,QAAQY,SAAYmY,EAAKE,kBACxDF,EAAK/Y,QAAQY,OAASwM,EAAK4L,QAEvBD,EAAK/Y,QAAQY,OAASmY,EAAKJ,OAAON,GAAUU,EAAKX,OAAOC,EAAQ,EAN/C,EAO3B,CAGMxX,OAAOwX,GAAQ,qCAClB,OAAOa,EAAKJ,aAAaT,EAAQ,EADf,EAErB,CAIAc,aAAmBC,GAAmB,0BACnC,SAAOC,kBAAcD,GAASxa,KAAK,KAEhCwa,EAAQE,mBAERF,EAAQpZ,QAAU,CAAEuZ,MAAM,EAAOC,OAAO,EAAOxR,MAAM,EAAOyR,MAAM,EAC9CC,MAAM,EAAOC,MAAM,EAAOC,KAAM,EAAGC,KAAM,EACzC/D,MAAM,EAAMgE,UAAW,EAAGC,SAAU,GACpCC,UAAU,EAAOpZ,QAAQ,EAAOqZ,UAAW,EAC3Cha,OAAO,EAAO0V,MAAM,EAAOjC,SAAU,EAAGkC,KAAK,EAAO1D,SAAU,EAAG2D,OAAO,EAAO/H,QAAS,EAAGX,KAAM,EACjGoC,UAAW,EAAI2K,SAAU,EAAIC,QAASC,UAASC,QAASD,WAE5E,IAAInc,EAAOmb,EAAQkB,WAAW,OAAQ,IAClCC,EAAMnB,EAAQkB,WAAW,MAAO,GAChCE,EAAIpB,EAAQpZ,QAIhB,OAFAwa,EAAE1E,KAAOsD,EAAQkB,WAAW,YAAY,GAEjCrc,GACJ,IAAK,OAAQuc,EAAEZ,KAAOW,EAAM,EAAI,GAAGA,EAAM,GAAIC,EAAE5Z,QAAS,EAAM,MAC9D,IAAK,OAAQ4Z,EAAEX,KAAOU,EAAM,EAAI,GAAGA,EAAM,EAAGC,EAAE5Z,QAAS,EAAM,MAC7D,IAAK,MAAO4Z,EAAE5E,KAAM,EAAM4E,EAAEtI,SAAW,GAAKqI,EAAK,MACjD,IAAK,MAAOC,EAAEhB,OAAQ,EAAMgB,EAAE5Z,QAAS,EAAM,MAC7C,IAAK,OAAQ4Z,EAAE1M,QAAUyM,EAAM,EAAI,GAAGA,EAAM,EAAG,MAC/C,IAAK,MAAOC,EAAE3E,OAAQ,EAAM,MAC5B,IAAK,OAAQ2E,EAAE7E,MAAO,EAAM,MAC5B,IAAK,MAAO6E,EAAEva,OAAQ,EAAM,MAC5B,QAAcua,EAAE1E,OAAM0E,EAAEva,OAAQ,GAMnCmZ,SAAQnR,kBAAmB,EAE3BmR,EAAQ5W,cAED4W,EAAQN,cAAY,EAC3B,EAtCgC,EAuCtC,CAGAK,YAAkB3b,EAAKma,EAAK8C,GAAK,0BAE9B,OAAOpd,EAAWqd,MAAM,IAAIrd,EAAWG,EAAKma,GAAM8C,EAAK,EAFzB,EAGjC,2BCh2CH,MAAMpd,UAAmBsd,EAGtBC,aAEG,GAAKjd,KAAK4F,aAEV,IAAI5F,KAAKqC,QAAQ6Z,KACd,SAAOgB,MAAeld,MAAM,GAE/B,GAAIA,KAAKqC,QAAQwZ,MACd,SAAOsB,MAAgBnd,MAAM,GAEhC,GAAIA,KAAKqC,QAAQ8N,QACd,SAAOiN,MAAkBpd,MAAM,GAAM,IAExCqd,QAAard,MAAM,GACnBA,KAAKgL,mBAAiB,CACzB,CAEAgQ,OAAON,GAEJ1a,KAAKqb,QAAS,EAEd,IAAI5L,EAAOzP,KAAK2E,kBACZ2Y,EAAUtd,KAAKsb,gBACfvD,EAAKK,QAAQC,QAAQrY,MAEzB,GAAc,UAAV0a,EACD,OAAI4C,GAAW7N,EAAK8N,YAAY9N,EAAK+N,WAE9BzF,EAGV,IAAI0F,EAAQ,EAAI,EAAEzL,wBAmBlB,OAjBAhS,KAAK0F,KAAO+J,EAAK2E,KAAyB,GAAlBpU,KAAKqF,WAAmBrF,KAAKmF,QACrDnF,KAAK2F,KAAO3F,KAAKuF,QACbvF,KAAKqC,QAAQma,UAAYC,YAASzc,KAAK0F,KAAO1F,KAAKqC,QAAQma,SAC3Dxc,KAAKqC,QAAQqa,UAAYD,YAAWzc,KAAK2F,KAAO3F,KAAKqC,QAAQqa,QAASe,EAAQ,GAC9EhO,EAAK2E,MAASpU,KAAK0F,MAAQ,IAAI1F,KAAK0F,KAAmB,KAAZ1F,KAAK2F,MAEpD3F,KAAK0d,aAEDJ,OACDK,MAAqBlO,GACrBsI,EAAKtI,EAAKmO,cAAc5d,KAAKqC,QAAQwb,UAAU5c,KAAK,KACjDwO,EAAKqO,cAAc9d,KAAK4D,QAAQ,KAAM5D,KAAKqE,KAAMrE,KAAKsE,KAAMtE,KAAK4D,QAAQ,KAAM5D,KAAKuE,KAAMvE,KAAKwE,KAAM,KAAMxE,KAAK0F,KAAM1F,KAAK2F,MAC3H8J,EAAKsO,aAAa/d,KAAKqC,SACvBoN,EAAKuO,QAAQvO,EAAKwO,SAAUC,KAAc,CAAET,QAAO7Y,KAAMuZ,mBAAkBC,KAAM,EAAGC,MAAM,EAAMC,IAAI,GAAM,IAI3G7O,EAAK4L,OAGHtD,EAAG9W,KAAK,IAAMjB,KAAK8a,YAAYJ,IAASzZ,KAAK,KAEjD,IAAIwO,EAAOzP,KAAK2E,kBAEhB,YAAKsY,aACLxN,EAAK+N,WACL/N,EAAK8O,iBAEEve,OAVA+X,CAYb,CAGAyD,YAAkB3b,EAAKma,EAAK8C,GAAK,0BAE9B,OAAOpd,EAAWqd,MAAM,IAAIrd,EAAWG,EAAKma,GAAM8C,EAAK,EAFzB,EAGjC","names":["RH2Painter","RHistPainter","constructor","dom","histo","super","this","wheel_zoomy","cleanup","tt_handle","getDimension","toggleProjection","kind","width","isStr","length","parseInt","slice","is_projection","projection_width","proj_hist","new_proj","provideSpecialDrawArea","then","redrawProjection","executeMenuCommand","method","args","fName","fillHistContextMenu","menu","add","kinds","k","addchk","arg","autoZoom","opts","getSupportedDrawOptions","addDrawMenu","showInspector","decodeOptions","interactiveRedraw","options","Color","fillPaletteMenu","clickButton","funcname","toggleColor","toggleMode3D","fillToolbar","pp","getPadPainter","addPadButton","showPadButtons","Mode3D","redraw","i","j","i1","getSelectIndex","i2","j1","j2","getHisto","xaxis","getAxis","yaxis","min","getBinContent","Math","ileft","iright","jleft","jright","xmin","xmax","ymin","ymax","isany","GetBinCoord","getFramePainter","zoom","scanContent","when_axis_changed","nbinsx","nbinsy","extractAxesProperties","isDisplayItem","gminbin","fContMin","gminposbin","fContMinPos","gmaxbin","fContMax","bin_content","zmin","zmax","draw_content","Axis","countStat","cond","xside","yside","xx","yy","zz","xi","yi","stat_sum0","stat_sumx1","stat_sumy1","stat_sumx2","stat_sumy2","res","name","entries","integral","meanx","meany","rmsx","rmsy","matrix","wmax","xleft","xright","yleft","yright","abs","sqrt","fillStatistic","stat","dostat","data","print_name","floor","print_entries","print_mean","print_rms","print_under","print_over","print_integral","print_skew","print_kurt","clearStat","addText","format","m","toFixed","drawBinsColor","handle","prepareDraw","di","stepi","dj","stepj","colindx","cmd1","cmd2","binz","dx","dy","entry","last_entry","flush_last_entry","path","y2","y","grx","palette","getContourIndex","Zero","_show_empty_bins","gry","undefined","x","forEach","draw_g","append","style","getColor","attr","updatePaletteDraw","buildContour","levels","contour_func","ipoly","poly","np","n","ix","ljfill","count","xsave","ysave","itars","jx","kMAXCONTOUR","xarr","Float32Array","yarr","itarr","Int32Array","lj","polys","npmax","zc","ir","BinarySearch","kk","PaintContourLine","elev1","icont1","x1","y1","elev2","icont2","x2","xlen","pdif","diff","elev","vert","tlen","tdif","ii","maxii","icount","arrx","original","origx","arry","origy","createTPolyLine","fLastPoint","fN","fX","round","fY","max","polysort","first","xp","yp","iminus","iplus","nadd","istart","drawBinsContour","funcs","frame_w","frame_h","rounding","extra","Proj","main","getHistPalette","getContour","func","getProjectionFunc","BuildPath","do_close","last","pnt","cmd","Contour","dd","sz","xd","yd","lineatt","icol","fillcolor","TAttLineHandler","color","elem","call","hide_only_zeros","createPolyBin","drawBinsText","binw","binh","text","height","textFont","v7EvalFont","size","align","text_offset","text_g","BarOffset","startTextDrawing","toString","floatToString","gStyle","angle","drawText","latex","finishTextDrawing","drawBinsArrow","xc","yc","dxn","dyn","anr","si","co","dn","scale_x","scale_y","makeLine","loop","drawBinsBox","maxbin","minbin","minposbin","absz","zdiff","dgrx","dgry","ww","hh","xyfactor","absmax","absmin","cross","btn1","btn2","uselogz","logmin","logz","logmax","log","BoxStyle","pww","phh","side1","side2","fillatt","empty","hasColor","d3_rgb","brighter","formatHex","darker","drawBinsScatter","cw","ch","pixel_density","scatter_plot","colPaths","currx","curry","cell_w","cell_h","factor","scale","ScatCoef","rnd","TRandom","sumz","createv7AttMarker","markeratt","resetPos","npix","create","random","layer","getFrameSvg","select","defs","insert","cntr","pattern_class","pattern","internals","selectAll","remove","draw2DBins","_this","removeG","createHistDrawAttributes","createG","pmain","rect","getFrameRect","getGrFuncs","second_x","second_y","pr","Scat","Box","Arrow","Text","Promise","resolve","h","getBinTooltips","lines","stepx","stepy","push","getObjectHint","getAxisBinTip","$baseh","lbl","getPolyBinTooltips","processTooltipEvent","ttrect","title","fTitle","color1","color2","getFillColorAlt","exact","disabled","changed","binid","getFrameWidth","getFrameHeight","property","user_info","obj","bin","getBin","cont","binx","biny","canZoomInside","axis","FindBin","draw2D","reason","clear3DScene","_this2","drawFrameAxes","drawingBins","addInteractivity","draw3D","console","_this3","callDrawFunc","_this4","mode3d","isMainPainter","_this5","static","painter","ensureRCanvas","setAsMainPainter","Hist","Error","Mark","Line","Fill","Lego","Surf","TextAngle","TextKind","BaseLine","AutoColor","BarWidth","minimum","kNoZoom","maximum","v7EvalAttr","sub","o","opt","_draw","RH2Painter2D","draw3DBins","drawBinsSurf3D","drawBinsError3D","drawBinsContour3D","drawBinsLego","is_main","resize3D","render3D","zmult","deleteAttr","assignFrame3DMethods","create3DScene","Render3D","setAxesRanges","set3DOptions","drawXYZ","toplevel","RAxisPainter","settings","ndim","draw","v7","addKeysHandler"],"sourceRoot":"webpack:///","sources":["../node_modules/jsroot/modules/hist2d/RH2Painter.mjs","../node_modules/jsroot/modules/hist/RH2Painter.mjs"],"sourcesContent":["import { gStyle, internals, isStr, createTPolyLine, kNoZoom } from '../core.mjs';\nimport { rgb as d3_rgb } from '../d3.mjs';\nimport { TAttLineHandler } from '../base/TAttLineHandler.mjs';\nimport { floatToString, TRandom } from '../base/BasePainter.mjs';\nimport { RHistPainter } from './RHistPainter.mjs';\nimport { ensureRCanvas } from '../gpad/RCanvasPainter.mjs';\n\n/**\n * @summary Painter for RH2 classes\n *\n * @private\n */\n\nclass RH2Painter extends RHistPainter {\n\n /** @summary constructor\n * @param {object|string} dom - DOM element or id\n * @param {object} histo - histogram object */\n constructor(dom, histo) {\n super(dom, histo);\n this.wheel_zoomy = true;\n }\n\n /** @summary Cleanup painter */\n cleanup() {\n delete this.tt_handle;\n super.cleanup();\n }\n\n /** @summary Returns histogram dimension */\n getDimension() { return 2; }\n\n /** @summary Toggle projection */\n toggleProjection(kind, width) {\n\n if (kind == 'Projections') kind = '';\n\n if (isStr(kind) && (kind.length > 1)) {\n width = parseInt(kind.slice(1));\n kind = kind[0];\n }\n\n if (!width) width = 1;\n\n if (kind && (this.is_projection==kind)) {\n if (this.projection_width === width) {\n kind = '';\n } else {\n this.projection_width = width;\n return;\n }\n }\n\n delete this.proj_hist;\n\n let new_proj = (this.is_projection === kind) ? '' : kind;\n this.is_projection = ''; // disable projection redraw until callback\n this.projection_width = width;\n\n this.provideSpecialDrawArea(new_proj).then(() => { this.is_projection = new_proj; return this.redrawProjection(); });\n }\n\n /** @summary Readraw projections */\n redrawProjection(/* ii1, ii2 , jj1, jj2*/) {\n // do nothing for the moment\n\n if (!this.is_projection) return;\n }\n\n /** @summary Execute menu command */\n executeMenuCommand(method, args) {\n if (super.executeMenuCommand(method, args)) return true;\n\n if ((method.fName == 'SetShowProjectionX') || (method.fName == 'SetShowProjectionY')) {\n this.toggleProjection(method.fName[17], args && parseInt(args) ? parseInt(args) : 1);\n return true;\n }\n\n return false;\n }\n\n /** @summary Fill histogram context menu */\n fillHistContextMenu(menu) {\n menu.add('sub:Projections', () => this.toggleProjection());\n let kind = this.is_projection || '';\n if (kind) kind += this.projection_width;\n let kinds = ['X1', 'X2', 'X3', 'X5', 'X10', 'Y1', 'Y2', 'Y3', 'Y5', 'Y10'];\n for (let k = 0; k < kinds.length; ++k)\n menu.addchk(kind == kinds[k], kinds[k], kinds[k], arg => this.toggleProjection(arg));\n menu.add('endsub:');\n\n menu.add('Auto zoom-in', () => this.autoZoom());\n\n let opts = this.getSupportedDrawOptions();\n\n menu.addDrawMenu('Draw with', opts, arg => {\n if (arg === 'inspect')\n return this.showInspector();\n this.decodeOptions(arg);\n this.interactiveRedraw('pad', 'drawopt');\n });\n\n if (this.options.Color)\n this.fillPaletteMenu(menu);\n }\n\n /** @summary Process click on histogram-defined buttons */\n clickButton(funcname) {\n if (super.clickButton(funcname)) return true;\n\n switch(funcname) {\n case 'ToggleColor': this.toggleColor(); break;\n case 'Toggle3D': this.toggleMode3D(); break;\n default: return false;\n }\n\n // all methods here should not be processed further\n return true;\n }\n\n /** @summary Fill pad toolbar with RH2-related functions */\n fillToolbar() {\n super.fillToolbar(true);\n\n let pp = this.getPadPainter();\n if (!pp) return;\n\n pp.addPadButton('th2color', 'Toggle color', 'ToggleColor');\n pp.addPadButton('th2colorz', 'Toggle color palette', 'ToggleColorZ');\n pp.addPadButton('th2draw3d', 'Toggle 3D mode', 'Toggle3D');\n pp.showPadButtons();\n }\n\n /** @summary Toggle color drawing mode */\n toggleColor() {\n\n if (this.options.Mode3D) {\n this.options.Mode3D = false;\n this.options.Color = true;\n } else {\n this.options.Color = !this.options.Color;\n }\n\n this.redraw();\n }\n\n /** @summary Perform automatic zoom inside non-zero region of histogram */\n autoZoom() {\n let i1 = this.getSelectIndex('x', 'left', -1),\n i2 = this.getSelectIndex('x', 'right', 1),\n j1 = this.getSelectIndex('y', 'left', -1),\n j2 = this.getSelectIndex('y', 'right', 1),\n i,j, histo = this.getHisto(), xaxis = this.getAxis('x'), yaxis = this.getAxis('y');\n\n if ((i1 == i2) || (j1 == j2)) return;\n\n // first find minimum\n let min = histo.getBinContent(i1 + 1, j1 + 1);\n for (i = i1; i < i2; ++i)\n for (j = j1; j < j2; ++j)\n min = Math.min(min, histo.getBinContent(i+1, j+1));\n if (min > 0) return; // if all points positive, no chance for autoscale\n\n let ileft = i2, iright = i1, jleft = j2, jright = j1;\n\n for (i = i1; i < i2; ++i)\n for (j = j1; j < j2; ++j)\n if (histo.getBinContent(i + 1, j + 1) > min) {\n if (i < ileft) ileft = i;\n if (i >= iright) iright = i + 1;\n if (j < jleft) jleft = j;\n if (j >= jright) jright = j + 1;\n }\n\n let xmin, xmax, ymin, ymax, isany = false;\n\n if ((ileft === iright-1) && (ileft > i1+1) && (iright < i2-1)) { ileft--; iright++; }\n if ((jleft === jright-1) && (jleft > j1+1) && (jright < j2-1)) { jleft--; jright++; }\n\n if ((ileft > i1 || iright < i2) && (ileft < iright - 1)) {\n xmin = xaxis.GetBinCoord(ileft);\n xmax = xaxis.GetBinCoord(iright);\n isany = true;\n }\n\n if ((jleft > j1 || jright < j2) && (jleft < jright - 1)) {\n ymin = yaxis.GetBinCoord(jleft);\n ymax = yaxis.GetBinCoord(jright);\n isany = true;\n }\n\n if (isany)\n return this.getFramePainter().zoom(xmin, xmax, ymin, ymax);\n }\n\n /** @summary Scan content of 2-dim histogram */\n scanContent(when_axis_changed) {\n\n // no need to rescan histogram while result does not depend from axis selection\n if (when_axis_changed && this.nbinsx && this.nbinsy) return;\n\n let i, j, histo = this.getHisto();\n\n this.extractAxesProperties(2);\n\n if (this.isDisplayItem()) {\n // take min/max values from the display item\n this.gminbin = histo.fContMin;\n this.gminposbin = histo.fContMinPos > 0 ? histo.fContMinPos : null;\n this.gmaxbin = histo.fContMax;\n } else {\n // global min/max, used at the moment in 3D drawing\n this.gminbin = this.gmaxbin = histo.getBinContent(1, 1);\n this.gminposbin = null;\n for (i = 0; i < this.nbinsx; ++i) {\n for (j = 0; j < this.nbinsy; ++j) {\n let bin_content = histo.getBinContent(i+1, j+1);\n if (bin_content < this.gminbin) this.gminbin = bin_content; else\n if (bin_content > this.gmaxbin) this.gmaxbin = bin_content;\n if (bin_content > 0)\n if ((this.gminposbin === null) || (this.gminposbin > bin_content)) this.gminposbin = bin_content;\n }\n }\n }\n\n this.zmin = this.gminbin;\n this.zmax = this.gmaxbin;\n\n // this value used for logz scale drawing\n if (this.gminposbin === null) this.gminposbin = this.gmaxbin*1e-4;\n\n if (this.options.Axis > 0) { // Paint histogram axis only\n this.draw_content = false;\n } else {\n this.draw_content = this.gmaxbin > 0;\n }\n }\n\n /** @summary Count statistic */\n countStat(cond) {\n let histo = this.getHisto(),\n stat_sum0 = 0, stat_sumx1 = 0, stat_sumy1 = 0,\n stat_sumx2 = 0, stat_sumy2 = 0,\n xside, yside, xx, yy, zz,\n res = { name: 'histo', entries: 0, integral: 0, meanx: 0, meany: 0, rmsx: 0, rmsy: 0, matrix: [0,0,0,0,0,0,0,0,0], xmax: 0, ymax:0, wmax: null };\n\n let xleft = this.getSelectIndex('x', 'left'),\n xright = this.getSelectIndex('x', 'right'),\n yleft = this.getSelectIndex('y', 'left'),\n yright = this.getSelectIndex('y', 'right'),\n xi, yi, xaxis = this.getAxis('x'), yaxis = this.getAxis('y');\n\n // TODO: account underflow/overflow bins, now stored in different array and only by histogram itself\n for (xi = 1; xi <= this.nbinsx; ++xi) {\n xside = (xi <= xleft+1) ? 0 : (xi > xright+1 ? 2 : 1);\n xx = xaxis.GetBinCoord(xi - 0.5);\n\n for (yi = 1; yi <= this.nbinsy; ++yi) {\n yside = (yi <= yleft+1) ? 0 : (yi > yright+1 ? 2 : 1);\n yy = yaxis.GetBinCoord(yi - 0.5);\n\n zz = histo.getBinContent(xi, yi);\n\n res.entries += zz;\n\n res.matrix[yside * 3 + xside] += zz;\n\n if ((xside != 1) || (yside != 1)) continue;\n\n if (cond && !cond(xx,yy)) continue;\n\n if ((res.wmax === null) || (zz > res.wmax)) { res.wmax = zz; res.xmax = xx; res.ymax = yy; }\n\n stat_sum0 += zz;\n stat_sumx1 += xx * zz;\n stat_sumy1 += yy * zz;\n stat_sumx2 += xx**2 * zz;\n stat_sumy2 += yy**2 * zz;\n }\n }\n\n if (Math.abs(stat_sum0) > 1e-300) {\n res.meanx = stat_sumx1 / stat_sum0;\n res.meany = stat_sumy1 / stat_sum0;\n res.rmsx = Math.sqrt(Math.abs(stat_sumx2 / stat_sum0 - res.meanx**2));\n res.rmsy = Math.sqrt(Math.abs(stat_sumy2 / stat_sum0 - res.meany**2));\n }\n\n if (res.wmax === null) res.wmax = 0;\n res.integral = stat_sum0;\n return res;\n }\n\n /** @summary Fill statistic into statbox */\n fillStatistic(stat, dostat /*, dofit*/) {\n\n let data = this.countStat(),\n print_name = Math.floor(dostat % 10),\n print_entries = Math.floor(dostat / 10) % 10,\n print_mean = Math.floor(dostat / 100) % 10,\n print_rms = Math.floor(dostat / 1000) % 10,\n print_under = Math.floor(dostat / 10000) % 10,\n print_over = Math.floor(dostat / 100000) % 10,\n print_integral = Math.floor(dostat / 1000000) % 10,\n print_skew = Math.floor(dostat / 10000000) % 10,\n print_kurt = Math.floor(dostat / 100000000) % 10;\n\n stat.clearStat();\n\n if (print_name > 0)\n stat.addText(data.name);\n\n if (print_entries > 0)\n stat.addText('Entries = ' + stat.format(data.entries,'entries'));\n\n if (print_mean > 0) {\n stat.addText('Mean x = ' + stat.format(data.meanx));\n stat.addText('Mean y = ' + stat.format(data.meany));\n }\n\n if (print_rms > 0) {\n stat.addText('Std Dev x = ' + stat.format(data.rmsx));\n stat.addText('Std Dev y = ' + stat.format(data.rmsy));\n }\n\n if (print_integral > 0)\n stat.addText('Integral = ' + stat.format(data.matrix[4], 'entries'));\n\n if (print_skew > 0) {\n stat.addText('Skewness x = ');\n stat.addText('Skewness y = ');\n }\n\n if (print_kurt > 0)\n stat.addText('Kurt = ');\n\n if ((print_under > 0) || (print_over > 0)) {\n let m = data.matrix;\n\n stat.addText('' + m[6].toFixed(0) + ' | ' + m[7].toFixed(0) + ' | ' + m[7].toFixed(0));\n stat.addText('' + m[3].toFixed(0) + ' | ' + m[4].toFixed(0) + ' | ' + m[5].toFixed(0));\n stat.addText('' + m[0].toFixed(0) + ' | ' + m[1].toFixed(0) + ' | ' + m[2].toFixed(0));\n }\n\n return true;\n }\n\n /** @summary Draw histogram bins as color */\n drawBinsColor() {\n const histo = this.getHisto(),\n handle = this.prepareDraw(),\n di = handle.stepi, dj = handle.stepj,\n entries = [],\n can_merge = true;\n let colindx, cmd1, cmd2, i, j, binz, dx, dy, entry, last_entry;\n\n const flush_last_entry = () => {\n last_entry.path += `h${dx}v${last_entry.y2-last_entry.y}h${-dx}z`;\n last_entry.dy = 0;\n last_entry = null;\n };\n\n // now start build\n for (i = handle.i1; i < handle.i2; i += di) {\n dx = (handle.grx[i+di] - handle.grx[i]) || 1;\n\n for (j = handle.j1; j < handle.j2; j += dj) {\n binz = histo.getBinContent(i+1, j+1);\n colindx = handle.palette.getContourIndex(binz);\n if (binz === 0) {\n if (!this.options.Zero)\n colindx = null;\n else if ((colindx === null) && this._show_empty_bins)\n colindx = 0;\n }\n if (colindx === null) {\n if (last_entry) flush_last_entry();\n continue;\n }\n\n cmd1 = `M${handle.grx[i]},${handle.gry[j]}`;\n\n dy = (handle.gry[j+dj] - handle.gry[j]) || -1;\n\n entry = entries[colindx];\n\n if (entry === undefined) {\n entry = entries[colindx] = { path: cmd1 };\n } else if (can_merge && (entry === last_entry)) {\n entry.y2 = handle.gry[j] + dy;\n continue;\n } else {\n cmd2 = `m${handle.grx[i]-entry.x},${handle.gry[j]-entry.y}`;\n entry.path += (cmd2.length < cmd1.length) ? cmd2 : cmd1;\n }\n if (last_entry) flush_last_entry();\n entry.x = handle.grx[i];\n entry.y = handle.gry[j];\n if (can_merge) {\n entry.y2 = handle.gry[j] + dy;\n last_entry = entry;\n } else {\n entry.path += `h${dx}v${dy}h${-dx}z`;\n }\n }\n if (last_entry) flush_last_entry();\n }\n\n entries.forEach((entry,colindx) => {\n if (entry)\n this.draw_g\n .append('svg:path')\n .style('fill', handle.palette.getColor(colindx))\n .attr('d', entry.path);\n });\n\n this.updatePaletteDraw();\n\n return handle;\n }\n\n /** @summary Build histogram contour lines */\n buildContour(handle, levels, palette, contour_func) {\n let histo = this.getHisto(),\n kMAXCONTOUR = 2004,\n kMAXCOUNT = 2000,\n // arguments used in the PaintContourLine\n xarr = new Float32Array(2*kMAXCONTOUR),\n yarr = new Float32Array(2*kMAXCONTOUR),\n itarr = new Int32Array(2*kMAXCONTOUR),\n lj = 0, ipoly, poly, polys = [], np, npmax = 0,\n x = [0.,0.,0.,0.], y = [0.,0.,0.,0.], zc = [0.,0.,0.,0.], ir = [0,0,0,0],\n i, j, k, n, m, ix, ljfill, count,\n xsave, ysave, itars, jx,\n di = handle.stepi, dj = handle.stepj;\n\n function BinarySearch(zc) {\n for (let kk=0;kk zc[m]) n = m;\n n++;\n lj=1;\n for (ix=1;ix<=4;ix++) {\n m = n%4 + 1;\n ljfill = PaintContourLine(zc[n-1],ir[n-1],x[n-1],y[n-1],\n zc[m-1],ir[m-1],x[m-1],y[m-1]);\n lj += 2*ljfill;\n n = m;\n }\n\n if (zc[0] <= zc[1]) n = 0; else n = 1;\n if (zc[2] <= zc[3]) m = 2; else m = 3;\n if (zc[n] > zc[m]) n = m;\n n++;\n lj=2;\n for (ix=1;ix<=4;ix++) {\n if (n == 1) m = 4;\n else m = n-1;\n ljfill = PaintContourLine(zc[n-1],ir[n-1],x[n-1],y[n-1],\n zc[m-1],ir[m-1],x[m-1],y[m-1]);\n lj += 2*ljfill;\n n = m;\n }\n // Re-order endpoints\n\n count = 0;\n for (ix=1; ix<=lj-5; ix +=2) {\n //count = 0;\n while (itarr[ix-1] != itarr[ix]) {\n xsave = xarr[ix];\n ysave = yarr[ix];\n itars = itarr[ix];\n for (jx=ix; jx<=lj-5; jx +=2) {\n xarr[jx] = xarr[jx+2];\n yarr[jx] = yarr[jx+2];\n itarr[jx] = itarr[jx+2];\n }\n xarr[lj-3] = xsave;\n yarr[lj-3] = ysave;\n itarr[lj-3] = itars;\n if (count > kMAXCOUNT) break;\n count++;\n }\n }\n\n if (count > kMAXCOUNT) continue;\n\n for (ix=1; ix<=lj-2; ix +=2) {\n\n ipoly = itarr[ix-1];\n\n if ((ipoly >= 0) && (ipoly < levels.length)) {\n poly = polys[ipoly];\n if (!poly)\n poly = polys[ipoly] = createTPolyLine(kMAXCONTOUR*4, true);\n\n np = poly.fLastPoint;\n if (np < poly.fN-2) {\n poly.fX[np+1] = Math.round(xarr[ix-1]); poly.fY[np+1] = Math.round(yarr[ix-1]);\n poly.fX[np+2] = Math.round(xarr[ix]); poly.fY[np+2] = Math.round(yarr[ix]);\n poly.fLastPoint = np+2;\n npmax = Math.max(npmax, poly.fLastPoint+1);\n } else {\n // console.log(`reject point ${poly.fLastPoint}`);\n }\n }\n }\n } // end of if (ir[0]\n } // end of j\n } // end of i\n\n let polysort = new Int32Array(levels.length), first = 0;\n // find first positive contour\n for (ipoly=0;ipoly= 0) { first = ipoly; break; }\n }\n //store negative contours from 0 to minimum, then all positive contours\n k = 0;\n for (ipoly = first - 1; ipoly >= 0; ipoly--) { polysort[k] = ipoly; k++; }\n for (ipoly = first; ipoly < levels.length; ipoly++) { polysort[k] = ipoly; k++; }\n\n let xp = new Float32Array(2*npmax),\n yp = new Float32Array(2*npmax);\n\n for (k=0;k 0) && (xx[i+1] === xp[iminus]) && (yy[i+1] === yp[iminus])) {\n iminus--;\n xp[iminus] = xx[i]; yp[iminus] = yy[i];\n xx[i] = xx[i+1] = xmin;\n yy[i] = yy[i+1] = ymin;\n nadd++;\n }\n }\n if (nadd == 0) break;\n }\n\n if ((iminus+1 < iplus) && (iminus >= 0))\n contour_func(colindx, xp, yp, iminus, iplus, ipoly);\n\n istart = 0;\n for (i=2;i {\n let cmd = '', last, pnt, first, isany;\n for (let i = iminus; i <= iplus; ++i) {\n if (func) {\n pnt = func(xp[i], yp[i]);\n pnt.x = Math.round(funcs.grx(pnt.x));\n pnt.y = Math.round(funcs.gry(pnt.y));\n } else {\n pnt = { x: Math.round(xp[i]), y: Math.round(yp[i]) };\n }\n if (!cmd) {\n cmd = 'M' + pnt.x + ',' + pnt.y; first = pnt;\n } else if ((i == iplus) && first && (pnt.x == first.x) && (pnt.y == first.y)) {\n if (!isany) return ''; // all same points\n cmd += 'z'; do_close = false;\n } else if ((pnt.x != last.x) && (pnt.y != last.y)) {\n cmd += 'l' + (pnt.x - last.x) + ',' + (pnt.y - last.y); isany = true;\n } else if (pnt.x != last.x) {\n cmd += 'h' + (pnt.x - last.x); isany = true;\n } else if (pnt.y != last.y) {\n cmd += 'v' + (pnt.y - last.y); isany = true;\n }\n last = pnt;\n }\n if (do_close) cmd += 'z';\n return cmd;\n };\n\n if (this.options.Contour === 14) {\n let dd = `M0,0h${frame_w}v${frame_h}h${-frame_w}z`;\n if (this.options.Proj) {\n let dj = handle.stepj, sz = parseInt((handle.j2 - handle.j1)/dj),\n xd = new Float32Array(sz*2), yd = new Float32Array(sz*2);\n for (let i=0;i {\n let icol = palette.getColor(colindx),\n fillcolor = icol, lineatt;\n\n switch (this.options.Contour) {\n case 1: break;\n case 11: fillcolor = 'none'; lineatt = new TAttLineHandler({ color: icol }); break;\n case 12: fillcolor = 'none'; lineatt = new TAttLineHandler({ color:1, style: (colindx%5 + 1), width: 1 }); break;\n case 13: fillcolor = 'none'; lineatt = this.lineatt; break;\n case 14: break;\n }\n\n let dd = BuildPath(xp, yp, iminus, iplus, fillcolor != 'none');\n if (!dd) return;\n\n let elem = this.draw_g\n .append('svg:path')\n .attr('class','th2_contour')\n .attr('d', dd)\n .style('fill', fillcolor);\n\n if (lineatt)\n elem.call(lineatt.func);\n }\n );\n\n handle.hide_only_zeros = true; // text drawing suppress only zeros\n\n return handle;\n }\n\n /** @summary Create polybin */\n createPolyBin() {\n // see how TH2Painter is implemented\n return '';\n }\n\n /** @summary Draw RH2 bins as text */\n drawBinsText(handle) {\n let histo = this.getHisto(),\n i, j, binz, binw, binh, text, x, y, width, height;\n\n if (handle === null) handle = this.prepareDraw({ rounding: false });\n\n let textFont = this.v7EvalFont('text', { size: 20, color: 'black', align: 22 }),\n text_offset = 0,\n text_g = this.draw_g.append('svg:g').attr('class','th2_text'),\n di = handle.stepi, dj = handle.stepj,\n profile2d = false;\n\n if (this.options.BarOffset) text_offset = this.options.BarOffset;\n\n this.startTextDrawing(textFont, 'font', text_g);\n\n for (i = handle.i1; i < handle.i2; i += di)\n for (j = handle.j1; j < handle.j2; j += dj) {\n binz = histo.getBinContent(i+1, j+1);\n if ((binz === 0) && !this._show_empty_bins) continue;\n\n binw = handle.grx[i+di] - handle.grx[i];\n binh = handle.gry[j] - handle.gry[j+dj];\n\n if (profile2d)\n binz = histo.getBinEntries(i+1, j+1);\n\n text = (binz === Math.round(binz)) ? binz.toString() :\n floatToString(binz, gStyle.fPaintTextFormat);\n\n if (textFont.angle) {\n x = Math.round(handle.grx[i] + binw*0.5);\n y = Math.round(handle.gry[j+dj] + binh*(0.5 + text_offset));\n width = height = 0;\n } else {\n x = Math.round(handle.grx[i] + binw*0.1);\n y = Math.round(handle.gry[j+dj] + binh*(0.1 + text_offset));\n width = Math.round(binw*0.8);\n height = Math.round(binh*0.8);\n }\n\n this.drawText({ align: 22, x, y, width, height, text, latex: 0, draw_g: text_g });\n }\n\n return this.finishTextDrawing(text_g, true).then(() => {\n\n handle.hide_only_zeros = true; // text drawing suppress only zeros\n\n return handle;\n });\n }\n\n /** @summary Draw RH2 bins as arrows */\n drawBinsArrow() {\n let histo = this.getHisto(), cmd = '',\n i,j, dn = 1e-30, dx, dy, xc,yc,\n dxn,dyn,x1,x2,y1,y2, anr,si,co,\n handle = this.prepareDraw({ rounding: false }),\n scale_x = (handle.grx[handle.i2] - handle.grx[handle.i1])/(handle.i2 - handle.i1 + 1-0.03)/2,\n scale_y = (handle.gry[handle.j2] - handle.gry[handle.j1])/(handle.j2 - handle.j1 + 1-0.03)/2,\n di = handle.stepi, dj = handle.stepj;\n\n const makeLine = (dx, dy) => {\n if (dx)\n return dy ? `l${dx},${dy}` : `h${dx}`;\n return dy ? `v${dy}` : '';\n };\n\n for (let loop = 0; loop < 2; ++loop)\n for (i = handle.i1; i < handle.i2; i += di)\n for (j = handle.j1; j < handle.j2; j += dj) {\n\n if (i === handle.i1) {\n dx = histo.getBinContent(i+1+di, j+1) - histo.getBinContent(i+1, j+1);\n } else if (i >= handle.i2-di) {\n dx = histo.getBinContent(i+1, j+1) - histo.getBinContent(i+1-di, j+1);\n } else {\n dx = 0.5*(histo.getBinContent(i+1+di, j+1) - histo.getBinContent(i+1-di, j+1));\n }\n if (j === handle.j1) {\n dy = histo.getBinContent(i+1, j+1+dj) - histo.getBinContent(i+1, j+1);\n } else if (j >= handle.j2-dj) {\n dy = histo.getBinContent(i+1, j+1) - histo.getBinContent(i+1, j+1-dj);\n } else {\n dy = 0.5*(histo.getBinContent(i+1, j+1+dj) - histo.getBinContent(i+1, j+1-dj));\n }\n\n if (loop === 0) {\n dn = Math.max(dn, Math.abs(dx), Math.abs(dy));\n } else {\n xc = (handle.grx[i] + handle.grx[i+di])/2;\n yc = (handle.gry[j] + handle.gry[j+dj])/2;\n dxn = scale_x*dx/dn;\n dyn = scale_y*dy/dn;\n x1 = xc - dxn;\n x2 = xc + dxn;\n y1 = yc - dyn;\n y2 = yc + dyn;\n dx = Math.round(x2-x1);\n dy = Math.round(y2-y1);\n\n if ((dx !== 0) || (dy !== 0)) {\n cmd += 'M'+Math.round(x1)+','+Math.round(y1) + makeLine(dx,dy);;\n\n if (Math.abs(dx) > 5 || Math.abs(dy) > 5) {\n anr = Math.sqrt(2/(dx**2 + dy**2));\n si = Math.round(anr*(dx + dy));\n co = Math.round(anr*(dx - dy));\n if (si || co)\n cmd += `m${-si},${co}` + makeLine(si,-co) + makeLine(-co,-si);;\n }\n }\n }\n }\n\n this.draw_g\n .append('svg:path')\n .attr('d', cmd)\n .style('fill', 'none')\n .call(this.lineatt.func);\n\n return handle;\n }\n\n /** @summary Draw RH2 bins as boxes */\n drawBinsBox() {\n\n let histo = this.getHisto(),\n handle = this.prepareDraw({ rounding: false }),\n main = this.getFramePainter();\n\n if (main.maxbin === main.minbin) {\n main.maxbin = this.gmaxbin;\n main.minbin = this.gminbin;\n main.minposbin = this.gminposbin;\n }\n if (main.maxbin === main.minbin)\n main.minbin = Math.min(0, main.maxbin-1);\n\n let absmax = Math.max(Math.abs(main.maxbin), Math.abs(main.minbin)),\n absmin = Math.max(0, main.minbin),\n i, j, binz, absz, res = '', cross = '', btn1 = '', btn2 = '',\n zdiff, dgrx, dgry, xx, yy, ww, hh,\n xyfactor, uselogz = false, logmin = 0,\n di = handle.stepi, dj = handle.stepj;\n\n if (main.logz && (absmax > 0)) {\n uselogz = true;\n let logmax = Math.log(absmax);\n if (absmin > 0)\n logmin = Math.log(absmin);\n else if ((main.minposbin >= 1) && (main.minposbin < 100))\n logmin = Math.log(0.7);\n else\n logmin = (main.minposbin > 0) ? Math.log(0.7*main.minposbin) : logmax - 10;\n if (logmin >= logmax) logmin = logmax - 10;\n xyfactor = 1. / (logmax - logmin);\n } else {\n xyfactor = 1. / (absmax - absmin);\n }\n\n // now start build\n for (i = handle.i1; i < handle.i2; i += di) {\n for (j = handle.j1; j < handle.j2; j += dj) {\n binz = histo.getBinContent(i + 1, j + 1);\n absz = Math.abs(binz);\n if ((absz === 0) || (absz < absmin)) continue;\n\n zdiff = uselogz ? ((absz > 0) ? Math.log(absz) - logmin : 0) : (absz - absmin);\n // area of the box should be proportional to absolute bin content\n zdiff = 0.5 * ((zdiff < 0) ? 1 : (1 - Math.sqrt(zdiff * xyfactor)));\n // avoid oversized bins\n if (zdiff < 0) zdiff = 0;\n\n ww = handle.grx[i+di] - handle.grx[i];\n hh = handle.gry[j] - handle.gry[j+dj];\n\n dgrx = zdiff * ww;\n dgry = zdiff * hh;\n\n xx = Math.round(handle.grx[i] + dgrx);\n yy = Math.round(handle.gry[j+dj] + dgry);\n\n ww = Math.max(Math.round(ww - 2*dgrx), 1);\n hh = Math.max(Math.round(hh - 2*dgry), 1);\n\n res += `M${xx},${yy}v${hh}h${ww}v${-hh}z`;\n\n if ((binz < 0) && (this.options.BoxStyle === 10))\n cross += `M${xx},${yy}l${ww},${hh}M${xx+ww},${yy}l${-ww},${hh}`;\n\n if ((this.options.BoxStyle === 11) && (ww>5) && (hh>5)) {\n let pww = Math.round(ww*0.1),\n phh = Math.round(hh*0.1),\n side1 = `M${xx},${yy}h${ww}l${-pww},${phh}h${2*pww-ww}v${hh-2*phh}l${-pww},${phh}z`,\n side2 = `M${xx+ww},${yy+hh}v${-hh}l${-pww},${phh}v${hh-2*phh}h${2*pww-ww}l${-pww},${phh}z`;\n if (binz < 0) { btn2 += side1; btn1 += side2; }\n else { btn1 += side1; btn2 += side2; }\n }\n }\n }\n\n if (res) {\n let elem = this.draw_g\n .append('svg:path')\n .attr('d', res)\n .call(this.fillatt.func);\n if ((this.options.BoxStyle !== 11) && this.fillatt.empty())\n elem.call(this.lineatt.func);\n }\n\n if (btn1 && this.fillatt.hasColor())\n this.draw_g.append('svg:path')\n .attr('d', btn1)\n .call(this.fillatt.func)\n .style('fill', d3_rgb(this.fillatt.color).brighter(0.5).formatHex());\n\n if (btn2)\n this.draw_g.append('svg:path')\n .attr('d', btn2)\n .call(this.fillatt.func)\n .style('fill', !this.fillatt.hasColor() ? 'red' : d3_rgb(this.fillatt.color).darker(0.5).formatHex());\n\n if (cross) {\n let elem = this.draw_g.append('svg:path')\n .attr('d', cross)\n .style('fill', 'none');\n if (!this.lineatt.empty())\n elem.call(this.lineatt.func);\n }\n\n return handle;\n }\n\n /** @summary Draw RH2 bins as scatter plot */\n drawBinsScatter() {\n let histo = this.getHisto(),\n handle = this.prepareDraw({ rounding: true, pixel_density: true, scatter_plot: true }),\n colPaths = [], currx = [], curry = [], cell_w = [], cell_h = [],\n colindx, cmd1, cmd2, i, j, binz, cw, ch, factor = 1.,\n scale = this.options.ScatCoef * ((this.gmaxbin) > 2000 ? 2000. / this.gmaxbin : 1.),\n di = handle.stepi, dj = handle.stepj;\n\n let rnd = new TRandom(handle.sumz);\n\n if (scale*handle.sumz < 1e5) {\n // one can use direct drawing of scatter plot without any patterns\n\n this.createv7AttMarker();\n\n this.markeratt.resetPos();\n\n let path = '', k, npix;\n for (i = handle.i1; i < handle.i2; i += di) {\n cw = handle.grx[i+di] - handle.grx[i];\n for (j = handle.j1; j < handle.j2; j += dj) {\n ch = handle.gry[j] - handle.gry[j+dj];\n binz = histo.getBinContent(i + 1, j + 1);\n\n npix = Math.round(scale*binz);\n if (npix <= 0) continue;\n\n for (k = 0; k < npix; ++k)\n path += this.markeratt.create(\n Math.round(handle.grx[i] + cw * rnd.random()),\n Math.round(handle.gry[j+1] + ch * rnd.random()));\n }\n }\n\n this.draw_g\n .append('svg:path')\n .attr('d', path)\n .call(this.markeratt.func);\n\n return handle;\n }\n\n // limit filling factor, do not try to produce as many points as filled area;\n if (this.maxbin > 0.7) factor = 0.7/this.maxbin;\n\n // let nlevels = Math.round(handle.max - handle.min);\n\n // now start build\n for (i = handle.i1; i < handle.i2; i += di) {\n for (j = handle.j1; j < handle.j2; j += dj) {\n binz = histo.getBinContent(i + 1, j + 1);\n if ((binz <= 0) || (binz < this.minbin)) continue;\n\n cw = handle.grx[i+di] - handle.grx[i];\n ch = handle.gry[j] - handle.gry[j+dj];\n if (cw*ch <= 0) continue;\n\n colindx = handle.palette.getContourIndex(binz/cw/ch);\n if (colindx < 0) continue;\n\n cmd1 = `M${handle.grx[i]},${handle.gry[j+dj]}`;\n if (colPaths[colindx] === undefined) {\n colPaths[colindx] = cmd1;\n cell_w[colindx] = cw;\n cell_h[colindx] = ch;\n } else{\n cmd2 = `m${handle.grx[i]-currx[colindx]},${handle.gry[j+dj] - curry[colindx]}`;\n colPaths[colindx] += (cmd2.length < cmd1.length) ? cmd2 : cmd1;\n cell_w[colindx] = Math.max(cell_w[colindx], cw);\n cell_h[colindx] = Math.max(cell_h[colindx], ch);\n }\n\n currx[colindx] = handle.grx[i];\n curry[colindx] = handle.gry[j+dj];\n\n colPaths[colindx] += `v${ch}h${cw}v${-ch}z`;\n }\n }\n\n let layer = this.getFrameSvg().select('.main_layer'),\n defs = layer.select('def');\n if (defs.empty() && (colPaths.length > 0))\n defs = layer.insert('svg:defs', ':first-child');\n\n this.createv7AttMarker();\n\n let cntr = handle.palette.getContour();\n\n for (colindx = 0; colindx < colPaths.length; ++colindx)\n if ((colPaths[colindx] !== undefined) && (colindx 0)\n handle = this.drawBinsContour(funcs, rect.width, rect.height);\n\n if (this.options.Text)\n pr = this.drawBinsText(handle);\n\n if (!handle && !pr)\n handle = this.drawBinsColor();\n\n if (!pr) pr = Promise.resolve(handle);\n\n return pr.then(h => {\n this.tt_handle = h;\n return this;\n });\n }\n\n /** @summary Provide text information (tooltips) for histogram bin */\n getBinTooltips(i, j) {\n let lines = [],\n histo = this.getHisto(),\n binz = histo.getBinContent(i+1,j+1),\n di = 1, dj = 1;\n\n if (this.isDisplayItem()) {\n di = histo.stepx || 1;\n dj = histo.stepy || 1;\n }\n\n lines.push(this.getObjectHint() || 'histo<2>');\n lines.push('x = ' + this.getAxisBinTip('x', i, di),\n 'y = ' + this.getAxisBinTip('y', j, dj));\n\n lines.push(`bin = ${i+1}, ${j+1}`);\n\n if (histo.$baseh) binz -= histo.$baseh.getBinContent(i+1,j+1);\n\n let lbl = 'entries = ' + ((di > 1) || (dj > 1) ? '~' : '');\n\n if (binz === Math.round(binz))\n lines.push(lbl + binz);\n else\n lines.push(lbl + floatToString(binz, gStyle.fStatFormat));\n\n return lines;\n }\n\n /** @summary Provide text information (tooltips) for poly bin */\n getPolyBinTooltips() {\n // see how TH2Painter is implemented\n return [];\n }\n\n /** @summary Process tooltip event */\n processTooltipEvent(pnt) {\n if (!pnt || !this.draw_content || !this.draw_g || !this.tt_handle || this.options.Proj) {\n if (this.draw_g)\n this.draw_g.select('.tooltip_bin').remove();\n return null;\n }\n\n let histo = this.getHisto(),\n h = this.tt_handle,\n ttrect = this.draw_g.select('.tooltip_bin');\n\n if (h.poly) {\n // process tooltips from TH2Poly - see TH2Painter\n return null;\n }\n\n let i, j, binz = 0, colindx = null;\n\n // search bins position\n for (i = h.i1; i < h.i2; ++i)\n if ((pnt.x>=h.grx[i]) && (pnt.x<=h.grx[i+1])) break;\n\n for (j = h.j1; j < h.j2; ++j)\n if ((pnt.y>=h.gry[j+1]) && (pnt.y<=h.gry[j])) break;\n\n if ((i < h.i2) && (j < h.j2)) {\n binz = histo.getBinContent(i+1,j+1);\n if (this.is_projection) {\n colindx = 0; // just to avoid hide\n } else if (h.hide_only_zeros) {\n colindx = (binz === 0) && !this._show_empty_bins ? null : 0;\n } else {\n colindx = h.palette.getContourIndex(binz);\n if ((colindx === null) && (binz === 0) && this._show_empty_bins) colindx = 0;\n }\n }\n\n if (colindx === null) {\n ttrect.remove();\n return null;\n }\n\n let res = { name: 'histo', title: histo.fTitle || 'title',\n x: pnt.x, y: pnt.y,\n color1: this.lineatt ? this.lineatt.color : 'green',\n color2: this.fillatt ? this.fillatt.getFillColorAlt('blue') : 'blue',\n lines: this.getBinTooltips(i, j), exact: true, menu: true };\n\n if (this.options.Color) res.color2 = h.palette.getColor(colindx);\n\n if (pnt.disabled && !this.is_projection) {\n ttrect.remove();\n res.changed = true;\n } else {\n if (ttrect.empty())\n ttrect = this.draw_g.append('svg:rect')\n .attr('class','tooltip_bin h1bin')\n .style('pointer-events','none');\n\n let i1 = i, i2 = i+1,\n j1 = j, j2 = j+1,\n x1 = h.grx[i1], x2 = h.grx[i2],\n y1 = h.gry[j2], y2 = h.gry[j1],\n binid = i*10000 + j;\n\n if (this.is_projection == 'X') {\n x1 = 0; x2 = this.getFramePainter().getFrameWidth();\n if (this.projection_width > 1) {\n let dd = (this.projection_width-1)/2;\n if (j2+dd >= h.j2) { j2 = Math.min(Math.round(j2+dd), h.j2); j1 = Math.max(j2 - this.projection_width, h.j1); }\n else { j1 = Math.max(Math.round(j1-dd), h.j1); j2 = Math.min(j1 + this.projection_width, h.j2); }\n }\n y1 = h.gry[j2]; y2 = h.gry[j1];\n binid = j1*777 + j2*333;\n } else if (this.is_projection == 'Y') {\n y1 = 0; y2 = this.getFramePainter().getFrameHeight();\n if (this.projection_width > 1) {\n let dd = (this.projection_width-1)/2;\n if (i2+dd >= h.i2) { i2 = Math.min(Math.round(i2+dd), h.i2); i1 = Math.max(i2 - this.projection_width, h.i1); }\n else { i1 = Math.max(Math.round(i1-dd), h.i1); i2 = Math.min(i1 + this.projection_width, h.i2); }\n }\n x1 = h.grx[i1], x2 = h.grx[i2],\n binid = i1*777 + i2*333;\n }\n\n res.changed = ttrect.property('current_bin') !== binid;\n\n if (res.changed)\n ttrect.attr('x', x1)\n .attr('width', x2 - x1)\n .attr('y', y1)\n .attr('height', y2 - y1)\n .style('opacity', '0.7')\n .property('current_bin', binid);\n\n if (this.is_projection && res.changed)\n this.redrawProjection(i1, i2, j1, j2);\n }\n\n if (res.changed)\n res.user_info = { obj: histo, name: 'histo',\n bin: histo.getBin(i+1, j+1), cont: binz, binx: i+1, biny: j+1,\n grx: pnt.x, gry: pnt.y };\n\n return res;\n }\n\n /** @summary Checks if it makes sense to zoom inside specified axis range */\n canZoomInside(axis,min,max) {\n if (axis == 'z') return true;\n let obj = this.getAxis(axis);\n return obj.FindBin(max,0.5) - obj.FindBin(min,0) > 1;\n }\n\n /** @summary Performs 2D drawing of histogram\n * @return {Promise} when ready */\n async draw2D(reason) {\n this.clear3DScene();\n\n return this.drawFrameAxes().then(res => {\n return res ? this.drawingBins(reason) : false;\n }).then(res => {\n if (res) return this.draw2DBins().then(() => this.addInteractivity());\n }).then(() => this);\n }\n\n /** @summary Performs 3D drawing of histogram\n * @return {Promise} when ready */\n async draw3D(reason) {\n console.log('3D drawing is disabled, load ./hist/RH1Painter.mjs');\n return this.draw2D(reason);\n }\n\n /** @summary Call drawing function depending from 3D mode */\n async callDrawFunc(reason) {\n let main = this.getFramePainter();\n\n if (main && (main.mode3d !== this.options.Mode3D) && !this.isMainPainter())\n this.options.Mode3D = main.mode3d;\n\n return this.options.Mode3D ? this.draw3D(reason) : this.draw2D(reason);\n }\n\n /** @summary Redraw histogram */\n async redraw(reason) {\n return this.callDrawFunc(reason);\n }\n\n /** @summary Draw histogram using painter instance\n * @private */\n static async _draw(painter /*, opt*/) {\n return ensureRCanvas(painter).then(() => {\n\n painter.setAsMainPainter();\n\n painter.options = { Hist: false, Error: false, Zero: false, Mark: false,\n Line: false, Fill: false, Lego: 0, Surf: 0,\n Text: true, TextAngle: 0, TextKind: '',\n BaseLine: false, Mode3D: false, AutoColor: 0,\n Color: false, Scat: false, ScatCoef: 1, Box: false, BoxStyle: 0, Arrow: false, Contour: 0, Proj: 0,\n BarOffset: 0., BarWidth: 1., minimum: kNoZoom, maximum: kNoZoom };\n\n let kind = painter.v7EvalAttr('kind', ''),\n sub = painter.v7EvalAttr('sub', 0),\n o = painter.options;\n\n o.Text = painter.v7EvalAttr('drawtext', false);\n\n switch(kind) {\n case 'lego': o.Lego = sub > 0 ? 10+sub : 12; o.Mode3D = true; break;\n case 'surf': o.Surf = sub > 0 ? 10+sub : 1; o.Mode3D = true; break;\n case 'box': o.Box = true; o.BoxStyle = 10 + sub; break;\n case 'err': o.Error = true; o.Mode3D = true; break;\n case 'cont': o.Contour = sub > 0 ? 10+sub : 1; break;\n case 'arr': o.Arrow = true; break;\n case 'scat': o.Scat = true; break;\n case 'col': o.Color = true; break;\n default: if (!o.Text) o.Color = true;\n }\n\n // here we deciding how histogram will look like and how will be shown\n // painter.decodeOptions(opt);\n\n painter._show_empty_bins = false;\n\n painter.scanContent();\n\n return painter.callDrawFunc();\n });\n }\n\n /** @summary draw RH2 object */\n static async draw(dom, obj, opt) {\n // create painter and add it to canvas\n return RH2Painter._draw(new RH2Painter(dom, obj), opt);\n }\n\n} // class RH2Painter\n\n\nexport { RH2Painter };\n","import { settings, gStyle, kNoZoom } from '../core.mjs';\nimport { RH2Painter as RH2Painter2D } from '../hist2d/RH2Painter.mjs';\nimport { RAxisPainter } from '../gpad/RAxisPainter.mjs';\nimport { assignFrame3DMethods, drawBinsLego, drawBinsError3D, drawBinsContour3D, drawBinsSurf3D } from './hist3d.mjs';\n\n\nclass RH2Painter extends RH2Painter2D {\n\n /** Draw histogram bins in 3D, using provided draw options */\n draw3DBins() {\n\n if (!this.draw_content) return;\n\n if (this.options.Surf)\n return drawBinsSurf3D(this, true);\n\n if (this.options.Error)\n return drawBinsError3D(this, true);\n\n if (this.options.Contour)\n return drawBinsContour3D(this, true, true);\n\n drawBinsLego(this, true);\n this.updatePaletteDraw();\n }\n\n draw3D(reason) {\n\n this.mode3d = true;\n\n let main = this.getFramePainter(), // who makes axis drawing\n is_main = this.isMainPainter(), // is main histogram\n pr = Promise.resolve(this);\n\n if (reason == 'resize') {\n if (is_main && main.resize3D()) main.render3D();\n\n return pr;\n }\n\n let zmult = 1 + 2*gStyle.fHistTopMargin;\n\n this.zmin = main.logz ? this.gminposbin * 0.3 : this.gminbin;\n this.zmax = this.gmaxbin;\n if (this.options.minimum !== kNoZoom) this.zmin = this.options.minimum;\n if (this.options.maximum !== kNoZoom) { this.zmax = this.options.maximum; zmult = 1; }\n if (main.logz && (this.zmin <= 0)) this.zmin = this.zmax * 1e-5;\n\n this.deleteAttr();\n\n if (is_main) {\n assignFrame3DMethods(main);\n pr = main.create3DScene(this.options.Render3D).then(() => {\n main.setAxesRanges(this.getAxis('x'), this.xmin, this.xmax, this.getAxis('y'), this.ymin, this.ymax, null, this.zmin, this.zmax);\n main.set3DOptions(this.options);\n main.drawXYZ(main.toplevel, RAxisPainter, { zmult, zoom: settings.Zooming, ndim: 2, draw: true, v7: true });\n });\n }\n\n if (!main.mode3d)\n return pr;\n\n return pr.then(() => this.drawingBins(reason)).then(() => {\n // called when bins received from server, must be reentrant\n let main = this.getFramePainter();\n\n this.draw3DBins();\n main.render3D();\n main.addKeysHandler();\n\n return this;\n });\n }\n\n /** @summary draw RH2 object */\n static async draw(dom, obj, opt) {\n // create painter and add it to canvas\n return RH2Painter._draw(new RH2Painter(dom, obj), opt);\n }\n\n} // class RH2Painter\n\nexport { RH2Painter };\n"],"x_google_ignoreList":[0,1]} \ No newline at end of file +{"version":3,"file":"476.8cae8d64bbb01c50.js","mappings":"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","names":["RH2Painter","RHistPainter","constructor","dom","histo","super","this","wheel_zoomy","cleanup","tt_handle","getDimension","toggleProjection","kind","width","isStr","length","parseInt","slice","is_projection","projection_width","proj_hist","new_proj","provideSpecialDrawArea","then","redrawProjection","executeMenuCommand","method","args","fName","fillHistContextMenu","menu","add","kinds","k","addchk","arg","autoZoom","opts","getSupportedDrawOptions","addDrawMenu","showInspector","decodeOptions","interactiveRedraw","options","Color","fillPaletteMenu","clickButton","funcname","toggleColor","toggleMode3D","fillToolbar","pp","getPadPainter","addPadButton","showPadButtons","Mode3D","redraw","i","j","i1","getSelectIndex","i2","j1","j2","getHisto","xaxis","getAxis","yaxis","min","getBinContent","Math","ileft","iright","jleft","jright","xmin","xmax","ymin","ymax","isany","GetBinCoord","getFramePainter","zoom","scanContent","when_axis_changed","nbinsx","nbinsy","extractAxesProperties","isDisplayItem","gminbin","fContMin","gminposbin","fContMinPos","gmaxbin","fContMax","bin_content","zmin","zmax","draw_content","Axis","countStat","cond","xside","yside","xx","yy","zz","xi","yi","stat_sum0","stat_sumx1","stat_sumy1","stat_sumx2","stat_sumy2","res","name","entries","integral","meanx","meany","rmsx","rmsy","matrix","wmax","xleft","xright","yleft","yright","abs","sqrt","fillStatistic","stat","dostat","data","print_name","floor","print_entries","print_mean","print_rms","print_under","print_over","print_integral","print_skew","print_kurt","clearStat","addText","format","m","toFixed","drawBinsColor","handle","prepareDraw","di","stepi","dj","stepj","colindx","cmd1","cmd2","binz","dx","dy","entry","last_entry","flush_last_entry","path","y2","y","grx","palette","getContourIndex","Zero","_show_empty_bins","gry","undefined","x","forEach","draw_g","append","style","getColor","attr","updatePaletteDraw","buildContour","levels","contour_func","ipoly","poly","np","n","ix","ljfill","count","xsave","ysave","itars","jx","kMAXCONTOUR","xarr","Float32Array","yarr","itarr","Int32Array","lj","polys","npmax","zc","ir","BinarySearch","kk","PaintContourLine","elev1","icont1","x1","y1","elev2","icont2","x2","xlen","pdif","diff","elev","vert","tlen","tdif","ii","maxii","icount","arrx","original","origx","arry","origy","createTPolyLine","fLastPoint","fN","fX","round","fY","max","polysort","first","xp","yp","iminus","iplus","nadd","istart","drawBinsContour","funcs","frame_w","frame_h","rounding","extra","Proj","main","getHistPalette","getContour","func","getProjectionFunc","BuildPath","do_close","last","pnt","cmd","Contour","dd","sz","xd","yd","lineatt","icol","fillcolor","TAttLineHandler","color","elem","call","hide_only_zeros","createPolyBin","drawBinsText","binw","binh","text","height","textFont","v7EvalFont","size","align","text_offset","text_g","BarOffset","startTextDrawing","toString","floatToString","gStyle","angle","drawText","latex","finishTextDrawing","drawBinsArrow","xc","yc","dxn","dyn","anr","si","co","dn","scale_x","scale_y","makeLine","loop","drawBinsBox","maxbin","minbin","minposbin","absz","zdiff","dgrx","dgry","ww","hh","xyfactor","absmax","absmin","cross","btn1","btn2","uselogz","logmin","logz","logmax","log","BoxStyle","pww","phh","side1","side2","fillatt","empty","hasColor","d3_rgb","brighter","formatHex","darker","drawBinsScatter","cw","ch","pixel_density","scatter_plot","colPaths","currx","curry","cell_w","cell_h","factor","scale","ScatCoef","rnd","TRandom","sumz","createv7AttMarker","markeratt","resetPos","npix","create","random","layer","getFrameSvg","select","defs","insert","cntr","pattern_class","pattern","internals","selectAll","remove","draw2DBins","_this","removeG","createHistDrawAttributes","createG","pmain","rect","getFrameRect","getGrFuncs","second_x","second_y","pr","Scat","Box","Arrow","Text","Promise","resolve","h","getBinTooltips","lines","stepx","stepy","push","getObjectHint","getAxisBinTip","$baseh","lbl","getPolyBinTooltips","processTooltipEvent","ttrect","title","fTitle","color1","color2","getFillColorAlt","exact","disabled","changed","binid","getFrameWidth","getFrameHeight","property","user_info","obj","bin","getBin","cont","binx","biny","canZoomInside","axis","FindBin","draw2D","reason","clear3DScene","_this2","drawFrameAxes","drawingBins","addInteractivity","draw3D","console","_this3","callDrawFunc","_this4","mode3d","isMainPainter","_this5","static","painter","ensureRCanvas","setAsMainPainter","Hist","Error","Mark","Line","Fill","Lego","Surf","TextAngle","TextKind","BaseLine","AutoColor","BarWidth","minimum","kNoZoom","maximum","v7EvalAttr","sub","o","opt","_draw","RH2Painter2D","draw3DBins","drawBinsSurf3D","drawBinsError3D","drawBinsContour3D","drawBinsLego","is_main","resize3D","render3D","zmult","deleteAttr","assignFrame3DMethods","create3DScene","Render3D","setAxesRanges","set3DOptions","drawXYZ","toplevel","RAxisPainter","settings","ndim","draw","v7","addKeysHandler"],"sourceRoot":"webpack:///","sources":["../node_modules/jsroot/modules/hist2d/RH2Painter.mjs","../node_modules/jsroot/modules/hist/RH2Painter.mjs"],"sourcesContent":["import { gStyle, internals, isStr, createTPolyLine, kNoZoom } from '../core.mjs';\nimport { rgb as d3_rgb } from '../d3.mjs';\nimport { TAttLineHandler } from '../base/TAttLineHandler.mjs';\nimport { floatToString, TRandom } from '../base/BasePainter.mjs';\nimport { RHistPainter } from './RHistPainter.mjs';\nimport { ensureRCanvas } from '../gpad/RCanvasPainter.mjs';\n\n/**\n * @summary Painter for RH2 classes\n *\n * @private\n */\n\nclass RH2Painter extends RHistPainter {\n\n /** @summary constructor\n * @param {object|string} dom - DOM element or id\n * @param {object} histo - histogram object */\n constructor(dom, histo) {\n super(dom, histo);\n this.wheel_zoomy = true;\n }\n\n /** @summary Cleanup painter */\n cleanup() {\n delete this.tt_handle;\n super.cleanup();\n }\n\n /** @summary Returns histogram dimension */\n getDimension() { return 2; }\n\n /** @summary Toggle projection */\n toggleProjection(kind, width) {\n\n if (kind == 'Projections') kind = '';\n\n if (isStr(kind) && (kind.length > 1)) {\n width = parseInt(kind.slice(1));\n kind = kind[0];\n }\n\n if (!width) width = 1;\n\n if (kind && (this.is_projection==kind)) {\n if (this.projection_width === width) {\n kind = '';\n } else {\n this.projection_width = width;\n return;\n }\n }\n\n delete this.proj_hist;\n\n let new_proj = (this.is_projection === kind) ? '' : kind;\n this.is_projection = ''; // disable projection redraw until callback\n this.projection_width = width;\n\n this.provideSpecialDrawArea(new_proj).then(() => { this.is_projection = new_proj; return this.redrawProjection(); });\n }\n\n /** @summary Readraw projections */\n redrawProjection(/* ii1, ii2 , jj1, jj2*/) {\n // do nothing for the moment\n\n if (!this.is_projection) return;\n }\n\n /** @summary Execute menu command */\n executeMenuCommand(method, args) {\n if (super.executeMenuCommand(method, args)) return true;\n\n if ((method.fName == 'SetShowProjectionX') || (method.fName == 'SetShowProjectionY')) {\n this.toggleProjection(method.fName[17], args && parseInt(args) ? parseInt(args) : 1);\n return true;\n }\n\n return false;\n }\n\n /** @summary Fill histogram context menu */\n fillHistContextMenu(menu) {\n menu.add('sub:Projections', () => this.toggleProjection());\n let kind = this.is_projection || '';\n if (kind) kind += this.projection_width;\n let kinds = ['X1', 'X2', 'X3', 'X5', 'X10', 'Y1', 'Y2', 'Y3', 'Y5', 'Y10'];\n for (let k = 0; k < kinds.length; ++k)\n menu.addchk(kind == kinds[k], kinds[k], kinds[k], arg => this.toggleProjection(arg));\n menu.add('endsub:');\n\n menu.add('Auto zoom-in', () => this.autoZoom());\n\n let opts = this.getSupportedDrawOptions();\n\n menu.addDrawMenu('Draw with', opts, arg => {\n if (arg === 'inspect')\n return this.showInspector();\n this.decodeOptions(arg);\n this.interactiveRedraw('pad', 'drawopt');\n });\n\n if (this.options.Color)\n this.fillPaletteMenu(menu);\n }\n\n /** @summary Process click on histogram-defined buttons */\n clickButton(funcname) {\n if (super.clickButton(funcname)) return true;\n\n switch(funcname) {\n case 'ToggleColor': this.toggleColor(); break;\n case 'Toggle3D': this.toggleMode3D(); break;\n default: return false;\n }\n\n // all methods here should not be processed further\n return true;\n }\n\n /** @summary Fill pad toolbar with RH2-related functions */\n fillToolbar() {\n super.fillToolbar(true);\n\n let pp = this.getPadPainter();\n if (!pp) return;\n\n pp.addPadButton('th2color', 'Toggle color', 'ToggleColor');\n pp.addPadButton('th2colorz', 'Toggle color palette', 'ToggleColorZ');\n pp.addPadButton('th2draw3d', 'Toggle 3D mode', 'Toggle3D');\n pp.showPadButtons();\n }\n\n /** @summary Toggle color drawing mode */\n toggleColor() {\n\n if (this.options.Mode3D) {\n this.options.Mode3D = false;\n this.options.Color = true;\n } else {\n this.options.Color = !this.options.Color;\n }\n\n this.redraw();\n }\n\n /** @summary Perform automatic zoom inside non-zero region of histogram */\n autoZoom() {\n let i1 = this.getSelectIndex('x', 'left', -1),\n i2 = this.getSelectIndex('x', 'right', 1),\n j1 = this.getSelectIndex('y', 'left', -1),\n j2 = this.getSelectIndex('y', 'right', 1),\n i,j, histo = this.getHisto(), xaxis = this.getAxis('x'), yaxis = this.getAxis('y');\n\n if ((i1 == i2) || (j1 == j2)) return;\n\n // first find minimum\n let min = histo.getBinContent(i1 + 1, j1 + 1);\n for (i = i1; i < i2; ++i)\n for (j = j1; j < j2; ++j)\n min = Math.min(min, histo.getBinContent(i+1, j+1));\n if (min > 0) return; // if all points positive, no chance for autoscale\n\n let ileft = i2, iright = i1, jleft = j2, jright = j1;\n\n for (i = i1; i < i2; ++i)\n for (j = j1; j < j2; ++j)\n if (histo.getBinContent(i + 1, j + 1) > min) {\n if (i < ileft) ileft = i;\n if (i >= iright) iright = i + 1;\n if (j < jleft) jleft = j;\n if (j >= jright) jright = j + 1;\n }\n\n let xmin, xmax, ymin, ymax, isany = false;\n\n if ((ileft === iright-1) && (ileft > i1+1) && (iright < i2-1)) { ileft--; iright++; }\n if ((jleft === jright-1) && (jleft > j1+1) && (jright < j2-1)) { jleft--; jright++; }\n\n if ((ileft > i1 || iright < i2) && (ileft < iright - 1)) {\n xmin = xaxis.GetBinCoord(ileft);\n xmax = xaxis.GetBinCoord(iright);\n isany = true;\n }\n\n if ((jleft > j1 || jright < j2) && (jleft < jright - 1)) {\n ymin = yaxis.GetBinCoord(jleft);\n ymax = yaxis.GetBinCoord(jright);\n isany = true;\n }\n\n if (isany)\n return this.getFramePainter().zoom(xmin, xmax, ymin, ymax);\n }\n\n /** @summary Scan content of 2-dim histogram */\n scanContent(when_axis_changed) {\n\n // no need to rescan histogram while result does not depend from axis selection\n if (when_axis_changed && this.nbinsx && this.nbinsy) return;\n\n let i, j, histo = this.getHisto();\n\n this.extractAxesProperties(2);\n\n if (this.isDisplayItem()) {\n // take min/max values from the display item\n this.gminbin = histo.fContMin;\n this.gminposbin = histo.fContMinPos > 0 ? histo.fContMinPos : null;\n this.gmaxbin = histo.fContMax;\n } else {\n // global min/max, used at the moment in 3D drawing\n this.gminbin = this.gmaxbin = histo.getBinContent(1, 1);\n this.gminposbin = null;\n for (i = 0; i < this.nbinsx; ++i) {\n for (j = 0; j < this.nbinsy; ++j) {\n let bin_content = histo.getBinContent(i+1, j+1);\n if (bin_content < this.gminbin) this.gminbin = bin_content; else\n if (bin_content > this.gmaxbin) this.gmaxbin = bin_content;\n if (bin_content > 0)\n if ((this.gminposbin === null) || (this.gminposbin > bin_content)) this.gminposbin = bin_content;\n }\n }\n }\n\n this.zmin = this.gminbin;\n this.zmax = this.gmaxbin;\n\n // this value used for logz scale drawing\n if (this.gminposbin === null) this.gminposbin = this.gmaxbin*1e-4;\n\n if (this.options.Axis > 0) { // Paint histogram axis only\n this.draw_content = false;\n } else {\n this.draw_content = this.gmaxbin > 0;\n }\n }\n\n /** @summary Count statistic */\n countStat(cond) {\n let histo = this.getHisto(),\n stat_sum0 = 0, stat_sumx1 = 0, stat_sumy1 = 0,\n stat_sumx2 = 0, stat_sumy2 = 0,\n xside, yside, xx, yy, zz,\n res = { name: 'histo', entries: 0, integral: 0, meanx: 0, meany: 0, rmsx: 0, rmsy: 0, matrix: [0,0,0,0,0,0,0,0,0], xmax: 0, ymax:0, wmax: null };\n\n let xleft = this.getSelectIndex('x', 'left'),\n xright = this.getSelectIndex('x', 'right'),\n yleft = this.getSelectIndex('y', 'left'),\n yright = this.getSelectIndex('y', 'right'),\n xi, yi, xaxis = this.getAxis('x'), yaxis = this.getAxis('y');\n\n // TODO: account underflow/overflow bins, now stored in different array and only by histogram itself\n for (xi = 1; xi <= this.nbinsx; ++xi) {\n xside = (xi <= xleft+1) ? 0 : (xi > xright+1 ? 2 : 1);\n xx = xaxis.GetBinCoord(xi - 0.5);\n\n for (yi = 1; yi <= this.nbinsy; ++yi) {\n yside = (yi <= yleft+1) ? 0 : (yi > yright+1 ? 2 : 1);\n yy = yaxis.GetBinCoord(yi - 0.5);\n\n zz = histo.getBinContent(xi, yi);\n\n res.entries += zz;\n\n res.matrix[yside * 3 + xside] += zz;\n\n if ((xside != 1) || (yside != 1)) continue;\n\n if (cond && !cond(xx,yy)) continue;\n\n if ((res.wmax === null) || (zz > res.wmax)) { res.wmax = zz; res.xmax = xx; res.ymax = yy; }\n\n stat_sum0 += zz;\n stat_sumx1 += xx * zz;\n stat_sumy1 += yy * zz;\n stat_sumx2 += xx**2 * zz;\n stat_sumy2 += yy**2 * zz;\n }\n }\n\n if (Math.abs(stat_sum0) > 1e-300) {\n res.meanx = stat_sumx1 / stat_sum0;\n res.meany = stat_sumy1 / stat_sum0;\n res.rmsx = Math.sqrt(Math.abs(stat_sumx2 / stat_sum0 - res.meanx**2));\n res.rmsy = Math.sqrt(Math.abs(stat_sumy2 / stat_sum0 - res.meany**2));\n }\n\n if (res.wmax === null) res.wmax = 0;\n res.integral = stat_sum0;\n return res;\n }\n\n /** @summary Fill statistic into statbox */\n fillStatistic(stat, dostat /*, dofit*/) {\n\n let data = this.countStat(),\n print_name = Math.floor(dostat % 10),\n print_entries = Math.floor(dostat / 10) % 10,\n print_mean = Math.floor(dostat / 100) % 10,\n print_rms = Math.floor(dostat / 1000) % 10,\n print_under = Math.floor(dostat / 10000) % 10,\n print_over = Math.floor(dostat / 100000) % 10,\n print_integral = Math.floor(dostat / 1000000) % 10,\n print_skew = Math.floor(dostat / 10000000) % 10,\n print_kurt = Math.floor(dostat / 100000000) % 10;\n\n stat.clearStat();\n\n if (print_name > 0)\n stat.addText(data.name);\n\n if (print_entries > 0)\n stat.addText('Entries = ' + stat.format(data.entries,'entries'));\n\n if (print_mean > 0) {\n stat.addText('Mean x = ' + stat.format(data.meanx));\n stat.addText('Mean y = ' + stat.format(data.meany));\n }\n\n if (print_rms > 0) {\n stat.addText('Std Dev x = ' + stat.format(data.rmsx));\n stat.addText('Std Dev y = ' + stat.format(data.rmsy));\n }\n\n if (print_integral > 0)\n stat.addText('Integral = ' + stat.format(data.matrix[4], 'entries'));\n\n if (print_skew > 0) {\n stat.addText('Skewness x = ');\n stat.addText('Skewness y = ');\n }\n\n if (print_kurt > 0)\n stat.addText('Kurt = ');\n\n if ((print_under > 0) || (print_over > 0)) {\n let m = data.matrix;\n\n stat.addText('' + m[6].toFixed(0) + ' | ' + m[7].toFixed(0) + ' | ' + m[7].toFixed(0));\n stat.addText('' + m[3].toFixed(0) + ' | ' + m[4].toFixed(0) + ' | ' + m[5].toFixed(0));\n stat.addText('' + m[0].toFixed(0) + ' | ' + m[1].toFixed(0) + ' | ' + m[2].toFixed(0));\n }\n\n return true;\n }\n\n /** @summary Draw histogram bins as color */\n drawBinsColor() {\n const histo = this.getHisto(),\n handle = this.prepareDraw(),\n di = handle.stepi, dj = handle.stepj,\n entries = [],\n can_merge = true;\n let colindx, cmd1, cmd2, i, j, binz, dx, dy, entry, last_entry;\n\n const flush_last_entry = () => {\n last_entry.path += `h${dx}v${last_entry.y2-last_entry.y}h${-dx}z`;\n last_entry.dy = 0;\n last_entry = null;\n };\n\n // now start build\n for (i = handle.i1; i < handle.i2; i += di) {\n dx = (handle.grx[i+di] - handle.grx[i]) || 1;\n\n for (j = handle.j1; j < handle.j2; j += dj) {\n binz = histo.getBinContent(i+1, j+1);\n colindx = handle.palette.getContourIndex(binz);\n if (binz === 0) {\n if (!this.options.Zero)\n colindx = null;\n else if ((colindx === null) && this._show_empty_bins)\n colindx = 0;\n }\n if (colindx === null) {\n if (last_entry) flush_last_entry();\n continue;\n }\n\n cmd1 = `M${handle.grx[i]},${handle.gry[j]}`;\n\n dy = (handle.gry[j+dj] - handle.gry[j]) || -1;\n\n entry = entries[colindx];\n\n if (entry === undefined) {\n entry = entries[colindx] = { path: cmd1 };\n } else if (can_merge && (entry === last_entry)) {\n entry.y2 = handle.gry[j] + dy;\n continue;\n } else {\n cmd2 = `m${handle.grx[i]-entry.x},${handle.gry[j]-entry.y}`;\n entry.path += (cmd2.length < cmd1.length) ? cmd2 : cmd1;\n }\n if (last_entry) flush_last_entry();\n entry.x = handle.grx[i];\n entry.y = handle.gry[j];\n if (can_merge) {\n entry.y2 = handle.gry[j] + dy;\n last_entry = entry;\n } else {\n entry.path += `h${dx}v${dy}h${-dx}z`;\n }\n }\n if (last_entry) flush_last_entry();\n }\n\n entries.forEach((entry,colindx) => {\n if (entry)\n this.draw_g\n .append('svg:path')\n .style('fill', handle.palette.getColor(colindx))\n .attr('d', entry.path);\n });\n\n this.updatePaletteDraw();\n\n return handle;\n }\n\n /** @summary Build histogram contour lines */\n buildContour(handle, levels, palette, contour_func) {\n let histo = this.getHisto(),\n kMAXCONTOUR = 2004,\n kMAXCOUNT = 2000,\n // arguments used in the PaintContourLine\n xarr = new Float32Array(2*kMAXCONTOUR),\n yarr = new Float32Array(2*kMAXCONTOUR),\n itarr = new Int32Array(2*kMAXCONTOUR),\n lj = 0, ipoly, poly, polys = [], np, npmax = 0,\n x = [0.,0.,0.,0.], y = [0.,0.,0.,0.], zc = [0.,0.,0.,0.], ir = [0,0,0,0],\n i, j, k, n, m, ix, ljfill, count,\n xsave, ysave, itars, jx,\n di = handle.stepi, dj = handle.stepj;\n\n function BinarySearch(zc) {\n for (let kk=0;kk zc[m]) n = m;\n n++;\n lj=1;\n for (ix=1;ix<=4;ix++) {\n m = n%4 + 1;\n ljfill = PaintContourLine(zc[n-1],ir[n-1],x[n-1],y[n-1],\n zc[m-1],ir[m-1],x[m-1],y[m-1]);\n lj += 2*ljfill;\n n = m;\n }\n\n if (zc[0] <= zc[1]) n = 0; else n = 1;\n if (zc[2] <= zc[3]) m = 2; else m = 3;\n if (zc[n] > zc[m]) n = m;\n n++;\n lj=2;\n for (ix=1;ix<=4;ix++) {\n if (n == 1) m = 4;\n else m = n-1;\n ljfill = PaintContourLine(zc[n-1],ir[n-1],x[n-1],y[n-1],\n zc[m-1],ir[m-1],x[m-1],y[m-1]);\n lj += 2*ljfill;\n n = m;\n }\n // Re-order endpoints\n\n count = 0;\n for (ix=1; ix<=lj-5; ix +=2) {\n //count = 0;\n while (itarr[ix-1] != itarr[ix]) {\n xsave = xarr[ix];\n ysave = yarr[ix];\n itars = itarr[ix];\n for (jx=ix; jx<=lj-5; jx +=2) {\n xarr[jx] = xarr[jx+2];\n yarr[jx] = yarr[jx+2];\n itarr[jx] = itarr[jx+2];\n }\n xarr[lj-3] = xsave;\n yarr[lj-3] = ysave;\n itarr[lj-3] = itars;\n if (count > kMAXCOUNT) break;\n count++;\n }\n }\n\n if (count > kMAXCOUNT) continue;\n\n for (ix=1; ix<=lj-2; ix +=2) {\n\n ipoly = itarr[ix-1];\n\n if ((ipoly >= 0) && (ipoly < levels.length)) {\n poly = polys[ipoly];\n if (!poly)\n poly = polys[ipoly] = createTPolyLine(kMAXCONTOUR*4, true);\n\n np = poly.fLastPoint;\n if (np < poly.fN-2) {\n poly.fX[np+1] = Math.round(xarr[ix-1]); poly.fY[np+1] = Math.round(yarr[ix-1]);\n poly.fX[np+2] = Math.round(xarr[ix]); poly.fY[np+2] = Math.round(yarr[ix]);\n poly.fLastPoint = np+2;\n npmax = Math.max(npmax, poly.fLastPoint+1);\n } else {\n // console.log(`reject point ${poly.fLastPoint}`);\n }\n }\n }\n } // end of if (ir[0]\n } // end of j\n } // end of i\n\n let polysort = new Int32Array(levels.length), first = 0;\n // find first positive contour\n for (ipoly=0;ipoly= 0) { first = ipoly; break; }\n }\n //store negative contours from 0 to minimum, then all positive contours\n k = 0;\n for (ipoly = first - 1; ipoly >= 0; ipoly--) { polysort[k] = ipoly; k++; }\n for (ipoly = first; ipoly < levels.length; ipoly++) { polysort[k] = ipoly; k++; }\n\n let xp = new Float32Array(2*npmax),\n yp = new Float32Array(2*npmax);\n\n for (k=0;k 0) && (xx[i+1] === xp[iminus]) && (yy[i+1] === yp[iminus])) {\n iminus--;\n xp[iminus] = xx[i]; yp[iminus] = yy[i];\n xx[i] = xx[i+1] = xmin;\n yy[i] = yy[i+1] = ymin;\n nadd++;\n }\n }\n if (nadd == 0) break;\n }\n\n if ((iminus+1 < iplus) && (iminus >= 0))\n contour_func(colindx, xp, yp, iminus, iplus, ipoly);\n\n istart = 0;\n for (i=2;i {\n let cmd = '', last, pnt, first, isany;\n for (let i = iminus; i <= iplus; ++i) {\n if (func) {\n pnt = func(xp[i], yp[i]);\n pnt.x = Math.round(funcs.grx(pnt.x));\n pnt.y = Math.round(funcs.gry(pnt.y));\n } else {\n pnt = { x: Math.round(xp[i]), y: Math.round(yp[i]) };\n }\n if (!cmd) {\n cmd = 'M' + pnt.x + ',' + pnt.y; first = pnt;\n } else if ((i == iplus) && first && (pnt.x == first.x) && (pnt.y == first.y)) {\n if (!isany) return ''; // all same points\n cmd += 'z'; do_close = false;\n } else if ((pnt.x != last.x) && (pnt.y != last.y)) {\n cmd += 'l' + (pnt.x - last.x) + ',' + (pnt.y - last.y); isany = true;\n } else if (pnt.x != last.x) {\n cmd += 'h' + (pnt.x - last.x); isany = true;\n } else if (pnt.y != last.y) {\n cmd += 'v' + (pnt.y - last.y); isany = true;\n }\n last = pnt;\n }\n if (do_close) cmd += 'z';\n return cmd;\n };\n\n if (this.options.Contour === 14) {\n let dd = `M0,0h${frame_w}v${frame_h}h${-frame_w}z`;\n if (this.options.Proj) {\n let dj = handle.stepj, sz = parseInt((handle.j2 - handle.j1)/dj),\n xd = new Float32Array(sz*2), yd = new Float32Array(sz*2);\n for (let i=0;i {\n let icol = palette.getColor(colindx),\n fillcolor = icol, lineatt;\n\n switch (this.options.Contour) {\n case 1: break;\n case 11: fillcolor = 'none'; lineatt = new TAttLineHandler({ color: icol }); break;\n case 12: fillcolor = 'none'; lineatt = new TAttLineHandler({ color:1, style: (colindx%5 + 1), width: 1 }); break;\n case 13: fillcolor = 'none'; lineatt = this.lineatt; break;\n case 14: break;\n }\n\n let dd = BuildPath(xp, yp, iminus, iplus, fillcolor != 'none');\n if (!dd) return;\n\n let elem = this.draw_g\n .append('svg:path')\n .attr('class','th2_contour')\n .attr('d', dd)\n .style('fill', fillcolor);\n\n if (lineatt)\n elem.call(lineatt.func);\n }\n );\n\n handle.hide_only_zeros = true; // text drawing suppress only zeros\n\n return handle;\n }\n\n /** @summary Create polybin */\n createPolyBin() {\n // see how TH2Painter is implemented\n return '';\n }\n\n /** @summary Draw RH2 bins as text */\n drawBinsText(handle) {\n let histo = this.getHisto(),\n i, j, binz, binw, binh, text, x, y, width, height;\n\n if (handle === null) handle = this.prepareDraw({ rounding: false });\n\n let textFont = this.v7EvalFont('text', { size: 20, color: 'black', align: 22 }),\n text_offset = 0,\n text_g = this.draw_g.append('svg:g').attr('class','th2_text'),\n di = handle.stepi, dj = handle.stepj,\n profile2d = false;\n\n if (this.options.BarOffset) text_offset = this.options.BarOffset;\n\n this.startTextDrawing(textFont, 'font', text_g);\n\n for (i = handle.i1; i < handle.i2; i += di)\n for (j = handle.j1; j < handle.j2; j += dj) {\n binz = histo.getBinContent(i+1, j+1);\n if ((binz === 0) && !this._show_empty_bins) continue;\n\n binw = handle.grx[i+di] - handle.grx[i];\n binh = handle.gry[j] - handle.gry[j+dj];\n\n if (profile2d)\n binz = histo.getBinEntries(i+1, j+1);\n\n text = (binz === Math.round(binz)) ? binz.toString() :\n floatToString(binz, gStyle.fPaintTextFormat);\n\n if (textFont.angle) {\n x = Math.round(handle.grx[i] + binw*0.5);\n y = Math.round(handle.gry[j+dj] + binh*(0.5 + text_offset));\n width = height = 0;\n } else {\n x = Math.round(handle.grx[i] + binw*0.1);\n y = Math.round(handle.gry[j+dj] + binh*(0.1 + text_offset));\n width = Math.round(binw*0.8);\n height = Math.round(binh*0.8);\n }\n\n this.drawText({ align: 22, x, y, width, height, text, latex: 0, draw_g: text_g });\n }\n\n return this.finishTextDrawing(text_g, true).then(() => {\n\n handle.hide_only_zeros = true; // text drawing suppress only zeros\n\n return handle;\n });\n }\n\n /** @summary Draw RH2 bins as arrows */\n drawBinsArrow() {\n let histo = this.getHisto(), cmd = '',\n i,j, dn = 1e-30, dx, dy, xc,yc,\n dxn,dyn,x1,x2,y1,y2, anr,si,co,\n handle = this.prepareDraw({ rounding: false }),\n scale_x = (handle.grx[handle.i2] - handle.grx[handle.i1])/(handle.i2 - handle.i1 + 1-0.03)/2,\n scale_y = (handle.gry[handle.j2] - handle.gry[handle.j1])/(handle.j2 - handle.j1 + 1-0.03)/2,\n di = handle.stepi, dj = handle.stepj;\n\n const makeLine = (dx, dy) => {\n if (dx)\n return dy ? `l${dx},${dy}` : `h${dx}`;\n return dy ? `v${dy}` : '';\n };\n\n for (let loop = 0; loop < 2; ++loop)\n for (i = handle.i1; i < handle.i2; i += di)\n for (j = handle.j1; j < handle.j2; j += dj) {\n\n if (i === handle.i1) {\n dx = histo.getBinContent(i+1+di, j+1) - histo.getBinContent(i+1, j+1);\n } else if (i >= handle.i2-di) {\n dx = histo.getBinContent(i+1, j+1) - histo.getBinContent(i+1-di, j+1);\n } else {\n dx = 0.5*(histo.getBinContent(i+1+di, j+1) - histo.getBinContent(i+1-di, j+1));\n }\n if (j === handle.j1) {\n dy = histo.getBinContent(i+1, j+1+dj) - histo.getBinContent(i+1, j+1);\n } else if (j >= handle.j2-dj) {\n dy = histo.getBinContent(i+1, j+1) - histo.getBinContent(i+1, j+1-dj);\n } else {\n dy = 0.5*(histo.getBinContent(i+1, j+1+dj) - histo.getBinContent(i+1, j+1-dj));\n }\n\n if (loop === 0) {\n dn = Math.max(dn, Math.abs(dx), Math.abs(dy));\n } else {\n xc = (handle.grx[i] + handle.grx[i+di])/2;\n yc = (handle.gry[j] + handle.gry[j+dj])/2;\n dxn = scale_x*dx/dn;\n dyn = scale_y*dy/dn;\n x1 = xc - dxn;\n x2 = xc + dxn;\n y1 = yc - dyn;\n y2 = yc + dyn;\n dx = Math.round(x2-x1);\n dy = Math.round(y2-y1);\n\n if ((dx !== 0) || (dy !== 0)) {\n cmd += 'M'+Math.round(x1)+','+Math.round(y1) + makeLine(dx,dy);;\n\n if (Math.abs(dx) > 5 || Math.abs(dy) > 5) {\n anr = Math.sqrt(2/(dx**2 + dy**2));\n si = Math.round(anr*(dx + dy));\n co = Math.round(anr*(dx - dy));\n if (si || co)\n cmd += `m${-si},${co}` + makeLine(si,-co) + makeLine(-co,-si);;\n }\n }\n }\n }\n\n this.draw_g\n .append('svg:path')\n .attr('d', cmd)\n .style('fill', 'none')\n .call(this.lineatt.func);\n\n return handle;\n }\n\n /** @summary Draw RH2 bins as boxes */\n drawBinsBox() {\n\n let histo = this.getHisto(),\n handle = this.prepareDraw({ rounding: false }),\n main = this.getFramePainter();\n\n if (main.maxbin === main.minbin) {\n main.maxbin = this.gmaxbin;\n main.minbin = this.gminbin;\n main.minposbin = this.gminposbin;\n }\n if (main.maxbin === main.minbin)\n main.minbin = Math.min(0, main.maxbin-1);\n\n let absmax = Math.max(Math.abs(main.maxbin), Math.abs(main.minbin)),\n absmin = Math.max(0, main.minbin),\n i, j, binz, absz, res = '', cross = '', btn1 = '', btn2 = '',\n zdiff, dgrx, dgry, xx, yy, ww, hh,\n xyfactor, uselogz = false, logmin = 0,\n di = handle.stepi, dj = handle.stepj;\n\n if (main.logz && (absmax > 0)) {\n uselogz = true;\n let logmax = Math.log(absmax);\n if (absmin > 0)\n logmin = Math.log(absmin);\n else if ((main.minposbin >= 1) && (main.minposbin < 100))\n logmin = Math.log(0.7);\n else\n logmin = (main.minposbin > 0) ? Math.log(0.7*main.minposbin) : logmax - 10;\n if (logmin >= logmax) logmin = logmax - 10;\n xyfactor = 1. / (logmax - logmin);\n } else {\n xyfactor = 1. / (absmax - absmin);\n }\n\n // now start build\n for (i = handle.i1; i < handle.i2; i += di) {\n for (j = handle.j1; j < handle.j2; j += dj) {\n binz = histo.getBinContent(i + 1, j + 1);\n absz = Math.abs(binz);\n if ((absz === 0) || (absz < absmin)) continue;\n\n zdiff = uselogz ? ((absz > 0) ? Math.log(absz) - logmin : 0) : (absz - absmin);\n // area of the box should be proportional to absolute bin content\n zdiff = 0.5 * ((zdiff < 0) ? 1 : (1 - Math.sqrt(zdiff * xyfactor)));\n // avoid oversized bins\n if (zdiff < 0) zdiff = 0;\n\n ww = handle.grx[i+di] - handle.grx[i];\n hh = handle.gry[j] - handle.gry[j+dj];\n\n dgrx = zdiff * ww;\n dgry = zdiff * hh;\n\n xx = Math.round(handle.grx[i] + dgrx);\n yy = Math.round(handle.gry[j+dj] + dgry);\n\n ww = Math.max(Math.round(ww - 2*dgrx), 1);\n hh = Math.max(Math.round(hh - 2*dgry), 1);\n\n res += `M${xx},${yy}v${hh}h${ww}v${-hh}z`;\n\n if ((binz < 0) && (this.options.BoxStyle === 10))\n cross += `M${xx},${yy}l${ww},${hh}M${xx+ww},${yy}l${-ww},${hh}`;\n\n if ((this.options.BoxStyle === 11) && (ww>5) && (hh>5)) {\n let pww = Math.round(ww*0.1),\n phh = Math.round(hh*0.1),\n side1 = `M${xx},${yy}h${ww}l${-pww},${phh}h${2*pww-ww}v${hh-2*phh}l${-pww},${phh}z`,\n side2 = `M${xx+ww},${yy+hh}v${-hh}l${-pww},${phh}v${hh-2*phh}h${2*pww-ww}l${-pww},${phh}z`;\n if (binz < 0) { btn2 += side1; btn1 += side2; }\n else { btn1 += side1; btn2 += side2; }\n }\n }\n }\n\n if (res) {\n let elem = this.draw_g\n .append('svg:path')\n .attr('d', res)\n .call(this.fillatt.func);\n if ((this.options.BoxStyle !== 11) && this.fillatt.empty())\n elem.call(this.lineatt.func);\n }\n\n if (btn1 && this.fillatt.hasColor())\n this.draw_g.append('svg:path')\n .attr('d', btn1)\n .call(this.fillatt.func)\n .style('fill', d3_rgb(this.fillatt.color).brighter(0.5).formatHex());\n\n if (btn2)\n this.draw_g.append('svg:path')\n .attr('d', btn2)\n .call(this.fillatt.func)\n .style('fill', !this.fillatt.hasColor() ? 'red' : d3_rgb(this.fillatt.color).darker(0.5).formatHex());\n\n if (cross) {\n let elem = this.draw_g.append('svg:path')\n .attr('d', cross)\n .style('fill', 'none');\n if (!this.lineatt.empty())\n elem.call(this.lineatt.func);\n }\n\n return handle;\n }\n\n /** @summary Draw RH2 bins as scatter plot */\n drawBinsScatter() {\n let histo = this.getHisto(),\n handle = this.prepareDraw({ rounding: true, pixel_density: true, scatter_plot: true }),\n colPaths = [], currx = [], curry = [], cell_w = [], cell_h = [],\n colindx, cmd1, cmd2, i, j, binz, cw, ch, factor = 1.,\n scale = this.options.ScatCoef * ((this.gmaxbin) > 2000 ? 2000. / this.gmaxbin : 1.),\n di = handle.stepi, dj = handle.stepj;\n\n let rnd = new TRandom(handle.sumz);\n\n if (scale*handle.sumz < 1e5) {\n // one can use direct drawing of scatter plot without any patterns\n\n this.createv7AttMarker();\n\n this.markeratt.resetPos();\n\n let path = '', k, npix;\n for (i = handle.i1; i < handle.i2; i += di) {\n cw = handle.grx[i+di] - handle.grx[i];\n for (j = handle.j1; j < handle.j2; j += dj) {\n ch = handle.gry[j] - handle.gry[j+dj];\n binz = histo.getBinContent(i + 1, j + 1);\n\n npix = Math.round(scale*binz);\n if (npix <= 0) continue;\n\n for (k = 0; k < npix; ++k)\n path += this.markeratt.create(\n Math.round(handle.grx[i] + cw * rnd.random()),\n Math.round(handle.gry[j+1] + ch * rnd.random()));\n }\n }\n\n this.draw_g\n .append('svg:path')\n .attr('d', path)\n .call(this.markeratt.func);\n\n return handle;\n }\n\n // limit filling factor, do not try to produce as many points as filled area;\n if (this.maxbin > 0.7) factor = 0.7/this.maxbin;\n\n // let nlevels = Math.round(handle.max - handle.min);\n\n // now start build\n for (i = handle.i1; i < handle.i2; i += di) {\n for (j = handle.j1; j < handle.j2; j += dj) {\n binz = histo.getBinContent(i + 1, j + 1);\n if ((binz <= 0) || (binz < this.minbin)) continue;\n\n cw = handle.grx[i+di] - handle.grx[i];\n ch = handle.gry[j] - handle.gry[j+dj];\n if (cw*ch <= 0) continue;\n\n colindx = handle.palette.getContourIndex(binz/cw/ch);\n if (colindx < 0) continue;\n\n cmd1 = `M${handle.grx[i]},${handle.gry[j+dj]}`;\n if (colPaths[colindx] === undefined) {\n colPaths[colindx] = cmd1;\n cell_w[colindx] = cw;\n cell_h[colindx] = ch;\n } else{\n cmd2 = `m${handle.grx[i]-currx[colindx]},${handle.gry[j+dj] - curry[colindx]}`;\n colPaths[colindx] += (cmd2.length < cmd1.length) ? cmd2 : cmd1;\n cell_w[colindx] = Math.max(cell_w[colindx], cw);\n cell_h[colindx] = Math.max(cell_h[colindx], ch);\n }\n\n currx[colindx] = handle.grx[i];\n curry[colindx] = handle.gry[j+dj];\n\n colPaths[colindx] += `v${ch}h${cw}v${-ch}z`;\n }\n }\n\n let layer = this.getFrameSvg().select('.main_layer'),\n defs = layer.select('def');\n if (defs.empty() && (colPaths.length > 0))\n defs = layer.insert('svg:defs', ':first-child');\n\n this.createv7AttMarker();\n\n let cntr = handle.palette.getContour();\n\n for (colindx = 0; colindx < colPaths.length; ++colindx)\n if ((colPaths[colindx] !== undefined) && (colindx 0)\n handle = this.drawBinsContour(funcs, rect.width, rect.height);\n\n if (this.options.Text)\n pr = this.drawBinsText(handle);\n\n if (!handle && !pr)\n handle = this.drawBinsColor();\n\n if (!pr) pr = Promise.resolve(handle);\n\n return pr.then(h => {\n this.tt_handle = h;\n return this;\n });\n }\n\n /** @summary Provide text information (tooltips) for histogram bin */\n getBinTooltips(i, j) {\n let lines = [],\n histo = this.getHisto(),\n binz = histo.getBinContent(i+1,j+1),\n di = 1, dj = 1;\n\n if (this.isDisplayItem()) {\n di = histo.stepx || 1;\n dj = histo.stepy || 1;\n }\n\n lines.push(this.getObjectHint() || 'histo<2>');\n lines.push('x = ' + this.getAxisBinTip('x', i, di),\n 'y = ' + this.getAxisBinTip('y', j, dj));\n\n lines.push(`bin = ${i+1}, ${j+1}`);\n\n if (histo.$baseh) binz -= histo.$baseh.getBinContent(i+1,j+1);\n\n let lbl = 'entries = ' + ((di > 1) || (dj > 1) ? '~' : '');\n\n if (binz === Math.round(binz))\n lines.push(lbl + binz);\n else\n lines.push(lbl + floatToString(binz, gStyle.fStatFormat));\n\n return lines;\n }\n\n /** @summary Provide text information (tooltips) for poly bin */\n getPolyBinTooltips() {\n // see how TH2Painter is implemented\n return [];\n }\n\n /** @summary Process tooltip event */\n processTooltipEvent(pnt) {\n if (!pnt || !this.draw_content || !this.draw_g || !this.tt_handle || this.options.Proj) {\n if (this.draw_g)\n this.draw_g.select('.tooltip_bin').remove();\n return null;\n }\n\n let histo = this.getHisto(),\n h = this.tt_handle,\n ttrect = this.draw_g.select('.tooltip_bin');\n\n if (h.poly) {\n // process tooltips from TH2Poly - see TH2Painter\n return null;\n }\n\n let i, j, binz = 0, colindx = null;\n\n // search bins position\n for (i = h.i1; i < h.i2; ++i)\n if ((pnt.x>=h.grx[i]) && (pnt.x<=h.grx[i+1])) break;\n\n for (j = h.j1; j < h.j2; ++j)\n if ((pnt.y>=h.gry[j+1]) && (pnt.y<=h.gry[j])) break;\n\n if ((i < h.i2) && (j < h.j2)) {\n binz = histo.getBinContent(i+1,j+1);\n if (this.is_projection) {\n colindx = 0; // just to avoid hide\n } else if (h.hide_only_zeros) {\n colindx = (binz === 0) && !this._show_empty_bins ? null : 0;\n } else {\n colindx = h.palette.getContourIndex(binz);\n if ((colindx === null) && (binz === 0) && this._show_empty_bins) colindx = 0;\n }\n }\n\n if (colindx === null) {\n ttrect.remove();\n return null;\n }\n\n let res = { name: 'histo', title: histo.fTitle || 'title',\n x: pnt.x, y: pnt.y,\n color1: this.lineatt ? this.lineatt.color : 'green',\n color2: this.fillatt ? this.fillatt.getFillColorAlt('blue') : 'blue',\n lines: this.getBinTooltips(i, j), exact: true, menu: true };\n\n if (this.options.Color) res.color2 = h.palette.getColor(colindx);\n\n if (pnt.disabled && !this.is_projection) {\n ttrect.remove();\n res.changed = true;\n } else {\n if (ttrect.empty())\n ttrect = this.draw_g.append('svg:rect')\n .attr('class','tooltip_bin h1bin')\n .style('pointer-events','none');\n\n let i1 = i, i2 = i+1,\n j1 = j, j2 = j+1,\n x1 = h.grx[i1], x2 = h.grx[i2],\n y1 = h.gry[j2], y2 = h.gry[j1],\n binid = i*10000 + j;\n\n if (this.is_projection == 'X') {\n x1 = 0; x2 = this.getFramePainter().getFrameWidth();\n if (this.projection_width > 1) {\n let dd = (this.projection_width-1)/2;\n if (j2+dd >= h.j2) { j2 = Math.min(Math.round(j2+dd), h.j2); j1 = Math.max(j2 - this.projection_width, h.j1); }\n else { j1 = Math.max(Math.round(j1-dd), h.j1); j2 = Math.min(j1 + this.projection_width, h.j2); }\n }\n y1 = h.gry[j2]; y2 = h.gry[j1];\n binid = j1*777 + j2*333;\n } else if (this.is_projection == 'Y') {\n y1 = 0; y2 = this.getFramePainter().getFrameHeight();\n if (this.projection_width > 1) {\n let dd = (this.projection_width-1)/2;\n if (i2+dd >= h.i2) { i2 = Math.min(Math.round(i2+dd), h.i2); i1 = Math.max(i2 - this.projection_width, h.i1); }\n else { i1 = Math.max(Math.round(i1-dd), h.i1); i2 = Math.min(i1 + this.projection_width, h.i2); }\n }\n x1 = h.grx[i1], x2 = h.grx[i2],\n binid = i1*777 + i2*333;\n }\n\n res.changed = ttrect.property('current_bin') !== binid;\n\n if (res.changed)\n ttrect.attr('x', x1)\n .attr('width', x2 - x1)\n .attr('y', y1)\n .attr('height', y2 - y1)\n .style('opacity', '0.7')\n .property('current_bin', binid);\n\n if (this.is_projection && res.changed)\n this.redrawProjection(i1, i2, j1, j2);\n }\n\n if (res.changed)\n res.user_info = { obj: histo, name: 'histo',\n bin: histo.getBin(i+1, j+1), cont: binz, binx: i+1, biny: j+1,\n grx: pnt.x, gry: pnt.y };\n\n return res;\n }\n\n /** @summary Checks if it makes sense to zoom inside specified axis range */\n canZoomInside(axis,min,max) {\n if (axis == 'z') return true;\n let obj = this.getAxis(axis);\n return obj.FindBin(max,0.5) - obj.FindBin(min,0) > 1;\n }\n\n /** @summary Performs 2D drawing of histogram\n * @return {Promise} when ready */\n async draw2D(reason) {\n this.clear3DScene();\n\n return this.drawFrameAxes().then(res => {\n return res ? this.drawingBins(reason) : false;\n }).then(res => {\n if (res) return this.draw2DBins().then(() => this.addInteractivity());\n }).then(() => this);\n }\n\n /** @summary Performs 3D drawing of histogram\n * @return {Promise} when ready */\n async draw3D(reason) {\n console.log('3D drawing is disabled, load ./hist/RH1Painter.mjs');\n return this.draw2D(reason);\n }\n\n /** @summary Call drawing function depending from 3D mode */\n async callDrawFunc(reason) {\n let main = this.getFramePainter();\n\n if (main && (main.mode3d !== this.options.Mode3D) && !this.isMainPainter())\n this.options.Mode3D = main.mode3d;\n\n return this.options.Mode3D ? this.draw3D(reason) : this.draw2D(reason);\n }\n\n /** @summary Redraw histogram */\n async redraw(reason) {\n return this.callDrawFunc(reason);\n }\n\n /** @summary Draw histogram using painter instance\n * @private */\n static async _draw(painter /*, opt*/) {\n return ensureRCanvas(painter).then(() => {\n\n painter.setAsMainPainter();\n\n painter.options = { Hist: false, Error: false, Zero: false, Mark: false,\n Line: false, Fill: false, Lego: 0, Surf: 0,\n Text: true, TextAngle: 0, TextKind: '',\n BaseLine: false, Mode3D: false, AutoColor: 0,\n Color: false, Scat: false, ScatCoef: 1, Box: false, BoxStyle: 0, Arrow: false, Contour: 0, Proj: 0,\n BarOffset: 0., BarWidth: 1., minimum: kNoZoom, maximum: kNoZoom };\n\n let kind = painter.v7EvalAttr('kind', ''),\n sub = painter.v7EvalAttr('sub', 0),\n o = painter.options;\n\n o.Text = painter.v7EvalAttr('drawtext', false);\n\n switch(kind) {\n case 'lego': o.Lego = sub > 0 ? 10+sub : 12; o.Mode3D = true; break;\n case 'surf': o.Surf = sub > 0 ? 10+sub : 1; o.Mode3D = true; break;\n case 'box': o.Box = true; o.BoxStyle = 10 + sub; break;\n case 'err': o.Error = true; o.Mode3D = true; break;\n case 'cont': o.Contour = sub > 0 ? 10+sub : 1; break;\n case 'arr': o.Arrow = true; break;\n case 'scat': o.Scat = true; break;\n case 'col': o.Color = true; break;\n default: if (!o.Text) o.Color = true;\n }\n\n // here we deciding how histogram will look like and how will be shown\n // painter.decodeOptions(opt);\n\n painter._show_empty_bins = false;\n\n painter.scanContent();\n\n return painter.callDrawFunc();\n });\n }\n\n /** @summary draw RH2 object */\n static async draw(dom, obj, opt) {\n // create painter and add it to canvas\n return RH2Painter._draw(new RH2Painter(dom, obj), opt);\n }\n\n} // class RH2Painter\n\n\nexport { RH2Painter };\n","import { settings, gStyle, kNoZoom } from '../core.mjs';\nimport { RH2Painter as RH2Painter2D } from '../hist2d/RH2Painter.mjs';\nimport { RAxisPainter } from '../gpad/RAxisPainter.mjs';\nimport { assignFrame3DMethods, drawBinsLego, drawBinsError3D, drawBinsContour3D, drawBinsSurf3D } from './hist3d.mjs';\n\n\nclass RH2Painter extends RH2Painter2D {\n\n /** Draw histogram bins in 3D, using provided draw options */\n draw3DBins() {\n\n if (!this.draw_content) return;\n\n if (this.options.Surf)\n return drawBinsSurf3D(this, true);\n\n if (this.options.Error)\n return drawBinsError3D(this, true);\n\n if (this.options.Contour)\n return drawBinsContour3D(this, true, true);\n\n drawBinsLego(this, true);\n this.updatePaletteDraw();\n }\n\n draw3D(reason) {\n\n this.mode3d = true;\n\n let main = this.getFramePainter(), // who makes axis drawing\n is_main = this.isMainPainter(), // is main histogram\n pr = Promise.resolve(this);\n\n if (reason == 'resize') {\n if (is_main && main.resize3D()) main.render3D();\n\n return pr;\n }\n\n let zmult = 1 + 2*gStyle.fHistTopMargin;\n\n this.zmin = main.logz ? this.gminposbin * 0.3 : this.gminbin;\n this.zmax = this.gmaxbin;\n if (this.options.minimum !== kNoZoom) this.zmin = this.options.minimum;\n if (this.options.maximum !== kNoZoom) { this.zmax = this.options.maximum; zmult = 1; }\n if (main.logz && (this.zmin <= 0)) this.zmin = this.zmax * 1e-5;\n\n this.deleteAttr();\n\n if (is_main) {\n assignFrame3DMethods(main);\n pr = main.create3DScene(this.options.Render3D).then(() => {\n main.setAxesRanges(this.getAxis('x'), this.xmin, this.xmax, this.getAxis('y'), this.ymin, this.ymax, null, this.zmin, this.zmax);\n main.set3DOptions(this.options);\n main.drawXYZ(main.toplevel, RAxisPainter, { zmult, zoom: settings.Zooming, ndim: 2, draw: true, v7: true });\n });\n }\n\n if (!main.mode3d)\n return pr;\n\n return pr.then(() => this.drawingBins(reason)).then(() => {\n // called when bins received from server, must be reentrant\n let main = this.getFramePainter();\n\n this.draw3DBins();\n main.render3D();\n main.addKeysHandler();\n\n return this;\n });\n }\n\n /** @summary draw RH2 object */\n static async draw(dom, obj, opt) {\n // create painter and add it to canvas\n return RH2Painter._draw(new RH2Painter(dom, obj), opt);\n }\n\n} // class RH2Painter\n\nexport { RH2Painter };\n"],"x_google_ignoreList":[0,1]} \ No newline at end of file diff --git a/docs/476.f27d0b39c577e2e0.js b/docs/476.f27d0b39c577e2e0.js deleted file mode 100644 index fb40f47b4..000000000 --- a/docs/476.f27d0b39c577e2e0.js +++ /dev/null @@ -1,2 +0,0 @@ -"use strict";(self.webpackChunkphoenix_app=self.webpackChunkphoenix_app||[]).push([[476],{6476:(bt,ot,A)=>{A.r(ot),A.d(ot,{RH2Painter:()=>J});var H=A(4788),F=A(9542),st=A(2253),at=A(6367),it=A(3675),xt=A(8172),ct=A(9056);class W extends xt.n{constructor(t,i){super(t,i),this.wheel_zoomy=!0}cleanup(){delete this.tt_handle,super.cleanup()}getDimension(){return 2}toggleProjection(t,i){if("Projections"==t&&(t=""),(0,F.isStr)(t)&&t.length>1&&(i=parseInt(t.slice(1)),t=t[0]),i||(i=1),t&&this.is_projection==t){if(this.projection_width!==i)return void(this.projection_width=i);t=""}delete this.proj_hist;let e=this.is_projection===t?"":t;this.is_projection="",this.projection_width=i,this.provideSpecialDrawArea(e).then(()=>(this.is_projection=e,this.redrawProjection()))}redrawProjection(){}executeMenuCommand(t,i){return!!super.executeMenuCommand(t,i)||("SetShowProjectionX"==t.fName||"SetShowProjectionY"==t.fName)&&(this.toggleProjection(t.fName[17],i&&parseInt(i)?parseInt(i):1),!0)}fillHistContextMenu(t){t.add("sub:Projections",()=>this.toggleProjection());let i=this.is_projection||"";i&&(i+=this.projection_width);let e=["X1","X2","X3","X5","X10","Y1","Y2","Y3","Y5","Y10"];for(let o=0;othis.toggleProjection(l));t.add("endsub:"),t.add("Auto zoom-in",()=>this.autoZoom());let r=this.getSupportedDrawOptions();t.addDrawMenu("Draw with",r,o=>{if("inspect"===o)return this.showInspector();this.decodeOptions(o),this.interactiveRedraw("pad","drawopt")}),this.options.Color&&this.fillPaletteMenu(t)}clickButton(t){if(super.clickButton(t))return!0;switch(t){case"ToggleColor":this.toggleColor();break;case"Toggle3D":this.toggleMode3D();break;default:return!1}return!0}fillToolbar(){super.fillToolbar(!0);let t=this.getPadPainter();t&&(t.addPadButton("th2color","Toggle color","ToggleColor"),t.addPadButton("th2colorz","Toggle color palette","ToggleColorZ"),t.addPadButton("th2draw3d","Toggle 3D mode","Toggle3D"),t.showPadButtons())}toggleColor(){this.options.Mode3D?(this.options.Mode3D=!1,this.options.Color=!0):this.options.Color=!this.options.Color,this.redraw()}autoZoom(){let o,l,t=this.getSelectIndex("x","left",-1),i=this.getSelectIndex("x","right",1),e=this.getSelectIndex("y","left",-1),r=this.getSelectIndex("y","right",1),u=this.getHisto(),f=this.getAxis("x"),w=this.getAxis("y");if(t==i||e==r)return;let x=u.getBinContent(t+1,e+1);for(o=t;o0)return;let h=i,n=t,a=r,c=e;for(o=t;ox&&(o=n&&(n=o+1),l=c&&(c=l+1));let g,m,d,y,s=!1;return h===n-1&&h>t+1&&ne+1&&ct||ne||c0?r.fContMinPos:null,this.gmaxbin=r.fContMax;else for(this.gminbin=this.gmaxbin=r.getBinContent(1,1),this.gminposbin=null,i=0;ithis.gmaxbin&&(this.gmaxbin=o),o>0&&(null===this.gminposbin||this.gminposbin>o)&&(this.gminposbin=o)}this.zmin=this.gminbin,this.zmax=this.gmaxbin,null===this.gminposbin&&(this.gminposbin=1e-4*this.gmaxbin),this.draw_content=!(this.options.Axis>0)&&this.gmaxbin>0}countStat(t){let f,w,x,h,n,y,s,i=this.getHisto(),e=0,r=0,o=0,l=0,u=0,a={name:"histo",entries:0,integral:0,meanx:0,meany:0,rmsx:0,rmsy:0,matrix:[0,0,0,0,0,0,0,0,0],xmax:0,ymax:0,wmax:null},c=this.getSelectIndex("x","left"),g=this.getSelectIndex("x","right"),m=this.getSelectIndex("y","left"),d=this.getSelectIndex("y","right"),M=this.getAxis("x"),b=this.getAxis("y");for(y=1;y<=this.nbinsx;++y)for(f=y<=c+1?0:y>g+1?2:1,x=M.GetBinCoord(y-.5),s=1;s<=this.nbinsy;++s)w=s<=m+1?0:s>d+1?2:1,h=b.GetBinCoord(s-.5),n=i.getBinContent(y,s),a.entries+=n,a.matrix[3*w+f]+=n,1==f&&1==w&&(t&&!t(x,h)||((null===a.wmax||n>a.wmax)&&(a.wmax=n,a.xmax=x,a.ymax=h),e+=n,r+=x*n,o+=h*n,l+=x**2*n,u+=h**2*n));return Math.abs(e)>1e-300&&(a.meanx=r/e,a.meany=o/e,a.rmsx=Math.sqrt(Math.abs(l/e-a.meanx**2)),a.rmsy=Math.sqrt(Math.abs(u/e-a.meany**2))),null===a.wmax&&(a.wmax=0),a.integral=e,a}fillStatistic(t,i){let e=this.countStat(),r=Math.floor(i%10),o=Math.floor(i/10)%10,l=Math.floor(i/100)%10,u=Math.floor(i/1e3)%10,f=Math.floor(i/1e4)%10,w=Math.floor(i/1e5)%10,x=Math.floor(i/1e6)%10,h=Math.floor(i/1e7)%10,n=Math.floor(i/1e8)%10;if(t.clearStat(),r>0&&t.addText(e.name),o>0&&t.addText("Entries = "+t.format(e.entries,"entries")),l>0&&(t.addText("Mean x = "+t.format(e.meanx)),t.addText("Mean y = "+t.format(e.meany))),u>0&&(t.addText("Std Dev x = "+t.format(e.rmsx)),t.addText("Std Dev y = "+t.format(e.rmsy))),x>0&&t.addText("Integral = "+t.format(e.matrix[4],"entries")),h>0&&(t.addText("Skewness x = "),t.addText("Skewness y = ")),n>0&&t.addText("Kurt = "),f>0||w>0){let a=e.matrix;t.addText(a[6].toFixed(0)+" | "+a[7].toFixed(0)+" | "+a[7].toFixed(0)),t.addText(a[3].toFixed(0)+" | "+a[4].toFixed(0)+" | "+a[5].toFixed(0)),t.addText(a[0].toFixed(0)+" | "+a[1].toFixed(0)+" | "+a[2].toFixed(0))}return!0}drawBinsColor(){const t=this.getHisto(),i=this.prepareDraw(),e=i.stepi,r=i.stepj,o=[];let u,f,w,x,h,n,a,c,g,m;const d=()=>{m.path+=`h${a}v${m.y2-m.y}h${-a}z`,m.dy=0,m=null};for(x=i.i1;x{y&&this.draw_g.append("svg:path").style("fill",i.palette.getColor(s)).attr("d",y.path)}),this.updatePaletteDraw(),i}buildContour(t,i,e,r){let n,a,g,b,_,B,C,j,p,P,k,Z,T,lt,I,o=this.getHisto(),l=2004,f=new Float32Array(2*l),w=new Float32Array(2*l),x=new Int32Array(2*l),h=0,c=[],m=0,d=[0,0,0,0],y=[0,0,0,0],s=[0,0,0,0],M=[0,0,0,0],Q=t.stepi,E=t.stepj;function pt(G){for(let v=0;vs[j]&&(C=j),C++,h=1,p=1;p<=4;p++)j=C%4+1,P=ht(s[C-1],M[C-1],d[C-1],y[C-1],s[j-1],M[j-1],d[j-1],y[j-1]),h+=2*P,C=j;for(C=s[0]<=s[1]?0:1,j=s[2]<=s[3]?2:3,s[C]>s[j]&&(C=j),C++,h=2,p=1;p<=4;p++)j=1==C?4:C-1,P=ht(s[C-1],M[C-1],d[C-1],y[C-1],s[j-1],M[j-1],d[j-1],y[j-1]),h+=2*P,C=j;for(k=0,p=1;p<=h-5;p+=2)for(;x[p-1]!=x[p];){for(Z=f[p],T=w[p],lt=x[p],I=p;I<=h-5;I+=2)f[I]=f[I+2],w[I]=w[I+2],x[I]=x[I+2];if(f[h-3]=Z,w[h-3]=T,x[h-3]=lt,k>2e3)break;k++}if(k>2e3)continue;for(p=1;p<=h-2;p+=2)n=x[p-1],n>=0&&n=0){rt=n;break}for(B=0,n=rt-1;n>=0;n--)et[B]=n,B++;for(n=rt;n0&&v[b+1]===X[D]&&$[b+1]===L[D]&&(D--,X[D]=v[b],L[D]=$[b],v[b]=v[b+1]=R,$[b]=$[b+1]=O,U++);if(0==U)break}for(D+1=0&&r(G,X,L,D,z,n),S=0,b=2;b{let m,d,y,s,g="";for(let M=n;M<=a;++M){if(f?(d=f(x[M],h[M]),d.x=Math.round(t.grx(d.x)),d.y=Math.round(t.gry(d.y))):d={x:Math.round(x[M]),y:Math.round(h[M])},g)if(M==a&&y&&d.x==y.x&&d.y==y.y){if(!s)return"";g+="z",c=!1}else d.x!=m.x&&d.y!=m.y?(g+="l"+(d.x-m.x)+","+(d.y-m.y),s=!0):d.x!=m.x?(g+="h"+(d.x-m.x),s=!0):d.y!=m.y&&(g+="v"+(d.y-m.y),s=!0);else g="M"+d.x+","+d.y,y=d;m=d}return c&&(g+="z"),g};if(14===this.options.Contour){let x=`M0,0h${i}v${e}h${-i}z`;if(this.options.Proj){let h=r.stepj,n=parseInt((r.j2-r.j1)/h),a=new Float32Array(2*n),c=new Float32Array(2*n);for(let g=0;g{let d,g=l.getColor(x),m=g;switch(this.options.Contour){case 1:case 14:break;case 11:m="none",d=new at.rE({color:g});break;case 12:m="none",d=new at.rE({color:1,style:x%5+1,width:1});break;case 13:m="none",d=this.lineatt}let y=w(h,n,a,c,"none"!=m);if(!y)return;let s=this.draw_g.append("svg:path").attr("class","th2_contour").attr("d",y).style("fill",m);d&&s.call(d.func)}),r.hide_only_zeros=!0,r}createPolyBin(){return""}drawBinsText(t){let e,r,o,l,u,f,w,x,h,n,i=this.getHisto();null===t&&(t=this.prepareDraw({rounding:!1}));let a=this.v7EvalFont("text",{size:20,color:"black",align:22}),c=0,g=this.draw_g.append("svg:g").attr("class","th2_text"),m=t.stepi,d=t.stepj;for(this.options.BarOffset&&(c=this.options.BarOffset),this.startTextDrawing(a,"font",g),e=t.i1;e(t.hide_only_zeros=!0,t))}drawBinsArrow(){let e,r,l,u,f,w,x,h,n,a,c,g,m,d,y,t=this.getHisto(),i="",o=1e-30,s=this.prepareDraw({rounding:!1}),M=(s.grx[s.i2]-s.grx[s.i1])/(s.i2-s.i1+1-.03)/2,b=(s.gry[s.j2]-s.gry[s.j1])/(s.j2-s.j1+1-.03)/2,_=s.stepi,B=s.stepj;const C=(j,p)=>j?p?`l${j},${p}`:`h${j}`:p?`v${p}`:"";for(let j=0;j<2;++j)for(e=s.i1;e=s.i2-_?t.getBinContent(e+1,r+1)-t.getBinContent(e+1-_,r+1):.5*(t.getBinContent(e+1+_,r+1)-t.getBinContent(e+1-_,r+1)),u=r===s.j1?t.getBinContent(e+1,r+1+B)-t.getBinContent(e+1,r+1):r>=s.j2-B?t.getBinContent(e+1,r+1)-t.getBinContent(e+1,r+1-B):.5*(t.getBinContent(e+1,r+1+B)-t.getBinContent(e+1,r+1-B)),0===j?o=Math.max(o,Math.abs(l),Math.abs(u)):(f=(s.grx[e]+s.grx[e+_])/2,w=(s.gry[r]+s.gry[r+B])/2,x=M*l/o,h=b*u/o,n=f-x,a=f+x,c=w-h,g=w+h,l=Math.round(a-n),u=Math.round(g-c),(0!==l||0!==u)&&(i+="M"+Math.round(n)+","+Math.round(c)+C(l,u),(Math.abs(l)>5||Math.abs(u)>5)&&(m=Math.sqrt(2/(l**2+u**2)),d=Math.round(m*(l+u)),y=Math.round(m*(l-u)),(d||y)&&(i+=`m${-d},${y}`+C(d,-y)+C(-y,-d)))));return this.draw_g.append("svg:path").attr("d",i).style("fill","none").call(this.lineatt.func),s}drawBinsBox(){let t=this.getHisto(),i=this.prepareDraw({rounding:!1}),e=this.getFramePainter();e.maxbin===e.minbin&&(e.maxbin=this.gmaxbin,e.minbin=this.gminbin,e.minposbin=this.gminposbin),e.maxbin===e.minbin&&(e.minbin=Math.min(0,e.maxbin-1));let l,u,f,w,c,g,m,d,y,s,M,b,r=Math.max(Math.abs(e.maxbin),Math.abs(e.minbin)),o=Math.max(0,e.minbin),x="",h="",n="",a="",_=!1,B=0,C=i.stepi,j=i.stepj;if(e.logz&&r>0){_=!0;let p=Math.log(r);B=o>0?Math.log(o):e.minposbin>=1&&e.minposbin<100?Math.log(.7):e.minposbin>0?Math.log(.7*e.minposbin):p-10,B>=p&&(B=p-10),b=1/(p-B)}else b=1/(r-o);for(l=i.i1;l0?Math.log(w)-B:0:w-o,c=.5*(c<0?1:1-Math.sqrt(c*b)),c<0&&(c=0),s=i.grx[l+C]-i.grx[l],M=i.gry[u]-i.gry[u+j],g=c*s,m=c*M,d=Math.round(i.grx[l]+g),y=Math.round(i.gry[u+j]+m),s=Math.max(Math.round(s-2*g),1),M=Math.max(Math.round(M-2*m),1),x+=`M${d},${y}v${M}h${s}v${-M}z`,f<0&&10===this.options.BoxStyle&&(h+=`M${d},${y}l${s},${M}M${d+s},${y}l${-s},${M}`),11===this.options.BoxStyle&&s>5&&M>5)){let p=Math.round(.1*s),P=Math.round(.1*M),k=`M${d},${y}h${s}l${-p},${P}h${2*p-s}v${M-2*P}l${-p},${P}z`,Z=`M${d+s},${y+M}v${-M}l${-p},${P}v${M-2*P}h${2*p-s}l${-p},${P}z`;f<0?(a+=k,n+=Z):(n+=k,a+=Z)}if(x){let p=this.draw_g.append("svg:path").attr("d",x).call(this.fillatt.func);11!==this.options.BoxStyle&&this.fillatt.empty()&&p.call(this.lineatt.func)}if(n&&this.fillatt.hasColor()&&this.draw_g.append("svg:path").attr("d",n).call(this.fillatt.func).style("fill",(0,st.B8)(this.fillatt.color).brighter(.5).formatHex()),a&&this.draw_g.append("svg:path").attr("d",a).call(this.fillatt.func).style("fill",this.fillatt.hasColor()?(0,st.B8)(this.fillatt.color).darker(.5).formatHex():"red"),h){let p=this.draw_g.append("svg:path").attr("d",h).style("fill","none");this.lineatt.empty()||p.call(this.lineatt.func)}return i}drawBinsScatter(){let f,w,x,h,n,a,c,g,t=this.getHisto(),i=this.prepareDraw({rounding:!0,pixel_density:!0,scatter_plot:!0}),e=[],r=[],o=[],l=[],u=[],m=1,d=this.options.ScatCoef*(this.gmaxbin>2e3?2e3/this.gmaxbin:1),y=i.stepi,s=i.stepj,M=new it.q9(i.sumz);if(d*i.sumz<1e5){this.createv7AttMarker(),this.markeratt.resetPos();let j,p,C="";for(h=i.i1;h.7&&(m=.7/this.maxbin),h=i.i1;h0&&(_=b.insert("svg:defs",":first-child")),this.createv7AttMarker();let B=i.palette.getContour();for(f=0;f0&&(o=t.drawBinsContour(r,e.width,e.height)),t.options.Text&&(l=t.drawBinsText(o)),!o&&!l&&(o=t.drawBinsColor()),l||(l=Promise.resolve(o)),l.then(u=>(t.tt_handle=u,t))})()}getBinTooltips(t,i){let e=[],r=this.getHisto(),o=r.getBinContent(t+1,i+1),l=1,u=1;this.isDisplayItem()&&(l=r.stepx||1,u=r.stepy||1),e.push(this.getObjectHint()||"histo<2>"),e.push("x = "+this.getAxisBinTip("x",t,l),"y = "+this.getAxisBinTip("y",i,u)),e.push(`bin = ${t+1}, ${i+1}`),r.$baseh&&(o-=r.$baseh.getBinContent(t+1,i+1));let f="entries = "+(l>1||u>1?"~":"");return o===Math.round(o)?e.push(f+o):e.push(f+(0,it.Ee)(o,F.gStyle.fStatFormat)),e}getPolyBinTooltips(){return[]}processTooltipEvent(t){if(!t||!this.draw_content||!this.draw_g||!this.tt_handle||this.options.Proj)return this.draw_g&&this.draw_g.select(".tooltip_bin").remove(),null;let i=this.getHisto(),e=this.tt_handle,r=this.draw_g.select(".tooltip_bin");if(e.poly)return null;let o,l,u=0,f=null;for(o=e.i1;o=e.grx[o]&&t.x<=e.grx[o+1]);++o);for(l=e.j1;l=e.gry[l+1]&&t.y<=e.gry[l]);++l);if(o1){let s=(this.projection_width-1)/2;a+s>=e.j2?(a=Math.min(Math.round(a+s),e.j2),n=Math.max(a-this.projection_width,e.j1)):(n=Math.max(Math.round(n-s),e.j1),a=Math.min(n+this.projection_width,e.j2))}m=e.gry[a],d=e.gry[n],y=777*n+333*a}else if("Y"==this.is_projection){if(m=0,d=this.getFramePainter().getFrameHeight(),this.projection_width>1){let s=(this.projection_width-1)/2;h+s>=e.i2?(h=Math.min(Math.round(h+s),e.i2),x=Math.max(h-this.projection_width,e.i1)):(x=Math.max(Math.round(x-s),e.i1),h=Math.min(x+this.projection_width,e.i2))}c=e.grx[x],g=e.grx[h],y=777*x+333*h}w.changed=r.property("current_bin")!==y,w.changed&&r.attr("x",c).attr("width",g-c).attr("y",m).attr("height",d-m).style("opacity","0.7").property("current_bin",y),this.is_projection&&w.changed&&this.redrawProjection(x,h,n,a)}return w.changed&&(w.user_info={obj:i,name:"histo",bin:i.getBin(o+1,l+1),cont:u,binx:o+1,biny:l+1,grx:t.x,gry:t.y}),w}canZoomInside(t,i,e){if("z"==t)return!0;let r=this.getAxis(t);return r.FindBin(e,.5)-r.FindBin(i,0)>1}draw2D(t){var i=this;return(0,H.Z)(function*(){return i.clear3DScene(),i.drawFrameAxes().then(e=>!!e&&i.drawingBins(t)).then(e=>{if(e)return i.draw2DBins().then(()=>i.addInteractivity())}).then(()=>i)})()}draw3D(t){var i=this;return(0,H.Z)(function*(){return console.log("3D drawing is disabled, load ./hist/RH1Painter.mjs"),i.draw2D(t)})()}callDrawFunc(t){var i=this;return(0,H.Z)(function*(){let e=i.getFramePainter();return e&&e.mode3d!==i.options.Mode3D&&!i.isMainPainter()&&(i.options.Mode3D=e.mode3d),i.options.Mode3D?i.draw3D(t):i.draw2D(t)})()}redraw(t){var i=this;return(0,H.Z)(function*(){return i.callDrawFunc(t)})()}static _draw(t){return(0,H.Z)(function*(){return(0,ct.ensureRCanvas)(t).then(()=>{t.setAsMainPainter(),t.options={Hist:!1,Error:!1,Zero:!1,Mark:!1,Line:!1,Fill:!1,Lego:0,Surf:0,Text:!0,TextAngle:0,TextKind:"",BaseLine:!1,Mode3D:!1,AutoColor:0,Color:!1,Scat:!1,ScatCoef:1,Box:!1,BoxStyle:0,Arrow:!1,Contour:0,Proj:0,BarOffset:0,BarWidth:1,minimum:F.kNoZoom,maximum:F.kNoZoom};let i=t.v7EvalAttr("kind",""),e=t.v7EvalAttr("sub",0),r=t.options;switch(r.Text=t.v7EvalAttr("drawtext",!1),i){case"lego":r.Lego=e>0?10+e:12,r.Mode3D=!0;break;case"surf":r.Surf=e>0?10+e:1,r.Mode3D=!0;break;case"box":r.Box=!0,r.BoxStyle=10+e;break;case"err":r.Error=!0,r.Mode3D=!0;break;case"cont":r.Contour=e>0?10+e:1;break;case"arr":r.Arrow=!0;break;case"scat":r.Scat=!0;break;case"col":r.Color=!0;break;default:r.Text||(r.Color=!0)}return t._show_empty_bins=!1,t.scanContent(),t.callDrawFunc()})})()}static draw(t,i,e){return(0,H.Z)(function*(){return W._draw(new W(t,i),e)})()}}var mt=A(9850),K=A(7238);class J extends W{draw3DBins(){if(this.draw_content){if(this.options.Surf)return(0,K.c5)(this,!0);if(this.options.Error)return(0,K.me)(this,!0);if(this.options.Contour)return(0,K.ME)(this,!0,!0);(0,K.UR)(this,!0),this.updatePaletteDraw()}}draw3D(t){this.mode3d=!0;let i=this.getFramePainter(),e=this.isMainPainter(),r=Promise.resolve(this);if("resize"==t)return e&&i.resize3D()&&i.render3D(),r;let o=1+2*F.gStyle.fHistTopMargin;return this.zmin=i.logz?.3*this.gminposbin:this.gminbin,this.zmax=this.gmaxbin,this.options.minimum!==F.kNoZoom&&(this.zmin=this.options.minimum),this.options.maximum!==F.kNoZoom&&(this.zmax=this.options.maximum,o=1),i.logz&&this.zmin<=0&&(this.zmin=1e-5*this.zmax),this.deleteAttr(),e&&((0,K.g_)(i),r=i.create3DScene(this.options.Render3D).then(()=>{i.setAxesRanges(this.getAxis("x"),this.xmin,this.xmax,this.getAxis("y"),this.ymin,this.ymax,null,this.zmin,this.zmax),i.set3DOptions(this.options),i.drawXYZ(i.toplevel,mt.C,{zmult:o,zoom:F.settings.Zooming,ndim:2,draw:!0,v7:!0})})),i.mode3d?r.then(()=>this.drawingBins(t)).then(()=>{let l=this.getFramePainter();return this.draw3DBins(),l.render3D(),l.addKeysHandler(),this}):r}static draw(t,i,e){return(0,H.Z)(function*(){return J._draw(new J(t,i),e)})()}}}}]); -//# sourceMappingURL=476.f27d0b39c577e2e0.js.map \ No newline at end of file diff --git a/docs/484.5a180dbb47d3c56e.js.map b/docs/484.5a180dbb47d3c56e.js.map deleted file mode 100644 index 079668211..000000000 --- a/docs/484.5a180dbb47d3c56e.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"484.5a180dbb47d3c56e.js","mappings":"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","names":["TSplinePainter","ObjectPainter","updateObject","obj","opt","spline","this","getObject","_typename","Object","assign","undefined","decodeOptions","eval","knot","x","dx","fX","fY","fB","fC","fD","fE","fF","findX","klow","khig","fNp","fXmin","fXmax","fKstep","Math","round","fDelta","fPoly","max","khalf","createDummyHisto","xmin","xmax","ymin","ymax","forEach","min","gStyle","histo","create","fName","fTitle","fXaxis","fYaxis","processTooltipEvent","pnt","xx","yy","cleanup","funcs","getFramePainter","getGrFuncs","options","second_x","second_y","indx","revertAxis","fN","abs","grx","knot_size","draw_g","select","remove","gbin","radius","lineatt","width","empty","append","attr","style","call","func","res","name","title","y","gry","color1","color","lines","exact","changed","property","menu","menu_dist","sqrt","getObjectHint","push","axisAsText","floatToString","redraw","pmain","w","getFrameWidth","h","getFrameHeight","createG","createAttLine","Line","Curve","npx","fNpx","scale_xmin","scale_xmax","bins","logx","log","n","exp","h0","hmin","path","buildSvgPath","Mark","createAttMarker","markeratt","resetPos","getFullSize","length","canZoomInside","axis","d","DrawOptions","has_main","getMainPainter","Same","check","Hopt","storeDrawOpt","static","dom","painter","promise","Promise","resolve","no_main","console","warn","TH1Painter","then","addToPadPrimitives"],"sourceRoot":"webpack:///","sources":["../node_modules/jsroot/modules/draw/TSplinePainter.mjs"],"sourcesContent":["import { gStyle, create } from '../core.mjs';\nimport { DrawOptions, floatToString, buildSvgPath } from '../base/BasePainter.mjs';\nimport { ObjectPainter } from '../base/ObjectPainter.mjs';\nimport { TH1Painter } from '../hist/TH1Painter.mjs';\n\n\n/**\n * @summary Painter for TSpline objects.\n *\n * @private\n */\n\nclass TSplinePainter extends ObjectPainter {\n\n /** @summary Update TSpline object\n * @private */\n updateObject(obj, opt) {\n let spline = this.getObject();\n\n if (spline._typename != obj._typename) return false;\n\n if (spline !== obj) Object.assign(spline, obj);\n\n if (opt !== undefined) this.decodeOptions(opt);\n\n return true;\n }\n\n /** @summary Evaluate spline at given position\n * @private */\n eval(knot, x) {\n let dx = x - knot.fX;\n\n if (knot._typename == 'TSplinePoly3')\n return knot.fY + dx*(knot.fB + dx*(knot.fC + dx*knot.fD));\n\n if (knot._typename == 'TSplinePoly5')\n return knot.fY + dx*(knot.fB + dx*(knot.fC + dx*(knot.fD + dx*(knot.fE + dx*knot.fF))));\n\n return knot.fY + dx;\n }\n\n /** @summary Find idex for x value\n * @private */\n findX(x) {\n let spline = this.getObject(),\n klow = 0, khig = spline.fNp - 1;\n\n if (x <= spline.fXmin) return 0;\n if (x >= spline.fXmax) return khig;\n\n if(spline.fKstep) {\n // Equidistant knots, use histogramming\n klow = Math.round((x - spline.fXmin)/spline.fDelta);\n // Correction for rounding errors\n if (x < spline.fPoly[klow].fX) {\n klow = Math.max(klow-1,0);\n } else if (klow < khig) {\n if (x > spline.fPoly[klow+1].fX) ++klow;\n }\n } else {\n // Non equidistant knots, binary search\n while(khig - klow > 1) {\n let khalf = Math.round((klow + khig)/2);\n if(x > spline.fPoly[khalf].fX) klow = khalf;\n else khig = khalf;\n }\n }\n return klow;\n }\n\n /** @summary Create histogram for axes drawing\n * @private */\n createDummyHisto() {\n\n let xmin = 0, xmax = 1, ymin = 0, ymax = 1,\n spline = this.getObject();\n\n if (spline?.fPoly) {\n\n xmin = xmax = spline.fPoly[0].fX;\n ymin = ymax = spline.fPoly[0].fY;\n\n spline.fPoly.forEach(knot => {\n xmin = Math.min(knot.fX, xmin);\n xmax = Math.max(knot.fX, xmax);\n ymin = Math.min(knot.fY, ymin);\n ymax = Math.max(knot.fY, ymax);\n });\n\n if (ymax > 0.0) ymax *= (1 + gStyle.fHistTopMargin);\n if (ymin < 0.0) ymin *= (1 + gStyle.fHistTopMargin);\n }\n\n let histo = create('TH1I');\n\n histo.fName = spline.fName + '_hist';\n histo.fTitle = spline.fTitle;\n\n histo.fXaxis.fXmin = xmin;\n histo.fXaxis.fXmax = xmax;\n histo.fYaxis.fXmin = ymin;\n histo.fYaxis.fXmax = ymax;\n\n return histo;\n }\n\n /** @summary Process tooltip event\n * @private */\n processTooltipEvent(pnt) {\n\n let cleanup = false,\n spline = this.getObject(),\n main = this.getFramePainter(),\n funcs = main?.getGrFuncs(this.options.second_x, this.options.second_y),\n xx, yy, knot = null, indx = 0;\n\n if ((pnt === null) || !spline || !funcs) {\n cleanup = true;\n } else {\n xx = funcs.revertAxis('x', pnt.x);\n indx = this.findX(xx);\n knot = spline.fPoly[indx];\n yy = this.eval(knot, xx);\n\n if ((indx < spline.fN-1) && (Math.abs(spline.fPoly[indx+1].fX-xx) < Math.abs(xx-knot.fX))) knot = spline.fPoly[++indx];\n\n if (Math.abs(funcs.grx(knot.fX) - pnt.x) < 0.5*this.knot_size) {\n xx = knot.fX; yy = knot.fY;\n } else {\n knot = null;\n if ((xx < spline.fXmin) || (xx > spline.fXmax)) cleanup = true;\n }\n }\n\n if (cleanup) {\n if (this.draw_g)\n this.draw_g.select('.tooltip_bin').remove();\n return null;\n }\n\n let gbin = this.draw_g.select('.tooltip_bin'),\n radius = this.lineatt.width + 3;\n\n if (gbin.empty())\n gbin = this.draw_g.append('svg:circle')\n .attr('class', 'tooltip_bin')\n .style('pointer-events','none')\n .attr('r', radius)\n .style('fill', 'none')\n .call(this.lineatt.func);\n\n let res = { name: this.getObject().fName,\n title: this.getObject().fTitle,\n x: funcs.grx(xx),\n y: funcs.gry(yy),\n color1: this.lineatt.color,\n lines: [],\n exact: (knot !== null) || (Math.abs(funcs.gry(yy) - pnt.y) < radius) };\n\n res.changed = gbin.property('current_xx') !== xx;\n res.menu = res.exact;\n res.menu_dist = Math.sqrt((res.x-pnt.x)**2 + (res.y-pnt.y)**2);\n\n if (res.changed)\n gbin.attr('cx', Math.round(res.x))\n .attr('cy', Math.round(res.y))\n .property('current_xx', xx);\n\n let name = this.getObjectHint();\n if (name) res.lines.push(name);\n res.lines.push('x = ' + funcs.axisAsText('x', xx));\n res.lines.push('y = ' + funcs.axisAsText('y', yy));\n if (knot !== null) {\n res.lines.push('knot = ' + indx);\n res.lines.push('B = ' + floatToString(knot.fB, gStyle.fStatFormat));\n res.lines.push('C = ' + floatToString(knot.fC, gStyle.fStatFormat));\n res.lines.push('D = ' + floatToString(knot.fD, gStyle.fStatFormat));\n if ((knot.fE !== undefined) && (knot.fF !== undefined)) {\n res.lines.push('E = ' + floatToString(knot.fE, gStyle.fStatFormat));\n res.lines.push('F = ' + floatToString(knot.fF, gStyle.fStatFormat));\n }\n }\n\n return res;\n }\n\n /** @summary Redraw object\n * @private */\n redraw() {\n\n let spline = this.getObject(),\n pmain = this.getFramePainter(),\n funcs = pmain?.getGrFuncs(this.options.second_x, this.options.second_y),\n w = pmain.getFrameWidth(),\n h = pmain.getFrameHeight();\n\n this.createG(true);\n\n this.knot_size = 5; // used in tooltip handling\n\n this.createAttLine({ attr: spline });\n\n if (this.options.Line || this.options.Curve) {\n\n let npx = Math.max(10, spline.fNpx),\n xmin = Math.max(pmain.scale_xmin, spline.fXmin),\n xmax = Math.min(pmain.scale_xmax, spline.fXmax),\n indx = this.findX(xmin),\n bins = []; // index of current knot\n\n if (pmain.logx) {\n xmin = Math.log(xmin);\n xmax = Math.log(xmax);\n }\n\n for (let n = 0; n < npx; ++n) {\n let x = xmin + (xmax-xmin)/npx*(n-1);\n if (pmain.logx) x = Math.exp(x);\n\n while ((indx < spline.fNp-1) && (x > spline.fPoly[indx+1].fX)) ++indx;\n\n let y = this.eval(spline.fPoly[indx], x);\n\n bins.push({ x, y, grx: funcs.grx(x), gry: funcs.gry(y) });\n }\n\n let h0 = h; // use maximal frame height for filling\n if ((pmain.hmin !== undefined) && (pmain.hmin >= 0)) {\n h0 = Math.round(funcs.gry(0));\n if ((h0 > h) || (h0 < 0)) h0 = h;\n }\n\n let path = buildSvgPath('bezier', bins, h0, 2);\n\n this.draw_g.append('svg:path')\n .attr('class', 'line')\n .attr('d', path.path)\n .style('fill', 'none')\n .call(this.lineatt.func);\n }\n\n if (this.options.Mark) {\n\n // for tooltips use markers only if nodes where not created\n let path = '';\n\n this.createAttMarker({ attr: spline });\n\n this.markeratt.resetPos();\n\n this.knot_size = this.markeratt.getFullSize();\n\n for (let n = 0; n < spline.fPoly.length; n++) {\n let knot = spline.fPoly[n],\n grx = funcs.grx(knot.fX);\n if ((grx > -this.knot_size) && (grx < w + this.knot_size)) {\n let gry = funcs.gry(knot.fY);\n if ((gry > -this.knot_size) && (gry < h + this.knot_size)) {\n path += this.markeratt.create(grx, gry);\n }\n }\n }\n\n if (path)\n this.draw_g.append('svg:path')\n .attr('d', path)\n .call(this.markeratt.func);\n }\n }\n\n /** @summary Checks if it makes sense to zoom inside specified axis range */\n canZoomInside(axis/*,min,max*/) {\n if (axis !== 'x') return false;\n\n let spline = this.getObject();\n if (!spline) return false;\n\n // if function calculated, one always could zoom inside\n return true;\n }\n\n /** @summary Decode options for TSpline drawing */\n decodeOptions(opt) {\n let d = new DrawOptions(opt);\n\n if (!this.options) this.options = {};\n\n let has_main = !!this.getMainPainter();\n\n Object.assign(this.options, {\n Same: d.check('SAME'),\n Line: d.check('L'),\n Curve: d.check('C'),\n Mark: d.check('P'),\n Hopt: 'AXIS',\n second_x: false,\n second_y: false\n });\n\n if (!this.options.Line && !this.options.Curve && !this.options.Mark)\n this.options.Curve = true;\n\n if (d.check('X+')) { this.options.Hopt += 'X+'; this.options.second_x = has_main; }\n if (d.check('Y+')) { this.options.Hopt += 'Y+'; this.options.second_y = has_main; }\n\n this.storeDrawOpt(opt);\n }\n\n /** @summary Draw TSpline */\n static async draw(dom, spline, opt) {\n let painter = new TSplinePainter(dom, spline);\n painter.decodeOptions(opt);\n\n let promise = Promise.resolve(), no_main = !painter.getMainPainter();\n if (no_main || painter.options.second_x || painter.options.second_y) {\n if (painter.options.Same && no_main) {\n console.warn('TSpline painter requires histogram to be drawn');\n return null;\n }\n let histo = painter.createDummyHisto();\n promise = TH1Painter.draw(dom, histo, painter.options.Hopt);\n }\n\n return promise.then(() => {\n painter.addToPadPrimitives();\n painter.redraw();\n return painter;\n });\n }\n\n} // class TSplinePainter\n\nexport { TSplinePainter };\n"],"x_google_ignoreList":[0]} \ No newline at end of file diff --git a/docs/484.5a180dbb47d3c56e.js b/docs/484.6d033883b5954bed.js similarity index 87% rename from docs/484.5a180dbb47d3c56e.js rename to docs/484.6d033883b5954bed.js index 4827cacba..97faf0a56 100644 --- a/docs/484.5a180dbb47d3c56e.js +++ b/docs/484.6d033883b5954bed.js @@ -1,2 +1,2 @@ -"use strict";(self.webpackChunkphoenix_app=self.webpackChunkphoenix_app||[]).push([[484],{1484:(E,g,m)=>{m.r(g),m.d(g,{TSplinePainter:()=>x});var M=m(4788),p=m(9542),u=m(3675),P=m(6458),X=m(629);class x extends P.tK{updateObject(t,i){let e=this.getObject();return e._typename==t._typename&&(e!==t&&Object.assign(e,t),void 0!==i&&this.decodeOptions(i),!0)}eval(t,i){let e=i-t.fX;return"TSplinePoly3"==t._typename?t.fY+e*(t.fB+e*(t.fC+e*t.fD)):"TSplinePoly5"==t._typename?t.fY+e*(t.fB+e*(t.fC+e*(t.fD+e*(t.fE+e*t.fF)))):t.fY+e}findX(t){let i=this.getObject(),e=0,n=i.fNp-1;if(t<=i.fXmin)return 0;if(t>=i.fXmax)return n;if(i.fKstep)e=Math.round((t-i.fXmin)/i.fDelta),ti.fPoly[e+1].fX&&++e;else for(;n-e>1;){let a=Math.round((e+n)/2);t>i.fPoly[a].fX?e=a:n=a}return e}createDummyHisto(){let t=0,i=1,e=0,n=1,a=this.getObject();a?.fPoly&&(t=i=a.fPoly[0].fX,e=n=a.fPoly[0].fY,a.fPoly.forEach(l=>{t=Math.min(l.fX,t),i=Math.max(l.fX,i),e=Math.min(l.fY,e),n=Math.max(l.fY,n)}),n>0&&(n*=1+p.gStyle.fHistTopMargin),e<0&&(e*=1+p.gStyle.fHistTopMargin));let s=(0,p.create)("TH1I");return s.fName=a.fName+"_hist",s.fTitle=a.fTitle,s.fXaxis.fXmin=t,s.fXaxis.fXmax=i,s.fYaxis.fXmin=e,s.fYaxis.fXmax=n,s}processTooltipEvent(t){let s,l,i=!1,e=this.getObject(),a=this.getFramePainter()?.getGrFuncs(this.options.second_x,this.options.second_y),r=null,o=0;if(null!==t&&e&&a?(s=a.revertAxis("x",t.x),o=this.findX(s),r=e.fPoly[o],l=this.eval(r,s),oe.fXmax)&&(i=!0))):i=!0,i)return this.draw_g&&this.draw_g.select(".tooltip_bin").remove(),null;let h=this.draw_g.select(".tooltip_bin"),c=this.lineatt.width+3;h.empty()&&(h=this.draw_g.append("svg:circle").attr("class","tooltip_bin").style("pointer-events","none").attr("r",c).style("fill","none").call(this.lineatt.func));let f={name:this.getObject().fName,title:this.getObject().fTitle,x:a.grx(s),y:a.gry(l),color1:this.lineatt.color,lines:[],exact:null!==r||Math.abs(a.gry(l)-t.y)-this.knot_size&&o-this.knot_size&&h(n.addToPadPrimitives(),n.redraw(),n))})()}}}}]); -//# sourceMappingURL=484.5a180dbb47d3c56e.js.map \ No newline at end of file +"use strict";(self.webpackChunkphoenix_app=self.webpackChunkphoenix_app||[]).push([[484],{1484:(E,g,u)=>{u.r(g),u.d(g,{TSplinePainter:()=>x});var M=u(5835),p=u(9542),m=u(3675),P=u(6458),X=u(629);class x extends P.tK{updateObject(t,i){let e=this.getObject();return e._typename==t._typename&&(e!==t&&Object.assign(e,t),void 0!==i&&this.decodeOptions(i),!0)}eval(t,i){let e=i-t.fX;return"TSplinePoly3"==t._typename?t.fY+e*(t.fB+e*(t.fC+e*t.fD)):"TSplinePoly5"==t._typename?t.fY+e*(t.fB+e*(t.fC+e*(t.fD+e*(t.fE+e*t.fF)))):t.fY+e}findX(t){let i=this.getObject(),e=0,n=i.fNp-1;if(t<=i.fXmin)return 0;if(t>=i.fXmax)return n;if(i.fKstep)e=Math.round((t-i.fXmin)/i.fDelta),ti.fPoly[e+1].fX&&++e;else for(;n-e>1;){let a=Math.round((e+n)/2);t>i.fPoly[a].fX?e=a:n=a}return e}createDummyHisto(){let t=0,i=1,e=0,n=1,a=this.getObject();a?.fPoly&&(t=i=a.fPoly[0].fX,e=n=a.fPoly[0].fY,a.fPoly.forEach(l=>{t=Math.min(l.fX,t),i=Math.max(l.fX,i),e=Math.min(l.fY,e),n=Math.max(l.fY,n)}),n>0&&(n*=1+p.gStyle.fHistTopMargin),e<0&&(e*=1+p.gStyle.fHistTopMargin));let s=(0,p.create)("TH1I");return s.fName=a.fName+"_hist",s.fTitle=a.fTitle,s.fXaxis.fXmin=t,s.fXaxis.fXmax=i,s.fYaxis.fXmin=e,s.fYaxis.fXmax=n,s}processTooltipEvent(t){let s,l,i=!1,e=this.getObject(),a=this.getFramePainter()?.getGrFuncs(this.options.second_x,this.options.second_y),r=null,o=0;if(null!==t&&e&&a?(s=a.revertAxis("x",t.x),o=this.findX(s),r=e.fPoly[o],l=this.eval(r,s),oe.fXmax)&&(i=!0))):i=!0,i)return this.draw_g&&this.draw_g.select(".tooltip_bin").remove(),null;let h=this.draw_g.select(".tooltip_bin"),c=this.lineatt.width+3;h.empty()&&(h=this.draw_g.append("svg:circle").attr("class","tooltip_bin").style("pointer-events","none").attr("r",c).style("fill","none").call(this.lineatt.func));let f={name:this.getObject().fName,title:this.getObject().fTitle,x:a.grx(s),y:a.gry(l),color1:this.lineatt.color,lines:[],exact:null!==r||Math.abs(a.gry(l)-t.y)-this.knot_size&&o-this.knot_size&&h(n.addToPadPrimitives(),n.redraw(),n))})()}}}}]); +//# sourceMappingURL=484.6d033883b5954bed.js.map \ No newline at end of file diff --git a/docs/484.6d033883b5954bed.js.map b/docs/484.6d033883b5954bed.js.map new file mode 100644 index 000000000..a09262d08 --- /dev/null +++ b/docs/484.6d033883b5954bed.js.map @@ -0,0 +1 @@ +{"version":3,"file":"484.6d033883b5954bed.js","mappings":"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","names":["TSplinePainter","ObjectPainter","updateObject","obj","opt","spline","this","getObject","_typename","Object","assign","undefined","decodeOptions","eval","knot","x","dx","fX","fY","fB","fC","fD","fE","fF","findX","klow","khig","fNp","fXmin","fXmax","fKstep","Math","round","fDelta","fPoly","max","khalf","createDummyHisto","xmin","xmax","ymin","ymax","forEach","min","gStyle","histo","create","fName","fTitle","fXaxis","fYaxis","processTooltipEvent","pnt","xx","yy","cleanup","funcs","getFramePainter","getGrFuncs","options","second_x","second_y","indx","revertAxis","fN","abs","grx","knot_size","draw_g","select","remove","gbin","radius","lineatt","width","empty","append","attr","style","call","func","res","name","title","y","gry","color1","color","lines","exact","changed","property","menu","menu_dist","sqrt","getObjectHint","push","axisAsText","floatToString","redraw","pmain","w","getFrameWidth","h","getFrameHeight","createG","createAttLine","Line","Curve","npx","fNpx","scale_xmin","scale_xmax","bins","logx","log","n","exp","h0","hmin","path","buildSvgPath","Mark","createAttMarker","markeratt","resetPos","getFullSize","length","canZoomInside","axis","d","DrawOptions","has_main","getMainPainter","Same","check","Hopt","storeDrawOpt","static","dom","painter","promise","Promise","resolve","no_main","console","warn","TH1Painter","then","addToPadPrimitives"],"sourceRoot":"webpack:///","sources":["../node_modules/jsroot/modules/draw/TSplinePainter.mjs"],"sourcesContent":["import { gStyle, create } from '../core.mjs';\nimport { DrawOptions, floatToString, buildSvgPath } from '../base/BasePainter.mjs';\nimport { ObjectPainter } from '../base/ObjectPainter.mjs';\nimport { TH1Painter } from '../hist/TH1Painter.mjs';\n\n\n/**\n * @summary Painter for TSpline objects.\n *\n * @private\n */\n\nclass TSplinePainter extends ObjectPainter {\n\n /** @summary Update TSpline object\n * @private */\n updateObject(obj, opt) {\n let spline = this.getObject();\n\n if (spline._typename != obj._typename) return false;\n\n if (spline !== obj) Object.assign(spline, obj);\n\n if (opt !== undefined) this.decodeOptions(opt);\n\n return true;\n }\n\n /** @summary Evaluate spline at given position\n * @private */\n eval(knot, x) {\n let dx = x - knot.fX;\n\n if (knot._typename == 'TSplinePoly3')\n return knot.fY + dx*(knot.fB + dx*(knot.fC + dx*knot.fD));\n\n if (knot._typename == 'TSplinePoly5')\n return knot.fY + dx*(knot.fB + dx*(knot.fC + dx*(knot.fD + dx*(knot.fE + dx*knot.fF))));\n\n return knot.fY + dx;\n }\n\n /** @summary Find idex for x value\n * @private */\n findX(x) {\n let spline = this.getObject(),\n klow = 0, khig = spline.fNp - 1;\n\n if (x <= spline.fXmin) return 0;\n if (x >= spline.fXmax) return khig;\n\n if(spline.fKstep) {\n // Equidistant knots, use histogramming\n klow = Math.round((x - spline.fXmin)/spline.fDelta);\n // Correction for rounding errors\n if (x < spline.fPoly[klow].fX) {\n klow = Math.max(klow-1,0);\n } else if (klow < khig) {\n if (x > spline.fPoly[klow+1].fX) ++klow;\n }\n } else {\n // Non equidistant knots, binary search\n while(khig - klow > 1) {\n let khalf = Math.round((klow + khig)/2);\n if(x > spline.fPoly[khalf].fX) klow = khalf;\n else khig = khalf;\n }\n }\n return klow;\n }\n\n /** @summary Create histogram for axes drawing\n * @private */\n createDummyHisto() {\n\n let xmin = 0, xmax = 1, ymin = 0, ymax = 1,\n spline = this.getObject();\n\n if (spline?.fPoly) {\n\n xmin = xmax = spline.fPoly[0].fX;\n ymin = ymax = spline.fPoly[0].fY;\n\n spline.fPoly.forEach(knot => {\n xmin = Math.min(knot.fX, xmin);\n xmax = Math.max(knot.fX, xmax);\n ymin = Math.min(knot.fY, ymin);\n ymax = Math.max(knot.fY, ymax);\n });\n\n if (ymax > 0.0) ymax *= (1 + gStyle.fHistTopMargin);\n if (ymin < 0.0) ymin *= (1 + gStyle.fHistTopMargin);\n }\n\n let histo = create('TH1I');\n\n histo.fName = spline.fName + '_hist';\n histo.fTitle = spline.fTitle;\n\n histo.fXaxis.fXmin = xmin;\n histo.fXaxis.fXmax = xmax;\n histo.fYaxis.fXmin = ymin;\n histo.fYaxis.fXmax = ymax;\n\n return histo;\n }\n\n /** @summary Process tooltip event\n * @private */\n processTooltipEvent(pnt) {\n\n let cleanup = false,\n spline = this.getObject(),\n main = this.getFramePainter(),\n funcs = main?.getGrFuncs(this.options.second_x, this.options.second_y),\n xx, yy, knot = null, indx = 0;\n\n if ((pnt === null) || !spline || !funcs) {\n cleanup = true;\n } else {\n xx = funcs.revertAxis('x', pnt.x);\n indx = this.findX(xx);\n knot = spline.fPoly[indx];\n yy = this.eval(knot, xx);\n\n if ((indx < spline.fN-1) && (Math.abs(spline.fPoly[indx+1].fX-xx) < Math.abs(xx-knot.fX))) knot = spline.fPoly[++indx];\n\n if (Math.abs(funcs.grx(knot.fX) - pnt.x) < 0.5*this.knot_size) {\n xx = knot.fX; yy = knot.fY;\n } else {\n knot = null;\n if ((xx < spline.fXmin) || (xx > spline.fXmax)) cleanup = true;\n }\n }\n\n if (cleanup) {\n if (this.draw_g)\n this.draw_g.select('.tooltip_bin').remove();\n return null;\n }\n\n let gbin = this.draw_g.select('.tooltip_bin'),\n radius = this.lineatt.width + 3;\n\n if (gbin.empty())\n gbin = this.draw_g.append('svg:circle')\n .attr('class', 'tooltip_bin')\n .style('pointer-events','none')\n .attr('r', radius)\n .style('fill', 'none')\n .call(this.lineatt.func);\n\n let res = { name: this.getObject().fName,\n title: this.getObject().fTitle,\n x: funcs.grx(xx),\n y: funcs.gry(yy),\n color1: this.lineatt.color,\n lines: [],\n exact: (knot !== null) || (Math.abs(funcs.gry(yy) - pnt.y) < radius) };\n\n res.changed = gbin.property('current_xx') !== xx;\n res.menu = res.exact;\n res.menu_dist = Math.sqrt((res.x-pnt.x)**2 + (res.y-pnt.y)**2);\n\n if (res.changed)\n gbin.attr('cx', Math.round(res.x))\n .attr('cy', Math.round(res.y))\n .property('current_xx', xx);\n\n let name = this.getObjectHint();\n if (name) res.lines.push(name);\n res.lines.push('x = ' + funcs.axisAsText('x', xx));\n res.lines.push('y = ' + funcs.axisAsText('y', yy));\n if (knot !== null) {\n res.lines.push('knot = ' + indx);\n res.lines.push('B = ' + floatToString(knot.fB, gStyle.fStatFormat));\n res.lines.push('C = ' + floatToString(knot.fC, gStyle.fStatFormat));\n res.lines.push('D = ' + floatToString(knot.fD, gStyle.fStatFormat));\n if ((knot.fE !== undefined) && (knot.fF !== undefined)) {\n res.lines.push('E = ' + floatToString(knot.fE, gStyle.fStatFormat));\n res.lines.push('F = ' + floatToString(knot.fF, gStyle.fStatFormat));\n }\n }\n\n return res;\n }\n\n /** @summary Redraw object\n * @private */\n redraw() {\n\n let spline = this.getObject(),\n pmain = this.getFramePainter(),\n funcs = pmain?.getGrFuncs(this.options.second_x, this.options.second_y),\n w = pmain.getFrameWidth(),\n h = pmain.getFrameHeight();\n\n this.createG(true);\n\n this.knot_size = 5; // used in tooltip handling\n\n this.createAttLine({ attr: spline });\n\n if (this.options.Line || this.options.Curve) {\n\n let npx = Math.max(10, spline.fNpx),\n xmin = Math.max(pmain.scale_xmin, spline.fXmin),\n xmax = Math.min(pmain.scale_xmax, spline.fXmax),\n indx = this.findX(xmin),\n bins = []; // index of current knot\n\n if (pmain.logx) {\n xmin = Math.log(xmin);\n xmax = Math.log(xmax);\n }\n\n for (let n = 0; n < npx; ++n) {\n let x = xmin + (xmax-xmin)/npx*(n-1);\n if (pmain.logx) x = Math.exp(x);\n\n while ((indx < spline.fNp-1) && (x > spline.fPoly[indx+1].fX)) ++indx;\n\n let y = this.eval(spline.fPoly[indx], x);\n\n bins.push({ x, y, grx: funcs.grx(x), gry: funcs.gry(y) });\n }\n\n let h0 = h; // use maximal frame height for filling\n if ((pmain.hmin !== undefined) && (pmain.hmin >= 0)) {\n h0 = Math.round(funcs.gry(0));\n if ((h0 > h) || (h0 < 0)) h0 = h;\n }\n\n let path = buildSvgPath('bezier', bins, h0, 2);\n\n this.draw_g.append('svg:path')\n .attr('class', 'line')\n .attr('d', path.path)\n .style('fill', 'none')\n .call(this.lineatt.func);\n }\n\n if (this.options.Mark) {\n\n // for tooltips use markers only if nodes where not created\n let path = '';\n\n this.createAttMarker({ attr: spline });\n\n this.markeratt.resetPos();\n\n this.knot_size = this.markeratt.getFullSize();\n\n for (let n = 0; n < spline.fPoly.length; n++) {\n let knot = spline.fPoly[n],\n grx = funcs.grx(knot.fX);\n if ((grx > -this.knot_size) && (grx < w + this.knot_size)) {\n let gry = funcs.gry(knot.fY);\n if ((gry > -this.knot_size) && (gry < h + this.knot_size)) {\n path += this.markeratt.create(grx, gry);\n }\n }\n }\n\n if (path)\n this.draw_g.append('svg:path')\n .attr('d', path)\n .call(this.markeratt.func);\n }\n }\n\n /** @summary Checks if it makes sense to zoom inside specified axis range */\n canZoomInside(axis/*,min,max*/) {\n if (axis !== 'x') return false;\n\n let spline = this.getObject();\n if (!spline) return false;\n\n // if function calculated, one always could zoom inside\n return true;\n }\n\n /** @summary Decode options for TSpline drawing */\n decodeOptions(opt) {\n let d = new DrawOptions(opt);\n\n if (!this.options) this.options = {};\n\n let has_main = !!this.getMainPainter();\n\n Object.assign(this.options, {\n Same: d.check('SAME'),\n Line: d.check('L'),\n Curve: d.check('C'),\n Mark: d.check('P'),\n Hopt: 'AXIS',\n second_x: false,\n second_y: false\n });\n\n if (!this.options.Line && !this.options.Curve && !this.options.Mark)\n this.options.Curve = true;\n\n if (d.check('X+')) { this.options.Hopt += 'X+'; this.options.second_x = has_main; }\n if (d.check('Y+')) { this.options.Hopt += 'Y+'; this.options.second_y = has_main; }\n\n this.storeDrawOpt(opt);\n }\n\n /** @summary Draw TSpline */\n static async draw(dom, spline, opt) {\n let painter = new TSplinePainter(dom, spline);\n painter.decodeOptions(opt);\n\n let promise = Promise.resolve(), no_main = !painter.getMainPainter();\n if (no_main || painter.options.second_x || painter.options.second_y) {\n if (painter.options.Same && no_main) {\n console.warn('TSpline painter requires histogram to be drawn');\n return null;\n }\n let histo = painter.createDummyHisto();\n promise = TH1Painter.draw(dom, histo, painter.options.Hopt);\n }\n\n return promise.then(() => {\n painter.addToPadPrimitives();\n painter.redraw();\n return painter;\n });\n }\n\n} // class TSplinePainter\n\nexport { TSplinePainter };\n"],"x_google_ignoreList":[0]} \ No newline at end of file diff --git a/docs/56.0b66108b488f8216.js.map b/docs/56.0b66108b488f8216.js.map deleted file mode 100644 index 199fbd6c5..000000000 --- a/docs/56.0b66108b488f8216.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"56.0b66108b488f8216.js","mappings":"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","names":["RObjectPainter","ObjectPainter","constructor","dom","obj","opt","csstype","super","this","v7EvalAttr","name","dflt","getObject","cssprefix","type_check","res","undefined","typ1","typ2","parseFloat","fAttr","m","value","v","rstyle","fBlocks","blks","k","length","block","selector","fId","fCssClass","map","toLowerCase","v7SetAttr","v7EvalLength","sizepx","Math","round","norm","px","val","operand","pos","console","log","slice","Number","isFinite","v7EvalColor","isStr","pp","getPadPainter","_auto_color_cnt","pal","getHistPalette","cnt","num","_num_primitives","getColorOrdinal","_auto_colors","error","ordinal","v7EvalFont","dflts","fontScale","size","rfont","_dfltRFont","fFamily","fStyle","fWeight","text_size","text_angle","text_align","align","text_color","color","font_family","font_style","font_weight","getPadHeight","handler","FontHandler","setAngle","setAlign","setColor","createv7AttFill","prefix","pattern","createAttFill","color_as_svg","createv7AttLine","width","style","createAttLine","lineatt","setBorder","createv7AttMarker","refsize","createAttMarker","v7AttrChange","req","kind","snapid","_typename","ids","names","values","update","push","parseInt","JSON","stringify","v7SendAttrChanges","do_update","canp","getCanvPainter","v7SubmitRequest","method","isFunc","submitDrawableRequest","_pending_request","assignSnapId","id","p","v7CommMode","_websocket","v7NormalMode","v7OfflineMode","RAxisPainter","arg1","axis","Object","assign","AxisPainterMethods","initAxisPainter","embedded","cleanup","axis_g","cleanupAxisPainter","getAxisType","configureZAxis","fp","_log","logbase","abs","exp","logz","configureAxis","min","max","smin","smax","vertical","frame_range","axis_range","opts","full_min","full_max","_symlog","reverse","timeoffset","toffset","fLabelsIndex","own_labels","labels","func","d3_scaleTime","domain","convertDate","symlog","d3_scaleSymlog","constant","d3_scaleLog","base","d3_scaleLinear","scale_min","scale_max","gr_range","range","axis_shift","gr","format","ndiv","nticks","nticks2","nticks3","floor","scale_range","tf1","tf2","chooseTimeFormat","tfunc1","tfunc2","d3_timeFormat","formatTime","noexp","moreloglabels","formatLog","formatLabels","order","ndig","formatNormal","getScaleMin","getScaleMax","d","indx","fNBinsNoOver","i","pair","second","first","fLabels","createTicks","only_major_as_array","optionNoexp","optionNoopt","optionInt","noticksopt","handle","nminor","nmiddle","nmajor","minor","middle","major","produceTicks","delta","unshift","reset","next","doround","tick","grpos","last_major","next_major_grpos","maxorder","minorder","exclorder3","maxtick","mintick","ord1","log10","ord2","bestorder","bestndig","bestlen","lbls","totallen","lbl","indexOf","warn","isCenteredLabels","processLabelsMove","arg","optionUnlab","label_g","select","box","node","getBBox","append","classed","attr","x","y","height","drag_pos0","offset","property","remove","side","labelsOffset","changeAxisAttr","scalingSize","addTitleDrag","title_g","settings","isBatchMode","acc_x","acc_y","new_x","new_y","alt_pos","curr_indx","drag_rect","drag_move","d3_drag","subject","on","evnt","sourceEvent","preventDefault","stopPropagation","title_length","titlePos","off","swap","isReverseAxis","title_align","isTitleRotated","dx","dy","set_x","set_y","besti","basepos","titleOffset","call","isInsideGrRange","delta1","delta2","getGrRange","drawMainLine","ending","endingSize","endingStyle","sz","sz7","drawTicks","main_draw","ticks","ticks_plusminus","ticksSide","h1","ticksSize","h2","startingSize","ticksColor","ticksWidth","gap0","gap","drawLabels","gaps","center_lbls","_this","rotate_lbls","labelsFont","angle","textscale","maxtextlen","lbls_tilt","lbl_pos","max_lbl_width","max_lbl_height","process_drawtext_ready","painter","result_width","result_height","textwidth","maxwidth","gap_before","gap_after","scale","scaleTextDrawing","lastpos","fix_offset","fix_coord","startTextDrawing","text","latex","draw_g","post_process","drawText","axis_step","has_obstacle","formatExp","finishTextDrawing","then","selectAll","each","txt","d3_select","tr","tilt_height","sin","PI","cos","addZoomingRect","lgaps","disable_zooming","titleFont","drawTitle","_this2","fTitle","title_shift_x","title_shift_y","title_basepos","rotated","titleCenter","titleOpposite","extractDrawAttributes","rect","getPadRect","roundAngle","maxTickSize","drawAxis","layer","transform","_this3","standalone","empty","tgaps","Promise","resolve","setAfterDrawHandler","_afterDrawAgain","drawAxisAgain","drawAxisOtherPlace","only_ticks","zoomStandalone","redraw","drawable","getCoordinate","fPos","len","getPadLength","fVertical","fLength","labels_len","createG","promise","createMenu","menu","add","fillAxisContextMenu","show","addDragHandler","only_move","positionChanged","d3_pointer","item","analyzeWheelEvent","changed","drag","xn","yn","fHoriz","fArr","fVert","submitCanvExec","toFixed","redraw_mode","changes","arguments","redrawPad","changeAxisLog","getFramePainter","unzoom","addchk","input","addRColorMenu","col","addSizeMenu","addSelectMenu","addRAttrTextItems","noangle","noalign","change","t","flag","RFramePainter","tframe","mode3d","xmin","xmax","ymin","ymax","axes_drawn","keys_handler","projection","v7_frame","is_root6","setFrameActive","enabledKeys","control","enableKeys","setLastEventPos","pnt","fLastEventPnt","getLastEventPos","updateAttributes","force","fX1NDC","modified_NDC","fY1NDC","fX2NDC","fY2NDC","fillatt","getProjectionFunc","l","b","DegToRad","alpha2","r2","sqrt","f","cdec","denom","tan","recalculateRange","Proj","scale_ymin","scale_ymax","pnts","scale_xmin","scale_xmax","original_xmin","original_xmax","original_ymin","original_ymax","n","drawGrids","getFrameSvg","h","getFrameHeight","w","getFrameWidth","gridx","gridy","grid_style","getSvgLineStyle","gStyle","grid_color","getColor","x_handle","draw_grid","grid","swap_xy","y_handle","axisAsText","toUpperCase","toPrecision","_setAxisRange","vmin","vmax","nmin","nmax","nzmin","nzmax","zoomChangedInteractive","setAxesRanges","xaxis","yaxis","zaxis","zmin","zmax","setAxes2Ranges","second_x","second_y","x2axis","y2axis","createXY","self_drawaxes","cleanXY","v6axes","reverse_x","reverse_y","logx","logy","extra_y_space","zoom_ymin","zoom_ymax","zoom_xmin","zoom_xmax","clTAxis","create","TAxisPainter","getDom","setPadName","getPadName","symlog_y","symlog_x","logcheckmin","logminfactor","assignFrameMembers","ndim","log_min_nz","ymin_nz","hasDrawnAxes","drawAxes","ticksx","ticksy","sidex","sidey","cleanupAxes","draw_swapside","draw_ticks","z_handle","pr","draw_horiz","draw_vertical","_fast_drawing","can_adjust_frame","disable_x_draw","disable_y_draw","disable_ticks","pr1","invert_side","pr2","_frame_x","all","arr","drawAxes2","zoom_x2min","zoom_x2max","scale_x2min","scale_x2max","x2min","x2max","x2_handle","zoom_y2min","zoom_y2max","scale_y2min","scale_y2max","y2min","y2max","y2_handle","getGrFuncs","use_x2","grx2","use_y2","gry2","grx","gry","revertAxis","sizeChanged","clean","grname","cleanFrameDrawings","create3DScene","window","removeEventListener","_click_handler","_dblclick_handler","frame_painter_ref","trans","top_rect","main_svg","lm","tm","rotate","fixpos","options","RotateFrame","FixFrame","_frame_y","_frame_width","_frame_height","_frame_rotate","_frame_fixpos","getLayerSvg","rx","ry","addInteractivity","FrameInteractive","addBasicInteractivity","getFrameRect","hint_delta_x","hint_delta_y","configureUserClickHandler","configureUserDblclickHandler","zoom","zoom_x","zoom_y","zoom_z","unzoom_x","unzoom_y","unzoom_z","r_x","r_y","r_z","is_any_check","flags","checkZooming","canZoomInside","zoom_zmin","zoom_zmax","forEachPainter","ranges","interactiveRedraw","zoomSingle","zoom_v","unzoom_v","isAxisZoomed","dox","doy","doz","_this4","zoom_changed_x","zoom_changed_y","zoom_changed_z","fld","fillObjectOfflineMenu","changeFrameAttr","fillContextMenu","alone","isTooltipAllowed","setTooltipAllowed","addAttributesMenu","saveAs","revertPoint","showAxisStatus","axis_name","hint_name","axis_value","showObjectStatus","addKeysHandler","addFrameKeysHandler","for_second_axes","addFrameInteractivity","setRootPadRange","toggleAxisLog","RPadPainter","pad","iscan","this_pad_name","fObjectID","internals","painters","has_canvas","forEachPainterInPad","isRoot6","svg_this_pad","getPadSvg","getMainPainter","main_painter_ref","setMainPainter","_doing_draw","forEach","svg_p","pads_cache","_pad_x","_pad_y","_pad_width","_pad_height","draw_object","pad_frame","selectActivePad","active","getPadWidth","szx","szy","getRootPad","cleanPrimitives","splice","findPainterFor","selobj","selname","seltype","find","pobj","fName","fDfltPalette","fColors","fOrdinal","fColor","fInterpolate","fNormalized","addMethods","getNumPainters","userfunc","sub","registerForPadEvents","receiver","pad_events_receiver","producePadEvent","what","padpainter","position","place","selectObjectPainter","istoppad","getAbsPosInCanvas","createCanvasSvg","check_resize","new_size","btns","frect","factor","svg","_fixed_size","getCanvSvg","testMainResize","render_to","selectDom","setTopPainter","online_canvas","enlargePad","padContextMenu","fWinSize","getElementRect","alignButtons","svg_can","pad_enlarged","hasObjectsToDraw","enlargeMain","was_fast","checkResize","showPadButtons","createPadSvg","only_resize","svg_parent","pad_name","pad_visible","svg_pad","svg_rect","fSize","color0","fBorderMode","constants","fPrimitives","syncDraw","entry","findIndex","e","resolveFunc","confirmDraw","shift","drawObject","drawPrimitives","_start_tm","Date","getTime","ppainter","isObject","_primitive","spenttm","processPadTooltipEvent","hints","processTooltipEvent","nproc","hint","user_info","changeDarkMode","mode","addSettingsMenu","hasMenuBar","actiavteMenuBar","hasEventStatus","activateStatusBar","fname","fillObjectExecMenu","reason","sync_promise","showsubitems","redrawNext","isPromise","getActivePad","needRedrawByResize","elem","checkCanvasResize","getPromise","updateObject","addObjectPainter","objpainter","lst","extractTObjectProp","snap","fColIndex","fColValue","colors","root_colors","getRootColors","pattr","fObject","assignObject","fCssType","fOption","extract_color","member_name","attr_name","addColor","fLineColor","fLineWidth","fLineStyle","fFillColor","fFillStyle","fMarkerColor","fMarkerStyle","fMarkerSize","fTextColor","fTextAlign","fTextAngle","fTextSize","drawNextSnap","_snaps_map","next_rstyle","fDummy","redrawPadSnap","fDrawable","subpad","decodeOptions","addToPadPrimitives","addPadButtons","prev_name","selectCurrentPad","webSnapIds","kNone","kObject","kColors","kStyle","kPalette","fKind","ListOfColors","fString","palette","custom_palette","ColorPalette","$dummy","findSnap","onlyid","check","checkid","embed_canvas","document","title","batch_mode","mainid","use_openui","brlayout","BrowserLayout","setDom","drawing_divid","registerForResize","isanyfound","isanyremove","prim","removePadButtons","createImage","btoa_func","_this5","produceImage","separ","itemContextMenu","rrr","getBoundingClientRect","clientX","left","clientY","top","setTimeout","selkind","selp","isInteger","full_canvas","filename","imgdata","saveFile","encodeURIComponent","findActivePad","file_format","use_frame","_this6","items","prnt","btns_node","btns_prnt","parentNode","btns_next","nextSibling","main","render3D","access3dKind","can3d","sz2","getSizeFor3d","canvas","renderer","domElement","dataUrl","toDataURL","foreign","clname","svg_frame","frame_node","frame_next","img","insert","reconstruct","insertBefore","innerHTML","compressSVG","image","Image","onload","createElement","getContext","drawImage","onerror","src","data","replace","match","p1","c","String","fromCharCode","decodeURIComponent","reEncode","clickPadButton","funcname","closeMenu","getDimension","shown","done","clickButton","addPadButton","btn","tooltip","keyname","_buttons","cp","is_online","PadButtonsHandler","frame_painter","sign","getV","getRect","user","DrawOptions","GlobalColors","LocalColors","IgnorePalette","fLogx","fLogy","fLogz","fGridx","fGridy","fTickx","fTicky","static","matchObjectType","clTPad","LongPollSocket","addr","_raw","_args","path","connid","raw","args","nextRequest","url","reqmode","post","browser","createHttpRequest","processRequest","str","u8Arr","Uint8Array","trim","getResponseHeader","extra_hdr","send","_offset","onclose","dummy_tmout","onopen","onmessage","close","FileDumpSocket","protocol","httpRequest","getProtocol","parse","nextOperation","wait_for_file","provideData","WebWindowHandle","socket_kind","credits","state","cansend","ackn","getUserArgs","field","user_args","setUserArgs","setReceiver","invokeReceiver","brdcst","arg2","channels","ks","keys","chid","_msg","_len","wait_first_recv","channel","force_queue","msgqueue","ready","msg","reserveQueueItem","markQueueItemDone","processQueue","_loop_msgqueue","front","master","channelid","timerid","clearTimeout","canSend","numsend","getRelCanSend","keepAlive","inject","immediate","bind","Array","isArray","createChannel","freechannelid","getChannelId","setHRef","href","getHRef","relative_path","ddd","lastIndexOf","connect","ntry","key","token","retry_open","first_time","toString","location","showProgress","WebSocket","next_binary","binchid","Blob","reader","FileReader","qitem","event","target","result","readAsArrayBuffer","i1","credit","i2","i3","newkey","sessionStorage","setItem","reload","ArrayBuffer","err","askReload","addReloadKeyHandler","addEventListener","ctrlKey","RCanvasPainter","tooltip_allowed","v7canvas","_submreq","_changed_layout","setLayoutKind","getLayoutKind","origin","main_selector","changeLayout","layout_kind","sidebar","firstChild","removeChild","html","appendChild","GridDisplay","getGridFrame","resize","toggleProjection","proj_painter","showUI5ProjectionArea","layout","drawProjection","drawInSidePanel","canv","testUI5","showMessage","saveCanvasAsFile","sendWebsocket","sendSaveCommand","closeWebsocket","useWebsocket","onWebsocketOpened","onWebsocketClosed","closeCurrentWindow","onWebsocketMsg","redrawObject","processDrawableReply","cmdid","cmd","reply","showUI5Panel","conn","cpainter","panel_handle","panel_name","onWebsocketError","hist","that","showSection","_requests","prevreq","_tm","_nextreq","_nextreqid","reqid","_kind","_painter","_method","submitMenuRequest","menukind","menureqid","submitExec","exec","subelem","processChanges","activateGed","hasStatus","hp","getHPainter","hasStatusLine","createStatusLine","showCanvasStatus","msgs","showStatus","hasGed","hasContent","removeGed","ged_view","getController","cleanupGed","destroy","deleteContent","getUi5PanelData","jsroot","core","toJSON","loadScript","EAxisBits","getColorExec","createBrowserBtns","ToolbarIcons","toggleKind","setBrowserContent","setBrowserTitle","toggleBrowserKind","loadOpenui5","sap","ui","define","JSONModel","XMLView","oModel","viewName","viewData","oGed","setModel","placeAt","padEventsReceiver","produceJSON","can","nocanvas","normal_canvas","drawRPadSnapshot","ensureRCanvas","_x","frame_kind","draw","reject","Error","apply","drawRFrameTitle","fx","fy","fw","ph","title_margin","title_width","title_height","textFont","fText","minwidth","minheight","no_change_x","drawRFont","font","defs","fSrc","fDefault","drawRAxis","drawRFrame","registerMethods","extractRColor","rcolor","getContourIndex","zc","mid","cntr","fContour","r","fCustomContour","getContourColor","zindx","getContour","deleteContour","calcColor","entry1","entry2","dist","r1","col1","d3_rgb","col2","g","createPaletteColors","setFullRange","createContour","nlevels","zminpositive","colzmin","colzmax","logmin","dz","level"],"sourceRoot":"webpack:///","sources":["../node_modules/jsroot/modules/base/RObjectPainter.mjs","../node_modules/jsroot/modules/gpad/RAxisPainter.mjs","../node_modules/jsroot/modules/gpad/RFramePainter.mjs","../node_modules/jsroot/modules/gpad/RPadPainter.mjs","../node_modules/jsroot/modules/webwindow.mjs","../node_modules/jsroot/modules/gpad/RCanvasPainter.mjs"],"sourcesContent":["import { isStr, isFunc } from '../core.mjs';\nimport { FontHandler } from './FontHandler.mjs';\nimport { ObjectPainter } from './ObjectPainter.mjs';\n\n\nconst kNormal = 1, /* kLessTraffic = 2, */ kOffline = 3;\n\nclass RObjectPainter extends ObjectPainter {\n\n constructor(dom, obj, opt, csstype) {\n super(dom,obj,opt);\n this.csstype = csstype;\n }\n\n /** @summary Evaluate v7 attributes using fAttr storage and configured RStyle */\n v7EvalAttr(name, dflt) {\n let obj = this.getObject();\n if (!obj) return dflt;\n if (this.cssprefix) name = this.cssprefix + name;\n\n const type_check = res => {\n if (dflt === undefined) return res;\n let typ1 = typeof dflt, typ2 = typeof res;\n if (typ1 == typ2) return res;\n if (typ1 == 'boolean') {\n if (typ2 == 'string') return (res != '') && (res != '0') && (res != 'no') && (res != 'off');\n return !!res;\n }\n if ((typ1 == 'number') && (typ2 == 'string'))\n return parseFloat(res);\n return res;\n };\n\n if (obj.fAttr && obj.fAttr.m) {\n let value = obj.fAttr.m[name];\n if (value) return type_check(value.v); // found value direct in attributes\n }\n\n if (this.rstyle && this.rstyle.fBlocks) {\n let blks = this.rstyle.fBlocks;\n for (let k = 0; k < blks.length; ++k) {\n let block = blks[k],\n match = (this.csstype && (block.selector == this.csstype)) ||\n (obj.fId && (block.selector == ('#' + obj.fId))) ||\n (obj.fCssClass && (block.selector == ('.' + obj.fCssClass)));\n\n if (match && block.map && block.map.m) {\n let value = block.map.m[name.toLowerCase()];\n if (value) return type_check(value.v);\n }\n }\n }\n\n return dflt;\n }\n\n /** @summary Set v7 attributes value */\n v7SetAttr(name, value) {\n let obj = this.getObject();\n if (this.cssprefix) name = this.cssprefix + name;\n\n if (obj && obj.fAttr && obj.fAttr.m)\n obj.fAttr.m[name] = { v: value };\n }\n\n /** @summary Decode pad length from string, return pixel value */\n v7EvalLength(name, sizepx, dflt) {\n if (sizepx <= 0) sizepx = 1;\n\n let value = this.v7EvalAttr(name);\n\n if (value === undefined)\n return Math.round(dflt*sizepx);\n\n if (typeof value == 'number')\n return Math.round(value*sizepx);\n\n if (value === null)\n return 0;\n\n let norm = 0, px = 0, val = value, operand = 0, pos = 0;\n\n while (val) {\n // skip empty spaces\n while ((pos < val.length) && ((val[pos] == ' ') || (val[pos] == '\\t')))\n ++pos;\n\n if (pos >= val.length)\n break;\n\n if ((val[pos] == '-') || (val[pos] == '+')) {\n if (operand) {\n console.log('Fail to parse RPadLength ' + value);\n return dflt;\n }\n operand = (val[pos] == '-') ? -1 : 1;\n pos++;\n continue;\n }\n\n if (pos > 0) { val = val.slice(pos); pos = 0; }\n\n while ((pos < val.length) && (((val[pos] >= '0') && (val[pos] <= '9')) || (val[pos] == '.'))) pos++;\n\n let v = parseFloat(val.slice(0, pos));\n if (!Number.isFinite(v)) {\n console.log('Fail to parse RPadLength ' + value);\n return Math.round(dflt*sizepx);\n }\n\n val = val.slice(pos);\n pos = 0;\n if (!operand) operand = 1;\n if (val && (val[0] == '%')) {\n val = val.slice(1);\n norm += operand*v*0.01;\n } else if ((val.length > 1) && (val[0] == 'p') && (val[1] == 'x')) {\n val = val.slice(2);\n px += operand*v;\n } else {\n norm += operand*v;\n }\n\n operand = 0;\n }\n\n return Math.round(norm*sizepx + px);\n }\n\n /** @summary Evaluate RColor using attribute storage and configured RStyle */\n v7EvalColor(name, dflt) {\n let val = this.v7EvalAttr(name, '');\n if (!val || !isStr(val)) return dflt;\n\n if (val == 'auto') {\n let pp = this.getPadPainter();\n if (pp?._auto_color_cnt !== undefined) {\n let pal = pp.getHistPalette(),\n cnt = pp._auto_color_cnt++,\n num = pp._num_primitives - 1;\n if (num < 2) num = 2;\n val = pal ? pal.getColorOrdinal((cnt % num) / num) : 'blue';\n if (!this._auto_colors) this._auto_colors = {};\n this._auto_colors[name] = val;\n } else if (this._auto_colors && this._auto_colors[name]) {\n val = this._auto_colors[name];\n } else {\n console.error(`Autocolor ${name} not defined yet - please check code`);\n val = '';\n }\n } else if (val[0] == '[') {\n let ordinal = parseFloat(val.slice(1, val.length-1));\n val = 'black';\n if (Number.isFinite(ordinal)) {\n let pp = this.getPadPainter(),\n pal = pp?.getHistPalette();\n if (pal) val = pal.getColorOrdinal(ordinal);\n }\n }\n return val;\n }\n\n /** @summary Evaluate RAttrText properties\n * @return {Object} FontHandler, can be used directly for the text drawing */\n v7EvalFont(name, dflts, fontScale) {\n\n if (!dflts) dflts = {}; else\n if (typeof dflts == 'number') dflts = { size: dflts };\n\n let pp = this.getPadPainter(),\n rfont = pp?._dfltRFont || { fFamily: 'Arial', fStyle: '', fWeight: '' },\n text_size = this.v7EvalAttr(name + '_size', dflts.size || 12),\n text_angle = this.v7EvalAttr(name + '_angle', 0),\n text_align = this.v7EvalAttr(name + '_align', dflts.align || 'none'),\n text_color = this.v7EvalColor(name + '_color', dflts.color || 'none'),\n font_family = this.v7EvalAttr(name + '_font_family', rfont.fFamily || 'Arial'),\n font_style = this.v7EvalAttr(name + '_font_style', rfont.fStyle || ''),\n font_weight = this.v7EvalAttr(name + '_font_weight', rfont.fWeight || '');\n\n if (isStr(text_size)) text_size = parseFloat(text_size);\n if (!Number.isFinite(text_size) || (text_size <= 0)) text_size = 12;\n if (!fontScale) fontScale = pp?.getPadHeight() || 100;\n\n let handler = new FontHandler(null, text_size, fontScale, font_family, font_style, font_weight);\n\n if (text_angle) handler.setAngle(360 - text_angle);\n if (text_align !== 'none') handler.setAlign(text_align);\n if (text_color !== 'none') handler.setColor(text_color);\n\n return handler;\n }\n\n /** @summary Create this.fillatt object based on v7 fill attributes */\n createv7AttFill(prefix) {\n if (!prefix || !isStr(prefix)) prefix = 'fill_';\n\n let color = this.v7EvalColor(prefix + 'color', ''),\n pattern = this.v7EvalAttr(prefix + 'style', 0);\n\n this.createAttFill({ pattern, color, color_as_svg: true });\n }\n\n /** @summary Create this.lineatt object based on v7 line attributes */\n createv7AttLine(prefix) {\n if (!prefix || !isStr(prefix)) prefix = 'line_';\n\n let color = this.v7EvalColor(prefix + 'color', 'black'),\n width = this.v7EvalAttr(prefix + 'width', 1),\n style = this.v7EvalAttr(prefix + 'style', 1),\n pattern = this.v7EvalAttr(prefix + 'pattern');\n\n this.createAttLine({ color, width, style, pattern });\n\n if (prefix == 'border_')\n this.lineatt.setBorder(this.v7EvalAttr(prefix + 'rx', 0), this.v7EvalAttr(prefix + 'ry', 0));\n }\n\n /** @summary Create this.markeratt object based on v7 attributes */\n createv7AttMarker(prefix) {\n if (!prefix || !isStr(prefix)) prefix = 'marker_';\n\n let color = this.v7EvalColor(prefix + 'color', 'black'),\n size = this.v7EvalAttr(prefix + 'size', 0.01),\n style = this.v7EvalAttr(prefix + 'style', 1),\n refsize = 1;\n if (size < 1) {\n let pp = this.getPadPainter();\n refsize = pp?.getPadHeight() || 100;\n }\n\n this.createAttMarker({ color, size, style, refsize });\n }\n\n /** @summary Create RChangeAttr, which can be applied on the server side\n * @private */\n v7AttrChange(req, name, value, kind) {\n if (!this.snapid)\n return false;\n\n if (!req._typename) {\n req._typename = 'ROOT::Experimental::RChangeAttrRequest';\n req.ids = [];\n req.names = [];\n req.values = [];\n req.update = true;\n }\n\n if (this.cssprefix) name = this.cssprefix + name;\n req.ids.push(this.snapid);\n req.names.push(name);\n let obj = null;\n\n if ((value === null) || (value === undefined)) {\n if (!kind) kind = 'none';\n if (kind !== 'none') console.error(`Trying to set ${kind} for none value`);\n }\n\n if (!kind)\n switch(typeof value) {\n case 'number': kind = 'double'; break;\n case 'boolean': kind = 'boolean'; break;\n }\n\n obj = { _typename: 'ROOT::Experimental::RAttrMap::' };\n switch(kind) {\n case 'none': obj._typename += 'NoValue_t'; break;\n case 'boolean': obj._typename += 'BoolValue_t'; obj.v = value ? true : false; break;\n case 'int': obj._typename += 'IntValue_t'; obj.v = parseInt(value); break;\n case 'double': obj._typename += 'DoubleValue_t'; obj.v = parseFloat(value); break;\n default: obj._typename += 'StringValue_t'; obj.v = isStr(value) ? value : JSON.stringify(value); break;\n }\n\n req.values.push(obj);\n return true;\n }\n\n /** @summary Sends accumulated attribute changes to server */\n v7SendAttrChanges(req, do_update) {\n let canp = this.getCanvPainter();\n if (canp && req?._typename) {\n if (do_update !== undefined)\n req.update = do_update ? true : false;\n canp.v7SubmitRequest('', req);\n }\n }\n\n /** @summary Submit request to server-side drawable\n * @param kind defines request kind, only single request a time can be submitted\n * @param req is object derived from DrawableRequest, including correct _typename\n * @param method is method of painter object which will be called when getting reply */\n v7SubmitRequest(kind, req, method) {\n let canp = this.getCanvPainter();\n if (!isFunc(canp?.submitDrawableRequest)) return null;\n\n // special situation when snapid not yet assigned - just keep ref until snapid is there\n // maybe keep full list - for now not clear if really needed\n if (!this.snapid) {\n this._pending_request = { kind, req, method };\n return req;\n }\n\n return canp.submitDrawableRequest(kind, req, this, method);\n }\n\n /** @summary Assign snapid to the painter\n * @desc Overwrite default method */\n assignSnapId(id) {\n this.snapid = id;\n if (this.snapid && this._pending_request) {\n let p = this._pending_request;\n this.v7SubmitRequest(p.kind, p.req, p.method);\n delete this._pending_request;\n }\n }\n\n /** @summary Return communication mode with the server\n * @desc\n * kOffline means no server there,\n * kLessTraffic advise not to send commands if offline functionality available\n * kNormal is standard functionality with RCanvas on server side */\n v7CommMode() {\n let canp = this.getCanvPainter();\n if (!canp || !canp.submitDrawableRequest || !canp._websocket)\n return kOffline;\n\n return kNormal;\n }\n\n v7NormalMode() { return this.v7CommMode() == kNormal; }\n\n v7OfflineMode() { return this.v7CommMode() == kOffline; }\n\n} // class RObjectPainter\n\nexport { RObjectPainter };\n","import { settings, isBatchMode, isFunc } from '../core.mjs';\nimport { select as d3_select, pointer as d3_pointer,\n drag as d3_drag, timeFormat as d3_timeFormat,\n scaleTime as d3_scaleTime, scaleSymlog as d3_scaleSymlog,\n scaleLog as d3_scaleLog, scaleLinear as d3_scaleLinear } from '../d3.mjs';\nimport { AxisPainterMethods, chooseTimeFormat } from './TAxisPainter.mjs';\nimport { createMenu } from '../gui/menu.mjs';\nimport { addDragHandler } from './TFramePainter.mjs';\nimport { RObjectPainter } from '../base/RObjectPainter.mjs';\n\n\n/**\n * @summary Axis painter for v7\n *\n * @private\n */\n\nclass RAxisPainter extends RObjectPainter {\n\n /** @summary constructor */\n constructor(dom, arg1, axis, cssprefix) {\n let drawable = cssprefix ? arg1.getObject() : arg1;\n super(dom, drawable, '', cssprefix ? arg1.csstype : 'axis');\n Object.assign(this, AxisPainterMethods);\n this.initAxisPainter();\n\n this.axis = axis;\n if (cssprefix) { // drawing from the frame\n this.embedded = true; // indicate that painter embedded into the histo painter\n //this.csstype = arg1.csstype; // for the moment only via frame one can set axis attributes\n this.cssprefix = cssprefix;\n this.rstyle = arg1.rstyle;\n } else {\n // this.csstype = 'axis';\n this.cssprefix = 'axis_';\n }\n }\n\n /** @summary cleanup painter */\n cleanup() {\n delete this.axis;\n delete this.axis_g;\n this.cleanupAxisPainter();\n super.cleanup();\n }\n\n /** @summary Use in GED to identify kind of axis */\n getAxisType() { return 'RAttrAxis'; }\n\n /** @summary Configure only base parameters, later same handle will be used for drawing */\n configureZAxis(name, fp) {\n this.name = name;\n this.kind = 'normal';\n this.log = false;\n let _log = this.v7EvalAttr('log', 0);\n if (_log) {\n this.log = true;\n this.logbase = 10;\n if (Math.abs(_log - Math.exp(1)) < 0.1)\n this.logbase = Math.exp(1);\n else if (_log > 1.9)\n this.logbase = Math.round(_log);\n }\n fp.logz = this.log;\n }\n\n /** @summary Configure axis painter\n * @desc Axis can be drawn inside frame group with offset to 0 point for the frame\n * Therefore one should distinguish when caclulated coordinates used for axis drawing itself or for calculation of frame coordinates\n * @private */\n configureAxis(name, min, max, smin, smax, vertical, frame_range, axis_range, opts) {\n if (!opts) opts = {};\n this.name = name;\n this.full_min = min;\n this.full_max = max;\n this.kind = 'normal';\n this.vertical = vertical;\n this.log = false;\n let _log = this.v7EvalAttr('log', 0),\n _symlog = this.v7EvalAttr('symlog', 0);\n this.reverse = opts.reverse || false;\n\n if (this.v7EvalAttr('time')) {\n this.kind = 'time';\n this.timeoffset = 0;\n let toffset = this.v7EvalAttr('timeOffset');\n if (toffset !== undefined) {\n toffset = parseFloat(toffset);\n if (Number.isFinite(toffset)) this.timeoffset = toffset*1000;\n }\n } else if (this.axis && this.axis.fLabelsIndex) {\n this.kind = 'labels';\n delete this.own_labels;\n } else if (opts.labels) {\n this.kind = 'labels';\n } else {\n this.kind = 'normal';\n }\n\n if (this.kind == 'time') {\n this.func = d3_scaleTime().domain([this.convertDate(smin), this.convertDate(smax)]);\n } else if (_symlog && (_symlog > 0)) {\n this.symlog = _symlog;\n this.func = d3_scaleSymlog().constant(_symlog).domain([smin,smax]);\n } else if (_log) {\n if (smax <= 0) smax = 1;\n if ((smin <= 0) || (smin >= smax))\n smin = smax * 0.0001;\n this.log = true;\n this.logbase = 10;\n if (Math.abs(_log - Math.exp(1)) < 0.1)\n this.logbase = Math.exp(1);\n else if (_log > 1.9)\n this.logbase = Math.round(_log);\n this.func = d3_scaleLog().base(this.logbase).domain([smin,smax]);\n } else {\n this.func = d3_scaleLinear().domain([smin,smax]);\n }\n\n this.scale_min = smin;\n this.scale_max = smax;\n\n this.gr_range = axis_range || 1000; // when not specified, one can ignore it\n\n let range = frame_range ? frame_range : [0, this.gr_range];\n\n this.axis_shift = range[1] - this.gr_range;\n\n if (this.reverse)\n this.func.range([range[1], range[0]]);\n else\n this.func.range(range);\n\n if (this.kind == 'time')\n this.gr = val => this.func(this.convertDate(val));\n else if (this.log)\n this.gr = val => (val < this.scale_min) ? (this.vertical ? this.func.range()[0]+5 : -5) : this.func(val);\n else\n this.gr = this.func;\n\n delete this.format;// remove formatting func\n\n let ndiv = this.v7EvalAttr('ndiv', 508);\n\n this.nticks = ndiv % 100;\n this.nticks2 = (ndiv % 10000 - this.nticks) / 100;\n this.nticks3 = Math.floor(ndiv/10000);\n\n if (this.nticks > 20) this.nticks = 20;\n\n let gr_range = Math.abs(this.gr_range) || 100;\n\n if (this.kind == 'time') {\n if (this.nticks > 8) this.nticks = 8;\n\n let scale_range = this.scale_max - this.scale_min,\n tf1 = this.v7EvalAttr('timeFormat', ''),\n tf2 = chooseTimeFormat(scale_range / gr_range, false);\n\n if (!tf1 || (scale_range < 0.1 * (this.full_max - this.full_min)))\n tf1 = chooseTimeFormat(scale_range / this.nticks, true);\n\n this.tfunc1 = this.tfunc2 = d3_timeFormat(tf1);\n if (tf2!==tf1)\n this.tfunc2 = d3_timeFormat(tf2);\n\n this.format = this.formatTime;\n\n } else if (this.log) {\n if (this.nticks2 > 1) {\n this.nticks *= this.nticks2; // all log ticks (major or minor) created centrally\n this.nticks2 = 1;\n }\n this.noexp = this.v7EvalAttr('noexp', false);\n if ((this.scale_max < 300) && (this.scale_min > 0.3) && (this.logbase == 10)) this.noexp = true;\n this.moreloglabels = this.v7EvalAttr('moreloglbls', false);\n\n this.format = this.formatLog;\n } else if (this.kind == 'labels') {\n this.nticks = 50; // for text output allow max 50 names\n let scale_range = this.scale_max - this.scale_min;\n if (this.nticks > scale_range)\n this.nticks = Math.round(scale_range);\n this.nticks2 = 1;\n\n this.format = this.formatLabels;\n } else {\n this.order = 0;\n this.ndig = 0;\n this.format = this.formatNormal;\n }\n }\n\n /** @summary Return scale min */\n getScaleMin() {\n return this.func ? this.func.domain()[0] : 0;\n }\n\n /** @summary Return scale max */\n getScaleMax() {\n return this.func ? this.func.domain()[1] : 0;\n }\n\n /** @summary Provide label for axis value */\n formatLabels(d) {\n let indx = Math.round(d);\n if (this.axis && this.axis.fLabelsIndex) {\n if ((indx < 0) || (indx >= this.axis.fNBinsNoOver)) return null;\n for (let i = 0; i < this.axis.fLabelsIndex.length; ++i) {\n let pair = this.axis.fLabelsIndex[i];\n if (pair.second === indx) return pair.first;\n }\n } else {\n let labels = this.getObject().fLabels;\n if (labels && (indx >= 0) && (indx < labels.length))\n return labels[indx];\n }\n return null;\n }\n\n /** @summary Creates array with minor/middle/major ticks */\n createTicks(only_major_as_array, optionNoexp, optionNoopt, optionInt) {\n\n if (optionNoopt && this.nticks && (this.kind == 'normal')) this.noticksopt = true;\n\n let handle = { nminor: 0, nmiddle: 0, nmajor: 0, func: this.func };\n\n handle.minor = handle.middle = handle.major = this.produceTicks(this.nticks);\n\n if (only_major_as_array) {\n let res = handle.major, delta = (this.scale_max - this.scale_min)*1e-5;\n if (res[0] > this.scale_min + delta) res.unshift(this.scale_min);\n if (res[res.length-1] < this.scale_max - delta) res.push(this.scale_max);\n return res;\n }\n\n if ((this.nticks2 > 1) && (!this.log || (this.logbase === 10))) {\n handle.minor = handle.middle = this.produceTicks(handle.major.length, this.nticks2);\n\n let gr_range = Math.abs(this.func.range()[1] - this.func.range()[0]);\n\n // avoid black filling by middle-size\n if ((handle.middle.length <= handle.major.length) || (handle.middle.length > gr_range/3.5)) {\n handle.minor = handle.middle = handle.major;\n } else if ((this.nticks3 > 1) && !this.log) {\n handle.minor = this.produceTicks(handle.middle.length, this.nticks3);\n if ((handle.minor.length <= handle.middle.length) || (handle.minor.length > gr_range/1.7)) handle.minor = handle.middle;\n }\n }\n\n handle.reset = function() {\n this.nminor = this.nmiddle = this.nmajor = 0;\n };\n\n handle.next = function(doround) {\n if (this.nminor >= this.minor.length) return false;\n\n this.tick = this.minor[this.nminor++];\n this.grpos = this.func(this.tick);\n if (doround) this.grpos = Math.round(this.grpos);\n this.kind = 3;\n\n if ((this.nmiddle < this.middle.length) && (Math.abs(this.grpos - this.func(this.middle[this.nmiddle])) < 1)) {\n this.nmiddle++;\n this.kind = 2;\n }\n\n if ((this.nmajor < this.major.length) && (Math.abs(this.grpos - this.func(this.major[this.nmajor])) < 1) ) {\n this.nmajor++;\n this.kind = 1;\n }\n return true;\n };\n\n handle.last_major = function() {\n return (this.kind !== 1) ? false : this.nmajor == this.major.length;\n };\n\n handle.next_major_grpos = function() {\n if (this.nmajor >= this.major.length) return null;\n return this.func(this.major[this.nmajor]);\n };\n\n this.order = 0;\n this.ndig = 0;\n\n // at the moment when drawing labels, we can try to find most optimal text representation for them\n\n if ((this.kind == 'normal') && !this.log && (handle.major.length > 0)) {\n\n let maxorder = 0, minorder = 0, exclorder3 = false;\n\n if (!optionNoexp) {\n let maxtick = Math.max(Math.abs(handle.major[0]),Math.abs(handle.major[handle.major.length-1])),\n mintick = Math.min(Math.abs(handle.major[0]),Math.abs(handle.major[handle.major.length-1])),\n ord1 = (maxtick > 0) ? Math.round(Math.log10(maxtick)/3)*3 : 0,\n ord2 = (mintick > 0) ? Math.round(Math.log10(mintick)/3)*3 : 0;\n\n exclorder3 = (maxtick < 2e4); // do not show 10^3 for values below 20000\n\n if (maxtick || mintick) {\n maxorder = Math.max(ord1,ord2) + 3;\n minorder = Math.min(ord1,ord2) - 3;\n }\n }\n\n // now try to find best combination of order and ndig for labels\n\n let bestorder = 0, bestndig = this.ndig, bestlen = 1e10;\n\n for (let order = minorder; order <= maxorder; order+=3) {\n if (exclorder3 && (order===3)) continue;\n this.order = order;\n this.ndig = 0;\n let lbls = [], indx = 0, totallen = 0;\n while (indx 11) break; // not too many digits, anyway it will be exponential\n lbls = []; indx = 0; totallen = 0;\n }\n\n // for order == 0 we should virually remove '0.' and extra label on top\n if (!order && (this.ndig < 4))\n totallen -= (handle.major.length * 2 + 3);\n\n if (totallen < bestlen) {\n bestlen = totallen;\n bestorder = this.order;\n bestndig = this.ndig;\n }\n }\n\n this.order = bestorder;\n this.ndig = bestndig;\n\n if (optionInt) {\n if (this.order) console.warn(`Axis painter - integer labels are configured, but axis order ${this.order} is preferable`);\n if (this.ndig) console.warn(`Axis painter - integer labels are configured, but ${this.ndig} decimal digits are required`);\n this.ndig = 0;\n this.order = 0;\n }\n }\n\n return handle;\n }\n\n /** @summary Is labels should be centered */\n isCenteredLabels() {\n if (this.kind === 'labels') return true;\n if (this.kind === 'log') return false;\n return this.v7EvalAttr('labels_center', false);\n }\n\n /** @summary Used to move axis labels instead of zooming\n * @private */\n processLabelsMove(arg, pos) {\n if (this.optionUnlab || !this.axis_g) return false;\n\n let label_g = this.axis_g.select('.axis_labels');\n if (!label_g || (label_g.size() != 1)) return false;\n\n if (arg == 'start') {\n // no moving without labels\n let box = label_g.node().getBBox();\n\n label_g.append('rect')\n .classed('zoom', true)\n .attr('x', box.x)\n .attr('y', box.y)\n .attr('width', box.width)\n .attr('height', box.height)\n .style('cursor', 'move');\n if (this.vertical) {\n this.drag_pos0 = pos[0];\n } else {\n this.drag_pos0 = pos[1];\n }\n\n return true;\n }\n\n let offset = label_g.property('fix_offset');\n\n if (this.vertical) {\n offset += Math.round(pos[0] - this.drag_pos0);\n label_g.attr('transform', `translate(${offset})`);\n } else {\n offset += Math.round(pos[1] - this.drag_pos0);\n label_g.attr('transform', `translate(0,${offset})`);\n }\n if (!offset) label_g.attr('transform', null);\n\n if (arg == 'stop') {\n label_g.select('rect.zoom').remove();\n delete this.drag_pos0;\n if (offset != label_g.property('fix_offset')) {\n label_g.property('fix_offset', offset);\n let side = label_g.property('side') || 1;\n this.labelsOffset = offset / (this.vertical ? -side : side);\n this.changeAxisAttr(1, 'labels_offset', this.labelsOffset / this.scalingSize);\n }\n }\n\n return true;\n }\n\n /** @summary Add interactive elements to draw axes title */\n addTitleDrag(title_g, side) {\n if (!settings.MoveResize || isBatchMode()) return;\n\n let drag_rect = null,\n acc_x, acc_y, new_x, new_y, alt_pos, curr_indx,\n drag_move = d3_drag().subject(Object);\n\n drag_move\n .on('start', evnt => {\n\n evnt.sourceEvent.preventDefault();\n evnt.sourceEvent.stopPropagation();\n\n let box = title_g.node().getBBox(), // check that elements visible, request precise value\n title_length = this.vertical ? box.height : box.width;\n\n new_x = acc_x = title_g.property('shift_x');\n new_y = acc_y = title_g.property('shift_y');\n\n if (this.titlePos == 'center')\n curr_indx = 1;\n else\n curr_indx = (this.titlePos == 'left') ? 0 : 2;\n\n // let d = ((this.gr_range > 0) && this.vertical) ? title_length : 0;\n alt_pos = [0, this.gr_range/2, this.gr_range]; // possible positions\n let off = this.vertical ? -title_length : title_length,\n swap = this.isReverseAxis() ? 2 : 0;\n if (this.title_align == 'middle') {\n alt_pos[swap] += off/2;\n alt_pos[2-swap] -= off/2;\n } else if ((this.title_align == 'begin') ^ this.isTitleRotated()) {\n alt_pos[1] -= off/2;\n alt_pos[2-swap] -= off;\n } else { // end\n alt_pos[swap] += off;\n alt_pos[1] += off/2;\n }\n\n alt_pos[curr_indx] = this.vertical ? acc_y : acc_x;\n\n drag_rect = title_g.append('rect')\n .classed('zoom', true)\n .attr('x', box.x)\n .attr('y', box.y)\n .attr('width', box.width)\n .attr('height', box.height)\n .style('cursor', 'move');\n// .style('pointer-events','none'); // let forward double click to underlying elements\n }).on('drag', evnt => {\n if (!drag_rect) return;\n\n evnt.sourceEvent.preventDefault();\n evnt.sourceEvent.stopPropagation();\n\n acc_x += evnt.dx;\n acc_y += evnt.dy;\n\n let set_x, set_y,\n p = this.vertical ? acc_y : acc_x, besti = 0;\n\n for (let i=1; i<3; ++i)\n if (Math.abs(p - alt_pos[i]) < Math.abs(p - alt_pos[besti])) besti = i;\n\n if (this.vertical) {\n set_x = acc_x;\n set_y = alt_pos[besti];\n } else {\n set_x = alt_pos[besti];\n set_y = acc_y;\n }\n\n new_x = set_x; new_y = set_y; curr_indx = besti;\n title_g.attr('transform', 'translate(' + Math.round(new_x) + ',' + Math.round(new_y) + ')');\n\n }).on('end', evnt => {\n if (!drag_rect) return;\n\n evnt.sourceEvent.preventDefault();\n evnt.sourceEvent.stopPropagation();\n\n let basepos = title_g.property('basepos') || 0;\n\n title_g.property('shift_x', new_x)\n .property('shift_y', new_y);\n\n this.titleOffset = (this.vertical ? basepos - new_x : new_y - basepos) * side;\n\n if (curr_indx == 1) {\n this.titlePos = 'center';\n } else if (curr_indx == 0) {\n this.titlePos = 'left';\n } else {\n this.titlePos = 'right';\n }\n\n this.changeAxisAttr(0, 'title_position', this.titlePos, 'title_offset', this.titleOffset / this.scalingSize);\n\n drag_rect.remove();\n drag_rect = null;\n });\n\n title_g.style('cursor', 'move').call(drag_move);\n }\n\n /** @summary checks if value inside graphical range, taking into account delta */\n isInsideGrRange(pos, delta1, delta2) {\n if (!delta1) delta1 = 0;\n if (delta2 === undefined) delta2 = delta1;\n if (this.gr_range < 0)\n return (pos >= this.gr_range - delta2) && (pos <= delta1);\n return (pos >= -delta1) && (pos <= this.gr_range + delta2);\n }\n\n /** @summary returns graphical range */\n getGrRange(delta) {\n if (!delta) delta = 0;\n if (this.gr_range < 0)\n return this.gr_range - delta;\n return this.gr_range + delta;\n }\n\n /** @summary If axis direction is negative coordinates direction */\n isReverseAxis() {\n return !this.vertical !== (this.getGrRange() > 0);\n }\n\n /** @summary Draw axis ticks\n * @private */\n drawMainLine(axis_g) {\n let ending = '';\n\n if (this.endingSize && this.endingStyle) {\n let sz = (this.gr_range > 0) ? -this.endingSize : this.endingSize,\n sz7 = Math.round(sz*0.7);\n sz = Math.round(sz);\n if (this.vertical)\n ending = `l${sz7},${sz}M0,${this.gr_range}l${-sz7},${sz}`;\n else\n ending = `l${sz},${sz7}M${this.gr_range},0l${sz},${-sz7}`;\n }\n\n axis_g.append('svg:path')\n .attr('d','M0,0' + (this.vertical ? 'v' : 'h') + this.gr_range + ending)\n .call(this.lineatt.func)\n .style('fill', ending ? 'none' : null);\n }\n\n /** @summary Draw axis ticks\n * @return {Object} with gaps on left and right side\n * @private */\n drawTicks(axis_g, side, main_draw) {\n if (main_draw) this.ticks = [];\n\n this.handle.reset();\n\n let res = '', ticks_plusminus = 0;\n if (this.ticksSide == 'both') {\n side = 1;\n ticks_plusminus = 1;\n }\n\n while (this.handle.next(true)) {\n\n let h1 = Math.round(this.ticksSize/4), h2 = 0;\n\n if (this.handle.kind < 3)\n h1 = Math.round(this.ticksSize/2);\n\n let grpos = this.handle.grpos - this.axis_shift;\n\n if ((this.startingSize || this.endingSize) && !this.isInsideGrRange(grpos, -Math.abs(this.startingSize), -Math.abs(this.endingSize))) continue;\n\n if (this.handle.kind == 1) {\n // if not showing labels, not show large tick\n if ((this.kind == 'labels') || (this.format(this.handle.tick,true) !== null)) h1 = this.ticksSize;\n\n if (main_draw) this.ticks.push(grpos); // keep graphical positions of major ticks\n }\n\n if (ticks_plusminus > 0) {\n h2 = -h1;\n } else if (side < 0) {\n h2 = -h1; h1 = 0;\n } else {\n h2 = 0;\n }\n\n res += this.vertical ? `M${h1},${grpos}H${h2}` : `M${grpos},${-h1}V${-h2}`;\n }\n\n if (res)\n axis_g.append('svg:path')\n .attr('d', res)\n .style('stroke', this.ticksColor || this.lineatt.color)\n .style('stroke-width', !this.ticksWidth || (this.ticksWidth == 1) ? null : this.ticksWidth);\n\n let gap0 = Math.round(0.25*this.ticksSize), gap = Math.round(1.25*this.ticksSize);\n return { '-1': (side > 0) || ticks_plusminus ? gap : gap0,\n '1': (side < 0) || ticks_plusminus ? gap : gap0 };\n }\n\n /** @summary Performs labels drawing\n * @return {Promise} with gaps in both direction */\n async drawLabels(axis_g, side, gaps) {\n let center_lbls = this.isCenteredLabels(),\n rotate_lbls = this.labelsFont.angle != 0,\n textscale = 1, maxtextlen = 0, lbls_tilt = false,\n label_g = axis_g.append('svg:g').attr('class','axis_labels').property('side', side),\n lbl_pos = this.handle.lbl_pos || this.handle.major,\n max_lbl_width = 0, max_lbl_height = 0;\n\n // function called when text is drawn to analyze width, required to correctly scale all labels\n function process_drawtext_ready(painter) {\n\n max_lbl_width = Math.max(max_lbl_width, this.result_width);\n max_lbl_height = Math.max(max_lbl_height, this.result_height);\n\n let textwidth = this.result_width;\n\n if (textwidth && ((!painter.vertical && !rotate_lbls) || (painter.vertical && rotate_lbls)) && !painter.log) {\n let maxwidth = this.gap_before*0.45 + this.gap_after*0.45;\n if (!this.gap_before) maxwidth = 0.9*this.gap_after; else\n if (!this.gap_after) maxwidth = 0.9*this.gap_before;\n textscale = Math.min(textscale, maxwidth / textwidth);\n }\n\n if ((textscale > 0.0001) && (textscale < 0.8) && !painter.vertical && !rotate_lbls && (maxtextlen > 5) && (side > 0))\n lbls_tilt = true;\n\n let scale = textscale * (lbls_tilt ? 3 : 1);\n if ((scale > 0.0001) && (scale < 1))\n painter.scaleTextDrawing(1/scale, label_g);\n }\n\n let lastpos = 0,\n fix_offset = Math.round((this.vertical ? -side : side) * this.labelsOffset),\n fix_coord = Math.round((this.vertical ? -side : side) * gaps[side]);\n\n if (fix_offset)\n label_g.attr('transform', this.vertical ? `translate(${fix_offset})` : `translate(0,${fix_offset})`);\n\n label_g.property('fix_offset', fix_offset);\n\n this.startTextDrawing(this.labelsFont, 'font', label_g);\n\n for (let nmajor = 0; nmajor < lbl_pos.length; ++nmajor) {\n\n let lbl = this.format(lbl_pos[nmajor], true);\n if (lbl === null) continue;\n\n let pos = Math.round(this.func(lbl_pos[nmajor])),\n arg = { text: lbl, latex: 1, draw_g: label_g };\n\n arg.gap_before = (nmajor > 0) ? Math.abs(Math.round(pos - this.func(lbl_pos[nmajor-1]))) : 0,\n arg.gap_after = (nmajor < lbl_pos.length-1) ? Math.abs(Math.round(this.func(lbl_pos[nmajor+1])-pos)) : 0;\n\n if (center_lbls) {\n let gap = arg.gap_after || arg.gap_before;\n pos = Math.round(pos - (this.vertical ? 0.5*gap : -0.5*gap));\n if (!this.isInsideGrRange(pos, 5)) continue;\n }\n\n maxtextlen = Math.max(maxtextlen, lbl.length);\n\n pos -= this.axis_shift;\n\n if ((this.startingSize || this.endingSize) && !this.isInsideGrRange(pos, -Math.abs(this.startingSize), -Math.abs(this.endingSize))) continue;\n\n if (this.vertical) {\n arg.x = fix_coord;\n arg.y = pos;\n arg.align = rotate_lbls ? ((side < 0) ? 23 : 20) : ((side < 0) ? 12 : 32);\n } else {\n arg.x = pos;\n arg.y = fix_coord;\n arg.align = rotate_lbls ? ((side < 0) ? 12 : 32) : ((side < 0) ? 20 : 23);\n }\n\n arg.post_process = process_drawtext_ready;\n\n this.drawText(arg);\n\n if (lastpos && (pos!=lastpos) && ((this.vertical && !rotate_lbls) || (!this.vertical && rotate_lbls))) {\n let axis_step = Math.abs(pos-lastpos);\n textscale = Math.min(textscale, 0.9*axis_step/this.labelsFont.size);\n }\n\n lastpos = pos;\n }\n\n if (this.order)\n this.drawText({ x: this.vertical ? side*5 : this.getGrRange(5),\n y: this.has_obstacle ? fix_coord : (this.vertical ? this.getGrRange(3) : -3*side),\n align: this.vertical ? ((side < 0) ? 30 : 10) : ((this.has_obstacle ^ (side < 0)) ? 13 : 10),\n latex: 1,\n text: '#times' + this.formatExp(10, this.order),\n draw_g: label_g\n });\n\n return this.finishTextDrawing(label_g).then(() => {\n\n if (lbls_tilt)\n label_g.selectAll('text').each(function () {\n let txt = d3_select(this), tr = txt.attr('transform');\n txt.attr('transform', tr + ' rotate(25)').style('text-anchor', 'start');\n });\n\n if (this.vertical) {\n gaps[side] += Math.round(rotate_lbls ? 1.2*max_lbl_height : max_lbl_width + 0.4*this.labelsFont.size) - side*fix_offset;\n } else {\n let tilt_height = lbls_tilt ? max_lbl_width * Math.sin(25/180*Math.PI) + max_lbl_height * (Math.cos(25/180*Math.PI) + 0.2) : 0;\n\n gaps[side] += Math.round(Math.max(rotate_lbls ? max_lbl_width + 0.4*this.labelsFont.size : 1.2*max_lbl_height, 1.2*this.labelsFont.size, tilt_height)) + fix_offset;\n }\n\n return gaps;\n });\n }\n\n /** @summary Add zomming rect to axis drawing */\n addZoomingRect(axis_g, side, lgaps) {\n if (settings.Zooming && !this.disable_zooming && !isBatchMode()) {\n let sz = Math.max(lgaps[side], 10),\n d = this.vertical ? `v${this.gr_range}h${-side*sz}v${-this.gr_range}`\n : `h${this.gr_range}v${side*sz}h${-this.gr_range}`;\n axis_g.append('svg:path')\n .attr('d',`M0,0${d}z`)\n .attr('class', 'axis_zoom')\n .style('opacity', '0')\n .style('cursor', 'crosshair');\n }\n }\n\n /** @summary Returns true if axis title is rotated */\n isTitleRotated() {\n return this.titleFont && (this.titleFont.angle != (this.vertical ? 270 : 0));\n }\n\n /** @summary Draw axis title */\n async drawTitle(axis_g, side, lgaps) {\n if (!this.fTitle)\n return this;\n\n let title_g = axis_g.append('svg:g').attr('class', 'axis_title'),\n title_shift_x = 0, title_shift_y = 0, title_basepos = 0;\n\n let rotated = this.isTitleRotated();\n\n this.startTextDrawing(this.titleFont, 'font', title_g);\n\n this.title_align = this.titleCenter ? 'middle' : (this.titleOpposite ^ (this.isReverseAxis() || rotated) ? 'begin' : 'end');\n\n if (this.vertical) {\n title_basepos = Math.round(-side*(lgaps[side]));\n title_shift_x = title_basepos + Math.round(-side*this.titleOffset);\n title_shift_y = Math.round(this.titleCenter ? this.gr_range/2 : (this.titleOpposite ? 0 : this.gr_range));\n this.drawText({ align: [this.title_align, ((side < 0) ^ rotated ? 'top' : 'bottom')],\n text: this.fTitle, draw_g: title_g });\n } else {\n title_shift_x = Math.round(this.titleCenter ? this.gr_range/2 : (this.titleOpposite ? 0 : this.gr_range));\n title_basepos = Math.round(side*lgaps[side]);\n title_shift_y = title_basepos + Math.round(side*this.titleOffset);\n this.drawText({ align: [this.title_align, ((side > 0) ^ rotated ? 'top' : 'bottom')],\n text: this.fTitle, draw_g: title_g });\n }\n\n title_g.attr('transform', `translate(${title_shift_x},${title_shift_y})`)\n .property('basepos', title_basepos)\n .property('shift_x', title_shift_x)\n .property('shift_y', title_shift_y);\n\n this.addTitleDrag(title_g, side);\n\n return this.finishTextDrawing(title_g);\n }\n\n /** @summary Extract major draw attributes, which are also used in interactive operations\n * @private */\n extractDrawAttributes(scalingSize) {\n let pp = this.getPadPainter(),\n rect = pp?.getPadRect() || { width: 10, height: 10 };\n\n this.scalingSize = scalingSize || (this.vertical ? rect.width : rect.height);\n\n this.createv7AttLine('line_');\n\n this.optionUnlab = this.v7EvalAttr('labels_hide', false);\n\n this.endingStyle = this.v7EvalAttr('ending_style', '');\n this.endingSize = Math.round(this.v7EvalLength('ending_size', this.scalingSize, this.endingStyle ? 0.02 : 0));\n this.startingSize = Math.round(this.v7EvalLength('starting_size', this.scalingSize, 0));\n this.ticksSize = this.v7EvalLength('ticks_size', this.scalingSize, 0.02);\n this.ticksSide = this.v7EvalAttr('ticks_side', 'normal');\n this.ticksColor = this.v7EvalColor('ticks_color', '');\n this.ticksWidth = this.v7EvalAttr('ticks_width', 1);\n if (scalingSize && (this.ticksSize < 0))\n this.ticksSize = -this.ticksSize;\n\n this.fTitle = this.v7EvalAttr('title_value', '');\n\n if (this.fTitle) {\n this.titleFont = this.v7EvalFont('title', { size: 0.03 }, scalingSize || pp?.getPadHeight() || 10);\n this.titleFont.roundAngle(180, this.vertical ? 270 : 0);\n\n this.titleOffset = this.v7EvalLength('title_offset', this.scalingSize, 0);\n this.titlePos = this.v7EvalAttr('title_position', 'right');\n this.titleCenter = (this.titlePos == 'center');\n this.titleOpposite = (this.titlePos == 'left');\n } else {\n delete this.titleFont;\n delete this.titleOffset;\n delete this.titlePos;\n }\n\n // TODO: remove old scaling factors for labels and ticks\n this.labelsFont = this.v7EvalFont('labels', { size: scalingSize ? 0.05 : 0.03 });\n this.labelsFont.roundAngle(180);\n if (this.labelsFont.angle) this.labelsFont.angle = 270;\n this.labelsOffset = this.v7EvalLength('labels_offset', this.scalingSize, 0);\n\n if (scalingSize) this.ticksSize = this.labelsFont.size*0.5; // old lego scaling factor\n\n if (this.maxTickSize && (this.ticksSize > this.maxTickSize))\n this.ticksSize = this.maxTickSize;\n }\n\n /** @summary Performs axis drawing\n * @return {Promise} which resolved when drawing is completed */\n async drawAxis(layer, transform, side) {\n let axis_g = layer;\n\n if (side === undefined) side = 1;\n\n if (!this.standalone) {\n axis_g = layer.select('.' + this.name + '_container');\n if (axis_g.empty())\n axis_g = layer.append('svg:g').attr('class', this.name + '_container');\n else\n axis_g.selectAll('*').remove();\n }\n\n axis_g.attr('transform', transform || null);\n\n this.extractDrawAttributes();\n this.axis_g = axis_g;\n this.side = side;\n\n if (this.ticksSide == 'invert') side = -side;\n\n if (this.standalone)\n this.drawMainLine(axis_g);\n\n let optionNoopt = false, // no ticks position optimization\n optionInt = false, // integer labels\n optionNoexp = false; // do not create exp\n\n this.handle = this.createTicks(false, optionNoexp, optionNoopt, optionInt);\n\n // first draw ticks\n let tgaps = this.drawTicks(axis_g, side, true);\n\n // draw labels\n let labelsPromise = this.optionUnlab ? Promise.resolve(tgaps) : this.drawLabels(axis_g, side, tgaps);\n\n return labelsPromise.then(lgaps => {\n // when drawing axis on frame, zoom rect should be always outside\n this.addZoomingRect(axis_g, this.standalone ? side : this.side, lgaps);\n\n return this.drawTitle(axis_g, side, lgaps);\n });\n }\n\n /** @summary Assign handler, which is called when axis redraw by interactive changes\n * @desc Used by palette painter to reassign iteractive handlers\n * @private */\n setAfterDrawHandler(handler) {\n this._afterDrawAgain = handler;\n }\n\n /** @summary Draw axis with the same settings, used by interactive changes */\n drawAxisAgain() {\n if (!this.axis_g || !this.side) return;\n\n this.axis_g.selectAll('*').remove();\n\n this.extractDrawAttributes();\n\n let side = this.side;\n if (this.ticksSide == 'invert') side = -side;\n\n if (this.standalone)\n this.drawMainLine(this.axis_g);\n\n // first draw ticks\n let tgaps = this.drawTicks(this.axis_g, side, false);\n\n let labelsPromise = this.optionUnlab ? Promise.resolve(tgaps) : this.drawLabels(this.axis_g, side, tgaps);\n\n return labelsPromise.then(lgaps => {\n // when drawing axis on frame, zoom rect should be always outside\n this.addZoomingRect(this.axis_g, this.standalone ? side : this.side, lgaps);\n\n return this.drawTitle(this.axis_g, side, lgaps);\n }).then(() => {\n if (isFunc(this._afterDrawAgain))\n this._afterDrawAgain();\n });\n }\n\n /** @summary Draw axis again on opposite frame size */\n drawAxisOtherPlace(layer, transform, side, only_ticks) {\n let axis_g = layer.select('.' + this.name + '_container2');\n if (axis_g.empty())\n axis_g = layer.append('svg:g').attr('class',this.name + '_container2');\n else\n axis_g.selectAll('*').remove();\n\n axis_g.attr('transform', transform || null);\n\n if (this.ticksSide == 'invert') side = -side;\n\n // draw ticks again\n let tgaps = this.drawTicks(axis_g, side, false);\n\n // draw labels again\n let promise = this.optionUnlab || only_ticks ? Promise.resolve(tgaps) : this.drawLabels(axis_g, side, tgaps);\n\n return promise.then(lgaps => {\n this.addZoomingRect(axis_g, side, lgaps);\n return true;\n });\n }\n\n /** @summary Change zooming in standalone mode */\n zoomStandalone(min,max) {\n this.changeAxisAttr(1, 'zoomMin', min, 'zoomMax', max);\n }\n\n /** @summary Redraw axis, used in standalone mode for RAxisDrawable */\n redraw() {\n\n let drawable = this.getObject(),\n pp = this.getPadPainter(),\n pos = pp.getCoordinate(drawable.fPos),\n len = pp.getPadLength(drawable.fVertical, drawable.fLength),\n reverse = this.v7EvalAttr('reverse', false),\n labels_len = drawable.fLabels.length,\n min = (labels_len > 0) ? 0 : this.v7EvalAttr('min', 0),\n max = (labels_len > 0) ? labels_len : this.v7EvalAttr('max', 100);\n\n // in vertical direction axis drawn in negative direction\n if (drawable.fVertical) len -= pp.getPadHeight();\n\n let smin = this.v7EvalAttr('zoomMin'),\n smax = this.v7EvalAttr('zoomMax');\n if (smin === smax) {\n smin = min; smax = max;\n }\n\n this.configureAxis('axis', min, max, smin, smax, drawable.fVertical, undefined, len, { reverse, labels: labels_len > 0 });\n\n this.createG();\n\n this.standalone = true; // no need to clean axis container\n\n let promise = this.drawAxis(this.draw_g, `translate(${pos.x},${pos.y})`);\n\n if (isBatchMode()) return promise;\n\n return promise.then(() => {\n if (settings.ContextMenu)\n this.draw_g.on('contextmenu', evnt => {\n evnt.stopPropagation(); // disable main context menu\n evnt.preventDefault(); // disable browser context menu\n createMenu(evnt, this).then(menu => {\n menu.add('header:RAxisDrawable');\n menu.add('Unzoom', () => this.zoomStandalone());\n this.fillAxisContextMenu(menu, '');\n menu.show();\n });\n });\n\n addDragHandler(this, { x: pos.x, y: pos.y, width: this.vertical ? 10 : len, height: this.vertical ? len : 10,\n only_move: true, redraw: d => this.positionChanged(d) });\n\n this.draw_g.on('dblclick', () => this.zoomStandalone());\n\n if (settings.ZoomWheel)\n this.draw_g.on('wheel', evnt => {\n evnt.stopPropagation();\n evnt.preventDefault();\n\n let pos = d3_pointer(evnt, this.draw_g.node()),\n coord = this.vertical ? (1 - pos[1] / len) : pos[0] / len,\n item = this.analyzeWheelEvent(evnt, coord);\n\n if (item.changed) this.zoomStandalone(item.min, item.max);\n });\n });\n }\n\n /** @summary Process interactive moving of the axis drawing */\n positionChanged(drag) {\n let drawable = this.getObject(),\n rect = this.getPadPainter().getPadRect(),\n xn = drag.x / rect.width,\n yn = 1 - drag.y / rect.height;\n\n drawable.fPos.fHoriz.fArr = [ xn ];\n drawable.fPos.fVert.fArr = [ yn ];\n\n this.submitCanvExec(`SetPos({${xn.toFixed(4)},${yn.toFixed(4)}})`);\n }\n\n /** @summary Change axis attribute, submit changes to server and redraw axis when specified\n * @desc Arguments as redraw_mode, name1, value1, name2, value2, ... */\n changeAxisAttr(redraw_mode) {\n let changes = {}, indx = 1;\n while (indx < arguments.length - 1) {\n this.v7AttrChange(changes, arguments[indx], arguments[indx+1]);\n this.v7SetAttr(arguments[indx], arguments[indx+1]);\n indx += 2;\n }\n this.v7SendAttrChanges(changes, false); // do not invoke canvas update on the server\n if (redraw_mode === 1) {\n if (this.standalone)\n this.redraw();\n else\n this.drawAxisAgain();\n } else if (redraw_mode)\n this.redrawPad();\n }\n\n /** @summary Change axis log scale kind */\n changeAxisLog(arg) {\n if ((this.kind == 'labels') || (this.kind == 'time')) return;\n if (arg === 'toggle') arg = this.log ? 0 : 10;\n\n arg = parseFloat(arg);\n if (Number.isFinite(arg)) this.changeAxisAttr(2, 'log', arg, 'symlog', 0);\n }\n\n /** @summary Provide context menu for axis */\n fillAxisContextMenu(menu, kind) {\n\n if (kind) menu.add('Unzoom', () => this.getFramePainter().unzoom(kind));\n\n menu.add('sub:Log scale', () => this.changeAxisLog('toggle'));\n menu.addchk(!this.log && !this.symlog, 'linear', 0, arg => this.changeAxisLog(arg));\n menu.addchk(this.log && !this.symlog && (this.logbase == 10), 'log10', () => this.changeAxisLog(10));\n menu.addchk(this.log && !this.symlog && (this.logbase == 2), 'log2', () => this.changeAxisLog(2));\n menu.addchk(this.log && !this.symlog && Math.abs(this.logbase - Math.exp(1)) < 0.1, 'ln', () => this.changeAxisLog(Math.exp(1)));\n menu.addchk(!this.log && this.symlog, 'symlog', 0, () =>\n menu.input('set symlog constant', this.symlog || 10, 'float').then(v => this.changeAxisAttr(2,'symlog', v)));\n menu.add('endsub:');\n\n menu.add('Divisions', () => menu.input('Set axis devisions', this.v7EvalAttr('ndiv', 508), 'int').then(val => this.changeAxisAttr(2, 'ndiv', val)));\n\n menu.add('sub:Ticks');\n menu.addRColorMenu('color', this.ticksColor, col => this.changeAxisAttr(1, 'ticks_color', col));\n menu.addSizeMenu('size', 0, 0.05, 0.01, this.ticksSize/this.scalingSize, sz => this.changeAxisAttr(1, 'ticks_size', sz));\n menu.addSelectMenu('side', ['normal', 'invert', 'both'], this.ticksSide, side => this.changeAxisAttr(1, 'ticks_side', side));\n menu.add('endsub:');\n\n if (!this.optionUnlab && this.labelsFont) {\n menu.add('sub:Labels');\n menu.addSizeMenu('offset', -0.05, 0.05, 0.01, this.labelsOffset/this.scalingSize,\n offset => this.changeAxisAttr(1, 'labels_offset', offset));\n menu.addRAttrTextItems(this.labelsFont, { noangle: 1, noalign: 1 },\n change => this.changeAxisAttr(1, 'labels_' + change.name, change.value));\n menu.addchk(this.labelsFont.angle, 'rotate', res => this.changeAxisAttr(1, 'labels_angle', res ? 180 : 0));\n menu.add('endsub:');\n }\n\n menu.add('sub:Title', () => menu.input('Enter axis title', this.fTitle).then(t => this.changeAxisAttr(1, 'title_value', t)));\n\n if (this.fTitle) {\n menu.addSizeMenu('offset', -0.05, 0.05, 0.01, this.titleOffset/this.scalingSize,\n offset => this.changeAxisAttr(1, 'title_offset', offset));\n\n menu.addSelectMenu('position', ['left', 'center', 'right'], this.titlePos,\n pos => this.changeAxisAttr(1, 'title_position', pos));\n\n menu.addchk(this.isTitleRotated(), 'rotate', flag => this.changeAxisAttr(1, 'title_angle', flag ? 180 : 0));\n\n menu.addRAttrTextItems(this.titleFont, { noangle: 1, noalign: 1 }, change => this.changeAxisAttr(1, 'title_' + change.name, change.value));\n }\n\n menu.add('endsub:');\n return true;\n }\n\n} // class RAxisPainter\n\nexport { RAxisPainter };\n","import { gStyle, settings, create, isBatchMode, isFunc, isStr, clTAxis } from '../core.mjs';\nimport { pointer as d3_pointer } from '../d3.mjs';\nimport { getSvgLineStyle } from '../base/TAttLineHandler.mjs';\nimport { TAxisPainter } from './TAxisPainter.mjs';\nimport { RAxisPainter } from './RAxisPainter.mjs';\nimport { FrameInteractive } from './TFramePainter.mjs';\nimport { RObjectPainter } from '../base/RObjectPainter.mjs';\n\n\n/**\n * @summary Painter class for RFrame, main handler for interactivity\n *\n * @private\n */\n\nclass RFramePainter extends RObjectPainter {\n\n /** @summary constructor\n * @param {object|string} dom - DOM element for drawing or element id\n * @param {object} tframe - RFrame object */\n constructor(dom, tframe) {\n super(dom, tframe, '', 'frame');\n this.mode3d = false;\n this.xmin = this.xmax = 0; // no scale specified, wait for objects drawing\n this.ymin = this.ymax = 0; // no scale specified, wait for objects drawing\n this.axes_drawn = false;\n this.keys_handler = null;\n this.projection = 0; // different projections\n this.v7_frame = true; // indicator of v7, used in interactive part\n }\n\n /** @summary Returns frame painter - object itself */\n getFramePainter() { return this; }\n\n /** @summary Returns true if it is ROOT6 frame\n * @private */\n is_root6() { return false; }\n\n /** @summary Set active flag for frame - can block some events\n * @private */\n setFrameActive(on) {\n this.enabledKeys = on && settings.HandleKeys ? true : false;\n // used only in 3D mode\n if (this.control)\n this.control.enableKeys = this.enabledKeys;\n }\n\n setLastEventPos(pnt) {\n // set position of last context menu event, can be\n this.fLastEventPnt = pnt;\n }\n\n getLastEventPos() {\n // return position of last event\n return this.fLastEventPnt;\n }\n\n /** @summary Update graphical attributes */\n updateAttributes(force) {\n if ((this.fX1NDC === undefined) || (force && !this.modified_NDC)) {\n\n let rect = this.getPadPainter().getPadRect();\n this.fX1NDC = this.v7EvalLength('margins_left', rect.width, settings.FrameNDC.fX1NDC) / rect.width;\n this.fY1NDC = this.v7EvalLength('margins_bottom', rect.height, settings.FrameNDC.fY1NDC) / rect.height;\n this.fX2NDC = 1 - this.v7EvalLength('margins_right', rect.width, 1-settings.FrameNDC.fX2NDC) / rect.width;\n this.fY2NDC = 1 - this.v7EvalLength('margins_top', rect.height, 1-settings.FrameNDC.fY2NDC) / rect.height;\n }\n\n if (!this.fillatt)\n this.createv7AttFill();\n\n this.createv7AttLine('border_');\n }\n\n /** @summary Returns coordinates transformation func */\n getProjectionFunc() {\n switch (this.projection) {\n // Aitoff2xy\n case 1: return (l, b) => {\n const DegToRad = Math.PI/180,\n alpha2 = (l/2)*DegToRad,\n delta = b*DegToRad,\n r2 = Math.sqrt(2),\n f = 2*r2/Math.PI,\n cdec = Math.cos(delta),\n denom = Math.sqrt(1. + cdec*Math.cos(alpha2));\n return {\n x: cdec*Math.sin(alpha2)*2.*r2/denom/f/DegToRad,\n y: Math.sin(delta)*r2/denom/f/DegToRad\n };\n };\n // mercator\n case 2: return (l, b) => { return { x: l, y: Math.log(Math.tan((Math.PI/2 + b/180*Math.PI)/2)) }; };\n // sinusoidal\n case 3: return (l, b) => { return { x: l*Math.cos(b/180*Math.PI), y: b } };\n // parabolic\n case 4: return (l, b) => { return { x: l*(2.*Math.cos(2*b/180*Math.PI/3) - 1), y: 180*Math.sin(b/180*Math.PI/3) }; };\n }\n }\n\n /** @summary Rcalculate frame ranges using specified projection functions\n * @desc Not yet used in v7 */\n recalculateRange(Proj) {\n this.projection = Proj || 0;\n\n if ((this.projection == 2) && ((this.scale_ymin <= -90 || this.scale_ymax >=90))) {\n console.warn(`Mercator Projection: latitude out of range ${this.scale_ymin} ${this.scale_ymax}`);\n this.projection = 0;\n }\n\n let func = this.getProjectionFunc();\n if (!func) return;\n\n let pnts = [ func(this.scale_xmin, this.scale_ymin),\n func(this.scale_xmin, this.scale_ymax),\n func(this.scale_xmax, this.scale_ymax),\n func(this.scale_xmax, this.scale_ymin) ];\n if (this.scale_xmin < 0 && this.scale_xmax > 0) {\n pnts.push(func(0, this.scale_ymin));\n pnts.push(func(0, this.scale_ymax));\n }\n if (this.scale_ymin < 0 && this.scale_ymax > 0) {\n pnts.push(func(this.scale_xmin, 0));\n pnts.push(func(this.scale_xmax, 0));\n }\n\n this.original_xmin = this.scale_xmin;\n this.original_xmax = this.scale_xmax;\n this.original_ymin = this.scale_ymin;\n this.original_ymax = this.scale_ymax;\n\n this.scale_xmin = this.scale_xmax = pnts[0].x;\n this.scale_ymin = this.scale_ymax = pnts[0].y;\n\n for (let n = 1; n < pnts.length; ++n) {\n this.scale_xmin = Math.min(this.scale_xmin, pnts[n].x);\n this.scale_xmax = Math.max(this.scale_xmax, pnts[n].x);\n this.scale_ymin = Math.min(this.scale_ymin, pnts[n].y);\n this.scale_ymax = Math.max(this.scale_ymax, pnts[n].y);\n }\n }\n\n /** @summary Draw axes grids\n * @desc Called immediately after axes drawing */\n drawGrids() {\n let layer = this.getFrameSvg().select('.grid_layer');\n\n layer.selectAll('.xgrid').remove();\n layer.selectAll('.ygrid').remove();\n\n let h = this.getFrameHeight(),\n w = this.getFrameWidth(),\n gridx = this.v7EvalAttr('gridX', false),\n gridy = this.v7EvalAttr('gridY', false),\n grid_style = getSvgLineStyle(gStyle.fGridStyle),\n grid_color = (gStyle.fGridColor > 0) ? this.getColor(gStyle.fGridColor) : 'black';\n\n if (this.x_handle)\n this.x_handle.draw_grid = gridx;\n\n // add a grid on x axis, if the option is set\n if (this.x_handle && this.x_handle.draw_grid) {\n let grid = '';\n for (let n = 0; n < this.x_handle.ticks.length; ++n)\n if (this.swap_xy)\n grid += `M0,${h+this.x_handle.ticks[n]}h${w}`;\n else\n grid += `M${this.x_handle.ticks[n]},0v${h}`;\n\n if (grid)\n layer.append('svg:path')\n .attr('class', 'xgrid')\n .attr('d', grid)\n .style('stroke',grid_color)\n .style('stroke-width', gStyle.fGridWidth)\n .style('stroke-dasharray', grid_style);\n }\n\n if (this.y_handle)\n this.y_handle.draw_grid = gridy;\n\n // add a grid on y axis, if the option is set\n if (this.y_handle && this.y_handle.draw_grid) {\n let grid = '';\n for (let n = 0; n < this.y_handle.ticks.length; ++n)\n if (this.swap_xy)\n grid += `M${this.y_handle.ticks[n]},0v${h}`;\n else\n grid += `M0,${h+this.y_handle.ticks[n]}h${w}`;\n\n if (grid)\n layer.append('svg:path')\n .attr('class', 'ygrid')\n .attr('d', grid)\n .style('stroke', grid_color)\n .style('stroke-width', gStyle.fGridWidth)\n .style('stroke-dasharray', grid_style);\n }\n }\n\n /** @summary Converts 'raw' axis value into text */\n axisAsText(axis, value) {\n let handle = this[axis+'_handle'];\n\n if (handle)\n return handle.axisAsText(value, settings[axis.toUpperCase() + 'ValuesFormat']);\n\n return value.toPrecision(4);\n }\n\n /** @summary Set axix range */\n _setAxisRange(prefix, vmin, vmax) {\n let nmin = prefix + 'min', nmax = prefix + 'max';\n if (this[nmin] != this[nmax]) return;\n let min = this.v7EvalAttr(prefix + '_min'),\n max = this.v7EvalAttr(prefix + '_max');\n\n if (min !== undefined) vmin = min;\n if (max !== undefined) vmax = max;\n\n if (vmin < vmax) {\n this[nmin] = vmin;\n this[nmax] = vmax;\n }\n\n let nzmin = 'zoom_' + prefix + 'min', nzmax = 'zoom_' + prefix + 'max';\n\n if ((this[nzmin] == this[nzmax]) && !this.zoomChangedInteractive(prefix)) {\n min = this.v7EvalAttr(prefix + '_zoomMin');\n max = this.v7EvalAttr(prefix + '_zoomMax');\n\n if ((min !== undefined) || (max !== undefined)) {\n this[nzmin] = (min === undefined) ? this[nmin] : min;\n this[nzmax] = (max === undefined) ? this[nmax] : max;\n }\n }\n }\n\n /** @summary Set axes ranges for drawing, check configured attributes if range already specified */\n setAxesRanges(xaxis, xmin, xmax, yaxis, ymin, ymax, zaxis, zmin, zmax) {\n if (this.axes_drawn) return;\n this.xaxis = xaxis;\n this._setAxisRange('x', xmin, xmax);\n this.yaxis = yaxis;\n this._setAxisRange('y', ymin, ymax);\n this.zaxis = zaxis;\n this._setAxisRange('z', zmin, zmax);\n }\n\n /** @summary Set secondary axes ranges */\n setAxes2Ranges(second_x, xaxis, xmin, xmax, second_y, yaxis, ymin, ymax) {\n if (second_x) {\n this.x2axis = xaxis;\n this._setAxisRange('x2', xmin, xmax);\n }\n if (second_y) {\n this.y2axis = yaxis;\n this._setAxisRange('y2', ymin, ymax);\n }\n }\n\n /** @summary Create x,y objects which maps user coordinates into pixels\n * @desc Must be used only for v6 objects, see TFramePainter for more details\n * @private */\n createXY(opts) {\n if (this.self_drawaxes) return;\n\n this.cleanXY(); // remove all previous configurations\n\n if (!opts) opts = {};\n\n this.v6axes = true;\n this.swap_xy = opts.swap_xy || false;\n this.reverse_x = opts.reverse_x || false;\n this.reverse_y = opts.reverse_y || false;\n\n this.logx = this.v7EvalAttr('x_log', 0);\n this.logy = this.v7EvalAttr('y_log', 0);\n\n let w = this.getFrameWidth(), h = this.getFrameHeight();\n\n this.scale_xmin = this.xmin;\n this.scale_xmax = this.xmax;\n\n this.scale_ymin = this.ymin;\n this.scale_ymax = this.ymax;\n\n if (opts.extra_y_space) {\n let log_scale = this.swap_xy ? this.logx : this.logy;\n if (log_scale && (this.scale_ymax > 0))\n this.scale_ymax = Math.exp(Math.log(this.scale_ymax)*1.1);\n else\n this.scale_ymax += (this.scale_ymax - this.scale_ymin)*0.1;\n }\n\n // if (opts.check_pad_range) {\n // take zooming out of pad or axis attributes - skip!\n // }\n\n if ((this.zoom_ymin == this.zoom_ymax) && (opts.zoom_ymin != opts.zoom_ymax) && !this.zoomChangedInteractive('y')) {\n this.zoom_ymin = opts.zoom_ymin;\n this.zoom_ymax = opts.zoom_ymax;\n }\n\n if (this.zoom_xmin != this.zoom_xmax) {\n this.scale_xmin = this.zoom_xmin;\n this.scale_xmax = this.zoom_xmax;\n }\n\n if (this.zoom_ymin != this.zoom_ymax) {\n this.scale_ymin = this.zoom_ymin;\n this.scale_ymax = this.zoom_ymax;\n }\n\n let xaxis = this.xaxis, yaxis = this.yaxis;\n if (xaxis?._typename != clTAxis) xaxis = create(clTAxis);\n if (yaxis?._typename != clTAxis) yaxis = create(clTAxis);\n\n this.x_handle = new TAxisPainter(this.getDom(), xaxis, true);\n this.x_handle.setPadName(this.getPadName());\n this.x_handle.optionUnlab = this.v7EvalAttr('x_labels_hide', false);\n\n this.x_handle.configureAxis('xaxis', this.xmin, this.xmax, this.scale_xmin, this.scale_xmax, this.swap_xy, this.swap_xy ? [0,h] : [0,w],\n { reverse: this.reverse_x,\n log: this.swap_xy ? this.logy : this.logx,\n symlog: this.swap_xy ? opts.symlog_y : opts.symlog_x,\n logcheckmin: this.swap_xy,\n logminfactor: 0.0001 });\n\n this.x_handle.assignFrameMembers(this,'x');\n\n this.y_handle = new TAxisPainter(this.getDom(), yaxis, true);\n this.y_handle.setPadName(this.getPadName());\n this.y_handle.optionUnlab = this.v7EvalAttr('y_labels_hide', false);\n\n this.y_handle.configureAxis('yaxis', this.ymin, this.ymax, this.scale_ymin, this.scale_ymax, !this.swap_xy, this.swap_xy ? [0,w] : [0,h],\n { reverse: this.reverse_y,\n log: this.swap_xy ? this.logx : this.logy,\n symlog: this.swap_xy ? opts.symlog_x : opts.symlog_y,\n logcheckmin: (opts.ndim < 2) || this.swap_xy,\n log_min_nz: opts.ymin_nz && (opts.ymin_nz < 0.01*this.ymax) ? 0.3 * opts.ymin_nz : 0,\n logminfactor: 3e-4 });\n\n this.y_handle.assignFrameMembers(this,'y');\n }\n\n /** @summary Identify if requested axes are drawn\n * @desc Checks if x/y axes are drawn. Also if second side is already there */\n hasDrawnAxes(second_x, second_y) {\n return !second_x && !second_y ? this.axes_drawn : false;\n }\n\n /** @summary Draw configured axes on the frame\n * @desc axes can be drawn only for main histogram */\n async drawAxes() {\n\n if (this.axes_drawn || (this.xmin == this.xmax) || (this.ymin == this.ymax))\n return this.axes_drawn;\n\n let ticksx = this.v7EvalAttr('ticksX', 1),\n ticksy = this.v7EvalAttr('ticksY', 1),\n sidex = 1, sidey = 1;\n\n if (this.v7EvalAttr('swapX', false)) sidex = -1;\n if (this.v7EvalAttr('swapY', false)) sidey = -1;\n\n let w = this.getFrameWidth(), h = this.getFrameHeight();\n\n if (!this.v6axes) {\n // this is partially same as v6 createXY method\n\n this.cleanupAxes();\n\n this.swap_xy = false;\n\n if (this.zoom_xmin != this.zoom_xmax) {\n this.scale_xmin = this.zoom_xmin;\n this.scale_xmax = this.zoom_xmax;\n } else {\n this.scale_xmin = this.xmin;\n this.scale_xmax = this.xmax;\n }\n\n if (this.zoom_ymin != this.zoom_ymax) {\n this.scale_ymin = this.zoom_ymin;\n this.scale_ymax = this.zoom_ymax;\n } else {\n this.scale_ymin = this.ymin;\n this.scale_ymax = this.ymax;\n }\n\n this.recalculateRange(0);\n\n this.x_handle = new RAxisPainter(this.getDom(), this, this.xaxis, 'x_');\n this.x_handle.setPadName(this.getPadName());\n this.x_handle.snapid = this.snapid;\n this.x_handle.draw_swapside = (sidex < 0);\n this.x_handle.draw_ticks = ticksx;\n\n this.y_handle = new RAxisPainter(this.getDom(), this, this.yaxis, 'y_');\n this.y_handle.setPadName(this.getPadName());\n this.y_handle.snapid = this.snapid;\n this.y_handle.draw_swapside = (sidey < 0);\n this.y_handle.draw_ticks = ticksy;\n\n this.z_handle = new RAxisPainter(this.getDom(), this, this.zaxis, 'z_');\n this.z_handle.setPadName(this.getPadName());\n this.z_handle.snapid = this.snapid;\n\n this.x_handle.configureAxis('xaxis', this.xmin, this.xmax, this.scale_xmin, this.scale_xmax, false, [0,w], w, { reverse: false });\n this.x_handle.assignFrameMembers(this,'x');\n\n this.y_handle.configureAxis('yaxis', this.ymin, this.ymax, this.scale_ymin, this.scale_ymax, true, [h,0], -h, { reverse: false });\n this.y_handle.assignFrameMembers(this,'y');\n\n // only get basic properties like log scale\n this.z_handle.configureZAxis('zaxis', this);\n }\n\n let layer = this.getFrameSvg().select('.axis_layer');\n\n this.x_handle.has_obstacle = false;\n\n let draw_horiz = this.swap_xy ? this.y_handle : this.x_handle,\n draw_vertical = this.swap_xy ? this.x_handle : this.y_handle,\n pp = this.getPadPainter(), pr;\n\n if (pp?._fast_drawing) {\n pr = Promise.resolve(true); // do nothing\n } else if (this.v6axes) {\n\n // in v7 ticksx/y values shifted by 1 relative to v6\n // In v7 ticksx == 0 means no ticks, ticksx == 1 equivalent to == 0 in v6\n\n let can_adjust_frame = false, disable_x_draw = false, disable_y_draw = false;\n\n draw_horiz.disable_ticks = (ticksx <= 0);\n draw_vertical.disable_ticks = (ticksy <= 0);\n\n let pr1 = draw_horiz.drawAxis(layer, w, h,\n draw_horiz.invert_side ? undefined : `translate(0,${h})`,\n (ticksx > 1) ? -h : 0, disable_x_draw,\n undefined, false);\n\n let pr2 = draw_vertical.drawAxis(layer, w, h,\n draw_vertical.invert_side ? `translate(${w})` : undefined,\n (ticksy > 1) ? w : 0, disable_y_draw,\n draw_vertical.invert_side ? 0 : this._frame_x, can_adjust_frame);\n\n pr = Promise.all([pr1,pr2]).then(() => this.drawGrids());\n\n } else {\n\n let arr = [];\n\n if (ticksx > 0)\n arr.push(draw_horiz.drawAxis(layer, (sidex > 0) ? `translate(0,${h})` : '', sidex));\n\n if (ticksy > 0)\n arr.push(draw_vertical.drawAxis(layer, (sidey > 0) ? `translate(0,${h})` : `translate(${w},${h})`, sidey));\n\n pr = Promise.all(arr).then(() => {\n arr = [];\n if (ticksx > 1)\n arr.push(draw_horiz.drawAxisOtherPlace(layer, (sidex < 0) ? `translate(0,${h})` : '', -sidex, ticksx == 2));\n\n if (ticksy > 1)\n arr.push(draw_vertical.drawAxisOtherPlace(layer, (sidey < 0) ? `translate(0,${h})` : `translate(${w},${h})`, -sidey, ticksy == 2));\n return Promise.all(arr);\n }).then(() => this.drawGrids());\n }\n\n return pr.then(() => {\n this.axes_drawn = true;\n return true;\n });\n }\n\n /** @summary Draw secondary configuread axes */\n drawAxes2(second_x, second_y) {\n let w = this.getFrameWidth(), h = this.getFrameHeight(),\n layer = this.getFrameSvg().select('.axis_layer'),\n pr1, pr2;\n\n if (second_x) {\n if (this.zoom_x2min != this.zoom_x2max) {\n this.scale_x2min = this.zoom_x2min;\n this.scale_x2max = this.zoom_x2max;\n } else {\n this.scale_x2min = this.x2min;\n this.scale_x2max = this.x2max;\n }\n this.x2_handle = new RAxisPainter(this.getDom(), this, this.x2axis, 'x2_');\n this.x2_handle.setPadName(this.getPadName());\n this.x2_handle.snapid = this.snapid;\n\n this.x2_handle.configureAxis('x2axis', this.x2min, this.x2max, this.scale_x2min, this.scale_x2max, false, [0,w], w, { reverse: false });\n this.x2_handle.assignFrameMembers(this,'x2');\n\n pr1 = this.x2_handle.drawAxis(layer, '', -1);\n }\n\n if (second_y) {\n if (this.zoom_y2min != this.zoom_y2max) {\n this.scale_y2min = this.zoom_y2min;\n this.scale_y2max = this.zoom_y2max;\n } else {\n this.scale_y2min = this.y2min;\n this.scale_y2max = this.y2max;\n }\n\n this.y2_handle = new RAxisPainter(this.getDom(), this, this.y2axis, 'y2_');\n this.y2_handle.setPadName(this.getPadName());\n this.y2_handle.snapid = this.snapid;\n\n this.y2_handle.configureAxis('y2axis', this.y2min, this.y2max, this.scale_y2min, this.scale_y2max, true, [h,0], -h, { reverse: false });\n this.y2_handle.assignFrameMembers(this,'y2');\n\n pr2 = this.y2_handle.drawAxis(layer, `translate(${w},${h})`, -1);\n }\n\n return Promise.all([pr1,pr2]);\n }\n\n /** @summary Return functions to create x/y points based on coordinates\n * @desc In default case returns frame painter itself\n * @private */\n getGrFuncs(second_x, second_y) {\n let use_x2 = second_x && this.grx2,\n use_y2 = second_y && this.gry2;\n if (!use_x2 && !use_y2) return this;\n\n return {\n use_x2: use_x2,\n grx: use_x2 ? this.grx2 : this.grx,\n x_handle: use_x2 ? this.x2_handle : this.x_handle,\n logx: use_x2 ? this.x2_handle.log : this.x_handle.log,\n scale_xmin: use_x2 ? this.scale_x2min : this.scale_xmin,\n scale_xmax: use_x2 ? this.scale_x2max : this.scale_xmax,\n use_y2: use_y2,\n gry: use_y2 ? this.gry2 : this.gry,\n y_handle: use_y2 ? this.y2_handle : this.y_handle,\n logy: use_y2 ? this.y2_handle.log : this.y_handle.log,\n scale_ymin: use_y2 ? this.scale_y2min : this.scale_ymin,\n scale_ymax: use_y2 ? this.scale_y2max : this.scale_ymax,\n swap_xy: this.swap_xy,\n fp: this,\n revertAxis(name, v) {\n if ((name == 'x') && this.use_x2) name = 'x2';\n if ((name == 'y') && this.use_y2) name = 'y2';\n return this.fp.revertAxis(name, v);\n },\n axisAsText(name, v) {\n if ((name == 'x') && this.use_x2) name = 'x2';\n if ((name == 'y') && this.use_y2) name = 'y2';\n return this.fp.axisAsText(name, v);\n }\n };\n }\n\n /** @summary function called at the end of resize of frame\n * @desc Used to update attributes on the server\n * @private */\n sizeChanged() {\n\n let changes = {};\n this.v7AttrChange(changes, 'margins_left', this.fX1NDC);\n this.v7AttrChange(changes, 'margins_bottom', this.fY1NDC);\n this.v7AttrChange(changes, 'margins_right', 1 - this.fX2NDC);\n this.v7AttrChange(changes, 'margins_top', 1 - this.fY2NDC);\n this.v7SendAttrChanges(changes, false); // do not invoke canvas update on the server\n\n this.redrawPad();\n }\n\n /** @summary Remove all x/y functions\n * @private */\n cleanXY() {\n // remove all axes drawings\n let clean = (name,grname) => {\n if (this[name]) {\n this[name].cleanup();\n delete this[name];\n }\n delete this[grname];\n };\n\n clean('x_handle', 'grx');\n clean('y_handle', 'gry');\n clean('z_handle', 'grz');\n clean('x2_handle', 'grx2');\n clean('y2_handle', 'gry2');\n\n delete this.v6axes; // marker that v6 axes are used\n }\n\n /** @summary Remove all axes drawings\n * @private */\n cleanupAxes() {\n this.cleanXY();\n\n if (this.draw_g) {\n this.draw_g.select('.grid_layer').selectAll('*').remove();\n this.draw_g.select('.axis_layer').selectAll('*').remove();\n }\n this.axes_drawn = false;\n }\n\n /** @summary Removes all drawn elements of the frame\n * @private */\n cleanFrameDrawings() {\n // cleanup all 3D drawings if any\n if (isFunc(this.create3DScene))\n this.create3DScene(-1);\n\n this.cleanupAxes();\n\n let clean = (name) => {\n this[name+'min'] = this[name+'max'] = 0;\n this[`zoom_${name}min`] = this[`zoom_${name}max`] = 0;\n this[`scale_${name}min`] = this[`scale_${name}max`] = 0;\n };\n\n clean('x');\n clean('y');\n clean('z');\n clean('x2');\n clean('y2');\n\n if (this.draw_g) {\n this.draw_g.select('.main_layer').selectAll('*').remove();\n this.draw_g.select('.upper_layer').selectAll('*').remove();\n }\n }\n\n /** @summary Fully cleanup frame\n * @private */\n cleanup() {\n\n this.cleanFrameDrawings();\n\n if (this.draw_g) {\n this.draw_g.selectAll('*').remove();\n this.draw_g.on('mousedown', null)\n .on('dblclick', null)\n .on('wheel', null)\n .on('contextmenu', null)\n .property('interactive_set', null);\n }\n\n if (this.keys_handler) {\n window.removeEventListener('keydown', this.keys_handler, false);\n this.keys_handler = null;\n }\n delete this.enabledKeys;\n delete this.self_drawaxes;\n\n delete this.xaxis;\n delete this.yaxis;\n delete this.zaxis;\n delete this.x2axis;\n delete this.y2axis;\n\n delete this.draw_g; // frame element managet by the pad\n\n delete this._click_handler;\n delete this._dblclick_handler;\n\n let pp = this.getPadPainter();\n if (pp?.frame_painter_ref === this)\n delete pp.frame_painter_ref;\n\n super.cleanup();\n }\n\n /** @summary Redraw frame\n * @private */\n redraw() {\n\n let pp = this.getPadPainter();\n if (pp) pp.frame_painter_ref = this;\n\n // first update all attributes from objects\n this.updateAttributes();\n\n let rect = pp?.getPadRect() ?? { width: 10, height: 10 },\n lm = Math.round(rect.width * this.fX1NDC),\n w = Math.round(rect.width * (this.fX2NDC - this.fX1NDC)),\n tm = Math.round(rect.height * (1 - this.fY2NDC)),\n h = Math.round(rect.height * (this.fY2NDC - this.fY1NDC)),\n rotate = false, fixpos = false, trans;\n\n if (pp?.options) {\n if (pp.options.RotateFrame) rotate = true;\n if (pp.options.FixFrame) fixpos = true;\n }\n\n if (rotate) {\n trans = `rotate(-90,${lm},${tm}) translate(${lm-h},${tm})`;\n [w, h] = [h, w];\n } else {\n trans = `translate(${lm},${tm})`;\n }\n\n // update values here to let access even when frame is not really updated\n this._frame_x = lm;\n this._frame_y = tm;\n this._frame_width = w;\n this._frame_height = h;\n this._frame_rotate = rotate;\n this._frame_fixpos = fixpos;\n\n if (this.mode3d) return this; // no need for real draw in mode3d\n\n // this is svg:g object - container for every other items belonging to frame\n this.draw_g = this.getFrameSvg();\n\n let top_rect, main_svg;\n\n if (this.draw_g.empty()) {\n\n this.draw_g = this.getLayerSvg('primitives_layer').append('svg:g').attr('class', 'root_frame');\n\n if (!isBatchMode())\n this.draw_g.append('svg:title').text('');\n\n top_rect = this.draw_g.append('svg:rect');\n\n // append for the moment three layers - for drawing and axis\n this.draw_g.append('svg:g').attr('class','grid_layer');\n\n main_svg = this.draw_g.append('svg:svg')\n .attr('class','main_layer')\n .attr('x', 0)\n .attr('y', 0)\n .attr('overflow', 'hidden');\n\n this.draw_g.append('svg:g').attr('class','axis_layer');\n this.draw_g.append('svg:g').attr('class','upper_layer');\n } else {\n top_rect = this.draw_g.select('rect');\n main_svg = this.draw_g.select('.main_layer');\n }\n\n this.axes_drawn = false;\n\n this.draw_g.attr('transform', trans);\n\n top_rect.attr('x', 0)\n .attr('y', 0)\n .attr('width', w)\n .attr('height', h)\n .attr('rx', this.lineatt.rx || null)\n .attr('ry', this.lineatt.ry || null)\n .call(this.fillatt.func)\n .call(this.lineatt.func);\n\n main_svg.attr('width', w)\n .attr('height', h)\n .attr('viewBox', `0 0 ${w} ${h}`);\n\n let pr = Promise.resolve(true);\n\n if (this.v7EvalAttr('drawAxes')) {\n this.self_drawaxes = true;\n this.setAxesRanges();\n pr = this.drawAxes().then(() => this.addInteractivity());\n }\n\n return pr.then(() => {\n if (!isBatchMode()) {\n top_rect.style('pointer-events', 'visibleFill'); // let process mouse events inside frame\n\n FrameInteractive.assign(this);\n this.addBasicInteractivity();\n }\n\n return this;\n });\n }\n\n /** @summary Returns frame width */\n getFrameWidth() { return this._frame_width || 0; }\n\n /** @summary Returns frame height */\n getFrameHeight() { return this._frame_height || 0; }\n\n /** @summary Returns frame rectangle plus extra info for hint display */\n getFrameRect() {\n return {\n x: this._frame_x || 0,\n y: this._frame_y || 0,\n width: this.getFrameWidth(),\n height: this.getFrameHeight(),\n transform: this.draw_g ? this.draw_g.attr('transform') : '',\n hint_delta_x: 0,\n hint_delta_y: 0\n }\n }\n\n /** @summary Returns palette associated with frame */\n getHistPalette() {\n return this.getPadPainter().getHistPalette();\n }\n\n /** @summary Configure user-defined click handler\n * @desc Function will be called every time when frame click was perfromed\n * As argument, tooltip object with selected bins will be provided\n * If handler function returns true, default handling of click will be disabled */\n configureUserClickHandler(handler) {\n this._click_handler = isFunc(handler) ? handler : null;\n }\n\n /** @summary Configure user-defined dblclick handler\n * @desc Function will be called every time when double click was called\n * As argument, tooltip object with selected bins will be provided\n * If handler function returns true, default handling of dblclick (unzoom) will be disabled */\n configureUserDblclickHandler(handler) {\n this._dblclick_handler = isFunc(handler) ? handler : null;\n }\n\n /** @summary function can be used for zooming into specified range\n * @desc if both limits for each axis 0 (like xmin == xmax == 0), axis will be unzoomed\n * @return {Promise} with boolean flag if zoom operation was performed */\n async zoom(xmin, xmax, ymin, ymax, zmin, zmax) {\n\n // disable zooming when axis conversion is enabled\n if (this.projection) return false;\n\n if (xmin === 'x') { xmin = xmax; xmax = ymin; ymin = undefined; } else\n if (xmin === 'y') { ymax = ymin; ymin = xmax; xmin = xmax = undefined; } else\n if (xmin === 'z') { zmin = xmax; zmax = ymin; xmin = xmax = ymin = undefined; }\n\n let zoom_x = (xmin !== xmax), zoom_y = (ymin !== ymax), zoom_z = (zmin !== zmax),\n unzoom_x = false, unzoom_y = false, unzoom_z = false;\n\n if (zoom_x) {\n let cnt = 0;\n if (xmin <= this.xmin) { xmin = this.xmin; cnt++; }\n if (xmax >= this.xmax) { xmax = this.xmax; cnt++; }\n if (cnt === 2) { zoom_x = false; unzoom_x = true; }\n } else {\n unzoom_x = (xmin === xmax) && (xmin === 0);\n }\n\n if (zoom_y) {\n let cnt = 0;\n if (ymin <= this.ymin) { ymin = this.ymin; cnt++; }\n if (ymax >= this.ymax) { ymax = this.ymax; cnt++; }\n if (cnt === 2) { zoom_y = false; unzoom_y = true; }\n } else {\n unzoom_y = (ymin === ymax) && (ymin === 0);\n }\n\n if (zoom_z) {\n let cnt = 0;\n // if (this.logz && this.ymin_nz && this.getDimension()===2) main_zmin = 0.3*this.ymin_nz;\n if (zmin <= this.zmin) { zmin = this.zmin; cnt++; }\n if (zmax >= this.zmax) { zmax = this.zmax; cnt++; }\n if (cnt === 2) { zoom_z = false; unzoom_z = true; }\n } else {\n unzoom_z = (zmin === zmax) && (zmin === 0);\n }\n\n let changed = false,\n r_x = '', r_y = '', r_z = '', is_any_check = false,\n req = {\n _typename: 'ROOT::Experimental::RFrame::RUserRanges',\n values: [0, 0, 0, 0, 0, 0],\n flags: [false, false, false, false, false, false]\n };\n\n const checkZooming = (painter, force) => {\n if (!force && !isFunc(painter.canZoomInside)) return;\n\n is_any_check = true;\n\n if (zoom_x && (force || painter.canZoomInside('x', xmin, xmax))) {\n this.zoom_xmin = xmin;\n this.zoom_xmax = xmax;\n changed = true; r_x = '0';\n zoom_x = false;\n req.values[0] = xmin; req.values[1] = xmax;\n req.flags[0] = req.flags[1] = true;\n }\n if (zoom_y && (force || painter.canZoomInside('y', ymin, ymax))) {\n this.zoom_ymin = ymin;\n this.zoom_ymax = ymax;\n changed = true; r_y = '1';\n zoom_y = false;\n req.values[2] = ymin; req.values[3] = ymax;\n req.flags[2] = req.flags[3] = true;\n }\n if (zoom_z && (force || painter.canZoomInside('z', zmin, zmax))) {\n this.zoom_zmin = zmin;\n this.zoom_zmax = zmax;\n changed = true; r_z = '2';\n zoom_z = false;\n req.values[4] = zmin; req.values[5] = zmax;\n req.flags[4] = req.flags[5] = true;\n }\n };\n\n // first process zooming (if any)\n if (zoom_x || zoom_y || zoom_z)\n this.forEachPainter(painter => checkZooming(painter));\n\n // force zooming when no any other painter can verify zoom range\n if (!is_any_check && this.self_drawaxes)\n checkZooming(null, true);\n\n // and process unzoom, if any\n if (unzoom_x || unzoom_y || unzoom_z) {\n if (unzoom_x) {\n if (this.zoom_xmin !== this.zoom_xmax) { changed = true; r_x = '0'; }\n this.zoom_xmin = this.zoom_xmax = 0;\n req.values[0] = req.values[1] = -1;\n }\n if (unzoom_y) {\n if (this.zoom_ymin !== this.zoom_ymax) { changed = true; r_y = '1'; }\n this.zoom_ymin = this.zoom_ymax = 0;\n req.values[2] = req.values[3] = -1;\n }\n if (unzoom_z) {\n if (this.zoom_zmin !== this.zoom_zmax) { changed = true; r_z = '2'; }\n this.zoom_zmin = this.zoom_zmax = 0;\n req.values[4] = req.values[5] = -1;\n }\n }\n\n if (!changed) return false;\n\n if (this.v7NormalMode())\n this.v7SubmitRequest('zoom', { _typename: 'ROOT::Experimental::RFrame::RZoomRequest', ranges: req });\n\n return this.interactiveRedraw('pad', 'zoom' + r_x + r_y + r_z).then(() => true);\n }\n\n /** @summary Provide zooming of single axis\n * @desc One can specify names like x/y/z but also second axis x2 or y2 */\n async zoomSingle(name, vmin, vmax) {\n\n let names = ['x','y','z','x2','y2'], indx = names.indexOf(name);\n\n // disable zooming when axis conversion is enabled\n if (this.projection || !this[name+'_handle'] || (indx < 0))\n return false;\n\n let zoom_v = (vmin !== vmax), unzoom_v = false;\n\n if (zoom_v) {\n let cnt = 0;\n if (vmin <= this[name+'min']) { vmin = this[name+'min']; cnt++; }\n if (vmax >= this[name+'max']) { vmax = this[name+'max']; cnt++; }\n if (cnt === 2) { zoom_v = false; unzoom_v = true; }\n } else {\n unzoom_v = (vmin === vmax) && (vmin === 0);\n }\n\n let changed = false, is_any_check = false,\n req = {\n _typename: 'ROOT::Experimental::RFrame::RUserRanges',\n values: [0, 0, 0, 0, 0, 0, 0, 0, 0, 0],\n flags: [false, false, false, false, false, false, false, false, false, false]\n };\n\n let checkZooming = (painter, force) => {\n if (!force && !isFunc(painter?.canZoomInside)) return;\n\n is_any_check = true;\n\n if (zoom_v && (force || painter.canZoomInside(name[0], vmin, vmax))) {\n this['zoom_' + name + 'min'] = vmin;\n this['zoom_' + name + 'max'] = vmax;\n changed = true;\n zoom_v = false;\n req.values[indx*2] = vmin; req.values[indx*2+1] = vmax;\n req.flags[indx*2] = req.flags[indx*2+1] = true;\n }\n };\n\n // first process zooming (if any)\n if (zoom_v)\n this.forEachPainter(painter => checkZooming(painter));\n\n // force zooming when no any other painter can verify zoom range\n if (!is_any_check && this.self_drawaxes)\n checkZooming(null, true);\n\n if (unzoom_v) {\n if (this[`zoom_${name}min`] !== this[`zoom_${name}max`]) changed = true;\n this[`zoom_${name}min`] = this[`zoom_${name}max`] = 0;\n req.values[indx*2] = req.values[indx*2+1] = -1;\n }\n\n if (!changed) return false;\n\n if (this.v7NormalMode())\n this.v7SubmitRequest('zoom', { _typename: 'ROOT::Experimental::RFrame::RZoomRequest', ranges: req });\n\n return this.interactiveRedraw('pad', 'zoom' + indx).then(() => true);\n }\n\n /** @summary Checks if specified axis zoomed */\n isAxisZoomed(axis) {\n return this['zoom_'+axis+'min'] !== this['zoom_'+axis+'max'];\n }\n\n /** @summary Unzoom specified axes\n * @return {Promise} with boolean flag if zoom is changed */\n async unzoom(dox, doy, doz) {\n if (dox == 'all')\n return this.unzoom('x2').then(() => this.unzoom('y2')).then(() => this.unzoom('xyz'));\n\n if ((dox == 'x2') || (dox == 'y2'))\n return this.zoomSingle(dox, 0, 0).then(changed => {\n if (changed) this.zoomChangedInteractive(dox, 'unzoom');\n return changed;\n });\n\n if (typeof dox === 'undefined') { dox = doy = doz = true; } else\n if (isStr(dox)) { doz = dox.indexOf('z') >= 0; doy = dox.indexOf('y') >= 0; dox = dox.indexOf('x') >= 0; }\n\n return this.zoom(dox ? 0 : undefined, dox ? 0 : undefined,\n doy ? 0 : undefined, doy ? 0 : undefined,\n doz ? 0 : undefined, doz ? 0 : undefined).then(changed => {\n\n if (changed && dox) this.zoomChangedInteractive('x', 'unzoom');\n if (changed && doy) this.zoomChangedInteractive('y', 'unzoom');\n if (changed && doz) this.zoomChangedInteractive('z', 'unzoom');\n\n return changed;\n });\n }\n\n /** @summary Mark/check if zoom for specific axis was changed interactively\n * @private */\n zoomChangedInteractive(axis, value) {\n if (axis == 'reset') {\n this.zoom_changed_x = this.zoom_changed_y = this.zoom_changed_z = undefined;\n return;\n }\n if (!axis || axis == 'any')\n return this.zoom_changed_x || this.zoom_changed_y || this.zoom_changed_z;\n\n if ((axis !== 'x') && (axis !== 'y') && (axis !== 'z')) return;\n\n let fld = 'zoom_changed_' + axis;\n if (value === undefined) return this[fld];\n\n if (value === 'unzoom') {\n // special handling of unzoom, only if was never changed before flag set to true\n this[fld] = (this[fld] === undefined);\n return;\n }\n\n if (value) this[fld] = true;\n }\n\n /** @summary Fill menu for frame when server is not there */\n fillObjectOfflineMenu(menu, kind) {\n if ((kind != 'x') && (kind != 'y')) return;\n\n menu.add('Unzoom', () => this.unzoom(kind));\n\n //if (this[kind+'_kind'] == 'normal')\n // menu.addchk(this['log'+kind], 'SetLog'+kind, this.toggleAxisLog.bind(this, kind));\n\n // here should be all axes attributes in offline\n }\n\n /** @summary Set grid drawing for specified axis */\n changeFrameAttr(attr, value) {\n let changes = {};\n this.v7AttrChange(changes, attr, value);\n this.v7SetAttr(attr, value);\n this.v7SendAttrChanges(changes, false); // do not invoke canvas update on the server\n this.redrawPad();\n }\n\n /** @summary Fill context menu */\n fillContextMenu(menu, kind, /* obj */) {\n\n // when fill and show context menu, remove all zooming\n\n if ((kind == 'x') || (kind == 'y') || (kind == 'x2') || (kind == 'y2')) {\n let handle = this[kind+'_handle'];\n if (!handle) return false;\n menu.add('header: ' + kind.toUpperCase() + ' axis');\n return handle.fillAxisContextMenu(menu, kind);\n }\n\n let alone = menu.size() == 0;\n\n if (alone)\n menu.add('header:Frame');\n else\n menu.add('separator');\n\n if (this.zoom_xmin !== this.zoom_xmax)\n menu.add('Unzoom X', () => this.unzoom('x'));\n if (this.zoom_ymin !== this.zoom_ymax)\n menu.add('Unzoom Y', () => this.unzoom('y'));\n if (this.zoom_zmin !== this.zoom_zmax)\n menu.add('Unzoom Z', () => this.unzoom('z'));\n if (this.zoom_x2min !== this.zoom_x2max)\n menu.add('Unzoom X2', () => this.unzoom('x2'));\n if (this.zoom_y2min !== this.zoom_y2max)\n menu.add('Unzoom Y2', () => this.unzoom('y2'));\n menu.add('Unzoom all', () => this.unzoom('all'));\n\n menu.add('separator');\n\n menu.addchk(this.isTooltipAllowed(), 'Show tooltips', () => this.setTooltipAllowed('toggle'));\n\n if (this.x_handle)\n menu.addchk(this.x_handle.draw_grid, 'Grid x', flag => this.changeFrameAttr('gridX', flag));\n if (this.y_handle)\n menu.addchk(this.y_handle.draw_grid, 'Grid y', flag => this.changeFrameAttr('gridY', flag));\n if (this.x_handle && !this.x2_handle)\n menu.addchk(this.x_handle.draw_swapside, 'Swap x', flag => this.changeFrameAttr('swapX', flag));\n if (this.y_handle && !this.y2_handle)\n menu.addchk(this.y_handle.draw_swapside, 'Swap y', flag => this.changeFrameAttr('swapY', flag));\n if (this.x_handle && !this.x2_handle) {\n menu.add('sub:Ticks x');\n menu.addchk(this.x_handle.draw_ticks == 0, 'off', () => this.changeFrameAttr('ticksX', 0));\n menu.addchk(this.x_handle.draw_ticks == 1, 'normal', () => this.changeFrameAttr('ticksX', 1));\n menu.addchk(this.x_handle.draw_ticks == 2, 'ticks on both sides', () => this.changeFrameAttr('ticksX', 2));\n menu.addchk(this.x_handle.draw_ticks == 3, 'labels on both sides', () => this.changeFrameAttr('ticksX', 3));\n menu.add('endsub:');\n }\n if (this.y_handle && !this.y2_handle) {\n menu.add('sub:Ticks y');\n menu.addchk(this.y_handle.draw_ticks == 0, 'off', () => this.changeFrameAttr('ticksY', 0));\n menu.addchk(this.y_handle.draw_ticks == 1, 'normal', () => this.changeFrameAttr('ticksY', 1));\n menu.addchk(this.y_handle.draw_ticks == 2, 'ticks on both sides', () => this.changeFrameAttr('ticksY', 2));\n menu.addchk(this.y_handle.draw_ticks == 3, 'labels on both sides', () => this.changeFrameAttr('ticksY', 3));\n menu.add('endsub:');\n }\n\n menu.addAttributesMenu(this, alone ? '' : 'Frame ');\n menu.add('separator');\n menu.add('Save as frame.png', () => this.getPadPainter().saveAs('png', 'frame', 'frame.png'));\n menu.add('Save as frame.svg', () => this.getPadPainter().saveAs('svg', 'frame', 'frame.svg'));\n\n return true;\n }\n\n /** @summary Convert graphical coordinate into axis value */\n revertAxis(axis, pnt) {\n let handle = this[axis+'_handle'];\n return handle ? handle.revertPoint(pnt) : 0;\n }\n\n /** @summary Show axis status message\n * @desc method called normally when mouse enter main object element\n * @private */\n showAxisStatus(axis_name, evnt) {\n\n let taxis = null, hint_name = axis_name, hint_title = 'axis',\n m = d3_pointer(evnt, this.getFrameSvg().node()), id = (axis_name == 'x') ? 0 : 1;\n\n if (taxis) { hint_name = taxis.fName; hint_title = taxis.fTitle || 'axis object'; }\n\n if (this.swap_xy) id = 1-id;\n\n let axis_value = this.revertAxis(axis_name, m[id]);\n\n this.showObjectStatus(hint_name, hint_title, axis_name + ' : ' + this.axisAsText(axis_name, axis_value), Math.round(m[0]) + ',' + Math.round(m[1]));\n }\n\n /** @summary Add interactive keys handlers\n * @private */\n addKeysHandler() {\n if (isBatchMode()) return;\n FrameInteractive.assign(this);\n this.addFrameKeysHandler();\n }\n\n /** @summary Add interactive functionality to the frame\n * @private */\n addInteractivity(for_second_axes) {\n\n if (isBatchMode() || (!settings.Zooming && !settings.ContextMenu))\n return true;\n FrameInteractive.assign(this);\n return this.addFrameInteractivity(for_second_axes);\n }\n\n /** @summary Set selected range back to pad object - to be implemented\n * @private */\n setRootPadRange(/* pad, is3d */) {\n // TODO: change of pad range and send back to root application\n }\n\n /** @summary Toggle log scale on the specified axes */\n toggleAxisLog(axis) {\n let handle = this[axis+'_handle'];\n if (handle) handle.changeAxisLog('toggle');\n }\n\n} // class RFramePainter\n\nexport { RFramePainter };\n","import { gStyle, settings, constants, internals, addMethods,\n isPromise, getPromise, isBatchMode, isObject, isFunc, isStr, btoa_func, clTPad } from '../core.mjs';\nimport { pointer as d3_pointer } from '../d3.mjs';\nimport { ColorPalette, addColor, getRootColors } from '../base/colors.mjs';\nimport { RObjectPainter } from '../base/RObjectPainter.mjs';\nimport { getElementRect, getAbsPosInCanvas, DrawOptions, compressSVG } from '../base/BasePainter.mjs';\nimport { selectActivePad, getActivePad } from '../base/ObjectPainter.mjs';\nimport { registerForResize, saveFile } from '../gui/utils.mjs';\nimport { BrowserLayout } from '../gui/display.mjs';\nimport { createMenu, closeMenu } from '../gui/menu.mjs';\nimport { PadButtonsHandler } from './TPadPainter.mjs';\n\n\n/**\n * @summary Painter class for RPad\n *\n * @private\n */\n\nclass RPadPainter extends RObjectPainter {\n\n /** @summary constructor */\n constructor(dom, pad, iscan) {\n super(dom, pad, '', 'pad');\n this.pad = pad;\n this.iscan = iscan; // indicate if working with canvas\n this.this_pad_name = '';\n if (!this.iscan && (pad !== null)) {\n if (pad.fObjectID)\n this.this_pad_name = 'pad' + pad.fObjectID; // use objectid as padname\n else\n this.this_pad_name = 'ppp' + internals.id_counter++; // artificical name\n }\n this.painters = []; // complete list of all painters in the pad\n this.has_canvas = true;\n this.forEachPainter = this.forEachPainterInPad;\n }\n\n /** @summary Indicates that is not Root6 pad painter\n * @private */\n isRoot6() { return false; }\n\n /** @summary Returns SVG element for the pad itself\n * @private */\n svg_this_pad() {\n return this.getPadSvg(this.this_pad_name);\n }\n\n /** @summary Returns main painter on the pad\n * @desc Typically main painter is TH1/TH2 object which is drawing axes\n * @private */\n getMainPainter() {\n return this.main_painter_ref || null;\n }\n\n /** @summary Assign main painter on the pad\n * @private */\n setMainPainter(painter, force) {\n if (!this.main_painter_ref || force)\n this.main_painter_ref = painter;\n }\n\n /** @summary cleanup pad and all primitives inside */\n cleanup() {\n if (this._doing_draw)\n console.error('pad drawing is not completed when cleanup is called');\n\n this.painters.forEach(p => p.cleanup());\n\n let svg_p = this.svg_this_pad();\n if (!svg_p.empty()) {\n svg_p.property('pad_painter', null);\n if (!this.iscan) svg_p.remove();\n }\n\n delete this.main_painter_ref;\n delete this.frame_painter_ref;\n delete this.pads_cache;\n delete this._pad_x;\n delete this._pad_y;\n delete this._pad_width;\n delete this._pad_height;\n delete this._doing_draw;\n delete this._dfltRFont;\n\n this.painters = [];\n this.pad = null;\n this.draw_object = null;\n this.pad_frame = null;\n this.this_pad_name = undefined;\n this.has_canvas = false;\n\n selectActivePad({ pp: this, active: false });\n\n super.cleanup();\n }\n\n /** @summary Returns frame painter inside the pad\n * @private */\n getFramePainter() { return this.frame_painter_ref; }\n\n /** @summary get pad width */\n getPadWidth() { return this._pad_width || 0; }\n\n /** @summary get pad height */\n getPadHeight() { return this._pad_height || 0; }\n\n /** @summary get pad rect */\n getPadRect() {\n return {\n x: this._pad_x || 0,\n y: this._pad_y || 0,\n width: this.getPadWidth(),\n height: this.getPadHeight()\n }\n }\n\n /** @summary Returns frame coordiantes - also when frame is not drawn */\n getFrameRect() {\n let fp = this.getFramePainter();\n if (fp) return fp.getFrameRect();\n\n let w = this.getPadWidth(),\n h = this.getPadHeight(),\n rect = {};\n\n rect.szx = Math.round(0.5*w);\n rect.szy = Math.round(0.5*h);\n rect.width = 2*rect.szx;\n rect.height = 2*rect.szy;\n rect.x = Math.round(w/2 - rect.szx);\n rect.y = Math.round(h/2 - rect.szy);\n rect.hint_delta_x = rect.szx;\n rect.hint_delta_y = rect.szy;\n rect.transform = `translate(${rect.x},${rect.y})`;\n return rect;\n }\n\n /** @summary return RPad object */\n getRootPad(is_root6) {\n return (is_root6 === undefined) || !is_root6 ? this.pad : null;\n }\n\n /** @summary Cleanup primitives from pad - selector lets define which painters to remove\n * @private */\n cleanPrimitives(selector) {\n if (!isFunc(selector)) return;\n\n for (let k = this.painters.length-1; k >= 0; --k)\n if (selector(this.painters[k])) {\n this.painters[k].cleanup();\n this.painters.splice(k, 1);\n }\n }\n\n /** @summary Try to find painter for specified object\n * @desc can be used to find painter for some special objects, registered as\n * histogram functions\n * @private */\n findPainterFor(selobj, selname, seltype) {\n return this.painters.find(p => {\n let pobj = p.getObject();\n if (!pobj) return;\n\n if (selobj && (pobj === selobj)) return true;\n if (!selname && !seltype) return;\n if (selname && (pobj.fName !== selname)) return;\n if (seltype && (pobj._typename !== seltype)) return;\n return true;\n });\n }\n\n /** @summary Returns palette associated with pad.\n * @desc Either from existing palette painter or just default palette */\n getHistPalette() {\n let pp = this.findPainterFor(undefined, undefined, 'ROOT::Experimental::RPaletteDrawable');\n\n if (pp) return pp.getHistPalette();\n\n if (!this.fDfltPalette) {\n this.fDfltPalette = {\n _typename: 'ROOT::Experimental::RPalette',\n fColors: [{ fOrdinal: 0, fColor: { fColor: 'rgb(53, 42, 135)' } },\n { fOrdinal: 0.125, fColor: { fColor: 'rgb(15, 92, 221)' } },\n { fOrdinal: 0.25, fColor: { fColor: 'rgb(20, 129, 214)' } },\n { fOrdinal: 0.375, fColor: { fColor: 'rgb(6, 164, 202)' } },\n { fOrdinal: 0.5, fColor: { fColor: 'rgb(46, 183, 164)' } },\n { fOrdinal: 0.625, fColor: { fColor: 'rgb(135, 191, 119)' } },\n { fOrdinal: 0.75, fColor: { fColor: 'rgb(209, 187, 89)' } },\n { fOrdinal: 0.875, fColor: { fColor: 'rgb(254, 200, 50)' } },\n { fOrdinal: 1, fColor: { fColor: 'rgb(249, 251, 14)' } }],\n fInterpolate: true,\n fNormalized: true\n };\n addMethods(this.fDfltPalette, 'ROOT::Experimental::RPalette');\n }\n\n return this.fDfltPalette;\n }\n\n /** @summary Returns number of painters\n * @private */\n getNumPainters() { return this.painters.length; }\n\n /** @summary Call function for each painter in pad\n * @param {function} userfunc - function to call\n * @param {string} kind - 'all' for all objects (default), 'pads' only pads and subpads, 'objects' only for object in current pad\n * @private */\n forEachPainterInPad(userfunc, kind) {\n if (!kind) kind = 'all';\n if (kind != 'objects') userfunc(this);\n for (let k = 0; k < this.painters.length; ++k) {\n let sub = this.painters[k];\n if (isFunc(sub.forEachPainterInPad)) {\n if (kind!='objects') sub.forEachPainterInPad(userfunc, kind);\n } else if (kind != 'pads') userfunc(sub);\n }\n }\n\n /** @summary register for pad events receiver\n * @desc in pad painter, while pad may be drawn without canvas\n * @private */\n registerForPadEvents(receiver) {\n this.pad_events_receiver = receiver;\n }\n\n /** @summary Generate pad events, normally handled by GED\n * @desc in pad painter, while pad may be drawn without canvas\n * @private */\n producePadEvent(what, padpainter, painter, position, place) {\n if ((what == 'select') && isFunc(this.selectActivePad))\n this.selectActivePad(padpainter, painter, position);\n\n if (this.pad_events_receiver)\n this.pad_events_receiver({ what, padpainter, painter, position, place });\n }\n\n /** @summary method redirect call to pad events receiver */\n selectObjectPainter(painter, pos, place) {\n\n let istoppad = (this.iscan || !this.has_canvas),\n canp = istoppad ? this : this.getCanvPainter();\n\n if (painter === undefined) painter = this;\n\n if (pos && !istoppad)\n pos = getAbsPosInCanvas(this.svg_this_pad(), pos);\n\n selectActivePad({ pp: this, active: true });\n\n canp.producePadEvent('select', this, painter, pos, place);\n }\n\n /** @summary Create SVG element for the canvas */\n createCanvasSvg(check_resize, new_size) {\n\n let factor = null, svg = null, lmt = 5, rect = null, btns, frect;\n\n if (check_resize > 0) {\n\n if (this._fixed_size) return (check_resize > 1); // flag used to force re-drawing of all subpads\n\n svg = this.getCanvSvg();\n\n if (svg.empty()) return false;\n\n factor = svg.property('height_factor');\n\n rect = this.testMainResize(check_resize, null, factor);\n\n if (!rect.changed) return false;\n\n if (!isBatchMode())\n btns = this.getLayerSvg('btns_layer', this.this_pad_name);\n\n frect = svg.select('.canvas_fillrect');\n\n } else {\n\n let render_to = this.selectDom();\n\n if (render_to.style('position') == 'static')\n render_to.style('position', 'relative');\n\n svg = render_to.append('svg')\n .attr('class', 'jsroot root_canvas')\n .property('pad_painter', this) // this is custom property\n .property('current_pad', '') // this is custom property\n .property('redraw_by_resize', false); // could be enabled to force redraw by each resize\n\n this.setTopPainter(); //assign canvas as top painter of that element\n\n if (!isBatchMode() && !this.online_canvas)\n svg.append('svg:title').text('ROOT canvas');\n\n frect = svg.append('svg:path').attr('class','canvas_fillrect');\n if (!isBatchMode())\n frect.style('pointer-events', 'visibleFill')\n .on('dblclick', evnt => this.enlargePad(evnt))\n .on('click', () => this.selectObjectPainter(this, null))\n .on('mouseenter', () => this.showObjectStatus())\n .on('contextmenu', settings.ContextMenu ? evnt => this.padContextMenu(evnt) : null);\n\n svg.append('svg:g').attr('class', 'primitives_layer');\n svg.append('svg:g').attr('class', 'info_layer');\n if (!isBatchMode())\n btns = svg.append('svg:g')\n .attr('class','btns_layer')\n .property('leftside', settings.ToolBarSide == 'left')\n .property('vertical', settings.ToolBarVert);\n\n factor = 0.66;\n if (this.pad && this.pad.fWinSize[0] && this.pad.fWinSize[1]) {\n factor = this.pad.fWinSize[1] / this.pad.fWinSize[0];\n if ((factor < 0.1) || (factor > 10)) factor = 0.66;\n }\n\n if (this._fixed_size) {\n render_to.style('overflow','auto');\n rect = { width: this.pad.fWinSize[0], height: this.pad.fWinSize[1] };\n if (!rect.width || !rect.height)\n rect = getElementRect(render_to);\n } else {\n rect = this.testMainResize(2, new_size, factor);\n }\n }\n\n this.createAttFill({ pattern: 1001, color: 0 });\n\n if ((rect.width <= lmt) || (rect.height <= lmt)) {\n svg.style('display', 'none');\n console.warn(`Hide canvas while geometry too small w=${rect.width} h=${rect.height}`);\n rect.width = 200; rect.height = 100; // just to complete drawing\n } else {\n svg.style('display', null);\n }\n\n if (this._fixed_size) {\n svg.attr('x', 0)\n .attr('y', 0)\n .attr('width', rect.width)\n .attr('height', rect.height)\n .style('position', 'absolute');\n } else {\n svg.attr('x', 0)\n .attr('y', 0)\n .style('width', '100%')\n .style('height', '100%')\n .style('position', 'absolute')\n .style('left', 0)\n .style('top', 0)\n .style('right', 0)\n .style('bottom', 0);\n }\n\n svg.style('filter', settings.DarkMode ? 'invert(100%)' : null);\n\n svg.attr('viewBox', `0 0 ${rect.width} ${rect.height}`)\n .attr('preserveAspectRatio', 'none') // we do not preserve relative ratio\n .property('height_factor', factor)\n .property('draw_x', 0)\n .property('draw_y', 0)\n .property('draw_width', rect.width)\n .property('draw_height', rect.height);\n\n this._pad_x = 0;\n this._pad_y = 0;\n this._pad_width = rect.width;\n this._pad_height = rect.height;\n\n frect.attr('d', `M0,0H${rect.width}V${rect.height}H0Z`)\n .call(this.fillatt.func);\n\n this._fast_drawing = settings.SmallPad && ((rect.width < settings.SmallPad.width) || (rect.height < settings.SmallPad.height));\n\n if (this.alignButtons && btns)\n this.alignButtons(btns, rect.width, rect.height);\n\n return true;\n }\n\n /** @summary Enlarge pad draw element when possible */\n enlargePad(evnt) {\n\n if (evnt) {\n evnt.preventDefault();\n evnt.stopPropagation();\n }\n\n let svg_can = this.getCanvSvg(),\n pad_enlarged = svg_can.property('pad_enlarged');\n\n if (this.iscan || !this.has_canvas || (!pad_enlarged && !this.hasObjectsToDraw() && !this.painters)) {\n if (this._fixed_size) return; // canvas cannot be enlarged in such mode\n if (!this.enlargeMain('toggle')) return;\n if (this.enlargeMain('state') == 'off') svg_can.property('pad_enlarged', null);\n } else if (!pad_enlarged) {\n this.enlargeMain(true, true);\n svg_can.property('pad_enlarged', this.pad);\n } else if (pad_enlarged === this.pad) {\n this.enlargeMain(false);\n svg_can.property('pad_enlarged', null);\n } else {\n console.error('missmatch with pad double click events');\n }\n\n let was_fast = this._fast_drawing;\n\n this.checkResize(true);\n\n if (this._fast_drawing != was_fast)\n this.showPadButtons();\n }\n\n /** @summary Create SVG element for the pad\n * @return true when pad is displayed and all its items should be redrawn */\n createPadSvg(only_resize) {\n\n if (!this.has_canvas) {\n this.createCanvasSvg(only_resize ? 2 : 0);\n return true;\n }\n\n let svg_parent = this.getPadSvg(this.pad_name), // this.pad_name MUST be here to select parent pad\n svg_can = this.getCanvSvg(),\n width = svg_parent.property('draw_width'),\n height = svg_parent.property('draw_height'),\n pad_enlarged = svg_can.property('pad_enlarged'),\n pad_visible = true,\n w = width, h = height, x = 0, y = 0,\n svg_pad = null, svg_rect = null, btns = null;\n\n if (this.pad && this.pad.fPos && this.pad.fSize) {\n x = Math.round(width * this.pad.fPos.fHoriz.fArr[0]);\n y = Math.round(height * this.pad.fPos.fVert.fArr[0]);\n w = Math.round(width * this.pad.fSize.fHoriz.fArr[0]);\n h = Math.round(height * this.pad.fSize.fVert.fArr[0]);\n }\n\n if (pad_enlarged) {\n pad_visible = false;\n if (pad_enlarged === this.pad)\n pad_visible = true;\n else\n this.forEachPainterInPad(pp => { if (pp.getObject() == pad_enlarged) pad_visible = true; }, 'pads');\n\n if (pad_visible) { w = width; h = height; x = y = 0; }\n }\n\n if (only_resize) {\n svg_pad = this.svg_this_pad();\n svg_rect = svg_pad.select('.root_pad_border');\n if (!isBatchMode())\n btns = this.getLayerSvg('btns_layer', this.this_pad_name);\n } else {\n svg_pad = svg_parent.select('.primitives_layer')\n .append('svg:svg') // here was g before, svg used to blend all drawin outside\n .classed('__root_pad_' + this.this_pad_name, true)\n .attr('pad', this.this_pad_name) // set extra attribute to mark pad name\n .property('pad_painter', this); // this is custom property\n\n if (!isBatchMode())\n svg_pad.append('svg:title').text('ROOT subpad');\n\n svg_rect = svg_pad.append('svg:path').attr('class', 'root_pad_border');\n\n svg_pad.append('svg:g').attr('class','primitives_layer');\n if (!isBatchMode())\n btns = svg_pad.append('svg:g')\n .attr('class','btns_layer')\n .property('leftside', settings.ToolBarSide != 'left')\n .property('vertical', settings.ToolBarVert);\n\n if (settings.ContextMenu)\n svg_rect.on('contextmenu', evnt => this.padContextMenu(evnt));\n\n if (!isBatchMode())\n svg_rect.style('pointer-events', 'visibleFill') // get events also for not visible rect\n .on('dblclick', evnt => this.enlargePad(evnt))\n .on('click', () => this.selectObjectPainter(this, null))\n .on('mouseenter', () => this.showObjectStatus());\n }\n\n this.createAttFill({ attr: this.pad });\n\n this.createAttLine({ attr: this.pad, color0: this.pad.fBorderMode == 0 ? 'none' : '' });\n\n svg_pad.style('display', pad_visible ? null : 'none')\n .attr('viewBox', `0 0 ${w} ${h}`) // due to svg\n .attr('preserveAspectRatio', 'none') // due to svg, we do not preserve relative ratio\n .attr('x', x) // due to svg\n .attr('y', y) // due to svg\n .attr('width', w) // due to svg\n .attr('height', h) // due to svg\n .property('draw_x', x) // this is to make similar with canvas\n .property('draw_y', y)\n .property('draw_width', w)\n .property('draw_height', h);\n\n this._pad_x = x;\n this._pad_y = y;\n this._pad_width = w;\n this._pad_height = h;\n\n svg_rect.attr('d', `M0,0H${w}V${h}H0Z`)\n .call(this.fillatt.func)\n .call(this.lineatt.func);\n\n this._fast_drawing = settings.SmallPad && ((w < settings.SmallPad.width) || (h < settings.SmallPad.height));\n\n // special case of 3D canvas overlay\n if (svg_pad.property('can3d') === constants.Embed3D.Overlay)\n this.selectDom().select('.draw3d_' + this.this_pad_name)\n .style('display', pad_visible ? '' : 'none');\n\n if (this.alignButtons && btns) this.alignButtons(btns, w, h);\n\n return pad_visible;\n }\n\n /** @summary returns true if any objects beside sub-pads exists in the pad */\n hasObjectsToDraw() {\n let arr = this.pad ? this.pad.fPrimitives : null;\n return arr && arr.find(obj => obj._typename != 'ROOT::Experimental::RPadDisplayItem') ? true : false;\n }\n\n /** @summary sync drawing/redrawing/resize of the pad\n * @param {string} kind - kind of draw operation, if true - always queued\n * @return {Promise} when pad is ready for draw operation or false if operation already queued\n * @private */\n syncDraw(kind) {\n let entry = { kind : kind || 'redraw' };\n if (this._doing_draw === undefined) {\n this._doing_draw = [ entry ];\n return Promise.resolve(true);\n }\n // if queued operation registered, ignore next calls, indx == 0 is running operation\n if ((entry.kind !== true) && (this._doing_draw.findIndex((e,i) => (i > 0) && (e.kind == entry.kind)) > 0))\n return false;\n this._doing_draw.push(entry);\n return new Promise(resolveFunc => {\n entry.func = resolveFunc;\n });\n }\n\n /** @summary confirms that drawing is completed, may trigger next drawing immediately\n * @private */\n confirmDraw() {\n if (this._doing_draw === undefined)\n return console.warn('failure, should not happen');\n this._doing_draw.shift();\n if (this._doing_draw.length == 0) {\n delete this._doing_draw;\n } else {\n let entry = this._doing_draw[0];\n if(entry.func) { entry.func(); delete entry.func; }\n }\n }\n\n /** @summary Draw single primitive */\n async drawObject(/*dom, obj, opt*/) {\n console.log('Not possible to draw object without loading of draw.mjs');\n return null;\n }\n\n /** @summary Draw pad primitives\n * @private */\n async drawPrimitives(indx) {\n\n if (indx === undefined) {\n if (this.iscan)\n this._start_tm = new Date().getTime();\n\n // set number of primitves\n this._num_primitives = this.pad && this.pad.fPrimitives ? this.pad.fPrimitives.length : 0;\n\n return this.syncDraw(true).then(() => this.drawPrimitives(0));\n }\n\n if (!this.pad || (indx >= this._num_primitives)) {\n\n this.confirmDraw();\n\n if (this._start_tm) {\n let spenttm = new Date().getTime() - this._start_tm;\n if (spenttm > 3000) console.log(`Canvas drawing took ${(spenttm*1e-3).toFixed(2)}s`);\n delete this._start_tm;\n }\n\n return;\n }\n\n // handle used to invoke callback only when necessary\n return this.drawObject(this.getDom(), this.pad.fPrimitives[indx], '').then(ppainter => {\n // mark painter as belonging to primitives\n if (isObject(ppainter))\n ppainter._primitive = true;\n\n return this.drawPrimitives(indx+1);\n });\n }\n\n /** @summary Process tooltip event in the pad\n * @private */\n processPadTooltipEvent(pnt) {\n let painters = [], hints = [];\n\n // first count - how many processors are there\n if (this.painters !== null)\n this.painters.forEach(obj => {\n if (isFunc(obj.processTooltipEvent)) painters.push(obj);\n });\n\n if (pnt) pnt.nproc = painters.length;\n\n painters.forEach(obj => {\n let hint = obj.processTooltipEvent(pnt);\n if (!hint) hint = { user_info: null };\n hints.push(hint);\n if (pnt && pnt.painters) hint.painter = obj;\n });\n\n return hints;\n }\n\n /** @summary Changes canvas dark mode\n * @private */\n changeDarkMode(mode) {\n this.getCanvSvg().style('filter', (mode ?? settings.DarkMode) ? 'invert(100%)' : null);\n }\n\n /** @summary Fill pad context menu\n * @private */\n fillContextMenu(menu) {\n\n if (this.iscan)\n menu.add('header: RCanvas');\n else\n menu.add('header: RPad');\n\n menu.addchk(this.isTooltipAllowed(), 'Show tooltips', () => this.setTooltipAllowed('toggle'));\n\n if (!this._websocket) {\n menu.addAttributesMenu(this);\n if (this.iscan)\n menu.addSettingsMenu(false, false, arg => {\n if (arg == 'dark') this.changeDarkMode();\n });\n }\n\n menu.add('separator');\n\n if (isFunc(this.hasMenuBar) && isFunc(this.actiavteMenuBar))\n menu.addchk(this.hasMenuBar(), 'Menu bar', flag => this.actiavteMenuBar(flag));\n\n if (isFunc(this.hasEventStatus) && isFunc(this.activateStatusBar))\n menu.addchk(this.hasEventStatus(), 'Event status', () => this.activateStatusBar('toggle'));\n\n if (this.enlargeMain() || (this.has_canvas && this.hasObjectsToDraw()))\n menu.addchk((this.enlargeMain('state') == 'on'), 'Enlarge ' + (this.iscan ? 'canvas' : 'pad'), () => this.enlargePad());\n\n let fname = this.this_pad_name || (this.iscan ? 'canvas' : 'pad');\n menu.add(`Save as ${fname}.png`, fname+'.png', arg => this.saveAs('png', false, arg));\n menu.add(`Save as ${fname}.svg`, fname+'.svg', arg => this.saveAs('svg', false, arg));\n\n return true;\n }\n\n /** @summary Show pad context menu\n * @private */\n padContextMenu(evnt) {\n if (evnt.stopPropagation) {\n let pos = d3_pointer(evnt, this.svg_this_pad().node());\n // this is normal event processing and not emulated jsroot event\n // for debug purposes keep original context menu for small region in top-left corner\n if ((pos.length==2) && (pos[0] >= 0) && (pos[0] < 10) && (pos[1] >= 0) && (pos[1] < 10)) return;\n\n evnt.stopPropagation(); // disable main context menu\n evnt.preventDefault(); // disable browser context menu\n\n this.getFramePainter()?.setLastEventPos();\n }\n\n createMenu(evnt, this).then(menu => {\n this.fillContextMenu(menu);\n return this.fillObjectExecMenu(menu);\n }).then(menu => menu.show());\n }\n\n /** @summary Redraw pad means redraw ourself\n * @return {Promise} when redrawing ready */\n async redrawPad(reason) {\n\n let sync_promise = this.syncDraw(reason);\n if (sync_promise === false) {\n console.log('Prevent RPad redrawing');\n return false;\n }\n\n let showsubitems = true;\n let redrawNext = indx => {\n while (indx < this.painters.length) {\n let sub = this.painters[indx++], res = 0;\n if (showsubitems || sub.this_pad_name)\n res = sub.redraw(reason);\n\n if (isPromise(res))\n return res.then(() => redrawNext(indx));\n }\n return true;\n };\n\n return sync_promise.then(() => {\n if (this.iscan) {\n this.createCanvasSvg(2);\n } else {\n showsubitems = this.createPadSvg(true);\n }\n return redrawNext(0);\n }).then(() => {\n if (getActivePad() === this)\n this.getCanvPainter()?.producePadEvent('padredraw', this);\n this.confirmDraw();\n return true;\n });\n }\n\n /** @summary redraw pad */\n redraw(reason) {\n return this.redrawPad(reason);\n }\n\n\n /** @summary Checks if pad should be redrawn by resize\n * @private */\n needRedrawByResize() {\n let elem = this.svg_this_pad();\n if (!elem.empty() && elem.property('can3d') === constants.Embed3D.Overlay) return true;\n\n for (let i = 0; i < this.painters.length; ++i)\n if (isFunc(this.painters[i].needRedrawByResize))\n if (this.painters[i].needRedrawByResize()) return true;\n\n return false;\n }\n\n /** @summary Check resize of canvas */\n checkCanvasResize(size, force) {\n\n if (!this.iscan && this.has_canvas) return false;\n\n let sync_promise = this.syncDraw('canvas_resize');\n if (sync_promise === false) return false;\n\n if ((size === true) || (size === false)) { force = size; size = null; }\n\n if (isObject(size) && size.force) force = true;\n\n if (!force) force = this.needRedrawByResize();\n\n let changed = false,\n redrawNext = indx => {\n if (!changed || (indx >= this.painters.length)) {\n this.confirmDraw();\n return changed;\n }\n\n return getPromise(this.painters[indx].redraw(force ? 'redraw' : 'resize')).then(() => redrawNext(indx+1));\n };\n\n return sync_promise.then(() => {\n\n changed = this.createCanvasSvg(force ? 2 : 1, size);\n\n // if canvas changed, redraw all its subitems.\n // If redrawing was forced for canvas, same applied for sub-elements\n return redrawNext(0);\n });\n }\n\n /** @summary update RPad object\n * @private */\n updateObject(obj) {\n if (!obj) return false;\n\n this.pad.fStyle = obj.fStyle;\n this.pad.fAttr = obj.fAttr;\n\n if (this.iscan) {\n this.pad.fTitle = obj.fTitle;\n this.pad.fWinSize = obj.fWinSize;\n } else {\n this.pad.fPos = obj.fPos;\n this.pad.fSize = obj.fSize;\n }\n\n return true;\n }\n\n\n /** @summary Add object painter to list of primitives\n * @private */\n addObjectPainter(objpainter, lst, indx) {\n if (objpainter && lst && lst[indx] && (objpainter.snapid === undefined)) {\n // keep snap id in painter, will be used for the\n if (this.painters.indexOf(objpainter) < 0)\n this.painters.push(objpainter);\n objpainter.assignSnapId(lst[indx].fObjectID);\n if (!objpainter.rstyle) objpainter.rstyle = lst[indx].fStyle || this.rstyle;\n }\n }\n\n /** @summary Extract properties from TObjectDisplayItem */\n extractTObjectProp(snap) {\n if (snap.fColIndex && snap.fColValue) {\n let colors = this.root_colors || getRootColors();\n for (let k = 0; k < snap.fColIndex.length; ++k)\n colors[snap.fColIndex[k]] = snap.fColValue[k];\n }\n\n // painter used only for evaluation of attributes\n let pattr = new RObjectPainter(), obj = snap.fObject;\n pattr.assignObject(snap);\n pattr.csstype = snap.fCssType;\n pattr.rstyle = snap.fStyle;\n\n snap.fOption = pattr.v7EvalAttr('options', '');\n\n const extract_color = (member_name, attr_name) => {\n let col = pattr.v7EvalColor(attr_name, '');\n if (col) obj[member_name] = addColor(col, this.root_colors);\n };\n\n // handle TAttLine\n if ((obj.fLineColor !== undefined) && (obj.fLineWidth !== undefined) && (obj.fLineStyle !== undefined)) {\n extract_color('fLineColor', 'line_color');\n obj.fLineWidth = pattr.v7EvalAttr('line_width', obj.fLineWidth);\n obj.fLineStyle = pattr.v7EvalAttr('line_style', obj.fLineStyle);\n }\n\n // handle TAttFill\n if ((obj.fFillColor !== undefined) && (obj.fFillStyle !== undefined)) {\n extract_color('fFillColor', 'fill_color');\n obj.fFillStyle = pattr.v7EvalAttr('fill_style', obj.fFillStyle);\n }\n\n // handle TAttMarker\n if ((obj.fMarkerColor !== undefined) && (obj.fMarkerStyle !== undefined) && (obj.fMarkerSize !== undefined)) {\n extract_color('fMarkerColor', 'marker_color');\n obj.fMarkerStyle = pattr.v7EvalAttr('marker_style', obj.fMarkerStyle);\n obj.fMarkerSize = pattr.v7EvalAttr('marker_size', obj.fMarkerSize);\n }\n\n // handle TAttText\n if ((obj.fTextColor !== undefined) && (obj.fTextAlign !== undefined) && (obj.fTextAngle !== undefined) && (obj.fTextSize !== undefined)) {\n extract_color('fTextColor', 'text_color');\n obj.fTextAlign = pattr.v7EvalAttr('text_align', obj.fTextAlign);\n obj.fTextAngle = pattr.v7EvalAttr('text_angle', obj.fTextAngle);\n obj.fTextSize = pattr.v7EvalAttr('text_size', obj.fTextSize);\n // TODO: v7 font handling differs much from v6, ignore for the moment\n }\n }\n\n /** @summary Function called when drawing next snapshot from the list\n * @return {Promise} with pad painter when ready\n * @private */\n async drawNextSnap(lst, indx) {\n\n if (indx === undefined) {\n indx = -1;\n // flag used to prevent immediate pad redraw during first draw\n this._snaps_map = {}; // to control how much snaps are drawn\n this._num_primitives = lst ? lst.length : 0;\n this._auto_color_cnt = 0;\n }\n\n delete this.next_rstyle;\n\n ++indx; // change to the next snap\n\n if (!lst || indx >= lst.length) {\n delete this._snaps_map;\n delete this._auto_color_cnt;\n return this;\n }\n\n let snap = lst[indx],\n snapid = snap.fObjectID,\n cnt = this._snaps_map[snapid],\n objpainter = null;\n\n if (cnt) cnt++; else cnt=1;\n this._snaps_map[snapid] = cnt; // check how many objects with same snapid drawn, use them again\n\n // empty object, no need to do something, take next\n if (snap.fDummy) return this.drawNextSnap(lst, indx);\n\n // first appropriate painter for the object\n // if same object drawn twice, two painters will exists\n for (let k = 0; k < this.painters.length; ++k) {\n if (this.painters[k].snapid === snapid)\n if (--cnt === 0) { objpainter = this.painters[k]; break; }\n }\n\n if (objpainter) {\n\n if (snap._typename == 'ROOT::Experimental::RPadDisplayItem') // subpad\n return objpainter.redrawPadSnap(snap).then(ppainter => {\n this.addObjectPainter(ppainter, lst, indx);\n return this.drawNextSnap(lst, indx);\n });\n\n if (snap._typename === 'ROOT::Experimental::TObjectDisplayItem')\n this.extractTObjectProp(snap);\n\n let promise;\n\n if (objpainter.updateObject(snap.fDrawable || snap.fObject || snap, snap.fOption || '', true))\n promise = objpainter.redraw();\n\n return getPromise(promise).then(() => this.drawNextSnap(lst, indx)); // call next\n }\n\n if (snap._typename == 'ROOT::Experimental::RPadDisplayItem') { // subpad\n\n let subpad = snap; // not subpad, but just attributes\n\n let padpainter = new RPadPainter(this.getDom(), subpad, false);\n padpainter.decodeOptions('');\n padpainter.addToPadPrimitives(this.this_pad_name); // only set parent pad name\n padpainter.assignSnapId(snap.fObjectID);\n padpainter.rstyle = snap.fStyle;\n\n padpainter.createPadSvg();\n\n if (snap.fPrimitives && snap.fPrimitives.length > 0)\n padpainter.addPadButtons();\n\n // we select current pad, where all drawing is performed\n let prev_name = padpainter.selectCurrentPad(padpainter.this_pad_name);\n\n return padpainter.drawNextSnap(snap.fPrimitives).then(() => {\n padpainter.selectCurrentPad(prev_name);\n return this.drawNextSnap(lst, indx);\n });\n }\n\n // will be used in addToPadPrimitives to assign style to sub-painters\n this.next_rstyle = lst[indx].fStyle || this.rstyle;\n\n if (snap._typename === 'ROOT::Experimental::TObjectDisplayItem') {\n\n // identifier used in RObjectDrawable\n const webSnapIds = { kNone: 0, kObject: 1, kColors: 4, kStyle: 5, kPalette: 6 };\n\n if (snap.fKind == webSnapIds.kStyle) {\n Object.assign(gStyle, snap.fObject);\n return this.drawNextSnap(lst, indx);\n }\n\n if (snap.fKind == webSnapIds.kColors) {\n let ListOfColors = [], arr = snap.fObject.arr;\n for (let n = 0; n < arr.length; ++n) {\n let name = arr[n].fString, p = name.indexOf('=');\n if (p > 0)\n ListOfColors[parseInt(name.slice(0,p))] = name.slice(p+1);\n }\n\n this.root_colors = ListOfColors;\n // set global list of colors\n // adoptRootColors(ListOfColors);\n return this.drawNextSnap(lst, indx);\n }\n\n if (snap.fKind == webSnapIds.kPalette) {\n let arr = snap.fObject.arr, palette = [];\n for (let n = 0; n < arr.length; ++n)\n palette[n] = arr[n].fString;\n this.custom_palette = new ColorPalette(palette);\n return this.drawNextSnap(lst, indx);\n }\n\n if (!this.getFramePainter())\n return this.drawObject(this.getDom(), { _typename: 'TFrame', $dummy: true }, '')\n .then(() => this.drawNextSnap(lst, indx-1)); // call same object again\n\n this.extractTObjectProp(snap);\n }\n\n // TODO - fDrawable is v7, fObject from v6, maybe use same data member?\n return this.drawObject(this.getDom(), snap.fDrawable || snap.fObject || snap, snap.fOption || '').then(objpainter => {\n this.addObjectPainter(objpainter, lst, indx);\n return this.drawNextSnap(lst, indx);\n });\n }\n\n /** @summary Search painter with specified snapid, also sub-pads are checked\n * @private */\n findSnap(snapid, onlyid) {\n\n function check(checkid) {\n if (!checkid || !isStr(checkid)) return false;\n if (checkid == snapid) return true;\n return onlyid && (checkid.length > snapid.length) &&\n (checkid.indexOf(snapid) == (checkid.length - snapid.length));\n }\n\n if (check(this.snapid)) return this;\n\n if (!this.painters) return null;\n\n for (let k=0;k {\n if (sub && (prim.fObjectID === sub.snapid)) {\n sub = null; isanyfound = true;\n }\n });\n\n if (sub) {\n // remove painter which does not found in the list of snaps\n this.painters.splice(k--,1);\n sub.cleanup(); // cleanup such painter\n isanyremove = true;\n if (this.main_painter_ref === sub)\n delete this.main_painter_ref;\n }\n }\n\n if (isanyremove)\n delete this.pads_cache;\n\n if (!isanyfound) {\n let fp = this.getFramePainter();\n // cannot preserve ROOT6 frame - it must be recreated\n if (fp?.is_root6()) fp = null;\n for (let k = 0; k < this.painters.length; ++k)\n if (fp !== this.painters[k])\n this.painters[k].cleanup();\n this.painters = [];\n delete this.main_painter_ref;\n if (fp) {\n this.painters.push(fp);\n fp.cleanFrameDrawings();\n fp.redraw(); // need to create all layers again\n }\n if (this.removePadButtons) this.removePadButtons();\n this.addPadButtons(true);\n }\n\n let prev_name = this.selectCurrentPad(this.this_pad_name);\n\n return this.drawNextSnap(snap.fPrimitives).then(() => {\n this.selectCurrentPad(prev_name);\n\n if (getActivePad() === this)\n this.getCanvPainter()?.producePadEvent('padredraw', this);\n return this;\n });\n }\n\n /** @summary Create image for the pad\n * @desc Used with web-based canvas to create images for server side\n * @return {Promise} with image data, coded with btoa() function\n * @private */\n async createImage(format) {\n // use https://github.com/MrRio/jsPDF in the future here\n if (format == 'pdf')\n return btoa_func('dummy PDF file');\n\n if ((format == 'png') || (format == 'jpeg') || (format == 'svg'))\n return this.produceImage(true, format).then(res => {\n if (!res || (format == 'svg')) return res;\n let separ = res.indexOf('base64,');\n return (separ > 0) ? res.slice(separ+7) : '';\n });\n\n return '';\n }\n\n /** @summary Show context menu for specified item\n * @private */\n itemContextMenu(name) {\n let rrr = this.svg_this_pad().node().getBoundingClientRect(),\n evnt = { clientX: rrr.left+10, clientY: rrr.top + 10 };\n\n // use timeout to avoid conflict with mouse click and automatic menu close\n if (name == 'pad')\n return setTimeout(() => this.padContextMenu(evnt), 50);\n\n let selp = null, selkind;\n\n switch(name) {\n case 'xaxis':\n case 'yaxis':\n case 'zaxis':\n selp = this.getMainPainter();\n selkind = name[0];\n break;\n case 'frame':\n selp = this.getFramePainter();\n break;\n default: {\n let indx = parseInt(name);\n if (Number.isInteger(indx)) selp = this.painters[indx];\n }\n }\n\n if (!isFunc(selp?.fillContextMenu)) return;\n\n createMenu(evnt, selp).then(menu => {\n if (selp.fillContextMenu(menu, selkind))\n selp.fillObjectExecMenu(menu, selkind).then(() => setTimeout(() => menu.show(), 50));\n });\n }\n\n /** @summary Save pad in specified format\n * @desc Used from context menu */\n saveAs(kind, full_canvas, filename) {\n if (!filename)\n filename = (this.this_pad_name || (this.iscan ? 'canvas' : 'pad')) + '.' + kind;\n\n this.produceImage(full_canvas, kind).then(imgdata => {\n if (!imgdata)\n return console.error(`Fail to produce image ${filename}`);\n\n saveFile(filename, (kind != 'svg') ? imgdata : 'data:image/svg+xml;charset=utf-8,'+encodeURIComponent(imgdata));\n });\n }\n\n /** @summary Search active pad\n * @return {Object} pad painter for active pad */\n findActivePad() {\n return null;\n }\n\n /** @summary Prodce image for the pad\n * @return {Promise} with created image */\n async produceImage(full_canvas, file_format) {\n\n let use_frame = (full_canvas === 'frame'),\n elem = use_frame ? this.getFrameSvg(this.this_pad_name) : (full_canvas ? this.getCanvSvg() : this.svg_this_pad()),\n painter = (full_canvas && !use_frame) ? this.getCanvPainter() : this,\n items = []; // keep list of replaced elements, which should be moved back at the end\n\n if (elem.empty())\n return '';\n\n if (!use_frame) // do not make transformations for the frame\n painter.forEachPainterInPad(pp => {\n\n let item = { prnt: pp.svg_this_pad() };\n items.push(item);\n\n // remove buttons from each subpad\n let btns = pp.getLayerSvg('btns_layer', this.this_pad_name);\n item.btns_node = btns.node();\n if (item.btns_node) {\n item.btns_prnt = item.btns_node.parentNode;\n item.btns_next = item.btns_node.nextSibling;\n btns.remove();\n }\n\n let main = pp.getFramePainter();\n if (!main || !isFunc(main.render3D) || !isFunc(main.access3dKind)) return;\n\n let can3d = main.access3dKind();\n\n if ((can3d !== constants.Embed3D.Overlay) && (can3d !== constants.Embed3D.Embed)) return;\n\n let sz2 = main.getSizeFor3d(constants.Embed3D.Embed), // get size and position of DOM element as it will be embed\n canvas = main.renderer.domElement;\n\n main.render3D(0); // WebGL clears buffers, therefore we should render scene and convert immediately\n\n let dataUrl = canvas.toDataURL('image/png');\n\n // remove 3D drawings\n\n if (can3d === constants.Embed3D.Embed) {\n item.foreign = item.prnt.select('.' + sz2.clname);\n item.foreign.remove();\n }\n\n let svg_frame = main.getFrameSvg();\n item.frame_node = svg_frame.node();\n if (item.frame_node) {\n item.frame_next = item.frame_node.nextSibling;\n svg_frame.remove();\n }\n\n // add svg image\n item.img = item.prnt.insert('image','.primitives_layer') // create image object\n .attr('x', sz2.x)\n .attr('y', sz2.y)\n .attr('width', canvas.width)\n .attr('height', canvas.height)\n .attr('href', dataUrl);\n\n }, 'pads');\n\n const reEncode = data => {\n data = encodeURIComponent(data);\n data = data.replace(/%([0-9A-F]{2})/g, function(match, p1) {\n let c = String.fromCharCode('0x'+p1);\n return c === '%' ? '%25' : c;\n });\n return decodeURIComponent(data);\n }, reconstruct = () => {\n for (let k = 0; k < items.length; ++k) {\n let item = items[k];\n\n if (item.img)\n item.img.remove(); // delete embed image\n\n let prim = item.prnt.select('.primitives_layer');\n\n if (item.foreign) // reinsert foreign object\n item.prnt.node().insertBefore(item.foreign.node(), prim.node());\n\n if (item.frame_node) // reinsert frame as first in list of primitives\n prim.node().insertBefore(item.frame_node, item.frame_next);\n\n if (item.btns_node) // reinsert buttons\n item.btns_prnt.insertBefore(item.btns_node, item.btns_next);\n }\n };\n\n let width = elem.property('draw_width'), height = elem.property('draw_height');\n if (use_frame) {\n let fp = this.getFramePainter();\n width = fp.getFrameWidth();\n height = fp.getFrameHeight();\n }\n\n let svg = `${elem.node().innerHTML}`;\n\n if (internals.processSvgWorkarounds)\n svg = internals.processSvgWorkarounds(svg);\n\n svg = compressSVG(svg);\n\n if (file_format == 'svg') {\n reconstruct();\n return svg; // return SVG file as is\n }\n\n let doctype = '',\n image = new Image();\n\n return new Promise(resolveFunc => {\n image.onload = function() {\n let canvas = document.createElement('canvas');\n canvas.width = image.width;\n canvas.height = image.height;\n let context = canvas.getContext('2d');\n context.drawImage(image, 0, 0);\n\n reconstruct();\n\n resolveFunc(canvas.toDataURL('image/' + file_format));\n }\n\n image.onerror = function(arg) {\n console.log(`IMAGE ERROR ${arg}`);\n reconstruct();\n resolveFunc(null);\n }\n\n image.src = 'data:image/svg+xml;base64,' + btoa_func(reEncode(doctype + svg));\n });\n }\n\n /** @summary Process pad button click */\n clickPadButton(funcname, evnt) {\n\n if (funcname == 'CanvasSnapShot')\n return this.saveAs('png', true);\n\n if (funcname == 'enlargePad')\n return this.enlargePad();\n\n if (funcname == 'PadSnapShot')\n return this.saveAs('png', false);\n\n if (funcname == 'PadContextMenus') {\n\n if (evnt) {\n evnt.preventDefault();\n evnt.stopPropagation();\n }\n\n if (closeMenu()) return;\n\n createMenu(evnt, this).then(menu => {\n menu.add('header:Menus');\n\n if (this.iscan)\n menu.add('Canvas', 'pad', this.itemContextMenu);\n else\n menu.add('Pad', 'pad', this.itemContextMenu);\n\n if (this.getFramePainter())\n menu.add('Frame', 'frame', this.itemContextMenu);\n\n let main = this.getMainPainter(); // here hist painter methods\n\n if (main) {\n menu.add('X axis', 'xaxis', this.itemContextMenu);\n menu.add('Y axis', 'yaxis', this.itemContextMenu);\n if (isFunc(main.getDimension) && (main.getDimension() > 1))\n menu.add('Z axis', 'zaxis', this.itemContextMenu);\n }\n\n if (this.painters?.length) {\n menu.add('separator');\n let shown = [];\n for (let n = 0; n < this.painters.length; ++n) {\n let obj = this.painters[n]?.getObject();\n if (!obj || (shown.indexOf(obj) >= 0)) continue;\n\n let name = obj._typename ? obj._typename + '::' : '';\n if (obj.fName) name += obj.fName;\n if (!name) name = 'item' + n;\n menu.add(name, n, this.itemContextMenu);\n }\n }\n\n menu.show();\n });\n\n return;\n }\n\n // click automatically goes to all sub-pads\n // if any painter indicates that processing completed, it returns true\n let done = false;\n\n for (let i = 0; i < this.painters.length; ++i) {\n let pp = this.painters[i];\n\n if (isFunc(pp.clickPadButton))\n pp.clickPadButton(funcname);\n\n if (!done && isFunc(pp.clickButton))\n done = pp.clickButton(funcname);\n }\n }\n\n /** @summary Add button to the pad\n * @private */\n addPadButton(btn, tooltip, funcname, keyname) {\n if (!settings.ToolBar || isBatchMode() || this.batch_mode) return;\n\n if (!this._buttons) this._buttons = [];\n // check if there are duplications\n\n for (let k = 0; k < this._buttons.length; ++k)\n if (this._buttons[k].funcname == funcname) return;\n\n this._buttons.push({ btn, tooltip, funcname, keyname });\n\n let iscan = this.iscan || !this.has_canvas;\n if (!iscan && (funcname.indexOf('Pad') != 0) && (funcname !== 'enlargePad')) {\n let cp = this.getCanvPainter();\n if (cp && (cp !== this)) cp.addPadButton(btn, tooltip, funcname);\n }\n }\n\n /** @summary Add buttons for pad or canvas\n * @private */\n addPadButtons(is_online) {\n\n this.addPadButton('camera', 'Create PNG', this.iscan ? 'CanvasSnapShot' : 'PadSnapShot', 'Ctrl PrintScreen');\n\n if (settings.ContextMenu)\n this.addPadButton('question', 'Access context menus', 'PadContextMenus');\n\n let add_enlarge = !this.iscan && this.has_canvas && this.hasObjectsToDraw()\n\n if (add_enlarge || this.enlargeMain('verify'))\n this.addPadButton('circle', 'Enlarge canvas', 'enlargePad');\n\n if (is_online && this.brlayout) {\n this.addPadButton('diamand', 'Toggle Ged', 'ToggleGed');\n this.addPadButton('three_circles', 'Toggle Status', 'ToggleStatus');\n }\n\n }\n\n /** @summary Show pad buttons\n * @private */\n showPadButtons() {\n if (!this._buttons) return;\n\n PadButtonsHandler.assign(this);\n this.showPadButtons();\n }\n\n /** @summary Calculates RPadLength value */\n getPadLength(vertical, len, frame_painter) {\n let sign = vertical ? -1 : 1,\n rect, res,\n getV = (indx, dflt) => (indx < len.fArr.length) ? len.fArr[indx] : dflt,\n getRect = () => {\n if (!rect)\n rect = frame_painter ? frame_painter.getFrameRect() : this.getPadRect();\n return rect;\n };\n\n if (frame_painter) {\n let user = getV(2), func = vertical ? 'gry' : 'grx';\n if ((user !== undefined) && frame_painter[func])\n res = frame_painter[func](user);\n }\n\n if (res === undefined)\n res = vertical ? getRect().height : 0;\n\n let norm = getV(0, 0), pixel = getV(1, 0);\n\n res += sign*pixel;\n\n if (norm)\n res += sign * (vertical ? getRect().height : getRect().width) * norm;\n\n return Math.round(res);\n }\n\n\n /** @summary Calculates pad position for RPadPos values\n * @param {object} pos - instance of RPadPos\n * @param {object} frame_painter - if drawing will be performed inside frame, frame painter */\n getCoordinate(pos, frame_painter) {\n return {\n x: this.getPadLength(false, pos.fHoriz, frame_painter),\n y: this.getPadLength(true, pos.fVert, frame_painter)\n }\n }\n\n /** @summary Decode pad draw options */\n decodeOptions(opt) {\n let pad = this.getObject();\n if (!pad) return;\n\n let d = new DrawOptions(opt);\n\n if (!this.options) this.options = {};\n\n Object.assign(this.options, { GlobalColors: true, LocalColors: false, IgnorePalette: false, RotateFrame: false, FixFrame: false });\n\n if (d.check('NOCOLORS') || d.check('NOCOL')) this.options.GlobalColors = this.options.LocalColors = false;\n if (d.check('LCOLORS') || d.check('LCOL')) { this.options.GlobalColors = false; this.options.LocalColors = true; }\n if (d.check('NOPALETTE') || d.check('NOPAL')) this.options.IgnorePalette = true;\n if (d.check('ROTATE')) this.options.RotateFrame = true;\n if (d.check('FIXFRAME')) this.options.FixFrame = true;\n\n if (d.check('WHITE')) pad.fFillColor = 0;\n if (d.check('LOGX')) pad.fLogx = 1;\n if (d.check('LOGY')) pad.fLogy = 1;\n if (d.check('LOGZ')) pad.fLogz = 1;\n if (d.check('LOG')) pad.fLogx = pad.fLogy = pad.fLogz = 1;\n if (d.check('GRIDX')) pad.fGridx = 1;\n if (d.check('GRIDY')) pad.fGridy = 1;\n if (d.check('GRID')) pad.fGridx = pad.fGridy = 1;\n if (d.check('TICKX')) pad.fTickx = 1;\n if (d.check('TICKY')) pad.fTicky = 1;\n if (d.check('TICK')) pad.fTickx = pad.fTicky = 1;\n }\n\n /** @summary draw RPad object */\n static async draw(dom, pad, opt) {\n let painter = new RPadPainter(dom, pad, false);\n painter.decodeOptions(opt);\n\n if (painter.getCanvSvg().empty()) {\n painter.has_canvas = false;\n painter.this_pad_name = '';\n painter.setTopPainter();\n } else {\n painter.addToPadPrimitives(painter.pad_name); // must be here due to pad painter\n }\n\n painter.createPadSvg();\n\n if (painter.matchObjectType(clTPad) && (!painter.has_canvas || painter.hasObjectsToDraw())) {\n painter.addPadButtons();\n }\n\n // we select current pad, where all drawing is performed\n let prev_name = painter.has_canvas ? painter.selectCurrentPad(painter.this_pad_name) : undefined;\n\n selectActivePad({ pp: painter, active: false });\n\n // flag used to prevent immediate pad redraw during first draw\n return painter.drawPrimitives().then(() => {\n painter.showPadButtons();\n // we restore previous pad name\n painter.selectCurrentPad(prev_name);\n return painter;\n });\n }\n\n} // class RPadPainter\n\nexport { RPadPainter };\n","import { httpRequest, createHttpRequest, loadScript, decodeUrl,\n browser, setBatchMode, isBatchMode, isObject, isFunc, isStr, btoa_func } from './core.mjs';\nimport { closeCurrentWindow, showProgress, loadOpenui5 } from './gui/utils.mjs';\n\n\n/**\n * @summary Class emulating web socket with long-poll http requests\n *\n * @private\n */\n\nclass LongPollSocket {\n\n constructor(addr, _raw, _args) {\n this.path = addr;\n this.connid = null;\n this.req = null;\n this.raw = _raw;\n this.args = _args;\n\n this.nextRequest('', 'connect');\n }\n\n /** @summary Submit next request */\n nextRequest(data, kind) {\n let url = this.path, reqmode = 'buf', post = null;\n if (kind === 'connect') {\n url += this.raw ? '?raw_connect' : '?txt_connect';\n if (this.args) url += '&' + this.args;\n console.log(`longpoll connect ${url} raw = ${this.raw}`);\n this.connid = 'connect';\n } else if (kind === 'close') {\n if ((this.connid === null) || (this.connid === 'close')) return;\n url += `?connection=${this.connid}&close`;\n this.connid = 'close';\n reqmode = 'text;sync'; // use sync mode to close connection before browser window closed\n } else if ((this.connid === null) || (typeof this.connid !== 'number')) {\n if (!browser.qt5) console.error('No connection');\n return;\n } else {\n url += '?connection=' + this.connid;\n if (kind === 'dummy') url += '&dummy';\n }\n\n if (data) {\n if (this.raw) {\n // special workaround to avoid POST request, use base64 coding\n url += '&post=' + btoa_func(data);\n } else {\n // send data with post request - most efficient way\n reqmode = 'postbuf';\n post = data;\n }\n }\n\n createHttpRequest(url, reqmode, function(res) {\n // this set to the request itself, res is response\n\n if (this.handle.req === this)\n this.handle.req = null; // get response for existing dummy request\n\n if (res === null)\n return this.handle.processRequest(null);\n\n if (this.handle.raw) {\n // raw mode - all kind of reply data packed into binary buffer\n // first 4 bytes header 'txt:' or 'bin:'\n // after the 'bin:' there is length of optional text argument like 'bin:14 :optional_text'\n // and immedaitely after text binary data. Server sends binary data so, that offset should be multiple of 8\n\n let str = '', i = 0, u8Arr = new Uint8Array(res), offset = u8Arr.length;\n if (offset < 4) {\n if (!browser.qt5) console.error(`longpoll got short message in raw mode ${offset}`);\n return this.handle.processRequest(null);\n }\n\n while (i < 4) str += String.fromCharCode(u8Arr[i++]);\n if (str != 'txt:') {\n str = '';\n while ((i < offset) && (String.fromCharCode(u8Arr[i]) != ':'))\n str += String.fromCharCode(u8Arr[i++]);\n ++i;\n offset = i + parseInt(str.trim());\n }\n\n str = '';\n while (i < offset) str += String.fromCharCode(u8Arr[i++]);\n\n if (str) {\n if (str == '<>')\n this.handle.processRequest(-1111);\n else\n this.handle.processRequest(str);\n }\n if (offset < u8Arr.length)\n this.handle.processRequest(res, offset);\n } else if (this.getResponseHeader('Content-Type') == 'application/x-binary') {\n // binary reply with optional header\n let extra_hdr = this.getResponseHeader('LongpollHeader');\n if (extra_hdr) this.handle.processRequest(extra_hdr);\n this.handle.processRequest(res, 0);\n } else {\n // text reply\n if (res && !isStr(res)) {\n let str = '', u8Arr = new Uint8Array(res);\n for (let i = 0; i < u8Arr.length; ++i)\n str += String.fromCharCode(u8Arr[i]);\n res = str;\n }\n if (res == '<>')\n this.handle.processRequest(-1111);\n else\n this.handle.processRequest(res);\n }\n }, function(/*err,status*/) {\n this.handle.processRequest(null, 'error');\n }, true).then(req => {\n req.handle = this;\n if (!this.req)\n this.req = req; // any request can be used for response, do not submit dummy until req is there\n req.send(post);\n });\n }\n\n /** @summary Process request */\n processRequest(res, _offset) {\n if (res === null) {\n if (isFunc(this.onerror))\n this.onerror('receive data with connid ' + (this.connid || '---'));\n if ((_offset == 'error') && isFunc(this.onclose))\n this.onclose('force_close');\n this.connid = null;\n return;\n } else if (res === -1111) {\n res = '';\n }\n\n let dummy_tmout = 5;\n\n if (this.connid === 'connect') {\n if (!res) {\n this.connid = null;\n if (isFunc(this.onerror))\n this.onerror('connection rejected');\n return;\n }\n\n this.connid = parseInt(res);\n dummy_tmout = 100; // when establishing connection, wait a bit longer to submit dummy package\n console.log(`Get new longpoll connection with id ${this.connid}`);\n if (isFunc(this.onopen))\n this.onopen();\n } else if (this.connid === 'close') {\n if (isFunc(this.onclose))\n this.onclose();\n return;\n } else {\n if (isFunc(this.onmessage) && res)\n this.onmessage({ data: res, offset: _offset });\n }\n\n // minimal timeout to reduce load, generate dummy only if client not submit new request immediately\n if (!this.req)\n setTimeout(() => { if (!this.req) this.nextRequest('', 'dummy'); }, dummy_tmout);\n }\n\n /** @summary Send data */\n send(str) { this.nextRequest(str); }\n\n /** @summary Close connection */\n close() { this.nextRequest('', 'close'); }\n\n} // class LongPollSocket\n\n// ========================================================================================\n\n/**\n * @summary Class re-playing socket data from stored protocol\n *\n * @private\n */\n\nclass FileDumpSocket {\n\n constructor(receiver) {\n this.receiver = receiver;\n this.protocol = [];\n this.cnt = 0;\n httpRequest('protocol.json', 'text').then(res => this.getProtocol(res));\n }\n\n /** @summary Get stored protocol */\n getProtocol(res) {\n if (!res) return;\n this.protocol = JSON.parse(res);\n if (isFunc(this.onopen)) this.onopen();\n this.nextOperation();\n }\n\n /** @summary Emulate send - just cound operation */\n send(/* str */) {\n if (this.protocol[this.cnt] == 'send') {\n this.cnt++;\n setTimeout(() => this.nextOperation(), 10);\n }\n }\n\n /** @summary Emulate close */\n close() {}\n\n /** @summary Read data for next operation */\n nextOperation() {\n // when file request running - just ignore\n if (this.wait_for_file) return;\n let fname = this.protocol[this.cnt];\n if (!fname) return;\n if (fname == 'send') return; // waiting for send\n this.wait_for_file = true;\n this.cnt++;\n httpRequest(fname, (fname.indexOf('.bin') > 0 ? 'buf' : 'text')).then(res => {\n this.wait_for_file = false;\n if (!res) return;\n if (this.receiver.provideData)\n this.receiver.provideData(1, res, 0);\n setTimeout(() => this.nextOperation(), 10);\n });\n }\n\n} // class FileDumpSocket\n\n\n/**\n * @summary Client communication handle for RWebWindow.\n *\n * @desc Should be created with {@link connectWebWindow} function\n */\n\nclass WebWindowHandle {\n\n constructor(socket_kind, credits) {\n this.kind = socket_kind;\n this.state = 0;\n this.credits = credits || 10;\n this.cansend = this.credits;\n this.ackn = this.credits;\n }\n\n /** @summary Returns arguments specified in the RWebWindow::SetUserArgs() method\n * @desc Can be any valid JSON expression. Undefined by default.\n * @param {string} [field] - if specified and user args is object, returns correspondent object member\n * @return user arguments object */\n getUserArgs(field) {\n if (field && isStr(field))\n return isObject(this.user_args) ? this.user_args[field] : undefined;\n\n return this.user_args;\n }\n\n /** @summary Set user args\n * @desc Normally set via RWebWindow::SetUserArgs() method */\n setUserArgs(args) { this.user_args = args; }\n\n /** @summary Set callbacks receiver.\n * @param {object} obj - object with receiver functions\n * @param {function} obj.onWebsocketMsg - called when new data receieved from RWebWindow\n * @param {function} obj.onWebsocketOpened - called when connection established\n * @param {function} obj.onWebsocketClosed - called when connection closed\n * @param {function} obj.onWebsocketError - called when get error via the connection */\n setReceiver(obj) { this.receiver = obj; }\n\n /** @summary Cleanup and close connection. */\n cleanup() {\n delete this.receiver;\n this.close(true);\n }\n\n /** @summary Invoke method in the receiver.\n * @private */\n invokeReceiver(brdcst, method, arg, arg2) {\n if (this.receiver && isFunc(this.receiver[method]))\n this.receiver[method](this, arg, arg2);\n\n if (brdcst && this.channels) {\n let ks = Object.keys(this.channels);\n for (let n = 0; n < ks.length; ++n)\n this.channels[ks[n]].invokeReceiver(false, method, arg, arg2);\n }\n }\n\n /** @summary Provide data for receiver. When no queue - do it directly.\n * @private */\n provideData(chid, _msg, _len) {\n if (this.wait_first_recv) {\n delete this.wait_first_recv;\n return this.invokeReceiver(false, 'onWebsocketOpened');\n }\n\n if ((chid > 1) && this.channels) {\n const channel = this.channels[chid];\n if (channel)\n return channel.provideData(1, _msg, _len);\n }\n\n const force_queue = _len && (_len < 0);\n\n if (!force_queue && (!this.msgqueue || !this.msgqueue.length))\n return this.invokeReceiver(false, 'onWebsocketMsg', _msg, _len);\n\n if (!this.msgqueue) this.msgqueue = [];\n if (force_queue) _len = undefined;\n\n this.msgqueue.push({ ready: true, msg: _msg, len: _len });\n }\n\n /** @summary Reserve entry in queue for data, which is not yet decoded.\n * @private */\n reserveQueueItem() {\n if (!this.msgqueue) this.msgqueue = [];\n let item = { ready: false, msg: null, len: 0 };\n this.msgqueue.push(item);\n return item;\n }\n\n /** @summary Provide data for item which was reserved before.\n * @private */\n markQueueItemDone(item, _msg, _len) {\n item.ready = true;\n item.msg = _msg;\n item.len = _len;\n this.processQueue();\n }\n\n /** @summary Process completed messages in the queue\n * @private */\n processQueue() {\n if (this._loop_msgqueue || !this.msgqueue) return;\n this._loop_msgqueue = true;\n while ((this.msgqueue.length > 0) && this.msgqueue[0].ready) {\n let front = this.msgqueue.shift();\n this.invokeReceiver(false, 'onWebsocketMsg', front.msg, front.len);\n }\n if (this.msgqueue.length == 0)\n delete this.msgqueue;\n delete this._loop_msgqueue;\n }\n\n /** @summary Close connection */\n close(force) {\n if (this.master) {\n this.master.send('CLOSECH=' + this.channelid, 0);\n delete this.master.channels[this.channelid];\n delete this.master;\n return;\n }\n\n if (this.timerid) {\n clearTimeout(this.timerid);\n delete this.timerid;\n }\n\n if (this._websocket && (this.state > 0)) {\n this.state = force ? -1 : 0; // -1 prevent socket from reopening\n this._websocket.onclose = null; // hide normal handler\n this._websocket.close();\n delete this._websocket;\n }\n }\n\n /** @summary Checks number of credits for send operation\n * @param {number} [numsend = 1] - number of required send operations\n * @return true if one allow to send specified number of text message to server */\n canSend(numsend) { return this.cansend >= (numsend || 1); }\n\n /** @summary Returns number of possible send operations relative to number of credits */\n getRelCanSend() { return !this.credits ? 1 : this.cansend / this.credits; }\n\n /** @summary Send text message via the connection.\n * @param {string} msg - text message to send\n * @param {number} [chid] - channel id, 1 by default, 0 used only for internal communication */\n send(msg, chid) {\n if (this.master)\n return this.master.send(msg, this.channelid);\n\n if (!this._websocket || (this.state <= 0)) return false;\n\n if (!Number.isInteger(chid)) chid = 1; // when not configured, channel 1 is used - main widget\n\n if (this.cansend <= 0) console.error(`should be queued before sending cansend: ${this.cansend}`);\n\n let prefix = `${this.ackn}:${this.cansend}:${chid}:`;\n this.ackn = 0;\n this.cansend--; // decrease number of allowed send packets\n\n this._websocket.send(prefix + msg);\n\n if ((this.kind === 'websocket') || (this.kind === 'longpoll')) {\n if (this.timerid) clearTimeout(this.timerid);\n this.timerid = setTimeout(() => this.keepAlive(), 10000);\n }\n\n return true;\n }\n\n /** @summary Inject message(s) into input queue, for debug purposes only\n * @private */\n inject(msg, chid, immediate) {\n // use timeout to avoid too deep call stack\n if (!immediate)\n return setTimeout(this.inject.bind(this, msg, chid, true), 0);\n\n if (chid === undefined) chid = 1;\n\n if (Array.isArray(msg)) {\n for (let k = 0; k < msg.length; ++k)\n this.provideData(chid, isStr(msg[k]) ? msg[k] : JSON.stringify(msg[k]), -1);\n this.processQueue();\n } else if (msg) {\n this.provideData(chid, isStr(msg) ? msg : JSON.stringify(msg));\n }\n }\n\n /** @summary Send keep-alive message.\n * @desc Only for internal use, only when used with websockets\n * @private */\n keepAlive() {\n delete this.timerid;\n this.send('KEEPALIVE', 0);\n }\n\n /** @summary Method open channel, which will share same connection, but can be used independently from main\n * @private */\n createChannel() {\n if (this.master)\n return master.createChannel();\n\n let channel = new WebWindowHandle('channel', this.credits);\n channel.wait_first_recv = true; // first received message via the channel is confirmation of established connection\n\n if (!this.channels) {\n this.channels = {};\n this.freechannelid = 2;\n }\n\n channel.master = this;\n channel.channelid = this.freechannelid++;\n\n // register\n this.channels[channel.channelid] = channel;\n\n // now server-side entity should be initialized and init message send from server side!\n return channel;\n }\n\n /** @summary Returns used channel ID, 1 by default */\n getChannelId() { return this.channelid && this.master ? this.channelid : 1; }\n\n /** @summary Assign href parameter\n * @param {string} [path] - absolute path, when not specified window.location.url will be used\n * @private */\n setHRef(path) { this.href = path; }\n\n /** @summary Return href part\n * @param {string} [relative_path] - relative path to the handle\n * @private */\n getHRef(relative_path) {\n if (!relative_path || !this.kind || !this.href) return this.href;\n\n let addr = this.href;\n if (relative_path.indexOf('../') == 0) {\n let ddd = addr.lastIndexOf('/',addr.length-2);\n addr = addr.slice(0,ddd) + relative_path.slice(2);\n } else {\n addr += relative_path;\n }\n\n return addr;\n }\n\n /** @summary Create configured socket for current object.\n * @private */\n connect(href) {\n\n this.close();\n if (!href && this.href) href = this.href;\n\n let ntry = 0, args = (this.key ? ('key=' + this.key) : '');\n if (this.token) {\n if (args) args += '&';\n args += 'token=' + this.token;\n }\n\n const retry_open = first_time => {\n\n if (this.state != 0) return;\n\n if (!first_time) console.log(`try connect window again ${new Date().toString()}`);\n\n if (this._websocket) {\n this._websocket.close();\n delete this._websocket;\n }\n\n if (!href) {\n href = window.location.href;\n if (href && href.indexOf('#') > 0) href = href.slice(0, href.indexOf('#'));\n if (href && href.lastIndexOf('/') > 0) href = href.slice(0, href.lastIndexOf('/') + 1);\n }\n this.href = href;\n ntry++;\n\n if (first_time) console.log(`Opening web socket at ${href}`);\n\n if (ntry > 2) showProgress(`Trying to connect ${href}`);\n\n let path = href;\n\n if (this.kind == 'file') {\n path += 'root.filedump';\n this._websocket = new FileDumpSocket(this);\n console.log(`configure protocol log ${path}`);\n } else if ((this.kind === 'websocket') && first_time) {\n path = path.replace('http://', 'ws://').replace('https://', 'wss://') + 'root.websocket';\n if (args) path += '?' + args;\n console.log(`configure websocket ${path}`);\n this._websocket = new WebSocket(path);\n } else {\n path += 'root.longpoll';\n console.log(`configure longpoll ${path}`);\n this._websocket = new LongPollSocket(path, (this.kind === 'rawlongpoll'), args);\n }\n\n if (!this._websocket) return;\n\n this._websocket.onopen = () => {\n if (ntry > 2) showProgress();\n this.state = 1;\n\n let key = this.key || '';\n\n this.send('READY=' + key, 0); // need to confirm connection\n this.invokeReceiver(false, 'onWebsocketOpened');\n };\n\n this._websocket.onmessage = e => {\n let msg = e.data;\n\n if (this.next_binary) {\n\n let binchid = this.next_binary;\n delete this.next_binary;\n\n if (msg instanceof Blob) {\n // convert Blob object to BufferArray\n let reader = new FileReader, qitem = this.reserveQueueItem();\n // The file's text will be printed here\n reader.onload = event => this.markQueueItemDone(qitem, event.target.result, 0);\n reader.readAsArrayBuffer(msg, e.offset || 0);\n } else {\n // this is from CEF or LongPoll handler\n this.provideData(binchid, msg, e.offset || 0);\n }\n\n return;\n }\n\n if (!isStr(msg))\n return console.log(`unsupported message kind: ${typeof msg}`);\n\n let i1 = msg.indexOf(':'),\n credit = parseInt(msg.slice(0, i1)),\n i2 = msg.indexOf(':', i1 + 1),\n // cansend = parseInt(msg.slice(i1 + 1, i2)), // TODO: take into account when sending messages\n i3 = msg.indexOf(':', i2 + 1),\n chid = parseInt(msg.slice(i2 + 1, i3));\n\n this.ackn++; // count number of received packets,\n this.cansend += credit; // how many packets client can send\n\n msg = msg.slice(i3 + 1);\n\n if (chid == 0) {\n console.log(`GET chid=0 message ${msg}`);\n if (msg == 'CLOSE') {\n this.close(true); // force closing of socket\n this.invokeReceiver(true, 'onWebsocketClosed');\n } else if (msg.indexOf('NEW_KEY=') == 0) {\n let newkey = msg.slice(8);\n this.close(true);\n if (typeof sessionStorage !== 'undefined')\n sessionStorage.setItem('RWebWindow_Key', newkey);\n location.reload(true);\n }\n } else if (msg == '$$binary$$') {\n this.next_binary = chid;\n } else if (msg == '$$nullbinary$$') {\n this.provideData(chid, new ArrayBuffer(0), 0);\n } else {\n this.provideData(chid, msg);\n }\n\n if (this.ackn > 7)\n this.send('READY', 0); // send dummy message to server\n };\n\n this._websocket.onclose = arg => {\n delete this._websocket;\n if ((this.state > 0) || (arg === 'force_close')) {\n console.log('websocket closed');\n this.state = 0;\n this.invokeReceiver(true, 'onWebsocketClosed');\n }\n };\n\n this._websocket.onerror = err => {\n console.log(`websocket error ${err} state ${this.state}`);\n if (this.state > 0) {\n this.invokeReceiver(true, 'onWebsocketError', err);\n this.state = 0;\n }\n };\n\n // only in interactive mode try to reconnect\n if (!isBatchMode())\n setTimeout(retry_open, 3000); // after 3 seconds try again\n\n } // retry_open\n\n retry_open(true); // call for the first time\n }\n\n /** @summary Send newkey request to application\n * @desc If server creates newkey and response - webpage will be reaload\n * After key generation done, connection will not be working any longer\n * WARNING - only call when you know that you are doing\n * @private */\n askReload() {\n this.send('GENERATE_KEY', 0);\n }\n\n /** @summary Instal Ctrl-R handler to realod web window\n * @desc Instead of default window reload invokes {@link askReload} method\n * WARNING - only call when you know that you are doing\n * @private */\n addReloadKeyHandler() {\n\n if (this.kind == 'file') return;\n\n window.addEventListener( 'keydown', evnt => {\n if (((evnt.key == 'R') || (evnt.key == 'r')) && evnt.ctrlKey) {\n evnt.stopPropagation();\n evnt.preventDefault();\n console.log('Prevent Ctrl-R propogation - ask reload RWebWindow!');\n this.askReload();\n }\n });\n }\n\n} // class WebWindowHandle\n\n\n/** @summary Method used to initialize connection to web window.\n * @param {object} arg - arguments\n * @param {string} [arg.socket_kind] - kind of connection longpoll|websocket, detected automatically from URL\n * @param {number} [arg.credits = 10] - number of packets which can be send to server without acknowledge\n * @param {object} arg.receiver - instance of receiver for websocket events, allows to initiate connection immediately\n * @param {string} [arg.first_recv] - required prefix in the first message from RWebWindow, remain part of message will be returned in handle.first_msg\n * @param {string} [arg.href] - URL to RWebWindow, using window.location.href by default\n * @return {Promise} for ready-to-use {@link WebWindowHandle} instance */\nasync function connectWebWindow(arg) {\n\n if (isFunc(arg))\n arg = { callback: arg };\n else if (!isObject(arg))\n arg = {};\n\n let d = decodeUrl();\n\n // special holder script, prevents headless chrome browser from too early exit\n if (d.has('headless') && d.get('key') && (browser.isChromeHeadless || browser.isChrome) && !arg.ignore_chrome_batch_holder)\n loadScript('root_batch_holder.js?key=' + d.get('key'));\n\n if (!arg.platform)\n arg.platform = d.get('platform');\n\n if (arg.platform == 'qt5')\n browser.qt5 = true;\n else if (arg.platform == 'cef3')\n browser.cef3 = true;\n\n if (arg.batch === undefined)\n arg.batch = d.has('headless');\n\n if (arg.batch) setBatchMode(true);\n\n if (!arg.socket_kind)\n arg.socket_kind = d.get('ws');\n\n if (!arg.socket_kind) {\n if (browser.qt5)\n arg.socket_kind = 'rawlongpoll';\n else if (browser.cef3)\n arg.socket_kind = 'longpoll';\n else\n arg.socket_kind = 'websocket';\n }\n\n // only for debug purposes\n // arg.socket_kind = 'longpoll';\n\n let main = new Promise(resolveFunc => {\n let handle = new WebWindowHandle(arg.socket_kind, arg.credits);\n handle.setUserArgs(arg.user_args);\n if (arg.href) handle.setHRef(arg.href); // apply href now while connect can be called from other place\n\n if (window) {\n window.onbeforeunload = () => handle.close(true);\n if (browser.qt5) window.onqt5unload = window.onbeforeunload;\n }\n\n handle.key = d.get('key');\n handle.token = d.get('token');\n\n if (typeof sessionStorage !== 'undefined') {\n let new_key = sessionStorage.getItem('RWebWindow_Key');\n sessionStorage.removeItem('RWebWindow_Key');\n if (new_key) {\n console.log(`Use key ${new_key} from session storage`);\n handle.key = new_key;\n }\n }\n\n if (arg.receiver) {\n // when receiver exists, it handles itself callbacks\n handle.setReceiver(arg.receiver);\n handle.connect();\n return resolveFunc(handle);\n }\n\n if (!arg.first_recv)\n return resolveFunc(handle);\n\n handle.setReceiver({\n onWebsocketOpened() {}, // dummy function when websocket connected\n\n onWebsocketMsg(handle, msg) {\n if (msg.indexOf(arg.first_recv) != 0)\n return handle.close();\n handle.first_msg = msg.slice(arg.first_recv.length);\n resolveFunc(handle);\n },\n\n onWebsocketClosed() { closeCurrentWindow(); } // when connection closed, close panel as well\n });\n\n handle.connect();\n });\n\n if (!arg.ui5) return main;\n\n return Promise.all([main, loadOpenui5(arg)]).then(arr => arr[0]);\n}\n\nexport { WebWindowHandle, connectWebWindow };\n","import { settings, create, parse, toJSON, loadScript, registerMethods, isBatchMode, isFunc, isStr } from '../core.mjs';\nimport { select as d3_select, rgb as d3_rgb } from '../d3.mjs';\nimport { closeCurrentWindow, showProgress, loadOpenui5, ToolbarIcons, getColorExec } from '../gui/utils.mjs';\nimport { GridDisplay, getHPainter } from '../gui/display.mjs';\nimport { selectActivePad, cleanup, resize, EAxisBits } from '../base/ObjectPainter.mjs';\nimport { RObjectPainter } from '../base/RObjectPainter.mjs';\nimport { RAxisPainter } from './RAxisPainter.mjs';\nimport { RFramePainter } from './RFramePainter.mjs';\nimport { RPadPainter } from './RPadPainter.mjs';\nimport { addDragHandler } from './TFramePainter.mjs';\nimport { WebWindowHandle } from '../webwindow.mjs';\n\n\n/**\n * @summary Painter class for RCanvas\n *\n * @private\n */\n\nclass RCanvasPainter extends RPadPainter {\n\n /** @summary constructor */\n constructor(dom, canvas) {\n super(dom, canvas, true);\n this._websocket = null;\n this.tooltip_allowed = settings.Tooltip;\n this.v7canvas = true;\n }\n\n /** @summary Cleanup canvas painter */\n cleanup() {\n delete this._websocket;\n delete this._submreq;\n\n if (this._changed_layout)\n this.setLayoutKind('simple');\n delete this._changed_layout;\n\n super.cleanup();\n }\n\n /** @summary Returns layout kind */\n getLayoutKind() {\n let origin = this.selectDom('origin'),\n layout = origin.empty() ? '' : origin.property('layout');\n return layout || 'simple';\n }\n\n /** @summary Set canvas layout kind */\n setLayoutKind(kind, main_selector) {\n let origin = this.selectDom('origin');\n if (!origin.empty()) {\n if (!kind) kind = 'simple';\n origin.property('layout', kind);\n origin.property('layout_selector', (kind != 'simple') && main_selector ? main_selector : null);\n this._changed_layout = (kind !== 'simple'); // use in cleanup\n }\n }\n\n /** @summary Changes layout\n * @return {Promise} indicating when finished */\n async changeLayout(layout_kind, mainid) {\n let current = this.getLayoutKind();\n if (current == layout_kind)\n return true;\n\n let origin = this.selectDom('origin'),\n sidebar = origin.select('.side_panel'),\n main = this.selectDom(), lst = [];\n\n while (main.node().firstChild)\n lst.push(main.node().removeChild(main.node().firstChild));\n\n if (!sidebar.empty())\n cleanup(sidebar.node());\n\n this.setLayoutKind('simple'); // restore defaults\n origin.html(''); // cleanup origin\n\n if (layout_kind == 'simple') {\n main = origin;\n for (let k = 0; k < lst.length; ++k)\n main.node().appendChild(lst[k]);\n this.setLayoutKind(layout_kind);\n } else {\n let grid = new GridDisplay(origin.node(), layout_kind);\n\n if (mainid == undefined)\n mainid = (layout_kind.indexOf('vert') == 0) ? 0 : 1;\n\n main = d3_select(grid.getGridFrame(mainid));\n sidebar = d3_select(grid.getGridFrame(1 - mainid));\n\n main.classed('central_panel', true).style('position', 'relative');\n sidebar.classed('side_panel', true).style('position', 'relative');\n\n // now append all childs to the new main\n for (let k = 0; k < lst.length; ++k)\n main.node().appendChild(lst[k]);\n\n this.setLayoutKind(layout_kind, '.central_panel');\n\n // remove reference to MDIDisplay, solves resize problem\n origin.property('mdi', null);\n }\n\n // resize main drawing and let draw extras\n resize(main.node());\n return true;\n }\n\n /** @summary Toggle projection\n * @return {Promise} indicating when ready\n * @private */\n async toggleProjection(kind) {\n delete this.proj_painter;\n\n if (kind) this.proj_painter = 1; // just indicator that drawing can be preformed\n\n if (isFunc(this.showUI5ProjectionArea))\n return this.showUI5ProjectionArea(kind);\n\n let layout = 'simple', mainid;\n\n switch(kind) {\n case 'X':\n case 'bottom': layout = 'vert2_31'; mainid = 0; break;\n case 'Y':\n case 'left': layout = 'horiz2_13'; mainid = 1; break;\n case 'top': layout = 'vert2_13'; mainid = 1; break;\n case 'right': layout = 'horiz2_31'; mainid = 0; break;\n }\n\n return this.changeLayout(layout, mainid);\n }\n\n /** @summary Draw projection for specified histogram\n * @private */\n async drawProjection( /*kind,hist*/) {\n // dummy for the moment\n return false;\n }\n\n /** @summary Draw in side panel\n * @private */\n async drawInSidePanel(canv, opt) {\n let side = this.selectDom('origin').select('.side_panel');\n return side.empty() ? null : this.drawObject(side.node(), canv, opt);\n }\n\n /** @summary Checks if canvas shown inside ui5 widget\n * @desc Function should be used only from the func which supposed to be replaced by ui5\n * @private */\n testUI5() {\n if (!this.use_openui) return false;\n console.warn('full ui5 should be used - not loaded yet? Please check!!');\n return true;\n }\n\n /** @summary Show message\n * @desc Used normally with web-based canvas and handled in ui5\n * @private */\n showMessage(msg) {\n if (!this.testUI5())\n showProgress(msg, 7000);\n }\n\n /** @summary Function called when canvas menu item Save is called */\n saveCanvasAsFile(fname) {\n let pnt = fname.indexOf('.');\n this.createImage(fname.slice(pnt+1))\n .then(res => { console.log('save', fname, res.length); this.sendWebsocket('SAVE:' + fname + ':' + res); });\n }\n\n /** @summary Send command to server to save canvas with specified name\n * @desc Should be only used in web-based canvas\n * @private */\n sendSaveCommand(fname) {\n this.sendWebsocket('PRODUCE:' + fname);\n }\n\n /** @summary Send message via web socket\n * @private */\n sendWebsocket(msg) {\n if (this._websocket?.canSend()) {\n this._websocket.send(msg);\n return true;\n }\n\n return false;\n }\n\n /** @summary Close websocket connection to canvas\n * @private */\n closeWebsocket(force) {\n if (this._websocket) {\n this._websocket.close(force);\n this._websocket.cleanup();\n delete this._websocket;\n }\n }\n\n /** @summary Use provided connection for the web canvas\n * @private */\n useWebsocket(handle) {\n this.closeWebsocket();\n\n this._websocket = handle;\n this._websocket.setReceiver(this);\n this._websocket.connect();\n }\n\n /** @summary Hanler for websocket open event\n * @private */\n onWebsocketOpened(/*handle*/) {\n }\n\n /** @summary Hanler for websocket close event\n * @private */\n onWebsocketClosed(/*handle*/) {\n if (!this.embed_canvas)\n closeCurrentWindow();\n }\n\n /** @summary Hanler for websocket message\n * @private */\n onWebsocketMsg(handle, msg) {\n console.log('GET_MSG ' + msg.slice(0,30));\n\n if (msg == 'CLOSE') {\n this.onWebsocketClosed();\n this.closeWebsocket(true);\n } else if (msg.slice(0,5) == 'SNAP:') {\n msg = msg.slice(5);\n let p1 = msg.indexOf(':'),\n snapid = msg.slice(0,p1),\n snap = parse(msg.slice(p1+1));\n this.syncDraw(true)\n .then(() => this.redrawPadSnap(snap))\n .then(() => {\n handle.send('SNAPDONE:' + snapid); // send ready message back when drawing completed\n this.confirmDraw();\n });\n } else if (msg.slice(0,4) == 'JSON') {\n let obj = parse(msg.slice(4));\n // console.log('get JSON ', msg.length-4, obj._typename);\n this.redrawObject(obj);\n } else if (msg.slice(0,9) == 'REPL_REQ:') {\n this.processDrawableReply(msg.slice(9));\n } else if (msg.slice(0,4) == 'CMD:') {\n msg = msg.slice(4);\n let p1 = msg.indexOf(':'),\n cmdid = msg.slice(0,p1),\n cmd = msg.slice(p1+1),\n reply = 'REPLY:' + cmdid + ':';\n if ((cmd == 'SVG') || (cmd == 'PNG') || (cmd == 'JPEG')) {\n this.createImage(cmd.toLowerCase())\n .then(res => handle.send(reply + res));\n } else if (cmd.indexOf('ADDPANEL:') == 0) {\n let relative_path = cmd.slice(9);\n if (!isFunc(this.showUI5Panel)) {\n handle.send(reply + 'false');\n } else {\n\n let conn = new WebWindowHandle(handle.kind);\n\n // set interim receiver until first message arrives\n conn.setReceiver({\n cpainter: this,\n\n onWebsocketOpened() {\n },\n\n onWebsocketMsg(panel_handle, msg) {\n let panel_name = (msg.indexOf('SHOWPANEL:') == 0) ? msg.slice(10) : '';\n this.cpainter.showUI5Panel(panel_name, panel_handle)\n .then(res => handle.send(reply + (res ? 'true' : 'false')));\n },\n\n onWebsocketClosed() {\n // if connection failed,\n handle.send(reply + 'false');\n },\n\n onWebsocketError() {\n // if connection failed,\n handle.send(reply + 'false');\n }\n\n });\n\n let addr = handle.href;\n if (relative_path.indexOf('../') == 0) {\n let ddd = addr.lastIndexOf('/',addr.length-2);\n addr = addr.slice(0,ddd) + relative_path.slice(2);\n } else {\n addr += relative_path;\n }\n // only when connection established, panel will be activated\n conn.connect(addr);\n }\n } else {\n console.log('Unrecognized command ' + cmd);\n handle.send(reply);\n }\n } else if ((msg.slice(0,7) == 'DXPROJ:') || (msg.slice(0,7) == 'DYPROJ:')) {\n let kind = msg[1],\n hist = parse(msg.slice(7));\n this.drawProjection(kind, hist);\n } else if (msg.slice(0,5) == 'SHOW:') {\n let that = msg.slice(5),\n on = that[that.length-1] == '1';\n this.showSection(that.slice(0,that.length-2), on);\n } else {\n console.log(`unrecognized msg len: ${msg.length} msg: ${msg.slice(0,30)}`);\n }\n }\n\n /** @summary Submit request to RDrawable object on server side */\n submitDrawableRequest(kind, req, painter, method) {\n\n if (!this._websocket || !req || !req._typename ||\n !painter.snapid || !isStr(painter.snapid)) return null;\n\n if (kind && method) {\n // if kind specified - check if such request already was submitted\n if (!painter._requests) painter._requests = {};\n\n let prevreq = painter._requests[kind];\n\n if (prevreq) {\n let tm = new Date().getTime();\n if (!prevreq._tm || (tm - prevreq._tm < 5000)) {\n prevreq._nextreq = req; // submit when got reply\n return false;\n }\n delete painter._requests[kind]; // let submit new request after timeout\n }\n\n painter._requests[kind] = req; // keep reference on the request\n }\n\n req.id = painter.snapid;\n\n if (method) {\n if (!this._nextreqid) this._nextreqid = 1;\n req.reqid = this._nextreqid++;\n } else {\n req.reqid = 0; // request will not be replied\n }\n\n let msg = JSON.stringify(req);\n\n if (req.reqid) {\n req._kind = kind;\n req._painter = painter;\n req._method = method;\n req._tm = new Date().getTime();\n\n if (!this._submreq) this._submreq = {};\n this._submreq[req.reqid] = req; // fast access to submitted requests\n }\n\n // console.log('Sending request ', msg.slice(0,60));\n\n this.sendWebsocket('REQ:' + msg);\n return req;\n }\n\n /** @summary Submit menu request\n * @private */\n async submitMenuRequest(painter, menukind, reqid) {\n return new Promise(resolveFunc => {\n this.submitDrawableRequest('', {\n _typename: 'ROOT::Experimental::RDrawableMenuRequest',\n menukind: menukind || '',\n menureqid: reqid, // used to identify menu request\n }, painter, resolveFunc);\n });\n }\n\n /** @summary Submit executable command for given painter */\n submitExec(painter, exec, subelem) {\n // snapid is intentionally ignored - only painter.snapid has to be used\n if (!this._websocket) return;\n\n if (subelem && isStr(subelem)) {\n let len = subelem.length;\n if ((len > 2) && (subelem.indexOf('#x') == len - 2)) subelem = 'x'; else\n if ((len > 2) && (subelem.indexOf('#y') == len - 2)) subelem = 'y'; else\n if ((len > 2) && (subelem.indexOf('#z') == len - 2)) subelem = 'z';\n\n if ((subelem == 'x') || (subelem == 'y') || (subelem == 'z'))\n exec = subelem + 'axis#' + exec;\n else\n return console.log(`not recoginzed subelem ${subelem} in SubmitExec`);\n }\n\n this.submitDrawableRequest('', {\n _typename: 'ROOT::Experimental::RDrawableExecRequest',\n exec: exec\n }, painter);\n }\n\n /** @summary Process reply from request to RDrawable */\n processDrawableReply(msg) {\n let reply = parse(msg);\n if (!reply || !reply.reqid || !this._submreq) return false;\n\n let req = this._submreq[reply.reqid];\n if (!req) return false;\n\n // remove reference first\n delete this._submreq[reply.reqid];\n\n // remove blocking reference for that kind\n if (req._kind && req._painter?._requests)\n if (req._painter._requests[req._kind] === req)\n delete req._painter._requests[req._kind];\n\n if (req._method)\n req._method(reply, req);\n\n // resubmit last request of that kind\n if (req._nextreq && !req._painter._requests[req._kind])\n this.submitDrawableRequest(req._kind, req._nextreq, req._painter, req._method);\n }\n\n /** @summary Show specified section in canvas */\n async showSection(that, on) {\n switch(that) {\n case 'Menu': break;\n case 'StatusBar': break;\n case 'Editor': break;\n case 'ToolBar': break;\n case 'ToolTips': this.setTooltipAllowed(on); break;\n }\n return true;\n }\n\n /** @summary Method informs that something was changed in the canvas\n * @desc used to update information on the server (when used with web6gui)\n * @private */\n processChanges(kind, painter, subelem) {\n // check if we could send at least one message more - for some meaningful actions\n if (!this._websocket || !this._websocket.canSend(2) || !isStr(kind)) return;\n\n let msg = '';\n if (!painter) painter = this;\n switch (kind) {\n case 'sbits':\n console.log('Status bits in RCanvas are changed - that to do?');\n break;\n case 'frame': // when moving frame\n case 'zoom': // when changing zoom inside frame\n console.log('Frame moved or zoom is changed - that to do?');\n break;\n case 'pave_moved':\n console.log('TPave is moved inside RCanvas - that to do?');\n break;\n default:\n if ((kind.slice(0,5) == 'exec:') && painter?.snapid) {\n this.submitExec(painter, kind.slice(5), subelem);\n } else {\n console.log('UNPROCESSED CHANGES', kind);\n }\n }\n\n if (msg) {\n console.log('RCanvas::processChanges want to send ' + msg.length + ' ' + msg.slice(0,40));\n }\n }\n\n /** @summary Handle pad button click event\n * @private */\n clickPadButton(funcname, evnt) {\n if (funcname == 'ToggleGed') return this.activateGed(this, null, 'toggle');\n if (funcname == 'ToggleStatus') return this.activateStatusBar('toggle');\n super.clickPadButton(funcname, evnt);\n }\n\n /** @summary returns true when event status area exist for the canvas */\n hasEventStatus() {\n if (this.testUI5()) return false;\n if (this.brlayout)\n return this.brlayout.hasStatus();\n let hp = getHPainter();\n return hp ? hp.hasStatusLine() : false;\n }\n\n /** @summary Show/toggle event status bar\n * @private */\n activateStatusBar(state) {\n if (this.testUI5()) return;\n if (this.brlayout)\n this.brlayout.createStatusLine(23, state);\n else\n getHPainter()?.createStatusLine(23, state);\n\n this.processChanges('sbits', this);\n }\n\n /** @summary Show online canvas status\n * @private */\n showCanvasStatus(...msgs) {\n if (this.testUI5()) return;\n\n let br = this.brlayout || getHPainter()?.brlayout;\n\n br?.showStatus(...msgs);\n }\n\n /** @summary Returns true if GED is present on the canvas */\n hasGed() {\n if (this.testUI5()) return false;\n return this.brlayout?.hasContent() ?? false;\n }\n\n /** @summary Function used to de-activate GED\n * @private */\n removeGed() {\n if (this.testUI5()) return;\n\n this.registerForPadEvents(null);\n\n if (this.ged_view) {\n this.ged_view.getController().cleanupGed();\n this.ged_view.destroy();\n delete this.ged_view;\n }\n this.brlayout?.deleteContent(true);\n this.processChanges('sbits', this);\n }\n\n /** @summary Get view data for ui5 panel\n * @private */\n getUi5PanelData(/* panel_name */) {\n return { jsroot: { settings, create, parse, toJSON, loadScript, EAxisBits, getColorExec } };\n }\n\n /** @summary Function used to activate GED\n * @return {Promise} when GED is there\n * @private */\n async activateGed(objpainter, kind, mode) {\n if (this.testUI5() || !this.brlayout)\n return false;\n\n if (this.brlayout.hasContent()) {\n if ((mode === 'toggle') || (mode === false))\n this.removeGed();\n else\n objpainter?.getPadPainter()?.selectObjectPainter(objpainter);\n\n return true;\n }\n\n if (mode === false)\n return false;\n\n let btns = this.brlayout.createBrowserBtns();\n\n ToolbarIcons.createSVG(btns, ToolbarIcons.diamand, 15, 'toggle fix-pos mode')\n .style('margin','3px').on('click', () => this.brlayout.toggleKind('fix'));\n\n ToolbarIcons.createSVG(btns, ToolbarIcons.circle, 15, 'toggle float mode')\n .style('margin','3px').on('click', () => this.brlayout.toggleKind('float'));\n\n ToolbarIcons.createSVG(btns, ToolbarIcons.cross, 15, 'delete GED')\n .style('margin','3px').on('click', () => this.removeGed());\n\n // be aware, that jsroot_browser_hierarchy required for flexible layout that element use full browser area\n this.brlayout.setBrowserContent(\"
Loading GED ...
\");\n this.brlayout.setBrowserTitle('GED');\n this.brlayout.toggleBrowserKind(kind || 'float');\n\n return new Promise(resolveFunc => {\n\n loadOpenui5.then(sap => {\n\n d3_select('#ged_placeholder').text('');\n\n sap.ui.define(['sap/ui/model/json/JSONModel', 'sap/ui/core/mvc/XMLView'], (JSONModel,XMLView) => {\n\n let oModel = new JSONModel({ handle: null });\n\n XMLView.create({\n viewName: 'rootui5.canv.view.Ged',\n viewData: this.getUi5PanelData('Ged')\n }).then(oGed => {\n\n oGed.setModel(oModel);\n\n oGed.placeAt('ged_placeholder');\n\n this.ged_view = oGed;\n\n // TODO: should be moved into Ged controller - it must be able to detect canvas painter itself\n this.registerForPadEvents(oGed.getController().padEventsReceiver.bind(oGed.getController()));\n\n objpainter?.getPadPainter()?.selectObjectPainter(objpainter);\n\n this.processChanges('sbits', this);\n\n resolveFunc(true);\n });\n });\n });\n });\n }\n\n /** @summary produce JSON for RCanvas, which can be used to display canvas once again\n * @private */\n produceJSON() {\n console.error('RCanvasPainter.produceJSON not yet implemented');\n return '';\n }\n\n /** @summary draw RCanvas object */\n static async draw(dom, can /*, opt */) {\n let nocanvas = !can;\n if (nocanvas)\n can = create('ROOT::Experimental::RCanvas');\n\n let painter = new RCanvasPainter(dom, can);\n painter.normal_canvas = !nocanvas;\n painter.createCanvasSvg(0);\n\n selectActivePad({ pp: painter, active: false });\n\n return painter.drawPrimitives().then(() => {\n painter.addPadButtons();\n painter.showPadButtons();\n return painter;\n });\n }\n\n} // class RCanvasPainter\n\n\n/** @summary draw RPadSnapshot object\n * @private */\nfunction drawRPadSnapshot(dom, snap /*, opt*/) {\n let painter = new RCanvasPainter(dom, null);\n painter.normal_canvas = false;\n painter.batch_mode = isBatchMode();\n return painter.syncDraw(true).then(() => painter.redrawPadSnap(snap)).then(() => {\n painter.confirmDraw();\n painter.showPadButtons();\n return painter;\n });\n}\n\n/** @summary Ensure RCanvas and RFrame for the painter object\n * @param {Object} painter - painter object to process\n * @param {string|boolean} frame_kind - false for no frame or '3d' for special 3D mode\n * @desc Assigns DOM, creates and draw RCanvas and RFrame if necessary, add painter to pad list of painters\n * @return {Promise} for ready */\nasync function ensureRCanvas(painter, frame_kind) {\n if (!painter)\n return Promise.reject(Error('Painter not provided in ensureRCanvas'));\n\n // simple check - if canvas there, can use painter\n let pr = painter.getCanvSvg().empty() ? RCanvasPainter.draw(painter.getDom(), null /* , noframe */) : Promise.resolve(true);\n\n return pr.then(() => {\n if ((frame_kind !== false) && painter.getFrameSvg().select('.main_layer').empty())\n return RFramePainter.draw(painter.getDom(), null, isStr(frame_kind) ? frame_kind : '');\n }).then(() => {\n painter.addToPadPrimitives();\n return painter;\n });\n}\n\n\n/** @summary Function used for direct draw of RFrameTitle\n * @private */\nfunction drawRFrameTitle(reason, drag) {\n let fp = this.getFramePainter();\n if (!fp)\n return console.log('no frame painter - no title');\n\n let rect = fp.getFrameRect(),\n fx = rect.x,\n fy = rect.y,\n fw = rect.width,\n // fh = rect.height,\n ph = this.getPadPainter().getPadHeight(),\n title = this.getObject(),\n title_margin = this.v7EvalLength('margin', ph, 0.02),\n title_width = fw,\n title_height = this.v7EvalLength('height', ph, 0.05),\n textFont = this.v7EvalFont('text', { size: 0.07, color: 'black', align: 22 });\n\n if (reason == 'drag') {\n title_height = drag.height;\n title_margin = fy - drag.y - drag.height;\n let changes = {};\n this.v7AttrChange(changes, 'margin', title_margin / ph);\n this.v7AttrChange(changes, 'height', title_height / ph);\n this.v7SendAttrChanges(changes, false); // do not invoke canvas update on the server\n }\n\n this.createG();\n\n this.draw_g.attr('transform',`translate(${fx},${Math.round(fy-title_margin-title_height)})`);\n\n let arg = { x: title_width/2, y: title_height/2, text: title.fText, latex: 1 };\n\n this.startTextDrawing(textFont, 'font');\n\n this.drawText(arg);\n\n return this.finishTextDrawing().then(() => {\n if (!isBatchMode())\n addDragHandler(this, { x: fx, y: Math.round(fy-title_margin-title_height), width: title_width, height: title_height,\n minwidth: 20, minheight: 20, no_change_x: true, redraw: d => this.redraw('drag', d) });\n });\n}\n\n////////////////////////////////////////////////////////////////////////////////////////////\n\nregisterMethods('ROOT::Experimental::RPalette', {\n\n extractRColor(rcolor) {\n return rcolor.fColor || 'black';\n },\n\n getColor(indx) {\n return this.palette[indx];\n },\n\n getContourIndex(zc) {\n let cntr = this.fContour, l = 0, r = cntr.length-1, mid;\n\n if (zc < cntr[0]) return -1;\n if (zc >= cntr[r]) return r-1;\n\n if (this.fCustomContour) {\n while (l < r-1) {\n mid = Math.round((l+r)/2);\n if (cntr[mid] > zc) r = mid; else l = mid;\n }\n return l;\n }\n\n // last color in palette starts from level cntr[r-1]\n return Math.floor((zc-cntr[0]) / (cntr[r-1] - cntr[0]) * (r-1));\n },\n\n getContourColor(zc) {\n let zindx = this.getContourIndex(zc);\n return (zindx < 0) ? '' : this.getColor(zindx);\n },\n\n getContour() {\n return this.fContour && (this.fContour.length > 1) ? this.fContour : null;\n },\n\n deleteContour() {\n delete this.fContour;\n },\n\n calcColor(value, entry1, entry2) {\n let dist = entry2.fOrdinal - entry1.fOrdinal,\n r1 = entry2.fOrdinal - value,\n r2 = value - entry1.fOrdinal;\n\n if (!this.fInterpolate || (dist <= 0))\n return (r1 < r2) ? entry2.fColor : entry1.fColor;\n\n // interpolate\n let col1 = d3_rgb(this.extractRColor(entry1.fColor)),\n col2 = d3_rgb(this.extractRColor(entry2.fColor)),\n color = d3_rgb(Math.round((col1.r*r1 + col2.r*r2)/dist),\n Math.round((col1.g*r1 + col2.g*r2)/dist),\n Math.round((col1.b*r1 + col2.b*r2)/dist));\n\n return color.toString();\n },\n\n createPaletteColors(len) {\n let arr = [], indx = 0;\n\n while (arr.length < len) {\n let value = arr.length / (len-1);\n\n let entry = this.fColors[indx];\n\n if ((Math.abs(entry.fOrdinal - value) < 0.0001) || (indx == this.fColors.length - 1)) {\n arr.push(this.extractRColor(entry.fColor));\n continue;\n }\n\n let next = this.fColors[indx+1];\n if (next.fOrdinal <= value)\n indx++;\n else\n arr.push(this.calcColor(value, entry, next));\n }\n\n return arr;\n },\n\n getColorOrdinal(value) {\n // extract color with ordinal value between 0 and 1\n if (!this.fColors)\n return 'black';\n if ((typeof value != 'number') || (value < 0))\n value = 0;\n else if (value > 1)\n value = 1;\n\n // TODO: implement better way to find index\n\n let entry, next = this.fColors[0];\n for (let indx = 0; indx < this.fColors.length-1; ++indx) {\n entry = next;\n\n if (Math.abs(entry.fOrdinal - value) < 0.0001)\n return this.extractRColor(entry.fColor);\n\n next = this.fColors[indx+1];\n if (next.fOrdinal > value)\n return this.calcColor(value, entry, next);\n }\n\n return this.extractRColor(next.fColor);\n },\n\n setFullRange(min, max) {\n // set full z scale range, used in zooming\n this.full_min = min;\n this.full_max = max;\n },\n\n createContour(logz, nlevels, zmin, zmax, zminpositive) {\n this.fContour = [];\n delete this.fCustomContour;\n this.colzmin = zmin;\n this.colzmax = zmax;\n\n if (logz) {\n if (this.colzmax <= 0) this.colzmax = 1.;\n if (this.colzmin <= 0)\n if ((zminpositive === undefined) || (zminpositive <= 0))\n this.colzmin = 0.0001*this.colzmax;\n else\n this.colzmin = ((zminpositive < 3) || (zminpositive>100)) ? 0.3*zminpositive : 1;\n if (this.colzmin >= this.colzmax) this.colzmin = 0.0001*this.colzmax;\n\n let logmin = Math.log(this.colzmin)/Math.log(10),\n logmax = Math.log(this.colzmax)/Math.log(10),\n dz = (logmax-logmin)/nlevels;\n this.fContour.push(this.colzmin);\n for (let level=1; level painter.redraw())\n .then(() => painter);\n}\n\n/** @summary draw RFrame object\n * @private */\nfunction drawRFrame(dom, obj, opt) {\n let p = new RFramePainter(dom, obj);\n if (opt == '3d') p.mode3d = true;\n return ensureRCanvas(p, false).then(() => p.redraw());\n}\n\nexport { ensureRCanvas, drawRPadSnapshot,\n drawRFrameTitle, drawRFont, drawRAxis, drawRFrame,\n RObjectPainter, RPadPainter, RCanvasPainter };\n"],"x_google_ignoreList":[0,1,2,3,4,5]} \ No newline at end of file diff --git a/docs/56.0b66108b488f8216.js b/docs/56.1dd1096784c4bdaa.js similarity index 55% rename from docs/56.0b66108b488f8216.js rename to docs/56.1dd1096784c4bdaa.js index 26d0a65fe..16299d4d2 100644 --- a/docs/56.0b66108b488f8216.js +++ b/docs/56.1dd1096784c4bdaa.js @@ -1,2 +1,2 @@ -"use strict";(self.webpackChunkphoenix_app=self.webpackChunkphoenix_app||[]).push([[56],{3029:(et,J,T)=>{T.d(J,{p:()=>Z});var F=T(9542),f=T(4953),W=T(6458);class Z extends W.tK{constructor(m,b,h,c){super(m,b,h),this.csstype=c}v7EvalAttr(m,b){let h=this.getObject();if(!h)return b;this.cssprefix&&(m=this.cssprefix+m);const c=o=>{if(void 0===b)return o;let l=typeof b,d=typeof o;return l==d?o:"boolean"==l?"string"==d?""!=o&&"0"!=o&&"no"!=o&&"off"!=o:!!o:"number"==l&&"string"==d?parseFloat(o):o};if(h.fAttr&&h.fAttr.m){let o=h.fAttr.m[m];if(o)return c(o.v)}if(this.rstyle&&this.rstyle.fBlocks){let o=this.rstyle.fBlocks;for(let l=0;l=d.length)break;if("-"==d[v]||"+"==d[v]){if(p)return console.log("Fail to parse RPadLength "+c),h;p="-"==d[v]?-1:1,v++;continue}for(v>0&&(d=d.slice(v),v=0);v="0"&&d[v]<="9"||"."==d[v]);)v++;let w=parseFloat(d.slice(0,v));if(!Number.isFinite(w))return console.log("Fail to parse RPadLength "+c),Math.round(h*b);d=d.slice(v),v=0,p||(p=1),d&&"%"==d[0]?(d=d.slice(1),o+=p*w*.01):d.length>1&&"p"==d[0]&&"x"==d[1]?(d=d.slice(2),l+=p*w):o+=p*w,p=0}return Math.round(o*b+l)}v7EvalColor(m,b){let h=this.v7EvalAttr(m,"");if(!h||!(0,F.isStr)(h))return b;if("auto"==h){let c=this.getPadPainter();if(void 0!==c?._auto_color_cnt){let o=c.getHistPalette(),l=c._auto_color_cnt++,d=c._num_primitives-1;d<2&&(d=2),h=o?o.getColorOrdinal(l%d/d):"blue",this._auto_colors||(this._auto_colors={}),this._auto_colors[m]=h}else this._auto_colors&&this._auto_colors[m]?h=this._auto_colors[m]:(console.error(`Autocolor ${m} not defined yet - please check code`),h="")}else if("["==h[0]){let c=parseFloat(h.slice(1,h.length-1));if(h="black",Number.isFinite(c)){let l=this.getPadPainter()?.getHistPalette();l&&(h=l.getColorOrdinal(c))}}return h}v7EvalFont(m,b,h){b?"number"==typeof b&&(b={size:b}):b={};let c=this.getPadPainter(),o=c?._dfltRFont||{fFamily:"Arial",fStyle:"",fWeight:""},l=this.v7EvalAttr(m+"_size",b.size||12),d=this.v7EvalAttr(m+"_angle",0),p=this.v7EvalAttr(m+"_align",b.align||"none"),v=this.v7EvalColor(m+"_color",b.color||"none"),w=this.v7EvalAttr(m+"_font_family",o.fFamily||"Arial"),M=this.v7EvalAttr(m+"_font_style",o.fStyle||""),D=this.v7EvalAttr(m+"_font_weight",o.fWeight||"");(0,F.isStr)(l)&&(l=parseFloat(l)),(!Number.isFinite(l)||l<=0)&&(l=12),h||(h=c?.getPadHeight()||100);let z=new f.G(null,l,h,w,M,D);return d&&z.setAngle(360-d),"none"!==p&&z.setAlign(p),"none"!==v&&z.setColor(v),z}createv7AttFill(m){(!m||!(0,F.isStr)(m))&&(m="fill_");let b=this.v7EvalColor(m+"color",""),h=this.v7EvalAttr(m+"style",0);this.createAttFill({pattern:h,color:b,color_as_svg:!0})}createv7AttLine(m){(!m||!(0,F.isStr)(m))&&(m="line_");let b=this.v7EvalColor(m+"color","black"),h=this.v7EvalAttr(m+"width",1),c=this.v7EvalAttr(m+"style",1),o=this.v7EvalAttr(m+"pattern");this.createAttLine({color:b,width:h,style:c,pattern:o}),"border_"==m&&this.lineatt.setBorder(this.v7EvalAttr(m+"rx",0),this.v7EvalAttr(m+"ry",0))}createv7AttMarker(m){(!m||!(0,F.isStr)(m))&&(m="marker_");let b=this.v7EvalColor(m+"color","black"),h=this.v7EvalAttr(m+"size",.01),c=this.v7EvalAttr(m+"style",1),o=1;h<1&&(o=this.getPadPainter()?.getPadHeight()||100),this.createAttMarker({color:b,size:h,style:c,refsize:o})}v7AttrChange(m,b,h,c){if(!this.snapid)return!1;m._typename||(m._typename="ROOT::Experimental::RChangeAttrRequest",m.ids=[],m.names=[],m.values=[],m.update=!0),this.cssprefix&&(b=this.cssprefix+b),m.ids.push(this.snapid),m.names.push(b);let o=null;if(null==h&&(c||(c="none"),"none"!==c&&console.error(`Trying to set ${c} for none value`)),!c)switch(typeof h){case"number":c="double";break;case"boolean":c="boolean"}switch(o={_typename:"ROOT::Experimental::RAttrMap::"},c){case"none":o._typename+="NoValue_t";break;case"boolean":o._typename+="BoolValue_t",o.v=!!h;break;case"int":o._typename+="IntValue_t",o.v=parseInt(h);break;case"double":o._typename+="DoubleValue_t",o.v=parseFloat(h);break;default:o._typename+="StringValue_t",o.v=(0,F.isStr)(h)?h:JSON.stringify(h)}return m.values.push(o),!0}v7SendAttrChanges(m,b){let h=this.getCanvPainter();h&&m?._typename&&(void 0!==b&&(m.update=!!b),h.v7SubmitRequest("",m))}v7SubmitRequest(m,b,h){let c=this.getCanvPainter();return(0,F.isFunc)(c?.submitDrawableRequest)?this.snapid?c.submitDrawableRequest(m,b,this,h):(this._pending_request={kind:m,req:b,method:h},b):null}assignSnapId(m){if(this.snapid=m,this.snapid&&this._pending_request){let b=this._pending_request;this.v7SubmitRequest(b.kind,b.req,b.method),delete this._pending_request}}v7CommMode(){let m=this.getCanvPainter();return m&&m.submitDrawableRequest&&m._websocket?1:3}v7NormalMode(){return 1==this.v7CommMode()}v7OfflineMode(){return 3==this.v7CommMode()}}},9850:(et,J,T)=>{T.d(J,{C:()=>m});var F=T(4788),f=T(9542),W=T(2253),B=T(6030),K=T(4383),Z=T(6116),V=T(3029);class m extends V.p{constructor(h,c,o,l){super(h,l?c.getObject():c,"",l?c.csstype:"axis"),Object.assign(this,B.KB),this.initAxisPainter(),this.axis=o,l?(this.embedded=!0,this.cssprefix=l,this.rstyle=c.rstyle):this.cssprefix="axis_"}cleanup(){delete this.axis,delete this.axis_g,this.cleanupAxisPainter(),super.cleanup()}getAxisType(){return"RAttrAxis"}configureZAxis(h,c){this.name=h,this.kind="normal",this.log=!1;let o=this.v7EvalAttr("log",0);o&&(this.log=!0,this.logbase=10,Math.abs(o-Math.exp(1))<.1?this.logbase=Math.exp(1):o>1.9&&(this.logbase=Math.round(o))),c.logz=this.log}configureAxis(h,c,o,l,d,p,v,w,M){M||(M={}),this.name=h,this.full_min=c,this.full_max=o,this.kind="normal",this.vertical=p,this.log=!1;let D=this.v7EvalAttr("log",0),z=this.v7EvalAttr("symlog",0);if(this.reverse=M.reverse||!1,this.v7EvalAttr("time")){this.kind="time",this.timeoffset=0;let P=this.v7EvalAttr("timeOffset");void 0!==P&&(P=parseFloat(P),Number.isFinite(P)&&(this.timeoffset=1e3*P))}else this.axis&&this.axis.fLabelsIndex?(this.kind="labels",delete this.own_labels):this.kind=M.labels?"labels":"normal";"time"==this.kind?this.func=(0,W.Xf)().domain([this.convertDate(l),this.convertDate(d)]):z&&z>0?(this.symlog=z,this.func=(0,W.eh)().constant(z).domain([l,d])):D?(d<=0&&(d=1),(l<=0||l>=d)&&(l=1e-4*d),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=(0,W.p2)().base(this.logbase).domain([l,d])):this.func=(0,W.BY)().domain([l,d]),this.scale_min=l,this.scale_max=d,this.gr_range=w||1e3;let A=v||[0,this.gr_range];this.axis_shift=A[1]-this.gr_range,this.func.range(this.reverse?[A[1],A[0]]:A),this.gr="time"==this.kind?P=>this.func(this.convertDate(P)):this.log?P=>P20&&(this.nticks=20);let j=Math.abs(this.gr_range)||100;if("time"==this.kind){this.nticks>8&&(this.nticks=8);let P=this.scale_max-this.scale_min,I=this.v7EvalAttr("timeFormat",""),Y=(0,B.ai)(P/j,!1);(!I||P<.1*(this.full_max-this.full_min))&&(I=(0,B.ai)(P/this.nticks,!0)),this.tfunc1=this.tfunc2=(0,W.i$)(I),Y!==I&&(this.tfunc2=(0,W.i$)(Y)),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&&10==this.logbase&&(this.noexp=!0),this.moreloglabels=this.v7EvalAttr("moreloglbls",!1),this.format=this.formatLog;else if("labels"==this.kind){this.nticks=50;let P=this.scale_max-this.scale_min;this.nticks>P&&(this.nticks=Math.round(P)),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(h){let c=Math.round(h);if(this.axis&&this.axis.fLabelsIndex){if(c<0||c>=this.axis.fNBinsNoOver)return null;for(let o=0;o=0&&cthis.scale_min+v&&p.unshift(this.scale_min),p[p.length-1]1&&(!this.log||10===this.logbase)){d.minor=d.middle=this.produceTicks(d.major.length,this.nticks2);let p=Math.abs(this.func.range()[1]-this.func.range()[0]);d.middle.length<=d.major.length||d.middle.length>p/3.5?d.minor=d.middle=d.major:this.nticks3>1&&!this.log&&(d.minor=this.produceTicks(d.middle.length,this.nticks3),(d.minor.length<=d.middle.length||d.minor.length>p/1.7)&&(d.minor=d.middle))}if(d.reset=function(){this.nminor=this.nmiddle=this.nmajor=0},d.next=function(p){return!(this.nminor>=this.minor.length||(this.tick=this.minor[this.nminor++],this.grpos=this.func(this.tick),p&&(this.grpos=Math.round(this.grpos)),this.kind=3,this.nmiddle=this.major.length?null:this.func(this.major[this.nmajor])},this.order=0,this.ndig=0,"normal"==this.kind&&!this.log&&d.major.length>0){let p=0,v=0,w=!1;if(!c){let A=Math.max(Math.abs(d.major[0]),Math.abs(d.major[d.major.length-1])),O=Math.min(Math.abs(d.major[0]),Math.abs(d.major[d.major.length-1])),j=A>0?3*Math.round(Math.log10(A)/3):0,P=O>0?3*Math.round(Math.log10(O)/3):0;w=A<2e4,(A||O)&&(p=Math.max(j,P)+3,v=Math.min(j,P)-3)}let M=0,D=this.ndig,z=1e10;for(let A=v;A<=p;A+=3){if(w&&3===A)continue;this.order=A,this.ndig=0;let O=[],j=0,P=0;for(;j11)break;O=[],j=0,P=0}}!A&&this.ndig<4&&(P-=2*d.major.length+3),P{z.sourceEvent.preventDefault(),z.sourceEvent.stopPropagation();let A=h.node().getBBox(),O=this.vertical?A.height:A.width;p=l=h.property("shift_x"),v=d=h.property("shift_y"),M="center"==this.titlePos?1:"left"==this.titlePos?0:2,w=[0,this.gr_range/2,this.gr_range];let j=this.vertical?-O:O,P=this.isReverseAxis()?2:0;"middle"==this.title_align?(w[P]+=j/2,w[2-P]-=j/2):"begin"==this.title_align^this.isTitleRotated()?(w[1]-=j/2,w[2-P]-=j):(w[P]+=j,w[1]+=j/2),w[M]=this.vertical?d:l,o=h.append("rect").classed("zoom",!0).attr("x",A.x).attr("y",A.y).attr("width",A.width).attr("height",A.height).style("cursor","move")}).on("drag",z=>{if(!o)return;z.sourceEvent.preventDefault(),z.sourceEvent.stopPropagation(),l+=z.dx,d+=z.dy;let A,O,j=this.vertical?d:l,P=0;for(let I=1;I<3;++I)Math.abs(j-w[I]){if(!o)return;z.sourceEvent.preventDefault(),z.sourceEvent.stopPropagation();let A=h.property("basepos")||0;h.property("shift_x",p).property("shift_y",v),this.titleOffset=(this.vertical?A-p:v-A)*c,this.titlePos=1==M?"center":0==M?"left":"right",this.changeAxisAttr(0,"title_position",this.titlePos,"title_offset",this.titleOffset/this.scalingSize),o.remove(),o=null}),h.style("cursor","move").call(D)}isInsideGrRange(h,c,o){return c||(c=0),void 0===o&&(o=c),this.gr_range<0?h>=this.gr_range-o&&h<=c:h>=-c&&h<=this.gr_range+o}getGrRange(h){return h||(h=0),this.gr_range<0?this.gr_range-h:this.gr_range+h}isReverseAxis(){return!this.vertical!=this.getGrRange()>0}drawMainLine(h){let c="";if(this.endingSize&&this.endingStyle){let o=this.gr_range>0?-this.endingSize:this.endingSize,l=Math.round(.7*o);o=Math.round(o),c=this.vertical?`l${l},${o}M0,${this.gr_range}l${-l},${o}`:`l${o},${l}M${this.gr_range},0l${o},${-l}`}h.append("svg:path").attr("d","M0,0"+(this.vertical?"v":"h")+this.gr_range+c).call(this.lineatt.func).style("fill",c?"none":null)}drawTicks(h,c,o){o&&(this.ticks=[]),this.handle.reset();let l="",d=0;for("both"==this.ticksSide&&(c=1,d=1);this.handle.next(!0);){let w=Math.round(this.ticksSize/4),M=0;this.handle.kind<3&&(w=Math.round(this.ticksSize/2));let D=this.handle.grpos-this.axis_shift;(this.startingSize||this.endingSize)&&!this.isInsideGrRange(D,-Math.abs(this.startingSize),-Math.abs(this.endingSize))||(1==this.handle.kind&&(("labels"==this.kind||null!==this.format(this.handle.tick,!0))&&(w=this.ticksSize),o&&this.ticks.push(D)),d>0?M=-w:c<0?(M=-w,w=0):M=0,l+=this.vertical?`M${w},${D}H${M}`:`M${D},${-w}V${-M}`)}l&&h.append("svg:path").attr("d",l).style("stroke",this.ticksColor||this.lineatt.color).style("stroke-width",this.ticksWidth&&1!=this.ticksWidth?this.ticksWidth:null);let p=Math.round(.25*this.ticksSize),v=Math.round(1.25*this.ticksSize);return{"-1":c>0||d?v:p,1:c<0||d?v:p}}drawLabels(h,c,o){var l=this;return(0,F.Z)(function*(){let d=l.isCenteredLabels(),p=0!=l.labelsFont.angle,v=1,w=0,M=!1,D=h.append("svg:g").attr("class","axis_labels").property("side",c),z=l.handle.lbl_pos||l.handle.major,A=0,O=0;function j(N){A=Math.max(A,this.result_width),O=Math.max(O,this.result_height);let X=this.result_width;if(X&&(!N.vertical&&!p||N.vertical&&p)&&!N.log){let U=.45*this.gap_before+.45*this.gap_after;this.gap_before?this.gap_after||(U=.9*this.gap_before):U=.9*this.gap_after,v=Math.min(v,U/X)}v>1e-4&&v<.8&&!N.vertical&&!p&&w>5&&c>0&&(M=!0);let G=v*(M?3:1);G>1e-4&&G<1&&N.scaleTextDrawing(1/G,D)}let P=0,I=Math.round((l.vertical?-c:c)*l.labelsOffset),Y=Math.round((l.vertical?-c:c)*o[c]);I&&D.attr("transform",l.vertical?`translate(${I})`:`translate(0,${I})`),D.property("fix_offset",I),l.startTextDrawing(l.labelsFont,"font",D);for(let N=0;N0?Math.abs(Math.round(G-l.func(z[N-1]))):0,U.gap_after=N{if(M&&D.selectAll("text").each(function(){let N=(0,W.Ys)(this),X=N.attr("transform");N.attr("transform",X+" rotate(25)").style("text-anchor","start")}),l.vertical)o[c]+=Math.round(p?1.2*O:A+.4*l.labelsFont.size)-c*I;else{let N=M?A*Math.sin(.1388888888888889*Math.PI)+O*(Math.cos(.1388888888888889*Math.PI)+.2):0;o[c]+=Math.round(Math.max(p?A+.4*l.labelsFont.size:1.2*O,1.2*l.labelsFont.size,N))+I}return o})})()}addZoomingRect(h,c,o){if(f.settings.Zooming&&!this.disable_zooming&&!(0,f.isBatchMode)()){let l=Math.max(o[c],10),d=this.vertical?`v${this.gr_range}h${-c*l}v${-this.gr_range}`:`h${this.gr_range}v${c*l}h${-this.gr_range}`;h.append("svg:path").attr("d",`M0,0${d}z`).attr("class","axis_zoom").style("opacity","0").style("cursor","crosshair")}}isTitleRotated(){return this.titleFont&&this.titleFont.angle!=(this.vertical?270:0)}drawTitle(h,c,o){var l=this;return(0,F.Z)(function*(){if(!l.fTitle)return l;let d=h.append("svg:g").attr("class","axis_title"),p=0,v=0,w=0,M=l.isTitleRotated();return l.startTextDrawing(l.titleFont,"font",d),l.title_align=l.titleCenter?"middle":l.titleOpposite^(l.isReverseAxis()||M)?"begin":"end",l.vertical?(w=Math.round(-c*o[c]),p=w+Math.round(-c*l.titleOffset),v=Math.round(l.titleCenter?l.gr_range/2:l.titleOpposite?0:l.gr_range),l.drawText({align:[l.title_align,c<0^M?"top":"bottom"],text:l.fTitle,draw_g:d})):(p=Math.round(l.titleCenter?l.gr_range/2:l.titleOpposite?0:l.gr_range),w=Math.round(c*o[c]),v=w+Math.round(c*l.titleOffset),l.drawText({align:[l.title_align,c>0^M?"top":"bottom"],text:l.fTitle,draw_g:d})),d.attr("transform",`translate(${p},${v})`).property("basepos",w).property("shift_x",p).property("shift_y",v),l.addTitleDrag(d,c),l.finishTextDrawing(d)})()}extractDrawAttributes(h){let c=this.getPadPainter(),o=c?.getPadRect()||{width:10,height:10};this.scalingSize=h||(this.vertical?o.width:o.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),h&&this.ticksSize<0&&(this.ticksSize=-this.ticksSize),this.fTitle=this.v7EvalAttr("title_value",""),this.fTitle?(this.titleFont=this.v7EvalFont("title",{size:.03},h||c?.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="center"==this.titlePos,this.titleOpposite="left"==this.titlePos):(delete this.titleFont,delete this.titleOffset,delete this.titlePos),this.labelsFont=this.v7EvalFont("labels",{size:h?.05:.03}),this.labelsFont.roundAngle(180),this.labelsFont.angle&&(this.labelsFont.angle=270),this.labelsOffset=this.v7EvalLength("labels_offset",this.scalingSize,0),h&&(this.ticksSize=.5*this.labelsFont.size),this.maxTickSize&&this.ticksSize>this.maxTickSize&&(this.ticksSize=this.maxTickSize)}drawAxis(h,c,o){var l=this;return(0,F.Z)(function*(){let d=h;void 0===o&&(o=1),l.standalone||(d=h.select("."+l.name+"_container"),d.empty()?d=h.append("svg:g").attr("class",l.name+"_container"):d.selectAll("*").remove()),d.attr("transform",c||null),l.extractDrawAttributes(),l.axis_g=d,l.side=o,"invert"==l.ticksSide&&(o=-o),l.standalone&&l.drawMainLine(d),l.handle=l.createTicks(!1,!1,!1,!1);let M=l.drawTicks(d,o,!0);return(l.optionUnlab?Promise.resolve(M):l.drawLabels(d,o,M)).then(z=>(l.addZoomingRect(d,l.standalone?o:l.side,z),l.drawTitle(d,o,z)))})()}setAfterDrawHandler(h){this._afterDrawAgain=h}drawAxisAgain(){if(!this.axis_g||!this.side)return;this.axis_g.selectAll("*").remove(),this.extractDrawAttributes();let h=this.side;"invert"==this.ticksSide&&(h=-h),this.standalone&&this.drawMainLine(this.axis_g);let c=this.drawTicks(this.axis_g,h,!1);return(this.optionUnlab?Promise.resolve(c):this.drawLabels(this.axis_g,h,c)).then(l=>(this.addZoomingRect(this.axis_g,this.standalone?h:this.side,l),this.drawTitle(this.axis_g,h,l))).then(()=>{(0,f.isFunc)(this._afterDrawAgain)&&this._afterDrawAgain()})}drawAxisOtherPlace(h,c,o,l){let d=h.select("."+this.name+"_container2");d.empty()?d=h.append("svg:g").attr("class",this.name+"_container2"):d.selectAll("*").remove(),d.attr("transform",c||null),"invert"==this.ticksSide&&(o=-o);let p=this.drawTicks(d,o,!1);return(this.optionUnlab||l?Promise.resolve(p):this.drawLabels(d,o,p)).then(w=>(this.addZoomingRect(d,o,w),!0))}zoomStandalone(h,c){this.changeAxisAttr(1,"zoomMin",h,"zoomMax",c)}redraw(){let h=this.getObject(),c=this.getPadPainter(),o=c.getCoordinate(h.fPos),l=c.getPadLength(h.fVertical,h.fLength),d=this.v7EvalAttr("reverse",!1),p=h.fLabels.length,v=p>0?0:this.v7EvalAttr("min",0),w=p>0?p:this.v7EvalAttr("max",100);h.fVertical&&(l-=c.getPadHeight());let M=this.v7EvalAttr("zoomMin"),D=this.v7EvalAttr("zoomMax");M===D&&(M=v,D=w),this.configureAxis("axis",v,w,M,D,h.fVertical,void 0,l,{reverse:d,labels:p>0}),this.createG(),this.standalone=!0;let z=this.drawAxis(this.draw_g,`translate(${o.x},${o.y})`);return(0,f.isBatchMode)()?z:z.then(()=>{f.settings.ContextMenu&&this.draw_g.on("contextmenu",A=>{A.stopPropagation(),A.preventDefault(),(0,K.Z)(A,this).then(O=>{O.add("header:RAxisDrawable"),O.add("Unzoom",()=>this.zoomStandalone()),this.fillAxisContextMenu(O,""),O.show()})}),(0,Z.uI)(this,{x:o.x,y:o.y,width:this.vertical?10:l,height:this.vertical?l:10,only_move:!0,redraw:A=>this.positionChanged(A)}),this.draw_g.on("dblclick",()=>this.zoomStandalone()),f.settings.ZoomWheel&&this.draw_g.on("wheel",A=>{A.stopPropagation(),A.preventDefault();let O=(0,W.cx)(A,this.draw_g.node()),P=this.analyzeWheelEvent(A,this.vertical?1-O[1]/l:O[0]/l);P.changed&&this.zoomStandalone(P.min,P.max)})})}positionChanged(h){let c=this.getObject(),o=this.getPadPainter().getPadRect(),l=h.x/o.width,d=1-h.y/o.height;c.fPos.fHoriz.fArr=[l],c.fPos.fVert.fArr=[d],this.submitCanvExec(`SetPos({${l.toFixed(4)},${d.toFixed(4)}})`)}changeAxisAttr(h){let c={},o=1;for(;othis.getFramePainter().unzoom(c)),h.add("sub:Log scale",()=>this.changeAxisLog("toggle")),h.addchk(!this.log&&!this.symlog,"linear",0,o=>this.changeAxisLog(o)),h.addchk(this.log&&!this.symlog&&10==this.logbase,"log10",()=>this.changeAxisLog(10)),h.addchk(this.log&&!this.symlog&&2==this.logbase,"log2",()=>this.changeAxisLog(2)),h.addchk(this.log&&!this.symlog&&Math.abs(this.logbase-Math.exp(1))<.1,"ln",()=>this.changeAxisLog(Math.exp(1))),h.addchk(!this.log&&this.symlog,"symlog",0,()=>h.input("set symlog constant",this.symlog||10,"float").then(o=>this.changeAxisAttr(2,"symlog",o))),h.add("endsub:"),h.add("Divisions",()=>h.input("Set axis devisions",this.v7EvalAttr("ndiv",508),"int").then(o=>this.changeAxisAttr(2,"ndiv",o))),h.add("sub:Ticks"),h.addRColorMenu("color",this.ticksColor,o=>this.changeAxisAttr(1,"ticks_color",o)),h.addSizeMenu("size",0,.05,.01,this.ticksSize/this.scalingSize,o=>this.changeAxisAttr(1,"ticks_size",o)),h.addSelectMenu("side",["normal","invert","both"],this.ticksSide,o=>this.changeAxisAttr(1,"ticks_side",o)),h.add("endsub:"),!this.optionUnlab&&this.labelsFont&&(h.add("sub:Labels"),h.addSizeMenu("offset",-.05,.05,.01,this.labelsOffset/this.scalingSize,o=>this.changeAxisAttr(1,"labels_offset",o)),h.addRAttrTextItems(this.labelsFont,{noangle:1,noalign:1},o=>this.changeAxisAttr(1,"labels_"+o.name,o.value)),h.addchk(this.labelsFont.angle,"rotate",o=>this.changeAxisAttr(1,"labels_angle",o?180:0)),h.add("endsub:")),h.add("sub:Title",()=>h.input("Enter axis title",this.fTitle).then(o=>this.changeAxisAttr(1,"title_value",o))),this.fTitle&&(h.addSizeMenu("offset",-.05,.05,.01,this.titleOffset/this.scalingSize,o=>this.changeAxisAttr(1,"title_offset",o)),h.addSelectMenu("position",["left","center","right"],this.titlePos,o=>this.changeAxisAttr(1,"title_position",o)),h.addchk(this.isTitleRotated(),"rotate",o=>this.changeAxisAttr(1,"title_angle",o?180:0)),h.addRAttrTextItems(this.titleFont,{noangle:1,noalign:1},o=>this.changeAxisAttr(1,"title_"+o.name,o.value))),h.add("endsub:"),!0}}},9056:(et,J,T)=>{T.r(J),T.d(J,{RCanvasPainter:()=>j,RObjectPainter:()=>V.p,RPadPainter:()=>w,drawRAxis:()=>G,drawRFont:()=>X,drawRFrame:()=>U,drawRFrameTitle:()=>N,drawRPadSnapshot:()=>P,ensureRCanvas:()=>I});var F=T(4788),f=T(9542),W=T(2253),B=T(9622),K=T(2487),Z=T(6458),V=T(3029),m=T(9850),b=T(6367),h=T(6030),c=T(6116);class o extends V.p{constructor(t,e){super(t,e,"","frame"),this.mode3d=!1,this.xmin=this.xmax=0,this.ymin=this.ymax=0,this.axes_drawn=!1,this.keys_handler=null,this.projection=0,this.v7_frame=!0}getFramePainter(){return this}is_root6(){return!1}setFrameActive(t){this.enabledKeys=!(!t||!f.settings.HandleKeys),this.control&&(this.control.enableKeys=this.enabledKeys)}setLastEventPos(t){this.fLastEventPnt=t}getLastEventPos(){return this.fLastEventPnt}updateAttributes(t){if(void 0===this.fX1NDC||t&&!this.modified_NDC){let e=this.getPadPainter().getPadRect();this.fX1NDC=this.v7EvalLength("margins_left",e.width,f.settings.FrameNDC.fX1NDC)/e.width,this.fY1NDC=this.v7EvalLength("margins_bottom",e.height,f.settings.FrameNDC.fY1NDC)/e.height,this.fX2NDC=1-this.v7EvalLength("margins_right",e.width,1-f.settings.FrameNDC.fX2NDC)/e.width,this.fY2NDC=1-this.v7EvalLength("margins_top",e.height,1-f.settings.FrameNDC.fY2NDC)/e.height}this.fillatt||this.createv7AttFill(),this.createv7AttLine("border_")}getProjectionFunc(){switch(this.projection){case 1:return(t,e)=>{const i=Math.PI/180,s=t/2*i,r=e*i,a=Math.sqrt(2),n=2*a/Math.PI,u=Math.cos(r),g=Math.sqrt(1+u*Math.cos(s));return{x:u*Math.sin(s)*2*a/g/n/i,y:Math.sin(r)*a/g/n/i}};case 2:return(t,e)=>({x:t,y:Math.log(Math.tan((Math.PI/2+e/180*Math.PI)/2))});case 3:return(t,e)=>({x:t*Math.cos(e/180*Math.PI),y:e});case 4:return(t,e)=>({x:t*(2*Math.cos(2*e/180*Math.PI/3)-1),y:180*Math.sin(e/180*Math.PI/3)})}}recalculateRange(t){this.projection=t||0,2==this.projection&&(this.scale_ymin<=-90||this.scale_ymax>=90)&&(console.warn(`Mercator Projection: latitude out of range ${this.scale_ymin} ${this.scale_ymax}`),this.projection=0);let e=this.getProjectionFunc();if(!e)return;let 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;s0?this.getColor(f.gStyle.fGridColor):"black";if(this.x_handle&&(this.x_handle.draw_grid=s),this.x_handle&&this.x_handle.draw_grid){let u="";for(let g=0;g0?this.scale_ymax=Math.exp(1.1*Math.log(this.scale_ymax)):this.scale_ymax+=.1*(this.scale_ymax-this.scale_ymin)),this.zoom_ymin==this.zoom_ymax&&t.zoom_ymin!=t.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 s=this.xaxis,r=this.yaxis;s?._typename!=f.clTAxis&&(s=(0,f.create)(f.clTAxis)),r?._typename!=f.clTAxis&&(r=(0,f.create)(f.clTAxis)),this.x_handle=new h.z4(this.getDom(),s,!0),this.x_handle.setPadName(this.getPadName()),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.swap_xy,this.swap_xy?[0,i]:[0,e],{reverse:this.reverse_x,log:this.swap_xy?this.logy:this.logx,symlog:this.swap_xy?t.symlog_y:t.symlog_x,logcheckmin:this.swap_xy,logminfactor:1e-4}),this.x_handle.assignFrameMembers(this,"x"),this.y_handle=new h.z4(this.getDom(),r,!0),this.y_handle.setPadName(this.getPadName()),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.swap_xy,this.swap_xy?[0,e]:[0,i],{reverse:this.reverse_y,log:this.swap_xy?this.logx:this.logy,symlog:this.swap_xy?t.symlog_x:t.symlog_y,logcheckmin:t.ndim<2||this.swap_xy,log_min_nz:t.ymin_nz&&t.ymin_nz<.01*this.ymax?.3*t.ymin_nz:0,logminfactor:3e-4}),this.y_handle.assignFrameMembers(this,"y")}hasDrawnAxes(t,e){return!t&&!e&&this.axes_drawn}drawAxes(){var t=this;return(0,F.Z)(function*(){if(t.axes_drawn||t.xmin==t.xmax||t.ymin==t.ymax)return t.axes_drawn;let e=t.v7EvalAttr("ticksX",1),i=t.v7EvalAttr("ticksY",1),s=1,r=1;t.v7EvalAttr("swapX",!1)&&(s=-1),t.v7EvalAttr("swapY",!1)&&(r=-1);let a=t.getFrameWidth(),n=t.getFrameHeight();t.v6axes||(t.cleanupAxes(),t.swap_xy=!1,t.zoom_xmin!=t.zoom_xmax?(t.scale_xmin=t.zoom_xmin,t.scale_xmax=t.zoom_xmax):(t.scale_xmin=t.xmin,t.scale_xmax=t.xmax),t.zoom_ymin!=t.zoom_ymax?(t.scale_ymin=t.zoom_ymin,t.scale_ymax=t.zoom_ymax):(t.scale_ymin=t.ymin,t.scale_ymax=t.ymax),t.recalculateRange(0),t.x_handle=new m.C(t.getDom(),t,t.xaxis,"x_"),t.x_handle.setPadName(t.getPadName()),t.x_handle.snapid=t.snapid,t.x_handle.draw_swapside=s<0,t.x_handle.draw_ticks=e,t.y_handle=new m.C(t.getDom(),t,t.yaxis,"y_"),t.y_handle.setPadName(t.getPadName()),t.y_handle.snapid=t.snapid,t.y_handle.draw_swapside=r<0,t.y_handle.draw_ticks=i,t.z_handle=new m.C(t.getDom(),t,t.zaxis,"z_"),t.z_handle.setPadName(t.getPadName()),t.z_handle.snapid=t.snapid,t.x_handle.configureAxis("xaxis",t.xmin,t.xmax,t.scale_xmin,t.scale_xmax,!1,[0,a],a,{reverse:!1}),t.x_handle.assignFrameMembers(t,"x"),t.y_handle.configureAxis("yaxis",t.ymin,t.ymax,t.scale_ymin,t.scale_ymax,!0,[n,0],-n,{reverse:!1}),t.y_handle.assignFrameMembers(t,"y"),t.z_handle.configureZAxis("zaxis",t));let u=t.getFrameSvg().select(".axis_layer");t.x_handle.has_obstacle=!1;let k,g=t.swap_xy?t.y_handle:t.x_handle,x=t.swap_xy?t.x_handle:t.y_handle;if(t.getPadPainter()?._fast_drawing)k=Promise.resolve(!0);else if(t.v6axes){let S=!1,R=!1,E=!1;g.disable_ticks=e<=0,x.disable_ticks=i<=0;let C=g.drawAxis(u,a,n,g.invert_side?void 0:`translate(0,${n})`,e>1?-n:0,R,void 0,!1),q=x.drawAxis(u,a,n,x.invert_side?`translate(${a})`:void 0,i>1?a:0,E,x.invert_side?0:t._frame_x,S);k=Promise.all([C,q]).then(()=>t.drawGrids())}else{let S=[];e>0&&S.push(g.drawAxis(u,s>0?`translate(0,${n})`:"",s)),i>0&&S.push(x.drawAxis(u,r>0?`translate(0,${n})`:`translate(${a},${n})`,r)),k=Promise.all(S).then(()=>(S=[],e>1&&S.push(g.drawAxisOtherPlace(u,s<0?`translate(0,${n})`:"",-s,2==e)),i>1&&S.push(x.drawAxisOtherPlace(u,r<0?`translate(0,${n})`:`translate(${a},${n})`,-r,2==i)),Promise.all(S))).then(()=>t.drawGrids())}return k.then(()=>(t.axes_drawn=!0,!0))})()}drawAxes2(t,e){let a,n,i=this.getFrameWidth(),s=this.getFrameHeight(),r=this.getFrameSvg().select(".axis_layer");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 m.C(this.getDom(),this,this.x2axis,"x2_"),this.x2_handle.setPadName(this.getPadName()),this.x2_handle.snapid=this.snapid,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"),a=this.x2_handle.drawAxis(r,"",-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 m.C(this.getDom(),this,this.y2axis,"y2_"),this.y2_handle.setPadName(this.getPadName()),this.y2_handle.snapid=this.snapid,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"),n=this.y2_handle.drawAxis(r,`translate(${i},${s})`,-1)),Promise.all([a,n])}getGrFuncs(t,e){let i=t&&this.grx2,s=e&&this.gry2;return i||s?{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,swap_xy:this.swap_xy,fp:this,revertAxis(r,a){return"x"==r&&this.use_x2&&(r="x2"),"y"==r&&this.use_y2&&(r="y2"),this.fp.revertAxis(r,a)},axisAsText(r,a){return"x"==r&&this.use_x2&&(r="x2"),"y"==r&&this.use_y2&&(r="y2"),this.fp.axisAsText(r,a)}}:this}sizeChanged(){let 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(){let t=(e,i)=>{this[e]&&(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.draw_g&&(this.draw_g.select(".grid_layer").selectAll("*").remove(),this.draw_g.select(".axis_layer").selectAll("*").remove()),this.axes_drawn=!1}cleanFrameDrawings(){(0,f.isFunc)(this.create3DScene)&&this.create3DScene(-1),this.cleanupAxes();let 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.draw_g&&(this.draw_g.select(".main_layer").selectAll("*").remove(),this.draw_g.select(".upper_layer").selectAll("*").remove())}cleanup(){this.cleanFrameDrawings(),this.draw_g&&(this.draw_g.selectAll("*").remove(),this.draw_g.on("mousedown",null).on("dblclick",null).on("wheel",null).on("contextmenu",null).property("interactive_set",null)),this.keys_handler&&(window.removeEventListener("keydown",this.keys_handler,!1),this.keys_handler=null),delete this.enabledKeys,delete this.self_drawaxes,delete this.xaxis,delete this.yaxis,delete this.zaxis,delete this.x2axis,delete this.y2axis,delete this.draw_g,delete this._click_handler,delete this._dblclick_handler;let t=this.getPadPainter();t?.frame_painter_ref===this&&delete t.frame_painter_ref,super.cleanup()}redraw(){let t=this.getPadPainter();t&&(t.frame_painter_ref=this),this.updateAttributes();let g,x,y,e=t?.getPadRect()??{width:10,height:10},i=Math.round(e.width*this.fX1NDC),s=Math.round(e.width*(this.fX2NDC-this.fX1NDC)),r=Math.round(e.height*(1-this.fY2NDC)),a=Math.round(e.height*(this.fY2NDC-this.fY1NDC)),n=!1,u=!1;if(t?.options&&(t.options.RotateFrame&&(n=!0),t.options.FixFrame&&(u=!0)),n?(g=`rotate(-90,${i},${r}) translate(${i-a},${r})`,[s,a]=[a,s]):g=`translate(${i},${r})`,this._frame_x=i,this._frame_y=r,this._frame_width=s,this._frame_height=a,this._frame_rotate=n,this._frame_fixpos=u,this.mode3d)return this;this.draw_g=this.getFrameSvg(),this.draw_g.empty()?(this.draw_g=this.getLayerSvg("primitives_layer").append("svg:g").attr("class","root_frame"),(0,f.isBatchMode)()||this.draw_g.append("svg:title").text(""),x=this.draw_g.append("svg:rect"),this.draw_g.append("svg:g").attr("class","grid_layer"),y=this.draw_g.append("svg:svg").attr("class","main_layer").attr("x",0).attr("y",0).attr("overflow","hidden"),this.draw_g.append("svg:g").attr("class","axis_layer"),this.draw_g.append("svg:g").attr("class","upper_layer")):(x=this.draw_g.select("rect"),y=this.draw_g.select(".main_layer")),this.axes_drawn=!1,this.draw_g.attr("transform",g),x.attr("x",0).attr("y",0).attr("width",s).attr("height",a).attr("rx",this.lineatt.rx||null).attr("ry",this.lineatt.ry||null).call(this.fillatt.func).call(this.lineatt.func),y.attr("width",s).attr("height",a).attr("viewBox",`0 0 ${s} ${a}`);let k=Promise.resolve(!0);return this.v7EvalAttr("drawAxes")&&(this.self_drawaxes=!0,this.setAxesRanges(),k=this.drawAxes().then(()=>this.addInteractivity())),k.then(()=>((0,f.isBatchMode)()||(x.style("pointer-events","visibleFill"),c.J9.assign(this),this.addBasicInteractivity()),this))}getFrameWidth(){return this._frame_width||0}getFrameHeight(){return this._frame_height||0}getFrameRect(){return{x:this._frame_x||0,y:this._frame_y||0,width:this.getFrameWidth(),height:this.getFrameHeight(),transform:this.draw_g?this.draw_g.attr("transform"):"",hint_delta_x:0,hint_delta_y:0}}getHistPalette(){return this.getPadPainter().getHistPalette()}configureUserClickHandler(t){this._click_handler=(0,f.isFunc)(t)?t:null}configureUserDblclickHandler(t){this._dblclick_handler=(0,f.isFunc)(t)?t:null}zoom(t,e,i,s,r,a){var n=this;return(0,F.Z)(function*(){if(n.projection)return!1;"x"===t?(t=e,e=i,i=void 0):"y"===t?(s=i,i=e,t=e=void 0):"z"===t&&(r=e,a=i,t=e=i=void 0);let u=t!==e,g=i!==s,x=r!==a,y=!1,k=!1,S=!1;if(u){let $=0;t<=n.xmin&&(t=n.xmin,$++),e>=n.xmax&&(e=n.xmax,$++),2===$&&(u=!1,y=!0)}else y=t===e&&0===t;if(g){let $=0;i<=n.ymin&&(i=n.ymin,$++),s>=n.ymax&&(s=n.ymax,$++),2===$&&(g=!1,k=!0)}else k=i===s&&0===i;if(x){let $=0;r<=n.zmin&&(r=n.zmin,$++),a>=n.zmax&&(a=n.zmax,$++),2===$&&(x=!1,S=!0)}else S=r===a&&0===r;let R=!1,E="",C="",q="",H=!1,L={_typename:"ROOT::Experimental::RFrame::RUserRanges",values:[0,0,0,0,0,0],flags:[!1,!1,!1,!1,!1,!1]};const Q=($,tt)=>{!tt&&!(0,f.isFunc)($.canZoomInside)||(H=!0,u&&(tt||$.canZoomInside("x",t,e))&&(n.zoom_xmin=t,n.zoom_xmax=e,R=!0,E="0",u=!1,L.values[0]=t,L.values[1]=e,L.flags[0]=L.flags[1]=!0),g&&(tt||$.canZoomInside("y",i,s))&&(n.zoom_ymin=i,n.zoom_ymax=s,R=!0,C="1",g=!1,L.values[2]=i,L.values[3]=s,L.flags[2]=L.flags[3]=!0),x&&(tt||$.canZoomInside("z",r,a))&&(n.zoom_zmin=r,n.zoom_zmax=a,R=!0,q="2",x=!1,L.values[4]=r,L.values[5]=a,L.flags[4]=L.flags[5]=!0))};return(u||g||x)&&n.forEachPainter($=>Q($)),!H&&n.self_drawaxes&&Q(null,!0),(y||k||S)&&(y&&(n.zoom_xmin!==n.zoom_xmax&&(R=!0,E="0"),n.zoom_xmin=n.zoom_xmax=0,L.values[0]=L.values[1]=-1),k&&(n.zoom_ymin!==n.zoom_ymax&&(R=!0,C="1"),n.zoom_ymin=n.zoom_ymax=0,L.values[2]=L.values[3]=-1),S&&(n.zoom_zmin!==n.zoom_zmax&&(R=!0,q="2"),n.zoom_zmin=n.zoom_zmax=0,L.values[4]=L.values[5]=-1)),!!R&&(n.v7NormalMode()&&n.v7SubmitRequest("zoom",{_typename:"ROOT::Experimental::RFrame::RZoomRequest",ranges:L}),n.interactiveRedraw("pad","zoom"+E+C+q).then(()=>!0))})()}zoomSingle(t,e,i){var s=this;return(0,F.Z)(function*(){let a=["x","y","z","x2","y2"].indexOf(t);if(s.projection||!s[t+"_handle"]||a<0)return!1;let n=e!==i,u=!1;if(n){let S=0;e<=s[t+"min"]&&(e=s[t+"min"],S++),i>=s[t+"max"]&&(i=s[t+"max"],S++),2===S&&(n=!1,u=!0)}else u=e===i&&0===e;let g=!1,x=!1,y={_typename:"ROOT::Experimental::RFrame::RUserRanges",values:[0,0,0,0,0,0,0,0,0,0],flags:[!1,!1,!1,!1,!1,!1,!1,!1,!1,!1]},k=(S,R)=>{!R&&!(0,f.isFunc)(S?.canZoomInside)||(x=!0,n&&(R||S.canZoomInside(t[0],e,i))&&(s["zoom_"+t+"min"]=e,s["zoom_"+t+"max"]=i,g=!0,n=!1,y.values[2*a]=e,y.values[2*a+1]=i,y.flags[2*a]=y.flags[2*a+1]=!0))};return n&&s.forEachPainter(S=>k(S)),!x&&s.self_drawaxes&&k(null,!0),u&&(s[`zoom_${t}min`]!==s[`zoom_${t}max`]&&(g=!0),s[`zoom_${t}min`]=s[`zoom_${t}max`]=0,y.values[2*a]=y.values[2*a+1]=-1),!!g&&(s.v7NormalMode()&&s.v7SubmitRequest("zoom",{_typename:"ROOT::Experimental::RFrame::RZoomRequest",ranges:y}),s.interactiveRedraw("pad","zoom"+a).then(()=>!0))})()}isAxisZoomed(t){return this["zoom_"+t+"min"]!==this["zoom_"+t+"max"]}unzoom(t,e,i){var s=this;return(0,F.Z)(function*(){return"all"==t?s.unzoom("x2").then(()=>s.unzoom("y2")).then(()=>s.unzoom("xyz")):"x2"==t||"y2"==t?s.zoomSingle(t,0,0).then(r=>(r&&s.zoomChangedInteractive(t,"unzoom"),r)):(typeof t>"u"?t=e=i=!0:(0,f.isStr)(t)&&(i=t.indexOf("z")>=0,e=t.indexOf("y")>=0,t=t.indexOf("x")>=0),s.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).then(r=>(r&&t&&s.zoomChangedInteractive("x","unzoom"),r&&e&&s.zoomChangedInteractive("y","unzoom"),r&&i&&s.zoomChangedInteractive("z","unzoom"),r)))})()}zoomChangedInteractive(t,e){if("reset"==t)return void(this.zoom_changed_x=this.zoom_changed_y=this.zoom_changed_z=void 0);if(!t||"any"==t)return this.zoom_changed_x||this.zoom_changed_y||this.zoom_changed_z;if("x"!==t&&"y"!==t&&"z"!==t)return;let i="zoom_changed_"+t;if(void 0===e)return this[i];"unzoom"!==e?e&&(this[i]=!0):this[i]=void 0===this[i]}fillObjectOfflineMenu(t,e){"x"!=e&&"y"!=e||t.add("Unzoom",()=>this.unzoom(e))}changeFrameAttr(t,e){let i={};this.v7AttrChange(i,t,e),this.v7SetAttr(t,e),this.v7SendAttrChanges(i,!1),this.redrawPad()}fillContextMenu(t,e){if("x"==e||"y"==e||"x2"==e||"y2"==e){let s=this[e+"_handle"];return!!s&&(t.add("header: "+e.toUpperCase()+" axis"),s.fillAxisContextMenu(t,e))}let i=0==t.size();return t.add(i?"header:Frame":"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.add("separator"),t.addchk(this.isTooltipAllowed(),"Show tooltips",()=>this.setTooltipAllowed("toggle")),this.x_handle&&t.addchk(this.x_handle.draw_grid,"Grid x",s=>this.changeFrameAttr("gridX",s)),this.y_handle&&t.addchk(this.y_handle.draw_grid,"Grid y",s=>this.changeFrameAttr("gridY",s)),this.x_handle&&!this.x2_handle&&t.addchk(this.x_handle.draw_swapside,"Swap x",s=>this.changeFrameAttr("swapX",s)),this.y_handle&&!this.y2_handle&&t.addchk(this.y_handle.draw_swapside,"Swap y",s=>this.changeFrameAttr("swapY",s)),this.x_handle&&!this.x2_handle&&(t.add("sub:Ticks x"),t.addchk(0==this.x_handle.draw_ticks,"off",()=>this.changeFrameAttr("ticksX",0)),t.addchk(1==this.x_handle.draw_ticks,"normal",()=>this.changeFrameAttr("ticksX",1)),t.addchk(2==this.x_handle.draw_ticks,"ticks on both sides",()=>this.changeFrameAttr("ticksX",2)),t.addchk(3==this.x_handle.draw_ticks,"labels on both sides",()=>this.changeFrameAttr("ticksX",3)),t.add("endsub:")),this.y_handle&&!this.y2_handle&&(t.add("sub:Ticks y"),t.addchk(0==this.y_handle.draw_ticks,"off",()=>this.changeFrameAttr("ticksY",0)),t.addchk(1==this.y_handle.draw_ticks,"normal",()=>this.changeFrameAttr("ticksY",1)),t.addchk(2==this.y_handle.draw_ticks,"ticks on both sides",()=>this.changeFrameAttr("ticksY",2)),t.addchk(3==this.y_handle.draw_ticks,"labels on both sides",()=>this.changeFrameAttr("ticksY",3)),t.add("endsub:")),t.addAttributesMenu(this,i?"":"Frame "),t.add("separator"),t.add("Save as frame.png",()=>this.getPadPainter().saveAs("png","frame","frame.png")),t.add("Save as frame.svg",()=>this.getPadPainter().saveAs("svg","frame","frame.svg")),!0}revertAxis(t,e){let i=this[t+"_handle"];return i?i.revertPoint(e):0}showAxisStatus(t,e){let s=t,a=(0,W.cx)(e,this.getFrameSvg().node()),n="x"==t?0:1;this.swap_xy&&(n=1-n);let u=this.revertAxis(t,a[n]);this.showObjectStatus(s,"axis",t+" : "+this.axisAsText(t,u),Math.round(a[0])+","+Math.round(a[1]))}addKeysHandler(){(0,f.isBatchMode)()||(c.J9.assign(this),this.addFrameKeysHandler())}addInteractivity(t){return!(!(0,f.isBatchMode)()&&(f.settings.Zooming||f.settings.ContextMenu))||(c.J9.assign(this),this.addFrameInteractivity(t))}setRootPadRange(){}toggleAxisLog(t){let e=this[t+"_handle"];e&&e.changeAxisLog("toggle")}}var l=T(3038),d=T(3675),p=T(4383),v=T(3834);class w extends V.p{constructor(t,e,i){super(t,e,"","pad"),this.pad=e,this.iscan=i,this.this_pad_name="",!this.iscan&&null!==e&&(this.this_pad_name=e.fObjectID?"pad"+e.fObjectID:"ppp"+f.internals.id_counter++),this.painters=[],this.has_canvas=!0,this.forEachPainter=this.forEachPainterInPad}isRoot6(){return!1}svg_this_pad(){return this.getPadSvg(this.this_pad_name)}getMainPainter(){return this.main_painter_ref||null}setMainPainter(t,e){(!this.main_painter_ref||e)&&(this.main_painter_ref=t)}cleanup(){this._doing_draw&&console.error("pad drawing is not completed when cleanup is called"),this.painters.forEach(e=>e.cleanup());let t=this.svg_this_pad();t.empty()||(t.property("pad_painter",null),this.iscan||t.remove()),delete this.main_painter_ref,delete this.frame_painter_ref,delete this.pads_cache,delete this._pad_x,delete this._pad_y,delete this._pad_width,delete this._pad_height,delete this._doing_draw,delete this._dfltRFont,this.painters=[],this.pad=null,this.draw_object=null,this.pad_frame=null,this.this_pad_name=void 0,this.has_canvas=!1,(0,Z.O5)({pp:this,active:!1}),super.cleanup()}getFramePainter(){return this.frame_painter_ref}getPadWidth(){return this._pad_width||0}getPadHeight(){return this._pad_height||0}getPadRect(){return{x:this._pad_x||0,y:this._pad_y||0,width:this.getPadWidth(),height:this.getPadHeight()}}getFrameRect(){let t=this.getFramePainter();if(t)return t.getFrameRect();let 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=`translate(${s.x},${s.y})`,s}getRootPad(t){return void 0!==t&&t?null:this.pad}cleanPrimitives(t){if((0,f.isFunc)(t))for(let e=this.painters.length-1;e>=0;--e)t(this.painters[e])&&(this.painters[e].cleanup(),this.painters.splice(e,1))}findPainterFor(t,e,i){return this.painters.find(s=>{let r=s.getObject();if(r){if(t&&r===t)return!0;if((e||i)&&(!e||r.fName===e)&&(!i||r._typename===i))return!0}})}getHistPalette(){let t=this.findPainterFor(void 0,void 0,"ROOT::Experimental::RPaletteDrawable");return t?t.getHistPalette():(this.fDfltPalette||(this.fDfltPalette={_typename:"ROOT::Experimental::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},(0,f.addMethods)(this.fDfltPalette,"ROOT::Experimental::RPalette")),this.fDfltPalette)}getNumPainters(){return this.painters.length}forEachPainterInPad(t,e){e||(e="all"),"objects"!=e&&t(this);for(let i=0;i0){if(this._fixed_size)return t>1;if(s=this.getCanvSvg(),s.empty()||(i=s.property("height_factor"),a=this.testMainResize(t,null,i),!a.changed))return!1;(0,f.isBatchMode)()||(n=this.getLayerSvg("btns_layer",this.this_pad_name)),u=s.select(".canvas_fillrect")}else{let g=this.selectDom();"static"==g.style("position")&&g.style("position","relative"),s=g.append("svg").attr("class","jsroot root_canvas").property("pad_painter",this).property("current_pad","").property("redraw_by_resize",!1),this.setTopPainter(),!(0,f.isBatchMode)()&&!this.online_canvas&&s.append("svg:title").text("ROOT canvas"),u=s.append("svg:path").attr("class","canvas_fillrect"),(0,f.isBatchMode)()||u.style("pointer-events","visibleFill").on("dblclick",x=>this.enlargePad(x)).on("click",()=>this.selectObjectPainter(this,null)).on("mouseenter",()=>this.showObjectStatus()).on("contextmenu",f.settings.ContextMenu?x=>this.padContextMenu(x):null),s.append("svg:g").attr("class","primitives_layer"),s.append("svg:g").attr("class","info_layer"),(0,f.isBatchMode)()||(n=s.append("svg:g").attr("class","btns_layer").property("leftside","left"==f.settings.ToolBarSide).property("vertical",f.settings.ToolBarVert)),i=.66,this.pad&&this.pad.fWinSize[0]&&this.pad.fWinSize[1]&&(i=this.pad.fWinSize[1]/this.pad.fWinSize[0],(i<.1||i>10)&&(i=.66)),this._fixed_size?(g.style("overflow","auto"),a={width:this.pad.fWinSize[0],height:this.pad.fWinSize[1]},(!a.width||!a.height)&&(a=(0,d.Yo)(g))):a=this.testMainResize(2,e,i)}return this.createAttFill({pattern:1001,color:0}),a.width<=5||a.height<=5?(s.style("display","none"),console.warn(`Hide canvas while geometry too small w=${a.width} h=${a.height}`),a.width=200,a.height=100):s.style("display",null),this._fixed_size?s.attr("x",0).attr("y",0).attr("width",a.width).attr("height",a.height).style("position","absolute"):s.attr("x",0).attr("y",0).style("width","100%").style("height","100%").style("position","absolute").style("left",0).style("top",0).style("right",0).style("bottom",0),s.style("filter",f.settings.DarkMode?"invert(100%)":null),s.attr("viewBox",`0 0 ${a.width} ${a.height}`).attr("preserveAspectRatio","none").property("height_factor",i).property("draw_x",0).property("draw_y",0).property("draw_width",a.width).property("draw_height",a.height),this._pad_x=0,this._pad_y=0,this._pad_width=a.width,this._pad_height=a.height,u.attr("d",`M0,0H${a.width}V${a.height}H0Z`).call(this.fillatt.func),this._fast_drawing=f.settings.SmallPad&&(a.width{E.getObject()==a&&(n=!0)},"pads"),n&&(u=s,g=r,x=y=0)),t?(k=this.svg_this_pad(),S=k.select(".root_pad_border"),(0,f.isBatchMode)()||(R=this.getLayerSvg("btns_layer",this.this_pad_name))):(k=e.select(".primitives_layer").append("svg:svg").classed("__root_pad_"+this.this_pad_name,!0).attr("pad",this.this_pad_name).property("pad_painter",this),(0,f.isBatchMode)()||k.append("svg:title").text("ROOT subpad"),S=k.append("svg:path").attr("class","root_pad_border"),k.append("svg:g").attr("class","primitives_layer"),(0,f.isBatchMode)()||(R=k.append("svg:g").attr("class","btns_layer").property("leftside","left"!=f.settings.ToolBarSide).property("vertical",f.settings.ToolBarVert)),f.settings.ContextMenu&&S.on("contextmenu",E=>this.padContextMenu(E)),(0,f.isBatchMode)()||S.style("pointer-events","visibleFill").on("dblclick",E=>this.enlargePad(E)).on("click",()=>this.selectObjectPainter(this,null)).on("mouseenter",()=>this.showObjectStatus())),this.createAttFill({attr:this.pad}),this.createAttLine({attr:this.pad,color0:0==this.pad.fBorderMode?"none":""}),k.style("display",n?null:"none").attr("viewBox",`0 0 ${u} ${g}`).attr("preserveAspectRatio","none").attr("x",x).attr("y",y).attr("width",u).attr("height",g).property("draw_x",x).property("draw_y",y).property("draw_width",u).property("draw_height",g),this._pad_x=x,this._pad_y=y,this._pad_width=u,this._pad_height=g,S.attr("d",`M0,0H${u}V${g}H0Z`).call(this.fillatt.func).call(this.lineatt.func),this._fast_drawing=f.settings.SmallPad&&(u"ROOT::Experimental::RPadDisplayItem"!=e._typename))}syncDraw(t){let e={kind:t||"redraw"};return void 0===this._doing_draw?(this._doing_draw=[e],Promise.resolve(!0)):!(!0!==e.kind&&this._doing_draw.findIndex((i,s)=>s>0&&i.kind==e.kind)>0)&&(this._doing_draw.push(e),new Promise(i=>{e.func=i}))}confirmDraw(){if(void 0===this._doing_draw)return console.warn("failure, should not happen");if(this._doing_draw.shift(),0==this._doing_draw.length)delete this._doing_draw;else{let t=this._doing_draw[0];t.func&&(t.func(),delete t.func)}}drawObject(){return(0,F.Z)(function*(){return console.log("Not possible to draw object without loading of draw.mjs"),null})()}drawPrimitives(t){var e=this;return(0,F.Z)(function*(){if(void 0===t)return e.iscan&&(e._start_tm=(new Date).getTime()),e._num_primitives=e.pad&&e.pad.fPrimitives?e.pad.fPrimitives.length:0,e.syncDraw(!0).then(()=>e.drawPrimitives(0));if(e.pad&&!(t>=e._num_primitives))return e.drawObject(e.getDom(),e.pad.fPrimitives[t],"").then(i=>((0,f.isObject)(i)&&(i._primitive=!0),e.drawPrimitives(t+1)));if(e.confirmDraw(),e._start_tm){let i=(new Date).getTime()-e._start_tm;i>3e3&&console.log(`Canvas drawing took ${(.001*i).toFixed(2)}s`),delete e._start_tm}})()}processPadTooltipEvent(t){let e=[],i=[];return null!==this.painters&&this.painters.forEach(s=>{(0,f.isFunc)(s.processTooltipEvent)&&e.push(s)}),t&&(t.nproc=e.length),e.forEach(s=>{let r=s.processTooltipEvent(t);r||(r={user_info:null}),i.push(r),t&&t.painters&&(r.painter=s)}),i}changeDarkMode(t){this.getCanvSvg().style("filter",t??f.settings.DarkMode?"invert(100%)":null)}fillContextMenu(t){t.add(this.iscan?"header: RCanvas":"header: RPad"),t.addchk(this.isTooltipAllowed(),"Show tooltips",()=>this.setTooltipAllowed("toggle")),this._websocket||(t.addAttributesMenu(this),this.iscan&&t.addSettingsMenu(!1,!1,i=>{"dark"==i&&this.changeDarkMode()})),t.add("separator"),(0,f.isFunc)(this.hasMenuBar)&&(0,f.isFunc)(this.actiavteMenuBar)&&t.addchk(this.hasMenuBar(),"Menu bar",i=>this.actiavteMenuBar(i)),(0,f.isFunc)(this.hasEventStatus)&&(0,f.isFunc)(this.activateStatusBar)&&t.addchk(this.hasEventStatus(),"Event status",()=>this.activateStatusBar("toggle")),(this.enlargeMain()||this.has_canvas&&this.hasObjectsToDraw())&&t.addchk("on"==this.enlargeMain("state"),"Enlarge "+(this.iscan?"canvas":"pad"),()=>this.enlargePad());let e=this.this_pad_name||(this.iscan?"canvas":"pad");return t.add(`Save as ${e}.png`,e+".png",i=>this.saveAs("png",!1,i)),t.add(`Save as ${e}.svg`,e+".svg",i=>this.saveAs("svg",!1,i)),!0}padContextMenu(t){if(t.stopPropagation){let e=(0,W.cx)(t,this.svg_this_pad().node());if(2==e.length&&e[0]>=0&&e[0]<10&&e[1]>=0&&e[1]<10)return;t.stopPropagation(),t.preventDefault(),this.getFramePainter()?.setLastEventPos()}(0,p.Z)(t,this).then(e=>(this.fillContextMenu(e),this.fillObjectExecMenu(e))).then(e=>e.show())}redrawPad(t){var e=this;return(0,F.Z)(function*(){let i=e.syncDraw(t);if(!1===i)return console.log("Prevent RPad redrawing"),!1;let s=!0,r=a=>{for(;ar(a))}return!0};return i.then(()=>(e.iscan?e.createCanvasSvg(2):s=e.createPadSvg(!0),r(0))).then(()=>((0,Z.X8)()===e&&e.getCanvPainter()?.producePadEvent("padredraw",e),e.confirmDraw(),!0))})()}redraw(t){return this.redrawPad(t)}needRedrawByResize(){let t=this.svg_this_pad();if(!t.empty()&&t.property("can3d")===f.constants.Embed3D.Overlay)return!0;for(let e=0;e!s||a>=this.painters.length?(this.confirmDraw(),s):(0,f.getPromise)(this.painters[a].redraw(e?"redraw":"resize")).then(()=>r(a+1));return i.then(()=>(s=this.createCanvasSvg(e?2:1,t),r(0)))}updateObject(t){return!!t&&(this.pad.fStyle=t.fStyle,this.pad.fAttr=t.fAttr,this.iscan?(this.pad.fTitle=t.fTitle,this.pad.fWinSize=t.fWinSize):(this.pad.fPos=t.fPos,this.pad.fSize=t.fSize),!0)}addObjectPainter(t,e,i){t&&e&&e[i]&&void 0===t.snapid&&(this.painters.indexOf(t)<0&&this.painters.push(t),t.assignSnapId(e[i].fObjectID),t.rstyle||(t.rstyle=e[i].fStyle||this.rstyle))}extractTObjectProp(t){if(t.fColIndex&&t.fColValue){let r=this.root_colors||(0,l._V)();for(let a=0;a{let n=e.v7EvalColor(a,"");n&&(i[r]=(0,l.hI)(n,this.root_colors))};void 0!==i.fLineColor&&void 0!==i.fLineWidth&&void 0!==i.fLineStyle&&(s("fLineColor","line_color"),i.fLineWidth=e.v7EvalAttr("line_width",i.fLineWidth),i.fLineStyle=e.v7EvalAttr("line_style",i.fLineStyle)),void 0!==i.fFillColor&&void 0!==i.fFillStyle&&(s("fFillColor","fill_color"),i.fFillStyle=e.v7EvalAttr("fill_style",i.fFillStyle)),void 0!==i.fMarkerColor&&void 0!==i.fMarkerStyle&&void 0!==i.fMarkerSize&&(s("fMarkerColor","marker_color"),i.fMarkerStyle=e.v7EvalAttr("marker_style",i.fMarkerStyle),i.fMarkerSize=e.v7EvalAttr("marker_size",i.fMarkerSize)),void 0!==i.fTextColor&&void 0!==i.fTextAlign&&void 0!==i.fTextAngle&&void 0!==i.fTextSize&&(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))}drawNextSnap(t,e){var i=this;return(0,F.Z)(function*(){if(void 0===e&&(e=-1,i._snaps_map={},i._num_primitives=t?t.length:0,i._auto_color_cnt=0),delete i.next_rstyle,++e,!t||e>=t.length)return delete i._snaps_map,delete i._auto_color_cnt,i;let s=t[e],r=s.fObjectID,a=i._snaps_map[r],n=null;if(a?a++:a=1,i._snaps_map[r]=a,s.fDummy)return i.drawNextSnap(t,e);for(let u=0;u(i.addObjectPainter(g,t,e),i.drawNextSnap(t,e)));let u;return"ROOT::Experimental::TObjectDisplayItem"===s._typename&&i.extractTObjectProp(s),n.updateObject(s.fDrawable||s.fObject||s,s.fOption||"",!0)&&(u=n.redraw()),(0,f.getPromise)(u).then(()=>i.drawNextSnap(t,e))}if("ROOT::Experimental::RPadDisplayItem"==s._typename){let u=s,g=new w(i.getDom(),u,!1);g.decodeOptions(""),g.addToPadPrimitives(i.this_pad_name),g.assignSnapId(s.fObjectID),g.rstyle=s.fStyle,g.createPadSvg(),s.fPrimitives&&s.fPrimitives.length>0&&g.addPadButtons();let x=g.selectCurrentPad(g.this_pad_name);return g.drawNextSnap(s.fPrimitives).then(()=>(g.selectCurrentPad(x),i.drawNextSnap(t,e)))}if(i.next_rstyle=t[e].fStyle||i.rstyle,"ROOT::Experimental::TObjectDisplayItem"===s._typename){const u={kNone:0,kObject:1,kColors:4,kStyle:5,kPalette:6};if(s.fKind==u.kStyle)return Object.assign(f.gStyle,s.fObject),i.drawNextSnap(t,e);if(s.fKind==u.kColors){let g=[],x=s.fObject.arr;for(let y=0;y0&&(g[parseInt(k.slice(0,S))]=k.slice(S+1))}return i.root_colors=g,i.drawNextSnap(t,e)}if(s.fKind==u.kPalette){let g=s.fObject.arr,x=[];for(let y=0;yi.drawNextSnap(t,e-1));i.extractTObjectProp(s)}return i.drawObject(i.getDom(),s.fDrawable||s.fObject||s,s.fOption||"").then(u=>(i.addObjectPainter(u,t,e),i.drawNextSnap(t,e)))})()}findSnap(t,e){function i(s){return!(!s||!(0,f.isStr)(s))&&(s==t||e&&s.length>t.length&&s.indexOf(t)==s.length-t.length)}if(i(this.snapid))return this;if(!this.painters)return null;for(let s=0;s{n&&u.fObjectID===n.snapid&&(n=null,i=!0)}),n&&(e.painters.splice(a--,1),n.cleanup(),s=!0,e.main_painter_ref===n&&delete e.main_painter_ref))}if(s&&delete e.pads_cache,!i){let a=e.getFramePainter();a?.is_root6()&&(a=null);for(let n=0;n(e.selectCurrentPad(r),(0,Z.X8)()===e&&e.getCanvPainter()?.producePadEvent("padredraw",e),e))})()}createImage(t){var e=this;return(0,F.Z)(function*(){return"pdf"==t?(0,f.btoa_func)("dummy PDF file"):"png"==t||"jpeg"==t||"svg"==t?e.produceImage(!0,t).then(i=>{if(!i||"svg"==t)return i;let s=i.indexOf("base64,");return s>0?i.slice(s+7):""}):""})()}itemContextMenu(t){let e=this.svg_this_pad().node().getBoundingClientRect(),i={clientX:e.left+10,clientY:e.top+10};if("pad"==t)return setTimeout(()=>this.padContextMenu(i),50);let r,s=null;switch(t){case"xaxis":case"yaxis":case"zaxis":s=this.getMainPainter(),r=t[0];break;case"frame":s=this.getFramePainter();break;default:{let a=parseInt(t);Number.isInteger(a)&&(s=this.painters[a])}}(0,f.isFunc)(s?.fillContextMenu)&&(0,p.Z)(i,s).then(a=>{s.fillContextMenu(a,r)&&s.fillObjectExecMenu(a,r).then(()=>setTimeout(()=>a.show(),50))})}saveAs(t,e,i){i||(i=(this.this_pad_name||(this.iscan?"canvas":"pad"))+"."+t),this.produceImage(e,t).then(s=>{if(!s)return console.error(`Fail to produce image ${i}`);(0,B.yH)(i,"svg"!=t?s:"data:image/svg+xml;charset=utf-8,"+encodeURIComponent(s))})}findActivePad(){return null}produceImage(t,e){var i=this;return(0,F.Z)(function*(){let s="frame"===t,r=s?i.getFrameSvg(i.this_pad_name):t?i.getCanvSvg():i.svg_this_pad(),a=t&&!s?i.getCanvPainter():i,n=[];if(r.empty())return"";s||a.forEachPainterInPad(E=>{let C={prnt:E.svg_this_pad()};n.push(C);let q=E.getLayerSvg("btns_layer",i.this_pad_name);C.btns_node=q.node(),C.btns_node&&(C.btns_prnt=C.btns_node.parentNode,C.btns_next=C.btns_node.nextSibling,q.remove());let H=E.getFramePainter();if(!H||!(0,f.isFunc)(H.render3D)||!(0,f.isFunc)(H.access3dKind))return;let L=H.access3dKind();if(L!==f.constants.Embed3D.Overlay&&L!==f.constants.Embed3D.Embed)return;let Q=H.getSizeFor3d(f.constants.Embed3D.Embed),$=H.renderer.domElement;H.render3D(0);let tt=$.toDataURL("image/png");L===f.constants.Embed3D.Embed&&(C.foreign=C.prnt.select("."+Q.clname),C.foreign.remove());let it=H.getFrameSvg();C.frame_node=it.node(),C.frame_node&&(C.frame_next=C.frame_node.nextSibling,it.remove()),C.img=C.prnt.insert("image",".primitives_layer").attr("x",Q.x).attr("y",Q.y).attr("width",$.width).attr("height",$.height).attr("href",tt)},"pads");const g=()=>{for(let E=0;E${r.node().innerHTML}`;if(f.internals.processSvgWorkarounds&&(k=f.internals.processSvgWorkarounds(k)),k=(0,d.ln)(k),"svg"==e)return g(),k;let R=new Image;return new Promise(E=>{R.onload=function(){let C=document.createElement("canvas");C.width=R.width,C.height=R.height,C.getContext("2d").drawImage(R,0,0),g(),E(C.toDataURL("image/"+e))},R.onerror=function(C){console.log(`IMAGE ERROR ${C}`),g(),E(null)},R.src="data:image/svg+xml;base64,"+(0,f.btoa_func)((E=>(E=(E=encodeURIComponent(E)).replace(/%([0-9A-F]{2})/g,function(C,q){let H=String.fromCharCode("0x"+q);return"%"===H?"%25":H}),decodeURIComponent(E)))(''+k))})})()}clickPadButton(t,e){if("CanvasSnapShot"==t)return this.saveAs("png",!0);if("enlargePad"==t)return this.enlargePad();if("PadSnapShot"==t)return this.saveAs("png",!1);if("PadContextMenus"==t){if(e&&(e.preventDefault(),e.stopPropagation()),(0,p.W)())return;return void(0,p.Z)(e,this).then(s=>{s.add("header:Menus"),s.add(this.iscan?"Canvas":"Pad","pad",this.itemContextMenu),this.getFramePainter()&&s.add("Frame","frame",this.itemContextMenu);let r=this.getMainPainter();if(r&&(s.add("X axis","xaxis",this.itemContextMenu),s.add("Y axis","yaxis",this.itemContextMenu),(0,f.isFunc)(r.getDimension)&&r.getDimension()>1&&s.add("Z axis","zaxis",this.itemContextMenu)),this.painters?.length){s.add("separator");let a=[];for(let n=0;n=0)continue;let g=u._typename?u._typename+"::":"";u.fName&&(g+=u.fName),g||(g="item"+n),s.add(g,n,this.itemContextMenu)}}s.show()})}let i=!1;for(let s=0;sy(r||(r=i?i.getFrameRect():this.getPadRect()),r);if(i){let y=n(2),k=t?"gry":"grx";void 0!==y&&i[k]&&(a=i[k](y))}void 0===a&&(a=t?u().height:0);let g=n(0,0);return a+=s*n(1,0),g&&(a+=s*(t?u().height:u().width)*g),Math.round(a)}getCoordinate(t,e){return{x:this.getPadLength(!1,t.fHoriz,e),y:this.getPadLength(!0,t.fVert,e)}}decodeOptions(t){let e=this.getObject();if(!e)return;let i=new d.pc(t);this.options||(this.options={}),Object.assign(this.options,{GlobalColors:!0,LocalColors:!1,IgnorePalette:!1,RotateFrame:!1,FixFrame:!1}),(i.check("NOCOLORS")||i.check("NOCOL"))&&(this.options.GlobalColors=this.options.LocalColors=!1),(i.check("LCOLORS")||i.check("LCOL"))&&(this.options.GlobalColors=!1,this.options.LocalColors=!0),(i.check("NOPALETTE")||i.check("NOPAL"))&&(this.options.IgnorePalette=!0),i.check("ROTATE")&&(this.options.RotateFrame=!0),i.check("FIXFRAME")&&(this.options.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("TICKX")&&(e.fTickx=1),i.check("TICKY")&&(e.fTicky=1),i.check("TICK")&&(e.fTickx=e.fTicky=1)}static draw(t,e,i){return(0,F.Z)(function*(){let s=new w(t,e,!1);s.decodeOptions(i),s.getCanvSvg().empty()?(s.has_canvas=!1,s.this_pad_name="",s.setTopPainter()):s.addToPadPrimitives(s.pad_name),s.createPadSvg(),s.matchObjectType(f.clTPad)&&(!s.has_canvas||s.hasObjectsToDraw())&&s.addPadButtons();let r=s.has_canvas?s.selectCurrentPad(s.this_pad_name):void 0;return(0,Z.O5)({pp:s,active:!1}),s.drawPrimitives().then(()=>(s.showPadButtons(),s.selectCurrentPad(r),s))})()}}class M{constructor(t,e,i){this.path=t,this.connid=null,this.req=null,this.raw=e,this.args=i,this.nextRequest("","connect")}nextRequest(t,e){let i=this.path,s="buf",r=null;if("connect"===e)i+=this.raw?"?raw_connect":"?txt_connect",this.args&&(i+="&"+this.args),console.log(`longpoll connect ${i} raw = ${this.raw}`),this.connid="connect";else if("close"===e){if(null===this.connid||"close"===this.connid)return;i+=`?connection=${this.connid}&close`,this.connid="close",s="text;sync"}else{if(null===this.connid||"number"!=typeof this.connid)return void(f.browser.qt5||console.error("No connection"));i+="?connection="+this.connid,"dummy"===e&&(i+="&dummy")}t&&(this.raw?i+="&post="+(0,f.btoa_func)(t):(s="postbuf",r=t)),(0,f.createHttpRequest)(i,s,function(a){if(this.handle.req===this&&(this.handle.req=null),null===a)return this.handle.processRequest(null);if(this.handle.raw){let n="",u=0,g=new Uint8Array(a),x=g.length;if(x<4)return f.browser.qt5||console.error(`longpoll got short message in raw mode ${x}`),this.handle.processRequest(null);for(;u<4;)n+=String.fromCharCode(g[u++]);if("txt:"!=n){for(n="";u>"==n?-1111:n),x>"==a?-1111:a)}},function(){this.handle.processRequest(null,"error")},!0).then(a=>{a.handle=this,this.req||(this.req=a),a.send(r)})}processRequest(t,e){if(null===t)return(0,f.isFunc)(this.onerror)&&this.onerror("receive data with connid "+(this.connid||"---")),"error"==e&&(0,f.isFunc)(this.onclose)&&this.onclose("force_close"),void(this.connid=null);-1111===t&&(t="");let i=5;if("connect"===this.connid){if(!t)return this.connid=null,void((0,f.isFunc)(this.onerror)&&this.onerror("connection rejected"));this.connid=parseInt(t),i=100,console.log(`Get new longpoll connection with id ${this.connid}`),(0,f.isFunc)(this.onopen)&&this.onopen()}else{if("close"===this.connid)return void((0,f.isFunc)(this.onclose)&&this.onclose());(0,f.isFunc)(this.onmessage)&&t&&this.onmessage({data:t,offset:e})}this.req||setTimeout(()=>{this.req||this.nextRequest("","dummy")},i)}send(t){this.nextRequest(t)}close(){this.nextRequest("","close")}}class D{constructor(t){this.receiver=t,this.protocol=[],this.cnt=0,(0,f.httpRequest)("protocol.json","text").then(e=>this.getProtocol(e))}getProtocol(t){t&&(this.protocol=JSON.parse(t),(0,f.isFunc)(this.onopen)&&this.onopen(),this.nextOperation())}send(){"send"==this.protocol[this.cnt]&&(this.cnt++,setTimeout(()=>this.nextOperation(),10))}close(){}nextOperation(){if(this.wait_for_file)return;let t=this.protocol[this.cnt];t&&"send"!=t&&(this.wait_for_file=!0,this.cnt++,(0,f.httpRequest)(t,t.indexOf(".bin")>0?"buf":"text").then(e=>{this.wait_for_file=!1,e&&(this.receiver.provideData&&this.receiver.provideData(1,e,0),setTimeout(()=>this.nextOperation(),10))}))}}class z{constructor(t,e){this.kind=t,this.state=0,this.credits=e||10,this.cansend=this.credits,this.ackn=this.credits}getUserArgs(t){return t&&(0,f.isStr)(t)?(0,f.isObject)(this.user_args)?this.user_args[t]:void 0:this.user_args}setUserArgs(t){this.user_args=t}setReceiver(t){this.receiver=t}cleanup(){delete this.receiver,this.close(!0)}invokeReceiver(t,e,i,s){if(this.receiver&&(0,f.isFunc)(this.receiver[e])&&this.receiver[e](this,i,s),t&&this.channels){let r=Object.keys(this.channels);for(let a=0;a1&&this.channels){const r=this.channels[t];if(r)return r.provideData(1,e,i)}const s=i&&i<0;if(!(s||this.msgqueue&&this.msgqueue.length))return this.invokeReceiver(!1,"onWebsocketMsg",e,i);this.msgqueue||(this.msgqueue=[]),s&&(i=void 0),this.msgqueue.push({ready:!0,msg:e,len:i})}reserveQueueItem(){this.msgqueue||(this.msgqueue=[]);let t={ready:!1,msg:null,len:0};return this.msgqueue.push(t),t}markQueueItemDone(t,e,i){t.ready=!0,t.msg=e,t.len=i,this.processQueue()}processQueue(){if(!this._loop_msgqueue&&this.msgqueue){for(this._loop_msgqueue=!0;this.msgqueue.length>0&&this.msgqueue[0].ready;){let t=this.msgqueue.shift();this.invokeReceiver(!1,"onWebsocketMsg",t.msg,t.len)}0==this.msgqueue.length&&delete this.msgqueue,delete this._loop_msgqueue}}close(t){if(this.master)return this.master.send("CLOSECH="+this.channelid,0),delete this.master.channels[this.channelid],void delete this.master;this.timerid&&(clearTimeout(this.timerid),delete this.timerid),this._websocket&&this.state>0&&(this.state=t?-1:0,this._websocket.onclose=null,this._websocket.close(),delete this._websocket)}canSend(t){return this.cansend>=(t||1)}getRelCanSend(){return this.credits?this.cansend/this.credits:1}send(t,e){if(this.master)return this.master.send(t,this.channelid);if(!this._websocket||this.state<=0)return!1;Number.isInteger(e)||(e=1),this.cansend<=0&&console.error(`should be queued before sending cansend: ${this.cansend}`);let i=`${this.ackn}:${this.cansend}:${e}:`;return this.ackn=0,this.cansend--,this._websocket.send(i+t),("websocket"===this.kind||"longpoll"===this.kind)&&(this.timerid&&clearTimeout(this.timerid),this.timerid=setTimeout(()=>this.keepAlive(),1e4)),!0}inject(t,e,i){if(!i)return setTimeout(this.inject.bind(this,t,e,!0),0);if(void 0===e&&(e=1),Array.isArray(t)){for(let s=0;s{if(0!=this.state)return;r||console.log(`try connect window again ${(new Date).toString()}`),this._websocket&&(this._websocket.close(),delete this._websocket),t||((t=window.location.href)&&t.indexOf("#")>0&&(t=t.slice(0,t.indexOf("#"))),t&&t.lastIndexOf("/")>0&&(t=t.slice(0,t.lastIndexOf("/")+1))),this.href=t,e++,r&&console.log(`Opening web socket at ${t}`),e>2&&(0,B.Ae)(`Trying to connect ${t}`);let a=t;"file"==this.kind?(a+="root.filedump",this._websocket=new D(this),console.log(`configure protocol log ${a}`)):"websocket"===this.kind&&r?(a=a.replace("http://","ws://").replace("https://","wss://")+"root.websocket",i&&(a+="?"+i),console.log(`configure websocket ${a}`),this._websocket=new WebSocket(a)):(a+="root.longpoll",console.log(`configure longpoll ${a}`),this._websocket=new M(a,"rawlongpoll"===this.kind,i)),this._websocket&&(this._websocket.onopen=()=>{e>2&&(0,B.Ae)(),this.state=1,this.send("READY="+(this.key||""),0),this.invokeReceiver(!1,"onWebsocketOpened")},this._websocket.onmessage=n=>{let u=n.data;if(this.next_binary){let R=this.next_binary;if(delete this.next_binary,u instanceof Blob){let E=new FileReader,C=this.reserveQueueItem();E.onload=q=>this.markQueueItemDone(C,q.target.result,0),E.readAsArrayBuffer(u,n.offset||0)}else this.provideData(R,u,n.offset||0);return}if(!(0,f.isStr)(u))return console.log("unsupported message kind: "+typeof u);let g=u.indexOf(":"),x=parseInt(u.slice(0,g)),y=u.indexOf(":",g+1),k=u.indexOf(":",y+1),S=parseInt(u.slice(y+1,k));if(this.ackn++,this.cansend+=x,u=u.slice(k+1),0==S){if(console.log(`GET chid=0 message ${u}`),"CLOSE"==u)this.close(!0),this.invokeReceiver(!0,"onWebsocketClosed");else if(0==u.indexOf("NEW_KEY=")){let R=u.slice(8);this.close(!0),typeof sessionStorage<"u"&&sessionStorage.setItem("RWebWindow_Key",R),location.reload(!0)}}else"$$binary$$"==u?this.next_binary=S:"$$nullbinary$$"==u?this.provideData(S,new ArrayBuffer(0),0):this.provideData(S,u);this.ackn>7&&this.send("READY",0)},this._websocket.onclose=n=>{delete this._websocket,(this.state>0||"force_close"===n)&&(console.log("websocket closed"),this.state=0,this.invokeReceiver(!0,"onWebsocketClosed"))},this._websocket.onerror=n=>{console.log(`websocket error ${n} state ${this.state}`),this.state>0&&(this.invokeReceiver(!0,"onWebsocketError",n),this.state=0)},(0,f.isBatchMode)()||setTimeout(s,3e3))};s(!0)}askReload(){this.send("GENERATE_KEY",0)}addReloadKeyHandler(){"file"!=this.kind&&window.addEventListener("keydown",t=>{("R"==t.key||"r"==t.key)&&t.ctrlKey&&(t.stopPropagation(),t.preventDefault(),console.log("Prevent Ctrl-R propogation - ask reload RWebWindow!"),this.askReload())})}}class j extends w{constructor(t,e){super(t,e,!0),this._websocket=null,this.tooltip_allowed=f.settings.Tooltip,this.v7canvas=!0}cleanup(){delete this._websocket,delete this._submreq,this._changed_layout&&this.setLayoutKind("simple"),delete this._changed_layout,super.cleanup()}getLayoutKind(){let t=this.selectDom("origin");return(t.empty()?"":t.property("layout"))||"simple"}setLayoutKind(t,e){let i=this.selectDom("origin");i.empty()||(t||(t="simple"),i.property("layout",t),i.property("layout_selector","simple"!=t&&e?e:null),this._changed_layout="simple"!==t)}changeLayout(t,e){var i=this;return(0,F.Z)(function*(){if(i.getLayoutKind()==t)return!0;let r=i.selectDom("origin"),a=r.select(".side_panel"),n=i.selectDom(),u=[];for(;n.node().firstChild;)u.push(n.node().removeChild(n.node().firstChild));if(a.empty()||(0,Z.Eq)(a.node()),i.setLayoutKind("simple"),r.html(""),"simple"==t){n=r;for(let g=0;g{console.log("save",t,i.length),this.sendWebsocket("SAVE:"+t+":"+i)})}sendSaveCommand(t){this.sendWebsocket("PRODUCE:"+t)}sendWebsocket(t){return!!this._websocket?.canSend()&&(this._websocket.send(t),!0)}closeWebsocket(t){this._websocket&&(this._websocket.close(t),this._websocket.cleanup(),delete this._websocket)}useWebsocket(t){this.closeWebsocket(),this._websocket=t,this._websocket.setReceiver(this),this._websocket.connect()}onWebsocketOpened(){}onWebsocketClosed(){this.embed_canvas||(0,B.Hw)()}onWebsocketMsg(t,e){if(console.log("GET_MSG "+e.slice(0,30)),"CLOSE"==e)this.onWebsocketClosed(),this.closeWebsocket(!0);else if("SNAP:"==e.slice(0,5)){let i=(e=e.slice(5)).indexOf(":"),s=e.slice(0,i),r=(0,f.parse)(e.slice(i+1));this.syncDraw(!0).then(()=>this.redrawPadSnap(r)).then(()=>{t.send("SNAPDONE:"+s),this.confirmDraw()})}else if("JSON"==e.slice(0,4)){let i=(0,f.parse)(e.slice(4));this.redrawObject(i)}else if("REPL_REQ:"==e.slice(0,9))this.processDrawableReply(e.slice(9));else if("CMD:"==e.slice(0,4)){let i=(e=e.slice(4)).indexOf(":"),s=e.slice(0,i),r=e.slice(i+1),a="REPLY:"+s+":";if("SVG"==r||"PNG"==r||"JPEG"==r)this.createImage(r.toLowerCase()).then(n=>t.send(a+n));else if(0==r.indexOf("ADDPANEL:")){let n=r.slice(9);if((0,f.isFunc)(this.showUI5Panel)){let u=new z(t.kind);u.setReceiver({cpainter:this,onWebsocketOpened(){},onWebsocketMsg(x,y){let k=0==y.indexOf("SHOWPANEL:")?y.slice(10):"";this.cpainter.showUI5Panel(k,x).then(S=>t.send(a+(S?"true":"false")))},onWebsocketClosed(){t.send(a+"false")},onWebsocketError(){t.send(a+"false")}});let g=t.href;if(0==n.indexOf("../")){let x=g.lastIndexOf("/",g.length-2);g=g.slice(0,x)+n.slice(2)}else g+=n;u.connect(g)}else t.send(a+"false")}else console.log("Unrecognized command "+r),t.send(a)}else if("DXPROJ:"==e.slice(0,7)||"DYPROJ:"==e.slice(0,7)){let i=e[1],s=(0,f.parse)(e.slice(7));this.drawProjection(i,s)}else if("SHOW:"==e.slice(0,5)){let i=e.slice(5),s="1"==i[i.length-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._websocket&&e&&e._typename&&i.snapid&&(0,f.isStr)(i.snapid)))return null;if(t&&s){i._requests||(i._requests={});let a=i._requests[t];if(a){let n=(new Date).getTime();if(!a._tm||n-a._tm<5e3)return a._nextreq=e,!1;delete i._requests[t]}i._requests[t]=e}e.id=i.snapid,s?(this._nextreqid||(this._nextreqid=1),e.reqid=this._nextreqid++):e.reqid=0;let r=JSON.stringify(e);return e.reqid&&(e._kind=t,e._painter=i,e._method=s,e._tm=(new Date).getTime(),this._submreq||(this._submreq={}),this._submreq[e.reqid]=e),this.sendWebsocket("REQ:"+r),e}submitMenuRequest(t,e,i){var s=this;return(0,F.Z)(function*(){return new Promise(r=>{s.submitDrawableRequest("",{_typename:"ROOT::Experimental::RDrawableMenuRequest",menukind:e||"",menureqid:i},t,r)})})()}submitExec(t,e,i){if(this._websocket){if(i&&(0,f.isStr)(i)){let 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"),"x"!=i&&"y"!=i&&"z"!=i)return console.log(`not recoginzed subelem ${i} in SubmitExec`);e=i+"axis#"+e}this.submitDrawableRequest("",{_typename:"ROOT::Experimental::RDrawableExecRequest",exec:e},t)}}processDrawableReply(t){let e=(0,f.parse)(t);if(!e||!e.reqid||!this._submreq)return!1;let i=this._submreq[e.reqid];if(!i)return!1;delete this._submreq[e.reqid],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)}showSection(t,e){var i=this;return(0,F.Z)(function*(){switch(t){case"Menu":case"StatusBar":case"Editor":case"ToolBar":break;case"ToolTips":i.setTooltipAllowed(e)}return!0})()}processChanges(t,e,i){if(this._websocket&&this._websocket.canSend(2)&&(0,f.isStr)(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:"exec:"==t.slice(0,5)&&e?.snapid?this.submitExec(e,t.slice(5),i):console.log("UNPROCESSED CHANGES",t)}}clickPadButton(t,e){return"ToggleGed"==t?this.activateGed(this,null,"toggle"):"ToggleStatus"==t?this.activateStatusBar("toggle"):void super.clickPadButton(t,e)}hasEventStatus(){if(this.testUI5())return!1;if(this.brlayout)return this.brlayout.hasStatus();let t=(0,K.nh)();return!!t&&t.hasStatusLine()}activateStatusBar(t){this.testUI5()||(this.brlayout?this.brlayout.createStatusLine(23,t):(0,K.nh)()?.createStatusLine(23,t),this.processChanges("sbits",this))}showCanvasStatus(...t){this.testUI5()||(this.brlayout||(0,K.nh)()?.brlayout)?.showStatus(...t)}hasGed(){return!this.testUI5()&&(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:f.settings,create:f.create,parse:f.parse,toJSON:f.toJSON,loadScript:f.loadScript,EAxisBits:Z.VO,getColorExec:B.Aq}}}activateGed(t,e,i){var s=this;return(0,F.Z)(function*(){if(s.testUI5()||!s.brlayout)return!1;if(s.brlayout.hasContent())return"toggle"===i||!1===i?s.removeGed():t?.getPadPainter()?.selectObjectPainter(t),!0;if(!1===i)return!1;let r=s.brlayout.createBrowserBtns();return B.KL.createSVG(r,B.KL.diamand,15,"toggle fix-pos mode").style("margin","3px").on("click",()=>s.brlayout.toggleKind("fix")),B.KL.createSVG(r,B.KL.circle,15,"toggle float mode").style("margin","3px").on("click",()=>s.brlayout.toggleKind("float")),B.KL.createSVG(r,B.KL.cross,15,"delete GED").style("margin","3px").on("click",()=>s.removeGed()),s.brlayout.setBrowserContent("
Loading GED ...
"),s.brlayout.setBrowserTitle("GED"),s.brlayout.toggleBrowserKind(e||"float"),new Promise(a=>{B.OA.then(n=>{(0,W.Ys)("#ged_placeholder").text(""),n.ui.define(["sap/ui/model/json/JSONModel","sap/ui/core/mvc/XMLView"],(u,g)=>{let x=new u({handle:null});g.create({viewName:"rootui5.canv.view.Ged",viewData:s.getUi5PanelData("Ged")}).then(y=>{y.setModel(x),y.placeAt("ged_placeholder"),s.ged_view=y,s.registerForPadEvents(y.getController().padEventsReceiver.bind(y.getController())),t?.getPadPainter()?.selectObjectPainter(t),s.processChanges("sbits",s),a(!0)})})})})})()}produceJSON(){return console.error("RCanvasPainter.produceJSON not yet implemented"),""}static draw(t,e){return(0,F.Z)(function*(){let i=!e;i&&(e=(0,f.create)("ROOT::Experimental::RCanvas"));let s=new j(t,e);return s.normal_canvas=!i,s.createCanvasSvg(0),(0,Z.O5)({pp:s,active:!1}),s.drawPrimitives().then(()=>(s.addPadButtons(),s.showPadButtons(),s))})()}}function P(_,t){let e=new j(_,null);return e.normal_canvas=!1,e.batch_mode=(0,f.isBatchMode)(),e.syncDraw(!0).then(()=>e.redrawPadSnap(t)).then(()=>(e.confirmDraw(),e.showPadButtons(),e))}function I(_,t){return Y.apply(this,arguments)}function Y(){return(Y=(0,F.Z)(function*(_,t){return _?(_.getCanvSvg().empty()?j.draw(_.getDom(),null):Promise.resolve(!0)).then(()=>{if(!1!==t&&_.getFrameSvg().select(".main_layer").empty())return o.draw(_.getDom(),null,(0,f.isStr)(t)?t:"")}).then(()=>(_.addToPadPrimitives(),_)):Promise.reject(Error("Painter not provided in ensureRCanvas"))})).apply(this,arguments)}function N(_,t){let e=this.getFramePainter();if(!e)return console.log("no frame painter - no title");let i=e.getFrameRect(),s=i.x,r=i.y,a=i.width,n=this.getPadPainter().getPadHeight(),u=this.getObject(),g=this.v7EvalLength("margin",n,.02),x=a,y=this.v7EvalLength("height",n,.05),k=this.v7EvalFont("text",{size:.07,color:"black",align:22});if("drag"==_){y=t.height,g=r-t.y-t.height;let R={};this.v7AttrChange(R,"margin",g/n),this.v7AttrChange(R,"height",y/n),this.v7SendAttrChanges(R,!1)}this.createG(),this.draw_g.attr("transform",`translate(${s},${Math.round(r-g-y)})`);let S={x:x/2,y:y/2,text:u.fText,latex:1};return this.startTextDrawing(k,"font"),this.drawText(S),this.finishTextDrawing().then(()=>{(0,f.isBatchMode)()||(0,c.uI)(this,{x:s,y:Math.round(r-g-y),width:x,height:y,minwidth:20,minheight:20,no_change_x:!0,redraw:R=>this.redraw("drag",R)})})}function X(){let _=this.getObject(),t=this.getCanvSvg(),e=t.select(".canvas_defs"),i="custom_font_"+_.fFamily+_.fWeight+_.fStyle;e.empty()&&(e=t.insert("svg:defs",":first-child").attr("class","canvas_defs"));let s=e.select("."+i);return s.empty()&&(s=e.append("style").attr("type","text/css").attr("class",i)),s.text(`@font-face { font-family: "${_.fFamily}"; font-weight: ${_.fWeight?_.fWeight:"normal"}; font-style: ${_.fStyle?_.fStyle:"normal"}; src: ${_.fSrc}; }`),_.fDefault&&(this.getPadPainter()._dfltRFont=_),!0}function G(_,t,e){let i=new m.C(_,t,e);return i.disable_zooming=!0,I(i,!1).then(()=>i.redraw()).then(()=>i)}function U(_,t,e){let i=new o(_,t);return"3d"==e&&(i.mode3d=!0),I(i,!1).then(()=>i.redraw())}(0,f.registerMethods)("ROOT::Experimental::RPalette",{extractRColor:_=>_.fColor||"black",getColor(_){return this.palette[_]},getContourIndex(_){let s,t=this.fContour,e=0,i=t.length-1;if(_=t[i])return i-1;if(this.fCustomContour){for(;e_?i=s:e=s;return e}return Math.floor((_-t[0])/(t[i-1]-t[0])*(i-1))},getContourColor(_){let t=this.getContourIndex(_);return t<0?"":this.getColor(t)},getContour(){return this.fContour&&this.fContour.length>1?this.fContour:null},deleteContour(){delete this.fContour},calcColor(_,t,e){let i=e.fOrdinal-t.fOrdinal,s=e.fOrdinal-_,r=_-t.fOrdinal;if(!this.fInterpolate||i<=0)return s1&&(_=1);let t,e=this.fColors[0];for(let i=0;i_)return this.calcColor(_,t,e)}return this.extractRColor(e.fColor)},setFullRange(_,t){this.full_min=_,this.full_max=t},createContour(_,t,e,i,s){if(this.fContour=[],delete this.fCustomContour,this.colzmin=e,this.colzmax=i,_){this.colzmax<=0&&(this.colzmax=1),this.colzmin<=0&&(this.colzmin=void 0===s||s<=0?1e-4*this.colzmax:s<3||s>100?.3*s:1),this.colzmin>=this.colzmax&&(this.colzmin=1e-4*this.colzmax);let r=Math.log(this.colzmin)/Math.log(10),n=(Math.log(this.colzmax)/Math.log(10)-r)/t;this.fContour.push(this.colzmin);for(let u=1;u{T.d(J,{p:()=>Z});var F=T(9542),f=T(4953),W=T(6458);class Z extends W.tK{constructor(m,b,h,c){super(m,b,h),this.csstype=c}v7EvalAttr(m,b){let h=this.getObject();if(!h)return b;this.cssprefix&&(m=this.cssprefix+m);const c=o=>{if(void 0===b)return o;let l=typeof b,d=typeof o;return l==d?o:"boolean"==l?"string"==d?""!=o&&"0"!=o&&"no"!=o&&"off"!=o:!!o:"number"==l&&"string"==d?parseFloat(o):o};if(h.fAttr&&h.fAttr.m){let o=h.fAttr.m[m];if(o)return c(o.v)}if(this.rstyle&&this.rstyle.fBlocks){let o=this.rstyle.fBlocks;for(let l=0;l=d.length)break;if("-"==d[v]||"+"==d[v]){if(p)return console.log("Fail to parse RPadLength "+c),h;p="-"==d[v]?-1:1,v++;continue}for(v>0&&(d=d.slice(v),v=0);v="0"&&d[v]<="9"||"."==d[v]);)v++;let w=parseFloat(d.slice(0,v));if(!Number.isFinite(w))return console.log("Fail to parse RPadLength "+c),Math.round(h*b);d=d.slice(v),v=0,p||(p=1),d&&"%"==d[0]?(d=d.slice(1),o+=p*w*.01):d.length>1&&"p"==d[0]&&"x"==d[1]?(d=d.slice(2),l+=p*w):o+=p*w,p=0}return Math.round(o*b+l)}v7EvalColor(m,b){let h=this.v7EvalAttr(m,"");if(!h||!(0,F.isStr)(h))return b;if("auto"==h){let c=this.getPadPainter();if(void 0!==c?._auto_color_cnt){let o=c.getHistPalette(),l=c._auto_color_cnt++,d=c._num_primitives-1;d<2&&(d=2),h=o?o.getColorOrdinal(l%d/d):"blue",this._auto_colors||(this._auto_colors={}),this._auto_colors[m]=h}else this._auto_colors&&this._auto_colors[m]?h=this._auto_colors[m]:(console.error(`Autocolor ${m} not defined yet - please check code`),h="")}else if("["==h[0]){let c=parseFloat(h.slice(1,h.length-1));if(h="black",Number.isFinite(c)){let l=this.getPadPainter()?.getHistPalette();l&&(h=l.getColorOrdinal(c))}}return h}v7EvalFont(m,b,h){b?"number"==typeof b&&(b={size:b}):b={};let c=this.getPadPainter(),o=c?._dfltRFont||{fFamily:"Arial",fStyle:"",fWeight:""},l=this.v7EvalAttr(m+"_size",b.size||12),d=this.v7EvalAttr(m+"_angle",0),p=this.v7EvalAttr(m+"_align",b.align||"none"),v=this.v7EvalColor(m+"_color",b.color||"none"),w=this.v7EvalAttr(m+"_font_family",o.fFamily||"Arial"),M=this.v7EvalAttr(m+"_font_style",o.fStyle||""),D=this.v7EvalAttr(m+"_font_weight",o.fWeight||"");(0,F.isStr)(l)&&(l=parseFloat(l)),(!Number.isFinite(l)||l<=0)&&(l=12),h||(h=c?.getPadHeight()||100);let z=new f.G(null,l,h,w,M,D);return d&&z.setAngle(360-d),"none"!==p&&z.setAlign(p),"none"!==v&&z.setColor(v),z}createv7AttFill(m){(!m||!(0,F.isStr)(m))&&(m="fill_");let b=this.v7EvalColor(m+"color",""),h=this.v7EvalAttr(m+"style",0);this.createAttFill({pattern:h,color:b,color_as_svg:!0})}createv7AttLine(m){(!m||!(0,F.isStr)(m))&&(m="line_");let b=this.v7EvalColor(m+"color","black"),h=this.v7EvalAttr(m+"width",1),c=this.v7EvalAttr(m+"style",1),o=this.v7EvalAttr(m+"pattern");this.createAttLine({color:b,width:h,style:c,pattern:o}),"border_"==m&&this.lineatt.setBorder(this.v7EvalAttr(m+"rx",0),this.v7EvalAttr(m+"ry",0))}createv7AttMarker(m){(!m||!(0,F.isStr)(m))&&(m="marker_");let b=this.v7EvalColor(m+"color","black"),h=this.v7EvalAttr(m+"size",.01),c=this.v7EvalAttr(m+"style",1),o=1;h<1&&(o=this.getPadPainter()?.getPadHeight()||100),this.createAttMarker({color:b,size:h,style:c,refsize:o})}v7AttrChange(m,b,h,c){if(!this.snapid)return!1;m._typename||(m._typename="ROOT::Experimental::RChangeAttrRequest",m.ids=[],m.names=[],m.values=[],m.update=!0),this.cssprefix&&(b=this.cssprefix+b),m.ids.push(this.snapid),m.names.push(b);let o=null;if(null==h&&(c||(c="none"),"none"!==c&&console.error(`Trying to set ${c} for none value`)),!c)switch(typeof h){case"number":c="double";break;case"boolean":c="boolean"}switch(o={_typename:"ROOT::Experimental::RAttrMap::"},c){case"none":o._typename+="NoValue_t";break;case"boolean":o._typename+="BoolValue_t",o.v=!!h;break;case"int":o._typename+="IntValue_t",o.v=parseInt(h);break;case"double":o._typename+="DoubleValue_t",o.v=parseFloat(h);break;default:o._typename+="StringValue_t",o.v=(0,F.isStr)(h)?h:JSON.stringify(h)}return m.values.push(o),!0}v7SendAttrChanges(m,b){let h=this.getCanvPainter();h&&m?._typename&&(void 0!==b&&(m.update=!!b),h.v7SubmitRequest("",m))}v7SubmitRequest(m,b,h){let c=this.getCanvPainter();return(0,F.isFunc)(c?.submitDrawableRequest)?this.snapid?c.submitDrawableRequest(m,b,this,h):(this._pending_request={kind:m,req:b,method:h},b):null}assignSnapId(m){if(this.snapid=m,this.snapid&&this._pending_request){let b=this._pending_request;this.v7SubmitRequest(b.kind,b.req,b.method),delete this._pending_request}}v7CommMode(){let m=this.getCanvPainter();return m&&m.submitDrawableRequest&&m._websocket?1:3}v7NormalMode(){return 1==this.v7CommMode()}v7OfflineMode(){return 3==this.v7CommMode()}}},9850:(et,J,T)=>{T.d(J,{C:()=>m});var F=T(5835),f=T(9542),W=T(2253),B=T(6030),K=T(4383),Z=T(6116),V=T(3029);class m extends V.p{constructor(h,c,o,l){super(h,l?c.getObject():c,"",l?c.csstype:"axis"),Object.assign(this,B.KB),this.initAxisPainter(),this.axis=o,l?(this.embedded=!0,this.cssprefix=l,this.rstyle=c.rstyle):this.cssprefix="axis_"}cleanup(){delete this.axis,delete this.axis_g,this.cleanupAxisPainter(),super.cleanup()}getAxisType(){return"RAttrAxis"}configureZAxis(h,c){this.name=h,this.kind="normal",this.log=!1;let o=this.v7EvalAttr("log",0);o&&(this.log=!0,this.logbase=10,Math.abs(o-Math.exp(1))<.1?this.logbase=Math.exp(1):o>1.9&&(this.logbase=Math.round(o))),c.logz=this.log}configureAxis(h,c,o,l,d,p,v,w,M){M||(M={}),this.name=h,this.full_min=c,this.full_max=o,this.kind="normal",this.vertical=p,this.log=!1;let D=this.v7EvalAttr("log",0),z=this.v7EvalAttr("symlog",0);if(this.reverse=M.reverse||!1,this.v7EvalAttr("time")){this.kind="time",this.timeoffset=0;let P=this.v7EvalAttr("timeOffset");void 0!==P&&(P=parseFloat(P),Number.isFinite(P)&&(this.timeoffset=1e3*P))}else this.axis&&this.axis.fLabelsIndex?(this.kind="labels",delete this.own_labels):this.kind=M.labels?"labels":"normal";"time"==this.kind?this.func=(0,W.Xf)().domain([this.convertDate(l),this.convertDate(d)]):z&&z>0?(this.symlog=z,this.func=(0,W.eh)().constant(z).domain([l,d])):D?(d<=0&&(d=1),(l<=0||l>=d)&&(l=1e-4*d),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=(0,W.p2)().base(this.logbase).domain([l,d])):this.func=(0,W.BY)().domain([l,d]),this.scale_min=l,this.scale_max=d,this.gr_range=w||1e3;let A=v||[0,this.gr_range];this.axis_shift=A[1]-this.gr_range,this.func.range(this.reverse?[A[1],A[0]]:A),this.gr="time"==this.kind?P=>this.func(this.convertDate(P)):this.log?P=>P20&&(this.nticks=20);let j=Math.abs(this.gr_range)||100;if("time"==this.kind){this.nticks>8&&(this.nticks=8);let P=this.scale_max-this.scale_min,I=this.v7EvalAttr("timeFormat",""),Y=(0,B.ai)(P/j,!1);(!I||P<.1*(this.full_max-this.full_min))&&(I=(0,B.ai)(P/this.nticks,!0)),this.tfunc1=this.tfunc2=(0,W.i$)(I),Y!==I&&(this.tfunc2=(0,W.i$)(Y)),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&&10==this.logbase&&(this.noexp=!0),this.moreloglabels=this.v7EvalAttr("moreloglbls",!1),this.format=this.formatLog;else if("labels"==this.kind){this.nticks=50;let P=this.scale_max-this.scale_min;this.nticks>P&&(this.nticks=Math.round(P)),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(h){let c=Math.round(h);if(this.axis&&this.axis.fLabelsIndex){if(c<0||c>=this.axis.fNBinsNoOver)return null;for(let o=0;o=0&&cthis.scale_min+v&&p.unshift(this.scale_min),p[p.length-1]1&&(!this.log||10===this.logbase)){d.minor=d.middle=this.produceTicks(d.major.length,this.nticks2);let p=Math.abs(this.func.range()[1]-this.func.range()[0]);d.middle.length<=d.major.length||d.middle.length>p/3.5?d.minor=d.middle=d.major:this.nticks3>1&&!this.log&&(d.minor=this.produceTicks(d.middle.length,this.nticks3),(d.minor.length<=d.middle.length||d.minor.length>p/1.7)&&(d.minor=d.middle))}if(d.reset=function(){this.nminor=this.nmiddle=this.nmajor=0},d.next=function(p){return!(this.nminor>=this.minor.length||(this.tick=this.minor[this.nminor++],this.grpos=this.func(this.tick),p&&(this.grpos=Math.round(this.grpos)),this.kind=3,this.nmiddle=this.major.length?null:this.func(this.major[this.nmajor])},this.order=0,this.ndig=0,"normal"==this.kind&&!this.log&&d.major.length>0){let p=0,v=0,w=!1;if(!c){let A=Math.max(Math.abs(d.major[0]),Math.abs(d.major[d.major.length-1])),O=Math.min(Math.abs(d.major[0]),Math.abs(d.major[d.major.length-1])),j=A>0?3*Math.round(Math.log10(A)/3):0,P=O>0?3*Math.round(Math.log10(O)/3):0;w=A<2e4,(A||O)&&(p=Math.max(j,P)+3,v=Math.min(j,P)-3)}let M=0,D=this.ndig,z=1e10;for(let A=v;A<=p;A+=3){if(w&&3===A)continue;this.order=A,this.ndig=0;let O=[],j=0,P=0;for(;j11)break;O=[],j=0,P=0}}!A&&this.ndig<4&&(P-=2*d.major.length+3),P{z.sourceEvent.preventDefault(),z.sourceEvent.stopPropagation();let A=h.node().getBBox(),O=this.vertical?A.height:A.width;p=l=h.property("shift_x"),v=d=h.property("shift_y"),M="center"==this.titlePos?1:"left"==this.titlePos?0:2,w=[0,this.gr_range/2,this.gr_range];let j=this.vertical?-O:O,P=this.isReverseAxis()?2:0;"middle"==this.title_align?(w[P]+=j/2,w[2-P]-=j/2):"begin"==this.title_align^this.isTitleRotated()?(w[1]-=j/2,w[2-P]-=j):(w[P]+=j,w[1]+=j/2),w[M]=this.vertical?d:l,o=h.append("rect").classed("zoom",!0).attr("x",A.x).attr("y",A.y).attr("width",A.width).attr("height",A.height).style("cursor","move")}).on("drag",z=>{if(!o)return;z.sourceEvent.preventDefault(),z.sourceEvent.stopPropagation(),l+=z.dx,d+=z.dy;let A,O,j=this.vertical?d:l,P=0;for(let I=1;I<3;++I)Math.abs(j-w[I]){if(!o)return;z.sourceEvent.preventDefault(),z.sourceEvent.stopPropagation();let A=h.property("basepos")||0;h.property("shift_x",p).property("shift_y",v),this.titleOffset=(this.vertical?A-p:v-A)*c,this.titlePos=1==M?"center":0==M?"left":"right",this.changeAxisAttr(0,"title_position",this.titlePos,"title_offset",this.titleOffset/this.scalingSize),o.remove(),o=null}),h.style("cursor","move").call(D)}isInsideGrRange(h,c,o){return c||(c=0),void 0===o&&(o=c),this.gr_range<0?h>=this.gr_range-o&&h<=c:h>=-c&&h<=this.gr_range+o}getGrRange(h){return h||(h=0),this.gr_range<0?this.gr_range-h:this.gr_range+h}isReverseAxis(){return!this.vertical!=this.getGrRange()>0}drawMainLine(h){let c="";if(this.endingSize&&this.endingStyle){let o=this.gr_range>0?-this.endingSize:this.endingSize,l=Math.round(.7*o);o=Math.round(o),c=this.vertical?`l${l},${o}M0,${this.gr_range}l${-l},${o}`:`l${o},${l}M${this.gr_range},0l${o},${-l}`}h.append("svg:path").attr("d","M0,0"+(this.vertical?"v":"h")+this.gr_range+c).call(this.lineatt.func).style("fill",c?"none":null)}drawTicks(h,c,o){o&&(this.ticks=[]),this.handle.reset();let l="",d=0;for("both"==this.ticksSide&&(c=1,d=1);this.handle.next(!0);){let w=Math.round(this.ticksSize/4),M=0;this.handle.kind<3&&(w=Math.round(this.ticksSize/2));let D=this.handle.grpos-this.axis_shift;(this.startingSize||this.endingSize)&&!this.isInsideGrRange(D,-Math.abs(this.startingSize),-Math.abs(this.endingSize))||(1==this.handle.kind&&(("labels"==this.kind||null!==this.format(this.handle.tick,!0))&&(w=this.ticksSize),o&&this.ticks.push(D)),d>0?M=-w:c<0?(M=-w,w=0):M=0,l+=this.vertical?`M${w},${D}H${M}`:`M${D},${-w}V${-M}`)}l&&h.append("svg:path").attr("d",l).style("stroke",this.ticksColor||this.lineatt.color).style("stroke-width",this.ticksWidth&&1!=this.ticksWidth?this.ticksWidth:null);let p=Math.round(.25*this.ticksSize),v=Math.round(1.25*this.ticksSize);return{"-1":c>0||d?v:p,1:c<0||d?v:p}}drawLabels(h,c,o){var l=this;return(0,F.Z)(function*(){let d=l.isCenteredLabels(),p=0!=l.labelsFont.angle,v=1,w=0,M=!1,D=h.append("svg:g").attr("class","axis_labels").property("side",c),z=l.handle.lbl_pos||l.handle.major,A=0,O=0;function j(N){A=Math.max(A,this.result_width),O=Math.max(O,this.result_height);let X=this.result_width;if(X&&(!N.vertical&&!p||N.vertical&&p)&&!N.log){let U=.45*this.gap_before+.45*this.gap_after;this.gap_before?this.gap_after||(U=.9*this.gap_before):U=.9*this.gap_after,v=Math.min(v,U/X)}v>1e-4&&v<.8&&!N.vertical&&!p&&w>5&&c>0&&(M=!0);let G=v*(M?3:1);G>1e-4&&G<1&&N.scaleTextDrawing(1/G,D)}let P=0,I=Math.round((l.vertical?-c:c)*l.labelsOffset),Y=Math.round((l.vertical?-c:c)*o[c]);I&&D.attr("transform",l.vertical?`translate(${I})`:`translate(0,${I})`),D.property("fix_offset",I),l.startTextDrawing(l.labelsFont,"font",D);for(let N=0;N0?Math.abs(Math.round(G-l.func(z[N-1]))):0,U.gap_after=N{if(M&&D.selectAll("text").each(function(){let N=(0,W.Ys)(this),X=N.attr("transform");N.attr("transform",X+" rotate(25)").style("text-anchor","start")}),l.vertical)o[c]+=Math.round(p?1.2*O:A+.4*l.labelsFont.size)-c*I;else{let N=M?A*Math.sin(.1388888888888889*Math.PI)+O*(Math.cos(.1388888888888889*Math.PI)+.2):0;o[c]+=Math.round(Math.max(p?A+.4*l.labelsFont.size:1.2*O,1.2*l.labelsFont.size,N))+I}return o})})()}addZoomingRect(h,c,o){if(f.settings.Zooming&&!this.disable_zooming&&!(0,f.isBatchMode)()){let l=Math.max(o[c],10),d=this.vertical?`v${this.gr_range}h${-c*l}v${-this.gr_range}`:`h${this.gr_range}v${c*l}h${-this.gr_range}`;h.append("svg:path").attr("d",`M0,0${d}z`).attr("class","axis_zoom").style("opacity","0").style("cursor","crosshair")}}isTitleRotated(){return this.titleFont&&this.titleFont.angle!=(this.vertical?270:0)}drawTitle(h,c,o){var l=this;return(0,F.Z)(function*(){if(!l.fTitle)return l;let d=h.append("svg:g").attr("class","axis_title"),p=0,v=0,w=0,M=l.isTitleRotated();return l.startTextDrawing(l.titleFont,"font",d),l.title_align=l.titleCenter?"middle":l.titleOpposite^(l.isReverseAxis()||M)?"begin":"end",l.vertical?(w=Math.round(-c*o[c]),p=w+Math.round(-c*l.titleOffset),v=Math.round(l.titleCenter?l.gr_range/2:l.titleOpposite?0:l.gr_range),l.drawText({align:[l.title_align,c<0^M?"top":"bottom"],text:l.fTitle,draw_g:d})):(p=Math.round(l.titleCenter?l.gr_range/2:l.titleOpposite?0:l.gr_range),w=Math.round(c*o[c]),v=w+Math.round(c*l.titleOffset),l.drawText({align:[l.title_align,c>0^M?"top":"bottom"],text:l.fTitle,draw_g:d})),d.attr("transform",`translate(${p},${v})`).property("basepos",w).property("shift_x",p).property("shift_y",v),l.addTitleDrag(d,c),l.finishTextDrawing(d)})()}extractDrawAttributes(h){let c=this.getPadPainter(),o=c?.getPadRect()||{width:10,height:10};this.scalingSize=h||(this.vertical?o.width:o.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),h&&this.ticksSize<0&&(this.ticksSize=-this.ticksSize),this.fTitle=this.v7EvalAttr("title_value",""),this.fTitle?(this.titleFont=this.v7EvalFont("title",{size:.03},h||c?.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="center"==this.titlePos,this.titleOpposite="left"==this.titlePos):(delete this.titleFont,delete this.titleOffset,delete this.titlePos),this.labelsFont=this.v7EvalFont("labels",{size:h?.05:.03}),this.labelsFont.roundAngle(180),this.labelsFont.angle&&(this.labelsFont.angle=270),this.labelsOffset=this.v7EvalLength("labels_offset",this.scalingSize,0),h&&(this.ticksSize=.5*this.labelsFont.size),this.maxTickSize&&this.ticksSize>this.maxTickSize&&(this.ticksSize=this.maxTickSize)}drawAxis(h,c,o){var l=this;return(0,F.Z)(function*(){let d=h;void 0===o&&(o=1),l.standalone||(d=h.select("."+l.name+"_container"),d.empty()?d=h.append("svg:g").attr("class",l.name+"_container"):d.selectAll("*").remove()),d.attr("transform",c||null),l.extractDrawAttributes(),l.axis_g=d,l.side=o,"invert"==l.ticksSide&&(o=-o),l.standalone&&l.drawMainLine(d),l.handle=l.createTicks(!1,!1,!1,!1);let M=l.drawTicks(d,o,!0);return(l.optionUnlab?Promise.resolve(M):l.drawLabels(d,o,M)).then(z=>(l.addZoomingRect(d,l.standalone?o:l.side,z),l.drawTitle(d,o,z)))})()}setAfterDrawHandler(h){this._afterDrawAgain=h}drawAxisAgain(){if(!this.axis_g||!this.side)return;this.axis_g.selectAll("*").remove(),this.extractDrawAttributes();let h=this.side;"invert"==this.ticksSide&&(h=-h),this.standalone&&this.drawMainLine(this.axis_g);let c=this.drawTicks(this.axis_g,h,!1);return(this.optionUnlab?Promise.resolve(c):this.drawLabels(this.axis_g,h,c)).then(l=>(this.addZoomingRect(this.axis_g,this.standalone?h:this.side,l),this.drawTitle(this.axis_g,h,l))).then(()=>{(0,f.isFunc)(this._afterDrawAgain)&&this._afterDrawAgain()})}drawAxisOtherPlace(h,c,o,l){let d=h.select("."+this.name+"_container2");d.empty()?d=h.append("svg:g").attr("class",this.name+"_container2"):d.selectAll("*").remove(),d.attr("transform",c||null),"invert"==this.ticksSide&&(o=-o);let p=this.drawTicks(d,o,!1);return(this.optionUnlab||l?Promise.resolve(p):this.drawLabels(d,o,p)).then(w=>(this.addZoomingRect(d,o,w),!0))}zoomStandalone(h,c){this.changeAxisAttr(1,"zoomMin",h,"zoomMax",c)}redraw(){let h=this.getObject(),c=this.getPadPainter(),o=c.getCoordinate(h.fPos),l=c.getPadLength(h.fVertical,h.fLength),d=this.v7EvalAttr("reverse",!1),p=h.fLabels.length,v=p>0?0:this.v7EvalAttr("min",0),w=p>0?p:this.v7EvalAttr("max",100);h.fVertical&&(l-=c.getPadHeight());let M=this.v7EvalAttr("zoomMin"),D=this.v7EvalAttr("zoomMax");M===D&&(M=v,D=w),this.configureAxis("axis",v,w,M,D,h.fVertical,void 0,l,{reverse:d,labels:p>0}),this.createG(),this.standalone=!0;let z=this.drawAxis(this.draw_g,`translate(${o.x},${o.y})`);return(0,f.isBatchMode)()?z:z.then(()=>{f.settings.ContextMenu&&this.draw_g.on("contextmenu",A=>{A.stopPropagation(),A.preventDefault(),(0,K.Z)(A,this).then(O=>{O.add("header:RAxisDrawable"),O.add("Unzoom",()=>this.zoomStandalone()),this.fillAxisContextMenu(O,""),O.show()})}),(0,Z.uI)(this,{x:o.x,y:o.y,width:this.vertical?10:l,height:this.vertical?l:10,only_move:!0,redraw:A=>this.positionChanged(A)}),this.draw_g.on("dblclick",()=>this.zoomStandalone()),f.settings.ZoomWheel&&this.draw_g.on("wheel",A=>{A.stopPropagation(),A.preventDefault();let O=(0,W.cx)(A,this.draw_g.node()),P=this.analyzeWheelEvent(A,this.vertical?1-O[1]/l:O[0]/l);P.changed&&this.zoomStandalone(P.min,P.max)})})}positionChanged(h){let c=this.getObject(),o=this.getPadPainter().getPadRect(),l=h.x/o.width,d=1-h.y/o.height;c.fPos.fHoriz.fArr=[l],c.fPos.fVert.fArr=[d],this.submitCanvExec(`SetPos({${l.toFixed(4)},${d.toFixed(4)}})`)}changeAxisAttr(h){let c={},o=1;for(;othis.getFramePainter().unzoom(c)),h.add("sub:Log scale",()=>this.changeAxisLog("toggle")),h.addchk(!this.log&&!this.symlog,"linear",0,o=>this.changeAxisLog(o)),h.addchk(this.log&&!this.symlog&&10==this.logbase,"log10",()=>this.changeAxisLog(10)),h.addchk(this.log&&!this.symlog&&2==this.logbase,"log2",()=>this.changeAxisLog(2)),h.addchk(this.log&&!this.symlog&&Math.abs(this.logbase-Math.exp(1))<.1,"ln",()=>this.changeAxisLog(Math.exp(1))),h.addchk(!this.log&&this.symlog,"symlog",0,()=>h.input("set symlog constant",this.symlog||10,"float").then(o=>this.changeAxisAttr(2,"symlog",o))),h.add("endsub:"),h.add("Divisions",()=>h.input("Set axis devisions",this.v7EvalAttr("ndiv",508),"int").then(o=>this.changeAxisAttr(2,"ndiv",o))),h.add("sub:Ticks"),h.addRColorMenu("color",this.ticksColor,o=>this.changeAxisAttr(1,"ticks_color",o)),h.addSizeMenu("size",0,.05,.01,this.ticksSize/this.scalingSize,o=>this.changeAxisAttr(1,"ticks_size",o)),h.addSelectMenu("side",["normal","invert","both"],this.ticksSide,o=>this.changeAxisAttr(1,"ticks_side",o)),h.add("endsub:"),!this.optionUnlab&&this.labelsFont&&(h.add("sub:Labels"),h.addSizeMenu("offset",-.05,.05,.01,this.labelsOffset/this.scalingSize,o=>this.changeAxisAttr(1,"labels_offset",o)),h.addRAttrTextItems(this.labelsFont,{noangle:1,noalign:1},o=>this.changeAxisAttr(1,"labels_"+o.name,o.value)),h.addchk(this.labelsFont.angle,"rotate",o=>this.changeAxisAttr(1,"labels_angle",o?180:0)),h.add("endsub:")),h.add("sub:Title",()=>h.input("Enter axis title",this.fTitle).then(o=>this.changeAxisAttr(1,"title_value",o))),this.fTitle&&(h.addSizeMenu("offset",-.05,.05,.01,this.titleOffset/this.scalingSize,o=>this.changeAxisAttr(1,"title_offset",o)),h.addSelectMenu("position",["left","center","right"],this.titlePos,o=>this.changeAxisAttr(1,"title_position",o)),h.addchk(this.isTitleRotated(),"rotate",o=>this.changeAxisAttr(1,"title_angle",o?180:0)),h.addRAttrTextItems(this.titleFont,{noangle:1,noalign:1},o=>this.changeAxisAttr(1,"title_"+o.name,o.value))),h.add("endsub:"),!0}}},9056:(et,J,T)=>{T.r(J),T.d(J,{RCanvasPainter:()=>j,RObjectPainter:()=>V.p,RPadPainter:()=>w,drawRAxis:()=>G,drawRFont:()=>X,drawRFrame:()=>U,drawRFrameTitle:()=>N,drawRPadSnapshot:()=>P,ensureRCanvas:()=>I});var F=T(5835),f=T(9542),W=T(2253),B=T(9622),K=T(2487),Z=T(6458),V=T(3029),m=T(9850),b=T(6367),h=T(6030),c=T(6116);class o extends V.p{constructor(t,e){super(t,e,"","frame"),this.mode3d=!1,this.xmin=this.xmax=0,this.ymin=this.ymax=0,this.axes_drawn=!1,this.keys_handler=null,this.projection=0,this.v7_frame=!0}getFramePainter(){return this}is_root6(){return!1}setFrameActive(t){this.enabledKeys=!(!t||!f.settings.HandleKeys),this.control&&(this.control.enableKeys=this.enabledKeys)}setLastEventPos(t){this.fLastEventPnt=t}getLastEventPos(){return this.fLastEventPnt}updateAttributes(t){if(void 0===this.fX1NDC||t&&!this.modified_NDC){let e=this.getPadPainter().getPadRect();this.fX1NDC=this.v7EvalLength("margins_left",e.width,f.settings.FrameNDC.fX1NDC)/e.width,this.fY1NDC=this.v7EvalLength("margins_bottom",e.height,f.settings.FrameNDC.fY1NDC)/e.height,this.fX2NDC=1-this.v7EvalLength("margins_right",e.width,1-f.settings.FrameNDC.fX2NDC)/e.width,this.fY2NDC=1-this.v7EvalLength("margins_top",e.height,1-f.settings.FrameNDC.fY2NDC)/e.height}this.fillatt||this.createv7AttFill(),this.createv7AttLine("border_")}getProjectionFunc(){switch(this.projection){case 1:return(t,e)=>{const i=Math.PI/180,s=t/2*i,r=e*i,a=Math.sqrt(2),n=2*a/Math.PI,u=Math.cos(r),g=Math.sqrt(1+u*Math.cos(s));return{x:u*Math.sin(s)*2*a/g/n/i,y:Math.sin(r)*a/g/n/i}};case 2:return(t,e)=>({x:t,y:Math.log(Math.tan((Math.PI/2+e/180*Math.PI)/2))});case 3:return(t,e)=>({x:t*Math.cos(e/180*Math.PI),y:e});case 4:return(t,e)=>({x:t*(2*Math.cos(2*e/180*Math.PI/3)-1),y:180*Math.sin(e/180*Math.PI/3)})}}recalculateRange(t){this.projection=t||0,2==this.projection&&(this.scale_ymin<=-90||this.scale_ymax>=90)&&(console.warn(`Mercator Projection: latitude out of range ${this.scale_ymin} ${this.scale_ymax}`),this.projection=0);let e=this.getProjectionFunc();if(!e)return;let 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;s0?this.getColor(f.gStyle.fGridColor):"black";if(this.x_handle&&(this.x_handle.draw_grid=s),this.x_handle&&this.x_handle.draw_grid){let u="";for(let g=0;g0?this.scale_ymax=Math.exp(1.1*Math.log(this.scale_ymax)):this.scale_ymax+=.1*(this.scale_ymax-this.scale_ymin)),this.zoom_ymin==this.zoom_ymax&&t.zoom_ymin!=t.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 s=this.xaxis,r=this.yaxis;s?._typename!=f.clTAxis&&(s=(0,f.create)(f.clTAxis)),r?._typename!=f.clTAxis&&(r=(0,f.create)(f.clTAxis)),this.x_handle=new h.z4(this.getDom(),s,!0),this.x_handle.setPadName(this.getPadName()),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.swap_xy,this.swap_xy?[0,i]:[0,e],{reverse:this.reverse_x,log:this.swap_xy?this.logy:this.logx,symlog:this.swap_xy?t.symlog_y:t.symlog_x,logcheckmin:this.swap_xy,logminfactor:1e-4}),this.x_handle.assignFrameMembers(this,"x"),this.y_handle=new h.z4(this.getDom(),r,!0),this.y_handle.setPadName(this.getPadName()),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.swap_xy,this.swap_xy?[0,e]:[0,i],{reverse:this.reverse_y,log:this.swap_xy?this.logx:this.logy,symlog:this.swap_xy?t.symlog_x:t.symlog_y,logcheckmin:t.ndim<2||this.swap_xy,log_min_nz:t.ymin_nz&&t.ymin_nz<.01*this.ymax?.3*t.ymin_nz:0,logminfactor:3e-4}),this.y_handle.assignFrameMembers(this,"y")}hasDrawnAxes(t,e){return!t&&!e&&this.axes_drawn}drawAxes(){var t=this;return(0,F.Z)(function*(){if(t.axes_drawn||t.xmin==t.xmax||t.ymin==t.ymax)return t.axes_drawn;let e=t.v7EvalAttr("ticksX",1),i=t.v7EvalAttr("ticksY",1),s=1,r=1;t.v7EvalAttr("swapX",!1)&&(s=-1),t.v7EvalAttr("swapY",!1)&&(r=-1);let a=t.getFrameWidth(),n=t.getFrameHeight();t.v6axes||(t.cleanupAxes(),t.swap_xy=!1,t.zoom_xmin!=t.zoom_xmax?(t.scale_xmin=t.zoom_xmin,t.scale_xmax=t.zoom_xmax):(t.scale_xmin=t.xmin,t.scale_xmax=t.xmax),t.zoom_ymin!=t.zoom_ymax?(t.scale_ymin=t.zoom_ymin,t.scale_ymax=t.zoom_ymax):(t.scale_ymin=t.ymin,t.scale_ymax=t.ymax),t.recalculateRange(0),t.x_handle=new m.C(t.getDom(),t,t.xaxis,"x_"),t.x_handle.setPadName(t.getPadName()),t.x_handle.snapid=t.snapid,t.x_handle.draw_swapside=s<0,t.x_handle.draw_ticks=e,t.y_handle=new m.C(t.getDom(),t,t.yaxis,"y_"),t.y_handle.setPadName(t.getPadName()),t.y_handle.snapid=t.snapid,t.y_handle.draw_swapside=r<0,t.y_handle.draw_ticks=i,t.z_handle=new m.C(t.getDom(),t,t.zaxis,"z_"),t.z_handle.setPadName(t.getPadName()),t.z_handle.snapid=t.snapid,t.x_handle.configureAxis("xaxis",t.xmin,t.xmax,t.scale_xmin,t.scale_xmax,!1,[0,a],a,{reverse:!1}),t.x_handle.assignFrameMembers(t,"x"),t.y_handle.configureAxis("yaxis",t.ymin,t.ymax,t.scale_ymin,t.scale_ymax,!0,[n,0],-n,{reverse:!1}),t.y_handle.assignFrameMembers(t,"y"),t.z_handle.configureZAxis("zaxis",t));let u=t.getFrameSvg().select(".axis_layer");t.x_handle.has_obstacle=!1;let k,g=t.swap_xy?t.y_handle:t.x_handle,x=t.swap_xy?t.x_handle:t.y_handle;if(t.getPadPainter()?._fast_drawing)k=Promise.resolve(!0);else if(t.v6axes){let S=!1,R=!1,E=!1;g.disable_ticks=e<=0,x.disable_ticks=i<=0;let C=g.drawAxis(u,a,n,g.invert_side?void 0:`translate(0,${n})`,e>1?-n:0,R,void 0,!1),q=x.drawAxis(u,a,n,x.invert_side?`translate(${a})`:void 0,i>1?a:0,E,x.invert_side?0:t._frame_x,S);k=Promise.all([C,q]).then(()=>t.drawGrids())}else{let S=[];e>0&&S.push(g.drawAxis(u,s>0?`translate(0,${n})`:"",s)),i>0&&S.push(x.drawAxis(u,r>0?`translate(0,${n})`:`translate(${a},${n})`,r)),k=Promise.all(S).then(()=>(S=[],e>1&&S.push(g.drawAxisOtherPlace(u,s<0?`translate(0,${n})`:"",-s,2==e)),i>1&&S.push(x.drawAxisOtherPlace(u,r<0?`translate(0,${n})`:`translate(${a},${n})`,-r,2==i)),Promise.all(S))).then(()=>t.drawGrids())}return k.then(()=>(t.axes_drawn=!0,!0))})()}drawAxes2(t,e){let a,n,i=this.getFrameWidth(),s=this.getFrameHeight(),r=this.getFrameSvg().select(".axis_layer");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 m.C(this.getDom(),this,this.x2axis,"x2_"),this.x2_handle.setPadName(this.getPadName()),this.x2_handle.snapid=this.snapid,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"),a=this.x2_handle.drawAxis(r,"",-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 m.C(this.getDom(),this,this.y2axis,"y2_"),this.y2_handle.setPadName(this.getPadName()),this.y2_handle.snapid=this.snapid,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"),n=this.y2_handle.drawAxis(r,`translate(${i},${s})`,-1)),Promise.all([a,n])}getGrFuncs(t,e){let i=t&&this.grx2,s=e&&this.gry2;return i||s?{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,swap_xy:this.swap_xy,fp:this,revertAxis(r,a){return"x"==r&&this.use_x2&&(r="x2"),"y"==r&&this.use_y2&&(r="y2"),this.fp.revertAxis(r,a)},axisAsText(r,a){return"x"==r&&this.use_x2&&(r="x2"),"y"==r&&this.use_y2&&(r="y2"),this.fp.axisAsText(r,a)}}:this}sizeChanged(){let 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(){let t=(e,i)=>{this[e]&&(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.draw_g&&(this.draw_g.select(".grid_layer").selectAll("*").remove(),this.draw_g.select(".axis_layer").selectAll("*").remove()),this.axes_drawn=!1}cleanFrameDrawings(){(0,f.isFunc)(this.create3DScene)&&this.create3DScene(-1),this.cleanupAxes();let 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.draw_g&&(this.draw_g.select(".main_layer").selectAll("*").remove(),this.draw_g.select(".upper_layer").selectAll("*").remove())}cleanup(){this.cleanFrameDrawings(),this.draw_g&&(this.draw_g.selectAll("*").remove(),this.draw_g.on("mousedown",null).on("dblclick",null).on("wheel",null).on("contextmenu",null).property("interactive_set",null)),this.keys_handler&&(window.removeEventListener("keydown",this.keys_handler,!1),this.keys_handler=null),delete this.enabledKeys,delete this.self_drawaxes,delete this.xaxis,delete this.yaxis,delete this.zaxis,delete this.x2axis,delete this.y2axis,delete this.draw_g,delete this._click_handler,delete this._dblclick_handler;let t=this.getPadPainter();t?.frame_painter_ref===this&&delete t.frame_painter_ref,super.cleanup()}redraw(){let t=this.getPadPainter();t&&(t.frame_painter_ref=this),this.updateAttributes();let g,x,y,e=t?.getPadRect()??{width:10,height:10},i=Math.round(e.width*this.fX1NDC),s=Math.round(e.width*(this.fX2NDC-this.fX1NDC)),r=Math.round(e.height*(1-this.fY2NDC)),a=Math.round(e.height*(this.fY2NDC-this.fY1NDC)),n=!1,u=!1;if(t?.options&&(t.options.RotateFrame&&(n=!0),t.options.FixFrame&&(u=!0)),n?(g=`rotate(-90,${i},${r}) translate(${i-a},${r})`,[s,a]=[a,s]):g=`translate(${i},${r})`,this._frame_x=i,this._frame_y=r,this._frame_width=s,this._frame_height=a,this._frame_rotate=n,this._frame_fixpos=u,this.mode3d)return this;this.draw_g=this.getFrameSvg(),this.draw_g.empty()?(this.draw_g=this.getLayerSvg("primitives_layer").append("svg:g").attr("class","root_frame"),(0,f.isBatchMode)()||this.draw_g.append("svg:title").text(""),x=this.draw_g.append("svg:rect"),this.draw_g.append("svg:g").attr("class","grid_layer"),y=this.draw_g.append("svg:svg").attr("class","main_layer").attr("x",0).attr("y",0).attr("overflow","hidden"),this.draw_g.append("svg:g").attr("class","axis_layer"),this.draw_g.append("svg:g").attr("class","upper_layer")):(x=this.draw_g.select("rect"),y=this.draw_g.select(".main_layer")),this.axes_drawn=!1,this.draw_g.attr("transform",g),x.attr("x",0).attr("y",0).attr("width",s).attr("height",a).attr("rx",this.lineatt.rx||null).attr("ry",this.lineatt.ry||null).call(this.fillatt.func).call(this.lineatt.func),y.attr("width",s).attr("height",a).attr("viewBox",`0 0 ${s} ${a}`);let k=Promise.resolve(!0);return this.v7EvalAttr("drawAxes")&&(this.self_drawaxes=!0,this.setAxesRanges(),k=this.drawAxes().then(()=>this.addInteractivity())),k.then(()=>((0,f.isBatchMode)()||(x.style("pointer-events","visibleFill"),c.J9.assign(this),this.addBasicInteractivity()),this))}getFrameWidth(){return this._frame_width||0}getFrameHeight(){return this._frame_height||0}getFrameRect(){return{x:this._frame_x||0,y:this._frame_y||0,width:this.getFrameWidth(),height:this.getFrameHeight(),transform:this.draw_g?this.draw_g.attr("transform"):"",hint_delta_x:0,hint_delta_y:0}}getHistPalette(){return this.getPadPainter().getHistPalette()}configureUserClickHandler(t){this._click_handler=(0,f.isFunc)(t)?t:null}configureUserDblclickHandler(t){this._dblclick_handler=(0,f.isFunc)(t)?t:null}zoom(t,e,i,s,r,a){var n=this;return(0,F.Z)(function*(){if(n.projection)return!1;"x"===t?(t=e,e=i,i=void 0):"y"===t?(s=i,i=e,t=e=void 0):"z"===t&&(r=e,a=i,t=e=i=void 0);let u=t!==e,g=i!==s,x=r!==a,y=!1,k=!1,S=!1;if(u){let $=0;t<=n.xmin&&(t=n.xmin,$++),e>=n.xmax&&(e=n.xmax,$++),2===$&&(u=!1,y=!0)}else y=t===e&&0===t;if(g){let $=0;i<=n.ymin&&(i=n.ymin,$++),s>=n.ymax&&(s=n.ymax,$++),2===$&&(g=!1,k=!0)}else k=i===s&&0===i;if(x){let $=0;r<=n.zmin&&(r=n.zmin,$++),a>=n.zmax&&(a=n.zmax,$++),2===$&&(x=!1,S=!0)}else S=r===a&&0===r;let R=!1,E="",C="",q="",H=!1,L={_typename:"ROOT::Experimental::RFrame::RUserRanges",values:[0,0,0,0,0,0],flags:[!1,!1,!1,!1,!1,!1]};const Q=($,tt)=>{!tt&&!(0,f.isFunc)($.canZoomInside)||(H=!0,u&&(tt||$.canZoomInside("x",t,e))&&(n.zoom_xmin=t,n.zoom_xmax=e,R=!0,E="0",u=!1,L.values[0]=t,L.values[1]=e,L.flags[0]=L.flags[1]=!0),g&&(tt||$.canZoomInside("y",i,s))&&(n.zoom_ymin=i,n.zoom_ymax=s,R=!0,C="1",g=!1,L.values[2]=i,L.values[3]=s,L.flags[2]=L.flags[3]=!0),x&&(tt||$.canZoomInside("z",r,a))&&(n.zoom_zmin=r,n.zoom_zmax=a,R=!0,q="2",x=!1,L.values[4]=r,L.values[5]=a,L.flags[4]=L.flags[5]=!0))};return(u||g||x)&&n.forEachPainter($=>Q($)),!H&&n.self_drawaxes&&Q(null,!0),(y||k||S)&&(y&&(n.zoom_xmin!==n.zoom_xmax&&(R=!0,E="0"),n.zoom_xmin=n.zoom_xmax=0,L.values[0]=L.values[1]=-1),k&&(n.zoom_ymin!==n.zoom_ymax&&(R=!0,C="1"),n.zoom_ymin=n.zoom_ymax=0,L.values[2]=L.values[3]=-1),S&&(n.zoom_zmin!==n.zoom_zmax&&(R=!0,q="2"),n.zoom_zmin=n.zoom_zmax=0,L.values[4]=L.values[5]=-1)),!!R&&(n.v7NormalMode()&&n.v7SubmitRequest("zoom",{_typename:"ROOT::Experimental::RFrame::RZoomRequest",ranges:L}),n.interactiveRedraw("pad","zoom"+E+C+q).then(()=>!0))})()}zoomSingle(t,e,i){var s=this;return(0,F.Z)(function*(){let a=["x","y","z","x2","y2"].indexOf(t);if(s.projection||!s[t+"_handle"]||a<0)return!1;let n=e!==i,u=!1;if(n){let S=0;e<=s[t+"min"]&&(e=s[t+"min"],S++),i>=s[t+"max"]&&(i=s[t+"max"],S++),2===S&&(n=!1,u=!0)}else u=e===i&&0===e;let g=!1,x=!1,y={_typename:"ROOT::Experimental::RFrame::RUserRanges",values:[0,0,0,0,0,0,0,0,0,0],flags:[!1,!1,!1,!1,!1,!1,!1,!1,!1,!1]},k=(S,R)=>{!R&&!(0,f.isFunc)(S?.canZoomInside)||(x=!0,n&&(R||S.canZoomInside(t[0],e,i))&&(s["zoom_"+t+"min"]=e,s["zoom_"+t+"max"]=i,g=!0,n=!1,y.values[2*a]=e,y.values[2*a+1]=i,y.flags[2*a]=y.flags[2*a+1]=!0))};return n&&s.forEachPainter(S=>k(S)),!x&&s.self_drawaxes&&k(null,!0),u&&(s[`zoom_${t}min`]!==s[`zoom_${t}max`]&&(g=!0),s[`zoom_${t}min`]=s[`zoom_${t}max`]=0,y.values[2*a]=y.values[2*a+1]=-1),!!g&&(s.v7NormalMode()&&s.v7SubmitRequest("zoom",{_typename:"ROOT::Experimental::RFrame::RZoomRequest",ranges:y}),s.interactiveRedraw("pad","zoom"+a).then(()=>!0))})()}isAxisZoomed(t){return this["zoom_"+t+"min"]!==this["zoom_"+t+"max"]}unzoom(t,e,i){var s=this;return(0,F.Z)(function*(){return"all"==t?s.unzoom("x2").then(()=>s.unzoom("y2")).then(()=>s.unzoom("xyz")):"x2"==t||"y2"==t?s.zoomSingle(t,0,0).then(r=>(r&&s.zoomChangedInteractive(t,"unzoom"),r)):(typeof t>"u"?t=e=i=!0:(0,f.isStr)(t)&&(i=t.indexOf("z")>=0,e=t.indexOf("y")>=0,t=t.indexOf("x")>=0),s.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).then(r=>(r&&t&&s.zoomChangedInteractive("x","unzoom"),r&&e&&s.zoomChangedInteractive("y","unzoom"),r&&i&&s.zoomChangedInteractive("z","unzoom"),r)))})()}zoomChangedInteractive(t,e){if("reset"==t)return void(this.zoom_changed_x=this.zoom_changed_y=this.zoom_changed_z=void 0);if(!t||"any"==t)return this.zoom_changed_x||this.zoom_changed_y||this.zoom_changed_z;if("x"!==t&&"y"!==t&&"z"!==t)return;let i="zoom_changed_"+t;if(void 0===e)return this[i];"unzoom"!==e?e&&(this[i]=!0):this[i]=void 0===this[i]}fillObjectOfflineMenu(t,e){"x"!=e&&"y"!=e||t.add("Unzoom",()=>this.unzoom(e))}changeFrameAttr(t,e){let i={};this.v7AttrChange(i,t,e),this.v7SetAttr(t,e),this.v7SendAttrChanges(i,!1),this.redrawPad()}fillContextMenu(t,e){if("x"==e||"y"==e||"x2"==e||"y2"==e){let s=this[e+"_handle"];return!!s&&(t.add("header: "+e.toUpperCase()+" axis"),s.fillAxisContextMenu(t,e))}let i=0==t.size();return t.add(i?"header:Frame":"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.add("separator"),t.addchk(this.isTooltipAllowed(),"Show tooltips",()=>this.setTooltipAllowed("toggle")),this.x_handle&&t.addchk(this.x_handle.draw_grid,"Grid x",s=>this.changeFrameAttr("gridX",s)),this.y_handle&&t.addchk(this.y_handle.draw_grid,"Grid y",s=>this.changeFrameAttr("gridY",s)),this.x_handle&&!this.x2_handle&&t.addchk(this.x_handle.draw_swapside,"Swap x",s=>this.changeFrameAttr("swapX",s)),this.y_handle&&!this.y2_handle&&t.addchk(this.y_handle.draw_swapside,"Swap y",s=>this.changeFrameAttr("swapY",s)),this.x_handle&&!this.x2_handle&&(t.add("sub:Ticks x"),t.addchk(0==this.x_handle.draw_ticks,"off",()=>this.changeFrameAttr("ticksX",0)),t.addchk(1==this.x_handle.draw_ticks,"normal",()=>this.changeFrameAttr("ticksX",1)),t.addchk(2==this.x_handle.draw_ticks,"ticks on both sides",()=>this.changeFrameAttr("ticksX",2)),t.addchk(3==this.x_handle.draw_ticks,"labels on both sides",()=>this.changeFrameAttr("ticksX",3)),t.add("endsub:")),this.y_handle&&!this.y2_handle&&(t.add("sub:Ticks y"),t.addchk(0==this.y_handle.draw_ticks,"off",()=>this.changeFrameAttr("ticksY",0)),t.addchk(1==this.y_handle.draw_ticks,"normal",()=>this.changeFrameAttr("ticksY",1)),t.addchk(2==this.y_handle.draw_ticks,"ticks on both sides",()=>this.changeFrameAttr("ticksY",2)),t.addchk(3==this.y_handle.draw_ticks,"labels on both sides",()=>this.changeFrameAttr("ticksY",3)),t.add("endsub:")),t.addAttributesMenu(this,i?"":"Frame "),t.add("separator"),t.add("Save as frame.png",()=>this.getPadPainter().saveAs("png","frame","frame.png")),t.add("Save as frame.svg",()=>this.getPadPainter().saveAs("svg","frame","frame.svg")),!0}revertAxis(t,e){let i=this[t+"_handle"];return i?i.revertPoint(e):0}showAxisStatus(t,e){let s=t,a=(0,W.cx)(e,this.getFrameSvg().node()),n="x"==t?0:1;this.swap_xy&&(n=1-n);let u=this.revertAxis(t,a[n]);this.showObjectStatus(s,"axis",t+" : "+this.axisAsText(t,u),Math.round(a[0])+","+Math.round(a[1]))}addKeysHandler(){(0,f.isBatchMode)()||(c.J9.assign(this),this.addFrameKeysHandler())}addInteractivity(t){return!(!(0,f.isBatchMode)()&&(f.settings.Zooming||f.settings.ContextMenu))||(c.J9.assign(this),this.addFrameInteractivity(t))}setRootPadRange(){}toggleAxisLog(t){let e=this[t+"_handle"];e&&e.changeAxisLog("toggle")}}var l=T(3038),d=T(3675),p=T(4383),v=T(3834);class w extends V.p{constructor(t,e,i){super(t,e,"","pad"),this.pad=e,this.iscan=i,this.this_pad_name="",!this.iscan&&null!==e&&(this.this_pad_name=e.fObjectID?"pad"+e.fObjectID:"ppp"+f.internals.id_counter++),this.painters=[],this.has_canvas=!0,this.forEachPainter=this.forEachPainterInPad}isRoot6(){return!1}svg_this_pad(){return this.getPadSvg(this.this_pad_name)}getMainPainter(){return this.main_painter_ref||null}setMainPainter(t,e){(!this.main_painter_ref||e)&&(this.main_painter_ref=t)}cleanup(){this._doing_draw&&console.error("pad drawing is not completed when cleanup is called"),this.painters.forEach(e=>e.cleanup());let t=this.svg_this_pad();t.empty()||(t.property("pad_painter",null),this.iscan||t.remove()),delete this.main_painter_ref,delete this.frame_painter_ref,delete this.pads_cache,delete this._pad_x,delete this._pad_y,delete this._pad_width,delete this._pad_height,delete this._doing_draw,delete this._dfltRFont,this.painters=[],this.pad=null,this.draw_object=null,this.pad_frame=null,this.this_pad_name=void 0,this.has_canvas=!1,(0,Z.O5)({pp:this,active:!1}),super.cleanup()}getFramePainter(){return this.frame_painter_ref}getPadWidth(){return this._pad_width||0}getPadHeight(){return this._pad_height||0}getPadRect(){return{x:this._pad_x||0,y:this._pad_y||0,width:this.getPadWidth(),height:this.getPadHeight()}}getFrameRect(){let t=this.getFramePainter();if(t)return t.getFrameRect();let 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=`translate(${s.x},${s.y})`,s}getRootPad(t){return void 0!==t&&t?null:this.pad}cleanPrimitives(t){if((0,f.isFunc)(t))for(let e=this.painters.length-1;e>=0;--e)t(this.painters[e])&&(this.painters[e].cleanup(),this.painters.splice(e,1))}findPainterFor(t,e,i){return this.painters.find(s=>{let r=s.getObject();if(r){if(t&&r===t)return!0;if((e||i)&&(!e||r.fName===e)&&(!i||r._typename===i))return!0}})}getHistPalette(){let t=this.findPainterFor(void 0,void 0,"ROOT::Experimental::RPaletteDrawable");return t?t.getHistPalette():(this.fDfltPalette||(this.fDfltPalette={_typename:"ROOT::Experimental::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},(0,f.addMethods)(this.fDfltPalette,"ROOT::Experimental::RPalette")),this.fDfltPalette)}getNumPainters(){return this.painters.length}forEachPainterInPad(t,e){e||(e="all"),"objects"!=e&&t(this);for(let i=0;i0){if(this._fixed_size)return t>1;if(s=this.getCanvSvg(),s.empty()||(i=s.property("height_factor"),a=this.testMainResize(t,null,i),!a.changed))return!1;(0,f.isBatchMode)()||(n=this.getLayerSvg("btns_layer",this.this_pad_name)),u=s.select(".canvas_fillrect")}else{let g=this.selectDom();"static"==g.style("position")&&g.style("position","relative"),s=g.append("svg").attr("class","jsroot root_canvas").property("pad_painter",this).property("current_pad","").property("redraw_by_resize",!1),this.setTopPainter(),!(0,f.isBatchMode)()&&!this.online_canvas&&s.append("svg:title").text("ROOT canvas"),u=s.append("svg:path").attr("class","canvas_fillrect"),(0,f.isBatchMode)()||u.style("pointer-events","visibleFill").on("dblclick",x=>this.enlargePad(x)).on("click",()=>this.selectObjectPainter(this,null)).on("mouseenter",()=>this.showObjectStatus()).on("contextmenu",f.settings.ContextMenu?x=>this.padContextMenu(x):null),s.append("svg:g").attr("class","primitives_layer"),s.append("svg:g").attr("class","info_layer"),(0,f.isBatchMode)()||(n=s.append("svg:g").attr("class","btns_layer").property("leftside","left"==f.settings.ToolBarSide).property("vertical",f.settings.ToolBarVert)),i=.66,this.pad&&this.pad.fWinSize[0]&&this.pad.fWinSize[1]&&(i=this.pad.fWinSize[1]/this.pad.fWinSize[0],(i<.1||i>10)&&(i=.66)),this._fixed_size?(g.style("overflow","auto"),a={width:this.pad.fWinSize[0],height:this.pad.fWinSize[1]},(!a.width||!a.height)&&(a=(0,d.Yo)(g))):a=this.testMainResize(2,e,i)}return this.createAttFill({pattern:1001,color:0}),a.width<=5||a.height<=5?(s.style("display","none"),console.warn(`Hide canvas while geometry too small w=${a.width} h=${a.height}`),a.width=200,a.height=100):s.style("display",null),this._fixed_size?s.attr("x",0).attr("y",0).attr("width",a.width).attr("height",a.height).style("position","absolute"):s.attr("x",0).attr("y",0).style("width","100%").style("height","100%").style("position","absolute").style("left",0).style("top",0).style("right",0).style("bottom",0),s.style("filter",f.settings.DarkMode?"invert(100%)":null),s.attr("viewBox",`0 0 ${a.width} ${a.height}`).attr("preserveAspectRatio","none").property("height_factor",i).property("draw_x",0).property("draw_y",0).property("draw_width",a.width).property("draw_height",a.height),this._pad_x=0,this._pad_y=0,this._pad_width=a.width,this._pad_height=a.height,u.attr("d",`M0,0H${a.width}V${a.height}H0Z`).call(this.fillatt.func),this._fast_drawing=f.settings.SmallPad&&(a.width{E.getObject()==a&&(n=!0)},"pads"),n&&(u=s,g=r,x=y=0)),t?(k=this.svg_this_pad(),S=k.select(".root_pad_border"),(0,f.isBatchMode)()||(R=this.getLayerSvg("btns_layer",this.this_pad_name))):(k=e.select(".primitives_layer").append("svg:svg").classed("__root_pad_"+this.this_pad_name,!0).attr("pad",this.this_pad_name).property("pad_painter",this),(0,f.isBatchMode)()||k.append("svg:title").text("ROOT subpad"),S=k.append("svg:path").attr("class","root_pad_border"),k.append("svg:g").attr("class","primitives_layer"),(0,f.isBatchMode)()||(R=k.append("svg:g").attr("class","btns_layer").property("leftside","left"!=f.settings.ToolBarSide).property("vertical",f.settings.ToolBarVert)),f.settings.ContextMenu&&S.on("contextmenu",E=>this.padContextMenu(E)),(0,f.isBatchMode)()||S.style("pointer-events","visibleFill").on("dblclick",E=>this.enlargePad(E)).on("click",()=>this.selectObjectPainter(this,null)).on("mouseenter",()=>this.showObjectStatus())),this.createAttFill({attr:this.pad}),this.createAttLine({attr:this.pad,color0:0==this.pad.fBorderMode?"none":""}),k.style("display",n?null:"none").attr("viewBox",`0 0 ${u} ${g}`).attr("preserveAspectRatio","none").attr("x",x).attr("y",y).attr("width",u).attr("height",g).property("draw_x",x).property("draw_y",y).property("draw_width",u).property("draw_height",g),this._pad_x=x,this._pad_y=y,this._pad_width=u,this._pad_height=g,S.attr("d",`M0,0H${u}V${g}H0Z`).call(this.fillatt.func).call(this.lineatt.func),this._fast_drawing=f.settings.SmallPad&&(u"ROOT::Experimental::RPadDisplayItem"!=e._typename))}syncDraw(t){let e={kind:t||"redraw"};return void 0===this._doing_draw?(this._doing_draw=[e],Promise.resolve(!0)):!(!0!==e.kind&&this._doing_draw.findIndex((i,s)=>s>0&&i.kind==e.kind)>0)&&(this._doing_draw.push(e),new Promise(i=>{e.func=i}))}confirmDraw(){if(void 0===this._doing_draw)return console.warn("failure, should not happen");if(this._doing_draw.shift(),0==this._doing_draw.length)delete this._doing_draw;else{let t=this._doing_draw[0];t.func&&(t.func(),delete t.func)}}drawObject(){return(0,F.Z)(function*(){return console.log("Not possible to draw object without loading of draw.mjs"),null})()}drawPrimitives(t){var e=this;return(0,F.Z)(function*(){if(void 0===t)return e.iscan&&(e._start_tm=(new Date).getTime()),e._num_primitives=e.pad&&e.pad.fPrimitives?e.pad.fPrimitives.length:0,e.syncDraw(!0).then(()=>e.drawPrimitives(0));if(e.pad&&!(t>=e._num_primitives))return e.drawObject(e.getDom(),e.pad.fPrimitives[t],"").then(i=>((0,f.isObject)(i)&&(i._primitive=!0),e.drawPrimitives(t+1)));if(e.confirmDraw(),e._start_tm){let i=(new Date).getTime()-e._start_tm;i>3e3&&console.log(`Canvas drawing took ${(.001*i).toFixed(2)}s`),delete e._start_tm}})()}processPadTooltipEvent(t){let e=[],i=[];return null!==this.painters&&this.painters.forEach(s=>{(0,f.isFunc)(s.processTooltipEvent)&&e.push(s)}),t&&(t.nproc=e.length),e.forEach(s=>{let r=s.processTooltipEvent(t);r||(r={user_info:null}),i.push(r),t&&t.painters&&(r.painter=s)}),i}changeDarkMode(t){this.getCanvSvg().style("filter",t??f.settings.DarkMode?"invert(100%)":null)}fillContextMenu(t){t.add(this.iscan?"header: RCanvas":"header: RPad"),t.addchk(this.isTooltipAllowed(),"Show tooltips",()=>this.setTooltipAllowed("toggle")),this._websocket||(t.addAttributesMenu(this),this.iscan&&t.addSettingsMenu(!1,!1,i=>{"dark"==i&&this.changeDarkMode()})),t.add("separator"),(0,f.isFunc)(this.hasMenuBar)&&(0,f.isFunc)(this.actiavteMenuBar)&&t.addchk(this.hasMenuBar(),"Menu bar",i=>this.actiavteMenuBar(i)),(0,f.isFunc)(this.hasEventStatus)&&(0,f.isFunc)(this.activateStatusBar)&&t.addchk(this.hasEventStatus(),"Event status",()=>this.activateStatusBar("toggle")),(this.enlargeMain()||this.has_canvas&&this.hasObjectsToDraw())&&t.addchk("on"==this.enlargeMain("state"),"Enlarge "+(this.iscan?"canvas":"pad"),()=>this.enlargePad());let e=this.this_pad_name||(this.iscan?"canvas":"pad");return t.add(`Save as ${e}.png`,e+".png",i=>this.saveAs("png",!1,i)),t.add(`Save as ${e}.svg`,e+".svg",i=>this.saveAs("svg",!1,i)),!0}padContextMenu(t){if(t.stopPropagation){let e=(0,W.cx)(t,this.svg_this_pad().node());if(2==e.length&&e[0]>=0&&e[0]<10&&e[1]>=0&&e[1]<10)return;t.stopPropagation(),t.preventDefault(),this.getFramePainter()?.setLastEventPos()}(0,p.Z)(t,this).then(e=>(this.fillContextMenu(e),this.fillObjectExecMenu(e))).then(e=>e.show())}redrawPad(t){var e=this;return(0,F.Z)(function*(){let i=e.syncDraw(t);if(!1===i)return console.log("Prevent RPad redrawing"),!1;let s=!0,r=a=>{for(;ar(a))}return!0};return i.then(()=>(e.iscan?e.createCanvasSvg(2):s=e.createPadSvg(!0),r(0))).then(()=>((0,Z.X8)()===e&&e.getCanvPainter()?.producePadEvent("padredraw",e),e.confirmDraw(),!0))})()}redraw(t){return this.redrawPad(t)}needRedrawByResize(){let t=this.svg_this_pad();if(!t.empty()&&t.property("can3d")===f.constants.Embed3D.Overlay)return!0;for(let e=0;e!s||a>=this.painters.length?(this.confirmDraw(),s):(0,f.getPromise)(this.painters[a].redraw(e?"redraw":"resize")).then(()=>r(a+1));return i.then(()=>(s=this.createCanvasSvg(e?2:1,t),r(0)))}updateObject(t){return!!t&&(this.pad.fStyle=t.fStyle,this.pad.fAttr=t.fAttr,this.iscan?(this.pad.fTitle=t.fTitle,this.pad.fWinSize=t.fWinSize):(this.pad.fPos=t.fPos,this.pad.fSize=t.fSize),!0)}addObjectPainter(t,e,i){t&&e&&e[i]&&void 0===t.snapid&&(this.painters.indexOf(t)<0&&this.painters.push(t),t.assignSnapId(e[i].fObjectID),t.rstyle||(t.rstyle=e[i].fStyle||this.rstyle))}extractTObjectProp(t){if(t.fColIndex&&t.fColValue){let r=this.root_colors||(0,l._V)();for(let a=0;a{let n=e.v7EvalColor(a,"");n&&(i[r]=(0,l.hI)(n,this.root_colors))};void 0!==i.fLineColor&&void 0!==i.fLineWidth&&void 0!==i.fLineStyle&&(s("fLineColor","line_color"),i.fLineWidth=e.v7EvalAttr("line_width",i.fLineWidth),i.fLineStyle=e.v7EvalAttr("line_style",i.fLineStyle)),void 0!==i.fFillColor&&void 0!==i.fFillStyle&&(s("fFillColor","fill_color"),i.fFillStyle=e.v7EvalAttr("fill_style",i.fFillStyle)),void 0!==i.fMarkerColor&&void 0!==i.fMarkerStyle&&void 0!==i.fMarkerSize&&(s("fMarkerColor","marker_color"),i.fMarkerStyle=e.v7EvalAttr("marker_style",i.fMarkerStyle),i.fMarkerSize=e.v7EvalAttr("marker_size",i.fMarkerSize)),void 0!==i.fTextColor&&void 0!==i.fTextAlign&&void 0!==i.fTextAngle&&void 0!==i.fTextSize&&(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))}drawNextSnap(t,e){var i=this;return(0,F.Z)(function*(){if(void 0===e&&(e=-1,i._snaps_map={},i._num_primitives=t?t.length:0,i._auto_color_cnt=0),delete i.next_rstyle,++e,!t||e>=t.length)return delete i._snaps_map,delete i._auto_color_cnt,i;let s=t[e],r=s.fObjectID,a=i._snaps_map[r],n=null;if(a?a++:a=1,i._snaps_map[r]=a,s.fDummy)return i.drawNextSnap(t,e);for(let u=0;u(i.addObjectPainter(g,t,e),i.drawNextSnap(t,e)));let u;return"ROOT::Experimental::TObjectDisplayItem"===s._typename&&i.extractTObjectProp(s),n.updateObject(s.fDrawable||s.fObject||s,s.fOption||"",!0)&&(u=n.redraw()),(0,f.getPromise)(u).then(()=>i.drawNextSnap(t,e))}if("ROOT::Experimental::RPadDisplayItem"==s._typename){let u=s,g=new w(i.getDom(),u,!1);g.decodeOptions(""),g.addToPadPrimitives(i.this_pad_name),g.assignSnapId(s.fObjectID),g.rstyle=s.fStyle,g.createPadSvg(),s.fPrimitives&&s.fPrimitives.length>0&&g.addPadButtons();let x=g.selectCurrentPad(g.this_pad_name);return g.drawNextSnap(s.fPrimitives).then(()=>(g.selectCurrentPad(x),i.drawNextSnap(t,e)))}if(i.next_rstyle=t[e].fStyle||i.rstyle,"ROOT::Experimental::TObjectDisplayItem"===s._typename){const u={kNone:0,kObject:1,kColors:4,kStyle:5,kPalette:6};if(s.fKind==u.kStyle)return Object.assign(f.gStyle,s.fObject),i.drawNextSnap(t,e);if(s.fKind==u.kColors){let g=[],x=s.fObject.arr;for(let y=0;y0&&(g[parseInt(k.slice(0,S))]=k.slice(S+1))}return i.root_colors=g,i.drawNextSnap(t,e)}if(s.fKind==u.kPalette){let g=s.fObject.arr,x=[];for(let y=0;yi.drawNextSnap(t,e-1));i.extractTObjectProp(s)}return i.drawObject(i.getDom(),s.fDrawable||s.fObject||s,s.fOption||"").then(u=>(i.addObjectPainter(u,t,e),i.drawNextSnap(t,e)))})()}findSnap(t,e){function i(s){return!(!s||!(0,f.isStr)(s))&&(s==t||e&&s.length>t.length&&s.indexOf(t)==s.length-t.length)}if(i(this.snapid))return this;if(!this.painters)return null;for(let s=0;s{n&&u.fObjectID===n.snapid&&(n=null,i=!0)}),n&&(e.painters.splice(a--,1),n.cleanup(),s=!0,e.main_painter_ref===n&&delete e.main_painter_ref))}if(s&&delete e.pads_cache,!i){let a=e.getFramePainter();a?.is_root6()&&(a=null);for(let n=0;n(e.selectCurrentPad(r),(0,Z.X8)()===e&&e.getCanvPainter()?.producePadEvent("padredraw",e),e))})()}createImage(t){var e=this;return(0,F.Z)(function*(){return"pdf"==t?(0,f.btoa_func)("dummy PDF file"):"png"==t||"jpeg"==t||"svg"==t?e.produceImage(!0,t).then(i=>{if(!i||"svg"==t)return i;let s=i.indexOf("base64,");return s>0?i.slice(s+7):""}):""})()}itemContextMenu(t){let e=this.svg_this_pad().node().getBoundingClientRect(),i={clientX:e.left+10,clientY:e.top+10};if("pad"==t)return setTimeout(()=>this.padContextMenu(i),50);let r,s=null;switch(t){case"xaxis":case"yaxis":case"zaxis":s=this.getMainPainter(),r=t[0];break;case"frame":s=this.getFramePainter();break;default:{let a=parseInt(t);Number.isInteger(a)&&(s=this.painters[a])}}(0,f.isFunc)(s?.fillContextMenu)&&(0,p.Z)(i,s).then(a=>{s.fillContextMenu(a,r)&&s.fillObjectExecMenu(a,r).then(()=>setTimeout(()=>a.show(),50))})}saveAs(t,e,i){i||(i=(this.this_pad_name||(this.iscan?"canvas":"pad"))+"."+t),this.produceImage(e,t).then(s=>{if(!s)return console.error(`Fail to produce image ${i}`);(0,B.yH)(i,"svg"!=t?s:"data:image/svg+xml;charset=utf-8,"+encodeURIComponent(s))})}findActivePad(){return null}produceImage(t,e){var i=this;return(0,F.Z)(function*(){let s="frame"===t,r=s?i.getFrameSvg(i.this_pad_name):t?i.getCanvSvg():i.svg_this_pad(),a=t&&!s?i.getCanvPainter():i,n=[];if(r.empty())return"";s||a.forEachPainterInPad(E=>{let C={prnt:E.svg_this_pad()};n.push(C);let q=E.getLayerSvg("btns_layer",i.this_pad_name);C.btns_node=q.node(),C.btns_node&&(C.btns_prnt=C.btns_node.parentNode,C.btns_next=C.btns_node.nextSibling,q.remove());let H=E.getFramePainter();if(!H||!(0,f.isFunc)(H.render3D)||!(0,f.isFunc)(H.access3dKind))return;let L=H.access3dKind();if(L!==f.constants.Embed3D.Overlay&&L!==f.constants.Embed3D.Embed)return;let Q=H.getSizeFor3d(f.constants.Embed3D.Embed),$=H.renderer.domElement;H.render3D(0);let tt=$.toDataURL("image/png");L===f.constants.Embed3D.Embed&&(C.foreign=C.prnt.select("."+Q.clname),C.foreign.remove());let it=H.getFrameSvg();C.frame_node=it.node(),C.frame_node&&(C.frame_next=C.frame_node.nextSibling,it.remove()),C.img=C.prnt.insert("image",".primitives_layer").attr("x",Q.x).attr("y",Q.y).attr("width",$.width).attr("height",$.height).attr("href",tt)},"pads");const g=()=>{for(let E=0;E${r.node().innerHTML}`;if(f.internals.processSvgWorkarounds&&(k=f.internals.processSvgWorkarounds(k)),k=(0,d.ln)(k),"svg"==e)return g(),k;let R=new Image;return new Promise(E=>{R.onload=function(){let C=document.createElement("canvas");C.width=R.width,C.height=R.height,C.getContext("2d").drawImage(R,0,0),g(),E(C.toDataURL("image/"+e))},R.onerror=function(C){console.log(`IMAGE ERROR ${C}`),g(),E(null)},R.src="data:image/svg+xml;base64,"+(0,f.btoa_func)((E=>(E=(E=encodeURIComponent(E)).replace(/%([0-9A-F]{2})/g,function(C,q){let H=String.fromCharCode("0x"+q);return"%"===H?"%25":H}),decodeURIComponent(E)))(''+k))})})()}clickPadButton(t,e){if("CanvasSnapShot"==t)return this.saveAs("png",!0);if("enlargePad"==t)return this.enlargePad();if("PadSnapShot"==t)return this.saveAs("png",!1);if("PadContextMenus"==t){if(e&&(e.preventDefault(),e.stopPropagation()),(0,p.W)())return;return void(0,p.Z)(e,this).then(s=>{s.add("header:Menus"),s.add(this.iscan?"Canvas":"Pad","pad",this.itemContextMenu),this.getFramePainter()&&s.add("Frame","frame",this.itemContextMenu);let r=this.getMainPainter();if(r&&(s.add("X axis","xaxis",this.itemContextMenu),s.add("Y axis","yaxis",this.itemContextMenu),(0,f.isFunc)(r.getDimension)&&r.getDimension()>1&&s.add("Z axis","zaxis",this.itemContextMenu)),this.painters?.length){s.add("separator");let a=[];for(let n=0;n=0)continue;let g=u._typename?u._typename+"::":"";u.fName&&(g+=u.fName),g||(g="item"+n),s.add(g,n,this.itemContextMenu)}}s.show()})}let i=!1;for(let s=0;sy(r||(r=i?i.getFrameRect():this.getPadRect()),r);if(i){let y=n(2),k=t?"gry":"grx";void 0!==y&&i[k]&&(a=i[k](y))}void 0===a&&(a=t?u().height:0);let g=n(0,0);return a+=s*n(1,0),g&&(a+=s*(t?u().height:u().width)*g),Math.round(a)}getCoordinate(t,e){return{x:this.getPadLength(!1,t.fHoriz,e),y:this.getPadLength(!0,t.fVert,e)}}decodeOptions(t){let e=this.getObject();if(!e)return;let i=new d.pc(t);this.options||(this.options={}),Object.assign(this.options,{GlobalColors:!0,LocalColors:!1,IgnorePalette:!1,RotateFrame:!1,FixFrame:!1}),(i.check("NOCOLORS")||i.check("NOCOL"))&&(this.options.GlobalColors=this.options.LocalColors=!1),(i.check("LCOLORS")||i.check("LCOL"))&&(this.options.GlobalColors=!1,this.options.LocalColors=!0),(i.check("NOPALETTE")||i.check("NOPAL"))&&(this.options.IgnorePalette=!0),i.check("ROTATE")&&(this.options.RotateFrame=!0),i.check("FIXFRAME")&&(this.options.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("TICKX")&&(e.fTickx=1),i.check("TICKY")&&(e.fTicky=1),i.check("TICK")&&(e.fTickx=e.fTicky=1)}static draw(t,e,i){return(0,F.Z)(function*(){let s=new w(t,e,!1);s.decodeOptions(i),s.getCanvSvg().empty()?(s.has_canvas=!1,s.this_pad_name="",s.setTopPainter()):s.addToPadPrimitives(s.pad_name),s.createPadSvg(),s.matchObjectType(f.clTPad)&&(!s.has_canvas||s.hasObjectsToDraw())&&s.addPadButtons();let r=s.has_canvas?s.selectCurrentPad(s.this_pad_name):void 0;return(0,Z.O5)({pp:s,active:!1}),s.drawPrimitives().then(()=>(s.showPadButtons(),s.selectCurrentPad(r),s))})()}}class M{constructor(t,e,i){this.path=t,this.connid=null,this.req=null,this.raw=e,this.args=i,this.nextRequest("","connect")}nextRequest(t,e){let i=this.path,s="buf",r=null;if("connect"===e)i+=this.raw?"?raw_connect":"?txt_connect",this.args&&(i+="&"+this.args),console.log(`longpoll connect ${i} raw = ${this.raw}`),this.connid="connect";else if("close"===e){if(null===this.connid||"close"===this.connid)return;i+=`?connection=${this.connid}&close`,this.connid="close",s="text;sync"}else{if(null===this.connid||"number"!=typeof this.connid)return void(f.browser.qt5||console.error("No connection"));i+="?connection="+this.connid,"dummy"===e&&(i+="&dummy")}t&&(this.raw?i+="&post="+(0,f.btoa_func)(t):(s="postbuf",r=t)),(0,f.createHttpRequest)(i,s,function(a){if(this.handle.req===this&&(this.handle.req=null),null===a)return this.handle.processRequest(null);if(this.handle.raw){let n="",u=0,g=new Uint8Array(a),x=g.length;if(x<4)return f.browser.qt5||console.error(`longpoll got short message in raw mode ${x}`),this.handle.processRequest(null);for(;u<4;)n+=String.fromCharCode(g[u++]);if("txt:"!=n){for(n="";u>"==n?-1111:n),x>"==a?-1111:a)}},function(){this.handle.processRequest(null,"error")},!0).then(a=>{a.handle=this,this.req||(this.req=a),a.send(r)})}processRequest(t,e){if(null===t)return(0,f.isFunc)(this.onerror)&&this.onerror("receive data with connid "+(this.connid||"---")),"error"==e&&(0,f.isFunc)(this.onclose)&&this.onclose("force_close"),void(this.connid=null);-1111===t&&(t="");let i=5;if("connect"===this.connid){if(!t)return this.connid=null,void((0,f.isFunc)(this.onerror)&&this.onerror("connection rejected"));this.connid=parseInt(t),i=100,console.log(`Get new longpoll connection with id ${this.connid}`),(0,f.isFunc)(this.onopen)&&this.onopen()}else{if("close"===this.connid)return void((0,f.isFunc)(this.onclose)&&this.onclose());(0,f.isFunc)(this.onmessage)&&t&&this.onmessage({data:t,offset:e})}this.req||setTimeout(()=>{this.req||this.nextRequest("","dummy")},i)}send(t){this.nextRequest(t)}close(){this.nextRequest("","close")}}class D{constructor(t){this.receiver=t,this.protocol=[],this.cnt=0,(0,f.httpRequest)("protocol.json","text").then(e=>this.getProtocol(e))}getProtocol(t){t&&(this.protocol=JSON.parse(t),(0,f.isFunc)(this.onopen)&&this.onopen(),this.nextOperation())}send(){"send"==this.protocol[this.cnt]&&(this.cnt++,setTimeout(()=>this.nextOperation(),10))}close(){}nextOperation(){if(this.wait_for_file)return;let t=this.protocol[this.cnt];t&&"send"!=t&&(this.wait_for_file=!0,this.cnt++,(0,f.httpRequest)(t,t.indexOf(".bin")>0?"buf":"text").then(e=>{this.wait_for_file=!1,e&&(this.receiver.provideData&&this.receiver.provideData(1,e,0),setTimeout(()=>this.nextOperation(),10))}))}}class z{constructor(t,e){this.kind=t,this.state=0,this.credits=e||10,this.cansend=this.credits,this.ackn=this.credits}getUserArgs(t){return t&&(0,f.isStr)(t)?(0,f.isObject)(this.user_args)?this.user_args[t]:void 0:this.user_args}setUserArgs(t){this.user_args=t}setReceiver(t){this.receiver=t}cleanup(){delete this.receiver,this.close(!0)}invokeReceiver(t,e,i,s){if(this.receiver&&(0,f.isFunc)(this.receiver[e])&&this.receiver[e](this,i,s),t&&this.channels){let r=Object.keys(this.channels);for(let a=0;a1&&this.channels){const r=this.channels[t];if(r)return r.provideData(1,e,i)}const s=i&&i<0;if(!(s||this.msgqueue&&this.msgqueue.length))return this.invokeReceiver(!1,"onWebsocketMsg",e,i);this.msgqueue||(this.msgqueue=[]),s&&(i=void 0),this.msgqueue.push({ready:!0,msg:e,len:i})}reserveQueueItem(){this.msgqueue||(this.msgqueue=[]);let t={ready:!1,msg:null,len:0};return this.msgqueue.push(t),t}markQueueItemDone(t,e,i){t.ready=!0,t.msg=e,t.len=i,this.processQueue()}processQueue(){if(!this._loop_msgqueue&&this.msgqueue){for(this._loop_msgqueue=!0;this.msgqueue.length>0&&this.msgqueue[0].ready;){let t=this.msgqueue.shift();this.invokeReceiver(!1,"onWebsocketMsg",t.msg,t.len)}0==this.msgqueue.length&&delete this.msgqueue,delete this._loop_msgqueue}}close(t){if(this.master)return this.master.send("CLOSECH="+this.channelid,0),delete this.master.channels[this.channelid],void delete this.master;this.timerid&&(clearTimeout(this.timerid),delete this.timerid),this._websocket&&this.state>0&&(this.state=t?-1:0,this._websocket.onclose=null,this._websocket.close(),delete this._websocket)}canSend(t){return this.cansend>=(t||1)}getRelCanSend(){return this.credits?this.cansend/this.credits:1}send(t,e){if(this.master)return this.master.send(t,this.channelid);if(!this._websocket||this.state<=0)return!1;Number.isInteger(e)||(e=1),this.cansend<=0&&console.error(`should be queued before sending cansend: ${this.cansend}`);let i=`${this.ackn}:${this.cansend}:${e}:`;return this.ackn=0,this.cansend--,this._websocket.send(i+t),("websocket"===this.kind||"longpoll"===this.kind)&&(this.timerid&&clearTimeout(this.timerid),this.timerid=setTimeout(()=>this.keepAlive(),1e4)),!0}inject(t,e,i){if(!i)return setTimeout(this.inject.bind(this,t,e,!0),0);if(void 0===e&&(e=1),Array.isArray(t)){for(let s=0;s{if(0!=this.state)return;r||console.log(`try connect window again ${(new Date).toString()}`),this._websocket&&(this._websocket.close(),delete this._websocket),t||((t=window.location.href)&&t.indexOf("#")>0&&(t=t.slice(0,t.indexOf("#"))),t&&t.lastIndexOf("/")>0&&(t=t.slice(0,t.lastIndexOf("/")+1))),this.href=t,e++,r&&console.log(`Opening web socket at ${t}`),e>2&&(0,B.Ae)(`Trying to connect ${t}`);let a=t;"file"==this.kind?(a+="root.filedump",this._websocket=new D(this),console.log(`configure protocol log ${a}`)):"websocket"===this.kind&&r?(a=a.replace("http://","ws://").replace("https://","wss://")+"root.websocket",i&&(a+="?"+i),console.log(`configure websocket ${a}`),this._websocket=new WebSocket(a)):(a+="root.longpoll",console.log(`configure longpoll ${a}`),this._websocket=new M(a,"rawlongpoll"===this.kind,i)),this._websocket&&(this._websocket.onopen=()=>{e>2&&(0,B.Ae)(),this.state=1,this.send("READY="+(this.key||""),0),this.invokeReceiver(!1,"onWebsocketOpened")},this._websocket.onmessage=n=>{let u=n.data;if(this.next_binary){let R=this.next_binary;if(delete this.next_binary,u instanceof Blob){let E=new FileReader,C=this.reserveQueueItem();E.onload=q=>this.markQueueItemDone(C,q.target.result,0),E.readAsArrayBuffer(u,n.offset||0)}else this.provideData(R,u,n.offset||0);return}if(!(0,f.isStr)(u))return console.log("unsupported message kind: "+typeof u);let g=u.indexOf(":"),x=parseInt(u.slice(0,g)),y=u.indexOf(":",g+1),k=u.indexOf(":",y+1),S=parseInt(u.slice(y+1,k));if(this.ackn++,this.cansend+=x,u=u.slice(k+1),0==S){if(console.log(`GET chid=0 message ${u}`),"CLOSE"==u)this.close(!0),this.invokeReceiver(!0,"onWebsocketClosed");else if(0==u.indexOf("NEW_KEY=")){let R=u.slice(8);this.close(!0),typeof sessionStorage<"u"&&sessionStorage.setItem("RWebWindow_Key",R),location.reload(!0)}}else"$$binary$$"==u?this.next_binary=S:"$$nullbinary$$"==u?this.provideData(S,new ArrayBuffer(0),0):this.provideData(S,u);this.ackn>7&&this.send("READY",0)},this._websocket.onclose=n=>{delete this._websocket,(this.state>0||"force_close"===n)&&(console.log("websocket closed"),this.state=0,this.invokeReceiver(!0,"onWebsocketClosed"))},this._websocket.onerror=n=>{console.log(`websocket error ${n} state ${this.state}`),this.state>0&&(this.invokeReceiver(!0,"onWebsocketError",n),this.state=0)},(0,f.isBatchMode)()||setTimeout(s,3e3))};s(!0)}askReload(){this.send("GENERATE_KEY",0)}addReloadKeyHandler(){"file"!=this.kind&&window.addEventListener("keydown",t=>{("R"==t.key||"r"==t.key)&&t.ctrlKey&&(t.stopPropagation(),t.preventDefault(),console.log("Prevent Ctrl-R propogation - ask reload RWebWindow!"),this.askReload())})}}class j extends w{constructor(t,e){super(t,e,!0),this._websocket=null,this.tooltip_allowed=f.settings.Tooltip,this.v7canvas=!0}cleanup(){delete this._websocket,delete this._submreq,this._changed_layout&&this.setLayoutKind("simple"),delete this._changed_layout,super.cleanup()}getLayoutKind(){let t=this.selectDom("origin");return(t.empty()?"":t.property("layout"))||"simple"}setLayoutKind(t,e){let i=this.selectDom("origin");i.empty()||(t||(t="simple"),i.property("layout",t),i.property("layout_selector","simple"!=t&&e?e:null),this._changed_layout="simple"!==t)}changeLayout(t,e){var i=this;return(0,F.Z)(function*(){if(i.getLayoutKind()==t)return!0;let r=i.selectDom("origin"),a=r.select(".side_panel"),n=i.selectDom(),u=[];for(;n.node().firstChild;)u.push(n.node().removeChild(n.node().firstChild));if(a.empty()||(0,Z.Eq)(a.node()),i.setLayoutKind("simple"),r.html(""),"simple"==t){n=r;for(let g=0;g{console.log("save",t,i.length),this.sendWebsocket("SAVE:"+t+":"+i)})}sendSaveCommand(t){this.sendWebsocket("PRODUCE:"+t)}sendWebsocket(t){return!!this._websocket?.canSend()&&(this._websocket.send(t),!0)}closeWebsocket(t){this._websocket&&(this._websocket.close(t),this._websocket.cleanup(),delete this._websocket)}useWebsocket(t){this.closeWebsocket(),this._websocket=t,this._websocket.setReceiver(this),this._websocket.connect()}onWebsocketOpened(){}onWebsocketClosed(){this.embed_canvas||(0,B.Hw)()}onWebsocketMsg(t,e){if(console.log("GET_MSG "+e.slice(0,30)),"CLOSE"==e)this.onWebsocketClosed(),this.closeWebsocket(!0);else if("SNAP:"==e.slice(0,5)){let i=(e=e.slice(5)).indexOf(":"),s=e.slice(0,i),r=(0,f.parse)(e.slice(i+1));this.syncDraw(!0).then(()=>this.redrawPadSnap(r)).then(()=>{t.send("SNAPDONE:"+s),this.confirmDraw()})}else if("JSON"==e.slice(0,4)){let i=(0,f.parse)(e.slice(4));this.redrawObject(i)}else if("REPL_REQ:"==e.slice(0,9))this.processDrawableReply(e.slice(9));else if("CMD:"==e.slice(0,4)){let i=(e=e.slice(4)).indexOf(":"),s=e.slice(0,i),r=e.slice(i+1),a="REPLY:"+s+":";if("SVG"==r||"PNG"==r||"JPEG"==r)this.createImage(r.toLowerCase()).then(n=>t.send(a+n));else if(0==r.indexOf("ADDPANEL:")){let n=r.slice(9);if((0,f.isFunc)(this.showUI5Panel)){let u=new z(t.kind);u.setReceiver({cpainter:this,onWebsocketOpened(){},onWebsocketMsg(x,y){let k=0==y.indexOf("SHOWPANEL:")?y.slice(10):"";this.cpainter.showUI5Panel(k,x).then(S=>t.send(a+(S?"true":"false")))},onWebsocketClosed(){t.send(a+"false")},onWebsocketError(){t.send(a+"false")}});let g=t.href;if(0==n.indexOf("../")){let x=g.lastIndexOf("/",g.length-2);g=g.slice(0,x)+n.slice(2)}else g+=n;u.connect(g)}else t.send(a+"false")}else console.log("Unrecognized command "+r),t.send(a)}else if("DXPROJ:"==e.slice(0,7)||"DYPROJ:"==e.slice(0,7)){let i=e[1],s=(0,f.parse)(e.slice(7));this.drawProjection(i,s)}else if("SHOW:"==e.slice(0,5)){let i=e.slice(5),s="1"==i[i.length-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._websocket&&e&&e._typename&&i.snapid&&(0,f.isStr)(i.snapid)))return null;if(t&&s){i._requests||(i._requests={});let a=i._requests[t];if(a){let n=(new Date).getTime();if(!a._tm||n-a._tm<5e3)return a._nextreq=e,!1;delete i._requests[t]}i._requests[t]=e}e.id=i.snapid,s?(this._nextreqid||(this._nextreqid=1),e.reqid=this._nextreqid++):e.reqid=0;let r=JSON.stringify(e);return e.reqid&&(e._kind=t,e._painter=i,e._method=s,e._tm=(new Date).getTime(),this._submreq||(this._submreq={}),this._submreq[e.reqid]=e),this.sendWebsocket("REQ:"+r),e}submitMenuRequest(t,e,i){var s=this;return(0,F.Z)(function*(){return new Promise(r=>{s.submitDrawableRequest("",{_typename:"ROOT::Experimental::RDrawableMenuRequest",menukind:e||"",menureqid:i},t,r)})})()}submitExec(t,e,i){if(this._websocket){if(i&&(0,f.isStr)(i)){let 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"),"x"!=i&&"y"!=i&&"z"!=i)return console.log(`not recoginzed subelem ${i} in SubmitExec`);e=i+"axis#"+e}this.submitDrawableRequest("",{_typename:"ROOT::Experimental::RDrawableExecRequest",exec:e},t)}}processDrawableReply(t){let e=(0,f.parse)(t);if(!e||!e.reqid||!this._submreq)return!1;let i=this._submreq[e.reqid];if(!i)return!1;delete this._submreq[e.reqid],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)}showSection(t,e){var i=this;return(0,F.Z)(function*(){switch(t){case"Menu":case"StatusBar":case"Editor":case"ToolBar":break;case"ToolTips":i.setTooltipAllowed(e)}return!0})()}processChanges(t,e,i){if(this._websocket&&this._websocket.canSend(2)&&(0,f.isStr)(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:"exec:"==t.slice(0,5)&&e?.snapid?this.submitExec(e,t.slice(5),i):console.log("UNPROCESSED CHANGES",t)}}clickPadButton(t,e){return"ToggleGed"==t?this.activateGed(this,null,"toggle"):"ToggleStatus"==t?this.activateStatusBar("toggle"):void super.clickPadButton(t,e)}hasEventStatus(){if(this.testUI5())return!1;if(this.brlayout)return this.brlayout.hasStatus();let t=(0,K.nh)();return!!t&&t.hasStatusLine()}activateStatusBar(t){this.testUI5()||(this.brlayout?this.brlayout.createStatusLine(23,t):(0,K.nh)()?.createStatusLine(23,t),this.processChanges("sbits",this))}showCanvasStatus(...t){this.testUI5()||(this.brlayout||(0,K.nh)()?.brlayout)?.showStatus(...t)}hasGed(){return!this.testUI5()&&(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:f.settings,create:f.create,parse:f.parse,toJSON:f.toJSON,loadScript:f.loadScript,EAxisBits:Z.VO,getColorExec:B.Aq}}}activateGed(t,e,i){var s=this;return(0,F.Z)(function*(){if(s.testUI5()||!s.brlayout)return!1;if(s.brlayout.hasContent())return"toggle"===i||!1===i?s.removeGed():t?.getPadPainter()?.selectObjectPainter(t),!0;if(!1===i)return!1;let r=s.brlayout.createBrowserBtns();return B.KL.createSVG(r,B.KL.diamand,15,"toggle fix-pos mode").style("margin","3px").on("click",()=>s.brlayout.toggleKind("fix")),B.KL.createSVG(r,B.KL.circle,15,"toggle float mode").style("margin","3px").on("click",()=>s.brlayout.toggleKind("float")),B.KL.createSVG(r,B.KL.cross,15,"delete GED").style("margin","3px").on("click",()=>s.removeGed()),s.brlayout.setBrowserContent("
Loading GED ...
"),s.brlayout.setBrowserTitle("GED"),s.brlayout.toggleBrowserKind(e||"float"),new Promise(a=>{B.OA.then(n=>{(0,W.Ys)("#ged_placeholder").text(""),n.ui.define(["sap/ui/model/json/JSONModel","sap/ui/core/mvc/XMLView"],(u,g)=>{let x=new u({handle:null});g.create({viewName:"rootui5.canv.view.Ged",viewData:s.getUi5PanelData("Ged")}).then(y=>{y.setModel(x),y.placeAt("ged_placeholder"),s.ged_view=y,s.registerForPadEvents(y.getController().padEventsReceiver.bind(y.getController())),t?.getPadPainter()?.selectObjectPainter(t),s.processChanges("sbits",s),a(!0)})})})})})()}produceJSON(){return console.error("RCanvasPainter.produceJSON not yet implemented"),""}static draw(t,e){return(0,F.Z)(function*(){let i=!e;i&&(e=(0,f.create)("ROOT::Experimental::RCanvas"));let s=new j(t,e);return s.normal_canvas=!i,s.createCanvasSvg(0),(0,Z.O5)({pp:s,active:!1}),s.drawPrimitives().then(()=>(s.addPadButtons(),s.showPadButtons(),s))})()}}function P(_,t){let e=new j(_,null);return e.normal_canvas=!1,e.batch_mode=(0,f.isBatchMode)(),e.syncDraw(!0).then(()=>e.redrawPadSnap(t)).then(()=>(e.confirmDraw(),e.showPadButtons(),e))}function I(_,t){return Y.apply(this,arguments)}function Y(){return(Y=(0,F.Z)(function*(_,t){return _?(_.getCanvSvg().empty()?j.draw(_.getDom(),null):Promise.resolve(!0)).then(()=>{if(!1!==t&&_.getFrameSvg().select(".main_layer").empty())return o.draw(_.getDom(),null,(0,f.isStr)(t)?t:"")}).then(()=>(_.addToPadPrimitives(),_)):Promise.reject(Error("Painter not provided in ensureRCanvas"))})).apply(this,arguments)}function N(_,t){let e=this.getFramePainter();if(!e)return console.log("no frame painter - no title");let i=e.getFrameRect(),s=i.x,r=i.y,a=i.width,n=this.getPadPainter().getPadHeight(),u=this.getObject(),g=this.v7EvalLength("margin",n,.02),x=a,y=this.v7EvalLength("height",n,.05),k=this.v7EvalFont("text",{size:.07,color:"black",align:22});if("drag"==_){y=t.height,g=r-t.y-t.height;let R={};this.v7AttrChange(R,"margin",g/n),this.v7AttrChange(R,"height",y/n),this.v7SendAttrChanges(R,!1)}this.createG(),this.draw_g.attr("transform",`translate(${s},${Math.round(r-g-y)})`);let S={x:x/2,y:y/2,text:u.fText,latex:1};return this.startTextDrawing(k,"font"),this.drawText(S),this.finishTextDrawing().then(()=>{(0,f.isBatchMode)()||(0,c.uI)(this,{x:s,y:Math.round(r-g-y),width:x,height:y,minwidth:20,minheight:20,no_change_x:!0,redraw:R=>this.redraw("drag",R)})})}function X(){let _=this.getObject(),t=this.getCanvSvg(),e=t.select(".canvas_defs"),i="custom_font_"+_.fFamily+_.fWeight+_.fStyle;e.empty()&&(e=t.insert("svg:defs",":first-child").attr("class","canvas_defs"));let s=e.select("."+i);return s.empty()&&(s=e.append("style").attr("type","text/css").attr("class",i)),s.text(`@font-face { font-family: "${_.fFamily}"; font-weight: ${_.fWeight?_.fWeight:"normal"}; font-style: ${_.fStyle?_.fStyle:"normal"}; src: ${_.fSrc}; }`),_.fDefault&&(this.getPadPainter()._dfltRFont=_),!0}function G(_,t,e){let i=new m.C(_,t,e);return i.disable_zooming=!0,I(i,!1).then(()=>i.redraw()).then(()=>i)}function U(_,t,e){let i=new o(_,t);return"3d"==e&&(i.mode3d=!0),I(i,!1).then(()=>i.redraw())}(0,f.registerMethods)("ROOT::Experimental::RPalette",{extractRColor:_=>_.fColor||"black",getColor(_){return this.palette[_]},getContourIndex(_){let s,t=this.fContour,e=0,i=t.length-1;if(_=t[i])return i-1;if(this.fCustomContour){for(;e_?i=s:e=s;return e}return Math.floor((_-t[0])/(t[i-1]-t[0])*(i-1))},getContourColor(_){let t=this.getContourIndex(_);return t<0?"":this.getColor(t)},getContour(){return this.fContour&&this.fContour.length>1?this.fContour:null},deleteContour(){delete this.fContour},calcColor(_,t,e){let i=e.fOrdinal-t.fOrdinal,s=e.fOrdinal-_,r=_-t.fOrdinal;if(!this.fInterpolate||i<=0)return s1&&(_=1);let t,e=this.fColors[0];for(let i=0;i_)return this.calcColor(_,t,e)}return this.extractRColor(e.fColor)},setFullRange(_,t){this.full_min=_,this.full_max=t},createContour(_,t,e,i,s){if(this.fContour=[],delete this.fCustomContour,this.colzmin=e,this.colzmax=i,_){this.colzmax<=0&&(this.colzmax=1),this.colzmin<=0&&(this.colzmin=void 0===s||s<=0?1e-4*this.colzmax:s<3||s>100?.3*s:1),this.colzmin>=this.colzmax&&(this.colzmin=1e-4*this.colzmax);let r=Math.log(this.colzmin)/Math.log(10),n=(Math.log(this.colzmax)/Math.log(10)-r)/t;this.fContour.push(this.colzmin);for(let u=1;u {\n if (dflt === undefined) return res;\n let typ1 = typeof dflt, typ2 = typeof res;\n if (typ1 == typ2) return res;\n if (typ1 == 'boolean') {\n if (typ2 == 'string') return (res != '') && (res != '0') && (res != 'no') && (res != 'off');\n return !!res;\n }\n if ((typ1 == 'number') && (typ2 == 'string'))\n return parseFloat(res);\n return res;\n };\n\n if (obj.fAttr && obj.fAttr.m) {\n let value = obj.fAttr.m[name];\n if (value) return type_check(value.v); // found value direct in attributes\n }\n\n if (this.rstyle && this.rstyle.fBlocks) {\n let blks = this.rstyle.fBlocks;\n for (let k = 0; k < blks.length; ++k) {\n let block = blks[k],\n match = (this.csstype && (block.selector == this.csstype)) ||\n (obj.fId && (block.selector == ('#' + obj.fId))) ||\n (obj.fCssClass && (block.selector == ('.' + obj.fCssClass)));\n\n if (match && block.map && block.map.m) {\n let value = block.map.m[name.toLowerCase()];\n if (value) return type_check(value.v);\n }\n }\n }\n\n return dflt;\n }\n\n /** @summary Set v7 attributes value */\n v7SetAttr(name, value) {\n let obj = this.getObject();\n if (this.cssprefix) name = this.cssprefix + name;\n\n if (obj && obj.fAttr && obj.fAttr.m)\n obj.fAttr.m[name] = { v: value };\n }\n\n /** @summary Decode pad length from string, return pixel value */\n v7EvalLength(name, sizepx, dflt) {\n if (sizepx <= 0) sizepx = 1;\n\n let value = this.v7EvalAttr(name);\n\n if (value === undefined)\n return Math.round(dflt*sizepx);\n\n if (typeof value == 'number')\n return Math.round(value*sizepx);\n\n if (value === null)\n return 0;\n\n let norm = 0, px = 0, val = value, operand = 0, pos = 0;\n\n while (val) {\n // skip empty spaces\n while ((pos < val.length) && ((val[pos] == ' ') || (val[pos] == '\\t')))\n ++pos;\n\n if (pos >= val.length)\n break;\n\n if ((val[pos] == '-') || (val[pos] == '+')) {\n if (operand) {\n console.log('Fail to parse RPadLength ' + value);\n return dflt;\n }\n operand = (val[pos] == '-') ? -1 : 1;\n pos++;\n continue;\n }\n\n if (pos > 0) { val = val.slice(pos); pos = 0; }\n\n while ((pos < val.length) && (((val[pos] >= '0') && (val[pos] <= '9')) || (val[pos] == '.'))) pos++;\n\n let v = parseFloat(val.slice(0, pos));\n if (!Number.isFinite(v)) {\n console.log('Fail to parse RPadLength ' + value);\n return Math.round(dflt*sizepx);\n }\n\n val = val.slice(pos);\n pos = 0;\n if (!operand) operand = 1;\n if (val && (val[0] == '%')) {\n val = val.slice(1);\n norm += operand*v*0.01;\n } else if ((val.length > 1) && (val[0] == 'p') && (val[1] == 'x')) {\n val = val.slice(2);\n px += operand*v;\n } else {\n norm += operand*v;\n }\n\n operand = 0;\n }\n\n return Math.round(norm*sizepx + px);\n }\n\n /** @summary Evaluate RColor using attribute storage and configured RStyle */\n v7EvalColor(name, dflt) {\n let val = this.v7EvalAttr(name, '');\n if (!val || !isStr(val)) return dflt;\n\n if (val == 'auto') {\n let pp = this.getPadPainter();\n if (pp?._auto_color_cnt !== undefined) {\n let pal = pp.getHistPalette(),\n cnt = pp._auto_color_cnt++,\n num = pp._num_primitives - 1;\n if (num < 2) num = 2;\n val = pal ? pal.getColorOrdinal((cnt % num) / num) : 'blue';\n if (!this._auto_colors) this._auto_colors = {};\n this._auto_colors[name] = val;\n } else if (this._auto_colors && this._auto_colors[name]) {\n val = this._auto_colors[name];\n } else {\n console.error(`Autocolor ${name} not defined yet - please check code`);\n val = '';\n }\n } else if (val[0] == '[') {\n let ordinal = parseFloat(val.slice(1, val.length-1));\n val = 'black';\n if (Number.isFinite(ordinal)) {\n let pp = this.getPadPainter(),\n pal = pp?.getHistPalette();\n if (pal) val = pal.getColorOrdinal(ordinal);\n }\n }\n return val;\n }\n\n /** @summary Evaluate RAttrText properties\n * @return {Object} FontHandler, can be used directly for the text drawing */\n v7EvalFont(name, dflts, fontScale) {\n\n if (!dflts) dflts = {}; else\n if (typeof dflts == 'number') dflts = { size: dflts };\n\n let pp = this.getPadPainter(),\n rfont = pp?._dfltRFont || { fFamily: 'Arial', fStyle: '', fWeight: '' },\n text_size = this.v7EvalAttr(name + '_size', dflts.size || 12),\n text_angle = this.v7EvalAttr(name + '_angle', 0),\n text_align = this.v7EvalAttr(name + '_align', dflts.align || 'none'),\n text_color = this.v7EvalColor(name + '_color', dflts.color || 'none'),\n font_family = this.v7EvalAttr(name + '_font_family', rfont.fFamily || 'Arial'),\n font_style = this.v7EvalAttr(name + '_font_style', rfont.fStyle || ''),\n font_weight = this.v7EvalAttr(name + '_font_weight', rfont.fWeight || '');\n\n if (isStr(text_size)) text_size = parseFloat(text_size);\n if (!Number.isFinite(text_size) || (text_size <= 0)) text_size = 12;\n if (!fontScale) fontScale = pp?.getPadHeight() || 100;\n\n let handler = new FontHandler(null, text_size, fontScale, font_family, font_style, font_weight);\n\n if (text_angle) handler.setAngle(360 - text_angle);\n if (text_align !== 'none') handler.setAlign(text_align);\n if (text_color !== 'none') handler.setColor(text_color);\n\n return handler;\n }\n\n /** @summary Create this.fillatt object based on v7 fill attributes */\n createv7AttFill(prefix) {\n if (!prefix || !isStr(prefix)) prefix = 'fill_';\n\n let color = this.v7EvalColor(prefix + 'color', ''),\n pattern = this.v7EvalAttr(prefix + 'style', 0);\n\n this.createAttFill({ pattern, color, color_as_svg: true });\n }\n\n /** @summary Create this.lineatt object based on v7 line attributes */\n createv7AttLine(prefix) {\n if (!prefix || !isStr(prefix)) prefix = 'line_';\n\n let color = this.v7EvalColor(prefix + 'color', 'black'),\n width = this.v7EvalAttr(prefix + 'width', 1),\n style = this.v7EvalAttr(prefix + 'style', 1),\n pattern = this.v7EvalAttr(prefix + 'pattern');\n\n this.createAttLine({ color, width, style, pattern });\n\n if (prefix == 'border_')\n this.lineatt.setBorder(this.v7EvalAttr(prefix + 'rx', 0), this.v7EvalAttr(prefix + 'ry', 0));\n }\n\n /** @summary Create this.markeratt object based on v7 attributes */\n createv7AttMarker(prefix) {\n if (!prefix || !isStr(prefix)) prefix = 'marker_';\n\n let color = this.v7EvalColor(prefix + 'color', 'black'),\n size = this.v7EvalAttr(prefix + 'size', 0.01),\n style = this.v7EvalAttr(prefix + 'style', 1),\n refsize = 1;\n if (size < 1) {\n let pp = this.getPadPainter();\n refsize = pp?.getPadHeight() || 100;\n }\n\n this.createAttMarker({ color, size, style, refsize });\n }\n\n /** @summary Create RChangeAttr, which can be applied on the server side\n * @private */\n v7AttrChange(req, name, value, kind) {\n if (!this.snapid)\n return false;\n\n if (!req._typename) {\n req._typename = 'ROOT::Experimental::RChangeAttrRequest';\n req.ids = [];\n req.names = [];\n req.values = [];\n req.update = true;\n }\n\n if (this.cssprefix) name = this.cssprefix + name;\n req.ids.push(this.snapid);\n req.names.push(name);\n let obj = null;\n\n if ((value === null) || (value === undefined)) {\n if (!kind) kind = 'none';\n if (kind !== 'none') console.error(`Trying to set ${kind} for none value`);\n }\n\n if (!kind)\n switch(typeof value) {\n case 'number': kind = 'double'; break;\n case 'boolean': kind = 'boolean'; break;\n }\n\n obj = { _typename: 'ROOT::Experimental::RAttrMap::' };\n switch(kind) {\n case 'none': obj._typename += 'NoValue_t'; break;\n case 'boolean': obj._typename += 'BoolValue_t'; obj.v = value ? true : false; break;\n case 'int': obj._typename += 'IntValue_t'; obj.v = parseInt(value); break;\n case 'double': obj._typename += 'DoubleValue_t'; obj.v = parseFloat(value); break;\n default: obj._typename += 'StringValue_t'; obj.v = isStr(value) ? value : JSON.stringify(value); break;\n }\n\n req.values.push(obj);\n return true;\n }\n\n /** @summary Sends accumulated attribute changes to server */\n v7SendAttrChanges(req, do_update) {\n let canp = this.getCanvPainter();\n if (canp && req?._typename) {\n if (do_update !== undefined)\n req.update = do_update ? true : false;\n canp.v7SubmitRequest('', req);\n }\n }\n\n /** @summary Submit request to server-side drawable\n * @param kind defines request kind, only single request a time can be submitted\n * @param req is object derived from DrawableRequest, including correct _typename\n * @param method is method of painter object which will be called when getting reply */\n v7SubmitRequest(kind, req, method) {\n let canp = this.getCanvPainter();\n if (!isFunc(canp?.submitDrawableRequest)) return null;\n\n // special situation when snapid not yet assigned - just keep ref until snapid is there\n // maybe keep full list - for now not clear if really needed\n if (!this.snapid) {\n this._pending_request = { kind, req, method };\n return req;\n }\n\n return canp.submitDrawableRequest(kind, req, this, method);\n }\n\n /** @summary Assign snapid to the painter\n * @desc Overwrite default method */\n assignSnapId(id) {\n this.snapid = id;\n if (this.snapid && this._pending_request) {\n let p = this._pending_request;\n this.v7SubmitRequest(p.kind, p.req, p.method);\n delete this._pending_request;\n }\n }\n\n /** @summary Return communication mode with the server\n * @desc\n * kOffline means no server there,\n * kLessTraffic advise not to send commands if offline functionality available\n * kNormal is standard functionality with RCanvas on server side */\n v7CommMode() {\n let canp = this.getCanvPainter();\n if (!canp || !canp.submitDrawableRequest || !canp._websocket)\n return kOffline;\n\n return kNormal;\n }\n\n v7NormalMode() { return this.v7CommMode() == kNormal; }\n\n v7OfflineMode() { return this.v7CommMode() == kOffline; }\n\n} // class RObjectPainter\n\nexport { RObjectPainter };\n","import { settings, isBatchMode, isFunc } from '../core.mjs';\nimport { select as d3_select, pointer as d3_pointer,\n drag as d3_drag, timeFormat as d3_timeFormat,\n scaleTime as d3_scaleTime, scaleSymlog as d3_scaleSymlog,\n scaleLog as d3_scaleLog, scaleLinear as d3_scaleLinear } from '../d3.mjs';\nimport { AxisPainterMethods, chooseTimeFormat } from './TAxisPainter.mjs';\nimport { createMenu } from '../gui/menu.mjs';\nimport { addDragHandler } from './TFramePainter.mjs';\nimport { RObjectPainter } from '../base/RObjectPainter.mjs';\n\n\n/**\n * @summary Axis painter for v7\n *\n * @private\n */\n\nclass RAxisPainter extends RObjectPainter {\n\n /** @summary constructor */\n constructor(dom, arg1, axis, cssprefix) {\n let drawable = cssprefix ? arg1.getObject() : arg1;\n super(dom, drawable, '', cssprefix ? arg1.csstype : 'axis');\n Object.assign(this, AxisPainterMethods);\n this.initAxisPainter();\n\n this.axis = axis;\n if (cssprefix) { // drawing from the frame\n this.embedded = true; // indicate that painter embedded into the histo painter\n //this.csstype = arg1.csstype; // for the moment only via frame one can set axis attributes\n this.cssprefix = cssprefix;\n this.rstyle = arg1.rstyle;\n } else {\n // this.csstype = 'axis';\n this.cssprefix = 'axis_';\n }\n }\n\n /** @summary cleanup painter */\n cleanup() {\n delete this.axis;\n delete this.axis_g;\n this.cleanupAxisPainter();\n super.cleanup();\n }\n\n /** @summary Use in GED to identify kind of axis */\n getAxisType() { return 'RAttrAxis'; }\n\n /** @summary Configure only base parameters, later same handle will be used for drawing */\n configureZAxis(name, fp) {\n this.name = name;\n this.kind = 'normal';\n this.log = false;\n let _log = this.v7EvalAttr('log', 0);\n if (_log) {\n this.log = true;\n this.logbase = 10;\n if (Math.abs(_log - Math.exp(1)) < 0.1)\n this.logbase = Math.exp(1);\n else if (_log > 1.9)\n this.logbase = Math.round(_log);\n }\n fp.logz = this.log;\n }\n\n /** @summary Configure axis painter\n * @desc Axis can be drawn inside frame group with offset to 0 point for the frame\n * Therefore one should distinguish when caclulated coordinates used for axis drawing itself or for calculation of frame coordinates\n * @private */\n configureAxis(name, min, max, smin, smax, vertical, frame_range, axis_range, opts) {\n if (!opts) opts = {};\n this.name = name;\n this.full_min = min;\n this.full_max = max;\n this.kind = 'normal';\n this.vertical = vertical;\n this.log = false;\n let _log = this.v7EvalAttr('log', 0),\n _symlog = this.v7EvalAttr('symlog', 0);\n this.reverse = opts.reverse || false;\n\n if (this.v7EvalAttr('time')) {\n this.kind = 'time';\n this.timeoffset = 0;\n let toffset = this.v7EvalAttr('timeOffset');\n if (toffset !== undefined) {\n toffset = parseFloat(toffset);\n if (Number.isFinite(toffset)) this.timeoffset = toffset*1000;\n }\n } else if (this.axis && this.axis.fLabelsIndex) {\n this.kind = 'labels';\n delete this.own_labels;\n } else if (opts.labels) {\n this.kind = 'labels';\n } else {\n this.kind = 'normal';\n }\n\n if (this.kind == 'time') {\n this.func = d3_scaleTime().domain([this.convertDate(smin), this.convertDate(smax)]);\n } else if (_symlog && (_symlog > 0)) {\n this.symlog = _symlog;\n this.func = d3_scaleSymlog().constant(_symlog).domain([smin,smax]);\n } else if (_log) {\n if (smax <= 0) smax = 1;\n if ((smin <= 0) || (smin >= smax))\n smin = smax * 0.0001;\n this.log = true;\n this.logbase = 10;\n if (Math.abs(_log - Math.exp(1)) < 0.1)\n this.logbase = Math.exp(1);\n else if (_log > 1.9)\n this.logbase = Math.round(_log);\n this.func = d3_scaleLog().base(this.logbase).domain([smin,smax]);\n } else {\n this.func = d3_scaleLinear().domain([smin,smax]);\n }\n\n this.scale_min = smin;\n this.scale_max = smax;\n\n this.gr_range = axis_range || 1000; // when not specified, one can ignore it\n\n let range = frame_range ? frame_range : [0, this.gr_range];\n\n this.axis_shift = range[1] - this.gr_range;\n\n if (this.reverse)\n this.func.range([range[1], range[0]]);\n else\n this.func.range(range);\n\n if (this.kind == 'time')\n this.gr = val => this.func(this.convertDate(val));\n else if (this.log)\n this.gr = val => (val < this.scale_min) ? (this.vertical ? this.func.range()[0]+5 : -5) : this.func(val);\n else\n this.gr = this.func;\n\n delete this.format;// remove formatting func\n\n let ndiv = this.v7EvalAttr('ndiv', 508);\n\n this.nticks = ndiv % 100;\n this.nticks2 = (ndiv % 10000 - this.nticks) / 100;\n this.nticks3 = Math.floor(ndiv/10000);\n\n if (this.nticks > 20) this.nticks = 20;\n\n let gr_range = Math.abs(this.gr_range) || 100;\n\n if (this.kind == 'time') {\n if (this.nticks > 8) this.nticks = 8;\n\n let scale_range = this.scale_max - this.scale_min,\n tf1 = this.v7EvalAttr('timeFormat', ''),\n tf2 = chooseTimeFormat(scale_range / gr_range, false);\n\n if (!tf1 || (scale_range < 0.1 * (this.full_max - this.full_min)))\n tf1 = chooseTimeFormat(scale_range / this.nticks, true);\n\n this.tfunc1 = this.tfunc2 = d3_timeFormat(tf1);\n if (tf2!==tf1)\n this.tfunc2 = d3_timeFormat(tf2);\n\n this.format = this.formatTime;\n\n } else if (this.log) {\n if (this.nticks2 > 1) {\n this.nticks *= this.nticks2; // all log ticks (major or minor) created centrally\n this.nticks2 = 1;\n }\n this.noexp = this.v7EvalAttr('noexp', false);\n if ((this.scale_max < 300) && (this.scale_min > 0.3) && (this.logbase == 10)) this.noexp = true;\n this.moreloglabels = this.v7EvalAttr('moreloglbls', false);\n\n this.format = this.formatLog;\n } else if (this.kind == 'labels') {\n this.nticks = 50; // for text output allow max 50 names\n let scale_range = this.scale_max - this.scale_min;\n if (this.nticks > scale_range)\n this.nticks = Math.round(scale_range);\n this.nticks2 = 1;\n\n this.format = this.formatLabels;\n } else {\n this.order = 0;\n this.ndig = 0;\n this.format = this.formatNormal;\n }\n }\n\n /** @summary Return scale min */\n getScaleMin() {\n return this.func ? this.func.domain()[0] : 0;\n }\n\n /** @summary Return scale max */\n getScaleMax() {\n return this.func ? this.func.domain()[1] : 0;\n }\n\n /** @summary Provide label for axis value */\n formatLabels(d) {\n let indx = Math.round(d);\n if (this.axis && this.axis.fLabelsIndex) {\n if ((indx < 0) || (indx >= this.axis.fNBinsNoOver)) return null;\n for (let i = 0; i < this.axis.fLabelsIndex.length; ++i) {\n let pair = this.axis.fLabelsIndex[i];\n if (pair.second === indx) return pair.first;\n }\n } else {\n let labels = this.getObject().fLabels;\n if (labels && (indx >= 0) && (indx < labels.length))\n return labels[indx];\n }\n return null;\n }\n\n /** @summary Creates array with minor/middle/major ticks */\n createTicks(only_major_as_array, optionNoexp, optionNoopt, optionInt) {\n\n if (optionNoopt && this.nticks && (this.kind == 'normal')) this.noticksopt = true;\n\n let handle = { nminor: 0, nmiddle: 0, nmajor: 0, func: this.func };\n\n handle.minor = handle.middle = handle.major = this.produceTicks(this.nticks);\n\n if (only_major_as_array) {\n let res = handle.major, delta = (this.scale_max - this.scale_min)*1e-5;\n if (res[0] > this.scale_min + delta) res.unshift(this.scale_min);\n if (res[res.length-1] < this.scale_max - delta) res.push(this.scale_max);\n return res;\n }\n\n if ((this.nticks2 > 1) && (!this.log || (this.logbase === 10))) {\n handle.minor = handle.middle = this.produceTicks(handle.major.length, this.nticks2);\n\n let gr_range = Math.abs(this.func.range()[1] - this.func.range()[0]);\n\n // avoid black filling by middle-size\n if ((handle.middle.length <= handle.major.length) || (handle.middle.length > gr_range/3.5)) {\n handle.minor = handle.middle = handle.major;\n } else if ((this.nticks3 > 1) && !this.log) {\n handle.minor = this.produceTicks(handle.middle.length, this.nticks3);\n if ((handle.minor.length <= handle.middle.length) || (handle.minor.length > gr_range/1.7)) handle.minor = handle.middle;\n }\n }\n\n handle.reset = function() {\n this.nminor = this.nmiddle = this.nmajor = 0;\n };\n\n handle.next = function(doround) {\n if (this.nminor >= this.minor.length) return false;\n\n this.tick = this.minor[this.nminor++];\n this.grpos = this.func(this.tick);\n if (doround) this.grpos = Math.round(this.grpos);\n this.kind = 3;\n\n if ((this.nmiddle < this.middle.length) && (Math.abs(this.grpos - this.func(this.middle[this.nmiddle])) < 1)) {\n this.nmiddle++;\n this.kind = 2;\n }\n\n if ((this.nmajor < this.major.length) && (Math.abs(this.grpos - this.func(this.major[this.nmajor])) < 1) ) {\n this.nmajor++;\n this.kind = 1;\n }\n return true;\n };\n\n handle.last_major = function() {\n return (this.kind !== 1) ? false : this.nmajor == this.major.length;\n };\n\n handle.next_major_grpos = function() {\n if (this.nmajor >= this.major.length) return null;\n return this.func(this.major[this.nmajor]);\n };\n\n this.order = 0;\n this.ndig = 0;\n\n // at the moment when drawing labels, we can try to find most optimal text representation for them\n\n if ((this.kind == 'normal') && !this.log && (handle.major.length > 0)) {\n\n let maxorder = 0, minorder = 0, exclorder3 = false;\n\n if (!optionNoexp) {\n let maxtick = Math.max(Math.abs(handle.major[0]),Math.abs(handle.major[handle.major.length-1])),\n mintick = Math.min(Math.abs(handle.major[0]),Math.abs(handle.major[handle.major.length-1])),\n ord1 = (maxtick > 0) ? Math.round(Math.log10(maxtick)/3)*3 : 0,\n ord2 = (mintick > 0) ? Math.round(Math.log10(mintick)/3)*3 : 0;\n\n exclorder3 = (maxtick < 2e4); // do not show 10^3 for values below 20000\n\n if (maxtick || mintick) {\n maxorder = Math.max(ord1,ord2) + 3;\n minorder = Math.min(ord1,ord2) - 3;\n }\n }\n\n // now try to find best combination of order and ndig for labels\n\n let bestorder = 0, bestndig = this.ndig, bestlen = 1e10;\n\n for (let order = minorder; order <= maxorder; order+=3) {\n if (exclorder3 && (order===3)) continue;\n this.order = order;\n this.ndig = 0;\n let lbls = [], indx = 0, totallen = 0;\n while (indx 11) break; // not too many digits, anyway it will be exponential\n lbls = []; indx = 0; totallen = 0;\n }\n\n // for order == 0 we should virually remove '0.' and extra label on top\n if (!order && (this.ndig < 4))\n totallen -= (handle.major.length * 2 + 3);\n\n if (totallen < bestlen) {\n bestlen = totallen;\n bestorder = this.order;\n bestndig = this.ndig;\n }\n }\n\n this.order = bestorder;\n this.ndig = bestndig;\n\n if (optionInt) {\n if (this.order) console.warn(`Axis painter - integer labels are configured, but axis order ${this.order} is preferable`);\n if (this.ndig) console.warn(`Axis painter - integer labels are configured, but ${this.ndig} decimal digits are required`);\n this.ndig = 0;\n this.order = 0;\n }\n }\n\n return handle;\n }\n\n /** @summary Is labels should be centered */\n isCenteredLabels() {\n if (this.kind === 'labels') return true;\n if (this.kind === 'log') return false;\n return this.v7EvalAttr('labels_center', false);\n }\n\n /** @summary Used to move axis labels instead of zooming\n * @private */\n processLabelsMove(arg, pos) {\n if (this.optionUnlab || !this.axis_g) return false;\n\n let label_g = this.axis_g.select('.axis_labels');\n if (!label_g || (label_g.size() != 1)) return false;\n\n if (arg == 'start') {\n // no moving without labels\n let box = label_g.node().getBBox();\n\n label_g.append('rect')\n .classed('zoom', true)\n .attr('x', box.x)\n .attr('y', box.y)\n .attr('width', box.width)\n .attr('height', box.height)\n .style('cursor', 'move');\n if (this.vertical) {\n this.drag_pos0 = pos[0];\n } else {\n this.drag_pos0 = pos[1];\n }\n\n return true;\n }\n\n let offset = label_g.property('fix_offset');\n\n if (this.vertical) {\n offset += Math.round(pos[0] - this.drag_pos0);\n label_g.attr('transform', `translate(${offset})`);\n } else {\n offset += Math.round(pos[1] - this.drag_pos0);\n label_g.attr('transform', `translate(0,${offset})`);\n }\n if (!offset) label_g.attr('transform', null);\n\n if (arg == 'stop') {\n label_g.select('rect.zoom').remove();\n delete this.drag_pos0;\n if (offset != label_g.property('fix_offset')) {\n label_g.property('fix_offset', offset);\n let side = label_g.property('side') || 1;\n this.labelsOffset = offset / (this.vertical ? -side : side);\n this.changeAxisAttr(1, 'labels_offset', this.labelsOffset / this.scalingSize);\n }\n }\n\n return true;\n }\n\n /** @summary Add interactive elements to draw axes title */\n addTitleDrag(title_g, side) {\n if (!settings.MoveResize || isBatchMode()) return;\n\n let drag_rect = null,\n acc_x, acc_y, new_x, new_y, alt_pos, curr_indx,\n drag_move = d3_drag().subject(Object);\n\n drag_move\n .on('start', evnt => {\n\n evnt.sourceEvent.preventDefault();\n evnt.sourceEvent.stopPropagation();\n\n let box = title_g.node().getBBox(), // check that elements visible, request precise value\n title_length = this.vertical ? box.height : box.width;\n\n new_x = acc_x = title_g.property('shift_x');\n new_y = acc_y = title_g.property('shift_y');\n\n if (this.titlePos == 'center')\n curr_indx = 1;\n else\n curr_indx = (this.titlePos == 'left') ? 0 : 2;\n\n // let d = ((this.gr_range > 0) && this.vertical) ? title_length : 0;\n alt_pos = [0, this.gr_range/2, this.gr_range]; // possible positions\n let off = this.vertical ? -title_length : title_length,\n swap = this.isReverseAxis() ? 2 : 0;\n if (this.title_align == 'middle') {\n alt_pos[swap] += off/2;\n alt_pos[2-swap] -= off/2;\n } else if ((this.title_align == 'begin') ^ this.isTitleRotated()) {\n alt_pos[1] -= off/2;\n alt_pos[2-swap] -= off;\n } else { // end\n alt_pos[swap] += off;\n alt_pos[1] += off/2;\n }\n\n alt_pos[curr_indx] = this.vertical ? acc_y : acc_x;\n\n drag_rect = title_g.append('rect')\n .classed('zoom', true)\n .attr('x', box.x)\n .attr('y', box.y)\n .attr('width', box.width)\n .attr('height', box.height)\n .style('cursor', 'move');\n// .style('pointer-events','none'); // let forward double click to underlying elements\n }).on('drag', evnt => {\n if (!drag_rect) return;\n\n evnt.sourceEvent.preventDefault();\n evnt.sourceEvent.stopPropagation();\n\n acc_x += evnt.dx;\n acc_y += evnt.dy;\n\n let set_x, set_y,\n p = this.vertical ? acc_y : acc_x, besti = 0;\n\n for (let i=1; i<3; ++i)\n if (Math.abs(p - alt_pos[i]) < Math.abs(p - alt_pos[besti])) besti = i;\n\n if (this.vertical) {\n set_x = acc_x;\n set_y = alt_pos[besti];\n } else {\n set_x = alt_pos[besti];\n set_y = acc_y;\n }\n\n new_x = set_x; new_y = set_y; curr_indx = besti;\n title_g.attr('transform', 'translate(' + Math.round(new_x) + ',' + Math.round(new_y) + ')');\n\n }).on('end', evnt => {\n if (!drag_rect) return;\n\n evnt.sourceEvent.preventDefault();\n evnt.sourceEvent.stopPropagation();\n\n let basepos = title_g.property('basepos') || 0;\n\n title_g.property('shift_x', new_x)\n .property('shift_y', new_y);\n\n this.titleOffset = (this.vertical ? basepos - new_x : new_y - basepos) * side;\n\n if (curr_indx == 1) {\n this.titlePos = 'center';\n } else if (curr_indx == 0) {\n this.titlePos = 'left';\n } else {\n this.titlePos = 'right';\n }\n\n this.changeAxisAttr(0, 'title_position', this.titlePos, 'title_offset', this.titleOffset / this.scalingSize);\n\n drag_rect.remove();\n drag_rect = null;\n });\n\n title_g.style('cursor', 'move').call(drag_move);\n }\n\n /** @summary checks if value inside graphical range, taking into account delta */\n isInsideGrRange(pos, delta1, delta2) {\n if (!delta1) delta1 = 0;\n if (delta2 === undefined) delta2 = delta1;\n if (this.gr_range < 0)\n return (pos >= this.gr_range - delta2) && (pos <= delta1);\n return (pos >= -delta1) && (pos <= this.gr_range + delta2);\n }\n\n /** @summary returns graphical range */\n getGrRange(delta) {\n if (!delta) delta = 0;\n if (this.gr_range < 0)\n return this.gr_range - delta;\n return this.gr_range + delta;\n }\n\n /** @summary If axis direction is negative coordinates direction */\n isReverseAxis() {\n return !this.vertical !== (this.getGrRange() > 0);\n }\n\n /** @summary Draw axis ticks\n * @private */\n drawMainLine(axis_g) {\n let ending = '';\n\n if (this.endingSize && this.endingStyle) {\n let sz = (this.gr_range > 0) ? -this.endingSize : this.endingSize,\n sz7 = Math.round(sz*0.7);\n sz = Math.round(sz);\n if (this.vertical)\n ending = `l${sz7},${sz}M0,${this.gr_range}l${-sz7},${sz}`;\n else\n ending = `l${sz},${sz7}M${this.gr_range},0l${sz},${-sz7}`;\n }\n\n axis_g.append('svg:path')\n .attr('d','M0,0' + (this.vertical ? 'v' : 'h') + this.gr_range + ending)\n .call(this.lineatt.func)\n .style('fill', ending ? 'none' : null);\n }\n\n /** @summary Draw axis ticks\n * @return {Object} with gaps on left and right side\n * @private */\n drawTicks(axis_g, side, main_draw) {\n if (main_draw) this.ticks = [];\n\n this.handle.reset();\n\n let res = '', ticks_plusminus = 0;\n if (this.ticksSide == 'both') {\n side = 1;\n ticks_plusminus = 1;\n }\n\n while (this.handle.next(true)) {\n\n let h1 = Math.round(this.ticksSize/4), h2 = 0;\n\n if (this.handle.kind < 3)\n h1 = Math.round(this.ticksSize/2);\n\n let grpos = this.handle.grpos - this.axis_shift;\n\n if ((this.startingSize || this.endingSize) && !this.isInsideGrRange(grpos, -Math.abs(this.startingSize), -Math.abs(this.endingSize))) continue;\n\n if (this.handle.kind == 1) {\n // if not showing labels, not show large tick\n if ((this.kind == 'labels') || (this.format(this.handle.tick,true) !== null)) h1 = this.ticksSize;\n\n if (main_draw) this.ticks.push(grpos); // keep graphical positions of major ticks\n }\n\n if (ticks_plusminus > 0) {\n h2 = -h1;\n } else if (side < 0) {\n h2 = -h1; h1 = 0;\n } else {\n h2 = 0;\n }\n\n res += this.vertical ? `M${h1},${grpos}H${h2}` : `M${grpos},${-h1}V${-h2}`;\n }\n\n if (res)\n axis_g.append('svg:path')\n .attr('d', res)\n .style('stroke', this.ticksColor || this.lineatt.color)\n .style('stroke-width', !this.ticksWidth || (this.ticksWidth == 1) ? null : this.ticksWidth);\n\n let gap0 = Math.round(0.25*this.ticksSize), gap = Math.round(1.25*this.ticksSize);\n return { '-1': (side > 0) || ticks_plusminus ? gap : gap0,\n '1': (side < 0) || ticks_plusminus ? gap : gap0 };\n }\n\n /** @summary Performs labels drawing\n * @return {Promise} with gaps in both direction */\n async drawLabels(axis_g, side, gaps) {\n let center_lbls = this.isCenteredLabels(),\n rotate_lbls = this.labelsFont.angle != 0,\n textscale = 1, maxtextlen = 0, lbls_tilt = false,\n label_g = axis_g.append('svg:g').attr('class','axis_labels').property('side', side),\n lbl_pos = this.handle.lbl_pos || this.handle.major,\n max_lbl_width = 0, max_lbl_height = 0;\n\n // function called when text is drawn to analyze width, required to correctly scale all labels\n function process_drawtext_ready(painter) {\n\n max_lbl_width = Math.max(max_lbl_width, this.result_width);\n max_lbl_height = Math.max(max_lbl_height, this.result_height);\n\n let textwidth = this.result_width;\n\n if (textwidth && ((!painter.vertical && !rotate_lbls) || (painter.vertical && rotate_lbls)) && !painter.log) {\n let maxwidth = this.gap_before*0.45 + this.gap_after*0.45;\n if (!this.gap_before) maxwidth = 0.9*this.gap_after; else\n if (!this.gap_after) maxwidth = 0.9*this.gap_before;\n textscale = Math.min(textscale, maxwidth / textwidth);\n }\n\n if ((textscale > 0.0001) && (textscale < 0.8) && !painter.vertical && !rotate_lbls && (maxtextlen > 5) && (side > 0))\n lbls_tilt = true;\n\n let scale = textscale * (lbls_tilt ? 3 : 1);\n if ((scale > 0.0001) && (scale < 1))\n painter.scaleTextDrawing(1/scale, label_g);\n }\n\n let lastpos = 0,\n fix_offset = Math.round((this.vertical ? -side : side) * this.labelsOffset),\n fix_coord = Math.round((this.vertical ? -side : side) * gaps[side]);\n\n if (fix_offset)\n label_g.attr('transform', this.vertical ? `translate(${fix_offset})` : `translate(0,${fix_offset})`);\n\n label_g.property('fix_offset', fix_offset);\n\n this.startTextDrawing(this.labelsFont, 'font', label_g);\n\n for (let nmajor = 0; nmajor < lbl_pos.length; ++nmajor) {\n\n let lbl = this.format(lbl_pos[nmajor], true);\n if (lbl === null) continue;\n\n let pos = Math.round(this.func(lbl_pos[nmajor])),\n arg = { text: lbl, latex: 1, draw_g: label_g };\n\n arg.gap_before = (nmajor > 0) ? Math.abs(Math.round(pos - this.func(lbl_pos[nmajor-1]))) : 0,\n arg.gap_after = (nmajor < lbl_pos.length-1) ? Math.abs(Math.round(this.func(lbl_pos[nmajor+1])-pos)) : 0;\n\n if (center_lbls) {\n let gap = arg.gap_after || arg.gap_before;\n pos = Math.round(pos - (this.vertical ? 0.5*gap : -0.5*gap));\n if (!this.isInsideGrRange(pos, 5)) continue;\n }\n\n maxtextlen = Math.max(maxtextlen, lbl.length);\n\n pos -= this.axis_shift;\n\n if ((this.startingSize || this.endingSize) && !this.isInsideGrRange(pos, -Math.abs(this.startingSize), -Math.abs(this.endingSize))) continue;\n\n if (this.vertical) {\n arg.x = fix_coord;\n arg.y = pos;\n arg.align = rotate_lbls ? ((side < 0) ? 23 : 20) : ((side < 0) ? 12 : 32);\n } else {\n arg.x = pos;\n arg.y = fix_coord;\n arg.align = rotate_lbls ? ((side < 0) ? 12 : 32) : ((side < 0) ? 20 : 23);\n }\n\n arg.post_process = process_drawtext_ready;\n\n this.drawText(arg);\n\n if (lastpos && (pos!=lastpos) && ((this.vertical && !rotate_lbls) || (!this.vertical && rotate_lbls))) {\n let axis_step = Math.abs(pos-lastpos);\n textscale = Math.min(textscale, 0.9*axis_step/this.labelsFont.size);\n }\n\n lastpos = pos;\n }\n\n if (this.order)\n this.drawText({ x: this.vertical ? side*5 : this.getGrRange(5),\n y: this.has_obstacle ? fix_coord : (this.vertical ? this.getGrRange(3) : -3*side),\n align: this.vertical ? ((side < 0) ? 30 : 10) : ((this.has_obstacle ^ (side < 0)) ? 13 : 10),\n latex: 1,\n text: '#times' + this.formatExp(10, this.order),\n draw_g: label_g\n });\n\n return this.finishTextDrawing(label_g).then(() => {\n\n if (lbls_tilt)\n label_g.selectAll('text').each(function () {\n let txt = d3_select(this), tr = txt.attr('transform');\n txt.attr('transform', tr + ' rotate(25)').style('text-anchor', 'start');\n });\n\n if (this.vertical) {\n gaps[side] += Math.round(rotate_lbls ? 1.2*max_lbl_height : max_lbl_width + 0.4*this.labelsFont.size) - side*fix_offset;\n } else {\n let tilt_height = lbls_tilt ? max_lbl_width * Math.sin(25/180*Math.PI) + max_lbl_height * (Math.cos(25/180*Math.PI) + 0.2) : 0;\n\n gaps[side] += Math.round(Math.max(rotate_lbls ? max_lbl_width + 0.4*this.labelsFont.size : 1.2*max_lbl_height, 1.2*this.labelsFont.size, tilt_height)) + fix_offset;\n }\n\n return gaps;\n });\n }\n\n /** @summary Add zomming rect to axis drawing */\n addZoomingRect(axis_g, side, lgaps) {\n if (settings.Zooming && !this.disable_zooming && !isBatchMode()) {\n let sz = Math.max(lgaps[side], 10),\n d = this.vertical ? `v${this.gr_range}h${-side*sz}v${-this.gr_range}`\n : `h${this.gr_range}v${side*sz}h${-this.gr_range}`;\n axis_g.append('svg:path')\n .attr('d',`M0,0${d}z`)\n .attr('class', 'axis_zoom')\n .style('opacity', '0')\n .style('cursor', 'crosshair');\n }\n }\n\n /** @summary Returns true if axis title is rotated */\n isTitleRotated() {\n return this.titleFont && (this.titleFont.angle != (this.vertical ? 270 : 0));\n }\n\n /** @summary Draw axis title */\n async drawTitle(axis_g, side, lgaps) {\n if (!this.fTitle)\n return this;\n\n let title_g = axis_g.append('svg:g').attr('class', 'axis_title'),\n title_shift_x = 0, title_shift_y = 0, title_basepos = 0;\n\n let rotated = this.isTitleRotated();\n\n this.startTextDrawing(this.titleFont, 'font', title_g);\n\n this.title_align = this.titleCenter ? 'middle' : (this.titleOpposite ^ (this.isReverseAxis() || rotated) ? 'begin' : 'end');\n\n if (this.vertical) {\n title_basepos = Math.round(-side*(lgaps[side]));\n title_shift_x = title_basepos + Math.round(-side*this.titleOffset);\n title_shift_y = Math.round(this.titleCenter ? this.gr_range/2 : (this.titleOpposite ? 0 : this.gr_range));\n this.drawText({ align: [this.title_align, ((side < 0) ^ rotated ? 'top' : 'bottom')],\n text: this.fTitle, draw_g: title_g });\n } else {\n title_shift_x = Math.round(this.titleCenter ? this.gr_range/2 : (this.titleOpposite ? 0 : this.gr_range));\n title_basepos = Math.round(side*lgaps[side]);\n title_shift_y = title_basepos + Math.round(side*this.titleOffset);\n this.drawText({ align: [this.title_align, ((side > 0) ^ rotated ? 'top' : 'bottom')],\n text: this.fTitle, draw_g: title_g });\n }\n\n title_g.attr('transform', `translate(${title_shift_x},${title_shift_y})`)\n .property('basepos', title_basepos)\n .property('shift_x', title_shift_x)\n .property('shift_y', title_shift_y);\n\n this.addTitleDrag(title_g, side);\n\n return this.finishTextDrawing(title_g);\n }\n\n /** @summary Extract major draw attributes, which are also used in interactive operations\n * @private */\n extractDrawAttributes(scalingSize) {\n let pp = this.getPadPainter(),\n rect = pp?.getPadRect() || { width: 10, height: 10 };\n\n this.scalingSize = scalingSize || (this.vertical ? rect.width : rect.height);\n\n this.createv7AttLine('line_');\n\n this.optionUnlab = this.v7EvalAttr('labels_hide', false);\n\n this.endingStyle = this.v7EvalAttr('ending_style', '');\n this.endingSize = Math.round(this.v7EvalLength('ending_size', this.scalingSize, this.endingStyle ? 0.02 : 0));\n this.startingSize = Math.round(this.v7EvalLength('starting_size', this.scalingSize, 0));\n this.ticksSize = this.v7EvalLength('ticks_size', this.scalingSize, 0.02);\n this.ticksSide = this.v7EvalAttr('ticks_side', 'normal');\n this.ticksColor = this.v7EvalColor('ticks_color', '');\n this.ticksWidth = this.v7EvalAttr('ticks_width', 1);\n if (scalingSize && (this.ticksSize < 0))\n this.ticksSize = -this.ticksSize;\n\n this.fTitle = this.v7EvalAttr('title_value', '');\n\n if (this.fTitle) {\n this.titleFont = this.v7EvalFont('title', { size: 0.03 }, scalingSize || pp?.getPadHeight() || 10);\n this.titleFont.roundAngle(180, this.vertical ? 270 : 0);\n\n this.titleOffset = this.v7EvalLength('title_offset', this.scalingSize, 0);\n this.titlePos = this.v7EvalAttr('title_position', 'right');\n this.titleCenter = (this.titlePos == 'center');\n this.titleOpposite = (this.titlePos == 'left');\n } else {\n delete this.titleFont;\n delete this.titleOffset;\n delete this.titlePos;\n }\n\n // TODO: remove old scaling factors for labels and ticks\n this.labelsFont = this.v7EvalFont('labels', { size: scalingSize ? 0.05 : 0.03 });\n this.labelsFont.roundAngle(180);\n if (this.labelsFont.angle) this.labelsFont.angle = 270;\n this.labelsOffset = this.v7EvalLength('labels_offset', this.scalingSize, 0);\n\n if (scalingSize) this.ticksSize = this.labelsFont.size*0.5; // old lego scaling factor\n\n if (this.maxTickSize && (this.ticksSize > this.maxTickSize))\n this.ticksSize = this.maxTickSize;\n }\n\n /** @summary Performs axis drawing\n * @return {Promise} which resolved when drawing is completed */\n async drawAxis(layer, transform, side) {\n let axis_g = layer;\n\n if (side === undefined) side = 1;\n\n if (!this.standalone) {\n axis_g = layer.select('.' + this.name + '_container');\n if (axis_g.empty())\n axis_g = layer.append('svg:g').attr('class', this.name + '_container');\n else\n axis_g.selectAll('*').remove();\n }\n\n axis_g.attr('transform', transform || null);\n\n this.extractDrawAttributes();\n this.axis_g = axis_g;\n this.side = side;\n\n if (this.ticksSide == 'invert') side = -side;\n\n if (this.standalone)\n this.drawMainLine(axis_g);\n\n let optionNoopt = false, // no ticks position optimization\n optionInt = false, // integer labels\n optionNoexp = false; // do not create exp\n\n this.handle = this.createTicks(false, optionNoexp, optionNoopt, optionInt);\n\n // first draw ticks\n let tgaps = this.drawTicks(axis_g, side, true);\n\n // draw labels\n let labelsPromise = this.optionUnlab ? Promise.resolve(tgaps) : this.drawLabels(axis_g, side, tgaps);\n\n return labelsPromise.then(lgaps => {\n // when drawing axis on frame, zoom rect should be always outside\n this.addZoomingRect(axis_g, this.standalone ? side : this.side, lgaps);\n\n return this.drawTitle(axis_g, side, lgaps);\n });\n }\n\n /** @summary Assign handler, which is called when axis redraw by interactive changes\n * @desc Used by palette painter to reassign iteractive handlers\n * @private */\n setAfterDrawHandler(handler) {\n this._afterDrawAgain = handler;\n }\n\n /** @summary Draw axis with the same settings, used by interactive changes */\n drawAxisAgain() {\n if (!this.axis_g || !this.side) return;\n\n this.axis_g.selectAll('*').remove();\n\n this.extractDrawAttributes();\n\n let side = this.side;\n if (this.ticksSide == 'invert') side = -side;\n\n if (this.standalone)\n this.drawMainLine(this.axis_g);\n\n // first draw ticks\n let tgaps = this.drawTicks(this.axis_g, side, false);\n\n let labelsPromise = this.optionUnlab ? Promise.resolve(tgaps) : this.drawLabels(this.axis_g, side, tgaps);\n\n return labelsPromise.then(lgaps => {\n // when drawing axis on frame, zoom rect should be always outside\n this.addZoomingRect(this.axis_g, this.standalone ? side : this.side, lgaps);\n\n return this.drawTitle(this.axis_g, side, lgaps);\n }).then(() => {\n if (isFunc(this._afterDrawAgain))\n this._afterDrawAgain();\n });\n }\n\n /** @summary Draw axis again on opposite frame size */\n drawAxisOtherPlace(layer, transform, side, only_ticks) {\n let axis_g = layer.select('.' + this.name + '_container2');\n if (axis_g.empty())\n axis_g = layer.append('svg:g').attr('class',this.name + '_container2');\n else\n axis_g.selectAll('*').remove();\n\n axis_g.attr('transform', transform || null);\n\n if (this.ticksSide == 'invert') side = -side;\n\n // draw ticks again\n let tgaps = this.drawTicks(axis_g, side, false);\n\n // draw labels again\n let promise = this.optionUnlab || only_ticks ? Promise.resolve(tgaps) : this.drawLabels(axis_g, side, tgaps);\n\n return promise.then(lgaps => {\n this.addZoomingRect(axis_g, side, lgaps);\n return true;\n });\n }\n\n /** @summary Change zooming in standalone mode */\n zoomStandalone(min,max) {\n this.changeAxisAttr(1, 'zoomMin', min, 'zoomMax', max);\n }\n\n /** @summary Redraw axis, used in standalone mode for RAxisDrawable */\n redraw() {\n\n let drawable = this.getObject(),\n pp = this.getPadPainter(),\n pos = pp.getCoordinate(drawable.fPos),\n len = pp.getPadLength(drawable.fVertical, drawable.fLength),\n reverse = this.v7EvalAttr('reverse', false),\n labels_len = drawable.fLabels.length,\n min = (labels_len > 0) ? 0 : this.v7EvalAttr('min', 0),\n max = (labels_len > 0) ? labels_len : this.v7EvalAttr('max', 100);\n\n // in vertical direction axis drawn in negative direction\n if (drawable.fVertical) len -= pp.getPadHeight();\n\n let smin = this.v7EvalAttr('zoomMin'),\n smax = this.v7EvalAttr('zoomMax');\n if (smin === smax) {\n smin = min; smax = max;\n }\n\n this.configureAxis('axis', min, max, smin, smax, drawable.fVertical, undefined, len, { reverse, labels: labels_len > 0 });\n\n this.createG();\n\n this.standalone = true; // no need to clean axis container\n\n let promise = this.drawAxis(this.draw_g, `translate(${pos.x},${pos.y})`);\n\n if (isBatchMode()) return promise;\n\n return promise.then(() => {\n if (settings.ContextMenu)\n this.draw_g.on('contextmenu', evnt => {\n evnt.stopPropagation(); // disable main context menu\n evnt.preventDefault(); // disable browser context menu\n createMenu(evnt, this).then(menu => {\n menu.add('header:RAxisDrawable');\n menu.add('Unzoom', () => this.zoomStandalone());\n this.fillAxisContextMenu(menu, '');\n menu.show();\n });\n });\n\n addDragHandler(this, { x: pos.x, y: pos.y, width: this.vertical ? 10 : len, height: this.vertical ? len : 10,\n only_move: true, redraw: d => this.positionChanged(d) });\n\n this.draw_g.on('dblclick', () => this.zoomStandalone());\n\n if (settings.ZoomWheel)\n this.draw_g.on('wheel', evnt => {\n evnt.stopPropagation();\n evnt.preventDefault();\n\n let pos = d3_pointer(evnt, this.draw_g.node()),\n coord = this.vertical ? (1 - pos[1] / len) : pos[0] / len,\n item = this.analyzeWheelEvent(evnt, coord);\n\n if (item.changed) this.zoomStandalone(item.min, item.max);\n });\n });\n }\n\n /** @summary Process interactive moving of the axis drawing */\n positionChanged(drag) {\n let drawable = this.getObject(),\n rect = this.getPadPainter().getPadRect(),\n xn = drag.x / rect.width,\n yn = 1 - drag.y / rect.height;\n\n drawable.fPos.fHoriz.fArr = [ xn ];\n drawable.fPos.fVert.fArr = [ yn ];\n\n this.submitCanvExec(`SetPos({${xn.toFixed(4)},${yn.toFixed(4)}})`);\n }\n\n /** @summary Change axis attribute, submit changes to server and redraw axis when specified\n * @desc Arguments as redraw_mode, name1, value1, name2, value2, ... */\n changeAxisAttr(redraw_mode) {\n let changes = {}, indx = 1;\n while (indx < arguments.length - 1) {\n this.v7AttrChange(changes, arguments[indx], arguments[indx+1]);\n this.v7SetAttr(arguments[indx], arguments[indx+1]);\n indx += 2;\n }\n this.v7SendAttrChanges(changes, false); // do not invoke canvas update on the server\n if (redraw_mode === 1) {\n if (this.standalone)\n this.redraw();\n else\n this.drawAxisAgain();\n } else if (redraw_mode)\n this.redrawPad();\n }\n\n /** @summary Change axis log scale kind */\n changeAxisLog(arg) {\n if ((this.kind == 'labels') || (this.kind == 'time')) return;\n if (arg === 'toggle') arg = this.log ? 0 : 10;\n\n arg = parseFloat(arg);\n if (Number.isFinite(arg)) this.changeAxisAttr(2, 'log', arg, 'symlog', 0);\n }\n\n /** @summary Provide context menu for axis */\n fillAxisContextMenu(menu, kind) {\n\n if (kind) menu.add('Unzoom', () => this.getFramePainter().unzoom(kind));\n\n menu.add('sub:Log scale', () => this.changeAxisLog('toggle'));\n menu.addchk(!this.log && !this.symlog, 'linear', 0, arg => this.changeAxisLog(arg));\n menu.addchk(this.log && !this.symlog && (this.logbase == 10), 'log10', () => this.changeAxisLog(10));\n menu.addchk(this.log && !this.symlog && (this.logbase == 2), 'log2', () => this.changeAxisLog(2));\n menu.addchk(this.log && !this.symlog && Math.abs(this.logbase - Math.exp(1)) < 0.1, 'ln', () => this.changeAxisLog(Math.exp(1)));\n menu.addchk(!this.log && this.symlog, 'symlog', 0, () =>\n menu.input('set symlog constant', this.symlog || 10, 'float').then(v => this.changeAxisAttr(2,'symlog', v)));\n menu.add('endsub:');\n\n menu.add('Divisions', () => menu.input('Set axis devisions', this.v7EvalAttr('ndiv', 508), 'int').then(val => this.changeAxisAttr(2, 'ndiv', val)));\n\n menu.add('sub:Ticks');\n menu.addRColorMenu('color', this.ticksColor, col => this.changeAxisAttr(1, 'ticks_color', col));\n menu.addSizeMenu('size', 0, 0.05, 0.01, this.ticksSize/this.scalingSize, sz => this.changeAxisAttr(1, 'ticks_size', sz));\n menu.addSelectMenu('side', ['normal', 'invert', 'both'], this.ticksSide, side => this.changeAxisAttr(1, 'ticks_side', side));\n menu.add('endsub:');\n\n if (!this.optionUnlab && this.labelsFont) {\n menu.add('sub:Labels');\n menu.addSizeMenu('offset', -0.05, 0.05, 0.01, this.labelsOffset/this.scalingSize,\n offset => this.changeAxisAttr(1, 'labels_offset', offset));\n menu.addRAttrTextItems(this.labelsFont, { noangle: 1, noalign: 1 },\n change => this.changeAxisAttr(1, 'labels_' + change.name, change.value));\n menu.addchk(this.labelsFont.angle, 'rotate', res => this.changeAxisAttr(1, 'labels_angle', res ? 180 : 0));\n menu.add('endsub:');\n }\n\n menu.add('sub:Title', () => menu.input('Enter axis title', this.fTitle).then(t => this.changeAxisAttr(1, 'title_value', t)));\n\n if (this.fTitle) {\n menu.addSizeMenu('offset', -0.05, 0.05, 0.01, this.titleOffset/this.scalingSize,\n offset => this.changeAxisAttr(1, 'title_offset', offset));\n\n menu.addSelectMenu('position', ['left', 'center', 'right'], this.titlePos,\n pos => this.changeAxisAttr(1, 'title_position', pos));\n\n menu.addchk(this.isTitleRotated(), 'rotate', flag => this.changeAxisAttr(1, 'title_angle', flag ? 180 : 0));\n\n menu.addRAttrTextItems(this.titleFont, { noangle: 1, noalign: 1 }, change => this.changeAxisAttr(1, 'title_' + change.name, change.value));\n }\n\n menu.add('endsub:');\n return true;\n }\n\n} // class RAxisPainter\n\nexport { RAxisPainter };\n","import { gStyle, settings, create, isBatchMode, isFunc, isStr, clTAxis } from '../core.mjs';\nimport { pointer as d3_pointer } from '../d3.mjs';\nimport { getSvgLineStyle } from '../base/TAttLineHandler.mjs';\nimport { TAxisPainter } from './TAxisPainter.mjs';\nimport { RAxisPainter } from './RAxisPainter.mjs';\nimport { FrameInteractive } from './TFramePainter.mjs';\nimport { RObjectPainter } from '../base/RObjectPainter.mjs';\n\n\n/**\n * @summary Painter class for RFrame, main handler for interactivity\n *\n * @private\n */\n\nclass RFramePainter extends RObjectPainter {\n\n /** @summary constructor\n * @param {object|string} dom - DOM element for drawing or element id\n * @param {object} tframe - RFrame object */\n constructor(dom, tframe) {\n super(dom, tframe, '', 'frame');\n this.mode3d = false;\n this.xmin = this.xmax = 0; // no scale specified, wait for objects drawing\n this.ymin = this.ymax = 0; // no scale specified, wait for objects drawing\n this.axes_drawn = false;\n this.keys_handler = null;\n this.projection = 0; // different projections\n this.v7_frame = true; // indicator of v7, used in interactive part\n }\n\n /** @summary Returns frame painter - object itself */\n getFramePainter() { return this; }\n\n /** @summary Returns true if it is ROOT6 frame\n * @private */\n is_root6() { return false; }\n\n /** @summary Set active flag for frame - can block some events\n * @private */\n setFrameActive(on) {\n this.enabledKeys = on && settings.HandleKeys ? true : false;\n // used only in 3D mode\n if (this.control)\n this.control.enableKeys = this.enabledKeys;\n }\n\n setLastEventPos(pnt) {\n // set position of last context menu event, can be\n this.fLastEventPnt = pnt;\n }\n\n getLastEventPos() {\n // return position of last event\n return this.fLastEventPnt;\n }\n\n /** @summary Update graphical attributes */\n updateAttributes(force) {\n if ((this.fX1NDC === undefined) || (force && !this.modified_NDC)) {\n\n let rect = this.getPadPainter().getPadRect();\n this.fX1NDC = this.v7EvalLength('margins_left', rect.width, settings.FrameNDC.fX1NDC) / rect.width;\n this.fY1NDC = this.v7EvalLength('margins_bottom', rect.height, settings.FrameNDC.fY1NDC) / rect.height;\n this.fX2NDC = 1 - this.v7EvalLength('margins_right', rect.width, 1-settings.FrameNDC.fX2NDC) / rect.width;\n this.fY2NDC = 1 - this.v7EvalLength('margins_top', rect.height, 1-settings.FrameNDC.fY2NDC) / rect.height;\n }\n\n if (!this.fillatt)\n this.createv7AttFill();\n\n this.createv7AttLine('border_');\n }\n\n /** @summary Returns coordinates transformation func */\n getProjectionFunc() {\n switch (this.projection) {\n // Aitoff2xy\n case 1: return (l, b) => {\n const DegToRad = Math.PI/180,\n alpha2 = (l/2)*DegToRad,\n delta = b*DegToRad,\n r2 = Math.sqrt(2),\n f = 2*r2/Math.PI,\n cdec = Math.cos(delta),\n denom = Math.sqrt(1. + cdec*Math.cos(alpha2));\n return {\n x: cdec*Math.sin(alpha2)*2.*r2/denom/f/DegToRad,\n y: Math.sin(delta)*r2/denom/f/DegToRad\n };\n };\n // mercator\n case 2: return (l, b) => { return { x: l, y: Math.log(Math.tan((Math.PI/2 + b/180*Math.PI)/2)) }; };\n // sinusoidal\n case 3: return (l, b) => { return { x: l*Math.cos(b/180*Math.PI), y: b } };\n // parabolic\n case 4: return (l, b) => { return { x: l*(2.*Math.cos(2*b/180*Math.PI/3) - 1), y: 180*Math.sin(b/180*Math.PI/3) }; };\n }\n }\n\n /** @summary Rcalculate frame ranges using specified projection functions\n * @desc Not yet used in v7 */\n recalculateRange(Proj) {\n this.projection = Proj || 0;\n\n if ((this.projection == 2) && ((this.scale_ymin <= -90 || this.scale_ymax >=90))) {\n console.warn(`Mercator Projection: latitude out of range ${this.scale_ymin} ${this.scale_ymax}`);\n this.projection = 0;\n }\n\n let func = this.getProjectionFunc();\n if (!func) return;\n\n let pnts = [ func(this.scale_xmin, this.scale_ymin),\n func(this.scale_xmin, this.scale_ymax),\n func(this.scale_xmax, this.scale_ymax),\n func(this.scale_xmax, this.scale_ymin) ];\n if (this.scale_xmin < 0 && this.scale_xmax > 0) {\n pnts.push(func(0, this.scale_ymin));\n pnts.push(func(0, this.scale_ymax));\n }\n if (this.scale_ymin < 0 && this.scale_ymax > 0) {\n pnts.push(func(this.scale_xmin, 0));\n pnts.push(func(this.scale_xmax, 0));\n }\n\n this.original_xmin = this.scale_xmin;\n this.original_xmax = this.scale_xmax;\n this.original_ymin = this.scale_ymin;\n this.original_ymax = this.scale_ymax;\n\n this.scale_xmin = this.scale_xmax = pnts[0].x;\n this.scale_ymin = this.scale_ymax = pnts[0].y;\n\n for (let n = 1; n < pnts.length; ++n) {\n this.scale_xmin = Math.min(this.scale_xmin, pnts[n].x);\n this.scale_xmax = Math.max(this.scale_xmax, pnts[n].x);\n this.scale_ymin = Math.min(this.scale_ymin, pnts[n].y);\n this.scale_ymax = Math.max(this.scale_ymax, pnts[n].y);\n }\n }\n\n /** @summary Draw axes grids\n * @desc Called immediately after axes drawing */\n drawGrids() {\n let layer = this.getFrameSvg().select('.grid_layer');\n\n layer.selectAll('.xgrid').remove();\n layer.selectAll('.ygrid').remove();\n\n let h = this.getFrameHeight(),\n w = this.getFrameWidth(),\n gridx = this.v7EvalAttr('gridX', false),\n gridy = this.v7EvalAttr('gridY', false),\n grid_style = getSvgLineStyle(gStyle.fGridStyle),\n grid_color = (gStyle.fGridColor > 0) ? this.getColor(gStyle.fGridColor) : 'black';\n\n if (this.x_handle)\n this.x_handle.draw_grid = gridx;\n\n // add a grid on x axis, if the option is set\n if (this.x_handle && this.x_handle.draw_grid) {\n let grid = '';\n for (let n = 0; n < this.x_handle.ticks.length; ++n)\n if (this.swap_xy)\n grid += `M0,${h+this.x_handle.ticks[n]}h${w}`;\n else\n grid += `M${this.x_handle.ticks[n]},0v${h}`;\n\n if (grid)\n layer.append('svg:path')\n .attr('class', 'xgrid')\n .attr('d', grid)\n .style('stroke',grid_color)\n .style('stroke-width', gStyle.fGridWidth)\n .style('stroke-dasharray', grid_style);\n }\n\n if (this.y_handle)\n this.y_handle.draw_grid = gridy;\n\n // add a grid on y axis, if the option is set\n if (this.y_handle && this.y_handle.draw_grid) {\n let grid = '';\n for (let n = 0; n < this.y_handle.ticks.length; ++n)\n if (this.swap_xy)\n grid += `M${this.y_handle.ticks[n]},0v${h}`;\n else\n grid += `M0,${h+this.y_handle.ticks[n]}h${w}`;\n\n if (grid)\n layer.append('svg:path')\n .attr('class', 'ygrid')\n .attr('d', grid)\n .style('stroke', grid_color)\n .style('stroke-width', gStyle.fGridWidth)\n .style('stroke-dasharray', grid_style);\n }\n }\n\n /** @summary Converts 'raw' axis value into text */\n axisAsText(axis, value) {\n let handle = this[axis+'_handle'];\n\n if (handle)\n return handle.axisAsText(value, settings[axis.toUpperCase() + 'ValuesFormat']);\n\n return value.toPrecision(4);\n }\n\n /** @summary Set axix range */\n _setAxisRange(prefix, vmin, vmax) {\n let nmin = prefix + 'min', nmax = prefix + 'max';\n if (this[nmin] != this[nmax]) return;\n let min = this.v7EvalAttr(prefix + '_min'),\n max = this.v7EvalAttr(prefix + '_max');\n\n if (min !== undefined) vmin = min;\n if (max !== undefined) vmax = max;\n\n if (vmin < vmax) {\n this[nmin] = vmin;\n this[nmax] = vmax;\n }\n\n let nzmin = 'zoom_' + prefix + 'min', nzmax = 'zoom_' + prefix + 'max';\n\n if ((this[nzmin] == this[nzmax]) && !this.zoomChangedInteractive(prefix)) {\n min = this.v7EvalAttr(prefix + '_zoomMin');\n max = this.v7EvalAttr(prefix + '_zoomMax');\n\n if ((min !== undefined) || (max !== undefined)) {\n this[nzmin] = (min === undefined) ? this[nmin] : min;\n this[nzmax] = (max === undefined) ? this[nmax] : max;\n }\n }\n }\n\n /** @summary Set axes ranges for drawing, check configured attributes if range already specified */\n setAxesRanges(xaxis, xmin, xmax, yaxis, ymin, ymax, zaxis, zmin, zmax) {\n if (this.axes_drawn) return;\n this.xaxis = xaxis;\n this._setAxisRange('x', xmin, xmax);\n this.yaxis = yaxis;\n this._setAxisRange('y', ymin, ymax);\n this.zaxis = zaxis;\n this._setAxisRange('z', zmin, zmax);\n }\n\n /** @summary Set secondary axes ranges */\n setAxes2Ranges(second_x, xaxis, xmin, xmax, second_y, yaxis, ymin, ymax) {\n if (second_x) {\n this.x2axis = xaxis;\n this._setAxisRange('x2', xmin, xmax);\n }\n if (second_y) {\n this.y2axis = yaxis;\n this._setAxisRange('y2', ymin, ymax);\n }\n }\n\n /** @summary Create x,y objects which maps user coordinates into pixels\n * @desc Must be used only for v6 objects, see TFramePainter for more details\n * @private */\n createXY(opts) {\n if (this.self_drawaxes) return;\n\n this.cleanXY(); // remove all previous configurations\n\n if (!opts) opts = {};\n\n this.v6axes = true;\n this.swap_xy = opts.swap_xy || false;\n this.reverse_x = opts.reverse_x || false;\n this.reverse_y = opts.reverse_y || false;\n\n this.logx = this.v7EvalAttr('x_log', 0);\n this.logy = this.v7EvalAttr('y_log', 0);\n\n let w = this.getFrameWidth(), h = this.getFrameHeight();\n\n this.scale_xmin = this.xmin;\n this.scale_xmax = this.xmax;\n\n this.scale_ymin = this.ymin;\n this.scale_ymax = this.ymax;\n\n if (opts.extra_y_space) {\n let log_scale = this.swap_xy ? this.logx : this.logy;\n if (log_scale && (this.scale_ymax > 0))\n this.scale_ymax = Math.exp(Math.log(this.scale_ymax)*1.1);\n else\n this.scale_ymax += (this.scale_ymax - this.scale_ymin)*0.1;\n }\n\n // if (opts.check_pad_range) {\n // take zooming out of pad or axis attributes - skip!\n // }\n\n if ((this.zoom_ymin == this.zoom_ymax) && (opts.zoom_ymin != opts.zoom_ymax) && !this.zoomChangedInteractive('y')) {\n this.zoom_ymin = opts.zoom_ymin;\n this.zoom_ymax = opts.zoom_ymax;\n }\n\n if (this.zoom_xmin != this.zoom_xmax) {\n this.scale_xmin = this.zoom_xmin;\n this.scale_xmax = this.zoom_xmax;\n }\n\n if (this.zoom_ymin != this.zoom_ymax) {\n this.scale_ymin = this.zoom_ymin;\n this.scale_ymax = this.zoom_ymax;\n }\n\n let xaxis = this.xaxis, yaxis = this.yaxis;\n if (xaxis?._typename != clTAxis) xaxis = create(clTAxis);\n if (yaxis?._typename != clTAxis) yaxis = create(clTAxis);\n\n this.x_handle = new TAxisPainter(this.getDom(), xaxis, true);\n this.x_handle.setPadName(this.getPadName());\n this.x_handle.optionUnlab = this.v7EvalAttr('x_labels_hide', false);\n\n this.x_handle.configureAxis('xaxis', this.xmin, this.xmax, this.scale_xmin, this.scale_xmax, this.swap_xy, this.swap_xy ? [0,h] : [0,w],\n { reverse: this.reverse_x,\n log: this.swap_xy ? this.logy : this.logx,\n symlog: this.swap_xy ? opts.symlog_y : opts.symlog_x,\n logcheckmin: this.swap_xy,\n logminfactor: 0.0001 });\n\n this.x_handle.assignFrameMembers(this,'x');\n\n this.y_handle = new TAxisPainter(this.getDom(), yaxis, true);\n this.y_handle.setPadName(this.getPadName());\n this.y_handle.optionUnlab = this.v7EvalAttr('y_labels_hide', false);\n\n this.y_handle.configureAxis('yaxis', this.ymin, this.ymax, this.scale_ymin, this.scale_ymax, !this.swap_xy, this.swap_xy ? [0,w] : [0,h],\n { reverse: this.reverse_y,\n log: this.swap_xy ? this.logx : this.logy,\n symlog: this.swap_xy ? opts.symlog_x : opts.symlog_y,\n logcheckmin: (opts.ndim < 2) || this.swap_xy,\n log_min_nz: opts.ymin_nz && (opts.ymin_nz < 0.01*this.ymax) ? 0.3 * opts.ymin_nz : 0,\n logminfactor: 3e-4 });\n\n this.y_handle.assignFrameMembers(this,'y');\n }\n\n /** @summary Identify if requested axes are drawn\n * @desc Checks if x/y axes are drawn. Also if second side is already there */\n hasDrawnAxes(second_x, second_y) {\n return !second_x && !second_y ? this.axes_drawn : false;\n }\n\n /** @summary Draw configured axes on the frame\n * @desc axes can be drawn only for main histogram */\n async drawAxes() {\n\n if (this.axes_drawn || (this.xmin == this.xmax) || (this.ymin == this.ymax))\n return this.axes_drawn;\n\n let ticksx = this.v7EvalAttr('ticksX', 1),\n ticksy = this.v7EvalAttr('ticksY', 1),\n sidex = 1, sidey = 1;\n\n if (this.v7EvalAttr('swapX', false)) sidex = -1;\n if (this.v7EvalAttr('swapY', false)) sidey = -1;\n\n let w = this.getFrameWidth(), h = this.getFrameHeight();\n\n if (!this.v6axes) {\n // this is partially same as v6 createXY method\n\n this.cleanupAxes();\n\n this.swap_xy = false;\n\n if (this.zoom_xmin != this.zoom_xmax) {\n this.scale_xmin = this.zoom_xmin;\n this.scale_xmax = this.zoom_xmax;\n } else {\n this.scale_xmin = this.xmin;\n this.scale_xmax = this.xmax;\n }\n\n if (this.zoom_ymin != this.zoom_ymax) {\n this.scale_ymin = this.zoom_ymin;\n this.scale_ymax = this.zoom_ymax;\n } else {\n this.scale_ymin = this.ymin;\n this.scale_ymax = this.ymax;\n }\n\n this.recalculateRange(0);\n\n this.x_handle = new RAxisPainter(this.getDom(), this, this.xaxis, 'x_');\n this.x_handle.setPadName(this.getPadName());\n this.x_handle.snapid = this.snapid;\n this.x_handle.draw_swapside = (sidex < 0);\n this.x_handle.draw_ticks = ticksx;\n\n this.y_handle = new RAxisPainter(this.getDom(), this, this.yaxis, 'y_');\n this.y_handle.setPadName(this.getPadName());\n this.y_handle.snapid = this.snapid;\n this.y_handle.draw_swapside = (sidey < 0);\n this.y_handle.draw_ticks = ticksy;\n\n this.z_handle = new RAxisPainter(this.getDom(), this, this.zaxis, 'z_');\n this.z_handle.setPadName(this.getPadName());\n this.z_handle.snapid = this.snapid;\n\n this.x_handle.configureAxis('xaxis', this.xmin, this.xmax, this.scale_xmin, this.scale_xmax, false, [0,w], w, { reverse: false });\n this.x_handle.assignFrameMembers(this,'x');\n\n this.y_handle.configureAxis('yaxis', this.ymin, this.ymax, this.scale_ymin, this.scale_ymax, true, [h,0], -h, { reverse: false });\n this.y_handle.assignFrameMembers(this,'y');\n\n // only get basic properties like log scale\n this.z_handle.configureZAxis('zaxis', this);\n }\n\n let layer = this.getFrameSvg().select('.axis_layer');\n\n this.x_handle.has_obstacle = false;\n\n let draw_horiz = this.swap_xy ? this.y_handle : this.x_handle,\n draw_vertical = this.swap_xy ? this.x_handle : this.y_handle,\n pp = this.getPadPainter(), pr;\n\n if (pp?._fast_drawing) {\n pr = Promise.resolve(true); // do nothing\n } else if (this.v6axes) {\n\n // in v7 ticksx/y values shifted by 1 relative to v6\n // In v7 ticksx == 0 means no ticks, ticksx == 1 equivalent to == 0 in v6\n\n let can_adjust_frame = false, disable_x_draw = false, disable_y_draw = false;\n\n draw_horiz.disable_ticks = (ticksx <= 0);\n draw_vertical.disable_ticks = (ticksy <= 0);\n\n let pr1 = draw_horiz.drawAxis(layer, w, h,\n draw_horiz.invert_side ? undefined : `translate(0,${h})`,\n (ticksx > 1) ? -h : 0, disable_x_draw,\n undefined, false);\n\n let pr2 = draw_vertical.drawAxis(layer, w, h,\n draw_vertical.invert_side ? `translate(${w})` : undefined,\n (ticksy > 1) ? w : 0, disable_y_draw,\n draw_vertical.invert_side ? 0 : this._frame_x, can_adjust_frame);\n\n pr = Promise.all([pr1,pr2]).then(() => this.drawGrids());\n\n } else {\n\n let arr = [];\n\n if (ticksx > 0)\n arr.push(draw_horiz.drawAxis(layer, (sidex > 0) ? `translate(0,${h})` : '', sidex));\n\n if (ticksy > 0)\n arr.push(draw_vertical.drawAxis(layer, (sidey > 0) ? `translate(0,${h})` : `translate(${w},${h})`, sidey));\n\n pr = Promise.all(arr).then(() => {\n arr = [];\n if (ticksx > 1)\n arr.push(draw_horiz.drawAxisOtherPlace(layer, (sidex < 0) ? `translate(0,${h})` : '', -sidex, ticksx == 2));\n\n if (ticksy > 1)\n arr.push(draw_vertical.drawAxisOtherPlace(layer, (sidey < 0) ? `translate(0,${h})` : `translate(${w},${h})`, -sidey, ticksy == 2));\n return Promise.all(arr);\n }).then(() => this.drawGrids());\n }\n\n return pr.then(() => {\n this.axes_drawn = true;\n return true;\n });\n }\n\n /** @summary Draw secondary configuread axes */\n drawAxes2(second_x, second_y) {\n let w = this.getFrameWidth(), h = this.getFrameHeight(),\n layer = this.getFrameSvg().select('.axis_layer'),\n pr1, pr2;\n\n if (second_x) {\n if (this.zoom_x2min != this.zoom_x2max) {\n this.scale_x2min = this.zoom_x2min;\n this.scale_x2max = this.zoom_x2max;\n } else {\n this.scale_x2min = this.x2min;\n this.scale_x2max = this.x2max;\n }\n this.x2_handle = new RAxisPainter(this.getDom(), this, this.x2axis, 'x2_');\n this.x2_handle.setPadName(this.getPadName());\n this.x2_handle.snapid = this.snapid;\n\n this.x2_handle.configureAxis('x2axis', this.x2min, this.x2max, this.scale_x2min, this.scale_x2max, false, [0,w], w, { reverse: false });\n this.x2_handle.assignFrameMembers(this,'x2');\n\n pr1 = this.x2_handle.drawAxis(layer, '', -1);\n }\n\n if (second_y) {\n if (this.zoom_y2min != this.zoom_y2max) {\n this.scale_y2min = this.zoom_y2min;\n this.scale_y2max = this.zoom_y2max;\n } else {\n this.scale_y2min = this.y2min;\n this.scale_y2max = this.y2max;\n }\n\n this.y2_handle = new RAxisPainter(this.getDom(), this, this.y2axis, 'y2_');\n this.y2_handle.setPadName(this.getPadName());\n this.y2_handle.snapid = this.snapid;\n\n this.y2_handle.configureAxis('y2axis', this.y2min, this.y2max, this.scale_y2min, this.scale_y2max, true, [h,0], -h, { reverse: false });\n this.y2_handle.assignFrameMembers(this,'y2');\n\n pr2 = this.y2_handle.drawAxis(layer, `translate(${w},${h})`, -1);\n }\n\n return Promise.all([pr1,pr2]);\n }\n\n /** @summary Return functions to create x/y points based on coordinates\n * @desc In default case returns frame painter itself\n * @private */\n getGrFuncs(second_x, second_y) {\n let use_x2 = second_x && this.grx2,\n use_y2 = second_y && this.gry2;\n if (!use_x2 && !use_y2) return this;\n\n return {\n use_x2: use_x2,\n grx: use_x2 ? this.grx2 : this.grx,\n x_handle: use_x2 ? this.x2_handle : this.x_handle,\n logx: use_x2 ? this.x2_handle.log : this.x_handle.log,\n scale_xmin: use_x2 ? this.scale_x2min : this.scale_xmin,\n scale_xmax: use_x2 ? this.scale_x2max : this.scale_xmax,\n use_y2: use_y2,\n gry: use_y2 ? this.gry2 : this.gry,\n y_handle: use_y2 ? this.y2_handle : this.y_handle,\n logy: use_y2 ? this.y2_handle.log : this.y_handle.log,\n scale_ymin: use_y2 ? this.scale_y2min : this.scale_ymin,\n scale_ymax: use_y2 ? this.scale_y2max : this.scale_ymax,\n swap_xy: this.swap_xy,\n fp: this,\n revertAxis(name, v) {\n if ((name == 'x') && this.use_x2) name = 'x2';\n if ((name == 'y') && this.use_y2) name = 'y2';\n return this.fp.revertAxis(name, v);\n },\n axisAsText(name, v) {\n if ((name == 'x') && this.use_x2) name = 'x2';\n if ((name == 'y') && this.use_y2) name = 'y2';\n return this.fp.axisAsText(name, v);\n }\n };\n }\n\n /** @summary function called at the end of resize of frame\n * @desc Used to update attributes on the server\n * @private */\n sizeChanged() {\n\n let changes = {};\n this.v7AttrChange(changes, 'margins_left', this.fX1NDC);\n this.v7AttrChange(changes, 'margins_bottom', this.fY1NDC);\n this.v7AttrChange(changes, 'margins_right', 1 - this.fX2NDC);\n this.v7AttrChange(changes, 'margins_top', 1 - this.fY2NDC);\n this.v7SendAttrChanges(changes, false); // do not invoke canvas update on the server\n\n this.redrawPad();\n }\n\n /** @summary Remove all x/y functions\n * @private */\n cleanXY() {\n // remove all axes drawings\n let clean = (name,grname) => {\n if (this[name]) {\n this[name].cleanup();\n delete this[name];\n }\n delete this[grname];\n };\n\n clean('x_handle', 'grx');\n clean('y_handle', 'gry');\n clean('z_handle', 'grz');\n clean('x2_handle', 'grx2');\n clean('y2_handle', 'gry2');\n\n delete this.v6axes; // marker that v6 axes are used\n }\n\n /** @summary Remove all axes drawings\n * @private */\n cleanupAxes() {\n this.cleanXY();\n\n if (this.draw_g) {\n this.draw_g.select('.grid_layer').selectAll('*').remove();\n this.draw_g.select('.axis_layer').selectAll('*').remove();\n }\n this.axes_drawn = false;\n }\n\n /** @summary Removes all drawn elements of the frame\n * @private */\n cleanFrameDrawings() {\n // cleanup all 3D drawings if any\n if (isFunc(this.create3DScene))\n this.create3DScene(-1);\n\n this.cleanupAxes();\n\n let clean = (name) => {\n this[name+'min'] = this[name+'max'] = 0;\n this[`zoom_${name}min`] = this[`zoom_${name}max`] = 0;\n this[`scale_${name}min`] = this[`scale_${name}max`] = 0;\n };\n\n clean('x');\n clean('y');\n clean('z');\n clean('x2');\n clean('y2');\n\n if (this.draw_g) {\n this.draw_g.select('.main_layer').selectAll('*').remove();\n this.draw_g.select('.upper_layer').selectAll('*').remove();\n }\n }\n\n /** @summary Fully cleanup frame\n * @private */\n cleanup() {\n\n this.cleanFrameDrawings();\n\n if (this.draw_g) {\n this.draw_g.selectAll('*').remove();\n this.draw_g.on('mousedown', null)\n .on('dblclick', null)\n .on('wheel', null)\n .on('contextmenu', null)\n .property('interactive_set', null);\n }\n\n if (this.keys_handler) {\n window.removeEventListener('keydown', this.keys_handler, false);\n this.keys_handler = null;\n }\n delete this.enabledKeys;\n delete this.self_drawaxes;\n\n delete this.xaxis;\n delete this.yaxis;\n delete this.zaxis;\n delete this.x2axis;\n delete this.y2axis;\n\n delete this.draw_g; // frame element managet by the pad\n\n delete this._click_handler;\n delete this._dblclick_handler;\n\n let pp = this.getPadPainter();\n if (pp?.frame_painter_ref === this)\n delete pp.frame_painter_ref;\n\n super.cleanup();\n }\n\n /** @summary Redraw frame\n * @private */\n redraw() {\n\n let pp = this.getPadPainter();\n if (pp) pp.frame_painter_ref = this;\n\n // first update all attributes from objects\n this.updateAttributes();\n\n let rect = pp?.getPadRect() ?? { width: 10, height: 10 },\n lm = Math.round(rect.width * this.fX1NDC),\n w = Math.round(rect.width * (this.fX2NDC - this.fX1NDC)),\n tm = Math.round(rect.height * (1 - this.fY2NDC)),\n h = Math.round(rect.height * (this.fY2NDC - this.fY1NDC)),\n rotate = false, fixpos = false, trans;\n\n if (pp?.options) {\n if (pp.options.RotateFrame) rotate = true;\n if (pp.options.FixFrame) fixpos = true;\n }\n\n if (rotate) {\n trans = `rotate(-90,${lm},${tm}) translate(${lm-h},${tm})`;\n [w, h] = [h, w];\n } else {\n trans = `translate(${lm},${tm})`;\n }\n\n // update values here to let access even when frame is not really updated\n this._frame_x = lm;\n this._frame_y = tm;\n this._frame_width = w;\n this._frame_height = h;\n this._frame_rotate = rotate;\n this._frame_fixpos = fixpos;\n\n if (this.mode3d) return this; // no need for real draw in mode3d\n\n // this is svg:g object - container for every other items belonging to frame\n this.draw_g = this.getFrameSvg();\n\n let top_rect, main_svg;\n\n if (this.draw_g.empty()) {\n\n this.draw_g = this.getLayerSvg('primitives_layer').append('svg:g').attr('class', 'root_frame');\n\n if (!isBatchMode())\n this.draw_g.append('svg:title').text('');\n\n top_rect = this.draw_g.append('svg:rect');\n\n // append for the moment three layers - for drawing and axis\n this.draw_g.append('svg:g').attr('class','grid_layer');\n\n main_svg = this.draw_g.append('svg:svg')\n .attr('class','main_layer')\n .attr('x', 0)\n .attr('y', 0)\n .attr('overflow', 'hidden');\n\n this.draw_g.append('svg:g').attr('class','axis_layer');\n this.draw_g.append('svg:g').attr('class','upper_layer');\n } else {\n top_rect = this.draw_g.select('rect');\n main_svg = this.draw_g.select('.main_layer');\n }\n\n this.axes_drawn = false;\n\n this.draw_g.attr('transform', trans);\n\n top_rect.attr('x', 0)\n .attr('y', 0)\n .attr('width', w)\n .attr('height', h)\n .attr('rx', this.lineatt.rx || null)\n .attr('ry', this.lineatt.ry || null)\n .call(this.fillatt.func)\n .call(this.lineatt.func);\n\n main_svg.attr('width', w)\n .attr('height', h)\n .attr('viewBox', `0 0 ${w} ${h}`);\n\n let pr = Promise.resolve(true);\n\n if (this.v7EvalAttr('drawAxes')) {\n this.self_drawaxes = true;\n this.setAxesRanges();\n pr = this.drawAxes().then(() => this.addInteractivity());\n }\n\n return pr.then(() => {\n if (!isBatchMode()) {\n top_rect.style('pointer-events', 'visibleFill'); // let process mouse events inside frame\n\n FrameInteractive.assign(this);\n this.addBasicInteractivity();\n }\n\n return this;\n });\n }\n\n /** @summary Returns frame width */\n getFrameWidth() { return this._frame_width || 0; }\n\n /** @summary Returns frame height */\n getFrameHeight() { return this._frame_height || 0; }\n\n /** @summary Returns frame rectangle plus extra info for hint display */\n getFrameRect() {\n return {\n x: this._frame_x || 0,\n y: this._frame_y || 0,\n width: this.getFrameWidth(),\n height: this.getFrameHeight(),\n transform: this.draw_g ? this.draw_g.attr('transform') : '',\n hint_delta_x: 0,\n hint_delta_y: 0\n }\n }\n\n /** @summary Returns palette associated with frame */\n getHistPalette() {\n return this.getPadPainter().getHistPalette();\n }\n\n /** @summary Configure user-defined click handler\n * @desc Function will be called every time when frame click was perfromed\n * As argument, tooltip object with selected bins will be provided\n * If handler function returns true, default handling of click will be disabled */\n configureUserClickHandler(handler) {\n this._click_handler = isFunc(handler) ? handler : null;\n }\n\n /** @summary Configure user-defined dblclick handler\n * @desc Function will be called every time when double click was called\n * As argument, tooltip object with selected bins will be provided\n * If handler function returns true, default handling of dblclick (unzoom) will be disabled */\n configureUserDblclickHandler(handler) {\n this._dblclick_handler = isFunc(handler) ? handler : null;\n }\n\n /** @summary function can be used for zooming into specified range\n * @desc if both limits for each axis 0 (like xmin == xmax == 0), axis will be unzoomed\n * @return {Promise} with boolean flag if zoom operation was performed */\n async zoom(xmin, xmax, ymin, ymax, zmin, zmax) {\n\n // disable zooming when axis conversion is enabled\n if (this.projection) return false;\n\n if (xmin === 'x') { xmin = xmax; xmax = ymin; ymin = undefined; } else\n if (xmin === 'y') { ymax = ymin; ymin = xmax; xmin = xmax = undefined; } else\n if (xmin === 'z') { zmin = xmax; zmax = ymin; xmin = xmax = ymin = undefined; }\n\n let zoom_x = (xmin !== xmax), zoom_y = (ymin !== ymax), zoom_z = (zmin !== zmax),\n unzoom_x = false, unzoom_y = false, unzoom_z = false;\n\n if (zoom_x) {\n let cnt = 0;\n if (xmin <= this.xmin) { xmin = this.xmin; cnt++; }\n if (xmax >= this.xmax) { xmax = this.xmax; cnt++; }\n if (cnt === 2) { zoom_x = false; unzoom_x = true; }\n } else {\n unzoom_x = (xmin === xmax) && (xmin === 0);\n }\n\n if (zoom_y) {\n let cnt = 0;\n if (ymin <= this.ymin) { ymin = this.ymin; cnt++; }\n if (ymax >= this.ymax) { ymax = this.ymax; cnt++; }\n if (cnt === 2) { zoom_y = false; unzoom_y = true; }\n } else {\n unzoom_y = (ymin === ymax) && (ymin === 0);\n }\n\n if (zoom_z) {\n let cnt = 0;\n // if (this.logz && this.ymin_nz && this.getDimension()===2) main_zmin = 0.3*this.ymin_nz;\n if (zmin <= this.zmin) { zmin = this.zmin; cnt++; }\n if (zmax >= this.zmax) { zmax = this.zmax; cnt++; }\n if (cnt === 2) { zoom_z = false; unzoom_z = true; }\n } else {\n unzoom_z = (zmin === zmax) && (zmin === 0);\n }\n\n let changed = false,\n r_x = '', r_y = '', r_z = '', is_any_check = false,\n req = {\n _typename: 'ROOT::Experimental::RFrame::RUserRanges',\n values: [0, 0, 0, 0, 0, 0],\n flags: [false, false, false, false, false, false]\n };\n\n const checkZooming = (painter, force) => {\n if (!force && !isFunc(painter.canZoomInside)) return;\n\n is_any_check = true;\n\n if (zoom_x && (force || painter.canZoomInside('x', xmin, xmax))) {\n this.zoom_xmin = xmin;\n this.zoom_xmax = xmax;\n changed = true; r_x = '0';\n zoom_x = false;\n req.values[0] = xmin; req.values[1] = xmax;\n req.flags[0] = req.flags[1] = true;\n }\n if (zoom_y && (force || painter.canZoomInside('y', ymin, ymax))) {\n this.zoom_ymin = ymin;\n this.zoom_ymax = ymax;\n changed = true; r_y = '1';\n zoom_y = false;\n req.values[2] = ymin; req.values[3] = ymax;\n req.flags[2] = req.flags[3] = true;\n }\n if (zoom_z && (force || painter.canZoomInside('z', zmin, zmax))) {\n this.zoom_zmin = zmin;\n this.zoom_zmax = zmax;\n changed = true; r_z = '2';\n zoom_z = false;\n req.values[4] = zmin; req.values[5] = zmax;\n req.flags[4] = req.flags[5] = true;\n }\n };\n\n // first process zooming (if any)\n if (zoom_x || zoom_y || zoom_z)\n this.forEachPainter(painter => checkZooming(painter));\n\n // force zooming when no any other painter can verify zoom range\n if (!is_any_check && this.self_drawaxes)\n checkZooming(null, true);\n\n // and process unzoom, if any\n if (unzoom_x || unzoom_y || unzoom_z) {\n if (unzoom_x) {\n if (this.zoom_xmin !== this.zoom_xmax) { changed = true; r_x = '0'; }\n this.zoom_xmin = this.zoom_xmax = 0;\n req.values[0] = req.values[1] = -1;\n }\n if (unzoom_y) {\n if (this.zoom_ymin !== this.zoom_ymax) { changed = true; r_y = '1'; }\n this.zoom_ymin = this.zoom_ymax = 0;\n req.values[2] = req.values[3] = -1;\n }\n if (unzoom_z) {\n if (this.zoom_zmin !== this.zoom_zmax) { changed = true; r_z = '2'; }\n this.zoom_zmin = this.zoom_zmax = 0;\n req.values[4] = req.values[5] = -1;\n }\n }\n\n if (!changed) return false;\n\n if (this.v7NormalMode())\n this.v7SubmitRequest('zoom', { _typename: 'ROOT::Experimental::RFrame::RZoomRequest', ranges: req });\n\n return this.interactiveRedraw('pad', 'zoom' + r_x + r_y + r_z).then(() => true);\n }\n\n /** @summary Provide zooming of single axis\n * @desc One can specify names like x/y/z but also second axis x2 or y2 */\n async zoomSingle(name, vmin, vmax) {\n\n let names = ['x','y','z','x2','y2'], indx = names.indexOf(name);\n\n // disable zooming when axis conversion is enabled\n if (this.projection || !this[name+'_handle'] || (indx < 0))\n return false;\n\n let zoom_v = (vmin !== vmax), unzoom_v = false;\n\n if (zoom_v) {\n let cnt = 0;\n if (vmin <= this[name+'min']) { vmin = this[name+'min']; cnt++; }\n if (vmax >= this[name+'max']) { vmax = this[name+'max']; cnt++; }\n if (cnt === 2) { zoom_v = false; unzoom_v = true; }\n } else {\n unzoom_v = (vmin === vmax) && (vmin === 0);\n }\n\n let changed = false, is_any_check = false,\n req = {\n _typename: 'ROOT::Experimental::RFrame::RUserRanges',\n values: [0, 0, 0, 0, 0, 0, 0, 0, 0, 0],\n flags: [false, false, false, false, false, false, false, false, false, false]\n };\n\n let checkZooming = (painter, force) => {\n if (!force && !isFunc(painter?.canZoomInside)) return;\n\n is_any_check = true;\n\n if (zoom_v && (force || painter.canZoomInside(name[0], vmin, vmax))) {\n this['zoom_' + name + 'min'] = vmin;\n this['zoom_' + name + 'max'] = vmax;\n changed = true;\n zoom_v = false;\n req.values[indx*2] = vmin; req.values[indx*2+1] = vmax;\n req.flags[indx*2] = req.flags[indx*2+1] = true;\n }\n };\n\n // first process zooming (if any)\n if (zoom_v)\n this.forEachPainter(painter => checkZooming(painter));\n\n // force zooming when no any other painter can verify zoom range\n if (!is_any_check && this.self_drawaxes)\n checkZooming(null, true);\n\n if (unzoom_v) {\n if (this[`zoom_${name}min`] !== this[`zoom_${name}max`]) changed = true;\n this[`zoom_${name}min`] = this[`zoom_${name}max`] = 0;\n req.values[indx*2] = req.values[indx*2+1] = -1;\n }\n\n if (!changed) return false;\n\n if (this.v7NormalMode())\n this.v7SubmitRequest('zoom', { _typename: 'ROOT::Experimental::RFrame::RZoomRequest', ranges: req });\n\n return this.interactiveRedraw('pad', 'zoom' + indx).then(() => true);\n }\n\n /** @summary Checks if specified axis zoomed */\n isAxisZoomed(axis) {\n return this['zoom_'+axis+'min'] !== this['zoom_'+axis+'max'];\n }\n\n /** @summary Unzoom specified axes\n * @return {Promise} with boolean flag if zoom is changed */\n async unzoom(dox, doy, doz) {\n if (dox == 'all')\n return this.unzoom('x2').then(() => this.unzoom('y2')).then(() => this.unzoom('xyz'));\n\n if ((dox == 'x2') || (dox == 'y2'))\n return this.zoomSingle(dox, 0, 0).then(changed => {\n if (changed) this.zoomChangedInteractive(dox, 'unzoom');\n return changed;\n });\n\n if (typeof dox === 'undefined') { dox = doy = doz = true; } else\n if (isStr(dox)) { doz = dox.indexOf('z') >= 0; doy = dox.indexOf('y') >= 0; dox = dox.indexOf('x') >= 0; }\n\n return this.zoom(dox ? 0 : undefined, dox ? 0 : undefined,\n doy ? 0 : undefined, doy ? 0 : undefined,\n doz ? 0 : undefined, doz ? 0 : undefined).then(changed => {\n\n if (changed && dox) this.zoomChangedInteractive('x', 'unzoom');\n if (changed && doy) this.zoomChangedInteractive('y', 'unzoom');\n if (changed && doz) this.zoomChangedInteractive('z', 'unzoom');\n\n return changed;\n });\n }\n\n /** @summary Mark/check if zoom for specific axis was changed interactively\n * @private */\n zoomChangedInteractive(axis, value) {\n if (axis == 'reset') {\n this.zoom_changed_x = this.zoom_changed_y = this.zoom_changed_z = undefined;\n return;\n }\n if (!axis || axis == 'any')\n return this.zoom_changed_x || this.zoom_changed_y || this.zoom_changed_z;\n\n if ((axis !== 'x') && (axis !== 'y') && (axis !== 'z')) return;\n\n let fld = 'zoom_changed_' + axis;\n if (value === undefined) return this[fld];\n\n if (value === 'unzoom') {\n // special handling of unzoom, only if was never changed before flag set to true\n this[fld] = (this[fld] === undefined);\n return;\n }\n\n if (value) this[fld] = true;\n }\n\n /** @summary Fill menu for frame when server is not there */\n fillObjectOfflineMenu(menu, kind) {\n if ((kind != 'x') && (kind != 'y')) return;\n\n menu.add('Unzoom', () => this.unzoom(kind));\n\n //if (this[kind+'_kind'] == 'normal')\n // menu.addchk(this['log'+kind], 'SetLog'+kind, this.toggleAxisLog.bind(this, kind));\n\n // here should be all axes attributes in offline\n }\n\n /** @summary Set grid drawing for specified axis */\n changeFrameAttr(attr, value) {\n let changes = {};\n this.v7AttrChange(changes, attr, value);\n this.v7SetAttr(attr, value);\n this.v7SendAttrChanges(changes, false); // do not invoke canvas update on the server\n this.redrawPad();\n }\n\n /** @summary Fill context menu */\n fillContextMenu(menu, kind, /* obj */) {\n\n // when fill and show context menu, remove all zooming\n\n if ((kind == 'x') || (kind == 'y') || (kind == 'x2') || (kind == 'y2')) {\n let handle = this[kind+'_handle'];\n if (!handle) return false;\n menu.add('header: ' + kind.toUpperCase() + ' axis');\n return handle.fillAxisContextMenu(menu, kind);\n }\n\n let alone = menu.size() == 0;\n\n if (alone)\n menu.add('header:Frame');\n else\n menu.add('separator');\n\n if (this.zoom_xmin !== this.zoom_xmax)\n menu.add('Unzoom X', () => this.unzoom('x'));\n if (this.zoom_ymin !== this.zoom_ymax)\n menu.add('Unzoom Y', () => this.unzoom('y'));\n if (this.zoom_zmin !== this.zoom_zmax)\n menu.add('Unzoom Z', () => this.unzoom('z'));\n if (this.zoom_x2min !== this.zoom_x2max)\n menu.add('Unzoom X2', () => this.unzoom('x2'));\n if (this.zoom_y2min !== this.zoom_y2max)\n menu.add('Unzoom Y2', () => this.unzoom('y2'));\n menu.add('Unzoom all', () => this.unzoom('all'));\n\n menu.add('separator');\n\n menu.addchk(this.isTooltipAllowed(), 'Show tooltips', () => this.setTooltipAllowed('toggle'));\n\n if (this.x_handle)\n menu.addchk(this.x_handle.draw_grid, 'Grid x', flag => this.changeFrameAttr('gridX', flag));\n if (this.y_handle)\n menu.addchk(this.y_handle.draw_grid, 'Grid y', flag => this.changeFrameAttr('gridY', flag));\n if (this.x_handle && !this.x2_handle)\n menu.addchk(this.x_handle.draw_swapside, 'Swap x', flag => this.changeFrameAttr('swapX', flag));\n if (this.y_handle && !this.y2_handle)\n menu.addchk(this.y_handle.draw_swapside, 'Swap y', flag => this.changeFrameAttr('swapY', flag));\n if (this.x_handle && !this.x2_handle) {\n menu.add('sub:Ticks x');\n menu.addchk(this.x_handle.draw_ticks == 0, 'off', () => this.changeFrameAttr('ticksX', 0));\n menu.addchk(this.x_handle.draw_ticks == 1, 'normal', () => this.changeFrameAttr('ticksX', 1));\n menu.addchk(this.x_handle.draw_ticks == 2, 'ticks on both sides', () => this.changeFrameAttr('ticksX', 2));\n menu.addchk(this.x_handle.draw_ticks == 3, 'labels on both sides', () => this.changeFrameAttr('ticksX', 3));\n menu.add('endsub:');\n }\n if (this.y_handle && !this.y2_handle) {\n menu.add('sub:Ticks y');\n menu.addchk(this.y_handle.draw_ticks == 0, 'off', () => this.changeFrameAttr('ticksY', 0));\n menu.addchk(this.y_handle.draw_ticks == 1, 'normal', () => this.changeFrameAttr('ticksY', 1));\n menu.addchk(this.y_handle.draw_ticks == 2, 'ticks on both sides', () => this.changeFrameAttr('ticksY', 2));\n menu.addchk(this.y_handle.draw_ticks == 3, 'labels on both sides', () => this.changeFrameAttr('ticksY', 3));\n menu.add('endsub:');\n }\n\n menu.addAttributesMenu(this, alone ? '' : 'Frame ');\n menu.add('separator');\n menu.add('Save as frame.png', () => this.getPadPainter().saveAs('png', 'frame', 'frame.png'));\n menu.add('Save as frame.svg', () => this.getPadPainter().saveAs('svg', 'frame', 'frame.svg'));\n\n return true;\n }\n\n /** @summary Convert graphical coordinate into axis value */\n revertAxis(axis, pnt) {\n let handle = this[axis+'_handle'];\n return handle ? handle.revertPoint(pnt) : 0;\n }\n\n /** @summary Show axis status message\n * @desc method called normally when mouse enter main object element\n * @private */\n showAxisStatus(axis_name, evnt) {\n\n let taxis = null, hint_name = axis_name, hint_title = 'axis',\n m = d3_pointer(evnt, this.getFrameSvg().node()), id = (axis_name == 'x') ? 0 : 1;\n\n if (taxis) { hint_name = taxis.fName; hint_title = taxis.fTitle || 'axis object'; }\n\n if (this.swap_xy) id = 1-id;\n\n let axis_value = this.revertAxis(axis_name, m[id]);\n\n this.showObjectStatus(hint_name, hint_title, axis_name + ' : ' + this.axisAsText(axis_name, axis_value), Math.round(m[0]) + ',' + Math.round(m[1]));\n }\n\n /** @summary Add interactive keys handlers\n * @private */\n addKeysHandler() {\n if (isBatchMode()) return;\n FrameInteractive.assign(this);\n this.addFrameKeysHandler();\n }\n\n /** @summary Add interactive functionality to the frame\n * @private */\n addInteractivity(for_second_axes) {\n\n if (isBatchMode() || (!settings.Zooming && !settings.ContextMenu))\n return true;\n FrameInteractive.assign(this);\n return this.addFrameInteractivity(for_second_axes);\n }\n\n /** @summary Set selected range back to pad object - to be implemented\n * @private */\n setRootPadRange(/* pad, is3d */) {\n // TODO: change of pad range and send back to root application\n }\n\n /** @summary Toggle log scale on the specified axes */\n toggleAxisLog(axis) {\n let handle = this[axis+'_handle'];\n if (handle) handle.changeAxisLog('toggle');\n }\n\n} // class RFramePainter\n\nexport { RFramePainter };\n","import { gStyle, settings, constants, internals, addMethods,\n isPromise, getPromise, isBatchMode, isObject, isFunc, isStr, btoa_func, clTPad } from '../core.mjs';\nimport { pointer as d3_pointer } from '../d3.mjs';\nimport { ColorPalette, addColor, getRootColors } from '../base/colors.mjs';\nimport { RObjectPainter } from '../base/RObjectPainter.mjs';\nimport { getElementRect, getAbsPosInCanvas, DrawOptions, compressSVG } from '../base/BasePainter.mjs';\nimport { selectActivePad, getActivePad } from '../base/ObjectPainter.mjs';\nimport { registerForResize, saveFile } from '../gui/utils.mjs';\nimport { BrowserLayout } from '../gui/display.mjs';\nimport { createMenu, closeMenu } from '../gui/menu.mjs';\nimport { PadButtonsHandler } from './TPadPainter.mjs';\n\n\n/**\n * @summary Painter class for RPad\n *\n * @private\n */\n\nclass RPadPainter extends RObjectPainter {\n\n /** @summary constructor */\n constructor(dom, pad, iscan) {\n super(dom, pad, '', 'pad');\n this.pad = pad;\n this.iscan = iscan; // indicate if working with canvas\n this.this_pad_name = '';\n if (!this.iscan && (pad !== null)) {\n if (pad.fObjectID)\n this.this_pad_name = 'pad' + pad.fObjectID; // use objectid as padname\n else\n this.this_pad_name = 'ppp' + internals.id_counter++; // artificical name\n }\n this.painters = []; // complete list of all painters in the pad\n this.has_canvas = true;\n this.forEachPainter = this.forEachPainterInPad;\n }\n\n /** @summary Indicates that is not Root6 pad painter\n * @private */\n isRoot6() { return false; }\n\n /** @summary Returns SVG element for the pad itself\n * @private */\n svg_this_pad() {\n return this.getPadSvg(this.this_pad_name);\n }\n\n /** @summary Returns main painter on the pad\n * @desc Typically main painter is TH1/TH2 object which is drawing axes\n * @private */\n getMainPainter() {\n return this.main_painter_ref || null;\n }\n\n /** @summary Assign main painter on the pad\n * @private */\n setMainPainter(painter, force) {\n if (!this.main_painter_ref || force)\n this.main_painter_ref = painter;\n }\n\n /** @summary cleanup pad and all primitives inside */\n cleanup() {\n if (this._doing_draw)\n console.error('pad drawing is not completed when cleanup is called');\n\n this.painters.forEach(p => p.cleanup());\n\n let svg_p = this.svg_this_pad();\n if (!svg_p.empty()) {\n svg_p.property('pad_painter', null);\n if (!this.iscan) svg_p.remove();\n }\n\n delete this.main_painter_ref;\n delete this.frame_painter_ref;\n delete this.pads_cache;\n delete this._pad_x;\n delete this._pad_y;\n delete this._pad_width;\n delete this._pad_height;\n delete this._doing_draw;\n delete this._dfltRFont;\n\n this.painters = [];\n this.pad = null;\n this.draw_object = null;\n this.pad_frame = null;\n this.this_pad_name = undefined;\n this.has_canvas = false;\n\n selectActivePad({ pp: this, active: false });\n\n super.cleanup();\n }\n\n /** @summary Returns frame painter inside the pad\n * @private */\n getFramePainter() { return this.frame_painter_ref; }\n\n /** @summary get pad width */\n getPadWidth() { return this._pad_width || 0; }\n\n /** @summary get pad height */\n getPadHeight() { return this._pad_height || 0; }\n\n /** @summary get pad rect */\n getPadRect() {\n return {\n x: this._pad_x || 0,\n y: this._pad_y || 0,\n width: this.getPadWidth(),\n height: this.getPadHeight()\n }\n }\n\n /** @summary Returns frame coordiantes - also when frame is not drawn */\n getFrameRect() {\n let fp = this.getFramePainter();\n if (fp) return fp.getFrameRect();\n\n let w = this.getPadWidth(),\n h = this.getPadHeight(),\n rect = {};\n\n rect.szx = Math.round(0.5*w);\n rect.szy = Math.round(0.5*h);\n rect.width = 2*rect.szx;\n rect.height = 2*rect.szy;\n rect.x = Math.round(w/2 - rect.szx);\n rect.y = Math.round(h/2 - rect.szy);\n rect.hint_delta_x = rect.szx;\n rect.hint_delta_y = rect.szy;\n rect.transform = `translate(${rect.x},${rect.y})`;\n return rect;\n }\n\n /** @summary return RPad object */\n getRootPad(is_root6) {\n return (is_root6 === undefined) || !is_root6 ? this.pad : null;\n }\n\n /** @summary Cleanup primitives from pad - selector lets define which painters to remove\n * @private */\n cleanPrimitives(selector) {\n if (!isFunc(selector)) return;\n\n for (let k = this.painters.length-1; k >= 0; --k)\n if (selector(this.painters[k])) {\n this.painters[k].cleanup();\n this.painters.splice(k, 1);\n }\n }\n\n /** @summary Try to find painter for specified object\n * @desc can be used to find painter for some special objects, registered as\n * histogram functions\n * @private */\n findPainterFor(selobj, selname, seltype) {\n return this.painters.find(p => {\n let pobj = p.getObject();\n if (!pobj) return;\n\n if (selobj && (pobj === selobj)) return true;\n if (!selname && !seltype) return;\n if (selname && (pobj.fName !== selname)) return;\n if (seltype && (pobj._typename !== seltype)) return;\n return true;\n });\n }\n\n /** @summary Returns palette associated with pad.\n * @desc Either from existing palette painter or just default palette */\n getHistPalette() {\n let pp = this.findPainterFor(undefined, undefined, 'ROOT::Experimental::RPaletteDrawable');\n\n if (pp) return pp.getHistPalette();\n\n if (!this.fDfltPalette) {\n this.fDfltPalette = {\n _typename: 'ROOT::Experimental::RPalette',\n fColors: [{ fOrdinal: 0, fColor: { fColor: 'rgb(53, 42, 135)' } },\n { fOrdinal: 0.125, fColor: { fColor: 'rgb(15, 92, 221)' } },\n { fOrdinal: 0.25, fColor: { fColor: 'rgb(20, 129, 214)' } },\n { fOrdinal: 0.375, fColor: { fColor: 'rgb(6, 164, 202)' } },\n { fOrdinal: 0.5, fColor: { fColor: 'rgb(46, 183, 164)' } },\n { fOrdinal: 0.625, fColor: { fColor: 'rgb(135, 191, 119)' } },\n { fOrdinal: 0.75, fColor: { fColor: 'rgb(209, 187, 89)' } },\n { fOrdinal: 0.875, fColor: { fColor: 'rgb(254, 200, 50)' } },\n { fOrdinal: 1, fColor: { fColor: 'rgb(249, 251, 14)' } }],\n fInterpolate: true,\n fNormalized: true\n };\n addMethods(this.fDfltPalette, 'ROOT::Experimental::RPalette');\n }\n\n return this.fDfltPalette;\n }\n\n /** @summary Returns number of painters\n * @private */\n getNumPainters() { return this.painters.length; }\n\n /** @summary Call function for each painter in pad\n * @param {function} userfunc - function to call\n * @param {string} kind - 'all' for all objects (default), 'pads' only pads and subpads, 'objects' only for object in current pad\n * @private */\n forEachPainterInPad(userfunc, kind) {\n if (!kind) kind = 'all';\n if (kind != 'objects') userfunc(this);\n for (let k = 0; k < this.painters.length; ++k) {\n let sub = this.painters[k];\n if (isFunc(sub.forEachPainterInPad)) {\n if (kind!='objects') sub.forEachPainterInPad(userfunc, kind);\n } else if (kind != 'pads') userfunc(sub);\n }\n }\n\n /** @summary register for pad events receiver\n * @desc in pad painter, while pad may be drawn without canvas\n * @private */\n registerForPadEvents(receiver) {\n this.pad_events_receiver = receiver;\n }\n\n /** @summary Generate pad events, normally handled by GED\n * @desc in pad painter, while pad may be drawn without canvas\n * @private */\n producePadEvent(what, padpainter, painter, position, place) {\n if ((what == 'select') && isFunc(this.selectActivePad))\n this.selectActivePad(padpainter, painter, position);\n\n if (this.pad_events_receiver)\n this.pad_events_receiver({ what, padpainter, painter, position, place });\n }\n\n /** @summary method redirect call to pad events receiver */\n selectObjectPainter(painter, pos, place) {\n\n let istoppad = (this.iscan || !this.has_canvas),\n canp = istoppad ? this : this.getCanvPainter();\n\n if (painter === undefined) painter = this;\n\n if (pos && !istoppad)\n pos = getAbsPosInCanvas(this.svg_this_pad(), pos);\n\n selectActivePad({ pp: this, active: true });\n\n canp.producePadEvent('select', this, painter, pos, place);\n }\n\n /** @summary Create SVG element for the canvas */\n createCanvasSvg(check_resize, new_size) {\n\n let factor = null, svg = null, lmt = 5, rect = null, btns, frect;\n\n if (check_resize > 0) {\n\n if (this._fixed_size) return (check_resize > 1); // flag used to force re-drawing of all subpads\n\n svg = this.getCanvSvg();\n\n if (svg.empty()) return false;\n\n factor = svg.property('height_factor');\n\n rect = this.testMainResize(check_resize, null, factor);\n\n if (!rect.changed) return false;\n\n if (!isBatchMode())\n btns = this.getLayerSvg('btns_layer', this.this_pad_name);\n\n frect = svg.select('.canvas_fillrect');\n\n } else {\n\n let render_to = this.selectDom();\n\n if (render_to.style('position') == 'static')\n render_to.style('position', 'relative');\n\n svg = render_to.append('svg')\n .attr('class', 'jsroot root_canvas')\n .property('pad_painter', this) // this is custom property\n .property('current_pad', '') // this is custom property\n .property('redraw_by_resize', false); // could be enabled to force redraw by each resize\n\n this.setTopPainter(); //assign canvas as top painter of that element\n\n if (!isBatchMode() && !this.online_canvas)\n svg.append('svg:title').text('ROOT canvas');\n\n frect = svg.append('svg:path').attr('class','canvas_fillrect');\n if (!isBatchMode())\n frect.style('pointer-events', 'visibleFill')\n .on('dblclick', evnt => this.enlargePad(evnt))\n .on('click', () => this.selectObjectPainter(this, null))\n .on('mouseenter', () => this.showObjectStatus())\n .on('contextmenu', settings.ContextMenu ? evnt => this.padContextMenu(evnt) : null);\n\n svg.append('svg:g').attr('class', 'primitives_layer');\n svg.append('svg:g').attr('class', 'info_layer');\n if (!isBatchMode())\n btns = svg.append('svg:g')\n .attr('class','btns_layer')\n .property('leftside', settings.ToolBarSide == 'left')\n .property('vertical', settings.ToolBarVert);\n\n factor = 0.66;\n if (this.pad && this.pad.fWinSize[0] && this.pad.fWinSize[1]) {\n factor = this.pad.fWinSize[1] / this.pad.fWinSize[0];\n if ((factor < 0.1) || (factor > 10)) factor = 0.66;\n }\n\n if (this._fixed_size) {\n render_to.style('overflow','auto');\n rect = { width: this.pad.fWinSize[0], height: this.pad.fWinSize[1] };\n if (!rect.width || !rect.height)\n rect = getElementRect(render_to);\n } else {\n rect = this.testMainResize(2, new_size, factor);\n }\n }\n\n this.createAttFill({ pattern: 1001, color: 0 });\n\n if ((rect.width <= lmt) || (rect.height <= lmt)) {\n svg.style('display', 'none');\n console.warn(`Hide canvas while geometry too small w=${rect.width} h=${rect.height}`);\n rect.width = 200; rect.height = 100; // just to complete drawing\n } else {\n svg.style('display', null);\n }\n\n if (this._fixed_size) {\n svg.attr('x', 0)\n .attr('y', 0)\n .attr('width', rect.width)\n .attr('height', rect.height)\n .style('position', 'absolute');\n } else {\n svg.attr('x', 0)\n .attr('y', 0)\n .style('width', '100%')\n .style('height', '100%')\n .style('position', 'absolute')\n .style('left', 0)\n .style('top', 0)\n .style('right', 0)\n .style('bottom', 0);\n }\n\n svg.style('filter', settings.DarkMode ? 'invert(100%)' : null);\n\n svg.attr('viewBox', `0 0 ${rect.width} ${rect.height}`)\n .attr('preserveAspectRatio', 'none') // we do not preserve relative ratio\n .property('height_factor', factor)\n .property('draw_x', 0)\n .property('draw_y', 0)\n .property('draw_width', rect.width)\n .property('draw_height', rect.height);\n\n this._pad_x = 0;\n this._pad_y = 0;\n this._pad_width = rect.width;\n this._pad_height = rect.height;\n\n frect.attr('d', `M0,0H${rect.width}V${rect.height}H0Z`)\n .call(this.fillatt.func);\n\n this._fast_drawing = settings.SmallPad && ((rect.width < settings.SmallPad.width) || (rect.height < settings.SmallPad.height));\n\n if (this.alignButtons && btns)\n this.alignButtons(btns, rect.width, rect.height);\n\n return true;\n }\n\n /** @summary Draw item name on canvas, dummy for RPad\n * @private */\n drawItemNameOnCanvas() {\n }\n\n /** @summary Enlarge pad draw element when possible */\n enlargePad(evnt) {\n\n if (evnt) {\n evnt.preventDefault();\n evnt.stopPropagation();\n }\n\n let svg_can = this.getCanvSvg(),\n pad_enlarged = svg_can.property('pad_enlarged');\n\n if (this.iscan || !this.has_canvas || (!pad_enlarged && !this.hasObjectsToDraw() && !this.painters)) {\n if (this._fixed_size) return; // canvas cannot be enlarged in such mode\n if (!this.enlargeMain('toggle')) return;\n if (this.enlargeMain('state') == 'off') svg_can.property('pad_enlarged', null);\n } else if (!pad_enlarged) {\n this.enlargeMain(true, true);\n svg_can.property('pad_enlarged', this.pad);\n } else if (pad_enlarged === this.pad) {\n this.enlargeMain(false);\n svg_can.property('pad_enlarged', null);\n } else {\n console.error('missmatch with pad double click events');\n }\n\n let was_fast = this._fast_drawing;\n\n this.checkResize(true);\n\n if (this._fast_drawing != was_fast)\n this.showPadButtons();\n }\n\n /** @summary Create SVG element for the pad\n * @return true when pad is displayed and all its items should be redrawn */\n createPadSvg(only_resize) {\n\n if (!this.has_canvas) {\n this.createCanvasSvg(only_resize ? 2 : 0);\n return true;\n }\n\n let svg_parent = this.getPadSvg(this.pad_name), // this.pad_name MUST be here to select parent pad\n svg_can = this.getCanvSvg(),\n width = svg_parent.property('draw_width'),\n height = svg_parent.property('draw_height'),\n pad_enlarged = svg_can.property('pad_enlarged'),\n pad_visible = true,\n w = width, h = height, x = 0, y = 0,\n svg_pad = null, svg_rect = null, btns = null;\n\n if (this.pad && this.pad.fPos && this.pad.fSize) {\n x = Math.round(width * this.pad.fPos.fHoriz.fArr[0]);\n y = Math.round(height * this.pad.fPos.fVert.fArr[0]);\n w = Math.round(width * this.pad.fSize.fHoriz.fArr[0]);\n h = Math.round(height * this.pad.fSize.fVert.fArr[0]);\n }\n\n if (pad_enlarged) {\n pad_visible = false;\n if (pad_enlarged === this.pad)\n pad_visible = true;\n else\n this.forEachPainterInPad(pp => { if (pp.getObject() == pad_enlarged) pad_visible = true; }, 'pads');\n\n if (pad_visible) { w = width; h = height; x = y = 0; }\n }\n\n if (only_resize) {\n svg_pad = this.svg_this_pad();\n svg_rect = svg_pad.select('.root_pad_border');\n if (!isBatchMode())\n btns = this.getLayerSvg('btns_layer', this.this_pad_name);\n } else {\n svg_pad = svg_parent.select('.primitives_layer')\n .append('svg:svg') // here was g before, svg used to blend all drawin outside\n .classed('__root_pad_' + this.this_pad_name, true)\n .attr('pad', this.this_pad_name) // set extra attribute to mark pad name\n .property('pad_painter', this); // this is custom property\n\n if (!isBatchMode())\n svg_pad.append('svg:title').text('ROOT subpad');\n\n svg_rect = svg_pad.append('svg:path').attr('class', 'root_pad_border');\n\n svg_pad.append('svg:g').attr('class','primitives_layer');\n if (!isBatchMode())\n btns = svg_pad.append('svg:g')\n .attr('class','btns_layer')\n .property('leftside', settings.ToolBarSide != 'left')\n .property('vertical', settings.ToolBarVert);\n\n if (settings.ContextMenu)\n svg_rect.on('contextmenu', evnt => this.padContextMenu(evnt));\n\n if (!isBatchMode())\n svg_rect.style('pointer-events', 'visibleFill') // get events also for not visible rect\n .on('dblclick', evnt => this.enlargePad(evnt))\n .on('click', () => this.selectObjectPainter(this, null))\n .on('mouseenter', () => this.showObjectStatus());\n }\n\n this.createAttFill({ attr: this.pad });\n\n this.createAttLine({ attr: this.pad, color0: this.pad.fBorderMode == 0 ? 'none' : '' });\n\n svg_pad.style('display', pad_visible ? null : 'none')\n .attr('viewBox', `0 0 ${w} ${h}`) // due to svg\n .attr('preserveAspectRatio', 'none') // due to svg, we do not preserve relative ratio\n .attr('x', x) // due to svg\n .attr('y', y) // due to svg\n .attr('width', w) // due to svg\n .attr('height', h) // due to svg\n .property('draw_x', x) // this is to make similar with canvas\n .property('draw_y', y)\n .property('draw_width', w)\n .property('draw_height', h);\n\n this._pad_x = x;\n this._pad_y = y;\n this._pad_width = w;\n this._pad_height = h;\n\n svg_rect.attr('d', `M0,0H${w}V${h}H0Z`)\n .call(this.fillatt.func)\n .call(this.lineatt.func);\n\n this._fast_drawing = settings.SmallPad && ((w < settings.SmallPad.width) || (h < settings.SmallPad.height));\n\n // special case of 3D canvas overlay\n if (svg_pad.property('can3d') === constants.Embed3D.Overlay)\n this.selectDom().select('.draw3d_' + this.this_pad_name)\n .style('display', pad_visible ? '' : 'none');\n\n if (this.alignButtons && btns) this.alignButtons(btns, w, h);\n\n return pad_visible;\n }\n\n /** @summary returns true if any objects beside sub-pads exists in the pad */\n hasObjectsToDraw() {\n let arr = this.pad ? this.pad.fPrimitives : null;\n return arr && arr.find(obj => obj._typename != 'ROOT::Experimental::RPadDisplayItem') ? true : false;\n }\n\n /** @summary sync drawing/redrawing/resize of the pad\n * @param {string} kind - kind of draw operation, if true - always queued\n * @return {Promise} when pad is ready for draw operation or false if operation already queued\n * @private */\n syncDraw(kind) {\n let entry = { kind : kind || 'redraw' };\n if (this._doing_draw === undefined) {\n this._doing_draw = [ entry ];\n return Promise.resolve(true);\n }\n // if queued operation registered, ignore next calls, indx == 0 is running operation\n if ((entry.kind !== true) && (this._doing_draw.findIndex((e,i) => (i > 0) && (e.kind == entry.kind)) > 0))\n return false;\n this._doing_draw.push(entry);\n return new Promise(resolveFunc => {\n entry.func = resolveFunc;\n });\n }\n\n /** @summary confirms that drawing is completed, may trigger next drawing immediately\n * @private */\n confirmDraw() {\n if (this._doing_draw === undefined)\n return console.warn('failure, should not happen');\n this._doing_draw.shift();\n if (this._doing_draw.length == 0) {\n delete this._doing_draw;\n } else {\n let entry = this._doing_draw[0];\n if(entry.func) { entry.func(); delete entry.func; }\n }\n }\n\n /** @summary Draw single primitive */\n async drawObject(/*dom, obj, opt*/) {\n console.log('Not possible to draw object without loading of draw.mjs');\n return null;\n }\n\n /** @summary Draw pad primitives\n * @private */\n async drawPrimitives(indx) {\n\n if (indx === undefined) {\n if (this.iscan)\n this._start_tm = new Date().getTime();\n\n // set number of primitves\n this._num_primitives = this.pad && this.pad.fPrimitives ? this.pad.fPrimitives.length : 0;\n\n return this.syncDraw(true).then(() => this.drawPrimitives(0));\n }\n\n if (!this.pad || (indx >= this._num_primitives)) {\n\n this.confirmDraw();\n\n if (this._start_tm) {\n let spenttm = new Date().getTime() - this._start_tm;\n if (spenttm > 3000) console.log(`Canvas drawing took ${(spenttm*1e-3).toFixed(2)}s`);\n delete this._start_tm;\n }\n\n return;\n }\n\n // handle used to invoke callback only when necessary\n return this.drawObject(this.getDom(), this.pad.fPrimitives[indx], '').then(ppainter => {\n // mark painter as belonging to primitives\n if (isObject(ppainter))\n ppainter._primitive = true;\n\n return this.drawPrimitives(indx+1);\n });\n }\n\n /** @summary Process tooltip event in the pad\n * @private */\n processPadTooltipEvent(pnt) {\n let painters = [], hints = [];\n\n // first count - how many processors are there\n if (this.painters !== null)\n this.painters.forEach(obj => {\n if (isFunc(obj.processTooltipEvent)) painters.push(obj);\n });\n\n if (pnt) pnt.nproc = painters.length;\n\n painters.forEach(obj => {\n let hint = obj.processTooltipEvent(pnt);\n if (!hint) hint = { user_info: null };\n hints.push(hint);\n if (pnt && pnt.painters) hint.painter = obj;\n });\n\n return hints;\n }\n\n /** @summary Changes canvas dark mode\n * @private */\n changeDarkMode(mode) {\n this.getCanvSvg().style('filter', (mode ?? settings.DarkMode) ? 'invert(100%)' : null);\n }\n\n /** @summary Fill pad context menu\n * @private */\n fillContextMenu(menu) {\n\n if (this.iscan)\n menu.add('header: RCanvas');\n else\n menu.add('header: RPad');\n\n menu.addchk(this.isTooltipAllowed(), 'Show tooltips', () => this.setTooltipAllowed('toggle'));\n\n if (!this._websocket) {\n menu.addAttributesMenu(this);\n if (this.iscan)\n menu.addSettingsMenu(false, false, arg => {\n if (arg == 'dark') this.changeDarkMode();\n });\n }\n\n menu.add('separator');\n\n if (isFunc(this.hasMenuBar) && isFunc(this.actiavteMenuBar))\n menu.addchk(this.hasMenuBar(), 'Menu bar', flag => this.actiavteMenuBar(flag));\n\n if (isFunc(this.hasEventStatus) && isFunc(this.activateStatusBar))\n menu.addchk(this.hasEventStatus(), 'Event status', () => this.activateStatusBar('toggle'));\n\n if (this.enlargeMain() || (this.has_canvas && this.hasObjectsToDraw()))\n menu.addchk((this.enlargeMain('state') == 'on'), 'Enlarge ' + (this.iscan ? 'canvas' : 'pad'), () => this.enlargePad());\n\n let fname = this.this_pad_name || (this.iscan ? 'canvas' : 'pad');\n menu.add(`Save as ${fname}.png`, fname+'.png', arg => this.saveAs('png', false, arg));\n menu.add(`Save as ${fname}.svg`, fname+'.svg', arg => this.saveAs('svg', false, arg));\n\n return true;\n }\n\n /** @summary Show pad context menu\n * @private */\n padContextMenu(evnt) {\n if (evnt.stopPropagation) {\n let pos = d3_pointer(evnt, this.svg_this_pad().node());\n // this is normal event processing and not emulated jsroot event\n // for debug purposes keep original context menu for small region in top-left corner\n if ((pos.length==2) && (pos[0] >= 0) && (pos[0] < 10) && (pos[1] >= 0) && (pos[1] < 10)) return;\n\n evnt.stopPropagation(); // disable main context menu\n evnt.preventDefault(); // disable browser context menu\n\n this.getFramePainter()?.setLastEventPos();\n }\n\n createMenu(evnt, this).then(menu => {\n this.fillContextMenu(menu);\n return this.fillObjectExecMenu(menu);\n }).then(menu => menu.show());\n }\n\n /** @summary Redraw pad means redraw ourself\n * @return {Promise} when redrawing ready */\n async redrawPad(reason) {\n\n let sync_promise = this.syncDraw(reason);\n if (sync_promise === false) {\n console.log('Prevent RPad redrawing');\n return false;\n }\n\n let showsubitems = true;\n let redrawNext = indx => {\n while (indx < this.painters.length) {\n let sub = this.painters[indx++], res = 0;\n if (showsubitems || sub.this_pad_name)\n res = sub.redraw(reason);\n\n if (isPromise(res))\n return res.then(() => redrawNext(indx));\n }\n return true;\n };\n\n return sync_promise.then(() => {\n if (this.iscan) {\n this.createCanvasSvg(2);\n } else {\n showsubitems = this.createPadSvg(true);\n }\n return redrawNext(0);\n }).then(() => {\n if (getActivePad() === this)\n this.getCanvPainter()?.producePadEvent('padredraw', this);\n this.confirmDraw();\n return true;\n });\n }\n\n /** @summary redraw pad */\n redraw(reason) {\n return this.redrawPad(reason);\n }\n\n\n /** @summary Checks if pad should be redrawn by resize\n * @private */\n needRedrawByResize() {\n let elem = this.svg_this_pad();\n if (!elem.empty() && elem.property('can3d') === constants.Embed3D.Overlay) return true;\n\n for (let i = 0; i < this.painters.length; ++i)\n if (isFunc(this.painters[i].needRedrawByResize))\n if (this.painters[i].needRedrawByResize()) return true;\n\n return false;\n }\n\n /** @summary Check resize of canvas */\n checkCanvasResize(size, force) {\n\n if (!this.iscan && this.has_canvas) return false;\n\n let sync_promise = this.syncDraw('canvas_resize');\n if (sync_promise === false) return false;\n\n if ((size === true) || (size === false)) { force = size; size = null; }\n\n if (isObject(size) && size.force) force = true;\n\n if (!force) force = this.needRedrawByResize();\n\n let changed = false,\n redrawNext = indx => {\n if (!changed || (indx >= this.painters.length)) {\n this.confirmDraw();\n return changed;\n }\n\n return getPromise(this.painters[indx].redraw(force ? 'redraw' : 'resize')).then(() => redrawNext(indx+1));\n };\n\n return sync_promise.then(() => {\n\n changed = this.createCanvasSvg(force ? 2 : 1, size);\n\n // if canvas changed, redraw all its subitems.\n // If redrawing was forced for canvas, same applied for sub-elements\n return redrawNext(0);\n });\n }\n\n /** @summary update RPad object\n * @private */\n updateObject(obj) {\n if (!obj) return false;\n\n this.pad.fStyle = obj.fStyle;\n this.pad.fAttr = obj.fAttr;\n\n if (this.iscan) {\n this.pad.fTitle = obj.fTitle;\n this.pad.fWinSize = obj.fWinSize;\n } else {\n this.pad.fPos = obj.fPos;\n this.pad.fSize = obj.fSize;\n }\n\n return true;\n }\n\n\n /** @summary Add object painter to list of primitives\n * @private */\n addObjectPainter(objpainter, lst, indx) {\n if (objpainter && lst && lst[indx] && (objpainter.snapid === undefined)) {\n // keep snap id in painter, will be used for the\n if (this.painters.indexOf(objpainter) < 0)\n this.painters.push(objpainter);\n objpainter.assignSnapId(lst[indx].fObjectID);\n if (!objpainter.rstyle) objpainter.rstyle = lst[indx].fStyle || this.rstyle;\n }\n }\n\n /** @summary Extract properties from TObjectDisplayItem */\n extractTObjectProp(snap) {\n if (snap.fColIndex && snap.fColValue) {\n let colors = this.root_colors || getRootColors();\n for (let k = 0; k < snap.fColIndex.length; ++k)\n colors[snap.fColIndex[k]] = snap.fColValue[k];\n }\n\n // painter used only for evaluation of attributes\n let pattr = new RObjectPainter(), obj = snap.fObject;\n pattr.assignObject(snap);\n pattr.csstype = snap.fCssType;\n pattr.rstyle = snap.fStyle;\n\n snap.fOption = pattr.v7EvalAttr('options', '');\n\n const extract_color = (member_name, attr_name) => {\n let col = pattr.v7EvalColor(attr_name, '');\n if (col) obj[member_name] = addColor(col, this.root_colors);\n };\n\n // handle TAttLine\n if ((obj.fLineColor !== undefined) && (obj.fLineWidth !== undefined) && (obj.fLineStyle !== undefined)) {\n extract_color('fLineColor', 'line_color');\n obj.fLineWidth = pattr.v7EvalAttr('line_width', obj.fLineWidth);\n obj.fLineStyle = pattr.v7EvalAttr('line_style', obj.fLineStyle);\n }\n\n // handle TAttFill\n if ((obj.fFillColor !== undefined) && (obj.fFillStyle !== undefined)) {\n extract_color('fFillColor', 'fill_color');\n obj.fFillStyle = pattr.v7EvalAttr('fill_style', obj.fFillStyle);\n }\n\n // handle TAttMarker\n if ((obj.fMarkerColor !== undefined) && (obj.fMarkerStyle !== undefined) && (obj.fMarkerSize !== undefined)) {\n extract_color('fMarkerColor', 'marker_color');\n obj.fMarkerStyle = pattr.v7EvalAttr('marker_style', obj.fMarkerStyle);\n obj.fMarkerSize = pattr.v7EvalAttr('marker_size', obj.fMarkerSize);\n }\n\n // handle TAttText\n if ((obj.fTextColor !== undefined) && (obj.fTextAlign !== undefined) && (obj.fTextAngle !== undefined) && (obj.fTextSize !== undefined)) {\n extract_color('fTextColor', 'text_color');\n obj.fTextAlign = pattr.v7EvalAttr('text_align', obj.fTextAlign);\n obj.fTextAngle = pattr.v7EvalAttr('text_angle', obj.fTextAngle);\n obj.fTextSize = pattr.v7EvalAttr('text_size', obj.fTextSize);\n // TODO: v7 font handling differs much from v6, ignore for the moment\n }\n }\n\n /** @summary Function called when drawing next snapshot from the list\n * @return {Promise} with pad painter when ready\n * @private */\n async drawNextSnap(lst, indx) {\n\n if (indx === undefined) {\n indx = -1;\n // flag used to prevent immediate pad redraw during first draw\n this._snaps_map = {}; // to control how much snaps are drawn\n this._num_primitives = lst ? lst.length : 0;\n this._auto_color_cnt = 0;\n }\n\n delete this.next_rstyle;\n\n ++indx; // change to the next snap\n\n if (!lst || indx >= lst.length) {\n delete this._snaps_map;\n delete this._auto_color_cnt;\n return this;\n }\n\n let snap = lst[indx],\n snapid = snap.fObjectID,\n cnt = this._snaps_map[snapid],\n objpainter = null;\n\n if (cnt) cnt++; else cnt=1;\n this._snaps_map[snapid] = cnt; // check how many objects with same snapid drawn, use them again\n\n // empty object, no need to do something, take next\n if (snap.fDummy) return this.drawNextSnap(lst, indx);\n\n // first appropriate painter for the object\n // if same object drawn twice, two painters will exists\n for (let k = 0; k < this.painters.length; ++k) {\n if (this.painters[k].snapid === snapid)\n if (--cnt === 0) { objpainter = this.painters[k]; break; }\n }\n\n if (objpainter) {\n\n if (snap._typename == 'ROOT::Experimental::RPadDisplayItem') // subpad\n return objpainter.redrawPadSnap(snap).then(ppainter => {\n this.addObjectPainter(ppainter, lst, indx);\n return this.drawNextSnap(lst, indx);\n });\n\n if (snap._typename === 'ROOT::Experimental::TObjectDisplayItem')\n this.extractTObjectProp(snap);\n\n let promise;\n\n if (objpainter.updateObject(snap.fDrawable || snap.fObject || snap, snap.fOption || '', true))\n promise = objpainter.redraw();\n\n return getPromise(promise).then(() => this.drawNextSnap(lst, indx)); // call next\n }\n\n if (snap._typename == 'ROOT::Experimental::RPadDisplayItem') { // subpad\n\n let subpad = snap; // not subpad, but just attributes\n\n let padpainter = new RPadPainter(this.getDom(), subpad, false);\n padpainter.decodeOptions('');\n padpainter.addToPadPrimitives(this.this_pad_name); // only set parent pad name\n padpainter.assignSnapId(snap.fObjectID);\n padpainter.rstyle = snap.fStyle;\n\n padpainter.createPadSvg();\n\n if (snap.fPrimitives && snap.fPrimitives.length > 0)\n padpainter.addPadButtons();\n\n // we select current pad, where all drawing is performed\n let prev_name = padpainter.selectCurrentPad(padpainter.this_pad_name);\n\n return padpainter.drawNextSnap(snap.fPrimitives).then(() => {\n padpainter.selectCurrentPad(prev_name);\n return this.drawNextSnap(lst, indx);\n });\n }\n\n // will be used in addToPadPrimitives to assign style to sub-painters\n this.next_rstyle = lst[indx].fStyle || this.rstyle;\n\n if (snap._typename === 'ROOT::Experimental::TObjectDisplayItem') {\n\n // identifier used in RObjectDrawable\n const webSnapIds = { kNone: 0, kObject: 1, kColors: 4, kStyle: 5, kPalette: 6 };\n\n if (snap.fKind == webSnapIds.kStyle) {\n Object.assign(gStyle, snap.fObject);\n return this.drawNextSnap(lst, indx);\n }\n\n if (snap.fKind == webSnapIds.kColors) {\n let ListOfColors = [], arr = snap.fObject.arr;\n for (let n = 0; n < arr.length; ++n) {\n let name = arr[n].fString, p = name.indexOf('=');\n if (p > 0)\n ListOfColors[parseInt(name.slice(0,p))] = name.slice(p+1);\n }\n\n this.root_colors = ListOfColors;\n // set global list of colors\n // adoptRootColors(ListOfColors);\n return this.drawNextSnap(lst, indx);\n }\n\n if (snap.fKind == webSnapIds.kPalette) {\n let arr = snap.fObject.arr, palette = [];\n for (let n = 0; n < arr.length; ++n)\n palette[n] = arr[n].fString;\n this.custom_palette = new ColorPalette(palette);\n return this.drawNextSnap(lst, indx);\n }\n\n if (!this.getFramePainter())\n return this.drawObject(this.getDom(), { _typename: 'TFrame', $dummy: true }, '')\n .then(() => this.drawNextSnap(lst, indx-1)); // call same object again\n\n this.extractTObjectProp(snap);\n }\n\n // TODO - fDrawable is v7, fObject from v6, maybe use same data member?\n return this.drawObject(this.getDom(), snap.fDrawable || snap.fObject || snap, snap.fOption || '').then(objpainter => {\n this.addObjectPainter(objpainter, lst, indx);\n return this.drawNextSnap(lst, indx);\n });\n }\n\n /** @summary Search painter with specified snapid, also sub-pads are checked\n * @private */\n findSnap(snapid, onlyid) {\n\n function check(checkid) {\n if (!checkid || !isStr(checkid)) return false;\n if (checkid == snapid) return true;\n return onlyid && (checkid.length > snapid.length) &&\n (checkid.indexOf(snapid) == (checkid.length - snapid.length));\n }\n\n if (check(this.snapid)) return this;\n\n if (!this.painters) return null;\n\n for (let k=0;k {\n if (sub && (prim.fObjectID === sub.snapid)) {\n sub = null; isanyfound = true;\n }\n });\n\n if (sub) {\n // remove painter which does not found in the list of snaps\n this.painters.splice(k--,1);\n sub.cleanup(); // cleanup such painter\n isanyremove = true;\n if (this.main_painter_ref === sub)\n delete this.main_painter_ref;\n }\n }\n\n if (isanyremove)\n delete this.pads_cache;\n\n if (!isanyfound) {\n let fp = this.getFramePainter();\n // cannot preserve ROOT6 frame - it must be recreated\n if (fp?.is_root6()) fp = null;\n for (let k = 0; k < this.painters.length; ++k)\n if (fp !== this.painters[k])\n this.painters[k].cleanup();\n this.painters = [];\n delete this.main_painter_ref;\n if (fp) {\n this.painters.push(fp);\n fp.cleanFrameDrawings();\n fp.redraw(); // need to create all layers again\n }\n if (this.removePadButtons) this.removePadButtons();\n this.addPadButtons(true);\n }\n\n let prev_name = this.selectCurrentPad(this.this_pad_name);\n\n return this.drawNextSnap(snap.fPrimitives).then(() => {\n this.selectCurrentPad(prev_name);\n\n if (getActivePad() === this)\n this.getCanvPainter()?.producePadEvent('padredraw', this);\n return this;\n });\n }\n\n /** @summary Create image for the pad\n * @desc Used with web-based canvas to create images for server side\n * @return {Promise} with image data, coded with btoa() function\n * @private */\n async createImage(format) {\n // use https://github.com/MrRio/jsPDF in the future here\n if (format == 'pdf')\n return btoa_func('dummy PDF file');\n\n if ((format == 'png') || (format == 'jpeg') || (format == 'svg'))\n return this.produceImage(true, format).then(res => {\n if (!res || (format == 'svg')) return res;\n let separ = res.indexOf('base64,');\n return (separ > 0) ? res.slice(separ+7) : '';\n });\n\n return '';\n }\n\n /** @summary Show context menu for specified item\n * @private */\n itemContextMenu(name) {\n let rrr = this.svg_this_pad().node().getBoundingClientRect(),\n evnt = { clientX: rrr.left+10, clientY: rrr.top + 10 };\n\n // use timeout to avoid conflict with mouse click and automatic menu close\n if (name == 'pad')\n return setTimeout(() => this.padContextMenu(evnt), 50);\n\n let selp = null, selkind;\n\n switch(name) {\n case 'xaxis':\n case 'yaxis':\n case 'zaxis':\n selp = this.getMainPainter();\n selkind = name[0];\n break;\n case 'frame':\n selp = this.getFramePainter();\n break;\n default: {\n let indx = parseInt(name);\n if (Number.isInteger(indx)) selp = this.painters[indx];\n }\n }\n\n if (!isFunc(selp?.fillContextMenu)) return;\n\n createMenu(evnt, selp).then(menu => {\n if (selp.fillContextMenu(menu, selkind))\n selp.fillObjectExecMenu(menu, selkind).then(() => setTimeout(() => menu.show(), 50));\n });\n }\n\n /** @summary Save pad in specified format\n * @desc Used from context menu */\n saveAs(kind, full_canvas, filename) {\n if (!filename)\n filename = (this.this_pad_name || (this.iscan ? 'canvas' : 'pad')) + '.' + kind;\n\n this.produceImage(full_canvas, kind).then(imgdata => {\n if (!imgdata)\n return console.error(`Fail to produce image ${filename}`);\n\n saveFile(filename, (kind != 'svg') ? imgdata : 'data:image/svg+xml;charset=utf-8,'+encodeURIComponent(imgdata));\n });\n }\n\n /** @summary Search active pad\n * @return {Object} pad painter for active pad */\n findActivePad() {\n return null;\n }\n\n /** @summary Prodce image for the pad\n * @return {Promise} with created image */\n async produceImage(full_canvas, file_format) {\n\n let use_frame = (full_canvas === 'frame'),\n elem = use_frame ? this.getFrameSvg(this.this_pad_name) : (full_canvas ? this.getCanvSvg() : this.svg_this_pad()),\n painter = (full_canvas && !use_frame) ? this.getCanvPainter() : this,\n items = []; // keep list of replaced elements, which should be moved back at the end\n\n if (elem.empty())\n return '';\n\n if (!use_frame) // do not make transformations for the frame\n painter.forEachPainterInPad(pp => {\n\n let item = { prnt: pp.svg_this_pad() };\n items.push(item);\n\n // remove buttons from each subpad\n let btns = pp.getLayerSvg('btns_layer', this.this_pad_name);\n item.btns_node = btns.node();\n if (item.btns_node) {\n item.btns_prnt = item.btns_node.parentNode;\n item.btns_next = item.btns_node.nextSibling;\n btns.remove();\n }\n\n let main = pp.getFramePainter();\n if (!main || !isFunc(main.render3D) || !isFunc(main.access3dKind)) return;\n\n let can3d = main.access3dKind();\n\n if ((can3d !== constants.Embed3D.Overlay) && (can3d !== constants.Embed3D.Embed)) return;\n\n let sz2 = main.getSizeFor3d(constants.Embed3D.Embed), // get size and position of DOM element as it will be embed\n canvas = main.renderer.domElement;\n\n main.render3D(0); // WebGL clears buffers, therefore we should render scene and convert immediately\n\n let dataUrl = canvas.toDataURL('image/png');\n\n // remove 3D drawings\n\n if (can3d === constants.Embed3D.Embed) {\n item.foreign = item.prnt.select('.' + sz2.clname);\n item.foreign.remove();\n }\n\n let svg_frame = main.getFrameSvg();\n item.frame_node = svg_frame.node();\n if (item.frame_node) {\n item.frame_next = item.frame_node.nextSibling;\n svg_frame.remove();\n }\n\n // add svg image\n item.img = item.prnt.insert('image','.primitives_layer') // create image object\n .attr('x', sz2.x)\n .attr('y', sz2.y)\n .attr('width', canvas.width)\n .attr('height', canvas.height)\n .attr('href', dataUrl);\n\n }, 'pads');\n\n const reEncode = data => {\n data = encodeURIComponent(data);\n data = data.replace(/%([0-9A-F]{2})/g, function(match, p1) {\n let c = String.fromCharCode('0x'+p1);\n return c === '%' ? '%25' : c;\n });\n return decodeURIComponent(data);\n }, reconstruct = () => {\n for (let k = 0; k < items.length; ++k) {\n let item = items[k];\n\n if (item.img)\n item.img.remove(); // delete embed image\n\n let prim = item.prnt.select('.primitives_layer');\n\n if (item.foreign) // reinsert foreign object\n item.prnt.node().insertBefore(item.foreign.node(), prim.node());\n\n if (item.frame_node) // reinsert frame as first in list of primitives\n prim.node().insertBefore(item.frame_node, item.frame_next);\n\n if (item.btns_node) // reinsert buttons\n item.btns_prnt.insertBefore(item.btns_node, item.btns_next);\n }\n };\n\n let width = elem.property('draw_width'), height = elem.property('draw_height');\n if (use_frame) {\n let fp = this.getFramePainter();\n width = fp.getFrameWidth();\n height = fp.getFrameHeight();\n }\n\n let svg = `${elem.node().innerHTML}`;\n\n if (internals.processSvgWorkarounds)\n svg = internals.processSvgWorkarounds(svg);\n\n svg = compressSVG(svg);\n\n if (file_format == 'svg') {\n reconstruct();\n return svg; // return SVG file as is\n }\n\n let doctype = '',\n image = new Image();\n\n return new Promise(resolveFunc => {\n image.onload = function() {\n let canvas = document.createElement('canvas');\n canvas.width = image.width;\n canvas.height = image.height;\n let context = canvas.getContext('2d');\n context.drawImage(image, 0, 0);\n\n reconstruct();\n\n resolveFunc(canvas.toDataURL('image/' + file_format));\n }\n\n image.onerror = function(arg) {\n console.log(`IMAGE ERROR ${arg}`);\n reconstruct();\n resolveFunc(null);\n }\n\n image.src = 'data:image/svg+xml;base64,' + btoa_func(reEncode(doctype + svg));\n });\n }\n\n /** @summary Process pad button click */\n clickPadButton(funcname, evnt) {\n\n if (funcname == 'CanvasSnapShot')\n return this.saveAs('png', true);\n\n if (funcname == 'enlargePad')\n return this.enlargePad();\n\n if (funcname == 'PadSnapShot')\n return this.saveAs('png', false);\n\n if (funcname == 'PadContextMenus') {\n\n if (evnt) {\n evnt.preventDefault();\n evnt.stopPropagation();\n }\n\n if (closeMenu()) return;\n\n createMenu(evnt, this).then(menu => {\n menu.add('header:Menus');\n\n if (this.iscan)\n menu.add('Canvas', 'pad', this.itemContextMenu);\n else\n menu.add('Pad', 'pad', this.itemContextMenu);\n\n if (this.getFramePainter())\n menu.add('Frame', 'frame', this.itemContextMenu);\n\n let main = this.getMainPainter(); // here hist painter methods\n\n if (main) {\n menu.add('X axis', 'xaxis', this.itemContextMenu);\n menu.add('Y axis', 'yaxis', this.itemContextMenu);\n if (isFunc(main.getDimension) && (main.getDimension() > 1))\n menu.add('Z axis', 'zaxis', this.itemContextMenu);\n }\n\n if (this.painters?.length) {\n menu.add('separator');\n let shown = [];\n for (let n = 0; n < this.painters.length; ++n) {\n let obj = this.painters[n]?.getObject();\n if (!obj || (shown.indexOf(obj) >= 0)) continue;\n\n let name = obj._typename ? obj._typename + '::' : '';\n if (obj.fName) name += obj.fName;\n if (!name) name = 'item' + n;\n menu.add(name, n, this.itemContextMenu);\n }\n }\n\n menu.show();\n });\n\n return;\n }\n\n // click automatically goes to all sub-pads\n // if any painter indicates that processing completed, it returns true\n let done = false;\n\n for (let i = 0; i < this.painters.length; ++i) {\n let pp = this.painters[i];\n\n if (isFunc(pp.clickPadButton))\n pp.clickPadButton(funcname);\n\n if (!done && isFunc(pp.clickButton))\n done = pp.clickButton(funcname);\n }\n }\n\n /** @summary Add button to the pad\n * @private */\n addPadButton(btn, tooltip, funcname, keyname) {\n if (!settings.ToolBar || isBatchMode() || this.batch_mode) return;\n\n if (!this._buttons) this._buttons = [];\n // check if there are duplications\n\n for (let k = 0; k < this._buttons.length; ++k)\n if (this._buttons[k].funcname == funcname) return;\n\n this._buttons.push({ btn, tooltip, funcname, keyname });\n\n let iscan = this.iscan || !this.has_canvas;\n if (!iscan && (funcname.indexOf('Pad') != 0) && (funcname !== 'enlargePad')) {\n let cp = this.getCanvPainter();\n if (cp && (cp !== this)) cp.addPadButton(btn, tooltip, funcname);\n }\n }\n\n /** @summary Add buttons for pad or canvas\n * @private */\n addPadButtons(is_online) {\n\n this.addPadButton('camera', 'Create PNG', this.iscan ? 'CanvasSnapShot' : 'PadSnapShot', 'Ctrl PrintScreen');\n\n if (settings.ContextMenu)\n this.addPadButton('question', 'Access context menus', 'PadContextMenus');\n\n let add_enlarge = !this.iscan && this.has_canvas && this.hasObjectsToDraw()\n\n if (add_enlarge || this.enlargeMain('verify'))\n this.addPadButton('circle', 'Enlarge canvas', 'enlargePad');\n\n if (is_online && this.brlayout) {\n this.addPadButton('diamand', 'Toggle Ged', 'ToggleGed');\n this.addPadButton('three_circles', 'Toggle Status', 'ToggleStatus');\n }\n\n }\n\n /** @summary Show pad buttons\n * @private */\n showPadButtons() {\n if (!this._buttons) return;\n\n PadButtonsHandler.assign(this);\n this.showPadButtons();\n }\n\n /** @summary Calculates RPadLength value */\n getPadLength(vertical, len, frame_painter) {\n let sign = vertical ? -1 : 1,\n rect, res,\n getV = (indx, dflt) => (indx < len.fArr.length) ? len.fArr[indx] : dflt,\n getRect = () => {\n if (!rect)\n rect = frame_painter ? frame_painter.getFrameRect() : this.getPadRect();\n return rect;\n };\n\n if (frame_painter) {\n let user = getV(2), func = vertical ? 'gry' : 'grx';\n if ((user !== undefined) && frame_painter[func])\n res = frame_painter[func](user);\n }\n\n if (res === undefined)\n res = vertical ? getRect().height : 0;\n\n let norm = getV(0, 0), pixel = getV(1, 0);\n\n res += sign*pixel;\n\n if (norm)\n res += sign * (vertical ? getRect().height : getRect().width) * norm;\n\n return Math.round(res);\n }\n\n\n /** @summary Calculates pad position for RPadPos values\n * @param {object} pos - instance of RPadPos\n * @param {object} frame_painter - if drawing will be performed inside frame, frame painter */\n getCoordinate(pos, frame_painter) {\n return {\n x: this.getPadLength(false, pos.fHoriz, frame_painter),\n y: this.getPadLength(true, pos.fVert, frame_painter)\n }\n }\n\n /** @summary Decode pad draw options */\n decodeOptions(opt) {\n let pad = this.getObject();\n if (!pad) return;\n\n let d = new DrawOptions(opt);\n\n if (!this.options) this.options = {};\n\n Object.assign(this.options, { GlobalColors: true, LocalColors: false, IgnorePalette: false, RotateFrame: false, FixFrame: false });\n\n if (d.check('NOCOLORS') || d.check('NOCOL')) this.options.GlobalColors = this.options.LocalColors = false;\n if (d.check('LCOLORS') || d.check('LCOL')) { this.options.GlobalColors = false; this.options.LocalColors = true; }\n if (d.check('NOPALETTE') || d.check('NOPAL')) this.options.IgnorePalette = true;\n if (d.check('ROTATE')) this.options.RotateFrame = true;\n if (d.check('FIXFRAME')) this.options.FixFrame = true;\n\n if (d.check('WHITE')) pad.fFillColor = 0;\n if (d.check('LOGX')) pad.fLogx = 1;\n if (d.check('LOGY')) pad.fLogy = 1;\n if (d.check('LOGZ')) pad.fLogz = 1;\n if (d.check('LOG')) pad.fLogx = pad.fLogy = pad.fLogz = 1;\n if (d.check('GRIDX')) pad.fGridx = 1;\n if (d.check('GRIDY')) pad.fGridy = 1;\n if (d.check('GRID')) pad.fGridx = pad.fGridy = 1;\n if (d.check('TICKX')) pad.fTickx = 1;\n if (d.check('TICKY')) pad.fTicky = 1;\n if (d.check('TICK')) pad.fTickx = pad.fTicky = 1;\n }\n\n /** @summary draw RPad object */\n static async draw(dom, pad, opt) {\n let painter = new RPadPainter(dom, pad, false);\n painter.decodeOptions(opt);\n\n if (painter.getCanvSvg().empty()) {\n painter.has_canvas = false;\n painter.this_pad_name = '';\n painter.setTopPainter();\n } else {\n painter.addToPadPrimitives(painter.pad_name); // must be here due to pad painter\n }\n\n painter.createPadSvg();\n\n if (painter.matchObjectType(clTPad) && (!painter.has_canvas || painter.hasObjectsToDraw())) {\n painter.addPadButtons();\n }\n\n // we select current pad, where all drawing is performed\n let prev_name = painter.has_canvas ? painter.selectCurrentPad(painter.this_pad_name) : undefined;\n\n selectActivePad({ pp: painter, active: false });\n\n // flag used to prevent immediate pad redraw during first draw\n return painter.drawPrimitives().then(() => {\n painter.showPadButtons();\n // we restore previous pad name\n painter.selectCurrentPad(prev_name);\n return painter;\n });\n }\n\n} // class RPadPainter\n\nexport { RPadPainter };\n","import { httpRequest, createHttpRequest, loadScript, decodeUrl,\n browser, setBatchMode, isBatchMode, isObject, isFunc, isStr, btoa_func } from './core.mjs';\nimport { closeCurrentWindow, showProgress, loadOpenui5 } from './gui/utils.mjs';\n\n\n/**\n * @summary Class emulating web socket with long-poll http requests\n *\n * @private\n */\n\nclass LongPollSocket {\n\n constructor(addr, _raw, _args) {\n this.path = addr;\n this.connid = null;\n this.req = null;\n this.raw = _raw;\n this.args = _args;\n\n this.nextRequest('', 'connect');\n }\n\n /** @summary Submit next request */\n nextRequest(data, kind) {\n let url = this.path, reqmode = 'buf', post = null;\n if (kind === 'connect') {\n url += this.raw ? '?raw_connect' : '?txt_connect';\n if (this.args) url += '&' + this.args;\n console.log(`longpoll connect ${url} raw = ${this.raw}`);\n this.connid = 'connect';\n } else if (kind === 'close') {\n if ((this.connid === null) || (this.connid === 'close')) return;\n url += `?connection=${this.connid}&close`;\n this.connid = 'close';\n reqmode = 'text;sync'; // use sync mode to close connection before browser window closed\n } else if ((this.connid === null) || (typeof this.connid !== 'number')) {\n if (!browser.qt5) console.error('No connection');\n return;\n } else {\n url += '?connection=' + this.connid;\n if (kind === 'dummy') url += '&dummy';\n }\n\n if (data) {\n if (this.raw) {\n // special workaround to avoid POST request, use base64 coding\n url += '&post=' + btoa_func(data);\n } else {\n // send data with post request - most efficient way\n reqmode = 'postbuf';\n post = data;\n }\n }\n\n createHttpRequest(url, reqmode, function(res) {\n // this set to the request itself, res is response\n\n if (this.handle.req === this)\n this.handle.req = null; // get response for existing dummy request\n\n if (res === null)\n return this.handle.processRequest(null);\n\n if (this.handle.raw) {\n // raw mode - all kind of reply data packed into binary buffer\n // first 4 bytes header 'txt:' or 'bin:'\n // after the 'bin:' there is length of optional text argument like 'bin:14 :optional_text'\n // and immedaitely after text binary data. Server sends binary data so, that offset should be multiple of 8\n\n let str = '', i = 0, u8Arr = new Uint8Array(res), offset = u8Arr.length;\n if (offset < 4) {\n if (!browser.qt5) console.error(`longpoll got short message in raw mode ${offset}`);\n return this.handle.processRequest(null);\n }\n\n while (i < 4) str += String.fromCharCode(u8Arr[i++]);\n if (str != 'txt:') {\n str = '';\n while ((i < offset) && (String.fromCharCode(u8Arr[i]) != ':'))\n str += String.fromCharCode(u8Arr[i++]);\n ++i;\n offset = i + parseInt(str.trim());\n }\n\n str = '';\n while (i < offset) str += String.fromCharCode(u8Arr[i++]);\n\n if (str) {\n if (str == '<>')\n this.handle.processRequest(-1111);\n else\n this.handle.processRequest(str);\n }\n if (offset < u8Arr.length)\n this.handle.processRequest(res, offset);\n } else if (this.getResponseHeader('Content-Type') == 'application/x-binary') {\n // binary reply with optional header\n let extra_hdr = this.getResponseHeader('LongpollHeader');\n if (extra_hdr) this.handle.processRequest(extra_hdr);\n this.handle.processRequest(res, 0);\n } else {\n // text reply\n if (res && !isStr(res)) {\n let str = '', u8Arr = new Uint8Array(res);\n for (let i = 0; i < u8Arr.length; ++i)\n str += String.fromCharCode(u8Arr[i]);\n res = str;\n }\n if (res == '<>')\n this.handle.processRequest(-1111);\n else\n this.handle.processRequest(res);\n }\n }, function(/*err,status*/) {\n this.handle.processRequest(null, 'error');\n }, true).then(req => {\n req.handle = this;\n if (!this.req)\n this.req = req; // any request can be used for response, do not submit dummy until req is there\n req.send(post);\n });\n }\n\n /** @summary Process request */\n processRequest(res, _offset) {\n if (res === null) {\n if (isFunc(this.onerror))\n this.onerror('receive data with connid ' + (this.connid || '---'));\n if ((_offset == 'error') && isFunc(this.onclose))\n this.onclose('force_close');\n this.connid = null;\n return;\n } else if (res === -1111) {\n res = '';\n }\n\n let dummy_tmout = 5;\n\n if (this.connid === 'connect') {\n if (!res) {\n this.connid = null;\n if (isFunc(this.onerror))\n this.onerror('connection rejected');\n return;\n }\n\n this.connid = parseInt(res);\n dummy_tmout = 100; // when establishing connection, wait a bit longer to submit dummy package\n console.log(`Get new longpoll connection with id ${this.connid}`);\n if (isFunc(this.onopen))\n this.onopen();\n } else if (this.connid === 'close') {\n if (isFunc(this.onclose))\n this.onclose();\n return;\n } else {\n if (isFunc(this.onmessage) && res)\n this.onmessage({ data: res, offset: _offset });\n }\n\n // minimal timeout to reduce load, generate dummy only if client not submit new request immediately\n if (!this.req)\n setTimeout(() => { if (!this.req) this.nextRequest('', 'dummy'); }, dummy_tmout);\n }\n\n /** @summary Send data */\n send(str) { this.nextRequest(str); }\n\n /** @summary Close connection */\n close() { this.nextRequest('', 'close'); }\n\n} // class LongPollSocket\n\n// ========================================================================================\n\n/**\n * @summary Class re-playing socket data from stored protocol\n *\n * @private\n */\n\nclass FileDumpSocket {\n\n constructor(receiver) {\n this.receiver = receiver;\n this.protocol = [];\n this.cnt = 0;\n httpRequest('protocol.json', 'text').then(res => this.getProtocol(res));\n }\n\n /** @summary Get stored protocol */\n getProtocol(res) {\n if (!res) return;\n this.protocol = JSON.parse(res);\n if (isFunc(this.onopen)) this.onopen();\n this.nextOperation();\n }\n\n /** @summary Emulate send - just cound operation */\n send(/* str */) {\n if (this.protocol[this.cnt] == 'send') {\n this.cnt++;\n setTimeout(() => this.nextOperation(), 10);\n }\n }\n\n /** @summary Emulate close */\n close() {}\n\n /** @summary Read data for next operation */\n nextOperation() {\n // when file request running - just ignore\n if (this.wait_for_file) return;\n let fname = this.protocol[this.cnt];\n if (!fname) return;\n if (fname == 'send') return; // waiting for send\n this.wait_for_file = true;\n this.cnt++;\n httpRequest(fname, (fname.indexOf('.bin') > 0 ? 'buf' : 'text')).then(res => {\n this.wait_for_file = false;\n if (!res) return;\n if (this.receiver.provideData)\n this.receiver.provideData(1, res, 0);\n setTimeout(() => this.nextOperation(), 10);\n });\n }\n\n} // class FileDumpSocket\n\n\n/**\n * @summary Client communication handle for RWebWindow.\n *\n * @desc Should be created with {@link connectWebWindow} function\n */\n\nclass WebWindowHandle {\n\n constructor(socket_kind, credits) {\n this.kind = socket_kind;\n this.state = 0;\n this.credits = credits || 10;\n this.cansend = this.credits;\n this.ackn = this.credits;\n }\n\n /** @summary Returns arguments specified in the RWebWindow::SetUserArgs() method\n * @desc Can be any valid JSON expression. Undefined by default.\n * @param {string} [field] - if specified and user args is object, returns correspondent object member\n * @return user arguments object */\n getUserArgs(field) {\n if (field && isStr(field))\n return isObject(this.user_args) ? this.user_args[field] : undefined;\n\n return this.user_args;\n }\n\n /** @summary Set user args\n * @desc Normally set via RWebWindow::SetUserArgs() method */\n setUserArgs(args) { this.user_args = args; }\n\n /** @summary Set callbacks receiver.\n * @param {object} obj - object with receiver functions\n * @param {function} obj.onWebsocketMsg - called when new data receieved from RWebWindow\n * @param {function} obj.onWebsocketOpened - called when connection established\n * @param {function} obj.onWebsocketClosed - called when connection closed\n * @param {function} obj.onWebsocketError - called when get error via the connection */\n setReceiver(obj) { this.receiver = obj; }\n\n /** @summary Cleanup and close connection. */\n cleanup() {\n delete this.receiver;\n this.close(true);\n }\n\n /** @summary Invoke method in the receiver.\n * @private */\n invokeReceiver(brdcst, method, arg, arg2) {\n if (this.receiver && isFunc(this.receiver[method]))\n this.receiver[method](this, arg, arg2);\n\n if (brdcst && this.channels) {\n let ks = Object.keys(this.channels);\n for (let n = 0; n < ks.length; ++n)\n this.channels[ks[n]].invokeReceiver(false, method, arg, arg2);\n }\n }\n\n /** @summary Provide data for receiver. When no queue - do it directly.\n * @private */\n provideData(chid, _msg, _len) {\n if (this.wait_first_recv) {\n delete this.wait_first_recv;\n return this.invokeReceiver(false, 'onWebsocketOpened');\n }\n\n if ((chid > 1) && this.channels) {\n const channel = this.channels[chid];\n if (channel)\n return channel.provideData(1, _msg, _len);\n }\n\n const force_queue = _len && (_len < 0);\n\n if (!force_queue && (!this.msgqueue || !this.msgqueue.length))\n return this.invokeReceiver(false, 'onWebsocketMsg', _msg, _len);\n\n if (!this.msgqueue) this.msgqueue = [];\n if (force_queue) _len = undefined;\n\n this.msgqueue.push({ ready: true, msg: _msg, len: _len });\n }\n\n /** @summary Reserve entry in queue for data, which is not yet decoded.\n * @private */\n reserveQueueItem() {\n if (!this.msgqueue) this.msgqueue = [];\n let item = { ready: false, msg: null, len: 0 };\n this.msgqueue.push(item);\n return item;\n }\n\n /** @summary Provide data for item which was reserved before.\n * @private */\n markQueueItemDone(item, _msg, _len) {\n item.ready = true;\n item.msg = _msg;\n item.len = _len;\n this.processQueue();\n }\n\n /** @summary Process completed messages in the queue\n * @private */\n processQueue() {\n if (this._loop_msgqueue || !this.msgqueue) return;\n this._loop_msgqueue = true;\n while ((this.msgqueue.length > 0) && this.msgqueue[0].ready) {\n let front = this.msgqueue.shift();\n this.invokeReceiver(false, 'onWebsocketMsg', front.msg, front.len);\n }\n if (this.msgqueue.length == 0)\n delete this.msgqueue;\n delete this._loop_msgqueue;\n }\n\n /** @summary Close connection */\n close(force) {\n if (this.master) {\n this.master.send('CLOSECH=' + this.channelid, 0);\n delete this.master.channels[this.channelid];\n delete this.master;\n return;\n }\n\n if (this.timerid) {\n clearTimeout(this.timerid);\n delete this.timerid;\n }\n\n if (this._websocket && (this.state > 0)) {\n this.state = force ? -1 : 0; // -1 prevent socket from reopening\n this._websocket.onclose = null; // hide normal handler\n this._websocket.close();\n delete this._websocket;\n }\n }\n\n /** @summary Checks number of credits for send operation\n * @param {number} [numsend = 1] - number of required send operations\n * @return true if one allow to send specified number of text message to server */\n canSend(numsend) { return this.cansend >= (numsend || 1); }\n\n /** @summary Returns number of possible send operations relative to number of credits */\n getRelCanSend() { return !this.credits ? 1 : this.cansend / this.credits; }\n\n /** @summary Send text message via the connection.\n * @param {string} msg - text message to send\n * @param {number} [chid] - channel id, 1 by default, 0 used only for internal communication */\n send(msg, chid) {\n if (this.master)\n return this.master.send(msg, this.channelid);\n\n if (!this._websocket || (this.state <= 0)) return false;\n\n if (!Number.isInteger(chid)) chid = 1; // when not configured, channel 1 is used - main widget\n\n if (this.cansend <= 0) console.error(`should be queued before sending cansend: ${this.cansend}`);\n\n let prefix = `${this.ackn}:${this.cansend}:${chid}:`;\n this.ackn = 0;\n this.cansend--; // decrease number of allowed send packets\n\n this._websocket.send(prefix + msg);\n\n if ((this.kind === 'websocket') || (this.kind === 'longpoll')) {\n if (this.timerid) clearTimeout(this.timerid);\n this.timerid = setTimeout(() => this.keepAlive(), 10000);\n }\n\n return true;\n }\n\n /** @summary Inject message(s) into input queue, for debug purposes only\n * @private */\n inject(msg, chid, immediate) {\n // use timeout to avoid too deep call stack\n if (!immediate)\n return setTimeout(this.inject.bind(this, msg, chid, true), 0);\n\n if (chid === undefined) chid = 1;\n\n if (Array.isArray(msg)) {\n for (let k = 0; k < msg.length; ++k)\n this.provideData(chid, isStr(msg[k]) ? msg[k] : JSON.stringify(msg[k]), -1);\n this.processQueue();\n } else if (msg) {\n this.provideData(chid, isStr(msg) ? msg : JSON.stringify(msg));\n }\n }\n\n /** @summary Send keep-alive message.\n * @desc Only for internal use, only when used with websockets\n * @private */\n keepAlive() {\n delete this.timerid;\n this.send('KEEPALIVE', 0);\n }\n\n /** @summary Method open channel, which will share same connection, but can be used independently from main\n * @private */\n createChannel() {\n if (this.master)\n return master.createChannel();\n\n let channel = new WebWindowHandle('channel', this.credits);\n channel.wait_first_recv = true; // first received message via the channel is confirmation of established connection\n\n if (!this.channels) {\n this.channels = {};\n this.freechannelid = 2;\n }\n\n channel.master = this;\n channel.channelid = this.freechannelid++;\n\n // register\n this.channels[channel.channelid] = channel;\n\n // now server-side entity should be initialized and init message send from server side!\n return channel;\n }\n\n /** @summary Returns used channel ID, 1 by default */\n getChannelId() { return this.channelid && this.master ? this.channelid : 1; }\n\n /** @summary Assign href parameter\n * @param {string} [path] - absolute path, when not specified window.location.url will be used\n * @private */\n setHRef(path) { this.href = path; }\n\n /** @summary Return href part\n * @param {string} [relative_path] - relative path to the handle\n * @private */\n getHRef(relative_path) {\n if (!relative_path || !this.kind || !this.href) return this.href;\n\n let addr = this.href;\n if (relative_path.indexOf('../') == 0) {\n let ddd = addr.lastIndexOf('/',addr.length-2);\n addr = addr.slice(0,ddd) + relative_path.slice(2);\n } else {\n addr += relative_path;\n }\n\n return addr;\n }\n\n /** @summary Create configured socket for current object.\n * @private */\n connect(href) {\n\n this.close();\n if (!href && this.href) href = this.href;\n\n let ntry = 0, args = (this.key ? ('key=' + this.key) : '');\n if (this.token) {\n if (args) args += '&';\n args += 'token=' + this.token;\n }\n\n const retry_open = first_time => {\n\n if (this.state != 0) return;\n\n if (!first_time) console.log(`try connect window again ${new Date().toString()}`);\n\n if (this._websocket) {\n this._websocket.close();\n delete this._websocket;\n }\n\n if (!href) {\n href = window.location.href;\n if (href && href.indexOf('#') > 0) href = href.slice(0, href.indexOf('#'));\n if (href && href.lastIndexOf('/') > 0) href = href.slice(0, href.lastIndexOf('/') + 1);\n }\n this.href = href;\n ntry++;\n\n if (first_time) console.log(`Opening web socket at ${href}`);\n\n if (ntry > 2) showProgress(`Trying to connect ${href}`);\n\n let path = href;\n\n if (this.kind == 'file') {\n path += 'root.filedump';\n this._websocket = new FileDumpSocket(this);\n console.log(`configure protocol log ${path}`);\n } else if ((this.kind === 'websocket') && first_time) {\n path = path.replace('http://', 'ws://').replace('https://', 'wss://') + 'root.websocket';\n if (args) path += '?' + args;\n console.log(`configure websocket ${path}`);\n this._websocket = new WebSocket(path);\n } else {\n path += 'root.longpoll';\n console.log(`configure longpoll ${path}`);\n this._websocket = new LongPollSocket(path, (this.kind === 'rawlongpoll'), args);\n }\n\n if (!this._websocket) return;\n\n this._websocket.onopen = () => {\n if (ntry > 2) showProgress();\n this.state = 1;\n\n let key = this.key || '';\n\n this.send('READY=' + key, 0); // need to confirm connection\n this.invokeReceiver(false, 'onWebsocketOpened');\n };\n\n this._websocket.onmessage = e => {\n let msg = e.data;\n\n if (this.next_binary) {\n\n let binchid = this.next_binary;\n delete this.next_binary;\n\n if (msg instanceof Blob) {\n // convert Blob object to BufferArray\n let reader = new FileReader, qitem = this.reserveQueueItem();\n // The file's text will be printed here\n reader.onload = event => this.markQueueItemDone(qitem, event.target.result, 0);\n reader.readAsArrayBuffer(msg, e.offset || 0);\n } else {\n // this is from CEF or LongPoll handler\n this.provideData(binchid, msg, e.offset || 0);\n }\n\n return;\n }\n\n if (!isStr(msg))\n return console.log(`unsupported message kind: ${typeof msg}`);\n\n let i1 = msg.indexOf(':'),\n credit = parseInt(msg.slice(0, i1)),\n i2 = msg.indexOf(':', i1 + 1),\n // cansend = parseInt(msg.slice(i1 + 1, i2)), // TODO: take into account when sending messages\n i3 = msg.indexOf(':', i2 + 1),\n chid = parseInt(msg.slice(i2 + 1, i3));\n\n this.ackn++; // count number of received packets,\n this.cansend += credit; // how many packets client can send\n\n msg = msg.slice(i3 + 1);\n\n if (chid == 0) {\n console.log(`GET chid=0 message ${msg}`);\n if (msg == 'CLOSE') {\n this.close(true); // force closing of socket\n this.invokeReceiver(true, 'onWebsocketClosed');\n } else if (msg.indexOf('NEW_KEY=') == 0) {\n let newkey = msg.slice(8);\n this.close(true);\n if (typeof sessionStorage !== 'undefined')\n sessionStorage.setItem('RWebWindow_Key', newkey);\n location.reload(true);\n }\n } else if (msg == '$$binary$$') {\n this.next_binary = chid;\n } else if (msg == '$$nullbinary$$') {\n this.provideData(chid, new ArrayBuffer(0), 0);\n } else {\n this.provideData(chid, msg);\n }\n\n if (this.ackn > 7)\n this.send('READY', 0); // send dummy message to server\n };\n\n this._websocket.onclose = arg => {\n delete this._websocket;\n if ((this.state > 0) || (arg === 'force_close')) {\n console.log('websocket closed');\n this.state = 0;\n this.invokeReceiver(true, 'onWebsocketClosed');\n }\n };\n\n this._websocket.onerror = err => {\n console.log(`websocket error ${err} state ${this.state}`);\n if (this.state > 0) {\n this.invokeReceiver(true, 'onWebsocketError', err);\n this.state = 0;\n }\n };\n\n // only in interactive mode try to reconnect\n if (!isBatchMode())\n setTimeout(retry_open, 3000); // after 3 seconds try again\n\n } // retry_open\n\n retry_open(true); // call for the first time\n }\n\n /** @summary Send newkey request to application\n * @desc If server creates newkey and response - webpage will be reaload\n * After key generation done, connection will not be working any longer\n * WARNING - only call when you know that you are doing\n * @private */\n askReload() {\n this.send('GENERATE_KEY', 0);\n }\n\n /** @summary Instal Ctrl-R handler to realod web window\n * @desc Instead of default window reload invokes {@link askReload} method\n * WARNING - only call when you know that you are doing\n * @private */\n addReloadKeyHandler() {\n\n if (this.kind == 'file') return;\n\n window.addEventListener( 'keydown', evnt => {\n if (((evnt.key == 'R') || (evnt.key == 'r')) && evnt.ctrlKey) {\n evnt.stopPropagation();\n evnt.preventDefault();\n console.log('Prevent Ctrl-R propogation - ask reload RWebWindow!');\n this.askReload();\n }\n });\n }\n\n} // class WebWindowHandle\n\n\n/** @summary Method used to initialize connection to web window.\n * @param {object} arg - arguments\n * @param {string} [arg.socket_kind] - kind of connection longpoll|websocket, detected automatically from URL\n * @param {number} [arg.credits = 10] - number of packets which can be send to server without acknowledge\n * @param {object} arg.receiver - instance of receiver for websocket events, allows to initiate connection immediately\n * @param {string} [arg.first_recv] - required prefix in the first message from RWebWindow, remain part of message will be returned in handle.first_msg\n * @param {string} [arg.href] - URL to RWebWindow, using window.location.href by default\n * @return {Promise} for ready-to-use {@link WebWindowHandle} instance */\nasync function connectWebWindow(arg) {\n\n if (isFunc(arg))\n arg = { callback: arg };\n else if (!isObject(arg))\n arg = {};\n\n let d = decodeUrl();\n\n // special holder script, prevents headless chrome browser from too early exit\n if (d.has('headless') && d.get('key') && (browser.isChromeHeadless || browser.isChrome) && !arg.ignore_chrome_batch_holder)\n loadScript('root_batch_holder.js?key=' + d.get('key'));\n\n if (!arg.platform)\n arg.platform = d.get('platform');\n\n if (arg.platform == 'qt5')\n browser.qt5 = true;\n else if (arg.platform == 'cef3')\n browser.cef3 = true;\n\n if (arg.batch === undefined)\n arg.batch = d.has('headless');\n\n if (arg.batch) setBatchMode(true);\n\n if (!arg.socket_kind)\n arg.socket_kind = d.get('ws');\n\n if (!arg.socket_kind) {\n if (browser.qt5)\n arg.socket_kind = 'rawlongpoll';\n else if (browser.cef3)\n arg.socket_kind = 'longpoll';\n else\n arg.socket_kind = 'websocket';\n }\n\n // only for debug purposes\n // arg.socket_kind = 'longpoll';\n\n let main = new Promise(resolveFunc => {\n let handle = new WebWindowHandle(arg.socket_kind, arg.credits);\n handle.setUserArgs(arg.user_args);\n if (arg.href) handle.setHRef(arg.href); // apply href now while connect can be called from other place\n\n if (window) {\n window.onbeforeunload = () => handle.close(true);\n if (browser.qt5) window.onqt5unload = window.onbeforeunload;\n }\n\n handle.key = d.get('key');\n handle.token = d.get('token');\n\n if (typeof sessionStorage !== 'undefined') {\n let new_key = sessionStorage.getItem('RWebWindow_Key');\n sessionStorage.removeItem('RWebWindow_Key');\n if (new_key) {\n console.log(`Use key ${new_key} from session storage`);\n handle.key = new_key;\n }\n }\n\n if (arg.receiver) {\n // when receiver exists, it handles itself callbacks\n handle.setReceiver(arg.receiver);\n handle.connect();\n return resolveFunc(handle);\n }\n\n if (!arg.first_recv)\n return resolveFunc(handle);\n\n handle.setReceiver({\n onWebsocketOpened() {}, // dummy function when websocket connected\n\n onWebsocketMsg(handle, msg) {\n if (msg.indexOf(arg.first_recv) != 0)\n return handle.close();\n handle.first_msg = msg.slice(arg.first_recv.length);\n resolveFunc(handle);\n },\n\n onWebsocketClosed() { closeCurrentWindow(); } // when connection closed, close panel as well\n });\n\n handle.connect();\n });\n\n if (!arg.ui5) return main;\n\n return Promise.all([main, loadOpenui5(arg)]).then(arr => arr[0]);\n}\n\nexport { WebWindowHandle, connectWebWindow };\n","import { settings, create, parse, toJSON, loadScript, registerMethods, isBatchMode, isFunc, isStr } from '../core.mjs';\nimport { select as d3_select, rgb as d3_rgb } from '../d3.mjs';\nimport { closeCurrentWindow, showProgress, loadOpenui5, ToolbarIcons, getColorExec } from '../gui/utils.mjs';\nimport { GridDisplay, getHPainter } from '../gui/display.mjs';\nimport { selectActivePad, cleanup, resize, EAxisBits } from '../base/ObjectPainter.mjs';\nimport { RObjectPainter } from '../base/RObjectPainter.mjs';\nimport { RAxisPainter } from './RAxisPainter.mjs';\nimport { RFramePainter } from './RFramePainter.mjs';\nimport { RPadPainter } from './RPadPainter.mjs';\nimport { addDragHandler } from './TFramePainter.mjs';\nimport { WebWindowHandle } from '../webwindow.mjs';\n\n\n/**\n * @summary Painter class for RCanvas\n *\n * @private\n */\n\nclass RCanvasPainter extends RPadPainter {\n\n /** @summary constructor */\n constructor(dom, canvas) {\n super(dom, canvas, true);\n this._websocket = null;\n this.tooltip_allowed = settings.Tooltip;\n this.v7canvas = true;\n }\n\n /** @summary Cleanup canvas painter */\n cleanup() {\n delete this._websocket;\n delete this._submreq;\n\n if (this._changed_layout)\n this.setLayoutKind('simple');\n delete this._changed_layout;\n\n super.cleanup();\n }\n\n /** @summary Returns layout kind */\n getLayoutKind() {\n let origin = this.selectDom('origin'),\n layout = origin.empty() ? '' : origin.property('layout');\n return layout || 'simple';\n }\n\n /** @summary Set canvas layout kind */\n setLayoutKind(kind, main_selector) {\n let origin = this.selectDom('origin');\n if (!origin.empty()) {\n if (!kind) kind = 'simple';\n origin.property('layout', kind);\n origin.property('layout_selector', (kind != 'simple') && main_selector ? main_selector : null);\n this._changed_layout = (kind !== 'simple'); // use in cleanup\n }\n }\n\n /** @summary Changes layout\n * @return {Promise} indicating when finished */\n async changeLayout(layout_kind, mainid) {\n let current = this.getLayoutKind();\n if (current == layout_kind)\n return true;\n\n let origin = this.selectDom('origin'),\n sidebar = origin.select('.side_panel'),\n main = this.selectDom(), lst = [];\n\n while (main.node().firstChild)\n lst.push(main.node().removeChild(main.node().firstChild));\n\n if (!sidebar.empty())\n cleanup(sidebar.node());\n\n this.setLayoutKind('simple'); // restore defaults\n origin.html(''); // cleanup origin\n\n if (layout_kind == 'simple') {\n main = origin;\n for (let k = 0; k < lst.length; ++k)\n main.node().appendChild(lst[k]);\n this.setLayoutKind(layout_kind);\n } else {\n let grid = new GridDisplay(origin.node(), layout_kind);\n\n if (mainid == undefined)\n mainid = (layout_kind.indexOf('vert') == 0) ? 0 : 1;\n\n main = d3_select(grid.getGridFrame(mainid));\n sidebar = d3_select(grid.getGridFrame(1 - mainid));\n\n main.classed('central_panel', true).style('position', 'relative');\n sidebar.classed('side_panel', true).style('position', 'relative');\n\n // now append all childs to the new main\n for (let k = 0; k < lst.length; ++k)\n main.node().appendChild(lst[k]);\n\n this.setLayoutKind(layout_kind, '.central_panel');\n\n // remove reference to MDIDisplay, solves resize problem\n origin.property('mdi', null);\n }\n\n // resize main drawing and let draw extras\n resize(main.node());\n return true;\n }\n\n /** @summary Toggle projection\n * @return {Promise} indicating when ready\n * @private */\n async toggleProjection(kind) {\n delete this.proj_painter;\n\n if (kind) this.proj_painter = 1; // just indicator that drawing can be preformed\n\n if (isFunc(this.showUI5ProjectionArea))\n return this.showUI5ProjectionArea(kind);\n\n let layout = 'simple', mainid;\n\n switch(kind) {\n case 'X':\n case 'bottom': layout = 'vert2_31'; mainid = 0; break;\n case 'Y':\n case 'left': layout = 'horiz2_13'; mainid = 1; break;\n case 'top': layout = 'vert2_13'; mainid = 1; break;\n case 'right': layout = 'horiz2_31'; mainid = 0; break;\n }\n\n return this.changeLayout(layout, mainid);\n }\n\n /** @summary Draw projection for specified histogram\n * @private */\n async drawProjection( /*kind,hist*/) {\n // dummy for the moment\n return false;\n }\n\n /** @summary Draw in side panel\n * @private */\n async drawInSidePanel(canv, opt) {\n let side = this.selectDom('origin').select('.side_panel');\n return side.empty() ? null : this.drawObject(side.node(), canv, opt);\n }\n\n /** @summary Checks if canvas shown inside ui5 widget\n * @desc Function should be used only from the func which supposed to be replaced by ui5\n * @private */\n testUI5() {\n if (!this.use_openui) return false;\n console.warn('full ui5 should be used - not loaded yet? Please check!!');\n return true;\n }\n\n /** @summary Show message\n * @desc Used normally with web-based canvas and handled in ui5\n * @private */\n showMessage(msg) {\n if (!this.testUI5())\n showProgress(msg, 7000);\n }\n\n /** @summary Function called when canvas menu item Save is called */\n saveCanvasAsFile(fname) {\n let pnt = fname.indexOf('.');\n this.createImage(fname.slice(pnt+1))\n .then(res => { console.log('save', fname, res.length); this.sendWebsocket('SAVE:' + fname + ':' + res); });\n }\n\n /** @summary Send command to server to save canvas with specified name\n * @desc Should be only used in web-based canvas\n * @private */\n sendSaveCommand(fname) {\n this.sendWebsocket('PRODUCE:' + fname);\n }\n\n /** @summary Send message via web socket\n * @private */\n sendWebsocket(msg) {\n if (this._websocket?.canSend()) {\n this._websocket.send(msg);\n return true;\n }\n\n return false;\n }\n\n /** @summary Close websocket connection to canvas\n * @private */\n closeWebsocket(force) {\n if (this._websocket) {\n this._websocket.close(force);\n this._websocket.cleanup();\n delete this._websocket;\n }\n }\n\n /** @summary Use provided connection for the web canvas\n * @private */\n useWebsocket(handle) {\n this.closeWebsocket();\n\n this._websocket = handle;\n this._websocket.setReceiver(this);\n this._websocket.connect();\n }\n\n /** @summary Hanler for websocket open event\n * @private */\n onWebsocketOpened(/*handle*/) {\n }\n\n /** @summary Hanler for websocket close event\n * @private */\n onWebsocketClosed(/*handle*/) {\n if (!this.embed_canvas)\n closeCurrentWindow();\n }\n\n /** @summary Hanler for websocket message\n * @private */\n onWebsocketMsg(handle, msg) {\n console.log('GET_MSG ' + msg.slice(0,30));\n\n if (msg == 'CLOSE') {\n this.onWebsocketClosed();\n this.closeWebsocket(true);\n } else if (msg.slice(0,5) == 'SNAP:') {\n msg = msg.slice(5);\n let p1 = msg.indexOf(':'),\n snapid = msg.slice(0,p1),\n snap = parse(msg.slice(p1+1));\n this.syncDraw(true)\n .then(() => this.redrawPadSnap(snap))\n .then(() => {\n handle.send('SNAPDONE:' + snapid); // send ready message back when drawing completed\n this.confirmDraw();\n });\n } else if (msg.slice(0,4) == 'JSON') {\n let obj = parse(msg.slice(4));\n // console.log('get JSON ', msg.length-4, obj._typename);\n this.redrawObject(obj);\n } else if (msg.slice(0,9) == 'REPL_REQ:') {\n this.processDrawableReply(msg.slice(9));\n } else if (msg.slice(0,4) == 'CMD:') {\n msg = msg.slice(4);\n let p1 = msg.indexOf(':'),\n cmdid = msg.slice(0,p1),\n cmd = msg.slice(p1+1),\n reply = 'REPLY:' + cmdid + ':';\n if ((cmd == 'SVG') || (cmd == 'PNG') || (cmd == 'JPEG')) {\n this.createImage(cmd.toLowerCase())\n .then(res => handle.send(reply + res));\n } else if (cmd.indexOf('ADDPANEL:') == 0) {\n let relative_path = cmd.slice(9);\n if (!isFunc(this.showUI5Panel)) {\n handle.send(reply + 'false');\n } else {\n\n let conn = new WebWindowHandle(handle.kind);\n\n // set interim receiver until first message arrives\n conn.setReceiver({\n cpainter: this,\n\n onWebsocketOpened() {\n },\n\n onWebsocketMsg(panel_handle, msg) {\n let panel_name = (msg.indexOf('SHOWPANEL:') == 0) ? msg.slice(10) : '';\n this.cpainter.showUI5Panel(panel_name, panel_handle)\n .then(res => handle.send(reply + (res ? 'true' : 'false')));\n },\n\n onWebsocketClosed() {\n // if connection failed,\n handle.send(reply + 'false');\n },\n\n onWebsocketError() {\n // if connection failed,\n handle.send(reply + 'false');\n }\n\n });\n\n let addr = handle.href;\n if (relative_path.indexOf('../') == 0) {\n let ddd = addr.lastIndexOf('/',addr.length-2);\n addr = addr.slice(0,ddd) + relative_path.slice(2);\n } else {\n addr += relative_path;\n }\n // only when connection established, panel will be activated\n conn.connect(addr);\n }\n } else {\n console.log('Unrecognized command ' + cmd);\n handle.send(reply);\n }\n } else if ((msg.slice(0,7) == 'DXPROJ:') || (msg.slice(0,7) == 'DYPROJ:')) {\n let kind = msg[1],\n hist = parse(msg.slice(7));\n this.drawProjection(kind, hist);\n } else if (msg.slice(0,5) == 'SHOW:') {\n let that = msg.slice(5),\n on = that[that.length-1] == '1';\n this.showSection(that.slice(0,that.length-2), on);\n } else {\n console.log(`unrecognized msg len: ${msg.length} msg: ${msg.slice(0,30)}`);\n }\n }\n\n /** @summary Submit request to RDrawable object on server side */\n submitDrawableRequest(kind, req, painter, method) {\n\n if (!this._websocket || !req || !req._typename ||\n !painter.snapid || !isStr(painter.snapid)) return null;\n\n if (kind && method) {\n // if kind specified - check if such request already was submitted\n if (!painter._requests) painter._requests = {};\n\n let prevreq = painter._requests[kind];\n\n if (prevreq) {\n let tm = new Date().getTime();\n if (!prevreq._tm || (tm - prevreq._tm < 5000)) {\n prevreq._nextreq = req; // submit when got reply\n return false;\n }\n delete painter._requests[kind]; // let submit new request after timeout\n }\n\n painter._requests[kind] = req; // keep reference on the request\n }\n\n req.id = painter.snapid;\n\n if (method) {\n if (!this._nextreqid) this._nextreqid = 1;\n req.reqid = this._nextreqid++;\n } else {\n req.reqid = 0; // request will not be replied\n }\n\n let msg = JSON.stringify(req);\n\n if (req.reqid) {\n req._kind = kind;\n req._painter = painter;\n req._method = method;\n req._tm = new Date().getTime();\n\n if (!this._submreq) this._submreq = {};\n this._submreq[req.reqid] = req; // fast access to submitted requests\n }\n\n // console.log('Sending request ', msg.slice(0,60));\n\n this.sendWebsocket('REQ:' + msg);\n return req;\n }\n\n /** @summary Submit menu request\n * @private */\n async submitMenuRequest(painter, menukind, reqid) {\n return new Promise(resolveFunc => {\n this.submitDrawableRequest('', {\n _typename: 'ROOT::Experimental::RDrawableMenuRequest',\n menukind: menukind || '',\n menureqid: reqid, // used to identify menu request\n }, painter, resolveFunc);\n });\n }\n\n /** @summary Submit executable command for given painter */\n submitExec(painter, exec, subelem) {\n // snapid is intentionally ignored - only painter.snapid has to be used\n if (!this._websocket) return;\n\n if (subelem && isStr(subelem)) {\n let len = subelem.length;\n if ((len > 2) && (subelem.indexOf('#x') == len - 2)) subelem = 'x'; else\n if ((len > 2) && (subelem.indexOf('#y') == len - 2)) subelem = 'y'; else\n if ((len > 2) && (subelem.indexOf('#z') == len - 2)) subelem = 'z';\n\n if ((subelem == 'x') || (subelem == 'y') || (subelem == 'z'))\n exec = subelem + 'axis#' + exec;\n else\n return console.log(`not recoginzed subelem ${subelem} in SubmitExec`);\n }\n\n this.submitDrawableRequest('', {\n _typename: 'ROOT::Experimental::RDrawableExecRequest',\n exec: exec\n }, painter);\n }\n\n /** @summary Process reply from request to RDrawable */\n processDrawableReply(msg) {\n let reply = parse(msg);\n if (!reply || !reply.reqid || !this._submreq) return false;\n\n let req = this._submreq[reply.reqid];\n if (!req) return false;\n\n // remove reference first\n delete this._submreq[reply.reqid];\n\n // remove blocking reference for that kind\n if (req._kind && req._painter?._requests)\n if (req._painter._requests[req._kind] === req)\n delete req._painter._requests[req._kind];\n\n if (req._method)\n req._method(reply, req);\n\n // resubmit last request of that kind\n if (req._nextreq && !req._painter._requests[req._kind])\n this.submitDrawableRequest(req._kind, req._nextreq, req._painter, req._method);\n }\n\n /** @summary Show specified section in canvas */\n async showSection(that, on) {\n switch(that) {\n case 'Menu': break;\n case 'StatusBar': break;\n case 'Editor': break;\n case 'ToolBar': break;\n case 'ToolTips': this.setTooltipAllowed(on); break;\n }\n return true;\n }\n\n /** @summary Method informs that something was changed in the canvas\n * @desc used to update information on the server (when used with web6gui)\n * @private */\n processChanges(kind, painter, subelem) {\n // check if we could send at least one message more - for some meaningful actions\n if (!this._websocket || !this._websocket.canSend(2) || !isStr(kind)) return;\n\n let msg = '';\n if (!painter) painter = this;\n switch (kind) {\n case 'sbits':\n console.log('Status bits in RCanvas are changed - that to do?');\n break;\n case 'frame': // when moving frame\n case 'zoom': // when changing zoom inside frame\n console.log('Frame moved or zoom is changed - that to do?');\n break;\n case 'pave_moved':\n console.log('TPave is moved inside RCanvas - that to do?');\n break;\n default:\n if ((kind.slice(0,5) == 'exec:') && painter?.snapid) {\n this.submitExec(painter, kind.slice(5), subelem);\n } else {\n console.log('UNPROCESSED CHANGES', kind);\n }\n }\n\n if (msg) {\n console.log('RCanvas::processChanges want to send ' + msg.length + ' ' + msg.slice(0,40));\n }\n }\n\n /** @summary Handle pad button click event\n * @private */\n clickPadButton(funcname, evnt) {\n if (funcname == 'ToggleGed') return this.activateGed(this, null, 'toggle');\n if (funcname == 'ToggleStatus') return this.activateStatusBar('toggle');\n super.clickPadButton(funcname, evnt);\n }\n\n /** @summary returns true when event status area exist for the canvas */\n hasEventStatus() {\n if (this.testUI5()) return false;\n if (this.brlayout)\n return this.brlayout.hasStatus();\n let hp = getHPainter();\n return hp ? hp.hasStatusLine() : false;\n }\n\n /** @summary Show/toggle event status bar\n * @private */\n activateStatusBar(state) {\n if (this.testUI5()) return;\n if (this.brlayout)\n this.brlayout.createStatusLine(23, state);\n else\n getHPainter()?.createStatusLine(23, state);\n\n this.processChanges('sbits', this);\n }\n\n /** @summary Show online canvas status\n * @private */\n showCanvasStatus(...msgs) {\n if (this.testUI5()) return;\n\n let br = this.brlayout || getHPainter()?.brlayout;\n\n br?.showStatus(...msgs);\n }\n\n /** @summary Returns true if GED is present on the canvas */\n hasGed() {\n if (this.testUI5()) return false;\n return this.brlayout?.hasContent() ?? false;\n }\n\n /** @summary Function used to de-activate GED\n * @private */\n removeGed() {\n if (this.testUI5()) return;\n\n this.registerForPadEvents(null);\n\n if (this.ged_view) {\n this.ged_view.getController().cleanupGed();\n this.ged_view.destroy();\n delete this.ged_view;\n }\n this.brlayout?.deleteContent(true);\n this.processChanges('sbits', this);\n }\n\n /** @summary Get view data for ui5 panel\n * @private */\n getUi5PanelData(/* panel_name */) {\n return { jsroot: { settings, create, parse, toJSON, loadScript, EAxisBits, getColorExec } };\n }\n\n /** @summary Function used to activate GED\n * @return {Promise} when GED is there\n * @private */\n async activateGed(objpainter, kind, mode) {\n if (this.testUI5() || !this.brlayout)\n return false;\n\n if (this.brlayout.hasContent()) {\n if ((mode === 'toggle') || (mode === false))\n this.removeGed();\n else\n objpainter?.getPadPainter()?.selectObjectPainter(objpainter);\n\n return true;\n }\n\n if (mode === false)\n return false;\n\n let btns = this.brlayout.createBrowserBtns();\n\n ToolbarIcons.createSVG(btns, ToolbarIcons.diamand, 15, 'toggle fix-pos mode')\n .style('margin','3px').on('click', () => this.brlayout.toggleKind('fix'));\n\n ToolbarIcons.createSVG(btns, ToolbarIcons.circle, 15, 'toggle float mode')\n .style('margin','3px').on('click', () => this.brlayout.toggleKind('float'));\n\n ToolbarIcons.createSVG(btns, ToolbarIcons.cross, 15, 'delete GED')\n .style('margin','3px').on('click', () => this.removeGed());\n\n // be aware, that jsroot_browser_hierarchy required for flexible layout that element use full browser area\n this.brlayout.setBrowserContent(\"
Loading GED ...
\");\n this.brlayout.setBrowserTitle('GED');\n this.brlayout.toggleBrowserKind(kind || 'float');\n\n return new Promise(resolveFunc => {\n\n loadOpenui5.then(sap => {\n\n d3_select('#ged_placeholder').text('');\n\n sap.ui.define(['sap/ui/model/json/JSONModel', 'sap/ui/core/mvc/XMLView'], (JSONModel,XMLView) => {\n\n let oModel = new JSONModel({ handle: null });\n\n XMLView.create({\n viewName: 'rootui5.canv.view.Ged',\n viewData: this.getUi5PanelData('Ged')\n }).then(oGed => {\n\n oGed.setModel(oModel);\n\n oGed.placeAt('ged_placeholder');\n\n this.ged_view = oGed;\n\n // TODO: should be moved into Ged controller - it must be able to detect canvas painter itself\n this.registerForPadEvents(oGed.getController().padEventsReceiver.bind(oGed.getController()));\n\n objpainter?.getPadPainter()?.selectObjectPainter(objpainter);\n\n this.processChanges('sbits', this);\n\n resolveFunc(true);\n });\n });\n });\n });\n }\n\n /** @summary produce JSON for RCanvas, which can be used to display canvas once again\n * @private */\n produceJSON() {\n console.error('RCanvasPainter.produceJSON not yet implemented');\n return '';\n }\n\n /** @summary draw RCanvas object */\n static async draw(dom, can /*, opt */) {\n let nocanvas = !can;\n if (nocanvas)\n can = create('ROOT::Experimental::RCanvas');\n\n let painter = new RCanvasPainter(dom, can);\n painter.normal_canvas = !nocanvas;\n painter.createCanvasSvg(0);\n\n selectActivePad({ pp: painter, active: false });\n\n return painter.drawPrimitives().then(() => {\n painter.addPadButtons();\n painter.showPadButtons();\n return painter;\n });\n }\n\n} // class RCanvasPainter\n\n\n/** @summary draw RPadSnapshot object\n * @private */\nfunction drawRPadSnapshot(dom, snap /*, opt*/) {\n let painter = new RCanvasPainter(dom, null);\n painter.normal_canvas = false;\n painter.batch_mode = isBatchMode();\n return painter.syncDraw(true).then(() => painter.redrawPadSnap(snap)).then(() => {\n painter.confirmDraw();\n painter.showPadButtons();\n return painter;\n });\n}\n\n/** @summary Ensure RCanvas and RFrame for the painter object\n * @param {Object} painter - painter object to process\n * @param {string|boolean} frame_kind - false for no frame or '3d' for special 3D mode\n * @desc Assigns DOM, creates and draw RCanvas and RFrame if necessary, add painter to pad list of painters\n * @return {Promise} for ready */\nasync function ensureRCanvas(painter, frame_kind) {\n if (!painter)\n return Promise.reject(Error('Painter not provided in ensureRCanvas'));\n\n // simple check - if canvas there, can use painter\n let pr = painter.getCanvSvg().empty() ? RCanvasPainter.draw(painter.getDom(), null /* , noframe */) : Promise.resolve(true);\n\n return pr.then(() => {\n if ((frame_kind !== false) && painter.getFrameSvg().select('.main_layer').empty())\n return RFramePainter.draw(painter.getDom(), null, isStr(frame_kind) ? frame_kind : '');\n }).then(() => {\n painter.addToPadPrimitives();\n return painter;\n });\n}\n\n\n/** @summary Function used for direct draw of RFrameTitle\n * @private */\nfunction drawRFrameTitle(reason, drag) {\n let fp = this.getFramePainter();\n if (!fp)\n return console.log('no frame painter - no title');\n\n let rect = fp.getFrameRect(),\n fx = rect.x,\n fy = rect.y,\n fw = rect.width,\n // fh = rect.height,\n ph = this.getPadPainter().getPadHeight(),\n title = this.getObject(),\n title_margin = this.v7EvalLength('margin', ph, 0.02),\n title_width = fw,\n title_height = this.v7EvalLength('height', ph, 0.05),\n textFont = this.v7EvalFont('text', { size: 0.07, color: 'black', align: 22 });\n\n if (reason == 'drag') {\n title_height = drag.height;\n title_margin = fy - drag.y - drag.height;\n let changes = {};\n this.v7AttrChange(changes, 'margin', title_margin / ph);\n this.v7AttrChange(changes, 'height', title_height / ph);\n this.v7SendAttrChanges(changes, false); // do not invoke canvas update on the server\n }\n\n this.createG();\n\n this.draw_g.attr('transform',`translate(${fx},${Math.round(fy-title_margin-title_height)})`);\n\n let arg = { x: title_width/2, y: title_height/2, text: title.fText, latex: 1 };\n\n this.startTextDrawing(textFont, 'font');\n\n this.drawText(arg);\n\n return this.finishTextDrawing().then(() => {\n if (!isBatchMode())\n addDragHandler(this, { x: fx, y: Math.round(fy-title_margin-title_height), width: title_width, height: title_height,\n minwidth: 20, minheight: 20, no_change_x: true, redraw: d => this.redraw('drag', d) });\n });\n}\n\n////////////////////////////////////////////////////////////////////////////////////////////\n\nregisterMethods('ROOT::Experimental::RPalette', {\n\n extractRColor(rcolor) {\n return rcolor.fColor || 'black';\n },\n\n getColor(indx) {\n return this.palette[indx];\n },\n\n getContourIndex(zc) {\n let cntr = this.fContour, l = 0, r = cntr.length-1, mid;\n\n if (zc < cntr[0]) return -1;\n if (zc >= cntr[r]) return r-1;\n\n if (this.fCustomContour) {\n while (l < r-1) {\n mid = Math.round((l+r)/2);\n if (cntr[mid] > zc) r = mid; else l = mid;\n }\n return l;\n }\n\n // last color in palette starts from level cntr[r-1]\n return Math.floor((zc-cntr[0]) / (cntr[r-1] - cntr[0]) * (r-1));\n },\n\n getContourColor(zc) {\n let zindx = this.getContourIndex(zc);\n return (zindx < 0) ? '' : this.getColor(zindx);\n },\n\n getContour() {\n return this.fContour && (this.fContour.length > 1) ? this.fContour : null;\n },\n\n deleteContour() {\n delete this.fContour;\n },\n\n calcColor(value, entry1, entry2) {\n let dist = entry2.fOrdinal - entry1.fOrdinal,\n r1 = entry2.fOrdinal - value,\n r2 = value - entry1.fOrdinal;\n\n if (!this.fInterpolate || (dist <= 0))\n return (r1 < r2) ? entry2.fColor : entry1.fColor;\n\n // interpolate\n let col1 = d3_rgb(this.extractRColor(entry1.fColor)),\n col2 = d3_rgb(this.extractRColor(entry2.fColor)),\n color = d3_rgb(Math.round((col1.r*r1 + col2.r*r2)/dist),\n Math.round((col1.g*r1 + col2.g*r2)/dist),\n Math.round((col1.b*r1 + col2.b*r2)/dist));\n\n return color.toString();\n },\n\n createPaletteColors(len) {\n let arr = [], indx = 0;\n\n while (arr.length < len) {\n let value = arr.length / (len-1);\n\n let entry = this.fColors[indx];\n\n if ((Math.abs(entry.fOrdinal - value) < 0.0001) || (indx == this.fColors.length - 1)) {\n arr.push(this.extractRColor(entry.fColor));\n continue;\n }\n\n let next = this.fColors[indx+1];\n if (next.fOrdinal <= value)\n indx++;\n else\n arr.push(this.calcColor(value, entry, next));\n }\n\n return arr;\n },\n\n getColorOrdinal(value) {\n // extract color with ordinal value between 0 and 1\n if (!this.fColors)\n return 'black';\n if ((typeof value != 'number') || (value < 0))\n value = 0;\n else if (value > 1)\n value = 1;\n\n // TODO: implement better way to find index\n\n let entry, next = this.fColors[0];\n for (let indx = 0; indx < this.fColors.length-1; ++indx) {\n entry = next;\n\n if (Math.abs(entry.fOrdinal - value) < 0.0001)\n return this.extractRColor(entry.fColor);\n\n next = this.fColors[indx+1];\n if (next.fOrdinal > value)\n return this.calcColor(value, entry, next);\n }\n\n return this.extractRColor(next.fColor);\n },\n\n setFullRange(min, max) {\n // set full z scale range, used in zooming\n this.full_min = min;\n this.full_max = max;\n },\n\n createContour(logz, nlevels, zmin, zmax, zminpositive) {\n this.fContour = [];\n delete this.fCustomContour;\n this.colzmin = zmin;\n this.colzmax = zmax;\n\n if (logz) {\n if (this.colzmax <= 0) this.colzmax = 1.;\n if (this.colzmin <= 0)\n if ((zminpositive === undefined) || (zminpositive <= 0))\n this.colzmin = 0.0001*this.colzmax;\n else\n this.colzmin = ((zminpositive < 3) || (zminpositive>100)) ? 0.3*zminpositive : 1;\n if (this.colzmin >= this.colzmax) this.colzmin = 0.0001*this.colzmax;\n\n let logmin = Math.log(this.colzmin)/Math.log(10),\n logmax = Math.log(this.colzmax)/Math.log(10),\n dz = (logmax-logmin)/nlevels;\n this.fContour.push(this.colzmin);\n for (let level=1; level painter.redraw())\n .then(() => painter);\n}\n\n/** @summary draw RFrame object\n * @private */\nfunction drawRFrame(dom, obj, opt) {\n let p = new RFramePainter(dom, obj);\n if (opt == '3d') p.mode3d = true;\n return ensureRCanvas(p, false).then(() => p.redraw());\n}\n\nexport { ensureRCanvas, drawRPadSnapshot,\n drawRFrameTitle, drawRFont, drawRAxis, drawRFrame,\n RObjectPainter, RPadPainter, RCanvasPainter };\n"],"x_google_ignoreList":[0,1,2,3,4,5]} \ No newline at end of file diff --git a/docs/579.8c087840c9033381.js.map b/docs/579.8c087840c9033381.js.map deleted file mode 100644 index 086406230..000000000 --- a/docs/579.8c087840c9033381.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"579.8c087840c9033381.js","mappings":"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","names":["RH3Painter","RHistPainter","getDimension","scanContent","when_axis_changed","this","nbinsx","nbinsy","nbinsz","histo","getHisto","extractAxesProperties","isDisplayItem","gminbin","fContMin","gminposbin","fContMinPos","gmaxbin","fContMax","getBinContent","i","j","k","bin_content","draw_content","countStat","xi","yi","zi","xx","xside","yy","yside","zz","zside","cont","xaxis","getAxis","yaxis","zaxis","stat_sum0","stat_sumx1","stat_sumy1","stat_sumz1","stat_sumx2","stat_sumy2","stat_sumz2","i1","getSelectIndex","i2","j1","j2","k1","k2","res","getFramePainter","name","fName","entries","integral","meanx","meany","meanz","rmsx","rmsy","rmsz","GetBinCoord","Math","abs","sqrt","fEntries","fillStatistic","stat","dostat","data","print_name","print_entries","floor","print_mean","print_rms","print_integral","clearStat","addText","format","getBinTooltips","ix","iy","iz","lines","dx","dy","dz","stepx","stepy","stepz","push","getObjectHint","getAxisBinTip","binz","lbl","round","floatToString","gStyle","draw3DScatter","handle","_this","main","di","stepi","dj","stepj","dk","stepk","coef","numpixels","sumz","content_lmt","max","webgl","pnts","PointsCreator","size_x3d","bins","Int32Array","nbin","rnd","TRandom","num","n","binx","random","biny","getBin","addPoint","grx","gry","grz","createPoints","color","v7EvalColor","then","mesh","toplevel","add","painter","tip_color","tooltip","intersect","Number","isInteger","index","console","error","REVISION","indx","nvertex","length","p","tip","get3DToolTip","x1","GetBinLowEdge","x2","y1","y2","z1","z2","opacity","draw3DBins","single_bin_verts","single_bin_norms","fillcolor","buffer_size","use_lambert","use_helper","use_colors","use_opacity","use_scale","tipscale","options","Sphere","geom","SphereGeometry","applyMatrix4","Matrix4","makeRotationX","PI","computeVertexNormals","getIndex","array","pos","getAttribute","norm","Float32Array","iii","indicies","Box3D","normals","vertices","nn","vert","x","y","z","Box","Color","palette","getHistPalette","createContour","wei","scalex","scaley","scalez","nbins","cols_size","num_colors","cols_sequence","pow","colindx","getContourIndex","undefined","cols_nbins","Array","bin_verts","bin_norms","bin_tooltips","helper_kind","helper_indexes","helper_positions","ncol","nseq","Uint16Array","GetBinCenter","vvv","bin_v","bin_n","vi","helper_segments","shift","helper_i","helper_p","all_bins_buffgeom","BufferGeometry","setAttribute","BufferAttribute","getColor","material","MeshLambertMaterial","transparent","vertexColors","MeshBasicMaterial","combined_bins","Mesh","bins_faces","faceIndex","value","lcolor","helper_material","LineBasicMaterial","createLineSegments","updatePaletteDraw","draw3D","prepareDraw","only_indexes","extra","right_extra","Scatter","Promise","resolve","redraw","reason","resize3D","render3D","assignFrame3DMethods","create3DScene","Render3D","setAxesRanges","xmin","xmax","ymin","ymax","zmin","zmax","set3DOptions","drawXYZ","RAxisPainter","zoom","settings","ndim","draw","v7","drawingBins","addKeysHandler","fillToolbar","pp","getPadPainter","addPadButton","showPadButtons","canZoomInside","axis","min","obj","toUpperCase","FindBin","autoZoom","ileft","iright","jleft","jright","kleft","kright","isany","fillHistContextMenu","menu","opts","getSupportedDrawOptions","addDrawMenu","arg","showInspector","decodeOptions","interactiveRedraw","static","dom","mode3d","ensureRCanvas","setAsMainPainter","minimum","kNoZoom","maximum","kind","v7EvalAttr","sub","o","drawHistDisplayItem","opt","fAxes","RH1Painter","RH2Painter"],"sourceRoot":"webpack:///","sources":["../node_modules/jsroot/modules/hist/RH3Painter.mjs"],"sourcesContent":["import { gStyle, settings, kNoZoom } from '../core.mjs';\nimport { REVISION, Matrix4, Mesh, MeshBasicMaterial, MeshLambertMaterial, SphereGeometry,\n LineBasicMaterial, BufferAttribute, BufferGeometry } from '../three.mjs';\nimport { floatToString, TRandom } from '../base/BasePainter.mjs';\nimport { ensureRCanvas } from '../gpad/RCanvasPainter.mjs';\nimport { RAxisPainter } from '../gpad/RAxisPainter.mjs';\nimport { RHistPainter } from '../hist2d/RHistPainter.mjs';\nimport { createLineSegments, PointsCreator, Box3D } from '../base/base3d.mjs';\nimport { RH1Painter } from './RH1Painter.mjs';\nimport { RH2Painter } from './RH2Painter.mjs';\nimport { assignFrame3DMethods } from './hist3d.mjs';\n\n/**\n * @summary Painter for RH3 classes\n *\n * @private\n */\n\nclass RH3Painter extends RHistPainter {\n\n /** @summary Returns histogram dimension */\n getDimension() { return 3; }\n\n scanContent(when_axis_changed) {\n\n // no need to rescan histogram while result does not depend from axis selection\n if (when_axis_changed && this.nbinsx && this.nbinsy && this.nbinsz) return;\n\n let histo = this.getHisto();\n if (!histo) return;\n\n this.extractAxesProperties(3);\n\n // global min/max, used at the moment in 3D drawing\n\n if (this.isDisplayItem()) {\n // take min/max values from the display item\n this.gminbin = histo.fContMin;\n this.gminposbin = histo.fContMinPos > 0 ? histo.fContMinPos : null;\n this.gmaxbin = histo.fContMax;\n } else {\n this.gminbin = this.gmaxbin = histo.getBinContent(1,1,1);\n\n for (let i = 0; i < this.nbinsx; ++i)\n for (let j = 0; j < this.nbinsy; ++j)\n for (let k = 0; k < this.nbinsz; ++k) {\n let bin_content = histo.getBinContent(i+1, j+1, k+1);\n if (bin_content < this.gminbin) this.gminbin = bin_content; else\n if (bin_content > this.gmaxbin) this.gmaxbin = bin_content;\n }\n }\n\n this.draw_content = this.gmaxbin > 0;\n }\n\n /** @summary Count histogram statistic */\n countStat() {\n let histo = this.getHisto(),\n xaxis = this.getAxis('x'),\n yaxis = this.getAxis('y'),\n zaxis = this.getAxis('z'),\n stat_sum0 = 0, stat_sumx1 = 0, stat_sumy1 = 0,\n stat_sumz1 = 0, stat_sumx2 = 0, stat_sumy2 = 0, stat_sumz2 = 0,\n i1 = this.getSelectIndex('x', 'left'),\n i2 = this.getSelectIndex('x', 'right'),\n j1 = this.getSelectIndex('y', 'left'),\n j2 = this.getSelectIndex('y', 'right'),\n k1 = this.getSelectIndex('z', 'left'),\n k2 = this.getSelectIndex('z', 'right'),\n fp = this.getFramePainter(),\n res = { name: histo.fName, entries: 0, integral: 0, meanx: 0, meany: 0, meanz: 0, rmsx: 0, rmsy: 0, rmsz: 0 },\n xi, yi, zi, xx, xside, yy, yside, zz, zside, cont;\n\n for (xi = 1; xi <= this.nbinsx; ++xi) {\n\n xx = xaxis.GetBinCoord(xi - 0.5);\n xside = (xi <= i1+1) ? 0 : (xi > i2+1 ? 2 : 1);\n\n for (yi = 1; yi <= this.nbinsy; ++yi) {\n\n yy = yaxis.GetBinCoord(yi - 0.5);\n yside = (yi <= j1+1) ? 0 : (yi > j2+1 ? 2 : 1);\n\n for (zi = 1; zi <= this.nbinsz; ++zi) {\n\n zz = zaxis.GetBinCoord(zi - 0.5);\n zside = (zi <= k1+1) ? 0 : (zi > k2+1 ? 2 : 1);\n\n cont = histo.getBinContent(xi, yi, zi);\n res.entries += cont;\n\n if ((xside == 1) && (yside == 1) && (zside == 1)) {\n stat_sum0 += cont;\n stat_sumx1 += xx * cont;\n stat_sumy1 += yy * cont;\n stat_sumz1 += zz * cont;\n stat_sumx2 += xx**2 * cont;\n stat_sumy2 += yy**2 * cont;\n stat_sumz2 += zz**2 * cont;\n }\n }\n }\n }\n\n if (Math.abs(stat_sum0) > 1e-300) {\n res.meanx = stat_sumx1 / stat_sum0;\n res.meany = stat_sumy1 / stat_sum0;\n res.meanz = stat_sumz1 / stat_sum0;\n res.rmsx = Math.sqrt(Math.abs(stat_sumx2 / stat_sum0 - res.meanx**2));\n res.rmsy = Math.sqrt(Math.abs(stat_sumy2 / stat_sum0 - res.meany**2));\n res.rmsz = Math.sqrt(Math.abs(stat_sumz2 / stat_sum0 - res.meanz**2));\n }\n\n res.integral = stat_sum0;\n\n if (histo.fEntries > 1)\n res.entries = histo.fEntries;\n\n return res;\n }\n\n /** @summary Fill statistic */\n fillStatistic(stat, dostat /*, dofit */) {\n\n let data = this.countStat(),\n print_name = dostat % 10,\n print_entries = Math.floor(dostat / 10) % 10,\n print_mean = Math.floor(dostat / 100) % 10,\n print_rms = Math.floor(dostat / 1000) % 10,\n // print_under = Math.floor(dostat / 10000) % 10,\n // print_over = Math.floor(dostat / 100000) % 10,\n print_integral = Math.floor(dostat / 1000000) % 10;\n // print_skew = Math.floor(dostat / 10000000) % 10;\n // print_kurt = Math.floor(dostat / 100000000) % 10;\n\n stat.clearStat();\n\n if (print_name > 0)\n stat.addText(data.name);\n\n if (print_entries > 0)\n stat.addText('Entries = ' + stat.format(data.entries,'entries'));\n\n if (print_mean > 0) {\n stat.addText('Mean x = ' + stat.format(data.meanx));\n stat.addText('Mean y = ' + stat.format(data.meany));\n stat.addText('Mean z = ' + stat.format(data.meanz));\n }\n\n if (print_rms > 0) {\n stat.addText('Std Dev x = ' + stat.format(data.rmsx));\n stat.addText('Std Dev y = ' + stat.format(data.rmsy));\n stat.addText('Std Dev z = ' + stat.format(data.rmsz));\n }\n\n if (print_integral > 0) {\n stat.addText('Integral = ' + stat.format(data.integral,'entries'));\n }\n\n return true;\n }\n\n /** @summary Provide text information (tooltips) for histogram bin */\n getBinTooltips(ix, iy, iz) {\n let lines = [], histo = this.getHisto(),\n dx = 1, dy = 1, dz = 1;\n\n if (this.isDisplayItem()) {\n dx = histo.stepx || 1;\n dy = histo.stepy || 1;\n dz = histo.stepz || 1;\n }\n\n lines.push(this.getObjectHint());\n\n lines.push(`x = ${this.getAxisBinTip('x', ix, dx)} xbin=${ix+1}`);\n lines.push(`y = ${this.getAxisBinTip('y', iy, dy)} ybin=${iy+1}`);\n lines.push(`z = ${this.getAxisBinTip('z', iz, dz)} zbin=${iz+1}`);\n\n let binz = histo.getBinContent(ix+1, iy+1, iz+1),\n lbl = 'entries = '+ ((dx > 1) || (dy > 1) || (dz > 1) ? '~' : '');\n if (binz === Math.round(binz))\n lines.push(lbl + binz);\n else\n lines.push(lbl + floatToString(binz, gStyle.fStatFormat));\n\n return lines;\n }\n\n /** @summary Try to draw 3D histogram as scatter plot\n * @desc If there are too many points, returns promise with false */\n async draw3DScatter(handle) {\n\n let histo = this.getHisto(),\n main = this.getFramePainter(),\n i1 = handle.i1, i2 = handle.i2, di = handle.stepi,\n j1 = handle.j1, j2 = handle.j2, dj = handle.stepj,\n k1 = handle.k1, k2 = handle.k2, dk = handle.stepk,\n i, j, k, bin_content;\n\n if ((i2 <= i1) || (j2 <= j1) || (k2 <= k1))\n return true;\n\n // scale down factor if too large values\n let coef = (this.gmaxbin > 1000) ? 1000/this.gmaxbin : 1,\n numpixels = 0, sumz = 0, content_lmt = Math.max(0, this.gminbin);\n\n for (i = i1; i < i2; i += di) {\n for (j = j1; j < j2; j += dj) {\n for (k = k1; k < k2; k += dk) {\n bin_content = histo.getBinContent(i+1, j+1, k+1);\n sumz += bin_content;\n if (bin_content <= content_lmt) continue;\n numpixels += Math.round(bin_content*coef);\n }\n }\n }\n\n // too many pixels - use box drawing\n if (numpixels > (main.webgl ? 100000 : 30000))\n return false;\n\n let pnts = new PointsCreator(numpixels, main.webgl, main.size_x3d/200),\n bins = new Int32Array(numpixels), nbin = 0,\n xaxis = this.getAxis('x'), yaxis = this.getAxis('y'), zaxis = this.getAxis('z'),\n rnd = new TRandom(sumz);\n\n for (i = i1; i < i2; i += di) {\n for (j = j1; j < j2; j += dj) {\n for (k = k1; k < k2; k += dk) {\n bin_content = histo.getBinContent(i+1, j+1, k+1);\n if (bin_content <= content_lmt) continue;\n let num = Math.round(bin_content*coef);\n\n for (let n=0;n {\n main.toplevel.add(mesh);\n\n mesh.bins = bins;\n mesh.painter = this;\n mesh.tip_color = 0x00FF00;\n\n mesh.tooltip = function(intersect) {\n if (!Number.isInteger(intersect.index)) {\n console.error(`intersect.index not provided, three.js version ${REVISION}`);\n return null;\n }\n\n let indx = Math.floor(intersect.index / this.nvertex);\n if ((indx < 0) || (indx >= this.bins.length)) return null;\n\n let p = this.painter,\n main = p.getFramePainter(),\n tip = p.get3DToolTip(this.bins[indx]);\n\n tip.x1 = main.grx(p.getAxis('x').GetBinLowEdge(tip.ix));\n tip.x2 = main.grx(p.getAxis('x').GetBinLowEdge(tip.ix+di));\n tip.y1 = main.gry(p.getAxis('y').GetBinLowEdge(tip.iy));\n tip.y2 = main.gry(p.getAxis('y').GetBinLowEdge(tip.iy+dj));\n tip.z1 = main.grz(p.getAxis('z').GetBinLowEdge(tip.iz));\n tip.z2 = main.grz(p.getAxis('z').GetBinLowEdge(tip.iz+dk));\n tip.color = this.tip_color;\n tip.opacity = 0.3;\n\n return tip;\n };\n\n return true;\n });\n }\n\n /** @summary Drawing of 3D histogram */\n draw3DBins(handle) {\n\n let fillcolor = this.v7EvalColor('fill_color', 'red'),\n main = this.getFramePainter(),\n buffer_size = 0, use_lambert = false,\n use_helper = false, use_colors = false, use_opacity = 1, use_scale = true,\n single_bin_verts, single_bin_norms,\n tipscale = 0.5;\n\n if (this.options.Sphere) {\n\n // drawing spheres\n tipscale = 0.4;\n use_lambert = true;\n if (this.options.Sphere === 11) use_colors = true;\n\n let geom = main.webgl ? new SphereGeometry(0.5, 16, 12) : new SphereGeometry(0.5, 8, 6);\n geom.applyMatrix4( new Matrix4().makeRotationX( Math.PI / 2 ) );\n geom.computeVertexNormals();\n\n let indx = geom.getIndex().array,\n pos = geom.getAttribute('position').array,\n norm = geom.getAttribute('normal').array;\n\n buffer_size = indx.length*3;\n single_bin_verts = new Float32Array(buffer_size);\n single_bin_norms = new Float32Array(buffer_size);\n\n for (let k=0;k= 0) {\n if (cols_size[colindx] === undefined) {\n cols_size[colindx] = 0;\n cols_sequence[colindx] = num_colors++;\n }\n cols_size[colindx]+=1;\n } else {\n console.error(`not found color for value = ${bin_content}`);\n }\n }\n }\n }\n\n if (!use_colors) {\n cols_size.push(nbins);\n num_colors = 1;\n cols_sequence = [0];\n }\n\n let cols_nbins = new Array(num_colors),\n bin_verts = new Array(num_colors),\n bin_norms = new Array(num_colors),\n bin_tooltips = new Array(num_colors),\n helper_kind = new Array(num_colors),\n helper_indexes = new Array(num_colors), // helper_kind == 1, use original vertices\n helper_positions = new Array(num_colors); // helper_kind == 2, all vertices copied into separate buffer\n\n for(let ncol = 0; ncol < cols_size.length; ++ncol) {\n if (!cols_size[ncol]) continue; // ignore dummy colors\n\n nbins = cols_size[ncol]; // how many bins with specified color\n let nseq = cols_sequence[ncol];\n\n cols_nbins[nseq] = 0; // counter for the filled bins\n\n helper_kind[nseq] = 0;\n\n // 1 - use same vertices to create helper, one can use maximal 64K vertices\n // 2 - all vertices copied into separate buffer\n if (use_helper)\n helper_kind[nseq] = (nbins * buffer_size / 3 > 0xFFF0) ? 2 : 1;\n\n bin_verts[nseq] = new Float32Array(nbins * buffer_size);\n bin_norms[nseq] = new Float32Array(nbins * buffer_size);\n bin_tooltips[nseq] = new Int32Array(nbins);\n\n if (helper_kind[nseq] === 1)\n helper_indexes[nseq] = new Uint16Array(nbins * Box3D.MeshSegments.length);\n\n if (helper_kind[nseq] === 2)\n helper_positions[nseq] = new Float32Array(nbins * Box3D.Segments.length * 3);\n }\n\n let binx, grx, biny, gry, binz, grz;\n xaxis = this.getAxis('x'),\n yaxis = this.getAxis('y'),\n zaxis = this.getAxis('z');\n\n for (i = i1; i < i2; i += di) {\n binx = xaxis.GetBinCenter(i+1); grx = main.grx(binx);\n for (j = j1; j < j2; j += dj) {\n biny = yaxis.GetBinCenter(j+1); gry = main.gry(biny);\n for (k = k1; k < k2; k +=dk) {\n bin_content = histo.getBinContent(i+1, j+1, k+1);\n if (!this.options.Color && ((bin_content === 0) || (bin_content < this.gminbin))) continue;\n\n wei = use_scale ? Math.pow(Math.abs(bin_content*use_scale), 0.3333) : 1;\n if (wei < 1e-3) continue; // do not show very small bins\n\n let nseq = 0;\n if (use_colors) {\n let colindx = palette.getContourIndex(bin_content);\n if (colindx < 0) continue;\n nseq = cols_sequence[colindx];\n }\n\n nbins = cols_nbins[nseq];\n\n binz = zaxis.GetBinCenter(k+1); grz = main.grz(binz);\n\n // remember bin index for tooltip\n bin_tooltips[nseq][nbins] = histo.getBin(i+1, j+1, k+1);\n\n let vvv = nbins * buffer_size, bin_v = bin_verts[nseq], bin_n = bin_norms[nseq];\n\n // Grab the coordinates and scale that are being assigned to each bin\n for (let vi = 0; vi < buffer_size; vi+=3, vvv+=3) {\n bin_v[vvv] = grx + single_bin_verts[vi]*scalex*wei;\n bin_v[vvv+1] = gry + single_bin_verts[vi+1]*scaley*wei;\n bin_v[vvv+2] = grz + single_bin_verts[vi+2]*scalez*wei;\n\n bin_n[vvv] = single_bin_norms[vi];\n bin_n[vvv+1] = single_bin_norms[vi+1];\n bin_n[vvv+2] = single_bin_norms[vi+2];\n }\n\n if (helper_kind[nseq] === 1) {\n // reuse vertices created for the mesh\n let helper_segments = Box3D.MeshSegments;\n vvv = nbins * helper_segments.length;\n let shift = Math.round(nbins * buffer_size/3),\n helper_i = helper_indexes[nseq];\n for (let n = 0; n < helper_segments.length; ++n)\n helper_i[vvv+n] = shift + helper_segments[n];\n }\n\n if (helper_kind[nseq] === 2) {\n let helper_segments = Box3D.Segments,\n helper_p = helper_positions[nseq];\n vvv = nbins * helper_segments.length * 3;\n for (let n = 0; n < helper_segments.length; ++n, vvv += 3) {\n let vert = Box3D.Vertices[helper_segments[n]];\n helper_p[vvv] = grx + (vert.x-0.5)*scalex*wei;\n helper_p[vvv+1] = gry + (vert.y-0.5)*scaley*wei;\n helper_p[vvv+2] = grz + (vert.z-0.5)*scalez*wei;\n }\n }\n\n cols_nbins[nseq] = nbins+1;\n }\n }\n }\n\n for (let ncol = 0; ncol < cols_size.length; ++ncol) {\n if (!cols_size[ncol]) continue; // ignore dummy colors\n\n let nseq = cols_sequence[ncol];\n\n // BufferGeometries that store geometry of all bins\n let all_bins_buffgeom = new BufferGeometry();\n\n // Create mesh from bin buffergeometry\n all_bins_buffgeom.setAttribute('position', new BufferAttribute(bin_verts[nseq], 3));\n all_bins_buffgeom.setAttribute('normal', new BufferAttribute(bin_norms[nseq], 3));\n\n if (use_colors) fillcolor = palette.getColor(ncol);\n\n let material = use_lambert ? new MeshLambertMaterial({ color: fillcolor, opacity: use_opacity, transparent: (use_opacity < 1), vertexColors: false })\n : new MeshBasicMaterial({ color: fillcolor, opacity: use_opacity, vertexColors: false });\n\n let combined_bins = new Mesh(all_bins_buffgeom, material);\n\n combined_bins.bins = bin_tooltips[nseq];\n combined_bins.bins_faces = buffer_size/9;\n combined_bins.painter = this;\n\n combined_bins.scalex = tipscale*scalex;\n combined_bins.scaley = tipscale*scaley;\n combined_bins.scalez = tipscale*scalez;\n combined_bins.tip_color = 0x00FF00;\n combined_bins.use_scale = use_scale;\n\n combined_bins.tooltip = function(intersect) {\n if (!Number.isInteger(intersect.faceIndex)) {\n console.error(`intersect.faceIndex not provided, three.js version ${REVISION}`);\n return null;\n }\n let indx = Math.floor(intersect.faceIndex / this.bins_faces);\n if ((indx < 0) || (indx >= this.bins.length)) return null;\n\n let p = this.painter,\n main = p.getFramePainter(),\n tip = p.get3DToolTip(this.bins[indx]),\n grx = main.grx(p.getAxis('x').GetBinCoord(tip.ix-0.5)),\n gry = main.gry(p.getAxis('y').GetBinCoord(tip.iy-0.5)),\n grz = main.grz(p.getAxis('z').GetBinCoord(tip.iz-0.5)),\n wei = this.use_scale ? Math.pow(Math.abs(tip.value*this.use_scale), 0.3333) : 1;\n\n tip.x1 = grx - this.scalex*wei; tip.x2 = grx + this.scalex*wei;\n tip.y1 = gry - this.scaley*wei; tip.y2 = gry + this.scaley*wei;\n tip.z1 = grz - this.scalez*wei; tip.z2 = grz + this.scalez*wei;\n\n tip.color = this.tip_color;\n\n return tip;\n };\n\n main.toplevel.add(combined_bins);\n\n if (helper_kind[nseq] > 0) {\n let lcolor = this.v7EvalColor('line_color', 'lightblue'),\n helper_material = new LineBasicMaterial({ color: lcolor }),\n lines = null;\n\n if (helper_kind[nseq] === 1) {\n // reuse positions from the mesh - only special index was created\n lines = createLineSegments(bin_verts[nseq], helper_material, helper_indexes[nseq]);\n } else {\n lines = createLineSegments(helper_positions[nseq], helper_material);\n }\n\n main.toplevel.add(lines);\n }\n }\n\n if (use_colors)\n this.updatePaletteDraw();\n }\n\n draw3D() {\n\n if (!this.draw_content)\n return false;\n\n //this.options.Scatter = false;\n //this.options.Box = true;\n\n let handle = this.prepareDraw({ only_indexes: true, extra: -0.5, right_extra: -1 });\n\n let pr = this.options.Scatter ? this.draw3DScatter(handle) : Promise.resolve(false);\n\n return pr.then(res => {\n return res ? res : this.draw3DBins(handle);\n });\n }\n\n\n /** @summary Redraw histogram*/\n redraw(reason) {\n\n let main = this.getFramePainter(); // who makes axis and 3D drawing\n\n if (reason == 'resize') {\n if (main.resize3D()) main.render3D();\n return this;\n }\n\n assignFrame3DMethods(main);\n return main.create3DScene(this.options.Render3D).then(() => {\n main.setAxesRanges(this.getAxis('x'), this.xmin, this.xmax, this.getAxis('y'), this.ymin, this.ymax, this.getAxis('z'), this.zmin, this.zmax);\n main.set3DOptions(this.options);\n main.drawXYZ(main.toplevel, RAxisPainter, { zoom: settings.Zooming, ndim: 3, draw: true, v7: true });\n return this.drawingBins(reason);\n }).then(() => this.draw3D()).then(() => {\n main.render3D();\n main.addKeysHandler();\n return this;\n });\n }\n\n /** @summary Fill pad toolbar with RH3-related functions */\n fillToolbar() {\n let pp = this.getPadPainter();\n if (!pp) return;\n\n pp.addPadButton('auto_zoom', 'Unzoom all axes', 'ToggleZoom', 'Ctrl *');\n if (this.draw_content)\n pp.addPadButton('statbox', 'Toggle stat box', 'ToggleStatBox');\n pp.showPadButtons();\n }\n\n /** @summary Checks if it makes sense to zoom inside specified axis range */\n canZoomInside(axis, min, max) {\n let obj = this.getHisto();\n if (obj) obj = obj['f'+axis.toUpperCase()+'axis'];\n return !obj || (obj.FindBin(max,0.5) - obj.FindBin(min,0) > 1);\n }\n\n /** @summary Perform automatic zoom inside non-zero region of histogram */\n autoZoom() {\n let i1 = this.getSelectIndex('x', 'left'),\n i2 = this.getSelectIndex('x', 'right'),\n j1 = this.getSelectIndex('y', 'left'),\n j2 = this.getSelectIndex('y', 'right'),\n k1 = this.getSelectIndex('z', 'left'),\n k2 = this.getSelectIndex('z', 'right'),\n i, j, k, histo = this.getHisto();\n\n if ((i1 === i2) || (j1 === j2) || (k1 === k2)) return;\n\n // first find minimum\n let min = histo.getBinContent(i1 + 1, j1 + 1, k1+1);\n for (i = i1; i < i2; ++i)\n for (j = j1; j < j2; ++j)\n for (k = k1; k < k2; ++k)\n min = Math.min(min, histo.getBinContent(i+1, j+1, k+1));\n\n if (min > 0) return; // if all points positive, no chance for autoscale\n\n let ileft = i2, iright = i1, jleft = j2, jright = j1, kleft = k2, kright = k1;\n\n for (i = i1; i < i2; ++i)\n for (j = j1; j < j2; ++j)\n for (k = k1; k < k2; ++k)\n if (histo.getBinContent(i+1, j+1, k+1) > min) {\n if (i < ileft) ileft = i;\n if (i >= iright) iright = i + 1;\n if (j < jleft) jleft = j;\n if (j >= jright) jright = j + 1;\n if (k < kleft) kleft = k;\n if (k >= kright) kright = k + 1;\n }\n\n let xmin, xmax, ymin, ymax, zmin, zmax, isany = false;\n\n if ((ileft === iright-1) && (ileft > i1+1) && (iright < i2-1)) { ileft--; iright++; }\n if ((jleft === jright-1) && (jleft > j1+1) && (jright < j2-1)) { jleft--; jright++; }\n if ((kleft === kright-1) && (kleft > k1+1) && (kright < k2-1)) { kleft--; kright++; }\n\n if ((ileft > i1 || iright < i2) && (ileft < iright - 1)) {\n xmin = this.getAxis('x').GetBinLowEdge(ileft+1);\n xmax = this.getAxis('x').GetBinLowEdge(iright+1);\n isany = true;\n }\n\n if ((jleft > j1 || jright < j2) && (jleft < jright - 1)) {\n ymin = this.getAxis('y').GetBinLowEdge(jleft+1);\n ymax = this.getAxis('y').GetBinLowEdge(jright+1);\n isany = true;\n }\n\n if ((kleft > k1 || kright < k2) && (kleft < kright - 1)) {\n zmin = this.getAxis('z').GetBinLowEdge(kleft+1);\n zmax = this.getAxis('z').GetBinLowEdge(kright+1);\n isany = true;\n }\n\n if (isany)\n return this.getFramePainter().zoom(xmin, xmax, ymin, ymax, zmin, zmax);\n }\n\n /** @summary Fill histogram context menu */\n fillHistContextMenu(menu) {\n\n let opts = this.getSupportedDrawOptions();\n\n menu.addDrawMenu('Draw with', opts, arg => {\n if (arg === 'inspect')\n return this.showInspector();\n\n this.decodeOptions(arg);\n\n this.interactiveRedraw(true, 'drawopt');\n });\n }\n\n /** @summary draw RH3 object */\n static async draw(dom, histo /*, opt*/) {\n let painter = new RH3Painter(dom, histo);\n painter.mode3d = true;\n\n return ensureRCanvas(painter, '3d').then(() => {\n\n painter.setAsMainPainter();\n\n painter.options = { Box: 0, Scatter: false, Sphere: 0, Color: false, minimum: kNoZoom, maximum: kNoZoom };\n\n let kind = painter.v7EvalAttr('kind', ''),\n sub = painter.v7EvalAttr('sub', 0),\n o = painter.options;\n\n switch(kind) {\n case 'box': o.Box = 10 + sub; break;\n case 'sphere': o.Sphere = 10 + sub; break;\n case 'col': o.Color = true; break;\n case 'scat': o.Scatter = true; break;\n default: o.Box = 10;\n }\n\n painter.scanContent();\n return painter.redraw();\n });\n }\n\n} // class RH3Painter\n\n/** @summary draw RHistDisplayItem object\n * @private */\nfunction drawHistDisplayItem(dom, obj, opt) {\n if (!obj)\n return null;\n\n if (obj.fAxes.length == 1)\n return RH1Painter.draw(dom, obj, opt);\n\n if (obj.fAxes.length == 2)\n return RH2Painter.draw(dom, obj, opt);\n\n if (obj.fAxes.length == 3)\n return RH3Painter.draw(dom, obj, opt);\n\n return null;\n}\n\n\nexport { RH3Painter, drawHistDisplayItem };\n"],"x_google_ignoreList":[0]} \ No newline at end of file diff --git a/docs/579.8c087840c9033381.js b/docs/579.e38d5600f1375232.js similarity index 86% rename from docs/579.8c087840c9033381.js rename to docs/579.e38d5600f1375232.js index 800998278..efe6ae322 100644 --- a/docs/579.8c087840c9033381.js +++ b/docs/579.e38d5600f1375232.js @@ -1,2 +1,2 @@ -"use strict";(self.webpackChunkphoenix_app=self.webpackChunkphoenix_app||[]).push([[579],{9579:(Et,xt,G)=>{G.r(xt),G.d(xt,{RH3Painter:()=>q,drawHistDisplayItem:()=>Mt});var ft=G(4788),J=G(9542),O=G(9900),dt=G(3675),bt=G(9056),zt=G(9850),Bt=G(8172),H=G(1968),At=G(6061),wt=G(6476),Ct=G(7238);class q extends Bt.n{getDimension(){return 3}scanContent(t){if(t&&this.nbinsx&&this.nbinsy&&this.nbinsz)return;let i=this.getHisto();if(i){if(this.extractAxesProperties(3),this.isDisplayItem())this.gminbin=i.fContMin,this.gminposbin=i.fContMinPos>0?i.fContMinPos:null,this.gmaxbin=i.fContMax;else{this.gminbin=this.gmaxbin=i.getBinContent(1,1,1);for(let e=0;ethis.gmaxbin&&(this.gmaxbin=h)}}this.draw_content=this.gmaxbin>0}}countStat(){let M,E,I,T,j,U,W,$,K,z,t=this.getHisto(),i=this.getAxis("x"),e=this.getAxis("y"),n=this.getAxis("z"),o=0,h=0,l=0,x=0,g=0,u=0,y=0,C=this.getSelectIndex("x","left"),P=this.getSelectIndex("x","right"),f=this.getSelectIndex("y","left"),d=this.getSelectIndex("y","right"),_=this.getSelectIndex("z","left"),p=this.getSelectIndex("z","right"),c=(this.getFramePainter(),{name:t.fName,entries:0,integral:0,meanx:0,meany:0,meanz:0,rmsx:0,rmsy:0,rmsz:0});for(M=1;M<=this.nbinsx;++M)for(T=i.GetBinCoord(M-.5),j=M<=C+1?0:M>P+1?2:1,E=1;E<=this.nbinsy;++E)for(U=e.GetBinCoord(E-.5),W=E<=f+1?0:E>d+1?2:1,I=1;I<=this.nbinsz;++I)$=n.GetBinCoord(I-.5),K=I<=_+1?0:I>p+1?2:1,z=t.getBinContent(M,E,I),c.entries+=z,1==j&&1==W&&1==K&&(o+=z,h+=T*z,l+=U*z,x+=$*z,g+=T**2*z,u+=U**2*z,y+=$**2*z);return Math.abs(o)>1e-300&&(c.meanx=h/o,c.meany=l/o,c.meanz=x/o,c.rmsx=Math.sqrt(Math.abs(g/o-c.meanx**2)),c.rmsy=Math.sqrt(Math.abs(u/o-c.meany**2)),c.rmsz=Math.sqrt(Math.abs(y/o-c.meanz**2))),c.integral=o,t.fEntries>1&&(c.entries=t.fEntries),c}fillStatistic(t,i){let e=this.countStat(),n=i%10,o=Math.floor(i/10)%10,h=Math.floor(i/100)%10,l=Math.floor(i/1e3)%10,x=Math.floor(i/1e6)%10;return t.clearStat(),n>0&&t.addText(e.name),o>0&&t.addText("Entries = "+t.format(e.entries,"entries")),h>0&&(t.addText("Mean x = "+t.format(e.meanx)),t.addText("Mean y = "+t.format(e.meany)),t.addText("Mean z = "+t.format(e.meanz))),l>0&&(t.addText("Std Dev x = "+t.format(e.rmsx)),t.addText("Std Dev y = "+t.format(e.rmsy)),t.addText("Std Dev z = "+t.format(e.rmsz))),x>0&&t.addText("Integral = "+t.format(e.integral,"entries")),!0}getBinTooltips(t,i,e){let n=[],o=this.getHisto(),h=1,l=1,x=1;this.isDisplayItem()&&(h=o.stepx||1,l=o.stepy||1,x=o.stepz||1),n.push(this.getObjectHint()),n.push(`x = ${this.getAxisBinTip("x",t,h)} xbin=${t+1}`),n.push(`y = ${this.getAxisBinTip("y",i,l)} ybin=${i+1}`),n.push(`z = ${this.getAxisBinTip("z",e,x)} zbin=${e+1}`);let g=o.getBinContent(t+1,i+1,e+1),u="entries = "+(h>1||l>1||x>1?"~":"");return g===Math.round(g)?n.push(u+g):n.push(u+(0,dt.Ee)(g,J.gStyle.fStatFormat)),n}draw3DScatter(t){var i=this;return(0,ft.Z)(function*(){let f,d,_,p,e=i.getHisto(),n=i.getFramePainter(),o=t.i1,h=t.i2,l=t.stepi,x=t.j1,g=t.j2,u=t.stepj,y=t.k1,C=t.k2,P=t.stepk;if(h<=o||g<=x||C<=y)return!0;let F=i.gmaxbin>1e3?1e3/i.gmaxbin:1,c=0,M=0,E=Math.max(0,i.gminbin);for(f=o;f(n.webgl?1e5:3e4))return!1;let I=new H.B_(c,n.webgl,n.size_x3d/200),T=new Int32Array(c),j=0,U=i.getAxis("x"),W=i.getAxis("y"),$=i.getAxis("z"),K=new dt.q9(M);for(f=o;f(n.toplevel.add(z),z.bins=T,z.painter=i,z.tip_color=65280,z.tooltip=function(b){if(!Number.isInteger(b.index))return console.error(`intersect.index not provided, three.js version ${O.UZH}`),null;let S=Math.floor(b.index/this.nvertex);if(S<0||S>=this.bins.length)return null;let B=this.painter,v=B.getFramePainter(),m=B.get3DToolTip(this.bins[S]);return m.x1=v.grx(B.getAxis("x").GetBinLowEdge(m.ix)),m.x2=v.grx(B.getAxis("x").GetBinLowEdge(m.ix+l)),m.y1=v.gry(B.getAxis("y").GetBinLowEdge(m.iy)),m.y2=v.gry(B.getAxis("y").GetBinLowEdge(m.iy+u)),m.z1=v.grz(B.getAxis("z").GetBinLowEdge(m.iz)),m.z2=v.grz(B.getAxis("z").GetBinLowEdge(m.iz+P)),m.color=this.tip_color,m.opacity=.3,m},!0))})()}draw3DBins(t){let u,y,i=this.v7EvalColor("fill_color","red"),e=this.getFramePainter(),n=0,o=!1,h=!1,l=!1,x=1,g=!0,C=.5;if(this.options.Sphere){C=.4,o=!0,11===this.options.Sphere&&(l=!0);let a=e.webgl?new O.xo$(.5,16,12):new O.xo$(.5,8,6);a.applyMatrix4((new O.yGw).makeRotationX(Math.PI/2)),a.computeVertexNormals();let s=a.getIndex().array,k=a.getAttribute("position").array,w=a.getAttribute("normal").array;n=3*s.length,u=new Float32Array(n),y=new Float32Array(n);for(let r=0;r=0?(void 0===X[a]&&(X[a]=0,Y[a]=N++),X[a]+=1):console.error(`not found color for value = ${Z}`)}l||(X.push(b),N=1,Y=[0]);let mt,at,ut,lt,_t,ht,it=new Array(N),tt=new Array(N),nt=new Array(N),rt=new Array(N),V=new Array(N),st=new Array(N),ot=new Array(N);for(let a=0;a65520?2:1),tt[s]=new Float32Array(b*n),nt[s]=new Float32Array(b*n),rt[s]=new Int32Array(b),1===V[s]&&(st[s]=new Uint16Array(b*H.XZ.MeshSegments.length)),2===V[s]&&(ot[s]=new Float32Array(b*H.XZ.Segments.length*3))}for(j=this.getAxis("x"),U=this.getAxis("y"),W=this.getAxis("z"),S=f;S=this.bins.length)return null;let D=this.painter,gt=D.getFramePainter(),L=D.get3DToolTip(this.bins[R]),ct=gt.grx(D.getAxis("x").GetBinCoord(L.ix-.5)),pt=gt.gry(D.getAxis("y").GetBinCoord(L.iy-.5)),yt=gt.grz(D.getAxis("z").GetBinCoord(L.iz-.5)),Q=this.use_scale?Math.pow(Math.abs(L.value*this.use_scale),.3333):1;return L.x1=ct-this.scalex*Q,L.x2=ct+this.scalex*Q,L.y1=pt-this.scaley*Q,L.y2=pt+this.scaley*Q,L.z1=yt-this.scalez*Q,L.z2=yt+this.scalez*Q,L.color=this.tip_color,L},e.toplevel.add(r),V[s]>0){let A=this.v7EvalColor("line_color","lightblue"),R=new O.nls({color:A}),D=null;D=1===V[s]?(0,H.Qy)(tt[s],R,st[s]):(0,H.Qy)(ot[s],R),e.toplevel.add(D)}}l&&this.updatePaletteDraw()}draw3D(){if(!this.draw_content)return!1;let t=this.prepareDraw({only_indexes:!0,extra:-.5,right_extra:-1});return(this.options.Scatter?this.draw3DScatter(t):Promise.resolve(!1)).then(e=>e||this.draw3DBins(t))}redraw(t){let i=this.getFramePainter();return"resize"==t?(i.resize3D()&&i.render3D(),this):((0,Ct.g_)(i),i.create3DScene(this.options.Render3D).then(()=>(i.setAxesRanges(this.getAxis("x"),this.xmin,this.xmax,this.getAxis("y"),this.ymin,this.ymax,this.getAxis("z"),this.zmin,this.zmax),i.set3DOptions(this.options),i.drawXYZ(i.toplevel,zt.C,{zoom:J.settings.Zooming,ndim:3,draw:!0,v7:!0}),this.drawingBins(t))).then(()=>this.draw3D()).then(()=>(i.render3D(),i.addKeysHandler(),this)))}fillToolbar(){let t=this.getPadPainter();t&&(t.addPadButton("auto_zoom","Unzoom all axes","ToggleZoom","Ctrl *"),this.draw_content&&t.addPadButton("statbox","Toggle stat box","ToggleStatBox"),t.showPadButtons())}canZoomInside(t,i,e){let n=this.getHisto();return n&&(n=n["f"+t.toUpperCase()+"axis"]),!n||n.FindBin(e,.5)-n.FindBin(i,0)>1}autoZoom(){let l,x,g,t=this.getSelectIndex("x","left"),i=this.getSelectIndex("x","right"),e=this.getSelectIndex("y","left"),n=this.getSelectIndex("y","right"),o=this.getSelectIndex("z","left"),h=this.getSelectIndex("z","right"),u=this.getHisto();if(t===i||e===n||o===h)return;let y=u.getBinContent(t+1,e+1,o+1);for(l=t;l0)return;let C=i,P=t,f=n,d=e,_=h,p=o;for(l=t;ly&&(l=P&&(P=l+1),x=d&&(d=x+1),g<_&&(_=g),g>=p&&(p=g+1));let F,c,M,E,I,T,j=!1;return C===P-1&&C>t+1&&Pe+1&&do+1&&pt||Pe||do||p{if("inspect"===e)return this.showInspector();this.decodeOptions(e),this.interactiveRedraw(!0,"drawopt")})}static draw(t,i){return(0,ft.Z)(function*(){let e=new q(t,i);return e.mode3d=!0,(0,bt.ensureRCanvas)(e,"3d").then(()=>{e.setAsMainPainter(),e.options={Box:0,Scatter:!1,Sphere:0,Color:!1,minimum:J.kNoZoom,maximum:J.kNoZoom};let n=e.v7EvalAttr("kind",""),o=e.v7EvalAttr("sub",0),h=e.options;switch(n){case"box":h.Box=10+o;break;case"sphere":h.Sphere=10+o;break;case"col":h.Color=!0;break;case"scat":h.Scatter=!0;break;default:h.Box=10}return e.scanContent(),e.redraw()})})()}}function Mt(et,t,i){return t?1==t.fAxes.length?At.RH1Painter.draw(et,t,i):2==t.fAxes.length?wt.RH2Painter.draw(et,t,i):3==t.fAxes.length?q.draw(et,t,i):null:null}}}]); -//# sourceMappingURL=579.8c087840c9033381.js.map \ No newline at end of file +"use strict";(self.webpackChunkphoenix_app=self.webpackChunkphoenix_app||[]).push([[579],{9579:(Et,xt,G)=>{G.r(xt),G.d(xt,{RH3Painter:()=>q,drawHistDisplayItem:()=>Mt});var ft=G(5835),J=G(9542),O=G(9900),dt=G(3675),bt=G(9056),zt=G(9850),Bt=G(8172),H=G(1968),wt=G(6061),At=G(6476),Ct=G(7238);class q extends Bt.n{getDimension(){return 3}scanContent(t){if(t&&this.nbinsx&&this.nbinsy&&this.nbinsz)return;let i=this.getHisto();if(i){if(this.extractAxesProperties(3),this.isDisplayItem())this.gminbin=i.fContMin,this.gminposbin=i.fContMinPos>0?i.fContMinPos:null,this.gmaxbin=i.fContMax;else{this.gminbin=this.gmaxbin=i.getBinContent(1,1,1);for(let e=0;ethis.gmaxbin&&(this.gmaxbin=h)}}this.draw_content=this.gmaxbin>0}}countStat(){let M,E,I,T,j,U,W,$,K,z,t=this.getHisto(),i=this.getAxis("x"),e=this.getAxis("y"),n=this.getAxis("z"),o=0,h=0,l=0,x=0,g=0,u=0,y=0,C=this.getSelectIndex("x","left"),P=this.getSelectIndex("x","right"),f=this.getSelectIndex("y","left"),d=this.getSelectIndex("y","right"),_=this.getSelectIndex("z","left"),p=this.getSelectIndex("z","right"),c=(this.getFramePainter(),{name:t.fName,entries:0,integral:0,meanx:0,meany:0,meanz:0,rmsx:0,rmsy:0,rmsz:0});for(M=1;M<=this.nbinsx;++M)for(T=i.GetBinCoord(M-.5),j=M<=C+1?0:M>P+1?2:1,E=1;E<=this.nbinsy;++E)for(U=e.GetBinCoord(E-.5),W=E<=f+1?0:E>d+1?2:1,I=1;I<=this.nbinsz;++I)$=n.GetBinCoord(I-.5),K=I<=_+1?0:I>p+1?2:1,z=t.getBinContent(M,E,I),c.entries+=z,1==j&&1==W&&1==K&&(o+=z,h+=T*z,l+=U*z,x+=$*z,g+=T**2*z,u+=U**2*z,y+=$**2*z);return Math.abs(o)>1e-300&&(c.meanx=h/o,c.meany=l/o,c.meanz=x/o,c.rmsx=Math.sqrt(Math.abs(g/o-c.meanx**2)),c.rmsy=Math.sqrt(Math.abs(u/o-c.meany**2)),c.rmsz=Math.sqrt(Math.abs(y/o-c.meanz**2))),c.integral=o,t.fEntries>1&&(c.entries=t.fEntries),c}fillStatistic(t,i){let e=this.countStat(),n=i%10,o=Math.floor(i/10)%10,h=Math.floor(i/100)%10,l=Math.floor(i/1e3)%10,x=Math.floor(i/1e6)%10;return t.clearStat(),n>0&&t.addText(e.name),o>0&&t.addText("Entries = "+t.format(e.entries,"entries")),h>0&&(t.addText("Mean x = "+t.format(e.meanx)),t.addText("Mean y = "+t.format(e.meany)),t.addText("Mean z = "+t.format(e.meanz))),l>0&&(t.addText("Std Dev x = "+t.format(e.rmsx)),t.addText("Std Dev y = "+t.format(e.rmsy)),t.addText("Std Dev z = "+t.format(e.rmsz))),x>0&&t.addText("Integral = "+t.format(e.integral,"entries")),!0}getBinTooltips(t,i,e){let n=[],o=this.getHisto(),h=1,l=1,x=1;this.isDisplayItem()&&(h=o.stepx||1,l=o.stepy||1,x=o.stepz||1),n.push(this.getObjectHint()),n.push(`x = ${this.getAxisBinTip("x",t,h)} xbin=${t+1}`),n.push(`y = ${this.getAxisBinTip("y",i,l)} ybin=${i+1}`),n.push(`z = ${this.getAxisBinTip("z",e,x)} zbin=${e+1}`);let g=o.getBinContent(t+1,i+1,e+1),u="entries = "+(h>1||l>1||x>1?"~":"");return g===Math.round(g)?n.push(u+g):n.push(u+(0,dt.Ee)(g,J.gStyle.fStatFormat)),n}draw3DScatter(t){var i=this;return(0,ft.Z)(function*(){let f,d,_,p,e=i.getHisto(),n=i.getFramePainter(),o=t.i1,h=t.i2,l=t.stepi,x=t.j1,g=t.j2,u=t.stepj,y=t.k1,C=t.k2,P=t.stepk;if(h<=o||g<=x||C<=y)return!0;let F=i.gmaxbin>1e3?1e3/i.gmaxbin:1,c=0,M=0,E=Math.max(0,i.gminbin);for(f=o;f(n.webgl?1e5:3e4))return!1;let I=new H.B_(c,n.webgl,n.size_x3d/200),T=new Int32Array(c),j=0,U=i.getAxis("x"),W=i.getAxis("y"),$=i.getAxis("z"),K=new dt.q9(M);for(f=o;f(n.toplevel.add(z),z.bins=T,z.painter=i,z.tip_color=65280,z.tooltip=function(b){if(!Number.isInteger(b.index))return console.error(`intersect.index not provided, three.js version ${O.UZH}`),null;let S=Math.floor(b.index/this.nvertex);if(S<0||S>=this.bins.length)return null;let B=this.painter,v=B.getFramePainter(),m=B.get3DToolTip(this.bins[S]);return m.x1=v.grx(B.getAxis("x").GetBinLowEdge(m.ix)),m.x2=v.grx(B.getAxis("x").GetBinLowEdge(m.ix+l)),m.y1=v.gry(B.getAxis("y").GetBinLowEdge(m.iy)),m.y2=v.gry(B.getAxis("y").GetBinLowEdge(m.iy+u)),m.z1=v.grz(B.getAxis("z").GetBinLowEdge(m.iz)),m.z2=v.grz(B.getAxis("z").GetBinLowEdge(m.iz+P)),m.color=this.tip_color,m.opacity=.3,m},!0))})()}draw3DBins(t){let u,y,i=this.v7EvalColor("fill_color","red"),e=this.getFramePainter(),n=0,o=!1,h=!1,l=!1,x=1,g=!0,C=.5;if(this.options.Sphere){C=.4,o=!0,11===this.options.Sphere&&(l=!0);let a=e.webgl?new O.xo$(.5,16,12):new O.xo$(.5,8,6);a.applyMatrix4((new O.yGw).makeRotationX(Math.PI/2)),a.computeVertexNormals();let s=a.getIndex().array,k=a.getAttribute("position").array,A=a.getAttribute("normal").array;n=3*s.length,u=new Float32Array(n),y=new Float32Array(n);for(let r=0;r=0?(void 0===X[a]&&(X[a]=0,Y[a]=N++),X[a]+=1):console.error(`not found color for value = ${Z}`)}l||(X.push(b),N=1,Y=[0]);let mt,at,ut,lt,_t,ht,it=new Array(N),tt=new Array(N),nt=new Array(N),rt=new Array(N),V=new Array(N),st=new Array(N),ot=new Array(N);for(let a=0;a65520?2:1),tt[s]=new Float32Array(b*n),nt[s]=new Float32Array(b*n),rt[s]=new Int32Array(b),1===V[s]&&(st[s]=new Uint16Array(b*H.XZ.MeshSegments.length)),2===V[s]&&(ot[s]=new Float32Array(b*H.XZ.Segments.length*3))}for(j=this.getAxis("x"),U=this.getAxis("y"),W=this.getAxis("z"),S=f;S=this.bins.length)return null;let D=this.painter,gt=D.getFramePainter(),L=D.get3DToolTip(this.bins[R]),ct=gt.grx(D.getAxis("x").GetBinCoord(L.ix-.5)),pt=gt.gry(D.getAxis("y").GetBinCoord(L.iy-.5)),yt=gt.grz(D.getAxis("z").GetBinCoord(L.iz-.5)),Q=this.use_scale?Math.pow(Math.abs(L.value*this.use_scale),.3333):1;return L.x1=ct-this.scalex*Q,L.x2=ct+this.scalex*Q,L.y1=pt-this.scaley*Q,L.y2=pt+this.scaley*Q,L.z1=yt-this.scalez*Q,L.z2=yt+this.scalez*Q,L.color=this.tip_color,L},e.toplevel.add(r),V[s]>0){let w=this.v7EvalColor("line_color","lightblue"),R=new O.nls({color:w}),D=null;D=1===V[s]?(0,H.Qy)(tt[s],R,st[s]):(0,H.Qy)(ot[s],R),e.toplevel.add(D)}}l&&this.updatePaletteDraw()}draw3D(){if(!this.draw_content)return!1;let t=this.prepareDraw({only_indexes:!0,extra:-.5,right_extra:-1});return(this.options.Scatter?this.draw3DScatter(t):Promise.resolve(!1)).then(e=>e||this.draw3DBins(t))}redraw(t){let i=this.getFramePainter();return"resize"==t?(i.resize3D()&&i.render3D(),this):((0,Ct.g_)(i),i.create3DScene(this.options.Render3D).then(()=>(i.setAxesRanges(this.getAxis("x"),this.xmin,this.xmax,this.getAxis("y"),this.ymin,this.ymax,this.getAxis("z"),this.zmin,this.zmax),i.set3DOptions(this.options),i.drawXYZ(i.toplevel,zt.C,{zoom:J.settings.Zooming,ndim:3,draw:!0,v7:!0}),this.drawingBins(t))).then(()=>this.draw3D()).then(()=>(i.render3D(),i.addKeysHandler(),this)))}fillToolbar(){let t=this.getPadPainter();t&&(t.addPadButton("auto_zoom","Unzoom all axes","ToggleZoom","Ctrl *"),this.draw_content&&t.addPadButton("statbox","Toggle stat box","ToggleStatBox"),t.showPadButtons())}canZoomInside(t,i,e){let n=this.getHisto();return n&&(n=n["f"+t.toUpperCase()+"axis"]),!n||n.FindBin(e,.5)-n.FindBin(i,0)>1}autoZoom(){let l,x,g,t=this.getSelectIndex("x","left"),i=this.getSelectIndex("x","right"),e=this.getSelectIndex("y","left"),n=this.getSelectIndex("y","right"),o=this.getSelectIndex("z","left"),h=this.getSelectIndex("z","right"),u=this.getHisto();if(t===i||e===n||o===h)return;let y=u.getBinContent(t+1,e+1,o+1);for(l=t;l0)return;let C=i,P=t,f=n,d=e,_=h,p=o;for(l=t;ly&&(l=P&&(P=l+1),x=d&&(d=x+1),g<_&&(_=g),g>=p&&(p=g+1));let F,c,M,E,I,T,j=!1;return C===P-1&&C>t+1&&Pe+1&&do+1&&pt||Pe||do||p{if("inspect"===e)return this.showInspector();this.decodeOptions(e),this.interactiveRedraw(!0,"drawopt")})}static draw(t,i){return(0,ft.Z)(function*(){let e=new q(t,i);return e.mode3d=!0,(0,bt.ensureRCanvas)(e,"3d").then(()=>{e.setAsMainPainter(),e.options={Box:0,Scatter:!1,Sphere:0,Color:!1,minimum:J.kNoZoom,maximum:J.kNoZoom};let n=e.v7EvalAttr("kind",""),o=e.v7EvalAttr("sub",0),h=e.options;switch(n){case"box":h.Box=10+o;break;case"sphere":h.Sphere=10+o;break;case"col":h.Color=!0;break;case"scat":h.Scatter=!0;break;default:h.Box=10}return e.scanContent(),e.redraw()})})()}}function Mt(et,t,i){return t?1==t.fAxes.length?wt.RH1Painter.draw(et,t,i):2==t.fAxes.length?At.RH2Painter.draw(et,t,i):3==t.fAxes.length?q.draw(et,t,i):null:null}}}]); +//# sourceMappingURL=579.e38d5600f1375232.js.map \ No newline at end of file diff --git a/docs/579.e38d5600f1375232.js.map b/docs/579.e38d5600f1375232.js.map new file mode 100644 index 000000000..1ac65d987 --- /dev/null +++ b/docs/579.e38d5600f1375232.js.map @@ -0,0 +1 @@ +{"version":3,"file":"579.e38d5600f1375232.js","mappings":"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","names":["RH3Painter","RHistPainter","getDimension","scanContent","when_axis_changed","this","nbinsx","nbinsy","nbinsz","histo","getHisto","extractAxesProperties","isDisplayItem","gminbin","fContMin","gminposbin","fContMinPos","gmaxbin","fContMax","getBinContent","i","j","k","bin_content","draw_content","countStat","xi","yi","zi","xx","xside","yy","yside","zz","zside","cont","xaxis","getAxis","yaxis","zaxis","stat_sum0","stat_sumx1","stat_sumy1","stat_sumz1","stat_sumx2","stat_sumy2","stat_sumz2","i1","getSelectIndex","i2","j1","j2","k1","k2","res","getFramePainter","name","fName","entries","integral","meanx","meany","meanz","rmsx","rmsy","rmsz","GetBinCoord","Math","abs","sqrt","fEntries","fillStatistic","stat","dostat","data","print_name","print_entries","floor","print_mean","print_rms","print_integral","clearStat","addText","format","getBinTooltips","ix","iy","iz","lines","dx","dy","dz","stepx","stepy","stepz","push","getObjectHint","getAxisBinTip","binz","lbl","round","floatToString","gStyle","draw3DScatter","handle","_this","main","di","stepi","dj","stepj","dk","stepk","coef","numpixels","sumz","content_lmt","max","webgl","pnts","PointsCreator","size_x3d","bins","Int32Array","nbin","rnd","TRandom","num","n","binx","random","biny","getBin","addPoint","grx","gry","grz","createPoints","color","v7EvalColor","then","mesh","toplevel","add","painter","tip_color","tooltip","intersect","Number","isInteger","index","console","error","REVISION","indx","nvertex","length","p","tip","get3DToolTip","x1","GetBinLowEdge","x2","y1","y2","z1","z2","opacity","draw3DBins","single_bin_verts","single_bin_norms","fillcolor","buffer_size","use_lambert","use_helper","use_colors","use_opacity","use_scale","tipscale","options","Sphere","geom","SphereGeometry","applyMatrix4","Matrix4","makeRotationX","PI","computeVertexNormals","getIndex","array","pos","getAttribute","norm","Float32Array","iii","indicies","Box3D","normals","vertices","nn","vert","x","y","z","Box","Color","palette","getHistPalette","createContour","wei","scalex","scaley","scalez","nbins","cols_size","num_colors","cols_sequence","pow","colindx","getContourIndex","undefined","cols_nbins","Array","bin_verts","bin_norms","bin_tooltips","helper_kind","helper_indexes","helper_positions","ncol","nseq","Uint16Array","GetBinCenter","vvv","bin_v","bin_n","vi","helper_segments","shift","helper_i","helper_p","all_bins_buffgeom","BufferGeometry","setAttribute","BufferAttribute","getColor","material","MeshLambertMaterial","transparent","vertexColors","MeshBasicMaterial","combined_bins","Mesh","bins_faces","faceIndex","value","lcolor","helper_material","LineBasicMaterial","createLineSegments","updatePaletteDraw","draw3D","prepareDraw","only_indexes","extra","right_extra","Scatter","Promise","resolve","redraw","reason","resize3D","render3D","assignFrame3DMethods","create3DScene","Render3D","setAxesRanges","xmin","xmax","ymin","ymax","zmin","zmax","set3DOptions","drawXYZ","RAxisPainter","zoom","settings","ndim","draw","v7","drawingBins","addKeysHandler","fillToolbar","pp","getPadPainter","addPadButton","showPadButtons","canZoomInside","axis","min","obj","toUpperCase","FindBin","autoZoom","ileft","iright","jleft","jright","kleft","kright","isany","fillHistContextMenu","menu","opts","getSupportedDrawOptions","addDrawMenu","arg","showInspector","decodeOptions","interactiveRedraw","static","dom","mode3d","ensureRCanvas","setAsMainPainter","minimum","kNoZoom","maximum","kind","v7EvalAttr","sub","o","drawHistDisplayItem","opt","fAxes","RH1Painter","RH2Painter"],"sourceRoot":"webpack:///","sources":["../node_modules/jsroot/modules/hist/RH3Painter.mjs"],"sourcesContent":["import { gStyle, settings, kNoZoom } from '../core.mjs';\nimport { REVISION, Matrix4, Mesh, MeshBasicMaterial, MeshLambertMaterial, SphereGeometry,\n LineBasicMaterial, BufferAttribute, BufferGeometry } from '../three.mjs';\nimport { floatToString, TRandom } from '../base/BasePainter.mjs';\nimport { ensureRCanvas } from '../gpad/RCanvasPainter.mjs';\nimport { RAxisPainter } from '../gpad/RAxisPainter.mjs';\nimport { RHistPainter } from '../hist2d/RHistPainter.mjs';\nimport { createLineSegments, PointsCreator, Box3D } from '../base/base3d.mjs';\nimport { RH1Painter } from './RH1Painter.mjs';\nimport { RH2Painter } from './RH2Painter.mjs';\nimport { assignFrame3DMethods } from './hist3d.mjs';\n\n/**\n * @summary Painter for RH3 classes\n *\n * @private\n */\n\nclass RH3Painter extends RHistPainter {\n\n /** @summary Returns histogram dimension */\n getDimension() { return 3; }\n\n scanContent(when_axis_changed) {\n\n // no need to rescan histogram while result does not depend from axis selection\n if (when_axis_changed && this.nbinsx && this.nbinsy && this.nbinsz) return;\n\n let histo = this.getHisto();\n if (!histo) return;\n\n this.extractAxesProperties(3);\n\n // global min/max, used at the moment in 3D drawing\n\n if (this.isDisplayItem()) {\n // take min/max values from the display item\n this.gminbin = histo.fContMin;\n this.gminposbin = histo.fContMinPos > 0 ? histo.fContMinPos : null;\n this.gmaxbin = histo.fContMax;\n } else {\n this.gminbin = this.gmaxbin = histo.getBinContent(1,1,1);\n\n for (let i = 0; i < this.nbinsx; ++i)\n for (let j = 0; j < this.nbinsy; ++j)\n for (let k = 0; k < this.nbinsz; ++k) {\n let bin_content = histo.getBinContent(i+1, j+1, k+1);\n if (bin_content < this.gminbin) this.gminbin = bin_content; else\n if (bin_content > this.gmaxbin) this.gmaxbin = bin_content;\n }\n }\n\n this.draw_content = this.gmaxbin > 0;\n }\n\n /** @summary Count histogram statistic */\n countStat() {\n let histo = this.getHisto(),\n xaxis = this.getAxis('x'),\n yaxis = this.getAxis('y'),\n zaxis = this.getAxis('z'),\n stat_sum0 = 0, stat_sumx1 = 0, stat_sumy1 = 0,\n stat_sumz1 = 0, stat_sumx2 = 0, stat_sumy2 = 0, stat_sumz2 = 0,\n i1 = this.getSelectIndex('x', 'left'),\n i2 = this.getSelectIndex('x', 'right'),\n j1 = this.getSelectIndex('y', 'left'),\n j2 = this.getSelectIndex('y', 'right'),\n k1 = this.getSelectIndex('z', 'left'),\n k2 = this.getSelectIndex('z', 'right'),\n fp = this.getFramePainter(),\n res = { name: histo.fName, entries: 0, integral: 0, meanx: 0, meany: 0, meanz: 0, rmsx: 0, rmsy: 0, rmsz: 0 },\n xi, yi, zi, xx, xside, yy, yside, zz, zside, cont;\n\n for (xi = 1; xi <= this.nbinsx; ++xi) {\n\n xx = xaxis.GetBinCoord(xi - 0.5);\n xside = (xi <= i1+1) ? 0 : (xi > i2+1 ? 2 : 1);\n\n for (yi = 1; yi <= this.nbinsy; ++yi) {\n\n yy = yaxis.GetBinCoord(yi - 0.5);\n yside = (yi <= j1+1) ? 0 : (yi > j2+1 ? 2 : 1);\n\n for (zi = 1; zi <= this.nbinsz; ++zi) {\n\n zz = zaxis.GetBinCoord(zi - 0.5);\n zside = (zi <= k1+1) ? 0 : (zi > k2+1 ? 2 : 1);\n\n cont = histo.getBinContent(xi, yi, zi);\n res.entries += cont;\n\n if ((xside == 1) && (yside == 1) && (zside == 1)) {\n stat_sum0 += cont;\n stat_sumx1 += xx * cont;\n stat_sumy1 += yy * cont;\n stat_sumz1 += zz * cont;\n stat_sumx2 += xx**2 * cont;\n stat_sumy2 += yy**2 * cont;\n stat_sumz2 += zz**2 * cont;\n }\n }\n }\n }\n\n if (Math.abs(stat_sum0) > 1e-300) {\n res.meanx = stat_sumx1 / stat_sum0;\n res.meany = stat_sumy1 / stat_sum0;\n res.meanz = stat_sumz1 / stat_sum0;\n res.rmsx = Math.sqrt(Math.abs(stat_sumx2 / stat_sum0 - res.meanx**2));\n res.rmsy = Math.sqrt(Math.abs(stat_sumy2 / stat_sum0 - res.meany**2));\n res.rmsz = Math.sqrt(Math.abs(stat_sumz2 / stat_sum0 - res.meanz**2));\n }\n\n res.integral = stat_sum0;\n\n if (histo.fEntries > 1)\n res.entries = histo.fEntries;\n\n return res;\n }\n\n /** @summary Fill statistic */\n fillStatistic(stat, dostat /*, dofit */) {\n\n let data = this.countStat(),\n print_name = dostat % 10,\n print_entries = Math.floor(dostat / 10) % 10,\n print_mean = Math.floor(dostat / 100) % 10,\n print_rms = Math.floor(dostat / 1000) % 10,\n // print_under = Math.floor(dostat / 10000) % 10,\n // print_over = Math.floor(dostat / 100000) % 10,\n print_integral = Math.floor(dostat / 1000000) % 10;\n // print_skew = Math.floor(dostat / 10000000) % 10;\n // print_kurt = Math.floor(dostat / 100000000) % 10;\n\n stat.clearStat();\n\n if (print_name > 0)\n stat.addText(data.name);\n\n if (print_entries > 0)\n stat.addText('Entries = ' + stat.format(data.entries,'entries'));\n\n if (print_mean > 0) {\n stat.addText('Mean x = ' + stat.format(data.meanx));\n stat.addText('Mean y = ' + stat.format(data.meany));\n stat.addText('Mean z = ' + stat.format(data.meanz));\n }\n\n if (print_rms > 0) {\n stat.addText('Std Dev x = ' + stat.format(data.rmsx));\n stat.addText('Std Dev y = ' + stat.format(data.rmsy));\n stat.addText('Std Dev z = ' + stat.format(data.rmsz));\n }\n\n if (print_integral > 0) {\n stat.addText('Integral = ' + stat.format(data.integral,'entries'));\n }\n\n return true;\n }\n\n /** @summary Provide text information (tooltips) for histogram bin */\n getBinTooltips(ix, iy, iz) {\n let lines = [], histo = this.getHisto(),\n dx = 1, dy = 1, dz = 1;\n\n if (this.isDisplayItem()) {\n dx = histo.stepx || 1;\n dy = histo.stepy || 1;\n dz = histo.stepz || 1;\n }\n\n lines.push(this.getObjectHint());\n\n lines.push(`x = ${this.getAxisBinTip('x', ix, dx)} xbin=${ix+1}`);\n lines.push(`y = ${this.getAxisBinTip('y', iy, dy)} ybin=${iy+1}`);\n lines.push(`z = ${this.getAxisBinTip('z', iz, dz)} zbin=${iz+1}`);\n\n let binz = histo.getBinContent(ix+1, iy+1, iz+1),\n lbl = 'entries = '+ ((dx > 1) || (dy > 1) || (dz > 1) ? '~' : '');\n if (binz === Math.round(binz))\n lines.push(lbl + binz);\n else\n lines.push(lbl + floatToString(binz, gStyle.fStatFormat));\n\n return lines;\n }\n\n /** @summary Try to draw 3D histogram as scatter plot\n * @desc If there are too many points, returns promise with false */\n async draw3DScatter(handle) {\n\n let histo = this.getHisto(),\n main = this.getFramePainter(),\n i1 = handle.i1, i2 = handle.i2, di = handle.stepi,\n j1 = handle.j1, j2 = handle.j2, dj = handle.stepj,\n k1 = handle.k1, k2 = handle.k2, dk = handle.stepk,\n i, j, k, bin_content;\n\n if ((i2 <= i1) || (j2 <= j1) || (k2 <= k1))\n return true;\n\n // scale down factor if too large values\n let coef = (this.gmaxbin > 1000) ? 1000/this.gmaxbin : 1,\n numpixels = 0, sumz = 0, content_lmt = Math.max(0, this.gminbin);\n\n for (i = i1; i < i2; i += di) {\n for (j = j1; j < j2; j += dj) {\n for (k = k1; k < k2; k += dk) {\n bin_content = histo.getBinContent(i+1, j+1, k+1);\n sumz += bin_content;\n if (bin_content <= content_lmt) continue;\n numpixels += Math.round(bin_content*coef);\n }\n }\n }\n\n // too many pixels - use box drawing\n if (numpixels > (main.webgl ? 100000 : 30000))\n return false;\n\n let pnts = new PointsCreator(numpixels, main.webgl, main.size_x3d/200),\n bins = new Int32Array(numpixels), nbin = 0,\n xaxis = this.getAxis('x'), yaxis = this.getAxis('y'), zaxis = this.getAxis('z'),\n rnd = new TRandom(sumz);\n\n for (i = i1; i < i2; i += di) {\n for (j = j1; j < j2; j += dj) {\n for (k = k1; k < k2; k += dk) {\n bin_content = histo.getBinContent(i+1, j+1, k+1);\n if (bin_content <= content_lmt) continue;\n let num = Math.round(bin_content*coef);\n\n for (let n=0;n {\n main.toplevel.add(mesh);\n\n mesh.bins = bins;\n mesh.painter = this;\n mesh.tip_color = 0x00FF00;\n\n mesh.tooltip = function(intersect) {\n if (!Number.isInteger(intersect.index)) {\n console.error(`intersect.index not provided, three.js version ${REVISION}`);\n return null;\n }\n\n let indx = Math.floor(intersect.index / this.nvertex);\n if ((indx < 0) || (indx >= this.bins.length)) return null;\n\n let p = this.painter,\n main = p.getFramePainter(),\n tip = p.get3DToolTip(this.bins[indx]);\n\n tip.x1 = main.grx(p.getAxis('x').GetBinLowEdge(tip.ix));\n tip.x2 = main.grx(p.getAxis('x').GetBinLowEdge(tip.ix+di));\n tip.y1 = main.gry(p.getAxis('y').GetBinLowEdge(tip.iy));\n tip.y2 = main.gry(p.getAxis('y').GetBinLowEdge(tip.iy+dj));\n tip.z1 = main.grz(p.getAxis('z').GetBinLowEdge(tip.iz));\n tip.z2 = main.grz(p.getAxis('z').GetBinLowEdge(tip.iz+dk));\n tip.color = this.tip_color;\n tip.opacity = 0.3;\n\n return tip;\n };\n\n return true;\n });\n }\n\n /** @summary Drawing of 3D histogram */\n draw3DBins(handle) {\n\n let fillcolor = this.v7EvalColor('fill_color', 'red'),\n main = this.getFramePainter(),\n buffer_size = 0, use_lambert = false,\n use_helper = false, use_colors = false, use_opacity = 1, use_scale = true,\n single_bin_verts, single_bin_norms,\n tipscale = 0.5;\n\n if (this.options.Sphere) {\n\n // drawing spheres\n tipscale = 0.4;\n use_lambert = true;\n if (this.options.Sphere === 11) use_colors = true;\n\n let geom = main.webgl ? new SphereGeometry(0.5, 16, 12) : new SphereGeometry(0.5, 8, 6);\n geom.applyMatrix4( new Matrix4().makeRotationX( Math.PI / 2 ) );\n geom.computeVertexNormals();\n\n let indx = geom.getIndex().array,\n pos = geom.getAttribute('position').array,\n norm = geom.getAttribute('normal').array;\n\n buffer_size = indx.length*3;\n single_bin_verts = new Float32Array(buffer_size);\n single_bin_norms = new Float32Array(buffer_size);\n\n for (let k=0;k= 0) {\n if (cols_size[colindx] === undefined) {\n cols_size[colindx] = 0;\n cols_sequence[colindx] = num_colors++;\n }\n cols_size[colindx]+=1;\n } else {\n console.error(`not found color for value = ${bin_content}`);\n }\n }\n }\n }\n\n if (!use_colors) {\n cols_size.push(nbins);\n num_colors = 1;\n cols_sequence = [0];\n }\n\n let cols_nbins = new Array(num_colors),\n bin_verts = new Array(num_colors),\n bin_norms = new Array(num_colors),\n bin_tooltips = new Array(num_colors),\n helper_kind = new Array(num_colors),\n helper_indexes = new Array(num_colors), // helper_kind == 1, use original vertices\n helper_positions = new Array(num_colors); // helper_kind == 2, all vertices copied into separate buffer\n\n for(let ncol = 0; ncol < cols_size.length; ++ncol) {\n if (!cols_size[ncol]) continue; // ignore dummy colors\n\n nbins = cols_size[ncol]; // how many bins with specified color\n let nseq = cols_sequence[ncol];\n\n cols_nbins[nseq] = 0; // counter for the filled bins\n\n helper_kind[nseq] = 0;\n\n // 1 - use same vertices to create helper, one can use maximal 64K vertices\n // 2 - all vertices copied into separate buffer\n if (use_helper)\n helper_kind[nseq] = (nbins * buffer_size / 3 > 0xFFF0) ? 2 : 1;\n\n bin_verts[nseq] = new Float32Array(nbins * buffer_size);\n bin_norms[nseq] = new Float32Array(nbins * buffer_size);\n bin_tooltips[nseq] = new Int32Array(nbins);\n\n if (helper_kind[nseq] === 1)\n helper_indexes[nseq] = new Uint16Array(nbins * Box3D.MeshSegments.length);\n\n if (helper_kind[nseq] === 2)\n helper_positions[nseq] = new Float32Array(nbins * Box3D.Segments.length * 3);\n }\n\n let binx, grx, biny, gry, binz, grz;\n xaxis = this.getAxis('x'),\n yaxis = this.getAxis('y'),\n zaxis = this.getAxis('z');\n\n for (i = i1; i < i2; i += di) {\n binx = xaxis.GetBinCenter(i+1); grx = main.grx(binx);\n for (j = j1; j < j2; j += dj) {\n biny = yaxis.GetBinCenter(j+1); gry = main.gry(biny);\n for (k = k1; k < k2; k +=dk) {\n bin_content = histo.getBinContent(i+1, j+1, k+1);\n if (!this.options.Color && ((bin_content === 0) || (bin_content < this.gminbin))) continue;\n\n wei = use_scale ? Math.pow(Math.abs(bin_content*use_scale), 0.3333) : 1;\n if (wei < 1e-3) continue; // do not show very small bins\n\n let nseq = 0;\n if (use_colors) {\n let colindx = palette.getContourIndex(bin_content);\n if (colindx < 0) continue;\n nseq = cols_sequence[colindx];\n }\n\n nbins = cols_nbins[nseq];\n\n binz = zaxis.GetBinCenter(k+1); grz = main.grz(binz);\n\n // remember bin index for tooltip\n bin_tooltips[nseq][nbins] = histo.getBin(i+1, j+1, k+1);\n\n let vvv = nbins * buffer_size, bin_v = bin_verts[nseq], bin_n = bin_norms[nseq];\n\n // Grab the coordinates and scale that are being assigned to each bin\n for (let vi = 0; vi < buffer_size; vi+=3, vvv+=3) {\n bin_v[vvv] = grx + single_bin_verts[vi]*scalex*wei;\n bin_v[vvv+1] = gry + single_bin_verts[vi+1]*scaley*wei;\n bin_v[vvv+2] = grz + single_bin_verts[vi+2]*scalez*wei;\n\n bin_n[vvv] = single_bin_norms[vi];\n bin_n[vvv+1] = single_bin_norms[vi+1];\n bin_n[vvv+2] = single_bin_norms[vi+2];\n }\n\n if (helper_kind[nseq] === 1) {\n // reuse vertices created for the mesh\n let helper_segments = Box3D.MeshSegments;\n vvv = nbins * helper_segments.length;\n let shift = Math.round(nbins * buffer_size/3),\n helper_i = helper_indexes[nseq];\n for (let n = 0; n < helper_segments.length; ++n)\n helper_i[vvv+n] = shift + helper_segments[n];\n }\n\n if (helper_kind[nseq] === 2) {\n let helper_segments = Box3D.Segments,\n helper_p = helper_positions[nseq];\n vvv = nbins * helper_segments.length * 3;\n for (let n = 0; n < helper_segments.length; ++n, vvv += 3) {\n let vert = Box3D.Vertices[helper_segments[n]];\n helper_p[vvv] = grx + (vert.x-0.5)*scalex*wei;\n helper_p[vvv+1] = gry + (vert.y-0.5)*scaley*wei;\n helper_p[vvv+2] = grz + (vert.z-0.5)*scalez*wei;\n }\n }\n\n cols_nbins[nseq] = nbins+1;\n }\n }\n }\n\n for (let ncol = 0; ncol < cols_size.length; ++ncol) {\n if (!cols_size[ncol]) continue; // ignore dummy colors\n\n let nseq = cols_sequence[ncol];\n\n // BufferGeometries that store geometry of all bins\n let all_bins_buffgeom = new BufferGeometry();\n\n // Create mesh from bin buffergeometry\n all_bins_buffgeom.setAttribute('position', new BufferAttribute(bin_verts[nseq], 3));\n all_bins_buffgeom.setAttribute('normal', new BufferAttribute(bin_norms[nseq], 3));\n\n if (use_colors) fillcolor = palette.getColor(ncol);\n\n let material = use_lambert ? new MeshLambertMaterial({ color: fillcolor, opacity: use_opacity, transparent: (use_opacity < 1), vertexColors: false })\n : new MeshBasicMaterial({ color: fillcolor, opacity: use_opacity, vertexColors: false });\n\n let combined_bins = new Mesh(all_bins_buffgeom, material);\n\n combined_bins.bins = bin_tooltips[nseq];\n combined_bins.bins_faces = buffer_size/9;\n combined_bins.painter = this;\n\n combined_bins.scalex = tipscale*scalex;\n combined_bins.scaley = tipscale*scaley;\n combined_bins.scalez = tipscale*scalez;\n combined_bins.tip_color = 0x00FF00;\n combined_bins.use_scale = use_scale;\n\n combined_bins.tooltip = function(intersect) {\n if (!Number.isInteger(intersect.faceIndex)) {\n console.error(`intersect.faceIndex not provided, three.js version ${REVISION}`);\n return null;\n }\n let indx = Math.floor(intersect.faceIndex / this.bins_faces);\n if ((indx < 0) || (indx >= this.bins.length)) return null;\n\n let p = this.painter,\n main = p.getFramePainter(),\n tip = p.get3DToolTip(this.bins[indx]),\n grx = main.grx(p.getAxis('x').GetBinCoord(tip.ix-0.5)),\n gry = main.gry(p.getAxis('y').GetBinCoord(tip.iy-0.5)),\n grz = main.grz(p.getAxis('z').GetBinCoord(tip.iz-0.5)),\n wei = this.use_scale ? Math.pow(Math.abs(tip.value*this.use_scale), 0.3333) : 1;\n\n tip.x1 = grx - this.scalex*wei; tip.x2 = grx + this.scalex*wei;\n tip.y1 = gry - this.scaley*wei; tip.y2 = gry + this.scaley*wei;\n tip.z1 = grz - this.scalez*wei; tip.z2 = grz + this.scalez*wei;\n\n tip.color = this.tip_color;\n\n return tip;\n };\n\n main.toplevel.add(combined_bins);\n\n if (helper_kind[nseq] > 0) {\n let lcolor = this.v7EvalColor('line_color', 'lightblue'),\n helper_material = new LineBasicMaterial({ color: lcolor }),\n lines = null;\n\n if (helper_kind[nseq] === 1) {\n // reuse positions from the mesh - only special index was created\n lines = createLineSegments(bin_verts[nseq], helper_material, helper_indexes[nseq]);\n } else {\n lines = createLineSegments(helper_positions[nseq], helper_material);\n }\n\n main.toplevel.add(lines);\n }\n }\n\n if (use_colors)\n this.updatePaletteDraw();\n }\n\n draw3D() {\n\n if (!this.draw_content)\n return false;\n\n //this.options.Scatter = false;\n //this.options.Box = true;\n\n let handle = this.prepareDraw({ only_indexes: true, extra: -0.5, right_extra: -1 });\n\n let pr = this.options.Scatter ? this.draw3DScatter(handle) : Promise.resolve(false);\n\n return pr.then(res => {\n return res ? res : this.draw3DBins(handle);\n });\n }\n\n\n /** @summary Redraw histogram*/\n redraw(reason) {\n\n let main = this.getFramePainter(); // who makes axis and 3D drawing\n\n if (reason == 'resize') {\n if (main.resize3D()) main.render3D();\n return this;\n }\n\n assignFrame3DMethods(main);\n return main.create3DScene(this.options.Render3D).then(() => {\n main.setAxesRanges(this.getAxis('x'), this.xmin, this.xmax, this.getAxis('y'), this.ymin, this.ymax, this.getAxis('z'), this.zmin, this.zmax);\n main.set3DOptions(this.options);\n main.drawXYZ(main.toplevel, RAxisPainter, { zoom: settings.Zooming, ndim: 3, draw: true, v7: true });\n return this.drawingBins(reason);\n }).then(() => this.draw3D()).then(() => {\n main.render3D();\n main.addKeysHandler();\n return this;\n });\n }\n\n /** @summary Fill pad toolbar with RH3-related functions */\n fillToolbar() {\n let pp = this.getPadPainter();\n if (!pp) return;\n\n pp.addPadButton('auto_zoom', 'Unzoom all axes', 'ToggleZoom', 'Ctrl *');\n if (this.draw_content)\n pp.addPadButton('statbox', 'Toggle stat box', 'ToggleStatBox');\n pp.showPadButtons();\n }\n\n /** @summary Checks if it makes sense to zoom inside specified axis range */\n canZoomInside(axis, min, max) {\n let obj = this.getHisto();\n if (obj) obj = obj['f'+axis.toUpperCase()+'axis'];\n return !obj || (obj.FindBin(max,0.5) - obj.FindBin(min,0) > 1);\n }\n\n /** @summary Perform automatic zoom inside non-zero region of histogram */\n autoZoom() {\n let i1 = this.getSelectIndex('x', 'left'),\n i2 = this.getSelectIndex('x', 'right'),\n j1 = this.getSelectIndex('y', 'left'),\n j2 = this.getSelectIndex('y', 'right'),\n k1 = this.getSelectIndex('z', 'left'),\n k2 = this.getSelectIndex('z', 'right'),\n i, j, k, histo = this.getHisto();\n\n if ((i1 === i2) || (j1 === j2) || (k1 === k2)) return;\n\n // first find minimum\n let min = histo.getBinContent(i1 + 1, j1 + 1, k1+1);\n for (i = i1; i < i2; ++i)\n for (j = j1; j < j2; ++j)\n for (k = k1; k < k2; ++k)\n min = Math.min(min, histo.getBinContent(i+1, j+1, k+1));\n\n if (min > 0) return; // if all points positive, no chance for autoscale\n\n let ileft = i2, iright = i1, jleft = j2, jright = j1, kleft = k2, kright = k1;\n\n for (i = i1; i < i2; ++i)\n for (j = j1; j < j2; ++j)\n for (k = k1; k < k2; ++k)\n if (histo.getBinContent(i+1, j+1, k+1) > min) {\n if (i < ileft) ileft = i;\n if (i >= iright) iright = i + 1;\n if (j < jleft) jleft = j;\n if (j >= jright) jright = j + 1;\n if (k < kleft) kleft = k;\n if (k >= kright) kright = k + 1;\n }\n\n let xmin, xmax, ymin, ymax, zmin, zmax, isany = false;\n\n if ((ileft === iright-1) && (ileft > i1+1) && (iright < i2-1)) { ileft--; iright++; }\n if ((jleft === jright-1) && (jleft > j1+1) && (jright < j2-1)) { jleft--; jright++; }\n if ((kleft === kright-1) && (kleft > k1+1) && (kright < k2-1)) { kleft--; kright++; }\n\n if ((ileft > i1 || iright < i2) && (ileft < iright - 1)) {\n xmin = this.getAxis('x').GetBinLowEdge(ileft+1);\n xmax = this.getAxis('x').GetBinLowEdge(iright+1);\n isany = true;\n }\n\n if ((jleft > j1 || jright < j2) && (jleft < jright - 1)) {\n ymin = this.getAxis('y').GetBinLowEdge(jleft+1);\n ymax = this.getAxis('y').GetBinLowEdge(jright+1);\n isany = true;\n }\n\n if ((kleft > k1 || kright < k2) && (kleft < kright - 1)) {\n zmin = this.getAxis('z').GetBinLowEdge(kleft+1);\n zmax = this.getAxis('z').GetBinLowEdge(kright+1);\n isany = true;\n }\n\n if (isany)\n return this.getFramePainter().zoom(xmin, xmax, ymin, ymax, zmin, zmax);\n }\n\n /** @summary Fill histogram context menu */\n fillHistContextMenu(menu) {\n\n let opts = this.getSupportedDrawOptions();\n\n menu.addDrawMenu('Draw with', opts, arg => {\n if (arg === 'inspect')\n return this.showInspector();\n\n this.decodeOptions(arg);\n\n this.interactiveRedraw(true, 'drawopt');\n });\n }\n\n /** @summary draw RH3 object */\n static async draw(dom, histo /*, opt*/) {\n let painter = new RH3Painter(dom, histo);\n painter.mode3d = true;\n\n return ensureRCanvas(painter, '3d').then(() => {\n\n painter.setAsMainPainter();\n\n painter.options = { Box: 0, Scatter: false, Sphere: 0, Color: false, minimum: kNoZoom, maximum: kNoZoom };\n\n let kind = painter.v7EvalAttr('kind', ''),\n sub = painter.v7EvalAttr('sub', 0),\n o = painter.options;\n\n switch(kind) {\n case 'box': o.Box = 10 + sub; break;\n case 'sphere': o.Sphere = 10 + sub; break;\n case 'col': o.Color = true; break;\n case 'scat': o.Scatter = true; break;\n default: o.Box = 10;\n }\n\n painter.scanContent();\n return painter.redraw();\n });\n }\n\n} // class RH3Painter\n\n/** @summary draw RHistDisplayItem object\n * @private */\nfunction drawHistDisplayItem(dom, obj, opt) {\n if (!obj)\n return null;\n\n if (obj.fAxes.length == 1)\n return RH1Painter.draw(dom, obj, opt);\n\n if (obj.fAxes.length == 2)\n return RH2Painter.draw(dom, obj, opt);\n\n if (obj.fAxes.length == 3)\n return RH3Painter.draw(dom, obj, opt);\n\n return null;\n}\n\n\nexport { RH3Painter, drawHistDisplayItem };\n"],"x_google_ignoreList":[0]} \ No newline at end of file diff --git a/docs/580.ce6123e31b50494f.js b/docs/580.4e80292c5f9c68b1.js similarity index 98% rename from docs/580.ce6123e31b50494f.js rename to docs/580.4e80292c5f9c68b1.js index 2bd075eed..16a959075 100644 --- a/docs/580.ce6123e31b50494f.js +++ b/docs/580.4e80292c5f9c68b1.js @@ -1,2 +1,2 @@ -"use strict";(self.webpackChunkphoenix_app=self.webpackChunkphoenix_app||[]).push([[580],{2580:(N,v,l)=>{l.r(v),l.d(v,{drawLeafPlayer:()=>S,drawTree:()=>U,drawTreePlayer:()=>P,drawTreePlayerKey:()=>k});var x=l(4788),n=l(9542),R=l(2253),y=l(8538),_=l(3414),O=l(3675),f=l(6458),$=l(629),B=l(8189),M=l(5906),A=l(3761),K=l(7822),c=l(9622);function b(i,t,e){return T.apply(this,arguments)}function T(){return(T=(0,x.Z)(function*(i,t,e){let s=t?._typename;return s&&(0,n.isStr)(s)?0==s.indexOf(n.clTH1)?$.TH1Painter.draw(i,t,e):0==s.indexOf(n.clTH2)?B.TH2Painter.draw(i,t,e):0==s.indexOf(n.clTH3)?M.TH3Painter.draw(i,t,e):0==s.indexOf(n.clTGraph)?A.o.draw(i,t,e):s==n.clTPolyMarker3D&&t.$hist?M.TH3Painter.draw(i,t.$hist,e).then(()=>{let r=new f.tK(i,t,e);return r.addToPadPrimitives(),r.redraw=K.Y,r.redraw()}):Promise.reject(Error(`Object of type ${s} cannot be draw with TTree`)):Promise.reject(Error("Object without type cannot be draw with TTree"))})).apply(this,arguments)}function I(i,t){return g.apply(this,arguments)}function g(){return(g=(0,x.Z)(function*(i,t){if(t||this.last_pr){if(this.dump||this.testio){if(!t)return;if((0,n.isBatchMode)()){let s=new O.be(this.drawid);return s.selectDom().property("_json_object_",i),s}if((0,n.isFunc)(n.internals.drawInspector))return n.internals.drawInspector(this.drawid,i);let e=(0,n.create)(n.clTObjString);return e.fString=(0,n.toJSON)(i,2),(0,f.VE)(this.drawid,e)}return this.last_pr||(this.last_pr=Promise.resolve(!0)),this.last_pr.then(()=>(this.last_pr=this.obj_painter?this.obj_painter.redrawObject(i).then(()=>this.obj_painter):b(this.drawid,i).then(e=>(this.obj_painter=e,t||(this.last_pr=null),e)),t?this.last_pr:null))}})).apply(this,arguments)}function C(i){return i.draw_first=!0,i.configureOnline=function(t,e,s,r,a){this.setItemName(t,"",this),this.url=e,this.root_version=r,this.askey=s,this.draw_expr=a},i.configureTree=function(t){this.local_tree=t},i.showExtraButtons=function(t){let e=this.selectDom(),s=this.local_tree?this.local_tree.fEntries:0;e.select(".treedraw_more").remove(),e.select(".treedraw_buttons").node().innerHTML+=`Cut: Opt: Num: First: `,e.select(".treedraw_exe").on("click",()=>this.performDraw()),e.select(".treedraw_cut").property("value",t?.parse_cut||"").on("change",()=>this.performDraw()),e.select(".treedraw_opt").property("value",t?.drawopt||"").on("change",()=>this.performDraw()),e.select(".treedraw_number").attr("value",t?.numentries||""),e.select(".treedraw_first").attr("value",t?.firstentry||""),e.select(".treedraw_clear").on("click",()=>(0,f.Eq)(this.drawid))},i.showPlayer=function(t){let e=this.selectDom();this.drawid="jsroot_tree_player_"+n.internals.id_counter+++"_draw";let s=t?.parse_cut||t?.numentries||t?.firstentry;e.html(`
Expr:

`),this.setTopPainter(),this.local_tree&&e.select(".treedraw_buttons").attr("title","Tree draw player for: "+this.local_tree.fName),e.select(".treedraw_exe").on("click",()=>this.performDraw()),e.select(".treedraw_varexp").attr("value",t?.parse_expr||this.draw_expr||"px:py").on("change",()=>this.performDraw()),e.select(".treedraw_varexp_info").attr("title","Example of valid draw expressions:\n px - 1-dim draw\n px:py - 2-dim draw\n px:py:pz - 3-dim draw\n px+py:px-py - use any expressions\n px:py>>Graph - create and draw TGraph\n px:py>>dump - dump extracted variables\n px:py>>h(50,-5,5,50,-5,5) - custom histogram\n px:py;hbins:100 - custom number of bins"),s?this.showExtraButtons(t):e.select(".treedraw_more").on("click",()=>this.showExtraButtons(t)),this.checkResize(),(0,c.MG)(this)},i.getValue=function(t){const e=this.selectDom().select(t);if(e.empty())return;const s=e.property("value");return void 0!==s?s:e.attr("value")},i.performLocalDraw=function(){if(!this.local_tree)return;const t=this.selectDom(),e={expr:this.getValue(".treedraw_varexp")};t.select(".treedraw_more").empty()&&(e.cut=this.getValue(".treedraw_cut"),e.cut||delete e.cut,e.drawopt=this.getValue(".treedraw_opt"),"dump"===e.drawopt&&(e.dump=!0,e.drawopt=""),e.drawopt||delete e.drawopt,e.numentries=parseInt(this.getValue(".treedraw_number")),Number.isInteger(e.numentries)||delete e.numentries,e.firstentry=parseInt(this.getValue(".treedraw_first")),Number.isInteger(e.firstentry)||delete e.firstentry),(0,f.Eq)(this.drawid),e.drawid=this.drawid,e.progress=I.bind(e),(0,_.treeDraw)(this.local_tree,e).then(s=>e.progress(s,!0))},i.getDrawOpt=function(){let t="player",e=this.getValue(".treedraw_varexp");return e&&(t+=":"+e),t},i.performDraw=function(){if(this.local_tree)return this.performLocalDraw();let t=this.selectDom(),e=this.url+"/exe.json.gz?compact=3&method=Draw",s=this.getValue(".treedraw_varexp"),r="h_tree_draw",a="",o=s.indexOf(">>");if(o<0)s+=">>"+r;else{r=s.slice(o+2),"+"==r[0]&&(r=r.slice(1));let u=r.indexOf("(");u>0&&(r=r.slice(0,u))}if(t.select(".treedraw_more").empty()){let u=this.getValue(".treedraw_cut"),h=this.getValue(".treedraw_number"),p=this.getValue(".treedraw_first");a=this.getValue(".treedraw_opt"),e+=`&prototype="const char*,const char*,Option_t*,Long64_t,Long64_t"&varexp="${s}"&selection="${u}"`,""==h&&(h=this.root_version>=394499?"TTree::kMaxEntries":"1000000000"),""==p&&(p="0"),e+=`&option="${a}"&nentries=${h}&firstentry=${p}`}else e+=`&prototype="Option_t*"&opt="${s}"`;e+="&_ret_object_="+r;const d=()=>{(0,n.httpRequest)(e,"object").then(u=>{(0,f.Eq)(this.drawid),b(this.drawid,u,a)})};this.draw_expr=s,this.askey?(this.askey=!1,(0,n.httpRequest)(this.url+"/root.json.gz?compact=3","text").then(d)):d()},i.checkResize=function(){(0,f.SI)(this.drawid)},i}function P(i,t,e,s){let r=i.findItem(t),a=i.getTopOnlineItem(r),o="",d=0;if(!r||!a)return null;if(s){for(o=r._name;r&&!r._ttree;)r=r._parent;if(!r)return null;t=i.itemFullName(r)}let u=i.getOnlineItemUrl(t);if(!u)return null;let h=a._root_version||400129,p=i.getDisplay();if(!p)return null;let L=p.findFrame(t,!0);if(!L)return null;let V=(0,R.Ys)(L).attr("id"),w=new O.be(V);if(r._childs&&!s)for(let E=0;E0&&(o+=":"),o+=m._name)}return C(w),w.configureOnline(t,u,e,h,o),w.showPlayer(),w}function k(i,t){return P(i,t,!0)}function S(i,t){return P(i,t,!1,!0)}function U(i,t,e){return D.apply(this,arguments)}function D(){return(D=(0,x.Z)(function*(i,t,e){let a,o,s=t,r=e;if(t._typename==_.clTBranchFunc?(r={expr:`.${t.func}()`,branch:t.branch},e&&0==e.indexOf("dump")?r.expr+=">>"+e:e&&(r.expr+=e),s=t.branch.$tree):t.$branch?(r={expr:`.${t.fName}${e||""}`,branch:t.$branch},(r.branch.fType===_.kClonesNode||r.branch.fType===_.kSTLNode)&&(r.expr=e,r.direct_branch=!0),s=t.$branch.$tree):t.$tree?(!e&&t.fStreamerType&&t.fStreamerType!==y.kt&&t.fStreamerType>=y.C5&&t.fStreamerType<=y.R1&&(e="dump"),r={expr:e,branch:t},s=t.$tree):(r||(r="player"),(0,n.isStr)(r)&&(r={expr:r})),!s)throw Error("No TTree object available for TTree::Draw");if((0,n.isStr)(r.expr)){let d=r.expr.indexOf("player");0==d?(r.player=!0,r.expr=r.expr.slice(6),":"==r.expr[0]&&(r.expr=r.expr.slice(1))):d>=0&&d==r.expr.length-6&&(r.player=!0,r.expr=r.expr.slice(0,d),d>0&&";"==r.expr[d-1]&&(r.expr=r.expr.slice(0,d-1)))}if(r.player?(a=new f.tK(i,t,e),C(a),a.configureTree(s),a.showPlayer(r),r.drawid=a.drawid):r.drawid=i,r.progress=I.bind(r),"testio"===r.expr)r.testio=!0,r.showProgress=c.Ae,o=(0,_.treeIOTest)(s,r);else{if(!r.expr&&!r.branch)return a;o=(0,_.treeDraw)(s,r)}return o.then(d=>r.progress(d,!0))})).apply(this,arguments)}_.TDrawSelector.prototype.ShowProgress=function(i){if(typeof document>"u"||(0,n.isBatchMode)())return;if(void 0===i||!Number.isFinite(i))return(0,c.Ae)();if(this.last_progress!==i){let a=i-this.last_progress;this.aver_diff||(this.aver_diff=a),this.aver_diff=.3*a+.7*this.aver_diff}let t=0;this.aver_diff<=0?t=0:this.aver_diff<1e-4?t=3:this.aver_diff<.001?t=2:this.aver_diff<.01&&(t=1);let e=document.createElement("p"),s=document.createTextNode("TTree draw "+(100*i).toFixed(t)+" % "),r=this;e.appendChild(s),e.title="Click on element to break drawing",e.onclick=function(){if(++r._break<3)return e.title="Tree draw will break after next I/O operation",s.nodeValue="Breaking ... ";r.Abort(),(0,c.Ae)()},(0,c.Ae)(e),this.last_progress=i}}}]); -//# sourceMappingURL=580.ce6123e31b50494f.js.map \ No newline at end of file +"use strict";(self.webpackChunkphoenix_app=self.webpackChunkphoenix_app||[]).push([[580],{2580:(N,v,l)=>{l.r(v),l.d(v,{drawLeafPlayer:()=>S,drawTree:()=>U,drawTreePlayer:()=>P,drawTreePlayerKey:()=>k});var x=l(5835),n=l(9542),R=l(2253),y=l(8538),_=l(3414),O=l(3675),f=l(6458),$=l(629),B=l(8189),M=l(5906),A=l(3761),K=l(7822),c=l(9622);function b(i,t,e){return T.apply(this,arguments)}function T(){return(T=(0,x.Z)(function*(i,t,e){let s=t?._typename;return s&&(0,n.isStr)(s)?0==s.indexOf(n.clTH1)?$.TH1Painter.draw(i,t,e):0==s.indexOf(n.clTH2)?B.TH2Painter.draw(i,t,e):0==s.indexOf(n.clTH3)?M.TH3Painter.draw(i,t,e):0==s.indexOf(n.clTGraph)?A.o.draw(i,t,e):s==n.clTPolyMarker3D&&t.$hist?M.TH3Painter.draw(i,t.$hist,e).then(()=>{let r=new f.tK(i,t,e);return r.addToPadPrimitives(),r.redraw=K.Y,r.redraw()}):Promise.reject(Error(`Object of type ${s} cannot be draw with TTree`)):Promise.reject(Error("Object without type cannot be draw with TTree"))})).apply(this,arguments)}function I(i,t){return g.apply(this,arguments)}function g(){return(g=(0,x.Z)(function*(i,t){if(t||this.last_pr){if(this.dump||this.testio){if(!t)return;if((0,n.isBatchMode)()){let s=new O.be(this.drawid);return s.selectDom().property("_json_object_",i),s}if((0,n.isFunc)(n.internals.drawInspector))return n.internals.drawInspector(this.drawid,i);let e=(0,n.create)(n.clTObjString);return e.fString=(0,n.toJSON)(i,2),(0,f.VE)(this.drawid,e)}return this.last_pr||(this.last_pr=Promise.resolve(!0)),this.last_pr.then(()=>(this.last_pr=this.obj_painter?this.obj_painter.redrawObject(i).then(()=>this.obj_painter):b(this.drawid,i).then(e=>(this.obj_painter=e,t||(this.last_pr=null),e)),t?this.last_pr:null))}})).apply(this,arguments)}function C(i){return i.draw_first=!0,i.configureOnline=function(t,e,s,r,a){this.setItemName(t,"",this),this.url=e,this.root_version=r,this.askey=s,this.draw_expr=a},i.configureTree=function(t){this.local_tree=t},i.showExtraButtons=function(t){let e=this.selectDom(),s=this.local_tree?this.local_tree.fEntries:0;e.select(".treedraw_more").remove(),e.select(".treedraw_buttons").node().innerHTML+=`Cut: Opt: Num: First: `,e.select(".treedraw_exe").on("click",()=>this.performDraw()),e.select(".treedraw_cut").property("value",t?.parse_cut||"").on("change",()=>this.performDraw()),e.select(".treedraw_opt").property("value",t?.drawopt||"").on("change",()=>this.performDraw()),e.select(".treedraw_number").attr("value",t?.numentries||""),e.select(".treedraw_first").attr("value",t?.firstentry||""),e.select(".treedraw_clear").on("click",()=>(0,f.Eq)(this.drawid))},i.showPlayer=function(t){let e=this.selectDom();this.drawid="jsroot_tree_player_"+n.internals.id_counter+++"_draw";let s=t?.parse_cut||t?.numentries||t?.firstentry;e.html(`
Expr:

`),this.setTopPainter(),this.local_tree&&e.select(".treedraw_buttons").attr("title","Tree draw player for: "+this.local_tree.fName),e.select(".treedraw_exe").on("click",()=>this.performDraw()),e.select(".treedraw_varexp").attr("value",t?.parse_expr||this.draw_expr||"px:py").on("change",()=>this.performDraw()),e.select(".treedraw_varexp_info").attr("title","Example of valid draw expressions:\n px - 1-dim draw\n px:py - 2-dim draw\n px:py:pz - 3-dim draw\n px+py:px-py - use any expressions\n px:py>>Graph - create and draw TGraph\n px:py>>dump - dump extracted variables\n px:py>>h(50,-5,5,50,-5,5) - custom histogram\n px:py;hbins:100 - custom number of bins"),s?this.showExtraButtons(t):e.select(".treedraw_more").on("click",()=>this.showExtraButtons(t)),this.checkResize(),(0,c.MG)(this)},i.getValue=function(t){const e=this.selectDom().select(t);if(e.empty())return;const s=e.property("value");return void 0!==s?s:e.attr("value")},i.performLocalDraw=function(){if(!this.local_tree)return;const t=this.selectDom(),e={expr:this.getValue(".treedraw_varexp")};t.select(".treedraw_more").empty()&&(e.cut=this.getValue(".treedraw_cut"),e.cut||delete e.cut,e.drawopt=this.getValue(".treedraw_opt"),"dump"===e.drawopt&&(e.dump=!0,e.drawopt=""),e.drawopt||delete e.drawopt,e.numentries=parseInt(this.getValue(".treedraw_number")),Number.isInteger(e.numentries)||delete e.numentries,e.firstentry=parseInt(this.getValue(".treedraw_first")),Number.isInteger(e.firstentry)||delete e.firstentry),(0,f.Eq)(this.drawid),e.drawid=this.drawid,e.progress=I.bind(e),(0,_.treeDraw)(this.local_tree,e).then(s=>e.progress(s,!0))},i.getDrawOpt=function(){let t="player",e=this.getValue(".treedraw_varexp");return e&&(t+=":"+e),t},i.performDraw=function(){if(this.local_tree)return this.performLocalDraw();let t=this.selectDom(),e=this.url+"/exe.json.gz?compact=3&method=Draw",s=this.getValue(".treedraw_varexp"),r="h_tree_draw",a="",o=s.indexOf(">>");if(o<0)s+=">>"+r;else{r=s.slice(o+2),"+"==r[0]&&(r=r.slice(1));let u=r.indexOf("(");u>0&&(r=r.slice(0,u))}if(t.select(".treedraw_more").empty()){let u=this.getValue(".treedraw_cut"),h=this.getValue(".treedraw_number"),p=this.getValue(".treedraw_first");a=this.getValue(".treedraw_opt"),e+=`&prototype="const char*,const char*,Option_t*,Long64_t,Long64_t"&varexp="${s}"&selection="${u}"`,""==h&&(h=this.root_version>=394499?"TTree::kMaxEntries":"1000000000"),""==p&&(p="0"),e+=`&option="${a}"&nentries=${h}&firstentry=${p}`}else e+=`&prototype="Option_t*"&opt="${s}"`;e+="&_ret_object_="+r;const d=()=>{(0,n.httpRequest)(e,"object").then(u=>{(0,f.Eq)(this.drawid),b(this.drawid,u,a)})};this.draw_expr=s,this.askey?(this.askey=!1,(0,n.httpRequest)(this.url+"/root.json.gz?compact=3","text").then(d)):d()},i.checkResize=function(){(0,f.SI)(this.drawid)},i}function P(i,t,e,s){let r=i.findItem(t),a=i.getTopOnlineItem(r),o="",d=0;if(!r||!a)return null;if(s){for(o=r._name;r&&!r._ttree;)r=r._parent;if(!r)return null;t=i.itemFullName(r)}let u=i.getOnlineItemUrl(t);if(!u)return null;let h=a._root_version||400129,p=i.getDisplay();if(!p)return null;let L=p.findFrame(t,!0);if(!L)return null;let V=(0,R.Ys)(L).attr("id"),w=new O.be(V);if(r._childs&&!s)for(let E=0;E0&&(o+=":"),o+=m._name)}return C(w),w.configureOnline(t,u,e,h,o),w.showPlayer(),w}function k(i,t){return P(i,t,!0)}function S(i,t){return P(i,t,!1,!0)}function U(i,t,e){return D.apply(this,arguments)}function D(){return(D=(0,x.Z)(function*(i,t,e){let a,o,s=t,r=e;if(t._typename==_.clTBranchFunc?(r={expr:`.${t.func}()`,branch:t.branch},e&&0==e.indexOf("dump")?r.expr+=">>"+e:e&&(r.expr+=e),s=t.branch.$tree):t.$branch?(r={expr:`.${t.fName}${e||""}`,branch:t.$branch},(r.branch.fType===_.kClonesNode||r.branch.fType===_.kSTLNode)&&(r.expr=e,r.direct_branch=!0),s=t.$branch.$tree):t.$tree?(!e&&t.fStreamerType&&t.fStreamerType!==y.kt&&t.fStreamerType>=y.C5&&t.fStreamerType<=y.R1&&(e="dump"),r={expr:e,branch:t},s=t.$tree):(r||(r="player"),(0,n.isStr)(r)&&(r={expr:r})),!s)throw Error("No TTree object available for TTree::Draw");if((0,n.isStr)(r.expr)){let d=r.expr.indexOf("player");0==d?(r.player=!0,r.expr=r.expr.slice(6),":"==r.expr[0]&&(r.expr=r.expr.slice(1))):d>=0&&d==r.expr.length-6&&(r.player=!0,r.expr=r.expr.slice(0,d),d>0&&";"==r.expr[d-1]&&(r.expr=r.expr.slice(0,d-1)))}if(r.player?(a=new f.tK(i,t,e),C(a),a.configureTree(s),a.showPlayer(r),r.drawid=a.drawid):r.drawid=i,r.progress=I.bind(r),"testio"===r.expr)r.testio=!0,r.showProgress=c.Ae,o=(0,_.treeIOTest)(s,r);else{if(!r.expr&&!r.branch)return a;o=(0,_.treeDraw)(s,r)}return o.then(d=>r.progress(d,!0))})).apply(this,arguments)}_.TDrawSelector.prototype.ShowProgress=function(i){if(typeof document>"u"||(0,n.isBatchMode)())return;if(void 0===i||!Number.isFinite(i))return(0,c.Ae)();if(this.last_progress!==i){let a=i-this.last_progress;this.aver_diff||(this.aver_diff=a),this.aver_diff=.3*a+.7*this.aver_diff}let t=0;this.aver_diff<=0?t=0:this.aver_diff<1e-4?t=3:this.aver_diff<.001?t=2:this.aver_diff<.01&&(t=1);let e=document.createElement("p"),s=document.createTextNode("TTree draw "+(100*i).toFixed(t)+" % "),r=this;e.appendChild(s),e.title="Click on element to break drawing",e.onclick=function(){if(++r._break<3)return e.title="Tree draw will break after next I/O operation",s.nodeValue="Breaking ... ";r.Abort(),(0,c.Ae)()},(0,c.Ae)(e),this.last_progress=i}}}]); +//# sourceMappingURL=580.4e80292c5f9c68b1.js.map \ No newline at end of file diff --git a/docs/580.4e80292c5f9c68b1.js.map b/docs/580.4e80292c5f9c68b1.js.map new file mode 100644 index 000000000..0ef307d8d --- /dev/null +++ b/docs/580.4e80292c5f9c68b1.js.map @@ -0,0 +1 @@ +{"version":3,"file":"580.4e80292c5f9c68b1.js","mappings":"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","names":["drawTreeDrawResult","_x","dom","obj","opt","typ","_typename","isStr","indexOf","clTH1","TH1Painter","clTH2","TH2Painter","clTH3","TH3Painter","clTGraph","TGraphPainter","clTPolyMarker3D","$hist","then","p2","ObjectPainter","addToPadPrimitives","redraw","drawPolyMarker3D","Promise","reject","Error","apply","treeDrawProgress","_x4","final","this","last_pr","dump","testio","isBatchMode","painter","BasePainter","drawid","selectDom","property","isFunc","internals","str","create","clTObjString","fString","toJSON","drawRawText","resolve","obj_painter","redrawObject","p","createTreePlayer","player","draw_first","configureOnline","itemname","url","askey","root_version","expr","setItemName","draw_expr","configureTree","tree","local_tree","showExtraButtons","args","main","numentries","fEntries","select","remove","node","innerHTML","on","performDraw","parse_cut","drawopt","attr","firstentry","cleanup","showPlayer","show_extra","html","setTopPainter","fName","parse_expr","checkResize","registerForResize","getValue","sel","elem","empty","val","undefined","performLocalDraw","frame","cut","parseInt","Number","isInteger","progress","bind","treeDraw","getDrawOpt","res","hname","option","pos","slice","pos2","nentries","submitDrawRequest","httpRequest","resize","drawTreePlayer","hpainter","asleaf","item","findItem","top","getTopOnlineItem","leaf_cnt","_name","_ttree","_parent","itemFullName","getOnlineItemUrl","_root_version","mdi","getDisplay","findFrame","divid","d3_select","_childs","n","length","leaf","_kind","drawTreePlayerKey","drawLeafPlayer","drawTree","_x6","pr","clTBranchFunc","func","branch","$tree","$branch","fType","kClonesNode","kSTLNode","direct_branch","fStreamerType","kTString","kObject","kAnyP","showProgress","treeIOTest","TDrawSelector","value","document","isFinite","last_progress","diff","aver_diff","ndig","main_box","createElement","text_node","createTextNode","toFixed","selector","appendChild","title","onclick","_break","nodeValue","Abort"],"sourceRoot":"webpack:///","sources":["../node_modules/jsroot/modules/draw/TTree.mjs"],"sourcesContent":["import { internals, httpRequest, isBatchMode, isFunc, isStr, create, toJSON, clTObjString,\n clTGraph, clTPolyMarker3D, clTH1, clTH2, clTH3 } from '../core.mjs';\nimport { select as d3_select } from '../d3.mjs';\nimport { kTString, kObject, kAnyP } from '../io.mjs';\nimport { kClonesNode, kSTLNode, clTBranchFunc, treeDraw, treeIOTest, TDrawSelector } from '../tree.mjs';\nimport { BasePainter } from '../base/BasePainter.mjs';\nimport { cleanup, resize, drawRawText, ObjectPainter } from '../base/ObjectPainter.mjs';\nimport { TH1Painter } from '../hist/TH1Painter.mjs';\nimport { TH2Painter } from '../hist/TH2Painter.mjs';\nimport { TH3Painter } from '../hist/TH3Painter.mjs';\nimport { TGraphPainter } from '../hist/TGraphPainter.mjs';\nimport { drawPolyMarker3D } from '../draw/TPolyMarker3D.mjs';\nimport { showProgress, registerForResize } from '../gui/utils.mjs';\n\n/** @summary Show TTree::Draw progress during processing */\nTDrawSelector.prototype.ShowProgress = function(value) {\n if ((typeof document == 'undefined') || isBatchMode()) return;\n\n if ((value === undefined) || !Number.isFinite(value))\n return showProgress();\n\n if (this.last_progress !== value) {\n let diff = value - this.last_progress;\n if (!this.aver_diff) this.aver_diff = diff;\n this.aver_diff = diff * 0.3 + this.aver_diff * 0.7;\n }\n\n let ndig = 0;\n if (this.aver_diff <= 0)\n ndig = 0;\n else if (this.aver_diff < 0.0001)\n ndig = 3;\n else if (this.aver_diff < 0.001)\n ndig = 2;\n else if (this.aver_diff < 0.01)\n ndig = 1;\n\n let main_box = document.createElement('p'),\n text_node = document.createTextNode('TTree draw ' + (value * 100).toFixed(ndig) + ' % '),\n selector = this;\n\n main_box.appendChild(text_node);\n main_box.title = 'Click on element to break drawing';\n\n main_box.onclick = function() {\n if (++selector._break < 3) {\n main_box.title = 'Tree draw will break after next I/O operation';\n return text_node.nodeValue = 'Breaking ... ';\n }\n selector.Abort();\n showProgress();\n };\n\n showProgress(main_box);\n this.last_progress = value;\n}\n\n/** @summary Draw result of tree drawing\n * @private */\nasync function drawTreeDrawResult(dom, obj, opt) {\n\n let typ = obj?._typename;\n\n if (!typ || !isStr(typ))\n return Promise.reject(Error(`Object without type cannot be draw with TTree`));\n\n if (typ.indexOf(clTH1) == 0)\n return TH1Painter.draw(dom, obj, opt);\n if (typ.indexOf(clTH2) == 0)\n return TH2Painter.draw(dom, obj, opt);\n if (typ.indexOf(clTH3) == 0)\n return TH3Painter.draw(dom, obj, opt);\n if (typ.indexOf(clTGraph) == 0)\n return TGraphPainter.draw(dom, obj, opt);\n if ((typ == clTPolyMarker3D) && obj.$hist) {\n return TH3Painter.draw(dom, obj.$hist, opt).then(() => {\n let p2 = new ObjectPainter(dom, obj, opt);\n p2.addToPadPrimitives();\n p2.redraw = drawPolyMarker3D;\n return p2.redraw();\n });\n }\n\n return Promise.reject(Error(`Object of type ${typ} cannot be draw with TTree`));\n}\n\n\n/** @summary Handle callback function with progress of tree draw\n * @private */\nasync function treeDrawProgress(obj, final) {\n\n // no need to update drawing if previous is not yet completed\n if (!final && !this.last_pr)\n return;\n\n if (this.dump || this.testio) {\n if (!final) return;\n if (isBatchMode()) {\n let painter = new BasePainter(this.drawid);\n painter.selectDom().property('_json_object_', obj);\n return painter;\n }\n if (isFunc(internals.drawInspector))\n return internals.drawInspector(this.drawid, obj);\n let str = create(clTObjString);\n str.fString = toJSON(obj,2);\n return drawRawText(this.drawid, str);\n }\n\n // complex logic with intermediate update\n // while TTree reading not synchronized with drawing,\n // next portion can appear before previous is drawn\n // critical is last drawing which should wait for previous one\n // therefore last_pr is kept as inidication that promise is not yet processed\n\n if (!this.last_pr) this.last_pr = Promise.resolve(true);\n\n return this.last_pr.then(() => {\n if (this.obj_painter)\n this.last_pr = this.obj_painter.redrawObject(obj).then(() => this.obj_painter);\n else\n this.last_pr = drawTreeDrawResult(this.drawid, obj).then(p => {\n this.obj_painter = p;\n if (!final) this.last_pr = null;\n return p; // return painter for histogram\n });\n\n return final ? this.last_pr : null;\n });\n}\n\n\n/** @summary Create painter to perform tree drawing on server side\n * @private */\nfunction createTreePlayer(player) {\n\n player.draw_first = true;\n\n player.configureOnline = function(itemname, url, askey, root_version, expr) {\n this.setItemName(itemname, '', this);\n this.url = url;\n this.root_version = root_version;\n this.askey = askey;\n this.draw_expr = expr;\n }\n\n player.configureTree = function(tree) {\n this.local_tree = tree;\n }\n\n player.showExtraButtons = function(args) {\n let main = this.selectDom(),\n numentries = this.local_tree ? this.local_tree.fEntries : 0;\n\n main.select('.treedraw_more').remove(); // remove more button first\n\n main.select('.treedraw_buttons').node().innerHTML +=\n 'Cut: '+\n 'Opt: '+\n `Num: `+\n `First: `+\n '';\n\n main.select('.treedraw_exe').on('click', () => this.performDraw());\n main.select('.treedraw_cut').property('value', args?.parse_cut || '').on('change', () => this.performDraw());\n main.select('.treedraw_opt').property('value', args?.drawopt || '').on('change', () => this.performDraw());\n main.select('.treedraw_number').attr('value', args?.numentries || ''); // .on('change', () => this.performDraw());\n main.select('.treedraw_first').attr('value', args?.firstentry || ''); // .on('change', () => this.performDraw());\n main.select('.treedraw_clear').on('click', () => cleanup(this.drawid));\n }\n\n player.showPlayer = function(args) {\n\n let main = this.selectDom();\n\n this.drawid = 'jsroot_tree_player_' + internals.id_counter++ + '_draw';\n\n let show_extra = args?.parse_cut || args?.numentries || args?.firstentry;\n\n main.html('
'+\n '
' +\n '' +\n 'Expr:'+\n '' +\n '' +\n '
' +\n '

' +\n `
` +\n '
');\n\n // only when main html element created, one can set painter\n // ObjectPainter allow such usage of methods from BasePainter\n this.setTopPainter();\n\n if (this.local_tree)\n main.select('.treedraw_buttons')\n .attr('title', 'Tree draw player for: ' + this.local_tree.fName);\n main.select('.treedraw_exe').on('click', () => this.performDraw());\n main.select('.treedraw_varexp')\n .attr('value', args?.parse_expr || this.draw_expr || 'px:py')\n .on('change', () => this.performDraw());\n main.select('.treedraw_varexp_info')\n .attr('title', 'Example of valid draw expressions:\\n' +\n ' px - 1-dim draw\\n' +\n ' px:py - 2-dim draw\\n' +\n ' px:py:pz - 3-dim draw\\n' +\n ' px+py:px-py - use any expressions\\n' +\n ' px:py>>Graph - create and draw TGraph\\n' +\n ' px:py>>dump - dump extracted variables\\n' +\n ' px:py>>h(50,-5,5,50,-5,5) - custom histogram\\n' +\n ' px:py;hbins:100 - custom number of bins');\n\n if (show_extra)\n this.showExtraButtons(args);\n else\n main.select('.treedraw_more').on('click', () => this.showExtraButtons(args));\n\n this.checkResize();\n\n registerForResize(this);\n }\n\n player.getValue = function(sel) {\n const elem = this.selectDom().select(sel);\n if (elem.empty()) return;\n const val = elem.property('value');\n if (val !== undefined) return val;\n return elem.attr('value');\n }\n\n player.performLocalDraw = function() {\n if (!this.local_tree) return;\n\n const frame = this.selectDom(),\n args = { expr: this.getValue('.treedraw_varexp') };\n\n if (frame.select('.treedraw_more').empty()) {\n args.cut = this.getValue('.treedraw_cut');\n if (!args.cut) delete args.cut;\n\n args.drawopt = this.getValue('.treedraw_opt');\n if (args.drawopt === 'dump') { args.dump = true; args.drawopt = ''; }\n if (!args.drawopt) delete args.drawopt;\n\n args.numentries = parseInt(this.getValue('.treedraw_number'));\n if (!Number.isInteger(args.numentries)) delete args.numentries;\n\n args.firstentry = parseInt(this.getValue('.treedraw_first'));\n if (!Number.isInteger(args.firstentry)) delete args.firstentry;\n }\n\n /* if (args.drawopt) */ cleanup(this.drawid);\n\n args.drawid = this.drawid;\n\n args.progress = treeDrawProgress.bind(args);\n\n treeDraw(this.local_tree, args).then(obj => args.progress(obj, true));\n }\n\n player.getDrawOpt = function() {\n let res = 'player',\n expr = this.getValue('.treedraw_varexp')\n if (expr) res += ':' + expr;\n return res;\n }\n\n player.performDraw = function() {\n\n if (this.local_tree)\n return this.performLocalDraw();\n\n let frame = this.selectDom(),\n url = this.url + '/exe.json.gz?compact=3&method=Draw',\n expr = this.getValue('.treedraw_varexp'),\n hname = 'h_tree_draw', option = '',\n pos = expr.indexOf('>>');\n\n if (pos < 0) {\n expr += '>>' + hname;\n } else {\n hname = expr.slice(pos+2);\n if (hname[0] == '+') hname = hname.slice(1);\n let pos2 = hname.indexOf('(');\n if (pos2 > 0) hname = hname.slice(0, pos2);\n }\n\n if (frame.select('.treedraw_more').empty()) {\n let cut = this.getValue('.treedraw_cut'),\n nentries = this.getValue('.treedraw_number'),\n firstentry = this.getValue('.treedraw_first');\n\n option = this.getValue('.treedraw_opt');\n\n url += `&prototype=\"const char*,const char*,Option_t*,Long64_t,Long64_t\"&varexp=\"${expr}\"&selection=\"${cut}\"`;\n\n // provide all optional arguments - default value kMaxEntries not works properly in ROOT6\n if (nentries == '') nentries = (this.root_version >= 394499) ? 'TTree::kMaxEntries': '1000000000'; // kMaxEntries available since ROOT 6.05/03\n if (firstentry == '') firstentry = '0';\n url += `&option=\"${option}\"&nentries=${nentries}&firstentry=${firstentry}`;\n } else {\n url += `&prototype=\"Option_t*\"&opt=\"${expr}\"`;\n }\n url += '&_ret_object_=' + hname;\n\n const submitDrawRequest = () => {\n httpRequest(url, 'object').then(res => {\n cleanup(this.drawid);\n drawTreeDrawResult(this.drawid, res, option);\n });\n };\n\n this.draw_expr = expr;\n\n if (this.askey) {\n // first let read tree from the file\n this.askey = false;\n httpRequest(this.url + '/root.json.gz?compact=3', 'text').then(submitDrawRequest);\n } else {\n submitDrawRequest();\n }\n }\n\n player.checkResize = function(/*arg*/) {\n resize(this.drawid);\n }\n\n return player;\n}\n\n\n/** @summary function used with THttpServer to assign player for the TTree object\n * @private */\nfunction drawTreePlayer(hpainter, itemname, askey, asleaf) {\n\n let item = hpainter.findItem(itemname),\n top = hpainter.getTopOnlineItem(item),\n expr = '', leaf_cnt = 0;\n if (!item || !top) return null;\n\n if (asleaf) {\n expr = item._name;\n while (item && !item._ttree) item = item._parent;\n if (!item) return null;\n itemname = hpainter.itemFullName(item);\n }\n\n let url = hpainter.getOnlineItemUrl(itemname);\n if (!url) return null;\n\n let root_version = top._root_version || 400129; // by default use version number 6-27-01\n\n let mdi = hpainter.getDisplay();\n if (!mdi) return null;\n\n let frame = mdi.findFrame(itemname, true);\n if (!frame) return null;\n\n let divid = d3_select(frame).attr('id'),\n player = new BasePainter(divid);\n\n if (item._childs && !asleaf)\n for (let n = 0; n < item._childs.length; ++n) {\n let leaf = item._childs[n];\n if (leaf && leaf._kind && (leaf._kind.indexOf('ROOT.TLeaf') == 0) && (leaf_cnt < 2)) {\n if (leaf_cnt++ > 0) expr += ':';\n expr += leaf._name;\n }\n }\n\n createTreePlayer(player);\n player.configureOnline(itemname, url, askey, root_version, expr);\n player.showPlayer();\n\n return player;\n}\n\n/** @summary function used with THttpServer when tree is not yet loaded\n * @private */\nfunction drawTreePlayerKey(hpainter, itemname) {\n return drawTreePlayer(hpainter, itemname, true);\n}\n\n/** @summary function used with THttpServer when tree is not yet loaded\n * @private */\nfunction drawLeafPlayer(hpainter, itemname) {\n return drawTreePlayer(hpainter, itemname, false, true);\n}\n\n/** @summary function called from draw()\n * @desc just envelope for real TTree::Draw method which do the main job\n * Can be also used for the branch and leaf object\n * @private */\nasync function drawTree(dom, obj, opt) {\n\n let tree = obj, args = opt;\n\n if (obj._typename == clTBranchFunc) {\n // fictional object, created only in browser\n args = { expr: `.${obj.func}()`, branch: obj.branch };\n if (opt && opt.indexOf('dump') == 0)\n args.expr += '>>' + opt;\n else if (opt)\n args.expr += opt;\n tree = obj.branch.$tree;\n } else if (obj.$branch) {\n // this is drawing of the single leaf from the branch\n args = { expr: `.${obj.fName}${opt || ''}`, branch: obj.$branch };\n if ((args.branch.fType === kClonesNode) || (args.branch.fType === kSTLNode)) {\n // special case of size\n args.expr = opt;\n args.direct_branch = true;\n }\n\n tree = obj.$branch.$tree;\n } else if (obj.$tree) {\n // this is drawing of the branch\n\n // if generic object tried to be drawn without specifying any options, it will be just dump\n if (!opt && obj.fStreamerType && (obj.fStreamerType !== kTString) &&\n (obj.fStreamerType >= kObject) && (obj.fStreamerType <= kAnyP)) opt = 'dump';\n\n args = { expr: opt, branch: obj };\n tree = obj.$tree;\n } else {\n if (!args) args = 'player';\n if (isStr(args)) args = { expr: args };\n }\n\n if (!tree)\n throw Error('No TTree object available for TTree::Draw');\n\n if (isStr(args.expr)) {\n let p = args.expr.indexOf('player');\n if (p == 0) {\n args.player = true;\n args.expr = args.expr.slice(6);\n if (args.expr[0] == ':') args.expr = args.expr.slice(1);\n } else if ((p >= 0) && (p == args.expr.length-6)) {\n args.player = true;\n args.expr = args.expr.slice(0, p);\n if ((p > 0) && (args.expr[p-1] == ';')) args.expr = args.expr.slice(0, p-1);\n }\n }\n\n let painter;\n\n if (args.player) {\n painter = new ObjectPainter(dom, obj, opt);\n createTreePlayer(painter);\n painter.configureTree(tree);\n painter.showPlayer(args);\n args.drawid = painter.drawid;\n } else {\n args.drawid = dom;\n }\n\n // use in result handling same function as for progress handling\n\n args.progress = treeDrawProgress.bind(args);\n\n let pr;\n if (args.expr === 'testio') {\n args.testio = true;\n args.showProgress = showProgress;\n pr = treeIOTest(tree, args);\n } else if (args.expr || args.branch) {\n pr = treeDraw(tree, args);\n } else\n return painter;\n\n return pr.then(res => args.progress(res, true));\n}\n\nexport { drawTree, drawTreePlayer, drawTreePlayerKey, drawLeafPlayer };\n"],"x_google_ignoreList":[0]} \ No newline at end of file diff --git a/docs/580.ce6123e31b50494f.js.map b/docs/580.ce6123e31b50494f.js.map deleted file mode 100644 index 7502b97f2..000000000 --- a/docs/580.ce6123e31b50494f.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"580.ce6123e31b50494f.js","mappings":"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","names":["drawTreeDrawResult","_x","dom","obj","opt","typ","_typename","isStr","indexOf","clTH1","TH1Painter","clTH2","TH2Painter","clTH3","TH3Painter","clTGraph","TGraphPainter","clTPolyMarker3D","$hist","then","p2","ObjectPainter","addToPadPrimitives","redraw","drawPolyMarker3D","Promise","reject","Error","apply","treeDrawProgress","_x4","final","this","last_pr","dump","testio","isBatchMode","painter","BasePainter","drawid","selectDom","property","isFunc","internals","str","create","clTObjString","fString","toJSON","drawRawText","resolve","obj_painter","redrawObject","p","createTreePlayer","player","draw_first","configureOnline","itemname","url","askey","root_version","expr","setItemName","draw_expr","configureTree","tree","local_tree","showExtraButtons","args","main","numentries","fEntries","select","remove","node","innerHTML","on","performDraw","parse_cut","drawopt","attr","firstentry","cleanup","showPlayer","show_extra","html","setTopPainter","fName","parse_expr","checkResize","registerForResize","getValue","sel","elem","empty","val","undefined","performLocalDraw","frame","cut","parseInt","Number","isInteger","progress","bind","treeDraw","getDrawOpt","res","hname","option","pos","slice","pos2","nentries","submitDrawRequest","httpRequest","resize","drawTreePlayer","hpainter","asleaf","item","findItem","top","getTopOnlineItem","leaf_cnt","_name","_ttree","_parent","itemFullName","getOnlineItemUrl","_root_version","mdi","getDisplay","findFrame","divid","d3_select","_childs","n","length","leaf","_kind","drawTreePlayerKey","drawLeafPlayer","drawTree","_x6","pr","clTBranchFunc","func","branch","$tree","$branch","fType","kClonesNode","kSTLNode","direct_branch","fStreamerType","kTString","kObject","kAnyP","showProgress","treeIOTest","TDrawSelector","value","document","isFinite","last_progress","diff","aver_diff","ndig","main_box","createElement","text_node","createTextNode","toFixed","selector","appendChild","title","onclick","_break","nodeValue","Abort"],"sourceRoot":"webpack:///","sources":["../node_modules/jsroot/modules/draw/TTree.mjs"],"sourcesContent":["import { internals, httpRequest, isBatchMode, isFunc, isStr, create, toJSON, clTObjString,\n clTGraph, clTPolyMarker3D, clTH1, clTH2, clTH3 } from '../core.mjs';\nimport { select as d3_select } from '../d3.mjs';\nimport { kTString, kObject, kAnyP } from '../io.mjs';\nimport { kClonesNode, kSTLNode, clTBranchFunc, treeDraw, treeIOTest, TDrawSelector } from '../tree.mjs';\nimport { BasePainter } from '../base/BasePainter.mjs';\nimport { cleanup, resize, drawRawText, ObjectPainter } from '../base/ObjectPainter.mjs';\nimport { TH1Painter } from '../hist/TH1Painter.mjs';\nimport { TH2Painter } from '../hist/TH2Painter.mjs';\nimport { TH3Painter } from '../hist/TH3Painter.mjs';\nimport { TGraphPainter } from '../hist/TGraphPainter.mjs';\nimport { drawPolyMarker3D } from '../draw/TPolyMarker3D.mjs';\nimport { showProgress, registerForResize } from '../gui/utils.mjs';\n\n/** @summary Show TTree::Draw progress during processing */\nTDrawSelector.prototype.ShowProgress = function(value) {\n if ((typeof document == 'undefined') || isBatchMode()) return;\n\n if ((value === undefined) || !Number.isFinite(value))\n return showProgress();\n\n if (this.last_progress !== value) {\n let diff = value - this.last_progress;\n if (!this.aver_diff) this.aver_diff = diff;\n this.aver_diff = diff * 0.3 + this.aver_diff * 0.7;\n }\n\n let ndig = 0;\n if (this.aver_diff <= 0)\n ndig = 0;\n else if (this.aver_diff < 0.0001)\n ndig = 3;\n else if (this.aver_diff < 0.001)\n ndig = 2;\n else if (this.aver_diff < 0.01)\n ndig = 1;\n\n let main_box = document.createElement('p'),\n text_node = document.createTextNode('TTree draw ' + (value * 100).toFixed(ndig) + ' % '),\n selector = this;\n\n main_box.appendChild(text_node);\n main_box.title = 'Click on element to break drawing';\n\n main_box.onclick = function() {\n if (++selector._break < 3) {\n main_box.title = 'Tree draw will break after next I/O operation';\n return text_node.nodeValue = 'Breaking ... ';\n }\n selector.Abort();\n showProgress();\n };\n\n showProgress(main_box);\n this.last_progress = value;\n}\n\n/** @summary Draw result of tree drawing\n * @private */\nasync function drawTreeDrawResult(dom, obj, opt) {\n\n let typ = obj?._typename;\n\n if (!typ || !isStr(typ))\n return Promise.reject(Error(`Object without type cannot be draw with TTree`));\n\n if (typ.indexOf(clTH1) == 0)\n return TH1Painter.draw(dom, obj, opt);\n if (typ.indexOf(clTH2) == 0)\n return TH2Painter.draw(dom, obj, opt);\n if (typ.indexOf(clTH3) == 0)\n return TH3Painter.draw(dom, obj, opt);\n if (typ.indexOf(clTGraph) == 0)\n return TGraphPainter.draw(dom, obj, opt);\n if ((typ == clTPolyMarker3D) && obj.$hist) {\n return TH3Painter.draw(dom, obj.$hist, opt).then(() => {\n let p2 = new ObjectPainter(dom, obj, opt);\n p2.addToPadPrimitives();\n p2.redraw = drawPolyMarker3D;\n return p2.redraw();\n });\n }\n\n return Promise.reject(Error(`Object of type ${typ} cannot be draw with TTree`));\n}\n\n\n/** @summary Handle callback function with progress of tree draw\n * @private */\nasync function treeDrawProgress(obj, final) {\n\n // no need to update drawing if previous is not yet completed\n if (!final && !this.last_pr)\n return;\n\n if (this.dump || this.testio) {\n if (!final) return;\n if (isBatchMode()) {\n let painter = new BasePainter(this.drawid);\n painter.selectDom().property('_json_object_', obj);\n return painter;\n }\n if (isFunc(internals.drawInspector))\n return internals.drawInspector(this.drawid, obj);\n let str = create(clTObjString);\n str.fString = toJSON(obj,2);\n return drawRawText(this.drawid, str);\n }\n\n // complex logic with intermediate update\n // while TTree reading not synchronized with drawing,\n // next portion can appear before previous is drawn\n // critical is last drawing which should wait for previous one\n // therefore last_pr is kept as inidication that promise is not yet processed\n\n if (!this.last_pr) this.last_pr = Promise.resolve(true);\n\n return this.last_pr.then(() => {\n if (this.obj_painter)\n this.last_pr = this.obj_painter.redrawObject(obj).then(() => this.obj_painter);\n else\n this.last_pr = drawTreeDrawResult(this.drawid, obj).then(p => {\n this.obj_painter = p;\n if (!final) this.last_pr = null;\n return p; // return painter for histogram\n });\n\n return final ? this.last_pr : null;\n });\n}\n\n\n/** @summary Create painter to perform tree drawing on server side\n * @private */\nfunction createTreePlayer(player) {\n\n player.draw_first = true;\n\n player.configureOnline = function(itemname, url, askey, root_version, expr) {\n this.setItemName(itemname, '', this);\n this.url = url;\n this.root_version = root_version;\n this.askey = askey;\n this.draw_expr = expr;\n }\n\n player.configureTree = function(tree) {\n this.local_tree = tree;\n }\n\n player.showExtraButtons = function(args) {\n let main = this.selectDom(),\n numentries = this.local_tree ? this.local_tree.fEntries : 0;\n\n main.select('.treedraw_more').remove(); // remove more button first\n\n main.select('.treedraw_buttons').node().innerHTML +=\n 'Cut: '+\n 'Opt: '+\n `Num: `+\n `First: `+\n '';\n\n main.select('.treedraw_exe').on('click', () => this.performDraw());\n main.select('.treedraw_cut').property('value', args?.parse_cut || '').on('change', () => this.performDraw());\n main.select('.treedraw_opt').property('value', args?.drawopt || '').on('change', () => this.performDraw());\n main.select('.treedraw_number').attr('value', args?.numentries || ''); // .on('change', () => this.performDraw());\n main.select('.treedraw_first').attr('value', args?.firstentry || ''); // .on('change', () => this.performDraw());\n main.select('.treedraw_clear').on('click', () => cleanup(this.drawid));\n }\n\n player.showPlayer = function(args) {\n\n let main = this.selectDom();\n\n this.drawid = 'jsroot_tree_player_' + internals.id_counter++ + '_draw';\n\n let show_extra = args?.parse_cut || args?.numentries || args?.firstentry;\n\n main.html('
'+\n '
' +\n '' +\n 'Expr:'+\n '' +\n '' +\n '
' +\n '

' +\n `
` +\n '
');\n\n // only when main html element created, one can set painter\n // ObjectPainter allow such usage of methods from BasePainter\n this.setTopPainter();\n\n if (this.local_tree)\n main.select('.treedraw_buttons')\n .attr('title', 'Tree draw player for: ' + this.local_tree.fName);\n main.select('.treedraw_exe').on('click', () => this.performDraw());\n main.select('.treedraw_varexp')\n .attr('value', args?.parse_expr || this.draw_expr || 'px:py')\n .on('change', () => this.performDraw());\n main.select('.treedraw_varexp_info')\n .attr('title', 'Example of valid draw expressions:\\n' +\n ' px - 1-dim draw\\n' +\n ' px:py - 2-dim draw\\n' +\n ' px:py:pz - 3-dim draw\\n' +\n ' px+py:px-py - use any expressions\\n' +\n ' px:py>>Graph - create and draw TGraph\\n' +\n ' px:py>>dump - dump extracted variables\\n' +\n ' px:py>>h(50,-5,5,50,-5,5) - custom histogram\\n' +\n ' px:py;hbins:100 - custom number of bins');\n\n if (show_extra)\n this.showExtraButtons(args);\n else\n main.select('.treedraw_more').on('click', () => this.showExtraButtons(args));\n\n this.checkResize();\n\n registerForResize(this);\n }\n\n player.getValue = function(sel) {\n const elem = this.selectDom().select(sel);\n if (elem.empty()) return;\n const val = elem.property('value');\n if (val !== undefined) return val;\n return elem.attr('value');\n }\n\n player.performLocalDraw = function() {\n if (!this.local_tree) return;\n\n const frame = this.selectDom(),\n args = { expr: this.getValue('.treedraw_varexp') };\n\n if (frame.select('.treedraw_more').empty()) {\n args.cut = this.getValue('.treedraw_cut');\n if (!args.cut) delete args.cut;\n\n args.drawopt = this.getValue('.treedraw_opt');\n if (args.drawopt === 'dump') { args.dump = true; args.drawopt = ''; }\n if (!args.drawopt) delete args.drawopt;\n\n args.numentries = parseInt(this.getValue('.treedraw_number'));\n if (!Number.isInteger(args.numentries)) delete args.numentries;\n\n args.firstentry = parseInt(this.getValue('.treedraw_first'));\n if (!Number.isInteger(args.firstentry)) delete args.firstentry;\n }\n\n /* if (args.drawopt) */ cleanup(this.drawid);\n\n args.drawid = this.drawid;\n\n args.progress = treeDrawProgress.bind(args);\n\n treeDraw(this.local_tree, args).then(obj => args.progress(obj, true));\n }\n\n player.getDrawOpt = function() {\n let res = 'player',\n expr = this.getValue('.treedraw_varexp')\n if (expr) res += ':' + expr;\n return res;\n }\n\n player.performDraw = function() {\n\n if (this.local_tree)\n return this.performLocalDraw();\n\n let frame = this.selectDom(),\n url = this.url + '/exe.json.gz?compact=3&method=Draw',\n expr = this.getValue('.treedraw_varexp'),\n hname = 'h_tree_draw', option = '',\n pos = expr.indexOf('>>');\n\n if (pos < 0) {\n expr += '>>' + hname;\n } else {\n hname = expr.slice(pos+2);\n if (hname[0] == '+') hname = hname.slice(1);\n let pos2 = hname.indexOf('(');\n if (pos2 > 0) hname = hname.slice(0, pos2);\n }\n\n if (frame.select('.treedraw_more').empty()) {\n let cut = this.getValue('.treedraw_cut'),\n nentries = this.getValue('.treedraw_number'),\n firstentry = this.getValue('.treedraw_first');\n\n option = this.getValue('.treedraw_opt');\n\n url += `&prototype=\"const char*,const char*,Option_t*,Long64_t,Long64_t\"&varexp=\"${expr}\"&selection=\"${cut}\"`;\n\n // provide all optional arguments - default value kMaxEntries not works properly in ROOT6\n if (nentries == '') nentries = (this.root_version >= 394499) ? 'TTree::kMaxEntries': '1000000000'; // kMaxEntries available since ROOT 6.05/03\n if (firstentry == '') firstentry = '0';\n url += `&option=\"${option}\"&nentries=${nentries}&firstentry=${firstentry}`;\n } else {\n url += `&prototype=\"Option_t*\"&opt=\"${expr}\"`;\n }\n url += '&_ret_object_=' + hname;\n\n const submitDrawRequest = () => {\n httpRequest(url, 'object').then(res => {\n cleanup(this.drawid);\n drawTreeDrawResult(this.drawid, res, option);\n });\n };\n\n this.draw_expr = expr;\n\n if (this.askey) {\n // first let read tree from the file\n this.askey = false;\n httpRequest(this.url + '/root.json.gz?compact=3', 'text').then(submitDrawRequest);\n } else {\n submitDrawRequest();\n }\n }\n\n player.checkResize = function(/*arg*/) {\n resize(this.drawid);\n }\n\n return player;\n}\n\n\n/** @summary function used with THttpServer to assign player for the TTree object\n * @private */\nfunction drawTreePlayer(hpainter, itemname, askey, asleaf) {\n\n let item = hpainter.findItem(itemname),\n top = hpainter.getTopOnlineItem(item),\n expr = '', leaf_cnt = 0;\n if (!item || !top) return null;\n\n if (asleaf) {\n expr = item._name;\n while (item && !item._ttree) item = item._parent;\n if (!item) return null;\n itemname = hpainter.itemFullName(item);\n }\n\n let url = hpainter.getOnlineItemUrl(itemname);\n if (!url) return null;\n\n let root_version = top._root_version || 400129; // by default use version number 6-27-01\n\n let mdi = hpainter.getDisplay();\n if (!mdi) return null;\n\n let frame = mdi.findFrame(itemname, true);\n if (!frame) return null;\n\n let divid = d3_select(frame).attr('id'),\n player = new BasePainter(divid);\n\n if (item._childs && !asleaf)\n for (let n = 0; n < item._childs.length; ++n) {\n let leaf = item._childs[n];\n if (leaf && leaf._kind && (leaf._kind.indexOf('ROOT.TLeaf') == 0) && (leaf_cnt < 2)) {\n if (leaf_cnt++ > 0) expr += ':';\n expr += leaf._name;\n }\n }\n\n createTreePlayer(player);\n player.configureOnline(itemname, url, askey, root_version, expr);\n player.showPlayer();\n\n return player;\n}\n\n/** @summary function used with THttpServer when tree is not yet loaded\n * @private */\nfunction drawTreePlayerKey(hpainter, itemname) {\n return drawTreePlayer(hpainter, itemname, true);\n}\n\n/** @summary function used with THttpServer when tree is not yet loaded\n * @private */\nfunction drawLeafPlayer(hpainter, itemname) {\n return drawTreePlayer(hpainter, itemname, false, true);\n}\n\n/** @summary function called from draw()\n * @desc just envelope for real TTree::Draw method which do the main job\n * Can be also used for the branch and leaf object\n * @private */\nasync function drawTree(dom, obj, opt) {\n\n let tree = obj, args = opt;\n\n if (obj._typename == clTBranchFunc) {\n // fictional object, created only in browser\n args = { expr: `.${obj.func}()`, branch: obj.branch };\n if (opt && opt.indexOf('dump') == 0)\n args.expr += '>>' + opt;\n else if (opt)\n args.expr += opt;\n tree = obj.branch.$tree;\n } else if (obj.$branch) {\n // this is drawing of the single leaf from the branch\n args = { expr: `.${obj.fName}${opt || ''}`, branch: obj.$branch };\n if ((args.branch.fType === kClonesNode) || (args.branch.fType === kSTLNode)) {\n // special case of size\n args.expr = opt;\n args.direct_branch = true;\n }\n\n tree = obj.$branch.$tree;\n } else if (obj.$tree) {\n // this is drawing of the branch\n\n // if generic object tried to be drawn without specifying any options, it will be just dump\n if (!opt && obj.fStreamerType && (obj.fStreamerType !== kTString) &&\n (obj.fStreamerType >= kObject) && (obj.fStreamerType <= kAnyP)) opt = 'dump';\n\n args = { expr: opt, branch: obj };\n tree = obj.$tree;\n } else {\n if (!args) args = 'player';\n if (isStr(args)) args = { expr: args };\n }\n\n if (!tree)\n throw Error('No TTree object available for TTree::Draw');\n\n if (isStr(args.expr)) {\n let p = args.expr.indexOf('player');\n if (p == 0) {\n args.player = true;\n args.expr = args.expr.slice(6);\n if (args.expr[0] == ':') args.expr = args.expr.slice(1);\n } else if ((p >= 0) && (p == args.expr.length-6)) {\n args.player = true;\n args.expr = args.expr.slice(0, p);\n if ((p > 0) && (args.expr[p-1] == ';')) args.expr = args.expr.slice(0, p-1);\n }\n }\n\n let painter;\n\n if (args.player) {\n painter = new ObjectPainter(dom, obj, opt);\n createTreePlayer(painter);\n painter.configureTree(tree);\n painter.showPlayer(args);\n args.drawid = painter.drawid;\n } else {\n args.drawid = dom;\n }\n\n // use in result handling same function as for progress handling\n\n args.progress = treeDrawProgress.bind(args);\n\n let pr;\n if (args.expr === 'testio') {\n args.testio = true;\n args.showProgress = showProgress;\n pr = treeIOTest(tree, args);\n } else if (args.expr || args.branch) {\n pr = treeDraw(tree, args);\n } else\n return painter;\n\n return pr.then(res => args.progress(res, true));\n}\n\nexport { drawTree, drawTreePlayer, drawTreePlayerKey, drawLeafPlayer };\n"],"x_google_ignoreList":[0]} \ No newline at end of file diff --git a/docs/60.05f7b42a1bc89319.js b/docs/60.05f7b42a1bc89319.js new file mode 100644 index 000000000..6a6f8fc10 --- /dev/null +++ b/docs/60.05f7b42a1bc89319.js @@ -0,0 +1,2 @@ +"use strict";(self.webpackChunkphoenix_app=self.webpackChunkphoenix_app||[]).push([[60],{7060:(y,u,_)=>{_.r(u),_.d(u,{drawPolyLine3D:()=>D,drawPolyMarker3D:()=>m});var o=_(5835),l=_(9542),d=_(1968),p=_(9665),h=_(7822);function g(e,r){let a=e.getFramePainter();if(!a?.mode3d||!r)return null;if(a?.toplevel)return a;let t=e.getMainPainter();return t?(0,l.isFunc)(t.drawExtras)?t.drawExtras(r):null:(0,p.drawDummy3DGeom)(e)}function m(){return s.apply(this,arguments)}function s(){return(s=(0,o.Z)(function*(){let r=g(this,this.getObject());return(0,l.isObject)(r)&&r.grx&&r.gry&&r.grz?(this.$fp=r,h.Y.bind(this)()):r})).apply(this,arguments)}function D(){return i.apply(this,arguments)}function i(){return(i=(0,o.Z)(function*(){let e=this.getObject(),r=g(this,e);if(!((0,l.isObject)(r)&&r.grx&&r.gry&&r.grz))return r;let a=3*e.fN,t=e.fP,f=[];for(let n=3;n{s.r(o),s.d(o,{drawPolyLine3D:()=>d,drawPolyMarker3D:()=>P});var u=s(4788),i=s(9542),p=s(1968),h=s(9665),D=s(7822);function f(t,r){let a=t.getFramePainter();if(!a?.mode3d||!r)return null;if(a?.toplevel)return a;let e=t.getMainPainter();return e?(0,i.isFunc)(e.drawExtras)?e.drawExtras(r):null:(0,h.drawDummy3DGeom)(t)}function P(){return l.apply(this,arguments)}function l(){return(l=(0,u.Z)(function*(){let r=f(this,this.getObject());return(0,i.isObject)(r)&&r.grx&&r.gry&&r.grz?(this.$fp=r,D.Y.bind(this)()):r})).apply(this,arguments)}function d(){return _.apply(this,arguments)}function _(){return(_=(0,u.Z)(function*(){let t=this.getObject(),r=f(this,t);if(!((0,i.isObject)(r)&&r.grx&&r.gry&&r.grz))return r;let a=3*t.fN,e=t.fP,g=[];for(let n=3;n 6) && (nsave !== (func.fSave[nsave-2]+1)*(func.fSave[nsave-1]+1) + 6)) nsave = 0;\n\n // check if exact min/max range is used or created histogram has to be extended\n if ((nsave > 6) && (func.fXmin < func.fXmax) && (func.fSave[nsave-6] < func.fSave[nsave-5]) &&\n ((func.fSave[nsave-5] - func.fSave[nsave-6]) / (func.fXmax - func.fXmin) > 0.99999)) use_middle = false;\n\n let npx = Math.max(func.fNpx, 2),\n npy = Math.max(func.fNpy, 2),\n iserr = false, isany = false,\n dx = (func.fXmax - func.fXmin) / (use_middle ? npx : (npx-1)),\n dy = (func.fYmax - func.fYmin) / (use_middle ? npy : (npy-1)),\n extra = use_middle ? 0.5 : 0,\n use_saved_points = (nsave > 6) && settings.PreferSavedPoints;\n\n if (!use_saved_points) {\n if (!func.evalPar)\n proivdeEvalPar(func);\n\n for (let j = 0; j < npy; ++j)\n for (let i = 0; (i < npx) && !iserr; ++i) {\n let x = func.fXmin + (i + extra) * dx,\n y = func.fYmin + (j + extra) * dy,\n z = 0;\n\n try {\n z = func.evalPar(x, y);\n } catch {\n iserr = true;\n }\n\n if (!iserr && Number.isFinite(z)) {\n if (!hist) hist = createHistogram('TH2F', npx, npy);\n isany = true;\n hist.setBinContent(hist.getBin(i+1,j+1), z);\n }\n }\n\n if ((iserr || !isany) && (nsave > 6))\n use_saved_points = true;\n }\n\n if (!use_saved_points && !hist)\n hist = createHistogram('TH2F', npx, npy);\n\n if (!iserr && isany) {\n hist.fXaxis.fXmin = func.fXmin - (use_middle ? 0 : dx/2);\n hist.fXaxis.fXmax = func.fXmax + (use_middle ? 0 : dx/2);\n\n hist.fYaxis.fXmin = func.fYmin - (use_middle ? 0 : dy/2);\n hist.fYaxis.fXmax = func.fYmax + (use_middle ? 0 : dy/2);\n }\n\n if (use_saved_points) {\n npx = Math.round(func.fSave[nsave-2]);\n npy = Math.round(func.fSave[nsave-1]);\n dx = (func.fSave[nsave-5] - func.fSave[nsave-6]) / npx;\n dy = (func.fSave[nsave-3] - func.fSave[nsave-4]) / npy;\n\n if (!hist) hist = createHistogram('TH2F', npx+1, npy+1);\n\n hist.fXaxis.fXmin = func.fSave[nsave-6] - dx/2;\n hist.fXaxis.fXmax = func.fSave[nsave-5] + dx/2;\n\n hist.fYaxis.fXmin = func.fSave[nsave-4] - dy/2;\n hist.fYaxis.fXmax = func.fSave[nsave-3] + dy/2;\n\n for (let k = 0, j = 0; j <= npy; ++j)\n for (let i = 0; i <= npx; ++i)\n hist.setBinContent(hist.getBin(i+1,j+1), func.fSave[k++]);\n }\n\n hist.fName = 'Func';\n hist.fTitle = func.fTitle;\n hist.fMinimum = func.fMinimum;\n hist.fMaximum = func.fMaximum;\n //fHistogram->SetContour(fContour.fN, levels);\n hist.fLineColor = func.fLineColor;\n hist.fLineStyle = func.fLineStyle;\n hist.fLineWidth = func.fLineWidth;\n hist.fFillColor = func.fFillColor;\n hist.fFillStyle = func.fFillStyle;\n hist.fMarkerColor = func.fMarkerColor;\n hist.fMarkerStyle = func.fMarkerStyle;\n hist.fMarkerSize = func.fMarkerSize;\n const kNoStats = BIT(9);\n hist.fBits |= kNoStats;\n\n return hist;\n}\n\n/** @summary draw TF2 object\n * @desc TF2 always drawn via temporary TH2 object,\n * therefore there is no special painter class\n * @private */\nfunction drawTF2(dom, func, opt) {\n\n let hist = createTF2Histogram(func);\n if (!hist) return;\n\n let d = new DrawOptions(opt);\n\n if (d.empty())\n opt = 'cont3';\n else if (d.opt === 'SAME')\n opt = 'cont2 same';\n else\n opt = d.opt;\n\n // workaround for old waves.C\n if (opt == 'SAMECOLORZ' || opt == 'SAMECOLOR' || opt == 'SAMECOLZ') opt = 'SAMECOL';\n\n if (opt.indexOf('SAME') == 0)\n if (!getElementMainPainter(dom))\n opt = 'A_ADJUST_FRAME_' + opt.slice(4);\n\n return TH2Painter.draw(dom, hist, opt).then(hpainter => {\n\n hpainter.tf2_typename = func._typename;\n\n hpainter.updateObject = function(obj /*, opt*/) {\n if (!obj || (this.tf2_typename != obj._typename)) return false;\n delete obj.evalPar;\n createTF2Histogram(obj, this.getHisto());\n return true;\n };\n\n return hpainter;\n });\n}\n\nexport { drawTF2 };\n"],"x_google_ignoreList":[0]} \ No newline at end of file +{"version":3,"file":"601.bdb253779e07488d.js","mappings":"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","names":["createTF2Histogram","func","hist","nsave","fSave","length","use_middle","fXmin","fXmax","npx","Math","max","fNpx","npy","fNpy","iserr","isany","dx","dy","fYmax","fYmin","extra","use_saved_points","settings","evalPar","proivdeEvalPar","j","i","x","y","z","Number","isFinite","createHistogram","setBinContent","getBin","fXaxis","fYaxis","round","k","fName","fTitle","fMinimum","fMaximum","fLineColor","fLineStyle","fLineWidth","fFillColor","fFillStyle","fMarkerColor","fMarkerStyle","fMarkerSize","kNoStats","BIT","fBits","drawTF2","dom","opt","d","DrawOptions","empty","indexOf","getElementMainPainter","slice","TH2Painter","then","hpainter","tf2_typename","_typename","updateObject","obj","this","getHisto"],"sourceRoot":"webpack:///","sources":["../node_modules/jsroot/modules/draw/TF2.mjs"],"sourcesContent":["import { createHistogram, BIT, settings } from '../core.mjs';\nimport { TH2Painter } from '../hist/TH2Painter.mjs';\nimport { proivdeEvalPar } from '../hist/TF1Painter.mjs';\nimport { getElementMainPainter } from '../base/ObjectPainter.mjs';\nimport { DrawOptions } from '../base/BasePainter.mjs';\n\n\n/** @summary Create histogram for TF2 drawing\n * @private */\nfunction createTF2Histogram(func, hist = undefined) {\n let nsave = func.fSave.length, use_middle = true;\n if ((nsave > 6) && (nsave !== (func.fSave[nsave-2]+1)*(func.fSave[nsave-1]+1) + 6)) nsave = 0;\n\n // check if exact min/max range is used or created histogram has to be extended\n if ((nsave > 6) && (func.fXmin < func.fXmax) && (func.fSave[nsave-6] < func.fSave[nsave-5]) &&\n ((func.fSave[nsave-5] - func.fSave[nsave-6]) / (func.fXmax - func.fXmin) > 0.99999)) use_middle = false;\n\n let npx = Math.max(func.fNpx, 2),\n npy = Math.max(func.fNpy, 2),\n iserr = false, isany = false,\n dx = (func.fXmax - func.fXmin) / (use_middle ? npx : (npx-1)),\n dy = (func.fYmax - func.fYmin) / (use_middle ? npy : (npy-1)),\n extra = use_middle ? 0.5 : 0,\n use_saved_points = (nsave > 6) && settings.PreferSavedPoints;\n\n if (!use_saved_points) {\n if (!func.evalPar)\n proivdeEvalPar(func);\n\n for (let j = 0; j < npy; ++j)\n for (let i = 0; (i < npx) && !iserr; ++i) {\n let x = func.fXmin + (i + extra) * dx,\n y = func.fYmin + (j + extra) * dy,\n z = 0;\n\n try {\n z = func.evalPar(x, y);\n } catch {\n iserr = true;\n }\n\n if (!iserr && Number.isFinite(z)) {\n if (!hist) hist = createHistogram('TH2F', npx, npy);\n isany = true;\n hist.setBinContent(hist.getBin(i+1,j+1), z);\n }\n }\n\n if ((iserr || !isany) && (nsave > 6))\n use_saved_points = true;\n }\n\n if (!use_saved_points && !hist)\n hist = createHistogram('TH2F', npx, npy);\n\n if (!iserr && isany) {\n hist.fXaxis.fXmin = func.fXmin - (use_middle ? 0 : dx/2);\n hist.fXaxis.fXmax = func.fXmax + (use_middle ? 0 : dx/2);\n\n hist.fYaxis.fXmin = func.fYmin - (use_middle ? 0 : dy/2);\n hist.fYaxis.fXmax = func.fYmax + (use_middle ? 0 : dy/2);\n }\n\n if (use_saved_points) {\n npx = Math.round(func.fSave[nsave-2]);\n npy = Math.round(func.fSave[nsave-1]);\n dx = (func.fSave[nsave-5] - func.fSave[nsave-6]) / npx;\n dy = (func.fSave[nsave-3] - func.fSave[nsave-4]) / npy;\n\n if (!hist) hist = createHistogram('TH2F', npx+1, npy+1);\n\n hist.fXaxis.fXmin = func.fSave[nsave-6] - dx/2;\n hist.fXaxis.fXmax = func.fSave[nsave-5] + dx/2;\n\n hist.fYaxis.fXmin = func.fSave[nsave-4] - dy/2;\n hist.fYaxis.fXmax = func.fSave[nsave-3] + dy/2;\n\n for (let k = 0, j = 0; j <= npy; ++j)\n for (let i = 0; i <= npx; ++i)\n hist.setBinContent(hist.getBin(i+1,j+1), func.fSave[k++]);\n }\n\n hist.fName = 'Func';\n hist.fTitle = func.fTitle;\n hist.fMinimum = func.fMinimum;\n hist.fMaximum = func.fMaximum;\n //fHistogram->SetContour(fContour.fN, levels);\n hist.fLineColor = func.fLineColor;\n hist.fLineStyle = func.fLineStyle;\n hist.fLineWidth = func.fLineWidth;\n hist.fFillColor = func.fFillColor;\n hist.fFillStyle = func.fFillStyle;\n hist.fMarkerColor = func.fMarkerColor;\n hist.fMarkerStyle = func.fMarkerStyle;\n hist.fMarkerSize = func.fMarkerSize;\n const kNoStats = BIT(9);\n hist.fBits |= kNoStats;\n\n return hist;\n}\n\n/** @summary draw TF2 object\n * @desc TF2 always drawn via temporary TH2 object,\n * therefore there is no special painter class\n * @private */\nfunction drawTF2(dom, func, opt) {\n\n let hist = createTF2Histogram(func);\n if (!hist) return;\n\n let d = new DrawOptions(opt);\n\n if (d.empty())\n opt = 'cont3';\n else if (d.opt === 'SAME')\n opt = 'cont2 same';\n else\n opt = d.opt;\n\n // workaround for old waves.C\n if (opt == 'SAMECOLORZ' || opt == 'SAMECOLOR' || opt == 'SAMECOLZ') opt = 'SAMECOL';\n\n if (opt.indexOf('SAME') == 0)\n if (!getElementMainPainter(dom))\n opt = 'A_ADJUST_FRAME_' + opt.slice(4);\n\n return TH2Painter.draw(dom, hist, opt).then(hpainter => {\n\n hpainter.tf2_typename = func._typename;\n\n hpainter.updateObject = function(obj /*, opt*/) {\n if (!obj || (this.tf2_typename != obj._typename)) return false;\n delete obj.evalPar;\n createTF2Histogram(obj, this.getHisto());\n return true;\n };\n\n return hpainter;\n });\n}\n\nexport { drawTF2 };\n"],"x_google_ignoreList":[0]} \ No newline at end of file diff --git a/docs/61.dbe75c5a8333bdf7.js b/docs/61.0c69ba056b35a633.js similarity index 99% rename from docs/61.dbe75c5a8333bdf7.js rename to docs/61.0c69ba056b35a633.js index 11e8be588..ff56b880b 100644 --- a/docs/61.dbe75c5a8333bdf7.js +++ b/docs/61.0c69ba056b35a633.js @@ -1,2 +1,2 @@ -"use strict";(self.webpackChunkphoenix_app=self.webpackChunkphoenix_app||[]).push([[61],{6061:(ct,lt,T)=>{T.r(lt),T.d(lt,{RH1Painter:()=>it});var z=T(4788),F=T(9542),ot=T(2253),Y=T(3675),xt=T(8172),gt=T(9056);class et extends xt.n{constructor(t,e){super(t,e),this.wheel_zoomy=!1}scanContent(t){let e=this.getHisto();if(!e)return;!this.nbinsx&&t&&(t=!1),t||this.extractAxesProperties(1);let r=0,u=0,i=0,a=0;if(this.isDisplayItem())r=e.fContMin,u=e.fContMinPos,i=e.fContMax,a=i;else{let h=this.getSelectIndex("x","left"),l=this.getSelectIndex("x","right");if(t&&h===this.scan_xleft&&l===this.scan_xright)return;this.scan_xleft=h,this.scan_xright=l;let n,p,c=!0;for(let o=0;o=l)&&(n>0&&(0==u||n=i)0==r?(this.ymin=0,this.ymax=1):r<0?(this.ymin=2*r,this.ymax=0):(this.ymin=0,this.ymax=2*r);else{let h=.05*(i-r);this.ymin=r-h,this.ymin<0&&r>=0&&(this.ymin=0),this.ymax=i+h}}countStat(t){let p,e=this.getHisto(),r=this.getAxis("x"),u=this.getSelectIndex("x","left"),i=this.getSelectIndex("x","right"),a=0,h=0,l=0,o=0,s=0,y=null,d=null,x=(this.getFramePainter(),{name:"histo",meanx:0,meany:0,rmsx:0,rmsy:0,integral:0,entries:this.stat_entries,xmax:0,wmax:0});for(p=u;pd)&&(y=o,d=s),a+=s,h+=s*o,l+=s*o**2);return x.integral=a,Math.abs(a)>1e-300&&(x.meanx=h/a,x.meany=0/a,x.rmsx=Math.sqrt(Math.abs(l/a-x.meanx**2)),x.rmsy=Math.sqrt(Math.abs(0/a-x.meany**2))),null!==y&&(x.xmax=y,x.wmax=d),x}fillStatistic(t,e){let r=this.countStat(),u=e%10,i=Math.floor(e/10)%10,a=Math.floor(e/100)%10,h=Math.floor(e/1e3)%10,l=Math.floor(e/1e4)%10,c=Math.floor(e/1e5)%10,n=Math.floor(e/1e6)%10,p=Math.floor(e/1e7)%10,o=Math.floor(e/1e8)%10;return t.clearStat(),u>0&&t.addText(r.name),i>0&&t.addText("Entries = "+t.format(r.entries,"entries")),a>0&&t.addText("Mean = "+t.format(r.meanx)),h>0&&t.addText("Std Dev = "+t.format(r.rmsx)),l>0&&t.addText("Underflow = "+t.format(histo.getBinContent(0),"entries")),c>0&&t.addText("Overflow = "+t.format(histo.getBinContent(this.nbinsx+1),"entries")),n>0&&t.addText("Integral = "+t.format(r.integral,"entries")),p>0&&t.addText("Skew = "),o>0&&t.addText("Kurt = "),!0}drawBars(t,e,r,u){var i=this;return(0,z.Z)(function*(){i.createG(!0);let o,s,y,d,w,x,_,f,g,a=t.i1,h=t.i2,l=t.stepi,c=i.getFramePainter(),n=i.getHisto(),p=i.getAxis("x"),M="",b="",v="";for(f=c.swap_xy?0:u,Number.isFinite(i.options.BaseLine)&&i.options.BaseLine>=e.scale_ymin&&(f=Math.round(e.gry(i.options.BaseLine))),o=a;o0&&(w=d+g,g=Math.round(g/10),c.swap_xy?(b+=`M${f},${d}h${_-f}v${g}h${f-_}z`,v+=`M${f},${w}h${_-f}v${-g}h${f-_}z`):(b+=`M${d},${_}h${g}v${f-_}h${-g}z`,v+=`M${w},${_}h${-g}v${f-_}h${g}z`))));return i.fillatt.empty()&&i.fillatt.setSolidColor("blue"),M&&i.draw_g.append("svg:path").attr("d",M).call(i.fillatt.func),b&&i.draw_g.append("svg:path").attr("d",b).call(i.fillatt.func).style("fill",(0,ot.B8)(i.fillatt.color).brighter(.5).formatHex()),v&&i.draw_g.append("svg:path").attr("d",v).call(i.fillatt.func).style("fill",(0,ot.B8)(i.fillatt.color).darker(.5).formatHex()),!0})()}drawFilledErrors(t,e){var r=this;return(0,z.Z)(function*(){r.createG(!0);let c,n,p,o,s,y,d,u=t.i1,i=t.i2,a=t.stepi,h=r.getHisto(),l=r.getAxis("x"),w=[],x=[];for(c=u;c1&&(O=!0),2===a.ErrorKind?i.fillatt.empty()?O=!0:J="":a.Error&&(W="",V=p?"":null),X&&(I=""),O&&(i.createv7AttMarker(),i.markeratt.size>0?(Q="",i.markeratt.resetPos()):O=!1),N){if(P=i.v7EvalFont("text",{size:20,color:"black",align:22}),!P.angle&&!a.TextKind){let D=r/(l-h+1);D<3*P.size&&(P.setAngle(270),P.setSize(Math.round(.7*D)))}i.startTextDrawing(P,"font")}let ft=l-h>3*r;if(1===a.ErrorKind){let D=i.lineatt.width+F.gStyle.fEndErrorSize;rt=`m0,${D}v${-2*D}m0,${D}`,nt=`m${D},0h${-2*D}m${D},0`,q=Math.floor((i.lineatt.width-1)/2)}let U=R||O;(U||N||X)&&(ft=!0);let tt=D=>{if(k=n.getBinContent(D+1),!L||0!==k){if(H=Math.round(e.grx(o.GetBinCoord(D))),K=Math.round(e.grx(o.GetBinCoord(D+c))),Z=Math.round((H+K)/2),S=Math.round(e.gry(k)),G=j=20,R&&(at=n.getBinError(D+1),G=Math.round(S-e.gry(k+at)),j=Math.round(e.gry(k-at)-S)),N&&0!==k){let A=k===Math.round(k)?k.toString():(0,Y.Ee)(k,F.gStyle.fPaintTextFormat);i.drawText(P.angle?{align:12,x:Z,y:Math.round(S-2-P.size/5),text:A,latex:0}:{x:Math.round(H+.1*(K-H)),y:Math.round(S-2-P.size),width:Math.round(.8*(K-H)),height:P.size,text:A,latex:0})}if(X&&null!==I&&(I+=(0===I.length?"M":"L")+Z+","+S),U&&S>=-G&&S<=u+j&&(null!==J&&(J+=`M${H},${S-G}h${K-H}v${G+j+1}h${H-K}z`),null!==Q&&(Q+=i.markeratt.create(Z,S)),null!==W)){let A=5;if(i.options.errorX>0){A=Math.round((K-H)*i.options.errorX);let ut=Z-A;W+=`M${ut+q},${S}${rt}h${Z+A-ut-2*q}${rt}`}W+=`M${Z},${S-G+q}${nt}v${G+j-2*q}${nt}`,null!==V&&(V+=`M${Z-A},${S-G}h${2*A}v${G+j}h${-2*A}z`)}}};for(B=h;B<=l;B+=c)_=o.GetBinCoord(B),!(e.logx&&_<=0)&&(f=Math.round(e.grx(_)),y=B>l-c,y&&hv&&(m=B),b=Math.min(b,M),v=Math.max(v,M),x=M):(M!==x||y)&&(f!==w&&(s+="h"+(f-w)),M!==x&&(s+="v"+(M-x)),x=M,w=f));let st="",dt=!(0,F.isBatchMode)()&&i.fillatt.empty()&&a.Hist&&F.settings.Tooltip&&!U&&!X;if(!i.fillatt.empty()||dt){let D=u+3;if(dt){let A=Math.round(e.gry(0));A<=0?D=-3:Av+.5?r.swap_xy?f=m:g=m:(f++,g--)}if(l=g=f,n=M(l),r.swap_xy){for(;f>x&&M(f-1)n-2;)++g}else{for(;f>x&&M(f-1)>n-2;)--f;for(;g<_&&M(g+1)i/10&&(l=Math.round(f+(g-f)/i*C)),n=M(l)}if(n=Math.round(n),o=Math.round(M(l+1)),this.options.Bar){let m=o-n;n+=Math.round(this.options.BarOffset*m),o=n+Math.round(this.options.BarWidth*m)}if(n>o&&([n,o]=[o,n]),p=Math.round((n+o)/2),y=s=d=b(l),this.options.Bar)c=!0,w=0,s=Math.round(r.gry(!1!==this.options.BaseLine&&this.options.BaseLine>r.scale_ymin?this.options.BaseLine:r.scale_ymin)),s>d&&([s,d]=[d,s]),!t.touch&&1===t.nproc&&(Cd)&&(l=null);else if(this.options.Error||this.options.Mark){c=!0;let m=3;if(this.markeratt&&(m=Math.max(m,this.markeratt.getFullSize())),this.options.Error){let $=a.getBinContent(l+1),L=a.getBinError(l+1);s=Math.round(r.gry($+L)),d=Math.round(r.gry($-L));let R=(o-n)*this.options.errorX;n=Math.round(p-R),o=Math.round(p+R)}o-n<2*m&&(n=p-m,o=p+m),s=Math.min(s,y-m),d=Math.max(d,y+m),!t.touch&&1===t.nproc&&(Cd)&&(l=null)}else this.options.Line?c=!1:(c=1===t.nproc&&_-xd)&&!t.touch&&(l=null)));null!==l&&(l===x&&n>v+w||l===_-1&&oo+w||!this.options.Zero&&0===a.getBinContent(l+1))&&(l=null);let E=this.draw_g.select(".tooltip_bin");if(null===l||d<=0||s>=i)return E.remove(),null;let B={name:"histo",title:a.fTitle,x:p,y,exact:!0,color1:this.lineatt?this.lineatt.color:"green",color2:this.fillatt?this.fillatt.getFillColorAlt("blue"):"blue",lines:this.getBinTooltips(l)};if(t.disabled)E.remove(),B.changed=!0;else if(c)E.empty()&&(E=this.draw_g.append("svg:rect").attr("class","tooltip_bin h1bin").style("pointer-events","none")),B.changed=E.property("current_bin")!==l,B.changed&&E.attr("x",e.swap_xy?s:n).attr("width",e.swap_xy?d-s:o-n).attr("y",e.swap_xy?n:s).attr("height",e.swap_xy?o-n:d-s).style("opacity","0.3").property("current_bin",l),B.exact=Math.abs(y-C)<=5||C>=s&&C<=d,B.menu=B.exact,B.menu_dist=Math.sqrt((p-v)**2+(y-C)**2);else{let m=this.lineatt.width+3;E.empty()&&(E=this.draw_g.append("svg:circle").attr("class","tooltip_bin").style("pointer-events","none").attr("r",m).call(this.lineatt.func).call(this.fillatt.func)),B.exact=Math.abs(p-t.x)<=m&&Math.abs(y-t.y)<=m,B.menu=B.exact,B.menu_dist=Math.sqrt((p-t.x)**2+(y-t.y)**2),B.changed=E.property("current_bin")!==l,B.changed&&E.attr("cx",p).attr("cy",y).property("current_bin",l)}return B.changed&&(B.user_info={obj:a,name:"histo",bin:l,cont:a.getBinContent(l+1),grx:p,gry:y}),B}fillHistContextMenu(t){t.add("Auto zoom-in",()=>this.autoZoom());let e=this.getSupportedDrawOptions();t.addDrawMenu("Draw with",e,r=>{if("inspect"===r)return this.showInspector();this.decodeOptions(r),this.options.need_fillcol&&this.fillatt&&this.fillatt.empty()&&this.fillatt.change(5,1001),this.interactiveRedraw("pad","drawopt")})}autoZoom(){let t=this.getSelectIndex("x","left",-1),e=this.getSelectIndex("x","right",1),r=e-t,u=this.getHisto(),i=this.getAxis("x");if(0==r)return;let a=u.getBinContent(t+1);for(let h=t;h0)){for(;t2&&e1||"y"==t&&Math.abs(r-e)>1e-6*Math.abs(this.ymax-this.ymin)}callDrawFunc(t){var e=this;return(0,z.Z)(function*(){let r=e.getFramePainter();return r&&r.mode3d!==e.options.Mode3D&&!e.isMainPainter()&&(e.options.Mode3D=r.mode3d),e.options.Mode3D?e.draw3D(t):e.draw2D(t)})()}draw2D(t){var e=this;return(0,z.Z)(function*(){return e.clear3DScene(),e.drawFrameAxes().then(r=>!!r&&e.drawingBins(t)).then(r=>{if(r)return e.draw1DBins().then(()=>e.addInteractivity())}).then(()=>e)})()}draw3D(t){var e=this;return(0,z.Z)(function*(){return console.log("3D drawing is disabled, load ./hist/RH1Painter.mjs"),e.draw2D(t)})()}redraw(t){var e=this;return(0,z.Z)(function*(){return e.callDrawFunc(t)})()}static _draw(t,e){return(0,z.Z)(function*(){return(0,gt.ensureRCanvas)(t).then(()=>{t.setAsMainPainter(),t.options={Hist:!1,Bar:!1,BarStyle:0,Error:!1,ErrorKind:-1,errorX:F.gStyle.fErrorX,Zero:!1,Mark:!1,Line:!1,Fill:!1,Lego:0,Surf:0,Text:!1,TextAngle:0,TextKind:"",AutoColor:0,BarOffset:0,BarWidth:1,BaseLine:!1,Mode3D:!1};let r=new Y.pc(e);r.check("R3D_",!0)&&(t.options.Render3D=F.constants.Render3D.fromString(r.part.toLowerCase()));let u=t.v7EvalAttr("kind","hist"),i=t.v7EvalAttr("sub",0),a=!!t.getMainPainter(),h=t.options;switch(h.Text=t.v7EvalAttr("drawtext",!1),h.BarOffset=t.v7EvalAttr("baroffset",0),h.BarWidth=t.v7EvalAttr("barwidth",1),h.second_x=a&&t.v7EvalAttr("secondx",!1),h.second_y=a&&t.v7EvalAttr("secondy",!1),u){case"bar":h.Bar=!0,h.BarStyle=i;break;case"err":h.Error=!0,h.ErrorKind=i;break;case"p":h.Mark=!0;break;case"l":h.Line=!0;break;case"lego":h.Lego=i>0?10+i:12,h.Mode3D=!0;break;default:h.Hist=!0}return t.scanContent(),t.callDrawFunc()})})()}static draw(t,e,r){return(0,z.Z)(function*(){return et._draw(new et(t,e),r)})()}}var mt=T(9850),ht=T(7238);class it extends et{draw3D(t){this.mode3d=!0;let e=this.getFramePainter(),r=this.isMainPainter(),u=1+2*F.gStyle.fHistTopMargin,i=Promise.resolve(this);return"resize"==t?(r&&e.resize3D()&&e.render3D(),i):(this.deleteAttr(),this.scanContent(!0),r&&((0,ht.g_)(e),i=e.create3DScene(this.options.Render3D).then(()=>{e.setAxesRanges(this.getAxis("x"),this.xmin,this.xmax,null,this.ymin,this.ymax,null,0,0),e.set3DOptions(this.options),e.drawXYZ(e.toplevel,mt.C,{use_y_for_z:!0,zmult:u,zoom:F.settings.Zooming,ndim:1,draw:!0,v7:!0})})),e.mode3d?i.then(()=>this.drawingBins(t)).then(()=>{let a=this.getFramePainter();return(0,ht.UR)(this,!0),this.updatePaletteDraw(),a.render3D(),a.addKeysHandler(),this}):i)}static draw(t,e,r){return(0,z.Z)(function*(){return it._draw(new it(t,e),r)})()}}}}]); -//# sourceMappingURL=61.dbe75c5a8333bdf7.js.map \ No newline at end of file +"use strict";(self.webpackChunkphoenix_app=self.webpackChunkphoenix_app||[]).push([[61],{6061:(ct,lt,T)=>{T.r(lt),T.d(lt,{RH1Painter:()=>it});var z=T(5835),F=T(9542),ot=T(2253),Y=T(3675),xt=T(8172),gt=T(9056);class et extends xt.n{constructor(t,e){super(t,e),this.wheel_zoomy=!1}scanContent(t){let e=this.getHisto();if(!e)return;!this.nbinsx&&t&&(t=!1),t||this.extractAxesProperties(1);let r=0,u=0,i=0,a=0;if(this.isDisplayItem())r=e.fContMin,u=e.fContMinPos,i=e.fContMax,a=i;else{let h=this.getSelectIndex("x","left"),l=this.getSelectIndex("x","right");if(t&&h===this.scan_xleft&&l===this.scan_xright)return;this.scan_xleft=h,this.scan_xright=l;let n,p,c=!0;for(let o=0;o=l)&&(n>0&&(0==u||n=i)0==r?(this.ymin=0,this.ymax=1):r<0?(this.ymin=2*r,this.ymax=0):(this.ymin=0,this.ymax=2*r);else{let h=.05*(i-r);this.ymin=r-h,this.ymin<0&&r>=0&&(this.ymin=0),this.ymax=i+h}}countStat(t){let p,e=this.getHisto(),r=this.getAxis("x"),u=this.getSelectIndex("x","left"),i=this.getSelectIndex("x","right"),a=0,h=0,l=0,o=0,s=0,y=null,d=null,x=(this.getFramePainter(),{name:"histo",meanx:0,meany:0,rmsx:0,rmsy:0,integral:0,entries:this.stat_entries,xmax:0,wmax:0});for(p=u;pd)&&(y=o,d=s),a+=s,h+=s*o,l+=s*o**2);return x.integral=a,Math.abs(a)>1e-300&&(x.meanx=h/a,x.meany=0/a,x.rmsx=Math.sqrt(Math.abs(l/a-x.meanx**2)),x.rmsy=Math.sqrt(Math.abs(0/a-x.meany**2))),null!==y&&(x.xmax=y,x.wmax=d),x}fillStatistic(t,e){let r=this.countStat(),u=e%10,i=Math.floor(e/10)%10,a=Math.floor(e/100)%10,h=Math.floor(e/1e3)%10,l=Math.floor(e/1e4)%10,c=Math.floor(e/1e5)%10,n=Math.floor(e/1e6)%10,p=Math.floor(e/1e7)%10,o=Math.floor(e/1e8)%10;return t.clearStat(),u>0&&t.addText(r.name),i>0&&t.addText("Entries = "+t.format(r.entries,"entries")),a>0&&t.addText("Mean = "+t.format(r.meanx)),h>0&&t.addText("Std Dev = "+t.format(r.rmsx)),l>0&&t.addText("Underflow = "+t.format(histo.getBinContent(0),"entries")),c>0&&t.addText("Overflow = "+t.format(histo.getBinContent(this.nbinsx+1),"entries")),n>0&&t.addText("Integral = "+t.format(r.integral,"entries")),p>0&&t.addText("Skew = "),o>0&&t.addText("Kurt = "),!0}drawBars(t,e,r,u){var i=this;return(0,z.Z)(function*(){i.createG(!0);let o,s,y,d,w,x,_,f,g,a=t.i1,h=t.i2,l=t.stepi,c=i.getFramePainter(),n=i.getHisto(),p=i.getAxis("x"),M="",b="",v="";for(f=c.swap_xy?0:u,Number.isFinite(i.options.BaseLine)&&i.options.BaseLine>=e.scale_ymin&&(f=Math.round(e.gry(i.options.BaseLine))),o=a;o0&&(w=d+g,g=Math.round(g/10),c.swap_xy?(b+=`M${f},${d}h${_-f}v${g}h${f-_}z`,v+=`M${f},${w}h${_-f}v${-g}h${f-_}z`):(b+=`M${d},${_}h${g}v${f-_}h${-g}z`,v+=`M${w},${_}h${-g}v${f-_}h${g}z`))));return i.fillatt.empty()&&i.fillatt.setSolidColor("blue"),M&&i.draw_g.append("svg:path").attr("d",M).call(i.fillatt.func),b&&i.draw_g.append("svg:path").attr("d",b).call(i.fillatt.func).style("fill",(0,ot.B8)(i.fillatt.color).brighter(.5).formatHex()),v&&i.draw_g.append("svg:path").attr("d",v).call(i.fillatt.func).style("fill",(0,ot.B8)(i.fillatt.color).darker(.5).formatHex()),!0})()}drawFilledErrors(t,e){var r=this;return(0,z.Z)(function*(){r.createG(!0);let c,n,p,o,s,y,d,u=t.i1,i=t.i2,a=t.stepi,h=r.getHisto(),l=r.getAxis("x"),w=[],x=[];for(c=u;c1&&(O=!0),2===a.ErrorKind?i.fillatt.empty()?O=!0:J="":a.Error&&(W="",V=p?"":null),X&&(I=""),O&&(i.createv7AttMarker(),i.markeratt.size>0?(Q="",i.markeratt.resetPos()):O=!1),N){if(P=i.v7EvalFont("text",{size:20,color:"black",align:22}),!P.angle&&!a.TextKind){let D=r/(l-h+1);D<3*P.size&&(P.setAngle(270),P.setSize(Math.round(.7*D)))}i.startTextDrawing(P,"font")}let ft=l-h>3*r;if(1===a.ErrorKind){let D=i.lineatt.width+F.gStyle.fEndErrorSize;rt=`m0,${D}v${-2*D}m0,${D}`,nt=`m${D},0h${-2*D}m${D},0`,q=Math.floor((i.lineatt.width-1)/2)}let U=R||O;(U||N||X)&&(ft=!0);let tt=D=>{if(k=n.getBinContent(D+1),!L||0!==k){if(H=Math.round(e.grx(o.GetBinCoord(D))),K=Math.round(e.grx(o.GetBinCoord(D+c))),Z=Math.round((H+K)/2),S=Math.round(e.gry(k)),G=j=20,R&&(at=n.getBinError(D+1),G=Math.round(S-e.gry(k+at)),j=Math.round(e.gry(k-at)-S)),N&&0!==k){let A=k===Math.round(k)?k.toString():(0,Y.Ee)(k,F.gStyle.fPaintTextFormat);i.drawText(P.angle?{align:12,x:Z,y:Math.round(S-2-P.size/5),text:A,latex:0}:{x:Math.round(H+.1*(K-H)),y:Math.round(S-2-P.size),width:Math.round(.8*(K-H)),height:P.size,text:A,latex:0})}if(X&&null!==I&&(I+=(0===I.length?"M":"L")+Z+","+S),U&&S>=-G&&S<=u+j&&(null!==J&&(J+=`M${H},${S-G}h${K-H}v${G+j+1}h${H-K}z`),null!==Q&&(Q+=i.markeratt.create(Z,S)),null!==W)){let A=5;if(i.options.errorX>0){A=Math.round((K-H)*i.options.errorX);let ut=Z-A;W+=`M${ut+q},${S}${rt}h${Z+A-ut-2*q}${rt}`}W+=`M${Z},${S-G+q}${nt}v${G+j-2*q}${nt}`,null!==V&&(V+=`M${Z-A},${S-G}h${2*A}v${G+j}h${-2*A}z`)}}};for(B=h;B<=l;B+=c)_=o.GetBinCoord(B),!(e.logx&&_<=0)&&(f=Math.round(e.grx(_)),y=B>l-c,y&&hv&&(m=B),b=Math.min(b,M),v=Math.max(v,M),x=M):(M!==x||y)&&(f!==w&&(s+="h"+(f-w)),M!==x&&(s+="v"+(M-x)),x=M,w=f));let st="",dt=!(0,F.isBatchMode)()&&i.fillatt.empty()&&a.Hist&&F.settings.Tooltip&&!U&&!X;if(!i.fillatt.empty()||dt){let D=u+3;if(dt){let A=Math.round(e.gry(0));A<=0?D=-3:Av+.5?r.swap_xy?f=m:g=m:(f++,g--)}if(l=g=f,n=M(l),r.swap_xy){for(;f>x&&M(f-1)n-2;)++g}else{for(;f>x&&M(f-1)>n-2;)--f;for(;g<_&&M(g+1)i/10&&(l=Math.round(f+(g-f)/i*C)),n=M(l)}if(n=Math.round(n),o=Math.round(M(l+1)),this.options.Bar){let m=o-n;n+=Math.round(this.options.BarOffset*m),o=n+Math.round(this.options.BarWidth*m)}if(n>o&&([n,o]=[o,n]),p=Math.round((n+o)/2),y=s=d=b(l),this.options.Bar)c=!0,w=0,s=Math.round(r.gry(!1!==this.options.BaseLine&&this.options.BaseLine>r.scale_ymin?this.options.BaseLine:r.scale_ymin)),s>d&&([s,d]=[d,s]),!t.touch&&1===t.nproc&&(Cd)&&(l=null);else if(this.options.Error||this.options.Mark){c=!0;let m=3;if(this.markeratt&&(m=Math.max(m,this.markeratt.getFullSize())),this.options.Error){let $=a.getBinContent(l+1),L=a.getBinError(l+1);s=Math.round(r.gry($+L)),d=Math.round(r.gry($-L));let R=(o-n)*this.options.errorX;n=Math.round(p-R),o=Math.round(p+R)}o-n<2*m&&(n=p-m,o=p+m),s=Math.min(s,y-m),d=Math.max(d,y+m),!t.touch&&1===t.nproc&&(Cd)&&(l=null)}else this.options.Line?c=!1:(c=1===t.nproc&&_-xd)&&!t.touch&&(l=null)));null!==l&&(l===x&&n>v+w||l===_-1&&oo+w||!this.options.Zero&&0===a.getBinContent(l+1))&&(l=null);let E=this.draw_g.select(".tooltip_bin");if(null===l||d<=0||s>=i)return E.remove(),null;let B={name:"histo",title:a.fTitle,x:p,y,exact:!0,color1:this.lineatt?this.lineatt.color:"green",color2:this.fillatt?this.fillatt.getFillColorAlt("blue"):"blue",lines:this.getBinTooltips(l)};if(t.disabled)E.remove(),B.changed=!0;else if(c)E.empty()&&(E=this.draw_g.append("svg:rect").attr("class","tooltip_bin h1bin").style("pointer-events","none")),B.changed=E.property("current_bin")!==l,B.changed&&E.attr("x",e.swap_xy?s:n).attr("width",e.swap_xy?d-s:o-n).attr("y",e.swap_xy?n:s).attr("height",e.swap_xy?o-n:d-s).style("opacity","0.3").property("current_bin",l),B.exact=Math.abs(y-C)<=5||C>=s&&C<=d,B.menu=B.exact,B.menu_dist=Math.sqrt((p-v)**2+(y-C)**2);else{let m=this.lineatt.width+3;E.empty()&&(E=this.draw_g.append("svg:circle").attr("class","tooltip_bin").style("pointer-events","none").attr("r",m).call(this.lineatt.func).call(this.fillatt.func)),B.exact=Math.abs(p-t.x)<=m&&Math.abs(y-t.y)<=m,B.menu=B.exact,B.menu_dist=Math.sqrt((p-t.x)**2+(y-t.y)**2),B.changed=E.property("current_bin")!==l,B.changed&&E.attr("cx",p).attr("cy",y).property("current_bin",l)}return B.changed&&(B.user_info={obj:a,name:"histo",bin:l,cont:a.getBinContent(l+1),grx:p,gry:y}),B}fillHistContextMenu(t){t.add("Auto zoom-in",()=>this.autoZoom());let e=this.getSupportedDrawOptions();t.addDrawMenu("Draw with",e,r=>{if("inspect"===r)return this.showInspector();this.decodeOptions(r),this.options.need_fillcol&&this.fillatt&&this.fillatt.empty()&&this.fillatt.change(5,1001),this.interactiveRedraw("pad","drawopt")})}autoZoom(){let t=this.getSelectIndex("x","left",-1),e=this.getSelectIndex("x","right",1),r=e-t,u=this.getHisto(),i=this.getAxis("x");if(0==r)return;let a=u.getBinContent(t+1);for(let h=t;h0)){for(;t2&&e1||"y"==t&&Math.abs(r-e)>1e-6*Math.abs(this.ymax-this.ymin)}callDrawFunc(t){var e=this;return(0,z.Z)(function*(){let r=e.getFramePainter();return r&&r.mode3d!==e.options.Mode3D&&!e.isMainPainter()&&(e.options.Mode3D=r.mode3d),e.options.Mode3D?e.draw3D(t):e.draw2D(t)})()}draw2D(t){var e=this;return(0,z.Z)(function*(){return e.clear3DScene(),e.drawFrameAxes().then(r=>!!r&&e.drawingBins(t)).then(r=>{if(r)return e.draw1DBins().then(()=>e.addInteractivity())}).then(()=>e)})()}draw3D(t){var e=this;return(0,z.Z)(function*(){return console.log("3D drawing is disabled, load ./hist/RH1Painter.mjs"),e.draw2D(t)})()}redraw(t){var e=this;return(0,z.Z)(function*(){return e.callDrawFunc(t)})()}static _draw(t,e){return(0,z.Z)(function*(){return(0,gt.ensureRCanvas)(t).then(()=>{t.setAsMainPainter(),t.options={Hist:!1,Bar:!1,BarStyle:0,Error:!1,ErrorKind:-1,errorX:F.gStyle.fErrorX,Zero:!1,Mark:!1,Line:!1,Fill:!1,Lego:0,Surf:0,Text:!1,TextAngle:0,TextKind:"",AutoColor:0,BarOffset:0,BarWidth:1,BaseLine:!1,Mode3D:!1};let r=new Y.pc(e);r.check("R3D_",!0)&&(t.options.Render3D=F.constants.Render3D.fromString(r.part.toLowerCase()));let u=t.v7EvalAttr("kind","hist"),i=t.v7EvalAttr("sub",0),a=!!t.getMainPainter(),h=t.options;switch(h.Text=t.v7EvalAttr("drawtext",!1),h.BarOffset=t.v7EvalAttr("baroffset",0),h.BarWidth=t.v7EvalAttr("barwidth",1),h.second_x=a&&t.v7EvalAttr("secondx",!1),h.second_y=a&&t.v7EvalAttr("secondy",!1),u){case"bar":h.Bar=!0,h.BarStyle=i;break;case"err":h.Error=!0,h.ErrorKind=i;break;case"p":h.Mark=!0;break;case"l":h.Line=!0;break;case"lego":h.Lego=i>0?10+i:12,h.Mode3D=!0;break;default:h.Hist=!0}return t.scanContent(),t.callDrawFunc()})})()}static draw(t,e,r){return(0,z.Z)(function*(){return et._draw(new et(t,e),r)})()}}var mt=T(9850),ht=T(7238);class it extends et{draw3D(t){this.mode3d=!0;let e=this.getFramePainter(),r=this.isMainPainter(),u=1+2*F.gStyle.fHistTopMargin,i=Promise.resolve(this);return"resize"==t?(r&&e.resize3D()&&e.render3D(),i):(this.deleteAttr(),this.scanContent(!0),r&&((0,ht.g_)(e),i=e.create3DScene(this.options.Render3D).then(()=>{e.setAxesRanges(this.getAxis("x"),this.xmin,this.xmax,null,this.ymin,this.ymax,null,0,0),e.set3DOptions(this.options),e.drawXYZ(e.toplevel,mt.C,{use_y_for_z:!0,zmult:u,zoom:F.settings.Zooming,ndim:1,draw:!0,v7:!0})})),e.mode3d?i.then(()=>this.drawingBins(t)).then(()=>{let a=this.getFramePainter();return(0,ht.UR)(this,!0),this.updatePaletteDraw(),a.render3D(),a.addKeysHandler(),this}):i)}static draw(t,e,r){return(0,z.Z)(function*(){return it._draw(new it(t,e),r)})()}}}}]); +//# sourceMappingURL=61.0c69ba056b35a633.js.map \ No newline at end of file diff --git a/docs/61.0c69ba056b35a633.js.map b/docs/61.0c69ba056b35a633.js.map new file mode 100644 index 000000000..3b8f215d7 --- /dev/null +++ b/docs/61.0c69ba056b35a633.js.map @@ -0,0 +1 @@ +{"version":3,"file":"61.0c69ba056b35a633.js","mappings":"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","names":["RH1Painter","RHistPainter","constructor","dom","histo","super","this","wheel_zoomy","scanContent","when_axis_changed","getHisto","nbinsx","extractAxesProperties","hmin","hmin_nz","hmax","hsum","isDisplayItem","fContMin","fContMinPos","fContMax","left","getSelectIndex","right","scan_xleft","scan_xright","value","err","first","i","getBinContent","Math","min","max","stat_entries","ymin_nz","draw_content","abs","ymin","ymax","dy","countStat","cond","xaxis","getAxis","stat_sumw","stat_sumwx","stat_sumwx2","xx","w","xmax","wmax","res","getFramePainter","name","meanx","meany","rmsx","rmsy","integral","entries","GetBinCoord","sqrt","fillStatistic","stat","dostat","data","print_name","print_entries","floor","print_mean","print_rms","print_under","print_over","print_integral","print_skew","print_kurt","clearStat","addText","format","drawBars","handle","funcs","width","height","_this","createG","x1","x2","grx1","grx2","y","gry1","gry2","i1","i2","di","stepi","pmain","bars","barsl","barsr","swap_xy","Number","isFinite","options","BaseLine","scale_ymin","round","gry","logx","grx","logy","BarOffset","BarWidth","BarStyle","fillatt","empty","setSolidColor","draw_g","append","attr","call","func","style","d3_rgb","color","brighter","formatHex","darker","drawFilledErrors","_this2","x","yerr","bins1","bins2","getBinError","push","unshift","kind","ErrorKind","path1","buildSvgPath","path2","path","draw1DBins","_this3","rect","getFrameRect","removeG","createHistDrawAttributes","prepareDraw","extra","only_indexes","getGrFuncs","second_x","second_y","Bar","drawHistBins","_this4","startx","currx","curry","curry_min","curry_max","prevy","prevx","bestimin","bestimax","my","yerr1","yerr2","bincont","binerr","mx1","mx2","midx","text_font","want_tooltip","isBatchMode","settings","lastbin","exclude_zero","Zero","show_errors","Error","show_markers","Mark","show_line","Line","show_text","Text","path_fill","path_err","path_marker","path_line","hints_err","endx","endy","dend","v7EvalAttr","createv7AttMarker","markeratt","size","resetPos","v7EvalFont","align","angle","TextKind","space","setAngle","setSize","startTextDrawing","use_minmax","lw","lineatt","gStyle","draw_markers","draw_bin","besti","lbl","toString","floatToString","drawText","text","latex","length","create","edx","errorX","mmx1","close_path","fill_for_interactive","Hist","h0","gry0","Fill","finishTextDrawing","getBinTooltips","bin","tips","getObjectHint","stepx","cont","xlbl","getAxisBinTip","axisAsText","toPrecision","$baseh","processTooltipEvent","pnt","Mode3D","select","remove","show_rect","midy","getFrameWidth","getFrameHeight","findbin","gapx","l","r","GetBinGrX","GetBinGrY","yy","pnt_x","pnt_y","m","best","dist","touch","nproc","msize","getFullSize","dx","ttrect","title","fTitle","exact","color1","color2","getFillColorAlt","lines","disabled","changed","property","menu","menu_dist","radius","user_info","obj","fillHistContextMenu","add","autoZoom","opts","getSupportedDrawOptions","addDrawMenu","arg","showInspector","decodeOptions","need_fillcol","change","interactiveRedraw","indx","zoom","canZoomInside","axis","FindBin","callDrawFunc","reason","main","_this5","mode3d","isMainPainter","draw3D","draw2D","clear3DScene","_this6","drawFrameAxes","then","drawingBins","addInteractivity","console","log","_this7","redraw","_this8","static","painter","opt","ensureRCanvas","setAsMainPainter","Lego","Surf","TextAngle","AutoColor","d","DrawOptions","check","Render3D","constants","part","toLowerCase","sub","has_main","getMainPainter","o","_draw","RH1Painter2D","is_main","zmult","pr","Promise","resolve","resize3D","render3D","deleteAttr","assignFrame3DMethods","create3DScene","setAxesRanges","xmin","set3DOptions","drawXYZ","toplevel","RAxisPainter","use_y_for_z","ndim","draw","v7","drawBinsLego","updatePaletteDraw","addKeysHandler"],"sourceRoot":"webpack:///","sources":["../node_modules/jsroot/modules/hist2d/RH1Painter.mjs","../node_modules/jsroot/modules/hist/RH1Painter.mjs"],"sourcesContent":["import { gStyle, settings, constants, isBatchMode } from '../core.mjs';\nimport { rgb as d3_rgb } from '../d3.mjs';\nimport { floatToString, DrawOptions, buildSvgPath } from '../base/BasePainter.mjs';\nimport { RHistPainter } from './RHistPainter.mjs';\nimport { ensureRCanvas } from '../gpad/RCanvasPainter.mjs';\n\n/**\n * @summary Painter for RH1 classes\n *\n * @private\n */\n\nclass RH1Painter extends RHistPainter {\n\n /** @summary Constructor\n * @param {object|string} dom - DOM element or id\n * @param {object} histo - histogram object */\n constructor(dom, histo) {\n super(dom, histo);\n this.wheel_zoomy = false;\n }\n\n /** @summary Scan content */\n scanContent(when_axis_changed) {\n // if when_axis_changed === true specified, content will be scanned after axis zoom changed\n\n let histo = this.getHisto();\n if (!histo) return;\n\n if (!this.nbinsx && when_axis_changed) when_axis_changed = false;\n\n if (!when_axis_changed)\n this.extractAxesProperties(1);\n\n let hmin = 0, hmin_nz = 0, hmax = 0, hsum = 0;\n\n if (this.isDisplayItem()) {\n // take min/max values from the display item\n hmin = histo.fContMin;\n hmin_nz = histo.fContMinPos;\n hmax = histo.fContMax;\n hsum = hmax;\n } else {\n\n let left = this.getSelectIndex('x', 'left'),\n right = this.getSelectIndex('x', 'right');\n\n if (when_axis_changed) {\n if ((left === this.scan_xleft) && (right === this.scan_xright)) return;\n }\n\n this.scan_xleft = left;\n this.scan_xright = right;\n\n let first = true, value, err;\n\n for (let i = 0; i < this.nbinsx; ++i) {\n value = histo.getBinContent(i+1);\n hsum += value;\n\n if ((i=right)) continue;\n\n if (value > 0)\n if ((hmin_nz == 0) || (value= hmax) {\n if (hmin == 0) { this.ymin = 0; this.ymax = 1; }\n else if (hmin < 0) { this.ymin = 2 * hmin; this.ymax = 0; }\n else { this.ymin = 0; this.ymax = hmin * 2; }\n } else {\n let dy = (hmax - hmin) * 0.05;\n this.ymin = hmin - dy;\n if ((this.ymin < 0) && (hmin >= 0)) this.ymin = 0;\n this.ymax = hmax + dy;\n }\n }\n }\n\n /** @summary Count statistic */\n countStat(cond) {\n let histo = this.getHisto(), xaxis = this.getAxis('x'),\n left = this.getSelectIndex('x', 'left'),\n right = this.getSelectIndex('x', 'right'),\n stat_sumw = 0, stat_sumwx = 0, stat_sumwx2 = 0, stat_sumwy = 0, stat_sumwy2 = 0,\n i, xx = 0, w = 0, xmax = null, wmax = null,\n fp = this.getFramePainter(),\n res = { name: 'histo', meanx: 0, meany: 0, rmsx: 0, rmsy: 0, integral: 0, entries: this.stat_entries, xmax: 0, wmax: 0 };\n\n for (i = left; i < right; ++i) {\n xx = xaxis.GetBinCoord(i+0.5);\n\n if (cond && !cond(xx)) continue;\n\n w = histo.getBinContent(i + 1);\n\n if ((xmax === null) || (w > wmax)) { xmax = xx; wmax = w; }\n\n stat_sumw += w;\n stat_sumwx += w * xx;\n stat_sumwx2 += w * xx**2;\n }\n\n res.integral = stat_sumw;\n\n if (Math.abs(stat_sumw) > 1e-300) {\n res.meanx = stat_sumwx / stat_sumw;\n res.meany = stat_sumwy / stat_sumw;\n res.rmsx = Math.sqrt(Math.abs(stat_sumwx2 / stat_sumw - res.meanx**2));\n res.rmsy = Math.sqrt(Math.abs(stat_sumwy2 / stat_sumw - res.meany**2));\n }\n\n if (xmax !== null) {\n res.xmax = xmax;\n res.wmax = wmax;\n }\n\n return res;\n }\n\n /** @summary Fill statistic */\n fillStatistic(stat, dostat/*, dofit*/) {\n\n let data = this.countStat(),\n print_name = dostat % 10,\n print_entries = Math.floor(dostat / 10) % 10,\n print_mean = Math.floor(dostat / 100) % 10,\n print_rms = Math.floor(dostat / 1000) % 10,\n print_under = Math.floor(dostat / 10000) % 10,\n print_over = Math.floor(dostat / 100000) % 10,\n print_integral = Math.floor(dostat / 1000000) % 10,\n print_skew = Math.floor(dostat / 10000000) % 10,\n print_kurt = Math.floor(dostat / 100000000) % 10;\n\n // make empty at the beginning\n stat.clearStat();\n\n if (print_name > 0)\n stat.addText(data.name);\n\n if (print_entries > 0)\n stat.addText('Entries = ' + stat.format(data.entries,'entries'));\n\n if (print_mean > 0)\n stat.addText('Mean = ' + stat.format(data.meanx));\n\n if (print_rms > 0)\n stat.addText('Std Dev = ' + stat.format(data.rmsx));\n\n if (print_under > 0)\n stat.addText('Underflow = ' + stat.format(histo.getBinContent(0), 'entries'));\n\n if (print_over > 0)\n stat.addText('Overflow = ' + stat.format(histo.getBinContent(this.nbinsx+1), 'entries'));\n\n if (print_integral > 0)\n stat.addText('Integral = ' + stat.format(data.integral,'entries'));\n\n if (print_skew > 0)\n stat.addText('Skew = ');\n\n if (print_kurt > 0)\n stat.addText('Kurt = ');\n\n return true;\n }\n\n /** @summary Draw histogram as bars */\n async drawBars(handle, funcs, width, height) {\n\n this.createG(true);\n\n let left = handle.i1, right = handle.i2, di = handle.stepi,\n pmain = this.getFramePainter(),\n histo = this.getHisto(), xaxis = this.getAxis('x'),\n i, x1, x2, grx1, grx2, y, gry1, gry2, w,\n bars = '', barsl = '', barsr = '';\n\n gry2 = pmain.swap_xy ? 0 : height;\n if (Number.isFinite(this.options.BaseLine))\n if (this.options.BaseLine >= funcs.scale_ymin)\n gry2 = Math.round(funcs.gry(this.options.BaseLine));\n\n for (i = left; i < right; i += di) {\n x1 = xaxis.GetBinCoord(i);\n x2 = xaxis.GetBinCoord(i+di);\n\n if (funcs.logx && (x2 <= 0)) continue;\n\n grx1 = Math.round(funcs.grx(x1));\n grx2 = Math.round(funcs.grx(x2));\n\n y = histo.getBinContent(i+1);\n if (funcs.logy && (y < funcs.scale_ymin)) continue;\n gry1 = Math.round(funcs.gry(y));\n\n w = grx2 - grx1;\n grx1 += Math.round(this.options.BarOffset*w);\n w = Math.round(this.options.BarWidth*w);\n\n if (pmain.swap_xy)\n bars += `M${gry2},${grx1}h${gry1-gry2}v${w}h${gry2-gry1}z`;\n else\n bars += `M${grx1},${gry1}h${w}v${gry2-gry1}h${-w}z`;\n\n if (this.options.BarStyle > 0) {\n grx2 = grx1 + w;\n w = Math.round(w / 10);\n if (pmain.swap_xy) {\n barsl += `M${gry2},${grx1}h${gry1-gry2}v${w}h${gry2-gry1}z`;\n barsr += `M${gry2},${grx2}h${gry1-gry2}v${-w}h${gry2-gry1}z`;\n } else {\n barsl += `M${grx1},${gry1}h${w}v${gry2-gry1}h${-w}z`;\n barsr += `M${grx2},${gry1}h${-w}v${gry2-gry1}h${w}z`;\n }\n }\n }\n\n if (this.fillatt.empty()) this.fillatt.setSolidColor('blue');\n\n if (bars)\n this.draw_g.append('svg:path')\n .attr('d', bars)\n .call(this.fillatt.func);\n\n if (barsl)\n this.draw_g.append('svg:path')\n .attr('d', barsl)\n .call(this.fillatt.func)\n .style('fill', d3_rgb(this.fillatt.color).brighter(0.5).formatHex());\n\n if (barsr)\n this.draw_g.append('svg:path')\n .attr('d', barsr)\n .call(this.fillatt.func)\n .style('fill', d3_rgb(this.fillatt.color).darker(0.5).formatHex());\n\n return true;\n }\n\n /** @summary Draw histogram as filled errors */\n async drawFilledErrors(handle, funcs /*, width, height*/) {\n this.createG(true);\n\n let left = handle.i1, right = handle.i2, di = handle.stepi,\n histo = this.getHisto(), xaxis = this.getAxis('x'),\n i, x, grx, y, yerr, gry1, gry2,\n bins1 = [], bins2 = [];\n\n for (i = left; i < right; i += di) {\n x = xaxis.GetBinCoord(i+0.5);\n if (funcs.logx && (x <= 0)) continue;\n grx = Math.round(funcs.grx(x));\n\n y = histo.getBinContent(i+1);\n yerr = histo.getBinError(i+1);\n if (funcs.logy && (y-yerr < funcs.scale_ymin)) continue;\n\n gry1 = Math.round(funcs.gry(y + yerr));\n gry2 = Math.round(funcs.gry(y - yerr));\n\n bins1.push({grx: grx, gry: gry1});\n bins2.unshift({grx: grx, gry: gry2});\n }\n\n let kind = (this.options.ErrorKind === 4) ? 'bezier' : 'line',\n path1 = buildSvgPath(kind, bins1),\n path2 = buildSvgPath('L'+kind, bins2);\n\n if (this.fillatt.empty()) this.fillatt.setSolidColor('blue');\n\n this.draw_g.append('svg:path')\n .attr('d', path1.path + path2.path + 'Z')\n .call(this.fillatt.func);\n\n return true;\n }\n\n /** @summary Draw 1D histogram as SVG */\n async draw1DBins() {\n\n let pmain = this.getFramePainter(),\n rect = pmain.getFrameRect();\n\n if (!this.draw_content || (rect.width <= 0) || (rect.height <= 0)) {\n this.removeG()\n return false;\n }\n\n this.createHistDrawAttributes();\n\n let handle = this.prepareDraw({ extra: 1, only_indexes: true }),\n funcs = pmain.getGrFuncs(this.options.second_x, this.options.second_y);\n\n if (this.options.Bar)\n return this.drawBars(handle, funcs, rect.width, rect.height);\n\n if ((this.options.ErrorKind === 3) || (this.options.ErrorKind === 4))\n return this.drawFilledErrors(handle, funcs, rect.width, rect.height);\n\n return this.drawHistBins(handle, funcs, rect.width, rect.height);\n }\n\n /** @summary Draw histogram bins */\n async drawHistBins(handle, funcs, width, height) {\n this.createG(true);\n\n let options = this.options,\n left = handle.i1,\n right = handle.i2,\n di = handle.stepi,\n histo = this.getHisto(),\n want_tooltip = !isBatchMode() && settings.Tooltip,\n xaxis = this.getAxis('x'),\n res = '', lastbin = false,\n startx, currx, curry, x, grx, y, gry, curry_min, curry_max, prevy, prevx, i, bestimin, bestimax,\n exclude_zero = !options.Zero,\n show_errors = options.Error,\n show_markers = options.Mark,\n show_line = options.Line,\n show_text = options.Text,\n path_fill = null, path_err = null, path_marker = null, path_line = null,\n hints_err = null,\n endx = '', endy = '', dend = 0, my, yerr1, yerr2, bincont, binerr, mx1, mx2, midx,\n text_font;\n\n if (show_errors && !show_markers && (this.v7EvalAttr('marker_style',1) > 1))\n show_markers = true;\n\n if (options.ErrorKind === 2) {\n if (this.fillatt.empty()) show_markers = true;\n else path_fill = '';\n } else if (options.Error) {\n path_err = '';\n hints_err = want_tooltip ? '' : null;\n }\n\n if (show_line) path_line = '';\n\n if (show_markers) {\n // draw markers also when e2 option was specified\n this.createv7AttMarker();\n if (this.markeratt.size > 0) {\n // simply use relative move from point, can optimize in the future\n path_marker = '';\n this.markeratt.resetPos();\n } else {\n show_markers = false;\n }\n }\n\n if (show_text) {\n text_font = this.v7EvalFont('text', { size: 20, color: 'black', align: 22 });\n\n if (!text_font.angle && !options.TextKind) {\n let space = width / (right - left + 1);\n if (space < 3 * text_font.size) {\n text_font.setAngle(270);\n text_font.setSize(Math.round(space*0.7));\n }\n }\n\n this.startTextDrawing(text_font, 'font');\n }\n\n // if there are too many points, exclude many vertical drawings at the same X position\n // instead define min and max value and made min-max drawing\n let use_minmax = ((right-left) > 3*width);\n\n if (options.ErrorKind === 1) {\n let lw = this.lineatt.width + gStyle.fEndErrorSize;\n endx = `m0,${lw}v${-2*lw}m0,${lw}`;\n endy = `m${lw},0h${-2*lw}m${lw},0`;\n dend = Math.floor((this.lineatt.width-1)/2);\n }\n\n let draw_markers = show_errors || show_markers;\n\n if (draw_markers || show_text || show_line) use_minmax = true;\n\n let draw_bin = besti => {\n bincont = histo.getBinContent(besti+1);\n if (!exclude_zero || (bincont !== 0)) {\n mx1 = Math.round(funcs.grx(xaxis.GetBinCoord(besti)));\n mx2 = Math.round(funcs.grx(xaxis.GetBinCoord(besti+di)));\n midx = Math.round((mx1+mx2)/2);\n my = Math.round(funcs.gry(bincont));\n yerr1 = yerr2 = 20;\n if (show_errors) {\n binerr = histo.getBinError(besti+1);\n yerr1 = Math.round(my - funcs.gry(bincont + binerr)); // up\n yerr2 = Math.round(funcs.gry(bincont - binerr) - my); // down\n }\n\n if (show_text && (bincont !== 0)) {\n let lbl = (bincont === Math.round(bincont)) ? bincont.toString() : floatToString(bincont, gStyle.fPaintTextFormat);\n\n if (text_font.angle)\n this.drawText({ align: 12, x: midx, y: Math.round(my - 2 - text_font.size / 5), text: lbl, latex: 0 });\n else\n this.drawText({ x: Math.round(mx1 + (mx2 - mx1) * 0.1), y: Math.round(my - 2 - text_font.size), width: Math.round((mx2 - mx1) * 0.8), height: text_font.size, text: lbl, latex: 0 });\n }\n\n if (show_line && (path_line !== null))\n path_line += ((path_line.length === 0) ? 'M' : 'L') + midx + ',' + my;\n\n if (draw_markers) {\n if ((my >= -yerr1) && (my <= height + yerr2)) {\n if (path_fill !== null)\n path_fill += `M${mx1},${my-yerr1}h${mx2-mx1}v${yerr1+yerr2+1}h${mx1-mx2}z`;\n if (path_marker !== null)\n path_marker += this.markeratt.create(midx, my);\n if (path_err !== null) {\n let edx = 5;\n if (this.options.errorX > 0) {\n edx = Math.round((mx2-mx1)*this.options.errorX);\n let mmx1 = midx - edx, mmx2 = midx + edx;\n path_err += `M${mmx1+dend},${my}${endx}h${mmx2-mmx1-2*dend}${endx}`;\n }\n path_err += `M${midx},${my-yerr1+dend}${endy}v${yerr1+yerr2-2*dend}${endy}`;\n if (hints_err !== null)\n hints_err += `M${midx-edx},${my-yerr1}h${2*edx}v${yerr1+yerr2}h${-2*edx}z`;\n }\n }\n }\n }\n };\n\n for (i = left; i <= right; i += di) {\n\n x = xaxis.GetBinCoord(i);\n\n if (funcs.logx && (x <= 0)) continue;\n\n grx = Math.round(funcs.grx(x));\n\n lastbin = (i > right - di);\n\n if (lastbin && (left < right)) {\n gry = curry;\n } else {\n y = histo.getBinContent(i+1);\n gry = Math.round(funcs.gry(y));\n }\n\n if (res.length === 0) {\n bestimin = bestimax = i;\n prevx = startx = currx = grx;\n prevy = curry_min = curry_max = curry = gry;\n res = 'M'+currx+','+curry;\n } else\n if (use_minmax) {\n if ((grx === currx) && !lastbin) {\n if (gry < curry_min) bestimax = i; else\n if (gry > curry_max) bestimin = i;\n curry_min = Math.min(curry_min, gry);\n curry_max = Math.max(curry_max, gry);\n curry = gry;\n } else {\n\n if (draw_markers || show_text || show_line) {\n if (bestimin === bestimax) { draw_bin(bestimin); } else\n if (bestimin < bestimax) { draw_bin(bestimin); draw_bin(bestimax); } else {\n draw_bin(bestimax); draw_bin(bestimin);\n }\n }\n\n // when several points as same X differs, need complete logic\n if (!draw_markers && ((curry_min !== curry_max) || (prevy !== curry_min))) {\n\n if (prevx !== currx)\n res += 'h'+(currx-prevx);\n\n if (curry === curry_min) {\n if (curry_max !== prevy)\n res += 'v' + (curry_max - prevy);\n if (curry_min !== curry_max)\n res += 'v' + (curry_min - curry_max);\n } else {\n if (curry_min !== prevy)\n res += 'v' + (curry_min - prevy);\n if (curry_max !== curry_min)\n res += 'v' + (curry_max - curry_min);\n if (curry !== curry_max)\n res += 'v' + (curry - curry_max);\n }\n\n prevx = currx;\n prevy = curry;\n }\n\n if (lastbin && (prevx !== grx))\n res += 'h'+(grx-prevx);\n\n bestimin = bestimax = i;\n curry_min = curry_max = curry = gry;\n currx = grx;\n }\n } else\n if ((gry !== curry) || lastbin) {\n if (grx !== currx) res += 'h'+(grx-currx);\n if (gry !== curry) res += 'v'+(gry-curry);\n curry = gry;\n currx = grx;\n }\n }\n\n let close_path = '',\n fill_for_interactive = !isBatchMode() && this.fillatt.empty() && options.Hist && settings.Tooltip && !draw_markers && !show_line;\n if (!this.fillatt.empty() || fill_for_interactive) {\n let h0 = height + 3;\n if (fill_for_interactive) {\n let gry0 = Math.round(funcs.gry(0));\n if (gry0 <= 0)\n h0 = -3;\n else if (gry0 < height)\n h0 = gry0;\n }\n close_path = `L${currx},${h0}H${startx}Z`;\n if (res) res += close_path;\n }\n\n if (draw_markers || show_line) {\n if (path_fill)\n this.draw_g.append('svg:path')\n .attr('d', path_fill)\n .call(this.fillatt.func);\n\n if (path_err)\n this.draw_g.append('svg:path')\n .attr('d', path_err)\n .call(this.lineatt.func);\n\n if (hints_err)\n this.draw_g.append('svg:path')\n .attr('d', hints_err)\n .style('fill', 'none')\n .style('pointer-events', isBatchMode() ? null : 'visibleFill');\n\n if (path_line) {\n if (!this.fillatt.empty())\n this.draw_g.append('svg:path')\n .attr('d', options.Fill ? (path_line + close_path) : res)\n .call(this.fillatt.func);\n\n this.draw_g.append('svg:path')\n .attr('d', path_line)\n .style('fill', 'none')\n .call(this.lineatt.func);\n }\n\n if (path_marker)\n this.draw_g.append('svg:path')\n .attr('d', path_marker)\n .call(this.markeratt.func);\n\n } else if (res && options.Hist) {\n this.draw_g.append('svg:path')\n .attr('d', res)\n .style('stroke-linejoin','miter')\n .call(this.lineatt.func)\n .call(this.fillatt.func);\n }\n\n return show_text ? this.finishTextDrawing() : true;\n }\n\n /** @summary Provide text information (tooltips) for histogram bin */\n getBinTooltips(bin) {\n let tips = [],\n name = this.getObjectHint(),\n pmain = this.getFramePainter(),\n histo = this.getHisto(),\n xaxis = this.getAxis('x'),\n di = this.isDisplayItem() ? histo.stepx : 1,\n x1 = xaxis.GetBinCoord(bin),\n x2 = xaxis.GetBinCoord(bin+di),\n cont = histo.getBinContent(bin+1),\n xlbl = this.getAxisBinTip('x', bin, di);\n\n if (name) tips.push(name);\n\n if (this.options.Error || this.options.Mark) {\n tips.push('x = ' + xlbl, 'y = ' + pmain.axisAsText('y', cont));\n if (this.options.Error) {\n if (xlbl[0] == '[') tips.push('error x = ' + ((x2 - x1) / 2).toPrecision(4));\n tips.push('error y = ' + histo.getBinError(bin + 1).toPrecision(4));\n }\n } else {\n tips.push(`bin = ${bin+1}`);\n tips.push('x = ' + xlbl);\n if (histo['$baseh']) cont -= histo['$baseh'].getBinContent(bin+1);\n let lbl = 'entries = ' + (di > 1 ? '~' : '');\n if (cont === Math.round(cont))\n tips.push(lbl + cont);\n else\n tips.push(lbl + floatToString(cont, gStyle.fStatFormat));\n }\n\n return tips;\n }\n\n /** @summary Process tooltip event */\n processTooltipEvent(pnt) {\n if (!pnt || !this.draw_content || this.options.Mode3D || !this.draw_g) {\n if (this.draw_g)\n this.draw_g.select('.tooltip_bin').remove();\n return null;\n }\n\n let pmain = this.getFramePainter(),\n funcs = pmain.getGrFuncs(this.options.second_x, this.options.second_y),\n width = pmain.getFrameWidth(),\n height = pmain.getFrameHeight(),\n histo = this.getHisto(), xaxis = this.getAxis('x'),\n findbin = null, show_rect,\n grx1, midx, grx2, gry1, midy, gry2, gapx = 2,\n left = this.getSelectIndex('x', 'left', -1),\n right = this.getSelectIndex('x', 'right', 2),\n l = left, r = right;\n\n function GetBinGrX(i) {\n let xx = xaxis.GetBinCoord(i);\n return (funcs.logx && (xx <= 0)) ? null : funcs.grx(xx);\n }\n\n function GetBinGrY(i) {\n let yy = histo.getBinContent(i + 1);\n if (funcs.logy && (yy < funcs.scale_ymin))\n return funcs.swap_xy ? -1000 : 10*height;\n return Math.round(funcs.gry(yy));\n }\n\n let pnt_x = funcs.swap_xy ? pnt.y : pnt.x,\n pnt_y = funcs.swap_xy ? pnt.x : pnt.y;\n\n while (l < r-1) {\n let m = Math.round((l+r)*0.5),\n xx = GetBinGrX(m);\n if ((xx === null) || (xx < pnt_x - 0.5)) {\n if (funcs.swap_xy) r = m; else l = m;\n } else if (xx > pnt_x + 0.5) {\n if (funcs.swap_xy) l = m; else r = m;\n } else { l++; r--; }\n }\n\n findbin = r = l;\n grx1 = GetBinGrX(findbin);\n\n if (funcs.swap_xy) {\n while ((l>left) && (GetBinGrX(l-1) < grx1 + 2)) --l;\n while ((r grx1 - 2)) ++r;\n } else {\n while ((l>left) && (GetBinGrX(l-1) > grx1 - 2)) --l;\n while ((r height/10)\n findbin = Math.round(l + (r-l) / height * pnt_y);\n\n grx1 = GetBinGrX(findbin);\n }\n\n grx1 = Math.round(grx1);\n grx2 = Math.round(GetBinGrX(findbin+1));\n\n if (this.options.Bar) {\n let w = grx2 - grx1;\n grx1 += Math.round(this.options.BarOffset*w);\n grx2 = grx1 + Math.round(this.options.BarWidth*w);\n }\n\n if (grx1 > grx2)\n [grx1, grx2] = [grx2, grx1];\n\n midx = Math.round((grx1 + grx2)/2);\n\n midy = gry1 = gry2 = GetBinGrY(findbin);\n\n if (this.options.Bar) {\n show_rect = true;\n\n gapx = 0;\n\n gry1 = Math.round(funcs.gry(((this.options.BaseLine!==false) && (this.options.BaseLine > funcs.scale_ymin)) ? this.options.BaseLine : funcs.scale_ymin));\n\n if (gry1 > gry2)\n [gry1, gry2] = [gry2, gry1];\n\n if (!pnt.touch && (pnt.nproc === 1))\n if ((pnt_y < gry1) || (pnt_y > gry2)) findbin = null;\n\n } else if (this.options.Error || this.options.Mark) {\n\n show_rect = true;\n\n let msize = 3;\n if (this.markeratt) msize = Math.max(msize, this.markeratt.getFullSize());\n\n if (this.options.Error) {\n let cont = histo.getBinContent(findbin+1),\n binerr = histo.getBinError(findbin+1);\n\n gry1 = Math.round(funcs.gry(cont + binerr)); // up\n gry2 = Math.round(funcs.gry(cont - binerr)); // down\n\n let dx = (grx2-grx1)*this.options.errorX;\n grx1 = Math.round(midx - dx);\n grx2 = Math.round(midx + dx);\n }\n\n // show at least 6 pixels as tooltip rect\n if (grx2 - grx1 < 2*msize) { grx1 = midx-msize; grx2 = midx+msize; }\n\n gry1 = Math.min(gry1, midy - msize);\n gry2 = Math.max(gry2, midy + msize);\n\n if (!pnt.touch && (pnt.nproc === 1))\n if ((pnt_ygry2)) findbin = null;\n\n } else if (this.options.Line) {\n\n show_rect = false;\n\n } else {\n\n // if histogram alone, use old-style with rects\n // if there are too many points at pixel, use circle\n show_rect = (pnt.nproc === 1) && (right-left < width);\n\n if (show_rect) {\n gry2 = height;\n\n if (!this.fillatt.empty()) {\n gry2 = Math.min(height, Math.max(0, Math.round(funcs.gry(0))));\n if (gry2 < gry1)\n [gry1, gry2] = [gry2, gry1];\n }\n\n // for mouse events pointer should be between y1 and y2\n if (((pnt.y < gry1) || (pnt.y > gry2)) && !pnt.touch) findbin = null;\n }\n }\n\n if (findbin !== null) {\n // if bin on boundary found, check that x position is ok\n if ((findbin === left) && (grx1 > pnt_x + gapx)) findbin = null; else\n if ((findbin === right-1) && (grx2 < pnt_x - gapx)) findbin = null; else\n // if bars option used check that bar is not match\n if ((pnt_x < grx1 - gapx) || (pnt_x > grx2 + gapx)) findbin = null; else\n // exclude empty bin if empty bins suppressed\n if (!this.options.Zero && (histo.getBinContent(findbin+1) === 0)) findbin = null;\n }\n\n let ttrect = this.draw_g.select('.tooltip_bin');\n\n if ((findbin === null) || ((gry2 <= 0) || (gry1 >= height))) {\n ttrect.remove();\n return null;\n }\n\n let res = { name: 'histo', title: histo.fTitle,\n x: midx, y: midy, exact: true,\n color1: this.lineatt ? this.lineatt.color : 'green',\n color2: this.fillatt ? this.fillatt.getFillColorAlt('blue') : 'blue',\n lines: this.getBinTooltips(findbin) };\n\n if (pnt.disabled) {\n // case when tooltip should not highlight bin\n\n ttrect.remove();\n res.changed = true;\n } else if (show_rect) {\n\n if (ttrect.empty())\n ttrect = this.draw_g.append('svg:rect')\n .attr('class','tooltip_bin h1bin')\n .style('pointer-events','none');\n\n res.changed = ttrect.property('current_bin') !== findbin;\n\n if (res.changed)\n ttrect.attr('x', pmain.swap_xy ? gry1 : grx1)\n .attr('width', pmain.swap_xy ? gry2-gry1 : grx2-grx1)\n .attr('y', pmain.swap_xy ? grx1 : gry1)\n .attr('height', pmain.swap_xy ? grx2-grx1 : gry2-gry1)\n .style('opacity', '0.3')\n .property('current_bin', findbin);\n\n res.exact = (Math.abs(midy - pnt_y) <= 5) || ((pnt_y>=gry1) && (pnt_y<=gry2));\n\n res.menu = res.exact; // one could show context menu\n // distance to middle point, use to decide which menu to activate\n res.menu_dist = Math.sqrt((midx-pnt_x)**2 + (midy-pnt_y)**2);\n\n } else {\n let radius = this.lineatt.width + 3;\n\n if (ttrect.empty())\n ttrect = this.draw_g.append('svg:circle')\n .attr('class','tooltip_bin')\n .style('pointer-events','none')\n .attr('r', radius)\n .call(this.lineatt.func)\n .call(this.fillatt.func);\n\n res.exact = (Math.abs(midx - pnt.x) <= radius) && (Math.abs(midy - pnt.y) <= radius);\n\n res.menu = res.exact; // show menu only when mouse pointer exactly over the histogram\n res.menu_dist = Math.sqrt((midx-pnt.x)**2 + (midy-pnt.y)**2);\n\n res.changed = ttrect.property('current_bin') !== findbin;\n\n if (res.changed)\n ttrect.attr('cx', midx)\n .attr('cy', midy)\n .property('current_bin', findbin);\n }\n\n if (res.changed)\n res.user_info = { obj: histo, name: 'histo',\n bin: findbin, cont: histo.getBinContent(findbin+1),\n grx: midx, gry: midy };\n\n return res;\n }\n\n /** @summary Fill histogram context menu */\n fillHistContextMenu(menu) {\n\n menu.add('Auto zoom-in', () => this.autoZoom());\n\n let opts = this.getSupportedDrawOptions();\n\n menu.addDrawMenu('Draw with', opts, arg => {\n if (arg === 'inspect')\n return this.showInspector();\n\n this.decodeOptions(arg); // obsolete, should be implemented differently\n\n if (this.options.need_fillcol && this.fillatt && this.fillatt.empty())\n this.fillatt.change(5,1001);\n\n // redraw all objects\n this.interactiveRedraw('pad', 'drawopt');\n });\n }\n\n /** @summary Perform automatic zoom inside non-zero region of histogram */\n autoZoom() {\n let left = this.getSelectIndex('x', 'left', -1),\n right = this.getSelectIndex('x', 'right', 1),\n dist = right - left, histo = this.getHisto(), xaxis = this.getAxis('x');\n\n if (dist == 0) return;\n\n // first find minimum\n let min = histo.getBinContent(left + 1);\n for (let indx = left; indx < right; ++indx)\n min = Math.min(min, histo.getBinContent(indx+1));\n if (min > 0) return; // if all points positive, no chance for autoscale\n\n while ((left < right) && (histo.getBinContent(left+1) <= min)) ++left;\n while ((left < right) && (histo.getBinContent(right) <= min)) --right;\n\n // if singular bin\n if ((left === right-1) && (left > 2) && (right < this.nbinsx-2)) {\n --left; ++right;\n }\n\n if ((right - left < dist) && (left < right))\n return this.getFramePainter().zoom(xaxis.GetBinCoord(left), xaxis.GetBinCoord(right));\n }\n\n /** @summary Checks if it makes sense to zoom inside specified axis range */\n canZoomInside(axis,min,max) {\n let xaxis = this.getAxis('x');\n\n if ((axis == 'x') && (xaxis.FindBin(max,0.5) - xaxis.FindBin(min,0) > 1)) return true;\n\n if ((axis == 'y') && (Math.abs(max-min) > Math.abs(this.ymax-this.ymin)*1e-6)) return true;\n\n return false;\n }\n\n /** @summary Call appropriate draw function */\n async callDrawFunc(reason) {\n let main = this.getFramePainter();\n\n if (main && (main.mode3d !== this.options.Mode3D) && !this.isMainPainter())\n this.options.Mode3D = main.mode3d;\n\n return this.options.Mode3D ? this.draw3D(reason) : this.draw2D(reason);\n }\n\n /** @summary Draw in 2d */\n async draw2D(reason) {\n this.clear3DScene();\n\n return this.drawFrameAxes().then(res => {\n return res ? this.drawingBins(reason) : false;\n }).then(res => {\n if (res)\n return this.draw1DBins().then(() => this.addInteractivity());\n }).then(() => this);\n }\n\n /** @summary Draw in 3d */\n async draw3D(reason) {\n console.log('3D drawing is disabled, load ./hist/RH1Painter.mjs');\n return this.draw2D(reason);\n }\n\n /** @summary Readraw histogram */\n async redraw(reason) {\n return this.callDrawFunc(reason);\n }\n\n static async _draw(painter, opt) {\n return ensureRCanvas(painter).then(() => {\n\n painter.setAsMainPainter();\n\n painter.options = { Hist: false, Bar: false, BarStyle: 0,\n Error: false, ErrorKind: -1, errorX: gStyle.fErrorX,\n Zero: false, Mark: false,\n Line: false, Fill: false, Lego: 0, Surf: 0,\n Text: false, TextAngle: 0, TextKind: '', AutoColor: 0,\n BarOffset: 0., BarWidth: 1., BaseLine: false, Mode3D: false };\n\n let d = new DrawOptions(opt);\n if (d.check('R3D_', true))\n painter.options.Render3D = constants.Render3D.fromString(d.part.toLowerCase());\n\n let kind = painter.v7EvalAttr('kind', 'hist'),\n sub = painter.v7EvalAttr('sub', 0),\n has_main = !!painter.getMainPainter(),\n o = painter.options;\n\n o.Text = painter.v7EvalAttr('drawtext', false);\n o.BarOffset = painter.v7EvalAttr('baroffset', 0.);\n o.BarWidth = painter.v7EvalAttr('barwidth', 1.);\n o.second_x = has_main && painter.v7EvalAttr('secondx', false);\n o.second_y = has_main && painter.v7EvalAttr('secondy', false);\n\n switch(kind) {\n case 'bar': o.Bar = true; o.BarStyle = sub; break;\n case 'err': o.Error = true; o.ErrorKind = sub; break;\n case 'p': o.Mark = true; break;\n case 'l': o.Line = true; break;\n case 'lego': o.Lego = sub > 0 ? 10+sub : 12; o.Mode3D = true; break;\n default: o.Hist = true;\n }\n\n painter.scanContent();\n\n return painter.callDrawFunc();\n });\n }\n\n /** @summary draw RH1 object */\n static async draw(dom, histo, opt) {\n return RH1Painter._draw(new RH1Painter(dom, histo), opt);\n }\n\n} // class RH1Painter\n\nexport { RH1Painter };\n","import { settings, gStyle } from '../core.mjs';\nimport { RH1Painter as RH1Painter2D } from '../hist2d/RH1Painter.mjs';\nimport { RAxisPainter } from '../gpad/RAxisPainter.mjs';\nimport { assignFrame3DMethods, drawBinsLego } from './hist3d.mjs';\n\n\nclass RH1Painter extends RH1Painter2D {\n\n /** @summary Draw 1-D histogram in 3D mode */\n draw3D(reason) {\n\n this.mode3d = true;\n\n let main = this.getFramePainter(), // who makes axis drawing\n is_main = this.isMainPainter(), // is main histogram\n zmult = 1 + 2*gStyle.fHistTopMargin,\n pr = Promise.resolve(this);\n\n if (reason == 'resize') {\n if (is_main && main.resize3D()) main.render3D();\n return pr;\n }\n\n this.deleteAttr();\n\n this.scanContent(true); // may be required for axis drawings\n\n if (is_main) {\n assignFrame3DMethods(main);\n pr = main.create3DScene(this.options.Render3D).then(() => {\n main.setAxesRanges(this.getAxis('x'), this.xmin, this.xmax, null, this.ymin, this.ymax, null, 0, 0);\n main.set3DOptions(this.options);\n main.drawXYZ(main.toplevel, RAxisPainter, { use_y_for_z: true, zmult, zoom: settings.Zooming, ndim: 1, draw: true, v7: true });\n });\n }\n\n if (!main.mode3d)\n return pr;\n\n return pr.then(() => this.drawingBins(reason)).then(() => {\n\n // called when bins received from server, must be reentrant\n let main = this.getFramePainter();\n\n drawBinsLego(this, true);\n this.updatePaletteDraw();\n main.render3D();\n main.addKeysHandler();\n return this;\n });\n }\n\n /** @summary draw RH1 object */\n static async draw(dom, histo, opt) {\n return RH1Painter._draw(new RH1Painter(dom, histo), opt);\n }\n\n} // class RH1Painter\n\nexport { RH1Painter };\n\n"],"x_google_ignoreList":[0,1]} \ No newline at end of file diff --git a/docs/61.dbe75c5a8333bdf7.js.map b/docs/61.dbe75c5a8333bdf7.js.map deleted file mode 100644 index 77a7898ef..000000000 --- a/docs/61.dbe75c5a8333bdf7.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"61.dbe75c5a8333bdf7.js","mappings":"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","names":["RH1Painter","RHistPainter","constructor","dom","histo","super","this","wheel_zoomy","scanContent","when_axis_changed","getHisto","nbinsx","extractAxesProperties","hmin","hmin_nz","hmax","hsum","isDisplayItem","fContMin","fContMinPos","fContMax","left","getSelectIndex","right","scan_xleft","scan_xright","value","err","first","i","getBinContent","Math","min","max","stat_entries","ymin_nz","draw_content","abs","ymin","ymax","dy","countStat","cond","xaxis","getAxis","stat_sumw","stat_sumwx","stat_sumwx2","xx","w","xmax","wmax","res","getFramePainter","name","meanx","meany","rmsx","rmsy","integral","entries","GetBinCoord","sqrt","fillStatistic","stat","dostat","data","print_name","print_entries","floor","print_mean","print_rms","print_under","print_over","print_integral","print_skew","print_kurt","clearStat","addText","format","drawBars","handle","funcs","width","height","_this","createG","x1","x2","grx1","grx2","y","gry1","gry2","i1","i2","di","stepi","pmain","bars","barsl","barsr","swap_xy","Number","isFinite","options","BaseLine","scale_ymin","round","gry","logx","grx","logy","BarOffset","BarWidth","BarStyle","fillatt","empty","setSolidColor","draw_g","append","attr","call","func","style","d3_rgb","color","brighter","formatHex","darker","drawFilledErrors","_this2","x","yerr","bins1","bins2","getBinError","push","unshift","kind","ErrorKind","path1","buildSvgPath","path2","path","draw1DBins","_this3","rect","getFrameRect","removeG","createHistDrawAttributes","prepareDraw","extra","only_indexes","getGrFuncs","second_x","second_y","Bar","drawHistBins","_this4","startx","currx","curry","curry_min","curry_max","prevy","prevx","bestimin","bestimax","my","yerr1","yerr2","bincont","binerr","mx1","mx2","midx","text_font","want_tooltip","isBatchMode","settings","lastbin","exclude_zero","Zero","show_errors","Error","show_markers","Mark","show_line","Line","show_text","Text","path_fill","path_err","path_marker","path_line","hints_err","endx","endy","dend","v7EvalAttr","createv7AttMarker","markeratt","size","resetPos","v7EvalFont","align","angle","TextKind","space","setAngle","setSize","startTextDrawing","use_minmax","lw","lineatt","gStyle","draw_markers","draw_bin","besti","lbl","toString","floatToString","drawText","text","latex","length","create","edx","errorX","mmx1","close_path","fill_for_interactive","Hist","h0","gry0","Fill","finishTextDrawing","getBinTooltips","bin","tips","getObjectHint","stepx","cont","xlbl","getAxisBinTip","axisAsText","toPrecision","$baseh","processTooltipEvent","pnt","Mode3D","select","remove","show_rect","midy","getFrameWidth","getFrameHeight","findbin","gapx","l","r","GetBinGrX","GetBinGrY","yy","pnt_x","pnt_y","m","best","dist","touch","nproc","msize","getFullSize","dx","ttrect","title","fTitle","exact","color1","color2","getFillColorAlt","lines","disabled","changed","property","menu","menu_dist","radius","user_info","obj","fillHistContextMenu","add","autoZoom","opts","getSupportedDrawOptions","addDrawMenu","arg","showInspector","decodeOptions","need_fillcol","change","interactiveRedraw","indx","zoom","canZoomInside","axis","FindBin","callDrawFunc","reason","main","_this5","mode3d","isMainPainter","draw3D","draw2D","clear3DScene","_this6","drawFrameAxes","then","drawingBins","addInteractivity","console","log","_this7","redraw","_this8","static","painter","opt","ensureRCanvas","setAsMainPainter","Lego","Surf","TextAngle","AutoColor","d","DrawOptions","check","Render3D","constants","part","toLowerCase","sub","has_main","getMainPainter","o","_draw","RH1Painter2D","is_main","zmult","pr","Promise","resolve","resize3D","render3D","deleteAttr","assignFrame3DMethods","create3DScene","setAxesRanges","xmin","set3DOptions","drawXYZ","toplevel","RAxisPainter","use_y_for_z","ndim","draw","v7","drawBinsLego","updatePaletteDraw","addKeysHandler"],"sourceRoot":"webpack:///","sources":["../node_modules/jsroot/modules/hist2d/RH1Painter.mjs","../node_modules/jsroot/modules/hist/RH1Painter.mjs"],"sourcesContent":["import { gStyle, settings, constants, isBatchMode } from '../core.mjs';\nimport { rgb as d3_rgb } from '../d3.mjs';\nimport { floatToString, DrawOptions, buildSvgPath } from '../base/BasePainter.mjs';\nimport { RHistPainter } from './RHistPainter.mjs';\nimport { ensureRCanvas } from '../gpad/RCanvasPainter.mjs';\n\n/**\n * @summary Painter for RH1 classes\n *\n * @private\n */\n\nclass RH1Painter extends RHistPainter {\n\n /** @summary Constructor\n * @param {object|string} dom - DOM element or id\n * @param {object} histo - histogram object */\n constructor(dom, histo) {\n super(dom, histo);\n this.wheel_zoomy = false;\n }\n\n /** @summary Scan content */\n scanContent(when_axis_changed) {\n // if when_axis_changed === true specified, content will be scanned after axis zoom changed\n\n let histo = this.getHisto();\n if (!histo) return;\n\n if (!this.nbinsx && when_axis_changed) when_axis_changed = false;\n\n if (!when_axis_changed)\n this.extractAxesProperties(1);\n\n let hmin = 0, hmin_nz = 0, hmax = 0, hsum = 0;\n\n if (this.isDisplayItem()) {\n // take min/max values from the display item\n hmin = histo.fContMin;\n hmin_nz = histo.fContMinPos;\n hmax = histo.fContMax;\n hsum = hmax;\n } else {\n\n let left = this.getSelectIndex('x', 'left'),\n right = this.getSelectIndex('x', 'right');\n\n if (when_axis_changed) {\n if ((left === this.scan_xleft) && (right === this.scan_xright)) return;\n }\n\n this.scan_xleft = left;\n this.scan_xright = right;\n\n let first = true, value, err;\n\n for (let i = 0; i < this.nbinsx; ++i) {\n value = histo.getBinContent(i+1);\n hsum += value;\n\n if ((i=right)) continue;\n\n if (value > 0)\n if ((hmin_nz == 0) || (value= hmax) {\n if (hmin == 0) { this.ymin = 0; this.ymax = 1; }\n else if (hmin < 0) { this.ymin = 2 * hmin; this.ymax = 0; }\n else { this.ymin = 0; this.ymax = hmin * 2; }\n } else {\n let dy = (hmax - hmin) * 0.05;\n this.ymin = hmin - dy;\n if ((this.ymin < 0) && (hmin >= 0)) this.ymin = 0;\n this.ymax = hmax + dy;\n }\n }\n }\n\n /** @summary Count statistic */\n countStat(cond) {\n let histo = this.getHisto(), xaxis = this.getAxis('x'),\n left = this.getSelectIndex('x', 'left'),\n right = this.getSelectIndex('x', 'right'),\n stat_sumw = 0, stat_sumwx = 0, stat_sumwx2 = 0, stat_sumwy = 0, stat_sumwy2 = 0,\n i, xx = 0, w = 0, xmax = null, wmax = null,\n fp = this.getFramePainter(),\n res = { name: 'histo', meanx: 0, meany: 0, rmsx: 0, rmsy: 0, integral: 0, entries: this.stat_entries, xmax: 0, wmax: 0 };\n\n for (i = left; i < right; ++i) {\n xx = xaxis.GetBinCoord(i+0.5);\n\n if (cond && !cond(xx)) continue;\n\n w = histo.getBinContent(i + 1);\n\n if ((xmax === null) || (w > wmax)) { xmax = xx; wmax = w; }\n\n stat_sumw += w;\n stat_sumwx += w * xx;\n stat_sumwx2 += w * xx**2;\n }\n\n res.integral = stat_sumw;\n\n if (Math.abs(stat_sumw) > 1e-300) {\n res.meanx = stat_sumwx / stat_sumw;\n res.meany = stat_sumwy / stat_sumw;\n res.rmsx = Math.sqrt(Math.abs(stat_sumwx2 / stat_sumw - res.meanx**2));\n res.rmsy = Math.sqrt(Math.abs(stat_sumwy2 / stat_sumw - res.meany**2));\n }\n\n if (xmax !== null) {\n res.xmax = xmax;\n res.wmax = wmax;\n }\n\n return res;\n }\n\n /** @summary Fill statistic */\n fillStatistic(stat, dostat/*, dofit*/) {\n\n let data = this.countStat(),\n print_name = dostat % 10,\n print_entries = Math.floor(dostat / 10) % 10,\n print_mean = Math.floor(dostat / 100) % 10,\n print_rms = Math.floor(dostat / 1000) % 10,\n print_under = Math.floor(dostat / 10000) % 10,\n print_over = Math.floor(dostat / 100000) % 10,\n print_integral = Math.floor(dostat / 1000000) % 10,\n print_skew = Math.floor(dostat / 10000000) % 10,\n print_kurt = Math.floor(dostat / 100000000) % 10;\n\n // make empty at the beginning\n stat.clearStat();\n\n if (print_name > 0)\n stat.addText(data.name);\n\n if (print_entries > 0)\n stat.addText('Entries = ' + stat.format(data.entries,'entries'));\n\n if (print_mean > 0)\n stat.addText('Mean = ' + stat.format(data.meanx));\n\n if (print_rms > 0)\n stat.addText('Std Dev = ' + stat.format(data.rmsx));\n\n if (print_under > 0)\n stat.addText('Underflow = ' + stat.format(histo.getBinContent(0), 'entries'));\n\n if (print_over > 0)\n stat.addText('Overflow = ' + stat.format(histo.getBinContent(this.nbinsx+1), 'entries'));\n\n if (print_integral > 0)\n stat.addText('Integral = ' + stat.format(data.integral,'entries'));\n\n if (print_skew > 0)\n stat.addText('Skew = ');\n\n if (print_kurt > 0)\n stat.addText('Kurt = ');\n\n return true;\n }\n\n /** @summary Draw histogram as bars */\n async drawBars(handle, funcs, width, height) {\n\n this.createG(true);\n\n let left = handle.i1, right = handle.i2, di = handle.stepi,\n pmain = this.getFramePainter(),\n histo = this.getHisto(), xaxis = this.getAxis('x'),\n i, x1, x2, grx1, grx2, y, gry1, gry2, w,\n bars = '', barsl = '', barsr = '';\n\n gry2 = pmain.swap_xy ? 0 : height;\n if (Number.isFinite(this.options.BaseLine))\n if (this.options.BaseLine >= funcs.scale_ymin)\n gry2 = Math.round(funcs.gry(this.options.BaseLine));\n\n for (i = left; i < right; i += di) {\n x1 = xaxis.GetBinCoord(i);\n x2 = xaxis.GetBinCoord(i+di);\n\n if (funcs.logx && (x2 <= 0)) continue;\n\n grx1 = Math.round(funcs.grx(x1));\n grx2 = Math.round(funcs.grx(x2));\n\n y = histo.getBinContent(i+1);\n if (funcs.logy && (y < funcs.scale_ymin)) continue;\n gry1 = Math.round(funcs.gry(y));\n\n w = grx2 - grx1;\n grx1 += Math.round(this.options.BarOffset*w);\n w = Math.round(this.options.BarWidth*w);\n\n if (pmain.swap_xy)\n bars += `M${gry2},${grx1}h${gry1-gry2}v${w}h${gry2-gry1}z`;\n else\n bars += `M${grx1},${gry1}h${w}v${gry2-gry1}h${-w}z`;\n\n if (this.options.BarStyle > 0) {\n grx2 = grx1 + w;\n w = Math.round(w / 10);\n if (pmain.swap_xy) {\n barsl += `M${gry2},${grx1}h${gry1-gry2}v${w}h${gry2-gry1}z`;\n barsr += `M${gry2},${grx2}h${gry1-gry2}v${-w}h${gry2-gry1}z`;\n } else {\n barsl += `M${grx1},${gry1}h${w}v${gry2-gry1}h${-w}z`;\n barsr += `M${grx2},${gry1}h${-w}v${gry2-gry1}h${w}z`;\n }\n }\n }\n\n if (this.fillatt.empty()) this.fillatt.setSolidColor('blue');\n\n if (bars)\n this.draw_g.append('svg:path')\n .attr('d', bars)\n .call(this.fillatt.func);\n\n if (barsl)\n this.draw_g.append('svg:path')\n .attr('d', barsl)\n .call(this.fillatt.func)\n .style('fill', d3_rgb(this.fillatt.color).brighter(0.5).formatHex());\n\n if (barsr)\n this.draw_g.append('svg:path')\n .attr('d', barsr)\n .call(this.fillatt.func)\n .style('fill', d3_rgb(this.fillatt.color).darker(0.5).formatHex());\n\n return true;\n }\n\n /** @summary Draw histogram as filled errors */\n async drawFilledErrors(handle, funcs /*, width, height*/) {\n this.createG(true);\n\n let left = handle.i1, right = handle.i2, di = handle.stepi,\n histo = this.getHisto(), xaxis = this.getAxis('x'),\n i, x, grx, y, yerr, gry1, gry2,\n bins1 = [], bins2 = [];\n\n for (i = left; i < right; i += di) {\n x = xaxis.GetBinCoord(i+0.5);\n if (funcs.logx && (x <= 0)) continue;\n grx = Math.round(funcs.grx(x));\n\n y = histo.getBinContent(i+1);\n yerr = histo.getBinError(i+1);\n if (funcs.logy && (y-yerr < funcs.scale_ymin)) continue;\n\n gry1 = Math.round(funcs.gry(y + yerr));\n gry2 = Math.round(funcs.gry(y - yerr));\n\n bins1.push({grx: grx, gry: gry1});\n bins2.unshift({grx: grx, gry: gry2});\n }\n\n let kind = (this.options.ErrorKind === 4) ? 'bezier' : 'line',\n path1 = buildSvgPath(kind, bins1),\n path2 = buildSvgPath('L'+kind, bins2);\n\n if (this.fillatt.empty()) this.fillatt.setSolidColor('blue');\n\n this.draw_g.append('svg:path')\n .attr('d', path1.path + path2.path + 'Z')\n .call(this.fillatt.func);\n\n return true;\n }\n\n /** @summary Draw 1D histogram as SVG */\n async draw1DBins() {\n\n let pmain = this.getFramePainter(),\n rect = pmain.getFrameRect();\n\n if (!this.draw_content || (rect.width <= 0) || (rect.height <= 0)) {\n this.removeG()\n return false;\n }\n\n this.createHistDrawAttributes();\n\n let handle = this.prepareDraw({ extra: 1, only_indexes: true }),\n funcs = pmain.getGrFuncs(this.options.second_x, this.options.second_y);\n\n if (this.options.Bar)\n return this.drawBars(handle, funcs, rect.width, rect.height);\n\n if ((this.options.ErrorKind === 3) || (this.options.ErrorKind === 4))\n return this.drawFilledErrors(handle, funcs, rect.width, rect.height);\n\n return this.drawHistBins(handle, funcs, rect.width, rect.height);\n }\n\n /** @summary Draw histogram bins */\n async drawHistBins(handle, funcs, width, height) {\n this.createG(true);\n\n let options = this.options,\n left = handle.i1,\n right = handle.i2,\n di = handle.stepi,\n histo = this.getHisto(),\n want_tooltip = !isBatchMode() && settings.Tooltip,\n xaxis = this.getAxis('x'),\n res = '', lastbin = false,\n startx, currx, curry, x, grx, y, gry, curry_min, curry_max, prevy, prevx, i, bestimin, bestimax,\n exclude_zero = !options.Zero,\n show_errors = options.Error,\n show_markers = options.Mark,\n show_line = options.Line,\n show_text = options.Text,\n path_fill = null, path_err = null, path_marker = null, path_line = null,\n hints_err = null,\n endx = '', endy = '', dend = 0, my, yerr1, yerr2, bincont, binerr, mx1, mx2, midx,\n text_font;\n\n if (show_errors && !show_markers && (this.v7EvalAttr('marker_style',1) > 1))\n show_markers = true;\n\n if (options.ErrorKind === 2) {\n if (this.fillatt.empty()) show_markers = true;\n else path_fill = '';\n } else if (options.Error) {\n path_err = '';\n hints_err = want_tooltip ? '' : null;\n }\n\n if (show_line) path_line = '';\n\n if (show_markers) {\n // draw markers also when e2 option was specified\n this.createv7AttMarker();\n if (this.markeratt.size > 0) {\n // simply use relative move from point, can optimize in the future\n path_marker = '';\n this.markeratt.resetPos();\n } else {\n show_markers = false;\n }\n }\n\n if (show_text) {\n text_font = this.v7EvalFont('text', { size: 20, color: 'black', align: 22 });\n\n if (!text_font.angle && !options.TextKind) {\n let space = width / (right - left + 1);\n if (space < 3 * text_font.size) {\n text_font.setAngle(270);\n text_font.setSize(Math.round(space*0.7));\n }\n }\n\n this.startTextDrawing(text_font, 'font');\n }\n\n // if there are too many points, exclude many vertical drawings at the same X position\n // instead define min and max value and made min-max drawing\n let use_minmax = ((right-left) > 3*width);\n\n if (options.ErrorKind === 1) {\n let lw = this.lineatt.width + gStyle.fEndErrorSize;\n endx = `m0,${lw}v${-2*lw}m0,${lw}`;\n endy = `m${lw},0h${-2*lw}m${lw},0`;\n dend = Math.floor((this.lineatt.width-1)/2);\n }\n\n let draw_markers = show_errors || show_markers;\n\n if (draw_markers || show_text || show_line) use_minmax = true;\n\n let draw_bin = besti => {\n bincont = histo.getBinContent(besti+1);\n if (!exclude_zero || (bincont !== 0)) {\n mx1 = Math.round(funcs.grx(xaxis.GetBinCoord(besti)));\n mx2 = Math.round(funcs.grx(xaxis.GetBinCoord(besti+di)));\n midx = Math.round((mx1+mx2)/2);\n my = Math.round(funcs.gry(bincont));\n yerr1 = yerr2 = 20;\n if (show_errors) {\n binerr = histo.getBinError(besti+1);\n yerr1 = Math.round(my - funcs.gry(bincont + binerr)); // up\n yerr2 = Math.round(funcs.gry(bincont - binerr) - my); // down\n }\n\n if (show_text && (bincont !== 0)) {\n let lbl = (bincont === Math.round(bincont)) ? bincont.toString() : floatToString(bincont, gStyle.fPaintTextFormat);\n\n if (text_font.angle)\n this.drawText({ align: 12, x: midx, y: Math.round(my - 2 - text_font.size / 5), text: lbl, latex: 0 });\n else\n this.drawText({ x: Math.round(mx1 + (mx2 - mx1) * 0.1), y: Math.round(my - 2 - text_font.size), width: Math.round((mx2 - mx1) * 0.8), height: text_font.size, text: lbl, latex: 0 });\n }\n\n if (show_line && (path_line !== null))\n path_line += ((path_line.length === 0) ? 'M' : 'L') + midx + ',' + my;\n\n if (draw_markers) {\n if ((my >= -yerr1) && (my <= height + yerr2)) {\n if (path_fill !== null)\n path_fill += `M${mx1},${my-yerr1}h${mx2-mx1}v${yerr1+yerr2+1}h${mx1-mx2}z`;\n if (path_marker !== null)\n path_marker += this.markeratt.create(midx, my);\n if (path_err !== null) {\n let edx = 5;\n if (this.options.errorX > 0) {\n edx = Math.round((mx2-mx1)*this.options.errorX);\n let mmx1 = midx - edx, mmx2 = midx + edx;\n path_err += `M${mmx1+dend},${my}${endx}h${mmx2-mmx1-2*dend}${endx}`;\n }\n path_err += `M${midx},${my-yerr1+dend}${endy}v${yerr1+yerr2-2*dend}${endy}`;\n if (hints_err !== null)\n hints_err += `M${midx-edx},${my-yerr1}h${2*edx}v${yerr1+yerr2}h${-2*edx}z`;\n }\n }\n }\n }\n };\n\n for (i = left; i <= right; i += di) {\n\n x = xaxis.GetBinCoord(i);\n\n if (funcs.logx && (x <= 0)) continue;\n\n grx = Math.round(funcs.grx(x));\n\n lastbin = (i > right - di);\n\n if (lastbin && (left < right)) {\n gry = curry;\n } else {\n y = histo.getBinContent(i+1);\n gry = Math.round(funcs.gry(y));\n }\n\n if (res.length === 0) {\n bestimin = bestimax = i;\n prevx = startx = currx = grx;\n prevy = curry_min = curry_max = curry = gry;\n res = 'M'+currx+','+curry;\n } else\n if (use_minmax) {\n if ((grx === currx) && !lastbin) {\n if (gry < curry_min) bestimax = i; else\n if (gry > curry_max) bestimin = i;\n curry_min = Math.min(curry_min, gry);\n curry_max = Math.max(curry_max, gry);\n curry = gry;\n } else {\n\n if (draw_markers || show_text || show_line) {\n if (bestimin === bestimax) { draw_bin(bestimin); } else\n if (bestimin < bestimax) { draw_bin(bestimin); draw_bin(bestimax); } else {\n draw_bin(bestimax); draw_bin(bestimin);\n }\n }\n\n // when several points as same X differs, need complete logic\n if (!draw_markers && ((curry_min !== curry_max) || (prevy !== curry_min))) {\n\n if (prevx !== currx)\n res += 'h'+(currx-prevx);\n\n if (curry === curry_min) {\n if (curry_max !== prevy)\n res += 'v' + (curry_max - prevy);\n if (curry_min !== curry_max)\n res += 'v' + (curry_min - curry_max);\n } else {\n if (curry_min !== prevy)\n res += 'v' + (curry_min - prevy);\n if (curry_max !== curry_min)\n res += 'v' + (curry_max - curry_min);\n if (curry !== curry_max)\n res += 'v' + (curry - curry_max);\n }\n\n prevx = currx;\n prevy = curry;\n }\n\n if (lastbin && (prevx !== grx))\n res += 'h'+(grx-prevx);\n\n bestimin = bestimax = i;\n curry_min = curry_max = curry = gry;\n currx = grx;\n }\n } else\n if ((gry !== curry) || lastbin) {\n if (grx !== currx) res += 'h'+(grx-currx);\n if (gry !== curry) res += 'v'+(gry-curry);\n curry = gry;\n currx = grx;\n }\n }\n\n let close_path = '',\n fill_for_interactive = !isBatchMode() && this.fillatt.empty() && options.Hist && settings.Tooltip && !draw_markers && !show_line;\n if (!this.fillatt.empty() || fill_for_interactive) {\n let h0 = height + 3;\n if (fill_for_interactive) {\n let gry0 = Math.round(funcs.gry(0));\n if (gry0 <= 0)\n h0 = -3;\n else if (gry0 < height)\n h0 = gry0;\n }\n close_path = `L${currx},${h0}H${startx}Z`;\n if (res) res += close_path;\n }\n\n if (draw_markers || show_line) {\n if (path_fill)\n this.draw_g.append('svg:path')\n .attr('d', path_fill)\n .call(this.fillatt.func);\n\n if (path_err)\n this.draw_g.append('svg:path')\n .attr('d', path_err)\n .call(this.lineatt.func);\n\n if (hints_err)\n this.draw_g.append('svg:path')\n .attr('d', hints_err)\n .style('fill', 'none')\n .style('pointer-events', isBatchMode() ? null : 'visibleFill');\n\n if (path_line) {\n if (!this.fillatt.empty())\n this.draw_g.append('svg:path')\n .attr('d', options.Fill ? (path_line + close_path) : res)\n .call(this.fillatt.func);\n\n this.draw_g.append('svg:path')\n .attr('d', path_line)\n .style('fill', 'none')\n .call(this.lineatt.func);\n }\n\n if (path_marker)\n this.draw_g.append('svg:path')\n .attr('d', path_marker)\n .call(this.markeratt.func);\n\n } else if (res && options.Hist) {\n this.draw_g.append('svg:path')\n .attr('d', res)\n .style('stroke-linejoin','miter')\n .call(this.lineatt.func)\n .call(this.fillatt.func);\n }\n\n return show_text ? this.finishTextDrawing() : true;\n }\n\n /** @summary Provide text information (tooltips) for histogram bin */\n getBinTooltips(bin) {\n let tips = [],\n name = this.getObjectHint(),\n pmain = this.getFramePainter(),\n histo = this.getHisto(),\n xaxis = this.getAxis('x'),\n di = this.isDisplayItem() ? histo.stepx : 1,\n x1 = xaxis.GetBinCoord(bin),\n x2 = xaxis.GetBinCoord(bin+di),\n cont = histo.getBinContent(bin+1),\n xlbl = this.getAxisBinTip('x', bin, di);\n\n if (name) tips.push(name);\n\n if (this.options.Error || this.options.Mark) {\n tips.push('x = ' + xlbl, 'y = ' + pmain.axisAsText('y', cont));\n if (this.options.Error) {\n if (xlbl[0] == '[') tips.push('error x = ' + ((x2 - x1) / 2).toPrecision(4));\n tips.push('error y = ' + histo.getBinError(bin + 1).toPrecision(4));\n }\n } else {\n tips.push(`bin = ${bin+1}`);\n tips.push('x = ' + xlbl);\n if (histo['$baseh']) cont -= histo['$baseh'].getBinContent(bin+1);\n let lbl = 'entries = ' + (di > 1 ? '~' : '');\n if (cont === Math.round(cont))\n tips.push(lbl + cont);\n else\n tips.push(lbl + floatToString(cont, gStyle.fStatFormat));\n }\n\n return tips;\n }\n\n /** @summary Process tooltip event */\n processTooltipEvent(pnt) {\n if (!pnt || !this.draw_content || this.options.Mode3D || !this.draw_g) {\n if (this.draw_g)\n this.draw_g.select('.tooltip_bin').remove();\n return null;\n }\n\n let pmain = this.getFramePainter(),\n funcs = pmain.getGrFuncs(this.options.second_x, this.options.second_y),\n width = pmain.getFrameWidth(),\n height = pmain.getFrameHeight(),\n histo = this.getHisto(), xaxis = this.getAxis('x'),\n findbin = null, show_rect,\n grx1, midx, grx2, gry1, midy, gry2, gapx = 2,\n left = this.getSelectIndex('x', 'left', -1),\n right = this.getSelectIndex('x', 'right', 2),\n l = left, r = right;\n\n function GetBinGrX(i) {\n let xx = xaxis.GetBinCoord(i);\n return (funcs.logx && (xx <= 0)) ? null : funcs.grx(xx);\n }\n\n function GetBinGrY(i) {\n let yy = histo.getBinContent(i + 1);\n if (funcs.logy && (yy < funcs.scale_ymin))\n return funcs.swap_xy ? -1000 : 10*height;\n return Math.round(funcs.gry(yy));\n }\n\n let pnt_x = funcs.swap_xy ? pnt.y : pnt.x,\n pnt_y = funcs.swap_xy ? pnt.x : pnt.y;\n\n while (l < r-1) {\n let m = Math.round((l+r)*0.5),\n xx = GetBinGrX(m);\n if ((xx === null) || (xx < pnt_x - 0.5)) {\n if (funcs.swap_xy) r = m; else l = m;\n } else if (xx > pnt_x + 0.5) {\n if (funcs.swap_xy) l = m; else r = m;\n } else { l++; r--; }\n }\n\n findbin = r = l;\n grx1 = GetBinGrX(findbin);\n\n if (funcs.swap_xy) {\n while ((l>left) && (GetBinGrX(l-1) < grx1 + 2)) --l;\n while ((r grx1 - 2)) ++r;\n } else {\n while ((l>left) && (GetBinGrX(l-1) > grx1 - 2)) --l;\n while ((r height/10)\n findbin = Math.round(l + (r-l) / height * pnt_y);\n\n grx1 = GetBinGrX(findbin);\n }\n\n grx1 = Math.round(grx1);\n grx2 = Math.round(GetBinGrX(findbin+1));\n\n if (this.options.Bar) {\n let w = grx2 - grx1;\n grx1 += Math.round(this.options.BarOffset*w);\n grx2 = grx1 + Math.round(this.options.BarWidth*w);\n }\n\n if (grx1 > grx2)\n [grx1, grx2] = [grx2, grx1];\n\n midx = Math.round((grx1 + grx2)/2);\n\n midy = gry1 = gry2 = GetBinGrY(findbin);\n\n if (this.options.Bar) {\n show_rect = true;\n\n gapx = 0;\n\n gry1 = Math.round(funcs.gry(((this.options.BaseLine!==false) && (this.options.BaseLine > funcs.scale_ymin)) ? this.options.BaseLine : funcs.scale_ymin));\n\n if (gry1 > gry2)\n [gry1, gry2] = [gry2, gry1];\n\n if (!pnt.touch && (pnt.nproc === 1))\n if ((pnt_y < gry1) || (pnt_y > gry2)) findbin = null;\n\n } else if (this.options.Error || this.options.Mark) {\n\n show_rect = true;\n\n let msize = 3;\n if (this.markeratt) msize = Math.max(msize, this.markeratt.getFullSize());\n\n if (this.options.Error) {\n let cont = histo.getBinContent(findbin+1),\n binerr = histo.getBinError(findbin+1);\n\n gry1 = Math.round(funcs.gry(cont + binerr)); // up\n gry2 = Math.round(funcs.gry(cont - binerr)); // down\n\n let dx = (grx2-grx1)*this.options.errorX;\n grx1 = Math.round(midx - dx);\n grx2 = Math.round(midx + dx);\n }\n\n // show at least 6 pixels as tooltip rect\n if (grx2 - grx1 < 2*msize) { grx1 = midx-msize; grx2 = midx+msize; }\n\n gry1 = Math.min(gry1, midy - msize);\n gry2 = Math.max(gry2, midy + msize);\n\n if (!pnt.touch && (pnt.nproc === 1))\n if ((pnt_ygry2)) findbin = null;\n\n } else if (this.options.Line) {\n\n show_rect = false;\n\n } else {\n\n // if histogram alone, use old-style with rects\n // if there are too many points at pixel, use circle\n show_rect = (pnt.nproc === 1) && (right-left < width);\n\n if (show_rect) {\n gry2 = height;\n\n if (!this.fillatt.empty()) {\n gry2 = Math.min(height, Math.max(0, Math.round(funcs.gry(0))));\n if (gry2 < gry1)\n [gry1, gry2] = [gry2, gry1];\n }\n\n // for mouse events pointer should be between y1 and y2\n if (((pnt.y < gry1) || (pnt.y > gry2)) && !pnt.touch) findbin = null;\n }\n }\n\n if (findbin !== null) {\n // if bin on boundary found, check that x position is ok\n if ((findbin === left) && (grx1 > pnt_x + gapx)) findbin = null; else\n if ((findbin === right-1) && (grx2 < pnt_x - gapx)) findbin = null; else\n // if bars option used check that bar is not match\n if ((pnt_x < grx1 - gapx) || (pnt_x > grx2 + gapx)) findbin = null; else\n // exclude empty bin if empty bins suppressed\n if (!this.options.Zero && (histo.getBinContent(findbin+1) === 0)) findbin = null;\n }\n\n let ttrect = this.draw_g.select('.tooltip_bin');\n\n if ((findbin === null) || ((gry2 <= 0) || (gry1 >= height))) {\n ttrect.remove();\n return null;\n }\n\n let res = { name: 'histo', title: histo.fTitle,\n x: midx, y: midy, exact: true,\n color1: this.lineatt ? this.lineatt.color : 'green',\n color2: this.fillatt ? this.fillatt.getFillColorAlt('blue') : 'blue',\n lines: this.getBinTooltips(findbin) };\n\n if (pnt.disabled) {\n // case when tooltip should not highlight bin\n\n ttrect.remove();\n res.changed = true;\n } else if (show_rect) {\n\n if (ttrect.empty())\n ttrect = this.draw_g.append('svg:rect')\n .attr('class','tooltip_bin h1bin')\n .style('pointer-events','none');\n\n res.changed = ttrect.property('current_bin') !== findbin;\n\n if (res.changed)\n ttrect.attr('x', pmain.swap_xy ? gry1 : grx1)\n .attr('width', pmain.swap_xy ? gry2-gry1 : grx2-grx1)\n .attr('y', pmain.swap_xy ? grx1 : gry1)\n .attr('height', pmain.swap_xy ? grx2-grx1 : gry2-gry1)\n .style('opacity', '0.3')\n .property('current_bin', findbin);\n\n res.exact = (Math.abs(midy - pnt_y) <= 5) || ((pnt_y>=gry1) && (pnt_y<=gry2));\n\n res.menu = res.exact; // one could show context menu\n // distance to middle point, use to decide which menu to activate\n res.menu_dist = Math.sqrt((midx-pnt_x)**2 + (midy-pnt_y)**2);\n\n } else {\n let radius = this.lineatt.width + 3;\n\n if (ttrect.empty())\n ttrect = this.draw_g.append('svg:circle')\n .attr('class','tooltip_bin')\n .style('pointer-events','none')\n .attr('r', radius)\n .call(this.lineatt.func)\n .call(this.fillatt.func);\n\n res.exact = (Math.abs(midx - pnt.x) <= radius) && (Math.abs(midy - pnt.y) <= radius);\n\n res.menu = res.exact; // show menu only when mouse pointer exactly over the histogram\n res.menu_dist = Math.sqrt((midx-pnt.x)**2 + (midy-pnt.y)**2);\n\n res.changed = ttrect.property('current_bin') !== findbin;\n\n if (res.changed)\n ttrect.attr('cx', midx)\n .attr('cy', midy)\n .property('current_bin', findbin);\n }\n\n if (res.changed)\n res.user_info = { obj: histo, name: 'histo',\n bin: findbin, cont: histo.getBinContent(findbin+1),\n grx: midx, gry: midy };\n\n return res;\n }\n\n /** @summary Fill histogram context menu */\n fillHistContextMenu(menu) {\n\n menu.add('Auto zoom-in', () => this.autoZoom());\n\n let opts = this.getSupportedDrawOptions();\n\n menu.addDrawMenu('Draw with', opts, arg => {\n if (arg === 'inspect')\n return this.showInspector();\n\n this.decodeOptions(arg); // obsolete, should be implemented differently\n\n if (this.options.need_fillcol && this.fillatt && this.fillatt.empty())\n this.fillatt.change(5,1001);\n\n // redraw all objects\n this.interactiveRedraw('pad', 'drawopt');\n });\n }\n\n /** @summary Perform automatic zoom inside non-zero region of histogram */\n autoZoom() {\n let left = this.getSelectIndex('x', 'left', -1),\n right = this.getSelectIndex('x', 'right', 1),\n dist = right - left, histo = this.getHisto(), xaxis = this.getAxis('x');\n\n if (dist == 0) return;\n\n // first find minimum\n let min = histo.getBinContent(left + 1);\n for (let indx = left; indx < right; ++indx)\n min = Math.min(min, histo.getBinContent(indx+1));\n if (min > 0) return; // if all points positive, no chance for autoscale\n\n while ((left < right) && (histo.getBinContent(left+1) <= min)) ++left;\n while ((left < right) && (histo.getBinContent(right) <= min)) --right;\n\n // if singular bin\n if ((left === right-1) && (left > 2) && (right < this.nbinsx-2)) {\n --left; ++right;\n }\n\n if ((right - left < dist) && (left < right))\n return this.getFramePainter().zoom(xaxis.GetBinCoord(left), xaxis.GetBinCoord(right));\n }\n\n /** @summary Checks if it makes sense to zoom inside specified axis range */\n canZoomInside(axis,min,max) {\n let xaxis = this.getAxis('x');\n\n if ((axis == 'x') && (xaxis.FindBin(max,0.5) - xaxis.FindBin(min,0) > 1)) return true;\n\n if ((axis == 'y') && (Math.abs(max-min) > Math.abs(this.ymax-this.ymin)*1e-6)) return true;\n\n return false;\n }\n\n /** @summary Call appropriate draw function */\n async callDrawFunc(reason) {\n let main = this.getFramePainter();\n\n if (main && (main.mode3d !== this.options.Mode3D) && !this.isMainPainter())\n this.options.Mode3D = main.mode3d;\n\n return this.options.Mode3D ? this.draw3D(reason) : this.draw2D(reason);\n }\n\n /** @summary Draw in 2d */\n async draw2D(reason) {\n this.clear3DScene();\n\n return this.drawFrameAxes().then(res => {\n return res ? this.drawingBins(reason) : false;\n }).then(res => {\n if (res)\n return this.draw1DBins().then(() => this.addInteractivity());\n }).then(() => this);\n }\n\n /** @summary Draw in 3d */\n async draw3D(reason) {\n console.log('3D drawing is disabled, load ./hist/RH1Painter.mjs');\n return this.draw2D(reason);\n }\n\n /** @summary Readraw histogram */\n async redraw(reason) {\n return this.callDrawFunc(reason);\n }\n\n static async _draw(painter, opt) {\n return ensureRCanvas(painter).then(() => {\n\n painter.setAsMainPainter();\n\n painter.options = { Hist: false, Bar: false, BarStyle: 0,\n Error: false, ErrorKind: -1, errorX: gStyle.fErrorX,\n Zero: false, Mark: false,\n Line: false, Fill: false, Lego: 0, Surf: 0,\n Text: false, TextAngle: 0, TextKind: '', AutoColor: 0,\n BarOffset: 0., BarWidth: 1., BaseLine: false, Mode3D: false };\n\n let d = new DrawOptions(opt);\n if (d.check('R3D_', true))\n painter.options.Render3D = constants.Render3D.fromString(d.part.toLowerCase());\n\n let kind = painter.v7EvalAttr('kind', 'hist'),\n sub = painter.v7EvalAttr('sub', 0),\n has_main = !!painter.getMainPainter(),\n o = painter.options;\n\n o.Text = painter.v7EvalAttr('drawtext', false);\n o.BarOffset = painter.v7EvalAttr('baroffset', 0.);\n o.BarWidth = painter.v7EvalAttr('barwidth', 1.);\n o.second_x = has_main && painter.v7EvalAttr('secondx', false);\n o.second_y = has_main && painter.v7EvalAttr('secondy', false);\n\n switch(kind) {\n case 'bar': o.Bar = true; o.BarStyle = sub; break;\n case 'err': o.Error = true; o.ErrorKind = sub; break;\n case 'p': o.Mark = true; break;\n case 'l': o.Line = true; break;\n case 'lego': o.Lego = sub > 0 ? 10+sub : 12; o.Mode3D = true; break;\n default: o.Hist = true;\n }\n\n painter.scanContent();\n\n return painter.callDrawFunc();\n });\n }\n\n /** @summary draw RH1 object */\n static async draw(dom, histo, opt) {\n return RH1Painter._draw(new RH1Painter(dom, histo), opt);\n }\n\n} // class RH1Painter\n\nexport { RH1Painter };\n","import { settings, gStyle } from '../core.mjs';\nimport { RH1Painter as RH1Painter2D } from '../hist2d/RH1Painter.mjs';\nimport { RAxisPainter } from '../gpad/RAxisPainter.mjs';\nimport { assignFrame3DMethods, drawBinsLego } from './hist3d.mjs';\n\n\nclass RH1Painter extends RH1Painter2D {\n\n /** @summary Draw 1-D histogram in 3D mode */\n draw3D(reason) {\n\n this.mode3d = true;\n\n let main = this.getFramePainter(), // who makes axis drawing\n is_main = this.isMainPainter(), // is main histogram\n zmult = 1 + 2*gStyle.fHistTopMargin,\n pr = Promise.resolve(this);\n\n if (reason == 'resize') {\n if (is_main && main.resize3D()) main.render3D();\n return pr;\n }\n\n this.deleteAttr();\n\n this.scanContent(true); // may be required for axis drawings\n\n if (is_main) {\n assignFrame3DMethods(main);\n pr = main.create3DScene(this.options.Render3D).then(() => {\n main.setAxesRanges(this.getAxis('x'), this.xmin, this.xmax, null, this.ymin, this.ymax, null, 0, 0);\n main.set3DOptions(this.options);\n main.drawXYZ(main.toplevel, RAxisPainter, { use_y_for_z: true, zmult, zoom: settings.Zooming, ndim: 1, draw: true, v7: true });\n });\n }\n\n if (!main.mode3d)\n return pr;\n\n return pr.then(() => this.drawingBins(reason)).then(() => {\n\n // called when bins received from server, must be reentrant\n let main = this.getFramePainter();\n\n drawBinsLego(this, true);\n this.updatePaletteDraw();\n main.render3D();\n main.addKeysHandler();\n return this;\n });\n }\n\n /** @summary draw RH1 object */\n static async draw(dom, histo, opt) {\n return RH1Painter._draw(new RH1Painter(dom, histo), opt);\n }\n\n} // class RH1Painter\n\nexport { RH1Painter };\n\n"],"x_google_ignoreList":[0,1]} \ No newline at end of file diff --git a/docs/625.b2df831fc47ab055.js b/docs/625.6bc1736806a42e1d.js similarity index 56% rename from docs/625.b2df831fc47ab055.js rename to docs/625.6bc1736806a42e1d.js index 42c2a41fc..cc4aed9c0 100644 --- a/docs/625.b2df831fc47ab055.js +++ b/docs/625.6bc1736806a42e1d.js @@ -1,2 +1,2 @@ -"use strict";(self.webpackChunkphoenix_app=self.webpackChunkphoenix_app||[]).push([[625],{3625:(L,S,v)=>{v.r(S),v.d(S,{RHistStatsPainter:()=>b,RLegendPainter:()=>T,RPavePainter:()=>k,RPaveTextPainter:()=>y});var c=v(4788),x=v(9542),C=v(3675),R=v(3029),E=v(9056),O=v(6116);class k extends R.p{drawContent(){var t=this;return(0,c.Z)(function*(){return t})()}drawPave(){var t=this;return(0,c.Z)(function*(){let e=t.getPadPainter().getPadRect(),i=t.getFramePainter();t.onFrame=i&&t.v7EvalAttr("onFrame",!0),t.corner=t.v7EvalAttr("corner",2);let a=t.v7EvalAttr("visible",!0),r=t.v7EvalLength("offsetX",e.width,.02),o=t.v7EvalLength("offsetY",e.height,.02),n=t.v7EvalLength("width",e.width,.3),s=t.v7EvalLength("height",e.height,.3);if(t.createG(),t.draw_g.classed("most_upper_primitives",!0),!a)return t;t.createv7AttLine("border_"),t.createv7AttFill();let d=0,f=0,_=t.onFrame?i.getFrameRect():e;switch(t.corner){case 1:d=_.x+r,f=_.y+o;break;case 3:d=_.x+r,f=_.y+_.height-o-s;break;case 4:d=_.x+_.width-r-n,f=_.y+_.height-o-s;break;default:d=_.x+_.width-r-n,f=_.y+o}return t.draw_g.attr("transform",`translate(${d},${f})`),t.draw_g.append("svg:rect").attr("x",0).attr("width",n).attr("y",0).attr("height",s).call(t.lineatt.func).call(t.fillatt.func),t.pave_width=n,t.pave_height=s,t.drawContent().then(()=>((0,x.isBatchMode)()||(x.settings.ContextMenu&&t.paveContextMenu&&t.draw_g.on("contextmenu",h=>t.paveContextMenu(h)),(0,O.uI)(t,{x:d,y:f,width:n,height:s,minwidth:20,minheight:20,redraw:h=>t.sizeChanged(h)})),t))})()}sizeChanged(t){this.pave_width=t.width,this.pave_height=t.height;let e=t.x,i=t.y,a=this.getPadPainter().getPadRect(),r=this.onFrame?this.getFramePainter().getFrameRect():a,o=0,n=0,s={};switch(this.corner){case 1:o=e-r.x,n=i-r.y;break;case 3:o=e-r.x,n=r.y+r.height-i-this.pave_height;break;case 4:o=r.x+r.width-e-this.pave_width,n=r.y+r.height-i-this.pave_height;break;default:o=r.x+r.width-e-this.pave_width,n=i-r.y}this.v7AttrChange(s,"offsetX",o/a.width),this.v7AttrChange(s,"offsetY",n/a.height),this.v7AttrChange(s,"width",this.pave_width/a.width),this.v7AttrChange(s,"height",this.pave_height/a.height),this.v7SendAttrChanges(s,!1),this.draw_g.select("rect").attr("width",this.pave_width).attr("height",this.pave_height),this.drawContent()}redraw(){var t=this;return(0,c.Z)(function*(){return t.drawPave()})()}static draw(t,e,i){return(0,c.Z)(function*(){let a=new k(t,e,i,"pave");return(0,E.ensureRCanvas)(a,!1).then(()=>a.drawPave())})()}}class T extends k{drawContent(){var t=this;return(0,c.Z)(function*(){let e=t.getObject(),i=t.v7EvalFont("text",{size:12,color:"black",align:22}),a=t.pave_width,r=t.pave_height,o=e.fEntries.length,n=t.getPadPainter();if(e.fTitle&&o++,!o||!n)return t;let s=r/o,d=0,f=.02*a;i.setSize(r/(1.2*o)),t.startTextDrawing(i,"font"),e.fTitle&&(t.drawText({latex:1,width:a-2*f,height:s,x:f,y:d,text:e.fTitle}),d+=s);for(let _=0;_a.drawPave())})()}}class y extends k{drawContent(){let t=this.getObject(),e=this.v7EvalFont("text",{size:12,color:"black",align:22}),i=this.pave_width,a=this.pave_height,r=t.fText.length;if(!r)return;let o=a/r,n=0,s=.02*i;e.setSize(a/(1.2*r)),this.startTextDrawing(e,"font");for(let d=0;da.drawPave())})()}}class b extends k{clearStat(){this.stats_lines=[]}addText(t){this.stats_lines.push(t)}updateStatistic(t){this.stats_lines=t.lines,this.drawStatistic(this.stats_lines)}fillStatistic(){if(this.getPadPainter()?._fast_drawing)return!1;let e=this.getObject();if(void 0!==e.fLines)return this.stats_lines=e.fLines,delete e.fLines,!0;if(this.v7OfflineMode()){let i=this.getMainPainter();return!!(0,x.isFunc)(i?.fillStatistic)&&i.fillStatistic(this,x.gStyle.fOptStat,x.gStyle.fOptFit)}return void 0!==this.stats_lines}format(t,e){switch(e||(e="stat"),e){case"stat":e=x.gStyle.fStatFormat;break;case"fit":e=x.gStyle.fFitFormat;break;case"entries":if(Math.abs(t)<1e9&&Math.round(t)==t)return t.toFixed(0);e="14.7g";break;case"last":e=this.lastformat}let i=(0,C.Ee)(t,e||"6.4g",!0);return this.lastformat=i[1],i[0]}drawContent(){var t=this;return(0,c.Z)(function*(){return t.fillStatistic()?t.drawStatistic(t.stats_lines):t})()}changeMask(t){let e=this.getObject(),i=1<{let i=this.getObject(),a=this.changeMask.bind(this);e.add("header: StatBox");for(let r=0;re.show())}drawStatistic(t){var e=this;return(0,c.Z)(function*(){let i=e.v7EvalFont("stats_text",{size:12,color:"black",align:22}),a=0,r=0,o=0,n=e.pave_width,s=e.pave_height;if(!t)return e;let d=t.length;for(let l=0;l0&&(o=Math.max(o,P.length)),0==l||P.indexOf("|")<0)continue;0===a&&(a=l);let p=P.split("|");p.length>r&&(r=p.length)}let f=s/d,_=!1,h=.02*n,g=e.draw_g.select(".statlines");if(g.empty()?g=e.draw_g.append("svg:g").attr("class","statlines"):g.selectAll("*").remove(),i.setSize(s/(1.2*d)),e.startTextDrawing(i,"font",g),1==d)e.drawText({width:n,height:s,text:t[0],latex:1,draw_g:g});else for(let l=0;l=a){let p=t[l].split("|");for(let M=0;M0&&r>1){for(let l=a;le.updateStatistic(a))}return e.drawPave()})()}static draw(t,e,i){return(0,c.Z)(function*(){let a=new b(t,e,i,e);return(0,E.ensureRCanvas)(a,!1).then(()=>a.drawPave())})()}}}}]); -//# sourceMappingURL=625.b2df831fc47ab055.js.map \ No newline at end of file +"use strict";(self.webpackChunkphoenix_app=self.webpackChunkphoenix_app||[]).push([[625],{3625:(L,S,v)=>{v.r(S),v.d(S,{RHistStatsPainter:()=>y,RLegendPainter:()=>T,RPavePainter:()=>P,RPaveTextPainter:()=>b});var c=v(5835),x=v(9542),C=v(3675),R=v(3029),E=v(9056),O=v(6116);class P extends R.p{drawContent(){var t=this;return(0,c.Z)(function*(){return t})()}drawPave(){var t=this;return(0,c.Z)(function*(){let e=t.getPadPainter().getPadRect(),i=t.getFramePainter();t.onFrame=i&&t.v7EvalAttr("onFrame",!0),t.corner=t.v7EvalAttr("corner",2);let a=t.v7EvalAttr("visible",!0),r=t.v7EvalLength("offsetX",e.width,.02),o=t.v7EvalLength("offsetY",e.height,.02),s=t.v7EvalLength("width",e.width,.3),n=t.v7EvalLength("height",e.height,.3);if(t.createG(),t.draw_g.classed("most_upper_primitives",!0),!a)return t;t.createv7AttLine("border_"),t.createv7AttFill();let d=0,f=0,_=t.onFrame?i.getFrameRect():e;switch(t.corner){case 1:d=_.x+r,f=_.y+o;break;case 3:d=_.x+r,f=_.y+_.height-o-n;break;case 4:d=_.x+_.width-r-s,f=_.y+_.height-o-n;break;default:d=_.x+_.width-r-s,f=_.y+o}return t.draw_g.attr("transform",`translate(${d},${f})`),t.draw_g.append("svg:rect").attr("x",0).attr("width",s).attr("y",0).attr("height",n).call(t.lineatt.func).call(t.fillatt.func),t.pave_width=s,t.pave_height=n,t.drawContent().then(()=>((0,x.isBatchMode)()||(x.settings.ContextMenu&&t.paveContextMenu&&t.draw_g.on("contextmenu",h=>t.paveContextMenu(h)),(0,O.uI)(t,{x:d,y:f,width:s,height:n,minwidth:20,minheight:20,redraw:h=>t.sizeChanged(h)})),t))})()}sizeChanged(t){this.pave_width=t.width,this.pave_height=t.height;let e=t.x,i=t.y,a=this.getPadPainter().getPadRect(),r=this.onFrame?this.getFramePainter().getFrameRect():a,o=0,s=0,n={};switch(this.corner){case 1:o=e-r.x,s=i-r.y;break;case 3:o=e-r.x,s=r.y+r.height-i-this.pave_height;break;case 4:o=r.x+r.width-e-this.pave_width,s=r.y+r.height-i-this.pave_height;break;default:o=r.x+r.width-e-this.pave_width,s=i-r.y}this.v7AttrChange(n,"offsetX",o/a.width),this.v7AttrChange(n,"offsetY",s/a.height),this.v7AttrChange(n,"width",this.pave_width/a.width),this.v7AttrChange(n,"height",this.pave_height/a.height),this.v7SendAttrChanges(n,!1),this.draw_g.select("rect").attr("width",this.pave_width).attr("height",this.pave_height),this.drawContent()}redraw(){var t=this;return(0,c.Z)(function*(){return t.drawPave()})()}static draw(t,e,i){return(0,c.Z)(function*(){let a=new P(t,e,i,"pave");return(0,E.ensureRCanvas)(a,!1).then(()=>a.drawPave())})()}}class T extends P{drawContent(){var t=this;return(0,c.Z)(function*(){let e=t.getObject(),i=t.v7EvalFont("text",{size:12,color:"black",align:22}),a=t.pave_width,r=t.pave_height,o=e.fEntries.length,s=t.getPadPainter();if(e.fTitle&&o++,!o||!s)return t;let n=r/o,d=0,f=.02*a;i.setSize(r/(1.2*o)),t.startTextDrawing(i,"font"),e.fTitle&&(t.drawText({latex:1,width:a-2*f,height:n,x:f,y:d,text:e.fTitle}),d+=n);for(let _=0;_a.drawPave())})()}}class b extends P{drawContent(){let t=this.getObject(),e=this.v7EvalFont("text",{size:12,color:"black",align:22}),i=this.pave_width,a=this.pave_height,r=t.fText.length;if(!r)return;let o=a/r,s=0,n=.02*i;e.setSize(a/(1.2*r)),this.startTextDrawing(e,"font");for(let d=0;da.drawPave())})()}}class y extends P{clearStat(){this.stats_lines=[]}addText(t){this.stats_lines.push(t)}updateStatistic(t){this.stats_lines=t.lines,this.drawStatistic(this.stats_lines)}fillStatistic(){if(this.getPadPainter()?._fast_drawing)return!1;let e=this.getObject();if(void 0!==e.fLines)return this.stats_lines=e.fLines,delete e.fLines,!0;if(this.v7OfflineMode()){let i=this.getMainPainter();return!!(0,x.isFunc)(i?.fillStatistic)&&i.fillStatistic(this,x.gStyle.fOptStat,x.gStyle.fOptFit)}return void 0!==this.stats_lines}format(t,e){switch(e||(e="stat"),e){case"stat":e=x.gStyle.fStatFormat;break;case"fit":e=x.gStyle.fFitFormat;break;case"entries":if(Math.abs(t)<1e9&&Math.round(t)==t)return t.toFixed(0);e="14.7g";break;case"last":e=this.lastformat}let i=(0,C.Ee)(t,e||"6.4g",!0);return this.lastformat=i[1],i[0]}drawContent(){var t=this;return(0,c.Z)(function*(){return t.fillStatistic()?t.drawStatistic(t.stats_lines):t})()}changeMask(t){let e=this.getObject(),i=1<{let i=this.getObject(),a=this.changeMask.bind(this);e.add("header: StatBox");for(let r=0;re.show())}drawStatistic(t){var e=this;return(0,c.Z)(function*(){let i=e.v7EvalFont("stats_text",{size:12,color:"black",align:22}),a=0,r=0,o=0,s=e.pave_width,n=e.pave_height;if(!t)return e;let d=t.length;for(let l=0;l0&&(o=Math.max(o,k.length)),0==l||k.indexOf("|")<0)continue;0===a&&(a=l);let u=k.split("|");u.length>r&&(r=u.length)}let f=n/d,_=!1,h=.02*s,g=e.draw_g.select(".statlines");if(g.empty()?g=e.draw_g.append("svg:g").attr("class","statlines"):g.selectAll("*").remove(),i.setSize(n/(1.2*d)),e.startTextDrawing(i,"font",g),1==d)e.drawText({width:s,height:n,text:t[0],latex:1,draw_g:g});else for(let l=0;l=a){let u=t[l].split("|");for(let M=0;M0&&r>1){for(let l=a;le.updateStatistic(a))}return e.drawPave()})()}static draw(t,e,i){return(0,c.Z)(function*(){let a=new y(t,e,i,e);return(0,E.ensureRCanvas)(a,!1).then(()=>a.drawPave())})()}}}}]); +//# sourceMappingURL=625.6bc1736806a42e1d.js.map \ No newline at end of file diff --git a/docs/625.6bc1736806a42e1d.js.map b/docs/625.6bc1736806a42e1d.js.map new file mode 100644 index 000000000..f28d9cbd0 --- /dev/null +++ b/docs/625.6bc1736806a42e1d.js.map @@ -0,0 +1 @@ +{"version":3,"file":"625.6bc1736806a42e1d.js","mappings":"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","names":["RPavePainter","RObjectPainter","drawContent","_this","drawPave","rect","_this2","getPadPainter","getPadRect","fp","getFramePainter","onFrame","v7EvalAttr","corner","visible","offsetx","v7EvalLength","width","offsety","height","pave_width","pave_height","createG","draw_g","classed","createv7AttLine","createv7AttFill","pave_x","pave_y","fr","getFrameRect","x","y","attr","append","call","lineatt","func","fillatt","then","isBatchMode","settings","paveContextMenu","on","evnt","addDragHandler","minwidth","minheight","redraw","d","sizeChanged","drag","this","changes","v7AttrChange","v7SendAttrChanges","select","_this3","static","dom","pave","opt","painter","ensureRCanvas","RLegendPainter","legend","_this4","getObject","textFont","v7EvalFont","size","color","align","nlines","fEntries","length","pp","fTitle","stepy","posy","margin_x","setSize","startTextDrawing","drawText","latex","text","i","objp","entry","w4","Math","round","fLabel","fDrawableId","findSnap","fDrawable","fIO","getDom","fLine","fFill","fMarker","createv7AttMarker","fError","markeratt","create","finishTextDrawing","RPaveTextPainter","pavetext","fText","undefined","RHistStatsPainter","clearStat","stats_lines","addText","line","push","updateStatistic","reply","lines","drawStatistic","fillStatistic","_fast_drawing","obj","fLines","v7OfflineMode","main","getMainPainter","isFunc","gStyle","format","value","fmt","abs","toFixed","lastformat","res","floatToString","_this5","changeMask","nbit","mask","fShowMask","statsContextMenu","preventDefault","stopPropagation","createMenu","menu","action","bind","add","n","addchk","fillObjectExecMenu","show","_this6","first_stat","num_cols","maxlen","j","max","indexOf","parts","split","has_head","text_g","empty","selectAll","remove","max_hlen","slice","args","_expected_width","_args","post_process","ready","scaleTextDrawing","result_width","__expected_width","lpath","nrow","ncol","reason","isStr","_this7","v7NormalMode","req","_typename","v7SubmitRequest","stats"],"sourceRoot":"webpack:///","sources":["../node_modules/jsroot/modules/hist/RPavePainter.mjs"],"sourcesContent":["import { settings, isBatchMode, isFunc, isStr, gStyle } from '../core.mjs';\nimport { floatToString } from '../base/BasePainter.mjs';\nimport { RObjectPainter } from '../base/RObjectPainter.mjs';\nimport { ensureRCanvas } from '../gpad/RCanvasPainter.mjs';\nimport { addDragHandler } from '../gpad/TFramePainter.mjs';\n\n\nconst ECorner = { kTopLeft: 1, kTopRight: 2, kBottomLeft: 3, kBottomRight: 4 };\n\n/**\n * @summary Painter for RPave class\n *\n * @private\n */\n\nclass RPavePainter extends RObjectPainter {\n\n /** @summary Draw pave content\n * @desc assigned depending on pave class */\n async drawContent() { return this; }\n\n /** @summary Draw pave */\n async drawPave() {\n\n let rect = this.getPadPainter().getPadRect(),\n fp = this.getFramePainter();\n\n this.onFrame = fp && this.v7EvalAttr('onFrame', true);\n this.corner = this.v7EvalAttr('corner', ECorner.kTopRight);\n\n let visible = this.v7EvalAttr('visible', true),\n offsetx = this.v7EvalLength('offsetX', rect.width, 0.02),\n offsety = this.v7EvalLength('offsetY', rect.height, 0.02),\n pave_width = this.v7EvalLength('width', rect.width, 0.3),\n pave_height = this.v7EvalLength('height', rect.height, 0.3);\n\n this.createG();\n\n this.draw_g.classed('most_upper_primitives', true); // this primitive will remain on top of list\n\n if (!visible)\n return this;\n\n this.createv7AttLine('border_');\n\n this.createv7AttFill();\n\n let pave_x = 0, pave_y = 0,\n fr = this.onFrame ? fp.getFrameRect() : rect;\n switch (this.corner) {\n case ECorner.kTopLeft:\n pave_x = fr.x + offsetx;\n pave_y = fr.y + offsety;\n break;\n case ECorner.kBottomLeft:\n pave_x = fr.x + offsetx;\n pave_y = fr.y + fr.height - offsety - pave_height;\n break;\n case ECorner.kBottomRight:\n pave_x = fr.x + fr.width - offsetx - pave_width;\n pave_y = fr.y + fr.height - offsety - pave_height;\n break;\n case ECorner.kTopRight:\n default:\n pave_x = fr.x + fr.width - offsetx - pave_width;\n pave_y = fr.y + offsety;\n }\n\n this.draw_g.attr('transform', `translate(${pave_x},${pave_y})`);\n\n this.draw_g.append('svg:rect')\n .attr('x', 0)\n .attr('width', pave_width)\n .attr('y', 0)\n .attr('height', pave_height)\n .call(this.lineatt.func)\n .call(this.fillatt.func);\n\n this.pave_width = pave_width;\n this.pave_height = pave_height;\n\n // here should be fill and draw of text\n\n return this.drawContent().then(() => {\n\n if (isBatchMode()) return this;\n\n // TODO: provide pave context menu as in v6\n if (settings.ContextMenu && this.paveContextMenu)\n this.draw_g.on('contextmenu', evnt => this.paveContextMenu(evnt));\n\n addDragHandler(this, { x: pave_x, y: pave_y, width: pave_width, height: pave_height,\n minwidth: 20, minheight: 20, redraw: d => this.sizeChanged(d) });\n\n return this;\n });\n }\n\n /** @summary Process interactive moving of the stats box */\n sizeChanged(drag) {\n this.pave_width = drag.width;\n this.pave_height = drag.height;\n\n let pave_x = drag.x,\n pave_y = drag.y,\n rect = this.getPadPainter().getPadRect(),\n fr = this.onFrame ? this.getFramePainter().getFrameRect() : rect,\n offsetx = 0, offsety = 0, changes = {};\n\n switch (this.corner) {\n case ECorner.kTopLeft:\n offsetx = pave_x - fr.x;\n offsety = pave_y - fr.y;\n break;\n case ECorner.kBottomLeft:\n offsetx = pave_x - fr.x;\n offsety = fr.y + fr.height - pave_y - this.pave_height;\n break;\n case ECorner.kBottomRight:\n offsetx = fr.x + fr.width - pave_x - this.pave_width;\n offsety = fr.y + fr.height - pave_y - this.pave_height;\n break;\n case ECorner.kTopRight:\n default:\n offsetx = fr.x + fr.width - pave_x - this.pave_width;\n offsety = pave_y - fr.y;\n }\n\n this.v7AttrChange(changes, 'offsetX', offsetx / rect.width);\n this.v7AttrChange(changes, 'offsetY', offsety / rect.height);\n this.v7AttrChange(changes, 'width', this.pave_width / rect.width);\n this.v7AttrChange(changes, 'height', this.pave_height / rect.height);\n this.v7SendAttrChanges(changes, false); // do not invoke canvas update on the server\n\n this.draw_g.select('rect')\n .attr('width', this.pave_width)\n .attr('height', this.pave_height);\n\n this.drawContent();\n }\n\n /** @summary Redraw RPave object */\n async redraw(/*reason*/) {\n return this.drawPave();\n }\n\n /** @summary draw RPave object */\n static async draw(dom, pave, opt) {\n let painter = new RPavePainter(dom, pave, opt, 'pave');\n return ensureRCanvas(painter, false).then(() => painter.drawPave());\n }\n}\n\n\n/**\n * @summary Painter for RLegend class\n *\n * @private\n */\n\nclass RLegendPainter extends RPavePainter {\n\n /** @summary draw RLegend content */\n async drawContent() {\n let legend = this.getObject(),\n textFont = this.v7EvalFont('text', { size: 12, color: 'black', align: 22 }),\n width = this.pave_width,\n height = this.pave_height,\n nlines = legend.fEntries.length,\n pp = this.getPadPainter();\n\n if (legend.fTitle) nlines++;\n\n if (!nlines || !pp) return this;\n\n let stepy = height / nlines, posy = 0, margin_x = 0.02 * width;\n\n textFont.setSize(height/(nlines * 1.2));\n this.startTextDrawing(textFont, 'font');\n\n if (legend.fTitle) {\n this.drawText({ latex: 1, width: width - 2*margin_x, height: stepy, x: margin_x, y: posy, text: legend.fTitle });\n posy += stepy;\n }\n\n for (let i = 0; i < legend.fEntries.length; ++i) {\n let objp = null, entry = legend.fEntries[i], w4 = Math.round(width/4);\n\n this.drawText({ latex: 1, width: 0.75*width - 3*margin_x, height: stepy, x: 2*margin_x + w4, y: posy, text: entry.fLabel });\n\n if (entry.fDrawableId != 'custom') {\n objp = pp.findSnap(entry.fDrawableId, true);\n } else if (entry.fDrawable.fIO) {\n objp = new RObjectPainter(this.getDom(), entry.fDrawable.fIO);\n if (entry.fLine) objp.createv7AttLine();\n if (entry.fFill) objp.createv7AttFill();\n if (entry.fMarker) objp.createv7AttMarker();\n }\n\n if (objp && entry.fFill && objp.fillatt)\n this.draw_g\n .append('svg:path')\n .attr('d', `M${Math.round(margin_x)},${Math.round(posy + stepy*0.1)}h${w4}v${Math.round(stepy*0.8)}h${-w4}z`)\n .call(objp.fillatt.func);\n\n if (objp && entry.fLine && objp.lineatt)\n this.draw_g\n .append('svg:path')\n .attr('d', `M${Math.round(margin_x)},${Math.round(posy + stepy/2)}h${w4}`)\n .call(objp.lineatt.func);\n\n if (objp && entry.fError && objp.lineatt)\n this.draw_g\n .append('svg:path')\n .attr('d', `M${Math.round(margin_x + width/8)},${Math.round(posy + stepy*0.2)}v${Math.round(stepy*0.6)}`)\n .call(objp.lineatt.func);\n\n if (objp && entry.fMarker && objp.markeratt)\n this.draw_g.append('svg:path')\n .attr('d', objp.markeratt.create(margin_x + width/8, posy + stepy/2))\n .call(objp.markeratt.func);\n\n posy += stepy;\n }\n\n return this.finishTextDrawing();\n }\n\n /** @summary draw RLegend object */\n static async draw(dom, legend, opt) {\n let painter = new RLegendPainter(dom, legend, opt, 'legend');\n return ensureRCanvas(painter, false).then(() => painter.drawPave());\n }\n\n} // class RLegendPainter\n\n\n/**\n * @summary Painter for RPaveText class\n *\n * @private\n */\n\nclass RPaveTextPainter extends RPavePainter {\n\n /** @summary draw RPaveText content */\n drawContent() {\n let pavetext = this.getObject(),\n textFont = this.v7EvalFont('text', { size: 12, color: 'black', align: 22 }),\n width = this.pave_width,\n height = this.pave_height,\n nlines = pavetext.fText.length;\n\n if (!nlines) return;\n\n let stepy = height / nlines, posy = 0, margin_x = 0.02 * width;\n\n textFont.setSize(height/(nlines * 1.2))\n\n this.startTextDrawing(textFont, 'font');\n\n for (let i = 0; i < pavetext.fText.length; ++i) {\n let line = pavetext.fText[i];\n\n this.drawText({ latex: 1, width: width - 2*margin_x, height: stepy, x: margin_x, y: posy, text: line });\n posy += stepy;\n }\n\n return this.finishTextDrawing(undefined, true);\n }\n\n /** @summary draw RPaveText object */\n static async draw(dom, pave, opt) {\n let painter = new RPaveTextPainter(dom, pave, opt, 'pavetext');\n return ensureRCanvas(painter, false).then(() => painter.drawPave());\n }\n\n} // class RPaveTextPainter\n\n/**\n * @summary Painter for RHistStats class\n *\n * @private\n */\n\nclass RHistStatsPainter extends RPavePainter {\n\n /** @summary clear entries from stat box */\n clearStat() {\n this.stats_lines = [];\n }\n\n /** @summary add text entry to stat box */\n addText(line) {\n this.stats_lines.push(line);\n }\n\n /** @summary update statistic from the server */\n updateStatistic(reply) {\n this.stats_lines = reply.lines;\n this.drawStatistic(this.stats_lines);\n }\n\n /** @summary fill statistic */\n fillStatistic() {\n let pp = this.getPadPainter();\n if (pp?._fast_drawing) return false;\n\n let obj = this.getObject();\n if (obj.fLines !== undefined) {\n this.stats_lines = obj.fLines;\n delete obj.fLines;\n return true;\n }\n\n if (this.v7OfflineMode()) {\n let main = this.getMainPainter();\n if (!isFunc(main?.fillStatistic)) return false;\n // we take statistic from main painter\n return main.fillStatistic(this, gStyle.fOptStat, gStyle.fOptFit);\n }\n\n // show lines which are exists, maybe server request will be recieved later\n return (this.stats_lines !== undefined);\n }\n\n /** @summary format float value as string\n * @private */\n format(value, fmt) {\n if (!fmt) fmt = 'stat';\n\n switch(fmt) {\n case 'stat' : fmt = gStyle.fStatFormat; break;\n case 'fit': fmt = gStyle.fFitFormat; break;\n case 'entries': if ((Math.abs(value) < 1e9) && (Math.round(value) == value)) return value.toFixed(0); fmt = '14.7g'; break;\n case 'last': fmt = this.lastformat; break;\n }\n\n let res = floatToString(value, fmt || '6.4g', true);\n\n this.lastformat = res[1];\n\n return res[0];\n }\n\n /** @summary Draw content */\n async drawContent() {\n if (this.fillStatistic())\n return this.drawStatistic(this.stats_lines);\n\n return this;\n }\n\n /** @summary Change mask */\n changeMask(nbit) {\n let obj = this.getObject(), mask = (1< {\n let obj = this.getObject(),\n action = this.changeMask.bind(this);\n\n menu.add('header: StatBox');\n\n for (let n=0;n menu.show());\n }\n\n /** @summary Draw statistic */\n async drawStatistic(lines) {\n\n let textFont = this.v7EvalFont('stats_text', { size: 12, color: 'black', align: 22 }),\n first_stat = 0, num_cols = 0, maxlen = 0,\n width = this.pave_width,\n height = this.pave_height;\n\n if (!lines) return this;\n\n let nlines = lines.length;\n // adjust font size\n for (let j = 0; j < nlines; ++j) {\n let line = lines[j];\n if (j > 0) maxlen = Math.max(maxlen, line.length);\n if ((j == 0) || (line.indexOf('|') < 0)) continue;\n if (first_stat === 0) first_stat = j;\n let parts = line.split('|');\n if (parts.length > num_cols)\n num_cols = parts.length;\n }\n\n // for characters like 'p' or 'y' several more pixels required to stay in the box when drawn in last line\n let stepy = height / nlines, has_head = false, margin_x = 0.02 * width;\n\n let text_g = this.draw_g.select('.statlines');\n if (text_g.empty())\n text_g = this.draw_g.append('svg:g').attr('class', 'statlines');\n else\n text_g.selectAll('*').remove();\n\n textFont.setSize(height/(nlines * 1.2));\n this.startTextDrawing(textFont, 'font' , text_g);\n\n if (nlines == 1) {\n this.drawText({ width: width, height: height, text: lines[0], latex: 1, draw_g: text_g });\n } else\n for (let j = 0; j < nlines; ++j) {\n let posy = j*stepy;\n\n if (first_stat && (j >= first_stat)) {\n let parts = lines[j].split('|');\n for (let n = 0; n < parts.length; ++n)\n this.drawText({ align: 'middle', x: width * n / num_cols, y: posy, latex: 0,\n width: width/num_cols, height: stepy, text: parts[n], draw_g: text_g });\n } else if (lines[j].indexOf('=') < 0) {\n if (j == 0) {\n has_head = true;\n let max_hlen = Math.max(maxlen, Math.round((width-2*margin_x)/stepy/0.65));\n if (lines[j].length > max_hlen + 5)\n lines[j] = lines[j].slice(0,max_hlen+2) + '...';\n }\n this.drawText({ align: (j == 0) ? 'middle' : 'start', x: margin_x, y: posy,\n width: width - 2*margin_x, height: stepy, text: lines[j], draw_g: text_g });\n } else {\n let parts = lines[j].split('='), args = [];\n\n for (let n = 0; n < 2; ++n) {\n let arg = {\n align: (n == 0) ? 'start' : 'end', x: margin_x, y: posy,\n width: width-2*margin_x, height: stepy, text: parts[n], draw_g: text_g,\n _expected_width: width-2*margin_x, _args: args,\n post_process(painter) {\n if (this._args[0].ready && this._args[1].ready)\n painter.scaleTextDrawing(1.05*(this._args[0].result_width && this._args[1].result_width)/this.__expected_width, this.draw_g);\n }\n };\n args.push(arg);\n }\n\n for (let n = 0; n < 2; ++n)\n this.drawText(args[n]);\n }\n }\n\n let lpath = '';\n\n if (has_head)\n lpath += 'M0,' + Math.round(stepy) + 'h' + width;\n\n if ((first_stat > 0) && (num_cols > 1)) {\n for (let nrow = first_stat; nrow < nlines; ++nrow)\n lpath += 'M0,' + Math.round(nrow * stepy) + 'h' + width;\n for (let ncol = 0; ncol < num_cols - 1; ++ncol)\n lpath += 'M' + Math.round(width / num_cols * (ncol + 1)) + ',' + Math.round(first_stat * stepy) + 'V' + height;\n }\n\n if (lpath) this.draw_g.append('svg:path').attr('d',lpath) /*.call(this.lineatt.func)*/;\n\n return this.finishTextDrawing(text_g);\n }\n\n /** @summary Redraw stats box */\n async redraw(reason) {\n if (reason && isStr(reason) && (reason.indexOf('zoom') == 0) && this.v7NormalMode()) {\n let req = {\n _typename: 'ROOT::Experimental::RHistStatBoxBase::RRequest',\n mask: this.getObject().fShowMask // lines to show in stat box\n };\n\n this.v7SubmitRequest('stat', req, reply => this.updateStatistic(reply));\n }\n\n return this.drawPave();\n }\n\n /** @summary draw RHistStats object */\n static async draw(dom, stats, opt) {\n let painter = new RHistStatsPainter(dom, stats, opt, stats);\n return ensureRCanvas(painter, false).then(() => painter.drawPave());\n }\n\n} // class RHistStatsPainter\n\n\nexport { RPavePainter, RLegendPainter, RPaveTextPainter, RHistStatsPainter };\n"],"x_google_ignoreList":[0]} \ No newline at end of file diff --git a/docs/625.b2df831fc47ab055.js.map b/docs/625.b2df831fc47ab055.js.map deleted file mode 100644 index 71dd63e27..000000000 --- a/docs/625.b2df831fc47ab055.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"625.b2df831fc47ab055.js","mappings":"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","names":["RPavePainter","RObjectPainter","drawContent","_this","drawPave","rect","_this2","getPadPainter","getPadRect","fp","getFramePainter","onFrame","v7EvalAttr","corner","visible","offsetx","v7EvalLength","width","offsety","height","pave_width","pave_height","createG","draw_g","classed","createv7AttLine","createv7AttFill","pave_x","pave_y","fr","getFrameRect","x","y","attr","append","call","lineatt","func","fillatt","then","isBatchMode","settings","paveContextMenu","on","evnt","addDragHandler","minwidth","minheight","redraw","d","sizeChanged","drag","this","changes","v7AttrChange","v7SendAttrChanges","select","_this3","static","dom","pave","opt","painter","ensureRCanvas","RLegendPainter","legend","_this4","getObject","textFont","v7EvalFont","size","color","align","nlines","fEntries","length","pp","fTitle","stepy","posy","margin_x","setSize","startTextDrawing","drawText","latex","text","i","objp","entry","w4","Math","round","fLabel","fDrawableId","findSnap","fDrawable","fIO","getDom","fLine","fFill","fMarker","createv7AttMarker","fError","markeratt","create","finishTextDrawing","RPaveTextPainter","pavetext","fText","undefined","RHistStatsPainter","clearStat","stats_lines","addText","line","push","updateStatistic","reply","lines","drawStatistic","fillStatistic","_fast_drawing","obj","fLines","v7OfflineMode","main","getMainPainter","isFunc","gStyle","format","value","fmt","abs","toFixed","lastformat","res","floatToString","_this5","changeMask","nbit","mask","fShowMask","statsContextMenu","preventDefault","stopPropagation","createMenu","menu","action","bind","add","n","addchk","fillObjectExecMenu","show","_this6","first_stat","num_cols","maxlen","j","max","indexOf","parts","split","has_head","text_g","empty","selectAll","remove","max_hlen","slice","args","_expected_width","_args","post_process","ready","scaleTextDrawing","result_width","__expected_width","lpath","nrow","ncol","reason","isStr","_this7","v7NormalMode","req","_typename","v7SubmitRequest","stats"],"sourceRoot":"webpack:///","sources":["../node_modules/jsroot/modules/hist/RPavePainter.mjs"],"sourcesContent":["import { settings, isBatchMode, isFunc, isStr, gStyle } from '../core.mjs';\nimport { floatToString } from '../base/BasePainter.mjs';\nimport { RObjectPainter } from '../base/RObjectPainter.mjs';\nimport { ensureRCanvas } from '../gpad/RCanvasPainter.mjs';\nimport { addDragHandler } from '../gpad/TFramePainter.mjs';\n\n\nconst ECorner = { kTopLeft: 1, kTopRight: 2, kBottomLeft: 3, kBottomRight: 4 };\n\n/**\n * @summary Painter for RPave class\n *\n * @private\n */\n\nclass RPavePainter extends RObjectPainter {\n\n /** @summary Draw pave content\n * @desc assigned depending on pave class */\n async drawContent() { return this; }\n\n /** @summary Draw pave */\n async drawPave() {\n\n let rect = this.getPadPainter().getPadRect(),\n fp = this.getFramePainter();\n\n this.onFrame = fp && this.v7EvalAttr('onFrame', true);\n this.corner = this.v7EvalAttr('corner', ECorner.kTopRight);\n\n let visible = this.v7EvalAttr('visible', true),\n offsetx = this.v7EvalLength('offsetX', rect.width, 0.02),\n offsety = this.v7EvalLength('offsetY', rect.height, 0.02),\n pave_width = this.v7EvalLength('width', rect.width, 0.3),\n pave_height = this.v7EvalLength('height', rect.height, 0.3);\n\n this.createG();\n\n this.draw_g.classed('most_upper_primitives', true); // this primitive will remain on top of list\n\n if (!visible)\n return this;\n\n this.createv7AttLine('border_');\n\n this.createv7AttFill();\n\n let pave_x = 0, pave_y = 0,\n fr = this.onFrame ? fp.getFrameRect() : rect;\n switch (this.corner) {\n case ECorner.kTopLeft:\n pave_x = fr.x + offsetx;\n pave_y = fr.y + offsety;\n break;\n case ECorner.kBottomLeft:\n pave_x = fr.x + offsetx;\n pave_y = fr.y + fr.height - offsety - pave_height;\n break;\n case ECorner.kBottomRight:\n pave_x = fr.x + fr.width - offsetx - pave_width;\n pave_y = fr.y + fr.height - offsety - pave_height;\n break;\n case ECorner.kTopRight:\n default:\n pave_x = fr.x + fr.width - offsetx - pave_width;\n pave_y = fr.y + offsety;\n }\n\n this.draw_g.attr('transform', `translate(${pave_x},${pave_y})`);\n\n this.draw_g.append('svg:rect')\n .attr('x', 0)\n .attr('width', pave_width)\n .attr('y', 0)\n .attr('height', pave_height)\n .call(this.lineatt.func)\n .call(this.fillatt.func);\n\n this.pave_width = pave_width;\n this.pave_height = pave_height;\n\n // here should be fill and draw of text\n\n return this.drawContent().then(() => {\n\n if (isBatchMode()) return this;\n\n // TODO: provide pave context menu as in v6\n if (settings.ContextMenu && this.paveContextMenu)\n this.draw_g.on('contextmenu', evnt => this.paveContextMenu(evnt));\n\n addDragHandler(this, { x: pave_x, y: pave_y, width: pave_width, height: pave_height,\n minwidth: 20, minheight: 20, redraw: d => this.sizeChanged(d) });\n\n return this;\n });\n }\n\n /** @summary Process interactive moving of the stats box */\n sizeChanged(drag) {\n this.pave_width = drag.width;\n this.pave_height = drag.height;\n\n let pave_x = drag.x,\n pave_y = drag.y,\n rect = this.getPadPainter().getPadRect(),\n fr = this.onFrame ? this.getFramePainter().getFrameRect() : rect,\n offsetx = 0, offsety = 0, changes = {};\n\n switch (this.corner) {\n case ECorner.kTopLeft:\n offsetx = pave_x - fr.x;\n offsety = pave_y - fr.y;\n break;\n case ECorner.kBottomLeft:\n offsetx = pave_x - fr.x;\n offsety = fr.y + fr.height - pave_y - this.pave_height;\n break;\n case ECorner.kBottomRight:\n offsetx = fr.x + fr.width - pave_x - this.pave_width;\n offsety = fr.y + fr.height - pave_y - this.pave_height;\n break;\n case ECorner.kTopRight:\n default:\n offsetx = fr.x + fr.width - pave_x - this.pave_width;\n offsety = pave_y - fr.y;\n }\n\n this.v7AttrChange(changes, 'offsetX', offsetx / rect.width);\n this.v7AttrChange(changes, 'offsetY', offsety / rect.height);\n this.v7AttrChange(changes, 'width', this.pave_width / rect.width);\n this.v7AttrChange(changes, 'height', this.pave_height / rect.height);\n this.v7SendAttrChanges(changes, false); // do not invoke canvas update on the server\n\n this.draw_g.select('rect')\n .attr('width', this.pave_width)\n .attr('height', this.pave_height);\n\n this.drawContent();\n }\n\n /** @summary Redraw RPave object */\n async redraw(/*reason*/) {\n return this.drawPave();\n }\n\n /** @summary draw RPave object */\n static async draw(dom, pave, opt) {\n let painter = new RPavePainter(dom, pave, opt, 'pave');\n return ensureRCanvas(painter, false).then(() => painter.drawPave());\n }\n}\n\n\n/**\n * @summary Painter for RLegend class\n *\n * @private\n */\n\nclass RLegendPainter extends RPavePainter {\n\n /** @summary draw RLegend content */\n async drawContent() {\n let legend = this.getObject(),\n textFont = this.v7EvalFont('text', { size: 12, color: 'black', align: 22 }),\n width = this.pave_width,\n height = this.pave_height,\n nlines = legend.fEntries.length,\n pp = this.getPadPainter();\n\n if (legend.fTitle) nlines++;\n\n if (!nlines || !pp) return this;\n\n let stepy = height / nlines, posy = 0, margin_x = 0.02 * width;\n\n textFont.setSize(height/(nlines * 1.2));\n this.startTextDrawing(textFont, 'font');\n\n if (legend.fTitle) {\n this.drawText({ latex: 1, width: width - 2*margin_x, height: stepy, x: margin_x, y: posy, text: legend.fTitle });\n posy += stepy;\n }\n\n for (let i = 0; i < legend.fEntries.length; ++i) {\n let objp = null, entry = legend.fEntries[i], w4 = Math.round(width/4);\n\n this.drawText({ latex: 1, width: 0.75*width - 3*margin_x, height: stepy, x: 2*margin_x + w4, y: posy, text: entry.fLabel });\n\n if (entry.fDrawableId != 'custom') {\n objp = pp.findSnap(entry.fDrawableId, true);\n } else if (entry.fDrawable.fIO) {\n objp = new RObjectPainter(this.getDom(), entry.fDrawable.fIO);\n if (entry.fLine) objp.createv7AttLine();\n if (entry.fFill) objp.createv7AttFill();\n if (entry.fMarker) objp.createv7AttMarker();\n }\n\n if (objp && entry.fFill && objp.fillatt)\n this.draw_g\n .append('svg:path')\n .attr('d', `M${Math.round(margin_x)},${Math.round(posy + stepy*0.1)}h${w4}v${Math.round(stepy*0.8)}h${-w4}z`)\n .call(objp.fillatt.func);\n\n if (objp && entry.fLine && objp.lineatt)\n this.draw_g\n .append('svg:path')\n .attr('d', `M${Math.round(margin_x)},${Math.round(posy + stepy/2)}h${w4}`)\n .call(objp.lineatt.func);\n\n if (objp && entry.fError && objp.lineatt)\n this.draw_g\n .append('svg:path')\n .attr('d', `M${Math.round(margin_x + width/8)},${Math.round(posy + stepy*0.2)}v${Math.round(stepy*0.6)}`)\n .call(objp.lineatt.func);\n\n if (objp && entry.fMarker && objp.markeratt)\n this.draw_g.append('svg:path')\n .attr('d', objp.markeratt.create(margin_x + width/8, posy + stepy/2))\n .call(objp.markeratt.func);\n\n posy += stepy;\n }\n\n return this.finishTextDrawing();\n }\n\n /** @summary draw RLegend object */\n static async draw(dom, legend, opt) {\n let painter = new RLegendPainter(dom, legend, opt, 'legend');\n return ensureRCanvas(painter, false).then(() => painter.drawPave());\n }\n\n} // class RLegendPainter\n\n\n/**\n * @summary Painter for RPaveText class\n *\n * @private\n */\n\nclass RPaveTextPainter extends RPavePainter {\n\n /** @summary draw RPaveText content */\n drawContent() {\n let pavetext = this.getObject(),\n textFont = this.v7EvalFont('text', { size: 12, color: 'black', align: 22 }),\n width = this.pave_width,\n height = this.pave_height,\n nlines = pavetext.fText.length;\n\n if (!nlines) return;\n\n let stepy = height / nlines, posy = 0, margin_x = 0.02 * width;\n\n textFont.setSize(height/(nlines * 1.2))\n\n this.startTextDrawing(textFont, 'font');\n\n for (let i = 0; i < pavetext.fText.length; ++i) {\n let line = pavetext.fText[i];\n\n this.drawText({ latex: 1, width: width - 2*margin_x, height: stepy, x: margin_x, y: posy, text: line });\n posy += stepy;\n }\n\n return this.finishTextDrawing(undefined, true);\n }\n\n /** @summary draw RPaveText object */\n static async draw(dom, pave, opt) {\n let painter = new RPaveTextPainter(dom, pave, opt, 'pavetext');\n return ensureRCanvas(painter, false).then(() => painter.drawPave());\n }\n\n} // class RPaveTextPainter\n\n/**\n * @summary Painter for RHistStats class\n *\n * @private\n */\n\nclass RHistStatsPainter extends RPavePainter {\n\n /** @summary clear entries from stat box */\n clearStat() {\n this.stats_lines = [];\n }\n\n /** @summary add text entry to stat box */\n addText(line) {\n this.stats_lines.push(line);\n }\n\n /** @summary update statistic from the server */\n updateStatistic(reply) {\n this.stats_lines = reply.lines;\n this.drawStatistic(this.stats_lines);\n }\n\n /** @summary fill statistic */\n fillStatistic() {\n let pp = this.getPadPainter();\n if (pp?._fast_drawing) return false;\n\n let obj = this.getObject();\n if (obj.fLines !== undefined) {\n this.stats_lines = obj.fLines;\n delete obj.fLines;\n return true;\n }\n\n if (this.v7OfflineMode()) {\n let main = this.getMainPainter();\n if (!isFunc(main?.fillStatistic)) return false;\n // we take statistic from main painter\n return main.fillStatistic(this, gStyle.fOptStat, gStyle.fOptFit);\n }\n\n // show lines which are exists, maybe server request will be recieved later\n return (this.stats_lines !== undefined);\n }\n\n /** @summary format float value as string\n * @private */\n format(value, fmt) {\n if (!fmt) fmt = 'stat';\n\n switch(fmt) {\n case 'stat' : fmt = gStyle.fStatFormat; break;\n case 'fit': fmt = gStyle.fFitFormat; break;\n case 'entries': if ((Math.abs(value) < 1e9) && (Math.round(value) == value)) return value.toFixed(0); fmt = '14.7g'; break;\n case 'last': fmt = this.lastformat; break;\n }\n\n let res = floatToString(value, fmt || '6.4g', true);\n\n this.lastformat = res[1];\n\n return res[0];\n }\n\n /** @summary Draw content */\n async drawContent() {\n if (this.fillStatistic())\n return this.drawStatistic(this.stats_lines);\n\n return this;\n }\n\n /** @summary Change mask */\n changeMask(nbit) {\n let obj = this.getObject(), mask = (1< {\n let obj = this.getObject(),\n action = this.changeMask.bind(this);\n\n menu.add('header: StatBox');\n\n for (let n=0;n menu.show());\n }\n\n /** @summary Draw statistic */\n async drawStatistic(lines) {\n\n let textFont = this.v7EvalFont('stats_text', { size: 12, color: 'black', align: 22 }),\n first_stat = 0, num_cols = 0, maxlen = 0,\n width = this.pave_width,\n height = this.pave_height;\n\n if (!lines) return this;\n\n let nlines = lines.length;\n // adjust font size\n for (let j = 0; j < nlines; ++j) {\n let line = lines[j];\n if (j > 0) maxlen = Math.max(maxlen, line.length);\n if ((j == 0) || (line.indexOf('|') < 0)) continue;\n if (first_stat === 0) first_stat = j;\n let parts = line.split('|');\n if (parts.length > num_cols)\n num_cols = parts.length;\n }\n\n // for characters like 'p' or 'y' several more pixels required to stay in the box when drawn in last line\n let stepy = height / nlines, has_head = false, margin_x = 0.02 * width;\n\n let text_g = this.draw_g.select('.statlines');\n if (text_g.empty())\n text_g = this.draw_g.append('svg:g').attr('class', 'statlines');\n else\n text_g.selectAll('*').remove();\n\n textFont.setSize(height/(nlines * 1.2));\n this.startTextDrawing(textFont, 'font' , text_g);\n\n if (nlines == 1) {\n this.drawText({ width: width, height: height, text: lines[0], latex: 1, draw_g: text_g });\n } else\n for (let j = 0; j < nlines; ++j) {\n let posy = j*stepy;\n\n if (first_stat && (j >= first_stat)) {\n let parts = lines[j].split('|');\n for (let n = 0; n < parts.length; ++n)\n this.drawText({ align: 'middle', x: width * n / num_cols, y: posy, latex: 0,\n width: width/num_cols, height: stepy, text: parts[n], draw_g: text_g });\n } else if (lines[j].indexOf('=') < 0) {\n if (j == 0) {\n has_head = true;\n let max_hlen = Math.max(maxlen, Math.round((width-2*margin_x)/stepy/0.65));\n if (lines[j].length > max_hlen + 5)\n lines[j] = lines[j].slice(0,max_hlen+2) + '...';\n }\n this.drawText({ align: (j == 0) ? 'middle' : 'start', x: margin_x, y: posy,\n width: width - 2*margin_x, height: stepy, text: lines[j], draw_g: text_g });\n } else {\n let parts = lines[j].split('='), args = [];\n\n for (let n = 0; n < 2; ++n) {\n let arg = {\n align: (n == 0) ? 'start' : 'end', x: margin_x, y: posy,\n width: width-2*margin_x, height: stepy, text: parts[n], draw_g: text_g,\n _expected_width: width-2*margin_x, _args: args,\n post_process(painter) {\n if (this._args[0].ready && this._args[1].ready)\n painter.scaleTextDrawing(1.05*(this._args[0].result_width && this._args[1].result_width)/this.__expected_width, this.draw_g);\n }\n };\n args.push(arg);\n }\n\n for (let n = 0; n < 2; ++n)\n this.drawText(args[n]);\n }\n }\n\n let lpath = '';\n\n if (has_head)\n lpath += 'M0,' + Math.round(stepy) + 'h' + width;\n\n if ((first_stat > 0) && (num_cols > 1)) {\n for (let nrow = first_stat; nrow < nlines; ++nrow)\n lpath += 'M0,' + Math.round(nrow * stepy) + 'h' + width;\n for (let ncol = 0; ncol < num_cols - 1; ++ncol)\n lpath += 'M' + Math.round(width / num_cols * (ncol + 1)) + ',' + Math.round(first_stat * stepy) + 'V' + height;\n }\n\n if (lpath) this.draw_g.append('svg:path').attr('d',lpath) /*.call(this.lineatt.func)*/;\n\n return this.finishTextDrawing(text_g);\n }\n\n /** @summary Redraw stats box */\n async redraw(reason) {\n if (reason && isStr(reason) && (reason.indexOf('zoom') == 0) && this.v7NormalMode()) {\n let req = {\n _typename: 'ROOT::Experimental::RHistStatBoxBase::RRequest',\n mask: this.getObject().fShowMask // lines to show in stat box\n };\n\n this.v7SubmitRequest('stat', req, reply => this.updateStatistic(reply));\n }\n\n return this.drawPave();\n }\n\n /** @summary draw RHistStats object */\n static async draw(dom, stats, opt) {\n let painter = new RHistStatsPainter(dom, stats, opt, stats);\n return ensureRCanvas(painter, false).then(() => painter.drawPave());\n }\n\n} // class RHistStatsPainter\n\n\nexport { RPavePainter, RLegendPainter, RPaveTextPainter, RHistStatsPainter };\n"],"x_google_ignoreList":[0]} \ No newline at end of file diff --git a/docs/647.f98f01d9b6ad4c05.js b/docs/647.61a5f578be2d50a8.js similarity index 90% rename from docs/647.f98f01d9b6ad4c05.js rename to docs/647.61a5f578be2d50a8.js index e03b2f9cc..7811e7497 100644 --- a/docs/647.f98f01d9b6ad4c05.js +++ b/docs/647.61a5f578be2d50a8.js @@ -1,2 +1,2 @@ -"use strict";(self.webpackChunkphoenix_app=self.webpackChunkphoenix_app||[]).push([[647],{5647:(A,D,f)=>{f.r(D),f.d(D,{TASImagePainter:()=>B});var d=f(4788),g=f(9542),_=f(3038),M=f(6458),w=f(4585),x=f(49);class B extends M.tK{decodeOptions(e){this.options={Zscale:!1},e&&e.indexOf("z")>=0&&(this.options.Zscale=!0)}createRGBA(e){let t=this.getObject();if(!t?.fPalette)return null;let r=new Array(4*(e+1)),a=1,l=t.fPalette;for(let n=0;n<=e;++n){let o=1*n/e;for(;l.fPoints[a]=n&&(n=l+1);let o=0,h=e.fWidth,u=0,P=e.fHeight;return t&&t.zoom_xmin!=t.zoom_xmax&&(o=Math.round(t.zoom_xmin*e.fWidth),h=Math.round(t.zoom_xmax*e.fWidth)),t&&t.zoom_ymin!=t.zoom_ymax&&(u=Math.round(t.zoom_ymin*e.fHeight),P=Math.round(t.zoom_ymax*e.fHeight)),((0,g.isNodeJs)()?f.e(305).then(f.t.bind(f,8305,19)).then(i=>i.default.createCanvas(h-o,P-u)):new Promise(i=>{let s=document.createElement("canvas");s.width=h-o,s.height=P-u,i(s)})).then(i=>{let s=i.getContext("2d"),m=s.getImageData(0,0,i.width,i.height),b=m.data;for(let c=u;c(n.url&&e.createG(!!r).append("image").attr("href",n.url).attr("width",a.width).attr("height",a.height).attr("preserveAspectRatio",n.constRatio?null:"none"),n.url&&e.isMainPainter()&&n.is_buf&&r?e.drawColorPalette(e.options.Zscale,!0).then(()=>(r.setAxesRanges((0,g.create)(g.clTAxis),0,1,(0,g.create)(g.clTAxis),0,1,null,0,0),r.createXY({ndim:2,check_pad_range:!1}),r.addInteractivity())):e))})()}canZoomInside(e,t,r){let a=this.getObject();return!!a?.fImgBuf&&("x"==e&&(r-t)*a.fWidth>3||"y"==e&&(r-t)*a.fHeight>3)}drawColorPalette(e,t){var r=this;return(0,d.Z)(function*(){if(!r.isMainPainter())return null;if(!r.draw_palette){let o=(0,g.create)(g.clTPaletteAxis);Object.assign(o,{fX1NDC:.91,fX2NDC:.95,fY1NDC:.1,fY2NDC:.9,fInit:1}),o.fAxis.fChopt="+",r.draw_palette=o,r.fPalette=!0}let a=r.getPadPainter().findPainterFor(r.draw_palette);if(!e)return a&&(a.Enabled=!1,a.removeG()),null;let l=r.getFramePainter();if(t&&l){let o=r.draw_palette;o.fX2NDC=l.fX2NDC+.01+(o.fX2NDC-o.fX1NDC),o.fX1NDC=l.fX2NDC+.01,o.fY1NDC=l.fY1NDC,o.fY2NDC=l.fY2NDC}if(a)return a.Enabled=!0,a.drawPave("");let n=r.selectCurrentPad(r.getPadName());return w.TPavePainter.draw(r.getDom(),r.draw_palette).then(o=>{a=o,r.selectCurrentPad(n),a.$secondary=!0,a.redraw=function(){}})})()}toggleColz(){let e=this.getObject();e&&e.fPalette&&(this.options.Zscale=!this.options.Zscale,this.drawColorPalette(this.options.Zscale,!0))}redraw(e){let t=this.draw_g?this.draw_g.select("image"):null,r=this.getFramePainter();if(!t||t.empty()||"zoom"===e||!r)return this.drawImage();t.attr("width",r.getFrameWidth()).attr("height",r.getFrameHeight())}clickButton(e){return!!this.isMainPainter()&&"ToggleColorZ"===e&&(this.toggleColz(),!0)}fillToolbar(){let e=this.getPadPainter(),t=this.getObject();e&&t?.fPalette&&(e.addPadButton("th2colorz","Toggle color palette","ToggleColorZ"),e.showPadButtons())}static draw(e,t,r){return(0,d.Z)(function*(){let a=new B(e,t,r);return a.decodeOptions(r),(0,x.ensureTCanvas)(a,!1).then(()=>a.drawImage()).then(()=>(a.fillToolbar(),a))})()}}}}]); -//# sourceMappingURL=647.f98f01d9b6ad4c05.js.map \ No newline at end of file +"use strict";(self.webpackChunkphoenix_app=self.webpackChunkphoenix_app||[]).push([[647],{5647:(A,D,f)=>{f.r(D),f.d(D,{TASImagePainter:()=>B});var d=f(5835),g=f(9542),P=f(3038),M=f(6458),w=f(4585),x=f(49);class B extends M.tK{decodeOptions(e){this.options={Zscale:!1},e&&e.indexOf("z")>=0&&(this.options.Zscale=!0)}createRGBA(e){let t=this.getObject();if(!t?.fPalette)return null;let r=new Array(4*(e+1)),a=1,l=t.fPalette;for(let n=0;n<=e;++n){let o=1*n/e;for(;l.fPoints[a]=n&&(n=l+1);let o=0,h=e.fWidth,u=0,_=e.fHeight;return t&&t.zoom_xmin!=t.zoom_xmax&&(o=Math.round(t.zoom_xmin*e.fWidth),h=Math.round(t.zoom_xmax*e.fWidth)),t&&t.zoom_ymin!=t.zoom_ymax&&(u=Math.round(t.zoom_ymin*e.fHeight),_=Math.round(t.zoom_ymax*e.fHeight)),((0,g.isNodeJs)()?f.e(305).then(f.t.bind(f,8305,19)).then(i=>i.default.createCanvas(h-o,_-u)):new Promise(i=>{let s=document.createElement("canvas");s.width=h-o,s.height=_-u,i(s)})).then(i=>{let s=i.getContext("2d"),m=s.getImageData(0,0,i.width,i.height),b=m.data;for(let c=u;c<_;++c){let C=(_-c-1)*(h-o)*4,T=c*e.fWidth;for(let I=o;I(n.url&&e.createG(!!r).append("image").attr("href",n.url).attr("width",a.width).attr("height",a.height).attr("preserveAspectRatio",n.constRatio?null:"none"),n.url&&e.isMainPainter()&&n.is_buf&&r?e.drawColorPalette(e.options.Zscale,!0).then(()=>(r.setAxesRanges((0,g.create)(g.clTAxis),0,1,(0,g.create)(g.clTAxis),0,1,null,0,0),r.createXY({ndim:2,check_pad_range:!1}),r.addInteractivity())):e))})()}canZoomInside(e,t,r){let a=this.getObject();return!!a?.fImgBuf&&("x"==e&&(r-t)*a.fWidth>3||"y"==e&&(r-t)*a.fHeight>3)}drawColorPalette(e,t){var r=this;return(0,d.Z)(function*(){if(!r.isMainPainter())return null;if(!r.draw_palette){let o=(0,g.create)(g.clTPaletteAxis);Object.assign(o,{fX1NDC:.91,fX2NDC:.95,fY1NDC:.1,fY2NDC:.9,fInit:1}),o.fAxis.fChopt="+",r.draw_palette=o,r.fPalette=!0}let a=r.getPadPainter().findPainterFor(r.draw_palette);if(!e)return a&&(a.Enabled=!1,a.removeG()),null;let l=r.getFramePainter();if(t&&l){let o=r.draw_palette;o.fX2NDC=l.fX2NDC+.01+(o.fX2NDC-o.fX1NDC),o.fX1NDC=l.fX2NDC+.01,o.fY1NDC=l.fY1NDC,o.fY2NDC=l.fY2NDC}if(a)return a.Enabled=!0,a.drawPave("");let n=r.selectCurrentPad(r.getPadName());return w.TPavePainter.draw(r.getDom(),r.draw_palette).then(o=>{a=o,r.selectCurrentPad(n),a.$secondary=!0,a.redraw=function(){}})})()}toggleColz(){let e=this.getObject();e&&e.fPalette&&(this.options.Zscale=!this.options.Zscale,this.drawColorPalette(this.options.Zscale,!0))}redraw(e){let t=this.draw_g?this.draw_g.select("image"):null,r=this.getFramePainter();if(!t||t.empty()||"zoom"===e||!r)return this.drawImage();t.attr("width",r.getFrameWidth()).attr("height",r.getFrameHeight())}clickButton(e){return!!this.isMainPainter()&&"ToggleColorZ"===e&&(this.toggleColz(),!0)}fillToolbar(){let e=this.getPadPainter(),t=this.getObject();e&&t?.fPalette&&(e.addPadButton("th2colorz","Toggle color palette","ToggleColorZ"),e.showPadButtons())}static draw(e,t,r){return(0,d.Z)(function*(){let a=new B(e,t,r);return a.decodeOptions(r),(0,x.ensureTCanvas)(a,!1).then(()=>a.drawImage()).then(()=>(a.fillToolbar(),a))})()}}}}]); +//# sourceMappingURL=647.61a5f578be2d50a8.js.map \ No newline at end of file diff --git a/docs/647.61a5f578be2d50a8.js.map b/docs/647.61a5f578be2d50a8.js.map new file mode 100644 index 000000000..cd059f572 --- /dev/null +++ b/docs/647.61a5f578be2d50a8.js.map @@ -0,0 +1 @@ +{"version":3,"file":"647.61a5f578be2d50a8.js","mappings":"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","names":["TASImagePainter","ObjectPainter","decodeOptions","opt","this","options","Zscale","indexOf","createRGBA","nlevels","obj","getObject","fPalette","rgba","Array","indx","pal","lvl","l","fPoints","length","r1","r2","Math","min","round","fColorRed","fColorGreen","fColorBlue","fColorAlpha","makeUrlFromImageBuf","fp","_this","fImgBuf","max","k","v","fContour","arr","getLevels","getPaletteColor","zval","toHex","xmin","xmax","fWidth","ymin","ymax","fHeight","zoom_xmin","zoom_xmax","zoom_ymin","zoom_ymax","isNodeJs","__webpack_require__","then","h","default","createCanvas","Promise","resolveFunc","c","document","createElement","width","height","canvas","context","getContext","imageData","getImageData","data","i","dst","row","j","iii","putImageData","url","toDataURL","constRatio","fConstRatio","is_buf","makeUrlFromPngBuf","buf","fPngBuf","pngbuf","isStr","String","fromCharCode","btoa_func","drawImage","promise","_this2","getFramePainter","rect","getFrameRect","getPadPainter","getPadRect","wheel_zoomy","_blob","console","error","fImageQuality","fImageCompression","_typename","fUniqueID","fBits","fNumPoints","resolve","res","createG","append","attr","isMainPainter","drawColorPalette","setAxesRanges","create","clTAxis","createXY","ndim","check_pad_range","addInteractivity","canZoomInside","axis","enabled","can_move","_this3","draw_palette","clTPaletteAxis","Object","assign","fX1NDC","fX2NDC","fY1NDC","fY2NDC","fInit","fAxis","fChopt","pal_painter","findPainterFor","Enabled","removeG","frame_painter","drawPave","prev_name","selectCurrentPad","getPadName","TPavePainter","getDom","p","$secondary","redraw","toggleColz","reason","img","draw_g","select","empty","getFrameWidth","getFrameHeight","clickButton","funcname","fillToolbar","pp","addPadButton","showPadButtons","static","dom","painter","ensureTCanvas"],"sourceRoot":"webpack:///","sources":["../node_modules/jsroot/modules/draw/TASImagePainter.mjs"],"sourcesContent":["import { create, isNodeJs, isStr, btoa_func, clTPave, clTGaxis, clTAxis, clTPaletteAxis } from '../core.mjs';\nimport { toHex } from '../base/colors.mjs';\nimport { ObjectPainter } from '../base/ObjectPainter.mjs';\nimport { TPavePainter } from '../hist/TPavePainter.mjs';\nimport { ensureTCanvas } from '../gpad/TCanvasPainter.mjs';\n\n/**\n * @summary Painter for TASImage object.\n *\n * @private\n */\n\nclass TASImagePainter extends ObjectPainter {\n\n /** @summary Decode options string */\n decodeOptions(opt) {\n this.options = { Zscale: false };\n\n if (opt && (opt.indexOf('z') >= 0)) this.options.Zscale = true;\n }\n\n /** @summary Create RGBA buffers */\n createRGBA(nlevels) {\n let obj = this.getObject();\n\n if (!obj?.fPalette) return null;\n\n let rgba = new Array((nlevels+1) * 4), indx = 1, pal = obj.fPalette; // precaclucated colors\n\n for(let lvl = 0; lvl <= nlevels; ++lvl) {\n let l = 1.*lvl/nlevels;\n while ((pal.fPoints[indx] < l) && (indx < pal.fPoints.length-1)) indx++;\n\n let r1 = (pal.fPoints[indx] - l) / (pal.fPoints[indx] - pal.fPoints[indx-1]),\n r2 = (l - pal.fPoints[indx-1]) / (pal.fPoints[indx] - pal.fPoints[indx-1]);\n\n rgba[lvl*4] = Math.min(255, Math.round((pal.fColorRed[indx-1] * r1 + pal.fColorRed[indx] * r2) / 256));\n rgba[lvl*4+1] = Math.min(255, Math.round((pal.fColorGreen[indx-1] * r1 + pal.fColorGreen[indx] * r2) / 256));\n rgba[lvl*4+2] = Math.min(255, Math.round((pal.fColorBlue[indx-1] * r1 + pal.fColorBlue[indx] * r2) / 256));\n rgba[lvl*4+3] = Math.min(255, Math.round((pal.fColorAlpha[indx-1] * r1 + pal.fColorAlpha[indx] * r2) / 256));\n }\n\n return rgba;\n }\n\n /** @summary Create url using image buffer\n * @private */\n async makeUrlFromImageBuf(obj, fp) {\n\n let nlevels = 1000;\n this.rgba = this.createRGBA(nlevels); // precaclucated colors\n\n let min = obj.fImgBuf[0], max = obj.fImgBuf[0];\n for (let k = 1; k < obj.fImgBuf.length; ++k) {\n let v = obj.fImgBuf[k];\n min = Math.min(v, min);\n max = Math.max(v, max);\n }\n\n // does not work properly in Node.js, causes 'Maximum call stack size exceeded' error\n // min = Math.min.apply(null, obj.fImgBuf),\n // max = Math.max.apply(null, obj.fImgBuf);\n\n // create countor like in hist painter to allow palette drawing\n this.fContour = {\n arr: new Array(200),\n rgba: this.rgba,\n getLevels() { return this.arr; },\n getPaletteColor(pal, zval) {\n if (!this.arr || !this.rgba) return 'white';\n let indx = Math.round((zval - this.arr[0]) / (this.arr[this.arr.length-1] - this.arr[0]) * (this.rgba.length-4)/4) * 4;\n return '#' + toHex(this.rgba[indx],1) + toHex(this.rgba[indx+1],1) + toHex(this.rgba[indx+2],1) + toHex(this.rgba[indx+3],1);\n }\n };\n for (let k = 0; k < 200; k++)\n this.fContour.arr[k] = min + (max-min)/(200-1)*k;\n\n if (min >= max) max = min + 1;\n\n let xmin = 0, xmax = obj.fWidth, ymin = 0, ymax = obj.fHeight; // dimension in pixels\n\n if (fp && (fp.zoom_xmin != fp.zoom_xmax)) {\n xmin = Math.round(fp.zoom_xmin * obj.fWidth);\n xmax = Math.round(fp.zoom_xmax * obj.fWidth);\n }\n\n if (fp && (fp.zoom_ymin != fp.zoom_ymax)) {\n ymin = Math.round(fp.zoom_ymin * obj.fHeight);\n ymax = Math.round(fp.zoom_ymax * obj.fHeight);\n }\n\n let pr = isNodeJs() ?\n import('canvas').then(h => h.default.createCanvas(xmax - xmin, ymax - ymin)) :\n new Promise(resolveFunc => {\n let c = document.createElement('canvas');\n c.width = xmax - xmin;\n c.height = ymax - ymin;\n resolveFunc(c);\n });\n\n return pr.then(canvas => {\n\n let context = canvas.getContext('2d'),\n imageData = context.getImageData(0, 0, canvas.width, canvas.height),\n arr = imageData.data;\n\n for(let i = ymin; i < ymax; ++i) {\n let dst = (ymax - i - 1) * (xmax - xmin) * 4,\n row = i * obj.fWidth;\n for(let j = xmin; j < xmax; ++j) {\n let iii = Math.round((obj.fImgBuf[row + j] - min) / (max - min) * nlevels) * 4;\n // copy rgba value for specified point\n arr[dst++] = this.rgba[iii++];\n arr[dst++] = this.rgba[iii++];\n arr[dst++] = this.rgba[iii++];\n arr[dst++] = this.rgba[iii++];\n }\n }\n\n context.putImageData(imageData, 0, 0);\n\n return { url: canvas.toDataURL(), constRatio: obj.fConstRatio, is_buf: true };\n });\n }\n\n /** @summary Produce data url from png data */\n async makeUrlFromPngBuf(obj) {\n let buf = obj.fPngBuf, pngbuf = '';\n\n if (isStr(buf))\n pngbuf = buf;\n else\n for (let k = 0; k < buf.length; ++k)\n pngbuf += String.fromCharCode(buf[k] < 0 ? 256 + buf[k] : buf[k]);\n\n return { url: 'data:image/png;base64,' + btoa_func(pngbuf), constRatio: true };\n }\n\n /** @summary Draw image */\n async drawImage() {\n let obj = this.getObject(),\n fp = this.getFramePainter(),\n rect = fp ? fp.getFrameRect() : this.getPadPainter().getPadRect();\n\n this.wheel_zoomy = true;\n\n if (obj._blob) {\n // try to process blob data due to custom streamer\n if ((obj._blob.length == 15) && !obj._blob[0]) {\n obj.fImageQuality = obj._blob[1];\n obj.fImageCompression = obj._blob[2];\n obj.fConstRatio = obj._blob[3];\n obj.fPalette = {\n _typename: 'TImagePalette',\n fUniqueID: obj._blob[4],\n fBits: obj._blob[5],\n fNumPoints: obj._blob[6],\n fPoints: obj._blob[7],\n fColorRed: obj._blob[8],\n fColorGreen: obj._blob[9],\n fColorBlue: obj._blob[10],\n fColorAlpha: obj._blob[11]\n };\n\n obj.fWidth = obj._blob[12];\n obj.fHeight = obj._blob[13];\n obj.fImgBuf = obj._blob[14];\n\n if ((obj.fWidth * obj.fHeight != obj.fImgBuf.length) ||\n (obj.fPalette.fNumPoints != obj.fPalette.fPoints.length)) {\n console.error(`TASImage _blob decoding error ${obj.fWidth * obj.fHeight} != ${obj.fImgBuf.length} ${obj.fPalette.fNumPoints} != ${obj.fPalette.fPoints.length}`);\n delete obj.fImgBuf;\n delete obj.fPalette;\n }\n\n } else if ((obj._blob.length == 3) && obj._blob[0]) {\n obj.fPngBuf = obj._blob[2];\n if (obj.fPngBuf?.length != obj._blob[1]) {\n console.error(`TASImage with png buffer _blob error ${obj._blob[1]} != ${obj.fPngBuf?.length}`);\n delete obj.fPngBuf;\n }\n } else {\n console.error(`TASImage _blob len ${obj._blob.length} not recognized`);\n }\n\n delete obj._blob;\n }\n\n let promise;\n\n if (obj.fImgBuf && obj.fPalette) {\n promise = this.makeUrlFromImageBuf(obj, fp);\n } else if (obj.fPngBuf) {\n promise = this.makeUrlFromPngBuf(obj);\n } else {\n promise = Promise.resolve({});\n }\n\n return promise.then(res => {\n\n if (res.url)\n this.createG(fp ? true : false)\n .append('image')\n .attr('href', res.url)\n .attr('width', rect.width)\n .attr('height', rect.height)\n .attr('preserveAspectRatio', res.constRatio ? null : 'none');\n\n if (!res.url || !this.isMainPainter() || !res.is_buf || !fp)\n return this;\n\n return this.drawColorPalette(this.options.Zscale, true).then(() => {\n fp.setAxesRanges(create(clTAxis), 0, 1, create(clTAxis), 0, 1, null, 0, 0);\n fp.createXY({ ndim: 2, check_pad_range: false });\n return fp.addInteractivity();\n })\n });\n }\n\n /** @summary Checks if it makes sense to zoom inside specified axis range */\n canZoomInside(axis,min,max) {\n let obj = this.getObject();\n\n if (!obj?.fImgBuf)\n return false;\n\n if ((axis == 'x') && ((max - min) * obj.fWidth > 3)) return true;\n\n if ((axis == 'y') && ((max - min) * obj.fHeight > 3)) return true;\n\n return false;\n }\n\n /** @summary Draw color palette\n * @private */\n async drawColorPalette(enabled, can_move) {\n\n if (!this.isMainPainter())\n return null;\n\n if (!this.draw_palette) {\n let pal = create(clTPaletteAxis);\n Object.assign(pal, { fX1NDC: 0.91, fX2NDC: 0.95, fY1NDC: 0.1, fY2NDC: 0.9, fInit: 1 });\n pal.fAxis.fChopt = '+';\n this.draw_palette = pal;\n this.fPalette = true; // to emulate behaviour of hist painter\n }\n\n let pal_painter = this.getPadPainter().findPainterFor(this.draw_palette);\n\n if (!enabled) {\n if (pal_painter) {\n pal_painter.Enabled = false;\n pal_painter.removeG(); // completely remove drawing without need to redraw complete pad\n }\n return null;\n }\n\n let frame_painter = this.getFramePainter();\n\n // keep palette width\n if (can_move && frame_painter) {\n let pal = this.draw_palette;\n pal.fX2NDC = frame_painter.fX2NDC + 0.01 + (pal.fX2NDC - pal.fX1NDC);\n pal.fX1NDC = frame_painter.fX2NDC + 0.01;\n pal.fY1NDC = frame_painter.fY1NDC;\n pal.fY2NDC = frame_painter.fY2NDC;\n }\n\n if (pal_painter) {\n pal_painter.Enabled = true;\n return pal_painter.drawPave('');\n }\n\n\n let prev_name = this.selectCurrentPad(this.getPadName());\n\n return TPavePainter.draw(this.getDom(), this.draw_palette).then(p => {\n\n pal_painter = p;\n\n this.selectCurrentPad(prev_name);\n // mark painter as secondary - not in list of TCanvas primitives\n pal_painter.$secondary = true;\n\n // make dummy redraw, palette will be updated only from histogram painter\n pal_painter.redraw = function() {};\n });\n }\n\n /** @summary Toggle colz draw option\n * @private */\n toggleColz() {\n let obj = this.getObject(),\n can_toggle = obj && obj.fPalette;\n\n if (can_toggle) {\n this.options.Zscale = !this.options.Zscale;\n this.drawColorPalette(this.options.Zscale, true);\n }\n }\n\n /** @summary Redraw image */\n redraw(reason) {\n let img = this.draw_g ? this.draw_g.select('image') : null,\n fp = this.getFramePainter();\n\n if (img && !img.empty() && (reason !== 'zoom') && fp) {\n img.attr('width', fp.getFrameWidth()).attr('height', fp.getFrameHeight());\n } else {\n return this.drawImage();\n }\n }\n\n /** @summary Process click on TASImage-defined buttons */\n clickButton(funcname) {\n if (!this.isMainPainter()) return false;\n\n switch(funcname) {\n case 'ToggleColorZ': this.toggleColz(); break;\n default: return false;\n }\n\n return true;\n }\n\n /** @summary Fill pad toolbar for TASImage */\n fillToolbar() {\n let pp = this.getPadPainter(), obj = this.getObject();\n if (pp && obj?.fPalette) {\n pp.addPadButton('th2colorz', 'Toggle color palette', 'ToggleColorZ');\n pp.showPadButtons();\n }\n }\n\n /** @summary Draw TASImage object */\n static async draw(dom, obj, opt) {\n let painter = new TASImagePainter(dom, obj, opt);\n painter.decodeOptions(opt);\n return ensureTCanvas(painter, false)\n .then(() => painter.drawImage())\n .then(() => {\n painter.fillToolbar();\n return painter;\n });\n }\n\n} // class TASImagePainter\n\nexport { TASImagePainter };\n"],"x_google_ignoreList":[0]} \ No newline at end of file diff --git a/docs/647.f98f01d9b6ad4c05.js.map b/docs/647.f98f01d9b6ad4c05.js.map deleted file mode 100644 index d8783ef33..000000000 --- a/docs/647.f98f01d9b6ad4c05.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"647.f98f01d9b6ad4c05.js","mappings":"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","names":["TASImagePainter","ObjectPainter","decodeOptions","opt","this","options","Zscale","indexOf","createRGBA","nlevels","obj","getObject","fPalette","rgba","Array","indx","pal","lvl","l","fPoints","length","r1","r2","Math","min","round","fColorRed","fColorGreen","fColorBlue","fColorAlpha","makeUrlFromImageBuf","fp","_this","fImgBuf","max","k","v","fContour","arr","getLevels","getPaletteColor","zval","toHex","xmin","xmax","fWidth","ymin","ymax","fHeight","zoom_xmin","zoom_xmax","zoom_ymin","zoom_ymax","isNodeJs","__webpack_require__","then","h","default","createCanvas","Promise","resolveFunc","c","document","createElement","width","height","canvas","context","getContext","imageData","getImageData","data","i","dst","row","j","iii","putImageData","url","toDataURL","constRatio","fConstRatio","is_buf","makeUrlFromPngBuf","buf","fPngBuf","pngbuf","isStr","String","fromCharCode","btoa_func","drawImage","promise","_this2","getFramePainter","rect","getFrameRect","getPadPainter","getPadRect","wheel_zoomy","_blob","console","error","fImageQuality","fImageCompression","_typename","fUniqueID","fBits","fNumPoints","resolve","res","createG","append","attr","isMainPainter","drawColorPalette","setAxesRanges","create","clTAxis","createXY","ndim","check_pad_range","addInteractivity","canZoomInside","axis","enabled","can_move","_this3","draw_palette","clTPaletteAxis","Object","assign","fX1NDC","fX2NDC","fY1NDC","fY2NDC","fInit","fAxis","fChopt","pal_painter","findPainterFor","Enabled","removeG","frame_painter","drawPave","prev_name","selectCurrentPad","getPadName","TPavePainter","getDom","p","$secondary","redraw","toggleColz","reason","img","draw_g","select","empty","getFrameWidth","getFrameHeight","clickButton","funcname","fillToolbar","pp","addPadButton","showPadButtons","static","dom","painter","ensureTCanvas"],"sourceRoot":"webpack:///","sources":["../node_modules/jsroot/modules/draw/TASImagePainter.mjs"],"sourcesContent":["import { create, isNodeJs, isStr, btoa_func, clTPave, clTGaxis, clTAxis, clTPaletteAxis } from '../core.mjs';\nimport { toHex } from '../base/colors.mjs';\nimport { ObjectPainter } from '../base/ObjectPainter.mjs';\nimport { TPavePainter } from '../hist/TPavePainter.mjs';\nimport { ensureTCanvas } from '../gpad/TCanvasPainter.mjs';\n\n/**\n * @summary Painter for TASImage object.\n *\n * @private\n */\n\nclass TASImagePainter extends ObjectPainter {\n\n /** @summary Decode options string */\n decodeOptions(opt) {\n this.options = { Zscale: false };\n\n if (opt && (opt.indexOf('z') >= 0)) this.options.Zscale = true;\n }\n\n /** @summary Create RGBA buffers */\n createRGBA(nlevels) {\n let obj = this.getObject();\n\n if (!obj?.fPalette) return null;\n\n let rgba = new Array((nlevels+1) * 4), indx = 1, pal = obj.fPalette; // precaclucated colors\n\n for(let lvl = 0; lvl <= nlevels; ++lvl) {\n let l = 1.*lvl/nlevels;\n while ((pal.fPoints[indx] < l) && (indx < pal.fPoints.length-1)) indx++;\n\n let r1 = (pal.fPoints[indx] - l) / (pal.fPoints[indx] - pal.fPoints[indx-1]),\n r2 = (l - pal.fPoints[indx-1]) / (pal.fPoints[indx] - pal.fPoints[indx-1]);\n\n rgba[lvl*4] = Math.min(255, Math.round((pal.fColorRed[indx-1] * r1 + pal.fColorRed[indx] * r2) / 256));\n rgba[lvl*4+1] = Math.min(255, Math.round((pal.fColorGreen[indx-1] * r1 + pal.fColorGreen[indx] * r2) / 256));\n rgba[lvl*4+2] = Math.min(255, Math.round((pal.fColorBlue[indx-1] * r1 + pal.fColorBlue[indx] * r2) / 256));\n rgba[lvl*4+3] = Math.min(255, Math.round((pal.fColorAlpha[indx-1] * r1 + pal.fColorAlpha[indx] * r2) / 256));\n }\n\n return rgba;\n }\n\n /** @summary Create url using image buffer\n * @private */\n async makeUrlFromImageBuf(obj, fp) {\n\n let nlevels = 1000;\n this.rgba = this.createRGBA(nlevels); // precaclucated colors\n\n let min = obj.fImgBuf[0], max = obj.fImgBuf[0];\n for (let k = 1; k < obj.fImgBuf.length; ++k) {\n let v = obj.fImgBuf[k];\n min = Math.min(v, min);\n max = Math.max(v, max);\n }\n\n // does not work properly in Node.js, causes 'Maximum call stack size exceeded' error\n // min = Math.min.apply(null, obj.fImgBuf),\n // max = Math.max.apply(null, obj.fImgBuf);\n\n // create countor like in hist painter to allow palette drawing\n this.fContour = {\n arr: new Array(200),\n rgba: this.rgba,\n getLevels() { return this.arr; },\n getPaletteColor(pal, zval) {\n if (!this.arr || !this.rgba) return 'white';\n let indx = Math.round((zval - this.arr[0]) / (this.arr[this.arr.length-1] - this.arr[0]) * (this.rgba.length-4)/4) * 4;\n return '#' + toHex(this.rgba[indx],1) + toHex(this.rgba[indx+1],1) + toHex(this.rgba[indx+2],1) + toHex(this.rgba[indx+3],1);\n }\n };\n for (let k = 0; k < 200; k++)\n this.fContour.arr[k] = min + (max-min)/(200-1)*k;\n\n if (min >= max) max = min + 1;\n\n let xmin = 0, xmax = obj.fWidth, ymin = 0, ymax = obj.fHeight; // dimension in pixels\n\n if (fp && (fp.zoom_xmin != fp.zoom_xmax)) {\n xmin = Math.round(fp.zoom_xmin * obj.fWidth);\n xmax = Math.round(fp.zoom_xmax * obj.fWidth);\n }\n\n if (fp && (fp.zoom_ymin != fp.zoom_ymax)) {\n ymin = Math.round(fp.zoom_ymin * obj.fHeight);\n ymax = Math.round(fp.zoom_ymax * obj.fHeight);\n }\n\n let pr = isNodeJs() ?\n import('canvas').then(h => h.default.createCanvas(xmax - xmin, ymax - ymin)) :\n new Promise(resolveFunc => {\n let c = document.createElement('canvas');\n c.width = xmax - xmin;\n c.height = ymax - ymin;\n resolveFunc(c);\n });\n\n return pr.then(canvas => {\n\n let context = canvas.getContext('2d'),\n imageData = context.getImageData(0, 0, canvas.width, canvas.height),\n arr = imageData.data;\n\n for(let i = ymin; i < ymax; ++i) {\n let dst = (ymax - i - 1) * (xmax - xmin) * 4,\n row = i * obj.fWidth;\n for(let j = xmin; j < xmax; ++j) {\n let iii = Math.round((obj.fImgBuf[row + j] - min) / (max - min) * nlevels) * 4;\n // copy rgba value for specified point\n arr[dst++] = this.rgba[iii++];\n arr[dst++] = this.rgba[iii++];\n arr[dst++] = this.rgba[iii++];\n arr[dst++] = this.rgba[iii++];\n }\n }\n\n context.putImageData(imageData, 0, 0);\n\n return { url: canvas.toDataURL(), constRatio: obj.fConstRatio, is_buf: true };\n });\n }\n\n /** @summary Produce data url from png data */\n async makeUrlFromPngBuf(obj) {\n let buf = obj.fPngBuf, pngbuf = '';\n\n if (isStr(buf))\n pngbuf = buf;\n else\n for (let k = 0; k < buf.length; ++k)\n pngbuf += String.fromCharCode(buf[k] < 0 ? 256 + buf[k] : buf[k]);\n\n return { url: 'data:image/png;base64,' + btoa_func(pngbuf), constRatio: true };\n }\n\n /** @summary Draw image */\n async drawImage() {\n let obj = this.getObject(),\n fp = this.getFramePainter(),\n rect = fp ? fp.getFrameRect() : this.getPadPainter().getPadRect();\n\n this.wheel_zoomy = true;\n\n if (obj._blob) {\n // try to process blob data due to custom streamer\n if ((obj._blob.length == 15) && !obj._blob[0]) {\n obj.fImageQuality = obj._blob[1];\n obj.fImageCompression = obj._blob[2];\n obj.fConstRatio = obj._blob[3];\n obj.fPalette = {\n _typename: 'TImagePalette',\n fUniqueID: obj._blob[4],\n fBits: obj._blob[5],\n fNumPoints: obj._blob[6],\n fPoints: obj._blob[7],\n fColorRed: obj._blob[8],\n fColorGreen: obj._blob[9],\n fColorBlue: obj._blob[10],\n fColorAlpha: obj._blob[11]\n };\n\n obj.fWidth = obj._blob[12];\n obj.fHeight = obj._blob[13];\n obj.fImgBuf = obj._blob[14];\n\n if ((obj.fWidth * obj.fHeight != obj.fImgBuf.length) ||\n (obj.fPalette.fNumPoints != obj.fPalette.fPoints.length)) {\n console.error(`TASImage _blob decoding error ${obj.fWidth * obj.fHeight} != ${obj.fImgBuf.length} ${obj.fPalette.fNumPoints} != ${obj.fPalette.fPoints.length}`);\n delete obj.fImgBuf;\n delete obj.fPalette;\n }\n\n } else if ((obj._blob.length == 3) && obj._blob[0]) {\n obj.fPngBuf = obj._blob[2];\n if (obj.fPngBuf?.length != obj._blob[1]) {\n console.error(`TASImage with png buffer _blob error ${obj._blob[1]} != ${obj.fPngBuf?.length}`);\n delete obj.fPngBuf;\n }\n } else {\n console.error(`TASImage _blob len ${obj._blob.length} not recognized`);\n }\n\n delete obj._blob;\n }\n\n let promise;\n\n if (obj.fImgBuf && obj.fPalette) {\n promise = this.makeUrlFromImageBuf(obj, fp);\n } else if (obj.fPngBuf) {\n promise = this.makeUrlFromPngBuf(obj);\n } else {\n promise = Promise.resolve({});\n }\n\n return promise.then(res => {\n\n if (res.url)\n this.createG(fp ? true : false)\n .append('image')\n .attr('href', res.url)\n .attr('width', rect.width)\n .attr('height', rect.height)\n .attr('preserveAspectRatio', res.constRatio ? null : 'none');\n\n if (!res.url || !this.isMainPainter() || !res.is_buf || !fp)\n return this;\n\n return this.drawColorPalette(this.options.Zscale, true).then(() => {\n fp.setAxesRanges(create(clTAxis), 0, 1, create(clTAxis), 0, 1, null, 0, 0);\n fp.createXY({ ndim: 2, check_pad_range: false });\n return fp.addInteractivity();\n })\n });\n }\n\n /** @summary Checks if it makes sense to zoom inside specified axis range */\n canZoomInside(axis,min,max) {\n let obj = this.getObject();\n\n if (!obj?.fImgBuf)\n return false;\n\n if ((axis == 'x') && ((max - min) * obj.fWidth > 3)) return true;\n\n if ((axis == 'y') && ((max - min) * obj.fHeight > 3)) return true;\n\n return false;\n }\n\n /** @summary Draw color palette\n * @private */\n async drawColorPalette(enabled, can_move) {\n\n if (!this.isMainPainter())\n return null;\n\n if (!this.draw_palette) {\n let pal = create(clTPaletteAxis);\n Object.assign(pal, { fX1NDC: 0.91, fX2NDC: 0.95, fY1NDC: 0.1, fY2NDC: 0.9, fInit: 1 });\n pal.fAxis.fChopt = '+';\n this.draw_palette = pal;\n this.fPalette = true; // to emulate behaviour of hist painter\n }\n\n let pal_painter = this.getPadPainter().findPainterFor(this.draw_palette);\n\n if (!enabled) {\n if (pal_painter) {\n pal_painter.Enabled = false;\n pal_painter.removeG(); // completely remove drawing without need to redraw complete pad\n }\n return null;\n }\n\n let frame_painter = this.getFramePainter();\n\n // keep palette width\n if (can_move && frame_painter) {\n let pal = this.draw_palette;\n pal.fX2NDC = frame_painter.fX2NDC + 0.01 + (pal.fX2NDC - pal.fX1NDC);\n pal.fX1NDC = frame_painter.fX2NDC + 0.01;\n pal.fY1NDC = frame_painter.fY1NDC;\n pal.fY2NDC = frame_painter.fY2NDC;\n }\n\n if (pal_painter) {\n pal_painter.Enabled = true;\n return pal_painter.drawPave('');\n }\n\n\n let prev_name = this.selectCurrentPad(this.getPadName());\n\n return TPavePainter.draw(this.getDom(), this.draw_palette).then(p => {\n\n pal_painter = p;\n\n this.selectCurrentPad(prev_name);\n // mark painter as secondary - not in list of TCanvas primitives\n pal_painter.$secondary = true;\n\n // make dummy redraw, palette will be updated only from histogram painter\n pal_painter.redraw = function() {};\n });\n }\n\n /** @summary Toggle colz draw option\n * @private */\n toggleColz() {\n let obj = this.getObject(),\n can_toggle = obj && obj.fPalette;\n\n if (can_toggle) {\n this.options.Zscale = !this.options.Zscale;\n this.drawColorPalette(this.options.Zscale, true);\n }\n }\n\n /** @summary Redraw image */\n redraw(reason) {\n let img = this.draw_g ? this.draw_g.select('image') : null,\n fp = this.getFramePainter();\n\n if (img && !img.empty() && (reason !== 'zoom') && fp) {\n img.attr('width', fp.getFrameWidth()).attr('height', fp.getFrameHeight());\n } else {\n return this.drawImage();\n }\n }\n\n /** @summary Process click on TASImage-defined buttons */\n clickButton(funcname) {\n if (!this.isMainPainter()) return false;\n\n switch(funcname) {\n case 'ToggleColorZ': this.toggleColz(); break;\n default: return false;\n }\n\n return true;\n }\n\n /** @summary Fill pad toolbar for TASImage */\n fillToolbar() {\n let pp = this.getPadPainter(), obj = this.getObject();\n if (pp && obj?.fPalette) {\n pp.addPadButton('th2colorz', 'Toggle color palette', 'ToggleColorZ');\n pp.showPadButtons();\n }\n }\n\n /** @summary Draw TASImage object */\n static async draw(dom, obj, opt) {\n let painter = new TASImagePainter(dom, obj, opt);\n painter.decodeOptions(opt);\n return ensureTCanvas(painter, false)\n .then(() => painter.drawImage())\n .then(() => {\n painter.fillToolbar();\n return painter;\n });\n }\n\n} // class TASImagePainter\n\nexport { TASImagePainter };\n"],"x_google_ignoreList":[0]} \ No newline at end of file diff --git a/docs/717.a696fd693dce2cca.js.map b/docs/717.a696fd693dce2cca.js.map deleted file mode 100644 index 0ca9ebc9b..000000000 --- a/docs/717.a696fd693dce2cca.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"717.a696fd693dce2cca.js","mappings":"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","names":["TMultiGraphPainter","ObjectPainter","constructor","dom","mgraph","super","this","firstpainter","autorange","painters","cleanup","updateObject","obj","matchObjectType","getObject","graphs","fGraphs","pp","getPadPainter","fTitle","isany","histo","fHistogram","scanGraphsRange","i","arr","length","fFunctions","forEach","func","_typename","fName","findPainterFor","pad","maximum","minimum","logx","logy","time_display","time_format","rw","xmin","xmax","ymin","ymax","first","fLogx","fLogy","fUxmin","fUxmax","fUymin","fUymax","_3d","fXaxis","fLabels","fTimeDisplay","fTimeFormat","gr","fNpoints","fX","fY","Math","min","max","dx","dy","uxmin","uxmax","log10","glob_minimum","glob_maximum","fMinimum","kNoZoom","fMaximum","xaxis","yaxis","create","fXmin","fXmax","fNbins","clTHashList","lbl","clTObjString","fString","fUniqueID","Add","fYaxis","fZaxis","indexOf","t","split","axis","drawAxisHist","hopt","TH1Painter","_this","getDom","drawNextFunction","indx","_this2","drawObject","opt","then","drawGraph","TGraphPainter","_this3","drawNextGraph","_this4","_pfc","_plc","_pmc","mp","getMainPainter","isFunc","createAutoColor","icolor","fFillColor","fLineColor","fMarkerColor","subp","push","static","painter","d","DrawOptions","check","name","promise","Promise","resolve","getRootPad","ap","$secondary","$primary","addToPadPrimitives","remain","_drawMG","TMultiGraphPainter2D","TH2Painter","pos3d"],"sourceRoot":"webpack:///","sources":["../node_modules/jsroot/modules/hist2d/TMultiGraphPainter.mjs","../node_modules/jsroot/modules/hist/TMultiGraphPainter.mjs"],"sourcesContent":["import { create, isFunc, clTObjString, clTHashList, kNoZoom } from '../core.mjs';\nimport { DrawOptions } from '../base/BasePainter.mjs';\nimport { ObjectPainter } from '../base/ObjectPainter.mjs';\nimport { TH1Painter } from './TH1Painter.mjs';\nimport { TGraphPainter } from './TGraphPainter.mjs';\n\n/**\n * @summary Painter for TMultiGraph object.\n *\n * @private\n */\n\nclass TMultiGraphPainter extends ObjectPainter {\n\n /** @summary Create painter\n * @param {object|string} dom - DOM element for drawing or element id\n * @param {object} obj - TMultiGraph object to draw */\n constructor(dom, mgraph) {\n super(dom, mgraph);\n this.firstpainter = null;\n this.autorange = false;\n this.painters = []; // keep painters to be able update objects\n }\n\n /** @summary Cleanup multigraph painter */\n cleanup() {\n this.painters = [];\n super.cleanup();\n }\n\n /** @summary Update multigraph object */\n updateObject(obj) {\n if (!this.matchObjectType(obj)) return false;\n\n let mgraph = this.getObject(),\n graphs = obj.fGraphs,\n pp = this.getPadPainter();\n\n mgraph.fTitle = obj.fTitle;\n\n let isany = false;\n if (this.firstpainter) {\n let histo = obj.fHistogram;\n if (this.autorange && !histo)\n histo = this.scanGraphsRange(graphs);\n\n if (this.firstpainter.updateObject(histo))\n isany = true;\n }\n\n for (let i = 0; i < graphs.arr.length; ++i)\n if ((i < this.painters.length) && this.painters[i].updateObject(graphs.arr[i]))\n isany = true;\n\n obj.fFunctions?.arr?.forEach(func => {\n if (func?._typename && func?.fName)\n pp?.findPainterFor(null, func.fName, func._typename)?.updateObject(func);\n });\n\n return isany;\n }\n\n /** @summary Scan graphs range\n * @return {object} histogram for axes drawing */\n scanGraphsRange(graphs, histo, pad) {\n let mgraph = this.getObject(),\n maximum, minimum, logx = false, logy = false,\n time_display = false, time_format = '',\n rw = { xmin: 0, xmax: 0, ymin: 0, ymax: 0, first: true };\n\n if (pad) {\n logx = pad.fLogx;\n logy = pad.fLogy;\n rw.xmin = pad.fUxmin;\n rw.xmax = pad.fUxmax;\n rw.ymin = pad.fUymin;\n rw.ymax = pad.fUymax;\n rw.first = false;\n }\n\n // ignore existing histo in 3d case\n if (this._3d && histo && !histo.fXaxis.fLabels)\n histo = null;\n\n if (!histo) {\n this.autorange = true;\n\n if (graphs.arr[0]?.fHistogram?.fXaxis?.fTimeDisplay) {\n time_display = true;\n time_format = graphs.arr[0].fHistogram.fXaxis.fTimeFormat;\n }\n }\n\n graphs.arr.forEach(gr => {\n if (gr.fNpoints == 0) return;\n if (rw.first) {\n rw.xmin = rw.xmax = gr.fX[0];\n rw.ymin = rw.ymax = gr.fY[0];\n rw.first = false;\n }\n for (let i = 0; i < gr.fNpoints; ++i) {\n rw.xmin = Math.min(rw.xmin, gr.fX[i]);\n rw.xmax = Math.max(rw.xmax, gr.fX[i]);\n rw.ymin = Math.min(rw.ymin, gr.fY[i]);\n rw.ymax = Math.max(rw.ymax, gr.fY[i]);\n }\n });\n\n if (rw.xmin == rw.xmax)\n rw.xmax += 1.;\n if (rw.ymin == rw.ymax)\n rw.ymax += 1.;\n let dx = 0.05 * (rw.xmax - rw.xmin),\n dy = 0.05 * (rw.ymax - rw.ymin),\n uxmin = rw.xmin - dx,\n uxmax = rw.xmax + dx;\n if (logy) {\n if (rw.ymin <= 0)\n rw.ymin = 0.001 * rw.ymax;\n minimum = rw.ymin / (1 + 0.5 * Math.log10(rw.ymax / rw.ymin));\n maximum = rw.ymax * (1 + 0.2 * Math.log10(rw.ymax / rw.ymin));\n } else {\n minimum = rw.ymin - dy;\n maximum = rw.ymax + dy;\n }\n if (minimum < 0 && rw.ymin >= 0)\n minimum = 0;\n if (maximum > 0 && rw.ymax <= 0)\n maximum = 0;\n\n let glob_minimum = minimum, glob_maximum = maximum;\n\n if (uxmin < 0 && rw.xmin >= 0)\n uxmin = logx ? 0.9 * rw.xmin : 0;\n if (uxmax > 0 && rw.xmax <= 0)\n uxmax = logx? 1.1 * rw.xmax : 0;\n\n if (mgraph.fMinimum != kNoZoom)\n rw.ymin = minimum = mgraph.fMinimum;\n if (mgraph.fMaximum != kNoZoom)\n rw.ymax = maximum = mgraph.fMaximum;\n\n if (minimum < 0 && rw.ymin >= 0 && logy)\n minimum = 0.9 * rw.ymin;\n if (maximum > 0 && rw.ymax <= 0 && logy)\n maximum = 1.1 * rw.ymax;\n if (minimum <= 0 && logy)\n minimum = 0.001 * maximum;\n if (!logy && minimum > 0 && minimum < 0.05*maximum)\n minimum = 0;\n if (uxmin <= 0 && logx)\n uxmin = (uxmax > 1000) ? 1 : 0.001 * uxmax;\n\n // Create a temporary histogram to draw the axis (if necessary)\n if (!histo) {\n let xaxis, yaxis;\n if (this._3d) {\n histo = create('TH2I');\n xaxis = histo.fXaxis;\n xaxis.fXmin = 0;\n xaxis.fXmax = graphs.arr.length;\n xaxis.fNbins = graphs.arr.length;\n xaxis.fLabels = create(clTHashList);\n for (let i = 0; i < graphs.arr.length; i++) {\n let lbl = create(clTObjString);\n lbl.fString = graphs.arr[i].fTitle || `gr${i}`;\n lbl.fUniqueID = graphs.arr.length - i; // graphs drawn in reverse order\n xaxis.fLabels.Add(lbl, '');\n }\n xaxis = histo.fYaxis;\n yaxis = histo.fZaxis;\n } else {\n histo = create('TH1I');\n xaxis = histo.fXaxis;\n yaxis = histo.fYaxis;\n }\n histo.fTitle = mgraph.fTitle;\n if (histo.fTitle.indexOf(';') >= 0) {\n let t = histo.fTitle.split(';');\n histo.fTitle = t[0];\n if (t[1]) xaxis.fTitle = t[1];\n if (t[2]) yaxis.fTitle = t[2];\n }\n\n xaxis.fXmin = uxmin;\n xaxis.fXmax = uxmax;\n xaxis.fTimeDisplay = time_display;\n if (time_display) xaxis.fTimeFormat = time_format;\n }\n\n let axis = this._3d ? histo.fZaxis : histo.fYaxis;\n axis.fXmin = Math.min(minimum, glob_minimum);\n axis.fXmax = Math.max(maximum, glob_maximum);\n histo.fMinimum = minimum;\n histo.fMaximum = maximum;\n\n return histo;\n }\n\n /** @summary draw speical histogram for axis\n * @return {Promise} when ready */\n async drawAxisHist(histo, hopt) {\n return TH1Painter.draw(this.getDom(), histo, 'AXIS' + hopt);\n }\n\n /** @summary method draws next function from the functions list */\n async drawNextFunction(indx) {\n\n let mgraph = this.getObject();\n\n if (!mgraph.fFunctions || (indx >= mgraph.fFunctions.arr.length))\n return this;\n\n let pp = this.getPadPainter()\n\n return pp.drawObject(this.getDom(), mgraph.fFunctions.arr[indx], mgraph.fFunctions.opt[indx])\n .then(() => this.drawNextFunction(indx+1));\n }\n\n /** @summary Draw graph */\n async drawGraph(gr, opt /*, pos3d */ ) {\n return TGraphPainter.draw(this.getDom(), gr, opt);\n }\n\n /** @summary method draws next graph */\n async drawNextGraph(indx, opt) {\n\n let graphs = this.getObject().fGraphs;\n\n // at the end of graphs drawing draw functions (if any)\n if (indx >= graphs.arr.length) {\n this._pfc = this._plc = this._pmc = false; // disable auto coloring at the end\n return this.drawNextFunction(0);\n }\n\n // if there is auto colors assignment, try to provide it\n if (this._pfc || this._plc || this._pmc) {\n let mp = this.getMainPainter();\n if (isFunc(mp?.createAutoColor)) {\n let icolor = mp.createAutoColor(graphs.arr.length);\n if (this._pfc) graphs.arr[indx].fFillColor = icolor;\n if (this._plc) graphs.arr[indx].fLineColor = icolor;\n if (this._pmc) graphs.arr[indx].fMarkerColor = icolor;\n }\n }\n\n let o = graphs.opt[indx] || opt || '';\n\n return this.drawGraph(graphs.arr[indx], o, graphs.arr.length - indx).then(subp => {\n if (subp) this.painters.push(subp);\n\n return this.drawNextGraph(indx+1, opt);\n });\n }\n\n /** @summary Draw multigraph object using painter instance\n * @private */\n static async _drawMG(painter, opt) {\n\n let d = new DrawOptions(opt);\n\n painter._3d = d.check('3D');\n painter._pfc = d.check('PFC');\n painter._plc = d.check('PLC');\n painter._pmc = d.check('PMC');\n\n let hopt = '', checkhopt = ['USE_PAD_TITLE', 'LOGXY', 'LOGX', 'LOGY', 'LOGZ', 'GRIDXY', 'GRIDX', 'GRIDY', 'TICKXY', 'TICKX', 'TICKY', 'FB'];\n checkhopt.forEach(name => { if (d.check(name)) hopt += ';' + name; });\n\n let promise = Promise.resolve(true);\n if (d.check('A') || !painter.getMainPainter()) {\n let mgraph = painter.getObject(),\n pp = painter.getPadPainter(),\n histo = painter.scanGraphsRange(mgraph.fGraphs, mgraph.fHistogram, pp?.getRootPad(true));\n\n promise = painter.drawAxisHist(histo, hopt).then(ap => {\n painter.firstpainter = ap;\n ap.$secondary = 'hist'; // mark histogram painter as secondary\n if (mgraph.fHistogram) painter.$primary = true; // mark mg painter as primary\n });\n }\n\n return promise.then(() => {\n painter.addToPadPrimitives();\n return painter.drawNextGraph(0, d.remain());\n });\n }\n\n /** @summary Draw TMultiGraph object */\n static async draw(dom, mgraph, opt) {\n return TMultiGraphPainter._drawMG(new TMultiGraphPainter(dom, mgraph), opt);\n }\n\n} // class TMultiGraphPainter\n\n\nexport { TMultiGraphPainter };\n","import { TMultiGraphPainter as TMultiGraphPainter2D } from '../hist2d/TMultiGraphPainter.mjs';\nimport { TH1Painter } from '../hist2d/TH1Painter.mjs';\nimport { TH2Painter } from './TH2Painter.mjs';\nimport { TGraphPainter } from './TGraphPainter.mjs';\n\n\nclass TMultiGraphPainter extends TMultiGraphPainter2D {\n\n /** @summary draw speical histogram for axis\n * @return {Promise} when ready */\n async drawAxisHist(histo, hopt) {\n return this._3d ? TH2Painter.draw(this.getDom(), histo, 'AXIS3D' + hopt)\n : TH1Painter.draw(this.getDom(), histo, 'AXIS' + hopt);\n }\n\n /** @summary draw multigraph in 3D */\n async drawGraph(gr, opt, pos3d) {\n if (this._3d) opt += 'pos3d_'+pos3d;\n return TGraphPainter.draw(this.getDom(), gr, opt);\n }\n\n /** @summary Draw TMultiGraph object */\n static async draw(dom, mgraph, opt) {\n return TMultiGraphPainter._drawMG(new TMultiGraphPainter(dom, mgraph), opt);\n }\n\n} // class TMultiGraphPainter\n\nexport { TMultiGraphPainter };\n"],"x_google_ignoreList":[0,1]} \ No newline at end of file diff --git a/docs/717.a696fd693dce2cca.js b/docs/717.d2379237233310ff.js similarity index 97% rename from docs/717.a696fd693dce2cca.js rename to docs/717.d2379237233310ff.js index 431b8c6c9..044516228 100644 --- a/docs/717.a696fd693dce2cca.js +++ b/docs/717.d2379237233310ff.js @@ -1,2 +1,2 @@ -"use strict";(self.webpackChunkphoenix_app=self.webpackChunkphoenix_app||[]).push([[717],{3717:(N,X,x)=>{x.r(X),x.d(X,{TMultiGraphPainter:()=>G});var u=x(4788),h=x(9542),D=x(3675),F=x(6458),w=x(9670),H=x(8241);class T extends F.tK{constructor(t,r){super(t,r),this.firstpainter=null,this.autorange=!1,this.painters=[]}cleanup(){this.painters=[],super.cleanup()}updateObject(t){if(!this.matchObjectType(t))return!1;let r=this.getObject(),a=t.fGraphs,f=this.getPadPainter();r.fTitle=t.fTitle;let m=!1;if(this.firstpainter){let e=t.fHistogram;this.autorange&&!e&&(e=this.scanGraphsRange(a)),this.firstpainter.updateObject(e)&&(m=!0)}for(let e=0;e{e?._typename&&e?.fName&&f?.findPainterFor(null,e.fName,e._typename)?.updateObject(e)}),m}scanGraphsRange(t,r,a){let m,e,f=this.getObject(),s=!1,o=!1,y=!1,p="",i={xmin:0,xmax:0,ymin:0,ymax:0,first:!0};a&&(s=a.fLogx,o=a.fLogy,i.xmin=a.fUxmin,i.xmax=a.fUxmax,i.ymin=a.fUymin,i.ymax=a.fUymax,i.first=!1),this._3d&&r&&!r.fXaxis.fLabels&&(r=null),r||(this.autorange=!0,t.arr[0]?.fHistogram?.fXaxis?.fTimeDisplay&&(y=!0,p=t.arr[0].fHistogram.fXaxis.fTimeFormat)),t.arr.forEach(n=>{if(0!=n.fNpoints){i.first&&(i.xmin=i.xmax=n.fX[0],i.ymin=i.ymax=n.fY[0],i.first=!1);for(let c=0;c=0&&(e=0),m>0&&i.ymax<=0&&(m=0);let I=e,L=m;if(g<0&&i.xmin>=0&&(g=s?.9*i.xmin:0),d>0&&i.xmax<=0&&(d=s?1.1*i.xmax:0),f.fMinimum!=h.kNoZoom&&(i.ymin=e=f.fMinimum),f.fMaximum!=h.kNoZoom&&(i.ymax=m=f.fMaximum),e<0&&i.ymin>=0&&o&&(e=.9*i.ymin),m>0&&i.ymax<=0&&o&&(m=1.1*i.ymax),e<=0&&o&&(e=.001*m),!o&&e>0&&e<.05*m&&(e=0),g<=0&&s&&(g=d>1e3?1:.001*d),!r){let n,c;if(this._3d){n=(r=(0,h.create)("TH2I")).fXaxis,n.fXmin=0,n.fXmax=t.arr.length,n.fNbins=t.arr.length,n.fLabels=(0,h.create)(h.clTHashList);for(let l=0;l=0){let l=r.fTitle.split(";");r.fTitle=l[0],l[1]&&(n.fTitle=l[1]),l[2]&&(c.fTitle=l[2])}n.fXmin=g,n.fXmax=d,n.fTimeDisplay=y,y&&(n.fTimeFormat=p)}let v=this._3d?r.fZaxis:r.fYaxis;return v.fXmin=Math.min(e,I),v.fXmax=Math.max(m,L),r.fMinimum=e,r.fMaximum=m,r}drawAxisHist(t,r){var a=this;return(0,u.Z)(function*(){return w.f.draw(a.getDom(),t,"AXIS"+r)})()}drawNextFunction(t){var r=this;return(0,u.Z)(function*(){let a=r.getObject();return!a.fFunctions||t>=a.fFunctions.arr.length?r:r.getPadPainter().drawObject(r.getDom(),a.fFunctions.arr[t],a.fFunctions.opt[t]).then(()=>r.drawNextFunction(t+1))})()}drawGraph(t,r){var a=this;return(0,u.Z)(function*(){return H.TGraphPainter.draw(a.getDom(),t,r)})()}drawNextGraph(t,r){var a=this;return(0,u.Z)(function*(){let f=a.getObject().fGraphs;if(t>=f.arr.length)return a._pfc=a._plc=a._pmc=!1,a.drawNextFunction(0);if(a._pfc||a._plc||a._pmc){let e=a.getMainPainter();if((0,h.isFunc)(e?.createAutoColor)){let s=e.createAutoColor(f.arr.length);a._pfc&&(f.arr[t].fFillColor=s),a._plc&&(f.arr[t].fLineColor=s),a._pmc&&(f.arr[t].fMarkerColor=s)}}return a.drawGraph(f.arr[t],f.opt[t]||r||"",f.arr.length-t).then(e=>(e&&a.painters.push(e),a.drawNextGraph(t+1,r)))})()}static _drawMG(t,r){return(0,u.Z)(function*(){let a=new D.pc(r);t._3d=a.check("3D"),t._pfc=a.check("PFC"),t._plc=a.check("PLC"),t._pmc=a.check("PMC");let f="";["USE_PAD_TITLE","LOGXY","LOGX","LOGY","LOGZ","GRIDXY","GRIDX","GRIDY","TICKXY","TICKX","TICKY","FB"].forEach(s=>{a.check(s)&&(f+=";"+s)});let e=Promise.resolve(!0);if(a.check("A")||!t.getMainPainter()){let s=t.getObject(),o=t.getPadPainter(),y=t.scanGraphsRange(s.fGraphs,s.fHistogram,o?.getRootPad(!0));e=t.drawAxisHist(y,f).then(p=>{t.firstpainter=p,p.$secondary="hist",s.fHistogram&&(t.$primary=!0)})}return e.then(()=>(t.addToPadPrimitives(),t.drawNextGraph(0,a.remain())))})()}static draw(t,r,a){return(0,u.Z)(function*(){return T._drawMG(new T(t,r),a)})()}}var Z=x(8189),C=x(3761);class G extends T{drawAxisHist(t,r){var a=this;return(0,u.Z)(function*(){return a._3d?Z.TH2Painter.draw(a.getDom(),t,"AXIS3D"+r):w.f.draw(a.getDom(),t,"AXIS"+r)})()}drawGraph(t,r,a){var f=this;return(0,u.Z)(function*(){return f._3d&&(r+="pos3d_"+a),C.o.draw(f.getDom(),t,r)})()}static draw(t,r,a){return(0,u.Z)(function*(){return G._drawMG(new G(t,r),a)})()}}}}]); -//# sourceMappingURL=717.a696fd693dce2cca.js.map \ No newline at end of file +"use strict";(self.webpackChunkphoenix_app=self.webpackChunkphoenix_app||[]).push([[717],{3717:(N,X,x)=>{x.r(X),x.d(X,{TMultiGraphPainter:()=>G});var u=x(5835),h=x(9542),D=x(3675),F=x(6458),w=x(9670),H=x(8241);class T extends F.tK{constructor(t,r){super(t,r),this.firstpainter=null,this.autorange=!1,this.painters=[]}cleanup(){this.painters=[],super.cleanup()}updateObject(t){if(!this.matchObjectType(t))return!1;let r=this.getObject(),a=t.fGraphs,f=this.getPadPainter();r.fTitle=t.fTitle;let m=!1;if(this.firstpainter){let e=t.fHistogram;this.autorange&&!e&&(e=this.scanGraphsRange(a)),this.firstpainter.updateObject(e)&&(m=!0)}for(let e=0;e{e?._typename&&e?.fName&&f?.findPainterFor(null,e.fName,e._typename)?.updateObject(e)}),m}scanGraphsRange(t,r,a){let m,e,f=this.getObject(),s=!1,o=!1,y=!1,p="",i={xmin:0,xmax:0,ymin:0,ymax:0,first:!0};a&&(s=a.fLogx,o=a.fLogy,i.xmin=a.fUxmin,i.xmax=a.fUxmax,i.ymin=a.fUymin,i.ymax=a.fUymax,i.first=!1),this._3d&&r&&!r.fXaxis.fLabels&&(r=null),r||(this.autorange=!0,t.arr[0]?.fHistogram?.fXaxis?.fTimeDisplay&&(y=!0,p=t.arr[0].fHistogram.fXaxis.fTimeFormat)),t.arr.forEach(n=>{if(0!=n.fNpoints){i.first&&(i.xmin=i.xmax=n.fX[0],i.ymin=i.ymax=n.fY[0],i.first=!1);for(let c=0;c=0&&(e=0),m>0&&i.ymax<=0&&(m=0);let I=e,L=m;if(g<0&&i.xmin>=0&&(g=s?.9*i.xmin:0),d>0&&i.xmax<=0&&(d=s?1.1*i.xmax:0),f.fMinimum!=h.kNoZoom&&(i.ymin=e=f.fMinimum),f.fMaximum!=h.kNoZoom&&(i.ymax=m=f.fMaximum),e<0&&i.ymin>=0&&o&&(e=.9*i.ymin),m>0&&i.ymax<=0&&o&&(m=1.1*i.ymax),e<=0&&o&&(e=.001*m),!o&&e>0&&e<.05*m&&(e=0),g<=0&&s&&(g=d>1e3?1:.001*d),!r){let n,c;if(this._3d){n=(r=(0,h.create)("TH2I")).fXaxis,n.fXmin=0,n.fXmax=t.arr.length,n.fNbins=t.arr.length,n.fLabels=(0,h.create)(h.clTHashList);for(let l=0;l=0){let l=r.fTitle.split(";");r.fTitle=l[0],l[1]&&(n.fTitle=l[1]),l[2]&&(c.fTitle=l[2])}n.fXmin=g,n.fXmax=d,n.fTimeDisplay=y,y&&(n.fTimeFormat=p)}let v=this._3d?r.fZaxis:r.fYaxis;return v.fXmin=Math.min(e,I),v.fXmax=Math.max(m,L),r.fMinimum=e,r.fMaximum=m,r}drawAxisHist(t,r){var a=this;return(0,u.Z)(function*(){return w.f.draw(a.getDom(),t,"AXIS"+r)})()}drawNextFunction(t){var r=this;return(0,u.Z)(function*(){let a=r.getObject();return!a.fFunctions||t>=a.fFunctions.arr.length?r:r.getPadPainter().drawObject(r.getDom(),a.fFunctions.arr[t],a.fFunctions.opt[t]).then(()=>r.drawNextFunction(t+1))})()}drawGraph(t,r){var a=this;return(0,u.Z)(function*(){return H.TGraphPainter.draw(a.getDom(),t,r)})()}drawNextGraph(t,r){var a=this;return(0,u.Z)(function*(){let f=a.getObject().fGraphs;if(t>=f.arr.length)return a._pfc=a._plc=a._pmc=!1,a.drawNextFunction(0);if(a._pfc||a._plc||a._pmc){let e=a.getMainPainter();if((0,h.isFunc)(e?.createAutoColor)){let s=e.createAutoColor(f.arr.length);a._pfc&&(f.arr[t].fFillColor=s),a._plc&&(f.arr[t].fLineColor=s),a._pmc&&(f.arr[t].fMarkerColor=s)}}return a.drawGraph(f.arr[t],f.opt[t]||r||"",f.arr.length-t).then(e=>(e&&a.painters.push(e),a.drawNextGraph(t+1,r)))})()}static _drawMG(t,r){return(0,u.Z)(function*(){let a=new D.pc(r);t._3d=a.check("3D"),t._pfc=a.check("PFC"),t._plc=a.check("PLC"),t._pmc=a.check("PMC");let f="";["USE_PAD_TITLE","LOGXY","LOGX","LOGY","LOGZ","GRIDXY","GRIDX","GRIDY","TICKXY","TICKX","TICKY","FB"].forEach(s=>{a.check(s)&&(f+=";"+s)});let e=Promise.resolve(!0);if(a.check("A")||!t.getMainPainter()){let s=t.getObject(),o=t.getPadPainter(),y=t.scanGraphsRange(s.fGraphs,s.fHistogram,o?.getRootPad(!0));e=t.drawAxisHist(y,f).then(p=>{t.firstpainter=p,p.$secondary="hist",s.fHistogram&&(t.$primary=!0)})}return e.then(()=>(t.addToPadPrimitives(),t.drawNextGraph(0,a.remain())))})()}static draw(t,r,a){return(0,u.Z)(function*(){return T._drawMG(new T(t,r),a)})()}}var Z=x(8189),C=x(3761);class G extends T{drawAxisHist(t,r){var a=this;return(0,u.Z)(function*(){return a._3d?Z.TH2Painter.draw(a.getDom(),t,"AXIS3D"+r):w.f.draw(a.getDom(),t,"AXIS"+r)})()}drawGraph(t,r,a){var f=this;return(0,u.Z)(function*(){return f._3d&&(r+="pos3d_"+a),C.o.draw(f.getDom(),t,r)})()}static draw(t,r,a){return(0,u.Z)(function*(){return G._drawMG(new G(t,r),a)})()}}}}]); +//# sourceMappingURL=717.d2379237233310ff.js.map \ No newline at end of file diff --git a/docs/717.d2379237233310ff.js.map b/docs/717.d2379237233310ff.js.map new file mode 100644 index 000000000..fc3f8e441 --- /dev/null +++ b/docs/717.d2379237233310ff.js.map @@ -0,0 +1 @@ +{"version":3,"file":"717.d2379237233310ff.js","mappings":"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","names":["TMultiGraphPainter","ObjectPainter","constructor","dom","mgraph","super","this","firstpainter","autorange","painters","cleanup","updateObject","obj","matchObjectType","getObject","graphs","fGraphs","pp","getPadPainter","fTitle","isany","histo","fHistogram","scanGraphsRange","i","arr","length","fFunctions","forEach","func","_typename","fName","findPainterFor","pad","maximum","minimum","logx","logy","time_display","time_format","rw","xmin","xmax","ymin","ymax","first","fLogx","fLogy","fUxmin","fUxmax","fUymin","fUymax","_3d","fXaxis","fLabels","fTimeDisplay","fTimeFormat","gr","fNpoints","fX","fY","Math","min","max","dx","dy","uxmin","uxmax","log10","glob_minimum","glob_maximum","fMinimum","kNoZoom","fMaximum","xaxis","yaxis","create","fXmin","fXmax","fNbins","clTHashList","lbl","clTObjString","fString","fUniqueID","Add","fYaxis","fZaxis","indexOf","t","split","axis","drawAxisHist","hopt","TH1Painter","_this","getDom","drawNextFunction","indx","_this2","drawObject","opt","then","drawGraph","TGraphPainter","_this3","drawNextGraph","_this4","_pfc","_plc","_pmc","mp","getMainPainter","isFunc","createAutoColor","icolor","fFillColor","fLineColor","fMarkerColor","subp","push","static","painter","d","DrawOptions","check","name","promise","Promise","resolve","getRootPad","ap","$secondary","$primary","addToPadPrimitives","remain","_drawMG","TMultiGraphPainter2D","TH2Painter","pos3d"],"sourceRoot":"webpack:///","sources":["../node_modules/jsroot/modules/hist2d/TMultiGraphPainter.mjs","../node_modules/jsroot/modules/hist/TMultiGraphPainter.mjs"],"sourcesContent":["import { create, isFunc, clTObjString, clTHashList, kNoZoom } from '../core.mjs';\nimport { DrawOptions } from '../base/BasePainter.mjs';\nimport { ObjectPainter } from '../base/ObjectPainter.mjs';\nimport { TH1Painter } from './TH1Painter.mjs';\nimport { TGraphPainter } from './TGraphPainter.mjs';\n\n/**\n * @summary Painter for TMultiGraph object.\n *\n * @private\n */\n\nclass TMultiGraphPainter extends ObjectPainter {\n\n /** @summary Create painter\n * @param {object|string} dom - DOM element for drawing or element id\n * @param {object} obj - TMultiGraph object to draw */\n constructor(dom, mgraph) {\n super(dom, mgraph);\n this.firstpainter = null;\n this.autorange = false;\n this.painters = []; // keep painters to be able update objects\n }\n\n /** @summary Cleanup multigraph painter */\n cleanup() {\n this.painters = [];\n super.cleanup();\n }\n\n /** @summary Update multigraph object */\n updateObject(obj) {\n if (!this.matchObjectType(obj)) return false;\n\n let mgraph = this.getObject(),\n graphs = obj.fGraphs,\n pp = this.getPadPainter();\n\n mgraph.fTitle = obj.fTitle;\n\n let isany = false;\n if (this.firstpainter) {\n let histo = obj.fHistogram;\n if (this.autorange && !histo)\n histo = this.scanGraphsRange(graphs);\n\n if (this.firstpainter.updateObject(histo))\n isany = true;\n }\n\n for (let i = 0; i < graphs.arr.length; ++i)\n if ((i < this.painters.length) && this.painters[i].updateObject(graphs.arr[i]))\n isany = true;\n\n obj.fFunctions?.arr?.forEach(func => {\n if (func?._typename && func?.fName)\n pp?.findPainterFor(null, func.fName, func._typename)?.updateObject(func);\n });\n\n return isany;\n }\n\n /** @summary Scan graphs range\n * @return {object} histogram for axes drawing */\n scanGraphsRange(graphs, histo, pad) {\n let mgraph = this.getObject(),\n maximum, minimum, logx = false, logy = false,\n time_display = false, time_format = '',\n rw = { xmin: 0, xmax: 0, ymin: 0, ymax: 0, first: true };\n\n if (pad) {\n logx = pad.fLogx;\n logy = pad.fLogy;\n rw.xmin = pad.fUxmin;\n rw.xmax = pad.fUxmax;\n rw.ymin = pad.fUymin;\n rw.ymax = pad.fUymax;\n rw.first = false;\n }\n\n // ignore existing histo in 3d case\n if (this._3d && histo && !histo.fXaxis.fLabels)\n histo = null;\n\n if (!histo) {\n this.autorange = true;\n\n if (graphs.arr[0]?.fHistogram?.fXaxis?.fTimeDisplay) {\n time_display = true;\n time_format = graphs.arr[0].fHistogram.fXaxis.fTimeFormat;\n }\n }\n\n graphs.arr.forEach(gr => {\n if (gr.fNpoints == 0) return;\n if (rw.first) {\n rw.xmin = rw.xmax = gr.fX[0];\n rw.ymin = rw.ymax = gr.fY[0];\n rw.first = false;\n }\n for (let i = 0; i < gr.fNpoints; ++i) {\n rw.xmin = Math.min(rw.xmin, gr.fX[i]);\n rw.xmax = Math.max(rw.xmax, gr.fX[i]);\n rw.ymin = Math.min(rw.ymin, gr.fY[i]);\n rw.ymax = Math.max(rw.ymax, gr.fY[i]);\n }\n });\n\n if (rw.xmin == rw.xmax)\n rw.xmax += 1.;\n if (rw.ymin == rw.ymax)\n rw.ymax += 1.;\n let dx = 0.05 * (rw.xmax - rw.xmin),\n dy = 0.05 * (rw.ymax - rw.ymin),\n uxmin = rw.xmin - dx,\n uxmax = rw.xmax + dx;\n if (logy) {\n if (rw.ymin <= 0)\n rw.ymin = 0.001 * rw.ymax;\n minimum = rw.ymin / (1 + 0.5 * Math.log10(rw.ymax / rw.ymin));\n maximum = rw.ymax * (1 + 0.2 * Math.log10(rw.ymax / rw.ymin));\n } else {\n minimum = rw.ymin - dy;\n maximum = rw.ymax + dy;\n }\n if (minimum < 0 && rw.ymin >= 0)\n minimum = 0;\n if (maximum > 0 && rw.ymax <= 0)\n maximum = 0;\n\n let glob_minimum = minimum, glob_maximum = maximum;\n\n if (uxmin < 0 && rw.xmin >= 0)\n uxmin = logx ? 0.9 * rw.xmin : 0;\n if (uxmax > 0 && rw.xmax <= 0)\n uxmax = logx? 1.1 * rw.xmax : 0;\n\n if (mgraph.fMinimum != kNoZoom)\n rw.ymin = minimum = mgraph.fMinimum;\n if (mgraph.fMaximum != kNoZoom)\n rw.ymax = maximum = mgraph.fMaximum;\n\n if (minimum < 0 && rw.ymin >= 0 && logy)\n minimum = 0.9 * rw.ymin;\n if (maximum > 0 && rw.ymax <= 0 && logy)\n maximum = 1.1 * rw.ymax;\n if (minimum <= 0 && logy)\n minimum = 0.001 * maximum;\n if (!logy && minimum > 0 && minimum < 0.05*maximum)\n minimum = 0;\n if (uxmin <= 0 && logx)\n uxmin = (uxmax > 1000) ? 1 : 0.001 * uxmax;\n\n // Create a temporary histogram to draw the axis (if necessary)\n if (!histo) {\n let xaxis, yaxis;\n if (this._3d) {\n histo = create('TH2I');\n xaxis = histo.fXaxis;\n xaxis.fXmin = 0;\n xaxis.fXmax = graphs.arr.length;\n xaxis.fNbins = graphs.arr.length;\n xaxis.fLabels = create(clTHashList);\n for (let i = 0; i < graphs.arr.length; i++) {\n let lbl = create(clTObjString);\n lbl.fString = graphs.arr[i].fTitle || `gr${i}`;\n lbl.fUniqueID = graphs.arr.length - i; // graphs drawn in reverse order\n xaxis.fLabels.Add(lbl, '');\n }\n xaxis = histo.fYaxis;\n yaxis = histo.fZaxis;\n } else {\n histo = create('TH1I');\n xaxis = histo.fXaxis;\n yaxis = histo.fYaxis;\n }\n histo.fTitle = mgraph.fTitle;\n if (histo.fTitle.indexOf(';') >= 0) {\n let t = histo.fTitle.split(';');\n histo.fTitle = t[0];\n if (t[1]) xaxis.fTitle = t[1];\n if (t[2]) yaxis.fTitle = t[2];\n }\n\n xaxis.fXmin = uxmin;\n xaxis.fXmax = uxmax;\n xaxis.fTimeDisplay = time_display;\n if (time_display) xaxis.fTimeFormat = time_format;\n }\n\n let axis = this._3d ? histo.fZaxis : histo.fYaxis;\n axis.fXmin = Math.min(minimum, glob_minimum);\n axis.fXmax = Math.max(maximum, glob_maximum);\n histo.fMinimum = minimum;\n histo.fMaximum = maximum;\n\n return histo;\n }\n\n /** @summary draw speical histogram for axis\n * @return {Promise} when ready */\n async drawAxisHist(histo, hopt) {\n return TH1Painter.draw(this.getDom(), histo, 'AXIS' + hopt);\n }\n\n /** @summary method draws next function from the functions list */\n async drawNextFunction(indx) {\n\n let mgraph = this.getObject();\n\n if (!mgraph.fFunctions || (indx >= mgraph.fFunctions.arr.length))\n return this;\n\n let pp = this.getPadPainter()\n\n return pp.drawObject(this.getDom(), mgraph.fFunctions.arr[indx], mgraph.fFunctions.opt[indx])\n .then(() => this.drawNextFunction(indx+1));\n }\n\n /** @summary Draw graph */\n async drawGraph(gr, opt /*, pos3d */ ) {\n return TGraphPainter.draw(this.getDom(), gr, opt);\n }\n\n /** @summary method draws next graph */\n async drawNextGraph(indx, opt) {\n\n let graphs = this.getObject().fGraphs;\n\n // at the end of graphs drawing draw functions (if any)\n if (indx >= graphs.arr.length) {\n this._pfc = this._plc = this._pmc = false; // disable auto coloring at the end\n return this.drawNextFunction(0);\n }\n\n // if there is auto colors assignment, try to provide it\n if (this._pfc || this._plc || this._pmc) {\n let mp = this.getMainPainter();\n if (isFunc(mp?.createAutoColor)) {\n let icolor = mp.createAutoColor(graphs.arr.length);\n if (this._pfc) graphs.arr[indx].fFillColor = icolor;\n if (this._plc) graphs.arr[indx].fLineColor = icolor;\n if (this._pmc) graphs.arr[indx].fMarkerColor = icolor;\n }\n }\n\n let o = graphs.opt[indx] || opt || '';\n\n return this.drawGraph(graphs.arr[indx], o, graphs.arr.length - indx).then(subp => {\n if (subp) this.painters.push(subp);\n\n return this.drawNextGraph(indx+1, opt);\n });\n }\n\n /** @summary Draw multigraph object using painter instance\n * @private */\n static async _drawMG(painter, opt) {\n\n let d = new DrawOptions(opt);\n\n painter._3d = d.check('3D');\n painter._pfc = d.check('PFC');\n painter._plc = d.check('PLC');\n painter._pmc = d.check('PMC');\n\n let hopt = '', checkhopt = ['USE_PAD_TITLE', 'LOGXY', 'LOGX', 'LOGY', 'LOGZ', 'GRIDXY', 'GRIDX', 'GRIDY', 'TICKXY', 'TICKX', 'TICKY', 'FB'];\n checkhopt.forEach(name => { if (d.check(name)) hopt += ';' + name; });\n\n let promise = Promise.resolve(true);\n if (d.check('A') || !painter.getMainPainter()) {\n let mgraph = painter.getObject(),\n pp = painter.getPadPainter(),\n histo = painter.scanGraphsRange(mgraph.fGraphs, mgraph.fHistogram, pp?.getRootPad(true));\n\n promise = painter.drawAxisHist(histo, hopt).then(ap => {\n painter.firstpainter = ap;\n ap.$secondary = 'hist'; // mark histogram painter as secondary\n if (mgraph.fHistogram) painter.$primary = true; // mark mg painter as primary\n });\n }\n\n return promise.then(() => {\n painter.addToPadPrimitives();\n return painter.drawNextGraph(0, d.remain());\n });\n }\n\n /** @summary Draw TMultiGraph object */\n static async draw(dom, mgraph, opt) {\n return TMultiGraphPainter._drawMG(new TMultiGraphPainter(dom, mgraph), opt);\n }\n\n} // class TMultiGraphPainter\n\n\nexport { TMultiGraphPainter };\n","import { TMultiGraphPainter as TMultiGraphPainter2D } from '../hist2d/TMultiGraphPainter.mjs';\nimport { TH1Painter } from '../hist2d/TH1Painter.mjs';\nimport { TH2Painter } from './TH2Painter.mjs';\nimport { TGraphPainter } from './TGraphPainter.mjs';\n\n\nclass TMultiGraphPainter extends TMultiGraphPainter2D {\n\n /** @summary draw speical histogram for axis\n * @return {Promise} when ready */\n async drawAxisHist(histo, hopt) {\n return this._3d ? TH2Painter.draw(this.getDom(), histo, 'AXIS3D' + hopt)\n : TH1Painter.draw(this.getDom(), histo, 'AXIS' + hopt);\n }\n\n /** @summary draw multigraph in 3D */\n async drawGraph(gr, opt, pos3d) {\n if (this._3d) opt += 'pos3d_'+pos3d;\n return TGraphPainter.draw(this.getDom(), gr, opt);\n }\n\n /** @summary Draw TMultiGraph object */\n static async draw(dom, mgraph, opt) {\n return TMultiGraphPainter._drawMG(new TMultiGraphPainter(dom, mgraph), opt);\n }\n\n} // class TMultiGraphPainter\n\nexport { TMultiGraphPainter };\n"],"x_google_ignoreList":[0,1]} \ No newline at end of file diff --git a/docs/832.83df34f38ba74f23.js b/docs/832.83df34f38ba74f23.js new file mode 100644 index 000000000..020bc284b --- /dev/null +++ b/docs/832.83df34f38ba74f23.js @@ -0,0 +1,2 @@ +"use strict";(self.webpackChunkphoenix_app=self.webpackChunkphoenix_app||[]).push([[832],{832:(D,X,d)=>{d.r(X),d.d(X,{THStackPainter:()=>P});var E=d(5835),h=d(9542),v=d(3675),H=d(6458),A=d(629),N=d(8189),b=d(49);class P extends H.tK{constructor(r,i,s){super(r,i,s),this.firstpainter=null,this.painters=[]}cleanup(){this.getPadPainter()?.cleanPrimitives(r=>r===this.firstpainter||this.painters.indexOf(r)>=0),delete this.firstpainter,delete this.painters,super.cleanup()}buildStack(r){if(!r.fHists)return!1;let i=r.fHists.arr.length;if(i<=0)return!1;let s=(0,h.create)(h.clTList);s.Add((0,h.clone)(r.fHists.arr[0]),r.fHists.opt[0]);for(let e=1;e{let u={min:0,max:0},M=!0,k=!0;if(o.fMinimum!==h.kNoZoom&&(u.min=o.fMinimum,M=!1),o.fMaximum!==h.kNoZoom&&(u.max=o.fMaximum,k=!1),!M&&!k)return u;let C=1,S=o.fXaxis.fNbins,w=1,O=1,T=!0;o.fXaxis.TestBit(H.VO.kAxisRange)&&(C=o.fXaxis.fFirst,S=o.fXaxis.fLast),0===o._typename.indexOf(h.clTH2)&&(O=o.fYaxis.fNbins,o.fYaxis.TestBit(H.VO.kAxisRange)&&(w=o.fYaxis.fFirst,O=o.fYaxis.fLast));for(let c=w;c<=O;++c)for(let x=C;x<=S;++x){let _=o.getBinContent(x,c),g=p?o.getBinError(o.getBin(x,c)):0;M&&(T||_-gu.max)&&(u.max=_+g),T=!1}return u};if(this.options.nostack)for(let o=0;o{if(t&&(1==this.options.ndim?t.fLogy:t.fLogz)){s<=0&&(s=1),i<=0&&(i=1e-4*s);let o=1/(1+.5*Math.log10(s/i)),p=1+.2*Math.log10(s/i);i*=o,s*=p}else i>0&&i<.05*s&&(i=0)};s*=1+h.gStyle.fHistTopMargin,a();let f=s,l=i,m=!1;return e.fMaximum!=h.kNoZoom&&(s=e.fMaximum,f=Math.max(s,f),m=!0),e.fMinimum!=h.kNoZoom&&(i=e.fMinimum,l=Math.min(i,l),m=!0),m?a():i=s=h.kNoZoom,{min:i,max:s,min0:l,max0:f,zoomed:m,hopt:`hmin:${l};hmax:${f};minimum:${i};maximum:${s}`}}drawNextHisto(r,i){var s=this;return(0,E.Z)(function*(){let e=s.getObject(),t=s.options.nostack?e.fHists:e.fStack,n=t?.arr?.length||0;if(r>=n)return s;let a=s.options.horder?r:n-r-1,f=t.arr[a],l=t.opt[a]||f.fOption||s.options.hopt;if(l.toUpperCase().indexOf(s.options.hopt)<0&&(l+=" "+s.options.hopt),s.options.draw_errors&&!l&&(l="E"),s.options._pfc||s.options._plc||s.options._pmc){let m=s.getMainPainter();if((0,h.isFunc)(m?.createAutoColor)){let o=m.createAutoColor(n);s.options._pfc&&(f.fFillColor=o),s.options._plc&&(f.fLineColor=o),s.options._pmc&&(f.fMarkerColor=o)}}if(i){let m=i.getSubPadPainter(r+1);if(!m)return s;let o=m.selectCurrentPad(m.this_pad_name);return s.hdraw_func(m.getDom(),f,l).then(p=>(s.painters.push(p),m.selectCurrentPad(o),s.drawNextHisto(r+1,i)))}return a>0&&!s.options.nostack&&(f.$baseh=t.arr[a-1]),s.hdraw_func(s.getDom(),f,l+" same nostat").then(m=>(s.painters.push(m),s.drawNextHisto(r+1,i)))})()}decodeOptions(r){this.options||(this.options={}),Object.assign(this.options,{ndim:1,nostack:!1,same:!1,horder:!0,has_errors:!1,draw_errors:!1,hopt:""});let i=this.getObject(),s=i.fHistogram||(i.fHists?i.fHists.arr[0]:null)||(i.fStack?i.fStack.arr[0]:null);const e=a=>{if(a.fSumw2&&a.fSumw2.length>0)for(let f=0;f0)return!0;return!1};if(s&&0==s._typename.indexOf(h.clTH2)&&(this.options.ndim=2),2==this.options.ndim&&!r&&(r="lego1"),i.fHists&&!this.options.nostack)for(let a=0;athis.painters.indexOf(t)>=0),this.painters=[],this.did_update=!0;else for(let t=0;t{if(e.decodeOptions(s),e.hdraw_func=1==e.options.ndim?A.TH1Painter.draw:N.TH2Painter.draw,e.options.pads)return t=e.getPadPainter(),t.doingDraw()&&t.pad?.fPrimitives&&t.pad.fPrimitives.arr.length>1&&0==t.pad.fPrimitives.arr.indexOf(i)?(n=!0,void console.log("special case with THStack with is already rendered - do nothing")):(t.cleanPrimitives(m=>m!==e),t.divide(e.options.nhist));if(e.options.nostack||(e.options.nostack=!e.buildStack(i)),e.options.same)return;let a=!i.fHistogram;a&&(i.fHistogram=e.createHistogram(i));let f=e.getMinMax(e.options.errors||e.options.draw_errors);return e.hdraw_func(r,i.fHistogram,e.options.hopt+";axis;"+f.hopt).then(m=>{e.addToPadPrimitives(),e.firstpainter=m,m.$secondary="hist",a||(e.$primary=!0)})}).then(()=>n?e:e.drawNextHisto(0,t))})()}}}}]); +//# sourceMappingURL=832.83df34f38ba74f23.js.map \ No newline at end of file diff --git a/docs/832.83df34f38ba74f23.js.map b/docs/832.83df34f38ba74f23.js.map new file mode 100644 index 000000000..f34d2ba3d --- /dev/null +++ b/docs/832.83df34f38ba74f23.js.map @@ -0,0 +1 @@ +{"version":3,"file":"832.83df34f38ba74f23.js","mappings":"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","names":["THStackPainter","ObjectPainter","constructor","dom","stack","opt","super","this","firstpainter","painters","cleanup","getPadPainter","cleanPrimitives","objp","indexOf","buildStack","fHists","nhists","arr","length","lst","create","clTList","Add","clone","i","hnext","hnextopt","hprev","fNbins","fXaxis","fXmin","fXmax","console","warn","fName","Clear","n","fArray","fStack","getMinMax","iserr","min","max","getObject","pad","getRootPad","getHistMinMax","hist","witherr","res","domin","domax","fMinimum","kNoZoom","fMaximum","i1","i2","j1","j2","first","TestBit","EAxisBits","fFirst","fLast","_typename","clTH2","fYaxis","j","val","getBinContent","err","getBinError","getBin","options","nostack","resh","Math","adjustRange","ndim","fLogy","fLogz","kmin","log10","kmax","gStyle","max0","min0","zoomed","hopt","drawNextHisto","indx","pad_painter","_this","hlst","rindx","horder","fOption","toUpperCase","draw_errors","_pfc","_plc","_pmc","mp","getMainPainter","isFunc","createAutoColor","icolor","fFillColor","fLineColor","fMarkerColor","subpad_painter","getSubPadPainter","prev_name","selectCurrentPad","this_pad_name","hdraw_func","getDom","then","subp","push","$baseh","decodeOptions","Object","assign","same","has_errors","fHistogram","hasErrors","fSumw2","k","nhist","d","DrawOptions","check","pads","remain","dolego","errors","createHistogram","histos","numhistos","histo","fTitle","h0","h","fLabels","updateObject","obj","matchObjectType","src","mm","minimum","maximum","_checked_zooming","ymin","ymax","zmin","zmax","did_update","redraw","static","painter","skip_drawing","ensureTCanvas","TH1Painter","TH2Painter","doingDraw","fPrimitives","log","p","divide","no_histogram","addToPadPrimitives","$secondary","$primary"],"sourceRoot":"webpack:///","sources":["../node_modules/jsroot/modules/hist/THStackPainter.mjs"],"sourcesContent":["import { clone, create, createHistogram, isFunc, gStyle, clTList, clTH2, kNoZoom } from '../core.mjs';\nimport { DrawOptions } from '../base/BasePainter.mjs';\nimport { ObjectPainter, EAxisBits } from '../base/ObjectPainter.mjs';\nimport { TH1Painter } from './TH1Painter.mjs';\nimport { TH2Painter } from './TH2Painter.mjs';\nimport { ensureTCanvas } from '../gpad/TCanvasPainter.mjs';\n\n\n/**\n * @summary Painter class for THStack\n *\n * @private\n */\n\nclass THStackPainter extends ObjectPainter {\n\n /** @summary constructor\n * @param {object|string} dom - DOM element for drawing or element id\n * @param {object} stack - THStack object\n * @param {string} [opt] - draw options */\n constructor(dom, stack, opt) {\n super(dom, stack, opt);\n this.firstpainter = null;\n this.painters = []; // keep painters to be able update objects\n }\n\n /** @summary Cleanup THStack painter */\n cleanup() {\n this.getPadPainter()?.cleanPrimitives(objp => { return (objp === this.firstpainter) || (this.painters.indexOf(objp) >= 0); });\n delete this.firstpainter;\n delete this.painters;\n super.cleanup();\n }\n\n /** @summary Build sum of all histograms\n * @desc Build a separate list fStack containing the running sum of all histograms */\n buildStack(stack) {\n if (!stack.fHists) return false;\n let nhists = stack.fHists.arr.length;\n if (nhists <= 0) return false;\n let lst = create(clTList);\n lst.Add(clone(stack.fHists.arr[0]), stack.fHists.opt[0]);\n for (let i = 1; i < nhists; ++i) {\n let hnext = clone(stack.fHists.arr[i]),\n hnextopt = stack.fHists.opt[i],\n hprev = lst.arr[i-1];\n\n if ((hnext.fNbins != hprev.fNbins) ||\n (hnext.fXaxis.fXmin != hprev.fXaxis.fXmin) ||\n (hnext.fXaxis.fXmax != hprev.fXaxis.fXmax)) {\n console.warn(`When drawing THStack, cannot sum-up histograms ${hnext.fName} and ${hprev.fName}`);\n lst.Clear();\n return false;\n }\n\n // trivial sum of histograms\n for (let n = 0; n < hnext.fArray.length; ++n)\n hnext.fArray[n] += hprev.fArray[n];\n\n lst.Add(hnext, hnextopt);\n }\n stack.fStack = lst;\n return true;\n }\n\n /** @summary Returns stack min/max values */\n getMinMax(iserr) {\n let min = 0, max = 0,\n stack = this.getObject(),\n pad = this.getPadPainter().getRootPad(true);\n\n const getHistMinMax = (hist, witherr) => {\n let res = { min: 0, max: 0 },\n domin = true, domax = true;\n if (hist.fMinimum !== kNoZoom) {\n res.min = hist.fMinimum;\n domin = false;\n }\n if (hist.fMaximum !== kNoZoom) {\n res.max = hist.fMaximum;\n domax = false;\n }\n\n if (!domin && !domax) return res;\n\n let i1 = 1, i2 = hist.fXaxis.fNbins, j1 = 1, j2 = 1, first = true;\n\n if (hist.fXaxis.TestBit(EAxisBits.kAxisRange)) {\n i1 = hist.fXaxis.fFirst;\n i2 = hist.fXaxis.fLast;\n }\n\n if (hist._typename.indexOf(clTH2) === 0) {\n j2 = hist.fYaxis.fNbins;\n if (hist.fYaxis.TestBit(EAxisBits.kAxisRange)) {\n j1 = hist.fYaxis.fFirst;\n j2 = hist.fYaxis.fLast;\n }\n }\n for (let j = j1; j <= j2; ++j)\n for (let i = i1; i <= i2; ++i) {\n let val = hist.getBinContent(i, j),\n err = witherr ? hist.getBinError(hist.getBin(i,j)) : 0;\n if (domin && (first || (val-err < res.min))) res.min = val-err;\n if (domax && (first || (val+err > res.max))) res.max = val+err;\n first = false;\n }\n\n return res;\n };\n\n if (this.options.nostack) {\n for (let i = 0; i < stack.fHists.arr.length; ++i) {\n let resh = getHistMinMax(stack.fHists.arr[i], iserr);\n if (i == 0) {\n min = resh.min; max = resh.max;\n } else {\n min = Math.min(min, resh.min);\n max = Math.max(max, resh.max);\n }\n }\n } else {\n min = getHistMinMax(stack.fStack.arr[0], iserr).min;\n max = getHistMinMax(stack.fStack.arr[stack.fStack.arr.length-1], iserr).max;\n }\n\n const adjustRange = () => {\n if (pad && (this.options.ndim == 1 ? pad.fLogy : pad.fLogz)) {\n if (max <= 0) max = 1;\n if (min <= 0) min = 1e-4*max;\n let kmin = 1/(1 + 0.5*Math.log10(max / min)),\n kmax = 1 + 0.2*Math.log10(max / min);\n min *= kmin;\n max *= kmax;\n } else if ((min > 0) && (min < 0.05*max)) {\n min = 0;\n }\n };\n\n max *= (1 + gStyle.fHistTopMargin);\n\n adjustRange();\n\n let max0 = max, min0 = min, zoomed = false;\n\n if (stack.fMaximum != kNoZoom) {\n max = stack.fMaximum;\n max0 = Math.max(max, max0);\n zoomed = true;\n }\n\n if (stack.fMinimum != kNoZoom) {\n min = stack.fMinimum;\n min0 = Math.min(min, min0);\n zoomed = true;\n }\n\n if (zoomed)\n adjustRange();\n else\n min = max = kNoZoom;\n\n return { min, max, min0, max0, zoomed, hopt: `hmin:${min0};hmax:${max0};minimum:${min};maximum:${max}` };\n }\n\n /** @summary Draw next stack histogram */\n async drawNextHisto(indx, pad_painter) {\n\n let stack = this.getObject(),\n hlst = this.options.nostack ? stack.fHists : stack.fStack,\n nhists = hlst?.arr?.length || 0;\n\n if (indx >= nhists)\n return this;\n\n let rindx = this.options.horder ? indx : nhists-indx-1,\n hist = hlst.arr[rindx],\n hopt = hlst.opt[rindx] || hist.fOption || this.options.hopt;\n\n if (hopt.toUpperCase().indexOf(this.options.hopt) < 0)\n hopt += ' ' + this.options.hopt;\n if (this.options.draw_errors && !hopt)\n hopt = 'E';\n\n if (this.options._pfc || this.options._plc || this.options._pmc) {\n let mp = this.getMainPainter();\n if (isFunc(mp?.createAutoColor)) {\n let icolor = mp.createAutoColor(nhists);\n if (this.options._pfc) hist.fFillColor = icolor;\n if (this.options._plc) hist.fLineColor = icolor;\n if (this.options._pmc) hist.fMarkerColor = icolor;\n }\n }\n\n // handling of 'pads' draw option\n if (pad_painter) {\n let subpad_painter = pad_painter.getSubPadPainter(indx+1);\n if (!subpad_painter)\n return this;\n\n let prev_name = subpad_painter.selectCurrentPad(subpad_painter.this_pad_name);\n\n return this.hdraw_func(subpad_painter.getDom(), hist, hopt).then(subp => {\n this.painters.push(subp);\n subpad_painter.selectCurrentPad(prev_name);\n return this.drawNextHisto(indx+1, pad_painter);\n });\n }\n\n // special handling of stacked histograms - set $baseh object for correct drawing\n // also used to provide tooltips\n if ((rindx > 0) && !this.options.nostack)\n hist.$baseh = hlst.arr[rindx - 1];\n\n return this.hdraw_func(this.getDom(), hist, hopt + ' same nostat').then(subp => {\n this.painters.push(subp);\n return this.drawNextHisto(indx+1, pad_painter);\n });\n }\n\n /** @summary Decode draw options of THStack painter */\n decodeOptions(opt) {\n if (!this.options) this.options = {};\n Object.assign(this.options, { ndim: 1, nostack: false, same: false, horder: true, has_errors: false, draw_errors: false, hopt: '' });\n\n let stack = this.getObject(),\n hist = stack.fHistogram || (stack.fHists ? stack.fHists.arr[0] : null) || (stack.fStack ? stack.fStack.arr[0] : null);\n\n const hasErrors = hist => {\n if (hist.fSumw2 && (hist.fSumw2.length > 0))\n for (let n = 0; n < hist.fSumw2.length; ++n)\n if (hist.fSumw2[n] > 0) return true;\n return false;\n };\n\n if (hist && (hist._typename.indexOf(clTH2) == 0))\n this.options.ndim = 2;\n\n if ((this.options.ndim == 2) && !opt)\n opt = 'lego1';\n\n if (stack.fHists && !this.options.nostack)\n for (let k = 0; k < stack.fHists.arr.length; ++k)\n this.options.has_errors = this.options.has_errors || hasErrors(stack.fHists.arr[k]);\n\n this.options.nhist = stack.fHists ? stack.fHists.arr.length : 1;\n\n let d = new DrawOptions(opt);\n\n this.options.nostack = d.check('NOSTACK');\n if (d.check('STACK')) this.options.nostack = false;\n this.options.same = d.check('SAME');\n\n d.check('NOCLEAR'); // ignore noclear option\n\n this.options._pfc = d.check('PFC');\n this.options._plc = d.check('PLC');\n this.options._pmc = d.check('PMC');\n\n this.options.pads = d.check('PADS');\n if (this.options.pads) this.options.nostack = true;\n\n this.options.hopt = d.remain(); // use remaining draw options for histogram draw\n\n let dolego = d.check('LEGO');\n\n this.options.errors = d.check('E');\n\n // if any histogram appears with pre-calculated errors, use E for all histograms\n if (!this.options.nostack && this.options.has_errors && !dolego && !d.check('HIST') && (this.options.hopt.indexOf('E') < 0))\n this.options.draw_errors = true;\n\n this.options.horder = this.options.nostack || dolego;\n }\n\n /** @summary Create main histogram for THStack axis drawing */\n createHistogram(stack) {\n let histos = stack.fHists,\n numhistos = histos ? histos.arr.length : 0;\n\n if (!numhistos) {\n let histo = createHistogram('TH1I', 100);\n histo.fTitle = stack.fTitle;\n return histo;\n }\n\n let h0 = histos.arr[0],\n histo = createHistogram((this.options.ndim == 1) ? 'TH1I' : 'TH2I', h0.fXaxis.fNbins, h0.fYaxis.fNbins);\n histo.fName = 'axis_hist';\n Object.assign(histo.fXaxis, h0.fXaxis);\n if (this.options.ndim==2)\n Object.assign(histo.fYaxis, h0.fYaxis);\n\n // this code is not exists in ROOT painter, can be skipped?\n for (let n = 1; n < numhistos; ++n) {\n let h = histos.arr[n];\n\n if (!histo.fXaxis.fLabels) {\n histo.fXaxis.fXmin = Math.min(histo.fXaxis.fXmin, h.fXaxis.fXmin);\n histo.fXaxis.fXmax = Math.max(histo.fXaxis.fXmax, h.fXaxis.fXmax);\n }\n\n if ((this.options.ndim==2) && !histo.fYaxis.fLabels) {\n histo.fYaxis.fXmin = Math.min(histo.fYaxis.fXmin, h.fYaxis.fXmin);\n histo.fYaxis.fXmax = Math.max(histo.fYaxis.fXmax, h.fYaxis.fXmax);\n }\n }\n\n histo.fTitle = stack.fTitle;\n\n return histo;\n }\n\n /** @summary Update thstack object */\n updateObject(obj) {\n if (!this.matchObjectType(obj)) return false;\n\n let stack = this.getObject();\n\n stack.fHists = obj.fHists;\n stack.fStack = obj.fStack;\n stack.fTitle = obj.fTitle;\n stack.fMinimum = obj.fMinimum;\n stack.fMaximum = obj.fMaximum;\n\n if (!this.options.nostack)\n this.options.nostack = !this.buildStack(stack);\n\n if (this.firstpainter) {\n let src = obj.fHistogram;\n if (!src)\n src = stack.fHistogram = this.createHistogram(stack);\n\n let mm = this.getMinMax(this.options.errors || this.options.draw_errors);\n\n this.firstpainter.options.minimum = mm.min;\n this.firstpainter.options.maximum = mm.max;\n this.firstpainter._checked_zooming = false; // force to check 3d zooming\n\n if (this.options.ndim == 1) {\n this.firstpainter.ymin = mm.min0;\n this.firstpainter.ymax = mm.max0;\n } else {\n this.firstpainter.zmin = mm.min0;\n this.firstpainter.zmax = mm.max0;\n }\n\n this.firstpainter.updateObject(src);\n }\n\n // and now update histograms\n let hlst = this.options.nostack ? stack.fHists : stack.fStack,\n nhists = (hlst && hlst.arr) ? hlst.arr.length : 0;\n\n if (nhists !== this.painters.length) {\n this.getPadPainter()?.cleanPrimitives(objp => { return this.painters.indexOf(objp) >= 0; });\n this.painters = [];\n this.did_update = true;\n } else {\n for (let indx = 0; indx < nhists; ++indx) {\n let rindx = this.options.horder ? indx : nhists-indx-1;\n let hist = hlst.arr[rindx];\n this.painters[indx].updateObject(hist);\n }\n }\n\n return true;\n }\n\n /** @summary Redraw THStack\n * @desc Do something if previous update had changed number of histograms */\n redraw() {\n if (this.did_update) {\n delete this.did_update;\n return this.drawNextHisto(0, this.options.pads ? this.getPadPainter() : null);\n }\n }\n\n /** @summary draw THStack object */\n static async draw(dom, stack, opt) {\n if (!stack.fHists || !stack.fHists.arr)\n return null; // drawing not needed\n\n let painter = new THStackPainter(dom, stack, opt),\n pad_painter = null,\n skip_drawing = false;\n\n return ensureTCanvas(painter, false).then(() => {\n\n painter.decodeOptions(opt);\n\n painter.hdraw_func = (painter.options.ndim == 1) ? TH1Painter.draw : TH2Painter.draw;\n\n if (painter.options.pads) {\n pad_painter = painter.getPadPainter();\n if (pad_painter.doingDraw() && pad_painter.pad?.fPrimitives &&\n pad_painter.pad.fPrimitives.arr.length > 1 && (pad_painter.pad.fPrimitives.arr.indexOf(stack) == 0)) {\n skip_drawing = true;\n console.log('special case with THStack with is already rendered - do nothing');\n return;\n }\n\n pad_painter.cleanPrimitives(p => p !== painter);\n return pad_painter.divide(painter.options.nhist);\n }\n\n if (!painter.options.nostack)\n painter.options.nostack = !painter.buildStack(stack);\n\n if (painter.options.same) return;\n\n let no_histogram = !stack.fHistogram;\n\n if (no_histogram)\n stack.fHistogram = painter.createHistogram(stack);\n\n let mm = painter.getMinMax(painter.options.errors || painter.options.draw_errors),\n hopt = painter.options.hopt + ';axis;' + mm.hopt;\n\n return painter.hdraw_func(dom, stack.fHistogram, hopt).then(subp => {\n painter.addToPadPrimitives();\n painter.firstpainter = subp;\n subp.$secondary = 'hist'; // mark histogram painter as secondary\n if (!no_histogram) painter.$primary = true; // mark stack as provider for histogram\n });\n }).then(() => skip_drawing ? painter : painter.drawNextHisto(0, pad_painter));\n }\n\n} // class THStackPainter\n\nexport { THStackPainter };\n"],"x_google_ignoreList":[0]} \ No newline at end of file diff --git a/docs/832.c41e44530d6fa14d.js b/docs/832.c41e44530d6fa14d.js deleted file mode 100644 index 1b190a287..000000000 --- a/docs/832.c41e44530d6fa14d.js +++ /dev/null @@ -1,2 +0,0 @@ -"use strict";(self.webpackChunkphoenix_app=self.webpackChunkphoenix_app||[]).push([[832],{832:(L,X,c)=>{c.r(X),c.d(X,{THStackPainter:()=>M});var E=c(4788),h=c(9542),v=c(3675),H=c(6458),A=c(629),N=c(8189),D=c(49);class M extends H.tK{constructor(r,i,s){super(r,i,s),this.firstpainter=null,this.painters=[]}cleanup(){this.getPadPainter()?.cleanPrimitives(r=>r===this.firstpainter||this.painters.indexOf(r)>=0),delete this.firstpainter,delete this.painters,super.cleanup()}buildStack(r){if(!r.fHists)return!1;let i=r.fHists.arr.length;if(i<=0)return!1;let s=(0,h.create)(h.clTList);s.Add((0,h.clone)(r.fHists.arr[0]),r.fHists.opt[0]);for(let e=1;e{let d={min:0,max:0},P=!0,O=!0;if(o.fMinimum!==h.kNoZoom&&(d.min=o.fMinimum,P=!1),o.fMaximum!==h.kNoZoom&&(d.max=o.fMaximum,O=!1),!P&&!O)return d;let S=1,C=o.fXaxis.fNbins,w=1,k=1,T=!0;o.fXaxis.TestBit(H.VO.kAxisRange)&&(S=o.fXaxis.fFirst,C=o.fXaxis.fLast),0===o._typename.indexOf(h.clTH2)&&(k=o.fYaxis.fNbins,o.fYaxis.TestBit(H.VO.kAxisRange)&&(w=o.fYaxis.fFirst,k=o.fYaxis.fLast));for(let u=w;u<=k;++u)for(let x=S;x<=C;++x){let _=o.getBinContent(x,u),g=p?o.getBinError(o.getBin(x,u)):0;P&&(T||_-gd.max)&&(d.max=_+g),T=!1}return d};if(this.options.nostack)for(let o=0;o{if(t&&(1==this.options.ndim?t.fLogy:t.fLogz)){s<=0&&(s=1),i<=0&&(i=1e-4*s);let o=1/(1+.5*Math.log10(s/i)),p=1+.2*Math.log10(s/i);i*=o,s*=p}else i>0&&i<.05*s&&(i=0)};s*=1+h.gStyle.fHistTopMargin,a();let f=s,l=i,m=!1;return e.fMaximum!=h.kNoZoom&&(s=e.fMaximum*(1+h.gStyle.fHistTopMargin),f=Math.max(s,f),m=!0),e.fMinimum!=h.kNoZoom&&(i=e.fMinimum,l=Math.min(i,l),m=!0),m?a():i=s=h.kNoZoom,{min:i,max:s,min0:l,max0:f,zoomed:m,hopt:`hmin:${l};hmax:${f};minimum:${i};maximum:${s}`}}drawNextHisto(r,i){var s=this;return(0,E.Z)(function*(){let e=s.getObject(),t=s.options.nostack?e.fHists:e.fStack,n=t?.arr?.length||0;if(r>=n)return s;let a=s.options.horder?r:n-r-1,f=t.arr[a],l=t.opt[a]||f.fOption||s.options.hopt;if(l.toUpperCase().indexOf(s.options.hopt)<0&&(l+=" "+s.options.hopt),s.options.draw_errors&&!l&&(l="E"),s.options._pfc||s.options._plc||s.options._pmc){let m=s.getMainPainter();if((0,h.isFunc)(m?.createAutoColor)){let o=m.createAutoColor(n);s.options._pfc&&(f.fFillColor=o),s.options._plc&&(f.fLineColor=o),s.options._pmc&&(f.fMarkerColor=o)}}if(i){let m=i.getSubPadPainter(r+1);if(!m)return s;let o=m.selectCurrentPad(m.this_pad_name);return s.hdraw_func(m.getDom(),f,l).then(p=>(s.painters.push(p),m.selectCurrentPad(o),s.drawNextHisto(r+1,i)))}return a>0&&!s.options.nostack&&(f.$baseh=t.arr[a-1]),s.hdraw_func(s.getDom(),f,l+" same nostat").then(m=>(s.painters.push(m),s.drawNextHisto(r+1,i)))})()}decodeOptions(r){this.options||(this.options={}),Object.assign(this.options,{ndim:1,nostack:!1,same:!1,horder:!0,has_errors:!1,draw_errors:!1,hopt:""});let i=this.getObject(),s=i.fHistogram||(i.fHists?i.fHists.arr[0]:null)||(i.fStack?i.fStack.arr[0]:null);const e=a=>{if(a.fSumw2&&a.fSumw2.length>0)for(let f=0;f0)return!0;return!1};if(s&&0==s._typename.indexOf(h.clTH2)&&(this.options.ndim=2),2==this.options.ndim&&!r&&(r="lego1"),i.fHists&&!this.options.nostack)for(let a=0;athis.painters.indexOf(t)>=0),this.painters=[],this.did_update=!0;else for(let t=0;t{if(e.decodeOptions(s),e.hdraw_func=1==e.options.ndim?A.TH1Painter.draw:N.TH2Painter.draw,e.options.pads)return t=e.getPadPainter(),t.doingDraw()&&t.pad?.fPrimitives&&t.pad.fPrimitives.arr.length>1&&0==t.pad.fPrimitives.arr.indexOf(i)?(n=!0,void console.log("special case with THStack with is already rendered - do nothing")):(t.cleanPrimitives(m=>m!==e),t.divide(e.options.nhist));if(e.options.nostack||(e.options.nostack=!e.buildStack(i)),e.options.same)return;let a=!i.fHistogram;a&&(i.fHistogram=e.createHistogram(i));let f=e.getMinMax(e.options.errors||e.options.draw_errors);return e.hdraw_func(r,i.fHistogram,e.options.hopt+";axis;"+f.hopt).then(m=>{e.addToPadPrimitives(),e.firstpainter=m,m.$secondary="hist",a||(e.$primary=!0)})}).then(()=>n?e:e.drawNextHisto(0,t))})()}}}}]); -//# sourceMappingURL=832.c41e44530d6fa14d.js.map \ No newline at end of file diff --git a/docs/832.c41e44530d6fa14d.js.map b/docs/832.c41e44530d6fa14d.js.map deleted file mode 100644 index 6b61c5070..000000000 --- a/docs/832.c41e44530d6fa14d.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"832.c41e44530d6fa14d.js","mappings":"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","names":["THStackPainter","ObjectPainter","constructor","dom","stack","opt","super","this","firstpainter","painters","cleanup","getPadPainter","cleanPrimitives","objp","indexOf","buildStack","fHists","nhists","arr","length","lst","create","clTList","Add","clone","i","hnext","hnextopt","hprev","fNbins","fXaxis","fXmin","fXmax","console","warn","fName","Clear","n","fArray","fStack","getMinMax","iserr","min","max","getObject","pad","getRootPad","getHistMinMax","hist","witherr","res","domin","domax","fMinimum","kNoZoom","fMaximum","i1","i2","j1","j2","first","TestBit","EAxisBits","fFirst","fLast","_typename","clTH2","fYaxis","j","val","getBinContent","err","getBinError","getBin","options","nostack","resh","Math","adjustRange","ndim","fLogy","fLogz","kmin","log10","kmax","gStyle","max0","min0","zoomed","hopt","drawNextHisto","indx","pad_painter","_this","hlst","rindx","horder","fOption","toUpperCase","draw_errors","_pfc","_plc","_pmc","mp","getMainPainter","isFunc","createAutoColor","icolor","fFillColor","fLineColor","fMarkerColor","subpad_painter","getSubPadPainter","prev_name","selectCurrentPad","this_pad_name","hdraw_func","getDom","then","subp","push","$baseh","decodeOptions","Object","assign","same","has_errors","fHistogram","hasErrors","fSumw2","k","nhist","d","DrawOptions","check","pads","remain","dolego","errors","createHistogram","histos","numhistos","histo","fTitle","h0","h","fLabels","updateObject","obj","matchObjectType","src","mm","minimum","maximum","_checked_zooming","ymin","ymax","zmin","zmax","did_update","redraw","static","painter","skip_drawing","ensureTCanvas","TH1Painter","TH2Painter","doingDraw","fPrimitives","log","p","divide","no_histogram","addToPadPrimitives","$secondary","$primary"],"sourceRoot":"webpack:///","sources":["../node_modules/jsroot/modules/hist/THStackPainter.mjs"],"sourcesContent":["import { clone, create, createHistogram, isFunc, gStyle, clTList, clTH2, kNoZoom } from '../core.mjs';\nimport { DrawOptions } from '../base/BasePainter.mjs';\nimport { ObjectPainter, EAxisBits } from '../base/ObjectPainter.mjs';\nimport { TH1Painter } from './TH1Painter.mjs';\nimport { TH2Painter } from './TH2Painter.mjs';\nimport { ensureTCanvas } from '../gpad/TCanvasPainter.mjs';\n\n\n/**\n * @summary Painter class for THStack\n *\n * @private\n */\n\nclass THStackPainter extends ObjectPainter {\n\n /** @summary constructor\n * @param {object|string} dom - DOM element for drawing or element id\n * @param {object} stack - THStack object\n * @param {string} [opt] - draw options */\n constructor(dom, stack, opt) {\n super(dom, stack, opt);\n this.firstpainter = null;\n this.painters = []; // keep painters to be able update objects\n }\n\n /** @summary Cleanup THStack painter */\n cleanup() {\n this.getPadPainter()?.cleanPrimitives(objp => { return (objp === this.firstpainter) || (this.painters.indexOf(objp) >= 0); });\n delete this.firstpainter;\n delete this.painters;\n super.cleanup();\n }\n\n /** @summary Build sum of all histograms\n * @desc Build a separate list fStack containing the running sum of all histograms */\n buildStack(stack) {\n if (!stack.fHists) return false;\n let nhists = stack.fHists.arr.length;\n if (nhists <= 0) return false;\n let lst = create(clTList);\n lst.Add(clone(stack.fHists.arr[0]), stack.fHists.opt[0]);\n for (let i = 1; i < nhists; ++i) {\n let hnext = clone(stack.fHists.arr[i]),\n hnextopt = stack.fHists.opt[i],\n hprev = lst.arr[i-1];\n\n if ((hnext.fNbins != hprev.fNbins) ||\n (hnext.fXaxis.fXmin != hprev.fXaxis.fXmin) ||\n (hnext.fXaxis.fXmax != hprev.fXaxis.fXmax)) {\n console.warn(`When drawing THStack, cannot sum-up histograms ${hnext.fName} and ${hprev.fName}`);\n lst.Clear();\n return false;\n }\n\n // trivial sum of histograms\n for (let n = 0; n < hnext.fArray.length; ++n)\n hnext.fArray[n] += hprev.fArray[n];\n\n lst.Add(hnext, hnextopt);\n }\n stack.fStack = lst;\n return true;\n }\n\n /** @summary Returns stack min/max values */\n getMinMax(iserr) {\n let min = 0, max = 0,\n stack = this.getObject(),\n pad = this.getPadPainter().getRootPad(true);\n\n const getHistMinMax = (hist, witherr) => {\n let res = { min: 0, max: 0 },\n domin = true, domax = true;\n if (hist.fMinimum !== kNoZoom) {\n res.min = hist.fMinimum;\n domin = false;\n }\n if (hist.fMaximum !== kNoZoom) {\n res.max = hist.fMaximum;\n domax = false;\n }\n\n if (!domin && !domax) return res;\n\n let i1 = 1, i2 = hist.fXaxis.fNbins, j1 = 1, j2 = 1, first = true;\n\n if (hist.fXaxis.TestBit(EAxisBits.kAxisRange)) {\n i1 = hist.fXaxis.fFirst;\n i2 = hist.fXaxis.fLast;\n }\n\n if (hist._typename.indexOf(clTH2) === 0) {\n j2 = hist.fYaxis.fNbins;\n if (hist.fYaxis.TestBit(EAxisBits.kAxisRange)) {\n j1 = hist.fYaxis.fFirst;\n j2 = hist.fYaxis.fLast;\n }\n }\n for (let j = j1; j <= j2; ++j)\n for (let i = i1; i <= i2; ++i) {\n let val = hist.getBinContent(i, j),\n err = witherr ? hist.getBinError(hist.getBin(i,j)) : 0;\n if (domin && (first || (val-err < res.min))) res.min = val-err;\n if (domax && (first || (val+err > res.max))) res.max = val+err;\n first = false;\n }\n\n return res;\n };\n\n if (this.options.nostack) {\n for (let i = 0; i < stack.fHists.arr.length; ++i) {\n let resh = getHistMinMax(stack.fHists.arr[i], iserr);\n if (i == 0) {\n min = resh.min; max = resh.max;\n } else {\n min = Math.min(min, resh.min);\n max = Math.max(max, resh.max);\n }\n }\n } else {\n min = getHistMinMax(stack.fStack.arr[0], iserr).min;\n max = getHistMinMax(stack.fStack.arr[stack.fStack.arr.length-1], iserr).max;\n }\n\n const adjustRange = () => {\n if (pad && (this.options.ndim == 1 ? pad.fLogy : pad.fLogz)) {\n if (max <= 0) max = 1;\n if (min <= 0) min = 1e-4*max;\n let kmin = 1/(1 + 0.5*Math.log10(max / min)),\n kmax = 1 + 0.2*Math.log10(max / min);\n min *= kmin;\n max *= kmax;\n } else if ((min > 0) && (min < 0.05*max)) {\n min = 0;\n }\n };\n\n max *= (1 + gStyle.fHistTopMargin);\n\n adjustRange();\n\n let max0 = max, min0 = min, zoomed = false;\n\n if (stack.fMaximum != kNoZoom) {\n max = stack.fMaximum*(1 + gStyle.fHistTopMargin);\n max0 = Math.max(max, max0);\n zoomed = true;\n }\n\n if (stack.fMinimum != kNoZoom) {\n min = stack.fMinimum;\n min0 = Math.min(min, min0);\n zoomed = true;\n }\n\n if (zoomed)\n adjustRange();\n else\n min = max = kNoZoom;\n\n return { min, max, min0, max0, zoomed, hopt: `hmin:${min0};hmax:${max0};minimum:${min};maximum:${max}` };\n }\n\n /** @summary Draw next stack histogram */\n async drawNextHisto(indx, pad_painter) {\n\n let stack = this.getObject(),\n hlst = this.options.nostack ? stack.fHists : stack.fStack,\n nhists = hlst?.arr?.length || 0;\n\n if (indx >= nhists)\n return this;\n\n let rindx = this.options.horder ? indx : nhists-indx-1,\n hist = hlst.arr[rindx],\n hopt = hlst.opt[rindx] || hist.fOption || this.options.hopt;\n\n if (hopt.toUpperCase().indexOf(this.options.hopt) < 0)\n hopt += ' ' + this.options.hopt;\n if (this.options.draw_errors && !hopt)\n hopt = 'E';\n\n if (this.options._pfc || this.options._plc || this.options._pmc) {\n let mp = this.getMainPainter();\n if (isFunc(mp?.createAutoColor)) {\n let icolor = mp.createAutoColor(nhists);\n if (this.options._pfc) hist.fFillColor = icolor;\n if (this.options._plc) hist.fLineColor = icolor;\n if (this.options._pmc) hist.fMarkerColor = icolor;\n }\n }\n\n // handling of 'pads' draw option\n if (pad_painter) {\n let subpad_painter = pad_painter.getSubPadPainter(indx+1);\n if (!subpad_painter)\n return this;\n\n let prev_name = subpad_painter.selectCurrentPad(subpad_painter.this_pad_name);\n\n return this.hdraw_func(subpad_painter.getDom(), hist, hopt).then(subp => {\n this.painters.push(subp);\n subpad_painter.selectCurrentPad(prev_name);\n return this.drawNextHisto(indx+1, pad_painter);\n });\n }\n\n // special handling of stacked histograms - set $baseh object for correct drawing\n // also used to provide tooltips\n if ((rindx > 0) && !this.options.nostack)\n hist.$baseh = hlst.arr[rindx - 1];\n\n return this.hdraw_func(this.getDom(), hist, hopt + ' same nostat').then(subp => {\n this.painters.push(subp);\n return this.drawNextHisto(indx+1, pad_painter);\n });\n }\n\n /** @summary Decode draw options of THStack painter */\n decodeOptions(opt) {\n if (!this.options) this.options = {};\n Object.assign(this.options, { ndim: 1, nostack: false, same: false, horder: true, has_errors: false, draw_errors: false, hopt: '' });\n\n let stack = this.getObject(),\n hist = stack.fHistogram || (stack.fHists ? stack.fHists.arr[0] : null) || (stack.fStack ? stack.fStack.arr[0] : null);\n\n const hasErrors = hist => {\n if (hist.fSumw2 && (hist.fSumw2.length > 0))\n for (let n = 0; n < hist.fSumw2.length; ++n)\n if (hist.fSumw2[n] > 0) return true;\n return false;\n };\n\n if (hist && (hist._typename.indexOf(clTH2) == 0))\n this.options.ndim = 2;\n\n if ((this.options.ndim == 2) && !opt)\n opt = 'lego1';\n\n if (stack.fHists && !this.options.nostack)\n for (let k = 0; k < stack.fHists.arr.length; ++k)\n this.options.has_errors = this.options.has_errors || hasErrors(stack.fHists.arr[k]);\n\n this.options.nhist = stack.fHists ? stack.fHists.arr.length : 1;\n\n let d = new DrawOptions(opt);\n\n this.options.nostack = d.check('NOSTACK');\n if (d.check('STACK')) this.options.nostack = false;\n this.options.same = d.check('SAME');\n\n d.check('NOCLEAR'); // ignore noclear option\n\n this.options._pfc = d.check('PFC');\n this.options._plc = d.check('PLC');\n this.options._pmc = d.check('PMC');\n\n this.options.pads = d.check('PADS');\n if (this.options.pads) this.options.nostack = true;\n\n this.options.hopt = d.remain(); // use remaining draw options for histogram draw\n\n let dolego = d.check('LEGO');\n\n this.options.errors = d.check('E');\n\n // if any histogram appears with pre-calculated errors, use E for all histograms\n if (!this.options.nostack && this.options.has_errors && !dolego && !d.check('HIST') && (this.options.hopt.indexOf('E') < 0))\n this.options.draw_errors = true;\n\n this.options.horder = this.options.nostack || dolego;\n }\n\n /** @summary Create main histogram for THStack axis drawing */\n createHistogram(stack) {\n let histos = stack.fHists,\n numhistos = histos ? histos.arr.length : 0;\n\n if (!numhistos) {\n let histo = createHistogram('TH1I', 100);\n histo.fTitle = stack.fTitle;\n return histo;\n }\n\n let h0 = histos.arr[0],\n histo = createHistogram((this.options.ndim == 1) ? 'TH1I' : 'TH2I', h0.fXaxis.fNbins, h0.fYaxis.fNbins);\n histo.fName = 'axis_hist';\n Object.assign(histo.fXaxis, h0.fXaxis);\n if (this.options.ndim==2)\n Object.assign(histo.fYaxis, h0.fYaxis);\n\n // this code is not exists in ROOT painter, can be skipped?\n for (let n = 1; n < numhistos; ++n) {\n let h = histos.arr[n];\n\n if (!histo.fXaxis.fLabels) {\n histo.fXaxis.fXmin = Math.min(histo.fXaxis.fXmin, h.fXaxis.fXmin);\n histo.fXaxis.fXmax = Math.max(histo.fXaxis.fXmax, h.fXaxis.fXmax);\n }\n\n if ((this.options.ndim==2) && !histo.fYaxis.fLabels) {\n histo.fYaxis.fXmin = Math.min(histo.fYaxis.fXmin, h.fYaxis.fXmin);\n histo.fYaxis.fXmax = Math.max(histo.fYaxis.fXmax, h.fYaxis.fXmax);\n }\n }\n\n histo.fTitle = stack.fTitle;\n\n return histo;\n }\n\n /** @summary Update thstack object */\n updateObject(obj) {\n if (!this.matchObjectType(obj)) return false;\n\n let stack = this.getObject();\n\n stack.fHists = obj.fHists;\n stack.fStack = obj.fStack;\n stack.fTitle = obj.fTitle;\n stack.fMinimum = obj.fMinimum;\n stack.fMaximum = obj.fMaximum;\n\n if (!this.options.nostack)\n this.options.nostack = !this.buildStack(stack);\n\n if (this.firstpainter) {\n let src = obj.fHistogram;\n if (!src)\n src = stack.fHistogram = this.createHistogram(stack);\n\n let mm = this.getMinMax(this.options.errors || this.options.draw_errors);\n\n this.firstpainter.options.minimum = mm.min;\n this.firstpainter.options.maximum = mm.max;\n this.firstpainter._checked_zooming = false; // force to check 3d zooming\n\n if (this.options.ndim == 1) {\n this.firstpainter.ymin = mm.min0;\n this.firstpainter.ymax = mm.max0;\n } else {\n this.firstpainter.zmin = mm.min0;\n this.firstpainter.zmax = mm.max0;\n }\n\n this.firstpainter.updateObject(src);\n }\n\n // and now update histograms\n let hlst = this.options.nostack ? stack.fHists : stack.fStack,\n nhists = (hlst && hlst.arr) ? hlst.arr.length : 0;\n\n if (nhists !== this.painters.length) {\n this.getPadPainter()?.cleanPrimitives(objp => { return this.painters.indexOf(objp) >= 0; });\n this.painters = [];\n this.did_update = true;\n } else {\n for (let indx = 0; indx < nhists; ++indx) {\n let rindx = this.options.horder ? indx : nhists-indx-1;\n let hist = hlst.arr[rindx];\n this.painters[indx].updateObject(hist);\n }\n }\n\n return true;\n }\n\n /** @summary Redraw THStack\n * @desc Do something if previous update had changed number of histograms */\n redraw() {\n if (this.did_update) {\n delete this.did_update;\n return this.drawNextHisto(0, this.options.pads ? this.getPadPainter() : null);\n }\n }\n\n /** @summary draw THStack object */\n static async draw(dom, stack, opt) {\n if (!stack.fHists || !stack.fHists.arr)\n return null; // drawing not needed\n\n let painter = new THStackPainter(dom, stack, opt),\n pad_painter = null,\n skip_drawing = false;\n\n return ensureTCanvas(painter, false).then(() => {\n\n painter.decodeOptions(opt);\n\n painter.hdraw_func = (painter.options.ndim == 1) ? TH1Painter.draw : TH2Painter.draw;\n\n if (painter.options.pads) {\n pad_painter = painter.getPadPainter();\n if (pad_painter.doingDraw() && pad_painter.pad?.fPrimitives &&\n pad_painter.pad.fPrimitives.arr.length > 1 && (pad_painter.pad.fPrimitives.arr.indexOf(stack) == 0)) {\n skip_drawing = true;\n console.log('special case with THStack with is already rendered - do nothing');\n return;\n }\n\n pad_painter.cleanPrimitives(p => p !== painter);\n return pad_painter.divide(painter.options.nhist);\n }\n\n if (!painter.options.nostack)\n painter.options.nostack = !painter.buildStack(stack);\n\n if (painter.options.same) return;\n\n let no_histogram = !stack.fHistogram;\n\n if (no_histogram)\n stack.fHistogram = painter.createHistogram(stack);\n\n let mm = painter.getMinMax(painter.options.errors || painter.options.draw_errors),\n hopt = painter.options.hopt + ';axis;' + mm.hopt;\n\n return painter.hdraw_func(dom, stack.fHistogram, hopt).then(subp => {\n painter.addToPadPrimitives();\n painter.firstpainter = subp;\n subp.$secondary = 'hist'; // mark histogram painter as secondary\n if (!no_histogram) painter.$primary = true; // mark stack as provider for histogram\n });\n }).then(() => skip_drawing ? painter : painter.drawNextHisto(0, pad_painter));\n }\n\n} // class THStackPainter\n\nexport { THStackPainter };\n"],"x_google_ignoreList":[0]} \ No newline at end of file diff --git a/docs/946.2673ea85429ea8b0.js b/docs/946.2673ea85429ea8b0.js new file mode 100644 index 000000000..a646d8f15 --- /dev/null +++ b/docs/946.2673ea85429ea8b0.js @@ -0,0 +1,2 @@ +"use strict";(self.webpackChunkphoenix_app=self.webpackChunkphoenix_app||[]).push([[946],{8946:(D,y,o)=>{o.r(y),o.d(y,{TEfficiencyPainter:()=>E});var H=o(5835),l=o(9542),M=o(6458),p=o(8241),x=o(9428),A=o(7823),C=o(6976);const T=(0,l.BIT)(14),L=(0,l.BIT)(15),c=(0,l.BIT)(17),w=(0,l.BIT)(18),u=(B,t)=>B.fBeta_bin_params.length>t?B.fBeta_bin_params[t].first:B.fBeta_alpha,m=(B,t)=>B.fBeta_bin_params.length>t?B.fBeta_bin_params[t].second:B.fBeta_beta;class E extends M.tK{getEfficiency(t,a){let f=t.fTotalHistogram.fArray[a],n=t.fPassedHistogram.fArray[a];if(t.TestBit(T)){let _,h,e=t.TestBit(c)?u(t,a):t.fBeta_alpha,s=t.TestBit(c)?m(t,a):t.fBeta_beta;if(t.TestBit(w)){let d=f,P=t.fTotalHistogram.fSumw2?t.fTotalHistogram.fSumw2[a]:Math.abs(f);if(P<=0)return n/d;let O=d/P;_=n*O+e,h=(d-n)*O+s}else _=n+e,h=f-n+s;return t.TestBit(L)?((e,s)=>{if(e<=0||s<=0)return 0;if(e<=1||s<=1){if(es)return 1;if(e==s)return.5}return(e-1)/(e+s-2)})(_,h):((e,s)=>e<=0||s<=0?0:e/(e+s))(_,h)}return f?n/f:0}getEfficiencyErrorLow(t,a,i){let r=t.fTotalHistogram.fArray[a],f=t.fPassedHistogram.fArray[a],n=0,e=0;return t.TestBit(T)&&(n=t.TestBit(c)?u(t,a):t.fBeta_alpha,e=t.TestBit(c)?m(t,a):t.fBeta_beta),i-this.fBoundary(r,f,t.fConfLevel,!1,n,e)}getEfficiencyErrorUp(t,a,i){let r=t.fTotalHistogram.fArray[a],f=t.fPassedHistogram.fArray[a],n=0,e=0;return t.TestBit(T)&&(n=t.TestBit(c)?u(t,a):t.fBeta_alpha,e=t.TestBit(c)?m(t,a):t.fBeta_beta),this.fBoundary(r,f,t.fConfLevel,!0,n,e)-i}copyAttributes(t,a){["fLineColor","fLineStyle","fLineWidth","fFillColor","fFillStyle","fMarkerColor","fMarkerStyle","fMarkerSize"].forEach(i=>t[i]=a[i])}createGraph(){let t=(0,l.create)(p.clTGraphAsymmErrors);return t.fName="eff_graph",t}createHisto(t){const r=(0,l.createHistogram)("TH2F",t.fTotalHistogram.fXaxis.fNbins,t.fTotalHistogram.fYaxis.fNbins);return Object.assign(r.fXaxis,t.fTotalHistogram.fXaxis),Object.assign(r.fYaxis,t.fTotalHistogram.fYaxis),r.fName="eff_histo",r}fillGraph(t,a){const i=this.getObject(),r=i.fTotalHistogram.fXaxis,f=r.fNbins,n=a.indexOf("e0")>=0;for(let e=0,s=0;e=a.fFunctions.arr.length?this:x.TF1Painter.draw(this.getDom(),a.fFunctions.arr[t],a.fFunctions.opt[t]).then(()=>this.drawFunction(t+1))}static draw(t,a,i){return(0,H.Z)(function*(){if(!a||!a.fTotalHistogram)return null;(!i||!(0,l.isStr)(i))&&(i=""),i=i.toLowerCase();let r=0;if(0==a.fTotalHistogram._typename.indexOf(l.clTH1))r=1;else{if(0!=a.fTotalHistogram._typename.indexOf(l.clTH2))return null;r=2}let n,f=new E(t,a);if(f.ndim=r,f.fBoundary=(0,C.getTEfficiencyBoundaryFunc)(a.fStatisticOption,a.TestBit(T)),1==r){i||(i="ap"),i.indexOf("same")<0&&i.indexOf("a")<0&&(i+="a"),i.indexOf("p")<0&&(i+="p");let e=f.createGraph(a);f.fillGraph(e,i),n=p.TGraphPainter.draw(t,e,i)}else{i||(i="col");let e=f.createHisto(a);f.fillHisto(e,i),n=A.S.draw(t,e,i)}return n.then(()=>(f.addToPadPrimitives(),f.drawFunction(0)))})()}}}}]); +//# sourceMappingURL=946.2673ea85429ea8b0.js.map \ No newline at end of file diff --git a/docs/946.2673ea85429ea8b0.js.map b/docs/946.2673ea85429ea8b0.js.map new file mode 100644 index 000000000..8b281a2df --- /dev/null +++ b/docs/946.2673ea85429ea8b0.js.map @@ -0,0 +1 @@ +{"version":3,"file":"946.2673ea85429ea8b0.js","mappings":"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","names":["kIsBayesian","BIT","kPosteriorMode","kUseBinPrior","kUseWeights","getBetaAlpha","obj","bin","fBeta_bin_params","length","first","fBeta_alpha","getBetaBeta","second","fBeta_beta","TEfficiencyPainter","ObjectPainter","getEfficiency","total","fTotalHistogram","fArray","passed","fPassedHistogram","TestBit","aa","bb","alpha","beta","tw","tw2","fSumw2","Math","abs","norm","a","b","BetaMode","BetaMean","getEfficiencyErrorLow","value","this","fBoundary","fConfLevel","getEfficiencyErrorUp","copyAttributes","eff","forEach","name","createGraph","gr","create","clTGraphAsymmErrors","fName","createHisto","hist","createHistogram","fXaxis","fNbins","fYaxis","Object","assign","fillGraph","opt","getObject","xaxis","npoints","plot0Bins","indexOf","n","j","getBinContent","fX","GetBinCenter","fY","fEXlow","GetBinLowEdge","fEXhigh","fEYlow","fEYhigh","fNpoints","fTitle","fillHisto","nbinsx","nbinsy","kNoStats","i","getBin","fBits","drawFunction","indx","fFunctions","arr","TF1Painter","getDom","then","static","dom","isStr","toLowerCase","ndim","_typename","clTH1","clTH2","promise","painter","getTEfficiencyBoundaryFunc","fStatisticOption","TGraphPainter","TH2Painter","addToPadPrimitives"],"sourceRoot":"webpack:///","sources":["../node_modules/jsroot/modules/hist/TEfficiencyPainter.mjs"],"sourcesContent":["import { BIT, create, createHistogram, isStr, clTH1, clTH2 } from '../core.mjs';\nimport { ObjectPainter } from '../base/ObjectPainter.mjs';\nimport { TGraphPainter, clTGraphAsymmErrors } from '../hist2d/TGraphPainter.mjs';\nimport { TF1Painter } from '../hist/TF1Painter.mjs';\nimport { TH2Painter } from '../hist2d/TH2Painter.mjs';\nimport { getTEfficiencyBoundaryFunc } from '../base/math.mjs';\n\n\nconst kIsBayesian = BIT(14), ///< Bayesian statistics are used\n kPosteriorMode = BIT(15), ///< Use posterior mean for best estimate (Bayesian statistics)\n // kShortestInterval = BIT(16), ///< Use shortest interval, not implemented - too complicated\n kUseBinPrior = BIT(17), ///< Use a different prior for each bin\n kUseWeights = BIT(18), ///< Use weights\n getBetaAlpha = (obj,bin) => (obj.fBeta_bin_params.length > bin) ? obj.fBeta_bin_params[bin].first : obj.fBeta_alpha,\n getBetaBeta = (obj,bin) => (obj.fBeta_bin_params.length > bin) ? obj.fBeta_bin_params[bin].second : obj.fBeta_beta;\n\n/**\n * @summary Painter for TEfficiency object\n *\n * @private\n */\n\nclass TEfficiencyPainter extends ObjectPainter {\n\n /** @summary Caluclate efficiency */\n getEfficiency(obj, bin) {\n\n const BetaMean = (a,b) => (a <= 0 || b <= 0 ) ? 0 : a / (a + b),\n BetaMode = (a,b) => {\n if (a <= 0 || b <= 0 ) return 0;\n if ( a <= 1 || b <= 1) {\n if (a < b) return 0;\n if (a > b) return 1;\n if (a == b) return 0.5; // cannot do otherwise\n }\n return (a - 1.0) / (a + b -2.0);\n };\n\n let total = obj.fTotalHistogram.fArray[bin], // should work for both 1-d and 2-d\n passed = obj.fPassedHistogram.fArray[bin]; // should work for both 1-d and 2-d\n\n if(obj.TestBit(kIsBayesian)) {\n // parameters for the beta prior distribution\n let alpha = obj.TestBit(kUseBinPrior) ? getBetaAlpha(obj, bin) : obj.fBeta_alpha,\n beta = obj.TestBit(kUseBinPrior) ? getBetaBeta(obj, bin) : obj.fBeta_beta;\n\n let aa,bb;\n if(obj.TestBit(kUseWeights)) {\n let tw = total, // fTotalHistogram->GetBinContent(bin);\n tw2 = obj.fTotalHistogram.fSumw2 ? obj.fTotalHistogram.fSumw2[bin] : Math.abs(total),\n pw = passed; // fPassedHistogram->GetBinContent(bin);\n\n if (tw2 <= 0 ) return pw/tw;\n\n // tw/tw2 renormalize the weights\n let norm = tw/tw2;\n aa = pw * norm + alpha;\n bb = (tw - pw) * norm + beta;\n } else {\n aa = passed + alpha;\n bb = total - passed + beta;\n }\n\n if (!obj.TestBit(kPosteriorMode) )\n return BetaMean(aa,bb);\n else\n return BetaMode(aa,bb);\n }\n\n return total ? passed/total : 0;\n }\n\n /** @summary Caluclate efficiency error low */\n getEfficiencyErrorLow(obj, bin, value) {\n let total = obj.fTotalHistogram.fArray[bin],\n passed = obj.fPassedHistogram.fArray[bin],\n alpha = 0, beta = 0;\n if (obj.TestBit(kIsBayesian)) {\n alpha = obj.TestBit(kUseBinPrior) ? getBetaAlpha(obj, bin) : obj.fBeta_alpha;\n beta = obj.TestBit(kUseBinPrior) ? getBetaBeta(obj, bin) : obj.fBeta_beta;\n }\n\n return value - this.fBoundary(total, passed, obj.fConfLevel, false, alpha, beta);\n }\n\n /** @summary Caluclate efficiency error low up */\n getEfficiencyErrorUp(obj, bin, value) {\n let total = obj.fTotalHistogram.fArray[bin],\n passed = obj.fPassedHistogram.fArray[bin],\n alpha = 0, beta = 0;\n if (obj.TestBit(kIsBayesian)) {\n alpha = obj.TestBit(kUseBinPrior) ? getBetaAlpha(obj, bin) : obj.fBeta_alpha;\n beta = obj.TestBit(kUseBinPrior) ? getBetaBeta(obj, bin) : obj.fBeta_beta;\n }\n\n return this.fBoundary(total, passed, obj.fConfLevel, true, alpha, beta) - value;\n }\n\n /** @summary Copy drawning attributes */\n copyAttributes(obj, eff) {\n ['fLineColor', 'fLineStyle', 'fLineWidth', 'fFillColor', 'fFillStyle', 'fMarkerColor', 'fMarkerStyle', 'fMarkerSize'].forEach(name => obj[name] = eff[name]);\n }\n\n /** @summary Create graph for the drawing of 1-dim TEfficiency */\n createGraph(/*eff*/) {\n let gr = create(clTGraphAsymmErrors);\n gr.fName = 'eff_graph';\n return gr;\n }\n\n /** @summary Create histogram for the drawing of 2-dim TEfficiency */\n createHisto(eff) {\n const nbinsx = eff.fTotalHistogram.fXaxis.fNbins,\n nbinsy = eff.fTotalHistogram.fYaxis.fNbins,\n hist = createHistogram('TH2F', nbinsx, nbinsy);\n Object.assign(hist.fXaxis, eff.fTotalHistogram.fXaxis);\n Object.assign(hist.fYaxis, eff.fTotalHistogram.fYaxis);\n hist.fName = 'eff_histo';\n return hist;\n }\n\n /** @summary Fill graph with points from efficiency object */\n fillGraph(gr, opt) {\n const eff = this.getObject(),\n xaxis = eff.fTotalHistogram.fXaxis,\n npoints = xaxis.fNbins,\n plot0Bins = (opt.indexOf('e0') >= 0);\n\n for (let n = 0, j = 0; n < npoints; ++n) {\n if (!plot0Bins && eff.fTotalHistogram.getBinContent(n+1) === 0) continue;\n\n let value = this.getEfficiency(eff, n+1);\n\n gr.fX[j] = xaxis.GetBinCenter(n+1);\n gr.fY[j] = value;\n gr.fEXlow[j] = xaxis.GetBinCenter(n+1) - xaxis.GetBinLowEdge(n+1);\n gr.fEXhigh[j] = xaxis.GetBinLowEdge(n+2) - xaxis.GetBinCenter(n+1);\n gr.fEYlow[j] = this.getEfficiencyErrorLow(eff, n+1, value);\n gr.fEYhigh[j] = this.getEfficiencyErrorUp(eff, n+1, value);\n\n gr.fNpoints = ++j;\n }\n\n gr.fTitle = eff.fTitle;\n this.copyAttributes(gr, eff);\n }\n\n /** @summary Fill graph with points from efficiency object */\n fillHisto(hist) {\n const eff = this.getObject(),\n nbinsx = hist.fXaxis.fNbins,\n nbinsy = hist.fYaxis.fNbins,\n kNoStats = BIT(9);\n\n for (let i = 0; i < nbinsx+2; ++i)\n for (let j = 0; j < nbinsy+2; ++j) {\n let bin = hist.getBin(i, j),\n value = this.getEfficiency(eff, bin);\n hist.fArray[bin] = value;\n }\n\n hist.fTitle = eff.fTitle;\n hist.fBits = hist.fBits | kNoStats;\n this.copyAttributes(hist, eff);\n }\n\n /** @summary Draw function */\n drawFunction(indx) {\n const eff = this.getObject();\n\n if (!eff || !eff.fFunctions || indx >= eff.fFunctions.arr.length)\n return this;\n\n return TF1Painter.draw(this.getDom(), eff.fFunctions.arr[indx], eff.fFunctions.opt[indx]).then(() => this.drawFunction(indx+1));\n }\n\n /** @summary Draw TEfficiency object */\n static async draw(dom, eff, opt) {\n if (!eff || !eff.fTotalHistogram)\n return null;\n\n if (!opt || !isStr(opt)) opt = '';\n opt = opt.toLowerCase();\n\n let ndim = 0;\n if (eff.fTotalHistogram._typename.indexOf(clTH1) == 0)\n ndim = 1;\n else if (eff.fTotalHistogram._typename.indexOf(clTH2) == 0)\n ndim = 2;\n else\n return null;\n\n let painter = new TEfficiencyPainter(dom, eff);\n painter.ndim = ndim;\n\n painter.fBoundary = getTEfficiencyBoundaryFunc(eff.fStatisticOption, eff.TestBit(kIsBayesian));\n\n let promise;\n\n if (ndim == 1) {\n if (!opt) opt = 'ap';\n if ((opt.indexOf('same') < 0) && (opt.indexOf('a') < 0)) opt += 'a';\n if (opt.indexOf('p') < 0) opt += 'p';\n\n let gr = painter.createGraph(eff);\n painter.fillGraph(gr, opt);\n promise = TGraphPainter.draw(dom, gr, opt);\n } else {\n if (!opt) opt = 'col';\n let hist = painter.createHisto(eff);\n painter.fillHisto(hist, opt);\n promise = TH2Painter.draw(dom, hist, opt);\n }\n\n return promise.then(() => {\n painter.addToPadPrimitives();\n return painter.drawFunction(0);\n });\n }\n\n} // class TEfficiencyPainter\n\nexport { TEfficiencyPainter };\n"],"x_google_ignoreList":[0]} \ No newline at end of file diff --git a/docs/946.e9493c0284811601.js b/docs/946.e9493c0284811601.js deleted file mode 100644 index 3a16181e6..000000000 --- a/docs/946.e9493c0284811601.js +++ /dev/null @@ -1,2 +0,0 @@ -"use strict";(self.webpackChunkphoenix_app=self.webpackChunkphoenix_app||[]).push([[946],{8946:(D,y,o)=>{o.r(y),o.d(y,{TEfficiencyPainter:()=>E});var H=o(4788),l=o(9542),M=o(6458),p=o(8241),x=o(9428),A=o(7823),C=o(6976);const T=(0,l.BIT)(14),L=(0,l.BIT)(15),B=(0,l.BIT)(17),w=(0,l.BIT)(18),m=(c,t)=>c.fBeta_bin_params.length>t?c.fBeta_bin_params[t].first:c.fBeta_alpha,u=(c,t)=>c.fBeta_bin_params.length>t?c.fBeta_bin_params[t].second:c.fBeta_beta;class E extends M.tK{getEfficiency(t,a){let f=t.fTotalHistogram.fArray[a],n=t.fPassedHistogram.fArray[a];if(t.TestBit(T)){let _,h,e=t.TestBit(B)?m(t,a):t.fBeta_alpha,r=t.TestBit(B)?u(t,a):t.fBeta_beta;if(t.TestBit(w)){let g=f,P=t.fTotalHistogram.fSumw2?t.fTotalHistogram.fSumw2[a]:Math.abs(f);if(P<=0)return n/g;let O=g/P;_=n*O+e,h=(g-n)*O+r}else _=n+e,h=f-n+r;return t.TestBit(L)?((e,r)=>{if(e<=0||r<=0)return 0;if(e<=1||r<=1){if(er)return 1;if(e==r)return.5}return(e-1)/(e+r-2)})(_,h):((e,r)=>e<=0||r<=0?0:e/(e+r))(_,h)}return f?n/f:0}getEfficiencyErrorLow(t,a,i){let s=t.fTotalHistogram.fArray[a],f=t.fPassedHistogram.fArray[a],n=0,e=0;return t.TestBit(T)&&(n=t.TestBit(B)?m(t,a):t.fBeta_alpha,e=t.TestBit(B)?u(t,a):t.fBeta_beta),i-this.fBoundary(s,f,t.fConfLevel,!1,n,e)}getEfficiencyErrorUp(t,a,i){let s=t.fTotalHistogram.fArray[a],f=t.fPassedHistogram.fArray[a],n=0,e=0;return t.TestBit(T)&&(n=t.TestBit(B)?m(t,a):t.fBeta_alpha,e=t.TestBit(B)?u(t,a):t.fBeta_beta),this.fBoundary(s,f,t.fConfLevel,!0,n,e)-i}copyAttributes(t,a){["fLineColor","fLineStyle","fLineWidth","fFillColor","fFillStyle","fMarkerColor","fMarkerStyle","fMarkerSize"].forEach(i=>t[i]=a[i])}createGraph(){let t=(0,l.create)(p.clTGraphAsymmErrors);return t.fName="eff_graph",t}createHisto(t){const s=(0,l.createHistogram)("TH2F",t.fTotalHistogram.fXaxis.fNbins,t.fTotalHistogram.fYaxis.fNbins);return Object.assign(s.fXaxis,t.fTotalHistogram.fXaxis),Object.assign(s.fYaxis,t.fTotalHistogram.fYaxis),s.fName="eff_histo",s}fillGraph(t,a){const i=this.getObject(),s=i.fTotalHistogram.fXaxis,f=s.fNbins,n=a.indexOf("e0")>=0;for(let e=0,r=0;e=a.fFunctions.arr.length?this:x.TF1Painter.draw(this.getDom(),a.fFunctions.arr[t],a.fFunctions.opt[t]).then(()=>this.drawFunction(t+1))}static draw(t,a,i){return(0,H.Z)(function*(){if(!a||!a.fTotalHistogram)return null;(!i||!(0,l.isStr)(i))&&(i=""),i=i.toLowerCase();let s=0;if(0==a.fTotalHistogram._typename.indexOf(l.clTH1))s=1;else{if(0!=a.fTotalHistogram._typename.indexOf(l.clTH2))return null;s=2}let n,f=new E(t,a);if(f.ndim=s,f.fBoundary=(0,C.getTEfficiencyBoundaryFunc)(a.fStatisticOption,a.TestBit(T)),1==s){i||(i="ap"),i.indexOf("same")<0&&i.indexOf("a")<0&&(i+="a"),i.indexOf("p")<0&&(i+="p");let e=f.createGraph(a);f.fillGraph(e,i),n=p.TGraphPainter.draw(t,e,i)}else{i||(i="col");let e=f.createHisto(a);f.fillHisto(e,i),n=A.S.draw(t,e,i)}return n.then(()=>(f.addToPadPrimitives(),f.drawFunction(0)))})()}}}}]); -//# sourceMappingURL=946.e9493c0284811601.js.map \ No newline at end of file diff --git a/docs/946.e9493c0284811601.js.map b/docs/946.e9493c0284811601.js.map deleted file mode 100644 index 2e31b3107..000000000 --- a/docs/946.e9493c0284811601.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"946.e9493c0284811601.js","mappings":"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","names":["kIsBayesian","BIT","kPosteriorMode","kUseBinPrior","kUseWeights","getBetaAlpha","obj","bin","fBeta_bin_params","length","first","fBeta_alpha","getBetaBeta","second","fBeta_beta","TEfficiencyPainter","ObjectPainter","getEfficiency","total","fTotalHistogram","fArray","passed","fPassedHistogram","TestBit","aa","bb","alpha","beta","tw","tw2","fSumw2","Math","abs","norm","a","b","BetaMode","BetaMean","getEfficiencyErrorLow","value","this","fBoundary","fConfLevel","getEfficiencyErrorUp","copyAttributes","eff","forEach","name","createGraph","gr","create","clTGraphAsymmErrors","fName","createHisto","hist","createHistogram","fXaxis","fNbins","fYaxis","Object","assign","fillGraph","opt","getObject","xaxis","npoints","plot0Bins","indexOf","n","j","getBinContent","fX","GetBinCenter","fY","fEXlow","GetBinLowEdge","fEXhigh","fEYlow","fEYhigh","fNpoints","fTitle","fillHisto","nbinsx","nbinsy","kNoStats","i","getBin","fBits","drawFunction","indx","fFunctions","arr","TF1Painter","getDom","then","static","dom","isStr","toLowerCase","ndim","_typename","clTH1","clTH2","promise","painter","getTEfficiencyBoundaryFunc","fStatisticOption","TGraphPainter","TH2Painter","addToPadPrimitives"],"sourceRoot":"webpack:///","sources":["../node_modules/jsroot/modules/hist/TEfficiencyPainter.mjs"],"sourcesContent":["import { BIT, create, createHistogram, isStr, clTH1, clTH2 } from '../core.mjs';\nimport { ObjectPainter } from '../base/ObjectPainter.mjs';\nimport { TGraphPainter, clTGraphAsymmErrors } from '../hist2d/TGraphPainter.mjs';\nimport { TF1Painter } from '../hist/TF1Painter.mjs';\nimport { TH2Painter } from '../hist2d/TH2Painter.mjs';\nimport { getTEfficiencyBoundaryFunc } from '../base/math.mjs';\n\n\nconst kIsBayesian = BIT(14), ///< Bayesian statistics are used\n kPosteriorMode = BIT(15), ///< Use posterior mean for best estimate (Bayesian statistics)\n // kShortestInterval = BIT(16), ///< Use shortest interval, not implemented - too complicated\n kUseBinPrior = BIT(17), ///< Use a different prior for each bin\n kUseWeights = BIT(18), ///< Use weights\n getBetaAlpha = (obj,bin) => (obj.fBeta_bin_params.length > bin) ? obj.fBeta_bin_params[bin].first : obj.fBeta_alpha,\n getBetaBeta = (obj,bin) => (obj.fBeta_bin_params.length > bin) ? obj.fBeta_bin_params[bin].second : obj.fBeta_beta;\n\n/**\n * @summary Painter for TEfficiency object\n *\n * @private\n */\n\nclass TEfficiencyPainter extends ObjectPainter {\n\n /** @summary Caluclate efficiency */\n getEfficiency(obj, bin) {\n\n const BetaMean = (a,b) => (a <= 0 || b <= 0 ) ? 0 : a / (a + b),\n BetaMode = (a,b) => {\n if (a <= 0 || b <= 0 ) return 0;\n if ( a <= 1 || b <= 1) {\n if (a < b) return 0;\n if (a > b) return 1;\n if (a == b) return 0.5; // cannot do otherwise\n }\n return (a - 1.0) / (a + b -2.0);\n };\n\n let total = obj.fTotalHistogram.fArray[bin], // should work for both 1-d and 2-d\n passed = obj.fPassedHistogram.fArray[bin]; // should work for both 1-d and 2-d\n\n if(obj.TestBit(kIsBayesian)) {\n // parameters for the beta prior distribution\n let alpha = obj.TestBit(kUseBinPrior) ? getBetaAlpha(obj, bin) : obj.fBeta_alpha,\n beta = obj.TestBit(kUseBinPrior) ? getBetaBeta(obj, bin) : obj.fBeta_beta;\n\n let aa,bb;\n if(obj.TestBit(kUseWeights)) {\n let tw = total, // fTotalHistogram->GetBinContent(bin);\n tw2 = obj.fTotalHistogram.fSumw2 ? obj.fTotalHistogram.fSumw2[bin] : Math.abs(total),\n pw = passed; // fPassedHistogram->GetBinContent(bin);\n\n if (tw2 <= 0 ) return pw/tw;\n\n // tw/tw2 renormalize the weights\n let norm = tw/tw2;\n aa = pw * norm + alpha;\n bb = (tw - pw) * norm + beta;\n } else {\n aa = passed + alpha;\n bb = total - passed + beta;\n }\n\n if (!obj.TestBit(kPosteriorMode) )\n return BetaMean(aa,bb);\n else\n return BetaMode(aa,bb);\n }\n\n return total ? passed/total : 0;\n }\n\n /** @summary Caluclate efficiency error low */\n getEfficiencyErrorLow(obj, bin, value) {\n let total = obj.fTotalHistogram.fArray[bin],\n passed = obj.fPassedHistogram.fArray[bin],\n alpha = 0, beta = 0;\n if (obj.TestBit(kIsBayesian)) {\n alpha = obj.TestBit(kUseBinPrior) ? getBetaAlpha(obj, bin) : obj.fBeta_alpha;\n beta = obj.TestBit(kUseBinPrior) ? getBetaBeta(obj, bin) : obj.fBeta_beta;\n }\n\n return value - this.fBoundary(total, passed, obj.fConfLevel, false, alpha, beta);\n }\n\n /** @summary Caluclate efficiency error low up */\n getEfficiencyErrorUp(obj, bin, value) {\n let total = obj.fTotalHistogram.fArray[bin],\n passed = obj.fPassedHistogram.fArray[bin],\n alpha = 0, beta = 0;\n if (obj.TestBit(kIsBayesian)) {\n alpha = obj.TestBit(kUseBinPrior) ? getBetaAlpha(obj, bin) : obj.fBeta_alpha;\n beta = obj.TestBit(kUseBinPrior) ? getBetaBeta(obj, bin) : obj.fBeta_beta;\n }\n\n return this.fBoundary(total, passed, obj.fConfLevel, true, alpha, beta) - value;\n }\n\n /** @summary Copy drawning attributes */\n copyAttributes(obj, eff) {\n ['fLineColor', 'fLineStyle', 'fLineWidth', 'fFillColor', 'fFillStyle', 'fMarkerColor', 'fMarkerStyle', 'fMarkerSize'].forEach(name => obj[name] = eff[name]);\n }\n\n /** @summary Create graph for the drawing of 1-dim TEfficiency */\n createGraph(/*eff*/) {\n let gr = create(clTGraphAsymmErrors);\n gr.fName = 'eff_graph';\n return gr;\n }\n\n /** @summary Create histogram for the drawing of 2-dim TEfficiency */\n createHisto(eff) {\n const nbinsx = eff.fTotalHistogram.fXaxis.fNbins,\n nbinsy = eff.fTotalHistogram.fYaxis.fNbins,\n hist = createHistogram('TH2F', nbinsx, nbinsy);\n Object.assign(hist.fXaxis, eff.fTotalHistogram.fXaxis);\n Object.assign(hist.fYaxis, eff.fTotalHistogram.fYaxis);\n hist.fName = 'eff_histo';\n return hist;\n }\n\n /** @summary Fill graph with points from efficiency object */\n fillGraph(gr, opt) {\n const eff = this.getObject(),\n xaxis = eff.fTotalHistogram.fXaxis,\n npoints = xaxis.fNbins,\n plot0Bins = (opt.indexOf('e0') >= 0);\n\n for (let n = 0, j = 0; n < npoints; ++n) {\n if (!plot0Bins && eff.fTotalHistogram.getBinContent(n+1) === 0) continue;\n\n let value = this.getEfficiency(eff, n+1);\n\n gr.fX[j] = xaxis.GetBinCenter(n+1);\n gr.fY[j] = value;\n gr.fEXlow[j] = xaxis.GetBinCenter(n+1) - xaxis.GetBinLowEdge(n+1);\n gr.fEXhigh[j] = xaxis.GetBinLowEdge(n+2) - xaxis.GetBinCenter(n+1);\n gr.fEYlow[j] = this.getEfficiencyErrorLow(eff, n+1, value);\n gr.fEYhigh[j] = this.getEfficiencyErrorUp(eff, n+1, value);\n\n gr.fNpoints = ++j;\n }\n\n gr.fTitle = eff.fTitle;\n this.copyAttributes(gr, eff);\n }\n\n /** @summary Fill graph with points from efficiency object */\n fillHisto(hist) {\n const eff = this.getObject(),\n nbinsx = hist.fXaxis.fNbins,\n nbinsy = hist.fYaxis.fNbins,\n kNoStats = BIT(9);\n\n for (let i = 0; i < nbinsx+2; ++i)\n for (let j = 0; j < nbinsy+2; ++j) {\n let bin = hist.getBin(i, j),\n value = this.getEfficiency(eff, bin);\n hist.fArray[bin] = value;\n }\n\n hist.fTitle = eff.fTitle;\n hist.fBits = hist.fBits | kNoStats;\n this.copyAttributes(hist, eff);\n }\n\n /** @summary Draw function */\n drawFunction(indx) {\n const eff = this.getObject();\n\n if (!eff || !eff.fFunctions || indx >= eff.fFunctions.arr.length)\n return this;\n\n return TF1Painter.draw(this.getDom(), eff.fFunctions.arr[indx], eff.fFunctions.opt[indx]).then(() => this.drawFunction(indx+1));\n }\n\n /** @summary Draw TEfficiency object */\n static async draw(dom, eff, opt) {\n if (!eff || !eff.fTotalHistogram)\n return null;\n\n if (!opt || !isStr(opt)) opt = '';\n opt = opt.toLowerCase();\n\n let ndim = 0;\n if (eff.fTotalHistogram._typename.indexOf(clTH1) == 0)\n ndim = 1;\n else if (eff.fTotalHistogram._typename.indexOf(clTH2) == 0)\n ndim = 2;\n else\n return null;\n\n let painter = new TEfficiencyPainter(dom, eff);\n painter.ndim = ndim;\n\n painter.fBoundary = getTEfficiencyBoundaryFunc(eff.fStatisticOption, eff.TestBit(kIsBayesian));\n\n let promise;\n\n if (ndim == 1) {\n if (!opt) opt = 'ap';\n if ((opt.indexOf('same') < 0) && (opt.indexOf('a') < 0)) opt += 'a';\n if (opt.indexOf('p') < 0) opt += 'p';\n\n let gr = painter.createGraph(eff);\n painter.fillGraph(gr, opt);\n promise = TGraphPainter.draw(dom, gr, opt);\n } else {\n if (!opt) opt = 'col';\n let hist = painter.createHisto(eff);\n painter.fillHisto(hist, opt);\n promise = TH2Painter.draw(dom, hist, opt);\n }\n\n return promise.then(() => {\n painter.addToPadPrimitives();\n return painter.drawFunction(0);\n });\n }\n\n} // class TEfficiencyPainter\n\nexport { TEfficiencyPainter };\n"],"x_google_ignoreList":[0]} \ No newline at end of file diff --git a/docs/99.0ba42481a501907f.js b/docs/99.1c05592095e3fd6c.js similarity index 82% rename from docs/99.0ba42481a501907f.js rename to docs/99.1c05592095e3fd6c.js index ce75455a6..2af7c5ea9 100644 --- a/docs/99.0ba42481a501907f.js +++ b/docs/99.1c05592095e3fd6c.js @@ -1,2 +1,2 @@ -"use strict";(self.webpackChunkphoenix_app=self.webpackChunkphoenix_app||[]).push([[99],{5099:(_,r,a)=>{a.r(r),a.d(r,{TArrowPainter:()=>d});var x=a(4788),f=a(9542),g=a(6458),M=a(49),c=a(9622);class d extends g.tK{rotate(t,s,i){let h=this.wsize*Math.cos(t),e=this.wsize*Math.sin(t),n="";return void 0!==s&&void 0!==i?n=`M${Math.round(s-h)},${Math.round(i-e)}`:(h=-h,e=-e),n+=`l${Math.round(h)},${Math.round(e)}`,s&&void 0===i&&(n+="z"),n}createPath(){let t=Math.atan2(this.y2-this.y1,this.x2-this.x1),s=this.wsize*Math.cos(this.angle2),i=s*Math.cos(t),h=s*Math.sin(t),e="";return this.beg&&(e+=this.rotate(t-Math.PI-this.angle2,this.x1,this.y1)+this.rotate(t-Math.PI+this.angle2,this.beg>10)),this.mid%10==2&&(e+=this.rotate(t-Math.PI-this.angle2,(this.x1+this.x2-i)/2,(this.y1+this.y2-h)/2)+this.rotate(t-Math.PI+this.angle2,this.mid>10)),this.mid%10==1&&(e+=this.rotate(t-this.angle2,(this.x1+this.x2+i)/2,(this.y1+this.y2+h)/2)+this.rotate(t+this.angle2,this.mid>10)),this.end&&(e+=this.rotate(t-this.angle2,this.x2,this.y2)+this.rotate(t+this.angle2,this.end>10)),`M${Math.round(this.x1+(this.beg>10?i:0))},${Math.round(this.y1+(this.beg>10?h:0))}L${Math.round(this.x2-(this.end>10?i:0))},${Math.round(this.y2-(this.end>10?h:0))}`+e}moveStart(t,s){let i=Math.sqrt((this.x1-this.x2)**2+(this.y1-this.y2)**2),h=Math.sqrt((t-this.x1)**2+(s-this.y1)**2)/i,e=Math.sqrt((t-this.x2)**2+(s-this.y2)**2)/i;this.side=h>.9?1:e>.9?-1:0}moveDrag(t,s){1!=this.side&&(this.x1+=t,this.y1+=s),-1!=this.side&&(this.x2+=t,this.y2+=s),this.draw_g.select("path").attr("d",this.createPath())}moveEnd(t){if(t)return;let s=this.getObject(),i="";s.fX1=this.svgToAxis("x",this.x1,this.isndc),s.fX2=this.svgToAxis("x",this.x2,this.isndc),s.fY1=this.svgToAxis("y",this.y1,this.isndc),s.fY2=this.svgToAxis("y",this.y2,this.isndc),1!=this.side&&(i+=`SetX1(${s.fX1});;SetY1(${s.fY1});;`),-1!=this.side&&(i+=`SetX2(${s.fX2});;SetY2(${s.fY2});;`),this.submitCanvExec(i+"Notify();;")}redraw(){let t=this.getObject(),s=(0,f.BIT)(14),i=t.fOption,h=this.getPadPainter().getPadRect();this.wsize=Math.max(3,Math.round(Math.max(h.width,h.height)*t.fArrowSize*.8)),this.isndc=t.TestBit(s),this.angle2=t.fAngle/2/180*Math.PI,this.beg=this.mid=this.end=0,0==i.indexOf("<")&&(this.beg=0==i.indexOf("<|")?12:2),i.indexOf("->-")>=0?this.mid=1:i.indexOf("-|>-")>=0?this.mid=11:i.indexOf("-<-")>=0?this.mid=2:i.indexOf("-<|-")>=0&&(this.mid=12);let e=i.lastIndexOf(">"),n=i.lastIndexOf("|>"),l=i.length;e>=0&&e==l-1&&(this.end=n>=0&&n==l-2?11:1),this.createAttLine({attr:t}),this.createG(),this.x1=this.axisToSvg("x",t.fX1,this.isndc,!0),this.y1=this.axisToSvg("y",t.fY1,this.isndc,!0),this.x2=this.axisToSvg("x",t.fX2,this.isndc,!0),this.y2=this.axisToSvg("y",t.fY2,this.isndc,!0);let o=this.draw_g.append("svg:path").attr("d",this.createPath()).call(this.lineatt.func);return this.beg>10||this.end>10?(this.createAttFill({attr:t}),o.call(this.fillatt.func)):o.style("fill","none"),(0,f.isBatchMode)()||(0,c.Z)(this),this}static draw(t,s,i){return(0,x.Z)(function*(){let h=new d(t,s,i);return(0,M.ensureTCanvas)(h,!1).then(()=>h.redraw())})()}}}}]); -//# sourceMappingURL=99.0ba42481a501907f.js.map \ No newline at end of file +"use strict";(self.webpackChunkphoenix_app=self.webpackChunkphoenix_app||[]).push([[99],{5099:(M,r,a)=>{a.r(r),a.d(r,{TArrowPainter:()=>d});var x=a(5835),l=a(9542),_=a(6458),g=a(49),u=a(9622);class d extends _.tK{rotate(t,s,i){let h=this.wsize*Math.cos(t),e=this.wsize*Math.sin(t),n="";return void 0!==s&&void 0!==i?n=`M${Math.round(s-h)},${Math.round(i-e)}`:(h=-h,e=-e),n+=`l${Math.round(h)},${Math.round(e)}`,s&&void 0===i&&(n+="z"),n}createPath(){let t=Math.atan2(this.y2-this.y1,this.x2-this.x1),s=this.wsize*Math.cos(this.angle2),i=s*Math.cos(t),h=s*Math.sin(t),e="";return this.beg&&(e+=this.rotate(t-Math.PI-this.angle2,this.x1,this.y1)+this.rotate(t-Math.PI+this.angle2,this.beg>10)),this.mid%10==2&&(e+=this.rotate(t-Math.PI-this.angle2,(this.x1+this.x2-i)/2,(this.y1+this.y2-h)/2)+this.rotate(t-Math.PI+this.angle2,this.mid>10)),this.mid%10==1&&(e+=this.rotate(t-this.angle2,(this.x1+this.x2+i)/2,(this.y1+this.y2+h)/2)+this.rotate(t+this.angle2,this.mid>10)),this.end&&(e+=this.rotate(t-this.angle2,this.x2,this.y2)+this.rotate(t+this.angle2,this.end>10)),`M${Math.round(this.x1+(this.beg>10?i:0))},${Math.round(this.y1+(this.beg>10?h:0))}L${Math.round(this.x2-(this.end>10?i:0))},${Math.round(this.y2-(this.end>10?h:0))}`+e}moveStart(t,s){let i=Math.sqrt((this.x1-this.x2)**2+(this.y1-this.y2)**2),h=Math.sqrt((t-this.x1)**2+(s-this.y1)**2)/i,e=Math.sqrt((t-this.x2)**2+(s-this.y2)**2)/i;this.side=h>.9?1:e>.9?-1:0}moveDrag(t,s){1!=this.side&&(this.x1+=t,this.y1+=s),-1!=this.side&&(this.x2+=t,this.y2+=s),this.draw_g.select("path").attr("d",this.createPath())}moveEnd(t){if(t)return;let s=this.getObject(),i="";s.fX1=this.svgToAxis("x",this.x1,this.isndc),s.fX2=this.svgToAxis("x",this.x2,this.isndc),s.fY1=this.svgToAxis("y",this.y1,this.isndc),s.fY2=this.svgToAxis("y",this.y2,this.isndc),1!=this.side&&(i+=`SetX1(${s.fX1});;SetY1(${s.fY1});;`),-1!=this.side&&(i+=`SetX2(${s.fX2});;SetY2(${s.fY2});;`),this.submitCanvExec(i+"Notify();;")}redraw(){let t=this.getObject(),s=(0,l.BIT)(14),i=t.fOption,h=this.getPadPainter().getPadRect();this.wsize=Math.max(3,Math.round(Math.max(h.width,h.height)*t.fArrowSize*.8)),this.isndc=t.TestBit(s),this.angle2=t.fAngle/2/180*Math.PI,this.beg=this.mid=this.end=0,0==i.indexOf("<")&&(this.beg=0==i.indexOf("<|")?12:2),i.indexOf("->-")>=0?this.mid=1:i.indexOf("-|>-")>=0?this.mid=11:i.indexOf("-<-")>=0?this.mid=2:i.indexOf("-<|-")>=0&&(this.mid=12);let e=i.lastIndexOf(">"),n=i.lastIndexOf("|>"),f=i.length;e>=0&&e==f-1&&(this.end=n>=0&&n==f-2?11:1),this.createAttLine({attr:t}),this.createG(),this.x1=this.axisToSvg("x",t.fX1,this.isndc,!0),this.y1=this.axisToSvg("y",t.fY1,this.isndc,!0),this.x2=this.axisToSvg("x",t.fX2,this.isndc,!0),this.y2=this.axisToSvg("y",t.fY2,this.isndc,!0);let o=this.draw_g.append("svg:path").attr("d",this.createPath()).call(this.lineatt.func);return this.beg>10||this.end>10?(this.createAttFill({attr:t}),o.call(this.fillatt.func)):o.style("fill","none"),(0,l.isBatchMode)()||(0,u.Z)(this),this}static draw(t,s,i){return(0,x.Z)(function*(){let h=new d(t,s,i);return(0,g.ensureTCanvas)(h,!1).then(()=>h.redraw())})()}}}}]); +//# sourceMappingURL=99.1c05592095e3fd6c.js.map \ No newline at end of file diff --git a/docs/99.0ba42481a501907f.js.map b/docs/99.1c05592095e3fd6c.js.map similarity index 99% rename from docs/99.0ba42481a501907f.js.map rename to docs/99.1c05592095e3fd6c.js.map index a5bd5a9ae..fd6c12459 100644 --- a/docs/99.0ba42481a501907f.js.map +++ b/docs/99.1c05592095e3fd6c.js.map @@ -1 +1 @@ -{"version":3,"file":"99.0ba42481a501907f.js","mappings":"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","names":["TArrowPainter","ObjectPainter","rotate","angle","x0","y0","dx","this","wsize","Math","cos","dy","sin","res","undefined","round","createPath","atan2","y2","y1","x2","x1","dlen","angle2","path","beg","PI","mid","end","moveStart","x","y","fullsize","sqrt","sz1","sz2","side","moveDrag","draw_g","select","attr","moveEnd","not_changed","arrow","getObject","exec","fX1","svgToAxis","isndc","fX2","fY1","fY2","submitCanvExec","redraw","kLineNDC","BIT","oo","fOption","rect","getPadPainter","getPadRect","max","width","height","fArrowSize","TestBit","fAngle","indexOf","p1","lastIndexOf","p2","len","length","createAttLine","createG","axisToSvg","elem","append","call","lineatt","func","createAttFill","fillatt","style","isBatchMode","addMoveHandler","static","dom","obj","opt","painter","ensureTCanvas","then"],"sourceRoot":"webpack:///","sources":["../node_modules/jsroot/modules/draw/TArrowPainter.mjs"],"sourcesContent":["import { BIT, isBatchMode } from '../core.mjs';\nimport { ObjectPainter } from '../base/ObjectPainter.mjs';\nimport { ensureTCanvas } from '../gpad/TCanvasPainter.mjs';\nimport { addMoveHandler } from '../gui/utils.mjs';\n\n\n/** @summary Drawing TArrow\n * @private */\nclass TArrowPainter extends ObjectPainter {\n\n /** @summary Create line segment with rotation */\n rotate(angle, x0, y0) {\n let dx = this.wsize * Math.cos(angle), dy = this.wsize * Math.sin(angle), res = '';\n if ((x0 !== undefined) && (y0 !== undefined)) {\n res = `M${Math.round(x0-dx)},${Math.round(y0-dy)}`;\n } else {\n dx = -dx; dy = -dy;\n }\n res += `l${Math.round(dx)},${Math.round(dy)}`;\n if (x0 && (y0 === undefined)) res += 'z';\n return res;\n }\n\n /** @summary Create SVG path for the arrow */\n createPath() {\n let angle = Math.atan2(this.y2 - this.y1, this.x2 - this.x1),\n dlen = this.wsize * Math.cos(this.angle2),\n dx = dlen*Math.cos(angle), dy = dlen*Math.sin(angle),\n path = '';\n\n if (this.beg)\n path += this.rotate(angle - Math.PI - this.angle2, this.x1, this.y1) +\n this.rotate(angle - Math.PI + this.angle2, this.beg > 10);\n\n if (this.mid % 10 == 2)\n path += this.rotate(angle - Math.PI - this.angle2, (this.x1+this.x2-dx)/2, (this.y1+this.y2-dy)/2) +\n this.rotate(angle - Math.PI + this.angle2, this.mid > 10);\n\n if (this.mid % 10 == 1)\n path += this.rotate(angle - this.angle2, (this.x1+this.x2+dx)/2, (this.y1+this.y2+dy)/2) +\n this.rotate(angle + this.angle2, this.mid > 10);\n\n if (this.end)\n path += this.rotate(angle - this.angle2, this.x2, this.y2) +\n this.rotate(angle + this.angle2, this.end > 10);\n\n return `M${Math.round(this.x1 + (this.beg > 10 ? dx : 0))},${Math.round(this.y1 + (this.beg > 10 ? dy : 0))}` +\n `L${Math.round(this.x2 - (this.end > 10 ? dx : 0))},${Math.round(this.y2 - (this.end > 10 ? dy : 0))}` +\n path;\n }\n\n /** @summary Start interactive moving */\n moveStart(x,y) {\n let fullsize = Math.sqrt((this.x1-this.x2)**2 + (this.y1-this.y2)**2),\n sz1 = Math.sqrt((x-this.x1)**2 + (y-this.y1)**2)/fullsize,\n sz2 = Math.sqrt((x-this.x2)**2 + (y-this.y2)**2)/fullsize;\n if (sz1 > 0.9)\n this.side = 1;\n else if (sz2 > 0.9)\n this.side = -1;\n else\n this.side = 0;\n }\n\n /** @summary Continue interactive moving */\n moveDrag(dx,dy) {\n if (this.side != 1) { this.x1 += dx; this.y1 += dy; }\n if (this.side != -1) { this.x2 += dx; this.y2 += dy; }\n this.draw_g.select('path').attr('d', this.createPath());\n }\n\n /** @summary Finish interactive moving */\n moveEnd(not_changed) {\n if (not_changed) return;\n let arrow = this.getObject(), exec = '';\n arrow.fX1 = this.svgToAxis('x', this.x1, this.isndc);\n arrow.fX2 = this.svgToAxis('x', this.x2, this.isndc);\n arrow.fY1 = this.svgToAxis('y', this.y1, this.isndc);\n arrow.fY2 = this.svgToAxis('y', this.y2, this.isndc);\n if (this.side != 1) exec += `SetX1(${arrow.fX1});;SetY1(${arrow.fY1});;`;\n if (this.side != -1) exec += `SetX2(${arrow.fX2});;SetY2(${arrow.fY2});;`;\n this.submitCanvExec(exec + 'Notify();;');\n }\n\n /** @summary Redraw arrow */\n redraw() {\n let arrow = this.getObject(), kLineNDC = BIT(14),\n oo = arrow.fOption, rect = this.getPadPainter().getPadRect();\n\n this.wsize = Math.max(3, Math.round(Math.max(rect.width, rect.height) * arrow.fArrowSize*0.8));\n this.isndc = arrow.TestBit(kLineNDC);\n this.angle2 = arrow.fAngle/2/180 * Math.PI;\n this.beg = this.mid = this.end = 0;\n\n if (oo.indexOf('<') == 0)\n this.beg = (oo.indexOf('<|') == 0) ? 12 : 2;\n if (oo.indexOf('->-') >= 0)\n this.mid = 1;\n else if (oo.indexOf('-|>-') >= 0)\n this.mid = 11;\n else if (oo.indexOf('-<-') >= 0)\n this.mid = 2;\n else if (oo.indexOf('-<|-') >= 0)\n this.mid = 12;\n\n let p1 = oo.lastIndexOf('>'), p2 = oo.lastIndexOf('|>'), len = oo.length;\n if ((p1 >= 0) && (p1 == len-1))\n this.end = ((p2 >= 0) && (p2 == len-2)) ? 11 : 1;\n\n this.createAttLine({ attr: arrow });\n\n this.createG();\n\n this.x1 = this.axisToSvg('x', arrow.fX1, this.isndc, true);\n this.y1 = this.axisToSvg('y', arrow.fY1, this.isndc, true);\n this.x2 = this.axisToSvg('x', arrow.fX2, this.isndc, true);\n this.y2 = this.axisToSvg('y', arrow.fY2, this.isndc, true);\n\n let elem = this.draw_g.append('svg:path')\n .attr('d', this.createPath())\n .call(this.lineatt.func);\n\n if ((this.beg > 10) || (this.end > 10)) {\n this.createAttFill({ attr: arrow });\n elem.call(this.fillatt.func);\n } else {\n elem.style('fill','none');\n }\n\n if (!isBatchMode())\n addMoveHandler(this);\n\n return this;\n }\n\n /** @summary Draw TArrow object */\n static async draw(dom, obj, opt) {\n let painter = new TArrowPainter(dom, obj,opt);\n return ensureTCanvas(painter, false).then(() => painter.redraw());\n }\n\n} // class TArrowPainter\n\nexport { TArrowPainter };\n"],"x_google_ignoreList":[0]} \ No newline at end of file +{"version":3,"file":"99.1c05592095e3fd6c.js","mappings":"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","names":["TArrowPainter","ObjectPainter","rotate","angle","x0","y0","dx","this","wsize","Math","cos","dy","sin","res","undefined","round","createPath","atan2","y2","y1","x2","x1","dlen","angle2","path","beg","PI","mid","end","moveStart","x","y","fullsize","sqrt","sz1","sz2","side","moveDrag","draw_g","select","attr","moveEnd","not_changed","arrow","getObject","exec","fX1","svgToAxis","isndc","fX2","fY1","fY2","submitCanvExec","redraw","kLineNDC","BIT","oo","fOption","rect","getPadPainter","getPadRect","max","width","height","fArrowSize","TestBit","fAngle","indexOf","p1","lastIndexOf","p2","len","length","createAttLine","createG","axisToSvg","elem","append","call","lineatt","func","createAttFill","fillatt","style","isBatchMode","addMoveHandler","static","dom","obj","opt","painter","ensureTCanvas","then"],"sourceRoot":"webpack:///","sources":["../node_modules/jsroot/modules/draw/TArrowPainter.mjs"],"sourcesContent":["import { BIT, isBatchMode } from '../core.mjs';\nimport { ObjectPainter } from '../base/ObjectPainter.mjs';\nimport { ensureTCanvas } from '../gpad/TCanvasPainter.mjs';\nimport { addMoveHandler } from '../gui/utils.mjs';\n\n\n/** @summary Drawing TArrow\n * @private */\nclass TArrowPainter extends ObjectPainter {\n\n /** @summary Create line segment with rotation */\n rotate(angle, x0, y0) {\n let dx = this.wsize * Math.cos(angle), dy = this.wsize * Math.sin(angle), res = '';\n if ((x0 !== undefined) && (y0 !== undefined)) {\n res = `M${Math.round(x0-dx)},${Math.round(y0-dy)}`;\n } else {\n dx = -dx; dy = -dy;\n }\n res += `l${Math.round(dx)},${Math.round(dy)}`;\n if (x0 && (y0 === undefined)) res += 'z';\n return res;\n }\n\n /** @summary Create SVG path for the arrow */\n createPath() {\n let angle = Math.atan2(this.y2 - this.y1, this.x2 - this.x1),\n dlen = this.wsize * Math.cos(this.angle2),\n dx = dlen*Math.cos(angle), dy = dlen*Math.sin(angle),\n path = '';\n\n if (this.beg)\n path += this.rotate(angle - Math.PI - this.angle2, this.x1, this.y1) +\n this.rotate(angle - Math.PI + this.angle2, this.beg > 10);\n\n if (this.mid % 10 == 2)\n path += this.rotate(angle - Math.PI - this.angle2, (this.x1+this.x2-dx)/2, (this.y1+this.y2-dy)/2) +\n this.rotate(angle - Math.PI + this.angle2, this.mid > 10);\n\n if (this.mid % 10 == 1)\n path += this.rotate(angle - this.angle2, (this.x1+this.x2+dx)/2, (this.y1+this.y2+dy)/2) +\n this.rotate(angle + this.angle2, this.mid > 10);\n\n if (this.end)\n path += this.rotate(angle - this.angle2, this.x2, this.y2) +\n this.rotate(angle + this.angle2, this.end > 10);\n\n return `M${Math.round(this.x1 + (this.beg > 10 ? dx : 0))},${Math.round(this.y1 + (this.beg > 10 ? dy : 0))}` +\n `L${Math.round(this.x2 - (this.end > 10 ? dx : 0))},${Math.round(this.y2 - (this.end > 10 ? dy : 0))}` +\n path;\n }\n\n /** @summary Start interactive moving */\n moveStart(x,y) {\n let fullsize = Math.sqrt((this.x1-this.x2)**2 + (this.y1-this.y2)**2),\n sz1 = Math.sqrt((x-this.x1)**2 + (y-this.y1)**2)/fullsize,\n sz2 = Math.sqrt((x-this.x2)**2 + (y-this.y2)**2)/fullsize;\n if (sz1 > 0.9)\n this.side = 1;\n else if (sz2 > 0.9)\n this.side = -1;\n else\n this.side = 0;\n }\n\n /** @summary Continue interactive moving */\n moveDrag(dx,dy) {\n if (this.side != 1) { this.x1 += dx; this.y1 += dy; }\n if (this.side != -1) { this.x2 += dx; this.y2 += dy; }\n this.draw_g.select('path').attr('d', this.createPath());\n }\n\n /** @summary Finish interactive moving */\n moveEnd(not_changed) {\n if (not_changed) return;\n let arrow = this.getObject(), exec = '';\n arrow.fX1 = this.svgToAxis('x', this.x1, this.isndc);\n arrow.fX2 = this.svgToAxis('x', this.x2, this.isndc);\n arrow.fY1 = this.svgToAxis('y', this.y1, this.isndc);\n arrow.fY2 = this.svgToAxis('y', this.y2, this.isndc);\n if (this.side != 1) exec += `SetX1(${arrow.fX1});;SetY1(${arrow.fY1});;`;\n if (this.side != -1) exec += `SetX2(${arrow.fX2});;SetY2(${arrow.fY2});;`;\n this.submitCanvExec(exec + 'Notify();;');\n }\n\n /** @summary Redraw arrow */\n redraw() {\n let arrow = this.getObject(), kLineNDC = BIT(14),\n oo = arrow.fOption, rect = this.getPadPainter().getPadRect();\n\n this.wsize = Math.max(3, Math.round(Math.max(rect.width, rect.height) * arrow.fArrowSize*0.8));\n this.isndc = arrow.TestBit(kLineNDC);\n this.angle2 = arrow.fAngle/2/180 * Math.PI;\n this.beg = this.mid = this.end = 0;\n\n if (oo.indexOf('<') == 0)\n this.beg = (oo.indexOf('<|') == 0) ? 12 : 2;\n if (oo.indexOf('->-') >= 0)\n this.mid = 1;\n else if (oo.indexOf('-|>-') >= 0)\n this.mid = 11;\n else if (oo.indexOf('-<-') >= 0)\n this.mid = 2;\n else if (oo.indexOf('-<|-') >= 0)\n this.mid = 12;\n\n let p1 = oo.lastIndexOf('>'), p2 = oo.lastIndexOf('|>'), len = oo.length;\n if ((p1 >= 0) && (p1 == len-1))\n this.end = ((p2 >= 0) && (p2 == len-2)) ? 11 : 1;\n\n this.createAttLine({ attr: arrow });\n\n this.createG();\n\n this.x1 = this.axisToSvg('x', arrow.fX1, this.isndc, true);\n this.y1 = this.axisToSvg('y', arrow.fY1, this.isndc, true);\n this.x2 = this.axisToSvg('x', arrow.fX2, this.isndc, true);\n this.y2 = this.axisToSvg('y', arrow.fY2, this.isndc, true);\n\n let elem = this.draw_g.append('svg:path')\n .attr('d', this.createPath())\n .call(this.lineatt.func);\n\n if ((this.beg > 10) || (this.end > 10)) {\n this.createAttFill({ attr: arrow });\n elem.call(this.fillatt.func);\n } else {\n elem.style('fill','none');\n }\n\n if (!isBatchMode())\n addMoveHandler(this);\n\n return this;\n }\n\n /** @summary Draw TArrow object */\n static async draw(dom, obj, opt) {\n let painter = new TArrowPainter(dom, obj,opt);\n return ensureTCanvas(painter, false).then(() => painter.redraw());\n }\n\n} // class TArrowPainter\n\nexport { TArrowPainter };\n"],"x_google_ignoreList":[0]} \ No newline at end of file diff --git a/docs/api-docs/changelog.html b/docs/api-docs/changelog.html index b4d54e76f..291c8fd2d 100644 --- a/docs/api-docs/changelog.html +++ b/docs/api-docs/changelog.html @@ -34,6 +34,11 @@

Change Log

All notable changes to this project will be documented in this file. See Conventional Commits for commit guidelines.

+

2.14.1 (2023-05-14)

+

Bug Fixes

+
    +
  • configure git when trying to release (fc4ae96)
  • +

2.14.0 (2023-03-22)

Note: Version bump only for package phoenix-event-display

2.13.0 (2023-03-02)

@@ -42,7 +47,7 @@

Reverts

  • Revert "Updated versions to try to reduce yarn warnings" (477845f)
  • 2.12.0 (2023-01-13)

    -

    Bug Fixes

    +

    Bug Fixes

    • event-display: allowing geometry name to be undefined (9ffb5e2)
    • event-display: make side and length optional in calo cell params (448eb4f)
    • @@ -52,7 +57,7 @@

      Features

    • event-display: adding side and length variables for the calo cell/cluster (29beae7)

    2.11.4 (2022-10-27)

    -

    Bug Fixes

    +

    Bug Fixes

    • event-display: An argument for 'camera' was not provided (dcb4c88)
    • linting (f97e615)
    • @@ -78,12 +83,12 @@

      Features

    • event-display: use url inside of objects for loading jsroot geometries (a54d302)

    2.10.0 (2022-07-21)

    -

    Bug Fixes

    +

    Bug Fixes

    • event-display: fixed handling of event properties (6ace2f6)

    2.9.0 (2022-06-17)

    -

    Bug Fixes

    +

    Bug Fixes

    • event-display: fix clipping angle not being applied from menu config (62bf178)
    • event-display: fix geometry not being loaded correctly in menu (7e0870b)
    • @@ -117,7 +122,7 @@

      Features

    • event-display: use generic menus in ui-manager (7a42b65)

    2.6.0 (2022-02-28)

    -

    Bug Fixes

    +

    Bug Fixes

    • app: fix types in templates (545c956)
    • app: use workaround for phoenix menu config types in templates (9d109e5)
    • @@ -129,7 +134,7 @@

      Features

      2.5.2 (2022-01-15)

      Note: Version bump only for package phoenix-event-display

      2.5.0 (2021-12-20)

      -

      Bug Fixes

      +

      Bug Fixes

      • event-display: fix jets disappearing on scaling to 0 (14cdc8f)
      @@ -141,7 +146,7 @@

      Features

    • event-display: simplify phoenix menu node types (c60b3c1)

    2.4.0 (2021-10-28)

    -

    Bug Fixes

    +

    Bug Fixes

    • event-display: handle AR and VR permission errors (dfbc6a2)
    • event-display: update three.js imports (4e41f72)
    • @@ -153,12 +158,12 @@

      Features

    • event-display: remove labels on event load (75f829a)

    2.3.2 (2021-09-28)

    -

    Bug Fixes

    +

    Bug Fixes

    • event-display: remove XRSessionInit type from xr-manager (608f529)

    2.3.1 (2021-09-28)

    -

    Bug Fixes

    +

    Bug Fixes

    • event-display: add @types/three package as a dev dependency (10244f7)
    @@ -167,7 +172,7 @@

    Features

  • event-display: function to get url options from url options manager (0ba5097)
  • 2.3.0 (2021-09-20)

    -

    Bug Fixes

    +

    Bug Fixes

    • event-display: do not apply Phoenix menu node toggle if undefined in config (bf98a24)
    • event-display: fix cuts not displaying for tracks in collections info (14d5f3a)
    • @@ -179,7 +184,7 @@

      Features

    • Upgrade all packages (4698ea4)

    2.2.0 (2021-08-03)

    -

    Bug Fixes

    +

    Bug Fixes

    • event-display: fix AR not working in playground (7f35fdb)
    • event-display: fix bug in jive xml loader (39241a4)
    • @@ -204,7 +209,7 @@

      Features

    • event-display: use DOM overlay for AR (a5eaa34)

    2.1.0 (2021-06-28)

    -

    Bug Fixes

    +

    Bug Fixes

    • app: clean packages not used in phoenix-ng (037af62)
    • event-display: bug when handling out-of-bounds theta (717304e)
    • @@ -231,7 +236,7 @@

      Features

    • event-display: working AR setup in event display (fdd492a)

    2.0.0 (2021-06-08)

    -

    Bug Fixes

    +

    Bug Fixes

    • event-display: add energy cut, refactor (000ab78)
    • event-display: attempt to improve robustness of tracks (689da29)
    • @@ -282,7 +287,7 @@

      Features

    • event-dosplay: improve processing of PlanarCaloCells in Phoenix loader (5a8fe9f)

    1.9.0 (2021-05-16)

    -

    Bug Fixes

    +

    Bug Fixes

    • event-display: add energy cut, refactor (000ab78)
    • event-display: attempt to improve robustness of tracks (689da29)
    • @@ -321,7 +326,7 @@

      Features

    • event-dosplay: improve processing of PlanarCaloCells in Phoenix loader (5a8fe9f)

    1.8.0 (2021-05-01)

    -

    Bug Fixes

    +

    Bug Fixes

    • event-display: better debugging info and prettier (df9ce07)
    • event-display: fix #289 cluster rendering (1a01248)
    • @@ -348,14 +353,14 @@

      Features

    • event-display: use class for color options in UI (4acca1a)

    1.7.0 (2021-04-21)

    -

    Bug Fixes

    +

    Bug Fixes

    • event-display: attempt to improve the output of the track extension by removing close hits (5bdc562)
    • event-display: fix drawing of hits (db3ca8b)
    • event-display: handle older json hit format again (edcd567)

    1.6.0 (2021-04-18)

    -

    Bug Fixes

    +

    Bug Fixes

    • app: add sphericalToCartesian method (bbea6b0)
    • event-display: add back in geometrical limits for clusters (0b95e5b)
    • @@ -402,7 +407,7 @@

      Features

    • upgrade three.js except for CMSObjects (0b2dd8a)

    1.5.0 (2021-03-24)

    -

    Bug Fixes

    +

    Bug Fixes

    • event-display: catch VR request session error (d2874b8)
    • event-display: fix jsroot loading root file (8cbcaa5)
    • @@ -423,7 +428,7 @@

      Features

    • event-display: use latest version of JSROOT (fbd584e)

    1.4.0 (2021-02-16)

    -

    Bug Fixes

    +

    Bug Fixes

    • event-display: disable keyboard controls when typing (4f80bd6)
    • event-display: improve object selection from uuid and label input (3475836)
    • @@ -452,7 +457,7 @@

      Features

    • Update Angular and all packages to latest (f4c2e31)

    1.3.0 (2021-01-16)

    -

    Bug Fixes

    +

    Bug Fixes

    • event-display: assign the right name to geometry (b7e8da0)
    • event-display: code improvements (f94c0e4)
    • @@ -469,7 +474,7 @@

      Features

    • event-display: hide tube tracks on zoom (7d606b2)

    1.2.0 (2020-12-06)

    -

    Bug Fixes

    +

    Bug Fixes

    • event-display: add Edward's controller set up (a6a1c19)
    • event-display: changes to animation loop for VR (37df19f)
    • @@ -502,7 +507,7 @@

      Features

    • event-display: use object to simplify configuration (4b10452)

    1.1.0 (2020-11-07)

    -

    Bug Fixes

    +

    Bug Fixes

    • app: cut filter failed if value return was zero (0a26fea)
    • app: cut should be pT, not mom (73b7c27)
    • diff --git a/docs/api-docs/classes/AnimationsManager.html b/docs/api-docs/classes/AnimationsManager.html index e04cb6d58..ad1dbc401 100644 --- a/docs/api-docs/classes/AnimationsManager.html +++ b/docs/api-docs/classes/AnimationsManager.html @@ -1703,7 +1703,7 @@

      const position = sphere.attributes.position; const vertex = new Vector3(); for (let i = 0; i < position.count; i++) { - vertex.fromBufferAttribute(position, i); + vertex.fromBufferAttribute(position as BufferAttribute, i); animationClipPlanes.push(new Plane(vertex.clone(), 0)); } diff --git a/docs/api-docs/classes/ColorOptions.html b/docs/api-docs/classes/ColorOptions.html index 609ec165b..ec8de0eb0 100644 --- a/docs/api-docs/classes/ColorOptions.html +++ b/docs/api-docs/classes/ColorOptions.html @@ -1428,7 +1428,7 @@

      config.group !== undefined && config.group !== this.selectedColorByOption; - config.hidden = groupNotSelected ? true : false; + config.hidden = groupNotSelected; }); } } diff --git a/docs/api-docs/classes/DatGUIMenuUI.html b/docs/api-docs/classes/DatGUIMenuUI.html index a0c78ccca..9784956d3 100644 --- a/docs/api-docs/classes/DatGUIMenuUI.html +++ b/docs/api-docs/classes/DatGUIMenuUI.html @@ -1009,8 +1009,8 @@

      - + @@ -1103,8 +1103,8 @@

      - + @@ -1222,8 +1222,8 @@

      - + @@ -1301,8 +1301,8 @@

      - + @@ -1771,15 +1771,27 @@

      for (const cut of cuts) { const minCut = cutsFolder - .add(cut, 'minValue', cut.minValue, cut.maxValue) + .add( + { minValue: cut.minValue }, + 'minValue', + cut.minValue, + cut.maxValue + ) .name('min ' + cut.field); minCut.onChange((value) => { + cut.minValue = value; this.sceneManager.collectionFilter(collectionName, cuts); }); const maxCut = cutsFolder - .add(cut, 'maxValue', cut.minValue, cut.maxValue) + .add( + { maxValue: cut.maxValue }, + 'maxValue', + cut.minValue, + cut.maxValue + ) .name('max ' + cut.field); maxCut.onChange((value) => { + cut.maxValue = value; this.sceneManager.collectionFilter(collectionName, cuts); }); } diff --git a/docs/api-docs/classes/TracksMaterial.html b/docs/api-docs/classes/TracksMaterial.html index 4bc2267da..def3662bc 100644 --- a/docs/api-docs/classes/TracksMaterial.html +++ b/docs/api-docs/classes/TracksMaterial.html @@ -253,7 +253,7 @@

      */ constructor() { super(); - this.type = 'TracksMesh'; + (this.type as string) = 'TracksMesh'; this.positions = []; this.previous = []; this.next = []; @@ -457,8 +457,8 @@

      progress: { value: 1 }, } ), - vertexShader: ShaderChunk.tracks_vert, - fragmentShader: ShaderChunk.tracks_frag, + vertexShader: ShaderChunk['tracks_vert'], + fragmentShader: ShaderChunk['tracks_vert'], }); this.isTracksMaterial = true; this.type = 'TracksMaterial'; diff --git a/docs/api-docs/classes/TracksMesh.html b/docs/api-docs/classes/TracksMesh.html index 3a0d70cf6..7a08fabb9 100644 --- a/docs/api-docs/classes/TracksMesh.html +++ b/docs/api-docs/classes/TracksMesh.html @@ -695,7 +695,7 @@

      */ constructor() { super(); - this.type = 'TracksMesh'; + (this.type as string) = 'TracksMesh'; this.positions = []; this.previous = []; this.next = []; @@ -899,8 +899,8 @@

      progress: { value: 1 }, } ), - vertexShader: ShaderChunk.tracks_vert, - fragmentShader: ShaderChunk.tracks_frag, + vertexShader: ShaderChunk['tracks_vert'], + fragmentShader: ShaderChunk['tracks_vert'], }); this.isTracksMaterial = true; this.type = 'TracksMaterial'; diff --git a/docs/api-docs/dependencies.html b/docs/api-docs/dependencies.html index 6ce472bc9..5e9fed801 100644 --- a/docs/api-docs/dependencies.html +++ b/docs/api-docs/dependencies.html @@ -50,21 +50,21 @@
      • - @babel/core : ^7.20.12
      • + @babel/core : ^7.21.5
      • - @tweenjs/tween.js : ^18.6.4
      • + @tweenjs/tween.js : ^20.0.3
      • dat.gui : ^0.7.9
      • html2canvas : ^1.4.1
      • - jsroot : ^7.3.0
      • + jsroot : ^7.3.1
      • jszip : ^3.10.1
      • stats-js : ^1.0.1
      • - three : ^0.149.0
      • + three : ^0.152.2
      diff --git a/docs/api-docs/interfaces/AnimationPreset.html b/docs/api-docs/interfaces/AnimationPreset.html index 0335cc235..cbb40412f 100644 --- a/docs/api-docs/interfaces/AnimationPreset.html +++ b/docs/api-docs/interfaces/AnimationPreset.html @@ -650,7 +650,7 @@

      Properties

      const position = sphere.attributes.position; const vertex = new Vector3(); for (let i = 0; i < position.count; i++) { - vertex.fromBufferAttribute(position, i); + vertex.fromBufferAttribute(position as BufferAttribute, i); animationClipPlanes.push(new Plane(vertex.clone(), 0)); } diff --git a/docs/api-docs/js/search/search_index.js b/docs/api-docs/js/search/search_index.js index 1fc01bbef..2fa441ae2 100644 --- a/docs/api-docs/js/search/search_index.js +++ b/docs/api-docs/js/search/search_index.js @@ -1,4 +1,4 @@ var COMPODOC_SEARCH_INDEX = { - "index": {"version":"2.3.9","fields":["title","body"],"fieldVectors":[["title/classes/ARManager.html",[0,0.255,1,2.374]],["body/classes/ARManager.html",[0,0.251,1,3.203,2,0.363,3,0.241,4,0.213,5,0.159,6,2.514,7,5.327,8,1.084,9,0.437,10,4.344,11,1.449,12,1.782,13,2.025,14,3.203,15,3.968,16,0.159,17,0.587,18,2.361,19,5.392,20,1.677,21,5.392,22,4.049,23,4.583,24,1.4,25,3.553,26,5.238,27,3.553,28,3.925,29,2.975,30,3.553,31,3.553,32,3.553,33,0.541,34,4.353,35,2.841,36,3.553,37,4.732,38,4.049,39,3.553,40,4.049,41,3.553,42,0.751,43,3.46,44,2.222,45,2.688,46,4.927,47,0.737,48,2.598,49,0.964,50,0.581,51,0.024,52,0.474,53,0.268,54,0.544,55,2.183,56,1.099,57,0.815,58,0.694,59,0.964,60,2.94,61,2.466,62,2.924,63,4.049,64,3.332,65,4.732,66,1.314,67,4.732,68,3.553,69,1.021,70,4.732,71,1.237,72,4.732,73,2.318,74,2.598,75,2.924,76,2.692,77,3.716,78,4.732,79,1.483,80,0.79,81,4.021,82,2.94,83,4.011,84,2.642,85,2.866,86,5.837,87,2.94,88,1.314,89,4.011,90,1.48,91,2.94,92,2.318,93,2.164,94,1.181,95,2.94,96,3.144,97,2.642,98,3.583,99,3.332,100,2.94,101,1.247,102,2.94,103,0.567,104,2.342,105,2.342,106,2.598,107,0.904,108,2.94,109,2.94,110,2.052,111,3.46,112,0.908,113,3.553,114,3.46,115,2.924,116,4.732,117,0.945,118,3.46,119,2.94,120,2.138,121,1.225,122,2.598,123,2.94,124,2.598,125,1.823,126,2.031,127,2.598,128,1.968,129,2.94,130,2.598,131,3.553,132,3.46,133,2.598,134,2.138,135,0.617,136,0.578,137,1.968,138,2.138,139,2.342,140,2.138,141,2.94,142,2.598,143,2.598,144,1.225,145,2.598,146,2.598,147,2.598,148,1.695,149,1.695,150,2.138,151,3.46,152,0.27,153,0.503,154,4.583,155,2.598,156,3.46,157,4.732,158,3.46,159,5.392,160,3.46,161,2.598,162,0.396,163,3.46,164,2.94,165,3.46,166,1.823,167,2.598,168,3.46,169,1.483,170,2.342,171,3.46,172,5.392,173,3.46,174,2.598,175,3.46,176,1.968,177,3.46,178,3.46,179,3.46,180,2.94,181,2.598,182,3.46,183,2.94,184,3.46,185,3.46,186,0.016,187,0.016]],["title/classes/ActiveVariable.html",[0,0.255,188,1.995]],["body/classes/ActiveVariable.html",[0,0.341,2,0.492,3,0.327,4,0.289,5,0.215,9,0.454,16,0.215,17,0.716,20,1.632,24,1.419,33,0.66,42,1.019,47,0.701,49,1.175,50,0.597,51,0.024,52,0.488,53,0.261,54,0.58,57,0.63,58,0.83,93,2.979,94,1.175,96,3.192,97,3.336,103,0.5,112,0.904,126,1.767,150,4.207,152,0.451,153,0.542,186,0.019,187,0.019,188,3.281,189,5.112,190,3.523,191,3.721,192,4.901,193,5.767,194,3.564,195,5.767,196,5.021,197,5.767,198,4.207,199,4.692,200,5.23,201,4.692,202,4.331,203,6.244,204,5.785,205,4.692,206,4.692,207,5.767,208,4.692,209,4.901,210,5.767,211,4.692,212,6.514,213,0.835,214,4.692,215,4.692,216,4.692,217,4.692,218,4.692]],["title/interfaces/AnimationPreset.html",[219,1.321,220,1.995]],["body/interfaces/AnimationPreset.html",[0,0.171,3,0.164,4,0.145,5,0.108,6,0.942,8,0.736,9,0.164,11,1.204,12,1.347,13,1.005,16,0.108,17,0.444,20,1.265,24,1.198,29,2.121,42,0.777,44,1.787,45,2.213,49,0.479,51,0.024,52,0.428,53,0.225,54,0.42,55,1.347,58,0.269,59,0.882,69,1.277,71,1.265,73,1.151,77,2.034,79,2.078,80,0.723,84,1.151,85,1.635,88,0.652,90,1.005,92,1.151,93,1.074,94,1.061,96,2.551,97,2.88,98,2.675,101,0.543,103,0.31,107,1.265,112,0.928,117,1.071,120,1.452,121,0.832,134,2.675,135,0.595,136,0.392,137,1.336,148,1.151,149,1.752,152,0.279,153,0.604,162,0.269,169,1.719,170,1.59,174,3.251,186,0.012,187,0.012,194,1.452,209,1.996,213,0.977,219,0.885,220,2.463,221,1.336,222,1.59,223,4.31,224,2.034,225,4.846,226,4.661,227,3.289,228,2.421,229,3.425,230,0.953,231,4.611,232,5.01,233,1.347,234,6.141,235,2.463,236,5.898,237,3.576,238,1.884,239,1.996,240,4.329,241,1.752,242,2.228,243,3.039,244,2.034,245,2.349,246,5.877,247,1.884,248,2.421,249,3.576,250,3.276,251,2.21,252,2.349,253,1.266,254,2.121,255,2.349,256,1.996,257,2.121,258,1.42,259,3.039,260,1.452,261,0.832,262,2.349,263,2.349,264,3.576,265,2.349,266,1.996,267,2.034,268,2.349,269,2.034,270,1.452,271,2.349,272,0.963,273,2.349,274,3.251,275,2.349,276,3.251,277,2.349,278,3.91,279,2.349,280,2.349,281,4.282,282,1.151,283,2.21,284,3.039,285,5.848,286,3.679,287,1.996,288,2.034,289,2.349,290,2.349,291,2.421,292,1.336,293,1.764,294,2.349,295,1.779,296,2.349,297,2.349,298,2.349,299,3.679,300,2.349,301,3.576,302,1.996,303,2.21,304,2.21,305,1.996,306,1.151,307,2.349,308,2.349,309,2.349,310,2.349,311,2.349,312,2.349,313,2.349,314,4.425,315,4.425,316,5.732,317,3.525,318,4.425,319,5.877,320,2.753,321,2.349,322,3.576,323,2.349,324,2.349,325,1.336,326,4.329,327,2.349,328,3.576,329,2.349,330,4.329,331,4.839,332,2.349,333,1.764,334,2.349,335,5.485,336,2.349,337,1.434,338,2.421,339,3.576,340,4.839,341,3.218,342,2.349,343,1.151,344,1.852,345,3.576,346,4.839,347,1.336,348,4.839,349,2.349,350,1.996,351,1.996,352,3.576,353,4.839,354,1.59,355,3.576,356,3.576,357,2.349,358,3.576,359,3.576,360,3.576,361,3.576,362,2.349,363,2.349,364,1.996,365,1.151,366,1.996,367,2.349,368,3.576,369,2.349,370,2.349,371,2.349,372,1.764,373,2.349,374,2.349,375,2.349,376,2.349,377,1.996,378,1.996,379,1.996,380,3.576,381,2.349,382,2.349,383,2.349,384,3.576,385,2.349,386,1.452,387,2.349,388,2.349,389,2.753,390,3.039,391,2.349,392,2.349,393,2.349,394,2.349,395,2.349,396,2.349,397,1.59,398,2.421,399,2.349,400,2.349,401,2.349,402,2.349,403,2.349,404,3.576,405,1.764,406,2.349,407,2.349,408,2.349,409,2.349,410,2.349,411,2.349,412,3.576,413,2.349,414,2.349,415,2.349,416,2.349,417,2.349,418,2.349,419,2.349,420,2.349,421,2.349,422,2.349,423,2.349,424,2.349,425,2.349,426,2.349,427,2.349,428,2.349,429,2.349,430,2.349,431,3.576,432,4.329,433,2.349,434,2.349,435,2.349,436,1.996,437,2.349,438,1.59,439,2.349,440,3.172,441,4.995,442,4.329,443,3.576,444,3.039,445,3.576,446,2.349,447,2.349,448,4.839,449,1.996,450,2.349,451,2.421,452,4.329,453,1.59,454,2.349,455,1.238,456,3.576,457,3.576,458,2.349,459,2.349,460,2.349,461,2.349,462,2.349,463,2.349,464,2.349,465,1.996,466,1.452,467,3.576,468,2.349,469,1.005,470,1.59,471,2.349,472,1.996,473,5.877,474,4.119,475,3.576,476,1.151,477,4.329,478,2.349,479,4.329,480,2.349,481,3.039,482,1.996,483,2.349,484,2.349,485,3.576,486,3.576,487,2.21,488,3.576,489,2.349,490,3.576,491,2.349,492,2.349,493,2.349,494,2.349,495,2.349,496,2.349,497,2.349,498,2.349,499,2.349,500,2.349,501,2.349,502,2.349,503,3.679,504,3.576,505,2.349,506,2.349,507,2.349,508,4.839,509,2.349,510,2.349,511,2.349,512,1.764,513,1.452,514,3.576,515,2.349,516,1.996,517,2.349,518,1.996,519,2.349,520,1.996,521,2.349,522,3.576,523,2.549,524,2.21,525,3.576,526,2.349,527,1.452,528,2.349,529,2.349,530,2.349,531,3.576,532,2.349,533,2.349,534,2.349,535,3.039,536,2.349,537,3.576,538,2.349,539,2.349,540,2.349,541,2.349,542,2.349]],["title/classes/CMSObjects.html",[0,0.255,543,2.374]],["body/classes/CMSObjects.html",[0,0.332,2,0.479,3,0.319,4,0.281,5,0.21,9,0.396,16,0.21,18,2.325,24,0.932,33,0.649,47,0.479,50,0.635,51,0.024,52,0.357,53,0.175,54,0.397,59,1.157,68,3.432,69,1.674,80,0.763,85,2.595,103,0.492,117,0.712,135,0.649,136,0.763,144,2.009,152,0.357,153,0.397,162,0.523,169,1.778,170,3.842,186,0.019,187,0.019,213,1.012,230,0.822,241,2.781,243,4.823,244,3.228,247,3.252,248,3.842,257,2.781,272,0.908,291,3.095,304,2.825,344,2.428,397,3.842,487,3.507,543,3.842,544,4.823,545,3.885,546,3.507,547,2.428,548,4.823,549,4.261,550,4.823,551,5.675,552,5.675,553,4.571,554,3.507,555,6.765,556,6.765,557,6.172,558,4.571,559,5.675,560,5.675,561,5.675,562,3.432,563,4.571,564,3.885,565,5.675,566,4.571,567,4.571,568,4.571,569,4.571,570,4.571,571,4.571,572,5.675,573,6.172,574,6.172,575,5.675,576,6.172,577,6.172,578,3.432,579,5.675,580,6.172,581,6.172,582,5.675,583,6.172,584,6.172,585,5.675,586,3.885,587,5.675,588,3.885,589,3.432,590,5.675,591,4.571,592,4.571,593,4.571,594,4.571,595,4.571,596,4.571,597,3.432,598,2.825,599,4.571,600,2.825,601,4.571,602,6.172,603,3.885,604,4.571,605,4.571,606,5.675,607,4.571,608,4.571,609,3.885,610,4.571,611,4.571,612,4.571,613,4.571,614,4.571]],["title/classes/ColorManager.html",[0,0.255,615,2.374]],["body/classes/ColorManager.html",[0,0.29,2,0.418,3,0.278,4,0.246,5,0.183,6,2.619,8,1.25,9,0.455,11,1.537,12,1.96,16,0.183,24,1.39,33,0.595,42,0.866,44,2.046,47,0.668,49,1.061,50,0.609,51,0.024,52,0.548,53,0.244,54,0.552,55,2.312,56,0.813,58,0.702,69,1.811,76,2.961,80,1.165,85,2.38,94,1.18,101,1.203,103,0.533,112,0.922,117,0.621,135,0.595,136,0.666,137,3.783,152,0.312,153,0.585,155,2.996,169,2.271,186,0.017,187,0.017,230,0.889,253,1.842,257,3.341,258,1.419,261,1.842,272,0.924,337,2.088,343,2.55,453,2.701,455,3.051,609,3.39,615,3.523,616,4.035,617,4.156,618,3.216,619,5.204,620,5.792,621,5.204,622,3.989,623,3.989,624,3.908,625,5.204,626,2.996,627,4.156,628,3.234,629,2.797,630,3.504,631,5.204,632,3.908,633,5.204,634,3.989,635,3.908,636,3.989,637,5.217,638,6.139,639,4.423,640,2.996,641,5.204,642,3.216,643,5.204,644,3.908,645,5.204,646,3.216,647,5.204,648,3.989,649,5.204,650,3.523,651,3.908,652,3.989,653,3.989,654,3.989,655,3.989,656,3.989,657,3.908,658,5.204,659,3.908,660,3.908,661,3.908,662,5.204,663,5.204,664,5.204,665,3.989,666,3.989,667,3.989,668,3.989,669,3.989,670,5.204,671,5.204,672,3.989,673,3.39,674,3.989,675,3.989,676,3.989,677,3.989,678,3.989,679,3.989,680,3.989]],["title/classes/ColorOptions.html",[0,0.255,681,2.374]],["body/classes/ColorOptions.html",[0,0.187,2,0.27,3,0.18,4,0.159,5,0.118,9,0.378,11,1.058,12,1.444,16,0.118,17,0.476,20,1.887,33,0.438,42,0.833,47,0.71,49,0.781,50,0.601,51,0.024,52,0.51,53,0.255,54,0.44,55,1.444,56,0.525,57,0.79,58,0.785,59,1.105,61,1.753,66,1.271,69,1.943,71,1.643,73,1.263,76,2.884,80,0.949,85,2.094,88,1.065,92,2.484,103,0.56,107,0.674,112,0.91,117,0.713,126,0.971,135,0.58,136,0.64,152,0.3,153,0.51,162,0.58,169,2.278,186,0.013,187,0.013,230,0.894,235,2.181,257,2.484,258,1.453,261,1.795,272,0.681,295,1.715,306,1.263,337,1.538,343,2.243,347,1.466,455,3.099,513,2.369,524,1.593,615,3.983,616,4.222,617,3.099,618,3.133,629,2.279,630,2.412,635,1.935,639,3.258,650,3.433,681,2.596,682,3.11,683,1.745,684,2.217,685,4.578,686,4.578,687,3.891,688,4.578,689,4.578,690,4.578,691,5.07,692,5.07,693,5.07,694,3.834,695,3.834,696,5.07,697,5.07,698,5.07,699,5.07,700,3.834,701,2.577,702,5.07,703,2.993,704,5.07,705,4.418,706,2.577,707,2.181,708,1.002,709,3.258,710,4.828,711,2.643,712,4.309,713,3.887,714,3.834,715,3.126,716,3.834,717,4.133,718,3.834,719,4.828,720,3.944,721,5.07,722,3.834,723,3.834,724,3.258,725,3.834,726,2.577,727,3.258,728,6.286,729,2.577,730,3.636,731,2.577,732,2.577,733,3.099,734,2.596,735,2.577,736,1.724,737,2.243,738,5.42,739,3.891,740,2.484,741,3.834,742,2.577,743,3.834,744,2.577,745,3.433,746,3.669,747,2.577,748,2.577,749,2.577,750,3.834,751,2.577,752,3.433,753,3.834,754,3.438,755,4.606,756,4.606,757,4.578,758,5.42,759,4.578,760,3.834,761,2.577,762,5.42,763,2.484,764,2.577,765,2.577,766,2.577,767,2.577,768,2.879,769,3.834,770,6.045,771,2.577,772,3.834,773,3.834,774,1.466,775,1.935,776,1.745,777,1.466,778,1.593,779,1.935,780,3.669,781,5.07,782,2.577,783,2.577,784,2.577,785,4.578,786,2.279,787,2.577,788,1.753,789,4.606,790,2.577,791,2.577,792,1.935,793,2.577,794,2.19,795,2.577,796,2.577,797,2.577,798,2.577,799,2.577,800,2.577,801,2.577,802,3.834,803,5.681,804,2.577,805,2.577,806,2.577,807,3.834,808,3.834,809,2.577,810,2.577,811,2.577,812,2.577,813,3.834,814,2.577,815,4.578,816,4.578,817,3.834,818,1.745,819,1.745,820,2.19,821,1.935,822,1.745,823,2.19,824,2.19,825,2.577,826,2.577,827,2.577,828,2.577,829,2.577,830,4.578,831,3.834,832,3.834,833,2.19,834,3.834,835,3.834,836,3.834,837,2.577,838,2.577,839,2.577,840,2.577,841,2.577,842,1.263,843,2.577,844,2.19,845,2.577,846,2.577,847,2.577,848,2.577,849,3.834,850,3.258,851,2.577]],["title/interfaces/Configuration.html",[219,1.321,852,1.168]],["body/interfaces/Configuration.html",[3,0.308,4,0.272,5,0.203,9,0.308,11,1.022,16,0.203,17,0.69,45,2.403,51,0.024,53,0.271,54,0.628,56,1.367,57,0.901,59,1.133,61,3.068,62,3.436,66,1.544,80,1.15,117,0.947,121,1.968,135,0.752,136,0.739,144,1.968,152,0.346,166,2.929,186,0.018,187,0.018,219,1.666,220,3.629,221,2.516,222,2.994,224,3.629,230,1.024,233,2.094,258,1.519,317,3.764,624,4.175,684,1.999,703,3.361,736,2.476,737,2.979,777,2.516,852,2.124,853,3.758,854,2.375,855,6.379,856,6.379,857,5.421,858,4.319,859,6.379,860,4.256,861,6.379,862,4.79,863,6.379,864,6.379,865,4.175,866,3.361,867,2.094,868,4.175,869,3.163,870,5.559,871,2.23,872,3.764,873,3.163,874,3.163,875,3.203,876,3.764,877,3.163,878,5.559,879,5.559,880,5.559,881,5.559,882,6.379,883,4.319,884,4.175,885,4.423,886,4.423,887,4.423,888,3.321,889,2.33,890,3.321,891,4.423,892,4.423,893,4.423]],["title/classes/CoordinateHelper.html",[0,0.255,894,2.167]],["body/classes/CoordinateHelper.html",[0,0.271,2,0.392,3,0.261,4,0.23,5,0.172,9,0.447,16,0.172,18,2.661,24,1.271,33,0.684,47,0.673,50,0.644,51,0.024,52,0.487,53,0.239,54,0.541,56,0.762,71,1.466,103,0.59,117,1.13,135,0.428,136,0.625,152,0.292,153,0.577,162,0.733,186,0.016,187,0.016,213,0.929,242,2.801,272,0.879,274,4.494,276,4.213,278,4.213,288,3.405,293,2.808,295,1.781,299,5.78,303,4.204,305,3.178,372,4.494,386,3.468,397,3.376,449,5.45,642,3.082,818,3.376,842,1.833,894,3.082,895,5.563,896,2.808,897,3.376,898,4.494,899,4.987,900,4.987,901,5.985,902,5.611,903,4.987,904,4.768,905,4.987,906,3.74,907,4.799,908,3.74,909,4.987,910,4.987,911,4.238,912,4.987,913,4.835,914,3.74,915,5.611,916,3.74,917,6.734,918,4.238,919,4.987,920,4.987,921,3.376,922,4.238,923,2.837,924,3.74,925,5.337,926,3.74,927,5.985,928,4.987,929,5.985,930,5.985,931,5.985,932,6.413,933,4.987,934,5.985,935,6.907,936,4.987,937,3.74,938,6.651,939,4.494,940,5.985,941,5.985,942,5.985,943,5.985,944,3.74,945,3.74,946,4.987,947,3.74,948,4.987,949,3.74,950,3.74,951,3.74,952,4.238,953,3.745,954,4.987,955,5.086,956,4.987,957,4.987,958,3.74,959,3.74,960,5.985,961,4.987,962,3.74,963,4.987,964,3.74,965,3.74,966,3.74,967,3.178,968,3.74,969,3.74,970,3.74,971,3.74,972,3.74,973,3.74]],["title/classes/Cut.html",[0,0.255,974,1.847]],["body/classes/Cut.html",[0,0.269,2,0.389,3,0.259,4,0.228,5,0.17,9,0.346,16,0.17,17,0.616,20,1.803,24,1.443,33,0.567,42,1.078,47,0.735,49,1.011,50,0.571,51,0.024,52,0.51,53,0.267,54,0.518,56,1.451,57,0.932,58,0.812,59,1.434,71,1.297,80,0.996,93,2.269,103,0.589,112,0.809,117,1.106,152,0.29,153,0.555,162,0.424,186,0.016,187,0.016,230,1.019,254,2.739,258,1.626,306,3.136,343,2.924,470,4.04,476,2.739,642,3.066,755,5.772,756,5.772,911,4.217,974,3.742,975,3.154,976,3.154,977,3.712,978,4.348,979,5.59,980,5.59,981,5.59,982,5.59,983,4.21,984,6.534,985,5.553,986,6.534,987,5.553,988,4.962,989,6.219,990,6.219,991,3.64,992,3.712,993,4.962,994,3.066,995,5.59,996,6.792,997,5.59,998,3.454,999,6.399,1000,6.399,1001,4.805,1002,3.712,1003,5.438,1004,5.967,1005,4.217,1006,3.712,1007,3.712,1008,3.712,1009,3.712,1010,3.712,1011,3.712,1012,3.712,1013,3.712,1014,4.962,1015,3.712,1016,2.614,1017,4.962,1018,3.712,1019,5.967,1020,4.962,1021,3.712,1022,3.712,1023,4.962,1024,4.962,1025,4.962,1026,4.962,1027,5.59,1028,4.962,1029,4.962,1030,3.712]],["title/classes/DatGUIMenuUI.html",[0,0.255,1031,2.633]],["body/classes/DatGUIMenuUI.html",[0,0.291,2,0.218,3,0.145,4,0.128,5,0.095,9,0.414,11,1.207,12,2.127,13,1.94,16,0.149,17,0.404,20,1.804,24,1.403,33,0.372,42,0.451,44,1.421,47,0.698,49,0.817,50,0.555,51,0.024,52,0.511,53,0.266,54,0.504,55,1.708,56,1.064,57,0.701,58,0.713,59,1.151,66,0.577,68,1.561,69,1.953,71,0.85,73,1.018,77,2.28,79,1.77,80,1.136,88,1.45,90,2.416,94,0.817,101,0.752,103,0.534,107,0.543,112,0.903,117,0.624,126,1.854,135,0.597,136,0.969,137,2.97,152,0.162,153,0.558,162,0.519,167,1.561,169,2.075,181,1.561,186,0.011,187,0.011,213,0.713,230,1.006,241,1.018,244,1.851,247,2.874,253,1.605,258,1.616,261,1.848,269,1.182,272,0.933,274,3.405,276,3.405,278,3.696,291,3.534,292,2.58,293,4.24,295,1.45,325,1.851,337,2.094,344,2.754,347,1.851,389,2.97,398,2.202,469,2.106,476,1.594,487,1.284,513,3.801,527,2.011,547,1.392,589,1.561,618,2.803,629,2.382,630,2.593,651,1.561,657,3.405,659,2.443,660,1.561,682,3.06,684,1.636,707,4.024,708,1.709,736,2.612,740,2.558,786,2.428,788,2.812,822,1.407,852,1.51,858,2.202,871,2.094,872,3.07,873,1.851,874,3.692,918,2.765,921,3.534,974,2.593,985,1.766,987,1.766,994,2.011,998,1.284,1031,2.443,1032,5.687,1033,5.305,1034,1.407,1035,2.011,1036,2.495,1037,2.765,1038,2.28,1039,3.406,1040,3.406,1041,4.009,1042,3.406,1043,4.009,1044,4.009,1045,4.009,1046,3.01,1047,3.405,1048,2.443,1049,2.443,1050,3.405,1051,2.443,1052,2.443,1053,3.92,1054,2.443,1055,2.443,1056,3.253,1057,3.253,1058,2.803,1059,2.765,1060,1.851,1061,2.58,1062,1.766,1063,2.078,1064,2.97,1065,1.766,1066,3.253,1067,3.378,1068,1.561,1069,2.078,1070,5.22,1071,2.078,1072,5.22,1073,2.078,1074,2.078,1075,1.561,1076,4.164,1077,2.078,1078,3.405,1079,2.477,1080,3.443,1081,2.078,1082,2.202,1083,2.443,1084,3.696,1085,2.443,1086,2.078,1087,3.696,1088,2.443,1089,4.535,1090,2.078,1091,2.443,1092,3.405,1093,2.443,1094,2.078,1095,2.443,1096,3.696,1097,2.078,1098,3.07,1099,2.803,1100,2.202,1101,2.58,1102,2.443,1103,1.766,1104,3.01,1105,2.443,1106,2.078,1107,2.202,1108,2.202,1109,2.443,1110,2.078,1111,2.443,1112,5.22,1113,2.078,1114,3.253,1115,2.078,1116,1.561,1117,1.561,1118,1.018,1119,2.078,1120,2.078,1121,2.078,1122,2.078,1123,2.078,1124,1.766,1125,1.284,1126,1.766,1127,2.078,1128,4.436,1129,4.183,1130,4.799,1131,1.766,1132,2.078,1133,2.078,1134,2.078,1135,2.078,1136,2.443,1137,3.92,1138,4.535,1139,2.078,1140,3.253,1141,5.456,1142,4.934,1143,2.078,1144,2.765,1145,1.766,1146,3.253,1147,1.766,1148,2.078,1149,2.078,1150,2.078,1151,1.766,1152,1.284,1153,1.766,1154,2.078,1155,2.078,1156,3.253,1157,2.443,1158,2.078,1159,4.799,1160,2.078,1161,3.253,1162,4.535,1163,2.078,1164,4.009,1165,3.253,1166,1.766,1167,5.22,1168,2.078,1169,2.078,1170,2.078,1171,1.766,1172,2.078,1173,4.009,1174,3.253,1175,1.766,1176,2.078,1177,2.078,1178,2.078,1179,2.078,1180,2.078,1181,2.078,1182,3.253,1183,2.078,1184,4.009,1185,2.078,1186,3.253,1187,2.078,1188,2.078,1189,3.253,1190,2.078,1191,2.078,1192,2.078,1193,1.182,1194,2.078,1195,2.078,1196,2.078,1197,2.078,1198,1.766,1199,1.766,1200,2.078,1201,1.018,1202,2.078,1203,2.078,1204,2.078,1205,4.009,1206,3.253,1207,1.766,1208,2.078,1209,2.078,1210,1.766,1211,2.078,1212,1.766,1213,3.854,1214,2.078,1215,2.078,1216,1.766,1217,2.078,1218,2.078,1219,2.078,1220,3.253,1221,2.078,1222,3.253,1223,1.766,1224,4.535,1225,2.078,1226,4.009,1227,1.766,1228,1.766,1229,1.766,1230,2.078,1231,2.078,1232,2.078,1233,2.078,1234,4.535,1235,2.078,1236,2.078,1237,2.078,1238,3.253,1239,2.765,1240,2.765,1241,2.078,1242,3.253,1243,2.078,1244,2.765,1245,2.078,1246,2.078,1247,2.078,1248,1.561,1249,1.766,1250,1.766,1251,2.765,1252,2.765,1253,2.078,1254,2.078,1255,1.766,1256,3.253,1257,3.253,1258,4.535,1259,2.078,1260,2.078,1261,2.078,1262,2.078,1263,2.078,1264,2.078,1265,2.078,1266,2.078,1267,2.078,1268,2.078,1269,4.535,1270,2.078,1271,2.078,1272,2.078,1273,2.078,1274,1.766,1275,1.766,1276,1.766,1277,1.766,1278,2.078,1279,2.078,1280,2.078,1281,1.766,1282,1.766,1283,2.078,1284,1.766,1285,2.078,1286,2.078,1287,1.561,1288,1.561,1289,2.078,1290,2.078,1291,2.078]],["title/classes/EffectsManager.html",[0,0.255,1292,2.374]],["body/classes/EffectsManager.html",[0,0.251,2,0.362,3,0.241,4,0.212,5,0.158,6,2.754,8,1.082,9,0.437,11,1.339,16,0.158,17,0.586,20,1.814,24,1.432,29,3.199,33,0.54,42,1.17,44,2.285,45,2.734,47,0.715,50,0.58,51,0.024,52,0.474,53,0.259,54,0.526,55,2.181,56,1.236,57,0.908,58,0.395,59,0.963,61,2.648,71,0.902,94,1.18,99,3.579,101,1.245,103,0.543,110,2.372,112,0.878,135,0.694,136,0.576,152,0.27,153,0.575,162,0.395,186,0.016,187,0.016,213,0.839,230,1.01,253,1.672,272,0.634,333,4.349,338,3.921,469,2.021,628,3.44,640,2.592,715,2.315,854,2.469,1101,2.687,1292,3.198,1293,5.835,1294,5.12,1295,4.349,1296,5.926,1297,4.014,1298,4.014,1299,5.628,1300,6.866,1301,5.386,1302,4.721,1303,5.792,1304,4.724,1305,4.724,1306,4.724,1307,4.724,1308,4.724,1309,4.014,1310,4.014,1311,5.792,1312,2.919,1313,3.921,1314,4.349,1315,2.133,1316,5.386,1317,2.592,1318,6.7,1319,5.386,1320,2.933,1321,3.547,1322,3.547,1323,4.815,1324,2.592,1325,3.451,1326,4.922,1327,4.922,1328,4.349,1329,5.549,1330,4.724,1331,3.451,1332,4.724,1333,3.451,1334,4.724,1335,2.933,1336,4.724,1337,2.933,1338,3.451,1339,2.337,1340,4.724,1341,3.451,1342,3.451,1343,3.451,1344,4.724,1345,3.451,1346,4.577,1347,4.014,1348,3.451,1349,3.451,1350,3.451,1351,2.133,1352,4.724,1353,5.386,1354,4.724,1355,4.724,1356,3.451,1357,3.451,1358,3.451,1359,3.451,1360,3.451,1361,2.933,1362,3.451,1363,3.451,1364,3.451,1365,3.451,1366,3.451,1367,3.451,1368,3.451]],["title/interfaces/EventDataLoader.html",[219,1.321,860,2.167]],["body/interfaces/EventDataLoader.html",[3,0.398,4,0.238,5,0.177,9,0.439,11,1.496,16,0.262,33,0.583,47,0.692,50,0.58,51,0.024,52,0.474,53,0.242,54,0.526,69,2.117,80,1.188,88,1.86,103,0.611,112,0.738,117,0.888,121,1.804,125,2.684,135,0.652,152,0.302,153,0.588,186,0.017,187,0.017,219,1.455,221,2.198,228,3.45,230,1.048,233,1.455,235,2.899,257,3.282,258,1.621,325,3.244,546,3.149,549,3.826,628,2.684,629,2.835,630,2.684,632,4.552,650,3.45,708,1.584,711,2.44,754,3.826,763,2.497,778,3.747,786,2.718,822,3.45,854,1.804,860,3.149,871,2.044,875,2.684,888,2.901,890,2.901,923,2.899,1036,2.96,1058,3.747,1060,3.892,1061,3.449,1064,2.899,1067,3.682,1099,3.149,1201,2.497,1369,5.692,1370,2.901,1371,5.096,1372,5.096,1373,5.702,1374,5.702,1375,5.096,1376,5.152,1377,5.152,1378,5.096,1379,6.063,1380,3.863,1381,5.152,1382,3.863,1383,3.863,1384,5.152,1385,4.552,1386,3.81,1387,3.863,1388,5.5,1389,4.33,1390,5.096,1391,5.096,1392,4.33,1393,3.826,1394,4.33,1395,5.096,1396,3.826,1397,5.096,1398,3.86,1399,3.826,1400,4.33,1401,3.863,1402,4.33,1403,4.33,1404,3.863,1405,3.45,1406,4.104,1407,4.33,1408,5.5,1409,3.863,1410,4.552,1411,3.826,1412,5.096,1413,3.863,1414,4.33,1415,4.139,1416,4.33,1417,3.826,1418,3.863,1419,2.901]],["title/classes/ExportManager.html",[0,0.255,1420,2.633]],["body/classes/ExportManager.html",[0,0.282,2,0.407,3,0.271,4,0.239,5,0.262,6,2.599,8,1.216,9,0.452,11,1.182,12,1.925,16,0.178,20,1.773,24,1.321,33,0.584,44,2.258,47,0.662,50,0.604,51,0.024,52,0.493,53,0.242,54,0.548,66,1.687,90,2.187,92,3.466,103,0.548,112,0.74,135,0.695,136,0.648,152,0.446,153,0.582,162,0.654,186,0.017,187,0.017,213,0.74,230,1.006,247,3.726,253,1.809,258,1.583,260,3.159,272,0.938,325,3.926,629,1.557,673,3.298,842,1.902,852,2.233,867,1.925,1001,3.838,1064,4.092,1193,2.908,1315,2.398,1393,3.838,1420,3.838,1421,5.507,1422,5.715,1423,5.111,1424,5.111,1425,5.111,1426,5.111,1427,3.881,1428,3.881,1429,5.161,1430,4.112,1431,3.838,1432,4.343,1433,4.343,1434,6.074,1435,4.048,1436,5.111,1437,5.111,1438,3.881,1439,3.687,1440,5.111,1441,3.881,1442,5.111,1443,3.881,1444,3.838,1445,5.111,1446,5.111,1447,3.881,1448,5.111,1449,3.881,1450,2.627,1451,3.298,1452,3.881,1453,5.715,1454,3.869,1455,3.881,1456,3.881,1457,3.881,1458,5.111,1459,6.074,1460,3.881,1461,2.627,1462,2.627,1463,3.298,1464,2.914,1465,4.343,1466,3.881,1467,3.881,1468,3.298,1469,3.881,1470,3.881,1471,3.881,1472,6.074,1473,3.881,1474,6.074,1475,3.881,1476,3.298,1477,3.881,1478,3.881,1479,3.881,1480,3.881,1481,3.881,1482,3.881,1483,3.881,1484,3.881]],["title/classes/Field.html",[0,0.255,983,2.374]],["body/classes/Field.html",[0,0.409,2,0.396,3,0.263,4,0.233,5,0.173,9,0.263,13,1.617,16,0.173,17,0.469,18,2.263,33,0.574,47,0.396,50,0.362,51,0.024,52,0.295,53,0.145,54,0.328,56,0.77,57,0.507,59,1.023,71,0.987,79,2.016,88,1.049,94,0.77,103,0.558,107,0.987,117,1.077,121,1.338,135,0.432,136,0.631,144,1.777,149,1.851,152,0.295,153,0.578,162,0.574,186,0.016,187,0.016,198,2.335,213,0.547,238,1.991,242,3.059,254,1.851,267,3.208,269,2.15,272,0.923,282,1.851,283,3.485,306,3.152,320,2.15,354,4.069,365,1.851,451,3.399,476,2.763,523,1.991,713,2.857,720,3.208,740,1.851,763,2.46,819,2.558,842,3.152,983,4.069,1016,1.991,1035,2.335,1351,3.103,1454,2.558,1485,3.399,1486,2.558,1487,2.837,1488,3.779,1489,3.779,1490,3.779,1491,3.77,1492,4.613,1493,4.613,1494,2.15,1495,2.633,1496,2.837,1497,2.837,1498,2.837,1499,4.069,1500,3.714,1501,2.558,1502,2.837,1503,2.837,1504,4.235,1505,2.837,1506,2.837,1507,2.837,1508,2.837,1509,4.513,1510,4.235,1511,3.77,1512,3.77,1513,4.928,1514,5.005,1515,4.513,1516,4.069,1517,2.837,1518,2.837,1519,2.837,1520,5.067,1521,2.837,1522,2.15,1523,5.005,1524,2.837,1525,2.837,1526,4.698,1527,5.117,1528,2.837,1529,4.928,1530,2.837,1531,2.837,1532,2.837,1533,3.77,1534,2.837,1535,3.77,1536,4.235,1537,2.837,1538,2.837,1539,2.837,1540,2.837,1541,2.837,1542,2.837,1543,2.837,1544,2.837,1545,2.837,1546,2.837,1547,2.837,1548,2.837,1549,2.837,1550,2.837,1551,2.837,1552,2.837,1553,2.15,1554,2.837,1555,4.235,1556,3.77,1557,2.837,1558,4.235,1559,2.837,1560,4.235,1561,3.77,1562,2.837,1563,2.837,1564,2.837,1565,2.837,1566,2.837,1567,2.837,1568,2.837,1569,2.837,1570,2.837,1571,2.837,1572,2.837,1573,3.77,1574,3.77,1575,3.77,1576,4.235,1577,3.103,1578,4.235,1579,3.77,1580,2.558,1581,3.399,1582,2.558,1583,2.335,1584,3.103,1585,2.837,1586,2.837,1587,2.837,1588,2.837,1589,2.837,1590,2.837,1591,2.837]],["title/classes/InfoLogger.html",[0,0.255,1386,1.995]],["body/classes/InfoLogger.html",[0,0.347,2,0.501,3,0.503,4,0.294,5,0.219,9,0.406,16,0.219,17,0.724,20,1.787,33,0.667,47,0.687,50,0.457,51,0.024,52,0.373,53,0.241,54,0.414,57,0.783,58,0.667,73,2.857,80,1.142,88,1.619,103,0.546,110,2.064,112,0.692,117,0.908,126,1.799,152,0.373,153,0.506,162,0.546,186,0.019,187,0.019,230,0.692,258,1.627,628,3.071,708,1.713,740,2.857,786,2.777,854,1.691,1386,3.317,1398,4.766,1399,3.586,1406,4.628,1417,4.378,1592,5.711,1593,4.059,1594,6.294,1595,6.294,1596,6.554,1597,4.776,1598,4.955,1599,4.776,1600,5.83,1601,5.83,1602,4.378,1603,4.955,1604,5.83,1605,4.776,1606,5.83,1607,5.134,1608,4.776,1609,4.378,1610,4.378,1611,4.776,1612,4.776,1613,4.776,1614,4.776,1615,4.776]],["title/classes/LoadingManager.html",[0,0.255,1616,2.167]],["body/classes/LoadingManager.html",[0,0.251,2,0.363,3,0.241,4,0.213,5,0.159,8,1.085,9,0.447,11,1.51,16,0.159,17,0.588,18,2.031,20,1.783,24,1.462,33,0.541,42,1.171,47,0.725,49,0.965,50,0.6,51,0.024,52,0.49,53,0.263,54,0.544,57,0.862,58,0.734,66,1.498,74,3.554,80,1.154,94,1.351,96,3.432,97,3.386,103,0.567,112,1.006,117,0.999,148,3.465,152,0.27,153,0.557,162,0.396,186,0.016,187,0.016,196,4.354,233,1.304,235,2.693,253,1.225,272,0.779,295,1.498,343,2.319,438,4.742,708,1.708,711,1.481,734,4.244,788,1.583,867,2.361,871,2.737,877,3.931,991,3.566,1080,2.693,1142,4.023,1315,2.139,1324,2.599,1435,4.011,1616,3.584,1617,5.902,1618,2.942,1619,5.394,1620,5.394,1621,5.394,1622,5.394,1623,4.734,1624,4.734,1625,4.734,1626,4.734,1627,4.734,1628,4.734,1629,4.023,1630,3.462,1631,3.462,1632,4.734,1633,5.31,1634,3.462,1635,4.734,1636,3.462,1637,4.734,1638,3.462,1639,5.327,1640,4.734,1641,3.462,1642,4.734,1643,2.942,1644,5.799,1645,4.734,1646,2.599,1647,4.734,1648,4.734,1649,2.942,1650,4.734,1651,3.462,1652,5.394,1653,3.462,1654,4.734,1655,3.462,1656,3.462,1657,2.942,1658,5.394,1659,4.734,1660,3.462,1661,3.462,1662,3.462,1663,3.462,1664,4.734,1665,3.462,1666,4.734,1667,4.023,1668,4.734,1669,3.462,1670,3.462,1671,4.734,1672,3.462,1673,4.734,1674,3.462,1675,3.462,1676,3.462,1677,3.462,1678,3.462]],["title/classes/PhoenixMenuNode.html",[0,0.255,703,1.847]],["body/classes/PhoenixMenuNode.html",[0,0.177,2,0.255,3,0.17,4,0.15,5,0.112,9,0.432,16,0.112,17,0.456,20,1.453,33,0.42,42,0.798,47,0.72,49,1.133,50,0.593,51,0.024,52,0.554,53,0.268,54,0.528,56,1.328,57,0.775,58,0.763,59,1.133,66,1.792,69,1.56,71,1.156,75,3.437,76,3.009,80,1.166,88,1.02,93,2.254,94,1.315,101,0.563,103,0.579,107,1.589,112,0.897,117,0.572,121,2.259,126,2.174,135,0.278,140,2.271,152,0.19,153,0.579,162,0.66,166,1.283,169,1.387,186,0.012,187,0.012,192,3.122,194,2.271,200,3.701,213,0.353,233,1.667,270,1.505,272,0.883,295,1.229,436,2.069,469,2.652,470,2.488,524,2.271,527,2.271,578,2.759,629,0.977,661,5.218,682,3.15,684,2.042,703,3.651,708,1.288,711,1.893,717,3.046,736,2.669,737,3.563,768,4.654,777,3.918,788,1.68,821,1.828,850,3.122,852,1.979,867,1.384,889,3.628,998,1.505,1060,1.385,1101,2.09,1137,4.567,1201,1.8,1248,4.846,1439,1.385,1495,2.657,1633,4.176,1679,2.069,1680,5.733,1681,4.425,1682,4.425,1683,4.425,1684,5.066,1685,4.425,1686,4.936,1687,4.425,1688,4.425,1689,4.425,1690,3.674,1691,3.674,1692,3.674,1693,4.929,1694,3.122,1695,3.674,1696,3.674,1697,4.929,1698,2.069,1699,3.674,1700,5.05,1701,2.435,1702,2.435,1703,2.435,1704,4.188,1705,3.674,1706,2.435,1707,2.435,1708,2.435,1709,2.435,1710,2.759,1711,2.435,1712,2.435,1713,2.435,1714,2.435,1715,2.435,1716,2.435,1717,4.425,1718,2.435,1719,3.4,1720,3.674,1721,2.435,1722,3.122,1723,3.674,1724,2.435,1725,4.462,1726,4.929,1727,4.929,1728,3.674,1729,2.435,1730,2.435,1731,3.122,1732,2.435,1733,3.381,1734,2.435,1735,3.674,1736,2.435,1737,3.674,1738,2.435,1739,3.122,1740,3.674,1741,2.435,1742,3.76,1743,2.759,1744,3.674,1745,3.76,1746,2.069,1747,2.435,1748,5.29,1749,3.674,1750,3.674,1751,2.435,1752,2.435,1753,2.435,1754,3.674,1755,2.435,1756,2.435,1757,2.435,1758,2.435,1759,2.435,1760,2.435,1761,1.649,1762,2.435,1763,2.435,1764,2.435,1765,2.435,1766,2.435,1767,2.435,1768,4.929,1769,3.674,1770,3.674,1771,2.435,1772,2.435,1773,2.435,1774,4.929,1775,2.069,1776,2.435,1777,2.435,1778,2.435,1779,2.435,1780,2.435,1781,2.435,1782,4.425,1783,2.435,1784,2.069,1785,2.435,1786,2.069,1787,2.435,1788,2.435,1789,2.435,1790,3.674,1791,2.435,1792,2.435,1793,2.435,1794,2.435,1795,3.674,1796,2.435,1797,2.435,1798,2.435,1799,4.425,1800,2.069,1801,2.435,1802,2.435,1803,2.435,1804,3.674,1805,2.435,1806,4.425,1807,2.435,1808,2.435,1809,2.435,1810,2.435,1811,2.435,1812,2.435,1813,2.435,1814,2.435,1815,2.435,1816,2.435,1817,2.435,1818,4.425,1819,2.435,1820,2.435,1821,2.435,1822,2.435,1823,2.435,1824,2.435,1825,5.773,1826,2.435,1827,4.425,1828,2.435,1829,3.674,1830,2.435,1831,2.435,1832,2.435,1833,2.435,1834,2.435]],["title/classes/PhoenixMenuUI.html",[0,0.255,1835,2.633]],["body/classes/PhoenixMenuUI.html",[0,0.293,2,0.22,3,0.229,4,0.129,5,0.096,9,0.423,11,1.212,12,2.243,13,1.951,16,0.096,17,0.407,20,1.759,24,1.415,33,0.375,42,0.712,44,1.429,47,0.691,49,0.668,50,0.57,51,0.024,52,0.53,53,0.265,54,0.517,55,1.718,56,1.068,57,0.44,58,0.781,59,1.068,66,1.842,69,1.547,71,1.055,73,1.029,75,2.027,77,2.296,80,1.148,88,1.574,90,2.492,94,0.822,101,0.758,103,0.549,107,0.549,112,0.925,126,1.863,134,1.298,135,0.648,136,0.973,137,2.983,152,0.164,153,0.572,162,0.522,166,1.728,169,2.003,174,3.03,181,1.577,183,1.785,186,0.011,187,0.011,213,0.475,230,1.007,241,1.029,244,1.866,247,2.402,253,1.614,258,1.612,261,1.856,272,0.839,292,2.814,295,1.374,306,2.569,337,2.273,344,2.638,347,1.866,351,1.785,365,1.029,389,2.983,398,2.22,469,1.951,476,1.029,487,3.057,527,2.027,547,1.403,597,2.463,618,3.057,629,2.473,630,3.398,642,1.298,651,1.577,657,3.937,659,3.424,660,3.03,681,2.22,682,3.033,684,1.932,687,2.787,703,3.547,705,2.463,707,3.974,708,1.759,712,1.785,719,1.785,724,1.785,736,2.699,737,3.131,739,4.456,740,2.569,774,1.195,775,1.577,776,1.422,777,3.773,786,2.758,788,1.5,789,5.24,792,3.714,833,3.876,852,1.519,862,3.03,867,1.52,871,1.829,872,2.22,889,3.494,921,3.549,974,3.197,991,1.195,994,2.027,1034,1.422,1035,2.027,1036,2.505,1037,2.787,1038,2.296,1039,3.429,1040,3.429,1042,3.429,1046,3.03,1047,3.424,1048,2.463,1049,2.463,1050,3.424,1051,2.463,1052,2.463,1053,3.937,1054,2.463,1055,2.463,1058,2.818,1060,1.866,1061,1.866,1064,1.866,1065,1.785,1067,3.224,1068,1.577,1075,1.577,1076,4.464,1078,3.424,1079,2.818,1080,1.866,1082,2.22,1083,2.463,1084,2.463,1085,2.463,1087,3.714,1088,2.463,1091,2.463,1092,3.424,1093,2.463,1095,2.463,1096,3.714,1098,3.549,1099,2.818,1100,2.22,1101,1.866,1102,2.463,1103,1.785,1104,3.03,1105,3.937,1107,2.22,1108,2.22,1109,2.463,1111,2.463,1116,1.577,1117,1.577,1128,4.456,1129,3.876,1130,3.876,1131,1.785,1136,2.463,1144,1.785,1145,2.787,1151,1.785,1152,1.298,1153,1.785,1159,2.787,1166,1.785,1171,1.785,1175,1.785,1198,1.785,1207,1.785,1210,1.785,1212,1.785,1213,2.787,1216,1.785,1223,1.785,1227,1.785,1228,1.785,1239,3.429,1240,3.429,1244,3.429,1248,2.463,1249,2.787,1250,2.787,1251,2.787,1252,2.787,1255,2.787,1274,1.785,1275,1.785,1276,1.785,1277,1.785,1281,1.785,1282,1.785,1284,1.785,1287,1.577,1288,1.577,1394,2.787,1439,1.195,1495,1.829,1686,3.424,1710,1.577,1719,1.106,1725,1.577,1786,3.429,1835,2.463,1836,4.035,1837,4.035,1838,4.035,1839,4.56,1840,2.1,1841,3.28,1842,2.1,1843,2.1,1844,2.1,1845,2.1,1846,2.1,1847,5.667,1848,2.1,1849,2.1,1850,2.1,1851,4.204,1852,2.1,1853,2.1,1854,2.1,1855,2.1,1856,2.1,1857,2.1,1858,2.1,1859,5.824,1860,2.1,1861,2.787,1862,2.1,1863,4.035,1864,2.1,1865,2.1,1866,2.1,1867,3.28,1868,4.035,1869,3.28,1870,1.577,1871,2.1,1872,3.28,1873,2.1,1874,2.1,1875,2.1,1876,1.785,1877,2.1,1878,1.785,1879,3.28,1880,2.1,1881,2.1,1882,2.1,1883,2.1,1884,2.1,1885,2.1,1886,2.1,1887,2.787,1888,2.1,1889,3.28,1890,2.1,1891,2.1,1892,2.1,1893,2.1,1894,2.1,1895,3.28,1896,3.28,1897,3.28,1898,2.1,1899,2.1,1900,2.1,1901,2.1,1902,2.1,1903,1.785,1904,2.1,1905,2.1,1906,2.1,1907,3.28,1908,2.1,1909,2.1,1910,2.1,1911,1.785,1912,2.1,1913,2.1,1914,2.1,1915,2.1,1916,2.1,1917,2.1,1918,2.1,1919,2.1,1920,2.787,1921,2.1,1922,2.1,1923,2.1,1924,2.1,1925,2.1,1926,2.1,1927,2.1,1928,2.1,1929,2.1,1930,2.1,1931,3.28,1932,2.1,1933,2.1,1934,2.1,1935,2.1,1936,2.1,1937,2.1,1938,2.1,1939,2.1,1940,2.1,1941,2.1]],["title/interfaces/PhoenixUI.html",[219,1.321,1038,1.995]],["body/interfaces/PhoenixUI.html",[3,0.249,4,0.22,5,0.164,9,0.459,16,0.164,33,0.553,44,1.516,47,0.707,50,0.619,51,0.024,52,0.545,53,0.274,54,0.562,57,0.65,66,1.344,69,1.734,80,1.193,94,1.118,101,1.119,103,0.591,112,1.027,126,2.213,135,0.553,136,0.597,152,0.279,153,0.599,169,1.984,186,0.016,187,0.016,200,4.611,219,2.066,221,2.034,230,1.036,247,3.096,258,1.654,261,2.08,292,2.753,337,2.539,344,2.886,347,2.753,389,3.601,469,2.07,527,2.99,547,2.07,618,3.632,629,2.641,630,3.096,682,3.113,684,1.842,707,4.085,708,1.844,736,2.638,786,2.751,852,1.957,871,2.358,889,3.586,921,4.285,974,3.096,994,2.99,1034,2.421,1036,2.688,1038,2.753,1046,4.119,1047,4.413,1048,3.634,1049,3.634,1050,4.413,1051,3.634,1052,3.634,1053,4.753,1054,3.634,1055,3.634,1059,3.039,1062,3.039,1067,3.343,1068,2.685,1075,2.685,1076,4.285,1078,4.413,1079,3.39,1080,2.753,1082,3.276,1083,3.634,1084,3.634,1085,3.634,1087,4.413,1088,3.634,1091,3.634,1092,4.413,1093,3.634,1095,3.634,1096,4.413,1098,3.979,1099,3.632,1100,3.276,1101,2.753,1102,3.634,1104,3.634,1105,3.634,1107,3.276,1108,3.276,1109,3.634,1111,3.634,1117,2.685,1287,4.413,1288,3.634,1851,4.995,1942,4.112,1943,4.112,1944,3.576,1945,3.576,1946,3.576,1947,3.576,1948,3.576,1949,3.576,1950,3.576]],["title/classes/PresetView.html",[0,0.255,883,2.374]],["body/classes/PresetView.html",[0,0.3,2,0.433,3,0.288,4,0.254,5,0.189,9,0.371,16,0.189,17,0.66,24,1.468,33,0.608,42,1.155,45,2.639,47,0.72,49,1.084,50,0.395,51,0.024,52,0.547,53,0.26,54,0.358,57,0.714,58,0.711,61,2.433,79,2.128,80,1.17,101,1.438,103,0.462,110,1.883,117,1.119,144,1.883,152,0.416,153,0.54,162,0.472,186,0.017,187,0.017,224,4.023,229,3.026,295,1.477,303,4.198,440,3.739,779,3.099,866,3.276,869,4.09,883,3.601,884,3.099,1487,3.995,1516,3.601,1684,5.347,1698,3.507,1745,3.507,1746,5.003,1951,5.196,1952,3.099,1953,5.32,1954,5.32,1955,3.995,1956,5.32,1957,6.59,1958,6.792,1959,6.792,1960,6.704,1961,6.704,1962,6.219,1963,5.6,1964,5.32,1965,6.219,1966,6.219,1967,4.127,1968,4.127,1969,4.127,1970,5.285,1971,3.995,1972,4.127,1973,4.127,1974,4.127,1975,4.127,1976,3.507,1977,4.127,1978,4.127,1979,4.127,1980,4.127,1981,4.127,1982,4.127,1983,4.127,1984,4.127]],["title/classes/PrettySymbols.html",[0,0.255,774,1.995]],["body/classes/PrettySymbols.html",[0,0.313,2,0.453,3,0.301,4,0.266,5,0.198,9,0.419,16,0.198,17,0.68,18,2.606,22,4.514,24,1.225,33,0.626,47,0.63,49,0.879,50,0.648,51,0.024,52,0.428,53,0.26,54,0.475,57,0.58,58,0.493,69,2.041,80,1.145,103,0.522,152,0.337,153,0.566,162,0.687,186,0.018,187,0.018,213,0.793,233,2.381,261,1.528,267,2.455,272,0.876,282,2.115,377,3.667,546,3.383,600,2.667,646,4.12,708,1.128,711,2.705,713,3.114,720,3.114,774,3.114,776,4.514,780,3.706,824,3.667,842,2.682,844,3.667,897,2.921,907,3.706,913,3.706,925,4.11,1499,3.706,1500,3.383,1761,4.28,1985,5.373,1986,3.667,1987,7.11,1988,5.474,1989,5.474,1990,5.373,1991,5.474,1992,6.322,1993,6.322,1994,5.373,1995,6.322,1996,4.315,1997,5.474,1998,4.315,1999,6.854,2000,5.474,2001,5.474,2002,4.315,2003,6.773,2004,6.525,2005,6.012,2006,4.315,2007,4.315,2008,4.315,2009,4.315,2010,4.315,2011,6.012,2012,3.667,2013,5.474,2014,4.315,2015,4.315,2016,4.315,2017,5.474,2018,4.315,2019,4.315,2020,4.315,2021,4.315,2022,4.315,2023,3.667,2024,4.315,2025,6.322,2026,4.315,2027,4.315,2028,4.315,2029,5.474,2030,4.315,2031,4.315,2032,4.315,2033,4.315,2034,4.315,2035,4.315]],["title/classes/RKHelper.html",[0,0.255,2036,2.374]],["body/classes/RKHelper.html",[0,0.312,2,0.451,3,0.3,4,0.265,5,0.197,9,0.44,16,0.197,18,2.604,24,1.223,33,0.722,47,0.629,50,0.574,51,0.024,52,0.469,53,0.25,54,0.521,56,1.287,57,0.848,58,0.492,59,1.328,79,1.979,88,1.516,94,1.328,103,0.605,107,1.769,110,1.933,112,0.623,135,0.686,136,0.718,152,0.336,153,0.548,162,0.745,186,0.018,187,0.018,227,2.877,230,0.791,233,2.057,242,2.85,254,3.094,261,1.933,267,3.592,272,0.928,337,2.747,341,4.233,343,2.676,365,2.941,405,3.228,523,2.877,600,2.657,818,2.911,820,3.654,821,4.101,894,2.657,896,3.228,897,4.063,898,3.228,907,2.911,913,3.697,953,3.228,1016,2.877,1405,3.697,1492,2.911,1493,2.911,1494,3.85,1504,2.911,1581,4.275,1582,3.697,1583,4.028,2023,4.641,2036,3.697,2037,5.366,2038,6.002,2039,4.641,2040,5.461,2041,4.299,2042,4.299,2043,5.461,2044,5.461,2045,6.518,2046,6.314,2047,5.461,2048,4.299,2049,5.461,2050,4.641,2051,5.461,2052,5.461,2053,5.461,2054,5.461,2055,4.299,2056,6.002,2057,4.299,2058,4.299,2059,4.299,2060,5.461,2061,4.299,2062,4.299,2063,4.299,2064,4.299,2065,4.299,2066,4.299,2067,4.299,2068,4.299,2069,4.299,2070,4.299,2071,4.299,2072,4.299,2073,4.299,2074,4.299,2075,4.299,2076,4.299,2077,4.299,2078,4.299,2079,4.299,2080,4.299]],["title/classes/RendererManager.html",[0,0.255,250,2.374]],["body/classes/RendererManager.html",[0,0.196,2,0.283,3,0.188,4,0.166,5,0.124,6,2.786,8,0.845,9,0.459,11,1.335,12,1.493,16,0.216,17,0.492,20,1.78,24,1.42,29,3.561,33,0.453,42,1.021,44,1.919,45,2.426,47,0.726,49,0.808,50,0.624,51,0.024,52,0.509,53,0.258,54,0.566,55,2.306,56,1.328,57,0.696,58,0.727,59,1.056,63,2.976,64,4.306,69,1.169,71,1.036,80,0.964,90,2.363,99,4.459,101,1.507,103,0.603,107,1.228,110,1.834,112,0.944,117,0.42,121,0.954,135,0.308,136,0.662,152,0.211,153,0.581,162,0.683,167,2.024,186,0.013,187,0.013,213,0.574,223,1.666,230,0.887,250,2.683,253,1.403,260,2.45,261,1.664,272,0.853,295,1.305,320,2.255,343,2.539,440,3.226,466,3.784,469,1.696,472,3.368,547,2.217,708,1.036,715,1.942,733,4.496,854,2.044,858,3.508,869,2.255,871,2.079,872,3.508,873,2.948,991,1.534,1080,2.255,1101,2.255,1118,1.942,1125,3.568,1126,2.291,1193,2.674,1302,4.146,1312,4.069,1313,4.146,1314,4.598,1315,2.45,1317,2.024,1321,2.976,1323,2.976,1337,2.291,1361,2.291,1406,4.671,1417,3.891,1643,2.291,1646,2.024,1649,2.291,1920,3.368,2081,5.903,2082,4.701,2083,5.182,2084,5.522,2085,6.967,2086,3.964,2087,3.964,2088,5.182,2089,5.182,2090,5.182,2091,5.182,2092,2.976,2093,3.964,2094,5.182,2095,3.964,2096,3.964,2097,3.964,2098,3.964,2099,3.964,2100,3.964,2101,3.964,2102,3.964,2103,4.771,2104,2.696,2105,2.696,2106,3.964,2107,3.964,2108,3.964,2109,2.696,2110,3.964,2111,2.291,2112,3.964,2113,2.696,2114,2.696,2115,2.291,2116,2.291,2117,5.182,2118,3.964,2119,2.291,2120,3.964,2121,3.964,2122,2.696,2123,3.964,2124,2.291,2125,3.964,2126,3.964,2127,3.964,2128,2.696,2129,3.964,2130,2.696,2131,3.964,2132,3.368,2133,3.995,2134,3.995,2135,3.964,2136,3.964,2137,2.696,2138,3.964,2139,5.774,2140,2.696,2141,3.964,2142,5.182,2143,5.182,2144,5.182,2145,3.964,2146,2.696,2147,2.696,2148,2.024,2149,2.696,2150,2.696,2151,2.024,2152,2.696,2153,2.696,2154,2.696,2155,2.696,2156,2.696,2157,3.964,2158,4.701,2159,2.696,2160,2.696,2161,4.701,2162,2.696,2163,3.964,2164,2.696,2165,4.701,2166,3.964,2167,2.696,2168,3.964,2169,2.696,2170,2.696,2171,2.696,2172,2.696,2173,2.696,2174,3.964,2175,2.696,2176,3.964,2177,5.182,2178,2.696,2179,2.696,2180,2.696,2181,2.696,2182,3.964,2183,2.696,2184,2.696,2185,2.696,2186,3.964]],["title/classes/RungeKutta.html",[0,0.255,1494,1.995]],["body/classes/RungeKutta.html",[0,0.394,2,0.368,3,0.245,4,0.216,5,0.161,9,0.379,13,2.045,16,0.161,17,0.593,18,2.371,33,0.547,47,0.501,50,0.457,51,0.024,52,0.373,53,0.208,54,0.415,56,0.716,57,0.472,58,0.402,59,1.189,71,1.249,79,2.107,88,1.327,94,1.107,103,0.577,107,1.42,112,0.508,117,1.105,121,1.243,135,0.402,136,0.586,144,2.065,149,1.721,152,0.274,153,0.569,162,0.547,186,0.016,187,0.016,198,2.17,213,0.508,233,1.322,238,2.518,242,3.045,254,2.342,267,3.318,269,2.719,272,0.911,282,2.663,283,3.605,306,3.351,320,1.998,354,3.949,365,2.663,451,3.236,476,2.99,523,2.518,713,3.091,720,3.318,740,2.342,763,2.858,819,3.236,842,3.085,1016,2.518,1035,2.954,1351,3.605,1454,2.377,1485,3.679,1486,2.377,1491,4.38,1492,4.711,1493,4.711,1494,2.719,1495,2.743,1496,3.589,1497,3.589,1498,3.589,1499,4.262,1500,3.891,1501,2.377,1502,2.637,1503,2.637,1504,4.131,1505,2.637,1506,2.637,1507,2.637,1508,2.637,1509,4.38,1510,4.08,1511,3.589,1512,3.589,1513,4.837,1514,4.923,1515,4.38,1516,3.949,1517,2.637,1518,2.637,1519,2.637,1520,4.991,1521,2.637,1522,1.998,1523,4.923,1524,2.637,1525,2.637,1526,4.582,1527,5.048,1528,2.637,1529,4.837,1530,2.637,1531,2.637,1532,2.637,1533,3.589,1534,2.637,1535,3.589,1536,4.08,1537,2.637,1538,2.637,1539,2.637,1540,2.637,1541,2.637,1542,2.637,1543,2.637,1544,2.637,1545,2.637,1546,2.637,1547,2.637,1548,2.637,1549,2.637,1550,2.637,1551,2.637,1552,2.637,1553,1.998,1554,2.637,1555,4.08,1556,3.589,1557,2.637,1558,4.08,1559,2.637,1560,4.08,1561,3.589,1562,2.637,1563,2.637,1564,2.637,1565,2.637,1566,2.637,1567,2.637,1568,2.637,1569,2.637,1570,2.637,1571,2.637,1572,2.637,1573,4.582,1574,4.582,1575,4.38,1576,4.582,1577,3.605,1578,4.582,1579,4.38,1580,3.236,1581,3.949,1582,3.236,1583,3.358,1584,2.954,1585,2.637,1586,2.637,1587,2.637,1588,2.637,1589,2.637,1590,2.637,1591,2.637,2187,3.511,2188,3.511,2189,3.511]],["title/classes/ScriptLoader.html",[0,0.255,2190,2.633]],["body/classes/ScriptLoader.html",[0,0.335,2,0.484,3,0.322,4,0.284,5,0.212,9,0.398,11,1.067,16,0.212,18,2.334,24,0.94,33,0.653,47,0.484,50,0.441,51,0.024,52,0.36,53,0.177,54,0.538,57,0.62,58,0.528,59,1.163,80,1.132,103,0.495,126,1.738,135,0.528,152,0.36,153,0.538,162,0.528,186,0.019,187,0.019,213,0.827,230,0.827,258,1.497,272,0.832,295,1.281,347,2.625,708,1.206,866,3.412,867,2.506,873,3.247,875,3.007,877,3.526,978,3.528,1199,3.921,1201,2.261,1370,3.465,1435,3.684,1616,3.83,1686,4.286,2190,4.286,2191,4.851,2192,5.395,2193,6.476,2194,5.708,2195,4.851,2196,6.198,2197,4.614,2198,6.999,2199,6.476,2200,6.198,2201,4.614,2202,5.267,2203,6.198,2204,6.655,2205,5.708,2206,5.708,2207,5.708,2208,4.384,2209,3.921,2210,4.614,2211,4.614,2212,5.708,2213,4.614,2214,4.614,2215,4.614,2216,4.614,2217,4.614,2218,4.614,2219,4.614,2220,4.614,2221,4.614,2222,5.708,2223,4.614,2224,6.476,2225,6.476,2226,4.614,2227,3.921,2228,4.614,2229,4.614,2230,4.614,2231,4.614]],["title/classes/SelectionManager.html",[0,0.255,2232,2.633]],["body/classes/SelectionManager.html",[0,0.189,2,0.272,3,0.181,4,0.16,5,0.119,6,2.775,8,0.814,9,0.411,11,1.477,12,1.453,16,0.119,17,0.632,20,1.882,24,1.355,33,0.441,42,1.181,44,2.174,45,2.537,47,0.723,48,1.951,50,0.545,51,0.024,52,0.473,53,0.258,54,0.472,55,1.917,56,1.202,57,0.684,58,0.652,59,1.161,62,3.361,69,2.092,71,1.008,80,1.034,85,1.764,88,1.413,92,3.086,94,1.161,97,2.792,101,1.317,103,0.547,107,0.679,110,2.017,112,0.825,117,0.404,128,2.194,135,0.652,136,0.434,144,1.925,152,0.203,153,0.547,162,0.582,186,0.013,187,0.013,188,3.093,191,1.369,202,2.896,213,0.854,230,1.01,233,1.732,247,3.001,253,2.017,257,2.665,258,1.401,260,2.384,261,1.365,270,1.606,272,0.858,288,3.583,295,1.277,304,1.606,333,4.278,343,1.89,469,1.65,554,1.606,626,1.951,627,2.611,628,2.681,637,4.326,708,0.679,711,1.968,715,1.89,745,4.426,763,1.89,774,1.478,775,1.951,776,1.759,842,1.89,854,2.37,876,1.759,1125,3.521,1201,1.273,1292,4.466,1294,4.083,1295,4.648,1296,5.012,1297,4.621,1298,4.621,1313,4.264,1314,3.822,1326,3.278,1327,4.326,1328,4.278,1329,4.842,1339,2.611,1346,3.278,1347,2.208,1386,3.753,1398,2.611,1399,3.822,1415,3.146,1419,1.951,1602,4.278,1603,4.326,1607,3.454,1610,3.822,1667,2.208,2092,3.454,2148,2.896,2232,2.896,2233,5.878,2234,5.606,2235,4.6,2236,4.6,2237,4.6,2238,4.6,2239,4.6,2240,4.6,2241,4.6,2242,4.842,2243,5.09,2244,5.09,2245,4.326,2246,3.857,2247,3.857,2248,3.857,2249,3.857,2250,3.278,2251,2.208,2252,1.951,2253,2.208,2254,3.857,2255,3.857,2256,2.598,2257,3.857,2258,2.208,2259,6.537,2260,5.697,2261,2.598,2262,5.09,2263,2.598,2264,2.208,2265,3.857,2266,3.857,2267,1.759,2268,1.951,2269,2.598,2270,2.896,2271,5.149,2272,2.598,2273,2.598,2274,4.953,2275,3.278,2276,2.598,2277,3.278,2278,3.278,2279,3.857,2280,3.857,2281,2.598,2282,2.598,2283,3.857,2284,2.598,2285,4.6,2286,3.857,2287,3.857,2288,2.598,2289,3.857,2290,2.598,2291,4.6,2292,2.598,2293,2.598,2294,2.598,2295,2.598,2296,1.951,2297,2.611,2298,2.598,2299,4.6,2300,2.598,2301,2.598,2302,2.598,2303,2.598,2304,2.208,2305,2.598,2306,2.598,2307,2.598,2308,2.598,2309,2.598,2310,2.598,2311,2.598,2312,4.842,2313,5.697,2314,2.598,2315,3.857,2316,2.598,2317,4.6,2318,2.598,2319,3.857,2320,2.598,2321,2.598,2322,2.598,2323,2.598,2324,2.598,2325,2.598,2326,4.6,2327,2.598,2328,5.438,2329,2.598,2330,2.598,2331,2.598,2332,2.598,2333,3.857,2334,2.598,2335,2.598,2336,2.598,2337,2.598,2338,2.598,2339,2.598,2340,2.598,2341,2.598,2342,2.598,2343,2.598,2344,2.598,2345,2.598,2346,2.598,2347,2.598,2348,2.598,2349,2.598,2350,2.598,2351,3.857,2352,2.598,2353,1.951,2354,2.208,2355,2.598,2356,2.598,2357,2.598,2358,2.598,2359,2.598,2360,3.857,2361,2.598,2362,2.598,2363,2.598,2364,2.598,2365,2.598,2366,2.598,2367,2.598,2368,2.598,2369,2.598,2370,2.598,2371,2.598,2372,2.598,2373,2.598,2374,2.598,2375,2.598,2376,2.598,2377,2.598]],["title/classes/State.html",[0,0.255,1495,1.407]],["body/classes/State.html",[0,0.351,2,0.374,3,0.249,4,0.22,5,0.164,9,0.249,13,1.527,16,0.164,17,0.68,18,1.82,47,0.69,51,0.024,53,0.252,56,0.727,57,0.884,58,0.753,59,0.985,71,1.263,73,1.749,79,2.027,88,0.991,94,0.727,103,0.51,107,0.933,117,1.098,121,1.263,135,0.408,136,0.596,144,1.711,149,1.749,152,0.279,153,0.571,162,0.553,186,0.016,187,0.016,198,2.206,213,0.793,238,2.546,242,3.027,254,1.749,267,3.491,269,2.749,272,0.914,282,1.749,283,3.386,295,1.757,306,3.225,320,2.03,354,3.976,365,1.749,386,2.987,451,3.272,474,2.68,476,3.007,523,1.88,713,3.117,720,3.341,740,2.368,763,2.368,819,2.416,842,3.1,1016,1.88,1035,2.206,1351,2.987,1454,2.416,1485,4.516,1486,2.416,1491,3.629,1492,4.565,1493,4.565,1494,2.03,1495,2.676,1496,2.68,1497,2.68,1498,2.68,1499,4.283,1500,3.91,1501,2.416,1502,2.68,1503,2.68,1504,4.155,1505,2.68,1506,2.68,1507,2.68,1508,2.68,1509,4.41,1510,4.115,1511,3.629,1512,3.629,1513,4.858,1514,4.941,1515,4.41,1516,3.976,1517,2.68,1518,2.68,1519,2.68,1520,5.008,1521,2.68,1522,2.03,1523,4.941,1524,2.68,1525,2.68,1526,4.608,1527,5.063,1528,2.68,1529,4.858,1530,2.68,1531,2.68,1532,2.68,1533,3.629,1534,2.68,1535,3.629,1536,4.115,1537,2.68,1538,2.68,1539,2.68,1540,2.68,1541,2.68,1542,2.68,1543,2.68,1544,2.68,1545,2.68,1546,2.68,1547,2.68,1548,2.68,1549,2.68,1550,2.68,1551,2.68,1552,2.68,1553,2.03,1554,2.68,1555,4.115,1556,3.629,1557,2.68,1558,4.115,1559,2.68,1560,4.115,1561,3.629,1562,2.68,1563,2.68,1564,2.68,1565,2.68,1566,2.68,1567,2.68,1568,2.68,1569,2.68,1570,2.68,1571,2.68,1572,2.68,1573,3.629,1574,3.629,1575,3.629,1576,4.115,1577,3.386,1578,4.115,1579,3.629,1580,3.272,1581,3.272,1582,2.416,1583,2.206,1584,3.629,1585,2.68,1586,2.68,1587,2.68,1588,2.68,1589,2.68,1590,2.68,1591,2.68,2378,4.833,2379,4.833,2380,4.833,2381,4.833,2382,3.569,2383,3.569,2384,3.569,2385,3.569,2386,3.569,2387,3.569,2388,3.569,2389,3.569,2390,3.569,2391,3.033]],["title/classes/StateManager.html",[0,0.255,2392,2.167]],["body/classes/StateManager.html",[0,0.228,2,0.329,3,0.219,4,0.193,5,0.144,8,0.984,9,0.445,11,1.537,16,0.144,17,0.549,18,2.29,20,1.339,33,0.506,42,1.112,44,1.386,45,2.58,47,0.734,48,2.358,49,0.902,50,0.598,51,0.024,52,0.488,53,0.263,54,0.542,56,1.044,57,0.747,58,0.636,61,2.543,66,1.689,80,1.083,90,1.893,93,2.023,101,1.551,103,0.594,107,0.821,112,0.924,117,1.023,121,1.566,135,0.67,136,0.525,152,0.245,153,0.542,162,0.636,166,3.292,186,0.015,187,0.015,188,1.787,191,1.655,213,0.881,229,3.163,230,0.939,233,1.929,253,1.566,259,4.353,270,1.941,272,0.747,303,4.372,440,3.779,640,2.358,703,3.204,708,0.821,711,2.192,734,4.45,736,2.353,737,3.126,777,1.787,786,1.775,788,1.436,792,3.322,854,2.296,862,4.566,867,2.094,889,1.655,1036,1.436,1118,3.314,1313,3.765,1315,1.941,1317,2.358,1320,2.669,1324,2.358,1351,3.437,1410,3.322,1435,2.517,1439,3.163,1450,2.995,1451,2.669,1495,2.838,1629,3.76,1646,2.358,1694,3.76,1719,1.655,1731,3.76,1733,3.74,1800,2.669,1861,4.726,1887,3.76,1971,4.791,2111,2.669,2124,2.669,2252,2.358,2267,2.126,2296,2.358,2392,3.758,2393,5.966,2394,4.424,2395,5.122,2396,5.122,2397,5.561,2398,5.561,2399,5.561,2400,5.561,2401,5.561,2402,5.561,2403,4.424,2404,4.424,2405,4.424,2406,4.424,2407,4.424,2408,4.424,2409,3.141,2410,4.424,2411,5.122,2412,5.561,2413,5.122,2414,4.424,2415,5.561,2416,3.141,2417,3.141,2418,3.141,2419,4.424,2420,4.424,2421,3.141,2422,4.424,2423,3.141,2424,4.424,2425,3.141,2426,4.424,2427,3.141,2428,4.424,2429,3.141,2430,2.358,2431,5.561,2432,3.141,2433,3.141,2434,3.141,2435,3.141,2436,2.669,2437,3.141,2438,2.669,2439,3.141,2440,4.424,2441,4.424,2442,4.424,2443,3.141,2444,3.141,2445,3.141,2446,3.141,2447,3.141,2448,3.141,2449,3.141,2450,3.141,2451,3.141,2452,5.122,2453,3.141,2454,5.122,2455,3.141,2456,3.141,2457,3.141,2458,4.353,2459,3.76,2460,3.141,2461,3.141,2462,3.141,2463,3.141,2464,3.141,2465,3.141,2466,3.141,2467,3.141]],["title/classes/TracksMaterial.html",[0,0.255,2468,2.374]],["body/classes/TracksMaterial.html",[0,0.336,2,0.352,3,0.234,4,0.206,5,0.154,9,0.323,14,3.592,16,0.212,17,0.575,42,1.006,47,0.486,49,1.081,50,0.321,51,0.024,52,0.262,53,0.129,54,0.291,56,0.944,58,0.742,59,1.383,71,1.695,75,3.536,79,1.051,94,1.265,101,1.227,103,0.291,112,0.671,117,0.967,135,0.384,136,0.56,148,2.804,152,0.362,153,0.46,162,0.654,169,1.994,186,0.015,187,0.015,213,1.014,227,2.44,241,2.27,242,1.982,244,3.255,248,3.136,251,2.863,272,0.713,295,1.473,304,3.536,337,2.673,341,4.118,455,1.767,554,2.863,598,3.711,600,2.073,644,4.509,646,3.536,708,0.877,730,2.863,871,2.409,978,3.837,1152,4.008,1157,4.509,1312,2.863,1322,2.519,1339,2.271,1584,3.536,2297,2.271,2468,3.592,2469,2.519,2470,4.509,2471,4.509,2472,3.937,2473,4.633,2474,3.478,2475,2.851,2476,3.937,2477,5.103,2478,2.851,2479,5.103,2480,4.863,2481,2.851,2482,2.851,2483,2.851,2484,3.937,2485,3.937,2486,2.851,2487,2.851,2488,2.851,2489,2.851,2490,2.851,2491,2.851,2492,2.851,2493,2.851,2494,3.937,2495,3.937,2496,2.851,2497,2.851,2498,2.851,2499,2.851,2500,3.937,2501,3.937,2502,3.937,2503,3.937,2504,3.937,2505,3.937,2506,2.851,2507,3.937,2508,3.937,2509,3.937,2510,2.851,2511,3.937,2512,2.851,2513,2.851,2514,5.511,2515,3.937,2516,3.937,2517,3.937,2518,3.937,2519,3.937,2520,3.937,2521,3.937,2522,3.937,2523,3.937,2524,5.511,2525,2.851,2526,3.937,2527,2.851,2528,3.937,2529,2.851,2530,3.937,2531,2.851,2532,3.937,2533,2.851,2534,3.937,2535,2.851,2536,3.937,2537,2.851,2538,2.851,2539,2.851,2540,2.851,2541,2.851,2542,2.851,2543,2.851,2544,2.851,2545,2.851,2546,2.851,2547,2.851,2548,2.851,2549,2.851,2550,2.851,2551,2.851,2552,5.103,2553,4.509,2554,5.277,2555,5.277,2556,4.509,2557,4.863,2558,3.136,2559,4.509,2560,4.509,2561,5.511,2562,4.509,2563,4.863,2564,4.863,2565,2.851,2566,2.851,2567,2.851,2568,4.863,2569,2.851,2570,2.851,2571,4.509,2572,3.937,2573,2.851,2574,2.851,2575,2.851,2576,2.851,2577,2.851,2578,4.863,2579,3.937,2580,3.937,2581,4.863,2582,2.851,2583,2.851,2584,3.937,2585,2.851,2586,2.851,2587,2.851,2588,3.937,2589,2.851,2590,2.851,2591,4.509,2592,2.519,2593,2.851,2594,2.851,2595,2.851,2596,2.851,2597,3.937,2598,2.851,2599,2.851,2600,2.851,2601,2.851,2602,2.851,2603,2.851,2604,2.851,2605,2.851,2606,2.851,2607,2.851,2608,2.851,2609,2.851,2610,2.851,2611,2.851,2612,4.509,2613,3.937,2614,2.851,2615,2.851,2616,3.937,2617,2.851]],["title/classes/TracksMesh.html",[0,0.255,251,2.167]],["body/classes/TracksMesh.html",[0,0.323,2,0.332,3,0.221,4,0.195,5,0.145,9,0.31,14,3.482,16,0.204,17,0.552,33,0.509,42,1.117,47,0.71,49,1.048,50,0.303,51,0.024,52,0.247,53,0.255,54,0.275,56,0.645,58,0.731,59,1.369,71,1.671,75,3.87,79,0.992,94,1.242,101,1.189,103,0.446,112,0.745,117,1.054,135,0.362,136,0.528,148,2.734,152,0.347,153,0.446,162,0.638,169,2.063,186,0.015,187,0.015,213,1.007,227,3.097,241,2.52,242,2.387,244,3.636,248,3.011,251,3.179,272,0.691,295,1.428,304,3.448,337,2.641,341,4.261,455,1.667,554,3.767,598,3.95,600,1.956,644,4.414,646,2.749,708,1.162,730,3.633,871,2.564,978,3.767,1152,3.448,1157,4.414,1312,2.749,1322,2.376,1339,2.142,1584,3.448,2297,3.011,2468,3.011,2469,2.376,2470,3.78,2471,2.689,2472,2.689,2474,2.376,2475,2.689,2476,4.741,2477,5.522,2478,4.371,2479,5.432,2480,5.181,2481,3.78,2482,4.371,2483,4.371,2484,3.78,2485,3.78,2486,2.689,2487,2.689,2488,2.689,2489,2.689,2490,2.689,2491,2.689,2492,2.689,2493,2.689,2494,3.78,2495,4.741,2496,3.78,2497,3.78,2498,2.689,2499,2.689,2500,3.78,2501,3.78,2502,3.78,2503,3.78,2504,3.78,2505,3.78,2506,2.689,2507,3.78,2508,3.78,2509,3.78,2510,2.689,2511,3.78,2512,2.689,2513,2.689,2514,5.432,2515,3.78,2516,3.78,2517,3.78,2518,3.78,2519,3.78,2520,3.78,2521,3.78,2522,3.78,2523,3.78,2524,5.432,2525,2.689,2526,3.78,2527,2.689,2528,3.78,2529,2.689,2530,3.78,2531,2.689,2532,3.78,2533,2.689,2534,3.78,2535,2.689,2536,3.78,2537,2.689,2538,2.689,2539,2.689,2540,2.689,2541,2.689,2542,2.689,2543,2.689,2544,2.689,2545,2.689,2546,2.689,2547,2.689,2548,2.689,2549,2.689,2550,2.689,2551,2.689,2552,4.996,2553,4.371,2554,5.181,2555,5.181,2556,4.371,2557,4.741,2558,3.011,2559,4.371,2560,4.371,2561,5.432,2562,4.371,2563,4.741,2564,4.741,2565,2.689,2566,2.689,2567,2.689,2568,4.741,2569,2.689,2570,2.689,2571,4.371,2572,3.78,2573,2.689,2574,2.689,2575,2.689,2576,2.689,2577,2.689,2578,4.741,2579,3.78,2580,3.78,2581,4.741,2582,2.689,2583,2.689,2584,3.78,2585,2.689,2586,2.689,2587,2.689,2588,3.78,2589,2.689,2590,2.689,2591,4.371,2592,2.376,2593,2.689,2594,2.689,2595,2.689,2596,2.689,2597,3.78,2598,2.689,2599,2.689,2600,2.689,2601,2.689,2602,2.689,2603,2.689,2604,2.689,2605,2.689,2606,2.689,2607,2.689,2608,2.689,2609,2.689,2610,2.689,2611,2.689,2612,4.371,2613,3.78,2614,2.689,2615,2.689,2616,3.78,2617,2.689,2618,4.448,2619,4.448,2620,3.165,2621,3.165,2622,3.165,2623,3.165,2624,3.165,2625,3.165,2626,3.165,2627,3.165,2628,3.165,2629,3.165,2630,3.165]],["title/classes/URLOptionsManager.html",[0,0.255,2631,2.374]],["body/classes/URLOptionsManager.html",[0,0.203,2,0.294,3,0.335,4,0.172,5,0.32,8,0.878,9,0.421,11,1.296,16,0.129,17,0.506,20,1.781,24,1.372,33,0.466,35,3.325,42,1.146,47,0.681,50,0.613,51,0.024,52,0.457,53,0.266,54,0.508,57,0.709,58,0.466,59,1.193,62,2.519,64,3.262,66,1.557,80,1.161,88,1.466,101,1.22,103,0.575,107,1.065,112,0.812,126,1.535,135,0.669,144,1.443,152,0.318,153,0.537,162,0.691,176,3.436,186,0.013,187,0.013,191,2.148,213,0.812,230,1.013,233,1.535,238,2.148,253,1.443,254,1.373,258,1.431,272,0.898,282,2.586,325,2.734,372,2.104,512,4.648,523,2.148,547,1.199,586,3.465,588,3.465,684,2.186,711,1.199,715,2.748,717,2.519,736,2.331,746,4.19,752,2.76,778,2.519,852,2.187,854,2.138,866,3.794,867,2.112,868,4.211,873,2.319,874,2.319,875,2.78,877,1.594,923,2.319,1033,3.061,1036,1.864,1118,2.96,1201,1.373,1312,2.519,1415,1.731,1461,1.897,1495,1.124,1522,2.319,1553,3.191,1719,2.955,1725,3.061,1733,3.436,1955,3.061,2116,2.381,2202,3.465,2208,3.962,2227,2.381,2250,2.381,2252,3.061,2258,2.381,2312,3.465,2392,2.97,2436,3.465,2458,2.381,2631,2.76,2632,4.932,2633,5.278,2634,5.278,2635,4.806,2636,5.278,2637,5.278,2638,5.278,2639,4.077,2640,4.077,2641,4.077,2642,4.077,2643,2.802,2644,5.278,2645,4.077,2646,2.802,2647,4.485,2648,3.963,2649,4.974,2650,2.802,2651,5.608,2652,2.802,2653,5.133,2654,5.278,2655,5.278,2656,2.802,2657,4.077,2658,2.802,2659,4.077,2660,4.077,2661,4.974,2662,6.041,2663,4.084,2664,4.395,2665,4.077,2666,4.077,2667,2.802,2668,5.26,2669,3.465,2670,4.077,2671,2.802,2672,5.853,2673,4.077,2674,4.084,2675,2.802,2676,2.76,2677,2.381,2678,2.381,2679,2.104,2680,2.802,2681,2.381,2682,2.104,2683,4.077,2684,2.802,2685,2.802,2686,2.802,2687,2.802,2688,2.802,2689,2.802,2690,2.802,2691,1.731,2692,5.278,2693,4.806,2694,2.381,2695,2.802,2696,2.381,2697,2.802,2698,2.802,2699,4.077,2700,2.802,2701,2.802,2702,4.806,2703,2.802,2704,2.802,2705,2.802,2706,2.381,2707,2.381,2708,2.802,2709,2.802,2710,3.465,2711,2.802,2712,2.802,2713,4.077,2714,2.802,2715,2.802,2716,2.802,2717,2.802,2718,2.802,2719,2.381,2720,2.381,2721,2.802,2722,2.802,2723,2.802,2724,3.465,2725,2.802,2726,3.465,2727,2.802,2728,2.802,2729,2.802,2730,2.802,2731,2.802,2732,2.802,2733,2.802,2734,2.802,2735,2.802,2736,3.465,2737,3.061,2738,3.609,2739,4.077,2740,2.381,2741,2.802,2742,2.802,2743,2.802,2744,2.802,2745,2.381,2746,4.077,2747,4.077,2748,2.802,2749,4.077,2750,4.077,2751,2.802,2752,2.802,2753,2.802,2754,2.802,2755,2.802,2756,2.802,2757,2.802,2758,2.802,2759,2.802,2760,2.802,2761,2.802,2762,2.802,2763,4.077,2764,4.077,2765,4.077,2766,4.077,2767,4.077,2768,4.077,2769,3.465,2770,4.077,2771,2.802,2772,2.802,2773,4.077,2774,2.802,2775,2.802,2776,2.802,2777,2.802,2778,2.802]],["title/classes/VRManager.html",[0,0.255,2779,2.374]],["body/classes/VRManager.html",[0,0.222,2,0.321,3,0.214,4,0.189,5,0.141,6,2.654,8,0.96,9,0.405,11,1.342,12,1.637,13,1.86,14,2.943,15,3.905,16,0.141,17,0.54,18,1.903,20,1.845,22,3.794,23,4.294,24,1.373,25,3.264,26,5.126,27,3.264,28,4.2,29,3.106,30,3.264,31,3.264,32,3.264,33,0.497,34,4.13,35,2.29,36,3.264,38,3.794,39,3.264,40,3.794,41,3.794,42,1.097,44,0.96,45,2.628,47,0.738,49,0.886,50,0.526,51,0.024,52,0.43,53,0.268,54,0.504,56,0.624,57,0.679,58,0.578,60,2.604,61,1.401,71,0.801,74,2.3,79,1.362,80,0.726,81,3.694,82,2.604,83,3.97,84,2.476,85,2.759,86,5.724,87,2.604,88,1.207,89,3.924,90,1.311,91,2.604,92,2.13,93,1.988,94,1.229,95,2.604,96,3.106,97,2.846,98,3.589,99,3.589,100,2.604,101,1.465,102,2.604,103,0.56,104,2.074,105,2.074,106,2.3,107,0.801,108,2.604,109,2.604,110,1.947,112,0.958,113,2.3,115,1.893,117,0.787,119,2.604,120,1.893,121,1.084,122,2.3,123,2.604,124,2.3,125,1.614,126,1.903,127,2.3,128,1.743,129,2.604,130,2.3,131,4.361,133,3.264,134,2.687,135,0.578,136,0.512,138,1.893,139,2.074,140,1.893,142,2.3,143,2.3,144,1.947,145,2.3,146,2.3,147,2.3,148,1.501,149,1.501,150,1.893,152,0.239,153,0.504,154,4.294,161,2.3,164,2.604,180,2.604,186,0.014,187,0.014,213,0.873,229,3.304,230,0.629,241,1.501,242,2.485,272,0.78,288,3.529,295,1.403,306,1.501,344,1.311,378,3.694,386,2.687,444,4.294,466,1.893,516,2.604,524,1.893,547,2.162,854,1.539,871,1.229,955,2.604,1061,2.473,1309,2.604,1577,4.128,1639,4.674,1870,2.3,2267,2.074,2268,3.264,2391,2.604,2694,3.694,2779,2.943,2780,5.622,2781,4.412,2782,5.053,2783,5.053,2784,5.053,2785,5.053,2786,5.053,2787,5.053,2788,4.347,2789,5.5,2790,5.48,2791,6.34,2792,3.064,2793,5.5,2794,5.126,2795,4.674,2796,4.347,2797,4.347,2798,4.347,2799,6.34,2800,3.064,2801,4.347,2802,3.064,2803,3.064,2804,4.347,2805,3.064,2806,3.064,2807,4.294,2808,4.347,2809,3.064,2810,3.064,2811,3.064,2812,3.064,2813,4.347,2814,3.064,2815,3.064,2816,3.064,2817,3.064,2818,3.064,2819,4.347,2820,4.347,2821,5.053,2822,3.064,2823,5.053,2824,3.064,2825,3.064,2826,3.064,2827,3.064,2828,3.064,2829,3.064,2830,3.064,2831,3.064,2832,3.064,2833,3.064,2834,3.064,2835,3.064,2836,3.064,2837,3.064,2838,3.064,2839,3.064,2840,3.064,2841,3.064,2842,3.064,2843,3.064,2844,3.064,2845,3.064,2846,3.064,2847,3.064,2848,3.064,2849,4.347,2850,4.347,2851,3.064,2852,3.064,2853,3.064,2854,3.064,2855,3.064,2856,3.064,2857,3.064,2858,2.604,2859,3.064,2860,3.064,2861,3.064,2862,4.347,2863,3.064,2864,3.064,2865,3.064,2866,3.064]],["title/interfaces/Window.html",[219,1.321,2691,2.167]],["body/interfaces/Window.html",[0,0.202,3,0.312,4,0.105,5,0.263,9,0.119,10,1.722,11,1.517,12,1.327,13,0.733,16,0.186,17,0.346,20,1.527,24,1.416,28,2.386,29,1.366,33,0.319,35,2.661,44,1.795,45,1.53,49,0.349,50,0.337,51,0.024,52,0.542,53,0.156,55,1.53,56,1.26,57,0.731,58,0.319,59,1.305,61,2.408,62,2.178,64,2.178,66,1.65,69,2.008,71,0.448,76,0.974,77,3.585,79,0.873,80,1.163,83,2.005,84,2.475,85,0.783,88,1.65,89,2.31,92,1.366,94,0.718,96,2.742,97,2.19,98,2.178,101,0.644,103,0.536,107,0.728,110,1.582,112,0.762,117,0.939,120,1.058,121,1.582,125,1.857,135,0.707,136,0.589,138,2.762,140,1.722,144,2.068,149,0.839,152,0.134,153,0.621,162,0.668,166,1.468,169,1.273,176,3.184,186,0.009,187,0.009,188,1.585,191,0.902,194,1.058,196,2.093,213,0.731,219,1.327,220,2.005,221,0.974,222,1.159,223,3.364,224,1.585,227,0.902,228,1.887,229,0.974,230,1.011,231,2.093,232,2.646,235,1.585,236,2.995,238,0.902,253,1.438,254,0.839,257,2.19,258,1.457,260,1.058,261,1.438,266,2.368,270,1.058,272,0.881,281,3.356,282,2.475,283,2.178,284,2.368,285,4.072,286,2.995,287,1.455,288,0.974,292,1.585,314,2.368,315,2.368,316,4.627,317,1.887,318,2.368,320,0.974,325,2.005,344,2.969,365,0.839,398,3.244,438,1.159,440,0.902,441,1.455,469,1.192,474,2.093,503,2.368,513,1.058,518,1.455,520,1.455,523,2.661,546,1.722,547,1.192,549,1.286,554,1.058,598,1.058,624,2.093,627,2.386,628,1.468,629,2.384,630,0.902,632,2.093,650,1.887,684,1.583,707,1.585,708,1.527,711,2.161,715,2.19,717,1.058,734,1.159,736,2.157,737,2.348,745,2.386,754,1.286,763,0.839,778,1.058,786,2.026,788,1.274,822,1.159,852,2.099,854,2.103,865,2.093,866,3.32,867,1.53,869,2.543,874,2.005,875,1.468,877,3.184,884,1.286,888,1.286,890,2.646,923,0.974,939,1.286,976,4.072,991,0.974,1001,1.286,1016,0.902,1036,2.49,1058,1.722,1060,2.31,1061,1.585,1064,2.543,1067,1.585,1079,1.058,1080,1.585,1082,1.159,1098,2.386,1100,1.887,1108,3.244,1118,2.58,1125,1.722,1152,2.51,1193,2.995,1201,0.839,1295,1.286,1302,1.887,1310,2.368,1328,2.646,1376,1.455,1377,1.455,1381,2.995,1384,1.455,1385,2.093,1386,2.31,1388,2.368,1389,1.455,1393,1.286,1398,2.749,1400,1.455,1402,1.455,1403,1.455,1405,2.749,1406,1.159,1407,2.368,1408,3.799,1410,2.093,1411,1.286,1415,2.51,1416,3.799,1419,1.286,1429,2.368,1430,3.244,1431,1.286,1432,1.455,1433,1.455,1435,2.005,1444,1.286,1461,1.159,1462,2.386,1464,3.953,1468,1.455,1476,1.455,1495,2.026,1501,2.386,1598,2.368,1602,1.286,1609,1.286,1616,2.51,1618,2.368,1722,1.455,1733,3.258,1739,1.455,1761,1.159,1903,1.455,1955,1.286,1970,1.455,2012,1.455,2103,2.093,2132,1.455,2133,1.455,2134,1.455,2151,1.286,2208,3.789,2209,1.455,2242,1.455,2245,1.455,2270,1.286,2271,1.455,2274,4.387,2275,1.455,2277,2.368,2278,1.455,2296,1.286,2297,1.159,2304,2.995,2353,2.646,2392,2.51,2459,1.455,2474,2.093,2558,1.159,2631,2.386,2664,2.093,2676,1.887,2677,1.455,2678,1.455,2691,3.122,2696,3.799,2720,1.455,2726,2.368,2737,3.356,2781,2.51,2867,1.455,2868,1.455,2869,1.712,2870,3.598,2871,2.368,2872,1.712,2873,1.712,2874,1.712,2875,1.712,2876,1.712,2877,1.712,2878,1.159,2879,1.286,2880,1.712,2881,1.712,2882,1.712,2883,3.524,2884,3.524,2885,1.712,2886,1.712,2887,1.712,2888,1.712,2889,2.787,2890,2.787,2891,1.712,2892,2.787,2893,3.524,2894,1.712,2895,3.524,2896,1.712,2897,1.712,2898,1.712,2899,1.712,2900,1.712,2901,1.712,2902,1.712,2903,1.712,2904,1.712,2905,1.712,2906,2.787,2907,1.712,2908,1.712,2909,1.712,2910,3.524,2911,1.712,2912,2.368,2913,1.712,2914,3.524,2915,1.712,2916,3.451,2917,2.787,2918,4.47,2919,4.47,2920,1.455,2921,1.712,2922,1.712,2923,1.712,2924,1.712,2925,1.712,2926,1.712,2927,2.787,2928,1.712,2929,1.712,2930,2.787,2931,1.712,2932,1.712,2933,1.712,2934,1.712,2935,1.712,2936,1.712,2937,3.524,2938,3.524,2939,1.712,2940,5.051,2941,1.712,2942,1.712,2943,1.712,2944,1.712,2945,1.712,2946,1.712,2947,1.712,2948,1.712,2949,1.712,2950,2.787,2951,2.787,2952,2.787,2953,2.787,2954,2.787,2955,1.712,2956,1.712,2957,1.712,2958,1.712,2959,1.712,2960,1.712,2961,1.712,2962,1.712,2963,1.712,2964,1.712,2965,1.712,2966,1.712,2967,3.524,2968,1.712,2969,3.524,2970,6.561,2971,4.792,2972,4.792,2973,4.792,2974,6.181,2975,4.061,2976,6.404,2977,4.792,2978,3.524,2979,1.712,2980,2.787,2981,1.712,2982,1.712,2983,4.47,2984,1.712,2985,2.787,2986,2.787,2987,4.792,2988,1.712,2989,1.712,2990,1.712,2991,1.712,2992,1.712,2993,1.712,2994,1.712,2995,2.787,2996,1.712,2997,1.712,2998,1.712,2999,1.712,3000,1.712,3001,1.712,3002,1.712,3003,1.712,3004,1.712,3005,1.712,3006,1.712,3007,1.712,3008,1.712,3009,1.455,3010,1.712,3011,4.061,3012,1.712,3013,1.712,3014,2.787,3015,2.787,3016,1.712,3017,1.712,3018,1.712,3019,3.524,3020,2.787,3021,1.712,3022,1.712,3023,1.712,3024,1.712,3025,1.712,3026,1.712,3027,3.524,3028,1.712,3029,2.787,3030,2.787,3031,1.712,3032,2.787,3033,1.712,3034,1.712,3035,1.712,3036,1.712,3037,1.712,3038,1.712,3039,1.712,3040,1.712,3041,1.712,3042,1.712,3043,1.712,3044,1.712,3045,4.072,3046,1.712,3047,3.524,3048,1.712,3049,1.712,3050,1.712,3051,3.524,3052,1.455,3053,1.712,3054,1.712,3055,1.712,3056,1.712,3057,1.712,3058,1.712,3059,1.712,3060,1.712,3061,1.712,3062,1.712,3063,1.712,3064,1.712,3065,1.712,3066,1.712,3067,1.712,3068,1.712,3069,1.712,3070,1.712,3071,1.712,3072,1.712,3073,1.712,3074,1.712,3075,1.712,3076,1.712,3077,1.712,3078,1.712,3079,1.712,3080,2.787,3081,1.712,3082,1.712,3083,1.712,3084,1.712,3085,1.712,3086,1.712,3087,1.455,3088,1.712,3089,1.712,3090,1.712,3091,1.712,3092,1.712,3093,1.455,3094,1.712,3095,1.712,3096,1.712,3097,1.712,3098,1.455,3099,1.712,3100,1.712,3101,1.712,3102,1.455,3103,1.712,3104,1.712,3105,2.787,3106,1.712,3107,1.712,3108,1.712,3109,1.712,3110,1.712,3111,1.712,3112,1.712,3113,1.712,3114,1.712,3115,1.712,3116,2.787,3117,1.712,3118,1.712,3119,1.712,3120,1.712,3121,2.787,3122,2.787,3123,1.712,3124,1.712,3125,1.712,3126,1.712]],["title/classes/XRManager.html",[0,0.255,15,1.995]],["body/classes/XRManager.html",[0,0.243,2,0.351,3,0.233,4,0.206,5,0.154,6,2.773,8,1.049,9,0.418,10,3.708,11,1.322,12,1.742,13,1.979,15,2.631,16,0.154,17,0.574,24,1.427,25,3.98,26,5.306,27,3.98,28,4.388,29,3.296,30,4.293,31,3.98,32,3.98,33,0.529,34,4.293,35,2.792,36,3.473,38,4.293,39,3.473,40,4.293,41,3.98,42,0.727,44,1.449,45,2.707,46,3.931,47,0.721,49,0.943,50,0.547,51,0.024,52,0.447,53,0.264,54,0.552,56,0.943,57,0.621,58,0.529,59,0.682,61,2.115,79,1.049,80,0.559,83,4.094,84,2.266,85,3.161,88,1.587,89,4.154,90,2.268,92,2.801,93,2.614,94,1.165,96,3.263,97,3.04,98,3.835,99,3.835,101,1.47,103,0.578,104,3.131,105,3.588,106,3.473,107,1.385,110,2.294,112,0.938,113,3.473,115,2.858,120,2.858,121,1.637,122,3.473,124,3.473,125,2.792,126,1.996,127,3.473,128,2.631,130,2.513,131,4.505,133,3.473,134,2.858,135,0.383,136,0.559,138,3.533,139,2.266,140,2.068,141,2.844,142,2.513,143,2.513,144,1.185,145,3.98,146,2.513,147,2.513,148,1.64,149,1.64,150,2.068,152,0.361,153,0.552,155,2.513,161,2.513,162,0.529,176,1.904,186,0.015,187,0.015,213,0.67,242,1.432,272,0.712,295,0.929,386,2.068,547,1.432,597,2.513,626,3.473,684,1.049,711,1.432,779,2.513,788,1.531,1335,2.844,1553,2.631,2115,2.844,2119,2.844,2251,2.844,2253,2.844,2264,2.844,2267,2.266,2268,2.513,2438,2.844,2719,2.844,2781,3.708,2878,4.68,3127,3.347,3128,5.3,3129,3.347,3130,3.347,3131,3.347,3132,3.347,3133,3.347,3134,3.347,3135,3.347,3136,4.625,3137,3.347,3138,3.347,3139,4.625,3140,4.625,3141,4.625,3142,3.347,3143,3.347,3144,3.347,3145,3.347,3146,5.3,3147,3.347,3148,3.347,3149,3.347,3150,4.625,3151,3.347,3152,3.347,3153,5.717,3154,3.347,3155,4.625,3156,3.347,3157,3.347,3158,3.347,3159,3.347,3160,3.347,3161,3.347,3162,3.347,3163,3.347,3164,3.347]],["title/changelog.html",[115,1.813,3165,2.203,3166,2.934]],["body/changelog.html",[0,0.335,1,1.07,3,0.299,4,0.097,5,0.178,10,3.592,11,1.469,15,1.485,17,0.481,29,0.775,35,0.833,42,0.724,44,1.213,45,1.256,49,0.995,51,0.011,52,0.26,53,0.148,54,0.336,55,1.613,57,0.351,58,0.381,63,2.503,64,2.392,66,1.872,69,1.767,73,2.099,76,1.485,77,2.902,79,1.045,83,0.899,84,3.283,89,1.897,93,0.723,94,0.94,101,1.179,105,4.269,110,0.56,117,0.603,125,1.375,128,2.437,135,0.49,139,2.9,148,1.634,150,0.977,162,0.298,166,2.039,169,2.14,170,1.767,176,0.899,186,0.009,187,0.009,191,0.833,194,1.613,198,3.749,202,1.187,213,0.483,219,1.458,223,3.016,224,1.897,227,0.833,228,1.07,229,2.902,230,1.07,231,1.187,235,0.899,238,0.833,241,0.775,253,0.56,257,2.26,258,1.066,261,0.924,281,1.187,282,1.279,288,0.899,295,0.439,302,1.343,303,3.592,317,1.07,337,2.403,338,2.257,341,2.85,344,2.528,350,2.218,364,1.343,365,0.775,366,1.343,379,2.218,389,2.202,390,2.833,397,3.689,438,2.257,440,3.156,453,1.767,455,1.756,465,3.289,466,0.977,469,2.331,470,1.07,476,1.279,487,2.392,512,2.503,513,1.613,543,1.07,546,0.977,547,1.974,548,3.289,564,3.64,578,1.187,589,1.187,598,1.613,603,1.343,617,2.257,627,2.62,628,0.833,629,1.957,635,1.187,642,0.977,646,1.613,661,3.463,684,2.13,707,1.897,708,1.865,715,1.279,717,0.977,720,3.009,727,1.343,730,1.613,733,1.767,736,2.515,737,2.67,740,0.775,745,1.767,746,3.782,752,2.257,763,0.775,768,1.96,780,1.07,786,1.85,788,1.194,818,1.767,823,1.343,852,1.536,854,2.613,857,1.343,865,1.187,866,3.232,867,2.189,869,1.485,874,2.437,875,2.87,876,1.767,877,2.902,894,2.06,897,2.62,898,1.96,904,1.343,907,1.07,913,1.07,922,1.343,925,2.906,939,1.187,967,1.343,974,2.257,978,0.977,991,0.899,994,0.977,998,0.977,1003,1.343,1005,1.343,1036,2.905,1038,1.485,1061,1.485,1064,0.899,1067,2.902,1076,3.123,1099,0.977,1107,1.767,1118,0.775,1124,1.343,1125,0.977,1136,1.187,1137,2.503,1147,1.343,1193,0.899,1201,0.775,1229,2.833,1294,1.187,1299,1.343,1302,1.07,1321,2.503,1323,1.187,1392,1.343,1396,1.96,1405,2.9,1411,1.96,1414,1.343,1415,0.977,1430,1.07,1431,1.187,1435,2.202,1439,1.485,1444,1.187,1462,1.07,1464,1.187,1465,2.218,1495,2.046,1500,0.977,1522,1.485,1553,2.202,1577,0.977,1580,2.257,1583,0.977,1607,1.187,1609,2.503,1680,1.343,1684,1.187,1700,1.343,1704,2.833,1710,1.187,1719,2.786,1733,1.897,1743,4.285,1761,1.07,1870,1.96,1878,1.343,1911,2.833,1942,1.343,1943,4.336,1971,3.463,1990,3.64,1994,2.833,2036,1.07,2039,1.343,2050,1.343,2092,2.503,2103,1.187,2148,1.96,2151,2.503,2192,1.96,2195,1.343,2208,1.07,2234,2.833,2270,1.187,2274,1.187,2354,1.343,2558,1.07,2647,2.218,2648,4.556,2653,4.494,2661,3.92,2663,1.343,2664,1.187,2669,2.218,2691,1.613,2710,1.343,2738,1.187,2740,2.218,2779,1.07,2781,3.016,2790,1.343,2807,2.218,2858,1.343,2870,3.664,2912,1.343,2916,1.343,2920,1.343,3045,1.343,3052,3.92,3093,4.336,3098,5.586,3102,1.343,3165,1.187,3167,1.581,3168,1.581,3169,1.581,3170,1.581,3171,1.581,3172,1.581,3173,2.61,3174,1.343,3175,3.334,3176,4.284,3177,1.581,3178,3.92,3179,4.284,3180,3.123,3181,1.581,3182,3.334,3183,2.61,3184,1.581,3185,1.581,3186,1.343,3187,1.581,3188,1.581,3189,1.581,3190,3.87,3191,2.61,3192,6.475,3193,1.581,3194,2.61,3195,1.581,3196,1.581,3197,1.187,3198,1.581,3199,1.581,3200,1.581,3201,5.448,3202,1.581,3203,1.581,3204,1.581,3205,1.581,3206,2.61,3207,1.581,3208,1.581,3209,1.343,3210,3.64,3211,1.581,3212,6.858,3213,1.581,3214,6.306,3215,2.61,3216,1.581,3217,1.581,3218,1.581,3219,4.284,3220,1.581,3221,1.581,3222,6.885,3223,1.581,3224,4.88,3225,1.581,3226,1.581,3227,1.581,3228,3.87,3229,1.581,3230,1.581,3231,1.581,3232,2.833,3233,1.343,3234,1.581,3235,1.581,3236,1.581,3237,1.581,3238,1.581,3239,1.581,3240,1.581,3241,2.61,3242,2.61,3243,5.102,3244,1.581,3245,1.581,3246,3.87,3247,1.581,3248,1.581,3249,1.581,3250,2.61,3251,1.581,3252,2.61,3253,1.581,3254,1.581,3255,1.581,3256,5.707,3257,1.581,3258,1.581,3259,1.581,3260,1.581,3261,1.581,3262,4.613,3263,3.87,3264,1.581,3265,3.334,3266,1.581,3267,1.581,3268,1.581,3269,1.581,3270,1.581,3271,1.581,3272,1.581,3273,1.581,3274,4.613,3275,1.581,3276,1.581,3277,1.581,3278,1.581,3279,1.581,3280,1.581,3281,1.581,3282,1.581,3283,1.581,3284,3.334,3285,1.581,3286,1.581,3287,4.284,3288,2.61,3289,1.581,3290,1.581,3291,1.581,3292,1.581,3293,1.581,3294,1.581,3295,5.991,3296,2.61,3297,2.833,3298,1.581,3299,1.581,3300,1.581,3301,1.581,3302,2.61,3303,3.334,3304,2.218,3305,1.581,3306,1.581,3307,3.334,3308,1.581,3309,3.87,3310,1.581,3311,1.581,3312,1.581,3313,1.581,3314,1.581,3315,1.581,3316,1.581,3317,1.343,3318,1.581,3319,1.581,3320,1.581,3321,1.581,3322,1.581,3323,1.581,3324,1.581,3325,1.581,3326,1.581,3327,1.581,3328,1.581,3329,1.581,3330,1.581,3331,1.581,3332,1.581,3333,1.581,3334,1.581,3335,1.581,3336,3.87,3337,1.581,3338,1.581,3339,2.61,3340,4.284,3341,1.581,3342,1.581,3343,1.581,3344,1.581,3345,1.581,3346,1.581,3347,1.581,3348,1.581,3349,1.581,3350,1.581,3351,1.581,3352,2.61,3353,1.581,3354,1.581,3355,1.581,3356,4.494,3357,1.581,3358,1.581,3359,1.581,3360,1.581,3361,3.334,3362,1.581,3363,1.581,3364,1.581,3365,3.87,3366,1.581,3367,2.61,3368,1.581,3369,1.581,3370,1.581,3371,1.581,3372,1.581,3373,1.581,3374,1.581,3375,1.581,3376,2.61,3377,1.581,3378,1.581,3379,1.581,3380,1.581,3381,1.581,3382,1.581,3383,1.581,3384,1.581,3385,1.581,3386,1.581,3387,1.581,3388,1.581,3389,1.581,3390,1.581,3391,1.581,3392,3.334,3393,1.581,3394,1.581,3395,1.581,3396,1.581,3397,3.334,3398,1.581,3399,1.581,3400,1.581,3401,1.581,3402,4.613,3403,1.581,3404,4.613,3405,1.581,3406,1.581,3407,1.581,3408,1.581,3409,1.581,3410,1.581,3411,2.61,3412,3.334,3413,2.61,3414,2.61,3415,3.334,3416,4.284,3417,3.334,3418,3.334,3419,3.334,3420,3.334,3421,1.581,3422,2.61,3423,2.61,3424,2.61,3425,1.581,3426,1.581,3427,3.87,3428,3.334,3429,2.61,3430,1.581,3431,1.581,3432,2.61,3433,2.61,3434,2.61,3435,1.581,3436,1.581,3437,1.581,3438,1.581,3439,1.581,3440,3.334,3441,3.334,3442,3.334,3443,3.334,3444,3.334,3445,3.334,3446,1.581,3447,1.581,3448,1.581,3449,1.581,3450,2.61,3451,3.334,3452,3.334,3453,3.334,3454,1.581,3455,3.334,3456,2.61,3457,3.334,3458,3.334,3459,3.334,3460,2.61,3461,3.334,3462,3.334,3463,2.833,3464,3.87,3465,3.334,3466,3.334,3467,3.334,3468,3.334,3469,1.581,3470,1.581,3471,3.334,3472,2.61,3473,2.61,3474,2.61,3475,3.334,3476,3.334,3477,2.61,3478,2.218,3479,2.61,3480,1.581,3481,1.581,3482,1.581,3483,1.581,3484,1.581,3485,1.581,3486,1.581,3487,1.581,3488,1.581,3489,1.581,3490,1.581,3491,1.581,3492,1.581,3493,1.581,3494,1.581,3495,1.581,3496,2.61,3497,1.581,3498,1.581,3499,1.581,3500,1.343,3501,1.581,3502,1.581,3503,1.581,3504,1.581,3505,1.581,3506,1.581,3507,1.581,3508,1.581,3509,1.581,3510,1.581,3511,1.581,3512,1.581,3513,1.581,3514,2.61,3515,1.581,3516,1.581,3517,1.581,3518,1.581,3519,2.833,3520,1.581,3521,1.581,3522,1.581,3523,1.581,3524,1.581,3525,1.581,3526,1.581,3527,1.581,3528,4.613,3529,1.581,3530,1.581,3531,1.581,3532,1.581,3533,1.581,3534,1.581,3535,1.581,3536,1.581,3537,1.581,3538,2.61,3539,1.581,3540,1.581,3541,1.581,3542,1.581,3543,3.334,3544,1.581,3545,1.581,3546,1.581,3547,1.581,3548,1.581,3549,1.581,3550,1.581,3551,1.581,3552,2.61,3553,1.581,3554,1.581,3555,1.581,3556,1.581,3557,1.581,3558,1.581,3559,1.581,3560,1.581,3561,1.581,3562,1.581,3563,1.581,3564,1.581,3565,1.581,3566,1.581,3567,1.581,3568,1.581,3569,1.581,3570,1.581,3571,1.581,3572,1.581,3573,1.581,3574,1.581,3575,1.343,3576,1.581,3577,1.581,3578,1.581,3579,3.334,3580,1.581,3581,1.581,3582,1.581,3583,1.581,3584,1.581,3585,1.343,3586,1.581,3587,2.61,3588,1.581,3589,1.581,3590,1.581,3591,1.581,3592,1.581,3593,1.581,3594,1.581,3595,1.581,3596,1.581,3597,1.581,3598,1.581,3599,1.581,3600,1.581,3601,1.581,3602,1.581,3603,1.581,3604,1.581,3605,1.581,3606,1.581,3607,2.61,3608,1.581,3609,1.581,3610,1.581,3611,1.581,3612,3.334,3613,1.581,3614,1.581,3615,1.581,3616,1.581,3617,1.581,3618,1.581,3619,1.581,3620,1.581,3621,1.581,3622,1.581,3623,1.581,3624,2.61,3625,1.581,3626,1.581,3627,1.581,3628,1.581,3629,1.581,3630,1.581,3631,1.581,3632,1.581,3633,1.343,3634,1.581,3635,1.581,3636,1.581,3637,1.581,3638,3.87,3639,1.581,3640,1.581,3641,1.581,3642,1.581,3643,1.581,3644,2.61,3645,1.581,3646,1.581,3647,1.581,3648,1.581,3649,1.581,3650,1.581,3651,1.581,3652,1.581,3653,1.581,3654,2.61,3655,1.581,3656,1.581,3657,1.581,3658,1.581,3659,1.581,3660,1.581,3661,1.581,3662,1.581,3663,1.581,3664,1.581,3665,1.581,3666,1.581,3667,1.581,3668,1.581,3669,1.581,3670,1.581,3671,1.581,3672,1.581,3673,1.581,3674,1.581,3675,1.581,3676,1.581,3677,1.581,3678,1.581,3679,1.581,3680,1.581,3681,1.581,3682,1.581,3683,1.581,3684,1.581,3685,1.581,3686,1.581,3687,1.581,3688,1.581,3689,1.581,3690,1.581,3691,1.581,3692,1.581,3693,1.581,3694,1.581,3695,1.581,3696,1.581,3697,1.581,3698,1.581,3699,1.581,3700,1.581,3701,1.581,3702,1.581,3703,1.581,3704,1.581,3705,1.581,3706,1.581,3707,1.581,3708,1.581,3709,1.581,3710,1.343]],["title/coverage.html",[3711,4.058]],["body/coverage.html",[0,0.533,1,2.734,5,0.185,6,2.829,7,3.432,8,2.233,15,2.298,51,0.024,53,0.155,137,2.298,186,0.017,187,0.017,188,2.298,189,3.033,190,3.033,191,3.601,213,0.585,219,2.407,220,2.298,222,3.552,230,0.585,250,2.734,251,2.496,256,3.432,258,0.934,543,2.734,544,3.432,545,4.458,550,3.432,562,3.033,615,2.734,616,3.242,681,2.734,682,3.05,683,2.734,684,1.644,703,2.128,736,1.976,774,2.298,777,2.984,852,1.345,853,3.432,860,2.496,883,2.734,889,3.069,894,2.496,895,3.432,896,3.939,974,2.128,975,3.432,983,2.734,1031,3.033,1032,3.432,1033,3.033,1034,3.945,1038,2.298,1058,2.496,1116,3.033,1118,1.979,1292,2.734,1293,3.432,1369,3.432,1370,5.077,1385,3.033,1386,2.298,1420,3.033,1421,3.432,1450,2.734,1485,3.945,1486,3.945,1494,2.298,1495,1.62,1592,3.432,1593,3.432,1616,2.496,1617,3.432,1657,6.265,1679,3.432,1733,2.298,1835,3.033,1951,3.033,1952,3.033,1985,3.432,1986,3.432,2036,2.734,2037,3.432,2081,3.432,2190,3.033,2191,3.432,2232,3.033,2233,3.432,2392,2.496,2393,3.432,2430,3.033,2468,2.734,2469,3.939,2631,2.734,2632,3.939,2674,3.432,2676,2.734,2679,3.033,2682,3.033,2691,2.496,2779,2.734,2780,3.432,2867,4.458,2868,4.458,2878,2.734,2879,3.033,3233,3.432,3500,3.432,3633,3.432,3711,3.432,3712,4.039,3713,4.039,3714,4.039,3715,6.168,3716,5.827,3717,4.458,3718,4.458,3719,3.432,3720,6.835,3721,3.432,3722,3.432,3723,4.039,3724,4.458,3725,5.246,3726,3.432,3727,5.246,3728,5.246,3729,4.039,3730,3.432,3731,5.246,3732,4.039,3733,5.246,3734,4.039,3735,4.039,3736,4.039,3737,4.039,3738,5.246,3739,4.039,3740,4.039,3741,4.039,3742,4.039,3743,5.246,3744,4.039,3745,4.039,3746,4.039,3747,4.039,3748,5.246,3749,4.039,3750,4.039,3751,5.246,3752,5.246,3753,4.039,3754,4.039,3755,4.039,3756,4.039,3757,4.039,3758,4.039,3759,4.951,3760,4.039,3761,5.246,3762,4.039,3763,5.246,3764,5.246,3765,4.039,3766,3.432,3767,4.039,3768,4.039,3769,4.039]],["title/dependencies.html",[3180,1.986,3770,3.582]],["body/dependencies.html",[51,0.024,136,0.932,186,0.021,187,0.021,239,4.742,874,3.175,2769,4.742,2870,4.19,3710,4.742,3770,4.742,3771,5.581,3772,5.581,3773,5.581,3774,5.581,3775,5.581,3776,5.581,3777,5.581,3778,4.742,3779,5.581,3780,5.581,3781,5.581]],["title/miscellaneous/enumerations.html",[3782,1.669,3783,3.582]],["body/miscellaneous/enumerations.html",[6,2.174,8,1.97,10,3.885,16,0.249,51,0.023,53,0.208,58,0.795,83,3.084,89,3.084,138,3.885,186,0.021,187,0.021,224,3.084,230,0.785,258,1.253,440,2.856,455,3.312,616,3.35,617,3.67,682,2.479,683,4.256,684,1.699,705,4.721,713,3.576,733,3.67,778,3.35,780,4.256,869,3.084,1951,4.07,1952,4.721,1963,5.343,1976,4.606,2781,3.885,2871,4.606,2878,3.67,3782,3.084,3783,4.606,3784,5.421,3785,4.606,3786,5.421]],["title/index.html",[16,0.135,115,1.813,3165,2.203]],["body/index.html",[2,0.503,4,0.295,5,0.22,49,1.285,51,0.024,55,2.201,66,1.924,84,2.864,104,3.246,110,1.697,135,0.668,169,1.503,186,0.019,187,0.019,213,0.95,230,1.044,258,1.517,261,1.697,272,0.881,291,3.246,292,3.587,338,3.246,344,2.501,684,1.832,708,1.253,709,4.075,715,2.864,794,4.075,852,2.328,854,2.52,858,3.957,860,3.612,867,2.201,875,3.079,876,3.246,923,2.728,953,3.601,1118,3.353,1193,2.728,1430,3.246,1461,3.246,1463,4.075,1487,4.389,1610,3.601,2192,3.601,2353,4.389,2676,4.268,2706,4.967,2707,4.075,3087,4.967,3180,3.246,3186,4.967,3209,4.075,3210,4.075,3232,4.967,3304,5.358,3356,4.075,3463,4.075,3585,4.967,3787,4.795,3788,4.075,3789,4.795,3790,4.075,3791,4.795,3792,4.795,3793,5.845,3794,4.795,3795,4.795,3796,4.795,3797,5.845,3798,4.795,3799,4.795,3800,4.795,3801,4.795,3802,4.795,3803,4.795,3804,4.795,3805,4.795,3806,5.845,3807,4.795,3808,4.795,3809,4.795,3810,4.795,3811,4.795,3812,4.795,3813,4.795]],["title/modules.html",[3814,4.058]],["body/modules.html",[51,0.021,186,0.021,187,0.021,3814,4.858]],["title/overview.html",[3815,4.058]],["body/overview.html",[2,0.597,51,0.021,186,0.021,187,0.021,221,3.239,2592,4.276,3815,4.839,3816,5.694]],["title/properties.html",[17,0.523,3180,1.986]],["body/properties.html",[9,0.388,17,0.69,51,0.024,66,1.544,186,0.021,187,0.021,230,0.924,752,3.764,854,1.968,923,3.163,952,4.724,3174,4.724,3178,4.724,3788,4.724,3790,4.724,3817,5.559,3818,5.559,3819,5.559,3820,5.559,3821,5.559,3822,5.559,3823,5.559,3824,5.559,3825,5.559,3826,5.559,3827,5.559]],["title/miscellaneous/typealiases.html",[3782,1.669,3828,4.215]],["body/miscellaneous/typealiases.html",[16,0.233,50,0.485,51,0.02,53,0.278,66,1.961,94,1.232,96,2.486,110,1.796,125,2.673,128,2.886,169,1.895,186,0.02,187,0.02,189,3.81,190,4.541,204,5.139,233,2.519,344,2.171,524,3.135,616,3.135,682,2.765,683,4.094,684,1.59,710,5.139,736,2.66,737,3.434,746,3.435,786,2.035,852,1.689,889,2.673,998,3.135,1036,2.954,1396,3.81,1719,3.691,1742,5.139,1775,4.311,1784,4.311,2794,4.311,2795,4.311,3782,2.886,3785,4.311,3829,5.073,3830,5.073,3831,6.047,3832,7.063,3833,7.108,3834,6.047,3835,6.047,3836,6.047,3837,6.047,3838,6.047,3839,6.047,3840,6.047,3841,5.073,3842,6.047,3843,5.073,3844,5.073]],["title/miscellaneous/variables.html",[3197,3.165,3782,1.669]],["body/miscellaneous/variables.html",[5,0.313,8,1.638,16,0.267,35,2.116,49,0.819,51,0.024,52,0.314,53,0.245,57,0.917,58,0.793,66,1.115,69,1.714,79,2.14,80,1.172,84,2.561,90,1.719,101,0.929,107,1.366,112,0.582,117,0.625,144,1.422,162,0.665,176,2.974,186,0.017,187,0.017,213,1.005,220,2.285,223,2.482,225,3.413,226,3.413,227,2.116,230,0.582,232,5.127,258,1.423,269,3.63,272,0.907,337,1.611,389,2.285,405,3.016,453,2.719,466,3.23,481,3.413,482,3.413,535,4.442,562,3.925,629,2.097,682,1.837,684,1.821,730,2.482,786,1.611,852,1.337,866,2.116,867,1.513,868,3.016,871,1.611,873,2.974,1016,2.116,1060,2.285,1079,3.23,1439,2.285,1450,3.539,1462,3.539,1522,2.974,1633,4.622,1719,2.116,1743,3.016,1876,3.413,2430,3.925,2632,3.016,2648,3.016,2649,3.413,2668,3.413,2679,3.925,2681,3.413,2682,3.925,2724,4.442,2736,4.442,2737,4.364,2738,3.925,2745,4.442,2879,3.925,3009,3.413,3197,3.016,3297,3.413,3317,4.442,3478,3.413,3519,3.413,3575,3.413,3717,3.413,3718,4.938,3719,4.442,3721,4.442,3722,3.413,3724,3.413,3726,3.413,3730,3.413,3759,3.413,3766,4.442,3778,3.413,3782,2.285,3845,4.017,3846,4.017,3847,5.227,3848,4.017,3849,5.227,3850,4.017,3851,4.017,3852,4.017,3853,4.017,3854,4.017,3855,4.017,3856,4.017,3857,4.017,3858,4.017,3859,4.017,3860,4.017,3861,4.017,3862,4.017,3863,4.017,3864,4.017,3865,4.017,3866,4.017,3867,4.017,3868,4.017,3869,4.017,3870,4.017,3871,4.017,3872,4.017,3873,4.017,3874,4.017,3875,4.017,3876,4.017,3877,4.017,3878,4.017,3879,4.017,3880,4.017,3881,4.017,3882,4.017,3883,5.811,3884,4.017,3885,5.227,3886,4.017,3887,4.017,3888,4.017,3889,4.017,3890,6.155,3891,5.227,3892,5.227,3893,4.017,3894,4.017,3895,4.017,3896,6.155,3897,5.227,3898,4.017,3899,5.227,3900,4.017,3901,4.017,3902,4.017,3903,4.017,3904,5.227,3905,4.017,3906,4.017,3907,4.017,3908,4.017,3909,4.017,3910,4.017,3911,4.017,3912,4.017,3913,4.017,3914,4.017,3915,4.017,3916,4.017,3917,4.017,3918,4.017,3919,4.017,3920,4.017,3921,4.017,3922,4.017,3923,4.017,3924,4.017,3925,4.017,3926,4.017,3927,4.017,3928,4.017,3929,4.017,3930,4.017,3931,4.017]]],"invertedIndex":[["",{"_index":51,"title":{},"body":{"classes/ARManager.html":{},"classes/ActiveVariable.html":{},"interfaces/AnimationPreset.html":{},"classes/CMSObjects.html":{},"classes/ColorManager.html":{},"classes/ColorOptions.html":{},"interfaces/Configuration.html":{},"classes/CoordinateHelper.html":{},"classes/Cut.html":{},"classes/DatGUIMenuUI.html":{},"classes/EffectsManager.html":{},"interfaces/EventDataLoader.html":{},"classes/ExportManager.html":{},"classes/Field.html":{},"classes/InfoLogger.html":{},"classes/LoadingManager.html":{},"classes/PhoenixMenuNode.html":{},"classes/PhoenixMenuUI.html":{},"interfaces/PhoenixUI.html":{},"classes/PresetView.html":{},"classes/PrettySymbols.html":{},"classes/RKHelper.html":{},"classes/RendererManager.html":{},"classes/RungeKutta.html":{},"classes/ScriptLoader.html":{},"classes/SelectionManager.html":{},"classes/State.html":{},"classes/StateManager.html":{},"classes/TracksMaterial.html":{},"classes/TracksMesh.html":{},"classes/URLOptionsManager.html":{},"classes/VRManager.html":{},"interfaces/Window.html":{},"classes/XRManager.html":{},"changelog.html":{},"coverage.html":{},"dependencies.html":{},"miscellaneous/enumerations.html":{},"index.html":{},"modules.html":{},"overview.html":{},"properties.html":{},"miscellaneous/typealiases.html":{},"miscellaneous/variables.html":{}}}],["0",{"_index":295,"title":{},"body":{"interfaces/AnimationPreset.html":{},"classes/ColorOptions.html":{},"classes/CoordinateHelper.html":{},"classes/DatGUIMenuUI.html":{},"classes/LoadingManager.html":{},"classes/PhoenixMenuNode.html":{},"classes/PhoenixMenuUI.html":{},"classes/PresetView.html":{},"classes/RendererManager.html":{},"classes/ScriptLoader.html":{},"classes/SelectionManager.html":{},"classes/State.html":{},"classes/TracksMaterial.html":{},"classes/TracksMesh.html":{},"classes/VRManager.html":{},"classes/XRManager.html":{},"changelog.html":{}}}],["0.0",{"_index":1168,"title":{},"body":{"classes/DatGUIMenuUI.html":{}}}],["0.0002",{"_index":1557,"title":{},"body":{"classes/Field.html":{},"classes/RungeKutta.html":{},"classes/State.html":{}}}],["0.001",{"_index":2595,"title":{},"body":{"classes/TracksMaterial.html":{},"classes/TracksMesh.html":{}}}],["0.01",{"_index":174,"title":{},"body":{"classes/ARManager.html":{},"interfaces/AnimationPreset.html":{},"classes/PhoenixMenuUI.html":{}}}],["0.05",{"_index":1886,"title":{},"body":{"classes/PhoenixMenuUI.html":{}}}],["0.1",{"_index":597,"title":{},"body":{"classes/CMSObjects.html":{},"classes/PhoenixMenuUI.html":{},"classes/XRManager.html":{}}}],["0.149.0",{"_index":3781,"title":{},"body":{"dependencies.html":{}}}],["0.25",{"_index":323,"title":{},"body":{"interfaces/AnimationPreset.html":{}}}],["0.5",{"_index":1559,"title":{},"body":{"classes/Field.html":{},"classes/RungeKutta.html":{},"classes/State.html":{}}}],["0.7",{"_index":610,"title":{},"body":{"classes/CMSObjects.html":{}}}],["0.7.9",{"_index":3774,"title":{},"body":{"dependencies.html":{}}}],["0.75",{"_index":324,"title":{},"body":{"interfaces/AnimationPreset.html":{}}}],["000",{"_index":2412,"title":{},"body":{"classes/StateManager.html":{}}}],["000000",{"_index":1155,"title":{},"body":{"classes/DatGUIMenuUI.html":{}}}],["000ab78",{"_index":3411,"title":{},"body":{"changelog.html":{}}}],["01",{"_index":3190,"title":{},"body":{"changelog.html":{}}}],["02",{"_index":3182,"title":{},"body":{"changelog.html":{}}}],["029d526",{"_index":3657,"title":{},"body":{"changelog.html":{}}}],["03",{"_index":3176,"title":{},"body":{"changelog.html":{}}}],["037af62",{"_index":3373,"title":{},"body":{"changelog.html":{}}}],["03a1de4",{"_index":3559,"title":{},"body":{"changelog.html":{}}}],["04",{"_index":3265,"title":{},"body":{"changelog.html":{}}}],["04dc545",{"_index":3669,"title":{},"body":{"changelog.html":{}}}],["05",{"_index":3262,"title":{},"body":{"changelog.html":{}}}],["05ae1d6",{"_index":3255,"title":{},"body":{"changelog.html":{}}}],["06",{"_index":3246,"title":{},"body":{"changelog.html":{}}}],["07",{"_index":3241,"title":{},"body":{"changelog.html":{}}}],["07/07/2021",{"_index":151,"title":{},"body":{"classes/ARManager.html":{}}}],["07d8633",{"_index":3387,"title":{},"body":{"changelog.html":{}}}],["08",{"_index":3339,"title":{},"body":{"changelog.html":{}}}],["0837334",{"_index":3608,"title":{},"body":{"changelog.html":{}}}],["08c8e00",{"_index":3358,"title":{},"body":{"changelog.html":{}}}],["09",{"_index":3219,"title":{},"body":{"changelog.html":{}}}],["094261c",{"_index":3335,"title":{},"body":{"changelog.html":{}}}],["0980379",{"_index":3682,"title":{},"body":{"changelog.html":{}}}],["0a26fea",{"_index":3679,"title":{},"body":{"changelog.html":{}}}],["0b2dd8a",{"_index":3561,"title":{},"body":{"changelog.html":{}}}],["0b95e5b",{"_index":3497,"title":{},"body":{"changelog.html":{}}}],["0ba5097",{"_index":3328,"title":{},"body":{"changelog.html":{}}}],["0c48b27",{"_index":3276,"title":{},"body":{"changelog.html":{}}}],["0x000000",{"_index":1219,"title":{},"body":{"classes/DatGUIMenuUI.html":{}}}],["0x8c8c8c",{"_index":3803,"title":{},"body":{"index.html":{}}}],["0xafafaf",{"_index":1268,"title":{},"body":{"classes/DatGUIMenuUI.html":{}}}],["0xffffff",{"_index":609,"title":{},"body":{"classes/CMSObjects.html":{},"classes/ColorManager.html":{}}}],["1",{"_index":71,"title":{},"body":{"classes/ARManager.html":{},"interfaces/AnimationPreset.html":{},"classes/ColorOptions.html":{},"classes/CoordinateHelper.html":{},"classes/Cut.html":{},"classes/DatGUIMenuUI.html":{},"classes/EffectsManager.html":{},"classes/Field.html":{},"classes/PhoenixMenuNode.html":{},"classes/PhoenixMenuUI.html":{},"classes/RendererManager.html":{},"classes/RungeKutta.html":{},"classes/SelectionManager.html":{},"classes/State.html":{},"classes/TracksMaterial.html":{},"classes/TracksMesh.html":{},"classes/VRManager.html":{},"interfaces/Window.html":{}}}],["1.0",{"_index":1157,"title":{},"body":{"classes/DatGUIMenuUI.html":{},"classes/TracksMaterial.html":{},"classes/TracksMesh.html":{}}}],["1.0.1",{"_index":3710,"title":{},"body":{"changelog.html":{},"dependencies.html":{}}}],["1.0.2",{"_index":3707,"title":{},"body":{"changelog.html":{}}}],["1.1.0",{"_index":3676,"title":{},"body":{"changelog.html":{}}}],["1.2.0",{"_index":3637,"title":{},"body":{"changelog.html":{}}}],["1.3.0",{"_index":3617,"title":{},"body":{"changelog.html":{}}}],["1.4.0",{"_index":3589,"title":{},"body":{"changelog.html":{}}}],["1.4.1",{"_index":3776,"title":{},"body":{"dependencies.html":{}}}],["1.5.0",{"_index":3562,"title":{},"body":{"changelog.html":{}}}],["1.6.0",{"_index":3490,"title":{},"body":{"changelog.html":{}}}],["1.7.0",{"_index":3482,"title":{},"body":{"changelog.html":{}}}],["1.8.0",{"_index":3481,"title":{},"body":{"changelog.html":{}}}],["1.9.0",{"_index":3480,"title":{},"body":{"changelog.html":{}}}],["1/1",{"_index":3720,"title":{},"body":{"coverage.html":{}}}],["10",{"_index":73,"title":{},"body":{"classes/ARManager.html":{},"interfaces/AnimationPreset.html":{},"classes/ColorOptions.html":{},"classes/DatGUIMenuUI.html":{},"classes/InfoLogger.html":{},"classes/PhoenixMenuUI.html":{},"classes/State.html":{},"changelog.html":{}}}],["10/10",{"_index":3732,"title":{},"body":{"coverage.html":{}}}],["100",{"_index":1657,"title":{},"body":{"classes/LoadingManager.html":{},"coverage.html":{}}}],["1000",{"_index":269,"title":{},"body":{"interfaces/AnimationPreset.html":{},"classes/DatGUIMenuUI.html":{},"classes/Field.html":{},"classes/RungeKutta.html":{},"classes/State.html":{},"miscellaneous/variables.html":{}}}],["10000",{"_index":427,"title":{},"body":{"interfaces/AnimationPreset.html":{}}}],["1007.1048030984678",{"_index":3876,"title":{},"body":{"miscellaneous/variables.html":{}}}],["10244f7",{"_index":3327,"title":{},"body":{"changelog.html":{}}}],["11",{"_index":1124,"title":{},"body":{"classes/DatGUIMenuUI.html":{},"changelog.html":{}}}],["11/11",{"_index":3733,"title":{},"body":{"coverage.html":{}}}],["1100",{"_index":2061,"title":{},"body":{"classes/RKHelper.html":{}}}],["11000",{"_index":447,"title":{},"body":{"interfaces/AnimationPreset.html":{}}}],["12",{"_index":3296,"title":{},"body":{"changelog.html":{}}}],["12/12",{"_index":3752,"title":{},"body":{"coverage.html":{}}}],["124a272",{"_index":3439,"title":{},"body":{"changelog.html":{}}}],["1261358",{"_index":3702,"title":{},"body":{"changelog.html":{}}}],["12814.982506255355",{"_index":3878,"title":{},"body":{"miscellaneous/variables.html":{}}}],["12834.18729094943",{"_index":3856,"title":{},"body":{"miscellaneous/variables.html":{}}}],["12b1754",{"_index":3268,"title":{},"body":{"changelog.html":{}}}],["13",{"_index":3191,"title":{},"body":{"changelog.html":{}}}],["13/13",{"_index":3756,"title":{},"body":{"coverage.html":{}}}],["135.68755273443463",{"_index":3858,"title":{},"body":{"miscellaneous/variables.html":{}}}],["1381.1675900848818",{"_index":3874,"title":{},"body":{"miscellaneous/variables.html":{}}}],["14",{"_index":3211,"title":{},"body":{"changelog.html":{}}}],["14/14",{"_index":3746,"title":{},"body":{"coverage.html":{}}}],["14cdc8f",{"_index":3299,"title":{},"body":{"changelog.html":{}}}],["14d5f3a",{"_index":3332,"title":{},"body":{"changelog.html":{}}}],["14e4cbb",{"_index":3406,"title":{},"body":{"changelog.html":{}}}],["15",{"_index":3293,"title":{},"body":{"changelog.html":{}}}],["15/15",{"_index":3751,"title":{},"body":{"coverage.html":{}}}],["15dd07c",{"_index":3394,"title":{},"body":{"changelog.html":{}}}],["16",{"_index":3263,"title":{},"body":{"changelog.html":{}}}],["16/16",{"_index":3731,"title":{},"body":{"coverage.html":{}}}],["16ea0df",{"_index":3347,"title":{},"body":{"changelog.html":{}}}],["17",{"_index":3247,"title":{},"body":{"changelog.html":{}}}],["1766.7693725879053",{"_index":3875,"title":{},"body":{"miscellaneous/variables.html":{}}}],["1788560",{"_index":3266,"title":{},"body":{"changelog.html":{}}}],["17909eb",{"_index":3698,"title":{},"body":{"changelog.html":{}}}],["18",{"_index":3491,"title":{},"body":{"changelog.html":{}}}],["18.6.4",{"_index":3773,"title":{},"body":{"dependencies.html":{}}}],["18/18",{"_index":3745,"title":{},"body":{"coverage.html":{}}}],["18f8db2",{"_index":3660,"title":{},"body":{"changelog.html":{}}}],["19.874838262525053",{"_index":3864,"title":{},"body":{"miscellaneous/variables.html":{}}}],["19/19",{"_index":3763,"title":{},"body":{"coverage.html":{}}}],["1906976",{"_index":3696,"title":{},"body":{"changelog.html":{}}}],["1975d70",{"_index":3656,"title":{},"body":{"changelog.html":{}}}],["1].foreach((chargevalue",{"_index":813,"title":{},"body":{"classes/ColorOptions.html":{}}}],["1].oncomplete",{"_index":464,"title":{},"body":{"interfaces/AnimationPreset.html":{}}}],["1a01248",{"_index":3420,"title":{},"body":{"changelog.html":{}}}],["1a17e99",{"_index":3458,"title":{},"body":{"changelog.html":{}}}],["1af6ae2",{"_index":3424,"title":{},"body":{"changelog.html":{}}}],["1dd0431",{"_index":3431,"title":{},"body":{"changelog.html":{}}}],["2",{"_index":842,"title":{},"body":{"classes/ColorOptions.html":{},"classes/CoordinateHelper.html":{},"classes/ExportManager.html":{},"classes/Field.html":{},"classes/PrettySymbols.html":{},"classes/RungeKutta.html":{},"classes/SelectionManager.html":{},"classes/State.html":{}}}],["2.0",{"_index":952,"title":{},"body":{"classes/CoordinateHelper.html":{},"properties.html":{}}}],["2.0.0",{"_index":3410,"title":{},"body":{"changelog.html":{}}}],["2.1.0",{"_index":3371,"title":{},"body":{"changelog.html":{}}}],["2.10.0",{"_index":3240,"title":{},"body":{"changelog.html":{}}}],["2.11.0",{"_index":3221,"title":{},"body":{"changelog.html":{}}}],["2.11.1",{"_index":3218,"title":{},"body":{"changelog.html":{}}}],["2.11.2",{"_index":3208,"title":{},"body":{"changelog.html":{}}}],["2.11.4",{"_index":3200,"title":{},"body":{"changelog.html":{}}}],["2.12.0",{"_index":3189,"title":{},"body":{"changelog.html":{}}}],["2.13.0",{"_index":3181,"title":{},"body":{"changelog.html":{}}}],["2.14.0",{"_index":3174,"title":{},"body":{"changelog.html":{},"properties.html":{}}}],["2.2.0",{"_index":3338,"title":{},"body":{"changelog.html":{}}}],["2.3.0",{"_index":3329,"title":{},"body":{"changelog.html":{}}}],["2.3.1",{"_index":3324,"title":{},"body":{"changelog.html":{}}}],["2.3.2",{"_index":3321,"title":{},"body":{"changelog.html":{}}}],["2.4.0",{"_index":3311,"title":{},"body":{"changelog.html":{}}}],["2.5.0",{"_index":3294,"title":{},"body":{"changelog.html":{}}}],["2.5.2",{"_index":3292,"title":{},"body":{"changelog.html":{}}}],["2.6.0",{"_index":3286,"title":{},"body":{"changelog.html":{}}}],["2.7.0",{"_index":3264,"title":{},"body":{"changelog.html":{}}}],["2.8.0",{"_index":3261,"title":{},"body":{"changelog.html":{}}}],["2.9.0",{"_index":3245,"title":{},"body":{"changelog.html":{}}}],["2/2",{"_index":3715,"title":{},"body":{"coverage.html":{}}}],["20",{"_index":1870,"title":{},"body":{"classes/PhoenixMenuUI.html":{},"classes/VRManager.html":{},"changelog.html":{}}}],["20/06/2021",{"_index":2811,"title":{},"body":{"classes/VRManager.html":{}}}],["20/20",{"_index":3767,"title":{},"body":{"coverage.html":{}}}],["2000",{"_index":535,"title":{},"body":{"interfaces/AnimationPreset.html":{},"miscellaneous/variables.html":{}}}],["2020",{"_index":3638,"title":{},"body":{"changelog.html":{}}}],["2021",{"_index":3295,"title":{},"body":{"changelog.html":{}}}],["2022",{"_index":3201,"title":{},"body":{"changelog.html":{}}}],["2023",{"_index":3175,"title":{},"body":{"changelog.html":{}}}],["20ef288",{"_index":3445,"title":{},"body":{"changelog.html":{}}}],["21",{"_index":3242,"title":{},"body":{"changelog.html":{}}}],["21/21",{"_index":3748,"title":{},"body":{"coverage.html":{}}}],["22",{"_index":3177,"title":{},"body":{"changelog.html":{}}}],["22/22",{"_index":3765,"title":{},"body":{"coverage.html":{}}}],["2219a3e",{"_index":3603,"title":{},"body":{"changelog.html":{}}}],["22891.902734328327",{"_index":3880,"title":{},"body":{"miscellaneous/variables.html":{}}}],["22a1ec8",{"_index":3662,"title":{},"body":{"changelog.html":{}}}],["23/23",{"_index":3761,"title":{},"body":{"coverage.html":{}}}],["234.03507981484574",{"_index":3867,"title":{},"body":{"miscellaneous/variables.html":{}}}],["236bdf4",{"_index":3501,"title":{},"body":{"changelog.html":{}}}],["2371f75",{"_index":3469,"title":{},"body":{"changelog.html":{}}}],["24",{"_index":302,"title":{},"body":{"interfaces/AnimationPreset.html":{},"changelog.html":{}}}],["24/24",{"_index":3764,"title":{},"body":{"coverage.html":{}}}],["24ecd77",{"_index":3217,"title":{},"body":{"changelog.html":{}}}],["25.884223757326",{"_index":3860,"title":{},"body":{"miscellaneous/variables.html":{}}}],["2516.987185037266",{"_index":3879,"title":{},"body":{"miscellaneous/variables.html":{}}}],["257",{"_index":3522,"title":{},"body":{"changelog.html":{}}}],["25b2a9d",{"_index":3665,"title":{},"body":{"changelog.html":{}}}],["263.3640855132258",{"_index":3863,"title":{},"body":{"miscellaneous/variables.html":{}}}],["26444f1",{"_index":3300,"title":{},"body":{"changelog.html":{}}}],["266af04",{"_index":3568,"title":{},"body":{"changelog.html":{}}}],["2681.277288705242",{"_index":3869,"title":{},"body":{"miscellaneous/variables.html":{}}}],["26eff0e",{"_index":3362,"title":{},"body":{"changelog.html":{}}}],["27",{"_index":3202,"title":{},"body":{"changelog.html":{}}}],["270.10019006776236",{"_index":3861,"title":{},"body":{"miscellaneous/variables.html":{}}}],["2700aaf",{"_index":3391,"title":{},"body":{"changelog.html":{}}}],["28",{"_index":3287,"title":{},"body":{"changelog.html":{}}}],["28/06/2021",{"_index":141,"title":{},"body":{"classes/ARManager.html":{},"classes/XRManager.html":{}}}],["28/28",{"_index":3743,"title":{},"body":{"coverage.html":{}}}],["289",{"_index":3418,"title":{},"body":{"changelog.html":{}}}],["29",{"_index":3220,"title":{},"body":{"changelog.html":{}}}],["29/06/2021",{"_index":3134,"title":{},"body":{"classes/XRManager.html":{}}}],["29/08/2020",{"_index":2810,"title":{},"body":{"classes/VRManager.html":{}}}],["29093a2",{"_index":3553,"title":{},"body":{"changelog.html":{}}}],["2933.619479808285",{"_index":3868,"title":{},"body":{"miscellaneous/variables.html":{}}}],["29beae7",{"_index":3199,"title":{},"body":{"changelog.html":{}}}],["2c97f5c",{"_index":3446,"title":{},"body":{"changelog.html":{}}}],["2e16371",{"_index":3551,"title":{},"body":{"changelog.html":{}}}],["2e52c22",{"_index":3462,"title":{},"body":{"changelog.html":{}}}],["2fa310f",{"_index":3586,"title":{},"body":{"changelog.html":{}}}],["2rem",{"_index":1123,"title":{},"body":{"classes/DatGUIMenuUI.html":{}}}],["3",{"_index":304,"title":{},"body":{"interfaces/AnimationPreset.html":{},"classes/CMSObjects.html":{},"classes/SelectionManager.html":{},"classes/TracksMaterial.html":{},"classes/TracksMesh.html":{}}}],["3.0",{"_index":972,"title":{},"body":{"classes/CoordinateHelper.html":{}}}],["3.10.1",{"_index":3779,"title":{},"body":{"dependencies.html":{}}}],["3.3333",{"_index":2389,"title":{},"body":{"classes/State.html":{}}}],["3/3",{"_index":3728,"title":{},"body":{"coverage.html":{}}}],["30",{"_index":516,"title":{},"body":{"interfaces/AnimationPreset.html":{},"classes/VRManager.html":{}}}],["300",{"_index":497,"title":{},"body":{"interfaces/AnimationPreset.html":{}}}],["3000",{"_index":405,"title":{},"body":{"interfaces/AnimationPreset.html":{},"classes/RKHelper.html":{},"miscellaneous/variables.html":{}}}],["3017ca9",{"_index":3385,"title":{},"body":{"changelog.html":{}}}],["303187a",{"_index":3435,"title":{},"body":{"changelog.html":{}}}],["3041166",{"_index":3473,"title":{},"body":{"changelog.html":{}}}],["30b0383",{"_index":3666,"title":{},"body":{"changelog.html":{}}}],["30b5160",{"_index":3549,"title":{},"body":{"changelog.html":{}}}],["312.02688693297375",{"_index":3859,"title":{},"body":{"miscellaneous/variables.html":{}}}],["318.16541790248885",{"_index":3865,"title":{},"body":{"miscellaneous/variables.html":{}}}],["32",{"_index":485,"title":{},"body":{"interfaces/AnimationPreset.html":{}}}],["3255a65",{"_index":3271,"title":{},"body":{"changelog.html":{}}}],["33/33",{"_index":3735,"title":{},"body":{"coverage.html":{}}}],["336",{"_index":3351,"title":{},"body":{"changelog.html":{}}}],["3475836",{"_index":3592,"title":{},"body":{"changelog.html":{}}}],["34a783c",{"_index":3306,"title":{},"body":{"changelog.html":{}}}],["34d9b2c",{"_index":3359,"title":{},"body":{"changelog.html":{}}}],["3500",{"_index":3862,"title":{},"body":{"miscellaneous/variables.html":{}}}],["359d353",{"_index":3570,"title":{},"body":{"changelog.html":{}}}],["36/36",{"_index":3755,"title":{},"body":{"coverage.html":{}}}],["364",{"_index":3308,"title":{},"body":{"changelog.html":{}}}],["36486b8",{"_index":3363,"title":{},"body":{"changelog.html":{}}}],["3756330",{"_index":3606,"title":{},"body":{"changelog.html":{}}}],["37df19f",{"_index":3641,"title":{},"body":{"changelog.html":{}}}],["3839578",{"_index":3472,"title":{},"body":{"changelog.html":{}}}],["3918159",{"_index":3684,"title":{},"body":{"changelog.html":{}}}],["39241a4",{"_index":3344,"title":{},"body":{"changelog.html":{}}}],["399ac77",{"_index":3709,"title":{},"body":{"changelog.html":{}}}],["3b1991c",{"_index":3566,"title":{},"body":{"changelog.html":{}}}],["3ce675f",{"_index":3600,"title":{},"body":{"changelog.html":{}}}],["3d",{"_index":763,"title":{},"body":{"classes/ColorOptions.html":{},"interfaces/EventDataLoader.html":{},"classes/Field.html":{},"classes/RungeKutta.html":{},"classes/SelectionManager.html":{},"classes/State.html":{},"interfaces/Window.html":{},"changelog.html":{}}}],["3d1f91c",{"_index":3236,"title":{},"body":{"changelog.html":{}}}],["3daabc5",{"_index":3381,"title":{},"body":{"changelog.html":{}}}],["3e5d80d",{"_index":3421,"title":{},"body":{"changelog.html":{}}}],["3f6367f",{"_index":3602,"title":{},"body":{"changelog.html":{}}}],["4/4",{"_index":3727,"title":{},"body":{"coverage.html":{}}}],["40/40",{"_index":3738,"title":{},"body":{"coverage.html":{}}}],["4000",{"_index":1070,"title":{},"body":{"classes/DatGUIMenuUI.html":{}}}],["40bbba0",{"_index":3512,"title":{},"body":{"changelog.html":{}}}],["42/42",{"_index":3762,"title":{},"body":{"coverage.html":{}}}],["4262a1b",{"_index":3672,"title":{},"body":{"changelog.html":{}}}],["43",{"_index":3816,"title":{},"body":{"overview.html":{}}}],["43/43",{"_index":3741,"title":{},"body":{"coverage.html":{}}}],["448eb4f",{"_index":3196,"title":{},"body":{"changelog.html":{}}}],["455f536",{"_index":3530,"title":{},"body":{"changelog.html":{}}}],["45a0123",{"_index":3556,"title":{},"body":{"changelog.html":{}}}],["4603dbc",{"_index":3345,"title":{},"body":{"changelog.html":{}}}],["46910.7848593543",{"_index":3855,"title":{},"body":{"miscellaneous/variables.html":{}}}],["4698ea4",{"_index":3337,"title":{},"body":{"changelog.html":{}}}],["46b8aee",{"_index":3368,"title":{},"body":{"changelog.html":{}}}],["473a39c",{"_index":3282,"title":{},"body":{"changelog.html":{}}}],["4764196",{"_index":3643,"title":{},"body":{"changelog.html":{}}}],["477845f",{"_index":3188,"title":{},"body":{"changelog.html":{}}}],["4791f53",{"_index":3234,"title":{},"body":{"changelog.html":{}}}],["48130b2",{"_index":3674,"title":{},"body":{"changelog.html":{}}}],["4acca1a",{"_index":3476,"title":{},"body":{"changelog.html":{}}}],["4b10452",{"_index":3675,"title":{},"body":{"changelog.html":{}}}],["4c5fac9",{"_index":3269,"title":{},"body":{"changelog.html":{}}}],["4e41f72",{"_index":3315,"title":{},"body":{"changelog.html":{}}}],["4f80bd6",{"_index":3591,"title":{},"body":{"changelog.html":{}}}],["5",{"_index":2592,"title":{},"body":{"classes/TracksMaterial.html":{},"classes/TracksMesh.html":{},"overview.html":{}}}],["5/5",{"_index":3725,"title":{},"body":{"coverage.html":{}}}],["50",{"_index":2846,"title":{},"body":{"classes/VRManager.html":{}}}],["500",{"_index":300,"title":{},"body":{"interfaces/AnimationPreset.html":{}}}],["5000",{"_index":481,"title":{},"body":{"interfaces/AnimationPreset.html":{},"miscellaneous/variables.html":{}}}],["50000",{"_index":741,"title":{},"body":{"classes/ColorOptions.html":{}}}],["50c2584",{"_index":3515,"title":{},"body":{"changelog.html":{}}}],["50fc5f7",{"_index":3390,"title":{},"body":{"changelog.html":{}}}],["5139c6e",{"_index":3627,"title":{},"body":{"changelog.html":{}}}],["5264.228603228927",{"_index":3854,"title":{},"body":{"miscellaneous/variables.html":{}}}],["5283e9a",{"_index":3685,"title":{},"body":{"changelog.html":{}}}],["5334996",{"_index":3386,"title":{},"body":{"changelog.html":{}}}],["5389282",{"_index":3545,"title":{},"body":{"changelog.html":{}}}],["545c956",{"_index":3289,"title":{},"body":{"changelog.html":{}}}],["5518a3e",{"_index":3238,"title":{},"body":{"changelog.html":{}}}],["5534.140362338047",{"_index":3866,"title":{},"body":{"miscellaneous/variables.html":{}}}],["55cad7c",{"_index":3318,"title":{},"body":{"changelog.html":{}}}],["5628.5248735111745",{"_index":3871,"title":{},"body":{"miscellaneous/variables.html":{}}}],["56c6eff",{"_index":3444,"title":{},"body":{"changelog.html":{}}}],["56f94f0",{"_index":3525,"title":{},"body":{"changelog.html":{}}}],["56ff275",{"_index":3558,"title":{},"body":{"changelog.html":{}}}],["5743adc",{"_index":3554,"title":{},"body":{"changelog.html":{}}}],["57e438f",{"_index":3523,"title":{},"body":{"changelog.html":{}}}],["58/58",{"_index":3714,"title":{},"body":{"coverage.html":{}}}],["5894cac",{"_index":3396,"title":{},"body":{"changelog.html":{}}}],["5928.901341784575",{"_index":3877,"title":{},"body":{"miscellaneous/variables.html":{}}}],["595d9e5",{"_index":3466,"title":{},"body":{"changelog.html":{}}}],["5a562ab",{"_index":3521,"title":{},"body":{"changelog.html":{}}}],["5a8fe9f",{"_index":3479,"title":{},"body":{"changelog.html":{}}}],["5bdc562",{"_index":3485,"title":{},"body":{"changelog.html":{}}}],["5ea04f1",{"_index":3584,"title":{},"body":{"changelog.html":{}}}],["5f0f942",{"_index":3670,"title":{},"body":{"changelog.html":{}}}],["6",{"_index":354,"title":{},"body":{"interfaces/AnimationPreset.html":{},"classes/Field.html":{},"classes/RungeKutta.html":{},"classes/State.html":{}}}],["6/6",{"_index":3716,"title":{},"body":{"coverage.html":{}}}],["6000",{"_index":3881,"title":{},"body":{"miscellaneous/variables.html":{}}}],["60269f7",{"_index":3615,"title":{},"body":{"changelog.html":{}}}],["6062.586283740076",{"_index":3872,"title":{},"body":{"miscellaneous/variables.html":{}}}],["6085f50",{"_index":3441,"title":{},"body":{"changelog.html":{}}}],["608f529",{"_index":3323,"title":{},"body":{"changelog.html":{}}}],["612205c",{"_index":3703,"title":{},"body":{"changelog.html":{}}}],["62ae417",{"_index":3375,"title":{},"body":{"changelog.html":{}}}],["62bf178",{"_index":3248,"title":{},"body":{"changelog.html":{}}}],["646.5795158318147",{"_index":3870,"title":{},"body":{"miscellaneous/variables.html":{}}}],["6486982",{"_index":3546,"title":{},"body":{"changelog.html":{}}}],["65e657b",{"_index":3251,"title":{},"body":{"changelog.html":{}}}],["66388.95051168812",{"_index":3853,"title":{},"body":{"miscellaneous/variables.html":{}}}],["66cbbc0",{"_index":3504,"title":{},"body":{"changelog.html":{}}}],["677.7571205763458",{"_index":3857,"title":{},"body":{"miscellaneous/variables.html":{}}}],["68/68",{"_index":3760,"title":{},"body":{"coverage.html":{}}}],["689da29",{"_index":3414,"title":{},"body":{"changelog.html":{}}}],["68cd7ad",{"_index":3547,"title":{},"body":{"changelog.html":{}}}],["68f3d45",{"_index":3456,"title":{},"body":{"changelog.html":{}}}],["6943f79",{"_index":3635,"title":{},"body":{"changelog.html":{}}}],["69544e6",{"_index":3225,"title":{},"body":{"changelog.html":{}}}],["69d3f75",{"_index":3667,"title":{},"body":{"changelog.html":{}}}],["6a7e82f",{"_index":3305,"title":{},"body":{"changelog.html":{}}}],["6a834e8",{"_index":3507,"title":{},"body":{"changelog.html":{}}}],["6ace2f6",{"_index":3244,"title":{},"body":{"changelog.html":{}}}],["6c92e33",{"_index":3226,"title":{},"body":{"changelog.html":{}}}],["6cd5d53",{"_index":3452,"title":{},"body":{"changelog.html":{}}}],["6dbd797",{"_index":3423,"title":{},"body":{"changelog.html":{}}}],["6e919e1",{"_index":3447,"title":{},"body":{"changelog.html":{}}}],["6ef17d0",{"_index":3526,"title":{},"body":{"changelog.html":{}}}],["7",{"_index":3237,"title":{},"body":{"changelog.html":{}}}],["7.20.12",{"_index":3772,"title":{},"body":{"dependencies.html":{}}}],["7.3.0",{"_index":3777,"title":{},"body":{"dependencies.html":{}}}],["7/7",{"_index":3723,"title":{},"body":{"coverage.html":{}}}],["717304e",{"_index":3374,"title":{},"body":{"changelog.html":{}}}],["73b7c27",{"_index":3680,"title":{},"body":{"changelog.html":{}}}],["7528ee0",{"_index":3508,"title":{},"body":{"changelog.html":{}}}],["75f829a",{"_index":3320,"title":{},"body":{"changelog.html":{}}}],["7632a18",{"_index":3531,"title":{},"body":{"changelog.html":{}}}],["789da8b",{"_index":3634,"title":{},"body":{"changelog.html":{}}}],["790.5876682946184",{"_index":3873,"title":{},"body":{"miscellaneous/variables.html":{}}}],["79e6d7c",{"_index":3614,"title":{},"body":{"changelog.html":{}}}],["7a42b65",{"_index":3285,"title":{},"body":{"changelog.html":{}}}],["7b839e3",{"_index":3378,"title":{},"body":{"changelog.html":{}}}],["7bcd7ba",{"_index":3573,"title":{},"body":{"changelog.html":{}}}],["7d1ca22",{"_index":3706,"title":{},"body":{"changelog.html":{}}}],["7d2eb64",{"_index":3470,"title":{},"body":{"changelog.html":{}}}],["7d606b2",{"_index":3636,"title":{},"body":{"changelog.html":{}}}],["7d90d72",{"_index":3518,"title":{},"body":{"changelog.html":{}}}],["7e0870b",{"_index":3249,"title":{},"body":{"changelog.html":{}}}],["7e36462",{"_index":3260,"title":{},"body":{"changelog.html":{}}}],["7e9c733",{"_index":3348,"title":{},"body":{"changelog.html":{}}}],["7f35fdb",{"_index":3342,"title":{},"body":{"changelog.html":{}}}],["8",{"_index":451,"title":{},"body":{"interfaces/AnimationPreset.html":{},"classes/Field.html":{},"classes/RungeKutta.html":{},"classes/State.html":{}}}],["8/8",{"_index":3739,"title":{},"body":{"coverage.html":{}}}],["854e543",{"_index":3532,"title":{},"body":{"changelog.html":{}}}],["8559830",{"_index":3475,"title":{},"body":{"changelog.html":{}}}],["85d4a14",{"_index":3527,"title":{},"body":{"changelog.html":{}}}],["867d28a",{"_index":3366,"title":{},"body":{"changelog.html":{}}}],["872f708",{"_index":3468,"title":{},"body":{"changelog.html":{}}}],["8a0c0b1",{"_index":3443,"title":{},"body":{"changelog.html":{}}}],["8b994a7",{"_index":3426,"title":{},"body":{"changelog.html":{}}}],["8ba94e7",{"_index":3628,"title":{},"body":{"changelog.html":{}}}],["8cbcaa5",{"_index":3565,"title":{},"body":{"changelog.html":{}}}],["8d7b160",{"_index":3605,"title":{},"body":{"changelog.html":{}}}],["8e2eff4",{"_index":3560,"title":{},"body":{"changelog.html":{}}}],["8e7396f",{"_index":3403,"title":{},"body":{"changelog.html":{}}}],["8f3e8e1",{"_index":3646,"title":{},"body":{"changelog.html":{}}}],["9/9",{"_index":3729,"title":{},"body":{"coverage.html":{}}}],["90aea3c",{"_index":3451,"title":{},"body":{"changelog.html":{}}}],["9222e04",{"_index":3467,"title":{},"body":{"changelog.html":{}}}],["9276ef9",{"_index":3257,"title":{},"body":{"changelog.html":{}}}],["9474565",{"_index":3671,"title":{},"body":{"changelog.html":{}}}],["947f6bf",{"_index":3664,"title":{},"body":{"changelog.html":{}}}],["9540af5",{"_index":3576,"title":{},"body":{"changelog.html":{}}}],["98c7055",{"_index":3334,"title":{},"body":{"changelog.html":{}}}],["9908cc9",{"_index":3459,"title":{},"body":{"changelog.html":{}}}],["9a6c243",{"_index":3364,"title":{},"body":{"changelog.html":{}}}],["9a79692",{"_index":3474,"title":{},"body":{"changelog.html":{}}}],["9a88331",{"_index":3360,"title":{},"body":{"changelog.html":{}}}],["9bc48e0",{"_index":3267,"title":{},"body":{"changelog.html":{}}}],["9d109e5",{"_index":3290,"title":{},"body":{"changelog.html":{}}}],["9e3dc20",{"_index":3705,"title":{},"body":{"changelog.html":{}}}],["9eb21f5",{"_index":3690,"title":{},"body":{"changelog.html":{}}}],["9efd9ca",{"_index":3695,"title":{},"body":{"changelog.html":{}}}],["9f4cf7c",{"_index":3350,"title":{},"body":{"changelog.html":{}}}],["9ffb5e2",{"_index":3193,"title":{},"body":{"changelog.html":{}}}],["_attributes",{"_index":2483,"title":{},"body":{"classes/TracksMaterial.html":{},"classes/TracksMesh.html":{}}}],["_menusubfolder",{"_index":1089,"title":{},"body":{"classes/DatGUIMenuUI.html":{}}}],["a411631",{"_index":3454,"title":{},"body":{"changelog.html":{}}}],["a474af2",{"_index":3583,"title":{},"body":{"changelog.html":{}}}],["a4e8aaa",{"_index":3280,"title":{},"body":{"changelog.html":{}}}],["a5481e1",{"_index":3408,"title":{},"body":{"changelog.html":{}}}],["a54d302",{"_index":3239,"title":{},"body":{"changelog.html":{}}}],["a5eaa34",{"_index":3370,"title":{},"body":{"changelog.html":{}}}],["a6a1c19",{"_index":3640,"title":{},"body":{"changelog.html":{}}}],["a821e42",{"_index":3377,"title":{},"body":{"changelog.html":{}}}],["a8336ae",{"_index":3270,"title":{},"body":{"changelog.html":{}}}],["a8a8a8",{"_index":1255,"title":{},"body":{"classes/DatGUIMenuUI.html":{},"classes/PhoenixMenuUI.html":{}}}],["a8f8353",{"_index":3567,"title":{},"body":{"changelog.html":{}}}],["aaed8f5",{"_index":3278,"title":{},"body":{"changelog.html":{}}}],["ab8feb4",{"_index":3649,"title":{},"body":{"changelog.html":{}}}],["ability",{"_index":3093,"title":{},"body":{"interfaces/Window.html":{},"changelog.html":{}}}],["above",{"_index":2758,"title":{},"body":{"classes/URLOptionsManager.html":{}}}],["absolute",{"_index":1122,"title":{},"body":{"classes/DatGUIMenuUI.html":{}}}],["ac0c4f1",{"_index":3571,"title":{},"body":{"changelog.html":{}}}],["acc",{"_index":1666,"title":{},"body":{"classes/LoadingManager.html":{}}}],["access",{"_index":3076,"title":{},"body":{"interfaces/Window.html":{}}}],["active",{"_index":93,"title":{},"body":{"classes/ARManager.html":{},"classes/ActiveVariable.html":{},"interfaces/AnimationPreset.html":{},"classes/Cut.html":{},"classes/PhoenixMenuNode.html":{},"classes/StateManager.html":{},"classes/VRManager.html":{},"classes/XRManager.html":{},"changelog.html":{}}}],["activecamera",{"_index":259,"title":{},"body":{"interfaces/AnimationPreset.html":{},"classes/StateManager.html":{}}}],["activeobject",{"_index":2235,"title":{},"body":{"classes/SelectionManager.html":{}}}],["activevariable",{"_index":188,"title":{"classes/ActiveVariable.html":{}},"body":{"classes/ActiveVariable.html":{},"classes/SelectionManager.html":{},"classes/StateManager.html":{},"interfaces/Window.html":{},"coverage.html":{}}}],["activevariable(0",{"_index":2415,"title":{},"body":{"classes/StateManager.html":{}}}],["activevariable(false",{"_index":2410,"title":{},"body":{"classes/StateManager.html":{}}}],["actual",{"_index":351,"title":{},"body":{"interfaces/AnimationPreset.html":{},"classes/PhoenixMenuUI.html":{}}}],["add",{"_index":708,"title":{},"body":{"classes/ColorOptions.html":{},"classes/DatGUIMenuUI.html":{},"interfaces/EventDataLoader.html":{},"classes/InfoLogger.html":{},"classes/LoadingManager.html":{},"classes/PhoenixMenuNode.html":{},"classes/PhoenixMenuUI.html":{},"interfaces/PhoenixUI.html":{},"classes/PrettySymbols.html":{},"classes/RendererManager.html":{},"classes/ScriptLoader.html":{},"classes/SelectionManager.html":{},"classes/StateManager.html":{},"classes/TracksMaterial.html":{},"classes/TracksMesh.html":{},"interfaces/Window.html":{},"changelog.html":{},"index.html":{}}}],["add('could",{"_index":2721,"title":{},"body":{"classes/URLOptionsManager.html":{}}}],["add(cut",{"_index":1238,"title":{},"body":{"classes/DatGUIMenuUI.html":{}}}],["add(data",{"_index":1604,"title":{},"body":{"classes/InfoLogger.html":{}}}],["add(k1.clone().multiplyscalar(h2",{"_index":1531,"title":{},"body":{"classes/Field.html":{},"classes/RungeKutta.html":{},"classes/State.html":{}}}],["add(k1.clone().multiplyscalar(half_h",{"_index":1534,"title":{},"body":{"classes/Field.html":{},"classes/RungeKutta.html":{},"classes/State.html":{}}}],["add(k2",{"_index":1564,"title":{},"body":{"classes/Field.html":{},"classes/RungeKutta.html":{},"classes/State.html":{}}}],["add(k2.clone().multiplyscalar(2",{"_index":1568,"title":{},"body":{"classes/Field.html":{},"classes/RungeKutta.html":{},"classes/State.html":{}}}],["add(k2.clone().multiplyscalar(half_h",{"_index":1538,"title":{},"body":{"classes/Field.html":{},"classes/RungeKutta.html":{},"classes/State.html":{}}}],["add(k3",{"_index":1565,"title":{},"body":{"classes/Field.html":{},"classes/RungeKutta.html":{},"classes/State.html":{}}}],["add(k3.clone().multiplyscalar(2",{"_index":1569,"title":{},"body":{"classes/Field.html":{},"classes/RungeKutta.html":{},"classes/State.html":{}}}],["add(k3.clone().multiplyscalar(h",{"_index":1544,"title":{},"body":{"classes/Field.html":{},"classes/RungeKutta.html":{},"classes/State.html":{}}}],["add(k3.clone().multiplyscalar(h2",{"_index":1541,"title":{},"body":{"classes/Field.html":{},"classes/RungeKutta.html":{},"classes/State.html":{}}}],["add(k4",{"_index":1570,"title":{},"body":{"classes/Field.html":{},"classes/RungeKutta.html":{},"classes/State.html":{}}}],["add(state.dir.clone().multiplyscalar(h",{"_index":1540,"title":{},"body":{"classes/Field.html":{},"classes/RungeKutta.html":{},"classes/State.html":{}}}],["add(state.dir.clone().multiplyscalar(half_h",{"_index":1530,"title":{},"body":{"classes/Field.html":{},"classes/RungeKutta.html":{},"classes/State.html":{}}}],["add(this.guiparameters.eventdata",{"_index":1205,"title":{},"body":{"classes/DatGUIMenuUI.html":{}}}],["add(this.guiparameters.geometries",{"_index":1140,"title":{},"body":{"classes/DatGUIMenuUI.html":{}}}],["add(this.guiparameters.labels",{"_index":1258,"title":{},"body":{"classes/DatGUIMenuUI.html":{}}}],["add(this.guiparameters[collectionname",{"_index":1226,"title":{},"body":{"classes/DatGUIMenuUI.html":{}}}],["add(this.guiparameters[labelid",{"_index":1272,"title":{},"body":{"classes/DatGUIMenuUI.html":{}}}],["add(this.guiparameters[name",{"_index":1167,"title":{},"body":{"classes/DatGUIMenuUI.html":{}}}],["addchild",{"_index":1688,"title":{},"body":{"classes/PhoenixMenuNode.html":{}}}],["addchild(name",{"_index":1714,"title":{},"body":{"classes/PhoenixMenuNode.html":{}}}],["addcollection",{"_index":1046,"title":{},"body":{"classes/DatGUIMenuUI.html":{},"classes/PhoenixMenuUI.html":{},"interfaces/PhoenixUI.html":{}}}],["addcollection(eventdatatype",{"_index":1075,"title":{},"body":{"classes/DatGUIMenuUI.html":{},"classes/PhoenixMenuUI.html":{},"interfaces/PhoenixUI.html":{}}}],["addcolor(this.guiparameters.labels",{"_index":1263,"title":{},"body":{"classes/DatGUIMenuUI.html":{}}}],["addcolor(this.guiparameters[collectionname",{"_index":1230,"title":{},"body":{"classes/DatGUIMenuUI.html":{}}}],["addcolor(this.guiparameters[labelid",{"_index":1278,"title":{},"body":{"classes/DatGUIMenuUI.html":{}}}],["addcolor(this.guiparameters[name",{"_index":1163,"title":{},"body":{"classes/DatGUIMenuUI.html":{}}}],["addconfig",{"_index":1689,"title":{},"body":{"classes/PhoenixMenuNode.html":{}}}],["addconfig('button",{"_index":1887,"title":{},"body":{"classes/PhoenixMenuUI.html":{},"classes/StateManager.html":{}}}],["addconfig('checkbox",{"_index":1866,"title":{},"body":{"classes/PhoenixMenuUI.html":{}}}],["addconfig('color",{"_index":1884,"title":{},"body":{"classes/PhoenixMenuUI.html":{}}}],["addconfig('label",{"_index":1909,"title":{},"body":{"classes/PhoenixMenuUI.html":{}}}],["addconfig('slider",{"_index":1868,"title":{},"body":{"classes/PhoenixMenuUI.html":{}}}],["addconfig(type",{"_index":1716,"title":{},"body":{"classes/PhoenixMenuNode.html":{}}}],["addcutoptions",{"_index":1837,"title":{},"body":{"classes/PhoenixMenuUI.html":{}}}],["addcutoptions(collectionnode",{"_index":1845,"title":{},"body":{"classes/PhoenixMenuUI.html":{}}}],["adddrawoptions",{"_index":1838,"title":{},"body":{"classes/PhoenixMenuUI.html":{}}}],["adddrawoptions(collectionnode",{"_index":1848,"title":{},"body":{"classes/PhoenixMenuUI.html":{}}}],["added",{"_index":1080,"title":{},"body":{"classes/DatGUIMenuUI.html":{},"classes/LoadingManager.html":{},"classes/PhoenixMenuUI.html":{},"interfaces/PhoenixUI.html":{},"classes/RendererManager.html":{},"interfaces/Window.html":{}}}],["addeventdatafolder",{"_index":1047,"title":{},"body":{"classes/DatGUIMenuUI.html":{},"classes/PhoenixMenuUI.html":{},"interfaces/PhoenixUI.html":{}}}],["addeventdatatypefolder",{"_index":1048,"title":{},"body":{"classes/DatGUIMenuUI.html":{},"classes/PhoenixMenuUI.html":{},"interfaces/PhoenixUI.html":{}}}],["addeventdatatypefolder(typename",{"_index":1085,"title":{},"body":{"classes/DatGUIMenuUI.html":{},"classes/PhoenixMenuUI.html":{},"interfaces/PhoenixUI.html":{}}}],["addeventlistener('click",{"_index":2316,"title":{},"body":{"classes/SelectionManager.html":{}}}],["addeventlistener('mousemove",{"_index":2314,"title":{},"body":{"classes/SelectionManager.html":{}}}],["addeventlistener('touchstart",{"_index":2318,"title":{},"body":{"classes/SelectionManager.html":{}}}],["addface3",{"_index":566,"title":{},"body":{"classes/CMSObjects.html":{}}}],["addface3('back_1",{"_index":579,"title":{},"body":{"classes/CMSObjects.html":{}}}],["addface3('back_3",{"_index":582,"title":{},"body":{"classes/CMSObjects.html":{}}}],["addface3('back_4",{"_index":587,"title":{},"body":{"classes/CMSObjects.html":{}}}],["addface3('front_1",{"_index":572,"title":{},"body":{"classes/CMSObjects.html":{}}}],["addface3('front_2",{"_index":585,"title":{},"body":{"classes/CMSObjects.html":{}}}],["addface3('front_3",{"_index":575,"title":{},"body":{"classes/CMSObjects.html":{}}}],["addgeometry",{"_index":1049,"title":{},"body":{"classes/DatGUIMenuUI.html":{},"classes/PhoenixMenuUI.html":{},"interfaces/PhoenixUI.html":{}}}],["addgeometry(object",{"_index":1088,"title":{},"body":{"classes/DatGUIMenuUI.html":{},"classes/PhoenixMenuUI.html":{},"interfaces/PhoenixUI.html":{}}}],["addgeometryfolder",{"_index":1050,"title":{},"body":{"classes/DatGUIMenuUI.html":{},"classes/PhoenixMenuUI.html":{},"interfaces/PhoenixUI.html":{}}}],["adding",{"_index":125,"title":{},"body":{"classes/ARManager.html":{},"interfaces/EventDataLoader.html":{},"classes/VRManager.html":{},"interfaces/Window.html":{},"classes/XRManager.html":{},"changelog.html":{},"miscellaneous/typealiases.html":{}}}],["addlabel",{"_index":1051,"title":{},"body":{"classes/DatGUIMenuUI.html":{},"classes/PhoenixMenuUI.html":{},"interfaces/PhoenixUI.html":{}}}],["addlabel(labelid",{"_index":1095,"title":{},"body":{"classes/DatGUIMenuUI.html":{},"classes/PhoenixMenuUI.html":{},"interfaces/PhoenixUI.html":{}}}],["addlabelsfolder",{"_index":1052,"title":{},"body":{"classes/DatGUIMenuUI.html":{},"classes/PhoenixMenuUI.html":{},"interfaces/PhoenixUI.html":{}}}],["addlabelsfolder(configfunctions",{"_index":1102,"title":{},"body":{"classes/DatGUIMenuUI.html":{},"classes/PhoenixMenuUI.html":{},"interfaces/PhoenixUI.html":{}}}],["addlabeltoeventobject",{"_index":1373,"title":{},"body":{"interfaces/EventDataLoader.html":{}}}],["addlabeltoeventobject(label",{"_index":1380,"title":{},"body":{"interfaces/EventDataLoader.html":{}}}],["addlabeltoobject",{"_index":3114,"title":{},"body":{"interfaces/Window.html":{}}}],["addloadableitem",{"_index":1623,"title":{},"body":{"classes/LoadingManager.html":{}}}],["addloadableitem(id",{"_index":1635,"title":{},"body":{"classes/LoadingManager.html":{}}}],["addloadlistener",{"_index":1624,"title":{},"body":{"classes/LoadingManager.html":{}}}],["addloadlistener(callback",{"_index":1637,"title":{},"body":{"classes/LoadingManager.html":{}}}],["addloadlistenerwithcheck",{"_index":1625,"title":{},"body":{"classes/LoadingManager.html":{}}}],["addloadlistenerwithcheck(callback",{"_index":1640,"title":{},"body":{"classes/LoadingManager.html":{}}}],["addoutlinepassforselection",{"_index":1303,"title":{},"body":{"classes/EffectsManager.html":{}}}],["addprogresslistener",{"_index":1626,"title":{},"body":{"classes/LoadingManager.html":{}}}],["addprogresslistener(callback",{"_index":1642,"title":{},"body":{"classes/LoadingManager.html":{}}}],["addrenderer",{"_index":2086,"title":{},"body":{"classes/RendererManager.html":{}}}],["addrenderer(renderer",{"_index":2108,"title":{},"body":{"classes/RendererManager.html":{}}}],["adds",{"_index":2969,"title":{},"body":{"interfaces/Window.html":{}}}],["addtrack",{"_index":2618,"title":{},"body":{"classes/TracksMesh.html":{}}}],["addtrack(points",{"_index":2497,"title":{},"body":{"classes/TracksMaterial.html":{},"classes/TracksMesh.html":{}}}],["ae76d4a",{"_index":3393,"title":{},"body":{"changelog.html":{}}}],["again",{"_index":379,"title":{},"body":{"interfaces/AnimationPreset.html":{},"changelog.html":{}}}],["against",{"_index":645,"title":{},"body":{"classes/ColorManager.html":{}}}],["aliases",{"_index":3829,"title":{},"body":{"miscellaneous/typealiases.html":{}}}],["allcolorbyoptions",{"_index":685,"title":{},"body":{"classes/ColorOptions.html":{}}}],["alleventdata",{"_index":448,"title":{},"body":{"interfaces/AnimationPreset.html":{}}}],["alleventdata.getobjectbyname('track",{"_index":507,"title":{},"body":{"interfaces/AnimationPreset.html":{}}}],["alleventdata.traverse((eventobject",{"_index":471,"title":{},"body":{"interfaces/AnimationPreset.html":{}}}],["alleventdata.visible",{"_index":514,"title":{},"body":{"interfaces/AnimationPreset.html":{}}}],["alleventsobject",{"_index":2735,"title":{},"body":{"classes/URLOptionsManager.html":{}}}],["allfacepositions",{"_index":565,"title":{},"body":{"classes/CMSObjects.html":{}}}],["allfacepositions.concat",{"_index":568,"title":{},"body":{"classes/CMSObjects.html":{}}}],["allgeometriesuiparameters",{"_index":3011,"title":{},"body":{"interfaces/Window.html":{}}}],["allow",{"_index":865,"title":{},"body":{"interfaces/Configuration.html":{},"interfaces/Window.html":{},"changelog.html":{}}}],["allowcustomvalue",{"_index":833,"title":{},"body":{"classes/ColorOptions.html":{},"classes/PhoenixMenuUI.html":{}}}],["allowed",{"_index":996,"title":{},"body":{"classes/Cut.html":{}}}],["allowing",{"_index":1431,"title":{},"body":{"classes/ExportManager.html":{},"interfaces/Window.html":{},"changelog.html":{}}}],["allows",{"_index":1956,"title":{},"body":{"classes/PresetView.html":{}}}],["allowselection(selectedobject",{"_index":3091,"title":{},"body":{"interfaces/Window.html":{}}}],["allowurloptions",{"_index":855,"title":{},"body":{"interfaces/Configuration.html":{}}}],["alltweens",{"_index":331,"title":{},"body":{"interfaces/AnimationPreset.html":{}}}],["alltweens.push(animationspheretween",{"_index":430,"title":{},"body":{"interfaces/AnimationPreset.html":{}}}],["alltweens.push(eventobjecttween",{"_index":359,"title":{},"body":{"interfaces/AnimationPreset.html":{}}}],["alltweens.push(scaletween",{"_index":383,"title":{},"body":{"interfaces/AnimationPreset.html":{}}}],["alltweens.push(tween",{"_index":461,"title":{},"body":{"interfaces/AnimationPreset.html":{}}}],["alltweens[0].onstart",{"_index":431,"title":{},"body":{"interfaces/AnimationPreset.html":{}}}],["alltweens[alltweens.length",{"_index":463,"title":{},"body":{"interfaces/AnimationPreset.html":{}}}],["along",{"_index":291,"title":{},"body":{"interfaces/AnimationPreset.html":{},"classes/CMSObjects.html":{},"classes/DatGUIMenuUI.html":{},"index.html":{}}}],["alongaxisposition",{"_index":294,"title":{},"body":{"interfaces/AnimationPreset.html":{}}}],["alpha",{"_index":2145,"title":{},"body":{"classes/RendererManager.html":{}}}],["already",{"_index":1199,"title":{},"body":{"classes/DatGUIMenuUI.html":{},"classes/ScriptLoader.html":{}}}],["always",{"_index":3607,"title":{},"body":{"changelog.html":{}}}],["ambientlight",{"_index":2293,"title":{},"body":{"classes/SelectionManager.html":{}}}],["ambientlight().type",{"_index":2301,"title":{},"body":{"classes/SelectionManager.html":{}}}],["angle",{"_index":303,"title":{},"body":{"interfaces/AnimationPreset.html":{},"classes/CoordinateHelper.html":{},"classes/PresetView.html":{},"classes/StateManager.html":{},"changelog.html":{}}}],["angles",{"_index":910,"title":{},"body":{"classes/CoordinateHelper.html":{}}}],["anglesaresane",{"_index":900,"title":{},"body":{"classes/CoordinateHelper.html":{}}}],["anglesaresane(theta",{"_index":906,"title":{},"body":{"classes/CoordinateHelper.html":{}}}],["angular",{"_index":3210,"title":{},"body":{"changelog.html":{},"index.html":{}}}],["animate",{"_index":281,"title":{},"body":{"interfaces/AnimationPreset.html":{},"interfaces/Window.html":{},"changelog.html":{}}}],["animateclippingwithcollision",{"_index":520,"title":{},"body":{"interfaces/AnimationPreset.html":{},"interfaces/Window.html":{}}}],["animateevent",{"_index":321,"title":{},"body":{"interfaces/AnimationPreset.html":{}}}],["animateeventafterinterval",{"_index":225,"title":{},"body":{"interfaces/AnimationPreset.html":{},"miscellaneous/variables.html":{}}}],["animateeventwithclipping",{"_index":446,"title":{},"body":{"interfaces/AnimationPreset.html":{}}}],["animateeventwithcollision(tweenduration",{"_index":518,"title":{},"body":{"interfaces/AnimationPreset.html":{},"interfaces/Window.html":{}}}],["animatepreset(animationpreset",{"_index":3110,"title":{},"body":{"interfaces/Window.html":{}}}],["animatethroughevent",{"_index":287,"title":{},"body":{"interfaces/AnimationPreset.html":{},"interfaces/Window.html":{}}}],["animatewithcollision",{"_index":505,"title":{},"body":{"interfaces/AnimationPreset.html":{}}}],["animating",{"_index":266,"title":{},"body":{"interfaces/AnimationPreset.html":{},"interfaces/Window.html":{}}}],["animation",{"_index":223,"title":{},"body":{"interfaces/AnimationPreset.html":{},"classes/RendererManager.html":{},"interfaces/Window.html":{},"changelog.html":{},"miscellaneous/variables.html":{}}}],["animationclipplane",{"_index":458,"title":{},"body":{"interfaces/AnimationPreset.html":{}}}],["animationclipplane.constant",{"_index":459,"title":{},"body":{"interfaces/AnimationPreset.html":{}}}],["animationclipplanes",{"_index":452,"title":{},"body":{"interfaces/AnimationPreset.html":{}}}],["animationfunction",{"_index":504,"title":{},"body":{"interfaces/AnimationPreset.html":{}}}],["animationfunction(tweenduration",{"_index":517,"title":{},"body":{"interfaces/AnimationPreset.html":{}}}],["animationpreset",{"_index":220,"title":{"interfaces/AnimationPreset.html":{}},"body":{"interfaces/AnimationPreset.html":{},"interfaces/Configuration.html":{},"interfaces/Window.html":{},"coverage.html":{},"miscellaneous/variables.html":{}}}],["animations",{"_index":317,"title":{},"body":{"interfaces/AnimationPreset.html":{},"interfaces/Configuration.html":{},"interfaces/Window.html":{},"changelog.html":{}}}],["animationsmanager",{"_index":256,"title":{},"body":{"interfaces/AnimationPreset.html":{},"coverage.html":{}}}],["animationsphere",{"_index":327,"title":{},"body":{"interfaces/AnimationPreset.html":{}}}],["animationspheretween",{"_index":403,"title":{},"body":{"interfaces/AnimationPreset.html":{}}}],["animationspheretween.chain(animationspheretweenclone",{"_index":429,"title":{},"body":{"interfaces/AnimationPreset.html":{}}}],["animationspheretween.onupdate(onanimationsphereupdate",{"_index":424,"title":{},"body":{"interfaces/AnimationPreset.html":{}}}],["animationspheretweenclone",{"_index":426,"title":{},"body":{"interfaces/AnimationPreset.html":{}}}],["animationspheretweenclone.oncomplete",{"_index":435,"title":{},"body":{"interfaces/AnimationPreset.html":{}}}],["animationspheretweenclone.onupdate(onanimationsphereupdate",{"_index":428,"title":{},"body":{"interfaces/AnimationPreset.html":{}}}],["another",{"_index":3699,"title":{},"body":{"changelog.html":{}}}],["antialias",{"_index":1323,"title":{},"body":{"classes/EffectsManager.html":{},"classes/RendererManager.html":{},"changelog.html":{}}}],["antialiasing",{"_index":1299,"title":{},"body":{"classes/EffectsManager.html":{},"changelog.html":{}}}],["antialiasrender",{"_index":1304,"title":{},"body":{"classes/EffectsManager.html":{}}}],["antialiasrender(scene",{"_index":1330,"title":{},"body":{"classes/EffectsManager.html":{}}}],["any).geometry",{"_index":411,"title":{},"body":{"interfaces/AnimationPreset.html":{}}}],["any)?.material.color",{"_index":511,"title":{},"body":{"interfaces/AnimationPreset.html":{}}}],["any)?.material?.color",{"_index":510,"title":{},"body":{"interfaces/AnimationPreset.html":{}}}],["any)?.xr",{"_index":3138,"title":{},"body":{"classes/XRManager.html":{}}}],["apache",{"_index":3822,"title":{},"body":{"properties.html":{}}}],["api",{"_index":3788,"title":{},"body":{"index.html":{},"properties.html":{}}}],["app",{"_index":3222,"title":{},"body":{"changelog.html":{}}}],["appended",{"_index":2207,"title":{},"body":{"classes/ScriptLoader.html":{}}}],["appled",{"_index":999,"title":{},"body":{"classes/Cut.html":{}}}],["application",{"_index":3792,"title":{},"body":{"index.html":{}}}],["application/json",{"_index":3897,"title":{},"body":{"miscellaneous/variables.html":{}}}],["applied",{"_index":470,"title":{},"body":{"interfaces/AnimationPreset.html":{},"classes/Cut.html":{},"classes/PhoenixMenuNode.html":{},"changelog.html":{}}}],["applies",{"_index":929,"title":{},"body":{"classes/CoordinateHelper.html":{}}}],["apply",{"_index":717,"title":{},"body":{"classes/ColorOptions.html":{},"classes/PhoenixMenuNode.html":{},"classes/URLOptionsManager.html":{},"interfaces/Window.html":{},"changelog.html":{}}}],["applychargecoloroptions",{"_index":691,"title":{},"body":{"classes/ColorOptions.html":{}}}],["applyconfigstate",{"_index":1690,"title":{},"body":{"classes/PhoenixMenuNode.html":{}}}],["applyconfigstate(config",{"_index":1720,"title":{},"body":{"classes/PhoenixMenuNode.html":{}}}],["applyembedoption",{"_index":2634,"title":{},"body":{"classes/URLOptionsManager.html":{}}}],["applyeventoptions",{"_index":2635,"title":{},"body":{"classes/URLOptionsManager.html":{}}}],["applyeventoptions(defaulteventpath",{"_index":2650,"title":{},"body":{"classes/URLOptionsManager.html":{}}}],["applyhidewidgetsoptions",{"_index":2636,"title":{},"body":{"classes/URLOptionsManager.html":{}}}],["applying",{"_index":3644,"title":{},"body":{"changelog.html":{}}}],["applymomcoloroptions",{"_index":692,"title":{},"body":{"classes/ColorOptions.html":{}}}],["applyoptions",{"_index":2637,"title":{},"body":{"classes/URLOptionsManager.html":{}}}],["applyvertexcoloroptions",{"_index":693,"title":{},"body":{"classes/ColorOptions.html":{}}}],["ar",{"_index":10,"title":{},"body":{"classes/ARManager.html":{},"interfaces/Window.html":{},"classes/XRManager.html":{},"changelog.html":{},"miscellaneous/enumerations.html":{}}}],["archive",{"_index":3575,"title":{},"body":{"changelog.html":{},"miscellaneous/variables.html":{}}}],["archive.file(filepath).async('string",{"_index":3930,"title":{},"body":{"miscellaneous/variables.html":{}}}],["archive.files",{"_index":3929,"title":{},"body":{"miscellaneous/variables.html":{}}}],["archive.loadasync(file",{"_index":3927,"title":{},"body":{"miscellaneous/variables.html":{}}}],["argument",{"_index":3203,"title":{},"body":{"changelog.html":{}}}],["armanager",{"_index":1,"title":{"classes/ARManager.html":{}},"body":{"classes/ARManager.html":{},"changelog.html":{},"coverage.html":{}}}],["armanager.enabledomoverlay",{"_index":163,"title":{},"body":{"classes/ARManager.html":{}}}],["around",{"_index":2804,"title":{},"body":{"classes/VRManager.html":{}}}],["array",{"_index":523,"title":{},"body":{"interfaces/AnimationPreset.html":{},"classes/Field.html":{},"classes/RKHelper.html":{},"classes/RungeKutta.html":{},"classes/State.html":{},"classes/URLOptionsManager.html":{},"interfaces/Window.html":{}}}],["array.from",{"_index":391,"title":{},"body":{"interfaces/AnimationPreset.html":{}}}],["arraybuffer",{"_index":3009,"title":{},"body":{"interfaces/Window.html":{},"miscellaneous/variables.html":{}}}],["arraycamera",{"_index":3133,"title":{},"body":{"classes/XRManager.html":{}}}],["arraycamera([camera.clone",{"_index":3159,"title":{},"body":{"classes/XRManager.html":{}}}],["arrays",{"_index":2349,"title":{},"body":{"classes/SelectionManager.html":{}}}],["aspect",{"_index":2564,"title":{},"body":{"classes/TracksMaterial.html":{},"classes/TracksMesh.html":{}}}],["aspect.x",{"_index":2594,"title":{},"body":{"classes/TracksMaterial.html":{},"classes/TracksMesh.html":{}}}],["aspects",{"_index":2890,"title":{},"body":{"interfaces/Window.html":{}}}],["assets/preset",{"_index":1983,"title":{},"body":{"classes/PresetView.html":{}}}],["assign",{"_index":3618,"title":{},"body":{"changelog.html":{}}}],["associated",{"_index":650,"title":{},"body":{"classes/ColorManager.html":{},"classes/ColorOptions.html":{},"interfaces/EventDataLoader.html":{},"interfaces/Window.html":{}}}],["async",{"_index":35,"title":{},"body":{"classes/ARManager.html":{},"classes/URLOptionsManager.html":{},"classes/VRManager.html":{},"interfaces/Window.html":{},"classes/XRManager.html":{},"changelog.html":{},"miscellaneous/variables.html":{}}}],["atlas",{"_index":818,"title":{},"body":{"classes/ColorOptions.html":{},"classes/CoordinateHelper.html":{},"classes/RKHelper.html":{},"changelog.html":{}}}],["atlasquaternion",{"_index":901,"title":{},"body":{"classes/CoordinateHelper.html":{}}}],["attach",{"_index":1105,"title":{},"body":{"classes/DatGUIMenuUI.html":{},"classes/PhoenixMenuUI.html":{},"interfaces/PhoenixUI.html":{}}}],["attempt",{"_index":3412,"title":{},"body":{"changelog.html":{}}}],["attribute",{"_index":978,"title":{},"body":{"classes/Cut.html":{},"classes/ScriptLoader.html":{},"classes/TracksMaterial.html":{},"classes/TracksMesh.html":{},"changelog.html":{}}}],["attributename",{"_index":2342,"title":{},"body":{"classes/SelectionManager.html":{}}}],["attributes",{"_index":2297,"title":{},"body":{"classes/SelectionManager.html":{},"classes/TracksMaterial.html":{},"classes/TracksMesh.html":{},"interfaces/Window.html":{}}}],["attributevalue",{"_index":2343,"title":{},"body":{"classes/SelectionManager.html":{}}}],["author",{"_index":3825,"title":{},"body":{"properties.html":{}}}],["available",{"_index":733,"title":{},"body":{"classes/ColorOptions.html":{},"classes/RendererManager.html":{},"changelog.html":{},"miscellaneous/enumerations.html":{}}}],["available/created",{"_index":2107,"title":{},"body":{"classes/RendererManager.html":{}}}],["averageprogress",{"_index":1670,"title":{},"body":{"classes/LoadingManager.html":{}}}],["await",{"_index":176,"title":{},"body":{"classes/ARManager.html":{},"classes/URLOptionsManager.html":{},"interfaces/Window.html":{},"classes/XRManager.html":{},"changelog.html":{},"miscellaneous/variables.html":{}}}],["axes",{"_index":478,"title":{},"body":{"interfaces/AnimationPreset.html":{}}}],["axeshelper",{"_index":2294,"title":{},"body":{"classes/SelectionManager.html":{}}}],["axeshelper().type",{"_index":2303,"title":{},"body":{"classes/SelectionManager.html":{}}}],["axis",{"_index":293,"title":{},"body":{"interfaces/AnimationPreset.html":{},"classes/CoordinateHelper.html":{},"classes/DatGUIMenuUI.html":{}}}],["azimuthal",{"_index":915,"title":{},"body":{"classes/CoordinateHelper.html":{}}}],["b",{"_index":2144,"title":{},"body":{"classes/RendererManager.html":{}}}],["b10bb7a",{"_index":3517,"title":{},"body":{"changelog.html":{}}}],["b46c49f",{"_index":3692,"title":{},"body":{"changelog.html":{}}}],["b52282f",{"_index":3542,"title":{},"body":{"changelog.html":{}}}],["b7a324a",{"_index":3535,"title":{},"body":{"changelog.html":{}}}],["b7e8da0",{"_index":3619,"title":{},"body":{"changelog.html":{}}}],["b8e88b8",{"_index":3510,"title":{},"body":{"changelog.html":{}}}],["b_first",{"_index":1517,"title":{},"body":{"classes/Field.html":{},"classes/RungeKutta.html":{},"classes/State.html":{}}}],["b_last",{"_index":1512,"title":{},"body":{"classes/Field.html":{},"classes/RungeKutta.html":{},"classes/State.html":{}}}],["b_middle",{"_index":1511,"title":{},"body":{"classes/Field.html":{},"classes/RungeKutta.html":{},"classes/State.html":{}}}],["babel/core",{"_index":3771,"title":{},"body":{"dependencies.html":{}}}],["back",{"_index":578,"title":{},"body":{"classes/CMSObjects.html":{},"classes/PhoenixMenuNode.html":{},"changelog.html":{}}}],["back_1",{"_index":584,"title":{},"body":{"classes/CMSObjects.html":{}}}],["back_2",{"_index":580,"title":{},"body":{"classes/CMSObjects.html":{}}}],["back_3",{"_index":581,"title":{},"body":{"classes/CMSObjects.html":{}}}],["back_4",{"_index":583,"title":{},"body":{"classes/CMSObjects.html":{}}}],["background",{"_index":3367,"title":{},"body":{"changelog.html":{}}}],["based",{"_index":752,"title":{},"body":{"classes/ColorOptions.html":{},"classes/URLOptionsManager.html":{},"changelog.html":{},"properties.html":{}}}],["bb41683",{"_index":3384,"title":{},"body":{"changelog.html":{}}}],["bbcdf0c",{"_index":3539,"title":{},"body":{"changelog.html":{}}}],["bbea6b0",{"_index":3493,"title":{},"body":{"changelog.html":{}}}],["become",{"_index":142,"title":{},"body":{"classes/ARManager.html":{},"classes/VRManager.html":{},"classes/XRManager.html":{}}}],["before",{"_index":2265,"title":{},"body":{"classes/SelectionManager.html":{}}}],["being",{"_index":1609,"title":{},"body":{"classes/InfoLogger.html":{},"interfaces/Window.html":{},"changelog.html":{}}}],["better",{"_index":3404,"title":{},"body":{"changelog.html":{}}}],["bf98a24",{"_index":3330,"title":{},"body":{"changelog.html":{}}}],["big",{"_index":3686,"title":{},"body":{"changelog.html":{}}}],["bind",{"_index":3511,"title":{},"body":{"changelog.html":{}}}],["blob",{"_index":3916,"title":{},"body":{"miscellaneous/variables.html":{}}}],["blob([data",{"_index":3917,"title":{},"body":{"miscellaneous/variables.html":{}}}],["block",{"_index":2739,"title":{},"body":{"classes/URLOptionsManager.html":{}}}],["bloom",{"_index":1298,"title":{},"body":{"classes/EffectsManager.html":{},"classes/SelectionManager.html":{}}}],["boolean",{"_index":56,"title":{},"body":{"classes/ARManager.html":{},"classes/ColorManager.html":{},"classes/ColorOptions.html":{},"interfaces/Configuration.html":{},"classes/CoordinateHelper.html":{},"classes/Cut.html":{},"classes/DatGUIMenuUI.html":{},"classes/EffectsManager.html":{},"classes/Field.html":{},"classes/PhoenixMenuNode.html":{},"classes/PhoenixMenuUI.html":{},"classes/RKHelper.html":{},"classes/RendererManager.html":{},"classes/RungeKutta.html":{},"classes/SelectionManager.html":{},"classes/State.html":{},"classes/StateManager.html":{},"classes/TracksMaterial.html":{},"classes/TracksMesh.html":{},"classes/VRManager.html":{},"interfaces/Window.html":{},"classes/XRManager.html":{}}}],["both",{"_index":2696,"title":{},"body":{"classes/URLOptionsManager.html":{},"interfaces/Window.html":{}}}],["bottom",{"_index":586,"title":{},"body":{"classes/CMSObjects.html":{},"classes/URLOptionsManager.html":{}}}],["bound",{"_index":1004,"title":{},"body":{"classes/Cut.html":{}}}],["bounded",{"_index":2814,"title":{},"body":{"classes/VRManager.html":{}}}],["bounds",{"_index":1583,"title":{},"body":{"classes/Field.html":{},"classes/RKHelper.html":{},"classes/RungeKutta.html":{},"classes/State.html":{},"changelog.html":{}}}],["box",{"_index":604,"title":{},"body":{"classes/CMSObjects.html":{}}}],["boxbuffer",{"_index":590,"title":{},"body":{"classes/CMSObjects.html":{}}}],["boxbuffer.attributes.position",{"_index":591,"title":{},"body":{"classes/CMSObjects.html":{}}}],["boxbuffer.computevertexnormals",{"_index":593,"title":{},"body":{"classes/CMSObjects.html":{}}}],["boxedges",{"_index":606,"title":{},"body":{"classes/CMSObjects.html":{}}}],["boxobject",{"_index":594,"title":{},"body":{"classes/CMSObjects.html":{}}}],["boxobject.name",{"_index":601,"title":{},"body":{"classes/CMSObjects.html":{}}}],["boxobject.userdata",{"_index":599,"title":{},"body":{"classes/CMSObjects.html":{}}}],["boxobject.uuid",{"_index":614,"title":{},"body":{"classes/CMSObjects.html":{}}}],["browser",{"_index":3543,"title":{},"body":{"changelog.html":{}}}],["browsers",{"_index":2153,"title":{},"body":{"classes/RendererManager.html":{}}}],["bufferattribute",{"_index":248,"title":{},"body":{"interfaces/AnimationPreset.html":{},"classes/CMSObjects.html":{},"classes/TracksMaterial.html":{},"classes/TracksMesh.html":{}}}],["bufferattribute(new",{"_index":2514,"title":{},"body":{"classes/TracksMaterial.html":{},"classes/TracksMesh.html":{}}}],["bufferattribute).copyarray",{"_index":2524,"title":{},"body":{"classes/TracksMaterial.html":{},"classes/TracksMesh.html":{}}}],["buffergeometry",{"_index":241,"title":{},"body":{"interfaces/AnimationPreset.html":{},"classes/CMSObjects.html":{},"classes/DatGUIMenuUI.html":{},"classes/PhoenixMenuUI.html":{},"classes/TracksMaterial.html":{},"classes/TracksMesh.html":{},"classes/VRManager.html":{},"changelog.html":{}}}],["buffergeometry().setfrompoints",{"_index":2842,"title":{},"body":{"classes/VRManager.html":{}}}],["bug",{"_index":3192,"title":{},"body":{"changelog.html":{}}}],["bugged",{"_index":3694,"title":{},"body":{"changelog.html":{}}}],["build",{"_index":2353,"title":{},"body":{"classes/SelectionManager.html":{},"interfaces/Window.html":{},"index.html":{}}}],["build(obj",{"_index":3040,"title":{},"body":{"interfaces/Window.html":{}}}],["build(object",{"_index":3028,"title":{},"body":{"interfaces/Window.html":{}}}],["build:bundlethis",{"_index":3807,"title":{},"body":{"index.html":{}}}],["buildeventdata",{"_index":1374,"title":{},"body":{"interfaces/EventDataLoader.html":{}}}],["buildeventdata(eventdata",{"_index":1383,"title":{},"body":{"interfaces/EventDataLoader.html":{}}}],["buildeventdatafromjson(eventdata",{"_index":2948,"title":{},"body":{"interfaces/Window.html":{}}}],["buildgeometryfromparameters",{"_index":3082,"title":{},"body":{"interfaces/Window.html":{}}}],["buildgeometryfromparameters(parameters",{"_index":3043,"title":{},"body":{"interfaces/Window.html":{}}}],["building",{"_index":3811,"title":{},"body":{"index.html":{}}}],["builds",{"_index":2947,"title":{},"body":{"interfaces/Window.html":{}}}],["bump",{"_index":3179,"title":{},"body":{"changelog.html":{}}}],["bundle",{"_index":3304,"title":{},"body":{"changelog.html":{},"index.html":{}}}],["bundled",{"_index":3805,"title":{},"body":{"index.html":{}}}],["button",{"_index":2795,"title":{},"body":{"classes/VRManager.html":{},"miscellaneous/typealiases.html":{}}}],["buttons",{"_index":2432,"title":{},"body":{"classes/StateManager.html":{}}}],["c0af497",{"_index":3319,"title":{},"body":{"changelog.html":{}}}],["c1",{"_index":2852,"title":{},"body":{"classes/VRManager.html":{}}}],["c36a222",{"_index":3647,"title":{},"body":{"changelog.html":{}}}],["c39ecd3",{"_index":3659,"title":{},"body":{"changelog.html":{}}}],["c446567",{"_index":3471,"title":{},"body":{"changelog.html":{}}}],["c60b3c1",{"_index":3310,"title":{},"body":{"changelog.html":{}}}],["c7a35db",{"_index":3687,"title":{},"body":{"changelog.html":{}}}],["c897ab3",{"_index":3369,"title":{},"body":{"changelog.html":{}}}],["c91aa0e",{"_index":3277,"title":{},"body":{"changelog.html":{}}}],["c92d65f",{"_index":3428,"title":{},"body":{"changelog.html":{}}}],["c9781e5",{"_index":3499,"title":{},"body":{"changelog.html":{}}}],["c991e54",{"_index":3613,"title":{},"body":{"changelog.html":{}}}],["c9d4880",{"_index":3597,"title":{},"body":{"changelog.html":{}}}],["ca3cc2f",{"_index":3534,"title":{},"body":{"changelog.html":{}}}],["calculated",{"_index":819,"title":{},"body":{"classes/ColorOptions.html":{},"classes/Field.html":{},"classes/RungeKutta.html":{},"classes/State.html":{}}}],["calculation",{"_index":3422,"title":{},"body":{"changelog.html":{}}}],["call",{"_index":97,"title":{},"body":{"classes/ARManager.html":{},"classes/ActiveVariable.html":{},"interfaces/AnimationPreset.html":{},"classes/LoadingManager.html":{},"classes/SelectionManager.html":{},"classes/VRManager.html":{},"interfaces/Window.html":{},"classes/XRManager.html":{}}}],["callback",{"_index":96,"title":{},"body":{"classes/ARManager.html":{},"classes/ActiveVariable.html":{},"interfaces/AnimationPreset.html":{},"classes/LoadingManager.html":{},"classes/VRManager.html":{},"interfaces/Window.html":{},"classes/XRManager.html":{},"miscellaneous/typealiases.html":{}}}],["callback(averageprogress",{"_index":1672,"title":{},"body":{"classes/LoadingManager.html":{}}}],["callback(eventdata",{"_index":2957,"title":{},"body":{"interfaces/Window.html":{}}}],["callback(eventkeys",{"_index":2946,"title":{},"body":{"interfaces/Window.html":{}}}],["callback(updatedvalue",{"_index":217,"title":{},"body":{"classes/ActiveVariable.html":{}}}],["callbackfunction",{"_index":204,"title":{},"body":{"classes/ActiveVariable.html":{},"miscellaneous/typealiases.html":{}}}],["callbacks",{"_index":196,"title":{},"body":{"classes/ActiveVariable.html":{},"classes/LoadingManager.html":{},"interfaces/Window.html":{}}}],["called",{"_index":1100,"title":{},"body":{"classes/DatGUIMenuUI.html":{},"classes/PhoenixMenuUI.html":{},"interfaces/PhoenixUI.html":{},"interfaces/Window.html":{}}}],["calling",{"_index":1722,"title":{},"body":{"classes/PhoenixMenuNode.html":{},"interfaces/Window.html":{}}}],["calls",{"_index":3281,"title":{},"body":{"changelog.html":{}}}],["calo",{"_index":3194,"title":{},"body":{"changelog.html":{}}}],["calocluster",{"_index":3502,"title":{},"body":{"changelog.html":{}}}],["caloclusters",{"_index":3519,"title":{},"body":{"changelog.html":{},"miscellaneous/variables.html":{}}}],["camera",{"_index":45,"title":{},"body":{"classes/ARManager.html":{},"interfaces/AnimationPreset.html":{},"interfaces/Configuration.html":{},"classes/EffectsManager.html":{},"classes/PresetView.html":{},"classes/RendererManager.html":{},"classes/SelectionManager.html":{},"classes/StateManager.html":{},"classes/VRManager.html":{},"interfaces/Window.html":{},"classes/XRManager.html":{},"changelog.html":{}}}],["camera.near",{"_index":160,"title":{},"body":{"classes/ARManager.html":{}}}],["cameragroup",{"_index":25,"title":{},"body":{"classes/ARManager.html":{},"classes/VRManager.html":{},"classes/XRManager.html":{}}}],["cameranear",{"_index":72,"title":{},"body":{"classes/ARManager.html":{}}}],["camerapos",{"_index":1958,"title":{},"body":{"classes/PresetView.html":{}}}],["cameraposition",{"_index":2438,"title":{},"body":{"classes/StateManager.html":{},"classes/XRManager.html":{}}}],["cameras",{"_index":3046,"title":{},"body":{"interfaces/Window.html":{}}}],["cameratarget",{"_index":1959,"title":{},"body":{"classes/PresetView.html":{}}}],["canvas",{"_index":1125,"title":{},"body":{"classes/DatGUIMenuUI.html":{},"classes/RendererManager.html":{},"classes/SelectionManager.html":{},"interfaces/Window.html":{},"changelog.html":{}}}],["canvas.appendchild(this.gui.domelement",{"_index":1127,"title":{},"body":{"classes/DatGUIMenuUI.html":{}}}],["canvaswrapper",{"_index":2161,"title":{},"body":{"classes/RendererManager.html":{}}}],["canvaswrapper.appendchild(this.getmainrenderer().domelement",{"_index":2171,"title":{},"body":{"classes/RendererManager.html":{}}}],["canvaswrapper.offsetheight",{"_index":2166,"title":{},"body":{"classes/RendererManager.html":{}}}],["canvaswrapper.offsetwidth",{"_index":2163,"title":{},"body":{"classes/RendererManager.html":{}}}],["care",{"_index":1390,"title":{},"body":{"interfaces/EventDataLoader.html":{}}}],["cartesian",{"_index":927,"title":{},"body":{"classes/CoordinateHelper.html":{}}}],["case",{"_index":1970,"title":{},"body":{"classes/PresetView.html":{},"interfaces/Window.html":{}}}],["catch",{"_index":2738,"title":{},"body":{"classes/URLOptionsManager.html":{},"changelog.html":{},"miscellaneous/variables.html":{}}}],["catch((error",{"_index":2719,"title":{},"body":{"classes/URLOptionsManager.html":{},"classes/XRManager.html":{}}}],["cavern",{"_index":3852,"title":{},"body":{"miscellaneous/variables.html":{}}}],["cb2ec40",{"_index":3611,"title":{},"body":{"changelog.html":{}}}],["cb68283",{"_index":3453,"title":{},"body":{"changelog.html":{}}}],["cc04d5a",{"_index":3460,"title":{},"body":{"changelog.html":{}}}],["cdn",{"_index":3585,"title":{},"body":{"changelog.html":{},"index.html":{}}}],["cell",{"_index":3195,"title":{},"body":{"changelog.html":{}}}],["cell/cluster",{"_index":3198,"title":{},"body":{"changelog.html":{}}}],["cfb1b6a",{"_index":3693,"title":{},"body":{"changelog.html":{}}}],["cg",{"_index":2854,"title":{},"body":{"classes/VRManager.html":{}}}],["chaining",{"_index":3612,"title":{},"body":{"changelog.html":{}}}],["chamber",{"_index":556,"title":{},"body":{"classes/CMSObjects.html":{}}}],["change",{"_index":194,"title":{},"body":{"classes/ActiveVariable.html":{},"interfaces/AnimationPreset.html":{},"classes/PhoenixMenuNode.html":{},"interfaces/Window.html":{},"changelog.html":{}}}],["changeable",{"_index":1072,"title":{},"body":{"classes/DatGUIMenuUI.html":{}}}],["changed",{"_index":193,"title":{},"body":{"classes/ActiveVariable.html":{}}}],["changelog",{"_index":3166,"title":{"changelog.html":{}},"body":{}}],["changes",{"_index":627,"title":{},"body":{"classes/ColorManager.html":{},"classes/SelectionManager.html":{},"interfaces/Window.html":{},"changelog.html":{}}}],["changing",{"_index":339,"title":{},"body":{"interfaces/AnimationPreset.html":{}}}],["charge",{"_index":713,"title":{},"body":{"classes/ColorOptions.html":{},"classes/Field.html":{},"classes/PrettySymbols.html":{},"classes/RungeKutta.html":{},"classes/State.html":{},"miscellaneous/enumerations.html":{}}}],["chargecolors",{"_index":686,"title":{},"body":{"classes/ColorOptions.html":{}}}],["chargevalue",{"_index":770,"title":{},"body":{"classes/ColorOptions.html":{}}}],["check",{"_index":343,"title":{},"body":{"interfaces/AnimationPreset.html":{},"classes/ColorManager.html":{},"classes/ColorOptions.html":{},"classes/Cut.html":{},"classes/LoadingManager.html":{},"classes/RKHelper.html":{},"classes/RendererManager.html":{},"classes/SelectionManager.html":{}}}],["checkbox",{"_index":1775,"title":{},"body":{"classes/PhoenixMenuNode.html":{},"miscellaneous/typealiases.html":{}}}],["checked",{"_index":1920,"title":{},"body":{"classes/PhoenixMenuUI.html":{},"classes/RendererManager.html":{}}}],["checking",{"_index":1552,"title":{},"body":{"classes/Field.html":{},"classes/RungeKutta.html":{},"classes/State.html":{}}}],["checks",{"_index":909,"title":{},"body":{"classes/CoordinateHelper.html":{}}}],["chi2",{"_index":1991,"title":{},"body":{"classes/PrettySymbols.html":{}}}],["child",{"_index":661,"title":{},"body":{"classes/ColorManager.html":{},"classes/PhoenixMenuNode.html":{},"changelog.html":{}}}],["child.findintree(name",{"_index":1826,"title":{},"body":{"classes/PhoenixMenuNode.html":{}}}],["child.name",{"_index":1833,"title":{},"body":{"classes/PhoenixMenuNode.html":{}}}],["child.nodelevel",{"_index":1753,"title":{},"body":{"classes/PhoenixMenuNode.html":{}}}],["child.parent",{"_index":1752,"title":{},"body":{"classes/PhoenixMenuNode.html":{}}}],["child.toggleselfanddescendants(child.togglestate",{"_index":1772,"title":{},"body":{"classes/PhoenixMenuNode.html":{}}}],["child.toggleselfanddescendants(value",{"_index":1771,"title":{},"body":{"classes/PhoenixMenuNode.html":{}}}],["child.togglestate",{"_index":1770,"title":{},"body":{"classes/PhoenixMenuNode.html":{}}}],["child.traverse((object",{"_index":663,"title":{},"body":{"classes/ColorManager.html":{}}}],["childindex",{"_index":1756,"title":{},"body":{"classes/PhoenixMenuNode.html":{}}}],["children",{"_index":1680,"title":{},"body":{"classes/PhoenixMenuNode.html":{},"changelog.html":{}}}],["childrenactive",{"_index":1681,"title":{},"body":{"classes/PhoenixMenuNode.html":{}}}],["childrentogglestate",{"_index":1682,"title":{},"body":{"classes/PhoenixMenuNode.html":{}}}],["childstate",{"_index":1816,"title":{},"body":{"classes/PhoenixMenuNode.html":{}}}],["childstate.name",{"_index":1821,"title":{},"body":{"classes/PhoenixMenuNode.html":{}}}],["childstate.nodelevel",{"_index":1823,"title":{},"body":{"classes/PhoenixMenuNode.html":{}}}],["class",{"_index":0,"title":{"classes/ARManager.html":{},"classes/ActiveVariable.html":{},"classes/CMSObjects.html":{},"classes/ColorManager.html":{},"classes/ColorOptions.html":{},"classes/CoordinateHelper.html":{},"classes/Cut.html":{},"classes/DatGUIMenuUI.html":{},"classes/EffectsManager.html":{},"classes/ExportManager.html":{},"classes/Field.html":{},"classes/InfoLogger.html":{},"classes/LoadingManager.html":{},"classes/PhoenixMenuNode.html":{},"classes/PhoenixMenuUI.html":{},"classes/PresetView.html":{},"classes/PrettySymbols.html":{},"classes/RKHelper.html":{},"classes/RendererManager.html":{},"classes/RungeKutta.html":{},"classes/ScriptLoader.html":{},"classes/SelectionManager.html":{},"classes/State.html":{},"classes/StateManager.html":{},"classes/TracksMaterial.html":{},"classes/TracksMesh.html":{},"classes/URLOptionsManager.html":{},"classes/VRManager.html":{},"classes/XRManager.html":{}},"body":{"classes/ARManager.html":{},"classes/ActiveVariable.html":{},"interfaces/AnimationPreset.html":{},"classes/CMSObjects.html":{},"classes/ColorManager.html":{},"classes/ColorOptions.html":{},"classes/CoordinateHelper.html":{},"classes/Cut.html":{},"classes/DatGUIMenuUI.html":{},"classes/EffectsManager.html":{},"classes/ExportManager.html":{},"classes/Field.html":{},"classes/InfoLogger.html":{},"classes/LoadingManager.html":{},"classes/PhoenixMenuNode.html":{},"classes/PhoenixMenuUI.html":{},"classes/PresetView.html":{},"classes/PrettySymbols.html":{},"classes/RKHelper.html":{},"classes/RendererManager.html":{},"classes/RungeKutta.html":{},"classes/ScriptLoader.html":{},"classes/SelectionManager.html":{},"classes/State.html":{},"classes/StateManager.html":{},"classes/TracksMaterial.html":{},"classes/TracksMesh.html":{},"classes/URLOptionsManager.html":{},"classes/VRManager.html":{},"interfaces/Window.html":{},"classes/XRManager.html":{},"changelog.html":{},"coverage.html":{}}}],["classes",{"_index":2,"title":{},"body":{"classes/ARManager.html":{},"classes/ActiveVariable.html":{},"classes/CMSObjects.html":{},"classes/ColorManager.html":{},"classes/ColorOptions.html":{},"classes/CoordinateHelper.html":{},"classes/Cut.html":{},"classes/DatGUIMenuUI.html":{},"classes/EffectsManager.html":{},"classes/ExportManager.html":{},"classes/Field.html":{},"classes/InfoLogger.html":{},"classes/LoadingManager.html":{},"classes/PhoenixMenuNode.html":{},"classes/PhoenixMenuUI.html":{},"classes/PresetView.html":{},"classes/PrettySymbols.html":{},"classes/RKHelper.html":{},"classes/RendererManager.html":{},"classes/RungeKutta.html":{},"classes/ScriptLoader.html":{},"classes/SelectionManager.html":{},"classes/State.html":{},"classes/StateManager.html":{},"classes/TracksMaterial.html":{},"classes/TracksMesh.html":{},"classes/URLOptionsManager.html":{},"classes/VRManager.html":{},"classes/XRManager.html":{},"index.html":{},"overview.html":{}}}],["clean",{"_index":3372,"title":{},"body":{"changelog.html":{}}}],["cleanup",{"_index":3505,"title":{},"body":{"changelog.html":{}}}],["clear",{"_index":1053,"title":{},"body":{"classes/DatGUIMenuUI.html":{},"classes/PhoenixMenuUI.html":{},"interfaces/PhoenixUI.html":{}}}],["clearing",{"_index":2952,"title":{},"body":{"interfaces/Window.html":{}}}],["clearinterval(intervalid",{"_index":2859,"title":{},"body":{"classes/VRManager.html":{}}}],["click",{"_index":2260,"title":{},"body":{"classes/SelectionManager.html":{}}}],["clicked",{"_index":2358,"title":{},"body":{"classes/SelectionManager.html":{}}}],["clicking",{"_index":3095,"title":{},"body":{"interfaces/Window.html":{}}}],["clipping",{"_index":440,"title":{},"body":{"interfaces/AnimationPreset.html":{},"classes/PresetView.html":{},"classes/RendererManager.html":{},"classes/StateManager.html":{},"interfaces/Window.html":{},"changelog.html":{},"miscellaneous/enumerations.html":{}}}],["clippingconstant",{"_index":442,"title":{},"body":{"interfaces/AnimationPreset.html":{}}}],["clippingenabled",{"_index":2395,"title":{},"body":{"classes/StateManager.html":{}}}],["clippingopeningangle",{"_index":1960,"title":{},"body":{"classes/PresetView.html":{}}}],["clippingsetting",{"_index":1963,"title":{},"body":{"classes/PresetView.html":{},"miscellaneous/enumerations.html":{}}}],["clippingsetting.notforced",{"_index":1977,"title":{},"body":{"classes/PresetView.html":{}}}],["clippingstartangle",{"_index":1961,"title":{},"body":{"classes/PresetView.html":{}}}],["clone",{"_index":1529,"title":{},"body":{"classes/Field.html":{},"classes/RungeKutta.html":{},"classes/State.html":{}}}],["cloned",{"_index":127,"title":{},"body":{"classes/ARManager.html":{},"classes/VRManager.html":{},"classes/XRManager.html":{}}}],["close",{"_index":3484,"title":{},"body":{"changelog.html":{}}}],["closes",{"_index":3307,"title":{},"body":{"changelog.html":{}}}],["closest",{"_index":2375,"title":{},"body":{"classes/SelectionManager.html":{}}}],["cluster",{"_index":3419,"title":{},"body":{"changelog.html":{}}}],["clusters",{"_index":3496,"title":{},"body":{"changelog.html":{}}}],["cms",{"_index":548,"title":{},"body":{"classes/CMSObjects.html":{},"changelog.html":{}}}],["cmsloader",{"_index":3633,"title":{},"body":{"changelog.html":{},"coverage.html":{}}}],["cmsobjects",{"_index":543,"title":{"classes/CMSObjects.html":{}},"body":{"classes/CMSObjects.html":{},"changelog.html":{},"coverage.html":{}}}],["code",{"_index":3356,"title":{},"body":{"changelog.html":{},"index.html":{}}}],["col",{"_index":2498,"title":{},"body":{"classes/TracksMaterial.html":{},"classes/TracksMesh.html":{}}}],["collection",{"_index":629,"title":{},"body":{"classes/ColorManager.html":{},"classes/ColorOptions.html":{},"classes/DatGUIMenuUI.html":{},"interfaces/EventDataLoader.html":{},"classes/ExportManager.html":{},"classes/PhoenixMenuNode.html":{},"classes/PhoenixMenuUI.html":{},"interfaces/PhoenixUI.html":{},"interfaces/Window.html":{},"changelog.html":{},"miscellaneous/variables.html":{}}}],["collection's",{"_index":1229,"title":{},"body":{"classes/DatGUIMenuUI.html":{},"changelog.html":{}}}],["collection.name",{"_index":1481,"title":{},"body":{"classes/ExportManager.html":{}}}],["collectioncolor",{"_index":618,"title":{},"body":{"classes/ColorManager.html":{},"classes/ColorOptions.html":{},"classes/DatGUIMenuUI.html":{},"classes/PhoenixMenuUI.html":{},"interfaces/PhoenixUI.html":{}}}],["collectioncolor(collectionname",{"_index":625,"title":{},"body":{"classes/ColorManager.html":{}}}],["collectioncolor?.gethexstring",{"_index":787,"title":{},"body":{"classes/ColorOptions.html":{}}}],["collectioncolorrandom",{"_index":619,"title":{},"body":{"classes/ColorManager.html":{}}}],["collectioncolorrandom(collectionname",{"_index":633,"title":{},"body":{"classes/ColorManager.html":{}}}],["collectionfolder",{"_index":702,"title":{},"body":{"classes/ColorOptions.html":{}}}],["collectionfolder.addchild('color",{"_index":784,"title":{},"body":{"classes/ColorOptions.html":{}}}],["collectionfolder.name",{"_index":782,"title":{},"body":{"classes/ColorOptions.html":{}}}],["collectionname",{"_index":630,"title":{},"body":{"classes/ColorManager.html":{},"classes/ColorOptions.html":{},"classes/DatGUIMenuUI.html":{},"interfaces/EventDataLoader.html":{},"classes/PhoenixMenuUI.html":{},"interfaces/PhoenixUI.html":{},"interfaces/Window.html":{}}}],["collectionnode",{"_index":1847,"title":{},"body":{"classes/PhoenixMenuUI.html":{}}}],["collectionnode.addchild('cut",{"_index":1908,"title":{},"body":{"classes/PhoenixMenuUI.html":{}}}],["collectionnode.addchild('draw",{"_index":1925,"title":{},"body":{"classes/PhoenixMenuUI.html":{}}}],["collectionobject",{"_index":1227,"title":{},"body":{"classes/DatGUIMenuUI.html":{},"classes/PhoenixMenuUI.html":{}}}],["collections",{"_index":1405,"title":{},"body":{"interfaces/EventDataLoader.html":{},"classes/RKHelper.html":{},"interfaces/Window.html":{},"changelog.html":{}}}],["collfolder",{"_index":1224,"title":{},"body":{"classes/DatGUIMenuUI.html":{}}}],["collfolder.addfolder('cuts",{"_index":1235,"title":{},"body":{"classes/DatGUIMenuUI.html":{}}}],["collideparticles",{"_index":480,"title":{},"body":{"interfaces/AnimationPreset.html":{}}}],["colliding",{"_index":506,"title":{},"body":{"interfaces/AnimationPreset.html":{}}}],["collision",{"_index":231,"title":{},"body":{"interfaces/AnimationPreset.html":{},"interfaces/Window.html":{},"changelog.html":{}}}],["collisionduration",{"_index":226,"title":{},"body":{"interfaces/AnimationPreset.html":{},"miscellaneous/variables.html":{}}}],["collison",{"_index":503,"title":{},"body":{"interfaces/AnimationPreset.html":{},"interfaces/Window.html":{}}}],["color",{"_index":169,"title":{},"body":{"classes/ARManager.html":{},"interfaces/AnimationPreset.html":{},"classes/CMSObjects.html":{},"classes/ColorManager.html":{},"classes/ColorOptions.html":{},"classes/DatGUIMenuUI.html":{},"classes/PhoenixMenuNode.html":{},"classes/PhoenixMenuUI.html":{},"interfaces/PhoenixUI.html":{},"classes/TracksMaterial.html":{},"classes/TracksMesh.html":{},"interfaces/Window.html":{},"changelog.html":{},"index.html":{},"miscellaneous/typealiases.html":{}}}],["color(0x2194ce",{"_index":3884,"title":{},"body":{"miscellaneous/variables.html":{}}}],["color(0xff0000",{"_index":3883,"title":{},"body":{"miscellaneous/variables.html":{}}}],["color(0xffd166",{"_index":3885,"title":{},"body":{"miscellaneous/variables.html":{}}}],["color(0xfff69a",{"_index":3888,"title":{},"body":{"miscellaneous/variables.html":{}}}],["color(0xffffff",{"_index":482,"title":{},"body":{"interfaces/AnimationPreset.html":{},"miscellaneous/variables.html":{}}}],["color(color",{"_index":2499,"title":{},"body":{"classes/TracksMaterial.html":{},"classes/TracksMesh.html":{}}}],["color(color).gethexstring",{"_index":1885,"title":{},"body":{"classes/PhoenixMenuUI.html":{}}}],["color)?.set(color",{"_index":665,"title":{},"body":{"classes/ColorManager.html":{}}}],["color)?.set(math.random",{"_index":666,"title":{},"body":{"classes/ColorManager.html":{}}}],["colorbymomentum",{"_index":694,"title":{},"body":{"classes/ColorOptions.html":{}}}],["colorbymomentum(minormax",{"_index":750,"title":{},"body":{"classes/ColorOptions.html":{}}}],["colorbyoption",{"_index":710,"title":{},"body":{"classes/ColorOptions.html":{},"miscellaneous/typealiases.html":{}}}],["colorbyoption.initialize",{"_index":801,"title":{},"body":{"classes/ColorOptions.html":{}}}],["colorbyoption.name",{"_index":807,"title":{},"body":{"classes/ColorOptions.html":{}}}],["colorbyoptionkeys",{"_index":705,"title":{},"body":{"classes/ColorOptions.html":{},"classes/PhoenixMenuUI.html":{},"miscellaneous/enumerations.html":{}}}],["colorbyoptionkeys.charge",{"_index":712,"title":{},"body":{"classes/ColorOptions.html":{},"classes/PhoenixMenuUI.html":{}}}],["colorbyoptionkeys.mom",{"_index":719,"title":{},"body":{"classes/ColorOptions.html":{},"classes/PhoenixMenuUI.html":{}}}],["colorbyoptionkeys.vertex",{"_index":724,"title":{},"body":{"classes/ColorOptions.html":{},"classes/PhoenixMenuUI.html":{}}}],["colorbyoptions",{"_index":687,"title":{},"body":{"classes/ColorOptions.html":{},"classes/PhoenixMenuUI.html":{}}}],["colorbyoptions.push",{"_index":1905,"title":{},"body":{"classes/PhoenixMenuUI.html":{}}}],["colorbyoptionstoinclude",{"_index":704,"title":{},"body":{"classes/ColorOptions.html":{}}}],["colorbyoptionstoinclude.includes(colorbyoption.key",{"_index":798,"title":{},"body":{"classes/ColorOptions.html":{}}}],["colorbyoptionstoinclude?.length",{"_index":795,"title":{},"body":{"classes/ColorOptions.html":{}}}],["colored",{"_index":772,"title":{},"body":{"classes/ColorOptions.html":{}}}],["colorfortracksvertex",{"_index":674,"title":{},"body":{"classes/ColorManager.html":{}}}],["coloring",{"_index":617,"title":{},"body":{"classes/ColorManager.html":{},"classes/ColorOptions.html":{},"changelog.html":{},"miscellaneous/enumerations.html":{}}}],["colormanager",{"_index":615,"title":{"classes/ColorManager.html":{}},"body":{"classes/ColorManager.html":{},"classes/ColorOptions.html":{},"coverage.html":{}}}],["colormenu",{"_index":1162,"title":{},"body":{"classes/DatGUIMenuUI.html":{}}}],["colormenu.onchange((color",{"_index":1280,"title":{},"body":{"classes/DatGUIMenuUI.html":{}}}],["colormenu.onchange((value",{"_index":1165,"title":{},"body":{"classes/DatGUIMenuUI.html":{}}}],["colormenu.onchange(oncolorchange",{"_index":1264,"title":{},"body":{"classes/DatGUIMenuUI.html":{}}}],["colormenu.setvalue(collectioncolor?.gethex",{"_index":1232,"title":{},"body":{"classes/DatGUIMenuUI.html":{}}}],["colorobjectsbyproperty",{"_index":620,"title":{},"body":{"classes/ColorManager.html":{}}}],["colorobjectsbyproperty(color",{"_index":636,"title":{},"body":{"classes/ColorManager.html":{}}}],["coloroptions",{"_index":681,"title":{"classes/ColorOptions.html":{}},"body":{"classes/ColorOptions.html":{},"classes/PhoenixMenuUI.html":{},"coverage.html":{}}}],["coloroptionsfolder",{"_index":688,"title":{},"body":{"classes/ColorOptions.html":{}}}],["colorrepresentation",{"_index":2476,"title":{},"body":{"classes/TracksMaterial.html":{},"classes/TracksMesh.html":{}}}],["colors",{"_index":730,"title":{},"body":{"classes/ColorOptions.html":{},"classes/TracksMaterial.html":{},"classes/TracksMesh.html":{},"changelog.html":{},"miscellaneous/variables.html":{}}}],["colortracksbyvertex",{"_index":621,"title":{},"body":{"classes/ColorManager.html":{}}}],["colortracksbyvertex(collectionname",{"_index":647,"title":{},"body":{"classes/ColorManager.html":{}}}],["colour",{"_index":3080,"title":{},"body":{"interfaces/Window.html":{}}}],["combine",{"_index":3388,"title":{},"body":{"changelog.html":{}}}],["commit",{"_index":3172,"title":{},"body":{"changelog.html":{}}}],["commits",{"_index":3171,"title":{},"body":{"changelog.html":{}}}],["common",{"_index":1942,"title":{},"body":{"interfaces/PhoenixUI.html":{},"changelog.html":{}}}],["complete",{"_index":3052,"title":{},"body":{"interfaces/Window.html":{},"changelog.html":{}}}],["completely",{"_index":3642,"title":{},"body":{"changelog.html":{}}}],["completes",{"_index":434,"title":{},"body":{"interfaces/AnimationPreset.html":{}}}],["component",{"_index":3252,"title":{},"body":{"changelog.html":{}}}],["components",{"_index":3697,"title":{},"body":{"changelog.html":{}}}],["composer",{"_index":1300,"title":{},"body":{"classes/EffectsManager.html":{}}}],["compound",{"_index":3376,"title":{},"body":{"changelog.html":{}}}],["computed",{"_index":1497,"title":{},"body":{"classes/Field.html":{},"classes/RungeKutta.html":{},"classes/State.html":{}}}],["coner",{"_index":3352,"title":{},"body":{"changelog.html":{}}}],["config",{"_index":1719,"title":{},"body":{"classes/PhoenixMenuNode.html":{},"classes/PhoenixMenuUI.html":{},"classes/StateManager.html":{},"classes/URLOptionsManager.html":{},"changelog.html":{},"miscellaneous/typealiases.html":{},"miscellaneous/variables.html":{}}}],["config.group",{"_index":850,"title":{},"body":{"classes/ColorOptions.html":{},"classes/PhoenixMenuNode.html":{}}}],["config.hidden",{"_index":851,"title":{},"body":{"classes/ColorOptions.html":{}}}],["config.onchange",{"_index":1785,"title":{},"body":{"classes/PhoenixMenuNode.html":{}}}],["config.onchange?.(config?.['color",{"_index":1781,"title":{},"body":{"classes/PhoenixMenuNode.html":{}}}],["config.onchange?.(config?.['ischecked",{"_index":1777,"title":{},"body":{"classes/PhoenixMenuNode.html":{}}}],["config.onchange?.(config?.['value",{"_index":1783,"title":{},"body":{"classes/PhoenixMenuNode.html":{}}}],["config.setenablemax?.(config?.['enablemax",{"_index":1789,"title":{},"body":{"classes/PhoenixMenuNode.html":{}}}],["config.setenablemin?.(config?.['enablemin",{"_index":1788,"title":{},"body":{"classes/PhoenixMenuNode.html":{}}}],["config.type",{"_index":1774,"title":{},"body":{"classes/PhoenixMenuNode.html":{}}}],["config?.['color",{"_index":1778,"title":{},"body":{"classes/PhoenixMenuNode.html":{}}}],["config?.['highvalue",{"_index":1787,"title":{},"body":{"classes/PhoenixMenuNode.html":{}}}],["config?.['ischecked",{"_index":1776,"title":{},"body":{"classes/PhoenixMenuNode.html":{}}}],["config?.['value",{"_index":1782,"title":{},"body":{"classes/PhoenixMenuNode.html":{}}}],["configactive",{"_index":1683,"title":{},"body":{"classes/PhoenixMenuNode.html":{}}}],["configbutton",{"_index":3831,"title":{},"body":{"miscellaneous/typealiases.html":{}}}],["configcheckbox",{"_index":3834,"title":{},"body":{"miscellaneous/typealiases.html":{}}}],["configcolor",{"_index":3835,"title":{},"body":{"miscellaneous/typealiases.html":{}}}],["configfile",{"_index":3905,"title":{},"body":{"miscellaneous/variables.html":{}}}],["configfunctions",{"_index":1104,"title":{},"body":{"classes/DatGUIMenuUI.html":{},"classes/PhoenixMenuUI.html":{},"interfaces/PhoenixUI.html":{}}}],["configlabel",{"_index":3836,"title":{},"body":{"miscellaneous/typealiases.html":{}}}],["configrangeslider",{"_index":3837,"title":{},"body":{"miscellaneous/typealiases.html":{}}}],["configs",{"_index":768,"title":{},"body":{"classes/ColorOptions.html":{},"classes/PhoenixMenuNode.html":{},"changelog.html":{}}}],["configselect",{"_index":3838,"title":{},"body":{"miscellaneous/typealiases.html":{}}}],["configslength",{"_index":1764,"title":{},"body":{"classes/PhoenixMenuNode.html":{}}}],["configslider",{"_index":3839,"title":{},"body":{"miscellaneous/typealiases.html":{}}}],["configstate",{"_index":1804,"title":{},"body":{"classes/PhoenixMenuNode.html":{}}}],["configstate['label",{"_index":1811,"title":{},"body":{"classes/PhoenixMenuNode.html":{}}}],["configstate['type",{"_index":1809,"title":{},"body":{"classes/PhoenixMenuNode.html":{}}}],["configstate[prop",{"_index":1814,"title":{},"body":{"classes/PhoenixMenuNode.html":{}}}],["configurable",{"_index":921,"title":{},"body":{"classes/CoordinateHelper.html":{},"classes/DatGUIMenuUI.html":{},"classes/PhoenixMenuUI.html":{},"interfaces/PhoenixUI.html":{}}}],["configuration",{"_index":852,"title":{"interfaces/Configuration.html":{}},"body":{"interfaces/Configuration.html":{},"classes/DatGUIMenuUI.html":{},"classes/ExportManager.html":{},"classes/PhoenixMenuNode.html":{},"classes/PhoenixMenuUI.html":{},"interfaces/PhoenixUI.html":{},"classes/URLOptionsManager.html":{},"interfaces/Window.html":{},"changelog.html":{},"coverage.html":{},"index.html":{},"miscellaneous/typealiases.html":{},"miscellaneous/variables.html":{}}}],["configuration.allowurloptions",{"_index":2908,"title":{},"body":{"interfaces/Window.html":{}}}],["configurations",{"_index":738,"title":{},"body":{"classes/ColorOptions.html":{}}}],["configure",{"_index":133,"title":{},"body":{"classes/ARManager.html":{},"classes/VRManager.html":{},"classes/XRManager.html":{}}}],["console",{"_index":2910,"title":{},"body":{"interfaces/Window.html":{}}}],["console.error",{"_index":1760,"title":{},"body":{"classes/PhoenixMenuNode.html":{}}}],["console.error('could",{"_index":2722,"title":{},"body":{"classes/URLOptionsManager.html":{}}}],["console.error('error",{"_index":2227,"title":{},"body":{"classes/ScriptLoader.html":{},"classes/URLOptionsManager.html":{}}}],["console.error(`${xrtype.touppercase",{"_index":3145,"title":{},"body":{"classes/XRManager.html":{}}}],["console.log",{"_index":2694,"title":{},"body":{"classes/URLOptionsManager.html":{},"classes/VRManager.html":{}}}],["console.log('loading",{"_index":2701,"title":{},"body":{"classes/URLOptionsManager.html":{}}}],["console.log('opening",{"_index":2713,"title":{},"body":{"classes/URLOptionsManager.html":{}}}],["console.log('setting",{"_index":2699,"title":{},"body":{"classes/URLOptionsManager.html":{}}}],["console.log('warning",{"_index":2697,"title":{},"body":{"classes/URLOptionsManager.html":{}}}],["console.warn('exception",{"_index":3891,"title":{},"body":{"miscellaneous/variables.html":{}}}],["const",{"_index":272,"title":{},"body":{"interfaces/AnimationPreset.html":{},"classes/CMSObjects.html":{},"classes/ColorManager.html":{},"classes/ColorOptions.html":{},"classes/CoordinateHelper.html":{},"classes/DatGUIMenuUI.html":{},"classes/EffectsManager.html":{},"classes/ExportManager.html":{},"classes/Field.html":{},"classes/LoadingManager.html":{},"classes/PhoenixMenuNode.html":{},"classes/PhoenixMenuUI.html":{},"classes/PrettySymbols.html":{},"classes/RKHelper.html":{},"classes/RendererManager.html":{},"classes/RungeKutta.html":{},"classes/ScriptLoader.html":{},"classes/SelectionManager.html":{},"classes/State.html":{},"classes/StateManager.html":{},"classes/TracksMaterial.html":{},"classes/TracksMesh.html":{},"classes/URLOptionsManager.html":{},"classes/VRManager.html":{},"interfaces/Window.html":{},"classes/XRManager.html":{},"index.html":{},"miscellaneous/variables.html":{}}}],["constant",{"_index":443,"title":{},"body":{"interfaces/AnimationPreset.html":{}}}],["constructing",{"_index":2496,"title":{},"body":{"classes/TracksMaterial.html":{},"classes/TracksMesh.html":{}}}],["constructor",{"_index":42,"title":{},"body":{"classes/ARManager.html":{},"classes/ActiveVariable.html":{},"interfaces/AnimationPreset.html":{},"classes/ColorManager.html":{},"classes/ColorOptions.html":{},"classes/Cut.html":{},"classes/DatGUIMenuUI.html":{},"classes/EffectsManager.html":{},"classes/LoadingManager.html":{},"classes/PhoenixMenuNode.html":{},"classes/PhoenixMenuUI.html":{},"classes/PresetView.html":{},"classes/RendererManager.html":{},"classes/SelectionManager.html":{},"classes/StateManager.html":{},"classes/TracksMaterial.html":{},"classes/TracksMesh.html":{},"classes/URLOptionsManager.html":{},"classes/VRManager.html":{},"classes/XRManager.html":{},"changelog.html":{}}}],["constructor(camera",{"_index":1308,"title":{},"body":{"classes/EffectsManager.html":{}}}],["constructor(colormanager",{"_index":701,"title":{},"body":{"classes/ColorOptions.html":{}}}],["constructor(configuration",{"_index":2891,"title":{},"body":{"interfaces/Window.html":{}}}],["constructor(elementid",{"_index":1057,"title":{},"body":{"classes/DatGUIMenuUI.html":{}}}],["constructor(eventdisplay",{"_index":2643,"title":{},"body":{"classes/URLOptionsManager.html":{}}}],["constructor(field",{"_index":992,"title":{},"body":{"classes/Cut.html":{}}}],["constructor(name",{"_index":1698,"title":{},"body":{"classes/PhoenixMenuNode.html":{},"classes/PresetView.html":{}}}],["constructor(params",{"_index":2472,"title":{},"body":{"classes/TracksMaterial.html":{},"classes/TracksMesh.html":{}}}],["constructor(phoenixmenuroot",{"_index":1840,"title":{},"body":{"classes/PhoenixMenuUI.html":{}}}],["constructor(private",{"_index":155,"title":{},"body":{"classes/ARManager.html":{},"classes/ColorManager.html":{},"classes/XRManager.html":{}}}],["constructor(public",{"_index":214,"title":{},"body":{"classes/ActiveVariable.html":{}}}],["constructor(scene",{"_index":43,"title":{},"body":{"classes/ARManager.html":{}}}],["constructor(scenemanager",{"_index":622,"title":{},"body":{"classes/ColorManager.html":{}}}],["constructor(sessiontype",{"_index":3127,"title":{},"body":{"classes/XRManager.html":{}}}],["constructor(value",{"_index":199,"title":{},"body":{"classes/ActiveVariable.html":{}}}],["containing",{"_index":88,"title":{},"body":{"classes/ARManager.html":{},"interfaces/AnimationPreset.html":{},"classes/ColorOptions.html":{},"classes/DatGUIMenuUI.html":{},"interfaces/EventDataLoader.html":{},"classes/Field.html":{},"classes/InfoLogger.html":{},"classes/PhoenixMenuNode.html":{},"classes/PhoenixMenuUI.html":{},"classes/RKHelper.html":{},"classes/RungeKutta.html":{},"classes/SelectionManager.html":{},"classes/State.html":{},"classes/URLOptionsManager.html":{},"classes/VRManager.html":{},"interfaces/Window.html":{},"classes/XRManager.html":{}}}],["containingevent",{"_index":3056,"title":{},"body":{"interfaces/Window.html":{}}}],["containment",{"_index":2112,"title":{},"body":{"classes/RendererManager.html":{}}}],["contains",{"_index":1417,"title":{},"body":{"interfaces/EventDataLoader.html":{},"classes/InfoLogger.html":{},"classes/RendererManager.html":{}}}],["containsobject",{"_index":2087,"title":{},"body":{"classes/RendererManager.html":{}}}],["containsobject(obj",{"_index":2110,"title":{},"body":{"classes/RendererManager.html":{}}}],["content",{"_index":2987,"title":{},"body":{"interfaces/Window.html":{}}}],["contents",{"_index":1876,"title":{},"body":{"classes/PhoenixMenuUI.html":{},"miscellaneous/variables.html":{}}}],["contenttype",{"_index":3896,"title":{},"body":{"miscellaneous/variables.html":{}}}],["continue",{"_index":2051,"title":{},"body":{"classes/RKHelper.html":{}}}],["contributors",{"_index":3826,"title":{},"body":{"properties.html":{}}}],["controller",{"_index":2790,"title":{},"body":{"classes/VRManager.html":{},"changelog.html":{}}}],["controller1",{"_index":2782,"title":{},"body":{"classes/VRManager.html":{}}}],["controller2",{"_index":2783,"title":{},"body":{"classes/VRManager.html":{}}}],["controllergrip1",{"_index":2784,"title":{},"body":{"classes/VRManager.html":{}}}],["controllergrip2",{"_index":2785,"title":{},"body":{"classes/VRManager.html":{}}}],["controllermodelfactory",{"_index":2831,"title":{},"body":{"classes/VRManager.html":{}}}],["controllermodelfactory.createcontrollermodel(this.controllergrip1",{"_index":2835,"title":{},"body":{"classes/VRManager.html":{}}}],["controllermodelfactory.createcontrollermodel(this.controllergrip2",{"_index":2840,"title":{},"body":{"classes/VRManager.html":{}}}],["controllers",{"_index":2824,"title":{},"body":{"classes/VRManager.html":{}}}],["controls",{"_index":1061,"title":{},"body":{"classes/DatGUIMenuUI.html":{},"interfaces/EventDataLoader.html":{},"classes/PhoenixMenuUI.html":{},"classes/VRManager.html":{},"interfaces/Window.html":{},"changelog.html":{}}}],["controlsmanager",{"_index":3754,"title":{},"body":{"coverage.html":{}}}],["conventional",{"_index":3170,"title":{},"body":{"changelog.html":{}}}],["conversions",{"_index":899,"title":{},"body":{"classes/CoordinateHelper.html":{}}}],["convert",{"_index":938,"title":{},"body":{"classes/CoordinateHelper.html":{}}}],["coordinate",{"_index":898,"title":{},"body":{"classes/CoordinateHelper.html":{},"classes/RKHelper.html":{},"changelog.html":{}}}],["coordinatehelper",{"_index":894,"title":{"classes/CoordinateHelper.html":{}},"body":{"classes/CoordinateHelper.html":{},"classes/RKHelper.html":{},"changelog.html":{},"coverage.html":{}}}],["coords",{"_index":919,"title":{},"body":{"classes/CoordinateHelper.html":{}}}],["copy",{"_index":2008,"title":{},"body":{"classes/PrettySymbols.html":{}}}],["copy(new",{"_index":3158,"title":{},"body":{"classes/XRManager.html":{}}}],["correct",{"_index":3650,"title":{},"body":{"changelog.html":{}}}],["correctly",{"_index":3228,"title":{},"body":{"changelog.html":{}}}],["count",{"_index":346,"title":{},"body":{"interfaces/AnimationPreset.html":{}}}],["counter",{"_index":2479,"title":{},"body":{"classes/TracksMaterial.html":{},"classes/TracksMesh.html":{}}}],["coverage",{"_index":3711,"title":{"coverage.html":{}},"body":{"coverage.html":{}}}],["covering",{"_index":425,"title":{},"body":{"interfaces/AnimationPreset.html":{}}}],["cpu",{"_index":3582,"title":{},"body":{"changelog.html":{}}}],["create",{"_index":49,"title":{},"body":{"classes/ARManager.html":{},"classes/ActiveVariable.html":{},"interfaces/AnimationPreset.html":{},"classes/ColorManager.html":{},"classes/ColorOptions.html":{},"classes/Cut.html":{},"classes/DatGUIMenuUI.html":{},"classes/LoadingManager.html":{},"classes/PhoenixMenuNode.html":{},"classes/PhoenixMenuUI.html":{},"classes/PresetView.html":{},"classes/PrettySymbols.html":{},"classes/RendererManager.html":{},"classes/StateManager.html":{},"classes/TracksMaterial.html":{},"classes/TracksMesh.html":{},"classes/VRManager.html":{},"interfaces/Window.html":{},"classes/XRManager.html":{},"changelog.html":{},"index.html":{},"miscellaneous/variables.html":{}}}],["created",{"_index":140,"title":{},"body":{"classes/ARManager.html":{},"classes/PhoenixMenuNode.html":{},"classes/VRManager.html":{},"interfaces/Window.html":{},"classes/XRManager.html":{}}}],["creating",{"_index":2474,"title":{},"body":{"classes/TracksMaterial.html":{},"classes/TracksMesh.html":{},"interfaces/Window.html":{}}}],["crop",{"_index":2922,"title":{},"body":{"interfaces/Window.html":{}}}],["cropped",{"_index":2923,"title":{},"body":{"interfaces/Window.html":{}}}],["cross(b_last",{"_index":1545,"title":{},"body":{"classes/Field.html":{},"classes/RungeKutta.html":{},"classes/State.html":{}}}],["cross(b_middle",{"_index":1535,"title":{},"body":{"classes/Field.html":{},"classes/RungeKutta.html":{},"classes/State.html":{}}}],["curently",{"_index":1445,"title":{},"body":{"classes/ExportManager.html":{}}}],["curp",{"_index":2578,"title":{},"body":{"classes/TracksMaterial.html":{},"classes/TracksMesh.html":{}}}],["current",{"_index":121,"title":{},"body":{"classes/ARManager.html":{},"interfaces/AnimationPreset.html":{},"interfaces/Configuration.html":{},"interfaces/EventDataLoader.html":{},"classes/Field.html":{},"classes/PhoenixMenuNode.html":{},"classes/RendererManager.html":{},"classes/RungeKutta.html":{},"classes/State.html":{},"classes/StateManager.html":{},"classes/VRManager.html":{},"interfaces/Window.html":{},"classes/XRManager.html":{}}}],["currently",{"_index":92,"title":{},"body":{"classes/ARManager.html":{},"interfaces/AnimationPreset.html":{},"classes/ColorOptions.html":{},"classes/ExportManager.html":{},"classes/SelectionManager.html":{},"classes/VRManager.html":{},"interfaces/Window.html":{},"classes/XRManager.html":{}}}],["currentxrsession",{"_index":27,"title":{},"body":{"classes/ARManager.html":{},"classes/VRManager.html":{},"classes/XRManager.html":{}}}],["custom",{"_index":644,"title":{},"body":{"classes/ColorManager.html":{},"classes/TracksMaterial.html":{},"classes/TracksMesh.html":{}}}],["customcheck",{"_index":638,"title":{},"body":{"classes/ColorManager.html":{}}}],["customcheck(object.userdata",{"_index":655,"title":{},"body":{"classes/ColorManager.html":{}}}],["customize",{"_index":2889,"title":{},"body":{"interfaces/Window.html":{}}}],["cut",{"_index":974,"title":{"classes/Cut.html":{}},"body":{"classes/Cut.html":{},"classes/DatGUIMenuUI.html":{},"classes/PhoenixMenuUI.html":{},"interfaces/PhoenixUI.html":{},"changelog.html":{},"coverage.html":{}}}],["cut.enablemaxcut(checked",{"_index":1923,"title":{},"body":{"classes/PhoenixMenuUI.html":{}}}],["cut.enablemincut(checked",{"_index":1921,"title":{},"body":{"classes/PhoenixMenuUI.html":{}}}],["cut.field",{"_index":1242,"title":{},"body":{"classes/DatGUIMenuUI.html":{}}}],["cut.maxcutactive",{"_index":1918,"title":{},"body":{"classes/PhoenixMenuUI.html":{}}}],["cut.maxvalue",{"_index":1240,"title":{},"body":{"classes/DatGUIMenuUI.html":{},"classes/PhoenixMenuUI.html":{}}}],["cut.mincutactive",{"_index":1916,"title":{},"body":{"classes/PhoenixMenuUI.html":{}}}],["cut.minvalue",{"_index":1239,"title":{},"body":{"classes/DatGUIMenuUI.html":{},"classes/PhoenixMenuUI.html":{}}}],["cut.reset",{"_index":1910,"title":{},"body":{"classes/PhoenixMenuUI.html":{}}}],["cut.step",{"_index":1914,"title":{},"body":{"classes/PhoenixMenuUI.html":{}}}],["cutpassed",{"_index":988,"title":{},"body":{"classes/Cut.html":{}}}],["cutpassed(value",{"_index":1014,"title":{},"body":{"classes/Cut.html":{}}}],["cuts",{"_index":1076,"title":{},"body":{"classes/DatGUIMenuUI.html":{},"classes/PhoenixMenuUI.html":{},"interfaces/PhoenixUI.html":{},"changelog.html":{}}}],["cuts.length",{"_index":1900,"title":{},"body":{"classes/PhoenixMenuUI.html":{}}}],["cutsfolder",{"_index":1234,"title":{},"body":{"classes/DatGUIMenuUI.html":{}}}],["cutsoptionsnode",{"_index":1907,"title":{},"body":{"classes/PhoenixMenuUI.html":{}}}],["cutsoptionsnode.addconfig('rangeslider",{"_index":1912,"title":{},"body":{"classes/PhoenixMenuUI.html":{}}}],["cycle",{"_index":3254,"title":{},"body":{"changelog.html":{}}}],["d0",{"_index":2071,"title":{},"body":{"classes/RKHelper.html":{}}}],["d207bad",{"_index":3578,"title":{},"body":{"changelog.html":{}}}],["d2874b8",{"_index":3564,"title":{},"body":{"changelog.html":{}}}],["d2c02d5",{"_index":3273,"title":{},"body":{"changelog.html":{}}}],["d2e0547",{"_index":3450,"title":{},"body":{"changelog.html":{}}}],["d3920c4",{"_index":3673,"title":{},"body":{"changelog.html":{}}}],["d4866ea",{"_index":3279,"title":{},"body":{"changelog.html":{}}}],["d4b62c2",{"_index":3354,"title":{},"body":{"changelog.html":{}}}],["d677089",{"_index":3598,"title":{},"body":{"changelog.html":{}}}],["d90e3a6",{"_index":3599,"title":{},"body":{"changelog.html":{}}}],["da3ead5",{"_index":3655,"title":{},"body":{"changelog.html":{}}}],["dark",{"_index":880,"title":{},"body":{"interfaces/Configuration.html":{}}}],["dat.gui",{"_index":874,"title":{},"body":{"interfaces/Configuration.html":{},"classes/DatGUIMenuUI.html":{},"classes/URLOptionsManager.html":{},"interfaces/Window.html":{},"changelog.html":{},"dependencies.html":{}}}],["data",{"_index":258,"title":{},"body":{"interfaces/AnimationPreset.html":{},"classes/ColorManager.html":{},"classes/ColorOptions.html":{},"interfaces/Configuration.html":{},"classes/Cut.html":{},"classes/DatGUIMenuUI.html":{},"interfaces/EventDataLoader.html":{},"classes/ExportManager.html":{},"classes/InfoLogger.html":{},"classes/PhoenixMenuUI.html":{},"interfaces/PhoenixUI.html":{},"classes/ScriptLoader.html":{},"classes/SelectionManager.html":{},"classes/URLOptionsManager.html":{},"interfaces/Window.html":{},"changelog.html":{},"coverage.html":{},"miscellaneous/enumerations.html":{},"index.html":{},"miscellaneous/variables.html":{}}}],["data.json",{"_index":3799,"title":{},"body":{"index.html":{}}}],["datguimenuui",{"_index":1031,"title":{"classes/DatGUIMenuUI.html":{}},"body":{"classes/DatGUIMenuUI.html":{},"coverage.html":{}}}],["db261a6",{"_index":3609,"title":{},"body":{"changelog.html":{}}}],["db3ca8b",{"_index":3487,"title":{},"body":{"changelog.html":{}}}],["dc05ed9",{"_index":3610,"title":{},"body":{"changelog.html":{}}}],["dc140dd",{"_index":3631,"title":{},"body":{"changelog.html":{}}}],["dc5d489",{"_index":3622,"title":{},"body":{"changelog.html":{}}}],["dc7d74a",{"_index":3357,"title":{},"body":{"changelog.html":{}}}],["dcb4c88",{"_index":3205,"title":{},"body":{"changelog.html":{}}}],["dcf6cec",{"_index":3653,"title":{},"body":{"changelog.html":{}}}],["debug",{"_index":3405,"title":{},"body":{"changelog.html":{}}}],["debugging",{"_index":3415,"title":{},"body":{"changelog.html":{}}}],["declare",{"_index":2881,"title":{},"body":{"interfaces/Window.html":{}}}],["default",{"_index":57,"title":{},"body":{"classes/ARManager.html":{},"classes/ActiveVariable.html":{},"classes/ColorOptions.html":{},"interfaces/Configuration.html":{},"classes/Cut.html":{},"classes/DatGUIMenuUI.html":{},"classes/EffectsManager.html":{},"classes/Field.html":{},"classes/InfoLogger.html":{},"classes/LoadingManager.html":{},"classes/PhoenixMenuNode.html":{},"classes/PhoenixMenuUI.html":{},"interfaces/PhoenixUI.html":{},"classes/PresetView.html":{},"classes/PrettySymbols.html":{},"classes/RKHelper.html":{},"classes/RendererManager.html":{},"classes/RungeKutta.html":{},"classes/ScriptLoader.html":{},"classes/SelectionManager.html":{},"classes/State.html":{},"classes/StateManager.html":{},"classes/URLOptionsManager.html":{},"classes/VRManager.html":{},"interfaces/Window.html":{},"classes/XRManager.html":{},"changelog.html":{},"miscellaneous/variables.html":{}}}],["defaultanimationpresets",{"_index":3766,"title":{},"body":{"coverage.html":{},"miscellaneous/variables.html":{}}}],["defaultapplymaxvalue",{"_index":979,"title":{},"body":{"classes/Cut.html":{}}}],["defaultapplyminvalue",{"_index":980,"title":{},"body":{"classes/Cut.html":{}}}],["defaulteventfile",{"_index":856,"title":{},"body":{"interfaces/Configuration.html":{}}}],["defaulteventpath",{"_index":2654,"title":{},"body":{"classes/URLOptionsManager.html":{}}}],["defaulteventtype",{"_index":2651,"title":{},"body":{"classes/URLOptionsManager.html":{}}}],["defaultmaxvalue",{"_index":981,"title":{},"body":{"classes/Cut.html":{}}}],["defaultminvalue",{"_index":982,"title":{},"body":{"classes/Cut.html":{}}}],["defaultrenderpass",{"_index":1301,"title":{},"body":{"classes/EffectsManager.html":{}}}],["defaults",{"_index":2202,"title":{},"body":{"classes/ScriptLoader.html":{},"classes/URLOptionsManager.html":{}}}],["defaultview",{"_index":857,"title":{},"body":{"interfaces/Configuration.html":{},"changelog.html":{}}}],["define",{"_index":1487,"title":{},"body":{"classes/Field.html":{},"classes/PresetView.html":{},"index.html":{}}}],["defined",{"_index":47,"title":{},"body":{"classes/ARManager.html":{},"classes/ActiveVariable.html":{},"classes/CMSObjects.html":{},"classes/ColorManager.html":{},"classes/ColorOptions.html":{},"classes/CoordinateHelper.html":{},"classes/Cut.html":{},"classes/DatGUIMenuUI.html":{},"classes/EffectsManager.html":{},"interfaces/EventDataLoader.html":{},"classes/ExportManager.html":{},"classes/Field.html":{},"classes/InfoLogger.html":{},"classes/LoadingManager.html":{},"classes/PhoenixMenuNode.html":{},"classes/PhoenixMenuUI.html":{},"interfaces/PhoenixUI.html":{},"classes/PresetView.html":{},"classes/PrettySymbols.html":{},"classes/RKHelper.html":{},"classes/RendererManager.html":{},"classes/RungeKutta.html":{},"classes/ScriptLoader.html":{},"classes/SelectionManager.html":{},"classes/State.html":{},"classes/StateManager.html":{},"classes/TracksMaterial.html":{},"classes/TracksMesh.html":{},"classes/URLOptionsManager.html":{},"classes/VRManager.html":{},"classes/XRManager.html":{}}}],["defining",{"_index":3075,"title":{},"body":{"interfaces/Window.html":{}}}],["definition",{"_index":940,"title":{},"body":{"classes/CoordinateHelper.html":{}}}],["delete",{"_index":1761,"title":{},"body":{"classes/PhoenixMenuNode.html":{},"classes/PrettySymbols.html":{},"interfaces/Window.html":{},"changelog.html":{}}}],["deleted",{"_index":1200,"title":{},"body":{"classes/DatGUIMenuUI.html":{}}}],["deleting",{"_index":1192,"title":{},"body":{"classes/DatGUIMenuUI.html":{}}}],["dependencies",{"_index":3770,"title":{"dependencies.html":{}},"body":{"dependencies.html":{}}}],["dependency",{"_index":3302,"title":{},"body":{"changelog.html":{}}}],["deployment",{"_index":3708,"title":{},"body":{"changelog.html":{}}}],["depth",{"_index":1893,"title":{},"body":{"classes/PhoenixMenuUI.html":{}}}],["depthpackingstrategies",{"_index":891,"title":{},"body":{"interfaces/Configuration.html":{}}}],["depthtest",{"_index":1084,"title":{},"body":{"classes/DatGUIMenuUI.html":{},"classes/PhoenixMenuUI.html":{},"interfaces/PhoenixUI.html":{}}}],["depthtestmenu",{"_index":1208,"title":{},"body":{"classes/DatGUIMenuUI.html":{}}}],["depthtestmenu.onchange((value",{"_index":1211,"title":{},"body":{"classes/DatGUIMenuUI.html":{}}}],["descendants",{"_index":1740,"title":{},"body":{"classes/PhoenixMenuNode.html":{}}}],["describe",{"_index":1966,"title":{},"body":{"classes/PresetView.html":{}}}],["description",{"_index":9,"title":{},"body":{"classes/ARManager.html":{},"classes/ActiveVariable.html":{},"interfaces/AnimationPreset.html":{},"classes/CMSObjects.html":{},"classes/ColorManager.html":{},"classes/ColorOptions.html":{},"interfaces/Configuration.html":{},"classes/CoordinateHelper.html":{},"classes/Cut.html":{},"classes/DatGUIMenuUI.html":{},"classes/EffectsManager.html":{},"interfaces/EventDataLoader.html":{},"classes/ExportManager.html":{},"classes/Field.html":{},"classes/InfoLogger.html":{},"classes/LoadingManager.html":{},"classes/PhoenixMenuNode.html":{},"classes/PhoenixMenuUI.html":{},"interfaces/PhoenixUI.html":{},"classes/PresetView.html":{},"classes/PrettySymbols.html":{},"classes/RKHelper.html":{},"classes/RendererManager.html":{},"classes/RungeKutta.html":{},"classes/ScriptLoader.html":{},"classes/SelectionManager.html":{},"classes/State.html":{},"classes/StateManager.html":{},"classes/TracksMaterial.html":{},"classes/TracksMesh.html":{},"classes/URLOptionsManager.html":{},"classes/VRManager.html":{},"interfaces/Window.html":{},"classes/XRManager.html":{},"properties.html":{}}}],["desired",{"_index":1403,"title":{},"body":{"interfaces/EventDataLoader.html":{},"interfaces/Window.html":{}}}],["detector",{"_index":292,"title":{},"body":{"interfaces/AnimationPreset.html":{},"classes/DatGUIMenuUI.html":{},"classes/PhoenixMenuUI.html":{},"interfaces/PhoenixUI.html":{},"interfaces/Window.html":{},"index.html":{}}}],["detectoropacity",{"_index":1156,"title":{},"body":{"classes/DatGUIMenuUI.html":{}}}],["determine",{"_index":3353,"title":{},"body":{"changelog.html":{}}}],["dev",{"_index":3326,"title":{},"body":{"changelog.html":{}}}],["df425ee",{"_index":3436,"title":{},"body":{"changelog.html":{}}}],["df9ce07",{"_index":3417,"title":{},"body":{"changelog.html":{}}}],["dfbc6a2",{"_index":3313,"title":{},"body":{"changelog.html":{}}}],["dfe8e8d",{"_index":3401,"title":{},"body":{"changelog.html":{}}}],["dflt_colors",{"_index":3029,"title":{},"body":{"interfaces/Window.html":{}}}],["dialog",{"_index":3513,"title":{},"body":{"changelog.html":{}}}],["different",{"_index":1060,"title":{},"body":{"classes/DatGUIMenuUI.html":{},"interfaces/EventDataLoader.html":{},"classes/PhoenixMenuNode.html":{},"classes/PhoenixMenuUI.html":{},"interfaces/Window.html":{},"miscellaneous/variables.html":{}}}],["differently",{"_index":3395,"title":{},"body":{"changelog.html":{}}}],["dimensional",{"_index":525,"title":{},"body":{"interfaces/AnimationPreset.html":{}}}],["dir",{"_index":1584,"title":{},"body":{"classes/Field.html":{},"classes/RungeKutta.html":{},"classes/State.html":{},"classes/TracksMaterial.html":{},"classes/TracksMesh.html":{}}}],["dir.x",{"_index":2590,"title":{},"body":{"classes/TracksMaterial.html":{},"classes/TracksMesh.html":{}}}],["dir.y",{"_index":2589,"title":{},"body":{"classes/TracksMaterial.html":{},"classes/TracksMesh.html":{}}}],["direction",{"_index":1577,"title":{},"body":{"classes/Field.html":{},"classes/RungeKutta.html":{},"classes/State.html":{},"classes/VRManager.html":{},"changelog.html":{}}}],["directionallight",{"_index":2292,"title":{},"body":{"classes/SelectionManager.html":{}}}],["directionallight().type",{"_index":2302,"title":{},"body":{"classes/SelectionManager.html":{}}}],["directly",{"_index":3806,"title":{},"body":{"index.html":{}}}],["directory",{"_index":3810,"title":{},"body":{"index.html":{}}}],["disable",{"_index":2270,"title":{},"body":{"classes/SelectionManager.html":{},"interfaces/Window.html":{},"changelog.html":{}}}],["disabled",{"_index":1314,"title":{},"body":{"classes/EffectsManager.html":{},"classes/RendererManager.html":{},"classes/SelectionManager.html":{}}}],["disableselecting",{"_index":2243,"title":{},"body":{"classes/SelectionManager.html":{}}}],["disappearing",{"_index":3298,"title":{},"body":{"changelog.html":{}}}],["discard",{"_index":2601,"title":{},"body":{"classes/TracksMaterial.html":{},"classes/TracksMesh.html":{}}}],["display",{"_index":854,"title":{},"body":{"interfaces/Configuration.html":{},"classes/EffectsManager.html":{},"interfaces/EventDataLoader.html":{},"classes/InfoLogger.html":{},"classes/RendererManager.html":{},"classes/SelectionManager.html":{},"classes/StateManager.html":{},"classes/URLOptionsManager.html":{},"classes/VRManager.html":{},"interfaces/Window.html":{},"changelog.html":{},"index.html":{},"properties.html":{}}}],["display#readme",{"_index":3820,"title":{},"body":{"properties.html":{}}}],["display's",{"_index":260,"title":{},"body":{"interfaces/AnimationPreset.html":{},"classes/ExportManager.html":{},"classes/RendererManager.html":{},"classes/SelectionManager.html":{},"interfaces/Window.html":{}}}],["display.ts",{"_index":2868,"title":{},"body":{"interfaces/Window.html":{},"coverage.html":{}}}],["displayed",{"_index":1408,"title":{},"body":{"interfaces/EventDataLoader.html":{},"interfaces/Window.html":{}}}],["displaying",{"_index":3331,"title":{},"body":{"changelog.html":{}}}],["displayusage",{"_index":3795,"title":{},"body":{"index.html":{}}}],["dist/bundle",{"_index":3809,"title":{},"body":{"index.html":{}}}],["distance",{"_index":444,"title":{},"body":{"interfaces/AnimationPreset.html":{},"classes/VRManager.html":{}}}],["distancefromorigin",{"_index":477,"title":{},"body":{"interfaces/AnimationPreset.html":{}}}],["divide",{"_index":3461,"title":{},"body":{"changelog.html":{}}}],["dividescalar(previousscale",{"_index":381,"title":{},"body":{"interfaces/AnimationPreset.html":{}}}],["docs",{"_index":3274,"title":{},"body":{"changelog.html":{}}}],["document",{"_index":2312,"title":{},"body":{"classes/SelectionManager.html":{},"classes/URLOptionsManager.html":{}}}],["document.body",{"_index":167,"title":{},"body":{"classes/ARManager.html":{},"classes/DatGUIMenuUI.html":{},"classes/RendererManager.html":{}}}],["document.body.style.removeproperty('background",{"_index":178,"title":{},"body":{"classes/ARManager.html":{}}}],["document.body.style.setproperty('background",{"_index":168,"title":{},"body":{"classes/ARManager.html":{}}}],["document.createelement('a",{"_index":3919,"title":{},"body":{"miscellaneous/variables.html":{}}}],["document.createelement('input",{"_index":3900,"title":{},"body":{"miscellaneous/variables.html":{}}}],["document.createelement('script",{"_index":2218,"title":{},"body":{"classes/ScriptLoader.html":{}}}],["document.getelementbyid('gui",{"_index":1132,"title":{},"body":{"classes/DatGUIMenuUI.html":{}}}],["document.getelementbyid(elementid",{"_index":1126,"title":{},"body":{"classes/DatGUIMenuUI.html":{},"classes/RendererManager.html":{}}}],["document.getelementsbytagname('head')[0",{"_index":2206,"title":{},"body":{"classes/ScriptLoader.html":{}}}],["document.queryselectorall",{"_index":2214,"title":{},"body":{"classes/ScriptLoader.html":{}}}],["documentation",{"_index":3500,"title":{},"body":{"changelog.html":{},"coverage.html":{}}}],["documented",{"_index":3169,"title":{},"body":{"changelog.html":{}}}],["doesn't",{"_index":2759,"title":{},"body":{"classes/URLOptionsManager.html":{}}}],["dof",{"_index":1993,"title":{},"body":{"classes/PrettySymbols.html":{}}}],["dom",{"_index":63,"title":{},"body":{"classes/ARManager.html":{},"classes/RendererManager.html":{},"changelog.html":{}}}],["domoverlay",{"_index":165,"title":{},"body":{"classes/ARManager.html":{}}}],["don't",{"_index":2009,"title":{},"body":{"classes/PrettySymbols.html":{}}}],["done",{"_index":2924,"title":{},"body":{"interfaces/Window.html":{}}}],["dosplay",{"_index":3477,"title":{},"body":{"changelog.html":{}}}],["doubleside",{"_index":560,"title":{},"body":{"classes/CMSObjects.html":{}}}],["doublesided",{"_index":2974,"title":{},"body":{"interfaces/Window.html":{}}}],["download",{"_index":3926,"title":{},"body":{"miscellaneous/variables.html":{}}}],["dparams",{"_index":2023,"title":{},"body":{"classes/PrettySymbols.html":{},"classes/RKHelper.html":{}}}],["dparams[0",{"_index":2072,"title":{},"body":{"classes/RKHelper.html":{}}}],["dparams[1",{"_index":2074,"title":{},"body":{"classes/RKHelper.html":{}}}],["dparams[2",{"_index":2075,"title":{},"body":{"classes/RKHelper.html":{}}}],["dparams[3",{"_index":2076,"title":{},"body":{"classes/RKHelper.html":{}}}],["dparams[4",{"_index":820,"title":{},"body":{"classes/ColorOptions.html":{},"classes/RKHelper.html":{}}}],["draw",{"_index":1394,"title":{},"body":{"interfaces/EventDataLoader.html":{},"classes/PhoenixMenuUI.html":{}}}],["drawing",{"_index":3486,"title":{},"body":{"changelog.html":{}}}],["drawoptionsnode",{"_index":1924,"title":{},"body":{"classes/PhoenixMenuUI.html":{}}}],["drawoptionsnode.addconfig('checkbox",{"_index":1927,"title":{},"body":{"classes/PhoenixMenuUI.html":{}}}],["drawoptionsnode.addconfig('slider",{"_index":1926,"title":{},"body":{"classes/PhoenixMenuUI.html":{}}}],["drawrange",{"_index":345,"title":{},"body":{"interfaces/AnimationPreset.html":{}}}],["driven",{"_index":3789,"title":{},"body":{"index.html":{}}}],["drop",{"_index":3580,"title":{},"body":{"changelog.html":{}}}],["duration",{"_index":232,"title":{},"body":{"interfaces/AnimationPreset.html":{},"interfaces/Window.html":{},"miscellaneous/variables.html":{}}}],["dynamically",{"_index":2193,"title":{},"body":{"classes/ScriptLoader.html":{}}}],["e",{"_index":3904,"title":{},"body":{"miscellaneous/variables.html":{}}}],["e.target?.files[0",{"_index":3906,"title":{},"body":{"miscellaneous/variables.html":{}}}],["e07725a",{"_index":3449,"title":{},"body":{"changelog.html":{}}}],["e10a68d",{"_index":3601,"title":{},"body":{"changelog.html":{}}}],["e152933",{"_index":3231,"title":{},"body":{"changelog.html":{}}}],["e297c98",{"_index":3651,"title":{},"body":{"changelog.html":{}}}],["e2e",{"_index":3223,"title":{},"body":{"changelog.html":{}}}],["e6f69a0",{"_index":3596,"title":{},"body":{"changelog.html":{}}}],["e96136b",{"_index":3593,"title":{},"body":{"changelog.html":{}}}],["e9f1bc9",{"_index":3625,"title":{},"body":{"changelog.html":{}}}],["each",{"_index":235,"title":{},"body":{"interfaces/AnimationPreset.html":{},"classes/ColorOptions.html":{},"interfaces/EventDataLoader.html":{},"classes/LoadingManager.html":{},"interfaces/Window.html":{},"changelog.html":{}}}],["easily",{"_index":1953,"title":{},"body":{"classes/PresetView.html":{}}}],["easing",{"_index":234,"title":{},"body":{"interfaces/AnimationPreset.html":{}}}],["easing.cubic.out",{"_index":290,"title":{},"body":{"interfaces/AnimationPreset.html":{}}}],["easing.linear.none",{"_index":271,"title":{},"body":{"interfaces/AnimationPreset.html":{}}}],["edcd567",{"_index":3489,"title":{},"body":{"changelog.html":{}}}],["edges",{"_index":605,"title":{},"body":{"classes/CMSObjects.html":{}}}],["edgesgeometry",{"_index":558,"title":{},"body":{"classes/CMSObjects.html":{}}}],["edgesgeometry(boxbuffer",{"_index":607,"title":{},"body":{"classes/CMSObjects.html":{}}}],["edit",{"_index":388,"title":{},"body":{"interfaces/AnimationPreset.html":{}}}],["edm4hepjsonloader",{"_index":3737,"title":{},"body":{"coverage.html":{}}}],["edward's",{"_index":3639,"title":{},"body":{"changelog.html":{}}}],["effect",{"_index":1318,"title":{},"body":{"classes/EffectsManager.html":{}}}],["effectcomposer",{"_index":1316,"title":{},"body":{"classes/EffectsManager.html":{}}}],["effectcomposer(renderer",{"_index":1345,"title":{},"body":{"classes/EffectsManager.html":{}}}],["effects",{"_index":1294,"title":{},"body":{"classes/EffectsManager.html":{},"classes/SelectionManager.html":{},"changelog.html":{}}}],["effectsmanager",{"_index":1292,"title":{"classes/EffectsManager.html":{}},"body":{"classes/EffectsManager.html":{},"classes/SelectionManager.html":{},"coverage.html":{}}}],["effectsrender",{"_index":1305,"title":{},"body":{"classes/EffectsManager.html":{}}}],["effectsrender(scene",{"_index":1332,"title":{},"body":{"classes/EffectsManager.html":{}}}],["electrons",{"_index":3333,"title":{},"body":{"changelog.html":{}}}],["element",{"_index":873,"title":{},"body":{"interfaces/Configuration.html":{},"classes/DatGUIMenuUI.html":{},"classes/RendererManager.html":{},"classes/ScriptLoader.html":{},"classes/URLOptionsManager.html":{},"miscellaneous/variables.html":{}}}],["elementid",{"_index":858,"title":{},"body":{"interfaces/Configuration.html":{},"classes/DatGUIMenuUI.html":{},"classes/RendererManager.html":{},"index.html":{}}}],["elements",{"_index":1328,"title":{},"body":{"classes/EffectsManager.html":{},"classes/SelectionManager.html":{},"interfaces/Window.html":{}}}],["embed",{"_index":2648,"title":{},"body":{"classes/URLOptionsManager.html":{},"changelog.html":{},"miscellaneous/variables.html":{}}}],["empty",{"_index":2664,"title":{},"body":{"classes/URLOptionsManager.html":{},"interfaces/Window.html":{},"changelog.html":{}}}],["enable",{"_index":62,"title":{},"body":{"classes/ARManager.html":{},"interfaces/Configuration.html":{},"classes/SelectionManager.html":{},"classes/URLOptionsManager.html":{},"interfaces/Window.html":{}}}],["enabled",{"_index":1313,"title":{},"body":{"classes/EffectsManager.html":{},"classes/RendererManager.html":{},"classes/SelectionManager.html":{},"classes/StateManager.html":{}}}],["enabledatguimenu",{"_index":859,"title":{},"body":{"interfaces/Configuration.html":{}}}],["enabledomoverlay",{"_index":19,"title":{},"body":{"classes/ARManager.html":{}}}],["enableeventdisplayconsole",{"_index":3074,"title":{},"body":{"interfaces/Window.html":{}}}],["enablekeyboardcontrols",{"_index":3106,"title":{},"body":{"interfaces/Window.html":{}}}],["enablemax",{"_index":1917,"title":{},"body":{"classes/PhoenixMenuUI.html":{}}}],["enablemaxcut",{"_index":989,"title":{},"body":{"classes/Cut.html":{}}}],["enablemaxcut(check",{"_index":1017,"title":{},"body":{"classes/Cut.html":{}}}],["enablemin",{"_index":1915,"title":{},"body":{"classes/PhoenixMenuUI.html":{}}}],["enablemincut",{"_index":990,"title":{},"body":{"classes/Cut.html":{}}}],["enablemincut(check",{"_index":1020,"title":{},"body":{"classes/Cut.html":{}}}],["enables",{"_index":3073,"title":{},"body":{"interfaces/Window.html":{}}}],["enableselecting",{"_index":2244,"title":{},"body":{"classes/SelectionManager.html":{}}}],["enableselecting(enable",{"_index":3096,"title":{},"body":{"interfaces/Window.html":{}}}],["enabling",{"_index":2266,"title":{},"body":{"classes/SelectionManager.html":{}}}],["enabling/disabling",{"_index":1146,"title":{},"body":{"classes/DatGUIMenuUI.html":{}}}],["end",{"_index":120,"title":{},"body":{"classes/ARManager.html":{},"interfaces/AnimationPreset.html":{},"classes/VRManager.html":{},"interfaces/Window.html":{},"classes/XRManager.html":{}}}],["end.chain(startclone",{"_index":312,"title":{},"body":{"interfaces/AnimationPreset.html":{}}}],["ended",{"_index":318,"title":{},"body":{"interfaces/AnimationPreset.html":{},"interfaces/Window.html":{}}}],["ends",{"_index":98,"title":{},"body":{"classes/ARManager.html":{},"interfaces/AnimationPreset.html":{},"classes/VRManager.html":{},"interfaces/Window.html":{},"classes/XRManager.html":{}}}],["endxr(xrsessiontype",{"_index":2935,"title":{},"body":{"interfaces/Window.html":{}}}],["endxrsession",{"_index":38,"title":{},"body":{"classes/ARManager.html":{},"classes/VRManager.html":{},"classes/XRManager.html":{}}}],["energy",{"_index":1994,"title":{},"body":{"classes/PrettySymbols.html":{},"changelog.html":{}}}],["entries",{"_index":1600,"title":{},"body":{"classes/InfoLogger.html":{}}}],["entry",{"_index":1606,"title":{},"body":{"classes/InfoLogger.html":{}}}],["enum",{"_index":779,"title":{},"body":{"classes/ColorOptions.html":{},"classes/PresetView.html":{},"classes/XRManager.html":{}}}],["enumerable",{"_index":2612,"title":{},"body":{"classes/TracksMaterial.html":{},"classes/TracksMesh.html":{}}}],["enumerations",{"_index":3783,"title":{"miscellaneous/enumerations.html":{}},"body":{"miscellaneous/enumerations.html":{}}}],["equal",{"_index":773,"title":{},"body":{"classes/ColorOptions.html":{}}}],["equatorial",{"_index":914,"title":{},"body":{"classes/CoordinateHelper.html":{}}}],["error",{"_index":1553,"title":{},"body":{"classes/Field.html":{},"classes/RungeKutta.html":{},"classes/State.html":{},"classes/URLOptionsManager.html":{},"classes/XRManager.html":{},"changelog.html":{}}}],["error_estimate",{"_index":1555,"title":{},"body":{"classes/Field.html":{},"classes/RungeKutta.html":{},"classes/State.html":{}}}],["errors",{"_index":2740,"title":{},"body":{"classes/URLOptionsManager.html":{},"changelog.html":{}}}],["estimate",{"_index":1554,"title":{},"body":{"classes/Field.html":{},"classes/RungeKutta.html":{},"classes/State.html":{}}}],["et",{"_index":1995,"title":{},"body":{"classes/PrettySymbols.html":{}}}],["eta",{"_index":925,"title":{},"body":{"classes/CoordinateHelper.html":{},"classes/PrettySymbols.html":{},"changelog.html":{}}}],["eta/phi",{"_index":928,"title":{},"body":{"classes/CoordinateHelper.html":{}}}],["eta=0",{"_index":960,"title":{},"body":{"classes/CoordinateHelper.html":{}}}],["etaphitocartesian",{"_index":902,"title":{},"body":{"classes/CoordinateHelper.html":{}}}],["etaphitocartesian(radius",{"_index":924,"title":{},"body":{"classes/CoordinateHelper.html":{}}}],["etatotheta",{"_index":903,"title":{},"body":{"classes/CoordinateHelper.html":{}}}],["etatotheta(eta",{"_index":936,"title":{},"body":{"classes/CoordinateHelper.html":{}}}],["eta~infinite",{"_index":966,"title":{},"body":{"classes/CoordinateHelper.html":{}}}],["etc",{"_index":1078,"title":{},"body":{"classes/DatGUIMenuUI.html":{},"classes/PhoenixMenuUI.html":{},"interfaces/PhoenixUI.html":{}}}],["event",{"_index":230,"title":{},"body":{"interfaces/AnimationPreset.html":{},"classes/CMSObjects.html":{},"classes/ColorManager.html":{},"classes/ColorOptions.html":{},"interfaces/Configuration.html":{},"classes/Cut.html":{},"classes/DatGUIMenuUI.html":{},"classes/EffectsManager.html":{},"interfaces/EventDataLoader.html":{},"classes/ExportManager.html":{},"classes/InfoLogger.html":{},"classes/PhoenixMenuUI.html":{},"interfaces/PhoenixUI.html":{},"classes/RKHelper.html":{},"classes/RendererManager.html":{},"classes/ScriptLoader.html":{},"classes/SelectionManager.html":{},"classes/StateManager.html":{},"classes/URLOptionsManager.html":{},"classes/VRManager.html":{},"interfaces/Window.html":{},"changelog.html":{},"coverage.html":{},"miscellaneous/enumerations.html":{},"index.html":{},"properties.html":{},"miscellaneous/variables.html":{}}}],["event's",{"_index":2414,"title":{},"body":{"classes/StateManager.html":{}}}],["event.clientx",{"_index":2365,"title":{},"body":{"classes/SelectionManager.html":{}}}],["event.clienty",{"_index":2368,"title":{},"body":{"classes/SelectionManager.html":{}}}],["event.preventdefault",{"_index":2360,"title":{},"body":{"classes/SelectionManager.html":{}}}],["event_data_type_colors",{"_index":562,"title":{},"body":{"classes/CMSObjects.html":{},"coverage.html":{},"miscellaneous/variables.html":{}}}],["event_data_type_colors.muonchambers",{"_index":596,"title":{},"body":{"classes/CMSObjects.html":{}}}],["eventdata",{"_index":325,"title":{},"body":{"interfaces/AnimationPreset.html":{},"classes/DatGUIMenuUI.html":{},"interfaces/EventDataLoader.html":{},"classes/ExportManager.html":{},"classes/URLOptionsManager.html":{},"interfaces/Window.html":{}}}],["eventdata.children",{"_index":1477,"title":{},"body":{"classes/ExportManager.html":{}}}],["eventdata.traverse((eventobject",{"_index":334,"title":{},"body":{"interfaces/AnimationPreset.html":{}}}],["eventdataconfig",{"_index":1472,"title":{},"body":{"classes/ExportManager.html":{}}}],["eventdataconfig[objecttype.name",{"_index":1479,"title":{},"body":{"classes/ExportManager.html":{}}}],["eventdataconfig[objecttype.name].push(collection.name",{"_index":1482,"title":{},"body":{"classes/ExportManager.html":{}}}],["eventdataloader",{"_index":860,"title":{"interfaces/EventDataLoader.html":{}},"body":{"interfaces/Configuration.html":{},"interfaces/EventDataLoader.html":{},"coverage.html":{},"index.html":{}}}],["eventdatatype",{"_index":1079,"title":{},"body":{"classes/DatGUIMenuUI.html":{},"classes/PhoenixMenuUI.html":{},"interfaces/PhoenixUI.html":{},"interfaces/Window.html":{},"miscellaneous/variables.html":{}}}],["eventdatatypenode",{"_index":1896,"title":{},"body":{"classes/PhoenixMenuUI.html":{}}}],["eventdatatypenode.name",{"_index":1897,"title":{},"body":{"classes/PhoenixMenuUI.html":{}}}],["eventdisplay",{"_index":1118,"title":{},"body":{"classes/DatGUIMenuUI.html":{},"classes/RendererManager.html":{},"classes/StateManager.html":{},"classes/URLOptionsManager.html":{},"interfaces/Window.html":{},"changelog.html":{},"coverage.html":{},"index.html":{}}}],["eventdisplay.init(configuration",{"_index":3797,"title":{},"body":{"index.html":{}}}],["eventdisplay.loadobjgeometry",{"_index":3801,"title":{},"body":{"index.html":{}}}],["eventdisplay.parsephoenixevents(res",{"_index":3800,"title":{},"body":{"index.html":{}}}],["eventfile",{"_index":892,"title":{},"body":{"interfaces/Configuration.html":{}}}],["eventfolder",{"_index":1039,"title":{},"body":{"classes/DatGUIMenuUI.html":{},"classes/PhoenixMenuUI.html":{}}}],["eventfolderstate",{"_index":1836,"title":{},"body":{"classes/PhoenixMenuUI.html":{}}}],["eventkey",{"_index":2960,"title":{},"body":{"interfaces/Window.html":{}}}],["eventkeys",{"_index":2938,"title":{},"body":{"interfaces/Window.html":{}}}],["eventmetadata",{"_index":2396,"title":{},"body":{"classes/StateManager.html":{}}}],["eventnumber",{"_index":2413,"title":{},"body":{"classes/StateManager.html":{}}}],["eventobject",{"_index":330,"title":{},"body":{"interfaces/AnimationPreset.html":{}}}],["eventobject.geometry",{"_index":335,"title":{},"body":{"interfaces/AnimationPreset.html":{}}}],["eventobject.geometry.attributes['position'].array",{"_index":392,"title":{},"body":{"interfaces/AnimationPreset.html":{}}}],["eventobject.geometry.boundingsphere.center",{"_index":387,"title":{},"body":{"interfaces/AnimationPreset.html":{}}}],["eventobject.geometry.computeboundingsphere",{"_index":394,"title":{},"body":{"interfaces/AnimationPreset.html":{}}}],["eventobject.geometry.deleteattribute('position",{"_index":393,"title":{},"body":{"interfaces/AnimationPreset.html":{}}}],["eventobject.geometry.drawrange",{"_index":363,"title":{},"body":{"interfaces/AnimationPreset.html":{}}}],["eventobject.geometry.drawrange.count",{"_index":361,"title":{},"body":{"interfaces/AnimationPreset.html":{}}}],["eventobject.geometry.setdrawrange(0",{"_index":362,"title":{},"body":{"interfaces/AnimationPreset.html":{}}}],["eventobject.geometry?.attributes?.position?.count",{"_index":349,"title":{},"body":{"interfaces/AnimationPreset.html":{}}}],["eventobject.material",{"_index":456,"title":{},"body":{"interfaces/AnimationPreset.html":{}}}],["eventobject.material.clippingplanes",{"_index":457,"title":{},"body":{"interfaces/AnimationPreset.html":{}}}],["eventobject.material.progress",{"_index":355,"title":{},"body":{"interfaces/AnimationPreset.html":{}}}],["eventobject.name",{"_index":340,"title":{},"body":{"interfaces/AnimationPreset.html":{}}}],["eventobject.position",{"_index":380,"title":{},"body":{"interfaces/AnimationPreset.html":{}}}],["eventobject.position.equals",{"_index":385,"title":{},"body":{"interfaces/AnimationPreset.html":{}}}],["eventobject.scale.setscalar(updatedscale.x",{"_index":375,"title":{},"body":{"interfaces/AnimationPreset.html":{}}}],["eventobject.scale.x",{"_index":368,"title":{},"body":{"interfaces/AnimationPreset.html":{}}}],["eventobject.scale.y",{"_index":369,"title":{},"body":{"interfaces/AnimationPreset.html":{}}}],["eventobject.scale.z",{"_index":370,"title":{},"body":{"interfaces/AnimationPreset.html":{}}}],["eventobject.visible",{"_index":401,"title":{},"body":{"interfaces/AnimationPreset.html":{}}}],["eventobjecttween",{"_index":356,"title":{},"body":{"interfaces/AnimationPreset.html":{}}}],["eventobjecttween.oncomplete",{"_index":358,"title":{},"body":{"interfaces/AnimationPreset.html":{}}}],["events",{"_index":1415,"title":{},"body":{"interfaces/EventDataLoader.html":{},"classes/SelectionManager.html":{},"classes/URLOptionsManager.html":{},"interfaces/Window.html":{},"changelog.html":{}}}],["eventsdata",{"_index":1416,"title":{},"body":{"interfaces/EventDataLoader.html":{},"interfaces/Window.html":{}}}],["eventtype",{"_index":893,"title":{},"body":{"interfaces/Configuration.html":{}}}],["example",{"_index":1093,"title":{},"body":{"classes/DatGUIMenuUI.html":{},"classes/PhoenixMenuUI.html":{},"interfaces/PhoenixUI.html":{}}}],["examples",{"_index":3812,"title":{},"body":{"index.html":{}}}],["except",{"_index":3361,"title":{},"body":{"changelog.html":{}}}],["exception",{"_index":3890,"title":{},"body":{"miscellaneous/variables.html":{}}}],["existing",{"_index":2953,"title":{},"body":{"interfaces/Window.html":{}}}],["exists",{"_index":347,"title":{},"body":{"interfaces/AnimationPreset.html":{},"classes/ColorOptions.html":{},"classes/DatGUIMenuUI.html":{},"classes/PhoenixMenuUI.html":{},"interfaces/PhoenixUI.html":{},"classes/ScriptLoader.html":{}}}],["experiment",{"_index":923,"title":{},"body":{"classes/CoordinateHelper.html":{},"interfaces/EventDataLoader.html":{},"classes/URLOptionsManager.html":{},"interfaces/Window.html":{},"index.html":{},"properties.html":{}}}],["experimental",{"_index":934,"title":{},"body":{"classes/CoordinateHelper.html":{}}}],["experimentinfo",{"_index":2767,"title":{},"body":{"classes/URLOptionsManager.html":{}}}],["experiments",{"_index":3648,"title":{},"body":{"changelog.html":{}}}],["export",{"_index":152,"title":{},"body":{"classes/ARManager.html":{},"classes/ActiveVariable.html":{},"interfaces/AnimationPreset.html":{},"classes/CMSObjects.html":{},"classes/ColorManager.html":{},"classes/ColorOptions.html":{},"interfaces/Configuration.html":{},"classes/CoordinateHelper.html":{},"classes/Cut.html":{},"classes/DatGUIMenuUI.html":{},"classes/EffectsManager.html":{},"interfaces/EventDataLoader.html":{},"classes/ExportManager.html":{},"classes/Field.html":{},"classes/InfoLogger.html":{},"classes/LoadingManager.html":{},"classes/PhoenixMenuNode.html":{},"classes/PhoenixMenuUI.html":{},"interfaces/PhoenixUI.html":{},"classes/PresetView.html":{},"classes/PrettySymbols.html":{},"classes/RKHelper.html":{},"classes/RendererManager.html":{},"classes/RungeKutta.html":{},"classes/ScriptLoader.html":{},"classes/SelectionManager.html":{},"classes/State.html":{},"classes/StateManager.html":{},"classes/TracksMaterial.html":{},"classes/TracksMesh.html":{},"classes/URLOptionsManager.html":{},"classes/VRManager.html":{},"interfaces/Window.html":{},"classes/XRManager.html":{}}}],["exported",{"_index":1434,"title":{},"body":{"classes/ExportManager.html":{}}}],["exporter",{"_index":1453,"title":{},"body":{"classes/ExportManager.html":{}}}],["exporter.parse",{"_index":1466,"title":{},"body":{"classes/ExportManager.html":{}}}],["exporter.parse(scene",{"_index":1455,"title":{},"body":{"classes/ExportManager.html":{}}}],["exportmanager",{"_index":1420,"title":{"classes/ExportManager.html":{}},"body":{"classes/ExportManager.html":{},"coverage.html":{}}}],["exportphoenixdisplay",{"_index":3005,"title":{},"body":{"interfaces/Window.html":{}}}],["exportphoenixscene",{"_index":1422,"title":{},"body":{"classes/ExportManager.html":{}}}],["exportphoenixscene(scene",{"_index":1427,"title":{},"body":{"classes/ExportManager.html":{}}}],["exports",{"_index":1429,"title":{},"body":{"classes/ExportManager.html":{},"interfaces/Window.html":{}}}],["exportscenetoobj",{"_index":1423,"title":{},"body":{"classes/ExportManager.html":{}}}],["exportscenetoobj(scene",{"_index":1436,"title":{},"body":{"classes/ExportManager.html":{}}}],["exporttoobj",{"_index":2992,"title":{},"body":{"interfaces/Window.html":{}}}],["extend",{"_index":3392,"title":{},"body":{"changelog.html":{}}}],["extends",{"_index":14,"title":{},"body":{"classes/ARManager.html":{},"classes/TracksMaterial.html":{},"classes/TracksMesh.html":{},"classes/VRManager.html":{}}}],["extension",{"_index":3483,"title":{},"body":{"changelog.html":{}}}],["external",{"_index":2194,"title":{},"body":{"classes/ScriptLoader.html":{}}}],["externalize",{"_index":3301,"title":{},"body":{"changelog.html":{}}}],["extra",{"_index":1902,"title":{},"body":{"classes/PhoenixMenuUI.html":{}}}],["extraanimationsphereduration",{"_index":322,"title":{},"body":{"interfaces/AnimationPreset.html":{}}}],["extract",{"_index":2727,"title":{},"body":{"classes/URLOptionsManager.html":{}}}],["extrapolate",{"_index":2043,"title":{},"body":{"classes/RKHelper.html":{}}}],["extrapolated",{"_index":2046,"title":{},"body":{"classes/RKHelper.html":{}}}],["extrapolatetrackpositions",{"_index":2038,"title":{},"body":{"classes/RKHelper.html":{}}}],["extrapolatetrackpositions(track",{"_index":2041,"title":{},"body":{"classes/RKHelper.html":{}}}],["extrapolating",{"_index":336,"title":{},"body":{"interfaces/AnimationPreset.html":{}}}],["extrapolation",{"_index":2050,"title":{},"body":{"classes/RKHelper.html":{},"changelog.html":{}}}],["extrapolationlimit",{"_index":2039,"title":{},"body":{"classes/RKHelper.html":{},"changelog.html":{}}}],["extrapolationlimit(pos",{"_index":2047,"title":{},"body":{"classes/RKHelper.html":{}}}],["extrapolator",{"_index":2049,"title":{},"body":{"classes/RKHelper.html":{}}}],["f1d2cef",{"_index":3455,"title":{},"body":{"changelog.html":{}}}],["f2376cc",{"_index":3283,"title":{},"body":{"changelog.html":{}}}],["f279898",{"_index":3509,"title":{},"body":{"changelog.html":{}}}],["f2ed0a3",{"_index":3291,"title":{},"body":{"changelog.html":{}}}],["f40beac",{"_index":3213,"title":{},"body":{"changelog.html":{}}}],["f41920b",{"_index":3434,"title":{},"body":{"changelog.html":{}}}],["f4c2e31",{"_index":3616,"title":{},"body":{"changelog.html":{}}}],["f7cd6b4",{"_index":3537,"title":{},"body":{"changelog.html":{}}}],["f87c587",{"_index":3683,"title":{},"body":{"changelog.html":{}}}],["f8a0080",{"_index":3498,"title":{},"body":{"changelog.html":{}}}],["f94c0e4",{"_index":3620,"title":{},"body":{"changelog.html":{}}}],["f97e615",{"_index":3207,"title":{},"body":{"changelog.html":{}}}],["faces",{"_index":567,"title":{},"body":{"classes/CMSObjects.html":{}}}],["faces.map((face",{"_index":569,"title":{},"body":{"classes/CMSObjects.html":{}}}],["facing",{"_index":2862,"title":{},"body":{"classes/VRManager.html":{}}}],["factor",{"_index":3047,"title":{},"body":{"interfaces/Window.html":{}}}],["failed",{"_index":3677,"title":{},"body":{"changelog.html":{}}}],["fallback",{"_index":2655,"title":{},"body":{"classes/URLOptionsManager.html":{}}}],["false",{"_index":107,"title":{},"body":{"classes/ARManager.html":{},"interfaces/AnimationPreset.html":{},"classes/ColorOptions.html":{},"classes/DatGUIMenuUI.html":{},"classes/Field.html":{},"classes/PhoenixMenuNode.html":{},"classes/PhoenixMenuUI.html":{},"classes/RKHelper.html":{},"classes/RendererManager.html":{},"classes/RungeKutta.html":{},"classes/SelectionManager.html":{},"classes/State.html":{},"classes/StateManager.html":{},"classes/URLOptionsManager.html":{},"classes/VRManager.html":{},"interfaces/Window.html":{},"classes/XRManager.html":{},"miscellaneous/variables.html":{}}}],["fbd584e",{"_index":3588,"title":{},"body":{"changelog.html":{}}}],["fdd492a",{"_index":3409,"title":{},"body":{"changelog.html":{}}}],["fe0b2e6",{"_index":3604,"title":{},"body":{"changelog.html":{}}}],["features",{"_index":105,"title":{},"body":{"classes/ARManager.html":{},"classes/VRManager.html":{},"classes/XRManager.html":{},"changelog.html":{}}}],["fetch",{"_index":2690,"title":{},"body":{"classes/URLOptionsManager.html":{}}}],["fetch('path/to/event",{"_index":3798,"title":{},"body":{"index.html":{}}}],["fetch(fileurl)).arraybuffer",{"_index":2734,"title":{},"body":{"classes/URLOptionsManager.html":{}}}],["fetch(fileurl)).json",{"_index":2731,"title":{},"body":{"classes/URLOptionsManager.html":{}}}],["fetch(fileurl)).text",{"_index":2725,"title":{},"body":{"classes/URLOptionsManager.html":{}}}],["fetch(this.urloptions.get('config",{"_index":2705,"title":{},"body":{"classes/URLOptionsManager.html":{}}}],["ff0000",{"_index":728,"title":{},"body":{"classes/ColorOptions.html":{}}}],["ff10477",{"_index":3663,"title":{},"body":{"changelog.html":{}}}],["ff666e2",{"_index":3520,"title":{},"body":{"changelog.html":{}}}],["ff77aaa",{"_index":3229,"title":{},"body":{"changelog.html":{}}}],["ffffff",{"_index":3065,"title":{},"body":{"interfaces/Window.html":{}}}],["fh",{"_index":1560,"title":{},"body":{"classes/Field.html":{},"classes/RungeKutta.html":{},"classes/State.html":{}}}],["fh2",{"_index":1561,"title":{},"body":{"classes/Field.html":{},"classes/RungeKutta.html":{},"classes/State.html":{}}}],["field",{"_index":983,"title":{"classes/Field.html":{}},"body":{"classes/Cut.html":{},"classes/Field.html":{},"coverage.html":{}}}],["field.get(pos1",{"_index":1532,"title":{},"body":{"classes/Field.html":{},"classes/RungeKutta.html":{},"classes/State.html":{}}}],["field.get(pos2",{"_index":1542,"title":{},"body":{"classes/Field.html":{},"classes/RungeKutta.html":{},"classes/State.html":{}}}],["field.get(state.pos",{"_index":1518,"title":{},"body":{"classes/Field.html":{},"classes/RungeKutta.html":{},"classes/State.html":{}}}],["file",{"_index":5,"title":{},"body":{"classes/ARManager.html":{},"classes/ActiveVariable.html":{},"interfaces/AnimationPreset.html":{},"classes/CMSObjects.html":{},"classes/ColorManager.html":{},"classes/ColorOptions.html":{},"interfaces/Configuration.html":{},"classes/CoordinateHelper.html":{},"classes/Cut.html":{},"classes/DatGUIMenuUI.html":{},"classes/EffectsManager.html":{},"interfaces/EventDataLoader.html":{},"classes/ExportManager.html":{},"classes/Field.html":{},"classes/InfoLogger.html":{},"classes/LoadingManager.html":{},"classes/PhoenixMenuNode.html":{},"classes/PhoenixMenuUI.html":{},"interfaces/PhoenixUI.html":{},"classes/PresetView.html":{},"classes/PrettySymbols.html":{},"classes/RKHelper.html":{},"classes/RendererManager.html":{},"classes/RungeKutta.html":{},"classes/ScriptLoader.html":{},"classes/SelectionManager.html":{},"classes/State.html":{},"classes/StateManager.html":{},"classes/TracksMaterial.html":{},"classes/TracksMesh.html":{},"classes/URLOptionsManager.html":{},"classes/VRManager.html":{},"interfaces/Window.html":{},"classes/XRManager.html":{},"changelog.html":{},"coverage.html":{},"index.html":{},"miscellaneous/variables.html":{}}}],["file.readobject(objectname",{"_index":3039,"title":{},"body":{"interfaces/Window.html":{}}}],["filebuffer",{"_index":2733,"title":{},"body":{"classes/URLOptionsManager.html":{}}}],["filedata",{"_index":2724,"title":{},"body":{"classes/URLOptionsManager.html":{},"miscellaneous/variables.html":{}}}],["filename",{"_index":2737,"title":{},"body":{"classes/URLOptionsManager.html":{},"interfaces/Window.html":{},"miscellaneous/variables.html":{}}}],["filename.endswith('.json",{"_index":2748,"title":{},"body":{"classes/URLOptionsManager.html":{}}}],["filename.endswith('.xml",{"_index":2753,"title":{},"body":{"classes/URLOptionsManager.html":{}}}],["filename.startswith('jivexml",{"_index":2754,"title":{},"body":{"classes/URLOptionsManager.html":{}}}],["filepath",{"_index":3928,"title":{},"body":{"miscellaneous/variables.html":{}}}],["filereader",{"_index":3908,"title":{},"body":{"miscellaneous/variables.html":{}}}],["files",{"_index":2669,"title":{},"body":{"classes/URLOptionsManager.html":{},"changelog.html":{}}}],["fileswithdata",{"_index":2736,"title":{},"body":{"classes/URLOptionsManager.html":{},"miscellaneous/variables.html":{}}}],["fileswithdata[filepath",{"_index":3931,"title":{},"body":{"miscellaneous/variables.html":{}}}],["fileurl",{"_index":2662,"title":{},"body":{"classes/URLOptionsManager.html":{}}}],["filter",{"_index":994,"title":{},"body":{"classes/Cut.html":{},"classes/DatGUIMenuUI.html":{},"classes/PhoenixMenuUI.html":{},"interfaces/PhoenixUI.html":{},"changelog.html":{}}}],["filter((filename",{"_index":2747,"title":{},"body":{"classes/URLOptionsManager.html":{}}}],["filter((val",{"_index":2352,"title":{},"body":{"classes/SelectionManager.html":{}}}],["filtered",{"_index":995,"title":{},"body":{"classes/Cut.html":{}}}],["filters",{"_index":977,"title":{},"body":{"classes/Cut.html":{}}}],["finally",{"_index":2710,"title":{},"body":{"classes/URLOptionsManager.html":{},"changelog.html":{}}}],["finalposition",{"_index":2572,"title":{},"body":{"classes/TracksMaterial.html":{},"classes/TracksMesh.html":{}}}],["finalposition.w",{"_index":2580,"title":{},"body":{"classes/TracksMaterial.html":{},"classes/TracksMesh.html":{}}}],["finalposition.xy",{"_index":2579,"title":{},"body":{"classes/TracksMaterial.html":{},"classes/TracksMesh.html":{}}}],["find",{"_index":1725,"title":{},"body":{"classes/PhoenixMenuNode.html":{},"classes/PhoenixMenuUI.html":{},"classes/URLOptionsManager.html":{}}}],["finding",{"_index":2280,"title":{},"body":{"classes/SelectionManager.html":{}}}],["findintree",{"_index":1691,"title":{},"body":{"classes/PhoenixMenuNode.html":{}}}],["findintree(name",{"_index":1723,"title":{},"body":{"classes/PhoenixMenuNode.html":{}}}],["findintreeorcreate",{"_index":1692,"title":{},"body":{"classes/PhoenixMenuNode.html":{}}}],["findintreeorcreate(name",{"_index":1728,"title":{},"body":{"classes/PhoenixMenuNode.html":{}}}],["finished",{"_index":1647,"title":{},"body":{"classes/LoadingManager.html":{}}}],["first",{"_index":320,"title":{},"body":{"interfaces/AnimationPreset.html":{},"classes/Field.html":{},"classes/RendererManager.html":{},"classes/RungeKutta.html":{},"classes/State.html":{},"interfaces/Window.html":{}}}],["firsttween",{"_index":531,"title":{},"body":{"interfaces/AnimationPreset.html":{}}}],["firsttween.start",{"_index":542,"title":{},"body":{"interfaces/AnimationPreset.html":{}}}],["fit",{"_index":2925,"title":{},"body":{"interfaces/Window.html":{}}}],["fitting",{"_index":2919,"title":{},"body":{"interfaces/Window.html":{}}}],["fix",{"_index":3212,"title":{},"body":{"changelog.html":{}}}],["fixed",{"_index":2103,"title":{},"body":{"classes/RendererManager.html":{},"interfaces/Window.html":{},"changelog.html":{}}}],["fixedoverlay",{"_index":2082,"title":{},"body":{"classes/RendererManager.html":{}}}],["fixes",{"_index":3098,"title":{},"body":{"interfaces/Window.html":{},"changelog.html":{}}}],["fixing",{"_index":3632,"title":{},"body":{"changelog.html":{}}}],["fixoverlayview(fixed",{"_index":3099,"title":{},"body":{"interfaces/Window.html":{}}}],["flat",{"_index":2558,"title":{},"body":{"classes/TracksMaterial.html":{},"classes/TracksMesh.html":{},"interfaces/Window.html":{},"changelog.html":{}}}],["float",{"_index":2554,"title":{},"body":{"classes/TracksMaterial.html":{},"classes/TracksMesh.html":{}}}],["float32array([].concat(...reachedhits",{"_index":420,"title":{},"body":{"interfaces/AnimationPreset.html":{}}}],["float32array(allfacepositions",{"_index":592,"title":{},"body":{"classes/CMSObjects.html":{}}}],["float32array(this.colors",{"_index":2520,"title":{},"body":{"classes/TracksMaterial.html":{},"classes/TracksMesh.html":{}}}],["float32array(this.counter",{"_index":2521,"title":{},"body":{"classes/TracksMaterial.html":{},"classes/TracksMesh.html":{}}}],["float32array(this.next",{"_index":2517,"title":{},"body":{"classes/TracksMaterial.html":{},"classes/TracksMesh.html":{}}}],["float32array(this.positions",{"_index":2515,"title":{},"body":{"classes/TracksMaterial.html":{},"classes/TracksMesh.html":{}}}],["float32array(this.previous",{"_index":2516,"title":{},"body":{"classes/TracksMaterial.html":{},"classes/TracksMesh.html":{}}}],["float32array(this.side",{"_index":2518,"title":{},"body":{"classes/TracksMaterial.html":{},"classes/TracksMesh.html":{}}}],["floor",{"_index":2813,"title":{},"body":{"classes/VRManager.html":{}}}],["folder",{"_index":707,"title":{},"body":{"classes/ColorOptions.html":{},"classes/DatGUIMenuUI.html":{},"classes/PhoenixMenuUI.html":{},"interfaces/PhoenixUI.html":{},"interfaces/Window.html":{},"changelog.html":{}}}],["folders",{"_index":1108,"title":{},"body":{"classes/DatGUIMenuUI.html":{},"classes/PhoenixMenuUI.html":{},"interfaces/PhoenixUI.html":{},"interfaces/Window.html":{}}}],["force",{"_index":878,"title":{},"body":{"interfaces/Configuration.html":{}}}],["forcecolourtheme",{"_index":861,"title":{},"body":{"interfaces/Configuration.html":{}}}],["foreach((filename",{"_index":2749,"title":{},"body":{"classes/URLOptionsManager.html":{}}}],["foreach((groupname",{"_index":184,"title":{},"body":{"classes/ARManager.html":{}}}],["form",{"_index":3516,"title":{},"body":{"changelog.html":{}}}],["format",{"_index":1430,"title":{},"body":{"classes/ExportManager.html":{},"interfaces/Window.html":{},"changelog.html":{},"index.html":{}}}],["formatted",{"_index":3691,"title":{},"body":{"changelog.html":{}}}],["forming",{"_index":237,"title":{},"body":{"interfaces/AnimationPreset.html":{}}}],["found",{"_index":1727,"title":{},"body":{"classes/PhoenixMenuNode.html":{}}}],["fragment",{"_index":2598,"title":{},"body":{"classes/TracksMaterial.html":{},"classes/TracksMesh.html":{}}}],["fragmentshader",{"_index":2608,"title":{},"body":{"classes/TracksMaterial.html":{},"classes/TracksMesh.html":{}}}],["front",{"_index":571,"title":{},"body":{"classes/CMSObjects.html":{}}}],["front_1",{"_index":577,"title":{},"body":{"classes/CMSObjects.html":{}}}],["front_2",{"_index":573,"title":{},"body":{"classes/CMSObjects.html":{}}}],["front_3",{"_index":574,"title":{},"body":{"classes/CMSObjects.html":{}}}],["front_4",{"_index":576,"title":{},"body":{"classes/CMSObjects.html":{}}}],["full",{"_index":3235,"title":{},"body":{"changelog.html":{}}}],["function",{"_index":94,"title":{},"body":{"classes/ARManager.html":{},"classes/ActiveVariable.html":{},"interfaces/AnimationPreset.html":{},"classes/ColorManager.html":{},"classes/DatGUIMenuUI.html":{},"classes/EffectsManager.html":{},"classes/Field.html":{},"classes/LoadingManager.html":{},"classes/PhoenixMenuNode.html":{},"classes/PhoenixMenuUI.html":{},"interfaces/PhoenixUI.html":{},"classes/RKHelper.html":{},"classes/RungeKutta.html":{},"classes/SelectionManager.html":{},"classes/State.html":{},"classes/TracksMaterial.html":{},"classes/TracksMesh.html":{},"classes/VRManager.html":{},"interfaces/Window.html":{},"classes/XRManager.html":{},"changelog.html":{},"miscellaneous/typealiases.html":{}}}],["functionality",{"_index":1393,"title":{},"body":{"interfaces/EventDataLoader.html":{},"classes/ExportManager.html":{},"interfaces/Window.html":{}}}],["functions",{"_index":261,"title":{},"body":{"interfaces/AnimationPreset.html":{},"classes/ColorManager.html":{},"classes/ColorOptions.html":{},"classes/DatGUIMenuUI.html":{},"classes/PhoenixMenuUI.html":{},"interfaces/PhoenixUI.html":{},"classes/PrettySymbols.html":{},"classes/RKHelper.html":{},"classes/RendererManager.html":{},"classes/SelectionManager.html":{},"interfaces/Window.html":{},"changelog.html":{},"index.html":{}}}],["general",{"_index":3398,"title":{},"body":{"changelog.html":{}}}],["generalize",{"_index":3465,"title":{},"body":{"changelog.html":{}}}],["generate",{"_index":1463,"title":{},"body":{"classes/ExportManager.html":{},"index.html":{}}}],["generation",{"_index":315,"title":{},"body":{"interfaces/AnimationPreset.html":{},"interfaces/Window.html":{}}}],["generic",{"_index":3284,"title":{},"body":{"changelog.html":{}}}],["geom",{"_index":3062,"title":{},"body":{"interfaces/Window.html":{}}}],["geometrical",{"_index":3494,"title":{},"body":{"changelog.html":{}}}],["geometries",{"_index":1064,"title":{},"body":{"classes/DatGUIMenuUI.html":{},"interfaces/EventDataLoader.html":{},"classes/ExportManager.html":{},"classes/PhoenixMenuUI.html":{},"interfaces/Window.html":{},"changelog.html":{}}}],["geometries.children.foreach((object",{"_index":1483,"title":{},"body":{"classes/ExportManager.html":{}}}],["geometries/event",{"_index":3094,"title":{},"body":{"interfaces/Window.html":{}}}],["geometriesconfig",{"_index":1474,"title":{},"body":{"classes/ExportManager.html":{}}}],["geometriesconfig.push(object.name",{"_index":1484,"title":{},"body":{"classes/ExportManager.html":{}}}],["geometry",{"_index":344,"title":{},"body":{"interfaces/AnimationPreset.html":{},"classes/CMSObjects.html":{},"classes/DatGUIMenuUI.html":{},"classes/PhoenixMenuUI.html":{},"interfaces/PhoenixUI.html":{},"classes/VRManager.html":{},"interfaces/Window.html":{},"changelog.html":{},"index.html":{},"miscellaneous/typealiases.html":{}}}],["geometry.computeboundingsphere",{"_index":421,"title":{},"body":{"interfaces/AnimationPreset.html":{}}}],["geometry.setattribute",{"_index":419,"title":{},"body":{"interfaces/AnimationPreset.html":{}}}],["geometry/event",{"_index":3090,"title":{},"body":{"interfaces/Window.html":{}}}],["geometryposcount",{"_index":348,"title":{},"body":{"interfaces/AnimationPreset.html":{}}}],["geometryuiparameters",{"_index":3840,"title":{},"body":{"miscellaneous/typealiases.html":{}}}],["geomfolder",{"_index":1040,"title":{},"body":{"classes/DatGUIMenuUI.html":{},"classes/PhoenixMenuUI.html":{}}}],["get(field",{"_index":1488,"title":{},"body":{"classes/Field.html":{}}}],["getactiveobjectid",{"_index":2245,"title":{},"body":{"classes/SelectionManager.html":{},"interfaces/Window.html":{}}}],["getcamera",{"_index":3157,"title":{},"body":{"classes/XRManager.html":{}}}],["getcameragroup",{"_index":39,"title":{},"body":{"classes/ARManager.html":{},"classes/VRManager.html":{},"classes/XRManager.html":{}}}],["getcameragroup(camera",{"_index":122,"title":{},"body":{"classes/ARManager.html":{},"classes/VRManager.html":{},"classes/XRManager.html":{}}}],["getcameratween",{"_index":268,"title":{},"body":{"interfaces/AnimationPreset.html":{}}}],["getcollection",{"_index":1375,"title":{},"body":{"interfaces/EventDataLoader.html":{}}}],["getcollection(collectionname",{"_index":1400,"title":{},"body":{"interfaces/EventDataLoader.html":{},"interfaces/Window.html":{}}}],["getcollections",{"_index":1376,"title":{},"body":{"interfaces/EventDataLoader.html":{},"interfaces/Window.html":{}}}],["getcompound",{"_index":3399,"title":{},"body":{"changelog.html":{}}}],["getelementbyid('embedmenu",{"_index":2772,"title":{},"body":{"classes/URLOptionsManager.html":{}}}],["getelementbyid('three",{"_index":2313,"title":{},"body":{"classes/SelectionManager.html":{}}}],["getelementbyid(singleid",{"_index":2778,"title":{},"body":{"classes/URLOptionsManager.html":{}}}],["geteventdatatypefolder",{"_index":1054,"title":{},"body":{"classes/DatGUIMenuUI.html":{},"classes/PhoenixMenuUI.html":{},"interfaces/PhoenixUI.html":{}}}],["geteventdatatypefolder(typename",{"_index":1109,"title":{},"body":{"classes/DatGUIMenuUI.html":{},"classes/PhoenixMenuUI.html":{},"interfaces/PhoenixUI.html":{}}}],["geteventmetadata",{"_index":1377,"title":{},"body":{"interfaces/EventDataLoader.html":{},"interfaces/Window.html":{}}}],["geteventslist",{"_index":1378,"title":{},"body":{"interfaces/EventDataLoader.html":{}}}],["geteventslist(eventsdata",{"_index":1412,"title":{},"body":{"interfaces/EventDataLoader.html":{}}}],["getfromlocalstorage",{"_index":3719,"title":{},"body":{"coverage.html":{},"miscellaneous/variables.html":{}}}],["gethitspositions(positions",{"_index":526,"title":{},"body":{"interfaces/AnimationPreset.html":{}}}],["geticonurl",{"_index":1962,"title":{},"body":{"classes/PresetView.html":{}}}],["getinfologger",{"_index":2720,"title":{},"body":{"classes/URLOptionsManager.html":{},"interfaces/Window.html":{}}}],["getinfologgerlist",{"_index":1596,"title":{},"body":{"classes/InfoLogger.html":{}}}],["getinstance",{"_index":2399,"title":{},"body":{"classes/StateManager.html":{}}}],["getlabelsobject",{"_index":1379,"title":{},"body":{"interfaces/EventDataLoader.html":{}}}],["getlabeltitle",{"_index":2879,"title":{},"body":{"interfaces/Window.html":{},"coverage.html":{},"miscellaneous/variables.html":{}}}],["getlabeltitle(eventdatatype",{"_index":3126,"title":{},"body":{"interfaces/Window.html":{}}}],["getloadingmanager",{"_index":2965,"title":{},"body":{"interfaces/Window.html":{}}}],["getlocalclipping",{"_index":2088,"title":{},"body":{"classes/RendererManager.html":{}}}],["getmainrenderer",{"_index":2089,"title":{},"body":{"classes/RendererManager.html":{}}}],["getmomentum",{"_index":695,"title":{},"body":{"classes/ColorOptions.html":{}}}],["getmomentum(objectparams",{"_index":760,"title":{},"body":{"classes/ColorOptions.html":{}}}],["getmuon",{"_index":3400,"title":{},"body":{"changelog.html":{}}}],["getmuonchamber",{"_index":551,"title":{},"body":{"classes/CMSObjects.html":{}}}],["getmuonchamber(muonchamberparams",{"_index":552,"title":{},"body":{"classes/CMSObjects.html":{}}}],["getnodestate",{"_index":1693,"title":{},"body":{"classes/PhoenixMenuNode.html":{}}}],["getobjectbyname(collectionname",{"_index":660,"title":{},"body":{"classes/ColorManager.html":{},"classes/DatGUIMenuUI.html":{},"classes/PhoenixMenuUI.html":{}}}],["getobjectbyname(labelid",{"_index":1276,"title":{},"body":{"classes/DatGUIMenuUI.html":{},"classes/PhoenixMenuUI.html":{}}}],["getobjectbyname(scenemanager.event_data_id",{"_index":659,"title":{},"body":{"classes/ColorManager.html":{},"classes/DatGUIMenuUI.html":{},"classes/PhoenixMenuUI.html":{}}}],["getobjectbyname(scenemanager.labels_id",{"_index":1275,"title":{},"body":{"classes/DatGUIMenuUI.html":{},"classes/PhoenixMenuUI.html":{}}}],["getobjectbyname(typename",{"_index":1216,"title":{},"body":{"classes/DatGUIMenuUI.html":{},"classes/PhoenixMenuUI.html":{}}}],["getopeningclippingangle",{"_index":2400,"title":{},"body":{"classes/StateManager.html":{}}}],["getoverlayrenderer",{"_index":2090,"title":{},"body":{"classes/RendererManager.html":{}}}],["getprettyparams",{"_index":1988,"title":{},"body":{"classes/PrettySymbols.html":{}}}],["getprettyparams(params",{"_index":1997,"title":{},"body":{"classes/PrettySymbols.html":{}}}],["getprettysymbol",{"_index":1989,"title":{},"body":{"classes/PrettySymbols.html":{}}}],["getprettysymbol(param",{"_index":2001,"title":{},"body":{"classes/PrettySymbols.html":{}}}],["getrenderers",{"_index":2091,"title":{},"body":{"classes/RendererManager.html":{}}}],["getscene",{"_index":658,"title":{},"body":{"classes/ColorManager.html":{}}}],["getstartclippingangle",{"_index":2401,"title":{},"body":{"classes/StateManager.html":{}}}],["getstatemanager",{"_index":2966,"title":{},"body":{"interfaces/Window.html":{}}}],["getthreemanager",{"_index":2964,"title":{},"body":{"interfaces/Window.html":{}}}],["getting",{"_index":3165,"title":{"changelog.html":{},"index.html":{}},"body":{"changelog.html":{}}}],["gettrackswithrungekutta",{"_index":2040,"title":{},"body":{"classes/RKHelper.html":{}}}],["gettrackswithrungekutta(trackscollectionsevent",{"_index":2054,"title":{},"body":{"classes/RKHelper.html":{}}}],["getuimanager",{"_index":2459,"title":{},"body":{"classes/StateManager.html":{},"interfaces/Window.html":{}}}],["geturloptions",{"_index":2638,"title":{},"body":{"classes/URLOptionsManager.html":{}}}],["geturloptionsmanager",{"_index":2968,"title":{},"body":{"interfaces/Window.html":{}}}],["getxrcamera",{"_index":40,"title":{},"body":{"classes/ARManager.html":{},"classes/VRManager.html":{},"classes/XRManager.html":{}}}],["git://github.com/hsf/phoenix.git",{"_index":3824,"title":{},"body":{"properties.html":{}}}],["given",{"_index":144,"title":{},"body":{"classes/ARManager.html":{},"classes/CMSObjects.html":{},"interfaces/Configuration.html":{},"classes/Field.html":{},"classes/PresetView.html":{},"classes/RungeKutta.html":{},"classes/SelectionManager.html":{},"classes/State.html":{},"classes/URLOptionsManager.html":{},"classes/VRManager.html":{},"interfaces/Window.html":{},"classes/XRManager.html":{},"miscellaneous/variables.html":{}}}],["giving",{"_index":2278,"title":{},"body":{"classes/SelectionManager.html":{},"interfaces/Window.html":{}}}],["gl_fragcolor",{"_index":2602,"title":{},"body":{"classes/TracksMaterial.html":{},"classes/TracksMesh.html":{}}}],["gl_position",{"_index":2596,"title":{},"body":{"classes/TracksMaterial.html":{},"classes/TracksMesh.html":{}}}],["global",{"_index":2882,"title":{},"body":{"interfaces/Window.html":{}}}],["globalthis",{"_index":3595,"title":{},"body":{"changelog.html":{}}}],["gltf",{"_index":1464,"title":{},"body":{"classes/ExportManager.html":{},"interfaces/Window.html":{},"changelog.html":{}}}],["gltfexporter",{"_index":1448,"title":{},"body":{"classes/ExportManager.html":{}}}],["go",{"_index":2012,"title":{},"body":{"classes/PrettySymbols.html":{},"interfaces/Window.html":{}}}],["graphic",{"_index":1391,"title":{},"body":{"interfaces/EventDataLoader.html":{}}}],["graphicslibrary",{"_index":1384,"title":{},"body":{"interfaces/EventDataLoader.html":{},"interfaces/Window.html":{}}}],["greater",{"_index":3048,"title":{},"body":{"interfaces/Window.html":{}}}],["grid",{"_index":3533,"title":{},"body":{"changelog.html":{}}}],["group",{"_index":85,"title":{},"body":{"classes/ARManager.html":{},"interfaces/AnimationPreset.html":{},"classes/CMSObjects.html":{},"classes/ColorManager.html":{},"classes/ColorOptions.html":{},"classes/SelectionManager.html":{},"classes/VRManager.html":{},"interfaces/Window.html":{},"classes/XRManager.html":{}}}],["groupnotselected",{"_index":849,"title":{},"body":{"classes/ColorOptions.html":{}}}],["gui",{"_index":1033,"title":{},"body":{"classes/DatGUIMenuUI.html":{},"classes/URLOptionsManager.html":{},"coverage.html":{}}}],["gui.remove",{"_index":1133,"title":{},"body":{"classes/DatGUIMenuUI.html":{}}}],["guidelines",{"_index":3173,"title":{},"body":{"changelog.html":{}}}],["guiparameters",{"_index":1041,"title":{},"body":{"classes/DatGUIMenuUI.html":{}}}],["h",{"_index":1523,"title":{},"body":{"classes/Field.html":{},"classes/RungeKutta.html":{},"classes/State.html":{}}}],["h).cross(b_last",{"_index":1543,"title":{},"body":{"classes/Field.html":{},"classes/RungeKutta.html":{},"classes/State.html":{}}}],["h2",{"_index":1509,"title":{},"body":{"classes/Field.html":{},"classes/RungeKutta.html":{},"classes/State.html":{}}}],["half_h",{"_index":1510,"title":{},"body":{"classes/Field.html":{},"classes/RungeKutta.html":{},"classes/State.html":{}}}],["half_h).cross(b_middle",{"_index":1533,"title":{},"body":{"classes/Field.html":{},"classes/RungeKutta.html":{},"classes/State.html":{}}}],["hand",{"_index":2815,"title":{},"body":{"classes/VRManager.html":{}}}],["handle",{"_index":2661,"title":{},"body":{"classes/URLOptionsManager.html":{},"changelog.html":{}}}],["handlejivexmlevent",{"_index":2639,"title":{},"body":{"classes/URLOptionsManager.html":{}}}],["handlejivexmlevent(fileurl",{"_index":2660,"title":{},"body":{"classes/URLOptionsManager.html":{}}}],["handlejsonevent",{"_index":2640,"title":{},"body":{"classes/URLOptionsManager.html":{}}}],["handlejsonevent(fileurl",{"_index":2665,"title":{},"body":{"classes/URLOptionsManager.html":{}}}],["handlezipfileevents",{"_index":2641,"title":{},"body":{"classes/URLOptionsManager.html":{}}}],["handlezipfileevents(fileurl",{"_index":2666,"title":{},"body":{"classes/URLOptionsManager.html":{}}}],["handling",{"_index":3243,"title":{},"body":{"changelog.html":{}}}],["hash",{"_index":3688,"title":{},"body":{"changelog.html":{}}}],["hasposition",{"_index":384,"title":{},"body":{"interfaces/AnimationPreset.html":{}}}],["height",{"_index":2918,"title":{},"body":{"interfaces/Window.html":{}}}],["helper",{"_index":897,"title":{},"body":{"classes/CoordinateHelper.html":{},"classes/PrettySymbols.html":{},"classes/RKHelper.html":{},"changelog.html":{}}}],["helper.ts",{"_index":896,"title":{},"body":{"classes/CoordinateHelper.html":{},"classes/RKHelper.html":{},"coverage.html":{}}}],["helper.ts:13",{"_index":908,"title":{},"body":{"classes/CoordinateHelper.html":{}}}],["helper.ts:14",{"_index":2048,"title":{},"body":{"classes/RKHelper.html":{}}}],["helper.ts:24",{"_index":2055,"title":{},"body":{"classes/RKHelper.html":{}}}],["helper.ts:25",{"_index":937,"title":{},"body":{"classes/CoordinateHelper.html":{}}}],["helper.ts:35",{"_index":947,"title":{},"body":{"classes/CoordinateHelper.html":{}}}],["helper.ts:44",{"_index":2042,"title":{},"body":{"classes/RKHelper.html":{}}}],["helper.ts:46",{"_index":945,"title":{},"body":{"classes/CoordinateHelper.html":{}}}],["helper.ts:65",{"_index":926,"title":{},"body":{"classes/CoordinateHelper.html":{}}}],["helper.ts:81",{"_index":916,"title":{},"body":{"classes/CoordinateHelper.html":{}}}],["helpers/active",{"_index":2296,"title":{},"body":{"classes/SelectionManager.html":{},"classes/StateManager.html":{},"interfaces/Window.html":{}}}],["helpers/constants",{"_index":563,"title":{},"body":{"classes/CMSObjects.html":{}}}],["helpers/file",{"_index":1451,"title":{},"body":{"classes/ExportManager.html":{},"classes/StateManager.html":{}}}],["helpers/info",{"_index":1419,"title":{},"body":{"interfaces/EventDataLoader.html":{},"classes/SelectionManager.html":{},"interfaces/Window.html":{}}}],["helpers/labels",{"_index":2880,"title":{},"body":{"interfaces/Window.html":{}}}],["helpers/pretty",{"_index":775,"title":{},"body":{"classes/ColorOptions.html":{},"classes/PhoenixMenuUI.html":{},"classes/SelectionManager.html":{}}}],["helpers/zip",{"_index":2680,"title":{},"body":{"classes/URLOptionsManager.html":{}}}],["here",{"_index":941,"title":{},"body":{"classes/CoordinateHelper.html":{}}}],["hex",{"_index":631,"title":{},"body":{"classes/ColorManager.html":{}}}],["hide",{"_index":512,"title":{},"body":{"interfaces/AnimationPreset.html":{},"classes/URLOptionsManager.html":{},"changelog.html":{}}}],["hideidswithurloption",{"_index":2642,"title":{},"body":{"classes/URLOptionsManager.html":{}}}],["hideidswithurloption(urloptionwithids",{"_index":2670,"title":{},"body":{"classes/URLOptionsManager.html":{}}}],["hidewidgets",{"_index":2649,"title":{},"body":{"classes/URLOptionsManager.html":{},"miscellaneous/variables.html":{}}}],["hidewidgetsoptions",{"_index":2763,"title":{},"body":{"classes/URLOptionsManager.html":{}}}],["hiding",{"_index":3623,"title":{},"body":{"changelog.html":{}}}],["hierarchical",{"_index":1875,"title":{},"body":{"classes/PhoenixMenuUI.html":{}}}],["hierarchy",{"_index":2972,"title":{},"body":{"interfaces/Window.html":{}}}],["high",{"_index":2147,"title":{},"body":{"classes/RendererManager.html":{}}}],["higher",{"_index":1877,"title":{},"body":{"classes/PhoenixMenuUI.html":{}}}],["highlight",{"_index":2277,"title":{},"body":{"classes/SelectionManager.html":{},"interfaces/Window.html":{}}}],["highlighting",{"_index":1326,"title":{},"body":{"classes/EffectsManager.html":{},"classes/SelectionManager.html":{}}}],["highlightobject",{"_index":2246,"title":{},"body":{"classes/SelectionManager.html":{}}}],["highlightobject(uuid",{"_index":2275,"title":{},"body":{"classes/SelectionManager.html":{},"interfaces/Window.html":{}}}],["highly",{"_index":3463,"title":{},"body":{"changelog.html":{},"index.html":{}}}],["highvalue",{"_index":1786,"title":{},"body":{"classes/PhoenixMenuNode.html":{},"classes/PhoenixMenuUI.html":{}}}],["hit",{"_index":390,"title":{},"body":{"interfaces/AnimationPreset.html":{},"changelog.html":{}}}],["hitlines",{"_index":3529,"title":{},"body":{"changelog.html":{}}}],["hits",{"_index":389,"title":{},"body":{"interfaces/AnimationPreset.html":{},"classes/DatGUIMenuUI.html":{},"classes/PhoenixMenuUI.html":{},"interfaces/PhoenixUI.html":{},"changelog.html":{},"miscellaneous/variables.html":{}}}],["hitspositions",{"_index":412,"title":{},"body":{"interfaces/AnimationPreset.html":{}}}],["hitspositions.filter((hitposition",{"_index":415,"title":{},"body":{"interfaces/AnimationPreset.html":{}}}],["home",{"_index":3658,"title":{},"body":{"changelog.html":{}}}],["homepage",{"_index":3818,"title":{},"body":{"properties.html":{}}}],["hovered",{"_index":1327,"title":{},"body":{"classes/EffectsManager.html":{},"classes/SelectionManager.html":{}}}],["hovering",{"_index":2255,"title":{},"body":{"classes/SelectionManager.html":{}}}],["html",{"_index":3087,"title":{},"body":{"interfaces/Window.html":{},"index.html":{}}}],["html2canvas",{"_index":3775,"title":{},"body":{"dependencies.html":{}}}],["htmlcanvaselement",{"_index":2133,"title":{},"body":{"classes/RendererManager.html":{},"interfaces/Window.html":{}}}],["htmlelement",{"_index":2200,"title":{},"body":{"classes/ScriptLoader.html":{}}}],["http://github.com/hsf/phoenix/tree/master/packages/phoenix",{"_index":3819,"title":{},"body":{"properties.html":{}}}],["httprequest",{"_index":2869,"title":{},"body":{"interfaces/Window.html":{}}}],["httprequest(url",{"_index":3026,"title":{},"body":{"interfaces/Window.html":{}}}],["https://en.wikipedia.org/wiki/pseudorapidity",{"_index":942,"title":{},"body":{"classes/CoordinateHelper.html":{}}}],["https://github.com/hsf/phoenix/graphs/contributors",{"_index":3827,"title":{},"body":{"properties.html":{}}}],["https://github.com/root",{"_index":3035,"title":{},"body":{"interfaces/Window.html":{}}}],["icon",{"_index":1684,"title":{},"body":{"classes/PhoenixMenuNode.html":{},"classes/PresetView.html":{},"changelog.html":{}}}],["id",{"_index":871,"title":{},"body":{"interfaces/Configuration.html":{},"classes/DatGUIMenuUI.html":{},"interfaces/EventDataLoader.html":{},"classes/LoadingManager.html":{},"classes/PhoenixMenuUI.html":{},"interfaces/PhoenixUI.html":{},"classes/RendererManager.html":{},"classes/TracksMaterial.html":{},"classes/TracksMesh.html":{},"classes/VRManager.html":{},"miscellaneous/variables.html":{}}}],["identifier",{"_index":3712,"title":{},"body":{"coverage.html":{}}}],["identify",{"_index":2205,"title":{},"body":{"classes/ScriptLoader.html":{}}}],["ids",{"_index":2672,"title":{},"body":{"classes/URLOptionsManager.html":{}}}],["idstohide",{"_index":2775,"title":{},"body":{"classes/URLOptionsManager.html":{}}}],["idstohide.foreach((singleid",{"_index":2777,"title":{},"body":{"classes/URLOptionsManager.html":{}}}],["ig",{"_index":3574,"title":{},"body":{"changelog.html":{}}}],["ignore",{"_index":1779,"title":{},"body":{"classes/PhoenixMenuNode.html":{}}}],["ignored",{"_index":2254,"title":{},"body":{"classes/SelectionManager.html":{}}}],["ignorelist",{"_index":2236,"title":{},"body":{"classes/SelectionManager.html":{}}}],["immersive",{"_index":81,"title":{},"body":{"classes/ARManager.html":{},"classes/VRManager.html":{}}}],["implement",{"_index":1943,"title":{},"body":{"interfaces/PhoenixUI.html":{},"changelog.html":{}}}],["implementations",{"_index":3275,"title":{},"body":{"changelog.html":{}}}],["implementing",{"_index":1371,"title":{},"body":{"interfaces/EventDataLoader.html":{}}}],["implements",{"_index":1037,"title":{},"body":{"classes/DatGUIMenuUI.html":{},"classes/PhoenixMenuUI.html":{}}}],["implicitly",{"_index":3704,"title":{},"body":{"changelog.html":{}}}],["import",{"_index":135,"title":{},"body":{"classes/ARManager.html":{},"interfaces/AnimationPreset.html":{},"classes/CMSObjects.html":{},"classes/ColorManager.html":{},"classes/ColorOptions.html":{},"interfaces/Configuration.html":{},"classes/CoordinateHelper.html":{},"classes/DatGUIMenuUI.html":{},"classes/EffectsManager.html":{},"interfaces/EventDataLoader.html":{},"classes/ExportManager.html":{},"classes/Field.html":{},"classes/PhoenixMenuNode.html":{},"classes/PhoenixMenuUI.html":{},"interfaces/PhoenixUI.html":{},"classes/RKHelper.html":{},"classes/RendererManager.html":{},"classes/RungeKutta.html":{},"classes/ScriptLoader.html":{},"classes/SelectionManager.html":{},"classes/State.html":{},"classes/StateManager.html":{},"classes/TracksMaterial.html":{},"classes/TracksMesh.html":{},"classes/URLOptionsManager.html":{},"classes/VRManager.html":{},"interfaces/Window.html":{},"classes/XRManager.html":{},"changelog.html":{},"index.html":{}}}],["importmanager",{"_index":3758,"title":{},"body":{"coverage.html":{}}}],["imports",{"_index":3314,"title":{},"body":{"changelog.html":{}}}],["improve",{"_index":3214,"title":{},"body":{"changelog.html":{}}}],["improvement",{"_index":3457,"title":{},"body":{"changelog.html":{}}}],["improvements",{"_index":3427,"title":{},"body":{"changelog.html":{}}}],["improving",{"_index":3581,"title":{},"body":{"changelog.html":{}}}],["inbounds",{"_index":1581,"title":{},"body":{"classes/Field.html":{},"classes/RKHelper.html":{},"classes/RungeKutta.html":{},"classes/State.html":{}}}],["include",{"_index":709,"title":{},"body":{"classes/ColorOptions.html":{},"index.html":{}}}],["included",{"_index":794,"title":{},"body":{"classes/ColorOptions.html":{},"index.html":{}}}],["including",{"_index":1444,"title":{},"body":{"classes/ExportManager.html":{},"interfaces/Window.html":{},"changelog.html":{}}}],["increase",{"_index":3349,"title":{},"body":{"changelog.html":{}}}],["increases",{"_index":1644,"title":{},"body":{"classes/LoadingManager.html":{}}}],["increment",{"_index":997,"title":{},"body":{"classes/Cut.html":{}}}],["independent",{"_index":3790,"title":{},"body":{"index.html":{},"properties.html":{}}}],["index",{"_index":16,"title":{"index.html":{}},"body":{"classes/ARManager.html":{},"classes/ActiveVariable.html":{},"interfaces/AnimationPreset.html":{},"classes/CMSObjects.html":{},"classes/ColorManager.html":{},"classes/ColorOptions.html":{},"interfaces/Configuration.html":{},"classes/CoordinateHelper.html":{},"classes/Cut.html":{},"classes/DatGUIMenuUI.html":{},"classes/EffectsManager.html":{},"interfaces/EventDataLoader.html":{},"classes/ExportManager.html":{},"classes/Field.html":{},"classes/InfoLogger.html":{},"classes/LoadingManager.html":{},"classes/PhoenixMenuNode.html":{},"classes/PhoenixMenuUI.html":{},"interfaces/PhoenixUI.html":{},"classes/PresetView.html":{},"classes/PrettySymbols.html":{},"classes/RKHelper.html":{},"classes/RendererManager.html":{},"classes/RungeKutta.html":{},"classes/ScriptLoader.html":{},"classes/SelectionManager.html":{},"classes/State.html":{},"classes/StateManager.html":{},"classes/TracksMaterial.html":{},"classes/TracksMesh.html":{},"classes/URLOptionsManager.html":{},"classes/VRManager.html":{},"interfaces/Window.html":{},"classes/XRManager.html":{},"miscellaneous/enumerations.html":{},"miscellaneous/typealiases.html":{},"miscellaneous/variables.html":{}}}],["indexincollection",{"_index":1381,"title":{},"body":{"interfaces/EventDataLoader.html":{},"interfaces/Window.html":{}}}],["indices",{"_index":2481,"title":{},"body":{"classes/TracksMaterial.html":{},"classes/TracksMesh.html":{}}}],["indices_array",{"_index":2482,"title":{},"body":{"classes/TracksMaterial.html":{},"classes/TracksMesh.html":{}}}],["infinity",{"_index":352,"title":{},"body":{"interfaces/AnimationPreset.html":{}}}],["info",{"_index":3,"title":{},"body":{"classes/ARManager.html":{},"classes/ActiveVariable.html":{},"interfaces/AnimationPreset.html":{},"classes/CMSObjects.html":{},"classes/ColorManager.html":{},"classes/ColorOptions.html":{},"interfaces/Configuration.html":{},"classes/CoordinateHelper.html":{},"classes/Cut.html":{},"classes/DatGUIMenuUI.html":{},"classes/EffectsManager.html":{},"interfaces/EventDataLoader.html":{},"classes/ExportManager.html":{},"classes/Field.html":{},"classes/InfoLogger.html":{},"classes/LoadingManager.html":{},"classes/PhoenixMenuNode.html":{},"classes/PhoenixMenuUI.html":{},"interfaces/PhoenixUI.html":{},"classes/PresetView.html":{},"classes/PrettySymbols.html":{},"classes/RKHelper.html":{},"classes/RendererManager.html":{},"classes/RungeKutta.html":{},"classes/ScriptLoader.html":{},"classes/SelectionManager.html":{},"classes/State.html":{},"classes/StateManager.html":{},"classes/TracksMaterial.html":{},"classes/TracksMesh.html":{},"classes/URLOptionsManager.html":{},"classes/VRManager.html":{},"interfaces/Window.html":{},"classes/XRManager.html":{},"changelog.html":{}}}],["infologger",{"_index":1386,"title":{"classes/InfoLogger.html":{}},"body":{"interfaces/EventDataLoader.html":{},"classes/InfoLogger.html":{},"classes/SelectionManager.html":{},"interfaces/Window.html":{},"coverage.html":{}}}],["infologgerlist",{"_index":1594,"title":{},"body":{"classes/InfoLogger.html":{}}}],["information",{"_index":1602,"title":{},"body":{"classes/InfoLogger.html":{},"classes/SelectionManager.html":{},"interfaces/Window.html":{}}}],["inherited",{"_index":86,"title":{},"body":{"classes/ARManager.html":{},"classes/VRManager.html":{}}}],["init",{"_index":2092,"title":{},"body":{"classes/RendererManager.html":{},"classes/SelectionManager.html":{},"changelog.html":{}}}],["init(camera",{"_index":2281,"title":{},"body":{"classes/SelectionManager.html":{}}}],["init(configuration",{"_index":2898,"title":{},"body":{"interfaces/Window.html":{}}}],["init(elementid",{"_index":2118,"title":{},"body":{"classes/RendererManager.html":{}}}],["initchargecoloroptions",{"_index":696,"title":{},"body":{"classes/ColorOptions.html":{}}}],["initcolorbyoptions",{"_index":697,"title":{},"body":{"classes/ColorOptions.html":{}}}],["initial",{"_index":203,"title":{},"body":{"classes/ActiveVariable.html":{}}}],["initialize",{"_index":715,"title":{},"body":{"classes/ColorOptions.html":{},"classes/EffectsManager.html":{},"classes/RendererManager.html":{},"classes/SelectionManager.html":{},"classes/URLOptionsManager.html":{},"interfaces/Window.html":{},"changelog.html":{},"index.html":{}}}],["initialized",{"_index":2257,"title":{},"body":{"classes/SelectionManager.html":{}}}],["initializes",{"_index":3089,"title":{},"body":{"interfaces/Window.html":{}}}],["initializing",{"_index":2102,"title":{},"body":{"classes/RendererManager.html":{}}}],["initially",{"_index":2977,"title":{},"body":{"interfaces/Window.html":{}}}],["initiallyvisible",{"_index":2976,"title":{},"body":{"interfaces/Window.html":{}}}],["initmomcoloroptions",{"_index":698,"title":{},"body":{"classes/ColorOptions.html":{}}}],["initrenderer",{"_index":2093,"title":{},"body":{"classes/RendererManager.html":{}}}],["initrenderer(elementid",{"_index":2121,"title":{},"body":{"classes/RendererManager.html":{}}}],["initxr(xrsessiontype",{"_index":2933,"title":{},"body":{"interfaces/Window.html":{}}}],["input",{"_index":1462,"title":{},"body":{"classes/ExportManager.html":{},"interfaces/Window.html":{},"changelog.html":{},"miscellaneous/variables.html":{}}}],["inputfile",{"_index":3899,"title":{},"body":{"miscellaneous/variables.html":{}}}],["inputfile.accept",{"_index":3902,"title":{},"body":{"miscellaneous/variables.html":{}}}],["inputfile.click",{"_index":3913,"title":{},"body":{"miscellaneous/variables.html":{}}}],["inputfile.onchange",{"_index":3903,"title":{},"body":{"miscellaneous/variables.html":{}}}],["inputfile.remove",{"_index":3911,"title":{},"body":{"miscellaneous/variables.html":{}}}],["inputfile.type",{"_index":3901,"title":{},"body":{"miscellaneous/variables.html":{}}}],["inside",{"_index":628,"title":{},"body":{"classes/ColorManager.html":{},"classes/EffectsManager.html":{},"interfaces/EventDataLoader.html":{},"classes/InfoLogger.html":{},"classes/SelectionManager.html":{},"interfaces/Window.html":{},"changelog.html":{}}}],["install",{"_index":3793,"title":{},"body":{"index.html":{}}}],["instance",{"_index":734,"title":{},"body":{"classes/ColorOptions.html":{},"classes/LoadingManager.html":{},"classes/StateManager.html":{},"interfaces/Window.html":{}}}],["instanceof",{"_index":353,"title":{},"body":{"interfaces/AnimationPreset.html":{}}}],["instantiate",{"_index":1452,"title":{},"body":{"classes/ExportManager.html":{}}}],["instead",{"_index":1763,"title":{},"body":{"classes/PhoenixMenuNode.html":{}}}],["int",{"_index":2553,"title":{},"body":{"classes/TracksMaterial.html":{},"classes/TracksMesh.html":{}}}],["int32array(this.track_id",{"_index":2519,"title":{},"body":{"classes/TracksMaterial.html":{},"classes/TracksMesh.html":{}}}],["integrator",{"_index":1508,"title":{},"body":{"classes/Field.html":{},"classes/RungeKutta.html":{},"classes/State.html":{}}}],["interface",{"_index":219,"title":{"interfaces/AnimationPreset.html":{},"interfaces/Configuration.html":{},"interfaces/EventDataLoader.html":{},"interfaces/PhoenixUI.html":{},"interfaces/Window.html":{}},"body":{"interfaces/AnimationPreset.html":{},"interfaces/Configuration.html":{},"interfaces/EventDataLoader.html":{},"interfaces/PhoenixUI.html":{},"interfaces/Window.html":{},"changelog.html":{},"coverage.html":{}}}],["interfaces",{"_index":221,"title":{},"body":{"interfaces/AnimationPreset.html":{},"interfaces/Configuration.html":{},"interfaces/EventDataLoader.html":{},"interfaces/PhoenixUI.html":{},"interfaces/Window.html":{},"overview.html":{}}}],["intersected",{"_index":2286,"title":{},"body":{"classes/SelectionManager.html":{}}}],["intersectedobject",{"_index":2328,"title":{},"body":{"classes/SelectionManager.html":{}}}],["intersectedobject.name",{"_index":2333,"title":{},"body":{"classes/SelectionManager.html":{}}}],["intersectedobject.userdata",{"_index":2339,"title":{},"body":{"classes/SelectionManager.html":{}}}],["intersectedobject.userdata[key",{"_index":2351,"title":{},"body":{"classes/SelectionManager.html":{}}}],["intersectobject",{"_index":2247,"title":{},"body":{"classes/SelectionManager.html":{}}}],["intersectobject(event",{"_index":2283,"title":{},"body":{"classes/SelectionManager.html":{}}}],["intersects",{"_index":2285,"title":{},"body":{"classes/SelectionManager.html":{}}}],["intersects.length",{"_index":2373,"title":{},"body":{"classes/SelectionManager.html":{}}}],["intersects[0].object",{"_index":2376,"title":{},"body":{"classes/SelectionManager.html":{}}}],["interval",{"_index":2849,"title":{},"body":{"classes/VRManager.html":{}}}],["intervalid",{"_index":2850,"title":{},"body":{"classes/VRManager.html":{}}}],["intitialize",{"_index":2888,"title":{},"body":{"interfaces/Window.html":{}}}],["introduce",{"_index":3536,"title":{},"body":{"changelog.html":{}}}],["invisible",{"_index":396,"title":{},"body":{"interfaces/AnimationPreset.html":{}}}],["io",{"_index":3227,"title":{},"body":{"changelog.html":{}}}],["ischecked",{"_index":1867,"title":{},"body":{"classes/PhoenixMenuUI.html":{}}}],["isfixedoverlay",{"_index":2094,"title":{},"body":{"classes/RendererManager.html":{}}}],["isinit",{"_index":2237,"title":{},"body":{"classes/SelectionManager.html":{}}}],["issues",{"_index":3355,"title":{},"body":{"changelog.html":{}}}],["istracksmaterial",{"_index":2471,"title":{},"body":{"classes/TracksMaterial.html":{},"classes/TracksMesh.html":{}}}],["it's",{"_index":2018,"title":{},"body":{"classes/PrettySymbols.html":{}}}],["item",{"_index":1633,"title":{},"body":{"classes/LoadingManager.html":{},"classes/PhoenixMenuNode.html":{},"miscellaneous/variables.html":{}}}],["itemloaded",{"_index":1627,"title":{},"body":{"classes/LoadingManager.html":{}}}],["itemloaded(id",{"_index":1645,"title":{},"body":{"classes/LoadingManager.html":{}}}],["items",{"_index":438,"title":{},"body":{"interfaces/AnimationPreset.html":{},"classes/LoadingManager.html":{},"interfaces/Window.html":{},"changelog.html":{}}}],["itself",{"_index":1739,"title":{},"body":{"classes/PhoenixMenuNode.html":{},"interfaces/Window.html":{}}}],["jasmine",{"_index":3629,"title":{},"body":{"changelog.html":{}}}],["jet",{"_index":366,"title":{},"body":{"interfaces/AnimationPreset.html":{},"changelog.html":{}}}],["jets",{"_index":3297,"title":{},"body":{"changelog.html":{},"miscellaneous/variables.html":{}}}],["jive",{"_index":3343,"title":{},"body":{"changelog.html":{}}}],["jiveloader",{"_index":2752,"title":{},"body":{"classes/URLOptionsManager.html":{}}}],["jiveloader.geteventdata",{"_index":2756,"title":{},"body":{"classes/URLOptionsManager.html":{}}}],["jiveloader.process(fileswithdata[filename",{"_index":2755,"title":{},"body":{"classes/URLOptionsManager.html":{}}}],["jivexml",{"_index":2653,"title":{},"body":{"classes/URLOptionsManager.html":{},"changelog.html":{}}}],["jivexml_xxx_yyy.zip",{"_index":2761,"title":{},"body":{"classes/URLOptionsManager.html":{}}}],["jivexmlloader",{"_index":2674,"title":{},"body":{"classes/URLOptionsManager.html":{},"coverage.html":{}}}],["jixexml",{"_index":3506,"title":{},"body":{"changelog.html":{}}}],["join('\\n",{"_index":2597,"title":{},"body":{"classes/TracksMaterial.html":{},"classes/TracksMesh.html":{}}}],["js",{"_index":3780,"title":{},"body":{"dependencies.html":{}}}],["json",{"_index":1733,"title":{},"body":{"classes/PhoenixMenuNode.html":{},"classes/StateManager.html":{},"classes/URLOptionsManager.html":{},"interfaces/Window.html":{},"changelog.html":{},"coverage.html":{}}}],["json.parse(fileswithdata[filename",{"_index":2751,"title":{},"body":{"classes/URLOptionsManager.html":{}}}],["json.parse(input",{"_index":2998,"title":{},"body":{"interfaces/Window.html":{}}}],["json.parse(json",{"_index":1800,"title":{},"body":{"classes/PhoenixMenuNode.html":{},"classes/StateManager.html":{}}}],["json.stringify(jsonresult",{"_index":1469,"title":{},"body":{"classes/ExportManager.html":{}}}],["json.stringify(state",{"_index":2443,"title":{},"body":{"classes/StateManager.html":{}}}],["jsondata",{"_index":2445,"title":{},"body":{"classes/StateManager.html":{}}}],["jsondata['eventdisplay",{"_index":2449,"title":{},"body":{"classes/StateManager.html":{}}}],["jsondata['eventdisplay']?.['cameraposition",{"_index":2451,"title":{},"body":{"classes/StateManager.html":{}}}],["jsondata['eventdisplay']?.['openingclippingangle",{"_index":2455,"title":{},"body":{"classes/StateManager.html":{}}}],["jsondata['eventdisplay']?.['startclippingangle",{"_index":2453,"title":{},"body":{"classes/StateManager.html":{}}}],["jsondata['eventdisplay']['openingclippingangle",{"_index":2463,"title":{},"body":{"classes/StateManager.html":{}}}],["jsondata['eventdisplay']['startclippingangle",{"_index":2461,"title":{},"body":{"classes/StateManager.html":{}}}],["jsondata['phoenixmenu",{"_index":2446,"title":{},"body":{"classes/StateManager.html":{}}}],["jsonobject",{"_index":1799,"title":{},"body":{"classes/PhoenixMenuNode.html":{}}}],["jsonobject['children",{"_index":1817,"title":{},"body":{"classes/PhoenixMenuNode.html":{}}}],["jsonobject['childrenactive",{"_index":1801,"title":{},"body":{"classes/PhoenixMenuNode.html":{}}}],["jsonobject['configs",{"_index":1805,"title":{},"body":{"classes/PhoenixMenuNode.html":{}}}],["jsonobject['togglestate",{"_index":1802,"title":{},"body":{"classes/PhoenixMenuNode.html":{}}}],["jsonresult",{"_index":1467,"title":{},"body":{"classes/ExportManager.html":{}}}],["jsroot",{"_index":2870,"title":{},"body":{"interfaces/Window.html":{},"changelog.html":{},"dependencies.html":{}}}],["jsroot/geom",{"_index":2873,"title":{},"body":{"interfaces/Window.html":{}}}],["jsroot/io",{"_index":2875,"title":{},"body":{"interfaces/Window.html":{}}}],["jsrooteventloader",{"_index":3233,"title":{},"body":{"changelog.html":{},"coverage.html":{}}}],["jsrootsettings",{"_index":2872,"title":{},"body":{"interfaces/Window.html":{}}}],["jsrootsettings.usestamp",{"_index":3037,"title":{},"body":{"interfaces/Window.html":{}}}],["jszip",{"_index":3778,"title":{},"body":{"dependencies.html":{},"miscellaneous/variables.html":{}}}],["k1",{"_index":1520,"title":{},"body":{"classes/Field.html":{},"classes/RungeKutta.html":{},"classes/State.html":{}}}],["k1.clone().sub(k2).sub(k3).add(k4",{"_index":1547,"title":{},"body":{"classes/Field.html":{},"classes/RungeKutta.html":{},"classes/State.html":{}}}],["k2",{"_index":1513,"title":{},"body":{"classes/Field.html":{},"classes/RungeKutta.html":{},"classes/State.html":{}}}],["k3",{"_index":1514,"title":{},"body":{"classes/Field.html":{},"classes/RungeKutta.html":{},"classes/State.html":{}}}],["k4",{"_index":1515,"title":{},"body":{"classes/Field.html":{},"classes/RungeKutta.html":{},"classes/State.html":{}}}],["k4).lpnorm",{"_index":1548,"title":{},"body":{"classes/Field.html":{},"classes/RungeKutta.html":{},"classes/State.html":{}}}],["keep",{"_index":3540,"title":{},"body":{"changelog.html":{}}}],["key",{"_index":711,"title":{},"body":{"classes/ColorOptions.html":{},"interfaces/EventDataLoader.html":{},"classes/LoadingManager.html":{},"classes/PhoenixMenuNode.html":{},"classes/PrettySymbols.html":{},"classes/SelectionManager.html":{},"classes/StateManager.html":{},"classes/URLOptionsManager.html":{},"interfaces/Window.html":{},"classes/XRManager.html":{}}}],["keyboard",{"_index":2912,"title":{},"body":{"interfaces/Window.html":{},"changelog.html":{}}}],["keys",{"_index":778,"title":{},"body":{"classes/ColorOptions.html":{},"interfaces/EventDataLoader.html":{},"classes/URLOptionsManager.html":{},"interfaces/Window.html":{},"miscellaneous/enumerations.html":{}}}],["kutta",{"_index":1493,"title":{},"body":{"classes/Field.html":{},"classes/RKHelper.html":{},"classes/RungeKutta.html":{},"classes/State.html":{}}}],["kutta.ts",{"_index":1486,"title":{},"body":{"classes/Field.html":{},"classes/RungeKutta.html":{},"classes/State.html":{},"coverage.html":{}}}],["kutta.ts:12",{"_index":2189,"title":{},"body":{"classes/RungeKutta.html":{}}}],["kutta.ts:126",{"_index":2188,"title":{},"body":{"classes/RungeKutta.html":{}}}],["kutta.ts:168",{"_index":2386,"title":{},"body":{"classes/State.html":{}}}],["kutta.ts:170",{"_index":2382,"title":{},"body":{"classes/State.html":{}}}],["kutta.ts:172",{"_index":2384,"title":{},"body":{"classes/State.html":{}}}],["kutta.ts:174",{"_index":2387,"title":{},"body":{"classes/State.html":{}}}],["kutta.ts:176",{"_index":2390,"title":{},"body":{"classes/State.html":{}}}],["kutta.ts:178",{"_index":2388,"title":{},"body":{"classes/State.html":{}}}],["kutta.ts:180",{"_index":2383,"title":{},"body":{"classes/State.html":{}}}],["kutta.ts:182",{"_index":2385,"title":{},"body":{"classes/State.html":{}}}],["kutta.ts:192",{"_index":1489,"title":{},"body":{"classes/Field.html":{}}}],["label",{"_index":786,"title":{},"body":{"classes/ColorOptions.html":{},"classes/DatGUIMenuUI.html":{},"interfaces/EventDataLoader.html":{},"classes/InfoLogger.html":{},"classes/PhoenixMenuUI.html":{},"interfaces/PhoenixUI.html":{},"classes/StateManager.html":{},"interfaces/Window.html":{},"changelog.html":{},"miscellaneous/typealiases.html":{},"miscellaneous/variables.html":{}}}],["labelfolderreference",{"_index":1287,"title":{},"body":{"classes/DatGUIMenuUI.html":{},"classes/PhoenixMenuUI.html":{},"interfaces/PhoenixUI.html":{}}}],["labelid",{"_index":1098,"title":{},"body":{"classes/DatGUIMenuUI.html":{},"classes/PhoenixMenuUI.html":{},"interfaces/PhoenixUI.html":{},"interfaces/Window.html":{}}}],["labelitem",{"_index":1269,"title":{},"body":{"classes/DatGUIMenuUI.html":{}}}],["labelitem.add(this.guiparameters[labelid",{"_index":1285,"title":{},"body":{"classes/DatGUIMenuUI.html":{}}}],["labelitemfolder",{"_index":1112,"title":{},"body":{"classes/DatGUIMenuUI.html":{}}}],["labelnode",{"_index":1859,"title":{},"body":{"classes/PhoenixMenuUI.html":{}}}],["labelnode.addconfig('button",{"_index":1936,"title":{},"body":{"classes/PhoenixMenuUI.html":{}}}],["labelnode.addconfig('color",{"_index":1935,"title":{},"body":{"classes/PhoenixMenuUI.html":{}}}],["labelnode?.remove",{"_index":1940,"title":{},"body":{"classes/PhoenixMenuUI.html":{}}}],["labelobject",{"_index":1274,"title":{},"body":{"classes/DatGUIMenuUI.html":{},"classes/PhoenixMenuUI.html":{}}}],["labels",{"_index":1067,"title":{},"body":{"classes/DatGUIMenuUI.html":{},"interfaces/EventDataLoader.html":{},"classes/PhoenixMenuUI.html":{},"interfaces/PhoenixUI.html":{},"interfaces/Window.html":{},"changelog.html":{}}}],["labelsfolder",{"_index":1042,"title":{},"body":{"classes/DatGUIMenuUI.html":{},"classes/PhoenixMenuUI.html":{}}}],["labelsobject",{"_index":3122,"title":{},"body":{"interfaces/Window.html":{}}}],["labelsobject[eventdatatype",{"_index":3124,"title":{},"body":{"interfaces/Window.html":{}}}],["labelsobject[eventdatatype][collection",{"_index":3125,"title":{},"body":{"interfaces/Window.html":{}}}],["labelsobject[eventdatatype][collection][index",{"_index":3121,"title":{},"body":{"interfaces/Window.html":{}}}],["labelssizemenu",{"_index":1260,"title":{},"body":{"classes/DatGUIMenuUI.html":{}}}],["labelssizemenu.onfinishchange(onsizechange",{"_index":1262,"title":{},"body":{"classes/DatGUIMenuUI.html":{}}}],["last",{"_index":149,"title":{},"body":{"classes/ARManager.html":{},"interfaces/AnimationPreset.html":{},"classes/Field.html":{},"classes/RungeKutta.html":{},"classes/State.html":{},"classes/VRManager.html":{},"interfaces/Window.html":{},"classes/XRManager.html":{}}}],["later",{"_index":1001,"title":{},"body":{"classes/Cut.html":{},"classes/ExportManager.html":{},"interfaces/Window.html":{}}}],["latest",{"_index":3587,"title":{},"body":{"changelog.html":{}}}],["left",{"_index":588,"title":{},"body":{"classes/CMSObjects.html":{},"classes/URLOptionsManager.html":{}}}],["length",{"_index":1580,"title":{},"body":{"classes/Field.html":{},"classes/RungeKutta.html":{},"classes/State.html":{},"changelog.html":{}}}],["level",{"_index":1710,"title":{},"body":{"classes/PhoenixMenuNode.html":{},"classes/PhoenixMenuUI.html":{},"changelog.html":{}}}],["lhcb",{"_index":3250,"title":{},"body":{"changelog.html":{}}}],["lib/models/cut.model",{"_index":1117,"title":{},"body":{"classes/DatGUIMenuUI.html":{},"classes/PhoenixMenuUI.html":{},"interfaces/PhoenixUI.html":{}}}],["lib/types/configuration",{"_index":2678,"title":{},"body":{"classes/URLOptionsManager.html":{},"interfaces/Window.html":{}}}],["library",{"_index":1392,"title":{},"body":{"interfaces/EventDataLoader.html":{},"changelog.html":{}}}],["license",{"_index":3821,"title":{},"body":{"properties.html":{}}}],["light",{"_index":881,"title":{},"body":{"interfaces/Configuration.html":{}}}],["limit",{"_index":3383,"title":{},"body":{"changelog.html":{}}}],["limits",{"_index":3495,"title":{},"body":{"changelog.html":{}}}],["line",{"_index":2807,"title":{},"body":{"classes/VRManager.html":{},"changelog.html":{}}}],["line(geometry",{"_index":2843,"title":{},"body":{"classes/VRManager.html":{}}}],["line.name",{"_index":2844,"title":{},"body":{"classes/VRManager.html":{}}}],["line.scale.z",{"_index":2845,"title":{},"body":{"classes/VRManager.html":{}}}],["linebasicmaterial",{"_index":559,"title":{},"body":{"classes/CMSObjects.html":{}}}],["lineboxobject",{"_index":608,"title":{},"body":{"classes/CMSObjects.html":{}}}],["linehit",{"_index":342,"title":{},"body":{"interfaces/AnimationPreset.html":{}}}],["linehits",{"_index":3548,"title":{},"body":{"changelog.html":{}}}],["lines",{"_index":603,"title":{},"body":{"classes/CMSObjects.html":{},"changelog.html":{}}}],["linesegments",{"_index":561,"title":{},"body":{"classes/CMSObjects.html":{}}}],["linewidth",{"_index":2563,"title":{},"body":{"classes/TracksMaterial.html":{},"classes/TracksMesh.html":{}}}],["link",{"_index":564,"title":{},"body":{"classes/CMSObjects.html":{},"changelog.html":{}}}],["linkedtrackcollection",{"_index":670,"title":{},"body":{"classes/ColorManager.html":{}}}],["linkedtracks",{"_index":671,"title":{},"body":{"classes/ColorManager.html":{}}}],["linkedtracks.foreach((trackindex",{"_index":678,"title":{},"body":{"classes/ColorManager.html":{}}}],["linting",{"_index":3206,"title":{},"body":{"changelog.html":{}}}],["list",{"_index":1406,"title":{},"body":{"interfaces/EventDataLoader.html":{},"classes/InfoLogger.html":{},"classes/RendererManager.html":{},"interfaces/Window.html":{}}}],["listen",{"_index":1142,"title":{},"body":{"classes/DatGUIMenuUI.html":{},"classes/LoadingManager.html":{}}}],["listener",{"_index":1639,"title":{},"body":{"classes/LoadingManager.html":{},"classes/VRManager.html":{}}}],["listentodisplayedeventchange(callback",{"_index":3068,"title":{},"body":{"interfaces/Window.html":{}}}],["listentoloadedeventschange(callback",{"_index":3070,"title":{},"body":{"interfaces/Window.html":{}}}],["literal",{"_index":233,"title":{},"body":{"interfaces/AnimationPreset.html":{},"interfaces/Configuration.html":{},"interfaces/EventDataLoader.html":{},"classes/LoadingManager.html":{},"classes/PhoenixMenuNode.html":{},"classes/PrettySymbols.html":{},"classes/RKHelper.html":{},"classes/RungeKutta.html":{},"classes/SelectionManager.html":{},"classes/StateManager.html":{},"classes/URLOptionsManager.html":{},"miscellaneous/typealiases.html":{}}}],["load",{"_index":867,"title":{},"body":{"interfaces/Configuration.html":{},"classes/ExportManager.html":{},"classes/LoadingManager.html":{},"classes/PhoenixMenuNode.html":{},"classes/PhoenixMenuUI.html":{},"classes/ScriptLoader.html":{},"classes/StateManager.html":{},"classes/URLOptionsManager.html":{},"interfaces/Window.html":{},"changelog.html":{},"index.html":{},"miscellaneous/variables.html":{}}}],["loadable",{"_index":1618,"title":{},"body":{"classes/LoadingManager.html":{},"interfaces/Window.html":{}}}],["loadconfig",{"_index":2702,"title":{},"body":{"classes/URLOptionsManager.html":{}}}],["loaded",{"_index":1435,"title":{},"body":{"classes/ExportManager.html":{},"classes/LoadingManager.html":{},"classes/ScriptLoader.html":{},"classes/StateManager.html":{},"interfaces/Window.html":{},"changelog.html":{}}}],["loader",{"_index":875,"title":{},"body":{"interfaces/Configuration.html":{},"interfaces/EventDataLoader.html":{},"classes/ScriptLoader.html":{},"classes/URLOptionsManager.html":{},"interfaces/Window.html":{},"changelog.html":{},"index.html":{}}}],["loader.geteventdata",{"_index":2729,"title":{},"body":{"classes/URLOptionsManager.html":{}}}],["loader.process(filedata",{"_index":2728,"title":{},"body":{"classes/URLOptionsManager.html":{}}}],["loader.ts",{"_index":1370,"title":{},"body":{"interfaces/EventDataLoader.html":{},"classes/ScriptLoader.html":{},"coverage.html":{}}}],["loader.ts:15",{"_index":2201,"title":{},"body":{"classes/ScriptLoader.html":{}}}],["loader.ts:17",{"_index":1387,"title":{},"body":{"interfaces/EventDataLoader.html":{}}}],["loader.ts:29",{"_index":1413,"title":{},"body":{"interfaces/EventDataLoader.html":{}}}],["loader.ts:35",{"_index":1404,"title":{},"body":{"interfaces/EventDataLoader.html":{}}}],["loader.ts:42",{"_index":1401,"title":{},"body":{"interfaces/EventDataLoader.html":{}}}],["loader.ts:48",{"_index":1409,"title":{},"body":{"interfaces/EventDataLoader.html":{}}}],["loader.ts:57",{"_index":1382,"title":{},"body":{"interfaces/EventDataLoader.html":{}}}],["loader.ts:67",{"_index":1418,"title":{},"body":{"interfaces/EventDataLoader.html":{}}}],["loaders",{"_index":1372,"title":{},"body":{"interfaces/EventDataLoader.html":{}}}],["loaders/event",{"_index":887,"title":{},"body":{"interfaces/Configuration.html":{}}}],["loaders/jivexml",{"_index":2675,"title":{},"body":{"classes/URLOptionsManager.html":{}}}],["loaders/objects/tracks",{"_index":252,"title":{},"body":{"interfaces/AnimationPreset.html":{}}}],["loaders/phoenix",{"_index":2677,"title":{},"body":{"classes/URLOptionsManager.html":{},"interfaces/Window.html":{}}}],["loadevent(eventkey",{"_index":2961,"title":{},"body":{"interfaces/Window.html":{}}}],["loadeventfolderstate",{"_index":1839,"title":{},"body":{"classes/PhoenixMenuUI.html":{}}}],["loadfile",{"_index":2430,"title":{},"body":{"classes/StateManager.html":{},"coverage.html":{},"miscellaneous/variables.html":{}}}],["loadfile((data",{"_index":2434,"title":{},"body":{"classes/StateManager.html":{}}}],["loadgltfgeometry",{"_index":3015,"title":{},"body":{"interfaces/Window.html":{}}}],["loading",{"_index":877,"title":{},"body":{"interfaces/Configuration.html":{},"classes/LoadingManager.html":{},"classes/ScriptLoader.html":{},"classes/URLOptionsManager.html":{},"interfaces/Window.html":{},"changelog.html":{}}}],["loadingmanager",{"_index":1616,"title":{"classes/LoadingManager.html":{}},"body":{"classes/LoadingManager.html":{},"classes/ScriptLoader.html":{},"interfaces/Window.html":{},"coverage.html":{}}}],["loadingmanager.addloadableitem('single_script",{"_index":2210,"title":{},"body":{"classes/ScriptLoader.html":{}}}],["loadingmanager.instance",{"_index":1652,"title":{},"body":{"classes/LoadingManager.html":{}}}],["loadingmanager.itemloaded('single_script",{"_index":2225,"title":{},"body":{"classes/ScriptLoader.html":{}}}],["loadjsongeometry",{"_index":3020,"title":{},"body":{"interfaces/Window.html":{}}}],["loadjsrootscripts",{"_index":3230,"title":{},"body":{"changelog.html":{}}}],["loadlabels",{"_index":1257,"title":{},"body":{"classes/DatGUIMenuUI.html":{}}}],["loadobjgeometry",{"_index":2980,"title":{},"body":{"interfaces/Window.html":{}}}],["loadrootgeometry",{"_index":3033,"title":{},"body":{"interfaces/Window.html":{}}}],["loadrootjsongeometry",{"_index":3024,"title":{},"body":{"interfaces/Window.html":{}}}],["loads",{"_index":2940,"title":{},"body":{"interfaces/Window.html":{}}}],["loadsceneconfiguration(sceneconfiguration",{"_index":3057,"title":{},"body":{"interfaces/Window.html":{}}}],["loadscript",{"_index":2196,"title":{},"body":{"classes/ScriptLoader.html":{}}}],["loadscript(scripturl",{"_index":2197,"title":{},"body":{"classes/ScriptLoader.html":{}}}],["loadstatefromjson",{"_index":1694,"title":{},"body":{"classes/PhoenixMenuNode.html":{},"classes/StateManager.html":{}}}],["loadstatefromjson(json",{"_index":1731,"title":{},"body":{"classes/PhoenixMenuNode.html":{},"classes/StateManager.html":{}}}],["local",{"_index":466,"title":{},"body":{"interfaces/AnimationPreset.html":{},"classes/RendererManager.html":{},"classes/VRManager.html":{},"changelog.html":{},"miscellaneous/variables.html":{}}}],["localstorage",{"_index":3892,"title":{},"body":{"miscellaneous/variables.html":{}}}],["localstorage.getitem(item",{"_index":3889,"title":{},"body":{"miscellaneous/variables.html":{}}}],["localstorage.setitem(item",{"_index":3893,"title":{},"body":{"miscellaneous/variables.html":{}}}],["location",{"_index":2052,"title":{},"body":{"classes/RKHelper.html":{}}}],["log",{"_index":1607,"title":{},"body":{"classes/InfoLogger.html":{},"classes/SelectionManager.html":{},"changelog.html":{}}}],["logger",{"_index":1398,"title":{},"body":{"interfaces/EventDataLoader.html":{},"classes/InfoLogger.html":{},"classes/SelectionManager.html":{},"interfaces/Window.html":{}}}],["logger.ts",{"_index":1593,"title":{},"body":{"classes/InfoLogger.html":{},"coverage.html":{}}}],["logger.ts:15",{"_index":1605,"title":{},"body":{"classes/InfoLogger.html":{}}}],["logger.ts:26",{"_index":1608,"title":{},"body":{"classes/InfoLogger.html":{}}}],["logger.ts:6",{"_index":1597,"title":{},"body":{"classes/InfoLogger.html":{}}}],["logger.ts:8",{"_index":1599,"title":{},"body":{"classes/InfoLogger.html":{}}}],["logging",{"_index":1399,"title":{},"body":{"interfaces/EventDataLoader.html":{},"classes/InfoLogger.html":{},"classes/SelectionManager.html":{}}}],["logo",{"_index":2765,"title":{},"body":{"classes/URLOptionsManager.html":{}}}],["logs",{"_index":1598,"title":{},"body":{"classes/InfoLogger.html":{},"interfaces/Window.html":{}}}],["long",{"_index":2019,"title":{},"body":{"classes/PrettySymbols.html":{}}}],["longer",{"_index":3382,"title":{},"body":{"changelog.html":{}}}],["look",{"_index":3102,"title":{},"body":{"interfaces/Window.html":{},"changelog.html":{}}}],["lookatobject(uuid",{"_index":3103,"title":{},"body":{"interfaces/Window.html":{}}}],["loop",{"_index":2151,"title":{},"body":{"classes/RendererManager.html":{},"interfaces/Window.html":{},"changelog.html":{}}}],["lost",{"_index":2929,"title":{},"body":{"interfaces/Window.html":{}}}],["lower",{"_index":1005,"title":{},"body":{"classes/Cut.html":{},"changelog.html":{}}}],["lowres",{"_index":1066,"title":{},"body":{"classes/DatGUIMenuUI.html":{}}}],["m",{"_index":2568,"title":{},"body":{"classes/TracksMaterial.html":{},"classes/TracksMesh.html":{}}}],["made",{"_index":527,"title":{},"body":{"interfaces/AnimationPreset.html":{},"classes/DatGUIMenuUI.html":{},"classes/PhoenixMenuNode.html":{},"classes/PhoenixMenuUI.html":{},"interfaces/PhoenixUI.html":{}}}],["main",{"_index":1312,"title":{},"body":{"classes/EffectsManager.html":{},"classes/RendererManager.html":{},"classes/TracksMaterial.html":{},"classes/TracksMesh.html":{},"classes/URLOptionsManager.html":{}}}],["mainlogo",{"_index":2764,"title":{},"body":{"classes/URLOptionsManager.html":{}}}],["mainrenderer",{"_index":2083,"title":{},"body":{"classes/RendererManager.html":{}}}],["mainrenderer.domelement.id",{"_index":2170,"title":{},"body":{"classes/RendererManager.html":{}}}],["mainrenderer.setpixelratio(window.devicepixelratio",{"_index":2169,"title":{},"body":{"classes/RendererManager.html":{}}}],["mainrenderer.setsize(rendererwidth",{"_index":2168,"title":{},"body":{"classes/RendererManager.html":{}}}],["major",{"_index":3700,"title":{},"body":{"changelog.html":{}}}],["make",{"_index":397,"title":{},"body":{"interfaces/AnimationPreset.html":{},"classes/CMSObjects.html":{},"classes/CoordinateHelper.html":{},"changelog.html":{}}}],["makescreenshot",{"_index":2931,"title":{},"body":{"interfaces/Window.html":{}}}],["making",{"_index":395,"title":{},"body":{"interfaces/AnimationPreset.html":{}}}],["manage",{"_index":3407,"title":{},"body":{"changelog.html":{}}}],["manager",{"_index":11,"title":{},"body":{"classes/ARManager.html":{},"interfaces/AnimationPreset.html":{},"classes/ColorManager.html":{},"classes/ColorOptions.html":{},"interfaces/Configuration.html":{},"classes/DatGUIMenuUI.html":{},"classes/EffectsManager.html":{},"interfaces/EventDataLoader.html":{},"classes/ExportManager.html":{},"classes/LoadingManager.html":{},"classes/PhoenixMenuUI.html":{},"classes/RendererManager.html":{},"classes/ScriptLoader.html":{},"classes/SelectionManager.html":{},"classes/StateManager.html":{},"classes/URLOptionsManager.html":{},"classes/VRManager.html":{},"interfaces/Window.html":{},"classes/XRManager.html":{},"changelog.html":{}}}],["manager.ts",{"_index":8,"title":{},"body":{"classes/ARManager.html":{},"interfaces/AnimationPreset.html":{},"classes/ColorManager.html":{},"classes/EffectsManager.html":{},"classes/ExportManager.html":{},"classes/LoadingManager.html":{},"classes/RendererManager.html":{},"classes/SelectionManager.html":{},"classes/StateManager.html":{},"classes/URLOptionsManager.html":{},"classes/VRManager.html":{},"classes/XRManager.html":{},"coverage.html":{},"miscellaneous/enumerations.html":{},"miscellaneous/variables.html":{}}}],["manager.ts:10",{"_index":2105,"title":{},"body":{"classes/RendererManager.html":{}}}],["manager.ts:102",{"_index":2290,"title":{},"body":{"classes/SelectionManager.html":{}}}],["manager.ts:104",{"_index":2417,"title":{},"body":{"classes/StateManager.html":{}}}],["manager.ts:105",{"_index":1643,"title":{},"body":{"classes/LoadingManager.html":{},"classes/RendererManager.html":{}}}],["manager.ts:109",{"_index":3130,"title":{},"body":{"classes/XRManager.html":{}}}],["manager.ts:11",{"_index":1631,"title":{},"body":{"classes/LoadingManager.html":{}}}],["manager.ts:111",{"_index":2272,"title":{},"body":{"classes/SelectionManager.html":{}}}],["manager.ts:112",{"_index":1651,"title":{},"body":{"classes/LoadingManager.html":{}}}],["manager.ts:119",{"_index":2137,"title":{},"body":{"classes/RendererManager.html":{}}}],["manager.ts:12",{"_index":1317,"title":{},"body":{"classes/EffectsManager.html":{},"classes/RendererManager.html":{},"classes/StateManager.html":{}}}],["manager.ts:127",{"_index":2114,"title":{},"body":{"classes/RendererManager.html":{}}}],["manager.ts:128",{"_index":2269,"title":{},"body":{"classes/SelectionManager.html":{}}}],["manager.ts:135",{"_index":2115,"title":{},"body":{"classes/RendererManager.html":{},"classes/XRManager.html":{}}}],["manager.ts:14",{"_index":1315,"title":{},"body":{"classes/EffectsManager.html":{},"classes/ExportManager.html":{},"classes/LoadingManager.html":{},"classes/RendererManager.html":{},"classes/StateManager.html":{}}}],["manager.ts:143",{"_index":2116,"title":{},"body":{"classes/RendererManager.html":{},"classes/URLOptionsManager.html":{}}}],["manager.ts:145",{"_index":2263,"title":{},"body":{"classes/SelectionManager.html":{}}}],["manager.ts:147",{"_index":2421,"title":{},"body":{"classes/StateManager.html":{}}}],["manager.ts:149",{"_index":2800,"title":{},"body":{"classes/VRManager.html":{}}}],["manager.ts:15",{"_index":82,"title":{},"body":{"classes/ARManager.html":{},"classes/VRManager.html":{}}}],["manager.ts:153",{"_index":2109,"title":{},"body":{"classes/RendererManager.html":{}}}],["manager.ts:155",{"_index":2429,"title":{},"body":{"classes/StateManager.html":{}}}],["manager.ts:158",{"_index":2258,"title":{},"body":{"classes/SelectionManager.html":{},"classes/URLOptionsManager.html":{}}}],["manager.ts:16",{"_index":1324,"title":{},"body":{"classes/EffectsManager.html":{},"classes/LoadingManager.html":{},"classes/StateManager.html":{}}}],["manager.ts:163",{"_index":2124,"title":{},"body":{"classes/RendererManager.html":{},"classes/StateManager.html":{}}}],["manager.ts:169",{"_index":2667,"title":{},"body":{"classes/URLOptionsManager.html":{}}}],["manager.ts:17",{"_index":60,"title":{},"body":{"classes/ARManager.html":{},"classes/VRManager.html":{}}}],["manager.ts:171",{"_index":2425,"title":{},"body":{"classes/StateManager.html":{}}}],["manager.ts:175",{"_index":2140,"title":{},"body":{"classes/RendererManager.html":{}}}],["manager.ts:179",{"_index":2416,"title":{},"body":{"classes/StateManager.html":{}}}],["manager.ts:18",{"_index":1320,"title":{},"body":{"classes/EffectsManager.html":{},"classes/StateManager.html":{}}}],["manager.ts:187",{"_index":2111,"title":{},"body":{"classes/RendererManager.html":{},"classes/StateManager.html":{}}}],["manager.ts:19",{"_index":74,"title":{},"body":{"classes/ARManager.html":{},"classes/LoadingManager.html":{},"classes/VRManager.html":{}}}],["manager.ts:195",{"_index":2423,"title":{},"body":{"classes/StateManager.html":{}}}],["manager.ts:20",{"_index":640,"title":{},"body":{"classes/ColorManager.html":{},"classes/EffectsManager.html":{},"classes/StateManager.html":{}}}],["manager.ts:200",{"_index":2130,"title":{},"body":{"classes/RendererManager.html":{}}}],["manager.ts:207",{"_index":2261,"title":{},"body":{"classes/SelectionManager.html":{}}}],["manager.ts:209",{"_index":2656,"title":{},"body":{"classes/URLOptionsManager.html":{}}}],["manager.ts:21",{"_index":2792,"title":{},"body":{"classes/VRManager.html":{}}}],["manager.ts:210",{"_index":2113,"title":{},"body":{"classes/RendererManager.html":{}}}],["manager.ts:218",{"_index":2284,"title":{},"body":{"classes/SelectionManager.html":{}}}],["manager.ts:22",{"_index":48,"title":{},"body":{"classes/ARManager.html":{},"classes/SelectionManager.html":{},"classes/StateManager.html":{}}}],["manager.ts:220",{"_index":2122,"title":{},"body":{"classes/RendererManager.html":{}}}],["manager.ts:227",{"_index":2646,"title":{},"body":{"classes/URLOptionsManager.html":{}}}],["manager.ts:228",{"_index":2128,"title":{},"body":{"classes/RendererManager.html":{}}}],["manager.ts:23",{"_index":1309,"title":{},"body":{"classes/EffectsManager.html":{},"classes/VRManager.html":{}}}],["manager.ts:24",{"_index":2252,"title":{},"body":{"classes/SelectionManager.html":{},"classes/StateManager.html":{},"classes/URLOptionsManager.html":{}}}],["manager.ts:241",{"_index":2276,"title":{},"body":{"classes/SelectionManager.html":{}}}],["manager.ts:252",{"_index":2671,"title":{},"body":{"classes/URLOptionsManager.html":{}}}],["manager.ts:26",{"_index":2267,"title":{},"body":{"classes/SelectionManager.html":{},"classes/StateManager.html":{},"classes/VRManager.html":{},"classes/XRManager.html":{}}}],["manager.ts:268",{"_index":2658,"title":{},"body":{"classes/URLOptionsManager.html":{}}}],["manager.ts:27",{"_index":1428,"title":{},"body":{"classes/ExportManager.html":{}}}],["manager.ts:28",{"_index":2268,"title":{},"body":{"classes/SelectionManager.html":{},"classes/VRManager.html":{},"classes/XRManager.html":{}}}],["manager.ts:29",{"_index":2409,"title":{},"body":{"classes/StateManager.html":{}}}],["manager.ts:30",{"_index":2251,"title":{},"body":{"classes/SelectionManager.html":{},"classes/XRManager.html":{}}}],["manager.ts:32",{"_index":2253,"title":{},"body":{"classes/SelectionManager.html":{},"classes/XRManager.html":{}}}],["manager.ts:34",{"_index":2119,"title":{},"body":{"classes/RendererManager.html":{},"classes/XRManager.html":{}}}],["manager.ts:36",{"_index":2264,"title":{},"body":{"classes/SelectionManager.html":{},"classes/XRManager.html":{}}}],["manager.ts:37",{"_index":1636,"title":{},"body":{"classes/LoadingManager.html":{}}}],["manager.ts:38",{"_index":626,"title":{},"body":{"classes/ColorManager.html":{},"classes/SelectionManager.html":{},"classes/XRManager.html":{}}}],["manager.ts:41",{"_index":2256,"title":{},"body":{"classes/SelectionManager.html":{}}}],["manager.ts:43",{"_index":2250,"title":{},"body":{"classes/SelectionManager.html":{},"classes/URLOptionsManager.html":{}}}],["manager.ts:46",{"_index":1646,"title":{},"body":{"classes/LoadingManager.html":{},"classes/RendererManager.html":{},"classes/StateManager.html":{}}}],["manager.ts:48",{"_index":1333,"title":{},"body":{"classes/EffectsManager.html":{}}}],["manager.ts:52",{"_index":1443,"title":{},"body":{"classes/ExportManager.html":{}}}],["manager.ts:53",{"_index":3132,"title":{},"body":{"classes/XRManager.html":{}}}],["manager.ts:54",{"_index":2427,"title":{},"body":{"classes/StateManager.html":{}}}],["manager.ts:55",{"_index":634,"title":{},"body":{"classes/ColorManager.html":{}}}],["manager.ts:59",{"_index":2652,"title":{},"body":{"classes/URLOptionsManager.html":{}}}],["manager.ts:6",{"_index":1630,"title":{},"body":{"classes/LoadingManager.html":{}}}],["manager.ts:61",{"_index":1331,"title":{},"body":{"classes/EffectsManager.html":{}}}],["manager.ts:64",{"_index":1649,"title":{},"body":{"classes/LoadingManager.html":{},"classes/RendererManager.html":{}}}],["manager.ts:65",{"_index":2282,"title":{},"body":{"classes/SelectionManager.html":{}}}],["manager.ts:66",{"_index":1438,"title":{},"body":{"classes/ExportManager.html":{}}}],["manager.ts:69",{"_index":1325,"title":{},"body":{"classes/EffectsManager.html":{}}}],["manager.ts:7",{"_index":623,"title":{},"body":{"classes/ColorManager.html":{}}}],["manager.ts:72",{"_index":648,"title":{},"body":{"classes/ColorManager.html":{}}}],["manager.ts:75",{"_index":118,"title":{},"body":{"classes/ARManager.html":{}}}],["manager.ts:77",{"_index":2803,"title":{},"body":{"classes/VRManager.html":{}}}],["manager.ts:78",{"_index":3131,"title":{},"body":{"classes/XRManager.html":{}}}],["manager.ts:8",{"_index":2104,"title":{},"body":{"classes/RendererManager.html":{}}}],["manager.ts:80",{"_index":2418,"title":{},"body":{"classes/StateManager.html":{}}}],["manager.ts:83",{"_index":2288,"title":{},"body":{"classes/SelectionManager.html":{}}}],["manager.ts:84",{"_index":1638,"title":{},"body":{"classes/LoadingManager.html":{}}}],["manager.ts:85",{"_index":1441,"title":{},"body":{"classes/ExportManager.html":{}}}],["manager.ts:88",{"_index":1335,"title":{},"body":{"classes/EffectsManager.html":{},"classes/XRManager.html":{}}}],["manager.ts:9",{"_index":1634,"title":{},"body":{"classes/LoadingManager.html":{}}}],["manager.ts:93",{"_index":1641,"title":{},"body":{"classes/LoadingManager.html":{}}}],["manager.ts:94",{"_index":2273,"title":{},"body":{"classes/SelectionManager.html":{}}}],["manager.ts:97",{"_index":1337,"title":{},"body":{"classes/EffectsManager.html":{},"classes/RendererManager.html":{}}}],["manager.ts:99",{"_index":3129,"title":{},"body":{"classes/XRManager.html":{}}}],["manager/animations",{"_index":222,"title":{},"body":{"interfaces/AnimationPreset.html":{},"interfaces/Configuration.html":{},"interfaces/Window.html":{},"coverage.html":{}}}],["manager/color",{"_index":616,"title":{},"body":{"classes/ColorManager.html":{},"classes/ColorOptions.html":{},"coverage.html":{},"miscellaneous/enumerations.html":{},"miscellaneous/typealiases.html":{}}}],["manager/controls",{"_index":3753,"title":{},"body":{"coverage.html":{}}}],["manager/dat",{"_index":1032,"title":{},"body":{"classes/DatGUIMenuUI.html":{},"coverage.html":{}}}],["manager/effects",{"_index":1293,"title":{},"body":{"classes/EffectsManager.html":{},"coverage.html":{}}}],["manager/export",{"_index":1421,"title":{},"body":{"classes/ExportManager.html":{},"coverage.html":{}}}],["manager/import",{"_index":3757,"title":{},"body":{"coverage.html":{}}}],["manager/index.ts",{"_index":3759,"title":{},"body":{"coverage.html":{},"miscellaneous/variables.html":{}}}],["manager/phoenix",{"_index":889,"title":{},"body":{"interfaces/Configuration.html":{},"classes/PhoenixMenuNode.html":{},"classes/PhoenixMenuUI.html":{},"interfaces/PhoenixUI.html":{},"classes/StateManager.html":{},"coverage.html":{},"miscellaneous/typealiases.html":{}}}],["manager/renderer",{"_index":2081,"title":{},"body":{"classes/RendererManager.html":{},"coverage.html":{}}}],["manager/scene",{"_index":1116,"title":{},"body":{"classes/DatGUIMenuUI.html":{},"classes/PhoenixMenuUI.html":{},"coverage.html":{}}}],["manager/selection",{"_index":2233,"title":{},"body":{"classes/SelectionManager.html":{},"coverage.html":{}}}],["manager/xr/ar",{"_index":7,"title":{},"body":{"classes/ARManager.html":{},"coverage.html":{}}}],["manager/xr/vr",{"_index":2780,"title":{},"body":{"classes/VRManager.html":{},"coverage.html":{}}}],["manager/xr/xr",{"_index":2878,"title":{},"body":{"interfaces/Window.html":{},"classes/XRManager.html":{},"coverage.html":{},"miscellaneous/enumerations.html":{}}}],["managers/loading",{"_index":2209,"title":{},"body":{"classes/ScriptLoader.html":{},"interfaces/Window.html":{}}}],["managers/state",{"_index":2876,"title":{},"body":{"interfaces/Window.html":{}}}],["managers/three",{"_index":890,"title":{},"body":{"interfaces/Configuration.html":{},"interfaces/EventDataLoader.html":{},"interfaces/Window.html":{}}}],["managers/ui",{"_index":888,"title":{},"body":{"interfaces/Configuration.html":{},"interfaces/EventDataLoader.html":{},"interfaces/Window.html":{}}}],["managers/url",{"_index":2877,"title":{},"body":{"interfaces/Window.html":{}}}],["manages",{"_index":1310,"title":{},"body":{"classes/EffectsManager.html":{},"interfaces/Window.html":{}}}],["managing",{"_index":253,"title":{},"body":{"interfaces/AnimationPreset.html":{},"classes/ColorManager.html":{},"classes/DatGUIMenuUI.html":{},"classes/EffectsManager.html":{},"classes/ExportManager.html":{},"classes/LoadingManager.html":{},"classes/PhoenixMenuUI.html":{},"classes/RendererManager.html":{},"classes/SelectionManager.html":{},"classes/StateManager.html":{},"classes/URLOptionsManager.html":{},"interfaces/Window.html":{},"changelog.html":{}}}],["manipulate",{"_index":1397,"title":{},"body":{"interfaces/EventDataLoader.html":{}}}],["manual",{"_index":1773,"title":{},"body":{"classes/PhoenixMenuNode.html":{}}}],["manually",{"_index":371,"title":{},"body":{"interfaces/AnimationPreset.html":{}}}],["many",{"_index":3425,"title":{},"body":{"changelog.html":{}}}],["map((key",{"_index":2347,"title":{},"body":{"classes/SelectionManager.html":{}}}],["mat4",{"_index":2567,"title":{},"body":{"classes/TracksMaterial.html":{},"classes/TracksMesh.html":{}}}],["match",{"_index":2920,"title":{},"body":{"interfaces/Window.html":{},"changelog.html":{}}}],["matching",{"_index":187,"title":{},"body":{"classes/ARManager.html":{},"classes/ActiveVariable.html":{},"interfaces/AnimationPreset.html":{},"classes/CMSObjects.html":{},"classes/ColorManager.html":{},"classes/ColorOptions.html":{},"interfaces/Configuration.html":{},"classes/CoordinateHelper.html":{},"classes/Cut.html":{},"classes/DatGUIMenuUI.html":{},"classes/EffectsManager.html":{},"interfaces/EventDataLoader.html":{},"classes/ExportManager.html":{},"classes/Field.html":{},"classes/InfoLogger.html":{},"classes/LoadingManager.html":{},"classes/PhoenixMenuNode.html":{},"classes/PhoenixMenuUI.html":{},"interfaces/PhoenixUI.html":{},"classes/PresetView.html":{},"classes/PrettySymbols.html":{},"classes/RKHelper.html":{},"classes/RendererManager.html":{},"classes/RungeKutta.html":{},"classes/ScriptLoader.html":{},"classes/SelectionManager.html":{},"classes/State.html":{},"classes/StateManager.html":{},"classes/TracksMaterial.html":{},"classes/TracksMesh.html":{},"classes/URLOptionsManager.html":{},"classes/VRManager.html":{},"interfaces/Window.html":{},"classes/XRManager.html":{},"changelog.html":{},"coverage.html":{},"dependencies.html":{},"miscellaneous/enumerations.html":{},"index.html":{},"modules.html":{},"overview.html":{},"properties.html":{},"miscellaneous/typealiases.html":{},"miscellaneous/variables.html":{}}}],["material",{"_index":1152,"title":{},"body":{"classes/DatGUIMenuUI.html":{},"classes/PhoenixMenuUI.html":{},"classes/TracksMaterial.html":{},"classes/TracksMesh.html":{},"interfaces/Window.html":{}}}],["material?.color",{"_index":1153,"title":{},"body":{"classes/DatGUIMenuUI.html":{},"classes/PhoenixMenuUI.html":{}}}],["math.abs(1",{"_index":844,"title":{},"body":{"classes/ColorOptions.html":{},"classes/PrettySymbols.html":{}}}],["math.abs(returnvec.x",{"_index":1549,"title":{},"body":{"classes/Field.html":{},"classes/RungeKutta.html":{},"classes/State.html":{}}}],["math.abs(returnvec.y",{"_index":1550,"title":{},"body":{"classes/Field.html":{},"classes/RungeKutta.html":{},"classes/State.html":{}}}],["math.abs(returnvec.z",{"_index":1551,"title":{},"body":{"classes/Field.html":{},"classes/RungeKutta.html":{},"classes/State.html":{}}}],["math.atan(math.pow(math.e",{"_index":950,"title":{},"body":{"classes/CoordinateHelper.html":{}}}],["math.log(math.tan(theta",{"_index":951,"title":{},"body":{"classes/CoordinateHelper.html":{}}}],["math.pi",{"_index":305,"title":{},"body":{"interfaces/AnimationPreset.html":{},"classes/CoordinateHelper.html":{}}}],["math.pow(fh",{"_index":1562,"title":{},"body":{"classes/Field.html":{},"classes/RungeKutta.html":{},"classes/State.html":{}}}],["math.sign(1",{"_index":824,"title":{},"body":{"classes/ColorOptions.html":{},"classes/PrettySymbols.html":{}}}],["math.sqrt(pos.x",{"_index":2058,"title":{},"body":{"classes/RKHelper.html":{}}}],["max",{"_index":740,"title":{},"body":{"classes/ColorOptions.html":{},"classes/DatGUIMenuUI.html":{},"classes/Field.html":{},"classes/InfoLogger.html":{},"classes/PhoenixMenuUI.html":{},"classes/RungeKutta.html":{},"classes/State.html":{},"changelog.html":{}}}],["maxcut",{"_index":1245,"title":{},"body":{"classes/DatGUIMenuUI.html":{}}}],["maxcut.onchange((value",{"_index":1247,"title":{},"body":{"classes/DatGUIMenuUI.html":{}}}],["maxcutactive",{"_index":984,"title":{},"body":{"classes/Cut.html":{}}}],["maxentries",{"_index":1595,"title":{},"body":{"classes/InfoLogger.html":{}}}],["maximum",{"_index":756,"title":{},"body":{"classes/ColorOptions.html":{},"classes/Cut.html":{}}}],["maxpositionx",{"_index":1043,"title":{},"body":{"classes/DatGUIMenuUI.html":{}}}],["maxpositiony",{"_index":1044,"title":{},"body":{"classes/DatGUIMenuUI.html":{}}}],["maxpositionz",{"_index":1045,"title":{},"body":{"classes/DatGUIMenuUI.html":{}}}],["maxstepsize",{"_index":2378,"title":{},"body":{"classes/State.html":{}}}],["maxvalue",{"_index":985,"title":{},"body":{"classes/Cut.html":{},"classes/DatGUIMenuUI.html":{}}}],["menu",{"_index":736,"title":{},"body":{"classes/ColorOptions.html":{},"interfaces/Configuration.html":{},"classes/DatGUIMenuUI.html":{},"classes/PhoenixMenuNode.html":{},"classes/PhoenixMenuUI.html":{},"interfaces/PhoenixUI.html":{},"classes/StateManager.html":{},"classes/URLOptionsManager.html":{},"interfaces/Window.html":{},"changelog.html":{},"coverage.html":{},"miscellaneous/typealiases.html":{}}}],["menu's",{"_index":1091,"title":{},"body":{"classes/DatGUIMenuUI.html":{},"classes/PhoenixMenuUI.html":{},"interfaces/PhoenixUI.html":{}}}],["menu.onchange((value",{"_index":1206,"title":{},"body":{"classes/DatGUIMenuUI.html":{}}}],["menu/config",{"_index":3843,"title":{},"body":{"miscellaneous/typealiases.html":{}}}],["menu/phoenix",{"_index":777,"title":{},"body":{"classes/ColorOptions.html":{},"interfaces/Configuration.html":{},"classes/PhoenixMenuNode.html":{},"classes/PhoenixMenuUI.html":{},"classes/StateManager.html":{},"coverage.html":{}}}],["menunodename",{"_index":2970,"title":{},"body":{"interfaces/Window.html":{}}}],["menus",{"_index":1396,"title":{},"body":{"interfaces/EventDataLoader.html":{},"changelog.html":{},"miscellaneous/typealiases.html":{}}}],["menusubfolder",{"_index":1851,"title":{},"body":{"classes/PhoenixMenuUI.html":{},"interfaces/PhoenixUI.html":{}}}],["mesh",{"_index":244,"title":{},"body":{"interfaces/AnimationPreset.html":{},"classes/CMSObjects.html":{},"classes/DatGUIMenuUI.html":{},"classes/PhoenixMenuUI.html":{},"classes/TracksMaterial.html":{},"classes/TracksMesh.html":{}}}],["mesh(particlegeometry",{"_index":489,"title":{},"body":{"interfaces/AnimationPreset.html":{}}}],["meshbasicmaterial",{"_index":243,"title":{},"body":{"interfaces/AnimationPreset.html":{},"classes/CMSObjects.html":{}}}],["meshphongmaterial",{"_index":651,"title":{},"body":{"classes/ColorManager.html":{},"classes/DatGUIMenuUI.html":{},"classes/PhoenixMenuUI.html":{}}}],["metadata",{"_index":1410,"title":{},"body":{"interfaces/EventDataLoader.html":{},"classes/StateManager.html":{},"interfaces/Window.html":{}}}],["method",{"_index":3492,"title":{},"body":{"changelog.html":{}}}],["methods",{"_index":33,"title":{},"body":{"classes/ARManager.html":{},"classes/ActiveVariable.html":{},"classes/CMSObjects.html":{},"classes/ColorManager.html":{},"classes/ColorOptions.html":{},"classes/CoordinateHelper.html":{},"classes/Cut.html":{},"classes/DatGUIMenuUI.html":{},"classes/EffectsManager.html":{},"interfaces/EventDataLoader.html":{},"classes/ExportManager.html":{},"classes/Field.html":{},"classes/InfoLogger.html":{},"classes/LoadingManager.html":{},"classes/PhoenixMenuNode.html":{},"classes/PhoenixMenuUI.html":{},"interfaces/PhoenixUI.html":{},"classes/PresetView.html":{},"classes/PrettySymbols.html":{},"classes/RKHelper.html":{},"classes/RendererManager.html":{},"classes/RungeKutta.html":{},"classes/ScriptLoader.html":{},"classes/SelectionManager.html":{},"classes/StateManager.html":{},"classes/TracksMesh.html":{},"classes/URLOptionsManager.html":{},"classes/VRManager.html":{},"interfaces/Window.html":{},"classes/XRManager.html":{}}}],["mev",{"_index":2070,"title":{},"body":{"classes/RKHelper.html":{}}}],["mid",{"_index":758,"title":{},"body":{"classes/ColorOptions.html":{}}}],["min",{"_index":739,"title":{},"body":{"classes/ColorOptions.html":{},"classes/PhoenixMenuUI.html":{}}}],["min/max",{"_index":743,"title":{},"body":{"classes/ColorOptions.html":{}}}],["mincut",{"_index":1237,"title":{},"body":{"classes/DatGUIMenuUI.html":{}}}],["mincut.onchange((value",{"_index":1243,"title":{},"body":{"classes/DatGUIMenuUI.html":{}}}],["mincutactive",{"_index":986,"title":{},"body":{"classes/Cut.html":{}}}],["minimum",{"_index":755,"title":{},"body":{"classes/ColorOptions.html":{},"classes/Cut.html":{}}}],["minor",{"_index":3626,"title":{},"body":{"changelog.html":{}}}],["minormax",{"_index":759,"title":{},"body":{"classes/ColorOptions.html":{}}}],["minvalue",{"_index":987,"title":{},"body":{"classes/Cut.html":{},"classes/DatGUIMenuUI.html":{}}}],["misc",{"_index":3437,"title":{},"body":{"changelog.html":{}}}],["miscellaneous",{"_index":3782,"title":{"miscellaneous/enumerations.html":{},"miscellaneous/typealiases.html":{},"miscellaneous/variables.html":{}},"body":{"miscellaneous/enumerations.html":{},"miscellaneous/typealiases.html":{},"miscellaneous/variables.html":{}}}],["missing",{"_index":3365,"title":{},"body":{"changelog.html":{}}}],["missingenergy",{"_index":3887,"title":{},"body":{"miscellaneous/variables.html":{}}}],["mm",{"_index":2069,"title":{},"body":{"classes/RKHelper.html":{}}}],["mock",{"_index":3898,"title":{},"body":{"miscellaneous/variables.html":{}}}],["mocking",{"_index":3915,"title":{},"body":{"miscellaneous/variables.html":{}}}],["mode",{"_index":128,"title":{},"body":{"classes/ARManager.html":{},"classes/SelectionManager.html":{},"classes/VRManager.html":{},"classes/XRManager.html":{},"changelog.html":{},"miscellaneous/typealiases.html":{}}}],["model",{"_index":2681,"title":{},"body":{"classes/URLOptionsManager.html":{},"miscellaneous/variables.html":{}}}],["models/preset",{"_index":885,"title":{},"body":{"interfaces/Configuration.html":{}}}],["modelviewmatrix",{"_index":2570,"title":{},"body":{"classes/TracksMaterial.html":{},"classes/TracksMesh.html":{}}}],["modular",{"_index":3787,"title":{},"body":{"index.html":{}}}],["module",{"_index":3796,"title":{},"body":{"index.html":{}}}],["modules",{"_index":3814,"title":{"modules.html":{}},"body":{"modules.html":{}}}],["mom",{"_index":780,"title":{},"body":{"classes/ColorOptions.html":{},"classes/PrettySymbols.html":{},"changelog.html":{},"miscellaneous/enumerations.html":{}}}],["momcolors",{"_index":689,"title":{},"body":{"classes/ColorOptions.html":{}}}],["momentum",{"_index":720,"title":{},"body":{"classes/ColorOptions.html":{},"classes/Field.html":{},"classes/PrettySymbols.html":{},"classes/RungeKutta.html":{},"classes/State.html":{},"changelog.html":{}}}],["momvalue",{"_index":828,"title":{},"body":{"classes/ColorOptions.html":{}}}],["momvalue.color",{"_index":837,"title":{},"body":{"classes/ColorOptions.html":{}}}],["more",{"_index":3538,"title":{},"body":{"changelog.html":{}}}],["mouse",{"_index":2259,"title":{},"body":{"classes/SelectionManager.html":{}}}],["mouse.x",{"_index":2364,"title":{},"body":{"classes/SelectionManager.html":{}}}],["mouse.y",{"_index":2367,"title":{},"body":{"classes/SelectionManager.html":{}}}],["move",{"_index":288,"title":{},"body":{"interfaces/AnimationPreset.html":{},"classes/CoordinateHelper.html":{},"classes/SelectionManager.html":{},"classes/VRManager.html":{},"interfaces/Window.html":{},"changelog.html":{}}}],["moveindirection",{"_index":2788,"title":{},"body":{"classes/VRManager.html":{}}}],["moveindirection(direction",{"_index":2798,"title":{},"body":{"classes/VRManager.html":{}}}],["movement",{"_index":2791,"title":{},"body":{"classes/VRManager.html":{}}}],["moving",{"_index":378,"title":{},"body":{"interfaces/AnimationPreset.html":{},"classes/VRManager.html":{}}}],["mss",{"_index":1578,"title":{},"body":{"classes/Field.html":{},"classes/RungeKutta.html":{},"classes/State.html":{}}}],["multidimensional",{"_index":522,"title":{},"body":{"interfaces/AnimationPreset.html":{}}}],["multiple",{"_index":1414,"title":{},"body":{"interfaces/EventDataLoader.html":{},"changelog.html":{}}}],["multiplyscalar(fh",{"_index":1571,"title":{},"body":{"classes/Field.html":{},"classes/RungeKutta.html":{},"classes/State.html":{}}}],["multiplyscalar(fh2",{"_index":1566,"title":{},"body":{"classes/Field.html":{},"classes/RungeKutta.html":{},"classes/State.html":{}}}],["multiplyscalar(qop",{"_index":1536,"title":{},"body":{"classes/Field.html":{},"classes/RungeKutta.html":{},"classes/State.html":{}}}],["multiplyscalar(updatedscale.x",{"_index":382,"title":{},"body":{"interfaces/AnimationPreset.html":{}}}],["muon",{"_index":555,"title":{},"body":{"classes/CMSObjects.html":{}}}],["muonchamber",{"_index":602,"title":{},"body":{"classes/CMSObjects.html":{}}}],["muonchamber.add(boxobject",{"_index":611,"title":{},"body":{"classes/CMSObjects.html":{}}}],["muonchamber.add(lineboxobject",{"_index":612,"title":{},"body":{"classes/CMSObjects.html":{}}}],["muonchamberparams",{"_index":557,"title":{},"body":{"classes/CMSObjects.html":{}}}],["muonchamberparams.color",{"_index":595,"title":{},"body":{"classes/CMSObjects.html":{}}}],["muonchamberparams.uuid",{"_index":613,"title":{},"body":{"classes/CMSObjects.html":{}}}],["muonchamberparams[face",{"_index":570,"title":{},"body":{"classes/CMSObjects.html":{}}}],["muonchambers",{"_index":3886,"title":{},"body":{"miscellaneous/variables.html":{}}}],["name",{"_index":52,"title":{},"body":{"classes/ARManager.html":{},"classes/ActiveVariable.html":{},"interfaces/AnimationPreset.html":{},"classes/CMSObjects.html":{},"classes/ColorManager.html":{},"classes/ColorOptions.html":{},"classes/CoordinateHelper.html":{},"classes/Cut.html":{},"classes/DatGUIMenuUI.html":{},"classes/EffectsManager.html":{},"interfaces/EventDataLoader.html":{},"classes/ExportManager.html":{},"classes/Field.html":{},"classes/InfoLogger.html":{},"classes/LoadingManager.html":{},"classes/PhoenixMenuNode.html":{},"classes/PhoenixMenuUI.html":{},"interfaces/PhoenixUI.html":{},"classes/PresetView.html":{},"classes/PrettySymbols.html":{},"classes/RKHelper.html":{},"classes/RendererManager.html":{},"classes/RungeKutta.html":{},"classes/ScriptLoader.html":{},"classes/SelectionManager.html":{},"classes/StateManager.html":{},"classes/TracksMaterial.html":{},"classes/TracksMesh.html":{},"classes/URLOptionsManager.html":{},"classes/VRManager.html":{},"interfaces/Window.html":{},"classes/XRManager.html":{},"changelog.html":{},"miscellaneous/variables.html":{}}}],["name('color",{"_index":1164,"title":{},"body":{"classes/DatGUIMenuUI.html":{}}}],["name('depth",{"_index":1209,"title":{},"body":{"classes/DatGUIMenuUI.html":{}}}],["name('load",{"_index":1266,"title":{},"body":{"classes/DatGUIMenuUI.html":{}}}],["name('max",{"_index":1246,"title":{},"body":{"classes/DatGUIMenuUI.html":{}}}],["name('min",{"_index":1241,"title":{},"body":{"classes/DatGUIMenuUI.html":{}}}],["name('opacity",{"_index":1169,"title":{},"body":{"classes/DatGUIMenuUI.html":{}}}],["name('random",{"_index":1233,"title":{},"body":{"classes/DatGUIMenuUI.html":{}}}],["name('reset",{"_index":1236,"title":{},"body":{"classes/DatGUIMenuUI.html":{}}}],["name('save",{"_index":1265,"title":{},"body":{"classes/DatGUIMenuUI.html":{}}}],["name('scale",{"_index":1177,"title":{},"body":{"classes/DatGUIMenuUI.html":{}}}],["name('show",{"_index":1141,"title":{},"body":{"classes/DatGUIMenuUI.html":{}}}],["name('size",{"_index":1261,"title":{},"body":{"classes/DatGUIMenuUI.html":{}}}],["name('wireframe",{"_index":1149,"title":{},"body":{"classes/DatGUIMenuUI.html":{}}}],["name('x",{"_index":1183,"title":{},"body":{"classes/DatGUIMenuUI.html":{}}}],["name('y",{"_index":1187,"title":{},"body":{"classes/DatGUIMenuUI.html":{}}}],["name('z",{"_index":1190,"title":{},"body":{"classes/DatGUIMenuUI.html":{}}}],["name('çolor",{"_index":1279,"title":{},"body":{"classes/DatGUIMenuUI.html":{}}}],["name.lastindexof",{"_index":1880,"title":{},"body":{"classes/PhoenixMenuUI.html":{}}}],["name.split('>').foreach((nodename",{"_index":1828,"title":{},"body":{"classes/PhoenixMenuNode.html":{}}}],["name.substring(namestart",{"_index":1882,"title":{},"body":{"classes/PhoenixMenuUI.html":{}}}],["named",{"_index":1632,"title":{},"body":{"classes/LoadingManager.html":{}}}],["names",{"_index":1878,"title":{},"body":{"classes/PhoenixMenuUI.html":{},"changelog.html":{}}}],["namespace",{"_index":3544,"title":{},"body":{"changelog.html":{}}}],["namestart",{"_index":1879,"title":{},"body":{"classes/PhoenixMenuUI.html":{}}}],["native",{"_index":933,"title":{},"body":{"classes/CoordinateHelper.html":{}}}],["navigator",{"_index":3137,"title":{},"body":{"classes/XRManager.html":{}}}],["ndof",{"_index":1992,"title":{},"body":{"classes/PrettySymbols.html":{}}}],["near",{"_index":78,"title":{},"body":{"classes/ARManager.html":{}}}],["necessary",{"_index":930,"title":{},"body":{"classes/CoordinateHelper.html":{}}}],["need",{"_index":372,"title":{},"body":{"interfaces/AnimationPreset.html":{},"classes/CoordinateHelper.html":{},"classes/URLOptionsManager.html":{}}}],["needed",{"_index":2020,"title":{},"body":{"classes/PrettySymbols.html":{}}}],["needing",{"_index":3380,"title":{},"body":{"changelog.html":{}}}],["new",{"_index":213,"title":{},"body":{"classes/ActiveVariable.html":{},"interfaces/AnimationPreset.html":{},"classes/CMSObjects.html":{},"classes/CoordinateHelper.html":{},"classes/DatGUIMenuUI.html":{},"classes/EffectsManager.html":{},"classes/ExportManager.html":{},"classes/Field.html":{},"classes/PhoenixMenuNode.html":{},"classes/PhoenixMenuUI.html":{},"classes/PrettySymbols.html":{},"classes/RendererManager.html":{},"classes/RungeKutta.html":{},"classes/ScriptLoader.html":{},"classes/SelectionManager.html":{},"classes/State.html":{},"classes/StateManager.html":{},"classes/TracksMaterial.html":{},"classes/TracksMesh.html":{},"classes/URLOptionsManager.html":{},"classes/VRManager.html":{},"interfaces/Window.html":{},"classes/XRManager.html":{},"changelog.html":{},"coverage.html":{},"index.html":{},"miscellaneous/variables.html":{}}}],["newcolorbyoption",{"_index":809,"title":{},"body":{"classes/ColorOptions.html":{}}}],["newcolorbyoption?.apply",{"_index":812,"title":{},"body":{"classes/ColorOptions.html":{}}}],["newcolorbyoption?.key",{"_index":811,"title":{},"body":{"classes/ColorOptions.html":{}}}],["newvalue",{"_index":1172,"title":{},"body":{"classes/DatGUIMenuUI.html":{}}}],["next",{"_index":2477,"title":{},"body":{"classes/TracksMaterial.html":{},"classes/TracksMesh.html":{}}}],["next_track_id",{"_index":2478,"title":{},"body":{"classes/TracksMaterial.html":{},"classes/TracksMesh.html":{}}}],["nextp",{"_index":2584,"title":{},"body":{"classes/TracksMaterial.html":{},"classes/TracksMesh.html":{}}}],["nextpos",{"_index":2576,"title":{},"body":{"classes/TracksMaterial.html":{},"classes/TracksMesh.html":{}}}],["nextpos.w",{"_index":2586,"title":{},"body":{"classes/TracksMaterial.html":{},"classes/TracksMesh.html":{}}}],["nextpos.xy",{"_index":2585,"title":{},"body":{"classes/TracksMaterial.html":{},"classes/TracksMesh.html":{}}}],["ng",{"_index":3215,"title":{},"body":{"changelog.html":{}}}],["node",{"_index":737,"title":{},"body":{"classes/ColorOptions.html":{},"interfaces/Configuration.html":{},"classes/PhoenixMenuNode.html":{},"classes/PhoenixMenuUI.html":{},"classes/StateManager.html":{},"interfaces/Window.html":{},"changelog.html":{},"miscellaneous/typealiases.html":{}}}],["node.ts",{"_index":1679,"title":{},"body":{"classes/PhoenixMenuNode.html":{},"coverage.html":{}}}],["node.ts:10",{"_index":1707,"title":{},"body":{"classes/PhoenixMenuNode.html":{}}}],["node.ts:105",{"_index":1741,"title":{},"body":{"classes/PhoenixMenuNode.html":{}}}],["node.ts:115",{"_index":1718,"title":{},"body":{"classes/PhoenixMenuNode.html":{}}}],["node.ts:12",{"_index":1711,"title":{},"body":{"classes/PhoenixMenuNode.html":{}}}],["node.ts:129",{"_index":1738,"title":{},"body":{"classes/PhoenixMenuNode.html":{}}}],["node.ts:14",{"_index":1713,"title":{},"body":{"classes/PhoenixMenuNode.html":{}}}],["node.ts:149",{"_index":1721,"title":{},"body":{"classes/PhoenixMenuNode.html":{}}}],["node.ts:16",{"_index":1701,"title":{},"body":{"classes/PhoenixMenuNode.html":{}}}],["node.ts:175",{"_index":1730,"title":{},"body":{"classes/PhoenixMenuNode.html":{}}}],["node.ts:18",{"_index":1706,"title":{},"body":{"classes/PhoenixMenuNode.html":{}}}],["node.ts:196",{"_index":1732,"title":{},"body":{"classes/PhoenixMenuNode.html":{}}}],["node.ts:20",{"_index":1709,"title":{},"body":{"classes/PhoenixMenuNode.html":{}}}],["node.ts:22",{"_index":1712,"title":{},"body":{"classes/PhoenixMenuNode.html":{}}}],["node.ts:242",{"_index":1724,"title":{},"body":{"classes/PhoenixMenuNode.html":{}}}],["node.ts:260",{"_index":1729,"title":{},"body":{"classes/PhoenixMenuNode.html":{}}}],["node.ts:27",{"_index":1703,"title":{},"body":{"classes/PhoenixMenuNode.html":{}}}],["node.ts:30",{"_index":1702,"title":{},"body":{"classes/PhoenixMenuNode.html":{}}}],["node.ts:32",{"_index":1699,"title":{},"body":{"classes/PhoenixMenuNode.html":{}}}],["node.ts:66",{"_index":1715,"title":{},"body":{"classes/PhoenixMenuNode.html":{}}}],["node.ts:8",{"_index":1708,"title":{},"body":{"classes/PhoenixMenuNode.html":{}}}],["node.ts:83",{"_index":1736,"title":{},"body":{"classes/PhoenixMenuNode.html":{}}}],["node.ts:92",{"_index":1734,"title":{},"body":{"classes/PhoenixMenuNode.html":{}}}],["nodechild",{"_index":1818,"title":{},"body":{"classes/PhoenixMenuNode.html":{}}}],["nodechild.loadstatefromjson(childstate",{"_index":1824,"title":{},"body":{"classes/PhoenixMenuNode.html":{}}}],["nodechild.name",{"_index":1820,"title":{},"body":{"classes/PhoenixMenuNode.html":{}}}],["nodechild.nodelevel",{"_index":1822,"title":{},"body":{"classes/PhoenixMenuNode.html":{}}}],["nodeconfig",{"_index":1806,"title":{},"body":{"classes/PhoenixMenuNode.html":{}}}],["nodeconfig.label",{"_index":1810,"title":{},"body":{"classes/PhoenixMenuNode.html":{}}}],["nodeconfig.type",{"_index":1808,"title":{},"body":{"classes/PhoenixMenuNode.html":{}}}],["nodeconfig[prop",{"_index":1813,"title":{},"body":{"classes/PhoenixMenuNode.html":{}}}],["nodefound",{"_index":1825,"title":{},"body":{"classes/PhoenixMenuNode.html":{}}}],["nodejs.timeout",{"_index":2851,"title":{},"body":{"classes/VRManager.html":{}}}],["nodelevel",{"_index":1685,"title":{},"body":{"classes/PhoenixMenuNode.html":{}}}],["nodename",{"_index":1829,"title":{},"body":{"classes/PhoenixMenuNode.html":{}}}],["nodename.trim",{"_index":1830,"title":{},"body":{"classes/PhoenixMenuNode.html":{}}}],["nodes",{"_index":1704,"title":{},"body":{"classes/PhoenixMenuNode.html":{},"changelog.html":{}}}],["none",{"_index":868,"title":{},"body":{"interfaces/Configuration.html":{},"classes/URLOptionsManager.html":{},"miscellaneous/variables.html":{}}}],["normal",{"_index":1322,"title":{},"body":{"classes/EffectsManager.html":{},"classes/TracksMaterial.html":{},"classes/TracksMesh.html":{}}}],["normal.x",{"_index":2593,"title":{},"body":{"classes/TracksMaterial.html":{},"classes/TracksMesh.html":{}}}],["normal.xy",{"_index":2591,"title":{},"body":{"classes/TracksMaterial.html":{},"classes/TracksMesh.html":{}}}],["normalblending",{"_index":1340,"title":{},"body":{"classes/EffectsManager.html":{}}}],["normalize(curp",{"_index":2588,"title":{},"body":{"classes/TracksMaterial.html":{},"classes/TracksMesh.html":{}}}],["normalize(nextp",{"_index":2587,"title":{},"body":{"classes/TracksMaterial.html":{},"classes/TracksMesh.html":{}}}],["notable",{"_index":3167,"title":{},"body":{"changelog.html":{}}}],["note",{"_index":139,"title":{},"body":{"classes/ARManager.html":{},"classes/VRManager.html":{},"classes/XRManager.html":{},"changelog.html":{}}}],["notforced",{"_index":1976,"title":{},"body":{"classes/PresetView.html":{},"miscellaneous/enumerations.html":{}}}],["nothing",{"_index":959,"title":{},"body":{"classes/CoordinateHelper.html":{}}}],["now",{"_index":971,"title":{},"body":{"classes/CoordinateHelper.html":{}}}],["nowdisplayingevent",{"_index":2885,"title":{},"body":{"interfaces/Window.html":{}}}],["npm",{"_index":3794,"title":{},"body":{"index.html":{}}}],["null",{"_index":90,"title":{},"body":{"classes/ARManager.html":{},"interfaces/AnimationPreset.html":{},"classes/DatGUIMenuUI.html":{},"classes/ExportManager.html":{},"classes/PhoenixMenuUI.html":{},"classes/RendererManager.html":{},"classes/StateManager.html":{},"classes/VRManager.html":{},"classes/XRManager.html":{},"miscellaneous/variables.html":{}}}],["number",{"_index":117,"title":{},"body":{"classes/ARManager.html":{},"interfaces/AnimationPreset.html":{},"classes/CMSObjects.html":{},"classes/ColorManager.html":{},"classes/ColorOptions.html":{},"interfaces/Configuration.html":{},"classes/CoordinateHelper.html":{},"classes/Cut.html":{},"classes/DatGUIMenuUI.html":{},"interfaces/EventDataLoader.html":{},"classes/Field.html":{},"classes/InfoLogger.html":{},"classes/LoadingManager.html":{},"classes/PhoenixMenuNode.html":{},"classes/PresetView.html":{},"classes/RendererManager.html":{},"classes/RungeKutta.html":{},"classes/SelectionManager.html":{},"classes/State.html":{},"classes/StateManager.html":{},"classes/TracksMaterial.html":{},"classes/TracksMesh.html":{},"classes/VRManager.html":{},"interfaces/Window.html":{},"changelog.html":{},"miscellaneous/variables.html":{}}}],["number'].includes",{"_index":2350,"title":{},"body":{"classes/SelectionManager.html":{}}}],["numofsteps",{"_index":301,"title":{},"body":{"interfaces/AnimationPreset.html":{}}}],["obj",{"_index":1193,"title":{},"body":{"classes/DatGUIMenuUI.html":{},"classes/ExportManager.html":{},"classes/RendererManager.html":{},"interfaces/Window.html":{},"changelog.html":{},"index.html":{}}}],["obj.eventobject",{"_index":410,"title":{},"body":{"interfaces/AnimationPreset.html":{}}}],["obj.eventobject.name",{"_index":409,"title":{},"body":{"interfaces/AnimationPreset.html":{}}}],["obj.eventobject.visible",{"_index":423,"title":{},"body":{"interfaces/AnimationPreset.html":{}}}],["obj.obj",{"_index":1457,"title":{},"body":{"classes/ExportManager.html":{}}}],["object",{"_index":69,"title":{},"body":{"classes/ARManager.html":{},"interfaces/AnimationPreset.html":{},"classes/CMSObjects.html":{},"classes/ColorManager.html":{},"classes/ColorOptions.html":{},"classes/DatGUIMenuUI.html":{},"interfaces/EventDataLoader.html":{},"classes/PhoenixMenuNode.html":{},"classes/PhoenixMenuUI.html":{},"interfaces/PhoenixUI.html":{},"classes/PrettySymbols.html":{},"classes/RendererManager.html":{},"classes/SelectionManager.html":{},"interfaces/Window.html":{},"changelog.html":{},"miscellaneous/variables.html":{}}}],["object's",{"_index":822,"title":{},"body":{"classes/ColorOptions.html":{},"classes/DatGUIMenuUI.html":{},"interfaces/EventDataLoader.html":{},"interfaces/Window.html":{}}}],["object(s",{"_index":643,"title":{},"body":{"classes/ColorManager.html":{}}}],["object.assign",{"_index":600,"title":{},"body":{"classes/CMSObjects.html":{},"classes/PrettySymbols.html":{},"classes/RKHelper.html":{},"classes/TracksMaterial.html":{},"classes/TracksMesh.html":{}}}],["object.assign(alleventsobject",{"_index":2750,"title":{},"body":{"classes/URLOptionsManager.html":{}}}],["object.defineproperties(this",{"_index":2611,"title":{},"body":{"classes/TracksMaterial.html":{},"classes/TracksMesh.html":{}}}],["object.entries(this.momcolors).foreach(([key",{"_index":827,"title":{},"body":{"classes/ColorOptions.html":{}}}],["object.entries(urloptionwithids).foreach(([urloption",{"_index":2774,"title":{},"body":{"classes/URLOptionsManager.html":{}}}],["object.keys(fileswithdata",{"_index":2746,"title":{},"body":{"classes/URLOptionsManager.html":{}}}],["object.keys(intersectedobject.userdata",{"_index":2346,"title":{},"body":{"classes/SelectionManager.html":{}}}],["object.keys(paramscopy",{"_index":2014,"title":{},"body":{"classes/PrettySymbols.html":{}}}],["object.keys(prettyparams",{"_index":2340,"title":{},"body":{"classes/SelectionManager.html":{}}}],["object.keys(prettysymbols.symbols).find((symbol",{"_index":2006,"title":{},"body":{"classes/PrettySymbols.html":{}}}],["object.keys(sceneconfiguration.eventdata",{"_index":3058,"title":{},"body":{"interfaces/Window.html":{}}}],["object.keys(this.progressitems).length",{"_index":1669,"title":{},"body":{"classes/LoadingManager.html":{}}}],["object.keys(trackscollections",{"_index":2064,"title":{},"body":{"classes/RKHelper.html":{}}}],["object.material.color.set(color",{"_index":656,"title":{},"body":{"classes/ColorManager.html":{}}}],["object.material?.color",{"_index":654,"title":{},"body":{"classes/ColorManager.html":{}}}],["object.name",{"_index":673,"title":{},"body":{"classes/ColorManager.html":{},"classes/ExportManager.html":{}}}],["object.userdata",{"_index":672,"title":{},"body":{"classes/ColorManager.html":{}}}],["object.values(collection.children",{"_index":662,"title":{},"body":{"classes/ColorManager.html":{}}}],["object.values(this.progressitems).reduce",{"_index":1665,"title":{},"body":{"classes/LoadingManager.html":{}}}],["object3d",{"_index":247,"title":{},"body":{"interfaces/AnimationPreset.html":{},"classes/CMSObjects.html":{},"classes/DatGUIMenuUI.html":{},"classes/ExportManager.html":{},"classes/PhoenixMenuUI.html":{},"interfaces/PhoenixUI.html":{},"classes/SelectionManager.html":{}}}],["object['material",{"_index":675,"title":{},"body":{"classes/ColorManager.html":{}}}],["object['material']?.color",{"_index":664,"title":{},"body":{"classes/ColorManager.html":{}}}],["objectname",{"_index":3032,"title":{},"body":{"interfaces/Window.html":{}}}],["objectparams",{"_index":762,"title":{},"body":{"classes/ColorOptions.html":{}}}],["objectparams?.charge",{"_index":826,"title":{},"body":{"classes/ColorOptions.html":{}}}],["objectparams?.dparams?.[4",{"_index":843,"title":{},"body":{"classes/ColorOptions.html":{}}}],["objectparams?.mom",{"_index":846,"title":{},"body":{"classes/ColorOptions.html":{}}}],["objects",{"_index":257,"title":{},"body":{"interfaces/AnimationPreset.html":{},"classes/CMSObjects.html":{},"classes/ColorManager.html":{},"classes/ColorOptions.html":{},"interfaces/EventDataLoader.html":{},"classes/SelectionManager.html":{},"interfaces/Window.html":{},"changelog.html":{}}}],["objects.traverse((object",{"_index":653,"title":{},"body":{"classes/ColorManager.html":{}}}],["objects.ts",{"_index":545,"title":{},"body":{"classes/CMSObjects.html":{},"coverage.html":{}}}],["objects.ts:25",{"_index":553,"title":{},"body":{"classes/CMSObjects.html":{}}}],["objectsgroup",{"_index":637,"title":{},"body":{"classes/ColorManager.html":{},"classes/SelectionManager.html":{}}}],["objectsgroup.getobjectbyproperty('uuid",{"_index":2377,"title":{},"body":{"classes/SelectionManager.html":{}}}],["objectstoanimatewithsphere",{"_index":329,"title":{},"body":{"interfaces/AnimationPreset.html":{}}}],["objectstoanimatewithsphere.foreach((obj",{"_index":408,"title":{},"body":{"interfaces/AnimationPreset.html":{}}}],["objectstoanimatewithsphere.push",{"_index":402,"title":{},"body":{"interfaces/AnimationPreset.html":{}}}],["objecttype",{"_index":1476,"title":{},"body":{"classes/ExportManager.html":{},"interfaces/Window.html":{}}}],["objecttype.children",{"_index":1480,"title":{},"body":{"classes/ExportManager.html":{}}}],["objecttype.name",{"_index":1478,"title":{},"body":{"classes/ExportManager.html":{}}}],["objectuserdata",{"_index":639,"title":{},"body":{"classes/ColorManager.html":{},"classes/ColorOptions.html":{}}}],["objexporter",{"_index":1446,"title":{},"body":{"classes/ExportManager.html":{}}}],["objfolder",{"_index":1159,"title":{},"body":{"classes/DatGUIMenuUI.html":{},"classes/PhoenixMenuUI.html":{}}}],["objfolder.add(this.guiparameters[name",{"_index":1194,"title":{},"body":{"classes/DatGUIMenuUI.html":{}}}],["objfolder.remove",{"_index":1888,"title":{},"body":{"classes/PhoenixMenuUI.html":{}}}],["objfolder.togglestate",{"_index":1883,"title":{},"body":{"classes/PhoenixMenuUI.html":{}}}],["objs",{"_index":3379,"title":{},"body":{"changelog.html":{}}}],["observable",{"_index":202,"title":{},"body":{"classes/ActiveVariable.html":{},"classes/SelectionManager.html":{},"changelog.html":{}}}],["observed",{"_index":195,"title":{},"body":{"classes/ActiveVariable.html":{}}}],["olddrawrangecount",{"_index":360,"title":{},"body":{"interfaces/AnimationPreset.html":{}}}],["older",{"_index":3488,"title":{},"body":{"changelog.html":{}}}],["omit",{"_index":1717,"title":{},"body":{"classes/PhoenixMenuNode.html":{}}}],["onanimationend",{"_index":286,"title":{},"body":{"interfaces/AnimationPreset.html":{},"interfaces/Window.html":{}}}],["onanimationsphereupdate",{"_index":406,"title":{},"body":{"interfaces/AnimationPreset.html":{}}}],["onanimationsphereupdate(new",{"_index":439,"title":{},"body":{"interfaces/AnimationPreset.html":{}}}],["onanimationstart",{"_index":319,"title":{},"body":{"interfaces/AnimationPreset.html":{}}}],["once",{"_index":399,"title":{},"body":{"interfaces/AnimationPreset.html":{}}}],["onchange",{"_index":789,"title":{},"body":{"classes/ColorOptions.html":{},"classes/PhoenixMenuUI.html":{}}}],["onchange((value",{"_index":1184,"title":{},"body":{"classes/DatGUIMenuUI.html":{}}}],["onclick",{"_index":792,"title":{},"body":{"classes/ColorOptions.html":{},"classes/PhoenixMenuUI.html":{},"classes/StateManager.html":{}}}],["oncolorchange",{"_index":1250,"title":{},"body":{"classes/DatGUIMenuUI.html":{},"classes/PhoenixMenuUI.html":{}}}],["oncontrollerselectend",{"_index":2786,"title":{},"body":{"classes/VRManager.html":{}}}],["oncontrollerselectstart",{"_index":2787,"title":{},"body":{"classes/VRManager.html":{}}}],["ondisplayedeventchange",{"_index":2884,"title":{},"body":{"interfaces/Window.html":{}}}],["ondocumentmousedown",{"_index":2238,"title":{},"body":{"classes/SelectionManager.html":{}}}],["one",{"_index":1201,"title":{},"body":{"classes/DatGUIMenuUI.html":{},"interfaces/EventDataLoader.html":{},"classes/PhoenixMenuNode.html":{},"classes/ScriptLoader.html":{},"classes/SelectionManager.html":{},"classes/URLOptionsManager.html":{},"interfaces/Window.html":{},"changelog.html":{}}}],["onend",{"_index":316,"title":{},"body":{"interfaces/AnimationPreset.html":{},"interfaces/Window.html":{}}}],["oneventschange",{"_index":2883,"title":{},"body":{"interfaces/Window.html":{}}}],["onfileread",{"_index":3895,"title":{},"body":{"miscellaneous/variables.html":{}}}],["onfileread?.(e.target.result.tostring",{"_index":3910,"title":{},"body":{"miscellaneous/variables.html":{}}}],["onloadcallbacks",{"_index":1619,"title":{},"body":{"classes/LoadingManager.html":{}}}],["onloadlabels",{"_index":1252,"title":{},"body":{"classes/DatGUIMenuUI.html":{},"classes/PhoenixMenuUI.html":{}}}],["onlyselectedcolorbyoption",{"_index":699,"title":{},"body":{"classes/ColorOptions.html":{}}}],["onprogress",{"_index":1628,"title":{},"body":{"classes/LoadingManager.html":{}}}],["onprogress(id",{"_index":1648,"title":{},"body":{"classes/LoadingManager.html":{}}}],["onprogresscallbacks",{"_index":1620,"title":{},"body":{"classes/LoadingManager.html":{}}}],["onremovelabel",{"_index":1096,"title":{},"body":{"classes/DatGUIMenuUI.html":{},"classes/PhoenixMenuUI.html":{},"interfaces/PhoenixUI.html":{}}}],["onsavelabels",{"_index":1251,"title":{},"body":{"classes/DatGUIMenuUI.html":{},"classes/PhoenixMenuUI.html":{}}}],["onsessionended",{"_index":28,"title":{},"body":{"classes/ARManager.html":{},"classes/VRManager.html":{},"interfaces/Window.html":{},"classes/XRManager.html":{}}}],["onsessionstarted",{"_index":131,"title":{},"body":{"classes/ARManager.html":{},"classes/VRManager.html":{},"classes/XRManager.html":{}}}],["onsizechange",{"_index":1249,"title":{},"body":{"classes/DatGUIMenuUI.html":{},"classes/PhoenixMenuUI.html":{}}}],["ontoggle",{"_index":1248,"title":{},"body":{"classes/DatGUIMenuUI.html":{},"classes/PhoenixMenuNode.html":{},"classes/PhoenixMenuUI.html":{}}}],["ontouchdown",{"_index":2239,"title":{},"body":{"classes/SelectionManager.html":{}}}],["ontouchmove",{"_index":2240,"title":{},"body":{"classes/SelectionManager.html":{}}}],["onupdate",{"_index":197,"title":{},"body":{"classes/ActiveVariable.html":{}}}],["onupdate(callback",{"_index":207,"title":{},"body":{"classes/ActiveVariable.html":{}}}],["onxrsessionended",{"_index":34,"title":{},"body":{"classes/ARManager.html":{},"classes/VRManager.html":{},"classes/XRManager.html":{}}}],["onxrsessionstarted",{"_index":36,"title":{},"body":{"classes/ARManager.html":{},"classes/VRManager.html":{},"classes/XRManager.html":{}}}],["onxrsessionstarted(session",{"_index":113,"title":{},"body":{"classes/ARManager.html":{},"classes/VRManager.html":{},"classes/XRManager.html":{}}}],["opacity",{"_index":487,"title":{},"body":{"interfaces/AnimationPreset.html":{},"classes/CMSObjects.html":{},"classes/DatGUIMenuUI.html":{},"classes/PhoenixMenuUI.html":{},"changelog.html":{}}}],["opacity.onfinishchange((newvalue",{"_index":1170,"title":{},"body":{"classes/DatGUIMenuUI.html":{}}}],["openfile",{"_index":2874,"title":{},"body":{"interfaces/Window.html":{}}}],["openfile(url",{"_index":3038,"title":{},"body":{"interfaces/Window.html":{}}}],["opening",{"_index":1971,"title":{},"body":{"classes/PresetView.html":{},"classes/StateManager.html":{},"changelog.html":{}}}],["openingangle",{"_index":2454,"title":{},"body":{"classes/StateManager.html":{}}}],["openingclippingangle",{"_index":2397,"title":{},"body":{"classes/StateManager.html":{}}}],["operations",{"_index":13,"title":{},"body":{"classes/ARManager.html":{},"interfaces/AnimationPreset.html":{},"classes/DatGUIMenuUI.html":{},"classes/Field.html":{},"classes/PhoenixMenuUI.html":{},"classes/RungeKutta.html":{},"classes/State.html":{},"classes/VRManager.html":{},"interfaces/Window.html":{},"classes/XRManager.html":{}}}],["optimal",{"_index":3654,"title":{},"body":{"changelog.html":{}}}],["optimize",{"_index":3464,"title":{},"body":{"changelog.html":{}}}],["option",{"_index":746,"title":{},"body":{"classes/ColorOptions.html":{},"classes/URLOptionsManager.html":{},"changelog.html":{},"miscellaneous/typealiases.html":{}}}],["optional",{"_index":54,"title":{},"body":{"classes/ARManager.html":{},"classes/ActiveVariable.html":{},"interfaces/AnimationPreset.html":{},"classes/CMSObjects.html":{},"classes/ColorManager.html":{},"classes/ColorOptions.html":{},"interfaces/Configuration.html":{},"classes/CoordinateHelper.html":{},"classes/Cut.html":{},"classes/DatGUIMenuUI.html":{},"classes/EffectsManager.html":{},"interfaces/EventDataLoader.html":{},"classes/ExportManager.html":{},"classes/Field.html":{},"classes/InfoLogger.html":{},"classes/LoadingManager.html":{},"classes/PhoenixMenuNode.html":{},"classes/PhoenixMenuUI.html":{},"interfaces/PhoenixUI.html":{},"classes/PresetView.html":{},"classes/PrettySymbols.html":{},"classes/RKHelper.html":{},"classes/RendererManager.html":{},"classes/RungeKutta.html":{},"classes/ScriptLoader.html":{},"classes/SelectionManager.html":{},"classes/StateManager.html":{},"classes/TracksMaterial.html":{},"classes/TracksMesh.html":{},"classes/URLOptionsManager.html":{},"classes/VRManager.html":{},"classes/XRManager.html":{},"changelog.html":{}}}],["optionalfeatures",{"_index":164,"title":{},"body":{"classes/ARManager.html":{},"classes/VRManager.html":{}}}],["options",{"_index":684,"title":{},"body":{"classes/ColorOptions.html":{},"interfaces/Configuration.html":{},"classes/DatGUIMenuUI.html":{},"classes/PhoenixMenuNode.html":{},"classes/PhoenixMenuUI.html":{},"interfaces/PhoenixUI.html":{},"classes/URLOptionsManager.html":{},"interfaces/Window.html":{},"classes/XRManager.html":{},"changelog.html":{},"coverage.html":{},"miscellaneous/enumerations.html":{},"index.html":{},"miscellaneous/typealiases.html":{},"miscellaneous/variables.html":{}}}],["options.ts",{"_index":683,"title":{},"body":{"classes/ColorOptions.html":{},"coverage.html":{},"miscellaneous/enumerations.html":{},"miscellaneous/typealiases.html":{}}}],["options.ts:124",{"_index":765,"title":{},"body":{"classes/ColorOptions.html":{}}}],["options.ts:150",{"_index":764,"title":{},"body":{"classes/ColorOptions.html":{}}}],["options.ts:176",{"_index":747,"title":{},"body":{"classes/ColorOptions.html":{}}}],["options.ts:193",{"_index":771,"title":{},"body":{"classes/ColorOptions.html":{}}}],["options.ts:207",{"_index":766,"title":{},"body":{"classes/ColorOptions.html":{}}}],["options.ts:246",{"_index":748,"title":{},"body":{"classes/ColorOptions.html":{}}}],["options.ts:256",{"_index":751,"title":{},"body":{"classes/ColorOptions.html":{}}}],["options.ts:26",{"_index":731,"title":{},"body":{"classes/ColorOptions.html":{}}}],["options.ts:28",{"_index":732,"title":{},"body":{"classes/ColorOptions.html":{}}}],["options.ts:282",{"_index":761,"title":{},"body":{"classes/ColorOptions.html":{}}}],["options.ts:293",{"_index":749,"title":{},"body":{"classes/ColorOptions.html":{}}}],["options.ts:30",{"_index":744,"title":{},"body":{"classes/ColorOptions.html":{}}}],["options.ts:300",{"_index":767,"title":{},"body":{"classes/ColorOptions.html":{}}}],["options.ts:32",{"_index":735,"title":{},"body":{"classes/ColorOptions.html":{}}}],["options.ts:35",{"_index":726,"title":{},"body":{"classes/ColorOptions.html":{}}}],["options.ts:57",{"_index":729,"title":{},"body":{"classes/ColorOptions.html":{}}}],["options.ts:65",{"_index":742,"title":{},"body":{"classes/ColorOptions.html":{}}}],["options.ts:74",{"_index":706,"title":{},"body":{"classes/ColorOptions.html":{}}}],["origin",{"_index":445,"title":{},"body":{"interfaces/AnimationPreset.html":{}}}],["original",{"_index":377,"title":{},"body":{"interfaces/AnimationPreset.html":{},"classes/PrettySymbols.html":{}}}],["otherwise",{"_index":821,"title":{},"body":{"classes/ColorOptions.html":{},"classes/PhoenixMenuNode.html":{},"classes/RKHelper.html":{}}}],["out",{"_index":365,"title":{},"body":{"interfaces/AnimationPreset.html":{},"classes/Field.html":{},"classes/PhoenixMenuUI.html":{},"classes/RKHelper.html":{},"classes/RungeKutta.html":{},"classes/State.html":{},"interfaces/Window.html":{},"changelog.html":{}}}],["outdated",{"_index":143,"title":{},"body":{"classes/ARManager.html":{},"classes/VRManager.html":{},"classes/XRManager.html":{}}}],["outline",{"_index":1295,"title":{},"body":{"classes/EffectsManager.html":{},"classes/SelectionManager.html":{},"interfaces/Window.html":{}}}],["outlinepass",{"_index":1329,"title":{},"body":{"classes/EffectsManager.html":{},"classes/SelectionManager.html":{}}}],["outlinepass.overlaymaterial.blending",{"_index":1362,"title":{},"body":{"classes/EffectsManager.html":{}}}],["outlinepass.visibleedgecolor.set(0xdf5330",{"_index":1364,"title":{},"body":{"classes/EffectsManager.html":{}}}],["outlinepass.visibleedgecolor.set(0xffff66",{"_index":1363,"title":{},"body":{"classes/EffectsManager.html":{}}}],["output",{"_index":1465,"title":{},"body":{"classes/ExportManager.html":{},"changelog.html":{}}}],["over",{"_index":333,"title":{},"body":{"interfaces/AnimationPreset.html":{},"classes/EffectsManager.html":{},"classes/SelectionManager.html":{}}}],["overlay",{"_index":64,"title":{},"body":{"classes/ARManager.html":{},"classes/RendererManager.html":{},"classes/URLOptionsManager.html":{},"interfaces/Window.html":{},"changelog.html":{}}}],["overlaycanvas",{"_index":2134,"title":{},"body":{"classes/RendererManager.html":{},"interfaces/Window.html":{}}}],["overlayed",{"_index":3086,"title":{},"body":{"interfaces/Window.html":{}}}],["overlayrenderer",{"_index":2084,"title":{},"body":{"classes/RendererManager.html":{}}}],["overlays",{"_index":67,"title":{},"body":{"classes/ARManager.html":{}}}],["overridden",{"_index":1780,"title":{},"body":{"classes/PhoenixMenuNode.html":{}}}],["override",{"_index":154,"title":{},"body":{"classes/ARManager.html":{},"classes/VRManager.html":{}}}],["overriden",{"_index":1000,"title":{},"body":{"classes/Cut.html":{}}}],["overview",{"_index":3815,"title":{"overview.html":{}},"body":{"overview.html":{}}}],["overwrite",{"_index":2010,"title":{},"body":{"classes/PrettySymbols.html":{}}}],["p",{"_index":1500,"title":{},"body":{"classes/Field.html":{},"classes/PrettySymbols.html":{},"classes/RungeKutta.html":{},"classes/State.html":{},"changelog.html":{}}}],["p.y",{"_index":2504,"title":{},"body":{"classes/TracksMaterial.html":{},"classes/TracksMesh.html":{}}}],["p.z",{"_index":2505,"title":{},"body":{"classes/TracksMaterial.html":{},"classes/TracksMesh.html":{}}}],["package",{"_index":3180,"title":{"dependencies.html":{},"properties.html":{}},"body":{"changelog.html":{},"index.html":{}}}],["packages",{"_index":3256,"title":{},"body":{"changelog.html":{}}}],["page",{"_index":2657,"title":{},"body":{"classes/URLOptionsManager.html":{}}}],["panel",{"_index":1603,"title":{},"body":{"classes/InfoLogger.html":{},"classes/SelectionManager.html":{}}}],["param",{"_index":153,"title":{},"body":{"classes/ARManager.html":{},"classes/ActiveVariable.html":{},"interfaces/AnimationPreset.html":{},"classes/CMSObjects.html":{},"classes/ColorManager.html":{},"classes/ColorOptions.html":{},"classes/CoordinateHelper.html":{},"classes/Cut.html":{},"classes/DatGUIMenuUI.html":{},"classes/EffectsManager.html":{},"interfaces/EventDataLoader.html":{},"classes/ExportManager.html":{},"classes/Field.html":{},"classes/InfoLogger.html":{},"classes/LoadingManager.html":{},"classes/PhoenixMenuNode.html":{},"classes/PhoenixMenuUI.html":{},"interfaces/PhoenixUI.html":{},"classes/PresetView.html":{},"classes/PrettySymbols.html":{},"classes/RKHelper.html":{},"classes/RendererManager.html":{},"classes/RungeKutta.html":{},"classes/ScriptLoader.html":{},"classes/SelectionManager.html":{},"classes/State.html":{},"classes/StateManager.html":{},"classes/TracksMaterial.html":{},"classes/TracksMesh.html":{},"classes/URLOptionsManager.html":{},"classes/VRManager.html":{},"interfaces/Window.html":{},"classes/XRManager.html":{}}}],["parameter",{"_index":2004,"title":{},"body":{"classes/PrettySymbols.html":{}}}],["parameters",{"_index":50,"title":{},"body":{"classes/ARManager.html":{},"classes/ActiveVariable.html":{},"classes/CMSObjects.html":{},"classes/ColorManager.html":{},"classes/ColorOptions.html":{},"classes/CoordinateHelper.html":{},"classes/Cut.html":{},"classes/DatGUIMenuUI.html":{},"classes/EffectsManager.html":{},"interfaces/EventDataLoader.html":{},"classes/ExportManager.html":{},"classes/Field.html":{},"classes/InfoLogger.html":{},"classes/LoadingManager.html":{},"classes/PhoenixMenuNode.html":{},"classes/PhoenixMenuUI.html":{},"interfaces/PhoenixUI.html":{},"classes/PresetView.html":{},"classes/PrettySymbols.html":{},"classes/RKHelper.html":{},"classes/RendererManager.html":{},"classes/RungeKutta.html":{},"classes/ScriptLoader.html":{},"classes/SelectionManager.html":{},"classes/StateManager.html":{},"classes/TracksMaterial.html":{},"classes/TracksMesh.html":{},"classes/URLOptionsManager.html":{},"classes/VRManager.html":{},"interfaces/Window.html":{},"classes/XRManager.html":{},"miscellaneous/typealiases.html":{}}}],["parameters.ts",{"_index":3842,"title":{},"body":{"miscellaneous/typealiases.html":{}}}],["parameterss",{"_index":2000,"title":{},"body":{"classes/PrettySymbols.html":{}}}],["parametrised",{"_index":3668,"title":{},"body":{"changelog.html":{}}}],["paramkey",{"_index":2013,"title":{},"body":{"classes/PrettySymbols.html":{}}}],["params",{"_index":646,"title":{},"body":{"classes/ColorManager.html":{},"classes/PrettySymbols.html":{},"classes/TracksMaterial.html":{},"classes/TracksMesh.html":{},"changelog.html":{}}}],["paramscopy",{"_index":2011,"title":{},"body":{"classes/PrettySymbols.html":{}}}],["paramscopy.dparams",{"_index":2035,"title":{},"body":{"classes/PrettySymbols.html":{}}}],["paramscopy.dparams[0",{"_index":2032,"title":{},"body":{"classes/PrettySymbols.html":{}}}],["paramscopy.dparams[1",{"_index":2034,"title":{},"body":{"classes/PrettySymbols.html":{}}}],["paramscopy.dparams[2",{"_index":2027,"title":{},"body":{"classes/PrettySymbols.html":{}}}],["paramscopy.dparams[3",{"_index":2026,"title":{},"body":{"classes/PrettySymbols.html":{}}}],["paramscopy.dparams[4",{"_index":2029,"title":{},"body":{"classes/PrettySymbols.html":{}}}],["paramscopy?.dparams",{"_index":2024,"title":{},"body":{"classes/PrettySymbols.html":{}}}],["paramscopy['pos",{"_index":2021,"title":{},"body":{"classes/PrettySymbols.html":{}}}],["paramscopy[paramkey",{"_index":2017,"title":{},"body":{"classes/PrettySymbols.html":{}}}],["paramscopy[symbol",{"_index":2016,"title":{},"body":{"classes/PrettySymbols.html":{}}}],["parent",{"_index":1686,"title":{},"body":{"classes/PhoenixMenuNode.html":{},"classes/PhoenixMenuUI.html":{},"classes/ScriptLoader.html":{}}}],["parentelement",{"_index":2199,"title":{},"body":{"classes/ScriptLoader.html":{}}}],["parentelement.appendchild(scriptelement",{"_index":2228,"title":{},"body":{"classes/ScriptLoader.html":{}}}],["parentnode",{"_index":1872,"title":{},"body":{"classes/PhoenixMenuUI.html":{}}}],["parentnode.addchild",{"_index":1881,"title":{},"body":{"classes/PhoenixMenuUI.html":{}}}],["parse",{"_index":1461,"title":{},"body":{"classes/ExportManager.html":{},"classes/URLOptionsManager.html":{},"interfaces/Window.html":{},"index.html":{}}}],["parsefloat(objectparams?.dparams?.[4",{"_index":845,"title":{},"body":{"classes/ColorOptions.html":{}}}],["parsegltfgeometry",{"_index":3008,"title":{},"body":{"interfaces/Window.html":{}}}],["parseint(objectparams?.dparams?.[4",{"_index":825,"title":{},"body":{"classes/ColorOptions.html":{}}}],["parseobjgeometry",{"_index":2988,"title":{},"body":{"interfaces/Window.html":{}}}],["parsephoenixdisplay(input",{"_index":2996,"title":{},"body":{"interfaces/Window.html":{}}}],["parsephoenixevents(eventsdata",{"_index":2941,"title":{},"body":{"interfaces/Window.html":{}}}],["parses",{"_index":2986,"title":{},"body":{"interfaces/Window.html":{}}}],["parsing",{"_index":3621,"title":{},"body":{"changelog.html":{}}}],["part",{"_index":549,"title":{},"body":{"classes/CMSObjects.html":{},"interfaces/EventDataLoader.html":{},"interfaces/Window.html":{}}}],["particle",{"_index":474,"title":{},"body":{"interfaces/AnimationPreset.html":{},"classes/State.html":{},"interfaces/Window.html":{}}}],["particle1",{"_index":488,"title":{},"body":{"interfaces/AnimationPreset.html":{}}}],["particle1.clone",{"_index":491,"title":{},"body":{"interfaces/AnimationPreset.html":{}}}],["particle1.position.setz(distancefromorigin",{"_index":492,"title":{},"body":{"interfaces/AnimationPreset.html":{}}}],["particle2",{"_index":490,"title":{},"body":{"interfaces/AnimationPreset.html":{}}}],["particle2.position.setz",{"_index":493,"title":{},"body":{"interfaces/AnimationPreset.html":{}}}],["particlecolor",{"_index":479,"title":{},"body":{"interfaces/AnimationPreset.html":{}}}],["particlegeometry",{"_index":483,"title":{},"body":{"interfaces/AnimationPreset.html":{}}}],["particlematerial",{"_index":486,"title":{},"body":{"interfaces/AnimationPreset.html":{}}}],["particles",{"_index":473,"title":{},"body":{"interfaces/AnimationPreset.html":{}}}],["particlesize",{"_index":475,"title":{},"body":{"interfaces/AnimationPreset.html":{}}}],["particletoorigin",{"_index":498,"title":{},"body":{"interfaces/AnimationPreset.html":{}}}],["particletweens",{"_index":495,"title":{},"body":{"interfaces/AnimationPreset.html":{}}}],["particletweens.push(particletoorigin",{"_index":500,"title":{},"body":{"interfaces/AnimationPreset.html":{}}}],["particletweens[0].oncomplete",{"_index":501,"title":{},"body":{"interfaces/AnimationPreset.html":{}}}],["parts",{"_index":2928,"title":{},"body":{"interfaces/Window.html":{}}}],["pass",{"_index":1296,"title":{},"body":{"classes/EffectsManager.html":{},"classes/SelectionManager.html":{}}}],["passed",{"_index":1016,"title":{},"body":{"classes/Cut.html":{},"classes/Field.html":{},"classes/RKHelper.html":{},"classes/RungeKutta.html":{},"classes/State.html":{},"interfaces/Window.html":{},"miscellaneous/variables.html":{}}}],["passes",{"_index":1311,"title":{},"body":{"classes/EffectsManager.html":{}}}],["passindex",{"_index":1366,"title":{},"body":{"classes/EffectsManager.html":{}}}],["path",{"_index":238,"title":{},"body":{"interfaces/AnimationPreset.html":{},"classes/Field.html":{},"classes/RungeKutta.html":{},"classes/State.html":{},"classes/URLOptionsManager.html":{},"interfaces/Window.html":{},"changelog.html":{}}}],["path/to/geometry.obj",{"_index":3802,"title":{},"body":{"index.html":{}}}],["pathlength",{"_index":2379,"title":{},"body":{"classes/State.html":{}}}],["paths",{"_index":3216,"title":{},"body":{"changelog.html":{}}}],["per",{"_index":922,"title":{},"body":{"classes/CoordinateHelper.html":{},"changelog.html":{}}}],["perform",{"_index":1035,"title":{},"body":{"classes/DatGUIMenuUI.html":{},"classes/Field.html":{},"classes/PhoenixMenuUI.html":{},"classes/RungeKutta.html":{},"classes/State.html":{}}}],["performance",{"_index":2148,"title":{},"body":{"classes/RendererManager.html":{},"classes/SelectionManager.html":{},"changelog.html":{}}}],["performed",{"_index":1496,"title":{},"body":{"classes/Field.html":{},"classes/RungeKutta.html":{},"classes/State.html":{}}}],["performing",{"_index":1491,"title":{},"body":{"classes/Field.html":{},"classes/RungeKutta.html":{},"classes/State.html":{}}}],["periodically",{"_index":3253,"title":{},"body":{"changelog.html":{}}}],["permission",{"_index":3312,"title":{},"body":{"changelog.html":{}}}],["persist",{"_index":3429,"title":{},"body":{"changelog.html":{}}}],["perspective",{"_index":1865,"title":{},"body":{"classes/PhoenixMenuUI.html":{}}}],["perspectivecamera",{"_index":46,"title":{},"body":{"classes/ARManager.html":{},"classes/XRManager.html":{}}}],["phi",{"_index":907,"title":{},"body":{"classes/CoordinateHelper.html":{},"classes/PrettySymbols.html":{},"classes/RKHelper.html":{},"changelog.html":{}}}],["phi=0",{"_index":961,"title":{},"body":{"classes/CoordinateHelper.html":{}}}],["phi=pi",{"_index":968,"title":{},"body":{"classes/CoordinateHelper.html":{}}}],["phnx",{"_index":2995,"title":{},"body":{"interfaces/Window.html":{}}}],["phoenix",{"_index":66,"title":{},"body":{"classes/ARManager.html":{},"classes/ColorOptions.html":{},"interfaces/Configuration.html":{},"classes/DatGUIMenuUI.html":{},"classes/ExportManager.html":{},"classes/LoadingManager.html":{},"classes/PhoenixMenuNode.html":{},"classes/PhoenixMenuUI.html":{},"interfaces/PhoenixUI.html":{},"classes/StateManager.html":{},"classes/URLOptionsManager.html":{},"interfaces/Window.html":{},"changelog.html":{},"index.html":{},"properties.html":{},"miscellaneous/typealiases.html":{},"miscellaneous/variables.html":{}}}],["phoenix.min.js",{"_index":3808,"title":{},"body":{"index.html":{}}}],["phoenixloader",{"_index":2676,"title":{},"body":{"classes/URLOptionsManager.html":{},"interfaces/Window.html":{},"coverage.html":{},"index.html":{}}}],["phoenixmenu",{"_index":2436,"title":{},"body":{"classes/StateManager.html":{},"classes/URLOptionsManager.html":{}}}],["phoenixmenuconfigs",{"_index":1742,"title":{},"body":{"classes/PhoenixMenuNode.html":{},"miscellaneous/typealiases.html":{}}}],["phoenixmenuconfigs[keyof",{"_index":1744,"title":{},"body":{"classes/PhoenixMenuNode.html":{}}}],["phoenixmenunode",{"_index":703,"title":{"classes/PhoenixMenuNode.html":{}},"body":{"classes/ColorOptions.html":{},"interfaces/Configuration.html":{},"classes/PhoenixMenuNode.html":{},"classes/PhoenixMenuUI.html":{},"classes/StateManager.html":{},"coverage.html":{}}}],["phoenixmenunode(name",{"_index":1751,"title":{},"body":{"classes/PhoenixMenuNode.html":{}}}],["phoenixmenunode.name",{"_index":1933,"title":{},"body":{"classes/PhoenixMenuUI.html":{}}}],["phoenixmenuroot",{"_index":862,"title":{},"body":{"interfaces/Configuration.html":{},"classes/PhoenixMenuUI.html":{},"classes/StateManager.html":{}}}],["phoenixmenuui",{"_index":1835,"title":{"classes/PhoenixMenuUI.html":{}},"body":{"classes/PhoenixMenuUI.html":{},"coverage.html":{}}}],["phoenixnodejson",{"_index":1790,"title":{},"body":{"classes/PhoenixMenuNode.html":{}}}],["phoenixnodejson['children",{"_index":1797,"title":{},"body":{"classes/PhoenixMenuNode.html":{}}}],["phoenixnodejson['children'].push(child.getnodestate",{"_index":1798,"title":{},"body":{"classes/PhoenixMenuNode.html":{}}}],["phoenixnodejson['childrenactive",{"_index":1794,"title":{},"body":{"classes/PhoenixMenuNode.html":{}}}],["phoenixnodejson['configs",{"_index":1796,"title":{},"body":{"classes/PhoenixMenuNode.html":{}}}],["phoenixnodejson['name",{"_index":1791,"title":{},"body":{"classes/PhoenixMenuNode.html":{}}}],["phoenixnodejson['nodelevel",{"_index":1792,"title":{},"body":{"classes/PhoenixMenuNode.html":{}}}],["phoenixnodejson['togglestate",{"_index":1793,"title":{},"body":{"classes/PhoenixMenuNode.html":{}}}],["phoenixobjects",{"_index":550,"title":{},"body":{"classes/CMSObjects.html":{},"coverage.html":{}}}],["phoenixscene",{"_index":2997,"title":{},"body":{"interfaces/Window.html":{}}}],["phoenixscene.scene",{"_index":3000,"title":{},"body":{"interfaces/Window.html":{}}}],["phoenixscene.sceneconfiguration",{"_index":2999,"title":{},"body":{"interfaces/Window.html":{}}}],["phoenixui",{"_index":1038,"title":{"interfaces/PhoenixUI.html":{}},"body":{"classes/DatGUIMenuUI.html":{},"classes/PhoenixMenuUI.html":{},"interfaces/PhoenixUI.html":{},"changelog.html":{},"coverage.html":{}}}],["phoenixurloptions",{"_index":2682,"title":{},"body":{"classes/URLOptionsManager.html":{},"coverage.html":{},"miscellaneous/variables.html":{}}}],["physics",{"_index":546,"title":{},"body":{"classes/CMSObjects.html":{},"interfaces/EventDataLoader.html":{},"classes/PrettySymbols.html":{},"interfaces/Window.html":{},"changelog.html":{}}}],["pi",{"_index":912,"title":{},"body":{"classes/CoordinateHelper.html":{}}}],["pick",{"_index":2760,"title":{},"body":{"classes/URLOptionsManager.html":{}}}],["picker",{"_index":1161,"title":{},"body":{"classes/DatGUIMenuUI.html":{}}}],["picture",{"_index":2917,"title":{},"body":{"interfaces/Window.html":{}}}],["pipe",{"_index":3681,"title":{},"body":{"changelog.html":{}}}],["planarcalocells",{"_index":3478,"title":{},"body":{"changelog.html":{},"miscellaneous/variables.html":{}}}],["planarcalorimeters",{"_index":3433,"title":{},"body":{"changelog.html":{}}}],["plane",{"_index":249,"title":{},"body":{"interfaces/AnimationPreset.html":{}}}],["planes",{"_index":441,"title":{},"body":{"interfaces/AnimationPreset.html":{},"interfaces/Window.html":{}}}],["playground",{"_index":3341,"title":{},"body":{"changelog.html":{}}}],["plength",{"_index":1579,"title":{},"body":{"classes/Field.html":{},"classes/RungeKutta.html":{},"classes/State.html":{}}}],["point",{"_index":1516,"title":{},"body":{"classes/Field.html":{},"classes/PresetView.html":{},"classes/RungeKutta.html":{},"classes/State.html":{}}}],["pointing",{"_index":1965,"title":{},"body":{"classes/PresetView.html":{}}}],["points",{"_index":2495,"title":{},"body":{"classes/TracksMaterial.html":{},"classes/TracksMesh.html":{}}}],["points.length",{"_index":2506,"title":{},"body":{"classes/TracksMaterial.html":{},"classes/TracksMesh.html":{}}}],["points[0].y",{"_index":2501,"title":{},"body":{"classes/TracksMaterial.html":{},"classes/TracksMesh.html":{}}}],["points[0].z",{"_index":2502,"title":{},"body":{"classes/TracksMaterial.html":{},"classes/TracksMesh.html":{}}}],["points[i].y",{"_index":2508,"title":{},"body":{"classes/TracksMaterial.html":{},"classes/TracksMesh.html":{}}}],["points[i].z",{"_index":2509,"title":{},"body":{"classes/TracksMaterial.html":{},"classes/TracksMesh.html":{}}}],["pos",{"_index":267,"title":{},"body":{"interfaces/AnimationPreset.html":{},"classes/Field.html":{},"classes/PrettySymbols.html":{},"classes/RKHelper.html":{},"classes/RungeKutta.html":{},"classes/State.html":{}}}],["pos.x",{"_index":2059,"title":{},"body":{"classes/RKHelper.html":{}}}],["pos.y",{"_index":2060,"title":{},"body":{"classes/RKHelper.html":{}}}],["pos.z",{"_index":2057,"title":{},"body":{"classes/RKHelper.html":{}}}],["pos1",{"_index":1528,"title":{},"body":{"classes/Field.html":{},"classes/RungeKutta.html":{},"classes/State.html":{}}}],["pos2",{"_index":1539,"title":{},"body":{"classes/Field.html":{},"classes/RungeKutta.html":{},"classes/State.html":{}}}],["pos[0",{"_index":275,"title":{},"body":{"interfaces/AnimationPreset.html":{}}}],["pos[1",{"_index":277,"title":{},"body":{"interfaces/AnimationPreset.html":{}}}],["pos[2",{"_index":279,"title":{},"body":{"interfaces/AnimationPreset.html":{}}}],["posible",{"_index":2921,"title":{},"body":{"interfaces/Window.html":{}}}],["position",{"_index":79,"title":{},"body":{"classes/ARManager.html":{},"interfaces/AnimationPreset.html":{},"classes/DatGUIMenuUI.html":{},"classes/Field.html":{},"classes/PresetView.html":{},"classes/RKHelper.html":{},"classes/RungeKutta.html":{},"classes/State.html":{},"classes/TracksMaterial.html":{},"classes/TracksMesh.html":{},"classes/VRManager.html":{},"interfaces/Window.html":{},"classes/XRManager.html":{},"changelog.html":{},"miscellaneous/variables.html":{}}}],["positioning",{"_index":1180,"title":{},"body":{"classes/DatGUIMenuUI.html":{}}}],["positions",{"_index":227,"title":{},"body":{"interfaces/AnimationPreset.html":{},"classes/RKHelper.html":{},"classes/TracksMaterial.html":{},"classes/TracksMesh.html":{},"interfaces/Window.html":{},"changelog.html":{},"miscellaneous/variables.html":{}}}],["positions.concat(extrapolatedpos",{"_index":2080,"title":{},"body":{"classes/RKHelper.html":{}}}],["positions.slice(1).foreach",{"_index":538,"title":{},"body":{"interfaces/AnimationPreset.html":{}}}],["positions[0].duration",{"_index":534,"title":{},"body":{"interfaces/AnimationPreset.html":{}}}],["positions[0].easing",{"_index":536,"title":{},"body":{"interfaces/AnimationPreset.html":{}}}],["positions[0].position",{"_index":533,"title":{},"body":{"interfaces/AnimationPreset.html":{}}}],["positive",{"_index":967,"title":{},"body":{"classes/CoordinateHelper.html":{},"changelog.html":{}}}],["possible",{"_index":727,"title":{},"body":{"classes/ColorOptions.html":{},"changelog.html":{}}}],["post",{"_index":2298,"title":{},"body":{"classes/SelectionManager.html":{}}}],["powerpreference",{"_index":2146,"title":{},"body":{"classes/RendererManager.html":{}}}],["preselectionantialias",{"_index":2241,"title":{},"body":{"classes/SelectionManager.html":{}}}],["presenting",{"_index":3791,"title":{},"body":{"index.html":{}}}],["preset",{"_index":224,"title":{},"body":{"interfaces/AnimationPreset.html":{},"interfaces/Configuration.html":{},"classes/PresetView.html":{},"interfaces/Window.html":{},"changelog.html":{},"miscellaneous/enumerations.html":{}}}],["presetanimations",{"_index":863,"title":{},"body":{"interfaces/Configuration.html":{}}}],["presets",{"_index":3882,"title":{},"body":{"miscellaneous/variables.html":{}}}],["presetview",{"_index":883,"title":{"classes/PresetView.html":{}},"body":{"interfaces/Configuration.html":{},"classes/PresetView.html":{},"coverage.html":{}}}],["presetviews",{"_index":864,"title":{},"body":{"interfaces/Configuration.html":{}}}],["prettier",{"_index":3416,"title":{},"body":{"changelog.html":{}}}],["pretty",{"_index":1987,"title":{},"body":{"classes/PrettySymbols.html":{}}}],["prettydparams",{"_index":2025,"title":{},"body":{"classes/PrettySymbols.html":{}}}],["prettydparams['d0",{"_index":2031,"title":{},"body":{"classes/PrettySymbols.html":{}}}],["prettydparams['q",{"_index":2030,"title":{},"body":{"classes/PrettySymbols.html":{}}}],["prettydparams['z0",{"_index":2033,"title":{},"body":{"classes/PrettySymbols.html":{}}}],["prettydparams['|p",{"_index":2028,"title":{},"body":{"classes/PrettySymbols.html":{}}}],["prettyparams",{"_index":2337,"title":{},"body":{"classes/SelectionManager.html":{}}}],["prettyparams[key",{"_index":2344,"title":{},"body":{"classes/SelectionManager.html":{}}}],["prettysymbol",{"_index":2005,"title":{},"body":{"classes/PrettySymbols.html":{}}}],["prettysymbols",{"_index":774,"title":{"classes/PrettySymbols.html":{}},"body":{"classes/ColorOptions.html":{},"classes/PhoenixMenuUI.html":{},"classes/PrettySymbols.html":{},"classes/SelectionManager.html":{},"coverage.html":{}}}],["prettysymbols.getprettyparams",{"_index":2338,"title":{},"body":{"classes/SelectionManager.html":{}}}],["prettysymbols.getprettysymbol('charge",{"_index":714,"title":{},"body":{"classes/ColorOptions.html":{}}}],["prettysymbols.getprettysymbol('charge')}=${chargevalue",{"_index":814,"title":{},"body":{"classes/ColorOptions.html":{}}}],["prettysymbols.getprettysymbol('mom",{"_index":721,"title":{},"body":{"classes/ColorOptions.html":{}}}],["prettysymbols.getprettysymbol(cut.field",{"_index":1913,"title":{},"body":{"classes/PhoenixMenuUI.html":{}}}],["prettysymbols.getprettysymbol(paramkey",{"_index":2015,"title":{},"body":{"classes/PrettySymbols.html":{}}}],["prettysymbols.symbols[symbol].includes(param",{"_index":2007,"title":{},"body":{"classes/PrettySymbols.html":{}}}],["previous",{"_index":75,"title":{},"body":{"classes/ARManager.html":{},"classes/PhoenixMenuNode.html":{},"classes/PhoenixMenuUI.html":{},"classes/TracksMaterial.html":{},"classes/TracksMesh.html":{}}}],["previousscale",{"_index":374,"title":{},"body":{"interfaces/AnimationPreset.html":{}}}],["previoustween",{"_index":537,"title":{},"body":{"interfaces/AnimationPreset.html":{}}}],["previoustween.chain(tween",{"_index":540,"title":{},"body":{"interfaces/AnimationPreset.html":{}}}],["previoustween.oncomplete(onend",{"_index":541,"title":{},"body":{"interfaces/AnimationPreset.html":{}}}],["previousvalues",{"_index":21,"title":{},"body":{"classes/ARManager.html":{}}}],["prevlocalclipping",{"_index":467,"title":{},"body":{"interfaces/AnimationPreset.html":{}}}],["prevnode",{"_index":1827,"title":{},"body":{"classes/PhoenixMenuNode.html":{}}}],["prevnode.addchild(nodename",{"_index":1834,"title":{},"body":{"classes/PhoenixMenuNode.html":{}}}],["prevnode.children.find(child",{"_index":1832,"title":{},"body":{"classes/PhoenixMenuNode.html":{}}}],["prevnode.findintree(nodename",{"_index":1831,"title":{},"body":{"classes/PhoenixMenuNode.html":{}}}],["prevp",{"_index":2581,"title":{},"body":{"classes/TracksMaterial.html":{},"classes/TracksMesh.html":{}}}],["prevpos",{"_index":2574,"title":{},"body":{"classes/TracksMaterial.html":{},"classes/TracksMesh.html":{}}}],["prevpos.w",{"_index":2583,"title":{},"body":{"classes/TracksMaterial.html":{},"classes/TracksMesh.html":{}}}],["prevpos.xy",{"_index":2582,"title":{},"body":{"classes/TracksMaterial.html":{},"classes/TracksMesh.html":{}}}],["print",{"_index":2022,"title":{},"body":{"classes/PrettySymbols.html":{}}}],["printed",{"_index":1999,"title":{},"body":{"classes/PrettySymbols.html":{}}}],["private",{"_index":20,"title":{},"body":{"classes/ARManager.html":{},"classes/ActiveVariable.html":{},"interfaces/AnimationPreset.html":{},"classes/ColorOptions.html":{},"classes/Cut.html":{},"classes/DatGUIMenuUI.html":{},"classes/EffectsManager.html":{},"classes/ExportManager.html":{},"classes/InfoLogger.html":{},"classes/LoadingManager.html":{},"classes/PhoenixMenuNode.html":{},"classes/PhoenixMenuUI.html":{},"classes/RendererManager.html":{},"classes/SelectionManager.html":{},"classes/StateManager.html":{},"classes/URLOptionsManager.html":{},"classes/VRManager.html":{},"interfaces/Window.html":{}}}],["process",{"_index":554,"title":{},"body":{"classes/CMSObjects.html":{},"classes/SelectionManager.html":{},"classes/TracksMaterial.html":{},"classes/TracksMesh.html":{},"interfaces/Window.html":{}}}],["processes",{"_index":3055,"title":{},"body":{"interfaces/Window.html":{}}}],["processeventfile",{"_index":2712,"title":{},"body":{"classes/URLOptionsManager.html":{}}}],["processeventfile(file",{"_index":2718,"title":{},"body":{"classes/URLOptionsManager.html":{}}}],["processing",{"_index":876,"title":{},"body":{"interfaces/Configuration.html":{},"classes/SelectionManager.html":{},"changelog.html":{},"index.html":{}}}],["progress",{"_index":148,"title":{},"body":{"classes/ARManager.html":{},"interfaces/AnimationPreset.html":{},"classes/LoadingManager.html":{},"classes/TracksMaterial.html":{},"classes/TracksMesh.html":{},"classes/VRManager.html":{},"classes/XRManager.html":{},"changelog.html":{}}}],["progresses",{"_index":1650,"title":{},"body":{"classes/LoadingManager.html":{}}}],["progressitems",{"_index":1621,"title":{},"body":{"classes/LoadingManager.html":{}}}],["project",{"_index":3168,"title":{},"body":{"changelog.html":{}}}],["project/jsroot/blob/19ce116b68701ab45e0a092c673119bf97ede0c2/modules/core.mjs#l241",{"_index":3036,"title":{},"body":{"interfaces/Window.html":{}}}],["projectionmatrix",{"_index":2569,"title":{},"body":{"classes/TracksMaterial.html":{},"classes/TracksMesh.html":{}}}],["promise",{"_index":2208,"title":{},"body":{"classes/ScriptLoader.html":{},"classes/URLOptionsManager.html":{},"interfaces/Window.html":{},"changelog.html":{}}}],["promise((resolve",{"_index":2211,"title":{},"body":{"classes/ScriptLoader.html":{}}}],["promises",{"_index":2741,"title":{},"body":{"classes/URLOptionsManager.html":{}}}],["prop",{"_index":1812,"title":{},"body":{"classes/PhoenixMenuNode.html":{}}}],["propagate",{"_index":1573,"title":{},"body":{"classes/Field.html":{},"classes/RungeKutta.html":{},"classes/State.html":{}}}],["propagate(startpos",{"_index":2187,"title":{},"body":{"classes/RungeKutta.html":{}}}],["propagation",{"_index":314,"title":{},"body":{"interfaces/AnimationPreset.html":{},"interfaces/Window.html":{}}}],["propagator",{"_index":2044,"title":{},"body":{"classes/RKHelper.html":{}}}],["proper",{"_index":3316,"title":{},"body":{"changelog.html":{}}}],["properly",{"_index":3432,"title":{},"body":{"changelog.html":{}}}],["properties",{"_index":17,"title":{"properties.html":{}},"body":{"classes/ARManager.html":{},"classes/ActiveVariable.html":{},"interfaces/AnimationPreset.html":{},"classes/ColorOptions.html":{},"interfaces/Configuration.html":{},"classes/Cut.html":{},"classes/DatGUIMenuUI.html":{},"classes/EffectsManager.html":{},"classes/Field.html":{},"classes/InfoLogger.html":{},"classes/LoadingManager.html":{},"classes/PhoenixMenuNode.html":{},"classes/PhoenixMenuUI.html":{},"classes/PresetView.html":{},"classes/PrettySymbols.html":{},"classes/RendererManager.html":{},"classes/RungeKutta.html":{},"classes/SelectionManager.html":{},"classes/State.html":{},"classes/StateManager.html":{},"classes/TracksMaterial.html":{},"classes/TracksMesh.html":{},"classes/URLOptionsManager.html":{},"classes/VRManager.html":{},"interfaces/Window.html":{},"classes/XRManager.html":{},"changelog.html":{},"properties.html":{}}}],["property",{"_index":753,"title":{},"body":{"classes/ColorOptions.html":{}}}],["property's",{"_index":641,"title":{},"body":{"classes/ColorManager.html":{}}}],["props",{"_index":2345,"title":{},"body":{"classes/SelectionManager.html":{}}}],["props.join",{"_index":2356,"title":{},"body":{"classes/SelectionManager.html":{}}}],["props.length",{"_index":2355,"title":{},"body":{"classes/SelectionManager.html":{}}}],["protected",{"_index":26,"title":{},"body":{"classes/ARManager.html":{},"classes/VRManager.html":{},"classes/XRManager.html":{}}}],["provided",{"_index":3204,"title":{},"body":{"changelog.html":{}}}],["providing",{"_index":1874,"title":{},"body":{"classes/PhoenixMenuUI.html":{}}}],["pseudorapidity",{"_index":935,"title":{},"body":{"classes/CoordinateHelper.html":{}}}],["pt",{"_index":1990,"title":{},"body":{"classes/PrettySymbols.html":{},"changelog.html":{}}}],["public",{"_index":24,"title":{},"body":{"classes/ARManager.html":{},"classes/ActiveVariable.html":{},"interfaces/AnimationPreset.html":{},"classes/CMSObjects.html":{},"classes/ColorManager.html":{},"classes/CoordinateHelper.html":{},"classes/Cut.html":{},"classes/DatGUIMenuUI.html":{},"classes/EffectsManager.html":{},"classes/ExportManager.html":{},"classes/LoadingManager.html":{},"classes/PhoenixMenuUI.html":{},"classes/PresetView.html":{},"classes/PrettySymbols.html":{},"classes/RKHelper.html":{},"classes/RendererManager.html":{},"classes/ScriptLoader.html":{},"classes/SelectionManager.html":{},"classes/URLOptionsManager.html":{},"classes/VRManager.html":{},"interfaces/Window.html":{},"classes/XRManager.html":{}}}],["pushed",{"_index":2797,"title":{},"body":{"classes/VRManager.html":{}}}],["puts",{"_index":965,"title":{},"body":{"classes/CoordinateHelper.html":{}}}],["q",{"_index":1499,"title":{},"body":{"classes/Field.html":{},"classes/PrettySymbols.html":{},"classes/RungeKutta.html":{},"classes/State.html":{}}}],["qop",{"_index":1504,"title":{},"body":{"classes/Field.html":{},"classes/RKHelper.html":{},"classes/RungeKutta.html":{},"classes/State.html":{}}}],["quaternion",{"_index":917,"title":{},"body":{"classes/CoordinateHelper.html":{}}}],["quaternion.multiply(quaternion2",{"_index":973,"title":{},"body":{"classes/CoordinateHelper.html":{}}}],["quaternion.setfromunitvectors(v1",{"_index":964,"title":{},"body":{"classes/CoordinateHelper.html":{}}}],["quaternion2",{"_index":969,"title":{},"body":{"classes/CoordinateHelper.html":{}}}],["quaternion2.setfromaxisangle(new",{"_index":970,"title":{},"body":{"classes/CoordinateHelper.html":{}}}],["query",{"_index":2659,"title":{},"body":{"classes/URLOptionsManager.html":{}}}],["radians",{"_index":943,"title":{},"body":{"classes/CoordinateHelper.html":{}}}],["radius",{"_index":299,"title":{},"body":{"interfaces/AnimationPreset.html":{},"classes/CoordinateHelper.html":{}}}],["random",{"_index":635,"title":{},"body":{"classes/ColorManager.html":{},"classes/ColorOptions.html":{},"changelog.html":{}}}],["randomcolor",{"_index":1220,"title":{},"body":{"classes/DatGUIMenuUI.html":{}}}],["randomly",{"_index":649,"title":{},"body":{"classes/ColorManager.html":{}}}],["range",{"_index":642,"title":{},"body":{"classes/ColorManager.html":{},"classes/CoordinateHelper.html":{},"classes/Cut.html":{},"classes/PhoenixMenuUI.html":{},"changelog.html":{}}}],["rangeslider",{"_index":1784,"title":{},"body":{"classes/PhoenixMenuNode.html":{},"miscellaneous/typealiases.html":{}}}],["ratio",{"_index":1501,"title":{},"body":{"classes/Field.html":{},"classes/RungeKutta.html":{},"classes/State.html":{},"interfaces/Window.html":{}}}],["raycaster",{"_index":2291,"title":{},"body":{"classes/SelectionManager.html":{}}}],["raycaster.intersectobjects(this.scene.children",{"_index":2372,"title":{},"body":{"classes/SelectionManager.html":{}}}],["raycaster.params.line.threshold",{"_index":2371,"title":{},"body":{"classes/SelectionManager.html":{}}}],["raycaster.setfromcamera(mouse",{"_index":2370,"title":{},"body":{"classes/SelectionManager.html":{}}}],["reachedhits",{"_index":414,"title":{},"body":{"interfaces/AnimationPreset.html":{}}}],["reachedhits.length",{"_index":418,"title":{},"body":{"interfaces/AnimationPreset.html":{}}}],["reaches",{"_index":400,"title":{},"body":{"interfaces/AnimationPreset.html":{}}}],["react",{"_index":3813,"title":{},"body":{"index.html":{}}}],["read",{"_index":2745,"title":{},"body":{"classes/URLOptionsManager.html":{},"miscellaneous/variables.html":{}}}],["reader",{"_index":3907,"title":{},"body":{"miscellaneous/variables.html":{}}}],["reader.onload",{"_index":3909,"title":{},"body":{"miscellaneous/variables.html":{}}}],["reader.readastext(configfile",{"_index":3912,"title":{},"body":{"miscellaneous/variables.html":{}}}],["reading",{"_index":2743,"title":{},"body":{"classes/URLOptionsManager.html":{}}}],["readonly",{"_index":22,"title":{},"body":{"classes/ARManager.html":{},"classes/PrettySymbols.html":{},"classes/VRManager.html":{}}}],["readzipfile",{"_index":2679,"title":{},"body":{"classes/URLOptionsManager.html":{},"coverage.html":{},"miscellaneous/variables.html":{}}}],["readzipfile(filebuffer",{"_index":2742,"title":{},"body":{"classes/URLOptionsManager.html":{}}}],["realistic",{"_index":3577,"title":{},"body":{"changelog.html":{}}}],["reason",{"_index":2757,"title":{},"body":{"classes/URLOptionsManager.html":{}}}],["receives",{"_index":2937,"title":{},"body":{"interfaces/Window.html":{}}}],["recover",{"_index":1432,"title":{},"body":{"classes/ExportManager.html":{},"interfaces/Window.html":{}}}],["reduce",{"_index":3185,"title":{},"body":{"changelog.html":{}}}],["redundant",{"_index":3569,"title":{},"body":{"changelog.html":{}}}],["refactor",{"_index":3397,"title":{},"body":{"changelog.html":{}}}],["refactoring",{"_index":3701,"title":{},"body":{"changelog.html":{}}}],["reference",{"_index":1288,"title":{},"body":{"classes/DatGUIMenuUI.html":{},"classes/PhoenixMenuUI.html":{},"interfaces/PhoenixUI.html":{}}}],["reject",{"_index":2212,"title":{},"body":{"classes/ScriptLoader.html":{}}}],["related",{"_index":12,"title":{},"body":{"classes/ARManager.html":{},"interfaces/AnimationPreset.html":{},"classes/ColorManager.html":{},"classes/ColorOptions.html":{},"classes/DatGUIMenuUI.html":{},"classes/ExportManager.html":{},"classes/PhoenixMenuUI.html":{},"classes/RendererManager.html":{},"classes/SelectionManager.html":{},"classes/VRManager.html":{},"interfaces/Window.html":{},"classes/XRManager.html":{}}}],["released",{"_index":2796,"title":{},"body":{"classes/VRManager.html":{}}}],["reload",{"_index":2958,"title":{},"body":{"interfaces/Window.html":{}}}],["remaining",{"_index":437,"title":{},"body":{"interfaces/AnimationPreset.html":{}}}],["remove",{"_index":469,"title":{},"body":{"interfaces/AnimationPreset.html":{},"classes/DatGUIMenuUI.html":{},"classes/EffectsManager.html":{},"classes/PhoenixMenuNode.html":{},"classes/PhoenixMenuUI.html":{},"interfaces/PhoenixUI.html":{},"classes/RendererManager.html":{},"classes/SelectionManager.html":{},"interfaces/Window.html":{},"changelog.html":{}}}],["remove').name('remove",{"_index":1195,"title":{},"body":{"classes/DatGUIMenuUI.html":{}}}],["removechild",{"_index":1695,"title":{},"body":{"classes/PhoenixMenuNode.html":{}}}],["removechild(child",{"_index":1735,"title":{},"body":{"classes/PhoenixMenuNode.html":{}}}],["removecontrols",{"_index":2095,"title":{},"body":{"classes/RendererManager.html":{}}}],["removecontrols(renderer",{"_index":2123,"title":{},"body":{"classes/RendererManager.html":{}}}],["removed",{"_index":1101,"title":{},"body":{"classes/DatGUIMenuUI.html":{},"classes/EffectsManager.html":{},"classes/PhoenixMenuNode.html":{},"classes/PhoenixMenuUI.html":{},"interfaces/PhoenixUI.html":{},"classes/RendererManager.html":{}}}],["removeeventlistener('click",{"_index":2324,"title":{},"body":{"classes/SelectionManager.html":{}}}],["removeeventlistener('mousemove",{"_index":2323,"title":{},"body":{"classes/SelectionManager.html":{}}}],["removeeventlistener('touchstart",{"_index":2325,"title":{},"body":{"classes/SelectionManager.html":{}}}],["removelabel",{"_index":1055,"title":{},"body":{"classes/DatGUIMenuUI.html":{},"classes/PhoenixMenuUI.html":{},"interfaces/PhoenixUI.html":{}}}],["removelabel').name('remove",{"_index":1286,"title":{},"body":{"classes/DatGUIMenuUI.html":{}}}],["removelabel(labelid",{"_index":1111,"title":{},"body":{"classes/DatGUIMenuUI.html":{},"classes/PhoenixMenuUI.html":{},"interfaces/PhoenixUI.html":{}}}],["removeobj",{"_index":1056,"title":{},"body":{"classes/DatGUIMenuUI.html":{}}}],["removeobj(object",{"_index":1114,"title":{},"body":{"classes/DatGUIMenuUI.html":{}}}],["removepass",{"_index":1306,"title":{},"body":{"classes/EffectsManager.html":{}}}],["removepass(pass",{"_index":1334,"title":{},"body":{"classes/EffectsManager.html":{}}}],["removing",{"_index":1107,"title":{},"body":{"classes/DatGUIMenuUI.html":{},"classes/PhoenixMenuUI.html":{},"interfaces/PhoenixUI.html":{},"changelog.html":{}}}],["render",{"_index":1302,"title":{},"body":{"classes/EffectsManager.html":{},"classes/RendererManager.html":{},"interfaces/Window.html":{},"changelog.html":{}}}],["render(scene",{"_index":2126,"title":{},"body":{"classes/RendererManager.html":{}}}],["rendered",{"_index":2135,"title":{},"body":{"classes/RendererManager.html":{}}}],["renderer",{"_index":29,"title":{},"body":{"classes/ARManager.html":{},"interfaces/AnimationPreset.html":{},"classes/EffectsManager.html":{},"classes/RendererManager.html":{},"classes/VRManager.html":{},"interfaces/Window.html":{},"classes/XRManager.html":{},"changelog.html":{}}}],["renderer.localclippingenabled",{"_index":2183,"title":{},"body":{"classes/RendererManager.html":{}}}],["renderera",{"_index":2142,"title":{},"body":{"classes/RendererManager.html":{}}}],["rendererb",{"_index":2139,"title":{},"body":{"classes/RendererManager.html":{}}}],["rendererelement",{"_index":2362,"title":{},"body":{"classes/SelectionManager.html":{}}}],["rendererelement.clientheight",{"_index":2369,"title":{},"body":{"classes/SelectionManager.html":{}}}],["rendererelement.clientwidth",{"_index":2366,"title":{},"body":{"classes/SelectionManager.html":{}}}],["rendererheight",{"_index":2165,"title":{},"body":{"classes/RendererManager.html":{}}}],["renderermanager",{"_index":250,"title":{"classes/RendererManager.html":{}},"body":{"interfaces/AnimationPreset.html":{},"classes/RendererManager.html":{},"coverage.html":{}}}],["renderers",{"_index":2085,"title":{},"body":{"classes/RendererManager.html":{}}}],["rendererwidth",{"_index":2162,"title":{},"body":{"classes/RendererManager.html":{}}}],["rendering",{"_index":1321,"title":{},"body":{"classes/EffectsManager.html":{},"classes/RendererManager.html":{},"changelog.html":{}}}],["renderpass",{"_index":1319,"title":{},"body":{"classes/EffectsManager.html":{}}}],["renderpass(this.scene",{"_index":1349,"title":{},"body":{"classes/EffectsManager.html":{}}}],["renders",{"_index":3019,"title":{},"body":{"interfaces/Window.html":{}}}],["repeating",{"_index":3389,"title":{},"body":{"changelog.html":{}}}],["repo",{"_index":3572,"title":{},"body":{"changelog.html":{}}}],["repository",{"_index":3823,"title":{},"body":{"properties.html":{}}}],["representation",{"_index":2793,"title":{},"body":{"classes/VRManager.html":{}}}],["representing",{"_index":632,"title":{},"body":{"classes/ColorManager.html":{},"interfaces/EventDataLoader.html":{},"interfaces/Window.html":{}}}],["represents",{"_index":1389,"title":{},"body":{"interfaces/EventDataLoader.html":{},"interfaces/Window.html":{}}}],["request",{"_index":3563,"title":{},"body":{"changelog.html":{}}}],["requesting",{"_index":106,"title":{},"body":{"classes/ARManager.html":{},"classes/VRManager.html":{},"classes/XRManager.html":{}}}],["requestsession(`immersive",{"_index":3142,"title":{},"body":{"classes/XRManager.html":{}}}],["required",{"_index":104,"title":{},"body":{"classes/ARManager.html":{},"classes/VRManager.html":{},"classes/XRManager.html":{},"index.html":{}}}],["res.json",{"_index":2707,"title":{},"body":{"classes/URLOptionsManager.html":{},"index.html":{}}}],["reset",{"_index":991,"title":{},"body":{"classes/Cut.html":{},"classes/LoadingManager.html":{},"classes/PhoenixMenuUI.html":{},"classes/RendererManager.html":{},"interfaces/Window.html":{},"changelog.html":{}}}],["reset/remove",{"_index":3119,"title":{},"body":{"interfaces/Window.html":{}}}],["resetcut",{"_index":1222,"title":{},"body":{"classes/DatGUIMenuUI.html":{}}}],["resetlabels",{"_index":3120,"title":{},"body":{"interfaces/Window.html":{}}}],["resize",{"_index":3579,"title":{},"body":{"changelog.html":{}}}],["resolution",{"_index":2562,"title":{},"body":{"classes/TracksMaterial.html":{},"classes/TracksMesh.html":{}}}],["resolution.y",{"_index":2566,"title":{},"body":{"classes/TracksMaterial.html":{},"classes/TracksMesh.html":{}}}],["resolve",{"_index":2224,"title":{},"body":{"classes/ScriptLoader.html":{}}}],["resources",{"_index":2887,"title":{},"body":{"interfaces/Window.html":{}}}],["responsible",{"_index":624,"title":{},"body":{"classes/ColorManager.html":{},"interfaces/Configuration.html":{},"interfaces/Window.html":{}}}],["restore",{"_index":436,"title":{},"body":{"interfaces/AnimationPreset.html":{},"classes/PhoenixMenuNode.html":{}}}],["restored",{"_index":1705,"title":{},"body":{"classes/PhoenixMenuNode.html":{}}}],["restoring",{"_index":376,"title":{},"body":{"interfaces/AnimationPreset.html":{}}}],["restructure",{"_index":3550,"title":{},"body":{"changelog.html":{}}}],["result",{"_index":1454,"title":{},"body":{"classes/ExportManager.html":{},"classes/Field.html":{},"classes/RungeKutta.html":{},"classes/State.html":{}}}],["results",{"_index":186,"title":{},"body":{"classes/ARManager.html":{},"classes/ActiveVariable.html":{},"interfaces/AnimationPreset.html":{},"classes/CMSObjects.html":{},"classes/ColorManager.html":{},"classes/ColorOptions.html":{},"interfaces/Configuration.html":{},"classes/CoordinateHelper.html":{},"classes/Cut.html":{},"classes/DatGUIMenuUI.html":{},"classes/EffectsManager.html":{},"interfaces/EventDataLoader.html":{},"classes/ExportManager.html":{},"classes/Field.html":{},"classes/InfoLogger.html":{},"classes/LoadingManager.html":{},"classes/PhoenixMenuNode.html":{},"classes/PhoenixMenuUI.html":{},"interfaces/PhoenixUI.html":{},"classes/PresetView.html":{},"classes/PrettySymbols.html":{},"classes/RKHelper.html":{},"classes/RendererManager.html":{},"classes/RungeKutta.html":{},"classes/ScriptLoader.html":{},"classes/SelectionManager.html":{},"classes/State.html":{},"classes/StateManager.html":{},"classes/TracksMaterial.html":{},"classes/TracksMesh.html":{},"classes/URLOptionsManager.html":{},"classes/VRManager.html":{},"interfaces/Window.html":{},"classes/XRManager.html":{},"changelog.html":{},"coverage.html":{},"dependencies.html":{},"miscellaneous/enumerations.html":{},"index.html":{},"modules.html":{},"overview.html":{},"properties.html":{},"miscellaneous/typealiases.html":{},"miscellaneous/variables.html":{}}}],["retrieved",{"_index":1402,"title":{},"body":{"interfaces/EventDataLoader.html":{},"interfaces/Window.html":{}}}],["return",{"_index":162,"title":{},"body":{"classes/ARManager.html":{},"interfaces/AnimationPreset.html":{},"classes/CMSObjects.html":{},"classes/ColorOptions.html":{},"classes/CoordinateHelper.html":{},"classes/Cut.html":{},"classes/DatGUIMenuUI.html":{},"classes/EffectsManager.html":{},"classes/ExportManager.html":{},"classes/Field.html":{},"classes/InfoLogger.html":{},"classes/LoadingManager.html":{},"classes/PhoenixMenuNode.html":{},"classes/PhoenixMenuUI.html":{},"classes/PresetView.html":{},"classes/PrettySymbols.html":{},"classes/RKHelper.html":{},"classes/RendererManager.html":{},"classes/RungeKutta.html":{},"classes/ScriptLoader.html":{},"classes/SelectionManager.html":{},"classes/State.html":{},"classes/StateManager.html":{},"classes/TracksMaterial.html":{},"classes/TracksMesh.html":{},"classes/URLOptionsManager.html":{},"interfaces/Window.html":{},"classes/XRManager.html":{},"changelog.html":{},"miscellaneous/variables.html":{}}}],["returns",{"_index":103,"title":{},"body":{"classes/ARManager.html":{},"classes/ActiveVariable.html":{},"interfaces/AnimationPreset.html":{},"classes/CMSObjects.html":{},"classes/ColorManager.html":{},"classes/ColorOptions.html":{},"classes/CoordinateHelper.html":{},"classes/Cut.html":{},"classes/DatGUIMenuUI.html":{},"classes/EffectsManager.html":{},"interfaces/EventDataLoader.html":{},"classes/ExportManager.html":{},"classes/Field.html":{},"classes/InfoLogger.html":{},"classes/LoadingManager.html":{},"classes/PhoenixMenuNode.html":{},"classes/PhoenixMenuUI.html":{},"interfaces/PhoenixUI.html":{},"classes/PresetView.html":{},"classes/PrettySymbols.html":{},"classes/RKHelper.html":{},"classes/RendererManager.html":{},"classes/RungeKutta.html":{},"classes/ScriptLoader.html":{},"classes/SelectionManager.html":{},"classes/State.html":{},"classes/StateManager.html":{},"classes/TracksMaterial.html":{},"classes/TracksMesh.html":{},"classes/URLOptionsManager.html":{},"classes/VRManager.html":{},"interfaces/Window.html":{},"classes/XRManager.html":{}}}],["returnvec",{"_index":1546,"title":{},"body":{"classes/Field.html":{},"classes/RungeKutta.html":{},"classes/State.html":{}}}],["reverse",{"_index":954,"title":{},"body":{"classes/CoordinateHelper.html":{}}}],["revert",{"_index":465,"title":{},"body":{"interfaces/AnimationPreset.html":{},"changelog.html":{}}}],["reverting",{"_index":2698,"title":{},"body":{"classes/URLOptionsManager.html":{}}}],["reverts",{"_index":3183,"title":{},"body":{"changelog.html":{}}}],["right",{"_index":589,"title":{},"body":{"classes/CMSObjects.html":{},"classes/DatGUIMenuUI.html":{},"changelog.html":{}}}],["rk",{"_index":3440,"title":{},"body":{"changelog.html":{}}}],["rkhelper",{"_index":2036,"title":{"classes/RKHelper.html":{}},"body":{"classes/RKHelper.html":{},"changelog.html":{},"coverage.html":{}}}],["rkhelper.extrapolatetrackpositions(track",{"_index":2067,"title":{},"body":{"classes/RKHelper.html":{}}}],["rkhelper.extrapolationlimit",{"_index":2045,"title":{},"body":{"classes/RKHelper.html":{}}}],["rkstate",{"_index":1585,"title":{},"body":{"classes/Field.html":{},"classes/RungeKutta.html":{},"classes/State.html":{}}}],["rkstate.dir",{"_index":1587,"title":{},"body":{"classes/Field.html":{},"classes/RungeKutta.html":{},"classes/State.html":{}}}],["rkstate.maxstepsize",{"_index":1590,"title":{},"body":{"classes/Field.html":{},"classes/RungeKutta.html":{},"classes/State.html":{}}}],["rkstate.p",{"_index":1588,"title":{},"body":{"classes/Field.html":{},"classes/RungeKutta.html":{},"classes/State.html":{}}}],["rkstate.pathlength",{"_index":1591,"title":{},"body":{"classes/Field.html":{},"classes/RungeKutta.html":{},"classes/State.html":{}}}],["rkstate.pos",{"_index":1586,"title":{},"body":{"classes/Field.html":{},"classes/RungeKutta.html":{},"classes/State.html":{}}}],["rkstate.q",{"_index":1589,"title":{},"body":{"classes/Field.html":{},"classes/RungeKutta.html":{},"classes/State.html":{}}}],["robustness",{"_index":3413,"title":{},"body":{"changelog.html":{}}}],["rollup",{"_index":3594,"title":{},"body":{"changelog.html":{}}}],["root",{"_index":166,"title":{},"body":{"classes/ARManager.html":{},"interfaces/Configuration.html":{},"classes/PhoenixMenuNode.html":{},"classes/PhoenixMenuUI.html":{},"classes/StateManager.html":{},"interfaces/Window.html":{},"changelog.html":{}}}],["rotate",{"_index":918,"title":{},"body":{"classes/CoordinateHelper.html":{},"classes/DatGUIMenuUI.html":{}}}],["rotate.chain(end",{"_index":311,"title":{},"body":{"interfaces/AnimationPreset.html":{}}}],["rotateopeningangleclipping",{"_index":2462,"title":{},"body":{"classes/StateManager.html":{}}}],["rotatestartangleclipping",{"_index":2460,"title":{},"body":{"classes/StateManager.html":{}}}],["rotationpositions",{"_index":307,"title":{},"body":{"interfaces/AnimationPreset.html":{}}}],["rotations",{"_index":931,"title":{},"body":{"classes/CoordinateHelper.html":{}}}],["routes",{"_index":3689,"title":{},"body":{"changelog.html":{}}}],["run",{"_index":1411,"title":{},"body":{"interfaces/EventDataLoader.html":{},"interfaces/Window.html":{},"changelog.html":{}}}],["run${this.eventmetadata.runnumber}_evt${this.eventmetadata.eventnumber}.json",{"_index":2444,"title":{},"body":{"classes/StateManager.html":{}}}],["runge",{"_index":1492,"title":{},"body":{"classes/Field.html":{},"classes/RKHelper.html":{},"classes/RungeKutta.html":{},"classes/State.html":{}}}],["rungekutta",{"_index":1494,"title":{"classes/RungeKutta.html":{}},"body":{"classes/Field.html":{},"classes/RKHelper.html":{},"classes/RungeKutta.html":{},"classes/State.html":{},"coverage.html":{}}}],["runnumber",{"_index":2411,"title":{},"body":{"classes/StateManager.html":{}}}],["same",{"_index":3645,"title":{},"body":{"changelog.html":{}}}],["sample",{"_index":3448,"title":{},"body":{"changelog.html":{}}}],["save",{"_index":1439,"title":{},"body":{"classes/ExportManager.html":{},"classes/PhoenixMenuNode.html":{},"classes/PhoenixMenuUI.html":{},"classes/StateManager.html":{},"changelog.html":{},"miscellaneous/variables.html":{}}}],["saved",{"_index":1433,"title":{},"body":{"classes/ExportManager.html":{},"interfaces/Window.html":{}}}],["saveeventdataconfiguration",{"_index":1424,"title":{},"body":{"classes/ExportManager.html":{}}}],["saveeventdataconfiguration(eventdata",{"_index":1437,"title":{},"body":{"classes/ExportManager.html":{}}}],["savefile",{"_index":1450,"title":{},"body":{"classes/ExportManager.html":{},"classes/StateManager.html":{},"coverage.html":{},"miscellaneous/variables.html":{}}}],["savefile(output",{"_index":1470,"title":{},"body":{"classes/ExportManager.html":{}}}],["savefile(result",{"_index":1456,"title":{},"body":{"classes/ExportManager.html":{}}}],["savegeometriesconfiguration",{"_index":1425,"title":{},"body":{"classes/ExportManager.html":{}}}],["savegeometriesconfiguration(geometries",{"_index":1440,"title":{},"body":{"classes/ExportManager.html":{}}}],["savelabels",{"_index":1256,"title":{},"body":{"classes/DatGUIMenuUI.html":{}}}],["saves",{"_index":2939,"title":{},"body":{"interfaces/Window.html":{}}}],["savesceneconfig",{"_index":1426,"title":{},"body":{"classes/ExportManager.html":{}}}],["savesceneconfig(eventdata",{"_index":1442,"title":{},"body":{"classes/ExportManager.html":{}}}],["savestateasjson",{"_index":2402,"title":{},"body":{"classes/StateManager.html":{}}}],["scale",{"_index":77,"title":{},"body":{"classes/ARManager.html":{},"interfaces/AnimationPreset.html":{},"classes/DatGUIMenuUI.html":{},"classes/PhoenixMenuUI.html":{},"interfaces/Window.html":{},"changelog.html":{}}}],["scalemenu",{"_index":1176,"title":{},"body":{"classes/DatGUIMenuUI.html":{}}}],["scalemenu.onchange((value",{"_index":1178,"title":{},"body":{"classes/DatGUIMenuUI.html":{}}}],["scalescene",{"_index":37,"title":{},"body":{"classes/ARManager.html":{}}}],["scalescene(scale",{"_index":116,"title":{},"body":{"classes/ARManager.html":{}}}],["scaletween",{"_index":367,"title":{},"body":{"interfaces/AnimationPreset.html":{}}}],["scaletween.onupdate((updatedscale",{"_index":373,"title":{},"body":{"interfaces/AnimationPreset.html":{}}}],["scaling",{"_index":364,"title":{},"body":{"interfaces/AnimationPreset.html":{},"changelog.html":{}}}],["scene",{"_index":44,"title":{},"body":{"classes/ARManager.html":{},"interfaces/AnimationPreset.html":{},"classes/ColorManager.html":{},"classes/DatGUIMenuUI.html":{},"classes/EffectsManager.html":{},"classes/ExportManager.html":{},"classes/PhoenixMenuUI.html":{},"interfaces/PhoenixUI.html":{},"classes/RendererManager.html":{},"classes/SelectionManager.html":{},"classes/StateManager.html":{},"classes/VRManager.html":{},"interfaces/Window.html":{},"classes/XRManager.html":{},"changelog.html":{}}}],["scene's",{"_index":2394,"title":{},"body":{"classes/StateManager.html":{}}}],["scene.background",{"_index":2158,"title":{},"body":{"classes/RendererManager.html":{}}}],["scene.getobjectbyname('vertices",{"_index":668,"title":{},"body":{"classes/ColorManager.html":{}}}],["scene.getobjectbyname(linkedtrackcollection",{"_index":677,"title":{},"body":{"classes/ColorManager.html":{}}}],["scene.phnx",{"_index":1471,"title":{},"body":{"classes/ExportManager.html":{}}}],["scene.scale.x",{"_index":158,"title":{},"body":{"classes/ARManager.html":{}}}],["scene/geometry",{"_index":3014,"title":{},"body":{"interfaces/Window.html":{}}}],["scenecolor",{"_index":2157,"title":{},"body":{"classes/RendererManager.html":{}}}],["sceneconfig",{"_index":1459,"title":{},"body":{"classes/ExportManager.html":{}}}],["sceneconfiguration",{"_index":1468,"title":{},"body":{"classes/ExportManager.html":{},"interfaces/Window.html":{}}}],["sceneconfiguration.eventdata[objecttype",{"_index":3060,"title":{},"body":{"interfaces/Window.html":{}}}],["sceneconfiguration.geometries",{"_index":3063,"title":{},"body":{"interfaces/Window.html":{}}}],["scenemanager",{"_index":137,"title":{},"body":{"classes/ARManager.html":{},"interfaces/AnimationPreset.html":{},"classes/ColorManager.html":{},"classes/DatGUIMenuUI.html":{},"classes/PhoenixMenuUI.html":{},"coverage.html":{}}}],["scenemanager.event_data_id",{"_index":181,"title":{},"body":{"classes/ARManager.html":{},"classes/DatGUIMenuUI.html":{},"classes/PhoenixMenuUI.html":{}}}],["scenemanager.geometries_id",{"_index":182,"title":{},"body":{"classes/ARManager.html":{}}}],["scenemanager.labels_id",{"_index":183,"title":{},"body":{"classes/ARManager.html":{},"classes/PhoenixMenuUI.html":{}}}],["scenescale",{"_index":70,"title":{},"body":{"classes/ARManager.html":{}}}],["sceneurl",{"_index":3078,"title":{},"body":{"interfaces/Window.html":{}}}],["screen",{"_index":2914,"title":{},"body":{"interfaces/Window.html":{}}}],["screenshot",{"_index":3661,"title":{},"body":{"changelog.html":{}}}],["script",{"_index":2192,"title":{},"body":{"classes/ScriptLoader.html":{},"changelog.html":{},"index.html":{}}}],["script[src",{"_index":2215,"title":{},"body":{"classes/ScriptLoader.html":{}}}],["scriptelement",{"_index":2217,"title":{},"body":{"classes/ScriptLoader.html":{}}}],["scriptelement.addeventlistener('load",{"_index":2223,"title":{},"body":{"classes/ScriptLoader.html":{}}}],["scriptelement.onerror",{"_index":2226,"title":{},"body":{"classes/ScriptLoader.html":{}}}],["scriptelement.setattribute('data",{"_index":2222,"title":{},"body":{"classes/ScriptLoader.html":{}}}],["scriptelement.src",{"_index":2221,"title":{},"body":{"classes/ScriptLoader.html":{}}}],["scriptelement.type",{"_index":2219,"title":{},"body":{"classes/ScriptLoader.html":{}}}],["scriptexists",{"_index":2213,"title":{},"body":{"classes/ScriptLoader.html":{}}}],["scriptexists.length",{"_index":2216,"title":{},"body":{"classes/ScriptLoader.html":{}}}],["scriptexists[0].addeventlistener('load",{"_index":2231,"title":{},"body":{"classes/ScriptLoader.html":{}}}],["scriptexists[0].dataset.loaded",{"_index":2230,"title":{},"body":{"classes/ScriptLoader.html":{}}}],["scriptfor",{"_index":2198,"title":{},"body":{"classes/ScriptLoader.html":{}}}],["scriptloader",{"_index":2190,"title":{"classes/ScriptLoader.html":{}},"body":{"classes/ScriptLoader.html":{},"coverage.html":{}}}],["scripts",{"_index":2195,"title":{},"body":{"classes/ScriptLoader.html":{},"changelog.html":{}}}],["scripturl",{"_index":2204,"title":{},"body":{"classes/ScriptLoader.html":{}}}],["search",{"_index":2645,"title":{},"body":{"classes/URLOptionsManager.html":{}}}],["second",{"_index":1525,"title":{},"body":{"classes/Field.html":{},"classes/RungeKutta.html":{},"classes/State.html":{}}}],["secondary",{"_index":2106,"title":{},"body":{"classes/RendererManager.html":{}}}],["see",{"_index":939,"title":{},"body":{"classes/CoordinateHelper.html":{},"interfaces/Window.html":{},"changelog.html":{}}}],["select",{"_index":2794,"title":{},"body":{"classes/VRManager.html":{},"miscellaneous/typealiases.html":{}}}],["selected",{"_index":745,"title":{},"body":{"classes/ColorOptions.html":{},"classes/SelectionManager.html":{},"interfaces/Window.html":{},"changelog.html":{}}}],["selectedcolorbyoption",{"_index":690,"title":{},"body":{"classes/ColorOptions.html":{}}}],["selectedobject",{"_index":2242,"title":{},"body":{"classes/SelectionManager.html":{},"interfaces/Window.html":{}}}],["selectend",{"_index":2822,"title":{},"body":{"classes/VRManager.html":{}}}],["selecting",{"_index":2271,"title":{},"body":{"classes/SelectionManager.html":{},"interfaces/Window.html":{}}}],["selection",{"_index":2234,"title":{},"body":{"classes/SelectionManager.html":{},"changelog.html":{}}}],["selectionmanager",{"_index":2232,"title":{"classes/SelectionManager.html":{}},"body":{"classes/SelectionManager.html":{},"coverage.html":{}}}],["selectstart",{"_index":2820,"title":{},"body":{"classes/VRManager.html":{}}}],["separate",{"_index":3552,"title":{},"body":{"changelog.html":{}}}],["separated",{"_index":757,"title":{},"body":{"classes/ColorOptions.html":{}}}],["separator",{"_index":2971,"title":{},"body":{"interfaces/Window.html":{}}}],["service",{"_index":1610,"title":{},"body":{"classes/InfoLogger.html":{},"classes/SelectionManager.html":{},"index.html":{}}}],["session",{"_index":83,"title":{},"body":{"classes/ARManager.html":{},"classes/VRManager.html":{},"interfaces/Window.html":{},"classes/XRManager.html":{},"changelog.html":{},"miscellaneous/enumerations.html":{}}}],["session.addeventlistener('end",{"_index":3147,"title":{},"body":{"classes/XRManager.html":{}}}],["session_type",{"_index":23,"title":{},"body":{"classes/ARManager.html":{},"classes/VRManager.html":{}}}],["sessioninit",{"_index":30,"title":{},"body":{"classes/ARManager.html":{},"classes/VRManager.html":{},"classes/XRManager.html":{}}}],["sessiontype",{"_index":3128,"title":{},"body":{"classes/XRManager.html":{}}}],["set",{"_index":101,"title":{},"body":{"classes/ARManager.html":{},"interfaces/AnimationPreset.html":{},"classes/ColorManager.html":{},"classes/DatGUIMenuUI.html":{},"classes/EffectsManager.html":{},"classes/PhoenixMenuNode.html":{},"classes/PhoenixMenuUI.html":{},"interfaces/PhoenixUI.html":{},"classes/PresetView.html":{},"classes/RendererManager.html":{},"classes/SelectionManager.html":{},"classes/StateManager.html":{},"classes/TracksMaterial.html":{},"classes/TracksMesh.html":{},"classes/URLOptionsManager.html":{},"classes/VRManager.html":{},"interfaces/Window.html":{},"classes/XRManager.html":{},"changelog.html":{},"miscellaneous/variables.html":{}}}],["set/get",{"_index":2173,"title":{},"body":{"classes/RendererManager.html":{}}}],["setantialiasing",{"_index":1307,"title":{},"body":{"classes/EffectsManager.html":{}}}],["setantialiasing(antialias",{"_index":1336,"title":{},"body":{"classes/EffectsManager.html":{}}}],["setcamera",{"_index":2403,"title":{},"body":{"classes/StateManager.html":{}}}],["setcamera(camera",{"_index":2419,"title":{},"body":{"classes/StateManager.html":{}}}],["setclippingenabled",{"_index":2404,"title":{},"body":{"classes/StateManager.html":{}}}],["setclippingenabled(clipping",{"_index":2420,"title":{},"body":{"classes/StateManager.html":{}}}],["setenablemax",{"_index":1922,"title":{},"body":{"classes/PhoenixMenuUI.html":{}}}],["setenablemin",{"_index":1919,"title":{},"body":{"classes/PhoenixMenuUI.html":{}}}],["seteventdisplay",{"_index":2405,"title":{},"body":{"classes/StateManager.html":{}}}],["seteventdisplay(eventdisplay",{"_index":2422,"title":{},"body":{"classes/StateManager.html":{}}}],["setfixoverlay",{"_index":2096,"title":{},"body":{"classes/RendererManager.html":{}}}],["setfixoverlay(value",{"_index":2127,"title":{},"body":{"classes/RendererManager.html":{}}}],["setflat",{"_index":2978,"title":{},"body":{"interfaces/Window.html":{}}}],["setinterval",{"_index":2856,"title":{},"body":{"classes/VRManager.html":{}}}],["setlocalclippingenabled",{"_index":2097,"title":{},"body":{"classes/RendererManager.html":{}}}],["setlocalclippingenabled(value",{"_index":2129,"title":{},"body":{"classes/RendererManager.html":{}}}],["setmainrenderer",{"_index":2098,"title":{},"body":{"classes/RendererManager.html":{}}}],["setmainrenderer(renderer",{"_index":2131,"title":{},"body":{"classes/RendererManager.html":{}}}],["setopeningclippingangle",{"_index":2406,"title":{},"body":{"classes/StateManager.html":{}}}],["setopeningclippingangle(angle",{"_index":2424,"title":{},"body":{"classes/StateManager.html":{}}}],["setoverlayrenderer",{"_index":2099,"title":{},"body":{"classes/RendererManager.html":{}}}],["setoverlayrenderer(overlaycanvas",{"_index":2132,"title":{},"body":{"classes/RendererManager.html":{},"interfaces/Window.html":{}}}],["setphoenixmenuroot",{"_index":2407,"title":{},"body":{"classes/StateManager.html":{}}}],["setphoenixmenuroot(phoenixmenuroot",{"_index":2426,"title":{},"body":{"classes/StateManager.html":{}}}],["setrenderers",{"_index":2100,"title":{},"body":{"classes/RendererManager.html":{}}}],["setrenderers(renderers",{"_index":2136,"title":{},"body":{"classes/RendererManager.html":{}}}],["sets",{"_index":3085,"title":{},"body":{"interfaces/Window.html":{}}}],["setselectedobject",{"_index":2248,"title":{},"body":{"classes/SelectionManager.html":{}}}],["setselectedobject(selectedobject",{"_index":2287,"title":{},"body":{"classes/SelectionManager.html":{}}}],["setselecting",{"_index":2249,"title":{},"body":{"classes/SelectionManager.html":{}}}],["setselecting(enable",{"_index":2289,"title":{},"body":{"classes/SelectionManager.html":{}}}],["setstartclippingangle",{"_index":2408,"title":{},"body":{"classes/StateManager.html":{}}}],["setstartclippingangle(angle",{"_index":2428,"title":{},"body":{"classes/StateManager.html":{}}}],["settimeout",{"_index":529,"title":{},"body":{"interfaces/AnimationPreset.html":{}}}],["setting",{"_index":2120,"title":{},"body":{"classes/RendererManager.html":{}}}],["settings",{"_index":2871,"title":{},"body":{"interfaces/Window.html":{},"miscellaneous/enumerations.html":{}}}],["settolocalstorage",{"_index":3721,"title":{},"body":{"coverage.html":{},"miscellaneous/variables.html":{}}}],["setup",{"_index":3402,"title":{},"body":{"changelog.html":{}}}],["setupvrcontrols",{"_index":2789,"title":{},"body":{"classes/VRManager.html":{}}}],["setxrsession",{"_index":41,"title":{},"body":{"classes/ARManager.html":{},"classes/VRManager.html":{},"classes/XRManager.html":{}}}],["setxrsession(renderer",{"_index":130,"title":{},"body":{"classes/ARManager.html":{},"classes/VRManager.html":{},"classes/XRManager.html":{}}}],["shade",{"_index":3652,"title":{},"body":{"changelog.html":{}}}],["shaded",{"_index":2979,"title":{},"body":{"interfaces/Window.html":{}}}],["shader",{"_index":2550,"title":{},"body":{"classes/TracksMaterial.html":{},"classes/TracksMesh.html":{}}}],["shaderchunk",{"_index":2475,"title":{},"body":{"classes/TracksMaterial.html":{},"classes/TracksMesh.html":{}}}],["shaderchunk.tracks_frag",{"_index":2609,"title":{},"body":{"classes/TracksMaterial.html":{},"classes/TracksMesh.html":{}}}],["shaderchunk.tracks_vert",{"_index":2607,"title":{},"body":{"classes/TracksMaterial.html":{},"classes/TracksMesh.html":{}}}],["shaderchunk['tracks_frag",{"_index":2600,"title":{},"body":{"classes/TracksMaterial.html":{},"classes/TracksMesh.html":{}}}],["shaderchunk['tracks_vert",{"_index":2551,"title":{},"body":{"classes/TracksMaterial.html":{},"classes/TracksMesh.html":{}}}],["shadermaterial",{"_index":2470,"title":{},"body":{"classes/TracksMaterial.html":{},"classes/TracksMesh.html":{}}}],["shadre",{"_index":2599,"title":{},"body":{"classes/TracksMaterial.html":{},"classes/TracksMesh.html":{}}}],["sharable",{"_index":3442,"title":{},"body":{"changelog.html":{}}}],["share",{"_index":3514,"title":{},"body":{"changelog.html":{}}}],["shot",{"_index":2915,"title":{},"body":{"interfaces/Window.html":{}}}],["shouldcolorbycharge",{"_index":700,"title":{},"body":{"classes/ColorOptions.html":{}}}],["shouldcolorbycharge(objectparams",{"_index":769,"title":{},"body":{"classes/ColorOptions.html":{}}}],["show",{"_index":513,"title":{},"body":{"interfaces/AnimationPreset.html":{},"classes/ColorOptions.html":{},"classes/DatGUIMenuUI.html":{},"interfaces/Window.html":{},"changelog.html":{}}}],["show/hide",{"_index":1083,"title":{},"body":{"classes/DatGUIMenuUI.html":{},"classes/PhoenixMenuUI.html":{},"interfaces/PhoenixUI.html":{}}}],["showgeometriesmenu",{"_index":1139,"title":{},"body":{"classes/DatGUIMenuUI.html":{}}}],["showgeometriesmenu.onchange((value",{"_index":1143,"title":{},"body":{"classes/DatGUIMenuUI.html":{}}}],["showing",{"_index":1395,"title":{},"body":{"interfaces/EventDataLoader.html":{}}}],["showing/hiding",{"_index":1138,"title":{},"body":{"classes/DatGUIMenuUI.html":{}}}],["showmenu",{"_index":1173,"title":{},"body":{"classes/DatGUIMenuUI.html":{}}}],["showmenu.onchange((value",{"_index":1174,"title":{},"body":{"classes/DatGUIMenuUI.html":{}}}],["showmenu.onchange(ontoggle",{"_index":1259,"title":{},"body":{"classes/DatGUIMenuUI.html":{}}}],["shown",{"_index":1601,"title":{},"body":{"classes/InfoLogger.html":{}}}],["shows",{"_index":65,"title":{},"body":{"classes/ARManager.html":{}}}],["si",{"_index":1502,"title":{},"body":{"classes/Field.html":{},"classes/RungeKutta.html":{},"classes/State.html":{}}}],["side",{"_index":598,"title":{},"body":{"classes/CMSObjects.html":{},"classes/TracksMaterial.html":{},"classes/TracksMesh.html":{},"interfaces/Window.html":{},"changelog.html":{}}}],["sides",{"_index":2975,"title":{},"body":{"interfaces/Window.html":{}}}],["simple",{"_index":3209,"title":{},"body":{"changelog.html":{},"index.html":{}}}],["simplify",{"_index":3309,"title":{},"body":{"changelog.html":{}}}],["single",{"_index":524,"title":{},"body":{"interfaces/AnimationPreset.html":{},"classes/ColorOptions.html":{},"classes/PhoenixMenuNode.html":{},"classes/VRManager.html":{},"miscellaneous/typealiases.html":{}}}],["singlelabelnode",{"_index":1938,"title":{},"body":{"classes/PhoenixMenuUI.html":{}}}],["singlelabelnode.name",{"_index":1939,"title":{},"body":{"classes/PhoenixMenuUI.html":{}}}],["singleton",{"_index":1629,"title":{},"body":{"classes/LoadingManager.html":{},"classes/StateManager.html":{}}}],["size",{"_index":476,"title":{},"body":{"interfaces/AnimationPreset.html":{},"classes/Cut.html":{},"classes/DatGUIMenuUI.html":{},"classes/Field.html":{},"classes/PhoenixMenuUI.html":{},"classes/RungeKutta.html":{},"classes/State.html":{},"changelog.html":{}}}],["slider",{"_index":998,"title":{},"body":{"classes/Cut.html":{},"classes/DatGUIMenuUI.html":{},"classes/PhoenixMenuNode.html":{},"changelog.html":{},"miscellaneous/typealiases.html":{}}}],["sliders",{"_index":1911,"title":{},"body":{"classes/PhoenixMenuUI.html":{},"changelog.html":{}}}],["slidervalue",{"_index":834,"title":{},"body":{"classes/ColorOptions.html":{}}}],["smaller",{"_index":3049,"title":{},"body":{"interfaces/Window.html":{}}}],["source",{"_index":4,"title":{},"body":{"classes/ARManager.html":{},"classes/ActiveVariable.html":{},"interfaces/AnimationPreset.html":{},"classes/CMSObjects.html":{},"classes/ColorManager.html":{},"classes/ColorOptions.html":{},"interfaces/Configuration.html":{},"classes/CoordinateHelper.html":{},"classes/Cut.html":{},"classes/DatGUIMenuUI.html":{},"classes/EffectsManager.html":{},"interfaces/EventDataLoader.html":{},"classes/ExportManager.html":{},"classes/Field.html":{},"classes/InfoLogger.html":{},"classes/LoadingManager.html":{},"classes/PhoenixMenuNode.html":{},"classes/PhoenixMenuUI.html":{},"interfaces/PhoenixUI.html":{},"classes/PresetView.html":{},"classes/PrettySymbols.html":{},"classes/RKHelper.html":{},"classes/RendererManager.html":{},"classes/RungeKutta.html":{},"classes/ScriptLoader.html":{},"classes/SelectionManager.html":{},"classes/State.html":{},"classes/StateManager.html":{},"classes/TracksMaterial.html":{},"classes/TracksMesh.html":{},"classes/URLOptionsManager.html":{},"classes/VRManager.html":{},"interfaces/Window.html":{},"classes/XRManager.html":{},"changelog.html":{},"index.html":{}}}],["space",{"_index":1575,"title":{},"body":{"classes/Field.html":{},"classes/RungeKutta.html":{},"classes/State.html":{}}}],["spec",{"_index":3630,"title":{},"body":{"changelog.html":{}}}],["specific",{"_index":1903,"title":{},"body":{"classes/PhoenixMenuUI.html":{},"interfaces/Window.html":{}}}],["specified",{"_index":1955,"title":{},"body":{"classes/PresetView.html":{},"classes/URLOptionsManager.html":{},"interfaces/Window.html":{}}}],["specifying",{"_index":976,"title":{},"body":{"classes/Cut.html":{},"interfaces/Window.html":{}}}],["sphere",{"_index":246,"title":{},"body":{"interfaces/AnimationPreset.html":{}}}],["sphere(new",{"_index":328,"title":{},"body":{"interfaces/AnimationPreset.html":{}}}],["sphere.attributes.position",{"_index":454,"title":{},"body":{"interfaces/AnimationPreset.html":{}}}],["spheregeometry",{"_index":245,"title":{},"body":{"interfaces/AnimationPreset.html":{}}}],["spheregeometry(1",{"_index":450,"title":{},"body":{"interfaces/AnimationPreset.html":{}}}],["spheregeometry(particlesize",{"_index":484,"title":{},"body":{"interfaces/AnimationPreset.html":{}}}],["spherical",{"_index":449,"title":{},"body":{"interfaces/AnimationPreset.html":{},"classes/CoordinateHelper.html":{}}}],["sphericaltocartesian",{"_index":904,"title":{},"body":{"classes/CoordinateHelper.html":{},"changelog.html":{}}}],["sphericaltocartesian(radius",{"_index":944,"title":{},"body":{"classes/CoordinateHelper.html":{}}}],["split",{"_index":3555,"title":{},"body":{"changelog.html":{}}}],["splitting",{"_index":3557,"title":{},"body":{"changelog.html":{}}}],["src/.../active",{"_index":3830,"title":{},"body":{"miscellaneous/typealiases.html":{}}}],["src/.../browser",{"_index":3847,"title":{},"body":{"miscellaneous/variables.html":{}}}],["src/.../color",{"_index":3785,"title":{},"body":{"miscellaneous/enumerations.html":{},"miscellaneous/typealiases.html":{}}}],["src/.../config",{"_index":3832,"title":{},"body":{"miscellaneous/typealiases.html":{}}}],["src/.../constants.ts",{"_index":3846,"title":{},"body":{"miscellaneous/variables.html":{}}}],["src/.../file.ts",{"_index":3849,"title":{},"body":{"miscellaneous/variables.html":{}}}],["src/.../geometry",{"_index":3841,"title":{},"body":{"miscellaneous/typealiases.html":{}}}],["src/.../index.ts",{"_index":3845,"title":{},"body":{"miscellaneous/variables.html":{}}}],["src/.../labels.ts",{"_index":3848,"title":{},"body":{"miscellaneous/variables.html":{}}}],["src/.../preset",{"_index":3784,"title":{},"body":{"miscellaneous/enumerations.html":{}}}],["src/.../url",{"_index":3850,"title":{},"body":{"miscellaneous/variables.html":{}}}],["src/.../xr",{"_index":3786,"title":{},"body":{"miscellaneous/enumerations.html":{}}}],["src/.../zip.ts",{"_index":3851,"title":{},"body":{"miscellaneous/variables.html":{}}}],["src/event",{"_index":2867,"title":{},"body":{"interfaces/Window.html":{},"coverage.html":{}}}],["src/helpers/active",{"_index":189,"title":{},"body":{"classes/ActiveVariable.html":{},"coverage.html":{},"miscellaneous/typealiases.html":{}}}],["src/helpers/browser",{"_index":3717,"title":{},"body":{"coverage.html":{},"miscellaneous/variables.html":{}}}],["src/helpers/constants.ts",{"_index":3722,"title":{},"body":{"coverage.html":{},"miscellaneous/variables.html":{}}}],["src/helpers/coordinate",{"_index":895,"title":{},"body":{"classes/CoordinateHelper.html":{},"coverage.html":{}}}],["src/helpers/file.ts",{"_index":3724,"title":{},"body":{"coverage.html":{},"miscellaneous/variables.html":{}}}],["src/helpers/info",{"_index":1592,"title":{},"body":{"classes/InfoLogger.html":{},"coverage.html":{}}}],["src/helpers/labels.ts",{"_index":3726,"title":{},"body":{"coverage.html":{},"miscellaneous/variables.html":{}}}],["src/helpers/pretty",{"_index":1985,"title":{},"body":{"classes/PrettySymbols.html":{},"coverage.html":{}}}],["src/helpers/rk",{"_index":2037,"title":{},"body":{"classes/RKHelper.html":{},"coverage.html":{}}}],["src/helpers/runge",{"_index":1485,"title":{},"body":{"classes/Field.html":{},"classes/RungeKutta.html":{},"classes/State.html":{},"coverage.html":{}}}],["src/helpers/zip.ts",{"_index":3730,"title":{},"body":{"coverage.html":{},"miscellaneous/variables.html":{}}}],["src/lib/models/cut.model.ts",{"_index":975,"title":{},"body":{"classes/Cut.html":{},"coverage.html":{}}}],["src/lib/models/cut.model.ts:10",{"_index":1002,"title":{},"body":{"classes/Cut.html":{}}}],["src/lib/models/cut.model.ts:12",{"_index":993,"title":{},"body":{"classes/Cut.html":{}}}],["src/lib/models/cut.model.ts:24",{"_index":1008,"title":{},"body":{"classes/Cut.html":{}}}],["src/lib/models/cut.model.ts:25",{"_index":1012,"title":{},"body":{"classes/Cut.html":{}}}],["src/lib/models/cut.model.ts:26",{"_index":1010,"title":{},"body":{"classes/Cut.html":{}}}],["src/lib/models/cut.model.ts:27",{"_index":1013,"title":{},"body":{"classes/Cut.html":{}}}],["src/lib/models/cut.model.ts:28",{"_index":1011,"title":{},"body":{"classes/Cut.html":{}}}],["src/lib/models/cut.model.ts:29",{"_index":1009,"title":{},"body":{"classes/Cut.html":{}}}],["src/lib/models/cut.model.ts:38",{"_index":1018,"title":{},"body":{"classes/Cut.html":{}}}],["src/lib/models/cut.model.ts:43",{"_index":1021,"title":{},"body":{"classes/Cut.html":{}}}],["src/lib/models/cut.model.ts:48",{"_index":1015,"title":{},"body":{"classes/Cut.html":{}}}],["src/lib/models/cut.model.ts:58",{"_index":1022,"title":{},"body":{"classes/Cut.html":{}}}],["src/lib/models/cut.model.ts:6",{"_index":1007,"title":{},"body":{"classes/Cut.html":{}}}],["src/lib/models/cut.model.ts:8",{"_index":1006,"title":{},"body":{"classes/Cut.html":{}}}],["src/lib/models/preset",{"_index":1951,"title":{},"body":{"classes/PresetView.html":{},"coverage.html":{},"miscellaneous/enumerations.html":{}}}],["src/lib/types/configuration.ts",{"_index":853,"title":{},"body":{"interfaces/Configuration.html":{},"coverage.html":{}}}],["src/lib/types/geometry",{"_index":3844,"title":{},"body":{"miscellaneous/typealiases.html":{}}}],["src/loaders/cms",{"_index":3734,"title":{},"body":{"coverage.html":{}}}],["src/loaders/edm4hep",{"_index":3736,"title":{},"body":{"coverage.html":{}}}],["src/loaders/event",{"_index":1369,"title":{},"body":{"interfaces/EventDataLoader.html":{},"coverage.html":{}}}],["src/loaders/jivexml",{"_index":3740,"title":{},"body":{"coverage.html":{}}}],["src/loaders/jsroot",{"_index":3742,"title":{},"body":{"coverage.html":{}}}],["src/loaders/objects/cms",{"_index":544,"title":{},"body":{"classes/CMSObjects.html":{},"coverage.html":{}}}],["src/loaders/objects/phoenix",{"_index":3744,"title":{},"body":{"coverage.html":{}}}],["src/loaders/objects/tracks.ts",{"_index":2469,"title":{},"body":{"classes/TracksMaterial.html":{},"classes/TracksMesh.html":{},"coverage.html":{}}}],["src/loaders/objects/tracks.ts:102",{"_index":2630,"title":{},"body":{"classes/TracksMesh.html":{}}}],["src/loaders/objects/tracks.ts:17",{"_index":2624,"title":{},"body":{"classes/TracksMesh.html":{}}}],["src/loaders/objects/tracks.ts:19",{"_index":2625,"title":{},"body":{"classes/TracksMesh.html":{}}}],["src/loaders/objects/tracks.ts:21",{"_index":2626,"title":{},"body":{"classes/TracksMesh.html":{}}}],["src/loaders/objects/tracks.ts:23",{"_index":2623,"title":{},"body":{"classes/TracksMesh.html":{}}}],["src/loaders/objects/tracks.ts:230",{"_index":2473,"title":{},"body":{"classes/TracksMaterial.html":{}}}],["src/loaders/objects/tracks.ts:25",{"_index":2620,"title":{},"body":{"classes/TracksMesh.html":{}}}],["src/loaders/objects/tracks.ts:27",{"_index":2621,"title":{},"body":{"classes/TracksMesh.html":{}}}],["src/loaders/objects/tracks.ts:29",{"_index":2628,"title":{},"body":{"classes/TracksMesh.html":{}}}],["src/loaders/objects/tracks.ts:31",{"_index":2627,"title":{},"body":{"classes/TracksMesh.html":{}}}],["src/loaders/objects/tracks.ts:33",{"_index":2622,"title":{},"body":{"classes/TracksMesh.html":{}}}],["src/loaders/objects/tracks.ts:35",{"_index":2619,"title":{},"body":{"classes/TracksMesh.html":{}}}],["src/loaders/objects/tracks.ts:60",{"_index":2629,"title":{},"body":{"classes/TracksMesh.html":{}}}],["src/loaders/phoenix",{"_index":3747,"title":{},"body":{"coverage.html":{}}}],["src/loaders/script",{"_index":2191,"title":{},"body":{"classes/ScriptLoader.html":{},"coverage.html":{}}}],["src/loaders/trackml",{"_index":3749,"title":{},"body":{"coverage.html":{}}}],["src/managers/loading",{"_index":1617,"title":{},"body":{"classes/LoadingManager.html":{},"coverage.html":{}}}],["src/managers/state",{"_index":2393,"title":{},"body":{"classes/StateManager.html":{},"coverage.html":{}}}],["src/managers/three",{"_index":6,"title":{},"body":{"classes/ARManager.html":{},"interfaces/AnimationPreset.html":{},"classes/ColorManager.html":{},"classes/EffectsManager.html":{},"classes/ExportManager.html":{},"classes/RendererManager.html":{},"classes/SelectionManager.html":{},"classes/VRManager.html":{},"classes/XRManager.html":{},"coverage.html":{},"miscellaneous/enumerations.html":{}}}],["src/managers/ui",{"_index":682,"title":{},"body":{"classes/ColorOptions.html":{},"classes/DatGUIMenuUI.html":{},"classes/PhoenixMenuNode.html":{},"classes/PhoenixMenuUI.html":{},"interfaces/PhoenixUI.html":{},"coverage.html":{},"miscellaneous/enumerations.html":{},"miscellaneous/typealiases.html":{},"miscellaneous/variables.html":{}}}],["src/managers/url",{"_index":2632,"title":{},"body":{"classes/URLOptionsManager.html":{},"coverage.html":{},"miscellaneous/variables.html":{}}}],["standalone",{"_index":3804,"title":{},"body":{"index.html":{}}}],["start",{"_index":229,"title":{},"body":{"interfaces/AnimationPreset.html":{},"classes/PresetView.html":{},"classes/StateManager.html":{},"classes/VRManager.html":{},"interfaces/Window.html":{},"changelog.html":{}}}],["start.chain(startxaxis",{"_index":309,"title":{},"body":{"interfaces/AnimationPreset.html":{}}}],["start.start",{"_index":313,"title":{},"body":{"interfaces/AnimationPreset.html":{}}}],["startangle",{"_index":2452,"title":{},"body":{"classes/StateManager.html":{}}}],["startclippingangle",{"_index":2398,"title":{},"body":{"classes/StateManager.html":{}}}],["startclone.delay(500",{"_index":308,"title":{},"body":{"interfaces/AnimationPreset.html":{}}}],["startdir",{"_index":1576,"title":{},"body":{"classes/Field.html":{},"classes/RungeKutta.html":{},"classes/State.html":{}}}],["started",{"_index":115,"title":{"changelog.html":{},"index.html":{}},"body":{"classes/ARManager.html":{},"classes/VRManager.html":{},"classes/XRManager.html":{}}}],["starting",{"_index":1351,"title":{},"body":{"classes/EffectsManager.html":{},"classes/Field.html":{},"classes/RungeKutta.html":{},"classes/State.html":{},"classes/StateManager.html":{}}}],["startpos",{"_index":283,"title":{},"body":{"interfaces/AnimationPreset.html":{},"classes/Field.html":{},"classes/RungeKutta.html":{},"classes/State.html":{},"interfaces/Window.html":{}}}],["startpos[2",{"_index":296,"title":{},"body":{"interfaces/AnimationPreset.html":{}}}],["starts",{"_index":134,"title":{},"body":{"classes/ARManager.html":{},"interfaces/AnimationPreset.html":{},"classes/PhoenixMenuUI.html":{},"classes/VRManager.html":{},"classes/XRManager.html":{}}}],["startxaxis",{"_index":297,"title":{},"body":{"interfaces/AnimationPreset.html":{}}}],["startxaxis.chain(rotatestart",{"_index":310,"title":{},"body":{"interfaces/AnimationPreset.html":{}}}],["state",{"_index":1495,"title":{"classes/State.html":{}},"body":{"classes/Field.html":{},"classes/PhoenixMenuNode.html":{},"classes/PhoenixMenuUI.html":{},"classes/RungeKutta.html":{},"classes/State.html":{},"classes/StateManager.html":{},"classes/URLOptionsManager.html":{},"interfaces/Window.html":{},"changelog.html":{},"coverage.html":{}}}],["state.dir",{"_index":1527,"title":{},"body":{"classes/Field.html":{},"classes/RungeKutta.html":{},"classes/State.html":{}}}],["state.dir.add",{"_index":1567,"title":{},"body":{"classes/Field.html":{},"classes/RungeKutta.html":{},"classes/State.html":{}}}],["state.dir.clone().cross(b_first).multiplyscalar(qop",{"_index":1521,"title":{},"body":{"classes/Field.html":{},"classes/RungeKutta.html":{},"classes/State.html":{}}}],["state.dir.cross(b_first",{"_index":1519,"title":{},"body":{"classes/Field.html":{},"classes/RungeKutta.html":{},"classes/State.html":{}}}],["state.dir.normalize",{"_index":1572,"title":{},"body":{"classes/Field.html":{},"classes/RungeKutta.html":{},"classes/State.html":{}}}],["state.p",{"_index":1507,"title":{},"body":{"classes/Field.html":{},"classes/RungeKutta.html":{},"classes/State.html":{}}}],["state.pos",{"_index":1526,"title":{},"body":{"classes/Field.html":{},"classes/RungeKutta.html":{},"classes/State.html":{}}}],["state.pos.add(state.dir.clone().multiplyscalar(fh)).add",{"_index":1563,"title":{},"body":{"classes/Field.html":{},"classes/RungeKutta.html":{},"classes/State.html":{}}}],["state.q",{"_index":1505,"title":{},"body":{"classes/Field.html":{},"classes/RungeKutta.html":{},"classes/State.html":{}}}],["state.stepsize",{"_index":1558,"title":{},"body":{"classes/Field.html":{},"classes/RungeKutta.html":{},"classes/State.html":{}}}],["state.unitc",{"_index":1506,"title":{},"body":{"classes/Field.html":{},"classes/RungeKutta.html":{},"classes/State.html":{}}}],["statemanager",{"_index":2392,"title":{"classes/StateManager.html":{}},"body":{"classes/StateManager.html":{},"classes/URLOptionsManager.html":{},"interfaces/Window.html":{},"coverage.html":{}}}],["statemanager.instance",{"_index":2431,"title":{},"body":{"classes/StateManager.html":{}}}],["statemanager.loadstatefromjson(jsonstate",{"_index":2709,"title":{},"body":{"classes/URLOptionsManager.html":{}}}],["statements",{"_index":3713,"title":{},"body":{"coverage.html":{}}}],["static",{"_index":18,"title":{},"body":{"classes/ARManager.html":{},"classes/CMSObjects.html":{},"classes/CoordinateHelper.html":{},"classes/Field.html":{},"classes/LoadingManager.html":{},"classes/PrettySymbols.html":{},"classes/RKHelper.html":{},"classes/RungeKutta.html":{},"classes/ScriptLoader.html":{},"classes/State.html":{},"classes/StateManager.html":{},"classes/VRManager.html":{}}}],["stats",{"_index":2769,"title":{},"body":{"classes/URLOptionsManager.html":{},"dependencies.html":{}}}],["statselement",{"_index":2768,"title":{},"body":{"classes/URLOptionsManager.html":{}}}],["step",{"_index":306,"title":{},"body":{"interfaces/AnimationPreset.html":{},"classes/ColorOptions.html":{},"classes/Cut.html":{},"classes/Field.html":{},"classes/PhoenixMenuUI.html":{},"classes/RungeKutta.html":{},"classes/State.html":{},"classes/VRManager.html":{}}}],["step(state",{"_index":1498,"title":{},"body":{"classes/Field.html":{},"classes/RungeKutta.html":{},"classes/State.html":{}}}],["stepdistance",{"_index":2799,"title":{},"body":{"classes/VRManager.html":{}}}],["steps",{"_index":1574,"title":{},"body":{"classes/Field.html":{},"classes/RungeKutta.html":{},"classes/State.html":{}}}],["stepsize",{"_index":2380,"title":{},"body":{"classes/State.html":{}}}],["still",{"_index":146,"title":{},"body":{"classes/ARManager.html":{},"classes/VRManager.html":{},"classes/XRManager.html":{}}}],["stop",{"_index":2858,"title":{},"body":{"classes/VRManager.html":{},"changelog.html":{}}}],["storage",{"_index":3317,"title":{},"body":{"changelog.html":{},"miscellaneous/variables.html":{}}}],["storage.ts",{"_index":3718,"title":{},"body":{"coverage.html":{},"miscellaneous/variables.html":{}}}],["stored",{"_index":754,"title":{},"body":{"classes/ColorOptions.html":{},"interfaces/EventDataLoader.html":{},"interfaces/Window.html":{}}}],["storing",{"_index":2886,"title":{},"body":{"interfaces/Window.html":{}}}],["stretch",{"_index":2930,"title":{},"body":{"interfaces/Window.html":{}}}],["stretched",{"_index":2927,"title":{},"body":{"interfaces/Window.html":{}}}],["string",{"_index":80,"title":{},"body":{"classes/ARManager.html":{},"interfaces/AnimationPreset.html":{},"classes/CMSObjects.html":{},"classes/ColorManager.html":{},"classes/ColorOptions.html":{},"interfaces/Configuration.html":{},"classes/Cut.html":{},"classes/DatGUIMenuUI.html":{},"interfaces/EventDataLoader.html":{},"classes/InfoLogger.html":{},"classes/LoadingManager.html":{},"classes/PhoenixMenuNode.html":{},"classes/PhoenixMenuUI.html":{},"interfaces/PhoenixUI.html":{},"classes/PresetView.html":{},"classes/PrettySymbols.html":{},"classes/RendererManager.html":{},"classes/ScriptLoader.html":{},"classes/SelectionManager.html":{},"classes/StateManager.html":{},"classes/URLOptionsManager.html":{},"classes/VRManager.html":{},"interfaces/Window.html":{},"classes/XRManager.html":{},"miscellaneous/variables.html":{}}}],["strings",{"_index":1407,"title":{},"body":{"interfaces/EventDataLoader.html":{},"interfaces/Window.html":{}}}],["style.setproperty('display",{"_index":2773,"title":{},"body":{"classes/URLOptionsManager.html":{}}}],["styles",{"_index":3438,"title":{},"body":{"changelog.html":{}}}],["sub",{"_index":2973,"title":{},"body":{"interfaces/Window.html":{}}}],["subfolder",{"_index":1092,"title":{},"body":{"classes/DatGUIMenuUI.html":{},"classes/PhoenixMenuUI.html":{},"interfaces/PhoenixUI.html":{}}}],["super",{"_index":2484,"title":{},"body":{"classes/TracksMaterial.html":{},"classes/TracksMesh.html":{}}}],["super(xrsessiontype.ar",{"_index":156,"title":{},"body":{"classes/ARManager.html":{}}}],["super(xrsessiontype.vr",{"_index":2812,"title":{},"body":{"classes/VRManager.html":{}}}],["super.onxrsessionended",{"_index":180,"title":{},"body":{"classes/ARManager.html":{},"classes/VRManager.html":{}}}],["super.onxrsessionstarted(session",{"_index":177,"title":{},"body":{"classes/ARManager.html":{}}}],["super.setxrsession(renderer",{"_index":2817,"title":{},"body":{"classes/VRManager.html":{}}}],["support",{"_index":3528,"title":{},"body":{"changelog.html":{}}}],["sure",{"_index":3258,"title":{},"body":{"changelog.html":{}}}],["svg",{"_index":1984,"title":{},"body":{"classes/PresetView.html":{}}}],["swap",{"_index":2141,"title":{},"body":{"classes/RendererManager.html":{}}}],["swapped",{"_index":2143,"title":{},"body":{"classes/RendererManager.html":{}}}],["swaprenderers",{"_index":2101,"title":{},"body":{"classes/RendererManager.html":{}}}],["swaprenderers(renderera",{"_index":2138,"title":{},"body":{"classes/RendererManager.html":{}}}],["switch",{"_index":3541,"title":{},"body":{"changelog.html":{}}}],["switching",{"_index":882,"title":{},"body":{"interfaces/Configuration.html":{}}}],["symbol",{"_index":2003,"title":{},"body":{"classes/PrettySymbols.html":{}}}],["symbols",{"_index":776,"title":{},"body":{"classes/ColorOptions.html":{},"classes/PhoenixMenuUI.html":{},"classes/PrettySymbols.html":{},"classes/SelectionManager.html":{}}}],["symbols.ts",{"_index":1986,"title":{},"body":{"classes/PrettySymbols.html":{},"coverage.html":{}}}],["symbols.ts:24",{"_index":2002,"title":{},"body":{"classes/PrettySymbols.html":{}}}],["symbols.ts:37",{"_index":1998,"title":{},"body":{"classes/PrettySymbols.html":{}}}],["symbols.ts:6",{"_index":1996,"title":{},"body":{"classes/PrettySymbols.html":{}}}],["t",{"_index":200,"title":{},"body":{"classes/ActiveVariable.html":{},"classes/PhoenixMenuNode.html":{},"interfaces/PhoenixUI.html":{}}}],["table",{"_index":3769,"title":{},"body":{"coverage.html":{}}}],["tablesort(document.getelementbyid('coverage",{"_index":3768,"title":{},"body":{"coverage.html":{}}}],["tag",{"_index":2203,"title":{},"body":{"classes/ScriptLoader.html":{}}}],["take",{"_index":2348,"title":{},"body":{"classes/SelectionManager.html":{}}}],["taken",{"_index":3007,"title":{},"body":{"interfaces/Window.html":{}}}],["takes",{"_index":1388,"title":{},"body":{"interfaces/EventDataLoader.html":{},"interfaces/Window.html":{}}}],["target",{"_index":1957,"title":{},"body":{"classes/PresetView.html":{}}}],["temp",{"_index":2182,"title":{},"body":{"classes/RendererManager.html":{}}}],["tempanchor",{"_index":3918,"title":{},"body":{"miscellaneous/variables.html":{}}}],["tempanchor.click",{"_index":3924,"title":{},"body":{"miscellaneous/variables.html":{}}}],["tempanchor.download",{"_index":3923,"title":{},"body":{"miscellaneous/variables.html":{}}}],["tempanchor.href",{"_index":3921,"title":{},"body":{"miscellaneous/variables.html":{}}}],["tempanchor.remove",{"_index":3925,"title":{},"body":{"miscellaneous/variables.html":{}}}],["tempanchor.style.display",{"_index":3920,"title":{},"body":{"miscellaneous/variables.html":{}}}],["templates",{"_index":3288,"title":{},"body":{"changelog.html":{}}}],["temporary",{"_index":920,"title":{},"body":{"classes/CoordinateHelper.html":{}}}],["tesla",{"_index":1490,"title":{},"body":{"classes/Field.html":{}}}],["test",{"_index":1210,"title":{},"body":{"classes/DatGUIMenuUI.html":{},"classes/PhoenixMenuUI.html":{}}}],["tested",{"_index":2053,"title":{},"body":{"classes/RKHelper.html":{}}}],["tests",{"_index":3224,"title":{},"body":{"changelog.html":{}}}],["text",{"_index":2354,"title":{},"body":{"classes/SelectionManager.html":{},"changelog.html":{}}}],["text/javascript",{"_index":2220,"title":{},"body":{"classes/ScriptLoader.html":{}}}],["text/plain",{"_index":1458,"title":{},"body":{"classes/ExportManager.html":{}}}],["theme",{"_index":879,"title":{},"body":{"interfaces/Configuration.html":{}}}],["then((jsonstate",{"_index":2708,"title":{},"body":{"classes/URLOptionsManager.html":{}}}],["then((res",{"_index":2706,"title":{},"body":{"classes/URLOptionsManager.html":{},"index.html":{}}}],["then((session",{"_index":3143,"title":{},"body":{"classes/XRManager.html":{}}}],["theta",{"_index":913,"title":{},"body":{"classes/CoordinateHelper.html":{},"classes/PrettySymbols.html":{},"classes/RKHelper.html":{},"changelog.html":{}}}],["thetatoeta",{"_index":905,"title":{},"body":{"classes/CoordinateHelper.html":{}}}],["thetatoeta(theta",{"_index":946,"title":{},"body":{"classes/CoordinateHelper.html":{}}}],["third",{"_index":1537,"title":{},"body":{"classes/Field.html":{},"classes/RungeKutta.html":{},"classes/State.html":{}}}],["this._attributes",{"_index":2511,"title":{},"body":{"classes/TracksMaterial.html":{},"classes/TracksMesh.html":{}}}],["this._attributes.color",{"_index":2534,"title":{},"body":{"classes/TracksMaterial.html":{},"classes/TracksMesh.html":{}}}],["this._attributes.color.needsupdate",{"_index":2535,"title":{},"body":{"classes/TracksMaterial.html":{},"classes/TracksMesh.html":{}}}],["this._attributes.counter",{"_index":2536,"title":{},"body":{"classes/TracksMaterial.html":{},"classes/TracksMesh.html":{}}}],["this._attributes.counter.needsupdate",{"_index":2537,"title":{},"body":{"classes/TracksMaterial.html":{},"classes/TracksMesh.html":{}}}],["this._attributes.index",{"_index":2538,"title":{},"body":{"classes/TracksMaterial.html":{},"classes/TracksMesh.html":{}}}],["this._attributes.index.needsupdate",{"_index":2539,"title":{},"body":{"classes/TracksMaterial.html":{},"classes/TracksMesh.html":{}}}],["this._attributes.next",{"_index":2528,"title":{},"body":{"classes/TracksMaterial.html":{},"classes/TracksMesh.html":{}}}],["this._attributes.next.needsupdate",{"_index":2529,"title":{},"body":{"classes/TracksMaterial.html":{},"classes/TracksMesh.html":{}}}],["this._attributes.position",{"_index":2523,"title":{},"body":{"classes/TracksMaterial.html":{},"classes/TracksMesh.html":{}}}],["this._attributes.position.count",{"_index":2512,"title":{},"body":{"classes/TracksMaterial.html":{},"classes/TracksMesh.html":{}}}],["this._attributes.position.needsupdate",{"_index":2525,"title":{},"body":{"classes/TracksMaterial.html":{},"classes/TracksMesh.html":{}}}],["this._attributes.previous",{"_index":2526,"title":{},"body":{"classes/TracksMaterial.html":{},"classes/TracksMesh.html":{}}}],["this._attributes.previous.needsupdate",{"_index":2527,"title":{},"body":{"classes/TracksMaterial.html":{},"classes/TracksMesh.html":{}}}],["this._attributes.side",{"_index":2530,"title":{},"body":{"classes/TracksMaterial.html":{},"classes/TracksMesh.html":{}}}],["this._attributes.side.needsupdate",{"_index":2531,"title":{},"body":{"classes/TracksMaterial.html":{},"classes/TracksMesh.html":{}}}],["this._attributes.track_id",{"_index":2532,"title":{},"body":{"classes/TracksMaterial.html":{},"classes/TracksMesh.html":{}}}],["this._attributes.track_id.needsupdate",{"_index":2533,"title":{},"body":{"classes/TracksMaterial.html":{},"classes/TracksMesh.html":{}}}],["this.activecamera",{"_index":2467,"title":{},"body":{"classes/StateManager.html":{}}}],["this.activecamera.position.fromarray",{"_index":2450,"title":{},"body":{"classes/StateManager.html":{}}}],["this.activecamera.position.toarray",{"_index":2439,"title":{},"body":{"classes/StateManager.html":{}}}],["this.activeobject",{"_index":2309,"title":{},"body":{"classes/SelectionManager.html":{}}}],["this.activeobject.update(intersectedobject.uuid",{"_index":2336,"title":{},"body":{"classes/SelectionManager.html":{}}}],["this.addcutoptions(collectionnode",{"_index":1901,"title":{},"body":{"classes/PhoenixMenuUI.html":{}}}],["this.adddrawoptions(collectionnode",{"_index":1899,"title":{},"body":{"classes/PhoenixMenuUI.html":{}}}],["this.addrenderer(overlayrenderer",{"_index":2175,"title":{},"body":{"classes/RendererManager.html":{}}}],["this.addrenderer(renderer",{"_index":2149,"title":{},"body":{"classes/RendererManager.html":{}}}],["this.allcolorbyoptions.filter((colorbyoption",{"_index":797,"title":{},"body":{"classes/ColorOptions.html":{}}}],["this.animateevent",{"_index":262,"title":{},"body":{"interfaces/AnimationPreset.html":{}}}],["this.animateevent.bind(this",{"_index":263,"title":{},"body":{"interfaces/AnimationPreset.html":{}}}],["this.animateeventwithclipping",{"_index":264,"title":{},"body":{"interfaces/AnimationPreset.html":{}}}],["this.animateeventwithclipping.bind(this",{"_index":265,"title":{},"body":{"interfaces/AnimationPreset.html":{}}}],["this.animateeventwithcollision(collisionduration",{"_index":530,"title":{},"body":{"interfaces/AnimationPreset.html":{}}}],["this.animatewithcollision",{"_index":521,"title":{},"body":{"interfaces/AnimationPreset.html":{}}}],["this.animatewithcollision(this.animateevent",{"_index":519,"title":{},"body":{"interfaces/AnimationPreset.html":{}}}],["this.antialiasing",{"_index":1353,"title":{},"body":{"classes/EffectsManager.html":{}}}],["this.antialiasrender",{"_index":1354,"title":{},"body":{"classes/EffectsManager.html":{}}}],["this.applychargecoloroptions.bind(this",{"_index":718,"title":{},"body":{"classes/ColorOptions.html":{}}}],["this.applyconfigstate(nodeconfig",{"_index":1815,"title":{},"body":{"classes/PhoenixMenuNode.html":{}}}],["this.applyconfigstate(this.configs[configslength",{"_index":1766,"title":{},"body":{"classes/PhoenixMenuNode.html":{}}}],["this.applyembedoption",{"_index":2689,"title":{},"body":{"classes/URLOptionsManager.html":{}}}],["this.applyeventoptions",{"_index":2685,"title":{},"body":{"classes/URLOptionsManager.html":{}}}],["this.applyhidewidgetsoptions",{"_index":2688,"title":{},"body":{"classes/URLOptionsManager.html":{}}}],["this.applymomcoloroptions.bind(this",{"_index":723,"title":{},"body":{"classes/ColorOptions.html":{}}}],["this.applyvertexcoloroptions.bind(this",{"_index":725,"title":{},"body":{"classes/ColorOptions.html":{}}}],["this.buildeventdatafromjson(event",{"_index":2963,"title":{},"body":{"interfaces/Window.html":{}}}],["this.buildgeometryfromparameters(parameters",{"_index":3083,"title":{},"body":{"interfaces/Window.html":{}}}],["this.callbacks.foreach((callback",{"_index":216,"title":{},"body":{"classes/ActiveVariable.html":{}}}],["this.callbacks.push(callback",{"_index":218,"title":{},"body":{"classes/ActiveVariable.html":{}}}],["this.camera",{"_index":1346,"title":{},"body":{"classes/EffectsManager.html":{},"classes/SelectionManager.html":{}}}],["this.camera.near",{"_index":172,"title":{},"body":{"classes/ARManager.html":{}}}],["this.cameragroup",{"_index":3153,"title":{},"body":{"classes/XRManager.html":{}}}],["this.cameragroup.add(this.xrcamera",{"_index":3164,"title":{},"body":{"classes/XRManager.html":{}}}],["this.cameragroup.position.addscaledvector(direction",{"_index":2865,"title":{},"body":{"classes/VRManager.html":{}}}],["this.cameragroup.position.copy(cameraposition",{"_index":3163,"title":{},"body":{"classes/XRManager.html":{}}}],["this.cameragroup.position.toarray().join",{"_index":2855,"title":{},"body":{"classes/VRManager.html":{}}}],["this.camerapos",{"_index":1978,"title":{},"body":{"classes/PresetView.html":{}}}],["this.cameratarget",{"_index":1979,"title":{},"body":{"classes/PresetView.html":{}}}],["this.chargecolors[chargevalue",{"_index":815,"title":{},"body":{"classes/ColorOptions.html":{}}}],["this.children",{"_index":1748,"title":{},"body":{"classes/PhoenixMenuNode.html":{}}}],["this.children.filter",{"_index":1819,"title":{},"body":{"classes/PhoenixMenuNode.html":{}}}],["this.children.indexof(child",{"_index":1757,"title":{},"body":{"classes/PhoenixMenuNode.html":{}}}],["this.children.push(child",{"_index":1755,"title":{},"body":{"classes/PhoenixMenuNode.html":{}}}],["this.children.splice(childindex",{"_index":1758,"title":{},"body":{"classes/PhoenixMenuNode.html":{}}}],["this.childrenactive",{"_index":1795,"title":{},"body":{"classes/PhoenixMenuNode.html":{}}}],["this.childrentogglestate[child.name",{"_index":1769,"title":{},"body":{"classes/PhoenixMenuNode.html":{}}}],["this.clipping",{"_index":1980,"title":{},"body":{"classes/PresetView.html":{}}}],["this.clippingenabled.update(clipping",{"_index":2464,"title":{},"body":{"classes/StateManager.html":{}}}],["this.clippingenabled.value",{"_index":2440,"title":{},"body":{"classes/StateManager.html":{}}}],["this.clippingopeningangle",{"_index":1982,"title":{},"body":{"classes/PresetView.html":{}}}],["this.clippingstartangle",{"_index":1981,"title":{},"body":{"classes/PresetView.html":{}}}],["this.collectionname",{"_index":781,"title":{},"body":{"classes/ColorOptions.html":{}}}],["this.collideparticles(1500",{"_index":515,"title":{},"body":{"interfaces/AnimationPreset.html":{}}}],["this.colorbymomentum('max",{"_index":836,"title":{},"body":{"classes/ColorOptions.html":{}}}],["this.colorbymomentum('min",{"_index":835,"title":{},"body":{"classes/ColorOptions.html":{}}}],["this.colorbymomentum(key",{"_index":839,"title":{},"body":{"classes/ColorOptions.html":{}}}],["this.colorbyoptions",{"_index":796,"title":{},"body":{"classes/ColorOptions.html":{}}}],["this.colorbyoptions.find",{"_index":810,"title":{},"body":{"classes/ColorOptions.html":{}}}],["this.colorbyoptions.foreach((colorbyoption",{"_index":800,"title":{},"body":{"classes/ColorOptions.html":{}}}],["this.colorbyoptions.map((colorbyoption",{"_index":806,"title":{},"body":{"classes/ColorOptions.html":{}}}],["this.colorbyoptions[0].key",{"_index":804,"title":{},"body":{"classes/ColorOptions.html":{}}}],["this.colormanager.collectioncolor(this.collectionname",{"_index":790,"title":{},"body":{"classes/ColorOptions.html":{}}}],["this.colormanager.collectioncolorrandom(this.collectionname",{"_index":793,"title":{},"body":{"classes/ColorOptions.html":{}}}],["this.colormanager.colorobjectsbyproperty",{"_index":816,"title":{},"body":{"classes/ColorOptions.html":{}}}],["this.colormanager.colortracksbyvertex(this.collectionname",{"_index":847,"title":{},"body":{"classes/ColorOptions.html":{}}}],["this.coloroptionsfolder",{"_index":783,"title":{},"body":{"classes/ColorOptions.html":{}}}],["this.coloroptionsfolder.addconfig('button",{"_index":791,"title":{},"body":{"classes/ColorOptions.html":{}}}],["this.coloroptionsfolder.addconfig('color",{"_index":785,"title":{},"body":{"classes/ColorOptions.html":{}}}],["this.coloroptionsfolder.addconfig('select",{"_index":805,"title":{},"body":{"classes/ColorOptions.html":{}}}],["this.coloroptionsfolder.addconfig('slider",{"_index":829,"title":{},"body":{"classes/ColorOptions.html":{}}}],["this.coloroptionsfolder.configs.foreach((config",{"_index":848,"title":{},"body":{"classes/ColorOptions.html":{}}}],["this.colors",{"_index":2492,"title":{},"body":{"classes/TracksMaterial.html":{},"classes/TracksMesh.html":{}}}],["this.composer",{"_index":1344,"title":{},"body":{"classes/EffectsManager.html":{}}}],["this.composer.addpass(outlinepass",{"_index":1365,"title":{},"body":{"classes/EffectsManager.html":{}}}],["this.composer.addpass(this.defaultrenderpass",{"_index":1350,"title":{},"body":{"classes/EffectsManager.html":{}}}],["this.composer.passes.indexof(pass",{"_index":1367,"title":{},"body":{"classes/EffectsManager.html":{}}}],["this.composer.passes.splice(passindex",{"_index":1368,"title":{},"body":{"classes/EffectsManager.html":{}}}],["this.composer.render",{"_index":1358,"title":{},"body":{"classes/EffectsManager.html":{}}}],["this.composer.renderer.render(scene",{"_index":1359,"title":{},"body":{"classes/EffectsManager.html":{}}}],["this.computeboundingbox",{"_index":2549,"title":{},"body":{"classes/TracksMaterial.html":{},"classes/TracksMesh.html":{}}}],["this.computeboundingsphere",{"_index":2548,"title":{},"body":{"classes/TracksMaterial.html":{},"classes/TracksMesh.html":{}}}],["this.configs",{"_index":1749,"title":{},"body":{"classes/PhoenixMenuNode.html":{}}}],["this.configs.find",{"_index":1807,"title":{},"body":{"classes/PhoenixMenuNode.html":{}}}],["this.configs.push",{"_index":1765,"title":{},"body":{"classes/PhoenixMenuNode.html":{}}}],["this.configuration",{"_index":2899,"title":{},"body":{"interfaces/Window.html":{}}}],["this.configuration.defaulteventfile?.eventfile",{"_index":2686,"title":{},"body":{"classes/URLOptionsManager.html":{}}}],["this.configuration.defaulteventfile?.eventtype",{"_index":2687,"title":{},"body":{"classes/URLOptionsManager.html":{}}}],["this.configuration.eventdataloader",{"_index":2726,"title":{},"body":{"classes/URLOptionsManager.html":{},"interfaces/Window.html":{}}}],["this.configuration.eventdataloader.addlabeltoeventobject",{"_index":3115,"title":{},"body":{"interfaces/Window.html":{}}}],["this.configuration.eventdataloader.buildeventdata",{"_index":2955,"title":{},"body":{"interfaces/Window.html":{}}}],["this.configuration.eventdataloader.getcollection(collectionname",{"_index":3066,"title":{},"body":{"interfaces/Window.html":{}}}],["this.configuration.eventdataloader.getcollections",{"_index":3067,"title":{},"body":{"interfaces/Window.html":{}}}],["this.configuration.eventdataloader.geteventmetadata",{"_index":3072,"title":{},"body":{"interfaces/Window.html":{}}}],["this.configuration.eventdataloader.geteventslist(eventsdata",{"_index":2943,"title":{},"body":{"interfaces/Window.html":{}}}],["this.configuration.eventdataloader.getlabelsobject",{"_index":3123,"title":{},"body":{"interfaces/Window.html":{}}}],["this.containsobject(renderer",{"_index":2178,"title":{},"body":{"classes/RendererManager.html":{}}}],["this.controller.getworlddirection(direction",{"_index":2863,"title":{},"body":{"classes/VRManager.html":{}}}],["this.controller1",{"_index":2825,"title":{},"body":{"classes/VRManager.html":{}}}],["this.controller1.add(line.clone",{"_index":2847,"title":{},"body":{"classes/VRManager.html":{}}}],["this.controller1.addeventlistener",{"_index":2860,"title":{},"body":{"classes/VRManager.html":{}}}],["this.controller1.addeventlistener('selectend",{"_index":2861,"title":{},"body":{"classes/VRManager.html":{}}}],["this.controller1.position.toarray().join",{"_index":2853,"title":{},"body":{"classes/VRManager.html":{}}}],["this.controller1?.removeeventlistener",{"_index":2819,"title":{},"body":{"classes/VRManager.html":{}}}],["this.controller2",{"_index":2828,"title":{},"body":{"classes/VRManager.html":{}}}],["this.controller2.add(line.clone",{"_index":2848,"title":{},"body":{"classes/VRManager.html":{}}}],["this.controllergrip1",{"_index":2832,"title":{},"body":{"classes/VRManager.html":{}}}],["this.controllergrip1.add",{"_index":2834,"title":{},"body":{"classes/VRManager.html":{}}}],["this.controllergrip2",{"_index":2837,"title":{},"body":{"classes/VRManager.html":{}}}],["this.controllergrip2.add",{"_index":2839,"title":{},"body":{"classes/VRManager.html":{}}}],["this.counter",{"_index":2490,"title":{},"body":{"classes/TracksMaterial.html":{},"classes/TracksMesh.html":{}}}],["this.currentxrsession",{"_index":3150,"title":{},"body":{"classes/XRManager.html":{}}}],["this.currentxrsession.removeeventlistener('end",{"_index":3151,"title":{},"body":{"classes/XRManager.html":{}}}],["this.currentxrsession?.end",{"_index":3154,"title":{},"body":{"classes/XRManager.html":{}}}],["this.defaultapplymaxvalue",{"_index":1026,"title":{},"body":{"classes/Cut.html":{}}}],["this.defaultapplyminvalue",{"_index":1025,"title":{},"body":{"classes/Cut.html":{}}}],["this.defaultmaxvalue",{"_index":1024,"title":{},"body":{"classes/Cut.html":{}}}],["this.defaultminvalue",{"_index":1023,"title":{},"body":{"classes/Cut.html":{}}}],["this.defaultrenderpass",{"_index":1348,"title":{},"body":{"classes/EffectsManager.html":{}}}],["this.defaultrenderpass.camera",{"_index":1356,"title":{},"body":{"classes/EffectsManager.html":{}}}],["this.defaultrenderpass.scene",{"_index":1357,"title":{},"body":{"classes/EffectsManager.html":{}}}],["this.disableselecting",{"_index":2311,"title":{},"body":{"classes/SelectionManager.html":{}}}],["this.effectsmanager",{"_index":2305,"title":{},"body":{"classes/SelectionManager.html":{}}}],["this.effectsmanager.addoutlinepassforselection",{"_index":2307,"title":{},"body":{"classes/SelectionManager.html":{}}}],["this.effectsmanager.antialiasing",{"_index":2321,"title":{},"body":{"classes/SelectionManager.html":{}}}],["this.effectsmanager.composer.renderer.domelement",{"_index":2363,"title":{},"body":{"classes/SelectionManager.html":{}}}],["this.effectsmanager.setantialiasing(false",{"_index":2322,"title":{},"body":{"classes/SelectionManager.html":{}}}],["this.effectsmanager.setantialiasing(this.preselectionantialias",{"_index":2327,"title":{},"body":{"classes/SelectionManager.html":{}}}],["this.effectsrender",{"_index":1355,"title":{},"body":{"classes/EffectsManager.html":{}}}],["this.enableeventdisplayconsole",{"_index":2911,"title":{},"body":{"interfaces/Window.html":{}}}],["this.enablekeyboardcontrols",{"_index":2913,"title":{},"body":{"interfaces/Window.html":{}}}],["this.enableselecting",{"_index":2310,"title":{},"body":{"classes/SelectionManager.html":{}}}],["this.etatotheta(eta",{"_index":958,"title":{},"body":{"classes/CoordinateHelper.html":{}}}],["this.eventdisplay",{"_index":2458,"title":{},"body":{"classes/StateManager.html":{},"classes/URLOptionsManager.html":{}}}],["this.eventdisplay.buildeventdatafromjson(eventdata",{"_index":2730,"title":{},"body":{"classes/URLOptionsManager.html":{}}}],["this.eventdisplay.getinfologger().add('could",{"_index":2744,"title":{},"body":{"classes/URLOptionsManager.html":{}}}],["this.eventdisplay.getloadingmanager().addloadableitem('url_config",{"_index":2704,"title":{},"body":{"classes/URLOptionsManager.html":{}}}],["this.eventdisplay.getloadingmanager().addloadableitem('url_event",{"_index":2717,"title":{},"body":{"classes/URLOptionsManager.html":{}}}],["this.eventdisplay.getloadingmanager().itemloaded('url_config",{"_index":2711,"title":{},"body":{"classes/URLOptionsManager.html":{}}}],["this.eventdisplay.getloadingmanager().itemloaded('url_event",{"_index":2723,"title":{},"body":{"classes/URLOptionsManager.html":{}}}],["this.eventdisplay.getuimanager().setclipping(true",{"_index":2457,"title":{},"body":{"classes/StateManager.html":{}}}],["this.eventdisplay.parsephoenixevents(alleventsobject",{"_index":2762,"title":{},"body":{"classes/URLOptionsManager.html":{}}}],["this.eventdisplay.parsephoenixevents(filedata",{"_index":2732,"title":{},"body":{"classes/URLOptionsManager.html":{}}}],["this.eventfolder",{"_index":1129,"title":{},"body":{"classes/DatGUIMenuUI.html":{},"classes/PhoenixMenuUI.html":{}}}],["this.eventfolder.__folders[eventdatatype",{"_index":1217,"title":{},"body":{"classes/DatGUIMenuUI.html":{}}}],["this.eventfolder.__folders[typename",{"_index":1291,"title":{},"body":{"classes/DatGUIMenuUI.html":{}}}],["this.eventfolder.addchild(typename",{"_index":1894,"title":{},"body":{"classes/PhoenixMenuUI.html":{}}}],["this.eventfolder.addconfig('checkbox",{"_index":1892,"title":{},"body":{"classes/PhoenixMenuUI.html":{}}}],["this.eventfolder.addfolder(typename",{"_index":1214,"title":{},"body":{"classes/DatGUIMenuUI.html":{}}}],["this.eventfolder.children.find",{"_index":1895,"title":{},"body":{"classes/PhoenixMenuUI.html":{}}}],["this.eventfolder.getnodestate",{"_index":1890,"title":{},"body":{"classes/PhoenixMenuUI.html":{}}}],["this.eventfolder.loadstatefromjson(this.eventfolderstate",{"_index":1941,"title":{},"body":{"classes/PhoenixMenuUI.html":{}}}],["this.eventfolder.remove",{"_index":1891,"title":{},"body":{"classes/PhoenixMenuUI.html":{}}}],["this.eventfolderstate",{"_index":1889,"title":{},"body":{"classes/PhoenixMenuUI.html":{}}}],["this.eventsdata",{"_index":2942,"title":{},"body":{"interfaces/Window.html":{}}}],["this.eventsdata[eventkey",{"_index":2962,"title":{},"body":{"interfaces/Window.html":{}}}],["this.fixedoverlay",{"_index":2186,"title":{},"body":{"classes/RendererManager.html":{}}}],["this.geomfolder",{"_index":1128,"title":{},"body":{"classes/DatGUIMenuUI.html":{},"classes/PhoenixMenuUI.html":{}}}],["this.geomfolder.__folders[object.name",{"_index":1196,"title":{},"body":{"classes/DatGUIMenuUI.html":{}}}],["this.geomfolder.addfolder(name",{"_index":1160,"title":{},"body":{"classes/DatGUIMenuUI.html":{}}}],["this.geomfolder.findintreeorcreate(menusubfolder",{"_index":1873,"title":{},"body":{"classes/PhoenixMenuUI.html":{}}}],["this.geomfolder.removefolder(folder",{"_index":1197,"title":{},"body":{"classes/DatGUIMenuUI.html":{}}}],["this.getcameragroup().add(this.controller1",{"_index":2827,"title":{},"body":{"classes/VRManager.html":{}}}],["this.getcameragroup().add(this.controller2",{"_index":2830,"title":{},"body":{"classes/VRManager.html":{}}}],["this.getcameragroup().add(this.controllergrip1",{"_index":2836,"title":{},"body":{"classes/VRManager.html":{}}}],["this.getcameragroup().add(this.controllergrip2",{"_index":2841,"title":{},"body":{"classes/VRManager.html":{}}}],["this.getcameratween",{"_index":532,"title":{},"body":{"interfaces/AnimationPreset.html":{}}}],["this.getcameratween(alongaxisposition",{"_index":298,"title":{},"body":{"interfaces/AnimationPreset.html":{}}}],["this.getcameratween(position",{"_index":539,"title":{},"body":{"interfaces/AnimationPreset.html":{}}}],["this.getcameratween(startpos",{"_index":289,"title":{},"body":{"interfaces/AnimationPreset.html":{}}}],["this.gethitspositions(obj.position",{"_index":413,"title":{},"body":{"interfaces/AnimationPreset.html":{}}}],["this.getmainrenderer",{"_index":2167,"title":{},"body":{"classes/RendererManager.html":{}}}],["this.getmainrenderer().setanimationloop(null",{"_index":2152,"title":{},"body":{"classes/RendererManager.html":{}}}],["this.getmomentum(objectparams",{"_index":841,"title":{},"body":{"classes/ColorOptions.html":{}}}],["this.getoverlayrenderer",{"_index":2155,"title":{},"body":{"classes/RendererManager.html":{}}}],["this.getoverlayrenderer().domelement.hidden",{"_index":2156,"title":{},"body":{"classes/RendererManager.html":{}}}],["this.getoverlayrenderer().render(scene",{"_index":2160,"title":{},"body":{"classes/RendererManager.html":{}}}],["this.getstatemanager().seteventdisplay(this",{"_index":2902,"title":{},"body":{"interfaces/Window.html":{}}}],["this.getthreemanager().getscenemanager().getscene",{"_index":3084,"title":{},"body":{"interfaces/Window.html":{}}}],["this.graphicslibrary",{"_index":2893,"title":{},"body":{"interfaces/Window.html":{}}}],["this.graphicslibrary.addgeometryfromparameters(parameters",{"_index":3044,"title":{},"body":{"interfaces/Window.html":{}}}],["this.graphicslibrary.addlabeltoobject(label",{"_index":3118,"title":{},"body":{"interfaces/Window.html":{}}}],["this.graphicslibrary.animateclippingwithcollision(tweenduration",{"_index":3113,"title":{},"body":{"interfaces/Window.html":{}}}],["this.graphicslibrary.animateeventwithcollision(tweenduration",{"_index":3112,"title":{},"body":{"interfaces/Window.html":{}}}],["this.graphicslibrary.animatepreset(animationpreset",{"_index":3111,"title":{},"body":{"interfaces/Window.html":{}}}],["this.graphicslibrary.animatethroughevent",{"_index":3109,"title":{},"body":{"interfaces/Window.html":{}}}],["this.graphicslibrary.cleareventdata",{"_index":2954,"title":{},"body":{"interfaces/Window.html":{}}}],["this.graphicslibrary.enablekeyboardcontrols",{"_index":3108,"title":{},"body":{"interfaces/Window.html":{}}}],["this.graphicslibrary.enableselecting(enable",{"_index":3097,"title":{},"body":{"interfaces/Window.html":{}}}],["this.graphicslibrary.endxrsession(xrsessiontype",{"_index":2936,"title":{},"body":{"interfaces/Window.html":{}}}],["this.graphicslibrary.exportphoenixscene",{"_index":3006,"title":{},"body":{"interfaces/Window.html":{}}}],["this.graphicslibrary.exportscenetoobj",{"_index":2993,"title":{},"body":{"interfaces/Window.html":{}}}],["this.graphicslibrary.fixoverlayview(fixed",{"_index":3100,"title":{},"body":{"interfaces/Window.html":{}}}],["this.graphicslibrary.getactiveobjectid",{"_index":3101,"title":{},"body":{"interfaces/Window.html":{}}}],["this.graphicslibrary.highlightobject(uuid",{"_index":3105,"title":{},"body":{"interfaces/Window.html":{}}}],["this.graphicslibrary.init(configuration",{"_index":2900,"title":{},"body":{"interfaces/Window.html":{}}}],["this.graphicslibrary.initxrsession(xrsessiontype",{"_index":2934,"title":{},"body":{"interfaces/Window.html":{}}}],["this.graphicslibrary.loadgltfgeometry",{"_index":3017,"title":{},"body":{"interfaces/Window.html":{}}}],["this.graphicslibrary.loadjsongeometry",{"_index":3022,"title":{},"body":{"interfaces/Window.html":{}}}],["this.graphicslibrary.loadobjgeometry",{"_index":2982,"title":{},"body":{"interfaces/Window.html":{}}}],["this.graphicslibrary.lookatobject(uuid",{"_index":3104,"title":{},"body":{"interfaces/Window.html":{}}}],["this.graphicslibrary.makescreenshot(width",{"_index":2932,"title":{},"body":{"interfaces/Window.html":{}}}],["this.graphicslibrary.parsegltfgeometry(input",{"_index":3012,"title":{},"body":{"interfaces/Window.html":{}}}],["this.graphicslibrary.parseobjgeometry",{"_index":2990,"title":{},"body":{"interfaces/Window.html":{}}}],["this.graphicslibrary.parsephnxscene(phoenixscene.scene",{"_index":3003,"title":{},"body":{"interfaces/Window.html":{}}}],["this.graphicslibrary.setanimationloop(uiloop",{"_index":2905,"title":{},"body":{"interfaces/Window.html":{}}}],["this.graphicslibrary.setoverlayrenderer(overlaycanvas",{"_index":3088,"title":{},"body":{"interfaces/Window.html":{}}}],["this.graphicslibrary.setselectedobjectdisplay(selectedobject",{"_index":3092,"title":{},"body":{"interfaces/Window.html":{}}}],["this.graphicslibrary.zoomto(zoomfactor",{"_index":3054,"title":{},"body":{"interfaces/Window.html":{}}}],["this.gui",{"_index":1119,"title":{},"body":{"classes/DatGUIMenuUI.html":{}}}],["this.gui.addfolder('event",{"_index":1203,"title":{},"body":{"classes/DatGUIMenuUI.html":{}}}],["this.gui.addfolder(scenemanager.geometries_id",{"_index":1134,"title":{},"body":{"classes/DatGUIMenuUI.html":{}}}],["this.gui.addfolder(scenemanager.labels_id",{"_index":1253,"title":{},"body":{"classes/DatGUIMenuUI.html":{}}}],["this.gui.domelement.id",{"_index":1120,"title":{},"body":{"classes/DatGUIMenuUI.html":{}}}],["this.gui.domelement.style.csstext",{"_index":1121,"title":{},"body":{"classes/DatGUIMenuUI.html":{}}}],["this.gui.removefolder(this.eventfolder",{"_index":1202,"title":{},"body":{"classes/DatGUIMenuUI.html":{}}}],["this.guiparameters.eventdata",{"_index":1204,"title":{},"body":{"classes/DatGUIMenuUI.html":{}}}],["this.guiparameters.eventdata[typename",{"_index":1215,"title":{},"body":{"classes/DatGUIMenuUI.html":{}}}],["this.guiparameters.geometries",{"_index":1135,"title":{},"body":{"classes/DatGUIMenuUI.html":{}}}],["this.guiparameters.labels",{"_index":1254,"title":{},"body":{"classes/DatGUIMenuUI.html":{}}}],["this.guiparameters[collectionname",{"_index":1218,"title":{},"body":{"classes/DatGUIMenuUI.html":{}}}],["this.guiparameters[labelid",{"_index":1267,"title":{},"body":{"classes/DatGUIMenuUI.html":{}}}],["this.guiparameters[labelid]['removelabel",{"_index":1283,"title":{},"body":{"classes/DatGUIMenuUI.html":{}}}],["this.guiparameters[name",{"_index":1154,"title":{},"body":{"classes/DatGUIMenuUI.html":{}}}],["this.handlejivexmlevent(fileurl",{"_index":2714,"title":{},"body":{"classes/URLOptionsManager.html":{}}}],["this.handlejsonevent(fileurl",{"_index":2716,"title":{},"body":{"classes/URLOptionsManager.html":{}}}],["this.handlezipfileevents(fileurl",{"_index":2715,"title":{},"body":{"classes/URLOptionsManager.html":{}}}],["this.hideidswithurloption(hidewidgetsoptions",{"_index":2770,"title":{},"body":{"classes/URLOptionsManager.html":{}}}],["this.icon",{"_index":1746,"title":{},"body":{"classes/PhoenixMenuNode.html":{},"classes/PresetView.html":{}}}],["this.ignorelist",{"_index":2300,"title":{},"body":{"classes/SelectionManager.html":{}}}],["this.ignorelist.includes(intersectedobject.type",{"_index":2330,"title":{},"body":{"classes/SelectionManager.html":{}}}],["this.indices_array",{"_index":2493,"title":{},"body":{"classes/TracksMaterial.html":{},"classes/TracksMesh.html":{}}}],["this.infologger",{"_index":2304,"title":{},"body":{"classes/SelectionManager.html":{},"interfaces/Window.html":{}}}],["this.infologger.add('exported",{"_index":2994,"title":{},"body":{"interfaces/Window.html":{}}}],["this.infologger.add(log",{"_index":2357,"title":{},"body":{"classes/SelectionManager.html":{}}}],["this.infologger.add(name",{"_index":2985,"title":{},"body":{"interfaces/Window.html":{}}}],["this.infologgerlist",{"_index":1615,"title":{},"body":{"classes/InfoLogger.html":{}}}],["this.infologgerlist.length",{"_index":1611,"title":{},"body":{"classes/InfoLogger.html":{}}}],["this.infologgerlist.pop",{"_index":1613,"title":{},"body":{"classes/InfoLogger.html":{}}}],["this.infologgerlist.unshift(label",{"_index":1614,"title":{},"body":{"classes/InfoLogger.html":{}}}],["this.init(configuration",{"_index":2897,"title":{},"body":{"interfaces/Window.html":{}}}],["this.initchargecoloroptions.bind(this",{"_index":716,"title":{},"body":{"classes/ColorOptions.html":{}}}],["this.initcolorbyoptions",{"_index":799,"title":{},"body":{"classes/ColorOptions.html":{}}}],["this.initmomcoloroptions.bind(this",{"_index":722,"title":{},"body":{"classes/ColorOptions.html":{}}}],["this.initrenderer(elementid",{"_index":2154,"title":{},"body":{"classes/RendererManager.html":{}}}],["this.intersectobject(event",{"_index":2329,"title":{},"body":{"classes/SelectionManager.html":{}}}],["this.isfixedoverlay",{"_index":2159,"title":{},"body":{"classes/RendererManager.html":{}}}],["this.isinit",{"_index":2299,"title":{},"body":{"classes/SelectionManager.html":{}}}],["this.istracksmaterial",{"_index":2610,"title":{},"body":{"classes/TracksMaterial.html":{},"classes/TracksMesh.html":{}}}],["this.labelsfolder",{"_index":1130,"title":{},"body":{"classes/DatGUIMenuUI.html":{},"classes/PhoenixMenuUI.html":{}}}],["this.labelsfolder.__folders[labelid",{"_index":1289,"title":{},"body":{"classes/DatGUIMenuUI.html":{}}}],["this.labelsfolder.addchild(labelid",{"_index":1934,"title":{},"body":{"classes/PhoenixMenuUI.html":{}}}],["this.labelsfolder.addconfig('button",{"_index":1931,"title":{},"body":{"classes/PhoenixMenuUI.html":{}}}],["this.labelsfolder.addconfig('color",{"_index":1930,"title":{},"body":{"classes/PhoenixMenuUI.html":{}}}],["this.labelsfolder.addconfig('slider",{"_index":1929,"title":{},"body":{"classes/PhoenixMenuUI.html":{}}}],["this.labelsfolder.addfolder(labelid",{"_index":1270,"title":{},"body":{"classes/DatGUIMenuUI.html":{}}}],["this.labelsfolder.children.find",{"_index":1932,"title":{},"body":{"classes/PhoenixMenuUI.html":{}}}],["this.labelsfolder.removefolder(labelitemfolder",{"_index":1290,"title":{},"body":{"classes/DatGUIMenuUI.html":{}}}],["this.labelsfolder?.children.find",{"_index":1937,"title":{},"body":{"classes/PhoenixMenuUI.html":{}}}],["this.loaded",{"_index":1676,"title":{},"body":{"classes/LoadingManager.html":{}}}],["this.loaded.length",{"_index":1659,"title":{},"body":{"classes/LoadingManager.html":{}}}],["this.loaded.push(id",{"_index":1655,"title":{},"body":{"classes/LoadingManager.html":{}}}],["this.loaded.sort().join",{"_index":1661,"title":{},"body":{"classes/LoadingManager.html":{}}}],["this.loadevent(eventkeys[0",{"_index":2944,"title":{},"body":{"interfaces/Window.html":{}}}],["this.loadgltfgeometry(sceneurl",{"_index":3079,"title":{},"body":{"interfaces/Window.html":{}}}],["this.loadingmanager",{"_index":2892,"title":{},"body":{"interfaces/Window.html":{}}}],["this.loadingmanager.addloadableitem('root_geom",{"_index":3034,"title":{},"body":{"interfaces/Window.html":{}}}],["this.loadingmanager.addloadableitem('root_json_geom",{"_index":3025,"title":{},"body":{"interfaces/Window.html":{}}}],["this.loadingmanager.addloadableitem(`gltf_geom_${name",{"_index":3016,"title":{},"body":{"interfaces/Window.html":{}}}],["this.loadingmanager.addloadableitem(`json_geom_${name",{"_index":3021,"title":{},"body":{"interfaces/Window.html":{}}}],["this.loadingmanager.addloadableitem(`obj_geom_${name",{"_index":2981,"title":{},"body":{"interfaces/Window.html":{}}}],["this.loadingmanager.addloadableitem(`parse_gltf_${name",{"_index":3010,"title":{},"body":{"interfaces/Window.html":{}}}],["this.loadingmanager.addloadableitem(`parse_obj_${name",{"_index":2989,"title":{},"body":{"interfaces/Window.html":{}}}],["this.loadingmanager.addloadableitem(`parse_phnx_${name",{"_index":3002,"title":{},"body":{"interfaces/Window.html":{}}}],["this.loadingmanager.itemloaded('root_geom",{"_index":3041,"title":{},"body":{"interfaces/Window.html":{}}}],["this.loadingmanager.itemloaded('root_json_geom",{"_index":3031,"title":{},"body":{"interfaces/Window.html":{}}}],["this.loadingmanager.itemloaded(`gltf_geom_${name",{"_index":3018,"title":{},"body":{"interfaces/Window.html":{}}}],["this.loadingmanager.itemloaded(`json_geom_${name",{"_index":3023,"title":{},"body":{"interfaces/Window.html":{}}}],["this.loadingmanager.itemloaded(`obj_geom_${name",{"_index":2984,"title":{},"body":{"interfaces/Window.html":{}}}],["this.loadingmanager.itemloaded(`parse_gltf_${name",{"_index":3013,"title":{},"body":{"interfaces/Window.html":{}}}],["this.loadingmanager.itemloaded(`parse_obj_${name",{"_index":2991,"title":{},"body":{"interfaces/Window.html":{}}}],["this.loadingmanager.itemloaded(`parse_phnx_${name",{"_index":3004,"title":{},"body":{"interfaces/Window.html":{}}}],["this.loadjsongeometry",{"_index":3027,"title":{},"body":{"interfaces/Window.html":{}}}],["this.loadobjgeometry(filename",{"_index":3081,"title":{},"body":{"interfaces/Window.html":{}}}],["this.loadsceneconfiguration(phoenixscene.sceneconfiguration",{"_index":3001,"title":{},"body":{"interfaces/Window.html":{}}}],["this.loadstatefromjson(json.parse(data",{"_index":2435,"title":{},"body":{"classes/StateManager.html":{}}}],["this.mainrenderer",{"_index":2174,"title":{},"body":{"classes/RendererManager.html":{}}}],["this.maxcutactive",{"_index":1027,"title":{},"body":{"classes/Cut.html":{}}}],["this.maxentries",{"_index":1612,"title":{},"body":{"classes/InfoLogger.html":{}}}],["this.maxpositionx",{"_index":1182,"title":{},"body":{"classes/DatGUIMenuUI.html":{}}}],["this.maxpositiony",{"_index":1186,"title":{},"body":{"classes/DatGUIMenuUI.html":{}}}],["this.maxpositionz",{"_index":1189,"title":{},"body":{"classes/DatGUIMenuUI.html":{}}}],["this.maxvalue",{"_index":1030,"title":{},"body":{"classes/Cut.html":{}}}],["this.mincutactive",{"_index":1028,"title":{},"body":{"classes/Cut.html":{}}}],["this.minvalue",{"_index":1029,"title":{},"body":{"classes/Cut.html":{}}}],["this.momcolors.max.value",{"_index":831,"title":{},"body":{"classes/ColorOptions.html":{}}}],["this.momcolors.min.value",{"_index":830,"title":{},"body":{"classes/ColorOptions.html":{}}}],["this.momcolors[key].color",{"_index":838,"title":{},"body":{"classes/ColorOptions.html":{}}}],["this.momcolors[key].value",{"_index":832,"title":{},"body":{"classes/ColorOptions.html":{}}}],["this.momcolors[minormax].color",{"_index":840,"title":{},"body":{"classes/ColorOptions.html":{}}}],["this.moveindirection(direction",{"_index":2857,"title":{},"body":{"classes/VRManager.html":{}}}],["this.name",{"_index":1745,"title":{},"body":{"classes/PhoenixMenuNode.html":{},"classes/PresetView.html":{}}}],["this.next",{"_index":2488,"title":{},"body":{"classes/TracksMaterial.html":{},"classes/TracksMesh.html":{}}}],["this.next.push(p.x",{"_index":2503,"title":{},"body":{"classes/TracksMaterial.html":{},"classes/TracksMesh.html":{}}}],["this.next.push(points[i].x",{"_index":2507,"title":{},"body":{"classes/TracksMaterial.html":{},"classes/TracksMesh.html":{}}}],["this.next_track_id",{"_index":2494,"title":{},"body":{"classes/TracksMaterial.html":{},"classes/TracksMesh.html":{}}}],["this.nodelevel",{"_index":1754,"title":{},"body":{"classes/PhoenixMenuNode.html":{}}}],["this.oncontrollerselectend",{"_index":2823,"title":{},"body":{"classes/VRManager.html":{}}}],["this.oncontrollerselectstart",{"_index":2821,"title":{},"body":{"classes/VRManager.html":{}}}],["this.ondisplayedeventchange.foreach((callback",{"_index":2956,"title":{},"body":{"interfaces/Window.html":{}}}],["this.ondisplayedeventchange.push(callback",{"_index":3069,"title":{},"body":{"interfaces/Window.html":{}}}],["this.ondocumentmousedown",{"_index":2317,"title":{},"body":{"classes/SelectionManager.html":{}}}],["this.oneventschange.foreach((callback",{"_index":2945,"title":{},"body":{"interfaces/Window.html":{}}}],["this.oneventschange.push(callback",{"_index":3071,"title":{},"body":{"interfaces/Window.html":{}}}],["this.onloadcallbacks",{"_index":1677,"title":{},"body":{"classes/LoadingManager.html":{}}}],["this.onloadcallbacks.foreach((callback",{"_index":1662,"title":{},"body":{"classes/LoadingManager.html":{}}}],["this.onloadcallbacks.push(callback",{"_index":1673,"title":{},"body":{"classes/LoadingManager.html":{}}}],["this.onlyselectedcolorbyoption",{"_index":802,"title":{},"body":{"classes/ColorOptions.html":{}}}],["this.onprogress(id",{"_index":1656,"title":{},"body":{"classes/LoadingManager.html":{}}}],["this.onprogresscallbacks",{"_index":1671,"title":{},"body":{"classes/LoadingManager.html":{}}}],["this.onprogresscallbacks.push(callback",{"_index":1674,"title":{},"body":{"classes/LoadingManager.html":{}}}],["this.onsessionended",{"_index":3136,"title":{},"body":{"classes/XRManager.html":{}}}],["this.ontoggle",{"_index":1747,"title":{},"body":{"classes/PhoenixMenuNode.html":{}}}],["this.ontoggle?.(this.togglestate",{"_index":1803,"title":{},"body":{"classes/PhoenixMenuNode.html":{}}}],["this.ontoggle?.(value",{"_index":1767,"title":{},"body":{"classes/PhoenixMenuNode.html":{}}}],["this.ontouchdown",{"_index":2319,"title":{},"body":{"classes/SelectionManager.html":{}}}],["this.ontouchmove",{"_index":2315,"title":{},"body":{"classes/SelectionManager.html":{}}}],["this.ontouchmove(event.targettouches[0",{"_index":2361,"title":{},"body":{"classes/SelectionManager.html":{}}}],["this.onxrsessionended",{"_index":3152,"title":{},"body":{"classes/XRManager.html":{}}}],["this.onxrsessionended.bind(this",{"_index":3148,"title":{},"body":{"classes/XRManager.html":{}}}],["this.onxrsessionstarted.bind(this)(session",{"_index":3144,"title":{},"body":{"classes/XRManager.html":{}}}],["this.openingclippingangle.update(angle",{"_index":2466,"title":{},"body":{"classes/StateManager.html":{}}}],["this.openingclippingangle.value",{"_index":2442,"title":{},"body":{"classes/StateManager.html":{}}}],["this.outlinepass",{"_index":2306,"title":{},"body":{"classes/SelectionManager.html":{}}}],["this.outlinepass.selectedobjects",{"_index":2326,"title":{},"body":{"classes/SelectionManager.html":{}}}],["this.outlinepass.selectedobjects[0",{"_index":2331,"title":{},"body":{"classes/SelectionManager.html":{}}}],["this.overlayrenderer",{"_index":2176,"title":{},"body":{"classes/RendererManager.html":{}}}],["this.parent",{"_index":1750,"title":{},"body":{"classes/PhoenixMenuNode.html":{}}}],["this.parent.removechild(this",{"_index":1759,"title":{},"body":{"classes/PhoenixMenuNode.html":{}}}],["this.phoenixmenuroot",{"_index":1861,"title":{},"body":{"classes/PhoenixMenuUI.html":{},"classes/StateManager.html":{}}}],["this.phoenixmenuroot.addchild",{"_index":1863,"title":{},"body":{"classes/PhoenixMenuUI.html":{}}}],["this.phoenixmenuroot.configactive",{"_index":2448,"title":{},"body":{"classes/StateManager.html":{}}}],["this.phoenixmenuroot.getnodestate",{"_index":2437,"title":{},"body":{"classes/StateManager.html":{}}}],["this.phoenixmenuroot.loadstatefromjson(jsondata['phoenixmenu",{"_index":2447,"title":{},"body":{"classes/StateManager.html":{}}}],["this.phoenixmenuroot.truncate",{"_index":1862,"title":{},"body":{"classes/PhoenixMenuUI.html":{}}}],["this.positions",{"_index":2486,"title":{},"body":{"classes/TracksMaterial.html":{},"classes/TracksMesh.html":{}}}],["this.positions.length",{"_index":2513,"title":{},"body":{"classes/TracksMaterial.html":{},"classes/TracksMesh.html":{}}}],["this.preselectionantialias",{"_index":2320,"title":{},"body":{"classes/SelectionManager.html":{}}}],["this.previous",{"_index":2487,"title":{},"body":{"classes/TracksMaterial.html":{},"classes/TracksMesh.html":{}}}],["this.previous.push(points[0].x",{"_index":2500,"title":{},"body":{"classes/TracksMaterial.html":{},"classes/TracksMesh.html":{}}}],["this.previousvalues.cameranear",{"_index":159,"title":{},"body":{"classes/ARManager.html":{}}}],["this.previousvalues.scenescale",{"_index":157,"title":{},"body":{"classes/ARManager.html":{}}}],["this.process",{"_index":2510,"title":{},"body":{"classes/TracksMaterial.html":{},"classes/TracksMesh.html":{}}}],["this.progressitems",{"_index":1678,"title":{},"body":{"classes/LoadingManager.html":{}}}],["this.progressitems[id",{"_index":1654,"title":{},"body":{"classes/LoadingManager.html":{}}}],["this.removelabel(labelid",{"_index":1284,"title":{},"body":{"classes/DatGUIMenuUI.html":{},"classes/PhoenixMenuUI.html":{}}}],["this.removeobj(object",{"_index":1158,"title":{},"body":{"classes/DatGUIMenuUI.html":{}}}],["this.render",{"_index":1352,"title":{},"body":{"classes/EffectsManager.html":{}}}],["this.renderer",{"_index":3135,"title":{},"body":{"classes/XRManager.html":{}}}],["this.renderer.xr",{"_index":3156,"title":{},"body":{"classes/XRManager.html":{}}}],["this.renderer.xr.getcontroller(0",{"_index":2826,"title":{},"body":{"classes/VRManager.html":{}}}],["this.renderer.xr.getcontroller(1",{"_index":2829,"title":{},"body":{"classes/VRManager.html":{}}}],["this.renderer.xr.getcontrollergrip(0",{"_index":2833,"title":{},"body":{"classes/VRManager.html":{}}}],["this.renderer.xr.getcontrollergrip(1",{"_index":2838,"title":{},"body":{"classes/VRManager.html":{}}}],["this.renderer.xr.setreferencespacetype('local",{"_index":175,"title":{},"body":{"classes/ARManager.html":{}}}],["this.renderer.xr.setsession(session",{"_index":3149,"title":{},"body":{"classes/XRManager.html":{}}}],["this.renderermanager.getmainrenderer().localclippingenabled",{"_index":468,"title":{},"body":{"interfaces/AnimationPreset.html":{}}}],["this.renderers",{"_index":2177,"title":{},"body":{"classes/RendererManager.html":{}}}],["this.renderers.indexof(renderer",{"_index":2180,"title":{},"body":{"classes/RendererManager.html":{}}}],["this.renderers.length",{"_index":2184,"title":{},"body":{"classes/RendererManager.html":{}}}],["this.renderers.push(renderer",{"_index":2179,"title":{},"body":{"classes/RendererManager.html":{}}}],["this.renderers.splice(index",{"_index":2181,"title":{},"body":{"classes/RendererManager.html":{}}}],["this.renderers[0].localclippingenabled",{"_index":2185,"title":{},"body":{"classes/RendererManager.html":{}}}],["this.reset",{"_index":1663,"title":{},"body":{"classes/LoadingManager.html":{}}}],["this.resetlabels",{"_index":2949,"title":{},"body":{"interfaces/Window.html":{}}}],["this.saveeventdataconfiguration(eventdata",{"_index":1473,"title":{},"body":{"classes/ExportManager.html":{}}}],["this.savegeometriesconfiguration(geometries",{"_index":1475,"title":{},"body":{"classes/ExportManager.html":{}}}],["this.savesceneconfig(eventdata",{"_index":1460,"title":{},"body":{"classes/ExportManager.html":{}}}],["this.savestateasjson",{"_index":2433,"title":{},"body":{"classes/StateManager.html":{}}}],["this.scalescene(0.00001",{"_index":173,"title":{},"body":{"classes/ARManager.html":{}}}],["this.scalescene(this.previousvalues.scenescale",{"_index":179,"title":{},"body":{"classes/ARManager.html":{}}}],["this.scene",{"_index":1347,"title":{},"body":{"classes/EffectsManager.html":{},"classes/SelectionManager.html":{}}}],["this.scene.add(...particles",{"_index":494,"title":{},"body":{"interfaces/AnimationPreset.html":{}}}],["this.scene.getobjectbyname(groupname)?.scale.setscalar(scale",{"_index":185,"title":{},"body":{"classes/ARManager.html":{}}}],["this.scene.getobjectbyname(scenemanager.event_data_id",{"_index":326,"title":{},"body":{"interfaces/AnimationPreset.html":{}}}],["this.scene.getobjectbyname(scenemanager.event_data_id).visible",{"_index":528,"title":{},"body":{"interfaces/AnimationPreset.html":{}}}],["this.scene.remove(...particles",{"_index":502,"title":{},"body":{"interfaces/AnimationPreset.html":{}}}],["this.scene.scale.x",{"_index":171,"title":{},"body":{"classes/ARManager.html":{}}}],["this.scenemanager",{"_index":657,"title":{},"body":{"classes/ColorManager.html":{},"classes/DatGUIMenuUI.html":{},"classes/PhoenixMenuUI.html":{}}}],["this.scenemanager.changeobjectcolor",{"_index":1281,"title":{},"body":{"classes/DatGUIMenuUI.html":{},"classes/PhoenixMenuUI.html":{}}}],["this.scenemanager.changeobjectcolor(object",{"_index":1166,"title":{},"body":{"classes/DatGUIMenuUI.html":{},"classes/PhoenixMenuUI.html":{}}}],["this.scenemanager.collectionfilter(collectionname",{"_index":1244,"title":{},"body":{"classes/DatGUIMenuUI.html":{},"classes/PhoenixMenuUI.html":{}}}],["this.scenemanager.getobjectbyname(labelid",{"_index":1282,"title":{},"body":{"classes/DatGUIMenuUI.html":{},"classes/PhoenixMenuUI.html":{}}}],["this.scenemanager.getobjectbyname(scenemanager.geometries_id",{"_index":1145,"title":{},"body":{"classes/DatGUIMenuUI.html":{},"classes/PhoenixMenuUI.html":{}}}],["this.scenemanager.getobjectposition(name).setx(value",{"_index":1185,"title":{},"body":{"classes/DatGUIMenuUI.html":{}}}],["this.scenemanager.getobjectposition(name).sety(value",{"_index":1188,"title":{},"body":{"classes/DatGUIMenuUI.html":{}}}],["this.scenemanager.getobjectposition(name).setz(value",{"_index":1191,"title":{},"body":{"classes/DatGUIMenuUI.html":{}}}],["this.scenemanager.getscene",{"_index":667,"title":{},"body":{"classes/ColorManager.html":{}}}],["this.scenemanager.getscene().getobjectbyname(objectsgroup",{"_index":652,"title":{},"body":{"classes/ColorManager.html":{}}}],["this.scenemanager.groupvisibility",{"_index":1223,"title":{},"body":{"classes/DatGUIMenuUI.html":{},"classes/PhoenixMenuUI.html":{}}}],["this.scenemanager.groupvisibility(scenemanager.event_data_id",{"_index":1207,"title":{},"body":{"classes/DatGUIMenuUI.html":{},"classes/PhoenixMenuUI.html":{}}}],["this.scenemanager.groupvisibility(scenemanager.geometries_id",{"_index":1864,"title":{},"body":{"classes/PhoenixMenuUI.html":{}}}],["this.scenemanager.objectvisibility",{"_index":1144,"title":{},"body":{"classes/DatGUIMenuUI.html":{},"classes/PhoenixMenuUI.html":{}}}],["this.scenemanager.objectvisibility(collectionobject",{"_index":1228,"title":{},"body":{"classes/DatGUIMenuUI.html":{},"classes/PhoenixMenuUI.html":{}}}],["this.scenemanager.objectvisibility(labelobject",{"_index":1277,"title":{},"body":{"classes/DatGUIMenuUI.html":{},"classes/PhoenixMenuUI.html":{}}}],["this.scenemanager.objectvisibility(object",{"_index":1175,"title":{},"body":{"classes/DatGUIMenuUI.html":{},"classes/PhoenixMenuUI.html":{}}}],["this.scenemanager.removegeometry(object",{"_index":1198,"title":{},"body":{"classes/DatGUIMenuUI.html":{},"classes/PhoenixMenuUI.html":{}}}],["this.scenemanager.scaleobject",{"_index":1871,"title":{},"body":{"classes/PhoenixMenuUI.html":{}}}],["this.scenemanager.scaleobject(object",{"_index":1179,"title":{},"body":{"classes/DatGUIMenuUI.html":{}}}],["this.scenemanager.setgeometryopacity",{"_index":1869,"title":{},"body":{"classes/PhoenixMenuUI.html":{}}}],["this.scenemanager.setgeometryopacity(object",{"_index":1171,"title":{},"body":{"classes/DatGUIMenuUI.html":{},"classes/PhoenixMenuUI.html":{}}}],["this.scenemanager.wireframegeometries(value",{"_index":1151,"title":{},"body":{"classes/DatGUIMenuUI.html":{},"classes/PhoenixMenuUI.html":{}}}],["this.scenemanager.wireframeobjects",{"_index":1928,"title":{},"body":{"classes/PhoenixMenuUI.html":{}}}],["this.selectedcolorbyoption",{"_index":803,"title":{},"body":{"classes/ColorOptions.html":{}}}],["this.selectedobject",{"_index":2308,"title":{},"body":{"classes/SelectionManager.html":{}}}],["this.selectedobject.attributes.length",{"_index":2335,"title":{},"body":{"classes/SelectionManager.html":{}}}],["this.selectedobject.attributes.push",{"_index":2341,"title":{},"body":{"classes/SelectionManager.html":{}}}],["this.selectedobject.attributes.splice",{"_index":2334,"title":{},"body":{"classes/SelectionManager.html":{}}}],["this.selectedobject.name",{"_index":2332,"title":{},"body":{"classes/SelectionManager.html":{}}}],["this.sessioninit",{"_index":161,"title":{},"body":{"classes/ARManager.html":{},"classes/VRManager.html":{},"classes/XRManager.html":{}}}],["this.sessiontype",{"_index":3140,"title":{},"body":{"classes/XRManager.html":{}}}],["this.setattribute('color",{"_index":2545,"title":{},"body":{"classes/TracksMaterial.html":{},"classes/TracksMesh.html":{}}}],["this.setattribute('counter",{"_index":2546,"title":{},"body":{"classes/TracksMaterial.html":{},"classes/TracksMesh.html":{}}}],["this.setattribute('next",{"_index":2542,"title":{},"body":{"classes/TracksMaterial.html":{},"classes/TracksMesh.html":{}}}],["this.setattribute('position",{"_index":2540,"title":{},"body":{"classes/TracksMaterial.html":{},"classes/TracksMesh.html":{}}}],["this.setattribute('previous",{"_index":2541,"title":{},"body":{"classes/TracksMaterial.html":{},"classes/TracksMesh.html":{}}}],["this.setattribute('side",{"_index":2543,"title":{},"body":{"classes/TracksMaterial.html":{},"classes/TracksMesh.html":{}}}],["this.setattribute('track_id",{"_index":2544,"title":{},"body":{"classes/TracksMaterial.html":{},"classes/TracksMesh.html":{}}}],["this.setclippingenabled(true",{"_index":2456,"title":{},"body":{"classes/StateManager.html":{}}}],["this.setindex(this._attributes.index",{"_index":2547,"title":{},"body":{"classes/TracksMaterial.html":{},"classes/TracksMesh.html":{}}}],["this.setmainrenderer(renderer",{"_index":2150,"title":{},"body":{"classes/RendererManager.html":{}}}],["this.setupvrcontrols",{"_index":2818,"title":{},"body":{"classes/VRManager.html":{}}}],["this.setvalues(params",{"_index":2617,"title":{},"body":{"classes/TracksMaterial.html":{},"classes/TracksMesh.html":{}}}],["this.shouldcolorbycharge(objectuserdata",{"_index":817,"title":{},"body":{"classes/ColorOptions.html":{}}}],["this.side",{"_index":2489,"title":{},"body":{"classes/TracksMaterial.html":{},"classes/TracksMesh.html":{}}}],["this.startclippingangle.update(angle",{"_index":2465,"title":{},"body":{"classes/StateManager.html":{}}}],["this.startclippingangle.value",{"_index":2441,"title":{},"body":{"classes/StateManager.html":{}}}],["this.statemanager",{"_index":2967,"title":{},"body":{"interfaces/Window.html":{}}}],["this.three.eventdatadepthtest(value",{"_index":1212,"title":{},"body":{"classes/DatGUIMenuUI.html":{},"classes/PhoenixMenuUI.html":{}}}],["this.three.getcolormanager",{"_index":1906,"title":{},"body":{"classes/PhoenixMenuUI.html":{}}}],["this.three.getcolormanager().collectioncolor(collectionname",{"_index":1231,"title":{},"body":{"classes/DatGUIMenuUI.html":{}}}],["this.three.getcolormanager().collectioncolorrandom(collectionname",{"_index":1221,"title":{},"body":{"classes/DatGUIMenuUI.html":{}}}],["this.three.getobjectposition(name",{"_index":1181,"title":{},"body":{"classes/DatGUIMenuUI.html":{}}}],["this.togglestate",{"_index":1768,"title":{},"body":{"classes/PhoenixMenuNode.html":{}}}],["this.toload",{"_index":1675,"title":{},"body":{"classes/LoadingManager.html":{}}}],["this.toload.length",{"_index":1658,"title":{},"body":{"classes/LoadingManager.html":{}}}],["this.toload.push(id",{"_index":1653,"title":{},"body":{"classes/LoadingManager.html":{}}}],["this.toload.sort().join",{"_index":1660,"title":{},"body":{"classes/LoadingManager.html":{}}}],["this.track_id",{"_index":2491,"title":{},"body":{"classes/TracksMaterial.html":{},"classes/TracksMesh.html":{}}}],["this.type",{"_index":2485,"title":{},"body":{"classes/TracksMaterial.html":{},"classes/TracksMesh.html":{}}}],["this.ui",{"_index":2895,"title":{},"body":{"interfaces/Window.html":{}}}],["this.ui.addcollection(objecttype",{"_index":3061,"title":{},"body":{"interfaces/Window.html":{}}}],["this.ui.addeventdatafolder",{"_index":2950,"title":{},"body":{"interfaces/Window.html":{}}}],["this.ui.addeventdatatypefolder(objecttype",{"_index":3059,"title":{},"body":{"interfaces/Window.html":{}}}],["this.ui.addgeometry(geom",{"_index":3064,"title":{},"body":{"interfaces/Window.html":{}}}],["this.ui.addgeometry(object",{"_index":2983,"title":{},"body":{"interfaces/Window.html":{}}}],["this.ui.addlabel(labelid",{"_index":3117,"title":{},"body":{"interfaces/Window.html":{}}}],["this.ui.addlabelsfolder",{"_index":2951,"title":{},"body":{"interfaces/Window.html":{}}}],["this.ui.enablekeyboardcontrols",{"_index":3107,"title":{},"body":{"interfaces/Window.html":{}}}],["this.ui.init(configuration",{"_index":2901,"title":{},"body":{"interfaces/Window.html":{}}}],["this.ui.loadeventfolderphoenixmenustate",{"_index":2959,"title":{},"body":{"interfaces/Window.html":{}}}],["this.ui.removelabel(labelid",{"_index":3116,"title":{},"body":{"interfaces/Window.html":{}}}],["this.ui.updateui",{"_index":2904,"title":{},"body":{"interfaces/Window.html":{}}}],["this.uniforms.linewidth.value",{"_index":2613,"title":{},"body":{"classes/TracksMaterial.html":{},"classes/TracksMesh.html":{}}}],["this.uniforms.progress.value",{"_index":2616,"title":{},"body":{"classes/TracksMaterial.html":{},"classes/TracksMesh.html":{}}}],["this.uniforms.resolution.value",{"_index":2614,"title":{},"body":{"classes/TracksMaterial.html":{},"classes/TracksMesh.html":{}}}],["this.uniforms.resolution.value.copy(value",{"_index":2615,"title":{},"body":{"classes/TracksMaterial.html":{},"classes/TracksMesh.html":{}}}],["this.urloptions",{"_index":2683,"title":{},"body":{"classes/URLOptionsManager.html":{}}}],["this.urloptions.get('config",{"_index":2703,"title":{},"body":{"classes/URLOptionsManager.html":{}}}],["this.urloptions.get('embed",{"_index":2771,"title":{},"body":{"classes/URLOptionsManager.html":{}}}],["this.urloptions.get('file",{"_index":2692,"title":{},"body":{"classes/URLOptionsManager.html":{}}}],["this.urloptions.get('type",{"_index":2693,"title":{},"body":{"classes/URLOptionsManager.html":{}}}],["this.urloptions.get('type').tolowercase",{"_index":2700,"title":{},"body":{"classes/URLOptionsManager.html":{}}}],["this.urloptions.get(urloption",{"_index":2776,"title":{},"body":{"classes/URLOptionsManager.html":{}}}],["this.urloptionsmanager",{"_index":2906,"title":{},"body":{"interfaces/Window.html":{}}}],["this.urloptionsmanager.applyoptions",{"_index":2909,"title":{},"body":{"interfaces/Window.html":{}}}],["this.value",{"_index":215,"title":{},"body":{"classes/ActiveVariable.html":{}}}],["this.xractive",{"_index":3146,"title":{},"body":{"classes/XRManager.html":{}}}],["this.xrcamera",{"_index":3155,"title":{},"body":{"classes/XRManager.html":{}}}],["this.xrcamera.name",{"_index":3160,"title":{},"body":{"classes/XRManager.html":{}}}],["this.xrcamera.position",{"_index":3162,"title":{},"body":{"classes/XRManager.html":{}}}],["this.xrcamera.position.addscaledvector(direction",{"_index":2866,"title":{},"body":{"classes/VRManager.html":{}}}],["this.xrcamera?.getworlddirection(direction",{"_index":2864,"title":{},"body":{"classes/VRManager.html":{}}}],["thr",{"_index":3042,"title":{},"body":{"interfaces/Window.html":{}}}],["three",{"_index":136,"title":{},"body":{"classes/ARManager.html":{},"interfaces/AnimationPreset.html":{},"classes/CMSObjects.html":{},"classes/ColorManager.html":{},"classes/ColorOptions.html":{},"interfaces/Configuration.html":{},"classes/CoordinateHelper.html":{},"classes/DatGUIMenuUI.html":{},"classes/EffectsManager.html":{},"classes/ExportManager.html":{},"classes/Field.html":{},"classes/PhoenixMenuUI.html":{},"interfaces/PhoenixUI.html":{},"classes/RKHelper.html":{},"classes/RendererManager.html":{},"classes/RungeKutta.html":{},"classes/SelectionManager.html":{},"classes/State.html":{},"classes/StateManager.html":{},"classes/TracksMaterial.html":{},"classes/TracksMesh.html":{},"classes/VRManager.html":{},"interfaces/Window.html":{},"classes/XRManager.html":{},"dependencies.html":{}}}],["three,js",{"_index":2125,"title":{},"body":{"classes/RendererManager.html":{}}}],["three.getscenemanager",{"_index":1131,"title":{},"body":{"classes/DatGUIMenuUI.html":{},"classes/PhoenixMenuUI.html":{}}}],["three.js",{"_index":55,"title":{},"body":{"classes/ARManager.html":{},"interfaces/AnimationPreset.html":{},"classes/ColorManager.html":{},"classes/ColorOptions.html":{},"classes/DatGUIMenuUI.html":{},"classes/EffectsManager.html":{},"classes/PhoenixMenuUI.html":{},"classes/RendererManager.html":{},"classes/SelectionManager.html":{},"interfaces/Window.html":{},"changelog.html":{},"index.html":{}}}],["three/examples/jsm/exporters/gltfexporter",{"_index":1449,"title":{},"body":{"classes/ExportManager.html":{}}}],["three/examples/jsm/exporters/objexporter",{"_index":1447,"title":{},"body":{"classes/ExportManager.html":{}}}],["three/examples/jsm/postprocessing/effectcomposer",{"_index":1338,"title":{},"body":{"classes/EffectsManager.html":{}}}],["three/examples/jsm/postprocessing/outlinepass",{"_index":1342,"title":{},"body":{"classes/EffectsManager.html":{}}}],["three/examples/jsm/postprocessing/outlinepass.js",{"_index":2295,"title":{},"body":{"classes/SelectionManager.html":{}}}],["three/examples/jsm/postprocessing/pass",{"_index":1343,"title":{},"body":{"classes/EffectsManager.html":{}}}],["three/examples/jsm/postprocessing/renderpass",{"_index":1341,"title":{},"body":{"classes/EffectsManager.html":{}}}],["three/examples/jsm/webxr/xrcontrollermodelfactory",{"_index":2809,"title":{},"body":{"classes/VRManager.html":{}}}],["threejs",{"_index":932,"title":{},"body":{"classes/CoordinateHelper.html":{}}}],["threemanager",{"_index":1058,"title":{},"body":{"classes/DatGUIMenuUI.html":{},"interfaces/EventDataLoader.html":{},"classes/PhoenixMenuUI.html":{},"interfaces/Window.html":{},"coverage.html":{}}}],["threemanager(this.infologger",{"_index":2894,"title":{},"body":{"interfaces/Window.html":{}}}],["through",{"_index":282,"title":{},"body":{"interfaces/AnimationPreset.html":{},"classes/Field.html":{},"classes/PrettySymbols.html":{},"classes/RungeKutta.html":{},"classes/State.html":{},"classes/URLOptionsManager.html":{},"interfaces/Window.html":{},"changelog.html":{}}}],["throwing",{"_index":3346,"title":{},"body":{"changelog.html":{}}}],["thus",{"_index":2926,"title":{},"body":{"interfaces/Window.html":{}}}],["time",{"_index":228,"title":{},"body":{"interfaces/AnimationPreset.html":{},"interfaces/EventDataLoader.html":{},"interfaces/Window.html":{},"changelog.html":{}}}],["title",{"_index":3894,"title":{},"body":{"miscellaneous/variables.html":{}}}],["tmp1",{"_index":949,"title":{},"body":{"classes/CoordinateHelper.html":{}}}],["tmp2",{"_index":948,"title":{},"body":{"classes/CoordinateHelper.html":{}}}],["toggle",{"_index":1137,"title":{},"body":{"classes/DatGUIMenuUI.html":{},"classes/PhoenixMenuNode.html":{},"changelog.html":{}}}],["toggled",{"_index":3430,"title":{},"body":{"changelog.html":{}}}],["toggles",{"_index":1082,"title":{},"body":{"classes/DatGUIMenuUI.html":{},"classes/PhoenixMenuUI.html":{},"interfaces/PhoenixUI.html":{},"interfaces/Window.html":{}}}],["toggleselfanddescendants",{"_index":1696,"title":{},"body":{"classes/PhoenixMenuNode.html":{}}}],["toggleselfanddescendants(value",{"_index":1737,"title":{},"body":{"classes/PhoenixMenuNode.html":{}}}],["togglestate",{"_index":1687,"title":{},"body":{"classes/PhoenixMenuNode.html":{}}}],["toggling",{"_index":1700,"title":{},"body":{"classes/PhoenixMenuNode.html":{},"changelog.html":{}}}],["tojson",{"_index":3030,"title":{},"body":{"interfaces/Window.html":{}}}],["toload",{"_index":1622,"title":{},"body":{"classes/LoadingManager.html":{}}}],["top",{"_index":68,"title":{},"body":{"classes/ARManager.html":{},"classes/CMSObjects.html":{},"classes/DatGUIMenuUI.html":{}}}],["totalitems",{"_index":1668,"title":{},"body":{"classes/LoadingManager.html":{}}}],["totalprogress",{"_index":1664,"title":{},"body":{"classes/LoadingManager.html":{}}}],["touch",{"_index":2262,"title":{},"body":{"classes/SelectionManager.html":{}}}],["touchevent",{"_index":2359,"title":{},"body":{"classes/SelectionManager.html":{}}}],["towards",{"_index":2801,"title":{},"body":{"classes/VRManager.html":{}}}],["track",{"_index":341,"title":{},"body":{"interfaces/AnimationPreset.html":{},"classes/RKHelper.html":{},"classes/TracksMaterial.html":{},"classes/TracksMesh.html":{},"changelog.html":{}}}],["track.children[0",{"_index":509,"title":{},"body":{"interfaces/AnimationPreset.html":{}}}],["track.dparams",{"_index":2068,"title":{},"body":{"classes/RKHelper.html":{}}}],["track.pos",{"_index":2066,"title":{},"body":{"classes/RKHelper.html":{}}}],["track_id",{"_index":2480,"title":{},"body":{"classes/TracksMaterial.html":{},"classes/TracksMesh.html":{}}}],["trackcollection",{"_index":676,"title":{},"body":{"classes/ColorManager.html":{}}}],["trackcollection.children[trackindex].traverse((trackobject",{"_index":679,"title":{},"body":{"classes/ColorManager.html":{}}}],["trackcolor",{"_index":508,"title":{},"body":{"interfaces/AnimationPreset.html":{}}}],["tracking",{"_index":2816,"title":{},"body":{"classes/VRManager.html":{}}}],["trackmlloader",{"_index":3750,"title":{},"body":{"coverage.html":{}}}],["trackobject?.['material']?.color?.set(colorfortracksvertex",{"_index":680,"title":{},"body":{"classes/ColorManager.html":{}}}],["tracks",{"_index":337,"title":{},"body":{"interfaces/AnimationPreset.html":{},"classes/ColorManager.html":{},"classes/ColorOptions.html":{},"classes/DatGUIMenuUI.html":{},"classes/PhoenixMenuUI.html":{},"interfaces/PhoenixUI.html":{},"classes/RKHelper.html":{},"classes/TracksMaterial.html":{},"classes/TracksMesh.html":{},"changelog.html":{},"miscellaneous/variables.html":{}}}],["trackscollection",{"_index":2063,"title":{},"body":{"classes/RKHelper.html":{}}}],["trackscollections",{"_index":2062,"title":{},"body":{"classes/RKHelper.html":{}}}],["trackscollections[trackscollection",{"_index":2065,"title":{},"body":{"classes/RKHelper.html":{}}}],["trackscollectionsevent",{"_index":2056,"title":{},"body":{"classes/RKHelper.html":{}}}],["tracksmaterial",{"_index":2468,"title":{"classes/TracksMaterial.html":{}},"body":{"classes/TracksMaterial.html":{},"classes/TracksMesh.html":{},"coverage.html":{}}}],["tracksmesh",{"_index":251,"title":{"classes/TracksMesh.html":{}},"body":{"interfaces/AnimationPreset.html":{},"classes/TracksMaterial.html":{},"classes/TracksMesh.html":{},"coverage.html":{}}}],["transformations",{"_index":3524,"title":{},"body":{"changelog.html":{}}}],["transforming/changing",{"_index":1954,"title":{},"body":{"classes/PresetView.html":{}}}],["translation",{"_index":284,"title":{},"body":{"interfaces/AnimationPreset.html":{},"interfaces/Window.html":{}}}],["transparent",{"_index":170,"title":{},"body":{"classes/ARManager.html":{},"interfaces/AnimationPreset.html":{},"classes/CMSObjects.html":{},"changelog.html":{}}}],["traverse",{"_index":332,"title":{},"body":{"interfaces/AnimationPreset.html":{}}}],["traversed",{"_index":2279,"title":{},"body":{"classes/SelectionManager.html":{}}}],["tree",{"_index":1726,"title":{},"body":{"classes/PhoenixMenuNode.html":{}}}],["true",{"_index":59,"title":{},"body":{"classes/ARManager.html":{},"interfaces/AnimationPreset.html":{},"classes/CMSObjects.html":{},"classes/ColorOptions.html":{},"interfaces/Configuration.html":{},"classes/Cut.html":{},"classes/DatGUIMenuUI.html":{},"classes/EffectsManager.html":{},"classes/Field.html":{},"classes/PhoenixMenuNode.html":{},"classes/PhoenixMenuUI.html":{},"classes/RKHelper.html":{},"classes/RendererManager.html":{},"classes/RungeKutta.html":{},"classes/ScriptLoader.html":{},"classes/SelectionManager.html":{},"classes/State.html":{},"classes/TracksMaterial.html":{},"classes/TracksMesh.html":{},"classes/URLOptionsManager.html":{},"interfaces/Window.html":{},"classes/XRManager.html":{}}}],["truncate",{"_index":1697,"title":{},"body":{"classes/PhoenixMenuNode.html":{}}}],["try",{"_index":1522,"title":{},"body":{"classes/Field.html":{},"classes/RungeKutta.html":{},"classes/State.html":{},"classes/URLOptionsManager.html":{},"changelog.html":{},"miscellaneous/variables.html":{}}}],["tryrungekuttastep",{"_index":1524,"title":{},"body":{"classes/Field.html":{},"classes/RungeKutta.html":{},"classes/State.html":{}}}],["tryrungekuttastep(state.stepsize",{"_index":1556,"title":{},"body":{"classes/Field.html":{},"classes/RungeKutta.html":{},"classes/State.html":{}}}],["tube",{"_index":3624,"title":{},"body":{"changelog.html":{}}}],["tubegeometry",{"_index":240,"title":{},"body":{"interfaces/AnimationPreset.html":{}}}],["tween",{"_index":236,"title":{},"body":{"interfaces/AnimationPreset.html":{},"interfaces/Window.html":{}}}],["tween(animationclipplane).to",{"_index":460,"title":{},"body":{"interfaces/AnimationPreset.html":{}}}],["tween(animationsphere).to",{"_index":404,"title":{},"body":{"interfaces/AnimationPreset.html":{}}}],["tween(eventobject.material).to",{"_index":357,"title":{},"body":{"interfaces/AnimationPreset.html":{}}}],["tween(particle.material",{"_index":496,"title":{},"body":{"interfaces/AnimationPreset.html":{}}}],["tween(particle.position",{"_index":499,"title":{},"body":{"interfaces/AnimationPreset.html":{}}}],["tween(this.activecamera.position).to",{"_index":273,"title":{},"body":{"interfaces/AnimationPreset.html":{}}}],["tween.easing(easing",{"_index":280,"title":{},"body":{"interfaces/AnimationPreset.html":{}}}],["tween.easing(easing.quartic.out).start",{"_index":433,"title":{},"body":{"interfaces/AnimationPreset.html":{}}}],["tween.js",{"_index":255,"title":{},"body":{"interfaces/AnimationPreset.html":{}}}],["tween.start",{"_index":462,"title":{},"body":{"interfaces/AnimationPreset.html":{}}}],["tweenduration",{"_index":285,"title":{},"body":{"interfaces/AnimationPreset.html":{},"interfaces/Window.html":{}}}],["tweenjs/tween.js",{"_index":239,"title":{},"body":{"interfaces/AnimationPreset.html":{},"dependencies.html":{}}}],["tweens",{"_index":432,"title":{},"body":{"interfaces/AnimationPreset.html":{}}}],["two",{"_index":472,"title":{},"body":{"interfaces/AnimationPreset.html":{},"classes/RendererManager.html":{}}}],["type",{"_index":53,"title":{},"body":{"classes/ARManager.html":{},"classes/ActiveVariable.html":{},"interfaces/AnimationPreset.html":{},"classes/CMSObjects.html":{},"classes/ColorManager.html":{},"classes/ColorOptions.html":{},"interfaces/Configuration.html":{},"classes/CoordinateHelper.html":{},"classes/Cut.html":{},"classes/DatGUIMenuUI.html":{},"classes/EffectsManager.html":{},"interfaces/EventDataLoader.html":{},"classes/ExportManager.html":{},"classes/Field.html":{},"classes/InfoLogger.html":{},"classes/LoadingManager.html":{},"classes/PhoenixMenuNode.html":{},"classes/PhoenixMenuUI.html":{},"interfaces/PhoenixUI.html":{},"classes/PresetView.html":{},"classes/PrettySymbols.html":{},"classes/RKHelper.html":{},"classes/RendererManager.html":{},"classes/RungeKutta.html":{},"classes/ScriptLoader.html":{},"classes/SelectionManager.html":{},"classes/State.html":{},"classes/StateManager.html":{},"classes/TracksMaterial.html":{},"classes/TracksMesh.html":{},"classes/URLOptionsManager.html":{},"classes/VRManager.html":{},"interfaces/Window.html":{},"classes/XRManager.html":{},"changelog.html":{},"coverage.html":{},"miscellaneous/enumerations.html":{},"miscellaneous/typealiases.html":{},"miscellaneous/variables.html":{}}}],["typealiases",{"_index":3828,"title":{"miscellaneous/typealiases.html":{}},"body":{}}],["typefolder",{"_index":1213,"title":{},"body":{"classes/DatGUIMenuUI.html":{},"classes/PhoenixMenuUI.html":{}}}],["typefolder.addchild",{"_index":1898,"title":{},"body":{"classes/PhoenixMenuUI.html":{}}}],["typefolder.addfolder(collectionname",{"_index":1225,"title":{},"body":{"classes/DatGUIMenuUI.html":{}}}],["typefolder.name",{"_index":1904,"title":{},"body":{"classes/PhoenixMenuUI.html":{}}}],["typename",{"_index":1087,"title":{},"body":{"classes/DatGUIMenuUI.html":{},"classes/PhoenixMenuUI.html":{},"interfaces/PhoenixUI.html":{}}}],["typeof",{"_index":270,"title":{},"body":{"interfaces/AnimationPreset.html":{},"classes/PhoenixMenuNode.html":{},"classes/SelectionManager.html":{},"classes/StateManager.html":{},"interfaces/Window.html":{}}}],["types",{"_index":1743,"title":{},"body":{"classes/PhoenixMenuNode.html":{},"changelog.html":{},"miscellaneous/variables.html":{}}}],["types.ts",{"_index":3833,"title":{},"body":{"miscellaneous/typealiases.html":{}}}],["types/three",{"_index":3325,"title":{},"body":{"changelog.html":{}}}],["typing",{"_index":3590,"title":{},"body":{"changelog.html":{}}}],["ui",{"_index":1036,"title":{},"body":{"classes/DatGUIMenuUI.html":{},"interfaces/EventDataLoader.html":{},"classes/PhoenixMenuUI.html":{},"interfaces/PhoenixUI.html":{},"classes/StateManager.html":{},"classes/URLOptionsManager.html":{},"interfaces/Window.html":{},"changelog.html":{},"miscellaneous/typealiases.html":{}}}],["ui.ts",{"_index":1034,"title":{},"body":{"classes/DatGUIMenuUI.html":{},"classes/PhoenixMenuUI.html":{},"interfaces/PhoenixUI.html":{},"coverage.html":{}}}],["ui.ts:109",{"_index":1090,"title":{},"body":{"classes/DatGUIMenuUI.html":{}}}],["ui.ts:11",{"_index":1948,"title":{},"body":{"interfaces/PhoenixUI.html":{}}}],["ui.ts:116",{"_index":1852,"title":{},"body":{"classes/PhoenixMenuUI.html":{}}}],["ui.ts:16",{"_index":1945,"title":{},"body":{"interfaces/PhoenixUI.html":{}}}],["ui.ts:175",{"_index":1849,"title":{},"body":{"classes/PhoenixMenuUI.html":{}}}],["ui.ts:187",{"_index":1115,"title":{},"body":{"classes/DatGUIMenuUI.html":{}}}],["ui.ts:19",{"_index":1074,"title":{},"body":{"classes/DatGUIMenuUI.html":{}}}],["ui.ts:200",{"_index":1081,"title":{},"body":{"classes/DatGUIMenuUI.html":{}}}],["ui.ts:201",{"_index":1850,"title":{},"body":{"classes/PhoenixMenuUI.html":{}}}],["ui.ts:21",{"_index":1065,"title":{},"body":{"classes/DatGUIMenuUI.html":{},"classes/PhoenixMenuUI.html":{}}}],["ui.ts:219",{"_index":1844,"title":{},"body":{"classes/PhoenixMenuUI.html":{}}}],["ui.ts:23",{"_index":1068,"title":{},"body":{"classes/DatGUIMenuUI.html":{},"classes/PhoenixMenuUI.html":{},"interfaces/PhoenixUI.html":{}}}],["ui.ts:230",{"_index":1086,"title":{},"body":{"classes/DatGUIMenuUI.html":{}}}],["ui.ts:25",{"_index":1842,"title":{},"body":{"classes/PhoenixMenuUI.html":{}}}],["ui.ts:254",{"_index":1077,"title":{},"body":{"classes/DatGUIMenuUI.html":{}}}],["ui.ts:27",{"_index":1843,"title":{},"body":{"classes/PhoenixMenuUI.html":{}}}],["ui.ts:273",{"_index":1846,"title":{},"body":{"classes/PhoenixMenuUI.html":{}}}],["ui.ts:28",{"_index":1944,"title":{},"body":{"interfaces/PhoenixUI.html":{}}}],["ui.ts:29",{"_index":1841,"title":{},"body":{"classes/PhoenixMenuUI.html":{}}}],["ui.ts:32",{"_index":1063,"title":{},"body":{"classes/DatGUIMenuUI.html":{}}}],["ui.ts:332",{"_index":1103,"title":{},"body":{"classes/DatGUIMenuUI.html":{},"classes/PhoenixMenuUI.html":{}}}],["ui.ts:34",{"_index":1062,"title":{},"body":{"classes/DatGUIMenuUI.html":{},"interfaces/PhoenixUI.html":{}}}],["ui.ts:36",{"_index":1069,"title":{},"body":{"classes/DatGUIMenuUI.html":{}}}],["ui.ts:369",{"_index":1855,"title":{},"body":{"classes/PhoenixMenuUI.html":{}}}],["ui.ts:384",{"_index":1097,"title":{},"body":{"classes/DatGUIMenuUI.html":{}}}],["ui.ts:39",{"_index":1071,"title":{},"body":{"classes/DatGUIMenuUI.html":{}}}],["ui.ts:41",{"_index":1073,"title":{},"body":{"classes/DatGUIMenuUI.html":{}}}],["ui.ts:419",{"_index":1854,"title":{},"body":{"classes/PhoenixMenuUI.html":{}}}],["ui.ts:425",{"_index":1113,"title":{},"body":{"classes/DatGUIMenuUI.html":{}}}],["ui.ts:43",{"_index":1059,"title":{},"body":{"classes/DatGUIMenuUI.html":{},"interfaces/PhoenixUI.html":{}}}],["ui.ts:440",{"_index":1110,"title":{},"body":{"classes/DatGUIMenuUI.html":{}}}],["ui.ts:460",{"_index":1860,"title":{},"body":{"classes/PhoenixMenuUI.html":{}}}],["ui.ts:475",{"_index":1857,"title":{},"body":{"classes/PhoenixMenuUI.html":{}}}],["ui.ts:484",{"_index":1858,"title":{},"body":{"classes/PhoenixMenuUI.html":{}}}],["ui.ts:49",{"_index":1856,"title":{},"body":{"classes/PhoenixMenuUI.html":{}}}],["ui.ts:54",{"_index":1947,"title":{},"body":{"interfaces/PhoenixUI.html":{}}}],["ui.ts:61",{"_index":1946,"title":{},"body":{"interfaces/PhoenixUI.html":{}}}],["ui.ts:63",{"_index":1853,"title":{},"body":{"classes/PhoenixMenuUI.html":{}}}],["ui.ts:67",{"_index":1106,"title":{},"body":{"classes/DatGUIMenuUI.html":{}}}],["ui.ts:68",{"_index":1950,"title":{},"body":{"interfaces/PhoenixUI.html":{}}}],["ui.ts:75",{"_index":1949,"title":{},"body":{"interfaces/PhoenixUI.html":{}}}],["ui.ts:78",{"_index":1094,"title":{},"body":{"classes/DatGUIMenuUI.html":{}}}],["uiloop",{"_index":2903,"title":{},"body":{"interfaces/Window.html":{}}}],["uimanager",{"_index":1385,"title":{},"body":{"interfaces/EventDataLoader.html":{},"interfaces/Window.html":{},"coverage.html":{}}}],["uimanager(this.graphicslibrary",{"_index":2896,"title":{},"body":{"interfaces/Window.html":{}}}],["uimenu",{"_index":2766,"title":{},"body":{"classes/URLOptionsManager.html":{}}}],["uint32array(this.indices_array",{"_index":2522,"title":{},"body":{"classes/TracksMaterial.html":{},"classes/TracksMesh.html":{}}}],["undefined",{"_index":788,"title":{},"body":{"classes/ColorOptions.html":{},"classes/DatGUIMenuUI.html":{},"classes/LoadingManager.html":{},"classes/PhoenixMenuNode.html":{},"classes/PhoenixMenuUI.html":{},"classes/StateManager.html":{},"interfaces/Window.html":{},"classes/XRManager.html":{},"changelog.html":{}}}],["undefined/null",{"_index":1762,"title":{},"body":{"classes/PhoenixMenuNode.html":{}}}],["uniform",{"_index":2560,"title":{},"body":{"classes/TracksMaterial.html":{},"classes/TracksMesh.html":{}}}],["uniforms",{"_index":2604,"title":{},"body":{"classes/TracksMaterial.html":{},"classes/TracksMesh.html":{}}}],["unique",{"_index":1099,"title":{},"body":{"classes/DatGUIMenuUI.html":{},"interfaces/EventDataLoader.html":{},"classes/PhoenixMenuUI.html":{},"interfaces/PhoenixUI.html":{},"changelog.html":{}}}],["unit",{"_index":2391,"title":{},"body":{"classes/State.html":{},"classes/VRManager.html":{}}}],["unitc",{"_index":2381,"title":{},"body":{"classes/State.html":{}}}],["units",{"_index":1503,"title":{},"body":{"classes/Field.html":{},"classes/RungeKutta.html":{},"classes/State.html":{}}}],["unreal",{"_index":1297,"title":{},"body":{"classes/EffectsManager.html":{},"classes/SelectionManager.html":{}}}],["until",{"_index":1582,"title":{},"body":{"classes/Field.html":{},"classes/RKHelper.html":{},"classes/RungeKutta.html":{},"classes/State.html":{}}}],["up",{"_index":547,"title":{},"body":{"classes/CMSObjects.html":{},"classes/DatGUIMenuUI.html":{},"classes/PhoenixMenuUI.html":{},"interfaces/PhoenixUI.html":{},"classes/RendererManager.html":{},"classes/URLOptionsManager.html":{},"classes/VRManager.html":{},"interfaces/Window.html":{},"classes/XRManager.html":{},"changelog.html":{}}}],["update",{"_index":198,"title":{},"body":{"classes/ActiveVariable.html":{},"classes/Field.html":{},"classes/RungeKutta.html":{},"classes/State.html":{},"changelog.html":{}}}],["update(updatedvalue",{"_index":210,"title":{},"body":{"classes/ActiveVariable.html":{}}}],["updateanimationsphere",{"_index":407,"title":{},"body":{"interfaces/AnimationPreset.html":{}}}],["updateanimationsphere.containspoint",{"_index":416,"title":{},"body":{"interfaces/AnimationPreset.html":{}}}],["updateanimationsphere.containspoint(obj.position",{"_index":422,"title":{},"body":{"interfaces/AnimationPreset.html":{}}}],["updated",{"_index":150,"title":{},"body":{"classes/ARManager.html":{},"classes/ActiveVariable.html":{},"classes/VRManager.html":{},"classes/XRManager.html":{},"changelog.html":{}}}],["updatedcolorbyoption",{"_index":808,"title":{},"body":{"classes/ColorOptions.html":{}}}],["updatedvalue",{"_index":212,"title":{},"body":{"classes/ActiveVariable.html":{}}}],["updating",{"_index":209,"title":{},"body":{"classes/ActiveVariable.html":{},"interfaces/AnimationPreset.html":{}}}],["upgrade",{"_index":3336,"title":{},"body":{"changelog.html":{}}}],["upper",{"_index":1003,"title":{},"body":{"classes/Cut.html":{},"changelog.html":{}}}],["url",{"_index":866,"title":{},"body":{"interfaces/Configuration.html":{},"classes/PresetView.html":{},"classes/ScriptLoader.html":{},"classes/URLOptionsManager.html":{},"interfaces/Window.html":{},"changelog.html":{},"miscellaneous/variables.html":{}}}],["url.createobjecturl(blob",{"_index":3922,"title":{},"body":{"miscellaneous/variables.html":{}}}],["urloptions",{"_index":2633,"title":{},"body":{"classes/URLOptionsManager.html":{}}}],["urloptionsmanager",{"_index":2631,"title":{"classes/URLOptionsManager.html":{}},"body":{"classes/URLOptionsManager.html":{},"interfaces/Window.html":{},"coverage.html":{}}}],["urloptionsmanager(this",{"_index":2907,"title":{},"body":{"interfaces/Window.html":{}}}],["urloptionwithids",{"_index":2673,"title":{},"body":{"classes/URLOptionsManager.html":{}}}],["urlsearchparams",{"_index":2644,"title":{},"body":{"classes/URLOptionsManager.html":{}}}],["usage",{"_index":3232,"title":{},"body":{"changelog.html":{},"index.html":{}}}],["use",{"_index":84,"title":{},"body":{"classes/ARManager.html":{},"interfaces/AnimationPreset.html":{},"classes/VRManager.html":{},"interfaces/Window.html":{},"classes/XRManager.html":{},"changelog.html":{},"index.html":{},"miscellaneous/variables.html":{}}}],["used",{"_index":110,"title":{},"body":{"classes/ARManager.html":{},"classes/EffectsManager.html":{},"classes/InfoLogger.html":{},"classes/PresetView.html":{},"classes/RKHelper.html":{},"classes/RendererManager.html":{},"classes/SelectionManager.html":{},"classes/VRManager.html":{},"interfaces/Window.html":{},"classes/XRManager.html":{},"changelog.html":{},"index.html":{},"miscellaneous/typealiases.html":{}}}],["user",{"_index":3914,"title":{},"body":{"miscellaneous/variables.html":{}}}],["userdata",{"_index":823,"title":{},"body":{"classes/ColorOptions.html":{},"changelog.html":{}}}],["uses",{"_index":953,"title":{},"body":{"classes/CoordinateHelper.html":{},"classes/RKHelper.html":{},"index.html":{}}}],["using",{"_index":254,"title":{},"body":{"interfaces/AnimationPreset.html":{},"classes/Cut.html":{},"classes/Field.html":{},"classes/RKHelper.html":{},"classes/RungeKutta.html":{},"classes/State.html":{},"classes/URLOptionsManager.html":{},"interfaces/Window.html":{}}}],["uuid",{"_index":2274,"title":{},"body":{"classes/SelectionManager.html":{},"interfaces/Window.html":{},"changelog.html":{}}}],["v1",{"_index":962,"title":{},"body":{"classes/CoordinateHelper.html":{}}}],["v2",{"_index":963,"title":{},"body":{"classes/CoordinateHelper.html":{}}}],["v_color",{"_index":2556,"title":{},"body":{"classes/TracksMaterial.html":{},"classes/TracksMesh.html":{}}}],["v_counter",{"_index":2557,"title":{},"body":{"classes/TracksMaterial.html":{},"classes/TracksMesh.html":{}}}],["v_track_id",{"_index":2559,"title":{},"body":{"classes/TracksMaterial.html":{},"classes/TracksMesh.html":{}}}],["val",{"_index":1667,"title":{},"body":{"classes/LoadingManager.html":{},"classes/SelectionManager.html":{}}}],["val.pos.x",{"_index":2077,"title":{},"body":{"classes/RKHelper.html":{}}}],["val.pos.y",{"_index":2078,"title":{},"body":{"classes/RKHelper.html":{}}}],["val.pos.z",{"_index":2079,"title":{},"body":{"classes/RKHelper.html":{}}}],["valid",{"_index":1019,"title":{},"body":{"classes/Cut.html":{}}}],["value",{"_index":58,"title":{},"body":{"classes/ARManager.html":{},"classes/ActiveVariable.html":{},"interfaces/AnimationPreset.html":{},"classes/ColorManager.html":{},"classes/ColorOptions.html":{},"classes/Cut.html":{},"classes/DatGUIMenuUI.html":{},"classes/EffectsManager.html":{},"classes/InfoLogger.html":{},"classes/LoadingManager.html":{},"classes/PhoenixMenuNode.html":{},"classes/PhoenixMenuUI.html":{},"classes/PresetView.html":{},"classes/PrettySymbols.html":{},"classes/RKHelper.html":{},"classes/RendererManager.html":{},"classes/RungeKutta.html":{},"classes/ScriptLoader.html":{},"classes/SelectionManager.html":{},"classes/State.html":{},"classes/StateManager.html":{},"classes/TracksMaterial.html":{},"classes/TracksMesh.html":{},"classes/URLOptionsManager.html":{},"classes/VRManager.html":{},"interfaces/Window.html":{},"classes/XRManager.html":{},"changelog.html":{},"miscellaneous/enumerations.html":{},"miscellaneous/variables.html":{}}}],["values",{"_index":76,"title":{},"body":{"classes/ARManager.html":{},"classes/ColorManager.html":{},"classes/ColorOptions.html":{},"classes/PhoenixMenuNode.html":{},"interfaces/Window.html":{},"changelog.html":{}}}],["variable",{"_index":191,"title":{},"body":{"classes/ActiveVariable.html":{},"classes/SelectionManager.html":{},"classes/StateManager.html":{},"classes/URLOptionsManager.html":{},"interfaces/Window.html":{},"changelog.html":{},"coverage.html":{}}}],["variable.ts",{"_index":190,"title":{},"body":{"classes/ActiveVariable.html":{},"coverage.html":{},"miscellaneous/typealiases.html":{}}}],["variable.ts:12",{"_index":206,"title":{},"body":{"classes/ActiveVariable.html":{}}}],["variable.ts:17",{"_index":205,"title":{},"body":{"classes/ActiveVariable.html":{}}}],["variable.ts:23",{"_index":211,"title":{},"body":{"classes/ActiveVariable.html":{}}}],["variable.ts:32",{"_index":208,"title":{},"body":{"classes/ActiveVariable.html":{}}}],["variable.ts:7",{"_index":201,"title":{},"body":{"classes/ActiveVariable.html":{}}}],["variables",{"_index":3197,"title":{"miscellaneous/variables.html":{}},"body":{"changelog.html":{},"miscellaneous/variables.html":{}}}],["varying",{"_index":2555,"title":{},"body":{"classes/TracksMaterial.html":{},"classes/TracksMesh.html":{}}}],["vec2",{"_index":2561,"title":{},"body":{"classes/TracksMaterial.html":{},"classes/TracksMesh.html":{}}}],["vec2(resolution.x",{"_index":2565,"title":{},"body":{"classes/TracksMaterial.html":{},"classes/TracksMesh.html":{}}}],["vec3",{"_index":2552,"title":{},"body":{"classes/TracksMaterial.html":{},"classes/TracksMesh.html":{}}}],["vec4",{"_index":2571,"title":{},"body":{"classes/TracksMaterial.html":{},"classes/TracksMesh.html":{}}}],["vec4(next",{"_index":2577,"title":{},"body":{"classes/TracksMaterial.html":{},"classes/TracksMesh.html":{}}}],["vec4(position",{"_index":2573,"title":{},"body":{"classes/TracksMaterial.html":{},"classes/TracksMesh.html":{}}}],["vec4(previous",{"_index":2575,"title":{},"body":{"classes/TracksMaterial.html":{},"classes/TracksMesh.html":{}}}],["vec4(v_color",{"_index":2603,"title":{},"body":{"classes/TracksMaterial.html":{},"classes/TracksMesh.html":{}}}],["vector",{"_index":955,"title":{},"body":{"classes/CoordinateHelper.html":{},"classes/VRManager.html":{}}}],["vector.applyquaternion(coordinatehelper.atlasquaternion",{"_index":957,"title":{},"body":{"classes/CoordinateHelper.html":{}}}],["vector.setfromsphericalcoords(radius",{"_index":956,"title":{},"body":{"classes/CoordinateHelper.html":{}}}],["vector2",{"_index":1339,"title":{},"body":{"classes/EffectsManager.html":{},"classes/SelectionManager.html":{},"classes/TracksMaterial.html":{},"classes/TracksMesh.html":{}}}],["vector2(1",{"_index":2605,"title":{},"body":{"classes/TracksMaterial.html":{},"classes/TracksMesh.html":{}}}],["vector2(window.innerwidth",{"_index":1360,"title":{},"body":{"classes/EffectsManager.html":{}}}],["vector3",{"_index":242,"title":{},"body":{"interfaces/AnimationPreset.html":{},"classes/CoordinateHelper.html":{},"classes/Field.html":{},"classes/RKHelper.html":{},"classes/RungeKutta.html":{},"classes/State.html":{},"classes/TracksMaterial.html":{},"classes/TracksMesh.html":{},"classes/VRManager.html":{},"classes/XRManager.html":{}}}],["vector3().fromarray(hitposition",{"_index":417,"title":{},"body":{"interfaces/AnimationPreset.html":{}}}],["vector3(0",{"_index":386,"title":{},"body":{"interfaces/AnimationPreset.html":{},"classes/CoordinateHelper.html":{},"classes/State.html":{},"classes/VRManager.html":{},"classes/XRManager.html":{}}}],["version",{"_index":3178,"title":{},"body":{"changelog.html":{},"properties.html":{}}}],["versions",{"_index":3184,"title":{},"body":{"changelog.html":{}}}],["vertex",{"_index":455,"title":{},"body":{"interfaces/AnimationPreset.html":{},"classes/ColorManager.html":{},"classes/ColorOptions.html":{},"classes/TracksMaterial.html":{},"classes/TracksMesh.html":{},"changelog.html":{},"miscellaneous/enumerations.html":{}}}],["vertexshader",{"_index":2606,"title":{},"body":{"classes/TracksMaterial.html":{},"classes/TracksMesh.html":{}}}],["vertices",{"_index":453,"title":{},"body":{"interfaces/AnimationPreset.html":{},"classes/ColorManager.html":{},"changelog.html":{},"miscellaneous/variables.html":{}}}],["vertices.traverse((object",{"_index":669,"title":{},"body":{"classes/ColorManager.html":{}}}],["view",{"_index":869,"title":{},"body":{"interfaces/Configuration.html":{},"classes/PresetView.html":{},"classes/RendererManager.html":{},"interfaces/Window.html":{},"changelog.html":{},"miscellaneous/enumerations.html":{}}}],["view.model",{"_index":886,"title":{},"body":{"interfaces/Configuration.html":{}}}],["view.model.ts",{"_index":1952,"title":{},"body":{"classes/PresetView.html":{},"coverage.html":{},"miscellaneous/enumerations.html":{}}}],["view.model.ts:16",{"_index":1973,"title":{},"body":{"classes/PresetView.html":{}}}],["view.model.ts:18",{"_index":1967,"title":{},"body":{"classes/PresetView.html":{}}}],["view.model.ts:20",{"_index":1968,"title":{},"body":{"classes/PresetView.html":{}}}],["view.model.ts:22",{"_index":1974,"title":{},"body":{"classes/PresetView.html":{}}}],["view.model.ts:24",{"_index":1969,"title":{},"body":{"classes/PresetView.html":{}}}],["view.model.ts:26",{"_index":1972,"title":{},"body":{"classes/PresetView.html":{}}}],["view.model.ts:28",{"_index":1964,"title":{},"body":{"classes/PresetView.html":{}}}],["view.model.ts:59",{"_index":1975,"title":{},"body":{"classes/PresetView.html":{}}}],["views",{"_index":884,"title":{},"body":{"interfaces/Configuration.html":{},"classes/PresetView.html":{},"interfaces/Window.html":{}}}],["visibilitytoggle",{"_index":1271,"title":{},"body":{"classes/DatGUIMenuUI.html":{}}}],["visibilitytoggle.onchange((value",{"_index":1273,"title":{},"body":{"classes/DatGUIMenuUI.html":{}}}],["visible",{"_index":398,"title":{},"body":{"interfaces/AnimationPreset.html":{},"classes/DatGUIMenuUI.html":{},"classes/PhoenixMenuUI.html":{},"interfaces/Window.html":{}}}],["void",{"_index":112,"title":{},"body":{"classes/ARManager.html":{},"classes/ActiveVariable.html":{},"interfaces/AnimationPreset.html":{},"classes/ColorManager.html":{},"classes/ColorOptions.html":{},"classes/Cut.html":{},"classes/DatGUIMenuUI.html":{},"classes/EffectsManager.html":{},"interfaces/EventDataLoader.html":{},"classes/ExportManager.html":{},"classes/InfoLogger.html":{},"classes/LoadingManager.html":{},"classes/PhoenixMenuNode.html":{},"classes/PhoenixMenuUI.html":{},"interfaces/PhoenixUI.html":{},"classes/RKHelper.html":{},"classes/RendererManager.html":{},"classes/RungeKutta.html":{},"classes/SelectionManager.html":{},"classes/StateManager.html":{},"classes/TracksMaterial.html":{},"classes/TracksMesh.html":{},"classes/URLOptionsManager.html":{},"classes/VRManager.html":{},"interfaces/Window.html":{},"classes/XRManager.html":{},"miscellaneous/variables.html":{}}}],["volumes",{"_index":3259,"title":{},"body":{"changelog.html":{}}}],["vr",{"_index":2781,"title":{},"body":{"classes/VRManager.html":{},"interfaces/Window.html":{},"classes/XRManager.html":{},"changelog.html":{},"miscellaneous/enumerations.html":{}}}],["vrmanager",{"_index":2779,"title":{"classes/VRManager.html":{}},"body":{"classes/VRManager.html":{},"changelog.html":{},"coverage.html":{}}}],["wait",{"_index":2229,"title":{},"body":{"classes/ScriptLoader.html":{}}}],["want",{"_index":2374,"title":{},"body":{"classes/SelectionManager.html":{}}}],["warning",{"_index":2695,"title":{},"body":{"classes/URLOptionsManager.html":{}}}],["warnings",{"_index":3187,"title":{},"body":{"changelog.html":{}}}],["web",{"_index":3817,"title":{},"body":{"properties.html":{}}}],["webglrenderer",{"_index":99,"title":{},"body":{"classes/ARManager.html":{},"classes/EffectsManager.html":{},"classes/RendererManager.html":{},"classes/VRManager.html":{},"classes/XRManager.html":{}}}],["webglrenderers",{"_index":2117,"title":{},"body":{"classes/RendererManager.html":{}}}],["webpack",{"_index":3303,"title":{},"body":{"changelog.html":{}}}],["webxr",{"_index":145,"title":{},"body":{"classes/ARManager.html":{},"classes/VRManager.html":{},"classes/XRManager.html":{}}}],["well",{"_index":3272,"title":{},"body":{"changelog.html":{}}}],["whether",{"_index":61,"title":{},"body":{"classes/ARManager.html":{},"classes/ColorOptions.html":{},"interfaces/Configuration.html":{},"classes/EffectsManager.html":{},"classes/PresetView.html":{},"classes/StateManager.html":{},"classes/VRManager.html":{},"interfaces/Window.html":{},"classes/XRManager.html":{}}}],["whose",{"_index":192,"title":{},"body":{"classes/ActiveVariable.html":{},"classes/PhoenixMenuNode.html":{}}}],["widgets",{"_index":2647,"title":{},"body":{"classes/URLOptionsManager.html":{},"changelog.html":{}}}],["width",{"_index":2916,"title":{},"body":{"interfaces/Window.html":{},"changelog.html":{}}}],["window",{"_index":2691,"title":{"interfaces/Window.html":{}},"body":{"classes/URLOptionsManager.html":{},"interfaces/Window.html":{},"changelog.html":{},"coverage.html":{}}}],["window.addeventlistener('resize",{"_index":2172,"title":{},"body":{"classes/RendererManager.html":{}}}],["window.eventdisplay",{"_index":3077,"title":{},"body":{"interfaces/Window.html":{}}}],["window.innerheight",{"_index":1361,"title":{},"body":{"classes/EffectsManager.html":{},"classes/RendererManager.html":{}}}],["window.innerwidth",{"_index":2164,"title":{},"body":{"classes/RendererManager.html":{}}}],["window.location.href.substr(window.location.href.lastindexof",{"_index":2684,"title":{},"body":{"classes/URLOptionsManager.html":{}}}],["wireframe",{"_index":1136,"title":{},"body":{"classes/DatGUIMenuUI.html":{},"classes/PhoenixMenuUI.html":{},"changelog.html":{}}}],["wireframegeometriesmenu",{"_index":1148,"title":{},"body":{"classes/DatGUIMenuUI.html":{}}}],["wireframegeometriesmenu.onchange((value",{"_index":1150,"title":{},"body":{"classes/DatGUIMenuUI.html":{}}}],["wireframing",{"_index":1147,"title":{},"body":{"classes/DatGUIMenuUI.html":{},"changelog.html":{}}}],["within",{"_index":911,"title":{},"body":{"classes/CoordinateHelper.html":{},"classes/Cut.html":{}}}],["without",{"_index":338,"title":{},"body":{"interfaces/AnimationPreset.html":{},"classes/EffectsManager.html":{},"changelog.html":{},"index.html":{}}}],["work",{"_index":147,"title":{},"body":{"classes/ARManager.html":{},"classes/VRManager.html":{},"classes/XRManager.html":{}}}],["workaround",{"_index":350,"title":{},"body":{"interfaces/AnimationPreset.html":{},"changelog.html":{}}}],["working",{"_index":3340,"title":{},"body":{"changelog.html":{}}}],["works",{"_index":124,"title":{},"body":{"classes/ARManager.html":{},"classes/VRManager.html":{},"classes/XRManager.html":{}}}],["wrapper",{"_index":872,"title":{},"body":{"interfaces/Configuration.html":{},"classes/DatGUIMenuUI.html":{},"classes/PhoenixMenuUI.html":{},"classes/RendererManager.html":{}}}],["wrong",{"_index":3503,"title":{},"body":{"changelog.html":{}}}],["x",{"_index":274,"title":{},"body":{"interfaces/AnimationPreset.html":{},"classes/CoordinateHelper.html":{},"classes/DatGUIMenuUI.html":{}}}],["x,y,z",{"_index":870,"title":{},"body":{"interfaces/Configuration.html":{}}}],["xml",{"_index":2663,"title":{},"body":{"classes/URLOptionsManager.html":{},"changelog.html":{}}}],["xr",{"_index":89,"title":{},"body":{"classes/ARManager.html":{},"classes/VRManager.html":{},"interfaces/Window.html":{},"classes/XRManager.html":{},"changelog.html":{},"miscellaneous/enumerations.html":{}}}],["xr_camera",{"_index":3161,"title":{},"body":{"classes/XRManager.html":{}}}],["xractive",{"_index":31,"title":{},"body":{"classes/ARManager.html":{},"classes/VRManager.html":{},"classes/XRManager.html":{}}}],["xrcamera",{"_index":32,"title":{},"body":{"classes/ARManager.html":{},"classes/VRManager.html":{},"classes/XRManager.html":{}}}],["xrcontrollermodelfactory",{"_index":2808,"title":{},"body":{"classes/VRManager.html":{}}}],["xrmanager",{"_index":15,"title":{"classes/XRManager.html":{}},"body":{"classes/ARManager.html":{},"classes/VRManager.html":{},"classes/XRManager.html":{},"changelog.html":{},"coverage.html":{}}}],["xrmanager:109",{"_index":123,"title":{},"body":{"classes/ARManager.html":{},"classes/VRManager.html":{}}}],["xrmanager:135",{"_index":129,"title":{},"body":{"classes/ARManager.html":{},"classes/VRManager.html":{}}}],["xrmanager:26",{"_index":108,"title":{},"body":{"classes/ARManager.html":{},"classes/VRManager.html":{}}}],["xrmanager:28",{"_index":102,"title":{},"body":{"classes/ARManager.html":{},"classes/VRManager.html":{}}}],["xrmanager:30",{"_index":100,"title":{},"body":{"classes/ARManager.html":{},"classes/VRManager.html":{}}}],["xrmanager:32",{"_index":91,"title":{},"body":{"classes/ARManager.html":{},"classes/VRManager.html":{}}}],["xrmanager:34",{"_index":95,"title":{},"body":{"classes/ARManager.html":{},"classes/VRManager.html":{}}}],["xrmanager:36",{"_index":87,"title":{},"body":{"classes/ARManager.html":{},"classes/VRManager.html":{}}}],["xrmanager:38",{"_index":109,"title":{},"body":{"classes/ARManager.html":{},"classes/VRManager.html":{}}}],["xrmanager:48",{"_index":2805,"title":{},"body":{"classes/VRManager.html":{}}}],["xrmanager:50",{"_index":114,"title":{},"body":{"classes/ARManager.html":{}}}],["xrmanager:53",{"_index":132,"title":{},"body":{"classes/ARManager.html":{}}}],["xrmanager:61",{"_index":2802,"title":{},"body":{"classes/VRManager.html":{}}}],["xrmanager:64",{"_index":111,"title":{},"body":{"classes/ARManager.html":{}}}],["xrmanager:78",{"_index":2806,"title":{},"body":{"classes/VRManager.html":{}}}],["xrmanager:99",{"_index":119,"title":{},"body":{"classes/ARManager.html":{},"classes/VRManager.html":{}}}],["xrsessioninit",{"_index":3322,"title":{},"body":{"changelog.html":{}}}],["xrsessiontype",{"_index":138,"title":{},"body":{"classes/ARManager.html":{},"classes/VRManager.html":{},"interfaces/Window.html":{},"classes/XRManager.html":{},"miscellaneous/enumerations.html":{}}}],["xrsessiontype.vr",{"_index":3141,"title":{},"body":{"classes/XRManager.html":{}}}],["xrtype",{"_index":3139,"title":{},"body":{"classes/XRManager.html":{}}}],["y",{"_index":276,"title":{},"body":{"interfaces/AnimationPreset.html":{},"classes/CoordinateHelper.html":{},"classes/DatGUIMenuUI.html":{}}}],["yarn",{"_index":3186,"title":{},"body":{"changelog.html":{},"index.html":{}}}],["yes",{"_index":126,"title":{},"body":{"classes/ARManager.html":{},"classes/ActiveVariable.html":{},"classes/ColorOptions.html":{},"classes/DatGUIMenuUI.html":{},"classes/InfoLogger.html":{},"classes/PhoenixMenuNode.html":{},"classes/PhoenixMenuUI.html":{},"interfaces/PhoenixUI.html":{},"classes/ScriptLoader.html":{},"classes/URLOptionsManager.html":{},"classes/VRManager.html":{},"classes/XRManager.html":{}}}],["z",{"_index":278,"title":{},"body":{"interfaces/AnimationPreset.html":{},"classes/CoordinateHelper.html":{},"classes/DatGUIMenuUI.html":{}}}],["z0",{"_index":2073,"title":{},"body":{"classes/RKHelper.html":{}}}],["zero",{"_index":3678,"title":{},"body":{"changelog.html":{}}}],["zip",{"_index":2668,"title":{},"body":{"classes/URLOptionsManager.html":{},"miscellaneous/variables.html":{}}}],["zoom",{"_index":3045,"title":{},"body":{"interfaces/Window.html":{},"changelog.html":{}}}],["zoomfactor",{"_index":3050,"title":{},"body":{"interfaces/Window.html":{}}}],["zoomtime",{"_index":3051,"title":{},"body":{"interfaces/Window.html":{}}}],["zoomto(zoomfactor",{"_index":3053,"title":{},"body":{"interfaces/Window.html":{}}}]],"pipeline":["stemmer"]}, - "store": {"classes/ARManager.html":{"url":"classes/ARManager.html","title":"class - ARManager","body":"\n \n\n\n\n\n\n\n\n\n\n\n\n\n\n Classes\n ARManager\n\n\n\n \n Info\n \n \n Source\n \n\n\n\n \n \n File\n \n \n src/managers/three-manager/xr/ar-manager.ts\n \n\n\n \n Description\n \n \n AR manager for AR related operations.\n\n \n\n \n Extends\n \n \n XRManager\n \n\n\n\n \n Index\n \n \n \n \n Properties\n \n \n \n \n \n \n Static\n enableDomOverlay\n \n \n Private\n previousValues\n \n \n Static\n Readonly\n SESSION_TYPE\n \n \n Public\n cameraGroup\n \n \n Protected\n currentXRSession\n \n \n Protected\n onSessionEnded\n \n \n Protected\n renderer\n \n \n Protected\n sessionInit\n \n \n Protected\n xrActive\n \n \n Public\n xrCamera\n \n \n \n \n\n \n \n Methods\n \n \n \n \n \n \n Protected\n onXRSessionEnded\n \n \n Protected\n Async\n onXRSessionStarted\n \n \n Private\n scaleScene\n \n \n Public\n endXRSession\n \n \n Public\n getCameraGroup\n \n \n Public\n getXRCamera\n \n \n Public\n setXRSession\n \n \n \n \n\n\n\n\n\n \n \n\n\n \n Constructor\n \n \n \n \nconstructor(scene: Scene, camera: PerspectiveCamera)\n \n \n \n \n Defined in src/managers/three-manager/xr/ar-manager.ts:22\n \n \n\n \n \n Create the AR manager.\n\n \n Parameters :\n \n \n \n Name\n Type\n Optional\n Description\n \n \n \n \n scene\n \n \n Scene\n \n \n \n No\n \n \n \n The three.js scene.\n\n \n \n \n camera\n \n \n PerspectiveCamera\n \n \n \n No\n \n \n \n Camera in the scene.\n\n \n \n \n \n \n \n \n \n \n\n\n \n \n \n Properties\n \n \n \n \n \n \n \n Static\n enableDomOverlay\n \n \n \n \n \n \n Type : boolean\n\n \n \n \n \n Default value : true\n \n \n \n \n Defined in src/managers/three-manager/xr/ar-manager.ts:17\n \n \n\n \n \n Whether to enable DOM overlay which shows Phoenix overlays on top of the AR scene.\n\n \n \n\n \n \n \n \n \n \n \n \n Private\n previousValues\n \n \n \n \n \n \n Type : object\n\n \n \n \n \n Default value : {\n sceneScale: 1,\n cameraNear: 10,\n }\n \n \n \n \n Defined in src/managers/three-manager/xr/ar-manager.ts:19\n \n \n\n \n \n Previous values of scene scale, camera near and camera position.\n\n \n \n\n \n \n \n \n \n \n \n \n Static\n Readonly\n SESSION_TYPE\n \n \n \n \n \n \n Type : string\n\n \n \n \n \n Default value : 'immersive-ar'\n \n \n \n \n Defined in src/managers/three-manager/xr/ar-manager.ts:15\n \n \n\n \n \n Session type to use for AR.\n\n \n \n\n \n \n \n \n \n \n \n \n Public\n cameraGroup\n \n \n \n \n \n \n Type : Group\n\n \n \n \n \n Inherited from XRManager\n\n \n \n \n \n Defined in XRManager:36\n\n \n \n\n \n \n Group containing the the camera for XR.\n\n \n \n\n \n \n \n \n \n \n \n \n Protected\n currentXRSession\n \n \n \n \n \n \n Type : any\n\n \n \n \n \n Default value : null\n \n \n \n \n Inherited from XRManager\n\n \n \n \n \n Defined in XRManager:32\n\n \n \n\n \n \n Currently active XR session.\n\n \n \n\n \n \n \n \n \n \n \n \n Protected\n onSessionEnded\n \n \n \n \n \n \n Type : function\n\n \n \n \n \n Inherited from XRManager\n\n \n \n \n \n Defined in XRManager:34\n\n \n \n\n \n \n Callback to call when the XR session ends.\n\n \n \n\n \n \n \n \n \n \n \n \n Protected\n renderer\n \n \n \n \n \n \n Type : WebGLRenderer\n\n \n \n \n \n Inherited from XRManager\n\n \n \n \n \n Defined in XRManager:30\n\n \n \n\n \n \n Renderer to set the XR session for.\n\n \n \n\n \n \n \n \n \n \n \n \n Protected\n sessionInit\n \n \n \n \n \n \n Type : function\n\n \n \n \n \n Inherited from XRManager\n\n \n \n \n \n Defined in XRManager:28\n\n \n \n\n \n \n Returns required and optional features when requesting an XR session.\n\n \n \n\n \n \n \n \n \n \n \n \n Protected\n xrActive\n \n \n \n \n \n \n Type : boolean\n\n \n \n \n \n Default value : false\n \n \n \n \n Inherited from XRManager\n\n \n \n \n \n Defined in XRManager:26\n\n \n \n\n \n \n Whether the XR is currently active or not.\n\n \n \n\n \n \n \n \n \n \n \n \n Public\n xrCamera\n \n \n \n \n \n \n Type : Camera\n\n \n \n \n \n Inherited from XRManager\n\n \n \n \n \n Defined in XRManager:38\n\n \n \n\n \n \n The camera used by XR.\n\n \n \n\n \n \n\n\n \n \n \n Methods\n \n \n \n \n \n \n \n Protected\n onXRSessionEnded\n \n \n \n \n \n \n \n onXRSessionEnded()\n \n \n\n\n \n \n Inherited from XRManager\n\n \n \n \n \n Defined in XRManager:64\n\n \n \n\n\n \n \n Callback when the AR session ends.\n\n\n \n Returns : void\n\n \n \n \n \n \n \n \n \n \n \n \n Protected\n Async\n onXRSessionStarted\n \n \n \n \n \n \n \n onXRSessionStarted(session: any)\n \n \n\n\n \n \n Inherited from XRManager\n\n \n \n \n \n Defined in XRManager:50\n\n \n \n\n\n \n \n Callback for when the AR session is started.\n\n\n \n Parameters :\n \n \n \n \n Name\n Type\n Optional\n Description\n \n \n \n \n session\n \n any\n \n\n \n No\n \n\n\n \n The AR session.\n\n \n \n \n \n \n \n \n \n Returns : any\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n Private\n scaleScene\n \n \n \n \n \n \n \n scaleScene(scale: number)\n \n \n\n\n \n \n Defined in src/managers/three-manager/xr/ar-manager.ts:75\n \n \n\n\n \n \n Scale the three.js scene.\n\n\n \n Parameters :\n \n \n \n \n Name\n Type\n Optional\n Description\n \n \n \n \n scale\n \n number\n \n\n \n No\n \n\n\n \n Number to scale the scene to.\n\n \n \n \n \n \n \n \n \n Returns : void\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n Public\n endXRSession\n \n \n \n \n \n \n \n endXRSession()\n \n \n\n\n \n \n Inherited from XRManager\n\n \n \n \n \n Defined in XRManager:99\n\n \n \n\n\n \n \n End the current XR session.\n\n\n \n Returns : void\n\n \n \n \n \n \n \n \n \n \n \n \n Public\n getCameraGroup\n \n \n \n \n \n \n \n getCameraGroup(camera?: Camera)\n \n \n\n\n \n \n Inherited from XRManager\n\n \n \n \n \n Defined in XRManager:109\n\n \n \n\n\n \n \n Get the group containing the camera for XR.\nXR camera works by adding a Group with Camera to the scene.\n\n\n \n Parameters :\n \n \n \n \n Name\n Type\n Optional\n Description\n \n \n \n \n camera\n \n Camera\n \n\n \n Yes\n \n\n\n \n Camera which is to be cloned for XR use.\n\n \n \n \n \n \n \n \n \n Returns : Group\n\n \n \n The camera group used in XR mode.\n\n \n \n \n \n \n \n \n \n \n \n \n Public\n getXRCamera\n \n \n \n \n \n \n \n getXRCamera()\n \n \n\n\n \n \n Inherited from XRManager\n\n \n \n \n \n Defined in XRManager:135\n\n \n \n\n\n \n \n Get the camera used by XR.\n\n\n \n \n \n Returns : Camera\n\n \n \n The camera used by XR.\n\n \n \n \n \n \n \n \n \n \n \n \n Public\n setXRSession\n \n \n \n \n \n \n \n setXRSession(renderer: WebGLRenderer, onSessionStarted?: () => void, onSessionEnded?: () => void)\n \n \n\n\n \n \n Inherited from XRManager\n\n \n \n \n \n Defined in XRManager:53\n\n \n \n\n\n \n \n Set and configure the XR session.\n\n\n \n Parameters :\n \n \n \n \n Name\n Type\n Optional\n Description\n \n \n \n \n renderer\n \n WebGLRenderer\n \n\n \n No\n \n\n\n \n Renderer to set the XR session for.\n\n \n \n \n onSessionStarted\n \n function\n \n\n \n Yes\n \n\n\n \n Callback to call when the XR session starts.\n\n \n \n \n onSessionEnded\n \n function\n \n\n \n Yes\n \n\n\n \n Callback to call when the XR session ends.\n\n \n \n \n \n \n \n \n \n Returns : void\n\n \n \n \n \n \n \n \n \n\n\n\n\n\n\n \n\n\n \n import { PerspectiveCamera, Scene } from 'three';\nimport { SceneManager } from '../scene-manager';\nimport { XRManager, XRSessionType } from './xr-manager';\n\n// NOTE: This was created on 28/06/2021\n// It might become outdated given how WebXR is still a work in progress\n\n// LAST UPDATED ON 07/07/2021\n\n/**\n * AR manager for AR related operations.\n */\nexport class ARManager extends XRManager {\n /** Session type to use for AR. */\n static readonly SESSION_TYPE: string = 'immersive-ar';\n /** Whether to enable DOM overlay which shows Phoenix overlays on top of the AR scene. */\n public static enableDomOverlay: boolean = true;\n /** Previous values of scene scale, camera near and camera position. */\n private previousValues = {\n sceneScale: 1,\n cameraNear: 10,\n };\n\n /**\n * Create the AR manager.\n * @param scene The three.js scene.\n * @param camera Camera in the scene.\n * @override\n */\n constructor(private scene: Scene, private camera: PerspectiveCamera) {\n super(XRSessionType.AR);\n\n this.previousValues.sceneScale = scene.scale.x;\n this.previousValues.cameraNear = camera.near;\n this.sessionInit = () => {\n return ARManager.enableDomOverlay\n ? {\n optionalFeatures: ['dom-overlay'],\n domOverlay: { root: document.body },\n }\n : {};\n };\n }\n\n /**\n * Callback for when the AR session is started.\n * @param session The AR session.\n * @override\n */\n protected async onXRSessionStarted(session: any) {\n document.body.style.setProperty('background-color', 'transparent');\n this.previousValues.sceneScale = this.scene.scale.x;\n this.previousValues.cameraNear = this.camera.near;\n this.scaleScene(0.00001);\n this.camera.near = 0.01;\n this.renderer.xr.setReferenceSpaceType('local');\n await super.onXRSessionStarted(session);\n }\n\n /**\n * Callback when the AR session ends.\n * @override\n */\n protected onXRSessionEnded() {\n document.body.style.removeProperty('background-color');\n this.scaleScene(this.previousValues.sceneScale);\n this.camera.near = this.previousValues.cameraNear;\n super.onXRSessionEnded();\n }\n\n /**\n * Scale the three.js scene.\n * @param scale Number to scale the scene to.\n */\n private scaleScene(scale: number) {\n [\n SceneManager.EVENT_DATA_ID,\n SceneManager.GEOMETRIES_ID,\n SceneManager.LABELS_ID,\n ].forEach((groupName) => {\n this.scene.getObjectByName(groupName)?.scale.setScalar(scale);\n });\n }\n}\n\n \n\n\n\n\n\n\n\n\n\n\n \n \n results matching \"\"\n \n \n \n No results matching \"\"\n \n\n"},"classes/ActiveVariable.html":{"url":"classes/ActiveVariable.html","title":"class - ActiveVariable","body":"\n \n\n\n\n\n\n\n\n\n\n\n\n\n\n Classes\n ActiveVariable\n\n\n\n \n Info\n \n \n Source\n \n\n\n\n \n \n File\n \n \n src/helpers/active-variable.ts\n \n\n\n \n Description\n \n \n An active variable whose value can be changed and the change can be observed.\n\n \n\n\n\n\n \n Index\n \n \n \n \n Properties\n \n \n \n \n \n \n Private\n callbacks\n \n \n Public\n Optional\n value\n \n \n \n \n\n \n \n Methods\n \n \n \n \n \n \n Public\n onUpdate\n \n \n Public\n update\n \n \n \n \n\n\n\n\n\n \n \n\n\n \n Constructor\n \n \n \n \nconstructor(value?: T)\n \n \n \n \n Defined in src/helpers/active-variable.ts:7\n \n \n\n \n \n Create the observable active variable.\n\n \n Parameters :\n \n \n \n Name\n Type\n Optional\n Description\n \n \n \n \n value\n \n \n T\n \n \n \n Yes\n \n \n \n Initial value.\n\n \n \n \n \n \n \n \n \n \n\n\n \n \n \n Properties\n \n \n \n \n \n \n \n Private\n callbacks\n \n \n \n \n \n \n Type : CallbackFunction[]\n\n \n \n \n \n Default value : []\n \n \n \n \n Defined in src/helpers/active-variable.ts:17\n \n \n\n \n \n Callbacks to call on update.\n\n \n \n\n \n \n \n \n \n \n \n \n Public\n Optional\n value\n \n \n \n \n \n \n Type : T\n\n \n \n \n \n Defined in src/helpers/active-variable.ts:12\n \n \n\n \n \n Initial value.\n \n \n\n \n \n\n\n \n \n \n Methods\n \n \n \n \n \n \n \n Public\n onUpdate\n \n \n \n \n \n \n \n onUpdate(callback: CallbackFunction)\n \n \n\n\n \n \n Defined in src/helpers/active-variable.ts:32\n \n \n\n\n \n \n Call a function on updating the value of variable.\n\n\n \n Parameters :\n \n \n \n \n Name\n Type\n Optional\n Description\n \n \n \n \n callback\n \n CallbackFunction\n \n\n \n No\n \n\n\n \n Callback to call with updated value when the variable is updated.\n\n \n \n \n \n \n \n \n \n Returns : void\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n Public\n update\n \n \n \n \n \n \n \n update(updatedValue: T)\n \n \n\n\n \n \n Defined in src/helpers/active-variable.ts:23\n \n \n\n\n \n \n Update the value of variable.\n\n\n \n Parameters :\n \n \n \n \n Name\n Type\n Optional\n Description\n \n \n \n \n updatedValue\n \n T\n \n\n \n No\n \n\n\n \n New updated value.\n\n \n \n \n \n \n \n \n \n Returns : void\n\n \n \n \n \n \n \n \n \n\n\n\n\n\n\n \n\n\n \n export type CallbackFunction = (updatedValue: T) => void;\n\n/**\n * An active variable whose value can be changed and the change can be observed.\n */\nexport class ActiveVariable {\n /**\n * Create the observable active variable.\n * @param value Initial value.\n */\n constructor(public value?: T) {}\n\n /**\n * Callbacks to call on update.\n */\n private callbacks: CallbackFunction[] = [];\n\n /**\n * Update the value of variable.\n * @param updatedValue New updated value.\n */\n public update(updatedValue: T) {\n this.value = updatedValue;\n this.callbacks.forEach((callback) => callback(updatedValue));\n }\n\n /**\n * Call a function on updating the value of variable.\n * @param callback Callback to call with updated value when the variable is updated.\n */\n public onUpdate(callback: CallbackFunction) {\n this.callbacks.push(callback);\n }\n}\n\n \n\n\n\n\n\n\n\n\n\n\n \n \n results matching \"\"\n \n \n \n No results matching \"\"\n \n\n"},"interfaces/AnimationPreset.html":{"url":"interfaces/AnimationPreset.html","title":"interface - AnimationPreset","body":"\n \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n Interfaces\n \n AnimationPreset\n\n\n\n \n Info\n \n \n Source\n \n\n\n\n \n \n File\n \n \n src/managers/three-manager/animations-manager.ts\n \n\n\n \n Description\n \n \n Type for animation preset.\n\n \n\n\n \n Index\n \n \n \n \n Properties\n \n \n \n \n \n \n Optional\n \n animateEventAfterInterval\n \n \n \n Optional\n \n collisionDuration\n \n \n \n \n name\n \n \n \n \n positions\n \n \n \n \n \n \n \n \n\n\n\n \n Properties\n \n \n \n \n \n animateEventAfterInterval\n \n \n \n \n \n \n \n \n animateEventAfterInterval: number\n\n \n \n\n\n \n \n Type : number\n\n \n \n\n \n \n Optional\n \n \n\n\n\n\n \n \n Time after which to start the event collision animation.\n\n \n \n \n \n \n \n \n \n \n collisionDuration\n \n \n \n \n \n \n \n \n collisionDuration: number\n\n \n \n\n\n \n \n Type : number\n\n \n \n\n \n \n Optional\n \n \n\n\n\n\n \n \n Duration of the event collision.\n\n \n \n \n \n \n \n \n \n \n name\n \n \n \n \n \n \n \n \n name: string\n\n \n \n\n\n \n \n Type : string\n\n \n \n\n\n\n\n\n \n \n Name of the Animation\n\n \n \n \n \n \n \n \n \n \n positions\n \n \n \n \n \n \n \n \n positions: literal type[]\n\n \n \n\n\n \n \n Type : literal type[]\n\n \n \n\n\n\n\n\n \n \n Positions with duration and easing of each tween forming a path.\n\n \n \n \n \n \n \n\n\n \n import { Easing, Tween } from '@tweenjs/tween.js';\nimport {\n TubeGeometry,\n BufferGeometry,\n Vector3,\n Color,\n MeshBasicMaterial,\n Mesh,\n SphereGeometry,\n Sphere,\n Object3D,\n BufferAttribute,\n Scene,\n Camera,\n Plane,\n Group,\n} from 'three';\nimport { SceneManager } from './scene-manager';\nimport { RendererManager } from './renderer-manager';\nimport { TracksMesh } from '../../loaders/objects/tracks';\n\n/** Type for animation preset. */\nexport interface AnimationPreset {\n /** Positions with duration and easing of each tween forming a path. */\n positions: { position: number[]; duration: number; easing?: any }[];\n /** Time after which to start the event collision animation. */\n animateEventAfterInterval?: number;\n /** Duration of the event collision. */\n collisionDuration?: number;\n /** Name of the Animation */\n name: string;\n}\n\n/**\n * Manager for managing animation related operations using three.js and tween.js.\n */\nexport class AnimationsManager {\n /**\n * Constructor for the animation manager.\n * @param scene Three.js scene containing all the objects and event data.\n * @param activeCamera Currently active camera.\n * @param rendererManager Manager for managing event display's renderer related functions.\n */\n constructor(\n private scene: Scene,\n private activeCamera: Camera,\n private rendererManager: RendererManager\n ) {\n this.animateEvent = this.animateEvent.bind(this);\n this.animateEventWithClipping = this.animateEventWithClipping.bind(this);\n }\n\n /**\n * Get the camera tween for animating camera to a position.\n * @param pos End position of the camera tween.\n * @param duration Duration of the tween.\n * @param easing Animation easing of the tween if any.\n * @returns Tween object of the camera animation.\n */\n public getCameraTween(\n pos: number[],\n duration: number = 1000,\n easing?: typeof Easing.Linear.None\n ) {\n const tween = new Tween(this.activeCamera.position).to(\n { x: pos[0], y: pos[1], z: pos[2] },\n duration\n );\n\n if (easing) {\n tween.easing(easing);\n }\n\n return tween;\n }\n\n /**\n * Animate the camera through the event scene.\n * @param startPos Start position of the translation animation.\n * @param tweenDuration Duration of each tween in the translation animation.\n * @param onAnimationEnd Callback when the last animation ends.\n */\n public animateThroughEvent(\n startPos: number[],\n tweenDuration: number,\n onAnimationEnd?: () => void\n ) {\n // Move to start\n const start = this.getCameraTween(startPos, 1000, Easing.Cubic.Out);\n // Move to position along the detector axis\n const alongAxisPosition = [0, 0, startPos[2]];\n const startXAxis = this.getCameraTween(alongAxisPosition, tweenDuration);\n\n const radius = 500;\n const numOfSteps = 24;\n const angle = 3 * Math.PI;\n const step = angle / numOfSteps;\n\n const rotationPositions = [];\n for (let i = 1; i onAnimationEnd?.());\n startClone.delay(500);\n\n start.chain(startXAxis);\n startXAxis.chain(rotateStart);\n rotate.chain(end);\n end.chain(startClone);\n\n start.start();\n }\n\n /**\n * Animate the propagation and generation of event data.\n * @param tweenDuration Duration of the animation tween.\n * @param onEnd Callback when all animations have ended.\n * @param onAnimationStart Callback when the first animation starts.\n */\n public animateEvent(\n tweenDuration: number,\n onEnd?: () => void,\n onAnimationStart?: () => void\n ) {\n const extraAnimationSphereDuration = tweenDuration * 0.25;\n tweenDuration *= 0.75;\n\n const eventData = this.scene.getObjectByName(SceneManager.EVENT_DATA_ID);\n\n const animationSphere = new Sphere(new Vector3(), 0);\n const objectsToAnimateWithSphere: {\n eventObject: Object3D;\n position: any;\n }[] = [];\n\n const allTweens = [];\n // Traverse over all event data\n eventData.traverse((eventObject: any) => {\n if (eventObject.geometry) {\n // Animation for extrapolating tracks without changing scale\n if (eventObject.name === 'Track' || eventObject.name === 'LineHit') {\n // Check if geometry drawRange count exists\n let geometryPosCount =\n eventObject.geometry?.attributes?.position?.count;\n if (geometryPosCount) {\n // WORKAROUND\n // Changing position count for TubeGeometry because\n // what we get is not the actual and it has Infinity drawRange count\n if (eventObject.geometry instanceof TubeGeometry) {\n geometryPosCount *= 6;\n }\n\n if (eventObject.geometry instanceof TracksMesh) {\n eventObject.material.progress = 0;\n const eventObjectTween = new Tween(eventObject.material).to(\n {\n progress: 1,\n },\n tweenDuration\n );\n eventObjectTween.onComplete(() => {\n eventObject.material.progress = 1;\n });\n allTweens.push(eventObjectTween);\n } else if (eventObject.geometry instanceof BufferGeometry) {\n const oldDrawRangeCount = eventObject.geometry.drawRange.count;\n eventObject.geometry.setDrawRange(0, 0);\n const eventObjectTween = new Tween(\n eventObject.geometry.drawRange\n ).to(\n {\n count: geometryPosCount,\n },\n tweenDuration\n );\n eventObjectTween.onComplete(() => {\n eventObject.geometry.drawRange.count = oldDrawRangeCount;\n });\n allTweens.push(eventObjectTween);\n }\n }\n }\n // Animation for scaling out objects with or without position\n else if (eventObject.name === 'Jet') {\n const scaleTween = new Tween({\n x: 0.01,\n y: 0.01,\n z: 0.01,\n }).to(\n {\n x: eventObject.scale.x,\n y: eventObject.scale.y,\n z: eventObject.scale.z,\n },\n tweenDuration\n );\n // Manually updating scale since we need to change position\n scaleTween.onUpdate((updatedScale: Vector3) => {\n const previousScale = eventObject.scale.x;\n eventObject.scale.setScalar(updatedScale.x);\n // Restoring to original position and then moving again with the current value\n eventObject.position\n .divideScalar(previousScale)\n .multiplyScalar(updatedScale.x);\n });\n allTweens.push(scaleTween);\n } else {\n const hasPosition = !eventObject.position.equals(\n new Vector3(0, 0, 0)\n );\n let position = hasPosition\n ? eventObject.position\n : eventObject.geometry.boundingSphere.center;\n\n // Edit geometry for hits\n if (eventObject.name === 'Hit') {\n position = Array.from(\n eventObject.geometry.attributes['position'].array\n );\n eventObject.geometry.deleteAttribute('position');\n eventObject.geometry.computeBoundingSphere();\n } else {\n // Making the object invisible and will make visible\n // once the animation sphere reaches the object\n eventObject.visible = false;\n }\n\n objectsToAnimateWithSphere.push({\n eventObject: eventObject,\n position: position,\n });\n }\n }\n });\n\n // Tween for the animation sphere\n const animationSphereTween = new Tween(animationSphere).to(\n { radius: 3000 },\n tweenDuration\n );\n\n const onAnimationSphereUpdate = (updateAnimationSphere: Sphere) => {\n objectsToAnimateWithSphere.forEach((obj) => {\n if (obj.eventObject.name === 'Hit') {\n const geometry = (obj.eventObject as any).geometry;\n\n const hitsPositions = this.getHitsPositions(obj.position);\n const reachedHits = hitsPositions.filter((hitPosition) =>\n updateAnimationSphere.containsPoint(\n new Vector3().fromArray(hitPosition)\n )\n );\n\n if (reachedHits.length > 0) {\n geometry.setAttribute(\n 'position',\n new BufferAttribute(\n new Float32Array([].concat(...reachedHits)),\n 3\n )\n );\n geometry.computeBoundingSphere();\n }\n } else if (updateAnimationSphere.containsPoint(obj.position)) {\n obj.eventObject.visible = true;\n }\n });\n };\n\n animationSphereTween.onUpdate(onAnimationSphereUpdate);\n\n // Animation sphere tween after covering the tracks\n const animationSphereTweenClone = new Tween(animationSphere).to(\n { radius: 10000 },\n extraAnimationSphereDuration\n );\n animationSphereTweenClone.onUpdate(onAnimationSphereUpdate);\n\n animationSphereTween.chain(animationSphereTweenClone);\n\n allTweens.push(animationSphereTween);\n\n // Call onAnimationStart when the first tween starts\n allTweens[0].onStart(() => onAnimationStart?.());\n\n // Start all tweens\n for (const tween of allTweens) {\n tween.easing(Easing.Quartic.Out).start();\n }\n\n // Call onEnd when the last tween completes\n animationSphereTweenClone.onComplete(() => {\n // Restore all remaining event data items\n onAnimationSphereUpdate(new Sphere(new Vector3(), Infinity));\n onEnd?.();\n });\n }\n\n /**\n * Animate the propagation and generation of event data using clipping planes.\n * @param tweenDuration Duration of the animation tween.\n * @param onEnd Function to call when all animations have ended.\n * @param onAnimationStart Callback when the first animation starts.\n * @param clippingConstant Constant for the clipping planes for distance from the origin.\n */\n public animateEventWithClipping(\n tweenDuration: number,\n onEnd?: () => void,\n onAnimationStart?: () => void,\n clippingConstant: number = 11000\n ) {\n const allEventData = this.scene.getObjectByName(SceneManager.EVENT_DATA_ID);\n\n // Sphere to get spherical set of clipping planes from\n const sphere = new SphereGeometry(1, 8, 8);\n // Clipping planes for animation\n const animationClipPlanes: Plane[] = [];\n\n // Get clipping planes from the vertices of sphere\n const position = sphere.attributes.position;\n const vertex = new Vector3();\n for (let i = 0; i {\n if (eventObject.geometry && eventObject.material) {\n eventObject.material.clippingPlanes = animationClipPlanes;\n }\n });\n\n const allTweens = [];\n // Create tweens for the animation clipping planes\n for (const animationClipPlane of animationClipPlanes) {\n animationClipPlane.constant = 0;\n const tween = new Tween(animationClipPlane).to(\n { constant: clippingConstant },\n tweenDuration\n );\n allTweens.push(tween);\n }\n\n allTweens[0].onStart(() => onAnimationStart?.());\n\n // Start all the tweens\n for (const tween of allTweens) {\n tween.start();\n }\n\n allTweens[allTweens.length - 1].onComplete(() => {\n // Revert local clipping of the renderer\n if (!prevLocalClipping) {\n this.rendererManager.getMainRenderer().localClippingEnabled =\n prevLocalClipping /* false */;\n }\n // Remove the applied clipping planes from the event data objects\n allEventData.traverse((eventObject: any) => {\n if (eventObject.geometry && eventObject.material) {\n eventObject.material.clippingPlanes = null;\n }\n });\n onEnd?.();\n });\n }\n\n /**\n * Animate the collision of two particles.\n * @param tweenDuration Duration of the particle collision animation tween.\n * @param particleSize Size of the particles.\n * @param distanceFromOrigin Distance of the particles (along z-axes) from the origin.\n * @param particleColor Color of the particles.\n * @param onEnd Callback to call when the particle collision ends.\n */\n public collideParticles(\n tweenDuration: number,\n particleSize: number = 10,\n distanceFromOrigin: number = 5000,\n particleColor: Color = new Color(0xffffff),\n onEnd?: () => void\n ) {\n const particleGeometry = new SphereGeometry(particleSize, 32, 32);\n const particleMaterial = new MeshBasicMaterial({\n color: particleColor,\n transparent: true,\n opacity: 0,\n });\n\n const particle1 = new Mesh(particleGeometry, particleMaterial);\n const particle2 = particle1.clone() as Mesh;\n\n particle1.position.setZ(distanceFromOrigin);\n particle2.position.setZ(-distanceFromOrigin);\n\n const particles = [particle1, particle2];\n\n this.scene.add(...particles);\n\n const particleTweens = [];\n\n for (const particle of particles) {\n new Tween(particle.material)\n .to(\n {\n opacity: 1,\n },\n 300\n )\n .start();\n\n const particleToOrigin = new Tween(particle.position)\n .to(\n {\n z: 0,\n },\n tweenDuration\n )\n .start();\n\n particleTweens.push(particleToOrigin);\n }\n\n particleTweens[0].onComplete(() => {\n this.scene.remove(...particles);\n onEnd?.();\n });\n }\n\n /**\n * Animate the propagation and generation of event data with particle collison.\n * @param animationFunction Animation function to call after collision.\n * @param tweenDuration Duration of the animation tween.\n * @param onEnd Function to call when all animations have ended.\n */\n public animateWithCollision(\n animationFunction: (\n tweenDuration: number,\n onEnd?: () => void,\n onAnimationStart?: () => void\n ) => void,\n tweenDuration: number,\n onEnd?: () => void\n ) {\n const allEventData = this.scene.getObjectByName(SceneManager.EVENT_DATA_ID);\n\n // Get the color of the first track to use for colliding particles\n const track = allEventData.getObjectByName('Track');\n let trackColor: Color;\n if (track instanceof Group) {\n trackColor = (track.children[0] as any)?.material?.color;\n } else {\n trackColor = (track as any)?.material.color;\n }\n\n // Hide event data to show particles collision\n if (allEventData) {\n allEventData.visible = false;\n }\n\n this.collideParticles(1500, 30, 5000, trackColor, () => {\n animationFunction(tweenDuration, onEnd, () => {\n if (allEventData) {\n allEventData.visible = true;\n }\n });\n });\n }\n\n /**\n * Animate the propagation and generation of event data with particle collison.\n * @param tweenDuration Duration of the animation tween.\n * @param onEnd Function to call when all animations have ended.\n */\n public animateEventWithCollision(tweenDuration: number, onEnd?: () => void) {\n this.animateWithCollision(this.animateEvent, tweenDuration, onEnd);\n }\n\n /**\n * Animate the propagation and generation of event data\n * using clipping planes after particle collison.\n * @param tweenDuration Duration of the animation tween.\n * @param onEnd Function to call when all animations have ended.\n */\n public animateClippingWithCollision(\n tweenDuration: number,\n onEnd?: () => void\n ) {\n this.animateWithCollision(\n this.animateEventWithClipping,\n tweenDuration,\n onEnd\n );\n }\n\n /**\n * Get the positions of hits in a multidimensional array\n * from a single dimensional array.\n * @param positions Positions of hits in a single dimensional array.\n * @returns Positions of hits in a multidimensional array.\n */\n private getHitsPositions(positions: number[]): number[][] {\n const hitsPositions: number[][] = [];\n for (let i = 0; i void) {\n const { positions, animateEventAfterInterval, collisionDuration } =\n animationPreset;\n\n if (animateEventAfterInterval && collisionDuration) {\n // Will be made visible after collision animation ends.\n this.scene.getObjectByName(SceneManager.EVENT_DATA_ID).visible = false;\n setTimeout(() => {\n this.animateEventWithCollision(collisionDuration);\n }, animateEventAfterInterval);\n }\n\n const firstTween = this.getCameraTween(\n positions[0].position,\n positions[0].duration ?? 2000,\n positions[0].easing\n );\n\n let previousTween = firstTween;\n positions.slice(1).forEach(({ position, duration, easing }) => {\n const tween = this.getCameraTween(position, duration ?? 2000, easing);\n previousTween.chain(tween);\n previousTween = tween;\n });\n previousTween.onComplete(onEnd);\n\n firstTween.start();\n }\n}\n\n \n\n\n\n\n\n\n\n\n\n \n \n results matching \"\"\n \n \n \n No results matching \"\"\n \n\n"},"classes/CMSObjects.html":{"url":"classes/CMSObjects.html","title":"class - CMSObjects","body":"\n \n\n\n\n\n\n\n\n\n\n\n\n\n\n Classes\n CMSObjects\n\n\n\n \n Info\n \n \n Source\n \n\n\n\n \n \n File\n \n \n src/loaders/objects/cms-objects.ts\n \n\n\n \n Description\n \n \n Physics objects that make up an event in CMS that are not a part of PhoenixObjects.\n\n \n\n\n\n\n \n Index\n \n \n\n \n \n Methods\n \n \n \n \n \n \n Static\n getMuonChamber\n \n \n \n \n\n\n\n\n\n \n \n\n\n\n\n \n \n \n Methods\n \n \n \n \n \n \n \n Static\n getMuonChamber\n \n \n \n \n \n \n \n getMuonChamber(muonChamberParams: any)\n \n \n\n\n \n \n Defined in src/loaders/objects/cms-objects.ts:25\n \n \n\n\n \n \n Process the Muon Chamber from the given parameters.\nand get it as a geometry.\n\n\n \n Parameters :\n \n \n \n \n Name\n Type\n Optional\n Description\n \n \n \n \n muonChamberParams\n \n any\n \n\n \n No\n \n\n\n \n Parameters of the Muon Chamber.\n\n \n \n \n \n \n \n \n \n Returns : Object3D\n\n \n \n Muon Chamber object.\n\n \n \n \n \n \n\n\n\n\n\n\n \n\n\n \n import {\n Object3D,\n Group,\n Mesh,\n MeshBasicMaterial,\n EdgesGeometry,\n LineBasicMaterial,\n DoubleSide,\n LineSegments,\n BufferGeometry,\n BufferAttribute,\n} from 'three';\nimport { EVENT_DATA_TYPE_COLORS } from '../../helpers/constants';\n\n/**\n * Physics objects that make up an event in CMS that are not a part of {@link PhoenixObjects}.\n */\nexport class CMSObjects {\n /**\n * Process the Muon Chamber from the given parameters.\n * and get it as a geometry.\n * @param muonChamberParams Parameters of the Muon Chamber.\n * @returns Muon Chamber object.\n */\n public static getMuonChamber(muonChamberParams: any): Object3D {\n let allFacePositions: number[] = [];\n\n const addFace3 = (...faces: string[]) => {\n allFacePositions = allFacePositions.concat(\n ...faces.map((face) => muonChamberParams[face])\n );\n };\n\n // front\n addFace3('front_1', 'front_2', 'front_3');\n addFace3('front_3', 'front_4', 'front_1');\n\n // back\n addFace3('back_1', 'back_2', 'back_3');\n addFace3('back_3', 'back_4', 'back_1');\n\n // top\n addFace3('back_1', 'back_2', 'front_2');\n addFace3('front_2', 'front_1', 'back_1');\n\n // bottom\n addFace3('back_4', 'back_3', 'front_3');\n addFace3('front_3', 'front_4', 'back_4');\n\n // left\n addFace3('front_1', 'front_4', 'back_4');\n addFace3('back_4', 'back_1', 'front_1');\n\n // right\n addFace3('front_2', 'back_2', 'back_3');\n addFace3('back_3', 'front_3', 'front_2');\n\n const boxBuffer = new BufferGeometry();\n boxBuffer.attributes.position = new BufferAttribute(\n new Float32Array(allFacePositions),\n 3\n );\n boxBuffer.computeVertexNormals();\n\n const boxObject = new Mesh(\n boxBuffer,\n new MeshBasicMaterial({\n color: muonChamberParams.color ?? EVENT_DATA_TYPE_COLORS.MuonChambers,\n transparent: true,\n opacity: 0.1,\n side: DoubleSide,\n })\n );\n\n boxObject.userData = Object.assign({}, muonChamberParams);\n boxObject.name = 'MuonChamber';\n\n // These are the lines along the box edges\n\n const boxEdges = new EdgesGeometry(boxBuffer);\n const lineBoxObject = new LineSegments(\n boxEdges,\n new LineBasicMaterial({\n color: 0xffffff,\n transparent: true,\n opacity: 0.7,\n })\n );\n\n const muonChamber = new Group();\n muonChamber.add(boxObject);\n muonChamber.add(lineBoxObject);\n\n muonChamberParams.uuid = boxObject.uuid;\n\n return muonChamber;\n }\n}\n\n \n\n\n\n\n\n\n\n\n\n\n \n \n results matching \"\"\n \n \n \n No results matching \"\"\n \n\n"},"classes/ColorManager.html":{"url":"classes/ColorManager.html","title":"class - ColorManager","body":"\n \n\n\n\n\n\n\n\n\n\n\n\n\n\n Classes\n ColorManager\n\n\n\n \n Info\n \n \n Source\n \n\n\n\n \n \n File\n \n \n src/managers/three-manager/color-manager.ts\n \n\n\n \n Description\n \n \n Color manager for three.js functions related to coloring of objects.\n\n \n\n\n\n\n \n Index\n \n \n\n \n \n Methods\n \n \n \n \n \n \n Public\n collectionColor\n \n \n Public\n collectionColorRandom\n \n \n colorObjectsByProperty\n \n \n Public\n colorTracksByVertex\n \n \n \n \n\n\n\n\n\n \n \n\n\n \n Constructor\n \n \n \n \nconstructor(sceneManager: SceneManager)\n \n \n \n \n Defined in src/managers/three-manager/color-manager.ts:7\n \n \n\n \n \n Create the coloring manager.\n\n \n Parameters :\n \n \n \n Name\n Type\n Optional\n Description\n \n \n \n \n sceneManager\n \n \n SceneManager\n \n \n \n No\n \n \n \n The scene manager responsible for managing the three.js scene.\n\n \n \n \n \n \n \n \n \n \n\n\n\n \n \n \n Methods\n \n \n \n \n \n \n \n Public\n collectionColor\n \n \n \n \n \n \n \n collectionColor(collectionName: string, color: any)\n \n \n\n\n \n \n Defined in src/managers/three-manager/color-manager.ts:38\n \n \n\n\n \n \n Changes the color of all objects inside an event data collection.\n\n\n \n Parameters :\n \n \n \n \n Name\n Type\n Optional\n Description\n \n \n \n \n collectionName\n \n string\n \n\n \n No\n \n\n\n \n Name of the collection.\n\n \n \n \n color\n \n any\n \n\n \n No\n \n\n\n \n Hex value representing the color.\n\n \n \n \n \n \n \n \n \n Returns : void\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n Public\n collectionColorRandom\n \n \n \n \n \n \n \n collectionColorRandom(collectionName: string)\n \n \n\n\n \n \n Defined in src/managers/three-manager/color-manager.ts:55\n \n \n\n\n \n \n Changes the color of all objects inside an event data collection to some random color.\n\n\n \n Parameters :\n \n \n \n \n Name\n Type\n Optional\n Description\n \n \n \n \n collectionName\n \n string\n \n\n \n No\n \n\n\n \n Name of the collection.\n\n \n \n \n \n \n \n \n \n Returns : void\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n colorObjectsByProperty\n \n \n \n \n \n \ncolorObjectsByProperty(color: any, objectsGroup: string, customCheck: (objectUserData: any) => void)\n \n \n\n\n \n \n Defined in src/managers/three-manager/color-manager.ts:20\n \n \n\n\n \n \n Color objects by a property's value or range.\n\n\n \n Parameters :\n \n \n \n \n Name\n Type\n Optional\n Description\n \n \n \n \n color\n \n any\n \n\n \n No\n \n\n\n \n Color to set for the object.\n\n \n \n \n objectsGroup\n \n string\n \n\n \n No\n \n\n\n \n Name of the object(s) group to color.\n\n \n \n \n customCheck\n \n function\n \n\n \n No\n \n\n\n \n Function to custom check values against object params.\n\n \n \n \n \n \n \n \n \n Returns : void\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n Public\n colorTracksByVertex\n \n \n \n \n \n \n \n colorTracksByVertex(collectionName: string)\n \n \n\n\n \n \n Defined in src/managers/three-manager/color-manager.ts:72\n \n \n\n\n \n \n Randomly color tracks by the vertex they are associated with.\n\n\n \n Parameters :\n \n \n \n \n Name\n Type\n Optional\n Description\n \n \n \n \n collectionName\n \n string\n \n\n \n No\n \n\n\n \n Name of the collection.\n\n \n \n \n \n \n \n \n \n Returns : void\n\n \n \n \n \n \n \n \n \n\n\n\n\n\n\n \n\n\n \n import { Color, MeshPhongMaterial } from 'three';\nimport { SceneManager } from './scene-manager';\n\n/**\n * Color manager for three.js functions related to coloring of objects.\n */\nexport class ColorManager {\n /**\n * Create the coloring manager.\n * @param sceneManager The scene manager responsible for managing the three.js scene.\n */\n constructor(private sceneManager: SceneManager) {}\n\n /**\n * Color objects by a property's value or range.\n * @param color Color to set for the object.\n * @param objectsGroup Name of the object(s) group to color.\n * @param customCheck Function to custom check values against object params.\n */\n colorObjectsByProperty(\n color: any,\n objectsGroup: string,\n customCheck: (objectUserData: any) => boolean\n ) {\n const objects = this.sceneManager.getScene().getObjectByName(objectsGroup);\n objects.traverse((object: any) => {\n if (object.material?.color && customCheck(object.userData)) {\n object.material.color.set(color);\n }\n });\n }\n\n /**\n * Changes the color of all objects inside an event data collection.\n * @param collectionName Name of the collection.\n * @param color Hex value representing the color.\n */\n public collectionColor(collectionName: string, color: any) {\n const collection = this.sceneManager\n .getScene()\n .getObjectByName(SceneManager.EVENT_DATA_ID)\n .getObjectByName(collectionName);\n\n for (const child of Object.values(collection.children)) {\n child.traverse((object) => {\n (object['material']?.color as Color)?.set(color);\n });\n }\n }\n\n /**\n * Changes the color of all objects inside an event data collection to some random color.\n * @param collectionName Name of the collection.\n */\n public collectionColorRandom(collectionName: string) {\n const collection = this.sceneManager\n .getScene()\n .getObjectByName(SceneManager.EVENT_DATA_ID)\n .getObjectByName(collectionName);\n\n for (const child of Object.values(collection.children)) {\n child.traverse((object) => {\n (object['material']?.color as Color)?.set(Math.random() * 0xffffff);\n });\n }\n }\n\n /**\n * Randomly color tracks by the vertex they are associated with.\n * @param collectionName Name of the collection.\n */\n public colorTracksByVertex(collectionName: string) {\n const scene = this.sceneManager.getScene();\n const vertices = scene.getObjectByName('Vertices');\n vertices.traverse((object) => {\n const { linkedTrackCollection, linkedTracks } = object.userData;\n\n if (\n object.name === 'Vertex' &&\n linkedTrackCollection === collectionName &&\n linkedTracks\n ) {\n const colorForTracksVertex = (object['material'] as MeshPhongMaterial)\n .color;\n const trackCollection = scene.getObjectByName(linkedTrackCollection);\n\n linkedTracks.forEach((trackIndex: number) => {\n trackCollection.children[trackIndex].traverse((trackObject) => {\n trackObject?.['material']?.color?.set(colorForTracksVertex);\n });\n });\n }\n });\n }\n}\n\n \n\n\n\n\n\n\n\n\n\n\n \n \n results matching \"\"\n \n \n \n No results matching \"\"\n \n\n"},"classes/ColorOptions.html":{"url":"classes/ColorOptions.html","title":"class - ColorOptions","body":"\n \n\n\n\n\n\n\n\n\n\n\n\n\n\n Classes\n ColorOptions\n\n\n\n \n Info\n \n \n Source\n \n\n\n\n \n \n File\n \n \n src/managers/ui-manager/color-options.ts\n \n\n\n \n Description\n \n \n Color options with functions to color event data.\n\n \n\n\n\n\n \n Index\n \n \n \n \n Properties\n \n \n \n \n \n \n Private\n allColorByOptions\n \n \n Private\n chargeColors\n \n \n Private\n collectionName\n \n \n Private\n colorByOptions\n \n \n Private\n colorOptionsFolder\n \n \n Private\n momColors\n \n \n Private\n selectedColorByOption\n \n \n \n \n\n \n \n Methods\n \n \n \n \n \n \n Private\n applyChargeColorOptions\n \n \n Private\n applyMomColorOptions\n \n \n Private\n applyVertexColorOptions\n \n \n Private\n colorByMomentum\n \n \n Private\n getMomentum\n \n \n Private\n initChargeColorOptions\n \n \n Private\n initColorByOptions\n \n \n Private\n initMomColorOptions\n \n \n Private\n onlySelectedColorByOption\n \n \n Private\n shouldColorByCharge\n \n \n \n \n\n\n\n\n\n \n \n\n\n \n Constructor\n \n \n \n \nconstructor(colorManager: ColorManager, collectionFolder: PhoenixMenuNode, collectionColor: Color, colorByOptionsToInclude?: ColorByOptionKeys[])\n \n \n \n \n Defined in src/managers/ui-manager/color-options.ts:74\n \n \n\n \n \n Create the color options.\n\n \n Parameters :\n \n \n \n Name\n Type\n Optional\n Description\n \n \n \n \n colorManager\n \n \n ColorManager\n \n \n \n No\n \n \n \n Color manager for three.js functions related to coloring of objects.\n\n \n \n \n collectionFolder\n \n \n PhoenixMenuNode\n \n \n \n No\n \n \n \n Collection folder to add the color by options to.\n\n \n \n \n collectionColor\n \n \n Color\n \n \n \n No\n \n \n \n \n \n \n colorByOptionsToInclude\n \n \n ColorByOptionKeys[]\n \n \n \n Yes\n \n \n \n Options to include for this collection to color event data by.\n\n \n \n \n \n \n \n \n \n \n\n\n \n \n \n Properties\n \n \n \n \n \n \n \n Private\n allColorByOptions\n \n \n \n \n \n \n Type : ColorByOption[]\n\n \n \n \n \n Default value : [\n {\n key: ColorByOptionKeys.CHARGE,\n name: 'Charge ' + PrettySymbols.getPrettySymbol('charge'),\n initialize: this.initChargeColorOptions.bind(this),\n apply: this.applyChargeColorOptions.bind(this),\n },\n {\n key: ColorByOptionKeys.MOM,\n name: 'Momentum ' + PrettySymbols.getPrettySymbol('mom'),\n initialize: this.initMomColorOptions.bind(this),\n apply: this.applyMomColorOptions.bind(this),\n },\n {\n key: ColorByOptionKeys.VERTEX,\n name: 'Vertex',\n apply: this.applyVertexColorOptions.bind(this),\n },\n ]\n \n \n \n \n Defined in src/managers/ui-manager/color-options.ts:35\n \n \n\n \n \n All color by options possible.\n\n \n \n\n \n \n \n \n \n \n \n \n Private\n chargeColors\n \n \n \n \n \n \n Type : object\n\n \n \n \n \n Default value : {\n '-1': '#ff0000',\n '0': '#ff0000',\n '1': '#ff0000',\n }\n \n \n \n \n Defined in src/managers/ui-manager/color-options.ts:57\n \n \n\n \n \n Default values for colors for color by charge.\n\n \n \n\n \n \n \n \n \n \n \n \n Private\n collectionName\n \n \n \n \n \n \n Type : string\n\n \n \n \n \n Defined in src/managers/ui-manager/color-options.ts:26\n \n \n\n \n \n Collection name of the event data type.\n\n \n \n\n \n \n \n \n \n \n \n \n Private\n colorByOptions\n \n \n \n \n \n \n Type : ColorByOption[]\n\n \n \n \n \n Defined in src/managers/ui-manager/color-options.ts:28\n \n \n\n \n \n Available options to color by in this instance of color options.\n\n \n \n\n \n \n \n \n \n \n \n \n Private\n colorOptionsFolder\n \n \n \n \n \n \n Type : PhoenixMenuNode\n\n \n \n \n \n Defined in src/managers/ui-manager/color-options.ts:32\n \n \n\n \n \n Phoenix menu node containing color configurations.\n\n \n \n\n \n \n \n \n \n \n \n \n Private\n momColors\n \n \n \n \n \n \n Type : object\n\n \n \n \n \n Default value : {\n min: {\n value: 0,\n color: '#ff0000',\n },\n max: {\n value: 50000,\n color: '#ff0000',\n },\n }\n \n \n \n \n Defined in src/managers/ui-manager/color-options.ts:65\n \n \n\n \n \n Default values for colors and min/max for color by momentum.\n\n \n \n\n \n \n \n \n \n \n \n \n Private\n selectedColorByOption\n \n \n \n \n \n \n Type : ColorByOptionKeys\n\n \n \n \n \n Defined in src/managers/ui-manager/color-options.ts:30\n \n \n\n \n \n Currently selected option to color by.\n\n \n \n\n \n \n\n\n \n \n \n Methods\n \n \n \n \n \n \n \n Private\n applyChargeColorOptions\n \n \n \n \n \n \n \n applyChargeColorOptions()\n \n \n\n\n \n \n Defined in src/managers/ui-manager/color-options.ts:176\n \n \n\n\n \n \n Apply charge color options.\n\n\n \n Returns : void\n\n \n \n \n \n \n \n \n \n \n \n \n Private\n applyMomColorOptions\n \n \n \n \n \n \n \n applyMomColorOptions()\n \n \n\n\n \n \n Defined in src/managers/ui-manager/color-options.ts:246\n \n \n\n\n \n \n Apply momentum color options.\n\n\n \n Returns : void\n\n \n \n \n \n \n \n \n \n \n \n \n Private\n applyVertexColorOptions\n \n \n \n \n \n \n \n applyVertexColorOptions()\n \n \n\n\n \n \n Defined in src/managers/ui-manager/color-options.ts:293\n \n \n\n\n \n \n Apply color by vertex to tracks.\n\n\n \n Returns : void\n\n \n \n \n \n \n \n \n \n \n \n \n Private\n colorByMomentum\n \n \n \n \n \n \n \n colorByMomentum(minOrMax: string)\n \n \n\n\n \n \n Defined in src/managers/ui-manager/color-options.ts:256\n \n \n\n\n \n \n Color event data based on the momentum property of each object.\nThis is to apply the stored momentum colors for minimum and maximum separated at the mid value.\n\n\n \n Parameters :\n \n \n \n \n Name\n Type\n Optional\n Description\n \n \n \n \n minOrMax\n \n string\n \n\n \n No\n \n\n\n \n If the momentum to color objects by is minimum or maximum momentum.\nThis is to apply the stored momentum colors for minimum and maximum separated at the mid value.\n\n \n \n \n \n \n \n \n \n Returns : void\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n Private\n getMomentum\n \n \n \n \n \n \n \n getMomentum(objectParams: any)\n \n \n\n\n \n \n Defined in src/managers/ui-manager/color-options.ts:282\n \n \n\n\n \n \n Get momentum from object parameters.\n\n\n \n Parameters :\n \n \n \n \n Name\n Type\n Optional\n Description\n \n \n \n \n objectParams\n \n any\n \n\n \n No\n \n\n\n \n Parameters associated to the 3D object.\n\n \n \n \n \n \n \n \n \n Returns : any\n\n \n \n THe momentum value.\n\n \n \n \n \n \n \n \n \n \n \n \n Private\n initChargeColorOptions\n \n \n \n \n \n \n \n initChargeColorOptions()\n \n \n\n\n \n \n Defined in src/managers/ui-manager/color-options.ts:150\n \n \n\n\n \n \n Initialize charge color options.\n\n\n \n Returns : void\n\n \n \n \n \n \n \n \n \n \n \n \n Private\n initColorByOptions\n \n \n \n \n \n \n \n initColorByOptions()\n \n \n\n\n \n \n Defined in src/managers/ui-manager/color-options.ts:124\n \n \n\n\n \n \n Initialize the color options.\n\n\n \n Returns : void\n\n \n \n \n \n \n \n \n \n \n \n \n Private\n initMomColorOptions\n \n \n \n \n \n \n \n initMomColorOptions()\n \n \n\n\n \n \n Defined in src/managers/ui-manager/color-options.ts:207\n \n \n\n\n \n \n Initialize momentum color options.\n\n\n \n Returns : void\n\n \n \n \n \n \n \n \n \n \n \n \n Private\n onlySelectedColorByOption\n \n \n \n \n \n \n \n onlySelectedColorByOption()\n \n \n\n\n \n \n Defined in src/managers/ui-manager/color-options.ts:300\n \n \n\n\n \n \n Show configs of only the currently selected color by option.\n\n\n \n Returns : void\n\n \n \n \n \n \n \n \n \n \n \n \n Private\n shouldColorByCharge\n \n \n \n \n \n \n \n shouldColorByCharge(objectParams: any, chargeValue: number)\n \n \n\n\n \n \n Defined in src/managers/ui-manager/color-options.ts:193\n \n \n\n\n \n \n Check if object should be colored based on charge value.\n\n\n \n Parameters :\n \n \n \n \n Name\n Type\n Optional\n Description\n \n \n \n \n objectParams\n \n any\n \n\n \n No\n \n\n\n \n Object parameters associated to the 3D object.\n\n \n \n \n chargeValue\n \n number\n \n\n \n No\n \n\n\n \n Value of charge (-1, 0, 1).\n\n \n \n \n \n \n \n \n \n Returns : boolean\n\n \n \n Whether the charge is equal to the value.\n\n \n \n \n \n \n\n\n\n\n\n\n \n\n\n \n import { Color } from 'three';\nimport { PrettySymbols } from '../../helpers/pretty-symbols';\nimport { ColorManager } from '../three-manager/color-manager';\nimport { PhoenixMenuNode } from './phoenix-menu/phoenix-menu-node';\n\n/** Keys for options available for coloring event data by. */\nexport enum ColorByOptionKeys {\n CHARGE = 'charge',\n MOM = 'mom',\n VERTEX = 'vertex',\n}\n\n/** Type for a single color by option. */\ntype ColorByOption = {\n key: ColorByOptionKeys;\n name: string;\n initialize?: () => void;\n apply?: () => void;\n};\n\n/**\n * Color options with functions to color event data.\n */\nexport class ColorOptions {\n /** Collection name of the event data type. */\n private collectionName: string;\n /** Available options to color by in this instance of color options. */\n private colorByOptions: ColorByOption[];\n /** Currently selected option to color by. */\n private selectedColorByOption: ColorByOptionKeys;\n /** Phoenix menu node containing color configurations. */\n private colorOptionsFolder: PhoenixMenuNode;\n\n /** All color by options possible. */\n private allColorByOptions: ColorByOption[] = [\n {\n key: ColorByOptionKeys.CHARGE,\n name: 'Charge ' + PrettySymbols.getPrettySymbol('charge'),\n initialize: this.initChargeColorOptions.bind(this),\n apply: this.applyChargeColorOptions.bind(this),\n },\n {\n key: ColorByOptionKeys.MOM,\n name: 'Momentum ' + PrettySymbols.getPrettySymbol('mom'),\n initialize: this.initMomColorOptions.bind(this),\n apply: this.applyMomColorOptions.bind(this),\n },\n {\n key: ColorByOptionKeys.VERTEX,\n name: 'Vertex',\n apply: this.applyVertexColorOptions.bind(this),\n },\n ];\n\n // Charge options.\n /** Default values for colors for color by charge. */\n private chargeColors = {\n '-1': '#ff0000',\n '0': '#ff0000',\n '1': '#ff0000',\n };\n\n // Momentum options.\n /** Default values for colors and min/max for color by momentum. */\n private momColors = {\n min: {\n value: 0,\n color: '#ff0000',\n },\n max: {\n value: 50000,\n color: '#ff0000',\n },\n };\n\n /**\n * Create the color options.\n * @param colorManager Color manager for three.js functions related to coloring of objects.\n * @param collectionFolder Collection folder to add the color by options to.\n * @param colorByOptionsToInclude Options to include for this collection to color event data by.\n */\n constructor(\n private colorManager: ColorManager,\n collectionFolder: PhoenixMenuNode,\n collectionColor: Color,\n colorByOptionsToInclude?: ColorByOptionKeys[]\n ) {\n this.collectionName = collectionFolder.name;\n this.colorOptionsFolder = collectionFolder.addChild('Color Options');\n\n this.colorOptionsFolder.addConfig('color', {\n label: 'Color',\n color: collectionColor\n ? `#${collectionColor?.getHexString()}`\n : undefined,\n onChange: (value) =>\n this.colorManager.collectionColor(this.collectionName, value),\n });\n\n this.colorOptionsFolder.addConfig('button', {\n label: 'Random',\n onClick: () =>\n this.colorManager.collectionColorRandom(this.collectionName),\n });\n\n // Check which color by options are to be included.\n\n if (colorByOptionsToInclude?.length > 0) {\n this.colorByOptions = this.allColorByOptions.filter((colorByOption) =>\n colorByOptionsToInclude.includes(colorByOption.key)\n );\n\n this.initColorByOptions();\n this.colorByOptions.forEach((colorByOption) =>\n colorByOption.initialize?.()\n );\n this.onlySelectedColorByOption();\n }\n }\n\n /**\n * Initialize the color options.\n */\n private initColorByOptions() {\n this.selectedColorByOption = this.colorByOptions[0].key;\n\n // Configurations\n\n this.colorOptionsFolder.addConfig('select', {\n label: 'Color by',\n options: this.colorByOptions.map((colorByOption) => colorByOption.name),\n onChange: (updatedColorByOption) => {\n const newColorByOption = this.colorByOptions.find(\n (colorByOption) => colorByOption.name === updatedColorByOption\n );\n\n this.selectedColorByOption = newColorByOption?.key;\n newColorByOption?.apply?.();\n\n this.onlySelectedColorByOption();\n },\n });\n }\n\n // Charge options.\n\n /**\n * Initialize charge color options.\n */\n private initChargeColorOptions() {\n // Charge configurations\n [-1, 0, 1].forEach((chargeValue) => {\n this.colorOptionsFolder.addConfig('color', {\n label: `${PrettySymbols.getPrettySymbol('charge')}=${chargeValue}`,\n group: ColorByOptionKeys.CHARGE,\n color: this.chargeColors[chargeValue],\n onChange: (color) => {\n this.chargeColors[chargeValue] = color;\n\n if (this.selectedColorByOption === ColorByOptionKeys.CHARGE) {\n this.colorManager.colorObjectsByProperty(\n color,\n this.collectionName,\n (objectUserData) =>\n this.shouldColorByCharge(objectUserData, chargeValue)\n );\n }\n },\n });\n });\n }\n\n /**\n * Apply charge color options.\n */\n private applyChargeColorOptions() {\n [-1, 0, 1].forEach((chargeValue) => {\n this.colorManager.colorObjectsByProperty(\n this.chargeColors[chargeValue],\n this.collectionName,\n (objectUserData) =>\n this.shouldColorByCharge(objectUserData, chargeValue)\n );\n });\n }\n\n /**\n * Check if object should be colored based on charge value.\n * @param objectParams Object parameters associated to the 3D object.\n * @param chargeValue Value of charge (-1, 0, 1).\n * @returns Whether the charge is equal to the value.\n */\n private shouldColorByCharge(objectParams: any, chargeValue: number) {\n // For ATLAS data, the charge is calculated from dparams[4] otherwise it exists as an object's userData\n if (Math.sign(1 / parseInt(objectParams?.dparams?.[4])) === chargeValue) {\n return true;\n } else if (objectParams?.charge === chargeValue) {\n return true;\n }\n }\n\n // Momentum options.\n\n /**\n * Initialize momentum color options.\n */\n private initMomColorOptions() {\n // Momentum configurations\n Object.entries(this.momColors).forEach(([key, momValue]) => {\n this.colorOptionsFolder.addConfig('slider', {\n label: PrettySymbols.getPrettySymbol('mom') + ' ' + key,\n group: ColorByOptionKeys.MOM,\n min: this.momColors.min.value,\n max: this.momColors.max.value,\n value: this.momColors[key].value,\n step: 10,\n allowCustomValue: true,\n onChange: (sliderValue) => {\n this.momColors[key].value = sliderValue;\n\n if (this.selectedColorByOption === ColorByOptionKeys.MOM) {\n this.colorByMomentum('min');\n this.colorByMomentum('max');\n }\n },\n });\n\n this.colorOptionsFolder.addConfig('color', {\n label: PrettySymbols.getPrettySymbol('mom') + ' ' + key + ' color',\n group: ColorByOptionKeys.MOM,\n color: momValue.color,\n onChange: (color) => {\n this.momColors[key].color = color;\n\n if (this.selectedColorByOption === ColorByOptionKeys.MOM) {\n this.colorByMomentum(key);\n }\n },\n });\n });\n }\n\n /**\n * Apply momentum color options.\n */\n private applyMomColorOptions() {\n this.colorByMomentum('min');\n this.colorByMomentum('max');\n }\n\n /**\n * Color event data based on the momentum property of each object.\n * @param minOrMax If the momentum to color objects by is minimum or maximum momentum.\n * This is to apply the stored momentum colors for minimum and maximum separated at the mid value.\n */\n private colorByMomentum(minOrMax: string) {\n this.colorManager.colorObjectsByProperty(\n this.momColors[minOrMax].color,\n this.collectionName,\n (objectParams) => {\n const mom = this.getMomentum(objectParams);\n const mid = (this.momColors.min.value + this.momColors.max.value) / 2;\n\n if (minOrMax === 'max' && mom > mid && mom this.momColors.min.value\n ) {\n return true;\n }\n }\n );\n }\n\n /**\n * Get momentum from object parameters.\n * @param objectParams Parameters associated to the 3D object.\n * @returns THe momentum value.\n */\n private getMomentum(objectParams: any) {\n return objectParams?.dparams?.[4]\n ? Math.abs(1 / parseFloat(objectParams?.dparams?.[4]))\n : objectParams?.mom;\n }\n\n // Vertex options.\n\n /**\n * Apply color by vertex to tracks.\n */\n private applyVertexColorOptions() {\n this.colorManager.colorTracksByVertex(this.collectionName);\n }\n\n /**\n * Show configs of only the currently selected color by option.\n */\n private onlySelectedColorByOption() {\n this.colorOptionsFolder.configs.forEach((config) => {\n const groupNotSelected =\n config.group !== undefined &&\n config.group !== this.selectedColorByOption;\n\n config.hidden = groupNotSelected ? true : false;\n });\n }\n}\n\n \n\n\n\n\n\n\n\n\n\n\n \n \n results matching \"\"\n \n \n \n No results matching \"\"\n \n\n"},"interfaces/Configuration.html":{"url":"interfaces/Configuration.html","title":"interface - Configuration","body":"\n \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n Interfaces\n \n Configuration\n\n\n\n \n Info\n \n \n Source\n \n\n\n\n \n \n File\n \n \n src/lib/types/configuration.ts\n \n\n\n \n Description\n \n \n Configuration of the event display.\n\n \n\n\n \n Index\n \n \n \n \n Properties\n \n \n \n \n \n \n Optional\n \n allowUrlOptions\n \n \n \n Optional\n \n defaultEventFile\n \n \n \n Optional\n \n defaultView\n \n \n \n Optional\n \n elementId\n \n \n \n Optional\n \n enableDatGUIMenu\n \n \n \n Optional\n \n eventDataLoader\n \n \n \n Optional\n \n forceColourTheme\n \n \n \n Optional\n \n phoenixMenuRoot\n \n \n \n Optional\n \n presetAnimations\n \n \n \n Optional\n \n presetViews\n \n \n \n \n \n \n \n \n\n\n\n \n Properties\n \n \n \n \n \n allowUrlOptions\n \n \n \n \n \n \n \n \n allowUrlOptions: boolean\n\n \n \n\n\n \n \n Type : boolean\n\n \n \n\n \n \n Optional\n \n \n\n\n\n\n \n \n Whether to allow URL options or not (true by default).\n\n \n \n \n \n \n \n \n \n \n defaultEventFile\n \n \n \n \n \n \n \n \n defaultEventFile: literal type\n\n \n \n\n\n \n \n Type : literal type\n\n \n \n\n \n \n Optional\n \n \n\n\n\n\n \n \n Default event to load when none given in URL.\n\n \n \n \n \n \n \n \n \n \n defaultView\n \n \n \n \n \n \n \n \n defaultView: number[]\n\n \n \n\n\n \n \n Type : number[]\n\n \n \n\n \n \n Optional\n \n \n\n\n\n\n \n \n Default view [x,y,z].\n\n \n \n \n \n \n \n \n \n \n elementId\n \n \n \n \n \n \n \n \n elementId: string\n\n \n \n\n\n \n \n Type : string\n\n \n \n\n \n \n Optional\n \n \n\n\n\n\n \n \n ID of the wrapper element.\n\n \n \n \n \n \n \n \n \n \n enableDatGUIMenu\n \n \n \n \n \n \n \n \n enableDatGUIMenu: boolean\n\n \n \n\n\n \n \n Type : boolean\n\n \n \n\n \n \n Optional\n \n \n\n\n\n\n \n \n Whether to enable dat.GUI menu or not.\n\n \n \n \n \n \n \n \n \n \n eventDataLoader\n \n \n \n \n \n \n \n \n eventDataLoader: EventDataLoader\n\n \n \n\n\n \n \n Type : EventDataLoader\n\n \n \n\n \n \n Optional\n \n \n\n\n\n\n \n \n Event data loader responsible for processing and loading event data.\n\n \n \n \n \n \n \n \n \n \n forceColourTheme\n \n \n \n \n \n \n \n \n forceColourTheme: string\n\n \n \n\n\n \n \n Type : string\n\n \n \n\n \n \n Optional\n \n \n\n\n\n\n \n \n Whether to force a theme ('dark' or 'light' are current options)\n\n \n \n \n \n \n \n \n \n \n phoenixMenuRoot\n \n \n \n \n \n \n \n \n phoenixMenuRoot: PhoenixMenuNode\n\n \n \n\n\n \n \n Type : PhoenixMenuNode\n\n \n \n\n \n \n Optional\n \n \n\n\n\n\n \n \n Root node of the phoenix menu.\n\n \n \n \n \n \n \n \n \n \n presetAnimations\n \n \n \n \n \n \n \n \n presetAnimations: AnimationPreset[]\n\n \n \n\n\n \n \n Type : AnimationPreset[]\n\n \n \n\n \n \n Optional\n \n \n\n\n\n\n \n \n Preset animations for switching event display camera.\n\n \n \n \n \n \n \n \n \n \n presetViews\n \n \n \n \n \n \n \n \n presetViews: PresetView[]\n\n \n \n\n\n \n \n Type : PresetView[]\n\n \n \n\n \n \n Optional\n \n \n\n\n\n\n \n \n Preset views for switching event display camera.\n\n \n \n \n \n \n \n\n\n \n import { PresetView } from '../models/preset-view.model';\nimport { EventDataLoader } from '../../loaders/event-data-loader';\nimport { PhoenixMenuNode } from '../../managers/ui-manager/phoenix-menu/phoenix-menu-node';\nimport { AnimationPreset } from '../../managers/three-manager/animations-manager';\nimport { DepthPackingStrategies } from 'three';\n\n/**\n * Configuration of the event display.\n */\nexport interface Configuration {\n /** Default view [x,y,z]. */\n defaultView?: number[];\n /** Preset views for switching event display camera. */\n presetViews?: PresetView[];\n /** Preset animations for switching event display camera. */\n presetAnimations?: AnimationPreset[];\n /** Event data loader responsible for processing and loading event data. */\n eventDataLoader?: EventDataLoader;\n /** Root node of the phoenix menu. */\n phoenixMenuRoot?: PhoenixMenuNode;\n /** Whether to enable dat.GUI menu or not. */\n enableDatGUIMenu?: boolean;\n /** ID of the wrapper element. */\n elementId?: string;\n /** Default event to load when none given in URL. */\n defaultEventFile?: { eventFile: string; eventType: string };\n /** Whether to allow URL options or not (true by default). */\n allowUrlOptions?: boolean;\n /** Whether to force a theme ('dark' or 'light' are current options) */\n forceColourTheme?: string;\n}\n\n \n\n\n\n\n\n\n\n\n\n \n \n results matching \"\"\n \n \n \n No results matching \"\"\n \n\n"},"classes/CoordinateHelper.html":{"url":"classes/CoordinateHelper.html","title":"class - CoordinateHelper","body":"\n \n\n\n\n\n\n\n\n\n\n\n\n\n\n Classes\n CoordinateHelper\n\n\n\n \n Info\n \n \n Source\n \n\n\n\n \n \n File\n \n \n src/helpers/coordinate-helper.ts\n \n\n\n \n Description\n \n \n Helper methods for coordinate conversions.\n\n \n\n\n\n\n \n Index\n \n \n\n \n \n Methods\n \n \n \n \n \n \n Static\n anglesAreSane\n \n \n Static\n atlasQuaternion\n \n \n Static\n etaPhiToCartesian\n \n \n Static\n etaToTheta\n \n \n Static\n sphericalToCartesian\n \n \n Static\n thetaToEta\n \n \n \n \n\n\n\n\n\n \n \n\n\n\n\n \n \n \n Methods\n \n \n \n \n \n \n \n Static\n anglesAreSane\n \n \n \n \n \n \n \n anglesAreSane(theta: number, phi: number)\n \n \n\n\n \n \n Defined in src/helpers/coordinate-helper.ts:13\n \n \n\n\n \n \n Checks if angles are within range: -PI \n\n\n \n Parameters :\n \n \n \n \n Name\n Type\n Optional\n Description\n \n \n \n \n theta\n \n number\n \n\n \n No\n \n\n\n \n equatorial angle\n\n \n \n \n phi\n \n number\n \n\n \n No\n \n\n\n \n azimuthal angle\n\n \n \n \n \n \n \n \n \n Returns : boolean\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n Static\n atlasQuaternion\n \n \n \n \n \n \n \n atlasQuaternion()\n \n \n\n\n \n \n Defined in src/helpers/coordinate-helper.ts:81\n \n \n\n\n \n \n Returns the Quaternion to rotate to ATLAS coords.\nTemporary. We will need to make this configurable per experiment.\n\n\n \n Returns : Quaternion\n\n \n \n \n \n \n \n \n \n \n \n \n Static\n etaPhiToCartesian\n \n \n \n \n \n \n \n etaPhiToCartesian(radius: number, eta: number, phi: number)\n \n \n\n\n \n \n Defined in src/helpers/coordinate-helper.ts:65\n \n \n\n\n \n \n Get cartesian from eta/phi parameters.\nApplies the necessary rotations to move from threejs native to experimental.\n\n\n \n Parameters :\n \n \n \n \n Name\n Type\n Optional\n Description\n \n \n \n \n radius\n \n number\n \n\n \n No\n \n\n\n \n The radius.\n\n \n \n \n eta\n \n number\n \n\n \n No\n \n\n\n \n Pseudorapidity\n\n \n \n \n phi\n \n number\n \n\n \n No\n \n\n\n \n Phi angle.\n\n \n \n \n \n \n \n \n \n Returns : Vector3\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n Static\n etaToTheta\n \n \n \n \n \n \n \n etaToTheta(eta: number)\n \n \n\n\n \n \n Defined in src/helpers/coordinate-helper.ts:25\n \n \n\n\n \n \n Convert pseudorapidity eta to spherical coordinate theta.\nSee definition here: https://en.wikipedia.org/wiki/Pseudorapidity\n\n\n \n Parameters :\n \n \n \n \n Name\n Type\n Optional\n Description\n \n \n \n \n eta\n \n number\n \n\n \n No\n \n\n\n \n Pseudorapidity eta to convert to theta.\n\n \n \n \n \n \n \n \n \n Returns : number\n\n \n \n theta in radians\n\n \n \n \n \n \n \n \n \n \n \n \n Static\n sphericalToCartesian\n \n \n \n \n \n \n \n sphericalToCartesian(radius: number, theta: number, phi: number)\n \n \n\n\n \n \n Defined in src/helpers/coordinate-helper.ts:46\n \n \n\n\n \n \n Get cartesian from spherical parameters.\nApplies the necessary rotations to move from threejs to experimental.\n\n\n \n Parameters :\n \n \n \n \n Name\n Type\n Optional\n Description\n \n \n \n \n radius\n \n number\n \n\n \n No\n \n\n\n \n The radius.\n\n \n \n \n theta\n \n number\n \n\n \n No\n \n\n\n \n Theta angle.\n\n \n \n \n phi\n \n number\n \n\n \n No\n \n\n\n \n Phi angle.\n\n \n \n \n \n \n \n \n \n Returns : Vector3\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n Static\n thetaToEta\n \n \n \n \n \n \n \n thetaToEta(theta: number)\n \n \n\n\n \n \n Defined in src/helpers/coordinate-helper.ts:35\n \n \n\n\n \n \n Convert spherical theta to pseudorapidity eta.\nSee definition here: https://en.wikipedia.org/wiki/Pseudorapidity\n\n\n \n Parameters :\n \n \n \n \n Name\n Type\n Optional\n Description\n \n \n \n \n theta\n \n number\n \n\n \n No\n \n\n\n \n Angle in radians to convert to pseudorapidity eta.\n\n \n \n \n \n \n \n \n \n Returns : number\n\n \n \n pseudorapidity eta\n\n \n \n \n \n \n\n\n\n\n\n\n \n\n\n \n import { Vector3, Quaternion } from 'three';\n\n/**\n * Helper methods for coordinate conversions.\n */\nexport class CoordinateHelper {\n /**\n * Checks if angles are within range: -PI phi;\n const tmp2 = 0 theta;\n return tmp1 && tmp2;\n }\n\n /**\n * Convert pseudorapidity eta to spherical coordinate theta.\n * See definition here: https://en.wikipedia.org/wiki/Pseudorapidity\n * @param eta Pseudorapidity eta to convert to theta.\n * @returns theta in radians\n */\n public static etaToTheta(eta: number): number {\n return 2 * Math.atan(Math.pow(Math.E, -eta));\n }\n\n /**\n * Convert spherical theta to pseudorapidity eta.\n * See definition here: https://en.wikipedia.org/wiki/Pseudorapidity\n * @param theta Angle in radians to convert to pseudorapidity eta.\n * @returns pseudorapidity eta\n */\n public static thetaToEta(theta: number): number {\n return -Math.log(Math.tan(theta / 2.0));\n }\n\n /**\n * Get cartesian from spherical parameters.\n * Applies the necessary rotations to move from threejs to experimental.\n * @param radius The radius.\n * @param theta Theta angle.\n * @param phi Phi angle.\n */\n public static sphericalToCartesian(\n radius: number,\n theta: number,\n phi: number\n ): Vector3 {\n // Threejs uses theta as azimuthal, so need to reverse.\n const vector = new Vector3();\n vector.setFromSphericalCoords(radius, theta, phi);\n vector.applyQuaternion(CoordinateHelper.atlasQuaternion());\n return vector;\n }\n\n /**\n * Get cartesian from eta/phi parameters.\n * Applies the necessary rotations to move from threejs native to experimental.\n * @param radius The radius.\n * @param eta Pseudorapidity\n * @param phi Phi angle.\n */\n public static etaPhiToCartesian(\n radius: number,\n eta: number,\n phi: number\n ): Vector3 {\n const vector = new Vector3();\n // Threejs uses theta as azimuthal, so need to reverse.\n vector.setFromSphericalCoords(radius, this.etaToTheta(eta), phi);\n vector.applyQuaternion(CoordinateHelper.atlasQuaternion());\n return vector;\n }\n\n /**\n * Returns the Quaternion to rotate to ATLAS coords.\n * Temporary. We will need to make this configurable per experiment.\n */\n public static atlasQuaternion(): Quaternion {\n // With nothing, we have eta=0 on x, and phi=0 on z\n // Should be eta=0 on y, and phi=0 on x\n const v1 = new Vector3(0, 1, 0);\n const v2 = new Vector3(0, 0, 1);\n const quaternion = new Quaternion();\n quaternion.setFromUnitVectors(v1, v2); // This puts eta~infinite on z-axis, eta=0 on but y-positive is phi=PI (and eta=0 on x)\n const quaternion2 = new Quaternion();\n quaternion2.setFromAxisAngle(new Vector3(0, 1, 0), Math.PI / 2.0); // Now have eta = 3.0 on -x, eta =0 on +y, and phi = 0 on +z\n quaternion.multiply(quaternion2);\n return quaternion;\n }\n}\n\n \n\n\n\n\n\n\n\n\n\n\n \n \n results matching \"\"\n \n \n \n No results matching \"\"\n \n\n"},"classes/Cut.html":{"url":"classes/Cut.html","title":"class - Cut","body":"\n \n\n\n\n\n\n\n\n\n\n\n\n\n\n Classes\n Cut\n\n\n\n \n Info\n \n \n Source\n \n\n\n\n \n \n File\n \n \n src/lib/models/cut.model.ts\n \n\n\n \n Description\n \n \n Cut for specifying filters on event data attribute.\n\n \n\n\n\n\n \n Index\n \n \n \n \n Properties\n \n \n \n \n \n \n Private\n defaultApplyMaxValue\n \n \n Private\n defaultApplyMinValue\n \n \n Private\n defaultMaxValue\n \n \n Private\n defaultMinValue\n \n \n Public\n field\n \n \n Public\n maxCutActive\n \n \n Public\n maxValue\n \n \n Public\n minCutActive\n \n \n Public\n minValue\n \n \n Public\n step\n \n \n \n \n\n \n \n Methods\n \n \n \n \n \n \n cutPassed\n \n \n enableMaxCut\n \n \n enableMinCut\n \n \n reset\n \n \n \n \n\n\n\n\n\n \n \n\n\n \n Constructor\n \n \n \n \nconstructor(field: string, minValue: number, maxValue: number, step: number, minCutActive: boolean, maxCutActive: boolean)\n \n \n \n \n Defined in src/lib/models/cut.model.ts:12\n \n \n\n \n \n Create the cut to filter an event data attribute.\n\n \n Parameters :\n \n \n \n Name\n Type\n Optional\n Description\n \n \n \n \n field\n \n \n string\n \n \n \n No\n \n \n \n Name of the event data attribute to be filtered.\n\n \n \n \n minValue\n \n \n number\n \n \n \n No\n \n \n \n Minimum allowed value of the event data attribute.\n\n \n \n \n maxValue\n \n \n number\n \n \n \n No\n \n \n \n Maximum allowed value of the event data attribute.\n\n \n \n \n step\n \n \n number\n \n \n \n No\n \n \n \n Size of increment when using slider.\n\n \n \n \n minCutActive\n \n \n boolean\n \n \n \n No\n \n \n \n If true, the minimum cut is appled. Can be overriden later with enableMinCut.\n\n \n \n \n maxCutActive\n \n \n boolean\n \n \n \n No\n \n \n \n If true, the maximum cut is appled. Can be overriden later with enableMaxCut.\n\n \n \n \n \n \n \n \n \n \n\n\n \n \n \n Properties\n \n \n \n \n \n \n \n Private\n defaultApplyMaxValue\n \n \n \n \n \n \n Type : boolean\n\n \n \n \n \n Defined in src/lib/models/cut.model.ts:10\n \n \n\n \n \n Default if upper bound applied\n\n \n \n\n \n \n \n \n \n \n \n \n Private\n defaultApplyMinValue\n \n \n \n \n \n \n Type : boolean\n\n \n \n \n \n Defined in src/lib/models/cut.model.ts:12\n \n \n\n \n \n Default if lower bound applied\n\n \n \n\n \n \n \n \n \n \n \n \n Private\n defaultMaxValue\n \n \n \n \n \n \n Type : number\n\n \n \n \n \n Defined in src/lib/models/cut.model.ts:8\n \n \n\n \n \n Default maximum allowed value of the event data attribute.\n\n \n \n\n \n \n \n \n \n \n \n \n Private\n defaultMinValue\n \n \n \n \n \n \n Type : number\n\n \n \n \n \n Defined in src/lib/models/cut.model.ts:6\n \n \n\n \n \n Default minimum allowed value of the event data attribute.\n\n \n \n\n \n \n \n \n \n \n \n \n Public\n field\n \n \n \n \n \n \n Type : string\n\n \n \n \n \n Defined in src/lib/models/cut.model.ts:24\n \n \n\n \n \n Name of the event data attribute to be filtered.\n \n \n\n \n \n \n \n \n \n \n \n Public\n maxCutActive\n \n \n \n \n \n \n Type : boolean\n\n \n \n \n \n Default value : true\n \n \n \n \n Defined in src/lib/models/cut.model.ts:29\n \n \n\n \n \n If true, the maximum cut is appled. Can be overriden later with enableMaxCut.\n \n \n\n \n \n \n \n \n \n \n \n Public\n maxValue\n \n \n \n \n \n \n Type : number\n\n \n \n \n \n Defined in src/lib/models/cut.model.ts:26\n \n \n\n \n \n Maximum allowed value of the event data attribute.\n \n \n\n \n \n \n \n \n \n \n \n Public\n minCutActive\n \n \n \n \n \n \n Type : boolean\n\n \n \n \n \n Default value : true\n \n \n \n \n Defined in src/lib/models/cut.model.ts:28\n \n \n\n \n \n If true, the minimum cut is appled. Can be overriden later with enableMinCut.\n \n \n\n \n \n \n \n \n \n \n \n Public\n minValue\n \n \n \n \n \n \n Type : number\n\n \n \n \n \n Defined in src/lib/models/cut.model.ts:25\n \n \n\n \n \n Minimum allowed value of the event data attribute.\n \n \n\n \n \n \n \n \n \n \n \n Public\n step\n \n \n \n \n \n \n Type : number\n\n \n \n \n \n Default value : 1\n \n \n \n \n Defined in src/lib/models/cut.model.ts:27\n \n \n\n \n \n Size of increment when using slider.\n \n \n\n \n \n\n\n \n \n \n Methods\n \n \n \n \n \n \n \n cutPassed\n \n \n \n \n \n \ncutPassed(value: number)\n \n \n\n\n \n \n Defined in src/lib/models/cut.model.ts:48\n \n \n\n\n \n \n Returns true if the passed value is within the active cut range.\n\n\n \n Parameters :\n \n \n \n \n Name\n Type\n Optional\n \n \n \n \n value\n \n number\n \n\n \n No\n \n\n\n \n \n \n \n \n \n \n Returns : boolean\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n enableMaxCut\n \n \n \n \n \n \nenableMaxCut(check: boolean)\n \n \n\n\n \n \n Defined in src/lib/models/cut.model.ts:38\n \n \n\n\n \n \n Returns true if upper cut is valid.\n\n\n \n Parameters :\n \n \n \n \n Name\n Type\n Optional\n \n \n \n \n check\n \n boolean\n \n\n \n No\n \n\n\n \n \n \n \n \n \n \n Returns : void\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n enableMinCut\n \n \n \n \n \n \nenableMinCut(check: boolean)\n \n \n\n\n \n \n Defined in src/lib/models/cut.model.ts:43\n \n \n\n\n \n \n Returns true if upper cut is valid.\n\n\n \n Parameters :\n \n \n \n \n Name\n Type\n Optional\n \n \n \n \n check\n \n boolean\n \n\n \n No\n \n\n\n \n \n \n \n \n \n \n Returns : void\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n reset\n \n \n \n \n \n \nreset()\n \n \n\n\n \n \n Defined in src/lib/models/cut.model.ts:58\n \n \n\n\n \n \n Reset the minimum and maximum value of the cut to default.\n\n\n \n Returns : void\n\n \n \n \n \n \n\n\n\n\n\n\n \n\n\n \n export class Cut {\n /** Default minimum allowed value of the event data attribute. */\n private defaultMinValue: number;\n /** Default maximum allowed value of the event data attribute. */\n private defaultMaxValue: number;\n /** Default if upper bound applied */\n private defaultApplyMaxValue: boolean;\n /** Default if lower bound applied */\n private defaultApplyMinValue: boolean;\n /**\n * Create the cut to filter an event data attribute.\n * @param field Name of the event data attribute to be filtered.\n * @param minValue Minimum allowed value of the event data attribute.\n * @param maxValue Maximum allowed value of the event data attribute.\n * @param step Size of increment when using slider.\n * @param minCutActive If true, the minimum cut is appled. Can be overriden later with enableMinCut.\n * @param maxCutActive If true, the maximum cut is appled. Can be overriden later with enableMaxCut.\n *\n */\n constructor(\n public field: string,\n public minValue: number,\n public maxValue: number,\n public step: number = 1,\n public minCutActive: boolean = true,\n public maxCutActive: boolean = true\n ) {\n this.defaultMinValue = minValue;\n this.defaultMaxValue = maxValue;\n this.defaultApplyMinValue = minCutActive;\n this.defaultApplyMaxValue = maxCutActive;\n }\n\n /** Returns true if upper cut is valid. */\n enableMaxCut(check: boolean) {\n this.maxCutActive = check;\n }\n\n /** Returns true if upper cut is valid. */\n enableMinCut(check: boolean) {\n this.minCutActive = check;\n }\n\n /** Returns true if the passed value is within the active cut range. */\n cutPassed(value: number): boolean {\n return (\n (!this.maxCutActive || value this.minValue)\n );\n }\n\n /**\n * Reset the minimum and maximum value of the cut to default.\n */\n reset() {\n this.minValue = this.defaultMinValue;\n this.maxValue = this.defaultMaxValue;\n this.minCutActive = this.defaultApplyMinValue;\n this.maxCutActive = this.defaultApplyMaxValue;\n }\n}\n\n \n\n\n\n\n\n\n\n\n\n\n \n \n results matching \"\"\n \n \n \n No results matching \"\"\n \n\n"},"classes/DatGUIMenuUI.html":{"url":"classes/DatGUIMenuUI.html","title":"class - DatGUIMenuUI","body":"\n \n\n\n\n\n\n\n\n\n\n\n\n\n\n Classes\n DatGUIMenuUI\n\n\n\n \n Info\n \n \n Source\n \n\n\n\n \n \n File\n \n \n src/managers/ui-manager/dat-gui-ui.ts\n \n\n\n \n Description\n \n \n A wrapper class for dat.GUI menu to perform UI related operations.\n\n \n\n\n \n Implements\n \n \n PhoenixUI\n \n\n\n \n Index\n \n \n \n \n Properties\n \n \n \n \n \n \n Private\n eventFolder\n \n \n Private\n geomFolder\n \n \n Private\n gui\n \n \n Private\n guiParameters\n \n \n Private\n labelsFolder\n \n \n Private\n maxPositionX\n \n \n Private\n maxPositionY\n \n \n Private\n maxPositionZ\n \n \n Private\n sceneManager\n \n \n \n \n\n \n \n Methods\n \n \n \n \n \n \n Public\n addCollection\n \n \n Public\n addEventDataFolder\n \n \n Public\n addEventDataTypeFolder\n \n \n Public\n addGeometry\n \n \n Public\n addGeometryFolder\n \n \n Public\n addLabel\n \n \n Public\n addLabelsFolder\n \n \n Public\n clear\n \n \n Public\n getEventDataTypeFolder\n \n \n Public\n removeLabel\n \n \n Private\n removeOBJ\n \n \n \n \n\n\n\n\n\n \n \n\n\n \n Constructor\n \n \n \n \nconstructor(elementId: string, three: ThreeManager)\n \n \n \n \n Defined in src/managers/ui-manager/dat-gui-ui.ts:43\n \n \n\n \n \n Create dat.GUI menu UI with different controls related to detector geometry and event data.\n\n \n Parameters :\n \n \n \n Name\n Type\n Optional\n Description\n \n \n \n \n elementId\n \n \n string\n \n \n \n No\n \n \n \n ID of the wrapper element.\n\n \n \n \n three\n \n \n ThreeManager\n \n \n \n No\n \n \n \n The three manager for managing three.js related operations.\n\n \n \n \n \n \n \n \n \n \n\n\n \n \n \n Properties\n \n \n \n \n \n \n \n Private\n eventFolder\n \n \n \n \n \n \n Type : GUI\n\n \n \n \n \n Defined in src/managers/ui-manager/dat-gui-ui.ts:34\n \n \n\n \n \n dat.GUI menu folder containing event related data.\n\n \n \n\n \n \n \n \n \n \n \n \n Private\n geomFolder\n \n \n \n \n \n \n Type : GUI\n\n \n \n \n \n Defined in src/managers/ui-manager/dat-gui-ui.ts:32\n \n \n\n \n \n dat.GUI menu folder containing geometries data.\n\n \n \n\n \n \n \n \n \n \n \n \n Private\n gui\n \n \n \n \n \n \n Type : GUI\n\n \n \n \n \n Defined in src/managers/ui-manager/dat-gui-ui.ts:21\n \n \n\n \n \n dat.GUI menu.\n\n \n \n\n \n \n \n \n \n \n \n \n Private\n guiParameters\n \n \n \n \n \n \n Type : object\n\n \n \n \n \n Default value : {\n rotate: undefined,\n axis: undefined,\n lowRes: undefined,\n eventData: undefined,\n geometries: undefined,\n labels: undefined,\n }\n \n \n \n \n Defined in src/managers/ui-manager/dat-gui-ui.ts:23\n \n \n\n \n \n Options for the dat.GUI menu.\n\n \n \n\n \n \n \n \n \n \n \n \n Private\n labelsFolder\n \n \n \n \n \n \n Type : GUI\n\n \n \n \n \n Defined in src/managers/ui-manager/dat-gui-ui.ts:36\n \n \n\n \n \n dat.GUI menu folder containing labels.\n\n \n \n\n \n \n \n \n \n \n \n \n Private\n maxPositionX\n \n \n \n \n \n \n Type : number\n\n \n \n \n \n Default value : 4000\n \n \n \n \n Defined in src/managers/ui-manager/dat-gui-ui.ts:39\n \n \n\n \n \n Max changeable position of an object along the x-axis.\n\n \n \n\n \n \n \n \n \n \n \n \n Private\n maxPositionY\n \n \n \n \n \n \n Type : number\n\n \n \n \n \n Default value : 4000\n \n \n \n \n Defined in src/managers/ui-manager/dat-gui-ui.ts:41\n \n \n\n \n \n Max changeable position of an object along the y-axis.\n\n \n \n\n \n \n \n \n \n \n \n \n Private\n maxPositionZ\n \n \n \n \n \n \n Type : number\n\n \n \n \n \n Default value : 4000\n \n \n \n \n Defined in src/managers/ui-manager/dat-gui-ui.ts:43\n \n \n\n \n \n Max changeable position of an object along the z-axis.\n\n \n \n\n \n \n \n \n \n \n \n \n Private\n sceneManager\n \n \n \n \n \n \n Type : SceneManager\n\n \n \n \n \n Defined in src/managers/ui-manager/dat-gui-ui.ts:19\n \n \n\n \n \n Manager for managing functions of the three.js scene.\n\n \n \n\n \n \n\n\n \n \n \n Methods\n \n \n \n \n \n \n \n Public\n addCollection\n \n \n \n \n \n \n \n addCollection(eventDataType: string, collectionName: string, cuts?: Cut[], collectionColor?: Color)\n \n \n\n\n \n \n Defined in src/managers/ui-manager/dat-gui-ui.ts:254\n \n \n\n\n \n \n Add collection folder and its configurable options to the event data type (tracks, hits etc.) folder.\n\n\n \n Parameters :\n \n \n \n \n Name\n Type\n Optional\n Description\n \n \n \n \n eventDataType\n \n string\n \n\n \n No\n \n\n\n \n Name of the event data type.\n\n \n \n \n collectionName\n \n string\n \n\n \n No\n \n\n\n \n Name of the collection to be added in the type of event data (tracks, hits etc.).\n\n \n \n \n cuts\n \n Cut[]\n \n\n \n Yes\n \n\n\n \n Cuts to the collection of event data that are to be made configurable to filter event data.\n\n \n \n \n collectionColor\n \n Color\n \n\n \n Yes\n \n\n\n \n Default color of the collection.\n\n \n \n \n \n \n \n \n \n Returns : void\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n Public\n addEventDataFolder\n \n \n \n \n \n \n \n addEventDataFolder()\n \n \n\n\n \n \n Defined in src/managers/ui-manager/dat-gui-ui.ts:200\n \n \n\n\n \n \n Add event data folder with functions for event data toggles like show/hide and depthTest.\n\n\n \n Returns : void\n\n \n \n \n \n \n \n \n \n \n \n \n Public\n addEventDataTypeFolder\n \n \n \n \n \n \n \n addEventDataTypeFolder(typeName: string)\n \n \n\n\n \n \n Defined in src/managers/ui-manager/dat-gui-ui.ts:230\n \n \n\n\n \n \n Add folder for event data type like tracks or hits to the menu.\n\n\n \n Parameters :\n \n \n \n \n Name\n Type\n Optional\n Description\n \n \n \n \n typeName\n \n string\n \n\n \n No\n \n\n\n \n Name of the type of event data.\n\n \n \n \n \n \n \n \n \n Returns : void\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n Public\n addGeometry\n \n \n \n \n \n \n \n addGeometry(object: Object3D, _menuSubfolder?: string)\n \n \n\n\n \n \n Defined in src/managers/ui-manager/dat-gui-ui.ts:109\n \n \n\n\n \n \n Add geometry to the menu's geometry folder and set up its configurable options.\n\n\n \n Parameters :\n \n \n \n \n Name\n Type\n Optional\n Description\n \n \n \n \n object\n \n Object3D\n \n\n \n No\n \n\n\n \n Object to add to the UI menu.\n\n \n \n \n _menuSubfolder\n \n string\n \n\n \n Yes\n \n\n\n \n Subfolder in the menu to add the geometry to. Example Folder > Subfolder.\n\n \n \n \n \n \n \n \n \n Returns : void\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n Public\n addGeometryFolder\n \n \n \n \n \n \n \n addGeometryFolder()\n \n \n\n\n \n \n Defined in src/managers/ui-manager/dat-gui-ui.ts:78\n \n \n\n\n \n \n Add geometry (detector geometry) folder to the menu.\n\n\n \n Returns : void\n\n \n \n \n \n \n \n \n \n \n \n \n Public\n addLabel\n \n \n \n \n \n \n \n addLabel(labelId: string, onRemoveLabel?: () => void)\n \n \n\n\n \n \n Defined in src/managers/ui-manager/dat-gui-ui.ts:384\n \n \n\n\n \n \n Add folder for configuration of label.\n\n\n \n Parameters :\n \n \n \n \n Name\n Type\n Optional\n Description\n \n \n \n \n labelId\n \n string\n \n\n \n No\n \n\n\n \n Unique ID of the label.\n\n \n \n \n onRemoveLabel\n \n function\n \n\n \n Yes\n \n\n\n \n Function called when label is removed.\n\n \n \n \n \n \n \n \n \n Returns : void\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n Public\n addLabelsFolder\n \n \n \n \n \n \n \n addLabelsFolder(configFunctions: any)\n \n \n\n\n \n \n Defined in src/managers/ui-manager/dat-gui-ui.ts:332\n \n \n\n\n \n \n Add labels folder to the menu.\n\n\n \n Parameters :\n \n \n \n \n Name\n Type\n Optional\n Description\n \n \n \n \n configFunctions\n \n any\n \n\n \n No\n \n\n\n \n Functions to attach to the labels folder configuration.\n\n \n \n \n \n \n \n \n \n Returns : void\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n Public\n clear\n \n \n \n \n \n \n \n clear()\n \n \n\n\n \n \n Defined in src/managers/ui-manager/dat-gui-ui.ts:67\n \n \n\n\n \n \n Clear the menu by removing all folders.\n\n\n \n Returns : void\n\n \n \n \n \n \n \n \n \n \n \n \n Public\n getEventDataTypeFolder\n \n \n \n \n \n \n \n getEventDataTypeFolder(typeName: string)\n \n \n\n\n \n \n Defined in src/managers/ui-manager/dat-gui-ui.ts:440\n \n \n\n\n \n \n Get the folder of the event data type.\n\n\n \n Parameters :\n \n \n \n \n Name\n Type\n Optional\n Description\n \n \n \n \n typeName\n \n string\n \n\n \n No\n \n\n\n \n Name of the event data type.\n\n \n \n \n \n \n \n \n \n Returns : GUI\n\n \n \n Folder of the event data type.\n\n \n \n \n \n \n \n \n \n \n \n \n Public\n removeLabel\n \n \n \n \n \n \n \n removeLabel(labelId: string, labelItemFolder?: GUI)\n \n \n\n\n \n \n Defined in src/managers/ui-manager/dat-gui-ui.ts:425\n \n \n\n\n \n \n Remove label from the menu and scene if it exists.\n\n\n \n Parameters :\n \n \n \n \n Name\n Type\n Optional\n Description\n \n \n \n \n labelId\n \n string\n \n\n \n No\n \n\n\n \n A unique label ID string.\n\n \n \n \n labelItemFolder\n \n GUI\n \n\n \n Yes\n \n\n\n \n \n \n \n \n \n \n \n \n Returns : void\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n Private\n removeOBJ\n \n \n \n \n \n \n \n removeOBJ(object: Object3D)\n \n \n\n\n \n \n Defined in src/managers/ui-manager/dat-gui-ui.ts:187\n \n \n\n\n \n \n Remove object from the dat.GUI menu.\n\n\n \n Parameters :\n \n \n \n \n Name\n Type\n Optional\n Description\n \n \n \n \n object\n \n Object3D\n \n\n \n No\n \n\n\n \n Geometry object to be removed.\n\n \n \n \n \n \n \n \n \n Returns : () => void\n\n \n \n \n \n \n \n \n \n\n\n\n\n\n\n \n\n\n \n import { GUI } from 'dat.gui';\nimport {\n BufferGeometry,\n Color,\n Mesh,\n MeshPhongMaterial,\n Object3D,\n} from 'three';\nimport { ThreeManager } from '../three-manager';\nimport { SceneManager } from '../three-manager/scene-manager';\nimport { Cut } from '../../lib/models/cut.model';\nimport { PhoenixUI } from './phoenix-ui';\n\n/**\n * A wrapper class for dat.GUI menu to perform UI related operations.\n */\nexport class DatGUIMenuUI implements PhoenixUI {\n /** Manager for managing functions of the three.js scene. */\n private sceneManager: SceneManager;\n /** dat.GUI menu. */\n private gui: GUI;\n /** Options for the dat.GUI menu. */\n private guiParameters = {\n rotate: undefined,\n axis: undefined,\n lowRes: undefined,\n eventData: undefined,\n geometries: undefined,\n labels: undefined,\n };\n /** dat.GUI menu folder containing geometries data. */\n private geomFolder: GUI;\n /** dat.GUI menu folder containing event related data. */\n private eventFolder: GUI;\n /** dat.GUI menu folder containing labels. */\n private labelsFolder: GUI;\n\n /** Max changeable position of an object along the x-axis. */\n private maxPositionX = 4000;\n /** Max changeable position of an object along the y-axis. */\n private maxPositionY = 4000;\n /** Max changeable position of an object along the z-axis. */\n private maxPositionZ = 4000;\n\n /**\n * Create dat.GUI menu UI with different controls related to detector geometry and event data.\n * @param elementId ID of the wrapper element.\n * @param three The three manager for managing three.js related operations.\n */\n constructor(elementId: string = 'eventDisplay', private three: ThreeManager) {\n this.gui = new GUI();\n this.gui.domElement.id = 'gui';\n this.gui.domElement.style.cssText =\n 'position: absolute; right: 0; top: 2rem; z-index: 11;';\n const canvas = document.getElementById(elementId) ?? document.body;\n canvas.appendChild(this.gui.domElement);\n this.geomFolder = null;\n this.eventFolder = null;\n this.labelsFolder = null;\n\n this.sceneManager = three.getSceneManager();\n }\n\n /**\n * Clear the menu by removing all folders.\n */\n public clear() {\n const gui = document.getElementById('gui');\n if (gui != null) {\n gui.remove();\n }\n this.geomFolder = null;\n }\n\n /**\n * Add geometry (detector geometry) folder to the menu.\n */\n public addGeometryFolder() {\n if (this.geomFolder === null) {\n this.geomFolder = this.gui.addFolder(SceneManager.GEOMETRIES_ID);\n }\n this.guiParameters.geometries = { show: true, wireframe: false };\n // A boolean toggle for showing/hiding the geometries is added to the 'Geometry' folder.\n const showGeometriesMenu = this.geomFolder\n .add(this.guiParameters.geometries, 'show')\n .name('Show')\n .listen();\n showGeometriesMenu.onChange((value) => {\n this.sceneManager.objectVisibility(\n this.sceneManager.getObjectByName(SceneManager.GEOMETRIES_ID),\n value\n );\n });\n // A boolean toggle for enabling/disabling the geometries' wireframing.\n const wireframeGeometriesMenu = this.geomFolder\n .add(this.guiParameters.geometries, 'wireframe')\n .name('Wireframe')\n .listen();\n wireframeGeometriesMenu.onChange((value) => {\n this.sceneManager.wireframeGeometries(value);\n });\n }\n\n /**\n * Add geometry to the menu's geometry folder and set up its configurable options.\n * @param object Object to add to the UI menu.\n * @param _menuSubfolder Subfolder in the menu to add the geometry to. Example `Folder > Subfolder`.\n */\n public addGeometry(object: Object3D, _menuSubfolder?: string) {\n const { name, material, visible } = object as Mesh;\n const color = material?.color;\n\n // A new folder for the object is added to the 'Geometry' folder\n this.guiParameters[name] = {\n show: visible,\n color: color ?? '#000000',\n x: 0,\n y: 0,\n z: 0,\n detectorOpacity: 1.0,\n remove: this.removeOBJ(object),\n scale: 1,\n };\n\n const objFolder = this.geomFolder.addFolder(name);\n // A color picker is added to the object's folder\n const colorMenu = objFolder\n .addColor(this.guiParameters[name], 'color')\n .name('Color');\n colorMenu.onChange((value) =>\n this.sceneManager.changeObjectColor(object, value)\n );\n\n const opacity = objFolder\n .add(this.guiParameters[name], 'detectorOpacity', 0.0, 1.0)\n .name('Opacity');\n opacity.onFinishChange((newValue) =>\n this.sceneManager.setGeometryOpacity(object, newValue)\n );\n\n // A boolean toggle for showing/hiding the object is added to its folder\n const showMenu = objFolder\n .add(this.guiParameters[name], 'show')\n .name('Show')\n .listen();\n showMenu.onChange((value) =>\n this.sceneManager.objectVisibility(object, value)\n );\n // Scale slider\n const scaleMenu = objFolder\n .add(this.guiParameters[name], 'scale', 0, 1000)\n .name('Scale');\n scaleMenu.onChange((value) => {\n this.sceneManager.scaleObject(object, value);\n });\n // Controls for positioning.\n // const position = this.three.getObjectPosition(name);\n objFolder\n .add(this.guiParameters[name], 'x', -this.maxPositionX, this.maxPositionX)\n .name('X')\n .onChange((value) =>\n this.sceneManager.getObjectPosition(name).setX(value)\n );\n objFolder\n .add(this.guiParameters[name], 'y', -this.maxPositionY, this.maxPositionY)\n .name('Y')\n .onChange((value) =>\n this.sceneManager.getObjectPosition(name).setY(value)\n );\n objFolder\n .add(this.guiParameters[name], 'z', -this.maxPositionZ, this.maxPositionZ)\n .name('Z')\n .onChange((value) =>\n this.sceneManager.getObjectPosition(name).setZ(value)\n );\n // Controls for deleting the obj\n objFolder.add(this.guiParameters[name], 'remove').name('Remove');\n }\n\n /**\n * Remove object from the dat.GUI menu.\n * @param object Geometry object to be removed.\n */\n private removeOBJ(object: Object3D) {\n return () => {\n const folder = this.geomFolder.__folders[object.name];\n if (folder) {\n this.geomFolder.removeFolder(folder);\n }\n this.sceneManager.removeGeometry(object);\n };\n }\n\n /**\n * Add event data folder with functions for event data toggles like show/hide and depthTest.\n */\n public addEventDataFolder() {\n // If there is already an event data folder it is deleted and we create a new one.\n if (this.eventFolder !== null) {\n this.gui.removeFolder(this.eventFolder);\n }\n\n // A new folder for the Event Data is added to the GUI.\n this.eventFolder = this.gui.addFolder('Event Data');\n this.guiParameters.eventData = { show: true, depthTest: true };\n // A boolean toggle for showing/hiding the event data is added to the 'Event Data' folder.\n const menu = this.eventFolder\n .add(this.guiParameters.eventData, 'show')\n .name('Show')\n .listen();\n menu.onChange((value) =>\n this.sceneManager.groupVisibility(SceneManager.EVENT_DATA_ID, value)\n );\n\n // A boolean toggle for enabling/disabling depthTest of event data.\n const depthTestMenu = this.eventFolder\n .add(this.guiParameters.eventData, 'depthTest')\n .name('Depth Test')\n .listen();\n depthTestMenu.onChange((value) => this.three.eventDataDepthTest(value));\n }\n\n /**\n * Add folder for event data type like tracks or hits to the menu.\n * @param typeName Name of the type of event data.\n */\n public addEventDataTypeFolder(typeName: string): void {\n const typeFolder = this.eventFolder.addFolder(typeName);\n this.guiParameters.eventData[typeName] = true;\n const menu = typeFolder\n .add(this.guiParameters.eventData, typeName)\n .name('Show')\n .listen();\n menu.onChange((value) =>\n this.sceneManager.objectVisibility(\n this.sceneManager\n .getObjectByName(SceneManager.EVENT_DATA_ID)\n .getObjectByName(typeName),\n value\n )\n );\n }\n\n /**\n * Add collection folder and its configurable options to the event data type (tracks, hits etc.) folder.\n * @param eventDataType Name of the event data type.\n * @param collectionName Name of the collection to be added in the type of event data (tracks, hits etc.).\n * @param cuts Cuts to the collection of event data that are to be made configurable to filter event data.\n * @param collectionColor Default color of the collection.\n */\n public addCollection(\n eventDataType: string,\n collectionName: string,\n cuts?: Cut[],\n collectionColor?: Color\n ) {\n const typeFolder = this.eventFolder.__folders[eventDataType];\n if (!typeFolder) {\n return;\n }\n\n // A new folder for the collection is added to the 'Event Data' folder\n this.guiParameters[collectionName] = {\n show: true,\n color: 0x000000,\n randomColor: () =>\n this.three.getColorManager().collectionColorRandom(collectionName),\n resetCut: () =>\n this.sceneManager.groupVisibility(\n collectionName,\n true,\n SceneManager.EVENT_DATA_ID\n ),\n };\n const collFolder = typeFolder.addFolder(collectionName);\n\n // A boolean toggle for showing/hiding the collection is added to its folder\n const showMenu = collFolder\n .add(this.guiParameters[collectionName], 'show')\n .name('Show')\n .listen();\n showMenu.onChange((value) => {\n const collectionObject = this.sceneManager\n .getObjectByName(SceneManager.EVENT_DATA_ID)\n .getObjectByName(collectionName);\n this.sceneManager.objectVisibility(collectionObject, value);\n });\n\n // A color picker is added to the collection's folder\n const colorMenu = collFolder\n .addColor(this.guiParameters[collectionName], 'color')\n .name('Color');\n colorMenu.onChange((value) =>\n this.three.getColorManager().collectionColor(collectionName, value)\n );\n colorMenu.setValue(collectionColor?.getHex());\n collFolder\n .add(this.guiParameters[collectionName], 'randomColor')\n .name('Random Color');\n\n // Cuts menu\n if (cuts) {\n const cutsFolder = collFolder.addFolder('Cuts');\n cutsFolder\n .add(this.guiParameters[collectionName], 'resetCut')\n .name('Reset cuts');\n\n for (const cut of cuts) {\n const minCut = cutsFolder\n .add(cut, 'minValue', cut.minValue, cut.maxValue)\n .name('min ' + cut.field);\n minCut.onChange((value) => {\n this.sceneManager.collectionFilter(collectionName, cuts);\n });\n const maxCut = cutsFolder\n .add(cut, 'maxValue', cut.minValue, cut.maxValue)\n .name('max ' + cut.field);\n maxCut.onChange((value) => {\n this.sceneManager.collectionFilter(collectionName, cuts);\n });\n }\n }\n }\n\n /**\n * Add labels folder to the menu.\n * @param configFunctions Functions to attach to the labels folder configuration.\n */\n public addLabelsFolder(configFunctions: any) {\n if (this.labelsFolder !== null) {\n return;\n }\n\n const {\n onToggle,\n onSizeChange,\n onColorChange,\n onSaveLabels,\n onLoadLabels,\n } = configFunctions;\n\n this.labelsFolder = this.gui.addFolder(SceneManager.LABELS_ID);\n\n this.guiParameters.labels = {\n show: true,\n size: 1,\n color: '#a8a8a8',\n saveLabels: onSaveLabels,\n loadLabels: onLoadLabels,\n };\n\n const showMenu = this.labelsFolder\n .add(this.guiParameters.labels, 'show')\n .name('Show')\n .listen();\n showMenu.onChange(onToggle);\n\n const labelsSizeMenu = this.labelsFolder\n .add(this.guiParameters.labels, 'size', 0, 10)\n .name('Size');\n labelsSizeMenu.onFinishChange(onSizeChange);\n\n const colorMenu = this.labelsFolder\n .addColor(this.guiParameters.labels, 'color')\n .name('Color');\n colorMenu.onChange(onColorChange);\n\n this.labelsFolder\n .add(this.guiParameters.labels, 'saveLabels')\n .name('Save Labels');\n this.labelsFolder\n .add(this.guiParameters.labels, 'loadLabels')\n .name('Load Labels');\n }\n\n /**\n * Add folder for configuration of label.\n * @param labelId Unique ID of the label.\n * @param onRemoveLabel Function called when label is removed.\n */\n public addLabel(labelId: string, onRemoveLabel?: () => void) {\n this.guiParameters[labelId] = {\n show: true,\n color: 0xafafaf,\n };\n\n const labelItem = this.labelsFolder.addFolder(labelId);\n\n const visibilityToggle = labelItem\n .add(this.guiParameters[labelId], 'show')\n .name('Show')\n .listen();\n visibilityToggle.onChange((value) => {\n const labelObject = this.sceneManager\n .getObjectByName(SceneManager.LABELS_ID)\n .getObjectByName(labelId);\n this.sceneManager.objectVisibility(labelObject, value);\n });\n\n const colorMenu = labelItem\n .addColor(this.guiParameters[labelId], 'color')\n .name('Çolor');\n colorMenu.onChange((color) =>\n this.sceneManager.changeObjectColor(\n this.sceneManager.getObjectByName(labelId),\n color\n )\n );\n\n this.guiParameters[labelId]['removeLabel'] = () => {\n onRemoveLabel?.();\n this.removeLabel(labelId, labelItem);\n };\n labelItem.add(this.guiParameters[labelId], 'removeLabel').name('Remove');\n }\n\n /**\n * Remove label from the menu and scene if it exists.\n * @param labelId A unique label ID string.\n * @param labelFolderReference Reference to the label folder.\n */\n public removeLabel(labelId: string, labelItemFolder?: GUI) {\n if (!labelItemFolder) {\n labelItemFolder = this.labelsFolder.__folders[labelId];\n }\n\n if (labelItemFolder) {\n this.labelsFolder.removeFolder(labelItemFolder);\n }\n }\n\n /**\n * Get the folder of the event data type.\n * @param typeName Name of the event data type.\n * @returns Folder of the event data type.\n */\n public getEventDataTypeFolder(typeName: string): GUI {\n return this.eventFolder.__folders[typeName];\n }\n}\n\n \n\n\n\n\n\n\n\n\n\n\n \n \n results matching \"\"\n \n \n \n No results matching \"\"\n \n\n"},"classes/EffectsManager.html":{"url":"classes/EffectsManager.html","title":"class - EffectsManager","body":"\n \n\n\n\n\n\n\n\n\n\n\n\n\n\n Classes\n EffectsManager\n\n\n\n \n Info\n \n \n Source\n \n\n\n\n \n \n File\n \n \n src/managers/three-manager/effects-manager.ts\n \n\n\n \n Description\n \n \n Manager for managing three.js event display effects like outline pass and unreal bloom.\n\n \n\n\n\n\n \n Index\n \n \n \n \n Properties\n \n \n \n \n \n \n Public\n antialiasing\n \n \n Private\n camera\n \n \n Public\n composer\n \n \n Private\n defaultRenderPass\n \n \n Public\n render\n \n \n Private\n scene\n \n \n \n \n\n \n \n Methods\n \n \n \n \n \n \n Public\n addOutlinePassForSelection\n \n \n Private\n antialiasRender\n \n \n Private\n effectsRender\n \n \n Public\n removePass\n \n \n Public\n setAntialiasing\n \n \n \n \n\n\n\n\n\n \n \n\n\n \n Constructor\n \n \n \n \nconstructor(camera: Camera, scene: Scene, renderer: WebGLRenderer)\n \n \n \n \n Defined in src/managers/three-manager/effects-manager.ts:23\n \n \n\n \n \n Constructor for the effects manager which manages effects and three.js passes.\n\n \n Parameters :\n \n \n \n Name\n Type\n Optional\n Description\n \n \n \n \n camera\n \n \n Camera\n \n \n \n No\n \n \n \n The camera inside the scene.\n\n \n \n \n scene\n \n \n Scene\n \n \n \n No\n \n \n \n The default scene used for event display.\n\n \n \n \n renderer\n \n \n WebGLRenderer\n \n \n \n No\n \n \n \n The main renderer used by the event display.\n\n \n \n \n \n \n \n \n \n \n\n\n \n \n \n Properties\n \n \n \n \n \n \n \n Public\n antialiasing\n \n \n \n \n \n \n Type : boolean\n\n \n \n \n \n Default value : true\n \n \n \n \n Defined in src/managers/three-manager/effects-manager.ts:20\n \n \n\n \n \n Whether antialiasing is enabled or disabled.\n\n \n \n\n \n \n \n \n \n \n \n \n Private\n camera\n \n \n \n \n \n \n Type : Camera\n\n \n \n \n \n Defined in src/managers/three-manager/effects-manager.ts:14\n \n \n\n \n \n The camera inside the scene.\n\n \n \n\n \n \n \n \n \n \n \n \n Public\n composer\n \n \n \n \n \n \n Type : EffectComposer\n\n \n \n \n \n Defined in src/managers/three-manager/effects-manager.ts:12\n \n \n\n \n \n Effect composer for effect passes.\n\n \n \n\n \n \n \n \n \n \n \n \n Private\n defaultRenderPass\n \n \n \n \n \n \n Type : RenderPass\n\n \n \n \n \n Defined in src/managers/three-manager/effects-manager.ts:18\n \n \n\n \n \n Render pass for rendering the default scene.\n\n \n \n\n \n \n \n \n \n \n \n \n Public\n render\n \n \n \n \n \n \n Type : function\n\n \n \n \n \n Defined in src/managers/three-manager/effects-manager.ts:23\n \n \n\n \n \n Render function with (normal render) or without antialias (effects render).\n\n \n \n\n \n \n \n \n \n \n \n \n Private\n scene\n \n \n \n \n \n \n Type : Scene\n\n \n \n \n \n Defined in src/managers/three-manager/effects-manager.ts:16\n \n \n\n \n \n The default scene used for event display.\n\n \n \n\n \n \n\n\n \n \n \n Methods\n \n \n \n \n \n \n \n Public\n addOutlinePassForSelection\n \n \n \n \n \n \n \n addOutlinePassForSelection()\n \n \n\n\n \n \n Defined in src/managers/three-manager/effects-manager.ts:69\n \n \n\n\n \n \n Initialize the outline pass for highlighting hovered over event display elements.\n\n\n \n \n \n Returns : OutlinePass\n\n \n \n OutlinePass for highlighting hovered over event display elements.\n\n \n \n \n \n \n \n \n \n \n \n \n Private\n antialiasRender\n \n \n \n \n \n \n \n antialiasRender(scene: Scene, camera: Camera)\n \n \n\n\n \n \n Defined in src/managers/three-manager/effects-manager.ts:61\n \n \n\n\n \n \n Render for antialias without the effects composer.\n\n\n \n Parameters :\n \n \n \n \n Name\n Type\n Optional\n Description\n \n \n \n \n scene\n \n Scene\n \n\n \n No\n \n\n\n \n The default scene used for event display.\n\n \n \n \n camera\n \n Camera\n \n\n \n No\n \n\n\n \n The camera inside the scene.\n\n \n \n \n \n \n \n \n \n Returns : void\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n Private\n effectsRender\n \n \n \n \n \n \n \n effectsRender(scene: Scene, camera: Camera)\n \n \n\n\n \n \n Defined in src/managers/three-manager/effects-manager.ts:48\n \n \n\n\n \n \n Render the effects composer.\n\n\n \n Parameters :\n \n \n \n \n Name\n Type\n Optional\n Description\n \n \n \n \n scene\n \n Scene\n \n\n \n No\n \n\n\n \n The default scene used for event display.\n\n \n \n \n camera\n \n Camera\n \n\n \n No\n \n\n\n \n The camera inside the scene.\n\n \n \n \n \n \n \n \n \n Returns : void\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n Public\n removePass\n \n \n \n \n \n \n \n removePass(pass: Pass)\n \n \n\n\n \n \n Defined in src/managers/three-manager/effects-manager.ts:88\n \n \n\n\n \n \n Remove a pass from the effect composer.\n\n\n \n Parameters :\n \n \n \n \n Name\n Type\n Optional\n Description\n \n \n \n \n pass\n \n Pass\n \n\n \n No\n \n\n\n \n Effect pass to be removed from the effect composer.\n\n \n \n \n \n \n \n \n \n Returns : void\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n Public\n setAntialiasing\n \n \n \n \n \n \n \n setAntialiasing(antialias: boolean)\n \n \n\n\n \n \n Defined in src/managers/three-manager/effects-manager.ts:97\n \n \n\n\n \n \n Set the antialiasing of renderer.\n\n\n \n Parameters :\n \n \n \n \n Name\n Type\n Optional\n Description\n \n \n \n \n antialias\n \n boolean\n \n\n \n No\n \n\n\n \n Whether antialiasing is to enabled or disabled.\n\n \n \n \n \n \n \n \n \n Returns : void\n\n \n \n \n \n \n \n \n \n\n\n\n\n\n\n \n\n\n \n import { EffectComposer } from 'three/examples/jsm/postprocessing/EffectComposer';\nimport { Camera, Scene, WebGLRenderer, Vector2, NormalBlending } from 'three';\nimport { RenderPass } from 'three/examples/jsm/postprocessing/RenderPass';\nimport { OutlinePass } from 'three/examples/jsm/postprocessing/OutlinePass';\nimport { Pass } from 'three/examples/jsm/postprocessing/Pass';\n\n/**\n * Manager for managing three.js event display effects like outline pass and unreal bloom.\n */\nexport class EffectsManager {\n /** Effect composer for effect passes. */\n public composer: EffectComposer;\n /** The camera inside the scene. */\n private camera: Camera;\n /** The default scene used for event display. */\n private scene: Scene;\n /** Render pass for rendering the default scene. */\n private defaultRenderPass: RenderPass;\n /** Whether antialiasing is enabled or disabled. */\n public antialiasing: boolean = true;\n\n /** Render function with (normal render) or without antialias (effects render). */\n public render: (scene: Scene, camera: Camera) => void;\n\n /**\n * Constructor for the effects manager which manages effects and three.js passes.\n * @param camera The camera inside the scene.\n * @param scene The default scene used for event display.\n * @param renderer The main renderer used by the event display.\n */\n constructor(camera: Camera, scene: Scene, renderer: WebGLRenderer) {\n this.composer = new EffectComposer(renderer);\n this.camera = camera;\n this.scene = scene;\n\n this.defaultRenderPass = new RenderPass(this.scene, this.camera);\n this.composer.addPass(this.defaultRenderPass);\n\n // Set the starting render function\n this.render = this.antialiasing ? this.antialiasRender : this.effectsRender;\n }\n\n /**\n * Render the effects composer.\n * @param scene The default scene used for event display.\n * @param camera The camera inside the scene.\n */\n private effectsRender(scene: Scene, camera: Camera) {\n if (this.composer) {\n this.defaultRenderPass.camera = camera;\n this.defaultRenderPass.scene = scene;\n this.composer.render();\n }\n }\n\n /**\n * Render for antialias without the effects composer.\n * @param scene The default scene used for event display.\n * @param camera The camera inside the scene.\n */\n private antialiasRender(scene: Scene, camera: Camera) {\n this.composer.renderer.render(scene, camera);\n }\n\n /**\n * Initialize the outline pass for highlighting hovered over event display elements.\n * @returns OutlinePass for highlighting hovered over event display elements.\n */\n public addOutlinePassForSelection(): OutlinePass {\n const outlinePass = new OutlinePass(\n new Vector2(window.innerWidth, window.innerHeight),\n this.scene,\n this.camera\n );\n outlinePass.overlayMaterial.blending = NormalBlending;\n outlinePass.visibleEdgeColor.set(0xffff66);\n outlinePass.visibleEdgeColor.set(0xdf5330);\n\n this.composer.addPass(outlinePass);\n\n return outlinePass;\n }\n\n /**\n * Remove a pass from the effect composer.\n * @param pass Effect pass to be removed from the effect composer.\n */\n public removePass(pass: Pass) {\n const passIndex = this.composer.passes.indexOf(pass);\n this.composer.passes.splice(passIndex, 1);\n }\n\n /**\n * Set the antialiasing of renderer.\n * @param antialias Whether antialiasing is to enabled or disabled.\n */\n public setAntialiasing(antialias: boolean) {\n this.antialiasing = antialias;\n this.render = this.antialiasing ? this.antialiasRender : this.effectsRender;\n }\n}\n\n \n\n\n\n\n\n\n\n\n\n\n \n \n results matching \"\"\n \n \n \n No results matching \"\"\n \n\n"},"interfaces/EventDataLoader.html":{"url":"interfaces/EventDataLoader.html","title":"interface - EventDataLoader","body":"\n \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n Interfaces\n \n EventDataLoader\n\n\n\n \n Info\n \n \n Source\n \n\n\n\n \n \n File\n \n \n src/loaders/event-data-loader.ts\n \n\n\n \n Description\n \n \n Event data loader for implementing different event data loaders.\n\n \n\n\n \n Index\n \n \n \n \n Methods\n \n \n \n \n \n \n \n addLabelToEventObject\n \n \n \n \n buildEventData\n \n \n \n \n getCollection\n \n \n \n \n getCollections\n \n \n \n \n getEventMetadata\n \n \n \n \n getEventsList\n \n \n \n \n getLabelsObject\n \n \n \n \n \n \n \n \n\n \n \n \n Methods\n \n \n \n \n \n \n \n addLabelToEventObject\n \n \n \n \n \n \naddLabelToEventObject(label: string, collection: string, indexInCollection: number)\n \n \n\n\n \n \n Defined in src/loaders/event-data-loader.ts:57\n \n \n\n\n \n \n Add label of event object to the labels object.\n\n\n \n Parameters :\n \n \n \n \n Name\n Type\n Optional\n Description\n \n \n \n \n label\n \n string\n \n\n \n No\n \n\n\n \n Label to add to the event object.\n\n \n \n \n collection\n \n string\n \n\n \n No\n \n\n\n \n Collection the event object is a part of.\n\n \n \n \n indexInCollection\n \n number\n \n\n \n No\n \n\n\n \n Event object's index in collection.\n\n \n \n \n \n \n \n \n \n Returns : string\n\n \n \n A unique label ID string.\n\n \n \n \n \n \n \n \n \n \n \n \n buildEventData\n \n \n \n \n \n \nbuildEventData(eventData: any, graphicsLibrary: ThreeManager, ui: UIManager, infoLogger: InfoLogger)\n \n \n\n\n \n \n Defined in src/loaders/event-data-loader.ts:17\n \n \n\n\n \n \n Takes an object that represents ONE event and takes care of adding\nthe different objects to the graphic library and the UI controls.\n\n\n \n Parameters :\n \n \n \n \n Name\n Type\n Optional\n Description\n \n \n \n \n eventData\n \n any\n \n\n \n No\n \n\n\n \n Object representing the event.\n\n \n \n \n graphicsLibrary\n \n ThreeManager\n \n\n \n No\n \n\n\n \n Manager containing functionality to draw the 3D objects.\n\n \n \n \n ui\n \n UIManager\n \n\n \n No\n \n\n\n \n Manager for showing menus and controls to manipulate the geometries.\n\n \n \n \n infoLogger\n \n InfoLogger\n \n\n \n No\n \n\n\n \n Logger for logging event display data..\n\n \n \n \n \n \n \n \n \n Returns : void\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n getCollection\n \n \n \n \n \n \ngetCollection(collectionName: string)\n \n \n\n\n \n \n Defined in src/loaders/event-data-loader.ts:42\n \n \n\n\n \n \n Get all the objects inside a collection.\n\n\n \n Parameters :\n \n \n \n \n Name\n Type\n Optional\n Description\n \n \n \n \n collectionName\n \n string\n \n\n \n No\n \n\n\n \n Key of the collection that will be retrieved.\n\n \n \n \n \n \n \n \n \n Returns : any\n\n \n \n Object containing all physics objects from the desired collection.\n\n \n \n \n \n \n \n \n \n \n \n \n getCollections\n \n \n \n \n \n \ngetCollections()\n \n \n\n\n \n \n Defined in src/loaders/event-data-loader.ts:35\n \n \n\n\n \n \n Get the different collections for the current stored event.\n\n\n \n \n \n Returns : string[]\n\n \n \n List of strings, each representing a collection of the event displayed.\n\n \n \n \n \n \n \n \n \n \n \n \n getEventMetadata\n \n \n \n \n \n \ngetEventMetadata()\n \n \n\n\n \n \n Defined in src/loaders/event-data-loader.ts:48\n \n \n\n\n \n \n Get metadata associated to the displayed event (experiment info, time, run, event...).\n\n\n \n \n \n Returns : any[]\n\n \n \n Metadata of the displayed event.\n\n \n \n \n \n \n \n \n \n \n \n \n getEventsList\n \n \n \n \n \n \ngetEventsList(eventsData: any)\n \n \n\n\n \n \n Defined in src/loaders/event-data-loader.ts:29\n \n \n\n\n \n \n Takes an object containing multiple events and returns the keys of these events.\n\n\n \n Parameters :\n \n \n \n \n Name\n Type\n Optional\n Description\n \n \n \n \n eventsData\n \n any\n \n\n \n No\n \n\n\n \n Object that contains the different events.\n\n \n \n \n \n \n \n \n \n Returns : string[]\n\n \n \n List of keys of the different events.\n\n \n \n \n \n \n \n \n \n \n \n \n getLabelsObject\n \n \n \n \n \n \ngetLabelsObject()\n \n \n\n\n \n \n Defined in src/loaders/event-data-loader.ts:67\n \n \n\n\n \n \n Get the object containing labels.\n\n\n \n \n \n Returns : literal type\n\n \n \n The labels object.\n\n \n \n \n \n \n\n\n \n\n\n \n import { ThreeManager } from '../managers/three-manager';\nimport { UIManager } from '../managers/ui-manager';\nimport { InfoLogger } from '../helpers/info-logger';\n\n/**\n * Event data loader for implementing different event data loaders.\n */\nexport interface EventDataLoader {\n /**\n * Takes an object that represents ONE event and takes care of adding\n * the different objects to the graphic library and the UI controls.\n * @param eventData Object representing the event.\n * @param graphicsLibrary Manager containing functionality to draw the 3D objects.\n * @param ui Manager for showing menus and controls to manipulate the geometries.\n * @param infoLogger Logger for logging event display data..\n */\n buildEventData(\n eventData: any,\n graphicsLibrary: ThreeManager,\n ui: UIManager,\n infoLogger: InfoLogger\n ): void;\n\n /**\n * Takes an object containing multiple events and returns the keys of these events.\n * @param eventsData Object that contains the different events.\n * @returns List of keys of the different events.\n */\n getEventsList(eventsData: any): string[];\n\n /**\n * Get the different collections for the current stored event.\n * @returns List of strings, each representing a collection of the event displayed.\n */\n getCollections(): string[];\n\n /**\n * Get all the objects inside a collection.\n * @param collectionName Key of the collection that will be retrieved.\n * @returns Object containing all physics objects from the desired collection.\n */\n getCollection(collectionName: string): any;\n\n /**\n * Get metadata associated to the displayed event (experiment info, time, run, event...).\n * @returns Metadata of the displayed event.\n */\n getEventMetadata(): any[];\n\n /**\n * Add label of event object to the labels object.\n * @param label Label to add to the event object.\n * @param collection Collection the event object is a part of.\n * @param indexInCollection Event object's index in collection.\n * @returns A unique label ID string.\n */\n addLabelToEventObject(\n label: string,\n collection: string,\n indexInCollection: number\n ): string;\n\n /**\n * Get the object containing labels.\n * @returns The labels object.\n */\n getLabelsObject(): { [key: string]: any };\n}\n\n \n\n\n\n\n\n\n\n\n\n \n \n results matching \"\"\n \n \n \n No results matching \"\"\n \n\n"},"classes/ExportManager.html":{"url":"classes/ExportManager.html","title":"class - ExportManager","body":"\n \n\n\n\n\n\n\n\n\n\n\n\n\n\n Classes\n ExportManager\n\n\n\n \n Info\n \n \n Source\n \n\n\n\n \n \n File\n \n \n src/managers/three-manager/export-manager.ts\n \n\n\n \n Description\n \n \n Manager for managing event display's export related functionality.\n\n \n\n\n\n\n \n Index\n \n \n\n \n \n Methods\n \n \n \n \n \n \n Public\n exportPhoenixScene\n \n \n Public\n exportSceneToOBJ\n \n \n Private\n saveEventDataConfiguration\n \n \n Private\n saveGeometriesConfiguration\n \n \n Private\n saveSceneConfig\n \n \n \n \n\n\n\n\n\n \n \n\n\n\n\n \n \n \n Methods\n \n \n \n \n \n \n \n Public\n exportPhoenixScene\n \n \n \n \n \n \n \n exportPhoenixScene(scene: Scene, eventData: Object3D, geometries: Object3D)\n \n \n\n\n \n \n Defined in src/managers/three-manager/export-manager.ts:27\n \n \n\n\n \n \n Exports scene as phoenix format, allowing to load it later and recover the saved configuration.\n\n\n \n Parameters :\n \n \n \n \n Name\n Type\n Optional\n Description\n \n \n \n \n scene\n \n Scene\n \n\n \n No\n \n\n\n \n The scene to be exported.\n\n \n \n \n eventData\n \n Object3D\n \n\n \n No\n \n\n\n \n Currently loaded event data.\n\n \n \n \n geometries\n \n Object3D\n \n\n \n No\n \n\n\n \n Currently loaded geometries.\n\n \n \n \n \n \n \n \n \n Returns : void\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n Public\n exportSceneToOBJ\n \n \n \n \n \n \n \n exportSceneToOBJ(scene: Scene)\n \n \n\n\n \n \n Defined in src/managers/three-manager/export-manager.ts:14\n \n \n\n\n \n \n Exports scene to OBJ file format.\n\n\n \n Parameters :\n \n \n \n \n Name\n Type\n Optional\n Description\n \n \n \n \n scene\n \n Scene\n \n\n \n No\n \n\n\n \n The scene to be exported.\n\n \n \n \n \n \n \n \n \n Returns : void\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n Private\n saveEventDataConfiguration\n \n \n \n \n \n \n \n saveEventDataConfiguration(eventData: any)\n \n \n\n\n \n \n Defined in src/managers/three-manager/export-manager.ts:66\n \n \n\n\n \n \n Save the configuration of the currently loaded event data.\n\n\n \n Parameters :\n \n \n \n \n Name\n Type\n Optional\n Description\n \n \n \n \n eventData\n \n any\n \n\n \n No\n \n\n\n \n Currently loaded event data.\n\n \n \n \n \n \n \n \n \n Returns : {}\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n Private\n saveGeometriesConfiguration\n \n \n \n \n \n \n \n saveGeometriesConfiguration(geometries: Object3D)\n \n \n\n\n \n \n Defined in src/managers/three-manager/export-manager.ts:85\n \n \n\n\n \n \n Save the configuration of the currently loaded geometries.\n\n\n \n Parameters :\n \n \n \n \n Name\n Type\n Optional\n Description\n \n \n \n \n geometries\n \n Object3D\n \n\n \n No\n \n\n\n \n Currently loaded geometries.\n\n \n \n \n \n \n \n \n \n Returns : {}\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n Private\n saveSceneConfig\n \n \n \n \n \n \n \n saveSceneConfig(eventData: Object3D, geometries: Object3D)\n \n \n\n\n \n \n Defined in src/managers/three-manager/export-manager.ts:52\n \n \n\n\n \n \n Save the configuration of the currently loaded scene including event data and geometries.\n\n\n \n Parameters :\n \n \n \n \n Name\n Type\n Optional\n Description\n \n \n \n \n eventData\n \n Object3D\n \n\n \n No\n \n\n\n \n Curently loaded event data.\n\n \n \n \n geometries\n \n Object3D\n \n\n \n No\n \n\n\n \n Currently loaded geometries.\n\n \n \n \n \n \n \n \n \n Returns : { eventData: {}; geometries: {}; }\n\n \n \n \n \n \n \n \n \n\n\n\n\n\n\n \n\n\n \n import { OBJExporter } from 'three/examples/jsm/exporters/OBJExporter';\nimport { Scene, Object3D } from 'three';\nimport { GLTFExporter } from 'three/examples/jsm/exporters/GLTFExporter';\nimport { saveFile } from '../../helpers/file';\n\n/**\n * Manager for managing event display's export related functionality.\n */\nexport class ExportManager {\n /**\n * Exports scene to OBJ file format.\n * @param scene The scene to be exported.\n */\n public exportSceneToOBJ(scene: Scene) {\n // Instantiate a exporter\n const exporter = new OBJExporter();\n const result = exporter.parse(scene);\n saveFile(result, 'phoenix-obj.obj', 'text/plain');\n }\n\n /**\n * Exports scene as phoenix format, allowing to load it later and recover the saved configuration.\n * @param scene The scene to be exported.\n * @param eventData Currently loaded event data.\n * @param geometries Currently loaded geometries.\n */\n public exportPhoenixScene(\n scene: Scene,\n eventData: Object3D,\n geometries: Object3D\n ) {\n const exporter = new GLTFExporter();\n\n const sceneConfig = this.saveSceneConfig(eventData, geometries);\n // Parse the input and generate the glTF output\n exporter.parse(\n scene,\n (result) => {\n const jsonResult = { sceneConfiguration: sceneConfig, scene: result };\n const output = JSON.stringify(jsonResult, null, 2);\n saveFile(output, 'phoenix-scene.phnx', 'text/plain');\n },\n null\n );\n }\n\n /**\n * Save the configuration of the currently loaded scene including event data and geometries.\n * @param eventData Curently loaded event data.\n * @param geometries Currently loaded geometries.\n */\n private saveSceneConfig(eventData: Object3D, geometries: Object3D) {\n const eventDataConfig = this.saveEventDataConfiguration(eventData);\n const geometriesConfig = this.saveGeometriesConfiguration(geometries);\n const sceneConfig = {\n eventData: eventDataConfig,\n geometries: geometriesConfig,\n };\n return sceneConfig;\n }\n\n /**\n * Save the configuration of the currently loaded event data.\n * @param eventData Currently loaded event data.\n */\n private saveEventDataConfiguration(eventData: any) {\n const eventDataConfig = {};\n for (const objectType of eventData.children) {\n if (objectType.name) {\n eventDataConfig[objectType.name] = [];\n for (const collection of objectType.children) {\n if (collection.name) {\n eventDataConfig[objectType.name].push(collection.name);\n }\n }\n }\n }\n return eventDataConfig;\n }\n\n /**\n * Save the configuration of the currently loaded geometries.\n * @param geometries Currently loaded geometries.\n */\n private saveGeometriesConfiguration(geometries: Object3D) {\n const geometriesConfig = [];\n geometries.children.forEach((object) => {\n if (object.name !== 'EventData') {\n geometriesConfig.push(object.name);\n }\n });\n return geometriesConfig;\n }\n}\n\n \n\n\n\n\n\n\n\n\n\n\n \n \n results matching \"\"\n \n \n \n No results matching \"\"\n \n\n"},"classes/Field.html":{"url":"classes/Field.html","title":"class - Field","body":"\n \n\n\n\n\n\n\n\n\n\n\n\n\n\n Classes\n Field\n\n\n\n \n Info\n \n \n Source\n \n\n\n\n \n \n File\n \n \n src/helpers/runge-kutta.ts\n \n\n\n \n Description\n \n \n Default class to define the field.\n\n \n\n\n\n\n \n Index\n \n \n\n \n \n Methods\n \n \n \n \n \n \n Static\n get\n \n \n \n \n\n\n\n\n\n \n \n\n\n\n\n \n \n \n Methods\n \n \n \n \n \n \n \n Static\n get\n \n \n \n \n \n \n \n get(field: Vector3)\n \n \n\n\n \n \n Defined in src/helpers/runge-kutta.ts:192\n \n \n\n\n \n \n Returns field as a Vector3 in Tesla.\n\n\n \n Parameters :\n \n \n \n \n Name\n Type\n Optional\n \n \n \n \n field\n \n Vector3\n \n\n \n No\n \n\n\n \n \n \n \n \n \n \n Returns : Vector3\n\n \n \n \n \n \n \n \n \n\n\n\n\n\n\n \n\n\n \n import { Vector3 } from 'three';\n\n/**\n * Class for performing Runge-Kutta operations.\n */\nexport class RungeKutta {\n /**\n * Perform a Runge-Kutta step for the given state.\n * @param state State at which the step is to be performed.\n * @returns The computed step size.\n */\n static step(state: State): number {\n // Charge (q) to momentum (p) ratio in SI units\n const qop: number = state.q / (state.unitC * state.p);\n\n // Runge-Kutta integrator state\n let h2: number,\n half_h: number,\n B_middle: Vector3,\n B_last: Vector3,\n k2: Vector3,\n k3: Vector3,\n k4: Vector3;\n\n // First Runge-Kutta point (at current position)\n const B_first: Vector3 = Field.get(state.pos);\n // state.dir.cross(B_first) * qop\n const k1: Vector3 = state.dir.clone().cross(B_first).multiplyScalar(qop);\n\n // Try Runge-Kutta step with h as the step size\n const tryRungeKuttaStep = (h: number) => {\n h2 = h * h;\n half_h = h / 2;\n\n // Second Runge-Kutta point\n // state.pos + state.dir * half_h + k1 * (h2 / 8)\n const pos1: Vector3 = state.pos\n .clone()\n .add(state.dir.clone().multiplyScalar(half_h))\n .add(k1.clone().multiplyScalar(h2 / 8));\n B_middle = Field.get(pos1);\n // (state.dir + k1 * half_h).cross(B_middle) * qop\n k2 = state.dir\n .clone()\n .add(k1.clone().multiplyScalar(half_h))\n .cross(B_middle)\n .multiplyScalar(qop);\n\n // Third Runge-Kutta point\n // (state.dir + k2 * half_h).cross(B_middle) * qop\n k3 = state.dir\n .clone()\n .add(k2.clone().multiplyScalar(half_h))\n .cross(B_middle)\n .multiplyScalar(qop);\n\n // Last Runge-Kutta point\n // state.pos + state.dir * h + k3 * (h2 / 2)\n const pos2: Vector3 = state.pos\n .clone()\n .add(state.dir.clone().multiplyScalar(h))\n .add(k3.clone().multiplyScalar(h2 / 2));\n B_last = Field.get(pos2);\n // (state.dir + k3 * h).cross(B_last) * qop\n k4 = state.dir\n .clone()\n .add(k3.clone().multiplyScalar(h))\n .cross(B_last)\n .multiplyScalar(qop);\n\n // (k1 - k2 - k3 + k4)\n const returnVec = k1.clone().sub(k2).sub(k3).add(k4);\n // h * (k1 - k2 - k3 + k4).lpNorm()\n return (\n h *\n (Math.abs(returnVec.x) + Math.abs(returnVec.y) + Math.abs(returnVec.z))\n );\n };\n\n // Checking the error estimate\n let error_estimate: number = tryRungeKuttaStep(state.stepSize);\n while (error_estimate > 0.0002) {\n state.stepSize *= 0.5;\n error_estimate = tryRungeKuttaStep(state.stepSize);\n }\n\n const fh: number = state.stepSize;\n const fh2: number = Math.pow(fh, 2);\n\n // Update position and momentum\n // state.pos += state.dir * fh + (k1 + k2 + k3) * (fh2 /6)\n state.pos.add(state.dir.clone().multiplyScalar(fh)).add(\n k1\n .clone()\n .add(k2)\n .add(k3)\n .multiplyScalar(fh2 / 6)\n );\n // state.dir += (k1 + k2 * 2 + k3 * 2 + k4) * (fh / 6)\n state.dir.add(\n k1\n .clone()\n .add(k2.clone().multiplyScalar(2))\n .add(k3.clone().multiplyScalar(2))\n .add(k4)\n .multiplyScalar(fh / 6)\n );\n state.dir.normalize();\n\n return state.stepSize;\n }\n\n /**\n * Propagate using the given properties by performing the Runge-Kutta steps.\n * @param startPos Starting position in 3D space.\n * @param startDir Starting direction in 3D space.\n * @param p Momentum.\n * @param q Charge.\n * @param mss Max step size.\n * @param plength Path length.\n * @param inbounds Function which returns true until the passed position\n * is out of bounds, when it returns false.\n * @returns An array containing position and direction at that position calculated\n * through the Runge-Kutta steps.\n */\n static propagate(\n startPos: Vector3,\n startDir: Vector3,\n p: number,\n q: number,\n mss: number = -1,\n plength: number = 1000,\n inbounds: (pos: Vector3) => boolean = () => true\n ): { pos: Vector3; dir: Vector3 }[] {\n const rkState: State = new State();\n rkState.pos = startPos;\n rkState.dir = startDir;\n rkState.p = p;\n rkState.q = q;\n rkState.maxStepSize = mss;\n\n const result: { pos: Vector3; dir: Vector3 }[] = [];\n\n while (rkState.pathLength \n \n\n\n\n\n\n\n\n\n\n\n \n \n results matching \"\"\n \n \n \n No results matching \"\"\n \n\n"},"classes/InfoLogger.html":{"url":"classes/InfoLogger.html","title":"class - InfoLogger","body":"\n \n\n\n\n\n\n\n\n\n\n\n\n\n\n Classes\n InfoLogger\n\n\n\n \n Info\n \n \n Source\n \n\n\n\n \n \n File\n \n \n src/helpers/info-logger.ts\n \n\n\n \n Description\n \n \n Logger for logging event display data\n\n \n\n\n\n\n \n Index\n \n \n \n \n Properties\n \n \n \n \n \n \n Private\n infoLoggerList\n \n \n Private\n maxEntries\n \n \n \n \n\n \n \n Methods\n \n \n \n \n \n \n add\n \n \n getInfoLoggerList\n \n \n \n \n\n\n\n\n\n \n \n\n\n\n \n \n \n Properties\n \n \n \n \n \n \n \n Private\n infoLoggerList\n \n \n \n \n \n \n Type : any[]\n\n \n \n \n \n Default value : []\n \n \n \n \n Defined in src/helpers/info-logger.ts:6\n \n \n\n \n \n List that contains all the info logs\n\n \n \n\n \n \n \n \n \n \n \n \n Private\n maxEntries\n \n \n \n \n \n \n Type : number\n\n \n \n \n \n Default value : 10\n \n \n \n \n Defined in src/helpers/info-logger.ts:8\n \n \n\n \n \n Max entries to be shown inside the information panel\n\n \n \n\n \n \n\n\n \n \n \n Methods\n \n \n \n \n \n \n \n add\n \n \n \n \n \n \nadd(data: string, label?: string)\n \n \n\n\n \n \n Defined in src/helpers/info-logger.ts:15\n \n \n\n\n \n \n Add an entry to the info logger\n\n\n \n Parameters :\n \n \n \n \n Name\n Type\n Optional\n Description\n \n \n \n \n data\n \n string\n \n\n \n No\n \n\n\n \n Data of the info log\n\n \n \n \n label\n \n string\n \n\n \n Yes\n \n\n\n \n Label of the info log\n\n \n \n \n \n \n \n \n \n Returns : void\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n getInfoLoggerList\n \n \n \n \n \n \ngetInfoLoggerList()\n \n \n\n\n \n \n Defined in src/helpers/info-logger.ts:26\n \n \n\n\n \n \n Get the info logger list being used by the info logger service\n\n\n \n \n \n Returns : any[]\n\n \n \n The info logger list containing log data\n\n \n \n \n \n \n\n\n\n\n\n\n \n\n\n \n export class InfoLogger {\n /** List that contains all the info logs */\n private infoLoggerList: any[] = [];\n /** Max entries to be shown inside the information panel */\n private maxEntries: number = 10;\n\n /**\n * Add an entry to the info logger\n * @param data Data of the info log\n * @param label Label of the info log\n */\n add(data: string, label?: string) {\n if (this.infoLoggerList.length > this.maxEntries) {\n this.infoLoggerList.pop();\n }\n this.infoLoggerList.unshift(label ? label + ': ' + data : data);\n }\n\n /**\n * Get the info logger list being used by the info logger service\n * @returns The info logger list containing log data\n */\n getInfoLoggerList(): any[] {\n return this.infoLoggerList;\n }\n}\n\n \n\n\n\n\n\n\n\n\n\n\n \n \n results matching \"\"\n \n \n \n No results matching \"\"\n \n\n"},"classes/LoadingManager.html":{"url":"classes/LoadingManager.html","title":"class - LoadingManager","body":"\n \n\n\n\n\n\n\n\n\n\n\n\n\n\n Classes\n LoadingManager\n\n\n\n \n Info\n \n \n Source\n \n\n\n\n \n \n File\n \n \n src/managers/loading-manager.ts\n \n\n\n \n Description\n \n \n Phoenix loading manager for managing loadable items.\n\n \n\n\n\n\n \n Index\n \n \n \n \n Properties\n \n \n \n \n \n \n Private\n Static\n instance\n \n \n Public\n loaded\n \n \n Private\n onLoadCallbacks\n \n \n Private\n onProgressCallbacks\n \n \n Private\n progressItems\n \n \n Public\n toLoad\n \n \n \n \n\n \n \n Methods\n \n \n \n \n \n \n Public\n addLoadableItem\n \n \n Public\n addLoadListener\n \n \n Public\n addLoadListenerWithCheck\n \n \n Public\n addProgressListener\n \n \n Public\n itemLoaded\n \n \n Public\n onProgress\n \n \n Public\n reset\n \n \n \n \n\n\n\n\n\n \n \n\n\n \n Constructor\n \n \n \n \nconstructor()\n \n \n \n \n Defined in src/managers/loading-manager.ts:19\n \n \n\n \n \n Create the singleton Phoenix loading manager.\n\n \n \n \n \n\n\n \n \n \n Properties\n \n \n \n \n \n \n \n Private\n Static\n instance\n \n \n \n \n \n \n Type : LoadingManager\n\n \n \n \n \n Defined in src/managers/loading-manager.ts:6\n \n \n\n \n \n Instance of the loading manager\n\n \n \n\n \n \n \n \n \n \n \n \n Public\n loaded\n \n \n \n \n \n \n Type : string[]\n\n \n \n \n \n Default value : []\n \n \n \n \n Defined in src/managers/loading-manager.ts:11\n \n \n\n \n \n Items loaded\n\n \n \n\n \n \n \n \n \n \n \n \n Private\n onLoadCallbacks\n \n \n \n \n \n \n Type : (function)[]\n\n \n \n \n \n Default value : []\n \n \n \n \n Defined in src/managers/loading-manager.ts:14\n \n \n\n \n \n Callbacks to call on load.\n\n \n \n\n \n \n \n \n \n \n \n \n Private\n onProgressCallbacks\n \n \n \n \n \n \n Type : (function)[]\n\n \n \n \n \n Default value : []\n \n \n \n \n Defined in src/managers/loading-manager.ts:16\n \n \n\n \n \n Callbacks to call on progress.\n\n \n \n\n \n \n \n \n \n \n \n \n Private\n progressItems\n \n \n \n \n \n \n Type : literal type\n\n \n \n \n \n Default value : {}\n \n \n \n \n Defined in src/managers/loading-manager.ts:19\n \n \n\n \n \n Progress for each named item.\n\n \n \n\n \n \n \n \n \n \n \n \n Public\n toLoad\n \n \n \n \n \n \n Type : string[]\n\n \n \n \n \n Default value : []\n \n \n \n \n Defined in src/managers/loading-manager.ts:9\n \n \n\n \n \n Items to load.\n\n \n \n\n \n \n\n\n \n \n \n Methods\n \n \n \n \n \n \n \n Public\n addLoadableItem\n \n \n \n \n \n \n \n addLoadableItem(id: string)\n \n \n\n\n \n \n Defined in src/managers/loading-manager.ts:37\n \n \n\n\n \n \n Add an item which is to be loaded.\n\n\n \n Parameters :\n \n \n \n \n Name\n Type\n Optional\n Default value\n Description\n \n \n \n \n id\n \n string\n \n\n \n No\n \n\n \n ''\n \n\n \n ID of the item to be loaded.\n\n \n \n \n \n \n \n \n \n Returns : void\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n Public\n addLoadListener\n \n \n \n \n \n \n \n addLoadListener(callback: () => void)\n \n \n\n\n \n \n Defined in src/managers/loading-manager.ts:84\n \n \n\n\n \n \n Add a listener for when all items have loaded.\n\n\n \n Parameters :\n \n \n \n \n Name\n Type\n Optional\n Description\n \n \n \n \n callback\n \n function\n \n\n \n No\n \n\n\n \n Callback to call when all items have loaded.\n\n \n \n \n \n \n \n \n \n Returns : void\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n Public\n addLoadListenerWithCheck\n \n \n \n \n \n \n \n addLoadListenerWithCheck(callback: () => void)\n \n \n\n\n \n \n Defined in src/managers/loading-manager.ts:93\n \n \n\n\n \n \n Add a listener for when all items have loaded with check if there\nare any items to load when the listener is added.\n\n\n \n Parameters :\n \n \n \n \n Name\n Type\n Optional\n Description\n \n \n \n \n callback\n \n function\n \n\n \n No\n \n\n\n \n Callback to call when all items have loaded.\n\n \n \n \n \n \n \n \n \n Returns : void\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n Public\n addProgressListener\n \n \n \n \n \n \n \n addProgressListener(callback: (progress: number) => void)\n \n \n\n\n \n \n Defined in src/managers/loading-manager.ts:105\n \n \n\n\n \n \n Add a callback to listen when the progress of an item increases.\n\n\n \n Parameters :\n \n \n \n \n Name\n Type\n Optional\n Description\n \n \n \n \n callback\n \n function\n \n\n \n No\n \n\n\n \n Callback to call when the progress of a loading item increases.\n\n \n \n \n \n \n \n \n \n Returns : void\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n Public\n itemLoaded\n \n \n \n \n \n \n \n itemLoaded(id: string)\n \n \n\n\n \n \n Defined in src/managers/loading-manager.ts:46\n \n \n\n\n \n \n Function to call when an item has finished loading.\n\n\n \n Parameters :\n \n \n \n \n Name\n Type\n Optional\n Default value\n Description\n \n \n \n \n id\n \n string\n \n\n \n No\n \n\n \n ''\n \n\n \n ID of the item loaded.\n\n \n \n \n \n \n \n \n \n Returns : void\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n Public\n onProgress\n \n \n \n \n \n \n \n onProgress(id: string, progress: number)\n \n \n\n\n \n \n Defined in src/managers/loading-manager.ts:64\n \n \n\n\n \n \n Function to call when loading of an item progresses.\n\n\n \n Parameters :\n \n \n \n \n Name\n Type\n Optional\n Description\n \n \n \n \n id\n \n string\n \n\n \n No\n \n\n\n \n ID of the item with the progress.\n\n \n \n \n progress\n \n number\n \n\n \n No\n \n\n\n \n Progress of the item.\n\n \n \n \n \n \n \n \n \n Returns : void\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n Public\n reset\n \n \n \n \n \n \n \n reset()\n \n \n\n\n \n \n Defined in src/managers/loading-manager.ts:112\n \n \n\n\n \n \n Reset the loading manager and its items.\n\n\n \n Returns : void\n\n \n \n \n \n \n\n\n\n\n\n\n \n\n\n \n export class LoadingManager {\n /** Instance of the loading manager */\n private static instance: LoadingManager;\n\n /** Items to load. */\n public toLoad: string[] = [];\n /** Items loaded */\n public loaded: string[] = [];\n\n /** Callbacks to call on load. */\n private onLoadCallbacks: (() => void)[] = [];\n /** Callbacks to call on progress. */\n private onProgressCallbacks: ((progress: number) => void)[] = [];\n\n /** Progress for each named item. */\n private progressItems: { [key: string]: number } = {};\n\n /**\n * Create the singleton Phoenix loading manager.\n * @returns The loading manager instance.\n */\n constructor() {\n if (LoadingManager.instance === undefined) {\n LoadingManager.instance = this;\n }\n\n return LoadingManager.instance;\n }\n\n /**\n * Add an item which is to be loaded.\n * @param id ID of the item to be loaded.\n */\n public addLoadableItem(id: string = '') {\n this.toLoad.push(id);\n this.progressItems[id] = 0;\n }\n\n /**\n * Function to call when an item has finished loading.\n * @param id ID of the item loaded.\n */\n public itemLoaded(id: string = '') {\n this.loaded.push(id);\n this.onProgress(id, 100);\n\n if (\n this.toLoad.length === this.loaded.length &&\n this.toLoad.sort().join(',') === this.loaded.sort().join(',')\n ) {\n this.onLoadCallbacks.forEach((callback) => callback());\n this.reset();\n }\n }\n\n /**\n * Function to call when loading of an item progresses.\n * @param id ID of the item with the progress.\n * @param progress Progress of the item.\n */\n public onProgress(id: string, progress: number) {\n this.progressItems[id] = progress;\n\n const totalProgress = Object.values(this.progressItems).reduce(\n (acc, val) => acc + val,\n 0\n );\n const totalItems = Object.keys(this.progressItems).length;\n\n const averageProgress = totalProgress / totalItems;\n\n for (const callback of this.onProgressCallbacks) {\n callback(averageProgress);\n }\n }\n\n /**\n * Add a listener for when all items have loaded.\n * @param callback Callback to call when all items have loaded.\n */\n public addLoadListener(callback: () => void) {\n this.onLoadCallbacks.push(callback);\n }\n\n /**\n * Add a listener for when all items have loaded with check if there\n * are any items to load when the listener is added.\n * @param callback Callback to call when all items have loaded.\n */\n public addLoadListenerWithCheck(callback: () => void) {\n if (this.toLoad.length > 0 && this.toLoad.length !== this.loaded.length) {\n this.onLoadCallbacks.push(callback);\n } else {\n callback();\n }\n }\n\n /**\n * Add a callback to listen when the progress of an item increases.\n * @param callback Callback to call when the progress of a loading item increases.\n */\n public addProgressListener(callback: (progress: number) => void) {\n this.onProgressCallbacks.push(callback);\n }\n\n /**\n * Reset the loading manager and its items.\n */\n public reset() {\n this.toLoad = [];\n this.loaded = [];\n this.onLoadCallbacks = [];\n this.onProgressCallbacks = [];\n this.progressItems = {};\n }\n}\n\n \n\n\n\n\n\n\n\n\n\n\n \n \n results matching \"\"\n \n \n \n No results matching \"\"\n \n\n"},"classes/PhoenixMenuNode.html":{"url":"classes/PhoenixMenuNode.html","title":"class - PhoenixMenuNode","body":"\n \n\n\n\n\n\n\n\n\n\n\n\n\n\n Classes\n PhoenixMenuNode\n\n\n\n \n Info\n \n \n Source\n \n\n\n\n \n \n File\n \n \n src/managers/ui-manager/phoenix-menu/phoenix-menu-node.ts\n \n\n\n \n Description\n \n \n A single node of phoenix menu item.\n\n \n\n\n\n\n \n Index\n \n \n \n \n Properties\n \n \n \n \n \n \n children\n \n \n childrenActive\n \n \n Private\n childrenToggleState\n \n \n configActive\n \n \n configs\n \n \n icon\n \n \n name\n \n \n nodeLevel\n \n \n onToggle\n \n \n Private\n parent\n \n \n toggleState\n \n \n \n \n\n \n \n Methods\n \n \n \n \n \n \n addChild\n \n \n addConfig\n \n \n applyConfigState\n \n \n findInTree\n \n \n findInTreeOrCreate\n \n \n getNodeState\n \n \n loadStateFromJSON\n \n \n remove\n \n \n removeChild\n \n \n toggleSelfAndDescendants\n \n \n truncate\n \n \n \n \n\n\n\n\n\n \n \n\n\n \n Constructor\n \n \n \n \nconstructor(name: string, icon?: string, onToggle?: (value?: boolean) => void, children?: PhoenixMenuNode[], configs?: [], parent?: PhoenixMenuNode)\n \n \n \n \n Defined in src/managers/ui-manager/phoenix-menu/phoenix-menu-node.ts:32\n \n \n\n \n \n Create the phoenix menu node.\n\n \n Parameters :\n \n \n \n Name\n Type\n Optional\n Description\n \n \n \n \n name\n \n \n string\n \n \n \n No\n \n \n \n Name of the node.\n\n \n \n \n icon\n \n \n string\n \n \n \n Yes\n \n \n \n Icon of the node.\n\n \n \n \n onToggle\n \n \n function\n \n \n \n Yes\n \n \n \n Function on toggling the node.\n\n \n \n \n children\n \n \n PhoenixMenuNode[]\n \n \n \n Yes\n \n \n \n Children of the node.\n\n \n \n \n configs\n \n \n []\n \n \n \n Yes\n \n \n \n Configuration options in the node.\n\n \n \n \n parent\n \n \n PhoenixMenuNode\n \n \n \n Yes\n \n \n \n Parent of the node.\n\n \n \n \n \n \n \n \n \n \n\n\n \n \n \n Properties\n \n \n \n \n \n \n \n children\n \n \n \n \n \n \n Type : PhoenixMenuNode[]\n\n \n \n \n \n Default value : []\n \n \n \n \n Defined in src/managers/ui-manager/phoenix-menu/phoenix-menu-node.ts:16\n \n \n\n \n \n Children of the node.\n\n \n \n\n \n \n \n \n \n \n \n \n childrenActive\n \n \n \n \n \n \n Type : boolean\n\n \n \n \n \n Default value : false\n \n \n \n \n Defined in src/managers/ui-manager/phoenix-menu/phoenix-menu-node.ts:30\n \n \n\n \n \n If the node children are active or not.\n\n \n \n\n \n \n \n \n \n \n \n \n Private\n childrenToggleState\n \n \n \n \n \n \n Type : object\n\n \n \n \n \n Default value : {}\n \n \n \n \n Defined in src/managers/ui-manager/phoenix-menu/phoenix-menu-node.ts:27\n \n \n\n \n \n Previous toggle state of child nodes. This is so that the\nprevious state of child can be restored if we toggle the parent back on.\n\n \n \n\n \n \n \n \n \n \n \n \n configActive\n \n \n \n \n \n \n Type : boolean\n\n \n \n \n \n Default value : false\n \n \n \n \n Defined in src/managers/ui-manager/phoenix-menu/phoenix-menu-node.ts:32\n \n \n\n \n \n If the node configuration options are active or not.\n\n \n \n\n \n \n \n \n \n \n \n \n configs\n \n \n \n \n \n \n Type : []\n\n \n \n \n \n Default value : []\n \n \n \n \n Defined in src/managers/ui-manager/phoenix-menu/phoenix-menu-node.ts:18\n \n \n\n \n \n Configuration options in the node.\n\n \n \n\n \n \n \n \n \n \n \n \n icon\n \n \n \n \n \n \n Type : string\n\n \n \n \n \n Defined in src/managers/ui-manager/phoenix-menu/phoenix-menu-node.ts:10\n \n \n\n \n \n Icon of the node.\n\n \n \n\n \n \n \n \n \n \n \n \n name\n \n \n \n \n \n \n Type : string\n\n \n \n \n \n Defined in src/managers/ui-manager/phoenix-menu/phoenix-menu-node.ts:8\n \n \n\n \n \n Name of the node.\n\n \n \n\n \n \n \n \n \n \n \n \n nodeLevel\n \n \n \n \n \n \n Type : number\n\n \n \n \n \n Default value : 0\n \n \n \n \n Defined in src/managers/ui-manager/phoenix-menu/phoenix-menu-node.ts:20\n \n \n\n \n \n Level of the node.\n\n \n \n\n \n \n \n \n \n \n \n \n onToggle\n \n \n \n \n \n \n Type : function\n\n \n \n \n \n Defined in src/managers/ui-manager/phoenix-menu/phoenix-menu-node.ts:12\n \n \n\n \n \n Function on toggling the node.\n\n \n \n\n \n \n \n \n \n \n \n \n Private\n parent\n \n \n \n \n \n \n Type : PhoenixMenuNode\n\n \n \n \n \n Defined in src/managers/ui-manager/phoenix-menu/phoenix-menu-node.ts:22\n \n \n\n \n \n Parent of the node.\n\n \n \n\n \n \n \n \n \n \n \n \n toggleState\n \n \n \n \n \n \n Type : boolean\n\n \n \n \n \n Default value : true\n \n \n \n \n Defined in src/managers/ui-manager/phoenix-menu/phoenix-menu-node.ts:14\n \n \n\n \n \n If the node toggle state is true or false.\n\n \n \n\n \n \n\n\n \n \n \n Methods\n \n \n \n \n \n \n \n addChild\n \n \n \n \n \n \naddChild(name: string, onToggle?: (value?: boolean) => void, icon?: string)\n \n \n\n\n \n \n Defined in src/managers/ui-manager/phoenix-menu/phoenix-menu-node.ts:66\n \n \n\n\n \n \n Add a child to the phoenix menu item.\n\n\n \n Parameters :\n \n \n \n \n Name\n Type\n Optional\n Description\n \n \n \n \n name\n \n string\n \n\n \n No\n \n\n\n \n Name of the child.\n\n \n \n \n onToggle\n \n function\n \n\n \n Yes\n \n\n\n \n Function on toggling the child.\n\n \n \n \n icon\n \n string\n \n\n \n Yes\n \n\n\n \n Icon of the child.\n\n \n \n \n \n \n \n \n \n Returns : PhoenixMenuNode\n\n \n \n The child node.\n\n \n \n \n \n \n \n \n \n \n \n \n addConfig\n \n \n \n \n \n \naddConfig(type: T, options: Omit)\n \n \n\n\n \n \n Defined in src/managers/ui-manager/phoenix-menu/phoenix-menu-node.ts:115\n \n \n\n \n \n Type parameters :\n \n T\n \n \n \n\n \n \n Add a config to the phoenix menu item.\n\n\n \n Parameters :\n \n \n \n \n Name\n Type\n Optional\n Description\n \n \n \n \n type\n \n T\n \n\n \n No\n \n\n\n \n Type of configuration.\n\n \n \n \n options\n \n Omit\n \n\n \n No\n \n\n\n \n Options for the config.\n\n \n \n \n \n \n \n \n \n Returns : PhoenixMenuNode\n\n \n \n The current node.\n\n \n \n \n \n \n \n \n \n \n \n \n applyConfigState\n \n \n \n \n \n \napplyConfigState(config: any)\n \n \n\n\n \n \n Defined in src/managers/ui-manager/phoenix-menu/phoenix-menu-node.ts:149\n \n \n\n\n \n \n Apply the current values of config by calling the change function.\n\n\n \n Parameters :\n \n \n \n \n Name\n Type\n Optional\n Description\n \n \n \n \n config\n \n any\n \n\n \n No\n \n\n\n \n Config whose values are to be applied.\n\n \n \n \n \n \n \n \n \n Returns : void\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n findInTree\n \n \n \n \n \n \nfindInTree(name: string)\n \n \n\n\n \n \n Defined in src/managers/ui-manager/phoenix-menu/phoenix-menu-node.ts:242\n \n \n\n\n \n \n Find a node in the tree by name.\n\n\n \n Parameters :\n \n \n \n \n Name\n Type\n Optional\n Description\n \n \n \n \n name\n \n string\n \n\n \n No\n \n\n\n \n Name of the node to find.\n\n \n \n \n \n \n \n \n \n Returns : PhoenixMenuNode\n\n \n \n The found node.\n\n \n \n \n \n \n \n \n \n \n \n \n findInTreeOrCreate\n \n \n \n \n \n \nfindInTreeOrCreate(name: string)\n \n \n\n\n \n \n Defined in src/managers/ui-manager/phoenix-menu/phoenix-menu-node.ts:260\n \n \n\n\n \n \n Find a node in the tree by name or create one.\n\n\n \n Parameters :\n \n \n \n \n Name\n Type\n Optional\n Description\n \n \n \n \n name\n \n string\n \n\n \n No\n \n\n\n \n Name of the node to find or create.\n\n \n \n \n \n \n \n \n \n Returns : PhoenixMenuNode\n\n \n \n The found or created node.\n\n \n \n \n \n \n \n \n \n \n \n \n getNodeState\n \n \n \n \n \n \ngetNodeState()\n \n \n\n\n \n \n Defined in src/managers/ui-manager/phoenix-menu/phoenix-menu-node.ts:175\n \n \n\n\n \n \n Get current state of the node as an object.\n\n\n \n \n \n Returns : literal type\n\n \n \n State of the node as an object.\n\n \n \n \n \n \n \n \n \n \n \n \n loadStateFromJSON\n \n \n \n \n \n \nloadStateFromJSON(json: string | literal type)\n \n \n\n\n \n \n Defined in src/managers/ui-manager/phoenix-menu/phoenix-menu-node.ts:196\n \n \n\n\n \n \n Load the state of the phoenix menu node from JSON.\n\n\n \n Parameters :\n \n \n \n \n Name\n Type\n Optional\n Description\n \n \n \n \n json\n \n string | literal type\n \n\n \n No\n \n\n\n \n JSON containing the phoenix menu node state.\n\n \n \n \n \n \n \n \n \n Returns : void\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n remove\n \n \n \n \n \n \nremove()\n \n \n\n\n \n \n Defined in src/managers/ui-manager/phoenix-menu/phoenix-menu-node.ts:92\n \n \n\n\n \n \n Remove the current node.\n\n\n \n Returns : void\n\n \n \n \n \n \n \n \n \n \n \n \n removeChild\n \n \n \n \n \n \nremoveChild(child: PhoenixMenuNode)\n \n \n\n\n \n \n Defined in src/managers/ui-manager/phoenix-menu/phoenix-menu-node.ts:83\n \n \n\n\n \n \n Remove a child node.\n\n\n \n Parameters :\n \n \n \n \n Name\n Type\n Optional\n Description\n \n \n \n \n child\n \n PhoenixMenuNode\n \n\n \n No\n \n\n\n \n The child node to be removed.\n\n \n \n \n \n \n \n \n \n Returns : PhoenixMenuNode\n\n \n \n The current node.\n\n \n \n \n \n \n \n \n \n \n \n \n toggleSelfAndDescendants\n \n \n \n \n \n \ntoggleSelfAndDescendants(value: boolean)\n \n \n\n\n \n \n Defined in src/managers/ui-manager/phoenix-menu/phoenix-menu-node.ts:129\n \n \n\n\n \n \n Function for toggling the current and all child nodes.\n\n\n \n Parameters :\n \n \n \n \n Name\n Type\n Optional\n Description\n \n \n \n \n value\n \n boolean\n \n\n \n No\n \n\n\n \n If the node itself and descendants are to be made true or false.\n\n \n \n \n \n \n \n \n \n Returns : void\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n truncate\n \n \n \n \n \n \ntruncate()\n \n \n\n\n \n \n Defined in src/managers/ui-manager/phoenix-menu/phoenix-menu-node.ts:105\n \n \n\n\n \n \n Remove all children.\n\n\n \n Returns : void\n\n \n \n \n \n \n\n\n\n\n\n\n \n\n\n \n import { PhoenixMenuConfigs } from './config-types';\n\n/**\n * A single node of phoenix menu item.\n */\nexport class PhoenixMenuNode {\n /** Name of the node. */\n name: string;\n /** Icon of the node. */\n icon: string;\n /** Function on toggling the node. */\n onToggle: (value: boolean) => void;\n /** If the node toggle state is true or false. */\n toggleState: boolean = true;\n /** Children of the node. */\n children: PhoenixMenuNode[] = [];\n /** Configuration options in the node. */\n configs: PhoenixMenuConfigs[keyof PhoenixMenuConfigs][] = [];\n /** Level of the node. */\n nodeLevel: number = 0;\n /** Parent of the node. */\n private parent: PhoenixMenuNode;\n /**\n * Previous toggle state of child nodes. This is so that the\n * previous state of child can be restored if we toggle the parent back on.\n */\n private childrenToggleState = {};\n\n /** If the node children are active or not. */\n childrenActive: boolean = false;\n /** If the node configuration options are active or not. */\n configActive: boolean = false;\n\n /**\n * Create the phoenix menu node.\n * @param name Name of the node.\n * @param icon Icon of the node.\n * @param onToggle Function on toggling the node.\n * @param children Children of the node.\n * @param configs Configuration options in the node.\n * @param parent Parent of the node.\n */\n constructor(\n name: string,\n icon?: string,\n onToggle?: (value: boolean) => void,\n children?: PhoenixMenuNode[],\n configs?: PhoenixMenuConfigs[keyof PhoenixMenuConfigs][],\n parent?: PhoenixMenuNode\n ) {\n this.name = name;\n this.icon = icon;\n this.onToggle = onToggle;\n if (children) this.children = children;\n if (configs) this.configs = configs;\n if (parent) this.parent = parent;\n }\n\n /**\n * Add a child to the phoenix menu item.\n * @param name Name of the child.\n * @param onToggle Function on toggling the child.\n * @param icon Icon of the child.\n * @returns The child node.\n */\n addChild(\n name: string,\n onToggle?: (value: boolean) => void,\n icon?: string\n ): PhoenixMenuNode {\n const child = new PhoenixMenuNode(name, icon, onToggle);\n child.parent = this;\n child.nodeLevel = this.nodeLevel + 1;\n this.children.push(child);\n return child;\n }\n\n /**\n * Remove a child node.\n * @param child The child node to be removed.\n * @returns The current node.\n */\n removeChild(child: PhoenixMenuNode): PhoenixMenuNode {\n const childIndex = this.children.indexOf(child);\n this.children.splice(childIndex, 1);\n return this;\n }\n\n /**\n * Remove the current node.\n */\n remove() {\n if (this.parent) {\n this.parent.removeChild(this);\n } else {\n console.error(\n 'Cannot delete root node of phoenix menu. Set it to undefined/null instead.'\n );\n }\n }\n\n /**\n * Remove all children.\n */\n truncate() {\n this.children = [];\n }\n\n /**\n * Add a config to the phoenix menu item.\n * @param type Type of configuration.\n * @param options Options for the config.\n * @returns The current node.\n */\n addConfig(\n type: T,\n options: Omit\n ): PhoenixMenuNode {\n const configsLength = this.configs.push({ type, ...options });\n // Apply the values of config\n this.applyConfigState(this.configs[configsLength - 1]);\n return this;\n }\n\n /**\n * Function for toggling the current and all child nodes.\n * @param value If the node itself and descendants are to be made true or false.\n */\n toggleSelfAndDescendants(value: boolean) {\n this.onToggle?.(value);\n this.toggleState = value;\n for (const child of this.children) {\n if (!value) {\n // Save previous toggle state of children and toggle them false\n this.childrenToggleState[child.name] = child.toggleState;\n child.toggleSelfAndDescendants(value);\n } else {\n // Restore previous toggle state of children\n child.toggleState = this.childrenToggleState[child.name];\n child.toggleSelfAndDescendants(child.toggleState);\n }\n }\n }\n\n /**\n * Apply the current values of config by calling the change function.\n * @param config Config whose values are to be applied.\n */\n applyConfigState(config: any) {\n // Apply configs of different config types - manual\n if (config.type === 'checkbox' && config?.['isChecked']) {\n config.onChange?.(config?.['isChecked']);\n } else if (config.type === 'color' && config?.['color'] && !config.group) {\n // Ignore color by options with `!config.group`, otherwise the collection color is overridden\n config.onChange?.(config?.['color']);\n } else if (config.type === 'slider' && config?.['value']) {\n config.onChange?.(config?.['value']);\n } else if (\n config.type === 'rangeSlider' &&\n config?.['value'] !== undefined\n ) {\n config.onChange?.({\n value: config?.['value'],\n highValue: config?.['highValue'],\n });\n config.setEnableMin?.(config?.['enableMin']);\n config.setEnableMax?.(config?.['enableMax']);\n }\n }\n\n /**\n * Get current state of the node as an object.\n * @returns State of the node as an object.\n */\n getNodeState(): { [key: string]: any } {\n const phoenixNodeJSON: { [key: string]: any } = {};\n\n phoenixNodeJSON['name'] = this.name;\n phoenixNodeJSON['nodeLevel'] = this.nodeLevel;\n phoenixNodeJSON['toggleState'] = this.toggleState;\n phoenixNodeJSON['childrenActive'] = this.childrenActive;\n phoenixNodeJSON['configs'] = this.configs;\n phoenixNodeJSON['children'] = [];\n\n for (const child of this.children) {\n phoenixNodeJSON['children'].push(child.getNodeState());\n }\n\n return phoenixNodeJSON;\n }\n\n /**\n * Load the state of the phoenix menu node from JSON.\n * @param json JSON containing the phoenix menu node state.\n */\n loadStateFromJSON(json: string | { [key: string]: any }) {\n let jsonObject: any;\n if (typeof json === 'string') {\n jsonObject = JSON.parse(json);\n } else {\n jsonObject = json;\n }\n\n this.childrenActive = jsonObject['childrenActive'];\n this.toggleState = jsonObject['toggleState'];\n this.toggleState !== undefined && this.onToggle?.(this.toggleState);\n\n for (const configState of jsonObject['configs']) {\n const nodeConfig = this.configs.find(\n (nodeConfig) =>\n nodeConfig.type === configState['type'] &&\n nodeConfig.label === configState['label']\n );\n\n if (nodeConfig) {\n for (const prop in configState) {\n nodeConfig[prop] = configState[prop];\n }\n\n this.applyConfigState(nodeConfig);\n }\n }\n\n for (const childState of jsonObject['children']) {\n const nodeChild = this.children.filter(\n (nodeChild) =>\n nodeChild.name === childState.name &&\n nodeChild.nodeLevel === childState.nodeLevel\n )[0];\n\n if (nodeChild) {\n nodeChild.loadStateFromJSON(childState);\n }\n }\n }\n\n /**\n * Find a node in the tree by name.\n * @param name Name of the node to find.\n * @returns The found node.\n */\n findInTree(name: string): PhoenixMenuNode {\n if (this.name === name) {\n return this;\n } else {\n for (const child of this.children) {\n const nodeFound = child.findInTree(name);\n if (nodeFound) {\n return nodeFound;\n }\n }\n }\n }\n\n /**\n * Find a node in the tree by name or create one.\n * @param name Name of the node to find or create.\n * @returns The found or created node.\n */\n findInTreeOrCreate(name: string): PhoenixMenuNode {\n let prevNode: PhoenixMenuNode = this;\n name.split('>').forEach((nodeName) => {\n nodeName = nodeName.trim();\n const nodeFound = prevNode.findInTree(nodeName);\n // const nodeFound = prevNode.children.find(child => child.name === nodeName);\n\n prevNode = nodeFound ? nodeFound : prevNode.addChild(nodeName, () => {});\n });\n return prevNode;\n }\n}\n\n \n\n\n\n\n\n\n\n\n\n\n \n \n results matching \"\"\n \n \n \n No results matching \"\"\n \n\n"},"classes/PhoenixMenuUI.html":{"url":"classes/PhoenixMenuUI.html","title":"class - PhoenixMenuUI","body":"\n \n\n\n\n\n\n\n\n\n\n\n\n\n\n Classes\n PhoenixMenuUI\n\n\n\n \n Info\n \n \n Source\n \n\n\n\n \n \n File\n \n \n src/managers/ui-manager/phoenix-menu/phoenix-menu-ui.ts\n \n\n\n \n Description\n \n \n A wrapper class for Phoenix menu to perform UI related operations.\n\n \n\n\n \n Implements\n \n \n PhoenixUI\n \n\n\n \n Index\n \n \n \n \n Properties\n \n \n \n \n \n \n Private\n eventFolder\n \n \n Private\n eventFolderState\n \n \n Private\n geomFolder\n \n \n Private\n labelsFolder\n \n \n Private\n sceneManager\n \n \n \n \n\n \n \n Methods\n \n \n \n \n \n \n Public\n addCollection\n \n \n Private\n addCutOptions\n \n \n Private\n addDrawOptions\n \n \n Public\n addEventDataFolder\n \n \n Public\n addEventDataTypeFolder\n \n \n Public\n addGeometry\n \n \n Public\n addGeometryFolder\n \n \n Public\n addLabel\n \n \n Public\n addLabelsFolder\n \n \n Public\n clear\n \n \n Public\n getEventDataTypeFolder\n \n \n Public\n loadEventFolderState\n \n \n Public\n removeLabel\n \n \n \n \n\n\n\n\n\n \n \n\n\n \n Constructor\n \n \n \n \nconstructor(phoenixMenuRoot: PhoenixMenuNode, three: ThreeManager)\n \n \n \n \n Defined in src/managers/ui-manager/phoenix-menu/phoenix-menu-ui.ts:29\n \n \n\n \n \n Create Phoenix menu UI with different controls related to detector geometry and event data.\n\n \n Parameters :\n \n \n \n Name\n Type\n Optional\n Description\n \n \n \n \n phoenixMenuRoot\n \n \n PhoenixMenuNode\n \n \n \n No\n \n \n \n Root node of the Phoenix menu.\n\n \n \n \n three\n \n \n ThreeManager\n \n \n \n No\n \n \n \n The three manager for managing three.js related operations.\n\n \n \n \n \n \n \n \n \n \n\n\n \n \n \n Properties\n \n \n \n \n \n \n \n Private\n eventFolder\n \n \n \n \n \n \n Type : PhoenixMenuNode\n\n \n \n \n \n Defined in src/managers/ui-manager/phoenix-menu/phoenix-menu-ui.ts:23\n \n \n\n \n \n Phoenix menu node containing event related data.\n\n \n \n\n \n \n \n \n \n \n \n \n Private\n eventFolderState\n \n \n \n \n \n \n Type : any\n\n \n \n \n \n Defined in src/managers/ui-manager/phoenix-menu/phoenix-menu-ui.ts:25\n \n \n\n \n \n State of the Phoenix menu node containing event related data.\n\n \n \n\n \n \n \n \n \n \n \n \n Private\n geomFolder\n \n \n \n \n \n \n Type : PhoenixMenuNode\n\n \n \n \n \n Defined in src/managers/ui-manager/phoenix-menu/phoenix-menu-ui.ts:21\n \n \n\n \n \n Phoenix menu node containing geometries data\n\n \n \n\n \n \n \n \n \n \n \n \n Private\n labelsFolder\n \n \n \n \n \n \n Type : PhoenixMenuNode\n\n \n \n \n \n Defined in src/managers/ui-manager/phoenix-menu/phoenix-menu-ui.ts:27\n \n \n\n \n \n Phoenix menu node containing labels.\n\n \n \n\n \n \n \n \n \n \n \n \n Private\n sceneManager\n \n \n \n \n \n \n Type : SceneManager\n\n \n \n \n \n Defined in src/managers/ui-manager/phoenix-menu/phoenix-menu-ui.ts:29\n \n \n\n \n \n Manager for managing functions of the three.js scene.\n\n \n \n\n \n \n\n\n \n \n \n Methods\n \n \n \n \n \n \n \n Public\n addCollection\n \n \n \n \n \n \n \n addCollection(eventDataType: string, collectionName: string, cuts?: Cut[], collectionColor?: Color)\n \n \n\n\n \n \n Defined in src/managers/ui-manager/phoenix-menu/phoenix-menu-ui.ts:219\n \n \n\n\n \n \n Add collection folder and its configurable options to the event data type (tracks, hits etc.) folder.\n\n\n \n Parameters :\n \n \n \n \n Name\n Type\n Optional\n Description\n \n \n \n \n eventDataType\n \n string\n \n\n \n No\n \n\n\n \n Name of the event data type.\n\n \n \n \n collectionName\n \n string\n \n\n \n No\n \n\n\n \n Name of the collection to be added in the type of event data (tracks, hits etc.).\n\n \n \n \n cuts\n \n Cut[]\n \n\n \n Yes\n \n\n\n \n Cuts to the collection of event data that are to be made configurable to filter event data.\n\n \n \n \n collectionColor\n \n Color\n \n\n \n Yes\n \n\n\n \n Default color of the collection.\n\n \n \n \n \n \n \n \n \n Returns : void\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n Private\n addCutOptions\n \n \n \n \n \n \n \n addCutOptions(collectionNode: PhoenixMenuNode, collectionName: string, cuts: Cut[])\n \n \n\n\n \n \n Defined in src/managers/ui-manager/phoenix-menu/phoenix-menu-ui.ts:273\n \n \n\n\n \n \n Add Cut Options folder to the menu.\n\n\n \n Parameters :\n \n \n \n \n Name\n Type\n Optional\n Description\n \n \n \n \n collectionNode\n \n PhoenixMenuNode\n \n\n \n No\n \n\n\n \n The parent node to attach folder to\n\n \n \n \n collectionName\n \n string\n \n\n \n No\n \n\n\n \n The name of the collection\n\n \n \n \n cuts\n \n Cut[]\n \n\n \n No\n \n\n\n \n \n \n \n \n \n \n \n \n Returns : void\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n Private\n addDrawOptions\n \n \n \n \n \n \n \n addDrawOptions(collectionNode: PhoenixMenuNode, collectionName: string)\n \n \n\n\n \n \n Defined in src/managers/ui-manager/phoenix-menu/phoenix-menu-ui.ts:332\n \n \n\n\n \n \n Add Draw Options folder to the menu.\n\n\n \n Parameters :\n \n \n \n \n Name\n Type\n Optional\n Description\n \n \n \n \n collectionNode\n \n PhoenixMenuNode\n \n\n \n No\n \n\n\n \n The parent node to attach folder to\n\n \n \n \n collectionName\n \n string\n \n\n \n No\n \n\n\n \n The name of the collection\n\n \n \n \n \n \n \n \n \n Returns : void\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n Public\n addEventDataFolder\n \n \n \n \n \n \n \n addEventDataFolder()\n \n \n\n\n \n \n Defined in src/managers/ui-manager/phoenix-menu/phoenix-menu-ui.ts:175\n \n \n\n\n \n \n Add event data folder with functions for event data toggles like show/hide and depthTest.\n\n\n \n Returns : void\n\n \n \n \n \n \n \n \n \n \n \n \n Public\n addEventDataTypeFolder\n \n \n \n \n \n \n \n addEventDataTypeFolder(typeName: string)\n \n \n\n\n \n \n Defined in src/managers/ui-manager/phoenix-menu/phoenix-menu-ui.ts:201\n \n \n\n\n \n \n Add folder for event data type like tracks or hits to the menu.\n\n\n \n Parameters :\n \n \n \n \n Name\n Type\n Optional\n Description\n \n \n \n \n typeName\n \n string\n \n\n \n No\n \n\n\n \n Name of the type of event data.\n\n \n \n \n \n \n \n \n \n Returns : void\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n Public\n addGeometry\n \n \n \n \n \n \n \n addGeometry(object: Object3D, menuSubfolder?: string)\n \n \n\n\n \n \n Defined in src/managers/ui-manager/phoenix-menu/phoenix-menu-ui.ts:116\n \n \n\n\n \n \n Add geometry to the menu's geometry folder and set up its configurable options.\n\n\n \n Parameters :\n \n \n \n \n Name\n Type\n Optional\n Description\n \n \n \n \n object\n \n Object3D\n \n\n \n No\n \n\n\n \n Object to add to the UI menu.\n\n \n \n \n menuSubfolder\n \n string\n \n\n \n Yes\n \n\n\n \n Subfolder in the menu to add the geometry to. Example Folder > Subfolder.\n\n \n \n \n \n \n \n \n \n Returns : void\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n Public\n addGeometryFolder\n \n \n \n \n \n \n \n addGeometryFolder()\n \n \n\n\n \n \n Defined in src/managers/ui-manager/phoenix-menu/phoenix-menu-ui.ts:63\n \n \n\n\n \n \n Add geometry (detector geometry) folder to the menu.\n\n\n \n Returns : void\n\n \n \n \n \n \n \n \n \n \n \n \n Public\n addLabel\n \n \n \n \n \n \n \n addLabel(labelId: string, onRemoveLabel?: () => void)\n \n \n\n\n \n \n Defined in src/managers/ui-manager/phoenix-menu/phoenix-menu-ui.ts:419\n \n \n\n\n \n \n Add folder for configuration of label.\n\n\n \n Parameters :\n \n \n \n \n Name\n Type\n Optional\n Description\n \n \n \n \n labelId\n \n string\n \n\n \n No\n \n\n\n \n Unique ID of the label.\n\n \n \n \n onRemoveLabel\n \n function\n \n\n \n Yes\n \n\n\n \n Function called when label is removed.\n\n \n \n \n \n \n \n \n \n Returns : void\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n Public\n addLabelsFolder\n \n \n \n \n \n \n \n addLabelsFolder(configFunctions: any)\n \n \n\n\n \n \n Defined in src/managers/ui-manager/phoenix-menu/phoenix-menu-ui.ts:369\n \n \n\n\n \n \n Add labels folder to the menu.\n\n\n \n Parameters :\n \n \n \n \n Name\n Type\n Optional\n Description\n \n \n \n \n configFunctions\n \n any\n \n\n \n No\n \n\n\n \n Functions to attach to the labels folder configuration.\n\n \n \n \n \n \n \n \n \n Returns : void\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n Public\n clear\n \n \n \n \n \n \n \n clear()\n \n \n\n\n \n \n Defined in src/managers/ui-manager/phoenix-menu/phoenix-menu-ui.ts:49\n \n \n\n\n \n \n Clear the menu by removing all folders.\n\n\n \n Returns : void\n\n \n \n \n \n \n \n \n \n \n \n \n Public\n getEventDataTypeFolder\n \n \n \n \n \n \n \n getEventDataTypeFolder(typeName: string)\n \n \n\n\n \n \n Defined in src/managers/ui-manager/phoenix-menu/phoenix-menu-ui.ts:475\n \n \n\n\n \n \n Get the folder of the event data type.\n\n\n \n Parameters :\n \n \n \n \n Name\n Type\n Optional\n Description\n \n \n \n \n typeName\n \n string\n \n\n \n No\n \n\n\n \n Name of the event data type.\n\n \n \n \n \n \n \n \n \n Returns : PhoenixMenuNode\n\n \n \n Folder of the event data type.\n\n \n \n \n \n \n \n \n \n \n \n \n Public\n loadEventFolderState\n \n \n \n \n \n \n \n loadEventFolderState()\n \n \n\n\n \n \n Defined in src/managers/ui-manager/phoenix-menu/phoenix-menu-ui.ts:484\n \n \n\n\n \n \n Load previous state of the event data folder in Phoenix menu if any.\n\n\n \n Returns : void\n\n \n \n \n \n \n \n \n \n \n \n \n Public\n removeLabel\n \n \n \n \n \n \n \n removeLabel(labelId: string, labelNode?: PhoenixMenuNode)\n \n \n\n\n \n \n Defined in src/managers/ui-manager/phoenix-menu/phoenix-menu-ui.ts:460\n \n \n\n\n \n \n Remove label from the menu and scene if it exists.\n\n\n \n Parameters :\n \n \n \n \n Name\n Type\n Optional\n Description\n \n \n \n \n labelId\n \n string\n \n\n \n No\n \n\n\n \n A unique label ID string.\n\n \n \n \n labelNode\n \n PhoenixMenuNode\n \n\n \n Yes\n \n\n\n \n \n \n \n \n \n \n \n \n Returns : void\n\n \n \n \n \n \n \n \n \n\n\n\n\n\n\n \n\n\n \n import {\n BufferGeometry,\n Color,\n Mesh,\n MeshPhongMaterial,\n Object3D,\n} from 'three';\nimport { SceneManager } from '../../three-manager/scene-manager';\nimport { ThreeManager } from '../../three-manager';\nimport { PhoenixMenuNode } from './phoenix-menu-node';\nimport { Cut } from '../../../lib/models/cut.model';\nimport { PrettySymbols } from '../../../helpers/pretty-symbols';\nimport { ColorByOptionKeys, ColorOptions } from '../color-options';\nimport { PhoenixUI } from '../phoenix-ui';\n\n/**\n * A wrapper class for Phoenix menu to perform UI related operations.\n */\nexport class PhoenixMenuUI implements PhoenixUI {\n /** Phoenix menu node containing geometries data */\n private geomFolder: PhoenixMenuNode;\n /** Phoenix menu node containing event related data. */\n private eventFolder: PhoenixMenuNode;\n /** State of the Phoenix menu node containing event related data. */\n private eventFolderState: any;\n /** Phoenix menu node containing labels. */\n private labelsFolder: PhoenixMenuNode;\n /** Manager for managing functions of the three.js scene. */\n private sceneManager: SceneManager;\n\n /**\n * Create Phoenix menu UI with different controls related to detector geometry and event data.\n * @param phoenixMenuRoot Root node of the Phoenix menu.\n * @param three The three manager for managing three.js related operations.\n */\n constructor(\n private phoenixMenuRoot: PhoenixMenuNode,\n private three: ThreeManager\n ) {\n this.geomFolder = null;\n this.eventFolder = null;\n this.labelsFolder = null;\n this.sceneManager = three.getSceneManager();\n }\n\n /**\n * Clear the menu by removing all folders.\n */\n public clear() {\n if (this.phoenixMenuRoot) {\n this.phoenixMenuRoot.truncate();\n this.phoenixMenuRoot = undefined;\n }\n\n this.geomFolder = null;\n this.eventFolder = null;\n this.labelsFolder = null;\n }\n\n /**\n * Add geometry (detector geometry) folder to the menu.\n */\n public addGeometryFolder() {\n // Phoenix menu\n if (this.geomFolder === null) {\n this.geomFolder = this.phoenixMenuRoot.addChild(\n 'Detector',\n (value) => {\n this.sceneManager.groupVisibility(SceneManager.GEOMETRIES_ID, value);\n },\n 'perspective'\n );\n }\n\n this.geomFolder\n .addConfig('checkbox', {\n label: 'Wireframe',\n isChecked: false,\n onChange: (value) => {\n this.sceneManager.wireframeGeometries(value);\n },\n })\n .addConfig('slider', {\n label: 'Opacity',\n min: 0,\n max: 1,\n step: 0.01,\n allowCustomValue: true,\n onChange: (value) => {\n this.sceneManager.setGeometryOpacity(\n this.sceneManager.getObjectByName(SceneManager.GEOMETRIES_ID),\n value\n );\n },\n })\n .addConfig('slider', {\n label: 'Scale',\n min: 0,\n max: 20,\n step: 0.01,\n allowCustomValue: true,\n onChange: (scale) => {\n this.sceneManager.scaleObject(\n this.sceneManager.getObjectByName(SceneManager.GEOMETRIES_ID),\n scale\n );\n },\n });\n }\n\n /**\n * Add geometry to the menu's geometry folder and set up its configurable options.\n * @param object Object to add to the UI menu.\n * @param menuSubfolder Subfolder in the menu to add the geometry to. Example `Folder > Subfolder`.\n */\n public addGeometry(object: Object3D, menuSubfolder?: string) {\n const { name, material, visible } = object as Mesh;\n const color = material?.color;\n\n let parentNode: PhoenixMenuNode = this.geomFolder;\n if (menuSubfolder) {\n parentNode = this.geomFolder.findInTreeOrCreate(menuSubfolder);\n }\n\n // find out where the actual object name starts, providing that the name\n // is hierarchical and contents higher level menu names too\n let nameStart = name.lastIndexOf(' > ');\n if (nameStart '\n }\n const objFolder = parentNode.addChild(\n name.substring(nameStart),\n (value: boolean) => {\n this.sceneManager.objectVisibility(object, value);\n }\n );\n\n objFolder.toggleState = visible;\n\n objFolder\n .addConfig('color', {\n label: 'Color',\n color: color ? `#${new Color(color).getHexString()}` : undefined,\n onChange: (value) => {\n this.sceneManager.changeObjectColor(object, value);\n },\n })\n .addConfig('slider', {\n label: 'Opacity',\n min: 0,\n max: 1,\n step: 0.05,\n allowCustomValue: true,\n onChange: (opacity) => {\n this.sceneManager.setGeometryOpacity(object, opacity);\n },\n })\n .addConfig('button', {\n label: 'Remove',\n onClick: () => {\n objFolder.remove();\n this.sceneManager.removeGeometry(object);\n },\n });\n }\n\n /**\n * Add event data folder with functions for event data toggles like show/hide and depthTest.\n */\n public addEventDataFolder() {\n // Phoenix menu\n if (this.eventFolder !== null) {\n this.eventFolderState = this.eventFolder.getNodeState();\n this.eventFolder.remove();\n }\n this.eventFolder = this.phoenixMenuRoot.addChild(\n 'Event Data',\n (value: boolean) => {\n this.sceneManager.groupVisibility(SceneManager.EVENT_DATA_ID, value);\n },\n 'event-folder'\n );\n this.eventFolder.addConfig('checkbox', {\n label: 'Depth Test',\n isChecked: true,\n onChange: (value) => {\n this.three.eventDataDepthTest(value);\n },\n });\n }\n\n /**\n * Add folder for event data type like tracks or hits to the menu.\n * @param typeName Name of the type of event data.\n */\n public addEventDataTypeFolder(typeName: string): void {\n this.eventFolder.addChild(typeName, (value: boolean) => {\n this.sceneManager.objectVisibility(\n this.sceneManager\n .getObjectByName(SceneManager.EVENT_DATA_ID)\n .getObjectByName(typeName),\n value\n );\n });\n }\n\n /**\n * Add collection folder and its configurable options to the event data type (tracks, hits etc.) folder.\n * @param eventDataType Name of the event data type.\n * @param collectionName Name of the collection to be added in the type of event data (tracks, hits etc.).\n * @param cuts Cuts to the collection of event data that are to be made configurable to filter event data.\n * @param collectionColor Default color of the collection.\n */\n public addCollection(\n eventDataType: string,\n collectionName: string,\n cuts?: Cut[],\n collectionColor?: Color\n ) {\n const typeFolder = this.eventFolder.children.find(\n (eventDataTypeNode) => eventDataTypeNode.name === eventDataType\n );\n\n if (!typeFolder) {\n return;\n }\n\n const collectionNode = typeFolder.addChild(\n collectionName,\n (value: boolean) => {\n const collectionObject = this.sceneManager\n .getObjectByName(SceneManager.EVENT_DATA_ID)\n .getObjectByName(collectionName);\n this.sceneManager.objectVisibility(collectionObject, value);\n }\n );\n\n this.addDrawOptions(collectionNode, collectionName);\n\n if (cuts && cuts.length > 0) {\n this.addCutOptions(collectionNode, collectionName, cuts);\n }\n\n const colorByOptions: ColorByOptionKeys[] = [];\n\n // Extra config options specific to tracks\n if (typeFolder.name === 'Tracks') {\n colorByOptions.push(\n ColorByOptionKeys.CHARGE,\n ColorByOptionKeys.MOM,\n ColorByOptionKeys.VERTEX\n );\n }\n\n new ColorOptions(\n this.three.getColorManager(),\n collectionNode,\n collectionColor,\n colorByOptions\n );\n }\n\n /**\n * Add Cut Options folder to the menu.\n * @param collectionNode The parent node to attach folder to\n * @param collectionName The name of the collection\n */\n private addCutOptions(\n collectionNode: PhoenixMenuNode,\n collectionName: string,\n cuts: Cut[]\n ) {\n const cutsOptionsNode = collectionNode.addChild('Cut Options');\n\n cutsOptionsNode\n .addConfig('label', {\n label: 'Cuts',\n })\n .addConfig('button', {\n label: 'Reset cuts',\n onClick: () => {\n this.sceneManager.groupVisibility(\n collectionName,\n true,\n SceneManager.EVENT_DATA_ID\n );\n\n for (const cut of cuts) {\n cut.reset();\n }\n },\n });\n\n // Add range sliders for cuts\n for (const cut of cuts) {\n cutsOptionsNode.addConfig('rangeSlider', {\n label: PrettySymbols.getPrettySymbol(cut.field),\n min: cut.minValue,\n max: cut.maxValue,\n step: cut.step,\n value: cut.minValue,\n highValue: cut.maxValue,\n enableMin: cut.minCutActive,\n enableMax: cut.maxCutActive,\n onChange: ({ value, highValue }) => {\n cut.minValue = value;\n cut.maxValue = highValue;\n this.sceneManager.collectionFilter(collectionName, cuts);\n },\n setEnableMin: (checked: boolean) => {\n cut.enableMinCut(checked);\n this.sceneManager.collectionFilter(collectionName, cuts);\n },\n setEnableMax: (checked: boolean) => {\n cut.enableMaxCut(checked);\n this.sceneManager.collectionFilter(collectionName, cuts);\n },\n });\n }\n }\n\n /**\n * Add Draw Options folder to the menu.\n * @param collectionNode The parent node to attach folder to\n * @param collectionName The name of the collection\n */\n private addDrawOptions(\n collectionNode: PhoenixMenuNode,\n collectionName: string\n ) {\n const drawOptionsNode = collectionNode.addChild('Draw Options');\n\n drawOptionsNode.addConfig('slider', {\n label: 'Opacity',\n min: 0.1,\n step: 0.1,\n max: 1,\n onChange: (value) => {\n this.sceneManager.setGeometryOpacity(\n this.sceneManager\n .getObjectByName(SceneManager.EVENT_DATA_ID)\n .getObjectByName(collectionName),\n value\n );\n },\n });\n\n drawOptionsNode.addConfig('checkbox', {\n label: 'Wireframe',\n onChange: (value) =>\n this.sceneManager.wireframeObjects(\n this.sceneManager\n .getObjectByName(SceneManager.EVENT_DATA_ID)\n .getObjectByName(collectionName),\n value\n ),\n });\n }\n\n /**\n * Add labels folder to the menu.\n * @param configFunctions Functions to attach to the labels folder configuration.\n */\n public addLabelsFolder(configFunctions: any) {\n if (this.labelsFolder !== null) {\n return;\n }\n\n const {\n onToggle,\n onSizeChange,\n onColorChange,\n onSaveLabels,\n onLoadLabels,\n } = configFunctions;\n\n this.labelsFolder = this.phoenixMenuRoot.addChild(\n SceneManager.LABELS_ID,\n onToggle,\n 'info'\n );\n\n this.labelsFolder.addConfig('slider', {\n label: 'Size',\n min: 0,\n max: 10,\n step: 0.01,\n allowCustomValue: true,\n onChange: onSizeChange,\n });\n\n this.labelsFolder.addConfig('color', {\n label: 'Color',\n color: '#a8a8a8',\n onChange: onColorChange,\n });\n\n this.labelsFolder.addConfig('button', {\n label: 'Save Labels',\n onClick: onSaveLabels,\n });\n\n this.labelsFolder.addConfig('button', {\n label: 'Load Labels',\n onClick: onLoadLabels,\n });\n }\n\n /**\n * Add folder for configuration of label.\n * @param labelId Unique ID of the label.\n * @param onRemoveLabel Function called when label is removed.\n */\n public addLabel(labelId: string, onRemoveLabel?: () => void) {\n let labelNode = this.labelsFolder.children.find(\n (phoenixMenuNode) => phoenixMenuNode.name === labelId\n );\n\n if (labelNode) {\n return;\n }\n\n labelNode = this.labelsFolder.addChild(labelId, (value) => {\n const labelObject = this.sceneManager\n .getObjectByName(SceneManager.LABELS_ID)\n .getObjectByName(labelId);\n this.sceneManager.objectVisibility(labelObject, value);\n });\n\n labelNode.addConfig('color', {\n label: 'Color',\n color: '#a8a8a8',\n onChange: (value) => {\n this.sceneManager.changeObjectColor(\n this.sceneManager.getObjectByName(labelId),\n value\n );\n },\n });\n\n labelNode.addConfig('button', {\n label: 'Remove',\n onClick: () => {\n onRemoveLabel?.();\n this.removeLabel(labelId, labelNode);\n },\n });\n }\n\n /**\n * Remove label from the menu and scene if it exists.\n * @param labelId A unique label ID string.\n * @param labelFolderReference Reference to the label folder.\n */\n public removeLabel(labelId: string, labelNode?: PhoenixMenuNode) {\n if (!labelNode) {\n labelNode = this.labelsFolder?.children.find(\n (singleLabelNode) => singleLabelNode.name === labelId\n );\n }\n\n labelNode?.remove();\n }\n\n /**\n * Get the folder of the event data type.\n * @param typeName Name of the event data type.\n * @returns Folder of the event data type.\n */\n public getEventDataTypeFolder(typeName: string): PhoenixMenuNode {\n return this.eventFolder.children.find(\n (eventDataTypeNode) => eventDataTypeNode.name === typeName\n );\n }\n\n /**\n * Load previous state of the event data folder in Phoenix menu if any.\n */\n public loadEventFolderState() {\n if (this.eventFolderState) {\n this.eventFolder.loadStateFromJSON(this.eventFolderState);\n }\n }\n}\n\n \n\n\n\n\n\n\n\n\n\n\n \n \n results matching \"\"\n \n \n \n No results matching \"\"\n \n\n"},"interfaces/PhoenixUI.html":{"url":"interfaces/PhoenixUI.html","title":"interface - PhoenixUI","body":"\n \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n Interfaces\n \n PhoenixUI\n\n\n\n \n Info\n \n \n Source\n \n\n\n\n \n \n File\n \n \n src/managers/ui-manager/phoenix-ui.ts\n \n\n\n \n Description\n \n \n Common interface for implement Phoenix UI menu.\n\n \n\n\n \n Index\n \n \n \n \n Methods\n \n \n \n \n \n \n \n addCollection\n \n \n \n \n addEventDataFolder\n \n \n \n \n addEventDataTypeFolder\n \n \n \n \n addGeometry\n \n \n \n \n addGeometryFolder\n \n \n \n \n addLabel\n \n \n \n \n addLabelsFolder\n \n \n \n \n clear\n \n \n \n \n getEventDataTypeFolder\n \n \n \n \n removeLabel\n \n \n \n \n \n \n \n \n\n \n \n \n Methods\n \n \n \n \n \n \n \n addCollection\n \n \n \n \n \n \naddCollection(eventDataType: string, collectionName: string, cuts?: Cut[], collectionColor?: Color)\n \n \n\n\n \n \n Defined in src/managers/ui-manager/phoenix-ui.ts:43\n \n \n\n\n \n \n Add collection folder and its configurable options to the event data type (tracks, hits etc.) folder.\n\n\n \n Parameters :\n \n \n \n \n Name\n Type\n Optional\n Description\n \n \n \n \n eventDataType\n \n string\n \n\n \n No\n \n\n\n \n Name of the event data type.\n\n \n \n \n collectionName\n \n string\n \n\n \n No\n \n\n\n \n Name of the collection to be added in the type of event data (tracks, hits etc.).\n\n \n \n \n cuts\n \n Cut[]\n \n\n \n Yes\n \n\n\n \n Cuts to the collection of event data that are to be made configurable to filter event data.\n\n \n \n \n collectionColor\n \n Color\n \n\n \n Yes\n \n\n\n \n Default color of the collection.\n\n \n \n \n \n \n \n \n \n Returns : void\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n addEventDataFolder\n \n \n \n \n \n \naddEventDataFolder()\n \n \n\n\n \n \n Defined in src/managers/ui-manager/phoenix-ui.ts:28\n \n \n\n\n \n \n Add event data folder with functions for event data toggles like show/hide and depthTest.\n\n\n \n Returns : void\n\n \n \n \n \n \n \n \n \n \n \n \n addEventDataTypeFolder\n \n \n \n \n \n \naddEventDataTypeFolder(typeName: string)\n \n \n\n\n \n \n Defined in src/managers/ui-manager/phoenix-ui.ts:34\n \n \n\n\n \n \n Add folder for event data type like tracks or hits to the menu.\n\n\n \n Parameters :\n \n \n \n \n Name\n Type\n Optional\n Description\n \n \n \n \n typeName\n \n string\n \n\n \n No\n \n\n\n \n Name of the type of event data.\n\n \n \n \n \n \n \n \n \n Returns : void\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n addGeometry\n \n \n \n \n \n \naddGeometry(object: Object3D, menuSubfolder?: string)\n \n \n\n\n \n \n Defined in src/managers/ui-manager/phoenix-ui.ts:23\n \n \n\n\n \n \n Add geometry to the menu's geometry folder and set up its configurable options.\n\n\n \n Parameters :\n \n \n \n \n Name\n Type\n Optional\n Description\n \n \n \n \n object\n \n Object3D\n \n\n \n No\n \n\n\n \n Object to add to the UI menu.\n\n \n \n \n menuSubfolder\n \n string\n \n\n \n Yes\n \n\n\n \n Subfolder in the menu to add the geometry to. Example Folder > Subfolder.\n\n \n \n \n \n \n \n \n \n Returns : void\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n addGeometryFolder\n \n \n \n \n \n \naddGeometryFolder()\n \n \n\n\n \n \n Defined in src/managers/ui-manager/phoenix-ui.ts:16\n \n \n\n\n \n \n Add geometry (detector geometry) folder to the menu.\n\n\n \n Returns : void\n\n \n \n \n \n \n \n \n \n \n \n \n addLabel\n \n \n \n \n \n \naddLabel(labelId: string, onRemoveLabel: () => void)\n \n \n\n\n \n \n Defined in src/managers/ui-manager/phoenix-ui.ts:61\n \n \n\n\n \n \n Add folder for configuration of label.\n\n\n \n Parameters :\n \n \n \n \n Name\n Type\n Optional\n Description\n \n \n \n \n labelId\n \n string\n \n\n \n No\n \n\n\n \n Unique ID of the label.\n\n \n \n \n onRemoveLabel\n \n function\n \n\n \n No\n \n\n\n \n Function called when label is removed.\n\n \n \n \n \n \n \n \n \n Returns : void\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n addLabelsFolder\n \n \n \n \n \n \naddLabelsFolder(configFunctions: any)\n \n \n\n\n \n \n Defined in src/managers/ui-manager/phoenix-ui.ts:54\n \n \n\n\n \n \n Add labels folder to the menu.\n\n\n \n Parameters :\n \n \n \n \n Name\n Type\n Optional\n Description\n \n \n \n \n configFunctions\n \n any\n \n\n \n No\n \n\n\n \n Functions to attach to the labels folder configuration.\n\n \n \n \n \n \n \n \n \n Returns : void\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n clear\n \n \n \n \n \n \nclear()\n \n \n\n\n \n \n Defined in src/managers/ui-manager/phoenix-ui.ts:11\n \n \n\n\n \n \n Clear the menu by removing all folders.\n\n\n \n Returns : void\n\n \n \n \n \n \n \n \n \n \n \n \n getEventDataTypeFolder\n \n \n \n \n \n \ngetEventDataTypeFolder(typeName: string)\n \n \n\n\n \n \n Defined in src/managers/ui-manager/phoenix-ui.ts:75\n \n \n\n\n \n \n Get the folder of the event data type.\n\n\n \n Parameters :\n \n \n \n \n Name\n Type\n Optional\n Description\n \n \n \n \n typeName\n \n string\n \n\n \n No\n \n\n\n \n Name of the event data type.\n\n \n \n \n \n \n \n \n \n Returns : T\n\n \n \n Folder of the event data type.\n\n \n \n \n \n \n \n \n \n \n \n \n removeLabel\n \n \n \n \n \n \nremoveLabel(labelId: string, labelFolderReference?: T)\n \n \n\n\n \n \n Defined in src/managers/ui-manager/phoenix-ui.ts:68\n \n \n\n\n \n \n Remove label from the menu and scene if it exists.\n\n\n \n Parameters :\n \n \n \n \n Name\n Type\n Optional\n Description\n \n \n \n \n labelId\n \n string\n \n\n \n No\n \n\n\n \n A unique label ID string.\n\n \n \n \n labelFolderReference\n \n T\n \n\n \n Yes\n \n\n\n \n Reference to the label folder.\n\n \n \n \n \n \n \n \n \n Returns : void\n\n \n \n \n \n \n \n \n \n\n\n \n\n\n \n import { Color, Object3D } from 'three';\nimport { Cut } from '../../lib/models/cut.model';\n\n/**\n * Common interface for implement Phoenix UI menu.\n */\nexport interface PhoenixUI {\n /**\n * Clear the menu by removing all folders.\n */\n clear(): void;\n\n /**\n * Add geometry (detector geometry) folder to the menu.\n */\n addGeometryFolder(): void;\n\n /**\n * Add geometry to the menu's geometry folder and set up its configurable options.\n * @param object Object to add to the UI menu.\n * @param menuSubfolder Subfolder in the menu to add the geometry to. Example `Folder > Subfolder`.\n */\n addGeometry(object: Object3D, menuSubfolder?: string): void;\n\n /**\n * Add event data folder with functions for event data toggles like show/hide and depthTest.\n */\n addEventDataFolder(): void;\n\n /**\n * Add folder for event data type like tracks or hits to the menu.\n * @param typeName Name of the type of event data.\n */\n addEventDataTypeFolder(typeName: string): void;\n\n /**\n * Add collection folder and its configurable options to the event data type (tracks, hits etc.) folder.\n * @param eventDataType Name of the event data type.\n * @param collectionName Name of the collection to be added in the type of event data (tracks, hits etc.).\n * @param cuts Cuts to the collection of event data that are to be made configurable to filter event data.\n * @param collectionColor Default color of the collection.\n */\n addCollection(\n eventDataType: string,\n collectionName: string,\n cuts?: Cut[],\n collectionColor?: Color\n ): void;\n\n /**\n * Add labels folder to the menu.\n * @param configFunctions Functions to attach to the labels folder configuration.\n */\n addLabelsFolder(configFunctions: any): void;\n\n /**\n * Add folder for configuration of label.\n * @param labelId Unique ID of the label.\n * @param onRemoveLabel Function called when label is removed.\n */\n addLabel(labelId: string, onRemoveLabel: () => void): void;\n\n /**\n * Remove label from the menu and scene if it exists.\n * @param labelId A unique label ID string.\n * @param labelFolderReference Reference to the label folder.\n */\n removeLabel(labelId: string, labelFolderReference?: T): void;\n\n /**\n * Get the folder of the event data type.\n * @param typeName Name of the event data type.\n * @returns Folder of the event data type.\n */\n getEventDataTypeFolder(typeName: string): T;\n}\n\n \n\n\n\n\n\n\n\n\n\n \n \n results matching \"\"\n \n \n \n No results matching \"\"\n \n\n"},"classes/PresetView.html":{"url":"classes/PresetView.html","title":"class - PresetView","body":"\n \n\n\n\n\n\n\n\n\n\n\n\n\n\n Classes\n PresetView\n\n\n\n \n Info\n \n \n Source\n \n\n\n\n \n \n File\n \n \n src/lib/models/preset-view.model.ts\n \n\n\n \n Description\n \n \n Preset view for easily transforming/changing camera position to a specified position.\nAlso allows to point the camera to a given target and to define the default clipping for that view\n\n \n\n\n\n\n \n Index\n \n \n \n \n Properties\n \n \n \n \n \n \n Public\n cameraPos\n \n \n Public\n cameraTarget\n \n \n Public\n clipping\n \n \n Public\n clippingOpeningAngle\n \n \n Public\n clippingStartAngle\n \n \n Public\n icon\n \n \n Public\n name\n \n \n \n \n\n \n \n Methods\n \n \n \n \n \n \n getIconURL\n \n \n \n \n\n\n\n\n\n \n \n\n\n \n Constructor\n \n \n \n \nconstructor(name: string, cameraPos: number[], cameraTarget: number[], icon: string, clipping: ClippingSetting, clippingStartAngle: number, clippingOpeningAngle: number)\n \n \n \n \n Defined in src/lib/models/preset-view.model.ts:28\n \n \n\n \n \n Create a preset view.\n\n \n Parameters :\n \n \n \n Name\n Type\n Optional\n Description\n \n \n \n \n name\n \n \n string\n \n \n \n No\n \n \n \n Name of the preset view.\n\n \n \n \n cameraPos\n \n \n number[]\n \n \n \n No\n \n \n \n Position to which the camera is to be set.\n\n \n \n \n cameraTarget\n \n \n number[]\n \n \n \n No\n \n \n \n Target to which the camera is pointing.\n\n \n \n \n icon\n \n \n string\n \n \n \n No\n \n \n \n Icon of the preset view (to describe the view angle).\n\n \n \n \n clipping\n \n \n ClippingSetting\n \n \n \n No\n \n \n \n \n \n \n clippingStartAngle\n \n \n number\n \n \n \n No\n \n \n \n \n \n \n clippingOpeningAngle\n \n \n number\n \n \n \n No\n \n \n \n \n \n \n \n \n \n \n \n \n\n\n \n \n \n Properties\n \n \n \n \n \n \n \n Public\n cameraPos\n \n \n \n \n \n \n Type : number[]\n\n \n \n \n \n Defined in src/lib/models/preset-view.model.ts:18\n \n \n\n \n \n Position to which the camera is to be set.\n\n \n \n\n \n \n \n \n \n \n \n \n Public\n cameraTarget\n \n \n \n \n \n \n Type : number[]\n\n \n \n \n \n Defined in src/lib/models/preset-view.model.ts:20\n \n \n\n \n \n Target to which the camera is pointing.\n\n \n \n\n \n \n \n \n \n \n \n \n Public\n clipping\n \n \n \n \n \n \n Type : ClippingSetting\n\n \n \n \n \n Defined in src/lib/models/preset-view.model.ts:24\n \n \n\n \n \n Whether clipping should be used.\n\n \n \n\n \n \n \n \n \n \n \n \n Public\n clippingOpeningAngle\n \n \n \n \n \n \n Type : number\n\n \n \n \n \n Defined in src/lib/models/preset-view.model.ts:28\n \n \n\n \n \n In case of clipping, value of the opening angle.\n\n \n \n\n \n \n \n \n \n \n \n \n Public\n clippingStartAngle\n \n \n \n \n \n \n Type : number\n\n \n \n \n \n Defined in src/lib/models/preset-view.model.ts:26\n \n \n\n \n \n In case of clipping, value of the start angle.\n\n \n \n\n \n \n \n \n \n \n \n \n Public\n icon\n \n \n \n \n \n \n Type : string\n\n \n \n \n \n Defined in src/lib/models/preset-view.model.ts:16\n \n \n\n \n \n Icon of the preset view (to describe the view angle).\n\n \n \n\n \n \n \n \n \n \n \n \n Public\n name\n \n \n \n \n \n \n Type : string\n\n \n \n \n \n Defined in src/lib/models/preset-view.model.ts:22\n \n \n\n \n \n Name of the preset view.\n\n \n \n\n \n \n\n\n \n \n \n Methods\n \n \n \n \n \n \n \n getIconURL\n \n \n \n \n \n \ngetIconURL()\n \n \n\n\n \n \n Defined in src/lib/models/preset-view.model.ts:59\n \n \n\n\n \n \n Get the URL of the preset view icon.\n\n\n \n \n \n Returns : string\n\n \n \n Icon URL.\n\n \n \n \n \n \n\n\n\n\n\n\n \n\n\n \n export enum ClippingSetting {\n NotForced,\n On,\n Off,\n}\n\n/**\n * Preset view for easily transforming/changing camera position to a specified position.\n * Also allows to point the camera to a given target and to define the default clipping for that view\n */\nexport class PresetView {\n /** Icon of the preset view (to describe the view angle). */\n public icon: string;\n /** Position to which the camera is to be set. */\n public cameraPos: number[];\n /** Target to which the camera is pointing. */\n public cameraTarget: number[];\n /** Name of the preset view. */\n public name: string;\n /** Whether clipping should be used. */\n public clipping: ClippingSetting;\n /** In case of clipping, value of the start angle. */\n public clippingStartAngle: number;\n /** In case of clipping, value of the opening angle. */\n public clippingOpeningAngle: number;\n\n /**\n * Create a preset view.\n * @param name Name of the preset view.\n * @param cameraPos Position to which the camera is to be set.\n * @param cameraTarget Target to which the camera is pointing.\n * @param icon Icon of the preset view (to describe the view angle).\n */\n constructor(\n name: string,\n cameraPos: number[],\n cameraTarget: number[],\n icon: string,\n clipping: ClippingSetting = ClippingSetting.NotForced,\n clippingStartAngle: number = 0,\n clippingOpeningAngle: number = 0\n ) {\n this.name = name;\n this.cameraPos = cameraPos;\n this.cameraTarget = cameraTarget;\n this.icon = icon;\n this.clipping = clipping;\n this.clippingStartAngle = clippingStartAngle;\n this.clippingOpeningAngle = clippingOpeningAngle;\n }\n\n /**\n * Get the URL of the preset view icon.\n * @returns Icon URL.\n */\n getIconURL(): string {\n return 'assets/preset-views/' + this.icon + '.svg#' + this.icon;\n }\n}\n\n \n\n\n\n\n\n\n\n\n\n\n \n \n results matching \"\"\n \n \n \n No results matching \"\"\n \n\n"},"classes/PrettySymbols.html":{"url":"classes/PrettySymbols.html","title":"class - PrettySymbols","body":"\n \n\n\n\n\n\n\n\n\n\n\n\n\n\n Classes\n PrettySymbols\n\n\n\n \n Info\n \n \n Source\n \n\n\n\n \n \n File\n \n \n src/helpers/pretty-symbols.ts\n \n\n\n \n Description\n \n \n Helper for pretty symbols functions.\n\n \n\n\n\n\n \n Index\n \n \n \n \n Properties\n \n \n \n \n \n \n Static\n Readonly\n symbols\n \n \n \n \n\n \n \n Methods\n \n \n \n \n \n \n Static\n getPrettyParams\n \n \n Static\n getPrettySymbol\n \n \n \n \n\n\n\n\n\n \n \n\n\n\n \n \n \n Properties\n \n \n \n \n \n \n \n Static\n Readonly\n symbols\n \n \n \n \n \n \n Type : literal type\n\n \n \n \n \n Default value : {\n θ: ['theta'],\n ϕ: ['phi'],\n pT: ['pt'],\n '𝛘2': ['chi2'],\n η: ['eta'],\n q: ['charge'],\n NDOF: ['ndof'],\n DOF: ['dof'],\n Energy: ['energy'],\n ET: ['et'],\n '|p|': ['momentum', 'mom'],\n }\n \n \n \n \n Defined in src/helpers/pretty-symbols.ts:6\n \n \n\n \n \n Pretty symbols for object params.\n\n \n \n\n \n \n\n\n \n \n \n Methods\n \n \n \n \n \n \n \n Static\n getPrettyParams\n \n \n \n \n \n \n \n getPrettyParams(params: literal type)\n \n \n\n\n \n \n Defined in src/helpers/pretty-symbols.ts:37\n \n \n\n\n \n \n Get pretty printed parameters of an object.\n\n\n \n Parameters :\n \n \n \n \n Name\n Type\n Optional\n Description\n \n \n \n \n params\n \n literal type\n \n\n \n No\n \n\n\n \n Object parameters to be pretty printed.\n\n \n \n \n \n \n \n \n \n Returns : literal type\n\n \n \n New pretty printed parameterss.\n\n \n \n \n \n \n \n \n \n \n \n \n Static\n getPrettySymbol\n \n \n \n \n \n \n \n getPrettySymbol(param: string)\n \n \n\n\n \n \n Defined in src/helpers/pretty-symbols.ts:24\n \n \n\n\n \n \n Get pretty symbol of a parameter.\n\n\n \n Parameters :\n \n \n \n \n Name\n Type\n Optional\n Description\n \n \n \n \n param\n \n string\n \n\n \n No\n \n\n\n \n Parameter of a physics object.\n\n \n \n \n \n \n \n \n \n Returns : any\n\n \n \n \n \n \n \n \n \n\n\n\n\n\n\n \n\n\n \n export class PrettySymbols {\n /** Pretty symbols for object params. */\n public static readonly symbols: { [key: string]: string[] } = {\n θ: ['theta'],\n ϕ: ['phi'],\n pT: ['pt'],\n '𝛘2': ['chi2'],\n η: ['eta'],\n q: ['charge'],\n NDOF: ['ndof'],\n DOF: ['dof'],\n Energy: ['energy'],\n ET: ['et'],\n '|p|': ['momentum', 'mom'],\n };\n\n /**\n * Get pretty symbol of a parameter.\n * @param param Parameter of a physics object.\n */\n public static getPrettySymbol(param: string) {\n const prettySymbol = Object.keys(PrettySymbols.symbols).find((symbol) =>\n PrettySymbols.symbols[symbol].includes(param)\n );\n\n return prettySymbol ? prettySymbol : param;\n }\n\n /**\n * Get pretty printed parameters of an object.\n * @param params Object parameters to be pretty printed.\n * @returns New pretty printed parameterss.\n */\n public static getPrettyParams(params: { [key: string]: any }): {\n [key: string]: any;\n } {\n // Create a copy of the params so we don't overwrite the original object\n const paramsCopy = Object.assign({}, params);\n // Go through all the parameters\n for (const paramKey of Object.keys(paramsCopy)) {\n // Get the pretty printed symbol\n const symbol = PrettySymbols.getPrettySymbol(paramKey);\n // If we do get a symbol\n if (symbol !== paramKey) {\n // Add a parameter with pretty printed symbol\n paramsCopy[symbol] = paramsCopy[paramKey];\n delete paramsCopy[paramKey];\n }\n }\n\n // Delete 'pos' since it's too long and not needed\n delete paramsCopy['pos'];\n\n // Pretty print the dparams if any\n if (paramsCopy?.dparams) {\n const prettyDParams: { [key: string]: any } = {};\n\n prettyDParams['θ'] = paramsCopy.dparams[3];\n prettyDParams['ϕ'] = paramsCopy.dparams[2];\n prettyDParams['|p|'] = Math.abs(1 / paramsCopy.dparams[4]);\n prettyDParams['q'] = Math.sign(1 / paramsCopy.dparams[4]);\n prettyDParams['d0'] = paramsCopy.dparams[0];\n prettyDParams['z0'] = paramsCopy.dparams[1];\n\n delete paramsCopy.dparams;\n\n return { ...paramsCopy, ...prettyDParams };\n }\n\n return paramsCopy;\n }\n}\n\n \n\n\n\n\n\n\n\n\n\n\n \n \n results matching \"\"\n \n \n \n No results matching \"\"\n \n\n"},"classes/RKHelper.html":{"url":"classes/RKHelper.html","title":"class - RKHelper","body":"\n \n\n\n\n\n\n\n\n\n\n\n\n\n\n Classes\n RKHelper\n\n\n\n \n Info\n \n \n Source\n \n\n\n\n \n \n File\n \n \n src/helpers/rk-helper.ts\n \n\n\n \n Description\n \n \n Helper methods for RungeKutta functions.\n\n \n\n\n\n\n \n Index\n \n \n\n \n \n Methods\n \n \n \n \n \n \n Static\n extrapolateTrackPositions\n \n \n Static\n extrapolationLimit\n \n \n Static\n getTracksWithRungeKutta\n \n \n \n \n\n\n\n\n\n \n \n\n\n\n\n \n \n \n Methods\n \n \n \n \n \n \n \n Static\n extrapolateTrackPositions\n \n \n \n \n \n \n \n extrapolateTrackPositions(track: literal type, inbounds: (pos: Vector3) => void)\n \n \n\n\n \n \n Defined in src/helpers/rk-helper.ts:44\n \n \n\n\n \n \n Extrapolate tracks using RungeKutta propagator.\nis out of bounds, when it returns false. Default is RKHelper.extrapolationLimit\n\n\n \n Parameters :\n \n \n \n \n Name\n Type\n Optional\n Default value\n Description\n \n \n \n \n track\n \n literal type\n \n\n \n No\n \n\n \n \n\n \n Track which is to be extrapolated.\n\n \n \n \n inbounds\n \n function\n \n\n \n No\n \n\n \n RKHelper.extrapolationLimit\n \n\n \n Function which returns true until the passed position\nis out of bounds, when it returns false. Default is RKHelper.extrapolationLimit\n\n \n \n \n \n \n \n \n \n Returns : any\n\n \n \n An array of track positions.\n\n \n \n \n \n \n \n \n \n \n \n \n Static\n extrapolationLimit\n \n \n \n \n \n \n \n extrapolationLimit(pos: Vector3)\n \n \n\n\n \n \n Defined in src/helpers/rk-helper.ts:14\n \n \n\n\n \n \n Function used by the extrapolator to check if the extrapolation should continue.\n\n\n \n Parameters :\n \n \n \n \n Name\n Type\n Optional\n Description\n \n \n \n \n pos\n \n Vector3\n \n\n \n No\n \n\n\n \n Location to be tested\n\n \n \n \n \n \n \n \n \n Returns : boolean\n\n \n \n A boolean: true, if the position is in-bounds, false otherwise.\n\n \n \n \n \n \n \n \n \n \n \n \n Static\n getTracksWithRungeKutta\n \n \n \n \n \n \n \n getTracksWithRungeKutta(tracksCollectionsEvent: any)\n \n \n\n\n \n \n Defined in src/helpers/rk-helper.ts:24\n \n \n\n\n \n \n Get extrapolated tracks using RungeKutta.\n\n\n \n Parameters :\n \n \n \n \n Name\n Type\n Optional\n Description\n \n \n \n \n tracksCollectionsEvent\n \n any\n \n\n \n No\n \n\n\n \n Event containing tracks collections.\n\n \n \n \n \n \n \n \n \n Returns : {}\n\n \n \n \n \n \n \n \n \n\n\n\n\n\n\n \n\n\n \n import { RungeKutta } from './runge-kutta';\nimport { Vector3 } from 'three';\nimport { CoordinateHelper } from './coordinate-helper';\n\n/**\n * Helper methods for RungeKutta functions.\n */\nexport class RKHelper {\n /**\n * Function used by the extrapolator to check if the extrapolation should continue.\n * @param pos Location to be tested\n * @returns A boolean: true, if the position is in-bounds, false otherwise.\n */\n public static extrapolationLimit(pos: Vector3) {\n if (pos.z > 3000) return false;\n if (Math.sqrt(pos.x * pos.x + pos.y * pos.y) > 1100) return false;\n return true;\n }\n\n /**\n * Get extrapolated tracks using RungeKutta.\n * @param tracksCollectionsEvent Event containing tracks collections.\n */\n public static getTracksWithRungeKutta(tracksCollectionsEvent: any) {\n const tracksCollections = Object.assign({}, tracksCollectionsEvent);\n const Tracks = {};\n for (const tracksCollection of Object.keys(tracksCollections)) {\n for (const track of tracksCollections[tracksCollection]) {\n track.pos = RKHelper.extrapolateTrackPositions(track);\n }\n }\n\n return Tracks;\n }\n\n /**\n * Extrapolate tracks using RungeKutta propagator.\n * @param track Track which is to be extrapolated.\n * @param inbounds Function which returns true until the passed position\n * is out of bounds, when it returns false. Default is RKHelper.extrapolationLimit\n * @returns An array of track positions.\n\n */\n public static extrapolateTrackPositions(\n track: { dparams: any },\n inbounds: (pos: Vector3) => boolean = RKHelper.extrapolationLimit\n ): any {\n const dparams = track.dparams;\n // ATLAS uses mm, MeV\n const d0 = dparams[0];\n const z0 = dparams[1];\n const phi = dparams[2];\n let theta = dparams[3];\n const qop = dparams[4];\n\n if (theta [\n val.pos.x,\n val.pos.y,\n val.pos.z,\n ]);\n\n return positions.concat(extrapolatedPos);\n }\n}\n\n \n\n\n\n\n\n\n\n\n\n\n \n \n results matching \"\"\n \n \n \n No results matching \"\"\n \n\n"},"classes/RendererManager.html":{"url":"classes/RendererManager.html","title":"class - RendererManager","body":"\n \n\n\n\n\n\n\n\n\n\n\n\n\n\n Classes\n RendererManager\n\n\n\n \n Info\n \n \n Source\n \n\n\n\n \n \n File\n \n \n src/managers/three-manager/renderer-manager.ts\n \n\n\n \n Description\n \n \n Manager for managing event display's renderer related functions.\n\n \n\n\n\n\n \n Index\n \n \n \n \n Properties\n \n \n \n \n \n \n Private\n fixedOverlay\n \n \n Private\n mainRenderer\n \n \n Private\n overlayRenderer\n \n \n Private\n renderers\n \n \n \n \n\n \n \n Methods\n \n \n \n \n \n \n Public\n addRenderer\n \n \n Private\n containsObject\n \n \n Public\n getLocalClipping\n \n \n getMainRenderer\n \n \n getOverlayRenderer\n \n \n getRenderers\n \n \n Public\n init\n \n \n Private\n initRenderer\n \n \n isFixedOverlay\n \n \n Public\n removeControls\n \n \n Public\n render\n \n \n setFixOverlay\n \n \n Public\n setLocalClippingEnabled\n \n \n setMainRenderer\n \n \n Public\n setOverlayRenderer\n \n \n setRenderers\n \n \n Public\n swapRenderers\n \n \n \n \n\n\n\n\n\n \n \n\n\n \n Constructor\n \n \n \n \nconstructor()\n \n \n \n \n Defined in src/managers/three-manager/renderer-manager.ts:14\n \n \n\n \n \n Create the renderer manager by initializing the main renderer.\n\n \n \n \n \n\n\n \n \n \n Properties\n \n \n \n \n \n \n \n Private\n fixedOverlay\n \n \n \n \n \n \n Type : boolean\n\n \n \n \n \n Defined in src/managers/three-manager/renderer-manager.ts:14\n \n \n\n \n \n If the overlay is fixed or not.\n\n \n \n\n \n \n \n \n \n \n \n \n Private\n mainRenderer\n \n \n \n \n \n \n Type : WebGLRenderer\n\n \n \n \n \n Default value : null\n \n \n \n \n Defined in src/managers/three-manager/renderer-manager.ts:8\n \n \n\n \n \n Main renderer to be used by the event display.\n\n \n \n\n \n \n \n \n \n \n \n \n Private\n overlayRenderer\n \n \n \n \n \n \n Type : WebGLRenderer\n\n \n \n \n \n Default value : null\n \n \n \n \n Defined in src/managers/three-manager/renderer-manager.ts:10\n \n \n\n \n \n Overlay renderer for rendering a secondary overlay canvas.\n\n \n \n\n \n \n \n \n \n \n \n \n Private\n renderers\n \n \n \n \n \n \n Type : WebGLRenderer[]\n\n \n \n \n \n Default value : []\n \n \n \n \n Defined in src/managers/three-manager/renderer-manager.ts:12\n \n \n\n \n \n A list of all available/created renderers.\n\n \n \n\n \n \n\n\n \n \n \n Methods\n \n \n \n \n \n \n \n Public\n addRenderer\n \n \n \n \n \n \n \n addRenderer(renderer: WebGLRenderer)\n \n \n\n\n \n \n Defined in src/managers/three-manager/renderer-manager.ts:153\n \n \n\n\n \n \n Add a renderer to the available renderers list.\n\n\n \n Parameters :\n \n \n \n \n Name\n Type\n Optional\n Description\n \n \n \n \n renderer\n \n WebGLRenderer\n \n\n \n No\n \n\n\n \n Three.js WebGLRenderer to be added.\n\n \n \n \n \n \n \n \n \n Returns : void\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n Private\n containsObject\n \n \n \n \n \n \n \n containsObject(obj: WebGLRenderer, list: WebGLRenderer[])\n \n \n\n\n \n \n Defined in src/managers/three-manager/renderer-manager.ts:187\n \n \n\n\n \n \n Check if the list of available renderers contains a renderer.\n\n\n \n Parameters :\n \n \n \n \n Name\n Type\n Optional\n Description\n \n \n \n \n obj\n \n WebGLRenderer\n \n\n \n No\n \n\n\n \n The renderer to be checked for containment.\n\n \n \n \n list\n \n WebGLRenderer[]\n \n\n \n No\n \n\n\n \n List of available renderers.\n\n \n \n \n \n \n \n \n \n Returns : boolean\n\n \n \n If the list contains the renderer or not.\n\n \n \n \n \n \n \n \n \n \n \n \n Public\n getLocalClipping\n \n \n \n \n \n \n \n getLocalClipping()\n \n \n\n\n \n \n Defined in src/managers/three-manager/renderer-manager.ts:210\n \n \n\n\n \n \n Get if the local clipping for the first renderer is enabled or disabled.\n\n\n \n \n \n Returns : any\n\n \n \n If the renderer local clipping is enabled or disabled.\n\n \n \n \n \n \n \n \n \n \n \n \n getMainRenderer\n \n \n \n \n \n \ngetMainRenderer()\n \n \n\n\n \n \n Defined in src/managers/three-manager/renderer-manager.ts:127\n \n \n\n\n \n \n Get the main renderer.\n\n\n \n \n \n Returns : WebGLRenderer\n\n \n \n The main renderer.\n\n \n \n \n \n \n \n \n \n \n \n \n getOverlayRenderer\n \n \n \n \n \n \ngetOverlayRenderer()\n \n \n\n\n \n \n Defined in src/managers/three-manager/renderer-manager.ts:135\n \n \n\n\n \n \n Get the renderer used for overlay.\n\n\n \n \n \n Returns : WebGLRenderer\n\n \n \n The overlay renderer.\n\n \n \n \n \n \n \n \n \n \n \n \n getRenderers\n \n \n \n \n \n \ngetRenderers()\n \n \n\n\n \n \n Defined in src/managers/three-manager/renderer-manager.ts:143\n \n \n\n\n \n \n Get all the available renderers.\n\n\n \n \n \n Returns : WebGLRenderer[]\n\n \n \n A list of three.js WebGLRenderers\n\n \n \n \n \n \n \n \n \n \n \n \n Public\n init\n \n \n \n \n \n \n \n init(elementId: string)\n \n \n\n\n \n \n Defined in src/managers/three-manager/renderer-manager.ts:34\n \n \n\n\n \n \n Initialize the renderer manager by setting up the main renderer.\n\n\n \n Parameters :\n \n \n \n \n Name\n Type\n Optional\n Default value\n Description\n \n \n \n \n elementId\n \n string\n \n\n \n No\n \n\n \n 'eventDisplay'\n \n\n \n ID of the wrapper element.\n\n \n \n \n \n \n \n \n \n Returns : void\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n Private\n initRenderer\n \n \n \n \n \n \n \n initRenderer(elementId: string)\n \n \n\n\n \n \n Defined in src/managers/three-manager/renderer-manager.ts:64\n \n \n\n\n \n \n Set up the renderer with the DOM.\n\n\n \n Parameters :\n \n \n \n \n Name\n Type\n Optional\n Description\n \n \n \n \n elementId\n \n string\n \n\n \n No\n \n\n\n \n ID of the wrapper element.\n\n \n \n \n \n \n \n \n \n Returns : void\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n isFixedOverlay\n \n \n \n \n \n \nisFixedOverlay()\n \n \n\n\n \n \n Defined in src/managers/three-manager/renderer-manager.ts:220\n \n \n\n\n \n \n Check if the overlay is fixed or not.\n\n\n \n \n \n Returns : boolean\n\n \n \n If the overlay is fixed or not.\n\n \n \n \n \n \n \n \n \n \n \n \n Public\n removeControls\n \n \n \n \n \n \n \n removeControls(renderer: WebGLRenderer)\n \n \n\n\n \n \n Defined in src/managers/three-manager/renderer-manager.ts:163\n \n \n\n\n \n \n Remove a renderer from the available renderers list.\n\n\n \n Parameters :\n \n \n \n \n Name\n Type\n Optional\n Description\n \n \n \n \n renderer\n \n WebGLRenderer\n \n\n \n No\n \n\n\n \n Three,js WebGLRenderer to be removed.\n\n \n \n \n \n \n \n \n \n Returns : void\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n Public\n render\n \n \n \n \n \n \n \n render(scene: Scene, camera: Camera)\n \n \n\n\n \n \n Defined in src/managers/three-manager/renderer-manager.ts:46\n \n \n\n\n \n \n Render the overlay.\n\n\n \n Parameters :\n \n \n \n \n Name\n Type\n Optional\n Description\n \n \n \n \n scene\n \n Scene\n \n\n \n No\n \n\n\n \n The event display scene to render.\n\n \n \n \n camera\n \n Camera\n \n\n \n No\n \n\n\n \n Camera for render.\n\n \n \n \n \n \n \n \n \n Returns : void\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n setFixOverlay\n \n \n \n \n \n \nsetFixOverlay(value: boolean)\n \n \n\n\n \n \n Defined in src/managers/three-manager/renderer-manager.ts:228\n \n \n\n\n \n \n Set if the overlay is to be fixed or not.\n\n\n \n Parameters :\n \n \n \n \n Name\n Type\n Optional\n Description\n \n \n \n \n value\n \n boolean\n \n\n \n No\n \n\n\n \n If the overlay is to be fixed or not.\n\n \n \n \n \n \n \n \n \n Returns : void\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n Public\n setLocalClippingEnabled\n \n \n \n \n \n \n \n setLocalClippingEnabled(value: boolean)\n \n \n\n\n \n \n Defined in src/managers/three-manager/renderer-manager.ts:200\n \n \n\n\n \n \n Set if local clipping is to be enabled or disabled for all the available renderers.\n\n\n \n Parameters :\n \n \n \n \n Name\n Type\n Optional\n Description\n \n \n \n \n value\n \n boolean\n \n\n \n No\n \n\n\n \n If the local clipping is to be enabled or disabled.\n\n \n \n \n \n \n \n \n \n Returns : void\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n setMainRenderer\n \n \n \n \n \n \nsetMainRenderer(renderer: WebGLRenderer)\n \n \n\n\n \n \n Defined in src/managers/three-manager/renderer-manager.ts:97\n \n \n\n\n \n \n Set the main renderer.\n\n\n \n Parameters :\n \n \n \n \n Name\n Type\n Optional\n Description\n \n \n \n \n renderer\n \n WebGLRenderer\n \n\n \n No\n \n\n\n \n Three.js WebGLRenderer.\n\n \n \n \n \n \n \n \n \n Returns : void\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n Public\n setOverlayRenderer\n \n \n \n \n \n \n \n setOverlayRenderer(overlayCanvas: HTMLCanvasElement)\n \n \n\n\n \n \n Defined in src/managers/three-manager/renderer-manager.ts:105\n \n \n\n\n \n \n Set the renderer for overlay event display view.\n\n\n \n Parameters :\n \n \n \n \n Name\n Type\n Optional\n Description\n \n \n \n \n overlayCanvas\n \n HTMLCanvasElement\n \n\n \n No\n \n\n\n \n Canvas on which the overlay is to be rendered.\n\n \n \n \n \n \n \n \n \n Returns : void\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n setRenderers\n \n \n \n \n \n \nsetRenderers(renderers: WebGLRenderer[])\n \n \n\n\n \n \n Defined in src/managers/three-manager/renderer-manager.ts:119\n \n \n\n\n \n \n Set the available renderers.\n\n\n \n Parameters :\n \n \n \n \n Name\n Type\n Optional\n Description\n \n \n \n \n renderers\n \n WebGLRenderer[]\n \n\n \n No\n \n\n\n \n List of three.js WebGLRenderers.\n\n \n \n \n \n \n \n \n \n Returns : void\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n Public\n swapRenderers\n \n \n \n \n \n \n \n swapRenderers(rendererA: WebGLRenderer, rendererB: WebGLRenderer)\n \n \n\n\n \n \n Defined in src/managers/three-manager/renderer-manager.ts:175\n \n \n\n\n \n \n Swap any two renderers.\n\n\n \n Parameters :\n \n \n \n \n Name\n Type\n Optional\n Description\n \n \n \n \n rendererA\n \n WebGLRenderer\n \n\n \n No\n \n\n\n \n Renderer A to be swapped with renderer B.\n\n \n \n \n rendererB\n \n WebGLRenderer\n \n\n \n No\n \n\n\n \n Renderer B to be swapped with renderer A.\n\n \n \n \n \n \n \n \n \n Returns : void\n\n \n \n \n \n \n \n \n \n\n\n\n\n\n\n \n\n\n \n import { WebGLRenderer, Scene, Camera } from 'three';\n\n/**\n * Manager for managing event display's renderer related functions.\n */\nexport class RendererManager {\n /** Main renderer to be used by the event display. */\n private mainRenderer: WebGLRenderer = null;\n /** Overlay renderer for rendering a secondary overlay canvas. */\n private overlayRenderer: WebGLRenderer = null;\n /** A list of all available/created renderers. */\n private renderers: WebGLRenderer[] = [];\n /** If the overlay is fixed or not. */\n private fixedOverlay: boolean;\n\n /**\n * Create the renderer manager by initializing the main renderer.\n */\n constructor() {\n const renderer: WebGLRenderer = new WebGLRenderer({\n antialias: true,\n alpha: true,\n powerPreference: 'high-performance',\n });\n\n this.addRenderer(renderer);\n this.setMainRenderer(renderer);\n }\n\n /**\n * Initialize the renderer manager by setting up the main renderer.\n * @param elementId ID of the wrapper element.\n */\n public init(elementId: string = 'eventDisplay') {\n // Reset the animation loop\n this.getMainRenderer().setAnimationLoop(null);\n // Main renderer for current browsers\n this.initRenderer(elementId);\n }\n\n /**\n * Render the overlay.\n * @param scene The event display scene to render.\n * @param camera Camera for render.\n */\n public render(scene: Scene, camera: Camera) {\n if (this.getOverlayRenderer()) {\n if (!this.getOverlayRenderer().domElement.hidden) {\n const sceneColor = scene.background;\n scene.background = null;\n\n if (!this.isFixedOverlay()) {\n this.getOverlayRenderer().render(scene, camera);\n }\n scene.background = sceneColor;\n }\n }\n }\n\n /**\n * Set up the renderer with the DOM.\n * @param elementId ID of the wrapper element.\n */\n private initRenderer(elementId: string) {\n let canvasWrapper = document.getElementById(elementId);\n if (!canvasWrapper) {\n canvasWrapper = document.body;\n }\n\n const rendererWidth = () =>\n canvasWrapper.offsetWidth > 0\n ? canvasWrapper.offsetWidth\n : window.innerWidth;\n const rendererHeight = () =>\n canvasWrapper.offsetHeight > 0\n ? canvasWrapper.offsetHeight\n : window.innerHeight;\n\n const mainRenderer = this.getMainRenderer();\n mainRenderer.setSize(rendererWidth(), rendererHeight(), false);\n mainRenderer.setPixelRatio(window.devicePixelRatio);\n mainRenderer.domElement.id = 'three-canvas';\n\n canvasWrapper.appendChild(this.getMainRenderer().domElement);\n\n window.addEventListener('resize', () => {\n mainRenderer.setSize(rendererWidth(), rendererHeight());\n });\n }\n\n // SET/GET\n\n /**\n * Set the main renderer.\n * @param renderer Three.js WebGLRenderer.\n */\n setMainRenderer(renderer: WebGLRenderer) {\n this.mainRenderer = renderer;\n }\n\n /**\n * Set the renderer for overlay event display view.\n * @param overlayCanvas Canvas on which the overlay is to be rendered.\n */\n public setOverlayRenderer(overlayCanvas: HTMLCanvasElement): void {\n const overlayRenderer: WebGLRenderer = new WebGLRenderer({\n canvas: overlayCanvas,\n antialias: false,\n alpha: true,\n });\n this.addRenderer(overlayRenderer);\n this.overlayRenderer = overlayRenderer;\n }\n\n /**\n * Set the available renderers.\n * @param renderers List of three.js WebGLRenderers.\n */\n setRenderers(renderers: WebGLRenderer[]) {\n this.renderers = renderers;\n }\n\n /**\n * Get the main renderer.\n * @returns The main renderer.\n */\n getMainRenderer(): WebGLRenderer {\n return this.mainRenderer;\n }\n\n /**\n * Get the renderer used for overlay.\n * @returns The overlay renderer.\n */\n getOverlayRenderer(): WebGLRenderer {\n return this.overlayRenderer;\n }\n\n /**\n * Get all the available renderers.\n * @returns A list of three.js WebGLRenderers\n */\n getRenderers(): WebGLRenderer[] {\n return this.renderers;\n }\n\n // FUNCTIONS\n\n /**\n * Add a renderer to the available renderers list.\n * @param renderer Three.js WebGLRenderer to be added.\n */\n public addRenderer(renderer: WebGLRenderer) {\n if (!this.containsObject(renderer, this.renderers)) {\n this.renderers.push(renderer);\n }\n }\n\n /**\n * Remove a renderer from the available renderers list.\n * @param renderer Three,js WebGLRenderer to be removed.\n */\n public removeControls(renderer: WebGLRenderer) {\n const index: number = this.renderers.indexOf(renderer);\n if (index > -1) {\n this.renderers.splice(index, 1);\n }\n }\n\n /**\n * Swap any two renderers.\n * @param rendererA Renderer A to be swapped with renderer B.\n * @param rendererB Renderer B to be swapped with renderer A.\n */\n public swapRenderers(rendererA: WebGLRenderer, rendererB: WebGLRenderer) {\n const temp: WebGLRenderer = rendererA;\n rendererA = rendererB;\n rendererB = temp;\n }\n\n /**\n * Check if the list of available renderers contains a renderer.\n * @param obj The renderer to be checked for containment.\n * @param list List of available renderers.\n * @returns If the list contains the renderer or not.\n */\n private containsObject(obj: WebGLRenderer, list: WebGLRenderer[]): boolean {\n for (const object of list) {\n if (object === obj) {\n return true;\n }\n }\n return false;\n }\n\n /**\n * Set if local clipping is to be enabled or disabled for all the available renderers.\n * @param value If the local clipping is to be enabled or disabled.\n */\n public setLocalClippingEnabled(value: boolean) {\n for (const renderer of this.renderers) {\n renderer.localClippingEnabled = value;\n }\n }\n\n /**\n * Get if the local clipping for the first renderer is enabled or disabled.\n * @returns If the renderer local clipping is enabled or disabled.\n */\n public getLocalClipping() {\n if (this.renderers.length > 0) {\n return this.renderers[0].localClippingEnabled;\n }\n }\n\n /**\n * Check if the overlay is fixed or not.\n * @returns If the overlay is fixed or not.\n */\n isFixedOverlay(): boolean {\n return this.fixedOverlay;\n }\n\n /**\n * Set if the overlay is to be fixed or not.\n * @param value If the overlay is to be fixed or not.\n */\n setFixOverlay(value: boolean) {\n this.fixedOverlay = value;\n }\n}\n\n \n\n\n\n\n\n\n\n\n\n\n \n \n results matching \"\"\n \n \n \n No results matching \"\"\n \n\n"},"classes/RungeKutta.html":{"url":"classes/RungeKutta.html","title":"class - RungeKutta","body":"\n \n\n\n\n\n\n\n\n\n\n\n\n\n\n Classes\n RungeKutta\n\n\n\n \n Info\n \n \n Source\n \n\n\n\n \n \n File\n \n \n src/helpers/runge-kutta.ts\n \n\n\n \n Description\n \n \n Class for performing Runge-Kutta operations.\n\n \n\n\n\n\n \n Index\n \n \n\n \n \n Methods\n \n \n \n \n \n \n Static\n propagate\n \n \n Static\n step\n \n \n \n \n\n\n\n\n\n \n \n\n\n\n\n \n \n \n Methods\n \n \n \n \n \n \n \n Static\n propagate\n \n \n \n \n \n \n \n propagate(startPos: Vector3, startDir: Vector3, p: number, q: number, mss: number, plength: number, inbounds: (pos: Vector3) => void)\n \n \n\n\n \n \n Defined in src/helpers/runge-kutta.ts:126\n \n \n\n\n \n \n Propagate using the given properties by performing the Runge-Kutta steps.\nis out of bounds, when it returns false.\nthrough the Runge-Kutta steps.\n\n\n \n Parameters :\n \n \n \n \n Name\n Type\n Optional\n Default value\n Description\n \n \n \n \n startPos\n \n Vector3\n \n\n \n No\n \n\n \n \n\n \n Starting position in 3D space.\n\n \n \n \n startDir\n \n Vector3\n \n\n \n No\n \n\n \n \n\n \n Starting direction in 3D space.\n\n \n \n \n p\n \n number\n \n\n \n No\n \n\n \n \n\n \n Momentum.\n\n \n \n \n q\n \n number\n \n\n \n No\n \n\n \n \n\n \n Charge.\n\n \n \n \n mss\n \n number\n \n\n \n No\n \n\n \n -1\n \n\n \n Max step size.\n\n \n \n \n plength\n \n number\n \n\n \n No\n \n\n \n 1000\n \n\n \n Path length.\n\n \n \n \n inbounds\n \n function\n \n\n \n No\n \n\n \n () => true\n \n\n \n Function which returns true until the passed position\nis out of bounds, when it returns false.\n\n \n \n \n \n \n \n \n \n Returns : literal type[]\n\n \n \n An array containing position and direction at that position calculated\nthrough the Runge-Kutta steps.\n\n \n \n \n \n \n \n \n \n \n \n \n Static\n step\n \n \n \n \n \n \n \n step(state: State)\n \n \n\n\n \n \n Defined in src/helpers/runge-kutta.ts:12\n \n \n\n\n \n \n Perform a Runge-Kutta step for the given state.\n\n\n \n Parameters :\n \n \n \n \n Name\n Type\n Optional\n Description\n \n \n \n \n state\n \n State\n \n\n \n No\n \n\n\n \n State at which the step is to be performed.\n\n \n \n \n \n \n \n \n \n Returns : number\n\n \n \n The computed step size.\n\n \n \n \n \n \n\n\n\n\n\n\n \n\n\n \n import { Vector3 } from 'three';\n\n/**\n * Class for performing Runge-Kutta operations.\n */\nexport class RungeKutta {\n /**\n * Perform a Runge-Kutta step for the given state.\n * @param state State at which the step is to be performed.\n * @returns The computed step size.\n */\n static step(state: State): number {\n // Charge (q) to momentum (p) ratio in SI units\n const qop: number = state.q / (state.unitC * state.p);\n\n // Runge-Kutta integrator state\n let h2: number,\n half_h: number,\n B_middle: Vector3,\n B_last: Vector3,\n k2: Vector3,\n k3: Vector3,\n k4: Vector3;\n\n // First Runge-Kutta point (at current position)\n const B_first: Vector3 = Field.get(state.pos);\n // state.dir.cross(B_first) * qop\n const k1: Vector3 = state.dir.clone().cross(B_first).multiplyScalar(qop);\n\n // Try Runge-Kutta step with h as the step size\n const tryRungeKuttaStep = (h: number) => {\n h2 = h * h;\n half_h = h / 2;\n\n // Second Runge-Kutta point\n // state.pos + state.dir * half_h + k1 * (h2 / 8)\n const pos1: Vector3 = state.pos\n .clone()\n .add(state.dir.clone().multiplyScalar(half_h))\n .add(k1.clone().multiplyScalar(h2 / 8));\n B_middle = Field.get(pos1);\n // (state.dir + k1 * half_h).cross(B_middle) * qop\n k2 = state.dir\n .clone()\n .add(k1.clone().multiplyScalar(half_h))\n .cross(B_middle)\n .multiplyScalar(qop);\n\n // Third Runge-Kutta point\n // (state.dir + k2 * half_h).cross(B_middle) * qop\n k3 = state.dir\n .clone()\n .add(k2.clone().multiplyScalar(half_h))\n .cross(B_middle)\n .multiplyScalar(qop);\n\n // Last Runge-Kutta point\n // state.pos + state.dir * h + k3 * (h2 / 2)\n const pos2: Vector3 = state.pos\n .clone()\n .add(state.dir.clone().multiplyScalar(h))\n .add(k3.clone().multiplyScalar(h2 / 2));\n B_last = Field.get(pos2);\n // (state.dir + k3 * h).cross(B_last) * qop\n k4 = state.dir\n .clone()\n .add(k3.clone().multiplyScalar(h))\n .cross(B_last)\n .multiplyScalar(qop);\n\n // (k1 - k2 - k3 + k4)\n const returnVec = k1.clone().sub(k2).sub(k3).add(k4);\n // h * (k1 - k2 - k3 + k4).lpNorm()\n return (\n h *\n (Math.abs(returnVec.x) + Math.abs(returnVec.y) + Math.abs(returnVec.z))\n );\n };\n\n // Checking the error estimate\n let error_estimate: number = tryRungeKuttaStep(state.stepSize);\n while (error_estimate > 0.0002) {\n state.stepSize *= 0.5;\n error_estimate = tryRungeKuttaStep(state.stepSize);\n }\n\n const fh: number = state.stepSize;\n const fh2: number = Math.pow(fh, 2);\n\n // Update position and momentum\n // state.pos += state.dir * fh + (k1 + k2 + k3) * (fh2 /6)\n state.pos.add(state.dir.clone().multiplyScalar(fh)).add(\n k1\n .clone()\n .add(k2)\n .add(k3)\n .multiplyScalar(fh2 / 6)\n );\n // state.dir += (k1 + k2 * 2 + k3 * 2 + k4) * (fh / 6)\n state.dir.add(\n k1\n .clone()\n .add(k2.clone().multiplyScalar(2))\n .add(k3.clone().multiplyScalar(2))\n .add(k4)\n .multiplyScalar(fh / 6)\n );\n state.dir.normalize();\n\n return state.stepSize;\n }\n\n /**\n * Propagate using the given properties by performing the Runge-Kutta steps.\n * @param startPos Starting position in 3D space.\n * @param startDir Starting direction in 3D space.\n * @param p Momentum.\n * @param q Charge.\n * @param mss Max step size.\n * @param plength Path length.\n * @param inbounds Function which returns true until the passed position\n * is out of bounds, when it returns false.\n * @returns An array containing position and direction at that position calculated\n * through the Runge-Kutta steps.\n */\n static propagate(\n startPos: Vector3,\n startDir: Vector3,\n p: number,\n q: number,\n mss: number = -1,\n plength: number = 1000,\n inbounds: (pos: Vector3) => boolean = () => true\n ): { pos: Vector3; dir: Vector3 }[] {\n const rkState: State = new State();\n rkState.pos = startPos;\n rkState.dir = startDir;\n rkState.p = p;\n rkState.q = q;\n rkState.maxStepSize = mss;\n\n const result: { pos: Vector3; dir: Vector3 }[] = [];\n\n while (rkState.pathLength \n \n\n\n\n\n\n\n\n\n\n\n \n \n results matching \"\"\n \n \n \n No results matching \"\"\n \n\n"},"classes/ScriptLoader.html":{"url":"classes/ScriptLoader.html","title":"class - ScriptLoader","body":"\n \n\n\n\n\n\n\n\n\n\n\n\n\n\n Classes\n ScriptLoader\n\n\n\n \n Info\n \n \n Source\n \n\n\n\n \n \n File\n \n \n src/loaders/script-loader.ts\n \n\n\n \n Description\n \n \n Script loader for dynamically loading external scripts.\n\n \n\n\n\n\n \n Index\n \n \n\n \n \n Methods\n \n \n \n \n \n \n Static\n loadScript\n \n \n \n \n\n\n\n\n\n \n \n\n\n\n\n \n \n \n Methods\n \n \n \n \n \n \n \n Static\n loadScript\n \n \n \n \n \n \n \n loadScript(scriptURL: string, scriptFor?: string, parentElement: HTMLElement)\n \n \n\n\n \n \n Defined in src/loaders/script-loader.ts:15\n \n \n\n\n \n \n Load a script dynamically from a URL.\nDefaults to tag.\n\n\n \n Parameters :\n \n \n \n \n Name\n Type\n Optional\n Default value\n Description\n \n \n \n \n scriptURL\n \n string\n \n\n \n No\n \n\n \n \n\n \n URL of the script to be loaded.\n\n \n \n \n scriptFor\n \n string\n \n\n \n Yes\n \n\n \n \n\n \n Optional data attribute to identify what the script is for. [data-scriptFor]\n\n \n \n \n parentElement\n \n HTMLElement\n \n\n \n No\n \n\n \n document.getElementsByTagName('head')[0]\n \n\n \n Parent element to which the script is to be appended.\nDefaults to tag.\n\n \n \n \n \n \n \n \n \n Returns : Promise\n\n \n \n Promise for the script load.\n\n \n \n \n \n \n\n\n\n\n\n\n \n\n\n \n import { LoadingManager } from '../managers/loading-manager';\n\n/**\n * Script loader for dynamically loading external scripts.\n */\nexport class ScriptLoader {\n /**\n * Load a script dynamically from a URL.\n * @param scriptURL URL of the script to be loaded.\n * @param scriptFor Optional data attribute to identify what the script is for. `[data-scriptFor]`\n * @param parentElement Parent element to which the script is to be appended.\n * Defaults to `` tag.\n * @returns Promise for the script load.\n */\n public static loadScript(\n scriptURL: string,\n scriptFor?: string,\n parentElement: HTMLElement = document.getElementsByTagName('head')[0]\n ): Promise {\n const loadingManager = new LoadingManager();\n loadingManager.addLoadableItem('single_script');\n\n return new Promise((resolve, reject) => {\n const scriptExists = document.querySelectorAll(\n 'script[src=\"' + scriptURL + '\"]'\n );\n\n // If no script exists - add one\n if (scriptExists.length === 0) {\n const scriptElement = document.createElement('script');\n scriptElement.type = 'text/javascript';\n scriptElement.src = scriptURL;\n if (scriptFor) {\n scriptElement.setAttribute('data-scriptfor', scriptFor);\n }\n\n scriptElement.addEventListener('load', () => {\n scriptElement.setAttribute('data-loaded', 'true');\n resolve();\n loadingManager.itemLoaded('single_script');\n });\n scriptElement.onerror = (event) => {\n console.error('ERROR LOADING SCRIPT: ', event);\n reject();\n loadingManager.itemLoaded('single_script');\n };\n\n parentElement.appendChild(scriptElement);\n } else {\n // If script has already loaded then resolve else wait for it to load\n if (scriptExists[0].dataset.loaded === 'true') {\n resolve();\n loadingManager.itemLoaded('single_script');\n } else {\n scriptExists[0].addEventListener('load', () => {\n resolve();\n loadingManager.itemLoaded('single_script');\n });\n }\n }\n });\n }\n}\n\n \n\n\n\n\n\n\n\n\n\n\n \n \n results matching \"\"\n \n \n \n No results matching \"\"\n \n\n"},"classes/SelectionManager.html":{"url":"classes/SelectionManager.html","title":"class - SelectionManager","body":"\n \n\n\n\n\n\n\n\n\n\n\n\n\n\n Classes\n SelectionManager\n\n\n\n \n Info\n \n \n Source\n \n\n\n\n \n \n File\n \n \n src/managers/three-manager/selection-manager.ts\n \n\n\n \n Description\n \n \n Manager for managing event display's selection related functions.\n\n \n\n\n\n\n \n Index\n \n \n \n \n Properties\n \n \n \n \n \n \n Private\n activeObject\n \n \n Private\n camera\n \n \n Private\n effectsManager\n \n \n Private\n ignoreList\n \n \n Private\n infoLogger\n \n \n Private\n isInit\n \n \n Private\n onDocumentMouseDown\n \n \n Private\n onTouchDown\n \n \n Private\n onTouchMove\n \n \n Private\n outlinePass\n \n \n Private\n preSelectionAntialias\n \n \n Private\n scene\n \n \n Private\n selectedObject\n \n \n \n \n\n \n \n Methods\n \n \n \n \n \n \n Private\n disableSelecting\n \n \n Private\n enableSelecting\n \n \n Public\n getActiveObjectId\n \n \n Public\n highlightObject\n \n \n Public\n init\n \n \n Private\n intersectObject\n \n \n Public\n setSelectedObject\n \n \n Public\n setSelecting\n \n \n \n \n\n\n\n\n\n \n \n\n\n \n Constructor\n \n \n \n \nconstructor()\n \n \n \n \n Defined in src/managers/three-manager/selection-manager.ts:43\n \n \n\n \n \n Constructor for the selection manager.\n\n \n \n \n \n\n\n \n \n \n Properties\n \n \n \n \n \n \n \n Private\n activeObject\n \n \n \n \n \n \n Default value : new ActiveVariable('')\n \n \n \n \n Defined in src/managers/three-manager/selection-manager.ts:30\n \n \n\n \n \n The currently selected object which is observable for changes.\n\n \n \n\n \n \n \n \n \n \n \n \n Private\n camera\n \n \n \n \n \n \n Type : Camera\n\n \n \n \n \n Defined in src/managers/three-manager/selection-manager.ts:24\n \n \n\n \n \n The camera inside the scene.\n\n \n \n\n \n \n \n \n \n \n \n \n Private\n effectsManager\n \n \n \n \n \n \n Type : EffectsManager\n\n \n \n \n \n Defined in src/managers/three-manager/selection-manager.ts:38\n \n \n\n \n \n Manager for managing three.js event display effects like outline pass and unreal bloom.\n\n \n \n\n \n \n \n \n \n \n \n \n Private\n ignoreList\n \n \n \n \n \n \n Type : string[]\n\n \n \n \n \n Defined in src/managers/three-manager/selection-manager.ts:32\n \n \n\n \n \n Objects to be ignored on hovering over the scene.\n\n \n \n\n \n \n \n \n \n \n \n \n Private\n infoLogger\n \n \n \n \n \n \n Type : InfoLogger\n\n \n \n \n \n Defined in src/managers/three-manager/selection-manager.ts:41\n \n \n\n \n \n Service for logging data to the information panel.\n\n \n \n\n \n \n \n \n \n \n \n \n Private\n isInit\n \n \n \n \n \n \n Type : boolean\n\n \n \n \n \n Defined in src/managers/three-manager/selection-manager.ts:22\n \n \n\n \n \n Is initialized.\n\n \n \n\n \n \n \n \n \n \n \n \n Private\n onDocumentMouseDown\n \n \n \n \n \n \n Default value : () => {...}\n \n \n \n \n Defined in src/managers/three-manager/selection-manager.ts:158\n \n \n\n \n \n Function to call on mouse click when object selection is enabled.\n\n \n \n\n \n \n \n \n \n \n \n \n Private\n onTouchDown\n \n \n \n \n \n \n Default value : () => {...}\n \n \n \n \n Defined in src/managers/three-manager/selection-manager.ts:207\n \n \n\n \n \n Function to call on touch when object selection is enabled.\n\n \n \n\n \n \n \n Parameters :\n \n \n \n Name\n Description\n \n \n \n \n event\n \n Event containing touch data.\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n Private\n onTouchMove\n \n \n \n \n \n \n Default value : () => {...}\n \n \n \n \n Defined in src/managers/three-manager/selection-manager.ts:145\n \n \n\n \n \n Function to call on mouse move when object selection is enabled.\n\n \n \n\n \n \n \n \n \n \n \n \n Private\n outlinePass\n \n \n \n \n \n \n Type : OutlinePass\n\n \n \n \n \n Defined in src/managers/three-manager/selection-manager.ts:36\n \n \n\n \n \n Outline pass for highlighting the hovered over event display elements.\n\n \n \n\n \n \n \n \n \n \n \n \n Private\n preSelectionAntialias\n \n \n \n \n \n \n Type : boolean\n\n \n \n \n \n Defined in src/managers/three-manager/selection-manager.ts:43\n \n \n\n \n \n Performance mode value before enabling selection.\n\n \n \n\n \n \n \n \n \n \n \n \n Private\n scene\n \n \n \n \n \n \n Type : Scene\n\n \n \n \n \n Defined in src/managers/three-manager/selection-manager.ts:26\n \n \n\n \n \n The scene used for event display.\n\n \n \n\n \n \n \n \n \n \n \n \n Private\n selectedObject\n \n \n \n \n \n \n Type : literal type\n\n \n \n \n \n Defined in src/managers/three-manager/selection-manager.ts:28\n \n \n\n \n \n Object used to display the information of the selected 3D object.\n\n \n \n\n \n \n\n\n \n \n \n Methods\n \n \n \n \n \n \n \n Private\n disableSelecting\n \n \n \n \n \n \n \n disableSelecting()\n \n \n\n\n \n \n Defined in src/managers/three-manager/selection-manager.ts:128\n \n \n\n\n \n \n Disable selecting of event display elements and remove mouse move and click events.\n\n\n \n Returns : void\n\n \n \n \n \n \n \n \n \n \n \n \n Private\n enableSelecting\n \n \n \n \n \n \n \n enableSelecting()\n \n \n\n\n \n \n Defined in src/managers/three-manager/selection-manager.ts:111\n \n \n\n\n \n \n Enable selecting of event display elements and set mouse move and click events.\n\n\n \n Returns : void\n\n \n \n \n \n \n \n \n \n \n \n \n Public\n getActiveObjectId\n \n \n \n \n \n \n \n getActiveObjectId()\n \n \n\n\n \n \n Defined in src/managers/three-manager/selection-manager.ts:94\n \n \n\n\n \n \n Get the uuid of the currently selected object.\n\n\n \n \n \n Returns : ActiveVariable\n\n \n \n uuid of the currently selected object.\n\n \n \n \n \n \n \n \n \n \n \n \n Public\n highlightObject\n \n \n \n \n \n \n \n highlightObject(uuid: string, objectsGroup: Object3D)\n \n \n\n\n \n \n Defined in src/managers/three-manager/selection-manager.ts:241\n \n \n\n\n \n \n Highlight the object with the given uuid by giving it an outline.\nwith the given uuid.\n\n\n \n Parameters :\n \n \n \n \n Name\n Type\n Optional\n Description\n \n \n \n \n uuid\n \n string\n \n\n \n No\n \n\n\n \n uuid of the object.\n\n \n \n \n objectsGroup\n \n Object3D\n \n\n \n No\n \n\n\n \n Group of objects to be traversed for finding the object\nwith the given uuid.\n\n \n \n \n \n \n \n \n \n Returns : void\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n Public\n init\n \n \n \n \n \n \n \n init(camera: Camera, scene: Scene, effectsManager: EffectsManager, infoLogger: InfoLogger)\n \n \n\n\n \n \n Defined in src/managers/three-manager/selection-manager.ts:65\n \n \n\n\n \n \n Initialize the selection manager.\nlike outline pass and unreal bloom.\n\n\n \n Parameters :\n \n \n \n \n Name\n Type\n Optional\n Description\n \n \n \n \n camera\n \n Camera\n \n\n \n No\n \n\n\n \n The camera inside the scene.\n\n \n \n \n scene\n \n Scene\n \n\n \n No\n \n\n\n \n The scene used for event display.\n\n \n \n \n effectsManager\n \n EffectsManager\n \n\n \n No\n \n\n\n \n Manager for managing three.js event display effects\nlike outline pass and unreal bloom.\n\n \n \n \n infoLogger\n \n InfoLogger\n \n\n \n No\n \n\n\n \n Service for logging data to the information panel.\n\n \n \n \n \n \n \n \n \n Returns : void\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n Private\n intersectObject\n \n \n \n \n \n \n \n intersectObject(event: any)\n \n \n\n\n \n \n Defined in src/managers/three-manager/selection-manager.ts:218\n \n \n\n\n \n \n Check if any object intersects on mouse move.\n\n\n \n Parameters :\n \n \n \n \n Name\n Type\n Optional\n Description\n \n \n \n \n event\n \n any\n \n\n \n No\n \n\n\n \n Event containing data of the mouse move.\n\n \n \n \n \n \n \n \n \n Returns : Object3D\n\n \n \n Intersected or hovered over object.\n\n \n \n \n \n \n \n \n \n \n \n \n Public\n setSelectedObject\n \n \n \n \n \n \n \n setSelectedObject(selectedObject: literal type)\n \n \n\n\n \n \n Defined in src/managers/three-manager/selection-manager.ts:83\n \n \n\n\n \n \n Set the currently selected object.\n\n\n \n Parameters :\n \n \n \n \n Name\n Type\n Optional\n Description\n \n \n \n \n selectedObject\n \n literal type\n \n\n \n No\n \n\n\n \n The currently selected object.\n\n \n \n \n \n \n \n \n \n Returns : void\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n Public\n setSelecting\n \n \n \n \n \n \n \n setSelecting(enable: boolean)\n \n \n\n\n \n \n Defined in src/managers/three-manager/selection-manager.ts:102\n \n \n\n\n \n \n Set if selecting is to be enabled or disabled.\n\n\n \n Parameters :\n \n \n \n \n Name\n Type\n Optional\n Description\n \n \n \n \n enable\n \n boolean\n \n\n \n No\n \n\n\n \n If selecting is to be enabled or disabled.\n\n \n \n \n \n \n \n \n \n Returns : void\n\n \n \n \n \n \n \n \n \n\n\n\n\n\n\n \n\n\n \n import {\n Vector2,\n Raycaster,\n Camera,\n Scene,\n Object3D,\n DirectionalLight,\n AmbientLight,\n AxesHelper,\n} from 'three';\nimport { OutlinePass } from 'three/examples/jsm/postprocessing/OutlinePass.js';\nimport { InfoLogger } from '../../helpers/info-logger';\nimport { EffectsManager } from './effects-manager';\nimport { PrettySymbols } from '../../helpers/pretty-symbols';\nimport { ActiveVariable } from '../../helpers/active-variable';\n\n/**\n * Manager for managing event display's selection related functions.\n */\nexport class SelectionManager {\n /** Is initialized. */\n private isInit: boolean;\n /** The camera inside the scene. */\n private camera: Camera;\n /** The scene used for event display. */\n private scene: Scene;\n /** Object used to display the information of the selected 3D object. */\n private selectedObject: { name: string; attributes: any[] };\n /** The currently selected object which is observable for changes. */\n private activeObject = new ActiveVariable('');\n /** Objects to be ignored on hovering over the scene. */\n private ignoreList: string[];\n\n // Post processing\n /** Outline pass for highlighting the hovered over event display elements. */\n private outlinePass: OutlinePass;\n /** Manager for managing three.js event display effects like outline pass and unreal bloom. */\n private effectsManager: EffectsManager;\n\n /** Service for logging data to the information panel. */\n private infoLogger: InfoLogger;\n /** Performance mode value before enabling selection. */\n private preSelectionAntialias: boolean;\n\n /**\n * Constructor for the selection manager.\n */\n constructor() {\n this.isInit = false;\n this.ignoreList = [\n new AmbientLight().type,\n new DirectionalLight().type,\n new AxesHelper().type,\n ];\n }\n\n /**\n * Initialize the selection manager.\n * @param camera The camera inside the scene.\n * @param scene The scene used for event display.\n * @param effectsManager Manager for managing three.js event display effects\n * like outline pass and unreal bloom.\n * @param infoLogger Service for logging data to the information panel.\n */\n public init(\n camera: Camera,\n scene: Scene,\n effectsManager: EffectsManager,\n infoLogger: InfoLogger\n ) {\n this.camera = camera;\n this.scene = scene;\n this.isInit = true;\n this.infoLogger = infoLogger;\n this.effectsManager = effectsManager;\n this.outlinePass = this.effectsManager.addOutlinePassForSelection();\n }\n\n /**\n * Set the currently selected object.\n * @param selectedObject The currently selected object.\n */\n public setSelectedObject(selectedObject: {\n name: string;\n attributes: any[];\n }) {\n this.selectedObject = selectedObject;\n }\n\n /**\n * Get the uuid of the currently selected object.\n * @returns uuid of the currently selected object.\n */\n public getActiveObjectId(): ActiveVariable {\n return this.activeObject;\n }\n\n /**\n * Set if selecting is to be enabled or disabled.\n * @param enable If selecting is to be enabled or disabled.\n */\n public setSelecting(enable: boolean) {\n if (this.isInit) {\n enable ? this.enableSelecting() : this.disableSelecting();\n }\n }\n\n /**\n * Enable selecting of event display elements and set mouse move and click events.\n */\n private enableSelecting() {\n document\n .getElementById('three-canvas')\n .addEventListener('mousemove', this.onTouchMove, true);\n document\n .getElementById('three-canvas')\n .addEventListener('click', this.onDocumentMouseDown, true);\n document\n .getElementById('three-canvas')\n .addEventListener('touchstart', this.onTouchDown);\n this.preSelectionAntialias = this.effectsManager.antialiasing;\n this.effectsManager.setAntialiasing(false);\n }\n\n /**\n * Disable selecting of event display elements and remove mouse move and click events.\n */\n private disableSelecting() {\n document\n .getElementById('three-canvas')\n .removeEventListener('mousemove', this.onTouchMove, true);\n document\n .getElementById('three-canvas')\n .removeEventListener('click', this.onDocumentMouseDown, true);\n document\n .getElementById('three-canvas')\n .removeEventListener('touchstart', this.onTouchDown);\n this.outlinePass.selectedObjects = [];\n this.effectsManager.setAntialiasing(this.preSelectionAntialias);\n }\n\n /**\n * Function to call on mouse move when object selection is enabled.\n */\n private onTouchMove = (event: any) => {\n const intersectedObject = this.intersectObject(event);\n if (intersectedObject) {\n if (this.ignoreList.includes(intersectedObject.type)) {\n return;\n }\n this.outlinePass.selectedObjects = [intersectedObject];\n }\n };\n\n /**\n * Function to call on mouse click when object selection is enabled.\n */\n private onDocumentMouseDown = () => {\n const intersectedObject = this.outlinePass.selectedObjects[0];\n if (intersectedObject) {\n this.selectedObject.name = intersectedObject.name;\n this.selectedObject.attributes.splice(\n 0,\n this.selectedObject.attributes.length\n );\n\n this.activeObject.update(intersectedObject.uuid);\n\n const prettyParams = PrettySymbols.getPrettyParams(\n intersectedObject.userData\n );\n\n for (const key of Object.keys(prettyParams)) {\n this.selectedObject.attributes.push({\n attributeName: key,\n attributeValue: prettyParams[key],\n });\n }\n\n // Process properties of the selected object\n const props = Object.keys(intersectedObject.userData)\n .map((key) => {\n // Only take properties that are a string or number (no arrays or objects)\n if (\n ['string', 'number'].includes(\n typeof intersectedObject.userData[key]\n )\n ) {\n return key + '=' + intersectedObject.userData[key];\n }\n })\n .filter((val) => val);\n // Build the log text and add to the logger\n const log =\n intersectedObject.name +\n (props.length > 0 ? ' with ' + props.join(', ') : '');\n if (log) {\n this.infoLogger.add(log, 'Clicked');\n }\n }\n };\n\n /**\n * Function to call on touch when object selection is enabled.\n * @param event Event containing touch data.\n */\n private onTouchDown = (event: TouchEvent) => {\n event.preventDefault();\n this.onTouchMove(event.targetTouches[0]);\n this.onDocumentMouseDown();\n };\n\n /**\n * Check if any object intersects on mouse move.\n * @param event Event containing data of the mouse move.\n * @returns Intersected or hovered over object.\n */\n private intersectObject(event: any): Object3D {\n event.preventDefault?.();\n const mouse = new Vector2();\n const rendererElement = this.effectsManager.composer.renderer.domElement;\n mouse.x = (event.clientX / rendererElement.clientWidth) * 2 - 1;\n mouse.y = -(event.clientY / rendererElement.clientHeight) * 2 + 1;\n const raycaster = new Raycaster();\n raycaster.setFromCamera(mouse, this.camera);\n raycaster.params.Line.threshold = 3;\n const intersects = raycaster.intersectObjects(this.scene.children, true);\n\n if (intersects.length > 0) {\n // We want the closest one\n return intersects[0].object;\n }\n }\n\n /**\n * Highlight the object with the given uuid by giving it an outline.\n * @param uuid uuid of the object.\n * @param objectsGroup Group of objects to be traversed for finding the object\n * with the given uuid.\n */\n public highlightObject(uuid: string, objectsGroup: Object3D) {\n const object = objectsGroup.getObjectByProperty('uuid', uuid);\n if (object) {\n this.outlinePass.selectedObjects = [object];\n }\n }\n}\n\n \n\n\n\n\n\n\n\n\n\n\n \n \n results matching \"\"\n \n \n \n No results matching \"\"\n \n\n"},"classes/State.html":{"url":"classes/State.html","title":"class - State","body":"\n \n\n\n\n\n\n\n\n\n\n\n\n\n\n Classes\n State\n\n\n\n \n Info\n \n \n Source\n \n\n\n\n \n \n File\n \n \n src/helpers/runge-kutta.ts\n \n\n\n \n Description\n \n \n State of the particle.\n\n \n\n\n\n\n \n Index\n \n \n \n \n Properties\n \n \n \n \n \n \n dir\n \n \n maxStepSize\n \n \n p\n \n \n pathLength\n \n \n pos\n \n \n q\n \n \n stepSize\n \n \n unitC\n \n \n \n \n\n\n\n\n\n\n \n \n\n\n\n \n \n \n Properties\n \n \n \n \n \n \n \n dir\n \n \n \n \n \n \n Type : Vector3\n\n \n \n \n \n Default value : new Vector3(0, 0, 0)\n \n \n \n \n Defined in src/helpers/runge-kutta.ts:170\n \n \n\n \n \n Direction.\n\n \n \n\n \n \n \n \n \n \n \n \n maxStepSize\n \n \n \n \n \n \n Type : number\n\n \n \n \n \n Default value : 10\n \n \n \n \n Defined in src/helpers/runge-kutta.ts:180\n \n \n\n \n \n Max step size.\n\n \n \n\n \n \n \n \n \n \n \n \n p\n \n \n \n \n \n \n Type : number\n\n \n \n \n \n Default value : 0\n \n \n \n \n Defined in src/helpers/runge-kutta.ts:172\n \n \n\n \n \n Momentum.\n\n \n \n\n \n \n \n \n \n \n \n \n pathLength\n \n \n \n \n \n \n Type : number\n\n \n \n \n \n Default value : 0\n \n \n \n \n Defined in src/helpers/runge-kutta.ts:182\n \n \n\n \n \n Path length..\n\n \n \n\n \n \n \n \n \n \n \n \n pos\n \n \n \n \n \n \n Type : Vector3\n\n \n \n \n \n Default value : new Vector3(0, 0, 0)\n \n \n \n \n Defined in src/helpers/runge-kutta.ts:168\n \n \n\n \n \n Position.\n\n \n \n\n \n \n \n \n \n \n \n \n q\n \n \n \n \n \n \n Type : number\n\n \n \n \n \n Default value : 1\n \n \n \n \n Defined in src/helpers/runge-kutta.ts:174\n \n \n\n \n \n Charge.\n\n \n \n\n \n \n \n \n \n \n \n \n stepSize\n \n \n \n \n \n \n Type : number\n\n \n \n \n \n Default value : 1000\n \n \n \n \n Defined in src/helpers/runge-kutta.ts:178\n \n \n\n \n \n Step size.\n\n \n \n\n \n \n \n \n \n \n \n \n unitC\n \n \n \n \n \n \n Type : number\n\n \n \n \n \n Default value : 3.3333\n \n \n \n \n Defined in src/helpers/runge-kutta.ts:176\n \n \n\n \n \n Unit.\n\n \n \n\n \n \n\n\n\n\n\n\n\n\n \n\n\n \n import { Vector3 } from 'three';\n\n/**\n * Class for performing Runge-Kutta operations.\n */\nexport class RungeKutta {\n /**\n * Perform a Runge-Kutta step for the given state.\n * @param state State at which the step is to be performed.\n * @returns The computed step size.\n */\n static step(state: State): number {\n // Charge (q) to momentum (p) ratio in SI units\n const qop: number = state.q / (state.unitC * state.p);\n\n // Runge-Kutta integrator state\n let h2: number,\n half_h: number,\n B_middle: Vector3,\n B_last: Vector3,\n k2: Vector3,\n k3: Vector3,\n k4: Vector3;\n\n // First Runge-Kutta point (at current position)\n const B_first: Vector3 = Field.get(state.pos);\n // state.dir.cross(B_first) * qop\n const k1: Vector3 = state.dir.clone().cross(B_first).multiplyScalar(qop);\n\n // Try Runge-Kutta step with h as the step size\n const tryRungeKuttaStep = (h: number) => {\n h2 = h * h;\n half_h = h / 2;\n\n // Second Runge-Kutta point\n // state.pos + state.dir * half_h + k1 * (h2 / 8)\n const pos1: Vector3 = state.pos\n .clone()\n .add(state.dir.clone().multiplyScalar(half_h))\n .add(k1.clone().multiplyScalar(h2 / 8));\n B_middle = Field.get(pos1);\n // (state.dir + k1 * half_h).cross(B_middle) * qop\n k2 = state.dir\n .clone()\n .add(k1.clone().multiplyScalar(half_h))\n .cross(B_middle)\n .multiplyScalar(qop);\n\n // Third Runge-Kutta point\n // (state.dir + k2 * half_h).cross(B_middle) * qop\n k3 = state.dir\n .clone()\n .add(k2.clone().multiplyScalar(half_h))\n .cross(B_middle)\n .multiplyScalar(qop);\n\n // Last Runge-Kutta point\n // state.pos + state.dir * h + k3 * (h2 / 2)\n const pos2: Vector3 = state.pos\n .clone()\n .add(state.dir.clone().multiplyScalar(h))\n .add(k3.clone().multiplyScalar(h2 / 2));\n B_last = Field.get(pos2);\n // (state.dir + k3 * h).cross(B_last) * qop\n k4 = state.dir\n .clone()\n .add(k3.clone().multiplyScalar(h))\n .cross(B_last)\n .multiplyScalar(qop);\n\n // (k1 - k2 - k3 + k4)\n const returnVec = k1.clone().sub(k2).sub(k3).add(k4);\n // h * (k1 - k2 - k3 + k4).lpNorm()\n return (\n h *\n (Math.abs(returnVec.x) + Math.abs(returnVec.y) + Math.abs(returnVec.z))\n );\n };\n\n // Checking the error estimate\n let error_estimate: number = tryRungeKuttaStep(state.stepSize);\n while (error_estimate > 0.0002) {\n state.stepSize *= 0.5;\n error_estimate = tryRungeKuttaStep(state.stepSize);\n }\n\n const fh: number = state.stepSize;\n const fh2: number = Math.pow(fh, 2);\n\n // Update position and momentum\n // state.pos += state.dir * fh + (k1 + k2 + k3) * (fh2 /6)\n state.pos.add(state.dir.clone().multiplyScalar(fh)).add(\n k1\n .clone()\n .add(k2)\n .add(k3)\n .multiplyScalar(fh2 / 6)\n );\n // state.dir += (k1 + k2 * 2 + k3 * 2 + k4) * (fh / 6)\n state.dir.add(\n k1\n .clone()\n .add(k2.clone().multiplyScalar(2))\n .add(k3.clone().multiplyScalar(2))\n .add(k4)\n .multiplyScalar(fh / 6)\n );\n state.dir.normalize();\n\n return state.stepSize;\n }\n\n /**\n * Propagate using the given properties by performing the Runge-Kutta steps.\n * @param startPos Starting position in 3D space.\n * @param startDir Starting direction in 3D space.\n * @param p Momentum.\n * @param q Charge.\n * @param mss Max step size.\n * @param plength Path length.\n * @param inbounds Function which returns true until the passed position\n * is out of bounds, when it returns false.\n * @returns An array containing position and direction at that position calculated\n * through the Runge-Kutta steps.\n */\n static propagate(\n startPos: Vector3,\n startDir: Vector3,\n p: number,\n q: number,\n mss: number = -1,\n plength: number = 1000,\n inbounds: (pos: Vector3) => boolean = () => true\n ): { pos: Vector3; dir: Vector3 }[] {\n const rkState: State = new State();\n rkState.pos = startPos;\n rkState.dir = startDir;\n rkState.p = p;\n rkState.q = q;\n rkState.maxStepSize = mss;\n\n const result: { pos: Vector3; dir: Vector3 }[] = [];\n\n while (rkState.pathLength \n \n\n\n\n\n\n\n\n\n\n\n \n \n results matching \"\"\n \n \n \n No results matching \"\"\n \n\n"},"classes/StateManager.html":{"url":"classes/StateManager.html","title":"class - StateManager","body":"\n \n\n\n\n\n\n\n\n\n\n\n\n\n\n Classes\n StateManager\n\n\n\n \n Info\n \n \n Source\n \n\n\n\n \n \n File\n \n \n src/managers/state-manager.ts\n \n\n\n \n Description\n \n \n A singleton manager for managing the scene's state.\n\n \n\n\n\n\n \n Index\n \n \n \n \n Properties\n \n \n \n \n \n \n activeCamera\n \n \n clippingEnabled\n \n \n eventDisplay\n \n \n eventMetadata\n \n \n Private\n Static\n instance\n \n \n openingClippingAngle\n \n \n phoenixMenuRoot\n \n \n startClippingAngle\n \n \n \n \n\n \n \n Methods\n \n \n \n \n \n \n Static\n getInstance\n \n \n getOpeningClippingAngle\n \n \n getStartClippingAngle\n \n \n loadStateFromJSON\n \n \n saveStateAsJSON\n \n \n setCamera\n \n \n setClippingEnabled\n \n \n setEventDisplay\n \n \n setOpeningClippingAngle\n \n \n setPhoenixMenuRoot\n \n \n setStartClippingAngle\n \n \n \n \n\n\n\n\n\n \n \n\n\n \n Constructor\n \n \n \n \nconstructor()\n \n \n \n \n Defined in src/managers/state-manager.ts:29\n \n \n\n \n \n Create the state manager.\n\n \n \n \n \n\n\n \n \n \n Properties\n \n \n \n \n \n \n \n activeCamera\n \n \n \n \n \n \n Type : Camera\n\n \n \n \n \n Defined in src/managers/state-manager.ts:22\n \n \n\n \n \n The active camera.\n\n \n \n\n \n \n \n \n \n \n \n \n clippingEnabled\n \n \n \n \n \n \n Default value : new ActiveVariable(false)\n \n \n \n \n Defined in src/managers/state-manager.ts:16\n \n \n\n \n \n Whether the clipping is enabled or not.\n\n \n \n\n \n \n \n \n \n \n \n \n eventDisplay\n \n \n \n \n \n \n Type : EventDisplay\n\n \n \n \n \n Defined in src/managers/state-manager.ts:24\n \n \n\n \n \n The event display.\n\n \n \n\n \n \n \n \n \n \n \n \n eventMetadata\n \n \n \n \n \n \n Type : literal type\n\n \n \n \n \n Default value : {\n runNumber: '000',\n eventNumber: '000',\n }\n \n \n \n \n Defined in src/managers/state-manager.ts:26\n \n \n\n \n \n Current loaded event's metadata.\n\n \n \n\n \n \n \n \n \n \n \n \n Private\n Static\n instance\n \n \n \n \n \n \n Type : StateManager\n\n \n \n \n \n Defined in src/managers/state-manager.ts:12\n \n \n\n \n \n Instance of the state manager.\n\n \n \n\n \n \n \n \n \n \n \n \n openingClippingAngle\n \n \n \n \n \n \n Default value : new ActiveVariable(0)\n \n \n \n \n Defined in src/managers/state-manager.ts:20\n \n \n\n \n \n Opening angle of the clipping.\n\n \n \n\n \n \n \n \n \n \n \n \n phoenixMenuRoot\n \n \n \n \n \n \n Type : PhoenixMenuNode\n\n \n \n \n \n Defined in src/managers/state-manager.ts:14\n \n \n\n \n \n Root node of the phoenix menu.\n\n \n \n\n \n \n \n \n \n \n \n \n startClippingAngle\n \n \n \n \n \n \n Default value : new ActiveVariable(0)\n \n \n \n \n Defined in src/managers/state-manager.ts:18\n \n \n\n \n \n Starting angle of the clipping.\n\n \n \n\n \n \n\n\n \n \n \n Methods\n \n \n \n \n \n \n \n Static\n getInstance\n \n \n \n \n \n \n \n getInstance()\n \n \n\n\n \n \n Defined in src/managers/state-manager.ts:46\n \n \n\n\n \n \n Get the instance of state manager.\n\n\n \n \n \n Returns : StateManager\n\n \n \n The state manager instance.\n\n \n \n \n \n \n \n \n \n \n \n \n getOpeningClippingAngle\n \n \n \n \n \n \ngetOpeningClippingAngle()\n \n \n\n\n \n \n Defined in src/managers/state-manager.ts:179\n \n \n\n\n \n \n Get the opening angle of clipping.\n\n\n \n \n \n Returns : number\n\n \n \n The opening angle of clipping.\n\n \n \n \n \n \n \n \n \n \n \n \n getStartClippingAngle\n \n \n \n \n \n \ngetStartClippingAngle()\n \n \n\n\n \n \n Defined in src/managers/state-manager.ts:163\n \n \n\n\n \n \n Get the start clipping angle of clipping.\n\n\n \n \n \n Returns : number\n\n \n \n The starting angle of clipping.\n\n \n \n \n \n \n \n \n \n \n \n \n loadStateFromJSON\n \n \n \n \n \n \nloadStateFromJSON(json: string | literal type)\n \n \n\n\n \n \n Defined in src/managers/state-manager.ts:104\n \n \n\n\n \n \n Load the state from JSON.\n\n\n \n Parameters :\n \n \n \n \n Name\n Type\n Optional\n Description\n \n \n \n \n json\n \n string | literal type\n \n\n \n No\n \n\n\n \n JSON for state.\n\n \n \n \n \n \n \n \n \n Returns : void\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n saveStateAsJSON\n \n \n \n \n \n \nsaveStateAsJSON()\n \n \n\n\n \n \n Defined in src/managers/state-manager.ts:80\n \n \n\n\n \n \n Save the state of the event display as JSON.\n\n\n \n Returns : void\n\n \n \n \n \n \n \n \n \n \n \n \n setCamera\n \n \n \n \n \n \nsetCamera(camera: Camera)\n \n \n\n\n \n \n Defined in src/managers/state-manager.ts:187\n \n \n\n\n \n \n Set the scene camera for state.\n\n\n \n Parameters :\n \n \n \n \n Name\n Type\n Optional\n Description\n \n \n \n \n camera\n \n Camera\n \n\n \n No\n \n\n\n \n The camera.\n\n \n \n \n \n \n \n \n \n Returns : void\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n setClippingEnabled\n \n \n \n \n \n \nsetClippingEnabled(clipping: boolean)\n \n \n\n\n \n \n Defined in src/managers/state-manager.ts:147\n \n \n\n\n \n \n Set the state of clipping.\n\n\n \n Parameters :\n \n \n \n \n Name\n Type\n Optional\n Description\n \n \n \n \n clipping\n \n boolean\n \n\n \n No\n \n\n\n \n Whether the clipping is enabled or not.\n\n \n \n \n \n \n \n \n \n Returns : void\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n setEventDisplay\n \n \n \n \n \n \nsetEventDisplay(eventDisplay: EventDisplay)\n \n \n\n\n \n \n Defined in src/managers/state-manager.ts:195\n \n \n\n\n \n \n Set the event display.\n\n\n \n Parameters :\n \n \n \n \n Name\n Type\n Optional\n Description\n \n \n \n \n eventDisplay\n \n EventDisplay\n \n\n \n No\n \n\n\n \n The event display.\n\n \n \n \n \n \n \n \n \n Returns : void\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n setOpeningClippingAngle\n \n \n \n \n \n \nsetOpeningClippingAngle(angle: number)\n \n \n\n\n \n \n Defined in src/managers/state-manager.ts:171\n \n \n\n\n \n \n Set the opening angle of clipping.\n\n\n \n Parameters :\n \n \n \n \n Name\n Type\n Optional\n Description\n \n \n \n \n angle\n \n number\n \n\n \n No\n \n\n\n \n Angle for clipping.\n\n \n \n \n \n \n \n \n \n Returns : void\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n setPhoenixMenuRoot\n \n \n \n \n \n \nsetPhoenixMenuRoot(phoenixMenuRoot: PhoenixMenuNode)\n \n \n\n\n \n \n Defined in src/managers/state-manager.ts:54\n \n \n\n\n \n \n Set the root node of Phoenix menu.\n\n\n \n Parameters :\n \n \n \n \n Name\n Type\n Optional\n Description\n \n \n \n \n phoenixMenuRoot\n \n PhoenixMenuNode\n \n\n \n No\n \n\n\n \n Phoenix menu root node.\n\n \n \n \n \n \n \n \n \n Returns : void\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n setStartClippingAngle\n \n \n \n \n \n \nsetStartClippingAngle(angle: number)\n \n \n\n\n \n \n Defined in src/managers/state-manager.ts:155\n \n \n\n\n \n \n Set the start clipping angle of clipping.\n\n\n \n Parameters :\n \n \n \n \n Name\n Type\n Optional\n Description\n \n \n \n \n angle\n \n number\n \n\n \n No\n \n\n\n \n Angle for clipping.\n\n \n \n \n \n \n \n \n \n Returns : void\n\n \n \n \n \n \n \n \n \n\n\n\n\n\n\n \n\n\n \n import { EventDisplay } from '../event-display';\nimport { Camera } from 'three';\nimport { PhoenixMenuNode } from './ui-manager/phoenix-menu/phoenix-menu-node';\nimport { loadFile, saveFile } from '../helpers/file';\nimport { ActiveVariable } from '../helpers/active-variable';\n\n/**\n * A singleton manager for managing the scene's state.\n */\nexport class StateManager {\n /** Instance of the state manager. */\n private static instance: StateManager;\n /** Root node of the phoenix menu. */\n phoenixMenuRoot: PhoenixMenuNode;\n /** Whether the clipping is enabled or not. */\n clippingEnabled = new ActiveVariable(false);\n /** Starting angle of the clipping. */\n startClippingAngle = new ActiveVariable(0);\n /** Opening angle of the clipping. */\n openingClippingAngle = new ActiveVariable(0);\n /** The active camera. */\n activeCamera: Camera;\n /** The event display. */\n eventDisplay: EventDisplay;\n /** Current loaded event's metadata. */\n eventMetadata: { runNumber: string; eventNumber: string } = {\n runNumber: '000',\n eventNumber: '000',\n };\n\n /**\n * Create the state manager.\n * @returns The state manager instance.\n */\n constructor() {\n if (StateManager.instance === undefined) {\n StateManager.instance = this;\n }\n return StateManager.instance;\n }\n\n /**\n * Get the instance of state manager.\n * @returns The state manager instance.\n */\n static getInstance(): StateManager {\n return StateManager.instance;\n }\n\n /**\n * Set the root node of Phoenix menu.\n * @param phoenixMenuRoot Phoenix menu root node.\n */\n setPhoenixMenuRoot(phoenixMenuRoot: PhoenixMenuNode) {\n this.phoenixMenuRoot = phoenixMenuRoot;\n\n if (this.phoenixMenuRoot) {\n // Add save and load config buttons to the root node\n this.phoenixMenuRoot\n .addConfig('button', {\n label: 'Save state',\n onClick: () => {\n this.saveStateAsJSON();\n },\n })\n .addConfig('button', {\n label: 'Load state',\n onClick: () => {\n loadFile((data) => {\n this.loadStateFromJSON(JSON.parse(data));\n });\n },\n });\n }\n }\n\n /**\n * Save the state of the event display as JSON.\n */\n saveStateAsJSON() {\n const state: { [key: string]: any } = {\n phoenixMenu: this.phoenixMenuRoot.getNodeState(),\n eventDisplay: {\n cameraPosition: this.activeCamera.position.toArray(),\n startClippingAngle: this.clippingEnabled.value\n ? this.startClippingAngle.value\n : null,\n openingClippingAngle: this.clippingEnabled.value\n ? this.openingClippingAngle.value\n : null,\n },\n };\n\n saveFile(\n JSON.stringify(state),\n `run${this.eventMetadata.runNumber}_evt${this.eventMetadata.eventNumber}.json`\n );\n }\n\n /**\n * Load the state from JSON.\n * @param json JSON for state.\n */\n loadStateFromJSON(json: string | { [key: string]: any }) {\n const jsonData: { [key: string]: any } =\n typeof json === 'string' ? JSON.parse(json) : json;\n\n if (jsonData['phoenixMenu'] && this.phoenixMenuRoot) {\n this.phoenixMenuRoot.loadStateFromJSON(jsonData['phoenixMenu']);\n this.phoenixMenuRoot.configActive = false;\n }\n\n if (jsonData['eventDisplay']) {\n this.activeCamera.position.fromArray(\n jsonData['eventDisplay']?.['cameraPosition']\n );\n\n const startAngle = jsonData['eventDisplay']?.['startClippingAngle'];\n const openingAngle = jsonData['eventDisplay']?.['openingClippingAngle'];\n\n if (startAngle || openingAngle) {\n this.setClippingEnabled(true);\n this.eventDisplay.getUIManager().setClipping(true);\n\n if (startAngle) {\n this.eventDisplay\n .getUIManager()\n .rotateStartAngleClipping(\n jsonData['eventDisplay']['startClippingAngle']\n );\n }\n if (openingAngle) {\n this.eventDisplay\n .getUIManager()\n .rotateOpeningAngleClipping(\n jsonData['eventDisplay']['openingClippingAngle']\n );\n }\n }\n }\n }\n\n /**\n * Set the state of clipping.\n * @param clipping Whether the clipping is enabled or not.\n */\n setClippingEnabled(clipping: boolean) {\n this.clippingEnabled.update(clipping);\n }\n\n /**\n * Set the start clipping angle of clipping.\n * @param angle Angle for clipping.\n */\n setStartClippingAngle(angle: number) {\n this.startClippingAngle.update(angle);\n }\n\n /**\n * Get the start clipping angle of clipping.\n * @returns The starting angle of clipping.\n */\n getStartClippingAngle(): number {\n return this.startClippingAngle.value;\n }\n\n /**\n * Set the opening angle of clipping.\n * @param angle Angle for clipping.\n */\n setOpeningClippingAngle(angle: number) {\n this.openingClippingAngle.update(angle);\n }\n\n /**\n * Get the opening angle of clipping.\n * @returns The opening angle of clipping.\n */\n getOpeningClippingAngle(): number {\n return this.openingClippingAngle.value;\n }\n\n /**\n * Set the scene camera for state.\n * @param camera The camera.\n */\n setCamera(camera: Camera) {\n this.activeCamera = camera;\n }\n\n /**\n * Set the event display.\n * @param eventDisplay The event display.\n */\n setEventDisplay(eventDisplay: EventDisplay) {\n this.eventDisplay = eventDisplay;\n }\n}\n\n \n\n\n\n\n\n\n\n\n\n\n \n \n results matching \"\"\n \n \n \n No results matching \"\"\n \n\n"},"classes/TracksMaterial.html":{"url":"classes/TracksMaterial.html","title":"class - TracksMaterial","body":"\n \n\n\n\n\n\n\n\n\n\n\n\n\n\n Classes\n TracksMaterial\n\n\n\n \n Info\n \n \n Source\n \n\n\n\n \n \n File\n \n \n src/loaders/objects/tracks.ts\n \n\n\n \n Description\n \n \n Custom material for the tracks.\n\n \n\n \n Extends\n \n \n ShaderMaterial\n \n\n\n\n \n Index\n \n \n \n \n Properties\n \n \n \n \n \n \n isTracksMaterial\n \n \n \n \n\n\n\n\n\n\n \n \n\n\n \n Constructor\n \n \n \n \nconstructor(params)\n \n \n \n \n Defined in src/loaders/objects/tracks.ts:230\n \n \n\n \n \n Create the tracks material.\n\n \n Parameters :\n \n \n \n Name\n Optional\n Description\n \n \n \n \n params\n \n \n \n No\n \n \n \n Params for creating the tracks material.\n\n \n \n \n \n \n \n \n \n \n\n\n \n \n \n Properties\n \n \n \n \n \n \n \n isTracksMaterial\n \n \n \n \n \n \n Type : boolean\n\n \n \n \n \n Defined in src/loaders/objects/tracks.ts:230\n \n \n\n \n \n If the material is of track.\n\n \n \n\n \n \n\n\n\n\n\n\n\n\n \n\n\n \n import {\n BufferGeometry,\n BufferAttribute,\n ShaderMaterial,\n ShaderChunk,\n Vector2,\n Vector3,\n Color,\n ColorRepresentation,\n} from 'three';\n\n/**\n * Custom mesh for tracks.\n */\nexport class TracksMesh extends BufferGeometry {\n /** ID of the next track. */\n next_track_id: number;\n /** Positions. */\n positions: number[];\n /** Previous. */\n previous: number[];\n /** Next. */\n next: number[];\n /** Colors. */\n colors: number[];\n /** Counter. */\n counter: number[];\n /** Track ID. */\n track_id: any[];\n /** Side. */\n side: any[];\n /** Indices. */\n indices_array: any[];\n /** Attributes. */\n _attributes: any;\n\n /**\n * Create the tracks mesh.\n */\n constructor() {\n super();\n this.type = 'TracksMesh';\n this.positions = [];\n this.previous = [];\n this.next = [];\n this.side = [];\n this.counter = [];\n this.track_id = [];\n this.colors = [];\n this.indices_array = [];\n this.next_track_id = 0;\n }\n\n /**\n * Add a track to the tracks mesh.\n * @param points Points for constructing the track.\n * @param color Color of the track.\n * @returns ID of the track.\n */\n addTrack(points: Vector3[], color: ColorRepresentation) {\n const id = this.next_track_id++;\n\n const col = new Color(color);\n\n this.previous.push(points[0].x, points[0].y, points[0].z);\n this.previous.push(points[0].x, points[0].y, points[0].z);\n\n for (let i = 0; i 0) {\n this.next.push(p.x, p.y, p.z);\n this.next.push(p.x, p.y, p.z);\n }\n }\n\n const i = points.length - 1;\n this.next.push(points[i].x, points[i].y, points[i].z);\n this.next.push(points[i].x, points[i].y, points[i].z);\n\n //this.process()\n return id;\n }\n\n /**\n * Process the track mesh.\n */\n process() {\n if (\n !this._attributes ||\n this._attributes.position.count !== this.positions.length\n ) {\n this._attributes = {\n position: new BufferAttribute(new Float32Array(this.positions), 3),\n previous: new BufferAttribute(new Float32Array(this.previous), 3),\n next: new BufferAttribute(new Float32Array(this.next), 3),\n side: new BufferAttribute(new Float32Array(this.side), 1),\n track_id: new BufferAttribute(new Int32Array(this.track_id), 1),\n color: new BufferAttribute(new Float32Array(this.colors), 3),\n counter: new BufferAttribute(new Float32Array(this.counter), 1),\n index: new BufferAttribute(new Uint32Array(this.indices_array), 1),\n };\n } else {\n (this._attributes.position as BufferAttribute).copyArray(\n new Float32Array(this.positions)\n );\n this._attributes.position.needsUpdate = true;\n (this._attributes.previous as BufferAttribute).copyArray(\n new Float32Array(this.previous)\n );\n this._attributes.previous.needsUpdate = true;\n (this._attributes.next as BufferAttribute).copyArray(\n new Float32Array(this.next)\n );\n this._attributes.next.needsUpdate = true;\n (this._attributes.side as BufferAttribute).copyArray(\n new Float32Array(this.side)\n );\n this._attributes.side.needsUpdate = true;\n (this._attributes.track_id as BufferAttribute).copyArray(\n new Int32Array(this.track_id)\n );\n this._attributes.track_id.needsUpdate = true;\n (this._attributes.color as BufferAttribute).copyArray(\n new Float32Array(this.colors)\n );\n this._attributes.color.needsUpdate = true;\n (this._attributes.counter as BufferAttribute).copyArray(\n new Float32Array(this.counter)\n );\n this._attributes.counter.needsUpdate = true;\n (this._attributes.index as BufferAttribute).copyArray(\n new Uint32Array(this.indices_array)\n );\n this._attributes.index.needsUpdate = true;\n }\n\n this.setAttribute('position', this._attributes.position);\n this.setAttribute('previous', this._attributes.previous);\n this.setAttribute('next', this._attributes.next);\n this.setAttribute('side', this._attributes.side);\n this.setAttribute('track_id', this._attributes.track_id);\n this.setAttribute('color', this._attributes.color);\n this.setAttribute('counter', this._attributes.counter);\n\n this.setIndex(this._attributes.index as BufferAttribute);\n\n this.computeBoundingSphere();\n this.computeBoundingBox();\n }\n}\n\n/** Custom vertex shader for tracks. */\nShaderChunk['tracks_vert'] = [\n 'attribute vec3 previous;',\n 'attribute vec3 next;',\n 'attribute int track_id;',\n 'attribute float side;',\n 'attribute vec3 color;',\n 'attribute float counter;',\n\n 'varying vec3 v_color;',\n 'varying float v_counter;',\n 'flat varying int v_track_id;',\n\n 'uniform vec2 resolution;',\n 'uniform float lineWidth;',\n 'void main() {',\n ' vec2 aspect = vec2(resolution.x / resolution.y, 1.0);',\n '',\n ' v_color = color;',\n ' v_counter = counter;',\n ' v_track_id = track_id;',\n '',\n ' mat4 m = projectionMatrix * modelViewMatrix;',\n ' vec4 finalPosition = m * vec4(position, 1.0);',\n ' vec4 prevPos = m * vec4(previous, 1.0);',\n ' vec4 nextPos = m * vec4(next, 1.0);',\n '',\n ' vec2 curP = finalPosition.xy / finalPosition.w * aspect;',\n ' vec2 prevP = prevPos.xy / prevPos.w * aspect;',\n ' vec2 nextP = nextPos.xy / nextPos.w * aspect;',\n '',\n ' vec2 dir;',\n ' if (curP == prevP) dir = normalize(nextP - curP);',\n ' else if (curP == nextP) dir = normalize(curP - prevP);',\n ' else dir = normalize(curP - prevP);',\n '',\n ' vec2 normal = vec2(-dir.y, dir.x);',\n ' normal.xy *= .5 * lineWidth;',\n ' normal.x /= aspect.x;',\n ' normal.xy *= finalPosition.w * 0.001;',\n\n ' finalPosition.xy += normal.xy * side;',\n ' gl_Position = finalPosition;',\n '}',\n].join('\\n');\n\n/** Custom fragment shadre for track. */\nShaderChunk['tracks_frag'] = [\n 'uniform float progress;',\n 'varying vec3 v_color;',\n 'varying float v_counter;',\n 'flat varying int v_track_id;',\n 'void main() {',\n ' if (v_counter > progress) discard;',\n ' gl_FragColor = vec4(v_color, 1.0);',\n '}',\n].join('\\n');\n\n/**\n * Custom material for the tracks.\n */\nexport class TracksMaterial extends ShaderMaterial {\n /** If the material is of track. */\n isTracksMaterial: boolean;\n\n /**\n * Create the tracks material.\n * @param params Params for creating the tracks material.\n */\n constructor(params) {\n super({\n uniforms: Object.assign(\n {},\n {\n lineWidth: { value: 1 },\n resolution: { value: new Vector2(1, 1) },\n progress: { value: 1 },\n }\n ),\n vertexShader: ShaderChunk.tracks_vert,\n fragmentShader: ShaderChunk.tracks_frag,\n });\n this.isTracksMaterial = true;\n this.type = 'TracksMaterial';\n\n Object.defineProperties(this, {\n lineWidth: {\n enumerable: true,\n get: function () {\n return this.uniforms.lineWidth.value;\n },\n set: function (value) {\n this.uniforms.lineWidth.value = value;\n },\n },\n resolution: {\n enumerable: true,\n get: function () {\n return this.uniforms.resolution.value;\n },\n set: function (value) {\n this.uniforms.resolution.value.copy(value);\n },\n },\n progress: {\n enumerable: true,\n get: function () {\n return this.uniforms.progress.value;\n },\n set: function (value) {\n this.uniforms.progress.value = value;\n },\n },\n });\n\n this.setValues(params);\n }\n}\n\n \n\n\n\n\n\n\n\n\n\n\n \n \n results matching \"\"\n \n \n \n No results matching \"\"\n \n\n"},"classes/TracksMesh.html":{"url":"classes/TracksMesh.html","title":"class - TracksMesh","body":"\n \n\n\n\n\n\n\n\n\n\n\n\n\n\n Classes\n TracksMesh\n\n\n\n \n Info\n \n \n Source\n \n\n\n\n \n \n File\n \n \n src/loaders/objects/tracks.ts\n \n\n\n \n Description\n \n \n Custom mesh for tracks.\n\n \n\n \n Extends\n \n \n BufferGeometry\n \n\n\n\n \n Index\n \n \n \n \n Properties\n \n \n \n \n \n \n _attributes\n \n \n colors\n \n \n counter\n \n \n indices_array\n \n \n next\n \n \n next_track_id\n \n \n positions\n \n \n previous\n \n \n side\n \n \n track_id\n \n \n \n \n\n \n \n Methods\n \n \n \n \n \n \n addTrack\n \n \n process\n \n \n \n \n\n\n\n\n\n \n \n\n\n \n Constructor\n \n \n \n \nconstructor()\n \n \n \n \n Defined in src/loaders/objects/tracks.ts:35\n \n \n\n \n \n Create the tracks mesh.\n\n \n \n \n \n\n\n \n \n \n Properties\n \n \n \n \n \n \n \n _attributes\n \n \n \n \n \n \n Type : any\n\n \n \n \n \n Defined in src/loaders/objects/tracks.ts:35\n \n \n\n \n \n Attributes.\n\n \n \n\n \n \n \n \n \n \n \n \n colors\n \n \n \n \n \n \n Type : number[]\n\n \n \n \n \n Defined in src/loaders/objects/tracks.ts:25\n \n \n\n \n \n Colors.\n\n \n \n\n \n \n \n \n \n \n \n \n counter\n \n \n \n \n \n \n Type : number[]\n\n \n \n \n \n Defined in src/loaders/objects/tracks.ts:27\n \n \n\n \n \n Counter.\n\n \n \n\n \n \n \n \n \n \n \n \n indices_array\n \n \n \n \n \n \n Type : any[]\n\n \n \n \n \n Defined in src/loaders/objects/tracks.ts:33\n \n \n\n \n \n Indices.\n\n \n \n\n \n \n \n \n \n \n \n \n next\n \n \n \n \n \n \n Type : number[]\n\n \n \n \n \n Defined in src/loaders/objects/tracks.ts:23\n \n \n\n \n \n Next.\n\n \n \n\n \n \n \n \n \n \n \n \n next_track_id\n \n \n \n \n \n \n Type : number\n\n \n \n \n \n Defined in src/loaders/objects/tracks.ts:17\n \n \n\n \n \n ID of the next track.\n\n \n \n\n \n \n \n \n \n \n \n \n positions\n \n \n \n \n \n \n Type : number[]\n\n \n \n \n \n Defined in src/loaders/objects/tracks.ts:19\n \n \n\n \n \n Positions.\n\n \n \n\n \n \n \n \n \n \n \n \n previous\n \n \n \n \n \n \n Type : number[]\n\n \n \n \n \n Defined in src/loaders/objects/tracks.ts:21\n \n \n\n \n \n Previous.\n\n \n \n\n \n \n \n \n \n \n \n \n side\n \n \n \n \n \n \n Type : any[]\n\n \n \n \n \n Defined in src/loaders/objects/tracks.ts:31\n \n \n\n \n \n Side.\n\n \n \n\n \n \n \n \n \n \n \n \n track_id\n \n \n \n \n \n \n Type : any[]\n\n \n \n \n \n Defined in src/loaders/objects/tracks.ts:29\n \n \n\n \n \n Track ID.\n\n \n \n\n \n \n\n\n \n \n \n Methods\n \n \n \n \n \n \n \n addTrack\n \n \n \n \n \n \naddTrack(points: Vector3[], color: ColorRepresentation)\n \n \n\n\n \n \n Defined in src/loaders/objects/tracks.ts:60\n \n \n\n\n \n \n Add a track to the tracks mesh.\n\n\n \n Parameters :\n \n \n \n \n Name\n Type\n Optional\n Description\n \n \n \n \n points\n \n Vector3[]\n \n\n \n No\n \n\n\n \n Points for constructing the track.\n\n \n \n \n color\n \n ColorRepresentation\n \n\n \n No\n \n\n\n \n Color of the track.\n\n \n \n \n \n \n \n \n \n Returns : number\n\n \n \n ID of the track.\n\n \n \n \n \n \n \n \n \n \n \n \n process\n \n \n \n \n \n \nprocess()\n \n \n\n\n \n \n Defined in src/loaders/objects/tracks.ts:102\n \n \n\n\n \n \n Process the track mesh.\n\n\n \n Returns : void\n\n \n \n \n \n \n\n\n\n\n\n\n \n\n\n \n import {\n BufferGeometry,\n BufferAttribute,\n ShaderMaterial,\n ShaderChunk,\n Vector2,\n Vector3,\n Color,\n ColorRepresentation,\n} from 'three';\n\n/**\n * Custom mesh for tracks.\n */\nexport class TracksMesh extends BufferGeometry {\n /** ID of the next track. */\n next_track_id: number;\n /** Positions. */\n positions: number[];\n /** Previous. */\n previous: number[];\n /** Next. */\n next: number[];\n /** Colors. */\n colors: number[];\n /** Counter. */\n counter: number[];\n /** Track ID. */\n track_id: any[];\n /** Side. */\n side: any[];\n /** Indices. */\n indices_array: any[];\n /** Attributes. */\n _attributes: any;\n\n /**\n * Create the tracks mesh.\n */\n constructor() {\n super();\n this.type = 'TracksMesh';\n this.positions = [];\n this.previous = [];\n this.next = [];\n this.side = [];\n this.counter = [];\n this.track_id = [];\n this.colors = [];\n this.indices_array = [];\n this.next_track_id = 0;\n }\n\n /**\n * Add a track to the tracks mesh.\n * @param points Points for constructing the track.\n * @param color Color of the track.\n * @returns ID of the track.\n */\n addTrack(points: Vector3[], color: ColorRepresentation) {\n const id = this.next_track_id++;\n\n const col = new Color(color);\n\n this.previous.push(points[0].x, points[0].y, points[0].z);\n this.previous.push(points[0].x, points[0].y, points[0].z);\n\n for (let i = 0; i 0) {\n this.next.push(p.x, p.y, p.z);\n this.next.push(p.x, p.y, p.z);\n }\n }\n\n const i = points.length - 1;\n this.next.push(points[i].x, points[i].y, points[i].z);\n this.next.push(points[i].x, points[i].y, points[i].z);\n\n //this.process()\n return id;\n }\n\n /**\n * Process the track mesh.\n */\n process() {\n if (\n !this._attributes ||\n this._attributes.position.count !== this.positions.length\n ) {\n this._attributes = {\n position: new BufferAttribute(new Float32Array(this.positions), 3),\n previous: new BufferAttribute(new Float32Array(this.previous), 3),\n next: new BufferAttribute(new Float32Array(this.next), 3),\n side: new BufferAttribute(new Float32Array(this.side), 1),\n track_id: new BufferAttribute(new Int32Array(this.track_id), 1),\n color: new BufferAttribute(new Float32Array(this.colors), 3),\n counter: new BufferAttribute(new Float32Array(this.counter), 1),\n index: new BufferAttribute(new Uint32Array(this.indices_array), 1),\n };\n } else {\n (this._attributes.position as BufferAttribute).copyArray(\n new Float32Array(this.positions)\n );\n this._attributes.position.needsUpdate = true;\n (this._attributes.previous as BufferAttribute).copyArray(\n new Float32Array(this.previous)\n );\n this._attributes.previous.needsUpdate = true;\n (this._attributes.next as BufferAttribute).copyArray(\n new Float32Array(this.next)\n );\n this._attributes.next.needsUpdate = true;\n (this._attributes.side as BufferAttribute).copyArray(\n new Float32Array(this.side)\n );\n this._attributes.side.needsUpdate = true;\n (this._attributes.track_id as BufferAttribute).copyArray(\n new Int32Array(this.track_id)\n );\n this._attributes.track_id.needsUpdate = true;\n (this._attributes.color as BufferAttribute).copyArray(\n new Float32Array(this.colors)\n );\n this._attributes.color.needsUpdate = true;\n (this._attributes.counter as BufferAttribute).copyArray(\n new Float32Array(this.counter)\n );\n this._attributes.counter.needsUpdate = true;\n (this._attributes.index as BufferAttribute).copyArray(\n new Uint32Array(this.indices_array)\n );\n this._attributes.index.needsUpdate = true;\n }\n\n this.setAttribute('position', this._attributes.position);\n this.setAttribute('previous', this._attributes.previous);\n this.setAttribute('next', this._attributes.next);\n this.setAttribute('side', this._attributes.side);\n this.setAttribute('track_id', this._attributes.track_id);\n this.setAttribute('color', this._attributes.color);\n this.setAttribute('counter', this._attributes.counter);\n\n this.setIndex(this._attributes.index as BufferAttribute);\n\n this.computeBoundingSphere();\n this.computeBoundingBox();\n }\n}\n\n/** Custom vertex shader for tracks. */\nShaderChunk['tracks_vert'] = [\n 'attribute vec3 previous;',\n 'attribute vec3 next;',\n 'attribute int track_id;',\n 'attribute float side;',\n 'attribute vec3 color;',\n 'attribute float counter;',\n\n 'varying vec3 v_color;',\n 'varying float v_counter;',\n 'flat varying int v_track_id;',\n\n 'uniform vec2 resolution;',\n 'uniform float lineWidth;',\n 'void main() {',\n ' vec2 aspect = vec2(resolution.x / resolution.y, 1.0);',\n '',\n ' v_color = color;',\n ' v_counter = counter;',\n ' v_track_id = track_id;',\n '',\n ' mat4 m = projectionMatrix * modelViewMatrix;',\n ' vec4 finalPosition = m * vec4(position, 1.0);',\n ' vec4 prevPos = m * vec4(previous, 1.0);',\n ' vec4 nextPos = m * vec4(next, 1.0);',\n '',\n ' vec2 curP = finalPosition.xy / finalPosition.w * aspect;',\n ' vec2 prevP = prevPos.xy / prevPos.w * aspect;',\n ' vec2 nextP = nextPos.xy / nextPos.w * aspect;',\n '',\n ' vec2 dir;',\n ' if (curP == prevP) dir = normalize(nextP - curP);',\n ' else if (curP == nextP) dir = normalize(curP - prevP);',\n ' else dir = normalize(curP - prevP);',\n '',\n ' vec2 normal = vec2(-dir.y, dir.x);',\n ' normal.xy *= .5 * lineWidth;',\n ' normal.x /= aspect.x;',\n ' normal.xy *= finalPosition.w * 0.001;',\n\n ' finalPosition.xy += normal.xy * side;',\n ' gl_Position = finalPosition;',\n '}',\n].join('\\n');\n\n/** Custom fragment shadre for track. */\nShaderChunk['tracks_frag'] = [\n 'uniform float progress;',\n 'varying vec3 v_color;',\n 'varying float v_counter;',\n 'flat varying int v_track_id;',\n 'void main() {',\n ' if (v_counter > progress) discard;',\n ' gl_FragColor = vec4(v_color, 1.0);',\n '}',\n].join('\\n');\n\n/**\n * Custom material for the tracks.\n */\nexport class TracksMaterial extends ShaderMaterial {\n /** If the material is of track. */\n isTracksMaterial: boolean;\n\n /**\n * Create the tracks material.\n * @param params Params for creating the tracks material.\n */\n constructor(params) {\n super({\n uniforms: Object.assign(\n {},\n {\n lineWidth: { value: 1 },\n resolution: { value: new Vector2(1, 1) },\n progress: { value: 1 },\n }\n ),\n vertexShader: ShaderChunk.tracks_vert,\n fragmentShader: ShaderChunk.tracks_frag,\n });\n this.isTracksMaterial = true;\n this.type = 'TracksMaterial';\n\n Object.defineProperties(this, {\n lineWidth: {\n enumerable: true,\n get: function () {\n return this.uniforms.lineWidth.value;\n },\n set: function (value) {\n this.uniforms.lineWidth.value = value;\n },\n },\n resolution: {\n enumerable: true,\n get: function () {\n return this.uniforms.resolution.value;\n },\n set: function (value) {\n this.uniforms.resolution.value.copy(value);\n },\n },\n progress: {\n enumerable: true,\n get: function () {\n return this.uniforms.progress.value;\n },\n set: function (value) {\n this.uniforms.progress.value = value;\n },\n },\n });\n\n this.setValues(params);\n }\n}\n\n \n\n\n\n\n\n\n\n\n\n\n \n \n results matching \"\"\n \n \n \n No results matching \"\"\n \n\n"},"classes/URLOptionsManager.html":{"url":"classes/URLOptionsManager.html","title":"class - URLOptionsManager","body":"\n \n\n\n\n\n\n\n\n\n\n\n\n\n\n Classes\n URLOptionsManager\n\n\n\n \n Info\n \n \n Source\n \n\n\n\n \n \n File\n \n \n src/managers/url-options-manager.ts\n \n\n\n \n Description\n \n \n A manager for managing options given through URL.\n\n \n\n\n\n\n \n Index\n \n \n \n \n Properties\n \n \n \n \n \n \n Private\n urlOptions\n \n \n \n \n\n \n \n Methods\n \n \n \n \n \n \n Public\n applyEmbedOption\n \n \n Public\n applyEventOptions\n \n \n Public\n applyHideWidgetsOptions\n \n \n Public\n applyOptions\n \n \n Public\n getURLOptions\n \n \n Private\n Async\n handleJiveXMLEvent\n \n \n Private\n Async\n handleJSONEvent\n \n \n Private\n Async\n handleZipFileEvents\n \n \n Private\n hideIdsWithURLOption\n \n \n \n \n\n\n\n\n\n \n \n\n\n \n Constructor\n \n \n \n \nconstructor(eventDisplay: EventDisplay, configuration: Configuration)\n \n \n \n \n Defined in src/managers/url-options-manager.ts:24\n \n \n\n \n \n Constructor for the URL options manager.\n\n \n Parameters :\n \n \n \n Name\n Type\n Optional\n Description\n \n \n \n \n eventDisplay\n \n \n EventDisplay\n \n \n \n No\n \n \n \n The Phoenix event display.\n\n \n \n \n configuration\n \n \n Configuration\n \n \n \n No\n \n \n \n Configuration of the event display.\n\n \n \n \n \n \n \n \n \n \n\n\n \n \n \n Properties\n \n \n \n \n \n \n \n Private\n urlOptions\n \n \n \n \n \n \n Type : URLSearchParams\n\n \n \n \n \n Defined in src/managers/url-options-manager.ts:24\n \n \n\n \n \n Variable containing all URL search parameters.\n\n \n \n\n \n \n\n\n \n \n \n Methods\n \n \n \n \n \n \n \n Public\n applyEmbedOption\n \n \n \n \n \n \n \n applyEmbedOption()\n \n \n\n\n \n \n Defined in src/managers/url-options-manager.ts:227\n \n \n\n\n \n \n Hide all overlay widgets and enable embed menu if \"hideWidgets\" option from the URL is true.\n\n\n \n Returns : void\n\n \n \n \n \n \n \n \n \n \n \n \n Public\n applyEventOptions\n \n \n \n \n \n \n \n applyEventOptions(defaultEventPath?: string, defaultEventType?: string)\n \n \n\n\n \n \n Defined in src/managers/url-options-manager.ts:59\n \n \n\n\n \n \n Initialize the event display with event data and configuration from URL.\n(Only JiveXML and JSON)\n\n\n \n Parameters :\n \n \n \n \n Name\n Type\n Optional\n Description\n \n \n \n \n defaultEventPath\n \n string\n \n\n \n Yes\n \n\n\n \n Default event path to fallback to if none in URL.\n\n \n \n \n defaultEventType\n \n string\n \n\n \n Yes\n \n\n\n \n Default event type to fallback to if none in URL.\n\n \n \n \n \n \n \n \n \n Returns : void\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n Public\n applyHideWidgetsOptions\n \n \n \n \n \n \n \n applyHideWidgetsOptions()\n \n \n\n\n \n \n Defined in src/managers/url-options-manager.ts:209\n \n \n\n\n \n \n Hide all overlay widgets if \"hideWidgets\" option from the URL is true.\n\n\n \n Returns : void\n\n \n \n \n \n \n \n \n \n \n \n \n Public\n applyOptions\n \n \n \n \n \n \n \n applyOptions()\n \n \n\n\n \n \n Defined in src/managers/url-options-manager.ts:43\n \n \n\n\n \n \n Initialize and apply all URL options on page load.\n\n\n \n Returns : void\n\n \n \n \n \n \n \n \n \n \n \n \n Public\n getURLOptions\n \n \n \n \n \n \n \n getURLOptions()\n \n \n\n\n \n \n Defined in src/managers/url-options-manager.ts:268\n \n \n\n\n \n \n Get options from URL set through query parameters.\n\n\n \n \n \n Returns : URLSearchParams\n\n \n \n URL options.\n\n \n \n \n \n \n \n \n \n \n \n \n Private\n Async\n handleJiveXMLEvent\n \n \n \n \n \n \n \n handleJiveXMLEvent(fileURL: string)\n \n \n\n\n \n \n Defined in src/managers/url-options-manager.ts:143\n \n \n\n\n \n \n Handle JiveXML event from file URL.\n\n\n \n Parameters :\n \n \n \n \n Name\n Type\n Optional\n Description\n \n \n \n \n fileURL\n \n string\n \n\n \n No\n \n\n\n \n URL to the XML file.\n\n \n \n \n \n \n \n \n \n Returns : any\n\n \n \n An empty promise. ;(\n\n \n \n \n \n \n \n \n \n \n \n \n Private\n Async\n handleJSONEvent\n \n \n \n \n \n \n \n handleJSONEvent(fileURL: string)\n \n \n\n\n \n \n Defined in src/managers/url-options-manager.ts:158\n \n \n\n\n \n \n Handle JSON event from file URL.\n\n\n \n Parameters :\n \n \n \n \n Name\n Type\n Optional\n Description\n \n \n \n \n fileURL\n \n string\n \n\n \n No\n \n\n\n \n URL to the JSON file.\n\n \n \n \n \n \n \n \n \n Returns : any\n\n \n \n An empty promise. ;(\n\n \n \n \n \n \n \n \n \n \n \n \n Private\n Async\n handleZipFileEvents\n \n \n \n \n \n \n \n handleZipFileEvents(fileURL: string)\n \n \n\n\n \n \n Defined in src/managers/url-options-manager.ts:169\n \n \n\n\n \n \n Handle zip containing event data files.\n\n\n \n Parameters :\n \n \n \n \n Name\n Type\n Optional\n Description\n \n \n \n \n fileURL\n \n string\n \n\n \n No\n \n\n\n \n URL to the zip file.\n\n \n \n \n \n \n \n \n \n Returns : any\n\n \n \n An empty promise. ;(\n\n \n \n \n \n \n \n \n \n \n \n \n Private\n hideIdsWithURLOption\n \n \n \n \n \n \n \n hideIdsWithURLOption(urlOptionWithIds: literal type)\n \n \n\n\n \n \n Defined in src/managers/url-options-manager.ts:252\n \n \n\n\n \n \n Hide element with IDs based on a URL option.\n\n\n \n Parameters :\n \n \n \n \n Name\n Type\n Optional\n Description\n \n \n \n \n urlOptionWithIds\n \n literal type\n \n\n \n No\n \n\n\n \n IDs to hide with keys as the URL option and its array value as IDs.\n\n \n \n \n \n \n \n \n \n Returns : void\n\n \n \n \n \n \n \n \n \n\n\n\n\n\n\n \n\n\n \n import { JiveXMLLoader } from '../loaders/jivexml-loader';\nimport { PhoenixLoader } from '../loaders/phoenix-loader';\nimport { Configuration } from '../lib/types/configuration';\nimport { EventDisplay } from '../event-display';\nimport { StateManager } from './state-manager';\nimport { readZipFile } from '../helpers/zip';\n\n/**\n * Model for Phoenix URL options.\n */\nexport const phoenixURLOptions = {\n file: '',\n type: '',\n config: '',\n hideWidgets: false,\n embed: false,\n};\n\n/**\n * A manager for managing options given through URL.\n */\nexport class URLOptionsManager {\n /** Variable containing all URL search parameters. */\n private urlOptions: URLSearchParams;\n\n /**\n * Constructor for the URL options manager.\n * @param eventDisplay The Phoenix event display.\n * @param configuration Configuration of the event display.\n */\n constructor(\n private eventDisplay: EventDisplay,\n private configuration: Configuration\n ) {\n this.urlOptions = new URLSearchParams(\n window.location.href.substr(window.location.href.lastIndexOf('?'))\n );\n }\n\n /**\n * Initialize and apply all URL options on page load.\n */\n public applyOptions() {\n // Initialize event with data from URL if there is any\n this.applyEventOptions(\n this.configuration.defaultEventFile?.eventFile,\n this.configuration.defaultEventFile?.eventType\n );\n this.applyHideWidgetsOptions();\n this.applyEmbedOption();\n }\n\n /**\n * Initialize the event display with event data and configuration from URL.\n * (Only JiveXML and JSON)\n * @param defaultEventPath Default event path to fallback to if none in URL.\n * @param defaultEventType Default event type to fallback to if none in URL.\n */\n public applyEventOptions(\n defaultEventPath?: string,\n defaultEventType?: string\n ) {\n if (!('fetch' in window)) {\n return;\n }\n\n let file: string, type: string;\n\n if (\n (!this.urlOptions.get('file') && this.urlOptions.get('type')) ||\n (this.urlOptions.get('file') && !this.urlOptions.get('type'))\n ) {\n console.log(\n 'WARNING - if you set one of type or file, then you need to set both!'\n );\n console.log('WARNING - reverting to defaults!');\n }\n\n if (!this.urlOptions.get('file') || !this.urlOptions.get('type')) {\n console.log('Setting and config from defaults');\n file = defaultEventPath;\n type = defaultEventType;\n } else {\n console.log('Setting and config from urlOptions');\n file = this.urlOptions.get('file');\n type = this.urlOptions.get('type').toLowerCase();\n }\n\n console.log('Loading ', file, 'of type', type);\n // Load config from URL\n const loadConfig = () => {\n if (this.urlOptions.get('config')) {\n this.eventDisplay.getLoadingManager().addLoadableItem('url_config');\n fetch(this.urlOptions.get('config'))\n .then((res) => res.json())\n .then((jsonState) => {\n const stateManager = new StateManager();\n stateManager.loadStateFromJSON(jsonState);\n })\n .finally(() => {\n this.eventDisplay.getLoadingManager().itemLoaded('url_config');\n });\n }\n };\n\n const processEventFile = (fileURL: string) => {\n if (type === 'jivexml') {\n console.log('Opening JiveXML');\n return this.handleJiveXMLEvent(fileURL);\n } else if (type === 'zip') {\n console.log('Opening zip file');\n return this.handleZipFileEvents(fileURL);\n } else {\n return this.handleJSONEvent(fileURL);\n }\n };\n\n // Load event file from URL\n if (file && type) {\n this.eventDisplay.getLoadingManager().addLoadableItem('url_event');\n processEventFile(file)\n .catch((error) => {\n this.eventDisplay\n .getInfoLogger()\n .add('Could not find the file specified in URL.', 'Error');\n console.error('Could not find the file specified in URL.', error);\n })\n .finally(() => {\n // Load config from URL after loading the event\n loadConfig();\n this.eventDisplay.getLoadingManager().itemLoaded('url_event');\n });\n } else {\n loadConfig();\n }\n }\n\n /**\n * Handle JiveXML event from file URL.\n * @param fileURL URL to the XML file.\n * @returns An empty promise. ;(\n */\n private async handleJiveXMLEvent(fileURL: string) {\n const fileData = await (await fetch(fileURL)).text();\n const loader = new JiveXMLLoader();\n this.configuration.eventDataLoader = loader;\n // Parse the XML to extract events and their data\n loader.process(fileData);\n const eventData = loader.getEventData();\n this.eventDisplay.buildEventDataFromJSON(eventData);\n }\n\n /**\n * Handle JSON event from file URL.\n * @param fileURL URL to the JSON file.\n * @returns An empty promise. ;(\n */\n private async handleJSONEvent(fileURL: string) {\n const fileData = await (await fetch(fileURL)).json();\n this.configuration.eventDataLoader = new PhoenixLoader();\n this.eventDisplay.parsePhoenixEvents(fileData);\n }\n\n /**\n * Handle zip containing event data files.\n * @param fileURL URL to the zip file.\n * @returns An empty promise. ;(\n */\n private async handleZipFileEvents(fileURL: string) {\n const fileBuffer = await (await fetch(fileURL)).arrayBuffer();\n const allEventsObject = {};\n let filesWithData: { [fileName: string]: string };\n\n // Using a try catch block to catch any errors in Promises\n try {\n filesWithData = await readZipFile(fileBuffer);\n } catch (error) {\n console.error('Error while reading zip', error);\n this.eventDisplay.getInfoLogger().add('Could not read zip file', 'Error');\n return;\n }\n\n // JSON event data\n Object.keys(filesWithData)\n .filter((fileName) => fileName.endsWith('.json'))\n .forEach((fileName) => {\n Object.assign(allEventsObject, JSON.parse(filesWithData[fileName]));\n });\n\n // JiveXML event data\n const jiveloader = new JiveXMLLoader();\n Object.keys(filesWithData)\n .filter((fileName) => {\n return fileName.endsWith('.xml') || fileName.startsWith('JiveXML');\n })\n .forEach((fileName) => {\n jiveloader.process(filesWithData[fileName]);\n const eventData = jiveloader.getEventData();\n Object.assign(allEventsObject, { [fileName]: eventData });\n });\n // For some reason the above doesn't pick up JiveXML_XXX_YYY.zip\n\n this.eventDisplay.parsePhoenixEvents(allEventsObject);\n }\n\n /**\n * Hide all overlay widgets if \"hideWidgets\" option from the URL is true.\n */\n public applyHideWidgetsOptions() {\n const hideWidgetsOptions = {\n hideWidgets: [\n 'mainLogo', // Main logo\n 'uiMenu', // UI menu\n 'experimentInfo', // Experiment info\n 'phoenixMenu', // Phoenix menu\n 'statsElement', // Stats at the bottom left\n 'gui', // dat.GUI menu\n ],\n };\n\n this.hideIdsWithURLOption(hideWidgetsOptions);\n }\n\n /**\n * Hide all overlay widgets and enable embed menu if \"hideWidgets\" option from the URL is true.\n */\n public applyEmbedOption() {\n if (this.urlOptions.get('embed') === 'true') {\n const hideWidgetsOptions = {\n embed: [\n 'mainLogo', // Main logo\n 'uiMenu', // UI menu\n 'experimentInfo', // Experiment info\n 'phoenixMenu', // Phoenix menu\n 'statsElement', // Stats at the bottom left\n 'gui', // dat.GUI menu\n ],\n };\n\n this.hideIdsWithURLOption(hideWidgetsOptions);\n\n document\n .getElementById('embedMenu')\n ?.style.setProperty('display', 'block');\n }\n }\n\n /**\n * Hide element with IDs based on a URL option.\n * @param urlOptionWithIds IDs to hide with keys as the URL option and its array value as IDs.\n */\n private hideIdsWithURLOption(urlOptionWithIds: { [key: string]: string[] }) {\n Object.entries(urlOptionWithIds).forEach(([urlOption, idsToHide]) => {\n if (this.urlOptions.get(urlOption) === 'true') {\n idsToHide.forEach((singleId) => {\n document\n .getElementById(singleId)\n ?.style.setProperty('display', 'none');\n });\n }\n });\n }\n\n /**\n * Get options from URL set through query parameters.\n * @returns URL options.\n */\n public getURLOptions() {\n return this.urlOptions;\n }\n}\n\n \n\n\n\n\n\n\n\n\n\n\n \n \n results matching \"\"\n \n \n \n No results matching \"\"\n \n\n"},"classes/VRManager.html":{"url":"classes/VRManager.html","title":"class - VRManager","body":"\n \n\n\n\n\n\n\n\n\n\n\n\n\n\n Classes\n VRManager\n\n\n\n \n Info\n \n \n Source\n \n\n\n\n \n \n File\n \n \n src/managers/three-manager/xr/vr-manager.ts\n \n\n\n \n Description\n \n \n VR manager for VR related operations.\n\n \n\n \n Extends\n \n \n XRManager\n \n\n\n\n \n Index\n \n \n \n \n Properties\n \n \n \n \n \n \n Private\n controller1\n \n \n Private\n controller2\n \n \n Private\n controllerGrip1\n \n \n Private\n controllerGrip2\n \n \n Private\n onControllerSelectEnd\n \n \n Private\n onControllerSelectStart\n \n \n Static\n Readonly\n SESSION_TYPE\n \n \n Public\n cameraGroup\n \n \n Protected\n currentXRSession\n \n \n Protected\n onSessionEnded\n \n \n Protected\n renderer\n \n \n Protected\n sessionInit\n \n \n Protected\n xrActive\n \n \n Public\n xrCamera\n \n \n \n \n\n \n \n Methods\n \n \n \n \n \n \n Private\n moveInDirection\n \n \n Protected\n onXRSessionEnded\n \n \n Private\n setupVRControls\n \n \n Public\n setXRSession\n \n \n Public\n endXRSession\n \n \n Public\n getCameraGroup\n \n \n Public\n getXRCamera\n \n \n Protected\n Async\n onXRSessionStarted\n \n \n \n \n\n\n\n\n\n \n \n\n\n \n Constructor\n \n \n \n \nconstructor()\n \n \n \n \n Defined in src/managers/three-manager/xr/vr-manager.ts:28\n \n \n\n \n \n Create the VR manager.\n\n \n \n \n \n\n\n \n \n \n Properties\n \n \n \n \n \n \n \n Private\n controller1\n \n \n \n \n \n \n Type : any\n\n \n \n \n \n Defined in src/managers/three-manager/xr/vr-manager.ts:17\n \n \n\n \n \n The VR controller for movement.\n\n \n \n\n \n \n \n \n \n \n \n \n Private\n controller2\n \n \n \n \n \n \n Type : any\n\n \n \n \n \n Defined in src/managers/three-manager/xr/vr-manager.ts:19\n \n \n\n \n \n The VR controller for movement.\n\n \n \n\n \n \n \n \n \n \n \n \n Private\n controllerGrip1\n \n \n \n \n \n \n Type : any\n\n \n \n \n \n Defined in src/managers/three-manager/xr/vr-manager.ts:21\n \n \n\n \n \n The VR controller representation\n\n \n \n\n \n \n \n \n \n \n \n \n Private\n controllerGrip2\n \n \n \n \n \n \n Type : any\n\n \n \n \n \n Defined in src/managers/three-manager/xr/vr-manager.ts:23\n \n \n\n \n \n The VR controller representation\n\n \n \n\n \n \n \n \n \n \n \n \n Private\n onControllerSelectEnd\n \n \n \n \n \n \n Type : function\n\n \n \n \n \n Defined in src/managers/three-manager/xr/vr-manager.ts:28\n \n \n\n \n \n Listener for when the \"Select Start\" button is released.\n\n \n \n\n \n \n \n \n \n \n \n \n Private\n onControllerSelectStart\n \n \n \n \n \n \n Type : function\n\n \n \n \n \n Defined in src/managers/three-manager/xr/vr-manager.ts:26\n \n \n\n \n \n Listener for when the \"Select Start\" button is pushed.\n\n \n \n\n \n \n \n \n \n \n \n \n Static\n Readonly\n SESSION_TYPE\n \n \n \n \n \n \n Type : string\n\n \n \n \n \n Default value : 'immersive-vr'\n \n \n \n \n Defined in src/managers/three-manager/xr/vr-manager.ts:15\n \n \n\n \n \n Session type to use for VR.\n\n \n \n\n \n \n \n \n \n \n \n \n Public\n cameraGroup\n \n \n \n \n \n \n Type : Group\n\n \n \n \n \n Inherited from XRManager\n\n \n \n \n \n Defined in XRManager:36\n\n \n \n\n \n \n Group containing the the camera for XR.\n\n \n \n\n \n \n \n \n \n \n \n \n Protected\n currentXRSession\n \n \n \n \n \n \n Type : any\n\n \n \n \n \n Default value : null\n \n \n \n \n Inherited from XRManager\n\n \n \n \n \n Defined in XRManager:32\n\n \n \n\n \n \n Currently active XR session.\n\n \n \n\n \n \n \n \n \n \n \n \n Protected\n onSessionEnded\n \n \n \n \n \n \n Type : function\n\n \n \n \n \n Inherited from XRManager\n\n \n \n \n \n Defined in XRManager:34\n\n \n \n\n \n \n Callback to call when the XR session ends.\n\n \n \n\n \n \n \n \n \n \n \n \n Protected\n renderer\n \n \n \n \n \n \n Type : WebGLRenderer\n\n \n \n \n \n Inherited from XRManager\n\n \n \n \n \n Defined in XRManager:30\n\n \n \n\n \n \n Renderer to set the XR session for.\n\n \n \n\n \n \n \n \n \n \n \n \n Protected\n sessionInit\n \n \n \n \n \n \n Type : function\n\n \n \n \n \n Inherited from XRManager\n\n \n \n \n \n Defined in XRManager:28\n\n \n \n\n \n \n Returns required and optional features when requesting an XR session.\n\n \n \n\n \n \n \n \n \n \n \n \n Protected\n xrActive\n \n \n \n \n \n \n Type : boolean\n\n \n \n \n \n Default value : false\n \n \n \n \n Inherited from XRManager\n\n \n \n \n \n Defined in XRManager:26\n\n \n \n\n \n \n Whether the XR is currently active or not.\n\n \n \n\n \n \n \n \n \n \n \n \n Public\n xrCamera\n \n \n \n \n \n \n Type : Camera\n\n \n \n \n \n Inherited from XRManager\n\n \n \n \n \n Defined in XRManager:38\n\n \n \n\n \n \n The camera used by XR.\n\n \n \n\n \n \n\n\n \n \n \n Methods\n \n \n \n \n \n \n \n Private\n moveInDirection\n \n \n \n \n \n \n \n moveInDirection(direction: Vector3, stepDistance: number)\n \n \n\n\n \n \n Defined in src/managers/three-manager/xr/vr-manager.ts:149\n \n \n\n\n \n \n Move the camera in the given direction.\n\n\n \n Parameters :\n \n \n \n \n Name\n Type\n Optional\n Description\n \n \n \n \n direction\n \n Vector3\n \n\n \n No\n \n\n\n \n Direction to move towards.\n\n \n \n \n stepDistance\n \n number\n \n\n \n No\n \n\n\n \n Distance to move by.\n\n \n \n \n \n \n \n \n \n Returns : void\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n Protected\n onXRSessionEnded\n \n \n \n \n \n \n \n onXRSessionEnded()\n \n \n\n\n \n \n Inherited from XRManager\n\n \n \n \n \n Defined in XRManager:61\n\n \n \n\n\n \n \n Callback when the VR session ends.\n\n\n \n Returns : void\n\n \n \n \n \n \n \n \n \n \n \n \n Private\n setupVRControls\n \n \n \n \n \n \n \n setupVRControls()\n \n \n\n\n \n \n Defined in src/managers/three-manager/xr/vr-manager.ts:77\n \n \n\n\n \n \n Set up VR controls for moving around the event display.\n\n\n \n Returns : void\n\n \n \n \n \n \n \n \n \n \n \n \n Public\n setXRSession\n \n \n \n \n \n \n \n setXRSession(renderer: WebGLRenderer, onSessionStarted?: () => void, onSessionEnded?: () => void)\n \n \n\n\n \n \n Inherited from XRManager\n\n \n \n \n \n Defined in XRManager:48\n\n \n \n\n\n \n \n Set and configure the VR session.\n\n\n \n Parameters :\n \n \n \n \n Name\n Type\n Optional\n Description\n \n \n \n \n renderer\n \n WebGLRenderer\n \n\n \n No\n \n\n\n \n Renderer to set the VR session for.\n\n \n \n \n onSessionStarted\n \n function\n \n\n \n Yes\n \n\n\n \n Callback to call when the VR session starts.\n\n \n \n \n onSessionEnded\n \n function\n \n\n \n Yes\n \n\n\n \n Callback to call when the VR session ends.\n\n \n \n \n \n \n \n \n \n Returns : void\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n Public\n endXRSession\n \n \n \n \n \n \n \n endXRSession()\n \n \n\n\n \n \n Inherited from XRManager\n\n \n \n \n \n Defined in XRManager:99\n\n \n \n\n\n \n \n End the current XR session.\n\n\n \n Returns : void\n\n \n \n \n \n \n \n \n \n \n \n \n Public\n getCameraGroup\n \n \n \n \n \n \n \n getCameraGroup(camera?: Camera)\n \n \n\n\n \n \n Inherited from XRManager\n\n \n \n \n \n Defined in XRManager:109\n\n \n \n\n\n \n \n Get the group containing the camera for XR.\nXR camera works by adding a Group with Camera to the scene.\n\n\n \n Parameters :\n \n \n \n \n Name\n Type\n Optional\n Description\n \n \n \n \n camera\n \n Camera\n \n\n \n Yes\n \n\n\n \n Camera which is to be cloned for XR use.\n\n \n \n \n \n \n \n \n \n Returns : Group\n\n \n \n The camera group used in XR mode.\n\n \n \n \n \n \n \n \n \n \n \n \n Public\n getXRCamera\n \n \n \n \n \n \n \n getXRCamera()\n \n \n\n\n \n \n Inherited from XRManager\n\n \n \n \n \n Defined in XRManager:135\n\n \n \n\n\n \n \n Get the camera used by XR.\n\n\n \n \n \n Returns : Camera\n\n \n \n The camera used by XR.\n\n \n \n \n \n \n \n \n \n \n \n \n Protected\n Async\n onXRSessionStarted\n \n \n \n \n \n \n \n onXRSessionStarted(session: any)\n \n \n\n\n \n \n Inherited from XRManager\n\n \n \n \n \n Defined in XRManager:78\n\n \n \n\n\n \n \n Callback for when the XR session is started.\n\n\n \n Parameters :\n \n \n \n \n Name\n Type\n Optional\n Description\n \n \n \n \n session\n \n any\n \n\n \n No\n \n\n\n \n The XR session.\n\n \n \n \n \n \n \n \n \n Returns : any\n\n \n \n \n \n \n \n \n \n\n\n\n\n\n\n \n\n\n \n import { WebGLRenderer, Vector3, BufferGeometry, Line } from 'three';\nimport { XRControllerModelFactory } from 'three/examples/jsm/webxr/XRControllerModelFactory';\nimport { XRManager, XRSessionType } from './xr-manager';\n\n// NOTE: This was created on 29/08/2020\n// It might become outdated given how WebXR is still a work in progress\n\n// LAST UPDATED ON 20/06/2021\n\n/**\n * VR manager for VR related operations.\n */\nexport class VRManager extends XRManager {\n /** Session type to use for VR. */\n static readonly SESSION_TYPE: string = 'immersive-vr';\n /** The VR controller for movement. */\n private controller1: any;\n /** The VR controller for movement. */\n private controller2: any;\n /** The VR controller representation */\n private controllerGrip1: any;\n /** The VR controller representation */\n private controllerGrip2: any;\n\n /** Listener for when the \"Select Start\" button is pushed. */\n private onControllerSelectStart: () => void;\n /** Listener for when the \"Select Start\" button is released. */\n private onControllerSelectEnd: () => void;\n\n /**\n * Create the VR manager.\n * @override\n */\n constructor() {\n super(XRSessionType.VR);\n this.sessionInit = () => ({\n optionalFeatures: ['local-floor', 'bounded-floor', 'hand-tracking'],\n });\n }\n\n /**\n * Set and configure the VR session.\n * @param renderer Renderer to set the VR session for.\n * @param onSessionStarted Callback to call when the VR session starts.\n * @param onSessionEnded Callback to call when the VR session ends.\n * @override\n */\n public setXRSession(\n renderer: WebGLRenderer,\n onSessionStarted?: () => void,\n onSessionEnded?: () => void\n ) {\n super.setXRSession(renderer, onSessionStarted, onSessionEnded);\n this.setupVRControls();\n }\n\n /**\n * Callback when the VR session ends.\n * @override\n */\n protected onXRSessionEnded() {\n super.onXRSessionEnded();\n\n this.controller1?.removeEventListener(\n 'selectstart',\n this.onControllerSelectStart\n );\n this.controller1?.removeEventListener(\n 'selectend',\n this.onControllerSelectEnd\n );\n }\n\n /**\n * Set up VR controls for moving around the event display.\n */\n private setupVRControls() {\n // Get the controllers\n this.controller1 = this.renderer.xr.getController(0);\n this.getCameraGroup().add(this.controller1);\n this.controller2 = this.renderer.xr.getController(1);\n this.getCameraGroup().add(this.controller2);\n\n const controllerModelFactory = new XRControllerModelFactory();\n this.controllerGrip1 = this.renderer.xr.getControllerGrip(0);\n this.controllerGrip1.add(\n controllerModelFactory.createControllerModel(this.controllerGrip1)\n );\n this.getCameraGroup().add(this.controllerGrip1);\n\n this.controllerGrip2 = this.renderer.xr.getControllerGrip(1);\n this.controllerGrip2.add(\n controllerModelFactory.createControllerModel(this.controllerGrip2)\n );\n this.getCameraGroup().add(this.controllerGrip2);\n\n const geometry = new BufferGeometry().setFromPoints([\n new Vector3(0, 0, 0),\n new Vector3(0, 0, -1),\n ]);\n\n const line = new Line(geometry);\n line.name = 'line';\n line.scale.z = 50;\n\n this.controller1.add(line.clone());\n this.controller2.add(line.clone());\n\n // Set up movement\n\n // Distance for a single step\n const stepDistance = 30;\n // Unit vector in camera direction\n const direction = new Vector3();\n // Interval ID for the movement interval\n let intervalId: NodeJS.Timeout;\n\n this.onControllerSelectStart = () => {\n console.log(\n 'Select: c1 position ' + this.controller1.position.toArray().join(', ')\n );\n console.log(\n 'Select: CG position ' + this.cameraGroup.position.toArray().join(', ')\n );\n\n // Start movement in camera direction\n intervalId = setInterval(() => {\n this.moveInDirection(direction, stepDistance);\n }, 20);\n };\n\n this.onControllerSelectEnd = () => {\n // Stop the movement\n clearInterval(intervalId);\n };\n\n this.controller1.addEventListener(\n 'selectstart',\n this.onControllerSelectStart\n );\n this.controller1.addEventListener('selectend', this.onControllerSelectEnd);\n }\n\n /**\n * Move the camera in the given direction.\n * @param direction Direction to move towards.\n * @param stepDistance Distance to move by.\n */\n private moveInDirection(direction: Vector3, stepDistance: number) {\n // Get the direction the controller is facing\n //! this.controller.getWorldDirection(direction);\n\n // Get direction the camera is facing\n this.xrCamera?.getWorldDirection(direction);\n\n // Move the camera in the given direction\n this.cameraGroup.position.addScaledVector(direction, stepDistance);\n this.xrCamera.position.addScaledVector(direction, stepDistance);\n }\n}\n\n \n\n\n\n\n\n\n\n\n\n\n \n \n results matching \"\"\n \n \n \n No results matching \"\"\n \n\n"},"interfaces/Window.html":{"url":"interfaces/Window.html","title":"interface - Window","body":"\n \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n Interfaces\n \n Window\n\n\n\n \n Info\n \n \n Source\n \n\n\n\n \n \n File\n \n \n src/event-display.ts\n \n\n\n \n Description\n \n \n Window interface for adding objects to the window object.\n\n \n\n\n \n Index\n \n \n \n \n Properties\n \n \n \n \n \n \n \n EventDisplay\n \n \n \n \n \n \n \n \n\n\n\n \n Properties\n \n \n \n \n \n EventDisplay\n \n \n \n \n \n \n \n \n EventDisplay: any\n\n \n \n\n\n \n \n Type : any\n\n \n \n\n\n\n\n\n \n \n EventDisplay object containing event display related functions.\n\n \n \n \n \n \n \n\n\n \n import { httpRequest } from 'jsroot';\nimport { settings as jsrootSettings } from 'jsroot';\nimport { build } from 'jsroot/geom';\nimport { openFile } from 'jsroot/io';\nimport { ThreeManager } from './managers/three-manager';\nimport { UIManager } from './managers/ui-manager';\nimport { InfoLogger } from './helpers/info-logger';\nimport { Configuration } from './lib/types/configuration';\nimport { StateManager } from './managers/state-manager';\nimport { LoadingManager } from './managers/loading-manager';\nimport { URLOptionsManager } from './managers/url-options-manager';\nimport { ActiveVariable } from './helpers/active-variable';\nimport { AnimationPreset } from './managers/three-manager/animations-manager';\nimport { XRSessionType } from './managers/three-manager/xr/xr-manager';\nimport { getLabelTitle } from './helpers/labels';\nimport { PhoenixLoader } from './loaders/phoenix-loader';\n\ndeclare global {\n /**\n * Window interface for adding objects to the window object.\n */\n interface Window {\n /** EventDisplay object containing event display related functions. */\n EventDisplay: any;\n }\n}\n\n/**\n * Phoenix event display class for managing detector geometries and event data.\n */\nexport class EventDisplay {\n /** Configuration for preset views and event data loader. */\n private configuration: Configuration;\n /** An object containing event data. */\n private eventsData: any;\n /** Array containing callbacks to be called when events change. */\n private onEventsChange: ((events: any) => void)[] = [];\n /** Array containing callbacks to be called when the displayed event changes. */\n private onDisplayedEventChange: ((nowDisplayingEvent: any) => void)[] = [];\n /** Three manager for three.js operations. */\n private graphicsLibrary: ThreeManager;\n /** Info logger for storing event display logs. */\n private infoLogger: InfoLogger;\n /** UI manager for UI menu. */\n private ui: UIManager;\n /** Loading manager for loadable resources */\n private loadingManager: LoadingManager;\n /** State manager for managing event display state. */\n private stateManager: StateManager;\n /** URL manager for managing options given through URL. */\n private urlOptionsManager: URLOptionsManager;\n\n /**\n * Create the Phoenix event display and intitialize all the elements.\n * @param configuration Configuration used to customize different aspects.\n */\n constructor(configuration?: Configuration) {\n this.loadingManager = new LoadingManager();\n this.infoLogger = new InfoLogger();\n this.graphicsLibrary = new ThreeManager(this.infoLogger);\n this.ui = new UIManager(this.graphicsLibrary);\n if (configuration) {\n this.init(configuration);\n }\n }\n\n /**\n * Initialize all the Phoenix event display elements.\n * @param configuration Configuration used to customize different aspects.\n */\n public init(configuration: Configuration) {\n this.configuration = configuration;\n\n // Initialize the three manager with configuration\n this.graphicsLibrary.init(configuration);\n // Initialize the UI with configuration\n this.ui.init(configuration);\n // Set up for the state manager\n this.getStateManager().setEventDisplay(this);\n\n // Animate loop\n const uiLoop = () => {\n this.ui.updateUI();\n };\n this.graphicsLibrary.setAnimationLoop(uiLoop);\n\n // Process and apply URL options\n this.urlOptionsManager = new URLOptionsManager(this, configuration);\n if (configuration.allowUrlOptions !== false) {\n this.urlOptionsManager.applyOptions();\n }\n\n // Allow adding elements through console\n this.enableEventDisplayConsole();\n // Allow keyboard controls\n this.enableKeyboardControls();\n }\n\n /**\n * Takes a screen shot of the current view\n * @param width the width of the picture to be created\n * @param height the height of the picture to be created\n * @param fitting the type of fitting to use in case width and height\n * ratio do not match the current screen ratio. Posible values are\n * - Crop : current view is cropped on both side or up and done to fit ratio\n * thus it is not stretched, but some parts are lost\n * - Stretch : current view is stretched to given format\n * this is the default and used also for any other value given to fitting\n */\n public makeScreenShot(\n width: number,\n height: number,\n fitting: string = 'Stretch'\n ) {\n this.graphicsLibrary.makeScreenShot(width, height, fitting);\n }\n\n /**\n * Initialize XR.\n * @param xrSessionType Type of the XR session. Either AR or VR.\n * @param onSessionEnded Callback when the XR session ends.\n */\n public initXR(xrSessionType: XRSessionType, onSessionEnded?: () => void) {\n this.graphicsLibrary.initXRSession(xrSessionType, onSessionEnded);\n }\n\n /**\n * End VR and remove VR settings.\n * @param xrSessionType Type of the XR session. Either AR or VR.\n */\n public endXR(xrSessionType: XRSessionType) {\n this.graphicsLibrary.endXRSession(xrSessionType);\n }\n\n /**\n * Receives an object containing all the eventKeys and saves it.\n * Then it loads by default the first event.\n * @param eventsData Object containing the event data.\n * @returns Array of strings containing the keys of the eventsData object.\n */\n public parsePhoenixEvents(eventsData: any): string[] {\n this.eventsData = eventsData;\n if (typeof this.configuration.eventDataLoader === 'undefined') {\n this.configuration.eventDataLoader = new PhoenixLoader();\n }\n const eventKeys =\n this.configuration.eventDataLoader.getEventsList(eventsData);\n this.loadEvent(eventKeys[0]);\n this.onEventsChange.forEach((callback) => callback(eventKeys));\n\n return eventKeys;\n }\n\n /**\n * Receives an object containing one event and builds the different collections\n * of physics objects.\n * @param eventData Object containing the event data.\n */\n public buildEventDataFromJSON(eventData: any) {\n // Reset labels\n this.resetLabels();\n // Creating UI folder\n this.ui.addEventDataFolder();\n this.ui.addLabelsFolder();\n // Clearing existing event data\n this.graphicsLibrary.clearEventData();\n // Build data and add to scene\n this.configuration.eventDataLoader.buildEventData(\n eventData,\n this.graphicsLibrary,\n this.ui,\n this.infoLogger\n );\n this.onDisplayedEventChange.forEach((callback) => callback(eventData));\n // Reload the event data state in Phoenix menu\n this.ui.loadEventFolderPhoenixMenuState();\n }\n\n /**\n * Receives a string representing the key of an event and loads\n * the event associated with that key.\n * @param eventKey String that represents the event in the eventsData object.\n */\n public loadEvent(eventKey: any) {\n const event = this.eventsData[eventKey];\n\n if (event) {\n this.buildEventDataFromJSON(event);\n }\n }\n\n /**\n * Get the three manager responsible for three.js functions.\n * @returns The three.js manager.\n */\n public getThreeManager() {\n return this.graphicsLibrary;\n }\n\n /**\n * Get the UI manager responsible for UI related functions.\n * @returns The UI manager.\n */\n public getUIManager() {\n return this.ui;\n }\n\n /**\n * Get the info logger containing event display logs.\n * @returns The info logger instance being used by the event display.\n */\n public getInfoLogger() {\n return this.infoLogger;\n }\n\n /**\n * Get the loading manager for managing loadable items.\n * @returns The loading manager.\n */\n public getLoadingManager() {\n return this.loadingManager;\n }\n\n /**\n * Get the state manager that manages event display's state.\n * @returns The state manager.\n */\n public getStateManager() {\n if (!this.stateManager) {\n this.stateManager = new StateManager();\n }\n\n return this.stateManager;\n }\n\n /**\n * Get the URL options manager that manages options given through URL.\n * @returns The URL options manager.\n */\n public getURLOptionsManager() {\n return this.urlOptionsManager;\n }\n\n // **********************\n // * LOADING GEOMETRIES *\n // **********************\n\n /**\n * Loads an OBJ (.obj) geometry from the given filename\n * and adds it to the dat.GUI menu.\n * @param filename Path to the geometry.\n * @param name Name given to the geometry.\n * @param color Color to initialize the geometry.\n * @param menuNodeName Name of the node in Phoenix menu to add the geometry to. Use > as a separator for specifying the hierarchy for sub-folders.\n * @param doubleSided If true, render both sides of the material.\n * @param initiallyVisible Whether the geometry is initially visible or not. Default `true`.\n * @param setFlat Whether object should be flat-shaded or not. Default `true`.\n * @returns Promise for loading the geometry.\n */\n public async loadOBJGeometry(\n filename: string,\n name: string,\n color: any,\n menuNodeName?: string,\n doubleSided?: boolean,\n initiallyVisible: boolean = true,\n setFlat: boolean = true\n ): Promise {\n this.loadingManager.addLoadableItem(`obj_geom_${name}`);\n\n const { object } = await this.graphicsLibrary.loadOBJGeometry(\n filename,\n name,\n color,\n doubleSided,\n initiallyVisible,\n setFlat\n );\n this.ui.addGeometry(object, menuNodeName);\n\n this.loadingManager.itemLoaded(`obj_geom_${name}`);\n this.infoLogger.add(name, 'Loaded OBJ geometry');\n }\n\n /**\n * Parses and loads an OBJ geometry from the given content\n * and adds it to the dat.GUI menu.\n * @param content Content of the OBJ geometry.\n * @param name Name given to the geometry.\n * @param menuNodeName Name of the node in Phoenix menu to add the geometry to. Use > as a separator for specifying the hierarchy for sub-folders.\n * @param initiallyVisible Whether the geometry is initially visible or not. Default `true`.\n */\n public parseOBJGeometry(\n content: string,\n name: string,\n menuNodeName?: string,\n initiallyVisible: boolean = true\n ) {\n this.loadingManager.addLoadableItem(`parse_obj_${name}`);\n const { object } = this.graphicsLibrary.parseOBJGeometry(\n content,\n name,\n initiallyVisible\n );\n this.ui.addGeometry(object, menuNodeName);\n this.loadingManager.itemLoaded(`parse_obj_${name}`);\n }\n\n /**\n * Exports scene to OBJ file format.\n */\n public exportToOBJ() {\n this.graphicsLibrary.exportSceneToOBJ();\n this.infoLogger.add('Exported scene to OBJ');\n }\n\n /**\n * Parse and load an event from the Phoenix file format (.phnx).\n * @param input Content containing the JSON with event data\n * and other configuration.\n * @returns Promise for loading the geometry.\n */\n public async parsePhoenixDisplay(input: any): Promise {\n const phoenixScene = JSON.parse(input);\n\n if (phoenixScene.sceneConfiguration && phoenixScene.scene) {\n // Creating UI folder\n this.ui.addEventDataFolder();\n this.ui.addLabelsFolder();\n // Clearing existing event data\n this.graphicsLibrary.clearEventData();\n // Add to scene\n this.loadSceneConfiguration(phoenixScene.sceneConfiguration);\n\n this.loadingManager.addLoadableItem(`parse_phnx_${name}`);\n await this.graphicsLibrary.parsePhnxScene(phoenixScene.scene);\n this.loadingManager.itemLoaded(`parse_phnx_${name}`);\n }\n }\n\n /**\n * Exports scene as phoenix format, allowing to load it later and recover the saved configuration.\n */\n public exportPhoenixDisplay() {\n this.graphicsLibrary.exportPhoenixScene();\n }\n\n /**\n * Parses and loads a geometry in GLTF (.gltf) format.\n * @param input Data of the GLTF (.gltf) file.\n * @param name Name given to the geometry. If empty Name will be taken from the geometry itself\n * @returns Promise for loading the geometry.\n */\n public async parseGLTFGeometry(\n input: string | ArrayBuffer,\n name: string\n ): Promise {\n this.loadingManager.addLoadableItem(`parse_gltf_${name}`);\n\n const allGeometriesUIParameters =\n await this.graphicsLibrary.parseGLTFGeometry(input, name);\n for (const { object } of allGeometriesUIParameters) {\n this.ui.addGeometry(object);\n }\n\n this.loadingManager.itemLoaded(`parse_gltf_${name}`);\n }\n\n /**\n * Loads a GLTF (.gltf) scene/geometry from the given URL.\n * and adds it to the dat.GUI menu.\n * @param url URL to the GLTF (.gltf) file.\n * @param name Name of the loaded scene/geometry.\n * @param menuNodeName Name of the node in Phoenix menu to add the geometry to. Use > as a separator for specifying the hierarchy for sub-folders.\n * @param scale Scale of the geometry.\n * @param initiallyVisible Whether the geometry is initially visible or not. Default `true`.\n * @returns Promise for loading the geometry.\n */\n public async loadGLTFGeometry(\n url: any,\n name: string | undefined,\n menuNodeName?: string,\n scale?: number,\n initiallyVisible: boolean = true\n ): Promise {\n this.loadingManager.addLoadableItem(`gltf_geom_${name}`);\n\n const allGeometriesUIParameters =\n await this.graphicsLibrary.loadGLTFGeometry(\n url,\n name,\n menuNodeName,\n scale,\n initiallyVisible\n );\n for (const { object, menuNodeName } of allGeometriesUIParameters) {\n this.ui.addGeometry(object, menuNodeName);\n }\n\n this.loadingManager.itemLoaded(`gltf_geom_${name}`);\n }\n\n /**\n * Loads geometries from JSON.\n * @param json JSON or URL to JSON file of the geometry.\n * @param name Name of the geometry or group of geometries.\n * @param menuNodeName Name of the node in Phoenix menu to add the geometry to. Use > as a separator for specifying the hierarchy for sub-folders.\n * @param scale Scale of the geometry.\n * @param doubleSided Renders both sides of the material.\n * @param initiallyVisible Whether the geometry is initially visible or not. Default `true`.\n * @returns Promise for loading the geometry.\n */\n public async loadJSONGeometry(\n json: string | { [key: string]: any },\n name: string,\n menuNodeName?: string,\n scale?: number,\n doubleSided?: boolean,\n initiallyVisible: boolean = true\n ): Promise {\n this.loadingManager.addLoadableItem(`json_geom_${name}`);\n\n const { object } = await this.graphicsLibrary.loadJSONGeometry(\n json,\n name,\n scale,\n doubleSided,\n initiallyVisible\n );\n this.ui.addGeometry(object, menuNodeName);\n\n this.loadingManager.itemLoaded(`json_geom_${name}`);\n this.infoLogger.add(name, 'Loaded JSON geometry');\n }\n\n /**\n * Load JSON geometry from JSRoot.\n * @param url URL of the JSRoot geometry file.\n * @param name Name of the geometry.\n * @param menuNodeName Name of the node in Phoenix menu to add the geometry to. Use > as a separator for specifying the hierarchy for sub-folders.\n * @param scale Scale of the geometry.\n * @param doubleSided Renders both sides of the material.\n * @param initiallyVisible Whether the geometry is initially visible or not. Default `true`.\n */\n public async loadRootJSONGeometry(\n url: string,\n name: string,\n menuNodeName?: string,\n scale?: number,\n doubleSided?: boolean,\n initiallyVisible: boolean = true\n ) {\n this.loadingManager.addLoadableItem('root_json_geom');\n\n const object = await httpRequest(url, 'object');\n await this.loadJSONGeometry(\n build(object, { dflt_colors: true }).toJSON(),\n name,\n menuNodeName,\n scale,\n doubleSided,\n initiallyVisible\n );\n\n this.loadingManager.itemLoaded('root_json_geom');\n }\n\n /**\n * Load ROOT geometry from JSRoot.\n * @param url URL of the JSRoot file.\n * @param objectName Name of the object inside the \".root\" file.\n * @param name Name of the geometry.\n * @param menuNodeName Name of the node in Phoenix menu to add the geometry to. Use > as a separator for specifying the hierarchy for sub-folders.\n * @param scale Scale of the geometry.\n * @param doubleSided Renders both sides of the material.\n * @param initiallyVisible Whether the geometry is initially visible or not. Default `true`.\n */\n public async loadRootGeometry(\n url: string,\n objectName: string,\n name: string,\n menuNodeName?: string,\n scale?: number,\n doubleSided?: boolean,\n initiallyVisible: boolean = true\n ) {\n this.loadingManager.addLoadableItem('root_geom');\n // See https://github.com/root-project/jsroot/blob/19ce116b68701ab45e0a092c673119bf97ede0c2/modules/core.mjs#L241.\n jsrootSettings.UseStamp = false;\n\n const file = await openFile(url);\n const obj = await file.readObject(objectName);\n\n await this.loadJSONGeometry(\n build(obj, { dflt_colors: true }).toJSON(),\n name,\n menuNodeName,\n scale,\n doubleSided,\n initiallyVisible\n );\n\n this.loadingManager.itemLoaded('root_geom');\n }\n\n /**\n * Build Geometry from thr passed parameters, where\n * @param parameters\n */\n public buildGeometryFromParameters(parameters: any): void {\n this.graphicsLibrary.addGeometryFromParameters(parameters);\n }\n\n /**\n * Zoom all the cameras by a specific zoom factor.\n * The factor may either be greater (zoom in) or smaller (zoom out) than 1.\n * @param zoomFactor The factor to zoom by.\n * @param zoomTime The time it takes for a zoom animation to complete.\n */\n public zoomTo(zoomFactor: number, zoomTime: number) {\n this.graphicsLibrary.zoomTo(zoomFactor, zoomTime);\n }\n\n /**\n * Processes event data and geometry for Loading the scene\n * from Phoenix file format (.phnx).\n * @param sceneConfiguration Scene configuration containingevent data and detector geometry.\n */\n private loadSceneConfiguration(sceneConfiguration: {\n eventData: { [key: string]: any };\n geometries: any[];\n }) {\n for (const objectType of Object.keys(sceneConfiguration.eventData)) {\n this.ui.addEventDataTypeFolder(objectType);\n\n const collections = sceneConfiguration.eventData[objectType];\n for (const collection of collections) {\n this.ui.addCollection(objectType, collection);\n }\n }\n\n for (const geom of sceneConfiguration.geometries) {\n this.ui.addGeometry(geom, '#ffffff');\n }\n }\n\n /**\n * Get all the objects inside a collection.\n * @param collectionName Key of the collection that will be retrieved.\n * @returns Object containing all physics objects from the desired collection.\n */\n public getCollection(collectionName: string) {\n return this.configuration.eventDataLoader.getCollection(collectionName);\n }\n\n /**\n * Get the different collections for the current stored event.\n * @returns List of strings, each representing a collection of the event displayed.\n */\n public getCollections(): string[] {\n return this.configuration.eventDataLoader.getCollections();\n }\n\n /**\n * Add a callback to onDisplayedEventChange array to call\n * the callback on changes to the displayed event.\n * @param callback Callback to be added to the onDisplayedEventChange array.\n */\n public listenToDisplayedEventChange(callback: (event) => any) {\n this.onDisplayedEventChange.push(callback);\n }\n\n /**\n * Add a callback to onEventsChange array to call\n * the callback on changes to the events.\n * @param callback Callback to be added to the onEventsChange array.\n */\n public listenToLoadedEventsChange(callback: (events) => any) {\n this.onEventsChange.push(callback);\n }\n\n /**\n * Get metadata associated to the displayed event (experiment info, time, run, event...).\n * @returns Metadata of the displayed event.\n */\n public getEventMetadata(): any[] {\n return this.configuration.eventDataLoader.getEventMetadata();\n }\n\n /**\n * Enables calling specified event display methods in console.\n */\n private enableEventDisplayConsole() {\n // Defining an EventDisplay object in window to access methods through console\n window.EventDisplay = {\n loadGLTFGeometry: (sceneUrl: string, name: string) => {\n this.loadGLTFGeometry(sceneUrl, name);\n },\n loadOBJGeometry: (\n filename: string,\n name: string,\n colour: any,\n menuNodeName: string,\n doubleSided: boolean\n ) => {\n this.loadOBJGeometry(filename, name, colour, menuNodeName, doubleSided);\n },\n loadJSONGeometry: (\n json: string | { [key: string]: any },\n name: string,\n menuNodeName: string,\n scale?: number,\n doubleSided?: boolean,\n initiallyVisible: boolean = true\n ) => {\n this.loadJSONGeometry(\n json,\n name,\n menuNodeName,\n scale,\n doubleSided,\n initiallyVisible\n );\n },\n buildGeometryFromParameters: (parameters: { [key: string]: any }) =>\n this.buildGeometryFromParameters(parameters),\n scene: this.getThreeManager().getSceneManager().getScene(),\n };\n }\n\n /**\n * Sets the renderer to be used to render the event display on the overlayed canvas.\n * @param overlayCanvas An HTML canvas on which the overlay renderer is to be set.\n */\n public setOverlayRenderer(overlayCanvas: HTMLCanvasElement) {\n this.graphicsLibrary.setOverlayRenderer(overlayCanvas);\n }\n\n /**\n * Initializes the object which will show information of the selected geometry/event data.\n * @param selectedObject Object to display the data.\n */\n public allowSelection(selectedObject: { name: string; attributes: any[] }) {\n this.graphicsLibrary.setSelectedObjectDisplay(selectedObject);\n }\n\n /**\n * Toggles the ability of selecting geometries/event data by clicking on the screen.\n * @param enable Value to enable or disable the functionality.\n */\n public enableSelecting(enable: boolean) {\n this.graphicsLibrary.enableSelecting(enable);\n }\n\n /**\n * Fixes the camera position of the overlay view.\n * @param fixed Whether the overlay view is to be fixed or not.\n */\n public fixOverlayView(fixed: boolean) {\n this.graphicsLibrary.fixOverlayView(fixed);\n }\n\n /**\n * Get the uuid of the currently selected object.\n * @returns uuid of the currently selected object.\n */\n public getActiveObjectId(): ActiveVariable {\n return this.graphicsLibrary.getActiveObjectId();\n }\n\n /**\n * Move the camera to look at the object with the given uuid\n * and highlight it.\n * @param uuid uuid of the object.\n */\n public lookAtObject(uuid: string) {\n this.graphicsLibrary.lookAtObject(uuid);\n this.graphicsLibrary.highlightObject(uuid);\n }\n\n /**\n * Highlight the object with the given uuid by giving it an outline.\n * @param uuid uuid of the object.\n */\n public highlightObject(uuid: string) {\n this.graphicsLibrary.highlightObject(uuid);\n }\n\n /**\n * Enable keyboard controls for the event display.\n */\n public enableKeyboardControls() {\n this.ui.enableKeyboardControls();\n this.graphicsLibrary.enableKeyboardControls();\n }\n\n /**\n * Animate the camera through the event scene.\n * @param startPos Start position of the translation animation.\n * @param tweenDuration Duration of each tween in the translation animation.\n * @param onAnimationEnd Callback when the last animation ends.\n */\n public animateThroughEvent(\n startPos: number[],\n tweenDuration: number,\n onAnimationEnd?: () => void\n ) {\n this.graphicsLibrary.animateThroughEvent(\n startPos,\n tweenDuration,\n onAnimationEnd\n );\n }\n\n /**\n * Animate scene by animating camera through the scene and animating event collision.\n * @param animationPreset Preset for animation including positions to go through and\n * event collision animation options.\n * @param onEnd Function to call when the animation ends.\n */\n public animatePreset(animationPreset: AnimationPreset, onEnd?: () => void) {\n this.graphicsLibrary.animatePreset(animationPreset, onEnd);\n }\n\n /**\n * Animate the propagation and generation of event data with particle collison.\n * @param tweenDuration Duration of the animation tween.\n * @param onEnd Function to call when all animations have ended.\n */\n public animateEventWithCollision(tweenDuration: number, onEnd?: () => void) {\n this.graphicsLibrary.animateEventWithCollision(tweenDuration, onEnd);\n }\n\n /**\n * Animate the propagation and generation of event data\n * using clipping planes after particle collison.\n * @param tweenDuration Duration of the animation tween.\n * @param onEnd Function to call when all animations have ended.\n */\n public animateClippingWithCollision(\n tweenDuration: number,\n onEnd?: () => void\n ) {\n this.graphicsLibrary.animateClippingWithCollision(tweenDuration, onEnd);\n }\n\n /**\n * Add label to a 3D object.\n * @param label Label to add to the event object.\n * @param collection Collection the event object is a part of.\n * @param indexInCollection Event object's index in collection.\n * @param uuid UUID of the three.js object.\n */\n public addLabelToObject(\n label: string,\n collection: string,\n indexInCollection: number,\n uuid: string\n ) {\n const labelId = this.configuration.eventDataLoader.addLabelToEventObject(\n label,\n collection,\n indexInCollection\n );\n\n // Remove the label if the string is empty\n if (!label) {\n this.ui.removeLabel(labelId, true);\n return;\n }\n\n this.ui.addLabel(labelId);\n this.graphicsLibrary.addLabelToObject(label, uuid, labelId);\n }\n\n /**\n * Reset/remove all labels.\n */\n public resetLabels() {\n // labelsObject[EventDataType][Collection][Index]\n const labelsObject = this.configuration.eventDataLoader.getLabelsObject();\n for (const eventDataType in labelsObject) {\n for (const collection in labelsObject[eventDataType]) {\n for (const index in labelsObject[eventDataType][collection]) {\n const labelId = getLabelTitle(eventDataType, collection, index);\n this.ui.removeLabel(labelId, true);\n\n delete labelsObject[eventDataType][collection][index];\n }\n }\n }\n }\n}\n\n \n\n\n\n\n\n\n\n\n\n \n \n results matching \"\"\n \n \n \n No results matching \"\"\n \n\n"},"classes/XRManager.html":{"url":"classes/XRManager.html","title":"class - XRManager","body":"\n \n\n\n\n\n\n\n\n\n\n\n\n\n\n Classes\n XRManager\n\n\n\n \n Info\n \n \n Source\n \n\n\n\n \n \n File\n \n \n src/managers/three-manager/xr/xr-manager.ts\n \n\n\n \n Description\n \n \n XR manager for XR related operations.\n\n \n\n\n\n\n \n Index\n \n \n \n \n Properties\n \n \n \n \n \n \n Public\n cameraGroup\n \n \n Protected\n currentXRSession\n \n \n Protected\n onSessionEnded\n \n \n Protected\n renderer\n \n \n Protected\n sessionInit\n \n \n Protected\n xrActive\n \n \n Public\n xrCamera\n \n \n \n \n\n \n \n Methods\n \n \n \n \n \n \n Public\n endXRSession\n \n \n Public\n getCameraGroup\n \n \n Public\n getXRCamera\n \n \n Protected\n onXRSessionEnded\n \n \n Protected\n Async\n onXRSessionStarted\n \n \n Public\n setXRSession\n \n \n \n \n\n\n\n\n\n \n \n\n\n \n Constructor\n \n \n \n \nconstructor(sessionType: XRSessionType)\n \n \n \n \n Defined in src/managers/three-manager/xr/xr-manager.ts:38\n \n \n\n \n \n Create the XR manager.\n\n \n Parameters :\n \n \n \n Name\n Type\n Optional\n Description\n \n \n \n \n sessionType\n \n \n XRSessionType\n \n \n \n No\n \n \n \n Type of the session, either AR or VR.\n\n \n \n \n \n \n \n \n \n \n\n\n \n \n \n Properties\n \n \n \n \n \n \n \n Public\n cameraGroup\n \n \n \n \n \n \n Type : Group\n\n \n \n \n \n Defined in src/managers/three-manager/xr/xr-manager.ts:36\n \n \n\n \n \n Group containing the the camera for XR.\n\n \n \n\n \n \n \n \n \n \n \n \n Protected\n currentXRSession\n \n \n \n \n \n \n Type : any\n\n \n \n \n \n Default value : null\n \n \n \n \n Defined in src/managers/three-manager/xr/xr-manager.ts:32\n \n \n\n \n \n Currently active XR session.\n\n \n \n\n \n \n \n \n \n \n \n \n Protected\n onSessionEnded\n \n \n \n \n \n \n Type : function\n\n \n \n \n \n Defined in src/managers/three-manager/xr/xr-manager.ts:34\n \n \n\n \n \n Callback to call when the XR session ends.\n\n \n \n\n \n \n \n \n \n \n \n \n Protected\n renderer\n \n \n \n \n \n \n Type : WebGLRenderer\n\n \n \n \n \n Defined in src/managers/three-manager/xr/xr-manager.ts:30\n \n \n\n \n \n Renderer to set the XR session for.\n\n \n \n\n \n \n \n \n \n \n \n \n Protected\n sessionInit\n \n \n \n \n \n \n Type : function\n\n \n \n \n \n Defined in src/managers/three-manager/xr/xr-manager.ts:28\n \n \n\n \n \n Returns required and optional features when requesting an XR session.\n\n \n \n\n \n \n \n \n \n \n \n \n Protected\n xrActive\n \n \n \n \n \n \n Type : boolean\n\n \n \n \n \n Default value : false\n \n \n \n \n Defined in src/managers/three-manager/xr/xr-manager.ts:26\n \n \n\n \n \n Whether the XR is currently active or not.\n\n \n \n\n \n \n \n \n \n \n \n \n Public\n xrCamera\n \n \n \n \n \n \n Type : Camera\n\n \n \n \n \n Defined in src/managers/three-manager/xr/xr-manager.ts:38\n \n \n\n \n \n The camera used by XR.\n\n \n \n\n \n \n\n\n \n \n \n Methods\n \n \n \n \n \n \n \n Public\n endXRSession\n \n \n \n \n \n \n \n endXRSession()\n \n \n\n\n \n \n Defined in src/managers/three-manager/xr/xr-manager.ts:99\n \n \n\n\n \n \n End the current XR session.\n\n\n \n Returns : void\n\n \n \n \n \n \n \n \n \n \n \n \n Public\n getCameraGroup\n \n \n \n \n \n \n \n getCameraGroup(camera?: Camera)\n \n \n\n\n \n \n Defined in src/managers/three-manager/xr/xr-manager.ts:109\n \n \n\n\n \n \n Get the group containing the camera for XR.\nXR camera works by adding a Group with Camera to the scene.\n\n\n \n Parameters :\n \n \n \n \n Name\n Type\n Optional\n Description\n \n \n \n \n camera\n \n Camera\n \n\n \n Yes\n \n\n\n \n Camera which is to be cloned for XR use.\n\n \n \n \n \n \n \n \n \n Returns : Group\n\n \n \n The camera group used in XR mode.\n\n \n \n \n \n \n \n \n \n \n \n \n Public\n getXRCamera\n \n \n \n \n \n \n \n getXRCamera()\n \n \n\n\n \n \n Defined in src/managers/three-manager/xr/xr-manager.ts:135\n \n \n\n\n \n \n Get the camera used by XR.\n\n\n \n \n \n Returns : Camera\n\n \n \n The camera used by XR.\n\n \n \n \n \n \n \n \n \n \n \n \n Protected\n onXRSessionEnded\n \n \n \n \n \n \n \n onXRSessionEnded()\n \n \n\n\n \n \n Defined in src/managers/three-manager/xr/xr-manager.ts:88\n \n \n\n\n \n \n Callback when the XR session ends.\n\n\n \n Returns : void\n\n \n \n \n \n \n \n \n \n \n \n \n Protected\n Async\n onXRSessionStarted\n \n \n \n \n \n \n \n onXRSessionStarted(session: any)\n \n \n\n\n \n \n Defined in src/managers/three-manager/xr/xr-manager.ts:78\n \n \n\n\n \n \n Callback for when the XR session is started.\n\n\n \n Parameters :\n \n \n \n \n Name\n Type\n Optional\n Description\n \n \n \n \n session\n \n any\n \n\n \n No\n \n\n\n \n The XR session.\n\n \n \n \n \n \n \n \n \n Returns : any\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n Public\n setXRSession\n \n \n \n \n \n \n \n setXRSession(renderer: WebGLRenderer, onSessionStarted?: () => void, onSessionEnded?: () => void)\n \n \n\n\n \n \n Defined in src/managers/three-manager/xr/xr-manager.ts:53\n \n \n\n\n \n \n Set and configure the XR session.\n\n\n \n Parameters :\n \n \n \n \n Name\n Type\n Optional\n Description\n \n \n \n \n renderer\n \n WebGLRenderer\n \n\n \n No\n \n\n\n \n Renderer to set the XR session for.\n\n \n \n \n onSessionStarted\n \n function\n \n\n \n Yes\n \n\n\n \n Callback to call when the XR session starts.\n\n \n \n \n onSessionEnded\n \n function\n \n\n \n Yes\n \n\n\n \n Callback to call when the XR session ends.\n\n \n \n \n \n \n \n \n \n Returns : void\n\n \n \n \n \n \n \n \n \n\n\n\n\n\n\n \n\n\n \n import {\n ArrayCamera,\n Camera,\n Group,\n PerspectiveCamera,\n Vector3,\n WebGLRenderer,\n} from 'three';\n\n// NOTE: This was created on 28/06/2021\n// It might become outdated given how WebXR is still a work in progress\n\n// LAST UPDATED ON 29/06/2021\n\n/** Type of the XR session. */\nexport enum XRSessionType {\n VR = 'VR',\n AR = 'AR',\n}\n\n/**\n * XR manager for XR related operations.\n */\nexport class XRManager {\n /** Whether the XR is currently active or not. */\n protected xrActive: boolean = false;\n /** Returns required and optional features when requesting an XR session. */\n protected sessionInit: () => { [key: string]: any };\n /** Renderer to set the XR session for. */\n protected renderer: WebGLRenderer;\n /** Currently active XR session. */\n protected currentXRSession: any = null;\n /** Callback to call when the XR session ends. */\n protected onSessionEnded: () => void;\n /** Group containing the the camera for XR. */\n public cameraGroup: Group;\n /** The camera used by XR. */\n public xrCamera: Camera;\n\n /**\n * Create the XR manager.\n * @param sessionType Type of the session, either AR or VR.\n * @param sessionInit Other options for the session like optional features.\n */\n constructor(private sessionType: XRSessionType) {}\n\n /**\n * Set and configure the XR session.\n * @param renderer Renderer to set the XR session for.\n * @param onSessionStarted Callback to call when the XR session starts.\n * @param onSessionEnded Callback to call when the XR session ends.\n */\n public setXRSession(\n renderer: WebGLRenderer,\n onSessionStarted?: () => void,\n onSessionEnded?: () => void\n ) {\n this.renderer = renderer;\n this.onSessionEnded = onSessionEnded;\n const webXR = (navigator as any)?.xr;\n const xrType = this.sessionType === XRSessionType.VR ? 'vr' : 'ar';\n\n webXR\n ?.requestSession(`immersive-${xrType}`, this.sessionInit?.())\n .then((session: any) => {\n this.onXRSessionStarted.bind(this)(session);\n onSessionStarted?.();\n })\n .catch((error: any) => {\n console.error(`${xrType.toUpperCase()} Error:`, error);\n });\n }\n\n /**\n * Callback for when the XR session is started.\n * @param session The XR session.\n */\n protected async onXRSessionStarted(session: any) {\n this.xrActive = true;\n session.addEventListener('end', this.onXRSessionEnded.bind(this));\n await this.renderer.xr.setSession(session);\n this.currentXRSession = session;\n }\n\n /**\n * Callback when the XR session ends.\n */\n protected onXRSessionEnded() {\n this.xrActive = false;\n this.currentXRSession.removeEventListener('end', this.onXRSessionEnded);\n this.currentXRSession = null;\n this.cameraGroup = undefined;\n this.onSessionEnded?.();\n }\n\n /**\n * End the current XR session.\n */\n public endXRSession() {\n this.currentXRSession?.end();\n }\n\n /**\n * Get the group containing the camera for XR.\n * XR camera works by adding a Group with Camera to the scene.\n * @param camera Camera which is to be cloned for XR use.\n * @returns The camera group used in XR mode.\n */\n public getCameraGroup(camera?: Camera): Group {\n // Set up the camera position in the XR - Adding a group with camera does it\n if (!this.cameraGroup) {\n this.cameraGroup = new Group();\n }\n if (camera && this.xrActive) {\n this.xrCamera = this.renderer.xr\n .getCamera()\n .copy(new ArrayCamera([camera.clone() as PerspectiveCamera]));\n this.xrCamera.name = 'XR_CAMERA';\n\n const cameraPosition =\n this.sessionType === XRSessionType.VR\n ? this.xrCamera.position\n : new Vector3(0, 0, 0.1);\n this.cameraGroup.position.copy(cameraPosition);\n this.cameraGroup.add(this.xrCamera);\n }\n\n return this.cameraGroup;\n }\n\n /**\n * Get the camera used by XR.\n * @returns The camera used by XR.\n */\n public getXRCamera() {\n return this.xrCamera;\n }\n}\n\n \n\n\n\n\n\n\n\n\n\n\n \n \n results matching \"\"\n \n \n \n No results matching \"\"\n \n\n"},"changelog.html":{"url":"changelog.html","title":"getting-started - changelog","body":"\n \n\nChange Log\nAll notable changes to this project will be documented in this file.\nSee Conventional Commits for commit guidelines.\n2.14.0 (2023-03-22)\nNote: Version bump only for package phoenix-event-display\n2.13.0 (2023-03-02)\nReverts\n\nRevert \"Updated versions to try to reduce yarn warnings\" (477845f)\n\n2.12.0 (2023-01-13)\nBug Fixes\n\nevent-display: allowing geometry name to be undefined (9ffb5e2)\nevent-display: make side and length optional in calo cell params (448eb4f)\n\nFeatures\n\nevent-display: adding side and length variables for the calo cell/cluster (29beae7)\n\n2.11.4 (2022-10-27)\nBug Fixes\n\nevent-display: An argument for 'camera' was not provided (dcb4c88)\nlinting (f97e615)\n\n2.11.2 (2022-10-03)\nReverts\n\nRevert \"Simple angular 14 fix\" (f40beac)\nRevert \"Improve scripts after removing phoenix-event-display from phoenix-ng 'paths'\" (24ecd77)\n\n2.11.1 (2022-09-29)\nNote: Version bump only for package phoenix-event-display\n2.11.0 (2022-09-13)\nFeatures\n\napp: add e2e tests for phoenix app (69544e6)\nevent-display: add root geometry loading to loading manager (6c92e33)\nevent-display: load root geometry in io options correctly (ff77aaa)\nevent-display: remove loadJSRootScripts function from script loader (e152933)\nevent-display: update jsroot usage in JSRootEventLoader (4791f53)\nevent-display: use full path for object names to make them unique (3d1f91c)\nevent-display: use jsroot 7 to load root json geometry (5518a3e)\nevent-display: use url inside of objects for loading jsroot geometries (a54d302)\n\n2.10.0 (2022-07-21)\nBug Fixes\n\nevent-display: fixed handling of event properties (6ace2f6)\n\n2.9.0 (2022-06-17)\nBug Fixes\n\nevent-display: fix clipping angle not being applied from menu config (62bf178)\nevent-display: fix geometry not being loaded correctly in menu (7e0870b)\nevent-display: fix opacity not being set for LHCb geometry (65e657b)\n\nFeatures\n\napp: add component to periodically cycle through events (05ae1d6)\nupdate all packages (9276ef9)\napp: make sure all volumes are transparent in LHCb (7e36462)\n\n2.8.0 (2022-05-16)\nNote: Version bump only for package phoenix-event-display\n2.7.0 (2022-04-05)\nFeatures\n\napp: add object clipping for upper and lower geometry (1788560)\napp: add start clipping angle and opening angle for object clipping (9bc48e0)\napp: add start clipping angle and opening angle for object clipping (12b1754)\napp: add start clipping angle and opening angle for object clipping (4c5fac9)\napp: add start clipping angle and opening angle for object clipping (a8336ae)\napp: add start clipping angle and opening angle for object clipping (3255a65)\nevent-display: add 'start' clipping angle as well as opening angle (d2c02d5)\nevent-display: add docs to phoenix ui implementations (0c48b27)\nevent-display: add function to get event data type folder of each menu (c91aa0e)\nevent-display: add interface for Phoenix UI (aaed8f5)\nevent-display: implement phoenix-ui interface for phoenix menu (d4866ea)\nevent-display: implement PhoenixUI interface for dat.GUI menu (a4e8aaa)\nevent-display: update calls to ui-manager (473a39c)\nevent-display: update phoenix loader UI manager for PhoenixUI interface (f2376cc)\nevent-display: use generic menus in ui-manager (7a42b65)\n\n2.6.0 (2022-02-28)\nBug Fixes\n\napp: fix types in templates (545c956)\napp: use workaround for phoenix menu config types in templates (9d109e5)\n\nFeatures\n\nupdate packages (f2ed0a3)\n\n2.5.2 (2022-01-15)\nNote: Version bump only for package phoenix-event-display\n2.5.0 (2021-12-20)\nBug Fixes\n\nevent-display: fix jets disappearing on scaling to 0 (14cdc8f)\n\nFeatures\n\nupdate packages (26444f1)\nevent-display: externalize three.js dependency in webpack bundle (6a7e82f)\nevent-display: improve JiveXML loader (34a783c), closes #364\nevent-display: simplify phoenix menu node types (c60b3c1)\n\n2.4.0 (2021-10-28)\nBug Fixes\n\nevent-display: handle AR and VR permission errors (dfbc6a2)\nevent-display: update three.js imports (4e41f72)\nevent-display: use proper error handling for local storage (55cad7c)\n\nFeatures\n\nupdate all packages (c0af497)\nevent-display: remove labels on event load (75f829a)\n\n2.3.2 (2021-09-28)\nBug Fixes\n\nevent-display: remove XRSessionInit type from xr-manager (608f529)\n\n2.3.1 (2021-09-28)\nBug Fixes\n\nevent-display: add @types/three package as a dev dependency (10244f7)\n\nFeatures\n\nevent-display: function to get url options from url options manager (0ba5097)\n\n2.3.0 (2021-09-20)\nBug Fixes\n\nevent-display: do not apply Phoenix menu node toggle if undefined in config (bf98a24)\nevent-display: fix cuts not displaying for tracks in collections info (14d5f3a)\nevent-display: fix error in adding labels for electrons (98c7055)\nevent-display: fix opacity for tracks (094261c)\n\nFeatures\n\nUpgrade all packages (4698ea4)\n\n2.2.0 (2021-08-03)\nBug Fixes\n\nevent-display: fix AR not working in playground (7f35fdb)\nevent-display: fix bug in jive xml loader (39241a4)\nevent-display: fix collection color not working with load state (4603dbc)\nevent-display: fix load state throwing error (16ea0df)\nevent-display: fix tests (7e9c733)\nevent-display: increase max cut value for jets (9f4cf7c), closes #336\nevent-display: use coneR, if available, to determine jet width (d4b62c2)\nFix linting issues and update code (dc7d74a)\n\nFeatures\n\nevent-display: add option to scale vertices (08c8e00)\nevent-display: improve handling of scale option and add it for vertices (34d9b2c)\nupdate all packages including Angular (9a88331)\nupdate packages except Angular (26eff0e)\nupgrade all packages (36486b8)\napp: option to start AR with or without DOM overlay (9a6c243)\nevent-display: JiveXML, load coneR (set default if missing). (867d28a)\nevent-display: make background transparent in AR mode (46b8aee)\nevent-display: use dom overlay for AR (c897ab3)\nevent-display: use DOM overlay for AR (a5eaa34)\n\n2.1.0 (2021-06-28)\nBug Fixes\n\napp: clean packages not used in phoenix-ng (037af62)\nevent-display: bug when handling out-of-bounds theta (717304e)\nevent-display: cuts to match pT values (62ae417)\nevent-display: fix pt scale of compound objects for JiveXML (a821e42)\nevent-display: handle track pT as p (scale correctly) (7b839e3)\nevent-display: simplify handling of compound objs needing a track extrapolation (3daabc5)\nevent-display: since can scale jets, no longer limit length (bb41683)\n\nFeatures\n\nevent-display: add AR manager (3017ca9)\nevent-display: add docs to AR manager (5334996)\nevent-display: add scene to window EventDisplay object (07d8633)\nevent-display: combine repeating code for VR and AR into XR (50fc5f7)\nevent-display: create a common xr-manager (2700aaf)\nevent-display: extend ARManager from XRManager (ae76d4a)\nevent-display: extend VRManager from XRManager (15dd07c)\nevent-display: handle camera position differently for AR (5894cac)\nevent-display: refactor to make general getCompound from getMuon (dfe8e8d)\nevent-display: setup AR with event display (8e7396f)\nevent-display: use new extrapolationLimit of RKHelper and better debug output (14e4cbb)\nevent-display: use workaround to manage scale in AR (a5481e1)\nevent-display: working AR setup in event display (fdd492a)\n\n2.0.0 (2021-06-08)\nBug Fixes\n\nevent-display: add energy cut, refactor (000ab78)\nevent-display: attempt to improve robustness of tracks (689da29)\nevent-display: better debugging info and prettier (df9ce07)\nevent-display: fix #289 cluster rendering (1a01248)\nevent-display: fix collision animation (3e5d80d)\nevent-display: fix eta calculation for JiveXML (6dbd797)\nevent-display: fix phoenix menu node types (1af6ae2)\nevent-display: fix too many params for hits (8b994a7)\nevent-display: fixes and improvements for track import from JiveXML (c92d65f)\nevent-display: persist cuts when collection is toggled (1dd0431)\nevent-display: properly display the PlanarCalorimeters (f41920b)\nevent-display: random colors for collections and fix color by vertex (303187a)\nevent-display: use line animation for line hit (df425ee)\nfix misc errors and improve styles (124a272)\nevent-display: rk-helper should use CoordinateHelper (6085f50)\n\nFeatures\n\napp: add embed in sharable link constructor (8a0c0b1)\napp: add embed menu with a URL option for embed (56c6eff)\napp: add load progress based on number of loaded items (20ef288)\napp: improve background colors (2c97f5c)\napp: setup for preset scene animations (6e919e1)\nevent-display: add a sample animation preset (e07725a)\nevent-display: add color by vertex options (d2e0547)\nevent-display: add color options to tracks collections (90aea3c)\nevent-display: add docs for color options class (6cd5d53)\nevent-display: add embed option to URL (cb68283)\nevent-display: add function to animate scene (a411631)\nevent-display: add momentum color options UI (f1d2cef)\nevent-display: add types for Phoenix menu configs (68f3d45)\nevent-display: code improvement for momentum sliders (1a17e99)\nevent-display: color options for event data objects (9908cc9)\nevent-display: complete types for phoenix menu node (cc04d5a)\nevent-display: divide collection config options into child nodes (2e52c22)\nevent-display: highly optimize and generalize color by options (595d9e5)\nevent-display: implement color by momentum (9222e04)\nevent-display: implement embed menu (872f708)\nevent-display: improve preset animation (2371f75)\nupdate all packages (7d2eb64)\nevent-display: create coloring manager and color tracks by properties (c446567)\nevent-display: improve color manager code (3839578)\nevent-display: only show selected color by options (3041166)\nevent-display: type changes for phoenix menu (9a79692)\nevent-display: use child node for collection's color options (8559830)\nevent-display: use class for color options in UI (4acca1a)\nevent-dosplay: improve processing of PlanarCaloCells in Phoenix loader (5a8fe9f)\n\n1.9.0 (2021-05-16)\nBug Fixes\n\nevent-display: add energy cut, refactor (000ab78)\nevent-display: attempt to improve robustness of tracks (689da29)\nevent-display: better debugging info and prettier (df9ce07)\nevent-display: fix #289 cluster rendering (1a01248)\nevent-display: fix eta calculation for JiveXML (6dbd797)\nevent-display: fix phoenix menu node types (1af6ae2)\nevent-display: fixes and improvements for track import from JiveXML (c92d65f)\nevent-display: properly display the PlanarCalorimeters (f41920b)\nevent-display: rk-helper should use CoordinateHelper (6085f50)\n\nFeatures\n\napp: add embed in sharable link constructor (8a0c0b1)\napp: add embed menu with a URL option for embed (56c6eff)\napp: add load progress based on number of loaded items (20ef288)\nevent-display: add color by vertex options (d2e0547)\nevent-display: add color options to tracks collections (90aea3c)\nevent-display: add docs for color options class (6cd5d53)\nevent-display: add embed option to URL (cb68283)\nevent-display: add momentum color options UI (f1d2cef)\nevent-display: add types for Phoenix menu configs (68f3d45)\nevent-display: code improvement for momentum sliders (1a17e99)\nevent-display: color options for event data objects (9908cc9)\nevent-display: complete types for phoenix menu node (cc04d5a)\nevent-display: create coloring manager and color tracks by properties (c446567)\nevent-display: divide collection config options into child nodes (2e52c22)\nevent-display: highly optimize and generalize color by options (595d9e5)\nevent-display: implement color by momentum (9222e04)\nevent-display: implement embed menu (872f708)\nevent-display: improve color manager code (3839578)\nevent-display: only show selected color by options (3041166)\nevent-display: type changes for phoenix menu (9a79692)\nevent-display: use child node for collection's color options (8559830)\nevent-display: use class for color options in UI (4acca1a)\nevent-dosplay: improve processing of PlanarCaloCells in Phoenix loader (5a8fe9f)\n\n1.8.0 (2021-05-01)\nBug Fixes\n\nevent-display: better debugging info and prettier (df9ce07)\nevent-display: fix #289 cluster rendering (1a01248)\nevent-display: fixes and improvements for track import from JiveXML (c92d65f)\nevent-display: rk-helper should use CoordinateHelper (6085f50)\n\nFeatures\n\napp: add embed in sharable link constructor (8a0c0b1)\napp: add embed menu with a URL option for embed (56c6eff)\napp: add load progress based on number of loaded items (20ef288)\nevent-display: add color options to tracks collections (90aea3c)\nevent-display: add docs for color options class (6cd5d53)\nevent-display: add embed option to URL (cb68283)\nevent-display: add momentum color options UI (f1d2cef)\nevent-display: code improvement for momentum sliders (1a17e99)\nevent-display: color options for event data objects (9908cc9)\nevent-display: create coloring manager and color tracks by properties (c446567)\nevent-display: divide collection config options into child nodes (2e52c22)\nevent-display: highly optimize and generalize color by options (595d9e5)\nevent-display: implement color by momentum (9222e04)\nevent-display: implement embed menu (872f708)\nevent-display: use child node for collection's color options (8559830)\nevent-display: use class for color options in UI (4acca1a)\n\n1.7.0 (2021-04-21)\nBug Fixes\n\nevent-display: attempt to improve the output of the track extension by removing close hits (5bdc562)\nevent-display: fix drawing of hits (db3ca8b)\nevent-display: handle older json hit format again (edcd567)\n\n1.6.0 (2021-04-18)\nBug Fixes\n\napp: add sphericalToCartesian method (bbea6b0)\nevent-display: add back in geometrical limits for clusters (0b95e5b)\nevent-display: add eta and phi cuts for tracks (f8a0080)\nevent-display: add missing docs (c9781e5)\nevent-display: add missing documentation (236bdf4)\nevent-display: calocluster eta position was wrong. (66cbbc0)\nevent-display: cleanup JixeXML loader (6a834e8)\nevent-display: prettier fixes (7528ee0)\nevent-display: run prettier (again) (f279898)\nevent-display: use BufferGeometry for CMS objects with new three.js update (b8e88b8)\n\nFeatures\n\napp: bind clipping state with UI menu (40bbba0)\napp: complete dialog for share link and embed (50c2584)\napp: setup link share form (b10bb7a)\nevent-display: ability to remove geometry in Phoenix menu (7d90d72)\nevent-display: ability to scale CaloClusters (ff666e2)\nevent-display: add ability to scale clusters in just one direction (5a562ab), closes #257\nevent-display: add coordinate helper (57e438f)\nevent-display: add guidelines and simplify some coordinate transformations (56f94f0)\nevent-display: Add missing energy (6ef17d0)\nevent-display: add opacity and wireframe for CaloClusters (85d4a14)\nevent-display: add support for HitLines (455f536)\nevent-display: add types for dat.GUI (7632a18)\nevent-display: create an active observable variable (854e543)\nevent-display: improve grid lines (ca3cc2f)\nevent-display: improve handling of UI menus in UI manager (b7a324a)\nevent-display: introduce new URL options and improve handling them (f7cd6b4)\nevent-display: JiveXML : add support for more hit types (bbcdf0c)\nevent-display: keep state of event data folder on event switch (b52282f)\nevent-display: make Phoenix available in browser without a namespace (5389282)\nevent-display: move opacity and wireframing to collection level (6486982)\nevent-display: options for CaloClusters (68cd7ad)\nevent-display: Remove LineHits and use hits to extend tracks (30b5160)\nevent-display: restructure phoenix-event-display (2e16371)\nevent-display: separate dat.GUI UI menu (29093a2)\nevent-display: separate Phoenix menu UI from UI manager (5743adc)\nevent-display: split dat.GUI menu options (45a0123)\nevent-display: start splitting UI manager (56ff275)\nevent-display: use run and event number and file name for config json (03a1de4)\nupgrade all packages except three.js (8e2eff4)\nupgrade three.js except for CMSObjects (0b2dd8a)\n\n1.5.0 (2021-03-24)\nBug Fixes\n\nevent-display: catch VR request session error (d2874b8)\nevent-display: fix jsroot loading root file (8cbcaa5)\nevent-display: handle tracks with no positions (3b1991c)\nevent-display: improve renderer init (a8f8353)\nevent-display: remove optimize controls function (266af04)\nevent-display: remove redundant import (359d353)\nevent-display: use per physics object color and not collection color (ac0c4f1)\nremove JSROOT source files from repo (7bcd7ba)\n\nFeatures\n\napp: ability to import ig archive in CMS (9540af5)\napp: Add more realistic geometry for ATLAS (d207bad)\nevent-display: allow resize and improve tests and drop improving CPU usage (a474af2)\nevent-display: resize canvas with window resize (5ea04f1)\nevent-display: update to use CDN for JSROOT (2fa310f)\nevent-display: use latest version of JSROOT (fbd584e)\n\n1.4.0 (2021-02-16)\nBug Fixes\n\nevent-display: disable keyboard controls when typing (4f80bd6)\nevent-display: improve object selection from uuid and label input (3475836)\nevent-display: persist toggle state of phoenix menu node children (e96136b)\nevent-display: remove rollup config and fix globalThis usage (e6f69a0)\n\nFeatures\n\nevent-display: ability to add 3D label text (c9d4880)\nevent-display: add labels configuration to dat.GUI menu (d677089)\nevent-display: add labels to UI configuration (d90e3a6)\nevent-display: add size and color options for labels (3ce675f)\nevent-display: better handling of labels object (e10a68d)\nevent-display: complete setup with webpack for browser (3f6367f)\nevent-display: complete support to save and load labels (2219a3e)\nevent-display: create a url options manager for url options (fe0b2e6)\nevent-display: create generic function for getting object position (8d7b160)\nevent-display: delete label on empty value and change add label icon (3756330)\nevent-display: make label always look at camera (0837334)\nevent-display: set up add label to object functions (db261a6)\nevent-display: setup webpack for browser bundle (dc05ed9)\nevent-display: support to hide widgets through URL (cb2ec40)\nevent-display: use optional chaining for hide widgets url option (c991e54)\nevent-display: Use types for phoenix menu configuration (79e6d7c)\nevent-display: working labels object (60269f7)\nUpdate Angular and all packages to latest (f4c2e31)\n\n1.3.0 (2021-01-16)\nBug Fixes\n\nevent-display: assign the right name to geometry (b7e8da0)\nevent-display: code improvements (f94c0e4)\nevent-display: fix parsing of GLTF geometry (dc5d489)\nevent-display: improve code for hiding tube tracks (e9f1bc9)\nevent-display: minor script fix (5139c6e)\nevent-display: remove color from obj file userdata (8ba94e7)\nevent-display: revert jasmine spec files (dc140dd)\nevent-display: try fixing CMSLoader tests (789da8b)\n\nFeatures\n\nevent-display: display size on selection (6943f79)\nevent-display: hide tube tracks on zoom (7d606b2)\n\n1.2.0 (2020-12-06)\nBug Fixes\n\nevent-display: add Edward's controller set up (a6a1c19)\nevent-display: changes to animation loop for VR (37df19f)\nevent-display: finally fix VR completely (4764196)\nevent-display: fix applying multiple cuts at the same time (8f3e8e1)\nevent-display: fix applying state for range slider (c36a222)\nevent-display: fix loading and add default view to experiments (ab8feb4)\nevent-display: initialize cuts with correct values (e297c98)\nevent-display: make it possible to flat shade (dcf6cec)\nevent-display: optimal animation loop set up (da3ead5)\nevent-display: optimal render for effects manager (1975d70)\nevent-display: reset clipping on init (029d526)\nevent-display: stop animation loop on home (c39ecd3)\nevent-display: update configuration in tests (18f8db2)\n\nFeatures\n\napp: add toggle for screenshot mode (22a1ec8)\napp: make loader generic (ff10477)\napp: set up performance mode with selection (947f6bf)\napp: use event display loader in Angular component (25b2a9d)\nevent-display: ability to add geometry to a menu folder (30b0383)\nevent-display: ability to initialize event display without init (69d3f75)\nevent-display: add ability to add parametrised geometry (04dc545)\nevent-display: add and set up loading manager (5f0f942)\nevent-display: handle loading better (9474565)\nevent-display: make loading functions return Promise for async await (4262a1b)\nevent-display: performance mode and antialias support (d3920c4)\nevent-display: support for toggling antialiasing (48130b2)\nevent-display: use object to simplify configuration (4b10452)\n\n1.1.0 (2020-11-07)\nBug Fixes\n\napp: cut filter failed if value return was zero (0a26fea)\napp: cut should be pT, not mom (73b7c27)\napp: fix attribute pipe (0980379)\napp: fix tests (f87c587)\napp: pT should always be positive (3918159)\nevent-display: add optional chaining to CMS event info (fixes tests) (5283e9a)\nevent-display: fix geometry too big in overlay view (c7a35db)\nevent-display: fix URL event not working with hash routes (9eb21f5)\nevent-display: Formatted correctly (b46c49f)\nevent-display: use optional chaining in CMS loader (cfb1b6a)\nVR: Fix bugged scene in VR mode (9efd9ca)\n\nFeatures\n\napp: Option to load config from URL in ATLAS (1906976)\napp: phoenix-ui-components library (17909eb)\napp: yet another MAJOR refactoring (1261358)\nevent-display: add defaultView to configuration (612205c)\nevent-display: implicitly load event data from URL (9e3dc20)\nevent-display: state manager for managing event display state for save and load (7d1ca22)\n\n1.0.2 (2020-10-05)\n\nComplete deployment set up (399ac77)\n\n1.0.1 (2020-10-05)\nNote: Version bump only for package phoenix-event-display\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n \n results matching \"\"\n \n \n \n No results matching \"\"\n \n\n"},"coverage.html":{"url":"coverage.html","title":"coverage - coverage","body":"\n \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n Documentation coverage\n\n\n\n \n\n\n\n \n \n File\n Type\n Identifier\n Statements\n \n \n \n \n \n \n src/event-display.ts\n \n class\n EventDisplay\n \n 100 %\n (58/58)\n \n \n \n \n \n src/event-display.ts\n \n interface\n Window\n \n 100 %\n (2/2)\n \n \n \n \n \n src/helpers/active-variable.ts\n \n class\n ActiveVariable\n \n 100 %\n (6/6)\n \n \n \n \n \n src/helpers/browser-storage.ts\n \n variable\n getFromLocalStorage\n \n 100 %\n (1/1)\n \n \n \n \n \n src/helpers/browser-storage.ts\n \n variable\n setToLocalStorage\n \n 100 %\n (1/1)\n \n \n \n \n \n src/helpers/constants.ts\n \n variable\n EVENT_DATA_TYPE_COLORS\n \n 100 %\n (1/1)\n \n \n \n \n \n src/helpers/coordinate-helper.ts\n \n class\n CoordinateHelper\n \n 100 %\n (7/7)\n \n \n \n \n \n src/helpers/file.ts\n \n variable\n loadFile\n \n 100 %\n (1/1)\n \n \n \n \n \n src/helpers/file.ts\n \n variable\n saveFile\n \n 100 %\n (1/1)\n \n \n \n \n \n src/helpers/info-logger.ts\n \n class\n InfoLogger\n \n 100 %\n (5/5)\n \n \n \n \n \n src/helpers/labels.ts\n \n variable\n getLabelTitle\n \n 100 %\n (1/1)\n \n \n \n \n \n src/helpers/pretty-symbols.ts\n \n class\n PrettySymbols\n \n 100 %\n (4/4)\n \n \n \n \n \n src/helpers/rk-helper.ts\n \n class\n RKHelper\n \n 100 %\n (4/4)\n \n \n \n \n \n src/helpers/runge-kutta.ts\n \n class\n Field\n \n 100 %\n (2/2)\n \n \n \n \n \n src/helpers/runge-kutta.ts\n \n class\n RungeKutta\n \n 100 %\n (3/3)\n \n \n \n \n \n src/helpers/runge-kutta.ts\n \n class\n State\n \n 100 %\n (9/9)\n \n \n \n \n \n src/helpers/zip.ts\n \n variable\n readZipFile\n \n 100 %\n (1/1)\n \n \n \n \n \n src/lib/models/cut.model.ts\n \n class\n Cut\n \n 100 %\n (16/16)\n \n \n \n \n \n src/lib/models/preset-view.model.ts\n \n class\n PresetView\n \n 100 %\n (10/10)\n \n \n \n \n \n src/lib/types/configuration.ts\n \n interface\n Configuration\n \n 100 %\n (11/11)\n \n \n \n \n \n src/loaders/cms-loader.ts\n \n class\n CMSLoader\n \n 100 %\n (33/33)\n \n \n \n \n \n src/loaders/edm4hep-json-loader.ts\n \n class\n Edm4hepJsonLoader\n \n 100 %\n (40/40)\n \n \n \n \n \n src/loaders/event-data-loader.ts\n \n interface\n EventDataLoader\n \n 100 %\n (8/8)\n \n \n \n \n \n src/loaders/jivexml-loader.ts\n \n class\n JiveXMLLoader\n \n 100 %\n (43/43)\n \n \n \n \n \n src/loaders/jsroot-event-loader.ts\n \n class\n JSRootEventLoader\n \n 100 %\n (28/28)\n \n \n \n \n \n src/loaders/objects/cms-objects.ts\n \n class\n CMSObjects\n \n 100 %\n (2/2)\n \n \n \n \n \n src/loaders/objects/phoenix-objects.ts\n \n class\n PhoenixObjects\n \n 100 %\n (18/18)\n \n \n \n \n \n src/loaders/objects/tracks.ts\n \n class\n TracksMaterial\n \n 100 %\n (3/3)\n \n \n \n \n \n src/loaders/objects/tracks.ts\n \n class\n TracksMesh\n \n 100 %\n (14/14)\n \n \n \n \n \n src/loaders/phoenix-loader.ts\n \n class\n PhoenixLoader\n \n 100 %\n (21/21)\n \n \n \n \n \n src/loaders/script-loader.ts\n \n class\n ScriptLoader\n \n 100 %\n (2/2)\n \n \n \n \n \n src/loaders/trackml-loader.ts\n \n class\n TrackmlLoader\n \n 100 %\n (28/28)\n \n \n \n \n \n src/managers/loading-manager.ts\n \n class\n LoadingManager\n \n 100 %\n (15/15)\n \n \n \n \n \n src/managers/state-manager.ts\n \n class\n StateManager\n \n 100 %\n (21/21)\n \n \n \n \n \n src/managers/three-manager/animations-manager.ts\n \n class\n AnimationsManager\n \n 100 %\n (12/12)\n \n \n \n \n \n src/managers/three-manager/animations-manager.ts\n \n interface\n AnimationPreset\n \n 100 %\n (5/5)\n \n \n \n \n \n src/managers/three-manager/color-manager.ts\n \n class\n ColorManager\n \n 100 %\n (6/6)\n \n \n \n \n \n src/managers/three-manager/controls-manager.ts\n \n class\n ControlsManager\n \n 100 %\n (36/36)\n \n \n \n \n \n src/managers/three-manager/effects-manager.ts\n \n class\n EffectsManager\n \n 100 %\n (13/13)\n \n \n \n \n \n src/managers/three-manager/export-manager.ts\n \n class\n ExportManager\n \n 100 %\n (6/6)\n \n \n \n \n \n src/managers/three-manager/import-manager.ts\n \n class\n ImportManager\n \n 100 %\n (16/16)\n \n \n \n \n \n src/managers/three-manager/index.ts\n \n class\n ThreeManager\n \n 100 %\n (68/68)\n \n \n \n \n \n src/managers/three-manager/renderer-manager.ts\n \n class\n RendererManager\n \n 100 %\n (23/23)\n \n \n \n \n \n src/managers/three-manager/scene-manager.ts\n \n class\n SceneManager\n \n 100 %\n (42/42)\n \n \n \n \n \n src/managers/three-manager/selection-manager.ts\n \n class\n SelectionManager\n \n 100 %\n (23/23)\n \n \n \n \n \n src/managers/three-manager/xr/ar-manager.ts\n \n class\n ARManager\n \n 100 %\n (19/19)\n \n \n \n \n \n src/managers/three-manager/xr/vr-manager.ts\n \n class\n VRManager\n \n 100 %\n (24/24)\n \n \n \n \n \n src/managers/three-manager/xr/xr-manager.ts\n \n class\n XRManager\n \n 100 %\n (15/15)\n \n \n \n \n \n src/managers/ui-manager/color-options.ts\n \n class\n ColorOptions\n \n 100 %\n (19/19)\n \n \n \n \n \n src/managers/ui-manager/dat-gui-ui.ts\n \n class\n DatGUIMenuUI\n \n 100 %\n (22/22)\n \n \n \n \n \n src/managers/ui-manager/index.ts\n \n class\n UIManager\n \n 100 %\n (40/40)\n \n \n \n \n \n src/managers/ui-manager/index.ts\n \n variable\n defaultAnimationPresets\n \n 100 %\n (1/1)\n \n \n \n \n \n src/managers/ui-manager/phoenix-menu/phoenix-menu-node.ts\n \n class\n PhoenixMenuNode\n \n 100 %\n (24/24)\n \n \n \n \n \n src/managers/ui-manager/phoenix-menu/phoenix-menu-ui.ts\n \n class\n PhoenixMenuUI\n \n 100 %\n (20/20)\n \n \n \n \n \n src/managers/ui-manager/phoenix-ui.ts\n \n interface\n PhoenixUI\n \n 100 %\n (11/11)\n \n \n \n \n \n src/managers/url-options-manager.ts\n \n class\n URLOptionsManager\n \n 100 %\n (12/12)\n \n \n \n \n \n src/managers/url-options-manager.ts\n \n variable\n phoenixURLOptions\n \n 100 %\n (1/1)\n \n \n \n\n\n\n\n\n new Tablesort(document.getElementById('coverage-table'));\n\n\n \n \n results matching \"\"\n \n \n \n No results matching \"\"\n \n\n"},"dependencies.html":{"url":"dependencies.html","title":"package-dependencies - dependencies","body":"\n \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n Dependencies\n \n \n \n @babel/core : ^7.20.12\n \n @tweenjs/tween.js : ^18.6.4\n \n dat.gui : ^0.7.9\n \n html2canvas : ^1.4.1\n \n jsroot : ^7.3.0\n \n jszip : ^3.10.1\n \n stats-js : ^1.0.1\n \n three : ^0.149.0\n \n\n\n\n\n\n\n\n \n \n results matching \"\"\n \n \n \n No results matching \"\"\n \n\n"},"miscellaneous/enumerations.html":{"url":"miscellaneous/enumerations.html","title":"miscellaneous-enumerations - enumerations","body":"\n \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n Miscellaneous\n Enumerations\n\n\n\n Index\n \n \n \n \n \n \n ClippingSetting   (src/.../preset-view.model.ts)\n \n \n ColorByOptionKeys   (src/.../color-options.ts)\n \n \n XRSessionType   (src/.../xr-manager.ts)\n \n \n \n \n \n \n\n\n src/lib/models/preset-view.model.ts\n \n \n \n \n \n \n ClippingSetting\n \n \n \n \n Preset view settings for clipping\n\n \n \n \n \n  NotForced\n \n \n \n \n  On\n \n \n \n \n  Off\n \n \n \n \n\n src/managers/ui-manager/color-options.ts\n \n \n \n \n \n \n ColorByOptionKeys\n \n \n \n \n Keys for options available for coloring event data by.\n\n \n \n \n \n  CHARGE\n \n \n \n \n Value : charge\n \n \n \n \n  MOM\n \n \n \n \n Value : mom\n \n \n \n \n  VERTEX\n \n \n \n \n Value : vertex\n \n \n \n \n\n src/managers/three-manager/xr/xr-manager.ts\n \n \n \n \n \n \n XRSessionType\n \n \n \n \n Type of the XR session.\n\n \n \n \n \n  VR\n \n \n \n \n Value : VR\n \n \n \n \n  AR\n \n \n \n \n Value : AR\n \n \n \n \n\n\n\n\n \n \n results matching \"\"\n \n \n \n No results matching \"\"\n \n\n"},"index.html":{"url":"index.html","title":"getting-started - index","body":"\n \n\nPhoenix event display\n\n\n\nA highly modular and API driven experiment independent event display that uses three.js for processing and presenting detector geometry and event data.\nTo use in your application, install the package.\nnpm install phoenix-event-display\n# or\nyarn add phoenix-event-displayUsage\nAs a module\nTo create a simple event display.\n// Import required classes\nimport { EventDisplay, PhoenixLoader } from 'phoenix-event-display';\n\n// Create the event display\nconst eventDisplay = new EventDisplay();\n\n// Define the configuration\nconst configuration = {\n elementId: '',\n eventDataLoader: new PhoenixLoader(), // or some other event data loader\n // ... other configuration options\n};\n\n// Initialize the event display with the configuration\neventDisplay.init(configuration);\n\n// Load and parse event data in Phoenix format and display it\nfetch('path/to/event-data.json')\n .then((res) => res.json())\n .then((res) => {\n eventDisplay.parsePhoenixEvents(res);\n });\n\n// Load detector geometry\neventDisplay.loadOBJGeometry(\n 'path/to/geometry.obj',\n 'Detector OBJ',\n 0x8c8c8c /* color */\n);As a standalone bundle\nPhoenix can be bundled and used directly in the HTML as a script along with three.js. You can either use the CDN or build from source.\nTo build Phoenix as a bundle.\nyarn build:bundleThis will generate a file phoenix.min.js in the ./dist/bundle directory which can be included in your HTML code.\nWithout building, you can include the bundle directly from CDN.\n\n \n ...\n \n\n \n \n\n \n \n\n \n // Create the event display\n const eventDisplay = new EventDisplay();\n\n // Define the configuration\n const configuration = {\n elementId: 'eventDisplay',\n eventDataLoader: new PhoenixLoader(), // or some other event data loader\n // ... other configuration options\n };\n\n // Initialize the event display with the configuration\n eventDisplay.init(configuration);\n\n // ... other event display functions\n \n \nExamples\n\nUsage in Angular (as a service)\nUsage in React\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n \n results matching \"\"\n \n \n \n No results matching \"\"\n \n\n"},"modules.html":{"url":"modules.html","title":"modules - modules","body":"\n \n\n\n\n\n Modules\n\n\n \n \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n \n results matching \"\"\n \n \n \n No results matching \"\"\n \n\n"},"overview.html":{"url":"overview.html","title":"overview - overview","body":"\n \n\n\n\n Overview\n\n \n\n \n \n \n \n \n 43 Classes\n \n \n \n \n \n \n \n 5 Interfaces\n \n \n \n \n\n\n \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n \n results matching \"\"\n \n \n \n No results matching \"\"\n \n\n"},"properties.html":{"url":"properties.html","title":"package-properties - properties","body":"\n \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n Properties\n \n \n \n Version : 2.14.0\n \n Description : API for web-based experiment independent event display.\n \n Homepage : http://github.com/HSF/phoenix/tree/master/packages/phoenix-event-display#readme\n \n License : Apache-2.0\n \n Repository : git://github.com/HSF/phoenix.git\n \n Author : Phoenix contributors (https://github.com/HSF/phoenix/graphs/contributors)\n \n\n\n\n\n\n \n \n results matching \"\"\n \n \n \n No results matching \"\"\n \n\n"},"miscellaneous/typealiases.html":{"url":"miscellaneous/typealiases.html","title":"miscellaneous-typealiases - typealiases","body":"\n \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n Miscellaneous\n Type aliases\n\n\n\n Index\n \n \n \n \n \n \n CallbackFunction   (src/.../active-variable.ts)\n \n \n ColorByOption   (src/.../color-options.ts)\n \n \n ConfigButton   (src/.../config-types.ts)\n \n \n ConfigCheckbox   (src/.../config-types.ts)\n \n \n ConfigColor   (src/.../config-types.ts)\n \n \n ConfigLabel   (src/.../config-types.ts)\n \n \n ConfigRangeSlider   (src/.../config-types.ts)\n \n \n ConfigSelect   (src/.../config-types.ts)\n \n \n ConfigSlider   (src/.../config-types.ts)\n \n \n GeometryUIParameters   (src/.../geometry-ui-parameters.ts)\n \n \n PhoenixMenuConfigs   (src/.../config-types.ts)\n \n \n \n \n \n \n\n\n src/helpers/active-variable.ts\n \n \n \n \n \n \n CallbackFunction\n \n \n \n \n Callback function type.\n\n \n \n \n \n function\n\n \n \n \n \n src/managers/ui-manager/color-options.ts\n \n \n \n \n \n \n ColorByOption\n \n \n \n \n Type for a single color by option.\n\n \n \n \n \n literal type\n\n \n \n \n \n src/managers/ui-manager/phoenix-menu/config-types.ts\n \n \n \n \n \n \n ConfigButton\n \n \n \n \n Type for Phoenix menu node \"button\" config.\n\n \n \n \n \n \n\n \n \n \n \n \n \n \n \n \n ConfigCheckbox\n \n \n \n \n Type for Phoenix menu node \"checkbox\" config.\n\n \n \n \n \n \n\n \n \n \n \n \n \n \n \n \n ConfigColor\n \n \n \n \n Type for Phoenix menu node \"color\" config.\n\n \n \n \n \n \n\n \n \n \n \n \n \n \n \n \n ConfigLabel\n \n \n \n \n Type for Phoenix menu node \"label\" config.\n\n \n \n \n \n literal type\n\n \n \n \n \n \n \n \n \n \n ConfigRangeSlider\n \n \n \n \n Type for Phoenix menu node \"rangeSlider\" config.\n\n \n \n \n \n \n\n \n \n \n \n \n \n \n \n \n ConfigSelect\n \n \n \n \n Type for Phoenix menu node \"select\" config.\n\n \n \n \n \n \n\n \n \n \n \n \n \n \n \n \n ConfigSlider\n \n \n \n \n Type for Phoenix menu node \"slider\" config.\n\n \n \n \n \n \n\n \n \n \n \n \n \n \n \n \n PhoenixMenuConfigs\n \n \n \n \n Type for all Phoenix menu mode configuration options.\n\n \n \n \n \n literal type\n\n \n \n \n \n src/lib/types/geometry-ui-parameters.ts\n \n \n \n \n \n \n GeometryUIParameters\n \n \n \n \n Parameters used when adding geometry to UI menus.\n\n \n \n \n \n literal type\n\n \n \n \n \n\n\n\n \n \n results matching \"\"\n \n \n \n No results matching \"\"\n \n\n"},"miscellaneous/variables.html":{"url":"miscellaneous/variables.html","title":"miscellaneous-variables - variables","body":"\n \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n Miscellaneous\n Variables\n\n\n\n Index\n \n \n \n \n \n \n defaultAnimationPresets   (src/.../index.ts)\n \n \n EVENT_DATA_TYPE_COLORS   (src/.../constants.ts)\n \n \n getFromLocalStorage   (src/.../browser-storage.ts)\n \n \n getLabelTitle   (src/.../labels.ts)\n \n \n loadFile   (src/.../file.ts)\n \n \n phoenixURLOptions   (src/.../url-options-manager.ts)\n \n \n readZipFile   (src/.../zip.ts)\n \n \n saveFile   (src/.../file.ts)\n \n \n setToLocalStorage   (src/.../browser-storage.ts)\n \n \n \n \n \n \n\n\n src/managers/ui-manager/index.ts\n \n \n \n \n \n \n \n defaultAnimationPresets\n \n \n \n \n \n \n Type : AnimationPreset[]\n\n \n \n \n \n Default value : [\n {\n name: 'Cavern to ID',\n positions: [\n {\n position: [66388.95051168812, 5264.228603228927, -46910.7848593543],\n duration: 1000,\n },\n {\n position: [12834.18729094943, 677.7571205763458, 135.68755273443463],\n duration: 2000,\n },\n {\n position: [312.02688693297375, 25.884223757326, 270.10019006776236],\n duration: 3500,\n },\n {\n position: [263.3640855132258, 19.874838262525053, -318.16541790248885],\n duration: 3000,\n },\n {\n position: [5534.140362338047, 234.03507981484574, -2933.619479808285],\n duration: 2000,\n },\n {\n position: [2681.277288705242, 646.5795158318147, 5628.5248735111745],\n duration: 1000,\n },\n {\n position: [-6062.586283740076, 790.5876682946184, 1381.1675900848818],\n duration: 1000,\n },\n {\n position: [-1766.7693725879053, 1007.1048030984678, -5928.901341784575],\n duration: 1000,\n },\n {\n position: [12814.982506255355, 2516.987185037266, -22891.902734328327],\n duration: 1000,\n },\n ],\n animateEventAfterInterval: 5000,\n collisionDuration: 6000,\n },\n]\n \n \n\n \n \n If animation presets not passed in configuration, we will use this.\n\n \n \n\n \n \n\n src/helpers/constants.ts\n \n \n \n \n \n \n \n EVENT_DATA_TYPE_COLORS\n \n \n \n \n \n \n Type : object\n\n \n \n \n \n Default value : {\n Hits: new Color(0xff0000),\n Tracks: new Color(0xff0000),\n Jets: new Color(0x2194ce),\n CaloClusters: new Color(0xffd166),\n MuonChambers: new Color(0xff0000),\n Vertices: new Color(0xffd166),\n MissingEnergy: new Color(0xffffff),\n PlanarCaloCells: new Color(0xfff69a),\n}\n \n \n\n \n \n Colors of different event data types.\n\n \n \n\n \n \n\n src/helpers/browser-storage.ts\n \n \n \n \n \n \n \n getFromLocalStorage\n \n \n \n \n \n \n Default value : (item: string) => {\n try {\n return localStorage.getItem(item);\n } catch (exception) {\n console.warn('Exception in localStorage', exception);\n }\n}\n \n \n\n \n \n Get an item from local storage.\n\n \n \n\n \n \n \n \n \n \n \n \n setToLocalStorage\n \n \n \n \n \n \n Default value : (item: string, value: string) => {\n try {\n localStorage.setItem(item, value);\n } catch (exception) {\n console.warn('Exception in localStorage', exception);\n }\n}\n \n \n\n \n \n Set item to local storage.\n\n \n \n\n \n \n\n src/helpers/labels.ts\n \n \n \n \n \n \n \n getLabelTitle\n \n \n \n \n \n \n Default value : (\n eventDataType: string,\n collection: string,\n index: string | number\n) => `${eventDataType} > ${collection} > ${index}`\n \n \n\n \n \n Get title of the label.\n\n \n \n\n \n \n\n src/helpers/file.ts\n \n \n \n \n \n \n \n loadFile\n \n \n \n \n \n \n Default value : (\n onFileRead: (data: string) => void,\n contentType: string = 'application/json'\n) => {\n // Create a mock input file element and use that to read the file\n let inputFile = document.createElement('input');\n inputFile.type = 'file';\n inputFile.accept = contentType;\n inputFile.onchange = (e: any) => {\n const configFile = e.target?.files[0];\n const reader = new FileReader();\n reader.onload = (e) => {\n onFileRead?.(e.target.result.toString());\n\n inputFile.remove();\n inputFile = null;\n };\n reader.readAsText(configFile);\n };\n inputFile.click();\n}\n \n \n\n \n \n Load a file from user by mocking an input element.\n\n \n \n\n \n \n \n \n \n \n \n \n saveFile\n \n \n \n \n \n \n Default value : (\n data: string,\n fileName: string,\n contentType: string = 'application/json'\n) => {\n const blob = new Blob([data], { type: contentType });\n const tempAnchor = document.createElement('a');\n tempAnchor.style.display = 'none';\n tempAnchor.href = URL.createObjectURL(blob);\n tempAnchor.download = fileName;\n tempAnchor.click();\n tempAnchor.remove();\n}\n \n \n\n \n \n Save and download file with the given data.\n\n \n \n\n \n \n\n src/managers/url-options-manager.ts\n \n \n \n \n \n \n \n phoenixURLOptions\n \n \n \n \n \n \n Type : object\n\n \n \n \n \n Default value : {\n file: '',\n type: '',\n config: '',\n hideWidgets: false,\n embed: false,\n}\n \n \n\n \n \n Model for Phoenix URL options.\n\n \n \n\n \n \n\n src/helpers/zip.ts\n \n \n \n \n \n \n \n readZipFile\n \n \n \n \n \n \n Default value : async (file: File | ArrayBuffer) => {\n const archive = new JSZip();\n const filesWithData: { [fileName: string]: string } = {};\n\n await archive.loadAsync(file);\n for (const filePath in archive.files) {\n const fileData = await archive.file(filePath).async('string');\n filesWithData[filePath] = fileData;\n }\n\n return filesWithData;\n}\n \n \n\n \n \n Read a zip file and return its contents as an object.\n\n \n \n\n \n \n\n\n\n\n \n \n results matching \"\"\n \n \n \n No results matching \"\"\n \n\n"}} + "index": {"version":"2.3.9","fields":["title","body"],"fieldVectors":[["title/classes/ARManager.html",[0,0.255,1,2.374]],["body/classes/ARManager.html",[0,0.251,1,3.204,2,0.363,3,0.241,4,0.213,5,0.159,6,2.514,7,5.327,8,1.084,9,0.437,10,4.344,11,1.449,12,1.782,13,2.025,14,3.204,15,3.968,16,0.159,17,0.588,18,2.361,19,5.393,20,1.677,21,5.393,22,4.05,23,4.583,24,1.4,25,3.554,26,5.238,27,3.554,28,3.925,29,2.975,30,3.554,31,3.554,32,3.554,33,0.541,34,4.354,35,2.841,36,3.554,37,4.733,38,4.05,39,3.554,40,4.05,41,3.554,42,0.752,43,3.461,44,2.222,45,2.688,46,4.927,47,0.737,48,2.599,49,0.964,50,0.581,51,0.024,52,0.474,53,0.268,54,0.544,55,2.184,56,1.099,57,0.815,58,0.694,59,0.964,60,2.941,61,2.466,62,2.925,63,4.05,64,3.333,65,4.733,66,1.314,67,4.733,68,3.554,69,1.021,70,4.733,71,1.237,72,4.733,73,2.319,74,2.599,75,2.925,76,2.692,77,3.717,78,4.733,79,1.483,80,0.685,81,4.022,82,2.941,83,4.011,84,2.643,85,2.867,86,5.837,87,2.941,88,1.314,89,4.011,90,1.481,91,2.941,92,2.319,93,2.164,94,1.182,95,2.941,96,3.144,97,2.643,98,3.583,99,3.333,100,2.941,101,1.247,102,2.941,103,0.567,104,2.343,105,2.343,106,2.599,107,0.961,108,2.941,109,2.941,110,2.052,111,3.461,112,0.908,113,3.554,114,3.461,115,2.925,116,4.733,117,0.945,118,3.461,119,2.941,120,2.139,121,1.225,122,2.599,123,2.941,124,2.599,125,1.823,126,2.031,127,2.599,128,1.969,129,2.941,130,2.599,131,3.554,132,3.461,133,2.343,134,2.139,135,0.617,136,0.578,137,1.969,138,2.139,139,2.343,140,2.139,141,2.941,142,2.599,143,2.599,144,1.225,145,2.599,146,2.599,147,2.599,148,1.696,149,1.696,150,2.139,151,3.461,152,0.27,153,0.503,154,4.583,155,2.599,156,3.461,157,4.733,158,3.461,159,5.393,160,3.461,161,2.599,162,0.396,163,3.461,164,2.941,165,3.461,166,1.823,167,2.599,168,3.461,169,1.483,170,2.343,171,3.461,172,5.393,173,3.461,174,2.599,175,3.461,176,1.969,177,3.461,178,3.461,179,3.461,180,2.941,181,2.599,182,3.461,183,2.941,184,3.461,185,3.461,186,0.016,187,0.016]],["title/classes/ActiveVariable.html",[0,0.255,188,1.995]],["body/classes/ActiveVariable.html",[0,0.341,2,0.492,3,0.327,4,0.289,5,0.215,9,0.454,16,0.215,17,0.716,20,1.632,24,1.419,33,0.66,42,1.019,47,0.701,49,1.175,50,0.598,51,0.024,52,0.488,53,0.261,54,0.58,57,0.63,58,0.83,93,2.979,94,1.175,96,3.192,97,3.336,103,0.5,112,0.904,126,1.767,150,4.207,152,0.451,153,0.542,186,0.019,187,0.019,188,3.281,189,5.112,190,3.523,191,3.721,192,4.902,193,5.768,194,3.564,195,5.768,196,5.021,197,5.768,198,4.207,199,4.692,200,5.23,201,4.692,202,4.331,203,6.245,204,5.785,205,4.692,206,4.692,207,5.768,208,4.692,209,4.902,210,5.768,211,4.692,212,6.514,213,0.835,214,4.692,215,4.692,216,4.692,217,4.692,218,4.692]],["title/interfaces/AnimationPreset.html",[219,1.321,220,1.995]],["body/interfaces/AnimationPreset.html",[0,0.171,3,0.164,4,0.145,5,0.108,6,0.943,8,0.737,9,0.164,11,1.204,12,1.347,13,1.006,16,0.108,17,0.444,20,1.265,24,1.198,29,2.122,42,0.777,44,1.787,45,2.214,49,0.479,51,0.024,52,0.429,53,0.225,54,0.42,55,1.347,58,0.269,59,0.883,69,1.277,71,1.265,73,1.152,77,2.035,79,2.078,80,0.627,84,1.152,85,1.636,88,0.653,90,1.006,92,1.152,93,1.075,94,1.061,96,2.552,97,2.88,98,2.676,101,0.543,103,0.31,107,1.344,112,0.928,117,1.071,120,1.452,121,0.832,134,2.676,135,0.596,136,0.392,137,1.337,148,1.152,149,1.753,152,0.279,153,0.604,162,0.269,169,1.719,170,1.591,174,3.252,186,0.012,187,0.012,194,1.452,209,1.997,213,0.977,219,0.885,220,2.464,221,1.337,222,1.591,223,4.31,224,2.035,225,4.847,226,4.662,227,3.289,228,2.422,229,3.426,230,0.953,231,4.612,232,5.011,233,1.347,234,6.142,235,2.464,236,5.899,237,3.577,238,1.884,239,1.997,240,4.33,241,1.753,242,2.228,243,3.04,244,2.035,245,2.35,246,5.878,247,1.884,248,2.422,249,3.577,250,3.277,251,2.211,252,2.35,253,1.266,254,2.122,255,2.35,256,1.997,257,2.122,258,1.42,259,3.04,260,1.452,261,0.832,262,2.35,263,2.35,264,3.577,265,2.35,266,1.997,267,2.035,268,2.35,269,2.035,270,1.452,271,2.35,272,0.963,273,2.35,274,3.252,275,2.35,276,3.252,277,2.35,278,3.911,279,2.35,280,2.35,281,4.283,282,1.152,283,2.211,284,3.04,285,5.848,286,3.68,287,1.997,288,2.035,289,2.35,290,2.35,291,2.422,292,1.337,293,1.765,294,2.35,295,1.779,296,2.35,297,2.35,298,2.35,299,3.68,300,2.35,301,3.577,302,1.997,303,2.211,304,2.211,305,1.997,306,1.152,307,2.35,308,2.35,309,2.35,310,2.35,311,2.35,312,2.35,313,2.35,314,4.426,315,4.426,316,5.733,317,3.526,318,4.426,319,5.878,320,2.753,321,2.35,322,3.577,323,2.35,324,2.35,325,1.337,326,4.33,327,2.35,328,3.577,329,2.35,330,4.33,331,4.84,332,2.35,333,1.765,334,2.35,335,5.486,336,2.35,337,1.435,338,2.422,339,3.577,340,4.84,341,3.219,342,2.35,343,1.152,344,1.853,345,3.577,346,4.84,347,1.337,348,4.84,349,2.35,350,1.997,351,1.997,352,3.577,353,4.84,354,1.591,355,3.577,356,3.577,357,2.35,358,3.577,359,3.577,360,3.577,361,3.577,362,2.35,363,2.35,364,1.997,365,1.152,366,1.997,367,2.35,368,3.577,369,2.35,370,2.35,371,2.35,372,1.765,373,2.35,374,2.35,375,2.35,376,2.35,377,1.997,378,1.997,379,1.997,380,3.577,381,2.35,382,2.35,383,2.35,384,3.577,385,2.35,386,1.452,387,2.35,388,2.35,389,2.753,390,3.04,391,2.35,392,2.35,393,2.35,394,2.35,395,2.35,396,2.35,397,1.591,398,2.422,399,2.35,400,2.35,401,2.35,402,2.35,403,2.35,404,3.577,405,1.765,406,2.35,407,2.35,408,2.35,409,2.35,410,2.35,411,2.35,412,3.577,413,2.35,414,2.35,415,2.35,416,2.35,417,2.35,418,2.35,419,2.35,420,2.35,421,2.35,422,2.35,423,2.35,424,2.35,425,2.35,426,2.35,427,2.35,428,2.35,429,2.35,430,2.35,431,3.577,432,4.33,433,2.35,434,2.35,435,2.35,436,1.997,437,2.35,438,1.591,439,2.35,440,3.172,441,4.995,442,4.33,443,3.577,444,3.04,445,3.577,446,2.35,447,2.35,448,4.84,449,1.997,450,2.35,451,2.422,452,4.33,453,1.591,454,2.35,455,1.238,456,3.577,457,3.577,458,2.35,459,2.35,460,2.35,461,2.35,462,2.35,463,2.35,464,2.35,465,1.997,466,1.452,467,3.577,468,2.35,469,1.006,470,1.591,471,2.35,472,1.997,473,5.878,474,4.119,475,3.577,476,1.152,477,4.33,478,2.35,479,4.33,480,2.35,481,3.04,482,1.997,483,2.35,484,2.35,485,3.577,486,3.577,487,2.211,488,3.577,489,2.35,490,3.577,491,2.35,492,2.35,493,2.35,494,2.35,495,2.35,496,2.35,497,2.35,498,2.35,499,2.35,500,2.35,501,2.35,502,2.35,503,3.68,504,3.577,505,2.35,506,2.35,507,2.35,508,4.84,509,2.35,510,2.35,511,2.35,512,1.765,513,1.452,514,3.577,515,2.35,516,1.997,517,2.35,518,1.997,519,2.35,520,1.997,521,2.35,522,3.577,523,2.55,524,2.211,525,3.577,526,2.35,527,1.452,528,2.35,529,2.35,530,2.35,531,3.577,532,2.35,533,2.35,534,2.35,535,3.04,536,2.35,537,3.577,538,2.35,539,2.35,540,2.35,541,2.35,542,2.35]],["title/classes/CMSObjects.html",[0,0.255,543,2.374]],["body/classes/CMSObjects.html",[0,0.332,2,0.479,3,0.319,4,0.281,5,0.21,9,0.396,16,0.21,18,2.325,24,0.932,33,0.649,47,0.479,50,0.635,51,0.024,52,0.357,53,0.175,54,0.397,59,1.157,68,3.433,69,1.674,80,0.662,85,2.596,103,0.492,117,0.712,135,0.649,136,0.763,144,2.009,152,0.357,153,0.397,162,0.523,169,1.779,170,3.842,186,0.019,187,0.019,213,1.012,230,0.822,241,2.781,243,4.823,244,3.229,247,3.252,248,3.842,257,2.781,272,0.908,291,3.095,304,2.825,344,2.429,397,3.842,487,3.508,543,3.842,544,4.823,545,3.885,546,3.508,547,2.429,548,4.823,549,4.262,550,4.823,551,5.676,552,5.676,553,4.572,554,3.508,555,6.765,556,6.765,557,6.173,558,4.572,559,5.676,560,5.676,561,5.676,562,3.433,563,4.572,564,3.885,565,5.676,566,4.572,567,4.572,568,4.572,569,4.572,570,4.572,571,4.572,572,5.676,573,6.173,574,6.173,575,5.676,576,6.173,577,6.173,578,3.433,579,5.676,580,6.173,581,6.173,582,5.676,583,6.173,584,6.173,585,5.676,586,3.885,587,5.676,588,3.885,589,3.433,590,5.676,591,4.572,592,4.572,593,4.572,594,4.572,595,4.572,596,4.572,597,3.433,598,2.825,599,4.572,600,2.825,601,4.572,602,6.173,603,3.885,604,4.572,605,4.572,606,5.676,607,4.572,608,4.572,609,3.885,610,4.572,611,4.572,612,4.572,613,4.572,614,4.572]],["title/classes/ColorManager.html",[0,0.255,615,2.374]],["body/classes/ColorManager.html",[0,0.29,2,0.418,3,0.278,4,0.246,5,0.183,6,2.619,8,1.25,9,0.455,11,1.537,12,1.96,16,0.183,24,1.39,33,0.595,42,0.867,44,2.046,47,0.668,49,1.061,50,0.609,51,0.024,52,0.548,53,0.244,54,0.553,55,2.312,56,0.813,58,0.702,69,1.811,76,2.961,80,1.01,85,2.38,94,1.181,101,1.203,103,0.533,112,0.922,117,0.621,135,0.595,136,0.666,137,3.784,152,0.312,153,0.585,155,2.996,169,2.271,186,0.017,187,0.017,230,0.889,253,1.842,257,3.342,258,1.419,261,1.842,272,0.924,337,2.088,343,2.55,453,2.701,455,3.052,609,3.391,615,3.524,616,4.036,617,4.156,618,3.217,619,5.205,620,5.793,621,5.205,622,3.99,623,3.99,624,3.908,625,5.205,626,2.996,627,4.156,628,3.234,629,2.797,630,3.504,631,5.205,632,3.908,633,5.205,634,3.99,635,3.908,636,3.99,637,5.217,638,6.139,639,4.423,640,2.996,641,5.205,642,3.217,643,5.205,644,3.908,645,5.205,646,3.217,647,5.205,648,3.99,649,5.205,650,3.524,651,3.908,652,3.99,653,3.99,654,3.99,655,3.99,656,3.99,657,3.908,658,5.205,659,3.908,660,3.908,661,3.908,662,5.205,663,5.205,664,5.205,665,3.99,666,3.99,667,3.99,668,3.99,669,3.99,670,5.205,671,5.205,672,3.99,673,3.391,674,3.99,675,3.99,676,3.99,677,3.99,678,3.99,679,3.99,680,3.99]],["title/classes/ColorOptions.html",[0,0.255,681,2.374]],["body/classes/ColorOptions.html",[0,0.187,2,0.271,3,0.18,4,0.159,5,0.118,9,0.378,11,1.06,12,1.446,16,0.118,17,0.477,20,1.887,33,0.439,42,0.834,47,0.71,49,0.783,50,0.602,51,0.024,52,0.51,53,0.255,54,0.44,55,1.446,56,0.526,57,0.791,58,0.785,59,1.034,61,1.756,66,1.273,69,1.944,71,1.644,73,1.266,76,2.887,80,0.823,85,2.096,88,1.066,92,2.487,103,0.561,112,0.911,117,0.714,126,0.973,135,0.58,136,0.641,152,0.3,153,0.511,162,0.58,169,2.278,186,0.013,187,0.013,230,0.895,235,2.185,257,2.487,258,1.454,261,1.797,272,0.682,295,1.716,306,1.266,337,1.541,343,2.246,347,1.469,455,3.101,513,2.373,524,1.596,615,3.986,616,4.224,617,3.103,618,3.137,629,2.281,630,2.415,635,1.94,639,3.264,650,3.436,681,2.6,682,3.111,683,1.749,684,2.217,685,4.584,686,4.584,687,3.896,688,4.584,689,4.584,690,4.584,691,5.076,692,5.076,693,5.076,694,3.84,695,3.84,696,5.076,697,5.076,698,5.076,699,5.076,700,3.84,701,2.583,702,5.076,703,2.995,704,5.076,705,4.421,706,2.583,707,2.185,708,1.004,709,3.264,710,4.831,711,2.644,712,4.313,713,3.888,714,3.84,715,3.127,716,3.84,717,4.134,718,3.84,719,4.831,720,3.945,721,5.076,722,3.84,723,3.84,724,3.264,725,3.84,726,2.583,727,3.264,728,6.29,729,2.583,730,3.638,731,2.583,732,2.583,733,3.103,734,2.6,735,2.583,736,1.726,737,2.246,738,5.425,739,3.896,740,2.487,741,3.84,742,2.583,743,3.84,744,2.583,745,3.436,746,3.673,747,2.583,748,2.583,749,2.583,750,3.84,751,2.583,752,3.436,753,3.84,754,3.442,755,4.61,756,4.61,757,4.584,758,5.425,759,4.584,760,3.84,761,2.583,762,5.425,763,2.487,764,2.583,765,2.583,766,2.583,767,2.583,768,2.884,769,3.84,770,6.049,771,2.583,772,3.84,773,3.84,774,1.469,775,1.94,776,1.749,777,1.469,778,1.596,779,1.94,780,3.673,781,5.076,782,2.583,783,2.583,784,2.583,785,4.584,786,2.281,787,2.583,788,1.756,789,4.61,790,2.583,791,2.583,792,1.94,793,2.583,794,2.195,795,2.583,796,2.583,797,2.583,798,2.583,799,2.583,800,2.583,801,2.583,802,3.84,803,5.685,804,2.583,805,2.583,806,2.583,807,3.84,808,3.84,809,2.583,810,2.583,811,2.583,812,2.583,813,3.84,814,2.583,815,4.584,816,4.584,817,3.84,818,1.749,819,1.749,820,2.195,821,1.94,822,1.749,823,2.195,824,2.195,825,2.583,826,2.583,827,2.583,828,2.583,829,2.583,830,4.584,831,3.84,832,3.84,833,2.195,834,3.84,835,3.84,836,3.84,837,2.583,838,2.583,839,2.583,840,2.583,841,2.583,842,1.266,843,2.583,844,2.195,845,2.583,846,2.583,847,2.583,848,2.583,849,3.84,850,3.264,851,2.583]],["title/interfaces/Configuration.html",[219,1.321,852,1.168]],["body/interfaces/Configuration.html",[3,0.308,4,0.272,5,0.203,9,0.308,11,1.023,16,0.203,17,0.69,45,2.403,51,0.024,53,0.271,54,0.628,56,1.367,57,0.901,59,1.133,61,3.068,62,3.436,66,1.544,80,0.997,117,0.947,121,1.968,135,0.752,136,0.739,144,1.968,152,0.346,166,2.929,186,0.018,187,0.018,219,1.666,220,3.629,221,2.516,222,2.995,224,3.629,230,1.024,233,2.094,258,1.52,317,3.764,624,4.175,684,1.999,703,3.361,736,2.476,737,2.98,777,2.516,852,2.124,853,3.759,854,2.375,855,6.38,856,6.38,857,5.422,858,4.319,859,6.38,860,4.256,861,6.38,862,4.79,863,6.38,864,6.38,865,4.175,866,3.361,867,2.094,868,4.175,869,3.163,870,5.56,871,2.23,872,3.764,873,3.163,874,3.163,875,3.203,876,3.764,877,3.163,878,5.56,879,5.56,880,5.56,881,5.56,882,6.38,883,4.319,884,4.175,885,4.424,886,4.424,887,4.424,888,3.322,889,2.33,890,3.322,891,4.424,892,4.424,893,4.424]],["title/classes/CoordinateHelper.html",[0,0.255,894,2.167]],["body/classes/CoordinateHelper.html",[0,0.272,2,0.392,3,0.261,4,0.23,5,0.172,9,0.447,16,0.172,18,2.661,24,1.271,33,0.685,47,0.673,50,0.644,51,0.024,52,0.487,53,0.239,54,0.541,56,0.762,71,1.467,103,0.59,117,1.13,135,0.428,136,0.625,152,0.292,153,0.577,162,0.733,186,0.016,187,0.016,213,0.929,242,2.801,272,0.879,274,4.495,276,4.214,278,4.214,288,3.405,293,2.809,295,1.781,299,5.781,303,4.204,305,3.179,372,4.495,386,3.468,397,3.377,449,5.45,642,3.083,818,3.377,842,1.833,894,3.083,895,5.564,896,2.809,897,3.377,898,4.495,899,4.988,900,4.988,901,5.986,902,5.612,903,4.988,904,4.769,905,4.988,906,3.741,907,4.799,908,3.741,909,4.988,910,4.988,911,4.239,912,4.988,913,4.835,914,3.741,915,5.612,916,3.741,917,6.734,918,4.239,919,4.988,920,4.988,921,3.377,922,4.239,923,2.838,924,3.741,925,5.338,926,3.741,927,5.986,928,4.988,929,5.986,930,5.986,931,5.986,932,6.414,933,4.988,934,5.986,935,6.907,936,4.988,937,3.741,938,6.651,939,4.495,940,5.986,941,5.986,942,5.986,943,5.986,944,3.741,945,3.741,946,4.988,947,3.741,948,4.988,949,3.741,950,3.741,951,3.741,952,4.239,953,3.746,954,4.988,955,5.087,956,4.988,957,4.988,958,3.741,959,3.741,960,5.986,961,4.988,962,3.741,963,4.988,964,3.741,965,3.741,966,3.741,967,3.179,968,3.741,969,3.741,970,3.741,971,3.741,972,3.741,973,3.741]],["title/classes/Cut.html",[0,0.255,974,1.847]],["body/classes/Cut.html",[0,0.269,2,0.389,3,0.259,4,0.229,5,0.17,9,0.346,16,0.17,17,0.616,20,1.803,24,1.443,33,0.568,42,1.078,47,0.735,49,1.011,50,0.571,51,0.024,52,0.51,53,0.267,54,0.518,56,1.451,57,0.932,58,0.812,59,1.434,71,1.297,80,0.864,93,2.27,103,0.589,112,0.809,117,1.106,152,0.29,153,0.555,162,0.425,186,0.016,187,0.016,230,1.019,254,2.739,258,1.626,306,3.136,343,2.924,470,4.04,476,2.739,642,3.067,755,5.773,756,5.773,911,4.217,974,3.742,975,3.155,976,3.155,977,3.713,978,4.348,979,5.59,980,5.59,981,5.59,982,5.59,983,4.211,984,6.535,985,5.553,986,6.535,987,5.553,988,4.963,989,6.219,990,6.219,991,3.641,992,3.713,993,4.963,994,3.067,995,5.59,996,6.793,997,5.59,998,3.455,999,6.4,1000,6.4,1001,4.805,1002,3.713,1003,5.438,1004,5.968,1005,4.217,1006,3.713,1007,3.713,1008,3.713,1009,3.713,1010,3.713,1011,3.713,1012,3.713,1013,3.713,1014,4.963,1015,3.713,1016,2.614,1017,4.963,1018,3.713,1019,5.968,1020,4.963,1021,3.713,1022,3.713,1023,4.963,1024,4.963,1025,4.963,1026,4.963,1027,5.59,1028,4.963,1029,4.963,1030,3.713]],["title/classes/DatGUIMenuUI.html",[0,0.255,1031,2.633]],["body/classes/DatGUIMenuUI.html",[0,0.29,2,0.217,3,0.144,4,0.127,5,0.095,9,0.413,11,1.204,12,2.123,13,1.935,16,0.149,17,0.402,20,1.803,24,1.403,33,0.371,42,0.449,44,1.417,47,0.698,49,0.814,50,0.555,51,0.024,52,0.51,53,0.266,54,0.503,55,1.703,56,1.062,57,0.7,58,0.728,59,1.149,66,0.574,68,1.553,69,1.952,71,0.847,73,1.013,77,2.273,79,1.767,80,0.984,88,1.447,90,2.412,94,0.814,101,0.749,103,0.533,107,0.574,112,0.902,117,0.622,126,1.849,135,0.596,136,0.968,137,2.963,152,0.162,153,0.558,162,0.517,167,1.553,169,2.073,181,1.553,186,0.011,187,0.011,213,0.711,230,1.006,241,1.013,244,1.843,247,2.869,253,1.601,258,1.615,261,1.844,269,1.176,272,0.933,274,3.396,276,3.396,278,3.687,291,3.527,292,2.573,293,4.233,295,1.447,325,1.843,337,2.09,344,2.751,347,1.843,389,2.963,398,2.194,469,2.101,476,1.588,487,1.278,513,3.796,527,2.002,547,1.386,589,1.553,618,2.795,629,2.379,630,2.587,651,1.553,657,3.396,659,2.433,660,1.553,682,3.058,684,1.632,707,4.023,708,1.729,736,2.611,740,2.553,786,2.424,788,2.809,822,1.4,852,1.506,858,2.194,871,2.09,872,3.061,873,1.843,874,3.689,918,2.754,921,3.527,974,2.587,985,2.754,987,2.754,994,2.002,998,1.278,1031,2.433,1032,5.682,1033,5.303,1034,1.4,1035,2.002,1036,2.49,1037,2.754,1038,2.273,1039,3.395,1040,3.395,1041,3.995,1042,3.395,1043,3.995,1044,3.995,1045,3.995,1046,3,1047,3.396,1048,2.433,1049,2.433,1050,3.396,1051,2.433,1052,2.433,1053,3.911,1054,2.433,1055,2.433,1056,3.24,1057,3.24,1058,2.795,1059,2.754,1060,1.843,1061,2.573,1062,1.757,1063,2.068,1064,2.963,1065,1.757,1066,3.24,1067,3.373,1068,1.553,1069,2.068,1070,5.209,1071,2.068,1072,5.209,1073,2.068,1074,2.068,1075,1.553,1076,4.158,1077,2.068,1078,3.396,1079,2.469,1080,3.438,1081,2.068,1082,2.194,1083,2.433,1084,3.687,1085,2.433,1086,2.068,1087,3.687,1088,2.433,1089,4.522,1090,2.068,1091,2.433,1092,3.396,1093,2.433,1094,2.068,1095,2.433,1096,3.687,1097,2.068,1098,3.061,1099,2.795,1100,2.194,1101,2.573,1102,2.433,1103,2.068,1104,3,1105,2.433,1106,2.068,1107,2.194,1108,2.194,1109,2.433,1110,2.068,1111,2.433,1112,5.209,1113,2.068,1114,3.24,1115,2.068,1116,1.553,1117,1.553,1118,1.013,1119,2.068,1120,2.068,1121,2.068,1122,2.068,1123,2.068,1124,1.757,1125,1.278,1126,1.757,1127,2.068,1128,4.427,1129,4.173,1130,4.791,1131,1.757,1132,2.068,1133,2.068,1134,2.068,1135,2.068,1136,2.433,1137,3.911,1138,4.522,1139,2.068,1140,3.24,1141,5.446,1142,4.926,1143,2.068,1144,2.754,1145,1.757,1146,3.24,1147,1.757,1148,2.068,1149,2.068,1150,2.068,1151,1.757,1152,1.278,1153,1.757,1154,2.068,1155,2.068,1156,3.24,1157,2.433,1158,2.068,1159,4.791,1160,2.068,1161,3.24,1162,4.522,1163,2.068,1164,3.995,1165,3.24,1166,1.757,1167,5.209,1168,2.068,1169,2.068,1170,2.068,1171,1.757,1172,2.068,1173,3.995,1174,3.24,1175,1.757,1176,2.068,1177,2.068,1178,2.068,1179,2.068,1180,2.068,1181,2.068,1182,3.24,1183,2.068,1184,3.995,1185,2.068,1186,3.24,1187,2.068,1188,2.068,1189,3.24,1190,2.068,1191,2.068,1192,2.068,1193,1.176,1194,2.068,1195,2.068,1196,2.068,1197,2.068,1198,1.757,1199,1.757,1200,2.068,1201,1.013,1202,2.068,1203,2.068,1204,2.068,1205,3.995,1206,3.24,1207,1.757,1208,2.068,1209,2.068,1210,1.757,1211,2.068,1212,1.757,1213,3.843,1214,2.068,1215,2.068,1216,1.757,1217,2.068,1218,2.068,1219,2.068,1220,3.24,1221,2.068,1222,3.24,1223,1.757,1224,4.522,1225,2.068,1226,3.995,1227,1.757,1228,1.757,1229,1.757,1230,2.068,1231,2.068,1232,2.068,1233,2.068,1234,4.522,1235,2.068,1236,2.068,1237,2.068,1238,3.843,1239,3.843,1240,2.068,1241,3.24,1242,2.068,1243,2.754,1244,2.068,1245,2.068,1246,2.068,1247,1.553,1248,1.757,1249,1.757,1250,2.754,1251,2.754,1252,2.068,1253,2.068,1254,1.757,1255,3.24,1256,3.24,1257,4.522,1258,2.068,1259,2.068,1260,2.068,1261,2.068,1262,2.068,1263,2.068,1264,2.068,1265,2.068,1266,2.068,1267,2.068,1268,4.522,1269,2.068,1270,2.068,1271,2.068,1272,2.068,1273,1.757,1274,1.757,1275,1.757,1276,1.757,1277,2.068,1278,2.068,1279,2.068,1280,1.757,1281,1.757,1282,2.068,1283,1.757,1284,2.068,1285,2.068,1286,1.553,1287,1.553,1288,2.068,1289,2.068,1290,2.068]],["title/classes/EffectsManager.html",[0,0.255,1291,2.374]],["body/classes/EffectsManager.html",[0,0.251,2,0.362,3,0.241,4,0.213,5,0.158,6,2.754,8,1.082,9,0.437,11,1.339,16,0.158,17,0.587,20,1.814,24,1.432,29,3.2,33,0.54,42,1.17,44,2.286,45,2.734,47,0.715,50,0.58,51,0.024,52,0.474,53,0.259,54,0.526,55,2.181,56,1.236,57,0.908,58,0.395,59,0.963,61,2.649,71,0.902,94,1.18,99,3.58,101,1.245,103,0.544,110,2.372,112,0.878,135,0.694,136,0.577,152,0.27,153,0.575,162,0.395,186,0.016,187,0.016,213,0.839,230,1.01,253,1.673,272,0.635,333,4.349,338,3.921,469,2.022,628,3.44,640,2.592,715,2.315,854,2.469,1101,2.688,1291,3.199,1292,5.835,1293,5.121,1294,4.349,1295,5.926,1296,4.015,1297,4.015,1298,5.629,1299,6.866,1300,5.387,1301,4.721,1302,5.792,1303,4.725,1304,4.725,1305,4.725,1306,4.725,1307,4.725,1308,4.015,1309,4.015,1310,5.792,1311,2.92,1312,3.921,1313,4.349,1314,2.134,1315,5.387,1316,2.592,1317,6.701,1318,5.387,1319,2.934,1320,3.548,1321,3.548,1322,4.816,1323,2.592,1324,3.453,1325,4.922,1326,4.922,1327,4.349,1328,5.549,1329,4.725,1330,3.453,1331,4.725,1332,3.453,1333,4.725,1334,2.934,1335,4.725,1336,2.934,1337,3.453,1338,2.337,1339,4.725,1340,3.453,1341,3.453,1342,3.453,1343,4.725,1344,3.453,1345,4.578,1346,4.015,1347,3.453,1348,3.453,1349,3.453,1350,2.134,1351,4.725,1352,5.387,1353,4.725,1354,4.725,1355,3.453,1356,3.453,1357,3.453,1358,3.453,1359,3.453,1360,2.934,1361,3.453,1362,3.453,1363,3.453,1364,3.453,1365,3.453,1366,3.453,1367,3.453]],["title/interfaces/EventDataLoader.html",[219,1.321,860,2.167]],["body/interfaces/EventDataLoader.html",[3,0.398,4,0.238,5,0.177,9,0.439,11,1.496,16,0.262,33,0.583,47,0.692,50,0.58,51,0.024,52,0.474,53,0.242,54,0.526,69,2.117,80,1.03,88,1.86,103,0.611,112,0.738,117,0.888,121,1.804,125,2.685,135,0.652,152,0.302,153,0.588,186,0.017,187,0.017,219,1.455,221,2.198,228,3.45,230,1.048,233,1.455,235,2.899,257,3.282,258,1.621,325,3.244,546,3.15,549,3.827,628,2.685,629,2.836,630,2.685,632,4.553,650,3.45,708,1.585,711,2.44,754,3.827,763,2.497,778,3.747,786,2.719,822,3.45,854,1.804,860,3.15,871,2.044,875,2.685,888,2.902,890,2.902,923,2.899,1036,2.96,1058,3.747,1060,3.892,1061,3.449,1064,2.899,1067,3.682,1099,3.15,1201,2.497,1368,5.693,1369,2.902,1370,5.096,1371,5.096,1372,5.703,1373,5.703,1374,5.096,1375,5.153,1376,5.153,1377,5.096,1378,6.063,1379,3.864,1380,5.153,1381,3.864,1382,3.864,1383,5.153,1384,4.553,1385,3.811,1386,3.864,1387,5.5,1388,4.331,1389,5.096,1390,5.096,1391,4.331,1392,3.827,1393,4.331,1394,5.096,1395,3.827,1396,5.096,1397,3.861,1398,3.827,1399,4.331,1400,3.864,1401,4.331,1402,4.331,1403,3.864,1404,3.45,1405,4.105,1406,4.331,1407,5.5,1408,3.864,1409,4.553,1410,3.827,1411,5.096,1412,3.864,1413,4.331,1414,4.14,1415,4.331,1416,3.827,1417,3.864,1418,2.902]],["title/classes/ExportManager.html",[0,0.255,1419,2.633]],["body/classes/ExportManager.html",[0,0.282,2,0.407,3,0.271,4,0.239,5,0.262,6,2.6,8,1.217,9,0.452,11,1.182,12,1.925,16,0.178,20,1.773,24,1.321,33,0.585,44,2.258,47,0.662,50,0.604,51,0.024,52,0.493,53,0.242,54,0.548,66,1.687,90,2.187,92,3.466,103,0.548,112,0.74,135,0.695,136,0.648,152,0.447,153,0.582,162,0.654,186,0.017,187,0.017,213,0.74,230,1.006,247,3.726,253,1.81,258,1.583,260,3.159,272,0.938,325,3.926,629,1.557,673,3.299,842,1.902,852,2.233,867,1.925,1001,3.839,1064,4.092,1193,2.908,1314,2.399,1392,3.839,1419,3.839,1420,5.507,1421,5.716,1422,5.112,1423,5.112,1424,5.112,1425,5.112,1426,3.882,1427,3.882,1428,5.162,1429,4.112,1430,3.839,1431,4.344,1432,4.344,1433,6.074,1434,4.048,1435,5.112,1436,5.112,1437,3.882,1438,3.687,1439,5.112,1440,3.882,1441,5.112,1442,3.882,1443,3.839,1444,5.112,1445,5.112,1446,3.882,1447,5.112,1448,3.882,1449,2.628,1450,3.299,1451,3.882,1452,5.716,1453,3.869,1454,3.882,1455,3.882,1456,3.882,1457,5.112,1458,6.074,1459,3.882,1460,2.628,1461,2.628,1462,3.299,1463,2.915,1464,4.344,1465,3.882,1466,3.882,1467,3.299,1468,3.882,1469,3.882,1470,3.882,1471,6.074,1472,3.882,1473,6.074,1474,3.882,1475,3.299,1476,3.882,1477,3.882,1478,3.882,1479,3.882,1480,3.882,1481,3.882,1482,3.882,1483,3.882]],["title/classes/Field.html",[0,0.255,983,2.374]],["body/classes/Field.html",[0,0.409,2,0.396,3,0.264,4,0.233,5,0.173,9,0.264,13,1.617,16,0.173,17,0.469,18,2.264,33,0.574,47,0.396,50,0.362,51,0.024,52,0.295,53,0.145,54,0.328,56,0.77,57,0.508,59,1.024,71,0.988,79,2.016,88,1.05,94,0.77,103,0.558,107,1.05,117,1.077,121,1.338,135,0.432,136,0.631,144,1.778,149,1.852,152,0.295,153,0.578,162,0.574,186,0.016,187,0.016,198,2.336,213,0.547,238,1.991,242,3.059,254,1.852,267,3.209,269,2.15,272,0.923,282,1.852,283,3.486,306,3.152,320,2.15,354,4.069,365,1.852,451,3.4,476,2.764,523,1.991,713,2.857,720,3.209,740,1.852,763,2.461,819,2.559,842,3.152,983,4.069,1016,1.991,1035,2.336,1350,3.104,1453,2.559,1484,3.4,1485,2.559,1486,2.838,1487,3.78,1488,3.78,1489,3.78,1490,3.771,1491,4.614,1492,4.614,1493,2.15,1494,2.633,1495,2.838,1496,2.838,1497,2.838,1498,4.069,1499,3.714,1500,2.559,1501,2.838,1502,2.838,1503,4.236,1504,2.838,1505,2.838,1506,2.838,1507,2.838,1508,4.513,1509,4.235,1510,3.771,1511,3.771,1512,4.929,1513,5.006,1514,4.513,1515,4.069,1516,2.838,1517,2.838,1518,2.838,1519,5.067,1520,2.838,1521,2.15,1522,5.006,1523,2.838,1524,2.838,1525,4.698,1526,5.117,1527,2.838,1528,4.929,1529,2.838,1530,2.838,1531,2.838,1532,3.771,1533,2.838,1534,3.771,1535,4.235,1536,2.838,1537,2.838,1538,2.838,1539,2.838,1540,2.838,1541,2.838,1542,2.838,1543,2.838,1544,2.838,1545,2.838,1546,2.838,1547,2.838,1548,2.838,1549,2.838,1550,2.838,1551,2.838,1552,2.15,1553,2.838,1554,4.235,1555,3.771,1556,2.838,1557,4.235,1558,2.838,1559,4.235,1560,3.771,1561,2.838,1562,2.838,1563,2.838,1564,2.838,1565,2.838,1566,2.838,1567,2.838,1568,2.838,1569,2.838,1570,2.838,1571,2.838,1572,3.771,1573,3.771,1574,3.771,1575,4.235,1576,3.104,1577,4.235,1578,3.771,1579,2.559,1580,3.4,1581,2.559,1582,2.336,1583,3.104,1584,2.838,1585,2.838,1586,2.838,1587,2.838,1588,2.838,1589,2.838,1590,2.838]],["title/classes/InfoLogger.html",[0,0.255,1385,1.995]],["body/classes/InfoLogger.html",[0,0.347,2,0.501,3,0.503,4,0.294,5,0.219,9,0.407,16,0.219,17,0.724,20,1.787,33,0.667,47,0.687,50,0.457,51,0.024,52,0.373,53,0.241,54,0.414,57,0.783,58,0.667,73,2.857,80,0.99,88,1.619,103,0.546,110,2.064,112,0.692,117,0.908,126,1.799,152,0.373,153,0.506,162,0.546,186,0.019,187,0.019,230,0.692,258,1.627,628,3.072,708,1.713,740,2.857,786,2.777,854,1.691,1385,3.317,1397,4.766,1398,3.587,1405,4.629,1416,4.378,1591,5.712,1592,4.059,1593,6.294,1594,6.294,1595,6.554,1596,4.777,1597,4.955,1598,4.777,1599,5.831,1600,5.831,1601,4.378,1602,4.955,1603,5.831,1604,4.777,1605,5.831,1606,5.134,1607,4.777,1608,4.378,1609,4.378,1610,4.777,1611,4.777,1612,4.777,1613,4.777,1614,4.777]],["title/classes/LoadingManager.html",[0,0.255,1615,2.167]],["body/classes/LoadingManager.html",[0,0.251,2,0.363,3,0.241,4,0.213,5,0.159,8,1.085,9,0.447,11,1.511,16,0.159,17,0.588,18,2.032,20,1.783,24,1.462,33,0.541,42,1.172,47,0.725,49,0.965,50,0.6,51,0.024,52,0.49,53,0.263,54,0.544,57,0.862,58,0.734,66,1.498,74,3.555,80,1,94,1.351,96,3.432,97,3.386,103,0.567,112,1.006,117,0.999,148,3.465,152,0.271,153,0.557,162,0.396,186,0.016,187,0.016,196,4.355,233,1.304,235,2.693,253,1.226,272,0.779,295,1.498,343,2.32,438,4.742,708,1.708,711,1.482,734,4.244,788,1.584,867,2.361,871,2.737,877,3.931,991,3.567,1080,2.693,1142,4.023,1314,2.14,1323,2.6,1434,4.012,1615,3.584,1616,5.902,1617,2.943,1618,5.395,1619,5.395,1620,5.395,1621,5.395,1622,4.735,1623,4.735,1624,4.735,1625,4.735,1626,4.735,1627,4.735,1628,4.023,1629,3.463,1630,3.463,1631,4.735,1632,5.31,1633,3.463,1634,4.735,1635,3.463,1636,4.735,1637,3.463,1638,5.328,1639,4.735,1640,3.463,1641,4.735,1642,2.943,1643,5.8,1644,4.735,1645,2.6,1646,4.735,1647,4.735,1648,2.943,1649,4.735,1650,3.463,1651,5.395,1652,3.463,1653,4.735,1654,3.463,1655,3.463,1656,2.943,1657,5.395,1658,4.735,1659,3.463,1660,3.463,1661,3.463,1662,3.463,1663,4.735,1664,3.463,1665,4.735,1666,4.023,1667,4.735,1668,3.463,1669,3.463,1670,4.735,1671,3.463,1672,4.735,1673,3.463,1674,3.463,1675,3.463,1676,3.463,1677,3.463]],["title/classes/PhoenixMenuNode.html",[0,0.255,703,1.847]],["body/classes/PhoenixMenuNode.html",[0,0.177,2,0.255,3,0.17,4,0.15,5,0.112,9,0.432,16,0.112,17,0.456,20,1.454,33,0.42,42,0.798,47,0.72,49,1.134,50,0.593,51,0.024,52,0.554,53,0.268,54,0.528,56,1.328,57,0.775,58,0.763,59,1.134,66,1.792,69,1.561,71,1.157,75,3.437,76,3.01,80,1.011,88,1.021,93,2.254,94,1.315,101,0.563,103,0.579,107,1.689,112,0.898,117,0.572,121,2.259,126,2.175,135,0.279,140,2.272,152,0.19,153,0.579,162,0.66,166,1.283,169,1.387,186,0.012,187,0.012,192,3.124,194,2.272,200,3.702,213,0.353,233,1.667,270,1.506,272,0.883,295,1.229,436,2.07,469,2.652,470,2.488,524,2.272,527,2.272,578,2.76,629,0.977,661,5.218,682,3.15,684,2.043,703,3.651,708,1.288,711,1.894,717,3.047,736,2.669,737,3.563,768,4.654,777,3.918,788,1.681,821,1.829,850,3.124,852,1.979,867,1.384,889,3.629,998,1.506,1060,1.386,1101,2.091,1137,4.567,1201,1.801,1247,4.846,1438,1.386,1494,2.657,1632,4.177,1678,2.07,1679,5.734,1680,4.426,1681,4.426,1682,4.426,1683,5.066,1684,4.426,1685,4.937,1686,4.426,1687,4.426,1688,4.426,1689,3.676,1690,3.676,1691,3.676,1692,4.93,1693,3.124,1694,3.676,1695,3.676,1696,4.93,1697,2.07,1698,3.676,1699,5.051,1700,2.436,1701,2.436,1702,2.436,1703,4.189,1704,3.676,1705,2.436,1706,2.436,1707,2.436,1708,2.436,1709,2.76,1710,2.436,1711,2.436,1712,2.436,1713,2.436,1714,2.436,1715,2.436,1716,4.426,1717,2.436,1718,3.4,1719,3.676,1720,2.436,1721,3.124,1722,3.676,1723,2.436,1724,4.463,1725,4.93,1726,4.93,1727,3.676,1728,2.436,1729,2.436,1730,3.124,1731,2.436,1732,3.381,1733,2.436,1734,3.676,1735,2.436,1736,3.676,1737,2.436,1738,3.124,1739,3.676,1740,2.436,1741,3.762,1742,2.76,1743,3.676,1744,3.762,1745,2.07,1746,2.436,1747,5.291,1748,3.676,1749,3.676,1750,2.436,1751,2.436,1752,2.436,1753,3.676,1754,2.436,1755,2.436,1756,2.436,1757,2.436,1758,2.436,1759,2.436,1760,1.649,1761,2.436,1762,2.436,1763,2.436,1764,2.436,1765,2.436,1766,2.436,1767,4.93,1768,3.676,1769,3.676,1770,2.436,1771,2.436,1772,2.436,1773,4.93,1774,2.07,1775,2.436,1776,2.436,1777,2.436,1778,2.436,1779,2.436,1780,2.436,1781,4.426,1782,2.436,1783,2.07,1784,2.436,1785,2.07,1786,2.436,1787,2.436,1788,2.436,1789,3.676,1790,2.436,1791,2.436,1792,2.436,1793,2.436,1794,3.676,1795,2.436,1796,2.436,1797,2.436,1798,4.426,1799,2.07,1800,2.436,1801,2.436,1802,2.436,1803,3.676,1804,2.436,1805,4.426,1806,2.436,1807,2.436,1808,2.436,1809,2.436,1810,2.436,1811,2.436,1812,2.436,1813,2.436,1814,2.436,1815,2.436,1816,2.436,1817,4.426,1818,2.436,1819,2.436,1820,2.436,1821,2.436,1822,2.436,1823,2.436,1824,5.774,1825,2.436,1826,4.426,1827,2.436,1828,3.676,1829,2.436,1830,2.436,1831,2.436,1832,2.436,1833,2.436]],["title/classes/PhoenixMenuUI.html",[0,0.255,1834,2.633]],["body/classes/PhoenixMenuUI.html",[0,0.293,2,0.22,3,0.229,4,0.129,5,0.096,9,0.423,11,1.212,12,2.243,13,1.952,16,0.096,17,0.407,20,1.76,24,1.415,33,0.375,42,0.713,44,1.429,47,0.691,49,0.669,50,0.57,51,0.024,52,0.53,53,0.265,54,0.517,55,1.718,56,1.069,57,0.441,58,0.782,59,1.069,66,1.842,69,1.547,71,1.055,73,1.03,75,2.028,77,2.296,80,0.996,88,1.574,90,2.492,94,0.823,101,0.758,103,0.549,107,0.583,112,0.925,126,1.863,134,1.298,135,0.648,136,0.973,137,2.983,152,0.164,153,0.572,162,0.522,166,1.728,169,2.003,174,3.031,181,1.578,183,1.786,186,0.011,187,0.011,213,0.475,230,1.008,241,1.03,244,1.866,247,2.403,253,1.615,258,1.612,261,1.856,272,0.839,292,2.815,295,1.374,306,2.57,337,2.274,344,2.638,347,1.866,351,1.786,365,1.03,389,2.983,398,2.221,469,1.952,476,1.03,487,3.058,527,2.028,547,1.404,597,2.464,618,3.058,629,2.474,630,3.398,642,1.298,651,1.578,657,3.938,659,3.425,660,3.031,681,2.221,682,3.033,684,1.932,687,2.788,703,3.547,705,2.464,707,3.974,708,1.76,712,1.786,719,1.786,724,1.786,736,2.699,737,3.132,739,4.456,740,2.57,774,1.195,775,1.578,776,1.422,777,3.773,786,2.758,788,1.5,789,5.24,792,3.715,833,3.877,852,1.519,862,3.031,867,1.52,871,1.83,872,2.221,889,3.494,921,3.55,974,3.197,991,1.195,994,2.028,1034,1.422,1035,2.028,1036,2.505,1037,2.788,1038,2.296,1039,3.43,1040,3.43,1042,3.43,1046,3.031,1047,3.425,1048,2.464,1049,2.464,1050,3.425,1051,2.464,1052,2.464,1053,3.938,1054,2.464,1055,2.464,1058,2.819,1060,1.866,1061,1.866,1064,1.866,1065,1.786,1067,3.224,1068,1.578,1075,1.578,1076,4.464,1078,3.425,1079,2.819,1080,1.866,1082,2.221,1083,2.464,1084,2.464,1085,2.464,1087,3.715,1088,2.464,1091,2.464,1092,3.425,1093,2.464,1095,2.464,1096,3.715,1098,3.55,1099,2.819,1100,2.221,1101,1.866,1102,2.464,1104,3.031,1105,3.938,1107,2.221,1108,2.221,1109,2.464,1111,2.464,1116,1.578,1117,1.578,1128,4.456,1129,3.877,1130,3.877,1131,1.786,1136,2.464,1144,1.786,1145,2.788,1151,1.786,1152,1.298,1153,1.786,1159,2.788,1166,1.786,1171,1.786,1175,1.786,1198,1.786,1207,1.786,1210,1.786,1212,1.786,1213,2.788,1216,1.786,1223,1.786,1227,1.786,1228,1.786,1238,3.43,1239,3.43,1243,3.43,1247,2.464,1248,2.788,1249,2.788,1250,2.788,1251,2.788,1254,2.788,1273,1.786,1274,1.786,1275,1.786,1276,1.786,1280,1.786,1281,1.786,1283,1.786,1286,1.578,1287,1.578,1393,2.788,1438,1.195,1494,1.83,1685,3.425,1709,1.578,1718,1.107,1724,1.578,1785,3.43,1834,2.464,1835,4.037,1836,4.037,1837,4.037,1838,4.562,1839,2.101,1840,3.281,1841,2.101,1842,2.101,1843,2.101,1844,2.101,1845,2.101,1846,5.668,1847,2.101,1848,2.101,1849,2.101,1850,2.101,1851,4.205,1852,2.101,1853,2.101,1854,2.101,1855,2.101,1856,2.101,1857,2.101,1858,2.101,1859,5.825,1860,2.101,1861,2.788,1862,2.101,1863,4.037,1864,2.101,1865,2.101,1866,2.101,1867,3.281,1868,4.037,1869,3.281,1870,1.578,1871,2.101,1872,3.281,1873,2.101,1874,2.101,1875,2.101,1876,1.786,1877,2.101,1878,1.786,1879,3.281,1880,2.101,1881,2.101,1882,2.101,1883,2.101,1884,2.101,1885,2.101,1886,2.101,1887,2.788,1888,2.101,1889,3.281,1890,2.101,1891,2.101,1892,2.101,1893,2.101,1894,2.101,1895,3.281,1896,3.281,1897,3.281,1898,2.101,1899,2.101,1900,2.101,1901,2.101,1902,2.101,1903,1.786,1904,2.101,1905,2.101,1906,2.101,1907,3.281,1908,2.101,1909,2.101,1910,2.101,1911,1.786,1912,2.101,1913,2.101,1914,2.101,1915,2.101,1916,2.101,1917,2.101,1918,2.101,1919,2.101,1920,2.788,1921,2.101,1922,2.101,1923,2.101,1924,2.101,1925,2.101,1926,2.101,1927,2.101,1928,2.101,1929,2.101,1930,2.101,1931,3.281,1932,2.101,1933,2.101,1934,2.101,1935,2.101,1936,2.101,1937,2.101,1938,2.101,1939,2.101,1940,2.101,1941,2.101]],["title/interfaces/PhoenixUI.html",[219,1.321,1038,1.995]],["body/interfaces/PhoenixUI.html",[3,0.249,4,0.22,5,0.164,9,0.459,16,0.164,33,0.553,44,1.517,47,0.707,50,0.619,51,0.024,52,0.545,53,0.274,54,0.562,57,0.65,66,1.344,69,1.734,80,1.034,94,1.118,101,1.119,103,0.591,112,1.027,126,2.214,135,0.553,136,0.597,152,0.279,153,0.599,169,1.984,186,0.016,187,0.016,200,4.611,219,2.066,221,2.035,230,1.036,247,3.097,258,1.654,261,2.081,292,2.753,337,2.539,344,2.886,347,2.753,389,3.601,469,2.071,527,2.991,547,2.071,618,3.633,629,2.641,630,3.097,682,3.113,684,1.842,707,4.085,708,1.844,736,2.638,786,2.751,852,1.957,871,2.358,889,3.586,921,4.286,974,3.097,994,2.991,1034,2.421,1036,2.688,1038,2.753,1046,4.119,1047,4.414,1048,3.634,1049,3.634,1050,4.414,1051,3.634,1052,3.634,1053,4.753,1054,3.634,1055,3.634,1059,3.04,1062,3.04,1067,3.344,1068,2.686,1075,2.686,1076,4.286,1078,4.414,1079,3.39,1080,2.753,1082,3.277,1083,3.634,1084,3.634,1085,3.634,1087,4.414,1088,3.634,1091,3.634,1092,4.414,1093,3.634,1095,3.634,1096,4.414,1098,3.979,1099,3.633,1100,3.277,1101,2.753,1102,3.634,1104,3.634,1105,3.634,1107,3.277,1108,3.277,1109,3.634,1111,3.634,1117,2.686,1286,4.414,1287,3.634,1851,4.995,1942,4.113,1943,4.113,1944,3.577,1945,3.577,1946,3.577,1947,3.577,1948,3.577,1949,3.577,1950,3.577]],["title/classes/PresetView.html",[0,0.255,883,2.374]],["body/classes/PresetView.html",[0,0.3,2,0.433,3,0.288,4,0.254,5,0.189,9,0.371,16,0.189,17,0.661,24,1.468,33,0.608,42,1.155,45,2.639,47,0.72,49,1.084,50,0.395,51,0.024,52,0.547,53,0.26,54,0.358,57,0.715,58,0.711,61,2.433,79,2.129,80,1.015,101,1.438,103,0.462,110,1.883,117,1.119,144,1.883,152,0.416,153,0.54,162,0.472,186,0.017,187,0.017,224,4.023,229,3.027,295,1.477,303,4.198,440,3.739,779,3.1,866,3.276,869,4.09,883,3.602,884,3.1,1486,3.995,1515,3.602,1683,5.347,1697,3.508,1744,3.508,1745,5.003,1951,5.196,1952,3.1,1953,5.321,1954,5.321,1955,3.995,1956,5.321,1957,6.59,1958,6.793,1959,6.793,1960,6.704,1961,6.704,1962,6.219,1963,5.6,1964,5.321,1965,6.219,1966,6.219,1967,4.128,1968,4.128,1969,4.128,1970,5.285,1971,3.995,1972,4.128,1973,4.128,1974,4.128,1975,4.128,1976,3.508,1977,4.128,1978,4.128,1979,4.128,1980,4.128,1981,4.128,1982,4.128,1983,4.128,1984,4.128]],["title/classes/PrettySymbols.html",[0,0.255,774,1.995]],["body/classes/PrettySymbols.html",[0,0.313,2,0.453,3,0.301,4,0.266,5,0.198,9,0.419,16,0.198,17,0.68,18,2.606,22,4.515,24,1.225,33,0.626,47,0.631,49,0.88,50,0.648,51,0.024,52,0.428,53,0.26,54,0.475,57,0.58,58,0.494,69,2.041,80,0.992,103,0.522,152,0.337,153,0.566,162,0.688,186,0.018,187,0.018,213,0.793,233,2.381,261,1.528,267,2.455,272,0.876,282,2.115,377,3.668,546,3.383,600,2.667,646,4.12,708,1.128,711,2.705,713,3.114,720,3.114,774,3.114,776,4.514,780,3.706,824,3.668,842,2.683,844,3.668,897,2.922,907,3.706,913,3.706,925,4.111,1498,3.706,1499,3.383,1760,4.281,1985,5.373,1986,3.668,1987,7.11,1988,5.475,1989,5.475,1990,5.373,1991,5.475,1992,6.323,1993,6.323,1994,5.373,1995,6.323,1996,4.316,1997,5.475,1998,4.316,1999,6.854,2000,5.475,2001,5.475,2002,4.316,2003,6.773,2004,6.525,2005,6.012,2006,4.316,2007,4.316,2008,4.316,2009,4.316,2010,4.316,2011,6.012,2012,3.668,2013,5.475,2014,4.316,2015,4.316,2016,4.316,2017,5.475,2018,4.316,2019,4.316,2020,4.316,2021,4.316,2022,4.316,2023,3.668,2024,4.316,2025,6.323,2026,4.316,2027,4.316,2028,4.316,2029,5.475,2030,4.316,2031,4.316,2032,4.316,2033,4.316,2034,4.316,2035,4.316]],["title/classes/RKHelper.html",[0,0.255,2036,2.374]],["body/classes/RKHelper.html",[0,0.312,2,0.451,3,0.3,4,0.265,5,0.197,9,0.44,16,0.197,18,2.604,24,1.223,33,0.722,47,0.629,50,0.574,51,0.024,52,0.469,53,0.25,54,0.521,56,1.287,57,0.848,58,0.492,59,1.328,79,1.979,88,1.517,94,1.328,103,0.605,107,1.879,110,1.933,112,0.623,135,0.686,136,0.718,152,0.336,153,0.548,162,0.745,186,0.018,187,0.018,227,2.877,230,0.791,233,2.057,242,2.85,254,3.094,261,1.933,267,3.592,272,0.929,337,2.747,341,4.233,343,2.676,365,2.941,405,3.229,523,2.877,600,2.658,818,2.911,820,3.654,821,4.101,894,2.658,896,3.229,897,4.063,898,3.229,907,2.911,913,3.698,953,3.229,1016,2.877,1404,3.698,1491,2.911,1492,2.911,1493,3.85,1503,2.911,1580,4.275,1581,3.698,1582,4.028,2023,4.641,2036,3.698,2037,5.366,2038,6.002,2039,4.641,2040,5.462,2041,4.3,2042,4.3,2043,5.462,2044,5.462,2045,6.518,2046,6.314,2047,5.462,2048,4.3,2049,5.462,2050,4.641,2051,5.462,2052,5.462,2053,5.462,2054,5.462,2055,4.3,2056,6.002,2057,4.3,2058,4.3,2059,4.3,2060,5.462,2061,4.3,2062,4.3,2063,4.3,2064,4.3,2065,4.3,2066,4.3,2067,4.3,2068,4.3,2069,4.3,2070,4.3,2071,4.3,2072,4.3,2073,4.3,2074,4.3,2075,4.3,2076,4.3,2077,4.3,2078,4.3,2079,4.3,2080,4.3]],["title/classes/RendererManager.html",[0,0.255,250,2.374]],["body/classes/RendererManager.html",[0,0.196,2,0.283,3,0.188,4,0.166,5,0.124,6,2.787,8,0.845,9,0.459,11,1.335,12,1.493,16,0.216,17,0.492,20,1.78,24,1.42,29,3.561,33,0.453,42,1.021,44,1.919,45,2.427,47,0.726,49,0.808,50,0.624,51,0.024,52,0.509,53,0.258,54,0.566,55,2.306,56,1.328,57,0.696,58,0.727,59,1.056,63,2.977,64,4.306,69,1.17,71,1.036,80,0.836,90,2.363,99,4.459,101,1.507,103,0.603,107,1.306,110,1.835,112,0.944,117,0.42,121,0.955,135,0.308,136,0.662,152,0.211,153,0.581,162,0.683,167,2.025,186,0.013,187,0.013,213,0.574,223,1.667,230,0.887,250,2.684,253,1.404,260,2.45,261,1.664,272,0.853,295,1.306,320,2.256,343,2.54,440,3.226,466,3.785,469,1.697,472,3.37,547,2.218,708,1.036,715,1.943,733,4.496,854,2.044,858,3.509,869,2.256,871,2.079,872,3.509,873,2.949,991,1.534,1080,2.256,1101,2.256,1118,1.943,1125,3.569,1126,2.292,1193,2.675,1301,4.146,1311,4.069,1312,4.146,1313,4.599,1314,2.45,1316,2.025,1320,2.977,1322,2.977,1336,2.292,1360,2.292,1405,4.671,1416,3.892,1642,2.292,1645,2.025,1648,2.292,1920,3.37,2081,5.903,2082,4.702,2083,5.183,2084,5.523,2085,6.968,2086,3.965,2087,3.965,2088,5.183,2089,5.183,2090,5.183,2091,5.183,2092,2.977,2093,3.965,2094,5.183,2095,3.965,2096,3.965,2097,3.965,2098,3.965,2099,3.965,2100,3.965,2101,3.965,2102,3.965,2103,4.772,2104,2.697,2105,2.697,2106,3.965,2107,3.965,2108,3.965,2109,2.697,2110,3.965,2111,2.292,2112,3.965,2113,2.697,2114,2.697,2115,2.292,2116,2.292,2117,5.183,2118,3.965,2119,2.292,2120,3.965,2121,3.965,2122,2.697,2123,3.965,2124,2.292,2125,3.965,2126,3.965,2127,3.965,2128,2.697,2129,3.965,2130,2.697,2131,3.965,2132,3.37,2133,3.996,2134,3.996,2135,3.965,2136,3.965,2137,2.697,2138,3.965,2139,5.775,2140,2.697,2141,3.965,2142,5.183,2143,5.183,2144,5.183,2145,3.965,2146,2.697,2147,2.697,2148,2.025,2149,2.697,2150,2.697,2151,2.025,2152,2.697,2153,2.697,2154,2.697,2155,2.697,2156,2.697,2157,3.965,2158,4.702,2159,2.697,2160,2.697,2161,4.702,2162,2.697,2163,3.965,2164,2.697,2165,4.702,2166,3.965,2167,2.697,2168,3.965,2169,2.697,2170,2.697,2171,2.697,2172,2.697,2173,2.697,2174,3.965,2175,2.697,2176,3.965,2177,5.183,2178,2.697,2179,2.697,2180,2.697,2181,2.697,2182,3.965,2183,2.697,2184,2.697,2185,2.697,2186,3.965]],["title/classes/RungeKutta.html",[0,0.255,1493,1.995]],["body/classes/RungeKutta.html",[0,0.394,2,0.368,3,0.245,4,0.216,5,0.161,9,0.379,13,2.046,16,0.161,17,0.594,18,2.371,33,0.547,47,0.501,50,0.457,51,0.024,52,0.373,53,0.208,54,0.415,56,0.716,57,0.472,58,0.402,59,1.189,71,1.249,79,2.107,88,1.328,94,1.108,103,0.577,107,1.509,112,0.509,117,1.105,121,1.243,135,0.402,136,0.587,144,2.065,149,1.721,152,0.274,153,0.569,162,0.547,186,0.016,187,0.016,198,2.171,213,0.509,233,1.323,238,2.519,242,3.045,254,2.343,267,3.319,269,2.72,272,0.911,282,2.663,283,3.605,306,3.351,320,1.998,354,3.95,365,2.663,451,3.237,476,2.991,523,2.519,713,3.092,720,3.319,740,2.343,763,2.859,819,3.237,842,3.085,1016,2.519,1035,2.955,1350,3.605,1453,2.378,1484,3.679,1485,2.378,1490,4.381,1491,4.711,1492,4.711,1493,2.72,1494,2.743,1495,3.59,1496,3.59,1497,3.59,1498,4.263,1499,3.891,1500,2.378,1501,2.638,1502,2.638,1503,4.132,1504,2.638,1505,2.638,1506,2.638,1507,2.638,1508,4.381,1509,4.081,1510,3.59,1511,3.59,1512,4.837,1513,4.923,1514,4.381,1515,3.95,1516,2.638,1517,2.638,1518,2.638,1519,4.992,1520,2.638,1521,1.998,1522,4.923,1523,2.638,1524,2.638,1525,4.583,1526,5.048,1527,2.638,1528,4.837,1529,2.638,1530,2.638,1531,2.638,1532,3.59,1533,2.638,1534,3.59,1535,4.081,1536,2.638,1537,2.638,1538,2.638,1539,2.638,1540,2.638,1541,2.638,1542,2.638,1543,2.638,1544,2.638,1545,2.638,1546,2.638,1547,2.638,1548,2.638,1549,2.638,1550,2.638,1551,2.638,1552,1.998,1553,2.638,1554,4.081,1555,3.59,1556,2.638,1557,4.081,1558,2.638,1559,4.081,1560,3.59,1561,2.638,1562,2.638,1563,2.638,1564,2.638,1565,2.638,1566,2.638,1567,2.638,1568,2.638,1569,2.638,1570,2.638,1571,2.638,1572,4.583,1573,4.583,1574,4.381,1575,4.583,1576,3.605,1577,4.583,1578,4.381,1579,3.237,1580,3.95,1581,3.237,1582,3.359,1583,2.955,1584,2.638,1585,2.638,1586,2.638,1587,2.638,1588,2.638,1589,2.638,1590,2.638,2187,3.513,2188,3.513,2189,3.513]],["title/classes/ScriptLoader.html",[0,0.255,2190,2.633]],["body/classes/ScriptLoader.html",[0,0.335,2,0.484,3,0.322,4,0.284,5,0.212,9,0.398,11,1.067,16,0.212,18,2.335,24,0.941,33,0.653,47,0.484,50,0.442,51,0.024,52,0.361,53,0.177,54,0.538,57,0.62,58,0.528,59,1.163,80,0.982,103,0.495,126,1.738,135,0.528,152,0.361,153,0.538,162,0.528,186,0.019,187,0.019,213,0.827,230,0.827,258,1.497,272,0.832,295,1.282,347,2.625,708,1.206,866,3.412,867,2.507,873,3.248,875,3.007,877,3.526,978,3.528,1199,3.922,1201,2.261,1369,3.465,1434,3.684,1615,3.831,1685,4.287,2190,4.287,2191,4.851,2192,5.395,2193,6.477,2194,5.709,2195,4.851,2196,6.199,2197,4.615,2198,6.999,2199,6.477,2200,6.199,2201,4.615,2202,5.268,2203,6.199,2204,6.656,2205,5.709,2206,5.709,2207,5.709,2208,4.385,2209,3.922,2210,4.615,2211,4.615,2212,5.709,2213,4.615,2214,4.615,2215,4.615,2216,4.615,2217,4.615,2218,4.615,2219,4.615,2220,4.615,2221,4.615,2222,5.709,2223,4.615,2224,6.477,2225,6.477,2226,4.615,2227,3.922,2228,4.615,2229,4.615,2230,4.615,2231,4.615]],["title/classes/SelectionManager.html",[0,0.255,2232,2.633]],["body/classes/SelectionManager.html",[0,0.189,2,0.273,3,0.181,4,0.16,5,0.119,6,2.775,8,0.814,9,0.411,11,1.477,12,1.453,16,0.119,17,0.632,20,1.882,24,1.355,33,0.441,42,1.181,44,2.175,45,2.538,47,0.723,48,1.952,50,0.545,51,0.024,52,0.473,53,0.258,54,0.472,55,1.917,56,1.202,57,0.684,58,0.652,59,1.161,62,3.361,69,2.092,71,1.008,80,0.896,85,1.764,88,1.414,92,3.087,94,1.161,97,2.792,101,1.317,103,0.547,107,0.722,110,2.017,112,0.825,117,0.405,128,2.195,135,0.652,136,0.434,144,1.925,152,0.203,153,0.547,162,0.582,186,0.013,187,0.013,188,3.094,191,1.369,202,2.897,213,0.854,230,1.01,233,1.733,247,3.002,253,2.017,257,2.665,258,1.401,260,2.384,261,1.366,270,1.606,272,0.858,288,3.583,295,1.278,304,1.606,333,4.279,343,1.89,469,1.651,554,1.606,626,1.952,627,2.612,628,2.682,637,4.327,708,0.679,711,1.969,715,1.89,745,4.426,763,1.89,774,1.479,775,1.952,776,1.76,842,1.89,854,2.37,876,1.76,1125,3.521,1201,1.274,1291,4.466,1293,4.084,1294,4.648,1295,5.013,1296,4.622,1297,4.622,1312,4.264,1313,3.823,1325,3.279,1326,4.327,1327,4.279,1328,4.842,1338,2.612,1345,3.279,1346,2.209,1385,3.753,1397,2.612,1398,3.823,1414,3.146,1418,1.952,1601,4.279,1602,4.327,1606,3.455,1609,3.823,1666,2.209,2092,3.455,2148,2.897,2232,2.897,2233,5.879,2234,5.606,2235,4.601,2236,4.601,2237,4.601,2238,4.601,2239,4.601,2240,4.601,2241,4.601,2242,4.842,2243,5.091,2244,5.091,2245,4.327,2246,3.858,2247,3.858,2248,3.858,2249,3.858,2250,3.279,2251,2.209,2252,1.952,2253,2.209,2254,3.858,2255,3.858,2256,2.599,2257,3.858,2258,2.209,2259,6.538,2260,5.698,2261,2.599,2262,5.091,2263,2.599,2264,2.209,2265,3.858,2266,3.858,2267,1.76,2268,1.952,2269,2.599,2270,2.897,2271,5.149,2272,2.599,2273,2.599,2274,4.954,2275,3.279,2276,2.599,2277,3.279,2278,3.279,2279,3.858,2280,3.858,2281,2.599,2282,2.599,2283,3.858,2284,2.599,2285,4.601,2286,3.858,2287,3.858,2288,2.599,2289,3.858,2290,2.599,2291,4.601,2292,2.599,2293,2.599,2294,2.599,2295,2.599,2296,1.952,2297,2.612,2298,2.599,2299,4.601,2300,2.599,2301,2.599,2302,2.599,2303,2.599,2304,2.209,2305,2.599,2306,2.599,2307,2.599,2308,2.599,2309,2.599,2310,2.599,2311,2.599,2312,4.842,2313,5.698,2314,2.599,2315,3.858,2316,2.599,2317,4.601,2318,2.599,2319,3.858,2320,2.599,2321,2.599,2322,2.599,2323,2.599,2324,2.599,2325,2.599,2326,4.601,2327,2.599,2328,5.439,2329,2.599,2330,2.599,2331,2.599,2332,2.599,2333,3.858,2334,2.599,2335,2.599,2336,2.599,2337,2.599,2338,2.599,2339,2.599,2340,2.599,2341,2.599,2342,2.599,2343,2.599,2344,2.599,2345,2.599,2346,2.599,2347,2.599,2348,2.599,2349,2.599,2350,2.599,2351,3.858,2352,2.599,2353,1.952,2354,2.209,2355,2.599,2356,2.599,2357,2.599,2358,2.599,2359,2.599,2360,3.858,2361,2.599,2362,2.599,2363,2.599,2364,2.599,2365,2.599,2366,2.599,2367,2.599,2368,2.599,2369,2.599,2370,2.599,2371,2.599,2372,2.599,2373,2.599,2374,2.599,2375,2.599,2376,2.599,2377,2.599]],["title/classes/State.html",[0,0.255,1494,1.407]],["body/classes/State.html",[0,0.351,2,0.374,3,0.249,4,0.22,5,0.164,9,0.249,13,1.528,16,0.164,17,0.68,18,1.821,47,0.69,51,0.024,53,0.252,56,0.728,57,0.884,58,0.753,59,0.985,71,1.263,73,1.749,79,2.027,88,0.991,94,0.728,103,0.51,107,0.991,117,1.098,121,1.264,135,0.408,136,0.596,144,1.711,149,1.749,152,0.279,153,0.571,162,0.553,186,0.016,187,0.016,198,2.206,213,0.794,238,2.547,242,3.027,254,1.749,267,3.491,269,2.75,272,0.914,282,1.749,283,3.387,295,1.757,306,3.225,320,2.031,354,3.976,365,1.749,386,2.987,451,3.273,474,2.681,476,3.007,523,1.881,713,3.118,720,3.341,740,2.369,763,2.369,819,2.417,842,3.1,1016,1.881,1035,2.206,1350,2.987,1453,2.417,1484,4.516,1485,2.417,1490,3.63,1491,4.565,1492,4.565,1493,2.031,1494,2.676,1495,2.681,1496,2.681,1497,2.681,1498,4.283,1499,3.91,1500,2.417,1501,2.681,1502,2.681,1503,4.155,1504,2.681,1505,2.681,1506,2.681,1507,2.681,1508,4.41,1509,4.115,1510,3.63,1511,3.63,1512,4.858,1513,4.942,1514,4.41,1515,3.976,1516,2.681,1517,2.681,1518,2.681,1519,5.009,1520,2.681,1521,2.031,1522,4.942,1523,2.681,1524,2.681,1525,4.609,1526,5.064,1527,2.681,1528,4.858,1529,2.681,1530,2.681,1531,2.681,1532,3.63,1533,2.681,1534,3.63,1535,4.115,1536,2.681,1537,2.681,1538,2.681,1539,2.681,1540,2.681,1541,2.681,1542,2.681,1543,2.681,1544,2.681,1545,2.681,1546,2.681,1547,2.681,1548,2.681,1549,2.681,1550,2.681,1551,2.681,1552,2.031,1553,2.681,1554,4.115,1555,3.63,1556,2.681,1557,4.115,1558,2.681,1559,4.115,1560,3.63,1561,2.681,1562,2.681,1563,2.681,1564,2.681,1565,2.681,1566,2.681,1567,2.681,1568,2.681,1569,2.681,1570,2.681,1571,2.681,1572,3.63,1573,3.63,1574,3.63,1575,4.115,1576,3.387,1577,4.115,1578,3.63,1579,3.273,1580,3.273,1581,2.417,1582,2.206,1583,3.63,1584,2.681,1585,2.681,1586,2.681,1587,2.681,1588,2.681,1589,2.681,1590,2.681,2378,4.834,2379,4.834,2380,4.834,2381,4.834,2382,3.57,2383,3.57,2384,3.57,2385,3.57,2386,3.57,2387,3.57,2388,3.57,2389,3.57,2390,3.57,2391,3.034]],["title/classes/StateManager.html",[0,0.255,2392,2.167]],["body/classes/StateManager.html",[0,0.228,2,0.329,3,0.219,4,0.193,5,0.144,8,0.985,9,0.445,11,1.537,16,0.144,17,0.549,18,2.291,20,1.339,33,0.506,42,1.113,44,1.387,45,2.58,47,0.734,48,2.359,49,0.902,50,0.598,51,0.024,52,0.488,53,0.263,54,0.542,56,1.044,57,0.747,58,0.636,61,2.543,66,1.689,80,0.939,90,1.894,93,2.024,101,1.551,103,0.595,107,0.872,112,0.924,117,1.024,121,1.567,135,0.67,136,0.525,152,0.245,153,0.542,162,0.636,166,3.292,186,0.015,187,0.015,188,1.787,191,1.655,213,0.881,229,3.164,230,0.939,233,1.93,253,1.567,259,4.354,270,1.942,272,0.747,303,4.373,440,3.779,640,2.359,703,3.204,708,0.821,711,2.192,734,4.451,736,2.354,737,3.127,777,1.787,786,1.775,788,1.437,792,3.323,854,2.296,862,4.567,867,2.095,889,1.655,1036,1.437,1118,3.314,1312,3.765,1314,1.942,1316,2.359,1319,2.67,1323,2.359,1350,3.437,1409,3.323,1434,2.518,1438,3.164,1449,2.996,1450,2.67,1494,2.838,1628,3.761,1645,2.359,1693,3.761,1718,1.655,1730,3.761,1732,3.74,1799,2.67,1861,4.726,1887,3.761,1971,4.791,2111,2.67,2124,2.67,2252,2.359,2267,2.127,2296,2.359,2392,3.759,2393,5.966,2394,4.426,2395,5.123,2396,5.123,2397,5.562,2398,5.562,2399,5.562,2400,5.562,2401,5.562,2402,5.562,2403,4.426,2404,4.426,2405,4.426,2406,4.426,2407,4.426,2408,4.426,2409,3.142,2410,4.426,2411,5.123,2412,5.562,2413,5.123,2414,4.426,2415,5.562,2416,3.142,2417,3.142,2418,3.142,2419,4.426,2420,4.426,2421,3.142,2422,4.426,2423,3.142,2424,4.426,2425,3.142,2426,4.426,2427,3.142,2428,4.426,2429,3.142,2430,2.359,2431,5.562,2432,3.142,2433,3.142,2434,3.142,2435,3.142,2436,2.67,2437,3.142,2438,2.67,2439,3.142,2440,4.426,2441,4.426,2442,4.426,2443,3.142,2444,3.142,2445,3.142,2446,3.142,2447,3.142,2448,3.142,2449,3.142,2450,3.142,2451,3.142,2452,5.123,2453,3.142,2454,5.123,2455,3.142,2456,3.142,2457,3.142,2458,4.354,2459,3.761,2460,3.142,2461,3.142,2462,3.142,2463,3.142,2464,3.142,2465,3.142,2466,3.142,2467,3.142]],["title/classes/TracksMaterial.html",[0,0.255,2468,2.374]],["body/classes/TracksMaterial.html",[0,0.336,2,0.352,3,0.234,4,0.206,5,0.154,9,0.323,14,3.592,16,0.212,17,0.575,42,1.006,47,0.486,49,1.081,50,0.321,51,0.024,52,0.262,53,0.129,54,0.291,56,0.944,58,0.742,59,1.383,71,1.695,75,3.536,79,1.051,80,0.486,94,1.265,101,1.226,103,0.291,112,0.671,117,0.967,135,0.384,136,0.56,148,2.804,152,0.362,153,0.46,162,0.654,169,1.994,186,0.015,187,0.015,213,1.014,227,2.44,241,2.27,242,1.982,244,3.255,248,3.136,251,2.862,272,0.713,295,1.473,304,3.536,337,2.673,341,4.117,455,1.767,554,2.862,598,3.711,600,2.073,644,4.509,646,3.536,708,0.877,730,2.862,871,2.409,978,3.837,1152,4.008,1157,4.509,1311,2.862,1321,2.518,1338,2.271,1583,3.536,2297,2.271,2468,3.592,2469,2.518,2470,4.509,2471,4.509,2472,3.936,2473,4.632,2474,3.478,2475,2.85,2476,3.936,2477,5.103,2478,2.85,2479,5.103,2480,4.862,2481,2.85,2482,2.85,2483,2.85,2484,3.936,2485,3.936,2486,2.85,2487,2.85,2488,2.85,2489,2.85,2490,2.85,2491,2.85,2492,2.85,2493,2.85,2494,3.936,2495,3.936,2496,2.85,2497,2.85,2498,2.85,2499,2.85,2500,3.936,2501,3.936,2502,3.936,2503,3.936,2504,3.936,2505,3.936,2506,2.85,2507,3.936,2508,3.936,2509,3.936,2510,2.85,2511,3.936,2512,2.85,2513,2.85,2514,5.511,2515,3.936,2516,3.936,2517,3.936,2518,3.936,2519,3.936,2520,3.936,2521,3.936,2522,3.936,2523,3.936,2524,5.511,2525,2.85,2526,3.936,2527,2.85,2528,3.936,2529,2.85,2530,3.936,2531,2.85,2532,3.936,2533,2.85,2534,3.936,2535,2.85,2536,3.936,2537,2.85,2538,2.85,2539,2.85,2540,2.85,2541,2.85,2542,2.85,2543,2.85,2544,2.85,2545,2.85,2546,2.85,2547,2.85,2548,2.85,2549,2.85,2550,2.85,2551,4.509,2552,5.103,2553,4.509,2554,5.276,2555,5.276,2556,4.509,2557,4.862,2558,3.136,2559,4.509,2560,4.509,2561,5.511,2562,4.509,2563,4.862,2564,4.862,2565,2.85,2566,2.85,2567,2.85,2568,4.862,2569,2.85,2570,2.85,2571,4.509,2572,3.936,2573,2.85,2574,2.85,2575,2.85,2576,2.85,2577,2.85,2578,4.862,2579,3.936,2580,3.936,2581,4.862,2582,2.85,2583,2.85,2584,3.936,2585,2.85,2586,2.85,2587,2.85,2588,3.936,2589,2.85,2590,2.85,2591,4.509,2592,2.518,2593,2.85,2594,2.85,2595,2.85,2596,2.85,2597,3.936,2598,2.85,2599,2.85,2600,2.85,2601,2.85,2602,2.85,2603,2.85,2604,2.85,2605,2.85,2606,2.85,2607,2.85,2608,2.85,2609,2.85,2610,4.509,2611,3.936,2612,2.85,2613,2.85,2614,3.936,2615,2.85]],["title/classes/TracksMesh.html",[0,0.255,251,2.167]],["body/classes/TracksMesh.html",[0,0.323,2,0.332,3,0.221,4,0.195,5,0.145,9,0.31,14,3.482,16,0.204,17,0.552,33,0.509,42,1.117,47,0.71,49,1.048,50,0.303,51,0.024,52,0.247,53,0.255,54,0.275,56,0.645,58,0.731,59,1.369,71,1.671,75,3.87,79,0.991,80,0.458,94,1.242,101,1.189,103,0.446,112,0.745,117,1.054,135,0.362,136,0.528,148,2.734,152,0.347,153,0.446,162,0.638,169,2.063,186,0.015,187,0.015,213,1.007,227,3.097,241,2.52,242,2.387,244,3.636,248,3.011,251,3.178,272,0.691,295,1.428,304,3.448,337,2.641,341,4.261,455,1.667,554,3.767,598,3.95,600,1.955,644,4.414,646,2.748,708,1.162,730,3.633,871,2.564,978,3.767,1152,3.448,1157,4.414,1311,2.748,1321,2.376,1338,2.142,1583,3.448,2297,3.011,2468,3.011,2469,2.376,2470,3.779,2471,2.689,2472,2.689,2474,2.376,2475,2.689,2476,4.741,2477,5.521,2478,4.37,2479,5.432,2480,5.18,2481,3.779,2482,4.37,2483,4.37,2484,3.779,2485,3.779,2486,2.689,2487,2.689,2488,2.689,2489,2.689,2490,2.689,2491,2.689,2492,2.689,2493,2.689,2494,3.779,2495,4.741,2496,3.779,2497,3.779,2498,2.689,2499,2.689,2500,3.779,2501,3.779,2502,3.779,2503,3.779,2504,3.779,2505,3.779,2506,2.689,2507,3.779,2508,3.779,2509,3.779,2510,2.689,2511,3.779,2512,2.689,2513,2.689,2514,5.432,2515,3.779,2516,3.779,2517,3.779,2518,3.779,2519,3.779,2520,3.779,2521,3.779,2522,3.779,2523,3.779,2524,5.432,2525,2.689,2526,3.779,2527,2.689,2528,3.779,2529,2.689,2530,3.779,2531,2.689,2532,3.779,2533,2.689,2534,3.779,2535,2.689,2536,3.779,2537,2.689,2538,2.689,2539,2.689,2540,2.689,2541,2.689,2542,2.689,2543,2.689,2544,2.689,2545,2.689,2546,2.689,2547,2.689,2548,2.689,2549,2.689,2550,2.689,2551,4.37,2552,4.995,2553,4.37,2554,5.18,2555,5.18,2556,4.37,2557,4.741,2558,3.011,2559,4.37,2560,4.37,2561,5.432,2562,4.37,2563,4.741,2564,4.741,2565,2.689,2566,2.689,2567,2.689,2568,4.741,2569,2.689,2570,2.689,2571,4.37,2572,3.779,2573,2.689,2574,2.689,2575,2.689,2576,2.689,2577,2.689,2578,4.741,2579,3.779,2580,3.779,2581,4.741,2582,2.689,2583,2.689,2584,3.779,2585,2.689,2586,2.689,2587,2.689,2588,3.779,2589,2.689,2590,2.689,2591,4.37,2592,2.376,2593,2.689,2594,2.689,2595,2.689,2596,2.689,2597,3.779,2598,2.689,2599,2.689,2600,2.689,2601,2.689,2602,2.689,2603,2.689,2604,2.689,2605,2.689,2606,2.689,2607,2.689,2608,2.689,2609,2.689,2610,4.37,2611,3.779,2612,2.689,2613,2.689,2614,3.779,2615,2.689,2616,4.447,2617,4.447,2618,3.164,2619,3.164,2620,3.164,2621,3.164,2622,3.164,2623,3.164,2624,3.164,2625,3.164,2626,3.164,2627,3.164,2628,3.164]],["title/classes/URLOptionsManager.html",[0,0.255,2629,2.374]],["body/classes/URLOptionsManager.html",[0,0.203,2,0.294,3,0.335,4,0.173,5,0.32,8,0.878,9,0.421,11,1.297,16,0.129,17,0.506,20,1.781,24,1.372,33,0.466,35,3.325,42,1.146,47,0.681,50,0.613,51,0.024,52,0.457,53,0.266,54,0.508,57,0.709,58,0.466,59,1.193,62,2.52,64,3.262,66,1.558,80,1.007,88,1.466,101,1.22,103,0.575,107,1.132,112,0.812,126,1.536,135,0.669,144,1.444,152,0.319,153,0.537,162,0.691,176,3.437,186,0.013,187,0.013,191,2.148,213,0.812,230,1.013,233,1.536,238,2.148,253,1.444,254,1.373,258,1.431,272,0.898,282,2.587,325,2.735,372,2.105,512,4.648,523,2.148,547,1.199,586,3.466,588,3.466,684,2.186,711,1.199,715,2.749,717,2.52,736,2.331,746,4.191,752,2.761,778,2.52,852,2.187,854,2.139,866,3.795,867,2.113,868,4.212,873,2.32,874,2.32,875,2.781,877,1.594,923,2.32,1033,3.062,1036,1.865,1118,2.96,1201,1.373,1311,2.52,1414,1.732,1460,1.897,1494,1.124,1521,2.32,1552,3.191,1718,2.955,1724,3.062,1732,3.437,1955,3.062,2116,2.382,2202,3.466,2208,3.963,2227,2.382,2250,2.382,2252,3.062,2258,2.382,2312,3.466,2392,2.971,2436,3.466,2458,2.382,2629,2.761,2630,4.932,2631,5.279,2632,5.279,2633,4.807,2634,5.279,2635,5.279,2636,5.279,2637,4.078,2638,4.078,2639,4.078,2640,4.078,2641,2.803,2642,5.279,2643,4.078,2644,2.803,2645,4.486,2646,3.964,2647,4.974,2648,2.803,2649,5.609,2650,2.803,2651,5.134,2652,5.279,2653,5.279,2654,2.803,2655,4.078,2656,2.803,2657,4.078,2658,4.078,2659,4.974,2660,6.042,2661,4.085,2662,4.395,2663,4.078,2664,4.078,2665,2.803,2666,5.261,2667,3.466,2668,4.078,2669,2.803,2670,5.854,2671,4.078,2672,4.085,2673,2.803,2674,2.761,2675,2.382,2676,2.382,2677,2.105,2678,2.803,2679,2.382,2680,2.105,2681,4.078,2682,2.803,2683,2.803,2684,2.803,2685,2.803,2686,2.803,2687,2.803,2688,2.803,2689,1.732,2690,5.279,2691,4.807,2692,2.382,2693,2.803,2694,2.382,2695,2.803,2696,2.803,2697,4.078,2698,2.803,2699,2.803,2700,4.807,2701,2.803,2702,2.803,2703,2.803,2704,2.382,2705,2.382,2706,2.803,2707,2.803,2708,3.466,2709,2.803,2710,2.803,2711,4.078,2712,2.803,2713,2.803,2714,2.803,2715,2.803,2716,2.803,2717,2.382,2718,2.382,2719,2.803,2720,2.803,2721,2.803,2722,3.466,2723,2.803,2724,3.466,2725,2.803,2726,2.803,2727,2.803,2728,2.803,2729,2.803,2730,2.803,2731,2.803,2732,2.803,2733,2.803,2734,3.466,2735,3.062,2736,3.61,2737,4.078,2738,2.382,2739,2.803,2740,2.803,2741,2.803,2742,2.803,2743,2.382,2744,4.078,2745,4.078,2746,2.803,2747,4.078,2748,4.078,2749,2.803,2750,2.803,2751,2.803,2752,2.803,2753,2.803,2754,2.803,2755,2.803,2756,2.803,2757,2.803,2758,2.803,2759,2.803,2760,2.803,2761,4.078,2762,4.078,2763,4.078,2764,4.078,2765,4.078,2766,4.078,2767,3.466,2768,4.078,2769,2.803,2770,2.803,2771,4.078,2772,2.803,2773,2.803,2774,2.803,2775,2.803,2776,2.803]],["title/classes/VRManager.html",[0,0.255,2777,2.374]],["body/classes/VRManager.html",[0,0.222,2,0.321,3,0.214,4,0.189,5,0.141,6,2.654,8,0.96,9,0.405,11,1.343,12,1.638,13,1.861,14,2.944,15,3.905,16,0.141,17,0.54,18,1.903,20,1.845,22,3.795,23,4.295,24,1.373,25,3.265,26,5.126,27,3.265,28,4.201,29,3.107,30,3.265,31,3.265,32,3.265,33,0.497,34,4.13,35,2.291,36,3.265,38,3.795,39,3.265,40,3.795,41,3.795,42,1.098,44,0.96,45,2.629,47,0.738,49,0.886,50,0.526,51,0.024,52,0.43,53,0.268,54,0.504,56,0.625,57,0.679,58,0.578,60,2.605,61,1.402,71,0.801,74,2.301,79,1.363,80,0.63,81,3.695,82,2.605,83,3.971,84,2.477,85,2.759,86,5.724,87,2.605,88,1.208,89,3.924,90,1.311,91,2.605,92,2.131,93,1.989,94,1.23,95,2.605,96,3.107,97,2.846,98,3.589,99,3.589,100,2.605,101,1.466,102,2.605,103,0.56,104,2.075,105,2.075,106,2.301,107,0.851,108,2.605,109,2.605,110,1.947,112,0.958,113,2.301,115,1.894,117,0.787,119,2.605,120,1.894,121,1.085,122,2.301,123,2.605,124,2.301,125,1.615,126,1.903,127,2.301,128,1.744,129,2.605,130,2.301,131,4.361,133,2.944,134,2.687,135,0.578,136,0.512,138,1.894,139,2.075,140,1.894,142,2.301,143,2.301,144,1.947,145,2.301,146,2.301,147,2.301,148,1.502,149,1.502,150,1.894,152,0.239,153,0.504,154,4.295,161,2.301,164,2.605,180,2.605,186,0.014,187,0.014,213,0.874,229,3.304,230,0.63,241,1.502,242,2.485,272,0.78,288,3.53,295,1.403,306,1.502,344,1.311,378,3.695,386,2.687,444,4.295,466,1.894,516,2.605,524,1.894,547,2.163,854,1.539,871,1.229,955,2.605,1061,2.474,1308,2.605,1576,4.128,1638,4.674,1870,2.301,2267,2.075,2268,3.265,2391,2.605,2692,3.695,2777,2.944,2778,5.622,2779,4.412,2780,5.054,2781,5.054,2782,5.054,2783,5.054,2784,5.054,2785,5.054,2786,4.349,2787,5.5,2788,5.481,2789,6.34,2790,3.065,2791,5.5,2792,5.127,2793,4.674,2794,4.349,2795,4.349,2796,4.349,2797,6.34,2798,3.065,2799,4.349,2800,3.065,2801,3.065,2802,4.349,2803,3.065,2804,3.065,2805,4.295,2806,4.349,2807,3.065,2808,3.065,2809,3.065,2810,3.065,2811,4.349,2812,3.065,2813,3.065,2814,3.065,2815,3.065,2816,3.065,2817,4.349,2818,4.349,2819,5.054,2820,3.065,2821,5.054,2822,3.065,2823,3.065,2824,3.065,2825,3.065,2826,3.065,2827,3.065,2828,3.065,2829,3.065,2830,3.065,2831,3.065,2832,3.065,2833,3.065,2834,3.065,2835,3.065,2836,3.065,2837,3.065,2838,3.065,2839,3.065,2840,3.065,2841,3.065,2842,3.065,2843,3.065,2844,3.065,2845,3.065,2846,3.065,2847,4.349,2848,4.349,2849,3.065,2850,3.065,2851,3.065,2852,3.065,2853,3.065,2854,3.065,2855,3.065,2856,2.605,2857,3.065,2858,3.065,2859,3.065,2860,4.349,2861,3.065,2862,3.065,2863,3.065,2864,3.065]],["title/interfaces/Window.html",[219,1.321,2689,2.167]],["body/interfaces/Window.html",[0,0.202,3,0.312,4,0.105,5,0.263,9,0.119,10,1.723,11,1.517,12,1.328,13,0.733,16,0.186,17,0.346,20,1.527,24,1.417,28,2.387,29,1.366,33,0.319,35,2.662,44,1.795,45,1.53,49,0.349,50,0.337,51,0.024,52,0.542,53,0.156,55,1.53,56,1.26,57,0.731,58,0.319,59,1.305,61,2.408,62,2.179,64,2.179,66,1.65,69,2.008,71,0.448,76,0.975,77,3.586,79,0.874,80,1.008,83,2.006,84,2.476,85,0.784,88,1.65,89,2.311,92,1.366,94,0.718,96,2.743,97,2.191,98,2.179,101,0.645,103,0.536,107,0.774,110,1.583,112,0.763,117,0.939,120,1.059,121,1.583,125,1.857,135,0.707,136,0.589,138,2.763,140,1.723,144,2.068,149,0.84,152,0.134,153,0.621,162,0.668,166,1.469,169,1.273,176,3.184,186,0.009,187,0.009,188,1.586,191,0.903,194,1.059,196,2.094,213,0.732,219,1.328,220,2.006,221,0.975,222,1.16,223,3.365,224,1.586,227,0.903,228,1.888,229,0.975,230,1.011,231,2.094,232,2.647,235,1.586,236,2.996,238,0.903,253,1.438,254,0.84,257,2.191,258,1.457,260,1.059,261,1.438,266,2.369,270,1.059,272,0.881,281,3.357,282,2.476,283,2.179,284,2.369,285,4.073,286,2.996,287,1.456,288,0.975,292,1.586,314,2.369,315,2.369,316,4.627,317,1.888,318,2.369,320,0.975,325,2.006,344,2.969,365,0.84,398,3.245,438,1.16,440,0.903,441,1.456,469,1.193,474,2.094,503,2.369,513,1.059,518,1.456,520,1.456,523,2.662,546,1.723,547,1.193,549,1.287,554,1.059,598,1.059,624,2.094,627,2.387,628,1.469,629,2.384,630,0.903,632,2.094,650,1.888,684,1.583,707,1.586,708,1.527,711,2.162,715,2.191,717,1.059,734,1.16,736,2.158,737,2.349,745,2.387,754,1.287,763,0.84,778,1.059,786,2.027,788,1.275,822,1.16,852,2.099,854,2.104,865,2.094,866,3.321,867,1.53,869,2.544,874,2.006,875,1.469,877,3.184,884,1.287,888,1.287,890,2.647,923,0.975,939,1.287,976,4.073,991,0.975,1001,1.287,1016,0.903,1036,2.49,1058,1.723,1060,2.311,1061,1.586,1064,2.544,1067,1.586,1079,1.059,1080,1.586,1082,1.16,1098,2.387,1100,1.888,1108,3.245,1118,2.58,1125,1.723,1152,2.511,1193,2.996,1201,0.84,1294,1.287,1301,1.888,1309,2.369,1327,2.647,1375,1.456,1376,1.456,1380,2.996,1383,1.456,1384,2.094,1385,2.311,1387,2.369,1388,1.456,1392,1.287,1397,2.75,1399,1.456,1401,1.456,1402,1.456,1404,2.75,1405,1.16,1406,2.369,1407,3.8,1409,2.094,1410,1.287,1414,2.511,1415,3.8,1418,1.287,1428,2.369,1429,3.245,1430,1.287,1431,1.456,1432,1.456,1434,2.006,1443,1.287,1460,1.16,1461,2.387,1463,3.954,1467,1.456,1475,1.456,1494,2.027,1500,2.387,1597,2.369,1601,1.287,1608,1.287,1615,2.511,1617,2.369,1721,1.456,1732,3.259,1738,1.456,1760,1.16,1903,1.456,1955,1.287,1970,1.456,2012,1.456,2103,2.094,2132,1.456,2133,1.456,2134,1.456,2151,1.287,2208,3.79,2209,1.456,2242,1.456,2245,1.456,2270,1.287,2271,1.456,2274,4.387,2275,1.456,2277,2.369,2278,1.456,2296,1.287,2297,1.16,2304,2.996,2353,2.647,2392,2.511,2459,1.456,2474,2.094,2558,1.16,2629,2.387,2662,2.094,2674,1.888,2675,1.456,2676,1.456,2689,3.122,2694,3.8,2718,1.456,2724,2.369,2735,3.357,2779,2.511,2865,1.456,2866,1.456,2867,1.713,2868,3.599,2869,2.369,2870,1.713,2871,1.713,2872,1.713,2873,1.713,2874,1.713,2875,1.713,2876,1.16,2877,1.287,2878,1.713,2879,1.713,2880,1.713,2881,3.526,2882,3.526,2883,1.713,2884,1.713,2885,1.713,2886,1.713,2887,2.788,2888,2.788,2889,1.713,2890,2.788,2891,3.526,2892,1.713,2893,3.526,2894,1.713,2895,1.713,2896,1.713,2897,1.713,2898,1.713,2899,1.713,2900,1.713,2901,1.713,2902,1.713,2903,1.713,2904,2.788,2905,1.713,2906,1.713,2907,1.713,2908,3.526,2909,1.713,2910,2.369,2911,1.713,2912,3.526,2913,1.713,2914,3.452,2915,2.788,2916,4.471,2917,4.471,2918,1.456,2919,1.713,2920,1.713,2921,1.713,2922,1.713,2923,1.713,2924,1.713,2925,2.788,2926,1.713,2927,1.713,2928,2.788,2929,1.713,2930,1.713,2931,1.713,2932,1.713,2933,1.713,2934,1.713,2935,3.526,2936,3.526,2937,1.713,2938,5.052,2939,1.713,2940,1.713,2941,1.713,2942,1.713,2943,1.713,2944,1.713,2945,1.713,2946,1.713,2947,1.713,2948,2.788,2949,2.788,2950,2.788,2951,2.788,2952,2.788,2953,1.713,2954,1.713,2955,1.713,2956,1.713,2957,1.713,2958,1.713,2959,1.713,2960,1.713,2961,1.713,2962,1.713,2963,1.713,2964,1.713,2965,3.526,2966,1.713,2967,3.526,2968,6.562,2969,4.793,2970,4.793,2971,4.793,2972,6.182,2973,4.063,2974,6.404,2975,4.793,2976,3.526,2977,1.713,2978,2.788,2979,1.713,2980,1.713,2981,4.471,2982,1.713,2983,2.788,2984,2.788,2985,4.793,2986,1.713,2987,1.713,2988,1.713,2989,1.713,2990,1.713,2991,1.713,2992,1.713,2993,2.788,2994,1.713,2995,1.713,2996,1.713,2997,1.713,2998,1.713,2999,1.713,3000,1.713,3001,1.713,3002,1.713,3003,1.713,3004,1.713,3005,1.713,3006,1.713,3007,1.456,3008,1.713,3009,4.063,3010,1.713,3011,1.713,3012,2.788,3013,2.788,3014,1.713,3015,1.713,3016,1.713,3017,3.526,3018,2.788,3019,1.713,3020,1.713,3021,1.713,3022,1.713,3023,1.713,3024,1.713,3025,3.526,3026,1.713,3027,2.788,3028,2.788,3029,1.713,3030,2.788,3031,1.713,3032,1.713,3033,1.713,3034,1.713,3035,1.713,3036,1.713,3037,1.713,3038,1.713,3039,1.713,3040,1.713,3041,1.713,3042,1.713,3043,4.073,3044,1.713,3045,3.526,3046,1.713,3047,1.713,3048,1.713,3049,3.526,3050,1.456,3051,1.713,3052,1.713,3053,1.713,3054,1.713,3055,1.713,3056,1.713,3057,1.713,3058,1.713,3059,1.713,3060,1.713,3061,1.713,3062,1.713,3063,1.713,3064,1.713,3065,1.713,3066,1.713,3067,1.713,3068,1.713,3069,1.713,3070,1.713,3071,1.713,3072,1.713,3073,1.713,3074,1.713,3075,1.713,3076,1.713,3077,1.713,3078,2.788,3079,1.713,3080,1.713,3081,1.713,3082,1.713,3083,1.713,3084,1.713,3085,1.456,3086,1.713,3087,1.713,3088,1.713,3089,1.713,3090,1.713,3091,1.456,3092,1.713,3093,1.713,3094,1.713,3095,1.713,3096,1.456,3097,1.713,3098,1.713,3099,1.713,3100,1.456,3101,1.713,3102,1.713,3103,2.788,3104,1.713,3105,1.713,3106,1.713,3107,1.713,3108,1.713,3109,1.713,3110,1.713,3111,1.713,3112,1.713,3113,1.713,3114,2.788,3115,1.713,3116,1.713,3117,1.713,3118,1.713,3119,2.788,3120,2.788,3121,1.713,3122,1.713,3123,1.713,3124,1.713]],["title/classes/XRManager.html",[0,0.255,15,1.995]],["body/classes/XRManager.html",[0,0.243,2,0.351,3,0.233,4,0.206,5,0.154,6,2.773,8,1.049,9,0.418,10,3.708,11,1.322,12,1.742,13,1.979,15,2.632,16,0.154,17,0.574,24,1.427,25,3.98,26,5.307,27,3.98,28,4.388,29,3.296,30,4.293,31,3.98,32,3.98,33,0.529,34,4.293,35,2.792,36,3.474,38,4.293,39,3.474,40,4.293,41,3.98,42,0.727,44,1.45,45,2.707,46,3.931,47,0.721,49,0.943,50,0.547,51,0.024,52,0.447,53,0.264,54,0.552,56,0.943,57,0.621,58,0.529,59,0.682,61,2.116,79,1.049,80,0.485,83,4.094,84,2.267,85,3.162,88,1.588,89,4.154,90,2.268,92,2.802,93,2.615,94,1.165,96,3.264,97,3.041,98,3.835,99,3.835,101,1.47,103,0.578,104,3.132,105,3.589,106,3.474,107,1.472,110,2.295,112,0.939,113,3.474,115,2.859,120,2.859,121,1.638,122,3.474,124,3.474,125,2.792,126,1.996,127,3.474,128,2.632,130,2.514,131,4.506,133,3.132,134,2.859,135,0.383,136,0.559,138,3.533,139,2.267,140,2.069,141,2.845,142,2.514,143,2.514,144,1.185,145,3.98,146,2.514,147,2.514,148,1.641,149,1.641,150,2.069,152,0.361,153,0.552,155,2.514,161,2.514,162,0.529,176,1.905,186,0.015,187,0.015,213,0.67,242,1.433,272,0.712,295,0.93,386,2.069,547,1.433,597,2.514,626,3.474,684,1.049,711,1.433,779,2.514,788,1.531,1334,2.845,1552,2.632,2115,2.845,2119,2.845,2251,2.845,2253,2.845,2264,2.845,2267,2.267,2268,2.514,2438,2.845,2717,2.845,2779,3.708,2876,4.68,3125,3.348,3126,5.301,3127,3.348,3128,3.348,3129,3.348,3130,3.348,3131,3.348,3132,3.348,3133,3.348,3134,4.626,3135,3.348,3136,3.348,3137,4.626,3138,4.626,3139,4.626,3140,3.348,3141,3.348,3142,3.348,3143,3.348,3144,5.301,3145,3.348,3146,3.348,3147,3.348,3148,4.626,3149,3.348,3150,3.348,3151,5.718,3152,3.348,3153,4.626,3154,3.348,3155,3.348,3156,3.348,3157,3.348,3158,3.348,3159,3.348,3160,3.348,3161,3.348,3162,3.348]],["title/changelog.html",[115,1.813,3163,2.203,3164,2.934]],["body/changelog.html",[0,0.334,1,1.068,3,0.298,4,0.097,5,0.177,10,3.59,11,1.468,15,1.482,17,0.48,29,0.773,35,0.831,42,0.723,44,1.211,45,1.253,49,0.993,51,0.011,52,0.26,53,0.148,54,0.335,55,1.611,57,0.35,58,0.381,63,2.499,64,2.388,66,1.872,69,1.766,73,2.096,76,1.482,77,2.899,79,1.043,83,0.897,84,3.282,89,1.893,93,0.721,94,0.939,101,1.178,105,4.267,110,0.558,117,0.602,125,1.372,128,2.434,133,1.068,135,0.489,139,2.896,148,1.631,150,0.975,162,0.298,166,2.036,169,2.139,170,1.764,176,0.897,186,0.009,187,0.009,191,0.831,194,1.61,198,3.747,202,1.184,213,0.482,219,1.455,223,3.013,224,1.893,227,0.831,228,1.068,229,2.899,230,1.069,231,1.184,235,0.897,238,0.831,241,0.773,253,0.558,257,2.258,258,1.065,261,0.922,281,1.184,282,1.276,288,0.897,295,0.438,302,1.34,303,3.59,317,1.068,337,2.402,338,2.253,341,2.847,344,2.526,350,2.214,364,1.34,365,0.773,366,1.34,379,2.214,389,2.198,390,2.828,397,3.686,438,2.253,440,3.154,453,1.764,455,1.753,465,3.284,466,0.975,469,2.329,470,1.068,476,1.276,487,2.388,512,2.499,513,1.61,543,1.068,546,0.975,547,1.971,548,3.284,564,3.636,578,1.184,589,1.184,598,1.61,603,1.34,617,2.253,627,2.616,628,0.831,629,1.955,635,1.184,642,0.975,646,1.61,661,3.459,684,2.129,707,1.893,708,1.865,715,1.276,717,0.975,720,3.006,727,1.34,730,1.61,733,1.764,736,2.514,737,2.668,740,0.773,745,1.764,746,3.779,752,2.253,763,0.773,768,1.956,780,1.068,786,1.848,788,1.191,818,1.764,823,1.34,852,1.534,854,2.613,857,1.34,865,1.184,866,3.23,867,2.188,869,1.482,874,2.434,875,2.868,876,1.764,877,2.899,894,2.057,897,2.616,898,1.956,904,1.34,907,1.068,913,1.068,922,1.34,925,2.902,939,1.184,967,1.34,974,2.254,978,0.975,991,0.897,994,0.975,998,0.975,1003,1.34,1005,1.34,1036,2.904,1038,1.482,1061,1.482,1064,0.897,1067,2.899,1076,3.119,1099,0.975,1107,1.764,1118,0.773,1124,1.34,1125,0.975,1136,1.184,1137,2.499,1147,1.34,1193,0.897,1201,0.773,1229,2.828,1293,1.184,1298,1.34,1301,1.068,1320,2.499,1322,1.184,1391,1.34,1395,1.956,1404,2.896,1410,1.956,1413,1.34,1414,0.975,1429,1.068,1430,1.184,1434,2.198,1438,1.482,1443,1.184,1461,1.068,1463,1.184,1464,2.214,1494,2.044,1499,0.975,1521,1.482,1552,2.198,1576,0.975,1579,2.253,1582,0.975,1606,1.184,1608,2.499,1679,1.34,1683,1.184,1699,1.34,1703,2.828,1709,1.184,1718,2.784,1732,1.893,1742,4.282,1760,1.068,1870,1.956,1878,1.34,1911,2.828,1942,1.34,1943,4.331,1971,3.459,1990,3.636,1994,2.828,2036,1.068,2039,1.34,2050,1.34,2092,2.499,2103,1.184,2148,1.956,2151,2.499,2192,1.956,2195,1.34,2208,1.068,2234,2.828,2270,1.184,2274,1.184,2354,1.34,2558,1.068,2645,2.214,2646,4.553,2651,4.49,2659,3.915,2661,1.34,2662,1.184,2667,2.214,2689,1.61,2708,1.34,2736,1.184,2738,2.214,2777,1.068,2779,3.013,2788,1.34,2805,2.214,2856,1.34,2868,3.66,2910,1.34,2914,1.34,2918,1.34,3043,1.34,3050,3.915,3091,4.331,3096,5.609,3100,1.34,3163,1.184,3165,1.577,3166,1.577,3167,1.577,3168,1.577,3169,1.577,3170,1.577,3171,2.605,3172,1.34,3173,3.865,3174,4.875,3175,2.605,3176,6.508,3177,1.577,3178,1.577,3179,1.577,3180,1.577,3181,1.577,3182,4.278,3183,1.577,3184,3.915,3185,4.278,3186,3.119,3187,1.577,3188,3.328,3189,2.605,3190,1.577,3191,1.577,3192,1.34,3193,1.577,3194,1.577,3195,1.577,3196,3.865,3197,2.605,3198,1.577,3199,2.605,3200,1.577,3201,1.577,3202,1.184,3203,1.577,3204,1.577,3205,1.577,3206,5.444,3207,1.577,3208,1.577,3209,1.577,3210,1.577,3211,2.605,3212,1.577,3213,1.577,3214,1.34,3215,3.636,3216,6.856,3217,1.577,3218,6.303,3219,2.605,3220,1.577,3221,1.577,3222,1.577,3223,4.278,3224,1.577,3225,1.577,3226,6.883,3227,1.577,3228,4.875,3229,1.577,3230,1.577,3231,1.577,3232,3.865,3233,1.577,3234,1.577,3235,1.577,3236,2.828,3237,1.34,3238,1.577,3239,1.577,3240,1.577,3241,1.577,3242,1.577,3243,1.577,3244,1.577,3245,2.605,3246,2.605,3247,5.097,3248,1.577,3249,1.577,3250,3.865,3251,1.577,3252,1.577,3253,1.577,3254,2.605,3255,1.577,3256,2.605,3257,1.577,3258,1.577,3259,1.577,3260,5.703,3261,1.577,3262,1.577,3263,1.577,3264,1.577,3265,1.577,3266,3.865,3267,1.577,3268,3.328,3269,1.577,3270,1.577,3271,1.577,3272,1.577,3273,1.577,3274,1.577,3275,1.577,3276,1.577,3277,4.607,3278,1.577,3279,1.577,3280,1.577,3281,1.577,3282,1.577,3283,1.577,3284,1.577,3285,1.577,3286,1.577,3287,3.328,3288,1.577,3289,1.577,3290,4.278,3291,2.605,3292,1.577,3293,1.577,3294,1.577,3295,1.577,3296,1.577,3297,1.577,3298,5.988,3299,2.605,3300,2.828,3301,1.577,3302,1.577,3303,1.577,3304,1.577,3305,2.605,3306,3.328,3307,2.214,3308,1.577,3309,1.577,3310,3.328,3311,1.577,3312,3.865,3313,1.577,3314,1.577,3315,1.577,3316,1.577,3317,1.577,3318,1.577,3319,1.577,3320,1.34,3321,1.577,3322,1.577,3323,1.577,3324,1.577,3325,1.577,3326,1.577,3327,1.577,3328,1.577,3329,1.577,3330,1.577,3331,1.577,3332,1.577,3333,1.577,3334,1.577,3335,1.577,3336,1.577,3337,1.577,3338,1.577,3339,3.865,3340,1.577,3341,1.577,3342,2.605,3343,4.278,3344,1.577,3345,1.577,3346,1.577,3347,1.577,3348,1.577,3349,1.577,3350,1.577,3351,1.577,3352,1.577,3353,1.577,3354,1.577,3355,2.605,3356,1.577,3357,1.577,3358,1.577,3359,4.49,3360,1.577,3361,1.577,3362,1.577,3363,1.577,3364,3.328,3365,1.577,3366,1.577,3367,1.577,3368,3.865,3369,1.577,3370,2.605,3371,1.577,3372,1.577,3373,1.577,3374,1.577,3375,1.577,3376,1.577,3377,1.577,3378,1.577,3379,2.605,3380,1.577,3381,1.577,3382,1.577,3383,1.577,3384,1.577,3385,1.577,3386,1.577,3387,1.577,3388,1.577,3389,1.577,3390,1.577,3391,1.577,3392,1.577,3393,1.577,3394,1.577,3395,3.328,3396,1.577,3397,1.577,3398,1.577,3399,1.577,3400,3.328,3401,1.577,3402,1.577,3403,1.577,3404,1.577,3405,4.607,3406,1.577,3407,4.607,3408,1.577,3409,1.577,3410,1.577,3411,1.577,3412,1.577,3413,1.577,3414,2.605,3415,3.328,3416,2.605,3417,2.605,3418,3.328,3419,4.278,3420,3.328,3421,3.328,3422,3.328,3423,3.328,3424,1.577,3425,2.605,3426,2.605,3427,2.605,3428,1.577,3429,1.577,3430,3.865,3431,3.328,3432,2.605,3433,1.577,3434,1.577,3435,2.605,3436,2.605,3437,2.605,3438,1.577,3439,1.577,3440,1.577,3441,1.577,3442,1.577,3443,3.328,3444,3.328,3445,3.328,3446,3.328,3447,3.328,3448,3.328,3449,1.577,3450,1.577,3451,1.577,3452,1.577,3453,2.605,3454,3.328,3455,3.328,3456,3.328,3457,1.577,3458,3.328,3459,2.605,3460,3.328,3461,3.328,3462,3.328,3463,2.605,3464,3.328,3465,3.328,3466,2.828,3467,3.865,3468,3.328,3469,3.328,3470,3.328,3471,3.328,3472,1.577,3473,1.577,3474,3.328,3475,2.605,3476,2.605,3477,2.605,3478,3.328,3479,3.328,3480,2.605,3481,2.214,3482,2.605,3483,1.577,3484,1.577,3485,1.577,3486,1.577,3487,1.577,3488,1.577,3489,1.577,3490,1.577,3491,1.577,3492,1.577,3493,1.577,3494,1.577,3495,1.577,3496,1.577,3497,1.577,3498,1.577,3499,2.605,3500,1.577,3501,1.577,3502,1.577,3503,1.34,3504,1.577,3505,1.577,3506,1.577,3507,1.577,3508,1.577,3509,1.577,3510,1.577,3511,1.577,3512,1.577,3513,1.577,3514,1.577,3515,1.577,3516,1.577,3517,2.605,3518,1.577,3519,1.577,3520,1.577,3521,1.577,3522,2.828,3523,1.577,3524,1.577,3525,1.577,3526,1.577,3527,1.577,3528,1.577,3529,1.577,3530,1.577,3531,4.607,3532,1.577,3533,1.577,3534,1.577,3535,1.577,3536,1.577,3537,1.577,3538,1.577,3539,1.577,3540,1.577,3541,2.605,3542,1.577,3543,1.577,3544,1.577,3545,1.577,3546,3.328,3547,1.577,3548,1.577,3549,1.577,3550,1.577,3551,1.577,3552,1.577,3553,1.577,3554,1.577,3555,2.605,3556,1.577,3557,1.577,3558,1.577,3559,1.577,3560,1.577,3561,1.577,3562,1.577,3563,1.577,3564,1.577,3565,1.577,3566,1.577,3567,1.577,3568,1.577,3569,1.577,3570,1.577,3571,1.577,3572,1.577,3573,1.577,3574,1.577,3575,1.577,3576,1.577,3577,1.577,3578,1.34,3579,1.577,3580,1.577,3581,1.577,3582,3.328,3583,1.577,3584,1.577,3585,1.577,3586,1.577,3587,1.577,3588,1.34,3589,1.577,3590,2.605,3591,1.577,3592,1.577,3593,1.577,3594,1.577,3595,1.577,3596,1.577,3597,1.577,3598,1.577,3599,1.577,3600,1.577,3601,1.577,3602,1.577,3603,1.577,3604,1.577,3605,1.577,3606,1.577,3607,1.577,3608,1.577,3609,1.577,3610,2.605,3611,1.577,3612,1.577,3613,1.577,3614,1.577,3615,3.328,3616,1.577,3617,1.577,3618,1.577,3619,1.577,3620,1.577,3621,1.577,3622,1.577,3623,1.577,3624,1.577,3625,1.577,3626,1.577,3627,2.605,3628,1.577,3629,1.577,3630,1.577,3631,1.577,3632,1.577,3633,1.577,3634,1.577,3635,1.577,3636,1.34,3637,1.577,3638,1.577,3639,1.577,3640,1.577,3641,3.865,3642,1.577,3643,1.577,3644,1.577,3645,1.577,3646,1.577,3647,2.605,3648,1.577,3649,1.577,3650,1.577,3651,1.577,3652,1.577,3653,1.577,3654,1.577,3655,1.577,3656,1.577,3657,2.605,3658,1.577,3659,1.577,3660,1.577,3661,1.577,3662,1.577,3663,1.577,3664,1.577,3665,1.577,3666,1.577,3667,1.577,3668,1.577,3669,1.577,3670,1.577,3671,1.577,3672,1.577,3673,1.577,3674,1.577,3675,1.577,3676,1.577,3677,1.577,3678,1.577,3679,1.577,3680,1.577,3681,1.577,3682,1.577,3683,1.577,3684,1.577,3685,1.577,3686,1.577,3687,1.577,3688,1.577,3689,1.577,3690,1.577,3691,1.577,3692,1.577,3693,1.577,3694,1.577,3695,1.577,3696,1.577,3697,1.577,3698,1.577,3699,1.577,3700,1.577,3701,1.577,3702,1.577,3703,1.577,3704,1.577,3705,1.577,3706,1.577,3707,1.577,3708,1.577,3709,1.577,3710,1.577,3711,1.577,3712,1.577,3713,1.34]],["title/coverage.html",[3714,4.058]],["body/coverage.html",[0,0.533,1,2.735,5,0.185,6,2.829,7,3.433,8,2.233,15,2.298,51,0.024,53,0.155,137,2.298,186,0.017,187,0.017,188,2.298,189,3.033,190,3.033,191,3.601,213,0.585,219,2.408,220,2.298,222,3.552,230,0.585,250,2.735,251,2.497,256,3.433,258,0.934,543,2.735,544,3.433,545,4.459,550,3.433,562,3.033,615,2.735,616,3.243,681,2.735,682,3.05,683,2.735,684,1.644,703,2.128,736,1.976,774,2.298,777,2.985,852,1.345,853,3.433,860,2.497,883,2.735,889,3.07,894,2.497,895,3.433,896,3.94,974,2.128,975,3.433,983,2.735,1031,3.033,1032,3.433,1033,3.033,1034,3.945,1038,2.298,1058,2.497,1116,3.033,1118,1.98,1291,2.735,1292,3.433,1368,3.433,1369,5.078,1384,3.033,1385,2.298,1419,3.033,1420,3.433,1449,2.735,1484,3.945,1485,3.945,1493,2.298,1494,1.62,1591,3.433,1592,3.433,1615,2.497,1616,3.433,1656,6.265,1678,3.433,1732,2.298,1834,3.033,1951,3.033,1952,3.033,1985,3.433,1986,3.433,2036,2.735,2037,3.433,2081,3.433,2190,3.033,2191,3.433,2232,3.033,2233,3.433,2392,2.497,2393,3.433,2430,3.033,2468,2.735,2469,3.94,2629,2.735,2630,3.94,2672,3.433,2674,2.735,2677,3.033,2680,3.033,2689,2.497,2777,2.735,2778,3.433,2865,4.459,2866,4.459,2876,2.735,2877,3.033,3237,3.433,3503,3.433,3636,3.433,3714,3.433,3715,4.04,3716,4.04,3717,4.04,3718,6.168,3719,5.827,3720,4.459,3721,4.459,3722,3.433,3723,6.835,3724,3.433,3725,3.433,3726,4.04,3727,4.459,3728,5.247,3729,3.433,3730,5.247,3731,5.247,3732,4.04,3733,3.433,3734,5.247,3735,4.04,3736,5.247,3737,4.04,3738,4.04,3739,4.04,3740,4.04,3741,5.247,3742,4.04,3743,4.04,3744,4.04,3745,4.04,3746,5.247,3747,4.04,3748,4.04,3749,4.04,3750,4.04,3751,5.247,3752,4.04,3753,4.04,3754,5.247,3755,5.247,3756,4.04,3757,4.04,3758,4.04,3759,4.04,3760,4.04,3761,4.04,3762,4.952,3763,4.04,3764,5.247,3765,4.04,3766,5.247,3767,5.247,3768,4.04,3769,3.433,3770,4.04,3771,4.04,3772,4.04]],["title/dependencies.html",[3186,1.986,3773,3.582]],["body/dependencies.html",[51,0.024,136,0.932,186,0.021,187,0.021,239,4.743,874,3.175,2767,4.743,2868,4.19,3713,4.743,3773,4.743,3774,5.581,3775,5.581,3776,5.581,3777,5.581,3778,5.581,3779,5.581,3780,5.581,3781,4.743,3782,5.581,3783,5.581,3784,5.581]],["title/miscellaneous/enumerations.html",[3785,1.669,3786,3.582]],["body/miscellaneous/enumerations.html",[6,2.174,8,1.97,10,3.885,16,0.249,51,0.023,53,0.208,58,0.795,83,3.084,89,3.084,138,3.885,186,0.021,187,0.021,224,3.084,230,0.785,258,1.253,440,2.856,455,3.312,616,3.35,617,3.67,682,2.479,683,4.256,684,1.699,705,4.721,713,3.577,733,3.67,778,3.35,780,4.256,869,3.084,1951,4.07,1952,4.721,1963,5.343,1976,4.607,2779,3.885,2869,4.607,2876,3.67,3785,3.084,3786,4.607,3787,5.421,3788,4.607,3789,5.421]],["title/index.html",[16,0.135,115,1.813,3163,2.203]],["body/index.html",[2,0.503,4,0.295,5,0.22,49,1.285,51,0.024,55,2.201,66,1.924,84,2.864,104,3.247,110,1.698,135,0.668,169,1.503,186,0.019,187,0.019,213,0.95,230,1.044,258,1.517,261,1.698,272,0.881,291,3.247,292,3.587,338,3.247,344,2.501,684,1.832,708,1.253,709,4.076,715,2.864,794,4.076,852,2.328,854,2.52,858,3.957,860,3.612,867,2.201,875,3.079,876,3.247,923,2.728,953,3.601,1118,3.353,1193,2.728,1429,3.247,1460,3.247,1462,4.076,1486,4.389,1609,3.601,2192,3.601,2353,4.389,2674,4.269,2704,4.967,2705,4.076,3085,4.967,3186,3.247,3192,4.967,3214,4.076,3215,4.076,3236,4.967,3307,5.358,3359,4.076,3466,4.076,3588,4.967,3790,4.796,3791,4.076,3792,4.796,3793,4.076,3794,4.796,3795,4.796,3796,5.845,3797,4.796,3798,4.796,3799,4.796,3800,5.845,3801,4.796,3802,4.796,3803,4.796,3804,4.796,3805,4.796,3806,4.796,3807,4.796,3808,4.796,3809,5.845,3810,4.796,3811,4.796,3812,4.796,3813,4.796,3814,4.796,3815,4.796,3816,4.796]],["title/modules.html",[3817,4.058]],["body/modules.html",[51,0.021,186,0.021,187,0.021,3817,4.858]],["title/overview.html",[3818,4.058]],["body/overview.html",[2,0.597,51,0.021,186,0.021,187,0.021,221,3.239,2592,4.276,3818,4.839,3819,5.694]],["title/properties.html",[17,0.523,3186,1.986]],["body/properties.html",[9,0.388,17,0.69,51,0.024,66,1.544,186,0.021,187,0.021,230,0.924,752,3.764,854,1.968,923,3.163,952,4.725,3172,4.725,3184,4.725,3791,4.725,3793,4.725,3820,5.56,3821,5.56,3822,5.56,3823,5.56,3824,5.56,3825,5.56,3826,5.56,3827,5.56,3828,5.56,3829,5.56,3830,5.56]],["title/miscellaneous/typealiases.html",[3785,1.669,3831,4.215]],["body/miscellaneous/typealiases.html",[16,0.233,50,0.485,51,0.02,53,0.278,66,1.961,94,1.232,96,2.486,110,1.796,125,2.673,128,2.886,169,1.895,186,0.02,187,0.02,189,3.81,190,4.541,204,5.139,233,2.519,344,2.171,524,3.136,616,3.136,682,2.765,683,4.094,684,1.59,710,5.139,736,2.66,737,3.434,746,3.435,786,2.035,852,1.689,889,2.673,998,3.136,1036,2.954,1395,3.81,1718,3.692,1741,5.139,1774,4.312,1783,4.312,2792,4.312,2793,4.312,3785,2.886,3788,4.312,3832,5.074,3833,5.074,3834,6.047,3835,7.063,3836,7.108,3837,6.047,3838,6.047,3839,6.047,3840,6.047,3841,6.047,3842,6.047,3843,6.047,3844,5.074,3845,6.047,3846,5.074,3847,5.074]],["title/miscellaneous/variables.html",[3202,3.165,3785,1.669]],["body/miscellaneous/variables.html",[5,0.313,8,1.638,16,0.267,35,2.117,49,0.819,51,0.024,52,0.314,53,0.245,57,0.917,58,0.793,66,1.116,69,1.714,79,2.14,80,1.016,84,2.562,90,1.719,101,0.929,107,1.452,112,0.582,117,0.625,144,1.422,162,0.665,176,2.974,186,0.017,187,0.017,213,1.005,220,2.286,223,2.483,225,3.414,226,3.414,227,2.117,230,0.582,232,5.127,258,1.423,269,3.63,272,0.907,337,1.612,389,2.286,405,3.017,453,2.72,466,3.231,481,3.414,482,3.414,535,4.443,562,3.926,629,2.097,682,1.837,684,1.821,730,2.483,786,1.612,852,1.338,866,2.117,867,1.513,868,3.017,871,1.612,873,2.974,1016,2.117,1060,2.286,1079,3.231,1438,2.286,1449,3.539,1461,3.539,1521,2.974,1632,4.622,1718,2.117,1742,3.017,1876,3.414,2430,3.926,2630,3.017,2646,3.017,2647,3.414,2666,3.414,2677,3.926,2679,3.414,2680,3.926,2722,4.443,2734,4.443,2735,4.364,2736,3.926,2743,4.443,2877,3.926,3007,3.414,3202,3.017,3300,3.414,3320,4.443,3481,3.414,3522,3.414,3578,3.414,3720,3.414,3721,4.939,3722,4.443,3724,4.443,3725,3.414,3727,3.414,3729,3.414,3733,3.414,3762,3.414,3769,4.443,3781,3.414,3785,2.286,3848,4.018,3849,4.018,3850,5.228,3851,4.018,3852,5.228,3853,4.018,3854,4.018,3855,4.018,3856,4.018,3857,4.018,3858,4.018,3859,4.018,3860,4.018,3861,4.018,3862,4.018,3863,4.018,3864,4.018,3865,4.018,3866,4.018,3867,4.018,3868,4.018,3869,4.018,3870,4.018,3871,4.018,3872,4.018,3873,4.018,3874,4.018,3875,4.018,3876,4.018,3877,4.018,3878,4.018,3879,4.018,3880,4.018,3881,4.018,3882,4.018,3883,4.018,3884,4.018,3885,4.018,3886,5.812,3887,4.018,3888,5.228,3889,4.018,3890,4.018,3891,4.018,3892,4.018,3893,6.155,3894,5.228,3895,5.228,3896,4.018,3897,4.018,3898,4.018,3899,6.155,3900,5.228,3901,4.018,3902,5.228,3903,4.018,3904,4.018,3905,4.018,3906,4.018,3907,5.228,3908,4.018,3909,4.018,3910,4.018,3911,4.018,3912,4.018,3913,4.018,3914,4.018,3915,4.018,3916,4.018,3917,4.018,3918,4.018,3919,4.018,3920,4.018,3921,4.018,3922,4.018,3923,4.018,3924,4.018,3925,4.018,3926,4.018,3927,4.018,3928,4.018,3929,4.018,3930,4.018,3931,4.018,3932,4.018,3933,4.018,3934,4.018]]],"invertedIndex":[["",{"_index":51,"title":{},"body":{"classes/ARManager.html":{},"classes/ActiveVariable.html":{},"interfaces/AnimationPreset.html":{},"classes/CMSObjects.html":{},"classes/ColorManager.html":{},"classes/ColorOptions.html":{},"interfaces/Configuration.html":{},"classes/CoordinateHelper.html":{},"classes/Cut.html":{},"classes/DatGUIMenuUI.html":{},"classes/EffectsManager.html":{},"interfaces/EventDataLoader.html":{},"classes/ExportManager.html":{},"classes/Field.html":{},"classes/InfoLogger.html":{},"classes/LoadingManager.html":{},"classes/PhoenixMenuNode.html":{},"classes/PhoenixMenuUI.html":{},"interfaces/PhoenixUI.html":{},"classes/PresetView.html":{},"classes/PrettySymbols.html":{},"classes/RKHelper.html":{},"classes/RendererManager.html":{},"classes/RungeKutta.html":{},"classes/ScriptLoader.html":{},"classes/SelectionManager.html":{},"classes/State.html":{},"classes/StateManager.html":{},"classes/TracksMaterial.html":{},"classes/TracksMesh.html":{},"classes/URLOptionsManager.html":{},"classes/VRManager.html":{},"interfaces/Window.html":{},"classes/XRManager.html":{},"changelog.html":{},"coverage.html":{},"dependencies.html":{},"miscellaneous/enumerations.html":{},"index.html":{},"modules.html":{},"overview.html":{},"properties.html":{},"miscellaneous/typealiases.html":{},"miscellaneous/variables.html":{}}}],["0",{"_index":295,"title":{},"body":{"interfaces/AnimationPreset.html":{},"classes/ColorOptions.html":{},"classes/CoordinateHelper.html":{},"classes/DatGUIMenuUI.html":{},"classes/LoadingManager.html":{},"classes/PhoenixMenuNode.html":{},"classes/PhoenixMenuUI.html":{},"classes/PresetView.html":{},"classes/RendererManager.html":{},"classes/ScriptLoader.html":{},"classes/SelectionManager.html":{},"classes/State.html":{},"classes/TracksMaterial.html":{},"classes/TracksMesh.html":{},"classes/VRManager.html":{},"classes/XRManager.html":{},"changelog.html":{}}}],["0.0",{"_index":1168,"title":{},"body":{"classes/DatGUIMenuUI.html":{}}}],["0.0002",{"_index":1556,"title":{},"body":{"classes/Field.html":{},"classes/RungeKutta.html":{},"classes/State.html":{}}}],["0.001",{"_index":2595,"title":{},"body":{"classes/TracksMaterial.html":{},"classes/TracksMesh.html":{}}}],["0.01",{"_index":174,"title":{},"body":{"classes/ARManager.html":{},"interfaces/AnimationPreset.html":{},"classes/PhoenixMenuUI.html":{}}}],["0.05",{"_index":1886,"title":{},"body":{"classes/PhoenixMenuUI.html":{}}}],["0.1",{"_index":597,"title":{},"body":{"classes/CMSObjects.html":{},"classes/PhoenixMenuUI.html":{},"classes/XRManager.html":{}}}],["0.152.2",{"_index":3784,"title":{},"body":{"dependencies.html":{}}}],["0.25",{"_index":323,"title":{},"body":{"interfaces/AnimationPreset.html":{}}}],["0.5",{"_index":1558,"title":{},"body":{"classes/Field.html":{},"classes/RungeKutta.html":{},"classes/State.html":{}}}],["0.7",{"_index":610,"title":{},"body":{"classes/CMSObjects.html":{}}}],["0.7.9",{"_index":3777,"title":{},"body":{"dependencies.html":{}}}],["0.75",{"_index":324,"title":{},"body":{"interfaces/AnimationPreset.html":{}}}],["000",{"_index":2412,"title":{},"body":{"classes/StateManager.html":{}}}],["000000",{"_index":1155,"title":{},"body":{"classes/DatGUIMenuUI.html":{}}}],["000ab78",{"_index":3414,"title":{},"body":{"changelog.html":{}}}],["01",{"_index":3196,"title":{},"body":{"changelog.html":{}}}],["02",{"_index":3188,"title":{},"body":{"changelog.html":{}}}],["029d526",{"_index":3660,"title":{},"body":{"changelog.html":{}}}],["03",{"_index":3182,"title":{},"body":{"changelog.html":{}}}],["037af62",{"_index":3376,"title":{},"body":{"changelog.html":{}}}],["03a1de4",{"_index":3562,"title":{},"body":{"changelog.html":{}}}],["04",{"_index":3268,"title":{},"body":{"changelog.html":{}}}],["04dc545",{"_index":3672,"title":{},"body":{"changelog.html":{}}}],["05",{"_index":3174,"title":{},"body":{"changelog.html":{}}}],["05ae1d6",{"_index":3259,"title":{},"body":{"changelog.html":{}}}],["06",{"_index":3250,"title":{},"body":{"changelog.html":{}}}],["07",{"_index":3245,"title":{},"body":{"changelog.html":{}}}],["07/07/2021",{"_index":151,"title":{},"body":{"classes/ARManager.html":{}}}],["07d8633",{"_index":3390,"title":{},"body":{"changelog.html":{}}}],["08",{"_index":3342,"title":{},"body":{"changelog.html":{}}}],["0837334",{"_index":3611,"title":{},"body":{"changelog.html":{}}}],["08c8e00",{"_index":3361,"title":{},"body":{"changelog.html":{}}}],["09",{"_index":3223,"title":{},"body":{"changelog.html":{}}}],["094261c",{"_index":3338,"title":{},"body":{"changelog.html":{}}}],["0980379",{"_index":3685,"title":{},"body":{"changelog.html":{}}}],["0a26fea",{"_index":3682,"title":{},"body":{"changelog.html":{}}}],["0b2dd8a",{"_index":3564,"title":{},"body":{"changelog.html":{}}}],["0b95e5b",{"_index":3500,"title":{},"body":{"changelog.html":{}}}],["0ba5097",{"_index":3331,"title":{},"body":{"changelog.html":{}}}],["0c48b27",{"_index":3279,"title":{},"body":{"changelog.html":{}}}],["0x000000",{"_index":1219,"title":{},"body":{"classes/DatGUIMenuUI.html":{}}}],["0x8c8c8c",{"_index":3806,"title":{},"body":{"index.html":{}}}],["0xafafaf",{"_index":1267,"title":{},"body":{"classes/DatGUIMenuUI.html":{}}}],["0xffffff",{"_index":609,"title":{},"body":{"classes/CMSObjects.html":{},"classes/ColorManager.html":{}}}],["1",{"_index":71,"title":{},"body":{"classes/ARManager.html":{},"interfaces/AnimationPreset.html":{},"classes/ColorOptions.html":{},"classes/CoordinateHelper.html":{},"classes/Cut.html":{},"classes/DatGUIMenuUI.html":{},"classes/EffectsManager.html":{},"classes/Field.html":{},"classes/PhoenixMenuNode.html":{},"classes/PhoenixMenuUI.html":{},"classes/RendererManager.html":{},"classes/RungeKutta.html":{},"classes/SelectionManager.html":{},"classes/State.html":{},"classes/TracksMaterial.html":{},"classes/TracksMesh.html":{},"classes/VRManager.html":{},"interfaces/Window.html":{}}}],["1.0",{"_index":1157,"title":{},"body":{"classes/DatGUIMenuUI.html":{},"classes/TracksMaterial.html":{},"classes/TracksMesh.html":{}}}],["1.0.1",{"_index":3713,"title":{},"body":{"changelog.html":{},"dependencies.html":{}}}],["1.0.2",{"_index":3710,"title":{},"body":{"changelog.html":{}}}],["1.1.0",{"_index":3679,"title":{},"body":{"changelog.html":{}}}],["1.2.0",{"_index":3640,"title":{},"body":{"changelog.html":{}}}],["1.3.0",{"_index":3620,"title":{},"body":{"changelog.html":{}}}],["1.4.0",{"_index":3592,"title":{},"body":{"changelog.html":{}}}],["1.4.1",{"_index":3779,"title":{},"body":{"dependencies.html":{}}}],["1.5.0",{"_index":3565,"title":{},"body":{"changelog.html":{}}}],["1.6.0",{"_index":3493,"title":{},"body":{"changelog.html":{}}}],["1.7.0",{"_index":3485,"title":{},"body":{"changelog.html":{}}}],["1.8.0",{"_index":3484,"title":{},"body":{"changelog.html":{}}}],["1.9.0",{"_index":3483,"title":{},"body":{"changelog.html":{}}}],["1/1",{"_index":3723,"title":{},"body":{"coverage.html":{}}}],["10",{"_index":73,"title":{},"body":{"classes/ARManager.html":{},"interfaces/AnimationPreset.html":{},"classes/ColorOptions.html":{},"classes/DatGUIMenuUI.html":{},"classes/InfoLogger.html":{},"classes/PhoenixMenuUI.html":{},"classes/State.html":{},"changelog.html":{}}}],["10/10",{"_index":3735,"title":{},"body":{"coverage.html":{}}}],["100",{"_index":1656,"title":{},"body":{"classes/LoadingManager.html":{},"coverage.html":{}}}],["1000",{"_index":269,"title":{},"body":{"interfaces/AnimationPreset.html":{},"classes/DatGUIMenuUI.html":{},"classes/Field.html":{},"classes/RungeKutta.html":{},"classes/State.html":{},"miscellaneous/variables.html":{}}}],["10000",{"_index":427,"title":{},"body":{"interfaces/AnimationPreset.html":{}}}],["1007.1048030984678",{"_index":3879,"title":{},"body":{"miscellaneous/variables.html":{}}}],["10244f7",{"_index":3330,"title":{},"body":{"changelog.html":{}}}],["11",{"_index":1124,"title":{},"body":{"classes/DatGUIMenuUI.html":{},"changelog.html":{}}}],["11/11",{"_index":3736,"title":{},"body":{"coverage.html":{}}}],["1100",{"_index":2061,"title":{},"body":{"classes/RKHelper.html":{}}}],["11000",{"_index":447,"title":{},"body":{"interfaces/AnimationPreset.html":{}}}],["12",{"_index":3299,"title":{},"body":{"changelog.html":{}}}],["12/12",{"_index":3755,"title":{},"body":{"coverage.html":{}}}],["124a272",{"_index":3442,"title":{},"body":{"changelog.html":{}}}],["1261358",{"_index":3705,"title":{},"body":{"changelog.html":{}}}],["12814.982506255355",{"_index":3881,"title":{},"body":{"miscellaneous/variables.html":{}}}],["12834.18729094943",{"_index":3859,"title":{},"body":{"miscellaneous/variables.html":{}}}],["12b1754",{"_index":3271,"title":{},"body":{"changelog.html":{}}}],["13",{"_index":3197,"title":{},"body":{"changelog.html":{}}}],["13/13",{"_index":3759,"title":{},"body":{"coverage.html":{}}}],["135.68755273443463",{"_index":3861,"title":{},"body":{"miscellaneous/variables.html":{}}}],["1381.1675900848818",{"_index":3877,"title":{},"body":{"miscellaneous/variables.html":{}}}],["14",{"_index":3175,"title":{},"body":{"changelog.html":{}}}],["14/14",{"_index":3749,"title":{},"body":{"coverage.html":{}}}],["14cdc8f",{"_index":3302,"title":{},"body":{"changelog.html":{}}}],["14d5f3a",{"_index":3335,"title":{},"body":{"changelog.html":{}}}],["14e4cbb",{"_index":3409,"title":{},"body":{"changelog.html":{}}}],["15",{"_index":3296,"title":{},"body":{"changelog.html":{}}}],["15/15",{"_index":3754,"title":{},"body":{"coverage.html":{}}}],["15dd07c",{"_index":3397,"title":{},"body":{"changelog.html":{}}}],["16",{"_index":3266,"title":{},"body":{"changelog.html":{}}}],["16/16",{"_index":3734,"title":{},"body":{"coverage.html":{}}}],["16ea0df",{"_index":3350,"title":{},"body":{"changelog.html":{}}}],["17",{"_index":3251,"title":{},"body":{"changelog.html":{}}}],["1766.7693725879053",{"_index":3878,"title":{},"body":{"miscellaneous/variables.html":{}}}],["1788560",{"_index":3269,"title":{},"body":{"changelog.html":{}}}],["17909eb",{"_index":3701,"title":{},"body":{"changelog.html":{}}}],["18",{"_index":3494,"title":{},"body":{"changelog.html":{}}}],["18/18",{"_index":3748,"title":{},"body":{"coverage.html":{}}}],["18f8db2",{"_index":3663,"title":{},"body":{"changelog.html":{}}}],["19.874838262525053",{"_index":3867,"title":{},"body":{"miscellaneous/variables.html":{}}}],["19/19",{"_index":3766,"title":{},"body":{"coverage.html":{}}}],["1906976",{"_index":3699,"title":{},"body":{"changelog.html":{}}}],["1975d70",{"_index":3659,"title":{},"body":{"changelog.html":{}}}],["1].foreach((chargevalue",{"_index":813,"title":{},"body":{"classes/ColorOptions.html":{}}}],["1].oncomplete",{"_index":464,"title":{},"body":{"interfaces/AnimationPreset.html":{}}}],["1a01248",{"_index":3423,"title":{},"body":{"changelog.html":{}}}],["1a17e99",{"_index":3461,"title":{},"body":{"changelog.html":{}}}],["1af6ae2",{"_index":3427,"title":{},"body":{"changelog.html":{}}}],["1dd0431",{"_index":3434,"title":{},"body":{"changelog.html":{}}}],["2",{"_index":842,"title":{},"body":{"classes/ColorOptions.html":{},"classes/CoordinateHelper.html":{},"classes/ExportManager.html":{},"classes/Field.html":{},"classes/PrettySymbols.html":{},"classes/RungeKutta.html":{},"classes/SelectionManager.html":{},"classes/State.html":{}}}],["2.0",{"_index":952,"title":{},"body":{"classes/CoordinateHelper.html":{},"properties.html":{}}}],["2.0.0",{"_index":3413,"title":{},"body":{"changelog.html":{}}}],["2.1.0",{"_index":3374,"title":{},"body":{"changelog.html":{}}}],["2.10.0",{"_index":3244,"title":{},"body":{"changelog.html":{}}}],["2.11.0",{"_index":3225,"title":{},"body":{"changelog.html":{}}}],["2.11.1",{"_index":3222,"title":{},"body":{"changelog.html":{}}}],["2.11.2",{"_index":3213,"title":{},"body":{"changelog.html":{}}}],["2.11.4",{"_index":3205,"title":{},"body":{"changelog.html":{}}}],["2.12.0",{"_index":3195,"title":{},"body":{"changelog.html":{}}}],["2.13.0",{"_index":3187,"title":{},"body":{"changelog.html":{}}}],["2.14.0",{"_index":3181,"title":{},"body":{"changelog.html":{}}}],["2.14.1",{"_index":3172,"title":{},"body":{"changelog.html":{},"properties.html":{}}}],["2.2.0",{"_index":3341,"title":{},"body":{"changelog.html":{}}}],["2.3.0",{"_index":3332,"title":{},"body":{"changelog.html":{}}}],["2.3.1",{"_index":3327,"title":{},"body":{"changelog.html":{}}}],["2.3.2",{"_index":3324,"title":{},"body":{"changelog.html":{}}}],["2.4.0",{"_index":3314,"title":{},"body":{"changelog.html":{}}}],["2.5.0",{"_index":3297,"title":{},"body":{"changelog.html":{}}}],["2.5.2",{"_index":3295,"title":{},"body":{"changelog.html":{}}}],["2.6.0",{"_index":3289,"title":{},"body":{"changelog.html":{}}}],["2.7.0",{"_index":3267,"title":{},"body":{"changelog.html":{}}}],["2.8.0",{"_index":3265,"title":{},"body":{"changelog.html":{}}}],["2.9.0",{"_index":3249,"title":{},"body":{"changelog.html":{}}}],["2/2",{"_index":3718,"title":{},"body":{"coverage.html":{}}}],["20",{"_index":1870,"title":{},"body":{"classes/PhoenixMenuUI.html":{},"classes/VRManager.html":{},"changelog.html":{}}}],["20.0.3",{"_index":3776,"title":{},"body":{"dependencies.html":{}}}],["20/06/2021",{"_index":2809,"title":{},"body":{"classes/VRManager.html":{}}}],["20/20",{"_index":3770,"title":{},"body":{"coverage.html":{}}}],["2000",{"_index":535,"title":{},"body":{"interfaces/AnimationPreset.html":{},"miscellaneous/variables.html":{}}}],["2020",{"_index":3641,"title":{},"body":{"changelog.html":{}}}],["2021",{"_index":3298,"title":{},"body":{"changelog.html":{}}}],["2022",{"_index":3206,"title":{},"body":{"changelog.html":{}}}],["2023",{"_index":3173,"title":{},"body":{"changelog.html":{}}}],["20ef288",{"_index":3448,"title":{},"body":{"changelog.html":{}}}],["21",{"_index":3246,"title":{},"body":{"changelog.html":{}}}],["21/21",{"_index":3751,"title":{},"body":{"coverage.html":{}}}],["22",{"_index":3183,"title":{},"body":{"changelog.html":{}}}],["22/22",{"_index":3768,"title":{},"body":{"coverage.html":{}}}],["2219a3e",{"_index":3606,"title":{},"body":{"changelog.html":{}}}],["22891.902734328327",{"_index":3883,"title":{},"body":{"miscellaneous/variables.html":{}}}],["22a1ec8",{"_index":3665,"title":{},"body":{"changelog.html":{}}}],["23/23",{"_index":3764,"title":{},"body":{"coverage.html":{}}}],["234.03507981484574",{"_index":3870,"title":{},"body":{"miscellaneous/variables.html":{}}}],["236bdf4",{"_index":3504,"title":{},"body":{"changelog.html":{}}}],["2371f75",{"_index":3472,"title":{},"body":{"changelog.html":{}}}],["24",{"_index":302,"title":{},"body":{"interfaces/AnimationPreset.html":{},"changelog.html":{}}}],["24/24",{"_index":3767,"title":{},"body":{"coverage.html":{}}}],["24ecd77",{"_index":3221,"title":{},"body":{"changelog.html":{}}}],["25.884223757326",{"_index":3863,"title":{},"body":{"miscellaneous/variables.html":{}}}],["2516.987185037266",{"_index":3882,"title":{},"body":{"miscellaneous/variables.html":{}}}],["257",{"_index":3525,"title":{},"body":{"changelog.html":{}}}],["25b2a9d",{"_index":3668,"title":{},"body":{"changelog.html":{}}}],["263.3640855132258",{"_index":3866,"title":{},"body":{"miscellaneous/variables.html":{}}}],["26444f1",{"_index":3303,"title":{},"body":{"changelog.html":{}}}],["266af04",{"_index":3571,"title":{},"body":{"changelog.html":{}}}],["2681.277288705242",{"_index":3872,"title":{},"body":{"miscellaneous/variables.html":{}}}],["26eff0e",{"_index":3365,"title":{},"body":{"changelog.html":{}}}],["27",{"_index":3207,"title":{},"body":{"changelog.html":{}}}],["270.10019006776236",{"_index":3864,"title":{},"body":{"miscellaneous/variables.html":{}}}],["2700aaf",{"_index":3394,"title":{},"body":{"changelog.html":{}}}],["28",{"_index":3290,"title":{},"body":{"changelog.html":{}}}],["28/06/2021",{"_index":141,"title":{},"body":{"classes/ARManager.html":{},"classes/XRManager.html":{}}}],["28/28",{"_index":3746,"title":{},"body":{"coverage.html":{}}}],["289",{"_index":3421,"title":{},"body":{"changelog.html":{}}}],["29",{"_index":3224,"title":{},"body":{"changelog.html":{}}}],["29/06/2021",{"_index":3132,"title":{},"body":{"classes/XRManager.html":{}}}],["29/08/2020",{"_index":2808,"title":{},"body":{"classes/VRManager.html":{}}}],["29093a2",{"_index":3556,"title":{},"body":{"changelog.html":{}}}],["2933.619479808285",{"_index":3871,"title":{},"body":{"miscellaneous/variables.html":{}}}],["29beae7",{"_index":3204,"title":{},"body":{"changelog.html":{}}}],["2c97f5c",{"_index":3449,"title":{},"body":{"changelog.html":{}}}],["2e16371",{"_index":3554,"title":{},"body":{"changelog.html":{}}}],["2e52c22",{"_index":3465,"title":{},"body":{"changelog.html":{}}}],["2fa310f",{"_index":3589,"title":{},"body":{"changelog.html":{}}}],["2rem",{"_index":1123,"title":{},"body":{"classes/DatGUIMenuUI.html":{}}}],["3",{"_index":304,"title":{},"body":{"interfaces/AnimationPreset.html":{},"classes/CMSObjects.html":{},"classes/SelectionManager.html":{},"classes/TracksMaterial.html":{},"classes/TracksMesh.html":{}}}],["3.0",{"_index":972,"title":{},"body":{"classes/CoordinateHelper.html":{}}}],["3.10.1",{"_index":3782,"title":{},"body":{"dependencies.html":{}}}],["3.3333",{"_index":2389,"title":{},"body":{"classes/State.html":{}}}],["3/3",{"_index":3731,"title":{},"body":{"coverage.html":{}}}],["30",{"_index":516,"title":{},"body":{"interfaces/AnimationPreset.html":{},"classes/VRManager.html":{}}}],["300",{"_index":497,"title":{},"body":{"interfaces/AnimationPreset.html":{}}}],["3000",{"_index":405,"title":{},"body":{"interfaces/AnimationPreset.html":{},"classes/RKHelper.html":{},"miscellaneous/variables.html":{}}}],["3017ca9",{"_index":3388,"title":{},"body":{"changelog.html":{}}}],["303187a",{"_index":3438,"title":{},"body":{"changelog.html":{}}}],["3041166",{"_index":3476,"title":{},"body":{"changelog.html":{}}}],["30b0383",{"_index":3669,"title":{},"body":{"changelog.html":{}}}],["30b5160",{"_index":3552,"title":{},"body":{"changelog.html":{}}}],["312.02688693297375",{"_index":3862,"title":{},"body":{"miscellaneous/variables.html":{}}}],["318.16541790248885",{"_index":3868,"title":{},"body":{"miscellaneous/variables.html":{}}}],["32",{"_index":485,"title":{},"body":{"interfaces/AnimationPreset.html":{}}}],["3255a65",{"_index":3274,"title":{},"body":{"changelog.html":{}}}],["33/33",{"_index":3738,"title":{},"body":{"coverage.html":{}}}],["336",{"_index":3354,"title":{},"body":{"changelog.html":{}}}],["3475836",{"_index":3595,"title":{},"body":{"changelog.html":{}}}],["34a783c",{"_index":3309,"title":{},"body":{"changelog.html":{}}}],["34d9b2c",{"_index":3362,"title":{},"body":{"changelog.html":{}}}],["3500",{"_index":3865,"title":{},"body":{"miscellaneous/variables.html":{}}}],["359d353",{"_index":3573,"title":{},"body":{"changelog.html":{}}}],["36/36",{"_index":3758,"title":{},"body":{"coverage.html":{}}}],["364",{"_index":3311,"title":{},"body":{"changelog.html":{}}}],["36486b8",{"_index":3366,"title":{},"body":{"changelog.html":{}}}],["3756330",{"_index":3609,"title":{},"body":{"changelog.html":{}}}],["37df19f",{"_index":3644,"title":{},"body":{"changelog.html":{}}}],["3839578",{"_index":3475,"title":{},"body":{"changelog.html":{}}}],["3918159",{"_index":3687,"title":{},"body":{"changelog.html":{}}}],["39241a4",{"_index":3347,"title":{},"body":{"changelog.html":{}}}],["399ac77",{"_index":3712,"title":{},"body":{"changelog.html":{}}}],["3b1991c",{"_index":3569,"title":{},"body":{"changelog.html":{}}}],["3ce675f",{"_index":3603,"title":{},"body":{"changelog.html":{}}}],["3d",{"_index":763,"title":{},"body":{"classes/ColorOptions.html":{},"interfaces/EventDataLoader.html":{},"classes/Field.html":{},"classes/RungeKutta.html":{},"classes/SelectionManager.html":{},"classes/State.html":{},"interfaces/Window.html":{},"changelog.html":{}}}],["3d1f91c",{"_index":3240,"title":{},"body":{"changelog.html":{}}}],["3daabc5",{"_index":3384,"title":{},"body":{"changelog.html":{}}}],["3e5d80d",{"_index":3424,"title":{},"body":{"changelog.html":{}}}],["3f6367f",{"_index":3605,"title":{},"body":{"changelog.html":{}}}],["4/4",{"_index":3730,"title":{},"body":{"coverage.html":{}}}],["40/40",{"_index":3741,"title":{},"body":{"coverage.html":{}}}],["4000",{"_index":1070,"title":{},"body":{"classes/DatGUIMenuUI.html":{}}}],["40bbba0",{"_index":3515,"title":{},"body":{"changelog.html":{}}}],["42/42",{"_index":3765,"title":{},"body":{"coverage.html":{}}}],["4262a1b",{"_index":3675,"title":{},"body":{"changelog.html":{}}}],["43",{"_index":3819,"title":{},"body":{"overview.html":{}}}],["43/43",{"_index":3744,"title":{},"body":{"coverage.html":{}}}],["448eb4f",{"_index":3201,"title":{},"body":{"changelog.html":{}}}],["455f536",{"_index":3533,"title":{},"body":{"changelog.html":{}}}],["45a0123",{"_index":3559,"title":{},"body":{"changelog.html":{}}}],["4603dbc",{"_index":3348,"title":{},"body":{"changelog.html":{}}}],["46910.7848593543",{"_index":3858,"title":{},"body":{"miscellaneous/variables.html":{}}}],["4698ea4",{"_index":3340,"title":{},"body":{"changelog.html":{}}}],["46b8aee",{"_index":3371,"title":{},"body":{"changelog.html":{}}}],["473a39c",{"_index":3285,"title":{},"body":{"changelog.html":{}}}],["4764196",{"_index":3646,"title":{},"body":{"changelog.html":{}}}],["477845f",{"_index":3194,"title":{},"body":{"changelog.html":{}}}],["4791f53",{"_index":3238,"title":{},"body":{"changelog.html":{}}}],["48130b2",{"_index":3677,"title":{},"body":{"changelog.html":{}}}],["4acca1a",{"_index":3479,"title":{},"body":{"changelog.html":{}}}],["4b10452",{"_index":3678,"title":{},"body":{"changelog.html":{}}}],["4c5fac9",{"_index":3272,"title":{},"body":{"changelog.html":{}}}],["4e41f72",{"_index":3318,"title":{},"body":{"changelog.html":{}}}],["4f80bd6",{"_index":3594,"title":{},"body":{"changelog.html":{}}}],["5",{"_index":2592,"title":{},"body":{"classes/TracksMaterial.html":{},"classes/TracksMesh.html":{},"overview.html":{}}}],["5/5",{"_index":3728,"title":{},"body":{"coverage.html":{}}}],["50",{"_index":2844,"title":{},"body":{"classes/VRManager.html":{}}}],["500",{"_index":300,"title":{},"body":{"interfaces/AnimationPreset.html":{}}}],["5000",{"_index":481,"title":{},"body":{"interfaces/AnimationPreset.html":{},"miscellaneous/variables.html":{}}}],["50000",{"_index":741,"title":{},"body":{"classes/ColorOptions.html":{}}}],["50c2584",{"_index":3518,"title":{},"body":{"changelog.html":{}}}],["50fc5f7",{"_index":3393,"title":{},"body":{"changelog.html":{}}}],["5139c6e",{"_index":3630,"title":{},"body":{"changelog.html":{}}}],["5264.228603228927",{"_index":3857,"title":{},"body":{"miscellaneous/variables.html":{}}}],["5283e9a",{"_index":3688,"title":{},"body":{"changelog.html":{}}}],["5334996",{"_index":3389,"title":{},"body":{"changelog.html":{}}}],["5389282",{"_index":3548,"title":{},"body":{"changelog.html":{}}}],["545c956",{"_index":3292,"title":{},"body":{"changelog.html":{}}}],["5518a3e",{"_index":3242,"title":{},"body":{"changelog.html":{}}}],["5534.140362338047",{"_index":3869,"title":{},"body":{"miscellaneous/variables.html":{}}}],["55cad7c",{"_index":3321,"title":{},"body":{"changelog.html":{}}}],["5628.5248735111745",{"_index":3874,"title":{},"body":{"miscellaneous/variables.html":{}}}],["56c6eff",{"_index":3447,"title":{},"body":{"changelog.html":{}}}],["56f94f0",{"_index":3528,"title":{},"body":{"changelog.html":{}}}],["56ff275",{"_index":3561,"title":{},"body":{"changelog.html":{}}}],["5743adc",{"_index":3557,"title":{},"body":{"changelog.html":{}}}],["57e438f",{"_index":3526,"title":{},"body":{"changelog.html":{}}}],["58/58",{"_index":3717,"title":{},"body":{"coverage.html":{}}}],["5894cac",{"_index":3399,"title":{},"body":{"changelog.html":{}}}],["5928.901341784575",{"_index":3880,"title":{},"body":{"miscellaneous/variables.html":{}}}],["595d9e5",{"_index":3469,"title":{},"body":{"changelog.html":{}}}],["5a562ab",{"_index":3524,"title":{},"body":{"changelog.html":{}}}],["5a8fe9f",{"_index":3482,"title":{},"body":{"changelog.html":{}}}],["5bdc562",{"_index":3488,"title":{},"body":{"changelog.html":{}}}],["5ea04f1",{"_index":3587,"title":{},"body":{"changelog.html":{}}}],["5f0f942",{"_index":3673,"title":{},"body":{"changelog.html":{}}}],["6",{"_index":354,"title":{},"body":{"interfaces/AnimationPreset.html":{},"classes/Field.html":{},"classes/RungeKutta.html":{},"classes/State.html":{}}}],["6/6",{"_index":3719,"title":{},"body":{"coverage.html":{}}}],["6000",{"_index":3884,"title":{},"body":{"miscellaneous/variables.html":{}}}],["60269f7",{"_index":3618,"title":{},"body":{"changelog.html":{}}}],["6062.586283740076",{"_index":3875,"title":{},"body":{"miscellaneous/variables.html":{}}}],["6085f50",{"_index":3444,"title":{},"body":{"changelog.html":{}}}],["608f529",{"_index":3326,"title":{},"body":{"changelog.html":{}}}],["612205c",{"_index":3706,"title":{},"body":{"changelog.html":{}}}],["62ae417",{"_index":3378,"title":{},"body":{"changelog.html":{}}}],["62bf178",{"_index":3252,"title":{},"body":{"changelog.html":{}}}],["646.5795158318147",{"_index":3873,"title":{},"body":{"miscellaneous/variables.html":{}}}],["6486982",{"_index":3549,"title":{},"body":{"changelog.html":{}}}],["65e657b",{"_index":3255,"title":{},"body":{"changelog.html":{}}}],["66388.95051168812",{"_index":3856,"title":{},"body":{"miscellaneous/variables.html":{}}}],["66cbbc0",{"_index":3507,"title":{},"body":{"changelog.html":{}}}],["677.7571205763458",{"_index":3860,"title":{},"body":{"miscellaneous/variables.html":{}}}],["68/68",{"_index":3763,"title":{},"body":{"coverage.html":{}}}],["689da29",{"_index":3417,"title":{},"body":{"changelog.html":{}}}],["68cd7ad",{"_index":3550,"title":{},"body":{"changelog.html":{}}}],["68f3d45",{"_index":3459,"title":{},"body":{"changelog.html":{}}}],["6943f79",{"_index":3638,"title":{},"body":{"changelog.html":{}}}],["69544e6",{"_index":3229,"title":{},"body":{"changelog.html":{}}}],["69d3f75",{"_index":3670,"title":{},"body":{"changelog.html":{}}}],["6a7e82f",{"_index":3308,"title":{},"body":{"changelog.html":{}}}],["6a834e8",{"_index":3510,"title":{},"body":{"changelog.html":{}}}],["6ace2f6",{"_index":3248,"title":{},"body":{"changelog.html":{}}}],["6c92e33",{"_index":3230,"title":{},"body":{"changelog.html":{}}}],["6cd5d53",{"_index":3455,"title":{},"body":{"changelog.html":{}}}],["6dbd797",{"_index":3426,"title":{},"body":{"changelog.html":{}}}],["6e919e1",{"_index":3450,"title":{},"body":{"changelog.html":{}}}],["6ef17d0",{"_index":3529,"title":{},"body":{"changelog.html":{}}}],["7",{"_index":3241,"title":{},"body":{"changelog.html":{}}}],["7.21.5",{"_index":3775,"title":{},"body":{"dependencies.html":{}}}],["7.3.1",{"_index":3780,"title":{},"body":{"dependencies.html":{}}}],["7/7",{"_index":3726,"title":{},"body":{"coverage.html":{}}}],["717304e",{"_index":3377,"title":{},"body":{"changelog.html":{}}}],["73b7c27",{"_index":3683,"title":{},"body":{"changelog.html":{}}}],["7528ee0",{"_index":3511,"title":{},"body":{"changelog.html":{}}}],["75f829a",{"_index":3323,"title":{},"body":{"changelog.html":{}}}],["7632a18",{"_index":3534,"title":{},"body":{"changelog.html":{}}}],["789da8b",{"_index":3637,"title":{},"body":{"changelog.html":{}}}],["790.5876682946184",{"_index":3876,"title":{},"body":{"miscellaneous/variables.html":{}}}],["79e6d7c",{"_index":3617,"title":{},"body":{"changelog.html":{}}}],["7a42b65",{"_index":3288,"title":{},"body":{"changelog.html":{}}}],["7b839e3",{"_index":3381,"title":{},"body":{"changelog.html":{}}}],["7bcd7ba",{"_index":3576,"title":{},"body":{"changelog.html":{}}}],["7d1ca22",{"_index":3709,"title":{},"body":{"changelog.html":{}}}],["7d2eb64",{"_index":3473,"title":{},"body":{"changelog.html":{}}}],["7d606b2",{"_index":3639,"title":{},"body":{"changelog.html":{}}}],["7d90d72",{"_index":3521,"title":{},"body":{"changelog.html":{}}}],["7e0870b",{"_index":3253,"title":{},"body":{"changelog.html":{}}}],["7e36462",{"_index":3264,"title":{},"body":{"changelog.html":{}}}],["7e9c733",{"_index":3351,"title":{},"body":{"changelog.html":{}}}],["7f35fdb",{"_index":3345,"title":{},"body":{"changelog.html":{}}}],["8",{"_index":451,"title":{},"body":{"interfaces/AnimationPreset.html":{},"classes/Field.html":{},"classes/RungeKutta.html":{},"classes/State.html":{}}}],["8/8",{"_index":3742,"title":{},"body":{"coverage.html":{}}}],["854e543",{"_index":3535,"title":{},"body":{"changelog.html":{}}}],["8559830",{"_index":3478,"title":{},"body":{"changelog.html":{}}}],["85d4a14",{"_index":3530,"title":{},"body":{"changelog.html":{}}}],["867d28a",{"_index":3369,"title":{},"body":{"changelog.html":{}}}],["872f708",{"_index":3471,"title":{},"body":{"changelog.html":{}}}],["8a0c0b1",{"_index":3446,"title":{},"body":{"changelog.html":{}}}],["8b994a7",{"_index":3429,"title":{},"body":{"changelog.html":{}}}],["8ba94e7",{"_index":3631,"title":{},"body":{"changelog.html":{}}}],["8cbcaa5",{"_index":3568,"title":{},"body":{"changelog.html":{}}}],["8d7b160",{"_index":3608,"title":{},"body":{"changelog.html":{}}}],["8e2eff4",{"_index":3563,"title":{},"body":{"changelog.html":{}}}],["8e7396f",{"_index":3406,"title":{},"body":{"changelog.html":{}}}],["8f3e8e1",{"_index":3649,"title":{},"body":{"changelog.html":{}}}],["9/9",{"_index":3732,"title":{},"body":{"coverage.html":{}}}],["90aea3c",{"_index":3454,"title":{},"body":{"changelog.html":{}}}],["9222e04",{"_index":3470,"title":{},"body":{"changelog.html":{}}}],["9276ef9",{"_index":3261,"title":{},"body":{"changelog.html":{}}}],["9474565",{"_index":3674,"title":{},"body":{"changelog.html":{}}}],["947f6bf",{"_index":3667,"title":{},"body":{"changelog.html":{}}}],["9540af5",{"_index":3579,"title":{},"body":{"changelog.html":{}}}],["98c7055",{"_index":3337,"title":{},"body":{"changelog.html":{}}}],["9908cc9",{"_index":3462,"title":{},"body":{"changelog.html":{}}}],["9a6c243",{"_index":3367,"title":{},"body":{"changelog.html":{}}}],["9a79692",{"_index":3477,"title":{},"body":{"changelog.html":{}}}],["9a88331",{"_index":3363,"title":{},"body":{"changelog.html":{}}}],["9bc48e0",{"_index":3270,"title":{},"body":{"changelog.html":{}}}],["9d109e5",{"_index":3293,"title":{},"body":{"changelog.html":{}}}],["9e3dc20",{"_index":3708,"title":{},"body":{"changelog.html":{}}}],["9eb21f5",{"_index":3693,"title":{},"body":{"changelog.html":{}}}],["9efd9ca",{"_index":3698,"title":{},"body":{"changelog.html":{}}}],["9f4cf7c",{"_index":3353,"title":{},"body":{"changelog.html":{}}}],["9ffb5e2",{"_index":3198,"title":{},"body":{"changelog.html":{}}}],["_attributes",{"_index":2483,"title":{},"body":{"classes/TracksMaterial.html":{},"classes/TracksMesh.html":{}}}],["_menusubfolder",{"_index":1089,"title":{},"body":{"classes/DatGUIMenuUI.html":{}}}],["a411631",{"_index":3457,"title":{},"body":{"changelog.html":{}}}],["a474af2",{"_index":3586,"title":{},"body":{"changelog.html":{}}}],["a4e8aaa",{"_index":3283,"title":{},"body":{"changelog.html":{}}}],["a5481e1",{"_index":3411,"title":{},"body":{"changelog.html":{}}}],["a54d302",{"_index":3243,"title":{},"body":{"changelog.html":{}}}],["a5eaa34",{"_index":3373,"title":{},"body":{"changelog.html":{}}}],["a6a1c19",{"_index":3643,"title":{},"body":{"changelog.html":{}}}],["a821e42",{"_index":3380,"title":{},"body":{"changelog.html":{}}}],["a8336ae",{"_index":3273,"title":{},"body":{"changelog.html":{}}}],["a8a8a8",{"_index":1254,"title":{},"body":{"classes/DatGUIMenuUI.html":{},"classes/PhoenixMenuUI.html":{}}}],["a8f8353",{"_index":3570,"title":{},"body":{"changelog.html":{}}}],["aaed8f5",{"_index":3281,"title":{},"body":{"changelog.html":{}}}],["ab8feb4",{"_index":3652,"title":{},"body":{"changelog.html":{}}}],["ability",{"_index":3091,"title":{},"body":{"interfaces/Window.html":{},"changelog.html":{}}}],["above",{"_index":2756,"title":{},"body":{"classes/URLOptionsManager.html":{}}}],["absolute",{"_index":1122,"title":{},"body":{"classes/DatGUIMenuUI.html":{}}}],["ac0c4f1",{"_index":3574,"title":{},"body":{"changelog.html":{}}}],["acc",{"_index":1665,"title":{},"body":{"classes/LoadingManager.html":{}}}],["access",{"_index":3074,"title":{},"body":{"interfaces/Window.html":{}}}],["active",{"_index":93,"title":{},"body":{"classes/ARManager.html":{},"classes/ActiveVariable.html":{},"interfaces/AnimationPreset.html":{},"classes/Cut.html":{},"classes/PhoenixMenuNode.html":{},"classes/StateManager.html":{},"classes/VRManager.html":{},"classes/XRManager.html":{},"changelog.html":{}}}],["activecamera",{"_index":259,"title":{},"body":{"interfaces/AnimationPreset.html":{},"classes/StateManager.html":{}}}],["activeobject",{"_index":2235,"title":{},"body":{"classes/SelectionManager.html":{}}}],["activevariable",{"_index":188,"title":{"classes/ActiveVariable.html":{}},"body":{"classes/ActiveVariable.html":{},"classes/SelectionManager.html":{},"classes/StateManager.html":{},"interfaces/Window.html":{},"coverage.html":{}}}],["activevariable(0",{"_index":2415,"title":{},"body":{"classes/StateManager.html":{}}}],["activevariable(false",{"_index":2410,"title":{},"body":{"classes/StateManager.html":{}}}],["actual",{"_index":351,"title":{},"body":{"interfaces/AnimationPreset.html":{},"classes/PhoenixMenuUI.html":{}}}],["add",{"_index":708,"title":{},"body":{"classes/ColorOptions.html":{},"classes/DatGUIMenuUI.html":{},"interfaces/EventDataLoader.html":{},"classes/InfoLogger.html":{},"classes/LoadingManager.html":{},"classes/PhoenixMenuNode.html":{},"classes/PhoenixMenuUI.html":{},"interfaces/PhoenixUI.html":{},"classes/PrettySymbols.html":{},"classes/RendererManager.html":{},"classes/ScriptLoader.html":{},"classes/SelectionManager.html":{},"classes/StateManager.html":{},"classes/TracksMaterial.html":{},"classes/TracksMesh.html":{},"interfaces/Window.html":{},"changelog.html":{},"index.html":{}}}],["add('could",{"_index":2719,"title":{},"body":{"classes/URLOptionsManager.html":{}}}],["add(data",{"_index":1603,"title":{},"body":{"classes/InfoLogger.html":{}}}],["add(k1.clone().multiplyscalar(h2",{"_index":1530,"title":{},"body":{"classes/Field.html":{},"classes/RungeKutta.html":{},"classes/State.html":{}}}],["add(k1.clone().multiplyscalar(half_h",{"_index":1533,"title":{},"body":{"classes/Field.html":{},"classes/RungeKutta.html":{},"classes/State.html":{}}}],["add(k2",{"_index":1563,"title":{},"body":{"classes/Field.html":{},"classes/RungeKutta.html":{},"classes/State.html":{}}}],["add(k2.clone().multiplyscalar(2",{"_index":1567,"title":{},"body":{"classes/Field.html":{},"classes/RungeKutta.html":{},"classes/State.html":{}}}],["add(k2.clone().multiplyscalar(half_h",{"_index":1537,"title":{},"body":{"classes/Field.html":{},"classes/RungeKutta.html":{},"classes/State.html":{}}}],["add(k3",{"_index":1564,"title":{},"body":{"classes/Field.html":{},"classes/RungeKutta.html":{},"classes/State.html":{}}}],["add(k3.clone().multiplyscalar(2",{"_index":1568,"title":{},"body":{"classes/Field.html":{},"classes/RungeKutta.html":{},"classes/State.html":{}}}],["add(k3.clone().multiplyscalar(h",{"_index":1543,"title":{},"body":{"classes/Field.html":{},"classes/RungeKutta.html":{},"classes/State.html":{}}}],["add(k3.clone().multiplyscalar(h2",{"_index":1540,"title":{},"body":{"classes/Field.html":{},"classes/RungeKutta.html":{},"classes/State.html":{}}}],["add(k4",{"_index":1569,"title":{},"body":{"classes/Field.html":{},"classes/RungeKutta.html":{},"classes/State.html":{}}}],["add(state.dir.clone().multiplyscalar(h",{"_index":1539,"title":{},"body":{"classes/Field.html":{},"classes/RungeKutta.html":{},"classes/State.html":{}}}],["add(state.dir.clone().multiplyscalar(half_h",{"_index":1529,"title":{},"body":{"classes/Field.html":{},"classes/RungeKutta.html":{},"classes/State.html":{}}}],["add(this.guiparameters.eventdata",{"_index":1205,"title":{},"body":{"classes/DatGUIMenuUI.html":{}}}],["add(this.guiparameters.geometries",{"_index":1140,"title":{},"body":{"classes/DatGUIMenuUI.html":{}}}],["add(this.guiparameters.labels",{"_index":1257,"title":{},"body":{"classes/DatGUIMenuUI.html":{}}}],["add(this.guiparameters[collectionname",{"_index":1226,"title":{},"body":{"classes/DatGUIMenuUI.html":{}}}],["add(this.guiparameters[labelid",{"_index":1271,"title":{},"body":{"classes/DatGUIMenuUI.html":{}}}],["add(this.guiparameters[name",{"_index":1167,"title":{},"body":{"classes/DatGUIMenuUI.html":{}}}],["addchild",{"_index":1687,"title":{},"body":{"classes/PhoenixMenuNode.html":{}}}],["addchild(name",{"_index":1713,"title":{},"body":{"classes/PhoenixMenuNode.html":{}}}],["addcollection",{"_index":1046,"title":{},"body":{"classes/DatGUIMenuUI.html":{},"classes/PhoenixMenuUI.html":{},"interfaces/PhoenixUI.html":{}}}],["addcollection(eventdatatype",{"_index":1075,"title":{},"body":{"classes/DatGUIMenuUI.html":{},"classes/PhoenixMenuUI.html":{},"interfaces/PhoenixUI.html":{}}}],["addcolor(this.guiparameters.labels",{"_index":1262,"title":{},"body":{"classes/DatGUIMenuUI.html":{}}}],["addcolor(this.guiparameters[collectionname",{"_index":1230,"title":{},"body":{"classes/DatGUIMenuUI.html":{}}}],["addcolor(this.guiparameters[labelid",{"_index":1277,"title":{},"body":{"classes/DatGUIMenuUI.html":{}}}],["addcolor(this.guiparameters[name",{"_index":1163,"title":{},"body":{"classes/DatGUIMenuUI.html":{}}}],["addconfig",{"_index":1688,"title":{},"body":{"classes/PhoenixMenuNode.html":{}}}],["addconfig('button",{"_index":1887,"title":{},"body":{"classes/PhoenixMenuUI.html":{},"classes/StateManager.html":{}}}],["addconfig('checkbox",{"_index":1866,"title":{},"body":{"classes/PhoenixMenuUI.html":{}}}],["addconfig('color",{"_index":1884,"title":{},"body":{"classes/PhoenixMenuUI.html":{}}}],["addconfig('label",{"_index":1909,"title":{},"body":{"classes/PhoenixMenuUI.html":{}}}],["addconfig('slider",{"_index":1868,"title":{},"body":{"classes/PhoenixMenuUI.html":{}}}],["addconfig(type",{"_index":1715,"title":{},"body":{"classes/PhoenixMenuNode.html":{}}}],["addcutoptions",{"_index":1836,"title":{},"body":{"classes/PhoenixMenuUI.html":{}}}],["addcutoptions(collectionnode",{"_index":1844,"title":{},"body":{"classes/PhoenixMenuUI.html":{}}}],["adddrawoptions",{"_index":1837,"title":{},"body":{"classes/PhoenixMenuUI.html":{}}}],["adddrawoptions(collectionnode",{"_index":1847,"title":{},"body":{"classes/PhoenixMenuUI.html":{}}}],["added",{"_index":1080,"title":{},"body":{"classes/DatGUIMenuUI.html":{},"classes/LoadingManager.html":{},"classes/PhoenixMenuUI.html":{},"interfaces/PhoenixUI.html":{},"classes/RendererManager.html":{},"interfaces/Window.html":{}}}],["addeventdatafolder",{"_index":1047,"title":{},"body":{"classes/DatGUIMenuUI.html":{},"classes/PhoenixMenuUI.html":{},"interfaces/PhoenixUI.html":{}}}],["addeventdatatypefolder",{"_index":1048,"title":{},"body":{"classes/DatGUIMenuUI.html":{},"classes/PhoenixMenuUI.html":{},"interfaces/PhoenixUI.html":{}}}],["addeventdatatypefolder(typename",{"_index":1085,"title":{},"body":{"classes/DatGUIMenuUI.html":{},"classes/PhoenixMenuUI.html":{},"interfaces/PhoenixUI.html":{}}}],["addeventlistener('click",{"_index":2316,"title":{},"body":{"classes/SelectionManager.html":{}}}],["addeventlistener('mousemove",{"_index":2314,"title":{},"body":{"classes/SelectionManager.html":{}}}],["addeventlistener('touchstart",{"_index":2318,"title":{},"body":{"classes/SelectionManager.html":{}}}],["addface3",{"_index":566,"title":{},"body":{"classes/CMSObjects.html":{}}}],["addface3('back_1",{"_index":579,"title":{},"body":{"classes/CMSObjects.html":{}}}],["addface3('back_3",{"_index":582,"title":{},"body":{"classes/CMSObjects.html":{}}}],["addface3('back_4",{"_index":587,"title":{},"body":{"classes/CMSObjects.html":{}}}],["addface3('front_1",{"_index":572,"title":{},"body":{"classes/CMSObjects.html":{}}}],["addface3('front_2",{"_index":585,"title":{},"body":{"classes/CMSObjects.html":{}}}],["addface3('front_3",{"_index":575,"title":{},"body":{"classes/CMSObjects.html":{}}}],["addgeometry",{"_index":1049,"title":{},"body":{"classes/DatGUIMenuUI.html":{},"classes/PhoenixMenuUI.html":{},"interfaces/PhoenixUI.html":{}}}],["addgeometry(object",{"_index":1088,"title":{},"body":{"classes/DatGUIMenuUI.html":{},"classes/PhoenixMenuUI.html":{},"interfaces/PhoenixUI.html":{}}}],["addgeometryfolder",{"_index":1050,"title":{},"body":{"classes/DatGUIMenuUI.html":{},"classes/PhoenixMenuUI.html":{},"interfaces/PhoenixUI.html":{}}}],["adding",{"_index":125,"title":{},"body":{"classes/ARManager.html":{},"interfaces/EventDataLoader.html":{},"classes/VRManager.html":{},"interfaces/Window.html":{},"classes/XRManager.html":{},"changelog.html":{},"miscellaneous/typealiases.html":{}}}],["addlabel",{"_index":1051,"title":{},"body":{"classes/DatGUIMenuUI.html":{},"classes/PhoenixMenuUI.html":{},"interfaces/PhoenixUI.html":{}}}],["addlabel(labelid",{"_index":1095,"title":{},"body":{"classes/DatGUIMenuUI.html":{},"classes/PhoenixMenuUI.html":{},"interfaces/PhoenixUI.html":{}}}],["addlabelsfolder",{"_index":1052,"title":{},"body":{"classes/DatGUIMenuUI.html":{},"classes/PhoenixMenuUI.html":{},"interfaces/PhoenixUI.html":{}}}],["addlabelsfolder(configfunctions",{"_index":1102,"title":{},"body":{"classes/DatGUIMenuUI.html":{},"classes/PhoenixMenuUI.html":{},"interfaces/PhoenixUI.html":{}}}],["addlabeltoeventobject",{"_index":1372,"title":{},"body":{"interfaces/EventDataLoader.html":{}}}],["addlabeltoeventobject(label",{"_index":1379,"title":{},"body":{"interfaces/EventDataLoader.html":{}}}],["addlabeltoobject",{"_index":3112,"title":{},"body":{"interfaces/Window.html":{}}}],["addloadableitem",{"_index":1622,"title":{},"body":{"classes/LoadingManager.html":{}}}],["addloadableitem(id",{"_index":1634,"title":{},"body":{"classes/LoadingManager.html":{}}}],["addloadlistener",{"_index":1623,"title":{},"body":{"classes/LoadingManager.html":{}}}],["addloadlistener(callback",{"_index":1636,"title":{},"body":{"classes/LoadingManager.html":{}}}],["addloadlistenerwithcheck",{"_index":1624,"title":{},"body":{"classes/LoadingManager.html":{}}}],["addloadlistenerwithcheck(callback",{"_index":1639,"title":{},"body":{"classes/LoadingManager.html":{}}}],["addoutlinepassforselection",{"_index":1302,"title":{},"body":{"classes/EffectsManager.html":{}}}],["addprogresslistener",{"_index":1625,"title":{},"body":{"classes/LoadingManager.html":{}}}],["addprogresslistener(callback",{"_index":1641,"title":{},"body":{"classes/LoadingManager.html":{}}}],["addrenderer",{"_index":2086,"title":{},"body":{"classes/RendererManager.html":{}}}],["addrenderer(renderer",{"_index":2108,"title":{},"body":{"classes/RendererManager.html":{}}}],["adds",{"_index":2967,"title":{},"body":{"interfaces/Window.html":{}}}],["addtrack",{"_index":2616,"title":{},"body":{"classes/TracksMesh.html":{}}}],["addtrack(points",{"_index":2497,"title":{},"body":{"classes/TracksMaterial.html":{},"classes/TracksMesh.html":{}}}],["ae76d4a",{"_index":3396,"title":{},"body":{"changelog.html":{}}}],["again",{"_index":379,"title":{},"body":{"interfaces/AnimationPreset.html":{},"changelog.html":{}}}],["against",{"_index":645,"title":{},"body":{"classes/ColorManager.html":{}}}],["aliases",{"_index":3832,"title":{},"body":{"miscellaneous/typealiases.html":{}}}],["allcolorbyoptions",{"_index":685,"title":{},"body":{"classes/ColorOptions.html":{}}}],["alleventdata",{"_index":448,"title":{},"body":{"interfaces/AnimationPreset.html":{}}}],["alleventdata.getobjectbyname('track",{"_index":507,"title":{},"body":{"interfaces/AnimationPreset.html":{}}}],["alleventdata.traverse((eventobject",{"_index":471,"title":{},"body":{"interfaces/AnimationPreset.html":{}}}],["alleventdata.visible",{"_index":514,"title":{},"body":{"interfaces/AnimationPreset.html":{}}}],["alleventsobject",{"_index":2733,"title":{},"body":{"classes/URLOptionsManager.html":{}}}],["allfacepositions",{"_index":565,"title":{},"body":{"classes/CMSObjects.html":{}}}],["allfacepositions.concat",{"_index":568,"title":{},"body":{"classes/CMSObjects.html":{}}}],["allgeometriesuiparameters",{"_index":3009,"title":{},"body":{"interfaces/Window.html":{}}}],["allow",{"_index":865,"title":{},"body":{"interfaces/Configuration.html":{},"interfaces/Window.html":{},"changelog.html":{}}}],["allowcustomvalue",{"_index":833,"title":{},"body":{"classes/ColorOptions.html":{},"classes/PhoenixMenuUI.html":{}}}],["allowed",{"_index":996,"title":{},"body":{"classes/Cut.html":{}}}],["allowing",{"_index":1430,"title":{},"body":{"classes/ExportManager.html":{},"interfaces/Window.html":{},"changelog.html":{}}}],["allows",{"_index":1956,"title":{},"body":{"classes/PresetView.html":{}}}],["allowselection(selectedobject",{"_index":3089,"title":{},"body":{"interfaces/Window.html":{}}}],["allowurloptions",{"_index":855,"title":{},"body":{"interfaces/Configuration.html":{}}}],["alltweens",{"_index":331,"title":{},"body":{"interfaces/AnimationPreset.html":{}}}],["alltweens.push(animationspheretween",{"_index":430,"title":{},"body":{"interfaces/AnimationPreset.html":{}}}],["alltweens.push(eventobjecttween",{"_index":359,"title":{},"body":{"interfaces/AnimationPreset.html":{}}}],["alltweens.push(scaletween",{"_index":383,"title":{},"body":{"interfaces/AnimationPreset.html":{}}}],["alltweens.push(tween",{"_index":461,"title":{},"body":{"interfaces/AnimationPreset.html":{}}}],["alltweens[0].onstart",{"_index":431,"title":{},"body":{"interfaces/AnimationPreset.html":{}}}],["alltweens[alltweens.length",{"_index":463,"title":{},"body":{"interfaces/AnimationPreset.html":{}}}],["along",{"_index":291,"title":{},"body":{"interfaces/AnimationPreset.html":{},"classes/CMSObjects.html":{},"classes/DatGUIMenuUI.html":{},"index.html":{}}}],["alongaxisposition",{"_index":294,"title":{},"body":{"interfaces/AnimationPreset.html":{}}}],["alpha",{"_index":2145,"title":{},"body":{"classes/RendererManager.html":{}}}],["already",{"_index":1199,"title":{},"body":{"classes/DatGUIMenuUI.html":{},"classes/ScriptLoader.html":{}}}],["always",{"_index":3610,"title":{},"body":{"changelog.html":{}}}],["ambientlight",{"_index":2293,"title":{},"body":{"classes/SelectionManager.html":{}}}],["ambientlight().type",{"_index":2301,"title":{},"body":{"classes/SelectionManager.html":{}}}],["angle",{"_index":303,"title":{},"body":{"interfaces/AnimationPreset.html":{},"classes/CoordinateHelper.html":{},"classes/PresetView.html":{},"classes/StateManager.html":{},"changelog.html":{}}}],["angles",{"_index":910,"title":{},"body":{"classes/CoordinateHelper.html":{}}}],["anglesaresane",{"_index":900,"title":{},"body":{"classes/CoordinateHelper.html":{}}}],["anglesaresane(theta",{"_index":906,"title":{},"body":{"classes/CoordinateHelper.html":{}}}],["angular",{"_index":3215,"title":{},"body":{"changelog.html":{},"index.html":{}}}],["animate",{"_index":281,"title":{},"body":{"interfaces/AnimationPreset.html":{},"interfaces/Window.html":{},"changelog.html":{}}}],["animateclippingwithcollision",{"_index":520,"title":{},"body":{"interfaces/AnimationPreset.html":{},"interfaces/Window.html":{}}}],["animateevent",{"_index":321,"title":{},"body":{"interfaces/AnimationPreset.html":{}}}],["animateeventafterinterval",{"_index":225,"title":{},"body":{"interfaces/AnimationPreset.html":{},"miscellaneous/variables.html":{}}}],["animateeventwithclipping",{"_index":446,"title":{},"body":{"interfaces/AnimationPreset.html":{}}}],["animateeventwithcollision(tweenduration",{"_index":518,"title":{},"body":{"interfaces/AnimationPreset.html":{},"interfaces/Window.html":{}}}],["animatepreset(animationpreset",{"_index":3108,"title":{},"body":{"interfaces/Window.html":{}}}],["animatethroughevent",{"_index":287,"title":{},"body":{"interfaces/AnimationPreset.html":{},"interfaces/Window.html":{}}}],["animatewithcollision",{"_index":505,"title":{},"body":{"interfaces/AnimationPreset.html":{}}}],["animating",{"_index":266,"title":{},"body":{"interfaces/AnimationPreset.html":{},"interfaces/Window.html":{}}}],["animation",{"_index":223,"title":{},"body":{"interfaces/AnimationPreset.html":{},"classes/RendererManager.html":{},"interfaces/Window.html":{},"changelog.html":{},"miscellaneous/variables.html":{}}}],["animationclipplane",{"_index":458,"title":{},"body":{"interfaces/AnimationPreset.html":{}}}],["animationclipplane.constant",{"_index":459,"title":{},"body":{"interfaces/AnimationPreset.html":{}}}],["animationclipplanes",{"_index":452,"title":{},"body":{"interfaces/AnimationPreset.html":{}}}],["animationfunction",{"_index":504,"title":{},"body":{"interfaces/AnimationPreset.html":{}}}],["animationfunction(tweenduration",{"_index":517,"title":{},"body":{"interfaces/AnimationPreset.html":{}}}],["animationpreset",{"_index":220,"title":{"interfaces/AnimationPreset.html":{}},"body":{"interfaces/AnimationPreset.html":{},"interfaces/Configuration.html":{},"interfaces/Window.html":{},"coverage.html":{},"miscellaneous/variables.html":{}}}],["animations",{"_index":317,"title":{},"body":{"interfaces/AnimationPreset.html":{},"interfaces/Configuration.html":{},"interfaces/Window.html":{},"changelog.html":{}}}],["animationsmanager",{"_index":256,"title":{},"body":{"interfaces/AnimationPreset.html":{},"coverage.html":{}}}],["animationsphere",{"_index":327,"title":{},"body":{"interfaces/AnimationPreset.html":{}}}],["animationspheretween",{"_index":403,"title":{},"body":{"interfaces/AnimationPreset.html":{}}}],["animationspheretween.chain(animationspheretweenclone",{"_index":429,"title":{},"body":{"interfaces/AnimationPreset.html":{}}}],["animationspheretween.onupdate(onanimationsphereupdate",{"_index":424,"title":{},"body":{"interfaces/AnimationPreset.html":{}}}],["animationspheretweenclone",{"_index":426,"title":{},"body":{"interfaces/AnimationPreset.html":{}}}],["animationspheretweenclone.oncomplete",{"_index":435,"title":{},"body":{"interfaces/AnimationPreset.html":{}}}],["animationspheretweenclone.onupdate(onanimationsphereupdate",{"_index":428,"title":{},"body":{"interfaces/AnimationPreset.html":{}}}],["another",{"_index":3702,"title":{},"body":{"changelog.html":{}}}],["antialias",{"_index":1322,"title":{},"body":{"classes/EffectsManager.html":{},"classes/RendererManager.html":{},"changelog.html":{}}}],["antialiasing",{"_index":1298,"title":{},"body":{"classes/EffectsManager.html":{},"changelog.html":{}}}],["antialiasrender",{"_index":1303,"title":{},"body":{"classes/EffectsManager.html":{}}}],["antialiasrender(scene",{"_index":1329,"title":{},"body":{"classes/EffectsManager.html":{}}}],["any).geometry",{"_index":411,"title":{},"body":{"interfaces/AnimationPreset.html":{}}}],["any)?.material.color",{"_index":511,"title":{},"body":{"interfaces/AnimationPreset.html":{}}}],["any)?.material?.color",{"_index":510,"title":{},"body":{"interfaces/AnimationPreset.html":{}}}],["any)?.xr",{"_index":3136,"title":{},"body":{"classes/XRManager.html":{}}}],["apache",{"_index":3825,"title":{},"body":{"properties.html":{}}}],["api",{"_index":3791,"title":{},"body":{"index.html":{},"properties.html":{}}}],["app",{"_index":3226,"title":{},"body":{"changelog.html":{}}}],["appended",{"_index":2207,"title":{},"body":{"classes/ScriptLoader.html":{}}}],["appled",{"_index":999,"title":{},"body":{"classes/Cut.html":{}}}],["application",{"_index":3795,"title":{},"body":{"index.html":{}}}],["application/json",{"_index":3900,"title":{},"body":{"miscellaneous/variables.html":{}}}],["applied",{"_index":470,"title":{},"body":{"interfaces/AnimationPreset.html":{},"classes/Cut.html":{},"classes/PhoenixMenuNode.html":{},"changelog.html":{}}}],["applies",{"_index":929,"title":{},"body":{"classes/CoordinateHelper.html":{}}}],["apply",{"_index":717,"title":{},"body":{"classes/ColorOptions.html":{},"classes/PhoenixMenuNode.html":{},"classes/URLOptionsManager.html":{},"interfaces/Window.html":{},"changelog.html":{}}}],["applychargecoloroptions",{"_index":691,"title":{},"body":{"classes/ColorOptions.html":{}}}],["applyconfigstate",{"_index":1689,"title":{},"body":{"classes/PhoenixMenuNode.html":{}}}],["applyconfigstate(config",{"_index":1719,"title":{},"body":{"classes/PhoenixMenuNode.html":{}}}],["applyembedoption",{"_index":2632,"title":{},"body":{"classes/URLOptionsManager.html":{}}}],["applyeventoptions",{"_index":2633,"title":{},"body":{"classes/URLOptionsManager.html":{}}}],["applyeventoptions(defaulteventpath",{"_index":2648,"title":{},"body":{"classes/URLOptionsManager.html":{}}}],["applyhidewidgetsoptions",{"_index":2634,"title":{},"body":{"classes/URLOptionsManager.html":{}}}],["applying",{"_index":3647,"title":{},"body":{"changelog.html":{}}}],["applymomcoloroptions",{"_index":692,"title":{},"body":{"classes/ColorOptions.html":{}}}],["applyoptions",{"_index":2635,"title":{},"body":{"classes/URLOptionsManager.html":{}}}],["applyvertexcoloroptions",{"_index":693,"title":{},"body":{"classes/ColorOptions.html":{}}}],["ar",{"_index":10,"title":{},"body":{"classes/ARManager.html":{},"interfaces/Window.html":{},"classes/XRManager.html":{},"changelog.html":{},"miscellaneous/enumerations.html":{}}}],["archive",{"_index":3578,"title":{},"body":{"changelog.html":{},"miscellaneous/variables.html":{}}}],["archive.file(filepath).async('string",{"_index":3933,"title":{},"body":{"miscellaneous/variables.html":{}}}],["archive.files",{"_index":3932,"title":{},"body":{"miscellaneous/variables.html":{}}}],["archive.loadasync(file",{"_index":3930,"title":{},"body":{"miscellaneous/variables.html":{}}}],["argument",{"_index":3208,"title":{},"body":{"changelog.html":{}}}],["armanager",{"_index":1,"title":{"classes/ARManager.html":{}},"body":{"classes/ARManager.html":{},"changelog.html":{},"coverage.html":{}}}],["armanager.enabledomoverlay",{"_index":163,"title":{},"body":{"classes/ARManager.html":{}}}],["around",{"_index":2802,"title":{},"body":{"classes/VRManager.html":{}}}],["array",{"_index":523,"title":{},"body":{"interfaces/AnimationPreset.html":{},"classes/Field.html":{},"classes/RKHelper.html":{},"classes/RungeKutta.html":{},"classes/State.html":{},"classes/URLOptionsManager.html":{},"interfaces/Window.html":{}}}],["array.from",{"_index":391,"title":{},"body":{"interfaces/AnimationPreset.html":{}}}],["arraybuffer",{"_index":3007,"title":{},"body":{"interfaces/Window.html":{},"miscellaneous/variables.html":{}}}],["arraycamera",{"_index":3131,"title":{},"body":{"classes/XRManager.html":{}}}],["arraycamera([camera.clone",{"_index":3157,"title":{},"body":{"classes/XRManager.html":{}}}],["arrays",{"_index":2349,"title":{},"body":{"classes/SelectionManager.html":{}}}],["aspect",{"_index":2564,"title":{},"body":{"classes/TracksMaterial.html":{},"classes/TracksMesh.html":{}}}],["aspect.x",{"_index":2594,"title":{},"body":{"classes/TracksMaterial.html":{},"classes/TracksMesh.html":{}}}],["aspects",{"_index":2888,"title":{},"body":{"interfaces/Window.html":{}}}],["assets/preset",{"_index":1983,"title":{},"body":{"classes/PresetView.html":{}}}],["assign",{"_index":3621,"title":{},"body":{"changelog.html":{}}}],["associated",{"_index":650,"title":{},"body":{"classes/ColorManager.html":{},"classes/ColorOptions.html":{},"interfaces/EventDataLoader.html":{},"interfaces/Window.html":{}}}],["async",{"_index":35,"title":{},"body":{"classes/ARManager.html":{},"classes/URLOptionsManager.html":{},"classes/VRManager.html":{},"interfaces/Window.html":{},"classes/XRManager.html":{},"changelog.html":{},"miscellaneous/variables.html":{}}}],["atlas",{"_index":818,"title":{},"body":{"classes/ColorOptions.html":{},"classes/CoordinateHelper.html":{},"classes/RKHelper.html":{},"changelog.html":{}}}],["atlasquaternion",{"_index":901,"title":{},"body":{"classes/CoordinateHelper.html":{}}}],["attach",{"_index":1105,"title":{},"body":{"classes/DatGUIMenuUI.html":{},"classes/PhoenixMenuUI.html":{},"interfaces/PhoenixUI.html":{}}}],["attempt",{"_index":3415,"title":{},"body":{"changelog.html":{}}}],["attribute",{"_index":978,"title":{},"body":{"classes/Cut.html":{},"classes/ScriptLoader.html":{},"classes/TracksMaterial.html":{},"classes/TracksMesh.html":{},"changelog.html":{}}}],["attributename",{"_index":2342,"title":{},"body":{"classes/SelectionManager.html":{}}}],["attributes",{"_index":2297,"title":{},"body":{"classes/SelectionManager.html":{},"classes/TracksMaterial.html":{},"classes/TracksMesh.html":{},"interfaces/Window.html":{}}}],["attributevalue",{"_index":2343,"title":{},"body":{"classes/SelectionManager.html":{}}}],["author",{"_index":3828,"title":{},"body":{"properties.html":{}}}],["available",{"_index":733,"title":{},"body":{"classes/ColorOptions.html":{},"classes/RendererManager.html":{},"changelog.html":{},"miscellaneous/enumerations.html":{}}}],["available/created",{"_index":2107,"title":{},"body":{"classes/RendererManager.html":{}}}],["averageprogress",{"_index":1669,"title":{},"body":{"classes/LoadingManager.html":{}}}],["await",{"_index":176,"title":{},"body":{"classes/ARManager.html":{},"classes/URLOptionsManager.html":{},"interfaces/Window.html":{},"classes/XRManager.html":{},"changelog.html":{},"miscellaneous/variables.html":{}}}],["axes",{"_index":478,"title":{},"body":{"interfaces/AnimationPreset.html":{}}}],["axeshelper",{"_index":2294,"title":{},"body":{"classes/SelectionManager.html":{}}}],["axeshelper().type",{"_index":2303,"title":{},"body":{"classes/SelectionManager.html":{}}}],["axis",{"_index":293,"title":{},"body":{"interfaces/AnimationPreset.html":{},"classes/CoordinateHelper.html":{},"classes/DatGUIMenuUI.html":{}}}],["azimuthal",{"_index":915,"title":{},"body":{"classes/CoordinateHelper.html":{}}}],["b",{"_index":2144,"title":{},"body":{"classes/RendererManager.html":{}}}],["b10bb7a",{"_index":3520,"title":{},"body":{"changelog.html":{}}}],["b46c49f",{"_index":3695,"title":{},"body":{"changelog.html":{}}}],["b52282f",{"_index":3545,"title":{},"body":{"changelog.html":{}}}],["b7a324a",{"_index":3538,"title":{},"body":{"changelog.html":{}}}],["b7e8da0",{"_index":3622,"title":{},"body":{"changelog.html":{}}}],["b8e88b8",{"_index":3513,"title":{},"body":{"changelog.html":{}}}],["b_first",{"_index":1516,"title":{},"body":{"classes/Field.html":{},"classes/RungeKutta.html":{},"classes/State.html":{}}}],["b_last",{"_index":1511,"title":{},"body":{"classes/Field.html":{},"classes/RungeKutta.html":{},"classes/State.html":{}}}],["b_middle",{"_index":1510,"title":{},"body":{"classes/Field.html":{},"classes/RungeKutta.html":{},"classes/State.html":{}}}],["babel/core",{"_index":3774,"title":{},"body":{"dependencies.html":{}}}],["back",{"_index":578,"title":{},"body":{"classes/CMSObjects.html":{},"classes/PhoenixMenuNode.html":{},"changelog.html":{}}}],["back_1",{"_index":584,"title":{},"body":{"classes/CMSObjects.html":{}}}],["back_2",{"_index":580,"title":{},"body":{"classes/CMSObjects.html":{}}}],["back_3",{"_index":581,"title":{},"body":{"classes/CMSObjects.html":{}}}],["back_4",{"_index":583,"title":{},"body":{"classes/CMSObjects.html":{}}}],["background",{"_index":3370,"title":{},"body":{"changelog.html":{}}}],["based",{"_index":752,"title":{},"body":{"classes/ColorOptions.html":{},"classes/URLOptionsManager.html":{},"changelog.html":{},"properties.html":{}}}],["bb41683",{"_index":3387,"title":{},"body":{"changelog.html":{}}}],["bbcdf0c",{"_index":3542,"title":{},"body":{"changelog.html":{}}}],["bbea6b0",{"_index":3496,"title":{},"body":{"changelog.html":{}}}],["become",{"_index":142,"title":{},"body":{"classes/ARManager.html":{},"classes/VRManager.html":{},"classes/XRManager.html":{}}}],["before",{"_index":2265,"title":{},"body":{"classes/SelectionManager.html":{}}}],["being",{"_index":1608,"title":{},"body":{"classes/InfoLogger.html":{},"interfaces/Window.html":{},"changelog.html":{}}}],["better",{"_index":3407,"title":{},"body":{"changelog.html":{}}}],["bf98a24",{"_index":3333,"title":{},"body":{"changelog.html":{}}}],["big",{"_index":3689,"title":{},"body":{"changelog.html":{}}}],["bind",{"_index":3514,"title":{},"body":{"changelog.html":{}}}],["blob",{"_index":3919,"title":{},"body":{"miscellaneous/variables.html":{}}}],["blob([data",{"_index":3920,"title":{},"body":{"miscellaneous/variables.html":{}}}],["block",{"_index":2737,"title":{},"body":{"classes/URLOptionsManager.html":{}}}],["bloom",{"_index":1297,"title":{},"body":{"classes/EffectsManager.html":{},"classes/SelectionManager.html":{}}}],["boolean",{"_index":56,"title":{},"body":{"classes/ARManager.html":{},"classes/ColorManager.html":{},"classes/ColorOptions.html":{},"interfaces/Configuration.html":{},"classes/CoordinateHelper.html":{},"classes/Cut.html":{},"classes/DatGUIMenuUI.html":{},"classes/EffectsManager.html":{},"classes/Field.html":{},"classes/PhoenixMenuNode.html":{},"classes/PhoenixMenuUI.html":{},"classes/RKHelper.html":{},"classes/RendererManager.html":{},"classes/RungeKutta.html":{},"classes/SelectionManager.html":{},"classes/State.html":{},"classes/StateManager.html":{},"classes/TracksMaterial.html":{},"classes/TracksMesh.html":{},"classes/VRManager.html":{},"interfaces/Window.html":{},"classes/XRManager.html":{}}}],["both",{"_index":2694,"title":{},"body":{"classes/URLOptionsManager.html":{},"interfaces/Window.html":{}}}],["bottom",{"_index":586,"title":{},"body":{"classes/CMSObjects.html":{},"classes/URLOptionsManager.html":{}}}],["bound",{"_index":1004,"title":{},"body":{"classes/Cut.html":{}}}],["bounded",{"_index":2812,"title":{},"body":{"classes/VRManager.html":{}}}],["bounds",{"_index":1582,"title":{},"body":{"classes/Field.html":{},"classes/RKHelper.html":{},"classes/RungeKutta.html":{},"classes/State.html":{},"changelog.html":{}}}],["box",{"_index":604,"title":{},"body":{"classes/CMSObjects.html":{}}}],["boxbuffer",{"_index":590,"title":{},"body":{"classes/CMSObjects.html":{}}}],["boxbuffer.attributes.position",{"_index":591,"title":{},"body":{"classes/CMSObjects.html":{}}}],["boxbuffer.computevertexnormals",{"_index":593,"title":{},"body":{"classes/CMSObjects.html":{}}}],["boxedges",{"_index":606,"title":{},"body":{"classes/CMSObjects.html":{}}}],["boxobject",{"_index":594,"title":{},"body":{"classes/CMSObjects.html":{}}}],["boxobject.name",{"_index":601,"title":{},"body":{"classes/CMSObjects.html":{}}}],["boxobject.userdata",{"_index":599,"title":{},"body":{"classes/CMSObjects.html":{}}}],["boxobject.uuid",{"_index":614,"title":{},"body":{"classes/CMSObjects.html":{}}}],["browser",{"_index":3546,"title":{},"body":{"changelog.html":{}}}],["browsers",{"_index":2153,"title":{},"body":{"classes/RendererManager.html":{}}}],["bufferattribute",{"_index":248,"title":{},"body":{"interfaces/AnimationPreset.html":{},"classes/CMSObjects.html":{},"classes/TracksMaterial.html":{},"classes/TracksMesh.html":{}}}],["bufferattribute(new",{"_index":2514,"title":{},"body":{"classes/TracksMaterial.html":{},"classes/TracksMesh.html":{}}}],["bufferattribute).copyarray",{"_index":2524,"title":{},"body":{"classes/TracksMaterial.html":{},"classes/TracksMesh.html":{}}}],["buffergeometry",{"_index":241,"title":{},"body":{"interfaces/AnimationPreset.html":{},"classes/CMSObjects.html":{},"classes/DatGUIMenuUI.html":{},"classes/PhoenixMenuUI.html":{},"classes/TracksMaterial.html":{},"classes/TracksMesh.html":{},"classes/VRManager.html":{},"changelog.html":{}}}],["buffergeometry().setfrompoints",{"_index":2840,"title":{},"body":{"classes/VRManager.html":{}}}],["bug",{"_index":3176,"title":{},"body":{"changelog.html":{}}}],["bugged",{"_index":3697,"title":{},"body":{"changelog.html":{}}}],["build",{"_index":2353,"title":{},"body":{"classes/SelectionManager.html":{},"interfaces/Window.html":{},"index.html":{}}}],["build(obj",{"_index":3038,"title":{},"body":{"interfaces/Window.html":{}}}],["build(object",{"_index":3026,"title":{},"body":{"interfaces/Window.html":{}}}],["build:bundlethis",{"_index":3810,"title":{},"body":{"index.html":{}}}],["buildeventdata",{"_index":1373,"title":{},"body":{"interfaces/EventDataLoader.html":{}}}],["buildeventdata(eventdata",{"_index":1382,"title":{},"body":{"interfaces/EventDataLoader.html":{}}}],["buildeventdatafromjson(eventdata",{"_index":2946,"title":{},"body":{"interfaces/Window.html":{}}}],["buildgeometryfromparameters",{"_index":3080,"title":{},"body":{"interfaces/Window.html":{}}}],["buildgeometryfromparameters(parameters",{"_index":3041,"title":{},"body":{"interfaces/Window.html":{}}}],["building",{"_index":3814,"title":{},"body":{"index.html":{}}}],["builds",{"_index":2945,"title":{},"body":{"interfaces/Window.html":{}}}],["bump",{"_index":3185,"title":{},"body":{"changelog.html":{}}}],["bundle",{"_index":3307,"title":{},"body":{"changelog.html":{},"index.html":{}}}],["bundled",{"_index":3808,"title":{},"body":{"index.html":{}}}],["button",{"_index":2793,"title":{},"body":{"classes/VRManager.html":{},"miscellaneous/typealiases.html":{}}}],["buttons",{"_index":2432,"title":{},"body":{"classes/StateManager.html":{}}}],["c0af497",{"_index":3322,"title":{},"body":{"changelog.html":{}}}],["c1",{"_index":2850,"title":{},"body":{"classes/VRManager.html":{}}}],["c36a222",{"_index":3650,"title":{},"body":{"changelog.html":{}}}],["c39ecd3",{"_index":3662,"title":{},"body":{"changelog.html":{}}}],["c446567",{"_index":3474,"title":{},"body":{"changelog.html":{}}}],["c60b3c1",{"_index":3313,"title":{},"body":{"changelog.html":{}}}],["c7a35db",{"_index":3690,"title":{},"body":{"changelog.html":{}}}],["c897ab3",{"_index":3372,"title":{},"body":{"changelog.html":{}}}],["c91aa0e",{"_index":3280,"title":{},"body":{"changelog.html":{}}}],["c92d65f",{"_index":3431,"title":{},"body":{"changelog.html":{}}}],["c9781e5",{"_index":3502,"title":{},"body":{"changelog.html":{}}}],["c991e54",{"_index":3616,"title":{},"body":{"changelog.html":{}}}],["c9d4880",{"_index":3600,"title":{},"body":{"changelog.html":{}}}],["ca3cc2f",{"_index":3537,"title":{},"body":{"changelog.html":{}}}],["calculated",{"_index":819,"title":{},"body":{"classes/ColorOptions.html":{},"classes/Field.html":{},"classes/RungeKutta.html":{},"classes/State.html":{}}}],["calculation",{"_index":3425,"title":{},"body":{"changelog.html":{}}}],["call",{"_index":97,"title":{},"body":{"classes/ARManager.html":{},"classes/ActiveVariable.html":{},"interfaces/AnimationPreset.html":{},"classes/LoadingManager.html":{},"classes/SelectionManager.html":{},"classes/VRManager.html":{},"interfaces/Window.html":{},"classes/XRManager.html":{}}}],["callback",{"_index":96,"title":{},"body":{"classes/ARManager.html":{},"classes/ActiveVariable.html":{},"interfaces/AnimationPreset.html":{},"classes/LoadingManager.html":{},"classes/VRManager.html":{},"interfaces/Window.html":{},"classes/XRManager.html":{},"miscellaneous/typealiases.html":{}}}],["callback(averageprogress",{"_index":1671,"title":{},"body":{"classes/LoadingManager.html":{}}}],["callback(eventdata",{"_index":2955,"title":{},"body":{"interfaces/Window.html":{}}}],["callback(eventkeys",{"_index":2944,"title":{},"body":{"interfaces/Window.html":{}}}],["callback(updatedvalue",{"_index":217,"title":{},"body":{"classes/ActiveVariable.html":{}}}],["callbackfunction",{"_index":204,"title":{},"body":{"classes/ActiveVariable.html":{},"miscellaneous/typealiases.html":{}}}],["callbacks",{"_index":196,"title":{},"body":{"classes/ActiveVariable.html":{},"classes/LoadingManager.html":{},"interfaces/Window.html":{}}}],["called",{"_index":1100,"title":{},"body":{"classes/DatGUIMenuUI.html":{},"classes/PhoenixMenuUI.html":{},"interfaces/PhoenixUI.html":{},"interfaces/Window.html":{}}}],["calling",{"_index":1721,"title":{},"body":{"classes/PhoenixMenuNode.html":{},"interfaces/Window.html":{}}}],["calls",{"_index":3284,"title":{},"body":{"changelog.html":{}}}],["calo",{"_index":3199,"title":{},"body":{"changelog.html":{}}}],["calocluster",{"_index":3505,"title":{},"body":{"changelog.html":{}}}],["caloclusters",{"_index":3522,"title":{},"body":{"changelog.html":{},"miscellaneous/variables.html":{}}}],["camera",{"_index":45,"title":{},"body":{"classes/ARManager.html":{},"interfaces/AnimationPreset.html":{},"interfaces/Configuration.html":{},"classes/EffectsManager.html":{},"classes/PresetView.html":{},"classes/RendererManager.html":{},"classes/SelectionManager.html":{},"classes/StateManager.html":{},"classes/VRManager.html":{},"interfaces/Window.html":{},"classes/XRManager.html":{},"changelog.html":{}}}],["camera.near",{"_index":160,"title":{},"body":{"classes/ARManager.html":{}}}],["cameragroup",{"_index":25,"title":{},"body":{"classes/ARManager.html":{},"classes/VRManager.html":{},"classes/XRManager.html":{}}}],["cameranear",{"_index":72,"title":{},"body":{"classes/ARManager.html":{}}}],["camerapos",{"_index":1958,"title":{},"body":{"classes/PresetView.html":{}}}],["cameraposition",{"_index":2438,"title":{},"body":{"classes/StateManager.html":{},"classes/XRManager.html":{}}}],["cameras",{"_index":3044,"title":{},"body":{"interfaces/Window.html":{}}}],["cameratarget",{"_index":1959,"title":{},"body":{"classes/PresetView.html":{}}}],["canvas",{"_index":1125,"title":{},"body":{"classes/DatGUIMenuUI.html":{},"classes/RendererManager.html":{},"classes/SelectionManager.html":{},"interfaces/Window.html":{},"changelog.html":{}}}],["canvas.appendchild(this.gui.domelement",{"_index":1127,"title":{},"body":{"classes/DatGUIMenuUI.html":{}}}],["canvaswrapper",{"_index":2161,"title":{},"body":{"classes/RendererManager.html":{}}}],["canvaswrapper.appendchild(this.getmainrenderer().domelement",{"_index":2171,"title":{},"body":{"classes/RendererManager.html":{}}}],["canvaswrapper.offsetheight",{"_index":2166,"title":{},"body":{"classes/RendererManager.html":{}}}],["canvaswrapper.offsetwidth",{"_index":2163,"title":{},"body":{"classes/RendererManager.html":{}}}],["care",{"_index":1389,"title":{},"body":{"interfaces/EventDataLoader.html":{}}}],["cartesian",{"_index":927,"title":{},"body":{"classes/CoordinateHelper.html":{}}}],["case",{"_index":1970,"title":{},"body":{"classes/PresetView.html":{},"interfaces/Window.html":{}}}],["catch",{"_index":2736,"title":{},"body":{"classes/URLOptionsManager.html":{},"changelog.html":{},"miscellaneous/variables.html":{}}}],["catch((error",{"_index":2717,"title":{},"body":{"classes/URLOptionsManager.html":{},"classes/XRManager.html":{}}}],["cavern",{"_index":3855,"title":{},"body":{"miscellaneous/variables.html":{}}}],["cb2ec40",{"_index":3614,"title":{},"body":{"changelog.html":{}}}],["cb68283",{"_index":3456,"title":{},"body":{"changelog.html":{}}}],["cc04d5a",{"_index":3463,"title":{},"body":{"changelog.html":{}}}],["cdn",{"_index":3588,"title":{},"body":{"changelog.html":{},"index.html":{}}}],["cell",{"_index":3200,"title":{},"body":{"changelog.html":{}}}],["cell/cluster",{"_index":3203,"title":{},"body":{"changelog.html":{}}}],["cfb1b6a",{"_index":3696,"title":{},"body":{"changelog.html":{}}}],["cg",{"_index":2852,"title":{},"body":{"classes/VRManager.html":{}}}],["chaining",{"_index":3615,"title":{},"body":{"changelog.html":{}}}],["chamber",{"_index":556,"title":{},"body":{"classes/CMSObjects.html":{}}}],["change",{"_index":194,"title":{},"body":{"classes/ActiveVariable.html":{},"interfaces/AnimationPreset.html":{},"classes/PhoenixMenuNode.html":{},"interfaces/Window.html":{},"changelog.html":{}}}],["changeable",{"_index":1072,"title":{},"body":{"classes/DatGUIMenuUI.html":{}}}],["changed",{"_index":193,"title":{},"body":{"classes/ActiveVariable.html":{}}}],["changelog",{"_index":3164,"title":{"changelog.html":{}},"body":{}}],["changes",{"_index":627,"title":{},"body":{"classes/ColorManager.html":{},"classes/SelectionManager.html":{},"interfaces/Window.html":{},"changelog.html":{}}}],["changing",{"_index":339,"title":{},"body":{"interfaces/AnimationPreset.html":{}}}],["charge",{"_index":713,"title":{},"body":{"classes/ColorOptions.html":{},"classes/Field.html":{},"classes/PrettySymbols.html":{},"classes/RungeKutta.html":{},"classes/State.html":{},"miscellaneous/enumerations.html":{}}}],["chargecolors",{"_index":686,"title":{},"body":{"classes/ColorOptions.html":{}}}],["chargevalue",{"_index":770,"title":{},"body":{"classes/ColorOptions.html":{}}}],["check",{"_index":343,"title":{},"body":{"interfaces/AnimationPreset.html":{},"classes/ColorManager.html":{},"classes/ColorOptions.html":{},"classes/Cut.html":{},"classes/LoadingManager.html":{},"classes/RKHelper.html":{},"classes/RendererManager.html":{},"classes/SelectionManager.html":{}}}],["checkbox",{"_index":1774,"title":{},"body":{"classes/PhoenixMenuNode.html":{},"miscellaneous/typealiases.html":{}}}],["checked",{"_index":1920,"title":{},"body":{"classes/PhoenixMenuUI.html":{},"classes/RendererManager.html":{}}}],["checking",{"_index":1551,"title":{},"body":{"classes/Field.html":{},"classes/RungeKutta.html":{},"classes/State.html":{}}}],["checks",{"_index":909,"title":{},"body":{"classes/CoordinateHelper.html":{}}}],["chi2",{"_index":1991,"title":{},"body":{"classes/PrettySymbols.html":{}}}],["child",{"_index":661,"title":{},"body":{"classes/ColorManager.html":{},"classes/PhoenixMenuNode.html":{},"changelog.html":{}}}],["child.findintree(name",{"_index":1825,"title":{},"body":{"classes/PhoenixMenuNode.html":{}}}],["child.name",{"_index":1832,"title":{},"body":{"classes/PhoenixMenuNode.html":{}}}],["child.nodelevel",{"_index":1752,"title":{},"body":{"classes/PhoenixMenuNode.html":{}}}],["child.parent",{"_index":1751,"title":{},"body":{"classes/PhoenixMenuNode.html":{}}}],["child.toggleselfanddescendants(child.togglestate",{"_index":1771,"title":{},"body":{"classes/PhoenixMenuNode.html":{}}}],["child.toggleselfanddescendants(value",{"_index":1770,"title":{},"body":{"classes/PhoenixMenuNode.html":{}}}],["child.togglestate",{"_index":1769,"title":{},"body":{"classes/PhoenixMenuNode.html":{}}}],["child.traverse((object",{"_index":663,"title":{},"body":{"classes/ColorManager.html":{}}}],["childindex",{"_index":1755,"title":{},"body":{"classes/PhoenixMenuNode.html":{}}}],["children",{"_index":1679,"title":{},"body":{"classes/PhoenixMenuNode.html":{},"changelog.html":{}}}],["childrenactive",{"_index":1680,"title":{},"body":{"classes/PhoenixMenuNode.html":{}}}],["childrentogglestate",{"_index":1681,"title":{},"body":{"classes/PhoenixMenuNode.html":{}}}],["childstate",{"_index":1815,"title":{},"body":{"classes/PhoenixMenuNode.html":{}}}],["childstate.name",{"_index":1820,"title":{},"body":{"classes/PhoenixMenuNode.html":{}}}],["childstate.nodelevel",{"_index":1822,"title":{},"body":{"classes/PhoenixMenuNode.html":{}}}],["class",{"_index":0,"title":{"classes/ARManager.html":{},"classes/ActiveVariable.html":{},"classes/CMSObjects.html":{},"classes/ColorManager.html":{},"classes/ColorOptions.html":{},"classes/CoordinateHelper.html":{},"classes/Cut.html":{},"classes/DatGUIMenuUI.html":{},"classes/EffectsManager.html":{},"classes/ExportManager.html":{},"classes/Field.html":{},"classes/InfoLogger.html":{},"classes/LoadingManager.html":{},"classes/PhoenixMenuNode.html":{},"classes/PhoenixMenuUI.html":{},"classes/PresetView.html":{},"classes/PrettySymbols.html":{},"classes/RKHelper.html":{},"classes/RendererManager.html":{},"classes/RungeKutta.html":{},"classes/ScriptLoader.html":{},"classes/SelectionManager.html":{},"classes/State.html":{},"classes/StateManager.html":{},"classes/TracksMaterial.html":{},"classes/TracksMesh.html":{},"classes/URLOptionsManager.html":{},"classes/VRManager.html":{},"classes/XRManager.html":{}},"body":{"classes/ARManager.html":{},"classes/ActiveVariable.html":{},"interfaces/AnimationPreset.html":{},"classes/CMSObjects.html":{},"classes/ColorManager.html":{},"classes/ColorOptions.html":{},"classes/CoordinateHelper.html":{},"classes/Cut.html":{},"classes/DatGUIMenuUI.html":{},"classes/EffectsManager.html":{},"classes/ExportManager.html":{},"classes/Field.html":{},"classes/InfoLogger.html":{},"classes/LoadingManager.html":{},"classes/PhoenixMenuNode.html":{},"classes/PhoenixMenuUI.html":{},"classes/PresetView.html":{},"classes/PrettySymbols.html":{},"classes/RKHelper.html":{},"classes/RendererManager.html":{},"classes/RungeKutta.html":{},"classes/ScriptLoader.html":{},"classes/SelectionManager.html":{},"classes/State.html":{},"classes/StateManager.html":{},"classes/TracksMaterial.html":{},"classes/TracksMesh.html":{},"classes/URLOptionsManager.html":{},"classes/VRManager.html":{},"interfaces/Window.html":{},"classes/XRManager.html":{},"changelog.html":{},"coverage.html":{}}}],["classes",{"_index":2,"title":{},"body":{"classes/ARManager.html":{},"classes/ActiveVariable.html":{},"classes/CMSObjects.html":{},"classes/ColorManager.html":{},"classes/ColorOptions.html":{},"classes/CoordinateHelper.html":{},"classes/Cut.html":{},"classes/DatGUIMenuUI.html":{},"classes/EffectsManager.html":{},"classes/ExportManager.html":{},"classes/Field.html":{},"classes/InfoLogger.html":{},"classes/LoadingManager.html":{},"classes/PhoenixMenuNode.html":{},"classes/PhoenixMenuUI.html":{},"classes/PresetView.html":{},"classes/PrettySymbols.html":{},"classes/RKHelper.html":{},"classes/RendererManager.html":{},"classes/RungeKutta.html":{},"classes/ScriptLoader.html":{},"classes/SelectionManager.html":{},"classes/State.html":{},"classes/StateManager.html":{},"classes/TracksMaterial.html":{},"classes/TracksMesh.html":{},"classes/URLOptionsManager.html":{},"classes/VRManager.html":{},"classes/XRManager.html":{},"index.html":{},"overview.html":{}}}],["clean",{"_index":3375,"title":{},"body":{"changelog.html":{}}}],["cleanup",{"_index":3508,"title":{},"body":{"changelog.html":{}}}],["clear",{"_index":1053,"title":{},"body":{"classes/DatGUIMenuUI.html":{},"classes/PhoenixMenuUI.html":{},"interfaces/PhoenixUI.html":{}}}],["clearing",{"_index":2950,"title":{},"body":{"interfaces/Window.html":{}}}],["clearinterval(intervalid",{"_index":2857,"title":{},"body":{"classes/VRManager.html":{}}}],["click",{"_index":2260,"title":{},"body":{"classes/SelectionManager.html":{}}}],["clicked",{"_index":2358,"title":{},"body":{"classes/SelectionManager.html":{}}}],["clicking",{"_index":3093,"title":{},"body":{"interfaces/Window.html":{}}}],["clipping",{"_index":440,"title":{},"body":{"interfaces/AnimationPreset.html":{},"classes/PresetView.html":{},"classes/RendererManager.html":{},"classes/StateManager.html":{},"interfaces/Window.html":{},"changelog.html":{},"miscellaneous/enumerations.html":{}}}],["clippingconstant",{"_index":442,"title":{},"body":{"interfaces/AnimationPreset.html":{}}}],["clippingenabled",{"_index":2395,"title":{},"body":{"classes/StateManager.html":{}}}],["clippingopeningangle",{"_index":1960,"title":{},"body":{"classes/PresetView.html":{}}}],["clippingsetting",{"_index":1963,"title":{},"body":{"classes/PresetView.html":{},"miscellaneous/enumerations.html":{}}}],["clippingsetting.notforced",{"_index":1977,"title":{},"body":{"classes/PresetView.html":{}}}],["clippingstartangle",{"_index":1961,"title":{},"body":{"classes/PresetView.html":{}}}],["clone",{"_index":1528,"title":{},"body":{"classes/Field.html":{},"classes/RungeKutta.html":{},"classes/State.html":{}}}],["cloned",{"_index":127,"title":{},"body":{"classes/ARManager.html":{},"classes/VRManager.html":{},"classes/XRManager.html":{}}}],["close",{"_index":3487,"title":{},"body":{"changelog.html":{}}}],["closes",{"_index":3310,"title":{},"body":{"changelog.html":{}}}],["closest",{"_index":2375,"title":{},"body":{"classes/SelectionManager.html":{}}}],["cluster",{"_index":3422,"title":{},"body":{"changelog.html":{}}}],["clusters",{"_index":3499,"title":{},"body":{"changelog.html":{}}}],["cms",{"_index":548,"title":{},"body":{"classes/CMSObjects.html":{},"changelog.html":{}}}],["cmsloader",{"_index":3636,"title":{},"body":{"changelog.html":{},"coverage.html":{}}}],["cmsobjects",{"_index":543,"title":{"classes/CMSObjects.html":{}},"body":{"classes/CMSObjects.html":{},"changelog.html":{},"coverage.html":{}}}],["code",{"_index":3359,"title":{},"body":{"changelog.html":{},"index.html":{}}}],["col",{"_index":2498,"title":{},"body":{"classes/TracksMaterial.html":{},"classes/TracksMesh.html":{}}}],["collection",{"_index":629,"title":{},"body":{"classes/ColorManager.html":{},"classes/ColorOptions.html":{},"classes/DatGUIMenuUI.html":{},"interfaces/EventDataLoader.html":{},"classes/ExportManager.html":{},"classes/PhoenixMenuNode.html":{},"classes/PhoenixMenuUI.html":{},"interfaces/PhoenixUI.html":{},"interfaces/Window.html":{},"changelog.html":{},"miscellaneous/variables.html":{}}}],["collection's",{"_index":1229,"title":{},"body":{"classes/DatGUIMenuUI.html":{},"changelog.html":{}}}],["collection.name",{"_index":1480,"title":{},"body":{"classes/ExportManager.html":{}}}],["collectioncolor",{"_index":618,"title":{},"body":{"classes/ColorManager.html":{},"classes/ColorOptions.html":{},"classes/DatGUIMenuUI.html":{},"classes/PhoenixMenuUI.html":{},"interfaces/PhoenixUI.html":{}}}],["collectioncolor(collectionname",{"_index":625,"title":{},"body":{"classes/ColorManager.html":{}}}],["collectioncolor?.gethexstring",{"_index":787,"title":{},"body":{"classes/ColorOptions.html":{}}}],["collectioncolorrandom",{"_index":619,"title":{},"body":{"classes/ColorManager.html":{}}}],["collectioncolorrandom(collectionname",{"_index":633,"title":{},"body":{"classes/ColorManager.html":{}}}],["collectionfolder",{"_index":702,"title":{},"body":{"classes/ColorOptions.html":{}}}],["collectionfolder.addchild('color",{"_index":784,"title":{},"body":{"classes/ColorOptions.html":{}}}],["collectionfolder.name",{"_index":782,"title":{},"body":{"classes/ColorOptions.html":{}}}],["collectionname",{"_index":630,"title":{},"body":{"classes/ColorManager.html":{},"classes/ColorOptions.html":{},"classes/DatGUIMenuUI.html":{},"interfaces/EventDataLoader.html":{},"classes/PhoenixMenuUI.html":{},"interfaces/PhoenixUI.html":{},"interfaces/Window.html":{}}}],["collectionnode",{"_index":1846,"title":{},"body":{"classes/PhoenixMenuUI.html":{}}}],["collectionnode.addchild('cut",{"_index":1908,"title":{},"body":{"classes/PhoenixMenuUI.html":{}}}],["collectionnode.addchild('draw",{"_index":1925,"title":{},"body":{"classes/PhoenixMenuUI.html":{}}}],["collectionobject",{"_index":1227,"title":{},"body":{"classes/DatGUIMenuUI.html":{},"classes/PhoenixMenuUI.html":{}}}],["collections",{"_index":1404,"title":{},"body":{"interfaces/EventDataLoader.html":{},"classes/RKHelper.html":{},"interfaces/Window.html":{},"changelog.html":{}}}],["collfolder",{"_index":1224,"title":{},"body":{"classes/DatGUIMenuUI.html":{}}}],["collfolder.addfolder('cuts",{"_index":1235,"title":{},"body":{"classes/DatGUIMenuUI.html":{}}}],["collideparticles",{"_index":480,"title":{},"body":{"interfaces/AnimationPreset.html":{}}}],["colliding",{"_index":506,"title":{},"body":{"interfaces/AnimationPreset.html":{}}}],["collision",{"_index":231,"title":{},"body":{"interfaces/AnimationPreset.html":{},"interfaces/Window.html":{},"changelog.html":{}}}],["collisionduration",{"_index":226,"title":{},"body":{"interfaces/AnimationPreset.html":{},"miscellaneous/variables.html":{}}}],["collison",{"_index":503,"title":{},"body":{"interfaces/AnimationPreset.html":{},"interfaces/Window.html":{}}}],["color",{"_index":169,"title":{},"body":{"classes/ARManager.html":{},"interfaces/AnimationPreset.html":{},"classes/CMSObjects.html":{},"classes/ColorManager.html":{},"classes/ColorOptions.html":{},"classes/DatGUIMenuUI.html":{},"classes/PhoenixMenuNode.html":{},"classes/PhoenixMenuUI.html":{},"interfaces/PhoenixUI.html":{},"classes/TracksMaterial.html":{},"classes/TracksMesh.html":{},"interfaces/Window.html":{},"changelog.html":{},"index.html":{},"miscellaneous/typealiases.html":{}}}],["color(0x2194ce",{"_index":3887,"title":{},"body":{"miscellaneous/variables.html":{}}}],["color(0xff0000",{"_index":3886,"title":{},"body":{"miscellaneous/variables.html":{}}}],["color(0xffd166",{"_index":3888,"title":{},"body":{"miscellaneous/variables.html":{}}}],["color(0xfff69a",{"_index":3891,"title":{},"body":{"miscellaneous/variables.html":{}}}],["color(0xffffff",{"_index":482,"title":{},"body":{"interfaces/AnimationPreset.html":{},"miscellaneous/variables.html":{}}}],["color(color",{"_index":2499,"title":{},"body":{"classes/TracksMaterial.html":{},"classes/TracksMesh.html":{}}}],["color(color).gethexstring",{"_index":1885,"title":{},"body":{"classes/PhoenixMenuUI.html":{}}}],["color)?.set(color",{"_index":665,"title":{},"body":{"classes/ColorManager.html":{}}}],["color)?.set(math.random",{"_index":666,"title":{},"body":{"classes/ColorManager.html":{}}}],["colorbymomentum",{"_index":694,"title":{},"body":{"classes/ColorOptions.html":{}}}],["colorbymomentum(minormax",{"_index":750,"title":{},"body":{"classes/ColorOptions.html":{}}}],["colorbyoption",{"_index":710,"title":{},"body":{"classes/ColorOptions.html":{},"miscellaneous/typealiases.html":{}}}],["colorbyoption.initialize",{"_index":801,"title":{},"body":{"classes/ColorOptions.html":{}}}],["colorbyoption.name",{"_index":807,"title":{},"body":{"classes/ColorOptions.html":{}}}],["colorbyoptionkeys",{"_index":705,"title":{},"body":{"classes/ColorOptions.html":{},"classes/PhoenixMenuUI.html":{},"miscellaneous/enumerations.html":{}}}],["colorbyoptionkeys.charge",{"_index":712,"title":{},"body":{"classes/ColorOptions.html":{},"classes/PhoenixMenuUI.html":{}}}],["colorbyoptionkeys.mom",{"_index":719,"title":{},"body":{"classes/ColorOptions.html":{},"classes/PhoenixMenuUI.html":{}}}],["colorbyoptionkeys.vertex",{"_index":724,"title":{},"body":{"classes/ColorOptions.html":{},"classes/PhoenixMenuUI.html":{}}}],["colorbyoptions",{"_index":687,"title":{},"body":{"classes/ColorOptions.html":{},"classes/PhoenixMenuUI.html":{}}}],["colorbyoptions.push",{"_index":1905,"title":{},"body":{"classes/PhoenixMenuUI.html":{}}}],["colorbyoptionstoinclude",{"_index":704,"title":{},"body":{"classes/ColorOptions.html":{}}}],["colorbyoptionstoinclude.includes(colorbyoption.key",{"_index":798,"title":{},"body":{"classes/ColorOptions.html":{}}}],["colorbyoptionstoinclude?.length",{"_index":795,"title":{},"body":{"classes/ColorOptions.html":{}}}],["colored",{"_index":772,"title":{},"body":{"classes/ColorOptions.html":{}}}],["colorfortracksvertex",{"_index":674,"title":{},"body":{"classes/ColorManager.html":{}}}],["coloring",{"_index":617,"title":{},"body":{"classes/ColorManager.html":{},"classes/ColorOptions.html":{},"changelog.html":{},"miscellaneous/enumerations.html":{}}}],["colormanager",{"_index":615,"title":{"classes/ColorManager.html":{}},"body":{"classes/ColorManager.html":{},"classes/ColorOptions.html":{},"coverage.html":{}}}],["colormenu",{"_index":1162,"title":{},"body":{"classes/DatGUIMenuUI.html":{}}}],["colormenu.onchange((color",{"_index":1279,"title":{},"body":{"classes/DatGUIMenuUI.html":{}}}],["colormenu.onchange((value",{"_index":1165,"title":{},"body":{"classes/DatGUIMenuUI.html":{}}}],["colormenu.onchange(oncolorchange",{"_index":1263,"title":{},"body":{"classes/DatGUIMenuUI.html":{}}}],["colormenu.setvalue(collectioncolor?.gethex",{"_index":1232,"title":{},"body":{"classes/DatGUIMenuUI.html":{}}}],["colorobjectsbyproperty",{"_index":620,"title":{},"body":{"classes/ColorManager.html":{}}}],["colorobjectsbyproperty(color",{"_index":636,"title":{},"body":{"classes/ColorManager.html":{}}}],["coloroptions",{"_index":681,"title":{"classes/ColorOptions.html":{}},"body":{"classes/ColorOptions.html":{},"classes/PhoenixMenuUI.html":{},"coverage.html":{}}}],["coloroptionsfolder",{"_index":688,"title":{},"body":{"classes/ColorOptions.html":{}}}],["colorrepresentation",{"_index":2476,"title":{},"body":{"classes/TracksMaterial.html":{},"classes/TracksMesh.html":{}}}],["colors",{"_index":730,"title":{},"body":{"classes/ColorOptions.html":{},"classes/TracksMaterial.html":{},"classes/TracksMesh.html":{},"changelog.html":{},"miscellaneous/variables.html":{}}}],["colortracksbyvertex",{"_index":621,"title":{},"body":{"classes/ColorManager.html":{}}}],["colortracksbyvertex(collectionname",{"_index":647,"title":{},"body":{"classes/ColorManager.html":{}}}],["colour",{"_index":3078,"title":{},"body":{"interfaces/Window.html":{}}}],["combine",{"_index":3391,"title":{},"body":{"changelog.html":{}}}],["commit",{"_index":3170,"title":{},"body":{"changelog.html":{}}}],["commits",{"_index":3169,"title":{},"body":{"changelog.html":{}}}],["common",{"_index":1942,"title":{},"body":{"interfaces/PhoenixUI.html":{},"changelog.html":{}}}],["complete",{"_index":3050,"title":{},"body":{"interfaces/Window.html":{},"changelog.html":{}}}],["completely",{"_index":3645,"title":{},"body":{"changelog.html":{}}}],["completes",{"_index":434,"title":{},"body":{"interfaces/AnimationPreset.html":{}}}],["component",{"_index":3256,"title":{},"body":{"changelog.html":{}}}],["components",{"_index":3700,"title":{},"body":{"changelog.html":{}}}],["composer",{"_index":1299,"title":{},"body":{"classes/EffectsManager.html":{}}}],["compound",{"_index":3379,"title":{},"body":{"changelog.html":{}}}],["computed",{"_index":1496,"title":{},"body":{"classes/Field.html":{},"classes/RungeKutta.html":{},"classes/State.html":{}}}],["coner",{"_index":3355,"title":{},"body":{"changelog.html":{}}}],["config",{"_index":1718,"title":{},"body":{"classes/PhoenixMenuNode.html":{},"classes/PhoenixMenuUI.html":{},"classes/StateManager.html":{},"classes/URLOptionsManager.html":{},"changelog.html":{},"miscellaneous/typealiases.html":{},"miscellaneous/variables.html":{}}}],["config.group",{"_index":850,"title":{},"body":{"classes/ColorOptions.html":{},"classes/PhoenixMenuNode.html":{}}}],["config.hidden",{"_index":851,"title":{},"body":{"classes/ColorOptions.html":{}}}],["config.onchange",{"_index":1784,"title":{},"body":{"classes/PhoenixMenuNode.html":{}}}],["config.onchange?.(config?.['color",{"_index":1780,"title":{},"body":{"classes/PhoenixMenuNode.html":{}}}],["config.onchange?.(config?.['ischecked",{"_index":1776,"title":{},"body":{"classes/PhoenixMenuNode.html":{}}}],["config.onchange?.(config?.['value",{"_index":1782,"title":{},"body":{"classes/PhoenixMenuNode.html":{}}}],["config.setenablemax?.(config?.['enablemax",{"_index":1788,"title":{},"body":{"classes/PhoenixMenuNode.html":{}}}],["config.setenablemin?.(config?.['enablemin",{"_index":1787,"title":{},"body":{"classes/PhoenixMenuNode.html":{}}}],["config.type",{"_index":1773,"title":{},"body":{"classes/PhoenixMenuNode.html":{}}}],["config?.['color",{"_index":1777,"title":{},"body":{"classes/PhoenixMenuNode.html":{}}}],["config?.['highvalue",{"_index":1786,"title":{},"body":{"classes/PhoenixMenuNode.html":{}}}],["config?.['ischecked",{"_index":1775,"title":{},"body":{"classes/PhoenixMenuNode.html":{}}}],["config?.['value",{"_index":1781,"title":{},"body":{"classes/PhoenixMenuNode.html":{}}}],["configactive",{"_index":1682,"title":{},"body":{"classes/PhoenixMenuNode.html":{}}}],["configbutton",{"_index":3834,"title":{},"body":{"miscellaneous/typealiases.html":{}}}],["configcheckbox",{"_index":3837,"title":{},"body":{"miscellaneous/typealiases.html":{}}}],["configcolor",{"_index":3838,"title":{},"body":{"miscellaneous/typealiases.html":{}}}],["configfile",{"_index":3908,"title":{},"body":{"miscellaneous/variables.html":{}}}],["configfunctions",{"_index":1104,"title":{},"body":{"classes/DatGUIMenuUI.html":{},"classes/PhoenixMenuUI.html":{},"interfaces/PhoenixUI.html":{}}}],["configlabel",{"_index":3839,"title":{},"body":{"miscellaneous/typealiases.html":{}}}],["configrangeslider",{"_index":3840,"title":{},"body":{"miscellaneous/typealiases.html":{}}}],["configs",{"_index":768,"title":{},"body":{"classes/ColorOptions.html":{},"classes/PhoenixMenuNode.html":{},"changelog.html":{}}}],["configselect",{"_index":3841,"title":{},"body":{"miscellaneous/typealiases.html":{}}}],["configslength",{"_index":1763,"title":{},"body":{"classes/PhoenixMenuNode.html":{}}}],["configslider",{"_index":3842,"title":{},"body":{"miscellaneous/typealiases.html":{}}}],["configstate",{"_index":1803,"title":{},"body":{"classes/PhoenixMenuNode.html":{}}}],["configstate['label",{"_index":1810,"title":{},"body":{"classes/PhoenixMenuNode.html":{}}}],["configstate['type",{"_index":1808,"title":{},"body":{"classes/PhoenixMenuNode.html":{}}}],["configstate[prop",{"_index":1813,"title":{},"body":{"classes/PhoenixMenuNode.html":{}}}],["configurable",{"_index":921,"title":{},"body":{"classes/CoordinateHelper.html":{},"classes/DatGUIMenuUI.html":{},"classes/PhoenixMenuUI.html":{},"interfaces/PhoenixUI.html":{}}}],["configuration",{"_index":852,"title":{"interfaces/Configuration.html":{}},"body":{"interfaces/Configuration.html":{},"classes/DatGUIMenuUI.html":{},"classes/ExportManager.html":{},"classes/PhoenixMenuNode.html":{},"classes/PhoenixMenuUI.html":{},"interfaces/PhoenixUI.html":{},"classes/URLOptionsManager.html":{},"interfaces/Window.html":{},"changelog.html":{},"coverage.html":{},"index.html":{},"miscellaneous/typealiases.html":{},"miscellaneous/variables.html":{}}}],["configuration.allowurloptions",{"_index":2906,"title":{},"body":{"interfaces/Window.html":{}}}],["configurations",{"_index":738,"title":{},"body":{"classes/ColorOptions.html":{}}}],["configure",{"_index":133,"title":{},"body":{"classes/ARManager.html":{},"classes/VRManager.html":{},"classes/XRManager.html":{},"changelog.html":{}}}],["console",{"_index":2908,"title":{},"body":{"interfaces/Window.html":{}}}],["console.error",{"_index":1759,"title":{},"body":{"classes/PhoenixMenuNode.html":{}}}],["console.error('could",{"_index":2720,"title":{},"body":{"classes/URLOptionsManager.html":{}}}],["console.error('error",{"_index":2227,"title":{},"body":{"classes/ScriptLoader.html":{},"classes/URLOptionsManager.html":{}}}],["console.error(`${xrtype.touppercase",{"_index":3143,"title":{},"body":{"classes/XRManager.html":{}}}],["console.log",{"_index":2692,"title":{},"body":{"classes/URLOptionsManager.html":{},"classes/VRManager.html":{}}}],["console.log('loading",{"_index":2699,"title":{},"body":{"classes/URLOptionsManager.html":{}}}],["console.log('opening",{"_index":2711,"title":{},"body":{"classes/URLOptionsManager.html":{}}}],["console.log('setting",{"_index":2697,"title":{},"body":{"classes/URLOptionsManager.html":{}}}],["console.log('warning",{"_index":2695,"title":{},"body":{"classes/URLOptionsManager.html":{}}}],["console.warn('exception",{"_index":3894,"title":{},"body":{"miscellaneous/variables.html":{}}}],["const",{"_index":272,"title":{},"body":{"interfaces/AnimationPreset.html":{},"classes/CMSObjects.html":{},"classes/ColorManager.html":{},"classes/ColorOptions.html":{},"classes/CoordinateHelper.html":{},"classes/DatGUIMenuUI.html":{},"classes/EffectsManager.html":{},"classes/ExportManager.html":{},"classes/Field.html":{},"classes/LoadingManager.html":{},"classes/PhoenixMenuNode.html":{},"classes/PhoenixMenuUI.html":{},"classes/PrettySymbols.html":{},"classes/RKHelper.html":{},"classes/RendererManager.html":{},"classes/RungeKutta.html":{},"classes/ScriptLoader.html":{},"classes/SelectionManager.html":{},"classes/State.html":{},"classes/StateManager.html":{},"classes/TracksMaterial.html":{},"classes/TracksMesh.html":{},"classes/URLOptionsManager.html":{},"classes/VRManager.html":{},"interfaces/Window.html":{},"classes/XRManager.html":{},"index.html":{},"miscellaneous/variables.html":{}}}],["constant",{"_index":443,"title":{},"body":{"interfaces/AnimationPreset.html":{}}}],["constructing",{"_index":2496,"title":{},"body":{"classes/TracksMaterial.html":{},"classes/TracksMesh.html":{}}}],["constructor",{"_index":42,"title":{},"body":{"classes/ARManager.html":{},"classes/ActiveVariable.html":{},"interfaces/AnimationPreset.html":{},"classes/ColorManager.html":{},"classes/ColorOptions.html":{},"classes/Cut.html":{},"classes/DatGUIMenuUI.html":{},"classes/EffectsManager.html":{},"classes/LoadingManager.html":{},"classes/PhoenixMenuNode.html":{},"classes/PhoenixMenuUI.html":{},"classes/PresetView.html":{},"classes/RendererManager.html":{},"classes/SelectionManager.html":{},"classes/StateManager.html":{},"classes/TracksMaterial.html":{},"classes/TracksMesh.html":{},"classes/URLOptionsManager.html":{},"classes/VRManager.html":{},"classes/XRManager.html":{},"changelog.html":{}}}],["constructor(camera",{"_index":1307,"title":{},"body":{"classes/EffectsManager.html":{}}}],["constructor(colormanager",{"_index":701,"title":{},"body":{"classes/ColorOptions.html":{}}}],["constructor(configuration",{"_index":2889,"title":{},"body":{"interfaces/Window.html":{}}}],["constructor(elementid",{"_index":1057,"title":{},"body":{"classes/DatGUIMenuUI.html":{}}}],["constructor(eventdisplay",{"_index":2641,"title":{},"body":{"classes/URLOptionsManager.html":{}}}],["constructor(field",{"_index":992,"title":{},"body":{"classes/Cut.html":{}}}],["constructor(name",{"_index":1697,"title":{},"body":{"classes/PhoenixMenuNode.html":{},"classes/PresetView.html":{}}}],["constructor(params",{"_index":2472,"title":{},"body":{"classes/TracksMaterial.html":{},"classes/TracksMesh.html":{}}}],["constructor(phoenixmenuroot",{"_index":1839,"title":{},"body":{"classes/PhoenixMenuUI.html":{}}}],["constructor(private",{"_index":155,"title":{},"body":{"classes/ARManager.html":{},"classes/ColorManager.html":{},"classes/XRManager.html":{}}}],["constructor(public",{"_index":214,"title":{},"body":{"classes/ActiveVariable.html":{}}}],["constructor(scene",{"_index":43,"title":{},"body":{"classes/ARManager.html":{}}}],["constructor(scenemanager",{"_index":622,"title":{},"body":{"classes/ColorManager.html":{}}}],["constructor(sessiontype",{"_index":3125,"title":{},"body":{"classes/XRManager.html":{}}}],["constructor(value",{"_index":199,"title":{},"body":{"classes/ActiveVariable.html":{}}}],["containing",{"_index":88,"title":{},"body":{"classes/ARManager.html":{},"interfaces/AnimationPreset.html":{},"classes/ColorOptions.html":{},"classes/DatGUIMenuUI.html":{},"interfaces/EventDataLoader.html":{},"classes/Field.html":{},"classes/InfoLogger.html":{},"classes/PhoenixMenuNode.html":{},"classes/PhoenixMenuUI.html":{},"classes/RKHelper.html":{},"classes/RungeKutta.html":{},"classes/SelectionManager.html":{},"classes/State.html":{},"classes/URLOptionsManager.html":{},"classes/VRManager.html":{},"interfaces/Window.html":{},"classes/XRManager.html":{}}}],["containingevent",{"_index":3054,"title":{},"body":{"interfaces/Window.html":{}}}],["containment",{"_index":2112,"title":{},"body":{"classes/RendererManager.html":{}}}],["contains",{"_index":1416,"title":{},"body":{"interfaces/EventDataLoader.html":{},"classes/InfoLogger.html":{},"classes/RendererManager.html":{}}}],["containsobject",{"_index":2087,"title":{},"body":{"classes/RendererManager.html":{}}}],["containsobject(obj",{"_index":2110,"title":{},"body":{"classes/RendererManager.html":{}}}],["content",{"_index":2985,"title":{},"body":{"interfaces/Window.html":{}}}],["contents",{"_index":1876,"title":{},"body":{"classes/PhoenixMenuUI.html":{},"miscellaneous/variables.html":{}}}],["contenttype",{"_index":3899,"title":{},"body":{"miscellaneous/variables.html":{}}}],["continue",{"_index":2051,"title":{},"body":{"classes/RKHelper.html":{}}}],["contributors",{"_index":3829,"title":{},"body":{"properties.html":{}}}],["controller",{"_index":2788,"title":{},"body":{"classes/VRManager.html":{},"changelog.html":{}}}],["controller1",{"_index":2780,"title":{},"body":{"classes/VRManager.html":{}}}],["controller2",{"_index":2781,"title":{},"body":{"classes/VRManager.html":{}}}],["controllergrip1",{"_index":2782,"title":{},"body":{"classes/VRManager.html":{}}}],["controllergrip2",{"_index":2783,"title":{},"body":{"classes/VRManager.html":{}}}],["controllermodelfactory",{"_index":2829,"title":{},"body":{"classes/VRManager.html":{}}}],["controllermodelfactory.createcontrollermodel(this.controllergrip1",{"_index":2833,"title":{},"body":{"classes/VRManager.html":{}}}],["controllermodelfactory.createcontrollermodel(this.controllergrip2",{"_index":2838,"title":{},"body":{"classes/VRManager.html":{}}}],["controllers",{"_index":2822,"title":{},"body":{"classes/VRManager.html":{}}}],["controls",{"_index":1061,"title":{},"body":{"classes/DatGUIMenuUI.html":{},"interfaces/EventDataLoader.html":{},"classes/PhoenixMenuUI.html":{},"classes/VRManager.html":{},"interfaces/Window.html":{},"changelog.html":{}}}],["controlsmanager",{"_index":3757,"title":{},"body":{"coverage.html":{}}}],["conventional",{"_index":3168,"title":{},"body":{"changelog.html":{}}}],["conversions",{"_index":899,"title":{},"body":{"classes/CoordinateHelper.html":{}}}],["convert",{"_index":938,"title":{},"body":{"classes/CoordinateHelper.html":{}}}],["coordinate",{"_index":898,"title":{},"body":{"classes/CoordinateHelper.html":{},"classes/RKHelper.html":{},"changelog.html":{}}}],["coordinatehelper",{"_index":894,"title":{"classes/CoordinateHelper.html":{}},"body":{"classes/CoordinateHelper.html":{},"classes/RKHelper.html":{},"changelog.html":{},"coverage.html":{}}}],["coords",{"_index":919,"title":{},"body":{"classes/CoordinateHelper.html":{}}}],["copy",{"_index":2008,"title":{},"body":{"classes/PrettySymbols.html":{}}}],["copy(new",{"_index":3156,"title":{},"body":{"classes/XRManager.html":{}}}],["correct",{"_index":3653,"title":{},"body":{"changelog.html":{}}}],["correctly",{"_index":3232,"title":{},"body":{"changelog.html":{}}}],["count",{"_index":346,"title":{},"body":{"interfaces/AnimationPreset.html":{}}}],["counter",{"_index":2479,"title":{},"body":{"classes/TracksMaterial.html":{},"classes/TracksMesh.html":{}}}],["coverage",{"_index":3714,"title":{"coverage.html":{}},"body":{"coverage.html":{}}}],["covering",{"_index":425,"title":{},"body":{"interfaces/AnimationPreset.html":{}}}],["cpu",{"_index":3585,"title":{},"body":{"changelog.html":{}}}],["create",{"_index":49,"title":{},"body":{"classes/ARManager.html":{},"classes/ActiveVariable.html":{},"interfaces/AnimationPreset.html":{},"classes/ColorManager.html":{},"classes/ColorOptions.html":{},"classes/Cut.html":{},"classes/DatGUIMenuUI.html":{},"classes/LoadingManager.html":{},"classes/PhoenixMenuNode.html":{},"classes/PhoenixMenuUI.html":{},"classes/PresetView.html":{},"classes/PrettySymbols.html":{},"classes/RendererManager.html":{},"classes/StateManager.html":{},"classes/TracksMaterial.html":{},"classes/TracksMesh.html":{},"classes/VRManager.html":{},"interfaces/Window.html":{},"classes/XRManager.html":{},"changelog.html":{},"index.html":{},"miscellaneous/variables.html":{}}}],["created",{"_index":140,"title":{},"body":{"classes/ARManager.html":{},"classes/PhoenixMenuNode.html":{},"classes/VRManager.html":{},"interfaces/Window.html":{},"classes/XRManager.html":{}}}],["creating",{"_index":2474,"title":{},"body":{"classes/TracksMaterial.html":{},"classes/TracksMesh.html":{},"interfaces/Window.html":{}}}],["crop",{"_index":2920,"title":{},"body":{"interfaces/Window.html":{}}}],["cropped",{"_index":2921,"title":{},"body":{"interfaces/Window.html":{}}}],["cross(b_last",{"_index":1544,"title":{},"body":{"classes/Field.html":{},"classes/RungeKutta.html":{},"classes/State.html":{}}}],["cross(b_middle",{"_index":1534,"title":{},"body":{"classes/Field.html":{},"classes/RungeKutta.html":{},"classes/State.html":{}}}],["curently",{"_index":1444,"title":{},"body":{"classes/ExportManager.html":{}}}],["curp",{"_index":2578,"title":{},"body":{"classes/TracksMaterial.html":{},"classes/TracksMesh.html":{}}}],["current",{"_index":121,"title":{},"body":{"classes/ARManager.html":{},"interfaces/AnimationPreset.html":{},"interfaces/Configuration.html":{},"interfaces/EventDataLoader.html":{},"classes/Field.html":{},"classes/PhoenixMenuNode.html":{},"classes/RendererManager.html":{},"classes/RungeKutta.html":{},"classes/State.html":{},"classes/StateManager.html":{},"classes/VRManager.html":{},"interfaces/Window.html":{},"classes/XRManager.html":{}}}],["currently",{"_index":92,"title":{},"body":{"classes/ARManager.html":{},"interfaces/AnimationPreset.html":{},"classes/ColorOptions.html":{},"classes/ExportManager.html":{},"classes/SelectionManager.html":{},"classes/VRManager.html":{},"interfaces/Window.html":{},"classes/XRManager.html":{}}}],["currentxrsession",{"_index":27,"title":{},"body":{"classes/ARManager.html":{},"classes/VRManager.html":{},"classes/XRManager.html":{}}}],["custom",{"_index":644,"title":{},"body":{"classes/ColorManager.html":{},"classes/TracksMaterial.html":{},"classes/TracksMesh.html":{}}}],["customcheck",{"_index":638,"title":{},"body":{"classes/ColorManager.html":{}}}],["customcheck(object.userdata",{"_index":655,"title":{},"body":{"classes/ColorManager.html":{}}}],["customize",{"_index":2887,"title":{},"body":{"interfaces/Window.html":{}}}],["cut",{"_index":974,"title":{"classes/Cut.html":{}},"body":{"classes/Cut.html":{},"classes/DatGUIMenuUI.html":{},"classes/PhoenixMenuUI.html":{},"interfaces/PhoenixUI.html":{},"changelog.html":{},"coverage.html":{}}}],["cut.enablemaxcut(checked",{"_index":1923,"title":{},"body":{"classes/PhoenixMenuUI.html":{}}}],["cut.enablemincut(checked",{"_index":1921,"title":{},"body":{"classes/PhoenixMenuUI.html":{}}}],["cut.field",{"_index":1241,"title":{},"body":{"classes/DatGUIMenuUI.html":{}}}],["cut.maxcutactive",{"_index":1918,"title":{},"body":{"classes/PhoenixMenuUI.html":{}}}],["cut.maxvalue",{"_index":1239,"title":{},"body":{"classes/DatGUIMenuUI.html":{},"classes/PhoenixMenuUI.html":{}}}],["cut.mincutactive",{"_index":1916,"title":{},"body":{"classes/PhoenixMenuUI.html":{}}}],["cut.minvalue",{"_index":1238,"title":{},"body":{"classes/DatGUIMenuUI.html":{},"classes/PhoenixMenuUI.html":{}}}],["cut.reset",{"_index":1910,"title":{},"body":{"classes/PhoenixMenuUI.html":{}}}],["cut.step",{"_index":1914,"title":{},"body":{"classes/PhoenixMenuUI.html":{}}}],["cutpassed",{"_index":988,"title":{},"body":{"classes/Cut.html":{}}}],["cutpassed(value",{"_index":1014,"title":{},"body":{"classes/Cut.html":{}}}],["cuts",{"_index":1076,"title":{},"body":{"classes/DatGUIMenuUI.html":{},"classes/PhoenixMenuUI.html":{},"interfaces/PhoenixUI.html":{},"changelog.html":{}}}],["cuts.length",{"_index":1900,"title":{},"body":{"classes/PhoenixMenuUI.html":{}}}],["cutsfolder",{"_index":1234,"title":{},"body":{"classes/DatGUIMenuUI.html":{}}}],["cutsoptionsnode",{"_index":1907,"title":{},"body":{"classes/PhoenixMenuUI.html":{}}}],["cutsoptionsnode.addconfig('rangeslider",{"_index":1912,"title":{},"body":{"classes/PhoenixMenuUI.html":{}}}],["cycle",{"_index":3258,"title":{},"body":{"changelog.html":{}}}],["d0",{"_index":2071,"title":{},"body":{"classes/RKHelper.html":{}}}],["d207bad",{"_index":3581,"title":{},"body":{"changelog.html":{}}}],["d2874b8",{"_index":3567,"title":{},"body":{"changelog.html":{}}}],["d2c02d5",{"_index":3276,"title":{},"body":{"changelog.html":{}}}],["d2e0547",{"_index":3453,"title":{},"body":{"changelog.html":{}}}],["d3920c4",{"_index":3676,"title":{},"body":{"changelog.html":{}}}],["d4866ea",{"_index":3282,"title":{},"body":{"changelog.html":{}}}],["d4b62c2",{"_index":3357,"title":{},"body":{"changelog.html":{}}}],["d677089",{"_index":3601,"title":{},"body":{"changelog.html":{}}}],["d90e3a6",{"_index":3602,"title":{},"body":{"changelog.html":{}}}],["da3ead5",{"_index":3658,"title":{},"body":{"changelog.html":{}}}],["dark",{"_index":880,"title":{},"body":{"interfaces/Configuration.html":{}}}],["dat.gui",{"_index":874,"title":{},"body":{"interfaces/Configuration.html":{},"classes/DatGUIMenuUI.html":{},"classes/URLOptionsManager.html":{},"interfaces/Window.html":{},"changelog.html":{},"dependencies.html":{}}}],["data",{"_index":258,"title":{},"body":{"interfaces/AnimationPreset.html":{},"classes/ColorManager.html":{},"classes/ColorOptions.html":{},"interfaces/Configuration.html":{},"classes/Cut.html":{},"classes/DatGUIMenuUI.html":{},"interfaces/EventDataLoader.html":{},"classes/ExportManager.html":{},"classes/InfoLogger.html":{},"classes/PhoenixMenuUI.html":{},"interfaces/PhoenixUI.html":{},"classes/ScriptLoader.html":{},"classes/SelectionManager.html":{},"classes/URLOptionsManager.html":{},"interfaces/Window.html":{},"changelog.html":{},"coverage.html":{},"miscellaneous/enumerations.html":{},"index.html":{},"miscellaneous/variables.html":{}}}],["data.json",{"_index":3802,"title":{},"body":{"index.html":{}}}],["datguimenuui",{"_index":1031,"title":{"classes/DatGUIMenuUI.html":{}},"body":{"classes/DatGUIMenuUI.html":{},"coverage.html":{}}}],["db261a6",{"_index":3612,"title":{},"body":{"changelog.html":{}}}],["db3ca8b",{"_index":3490,"title":{},"body":{"changelog.html":{}}}],["dc05ed9",{"_index":3613,"title":{},"body":{"changelog.html":{}}}],["dc140dd",{"_index":3634,"title":{},"body":{"changelog.html":{}}}],["dc5d489",{"_index":3625,"title":{},"body":{"changelog.html":{}}}],["dc7d74a",{"_index":3360,"title":{},"body":{"changelog.html":{}}}],["dcb4c88",{"_index":3210,"title":{},"body":{"changelog.html":{}}}],["dcf6cec",{"_index":3656,"title":{},"body":{"changelog.html":{}}}],["debug",{"_index":3408,"title":{},"body":{"changelog.html":{}}}],["debugging",{"_index":3418,"title":{},"body":{"changelog.html":{}}}],["declare",{"_index":2879,"title":{},"body":{"interfaces/Window.html":{}}}],["default",{"_index":57,"title":{},"body":{"classes/ARManager.html":{},"classes/ActiveVariable.html":{},"classes/ColorOptions.html":{},"interfaces/Configuration.html":{},"classes/Cut.html":{},"classes/DatGUIMenuUI.html":{},"classes/EffectsManager.html":{},"classes/Field.html":{},"classes/InfoLogger.html":{},"classes/LoadingManager.html":{},"classes/PhoenixMenuNode.html":{},"classes/PhoenixMenuUI.html":{},"interfaces/PhoenixUI.html":{},"classes/PresetView.html":{},"classes/PrettySymbols.html":{},"classes/RKHelper.html":{},"classes/RendererManager.html":{},"classes/RungeKutta.html":{},"classes/ScriptLoader.html":{},"classes/SelectionManager.html":{},"classes/State.html":{},"classes/StateManager.html":{},"classes/URLOptionsManager.html":{},"classes/VRManager.html":{},"interfaces/Window.html":{},"classes/XRManager.html":{},"changelog.html":{},"miscellaneous/variables.html":{}}}],["defaultanimationpresets",{"_index":3769,"title":{},"body":{"coverage.html":{},"miscellaneous/variables.html":{}}}],["defaultapplymaxvalue",{"_index":979,"title":{},"body":{"classes/Cut.html":{}}}],["defaultapplyminvalue",{"_index":980,"title":{},"body":{"classes/Cut.html":{}}}],["defaulteventfile",{"_index":856,"title":{},"body":{"interfaces/Configuration.html":{}}}],["defaulteventpath",{"_index":2652,"title":{},"body":{"classes/URLOptionsManager.html":{}}}],["defaulteventtype",{"_index":2649,"title":{},"body":{"classes/URLOptionsManager.html":{}}}],["defaultmaxvalue",{"_index":981,"title":{},"body":{"classes/Cut.html":{}}}],["defaultminvalue",{"_index":982,"title":{},"body":{"classes/Cut.html":{}}}],["defaultrenderpass",{"_index":1300,"title":{},"body":{"classes/EffectsManager.html":{}}}],["defaults",{"_index":2202,"title":{},"body":{"classes/ScriptLoader.html":{},"classes/URLOptionsManager.html":{}}}],["defaultview",{"_index":857,"title":{},"body":{"interfaces/Configuration.html":{},"changelog.html":{}}}],["define",{"_index":1486,"title":{},"body":{"classes/Field.html":{},"classes/PresetView.html":{},"index.html":{}}}],["defined",{"_index":47,"title":{},"body":{"classes/ARManager.html":{},"classes/ActiveVariable.html":{},"classes/CMSObjects.html":{},"classes/ColorManager.html":{},"classes/ColorOptions.html":{},"classes/CoordinateHelper.html":{},"classes/Cut.html":{},"classes/DatGUIMenuUI.html":{},"classes/EffectsManager.html":{},"interfaces/EventDataLoader.html":{},"classes/ExportManager.html":{},"classes/Field.html":{},"classes/InfoLogger.html":{},"classes/LoadingManager.html":{},"classes/PhoenixMenuNode.html":{},"classes/PhoenixMenuUI.html":{},"interfaces/PhoenixUI.html":{},"classes/PresetView.html":{},"classes/PrettySymbols.html":{},"classes/RKHelper.html":{},"classes/RendererManager.html":{},"classes/RungeKutta.html":{},"classes/ScriptLoader.html":{},"classes/SelectionManager.html":{},"classes/State.html":{},"classes/StateManager.html":{},"classes/TracksMaterial.html":{},"classes/TracksMesh.html":{},"classes/URLOptionsManager.html":{},"classes/VRManager.html":{},"classes/XRManager.html":{}}}],["defining",{"_index":3073,"title":{},"body":{"interfaces/Window.html":{}}}],["definition",{"_index":940,"title":{},"body":{"classes/CoordinateHelper.html":{}}}],["delete",{"_index":1760,"title":{},"body":{"classes/PhoenixMenuNode.html":{},"classes/PrettySymbols.html":{},"interfaces/Window.html":{},"changelog.html":{}}}],["deleted",{"_index":1200,"title":{},"body":{"classes/DatGUIMenuUI.html":{}}}],["deleting",{"_index":1192,"title":{},"body":{"classes/DatGUIMenuUI.html":{}}}],["dependencies",{"_index":3773,"title":{"dependencies.html":{}},"body":{"dependencies.html":{}}}],["dependency",{"_index":3305,"title":{},"body":{"changelog.html":{}}}],["deployment",{"_index":3711,"title":{},"body":{"changelog.html":{}}}],["depth",{"_index":1893,"title":{},"body":{"classes/PhoenixMenuUI.html":{}}}],["depthpackingstrategies",{"_index":891,"title":{},"body":{"interfaces/Configuration.html":{}}}],["depthtest",{"_index":1084,"title":{},"body":{"classes/DatGUIMenuUI.html":{},"classes/PhoenixMenuUI.html":{},"interfaces/PhoenixUI.html":{}}}],["depthtestmenu",{"_index":1208,"title":{},"body":{"classes/DatGUIMenuUI.html":{}}}],["depthtestmenu.onchange((value",{"_index":1211,"title":{},"body":{"classes/DatGUIMenuUI.html":{}}}],["descendants",{"_index":1739,"title":{},"body":{"classes/PhoenixMenuNode.html":{}}}],["describe",{"_index":1966,"title":{},"body":{"classes/PresetView.html":{}}}],["description",{"_index":9,"title":{},"body":{"classes/ARManager.html":{},"classes/ActiveVariable.html":{},"interfaces/AnimationPreset.html":{},"classes/CMSObjects.html":{},"classes/ColorManager.html":{},"classes/ColorOptions.html":{},"interfaces/Configuration.html":{},"classes/CoordinateHelper.html":{},"classes/Cut.html":{},"classes/DatGUIMenuUI.html":{},"classes/EffectsManager.html":{},"interfaces/EventDataLoader.html":{},"classes/ExportManager.html":{},"classes/Field.html":{},"classes/InfoLogger.html":{},"classes/LoadingManager.html":{},"classes/PhoenixMenuNode.html":{},"classes/PhoenixMenuUI.html":{},"interfaces/PhoenixUI.html":{},"classes/PresetView.html":{},"classes/PrettySymbols.html":{},"classes/RKHelper.html":{},"classes/RendererManager.html":{},"classes/RungeKutta.html":{},"classes/ScriptLoader.html":{},"classes/SelectionManager.html":{},"classes/State.html":{},"classes/StateManager.html":{},"classes/TracksMaterial.html":{},"classes/TracksMesh.html":{},"classes/URLOptionsManager.html":{},"classes/VRManager.html":{},"interfaces/Window.html":{},"classes/XRManager.html":{},"properties.html":{}}}],["desired",{"_index":1402,"title":{},"body":{"interfaces/EventDataLoader.html":{},"interfaces/Window.html":{}}}],["detector",{"_index":292,"title":{},"body":{"interfaces/AnimationPreset.html":{},"classes/DatGUIMenuUI.html":{},"classes/PhoenixMenuUI.html":{},"interfaces/PhoenixUI.html":{},"interfaces/Window.html":{},"index.html":{}}}],["detectoropacity",{"_index":1156,"title":{},"body":{"classes/DatGUIMenuUI.html":{}}}],["determine",{"_index":3356,"title":{},"body":{"changelog.html":{}}}],["dev",{"_index":3329,"title":{},"body":{"changelog.html":{}}}],["df425ee",{"_index":3439,"title":{},"body":{"changelog.html":{}}}],["df9ce07",{"_index":3420,"title":{},"body":{"changelog.html":{}}}],["dfbc6a2",{"_index":3316,"title":{},"body":{"changelog.html":{}}}],["dfe8e8d",{"_index":3404,"title":{},"body":{"changelog.html":{}}}],["dflt_colors",{"_index":3027,"title":{},"body":{"interfaces/Window.html":{}}}],["dialog",{"_index":3516,"title":{},"body":{"changelog.html":{}}}],["different",{"_index":1060,"title":{},"body":{"classes/DatGUIMenuUI.html":{},"interfaces/EventDataLoader.html":{},"classes/PhoenixMenuNode.html":{},"classes/PhoenixMenuUI.html":{},"interfaces/Window.html":{},"miscellaneous/variables.html":{}}}],["differently",{"_index":3398,"title":{},"body":{"changelog.html":{}}}],["dimensional",{"_index":525,"title":{},"body":{"interfaces/AnimationPreset.html":{}}}],["dir",{"_index":1583,"title":{},"body":{"classes/Field.html":{},"classes/RungeKutta.html":{},"classes/State.html":{},"classes/TracksMaterial.html":{},"classes/TracksMesh.html":{}}}],["dir.x",{"_index":2590,"title":{},"body":{"classes/TracksMaterial.html":{},"classes/TracksMesh.html":{}}}],["dir.y",{"_index":2589,"title":{},"body":{"classes/TracksMaterial.html":{},"classes/TracksMesh.html":{}}}],["direction",{"_index":1576,"title":{},"body":{"classes/Field.html":{},"classes/RungeKutta.html":{},"classes/State.html":{},"classes/VRManager.html":{},"changelog.html":{}}}],["directionallight",{"_index":2292,"title":{},"body":{"classes/SelectionManager.html":{}}}],["directionallight().type",{"_index":2302,"title":{},"body":{"classes/SelectionManager.html":{}}}],["directly",{"_index":3809,"title":{},"body":{"index.html":{}}}],["directory",{"_index":3813,"title":{},"body":{"index.html":{}}}],["disable",{"_index":2270,"title":{},"body":{"classes/SelectionManager.html":{},"interfaces/Window.html":{},"changelog.html":{}}}],["disabled",{"_index":1313,"title":{},"body":{"classes/EffectsManager.html":{},"classes/RendererManager.html":{},"classes/SelectionManager.html":{}}}],["disableselecting",{"_index":2243,"title":{},"body":{"classes/SelectionManager.html":{}}}],["disappearing",{"_index":3301,"title":{},"body":{"changelog.html":{}}}],["discard",{"_index":2601,"title":{},"body":{"classes/TracksMaterial.html":{},"classes/TracksMesh.html":{}}}],["display",{"_index":854,"title":{},"body":{"interfaces/Configuration.html":{},"classes/EffectsManager.html":{},"interfaces/EventDataLoader.html":{},"classes/InfoLogger.html":{},"classes/RendererManager.html":{},"classes/SelectionManager.html":{},"classes/StateManager.html":{},"classes/URLOptionsManager.html":{},"classes/VRManager.html":{},"interfaces/Window.html":{},"changelog.html":{},"index.html":{},"properties.html":{}}}],["display#readme",{"_index":3823,"title":{},"body":{"properties.html":{}}}],["display's",{"_index":260,"title":{},"body":{"interfaces/AnimationPreset.html":{},"classes/ExportManager.html":{},"classes/RendererManager.html":{},"classes/SelectionManager.html":{},"interfaces/Window.html":{}}}],["display.ts",{"_index":2866,"title":{},"body":{"interfaces/Window.html":{},"coverage.html":{}}}],["displayed",{"_index":1407,"title":{},"body":{"interfaces/EventDataLoader.html":{},"interfaces/Window.html":{}}}],["displaying",{"_index":3334,"title":{},"body":{"changelog.html":{}}}],["displayusage",{"_index":3798,"title":{},"body":{"index.html":{}}}],["dist/bundle",{"_index":3812,"title":{},"body":{"index.html":{}}}],["distance",{"_index":444,"title":{},"body":{"interfaces/AnimationPreset.html":{},"classes/VRManager.html":{}}}],["distancefromorigin",{"_index":477,"title":{},"body":{"interfaces/AnimationPreset.html":{}}}],["divide",{"_index":3464,"title":{},"body":{"changelog.html":{}}}],["dividescalar(previousscale",{"_index":381,"title":{},"body":{"interfaces/AnimationPreset.html":{}}}],["docs",{"_index":3277,"title":{},"body":{"changelog.html":{}}}],["document",{"_index":2312,"title":{},"body":{"classes/SelectionManager.html":{},"classes/URLOptionsManager.html":{}}}],["document.body",{"_index":167,"title":{},"body":{"classes/ARManager.html":{},"classes/DatGUIMenuUI.html":{},"classes/RendererManager.html":{}}}],["document.body.style.removeproperty('background",{"_index":178,"title":{},"body":{"classes/ARManager.html":{}}}],["document.body.style.setproperty('background",{"_index":168,"title":{},"body":{"classes/ARManager.html":{}}}],["document.createelement('a",{"_index":3922,"title":{},"body":{"miscellaneous/variables.html":{}}}],["document.createelement('input",{"_index":3903,"title":{},"body":{"miscellaneous/variables.html":{}}}],["document.createelement('script",{"_index":2218,"title":{},"body":{"classes/ScriptLoader.html":{}}}],["document.getelementbyid('gui",{"_index":1132,"title":{},"body":{"classes/DatGUIMenuUI.html":{}}}],["document.getelementbyid(elementid",{"_index":1126,"title":{},"body":{"classes/DatGUIMenuUI.html":{},"classes/RendererManager.html":{}}}],["document.getelementsbytagname('head')[0",{"_index":2206,"title":{},"body":{"classes/ScriptLoader.html":{}}}],["document.queryselectorall",{"_index":2214,"title":{},"body":{"classes/ScriptLoader.html":{}}}],["documentation",{"_index":3503,"title":{},"body":{"changelog.html":{},"coverage.html":{}}}],["documented",{"_index":3167,"title":{},"body":{"changelog.html":{}}}],["doesn't",{"_index":2757,"title":{},"body":{"classes/URLOptionsManager.html":{}}}],["dof",{"_index":1993,"title":{},"body":{"classes/PrettySymbols.html":{}}}],["dom",{"_index":63,"title":{},"body":{"classes/ARManager.html":{},"classes/RendererManager.html":{},"changelog.html":{}}}],["domoverlay",{"_index":165,"title":{},"body":{"classes/ARManager.html":{}}}],["don't",{"_index":2009,"title":{},"body":{"classes/PrettySymbols.html":{}}}],["done",{"_index":2922,"title":{},"body":{"interfaces/Window.html":{}}}],["dosplay",{"_index":3480,"title":{},"body":{"changelog.html":{}}}],["doubleside",{"_index":560,"title":{},"body":{"classes/CMSObjects.html":{}}}],["doublesided",{"_index":2972,"title":{},"body":{"interfaces/Window.html":{}}}],["download",{"_index":3929,"title":{},"body":{"miscellaneous/variables.html":{}}}],["dparams",{"_index":2023,"title":{},"body":{"classes/PrettySymbols.html":{},"classes/RKHelper.html":{}}}],["dparams[0",{"_index":2072,"title":{},"body":{"classes/RKHelper.html":{}}}],["dparams[1",{"_index":2074,"title":{},"body":{"classes/RKHelper.html":{}}}],["dparams[2",{"_index":2075,"title":{},"body":{"classes/RKHelper.html":{}}}],["dparams[3",{"_index":2076,"title":{},"body":{"classes/RKHelper.html":{}}}],["dparams[4",{"_index":820,"title":{},"body":{"classes/ColorOptions.html":{},"classes/RKHelper.html":{}}}],["draw",{"_index":1393,"title":{},"body":{"interfaces/EventDataLoader.html":{},"classes/PhoenixMenuUI.html":{}}}],["drawing",{"_index":3489,"title":{},"body":{"changelog.html":{}}}],["drawoptionsnode",{"_index":1924,"title":{},"body":{"classes/PhoenixMenuUI.html":{}}}],["drawoptionsnode.addconfig('checkbox",{"_index":1927,"title":{},"body":{"classes/PhoenixMenuUI.html":{}}}],["drawoptionsnode.addconfig('slider",{"_index":1926,"title":{},"body":{"classes/PhoenixMenuUI.html":{}}}],["drawrange",{"_index":345,"title":{},"body":{"interfaces/AnimationPreset.html":{}}}],["driven",{"_index":3792,"title":{},"body":{"index.html":{}}}],["drop",{"_index":3583,"title":{},"body":{"changelog.html":{}}}],["duration",{"_index":232,"title":{},"body":{"interfaces/AnimationPreset.html":{},"interfaces/Window.html":{},"miscellaneous/variables.html":{}}}],["dynamically",{"_index":2193,"title":{},"body":{"classes/ScriptLoader.html":{}}}],["e",{"_index":3907,"title":{},"body":{"miscellaneous/variables.html":{}}}],["e.target?.files[0",{"_index":3909,"title":{},"body":{"miscellaneous/variables.html":{}}}],["e07725a",{"_index":3452,"title":{},"body":{"changelog.html":{}}}],["e10a68d",{"_index":3604,"title":{},"body":{"changelog.html":{}}}],["e152933",{"_index":3235,"title":{},"body":{"changelog.html":{}}}],["e297c98",{"_index":3654,"title":{},"body":{"changelog.html":{}}}],["e2e",{"_index":3227,"title":{},"body":{"changelog.html":{}}}],["e6f69a0",{"_index":3599,"title":{},"body":{"changelog.html":{}}}],["e96136b",{"_index":3596,"title":{},"body":{"changelog.html":{}}}],["e9f1bc9",{"_index":3628,"title":{},"body":{"changelog.html":{}}}],["each",{"_index":235,"title":{},"body":{"interfaces/AnimationPreset.html":{},"classes/ColorOptions.html":{},"interfaces/EventDataLoader.html":{},"classes/LoadingManager.html":{},"interfaces/Window.html":{},"changelog.html":{}}}],["easily",{"_index":1953,"title":{},"body":{"classes/PresetView.html":{}}}],["easing",{"_index":234,"title":{},"body":{"interfaces/AnimationPreset.html":{}}}],["easing.cubic.out",{"_index":290,"title":{},"body":{"interfaces/AnimationPreset.html":{}}}],["easing.linear.none",{"_index":271,"title":{},"body":{"interfaces/AnimationPreset.html":{}}}],["edcd567",{"_index":3492,"title":{},"body":{"changelog.html":{}}}],["edges",{"_index":605,"title":{},"body":{"classes/CMSObjects.html":{}}}],["edgesgeometry",{"_index":558,"title":{},"body":{"classes/CMSObjects.html":{}}}],["edgesgeometry(boxbuffer",{"_index":607,"title":{},"body":{"classes/CMSObjects.html":{}}}],["edit",{"_index":388,"title":{},"body":{"interfaces/AnimationPreset.html":{}}}],["edm4hepjsonloader",{"_index":3740,"title":{},"body":{"coverage.html":{}}}],["edward's",{"_index":3642,"title":{},"body":{"changelog.html":{}}}],["effect",{"_index":1317,"title":{},"body":{"classes/EffectsManager.html":{}}}],["effectcomposer",{"_index":1315,"title":{},"body":{"classes/EffectsManager.html":{}}}],["effectcomposer(renderer",{"_index":1344,"title":{},"body":{"classes/EffectsManager.html":{}}}],["effects",{"_index":1293,"title":{},"body":{"classes/EffectsManager.html":{},"classes/SelectionManager.html":{},"changelog.html":{}}}],["effectsmanager",{"_index":1291,"title":{"classes/EffectsManager.html":{}},"body":{"classes/EffectsManager.html":{},"classes/SelectionManager.html":{},"coverage.html":{}}}],["effectsrender",{"_index":1304,"title":{},"body":{"classes/EffectsManager.html":{}}}],["effectsrender(scene",{"_index":1331,"title":{},"body":{"classes/EffectsManager.html":{}}}],["electrons",{"_index":3336,"title":{},"body":{"changelog.html":{}}}],["element",{"_index":873,"title":{},"body":{"interfaces/Configuration.html":{},"classes/DatGUIMenuUI.html":{},"classes/RendererManager.html":{},"classes/ScriptLoader.html":{},"classes/URLOptionsManager.html":{},"miscellaneous/variables.html":{}}}],["elementid",{"_index":858,"title":{},"body":{"interfaces/Configuration.html":{},"classes/DatGUIMenuUI.html":{},"classes/RendererManager.html":{},"index.html":{}}}],["elements",{"_index":1327,"title":{},"body":{"classes/EffectsManager.html":{},"classes/SelectionManager.html":{},"interfaces/Window.html":{}}}],["embed",{"_index":2646,"title":{},"body":{"classes/URLOptionsManager.html":{},"changelog.html":{},"miscellaneous/variables.html":{}}}],["empty",{"_index":2662,"title":{},"body":{"classes/URLOptionsManager.html":{},"interfaces/Window.html":{},"changelog.html":{}}}],["enable",{"_index":62,"title":{},"body":{"classes/ARManager.html":{},"interfaces/Configuration.html":{},"classes/SelectionManager.html":{},"classes/URLOptionsManager.html":{},"interfaces/Window.html":{}}}],["enabled",{"_index":1312,"title":{},"body":{"classes/EffectsManager.html":{},"classes/RendererManager.html":{},"classes/SelectionManager.html":{},"classes/StateManager.html":{}}}],["enabledatguimenu",{"_index":859,"title":{},"body":{"interfaces/Configuration.html":{}}}],["enabledomoverlay",{"_index":19,"title":{},"body":{"classes/ARManager.html":{}}}],["enableeventdisplayconsole",{"_index":3072,"title":{},"body":{"interfaces/Window.html":{}}}],["enablekeyboardcontrols",{"_index":3104,"title":{},"body":{"interfaces/Window.html":{}}}],["enablemax",{"_index":1917,"title":{},"body":{"classes/PhoenixMenuUI.html":{}}}],["enablemaxcut",{"_index":989,"title":{},"body":{"classes/Cut.html":{}}}],["enablemaxcut(check",{"_index":1017,"title":{},"body":{"classes/Cut.html":{}}}],["enablemin",{"_index":1915,"title":{},"body":{"classes/PhoenixMenuUI.html":{}}}],["enablemincut",{"_index":990,"title":{},"body":{"classes/Cut.html":{}}}],["enablemincut(check",{"_index":1020,"title":{},"body":{"classes/Cut.html":{}}}],["enables",{"_index":3071,"title":{},"body":{"interfaces/Window.html":{}}}],["enableselecting",{"_index":2244,"title":{},"body":{"classes/SelectionManager.html":{}}}],["enableselecting(enable",{"_index":3094,"title":{},"body":{"interfaces/Window.html":{}}}],["enabling",{"_index":2266,"title":{},"body":{"classes/SelectionManager.html":{}}}],["enabling/disabling",{"_index":1146,"title":{},"body":{"classes/DatGUIMenuUI.html":{}}}],["end",{"_index":120,"title":{},"body":{"classes/ARManager.html":{},"interfaces/AnimationPreset.html":{},"classes/VRManager.html":{},"interfaces/Window.html":{},"classes/XRManager.html":{}}}],["end.chain(startclone",{"_index":312,"title":{},"body":{"interfaces/AnimationPreset.html":{}}}],["ended",{"_index":318,"title":{},"body":{"interfaces/AnimationPreset.html":{},"interfaces/Window.html":{}}}],["ends",{"_index":98,"title":{},"body":{"classes/ARManager.html":{},"interfaces/AnimationPreset.html":{},"classes/VRManager.html":{},"interfaces/Window.html":{},"classes/XRManager.html":{}}}],["endxr(xrsessiontype",{"_index":2933,"title":{},"body":{"interfaces/Window.html":{}}}],["endxrsession",{"_index":38,"title":{},"body":{"classes/ARManager.html":{},"classes/VRManager.html":{},"classes/XRManager.html":{}}}],["energy",{"_index":1994,"title":{},"body":{"classes/PrettySymbols.html":{},"changelog.html":{}}}],["entries",{"_index":1599,"title":{},"body":{"classes/InfoLogger.html":{}}}],["entry",{"_index":1605,"title":{},"body":{"classes/InfoLogger.html":{}}}],["enum",{"_index":779,"title":{},"body":{"classes/ColorOptions.html":{},"classes/PresetView.html":{},"classes/XRManager.html":{}}}],["enumerable",{"_index":2610,"title":{},"body":{"classes/TracksMaterial.html":{},"classes/TracksMesh.html":{}}}],["enumerations",{"_index":3786,"title":{"miscellaneous/enumerations.html":{}},"body":{"miscellaneous/enumerations.html":{}}}],["equal",{"_index":773,"title":{},"body":{"classes/ColorOptions.html":{}}}],["equatorial",{"_index":914,"title":{},"body":{"classes/CoordinateHelper.html":{}}}],["error",{"_index":1552,"title":{},"body":{"classes/Field.html":{},"classes/RungeKutta.html":{},"classes/State.html":{},"classes/URLOptionsManager.html":{},"classes/XRManager.html":{},"changelog.html":{}}}],["error_estimate",{"_index":1554,"title":{},"body":{"classes/Field.html":{},"classes/RungeKutta.html":{},"classes/State.html":{}}}],["errors",{"_index":2738,"title":{},"body":{"classes/URLOptionsManager.html":{},"changelog.html":{}}}],["estimate",{"_index":1553,"title":{},"body":{"classes/Field.html":{},"classes/RungeKutta.html":{},"classes/State.html":{}}}],["et",{"_index":1995,"title":{},"body":{"classes/PrettySymbols.html":{}}}],["eta",{"_index":925,"title":{},"body":{"classes/CoordinateHelper.html":{},"classes/PrettySymbols.html":{},"changelog.html":{}}}],["eta/phi",{"_index":928,"title":{},"body":{"classes/CoordinateHelper.html":{}}}],["eta=0",{"_index":960,"title":{},"body":{"classes/CoordinateHelper.html":{}}}],["etaphitocartesian",{"_index":902,"title":{},"body":{"classes/CoordinateHelper.html":{}}}],["etaphitocartesian(radius",{"_index":924,"title":{},"body":{"classes/CoordinateHelper.html":{}}}],["etatotheta",{"_index":903,"title":{},"body":{"classes/CoordinateHelper.html":{}}}],["etatotheta(eta",{"_index":936,"title":{},"body":{"classes/CoordinateHelper.html":{}}}],["eta~infinite",{"_index":966,"title":{},"body":{"classes/CoordinateHelper.html":{}}}],["etc",{"_index":1078,"title":{},"body":{"classes/DatGUIMenuUI.html":{},"classes/PhoenixMenuUI.html":{},"interfaces/PhoenixUI.html":{}}}],["event",{"_index":230,"title":{},"body":{"interfaces/AnimationPreset.html":{},"classes/CMSObjects.html":{},"classes/ColorManager.html":{},"classes/ColorOptions.html":{},"interfaces/Configuration.html":{},"classes/Cut.html":{},"classes/DatGUIMenuUI.html":{},"classes/EffectsManager.html":{},"interfaces/EventDataLoader.html":{},"classes/ExportManager.html":{},"classes/InfoLogger.html":{},"classes/PhoenixMenuUI.html":{},"interfaces/PhoenixUI.html":{},"classes/RKHelper.html":{},"classes/RendererManager.html":{},"classes/ScriptLoader.html":{},"classes/SelectionManager.html":{},"classes/StateManager.html":{},"classes/URLOptionsManager.html":{},"classes/VRManager.html":{},"interfaces/Window.html":{},"changelog.html":{},"coverage.html":{},"miscellaneous/enumerations.html":{},"index.html":{},"properties.html":{},"miscellaneous/variables.html":{}}}],["event's",{"_index":2414,"title":{},"body":{"classes/StateManager.html":{}}}],["event.clientx",{"_index":2365,"title":{},"body":{"classes/SelectionManager.html":{}}}],["event.clienty",{"_index":2368,"title":{},"body":{"classes/SelectionManager.html":{}}}],["event.preventdefault",{"_index":2360,"title":{},"body":{"classes/SelectionManager.html":{}}}],["event_data_type_colors",{"_index":562,"title":{},"body":{"classes/CMSObjects.html":{},"coverage.html":{},"miscellaneous/variables.html":{}}}],["event_data_type_colors.muonchambers",{"_index":596,"title":{},"body":{"classes/CMSObjects.html":{}}}],["eventdata",{"_index":325,"title":{},"body":{"interfaces/AnimationPreset.html":{},"classes/DatGUIMenuUI.html":{},"interfaces/EventDataLoader.html":{},"classes/ExportManager.html":{},"classes/URLOptionsManager.html":{},"interfaces/Window.html":{}}}],["eventdata.children",{"_index":1476,"title":{},"body":{"classes/ExportManager.html":{}}}],["eventdata.traverse((eventobject",{"_index":334,"title":{},"body":{"interfaces/AnimationPreset.html":{}}}],["eventdataconfig",{"_index":1471,"title":{},"body":{"classes/ExportManager.html":{}}}],["eventdataconfig[objecttype.name",{"_index":1478,"title":{},"body":{"classes/ExportManager.html":{}}}],["eventdataconfig[objecttype.name].push(collection.name",{"_index":1481,"title":{},"body":{"classes/ExportManager.html":{}}}],["eventdataloader",{"_index":860,"title":{"interfaces/EventDataLoader.html":{}},"body":{"interfaces/Configuration.html":{},"interfaces/EventDataLoader.html":{},"coverage.html":{},"index.html":{}}}],["eventdatatype",{"_index":1079,"title":{},"body":{"classes/DatGUIMenuUI.html":{},"classes/PhoenixMenuUI.html":{},"interfaces/PhoenixUI.html":{},"interfaces/Window.html":{},"miscellaneous/variables.html":{}}}],["eventdatatypenode",{"_index":1896,"title":{},"body":{"classes/PhoenixMenuUI.html":{}}}],["eventdatatypenode.name",{"_index":1897,"title":{},"body":{"classes/PhoenixMenuUI.html":{}}}],["eventdisplay",{"_index":1118,"title":{},"body":{"classes/DatGUIMenuUI.html":{},"classes/RendererManager.html":{},"classes/StateManager.html":{},"classes/URLOptionsManager.html":{},"interfaces/Window.html":{},"changelog.html":{},"coverage.html":{},"index.html":{}}}],["eventdisplay.init(configuration",{"_index":3800,"title":{},"body":{"index.html":{}}}],["eventdisplay.loadobjgeometry",{"_index":3804,"title":{},"body":{"index.html":{}}}],["eventdisplay.parsephoenixevents(res",{"_index":3803,"title":{},"body":{"index.html":{}}}],["eventfile",{"_index":892,"title":{},"body":{"interfaces/Configuration.html":{}}}],["eventfolder",{"_index":1039,"title":{},"body":{"classes/DatGUIMenuUI.html":{},"classes/PhoenixMenuUI.html":{}}}],["eventfolderstate",{"_index":1835,"title":{},"body":{"classes/PhoenixMenuUI.html":{}}}],["eventkey",{"_index":2958,"title":{},"body":{"interfaces/Window.html":{}}}],["eventkeys",{"_index":2936,"title":{},"body":{"interfaces/Window.html":{}}}],["eventmetadata",{"_index":2396,"title":{},"body":{"classes/StateManager.html":{}}}],["eventnumber",{"_index":2413,"title":{},"body":{"classes/StateManager.html":{}}}],["eventobject",{"_index":330,"title":{},"body":{"interfaces/AnimationPreset.html":{}}}],["eventobject.geometry",{"_index":335,"title":{},"body":{"interfaces/AnimationPreset.html":{}}}],["eventobject.geometry.attributes['position'].array",{"_index":392,"title":{},"body":{"interfaces/AnimationPreset.html":{}}}],["eventobject.geometry.boundingsphere.center",{"_index":387,"title":{},"body":{"interfaces/AnimationPreset.html":{}}}],["eventobject.geometry.computeboundingsphere",{"_index":394,"title":{},"body":{"interfaces/AnimationPreset.html":{}}}],["eventobject.geometry.deleteattribute('position",{"_index":393,"title":{},"body":{"interfaces/AnimationPreset.html":{}}}],["eventobject.geometry.drawrange",{"_index":363,"title":{},"body":{"interfaces/AnimationPreset.html":{}}}],["eventobject.geometry.drawrange.count",{"_index":361,"title":{},"body":{"interfaces/AnimationPreset.html":{}}}],["eventobject.geometry.setdrawrange(0",{"_index":362,"title":{},"body":{"interfaces/AnimationPreset.html":{}}}],["eventobject.geometry?.attributes?.position?.count",{"_index":349,"title":{},"body":{"interfaces/AnimationPreset.html":{}}}],["eventobject.material",{"_index":456,"title":{},"body":{"interfaces/AnimationPreset.html":{}}}],["eventobject.material.clippingplanes",{"_index":457,"title":{},"body":{"interfaces/AnimationPreset.html":{}}}],["eventobject.material.progress",{"_index":355,"title":{},"body":{"interfaces/AnimationPreset.html":{}}}],["eventobject.name",{"_index":340,"title":{},"body":{"interfaces/AnimationPreset.html":{}}}],["eventobject.position",{"_index":380,"title":{},"body":{"interfaces/AnimationPreset.html":{}}}],["eventobject.position.equals",{"_index":385,"title":{},"body":{"interfaces/AnimationPreset.html":{}}}],["eventobject.scale.setscalar(updatedscale.x",{"_index":375,"title":{},"body":{"interfaces/AnimationPreset.html":{}}}],["eventobject.scale.x",{"_index":368,"title":{},"body":{"interfaces/AnimationPreset.html":{}}}],["eventobject.scale.y",{"_index":369,"title":{},"body":{"interfaces/AnimationPreset.html":{}}}],["eventobject.scale.z",{"_index":370,"title":{},"body":{"interfaces/AnimationPreset.html":{}}}],["eventobject.visible",{"_index":401,"title":{},"body":{"interfaces/AnimationPreset.html":{}}}],["eventobjecttween",{"_index":356,"title":{},"body":{"interfaces/AnimationPreset.html":{}}}],["eventobjecttween.oncomplete",{"_index":358,"title":{},"body":{"interfaces/AnimationPreset.html":{}}}],["events",{"_index":1414,"title":{},"body":{"interfaces/EventDataLoader.html":{},"classes/SelectionManager.html":{},"classes/URLOptionsManager.html":{},"interfaces/Window.html":{},"changelog.html":{}}}],["eventsdata",{"_index":1415,"title":{},"body":{"interfaces/EventDataLoader.html":{},"interfaces/Window.html":{}}}],["eventtype",{"_index":893,"title":{},"body":{"interfaces/Configuration.html":{}}}],["example",{"_index":1093,"title":{},"body":{"classes/DatGUIMenuUI.html":{},"classes/PhoenixMenuUI.html":{},"interfaces/PhoenixUI.html":{}}}],["examples",{"_index":3815,"title":{},"body":{"index.html":{}}}],["except",{"_index":3364,"title":{},"body":{"changelog.html":{}}}],["exception",{"_index":3893,"title":{},"body":{"miscellaneous/variables.html":{}}}],["existing",{"_index":2951,"title":{},"body":{"interfaces/Window.html":{}}}],["exists",{"_index":347,"title":{},"body":{"interfaces/AnimationPreset.html":{},"classes/ColorOptions.html":{},"classes/DatGUIMenuUI.html":{},"classes/PhoenixMenuUI.html":{},"interfaces/PhoenixUI.html":{},"classes/ScriptLoader.html":{}}}],["experiment",{"_index":923,"title":{},"body":{"classes/CoordinateHelper.html":{},"interfaces/EventDataLoader.html":{},"classes/URLOptionsManager.html":{},"interfaces/Window.html":{},"index.html":{},"properties.html":{}}}],["experimental",{"_index":934,"title":{},"body":{"classes/CoordinateHelper.html":{}}}],["experimentinfo",{"_index":2765,"title":{},"body":{"classes/URLOptionsManager.html":{}}}],["experiments",{"_index":3651,"title":{},"body":{"changelog.html":{}}}],["export",{"_index":152,"title":{},"body":{"classes/ARManager.html":{},"classes/ActiveVariable.html":{},"interfaces/AnimationPreset.html":{},"classes/CMSObjects.html":{},"classes/ColorManager.html":{},"classes/ColorOptions.html":{},"interfaces/Configuration.html":{},"classes/CoordinateHelper.html":{},"classes/Cut.html":{},"classes/DatGUIMenuUI.html":{},"classes/EffectsManager.html":{},"interfaces/EventDataLoader.html":{},"classes/ExportManager.html":{},"classes/Field.html":{},"classes/InfoLogger.html":{},"classes/LoadingManager.html":{},"classes/PhoenixMenuNode.html":{},"classes/PhoenixMenuUI.html":{},"interfaces/PhoenixUI.html":{},"classes/PresetView.html":{},"classes/PrettySymbols.html":{},"classes/RKHelper.html":{},"classes/RendererManager.html":{},"classes/RungeKutta.html":{},"classes/ScriptLoader.html":{},"classes/SelectionManager.html":{},"classes/State.html":{},"classes/StateManager.html":{},"classes/TracksMaterial.html":{},"classes/TracksMesh.html":{},"classes/URLOptionsManager.html":{},"classes/VRManager.html":{},"interfaces/Window.html":{},"classes/XRManager.html":{}}}],["exported",{"_index":1433,"title":{},"body":{"classes/ExportManager.html":{}}}],["exporter",{"_index":1452,"title":{},"body":{"classes/ExportManager.html":{}}}],["exporter.parse",{"_index":1465,"title":{},"body":{"classes/ExportManager.html":{}}}],["exporter.parse(scene",{"_index":1454,"title":{},"body":{"classes/ExportManager.html":{}}}],["exportmanager",{"_index":1419,"title":{"classes/ExportManager.html":{}},"body":{"classes/ExportManager.html":{},"coverage.html":{}}}],["exportphoenixdisplay",{"_index":3003,"title":{},"body":{"interfaces/Window.html":{}}}],["exportphoenixscene",{"_index":1421,"title":{},"body":{"classes/ExportManager.html":{}}}],["exportphoenixscene(scene",{"_index":1426,"title":{},"body":{"classes/ExportManager.html":{}}}],["exports",{"_index":1428,"title":{},"body":{"classes/ExportManager.html":{},"interfaces/Window.html":{}}}],["exportscenetoobj",{"_index":1422,"title":{},"body":{"classes/ExportManager.html":{}}}],["exportscenetoobj(scene",{"_index":1435,"title":{},"body":{"classes/ExportManager.html":{}}}],["exporttoobj",{"_index":2990,"title":{},"body":{"interfaces/Window.html":{}}}],["extend",{"_index":3395,"title":{},"body":{"changelog.html":{}}}],["extends",{"_index":14,"title":{},"body":{"classes/ARManager.html":{},"classes/TracksMaterial.html":{},"classes/TracksMesh.html":{},"classes/VRManager.html":{}}}],["extension",{"_index":3486,"title":{},"body":{"changelog.html":{}}}],["external",{"_index":2194,"title":{},"body":{"classes/ScriptLoader.html":{}}}],["externalize",{"_index":3304,"title":{},"body":{"changelog.html":{}}}],["extra",{"_index":1902,"title":{},"body":{"classes/PhoenixMenuUI.html":{}}}],["extraanimationsphereduration",{"_index":322,"title":{},"body":{"interfaces/AnimationPreset.html":{}}}],["extract",{"_index":2725,"title":{},"body":{"classes/URLOptionsManager.html":{}}}],["extrapolate",{"_index":2043,"title":{},"body":{"classes/RKHelper.html":{}}}],["extrapolated",{"_index":2046,"title":{},"body":{"classes/RKHelper.html":{}}}],["extrapolatetrackpositions",{"_index":2038,"title":{},"body":{"classes/RKHelper.html":{}}}],["extrapolatetrackpositions(track",{"_index":2041,"title":{},"body":{"classes/RKHelper.html":{}}}],["extrapolating",{"_index":336,"title":{},"body":{"interfaces/AnimationPreset.html":{}}}],["extrapolation",{"_index":2050,"title":{},"body":{"classes/RKHelper.html":{},"changelog.html":{}}}],["extrapolationlimit",{"_index":2039,"title":{},"body":{"classes/RKHelper.html":{},"changelog.html":{}}}],["extrapolationlimit(pos",{"_index":2047,"title":{},"body":{"classes/RKHelper.html":{}}}],["extrapolator",{"_index":2049,"title":{},"body":{"classes/RKHelper.html":{}}}],["f1d2cef",{"_index":3458,"title":{},"body":{"changelog.html":{}}}],["f2376cc",{"_index":3286,"title":{},"body":{"changelog.html":{}}}],["f279898",{"_index":3512,"title":{},"body":{"changelog.html":{}}}],["f2ed0a3",{"_index":3294,"title":{},"body":{"changelog.html":{}}}],["f40beac",{"_index":3217,"title":{},"body":{"changelog.html":{}}}],["f41920b",{"_index":3437,"title":{},"body":{"changelog.html":{}}}],["f4c2e31",{"_index":3619,"title":{},"body":{"changelog.html":{}}}],["f7cd6b4",{"_index":3540,"title":{},"body":{"changelog.html":{}}}],["f87c587",{"_index":3686,"title":{},"body":{"changelog.html":{}}}],["f8a0080",{"_index":3501,"title":{},"body":{"changelog.html":{}}}],["f94c0e4",{"_index":3623,"title":{},"body":{"changelog.html":{}}}],["f97e615",{"_index":3212,"title":{},"body":{"changelog.html":{}}}],["faces",{"_index":567,"title":{},"body":{"classes/CMSObjects.html":{}}}],["faces.map((face",{"_index":569,"title":{},"body":{"classes/CMSObjects.html":{}}}],["facing",{"_index":2860,"title":{},"body":{"classes/VRManager.html":{}}}],["factor",{"_index":3045,"title":{},"body":{"interfaces/Window.html":{}}}],["failed",{"_index":3680,"title":{},"body":{"changelog.html":{}}}],["fallback",{"_index":2653,"title":{},"body":{"classes/URLOptionsManager.html":{}}}],["false",{"_index":107,"title":{},"body":{"classes/ARManager.html":{},"interfaces/AnimationPreset.html":{},"classes/DatGUIMenuUI.html":{},"classes/Field.html":{},"classes/PhoenixMenuNode.html":{},"classes/PhoenixMenuUI.html":{},"classes/RKHelper.html":{},"classes/RendererManager.html":{},"classes/RungeKutta.html":{},"classes/SelectionManager.html":{},"classes/State.html":{},"classes/StateManager.html":{},"classes/URLOptionsManager.html":{},"classes/VRManager.html":{},"interfaces/Window.html":{},"classes/XRManager.html":{},"miscellaneous/variables.html":{}}}],["fbd584e",{"_index":3591,"title":{},"body":{"changelog.html":{}}}],["fc4ae96",{"_index":3180,"title":{},"body":{"changelog.html":{}}}],["fdd492a",{"_index":3412,"title":{},"body":{"changelog.html":{}}}],["fe0b2e6",{"_index":3607,"title":{},"body":{"changelog.html":{}}}],["features",{"_index":105,"title":{},"body":{"classes/ARManager.html":{},"classes/VRManager.html":{},"classes/XRManager.html":{},"changelog.html":{}}}],["fetch",{"_index":2688,"title":{},"body":{"classes/URLOptionsManager.html":{}}}],["fetch('path/to/event",{"_index":3801,"title":{},"body":{"index.html":{}}}],["fetch(fileurl)).arraybuffer",{"_index":2732,"title":{},"body":{"classes/URLOptionsManager.html":{}}}],["fetch(fileurl)).json",{"_index":2729,"title":{},"body":{"classes/URLOptionsManager.html":{}}}],["fetch(fileurl)).text",{"_index":2723,"title":{},"body":{"classes/URLOptionsManager.html":{}}}],["fetch(this.urloptions.get('config",{"_index":2703,"title":{},"body":{"classes/URLOptionsManager.html":{}}}],["ff0000",{"_index":728,"title":{},"body":{"classes/ColorOptions.html":{}}}],["ff10477",{"_index":3666,"title":{},"body":{"changelog.html":{}}}],["ff666e2",{"_index":3523,"title":{},"body":{"changelog.html":{}}}],["ff77aaa",{"_index":3233,"title":{},"body":{"changelog.html":{}}}],["ffffff",{"_index":3063,"title":{},"body":{"interfaces/Window.html":{}}}],["fh",{"_index":1559,"title":{},"body":{"classes/Field.html":{},"classes/RungeKutta.html":{},"classes/State.html":{}}}],["fh2",{"_index":1560,"title":{},"body":{"classes/Field.html":{},"classes/RungeKutta.html":{},"classes/State.html":{}}}],["field",{"_index":983,"title":{"classes/Field.html":{}},"body":{"classes/Cut.html":{},"classes/Field.html":{},"coverage.html":{}}}],["field.get(pos1",{"_index":1531,"title":{},"body":{"classes/Field.html":{},"classes/RungeKutta.html":{},"classes/State.html":{}}}],["field.get(pos2",{"_index":1541,"title":{},"body":{"classes/Field.html":{},"classes/RungeKutta.html":{},"classes/State.html":{}}}],["field.get(state.pos",{"_index":1517,"title":{},"body":{"classes/Field.html":{},"classes/RungeKutta.html":{},"classes/State.html":{}}}],["file",{"_index":5,"title":{},"body":{"classes/ARManager.html":{},"classes/ActiveVariable.html":{},"interfaces/AnimationPreset.html":{},"classes/CMSObjects.html":{},"classes/ColorManager.html":{},"classes/ColorOptions.html":{},"interfaces/Configuration.html":{},"classes/CoordinateHelper.html":{},"classes/Cut.html":{},"classes/DatGUIMenuUI.html":{},"classes/EffectsManager.html":{},"interfaces/EventDataLoader.html":{},"classes/ExportManager.html":{},"classes/Field.html":{},"classes/InfoLogger.html":{},"classes/LoadingManager.html":{},"classes/PhoenixMenuNode.html":{},"classes/PhoenixMenuUI.html":{},"interfaces/PhoenixUI.html":{},"classes/PresetView.html":{},"classes/PrettySymbols.html":{},"classes/RKHelper.html":{},"classes/RendererManager.html":{},"classes/RungeKutta.html":{},"classes/ScriptLoader.html":{},"classes/SelectionManager.html":{},"classes/State.html":{},"classes/StateManager.html":{},"classes/TracksMaterial.html":{},"classes/TracksMesh.html":{},"classes/URLOptionsManager.html":{},"classes/VRManager.html":{},"interfaces/Window.html":{},"classes/XRManager.html":{},"changelog.html":{},"coverage.html":{},"index.html":{},"miscellaneous/variables.html":{}}}],["file.readobject(objectname",{"_index":3037,"title":{},"body":{"interfaces/Window.html":{}}}],["filebuffer",{"_index":2731,"title":{},"body":{"classes/URLOptionsManager.html":{}}}],["filedata",{"_index":2722,"title":{},"body":{"classes/URLOptionsManager.html":{},"miscellaneous/variables.html":{}}}],["filename",{"_index":2735,"title":{},"body":{"classes/URLOptionsManager.html":{},"interfaces/Window.html":{},"miscellaneous/variables.html":{}}}],["filename.endswith('.json",{"_index":2746,"title":{},"body":{"classes/URLOptionsManager.html":{}}}],["filename.endswith('.xml",{"_index":2751,"title":{},"body":{"classes/URLOptionsManager.html":{}}}],["filename.startswith('jivexml",{"_index":2752,"title":{},"body":{"classes/URLOptionsManager.html":{}}}],["filepath",{"_index":3931,"title":{},"body":{"miscellaneous/variables.html":{}}}],["filereader",{"_index":3911,"title":{},"body":{"miscellaneous/variables.html":{}}}],["files",{"_index":2667,"title":{},"body":{"classes/URLOptionsManager.html":{},"changelog.html":{}}}],["fileswithdata",{"_index":2734,"title":{},"body":{"classes/URLOptionsManager.html":{},"miscellaneous/variables.html":{}}}],["fileswithdata[filepath",{"_index":3934,"title":{},"body":{"miscellaneous/variables.html":{}}}],["fileurl",{"_index":2660,"title":{},"body":{"classes/URLOptionsManager.html":{}}}],["filter",{"_index":994,"title":{},"body":{"classes/Cut.html":{},"classes/DatGUIMenuUI.html":{},"classes/PhoenixMenuUI.html":{},"interfaces/PhoenixUI.html":{},"changelog.html":{}}}],["filter((filename",{"_index":2745,"title":{},"body":{"classes/URLOptionsManager.html":{}}}],["filter((val",{"_index":2352,"title":{},"body":{"classes/SelectionManager.html":{}}}],["filtered",{"_index":995,"title":{},"body":{"classes/Cut.html":{}}}],["filters",{"_index":977,"title":{},"body":{"classes/Cut.html":{}}}],["finally",{"_index":2708,"title":{},"body":{"classes/URLOptionsManager.html":{},"changelog.html":{}}}],["finalposition",{"_index":2572,"title":{},"body":{"classes/TracksMaterial.html":{},"classes/TracksMesh.html":{}}}],["finalposition.w",{"_index":2580,"title":{},"body":{"classes/TracksMaterial.html":{},"classes/TracksMesh.html":{}}}],["finalposition.xy",{"_index":2579,"title":{},"body":{"classes/TracksMaterial.html":{},"classes/TracksMesh.html":{}}}],["find",{"_index":1724,"title":{},"body":{"classes/PhoenixMenuNode.html":{},"classes/PhoenixMenuUI.html":{},"classes/URLOptionsManager.html":{}}}],["finding",{"_index":2280,"title":{},"body":{"classes/SelectionManager.html":{}}}],["findintree",{"_index":1690,"title":{},"body":{"classes/PhoenixMenuNode.html":{}}}],["findintree(name",{"_index":1722,"title":{},"body":{"classes/PhoenixMenuNode.html":{}}}],["findintreeorcreate",{"_index":1691,"title":{},"body":{"classes/PhoenixMenuNode.html":{}}}],["findintreeorcreate(name",{"_index":1727,"title":{},"body":{"classes/PhoenixMenuNode.html":{}}}],["finished",{"_index":1646,"title":{},"body":{"classes/LoadingManager.html":{}}}],["first",{"_index":320,"title":{},"body":{"interfaces/AnimationPreset.html":{},"classes/Field.html":{},"classes/RendererManager.html":{},"classes/RungeKutta.html":{},"classes/State.html":{},"interfaces/Window.html":{}}}],["firsttween",{"_index":531,"title":{},"body":{"interfaces/AnimationPreset.html":{}}}],["firsttween.start",{"_index":542,"title":{},"body":{"interfaces/AnimationPreset.html":{}}}],["fit",{"_index":2923,"title":{},"body":{"interfaces/Window.html":{}}}],["fitting",{"_index":2917,"title":{},"body":{"interfaces/Window.html":{}}}],["fix",{"_index":3216,"title":{},"body":{"changelog.html":{}}}],["fixed",{"_index":2103,"title":{},"body":{"classes/RendererManager.html":{},"interfaces/Window.html":{},"changelog.html":{}}}],["fixedoverlay",{"_index":2082,"title":{},"body":{"classes/RendererManager.html":{}}}],["fixes",{"_index":3096,"title":{},"body":{"interfaces/Window.html":{},"changelog.html":{}}}],["fixing",{"_index":3635,"title":{},"body":{"changelog.html":{}}}],["fixoverlayview(fixed",{"_index":3097,"title":{},"body":{"interfaces/Window.html":{}}}],["flat",{"_index":2558,"title":{},"body":{"classes/TracksMaterial.html":{},"classes/TracksMesh.html":{},"interfaces/Window.html":{},"changelog.html":{}}}],["float",{"_index":2554,"title":{},"body":{"classes/TracksMaterial.html":{},"classes/TracksMesh.html":{}}}],["float32array([].concat(...reachedhits",{"_index":420,"title":{},"body":{"interfaces/AnimationPreset.html":{}}}],["float32array(allfacepositions",{"_index":592,"title":{},"body":{"classes/CMSObjects.html":{}}}],["float32array(this.colors",{"_index":2520,"title":{},"body":{"classes/TracksMaterial.html":{},"classes/TracksMesh.html":{}}}],["float32array(this.counter",{"_index":2521,"title":{},"body":{"classes/TracksMaterial.html":{},"classes/TracksMesh.html":{}}}],["float32array(this.next",{"_index":2517,"title":{},"body":{"classes/TracksMaterial.html":{},"classes/TracksMesh.html":{}}}],["float32array(this.positions",{"_index":2515,"title":{},"body":{"classes/TracksMaterial.html":{},"classes/TracksMesh.html":{}}}],["float32array(this.previous",{"_index":2516,"title":{},"body":{"classes/TracksMaterial.html":{},"classes/TracksMesh.html":{}}}],["float32array(this.side",{"_index":2518,"title":{},"body":{"classes/TracksMaterial.html":{},"classes/TracksMesh.html":{}}}],["floor",{"_index":2811,"title":{},"body":{"classes/VRManager.html":{}}}],["folder",{"_index":707,"title":{},"body":{"classes/ColorOptions.html":{},"classes/DatGUIMenuUI.html":{},"classes/PhoenixMenuUI.html":{},"interfaces/PhoenixUI.html":{},"interfaces/Window.html":{},"changelog.html":{}}}],["folders",{"_index":1108,"title":{},"body":{"classes/DatGUIMenuUI.html":{},"classes/PhoenixMenuUI.html":{},"interfaces/PhoenixUI.html":{},"interfaces/Window.html":{}}}],["force",{"_index":878,"title":{},"body":{"interfaces/Configuration.html":{}}}],["forcecolourtheme",{"_index":861,"title":{},"body":{"interfaces/Configuration.html":{}}}],["foreach((filename",{"_index":2747,"title":{},"body":{"classes/URLOptionsManager.html":{}}}],["foreach((groupname",{"_index":184,"title":{},"body":{"classes/ARManager.html":{}}}],["form",{"_index":3519,"title":{},"body":{"changelog.html":{}}}],["format",{"_index":1429,"title":{},"body":{"classes/ExportManager.html":{},"interfaces/Window.html":{},"changelog.html":{},"index.html":{}}}],["formatted",{"_index":3694,"title":{},"body":{"changelog.html":{}}}],["forming",{"_index":237,"title":{},"body":{"interfaces/AnimationPreset.html":{}}}],["found",{"_index":1726,"title":{},"body":{"classes/PhoenixMenuNode.html":{}}}],["fragment",{"_index":2598,"title":{},"body":{"classes/TracksMaterial.html":{},"classes/TracksMesh.html":{}}}],["fragmentshader",{"_index":2607,"title":{},"body":{"classes/TracksMaterial.html":{},"classes/TracksMesh.html":{}}}],["front",{"_index":571,"title":{},"body":{"classes/CMSObjects.html":{}}}],["front_1",{"_index":577,"title":{},"body":{"classes/CMSObjects.html":{}}}],["front_2",{"_index":573,"title":{},"body":{"classes/CMSObjects.html":{}}}],["front_3",{"_index":574,"title":{},"body":{"classes/CMSObjects.html":{}}}],["front_4",{"_index":576,"title":{},"body":{"classes/CMSObjects.html":{}}}],["full",{"_index":3239,"title":{},"body":{"changelog.html":{}}}],["function",{"_index":94,"title":{},"body":{"classes/ARManager.html":{},"classes/ActiveVariable.html":{},"interfaces/AnimationPreset.html":{},"classes/ColorManager.html":{},"classes/DatGUIMenuUI.html":{},"classes/EffectsManager.html":{},"classes/Field.html":{},"classes/LoadingManager.html":{},"classes/PhoenixMenuNode.html":{},"classes/PhoenixMenuUI.html":{},"interfaces/PhoenixUI.html":{},"classes/RKHelper.html":{},"classes/RungeKutta.html":{},"classes/SelectionManager.html":{},"classes/State.html":{},"classes/TracksMaterial.html":{},"classes/TracksMesh.html":{},"classes/VRManager.html":{},"interfaces/Window.html":{},"classes/XRManager.html":{},"changelog.html":{},"miscellaneous/typealiases.html":{}}}],["functionality",{"_index":1392,"title":{},"body":{"interfaces/EventDataLoader.html":{},"classes/ExportManager.html":{},"interfaces/Window.html":{}}}],["functions",{"_index":261,"title":{},"body":{"interfaces/AnimationPreset.html":{},"classes/ColorManager.html":{},"classes/ColorOptions.html":{},"classes/DatGUIMenuUI.html":{},"classes/PhoenixMenuUI.html":{},"interfaces/PhoenixUI.html":{},"classes/PrettySymbols.html":{},"classes/RKHelper.html":{},"classes/RendererManager.html":{},"classes/SelectionManager.html":{},"interfaces/Window.html":{},"changelog.html":{},"index.html":{}}}],["general",{"_index":3401,"title":{},"body":{"changelog.html":{}}}],["generalize",{"_index":3468,"title":{},"body":{"changelog.html":{}}}],["generate",{"_index":1462,"title":{},"body":{"classes/ExportManager.html":{},"index.html":{}}}],["generation",{"_index":315,"title":{},"body":{"interfaces/AnimationPreset.html":{},"interfaces/Window.html":{}}}],["generic",{"_index":3287,"title":{},"body":{"changelog.html":{}}}],["geom",{"_index":3060,"title":{},"body":{"interfaces/Window.html":{}}}],["geometrical",{"_index":3497,"title":{},"body":{"changelog.html":{}}}],["geometries",{"_index":1064,"title":{},"body":{"classes/DatGUIMenuUI.html":{},"interfaces/EventDataLoader.html":{},"classes/ExportManager.html":{},"classes/PhoenixMenuUI.html":{},"interfaces/Window.html":{},"changelog.html":{}}}],["geometries.children.foreach((object",{"_index":1482,"title":{},"body":{"classes/ExportManager.html":{}}}],["geometries/event",{"_index":3092,"title":{},"body":{"interfaces/Window.html":{}}}],["geometriesconfig",{"_index":1473,"title":{},"body":{"classes/ExportManager.html":{}}}],["geometriesconfig.push(object.name",{"_index":1483,"title":{},"body":{"classes/ExportManager.html":{}}}],["geometry",{"_index":344,"title":{},"body":{"interfaces/AnimationPreset.html":{},"classes/CMSObjects.html":{},"classes/DatGUIMenuUI.html":{},"classes/PhoenixMenuUI.html":{},"interfaces/PhoenixUI.html":{},"classes/VRManager.html":{},"interfaces/Window.html":{},"changelog.html":{},"index.html":{},"miscellaneous/typealiases.html":{}}}],["geometry.computeboundingsphere",{"_index":421,"title":{},"body":{"interfaces/AnimationPreset.html":{}}}],["geometry.setattribute",{"_index":419,"title":{},"body":{"interfaces/AnimationPreset.html":{}}}],["geometry/event",{"_index":3088,"title":{},"body":{"interfaces/Window.html":{}}}],["geometryposcount",{"_index":348,"title":{},"body":{"interfaces/AnimationPreset.html":{}}}],["geometryuiparameters",{"_index":3843,"title":{},"body":{"miscellaneous/typealiases.html":{}}}],["geomfolder",{"_index":1040,"title":{},"body":{"classes/DatGUIMenuUI.html":{},"classes/PhoenixMenuUI.html":{}}}],["get(field",{"_index":1487,"title":{},"body":{"classes/Field.html":{}}}],["getactiveobjectid",{"_index":2245,"title":{},"body":{"classes/SelectionManager.html":{},"interfaces/Window.html":{}}}],["getcamera",{"_index":3155,"title":{},"body":{"classes/XRManager.html":{}}}],["getcameragroup",{"_index":39,"title":{},"body":{"classes/ARManager.html":{},"classes/VRManager.html":{},"classes/XRManager.html":{}}}],["getcameragroup(camera",{"_index":122,"title":{},"body":{"classes/ARManager.html":{},"classes/VRManager.html":{},"classes/XRManager.html":{}}}],["getcameratween",{"_index":268,"title":{},"body":{"interfaces/AnimationPreset.html":{}}}],["getcollection",{"_index":1374,"title":{},"body":{"interfaces/EventDataLoader.html":{}}}],["getcollection(collectionname",{"_index":1399,"title":{},"body":{"interfaces/EventDataLoader.html":{},"interfaces/Window.html":{}}}],["getcollections",{"_index":1375,"title":{},"body":{"interfaces/EventDataLoader.html":{},"interfaces/Window.html":{}}}],["getcompound",{"_index":3402,"title":{},"body":{"changelog.html":{}}}],["getelementbyid('embedmenu",{"_index":2770,"title":{},"body":{"classes/URLOptionsManager.html":{}}}],["getelementbyid('three",{"_index":2313,"title":{},"body":{"classes/SelectionManager.html":{}}}],["getelementbyid(singleid",{"_index":2776,"title":{},"body":{"classes/URLOptionsManager.html":{}}}],["geteventdatatypefolder",{"_index":1054,"title":{},"body":{"classes/DatGUIMenuUI.html":{},"classes/PhoenixMenuUI.html":{},"interfaces/PhoenixUI.html":{}}}],["geteventdatatypefolder(typename",{"_index":1109,"title":{},"body":{"classes/DatGUIMenuUI.html":{},"classes/PhoenixMenuUI.html":{},"interfaces/PhoenixUI.html":{}}}],["geteventmetadata",{"_index":1376,"title":{},"body":{"interfaces/EventDataLoader.html":{},"interfaces/Window.html":{}}}],["geteventslist",{"_index":1377,"title":{},"body":{"interfaces/EventDataLoader.html":{}}}],["geteventslist(eventsdata",{"_index":1411,"title":{},"body":{"interfaces/EventDataLoader.html":{}}}],["getfromlocalstorage",{"_index":3722,"title":{},"body":{"coverage.html":{},"miscellaneous/variables.html":{}}}],["gethitspositions(positions",{"_index":526,"title":{},"body":{"interfaces/AnimationPreset.html":{}}}],["geticonurl",{"_index":1962,"title":{},"body":{"classes/PresetView.html":{}}}],["getinfologger",{"_index":2718,"title":{},"body":{"classes/URLOptionsManager.html":{},"interfaces/Window.html":{}}}],["getinfologgerlist",{"_index":1595,"title":{},"body":{"classes/InfoLogger.html":{}}}],["getinstance",{"_index":2399,"title":{},"body":{"classes/StateManager.html":{}}}],["getlabelsobject",{"_index":1378,"title":{},"body":{"interfaces/EventDataLoader.html":{}}}],["getlabeltitle",{"_index":2877,"title":{},"body":{"interfaces/Window.html":{},"coverage.html":{},"miscellaneous/variables.html":{}}}],["getlabeltitle(eventdatatype",{"_index":3124,"title":{},"body":{"interfaces/Window.html":{}}}],["getloadingmanager",{"_index":2963,"title":{},"body":{"interfaces/Window.html":{}}}],["getlocalclipping",{"_index":2088,"title":{},"body":{"classes/RendererManager.html":{}}}],["getmainrenderer",{"_index":2089,"title":{},"body":{"classes/RendererManager.html":{}}}],["getmomentum",{"_index":695,"title":{},"body":{"classes/ColorOptions.html":{}}}],["getmomentum(objectparams",{"_index":760,"title":{},"body":{"classes/ColorOptions.html":{}}}],["getmuon",{"_index":3403,"title":{},"body":{"changelog.html":{}}}],["getmuonchamber",{"_index":551,"title":{},"body":{"classes/CMSObjects.html":{}}}],["getmuonchamber(muonchamberparams",{"_index":552,"title":{},"body":{"classes/CMSObjects.html":{}}}],["getnodestate",{"_index":1692,"title":{},"body":{"classes/PhoenixMenuNode.html":{}}}],["getobjectbyname(collectionname",{"_index":660,"title":{},"body":{"classes/ColorManager.html":{},"classes/DatGUIMenuUI.html":{},"classes/PhoenixMenuUI.html":{}}}],["getobjectbyname(labelid",{"_index":1275,"title":{},"body":{"classes/DatGUIMenuUI.html":{},"classes/PhoenixMenuUI.html":{}}}],["getobjectbyname(scenemanager.event_data_id",{"_index":659,"title":{},"body":{"classes/ColorManager.html":{},"classes/DatGUIMenuUI.html":{},"classes/PhoenixMenuUI.html":{}}}],["getobjectbyname(scenemanager.labels_id",{"_index":1274,"title":{},"body":{"classes/DatGUIMenuUI.html":{},"classes/PhoenixMenuUI.html":{}}}],["getobjectbyname(typename",{"_index":1216,"title":{},"body":{"classes/DatGUIMenuUI.html":{},"classes/PhoenixMenuUI.html":{}}}],["getopeningclippingangle",{"_index":2400,"title":{},"body":{"classes/StateManager.html":{}}}],["getoverlayrenderer",{"_index":2090,"title":{},"body":{"classes/RendererManager.html":{}}}],["getprettyparams",{"_index":1988,"title":{},"body":{"classes/PrettySymbols.html":{}}}],["getprettyparams(params",{"_index":1997,"title":{},"body":{"classes/PrettySymbols.html":{}}}],["getprettysymbol",{"_index":1989,"title":{},"body":{"classes/PrettySymbols.html":{}}}],["getprettysymbol(param",{"_index":2001,"title":{},"body":{"classes/PrettySymbols.html":{}}}],["getrenderers",{"_index":2091,"title":{},"body":{"classes/RendererManager.html":{}}}],["getscene",{"_index":658,"title":{},"body":{"classes/ColorManager.html":{}}}],["getstartclippingangle",{"_index":2401,"title":{},"body":{"classes/StateManager.html":{}}}],["getstatemanager",{"_index":2964,"title":{},"body":{"interfaces/Window.html":{}}}],["getthreemanager",{"_index":2962,"title":{},"body":{"interfaces/Window.html":{}}}],["getting",{"_index":3163,"title":{"changelog.html":{},"index.html":{}},"body":{"changelog.html":{}}}],["gettrackswithrungekutta",{"_index":2040,"title":{},"body":{"classes/RKHelper.html":{}}}],["gettrackswithrungekutta(trackscollectionsevent",{"_index":2054,"title":{},"body":{"classes/RKHelper.html":{}}}],["getuimanager",{"_index":2459,"title":{},"body":{"classes/StateManager.html":{},"interfaces/Window.html":{}}}],["geturloptions",{"_index":2636,"title":{},"body":{"classes/URLOptionsManager.html":{}}}],["geturloptionsmanager",{"_index":2966,"title":{},"body":{"interfaces/Window.html":{}}}],["getxrcamera",{"_index":40,"title":{},"body":{"classes/ARManager.html":{},"classes/VRManager.html":{},"classes/XRManager.html":{}}}],["git",{"_index":3177,"title":{},"body":{"changelog.html":{}}}],["git://github.com/hsf/phoenix.git",{"_index":3827,"title":{},"body":{"properties.html":{}}}],["given",{"_index":144,"title":{},"body":{"classes/ARManager.html":{},"classes/CMSObjects.html":{},"interfaces/Configuration.html":{},"classes/Field.html":{},"classes/PresetView.html":{},"classes/RungeKutta.html":{},"classes/SelectionManager.html":{},"classes/State.html":{},"classes/URLOptionsManager.html":{},"classes/VRManager.html":{},"interfaces/Window.html":{},"classes/XRManager.html":{},"miscellaneous/variables.html":{}}}],["giving",{"_index":2278,"title":{},"body":{"classes/SelectionManager.html":{},"interfaces/Window.html":{}}}],["gl_fragcolor",{"_index":2602,"title":{},"body":{"classes/TracksMaterial.html":{},"classes/TracksMesh.html":{}}}],["gl_position",{"_index":2596,"title":{},"body":{"classes/TracksMaterial.html":{},"classes/TracksMesh.html":{}}}],["global",{"_index":2880,"title":{},"body":{"interfaces/Window.html":{}}}],["globalthis",{"_index":3598,"title":{},"body":{"changelog.html":{}}}],["gltf",{"_index":1463,"title":{},"body":{"classes/ExportManager.html":{},"interfaces/Window.html":{},"changelog.html":{}}}],["gltfexporter",{"_index":1447,"title":{},"body":{"classes/ExportManager.html":{}}}],["go",{"_index":2012,"title":{},"body":{"classes/PrettySymbols.html":{},"interfaces/Window.html":{}}}],["graphic",{"_index":1390,"title":{},"body":{"interfaces/EventDataLoader.html":{}}}],["graphicslibrary",{"_index":1383,"title":{},"body":{"interfaces/EventDataLoader.html":{},"interfaces/Window.html":{}}}],["greater",{"_index":3046,"title":{},"body":{"interfaces/Window.html":{}}}],["grid",{"_index":3536,"title":{},"body":{"changelog.html":{}}}],["group",{"_index":85,"title":{},"body":{"classes/ARManager.html":{},"interfaces/AnimationPreset.html":{},"classes/CMSObjects.html":{},"classes/ColorManager.html":{},"classes/ColorOptions.html":{},"classes/SelectionManager.html":{},"classes/VRManager.html":{},"interfaces/Window.html":{},"classes/XRManager.html":{}}}],["groupnotselected",{"_index":849,"title":{},"body":{"classes/ColorOptions.html":{}}}],["gui",{"_index":1033,"title":{},"body":{"classes/DatGUIMenuUI.html":{},"classes/URLOptionsManager.html":{},"coverage.html":{}}}],["gui.remove",{"_index":1133,"title":{},"body":{"classes/DatGUIMenuUI.html":{}}}],["guidelines",{"_index":3171,"title":{},"body":{"changelog.html":{}}}],["guiparameters",{"_index":1041,"title":{},"body":{"classes/DatGUIMenuUI.html":{}}}],["h",{"_index":1522,"title":{},"body":{"classes/Field.html":{},"classes/RungeKutta.html":{},"classes/State.html":{}}}],["h).cross(b_last",{"_index":1542,"title":{},"body":{"classes/Field.html":{},"classes/RungeKutta.html":{},"classes/State.html":{}}}],["h2",{"_index":1508,"title":{},"body":{"classes/Field.html":{},"classes/RungeKutta.html":{},"classes/State.html":{}}}],["half_h",{"_index":1509,"title":{},"body":{"classes/Field.html":{},"classes/RungeKutta.html":{},"classes/State.html":{}}}],["half_h).cross(b_middle",{"_index":1532,"title":{},"body":{"classes/Field.html":{},"classes/RungeKutta.html":{},"classes/State.html":{}}}],["hand",{"_index":2813,"title":{},"body":{"classes/VRManager.html":{}}}],["handle",{"_index":2659,"title":{},"body":{"classes/URLOptionsManager.html":{},"changelog.html":{}}}],["handlejivexmlevent",{"_index":2637,"title":{},"body":{"classes/URLOptionsManager.html":{}}}],["handlejivexmlevent(fileurl",{"_index":2658,"title":{},"body":{"classes/URLOptionsManager.html":{}}}],["handlejsonevent",{"_index":2638,"title":{},"body":{"classes/URLOptionsManager.html":{}}}],["handlejsonevent(fileurl",{"_index":2663,"title":{},"body":{"classes/URLOptionsManager.html":{}}}],["handlezipfileevents",{"_index":2639,"title":{},"body":{"classes/URLOptionsManager.html":{}}}],["handlezipfileevents(fileurl",{"_index":2664,"title":{},"body":{"classes/URLOptionsManager.html":{}}}],["handling",{"_index":3247,"title":{},"body":{"changelog.html":{}}}],["hash",{"_index":3691,"title":{},"body":{"changelog.html":{}}}],["hasposition",{"_index":384,"title":{},"body":{"interfaces/AnimationPreset.html":{}}}],["height",{"_index":2916,"title":{},"body":{"interfaces/Window.html":{}}}],["helper",{"_index":897,"title":{},"body":{"classes/CoordinateHelper.html":{},"classes/PrettySymbols.html":{},"classes/RKHelper.html":{},"changelog.html":{}}}],["helper.ts",{"_index":896,"title":{},"body":{"classes/CoordinateHelper.html":{},"classes/RKHelper.html":{},"coverage.html":{}}}],["helper.ts:13",{"_index":908,"title":{},"body":{"classes/CoordinateHelper.html":{}}}],["helper.ts:14",{"_index":2048,"title":{},"body":{"classes/RKHelper.html":{}}}],["helper.ts:24",{"_index":2055,"title":{},"body":{"classes/RKHelper.html":{}}}],["helper.ts:25",{"_index":937,"title":{},"body":{"classes/CoordinateHelper.html":{}}}],["helper.ts:35",{"_index":947,"title":{},"body":{"classes/CoordinateHelper.html":{}}}],["helper.ts:44",{"_index":2042,"title":{},"body":{"classes/RKHelper.html":{}}}],["helper.ts:46",{"_index":945,"title":{},"body":{"classes/CoordinateHelper.html":{}}}],["helper.ts:65",{"_index":926,"title":{},"body":{"classes/CoordinateHelper.html":{}}}],["helper.ts:81",{"_index":916,"title":{},"body":{"classes/CoordinateHelper.html":{}}}],["helpers/active",{"_index":2296,"title":{},"body":{"classes/SelectionManager.html":{},"classes/StateManager.html":{},"interfaces/Window.html":{}}}],["helpers/constants",{"_index":563,"title":{},"body":{"classes/CMSObjects.html":{}}}],["helpers/file",{"_index":1450,"title":{},"body":{"classes/ExportManager.html":{},"classes/StateManager.html":{}}}],["helpers/info",{"_index":1418,"title":{},"body":{"interfaces/EventDataLoader.html":{},"classes/SelectionManager.html":{},"interfaces/Window.html":{}}}],["helpers/labels",{"_index":2878,"title":{},"body":{"interfaces/Window.html":{}}}],["helpers/pretty",{"_index":775,"title":{},"body":{"classes/ColorOptions.html":{},"classes/PhoenixMenuUI.html":{},"classes/SelectionManager.html":{}}}],["helpers/zip",{"_index":2678,"title":{},"body":{"classes/URLOptionsManager.html":{}}}],["here",{"_index":941,"title":{},"body":{"classes/CoordinateHelper.html":{}}}],["hex",{"_index":631,"title":{},"body":{"classes/ColorManager.html":{}}}],["hide",{"_index":512,"title":{},"body":{"interfaces/AnimationPreset.html":{},"classes/URLOptionsManager.html":{},"changelog.html":{}}}],["hideidswithurloption",{"_index":2640,"title":{},"body":{"classes/URLOptionsManager.html":{}}}],["hideidswithurloption(urloptionwithids",{"_index":2668,"title":{},"body":{"classes/URLOptionsManager.html":{}}}],["hidewidgets",{"_index":2647,"title":{},"body":{"classes/URLOptionsManager.html":{},"miscellaneous/variables.html":{}}}],["hidewidgetsoptions",{"_index":2761,"title":{},"body":{"classes/URLOptionsManager.html":{}}}],["hiding",{"_index":3626,"title":{},"body":{"changelog.html":{}}}],["hierarchical",{"_index":1875,"title":{},"body":{"classes/PhoenixMenuUI.html":{}}}],["hierarchy",{"_index":2970,"title":{},"body":{"interfaces/Window.html":{}}}],["high",{"_index":2147,"title":{},"body":{"classes/RendererManager.html":{}}}],["higher",{"_index":1877,"title":{},"body":{"classes/PhoenixMenuUI.html":{}}}],["highlight",{"_index":2277,"title":{},"body":{"classes/SelectionManager.html":{},"interfaces/Window.html":{}}}],["highlighting",{"_index":1325,"title":{},"body":{"classes/EffectsManager.html":{},"classes/SelectionManager.html":{}}}],["highlightobject",{"_index":2246,"title":{},"body":{"classes/SelectionManager.html":{}}}],["highlightobject(uuid",{"_index":2275,"title":{},"body":{"classes/SelectionManager.html":{},"interfaces/Window.html":{}}}],["highly",{"_index":3466,"title":{},"body":{"changelog.html":{},"index.html":{}}}],["highvalue",{"_index":1785,"title":{},"body":{"classes/PhoenixMenuNode.html":{},"classes/PhoenixMenuUI.html":{}}}],["hit",{"_index":390,"title":{},"body":{"interfaces/AnimationPreset.html":{},"changelog.html":{}}}],["hitlines",{"_index":3532,"title":{},"body":{"changelog.html":{}}}],["hits",{"_index":389,"title":{},"body":{"interfaces/AnimationPreset.html":{},"classes/DatGUIMenuUI.html":{},"classes/PhoenixMenuUI.html":{},"interfaces/PhoenixUI.html":{},"changelog.html":{},"miscellaneous/variables.html":{}}}],["hitspositions",{"_index":412,"title":{},"body":{"interfaces/AnimationPreset.html":{}}}],["hitspositions.filter((hitposition",{"_index":415,"title":{},"body":{"interfaces/AnimationPreset.html":{}}}],["home",{"_index":3661,"title":{},"body":{"changelog.html":{}}}],["homepage",{"_index":3821,"title":{},"body":{"properties.html":{}}}],["hovered",{"_index":1326,"title":{},"body":{"classes/EffectsManager.html":{},"classes/SelectionManager.html":{}}}],["hovering",{"_index":2255,"title":{},"body":{"classes/SelectionManager.html":{}}}],["html",{"_index":3085,"title":{},"body":{"interfaces/Window.html":{},"index.html":{}}}],["html2canvas",{"_index":3778,"title":{},"body":{"dependencies.html":{}}}],["htmlcanvaselement",{"_index":2133,"title":{},"body":{"classes/RendererManager.html":{},"interfaces/Window.html":{}}}],["htmlelement",{"_index":2200,"title":{},"body":{"classes/ScriptLoader.html":{}}}],["http://github.com/hsf/phoenix/tree/master/packages/phoenix",{"_index":3822,"title":{},"body":{"properties.html":{}}}],["httprequest",{"_index":2867,"title":{},"body":{"interfaces/Window.html":{}}}],["httprequest(url",{"_index":3024,"title":{},"body":{"interfaces/Window.html":{}}}],["https://en.wikipedia.org/wiki/pseudorapidity",{"_index":942,"title":{},"body":{"classes/CoordinateHelper.html":{}}}],["https://github.com/hsf/phoenix/graphs/contributors",{"_index":3830,"title":{},"body":{"properties.html":{}}}],["https://github.com/root",{"_index":3033,"title":{},"body":{"interfaces/Window.html":{}}}],["icon",{"_index":1683,"title":{},"body":{"classes/PhoenixMenuNode.html":{},"classes/PresetView.html":{},"changelog.html":{}}}],["id",{"_index":871,"title":{},"body":{"interfaces/Configuration.html":{},"classes/DatGUIMenuUI.html":{},"interfaces/EventDataLoader.html":{},"classes/LoadingManager.html":{},"classes/PhoenixMenuUI.html":{},"interfaces/PhoenixUI.html":{},"classes/RendererManager.html":{},"classes/TracksMaterial.html":{},"classes/TracksMesh.html":{},"classes/VRManager.html":{},"miscellaneous/variables.html":{}}}],["identifier",{"_index":3715,"title":{},"body":{"coverage.html":{}}}],["identify",{"_index":2205,"title":{},"body":{"classes/ScriptLoader.html":{}}}],["ids",{"_index":2670,"title":{},"body":{"classes/URLOptionsManager.html":{}}}],["idstohide",{"_index":2773,"title":{},"body":{"classes/URLOptionsManager.html":{}}}],["idstohide.foreach((singleid",{"_index":2775,"title":{},"body":{"classes/URLOptionsManager.html":{}}}],["ig",{"_index":3577,"title":{},"body":{"changelog.html":{}}}],["ignore",{"_index":1778,"title":{},"body":{"classes/PhoenixMenuNode.html":{}}}],["ignored",{"_index":2254,"title":{},"body":{"classes/SelectionManager.html":{}}}],["ignorelist",{"_index":2236,"title":{},"body":{"classes/SelectionManager.html":{}}}],["immersive",{"_index":81,"title":{},"body":{"classes/ARManager.html":{},"classes/VRManager.html":{}}}],["implement",{"_index":1943,"title":{},"body":{"interfaces/PhoenixUI.html":{},"changelog.html":{}}}],["implementations",{"_index":3278,"title":{},"body":{"changelog.html":{}}}],["implementing",{"_index":1370,"title":{},"body":{"interfaces/EventDataLoader.html":{}}}],["implements",{"_index":1037,"title":{},"body":{"classes/DatGUIMenuUI.html":{},"classes/PhoenixMenuUI.html":{}}}],["implicitly",{"_index":3707,"title":{},"body":{"changelog.html":{}}}],["import",{"_index":135,"title":{},"body":{"classes/ARManager.html":{},"interfaces/AnimationPreset.html":{},"classes/CMSObjects.html":{},"classes/ColorManager.html":{},"classes/ColorOptions.html":{},"interfaces/Configuration.html":{},"classes/CoordinateHelper.html":{},"classes/DatGUIMenuUI.html":{},"classes/EffectsManager.html":{},"interfaces/EventDataLoader.html":{},"classes/ExportManager.html":{},"classes/Field.html":{},"classes/PhoenixMenuNode.html":{},"classes/PhoenixMenuUI.html":{},"interfaces/PhoenixUI.html":{},"classes/RKHelper.html":{},"classes/RendererManager.html":{},"classes/RungeKutta.html":{},"classes/ScriptLoader.html":{},"classes/SelectionManager.html":{},"classes/State.html":{},"classes/StateManager.html":{},"classes/TracksMaterial.html":{},"classes/TracksMesh.html":{},"classes/URLOptionsManager.html":{},"classes/VRManager.html":{},"interfaces/Window.html":{},"classes/XRManager.html":{},"changelog.html":{},"index.html":{}}}],["importmanager",{"_index":3761,"title":{},"body":{"coverage.html":{}}}],["imports",{"_index":3317,"title":{},"body":{"changelog.html":{}}}],["improve",{"_index":3218,"title":{},"body":{"changelog.html":{}}}],["improvement",{"_index":3460,"title":{},"body":{"changelog.html":{}}}],["improvements",{"_index":3430,"title":{},"body":{"changelog.html":{}}}],["improving",{"_index":3584,"title":{},"body":{"changelog.html":{}}}],["inbounds",{"_index":1580,"title":{},"body":{"classes/Field.html":{},"classes/RKHelper.html":{},"classes/RungeKutta.html":{},"classes/State.html":{}}}],["include",{"_index":709,"title":{},"body":{"classes/ColorOptions.html":{},"index.html":{}}}],["included",{"_index":794,"title":{},"body":{"classes/ColorOptions.html":{},"index.html":{}}}],["including",{"_index":1443,"title":{},"body":{"classes/ExportManager.html":{},"interfaces/Window.html":{},"changelog.html":{}}}],["increase",{"_index":3352,"title":{},"body":{"changelog.html":{}}}],["increases",{"_index":1643,"title":{},"body":{"classes/LoadingManager.html":{}}}],["increment",{"_index":997,"title":{},"body":{"classes/Cut.html":{}}}],["independent",{"_index":3793,"title":{},"body":{"index.html":{},"properties.html":{}}}],["index",{"_index":16,"title":{"index.html":{}},"body":{"classes/ARManager.html":{},"classes/ActiveVariable.html":{},"interfaces/AnimationPreset.html":{},"classes/CMSObjects.html":{},"classes/ColorManager.html":{},"classes/ColorOptions.html":{},"interfaces/Configuration.html":{},"classes/CoordinateHelper.html":{},"classes/Cut.html":{},"classes/DatGUIMenuUI.html":{},"classes/EffectsManager.html":{},"interfaces/EventDataLoader.html":{},"classes/ExportManager.html":{},"classes/Field.html":{},"classes/InfoLogger.html":{},"classes/LoadingManager.html":{},"classes/PhoenixMenuNode.html":{},"classes/PhoenixMenuUI.html":{},"interfaces/PhoenixUI.html":{},"classes/PresetView.html":{},"classes/PrettySymbols.html":{},"classes/RKHelper.html":{},"classes/RendererManager.html":{},"classes/RungeKutta.html":{},"classes/ScriptLoader.html":{},"classes/SelectionManager.html":{},"classes/State.html":{},"classes/StateManager.html":{},"classes/TracksMaterial.html":{},"classes/TracksMesh.html":{},"classes/URLOptionsManager.html":{},"classes/VRManager.html":{},"interfaces/Window.html":{},"classes/XRManager.html":{},"miscellaneous/enumerations.html":{},"miscellaneous/typealiases.html":{},"miscellaneous/variables.html":{}}}],["indexincollection",{"_index":1380,"title":{},"body":{"interfaces/EventDataLoader.html":{},"interfaces/Window.html":{}}}],["indices",{"_index":2481,"title":{},"body":{"classes/TracksMaterial.html":{},"classes/TracksMesh.html":{}}}],["indices_array",{"_index":2482,"title":{},"body":{"classes/TracksMaterial.html":{},"classes/TracksMesh.html":{}}}],["infinity",{"_index":352,"title":{},"body":{"interfaces/AnimationPreset.html":{}}}],["info",{"_index":3,"title":{},"body":{"classes/ARManager.html":{},"classes/ActiveVariable.html":{},"interfaces/AnimationPreset.html":{},"classes/CMSObjects.html":{},"classes/ColorManager.html":{},"classes/ColorOptions.html":{},"interfaces/Configuration.html":{},"classes/CoordinateHelper.html":{},"classes/Cut.html":{},"classes/DatGUIMenuUI.html":{},"classes/EffectsManager.html":{},"interfaces/EventDataLoader.html":{},"classes/ExportManager.html":{},"classes/Field.html":{},"classes/InfoLogger.html":{},"classes/LoadingManager.html":{},"classes/PhoenixMenuNode.html":{},"classes/PhoenixMenuUI.html":{},"interfaces/PhoenixUI.html":{},"classes/PresetView.html":{},"classes/PrettySymbols.html":{},"classes/RKHelper.html":{},"classes/RendererManager.html":{},"classes/RungeKutta.html":{},"classes/ScriptLoader.html":{},"classes/SelectionManager.html":{},"classes/State.html":{},"classes/StateManager.html":{},"classes/TracksMaterial.html":{},"classes/TracksMesh.html":{},"classes/URLOptionsManager.html":{},"classes/VRManager.html":{},"interfaces/Window.html":{},"classes/XRManager.html":{},"changelog.html":{}}}],["infologger",{"_index":1385,"title":{"classes/InfoLogger.html":{}},"body":{"interfaces/EventDataLoader.html":{},"classes/InfoLogger.html":{},"classes/SelectionManager.html":{},"interfaces/Window.html":{},"coverage.html":{}}}],["infologgerlist",{"_index":1593,"title":{},"body":{"classes/InfoLogger.html":{}}}],["information",{"_index":1601,"title":{},"body":{"classes/InfoLogger.html":{},"classes/SelectionManager.html":{},"interfaces/Window.html":{}}}],["inherited",{"_index":86,"title":{},"body":{"classes/ARManager.html":{},"classes/VRManager.html":{}}}],["init",{"_index":2092,"title":{},"body":{"classes/RendererManager.html":{},"classes/SelectionManager.html":{},"changelog.html":{}}}],["init(camera",{"_index":2281,"title":{},"body":{"classes/SelectionManager.html":{}}}],["init(configuration",{"_index":2896,"title":{},"body":{"interfaces/Window.html":{}}}],["init(elementid",{"_index":2118,"title":{},"body":{"classes/RendererManager.html":{}}}],["initchargecoloroptions",{"_index":696,"title":{},"body":{"classes/ColorOptions.html":{}}}],["initcolorbyoptions",{"_index":697,"title":{},"body":{"classes/ColorOptions.html":{}}}],["initial",{"_index":203,"title":{},"body":{"classes/ActiveVariable.html":{}}}],["initialize",{"_index":715,"title":{},"body":{"classes/ColorOptions.html":{},"classes/EffectsManager.html":{},"classes/RendererManager.html":{},"classes/SelectionManager.html":{},"classes/URLOptionsManager.html":{},"interfaces/Window.html":{},"changelog.html":{},"index.html":{}}}],["initialized",{"_index":2257,"title":{},"body":{"classes/SelectionManager.html":{}}}],["initializes",{"_index":3087,"title":{},"body":{"interfaces/Window.html":{}}}],["initializing",{"_index":2102,"title":{},"body":{"classes/RendererManager.html":{}}}],["initially",{"_index":2975,"title":{},"body":{"interfaces/Window.html":{}}}],["initiallyvisible",{"_index":2974,"title":{},"body":{"interfaces/Window.html":{}}}],["initmomcoloroptions",{"_index":698,"title":{},"body":{"classes/ColorOptions.html":{}}}],["initrenderer",{"_index":2093,"title":{},"body":{"classes/RendererManager.html":{}}}],["initrenderer(elementid",{"_index":2121,"title":{},"body":{"classes/RendererManager.html":{}}}],["initxr(xrsessiontype",{"_index":2931,"title":{},"body":{"interfaces/Window.html":{}}}],["input",{"_index":1461,"title":{},"body":{"classes/ExportManager.html":{},"interfaces/Window.html":{},"changelog.html":{},"miscellaneous/variables.html":{}}}],["inputfile",{"_index":3902,"title":{},"body":{"miscellaneous/variables.html":{}}}],["inputfile.accept",{"_index":3905,"title":{},"body":{"miscellaneous/variables.html":{}}}],["inputfile.click",{"_index":3916,"title":{},"body":{"miscellaneous/variables.html":{}}}],["inputfile.onchange",{"_index":3906,"title":{},"body":{"miscellaneous/variables.html":{}}}],["inputfile.remove",{"_index":3914,"title":{},"body":{"miscellaneous/variables.html":{}}}],["inputfile.type",{"_index":3904,"title":{},"body":{"miscellaneous/variables.html":{}}}],["inside",{"_index":628,"title":{},"body":{"classes/ColorManager.html":{},"classes/EffectsManager.html":{},"interfaces/EventDataLoader.html":{},"classes/InfoLogger.html":{},"classes/SelectionManager.html":{},"interfaces/Window.html":{},"changelog.html":{}}}],["install",{"_index":3796,"title":{},"body":{"index.html":{}}}],["instance",{"_index":734,"title":{},"body":{"classes/ColorOptions.html":{},"classes/LoadingManager.html":{},"classes/StateManager.html":{},"interfaces/Window.html":{}}}],["instanceof",{"_index":353,"title":{},"body":{"interfaces/AnimationPreset.html":{}}}],["instantiate",{"_index":1451,"title":{},"body":{"classes/ExportManager.html":{}}}],["instead",{"_index":1762,"title":{},"body":{"classes/PhoenixMenuNode.html":{}}}],["int",{"_index":2553,"title":{},"body":{"classes/TracksMaterial.html":{},"classes/TracksMesh.html":{}}}],["int32array(this.track_id",{"_index":2519,"title":{},"body":{"classes/TracksMaterial.html":{},"classes/TracksMesh.html":{}}}],["integrator",{"_index":1507,"title":{},"body":{"classes/Field.html":{},"classes/RungeKutta.html":{},"classes/State.html":{}}}],["interface",{"_index":219,"title":{"interfaces/AnimationPreset.html":{},"interfaces/Configuration.html":{},"interfaces/EventDataLoader.html":{},"interfaces/PhoenixUI.html":{},"interfaces/Window.html":{}},"body":{"interfaces/AnimationPreset.html":{},"interfaces/Configuration.html":{},"interfaces/EventDataLoader.html":{},"interfaces/PhoenixUI.html":{},"interfaces/Window.html":{},"changelog.html":{},"coverage.html":{}}}],["interfaces",{"_index":221,"title":{},"body":{"interfaces/AnimationPreset.html":{},"interfaces/Configuration.html":{},"interfaces/EventDataLoader.html":{},"interfaces/PhoenixUI.html":{},"interfaces/Window.html":{},"overview.html":{}}}],["intersected",{"_index":2286,"title":{},"body":{"classes/SelectionManager.html":{}}}],["intersectedobject",{"_index":2328,"title":{},"body":{"classes/SelectionManager.html":{}}}],["intersectedobject.name",{"_index":2333,"title":{},"body":{"classes/SelectionManager.html":{}}}],["intersectedobject.userdata",{"_index":2339,"title":{},"body":{"classes/SelectionManager.html":{}}}],["intersectedobject.userdata[key",{"_index":2351,"title":{},"body":{"classes/SelectionManager.html":{}}}],["intersectobject",{"_index":2247,"title":{},"body":{"classes/SelectionManager.html":{}}}],["intersectobject(event",{"_index":2283,"title":{},"body":{"classes/SelectionManager.html":{}}}],["intersects",{"_index":2285,"title":{},"body":{"classes/SelectionManager.html":{}}}],["intersects.length",{"_index":2373,"title":{},"body":{"classes/SelectionManager.html":{}}}],["intersects[0].object",{"_index":2376,"title":{},"body":{"classes/SelectionManager.html":{}}}],["interval",{"_index":2847,"title":{},"body":{"classes/VRManager.html":{}}}],["intervalid",{"_index":2848,"title":{},"body":{"classes/VRManager.html":{}}}],["intitialize",{"_index":2886,"title":{},"body":{"interfaces/Window.html":{}}}],["introduce",{"_index":3539,"title":{},"body":{"changelog.html":{}}}],["invisible",{"_index":396,"title":{},"body":{"interfaces/AnimationPreset.html":{}}}],["io",{"_index":3231,"title":{},"body":{"changelog.html":{}}}],["ischecked",{"_index":1867,"title":{},"body":{"classes/PhoenixMenuUI.html":{}}}],["isfixedoverlay",{"_index":2094,"title":{},"body":{"classes/RendererManager.html":{}}}],["isinit",{"_index":2237,"title":{},"body":{"classes/SelectionManager.html":{}}}],["issues",{"_index":3358,"title":{},"body":{"changelog.html":{}}}],["istracksmaterial",{"_index":2471,"title":{},"body":{"classes/TracksMaterial.html":{},"classes/TracksMesh.html":{}}}],["it's",{"_index":2018,"title":{},"body":{"classes/PrettySymbols.html":{}}}],["item",{"_index":1632,"title":{},"body":{"classes/LoadingManager.html":{},"classes/PhoenixMenuNode.html":{},"miscellaneous/variables.html":{}}}],["itemloaded",{"_index":1626,"title":{},"body":{"classes/LoadingManager.html":{}}}],["itemloaded(id",{"_index":1644,"title":{},"body":{"classes/LoadingManager.html":{}}}],["items",{"_index":438,"title":{},"body":{"interfaces/AnimationPreset.html":{},"classes/LoadingManager.html":{},"interfaces/Window.html":{},"changelog.html":{}}}],["itself",{"_index":1738,"title":{},"body":{"classes/PhoenixMenuNode.html":{},"interfaces/Window.html":{}}}],["jasmine",{"_index":3632,"title":{},"body":{"changelog.html":{}}}],["jet",{"_index":366,"title":{},"body":{"interfaces/AnimationPreset.html":{},"changelog.html":{}}}],["jets",{"_index":3300,"title":{},"body":{"changelog.html":{},"miscellaneous/variables.html":{}}}],["jive",{"_index":3346,"title":{},"body":{"changelog.html":{}}}],["jiveloader",{"_index":2750,"title":{},"body":{"classes/URLOptionsManager.html":{}}}],["jiveloader.geteventdata",{"_index":2754,"title":{},"body":{"classes/URLOptionsManager.html":{}}}],["jiveloader.process(fileswithdata[filename",{"_index":2753,"title":{},"body":{"classes/URLOptionsManager.html":{}}}],["jivexml",{"_index":2651,"title":{},"body":{"classes/URLOptionsManager.html":{},"changelog.html":{}}}],["jivexml_xxx_yyy.zip",{"_index":2759,"title":{},"body":{"classes/URLOptionsManager.html":{}}}],["jivexmlloader",{"_index":2672,"title":{},"body":{"classes/URLOptionsManager.html":{},"coverage.html":{}}}],["jixexml",{"_index":3509,"title":{},"body":{"changelog.html":{}}}],["join('\\n",{"_index":2597,"title":{},"body":{"classes/TracksMaterial.html":{},"classes/TracksMesh.html":{}}}],["js",{"_index":3783,"title":{},"body":{"dependencies.html":{}}}],["json",{"_index":1732,"title":{},"body":{"classes/PhoenixMenuNode.html":{},"classes/StateManager.html":{},"classes/URLOptionsManager.html":{},"interfaces/Window.html":{},"changelog.html":{},"coverage.html":{}}}],["json.parse(fileswithdata[filename",{"_index":2749,"title":{},"body":{"classes/URLOptionsManager.html":{}}}],["json.parse(input",{"_index":2996,"title":{},"body":{"interfaces/Window.html":{}}}],["json.parse(json",{"_index":1799,"title":{},"body":{"classes/PhoenixMenuNode.html":{},"classes/StateManager.html":{}}}],["json.stringify(jsonresult",{"_index":1468,"title":{},"body":{"classes/ExportManager.html":{}}}],["json.stringify(state",{"_index":2443,"title":{},"body":{"classes/StateManager.html":{}}}],["jsondata",{"_index":2445,"title":{},"body":{"classes/StateManager.html":{}}}],["jsondata['eventdisplay",{"_index":2449,"title":{},"body":{"classes/StateManager.html":{}}}],["jsondata['eventdisplay']?.['cameraposition",{"_index":2451,"title":{},"body":{"classes/StateManager.html":{}}}],["jsondata['eventdisplay']?.['openingclippingangle",{"_index":2455,"title":{},"body":{"classes/StateManager.html":{}}}],["jsondata['eventdisplay']?.['startclippingangle",{"_index":2453,"title":{},"body":{"classes/StateManager.html":{}}}],["jsondata['eventdisplay']['openingclippingangle",{"_index":2463,"title":{},"body":{"classes/StateManager.html":{}}}],["jsondata['eventdisplay']['startclippingangle",{"_index":2461,"title":{},"body":{"classes/StateManager.html":{}}}],["jsondata['phoenixmenu",{"_index":2446,"title":{},"body":{"classes/StateManager.html":{}}}],["jsonobject",{"_index":1798,"title":{},"body":{"classes/PhoenixMenuNode.html":{}}}],["jsonobject['children",{"_index":1816,"title":{},"body":{"classes/PhoenixMenuNode.html":{}}}],["jsonobject['childrenactive",{"_index":1800,"title":{},"body":{"classes/PhoenixMenuNode.html":{}}}],["jsonobject['configs",{"_index":1804,"title":{},"body":{"classes/PhoenixMenuNode.html":{}}}],["jsonobject['togglestate",{"_index":1801,"title":{},"body":{"classes/PhoenixMenuNode.html":{}}}],["jsonresult",{"_index":1466,"title":{},"body":{"classes/ExportManager.html":{}}}],["jsroot",{"_index":2868,"title":{},"body":{"interfaces/Window.html":{},"changelog.html":{},"dependencies.html":{}}}],["jsroot/geom",{"_index":2871,"title":{},"body":{"interfaces/Window.html":{}}}],["jsroot/io",{"_index":2873,"title":{},"body":{"interfaces/Window.html":{}}}],["jsrooteventloader",{"_index":3237,"title":{},"body":{"changelog.html":{},"coverage.html":{}}}],["jsrootsettings",{"_index":2870,"title":{},"body":{"interfaces/Window.html":{}}}],["jsrootsettings.usestamp",{"_index":3035,"title":{},"body":{"interfaces/Window.html":{}}}],["jszip",{"_index":3781,"title":{},"body":{"dependencies.html":{},"miscellaneous/variables.html":{}}}],["k1",{"_index":1519,"title":{},"body":{"classes/Field.html":{},"classes/RungeKutta.html":{},"classes/State.html":{}}}],["k1.clone().sub(k2).sub(k3).add(k4",{"_index":1546,"title":{},"body":{"classes/Field.html":{},"classes/RungeKutta.html":{},"classes/State.html":{}}}],["k2",{"_index":1512,"title":{},"body":{"classes/Field.html":{},"classes/RungeKutta.html":{},"classes/State.html":{}}}],["k3",{"_index":1513,"title":{},"body":{"classes/Field.html":{},"classes/RungeKutta.html":{},"classes/State.html":{}}}],["k4",{"_index":1514,"title":{},"body":{"classes/Field.html":{},"classes/RungeKutta.html":{},"classes/State.html":{}}}],["k4).lpnorm",{"_index":1547,"title":{},"body":{"classes/Field.html":{},"classes/RungeKutta.html":{},"classes/State.html":{}}}],["keep",{"_index":3543,"title":{},"body":{"changelog.html":{}}}],["key",{"_index":711,"title":{},"body":{"classes/ColorOptions.html":{},"interfaces/EventDataLoader.html":{},"classes/LoadingManager.html":{},"classes/PhoenixMenuNode.html":{},"classes/PrettySymbols.html":{},"classes/SelectionManager.html":{},"classes/StateManager.html":{},"classes/URLOptionsManager.html":{},"interfaces/Window.html":{},"classes/XRManager.html":{}}}],["keyboard",{"_index":2910,"title":{},"body":{"interfaces/Window.html":{},"changelog.html":{}}}],["keys",{"_index":778,"title":{},"body":{"classes/ColorOptions.html":{},"interfaces/EventDataLoader.html":{},"classes/URLOptionsManager.html":{},"interfaces/Window.html":{},"miscellaneous/enumerations.html":{}}}],["kutta",{"_index":1492,"title":{},"body":{"classes/Field.html":{},"classes/RKHelper.html":{},"classes/RungeKutta.html":{},"classes/State.html":{}}}],["kutta.ts",{"_index":1485,"title":{},"body":{"classes/Field.html":{},"classes/RungeKutta.html":{},"classes/State.html":{},"coverage.html":{}}}],["kutta.ts:12",{"_index":2189,"title":{},"body":{"classes/RungeKutta.html":{}}}],["kutta.ts:126",{"_index":2188,"title":{},"body":{"classes/RungeKutta.html":{}}}],["kutta.ts:168",{"_index":2386,"title":{},"body":{"classes/State.html":{}}}],["kutta.ts:170",{"_index":2382,"title":{},"body":{"classes/State.html":{}}}],["kutta.ts:172",{"_index":2384,"title":{},"body":{"classes/State.html":{}}}],["kutta.ts:174",{"_index":2387,"title":{},"body":{"classes/State.html":{}}}],["kutta.ts:176",{"_index":2390,"title":{},"body":{"classes/State.html":{}}}],["kutta.ts:178",{"_index":2388,"title":{},"body":{"classes/State.html":{}}}],["kutta.ts:180",{"_index":2383,"title":{},"body":{"classes/State.html":{}}}],["kutta.ts:182",{"_index":2385,"title":{},"body":{"classes/State.html":{}}}],["kutta.ts:192",{"_index":1488,"title":{},"body":{"classes/Field.html":{}}}],["label",{"_index":786,"title":{},"body":{"classes/ColorOptions.html":{},"classes/DatGUIMenuUI.html":{},"interfaces/EventDataLoader.html":{},"classes/InfoLogger.html":{},"classes/PhoenixMenuUI.html":{},"interfaces/PhoenixUI.html":{},"classes/StateManager.html":{},"interfaces/Window.html":{},"changelog.html":{},"miscellaneous/typealiases.html":{},"miscellaneous/variables.html":{}}}],["labelfolderreference",{"_index":1286,"title":{},"body":{"classes/DatGUIMenuUI.html":{},"classes/PhoenixMenuUI.html":{},"interfaces/PhoenixUI.html":{}}}],["labelid",{"_index":1098,"title":{},"body":{"classes/DatGUIMenuUI.html":{},"classes/PhoenixMenuUI.html":{},"interfaces/PhoenixUI.html":{},"interfaces/Window.html":{}}}],["labelitem",{"_index":1268,"title":{},"body":{"classes/DatGUIMenuUI.html":{}}}],["labelitem.add(this.guiparameters[labelid",{"_index":1284,"title":{},"body":{"classes/DatGUIMenuUI.html":{}}}],["labelitemfolder",{"_index":1112,"title":{},"body":{"classes/DatGUIMenuUI.html":{}}}],["labelnode",{"_index":1859,"title":{},"body":{"classes/PhoenixMenuUI.html":{}}}],["labelnode.addconfig('button",{"_index":1936,"title":{},"body":{"classes/PhoenixMenuUI.html":{}}}],["labelnode.addconfig('color",{"_index":1935,"title":{},"body":{"classes/PhoenixMenuUI.html":{}}}],["labelnode?.remove",{"_index":1940,"title":{},"body":{"classes/PhoenixMenuUI.html":{}}}],["labelobject",{"_index":1273,"title":{},"body":{"classes/DatGUIMenuUI.html":{},"classes/PhoenixMenuUI.html":{}}}],["labels",{"_index":1067,"title":{},"body":{"classes/DatGUIMenuUI.html":{},"interfaces/EventDataLoader.html":{},"classes/PhoenixMenuUI.html":{},"interfaces/PhoenixUI.html":{},"interfaces/Window.html":{},"changelog.html":{}}}],["labelsfolder",{"_index":1042,"title":{},"body":{"classes/DatGUIMenuUI.html":{},"classes/PhoenixMenuUI.html":{}}}],["labelsobject",{"_index":3120,"title":{},"body":{"interfaces/Window.html":{}}}],["labelsobject[eventdatatype",{"_index":3122,"title":{},"body":{"interfaces/Window.html":{}}}],["labelsobject[eventdatatype][collection",{"_index":3123,"title":{},"body":{"interfaces/Window.html":{}}}],["labelsobject[eventdatatype][collection][index",{"_index":3119,"title":{},"body":{"interfaces/Window.html":{}}}],["labelssizemenu",{"_index":1259,"title":{},"body":{"classes/DatGUIMenuUI.html":{}}}],["labelssizemenu.onfinishchange(onsizechange",{"_index":1261,"title":{},"body":{"classes/DatGUIMenuUI.html":{}}}],["last",{"_index":149,"title":{},"body":{"classes/ARManager.html":{},"interfaces/AnimationPreset.html":{},"classes/Field.html":{},"classes/RungeKutta.html":{},"classes/State.html":{},"classes/VRManager.html":{},"interfaces/Window.html":{},"classes/XRManager.html":{}}}],["later",{"_index":1001,"title":{},"body":{"classes/Cut.html":{},"classes/ExportManager.html":{},"interfaces/Window.html":{}}}],["latest",{"_index":3590,"title":{},"body":{"changelog.html":{}}}],["left",{"_index":588,"title":{},"body":{"classes/CMSObjects.html":{},"classes/URLOptionsManager.html":{}}}],["length",{"_index":1579,"title":{},"body":{"classes/Field.html":{},"classes/RungeKutta.html":{},"classes/State.html":{},"changelog.html":{}}}],["level",{"_index":1709,"title":{},"body":{"classes/PhoenixMenuNode.html":{},"classes/PhoenixMenuUI.html":{},"changelog.html":{}}}],["lhcb",{"_index":3254,"title":{},"body":{"changelog.html":{}}}],["lib/models/cut.model",{"_index":1117,"title":{},"body":{"classes/DatGUIMenuUI.html":{},"classes/PhoenixMenuUI.html":{},"interfaces/PhoenixUI.html":{}}}],["lib/types/configuration",{"_index":2676,"title":{},"body":{"classes/URLOptionsManager.html":{},"interfaces/Window.html":{}}}],["library",{"_index":1391,"title":{},"body":{"interfaces/EventDataLoader.html":{},"changelog.html":{}}}],["license",{"_index":3824,"title":{},"body":{"properties.html":{}}}],["light",{"_index":881,"title":{},"body":{"interfaces/Configuration.html":{}}}],["limit",{"_index":3386,"title":{},"body":{"changelog.html":{}}}],["limits",{"_index":3498,"title":{},"body":{"changelog.html":{}}}],["line",{"_index":2805,"title":{},"body":{"classes/VRManager.html":{},"changelog.html":{}}}],["line(geometry",{"_index":2841,"title":{},"body":{"classes/VRManager.html":{}}}],["line.name",{"_index":2842,"title":{},"body":{"classes/VRManager.html":{}}}],["line.scale.z",{"_index":2843,"title":{},"body":{"classes/VRManager.html":{}}}],["linebasicmaterial",{"_index":559,"title":{},"body":{"classes/CMSObjects.html":{}}}],["lineboxobject",{"_index":608,"title":{},"body":{"classes/CMSObjects.html":{}}}],["linehit",{"_index":342,"title":{},"body":{"interfaces/AnimationPreset.html":{}}}],["linehits",{"_index":3551,"title":{},"body":{"changelog.html":{}}}],["lines",{"_index":603,"title":{},"body":{"classes/CMSObjects.html":{},"changelog.html":{}}}],["linesegments",{"_index":561,"title":{},"body":{"classes/CMSObjects.html":{}}}],["linewidth",{"_index":2563,"title":{},"body":{"classes/TracksMaterial.html":{},"classes/TracksMesh.html":{}}}],["link",{"_index":564,"title":{},"body":{"classes/CMSObjects.html":{},"changelog.html":{}}}],["linkedtrackcollection",{"_index":670,"title":{},"body":{"classes/ColorManager.html":{}}}],["linkedtracks",{"_index":671,"title":{},"body":{"classes/ColorManager.html":{}}}],["linkedtracks.foreach((trackindex",{"_index":678,"title":{},"body":{"classes/ColorManager.html":{}}}],["linting",{"_index":3211,"title":{},"body":{"changelog.html":{}}}],["list",{"_index":1405,"title":{},"body":{"interfaces/EventDataLoader.html":{},"classes/InfoLogger.html":{},"classes/RendererManager.html":{},"interfaces/Window.html":{}}}],["listen",{"_index":1142,"title":{},"body":{"classes/DatGUIMenuUI.html":{},"classes/LoadingManager.html":{}}}],["listener",{"_index":1638,"title":{},"body":{"classes/LoadingManager.html":{},"classes/VRManager.html":{}}}],["listentodisplayedeventchange(callback",{"_index":3066,"title":{},"body":{"interfaces/Window.html":{}}}],["listentoloadedeventschange(callback",{"_index":3068,"title":{},"body":{"interfaces/Window.html":{}}}],["literal",{"_index":233,"title":{},"body":{"interfaces/AnimationPreset.html":{},"interfaces/Configuration.html":{},"interfaces/EventDataLoader.html":{},"classes/LoadingManager.html":{},"classes/PhoenixMenuNode.html":{},"classes/PrettySymbols.html":{},"classes/RKHelper.html":{},"classes/RungeKutta.html":{},"classes/SelectionManager.html":{},"classes/StateManager.html":{},"classes/URLOptionsManager.html":{},"miscellaneous/typealiases.html":{}}}],["load",{"_index":867,"title":{},"body":{"interfaces/Configuration.html":{},"classes/ExportManager.html":{},"classes/LoadingManager.html":{},"classes/PhoenixMenuNode.html":{},"classes/PhoenixMenuUI.html":{},"classes/ScriptLoader.html":{},"classes/StateManager.html":{},"classes/URLOptionsManager.html":{},"interfaces/Window.html":{},"changelog.html":{},"index.html":{},"miscellaneous/variables.html":{}}}],["loadable",{"_index":1617,"title":{},"body":{"classes/LoadingManager.html":{},"interfaces/Window.html":{}}}],["loadconfig",{"_index":2700,"title":{},"body":{"classes/URLOptionsManager.html":{}}}],["loaded",{"_index":1434,"title":{},"body":{"classes/ExportManager.html":{},"classes/LoadingManager.html":{},"classes/ScriptLoader.html":{},"classes/StateManager.html":{},"interfaces/Window.html":{},"changelog.html":{}}}],["loader",{"_index":875,"title":{},"body":{"interfaces/Configuration.html":{},"interfaces/EventDataLoader.html":{},"classes/ScriptLoader.html":{},"classes/URLOptionsManager.html":{},"interfaces/Window.html":{},"changelog.html":{},"index.html":{}}}],["loader.geteventdata",{"_index":2727,"title":{},"body":{"classes/URLOptionsManager.html":{}}}],["loader.process(filedata",{"_index":2726,"title":{},"body":{"classes/URLOptionsManager.html":{}}}],["loader.ts",{"_index":1369,"title":{},"body":{"interfaces/EventDataLoader.html":{},"classes/ScriptLoader.html":{},"coverage.html":{}}}],["loader.ts:15",{"_index":2201,"title":{},"body":{"classes/ScriptLoader.html":{}}}],["loader.ts:17",{"_index":1386,"title":{},"body":{"interfaces/EventDataLoader.html":{}}}],["loader.ts:29",{"_index":1412,"title":{},"body":{"interfaces/EventDataLoader.html":{}}}],["loader.ts:35",{"_index":1403,"title":{},"body":{"interfaces/EventDataLoader.html":{}}}],["loader.ts:42",{"_index":1400,"title":{},"body":{"interfaces/EventDataLoader.html":{}}}],["loader.ts:48",{"_index":1408,"title":{},"body":{"interfaces/EventDataLoader.html":{}}}],["loader.ts:57",{"_index":1381,"title":{},"body":{"interfaces/EventDataLoader.html":{}}}],["loader.ts:67",{"_index":1417,"title":{},"body":{"interfaces/EventDataLoader.html":{}}}],["loaders",{"_index":1371,"title":{},"body":{"interfaces/EventDataLoader.html":{}}}],["loaders/event",{"_index":887,"title":{},"body":{"interfaces/Configuration.html":{}}}],["loaders/jivexml",{"_index":2673,"title":{},"body":{"classes/URLOptionsManager.html":{}}}],["loaders/objects/tracks",{"_index":252,"title":{},"body":{"interfaces/AnimationPreset.html":{}}}],["loaders/phoenix",{"_index":2675,"title":{},"body":{"classes/URLOptionsManager.html":{},"interfaces/Window.html":{}}}],["loadevent(eventkey",{"_index":2959,"title":{},"body":{"interfaces/Window.html":{}}}],["loadeventfolderstate",{"_index":1838,"title":{},"body":{"classes/PhoenixMenuUI.html":{}}}],["loadfile",{"_index":2430,"title":{},"body":{"classes/StateManager.html":{},"coverage.html":{},"miscellaneous/variables.html":{}}}],["loadfile((data",{"_index":2434,"title":{},"body":{"classes/StateManager.html":{}}}],["loadgltfgeometry",{"_index":3013,"title":{},"body":{"interfaces/Window.html":{}}}],["loading",{"_index":877,"title":{},"body":{"interfaces/Configuration.html":{},"classes/LoadingManager.html":{},"classes/ScriptLoader.html":{},"classes/URLOptionsManager.html":{},"interfaces/Window.html":{},"changelog.html":{}}}],["loadingmanager",{"_index":1615,"title":{"classes/LoadingManager.html":{}},"body":{"classes/LoadingManager.html":{},"classes/ScriptLoader.html":{},"interfaces/Window.html":{},"coverage.html":{}}}],["loadingmanager.addloadableitem('single_script",{"_index":2210,"title":{},"body":{"classes/ScriptLoader.html":{}}}],["loadingmanager.instance",{"_index":1651,"title":{},"body":{"classes/LoadingManager.html":{}}}],["loadingmanager.itemloaded('single_script",{"_index":2225,"title":{},"body":{"classes/ScriptLoader.html":{}}}],["loadjsongeometry",{"_index":3018,"title":{},"body":{"interfaces/Window.html":{}}}],["loadjsrootscripts",{"_index":3234,"title":{},"body":{"changelog.html":{}}}],["loadlabels",{"_index":1256,"title":{},"body":{"classes/DatGUIMenuUI.html":{}}}],["loadobjgeometry",{"_index":2978,"title":{},"body":{"interfaces/Window.html":{}}}],["loadrootgeometry",{"_index":3031,"title":{},"body":{"interfaces/Window.html":{}}}],["loadrootjsongeometry",{"_index":3022,"title":{},"body":{"interfaces/Window.html":{}}}],["loads",{"_index":2938,"title":{},"body":{"interfaces/Window.html":{}}}],["loadsceneconfiguration(sceneconfiguration",{"_index":3055,"title":{},"body":{"interfaces/Window.html":{}}}],["loadscript",{"_index":2196,"title":{},"body":{"classes/ScriptLoader.html":{}}}],["loadscript(scripturl",{"_index":2197,"title":{},"body":{"classes/ScriptLoader.html":{}}}],["loadstatefromjson",{"_index":1693,"title":{},"body":{"classes/PhoenixMenuNode.html":{},"classes/StateManager.html":{}}}],["loadstatefromjson(json",{"_index":1730,"title":{},"body":{"classes/PhoenixMenuNode.html":{},"classes/StateManager.html":{}}}],["local",{"_index":466,"title":{},"body":{"interfaces/AnimationPreset.html":{},"classes/RendererManager.html":{},"classes/VRManager.html":{},"changelog.html":{},"miscellaneous/variables.html":{}}}],["localstorage",{"_index":3895,"title":{},"body":{"miscellaneous/variables.html":{}}}],["localstorage.getitem(item",{"_index":3892,"title":{},"body":{"miscellaneous/variables.html":{}}}],["localstorage.setitem(item",{"_index":3896,"title":{},"body":{"miscellaneous/variables.html":{}}}],["location",{"_index":2052,"title":{},"body":{"classes/RKHelper.html":{}}}],["log",{"_index":1606,"title":{},"body":{"classes/InfoLogger.html":{},"classes/SelectionManager.html":{},"changelog.html":{}}}],["logger",{"_index":1397,"title":{},"body":{"interfaces/EventDataLoader.html":{},"classes/InfoLogger.html":{},"classes/SelectionManager.html":{},"interfaces/Window.html":{}}}],["logger.ts",{"_index":1592,"title":{},"body":{"classes/InfoLogger.html":{},"coverage.html":{}}}],["logger.ts:15",{"_index":1604,"title":{},"body":{"classes/InfoLogger.html":{}}}],["logger.ts:26",{"_index":1607,"title":{},"body":{"classes/InfoLogger.html":{}}}],["logger.ts:6",{"_index":1596,"title":{},"body":{"classes/InfoLogger.html":{}}}],["logger.ts:8",{"_index":1598,"title":{},"body":{"classes/InfoLogger.html":{}}}],["logging",{"_index":1398,"title":{},"body":{"interfaces/EventDataLoader.html":{},"classes/InfoLogger.html":{},"classes/SelectionManager.html":{}}}],["logo",{"_index":2763,"title":{},"body":{"classes/URLOptionsManager.html":{}}}],["logs",{"_index":1597,"title":{},"body":{"classes/InfoLogger.html":{},"interfaces/Window.html":{}}}],["long",{"_index":2019,"title":{},"body":{"classes/PrettySymbols.html":{}}}],["longer",{"_index":3385,"title":{},"body":{"changelog.html":{}}}],["look",{"_index":3100,"title":{},"body":{"interfaces/Window.html":{},"changelog.html":{}}}],["lookatobject(uuid",{"_index":3101,"title":{},"body":{"interfaces/Window.html":{}}}],["loop",{"_index":2151,"title":{},"body":{"classes/RendererManager.html":{},"interfaces/Window.html":{},"changelog.html":{}}}],["lost",{"_index":2927,"title":{},"body":{"interfaces/Window.html":{}}}],["lower",{"_index":1005,"title":{},"body":{"classes/Cut.html":{},"changelog.html":{}}}],["lowres",{"_index":1066,"title":{},"body":{"classes/DatGUIMenuUI.html":{}}}],["m",{"_index":2568,"title":{},"body":{"classes/TracksMaterial.html":{},"classes/TracksMesh.html":{}}}],["made",{"_index":527,"title":{},"body":{"interfaces/AnimationPreset.html":{},"classes/DatGUIMenuUI.html":{},"classes/PhoenixMenuNode.html":{},"classes/PhoenixMenuUI.html":{},"interfaces/PhoenixUI.html":{}}}],["main",{"_index":1311,"title":{},"body":{"classes/EffectsManager.html":{},"classes/RendererManager.html":{},"classes/TracksMaterial.html":{},"classes/TracksMesh.html":{},"classes/URLOptionsManager.html":{}}}],["mainlogo",{"_index":2762,"title":{},"body":{"classes/URLOptionsManager.html":{}}}],["mainrenderer",{"_index":2083,"title":{},"body":{"classes/RendererManager.html":{}}}],["mainrenderer.domelement.id",{"_index":2170,"title":{},"body":{"classes/RendererManager.html":{}}}],["mainrenderer.setpixelratio(window.devicepixelratio",{"_index":2169,"title":{},"body":{"classes/RendererManager.html":{}}}],["mainrenderer.setsize(rendererwidth",{"_index":2168,"title":{},"body":{"classes/RendererManager.html":{}}}],["major",{"_index":3703,"title":{},"body":{"changelog.html":{}}}],["make",{"_index":397,"title":{},"body":{"interfaces/AnimationPreset.html":{},"classes/CMSObjects.html":{},"classes/CoordinateHelper.html":{},"changelog.html":{}}}],["makescreenshot",{"_index":2929,"title":{},"body":{"interfaces/Window.html":{}}}],["making",{"_index":395,"title":{},"body":{"interfaces/AnimationPreset.html":{}}}],["manage",{"_index":3410,"title":{},"body":{"changelog.html":{}}}],["manager",{"_index":11,"title":{},"body":{"classes/ARManager.html":{},"interfaces/AnimationPreset.html":{},"classes/ColorManager.html":{},"classes/ColorOptions.html":{},"interfaces/Configuration.html":{},"classes/DatGUIMenuUI.html":{},"classes/EffectsManager.html":{},"interfaces/EventDataLoader.html":{},"classes/ExportManager.html":{},"classes/LoadingManager.html":{},"classes/PhoenixMenuUI.html":{},"classes/RendererManager.html":{},"classes/ScriptLoader.html":{},"classes/SelectionManager.html":{},"classes/StateManager.html":{},"classes/URLOptionsManager.html":{},"classes/VRManager.html":{},"interfaces/Window.html":{},"classes/XRManager.html":{},"changelog.html":{}}}],["manager.ts",{"_index":8,"title":{},"body":{"classes/ARManager.html":{},"interfaces/AnimationPreset.html":{},"classes/ColorManager.html":{},"classes/EffectsManager.html":{},"classes/ExportManager.html":{},"classes/LoadingManager.html":{},"classes/RendererManager.html":{},"classes/SelectionManager.html":{},"classes/StateManager.html":{},"classes/URLOptionsManager.html":{},"classes/VRManager.html":{},"classes/XRManager.html":{},"coverage.html":{},"miscellaneous/enumerations.html":{},"miscellaneous/variables.html":{}}}],["manager.ts:10",{"_index":2105,"title":{},"body":{"classes/RendererManager.html":{}}}],["manager.ts:102",{"_index":2290,"title":{},"body":{"classes/SelectionManager.html":{}}}],["manager.ts:104",{"_index":2417,"title":{},"body":{"classes/StateManager.html":{}}}],["manager.ts:105",{"_index":1642,"title":{},"body":{"classes/LoadingManager.html":{},"classes/RendererManager.html":{}}}],["manager.ts:109",{"_index":3128,"title":{},"body":{"classes/XRManager.html":{}}}],["manager.ts:11",{"_index":1630,"title":{},"body":{"classes/LoadingManager.html":{}}}],["manager.ts:111",{"_index":2272,"title":{},"body":{"classes/SelectionManager.html":{}}}],["manager.ts:112",{"_index":1650,"title":{},"body":{"classes/LoadingManager.html":{}}}],["manager.ts:119",{"_index":2137,"title":{},"body":{"classes/RendererManager.html":{}}}],["manager.ts:12",{"_index":1316,"title":{},"body":{"classes/EffectsManager.html":{},"classes/RendererManager.html":{},"classes/StateManager.html":{}}}],["manager.ts:127",{"_index":2114,"title":{},"body":{"classes/RendererManager.html":{}}}],["manager.ts:128",{"_index":2269,"title":{},"body":{"classes/SelectionManager.html":{}}}],["manager.ts:135",{"_index":2115,"title":{},"body":{"classes/RendererManager.html":{},"classes/XRManager.html":{}}}],["manager.ts:14",{"_index":1314,"title":{},"body":{"classes/EffectsManager.html":{},"classes/ExportManager.html":{},"classes/LoadingManager.html":{},"classes/RendererManager.html":{},"classes/StateManager.html":{}}}],["manager.ts:143",{"_index":2116,"title":{},"body":{"classes/RendererManager.html":{},"classes/URLOptionsManager.html":{}}}],["manager.ts:145",{"_index":2263,"title":{},"body":{"classes/SelectionManager.html":{}}}],["manager.ts:147",{"_index":2421,"title":{},"body":{"classes/StateManager.html":{}}}],["manager.ts:149",{"_index":2798,"title":{},"body":{"classes/VRManager.html":{}}}],["manager.ts:15",{"_index":82,"title":{},"body":{"classes/ARManager.html":{},"classes/VRManager.html":{}}}],["manager.ts:153",{"_index":2109,"title":{},"body":{"classes/RendererManager.html":{}}}],["manager.ts:155",{"_index":2429,"title":{},"body":{"classes/StateManager.html":{}}}],["manager.ts:158",{"_index":2258,"title":{},"body":{"classes/SelectionManager.html":{},"classes/URLOptionsManager.html":{}}}],["manager.ts:16",{"_index":1323,"title":{},"body":{"classes/EffectsManager.html":{},"classes/LoadingManager.html":{},"classes/StateManager.html":{}}}],["manager.ts:163",{"_index":2124,"title":{},"body":{"classes/RendererManager.html":{},"classes/StateManager.html":{}}}],["manager.ts:169",{"_index":2665,"title":{},"body":{"classes/URLOptionsManager.html":{}}}],["manager.ts:17",{"_index":60,"title":{},"body":{"classes/ARManager.html":{},"classes/VRManager.html":{}}}],["manager.ts:171",{"_index":2425,"title":{},"body":{"classes/StateManager.html":{}}}],["manager.ts:175",{"_index":2140,"title":{},"body":{"classes/RendererManager.html":{}}}],["manager.ts:179",{"_index":2416,"title":{},"body":{"classes/StateManager.html":{}}}],["manager.ts:18",{"_index":1319,"title":{},"body":{"classes/EffectsManager.html":{},"classes/StateManager.html":{}}}],["manager.ts:187",{"_index":2111,"title":{},"body":{"classes/RendererManager.html":{},"classes/StateManager.html":{}}}],["manager.ts:19",{"_index":74,"title":{},"body":{"classes/ARManager.html":{},"classes/LoadingManager.html":{},"classes/VRManager.html":{}}}],["manager.ts:195",{"_index":2423,"title":{},"body":{"classes/StateManager.html":{}}}],["manager.ts:20",{"_index":640,"title":{},"body":{"classes/ColorManager.html":{},"classes/EffectsManager.html":{},"classes/StateManager.html":{}}}],["manager.ts:200",{"_index":2130,"title":{},"body":{"classes/RendererManager.html":{}}}],["manager.ts:207",{"_index":2261,"title":{},"body":{"classes/SelectionManager.html":{}}}],["manager.ts:209",{"_index":2654,"title":{},"body":{"classes/URLOptionsManager.html":{}}}],["manager.ts:21",{"_index":2790,"title":{},"body":{"classes/VRManager.html":{}}}],["manager.ts:210",{"_index":2113,"title":{},"body":{"classes/RendererManager.html":{}}}],["manager.ts:218",{"_index":2284,"title":{},"body":{"classes/SelectionManager.html":{}}}],["manager.ts:22",{"_index":48,"title":{},"body":{"classes/ARManager.html":{},"classes/SelectionManager.html":{},"classes/StateManager.html":{}}}],["manager.ts:220",{"_index":2122,"title":{},"body":{"classes/RendererManager.html":{}}}],["manager.ts:227",{"_index":2644,"title":{},"body":{"classes/URLOptionsManager.html":{}}}],["manager.ts:228",{"_index":2128,"title":{},"body":{"classes/RendererManager.html":{}}}],["manager.ts:23",{"_index":1308,"title":{},"body":{"classes/EffectsManager.html":{},"classes/VRManager.html":{}}}],["manager.ts:24",{"_index":2252,"title":{},"body":{"classes/SelectionManager.html":{},"classes/StateManager.html":{},"classes/URLOptionsManager.html":{}}}],["manager.ts:241",{"_index":2276,"title":{},"body":{"classes/SelectionManager.html":{}}}],["manager.ts:252",{"_index":2669,"title":{},"body":{"classes/URLOptionsManager.html":{}}}],["manager.ts:26",{"_index":2267,"title":{},"body":{"classes/SelectionManager.html":{},"classes/StateManager.html":{},"classes/VRManager.html":{},"classes/XRManager.html":{}}}],["manager.ts:268",{"_index":2656,"title":{},"body":{"classes/URLOptionsManager.html":{}}}],["manager.ts:27",{"_index":1427,"title":{},"body":{"classes/ExportManager.html":{}}}],["manager.ts:28",{"_index":2268,"title":{},"body":{"classes/SelectionManager.html":{},"classes/VRManager.html":{},"classes/XRManager.html":{}}}],["manager.ts:29",{"_index":2409,"title":{},"body":{"classes/StateManager.html":{}}}],["manager.ts:30",{"_index":2251,"title":{},"body":{"classes/SelectionManager.html":{},"classes/XRManager.html":{}}}],["manager.ts:32",{"_index":2253,"title":{},"body":{"classes/SelectionManager.html":{},"classes/XRManager.html":{}}}],["manager.ts:34",{"_index":2119,"title":{},"body":{"classes/RendererManager.html":{},"classes/XRManager.html":{}}}],["manager.ts:36",{"_index":2264,"title":{},"body":{"classes/SelectionManager.html":{},"classes/XRManager.html":{}}}],["manager.ts:37",{"_index":1635,"title":{},"body":{"classes/LoadingManager.html":{}}}],["manager.ts:38",{"_index":626,"title":{},"body":{"classes/ColorManager.html":{},"classes/SelectionManager.html":{},"classes/XRManager.html":{}}}],["manager.ts:41",{"_index":2256,"title":{},"body":{"classes/SelectionManager.html":{}}}],["manager.ts:43",{"_index":2250,"title":{},"body":{"classes/SelectionManager.html":{},"classes/URLOptionsManager.html":{}}}],["manager.ts:46",{"_index":1645,"title":{},"body":{"classes/LoadingManager.html":{},"classes/RendererManager.html":{},"classes/StateManager.html":{}}}],["manager.ts:48",{"_index":1332,"title":{},"body":{"classes/EffectsManager.html":{}}}],["manager.ts:52",{"_index":1442,"title":{},"body":{"classes/ExportManager.html":{}}}],["manager.ts:53",{"_index":3130,"title":{},"body":{"classes/XRManager.html":{}}}],["manager.ts:54",{"_index":2427,"title":{},"body":{"classes/StateManager.html":{}}}],["manager.ts:55",{"_index":634,"title":{},"body":{"classes/ColorManager.html":{}}}],["manager.ts:59",{"_index":2650,"title":{},"body":{"classes/URLOptionsManager.html":{}}}],["manager.ts:6",{"_index":1629,"title":{},"body":{"classes/LoadingManager.html":{}}}],["manager.ts:61",{"_index":1330,"title":{},"body":{"classes/EffectsManager.html":{}}}],["manager.ts:64",{"_index":1648,"title":{},"body":{"classes/LoadingManager.html":{},"classes/RendererManager.html":{}}}],["manager.ts:65",{"_index":2282,"title":{},"body":{"classes/SelectionManager.html":{}}}],["manager.ts:66",{"_index":1437,"title":{},"body":{"classes/ExportManager.html":{}}}],["manager.ts:69",{"_index":1324,"title":{},"body":{"classes/EffectsManager.html":{}}}],["manager.ts:7",{"_index":623,"title":{},"body":{"classes/ColorManager.html":{}}}],["manager.ts:72",{"_index":648,"title":{},"body":{"classes/ColorManager.html":{}}}],["manager.ts:75",{"_index":118,"title":{},"body":{"classes/ARManager.html":{}}}],["manager.ts:77",{"_index":2801,"title":{},"body":{"classes/VRManager.html":{}}}],["manager.ts:78",{"_index":3129,"title":{},"body":{"classes/XRManager.html":{}}}],["manager.ts:8",{"_index":2104,"title":{},"body":{"classes/RendererManager.html":{}}}],["manager.ts:80",{"_index":2418,"title":{},"body":{"classes/StateManager.html":{}}}],["manager.ts:83",{"_index":2288,"title":{},"body":{"classes/SelectionManager.html":{}}}],["manager.ts:84",{"_index":1637,"title":{},"body":{"classes/LoadingManager.html":{}}}],["manager.ts:85",{"_index":1440,"title":{},"body":{"classes/ExportManager.html":{}}}],["manager.ts:88",{"_index":1334,"title":{},"body":{"classes/EffectsManager.html":{},"classes/XRManager.html":{}}}],["manager.ts:9",{"_index":1633,"title":{},"body":{"classes/LoadingManager.html":{}}}],["manager.ts:93",{"_index":1640,"title":{},"body":{"classes/LoadingManager.html":{}}}],["manager.ts:94",{"_index":2273,"title":{},"body":{"classes/SelectionManager.html":{}}}],["manager.ts:97",{"_index":1336,"title":{},"body":{"classes/EffectsManager.html":{},"classes/RendererManager.html":{}}}],["manager.ts:99",{"_index":3127,"title":{},"body":{"classes/XRManager.html":{}}}],["manager/animations",{"_index":222,"title":{},"body":{"interfaces/AnimationPreset.html":{},"interfaces/Configuration.html":{},"interfaces/Window.html":{},"coverage.html":{}}}],["manager/color",{"_index":616,"title":{},"body":{"classes/ColorManager.html":{},"classes/ColorOptions.html":{},"coverage.html":{},"miscellaneous/enumerations.html":{},"miscellaneous/typealiases.html":{}}}],["manager/controls",{"_index":3756,"title":{},"body":{"coverage.html":{}}}],["manager/dat",{"_index":1032,"title":{},"body":{"classes/DatGUIMenuUI.html":{},"coverage.html":{}}}],["manager/effects",{"_index":1292,"title":{},"body":{"classes/EffectsManager.html":{},"coverage.html":{}}}],["manager/export",{"_index":1420,"title":{},"body":{"classes/ExportManager.html":{},"coverage.html":{}}}],["manager/import",{"_index":3760,"title":{},"body":{"coverage.html":{}}}],["manager/index.ts",{"_index":3762,"title":{},"body":{"coverage.html":{},"miscellaneous/variables.html":{}}}],["manager/phoenix",{"_index":889,"title":{},"body":{"interfaces/Configuration.html":{},"classes/PhoenixMenuNode.html":{},"classes/PhoenixMenuUI.html":{},"interfaces/PhoenixUI.html":{},"classes/StateManager.html":{},"coverage.html":{},"miscellaneous/typealiases.html":{}}}],["manager/renderer",{"_index":2081,"title":{},"body":{"classes/RendererManager.html":{},"coverage.html":{}}}],["manager/scene",{"_index":1116,"title":{},"body":{"classes/DatGUIMenuUI.html":{},"classes/PhoenixMenuUI.html":{},"coverage.html":{}}}],["manager/selection",{"_index":2233,"title":{},"body":{"classes/SelectionManager.html":{},"coverage.html":{}}}],["manager/xr/ar",{"_index":7,"title":{},"body":{"classes/ARManager.html":{},"coverage.html":{}}}],["manager/xr/vr",{"_index":2778,"title":{},"body":{"classes/VRManager.html":{},"coverage.html":{}}}],["manager/xr/xr",{"_index":2876,"title":{},"body":{"interfaces/Window.html":{},"classes/XRManager.html":{},"coverage.html":{},"miscellaneous/enumerations.html":{}}}],["managers/loading",{"_index":2209,"title":{},"body":{"classes/ScriptLoader.html":{},"interfaces/Window.html":{}}}],["managers/state",{"_index":2874,"title":{},"body":{"interfaces/Window.html":{}}}],["managers/three",{"_index":890,"title":{},"body":{"interfaces/Configuration.html":{},"interfaces/EventDataLoader.html":{},"interfaces/Window.html":{}}}],["managers/ui",{"_index":888,"title":{},"body":{"interfaces/Configuration.html":{},"interfaces/EventDataLoader.html":{},"interfaces/Window.html":{}}}],["managers/url",{"_index":2875,"title":{},"body":{"interfaces/Window.html":{}}}],["manages",{"_index":1309,"title":{},"body":{"classes/EffectsManager.html":{},"interfaces/Window.html":{}}}],["managing",{"_index":253,"title":{},"body":{"interfaces/AnimationPreset.html":{},"classes/ColorManager.html":{},"classes/DatGUIMenuUI.html":{},"classes/EffectsManager.html":{},"classes/ExportManager.html":{},"classes/LoadingManager.html":{},"classes/PhoenixMenuUI.html":{},"classes/RendererManager.html":{},"classes/SelectionManager.html":{},"classes/StateManager.html":{},"classes/URLOptionsManager.html":{},"interfaces/Window.html":{},"changelog.html":{}}}],["manipulate",{"_index":1396,"title":{},"body":{"interfaces/EventDataLoader.html":{}}}],["manual",{"_index":1772,"title":{},"body":{"classes/PhoenixMenuNode.html":{}}}],["manually",{"_index":371,"title":{},"body":{"interfaces/AnimationPreset.html":{}}}],["many",{"_index":3428,"title":{},"body":{"changelog.html":{}}}],["map((key",{"_index":2347,"title":{},"body":{"classes/SelectionManager.html":{}}}],["mat4",{"_index":2567,"title":{},"body":{"classes/TracksMaterial.html":{},"classes/TracksMesh.html":{}}}],["match",{"_index":2918,"title":{},"body":{"interfaces/Window.html":{},"changelog.html":{}}}],["matching",{"_index":187,"title":{},"body":{"classes/ARManager.html":{},"classes/ActiveVariable.html":{},"interfaces/AnimationPreset.html":{},"classes/CMSObjects.html":{},"classes/ColorManager.html":{},"classes/ColorOptions.html":{},"interfaces/Configuration.html":{},"classes/CoordinateHelper.html":{},"classes/Cut.html":{},"classes/DatGUIMenuUI.html":{},"classes/EffectsManager.html":{},"interfaces/EventDataLoader.html":{},"classes/ExportManager.html":{},"classes/Field.html":{},"classes/InfoLogger.html":{},"classes/LoadingManager.html":{},"classes/PhoenixMenuNode.html":{},"classes/PhoenixMenuUI.html":{},"interfaces/PhoenixUI.html":{},"classes/PresetView.html":{},"classes/PrettySymbols.html":{},"classes/RKHelper.html":{},"classes/RendererManager.html":{},"classes/RungeKutta.html":{},"classes/ScriptLoader.html":{},"classes/SelectionManager.html":{},"classes/State.html":{},"classes/StateManager.html":{},"classes/TracksMaterial.html":{},"classes/TracksMesh.html":{},"classes/URLOptionsManager.html":{},"classes/VRManager.html":{},"interfaces/Window.html":{},"classes/XRManager.html":{},"changelog.html":{},"coverage.html":{},"dependencies.html":{},"miscellaneous/enumerations.html":{},"index.html":{},"modules.html":{},"overview.html":{},"properties.html":{},"miscellaneous/typealiases.html":{},"miscellaneous/variables.html":{}}}],["material",{"_index":1152,"title":{},"body":{"classes/DatGUIMenuUI.html":{},"classes/PhoenixMenuUI.html":{},"classes/TracksMaterial.html":{},"classes/TracksMesh.html":{},"interfaces/Window.html":{}}}],["material?.color",{"_index":1153,"title":{},"body":{"classes/DatGUIMenuUI.html":{},"classes/PhoenixMenuUI.html":{}}}],["math.abs(1",{"_index":844,"title":{},"body":{"classes/ColorOptions.html":{},"classes/PrettySymbols.html":{}}}],["math.abs(returnvec.x",{"_index":1548,"title":{},"body":{"classes/Field.html":{},"classes/RungeKutta.html":{},"classes/State.html":{}}}],["math.abs(returnvec.y",{"_index":1549,"title":{},"body":{"classes/Field.html":{},"classes/RungeKutta.html":{},"classes/State.html":{}}}],["math.abs(returnvec.z",{"_index":1550,"title":{},"body":{"classes/Field.html":{},"classes/RungeKutta.html":{},"classes/State.html":{}}}],["math.atan(math.pow(math.e",{"_index":950,"title":{},"body":{"classes/CoordinateHelper.html":{}}}],["math.log(math.tan(theta",{"_index":951,"title":{},"body":{"classes/CoordinateHelper.html":{}}}],["math.pi",{"_index":305,"title":{},"body":{"interfaces/AnimationPreset.html":{},"classes/CoordinateHelper.html":{}}}],["math.pow(fh",{"_index":1561,"title":{},"body":{"classes/Field.html":{},"classes/RungeKutta.html":{},"classes/State.html":{}}}],["math.sign(1",{"_index":824,"title":{},"body":{"classes/ColorOptions.html":{},"classes/PrettySymbols.html":{}}}],["math.sqrt(pos.x",{"_index":2058,"title":{},"body":{"classes/RKHelper.html":{}}}],["max",{"_index":740,"title":{},"body":{"classes/ColorOptions.html":{},"classes/DatGUIMenuUI.html":{},"classes/Field.html":{},"classes/InfoLogger.html":{},"classes/PhoenixMenuUI.html":{},"classes/RungeKutta.html":{},"classes/State.html":{},"changelog.html":{}}}],["maxcut",{"_index":1244,"title":{},"body":{"classes/DatGUIMenuUI.html":{}}}],["maxcut.onchange((value",{"_index":1246,"title":{},"body":{"classes/DatGUIMenuUI.html":{}}}],["maxcutactive",{"_index":984,"title":{},"body":{"classes/Cut.html":{}}}],["maxentries",{"_index":1594,"title":{},"body":{"classes/InfoLogger.html":{}}}],["maximum",{"_index":756,"title":{},"body":{"classes/ColorOptions.html":{},"classes/Cut.html":{}}}],["maxpositionx",{"_index":1043,"title":{},"body":{"classes/DatGUIMenuUI.html":{}}}],["maxpositiony",{"_index":1044,"title":{},"body":{"classes/DatGUIMenuUI.html":{}}}],["maxpositionz",{"_index":1045,"title":{},"body":{"classes/DatGUIMenuUI.html":{}}}],["maxstepsize",{"_index":2378,"title":{},"body":{"classes/State.html":{}}}],["maxvalue",{"_index":985,"title":{},"body":{"classes/Cut.html":{},"classes/DatGUIMenuUI.html":{}}}],["menu",{"_index":736,"title":{},"body":{"classes/ColorOptions.html":{},"interfaces/Configuration.html":{},"classes/DatGUIMenuUI.html":{},"classes/PhoenixMenuNode.html":{},"classes/PhoenixMenuUI.html":{},"interfaces/PhoenixUI.html":{},"classes/StateManager.html":{},"classes/URLOptionsManager.html":{},"interfaces/Window.html":{},"changelog.html":{},"coverage.html":{},"miscellaneous/typealiases.html":{}}}],["menu's",{"_index":1091,"title":{},"body":{"classes/DatGUIMenuUI.html":{},"classes/PhoenixMenuUI.html":{},"interfaces/PhoenixUI.html":{}}}],["menu.onchange((value",{"_index":1206,"title":{},"body":{"classes/DatGUIMenuUI.html":{}}}],["menu/config",{"_index":3846,"title":{},"body":{"miscellaneous/typealiases.html":{}}}],["menu/phoenix",{"_index":777,"title":{},"body":{"classes/ColorOptions.html":{},"interfaces/Configuration.html":{},"classes/PhoenixMenuNode.html":{},"classes/PhoenixMenuUI.html":{},"classes/StateManager.html":{},"coverage.html":{}}}],["menunodename",{"_index":2968,"title":{},"body":{"interfaces/Window.html":{}}}],["menus",{"_index":1395,"title":{},"body":{"interfaces/EventDataLoader.html":{},"changelog.html":{},"miscellaneous/typealiases.html":{}}}],["menusubfolder",{"_index":1851,"title":{},"body":{"classes/PhoenixMenuUI.html":{},"interfaces/PhoenixUI.html":{}}}],["mesh",{"_index":244,"title":{},"body":{"interfaces/AnimationPreset.html":{},"classes/CMSObjects.html":{},"classes/DatGUIMenuUI.html":{},"classes/PhoenixMenuUI.html":{},"classes/TracksMaterial.html":{},"classes/TracksMesh.html":{}}}],["mesh(particlegeometry",{"_index":489,"title":{},"body":{"interfaces/AnimationPreset.html":{}}}],["meshbasicmaterial",{"_index":243,"title":{},"body":{"interfaces/AnimationPreset.html":{},"classes/CMSObjects.html":{}}}],["meshphongmaterial",{"_index":651,"title":{},"body":{"classes/ColorManager.html":{},"classes/DatGUIMenuUI.html":{},"classes/PhoenixMenuUI.html":{}}}],["metadata",{"_index":1409,"title":{},"body":{"interfaces/EventDataLoader.html":{},"classes/StateManager.html":{},"interfaces/Window.html":{}}}],["method",{"_index":3495,"title":{},"body":{"changelog.html":{}}}],["methods",{"_index":33,"title":{},"body":{"classes/ARManager.html":{},"classes/ActiveVariable.html":{},"classes/CMSObjects.html":{},"classes/ColorManager.html":{},"classes/ColorOptions.html":{},"classes/CoordinateHelper.html":{},"classes/Cut.html":{},"classes/DatGUIMenuUI.html":{},"classes/EffectsManager.html":{},"interfaces/EventDataLoader.html":{},"classes/ExportManager.html":{},"classes/Field.html":{},"classes/InfoLogger.html":{},"classes/LoadingManager.html":{},"classes/PhoenixMenuNode.html":{},"classes/PhoenixMenuUI.html":{},"interfaces/PhoenixUI.html":{},"classes/PresetView.html":{},"classes/PrettySymbols.html":{},"classes/RKHelper.html":{},"classes/RendererManager.html":{},"classes/RungeKutta.html":{},"classes/ScriptLoader.html":{},"classes/SelectionManager.html":{},"classes/StateManager.html":{},"classes/TracksMesh.html":{},"classes/URLOptionsManager.html":{},"classes/VRManager.html":{},"interfaces/Window.html":{},"classes/XRManager.html":{}}}],["mev",{"_index":2070,"title":{},"body":{"classes/RKHelper.html":{}}}],["mid",{"_index":758,"title":{},"body":{"classes/ColorOptions.html":{}}}],["min",{"_index":739,"title":{},"body":{"classes/ColorOptions.html":{},"classes/PhoenixMenuUI.html":{}}}],["min/max",{"_index":743,"title":{},"body":{"classes/ColorOptions.html":{}}}],["mincut",{"_index":1237,"title":{},"body":{"classes/DatGUIMenuUI.html":{}}}],["mincut.onchange((value",{"_index":1242,"title":{},"body":{"classes/DatGUIMenuUI.html":{}}}],["mincutactive",{"_index":986,"title":{},"body":{"classes/Cut.html":{}}}],["minimum",{"_index":755,"title":{},"body":{"classes/ColorOptions.html":{},"classes/Cut.html":{}}}],["minor",{"_index":3629,"title":{},"body":{"changelog.html":{}}}],["minormax",{"_index":759,"title":{},"body":{"classes/ColorOptions.html":{}}}],["minvalue",{"_index":987,"title":{},"body":{"classes/Cut.html":{},"classes/DatGUIMenuUI.html":{}}}],["misc",{"_index":3440,"title":{},"body":{"changelog.html":{}}}],["miscellaneous",{"_index":3785,"title":{"miscellaneous/enumerations.html":{},"miscellaneous/typealiases.html":{},"miscellaneous/variables.html":{}},"body":{"miscellaneous/enumerations.html":{},"miscellaneous/typealiases.html":{},"miscellaneous/variables.html":{}}}],["missing",{"_index":3368,"title":{},"body":{"changelog.html":{}}}],["missingenergy",{"_index":3890,"title":{},"body":{"miscellaneous/variables.html":{}}}],["mm",{"_index":2069,"title":{},"body":{"classes/RKHelper.html":{}}}],["mock",{"_index":3901,"title":{},"body":{"miscellaneous/variables.html":{}}}],["mocking",{"_index":3918,"title":{},"body":{"miscellaneous/variables.html":{}}}],["mode",{"_index":128,"title":{},"body":{"classes/ARManager.html":{},"classes/SelectionManager.html":{},"classes/VRManager.html":{},"classes/XRManager.html":{},"changelog.html":{},"miscellaneous/typealiases.html":{}}}],["model",{"_index":2679,"title":{},"body":{"classes/URLOptionsManager.html":{},"miscellaneous/variables.html":{}}}],["models/preset",{"_index":885,"title":{},"body":{"interfaces/Configuration.html":{}}}],["modelviewmatrix",{"_index":2570,"title":{},"body":{"classes/TracksMaterial.html":{},"classes/TracksMesh.html":{}}}],["modular",{"_index":3790,"title":{},"body":{"index.html":{}}}],["module",{"_index":3799,"title":{},"body":{"index.html":{}}}],["modules",{"_index":3817,"title":{"modules.html":{}},"body":{"modules.html":{}}}],["mom",{"_index":780,"title":{},"body":{"classes/ColorOptions.html":{},"classes/PrettySymbols.html":{},"changelog.html":{},"miscellaneous/enumerations.html":{}}}],["momcolors",{"_index":689,"title":{},"body":{"classes/ColorOptions.html":{}}}],["momentum",{"_index":720,"title":{},"body":{"classes/ColorOptions.html":{},"classes/Field.html":{},"classes/PrettySymbols.html":{},"classes/RungeKutta.html":{},"classes/State.html":{},"changelog.html":{}}}],["momvalue",{"_index":828,"title":{},"body":{"classes/ColorOptions.html":{}}}],["momvalue.color",{"_index":837,"title":{},"body":{"classes/ColorOptions.html":{}}}],["more",{"_index":3541,"title":{},"body":{"changelog.html":{}}}],["mouse",{"_index":2259,"title":{},"body":{"classes/SelectionManager.html":{}}}],["mouse.x",{"_index":2364,"title":{},"body":{"classes/SelectionManager.html":{}}}],["mouse.y",{"_index":2367,"title":{},"body":{"classes/SelectionManager.html":{}}}],["move",{"_index":288,"title":{},"body":{"interfaces/AnimationPreset.html":{},"classes/CoordinateHelper.html":{},"classes/SelectionManager.html":{},"classes/VRManager.html":{},"interfaces/Window.html":{},"changelog.html":{}}}],["moveindirection",{"_index":2786,"title":{},"body":{"classes/VRManager.html":{}}}],["moveindirection(direction",{"_index":2796,"title":{},"body":{"classes/VRManager.html":{}}}],["movement",{"_index":2789,"title":{},"body":{"classes/VRManager.html":{}}}],["moving",{"_index":378,"title":{},"body":{"interfaces/AnimationPreset.html":{},"classes/VRManager.html":{}}}],["mss",{"_index":1577,"title":{},"body":{"classes/Field.html":{},"classes/RungeKutta.html":{},"classes/State.html":{}}}],["multidimensional",{"_index":522,"title":{},"body":{"interfaces/AnimationPreset.html":{}}}],["multiple",{"_index":1413,"title":{},"body":{"interfaces/EventDataLoader.html":{},"changelog.html":{}}}],["multiplyscalar(fh",{"_index":1570,"title":{},"body":{"classes/Field.html":{},"classes/RungeKutta.html":{},"classes/State.html":{}}}],["multiplyscalar(fh2",{"_index":1565,"title":{},"body":{"classes/Field.html":{},"classes/RungeKutta.html":{},"classes/State.html":{}}}],["multiplyscalar(qop",{"_index":1535,"title":{},"body":{"classes/Field.html":{},"classes/RungeKutta.html":{},"classes/State.html":{}}}],["multiplyscalar(updatedscale.x",{"_index":382,"title":{},"body":{"interfaces/AnimationPreset.html":{}}}],["muon",{"_index":555,"title":{},"body":{"classes/CMSObjects.html":{}}}],["muonchamber",{"_index":602,"title":{},"body":{"classes/CMSObjects.html":{}}}],["muonchamber.add(boxobject",{"_index":611,"title":{},"body":{"classes/CMSObjects.html":{}}}],["muonchamber.add(lineboxobject",{"_index":612,"title":{},"body":{"classes/CMSObjects.html":{}}}],["muonchamberparams",{"_index":557,"title":{},"body":{"classes/CMSObjects.html":{}}}],["muonchamberparams.color",{"_index":595,"title":{},"body":{"classes/CMSObjects.html":{}}}],["muonchamberparams.uuid",{"_index":613,"title":{},"body":{"classes/CMSObjects.html":{}}}],["muonchamberparams[face",{"_index":570,"title":{},"body":{"classes/CMSObjects.html":{}}}],["muonchambers",{"_index":3889,"title":{},"body":{"miscellaneous/variables.html":{}}}],["name",{"_index":52,"title":{},"body":{"classes/ARManager.html":{},"classes/ActiveVariable.html":{},"interfaces/AnimationPreset.html":{},"classes/CMSObjects.html":{},"classes/ColorManager.html":{},"classes/ColorOptions.html":{},"classes/CoordinateHelper.html":{},"classes/Cut.html":{},"classes/DatGUIMenuUI.html":{},"classes/EffectsManager.html":{},"interfaces/EventDataLoader.html":{},"classes/ExportManager.html":{},"classes/Field.html":{},"classes/InfoLogger.html":{},"classes/LoadingManager.html":{},"classes/PhoenixMenuNode.html":{},"classes/PhoenixMenuUI.html":{},"interfaces/PhoenixUI.html":{},"classes/PresetView.html":{},"classes/PrettySymbols.html":{},"classes/RKHelper.html":{},"classes/RendererManager.html":{},"classes/RungeKutta.html":{},"classes/ScriptLoader.html":{},"classes/SelectionManager.html":{},"classes/StateManager.html":{},"classes/TracksMaterial.html":{},"classes/TracksMesh.html":{},"classes/URLOptionsManager.html":{},"classes/VRManager.html":{},"interfaces/Window.html":{},"classes/XRManager.html":{},"changelog.html":{},"miscellaneous/variables.html":{}}}],["name('color",{"_index":1164,"title":{},"body":{"classes/DatGUIMenuUI.html":{}}}],["name('depth",{"_index":1209,"title":{},"body":{"classes/DatGUIMenuUI.html":{}}}],["name('load",{"_index":1265,"title":{},"body":{"classes/DatGUIMenuUI.html":{}}}],["name('max",{"_index":1245,"title":{},"body":{"classes/DatGUIMenuUI.html":{}}}],["name('min",{"_index":1240,"title":{},"body":{"classes/DatGUIMenuUI.html":{}}}],["name('opacity",{"_index":1169,"title":{},"body":{"classes/DatGUIMenuUI.html":{}}}],["name('random",{"_index":1233,"title":{},"body":{"classes/DatGUIMenuUI.html":{}}}],["name('reset",{"_index":1236,"title":{},"body":{"classes/DatGUIMenuUI.html":{}}}],["name('save",{"_index":1264,"title":{},"body":{"classes/DatGUIMenuUI.html":{}}}],["name('scale",{"_index":1177,"title":{},"body":{"classes/DatGUIMenuUI.html":{}}}],["name('show",{"_index":1141,"title":{},"body":{"classes/DatGUIMenuUI.html":{}}}],["name('size",{"_index":1260,"title":{},"body":{"classes/DatGUIMenuUI.html":{}}}],["name('wireframe",{"_index":1149,"title":{},"body":{"classes/DatGUIMenuUI.html":{}}}],["name('x",{"_index":1183,"title":{},"body":{"classes/DatGUIMenuUI.html":{}}}],["name('y",{"_index":1187,"title":{},"body":{"classes/DatGUIMenuUI.html":{}}}],["name('z",{"_index":1190,"title":{},"body":{"classes/DatGUIMenuUI.html":{}}}],["name('çolor",{"_index":1278,"title":{},"body":{"classes/DatGUIMenuUI.html":{}}}],["name.lastindexof",{"_index":1880,"title":{},"body":{"classes/PhoenixMenuUI.html":{}}}],["name.split('>').foreach((nodename",{"_index":1827,"title":{},"body":{"classes/PhoenixMenuNode.html":{}}}],["name.substring(namestart",{"_index":1882,"title":{},"body":{"classes/PhoenixMenuUI.html":{}}}],["named",{"_index":1631,"title":{},"body":{"classes/LoadingManager.html":{}}}],["names",{"_index":1878,"title":{},"body":{"classes/PhoenixMenuUI.html":{},"changelog.html":{}}}],["namespace",{"_index":3547,"title":{},"body":{"changelog.html":{}}}],["namestart",{"_index":1879,"title":{},"body":{"classes/PhoenixMenuUI.html":{}}}],["native",{"_index":933,"title":{},"body":{"classes/CoordinateHelper.html":{}}}],["navigator",{"_index":3135,"title":{},"body":{"classes/XRManager.html":{}}}],["ndof",{"_index":1992,"title":{},"body":{"classes/PrettySymbols.html":{}}}],["near",{"_index":78,"title":{},"body":{"classes/ARManager.html":{}}}],["necessary",{"_index":930,"title":{},"body":{"classes/CoordinateHelper.html":{}}}],["need",{"_index":372,"title":{},"body":{"interfaces/AnimationPreset.html":{},"classes/CoordinateHelper.html":{},"classes/URLOptionsManager.html":{}}}],["needed",{"_index":2020,"title":{},"body":{"classes/PrettySymbols.html":{}}}],["needing",{"_index":3383,"title":{},"body":{"changelog.html":{}}}],["new",{"_index":213,"title":{},"body":{"classes/ActiveVariable.html":{},"interfaces/AnimationPreset.html":{},"classes/CMSObjects.html":{},"classes/CoordinateHelper.html":{},"classes/DatGUIMenuUI.html":{},"classes/EffectsManager.html":{},"classes/ExportManager.html":{},"classes/Field.html":{},"classes/PhoenixMenuNode.html":{},"classes/PhoenixMenuUI.html":{},"classes/PrettySymbols.html":{},"classes/RendererManager.html":{},"classes/RungeKutta.html":{},"classes/ScriptLoader.html":{},"classes/SelectionManager.html":{},"classes/State.html":{},"classes/StateManager.html":{},"classes/TracksMaterial.html":{},"classes/TracksMesh.html":{},"classes/URLOptionsManager.html":{},"classes/VRManager.html":{},"interfaces/Window.html":{},"classes/XRManager.html":{},"changelog.html":{},"coverage.html":{},"index.html":{},"miscellaneous/variables.html":{}}}],["newcolorbyoption",{"_index":809,"title":{},"body":{"classes/ColorOptions.html":{}}}],["newcolorbyoption?.apply",{"_index":812,"title":{},"body":{"classes/ColorOptions.html":{}}}],["newcolorbyoption?.key",{"_index":811,"title":{},"body":{"classes/ColorOptions.html":{}}}],["newvalue",{"_index":1172,"title":{},"body":{"classes/DatGUIMenuUI.html":{}}}],["next",{"_index":2477,"title":{},"body":{"classes/TracksMaterial.html":{},"classes/TracksMesh.html":{}}}],["next_track_id",{"_index":2478,"title":{},"body":{"classes/TracksMaterial.html":{},"classes/TracksMesh.html":{}}}],["nextp",{"_index":2584,"title":{},"body":{"classes/TracksMaterial.html":{},"classes/TracksMesh.html":{}}}],["nextpos",{"_index":2576,"title":{},"body":{"classes/TracksMaterial.html":{},"classes/TracksMesh.html":{}}}],["nextpos.w",{"_index":2586,"title":{},"body":{"classes/TracksMaterial.html":{},"classes/TracksMesh.html":{}}}],["nextpos.xy",{"_index":2585,"title":{},"body":{"classes/TracksMaterial.html":{},"classes/TracksMesh.html":{}}}],["ng",{"_index":3219,"title":{},"body":{"changelog.html":{}}}],["node",{"_index":737,"title":{},"body":{"classes/ColorOptions.html":{},"interfaces/Configuration.html":{},"classes/PhoenixMenuNode.html":{},"classes/PhoenixMenuUI.html":{},"classes/StateManager.html":{},"interfaces/Window.html":{},"changelog.html":{},"miscellaneous/typealiases.html":{}}}],["node.ts",{"_index":1678,"title":{},"body":{"classes/PhoenixMenuNode.html":{},"coverage.html":{}}}],["node.ts:10",{"_index":1706,"title":{},"body":{"classes/PhoenixMenuNode.html":{}}}],["node.ts:105",{"_index":1740,"title":{},"body":{"classes/PhoenixMenuNode.html":{}}}],["node.ts:115",{"_index":1717,"title":{},"body":{"classes/PhoenixMenuNode.html":{}}}],["node.ts:12",{"_index":1710,"title":{},"body":{"classes/PhoenixMenuNode.html":{}}}],["node.ts:129",{"_index":1737,"title":{},"body":{"classes/PhoenixMenuNode.html":{}}}],["node.ts:14",{"_index":1712,"title":{},"body":{"classes/PhoenixMenuNode.html":{}}}],["node.ts:149",{"_index":1720,"title":{},"body":{"classes/PhoenixMenuNode.html":{}}}],["node.ts:16",{"_index":1700,"title":{},"body":{"classes/PhoenixMenuNode.html":{}}}],["node.ts:175",{"_index":1729,"title":{},"body":{"classes/PhoenixMenuNode.html":{}}}],["node.ts:18",{"_index":1705,"title":{},"body":{"classes/PhoenixMenuNode.html":{}}}],["node.ts:196",{"_index":1731,"title":{},"body":{"classes/PhoenixMenuNode.html":{}}}],["node.ts:20",{"_index":1708,"title":{},"body":{"classes/PhoenixMenuNode.html":{}}}],["node.ts:22",{"_index":1711,"title":{},"body":{"classes/PhoenixMenuNode.html":{}}}],["node.ts:242",{"_index":1723,"title":{},"body":{"classes/PhoenixMenuNode.html":{}}}],["node.ts:260",{"_index":1728,"title":{},"body":{"classes/PhoenixMenuNode.html":{}}}],["node.ts:27",{"_index":1702,"title":{},"body":{"classes/PhoenixMenuNode.html":{}}}],["node.ts:30",{"_index":1701,"title":{},"body":{"classes/PhoenixMenuNode.html":{}}}],["node.ts:32",{"_index":1698,"title":{},"body":{"classes/PhoenixMenuNode.html":{}}}],["node.ts:66",{"_index":1714,"title":{},"body":{"classes/PhoenixMenuNode.html":{}}}],["node.ts:8",{"_index":1707,"title":{},"body":{"classes/PhoenixMenuNode.html":{}}}],["node.ts:83",{"_index":1735,"title":{},"body":{"classes/PhoenixMenuNode.html":{}}}],["node.ts:92",{"_index":1733,"title":{},"body":{"classes/PhoenixMenuNode.html":{}}}],["nodechild",{"_index":1817,"title":{},"body":{"classes/PhoenixMenuNode.html":{}}}],["nodechild.loadstatefromjson(childstate",{"_index":1823,"title":{},"body":{"classes/PhoenixMenuNode.html":{}}}],["nodechild.name",{"_index":1819,"title":{},"body":{"classes/PhoenixMenuNode.html":{}}}],["nodechild.nodelevel",{"_index":1821,"title":{},"body":{"classes/PhoenixMenuNode.html":{}}}],["nodeconfig",{"_index":1805,"title":{},"body":{"classes/PhoenixMenuNode.html":{}}}],["nodeconfig.label",{"_index":1809,"title":{},"body":{"classes/PhoenixMenuNode.html":{}}}],["nodeconfig.type",{"_index":1807,"title":{},"body":{"classes/PhoenixMenuNode.html":{}}}],["nodeconfig[prop",{"_index":1812,"title":{},"body":{"classes/PhoenixMenuNode.html":{}}}],["nodefound",{"_index":1824,"title":{},"body":{"classes/PhoenixMenuNode.html":{}}}],["nodejs.timeout",{"_index":2849,"title":{},"body":{"classes/VRManager.html":{}}}],["nodelevel",{"_index":1684,"title":{},"body":{"classes/PhoenixMenuNode.html":{}}}],["nodename",{"_index":1828,"title":{},"body":{"classes/PhoenixMenuNode.html":{}}}],["nodename.trim",{"_index":1829,"title":{},"body":{"classes/PhoenixMenuNode.html":{}}}],["nodes",{"_index":1703,"title":{},"body":{"classes/PhoenixMenuNode.html":{},"changelog.html":{}}}],["none",{"_index":868,"title":{},"body":{"interfaces/Configuration.html":{},"classes/URLOptionsManager.html":{},"miscellaneous/variables.html":{}}}],["normal",{"_index":1321,"title":{},"body":{"classes/EffectsManager.html":{},"classes/TracksMaterial.html":{},"classes/TracksMesh.html":{}}}],["normal.x",{"_index":2593,"title":{},"body":{"classes/TracksMaterial.html":{},"classes/TracksMesh.html":{}}}],["normal.xy",{"_index":2591,"title":{},"body":{"classes/TracksMaterial.html":{},"classes/TracksMesh.html":{}}}],["normalblending",{"_index":1339,"title":{},"body":{"classes/EffectsManager.html":{}}}],["normalize(curp",{"_index":2588,"title":{},"body":{"classes/TracksMaterial.html":{},"classes/TracksMesh.html":{}}}],["normalize(nextp",{"_index":2587,"title":{},"body":{"classes/TracksMaterial.html":{},"classes/TracksMesh.html":{}}}],["notable",{"_index":3165,"title":{},"body":{"changelog.html":{}}}],["note",{"_index":139,"title":{},"body":{"classes/ARManager.html":{},"classes/VRManager.html":{},"classes/XRManager.html":{},"changelog.html":{}}}],["notforced",{"_index":1976,"title":{},"body":{"classes/PresetView.html":{},"miscellaneous/enumerations.html":{}}}],["nothing",{"_index":959,"title":{},"body":{"classes/CoordinateHelper.html":{}}}],["now",{"_index":971,"title":{},"body":{"classes/CoordinateHelper.html":{}}}],["nowdisplayingevent",{"_index":2883,"title":{},"body":{"interfaces/Window.html":{}}}],["npm",{"_index":3797,"title":{},"body":{"index.html":{}}}],["null",{"_index":90,"title":{},"body":{"classes/ARManager.html":{},"interfaces/AnimationPreset.html":{},"classes/DatGUIMenuUI.html":{},"classes/ExportManager.html":{},"classes/PhoenixMenuUI.html":{},"classes/RendererManager.html":{},"classes/StateManager.html":{},"classes/VRManager.html":{},"classes/XRManager.html":{},"miscellaneous/variables.html":{}}}],["number",{"_index":117,"title":{},"body":{"classes/ARManager.html":{},"interfaces/AnimationPreset.html":{},"classes/CMSObjects.html":{},"classes/ColorManager.html":{},"classes/ColorOptions.html":{},"interfaces/Configuration.html":{},"classes/CoordinateHelper.html":{},"classes/Cut.html":{},"classes/DatGUIMenuUI.html":{},"interfaces/EventDataLoader.html":{},"classes/Field.html":{},"classes/InfoLogger.html":{},"classes/LoadingManager.html":{},"classes/PhoenixMenuNode.html":{},"classes/PresetView.html":{},"classes/RendererManager.html":{},"classes/RungeKutta.html":{},"classes/SelectionManager.html":{},"classes/State.html":{},"classes/StateManager.html":{},"classes/TracksMaterial.html":{},"classes/TracksMesh.html":{},"classes/VRManager.html":{},"interfaces/Window.html":{},"changelog.html":{},"miscellaneous/variables.html":{}}}],["number'].includes",{"_index":2350,"title":{},"body":{"classes/SelectionManager.html":{}}}],["numofsteps",{"_index":301,"title":{},"body":{"interfaces/AnimationPreset.html":{}}}],["obj",{"_index":1193,"title":{},"body":{"classes/DatGUIMenuUI.html":{},"classes/ExportManager.html":{},"classes/RendererManager.html":{},"interfaces/Window.html":{},"changelog.html":{},"index.html":{}}}],["obj.eventobject",{"_index":410,"title":{},"body":{"interfaces/AnimationPreset.html":{}}}],["obj.eventobject.name",{"_index":409,"title":{},"body":{"interfaces/AnimationPreset.html":{}}}],["obj.eventobject.visible",{"_index":423,"title":{},"body":{"interfaces/AnimationPreset.html":{}}}],["obj.obj",{"_index":1456,"title":{},"body":{"classes/ExportManager.html":{}}}],["object",{"_index":69,"title":{},"body":{"classes/ARManager.html":{},"interfaces/AnimationPreset.html":{},"classes/CMSObjects.html":{},"classes/ColorManager.html":{},"classes/ColorOptions.html":{},"classes/DatGUIMenuUI.html":{},"interfaces/EventDataLoader.html":{},"classes/PhoenixMenuNode.html":{},"classes/PhoenixMenuUI.html":{},"interfaces/PhoenixUI.html":{},"classes/PrettySymbols.html":{},"classes/RendererManager.html":{},"classes/SelectionManager.html":{},"interfaces/Window.html":{},"changelog.html":{},"miscellaneous/variables.html":{}}}],["object's",{"_index":822,"title":{},"body":{"classes/ColorOptions.html":{},"classes/DatGUIMenuUI.html":{},"interfaces/EventDataLoader.html":{},"interfaces/Window.html":{}}}],["object(s",{"_index":643,"title":{},"body":{"classes/ColorManager.html":{}}}],["object.assign",{"_index":600,"title":{},"body":{"classes/CMSObjects.html":{},"classes/PrettySymbols.html":{},"classes/RKHelper.html":{},"classes/TracksMaterial.html":{},"classes/TracksMesh.html":{}}}],["object.assign(alleventsobject",{"_index":2748,"title":{},"body":{"classes/URLOptionsManager.html":{}}}],["object.defineproperties(this",{"_index":2609,"title":{},"body":{"classes/TracksMaterial.html":{},"classes/TracksMesh.html":{}}}],["object.entries(this.momcolors).foreach(([key",{"_index":827,"title":{},"body":{"classes/ColorOptions.html":{}}}],["object.entries(urloptionwithids).foreach(([urloption",{"_index":2772,"title":{},"body":{"classes/URLOptionsManager.html":{}}}],["object.keys(fileswithdata",{"_index":2744,"title":{},"body":{"classes/URLOptionsManager.html":{}}}],["object.keys(intersectedobject.userdata",{"_index":2346,"title":{},"body":{"classes/SelectionManager.html":{}}}],["object.keys(paramscopy",{"_index":2014,"title":{},"body":{"classes/PrettySymbols.html":{}}}],["object.keys(prettyparams",{"_index":2340,"title":{},"body":{"classes/SelectionManager.html":{}}}],["object.keys(prettysymbols.symbols).find((symbol",{"_index":2006,"title":{},"body":{"classes/PrettySymbols.html":{}}}],["object.keys(sceneconfiguration.eventdata",{"_index":3056,"title":{},"body":{"interfaces/Window.html":{}}}],["object.keys(this.progressitems).length",{"_index":1668,"title":{},"body":{"classes/LoadingManager.html":{}}}],["object.keys(trackscollections",{"_index":2064,"title":{},"body":{"classes/RKHelper.html":{}}}],["object.material.color.set(color",{"_index":656,"title":{},"body":{"classes/ColorManager.html":{}}}],["object.material?.color",{"_index":654,"title":{},"body":{"classes/ColorManager.html":{}}}],["object.name",{"_index":673,"title":{},"body":{"classes/ColorManager.html":{},"classes/ExportManager.html":{}}}],["object.userdata",{"_index":672,"title":{},"body":{"classes/ColorManager.html":{}}}],["object.values(collection.children",{"_index":662,"title":{},"body":{"classes/ColorManager.html":{}}}],["object.values(this.progressitems).reduce",{"_index":1664,"title":{},"body":{"classes/LoadingManager.html":{}}}],["object3d",{"_index":247,"title":{},"body":{"interfaces/AnimationPreset.html":{},"classes/CMSObjects.html":{},"classes/DatGUIMenuUI.html":{},"classes/ExportManager.html":{},"classes/PhoenixMenuUI.html":{},"interfaces/PhoenixUI.html":{},"classes/SelectionManager.html":{}}}],["object['material",{"_index":675,"title":{},"body":{"classes/ColorManager.html":{}}}],["object['material']?.color",{"_index":664,"title":{},"body":{"classes/ColorManager.html":{}}}],["objectname",{"_index":3030,"title":{},"body":{"interfaces/Window.html":{}}}],["objectparams",{"_index":762,"title":{},"body":{"classes/ColorOptions.html":{}}}],["objectparams?.charge",{"_index":826,"title":{},"body":{"classes/ColorOptions.html":{}}}],["objectparams?.dparams?.[4",{"_index":843,"title":{},"body":{"classes/ColorOptions.html":{}}}],["objectparams?.mom",{"_index":846,"title":{},"body":{"classes/ColorOptions.html":{}}}],["objects",{"_index":257,"title":{},"body":{"interfaces/AnimationPreset.html":{},"classes/CMSObjects.html":{},"classes/ColorManager.html":{},"classes/ColorOptions.html":{},"interfaces/EventDataLoader.html":{},"classes/SelectionManager.html":{},"interfaces/Window.html":{},"changelog.html":{}}}],["objects.traverse((object",{"_index":653,"title":{},"body":{"classes/ColorManager.html":{}}}],["objects.ts",{"_index":545,"title":{},"body":{"classes/CMSObjects.html":{},"coverage.html":{}}}],["objects.ts:25",{"_index":553,"title":{},"body":{"classes/CMSObjects.html":{}}}],["objectsgroup",{"_index":637,"title":{},"body":{"classes/ColorManager.html":{},"classes/SelectionManager.html":{}}}],["objectsgroup.getobjectbyproperty('uuid",{"_index":2377,"title":{},"body":{"classes/SelectionManager.html":{}}}],["objectstoanimatewithsphere",{"_index":329,"title":{},"body":{"interfaces/AnimationPreset.html":{}}}],["objectstoanimatewithsphere.foreach((obj",{"_index":408,"title":{},"body":{"interfaces/AnimationPreset.html":{}}}],["objectstoanimatewithsphere.push",{"_index":402,"title":{},"body":{"interfaces/AnimationPreset.html":{}}}],["objecttype",{"_index":1475,"title":{},"body":{"classes/ExportManager.html":{},"interfaces/Window.html":{}}}],["objecttype.children",{"_index":1479,"title":{},"body":{"classes/ExportManager.html":{}}}],["objecttype.name",{"_index":1477,"title":{},"body":{"classes/ExportManager.html":{}}}],["objectuserdata",{"_index":639,"title":{},"body":{"classes/ColorManager.html":{},"classes/ColorOptions.html":{}}}],["objexporter",{"_index":1445,"title":{},"body":{"classes/ExportManager.html":{}}}],["objfolder",{"_index":1159,"title":{},"body":{"classes/DatGUIMenuUI.html":{},"classes/PhoenixMenuUI.html":{}}}],["objfolder.add(this.guiparameters[name",{"_index":1194,"title":{},"body":{"classes/DatGUIMenuUI.html":{}}}],["objfolder.remove",{"_index":1888,"title":{},"body":{"classes/PhoenixMenuUI.html":{}}}],["objfolder.togglestate",{"_index":1883,"title":{},"body":{"classes/PhoenixMenuUI.html":{}}}],["objs",{"_index":3382,"title":{},"body":{"changelog.html":{}}}],["observable",{"_index":202,"title":{},"body":{"classes/ActiveVariable.html":{},"classes/SelectionManager.html":{},"changelog.html":{}}}],["observed",{"_index":195,"title":{},"body":{"classes/ActiveVariable.html":{}}}],["olddrawrangecount",{"_index":360,"title":{},"body":{"interfaces/AnimationPreset.html":{}}}],["older",{"_index":3491,"title":{},"body":{"changelog.html":{}}}],["omit",{"_index":1716,"title":{},"body":{"classes/PhoenixMenuNode.html":{}}}],["onanimationend",{"_index":286,"title":{},"body":{"interfaces/AnimationPreset.html":{},"interfaces/Window.html":{}}}],["onanimationsphereupdate",{"_index":406,"title":{},"body":{"interfaces/AnimationPreset.html":{}}}],["onanimationsphereupdate(new",{"_index":439,"title":{},"body":{"interfaces/AnimationPreset.html":{}}}],["onanimationstart",{"_index":319,"title":{},"body":{"interfaces/AnimationPreset.html":{}}}],["once",{"_index":399,"title":{},"body":{"interfaces/AnimationPreset.html":{}}}],["onchange",{"_index":789,"title":{},"body":{"classes/ColorOptions.html":{},"classes/PhoenixMenuUI.html":{}}}],["onchange((value",{"_index":1184,"title":{},"body":{"classes/DatGUIMenuUI.html":{}}}],["onclick",{"_index":792,"title":{},"body":{"classes/ColorOptions.html":{},"classes/PhoenixMenuUI.html":{},"classes/StateManager.html":{}}}],["oncolorchange",{"_index":1249,"title":{},"body":{"classes/DatGUIMenuUI.html":{},"classes/PhoenixMenuUI.html":{}}}],["oncontrollerselectend",{"_index":2784,"title":{},"body":{"classes/VRManager.html":{}}}],["oncontrollerselectstart",{"_index":2785,"title":{},"body":{"classes/VRManager.html":{}}}],["ondisplayedeventchange",{"_index":2882,"title":{},"body":{"interfaces/Window.html":{}}}],["ondocumentmousedown",{"_index":2238,"title":{},"body":{"classes/SelectionManager.html":{}}}],["one",{"_index":1201,"title":{},"body":{"classes/DatGUIMenuUI.html":{},"interfaces/EventDataLoader.html":{},"classes/PhoenixMenuNode.html":{},"classes/ScriptLoader.html":{},"classes/SelectionManager.html":{},"classes/URLOptionsManager.html":{},"interfaces/Window.html":{},"changelog.html":{}}}],["onend",{"_index":316,"title":{},"body":{"interfaces/AnimationPreset.html":{},"interfaces/Window.html":{}}}],["oneventschange",{"_index":2881,"title":{},"body":{"interfaces/Window.html":{}}}],["onfileread",{"_index":3898,"title":{},"body":{"miscellaneous/variables.html":{}}}],["onfileread?.(e.target.result.tostring",{"_index":3913,"title":{},"body":{"miscellaneous/variables.html":{}}}],["onloadcallbacks",{"_index":1618,"title":{},"body":{"classes/LoadingManager.html":{}}}],["onloadlabels",{"_index":1251,"title":{},"body":{"classes/DatGUIMenuUI.html":{},"classes/PhoenixMenuUI.html":{}}}],["onlyselectedcolorbyoption",{"_index":699,"title":{},"body":{"classes/ColorOptions.html":{}}}],["onprogress",{"_index":1627,"title":{},"body":{"classes/LoadingManager.html":{}}}],["onprogress(id",{"_index":1647,"title":{},"body":{"classes/LoadingManager.html":{}}}],["onprogresscallbacks",{"_index":1619,"title":{},"body":{"classes/LoadingManager.html":{}}}],["onremovelabel",{"_index":1096,"title":{},"body":{"classes/DatGUIMenuUI.html":{},"classes/PhoenixMenuUI.html":{},"interfaces/PhoenixUI.html":{}}}],["onsavelabels",{"_index":1250,"title":{},"body":{"classes/DatGUIMenuUI.html":{},"classes/PhoenixMenuUI.html":{}}}],["onsessionended",{"_index":28,"title":{},"body":{"classes/ARManager.html":{},"classes/VRManager.html":{},"interfaces/Window.html":{},"classes/XRManager.html":{}}}],["onsessionstarted",{"_index":131,"title":{},"body":{"classes/ARManager.html":{},"classes/VRManager.html":{},"classes/XRManager.html":{}}}],["onsizechange",{"_index":1248,"title":{},"body":{"classes/DatGUIMenuUI.html":{},"classes/PhoenixMenuUI.html":{}}}],["ontoggle",{"_index":1247,"title":{},"body":{"classes/DatGUIMenuUI.html":{},"classes/PhoenixMenuNode.html":{},"classes/PhoenixMenuUI.html":{}}}],["ontouchdown",{"_index":2239,"title":{},"body":{"classes/SelectionManager.html":{}}}],["ontouchmove",{"_index":2240,"title":{},"body":{"classes/SelectionManager.html":{}}}],["onupdate",{"_index":197,"title":{},"body":{"classes/ActiveVariable.html":{}}}],["onupdate(callback",{"_index":207,"title":{},"body":{"classes/ActiveVariable.html":{}}}],["onxrsessionended",{"_index":34,"title":{},"body":{"classes/ARManager.html":{},"classes/VRManager.html":{},"classes/XRManager.html":{}}}],["onxrsessionstarted",{"_index":36,"title":{},"body":{"classes/ARManager.html":{},"classes/VRManager.html":{},"classes/XRManager.html":{}}}],["onxrsessionstarted(session",{"_index":113,"title":{},"body":{"classes/ARManager.html":{},"classes/VRManager.html":{},"classes/XRManager.html":{}}}],["opacity",{"_index":487,"title":{},"body":{"interfaces/AnimationPreset.html":{},"classes/CMSObjects.html":{},"classes/DatGUIMenuUI.html":{},"classes/PhoenixMenuUI.html":{},"changelog.html":{}}}],["opacity.onfinishchange((newvalue",{"_index":1170,"title":{},"body":{"classes/DatGUIMenuUI.html":{}}}],["openfile",{"_index":2872,"title":{},"body":{"interfaces/Window.html":{}}}],["openfile(url",{"_index":3036,"title":{},"body":{"interfaces/Window.html":{}}}],["opening",{"_index":1971,"title":{},"body":{"classes/PresetView.html":{},"classes/StateManager.html":{},"changelog.html":{}}}],["openingangle",{"_index":2454,"title":{},"body":{"classes/StateManager.html":{}}}],["openingclippingangle",{"_index":2397,"title":{},"body":{"classes/StateManager.html":{}}}],["operations",{"_index":13,"title":{},"body":{"classes/ARManager.html":{},"interfaces/AnimationPreset.html":{},"classes/DatGUIMenuUI.html":{},"classes/Field.html":{},"classes/PhoenixMenuUI.html":{},"classes/RungeKutta.html":{},"classes/State.html":{},"classes/VRManager.html":{},"interfaces/Window.html":{},"classes/XRManager.html":{}}}],["optimal",{"_index":3657,"title":{},"body":{"changelog.html":{}}}],["optimize",{"_index":3467,"title":{},"body":{"changelog.html":{}}}],["option",{"_index":746,"title":{},"body":{"classes/ColorOptions.html":{},"classes/URLOptionsManager.html":{},"changelog.html":{},"miscellaneous/typealiases.html":{}}}],["optional",{"_index":54,"title":{},"body":{"classes/ARManager.html":{},"classes/ActiveVariable.html":{},"interfaces/AnimationPreset.html":{},"classes/CMSObjects.html":{},"classes/ColorManager.html":{},"classes/ColorOptions.html":{},"interfaces/Configuration.html":{},"classes/CoordinateHelper.html":{},"classes/Cut.html":{},"classes/DatGUIMenuUI.html":{},"classes/EffectsManager.html":{},"interfaces/EventDataLoader.html":{},"classes/ExportManager.html":{},"classes/Field.html":{},"classes/InfoLogger.html":{},"classes/LoadingManager.html":{},"classes/PhoenixMenuNode.html":{},"classes/PhoenixMenuUI.html":{},"interfaces/PhoenixUI.html":{},"classes/PresetView.html":{},"classes/PrettySymbols.html":{},"classes/RKHelper.html":{},"classes/RendererManager.html":{},"classes/RungeKutta.html":{},"classes/ScriptLoader.html":{},"classes/SelectionManager.html":{},"classes/StateManager.html":{},"classes/TracksMaterial.html":{},"classes/TracksMesh.html":{},"classes/URLOptionsManager.html":{},"classes/VRManager.html":{},"classes/XRManager.html":{},"changelog.html":{}}}],["optionalfeatures",{"_index":164,"title":{},"body":{"classes/ARManager.html":{},"classes/VRManager.html":{}}}],["options",{"_index":684,"title":{},"body":{"classes/ColorOptions.html":{},"interfaces/Configuration.html":{},"classes/DatGUIMenuUI.html":{},"classes/PhoenixMenuNode.html":{},"classes/PhoenixMenuUI.html":{},"interfaces/PhoenixUI.html":{},"classes/URLOptionsManager.html":{},"interfaces/Window.html":{},"classes/XRManager.html":{},"changelog.html":{},"coverage.html":{},"miscellaneous/enumerations.html":{},"index.html":{},"miscellaneous/typealiases.html":{},"miscellaneous/variables.html":{}}}],["options.ts",{"_index":683,"title":{},"body":{"classes/ColorOptions.html":{},"coverage.html":{},"miscellaneous/enumerations.html":{},"miscellaneous/typealiases.html":{}}}],["options.ts:124",{"_index":765,"title":{},"body":{"classes/ColorOptions.html":{}}}],["options.ts:150",{"_index":764,"title":{},"body":{"classes/ColorOptions.html":{}}}],["options.ts:176",{"_index":747,"title":{},"body":{"classes/ColorOptions.html":{}}}],["options.ts:193",{"_index":771,"title":{},"body":{"classes/ColorOptions.html":{}}}],["options.ts:207",{"_index":766,"title":{},"body":{"classes/ColorOptions.html":{}}}],["options.ts:246",{"_index":748,"title":{},"body":{"classes/ColorOptions.html":{}}}],["options.ts:256",{"_index":751,"title":{},"body":{"classes/ColorOptions.html":{}}}],["options.ts:26",{"_index":731,"title":{},"body":{"classes/ColorOptions.html":{}}}],["options.ts:28",{"_index":732,"title":{},"body":{"classes/ColorOptions.html":{}}}],["options.ts:282",{"_index":761,"title":{},"body":{"classes/ColorOptions.html":{}}}],["options.ts:293",{"_index":749,"title":{},"body":{"classes/ColorOptions.html":{}}}],["options.ts:30",{"_index":744,"title":{},"body":{"classes/ColorOptions.html":{}}}],["options.ts:300",{"_index":767,"title":{},"body":{"classes/ColorOptions.html":{}}}],["options.ts:32",{"_index":735,"title":{},"body":{"classes/ColorOptions.html":{}}}],["options.ts:35",{"_index":726,"title":{},"body":{"classes/ColorOptions.html":{}}}],["options.ts:57",{"_index":729,"title":{},"body":{"classes/ColorOptions.html":{}}}],["options.ts:65",{"_index":742,"title":{},"body":{"classes/ColorOptions.html":{}}}],["options.ts:74",{"_index":706,"title":{},"body":{"classes/ColorOptions.html":{}}}],["origin",{"_index":445,"title":{},"body":{"interfaces/AnimationPreset.html":{}}}],["original",{"_index":377,"title":{},"body":{"interfaces/AnimationPreset.html":{},"classes/PrettySymbols.html":{}}}],["otherwise",{"_index":821,"title":{},"body":{"classes/ColorOptions.html":{},"classes/PhoenixMenuNode.html":{},"classes/RKHelper.html":{}}}],["out",{"_index":365,"title":{},"body":{"interfaces/AnimationPreset.html":{},"classes/Field.html":{},"classes/PhoenixMenuUI.html":{},"classes/RKHelper.html":{},"classes/RungeKutta.html":{},"classes/State.html":{},"interfaces/Window.html":{},"changelog.html":{}}}],["outdated",{"_index":143,"title":{},"body":{"classes/ARManager.html":{},"classes/VRManager.html":{},"classes/XRManager.html":{}}}],["outline",{"_index":1294,"title":{},"body":{"classes/EffectsManager.html":{},"classes/SelectionManager.html":{},"interfaces/Window.html":{}}}],["outlinepass",{"_index":1328,"title":{},"body":{"classes/EffectsManager.html":{},"classes/SelectionManager.html":{}}}],["outlinepass.overlaymaterial.blending",{"_index":1361,"title":{},"body":{"classes/EffectsManager.html":{}}}],["outlinepass.visibleedgecolor.set(0xdf5330",{"_index":1363,"title":{},"body":{"classes/EffectsManager.html":{}}}],["outlinepass.visibleedgecolor.set(0xffff66",{"_index":1362,"title":{},"body":{"classes/EffectsManager.html":{}}}],["output",{"_index":1464,"title":{},"body":{"classes/ExportManager.html":{},"changelog.html":{}}}],["over",{"_index":333,"title":{},"body":{"interfaces/AnimationPreset.html":{},"classes/EffectsManager.html":{},"classes/SelectionManager.html":{}}}],["overlay",{"_index":64,"title":{},"body":{"classes/ARManager.html":{},"classes/RendererManager.html":{},"classes/URLOptionsManager.html":{},"interfaces/Window.html":{},"changelog.html":{}}}],["overlaycanvas",{"_index":2134,"title":{},"body":{"classes/RendererManager.html":{},"interfaces/Window.html":{}}}],["overlayed",{"_index":3084,"title":{},"body":{"interfaces/Window.html":{}}}],["overlayrenderer",{"_index":2084,"title":{},"body":{"classes/RendererManager.html":{}}}],["overlays",{"_index":67,"title":{},"body":{"classes/ARManager.html":{}}}],["overridden",{"_index":1779,"title":{},"body":{"classes/PhoenixMenuNode.html":{}}}],["override",{"_index":154,"title":{},"body":{"classes/ARManager.html":{},"classes/VRManager.html":{}}}],["overriden",{"_index":1000,"title":{},"body":{"classes/Cut.html":{}}}],["overview",{"_index":3818,"title":{"overview.html":{}},"body":{"overview.html":{}}}],["overwrite",{"_index":2010,"title":{},"body":{"classes/PrettySymbols.html":{}}}],["p",{"_index":1499,"title":{},"body":{"classes/Field.html":{},"classes/PrettySymbols.html":{},"classes/RungeKutta.html":{},"classes/State.html":{},"changelog.html":{}}}],["p.y",{"_index":2504,"title":{},"body":{"classes/TracksMaterial.html":{},"classes/TracksMesh.html":{}}}],["p.z",{"_index":2505,"title":{},"body":{"classes/TracksMaterial.html":{},"classes/TracksMesh.html":{}}}],["package",{"_index":3186,"title":{"dependencies.html":{},"properties.html":{}},"body":{"changelog.html":{},"index.html":{}}}],["packages",{"_index":3260,"title":{},"body":{"changelog.html":{}}}],["page",{"_index":2655,"title":{},"body":{"classes/URLOptionsManager.html":{}}}],["panel",{"_index":1602,"title":{},"body":{"classes/InfoLogger.html":{},"classes/SelectionManager.html":{}}}],["param",{"_index":153,"title":{},"body":{"classes/ARManager.html":{},"classes/ActiveVariable.html":{},"interfaces/AnimationPreset.html":{},"classes/CMSObjects.html":{},"classes/ColorManager.html":{},"classes/ColorOptions.html":{},"classes/CoordinateHelper.html":{},"classes/Cut.html":{},"classes/DatGUIMenuUI.html":{},"classes/EffectsManager.html":{},"interfaces/EventDataLoader.html":{},"classes/ExportManager.html":{},"classes/Field.html":{},"classes/InfoLogger.html":{},"classes/LoadingManager.html":{},"classes/PhoenixMenuNode.html":{},"classes/PhoenixMenuUI.html":{},"interfaces/PhoenixUI.html":{},"classes/PresetView.html":{},"classes/PrettySymbols.html":{},"classes/RKHelper.html":{},"classes/RendererManager.html":{},"classes/RungeKutta.html":{},"classes/ScriptLoader.html":{},"classes/SelectionManager.html":{},"classes/State.html":{},"classes/StateManager.html":{},"classes/TracksMaterial.html":{},"classes/TracksMesh.html":{},"classes/URLOptionsManager.html":{},"classes/VRManager.html":{},"interfaces/Window.html":{},"classes/XRManager.html":{}}}],["parameter",{"_index":2004,"title":{},"body":{"classes/PrettySymbols.html":{}}}],["parameters",{"_index":50,"title":{},"body":{"classes/ARManager.html":{},"classes/ActiveVariable.html":{},"classes/CMSObjects.html":{},"classes/ColorManager.html":{},"classes/ColorOptions.html":{},"classes/CoordinateHelper.html":{},"classes/Cut.html":{},"classes/DatGUIMenuUI.html":{},"classes/EffectsManager.html":{},"interfaces/EventDataLoader.html":{},"classes/ExportManager.html":{},"classes/Field.html":{},"classes/InfoLogger.html":{},"classes/LoadingManager.html":{},"classes/PhoenixMenuNode.html":{},"classes/PhoenixMenuUI.html":{},"interfaces/PhoenixUI.html":{},"classes/PresetView.html":{},"classes/PrettySymbols.html":{},"classes/RKHelper.html":{},"classes/RendererManager.html":{},"classes/RungeKutta.html":{},"classes/ScriptLoader.html":{},"classes/SelectionManager.html":{},"classes/StateManager.html":{},"classes/TracksMaterial.html":{},"classes/TracksMesh.html":{},"classes/URLOptionsManager.html":{},"classes/VRManager.html":{},"interfaces/Window.html":{},"classes/XRManager.html":{},"miscellaneous/typealiases.html":{}}}],["parameters.ts",{"_index":3845,"title":{},"body":{"miscellaneous/typealiases.html":{}}}],["parameterss",{"_index":2000,"title":{},"body":{"classes/PrettySymbols.html":{}}}],["parametrised",{"_index":3671,"title":{},"body":{"changelog.html":{}}}],["paramkey",{"_index":2013,"title":{},"body":{"classes/PrettySymbols.html":{}}}],["params",{"_index":646,"title":{},"body":{"classes/ColorManager.html":{},"classes/PrettySymbols.html":{},"classes/TracksMaterial.html":{},"classes/TracksMesh.html":{},"changelog.html":{}}}],["paramscopy",{"_index":2011,"title":{},"body":{"classes/PrettySymbols.html":{}}}],["paramscopy.dparams",{"_index":2035,"title":{},"body":{"classes/PrettySymbols.html":{}}}],["paramscopy.dparams[0",{"_index":2032,"title":{},"body":{"classes/PrettySymbols.html":{}}}],["paramscopy.dparams[1",{"_index":2034,"title":{},"body":{"classes/PrettySymbols.html":{}}}],["paramscopy.dparams[2",{"_index":2027,"title":{},"body":{"classes/PrettySymbols.html":{}}}],["paramscopy.dparams[3",{"_index":2026,"title":{},"body":{"classes/PrettySymbols.html":{}}}],["paramscopy.dparams[4",{"_index":2029,"title":{},"body":{"classes/PrettySymbols.html":{}}}],["paramscopy?.dparams",{"_index":2024,"title":{},"body":{"classes/PrettySymbols.html":{}}}],["paramscopy['pos",{"_index":2021,"title":{},"body":{"classes/PrettySymbols.html":{}}}],["paramscopy[paramkey",{"_index":2017,"title":{},"body":{"classes/PrettySymbols.html":{}}}],["paramscopy[symbol",{"_index":2016,"title":{},"body":{"classes/PrettySymbols.html":{}}}],["parent",{"_index":1685,"title":{},"body":{"classes/PhoenixMenuNode.html":{},"classes/PhoenixMenuUI.html":{},"classes/ScriptLoader.html":{}}}],["parentelement",{"_index":2199,"title":{},"body":{"classes/ScriptLoader.html":{}}}],["parentelement.appendchild(scriptelement",{"_index":2228,"title":{},"body":{"classes/ScriptLoader.html":{}}}],["parentnode",{"_index":1872,"title":{},"body":{"classes/PhoenixMenuUI.html":{}}}],["parentnode.addchild",{"_index":1881,"title":{},"body":{"classes/PhoenixMenuUI.html":{}}}],["parse",{"_index":1460,"title":{},"body":{"classes/ExportManager.html":{},"classes/URLOptionsManager.html":{},"interfaces/Window.html":{},"index.html":{}}}],["parsefloat(objectparams?.dparams?.[4",{"_index":845,"title":{},"body":{"classes/ColorOptions.html":{}}}],["parsegltfgeometry",{"_index":3006,"title":{},"body":{"interfaces/Window.html":{}}}],["parseint(objectparams?.dparams?.[4",{"_index":825,"title":{},"body":{"classes/ColorOptions.html":{}}}],["parseobjgeometry",{"_index":2986,"title":{},"body":{"interfaces/Window.html":{}}}],["parsephoenixdisplay(input",{"_index":2994,"title":{},"body":{"interfaces/Window.html":{}}}],["parsephoenixevents(eventsdata",{"_index":2939,"title":{},"body":{"interfaces/Window.html":{}}}],["parses",{"_index":2984,"title":{},"body":{"interfaces/Window.html":{}}}],["parsing",{"_index":3624,"title":{},"body":{"changelog.html":{}}}],["part",{"_index":549,"title":{},"body":{"classes/CMSObjects.html":{},"interfaces/EventDataLoader.html":{},"interfaces/Window.html":{}}}],["particle",{"_index":474,"title":{},"body":{"interfaces/AnimationPreset.html":{},"classes/State.html":{},"interfaces/Window.html":{}}}],["particle1",{"_index":488,"title":{},"body":{"interfaces/AnimationPreset.html":{}}}],["particle1.clone",{"_index":491,"title":{},"body":{"interfaces/AnimationPreset.html":{}}}],["particle1.position.setz(distancefromorigin",{"_index":492,"title":{},"body":{"interfaces/AnimationPreset.html":{}}}],["particle2",{"_index":490,"title":{},"body":{"interfaces/AnimationPreset.html":{}}}],["particle2.position.setz",{"_index":493,"title":{},"body":{"interfaces/AnimationPreset.html":{}}}],["particlecolor",{"_index":479,"title":{},"body":{"interfaces/AnimationPreset.html":{}}}],["particlegeometry",{"_index":483,"title":{},"body":{"interfaces/AnimationPreset.html":{}}}],["particlematerial",{"_index":486,"title":{},"body":{"interfaces/AnimationPreset.html":{}}}],["particles",{"_index":473,"title":{},"body":{"interfaces/AnimationPreset.html":{}}}],["particlesize",{"_index":475,"title":{},"body":{"interfaces/AnimationPreset.html":{}}}],["particletoorigin",{"_index":498,"title":{},"body":{"interfaces/AnimationPreset.html":{}}}],["particletweens",{"_index":495,"title":{},"body":{"interfaces/AnimationPreset.html":{}}}],["particletweens.push(particletoorigin",{"_index":500,"title":{},"body":{"interfaces/AnimationPreset.html":{}}}],["particletweens[0].oncomplete",{"_index":501,"title":{},"body":{"interfaces/AnimationPreset.html":{}}}],["parts",{"_index":2926,"title":{},"body":{"interfaces/Window.html":{}}}],["pass",{"_index":1295,"title":{},"body":{"classes/EffectsManager.html":{},"classes/SelectionManager.html":{}}}],["passed",{"_index":1016,"title":{},"body":{"classes/Cut.html":{},"classes/Field.html":{},"classes/RKHelper.html":{},"classes/RungeKutta.html":{},"classes/State.html":{},"interfaces/Window.html":{},"miscellaneous/variables.html":{}}}],["passes",{"_index":1310,"title":{},"body":{"classes/EffectsManager.html":{}}}],["passindex",{"_index":1365,"title":{},"body":{"classes/EffectsManager.html":{}}}],["path",{"_index":238,"title":{},"body":{"interfaces/AnimationPreset.html":{},"classes/Field.html":{},"classes/RungeKutta.html":{},"classes/State.html":{},"classes/URLOptionsManager.html":{},"interfaces/Window.html":{},"changelog.html":{}}}],["path/to/geometry.obj",{"_index":3805,"title":{},"body":{"index.html":{}}}],["pathlength",{"_index":2379,"title":{},"body":{"classes/State.html":{}}}],["paths",{"_index":3220,"title":{},"body":{"changelog.html":{}}}],["per",{"_index":922,"title":{},"body":{"classes/CoordinateHelper.html":{},"changelog.html":{}}}],["perform",{"_index":1035,"title":{},"body":{"classes/DatGUIMenuUI.html":{},"classes/Field.html":{},"classes/PhoenixMenuUI.html":{},"classes/RungeKutta.html":{},"classes/State.html":{}}}],["performance",{"_index":2148,"title":{},"body":{"classes/RendererManager.html":{},"classes/SelectionManager.html":{},"changelog.html":{}}}],["performed",{"_index":1495,"title":{},"body":{"classes/Field.html":{},"classes/RungeKutta.html":{},"classes/State.html":{}}}],["performing",{"_index":1490,"title":{},"body":{"classes/Field.html":{},"classes/RungeKutta.html":{},"classes/State.html":{}}}],["periodically",{"_index":3257,"title":{},"body":{"changelog.html":{}}}],["permission",{"_index":3315,"title":{},"body":{"changelog.html":{}}}],["persist",{"_index":3432,"title":{},"body":{"changelog.html":{}}}],["perspective",{"_index":1865,"title":{},"body":{"classes/PhoenixMenuUI.html":{}}}],["perspectivecamera",{"_index":46,"title":{},"body":{"classes/ARManager.html":{},"classes/XRManager.html":{}}}],["phi",{"_index":907,"title":{},"body":{"classes/CoordinateHelper.html":{},"classes/PrettySymbols.html":{},"classes/RKHelper.html":{},"changelog.html":{}}}],["phi=0",{"_index":961,"title":{},"body":{"classes/CoordinateHelper.html":{}}}],["phi=pi",{"_index":968,"title":{},"body":{"classes/CoordinateHelper.html":{}}}],["phnx",{"_index":2993,"title":{},"body":{"interfaces/Window.html":{}}}],["phoenix",{"_index":66,"title":{},"body":{"classes/ARManager.html":{},"classes/ColorOptions.html":{},"interfaces/Configuration.html":{},"classes/DatGUIMenuUI.html":{},"classes/ExportManager.html":{},"classes/LoadingManager.html":{},"classes/PhoenixMenuNode.html":{},"classes/PhoenixMenuUI.html":{},"interfaces/PhoenixUI.html":{},"classes/StateManager.html":{},"classes/URLOptionsManager.html":{},"interfaces/Window.html":{},"changelog.html":{},"index.html":{},"properties.html":{},"miscellaneous/typealiases.html":{},"miscellaneous/variables.html":{}}}],["phoenix.min.js",{"_index":3811,"title":{},"body":{"index.html":{}}}],["phoenixloader",{"_index":2674,"title":{},"body":{"classes/URLOptionsManager.html":{},"interfaces/Window.html":{},"coverage.html":{},"index.html":{}}}],["phoenixmenu",{"_index":2436,"title":{},"body":{"classes/StateManager.html":{},"classes/URLOptionsManager.html":{}}}],["phoenixmenuconfigs",{"_index":1741,"title":{},"body":{"classes/PhoenixMenuNode.html":{},"miscellaneous/typealiases.html":{}}}],["phoenixmenuconfigs[keyof",{"_index":1743,"title":{},"body":{"classes/PhoenixMenuNode.html":{}}}],["phoenixmenunode",{"_index":703,"title":{"classes/PhoenixMenuNode.html":{}},"body":{"classes/ColorOptions.html":{},"interfaces/Configuration.html":{},"classes/PhoenixMenuNode.html":{},"classes/PhoenixMenuUI.html":{},"classes/StateManager.html":{},"coverage.html":{}}}],["phoenixmenunode(name",{"_index":1750,"title":{},"body":{"classes/PhoenixMenuNode.html":{}}}],["phoenixmenunode.name",{"_index":1933,"title":{},"body":{"classes/PhoenixMenuUI.html":{}}}],["phoenixmenuroot",{"_index":862,"title":{},"body":{"interfaces/Configuration.html":{},"classes/PhoenixMenuUI.html":{},"classes/StateManager.html":{}}}],["phoenixmenuui",{"_index":1834,"title":{"classes/PhoenixMenuUI.html":{}},"body":{"classes/PhoenixMenuUI.html":{},"coverage.html":{}}}],["phoenixnodejson",{"_index":1789,"title":{},"body":{"classes/PhoenixMenuNode.html":{}}}],["phoenixnodejson['children",{"_index":1796,"title":{},"body":{"classes/PhoenixMenuNode.html":{}}}],["phoenixnodejson['children'].push(child.getnodestate",{"_index":1797,"title":{},"body":{"classes/PhoenixMenuNode.html":{}}}],["phoenixnodejson['childrenactive",{"_index":1793,"title":{},"body":{"classes/PhoenixMenuNode.html":{}}}],["phoenixnodejson['configs",{"_index":1795,"title":{},"body":{"classes/PhoenixMenuNode.html":{}}}],["phoenixnodejson['name",{"_index":1790,"title":{},"body":{"classes/PhoenixMenuNode.html":{}}}],["phoenixnodejson['nodelevel",{"_index":1791,"title":{},"body":{"classes/PhoenixMenuNode.html":{}}}],["phoenixnodejson['togglestate",{"_index":1792,"title":{},"body":{"classes/PhoenixMenuNode.html":{}}}],["phoenixobjects",{"_index":550,"title":{},"body":{"classes/CMSObjects.html":{},"coverage.html":{}}}],["phoenixscene",{"_index":2995,"title":{},"body":{"interfaces/Window.html":{}}}],["phoenixscene.scene",{"_index":2998,"title":{},"body":{"interfaces/Window.html":{}}}],["phoenixscene.sceneconfiguration",{"_index":2997,"title":{},"body":{"interfaces/Window.html":{}}}],["phoenixui",{"_index":1038,"title":{"interfaces/PhoenixUI.html":{}},"body":{"classes/DatGUIMenuUI.html":{},"classes/PhoenixMenuUI.html":{},"interfaces/PhoenixUI.html":{},"changelog.html":{},"coverage.html":{}}}],["phoenixurloptions",{"_index":2680,"title":{},"body":{"classes/URLOptionsManager.html":{},"coverage.html":{},"miscellaneous/variables.html":{}}}],["physics",{"_index":546,"title":{},"body":{"classes/CMSObjects.html":{},"interfaces/EventDataLoader.html":{},"classes/PrettySymbols.html":{},"interfaces/Window.html":{},"changelog.html":{}}}],["pi",{"_index":912,"title":{},"body":{"classes/CoordinateHelper.html":{}}}],["pick",{"_index":2758,"title":{},"body":{"classes/URLOptionsManager.html":{}}}],["picker",{"_index":1161,"title":{},"body":{"classes/DatGUIMenuUI.html":{}}}],["picture",{"_index":2915,"title":{},"body":{"interfaces/Window.html":{}}}],["pipe",{"_index":3684,"title":{},"body":{"changelog.html":{}}}],["planarcalocells",{"_index":3481,"title":{},"body":{"changelog.html":{},"miscellaneous/variables.html":{}}}],["planarcalorimeters",{"_index":3436,"title":{},"body":{"changelog.html":{}}}],["plane",{"_index":249,"title":{},"body":{"interfaces/AnimationPreset.html":{}}}],["planes",{"_index":441,"title":{},"body":{"interfaces/AnimationPreset.html":{},"interfaces/Window.html":{}}}],["playground",{"_index":3344,"title":{},"body":{"changelog.html":{}}}],["plength",{"_index":1578,"title":{},"body":{"classes/Field.html":{},"classes/RungeKutta.html":{},"classes/State.html":{}}}],["point",{"_index":1515,"title":{},"body":{"classes/Field.html":{},"classes/PresetView.html":{},"classes/RungeKutta.html":{},"classes/State.html":{}}}],["pointing",{"_index":1965,"title":{},"body":{"classes/PresetView.html":{}}}],["points",{"_index":2495,"title":{},"body":{"classes/TracksMaterial.html":{},"classes/TracksMesh.html":{}}}],["points.length",{"_index":2506,"title":{},"body":{"classes/TracksMaterial.html":{},"classes/TracksMesh.html":{}}}],["points[0].y",{"_index":2501,"title":{},"body":{"classes/TracksMaterial.html":{},"classes/TracksMesh.html":{}}}],["points[0].z",{"_index":2502,"title":{},"body":{"classes/TracksMaterial.html":{},"classes/TracksMesh.html":{}}}],["points[i].y",{"_index":2508,"title":{},"body":{"classes/TracksMaterial.html":{},"classes/TracksMesh.html":{}}}],["points[i].z",{"_index":2509,"title":{},"body":{"classes/TracksMaterial.html":{},"classes/TracksMesh.html":{}}}],["pos",{"_index":267,"title":{},"body":{"interfaces/AnimationPreset.html":{},"classes/Field.html":{},"classes/PrettySymbols.html":{},"classes/RKHelper.html":{},"classes/RungeKutta.html":{},"classes/State.html":{}}}],["pos.x",{"_index":2059,"title":{},"body":{"classes/RKHelper.html":{}}}],["pos.y",{"_index":2060,"title":{},"body":{"classes/RKHelper.html":{}}}],["pos.z",{"_index":2057,"title":{},"body":{"classes/RKHelper.html":{}}}],["pos1",{"_index":1527,"title":{},"body":{"classes/Field.html":{},"classes/RungeKutta.html":{},"classes/State.html":{}}}],["pos2",{"_index":1538,"title":{},"body":{"classes/Field.html":{},"classes/RungeKutta.html":{},"classes/State.html":{}}}],["pos[0",{"_index":275,"title":{},"body":{"interfaces/AnimationPreset.html":{}}}],["pos[1",{"_index":277,"title":{},"body":{"interfaces/AnimationPreset.html":{}}}],["pos[2",{"_index":279,"title":{},"body":{"interfaces/AnimationPreset.html":{}}}],["posible",{"_index":2919,"title":{},"body":{"interfaces/Window.html":{}}}],["position",{"_index":79,"title":{},"body":{"classes/ARManager.html":{},"interfaces/AnimationPreset.html":{},"classes/DatGUIMenuUI.html":{},"classes/Field.html":{},"classes/PresetView.html":{},"classes/RKHelper.html":{},"classes/RungeKutta.html":{},"classes/State.html":{},"classes/TracksMaterial.html":{},"classes/TracksMesh.html":{},"classes/VRManager.html":{},"interfaces/Window.html":{},"classes/XRManager.html":{},"changelog.html":{},"miscellaneous/variables.html":{}}}],["positioning",{"_index":1180,"title":{},"body":{"classes/DatGUIMenuUI.html":{}}}],["positions",{"_index":227,"title":{},"body":{"interfaces/AnimationPreset.html":{},"classes/RKHelper.html":{},"classes/TracksMaterial.html":{},"classes/TracksMesh.html":{},"interfaces/Window.html":{},"changelog.html":{},"miscellaneous/variables.html":{}}}],["positions.concat(extrapolatedpos",{"_index":2080,"title":{},"body":{"classes/RKHelper.html":{}}}],["positions.slice(1).foreach",{"_index":538,"title":{},"body":{"interfaces/AnimationPreset.html":{}}}],["positions[0].duration",{"_index":534,"title":{},"body":{"interfaces/AnimationPreset.html":{}}}],["positions[0].easing",{"_index":536,"title":{},"body":{"interfaces/AnimationPreset.html":{}}}],["positions[0].position",{"_index":533,"title":{},"body":{"interfaces/AnimationPreset.html":{}}}],["positive",{"_index":967,"title":{},"body":{"classes/CoordinateHelper.html":{},"changelog.html":{}}}],["possible",{"_index":727,"title":{},"body":{"classes/ColorOptions.html":{},"changelog.html":{}}}],["post",{"_index":2298,"title":{},"body":{"classes/SelectionManager.html":{}}}],["powerpreference",{"_index":2146,"title":{},"body":{"classes/RendererManager.html":{}}}],["preselectionantialias",{"_index":2241,"title":{},"body":{"classes/SelectionManager.html":{}}}],["presenting",{"_index":3794,"title":{},"body":{"index.html":{}}}],["preset",{"_index":224,"title":{},"body":{"interfaces/AnimationPreset.html":{},"interfaces/Configuration.html":{},"classes/PresetView.html":{},"interfaces/Window.html":{},"changelog.html":{},"miscellaneous/enumerations.html":{}}}],["presetanimations",{"_index":863,"title":{},"body":{"interfaces/Configuration.html":{}}}],["presets",{"_index":3885,"title":{},"body":{"miscellaneous/variables.html":{}}}],["presetview",{"_index":883,"title":{"classes/PresetView.html":{}},"body":{"interfaces/Configuration.html":{},"classes/PresetView.html":{},"coverage.html":{}}}],["presetviews",{"_index":864,"title":{},"body":{"interfaces/Configuration.html":{}}}],["prettier",{"_index":3419,"title":{},"body":{"changelog.html":{}}}],["pretty",{"_index":1987,"title":{},"body":{"classes/PrettySymbols.html":{}}}],["prettydparams",{"_index":2025,"title":{},"body":{"classes/PrettySymbols.html":{}}}],["prettydparams['d0",{"_index":2031,"title":{},"body":{"classes/PrettySymbols.html":{}}}],["prettydparams['q",{"_index":2030,"title":{},"body":{"classes/PrettySymbols.html":{}}}],["prettydparams['z0",{"_index":2033,"title":{},"body":{"classes/PrettySymbols.html":{}}}],["prettydparams['|p",{"_index":2028,"title":{},"body":{"classes/PrettySymbols.html":{}}}],["prettyparams",{"_index":2337,"title":{},"body":{"classes/SelectionManager.html":{}}}],["prettyparams[key",{"_index":2344,"title":{},"body":{"classes/SelectionManager.html":{}}}],["prettysymbol",{"_index":2005,"title":{},"body":{"classes/PrettySymbols.html":{}}}],["prettysymbols",{"_index":774,"title":{"classes/PrettySymbols.html":{}},"body":{"classes/ColorOptions.html":{},"classes/PhoenixMenuUI.html":{},"classes/PrettySymbols.html":{},"classes/SelectionManager.html":{},"coverage.html":{}}}],["prettysymbols.getprettyparams",{"_index":2338,"title":{},"body":{"classes/SelectionManager.html":{}}}],["prettysymbols.getprettysymbol('charge",{"_index":714,"title":{},"body":{"classes/ColorOptions.html":{}}}],["prettysymbols.getprettysymbol('charge')}=${chargevalue",{"_index":814,"title":{},"body":{"classes/ColorOptions.html":{}}}],["prettysymbols.getprettysymbol('mom",{"_index":721,"title":{},"body":{"classes/ColorOptions.html":{}}}],["prettysymbols.getprettysymbol(cut.field",{"_index":1913,"title":{},"body":{"classes/PhoenixMenuUI.html":{}}}],["prettysymbols.getprettysymbol(paramkey",{"_index":2015,"title":{},"body":{"classes/PrettySymbols.html":{}}}],["prettysymbols.symbols[symbol].includes(param",{"_index":2007,"title":{},"body":{"classes/PrettySymbols.html":{}}}],["previous",{"_index":75,"title":{},"body":{"classes/ARManager.html":{},"classes/PhoenixMenuNode.html":{},"classes/PhoenixMenuUI.html":{},"classes/TracksMaterial.html":{},"classes/TracksMesh.html":{}}}],["previousscale",{"_index":374,"title":{},"body":{"interfaces/AnimationPreset.html":{}}}],["previoustween",{"_index":537,"title":{},"body":{"interfaces/AnimationPreset.html":{}}}],["previoustween.chain(tween",{"_index":540,"title":{},"body":{"interfaces/AnimationPreset.html":{}}}],["previoustween.oncomplete(onend",{"_index":541,"title":{},"body":{"interfaces/AnimationPreset.html":{}}}],["previousvalues",{"_index":21,"title":{},"body":{"classes/ARManager.html":{}}}],["prevlocalclipping",{"_index":467,"title":{},"body":{"interfaces/AnimationPreset.html":{}}}],["prevnode",{"_index":1826,"title":{},"body":{"classes/PhoenixMenuNode.html":{}}}],["prevnode.addchild(nodename",{"_index":1833,"title":{},"body":{"classes/PhoenixMenuNode.html":{}}}],["prevnode.children.find(child",{"_index":1831,"title":{},"body":{"classes/PhoenixMenuNode.html":{}}}],["prevnode.findintree(nodename",{"_index":1830,"title":{},"body":{"classes/PhoenixMenuNode.html":{}}}],["prevp",{"_index":2581,"title":{},"body":{"classes/TracksMaterial.html":{},"classes/TracksMesh.html":{}}}],["prevpos",{"_index":2574,"title":{},"body":{"classes/TracksMaterial.html":{},"classes/TracksMesh.html":{}}}],["prevpos.w",{"_index":2583,"title":{},"body":{"classes/TracksMaterial.html":{},"classes/TracksMesh.html":{}}}],["prevpos.xy",{"_index":2582,"title":{},"body":{"classes/TracksMaterial.html":{},"classes/TracksMesh.html":{}}}],["print",{"_index":2022,"title":{},"body":{"classes/PrettySymbols.html":{}}}],["printed",{"_index":1999,"title":{},"body":{"classes/PrettySymbols.html":{}}}],["private",{"_index":20,"title":{},"body":{"classes/ARManager.html":{},"classes/ActiveVariable.html":{},"interfaces/AnimationPreset.html":{},"classes/ColorOptions.html":{},"classes/Cut.html":{},"classes/DatGUIMenuUI.html":{},"classes/EffectsManager.html":{},"classes/ExportManager.html":{},"classes/InfoLogger.html":{},"classes/LoadingManager.html":{},"classes/PhoenixMenuNode.html":{},"classes/PhoenixMenuUI.html":{},"classes/RendererManager.html":{},"classes/SelectionManager.html":{},"classes/StateManager.html":{},"classes/URLOptionsManager.html":{},"classes/VRManager.html":{},"interfaces/Window.html":{}}}],["process",{"_index":554,"title":{},"body":{"classes/CMSObjects.html":{},"classes/SelectionManager.html":{},"classes/TracksMaterial.html":{},"classes/TracksMesh.html":{},"interfaces/Window.html":{}}}],["processes",{"_index":3053,"title":{},"body":{"interfaces/Window.html":{}}}],["processeventfile",{"_index":2710,"title":{},"body":{"classes/URLOptionsManager.html":{}}}],["processeventfile(file",{"_index":2716,"title":{},"body":{"classes/URLOptionsManager.html":{}}}],["processing",{"_index":876,"title":{},"body":{"interfaces/Configuration.html":{},"classes/SelectionManager.html":{},"changelog.html":{},"index.html":{}}}],["progress",{"_index":148,"title":{},"body":{"classes/ARManager.html":{},"interfaces/AnimationPreset.html":{},"classes/LoadingManager.html":{},"classes/TracksMaterial.html":{},"classes/TracksMesh.html":{},"classes/VRManager.html":{},"classes/XRManager.html":{},"changelog.html":{}}}],["progresses",{"_index":1649,"title":{},"body":{"classes/LoadingManager.html":{}}}],["progressitems",{"_index":1620,"title":{},"body":{"classes/LoadingManager.html":{}}}],["project",{"_index":3166,"title":{},"body":{"changelog.html":{}}}],["project/jsroot/blob/19ce116b68701ab45e0a092c673119bf97ede0c2/modules/core.mjs#l241",{"_index":3034,"title":{},"body":{"interfaces/Window.html":{}}}],["projectionmatrix",{"_index":2569,"title":{},"body":{"classes/TracksMaterial.html":{},"classes/TracksMesh.html":{}}}],["promise",{"_index":2208,"title":{},"body":{"classes/ScriptLoader.html":{},"classes/URLOptionsManager.html":{},"interfaces/Window.html":{},"changelog.html":{}}}],["promise((resolve",{"_index":2211,"title":{},"body":{"classes/ScriptLoader.html":{}}}],["promises",{"_index":2739,"title":{},"body":{"classes/URLOptionsManager.html":{}}}],["prop",{"_index":1811,"title":{},"body":{"classes/PhoenixMenuNode.html":{}}}],["propagate",{"_index":1572,"title":{},"body":{"classes/Field.html":{},"classes/RungeKutta.html":{},"classes/State.html":{}}}],["propagate(startpos",{"_index":2187,"title":{},"body":{"classes/RungeKutta.html":{}}}],["propagation",{"_index":314,"title":{},"body":{"interfaces/AnimationPreset.html":{},"interfaces/Window.html":{}}}],["propagator",{"_index":2044,"title":{},"body":{"classes/RKHelper.html":{}}}],["proper",{"_index":3319,"title":{},"body":{"changelog.html":{}}}],["properly",{"_index":3435,"title":{},"body":{"changelog.html":{}}}],["properties",{"_index":17,"title":{"properties.html":{}},"body":{"classes/ARManager.html":{},"classes/ActiveVariable.html":{},"interfaces/AnimationPreset.html":{},"classes/ColorOptions.html":{},"interfaces/Configuration.html":{},"classes/Cut.html":{},"classes/DatGUIMenuUI.html":{},"classes/EffectsManager.html":{},"classes/Field.html":{},"classes/InfoLogger.html":{},"classes/LoadingManager.html":{},"classes/PhoenixMenuNode.html":{},"classes/PhoenixMenuUI.html":{},"classes/PresetView.html":{},"classes/PrettySymbols.html":{},"classes/RendererManager.html":{},"classes/RungeKutta.html":{},"classes/SelectionManager.html":{},"classes/State.html":{},"classes/StateManager.html":{},"classes/TracksMaterial.html":{},"classes/TracksMesh.html":{},"classes/URLOptionsManager.html":{},"classes/VRManager.html":{},"interfaces/Window.html":{},"classes/XRManager.html":{},"changelog.html":{},"properties.html":{}}}],["property",{"_index":753,"title":{},"body":{"classes/ColorOptions.html":{}}}],["property's",{"_index":641,"title":{},"body":{"classes/ColorManager.html":{}}}],["props",{"_index":2345,"title":{},"body":{"classes/SelectionManager.html":{}}}],["props.join",{"_index":2356,"title":{},"body":{"classes/SelectionManager.html":{}}}],["props.length",{"_index":2355,"title":{},"body":{"classes/SelectionManager.html":{}}}],["protected",{"_index":26,"title":{},"body":{"classes/ARManager.html":{},"classes/VRManager.html":{},"classes/XRManager.html":{}}}],["provided",{"_index":3209,"title":{},"body":{"changelog.html":{}}}],["providing",{"_index":1874,"title":{},"body":{"classes/PhoenixMenuUI.html":{}}}],["pseudorapidity",{"_index":935,"title":{},"body":{"classes/CoordinateHelper.html":{}}}],["pt",{"_index":1990,"title":{},"body":{"classes/PrettySymbols.html":{},"changelog.html":{}}}],["public",{"_index":24,"title":{},"body":{"classes/ARManager.html":{},"classes/ActiveVariable.html":{},"interfaces/AnimationPreset.html":{},"classes/CMSObjects.html":{},"classes/ColorManager.html":{},"classes/CoordinateHelper.html":{},"classes/Cut.html":{},"classes/DatGUIMenuUI.html":{},"classes/EffectsManager.html":{},"classes/ExportManager.html":{},"classes/LoadingManager.html":{},"classes/PhoenixMenuUI.html":{},"classes/PresetView.html":{},"classes/PrettySymbols.html":{},"classes/RKHelper.html":{},"classes/RendererManager.html":{},"classes/ScriptLoader.html":{},"classes/SelectionManager.html":{},"classes/URLOptionsManager.html":{},"classes/VRManager.html":{},"interfaces/Window.html":{},"classes/XRManager.html":{}}}],["pushed",{"_index":2795,"title":{},"body":{"classes/VRManager.html":{}}}],["puts",{"_index":965,"title":{},"body":{"classes/CoordinateHelper.html":{}}}],["q",{"_index":1498,"title":{},"body":{"classes/Field.html":{},"classes/PrettySymbols.html":{},"classes/RungeKutta.html":{},"classes/State.html":{}}}],["qop",{"_index":1503,"title":{},"body":{"classes/Field.html":{},"classes/RKHelper.html":{},"classes/RungeKutta.html":{},"classes/State.html":{}}}],["quaternion",{"_index":917,"title":{},"body":{"classes/CoordinateHelper.html":{}}}],["quaternion.multiply(quaternion2",{"_index":973,"title":{},"body":{"classes/CoordinateHelper.html":{}}}],["quaternion.setfromunitvectors(v1",{"_index":964,"title":{},"body":{"classes/CoordinateHelper.html":{}}}],["quaternion2",{"_index":969,"title":{},"body":{"classes/CoordinateHelper.html":{}}}],["quaternion2.setfromaxisangle(new",{"_index":970,"title":{},"body":{"classes/CoordinateHelper.html":{}}}],["query",{"_index":2657,"title":{},"body":{"classes/URLOptionsManager.html":{}}}],["radians",{"_index":943,"title":{},"body":{"classes/CoordinateHelper.html":{}}}],["radius",{"_index":299,"title":{},"body":{"interfaces/AnimationPreset.html":{},"classes/CoordinateHelper.html":{}}}],["random",{"_index":635,"title":{},"body":{"classes/ColorManager.html":{},"classes/ColorOptions.html":{},"changelog.html":{}}}],["randomcolor",{"_index":1220,"title":{},"body":{"classes/DatGUIMenuUI.html":{}}}],["randomly",{"_index":649,"title":{},"body":{"classes/ColorManager.html":{}}}],["range",{"_index":642,"title":{},"body":{"classes/ColorManager.html":{},"classes/CoordinateHelper.html":{},"classes/Cut.html":{},"classes/PhoenixMenuUI.html":{},"changelog.html":{}}}],["rangeslider",{"_index":1783,"title":{},"body":{"classes/PhoenixMenuNode.html":{},"miscellaneous/typealiases.html":{}}}],["ratio",{"_index":1500,"title":{},"body":{"classes/Field.html":{},"classes/RungeKutta.html":{},"classes/State.html":{},"interfaces/Window.html":{}}}],["raycaster",{"_index":2291,"title":{},"body":{"classes/SelectionManager.html":{}}}],["raycaster.intersectobjects(this.scene.children",{"_index":2372,"title":{},"body":{"classes/SelectionManager.html":{}}}],["raycaster.params.line.threshold",{"_index":2371,"title":{},"body":{"classes/SelectionManager.html":{}}}],["raycaster.setfromcamera(mouse",{"_index":2370,"title":{},"body":{"classes/SelectionManager.html":{}}}],["reachedhits",{"_index":414,"title":{},"body":{"interfaces/AnimationPreset.html":{}}}],["reachedhits.length",{"_index":418,"title":{},"body":{"interfaces/AnimationPreset.html":{}}}],["reaches",{"_index":400,"title":{},"body":{"interfaces/AnimationPreset.html":{}}}],["react",{"_index":3816,"title":{},"body":{"index.html":{}}}],["read",{"_index":2743,"title":{},"body":{"classes/URLOptionsManager.html":{},"miscellaneous/variables.html":{}}}],["reader",{"_index":3910,"title":{},"body":{"miscellaneous/variables.html":{}}}],["reader.onload",{"_index":3912,"title":{},"body":{"miscellaneous/variables.html":{}}}],["reader.readastext(configfile",{"_index":3915,"title":{},"body":{"miscellaneous/variables.html":{}}}],["reading",{"_index":2741,"title":{},"body":{"classes/URLOptionsManager.html":{}}}],["readonly",{"_index":22,"title":{},"body":{"classes/ARManager.html":{},"classes/PrettySymbols.html":{},"classes/VRManager.html":{}}}],["readzipfile",{"_index":2677,"title":{},"body":{"classes/URLOptionsManager.html":{},"coverage.html":{},"miscellaneous/variables.html":{}}}],["readzipfile(filebuffer",{"_index":2740,"title":{},"body":{"classes/URLOptionsManager.html":{}}}],["realistic",{"_index":3580,"title":{},"body":{"changelog.html":{}}}],["reason",{"_index":2755,"title":{},"body":{"classes/URLOptionsManager.html":{}}}],["receives",{"_index":2935,"title":{},"body":{"interfaces/Window.html":{}}}],["recover",{"_index":1431,"title":{},"body":{"classes/ExportManager.html":{},"interfaces/Window.html":{}}}],["reduce",{"_index":3191,"title":{},"body":{"changelog.html":{}}}],["redundant",{"_index":3572,"title":{},"body":{"changelog.html":{}}}],["refactor",{"_index":3400,"title":{},"body":{"changelog.html":{}}}],["refactoring",{"_index":3704,"title":{},"body":{"changelog.html":{}}}],["reference",{"_index":1287,"title":{},"body":{"classes/DatGUIMenuUI.html":{},"classes/PhoenixMenuUI.html":{},"interfaces/PhoenixUI.html":{}}}],["reject",{"_index":2212,"title":{},"body":{"classes/ScriptLoader.html":{}}}],["related",{"_index":12,"title":{},"body":{"classes/ARManager.html":{},"interfaces/AnimationPreset.html":{},"classes/ColorManager.html":{},"classes/ColorOptions.html":{},"classes/DatGUIMenuUI.html":{},"classes/ExportManager.html":{},"classes/PhoenixMenuUI.html":{},"classes/RendererManager.html":{},"classes/SelectionManager.html":{},"classes/VRManager.html":{},"interfaces/Window.html":{},"classes/XRManager.html":{}}}],["release",{"_index":3179,"title":{},"body":{"changelog.html":{}}}],["released",{"_index":2794,"title":{},"body":{"classes/VRManager.html":{}}}],["reload",{"_index":2956,"title":{},"body":{"interfaces/Window.html":{}}}],["remaining",{"_index":437,"title":{},"body":{"interfaces/AnimationPreset.html":{}}}],["remove",{"_index":469,"title":{},"body":{"interfaces/AnimationPreset.html":{},"classes/DatGUIMenuUI.html":{},"classes/EffectsManager.html":{},"classes/PhoenixMenuNode.html":{},"classes/PhoenixMenuUI.html":{},"interfaces/PhoenixUI.html":{},"classes/RendererManager.html":{},"classes/SelectionManager.html":{},"interfaces/Window.html":{},"changelog.html":{}}}],["remove').name('remove",{"_index":1195,"title":{},"body":{"classes/DatGUIMenuUI.html":{}}}],["removechild",{"_index":1694,"title":{},"body":{"classes/PhoenixMenuNode.html":{}}}],["removechild(child",{"_index":1734,"title":{},"body":{"classes/PhoenixMenuNode.html":{}}}],["removecontrols",{"_index":2095,"title":{},"body":{"classes/RendererManager.html":{}}}],["removecontrols(renderer",{"_index":2123,"title":{},"body":{"classes/RendererManager.html":{}}}],["removed",{"_index":1101,"title":{},"body":{"classes/DatGUIMenuUI.html":{},"classes/EffectsManager.html":{},"classes/PhoenixMenuNode.html":{},"classes/PhoenixMenuUI.html":{},"interfaces/PhoenixUI.html":{},"classes/RendererManager.html":{}}}],["removeeventlistener('click",{"_index":2324,"title":{},"body":{"classes/SelectionManager.html":{}}}],["removeeventlistener('mousemove",{"_index":2323,"title":{},"body":{"classes/SelectionManager.html":{}}}],["removeeventlistener('touchstart",{"_index":2325,"title":{},"body":{"classes/SelectionManager.html":{}}}],["removelabel",{"_index":1055,"title":{},"body":{"classes/DatGUIMenuUI.html":{},"classes/PhoenixMenuUI.html":{},"interfaces/PhoenixUI.html":{}}}],["removelabel').name('remove",{"_index":1285,"title":{},"body":{"classes/DatGUIMenuUI.html":{}}}],["removelabel(labelid",{"_index":1111,"title":{},"body":{"classes/DatGUIMenuUI.html":{},"classes/PhoenixMenuUI.html":{},"interfaces/PhoenixUI.html":{}}}],["removeobj",{"_index":1056,"title":{},"body":{"classes/DatGUIMenuUI.html":{}}}],["removeobj(object",{"_index":1114,"title":{},"body":{"classes/DatGUIMenuUI.html":{}}}],["removepass",{"_index":1305,"title":{},"body":{"classes/EffectsManager.html":{}}}],["removepass(pass",{"_index":1333,"title":{},"body":{"classes/EffectsManager.html":{}}}],["removing",{"_index":1107,"title":{},"body":{"classes/DatGUIMenuUI.html":{},"classes/PhoenixMenuUI.html":{},"interfaces/PhoenixUI.html":{},"changelog.html":{}}}],["render",{"_index":1301,"title":{},"body":{"classes/EffectsManager.html":{},"classes/RendererManager.html":{},"interfaces/Window.html":{},"changelog.html":{}}}],["render(scene",{"_index":2126,"title":{},"body":{"classes/RendererManager.html":{}}}],["rendered",{"_index":2135,"title":{},"body":{"classes/RendererManager.html":{}}}],["renderer",{"_index":29,"title":{},"body":{"classes/ARManager.html":{},"interfaces/AnimationPreset.html":{},"classes/EffectsManager.html":{},"classes/RendererManager.html":{},"classes/VRManager.html":{},"interfaces/Window.html":{},"classes/XRManager.html":{},"changelog.html":{}}}],["renderer.localclippingenabled",{"_index":2183,"title":{},"body":{"classes/RendererManager.html":{}}}],["renderera",{"_index":2142,"title":{},"body":{"classes/RendererManager.html":{}}}],["rendererb",{"_index":2139,"title":{},"body":{"classes/RendererManager.html":{}}}],["rendererelement",{"_index":2362,"title":{},"body":{"classes/SelectionManager.html":{}}}],["rendererelement.clientheight",{"_index":2369,"title":{},"body":{"classes/SelectionManager.html":{}}}],["rendererelement.clientwidth",{"_index":2366,"title":{},"body":{"classes/SelectionManager.html":{}}}],["rendererheight",{"_index":2165,"title":{},"body":{"classes/RendererManager.html":{}}}],["renderermanager",{"_index":250,"title":{"classes/RendererManager.html":{}},"body":{"interfaces/AnimationPreset.html":{},"classes/RendererManager.html":{},"coverage.html":{}}}],["renderers",{"_index":2085,"title":{},"body":{"classes/RendererManager.html":{}}}],["rendererwidth",{"_index":2162,"title":{},"body":{"classes/RendererManager.html":{}}}],["rendering",{"_index":1320,"title":{},"body":{"classes/EffectsManager.html":{},"classes/RendererManager.html":{},"changelog.html":{}}}],["renderpass",{"_index":1318,"title":{},"body":{"classes/EffectsManager.html":{}}}],["renderpass(this.scene",{"_index":1348,"title":{},"body":{"classes/EffectsManager.html":{}}}],["renders",{"_index":3017,"title":{},"body":{"interfaces/Window.html":{}}}],["repeating",{"_index":3392,"title":{},"body":{"changelog.html":{}}}],["repo",{"_index":3575,"title":{},"body":{"changelog.html":{}}}],["repository",{"_index":3826,"title":{},"body":{"properties.html":{}}}],["representation",{"_index":2791,"title":{},"body":{"classes/VRManager.html":{}}}],["representing",{"_index":632,"title":{},"body":{"classes/ColorManager.html":{},"interfaces/EventDataLoader.html":{},"interfaces/Window.html":{}}}],["represents",{"_index":1388,"title":{},"body":{"interfaces/EventDataLoader.html":{},"interfaces/Window.html":{}}}],["request",{"_index":3566,"title":{},"body":{"changelog.html":{}}}],["requesting",{"_index":106,"title":{},"body":{"classes/ARManager.html":{},"classes/VRManager.html":{},"classes/XRManager.html":{}}}],["requestsession(`immersive",{"_index":3140,"title":{},"body":{"classes/XRManager.html":{}}}],["required",{"_index":104,"title":{},"body":{"classes/ARManager.html":{},"classes/VRManager.html":{},"classes/XRManager.html":{},"index.html":{}}}],["res.json",{"_index":2705,"title":{},"body":{"classes/URLOptionsManager.html":{},"index.html":{}}}],["reset",{"_index":991,"title":{},"body":{"classes/Cut.html":{},"classes/LoadingManager.html":{},"classes/PhoenixMenuUI.html":{},"classes/RendererManager.html":{},"interfaces/Window.html":{},"changelog.html":{}}}],["reset/remove",{"_index":3117,"title":{},"body":{"interfaces/Window.html":{}}}],["resetcut",{"_index":1222,"title":{},"body":{"classes/DatGUIMenuUI.html":{}}}],["resetlabels",{"_index":3118,"title":{},"body":{"interfaces/Window.html":{}}}],["resize",{"_index":3582,"title":{},"body":{"changelog.html":{}}}],["resolution",{"_index":2562,"title":{},"body":{"classes/TracksMaterial.html":{},"classes/TracksMesh.html":{}}}],["resolution.y",{"_index":2566,"title":{},"body":{"classes/TracksMaterial.html":{},"classes/TracksMesh.html":{}}}],["resolve",{"_index":2224,"title":{},"body":{"classes/ScriptLoader.html":{}}}],["resources",{"_index":2885,"title":{},"body":{"interfaces/Window.html":{}}}],["responsible",{"_index":624,"title":{},"body":{"classes/ColorManager.html":{},"interfaces/Configuration.html":{},"interfaces/Window.html":{}}}],["restore",{"_index":436,"title":{},"body":{"interfaces/AnimationPreset.html":{},"classes/PhoenixMenuNode.html":{}}}],["restored",{"_index":1704,"title":{},"body":{"classes/PhoenixMenuNode.html":{}}}],["restoring",{"_index":376,"title":{},"body":{"interfaces/AnimationPreset.html":{}}}],["restructure",{"_index":3553,"title":{},"body":{"changelog.html":{}}}],["result",{"_index":1453,"title":{},"body":{"classes/ExportManager.html":{},"classes/Field.html":{},"classes/RungeKutta.html":{},"classes/State.html":{}}}],["results",{"_index":186,"title":{},"body":{"classes/ARManager.html":{},"classes/ActiveVariable.html":{},"interfaces/AnimationPreset.html":{},"classes/CMSObjects.html":{},"classes/ColorManager.html":{},"classes/ColorOptions.html":{},"interfaces/Configuration.html":{},"classes/CoordinateHelper.html":{},"classes/Cut.html":{},"classes/DatGUIMenuUI.html":{},"classes/EffectsManager.html":{},"interfaces/EventDataLoader.html":{},"classes/ExportManager.html":{},"classes/Field.html":{},"classes/InfoLogger.html":{},"classes/LoadingManager.html":{},"classes/PhoenixMenuNode.html":{},"classes/PhoenixMenuUI.html":{},"interfaces/PhoenixUI.html":{},"classes/PresetView.html":{},"classes/PrettySymbols.html":{},"classes/RKHelper.html":{},"classes/RendererManager.html":{},"classes/RungeKutta.html":{},"classes/ScriptLoader.html":{},"classes/SelectionManager.html":{},"classes/State.html":{},"classes/StateManager.html":{},"classes/TracksMaterial.html":{},"classes/TracksMesh.html":{},"classes/URLOptionsManager.html":{},"classes/VRManager.html":{},"interfaces/Window.html":{},"classes/XRManager.html":{},"changelog.html":{},"coverage.html":{},"dependencies.html":{},"miscellaneous/enumerations.html":{},"index.html":{},"modules.html":{},"overview.html":{},"properties.html":{},"miscellaneous/typealiases.html":{},"miscellaneous/variables.html":{}}}],["retrieved",{"_index":1401,"title":{},"body":{"interfaces/EventDataLoader.html":{},"interfaces/Window.html":{}}}],["return",{"_index":162,"title":{},"body":{"classes/ARManager.html":{},"interfaces/AnimationPreset.html":{},"classes/CMSObjects.html":{},"classes/ColorOptions.html":{},"classes/CoordinateHelper.html":{},"classes/Cut.html":{},"classes/DatGUIMenuUI.html":{},"classes/EffectsManager.html":{},"classes/ExportManager.html":{},"classes/Field.html":{},"classes/InfoLogger.html":{},"classes/LoadingManager.html":{},"classes/PhoenixMenuNode.html":{},"classes/PhoenixMenuUI.html":{},"classes/PresetView.html":{},"classes/PrettySymbols.html":{},"classes/RKHelper.html":{},"classes/RendererManager.html":{},"classes/RungeKutta.html":{},"classes/ScriptLoader.html":{},"classes/SelectionManager.html":{},"classes/State.html":{},"classes/StateManager.html":{},"classes/TracksMaterial.html":{},"classes/TracksMesh.html":{},"classes/URLOptionsManager.html":{},"interfaces/Window.html":{},"classes/XRManager.html":{},"changelog.html":{},"miscellaneous/variables.html":{}}}],["returns",{"_index":103,"title":{},"body":{"classes/ARManager.html":{},"classes/ActiveVariable.html":{},"interfaces/AnimationPreset.html":{},"classes/CMSObjects.html":{},"classes/ColorManager.html":{},"classes/ColorOptions.html":{},"classes/CoordinateHelper.html":{},"classes/Cut.html":{},"classes/DatGUIMenuUI.html":{},"classes/EffectsManager.html":{},"interfaces/EventDataLoader.html":{},"classes/ExportManager.html":{},"classes/Field.html":{},"classes/InfoLogger.html":{},"classes/LoadingManager.html":{},"classes/PhoenixMenuNode.html":{},"classes/PhoenixMenuUI.html":{},"interfaces/PhoenixUI.html":{},"classes/PresetView.html":{},"classes/PrettySymbols.html":{},"classes/RKHelper.html":{},"classes/RendererManager.html":{},"classes/RungeKutta.html":{},"classes/ScriptLoader.html":{},"classes/SelectionManager.html":{},"classes/State.html":{},"classes/StateManager.html":{},"classes/TracksMaterial.html":{},"classes/TracksMesh.html":{},"classes/URLOptionsManager.html":{},"classes/VRManager.html":{},"interfaces/Window.html":{},"classes/XRManager.html":{}}}],["returnvec",{"_index":1545,"title":{},"body":{"classes/Field.html":{},"classes/RungeKutta.html":{},"classes/State.html":{}}}],["reverse",{"_index":954,"title":{},"body":{"classes/CoordinateHelper.html":{}}}],["revert",{"_index":465,"title":{},"body":{"interfaces/AnimationPreset.html":{},"changelog.html":{}}}],["reverting",{"_index":2696,"title":{},"body":{"classes/URLOptionsManager.html":{}}}],["reverts",{"_index":3189,"title":{},"body":{"changelog.html":{}}}],["right",{"_index":589,"title":{},"body":{"classes/CMSObjects.html":{},"classes/DatGUIMenuUI.html":{},"changelog.html":{}}}],["rk",{"_index":3443,"title":{},"body":{"changelog.html":{}}}],["rkhelper",{"_index":2036,"title":{"classes/RKHelper.html":{}},"body":{"classes/RKHelper.html":{},"changelog.html":{},"coverage.html":{}}}],["rkhelper.extrapolatetrackpositions(track",{"_index":2067,"title":{},"body":{"classes/RKHelper.html":{}}}],["rkhelper.extrapolationlimit",{"_index":2045,"title":{},"body":{"classes/RKHelper.html":{}}}],["rkstate",{"_index":1584,"title":{},"body":{"classes/Field.html":{},"classes/RungeKutta.html":{},"classes/State.html":{}}}],["rkstate.dir",{"_index":1586,"title":{},"body":{"classes/Field.html":{},"classes/RungeKutta.html":{},"classes/State.html":{}}}],["rkstate.maxstepsize",{"_index":1589,"title":{},"body":{"classes/Field.html":{},"classes/RungeKutta.html":{},"classes/State.html":{}}}],["rkstate.p",{"_index":1587,"title":{},"body":{"classes/Field.html":{},"classes/RungeKutta.html":{},"classes/State.html":{}}}],["rkstate.pathlength",{"_index":1590,"title":{},"body":{"classes/Field.html":{},"classes/RungeKutta.html":{},"classes/State.html":{}}}],["rkstate.pos",{"_index":1585,"title":{},"body":{"classes/Field.html":{},"classes/RungeKutta.html":{},"classes/State.html":{}}}],["rkstate.q",{"_index":1588,"title":{},"body":{"classes/Field.html":{},"classes/RungeKutta.html":{},"classes/State.html":{}}}],["robustness",{"_index":3416,"title":{},"body":{"changelog.html":{}}}],["rollup",{"_index":3597,"title":{},"body":{"changelog.html":{}}}],["root",{"_index":166,"title":{},"body":{"classes/ARManager.html":{},"interfaces/Configuration.html":{},"classes/PhoenixMenuNode.html":{},"classes/PhoenixMenuUI.html":{},"classes/StateManager.html":{},"interfaces/Window.html":{},"changelog.html":{}}}],["rotate",{"_index":918,"title":{},"body":{"classes/CoordinateHelper.html":{},"classes/DatGUIMenuUI.html":{}}}],["rotate.chain(end",{"_index":311,"title":{},"body":{"interfaces/AnimationPreset.html":{}}}],["rotateopeningangleclipping",{"_index":2462,"title":{},"body":{"classes/StateManager.html":{}}}],["rotatestartangleclipping",{"_index":2460,"title":{},"body":{"classes/StateManager.html":{}}}],["rotationpositions",{"_index":307,"title":{},"body":{"interfaces/AnimationPreset.html":{}}}],["rotations",{"_index":931,"title":{},"body":{"classes/CoordinateHelper.html":{}}}],["routes",{"_index":3692,"title":{},"body":{"changelog.html":{}}}],["run",{"_index":1410,"title":{},"body":{"interfaces/EventDataLoader.html":{},"interfaces/Window.html":{},"changelog.html":{}}}],["run${this.eventmetadata.runnumber}_evt${this.eventmetadata.eventnumber}.json",{"_index":2444,"title":{},"body":{"classes/StateManager.html":{}}}],["runge",{"_index":1491,"title":{},"body":{"classes/Field.html":{},"classes/RKHelper.html":{},"classes/RungeKutta.html":{},"classes/State.html":{}}}],["rungekutta",{"_index":1493,"title":{"classes/RungeKutta.html":{}},"body":{"classes/Field.html":{},"classes/RKHelper.html":{},"classes/RungeKutta.html":{},"classes/State.html":{},"coverage.html":{}}}],["runnumber",{"_index":2411,"title":{},"body":{"classes/StateManager.html":{}}}],["same",{"_index":3648,"title":{},"body":{"changelog.html":{}}}],["sample",{"_index":3451,"title":{},"body":{"changelog.html":{}}}],["save",{"_index":1438,"title":{},"body":{"classes/ExportManager.html":{},"classes/PhoenixMenuNode.html":{},"classes/PhoenixMenuUI.html":{},"classes/StateManager.html":{},"changelog.html":{},"miscellaneous/variables.html":{}}}],["saved",{"_index":1432,"title":{},"body":{"classes/ExportManager.html":{},"interfaces/Window.html":{}}}],["saveeventdataconfiguration",{"_index":1423,"title":{},"body":{"classes/ExportManager.html":{}}}],["saveeventdataconfiguration(eventdata",{"_index":1436,"title":{},"body":{"classes/ExportManager.html":{}}}],["savefile",{"_index":1449,"title":{},"body":{"classes/ExportManager.html":{},"classes/StateManager.html":{},"coverage.html":{},"miscellaneous/variables.html":{}}}],["savefile(output",{"_index":1469,"title":{},"body":{"classes/ExportManager.html":{}}}],["savefile(result",{"_index":1455,"title":{},"body":{"classes/ExportManager.html":{}}}],["savegeometriesconfiguration",{"_index":1424,"title":{},"body":{"classes/ExportManager.html":{}}}],["savegeometriesconfiguration(geometries",{"_index":1439,"title":{},"body":{"classes/ExportManager.html":{}}}],["savelabels",{"_index":1255,"title":{},"body":{"classes/DatGUIMenuUI.html":{}}}],["saves",{"_index":2937,"title":{},"body":{"interfaces/Window.html":{}}}],["savesceneconfig",{"_index":1425,"title":{},"body":{"classes/ExportManager.html":{}}}],["savesceneconfig(eventdata",{"_index":1441,"title":{},"body":{"classes/ExportManager.html":{}}}],["savestateasjson",{"_index":2402,"title":{},"body":{"classes/StateManager.html":{}}}],["scale",{"_index":77,"title":{},"body":{"classes/ARManager.html":{},"interfaces/AnimationPreset.html":{},"classes/DatGUIMenuUI.html":{},"classes/PhoenixMenuUI.html":{},"interfaces/Window.html":{},"changelog.html":{}}}],["scalemenu",{"_index":1176,"title":{},"body":{"classes/DatGUIMenuUI.html":{}}}],["scalemenu.onchange((value",{"_index":1178,"title":{},"body":{"classes/DatGUIMenuUI.html":{}}}],["scalescene",{"_index":37,"title":{},"body":{"classes/ARManager.html":{}}}],["scalescene(scale",{"_index":116,"title":{},"body":{"classes/ARManager.html":{}}}],["scaletween",{"_index":367,"title":{},"body":{"interfaces/AnimationPreset.html":{}}}],["scaletween.onupdate((updatedscale",{"_index":373,"title":{},"body":{"interfaces/AnimationPreset.html":{}}}],["scaling",{"_index":364,"title":{},"body":{"interfaces/AnimationPreset.html":{},"changelog.html":{}}}],["scene",{"_index":44,"title":{},"body":{"classes/ARManager.html":{},"interfaces/AnimationPreset.html":{},"classes/ColorManager.html":{},"classes/DatGUIMenuUI.html":{},"classes/EffectsManager.html":{},"classes/ExportManager.html":{},"classes/PhoenixMenuUI.html":{},"interfaces/PhoenixUI.html":{},"classes/RendererManager.html":{},"classes/SelectionManager.html":{},"classes/StateManager.html":{},"classes/VRManager.html":{},"interfaces/Window.html":{},"classes/XRManager.html":{},"changelog.html":{}}}],["scene's",{"_index":2394,"title":{},"body":{"classes/StateManager.html":{}}}],["scene.background",{"_index":2158,"title":{},"body":{"classes/RendererManager.html":{}}}],["scene.getobjectbyname('vertices",{"_index":668,"title":{},"body":{"classes/ColorManager.html":{}}}],["scene.getobjectbyname(linkedtrackcollection",{"_index":677,"title":{},"body":{"classes/ColorManager.html":{}}}],["scene.phnx",{"_index":1470,"title":{},"body":{"classes/ExportManager.html":{}}}],["scene.scale.x",{"_index":158,"title":{},"body":{"classes/ARManager.html":{}}}],["scene/geometry",{"_index":3012,"title":{},"body":{"interfaces/Window.html":{}}}],["scenecolor",{"_index":2157,"title":{},"body":{"classes/RendererManager.html":{}}}],["sceneconfig",{"_index":1458,"title":{},"body":{"classes/ExportManager.html":{}}}],["sceneconfiguration",{"_index":1467,"title":{},"body":{"classes/ExportManager.html":{},"interfaces/Window.html":{}}}],["sceneconfiguration.eventdata[objecttype",{"_index":3058,"title":{},"body":{"interfaces/Window.html":{}}}],["sceneconfiguration.geometries",{"_index":3061,"title":{},"body":{"interfaces/Window.html":{}}}],["scenemanager",{"_index":137,"title":{},"body":{"classes/ARManager.html":{},"interfaces/AnimationPreset.html":{},"classes/ColorManager.html":{},"classes/DatGUIMenuUI.html":{},"classes/PhoenixMenuUI.html":{},"coverage.html":{}}}],["scenemanager.event_data_id",{"_index":181,"title":{},"body":{"classes/ARManager.html":{},"classes/DatGUIMenuUI.html":{},"classes/PhoenixMenuUI.html":{}}}],["scenemanager.geometries_id",{"_index":182,"title":{},"body":{"classes/ARManager.html":{}}}],["scenemanager.labels_id",{"_index":183,"title":{},"body":{"classes/ARManager.html":{},"classes/PhoenixMenuUI.html":{}}}],["scenescale",{"_index":70,"title":{},"body":{"classes/ARManager.html":{}}}],["sceneurl",{"_index":3076,"title":{},"body":{"interfaces/Window.html":{}}}],["screen",{"_index":2912,"title":{},"body":{"interfaces/Window.html":{}}}],["screenshot",{"_index":3664,"title":{},"body":{"changelog.html":{}}}],["script",{"_index":2192,"title":{},"body":{"classes/ScriptLoader.html":{},"changelog.html":{},"index.html":{}}}],["script[src",{"_index":2215,"title":{},"body":{"classes/ScriptLoader.html":{}}}],["scriptelement",{"_index":2217,"title":{},"body":{"classes/ScriptLoader.html":{}}}],["scriptelement.addeventlistener('load",{"_index":2223,"title":{},"body":{"classes/ScriptLoader.html":{}}}],["scriptelement.onerror",{"_index":2226,"title":{},"body":{"classes/ScriptLoader.html":{}}}],["scriptelement.setattribute('data",{"_index":2222,"title":{},"body":{"classes/ScriptLoader.html":{}}}],["scriptelement.src",{"_index":2221,"title":{},"body":{"classes/ScriptLoader.html":{}}}],["scriptelement.type",{"_index":2219,"title":{},"body":{"classes/ScriptLoader.html":{}}}],["scriptexists",{"_index":2213,"title":{},"body":{"classes/ScriptLoader.html":{}}}],["scriptexists.length",{"_index":2216,"title":{},"body":{"classes/ScriptLoader.html":{}}}],["scriptexists[0].addeventlistener('load",{"_index":2231,"title":{},"body":{"classes/ScriptLoader.html":{}}}],["scriptexists[0].dataset.loaded",{"_index":2230,"title":{},"body":{"classes/ScriptLoader.html":{}}}],["scriptfor",{"_index":2198,"title":{},"body":{"classes/ScriptLoader.html":{}}}],["scriptloader",{"_index":2190,"title":{"classes/ScriptLoader.html":{}},"body":{"classes/ScriptLoader.html":{},"coverage.html":{}}}],["scripts",{"_index":2195,"title":{},"body":{"classes/ScriptLoader.html":{},"changelog.html":{}}}],["scripturl",{"_index":2204,"title":{},"body":{"classes/ScriptLoader.html":{}}}],["search",{"_index":2643,"title":{},"body":{"classes/URLOptionsManager.html":{}}}],["second",{"_index":1524,"title":{},"body":{"classes/Field.html":{},"classes/RungeKutta.html":{},"classes/State.html":{}}}],["secondary",{"_index":2106,"title":{},"body":{"classes/RendererManager.html":{}}}],["see",{"_index":939,"title":{},"body":{"classes/CoordinateHelper.html":{},"interfaces/Window.html":{},"changelog.html":{}}}],["select",{"_index":2792,"title":{},"body":{"classes/VRManager.html":{},"miscellaneous/typealiases.html":{}}}],["selected",{"_index":745,"title":{},"body":{"classes/ColorOptions.html":{},"classes/SelectionManager.html":{},"interfaces/Window.html":{},"changelog.html":{}}}],["selectedcolorbyoption",{"_index":690,"title":{},"body":{"classes/ColorOptions.html":{}}}],["selectedobject",{"_index":2242,"title":{},"body":{"classes/SelectionManager.html":{},"interfaces/Window.html":{}}}],["selectend",{"_index":2820,"title":{},"body":{"classes/VRManager.html":{}}}],["selecting",{"_index":2271,"title":{},"body":{"classes/SelectionManager.html":{},"interfaces/Window.html":{}}}],["selection",{"_index":2234,"title":{},"body":{"classes/SelectionManager.html":{},"changelog.html":{}}}],["selectionmanager",{"_index":2232,"title":{"classes/SelectionManager.html":{}},"body":{"classes/SelectionManager.html":{},"coverage.html":{}}}],["selectstart",{"_index":2818,"title":{},"body":{"classes/VRManager.html":{}}}],["separate",{"_index":3555,"title":{},"body":{"changelog.html":{}}}],["separated",{"_index":757,"title":{},"body":{"classes/ColorOptions.html":{}}}],["separator",{"_index":2969,"title":{},"body":{"interfaces/Window.html":{}}}],["service",{"_index":1609,"title":{},"body":{"classes/InfoLogger.html":{},"classes/SelectionManager.html":{},"index.html":{}}}],["session",{"_index":83,"title":{},"body":{"classes/ARManager.html":{},"classes/VRManager.html":{},"interfaces/Window.html":{},"classes/XRManager.html":{},"changelog.html":{},"miscellaneous/enumerations.html":{}}}],["session.addeventlistener('end",{"_index":3145,"title":{},"body":{"classes/XRManager.html":{}}}],["session_type",{"_index":23,"title":{},"body":{"classes/ARManager.html":{},"classes/VRManager.html":{}}}],["sessioninit",{"_index":30,"title":{},"body":{"classes/ARManager.html":{},"classes/VRManager.html":{},"classes/XRManager.html":{}}}],["sessiontype",{"_index":3126,"title":{},"body":{"classes/XRManager.html":{}}}],["set",{"_index":101,"title":{},"body":{"classes/ARManager.html":{},"interfaces/AnimationPreset.html":{},"classes/ColorManager.html":{},"classes/DatGUIMenuUI.html":{},"classes/EffectsManager.html":{},"classes/PhoenixMenuNode.html":{},"classes/PhoenixMenuUI.html":{},"interfaces/PhoenixUI.html":{},"classes/PresetView.html":{},"classes/RendererManager.html":{},"classes/SelectionManager.html":{},"classes/StateManager.html":{},"classes/TracksMaterial.html":{},"classes/TracksMesh.html":{},"classes/URLOptionsManager.html":{},"classes/VRManager.html":{},"interfaces/Window.html":{},"classes/XRManager.html":{},"changelog.html":{},"miscellaneous/variables.html":{}}}],["set/get",{"_index":2173,"title":{},"body":{"classes/RendererManager.html":{}}}],["setantialiasing",{"_index":1306,"title":{},"body":{"classes/EffectsManager.html":{}}}],["setantialiasing(antialias",{"_index":1335,"title":{},"body":{"classes/EffectsManager.html":{}}}],["setcamera",{"_index":2403,"title":{},"body":{"classes/StateManager.html":{}}}],["setcamera(camera",{"_index":2419,"title":{},"body":{"classes/StateManager.html":{}}}],["setclippingenabled",{"_index":2404,"title":{},"body":{"classes/StateManager.html":{}}}],["setclippingenabled(clipping",{"_index":2420,"title":{},"body":{"classes/StateManager.html":{}}}],["setenablemax",{"_index":1922,"title":{},"body":{"classes/PhoenixMenuUI.html":{}}}],["setenablemin",{"_index":1919,"title":{},"body":{"classes/PhoenixMenuUI.html":{}}}],["seteventdisplay",{"_index":2405,"title":{},"body":{"classes/StateManager.html":{}}}],["seteventdisplay(eventdisplay",{"_index":2422,"title":{},"body":{"classes/StateManager.html":{}}}],["setfixoverlay",{"_index":2096,"title":{},"body":{"classes/RendererManager.html":{}}}],["setfixoverlay(value",{"_index":2127,"title":{},"body":{"classes/RendererManager.html":{}}}],["setflat",{"_index":2976,"title":{},"body":{"interfaces/Window.html":{}}}],["setinterval",{"_index":2854,"title":{},"body":{"classes/VRManager.html":{}}}],["setlocalclippingenabled",{"_index":2097,"title":{},"body":{"classes/RendererManager.html":{}}}],["setlocalclippingenabled(value",{"_index":2129,"title":{},"body":{"classes/RendererManager.html":{}}}],["setmainrenderer",{"_index":2098,"title":{},"body":{"classes/RendererManager.html":{}}}],["setmainrenderer(renderer",{"_index":2131,"title":{},"body":{"classes/RendererManager.html":{}}}],["setopeningclippingangle",{"_index":2406,"title":{},"body":{"classes/StateManager.html":{}}}],["setopeningclippingangle(angle",{"_index":2424,"title":{},"body":{"classes/StateManager.html":{}}}],["setoverlayrenderer",{"_index":2099,"title":{},"body":{"classes/RendererManager.html":{}}}],["setoverlayrenderer(overlaycanvas",{"_index":2132,"title":{},"body":{"classes/RendererManager.html":{},"interfaces/Window.html":{}}}],["setphoenixmenuroot",{"_index":2407,"title":{},"body":{"classes/StateManager.html":{}}}],["setphoenixmenuroot(phoenixmenuroot",{"_index":2426,"title":{},"body":{"classes/StateManager.html":{}}}],["setrenderers",{"_index":2100,"title":{},"body":{"classes/RendererManager.html":{}}}],["setrenderers(renderers",{"_index":2136,"title":{},"body":{"classes/RendererManager.html":{}}}],["sets",{"_index":3083,"title":{},"body":{"interfaces/Window.html":{}}}],["setselectedobject",{"_index":2248,"title":{},"body":{"classes/SelectionManager.html":{}}}],["setselectedobject(selectedobject",{"_index":2287,"title":{},"body":{"classes/SelectionManager.html":{}}}],["setselecting",{"_index":2249,"title":{},"body":{"classes/SelectionManager.html":{}}}],["setselecting(enable",{"_index":2289,"title":{},"body":{"classes/SelectionManager.html":{}}}],["setstartclippingangle",{"_index":2408,"title":{},"body":{"classes/StateManager.html":{}}}],["setstartclippingangle(angle",{"_index":2428,"title":{},"body":{"classes/StateManager.html":{}}}],["settimeout",{"_index":529,"title":{},"body":{"interfaces/AnimationPreset.html":{}}}],["setting",{"_index":2120,"title":{},"body":{"classes/RendererManager.html":{}}}],["settings",{"_index":2869,"title":{},"body":{"interfaces/Window.html":{},"miscellaneous/enumerations.html":{}}}],["settolocalstorage",{"_index":3724,"title":{},"body":{"coverage.html":{},"miscellaneous/variables.html":{}}}],["setup",{"_index":3405,"title":{},"body":{"changelog.html":{}}}],["setupvrcontrols",{"_index":2787,"title":{},"body":{"classes/VRManager.html":{}}}],["setxrsession",{"_index":41,"title":{},"body":{"classes/ARManager.html":{},"classes/VRManager.html":{},"classes/XRManager.html":{}}}],["setxrsession(renderer",{"_index":130,"title":{},"body":{"classes/ARManager.html":{},"classes/VRManager.html":{},"classes/XRManager.html":{}}}],["shade",{"_index":3655,"title":{},"body":{"changelog.html":{}}}],["shaded",{"_index":2977,"title":{},"body":{"interfaces/Window.html":{}}}],["shader",{"_index":2550,"title":{},"body":{"classes/TracksMaterial.html":{},"classes/TracksMesh.html":{}}}],["shaderchunk",{"_index":2475,"title":{},"body":{"classes/TracksMaterial.html":{},"classes/TracksMesh.html":{}}}],["shaderchunk['tracks_frag",{"_index":2600,"title":{},"body":{"classes/TracksMaterial.html":{},"classes/TracksMesh.html":{}}}],["shaderchunk['tracks_vert",{"_index":2551,"title":{},"body":{"classes/TracksMaterial.html":{},"classes/TracksMesh.html":{}}}],["shadermaterial",{"_index":2470,"title":{},"body":{"classes/TracksMaterial.html":{},"classes/TracksMesh.html":{}}}],["shadre",{"_index":2599,"title":{},"body":{"classes/TracksMaterial.html":{},"classes/TracksMesh.html":{}}}],["sharable",{"_index":3445,"title":{},"body":{"changelog.html":{}}}],["share",{"_index":3517,"title":{},"body":{"changelog.html":{}}}],["shot",{"_index":2913,"title":{},"body":{"interfaces/Window.html":{}}}],["shouldcolorbycharge",{"_index":700,"title":{},"body":{"classes/ColorOptions.html":{}}}],["shouldcolorbycharge(objectparams",{"_index":769,"title":{},"body":{"classes/ColorOptions.html":{}}}],["show",{"_index":513,"title":{},"body":{"interfaces/AnimationPreset.html":{},"classes/ColorOptions.html":{},"classes/DatGUIMenuUI.html":{},"interfaces/Window.html":{},"changelog.html":{}}}],["show/hide",{"_index":1083,"title":{},"body":{"classes/DatGUIMenuUI.html":{},"classes/PhoenixMenuUI.html":{},"interfaces/PhoenixUI.html":{}}}],["showgeometriesmenu",{"_index":1139,"title":{},"body":{"classes/DatGUIMenuUI.html":{}}}],["showgeometriesmenu.onchange((value",{"_index":1143,"title":{},"body":{"classes/DatGUIMenuUI.html":{}}}],["showing",{"_index":1394,"title":{},"body":{"interfaces/EventDataLoader.html":{}}}],["showing/hiding",{"_index":1138,"title":{},"body":{"classes/DatGUIMenuUI.html":{}}}],["showmenu",{"_index":1173,"title":{},"body":{"classes/DatGUIMenuUI.html":{}}}],["showmenu.onchange((value",{"_index":1174,"title":{},"body":{"classes/DatGUIMenuUI.html":{}}}],["showmenu.onchange(ontoggle",{"_index":1258,"title":{},"body":{"classes/DatGUIMenuUI.html":{}}}],["shown",{"_index":1600,"title":{},"body":{"classes/InfoLogger.html":{}}}],["shows",{"_index":65,"title":{},"body":{"classes/ARManager.html":{}}}],["si",{"_index":1501,"title":{},"body":{"classes/Field.html":{},"classes/RungeKutta.html":{},"classes/State.html":{}}}],["side",{"_index":598,"title":{},"body":{"classes/CMSObjects.html":{},"classes/TracksMaterial.html":{},"classes/TracksMesh.html":{},"interfaces/Window.html":{},"changelog.html":{}}}],["sides",{"_index":2973,"title":{},"body":{"interfaces/Window.html":{}}}],["simple",{"_index":3214,"title":{},"body":{"changelog.html":{},"index.html":{}}}],["simplify",{"_index":3312,"title":{},"body":{"changelog.html":{}}}],["single",{"_index":524,"title":{},"body":{"interfaces/AnimationPreset.html":{},"classes/ColorOptions.html":{},"classes/PhoenixMenuNode.html":{},"classes/VRManager.html":{},"miscellaneous/typealiases.html":{}}}],["singlelabelnode",{"_index":1938,"title":{},"body":{"classes/PhoenixMenuUI.html":{}}}],["singlelabelnode.name",{"_index":1939,"title":{},"body":{"classes/PhoenixMenuUI.html":{}}}],["singleton",{"_index":1628,"title":{},"body":{"classes/LoadingManager.html":{},"classes/StateManager.html":{}}}],["size",{"_index":476,"title":{},"body":{"interfaces/AnimationPreset.html":{},"classes/Cut.html":{},"classes/DatGUIMenuUI.html":{},"classes/Field.html":{},"classes/PhoenixMenuUI.html":{},"classes/RungeKutta.html":{},"classes/State.html":{},"changelog.html":{}}}],["slider",{"_index":998,"title":{},"body":{"classes/Cut.html":{},"classes/DatGUIMenuUI.html":{},"classes/PhoenixMenuNode.html":{},"changelog.html":{},"miscellaneous/typealiases.html":{}}}],["sliders",{"_index":1911,"title":{},"body":{"classes/PhoenixMenuUI.html":{},"changelog.html":{}}}],["slidervalue",{"_index":834,"title":{},"body":{"classes/ColorOptions.html":{}}}],["smaller",{"_index":3047,"title":{},"body":{"interfaces/Window.html":{}}}],["source",{"_index":4,"title":{},"body":{"classes/ARManager.html":{},"classes/ActiveVariable.html":{},"interfaces/AnimationPreset.html":{},"classes/CMSObjects.html":{},"classes/ColorManager.html":{},"classes/ColorOptions.html":{},"interfaces/Configuration.html":{},"classes/CoordinateHelper.html":{},"classes/Cut.html":{},"classes/DatGUIMenuUI.html":{},"classes/EffectsManager.html":{},"interfaces/EventDataLoader.html":{},"classes/ExportManager.html":{},"classes/Field.html":{},"classes/InfoLogger.html":{},"classes/LoadingManager.html":{},"classes/PhoenixMenuNode.html":{},"classes/PhoenixMenuUI.html":{},"interfaces/PhoenixUI.html":{},"classes/PresetView.html":{},"classes/PrettySymbols.html":{},"classes/RKHelper.html":{},"classes/RendererManager.html":{},"classes/RungeKutta.html":{},"classes/ScriptLoader.html":{},"classes/SelectionManager.html":{},"classes/State.html":{},"classes/StateManager.html":{},"classes/TracksMaterial.html":{},"classes/TracksMesh.html":{},"classes/URLOptionsManager.html":{},"classes/VRManager.html":{},"interfaces/Window.html":{},"classes/XRManager.html":{},"changelog.html":{},"index.html":{}}}],["space",{"_index":1574,"title":{},"body":{"classes/Field.html":{},"classes/RungeKutta.html":{},"classes/State.html":{}}}],["spec",{"_index":3633,"title":{},"body":{"changelog.html":{}}}],["specific",{"_index":1903,"title":{},"body":{"classes/PhoenixMenuUI.html":{},"interfaces/Window.html":{}}}],["specified",{"_index":1955,"title":{},"body":{"classes/PresetView.html":{},"classes/URLOptionsManager.html":{},"interfaces/Window.html":{}}}],["specifying",{"_index":976,"title":{},"body":{"classes/Cut.html":{},"interfaces/Window.html":{}}}],["sphere",{"_index":246,"title":{},"body":{"interfaces/AnimationPreset.html":{}}}],["sphere(new",{"_index":328,"title":{},"body":{"interfaces/AnimationPreset.html":{}}}],["sphere.attributes.position",{"_index":454,"title":{},"body":{"interfaces/AnimationPreset.html":{}}}],["spheregeometry",{"_index":245,"title":{},"body":{"interfaces/AnimationPreset.html":{}}}],["spheregeometry(1",{"_index":450,"title":{},"body":{"interfaces/AnimationPreset.html":{}}}],["spheregeometry(particlesize",{"_index":484,"title":{},"body":{"interfaces/AnimationPreset.html":{}}}],["spherical",{"_index":449,"title":{},"body":{"interfaces/AnimationPreset.html":{},"classes/CoordinateHelper.html":{}}}],["sphericaltocartesian",{"_index":904,"title":{},"body":{"classes/CoordinateHelper.html":{},"changelog.html":{}}}],["sphericaltocartesian(radius",{"_index":944,"title":{},"body":{"classes/CoordinateHelper.html":{}}}],["split",{"_index":3558,"title":{},"body":{"changelog.html":{}}}],["splitting",{"_index":3560,"title":{},"body":{"changelog.html":{}}}],["src/.../active",{"_index":3833,"title":{},"body":{"miscellaneous/typealiases.html":{}}}],["src/.../browser",{"_index":3850,"title":{},"body":{"miscellaneous/variables.html":{}}}],["src/.../color",{"_index":3788,"title":{},"body":{"miscellaneous/enumerations.html":{},"miscellaneous/typealiases.html":{}}}],["src/.../config",{"_index":3835,"title":{},"body":{"miscellaneous/typealiases.html":{}}}],["src/.../constants.ts",{"_index":3849,"title":{},"body":{"miscellaneous/variables.html":{}}}],["src/.../file.ts",{"_index":3852,"title":{},"body":{"miscellaneous/variables.html":{}}}],["src/.../geometry",{"_index":3844,"title":{},"body":{"miscellaneous/typealiases.html":{}}}],["src/.../index.ts",{"_index":3848,"title":{},"body":{"miscellaneous/variables.html":{}}}],["src/.../labels.ts",{"_index":3851,"title":{},"body":{"miscellaneous/variables.html":{}}}],["src/.../preset",{"_index":3787,"title":{},"body":{"miscellaneous/enumerations.html":{}}}],["src/.../url",{"_index":3853,"title":{},"body":{"miscellaneous/variables.html":{}}}],["src/.../xr",{"_index":3789,"title":{},"body":{"miscellaneous/enumerations.html":{}}}],["src/.../zip.ts",{"_index":3854,"title":{},"body":{"miscellaneous/variables.html":{}}}],["src/event",{"_index":2865,"title":{},"body":{"interfaces/Window.html":{},"coverage.html":{}}}],["src/helpers/active",{"_index":189,"title":{},"body":{"classes/ActiveVariable.html":{},"coverage.html":{},"miscellaneous/typealiases.html":{}}}],["src/helpers/browser",{"_index":3720,"title":{},"body":{"coverage.html":{},"miscellaneous/variables.html":{}}}],["src/helpers/constants.ts",{"_index":3725,"title":{},"body":{"coverage.html":{},"miscellaneous/variables.html":{}}}],["src/helpers/coordinate",{"_index":895,"title":{},"body":{"classes/CoordinateHelper.html":{},"coverage.html":{}}}],["src/helpers/file.ts",{"_index":3727,"title":{},"body":{"coverage.html":{},"miscellaneous/variables.html":{}}}],["src/helpers/info",{"_index":1591,"title":{},"body":{"classes/InfoLogger.html":{},"coverage.html":{}}}],["src/helpers/labels.ts",{"_index":3729,"title":{},"body":{"coverage.html":{},"miscellaneous/variables.html":{}}}],["src/helpers/pretty",{"_index":1985,"title":{},"body":{"classes/PrettySymbols.html":{},"coverage.html":{}}}],["src/helpers/rk",{"_index":2037,"title":{},"body":{"classes/RKHelper.html":{},"coverage.html":{}}}],["src/helpers/runge",{"_index":1484,"title":{},"body":{"classes/Field.html":{},"classes/RungeKutta.html":{},"classes/State.html":{},"coverage.html":{}}}],["src/helpers/zip.ts",{"_index":3733,"title":{},"body":{"coverage.html":{},"miscellaneous/variables.html":{}}}],["src/lib/models/cut.model.ts",{"_index":975,"title":{},"body":{"classes/Cut.html":{},"coverage.html":{}}}],["src/lib/models/cut.model.ts:10",{"_index":1002,"title":{},"body":{"classes/Cut.html":{}}}],["src/lib/models/cut.model.ts:12",{"_index":993,"title":{},"body":{"classes/Cut.html":{}}}],["src/lib/models/cut.model.ts:24",{"_index":1008,"title":{},"body":{"classes/Cut.html":{}}}],["src/lib/models/cut.model.ts:25",{"_index":1012,"title":{},"body":{"classes/Cut.html":{}}}],["src/lib/models/cut.model.ts:26",{"_index":1010,"title":{},"body":{"classes/Cut.html":{}}}],["src/lib/models/cut.model.ts:27",{"_index":1013,"title":{},"body":{"classes/Cut.html":{}}}],["src/lib/models/cut.model.ts:28",{"_index":1011,"title":{},"body":{"classes/Cut.html":{}}}],["src/lib/models/cut.model.ts:29",{"_index":1009,"title":{},"body":{"classes/Cut.html":{}}}],["src/lib/models/cut.model.ts:38",{"_index":1018,"title":{},"body":{"classes/Cut.html":{}}}],["src/lib/models/cut.model.ts:43",{"_index":1021,"title":{},"body":{"classes/Cut.html":{}}}],["src/lib/models/cut.model.ts:48",{"_index":1015,"title":{},"body":{"classes/Cut.html":{}}}],["src/lib/models/cut.model.ts:58",{"_index":1022,"title":{},"body":{"classes/Cut.html":{}}}],["src/lib/models/cut.model.ts:6",{"_index":1007,"title":{},"body":{"classes/Cut.html":{}}}],["src/lib/models/cut.model.ts:8",{"_index":1006,"title":{},"body":{"classes/Cut.html":{}}}],["src/lib/models/preset",{"_index":1951,"title":{},"body":{"classes/PresetView.html":{},"coverage.html":{},"miscellaneous/enumerations.html":{}}}],["src/lib/types/configuration.ts",{"_index":853,"title":{},"body":{"interfaces/Configuration.html":{},"coverage.html":{}}}],["src/lib/types/geometry",{"_index":3847,"title":{},"body":{"miscellaneous/typealiases.html":{}}}],["src/loaders/cms",{"_index":3737,"title":{},"body":{"coverage.html":{}}}],["src/loaders/edm4hep",{"_index":3739,"title":{},"body":{"coverage.html":{}}}],["src/loaders/event",{"_index":1368,"title":{},"body":{"interfaces/EventDataLoader.html":{},"coverage.html":{}}}],["src/loaders/jivexml",{"_index":3743,"title":{},"body":{"coverage.html":{}}}],["src/loaders/jsroot",{"_index":3745,"title":{},"body":{"coverage.html":{}}}],["src/loaders/objects/cms",{"_index":544,"title":{},"body":{"classes/CMSObjects.html":{},"coverage.html":{}}}],["src/loaders/objects/phoenix",{"_index":3747,"title":{},"body":{"coverage.html":{}}}],["src/loaders/objects/tracks.ts",{"_index":2469,"title":{},"body":{"classes/TracksMaterial.html":{},"classes/TracksMesh.html":{},"coverage.html":{}}}],["src/loaders/objects/tracks.ts:102",{"_index":2628,"title":{},"body":{"classes/TracksMesh.html":{}}}],["src/loaders/objects/tracks.ts:17",{"_index":2622,"title":{},"body":{"classes/TracksMesh.html":{}}}],["src/loaders/objects/tracks.ts:19",{"_index":2623,"title":{},"body":{"classes/TracksMesh.html":{}}}],["src/loaders/objects/tracks.ts:21",{"_index":2624,"title":{},"body":{"classes/TracksMesh.html":{}}}],["src/loaders/objects/tracks.ts:23",{"_index":2621,"title":{},"body":{"classes/TracksMesh.html":{}}}],["src/loaders/objects/tracks.ts:230",{"_index":2473,"title":{},"body":{"classes/TracksMaterial.html":{}}}],["src/loaders/objects/tracks.ts:25",{"_index":2618,"title":{},"body":{"classes/TracksMesh.html":{}}}],["src/loaders/objects/tracks.ts:27",{"_index":2619,"title":{},"body":{"classes/TracksMesh.html":{}}}],["src/loaders/objects/tracks.ts:29",{"_index":2626,"title":{},"body":{"classes/TracksMesh.html":{}}}],["src/loaders/objects/tracks.ts:31",{"_index":2625,"title":{},"body":{"classes/TracksMesh.html":{}}}],["src/loaders/objects/tracks.ts:33",{"_index":2620,"title":{},"body":{"classes/TracksMesh.html":{}}}],["src/loaders/objects/tracks.ts:35",{"_index":2617,"title":{},"body":{"classes/TracksMesh.html":{}}}],["src/loaders/objects/tracks.ts:60",{"_index":2627,"title":{},"body":{"classes/TracksMesh.html":{}}}],["src/loaders/phoenix",{"_index":3750,"title":{},"body":{"coverage.html":{}}}],["src/loaders/script",{"_index":2191,"title":{},"body":{"classes/ScriptLoader.html":{},"coverage.html":{}}}],["src/loaders/trackml",{"_index":3752,"title":{},"body":{"coverage.html":{}}}],["src/managers/loading",{"_index":1616,"title":{},"body":{"classes/LoadingManager.html":{},"coverage.html":{}}}],["src/managers/state",{"_index":2393,"title":{},"body":{"classes/StateManager.html":{},"coverage.html":{}}}],["src/managers/three",{"_index":6,"title":{},"body":{"classes/ARManager.html":{},"interfaces/AnimationPreset.html":{},"classes/ColorManager.html":{},"classes/EffectsManager.html":{},"classes/ExportManager.html":{},"classes/RendererManager.html":{},"classes/SelectionManager.html":{},"classes/VRManager.html":{},"classes/XRManager.html":{},"coverage.html":{},"miscellaneous/enumerations.html":{}}}],["src/managers/ui",{"_index":682,"title":{},"body":{"classes/ColorOptions.html":{},"classes/DatGUIMenuUI.html":{},"classes/PhoenixMenuNode.html":{},"classes/PhoenixMenuUI.html":{},"interfaces/PhoenixUI.html":{},"coverage.html":{},"miscellaneous/enumerations.html":{},"miscellaneous/typealiases.html":{},"miscellaneous/variables.html":{}}}],["src/managers/url",{"_index":2630,"title":{},"body":{"classes/URLOptionsManager.html":{},"coverage.html":{},"miscellaneous/variables.html":{}}}],["standalone",{"_index":3807,"title":{},"body":{"index.html":{}}}],["start",{"_index":229,"title":{},"body":{"interfaces/AnimationPreset.html":{},"classes/PresetView.html":{},"classes/StateManager.html":{},"classes/VRManager.html":{},"interfaces/Window.html":{},"changelog.html":{}}}],["start.chain(startxaxis",{"_index":309,"title":{},"body":{"interfaces/AnimationPreset.html":{}}}],["start.start",{"_index":313,"title":{},"body":{"interfaces/AnimationPreset.html":{}}}],["startangle",{"_index":2452,"title":{},"body":{"classes/StateManager.html":{}}}],["startclippingangle",{"_index":2398,"title":{},"body":{"classes/StateManager.html":{}}}],["startclone.delay(500",{"_index":308,"title":{},"body":{"interfaces/AnimationPreset.html":{}}}],["startdir",{"_index":1575,"title":{},"body":{"classes/Field.html":{},"classes/RungeKutta.html":{},"classes/State.html":{}}}],["started",{"_index":115,"title":{"changelog.html":{},"index.html":{}},"body":{"classes/ARManager.html":{},"classes/VRManager.html":{},"classes/XRManager.html":{}}}],["starting",{"_index":1350,"title":{},"body":{"classes/EffectsManager.html":{},"classes/Field.html":{},"classes/RungeKutta.html":{},"classes/State.html":{},"classes/StateManager.html":{}}}],["startpos",{"_index":283,"title":{},"body":{"interfaces/AnimationPreset.html":{},"classes/Field.html":{},"classes/RungeKutta.html":{},"classes/State.html":{},"interfaces/Window.html":{}}}],["startpos[2",{"_index":296,"title":{},"body":{"interfaces/AnimationPreset.html":{}}}],["starts",{"_index":134,"title":{},"body":{"classes/ARManager.html":{},"interfaces/AnimationPreset.html":{},"classes/PhoenixMenuUI.html":{},"classes/VRManager.html":{},"classes/XRManager.html":{}}}],["startxaxis",{"_index":297,"title":{},"body":{"interfaces/AnimationPreset.html":{}}}],["startxaxis.chain(rotatestart",{"_index":310,"title":{},"body":{"interfaces/AnimationPreset.html":{}}}],["state",{"_index":1494,"title":{"classes/State.html":{}},"body":{"classes/Field.html":{},"classes/PhoenixMenuNode.html":{},"classes/PhoenixMenuUI.html":{},"classes/RungeKutta.html":{},"classes/State.html":{},"classes/StateManager.html":{},"classes/URLOptionsManager.html":{},"interfaces/Window.html":{},"changelog.html":{},"coverage.html":{}}}],["state.dir",{"_index":1526,"title":{},"body":{"classes/Field.html":{},"classes/RungeKutta.html":{},"classes/State.html":{}}}],["state.dir.add",{"_index":1566,"title":{},"body":{"classes/Field.html":{},"classes/RungeKutta.html":{},"classes/State.html":{}}}],["state.dir.clone().cross(b_first).multiplyscalar(qop",{"_index":1520,"title":{},"body":{"classes/Field.html":{},"classes/RungeKutta.html":{},"classes/State.html":{}}}],["state.dir.cross(b_first",{"_index":1518,"title":{},"body":{"classes/Field.html":{},"classes/RungeKutta.html":{},"classes/State.html":{}}}],["state.dir.normalize",{"_index":1571,"title":{},"body":{"classes/Field.html":{},"classes/RungeKutta.html":{},"classes/State.html":{}}}],["state.p",{"_index":1506,"title":{},"body":{"classes/Field.html":{},"classes/RungeKutta.html":{},"classes/State.html":{}}}],["state.pos",{"_index":1525,"title":{},"body":{"classes/Field.html":{},"classes/RungeKutta.html":{},"classes/State.html":{}}}],["state.pos.add(state.dir.clone().multiplyscalar(fh)).add",{"_index":1562,"title":{},"body":{"classes/Field.html":{},"classes/RungeKutta.html":{},"classes/State.html":{}}}],["state.q",{"_index":1504,"title":{},"body":{"classes/Field.html":{},"classes/RungeKutta.html":{},"classes/State.html":{}}}],["state.stepsize",{"_index":1557,"title":{},"body":{"classes/Field.html":{},"classes/RungeKutta.html":{},"classes/State.html":{}}}],["state.unitc",{"_index":1505,"title":{},"body":{"classes/Field.html":{},"classes/RungeKutta.html":{},"classes/State.html":{}}}],["statemanager",{"_index":2392,"title":{"classes/StateManager.html":{}},"body":{"classes/StateManager.html":{},"classes/URLOptionsManager.html":{},"interfaces/Window.html":{},"coverage.html":{}}}],["statemanager.instance",{"_index":2431,"title":{},"body":{"classes/StateManager.html":{}}}],["statemanager.loadstatefromjson(jsonstate",{"_index":2707,"title":{},"body":{"classes/URLOptionsManager.html":{}}}],["statements",{"_index":3716,"title":{},"body":{"coverage.html":{}}}],["static",{"_index":18,"title":{},"body":{"classes/ARManager.html":{},"classes/CMSObjects.html":{},"classes/CoordinateHelper.html":{},"classes/Field.html":{},"classes/LoadingManager.html":{},"classes/PrettySymbols.html":{},"classes/RKHelper.html":{},"classes/RungeKutta.html":{},"classes/ScriptLoader.html":{},"classes/State.html":{},"classes/StateManager.html":{},"classes/VRManager.html":{}}}],["stats",{"_index":2767,"title":{},"body":{"classes/URLOptionsManager.html":{},"dependencies.html":{}}}],["statselement",{"_index":2766,"title":{},"body":{"classes/URLOptionsManager.html":{}}}],["step",{"_index":306,"title":{},"body":{"interfaces/AnimationPreset.html":{},"classes/ColorOptions.html":{},"classes/Cut.html":{},"classes/Field.html":{},"classes/PhoenixMenuUI.html":{},"classes/RungeKutta.html":{},"classes/State.html":{},"classes/VRManager.html":{}}}],["step(state",{"_index":1497,"title":{},"body":{"classes/Field.html":{},"classes/RungeKutta.html":{},"classes/State.html":{}}}],["stepdistance",{"_index":2797,"title":{},"body":{"classes/VRManager.html":{}}}],["steps",{"_index":1573,"title":{},"body":{"classes/Field.html":{},"classes/RungeKutta.html":{},"classes/State.html":{}}}],["stepsize",{"_index":2380,"title":{},"body":{"classes/State.html":{}}}],["still",{"_index":146,"title":{},"body":{"classes/ARManager.html":{},"classes/VRManager.html":{},"classes/XRManager.html":{}}}],["stop",{"_index":2856,"title":{},"body":{"classes/VRManager.html":{},"changelog.html":{}}}],["storage",{"_index":3320,"title":{},"body":{"changelog.html":{},"miscellaneous/variables.html":{}}}],["storage.ts",{"_index":3721,"title":{},"body":{"coverage.html":{},"miscellaneous/variables.html":{}}}],["stored",{"_index":754,"title":{},"body":{"classes/ColorOptions.html":{},"interfaces/EventDataLoader.html":{},"interfaces/Window.html":{}}}],["storing",{"_index":2884,"title":{},"body":{"interfaces/Window.html":{}}}],["stretch",{"_index":2928,"title":{},"body":{"interfaces/Window.html":{}}}],["stretched",{"_index":2925,"title":{},"body":{"interfaces/Window.html":{}}}],["string",{"_index":80,"title":{},"body":{"classes/ARManager.html":{},"interfaces/AnimationPreset.html":{},"classes/CMSObjects.html":{},"classes/ColorManager.html":{},"classes/ColorOptions.html":{},"interfaces/Configuration.html":{},"classes/Cut.html":{},"classes/DatGUIMenuUI.html":{},"interfaces/EventDataLoader.html":{},"classes/InfoLogger.html":{},"classes/LoadingManager.html":{},"classes/PhoenixMenuNode.html":{},"classes/PhoenixMenuUI.html":{},"interfaces/PhoenixUI.html":{},"classes/PresetView.html":{},"classes/PrettySymbols.html":{},"classes/RendererManager.html":{},"classes/ScriptLoader.html":{},"classes/SelectionManager.html":{},"classes/StateManager.html":{},"classes/TracksMaterial.html":{},"classes/TracksMesh.html":{},"classes/URLOptionsManager.html":{},"classes/VRManager.html":{},"interfaces/Window.html":{},"classes/XRManager.html":{},"miscellaneous/variables.html":{}}}],["strings",{"_index":1406,"title":{},"body":{"interfaces/EventDataLoader.html":{},"interfaces/Window.html":{}}}],["style.setproperty('display",{"_index":2771,"title":{},"body":{"classes/URLOptionsManager.html":{}}}],["styles",{"_index":3441,"title":{},"body":{"changelog.html":{}}}],["sub",{"_index":2971,"title":{},"body":{"interfaces/Window.html":{}}}],["subfolder",{"_index":1092,"title":{},"body":{"classes/DatGUIMenuUI.html":{},"classes/PhoenixMenuUI.html":{},"interfaces/PhoenixUI.html":{}}}],["super",{"_index":2484,"title":{},"body":{"classes/TracksMaterial.html":{},"classes/TracksMesh.html":{}}}],["super(xrsessiontype.ar",{"_index":156,"title":{},"body":{"classes/ARManager.html":{}}}],["super(xrsessiontype.vr",{"_index":2810,"title":{},"body":{"classes/VRManager.html":{}}}],["super.onxrsessionended",{"_index":180,"title":{},"body":{"classes/ARManager.html":{},"classes/VRManager.html":{}}}],["super.onxrsessionstarted(session",{"_index":177,"title":{},"body":{"classes/ARManager.html":{}}}],["super.setxrsession(renderer",{"_index":2815,"title":{},"body":{"classes/VRManager.html":{}}}],["support",{"_index":3531,"title":{},"body":{"changelog.html":{}}}],["sure",{"_index":3262,"title":{},"body":{"changelog.html":{}}}],["svg",{"_index":1984,"title":{},"body":{"classes/PresetView.html":{}}}],["swap",{"_index":2141,"title":{},"body":{"classes/RendererManager.html":{}}}],["swapped",{"_index":2143,"title":{},"body":{"classes/RendererManager.html":{}}}],["swaprenderers",{"_index":2101,"title":{},"body":{"classes/RendererManager.html":{}}}],["swaprenderers(renderera",{"_index":2138,"title":{},"body":{"classes/RendererManager.html":{}}}],["switch",{"_index":3544,"title":{},"body":{"changelog.html":{}}}],["switching",{"_index":882,"title":{},"body":{"interfaces/Configuration.html":{}}}],["symbol",{"_index":2003,"title":{},"body":{"classes/PrettySymbols.html":{}}}],["symbols",{"_index":776,"title":{},"body":{"classes/ColorOptions.html":{},"classes/PhoenixMenuUI.html":{},"classes/PrettySymbols.html":{},"classes/SelectionManager.html":{}}}],["symbols.ts",{"_index":1986,"title":{},"body":{"classes/PrettySymbols.html":{},"coverage.html":{}}}],["symbols.ts:24",{"_index":2002,"title":{},"body":{"classes/PrettySymbols.html":{}}}],["symbols.ts:37",{"_index":1998,"title":{},"body":{"classes/PrettySymbols.html":{}}}],["symbols.ts:6",{"_index":1996,"title":{},"body":{"classes/PrettySymbols.html":{}}}],["t",{"_index":200,"title":{},"body":{"classes/ActiveVariable.html":{},"classes/PhoenixMenuNode.html":{},"interfaces/PhoenixUI.html":{}}}],["table",{"_index":3772,"title":{},"body":{"coverage.html":{}}}],["tablesort(document.getelementbyid('coverage",{"_index":3771,"title":{},"body":{"coverage.html":{}}}],["tag",{"_index":2203,"title":{},"body":{"classes/ScriptLoader.html":{}}}],["take",{"_index":2348,"title":{},"body":{"classes/SelectionManager.html":{}}}],["taken",{"_index":3005,"title":{},"body":{"interfaces/Window.html":{}}}],["takes",{"_index":1387,"title":{},"body":{"interfaces/EventDataLoader.html":{},"interfaces/Window.html":{}}}],["target",{"_index":1957,"title":{},"body":{"classes/PresetView.html":{}}}],["temp",{"_index":2182,"title":{},"body":{"classes/RendererManager.html":{}}}],["tempanchor",{"_index":3921,"title":{},"body":{"miscellaneous/variables.html":{}}}],["tempanchor.click",{"_index":3927,"title":{},"body":{"miscellaneous/variables.html":{}}}],["tempanchor.download",{"_index":3926,"title":{},"body":{"miscellaneous/variables.html":{}}}],["tempanchor.href",{"_index":3924,"title":{},"body":{"miscellaneous/variables.html":{}}}],["tempanchor.remove",{"_index":3928,"title":{},"body":{"miscellaneous/variables.html":{}}}],["tempanchor.style.display",{"_index":3923,"title":{},"body":{"miscellaneous/variables.html":{}}}],["templates",{"_index":3291,"title":{},"body":{"changelog.html":{}}}],["temporary",{"_index":920,"title":{},"body":{"classes/CoordinateHelper.html":{}}}],["tesla",{"_index":1489,"title":{},"body":{"classes/Field.html":{}}}],["test",{"_index":1210,"title":{},"body":{"classes/DatGUIMenuUI.html":{},"classes/PhoenixMenuUI.html":{}}}],["tested",{"_index":2053,"title":{},"body":{"classes/RKHelper.html":{}}}],["tests",{"_index":3228,"title":{},"body":{"changelog.html":{}}}],["text",{"_index":2354,"title":{},"body":{"classes/SelectionManager.html":{},"changelog.html":{}}}],["text/javascript",{"_index":2220,"title":{},"body":{"classes/ScriptLoader.html":{}}}],["text/plain",{"_index":1457,"title":{},"body":{"classes/ExportManager.html":{}}}],["theme",{"_index":879,"title":{},"body":{"interfaces/Configuration.html":{}}}],["then((jsonstate",{"_index":2706,"title":{},"body":{"classes/URLOptionsManager.html":{}}}],["then((res",{"_index":2704,"title":{},"body":{"classes/URLOptionsManager.html":{},"index.html":{}}}],["then((session",{"_index":3141,"title":{},"body":{"classes/XRManager.html":{}}}],["theta",{"_index":913,"title":{},"body":{"classes/CoordinateHelper.html":{},"classes/PrettySymbols.html":{},"classes/RKHelper.html":{},"changelog.html":{}}}],["thetatoeta",{"_index":905,"title":{},"body":{"classes/CoordinateHelper.html":{}}}],["thetatoeta(theta",{"_index":946,"title":{},"body":{"classes/CoordinateHelper.html":{}}}],["third",{"_index":1536,"title":{},"body":{"classes/Field.html":{},"classes/RungeKutta.html":{},"classes/State.html":{}}}],["this._attributes",{"_index":2511,"title":{},"body":{"classes/TracksMaterial.html":{},"classes/TracksMesh.html":{}}}],["this._attributes.color",{"_index":2534,"title":{},"body":{"classes/TracksMaterial.html":{},"classes/TracksMesh.html":{}}}],["this._attributes.color.needsupdate",{"_index":2535,"title":{},"body":{"classes/TracksMaterial.html":{},"classes/TracksMesh.html":{}}}],["this._attributes.counter",{"_index":2536,"title":{},"body":{"classes/TracksMaterial.html":{},"classes/TracksMesh.html":{}}}],["this._attributes.counter.needsupdate",{"_index":2537,"title":{},"body":{"classes/TracksMaterial.html":{},"classes/TracksMesh.html":{}}}],["this._attributes.index",{"_index":2538,"title":{},"body":{"classes/TracksMaterial.html":{},"classes/TracksMesh.html":{}}}],["this._attributes.index.needsupdate",{"_index":2539,"title":{},"body":{"classes/TracksMaterial.html":{},"classes/TracksMesh.html":{}}}],["this._attributes.next",{"_index":2528,"title":{},"body":{"classes/TracksMaterial.html":{},"classes/TracksMesh.html":{}}}],["this._attributes.next.needsupdate",{"_index":2529,"title":{},"body":{"classes/TracksMaterial.html":{},"classes/TracksMesh.html":{}}}],["this._attributes.position",{"_index":2523,"title":{},"body":{"classes/TracksMaterial.html":{},"classes/TracksMesh.html":{}}}],["this._attributes.position.count",{"_index":2512,"title":{},"body":{"classes/TracksMaterial.html":{},"classes/TracksMesh.html":{}}}],["this._attributes.position.needsupdate",{"_index":2525,"title":{},"body":{"classes/TracksMaterial.html":{},"classes/TracksMesh.html":{}}}],["this._attributes.previous",{"_index":2526,"title":{},"body":{"classes/TracksMaterial.html":{},"classes/TracksMesh.html":{}}}],["this._attributes.previous.needsupdate",{"_index":2527,"title":{},"body":{"classes/TracksMaterial.html":{},"classes/TracksMesh.html":{}}}],["this._attributes.side",{"_index":2530,"title":{},"body":{"classes/TracksMaterial.html":{},"classes/TracksMesh.html":{}}}],["this._attributes.side.needsupdate",{"_index":2531,"title":{},"body":{"classes/TracksMaterial.html":{},"classes/TracksMesh.html":{}}}],["this._attributes.track_id",{"_index":2532,"title":{},"body":{"classes/TracksMaterial.html":{},"classes/TracksMesh.html":{}}}],["this._attributes.track_id.needsupdate",{"_index":2533,"title":{},"body":{"classes/TracksMaterial.html":{},"classes/TracksMesh.html":{}}}],["this.activecamera",{"_index":2467,"title":{},"body":{"classes/StateManager.html":{}}}],["this.activecamera.position.fromarray",{"_index":2450,"title":{},"body":{"classes/StateManager.html":{}}}],["this.activecamera.position.toarray",{"_index":2439,"title":{},"body":{"classes/StateManager.html":{}}}],["this.activeobject",{"_index":2309,"title":{},"body":{"classes/SelectionManager.html":{}}}],["this.activeobject.update(intersectedobject.uuid",{"_index":2336,"title":{},"body":{"classes/SelectionManager.html":{}}}],["this.addcutoptions(collectionnode",{"_index":1901,"title":{},"body":{"classes/PhoenixMenuUI.html":{}}}],["this.adddrawoptions(collectionnode",{"_index":1899,"title":{},"body":{"classes/PhoenixMenuUI.html":{}}}],["this.addrenderer(overlayrenderer",{"_index":2175,"title":{},"body":{"classes/RendererManager.html":{}}}],["this.addrenderer(renderer",{"_index":2149,"title":{},"body":{"classes/RendererManager.html":{}}}],["this.allcolorbyoptions.filter((colorbyoption",{"_index":797,"title":{},"body":{"classes/ColorOptions.html":{}}}],["this.animateevent",{"_index":262,"title":{},"body":{"interfaces/AnimationPreset.html":{}}}],["this.animateevent.bind(this",{"_index":263,"title":{},"body":{"interfaces/AnimationPreset.html":{}}}],["this.animateeventwithclipping",{"_index":264,"title":{},"body":{"interfaces/AnimationPreset.html":{}}}],["this.animateeventwithclipping.bind(this",{"_index":265,"title":{},"body":{"interfaces/AnimationPreset.html":{}}}],["this.animateeventwithcollision(collisionduration",{"_index":530,"title":{},"body":{"interfaces/AnimationPreset.html":{}}}],["this.animatewithcollision",{"_index":521,"title":{},"body":{"interfaces/AnimationPreset.html":{}}}],["this.animatewithcollision(this.animateevent",{"_index":519,"title":{},"body":{"interfaces/AnimationPreset.html":{}}}],["this.antialiasing",{"_index":1352,"title":{},"body":{"classes/EffectsManager.html":{}}}],["this.antialiasrender",{"_index":1353,"title":{},"body":{"classes/EffectsManager.html":{}}}],["this.applychargecoloroptions.bind(this",{"_index":718,"title":{},"body":{"classes/ColorOptions.html":{}}}],["this.applyconfigstate(nodeconfig",{"_index":1814,"title":{},"body":{"classes/PhoenixMenuNode.html":{}}}],["this.applyconfigstate(this.configs[configslength",{"_index":1765,"title":{},"body":{"classes/PhoenixMenuNode.html":{}}}],["this.applyembedoption",{"_index":2687,"title":{},"body":{"classes/URLOptionsManager.html":{}}}],["this.applyeventoptions",{"_index":2683,"title":{},"body":{"classes/URLOptionsManager.html":{}}}],["this.applyhidewidgetsoptions",{"_index":2686,"title":{},"body":{"classes/URLOptionsManager.html":{}}}],["this.applymomcoloroptions.bind(this",{"_index":723,"title":{},"body":{"classes/ColorOptions.html":{}}}],["this.applyvertexcoloroptions.bind(this",{"_index":725,"title":{},"body":{"classes/ColorOptions.html":{}}}],["this.buildeventdatafromjson(event",{"_index":2961,"title":{},"body":{"interfaces/Window.html":{}}}],["this.buildgeometryfromparameters(parameters",{"_index":3081,"title":{},"body":{"interfaces/Window.html":{}}}],["this.callbacks.foreach((callback",{"_index":216,"title":{},"body":{"classes/ActiveVariable.html":{}}}],["this.callbacks.push(callback",{"_index":218,"title":{},"body":{"classes/ActiveVariable.html":{}}}],["this.camera",{"_index":1345,"title":{},"body":{"classes/EffectsManager.html":{},"classes/SelectionManager.html":{}}}],["this.camera.near",{"_index":172,"title":{},"body":{"classes/ARManager.html":{}}}],["this.cameragroup",{"_index":3151,"title":{},"body":{"classes/XRManager.html":{}}}],["this.cameragroup.add(this.xrcamera",{"_index":3162,"title":{},"body":{"classes/XRManager.html":{}}}],["this.cameragroup.position.addscaledvector(direction",{"_index":2863,"title":{},"body":{"classes/VRManager.html":{}}}],["this.cameragroup.position.copy(cameraposition",{"_index":3161,"title":{},"body":{"classes/XRManager.html":{}}}],["this.cameragroup.position.toarray().join",{"_index":2853,"title":{},"body":{"classes/VRManager.html":{}}}],["this.camerapos",{"_index":1978,"title":{},"body":{"classes/PresetView.html":{}}}],["this.cameratarget",{"_index":1979,"title":{},"body":{"classes/PresetView.html":{}}}],["this.chargecolors[chargevalue",{"_index":815,"title":{},"body":{"classes/ColorOptions.html":{}}}],["this.children",{"_index":1747,"title":{},"body":{"classes/PhoenixMenuNode.html":{}}}],["this.children.filter",{"_index":1818,"title":{},"body":{"classes/PhoenixMenuNode.html":{}}}],["this.children.indexof(child",{"_index":1756,"title":{},"body":{"classes/PhoenixMenuNode.html":{}}}],["this.children.push(child",{"_index":1754,"title":{},"body":{"classes/PhoenixMenuNode.html":{}}}],["this.children.splice(childindex",{"_index":1757,"title":{},"body":{"classes/PhoenixMenuNode.html":{}}}],["this.childrenactive",{"_index":1794,"title":{},"body":{"classes/PhoenixMenuNode.html":{}}}],["this.childrentogglestate[child.name",{"_index":1768,"title":{},"body":{"classes/PhoenixMenuNode.html":{}}}],["this.clipping",{"_index":1980,"title":{},"body":{"classes/PresetView.html":{}}}],["this.clippingenabled.update(clipping",{"_index":2464,"title":{},"body":{"classes/StateManager.html":{}}}],["this.clippingenabled.value",{"_index":2440,"title":{},"body":{"classes/StateManager.html":{}}}],["this.clippingopeningangle",{"_index":1982,"title":{},"body":{"classes/PresetView.html":{}}}],["this.clippingstartangle",{"_index":1981,"title":{},"body":{"classes/PresetView.html":{}}}],["this.collectionname",{"_index":781,"title":{},"body":{"classes/ColorOptions.html":{}}}],["this.collideparticles(1500",{"_index":515,"title":{},"body":{"interfaces/AnimationPreset.html":{}}}],["this.colorbymomentum('max",{"_index":836,"title":{},"body":{"classes/ColorOptions.html":{}}}],["this.colorbymomentum('min",{"_index":835,"title":{},"body":{"classes/ColorOptions.html":{}}}],["this.colorbymomentum(key",{"_index":839,"title":{},"body":{"classes/ColorOptions.html":{}}}],["this.colorbyoptions",{"_index":796,"title":{},"body":{"classes/ColorOptions.html":{}}}],["this.colorbyoptions.find",{"_index":810,"title":{},"body":{"classes/ColorOptions.html":{}}}],["this.colorbyoptions.foreach((colorbyoption",{"_index":800,"title":{},"body":{"classes/ColorOptions.html":{}}}],["this.colorbyoptions.map((colorbyoption",{"_index":806,"title":{},"body":{"classes/ColorOptions.html":{}}}],["this.colorbyoptions[0].key",{"_index":804,"title":{},"body":{"classes/ColorOptions.html":{}}}],["this.colormanager.collectioncolor(this.collectionname",{"_index":790,"title":{},"body":{"classes/ColorOptions.html":{}}}],["this.colormanager.collectioncolorrandom(this.collectionname",{"_index":793,"title":{},"body":{"classes/ColorOptions.html":{}}}],["this.colormanager.colorobjectsbyproperty",{"_index":816,"title":{},"body":{"classes/ColorOptions.html":{}}}],["this.colormanager.colortracksbyvertex(this.collectionname",{"_index":847,"title":{},"body":{"classes/ColorOptions.html":{}}}],["this.coloroptionsfolder",{"_index":783,"title":{},"body":{"classes/ColorOptions.html":{}}}],["this.coloroptionsfolder.addconfig('button",{"_index":791,"title":{},"body":{"classes/ColorOptions.html":{}}}],["this.coloroptionsfolder.addconfig('color",{"_index":785,"title":{},"body":{"classes/ColorOptions.html":{}}}],["this.coloroptionsfolder.addconfig('select",{"_index":805,"title":{},"body":{"classes/ColorOptions.html":{}}}],["this.coloroptionsfolder.addconfig('slider",{"_index":829,"title":{},"body":{"classes/ColorOptions.html":{}}}],["this.coloroptionsfolder.configs.foreach((config",{"_index":848,"title":{},"body":{"classes/ColorOptions.html":{}}}],["this.colors",{"_index":2492,"title":{},"body":{"classes/TracksMaterial.html":{},"classes/TracksMesh.html":{}}}],["this.composer",{"_index":1343,"title":{},"body":{"classes/EffectsManager.html":{}}}],["this.composer.addpass(outlinepass",{"_index":1364,"title":{},"body":{"classes/EffectsManager.html":{}}}],["this.composer.addpass(this.defaultrenderpass",{"_index":1349,"title":{},"body":{"classes/EffectsManager.html":{}}}],["this.composer.passes.indexof(pass",{"_index":1366,"title":{},"body":{"classes/EffectsManager.html":{}}}],["this.composer.passes.splice(passindex",{"_index":1367,"title":{},"body":{"classes/EffectsManager.html":{}}}],["this.composer.render",{"_index":1357,"title":{},"body":{"classes/EffectsManager.html":{}}}],["this.composer.renderer.render(scene",{"_index":1358,"title":{},"body":{"classes/EffectsManager.html":{}}}],["this.computeboundingbox",{"_index":2549,"title":{},"body":{"classes/TracksMaterial.html":{},"classes/TracksMesh.html":{}}}],["this.computeboundingsphere",{"_index":2548,"title":{},"body":{"classes/TracksMaterial.html":{},"classes/TracksMesh.html":{}}}],["this.configs",{"_index":1748,"title":{},"body":{"classes/PhoenixMenuNode.html":{}}}],["this.configs.find",{"_index":1806,"title":{},"body":{"classes/PhoenixMenuNode.html":{}}}],["this.configs.push",{"_index":1764,"title":{},"body":{"classes/PhoenixMenuNode.html":{}}}],["this.configuration",{"_index":2897,"title":{},"body":{"interfaces/Window.html":{}}}],["this.configuration.defaulteventfile?.eventfile",{"_index":2684,"title":{},"body":{"classes/URLOptionsManager.html":{}}}],["this.configuration.defaulteventfile?.eventtype",{"_index":2685,"title":{},"body":{"classes/URLOptionsManager.html":{}}}],["this.configuration.eventdataloader",{"_index":2724,"title":{},"body":{"classes/URLOptionsManager.html":{},"interfaces/Window.html":{}}}],["this.configuration.eventdataloader.addlabeltoeventobject",{"_index":3113,"title":{},"body":{"interfaces/Window.html":{}}}],["this.configuration.eventdataloader.buildeventdata",{"_index":2953,"title":{},"body":{"interfaces/Window.html":{}}}],["this.configuration.eventdataloader.getcollection(collectionname",{"_index":3064,"title":{},"body":{"interfaces/Window.html":{}}}],["this.configuration.eventdataloader.getcollections",{"_index":3065,"title":{},"body":{"interfaces/Window.html":{}}}],["this.configuration.eventdataloader.geteventmetadata",{"_index":3070,"title":{},"body":{"interfaces/Window.html":{}}}],["this.configuration.eventdataloader.geteventslist(eventsdata",{"_index":2941,"title":{},"body":{"interfaces/Window.html":{}}}],["this.configuration.eventdataloader.getlabelsobject",{"_index":3121,"title":{},"body":{"interfaces/Window.html":{}}}],["this.containsobject(renderer",{"_index":2178,"title":{},"body":{"classes/RendererManager.html":{}}}],["this.controller.getworlddirection(direction",{"_index":2861,"title":{},"body":{"classes/VRManager.html":{}}}],["this.controller1",{"_index":2823,"title":{},"body":{"classes/VRManager.html":{}}}],["this.controller1.add(line.clone",{"_index":2845,"title":{},"body":{"classes/VRManager.html":{}}}],["this.controller1.addeventlistener",{"_index":2858,"title":{},"body":{"classes/VRManager.html":{}}}],["this.controller1.addeventlistener('selectend",{"_index":2859,"title":{},"body":{"classes/VRManager.html":{}}}],["this.controller1.position.toarray().join",{"_index":2851,"title":{},"body":{"classes/VRManager.html":{}}}],["this.controller1?.removeeventlistener",{"_index":2817,"title":{},"body":{"classes/VRManager.html":{}}}],["this.controller2",{"_index":2826,"title":{},"body":{"classes/VRManager.html":{}}}],["this.controller2.add(line.clone",{"_index":2846,"title":{},"body":{"classes/VRManager.html":{}}}],["this.controllergrip1",{"_index":2830,"title":{},"body":{"classes/VRManager.html":{}}}],["this.controllergrip1.add",{"_index":2832,"title":{},"body":{"classes/VRManager.html":{}}}],["this.controllergrip2",{"_index":2835,"title":{},"body":{"classes/VRManager.html":{}}}],["this.controllergrip2.add",{"_index":2837,"title":{},"body":{"classes/VRManager.html":{}}}],["this.counter",{"_index":2490,"title":{},"body":{"classes/TracksMaterial.html":{},"classes/TracksMesh.html":{}}}],["this.currentxrsession",{"_index":3148,"title":{},"body":{"classes/XRManager.html":{}}}],["this.currentxrsession.removeeventlistener('end",{"_index":3149,"title":{},"body":{"classes/XRManager.html":{}}}],["this.currentxrsession?.end",{"_index":3152,"title":{},"body":{"classes/XRManager.html":{}}}],["this.defaultapplymaxvalue",{"_index":1026,"title":{},"body":{"classes/Cut.html":{}}}],["this.defaultapplyminvalue",{"_index":1025,"title":{},"body":{"classes/Cut.html":{}}}],["this.defaultmaxvalue",{"_index":1024,"title":{},"body":{"classes/Cut.html":{}}}],["this.defaultminvalue",{"_index":1023,"title":{},"body":{"classes/Cut.html":{}}}],["this.defaultrenderpass",{"_index":1347,"title":{},"body":{"classes/EffectsManager.html":{}}}],["this.defaultrenderpass.camera",{"_index":1355,"title":{},"body":{"classes/EffectsManager.html":{}}}],["this.defaultrenderpass.scene",{"_index":1356,"title":{},"body":{"classes/EffectsManager.html":{}}}],["this.disableselecting",{"_index":2311,"title":{},"body":{"classes/SelectionManager.html":{}}}],["this.effectsmanager",{"_index":2305,"title":{},"body":{"classes/SelectionManager.html":{}}}],["this.effectsmanager.addoutlinepassforselection",{"_index":2307,"title":{},"body":{"classes/SelectionManager.html":{}}}],["this.effectsmanager.antialiasing",{"_index":2321,"title":{},"body":{"classes/SelectionManager.html":{}}}],["this.effectsmanager.composer.renderer.domelement",{"_index":2363,"title":{},"body":{"classes/SelectionManager.html":{}}}],["this.effectsmanager.setantialiasing(false",{"_index":2322,"title":{},"body":{"classes/SelectionManager.html":{}}}],["this.effectsmanager.setantialiasing(this.preselectionantialias",{"_index":2327,"title":{},"body":{"classes/SelectionManager.html":{}}}],["this.effectsrender",{"_index":1354,"title":{},"body":{"classes/EffectsManager.html":{}}}],["this.enableeventdisplayconsole",{"_index":2909,"title":{},"body":{"interfaces/Window.html":{}}}],["this.enablekeyboardcontrols",{"_index":2911,"title":{},"body":{"interfaces/Window.html":{}}}],["this.enableselecting",{"_index":2310,"title":{},"body":{"classes/SelectionManager.html":{}}}],["this.etatotheta(eta",{"_index":958,"title":{},"body":{"classes/CoordinateHelper.html":{}}}],["this.eventdisplay",{"_index":2458,"title":{},"body":{"classes/StateManager.html":{},"classes/URLOptionsManager.html":{}}}],["this.eventdisplay.buildeventdatafromjson(eventdata",{"_index":2728,"title":{},"body":{"classes/URLOptionsManager.html":{}}}],["this.eventdisplay.getinfologger().add('could",{"_index":2742,"title":{},"body":{"classes/URLOptionsManager.html":{}}}],["this.eventdisplay.getloadingmanager().addloadableitem('url_config",{"_index":2702,"title":{},"body":{"classes/URLOptionsManager.html":{}}}],["this.eventdisplay.getloadingmanager().addloadableitem('url_event",{"_index":2715,"title":{},"body":{"classes/URLOptionsManager.html":{}}}],["this.eventdisplay.getloadingmanager().itemloaded('url_config",{"_index":2709,"title":{},"body":{"classes/URLOptionsManager.html":{}}}],["this.eventdisplay.getloadingmanager().itemloaded('url_event",{"_index":2721,"title":{},"body":{"classes/URLOptionsManager.html":{}}}],["this.eventdisplay.getuimanager().setclipping(true",{"_index":2457,"title":{},"body":{"classes/StateManager.html":{}}}],["this.eventdisplay.parsephoenixevents(alleventsobject",{"_index":2760,"title":{},"body":{"classes/URLOptionsManager.html":{}}}],["this.eventdisplay.parsephoenixevents(filedata",{"_index":2730,"title":{},"body":{"classes/URLOptionsManager.html":{}}}],["this.eventfolder",{"_index":1129,"title":{},"body":{"classes/DatGUIMenuUI.html":{},"classes/PhoenixMenuUI.html":{}}}],["this.eventfolder.__folders[eventdatatype",{"_index":1217,"title":{},"body":{"classes/DatGUIMenuUI.html":{}}}],["this.eventfolder.__folders[typename",{"_index":1290,"title":{},"body":{"classes/DatGUIMenuUI.html":{}}}],["this.eventfolder.addchild(typename",{"_index":1894,"title":{},"body":{"classes/PhoenixMenuUI.html":{}}}],["this.eventfolder.addconfig('checkbox",{"_index":1892,"title":{},"body":{"classes/PhoenixMenuUI.html":{}}}],["this.eventfolder.addfolder(typename",{"_index":1214,"title":{},"body":{"classes/DatGUIMenuUI.html":{}}}],["this.eventfolder.children.find",{"_index":1895,"title":{},"body":{"classes/PhoenixMenuUI.html":{}}}],["this.eventfolder.getnodestate",{"_index":1890,"title":{},"body":{"classes/PhoenixMenuUI.html":{}}}],["this.eventfolder.loadstatefromjson(this.eventfolderstate",{"_index":1941,"title":{},"body":{"classes/PhoenixMenuUI.html":{}}}],["this.eventfolder.remove",{"_index":1891,"title":{},"body":{"classes/PhoenixMenuUI.html":{}}}],["this.eventfolderstate",{"_index":1889,"title":{},"body":{"classes/PhoenixMenuUI.html":{}}}],["this.eventsdata",{"_index":2940,"title":{},"body":{"interfaces/Window.html":{}}}],["this.eventsdata[eventkey",{"_index":2960,"title":{},"body":{"interfaces/Window.html":{}}}],["this.fixedoverlay",{"_index":2186,"title":{},"body":{"classes/RendererManager.html":{}}}],["this.geomfolder",{"_index":1128,"title":{},"body":{"classes/DatGUIMenuUI.html":{},"classes/PhoenixMenuUI.html":{}}}],["this.geomfolder.__folders[object.name",{"_index":1196,"title":{},"body":{"classes/DatGUIMenuUI.html":{}}}],["this.geomfolder.addfolder(name",{"_index":1160,"title":{},"body":{"classes/DatGUIMenuUI.html":{}}}],["this.geomfolder.findintreeorcreate(menusubfolder",{"_index":1873,"title":{},"body":{"classes/PhoenixMenuUI.html":{}}}],["this.geomfolder.removefolder(folder",{"_index":1197,"title":{},"body":{"classes/DatGUIMenuUI.html":{}}}],["this.getcameragroup().add(this.controller1",{"_index":2825,"title":{},"body":{"classes/VRManager.html":{}}}],["this.getcameragroup().add(this.controller2",{"_index":2828,"title":{},"body":{"classes/VRManager.html":{}}}],["this.getcameragroup().add(this.controllergrip1",{"_index":2834,"title":{},"body":{"classes/VRManager.html":{}}}],["this.getcameragroup().add(this.controllergrip2",{"_index":2839,"title":{},"body":{"classes/VRManager.html":{}}}],["this.getcameratween",{"_index":532,"title":{},"body":{"interfaces/AnimationPreset.html":{}}}],["this.getcameratween(alongaxisposition",{"_index":298,"title":{},"body":{"interfaces/AnimationPreset.html":{}}}],["this.getcameratween(position",{"_index":539,"title":{},"body":{"interfaces/AnimationPreset.html":{}}}],["this.getcameratween(startpos",{"_index":289,"title":{},"body":{"interfaces/AnimationPreset.html":{}}}],["this.gethitspositions(obj.position",{"_index":413,"title":{},"body":{"interfaces/AnimationPreset.html":{}}}],["this.getmainrenderer",{"_index":2167,"title":{},"body":{"classes/RendererManager.html":{}}}],["this.getmainrenderer().setanimationloop(null",{"_index":2152,"title":{},"body":{"classes/RendererManager.html":{}}}],["this.getmomentum(objectparams",{"_index":841,"title":{},"body":{"classes/ColorOptions.html":{}}}],["this.getoverlayrenderer",{"_index":2155,"title":{},"body":{"classes/RendererManager.html":{}}}],["this.getoverlayrenderer().domelement.hidden",{"_index":2156,"title":{},"body":{"classes/RendererManager.html":{}}}],["this.getoverlayrenderer().render(scene",{"_index":2160,"title":{},"body":{"classes/RendererManager.html":{}}}],["this.getstatemanager().seteventdisplay(this",{"_index":2900,"title":{},"body":{"interfaces/Window.html":{}}}],["this.getthreemanager().getscenemanager().getscene",{"_index":3082,"title":{},"body":{"interfaces/Window.html":{}}}],["this.graphicslibrary",{"_index":2891,"title":{},"body":{"interfaces/Window.html":{}}}],["this.graphicslibrary.addgeometryfromparameters(parameters",{"_index":3042,"title":{},"body":{"interfaces/Window.html":{}}}],["this.graphicslibrary.addlabeltoobject(label",{"_index":3116,"title":{},"body":{"interfaces/Window.html":{}}}],["this.graphicslibrary.animateclippingwithcollision(tweenduration",{"_index":3111,"title":{},"body":{"interfaces/Window.html":{}}}],["this.graphicslibrary.animateeventwithcollision(tweenduration",{"_index":3110,"title":{},"body":{"interfaces/Window.html":{}}}],["this.graphicslibrary.animatepreset(animationpreset",{"_index":3109,"title":{},"body":{"interfaces/Window.html":{}}}],["this.graphicslibrary.animatethroughevent",{"_index":3107,"title":{},"body":{"interfaces/Window.html":{}}}],["this.graphicslibrary.cleareventdata",{"_index":2952,"title":{},"body":{"interfaces/Window.html":{}}}],["this.graphicslibrary.enablekeyboardcontrols",{"_index":3106,"title":{},"body":{"interfaces/Window.html":{}}}],["this.graphicslibrary.enableselecting(enable",{"_index":3095,"title":{},"body":{"interfaces/Window.html":{}}}],["this.graphicslibrary.endxrsession(xrsessiontype",{"_index":2934,"title":{},"body":{"interfaces/Window.html":{}}}],["this.graphicslibrary.exportphoenixscene",{"_index":3004,"title":{},"body":{"interfaces/Window.html":{}}}],["this.graphicslibrary.exportscenetoobj",{"_index":2991,"title":{},"body":{"interfaces/Window.html":{}}}],["this.graphicslibrary.fixoverlayview(fixed",{"_index":3098,"title":{},"body":{"interfaces/Window.html":{}}}],["this.graphicslibrary.getactiveobjectid",{"_index":3099,"title":{},"body":{"interfaces/Window.html":{}}}],["this.graphicslibrary.highlightobject(uuid",{"_index":3103,"title":{},"body":{"interfaces/Window.html":{}}}],["this.graphicslibrary.init(configuration",{"_index":2898,"title":{},"body":{"interfaces/Window.html":{}}}],["this.graphicslibrary.initxrsession(xrsessiontype",{"_index":2932,"title":{},"body":{"interfaces/Window.html":{}}}],["this.graphicslibrary.loadgltfgeometry",{"_index":3015,"title":{},"body":{"interfaces/Window.html":{}}}],["this.graphicslibrary.loadjsongeometry",{"_index":3020,"title":{},"body":{"interfaces/Window.html":{}}}],["this.graphicslibrary.loadobjgeometry",{"_index":2980,"title":{},"body":{"interfaces/Window.html":{}}}],["this.graphicslibrary.lookatobject(uuid",{"_index":3102,"title":{},"body":{"interfaces/Window.html":{}}}],["this.graphicslibrary.makescreenshot(width",{"_index":2930,"title":{},"body":{"interfaces/Window.html":{}}}],["this.graphicslibrary.parsegltfgeometry(input",{"_index":3010,"title":{},"body":{"interfaces/Window.html":{}}}],["this.graphicslibrary.parseobjgeometry",{"_index":2988,"title":{},"body":{"interfaces/Window.html":{}}}],["this.graphicslibrary.parsephnxscene(phoenixscene.scene",{"_index":3001,"title":{},"body":{"interfaces/Window.html":{}}}],["this.graphicslibrary.setanimationloop(uiloop",{"_index":2903,"title":{},"body":{"interfaces/Window.html":{}}}],["this.graphicslibrary.setoverlayrenderer(overlaycanvas",{"_index":3086,"title":{},"body":{"interfaces/Window.html":{}}}],["this.graphicslibrary.setselectedobjectdisplay(selectedobject",{"_index":3090,"title":{},"body":{"interfaces/Window.html":{}}}],["this.graphicslibrary.zoomto(zoomfactor",{"_index":3052,"title":{},"body":{"interfaces/Window.html":{}}}],["this.gui",{"_index":1119,"title":{},"body":{"classes/DatGUIMenuUI.html":{}}}],["this.gui.addfolder('event",{"_index":1203,"title":{},"body":{"classes/DatGUIMenuUI.html":{}}}],["this.gui.addfolder(scenemanager.geometries_id",{"_index":1134,"title":{},"body":{"classes/DatGUIMenuUI.html":{}}}],["this.gui.addfolder(scenemanager.labels_id",{"_index":1252,"title":{},"body":{"classes/DatGUIMenuUI.html":{}}}],["this.gui.domelement.id",{"_index":1120,"title":{},"body":{"classes/DatGUIMenuUI.html":{}}}],["this.gui.domelement.style.csstext",{"_index":1121,"title":{},"body":{"classes/DatGUIMenuUI.html":{}}}],["this.gui.removefolder(this.eventfolder",{"_index":1202,"title":{},"body":{"classes/DatGUIMenuUI.html":{}}}],["this.guiparameters.eventdata",{"_index":1204,"title":{},"body":{"classes/DatGUIMenuUI.html":{}}}],["this.guiparameters.eventdata[typename",{"_index":1215,"title":{},"body":{"classes/DatGUIMenuUI.html":{}}}],["this.guiparameters.geometries",{"_index":1135,"title":{},"body":{"classes/DatGUIMenuUI.html":{}}}],["this.guiparameters.labels",{"_index":1253,"title":{},"body":{"classes/DatGUIMenuUI.html":{}}}],["this.guiparameters[collectionname",{"_index":1218,"title":{},"body":{"classes/DatGUIMenuUI.html":{}}}],["this.guiparameters[labelid",{"_index":1266,"title":{},"body":{"classes/DatGUIMenuUI.html":{}}}],["this.guiparameters[labelid]['removelabel",{"_index":1282,"title":{},"body":{"classes/DatGUIMenuUI.html":{}}}],["this.guiparameters[name",{"_index":1154,"title":{},"body":{"classes/DatGUIMenuUI.html":{}}}],["this.handlejivexmlevent(fileurl",{"_index":2712,"title":{},"body":{"classes/URLOptionsManager.html":{}}}],["this.handlejsonevent(fileurl",{"_index":2714,"title":{},"body":{"classes/URLOptionsManager.html":{}}}],["this.handlezipfileevents(fileurl",{"_index":2713,"title":{},"body":{"classes/URLOptionsManager.html":{}}}],["this.hideidswithurloption(hidewidgetsoptions",{"_index":2768,"title":{},"body":{"classes/URLOptionsManager.html":{}}}],["this.icon",{"_index":1745,"title":{},"body":{"classes/PhoenixMenuNode.html":{},"classes/PresetView.html":{}}}],["this.ignorelist",{"_index":2300,"title":{},"body":{"classes/SelectionManager.html":{}}}],["this.ignorelist.includes(intersectedobject.type",{"_index":2330,"title":{},"body":{"classes/SelectionManager.html":{}}}],["this.indices_array",{"_index":2493,"title":{},"body":{"classes/TracksMaterial.html":{},"classes/TracksMesh.html":{}}}],["this.infologger",{"_index":2304,"title":{},"body":{"classes/SelectionManager.html":{},"interfaces/Window.html":{}}}],["this.infologger.add('exported",{"_index":2992,"title":{},"body":{"interfaces/Window.html":{}}}],["this.infologger.add(log",{"_index":2357,"title":{},"body":{"classes/SelectionManager.html":{}}}],["this.infologger.add(name",{"_index":2983,"title":{},"body":{"interfaces/Window.html":{}}}],["this.infologgerlist",{"_index":1614,"title":{},"body":{"classes/InfoLogger.html":{}}}],["this.infologgerlist.length",{"_index":1610,"title":{},"body":{"classes/InfoLogger.html":{}}}],["this.infologgerlist.pop",{"_index":1612,"title":{},"body":{"classes/InfoLogger.html":{}}}],["this.infologgerlist.unshift(label",{"_index":1613,"title":{},"body":{"classes/InfoLogger.html":{}}}],["this.init(configuration",{"_index":2895,"title":{},"body":{"interfaces/Window.html":{}}}],["this.initchargecoloroptions.bind(this",{"_index":716,"title":{},"body":{"classes/ColorOptions.html":{}}}],["this.initcolorbyoptions",{"_index":799,"title":{},"body":{"classes/ColorOptions.html":{}}}],["this.initmomcoloroptions.bind(this",{"_index":722,"title":{},"body":{"classes/ColorOptions.html":{}}}],["this.initrenderer(elementid",{"_index":2154,"title":{},"body":{"classes/RendererManager.html":{}}}],["this.intersectobject(event",{"_index":2329,"title":{},"body":{"classes/SelectionManager.html":{}}}],["this.isfixedoverlay",{"_index":2159,"title":{},"body":{"classes/RendererManager.html":{}}}],["this.isinit",{"_index":2299,"title":{},"body":{"classes/SelectionManager.html":{}}}],["this.istracksmaterial",{"_index":2608,"title":{},"body":{"classes/TracksMaterial.html":{},"classes/TracksMesh.html":{}}}],["this.labelsfolder",{"_index":1130,"title":{},"body":{"classes/DatGUIMenuUI.html":{},"classes/PhoenixMenuUI.html":{}}}],["this.labelsfolder.__folders[labelid",{"_index":1288,"title":{},"body":{"classes/DatGUIMenuUI.html":{}}}],["this.labelsfolder.addchild(labelid",{"_index":1934,"title":{},"body":{"classes/PhoenixMenuUI.html":{}}}],["this.labelsfolder.addconfig('button",{"_index":1931,"title":{},"body":{"classes/PhoenixMenuUI.html":{}}}],["this.labelsfolder.addconfig('color",{"_index":1930,"title":{},"body":{"classes/PhoenixMenuUI.html":{}}}],["this.labelsfolder.addconfig('slider",{"_index":1929,"title":{},"body":{"classes/PhoenixMenuUI.html":{}}}],["this.labelsfolder.addfolder(labelid",{"_index":1269,"title":{},"body":{"classes/DatGUIMenuUI.html":{}}}],["this.labelsfolder.children.find",{"_index":1932,"title":{},"body":{"classes/PhoenixMenuUI.html":{}}}],["this.labelsfolder.removefolder(labelitemfolder",{"_index":1289,"title":{},"body":{"classes/DatGUIMenuUI.html":{}}}],["this.labelsfolder?.children.find",{"_index":1937,"title":{},"body":{"classes/PhoenixMenuUI.html":{}}}],["this.loaded",{"_index":1675,"title":{},"body":{"classes/LoadingManager.html":{}}}],["this.loaded.length",{"_index":1658,"title":{},"body":{"classes/LoadingManager.html":{}}}],["this.loaded.push(id",{"_index":1654,"title":{},"body":{"classes/LoadingManager.html":{}}}],["this.loaded.sort().join",{"_index":1660,"title":{},"body":{"classes/LoadingManager.html":{}}}],["this.loadevent(eventkeys[0",{"_index":2942,"title":{},"body":{"interfaces/Window.html":{}}}],["this.loadgltfgeometry(sceneurl",{"_index":3077,"title":{},"body":{"interfaces/Window.html":{}}}],["this.loadingmanager",{"_index":2890,"title":{},"body":{"interfaces/Window.html":{}}}],["this.loadingmanager.addloadableitem('root_geom",{"_index":3032,"title":{},"body":{"interfaces/Window.html":{}}}],["this.loadingmanager.addloadableitem('root_json_geom",{"_index":3023,"title":{},"body":{"interfaces/Window.html":{}}}],["this.loadingmanager.addloadableitem(`gltf_geom_${name",{"_index":3014,"title":{},"body":{"interfaces/Window.html":{}}}],["this.loadingmanager.addloadableitem(`json_geom_${name",{"_index":3019,"title":{},"body":{"interfaces/Window.html":{}}}],["this.loadingmanager.addloadableitem(`obj_geom_${name",{"_index":2979,"title":{},"body":{"interfaces/Window.html":{}}}],["this.loadingmanager.addloadableitem(`parse_gltf_${name",{"_index":3008,"title":{},"body":{"interfaces/Window.html":{}}}],["this.loadingmanager.addloadableitem(`parse_obj_${name",{"_index":2987,"title":{},"body":{"interfaces/Window.html":{}}}],["this.loadingmanager.addloadableitem(`parse_phnx_${name",{"_index":3000,"title":{},"body":{"interfaces/Window.html":{}}}],["this.loadingmanager.itemloaded('root_geom",{"_index":3039,"title":{},"body":{"interfaces/Window.html":{}}}],["this.loadingmanager.itemloaded('root_json_geom",{"_index":3029,"title":{},"body":{"interfaces/Window.html":{}}}],["this.loadingmanager.itemloaded(`gltf_geom_${name",{"_index":3016,"title":{},"body":{"interfaces/Window.html":{}}}],["this.loadingmanager.itemloaded(`json_geom_${name",{"_index":3021,"title":{},"body":{"interfaces/Window.html":{}}}],["this.loadingmanager.itemloaded(`obj_geom_${name",{"_index":2982,"title":{},"body":{"interfaces/Window.html":{}}}],["this.loadingmanager.itemloaded(`parse_gltf_${name",{"_index":3011,"title":{},"body":{"interfaces/Window.html":{}}}],["this.loadingmanager.itemloaded(`parse_obj_${name",{"_index":2989,"title":{},"body":{"interfaces/Window.html":{}}}],["this.loadingmanager.itemloaded(`parse_phnx_${name",{"_index":3002,"title":{},"body":{"interfaces/Window.html":{}}}],["this.loadjsongeometry",{"_index":3025,"title":{},"body":{"interfaces/Window.html":{}}}],["this.loadobjgeometry(filename",{"_index":3079,"title":{},"body":{"interfaces/Window.html":{}}}],["this.loadsceneconfiguration(phoenixscene.sceneconfiguration",{"_index":2999,"title":{},"body":{"interfaces/Window.html":{}}}],["this.loadstatefromjson(json.parse(data",{"_index":2435,"title":{},"body":{"classes/StateManager.html":{}}}],["this.mainrenderer",{"_index":2174,"title":{},"body":{"classes/RendererManager.html":{}}}],["this.maxcutactive",{"_index":1027,"title":{},"body":{"classes/Cut.html":{}}}],["this.maxentries",{"_index":1611,"title":{},"body":{"classes/InfoLogger.html":{}}}],["this.maxpositionx",{"_index":1182,"title":{},"body":{"classes/DatGUIMenuUI.html":{}}}],["this.maxpositiony",{"_index":1186,"title":{},"body":{"classes/DatGUIMenuUI.html":{}}}],["this.maxpositionz",{"_index":1189,"title":{},"body":{"classes/DatGUIMenuUI.html":{}}}],["this.maxvalue",{"_index":1030,"title":{},"body":{"classes/Cut.html":{}}}],["this.mincutactive",{"_index":1028,"title":{},"body":{"classes/Cut.html":{}}}],["this.minvalue",{"_index":1029,"title":{},"body":{"classes/Cut.html":{}}}],["this.momcolors.max.value",{"_index":831,"title":{},"body":{"classes/ColorOptions.html":{}}}],["this.momcolors.min.value",{"_index":830,"title":{},"body":{"classes/ColorOptions.html":{}}}],["this.momcolors[key].color",{"_index":838,"title":{},"body":{"classes/ColorOptions.html":{}}}],["this.momcolors[key].value",{"_index":832,"title":{},"body":{"classes/ColorOptions.html":{}}}],["this.momcolors[minormax].color",{"_index":840,"title":{},"body":{"classes/ColorOptions.html":{}}}],["this.moveindirection(direction",{"_index":2855,"title":{},"body":{"classes/VRManager.html":{}}}],["this.name",{"_index":1744,"title":{},"body":{"classes/PhoenixMenuNode.html":{},"classes/PresetView.html":{}}}],["this.next",{"_index":2488,"title":{},"body":{"classes/TracksMaterial.html":{},"classes/TracksMesh.html":{}}}],["this.next.push(p.x",{"_index":2503,"title":{},"body":{"classes/TracksMaterial.html":{},"classes/TracksMesh.html":{}}}],["this.next.push(points[i].x",{"_index":2507,"title":{},"body":{"classes/TracksMaterial.html":{},"classes/TracksMesh.html":{}}}],["this.next_track_id",{"_index":2494,"title":{},"body":{"classes/TracksMaterial.html":{},"classes/TracksMesh.html":{}}}],["this.nodelevel",{"_index":1753,"title":{},"body":{"classes/PhoenixMenuNode.html":{}}}],["this.oncontrollerselectend",{"_index":2821,"title":{},"body":{"classes/VRManager.html":{}}}],["this.oncontrollerselectstart",{"_index":2819,"title":{},"body":{"classes/VRManager.html":{}}}],["this.ondisplayedeventchange.foreach((callback",{"_index":2954,"title":{},"body":{"interfaces/Window.html":{}}}],["this.ondisplayedeventchange.push(callback",{"_index":3067,"title":{},"body":{"interfaces/Window.html":{}}}],["this.ondocumentmousedown",{"_index":2317,"title":{},"body":{"classes/SelectionManager.html":{}}}],["this.oneventschange.foreach((callback",{"_index":2943,"title":{},"body":{"interfaces/Window.html":{}}}],["this.oneventschange.push(callback",{"_index":3069,"title":{},"body":{"interfaces/Window.html":{}}}],["this.onloadcallbacks",{"_index":1676,"title":{},"body":{"classes/LoadingManager.html":{}}}],["this.onloadcallbacks.foreach((callback",{"_index":1661,"title":{},"body":{"classes/LoadingManager.html":{}}}],["this.onloadcallbacks.push(callback",{"_index":1672,"title":{},"body":{"classes/LoadingManager.html":{}}}],["this.onlyselectedcolorbyoption",{"_index":802,"title":{},"body":{"classes/ColorOptions.html":{}}}],["this.onprogress(id",{"_index":1655,"title":{},"body":{"classes/LoadingManager.html":{}}}],["this.onprogresscallbacks",{"_index":1670,"title":{},"body":{"classes/LoadingManager.html":{}}}],["this.onprogresscallbacks.push(callback",{"_index":1673,"title":{},"body":{"classes/LoadingManager.html":{}}}],["this.onsessionended",{"_index":3134,"title":{},"body":{"classes/XRManager.html":{}}}],["this.ontoggle",{"_index":1746,"title":{},"body":{"classes/PhoenixMenuNode.html":{}}}],["this.ontoggle?.(this.togglestate",{"_index":1802,"title":{},"body":{"classes/PhoenixMenuNode.html":{}}}],["this.ontoggle?.(value",{"_index":1766,"title":{},"body":{"classes/PhoenixMenuNode.html":{}}}],["this.ontouchdown",{"_index":2319,"title":{},"body":{"classes/SelectionManager.html":{}}}],["this.ontouchmove",{"_index":2315,"title":{},"body":{"classes/SelectionManager.html":{}}}],["this.ontouchmove(event.targettouches[0",{"_index":2361,"title":{},"body":{"classes/SelectionManager.html":{}}}],["this.onxrsessionended",{"_index":3150,"title":{},"body":{"classes/XRManager.html":{}}}],["this.onxrsessionended.bind(this",{"_index":3146,"title":{},"body":{"classes/XRManager.html":{}}}],["this.onxrsessionstarted.bind(this)(session",{"_index":3142,"title":{},"body":{"classes/XRManager.html":{}}}],["this.openingclippingangle.update(angle",{"_index":2466,"title":{},"body":{"classes/StateManager.html":{}}}],["this.openingclippingangle.value",{"_index":2442,"title":{},"body":{"classes/StateManager.html":{}}}],["this.outlinepass",{"_index":2306,"title":{},"body":{"classes/SelectionManager.html":{}}}],["this.outlinepass.selectedobjects",{"_index":2326,"title":{},"body":{"classes/SelectionManager.html":{}}}],["this.outlinepass.selectedobjects[0",{"_index":2331,"title":{},"body":{"classes/SelectionManager.html":{}}}],["this.overlayrenderer",{"_index":2176,"title":{},"body":{"classes/RendererManager.html":{}}}],["this.parent",{"_index":1749,"title":{},"body":{"classes/PhoenixMenuNode.html":{}}}],["this.parent.removechild(this",{"_index":1758,"title":{},"body":{"classes/PhoenixMenuNode.html":{}}}],["this.phoenixmenuroot",{"_index":1861,"title":{},"body":{"classes/PhoenixMenuUI.html":{},"classes/StateManager.html":{}}}],["this.phoenixmenuroot.addchild",{"_index":1863,"title":{},"body":{"classes/PhoenixMenuUI.html":{}}}],["this.phoenixmenuroot.configactive",{"_index":2448,"title":{},"body":{"classes/StateManager.html":{}}}],["this.phoenixmenuroot.getnodestate",{"_index":2437,"title":{},"body":{"classes/StateManager.html":{}}}],["this.phoenixmenuroot.loadstatefromjson(jsondata['phoenixmenu",{"_index":2447,"title":{},"body":{"classes/StateManager.html":{}}}],["this.phoenixmenuroot.truncate",{"_index":1862,"title":{},"body":{"classes/PhoenixMenuUI.html":{}}}],["this.positions",{"_index":2486,"title":{},"body":{"classes/TracksMaterial.html":{},"classes/TracksMesh.html":{}}}],["this.positions.length",{"_index":2513,"title":{},"body":{"classes/TracksMaterial.html":{},"classes/TracksMesh.html":{}}}],["this.preselectionantialias",{"_index":2320,"title":{},"body":{"classes/SelectionManager.html":{}}}],["this.previous",{"_index":2487,"title":{},"body":{"classes/TracksMaterial.html":{},"classes/TracksMesh.html":{}}}],["this.previous.push(points[0].x",{"_index":2500,"title":{},"body":{"classes/TracksMaterial.html":{},"classes/TracksMesh.html":{}}}],["this.previousvalues.cameranear",{"_index":159,"title":{},"body":{"classes/ARManager.html":{}}}],["this.previousvalues.scenescale",{"_index":157,"title":{},"body":{"classes/ARManager.html":{}}}],["this.process",{"_index":2510,"title":{},"body":{"classes/TracksMaterial.html":{},"classes/TracksMesh.html":{}}}],["this.progressitems",{"_index":1677,"title":{},"body":{"classes/LoadingManager.html":{}}}],["this.progressitems[id",{"_index":1653,"title":{},"body":{"classes/LoadingManager.html":{}}}],["this.removelabel(labelid",{"_index":1283,"title":{},"body":{"classes/DatGUIMenuUI.html":{},"classes/PhoenixMenuUI.html":{}}}],["this.removeobj(object",{"_index":1158,"title":{},"body":{"classes/DatGUIMenuUI.html":{}}}],["this.render",{"_index":1351,"title":{},"body":{"classes/EffectsManager.html":{}}}],["this.renderer",{"_index":3133,"title":{},"body":{"classes/XRManager.html":{}}}],["this.renderer.xr",{"_index":3154,"title":{},"body":{"classes/XRManager.html":{}}}],["this.renderer.xr.getcontroller(0",{"_index":2824,"title":{},"body":{"classes/VRManager.html":{}}}],["this.renderer.xr.getcontroller(1",{"_index":2827,"title":{},"body":{"classes/VRManager.html":{}}}],["this.renderer.xr.getcontrollergrip(0",{"_index":2831,"title":{},"body":{"classes/VRManager.html":{}}}],["this.renderer.xr.getcontrollergrip(1",{"_index":2836,"title":{},"body":{"classes/VRManager.html":{}}}],["this.renderer.xr.setreferencespacetype('local",{"_index":175,"title":{},"body":{"classes/ARManager.html":{}}}],["this.renderer.xr.setsession(session",{"_index":3147,"title":{},"body":{"classes/XRManager.html":{}}}],["this.renderermanager.getmainrenderer().localclippingenabled",{"_index":468,"title":{},"body":{"interfaces/AnimationPreset.html":{}}}],["this.renderers",{"_index":2177,"title":{},"body":{"classes/RendererManager.html":{}}}],["this.renderers.indexof(renderer",{"_index":2180,"title":{},"body":{"classes/RendererManager.html":{}}}],["this.renderers.length",{"_index":2184,"title":{},"body":{"classes/RendererManager.html":{}}}],["this.renderers.push(renderer",{"_index":2179,"title":{},"body":{"classes/RendererManager.html":{}}}],["this.renderers.splice(index",{"_index":2181,"title":{},"body":{"classes/RendererManager.html":{}}}],["this.renderers[0].localclippingenabled",{"_index":2185,"title":{},"body":{"classes/RendererManager.html":{}}}],["this.reset",{"_index":1662,"title":{},"body":{"classes/LoadingManager.html":{}}}],["this.resetlabels",{"_index":2947,"title":{},"body":{"interfaces/Window.html":{}}}],["this.saveeventdataconfiguration(eventdata",{"_index":1472,"title":{},"body":{"classes/ExportManager.html":{}}}],["this.savegeometriesconfiguration(geometries",{"_index":1474,"title":{},"body":{"classes/ExportManager.html":{}}}],["this.savesceneconfig(eventdata",{"_index":1459,"title":{},"body":{"classes/ExportManager.html":{}}}],["this.savestateasjson",{"_index":2433,"title":{},"body":{"classes/StateManager.html":{}}}],["this.scalescene(0.00001",{"_index":173,"title":{},"body":{"classes/ARManager.html":{}}}],["this.scalescene(this.previousvalues.scenescale",{"_index":179,"title":{},"body":{"classes/ARManager.html":{}}}],["this.scene",{"_index":1346,"title":{},"body":{"classes/EffectsManager.html":{},"classes/SelectionManager.html":{}}}],["this.scene.add(...particles",{"_index":494,"title":{},"body":{"interfaces/AnimationPreset.html":{}}}],["this.scene.getobjectbyname(groupname)?.scale.setscalar(scale",{"_index":185,"title":{},"body":{"classes/ARManager.html":{}}}],["this.scene.getobjectbyname(scenemanager.event_data_id",{"_index":326,"title":{},"body":{"interfaces/AnimationPreset.html":{}}}],["this.scene.getobjectbyname(scenemanager.event_data_id).visible",{"_index":528,"title":{},"body":{"interfaces/AnimationPreset.html":{}}}],["this.scene.remove(...particles",{"_index":502,"title":{},"body":{"interfaces/AnimationPreset.html":{}}}],["this.scene.scale.x",{"_index":171,"title":{},"body":{"classes/ARManager.html":{}}}],["this.scenemanager",{"_index":657,"title":{},"body":{"classes/ColorManager.html":{},"classes/DatGUIMenuUI.html":{},"classes/PhoenixMenuUI.html":{}}}],["this.scenemanager.changeobjectcolor",{"_index":1280,"title":{},"body":{"classes/DatGUIMenuUI.html":{},"classes/PhoenixMenuUI.html":{}}}],["this.scenemanager.changeobjectcolor(object",{"_index":1166,"title":{},"body":{"classes/DatGUIMenuUI.html":{},"classes/PhoenixMenuUI.html":{}}}],["this.scenemanager.collectionfilter(collectionname",{"_index":1243,"title":{},"body":{"classes/DatGUIMenuUI.html":{},"classes/PhoenixMenuUI.html":{}}}],["this.scenemanager.getobjectbyname(labelid",{"_index":1281,"title":{},"body":{"classes/DatGUIMenuUI.html":{},"classes/PhoenixMenuUI.html":{}}}],["this.scenemanager.getobjectbyname(scenemanager.geometries_id",{"_index":1145,"title":{},"body":{"classes/DatGUIMenuUI.html":{},"classes/PhoenixMenuUI.html":{}}}],["this.scenemanager.getobjectposition(name).setx(value",{"_index":1185,"title":{},"body":{"classes/DatGUIMenuUI.html":{}}}],["this.scenemanager.getobjectposition(name).sety(value",{"_index":1188,"title":{},"body":{"classes/DatGUIMenuUI.html":{}}}],["this.scenemanager.getobjectposition(name).setz(value",{"_index":1191,"title":{},"body":{"classes/DatGUIMenuUI.html":{}}}],["this.scenemanager.getscene",{"_index":667,"title":{},"body":{"classes/ColorManager.html":{}}}],["this.scenemanager.getscene().getobjectbyname(objectsgroup",{"_index":652,"title":{},"body":{"classes/ColorManager.html":{}}}],["this.scenemanager.groupvisibility",{"_index":1223,"title":{},"body":{"classes/DatGUIMenuUI.html":{},"classes/PhoenixMenuUI.html":{}}}],["this.scenemanager.groupvisibility(scenemanager.event_data_id",{"_index":1207,"title":{},"body":{"classes/DatGUIMenuUI.html":{},"classes/PhoenixMenuUI.html":{}}}],["this.scenemanager.groupvisibility(scenemanager.geometries_id",{"_index":1864,"title":{},"body":{"classes/PhoenixMenuUI.html":{}}}],["this.scenemanager.objectvisibility",{"_index":1144,"title":{},"body":{"classes/DatGUIMenuUI.html":{},"classes/PhoenixMenuUI.html":{}}}],["this.scenemanager.objectvisibility(collectionobject",{"_index":1228,"title":{},"body":{"classes/DatGUIMenuUI.html":{},"classes/PhoenixMenuUI.html":{}}}],["this.scenemanager.objectvisibility(labelobject",{"_index":1276,"title":{},"body":{"classes/DatGUIMenuUI.html":{},"classes/PhoenixMenuUI.html":{}}}],["this.scenemanager.objectvisibility(object",{"_index":1175,"title":{},"body":{"classes/DatGUIMenuUI.html":{},"classes/PhoenixMenuUI.html":{}}}],["this.scenemanager.removegeometry(object",{"_index":1198,"title":{},"body":{"classes/DatGUIMenuUI.html":{},"classes/PhoenixMenuUI.html":{}}}],["this.scenemanager.scaleobject",{"_index":1871,"title":{},"body":{"classes/PhoenixMenuUI.html":{}}}],["this.scenemanager.scaleobject(object",{"_index":1179,"title":{},"body":{"classes/DatGUIMenuUI.html":{}}}],["this.scenemanager.setgeometryopacity",{"_index":1869,"title":{},"body":{"classes/PhoenixMenuUI.html":{}}}],["this.scenemanager.setgeometryopacity(object",{"_index":1171,"title":{},"body":{"classes/DatGUIMenuUI.html":{},"classes/PhoenixMenuUI.html":{}}}],["this.scenemanager.wireframegeometries(value",{"_index":1151,"title":{},"body":{"classes/DatGUIMenuUI.html":{},"classes/PhoenixMenuUI.html":{}}}],["this.scenemanager.wireframeobjects",{"_index":1928,"title":{},"body":{"classes/PhoenixMenuUI.html":{}}}],["this.selectedcolorbyoption",{"_index":803,"title":{},"body":{"classes/ColorOptions.html":{}}}],["this.selectedobject",{"_index":2308,"title":{},"body":{"classes/SelectionManager.html":{}}}],["this.selectedobject.attributes.length",{"_index":2335,"title":{},"body":{"classes/SelectionManager.html":{}}}],["this.selectedobject.attributes.push",{"_index":2341,"title":{},"body":{"classes/SelectionManager.html":{}}}],["this.selectedobject.attributes.splice",{"_index":2334,"title":{},"body":{"classes/SelectionManager.html":{}}}],["this.selectedobject.name",{"_index":2332,"title":{},"body":{"classes/SelectionManager.html":{}}}],["this.sessioninit",{"_index":161,"title":{},"body":{"classes/ARManager.html":{},"classes/VRManager.html":{},"classes/XRManager.html":{}}}],["this.sessiontype",{"_index":3138,"title":{},"body":{"classes/XRManager.html":{}}}],["this.setattribute('color",{"_index":2545,"title":{},"body":{"classes/TracksMaterial.html":{},"classes/TracksMesh.html":{}}}],["this.setattribute('counter",{"_index":2546,"title":{},"body":{"classes/TracksMaterial.html":{},"classes/TracksMesh.html":{}}}],["this.setattribute('next",{"_index":2542,"title":{},"body":{"classes/TracksMaterial.html":{},"classes/TracksMesh.html":{}}}],["this.setattribute('position",{"_index":2540,"title":{},"body":{"classes/TracksMaterial.html":{},"classes/TracksMesh.html":{}}}],["this.setattribute('previous",{"_index":2541,"title":{},"body":{"classes/TracksMaterial.html":{},"classes/TracksMesh.html":{}}}],["this.setattribute('side",{"_index":2543,"title":{},"body":{"classes/TracksMaterial.html":{},"classes/TracksMesh.html":{}}}],["this.setattribute('track_id",{"_index":2544,"title":{},"body":{"classes/TracksMaterial.html":{},"classes/TracksMesh.html":{}}}],["this.setclippingenabled(true",{"_index":2456,"title":{},"body":{"classes/StateManager.html":{}}}],["this.setindex(this._attributes.index",{"_index":2547,"title":{},"body":{"classes/TracksMaterial.html":{},"classes/TracksMesh.html":{}}}],["this.setmainrenderer(renderer",{"_index":2150,"title":{},"body":{"classes/RendererManager.html":{}}}],["this.setupvrcontrols",{"_index":2816,"title":{},"body":{"classes/VRManager.html":{}}}],["this.setvalues(params",{"_index":2615,"title":{},"body":{"classes/TracksMaterial.html":{},"classes/TracksMesh.html":{}}}],["this.shouldcolorbycharge(objectuserdata",{"_index":817,"title":{},"body":{"classes/ColorOptions.html":{}}}],["this.side",{"_index":2489,"title":{},"body":{"classes/TracksMaterial.html":{},"classes/TracksMesh.html":{}}}],["this.startclippingangle.update(angle",{"_index":2465,"title":{},"body":{"classes/StateManager.html":{}}}],["this.startclippingangle.value",{"_index":2441,"title":{},"body":{"classes/StateManager.html":{}}}],["this.statemanager",{"_index":2965,"title":{},"body":{"interfaces/Window.html":{}}}],["this.three.eventdatadepthtest(value",{"_index":1212,"title":{},"body":{"classes/DatGUIMenuUI.html":{},"classes/PhoenixMenuUI.html":{}}}],["this.three.getcolormanager",{"_index":1906,"title":{},"body":{"classes/PhoenixMenuUI.html":{}}}],["this.three.getcolormanager().collectioncolor(collectionname",{"_index":1231,"title":{},"body":{"classes/DatGUIMenuUI.html":{}}}],["this.three.getcolormanager().collectioncolorrandom(collectionname",{"_index":1221,"title":{},"body":{"classes/DatGUIMenuUI.html":{}}}],["this.three.getobjectposition(name",{"_index":1181,"title":{},"body":{"classes/DatGUIMenuUI.html":{}}}],["this.togglestate",{"_index":1767,"title":{},"body":{"classes/PhoenixMenuNode.html":{}}}],["this.toload",{"_index":1674,"title":{},"body":{"classes/LoadingManager.html":{}}}],["this.toload.length",{"_index":1657,"title":{},"body":{"classes/LoadingManager.html":{}}}],["this.toload.push(id",{"_index":1652,"title":{},"body":{"classes/LoadingManager.html":{}}}],["this.toload.sort().join",{"_index":1659,"title":{},"body":{"classes/LoadingManager.html":{}}}],["this.track_id",{"_index":2491,"title":{},"body":{"classes/TracksMaterial.html":{},"classes/TracksMesh.html":{}}}],["this.type",{"_index":2485,"title":{},"body":{"classes/TracksMaterial.html":{},"classes/TracksMesh.html":{}}}],["this.ui",{"_index":2893,"title":{},"body":{"interfaces/Window.html":{}}}],["this.ui.addcollection(objecttype",{"_index":3059,"title":{},"body":{"interfaces/Window.html":{}}}],["this.ui.addeventdatafolder",{"_index":2948,"title":{},"body":{"interfaces/Window.html":{}}}],["this.ui.addeventdatatypefolder(objecttype",{"_index":3057,"title":{},"body":{"interfaces/Window.html":{}}}],["this.ui.addgeometry(geom",{"_index":3062,"title":{},"body":{"interfaces/Window.html":{}}}],["this.ui.addgeometry(object",{"_index":2981,"title":{},"body":{"interfaces/Window.html":{}}}],["this.ui.addlabel(labelid",{"_index":3115,"title":{},"body":{"interfaces/Window.html":{}}}],["this.ui.addlabelsfolder",{"_index":2949,"title":{},"body":{"interfaces/Window.html":{}}}],["this.ui.enablekeyboardcontrols",{"_index":3105,"title":{},"body":{"interfaces/Window.html":{}}}],["this.ui.init(configuration",{"_index":2899,"title":{},"body":{"interfaces/Window.html":{}}}],["this.ui.loadeventfolderphoenixmenustate",{"_index":2957,"title":{},"body":{"interfaces/Window.html":{}}}],["this.ui.removelabel(labelid",{"_index":3114,"title":{},"body":{"interfaces/Window.html":{}}}],["this.ui.updateui",{"_index":2902,"title":{},"body":{"interfaces/Window.html":{}}}],["this.uniforms.linewidth.value",{"_index":2611,"title":{},"body":{"classes/TracksMaterial.html":{},"classes/TracksMesh.html":{}}}],["this.uniforms.progress.value",{"_index":2614,"title":{},"body":{"classes/TracksMaterial.html":{},"classes/TracksMesh.html":{}}}],["this.uniforms.resolution.value",{"_index":2612,"title":{},"body":{"classes/TracksMaterial.html":{},"classes/TracksMesh.html":{}}}],["this.uniforms.resolution.value.copy(value",{"_index":2613,"title":{},"body":{"classes/TracksMaterial.html":{},"classes/TracksMesh.html":{}}}],["this.urloptions",{"_index":2681,"title":{},"body":{"classes/URLOptionsManager.html":{}}}],["this.urloptions.get('config",{"_index":2701,"title":{},"body":{"classes/URLOptionsManager.html":{}}}],["this.urloptions.get('embed",{"_index":2769,"title":{},"body":{"classes/URLOptionsManager.html":{}}}],["this.urloptions.get('file",{"_index":2690,"title":{},"body":{"classes/URLOptionsManager.html":{}}}],["this.urloptions.get('type",{"_index":2691,"title":{},"body":{"classes/URLOptionsManager.html":{}}}],["this.urloptions.get('type').tolowercase",{"_index":2698,"title":{},"body":{"classes/URLOptionsManager.html":{}}}],["this.urloptions.get(urloption",{"_index":2774,"title":{},"body":{"classes/URLOptionsManager.html":{}}}],["this.urloptionsmanager",{"_index":2904,"title":{},"body":{"interfaces/Window.html":{}}}],["this.urloptionsmanager.applyoptions",{"_index":2907,"title":{},"body":{"interfaces/Window.html":{}}}],["this.value",{"_index":215,"title":{},"body":{"classes/ActiveVariable.html":{}}}],["this.xractive",{"_index":3144,"title":{},"body":{"classes/XRManager.html":{}}}],["this.xrcamera",{"_index":3153,"title":{},"body":{"classes/XRManager.html":{}}}],["this.xrcamera.name",{"_index":3158,"title":{},"body":{"classes/XRManager.html":{}}}],["this.xrcamera.position",{"_index":3160,"title":{},"body":{"classes/XRManager.html":{}}}],["this.xrcamera.position.addscaledvector(direction",{"_index":2864,"title":{},"body":{"classes/VRManager.html":{}}}],["this.xrcamera?.getworlddirection(direction",{"_index":2862,"title":{},"body":{"classes/VRManager.html":{}}}],["thr",{"_index":3040,"title":{},"body":{"interfaces/Window.html":{}}}],["three",{"_index":136,"title":{},"body":{"classes/ARManager.html":{},"interfaces/AnimationPreset.html":{},"classes/CMSObjects.html":{},"classes/ColorManager.html":{},"classes/ColorOptions.html":{},"interfaces/Configuration.html":{},"classes/CoordinateHelper.html":{},"classes/DatGUIMenuUI.html":{},"classes/EffectsManager.html":{},"classes/ExportManager.html":{},"classes/Field.html":{},"classes/PhoenixMenuUI.html":{},"interfaces/PhoenixUI.html":{},"classes/RKHelper.html":{},"classes/RendererManager.html":{},"classes/RungeKutta.html":{},"classes/SelectionManager.html":{},"classes/State.html":{},"classes/StateManager.html":{},"classes/TracksMaterial.html":{},"classes/TracksMesh.html":{},"classes/VRManager.html":{},"interfaces/Window.html":{},"classes/XRManager.html":{},"dependencies.html":{}}}],["three,js",{"_index":2125,"title":{},"body":{"classes/RendererManager.html":{}}}],["three.getscenemanager",{"_index":1131,"title":{},"body":{"classes/DatGUIMenuUI.html":{},"classes/PhoenixMenuUI.html":{}}}],["three.js",{"_index":55,"title":{},"body":{"classes/ARManager.html":{},"interfaces/AnimationPreset.html":{},"classes/ColorManager.html":{},"classes/ColorOptions.html":{},"classes/DatGUIMenuUI.html":{},"classes/EffectsManager.html":{},"classes/PhoenixMenuUI.html":{},"classes/RendererManager.html":{},"classes/SelectionManager.html":{},"interfaces/Window.html":{},"changelog.html":{},"index.html":{}}}],["three/examples/jsm/exporters/gltfexporter",{"_index":1448,"title":{},"body":{"classes/ExportManager.html":{}}}],["three/examples/jsm/exporters/objexporter",{"_index":1446,"title":{},"body":{"classes/ExportManager.html":{}}}],["three/examples/jsm/postprocessing/effectcomposer",{"_index":1337,"title":{},"body":{"classes/EffectsManager.html":{}}}],["three/examples/jsm/postprocessing/outlinepass",{"_index":1341,"title":{},"body":{"classes/EffectsManager.html":{}}}],["three/examples/jsm/postprocessing/outlinepass.js",{"_index":2295,"title":{},"body":{"classes/SelectionManager.html":{}}}],["three/examples/jsm/postprocessing/pass",{"_index":1342,"title":{},"body":{"classes/EffectsManager.html":{}}}],["three/examples/jsm/postprocessing/renderpass",{"_index":1340,"title":{},"body":{"classes/EffectsManager.html":{}}}],["three/examples/jsm/webxr/xrcontrollermodelfactory",{"_index":2807,"title":{},"body":{"classes/VRManager.html":{}}}],["threejs",{"_index":932,"title":{},"body":{"classes/CoordinateHelper.html":{}}}],["threemanager",{"_index":1058,"title":{},"body":{"classes/DatGUIMenuUI.html":{},"interfaces/EventDataLoader.html":{},"classes/PhoenixMenuUI.html":{},"interfaces/Window.html":{},"coverage.html":{}}}],["threemanager(this.infologger",{"_index":2892,"title":{},"body":{"interfaces/Window.html":{}}}],["through",{"_index":282,"title":{},"body":{"interfaces/AnimationPreset.html":{},"classes/Field.html":{},"classes/PrettySymbols.html":{},"classes/RungeKutta.html":{},"classes/State.html":{},"classes/URLOptionsManager.html":{},"interfaces/Window.html":{},"changelog.html":{}}}],["throwing",{"_index":3349,"title":{},"body":{"changelog.html":{}}}],["thus",{"_index":2924,"title":{},"body":{"interfaces/Window.html":{}}}],["time",{"_index":228,"title":{},"body":{"interfaces/AnimationPreset.html":{},"interfaces/EventDataLoader.html":{},"interfaces/Window.html":{},"changelog.html":{}}}],["title",{"_index":3897,"title":{},"body":{"miscellaneous/variables.html":{}}}],["tmp1",{"_index":949,"title":{},"body":{"classes/CoordinateHelper.html":{}}}],["tmp2",{"_index":948,"title":{},"body":{"classes/CoordinateHelper.html":{}}}],["toggle",{"_index":1137,"title":{},"body":{"classes/DatGUIMenuUI.html":{},"classes/PhoenixMenuNode.html":{},"changelog.html":{}}}],["toggled",{"_index":3433,"title":{},"body":{"changelog.html":{}}}],["toggles",{"_index":1082,"title":{},"body":{"classes/DatGUIMenuUI.html":{},"classes/PhoenixMenuUI.html":{},"interfaces/PhoenixUI.html":{},"interfaces/Window.html":{}}}],["toggleselfanddescendants",{"_index":1695,"title":{},"body":{"classes/PhoenixMenuNode.html":{}}}],["toggleselfanddescendants(value",{"_index":1736,"title":{},"body":{"classes/PhoenixMenuNode.html":{}}}],["togglestate",{"_index":1686,"title":{},"body":{"classes/PhoenixMenuNode.html":{}}}],["toggling",{"_index":1699,"title":{},"body":{"classes/PhoenixMenuNode.html":{},"changelog.html":{}}}],["tojson",{"_index":3028,"title":{},"body":{"interfaces/Window.html":{}}}],["toload",{"_index":1621,"title":{},"body":{"classes/LoadingManager.html":{}}}],["top",{"_index":68,"title":{},"body":{"classes/ARManager.html":{},"classes/CMSObjects.html":{},"classes/DatGUIMenuUI.html":{}}}],["totalitems",{"_index":1667,"title":{},"body":{"classes/LoadingManager.html":{}}}],["totalprogress",{"_index":1663,"title":{},"body":{"classes/LoadingManager.html":{}}}],["touch",{"_index":2262,"title":{},"body":{"classes/SelectionManager.html":{}}}],["touchevent",{"_index":2359,"title":{},"body":{"classes/SelectionManager.html":{}}}],["towards",{"_index":2799,"title":{},"body":{"classes/VRManager.html":{}}}],["track",{"_index":341,"title":{},"body":{"interfaces/AnimationPreset.html":{},"classes/RKHelper.html":{},"classes/TracksMaterial.html":{},"classes/TracksMesh.html":{},"changelog.html":{}}}],["track.children[0",{"_index":509,"title":{},"body":{"interfaces/AnimationPreset.html":{}}}],["track.dparams",{"_index":2068,"title":{},"body":{"classes/RKHelper.html":{}}}],["track.pos",{"_index":2066,"title":{},"body":{"classes/RKHelper.html":{}}}],["track_id",{"_index":2480,"title":{},"body":{"classes/TracksMaterial.html":{},"classes/TracksMesh.html":{}}}],["trackcollection",{"_index":676,"title":{},"body":{"classes/ColorManager.html":{}}}],["trackcollection.children[trackindex].traverse((trackobject",{"_index":679,"title":{},"body":{"classes/ColorManager.html":{}}}],["trackcolor",{"_index":508,"title":{},"body":{"interfaces/AnimationPreset.html":{}}}],["tracking",{"_index":2814,"title":{},"body":{"classes/VRManager.html":{}}}],["trackmlloader",{"_index":3753,"title":{},"body":{"coverage.html":{}}}],["trackobject?.['material']?.color?.set(colorfortracksvertex",{"_index":680,"title":{},"body":{"classes/ColorManager.html":{}}}],["tracks",{"_index":337,"title":{},"body":{"interfaces/AnimationPreset.html":{},"classes/ColorManager.html":{},"classes/ColorOptions.html":{},"classes/DatGUIMenuUI.html":{},"classes/PhoenixMenuUI.html":{},"interfaces/PhoenixUI.html":{},"classes/RKHelper.html":{},"classes/TracksMaterial.html":{},"classes/TracksMesh.html":{},"changelog.html":{},"miscellaneous/variables.html":{}}}],["trackscollection",{"_index":2063,"title":{},"body":{"classes/RKHelper.html":{}}}],["trackscollections",{"_index":2062,"title":{},"body":{"classes/RKHelper.html":{}}}],["trackscollections[trackscollection",{"_index":2065,"title":{},"body":{"classes/RKHelper.html":{}}}],["trackscollectionsevent",{"_index":2056,"title":{},"body":{"classes/RKHelper.html":{}}}],["tracksmaterial",{"_index":2468,"title":{"classes/TracksMaterial.html":{}},"body":{"classes/TracksMaterial.html":{},"classes/TracksMesh.html":{},"coverage.html":{}}}],["tracksmesh",{"_index":251,"title":{"classes/TracksMesh.html":{}},"body":{"interfaces/AnimationPreset.html":{},"classes/TracksMaterial.html":{},"classes/TracksMesh.html":{},"coverage.html":{}}}],["transformations",{"_index":3527,"title":{},"body":{"changelog.html":{}}}],["transforming/changing",{"_index":1954,"title":{},"body":{"classes/PresetView.html":{}}}],["translation",{"_index":284,"title":{},"body":{"interfaces/AnimationPreset.html":{},"interfaces/Window.html":{}}}],["transparent",{"_index":170,"title":{},"body":{"classes/ARManager.html":{},"interfaces/AnimationPreset.html":{},"classes/CMSObjects.html":{},"changelog.html":{}}}],["traverse",{"_index":332,"title":{},"body":{"interfaces/AnimationPreset.html":{}}}],["traversed",{"_index":2279,"title":{},"body":{"classes/SelectionManager.html":{}}}],["tree",{"_index":1725,"title":{},"body":{"classes/PhoenixMenuNode.html":{}}}],["true",{"_index":59,"title":{},"body":{"classes/ARManager.html":{},"interfaces/AnimationPreset.html":{},"classes/CMSObjects.html":{},"classes/ColorOptions.html":{},"interfaces/Configuration.html":{},"classes/Cut.html":{},"classes/DatGUIMenuUI.html":{},"classes/EffectsManager.html":{},"classes/Field.html":{},"classes/PhoenixMenuNode.html":{},"classes/PhoenixMenuUI.html":{},"classes/RKHelper.html":{},"classes/RendererManager.html":{},"classes/RungeKutta.html":{},"classes/ScriptLoader.html":{},"classes/SelectionManager.html":{},"classes/State.html":{},"classes/TracksMaterial.html":{},"classes/TracksMesh.html":{},"classes/URLOptionsManager.html":{},"interfaces/Window.html":{},"classes/XRManager.html":{}}}],["truncate",{"_index":1696,"title":{},"body":{"classes/PhoenixMenuNode.html":{}}}],["try",{"_index":1521,"title":{},"body":{"classes/Field.html":{},"classes/RungeKutta.html":{},"classes/State.html":{},"classes/URLOptionsManager.html":{},"changelog.html":{},"miscellaneous/variables.html":{}}}],["trying",{"_index":3178,"title":{},"body":{"changelog.html":{}}}],["tryrungekuttastep",{"_index":1523,"title":{},"body":{"classes/Field.html":{},"classes/RungeKutta.html":{},"classes/State.html":{}}}],["tryrungekuttastep(state.stepsize",{"_index":1555,"title":{},"body":{"classes/Field.html":{},"classes/RungeKutta.html":{},"classes/State.html":{}}}],["tube",{"_index":3627,"title":{},"body":{"changelog.html":{}}}],["tubegeometry",{"_index":240,"title":{},"body":{"interfaces/AnimationPreset.html":{}}}],["tween",{"_index":236,"title":{},"body":{"interfaces/AnimationPreset.html":{},"interfaces/Window.html":{}}}],["tween(animationclipplane).to",{"_index":460,"title":{},"body":{"interfaces/AnimationPreset.html":{}}}],["tween(animationsphere).to",{"_index":404,"title":{},"body":{"interfaces/AnimationPreset.html":{}}}],["tween(eventobject.material).to",{"_index":357,"title":{},"body":{"interfaces/AnimationPreset.html":{}}}],["tween(particle.material",{"_index":496,"title":{},"body":{"interfaces/AnimationPreset.html":{}}}],["tween(particle.position",{"_index":499,"title":{},"body":{"interfaces/AnimationPreset.html":{}}}],["tween(this.activecamera.position).to",{"_index":273,"title":{},"body":{"interfaces/AnimationPreset.html":{}}}],["tween.easing(easing",{"_index":280,"title":{},"body":{"interfaces/AnimationPreset.html":{}}}],["tween.easing(easing.quartic.out).start",{"_index":433,"title":{},"body":{"interfaces/AnimationPreset.html":{}}}],["tween.js",{"_index":255,"title":{},"body":{"interfaces/AnimationPreset.html":{}}}],["tween.start",{"_index":462,"title":{},"body":{"interfaces/AnimationPreset.html":{}}}],["tweenduration",{"_index":285,"title":{},"body":{"interfaces/AnimationPreset.html":{},"interfaces/Window.html":{}}}],["tweenjs/tween.js",{"_index":239,"title":{},"body":{"interfaces/AnimationPreset.html":{},"dependencies.html":{}}}],["tweens",{"_index":432,"title":{},"body":{"interfaces/AnimationPreset.html":{}}}],["two",{"_index":472,"title":{},"body":{"interfaces/AnimationPreset.html":{},"classes/RendererManager.html":{}}}],["type",{"_index":53,"title":{},"body":{"classes/ARManager.html":{},"classes/ActiveVariable.html":{},"interfaces/AnimationPreset.html":{},"classes/CMSObjects.html":{},"classes/ColorManager.html":{},"classes/ColorOptions.html":{},"interfaces/Configuration.html":{},"classes/CoordinateHelper.html":{},"classes/Cut.html":{},"classes/DatGUIMenuUI.html":{},"classes/EffectsManager.html":{},"interfaces/EventDataLoader.html":{},"classes/ExportManager.html":{},"classes/Field.html":{},"classes/InfoLogger.html":{},"classes/LoadingManager.html":{},"classes/PhoenixMenuNode.html":{},"classes/PhoenixMenuUI.html":{},"interfaces/PhoenixUI.html":{},"classes/PresetView.html":{},"classes/PrettySymbols.html":{},"classes/RKHelper.html":{},"classes/RendererManager.html":{},"classes/RungeKutta.html":{},"classes/ScriptLoader.html":{},"classes/SelectionManager.html":{},"classes/State.html":{},"classes/StateManager.html":{},"classes/TracksMaterial.html":{},"classes/TracksMesh.html":{},"classes/URLOptionsManager.html":{},"classes/VRManager.html":{},"interfaces/Window.html":{},"classes/XRManager.html":{},"changelog.html":{},"coverage.html":{},"miscellaneous/enumerations.html":{},"miscellaneous/typealiases.html":{},"miscellaneous/variables.html":{}}}],["typealiases",{"_index":3831,"title":{"miscellaneous/typealiases.html":{}},"body":{}}],["typefolder",{"_index":1213,"title":{},"body":{"classes/DatGUIMenuUI.html":{},"classes/PhoenixMenuUI.html":{}}}],["typefolder.addchild",{"_index":1898,"title":{},"body":{"classes/PhoenixMenuUI.html":{}}}],["typefolder.addfolder(collectionname",{"_index":1225,"title":{},"body":{"classes/DatGUIMenuUI.html":{}}}],["typefolder.name",{"_index":1904,"title":{},"body":{"classes/PhoenixMenuUI.html":{}}}],["typename",{"_index":1087,"title":{},"body":{"classes/DatGUIMenuUI.html":{},"classes/PhoenixMenuUI.html":{},"interfaces/PhoenixUI.html":{}}}],["typeof",{"_index":270,"title":{},"body":{"interfaces/AnimationPreset.html":{},"classes/PhoenixMenuNode.html":{},"classes/SelectionManager.html":{},"classes/StateManager.html":{},"interfaces/Window.html":{}}}],["types",{"_index":1742,"title":{},"body":{"classes/PhoenixMenuNode.html":{},"changelog.html":{},"miscellaneous/variables.html":{}}}],["types.ts",{"_index":3836,"title":{},"body":{"miscellaneous/typealiases.html":{}}}],["types/three",{"_index":3328,"title":{},"body":{"changelog.html":{}}}],["typing",{"_index":3593,"title":{},"body":{"changelog.html":{}}}],["ui",{"_index":1036,"title":{},"body":{"classes/DatGUIMenuUI.html":{},"interfaces/EventDataLoader.html":{},"classes/PhoenixMenuUI.html":{},"interfaces/PhoenixUI.html":{},"classes/StateManager.html":{},"classes/URLOptionsManager.html":{},"interfaces/Window.html":{},"changelog.html":{},"miscellaneous/typealiases.html":{}}}],["ui.ts",{"_index":1034,"title":{},"body":{"classes/DatGUIMenuUI.html":{},"classes/PhoenixMenuUI.html":{},"interfaces/PhoenixUI.html":{},"coverage.html":{}}}],["ui.ts:109",{"_index":1090,"title":{},"body":{"classes/DatGUIMenuUI.html":{}}}],["ui.ts:11",{"_index":1948,"title":{},"body":{"interfaces/PhoenixUI.html":{}}}],["ui.ts:116",{"_index":1852,"title":{},"body":{"classes/PhoenixMenuUI.html":{}}}],["ui.ts:16",{"_index":1945,"title":{},"body":{"interfaces/PhoenixUI.html":{}}}],["ui.ts:175",{"_index":1849,"title":{},"body":{"classes/PhoenixMenuUI.html":{}}}],["ui.ts:187",{"_index":1115,"title":{},"body":{"classes/DatGUIMenuUI.html":{}}}],["ui.ts:19",{"_index":1074,"title":{},"body":{"classes/DatGUIMenuUI.html":{}}}],["ui.ts:200",{"_index":1081,"title":{},"body":{"classes/DatGUIMenuUI.html":{}}}],["ui.ts:201",{"_index":1850,"title":{},"body":{"classes/PhoenixMenuUI.html":{}}}],["ui.ts:21",{"_index":1065,"title":{},"body":{"classes/DatGUIMenuUI.html":{},"classes/PhoenixMenuUI.html":{}}}],["ui.ts:219",{"_index":1843,"title":{},"body":{"classes/PhoenixMenuUI.html":{}}}],["ui.ts:23",{"_index":1068,"title":{},"body":{"classes/DatGUIMenuUI.html":{},"classes/PhoenixMenuUI.html":{},"interfaces/PhoenixUI.html":{}}}],["ui.ts:230",{"_index":1086,"title":{},"body":{"classes/DatGUIMenuUI.html":{}}}],["ui.ts:25",{"_index":1841,"title":{},"body":{"classes/PhoenixMenuUI.html":{}}}],["ui.ts:254",{"_index":1077,"title":{},"body":{"classes/DatGUIMenuUI.html":{}}}],["ui.ts:27",{"_index":1842,"title":{},"body":{"classes/PhoenixMenuUI.html":{}}}],["ui.ts:273",{"_index":1845,"title":{},"body":{"classes/PhoenixMenuUI.html":{}}}],["ui.ts:28",{"_index":1944,"title":{},"body":{"interfaces/PhoenixUI.html":{}}}],["ui.ts:29",{"_index":1840,"title":{},"body":{"classes/PhoenixMenuUI.html":{}}}],["ui.ts:32",{"_index":1063,"title":{},"body":{"classes/DatGUIMenuUI.html":{}}}],["ui.ts:332",{"_index":1848,"title":{},"body":{"classes/PhoenixMenuUI.html":{}}}],["ui.ts:34",{"_index":1062,"title":{},"body":{"classes/DatGUIMenuUI.html":{},"interfaces/PhoenixUI.html":{}}}],["ui.ts:344",{"_index":1103,"title":{},"body":{"classes/DatGUIMenuUI.html":{}}}],["ui.ts:36",{"_index":1069,"title":{},"body":{"classes/DatGUIMenuUI.html":{}}}],["ui.ts:369",{"_index":1855,"title":{},"body":{"classes/PhoenixMenuUI.html":{}}}],["ui.ts:39",{"_index":1071,"title":{},"body":{"classes/DatGUIMenuUI.html":{}}}],["ui.ts:396",{"_index":1097,"title":{},"body":{"classes/DatGUIMenuUI.html":{}}}],["ui.ts:41",{"_index":1073,"title":{},"body":{"classes/DatGUIMenuUI.html":{}}}],["ui.ts:419",{"_index":1854,"title":{},"body":{"classes/PhoenixMenuUI.html":{}}}],["ui.ts:43",{"_index":1059,"title":{},"body":{"classes/DatGUIMenuUI.html":{},"interfaces/PhoenixUI.html":{}}}],["ui.ts:437",{"_index":1113,"title":{},"body":{"classes/DatGUIMenuUI.html":{}}}],["ui.ts:452",{"_index":1110,"title":{},"body":{"classes/DatGUIMenuUI.html":{}}}],["ui.ts:460",{"_index":1860,"title":{},"body":{"classes/PhoenixMenuUI.html":{}}}],["ui.ts:475",{"_index":1857,"title":{},"body":{"classes/PhoenixMenuUI.html":{}}}],["ui.ts:484",{"_index":1858,"title":{},"body":{"classes/PhoenixMenuUI.html":{}}}],["ui.ts:49",{"_index":1856,"title":{},"body":{"classes/PhoenixMenuUI.html":{}}}],["ui.ts:54",{"_index":1947,"title":{},"body":{"interfaces/PhoenixUI.html":{}}}],["ui.ts:61",{"_index":1946,"title":{},"body":{"interfaces/PhoenixUI.html":{}}}],["ui.ts:63",{"_index":1853,"title":{},"body":{"classes/PhoenixMenuUI.html":{}}}],["ui.ts:67",{"_index":1106,"title":{},"body":{"classes/DatGUIMenuUI.html":{}}}],["ui.ts:68",{"_index":1950,"title":{},"body":{"interfaces/PhoenixUI.html":{}}}],["ui.ts:75",{"_index":1949,"title":{},"body":{"interfaces/PhoenixUI.html":{}}}],["ui.ts:78",{"_index":1094,"title":{},"body":{"classes/DatGUIMenuUI.html":{}}}],["uiloop",{"_index":2901,"title":{},"body":{"interfaces/Window.html":{}}}],["uimanager",{"_index":1384,"title":{},"body":{"interfaces/EventDataLoader.html":{},"interfaces/Window.html":{},"coverage.html":{}}}],["uimanager(this.graphicslibrary",{"_index":2894,"title":{},"body":{"interfaces/Window.html":{}}}],["uimenu",{"_index":2764,"title":{},"body":{"classes/URLOptionsManager.html":{}}}],["uint32array(this.indices_array",{"_index":2522,"title":{},"body":{"classes/TracksMaterial.html":{},"classes/TracksMesh.html":{}}}],["undefined",{"_index":788,"title":{},"body":{"classes/ColorOptions.html":{},"classes/DatGUIMenuUI.html":{},"classes/LoadingManager.html":{},"classes/PhoenixMenuNode.html":{},"classes/PhoenixMenuUI.html":{},"classes/StateManager.html":{},"interfaces/Window.html":{},"classes/XRManager.html":{},"changelog.html":{}}}],["undefined/null",{"_index":1761,"title":{},"body":{"classes/PhoenixMenuNode.html":{}}}],["uniform",{"_index":2560,"title":{},"body":{"classes/TracksMaterial.html":{},"classes/TracksMesh.html":{}}}],["uniforms",{"_index":2604,"title":{},"body":{"classes/TracksMaterial.html":{},"classes/TracksMesh.html":{}}}],["unique",{"_index":1099,"title":{},"body":{"classes/DatGUIMenuUI.html":{},"interfaces/EventDataLoader.html":{},"classes/PhoenixMenuUI.html":{},"interfaces/PhoenixUI.html":{},"changelog.html":{}}}],["unit",{"_index":2391,"title":{},"body":{"classes/State.html":{},"classes/VRManager.html":{}}}],["unitc",{"_index":2381,"title":{},"body":{"classes/State.html":{}}}],["units",{"_index":1502,"title":{},"body":{"classes/Field.html":{},"classes/RungeKutta.html":{},"classes/State.html":{}}}],["unreal",{"_index":1296,"title":{},"body":{"classes/EffectsManager.html":{},"classes/SelectionManager.html":{}}}],["until",{"_index":1581,"title":{},"body":{"classes/Field.html":{},"classes/RKHelper.html":{},"classes/RungeKutta.html":{},"classes/State.html":{}}}],["up",{"_index":547,"title":{},"body":{"classes/CMSObjects.html":{},"classes/DatGUIMenuUI.html":{},"classes/PhoenixMenuUI.html":{},"interfaces/PhoenixUI.html":{},"classes/RendererManager.html":{},"classes/URLOptionsManager.html":{},"classes/VRManager.html":{},"interfaces/Window.html":{},"classes/XRManager.html":{},"changelog.html":{}}}],["update",{"_index":198,"title":{},"body":{"classes/ActiveVariable.html":{},"classes/Field.html":{},"classes/RungeKutta.html":{},"classes/State.html":{},"changelog.html":{}}}],["update(updatedvalue",{"_index":210,"title":{},"body":{"classes/ActiveVariable.html":{}}}],["updateanimationsphere",{"_index":407,"title":{},"body":{"interfaces/AnimationPreset.html":{}}}],["updateanimationsphere.containspoint",{"_index":416,"title":{},"body":{"interfaces/AnimationPreset.html":{}}}],["updateanimationsphere.containspoint(obj.position",{"_index":422,"title":{},"body":{"interfaces/AnimationPreset.html":{}}}],["updated",{"_index":150,"title":{},"body":{"classes/ARManager.html":{},"classes/ActiveVariable.html":{},"classes/VRManager.html":{},"classes/XRManager.html":{},"changelog.html":{}}}],["updatedcolorbyoption",{"_index":808,"title":{},"body":{"classes/ColorOptions.html":{}}}],["updatedvalue",{"_index":212,"title":{},"body":{"classes/ActiveVariable.html":{}}}],["updating",{"_index":209,"title":{},"body":{"classes/ActiveVariable.html":{},"interfaces/AnimationPreset.html":{}}}],["upgrade",{"_index":3339,"title":{},"body":{"changelog.html":{}}}],["upper",{"_index":1003,"title":{},"body":{"classes/Cut.html":{},"changelog.html":{}}}],["url",{"_index":866,"title":{},"body":{"interfaces/Configuration.html":{},"classes/PresetView.html":{},"classes/ScriptLoader.html":{},"classes/URLOptionsManager.html":{},"interfaces/Window.html":{},"changelog.html":{},"miscellaneous/variables.html":{}}}],["url.createobjecturl(blob",{"_index":3925,"title":{},"body":{"miscellaneous/variables.html":{}}}],["urloptions",{"_index":2631,"title":{},"body":{"classes/URLOptionsManager.html":{}}}],["urloptionsmanager",{"_index":2629,"title":{"classes/URLOptionsManager.html":{}},"body":{"classes/URLOptionsManager.html":{},"interfaces/Window.html":{},"coverage.html":{}}}],["urloptionsmanager(this",{"_index":2905,"title":{},"body":{"interfaces/Window.html":{}}}],["urloptionwithids",{"_index":2671,"title":{},"body":{"classes/URLOptionsManager.html":{}}}],["urlsearchparams",{"_index":2642,"title":{},"body":{"classes/URLOptionsManager.html":{}}}],["usage",{"_index":3236,"title":{},"body":{"changelog.html":{},"index.html":{}}}],["use",{"_index":84,"title":{},"body":{"classes/ARManager.html":{},"interfaces/AnimationPreset.html":{},"classes/VRManager.html":{},"interfaces/Window.html":{},"classes/XRManager.html":{},"changelog.html":{},"index.html":{},"miscellaneous/variables.html":{}}}],["used",{"_index":110,"title":{},"body":{"classes/ARManager.html":{},"classes/EffectsManager.html":{},"classes/InfoLogger.html":{},"classes/PresetView.html":{},"classes/RKHelper.html":{},"classes/RendererManager.html":{},"classes/SelectionManager.html":{},"classes/VRManager.html":{},"interfaces/Window.html":{},"classes/XRManager.html":{},"changelog.html":{},"index.html":{},"miscellaneous/typealiases.html":{}}}],["user",{"_index":3917,"title":{},"body":{"miscellaneous/variables.html":{}}}],["userdata",{"_index":823,"title":{},"body":{"classes/ColorOptions.html":{},"changelog.html":{}}}],["uses",{"_index":953,"title":{},"body":{"classes/CoordinateHelper.html":{},"classes/RKHelper.html":{},"index.html":{}}}],["using",{"_index":254,"title":{},"body":{"interfaces/AnimationPreset.html":{},"classes/Cut.html":{},"classes/Field.html":{},"classes/RKHelper.html":{},"classes/RungeKutta.html":{},"classes/State.html":{},"classes/URLOptionsManager.html":{},"interfaces/Window.html":{}}}],["uuid",{"_index":2274,"title":{},"body":{"classes/SelectionManager.html":{},"interfaces/Window.html":{},"changelog.html":{}}}],["v1",{"_index":962,"title":{},"body":{"classes/CoordinateHelper.html":{}}}],["v2",{"_index":963,"title":{},"body":{"classes/CoordinateHelper.html":{}}}],["v_color",{"_index":2556,"title":{},"body":{"classes/TracksMaterial.html":{},"classes/TracksMesh.html":{}}}],["v_counter",{"_index":2557,"title":{},"body":{"classes/TracksMaterial.html":{},"classes/TracksMesh.html":{}}}],["v_track_id",{"_index":2559,"title":{},"body":{"classes/TracksMaterial.html":{},"classes/TracksMesh.html":{}}}],["val",{"_index":1666,"title":{},"body":{"classes/LoadingManager.html":{},"classes/SelectionManager.html":{}}}],["val.pos.x",{"_index":2077,"title":{},"body":{"classes/RKHelper.html":{}}}],["val.pos.y",{"_index":2078,"title":{},"body":{"classes/RKHelper.html":{}}}],["val.pos.z",{"_index":2079,"title":{},"body":{"classes/RKHelper.html":{}}}],["valid",{"_index":1019,"title":{},"body":{"classes/Cut.html":{}}}],["value",{"_index":58,"title":{},"body":{"classes/ARManager.html":{},"classes/ActiveVariable.html":{},"interfaces/AnimationPreset.html":{},"classes/ColorManager.html":{},"classes/ColorOptions.html":{},"classes/Cut.html":{},"classes/DatGUIMenuUI.html":{},"classes/EffectsManager.html":{},"classes/InfoLogger.html":{},"classes/LoadingManager.html":{},"classes/PhoenixMenuNode.html":{},"classes/PhoenixMenuUI.html":{},"classes/PresetView.html":{},"classes/PrettySymbols.html":{},"classes/RKHelper.html":{},"classes/RendererManager.html":{},"classes/RungeKutta.html":{},"classes/ScriptLoader.html":{},"classes/SelectionManager.html":{},"classes/State.html":{},"classes/StateManager.html":{},"classes/TracksMaterial.html":{},"classes/TracksMesh.html":{},"classes/URLOptionsManager.html":{},"classes/VRManager.html":{},"interfaces/Window.html":{},"classes/XRManager.html":{},"changelog.html":{},"miscellaneous/enumerations.html":{},"miscellaneous/variables.html":{}}}],["values",{"_index":76,"title":{},"body":{"classes/ARManager.html":{},"classes/ColorManager.html":{},"classes/ColorOptions.html":{},"classes/PhoenixMenuNode.html":{},"interfaces/Window.html":{},"changelog.html":{}}}],["variable",{"_index":191,"title":{},"body":{"classes/ActiveVariable.html":{},"classes/SelectionManager.html":{},"classes/StateManager.html":{},"classes/URLOptionsManager.html":{},"interfaces/Window.html":{},"changelog.html":{},"coverage.html":{}}}],["variable.ts",{"_index":190,"title":{},"body":{"classes/ActiveVariable.html":{},"coverage.html":{},"miscellaneous/typealiases.html":{}}}],["variable.ts:12",{"_index":206,"title":{},"body":{"classes/ActiveVariable.html":{}}}],["variable.ts:17",{"_index":205,"title":{},"body":{"classes/ActiveVariable.html":{}}}],["variable.ts:23",{"_index":211,"title":{},"body":{"classes/ActiveVariable.html":{}}}],["variable.ts:32",{"_index":208,"title":{},"body":{"classes/ActiveVariable.html":{}}}],["variable.ts:7",{"_index":201,"title":{},"body":{"classes/ActiveVariable.html":{}}}],["variables",{"_index":3202,"title":{"miscellaneous/variables.html":{}},"body":{"changelog.html":{},"miscellaneous/variables.html":{}}}],["varying",{"_index":2555,"title":{},"body":{"classes/TracksMaterial.html":{},"classes/TracksMesh.html":{}}}],["vec2",{"_index":2561,"title":{},"body":{"classes/TracksMaterial.html":{},"classes/TracksMesh.html":{}}}],["vec2(resolution.x",{"_index":2565,"title":{},"body":{"classes/TracksMaterial.html":{},"classes/TracksMesh.html":{}}}],["vec3",{"_index":2552,"title":{},"body":{"classes/TracksMaterial.html":{},"classes/TracksMesh.html":{}}}],["vec4",{"_index":2571,"title":{},"body":{"classes/TracksMaterial.html":{},"classes/TracksMesh.html":{}}}],["vec4(next",{"_index":2577,"title":{},"body":{"classes/TracksMaterial.html":{},"classes/TracksMesh.html":{}}}],["vec4(position",{"_index":2573,"title":{},"body":{"classes/TracksMaterial.html":{},"classes/TracksMesh.html":{}}}],["vec4(previous",{"_index":2575,"title":{},"body":{"classes/TracksMaterial.html":{},"classes/TracksMesh.html":{}}}],["vec4(v_color",{"_index":2603,"title":{},"body":{"classes/TracksMaterial.html":{},"classes/TracksMesh.html":{}}}],["vector",{"_index":955,"title":{},"body":{"classes/CoordinateHelper.html":{},"classes/VRManager.html":{}}}],["vector.applyquaternion(coordinatehelper.atlasquaternion",{"_index":957,"title":{},"body":{"classes/CoordinateHelper.html":{}}}],["vector.setfromsphericalcoords(radius",{"_index":956,"title":{},"body":{"classes/CoordinateHelper.html":{}}}],["vector2",{"_index":1338,"title":{},"body":{"classes/EffectsManager.html":{},"classes/SelectionManager.html":{},"classes/TracksMaterial.html":{},"classes/TracksMesh.html":{}}}],["vector2(1",{"_index":2605,"title":{},"body":{"classes/TracksMaterial.html":{},"classes/TracksMesh.html":{}}}],["vector2(window.innerwidth",{"_index":1359,"title":{},"body":{"classes/EffectsManager.html":{}}}],["vector3",{"_index":242,"title":{},"body":{"interfaces/AnimationPreset.html":{},"classes/CoordinateHelper.html":{},"classes/Field.html":{},"classes/RKHelper.html":{},"classes/RungeKutta.html":{},"classes/State.html":{},"classes/TracksMaterial.html":{},"classes/TracksMesh.html":{},"classes/VRManager.html":{},"classes/XRManager.html":{}}}],["vector3().fromarray(hitposition",{"_index":417,"title":{},"body":{"interfaces/AnimationPreset.html":{}}}],["vector3(0",{"_index":386,"title":{},"body":{"interfaces/AnimationPreset.html":{},"classes/CoordinateHelper.html":{},"classes/State.html":{},"classes/VRManager.html":{},"classes/XRManager.html":{}}}],["version",{"_index":3184,"title":{},"body":{"changelog.html":{},"properties.html":{}}}],["versions",{"_index":3190,"title":{},"body":{"changelog.html":{}}}],["vertex",{"_index":455,"title":{},"body":{"interfaces/AnimationPreset.html":{},"classes/ColorManager.html":{},"classes/ColorOptions.html":{},"classes/TracksMaterial.html":{},"classes/TracksMesh.html":{},"changelog.html":{},"miscellaneous/enumerations.html":{}}}],["vertexshader",{"_index":2606,"title":{},"body":{"classes/TracksMaterial.html":{},"classes/TracksMesh.html":{}}}],["vertices",{"_index":453,"title":{},"body":{"interfaces/AnimationPreset.html":{},"classes/ColorManager.html":{},"changelog.html":{},"miscellaneous/variables.html":{}}}],["vertices.traverse((object",{"_index":669,"title":{},"body":{"classes/ColorManager.html":{}}}],["view",{"_index":869,"title":{},"body":{"interfaces/Configuration.html":{},"classes/PresetView.html":{},"classes/RendererManager.html":{},"interfaces/Window.html":{},"changelog.html":{},"miscellaneous/enumerations.html":{}}}],["view.model",{"_index":886,"title":{},"body":{"interfaces/Configuration.html":{}}}],["view.model.ts",{"_index":1952,"title":{},"body":{"classes/PresetView.html":{},"coverage.html":{},"miscellaneous/enumerations.html":{}}}],["view.model.ts:16",{"_index":1973,"title":{},"body":{"classes/PresetView.html":{}}}],["view.model.ts:18",{"_index":1967,"title":{},"body":{"classes/PresetView.html":{}}}],["view.model.ts:20",{"_index":1968,"title":{},"body":{"classes/PresetView.html":{}}}],["view.model.ts:22",{"_index":1974,"title":{},"body":{"classes/PresetView.html":{}}}],["view.model.ts:24",{"_index":1969,"title":{},"body":{"classes/PresetView.html":{}}}],["view.model.ts:26",{"_index":1972,"title":{},"body":{"classes/PresetView.html":{}}}],["view.model.ts:28",{"_index":1964,"title":{},"body":{"classes/PresetView.html":{}}}],["view.model.ts:59",{"_index":1975,"title":{},"body":{"classes/PresetView.html":{}}}],["views",{"_index":884,"title":{},"body":{"interfaces/Configuration.html":{},"classes/PresetView.html":{},"interfaces/Window.html":{}}}],["visibilitytoggle",{"_index":1270,"title":{},"body":{"classes/DatGUIMenuUI.html":{}}}],["visibilitytoggle.onchange((value",{"_index":1272,"title":{},"body":{"classes/DatGUIMenuUI.html":{}}}],["visible",{"_index":398,"title":{},"body":{"interfaces/AnimationPreset.html":{},"classes/DatGUIMenuUI.html":{},"classes/PhoenixMenuUI.html":{},"interfaces/Window.html":{}}}],["void",{"_index":112,"title":{},"body":{"classes/ARManager.html":{},"classes/ActiveVariable.html":{},"interfaces/AnimationPreset.html":{},"classes/ColorManager.html":{},"classes/ColorOptions.html":{},"classes/Cut.html":{},"classes/DatGUIMenuUI.html":{},"classes/EffectsManager.html":{},"interfaces/EventDataLoader.html":{},"classes/ExportManager.html":{},"classes/InfoLogger.html":{},"classes/LoadingManager.html":{},"classes/PhoenixMenuNode.html":{},"classes/PhoenixMenuUI.html":{},"interfaces/PhoenixUI.html":{},"classes/RKHelper.html":{},"classes/RendererManager.html":{},"classes/RungeKutta.html":{},"classes/SelectionManager.html":{},"classes/StateManager.html":{},"classes/TracksMaterial.html":{},"classes/TracksMesh.html":{},"classes/URLOptionsManager.html":{},"classes/VRManager.html":{},"interfaces/Window.html":{},"classes/XRManager.html":{},"miscellaneous/variables.html":{}}}],["volumes",{"_index":3263,"title":{},"body":{"changelog.html":{}}}],["vr",{"_index":2779,"title":{},"body":{"classes/VRManager.html":{},"interfaces/Window.html":{},"classes/XRManager.html":{},"changelog.html":{},"miscellaneous/enumerations.html":{}}}],["vrmanager",{"_index":2777,"title":{"classes/VRManager.html":{}},"body":{"classes/VRManager.html":{},"changelog.html":{},"coverage.html":{}}}],["wait",{"_index":2229,"title":{},"body":{"classes/ScriptLoader.html":{}}}],["want",{"_index":2374,"title":{},"body":{"classes/SelectionManager.html":{}}}],["warning",{"_index":2693,"title":{},"body":{"classes/URLOptionsManager.html":{}}}],["warnings",{"_index":3193,"title":{},"body":{"changelog.html":{}}}],["web",{"_index":3820,"title":{},"body":{"properties.html":{}}}],["webglrenderer",{"_index":99,"title":{},"body":{"classes/ARManager.html":{},"classes/EffectsManager.html":{},"classes/RendererManager.html":{},"classes/VRManager.html":{},"classes/XRManager.html":{}}}],["webglrenderers",{"_index":2117,"title":{},"body":{"classes/RendererManager.html":{}}}],["webpack",{"_index":3306,"title":{},"body":{"changelog.html":{}}}],["webxr",{"_index":145,"title":{},"body":{"classes/ARManager.html":{},"classes/VRManager.html":{},"classes/XRManager.html":{}}}],["well",{"_index":3275,"title":{},"body":{"changelog.html":{}}}],["whether",{"_index":61,"title":{},"body":{"classes/ARManager.html":{},"classes/ColorOptions.html":{},"interfaces/Configuration.html":{},"classes/EffectsManager.html":{},"classes/PresetView.html":{},"classes/StateManager.html":{},"classes/VRManager.html":{},"interfaces/Window.html":{},"classes/XRManager.html":{}}}],["whose",{"_index":192,"title":{},"body":{"classes/ActiveVariable.html":{},"classes/PhoenixMenuNode.html":{}}}],["widgets",{"_index":2645,"title":{},"body":{"classes/URLOptionsManager.html":{},"changelog.html":{}}}],["width",{"_index":2914,"title":{},"body":{"interfaces/Window.html":{},"changelog.html":{}}}],["window",{"_index":2689,"title":{"interfaces/Window.html":{}},"body":{"classes/URLOptionsManager.html":{},"interfaces/Window.html":{},"changelog.html":{},"coverage.html":{}}}],["window.addeventlistener('resize",{"_index":2172,"title":{},"body":{"classes/RendererManager.html":{}}}],["window.eventdisplay",{"_index":3075,"title":{},"body":{"interfaces/Window.html":{}}}],["window.innerheight",{"_index":1360,"title":{},"body":{"classes/EffectsManager.html":{},"classes/RendererManager.html":{}}}],["window.innerwidth",{"_index":2164,"title":{},"body":{"classes/RendererManager.html":{}}}],["window.location.href.substr(window.location.href.lastindexof",{"_index":2682,"title":{},"body":{"classes/URLOptionsManager.html":{}}}],["wireframe",{"_index":1136,"title":{},"body":{"classes/DatGUIMenuUI.html":{},"classes/PhoenixMenuUI.html":{},"changelog.html":{}}}],["wireframegeometriesmenu",{"_index":1148,"title":{},"body":{"classes/DatGUIMenuUI.html":{}}}],["wireframegeometriesmenu.onchange((value",{"_index":1150,"title":{},"body":{"classes/DatGUIMenuUI.html":{}}}],["wireframing",{"_index":1147,"title":{},"body":{"classes/DatGUIMenuUI.html":{},"changelog.html":{}}}],["within",{"_index":911,"title":{},"body":{"classes/CoordinateHelper.html":{},"classes/Cut.html":{}}}],["without",{"_index":338,"title":{},"body":{"interfaces/AnimationPreset.html":{},"classes/EffectsManager.html":{},"changelog.html":{},"index.html":{}}}],["work",{"_index":147,"title":{},"body":{"classes/ARManager.html":{},"classes/VRManager.html":{},"classes/XRManager.html":{}}}],["workaround",{"_index":350,"title":{},"body":{"interfaces/AnimationPreset.html":{},"changelog.html":{}}}],["working",{"_index":3343,"title":{},"body":{"changelog.html":{}}}],["works",{"_index":124,"title":{},"body":{"classes/ARManager.html":{},"classes/VRManager.html":{},"classes/XRManager.html":{}}}],["wrapper",{"_index":872,"title":{},"body":{"interfaces/Configuration.html":{},"classes/DatGUIMenuUI.html":{},"classes/PhoenixMenuUI.html":{},"classes/RendererManager.html":{}}}],["wrong",{"_index":3506,"title":{},"body":{"changelog.html":{}}}],["x",{"_index":274,"title":{},"body":{"interfaces/AnimationPreset.html":{},"classes/CoordinateHelper.html":{},"classes/DatGUIMenuUI.html":{}}}],["x,y,z",{"_index":870,"title":{},"body":{"interfaces/Configuration.html":{}}}],["xml",{"_index":2661,"title":{},"body":{"classes/URLOptionsManager.html":{},"changelog.html":{}}}],["xr",{"_index":89,"title":{},"body":{"classes/ARManager.html":{},"classes/VRManager.html":{},"interfaces/Window.html":{},"classes/XRManager.html":{},"changelog.html":{},"miscellaneous/enumerations.html":{}}}],["xr_camera",{"_index":3159,"title":{},"body":{"classes/XRManager.html":{}}}],["xractive",{"_index":31,"title":{},"body":{"classes/ARManager.html":{},"classes/VRManager.html":{},"classes/XRManager.html":{}}}],["xrcamera",{"_index":32,"title":{},"body":{"classes/ARManager.html":{},"classes/VRManager.html":{},"classes/XRManager.html":{}}}],["xrcontrollermodelfactory",{"_index":2806,"title":{},"body":{"classes/VRManager.html":{}}}],["xrmanager",{"_index":15,"title":{"classes/XRManager.html":{}},"body":{"classes/ARManager.html":{},"classes/VRManager.html":{},"classes/XRManager.html":{},"changelog.html":{},"coverage.html":{}}}],["xrmanager:109",{"_index":123,"title":{},"body":{"classes/ARManager.html":{},"classes/VRManager.html":{}}}],["xrmanager:135",{"_index":129,"title":{},"body":{"classes/ARManager.html":{},"classes/VRManager.html":{}}}],["xrmanager:26",{"_index":108,"title":{},"body":{"classes/ARManager.html":{},"classes/VRManager.html":{}}}],["xrmanager:28",{"_index":102,"title":{},"body":{"classes/ARManager.html":{},"classes/VRManager.html":{}}}],["xrmanager:30",{"_index":100,"title":{},"body":{"classes/ARManager.html":{},"classes/VRManager.html":{}}}],["xrmanager:32",{"_index":91,"title":{},"body":{"classes/ARManager.html":{},"classes/VRManager.html":{}}}],["xrmanager:34",{"_index":95,"title":{},"body":{"classes/ARManager.html":{},"classes/VRManager.html":{}}}],["xrmanager:36",{"_index":87,"title":{},"body":{"classes/ARManager.html":{},"classes/VRManager.html":{}}}],["xrmanager:38",{"_index":109,"title":{},"body":{"classes/ARManager.html":{},"classes/VRManager.html":{}}}],["xrmanager:48",{"_index":2803,"title":{},"body":{"classes/VRManager.html":{}}}],["xrmanager:50",{"_index":114,"title":{},"body":{"classes/ARManager.html":{}}}],["xrmanager:53",{"_index":132,"title":{},"body":{"classes/ARManager.html":{}}}],["xrmanager:61",{"_index":2800,"title":{},"body":{"classes/VRManager.html":{}}}],["xrmanager:64",{"_index":111,"title":{},"body":{"classes/ARManager.html":{}}}],["xrmanager:78",{"_index":2804,"title":{},"body":{"classes/VRManager.html":{}}}],["xrmanager:99",{"_index":119,"title":{},"body":{"classes/ARManager.html":{},"classes/VRManager.html":{}}}],["xrsessioninit",{"_index":3325,"title":{},"body":{"changelog.html":{}}}],["xrsessiontype",{"_index":138,"title":{},"body":{"classes/ARManager.html":{},"classes/VRManager.html":{},"interfaces/Window.html":{},"classes/XRManager.html":{},"miscellaneous/enumerations.html":{}}}],["xrsessiontype.vr",{"_index":3139,"title":{},"body":{"classes/XRManager.html":{}}}],["xrtype",{"_index":3137,"title":{},"body":{"classes/XRManager.html":{}}}],["y",{"_index":276,"title":{},"body":{"interfaces/AnimationPreset.html":{},"classes/CoordinateHelper.html":{},"classes/DatGUIMenuUI.html":{}}}],["yarn",{"_index":3192,"title":{},"body":{"changelog.html":{},"index.html":{}}}],["yes",{"_index":126,"title":{},"body":{"classes/ARManager.html":{},"classes/ActiveVariable.html":{},"classes/ColorOptions.html":{},"classes/DatGUIMenuUI.html":{},"classes/InfoLogger.html":{},"classes/PhoenixMenuNode.html":{},"classes/PhoenixMenuUI.html":{},"interfaces/PhoenixUI.html":{},"classes/ScriptLoader.html":{},"classes/URLOptionsManager.html":{},"classes/VRManager.html":{},"classes/XRManager.html":{}}}],["z",{"_index":278,"title":{},"body":{"interfaces/AnimationPreset.html":{},"classes/CoordinateHelper.html":{},"classes/DatGUIMenuUI.html":{}}}],["z0",{"_index":2073,"title":{},"body":{"classes/RKHelper.html":{}}}],["zero",{"_index":3681,"title":{},"body":{"changelog.html":{}}}],["zip",{"_index":2666,"title":{},"body":{"classes/URLOptionsManager.html":{},"miscellaneous/variables.html":{}}}],["zoom",{"_index":3043,"title":{},"body":{"interfaces/Window.html":{},"changelog.html":{}}}],["zoomfactor",{"_index":3048,"title":{},"body":{"interfaces/Window.html":{}}}],["zoomtime",{"_index":3049,"title":{},"body":{"interfaces/Window.html":{}}}],["zoomto(zoomfactor",{"_index":3051,"title":{},"body":{"interfaces/Window.html":{}}}]],"pipeline":["stemmer"]}, + "store": {"classes/ARManager.html":{"url":"classes/ARManager.html","title":"class - ARManager","body":"\n \n\n\n\n\n\n\n\n\n\n\n\n\n\n Classes\n ARManager\n\n\n\n \n Info\n \n \n Source\n \n\n\n\n \n \n File\n \n \n src/managers/three-manager/xr/ar-manager.ts\n \n\n\n \n Description\n \n \n AR manager for AR related operations.\n\n \n\n \n Extends\n \n \n XRManager\n \n\n\n\n \n Index\n \n \n \n \n Properties\n \n \n \n \n \n \n Static\n enableDomOverlay\n \n \n Private\n previousValues\n \n \n Static\n Readonly\n SESSION_TYPE\n \n \n Public\n cameraGroup\n \n \n Protected\n currentXRSession\n \n \n Protected\n onSessionEnded\n \n \n Protected\n renderer\n \n \n Protected\n sessionInit\n \n \n Protected\n xrActive\n \n \n Public\n xrCamera\n \n \n \n \n\n \n \n Methods\n \n \n \n \n \n \n Protected\n onXRSessionEnded\n \n \n Protected\n Async\n onXRSessionStarted\n \n \n Private\n scaleScene\n \n \n Public\n endXRSession\n \n \n Public\n getCameraGroup\n \n \n Public\n getXRCamera\n \n \n Public\n setXRSession\n \n \n \n \n\n\n\n\n\n \n \n\n\n \n Constructor\n \n \n \n \nconstructor(scene: Scene, camera: PerspectiveCamera)\n \n \n \n \n Defined in src/managers/three-manager/xr/ar-manager.ts:22\n \n \n\n \n \n Create the AR manager.\n\n \n Parameters :\n \n \n \n Name\n Type\n Optional\n Description\n \n \n \n \n scene\n \n \n Scene\n \n \n \n No\n \n \n \n The three.js scene.\n\n \n \n \n camera\n \n \n PerspectiveCamera\n \n \n \n No\n \n \n \n Camera in the scene.\n\n \n \n \n \n \n \n \n \n \n\n\n \n \n \n Properties\n \n \n \n \n \n \n \n Static\n enableDomOverlay\n \n \n \n \n \n \n Type : boolean\n\n \n \n \n \n Default value : true\n \n \n \n \n Defined in src/managers/three-manager/xr/ar-manager.ts:17\n \n \n\n \n \n Whether to enable DOM overlay which shows Phoenix overlays on top of the AR scene.\n\n \n \n\n \n \n \n \n \n \n \n \n Private\n previousValues\n \n \n \n \n \n \n Type : object\n\n \n \n \n \n Default value : {\n sceneScale: 1,\n cameraNear: 10,\n }\n \n \n \n \n Defined in src/managers/three-manager/xr/ar-manager.ts:19\n \n \n\n \n \n Previous values of scene scale, camera near and camera position.\n\n \n \n\n \n \n \n \n \n \n \n \n Static\n Readonly\n SESSION_TYPE\n \n \n \n \n \n \n Type : string\n\n \n \n \n \n Default value : 'immersive-ar'\n \n \n \n \n Defined in src/managers/three-manager/xr/ar-manager.ts:15\n \n \n\n \n \n Session type to use for AR.\n\n \n \n\n \n \n \n \n \n \n \n \n Public\n cameraGroup\n \n \n \n \n \n \n Type : Group\n\n \n \n \n \n Inherited from XRManager\n\n \n \n \n \n Defined in XRManager:36\n\n \n \n\n \n \n Group containing the the camera for XR.\n\n \n \n\n \n \n \n \n \n \n \n \n Protected\n currentXRSession\n \n \n \n \n \n \n Type : any\n\n \n \n \n \n Default value : null\n \n \n \n \n Inherited from XRManager\n\n \n \n \n \n Defined in XRManager:32\n\n \n \n\n \n \n Currently active XR session.\n\n \n \n\n \n \n \n \n \n \n \n \n Protected\n onSessionEnded\n \n \n \n \n \n \n Type : function\n\n \n \n \n \n Inherited from XRManager\n\n \n \n \n \n Defined in XRManager:34\n\n \n \n\n \n \n Callback to call when the XR session ends.\n\n \n \n\n \n \n \n \n \n \n \n \n Protected\n renderer\n \n \n \n \n \n \n Type : WebGLRenderer\n\n \n \n \n \n Inherited from XRManager\n\n \n \n \n \n Defined in XRManager:30\n\n \n \n\n \n \n Renderer to set the XR session for.\n\n \n \n\n \n \n \n \n \n \n \n \n Protected\n sessionInit\n \n \n \n \n \n \n Type : function\n\n \n \n \n \n Inherited from XRManager\n\n \n \n \n \n Defined in XRManager:28\n\n \n \n\n \n \n Returns required and optional features when requesting an XR session.\n\n \n \n\n \n \n \n \n \n \n \n \n Protected\n xrActive\n \n \n \n \n \n \n Type : boolean\n\n \n \n \n \n Default value : false\n \n \n \n \n Inherited from XRManager\n\n \n \n \n \n Defined in XRManager:26\n\n \n \n\n \n \n Whether the XR is currently active or not.\n\n \n \n\n \n \n \n \n \n \n \n \n Public\n xrCamera\n \n \n \n \n \n \n Type : Camera\n\n \n \n \n \n Inherited from XRManager\n\n \n \n \n \n Defined in XRManager:38\n\n \n \n\n \n \n The camera used by XR.\n\n \n \n\n \n \n\n\n \n \n \n Methods\n \n \n \n \n \n \n \n Protected\n onXRSessionEnded\n \n \n \n \n \n \n \n onXRSessionEnded()\n \n \n\n\n \n \n Inherited from XRManager\n\n \n \n \n \n Defined in XRManager:64\n\n \n \n\n\n \n \n Callback when the AR session ends.\n\n\n \n Returns : void\n\n \n \n \n \n \n \n \n \n \n \n \n Protected\n Async\n onXRSessionStarted\n \n \n \n \n \n \n \n onXRSessionStarted(session: any)\n \n \n\n\n \n \n Inherited from XRManager\n\n \n \n \n \n Defined in XRManager:50\n\n \n \n\n\n \n \n Callback for when the AR session is started.\n\n\n \n Parameters :\n \n \n \n \n Name\n Type\n Optional\n Description\n \n \n \n \n session\n \n any\n \n\n \n No\n \n\n\n \n The AR session.\n\n \n \n \n \n \n \n \n \n Returns : any\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n Private\n scaleScene\n \n \n \n \n \n \n \n scaleScene(scale: number)\n \n \n\n\n \n \n Defined in src/managers/three-manager/xr/ar-manager.ts:75\n \n \n\n\n \n \n Scale the three.js scene.\n\n\n \n Parameters :\n \n \n \n \n Name\n Type\n Optional\n Description\n \n \n \n \n scale\n \n number\n \n\n \n No\n \n\n\n \n Number to scale the scene to.\n\n \n \n \n \n \n \n \n \n Returns : void\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n Public\n endXRSession\n \n \n \n \n \n \n \n endXRSession()\n \n \n\n\n \n \n Inherited from XRManager\n\n \n \n \n \n Defined in XRManager:99\n\n \n \n\n\n \n \n End the current XR session.\n\n\n \n Returns : void\n\n \n \n \n \n \n \n \n \n \n \n \n Public\n getCameraGroup\n \n \n \n \n \n \n \n getCameraGroup(camera?: Camera)\n \n \n\n\n \n \n Inherited from XRManager\n\n \n \n \n \n Defined in XRManager:109\n\n \n \n\n\n \n \n Get the group containing the camera for XR.\nXR camera works by adding a Group with Camera to the scene.\n\n\n \n Parameters :\n \n \n \n \n Name\n Type\n Optional\n Description\n \n \n \n \n camera\n \n Camera\n \n\n \n Yes\n \n\n\n \n Camera which is to be cloned for XR use.\n\n \n \n \n \n \n \n \n \n Returns : Group\n\n \n \n The camera group used in XR mode.\n\n \n \n \n \n \n \n \n \n \n \n \n Public\n getXRCamera\n \n \n \n \n \n \n \n getXRCamera()\n \n \n\n\n \n \n Inherited from XRManager\n\n \n \n \n \n Defined in XRManager:135\n\n \n \n\n\n \n \n Get the camera used by XR.\n\n\n \n \n \n Returns : Camera\n\n \n \n The camera used by XR.\n\n \n \n \n \n \n \n \n \n \n \n \n Public\n setXRSession\n \n \n \n \n \n \n \n setXRSession(renderer: WebGLRenderer, onSessionStarted?: () => void, onSessionEnded?: () => void)\n \n \n\n\n \n \n Inherited from XRManager\n\n \n \n \n \n Defined in XRManager:53\n\n \n \n\n\n \n \n Set and configure the XR session.\n\n\n \n Parameters :\n \n \n \n \n Name\n Type\n Optional\n Description\n \n \n \n \n renderer\n \n WebGLRenderer\n \n\n \n No\n \n\n\n \n Renderer to set the XR session for.\n\n \n \n \n onSessionStarted\n \n function\n \n\n \n Yes\n \n\n\n \n Callback to call when the XR session starts.\n\n \n \n \n onSessionEnded\n \n function\n \n\n \n Yes\n \n\n\n \n Callback to call when the XR session ends.\n\n \n \n \n \n \n \n \n \n Returns : void\n\n \n \n \n \n \n \n \n \n\n\n\n\n\n\n \n\n\n \n import { PerspectiveCamera, Scene } from 'three';\nimport { SceneManager } from '../scene-manager';\nimport { XRManager, XRSessionType } from './xr-manager';\n\n// NOTE: This was created on 28/06/2021\n// It might become outdated given how WebXR is still a work in progress\n\n// LAST UPDATED ON 07/07/2021\n\n/**\n * AR manager for AR related operations.\n */\nexport class ARManager extends XRManager {\n /** Session type to use for AR. */\n static readonly SESSION_TYPE: string = 'immersive-ar';\n /** Whether to enable DOM overlay which shows Phoenix overlays on top of the AR scene. */\n public static enableDomOverlay: boolean = true;\n /** Previous values of scene scale, camera near and camera position. */\n private previousValues = {\n sceneScale: 1,\n cameraNear: 10,\n };\n\n /**\n * Create the AR manager.\n * @param scene The three.js scene.\n * @param camera Camera in the scene.\n * @override\n */\n constructor(private scene: Scene, private camera: PerspectiveCamera) {\n super(XRSessionType.AR);\n\n this.previousValues.sceneScale = scene.scale.x;\n this.previousValues.cameraNear = camera.near;\n this.sessionInit = () => {\n return ARManager.enableDomOverlay\n ? {\n optionalFeatures: ['dom-overlay'],\n domOverlay: { root: document.body },\n }\n : {};\n };\n }\n\n /**\n * Callback for when the AR session is started.\n * @param session The AR session.\n * @override\n */\n protected async onXRSessionStarted(session: any) {\n document.body.style.setProperty('background-color', 'transparent');\n this.previousValues.sceneScale = this.scene.scale.x;\n this.previousValues.cameraNear = this.camera.near;\n this.scaleScene(0.00001);\n this.camera.near = 0.01;\n this.renderer.xr.setReferenceSpaceType('local');\n await super.onXRSessionStarted(session);\n }\n\n /**\n * Callback when the AR session ends.\n * @override\n */\n protected onXRSessionEnded() {\n document.body.style.removeProperty('background-color');\n this.scaleScene(this.previousValues.sceneScale);\n this.camera.near = this.previousValues.cameraNear;\n super.onXRSessionEnded();\n }\n\n /**\n * Scale the three.js scene.\n * @param scale Number to scale the scene to.\n */\n private scaleScene(scale: number) {\n [\n SceneManager.EVENT_DATA_ID,\n SceneManager.GEOMETRIES_ID,\n SceneManager.LABELS_ID,\n ].forEach((groupName) => {\n this.scene.getObjectByName(groupName)?.scale.setScalar(scale);\n });\n }\n}\n\n \n\n\n\n\n\n\n\n\n\n\n \n \n results matching \"\"\n \n \n \n No results matching \"\"\n \n\n"},"classes/ActiveVariable.html":{"url":"classes/ActiveVariable.html","title":"class - ActiveVariable","body":"\n \n\n\n\n\n\n\n\n\n\n\n\n\n\n Classes\n ActiveVariable\n\n\n\n \n Info\n \n \n Source\n \n\n\n\n \n \n File\n \n \n src/helpers/active-variable.ts\n \n\n\n \n Description\n \n \n An active variable whose value can be changed and the change can be observed.\n\n \n\n\n\n\n \n Index\n \n \n \n \n Properties\n \n \n \n \n \n \n Private\n callbacks\n \n \n Public\n Optional\n value\n \n \n \n \n\n \n \n Methods\n \n \n \n \n \n \n Public\n onUpdate\n \n \n Public\n update\n \n \n \n \n\n\n\n\n\n \n \n\n\n \n Constructor\n \n \n \n \nconstructor(value?: T)\n \n \n \n \n Defined in src/helpers/active-variable.ts:7\n \n \n\n \n \n Create the observable active variable.\n\n \n Parameters :\n \n \n \n Name\n Type\n Optional\n Description\n \n \n \n \n value\n \n \n T\n \n \n \n Yes\n \n \n \n Initial value.\n\n \n \n \n \n \n \n \n \n \n\n\n \n \n \n Properties\n \n \n \n \n \n \n \n Private\n callbacks\n \n \n \n \n \n \n Type : CallbackFunction[]\n\n \n \n \n \n Default value : []\n \n \n \n \n Defined in src/helpers/active-variable.ts:17\n \n \n\n \n \n Callbacks to call on update.\n\n \n \n\n \n \n \n \n \n \n \n \n Public\n Optional\n value\n \n \n \n \n \n \n Type : T\n\n \n \n \n \n Defined in src/helpers/active-variable.ts:12\n \n \n\n \n \n Initial value.\n \n \n\n \n \n\n\n \n \n \n Methods\n \n \n \n \n \n \n \n Public\n onUpdate\n \n \n \n \n \n \n \n onUpdate(callback: CallbackFunction)\n \n \n\n\n \n \n Defined in src/helpers/active-variable.ts:32\n \n \n\n\n \n \n Call a function on updating the value of variable.\n\n\n \n Parameters :\n \n \n \n \n Name\n Type\n Optional\n Description\n \n \n \n \n callback\n \n CallbackFunction\n \n\n \n No\n \n\n\n \n Callback to call with updated value when the variable is updated.\n\n \n \n \n \n \n \n \n \n Returns : void\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n Public\n update\n \n \n \n \n \n \n \n update(updatedValue: T)\n \n \n\n\n \n \n Defined in src/helpers/active-variable.ts:23\n \n \n\n\n \n \n Update the value of variable.\n\n\n \n Parameters :\n \n \n \n \n Name\n Type\n Optional\n Description\n \n \n \n \n updatedValue\n \n T\n \n\n \n No\n \n\n\n \n New updated value.\n\n \n \n \n \n \n \n \n \n Returns : void\n\n \n \n \n \n \n \n \n \n\n\n\n\n\n\n \n\n\n \n export type CallbackFunction = (updatedValue: T) => void;\n\n/**\n * An active variable whose value can be changed and the change can be observed.\n */\nexport class ActiveVariable {\n /**\n * Create the observable active variable.\n * @param value Initial value.\n */\n constructor(public value?: T) {}\n\n /**\n * Callbacks to call on update.\n */\n private callbacks: CallbackFunction[] = [];\n\n /**\n * Update the value of variable.\n * @param updatedValue New updated value.\n */\n public update(updatedValue: T) {\n this.value = updatedValue;\n this.callbacks.forEach((callback) => callback(updatedValue));\n }\n\n /**\n * Call a function on updating the value of variable.\n * @param callback Callback to call with updated value when the variable is updated.\n */\n public onUpdate(callback: CallbackFunction) {\n this.callbacks.push(callback);\n }\n}\n\n \n\n\n\n\n\n\n\n\n\n\n \n \n results matching \"\"\n \n \n \n No results matching \"\"\n \n\n"},"interfaces/AnimationPreset.html":{"url":"interfaces/AnimationPreset.html","title":"interface - AnimationPreset","body":"\n \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n Interfaces\n \n AnimationPreset\n\n\n\n \n Info\n \n \n Source\n \n\n\n\n \n \n File\n \n \n src/managers/three-manager/animations-manager.ts\n \n\n\n \n Description\n \n \n Type for animation preset.\n\n \n\n\n \n Index\n \n \n \n \n Properties\n \n \n \n \n \n \n Optional\n \n animateEventAfterInterval\n \n \n \n Optional\n \n collisionDuration\n \n \n \n \n name\n \n \n \n \n positions\n \n \n \n \n \n \n \n \n\n\n\n \n Properties\n \n \n \n \n \n animateEventAfterInterval\n \n \n \n \n \n \n \n \n animateEventAfterInterval: number\n\n \n \n\n\n \n \n Type : number\n\n \n \n\n \n \n Optional\n \n \n\n\n\n\n \n \n Time after which to start the event collision animation.\n\n \n \n \n \n \n \n \n \n \n collisionDuration\n \n \n \n \n \n \n \n \n collisionDuration: number\n\n \n \n\n\n \n \n Type : number\n\n \n \n\n \n \n Optional\n \n \n\n\n\n\n \n \n Duration of the event collision.\n\n \n \n \n \n \n \n \n \n \n name\n \n \n \n \n \n \n \n \n name: string\n\n \n \n\n\n \n \n Type : string\n\n \n \n\n\n\n\n\n \n \n Name of the Animation\n\n \n \n \n \n \n \n \n \n \n positions\n \n \n \n \n \n \n \n \n positions: literal type[]\n\n \n \n\n\n \n \n Type : literal type[]\n\n \n \n\n\n\n\n\n \n \n Positions with duration and easing of each tween forming a path.\n\n \n \n \n \n \n \n\n\n \n import { Easing, Tween } from '@tweenjs/tween.js';\nimport {\n TubeGeometry,\n BufferGeometry,\n Vector3,\n Color,\n MeshBasicMaterial,\n Mesh,\n SphereGeometry,\n Sphere,\n Object3D,\n BufferAttribute,\n Scene,\n Camera,\n Plane,\n Group,\n} from 'three';\nimport { SceneManager } from './scene-manager';\nimport { RendererManager } from './renderer-manager';\nimport { TracksMesh } from '../../loaders/objects/tracks';\n\n/** Type for animation preset. */\nexport interface AnimationPreset {\n /** Positions with duration and easing of each tween forming a path. */\n positions: { position: number[]; duration: number; easing?: any }[];\n /** Time after which to start the event collision animation. */\n animateEventAfterInterval?: number;\n /** Duration of the event collision. */\n collisionDuration?: number;\n /** Name of the Animation */\n name: string;\n}\n\n/**\n * Manager for managing animation related operations using three.js and tween.js.\n */\nexport class AnimationsManager {\n /**\n * Constructor for the animation manager.\n * @param scene Three.js scene containing all the objects and event data.\n * @param activeCamera Currently active camera.\n * @param rendererManager Manager for managing event display's renderer related functions.\n */\n constructor(\n private scene: Scene,\n private activeCamera: Camera,\n private rendererManager: RendererManager\n ) {\n this.animateEvent = this.animateEvent.bind(this);\n this.animateEventWithClipping = this.animateEventWithClipping.bind(this);\n }\n\n /**\n * Get the camera tween for animating camera to a position.\n * @param pos End position of the camera tween.\n * @param duration Duration of the tween.\n * @param easing Animation easing of the tween if any.\n * @returns Tween object of the camera animation.\n */\n public getCameraTween(\n pos: number[],\n duration: number = 1000,\n easing?: typeof Easing.Linear.None\n ) {\n const tween = new Tween(this.activeCamera.position).to(\n { x: pos[0], y: pos[1], z: pos[2] },\n duration\n );\n\n if (easing) {\n tween.easing(easing);\n }\n\n return tween;\n }\n\n /**\n * Animate the camera through the event scene.\n * @param startPos Start position of the translation animation.\n * @param tweenDuration Duration of each tween in the translation animation.\n * @param onAnimationEnd Callback when the last animation ends.\n */\n public animateThroughEvent(\n startPos: number[],\n tweenDuration: number,\n onAnimationEnd?: () => void\n ) {\n // Move to start\n const start = this.getCameraTween(startPos, 1000, Easing.Cubic.Out);\n // Move to position along the detector axis\n const alongAxisPosition = [0, 0, startPos[2]];\n const startXAxis = this.getCameraTween(alongAxisPosition, tweenDuration);\n\n const radius = 500;\n const numOfSteps = 24;\n const angle = 3 * Math.PI;\n const step = angle / numOfSteps;\n\n const rotationPositions = [];\n for (let i = 1; i onAnimationEnd?.());\n startClone.delay(500);\n\n start.chain(startXAxis);\n startXAxis.chain(rotateStart);\n rotate.chain(end);\n end.chain(startClone);\n\n start.start();\n }\n\n /**\n * Animate the propagation and generation of event data.\n * @param tweenDuration Duration of the animation tween.\n * @param onEnd Callback when all animations have ended.\n * @param onAnimationStart Callback when the first animation starts.\n */\n public animateEvent(\n tweenDuration: number,\n onEnd?: () => void,\n onAnimationStart?: () => void\n ) {\n const extraAnimationSphereDuration = tweenDuration * 0.25;\n tweenDuration *= 0.75;\n\n const eventData = this.scene.getObjectByName(SceneManager.EVENT_DATA_ID);\n\n const animationSphere = new Sphere(new Vector3(), 0);\n const objectsToAnimateWithSphere: {\n eventObject: Object3D;\n position: any;\n }[] = [];\n\n const allTweens = [];\n // Traverse over all event data\n eventData.traverse((eventObject: any) => {\n if (eventObject.geometry) {\n // Animation for extrapolating tracks without changing scale\n if (eventObject.name === 'Track' || eventObject.name === 'LineHit') {\n // Check if geometry drawRange count exists\n let geometryPosCount =\n eventObject.geometry?.attributes?.position?.count;\n if (geometryPosCount) {\n // WORKAROUND\n // Changing position count for TubeGeometry because\n // what we get is not the actual and it has Infinity drawRange count\n if (eventObject.geometry instanceof TubeGeometry) {\n geometryPosCount *= 6;\n }\n\n if (eventObject.geometry instanceof TracksMesh) {\n eventObject.material.progress = 0;\n const eventObjectTween = new Tween(eventObject.material).to(\n {\n progress: 1,\n },\n tweenDuration\n );\n eventObjectTween.onComplete(() => {\n eventObject.material.progress = 1;\n });\n allTweens.push(eventObjectTween);\n } else if (eventObject.geometry instanceof BufferGeometry) {\n const oldDrawRangeCount = eventObject.geometry.drawRange.count;\n eventObject.geometry.setDrawRange(0, 0);\n const eventObjectTween = new Tween(\n eventObject.geometry.drawRange\n ).to(\n {\n count: geometryPosCount,\n },\n tweenDuration\n );\n eventObjectTween.onComplete(() => {\n eventObject.geometry.drawRange.count = oldDrawRangeCount;\n });\n allTweens.push(eventObjectTween);\n }\n }\n }\n // Animation for scaling out objects with or without position\n else if (eventObject.name === 'Jet') {\n const scaleTween = new Tween({\n x: 0.01,\n y: 0.01,\n z: 0.01,\n }).to(\n {\n x: eventObject.scale.x,\n y: eventObject.scale.y,\n z: eventObject.scale.z,\n },\n tweenDuration\n );\n // Manually updating scale since we need to change position\n scaleTween.onUpdate((updatedScale: Vector3) => {\n const previousScale = eventObject.scale.x;\n eventObject.scale.setScalar(updatedScale.x);\n // Restoring to original position and then moving again with the current value\n eventObject.position\n .divideScalar(previousScale)\n .multiplyScalar(updatedScale.x);\n });\n allTweens.push(scaleTween);\n } else {\n const hasPosition = !eventObject.position.equals(\n new Vector3(0, 0, 0)\n );\n let position = hasPosition\n ? eventObject.position\n : eventObject.geometry.boundingSphere.center;\n\n // Edit geometry for hits\n if (eventObject.name === 'Hit') {\n position = Array.from(\n eventObject.geometry.attributes['position'].array\n );\n eventObject.geometry.deleteAttribute('position');\n eventObject.geometry.computeBoundingSphere();\n } else {\n // Making the object invisible and will make visible\n // once the animation sphere reaches the object\n eventObject.visible = false;\n }\n\n objectsToAnimateWithSphere.push({\n eventObject: eventObject,\n position: position,\n });\n }\n }\n });\n\n // Tween for the animation sphere\n const animationSphereTween = new Tween(animationSphere).to(\n { radius: 3000 },\n tweenDuration\n );\n\n const onAnimationSphereUpdate = (updateAnimationSphere: Sphere) => {\n objectsToAnimateWithSphere.forEach((obj) => {\n if (obj.eventObject.name === 'Hit') {\n const geometry = (obj.eventObject as any).geometry;\n\n const hitsPositions = this.getHitsPositions(obj.position);\n const reachedHits = hitsPositions.filter((hitPosition) =>\n updateAnimationSphere.containsPoint(\n new Vector3().fromArray(hitPosition)\n )\n );\n\n if (reachedHits.length > 0) {\n geometry.setAttribute(\n 'position',\n new BufferAttribute(\n new Float32Array([].concat(...reachedHits)),\n 3\n )\n );\n geometry.computeBoundingSphere();\n }\n } else if (updateAnimationSphere.containsPoint(obj.position)) {\n obj.eventObject.visible = true;\n }\n });\n };\n\n animationSphereTween.onUpdate(onAnimationSphereUpdate);\n\n // Animation sphere tween after covering the tracks\n const animationSphereTweenClone = new Tween(animationSphere).to(\n { radius: 10000 },\n extraAnimationSphereDuration\n );\n animationSphereTweenClone.onUpdate(onAnimationSphereUpdate);\n\n animationSphereTween.chain(animationSphereTweenClone);\n\n allTweens.push(animationSphereTween);\n\n // Call onAnimationStart when the first tween starts\n allTweens[0].onStart(() => onAnimationStart?.());\n\n // Start all tweens\n for (const tween of allTweens) {\n tween.easing(Easing.Quartic.Out).start();\n }\n\n // Call onEnd when the last tween completes\n animationSphereTweenClone.onComplete(() => {\n // Restore all remaining event data items\n onAnimationSphereUpdate(new Sphere(new Vector3(), Infinity));\n onEnd?.();\n });\n }\n\n /**\n * Animate the propagation and generation of event data using clipping planes.\n * @param tweenDuration Duration of the animation tween.\n * @param onEnd Function to call when all animations have ended.\n * @param onAnimationStart Callback when the first animation starts.\n * @param clippingConstant Constant for the clipping planes for distance from the origin.\n */\n public animateEventWithClipping(\n tweenDuration: number,\n onEnd?: () => void,\n onAnimationStart?: () => void,\n clippingConstant: number = 11000\n ) {\n const allEventData = this.scene.getObjectByName(SceneManager.EVENT_DATA_ID);\n\n // Sphere to get spherical set of clipping planes from\n const sphere = new SphereGeometry(1, 8, 8);\n // Clipping planes for animation\n const animationClipPlanes: Plane[] = [];\n\n // Get clipping planes from the vertices of sphere\n const position = sphere.attributes.position;\n const vertex = new Vector3();\n for (let i = 0; i {\n if (eventObject.geometry && eventObject.material) {\n eventObject.material.clippingPlanes = animationClipPlanes;\n }\n });\n\n const allTweens = [];\n // Create tweens for the animation clipping planes\n for (const animationClipPlane of animationClipPlanes) {\n animationClipPlane.constant = 0;\n const tween = new Tween(animationClipPlane).to(\n { constant: clippingConstant },\n tweenDuration\n );\n allTweens.push(tween);\n }\n\n allTweens[0].onStart(() => onAnimationStart?.());\n\n // Start all the tweens\n for (const tween of allTweens) {\n tween.start();\n }\n\n allTweens[allTweens.length - 1].onComplete(() => {\n // Revert local clipping of the renderer\n if (!prevLocalClipping) {\n this.rendererManager.getMainRenderer().localClippingEnabled =\n prevLocalClipping /* false */;\n }\n // Remove the applied clipping planes from the event data objects\n allEventData.traverse((eventObject: any) => {\n if (eventObject.geometry && eventObject.material) {\n eventObject.material.clippingPlanes = null;\n }\n });\n onEnd?.();\n });\n }\n\n /**\n * Animate the collision of two particles.\n * @param tweenDuration Duration of the particle collision animation tween.\n * @param particleSize Size of the particles.\n * @param distanceFromOrigin Distance of the particles (along z-axes) from the origin.\n * @param particleColor Color of the particles.\n * @param onEnd Callback to call when the particle collision ends.\n */\n public collideParticles(\n tweenDuration: number,\n particleSize: number = 10,\n distanceFromOrigin: number = 5000,\n particleColor: Color = new Color(0xffffff),\n onEnd?: () => void\n ) {\n const particleGeometry = new SphereGeometry(particleSize, 32, 32);\n const particleMaterial = new MeshBasicMaterial({\n color: particleColor,\n transparent: true,\n opacity: 0,\n });\n\n const particle1 = new Mesh(particleGeometry, particleMaterial);\n const particle2 = particle1.clone() as Mesh;\n\n particle1.position.setZ(distanceFromOrigin);\n particle2.position.setZ(-distanceFromOrigin);\n\n const particles = [particle1, particle2];\n\n this.scene.add(...particles);\n\n const particleTweens = [];\n\n for (const particle of particles) {\n new Tween(particle.material)\n .to(\n {\n opacity: 1,\n },\n 300\n )\n .start();\n\n const particleToOrigin = new Tween(particle.position)\n .to(\n {\n z: 0,\n },\n tweenDuration\n )\n .start();\n\n particleTweens.push(particleToOrigin);\n }\n\n particleTweens[0].onComplete(() => {\n this.scene.remove(...particles);\n onEnd?.();\n });\n }\n\n /**\n * Animate the propagation and generation of event data with particle collison.\n * @param animationFunction Animation function to call after collision.\n * @param tweenDuration Duration of the animation tween.\n * @param onEnd Function to call when all animations have ended.\n */\n public animateWithCollision(\n animationFunction: (\n tweenDuration: number,\n onEnd?: () => void,\n onAnimationStart?: () => void\n ) => void,\n tweenDuration: number,\n onEnd?: () => void\n ) {\n const allEventData = this.scene.getObjectByName(SceneManager.EVENT_DATA_ID);\n\n // Get the color of the first track to use for colliding particles\n const track = allEventData.getObjectByName('Track');\n let trackColor: Color;\n if (track instanceof Group) {\n trackColor = (track.children[0] as any)?.material?.color;\n } else {\n trackColor = (track as any)?.material.color;\n }\n\n // Hide event data to show particles collision\n if (allEventData) {\n allEventData.visible = false;\n }\n\n this.collideParticles(1500, 30, 5000, trackColor, () => {\n animationFunction(tweenDuration, onEnd, () => {\n if (allEventData) {\n allEventData.visible = true;\n }\n });\n });\n }\n\n /**\n * Animate the propagation and generation of event data with particle collison.\n * @param tweenDuration Duration of the animation tween.\n * @param onEnd Function to call when all animations have ended.\n */\n public animateEventWithCollision(tweenDuration: number, onEnd?: () => void) {\n this.animateWithCollision(this.animateEvent, tweenDuration, onEnd);\n }\n\n /**\n * Animate the propagation and generation of event data\n * using clipping planes after particle collison.\n * @param tweenDuration Duration of the animation tween.\n * @param onEnd Function to call when all animations have ended.\n */\n public animateClippingWithCollision(\n tweenDuration: number,\n onEnd?: () => void\n ) {\n this.animateWithCollision(\n this.animateEventWithClipping,\n tweenDuration,\n onEnd\n );\n }\n\n /**\n * Get the positions of hits in a multidimensional array\n * from a single dimensional array.\n * @param positions Positions of hits in a single dimensional array.\n * @returns Positions of hits in a multidimensional array.\n */\n private getHitsPositions(positions: number[]): number[][] {\n const hitsPositions: number[][] = [];\n for (let i = 0; i void) {\n const { positions, animateEventAfterInterval, collisionDuration } =\n animationPreset;\n\n if (animateEventAfterInterval && collisionDuration) {\n // Will be made visible after collision animation ends.\n this.scene.getObjectByName(SceneManager.EVENT_DATA_ID).visible = false;\n setTimeout(() => {\n this.animateEventWithCollision(collisionDuration);\n }, animateEventAfterInterval);\n }\n\n const firstTween = this.getCameraTween(\n positions[0].position,\n positions[0].duration ?? 2000,\n positions[0].easing\n );\n\n let previousTween = firstTween;\n positions.slice(1).forEach(({ position, duration, easing }) => {\n const tween = this.getCameraTween(position, duration ?? 2000, easing);\n previousTween.chain(tween);\n previousTween = tween;\n });\n previousTween.onComplete(onEnd);\n\n firstTween.start();\n }\n}\n\n \n\n\n\n\n\n\n\n\n\n \n \n results matching \"\"\n \n \n \n No results matching \"\"\n \n\n"},"classes/CMSObjects.html":{"url":"classes/CMSObjects.html","title":"class - CMSObjects","body":"\n \n\n\n\n\n\n\n\n\n\n\n\n\n\n Classes\n CMSObjects\n\n\n\n \n Info\n \n \n Source\n \n\n\n\n \n \n File\n \n \n src/loaders/objects/cms-objects.ts\n \n\n\n \n Description\n \n \n Physics objects that make up an event in CMS that are not a part of PhoenixObjects.\n\n \n\n\n\n\n \n Index\n \n \n\n \n \n Methods\n \n \n \n \n \n \n Static\n getMuonChamber\n \n \n \n \n\n\n\n\n\n \n \n\n\n\n\n \n \n \n Methods\n \n \n \n \n \n \n \n Static\n getMuonChamber\n \n \n \n \n \n \n \n getMuonChamber(muonChamberParams: any)\n \n \n\n\n \n \n Defined in src/loaders/objects/cms-objects.ts:25\n \n \n\n\n \n \n Process the Muon Chamber from the given parameters.\nand get it as a geometry.\n\n\n \n Parameters :\n \n \n \n \n Name\n Type\n Optional\n Description\n \n \n \n \n muonChamberParams\n \n any\n \n\n \n No\n \n\n\n \n Parameters of the Muon Chamber.\n\n \n \n \n \n \n \n \n \n Returns : Object3D\n\n \n \n Muon Chamber object.\n\n \n \n \n \n \n\n\n\n\n\n\n \n\n\n \n import {\n Object3D,\n Group,\n Mesh,\n MeshBasicMaterial,\n EdgesGeometry,\n LineBasicMaterial,\n DoubleSide,\n LineSegments,\n BufferGeometry,\n BufferAttribute,\n} from 'three';\nimport { EVENT_DATA_TYPE_COLORS } from '../../helpers/constants';\n\n/**\n * Physics objects that make up an event in CMS that are not a part of {@link PhoenixObjects}.\n */\nexport class CMSObjects {\n /**\n * Process the Muon Chamber from the given parameters.\n * and get it as a geometry.\n * @param muonChamberParams Parameters of the Muon Chamber.\n * @returns Muon Chamber object.\n */\n public static getMuonChamber(muonChamberParams: any): Object3D {\n let allFacePositions: number[] = [];\n\n const addFace3 = (...faces: string[]) => {\n allFacePositions = allFacePositions.concat(\n ...faces.map((face) => muonChamberParams[face])\n );\n };\n\n // front\n addFace3('front_1', 'front_2', 'front_3');\n addFace3('front_3', 'front_4', 'front_1');\n\n // back\n addFace3('back_1', 'back_2', 'back_3');\n addFace3('back_3', 'back_4', 'back_1');\n\n // top\n addFace3('back_1', 'back_2', 'front_2');\n addFace3('front_2', 'front_1', 'back_1');\n\n // bottom\n addFace3('back_4', 'back_3', 'front_3');\n addFace3('front_3', 'front_4', 'back_4');\n\n // left\n addFace3('front_1', 'front_4', 'back_4');\n addFace3('back_4', 'back_1', 'front_1');\n\n // right\n addFace3('front_2', 'back_2', 'back_3');\n addFace3('back_3', 'front_3', 'front_2');\n\n const boxBuffer = new BufferGeometry();\n boxBuffer.attributes.position = new BufferAttribute(\n new Float32Array(allFacePositions),\n 3\n );\n boxBuffer.computeVertexNormals();\n\n const boxObject = new Mesh(\n boxBuffer,\n new MeshBasicMaterial({\n color: muonChamberParams.color ?? EVENT_DATA_TYPE_COLORS.MuonChambers,\n transparent: true,\n opacity: 0.1,\n side: DoubleSide,\n })\n );\n\n boxObject.userData = Object.assign({}, muonChamberParams);\n boxObject.name = 'MuonChamber';\n\n // These are the lines along the box edges\n\n const boxEdges = new EdgesGeometry(boxBuffer);\n const lineBoxObject = new LineSegments(\n boxEdges,\n new LineBasicMaterial({\n color: 0xffffff,\n transparent: true,\n opacity: 0.7,\n })\n );\n\n const muonChamber = new Group();\n muonChamber.add(boxObject);\n muonChamber.add(lineBoxObject);\n\n muonChamberParams.uuid = boxObject.uuid;\n\n return muonChamber;\n }\n}\n\n \n\n\n\n\n\n\n\n\n\n\n \n \n results matching \"\"\n \n \n \n No results matching \"\"\n \n\n"},"classes/ColorManager.html":{"url":"classes/ColorManager.html","title":"class - ColorManager","body":"\n \n\n\n\n\n\n\n\n\n\n\n\n\n\n Classes\n ColorManager\n\n\n\n \n Info\n \n \n Source\n \n\n\n\n \n \n File\n \n \n src/managers/three-manager/color-manager.ts\n \n\n\n \n Description\n \n \n Color manager for three.js functions related to coloring of objects.\n\n \n\n\n\n\n \n Index\n \n \n\n \n \n Methods\n \n \n \n \n \n \n Public\n collectionColor\n \n \n Public\n collectionColorRandom\n \n \n colorObjectsByProperty\n \n \n Public\n colorTracksByVertex\n \n \n \n \n\n\n\n\n\n \n \n\n\n \n Constructor\n \n \n \n \nconstructor(sceneManager: SceneManager)\n \n \n \n \n Defined in src/managers/three-manager/color-manager.ts:7\n \n \n\n \n \n Create the coloring manager.\n\n \n Parameters :\n \n \n \n Name\n Type\n Optional\n Description\n \n \n \n \n sceneManager\n \n \n SceneManager\n \n \n \n No\n \n \n \n The scene manager responsible for managing the three.js scene.\n\n \n \n \n \n \n \n \n \n \n\n\n\n \n \n \n Methods\n \n \n \n \n \n \n \n Public\n collectionColor\n \n \n \n \n \n \n \n collectionColor(collectionName: string, color: any)\n \n \n\n\n \n \n Defined in src/managers/three-manager/color-manager.ts:38\n \n \n\n\n \n \n Changes the color of all objects inside an event data collection.\n\n\n \n Parameters :\n \n \n \n \n Name\n Type\n Optional\n Description\n \n \n \n \n collectionName\n \n string\n \n\n \n No\n \n\n\n \n Name of the collection.\n\n \n \n \n color\n \n any\n \n\n \n No\n \n\n\n \n Hex value representing the color.\n\n \n \n \n \n \n \n \n \n Returns : void\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n Public\n collectionColorRandom\n \n \n \n \n \n \n \n collectionColorRandom(collectionName: string)\n \n \n\n\n \n \n Defined in src/managers/three-manager/color-manager.ts:55\n \n \n\n\n \n \n Changes the color of all objects inside an event data collection to some random color.\n\n\n \n Parameters :\n \n \n \n \n Name\n Type\n Optional\n Description\n \n \n \n \n collectionName\n \n string\n \n\n \n No\n \n\n\n \n Name of the collection.\n\n \n \n \n \n \n \n \n \n Returns : void\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n colorObjectsByProperty\n \n \n \n \n \n \ncolorObjectsByProperty(color: any, objectsGroup: string, customCheck: (objectUserData: any) => void)\n \n \n\n\n \n \n Defined in src/managers/three-manager/color-manager.ts:20\n \n \n\n\n \n \n Color objects by a property's value or range.\n\n\n \n Parameters :\n \n \n \n \n Name\n Type\n Optional\n Description\n \n \n \n \n color\n \n any\n \n\n \n No\n \n\n\n \n Color to set for the object.\n\n \n \n \n objectsGroup\n \n string\n \n\n \n No\n \n\n\n \n Name of the object(s) group to color.\n\n \n \n \n customCheck\n \n function\n \n\n \n No\n \n\n\n \n Function to custom check values against object params.\n\n \n \n \n \n \n \n \n \n Returns : void\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n Public\n colorTracksByVertex\n \n \n \n \n \n \n \n colorTracksByVertex(collectionName: string)\n \n \n\n\n \n \n Defined in src/managers/three-manager/color-manager.ts:72\n \n \n\n\n \n \n Randomly color tracks by the vertex they are associated with.\n\n\n \n Parameters :\n \n \n \n \n Name\n Type\n Optional\n Description\n \n \n \n \n collectionName\n \n string\n \n\n \n No\n \n\n\n \n Name of the collection.\n\n \n \n \n \n \n \n \n \n Returns : void\n\n \n \n \n \n \n \n \n \n\n\n\n\n\n\n \n\n\n \n import { Color, MeshPhongMaterial } from 'three';\nimport { SceneManager } from './scene-manager';\n\n/**\n * Color manager for three.js functions related to coloring of objects.\n */\nexport class ColorManager {\n /**\n * Create the coloring manager.\n * @param sceneManager The scene manager responsible for managing the three.js scene.\n */\n constructor(private sceneManager: SceneManager) {}\n\n /**\n * Color objects by a property's value or range.\n * @param color Color to set for the object.\n * @param objectsGroup Name of the object(s) group to color.\n * @param customCheck Function to custom check values against object params.\n */\n colorObjectsByProperty(\n color: any,\n objectsGroup: string,\n customCheck: (objectUserData: any) => boolean\n ) {\n const objects = this.sceneManager.getScene().getObjectByName(objectsGroup);\n objects.traverse((object: any) => {\n if (object.material?.color && customCheck(object.userData)) {\n object.material.color.set(color);\n }\n });\n }\n\n /**\n * Changes the color of all objects inside an event data collection.\n * @param collectionName Name of the collection.\n * @param color Hex value representing the color.\n */\n public collectionColor(collectionName: string, color: any) {\n const collection = this.sceneManager\n .getScene()\n .getObjectByName(SceneManager.EVENT_DATA_ID)\n .getObjectByName(collectionName);\n\n for (const child of Object.values(collection.children)) {\n child.traverse((object) => {\n (object['material']?.color as Color)?.set(color);\n });\n }\n }\n\n /**\n * Changes the color of all objects inside an event data collection to some random color.\n * @param collectionName Name of the collection.\n */\n public collectionColorRandom(collectionName: string) {\n const collection = this.sceneManager\n .getScene()\n .getObjectByName(SceneManager.EVENT_DATA_ID)\n .getObjectByName(collectionName);\n\n for (const child of Object.values(collection.children)) {\n child.traverse((object) => {\n (object['material']?.color as Color)?.set(Math.random() * 0xffffff);\n });\n }\n }\n\n /**\n * Randomly color tracks by the vertex they are associated with.\n * @param collectionName Name of the collection.\n */\n public colorTracksByVertex(collectionName: string) {\n const scene = this.sceneManager.getScene();\n const vertices = scene.getObjectByName('Vertices');\n vertices.traverse((object) => {\n const { linkedTrackCollection, linkedTracks } = object.userData;\n\n if (\n object.name === 'Vertex' &&\n linkedTrackCollection === collectionName &&\n linkedTracks\n ) {\n const colorForTracksVertex = (object['material'] as MeshPhongMaterial)\n .color;\n const trackCollection = scene.getObjectByName(linkedTrackCollection);\n\n linkedTracks.forEach((trackIndex: number) => {\n trackCollection.children[trackIndex].traverse((trackObject) => {\n trackObject?.['material']?.color?.set(colorForTracksVertex);\n });\n });\n }\n });\n }\n}\n\n \n\n\n\n\n\n\n\n\n\n\n \n \n results matching \"\"\n \n \n \n No results matching \"\"\n \n\n"},"classes/ColorOptions.html":{"url":"classes/ColorOptions.html","title":"class - ColorOptions","body":"\n \n\n\n\n\n\n\n\n\n\n\n\n\n\n Classes\n ColorOptions\n\n\n\n \n Info\n \n \n Source\n \n\n\n\n \n \n File\n \n \n src/managers/ui-manager/color-options.ts\n \n\n\n \n Description\n \n \n Color options with functions to color event data.\n\n \n\n\n\n\n \n Index\n \n \n \n \n Properties\n \n \n \n \n \n \n Private\n allColorByOptions\n \n \n Private\n chargeColors\n \n \n Private\n collectionName\n \n \n Private\n colorByOptions\n \n \n Private\n colorOptionsFolder\n \n \n Private\n momColors\n \n \n Private\n selectedColorByOption\n \n \n \n \n\n \n \n Methods\n \n \n \n \n \n \n Private\n applyChargeColorOptions\n \n \n Private\n applyMomColorOptions\n \n \n Private\n applyVertexColorOptions\n \n \n Private\n colorByMomentum\n \n \n Private\n getMomentum\n \n \n Private\n initChargeColorOptions\n \n \n Private\n initColorByOptions\n \n \n Private\n initMomColorOptions\n \n \n Private\n onlySelectedColorByOption\n \n \n Private\n shouldColorByCharge\n \n \n \n \n\n\n\n\n\n \n \n\n\n \n Constructor\n \n \n \n \nconstructor(colorManager: ColorManager, collectionFolder: PhoenixMenuNode, collectionColor: Color, colorByOptionsToInclude?: ColorByOptionKeys[])\n \n \n \n \n Defined in src/managers/ui-manager/color-options.ts:74\n \n \n\n \n \n Create the color options.\n\n \n Parameters :\n \n \n \n Name\n Type\n Optional\n Description\n \n \n \n \n colorManager\n \n \n ColorManager\n \n \n \n No\n \n \n \n Color manager for three.js functions related to coloring of objects.\n\n \n \n \n collectionFolder\n \n \n PhoenixMenuNode\n \n \n \n No\n \n \n \n Collection folder to add the color by options to.\n\n \n \n \n collectionColor\n \n \n Color\n \n \n \n No\n \n \n \n \n \n \n colorByOptionsToInclude\n \n \n ColorByOptionKeys[]\n \n \n \n Yes\n \n \n \n Options to include for this collection to color event data by.\n\n \n \n \n \n \n \n \n \n \n\n\n \n \n \n Properties\n \n \n \n \n \n \n \n Private\n allColorByOptions\n \n \n \n \n \n \n Type : ColorByOption[]\n\n \n \n \n \n Default value : [\n {\n key: ColorByOptionKeys.CHARGE,\n name: 'Charge ' + PrettySymbols.getPrettySymbol('charge'),\n initialize: this.initChargeColorOptions.bind(this),\n apply: this.applyChargeColorOptions.bind(this),\n },\n {\n key: ColorByOptionKeys.MOM,\n name: 'Momentum ' + PrettySymbols.getPrettySymbol('mom'),\n initialize: this.initMomColorOptions.bind(this),\n apply: this.applyMomColorOptions.bind(this),\n },\n {\n key: ColorByOptionKeys.VERTEX,\n name: 'Vertex',\n apply: this.applyVertexColorOptions.bind(this),\n },\n ]\n \n \n \n \n Defined in src/managers/ui-manager/color-options.ts:35\n \n \n\n \n \n All color by options possible.\n\n \n \n\n \n \n \n \n \n \n \n \n Private\n chargeColors\n \n \n \n \n \n \n Type : object\n\n \n \n \n \n Default value : {\n '-1': '#ff0000',\n '0': '#ff0000',\n '1': '#ff0000',\n }\n \n \n \n \n Defined in src/managers/ui-manager/color-options.ts:57\n \n \n\n \n \n Default values for colors for color by charge.\n\n \n \n\n \n \n \n \n \n \n \n \n Private\n collectionName\n \n \n \n \n \n \n Type : string\n\n \n \n \n \n Defined in src/managers/ui-manager/color-options.ts:26\n \n \n\n \n \n Collection name of the event data type.\n\n \n \n\n \n \n \n \n \n \n \n \n Private\n colorByOptions\n \n \n \n \n \n \n Type : ColorByOption[]\n\n \n \n \n \n Defined in src/managers/ui-manager/color-options.ts:28\n \n \n\n \n \n Available options to color by in this instance of color options.\n\n \n \n\n \n \n \n \n \n \n \n \n Private\n colorOptionsFolder\n \n \n \n \n \n \n Type : PhoenixMenuNode\n\n \n \n \n \n Defined in src/managers/ui-manager/color-options.ts:32\n \n \n\n \n \n Phoenix menu node containing color configurations.\n\n \n \n\n \n \n \n \n \n \n \n \n Private\n momColors\n \n \n \n \n \n \n Type : object\n\n \n \n \n \n Default value : {\n min: {\n value: 0,\n color: '#ff0000',\n },\n max: {\n value: 50000,\n color: '#ff0000',\n },\n }\n \n \n \n \n Defined in src/managers/ui-manager/color-options.ts:65\n \n \n\n \n \n Default values for colors and min/max for color by momentum.\n\n \n \n\n \n \n \n \n \n \n \n \n Private\n selectedColorByOption\n \n \n \n \n \n \n Type : ColorByOptionKeys\n\n \n \n \n \n Defined in src/managers/ui-manager/color-options.ts:30\n \n \n\n \n \n Currently selected option to color by.\n\n \n \n\n \n \n\n\n \n \n \n Methods\n \n \n \n \n \n \n \n Private\n applyChargeColorOptions\n \n \n \n \n \n \n \n applyChargeColorOptions()\n \n \n\n\n \n \n Defined in src/managers/ui-manager/color-options.ts:176\n \n \n\n\n \n \n Apply charge color options.\n\n\n \n Returns : void\n\n \n \n \n \n \n \n \n \n \n \n \n Private\n applyMomColorOptions\n \n \n \n \n \n \n \n applyMomColorOptions()\n \n \n\n\n \n \n Defined in src/managers/ui-manager/color-options.ts:246\n \n \n\n\n \n \n Apply momentum color options.\n\n\n \n Returns : void\n\n \n \n \n \n \n \n \n \n \n \n \n Private\n applyVertexColorOptions\n \n \n \n \n \n \n \n applyVertexColorOptions()\n \n \n\n\n \n \n Defined in src/managers/ui-manager/color-options.ts:293\n \n \n\n\n \n \n Apply color by vertex to tracks.\n\n\n \n Returns : void\n\n \n \n \n \n \n \n \n \n \n \n \n Private\n colorByMomentum\n \n \n \n \n \n \n \n colorByMomentum(minOrMax: string)\n \n \n\n\n \n \n Defined in src/managers/ui-manager/color-options.ts:256\n \n \n\n\n \n \n Color event data based on the momentum property of each object.\nThis is to apply the stored momentum colors for minimum and maximum separated at the mid value.\n\n\n \n Parameters :\n \n \n \n \n Name\n Type\n Optional\n Description\n \n \n \n \n minOrMax\n \n string\n \n\n \n No\n \n\n\n \n If the momentum to color objects by is minimum or maximum momentum.\nThis is to apply the stored momentum colors for minimum and maximum separated at the mid value.\n\n \n \n \n \n \n \n \n \n Returns : void\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n Private\n getMomentum\n \n \n \n \n \n \n \n getMomentum(objectParams: any)\n \n \n\n\n \n \n Defined in src/managers/ui-manager/color-options.ts:282\n \n \n\n\n \n \n Get momentum from object parameters.\n\n\n \n Parameters :\n \n \n \n \n Name\n Type\n Optional\n Description\n \n \n \n \n objectParams\n \n any\n \n\n \n No\n \n\n\n \n Parameters associated to the 3D object.\n\n \n \n \n \n \n \n \n \n Returns : any\n\n \n \n THe momentum value.\n\n \n \n \n \n \n \n \n \n \n \n \n Private\n initChargeColorOptions\n \n \n \n \n \n \n \n initChargeColorOptions()\n \n \n\n\n \n \n Defined in src/managers/ui-manager/color-options.ts:150\n \n \n\n\n \n \n Initialize charge color options.\n\n\n \n Returns : void\n\n \n \n \n \n \n \n \n \n \n \n \n Private\n initColorByOptions\n \n \n \n \n \n \n \n initColorByOptions()\n \n \n\n\n \n \n Defined in src/managers/ui-manager/color-options.ts:124\n \n \n\n\n \n \n Initialize the color options.\n\n\n \n Returns : void\n\n \n \n \n \n \n \n \n \n \n \n \n Private\n initMomColorOptions\n \n \n \n \n \n \n \n initMomColorOptions()\n \n \n\n\n \n \n Defined in src/managers/ui-manager/color-options.ts:207\n \n \n\n\n \n \n Initialize momentum color options.\n\n\n \n Returns : void\n\n \n \n \n \n \n \n \n \n \n \n \n Private\n onlySelectedColorByOption\n \n \n \n \n \n \n \n onlySelectedColorByOption()\n \n \n\n\n \n \n Defined in src/managers/ui-manager/color-options.ts:300\n \n \n\n\n \n \n Show configs of only the currently selected color by option.\n\n\n \n Returns : void\n\n \n \n \n \n \n \n \n \n \n \n \n Private\n shouldColorByCharge\n \n \n \n \n \n \n \n shouldColorByCharge(objectParams: any, chargeValue: number)\n \n \n\n\n \n \n Defined in src/managers/ui-manager/color-options.ts:193\n \n \n\n\n \n \n Check if object should be colored based on charge value.\n\n\n \n Parameters :\n \n \n \n \n Name\n Type\n Optional\n Description\n \n \n \n \n objectParams\n \n any\n \n\n \n No\n \n\n\n \n Object parameters associated to the 3D object.\n\n \n \n \n chargeValue\n \n number\n \n\n \n No\n \n\n\n \n Value of charge (-1, 0, 1).\n\n \n \n \n \n \n \n \n \n Returns : boolean\n\n \n \n Whether the charge is equal to the value.\n\n \n \n \n \n \n\n\n\n\n\n\n \n\n\n \n import { Color } from 'three';\nimport { PrettySymbols } from '../../helpers/pretty-symbols';\nimport { ColorManager } from '../three-manager/color-manager';\nimport { PhoenixMenuNode } from './phoenix-menu/phoenix-menu-node';\n\n/** Keys for options available for coloring event data by. */\nexport enum ColorByOptionKeys {\n CHARGE = 'charge',\n MOM = 'mom',\n VERTEX = 'vertex',\n}\n\n/** Type for a single color by option. */\ntype ColorByOption = {\n key: ColorByOptionKeys;\n name: string;\n initialize?: () => void;\n apply?: () => void;\n};\n\n/**\n * Color options with functions to color event data.\n */\nexport class ColorOptions {\n /** Collection name of the event data type. */\n private collectionName: string;\n /** Available options to color by in this instance of color options. */\n private colorByOptions: ColorByOption[];\n /** Currently selected option to color by. */\n private selectedColorByOption: ColorByOptionKeys;\n /** Phoenix menu node containing color configurations. */\n private colorOptionsFolder: PhoenixMenuNode;\n\n /** All color by options possible. */\n private allColorByOptions: ColorByOption[] = [\n {\n key: ColorByOptionKeys.CHARGE,\n name: 'Charge ' + PrettySymbols.getPrettySymbol('charge'),\n initialize: this.initChargeColorOptions.bind(this),\n apply: this.applyChargeColorOptions.bind(this),\n },\n {\n key: ColorByOptionKeys.MOM,\n name: 'Momentum ' + PrettySymbols.getPrettySymbol('mom'),\n initialize: this.initMomColorOptions.bind(this),\n apply: this.applyMomColorOptions.bind(this),\n },\n {\n key: ColorByOptionKeys.VERTEX,\n name: 'Vertex',\n apply: this.applyVertexColorOptions.bind(this),\n },\n ];\n\n // Charge options.\n /** Default values for colors for color by charge. */\n private chargeColors = {\n '-1': '#ff0000',\n '0': '#ff0000',\n '1': '#ff0000',\n };\n\n // Momentum options.\n /** Default values for colors and min/max for color by momentum. */\n private momColors = {\n min: {\n value: 0,\n color: '#ff0000',\n },\n max: {\n value: 50000,\n color: '#ff0000',\n },\n };\n\n /**\n * Create the color options.\n * @param colorManager Color manager for three.js functions related to coloring of objects.\n * @param collectionFolder Collection folder to add the color by options to.\n * @param colorByOptionsToInclude Options to include for this collection to color event data by.\n */\n constructor(\n private colorManager: ColorManager,\n collectionFolder: PhoenixMenuNode,\n collectionColor: Color,\n colorByOptionsToInclude?: ColorByOptionKeys[]\n ) {\n this.collectionName = collectionFolder.name;\n this.colorOptionsFolder = collectionFolder.addChild('Color Options');\n\n this.colorOptionsFolder.addConfig('color', {\n label: 'Color',\n color: collectionColor\n ? `#${collectionColor?.getHexString()}`\n : undefined,\n onChange: (value) =>\n this.colorManager.collectionColor(this.collectionName, value),\n });\n\n this.colorOptionsFolder.addConfig('button', {\n label: 'Random',\n onClick: () =>\n this.colorManager.collectionColorRandom(this.collectionName),\n });\n\n // Check which color by options are to be included.\n\n if (colorByOptionsToInclude?.length > 0) {\n this.colorByOptions = this.allColorByOptions.filter((colorByOption) =>\n colorByOptionsToInclude.includes(colorByOption.key)\n );\n\n this.initColorByOptions();\n this.colorByOptions.forEach((colorByOption) =>\n colorByOption.initialize?.()\n );\n this.onlySelectedColorByOption();\n }\n }\n\n /**\n * Initialize the color options.\n */\n private initColorByOptions() {\n this.selectedColorByOption = this.colorByOptions[0].key;\n\n // Configurations\n\n this.colorOptionsFolder.addConfig('select', {\n label: 'Color by',\n options: this.colorByOptions.map((colorByOption) => colorByOption.name),\n onChange: (updatedColorByOption) => {\n const newColorByOption = this.colorByOptions.find(\n (colorByOption) => colorByOption.name === updatedColorByOption\n );\n\n this.selectedColorByOption = newColorByOption?.key;\n newColorByOption?.apply?.();\n\n this.onlySelectedColorByOption();\n },\n });\n }\n\n // Charge options.\n\n /**\n * Initialize charge color options.\n */\n private initChargeColorOptions() {\n // Charge configurations\n [-1, 0, 1].forEach((chargeValue) => {\n this.colorOptionsFolder.addConfig('color', {\n label: `${PrettySymbols.getPrettySymbol('charge')}=${chargeValue}`,\n group: ColorByOptionKeys.CHARGE,\n color: this.chargeColors[chargeValue],\n onChange: (color) => {\n this.chargeColors[chargeValue] = color;\n\n if (this.selectedColorByOption === ColorByOptionKeys.CHARGE) {\n this.colorManager.colorObjectsByProperty(\n color,\n this.collectionName,\n (objectUserData) =>\n this.shouldColorByCharge(objectUserData, chargeValue)\n );\n }\n },\n });\n });\n }\n\n /**\n * Apply charge color options.\n */\n private applyChargeColorOptions() {\n [-1, 0, 1].forEach((chargeValue) => {\n this.colorManager.colorObjectsByProperty(\n this.chargeColors[chargeValue],\n this.collectionName,\n (objectUserData) =>\n this.shouldColorByCharge(objectUserData, chargeValue)\n );\n });\n }\n\n /**\n * Check if object should be colored based on charge value.\n * @param objectParams Object parameters associated to the 3D object.\n * @param chargeValue Value of charge (-1, 0, 1).\n * @returns Whether the charge is equal to the value.\n */\n private shouldColorByCharge(objectParams: any, chargeValue: number) {\n // For ATLAS data, the charge is calculated from dparams[4] otherwise it exists as an object's userData\n if (Math.sign(1 / parseInt(objectParams?.dparams?.[4])) === chargeValue) {\n return true;\n } else if (objectParams?.charge === chargeValue) {\n return true;\n }\n }\n\n // Momentum options.\n\n /**\n * Initialize momentum color options.\n */\n private initMomColorOptions() {\n // Momentum configurations\n Object.entries(this.momColors).forEach(([key, momValue]) => {\n this.colorOptionsFolder.addConfig('slider', {\n label: PrettySymbols.getPrettySymbol('mom') + ' ' + key,\n group: ColorByOptionKeys.MOM,\n min: this.momColors.min.value,\n max: this.momColors.max.value,\n value: this.momColors[key].value,\n step: 10,\n allowCustomValue: true,\n onChange: (sliderValue) => {\n this.momColors[key].value = sliderValue;\n\n if (this.selectedColorByOption === ColorByOptionKeys.MOM) {\n this.colorByMomentum('min');\n this.colorByMomentum('max');\n }\n },\n });\n\n this.colorOptionsFolder.addConfig('color', {\n label: PrettySymbols.getPrettySymbol('mom') + ' ' + key + ' color',\n group: ColorByOptionKeys.MOM,\n color: momValue.color,\n onChange: (color) => {\n this.momColors[key].color = color;\n\n if (this.selectedColorByOption === ColorByOptionKeys.MOM) {\n this.colorByMomentum(key);\n }\n },\n });\n });\n }\n\n /**\n * Apply momentum color options.\n */\n private applyMomColorOptions() {\n this.colorByMomentum('min');\n this.colorByMomentum('max');\n }\n\n /**\n * Color event data based on the momentum property of each object.\n * @param minOrMax If the momentum to color objects by is minimum or maximum momentum.\n * This is to apply the stored momentum colors for minimum and maximum separated at the mid value.\n */\n private colorByMomentum(minOrMax: string) {\n this.colorManager.colorObjectsByProperty(\n this.momColors[minOrMax].color,\n this.collectionName,\n (objectParams) => {\n const mom = this.getMomentum(objectParams);\n const mid = (this.momColors.min.value + this.momColors.max.value) / 2;\n\n if (minOrMax === 'max' && mom > mid && mom this.momColors.min.value\n ) {\n return true;\n }\n }\n );\n }\n\n /**\n * Get momentum from object parameters.\n * @param objectParams Parameters associated to the 3D object.\n * @returns THe momentum value.\n */\n private getMomentum(objectParams: any) {\n return objectParams?.dparams?.[4]\n ? Math.abs(1 / parseFloat(objectParams?.dparams?.[4]))\n : objectParams?.mom;\n }\n\n // Vertex options.\n\n /**\n * Apply color by vertex to tracks.\n */\n private applyVertexColorOptions() {\n this.colorManager.colorTracksByVertex(this.collectionName);\n }\n\n /**\n * Show configs of only the currently selected color by option.\n */\n private onlySelectedColorByOption() {\n this.colorOptionsFolder.configs.forEach((config) => {\n const groupNotSelected =\n config.group !== undefined &&\n config.group !== this.selectedColorByOption;\n\n config.hidden = groupNotSelected;\n });\n }\n}\n\n \n\n\n\n\n\n\n\n\n\n\n \n \n results matching \"\"\n \n \n \n No results matching \"\"\n \n\n"},"interfaces/Configuration.html":{"url":"interfaces/Configuration.html","title":"interface - Configuration","body":"\n \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n Interfaces\n \n Configuration\n\n\n\n \n Info\n \n \n Source\n \n\n\n\n \n \n File\n \n \n src/lib/types/configuration.ts\n \n\n\n \n Description\n \n \n Configuration of the event display.\n\n \n\n\n \n Index\n \n \n \n \n Properties\n \n \n \n \n \n \n Optional\n \n allowUrlOptions\n \n \n \n Optional\n \n defaultEventFile\n \n \n \n Optional\n \n defaultView\n \n \n \n Optional\n \n elementId\n \n \n \n Optional\n \n enableDatGUIMenu\n \n \n \n Optional\n \n eventDataLoader\n \n \n \n Optional\n \n forceColourTheme\n \n \n \n Optional\n \n phoenixMenuRoot\n \n \n \n Optional\n \n presetAnimations\n \n \n \n Optional\n \n presetViews\n \n \n \n \n \n \n \n \n\n\n\n \n Properties\n \n \n \n \n \n allowUrlOptions\n \n \n \n \n \n \n \n \n allowUrlOptions: boolean\n\n \n \n\n\n \n \n Type : boolean\n\n \n \n\n \n \n Optional\n \n \n\n\n\n\n \n \n Whether to allow URL options or not (true by default).\n\n \n \n \n \n \n \n \n \n \n defaultEventFile\n \n \n \n \n \n \n \n \n defaultEventFile: literal type\n\n \n \n\n\n \n \n Type : literal type\n\n \n \n\n \n \n Optional\n \n \n\n\n\n\n \n \n Default event to load when none given in URL.\n\n \n \n \n \n \n \n \n \n \n defaultView\n \n \n \n \n \n \n \n \n defaultView: number[]\n\n \n \n\n\n \n \n Type : number[]\n\n \n \n\n \n \n Optional\n \n \n\n\n\n\n \n \n Default view [x,y,z].\n\n \n \n \n \n \n \n \n \n \n elementId\n \n \n \n \n \n \n \n \n elementId: string\n\n \n \n\n\n \n \n Type : string\n\n \n \n\n \n \n Optional\n \n \n\n\n\n\n \n \n ID of the wrapper element.\n\n \n \n \n \n \n \n \n \n \n enableDatGUIMenu\n \n \n \n \n \n \n \n \n enableDatGUIMenu: boolean\n\n \n \n\n\n \n \n Type : boolean\n\n \n \n\n \n \n Optional\n \n \n\n\n\n\n \n \n Whether to enable dat.GUI menu or not.\n\n \n \n \n \n \n \n \n \n \n eventDataLoader\n \n \n \n \n \n \n \n \n eventDataLoader: EventDataLoader\n\n \n \n\n\n \n \n Type : EventDataLoader\n\n \n \n\n \n \n Optional\n \n \n\n\n\n\n \n \n Event data loader responsible for processing and loading event data.\n\n \n \n \n \n \n \n \n \n \n forceColourTheme\n \n \n \n \n \n \n \n \n forceColourTheme: string\n\n \n \n\n\n \n \n Type : string\n\n \n \n\n \n \n Optional\n \n \n\n\n\n\n \n \n Whether to force a theme ('dark' or 'light' are current options)\n\n \n \n \n \n \n \n \n \n \n phoenixMenuRoot\n \n \n \n \n \n \n \n \n phoenixMenuRoot: PhoenixMenuNode\n\n \n \n\n\n \n \n Type : PhoenixMenuNode\n\n \n \n\n \n \n Optional\n \n \n\n\n\n\n \n \n Root node of the phoenix menu.\n\n \n \n \n \n \n \n \n \n \n presetAnimations\n \n \n \n \n \n \n \n \n presetAnimations: AnimationPreset[]\n\n \n \n\n\n \n \n Type : AnimationPreset[]\n\n \n \n\n \n \n Optional\n \n \n\n\n\n\n \n \n Preset animations for switching event display camera.\n\n \n \n \n \n \n \n \n \n \n presetViews\n \n \n \n \n \n \n \n \n presetViews: PresetView[]\n\n \n \n\n\n \n \n Type : PresetView[]\n\n \n \n\n \n \n Optional\n \n \n\n\n\n\n \n \n Preset views for switching event display camera.\n\n \n \n \n \n \n \n\n\n \n import { PresetView } from '../models/preset-view.model';\nimport { EventDataLoader } from '../../loaders/event-data-loader';\nimport { PhoenixMenuNode } from '../../managers/ui-manager/phoenix-menu/phoenix-menu-node';\nimport { AnimationPreset } from '../../managers/three-manager/animations-manager';\nimport { DepthPackingStrategies } from 'three';\n\n/**\n * Configuration of the event display.\n */\nexport interface Configuration {\n /** Default view [x,y,z]. */\n defaultView?: number[];\n /** Preset views for switching event display camera. */\n presetViews?: PresetView[];\n /** Preset animations for switching event display camera. */\n presetAnimations?: AnimationPreset[];\n /** Event data loader responsible for processing and loading event data. */\n eventDataLoader?: EventDataLoader;\n /** Root node of the phoenix menu. */\n phoenixMenuRoot?: PhoenixMenuNode;\n /** Whether to enable dat.GUI menu or not. */\n enableDatGUIMenu?: boolean;\n /** ID of the wrapper element. */\n elementId?: string;\n /** Default event to load when none given in URL. */\n defaultEventFile?: { eventFile: string; eventType: string };\n /** Whether to allow URL options or not (true by default). */\n allowUrlOptions?: boolean;\n /** Whether to force a theme ('dark' or 'light' are current options) */\n forceColourTheme?: string;\n}\n\n \n\n\n\n\n\n\n\n\n\n \n \n results matching \"\"\n \n \n \n No results matching \"\"\n \n\n"},"classes/CoordinateHelper.html":{"url":"classes/CoordinateHelper.html","title":"class - CoordinateHelper","body":"\n \n\n\n\n\n\n\n\n\n\n\n\n\n\n Classes\n CoordinateHelper\n\n\n\n \n Info\n \n \n Source\n \n\n\n\n \n \n File\n \n \n src/helpers/coordinate-helper.ts\n \n\n\n \n Description\n \n \n Helper methods for coordinate conversions.\n\n \n\n\n\n\n \n Index\n \n \n\n \n \n Methods\n \n \n \n \n \n \n Static\n anglesAreSane\n \n \n Static\n atlasQuaternion\n \n \n Static\n etaPhiToCartesian\n \n \n Static\n etaToTheta\n \n \n Static\n sphericalToCartesian\n \n \n Static\n thetaToEta\n \n \n \n \n\n\n\n\n\n \n \n\n\n\n\n \n \n \n Methods\n \n \n \n \n \n \n \n Static\n anglesAreSane\n \n \n \n \n \n \n \n anglesAreSane(theta: number, phi: number)\n \n \n\n\n \n \n Defined in src/helpers/coordinate-helper.ts:13\n \n \n\n\n \n \n Checks if angles are within range: -PI \n\n\n \n Parameters :\n \n \n \n \n Name\n Type\n Optional\n Description\n \n \n \n \n theta\n \n number\n \n\n \n No\n \n\n\n \n equatorial angle\n\n \n \n \n phi\n \n number\n \n\n \n No\n \n\n\n \n azimuthal angle\n\n \n \n \n \n \n \n \n \n Returns : boolean\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n Static\n atlasQuaternion\n \n \n \n \n \n \n \n atlasQuaternion()\n \n \n\n\n \n \n Defined in src/helpers/coordinate-helper.ts:81\n \n \n\n\n \n \n Returns the Quaternion to rotate to ATLAS coords.\nTemporary. We will need to make this configurable per experiment.\n\n\n \n Returns : Quaternion\n\n \n \n \n \n \n \n \n \n \n \n \n Static\n etaPhiToCartesian\n \n \n \n \n \n \n \n etaPhiToCartesian(radius: number, eta: number, phi: number)\n \n \n\n\n \n \n Defined in src/helpers/coordinate-helper.ts:65\n \n \n\n\n \n \n Get cartesian from eta/phi parameters.\nApplies the necessary rotations to move from threejs native to experimental.\n\n\n \n Parameters :\n \n \n \n \n Name\n Type\n Optional\n Description\n \n \n \n \n radius\n \n number\n \n\n \n No\n \n\n\n \n The radius.\n\n \n \n \n eta\n \n number\n \n\n \n No\n \n\n\n \n Pseudorapidity\n\n \n \n \n phi\n \n number\n \n\n \n No\n \n\n\n \n Phi angle.\n\n \n \n \n \n \n \n \n \n Returns : Vector3\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n Static\n etaToTheta\n \n \n \n \n \n \n \n etaToTheta(eta: number)\n \n \n\n\n \n \n Defined in src/helpers/coordinate-helper.ts:25\n \n \n\n\n \n \n Convert pseudorapidity eta to spherical coordinate theta.\nSee definition here: https://en.wikipedia.org/wiki/Pseudorapidity\n\n\n \n Parameters :\n \n \n \n \n Name\n Type\n Optional\n Description\n \n \n \n \n eta\n \n number\n \n\n \n No\n \n\n\n \n Pseudorapidity eta to convert to theta.\n\n \n \n \n \n \n \n \n \n Returns : number\n\n \n \n theta in radians\n\n \n \n \n \n \n \n \n \n \n \n \n Static\n sphericalToCartesian\n \n \n \n \n \n \n \n sphericalToCartesian(radius: number, theta: number, phi: number)\n \n \n\n\n \n \n Defined in src/helpers/coordinate-helper.ts:46\n \n \n\n\n \n \n Get cartesian from spherical parameters.\nApplies the necessary rotations to move from threejs to experimental.\n\n\n \n Parameters :\n \n \n \n \n Name\n Type\n Optional\n Description\n \n \n \n \n radius\n \n number\n \n\n \n No\n \n\n\n \n The radius.\n\n \n \n \n theta\n \n number\n \n\n \n No\n \n\n\n \n Theta angle.\n\n \n \n \n phi\n \n number\n \n\n \n No\n \n\n\n \n Phi angle.\n\n \n \n \n \n \n \n \n \n Returns : Vector3\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n Static\n thetaToEta\n \n \n \n \n \n \n \n thetaToEta(theta: number)\n \n \n\n\n \n \n Defined in src/helpers/coordinate-helper.ts:35\n \n \n\n\n \n \n Convert spherical theta to pseudorapidity eta.\nSee definition here: https://en.wikipedia.org/wiki/Pseudorapidity\n\n\n \n Parameters :\n \n \n \n \n Name\n Type\n Optional\n Description\n \n \n \n \n theta\n \n number\n \n\n \n No\n \n\n\n \n Angle in radians to convert to pseudorapidity eta.\n\n \n \n \n \n \n \n \n \n Returns : number\n\n \n \n pseudorapidity eta\n\n \n \n \n \n \n\n\n\n\n\n\n \n\n\n \n import { Vector3, Quaternion } from 'three';\n\n/**\n * Helper methods for coordinate conversions.\n */\nexport class CoordinateHelper {\n /**\n * Checks if angles are within range: -PI phi;\n const tmp2 = 0 theta;\n return tmp1 && tmp2;\n }\n\n /**\n * Convert pseudorapidity eta to spherical coordinate theta.\n * See definition here: https://en.wikipedia.org/wiki/Pseudorapidity\n * @param eta Pseudorapidity eta to convert to theta.\n * @returns theta in radians\n */\n public static etaToTheta(eta: number): number {\n return 2 * Math.atan(Math.pow(Math.E, -eta));\n }\n\n /**\n * Convert spherical theta to pseudorapidity eta.\n * See definition here: https://en.wikipedia.org/wiki/Pseudorapidity\n * @param theta Angle in radians to convert to pseudorapidity eta.\n * @returns pseudorapidity eta\n */\n public static thetaToEta(theta: number): number {\n return -Math.log(Math.tan(theta / 2.0));\n }\n\n /**\n * Get cartesian from spherical parameters.\n * Applies the necessary rotations to move from threejs to experimental.\n * @param radius The radius.\n * @param theta Theta angle.\n * @param phi Phi angle.\n */\n public static sphericalToCartesian(\n radius: number,\n theta: number,\n phi: number\n ): Vector3 {\n // Threejs uses theta as azimuthal, so need to reverse.\n const vector = new Vector3();\n vector.setFromSphericalCoords(radius, theta, phi);\n vector.applyQuaternion(CoordinateHelper.atlasQuaternion());\n return vector;\n }\n\n /**\n * Get cartesian from eta/phi parameters.\n * Applies the necessary rotations to move from threejs native to experimental.\n * @param radius The radius.\n * @param eta Pseudorapidity\n * @param phi Phi angle.\n */\n public static etaPhiToCartesian(\n radius: number,\n eta: number,\n phi: number\n ): Vector3 {\n const vector = new Vector3();\n // Threejs uses theta as azimuthal, so need to reverse.\n vector.setFromSphericalCoords(radius, this.etaToTheta(eta), phi);\n vector.applyQuaternion(CoordinateHelper.atlasQuaternion());\n return vector;\n }\n\n /**\n * Returns the Quaternion to rotate to ATLAS coords.\n * Temporary. We will need to make this configurable per experiment.\n */\n public static atlasQuaternion(): Quaternion {\n // With nothing, we have eta=0 on x, and phi=0 on z\n // Should be eta=0 on y, and phi=0 on x\n const v1 = new Vector3(0, 1, 0);\n const v2 = new Vector3(0, 0, 1);\n const quaternion = new Quaternion();\n quaternion.setFromUnitVectors(v1, v2); // This puts eta~infinite on z-axis, eta=0 on but y-positive is phi=PI (and eta=0 on x)\n const quaternion2 = new Quaternion();\n quaternion2.setFromAxisAngle(new Vector3(0, 1, 0), Math.PI / 2.0); // Now have eta = 3.0 on -x, eta =0 on +y, and phi = 0 on +z\n quaternion.multiply(quaternion2);\n return quaternion;\n }\n}\n\n \n\n\n\n\n\n\n\n\n\n\n \n \n results matching \"\"\n \n \n \n No results matching \"\"\n \n\n"},"classes/Cut.html":{"url":"classes/Cut.html","title":"class - Cut","body":"\n \n\n\n\n\n\n\n\n\n\n\n\n\n\n Classes\n Cut\n\n\n\n \n Info\n \n \n Source\n \n\n\n\n \n \n File\n \n \n src/lib/models/cut.model.ts\n \n\n\n \n Description\n \n \n Cut for specifying filters on event data attribute.\n\n \n\n\n\n\n \n Index\n \n \n \n \n Properties\n \n \n \n \n \n \n Private\n defaultApplyMaxValue\n \n \n Private\n defaultApplyMinValue\n \n \n Private\n defaultMaxValue\n \n \n Private\n defaultMinValue\n \n \n Public\n field\n \n \n Public\n maxCutActive\n \n \n Public\n maxValue\n \n \n Public\n minCutActive\n \n \n Public\n minValue\n \n \n Public\n step\n \n \n \n \n\n \n \n Methods\n \n \n \n \n \n \n cutPassed\n \n \n enableMaxCut\n \n \n enableMinCut\n \n \n reset\n \n \n \n \n\n\n\n\n\n \n \n\n\n \n Constructor\n \n \n \n \nconstructor(field: string, minValue: number, maxValue: number, step: number, minCutActive: boolean, maxCutActive: boolean)\n \n \n \n \n Defined in src/lib/models/cut.model.ts:12\n \n \n\n \n \n Create the cut to filter an event data attribute.\n\n \n Parameters :\n \n \n \n Name\n Type\n Optional\n Description\n \n \n \n \n field\n \n \n string\n \n \n \n No\n \n \n \n Name of the event data attribute to be filtered.\n\n \n \n \n minValue\n \n \n number\n \n \n \n No\n \n \n \n Minimum allowed value of the event data attribute.\n\n \n \n \n maxValue\n \n \n number\n \n \n \n No\n \n \n \n Maximum allowed value of the event data attribute.\n\n \n \n \n step\n \n \n number\n \n \n \n No\n \n \n \n Size of increment when using slider.\n\n \n \n \n minCutActive\n \n \n boolean\n \n \n \n No\n \n \n \n If true, the minimum cut is appled. Can be overriden later with enableMinCut.\n\n \n \n \n maxCutActive\n \n \n boolean\n \n \n \n No\n \n \n \n If true, the maximum cut is appled. Can be overriden later with enableMaxCut.\n\n \n \n \n \n \n \n \n \n \n\n\n \n \n \n Properties\n \n \n \n \n \n \n \n Private\n defaultApplyMaxValue\n \n \n \n \n \n \n Type : boolean\n\n \n \n \n \n Defined in src/lib/models/cut.model.ts:10\n \n \n\n \n \n Default if upper bound applied\n\n \n \n\n \n \n \n \n \n \n \n \n Private\n defaultApplyMinValue\n \n \n \n \n \n \n Type : boolean\n\n \n \n \n \n Defined in src/lib/models/cut.model.ts:12\n \n \n\n \n \n Default if lower bound applied\n\n \n \n\n \n \n \n \n \n \n \n \n Private\n defaultMaxValue\n \n \n \n \n \n \n Type : number\n\n \n \n \n \n Defined in src/lib/models/cut.model.ts:8\n \n \n\n \n \n Default maximum allowed value of the event data attribute.\n\n \n \n\n \n \n \n \n \n \n \n \n Private\n defaultMinValue\n \n \n \n \n \n \n Type : number\n\n \n \n \n \n Defined in src/lib/models/cut.model.ts:6\n \n \n\n \n \n Default minimum allowed value of the event data attribute.\n\n \n \n\n \n \n \n \n \n \n \n \n Public\n field\n \n \n \n \n \n \n Type : string\n\n \n \n \n \n Defined in src/lib/models/cut.model.ts:24\n \n \n\n \n \n Name of the event data attribute to be filtered.\n \n \n\n \n \n \n \n \n \n \n \n Public\n maxCutActive\n \n \n \n \n \n \n Type : boolean\n\n \n \n \n \n Default value : true\n \n \n \n \n Defined in src/lib/models/cut.model.ts:29\n \n \n\n \n \n If true, the maximum cut is appled. Can be overriden later with enableMaxCut.\n \n \n\n \n \n \n \n \n \n \n \n Public\n maxValue\n \n \n \n \n \n \n Type : number\n\n \n \n \n \n Defined in src/lib/models/cut.model.ts:26\n \n \n\n \n \n Maximum allowed value of the event data attribute.\n \n \n\n \n \n \n \n \n \n \n \n Public\n minCutActive\n \n \n \n \n \n \n Type : boolean\n\n \n \n \n \n Default value : true\n \n \n \n \n Defined in src/lib/models/cut.model.ts:28\n \n \n\n \n \n If true, the minimum cut is appled. Can be overriden later with enableMinCut.\n \n \n\n \n \n \n \n \n \n \n \n Public\n minValue\n \n \n \n \n \n \n Type : number\n\n \n \n \n \n Defined in src/lib/models/cut.model.ts:25\n \n \n\n \n \n Minimum allowed value of the event data attribute.\n \n \n\n \n \n \n \n \n \n \n \n Public\n step\n \n \n \n \n \n \n Type : number\n\n \n \n \n \n Default value : 1\n \n \n \n \n Defined in src/lib/models/cut.model.ts:27\n \n \n\n \n \n Size of increment when using slider.\n \n \n\n \n \n\n\n \n \n \n Methods\n \n \n \n \n \n \n \n cutPassed\n \n \n \n \n \n \ncutPassed(value: number)\n \n \n\n\n \n \n Defined in src/lib/models/cut.model.ts:48\n \n \n\n\n \n \n Returns true if the passed value is within the active cut range.\n\n\n \n Parameters :\n \n \n \n \n Name\n Type\n Optional\n \n \n \n \n value\n \n number\n \n\n \n No\n \n\n\n \n \n \n \n \n \n \n Returns : boolean\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n enableMaxCut\n \n \n \n \n \n \nenableMaxCut(check: boolean)\n \n \n\n\n \n \n Defined in src/lib/models/cut.model.ts:38\n \n \n\n\n \n \n Returns true if upper cut is valid.\n\n\n \n Parameters :\n \n \n \n \n Name\n Type\n Optional\n \n \n \n \n check\n \n boolean\n \n\n \n No\n \n\n\n \n \n \n \n \n \n \n Returns : void\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n enableMinCut\n \n \n \n \n \n \nenableMinCut(check: boolean)\n \n \n\n\n \n \n Defined in src/lib/models/cut.model.ts:43\n \n \n\n\n \n \n Returns true if upper cut is valid.\n\n\n \n Parameters :\n \n \n \n \n Name\n Type\n Optional\n \n \n \n \n check\n \n boolean\n \n\n \n No\n \n\n\n \n \n \n \n \n \n \n Returns : void\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n reset\n \n \n \n \n \n \nreset()\n \n \n\n\n \n \n Defined in src/lib/models/cut.model.ts:58\n \n \n\n\n \n \n Reset the minimum and maximum value of the cut to default.\n\n\n \n Returns : void\n\n \n \n \n \n \n\n\n\n\n\n\n \n\n\n \n export class Cut {\n /** Default minimum allowed value of the event data attribute. */\n private defaultMinValue: number;\n /** Default maximum allowed value of the event data attribute. */\n private defaultMaxValue: number;\n /** Default if upper bound applied */\n private defaultApplyMaxValue: boolean;\n /** Default if lower bound applied */\n private defaultApplyMinValue: boolean;\n /**\n * Create the cut to filter an event data attribute.\n * @param field Name of the event data attribute to be filtered.\n * @param minValue Minimum allowed value of the event data attribute.\n * @param maxValue Maximum allowed value of the event data attribute.\n * @param step Size of increment when using slider.\n * @param minCutActive If true, the minimum cut is appled. Can be overriden later with enableMinCut.\n * @param maxCutActive If true, the maximum cut is appled. Can be overriden later with enableMaxCut.\n *\n */\n constructor(\n public field: string,\n public minValue: number,\n public maxValue: number,\n public step: number = 1,\n public minCutActive: boolean = true,\n public maxCutActive: boolean = true\n ) {\n this.defaultMinValue = minValue;\n this.defaultMaxValue = maxValue;\n this.defaultApplyMinValue = minCutActive;\n this.defaultApplyMaxValue = maxCutActive;\n }\n\n /** Returns true if upper cut is valid. */\n enableMaxCut(check: boolean) {\n this.maxCutActive = check;\n }\n\n /** Returns true if upper cut is valid. */\n enableMinCut(check: boolean) {\n this.minCutActive = check;\n }\n\n /** Returns true if the passed value is within the active cut range. */\n cutPassed(value: number): boolean {\n return (\n (!this.maxCutActive || value this.minValue)\n );\n }\n\n /**\n * Reset the minimum and maximum value of the cut to default.\n */\n reset() {\n this.minValue = this.defaultMinValue;\n this.maxValue = this.defaultMaxValue;\n this.minCutActive = this.defaultApplyMinValue;\n this.maxCutActive = this.defaultApplyMaxValue;\n }\n}\n\n \n\n\n\n\n\n\n\n\n\n\n \n \n results matching \"\"\n \n \n \n No results matching \"\"\n \n\n"},"classes/DatGUIMenuUI.html":{"url":"classes/DatGUIMenuUI.html","title":"class - DatGUIMenuUI","body":"\n \n\n\n\n\n\n\n\n\n\n\n\n\n\n Classes\n DatGUIMenuUI\n\n\n\n \n Info\n \n \n Source\n \n\n\n\n \n \n File\n \n \n src/managers/ui-manager/dat-gui-ui.ts\n \n\n\n \n Description\n \n \n A wrapper class for dat.GUI menu to perform UI related operations.\n\n \n\n\n \n Implements\n \n \n PhoenixUI\n \n\n\n \n Index\n \n \n \n \n Properties\n \n \n \n \n \n \n Private\n eventFolder\n \n \n Private\n geomFolder\n \n \n Private\n gui\n \n \n Private\n guiParameters\n \n \n Private\n labelsFolder\n \n \n Private\n maxPositionX\n \n \n Private\n maxPositionY\n \n \n Private\n maxPositionZ\n \n \n Private\n sceneManager\n \n \n \n \n\n \n \n Methods\n \n \n \n \n \n \n Public\n addCollection\n \n \n Public\n addEventDataFolder\n \n \n Public\n addEventDataTypeFolder\n \n \n Public\n addGeometry\n \n \n Public\n addGeometryFolder\n \n \n Public\n addLabel\n \n \n Public\n addLabelsFolder\n \n \n Public\n clear\n \n \n Public\n getEventDataTypeFolder\n \n \n Public\n removeLabel\n \n \n Private\n removeOBJ\n \n \n \n \n\n\n\n\n\n \n \n\n\n \n Constructor\n \n \n \n \nconstructor(elementId: string, three: ThreeManager)\n \n \n \n \n Defined in src/managers/ui-manager/dat-gui-ui.ts:43\n \n \n\n \n \n Create dat.GUI menu UI with different controls related to detector geometry and event data.\n\n \n Parameters :\n \n \n \n Name\n Type\n Optional\n Description\n \n \n \n \n elementId\n \n \n string\n \n \n \n No\n \n \n \n ID of the wrapper element.\n\n \n \n \n three\n \n \n ThreeManager\n \n \n \n No\n \n \n \n The three manager for managing three.js related operations.\n\n \n \n \n \n \n \n \n \n \n\n\n \n \n \n Properties\n \n \n \n \n \n \n \n Private\n eventFolder\n \n \n \n \n \n \n Type : GUI\n\n \n \n \n \n Defined in src/managers/ui-manager/dat-gui-ui.ts:34\n \n \n\n \n \n dat.GUI menu folder containing event related data.\n\n \n \n\n \n \n \n \n \n \n \n \n Private\n geomFolder\n \n \n \n \n \n \n Type : GUI\n\n \n \n \n \n Defined in src/managers/ui-manager/dat-gui-ui.ts:32\n \n \n\n \n \n dat.GUI menu folder containing geometries data.\n\n \n \n\n \n \n \n \n \n \n \n \n Private\n gui\n \n \n \n \n \n \n Type : GUI\n\n \n \n \n \n Defined in src/managers/ui-manager/dat-gui-ui.ts:21\n \n \n\n \n \n dat.GUI menu.\n\n \n \n\n \n \n \n \n \n \n \n \n Private\n guiParameters\n \n \n \n \n \n \n Type : object\n\n \n \n \n \n Default value : {\n rotate: undefined,\n axis: undefined,\n lowRes: undefined,\n eventData: undefined,\n geometries: undefined,\n labels: undefined,\n }\n \n \n \n \n Defined in src/managers/ui-manager/dat-gui-ui.ts:23\n \n \n\n \n \n Options for the dat.GUI menu.\n\n \n \n\n \n \n \n \n \n \n \n \n Private\n labelsFolder\n \n \n \n \n \n \n Type : GUI\n\n \n \n \n \n Defined in src/managers/ui-manager/dat-gui-ui.ts:36\n \n \n\n \n \n dat.GUI menu folder containing labels.\n\n \n \n\n \n \n \n \n \n \n \n \n Private\n maxPositionX\n \n \n \n \n \n \n Type : number\n\n \n \n \n \n Default value : 4000\n \n \n \n \n Defined in src/managers/ui-manager/dat-gui-ui.ts:39\n \n \n\n \n \n Max changeable position of an object along the x-axis.\n\n \n \n\n \n \n \n \n \n \n \n \n Private\n maxPositionY\n \n \n \n \n \n \n Type : number\n\n \n \n \n \n Default value : 4000\n \n \n \n \n Defined in src/managers/ui-manager/dat-gui-ui.ts:41\n \n \n\n \n \n Max changeable position of an object along the y-axis.\n\n \n \n\n \n \n \n \n \n \n \n \n Private\n maxPositionZ\n \n \n \n \n \n \n Type : number\n\n \n \n \n \n Default value : 4000\n \n \n \n \n Defined in src/managers/ui-manager/dat-gui-ui.ts:43\n \n \n\n \n \n Max changeable position of an object along the z-axis.\n\n \n \n\n \n \n \n \n \n \n \n \n Private\n sceneManager\n \n \n \n \n \n \n Type : SceneManager\n\n \n \n \n \n Defined in src/managers/ui-manager/dat-gui-ui.ts:19\n \n \n\n \n \n Manager for managing functions of the three.js scene.\n\n \n \n\n \n \n\n\n \n \n \n Methods\n \n \n \n \n \n \n \n Public\n addCollection\n \n \n \n \n \n \n \n addCollection(eventDataType: string, collectionName: string, cuts?: Cut[], collectionColor?: Color)\n \n \n\n\n \n \n Defined in src/managers/ui-manager/dat-gui-ui.ts:254\n \n \n\n\n \n \n Add collection folder and its configurable options to the event data type (tracks, hits etc.) folder.\n\n\n \n Parameters :\n \n \n \n \n Name\n Type\n Optional\n Description\n \n \n \n \n eventDataType\n \n string\n \n\n \n No\n \n\n\n \n Name of the event data type.\n\n \n \n \n collectionName\n \n string\n \n\n \n No\n \n\n\n \n Name of the collection to be added in the type of event data (tracks, hits etc.).\n\n \n \n \n cuts\n \n Cut[]\n \n\n \n Yes\n \n\n\n \n Cuts to the collection of event data that are to be made configurable to filter event data.\n\n \n \n \n collectionColor\n \n Color\n \n\n \n Yes\n \n\n\n \n Default color of the collection.\n\n \n \n \n \n \n \n \n \n Returns : void\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n Public\n addEventDataFolder\n \n \n \n \n \n \n \n addEventDataFolder()\n \n \n\n\n \n \n Defined in src/managers/ui-manager/dat-gui-ui.ts:200\n \n \n\n\n \n \n Add event data folder with functions for event data toggles like show/hide and depthTest.\n\n\n \n Returns : void\n\n \n \n \n \n \n \n \n \n \n \n \n Public\n addEventDataTypeFolder\n \n \n \n \n \n \n \n addEventDataTypeFolder(typeName: string)\n \n \n\n\n \n \n Defined in src/managers/ui-manager/dat-gui-ui.ts:230\n \n \n\n\n \n \n Add folder for event data type like tracks or hits to the menu.\n\n\n \n Parameters :\n \n \n \n \n Name\n Type\n Optional\n Description\n \n \n \n \n typeName\n \n string\n \n\n \n No\n \n\n\n \n Name of the type of event data.\n\n \n \n \n \n \n \n \n \n Returns : void\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n Public\n addGeometry\n \n \n \n \n \n \n \n addGeometry(object: Object3D, _menuSubfolder?: string)\n \n \n\n\n \n \n Defined in src/managers/ui-manager/dat-gui-ui.ts:109\n \n \n\n\n \n \n Add geometry to the menu's geometry folder and set up its configurable options.\n\n\n \n Parameters :\n \n \n \n \n Name\n Type\n Optional\n Description\n \n \n \n \n object\n \n Object3D\n \n\n \n No\n \n\n\n \n Object to add to the UI menu.\n\n \n \n \n _menuSubfolder\n \n string\n \n\n \n Yes\n \n\n\n \n Subfolder in the menu to add the geometry to. Example Folder > Subfolder.\n\n \n \n \n \n \n \n \n \n Returns : void\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n Public\n addGeometryFolder\n \n \n \n \n \n \n \n addGeometryFolder()\n \n \n\n\n \n \n Defined in src/managers/ui-manager/dat-gui-ui.ts:78\n \n \n\n\n \n \n Add geometry (detector geometry) folder to the menu.\n\n\n \n Returns : void\n\n \n \n \n \n \n \n \n \n \n \n \n Public\n addLabel\n \n \n \n \n \n \n \n addLabel(labelId: string, onRemoveLabel?: () => void)\n \n \n\n\n \n \n Defined in src/managers/ui-manager/dat-gui-ui.ts:396\n \n \n\n\n \n \n Add folder for configuration of label.\n\n\n \n Parameters :\n \n \n \n \n Name\n Type\n Optional\n Description\n \n \n \n \n labelId\n \n string\n \n\n \n No\n \n\n\n \n Unique ID of the label.\n\n \n \n \n onRemoveLabel\n \n function\n \n\n \n Yes\n \n\n\n \n Function called when label is removed.\n\n \n \n \n \n \n \n \n \n Returns : void\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n Public\n addLabelsFolder\n \n \n \n \n \n \n \n addLabelsFolder(configFunctions: any)\n \n \n\n\n \n \n Defined in src/managers/ui-manager/dat-gui-ui.ts:344\n \n \n\n\n \n \n Add labels folder to the menu.\n\n\n \n Parameters :\n \n \n \n \n Name\n Type\n Optional\n Description\n \n \n \n \n configFunctions\n \n any\n \n\n \n No\n \n\n\n \n Functions to attach to the labels folder configuration.\n\n \n \n \n \n \n \n \n \n Returns : void\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n Public\n clear\n \n \n \n \n \n \n \n clear()\n \n \n\n\n \n \n Defined in src/managers/ui-manager/dat-gui-ui.ts:67\n \n \n\n\n \n \n Clear the menu by removing all folders.\n\n\n \n Returns : void\n\n \n \n \n \n \n \n \n \n \n \n \n Public\n getEventDataTypeFolder\n \n \n \n \n \n \n \n getEventDataTypeFolder(typeName: string)\n \n \n\n\n \n \n Defined in src/managers/ui-manager/dat-gui-ui.ts:452\n \n \n\n\n \n \n Get the folder of the event data type.\n\n\n \n Parameters :\n \n \n \n \n Name\n Type\n Optional\n Description\n \n \n \n \n typeName\n \n string\n \n\n \n No\n \n\n\n \n Name of the event data type.\n\n \n \n \n \n \n \n \n \n Returns : GUI\n\n \n \n Folder of the event data type.\n\n \n \n \n \n \n \n \n \n \n \n \n Public\n removeLabel\n \n \n \n \n \n \n \n removeLabel(labelId: string, labelItemFolder?: GUI)\n \n \n\n\n \n \n Defined in src/managers/ui-manager/dat-gui-ui.ts:437\n \n \n\n\n \n \n Remove label from the menu and scene if it exists.\n\n\n \n Parameters :\n \n \n \n \n Name\n Type\n Optional\n Description\n \n \n \n \n labelId\n \n string\n \n\n \n No\n \n\n\n \n A unique label ID string.\n\n \n \n \n labelItemFolder\n \n GUI\n \n\n \n Yes\n \n\n\n \n \n \n \n \n \n \n \n \n Returns : void\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n Private\n removeOBJ\n \n \n \n \n \n \n \n removeOBJ(object: Object3D)\n \n \n\n\n \n \n Defined in src/managers/ui-manager/dat-gui-ui.ts:187\n \n \n\n\n \n \n Remove object from the dat.GUI menu.\n\n\n \n Parameters :\n \n \n \n \n Name\n Type\n Optional\n Description\n \n \n \n \n object\n \n Object3D\n \n\n \n No\n \n\n\n \n Geometry object to be removed.\n\n \n \n \n \n \n \n \n \n Returns : () => void\n\n \n \n \n \n \n \n \n \n\n\n\n\n\n\n \n\n\n \n import { GUI } from 'dat.gui';\nimport {\n BufferGeometry,\n Color,\n Mesh,\n MeshPhongMaterial,\n Object3D,\n} from 'three';\nimport { ThreeManager } from '../three-manager';\nimport { SceneManager } from '../three-manager/scene-manager';\nimport { Cut } from '../../lib/models/cut.model';\nimport { PhoenixUI } from './phoenix-ui';\n\n/**\n * A wrapper class for dat.GUI menu to perform UI related operations.\n */\nexport class DatGUIMenuUI implements PhoenixUI {\n /** Manager for managing functions of the three.js scene. */\n private sceneManager: SceneManager;\n /** dat.GUI menu. */\n private gui: GUI;\n /** Options for the dat.GUI menu. */\n private guiParameters = {\n rotate: undefined,\n axis: undefined,\n lowRes: undefined,\n eventData: undefined,\n geometries: undefined,\n labels: undefined,\n };\n /** dat.GUI menu folder containing geometries data. */\n private geomFolder: GUI;\n /** dat.GUI menu folder containing event related data. */\n private eventFolder: GUI;\n /** dat.GUI menu folder containing labels. */\n private labelsFolder: GUI;\n\n /** Max changeable position of an object along the x-axis. */\n private maxPositionX = 4000;\n /** Max changeable position of an object along the y-axis. */\n private maxPositionY = 4000;\n /** Max changeable position of an object along the z-axis. */\n private maxPositionZ = 4000;\n\n /**\n * Create dat.GUI menu UI with different controls related to detector geometry and event data.\n * @param elementId ID of the wrapper element.\n * @param three The three manager for managing three.js related operations.\n */\n constructor(elementId: string = 'eventDisplay', private three: ThreeManager) {\n this.gui = new GUI();\n this.gui.domElement.id = 'gui';\n this.gui.domElement.style.cssText =\n 'position: absolute; right: 0; top: 2rem; z-index: 11;';\n const canvas = document.getElementById(elementId) ?? document.body;\n canvas.appendChild(this.gui.domElement);\n this.geomFolder = null;\n this.eventFolder = null;\n this.labelsFolder = null;\n\n this.sceneManager = three.getSceneManager();\n }\n\n /**\n * Clear the menu by removing all folders.\n */\n public clear() {\n const gui = document.getElementById('gui');\n if (gui != null) {\n gui.remove();\n }\n this.geomFolder = null;\n }\n\n /**\n * Add geometry (detector geometry) folder to the menu.\n */\n public addGeometryFolder() {\n if (this.geomFolder === null) {\n this.geomFolder = this.gui.addFolder(SceneManager.GEOMETRIES_ID);\n }\n this.guiParameters.geometries = { show: true, wireframe: false };\n // A boolean toggle for showing/hiding the geometries is added to the 'Geometry' folder.\n const showGeometriesMenu = this.geomFolder\n .add(this.guiParameters.geometries, 'show')\n .name('Show')\n .listen();\n showGeometriesMenu.onChange((value) => {\n this.sceneManager.objectVisibility(\n this.sceneManager.getObjectByName(SceneManager.GEOMETRIES_ID),\n value\n );\n });\n // A boolean toggle for enabling/disabling the geometries' wireframing.\n const wireframeGeometriesMenu = this.geomFolder\n .add(this.guiParameters.geometries, 'wireframe')\n .name('Wireframe')\n .listen();\n wireframeGeometriesMenu.onChange((value) => {\n this.sceneManager.wireframeGeometries(value);\n });\n }\n\n /**\n * Add geometry to the menu's geometry folder and set up its configurable options.\n * @param object Object to add to the UI menu.\n * @param _menuSubfolder Subfolder in the menu to add the geometry to. Example `Folder > Subfolder`.\n */\n public addGeometry(object: Object3D, _menuSubfolder?: string) {\n const { name, material, visible } = object as Mesh;\n const color = material?.color;\n\n // A new folder for the object is added to the 'Geometry' folder\n this.guiParameters[name] = {\n show: visible,\n color: color ?? '#000000',\n x: 0,\n y: 0,\n z: 0,\n detectorOpacity: 1.0,\n remove: this.removeOBJ(object),\n scale: 1,\n };\n\n const objFolder = this.geomFolder.addFolder(name);\n // A color picker is added to the object's folder\n const colorMenu = objFolder\n .addColor(this.guiParameters[name], 'color')\n .name('Color');\n colorMenu.onChange((value) =>\n this.sceneManager.changeObjectColor(object, value)\n );\n\n const opacity = objFolder\n .add(this.guiParameters[name], 'detectorOpacity', 0.0, 1.0)\n .name('Opacity');\n opacity.onFinishChange((newValue) =>\n this.sceneManager.setGeometryOpacity(object, newValue)\n );\n\n // A boolean toggle for showing/hiding the object is added to its folder\n const showMenu = objFolder\n .add(this.guiParameters[name], 'show')\n .name('Show')\n .listen();\n showMenu.onChange((value) =>\n this.sceneManager.objectVisibility(object, value)\n );\n // Scale slider\n const scaleMenu = objFolder\n .add(this.guiParameters[name], 'scale', 0, 1000)\n .name('Scale');\n scaleMenu.onChange((value) => {\n this.sceneManager.scaleObject(object, value);\n });\n // Controls for positioning.\n // const position = this.three.getObjectPosition(name);\n objFolder\n .add(this.guiParameters[name], 'x', -this.maxPositionX, this.maxPositionX)\n .name('X')\n .onChange((value) =>\n this.sceneManager.getObjectPosition(name).setX(value)\n );\n objFolder\n .add(this.guiParameters[name], 'y', -this.maxPositionY, this.maxPositionY)\n .name('Y')\n .onChange((value) =>\n this.sceneManager.getObjectPosition(name).setY(value)\n );\n objFolder\n .add(this.guiParameters[name], 'z', -this.maxPositionZ, this.maxPositionZ)\n .name('Z')\n .onChange((value) =>\n this.sceneManager.getObjectPosition(name).setZ(value)\n );\n // Controls for deleting the obj\n objFolder.add(this.guiParameters[name], 'remove').name('Remove');\n }\n\n /**\n * Remove object from the dat.GUI menu.\n * @param object Geometry object to be removed.\n */\n private removeOBJ(object: Object3D) {\n return () => {\n const folder = this.geomFolder.__folders[object.name];\n if (folder) {\n this.geomFolder.removeFolder(folder);\n }\n this.sceneManager.removeGeometry(object);\n };\n }\n\n /**\n * Add event data folder with functions for event data toggles like show/hide and depthTest.\n */\n public addEventDataFolder() {\n // If there is already an event data folder it is deleted and we create a new one.\n if (this.eventFolder !== null) {\n this.gui.removeFolder(this.eventFolder);\n }\n\n // A new folder for the Event Data is added to the GUI.\n this.eventFolder = this.gui.addFolder('Event Data');\n this.guiParameters.eventData = { show: true, depthTest: true };\n // A boolean toggle for showing/hiding the event data is added to the 'Event Data' folder.\n const menu = this.eventFolder\n .add(this.guiParameters.eventData, 'show')\n .name('Show')\n .listen();\n menu.onChange((value) =>\n this.sceneManager.groupVisibility(SceneManager.EVENT_DATA_ID, value)\n );\n\n // A boolean toggle for enabling/disabling depthTest of event data.\n const depthTestMenu = this.eventFolder\n .add(this.guiParameters.eventData, 'depthTest')\n .name('Depth Test')\n .listen();\n depthTestMenu.onChange((value) => this.three.eventDataDepthTest(value));\n }\n\n /**\n * Add folder for event data type like tracks or hits to the menu.\n * @param typeName Name of the type of event data.\n */\n public addEventDataTypeFolder(typeName: string): void {\n const typeFolder = this.eventFolder.addFolder(typeName);\n this.guiParameters.eventData[typeName] = true;\n const menu = typeFolder\n .add(this.guiParameters.eventData, typeName)\n .name('Show')\n .listen();\n menu.onChange((value) =>\n this.sceneManager.objectVisibility(\n this.sceneManager\n .getObjectByName(SceneManager.EVENT_DATA_ID)\n .getObjectByName(typeName),\n value\n )\n );\n }\n\n /**\n * Add collection folder and its configurable options to the event data type (tracks, hits etc.) folder.\n * @param eventDataType Name of the event data type.\n * @param collectionName Name of the collection to be added in the type of event data (tracks, hits etc.).\n * @param cuts Cuts to the collection of event data that are to be made configurable to filter event data.\n * @param collectionColor Default color of the collection.\n */\n public addCollection(\n eventDataType: string,\n collectionName: string,\n cuts?: Cut[],\n collectionColor?: Color\n ) {\n const typeFolder = this.eventFolder.__folders[eventDataType];\n if (!typeFolder) {\n return;\n }\n\n // A new folder for the collection is added to the 'Event Data' folder\n this.guiParameters[collectionName] = {\n show: true,\n color: 0x000000,\n randomColor: () =>\n this.three.getColorManager().collectionColorRandom(collectionName),\n resetCut: () =>\n this.sceneManager.groupVisibility(\n collectionName,\n true,\n SceneManager.EVENT_DATA_ID\n ),\n };\n const collFolder = typeFolder.addFolder(collectionName);\n\n // A boolean toggle for showing/hiding the collection is added to its folder\n const showMenu = collFolder\n .add(this.guiParameters[collectionName], 'show')\n .name('Show')\n .listen();\n showMenu.onChange((value) => {\n const collectionObject = this.sceneManager\n .getObjectByName(SceneManager.EVENT_DATA_ID)\n .getObjectByName(collectionName);\n this.sceneManager.objectVisibility(collectionObject, value);\n });\n\n // A color picker is added to the collection's folder\n const colorMenu = collFolder\n .addColor(this.guiParameters[collectionName], 'color')\n .name('Color');\n colorMenu.onChange((value) =>\n this.three.getColorManager().collectionColor(collectionName, value)\n );\n colorMenu.setValue(collectionColor?.getHex());\n collFolder\n .add(this.guiParameters[collectionName], 'randomColor')\n .name('Random Color');\n\n // Cuts menu\n if (cuts) {\n const cutsFolder = collFolder.addFolder('Cuts');\n cutsFolder\n .add(this.guiParameters[collectionName], 'resetCut')\n .name('Reset cuts');\n\n for (const cut of cuts) {\n const minCut = cutsFolder\n .add(\n { minValue: cut.minValue },\n 'minValue',\n cut.minValue,\n cut.maxValue\n )\n .name('min ' + cut.field);\n minCut.onChange((value) => {\n cut.minValue = value;\n this.sceneManager.collectionFilter(collectionName, cuts);\n });\n const maxCut = cutsFolder\n .add(\n { maxValue: cut.maxValue },\n 'maxValue',\n cut.minValue,\n cut.maxValue\n )\n .name('max ' + cut.field);\n maxCut.onChange((value) => {\n cut.maxValue = value;\n this.sceneManager.collectionFilter(collectionName, cuts);\n });\n }\n }\n }\n\n /**\n * Add labels folder to the menu.\n * @param configFunctions Functions to attach to the labels folder configuration.\n */\n public addLabelsFolder(configFunctions: any) {\n if (this.labelsFolder !== null) {\n return;\n }\n\n const {\n onToggle,\n onSizeChange,\n onColorChange,\n onSaveLabels,\n onLoadLabels,\n } = configFunctions;\n\n this.labelsFolder = this.gui.addFolder(SceneManager.LABELS_ID);\n\n this.guiParameters.labels = {\n show: true,\n size: 1,\n color: '#a8a8a8',\n saveLabels: onSaveLabels,\n loadLabels: onLoadLabels,\n };\n\n const showMenu = this.labelsFolder\n .add(this.guiParameters.labels, 'show')\n .name('Show')\n .listen();\n showMenu.onChange(onToggle);\n\n const labelsSizeMenu = this.labelsFolder\n .add(this.guiParameters.labels, 'size', 0, 10)\n .name('Size');\n labelsSizeMenu.onFinishChange(onSizeChange);\n\n const colorMenu = this.labelsFolder\n .addColor(this.guiParameters.labels, 'color')\n .name('Color');\n colorMenu.onChange(onColorChange);\n\n this.labelsFolder\n .add(this.guiParameters.labels, 'saveLabels')\n .name('Save Labels');\n this.labelsFolder\n .add(this.guiParameters.labels, 'loadLabels')\n .name('Load Labels');\n }\n\n /**\n * Add folder for configuration of label.\n * @param labelId Unique ID of the label.\n * @param onRemoveLabel Function called when label is removed.\n */\n public addLabel(labelId: string, onRemoveLabel?: () => void) {\n this.guiParameters[labelId] = {\n show: true,\n color: 0xafafaf,\n };\n\n const labelItem = this.labelsFolder.addFolder(labelId);\n\n const visibilityToggle = labelItem\n .add(this.guiParameters[labelId], 'show')\n .name('Show')\n .listen();\n visibilityToggle.onChange((value) => {\n const labelObject = this.sceneManager\n .getObjectByName(SceneManager.LABELS_ID)\n .getObjectByName(labelId);\n this.sceneManager.objectVisibility(labelObject, value);\n });\n\n const colorMenu = labelItem\n .addColor(this.guiParameters[labelId], 'color')\n .name('Çolor');\n colorMenu.onChange((color) =>\n this.sceneManager.changeObjectColor(\n this.sceneManager.getObjectByName(labelId),\n color\n )\n );\n\n this.guiParameters[labelId]['removeLabel'] = () => {\n onRemoveLabel?.();\n this.removeLabel(labelId, labelItem);\n };\n labelItem.add(this.guiParameters[labelId], 'removeLabel').name('Remove');\n }\n\n /**\n * Remove label from the menu and scene if it exists.\n * @param labelId A unique label ID string.\n * @param labelFolderReference Reference to the label folder.\n */\n public removeLabel(labelId: string, labelItemFolder?: GUI) {\n if (!labelItemFolder) {\n labelItemFolder = this.labelsFolder.__folders[labelId];\n }\n\n if (labelItemFolder) {\n this.labelsFolder.removeFolder(labelItemFolder);\n }\n }\n\n /**\n * Get the folder of the event data type.\n * @param typeName Name of the event data type.\n * @returns Folder of the event data type.\n */\n public getEventDataTypeFolder(typeName: string): GUI {\n return this.eventFolder.__folders[typeName];\n }\n}\n\n \n\n\n\n\n\n\n\n\n\n\n \n \n results matching \"\"\n \n \n \n No results matching \"\"\n \n\n"},"classes/EffectsManager.html":{"url":"classes/EffectsManager.html","title":"class - EffectsManager","body":"\n \n\n\n\n\n\n\n\n\n\n\n\n\n\n Classes\n EffectsManager\n\n\n\n \n Info\n \n \n Source\n \n\n\n\n \n \n File\n \n \n src/managers/three-manager/effects-manager.ts\n \n\n\n \n Description\n \n \n Manager for managing three.js event display effects like outline pass and unreal bloom.\n\n \n\n\n\n\n \n Index\n \n \n \n \n Properties\n \n \n \n \n \n \n Public\n antialiasing\n \n \n Private\n camera\n \n \n Public\n composer\n \n \n Private\n defaultRenderPass\n \n \n Public\n render\n \n \n Private\n scene\n \n \n \n \n\n \n \n Methods\n \n \n \n \n \n \n Public\n addOutlinePassForSelection\n \n \n Private\n antialiasRender\n \n \n Private\n effectsRender\n \n \n Public\n removePass\n \n \n Public\n setAntialiasing\n \n \n \n \n\n\n\n\n\n \n \n\n\n \n Constructor\n \n \n \n \nconstructor(camera: Camera, scene: Scene, renderer: WebGLRenderer)\n \n \n \n \n Defined in src/managers/three-manager/effects-manager.ts:23\n \n \n\n \n \n Constructor for the effects manager which manages effects and three.js passes.\n\n \n Parameters :\n \n \n \n Name\n Type\n Optional\n Description\n \n \n \n \n camera\n \n \n Camera\n \n \n \n No\n \n \n \n The camera inside the scene.\n\n \n \n \n scene\n \n \n Scene\n \n \n \n No\n \n \n \n The default scene used for event display.\n\n \n \n \n renderer\n \n \n WebGLRenderer\n \n \n \n No\n \n \n \n The main renderer used by the event display.\n\n \n \n \n \n \n \n \n \n \n\n\n \n \n \n Properties\n \n \n \n \n \n \n \n Public\n antialiasing\n \n \n \n \n \n \n Type : boolean\n\n \n \n \n \n Default value : true\n \n \n \n \n Defined in src/managers/three-manager/effects-manager.ts:20\n \n \n\n \n \n Whether antialiasing is enabled or disabled.\n\n \n \n\n \n \n \n \n \n \n \n \n Private\n camera\n \n \n \n \n \n \n Type : Camera\n\n \n \n \n \n Defined in src/managers/three-manager/effects-manager.ts:14\n \n \n\n \n \n The camera inside the scene.\n\n \n \n\n \n \n \n \n \n \n \n \n Public\n composer\n \n \n \n \n \n \n Type : EffectComposer\n\n \n \n \n \n Defined in src/managers/three-manager/effects-manager.ts:12\n \n \n\n \n \n Effect composer for effect passes.\n\n \n \n\n \n \n \n \n \n \n \n \n Private\n defaultRenderPass\n \n \n \n \n \n \n Type : RenderPass\n\n \n \n \n \n Defined in src/managers/three-manager/effects-manager.ts:18\n \n \n\n \n \n Render pass for rendering the default scene.\n\n \n \n\n \n \n \n \n \n \n \n \n Public\n render\n \n \n \n \n \n \n Type : function\n\n \n \n \n \n Defined in src/managers/three-manager/effects-manager.ts:23\n \n \n\n \n \n Render function with (normal render) or without antialias (effects render).\n\n \n \n\n \n \n \n \n \n \n \n \n Private\n scene\n \n \n \n \n \n \n Type : Scene\n\n \n \n \n \n Defined in src/managers/three-manager/effects-manager.ts:16\n \n \n\n \n \n The default scene used for event display.\n\n \n \n\n \n \n\n\n \n \n \n Methods\n \n \n \n \n \n \n \n Public\n addOutlinePassForSelection\n \n \n \n \n \n \n \n addOutlinePassForSelection()\n \n \n\n\n \n \n Defined in src/managers/three-manager/effects-manager.ts:69\n \n \n\n\n \n \n Initialize the outline pass for highlighting hovered over event display elements.\n\n\n \n \n \n Returns : OutlinePass\n\n \n \n OutlinePass for highlighting hovered over event display elements.\n\n \n \n \n \n \n \n \n \n \n \n \n Private\n antialiasRender\n \n \n \n \n \n \n \n antialiasRender(scene: Scene, camera: Camera)\n \n \n\n\n \n \n Defined in src/managers/three-manager/effects-manager.ts:61\n \n \n\n\n \n \n Render for antialias without the effects composer.\n\n\n \n Parameters :\n \n \n \n \n Name\n Type\n Optional\n Description\n \n \n \n \n scene\n \n Scene\n \n\n \n No\n \n\n\n \n The default scene used for event display.\n\n \n \n \n camera\n \n Camera\n \n\n \n No\n \n\n\n \n The camera inside the scene.\n\n \n \n \n \n \n \n \n \n Returns : void\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n Private\n effectsRender\n \n \n \n \n \n \n \n effectsRender(scene: Scene, camera: Camera)\n \n \n\n\n \n \n Defined in src/managers/three-manager/effects-manager.ts:48\n \n \n\n\n \n \n Render the effects composer.\n\n\n \n Parameters :\n \n \n \n \n Name\n Type\n Optional\n Description\n \n \n \n \n scene\n \n Scene\n \n\n \n No\n \n\n\n \n The default scene used for event display.\n\n \n \n \n camera\n \n Camera\n \n\n \n No\n \n\n\n \n The camera inside the scene.\n\n \n \n \n \n \n \n \n \n Returns : void\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n Public\n removePass\n \n \n \n \n \n \n \n removePass(pass: Pass)\n \n \n\n\n \n \n Defined in src/managers/three-manager/effects-manager.ts:88\n \n \n\n\n \n \n Remove a pass from the effect composer.\n\n\n \n Parameters :\n \n \n \n \n Name\n Type\n Optional\n Description\n \n \n \n \n pass\n \n Pass\n \n\n \n No\n \n\n\n \n Effect pass to be removed from the effect composer.\n\n \n \n \n \n \n \n \n \n Returns : void\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n Public\n setAntialiasing\n \n \n \n \n \n \n \n setAntialiasing(antialias: boolean)\n \n \n\n\n \n \n Defined in src/managers/three-manager/effects-manager.ts:97\n \n \n\n\n \n \n Set the antialiasing of renderer.\n\n\n \n Parameters :\n \n \n \n \n Name\n Type\n Optional\n Description\n \n \n \n \n antialias\n \n boolean\n \n\n \n No\n \n\n\n \n Whether antialiasing is to enabled or disabled.\n\n \n \n \n \n \n \n \n \n Returns : void\n\n \n \n \n \n \n \n \n \n\n\n\n\n\n\n \n\n\n \n import { EffectComposer } from 'three/examples/jsm/postprocessing/EffectComposer';\nimport { Camera, Scene, WebGLRenderer, Vector2, NormalBlending } from 'three';\nimport { RenderPass } from 'three/examples/jsm/postprocessing/RenderPass';\nimport { OutlinePass } from 'three/examples/jsm/postprocessing/OutlinePass';\nimport { Pass } from 'three/examples/jsm/postprocessing/Pass';\n\n/**\n * Manager for managing three.js event display effects like outline pass and unreal bloom.\n */\nexport class EffectsManager {\n /** Effect composer for effect passes. */\n public composer: EffectComposer;\n /** The camera inside the scene. */\n private camera: Camera;\n /** The default scene used for event display. */\n private scene: Scene;\n /** Render pass for rendering the default scene. */\n private defaultRenderPass: RenderPass;\n /** Whether antialiasing is enabled or disabled. */\n public antialiasing: boolean = true;\n\n /** Render function with (normal render) or without antialias (effects render). */\n public render: (scene: Scene, camera: Camera) => void;\n\n /**\n * Constructor for the effects manager which manages effects and three.js passes.\n * @param camera The camera inside the scene.\n * @param scene The default scene used for event display.\n * @param renderer The main renderer used by the event display.\n */\n constructor(camera: Camera, scene: Scene, renderer: WebGLRenderer) {\n this.composer = new EffectComposer(renderer);\n this.camera = camera;\n this.scene = scene;\n\n this.defaultRenderPass = new RenderPass(this.scene, this.camera);\n this.composer.addPass(this.defaultRenderPass);\n\n // Set the starting render function\n this.render = this.antialiasing ? this.antialiasRender : this.effectsRender;\n }\n\n /**\n * Render the effects composer.\n * @param scene The default scene used for event display.\n * @param camera The camera inside the scene.\n */\n private effectsRender(scene: Scene, camera: Camera) {\n if (this.composer) {\n this.defaultRenderPass.camera = camera;\n this.defaultRenderPass.scene = scene;\n this.composer.render();\n }\n }\n\n /**\n * Render for antialias without the effects composer.\n * @param scene The default scene used for event display.\n * @param camera The camera inside the scene.\n */\n private antialiasRender(scene: Scene, camera: Camera) {\n this.composer.renderer.render(scene, camera);\n }\n\n /**\n * Initialize the outline pass for highlighting hovered over event display elements.\n * @returns OutlinePass for highlighting hovered over event display elements.\n */\n public addOutlinePassForSelection(): OutlinePass {\n const outlinePass = new OutlinePass(\n new Vector2(window.innerWidth, window.innerHeight),\n this.scene,\n this.camera\n );\n outlinePass.overlayMaterial.blending = NormalBlending;\n outlinePass.visibleEdgeColor.set(0xffff66);\n outlinePass.visibleEdgeColor.set(0xdf5330);\n\n this.composer.addPass(outlinePass);\n\n return outlinePass;\n }\n\n /**\n * Remove a pass from the effect composer.\n * @param pass Effect pass to be removed from the effect composer.\n */\n public removePass(pass: Pass) {\n const passIndex = this.composer.passes.indexOf(pass);\n this.composer.passes.splice(passIndex, 1);\n }\n\n /**\n * Set the antialiasing of renderer.\n * @param antialias Whether antialiasing is to enabled or disabled.\n */\n public setAntialiasing(antialias: boolean) {\n this.antialiasing = antialias;\n this.render = this.antialiasing ? this.antialiasRender : this.effectsRender;\n }\n}\n\n \n\n\n\n\n\n\n\n\n\n\n \n \n results matching \"\"\n \n \n \n No results matching \"\"\n \n\n"},"interfaces/EventDataLoader.html":{"url":"interfaces/EventDataLoader.html","title":"interface - EventDataLoader","body":"\n \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n Interfaces\n \n EventDataLoader\n\n\n\n \n Info\n \n \n Source\n \n\n\n\n \n \n File\n \n \n src/loaders/event-data-loader.ts\n \n\n\n \n Description\n \n \n Event data loader for implementing different event data loaders.\n\n \n\n\n \n Index\n \n \n \n \n Methods\n \n \n \n \n \n \n \n addLabelToEventObject\n \n \n \n \n buildEventData\n \n \n \n \n getCollection\n \n \n \n \n getCollections\n \n \n \n \n getEventMetadata\n \n \n \n \n getEventsList\n \n \n \n \n getLabelsObject\n \n \n \n \n \n \n \n \n\n \n \n \n Methods\n \n \n \n \n \n \n \n addLabelToEventObject\n \n \n \n \n \n \naddLabelToEventObject(label: string, collection: string, indexInCollection: number)\n \n \n\n\n \n \n Defined in src/loaders/event-data-loader.ts:57\n \n \n\n\n \n \n Add label of event object to the labels object.\n\n\n \n Parameters :\n \n \n \n \n Name\n Type\n Optional\n Description\n \n \n \n \n label\n \n string\n \n\n \n No\n \n\n\n \n Label to add to the event object.\n\n \n \n \n collection\n \n string\n \n\n \n No\n \n\n\n \n Collection the event object is a part of.\n\n \n \n \n indexInCollection\n \n number\n \n\n \n No\n \n\n\n \n Event object's index in collection.\n\n \n \n \n \n \n \n \n \n Returns : string\n\n \n \n A unique label ID string.\n\n \n \n \n \n \n \n \n \n \n \n \n buildEventData\n \n \n \n \n \n \nbuildEventData(eventData: any, graphicsLibrary: ThreeManager, ui: UIManager, infoLogger: InfoLogger)\n \n \n\n\n \n \n Defined in src/loaders/event-data-loader.ts:17\n \n \n\n\n \n \n Takes an object that represents ONE event and takes care of adding\nthe different objects to the graphic library and the UI controls.\n\n\n \n Parameters :\n \n \n \n \n Name\n Type\n Optional\n Description\n \n \n \n \n eventData\n \n any\n \n\n \n No\n \n\n\n \n Object representing the event.\n\n \n \n \n graphicsLibrary\n \n ThreeManager\n \n\n \n No\n \n\n\n \n Manager containing functionality to draw the 3D objects.\n\n \n \n \n ui\n \n UIManager\n \n\n \n No\n \n\n\n \n Manager for showing menus and controls to manipulate the geometries.\n\n \n \n \n infoLogger\n \n InfoLogger\n \n\n \n No\n \n\n\n \n Logger for logging event display data..\n\n \n \n \n \n \n \n \n \n Returns : void\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n getCollection\n \n \n \n \n \n \ngetCollection(collectionName: string)\n \n \n\n\n \n \n Defined in src/loaders/event-data-loader.ts:42\n \n \n\n\n \n \n Get all the objects inside a collection.\n\n\n \n Parameters :\n \n \n \n \n Name\n Type\n Optional\n Description\n \n \n \n \n collectionName\n \n string\n \n\n \n No\n \n\n\n \n Key of the collection that will be retrieved.\n\n \n \n \n \n \n \n \n \n Returns : any\n\n \n \n Object containing all physics objects from the desired collection.\n\n \n \n \n \n \n \n \n \n \n \n \n getCollections\n \n \n \n \n \n \ngetCollections()\n \n \n\n\n \n \n Defined in src/loaders/event-data-loader.ts:35\n \n \n\n\n \n \n Get the different collections for the current stored event.\n\n\n \n \n \n Returns : string[]\n\n \n \n List of strings, each representing a collection of the event displayed.\n\n \n \n \n \n \n \n \n \n \n \n \n getEventMetadata\n \n \n \n \n \n \ngetEventMetadata()\n \n \n\n\n \n \n Defined in src/loaders/event-data-loader.ts:48\n \n \n\n\n \n \n Get metadata associated to the displayed event (experiment info, time, run, event...).\n\n\n \n \n \n Returns : any[]\n\n \n \n Metadata of the displayed event.\n\n \n \n \n \n \n \n \n \n \n \n \n getEventsList\n \n \n \n \n \n \ngetEventsList(eventsData: any)\n \n \n\n\n \n \n Defined in src/loaders/event-data-loader.ts:29\n \n \n\n\n \n \n Takes an object containing multiple events and returns the keys of these events.\n\n\n \n Parameters :\n \n \n \n \n Name\n Type\n Optional\n Description\n \n \n \n \n eventsData\n \n any\n \n\n \n No\n \n\n\n \n Object that contains the different events.\n\n \n \n \n \n \n \n \n \n Returns : string[]\n\n \n \n List of keys of the different events.\n\n \n \n \n \n \n \n \n \n \n \n \n getLabelsObject\n \n \n \n \n \n \ngetLabelsObject()\n \n \n\n\n \n \n Defined in src/loaders/event-data-loader.ts:67\n \n \n\n\n \n \n Get the object containing labels.\n\n\n \n \n \n Returns : literal type\n\n \n \n The labels object.\n\n \n \n \n \n \n\n\n \n\n\n \n import { ThreeManager } from '../managers/three-manager';\nimport { UIManager } from '../managers/ui-manager';\nimport { InfoLogger } from '../helpers/info-logger';\n\n/**\n * Event data loader for implementing different event data loaders.\n */\nexport interface EventDataLoader {\n /**\n * Takes an object that represents ONE event and takes care of adding\n * the different objects to the graphic library and the UI controls.\n * @param eventData Object representing the event.\n * @param graphicsLibrary Manager containing functionality to draw the 3D objects.\n * @param ui Manager for showing menus and controls to manipulate the geometries.\n * @param infoLogger Logger for logging event display data..\n */\n buildEventData(\n eventData: any,\n graphicsLibrary: ThreeManager,\n ui: UIManager,\n infoLogger: InfoLogger\n ): void;\n\n /**\n * Takes an object containing multiple events and returns the keys of these events.\n * @param eventsData Object that contains the different events.\n * @returns List of keys of the different events.\n */\n getEventsList(eventsData: any): string[];\n\n /**\n * Get the different collections for the current stored event.\n * @returns List of strings, each representing a collection of the event displayed.\n */\n getCollections(): string[];\n\n /**\n * Get all the objects inside a collection.\n * @param collectionName Key of the collection that will be retrieved.\n * @returns Object containing all physics objects from the desired collection.\n */\n getCollection(collectionName: string): any;\n\n /**\n * Get metadata associated to the displayed event (experiment info, time, run, event...).\n * @returns Metadata of the displayed event.\n */\n getEventMetadata(): any[];\n\n /**\n * Add label of event object to the labels object.\n * @param label Label to add to the event object.\n * @param collection Collection the event object is a part of.\n * @param indexInCollection Event object's index in collection.\n * @returns A unique label ID string.\n */\n addLabelToEventObject(\n label: string,\n collection: string,\n indexInCollection: number\n ): string;\n\n /**\n * Get the object containing labels.\n * @returns The labels object.\n */\n getLabelsObject(): { [key: string]: any };\n}\n\n \n\n\n\n\n\n\n\n\n\n \n \n results matching \"\"\n \n \n \n No results matching \"\"\n \n\n"},"classes/ExportManager.html":{"url":"classes/ExportManager.html","title":"class - ExportManager","body":"\n \n\n\n\n\n\n\n\n\n\n\n\n\n\n Classes\n ExportManager\n\n\n\n \n Info\n \n \n Source\n \n\n\n\n \n \n File\n \n \n src/managers/three-manager/export-manager.ts\n \n\n\n \n Description\n \n \n Manager for managing event display's export related functionality.\n\n \n\n\n\n\n \n Index\n \n \n\n \n \n Methods\n \n \n \n \n \n \n Public\n exportPhoenixScene\n \n \n Public\n exportSceneToOBJ\n \n \n Private\n saveEventDataConfiguration\n \n \n Private\n saveGeometriesConfiguration\n \n \n Private\n saveSceneConfig\n \n \n \n \n\n\n\n\n\n \n \n\n\n\n\n \n \n \n Methods\n \n \n \n \n \n \n \n Public\n exportPhoenixScene\n \n \n \n \n \n \n \n exportPhoenixScene(scene: Scene, eventData: Object3D, geometries: Object3D)\n \n \n\n\n \n \n Defined in src/managers/three-manager/export-manager.ts:27\n \n \n\n\n \n \n Exports scene as phoenix format, allowing to load it later and recover the saved configuration.\n\n\n \n Parameters :\n \n \n \n \n Name\n Type\n Optional\n Description\n \n \n \n \n scene\n \n Scene\n \n\n \n No\n \n\n\n \n The scene to be exported.\n\n \n \n \n eventData\n \n Object3D\n \n\n \n No\n \n\n\n \n Currently loaded event data.\n\n \n \n \n geometries\n \n Object3D\n \n\n \n No\n \n\n\n \n Currently loaded geometries.\n\n \n \n \n \n \n \n \n \n Returns : void\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n Public\n exportSceneToOBJ\n \n \n \n \n \n \n \n exportSceneToOBJ(scene: Scene)\n \n \n\n\n \n \n Defined in src/managers/three-manager/export-manager.ts:14\n \n \n\n\n \n \n Exports scene to OBJ file format.\n\n\n \n Parameters :\n \n \n \n \n Name\n Type\n Optional\n Description\n \n \n \n \n scene\n \n Scene\n \n\n \n No\n \n\n\n \n The scene to be exported.\n\n \n \n \n \n \n \n \n \n Returns : void\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n Private\n saveEventDataConfiguration\n \n \n \n \n \n \n \n saveEventDataConfiguration(eventData: any)\n \n \n\n\n \n \n Defined in src/managers/three-manager/export-manager.ts:66\n \n \n\n\n \n \n Save the configuration of the currently loaded event data.\n\n\n \n Parameters :\n \n \n \n \n Name\n Type\n Optional\n Description\n \n \n \n \n eventData\n \n any\n \n\n \n No\n \n\n\n \n Currently loaded event data.\n\n \n \n \n \n \n \n \n \n Returns : {}\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n Private\n saveGeometriesConfiguration\n \n \n \n \n \n \n \n saveGeometriesConfiguration(geometries: Object3D)\n \n \n\n\n \n \n Defined in src/managers/three-manager/export-manager.ts:85\n \n \n\n\n \n \n Save the configuration of the currently loaded geometries.\n\n\n \n Parameters :\n \n \n \n \n Name\n Type\n Optional\n Description\n \n \n \n \n geometries\n \n Object3D\n \n\n \n No\n \n\n\n \n Currently loaded geometries.\n\n \n \n \n \n \n \n \n \n Returns : {}\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n Private\n saveSceneConfig\n \n \n \n \n \n \n \n saveSceneConfig(eventData: Object3D, geometries: Object3D)\n \n \n\n\n \n \n Defined in src/managers/three-manager/export-manager.ts:52\n \n \n\n\n \n \n Save the configuration of the currently loaded scene including event data and geometries.\n\n\n \n Parameters :\n \n \n \n \n Name\n Type\n Optional\n Description\n \n \n \n \n eventData\n \n Object3D\n \n\n \n No\n \n\n\n \n Curently loaded event data.\n\n \n \n \n geometries\n \n Object3D\n \n\n \n No\n \n\n\n \n Currently loaded geometries.\n\n \n \n \n \n \n \n \n \n Returns : { eventData: {}; geometries: {}; }\n\n \n \n \n \n \n \n \n \n\n\n\n\n\n\n \n\n\n \n import { OBJExporter } from 'three/examples/jsm/exporters/OBJExporter';\nimport { Scene, Object3D } from 'three';\nimport { GLTFExporter } from 'three/examples/jsm/exporters/GLTFExporter';\nimport { saveFile } from '../../helpers/file';\n\n/**\n * Manager for managing event display's export related functionality.\n */\nexport class ExportManager {\n /**\n * Exports scene to OBJ file format.\n * @param scene The scene to be exported.\n */\n public exportSceneToOBJ(scene: Scene) {\n // Instantiate a exporter\n const exporter = new OBJExporter();\n const result = exporter.parse(scene);\n saveFile(result, 'phoenix-obj.obj', 'text/plain');\n }\n\n /**\n * Exports scene as phoenix format, allowing to load it later and recover the saved configuration.\n * @param scene The scene to be exported.\n * @param eventData Currently loaded event data.\n * @param geometries Currently loaded geometries.\n */\n public exportPhoenixScene(\n scene: Scene,\n eventData: Object3D,\n geometries: Object3D\n ) {\n const exporter = new GLTFExporter();\n\n const sceneConfig = this.saveSceneConfig(eventData, geometries);\n // Parse the input and generate the glTF output\n exporter.parse(\n scene,\n (result) => {\n const jsonResult = { sceneConfiguration: sceneConfig, scene: result };\n const output = JSON.stringify(jsonResult, null, 2);\n saveFile(output, 'phoenix-scene.phnx', 'text/plain');\n },\n null\n );\n }\n\n /**\n * Save the configuration of the currently loaded scene including event data and geometries.\n * @param eventData Curently loaded event data.\n * @param geometries Currently loaded geometries.\n */\n private saveSceneConfig(eventData: Object3D, geometries: Object3D) {\n const eventDataConfig = this.saveEventDataConfiguration(eventData);\n const geometriesConfig = this.saveGeometriesConfiguration(geometries);\n const sceneConfig = {\n eventData: eventDataConfig,\n geometries: geometriesConfig,\n };\n return sceneConfig;\n }\n\n /**\n * Save the configuration of the currently loaded event data.\n * @param eventData Currently loaded event data.\n */\n private saveEventDataConfiguration(eventData: any) {\n const eventDataConfig = {};\n for (const objectType of eventData.children) {\n if (objectType.name) {\n eventDataConfig[objectType.name] = [];\n for (const collection of objectType.children) {\n if (collection.name) {\n eventDataConfig[objectType.name].push(collection.name);\n }\n }\n }\n }\n return eventDataConfig;\n }\n\n /**\n * Save the configuration of the currently loaded geometries.\n * @param geometries Currently loaded geometries.\n */\n private saveGeometriesConfiguration(geometries: Object3D) {\n const geometriesConfig = [];\n geometries.children.forEach((object) => {\n if (object.name !== 'EventData') {\n geometriesConfig.push(object.name);\n }\n });\n return geometriesConfig;\n }\n}\n\n \n\n\n\n\n\n\n\n\n\n\n \n \n results matching \"\"\n \n \n \n No results matching \"\"\n \n\n"},"classes/Field.html":{"url":"classes/Field.html","title":"class - Field","body":"\n \n\n\n\n\n\n\n\n\n\n\n\n\n\n Classes\n Field\n\n\n\n \n Info\n \n \n Source\n \n\n\n\n \n \n File\n \n \n src/helpers/runge-kutta.ts\n \n\n\n \n Description\n \n \n Default class to define the field.\n\n \n\n\n\n\n \n Index\n \n \n\n \n \n Methods\n \n \n \n \n \n \n Static\n get\n \n \n \n \n\n\n\n\n\n \n \n\n\n\n\n \n \n \n Methods\n \n \n \n \n \n \n \n Static\n get\n \n \n \n \n \n \n \n get(field: Vector3)\n \n \n\n\n \n \n Defined in src/helpers/runge-kutta.ts:192\n \n \n\n\n \n \n Returns field as a Vector3 in Tesla.\n\n\n \n Parameters :\n \n \n \n \n Name\n Type\n Optional\n \n \n \n \n field\n \n Vector3\n \n\n \n No\n \n\n\n \n \n \n \n \n \n \n Returns : Vector3\n\n \n \n \n \n \n \n \n \n\n\n\n\n\n\n \n\n\n \n import { Vector3 } from 'three';\n\n/**\n * Class for performing Runge-Kutta operations.\n */\nexport class RungeKutta {\n /**\n * Perform a Runge-Kutta step for the given state.\n * @param state State at which the step is to be performed.\n * @returns The computed step size.\n */\n static step(state: State): number {\n // Charge (q) to momentum (p) ratio in SI units\n const qop: number = state.q / (state.unitC * state.p);\n\n // Runge-Kutta integrator state\n let h2: number,\n half_h: number,\n B_middle: Vector3,\n B_last: Vector3,\n k2: Vector3,\n k3: Vector3,\n k4: Vector3;\n\n // First Runge-Kutta point (at current position)\n const B_first: Vector3 = Field.get(state.pos);\n // state.dir.cross(B_first) * qop\n const k1: Vector3 = state.dir.clone().cross(B_first).multiplyScalar(qop);\n\n // Try Runge-Kutta step with h as the step size\n const tryRungeKuttaStep = (h: number) => {\n h2 = h * h;\n half_h = h / 2;\n\n // Second Runge-Kutta point\n // state.pos + state.dir * half_h + k1 * (h2 / 8)\n const pos1: Vector3 = state.pos\n .clone()\n .add(state.dir.clone().multiplyScalar(half_h))\n .add(k1.clone().multiplyScalar(h2 / 8));\n B_middle = Field.get(pos1);\n // (state.dir + k1 * half_h).cross(B_middle) * qop\n k2 = state.dir\n .clone()\n .add(k1.clone().multiplyScalar(half_h))\n .cross(B_middle)\n .multiplyScalar(qop);\n\n // Third Runge-Kutta point\n // (state.dir + k2 * half_h).cross(B_middle) * qop\n k3 = state.dir\n .clone()\n .add(k2.clone().multiplyScalar(half_h))\n .cross(B_middle)\n .multiplyScalar(qop);\n\n // Last Runge-Kutta point\n // state.pos + state.dir * h + k3 * (h2 / 2)\n const pos2: Vector3 = state.pos\n .clone()\n .add(state.dir.clone().multiplyScalar(h))\n .add(k3.clone().multiplyScalar(h2 / 2));\n B_last = Field.get(pos2);\n // (state.dir + k3 * h).cross(B_last) * qop\n k4 = state.dir\n .clone()\n .add(k3.clone().multiplyScalar(h))\n .cross(B_last)\n .multiplyScalar(qop);\n\n // (k1 - k2 - k3 + k4)\n const returnVec = k1.clone().sub(k2).sub(k3).add(k4);\n // h * (k1 - k2 - k3 + k4).lpNorm()\n return (\n h *\n (Math.abs(returnVec.x) + Math.abs(returnVec.y) + Math.abs(returnVec.z))\n );\n };\n\n // Checking the error estimate\n let error_estimate: number = tryRungeKuttaStep(state.stepSize);\n while (error_estimate > 0.0002) {\n state.stepSize *= 0.5;\n error_estimate = tryRungeKuttaStep(state.stepSize);\n }\n\n const fh: number = state.stepSize;\n const fh2: number = Math.pow(fh, 2);\n\n // Update position and momentum\n // state.pos += state.dir * fh + (k1 + k2 + k3) * (fh2 /6)\n state.pos.add(state.dir.clone().multiplyScalar(fh)).add(\n k1\n .clone()\n .add(k2)\n .add(k3)\n .multiplyScalar(fh2 / 6)\n );\n // state.dir += (k1 + k2 * 2 + k3 * 2 + k4) * (fh / 6)\n state.dir.add(\n k1\n .clone()\n .add(k2.clone().multiplyScalar(2))\n .add(k3.clone().multiplyScalar(2))\n .add(k4)\n .multiplyScalar(fh / 6)\n );\n state.dir.normalize();\n\n return state.stepSize;\n }\n\n /**\n * Propagate using the given properties by performing the Runge-Kutta steps.\n * @param startPos Starting position in 3D space.\n * @param startDir Starting direction in 3D space.\n * @param p Momentum.\n * @param q Charge.\n * @param mss Max step size.\n * @param plength Path length.\n * @param inbounds Function which returns true until the passed position\n * is out of bounds, when it returns false.\n * @returns An array containing position and direction at that position calculated\n * through the Runge-Kutta steps.\n */\n static propagate(\n startPos: Vector3,\n startDir: Vector3,\n p: number,\n q: number,\n mss: number = -1,\n plength: number = 1000,\n inbounds: (pos: Vector3) => boolean = () => true\n ): { pos: Vector3; dir: Vector3 }[] {\n const rkState: State = new State();\n rkState.pos = startPos;\n rkState.dir = startDir;\n rkState.p = p;\n rkState.q = q;\n rkState.maxStepSize = mss;\n\n const result: { pos: Vector3; dir: Vector3 }[] = [];\n\n while (rkState.pathLength \n \n\n\n\n\n\n\n\n\n\n\n \n \n results matching \"\"\n \n \n \n No results matching \"\"\n \n\n"},"classes/InfoLogger.html":{"url":"classes/InfoLogger.html","title":"class - InfoLogger","body":"\n \n\n\n\n\n\n\n\n\n\n\n\n\n\n Classes\n InfoLogger\n\n\n\n \n Info\n \n \n Source\n \n\n\n\n \n \n File\n \n \n src/helpers/info-logger.ts\n \n\n\n \n Description\n \n \n Logger for logging event display data\n\n \n\n\n\n\n \n Index\n \n \n \n \n Properties\n \n \n \n \n \n \n Private\n infoLoggerList\n \n \n Private\n maxEntries\n \n \n \n \n\n \n \n Methods\n \n \n \n \n \n \n add\n \n \n getInfoLoggerList\n \n \n \n \n\n\n\n\n\n \n \n\n\n\n \n \n \n Properties\n \n \n \n \n \n \n \n Private\n infoLoggerList\n \n \n \n \n \n \n Type : any[]\n\n \n \n \n \n Default value : []\n \n \n \n \n Defined in src/helpers/info-logger.ts:6\n \n \n\n \n \n List that contains all the info logs\n\n \n \n\n \n \n \n \n \n \n \n \n Private\n maxEntries\n \n \n \n \n \n \n Type : number\n\n \n \n \n \n Default value : 10\n \n \n \n \n Defined in src/helpers/info-logger.ts:8\n \n \n\n \n \n Max entries to be shown inside the information panel\n\n \n \n\n \n \n\n\n \n \n \n Methods\n \n \n \n \n \n \n \n add\n \n \n \n \n \n \nadd(data: string, label?: string)\n \n \n\n\n \n \n Defined in src/helpers/info-logger.ts:15\n \n \n\n\n \n \n Add an entry to the info logger\n\n\n \n Parameters :\n \n \n \n \n Name\n Type\n Optional\n Description\n \n \n \n \n data\n \n string\n \n\n \n No\n \n\n\n \n Data of the info log\n\n \n \n \n label\n \n string\n \n\n \n Yes\n \n\n\n \n Label of the info log\n\n \n \n \n \n \n \n \n \n Returns : void\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n getInfoLoggerList\n \n \n \n \n \n \ngetInfoLoggerList()\n \n \n\n\n \n \n Defined in src/helpers/info-logger.ts:26\n \n \n\n\n \n \n Get the info logger list being used by the info logger service\n\n\n \n \n \n Returns : any[]\n\n \n \n The info logger list containing log data\n\n \n \n \n \n \n\n\n\n\n\n\n \n\n\n \n export class InfoLogger {\n /** List that contains all the info logs */\n private infoLoggerList: any[] = [];\n /** Max entries to be shown inside the information panel */\n private maxEntries: number = 10;\n\n /**\n * Add an entry to the info logger\n * @param data Data of the info log\n * @param label Label of the info log\n */\n add(data: string, label?: string) {\n if (this.infoLoggerList.length > this.maxEntries) {\n this.infoLoggerList.pop();\n }\n this.infoLoggerList.unshift(label ? label + ': ' + data : data);\n }\n\n /**\n * Get the info logger list being used by the info logger service\n * @returns The info logger list containing log data\n */\n getInfoLoggerList(): any[] {\n return this.infoLoggerList;\n }\n}\n\n \n\n\n\n\n\n\n\n\n\n\n \n \n results matching \"\"\n \n \n \n No results matching \"\"\n \n\n"},"classes/LoadingManager.html":{"url":"classes/LoadingManager.html","title":"class - LoadingManager","body":"\n \n\n\n\n\n\n\n\n\n\n\n\n\n\n Classes\n LoadingManager\n\n\n\n \n Info\n \n \n Source\n \n\n\n\n \n \n File\n \n \n src/managers/loading-manager.ts\n \n\n\n \n Description\n \n \n Phoenix loading manager for managing loadable items.\n\n \n\n\n\n\n \n Index\n \n \n \n \n Properties\n \n \n \n \n \n \n Private\n Static\n instance\n \n \n Public\n loaded\n \n \n Private\n onLoadCallbacks\n \n \n Private\n onProgressCallbacks\n \n \n Private\n progressItems\n \n \n Public\n toLoad\n \n \n \n \n\n \n \n Methods\n \n \n \n \n \n \n Public\n addLoadableItem\n \n \n Public\n addLoadListener\n \n \n Public\n addLoadListenerWithCheck\n \n \n Public\n addProgressListener\n \n \n Public\n itemLoaded\n \n \n Public\n onProgress\n \n \n Public\n reset\n \n \n \n \n\n\n\n\n\n \n \n\n\n \n Constructor\n \n \n \n \nconstructor()\n \n \n \n \n Defined in src/managers/loading-manager.ts:19\n \n \n\n \n \n Create the singleton Phoenix loading manager.\n\n \n \n \n \n\n\n \n \n \n Properties\n \n \n \n \n \n \n \n Private\n Static\n instance\n \n \n \n \n \n \n Type : LoadingManager\n\n \n \n \n \n Defined in src/managers/loading-manager.ts:6\n \n \n\n \n \n Instance of the loading manager\n\n \n \n\n \n \n \n \n \n \n \n \n Public\n loaded\n \n \n \n \n \n \n Type : string[]\n\n \n \n \n \n Default value : []\n \n \n \n \n Defined in src/managers/loading-manager.ts:11\n \n \n\n \n \n Items loaded\n\n \n \n\n \n \n \n \n \n \n \n \n Private\n onLoadCallbacks\n \n \n \n \n \n \n Type : (function)[]\n\n \n \n \n \n Default value : []\n \n \n \n \n Defined in src/managers/loading-manager.ts:14\n \n \n\n \n \n Callbacks to call on load.\n\n \n \n\n \n \n \n \n \n \n \n \n Private\n onProgressCallbacks\n \n \n \n \n \n \n Type : (function)[]\n\n \n \n \n \n Default value : []\n \n \n \n \n Defined in src/managers/loading-manager.ts:16\n \n \n\n \n \n Callbacks to call on progress.\n\n \n \n\n \n \n \n \n \n \n \n \n Private\n progressItems\n \n \n \n \n \n \n Type : literal type\n\n \n \n \n \n Default value : {}\n \n \n \n \n Defined in src/managers/loading-manager.ts:19\n \n \n\n \n \n Progress for each named item.\n\n \n \n\n \n \n \n \n \n \n \n \n Public\n toLoad\n \n \n \n \n \n \n Type : string[]\n\n \n \n \n \n Default value : []\n \n \n \n \n Defined in src/managers/loading-manager.ts:9\n \n \n\n \n \n Items to load.\n\n \n \n\n \n \n\n\n \n \n \n Methods\n \n \n \n \n \n \n \n Public\n addLoadableItem\n \n \n \n \n \n \n \n addLoadableItem(id: string)\n \n \n\n\n \n \n Defined in src/managers/loading-manager.ts:37\n \n \n\n\n \n \n Add an item which is to be loaded.\n\n\n \n Parameters :\n \n \n \n \n Name\n Type\n Optional\n Default value\n Description\n \n \n \n \n id\n \n string\n \n\n \n No\n \n\n \n ''\n \n\n \n ID of the item to be loaded.\n\n \n \n \n \n \n \n \n \n Returns : void\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n Public\n addLoadListener\n \n \n \n \n \n \n \n addLoadListener(callback: () => void)\n \n \n\n\n \n \n Defined in src/managers/loading-manager.ts:84\n \n \n\n\n \n \n Add a listener for when all items have loaded.\n\n\n \n Parameters :\n \n \n \n \n Name\n Type\n Optional\n Description\n \n \n \n \n callback\n \n function\n \n\n \n No\n \n\n\n \n Callback to call when all items have loaded.\n\n \n \n \n \n \n \n \n \n Returns : void\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n Public\n addLoadListenerWithCheck\n \n \n \n \n \n \n \n addLoadListenerWithCheck(callback: () => void)\n \n \n\n\n \n \n Defined in src/managers/loading-manager.ts:93\n \n \n\n\n \n \n Add a listener for when all items have loaded with check if there\nare any items to load when the listener is added.\n\n\n \n Parameters :\n \n \n \n \n Name\n Type\n Optional\n Description\n \n \n \n \n callback\n \n function\n \n\n \n No\n \n\n\n \n Callback to call when all items have loaded.\n\n \n \n \n \n \n \n \n \n Returns : void\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n Public\n addProgressListener\n \n \n \n \n \n \n \n addProgressListener(callback: (progress: number) => void)\n \n \n\n\n \n \n Defined in src/managers/loading-manager.ts:105\n \n \n\n\n \n \n Add a callback to listen when the progress of an item increases.\n\n\n \n Parameters :\n \n \n \n \n Name\n Type\n Optional\n Description\n \n \n \n \n callback\n \n function\n \n\n \n No\n \n\n\n \n Callback to call when the progress of a loading item increases.\n\n \n \n \n \n \n \n \n \n Returns : void\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n Public\n itemLoaded\n \n \n \n \n \n \n \n itemLoaded(id: string)\n \n \n\n\n \n \n Defined in src/managers/loading-manager.ts:46\n \n \n\n\n \n \n Function to call when an item has finished loading.\n\n\n \n Parameters :\n \n \n \n \n Name\n Type\n Optional\n Default value\n Description\n \n \n \n \n id\n \n string\n \n\n \n No\n \n\n \n ''\n \n\n \n ID of the item loaded.\n\n \n \n \n \n \n \n \n \n Returns : void\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n Public\n onProgress\n \n \n \n \n \n \n \n onProgress(id: string, progress: number)\n \n \n\n\n \n \n Defined in src/managers/loading-manager.ts:64\n \n \n\n\n \n \n Function to call when loading of an item progresses.\n\n\n \n Parameters :\n \n \n \n \n Name\n Type\n Optional\n Description\n \n \n \n \n id\n \n string\n \n\n \n No\n \n\n\n \n ID of the item with the progress.\n\n \n \n \n progress\n \n number\n \n\n \n No\n \n\n\n \n Progress of the item.\n\n \n \n \n \n \n \n \n \n Returns : void\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n Public\n reset\n \n \n \n \n \n \n \n reset()\n \n \n\n\n \n \n Defined in src/managers/loading-manager.ts:112\n \n \n\n\n \n \n Reset the loading manager and its items.\n\n\n \n Returns : void\n\n \n \n \n \n \n\n\n\n\n\n\n \n\n\n \n export class LoadingManager {\n /** Instance of the loading manager */\n private static instance: LoadingManager;\n\n /** Items to load. */\n public toLoad: string[] = [];\n /** Items loaded */\n public loaded: string[] = [];\n\n /** Callbacks to call on load. */\n private onLoadCallbacks: (() => void)[] = [];\n /** Callbacks to call on progress. */\n private onProgressCallbacks: ((progress: number) => void)[] = [];\n\n /** Progress for each named item. */\n private progressItems: { [key: string]: number } = {};\n\n /**\n * Create the singleton Phoenix loading manager.\n * @returns The loading manager instance.\n */\n constructor() {\n if (LoadingManager.instance === undefined) {\n LoadingManager.instance = this;\n }\n\n return LoadingManager.instance;\n }\n\n /**\n * Add an item which is to be loaded.\n * @param id ID of the item to be loaded.\n */\n public addLoadableItem(id: string = '') {\n this.toLoad.push(id);\n this.progressItems[id] = 0;\n }\n\n /**\n * Function to call when an item has finished loading.\n * @param id ID of the item loaded.\n */\n public itemLoaded(id: string = '') {\n this.loaded.push(id);\n this.onProgress(id, 100);\n\n if (\n this.toLoad.length === this.loaded.length &&\n this.toLoad.sort().join(',') === this.loaded.sort().join(',')\n ) {\n this.onLoadCallbacks.forEach((callback) => callback());\n this.reset();\n }\n }\n\n /**\n * Function to call when loading of an item progresses.\n * @param id ID of the item with the progress.\n * @param progress Progress of the item.\n */\n public onProgress(id: string, progress: number) {\n this.progressItems[id] = progress;\n\n const totalProgress = Object.values(this.progressItems).reduce(\n (acc, val) => acc + val,\n 0\n );\n const totalItems = Object.keys(this.progressItems).length;\n\n const averageProgress = totalProgress / totalItems;\n\n for (const callback of this.onProgressCallbacks) {\n callback(averageProgress);\n }\n }\n\n /**\n * Add a listener for when all items have loaded.\n * @param callback Callback to call when all items have loaded.\n */\n public addLoadListener(callback: () => void) {\n this.onLoadCallbacks.push(callback);\n }\n\n /**\n * Add a listener for when all items have loaded with check if there\n * are any items to load when the listener is added.\n * @param callback Callback to call when all items have loaded.\n */\n public addLoadListenerWithCheck(callback: () => void) {\n if (this.toLoad.length > 0 && this.toLoad.length !== this.loaded.length) {\n this.onLoadCallbacks.push(callback);\n } else {\n callback();\n }\n }\n\n /**\n * Add a callback to listen when the progress of an item increases.\n * @param callback Callback to call when the progress of a loading item increases.\n */\n public addProgressListener(callback: (progress: number) => void) {\n this.onProgressCallbacks.push(callback);\n }\n\n /**\n * Reset the loading manager and its items.\n */\n public reset() {\n this.toLoad = [];\n this.loaded = [];\n this.onLoadCallbacks = [];\n this.onProgressCallbacks = [];\n this.progressItems = {};\n }\n}\n\n \n\n\n\n\n\n\n\n\n\n\n \n \n results matching \"\"\n \n \n \n No results matching \"\"\n \n\n"},"classes/PhoenixMenuNode.html":{"url":"classes/PhoenixMenuNode.html","title":"class - PhoenixMenuNode","body":"\n \n\n\n\n\n\n\n\n\n\n\n\n\n\n Classes\n PhoenixMenuNode\n\n\n\n \n Info\n \n \n Source\n \n\n\n\n \n \n File\n \n \n src/managers/ui-manager/phoenix-menu/phoenix-menu-node.ts\n \n\n\n \n Description\n \n \n A single node of phoenix menu item.\n\n \n\n\n\n\n \n Index\n \n \n \n \n Properties\n \n \n \n \n \n \n children\n \n \n childrenActive\n \n \n Private\n childrenToggleState\n \n \n configActive\n \n \n configs\n \n \n icon\n \n \n name\n \n \n nodeLevel\n \n \n onToggle\n \n \n Private\n parent\n \n \n toggleState\n \n \n \n \n\n \n \n Methods\n \n \n \n \n \n \n addChild\n \n \n addConfig\n \n \n applyConfigState\n \n \n findInTree\n \n \n findInTreeOrCreate\n \n \n getNodeState\n \n \n loadStateFromJSON\n \n \n remove\n \n \n removeChild\n \n \n toggleSelfAndDescendants\n \n \n truncate\n \n \n \n \n\n\n\n\n\n \n \n\n\n \n Constructor\n \n \n \n \nconstructor(name: string, icon?: string, onToggle?: (value?: boolean) => void, children?: PhoenixMenuNode[], configs?: [], parent?: PhoenixMenuNode)\n \n \n \n \n Defined in src/managers/ui-manager/phoenix-menu/phoenix-menu-node.ts:32\n \n \n\n \n \n Create the phoenix menu node.\n\n \n Parameters :\n \n \n \n Name\n Type\n Optional\n Description\n \n \n \n \n name\n \n \n string\n \n \n \n No\n \n \n \n Name of the node.\n\n \n \n \n icon\n \n \n string\n \n \n \n Yes\n \n \n \n Icon of the node.\n\n \n \n \n onToggle\n \n \n function\n \n \n \n Yes\n \n \n \n Function on toggling the node.\n\n \n \n \n children\n \n \n PhoenixMenuNode[]\n \n \n \n Yes\n \n \n \n Children of the node.\n\n \n \n \n configs\n \n \n []\n \n \n \n Yes\n \n \n \n Configuration options in the node.\n\n \n \n \n parent\n \n \n PhoenixMenuNode\n \n \n \n Yes\n \n \n \n Parent of the node.\n\n \n \n \n \n \n \n \n \n \n\n\n \n \n \n Properties\n \n \n \n \n \n \n \n children\n \n \n \n \n \n \n Type : PhoenixMenuNode[]\n\n \n \n \n \n Default value : []\n \n \n \n \n Defined in src/managers/ui-manager/phoenix-menu/phoenix-menu-node.ts:16\n \n \n\n \n \n Children of the node.\n\n \n \n\n \n \n \n \n \n \n \n \n childrenActive\n \n \n \n \n \n \n Type : boolean\n\n \n \n \n \n Default value : false\n \n \n \n \n Defined in src/managers/ui-manager/phoenix-menu/phoenix-menu-node.ts:30\n \n \n\n \n \n If the node children are active or not.\n\n \n \n\n \n \n \n \n \n \n \n \n Private\n childrenToggleState\n \n \n \n \n \n \n Type : object\n\n \n \n \n \n Default value : {}\n \n \n \n \n Defined in src/managers/ui-manager/phoenix-menu/phoenix-menu-node.ts:27\n \n \n\n \n \n Previous toggle state of child nodes. This is so that the\nprevious state of child can be restored if we toggle the parent back on.\n\n \n \n\n \n \n \n \n \n \n \n \n configActive\n \n \n \n \n \n \n Type : boolean\n\n \n \n \n \n Default value : false\n \n \n \n \n Defined in src/managers/ui-manager/phoenix-menu/phoenix-menu-node.ts:32\n \n \n\n \n \n If the node configuration options are active or not.\n\n \n \n\n \n \n \n \n \n \n \n \n configs\n \n \n \n \n \n \n Type : []\n\n \n \n \n \n Default value : []\n \n \n \n \n Defined in src/managers/ui-manager/phoenix-menu/phoenix-menu-node.ts:18\n \n \n\n \n \n Configuration options in the node.\n\n \n \n\n \n \n \n \n \n \n \n \n icon\n \n \n \n \n \n \n Type : string\n\n \n \n \n \n Defined in src/managers/ui-manager/phoenix-menu/phoenix-menu-node.ts:10\n \n \n\n \n \n Icon of the node.\n\n \n \n\n \n \n \n \n \n \n \n \n name\n \n \n \n \n \n \n Type : string\n\n \n \n \n \n Defined in src/managers/ui-manager/phoenix-menu/phoenix-menu-node.ts:8\n \n \n\n \n \n Name of the node.\n\n \n \n\n \n \n \n \n \n \n \n \n nodeLevel\n \n \n \n \n \n \n Type : number\n\n \n \n \n \n Default value : 0\n \n \n \n \n Defined in src/managers/ui-manager/phoenix-menu/phoenix-menu-node.ts:20\n \n \n\n \n \n Level of the node.\n\n \n \n\n \n \n \n \n \n \n \n \n onToggle\n \n \n \n \n \n \n Type : function\n\n \n \n \n \n Defined in src/managers/ui-manager/phoenix-menu/phoenix-menu-node.ts:12\n \n \n\n \n \n Function on toggling the node.\n\n \n \n\n \n \n \n \n \n \n \n \n Private\n parent\n \n \n \n \n \n \n Type : PhoenixMenuNode\n\n \n \n \n \n Defined in src/managers/ui-manager/phoenix-menu/phoenix-menu-node.ts:22\n \n \n\n \n \n Parent of the node.\n\n \n \n\n \n \n \n \n \n \n \n \n toggleState\n \n \n \n \n \n \n Type : boolean\n\n \n \n \n \n Default value : true\n \n \n \n \n Defined in src/managers/ui-manager/phoenix-menu/phoenix-menu-node.ts:14\n \n \n\n \n \n If the node toggle state is true or false.\n\n \n \n\n \n \n\n\n \n \n \n Methods\n \n \n \n \n \n \n \n addChild\n \n \n \n \n \n \naddChild(name: string, onToggle?: (value?: boolean) => void, icon?: string)\n \n \n\n\n \n \n Defined in src/managers/ui-manager/phoenix-menu/phoenix-menu-node.ts:66\n \n \n\n\n \n \n Add a child to the phoenix menu item.\n\n\n \n Parameters :\n \n \n \n \n Name\n Type\n Optional\n Description\n \n \n \n \n name\n \n string\n \n\n \n No\n \n\n\n \n Name of the child.\n\n \n \n \n onToggle\n \n function\n \n\n \n Yes\n \n\n\n \n Function on toggling the child.\n\n \n \n \n icon\n \n string\n \n\n \n Yes\n \n\n\n \n Icon of the child.\n\n \n \n \n \n \n \n \n \n Returns : PhoenixMenuNode\n\n \n \n The child node.\n\n \n \n \n \n \n \n \n \n \n \n \n addConfig\n \n \n \n \n \n \naddConfig(type: T, options: Omit)\n \n \n\n\n \n \n Defined in src/managers/ui-manager/phoenix-menu/phoenix-menu-node.ts:115\n \n \n\n \n \n Type parameters :\n \n T\n \n \n \n\n \n \n Add a config to the phoenix menu item.\n\n\n \n Parameters :\n \n \n \n \n Name\n Type\n Optional\n Description\n \n \n \n \n type\n \n T\n \n\n \n No\n \n\n\n \n Type of configuration.\n\n \n \n \n options\n \n Omit\n \n\n \n No\n \n\n\n \n Options for the config.\n\n \n \n \n \n \n \n \n \n Returns : PhoenixMenuNode\n\n \n \n The current node.\n\n \n \n \n \n \n \n \n \n \n \n \n applyConfigState\n \n \n \n \n \n \napplyConfigState(config: any)\n \n \n\n\n \n \n Defined in src/managers/ui-manager/phoenix-menu/phoenix-menu-node.ts:149\n \n \n\n\n \n \n Apply the current values of config by calling the change function.\n\n\n \n Parameters :\n \n \n \n \n Name\n Type\n Optional\n Description\n \n \n \n \n config\n \n any\n \n\n \n No\n \n\n\n \n Config whose values are to be applied.\n\n \n \n \n \n \n \n \n \n Returns : void\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n findInTree\n \n \n \n \n \n \nfindInTree(name: string)\n \n \n\n\n \n \n Defined in src/managers/ui-manager/phoenix-menu/phoenix-menu-node.ts:242\n \n \n\n\n \n \n Find a node in the tree by name.\n\n\n \n Parameters :\n \n \n \n \n Name\n Type\n Optional\n Description\n \n \n \n \n name\n \n string\n \n\n \n No\n \n\n\n \n Name of the node to find.\n\n \n \n \n \n \n \n \n \n Returns : PhoenixMenuNode\n\n \n \n The found node.\n\n \n \n \n \n \n \n \n \n \n \n \n findInTreeOrCreate\n \n \n \n \n \n \nfindInTreeOrCreate(name: string)\n \n \n\n\n \n \n Defined in src/managers/ui-manager/phoenix-menu/phoenix-menu-node.ts:260\n \n \n\n\n \n \n Find a node in the tree by name or create one.\n\n\n \n Parameters :\n \n \n \n \n Name\n Type\n Optional\n Description\n \n \n \n \n name\n \n string\n \n\n \n No\n \n\n\n \n Name of the node to find or create.\n\n \n \n \n \n \n \n \n \n Returns : PhoenixMenuNode\n\n \n \n The found or created node.\n\n \n \n \n \n \n \n \n \n \n \n \n getNodeState\n \n \n \n \n \n \ngetNodeState()\n \n \n\n\n \n \n Defined in src/managers/ui-manager/phoenix-menu/phoenix-menu-node.ts:175\n \n \n\n\n \n \n Get current state of the node as an object.\n\n\n \n \n \n Returns : literal type\n\n \n \n State of the node as an object.\n\n \n \n \n \n \n \n \n \n \n \n \n loadStateFromJSON\n \n \n \n \n \n \nloadStateFromJSON(json: string | literal type)\n \n \n\n\n \n \n Defined in src/managers/ui-manager/phoenix-menu/phoenix-menu-node.ts:196\n \n \n\n\n \n \n Load the state of the phoenix menu node from JSON.\n\n\n \n Parameters :\n \n \n \n \n Name\n Type\n Optional\n Description\n \n \n \n \n json\n \n string | literal type\n \n\n \n No\n \n\n\n \n JSON containing the phoenix menu node state.\n\n \n \n \n \n \n \n \n \n Returns : void\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n remove\n \n \n \n \n \n \nremove()\n \n \n\n\n \n \n Defined in src/managers/ui-manager/phoenix-menu/phoenix-menu-node.ts:92\n \n \n\n\n \n \n Remove the current node.\n\n\n \n Returns : void\n\n \n \n \n \n \n \n \n \n \n \n \n removeChild\n \n \n \n \n \n \nremoveChild(child: PhoenixMenuNode)\n \n \n\n\n \n \n Defined in src/managers/ui-manager/phoenix-menu/phoenix-menu-node.ts:83\n \n \n\n\n \n \n Remove a child node.\n\n\n \n Parameters :\n \n \n \n \n Name\n Type\n Optional\n Description\n \n \n \n \n child\n \n PhoenixMenuNode\n \n\n \n No\n \n\n\n \n The child node to be removed.\n\n \n \n \n \n \n \n \n \n Returns : PhoenixMenuNode\n\n \n \n The current node.\n\n \n \n \n \n \n \n \n \n \n \n \n toggleSelfAndDescendants\n \n \n \n \n \n \ntoggleSelfAndDescendants(value: boolean)\n \n \n\n\n \n \n Defined in src/managers/ui-manager/phoenix-menu/phoenix-menu-node.ts:129\n \n \n\n\n \n \n Function for toggling the current and all child nodes.\n\n\n \n Parameters :\n \n \n \n \n Name\n Type\n Optional\n Description\n \n \n \n \n value\n \n boolean\n \n\n \n No\n \n\n\n \n If the node itself and descendants are to be made true or false.\n\n \n \n \n \n \n \n \n \n Returns : void\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n truncate\n \n \n \n \n \n \ntruncate()\n \n \n\n\n \n \n Defined in src/managers/ui-manager/phoenix-menu/phoenix-menu-node.ts:105\n \n \n\n\n \n \n Remove all children.\n\n\n \n Returns : void\n\n \n \n \n \n \n\n\n\n\n\n\n \n\n\n \n import { PhoenixMenuConfigs } from './config-types';\n\n/**\n * A single node of phoenix menu item.\n */\nexport class PhoenixMenuNode {\n /** Name of the node. */\n name: string;\n /** Icon of the node. */\n icon: string;\n /** Function on toggling the node. */\n onToggle: (value: boolean) => void;\n /** If the node toggle state is true or false. */\n toggleState: boolean = true;\n /** Children of the node. */\n children: PhoenixMenuNode[] = [];\n /** Configuration options in the node. */\n configs: PhoenixMenuConfigs[keyof PhoenixMenuConfigs][] = [];\n /** Level of the node. */\n nodeLevel: number = 0;\n /** Parent of the node. */\n private parent: PhoenixMenuNode;\n /**\n * Previous toggle state of child nodes. This is so that the\n * previous state of child can be restored if we toggle the parent back on.\n */\n private childrenToggleState = {};\n\n /** If the node children are active or not. */\n childrenActive: boolean = false;\n /** If the node configuration options are active or not. */\n configActive: boolean = false;\n\n /**\n * Create the phoenix menu node.\n * @param name Name of the node.\n * @param icon Icon of the node.\n * @param onToggle Function on toggling the node.\n * @param children Children of the node.\n * @param configs Configuration options in the node.\n * @param parent Parent of the node.\n */\n constructor(\n name: string,\n icon?: string,\n onToggle?: (value: boolean) => void,\n children?: PhoenixMenuNode[],\n configs?: PhoenixMenuConfigs[keyof PhoenixMenuConfigs][],\n parent?: PhoenixMenuNode\n ) {\n this.name = name;\n this.icon = icon;\n this.onToggle = onToggle;\n if (children) this.children = children;\n if (configs) this.configs = configs;\n if (parent) this.parent = parent;\n }\n\n /**\n * Add a child to the phoenix menu item.\n * @param name Name of the child.\n * @param onToggle Function on toggling the child.\n * @param icon Icon of the child.\n * @returns The child node.\n */\n addChild(\n name: string,\n onToggle?: (value: boolean) => void,\n icon?: string\n ): PhoenixMenuNode {\n const child = new PhoenixMenuNode(name, icon, onToggle);\n child.parent = this;\n child.nodeLevel = this.nodeLevel + 1;\n this.children.push(child);\n return child;\n }\n\n /**\n * Remove a child node.\n * @param child The child node to be removed.\n * @returns The current node.\n */\n removeChild(child: PhoenixMenuNode): PhoenixMenuNode {\n const childIndex = this.children.indexOf(child);\n this.children.splice(childIndex, 1);\n return this;\n }\n\n /**\n * Remove the current node.\n */\n remove() {\n if (this.parent) {\n this.parent.removeChild(this);\n } else {\n console.error(\n 'Cannot delete root node of phoenix menu. Set it to undefined/null instead.'\n );\n }\n }\n\n /**\n * Remove all children.\n */\n truncate() {\n this.children = [];\n }\n\n /**\n * Add a config to the phoenix menu item.\n * @param type Type of configuration.\n * @param options Options for the config.\n * @returns The current node.\n */\n addConfig(\n type: T,\n options: Omit\n ): PhoenixMenuNode {\n const configsLength = this.configs.push({ type, ...options });\n // Apply the values of config\n this.applyConfigState(this.configs[configsLength - 1]);\n return this;\n }\n\n /**\n * Function for toggling the current and all child nodes.\n * @param value If the node itself and descendants are to be made true or false.\n */\n toggleSelfAndDescendants(value: boolean) {\n this.onToggle?.(value);\n this.toggleState = value;\n for (const child of this.children) {\n if (!value) {\n // Save previous toggle state of children and toggle them false\n this.childrenToggleState[child.name] = child.toggleState;\n child.toggleSelfAndDescendants(value);\n } else {\n // Restore previous toggle state of children\n child.toggleState = this.childrenToggleState[child.name];\n child.toggleSelfAndDescendants(child.toggleState);\n }\n }\n }\n\n /**\n * Apply the current values of config by calling the change function.\n * @param config Config whose values are to be applied.\n */\n applyConfigState(config: any) {\n // Apply configs of different config types - manual\n if (config.type === 'checkbox' && config?.['isChecked']) {\n config.onChange?.(config?.['isChecked']);\n } else if (config.type === 'color' && config?.['color'] && !config.group) {\n // Ignore color by options with `!config.group`, otherwise the collection color is overridden\n config.onChange?.(config?.['color']);\n } else if (config.type === 'slider' && config?.['value']) {\n config.onChange?.(config?.['value']);\n } else if (\n config.type === 'rangeSlider' &&\n config?.['value'] !== undefined\n ) {\n config.onChange?.({\n value: config?.['value'],\n highValue: config?.['highValue'],\n });\n config.setEnableMin?.(config?.['enableMin']);\n config.setEnableMax?.(config?.['enableMax']);\n }\n }\n\n /**\n * Get current state of the node as an object.\n * @returns State of the node as an object.\n */\n getNodeState(): { [key: string]: any } {\n const phoenixNodeJSON: { [key: string]: any } = {};\n\n phoenixNodeJSON['name'] = this.name;\n phoenixNodeJSON['nodeLevel'] = this.nodeLevel;\n phoenixNodeJSON['toggleState'] = this.toggleState;\n phoenixNodeJSON['childrenActive'] = this.childrenActive;\n phoenixNodeJSON['configs'] = this.configs;\n phoenixNodeJSON['children'] = [];\n\n for (const child of this.children) {\n phoenixNodeJSON['children'].push(child.getNodeState());\n }\n\n return phoenixNodeJSON;\n }\n\n /**\n * Load the state of the phoenix menu node from JSON.\n * @param json JSON containing the phoenix menu node state.\n */\n loadStateFromJSON(json: string | { [key: string]: any }) {\n let jsonObject: any;\n if (typeof json === 'string') {\n jsonObject = JSON.parse(json);\n } else {\n jsonObject = json;\n }\n\n this.childrenActive = jsonObject['childrenActive'];\n this.toggleState = jsonObject['toggleState'];\n this.toggleState !== undefined && this.onToggle?.(this.toggleState);\n\n for (const configState of jsonObject['configs']) {\n const nodeConfig = this.configs.find(\n (nodeConfig) =>\n nodeConfig.type === configState['type'] &&\n nodeConfig.label === configState['label']\n );\n\n if (nodeConfig) {\n for (const prop in configState) {\n nodeConfig[prop] = configState[prop];\n }\n\n this.applyConfigState(nodeConfig);\n }\n }\n\n for (const childState of jsonObject['children']) {\n const nodeChild = this.children.filter(\n (nodeChild) =>\n nodeChild.name === childState.name &&\n nodeChild.nodeLevel === childState.nodeLevel\n )[0];\n\n if (nodeChild) {\n nodeChild.loadStateFromJSON(childState);\n }\n }\n }\n\n /**\n * Find a node in the tree by name.\n * @param name Name of the node to find.\n * @returns The found node.\n */\n findInTree(name: string): PhoenixMenuNode {\n if (this.name === name) {\n return this;\n } else {\n for (const child of this.children) {\n const nodeFound = child.findInTree(name);\n if (nodeFound) {\n return nodeFound;\n }\n }\n }\n }\n\n /**\n * Find a node in the tree by name or create one.\n * @param name Name of the node to find or create.\n * @returns The found or created node.\n */\n findInTreeOrCreate(name: string): PhoenixMenuNode {\n let prevNode: PhoenixMenuNode = this;\n name.split('>').forEach((nodeName) => {\n nodeName = nodeName.trim();\n const nodeFound = prevNode.findInTree(nodeName);\n // const nodeFound = prevNode.children.find(child => child.name === nodeName);\n\n prevNode = nodeFound ? nodeFound : prevNode.addChild(nodeName, () => {});\n });\n return prevNode;\n }\n}\n\n \n\n\n\n\n\n\n\n\n\n\n \n \n results matching \"\"\n \n \n \n No results matching \"\"\n \n\n"},"classes/PhoenixMenuUI.html":{"url":"classes/PhoenixMenuUI.html","title":"class - PhoenixMenuUI","body":"\n \n\n\n\n\n\n\n\n\n\n\n\n\n\n Classes\n PhoenixMenuUI\n\n\n\n \n Info\n \n \n Source\n \n\n\n\n \n \n File\n \n \n src/managers/ui-manager/phoenix-menu/phoenix-menu-ui.ts\n \n\n\n \n Description\n \n \n A wrapper class for Phoenix menu to perform UI related operations.\n\n \n\n\n \n Implements\n \n \n PhoenixUI\n \n\n\n \n Index\n \n \n \n \n Properties\n \n \n \n \n \n \n Private\n eventFolder\n \n \n Private\n eventFolderState\n \n \n Private\n geomFolder\n \n \n Private\n labelsFolder\n \n \n Private\n sceneManager\n \n \n \n \n\n \n \n Methods\n \n \n \n \n \n \n Public\n addCollection\n \n \n Private\n addCutOptions\n \n \n Private\n addDrawOptions\n \n \n Public\n addEventDataFolder\n \n \n Public\n addEventDataTypeFolder\n \n \n Public\n addGeometry\n \n \n Public\n addGeometryFolder\n \n \n Public\n addLabel\n \n \n Public\n addLabelsFolder\n \n \n Public\n clear\n \n \n Public\n getEventDataTypeFolder\n \n \n Public\n loadEventFolderState\n \n \n Public\n removeLabel\n \n \n \n \n\n\n\n\n\n \n \n\n\n \n Constructor\n \n \n \n \nconstructor(phoenixMenuRoot: PhoenixMenuNode, three: ThreeManager)\n \n \n \n \n Defined in src/managers/ui-manager/phoenix-menu/phoenix-menu-ui.ts:29\n \n \n\n \n \n Create Phoenix menu UI with different controls related to detector geometry and event data.\n\n \n Parameters :\n \n \n \n Name\n Type\n Optional\n Description\n \n \n \n \n phoenixMenuRoot\n \n \n PhoenixMenuNode\n \n \n \n No\n \n \n \n Root node of the Phoenix menu.\n\n \n \n \n three\n \n \n ThreeManager\n \n \n \n No\n \n \n \n The three manager for managing three.js related operations.\n\n \n \n \n \n \n \n \n \n \n\n\n \n \n \n Properties\n \n \n \n \n \n \n \n Private\n eventFolder\n \n \n \n \n \n \n Type : PhoenixMenuNode\n\n \n \n \n \n Defined in src/managers/ui-manager/phoenix-menu/phoenix-menu-ui.ts:23\n \n \n\n \n \n Phoenix menu node containing event related data.\n\n \n \n\n \n \n \n \n \n \n \n \n Private\n eventFolderState\n \n \n \n \n \n \n Type : any\n\n \n \n \n \n Defined in src/managers/ui-manager/phoenix-menu/phoenix-menu-ui.ts:25\n \n \n\n \n \n State of the Phoenix menu node containing event related data.\n\n \n \n\n \n \n \n \n \n \n \n \n Private\n geomFolder\n \n \n \n \n \n \n Type : PhoenixMenuNode\n\n \n \n \n \n Defined in src/managers/ui-manager/phoenix-menu/phoenix-menu-ui.ts:21\n \n \n\n \n \n Phoenix menu node containing geometries data\n\n \n \n\n \n \n \n \n \n \n \n \n Private\n labelsFolder\n \n \n \n \n \n \n Type : PhoenixMenuNode\n\n \n \n \n \n Defined in src/managers/ui-manager/phoenix-menu/phoenix-menu-ui.ts:27\n \n \n\n \n \n Phoenix menu node containing labels.\n\n \n \n\n \n \n \n \n \n \n \n \n Private\n sceneManager\n \n \n \n \n \n \n Type : SceneManager\n\n \n \n \n \n Defined in src/managers/ui-manager/phoenix-menu/phoenix-menu-ui.ts:29\n \n \n\n \n \n Manager for managing functions of the three.js scene.\n\n \n \n\n \n \n\n\n \n \n \n Methods\n \n \n \n \n \n \n \n Public\n addCollection\n \n \n \n \n \n \n \n addCollection(eventDataType: string, collectionName: string, cuts?: Cut[], collectionColor?: Color)\n \n \n\n\n \n \n Defined in src/managers/ui-manager/phoenix-menu/phoenix-menu-ui.ts:219\n \n \n\n\n \n \n Add collection folder and its configurable options to the event data type (tracks, hits etc.) folder.\n\n\n \n Parameters :\n \n \n \n \n Name\n Type\n Optional\n Description\n \n \n \n \n eventDataType\n \n string\n \n\n \n No\n \n\n\n \n Name of the event data type.\n\n \n \n \n collectionName\n \n string\n \n\n \n No\n \n\n\n \n Name of the collection to be added in the type of event data (tracks, hits etc.).\n\n \n \n \n cuts\n \n Cut[]\n \n\n \n Yes\n \n\n\n \n Cuts to the collection of event data that are to be made configurable to filter event data.\n\n \n \n \n collectionColor\n \n Color\n \n\n \n Yes\n \n\n\n \n Default color of the collection.\n\n \n \n \n \n \n \n \n \n Returns : void\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n Private\n addCutOptions\n \n \n \n \n \n \n \n addCutOptions(collectionNode: PhoenixMenuNode, collectionName: string, cuts: Cut[])\n \n \n\n\n \n \n Defined in src/managers/ui-manager/phoenix-menu/phoenix-menu-ui.ts:273\n \n \n\n\n \n \n Add Cut Options folder to the menu.\n\n\n \n Parameters :\n \n \n \n \n Name\n Type\n Optional\n Description\n \n \n \n \n collectionNode\n \n PhoenixMenuNode\n \n\n \n No\n \n\n\n \n The parent node to attach folder to\n\n \n \n \n collectionName\n \n string\n \n\n \n No\n \n\n\n \n The name of the collection\n\n \n \n \n cuts\n \n Cut[]\n \n\n \n No\n \n\n\n \n \n \n \n \n \n \n \n \n Returns : void\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n Private\n addDrawOptions\n \n \n \n \n \n \n \n addDrawOptions(collectionNode: PhoenixMenuNode, collectionName: string)\n \n \n\n\n \n \n Defined in src/managers/ui-manager/phoenix-menu/phoenix-menu-ui.ts:332\n \n \n\n\n \n \n Add Draw Options folder to the menu.\n\n\n \n Parameters :\n \n \n \n \n Name\n Type\n Optional\n Description\n \n \n \n \n collectionNode\n \n PhoenixMenuNode\n \n\n \n No\n \n\n\n \n The parent node to attach folder to\n\n \n \n \n collectionName\n \n string\n \n\n \n No\n \n\n\n \n The name of the collection\n\n \n \n \n \n \n \n \n \n Returns : void\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n Public\n addEventDataFolder\n \n \n \n \n \n \n \n addEventDataFolder()\n \n \n\n\n \n \n Defined in src/managers/ui-manager/phoenix-menu/phoenix-menu-ui.ts:175\n \n \n\n\n \n \n Add event data folder with functions for event data toggles like show/hide and depthTest.\n\n\n \n Returns : void\n\n \n \n \n \n \n \n \n \n \n \n \n Public\n addEventDataTypeFolder\n \n \n \n \n \n \n \n addEventDataTypeFolder(typeName: string)\n \n \n\n\n \n \n Defined in src/managers/ui-manager/phoenix-menu/phoenix-menu-ui.ts:201\n \n \n\n\n \n \n Add folder for event data type like tracks or hits to the menu.\n\n\n \n Parameters :\n \n \n \n \n Name\n Type\n Optional\n Description\n \n \n \n \n typeName\n \n string\n \n\n \n No\n \n\n\n \n Name of the type of event data.\n\n \n \n \n \n \n \n \n \n Returns : void\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n Public\n addGeometry\n \n \n \n \n \n \n \n addGeometry(object: Object3D, menuSubfolder?: string)\n \n \n\n\n \n \n Defined in src/managers/ui-manager/phoenix-menu/phoenix-menu-ui.ts:116\n \n \n\n\n \n \n Add geometry to the menu's geometry folder and set up its configurable options.\n\n\n \n Parameters :\n \n \n \n \n Name\n Type\n Optional\n Description\n \n \n \n \n object\n \n Object3D\n \n\n \n No\n \n\n\n \n Object to add to the UI menu.\n\n \n \n \n menuSubfolder\n \n string\n \n\n \n Yes\n \n\n\n \n Subfolder in the menu to add the geometry to. Example Folder > Subfolder.\n\n \n \n \n \n \n \n \n \n Returns : void\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n Public\n addGeometryFolder\n \n \n \n \n \n \n \n addGeometryFolder()\n \n \n\n\n \n \n Defined in src/managers/ui-manager/phoenix-menu/phoenix-menu-ui.ts:63\n \n \n\n\n \n \n Add geometry (detector geometry) folder to the menu.\n\n\n \n Returns : void\n\n \n \n \n \n \n \n \n \n \n \n \n Public\n addLabel\n \n \n \n \n \n \n \n addLabel(labelId: string, onRemoveLabel?: () => void)\n \n \n\n\n \n \n Defined in src/managers/ui-manager/phoenix-menu/phoenix-menu-ui.ts:419\n \n \n\n\n \n \n Add folder for configuration of label.\n\n\n \n Parameters :\n \n \n \n \n Name\n Type\n Optional\n Description\n \n \n \n \n labelId\n \n string\n \n\n \n No\n \n\n\n \n Unique ID of the label.\n\n \n \n \n onRemoveLabel\n \n function\n \n\n \n Yes\n \n\n\n \n Function called when label is removed.\n\n \n \n \n \n \n \n \n \n Returns : void\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n Public\n addLabelsFolder\n \n \n \n \n \n \n \n addLabelsFolder(configFunctions: any)\n \n \n\n\n \n \n Defined in src/managers/ui-manager/phoenix-menu/phoenix-menu-ui.ts:369\n \n \n\n\n \n \n Add labels folder to the menu.\n\n\n \n Parameters :\n \n \n \n \n Name\n Type\n Optional\n Description\n \n \n \n \n configFunctions\n \n any\n \n\n \n No\n \n\n\n \n Functions to attach to the labels folder configuration.\n\n \n \n \n \n \n \n \n \n Returns : void\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n Public\n clear\n \n \n \n \n \n \n \n clear()\n \n \n\n\n \n \n Defined in src/managers/ui-manager/phoenix-menu/phoenix-menu-ui.ts:49\n \n \n\n\n \n \n Clear the menu by removing all folders.\n\n\n \n Returns : void\n\n \n \n \n \n \n \n \n \n \n \n \n Public\n getEventDataTypeFolder\n \n \n \n \n \n \n \n getEventDataTypeFolder(typeName: string)\n \n \n\n\n \n \n Defined in src/managers/ui-manager/phoenix-menu/phoenix-menu-ui.ts:475\n \n \n\n\n \n \n Get the folder of the event data type.\n\n\n \n Parameters :\n \n \n \n \n Name\n Type\n Optional\n Description\n \n \n \n \n typeName\n \n string\n \n\n \n No\n \n\n\n \n Name of the event data type.\n\n \n \n \n \n \n \n \n \n Returns : PhoenixMenuNode\n\n \n \n Folder of the event data type.\n\n \n \n \n \n \n \n \n \n \n \n \n Public\n loadEventFolderState\n \n \n \n \n \n \n \n loadEventFolderState()\n \n \n\n\n \n \n Defined in src/managers/ui-manager/phoenix-menu/phoenix-menu-ui.ts:484\n \n \n\n\n \n \n Load previous state of the event data folder in Phoenix menu if any.\n\n\n \n Returns : void\n\n \n \n \n \n \n \n \n \n \n \n \n Public\n removeLabel\n \n \n \n \n \n \n \n removeLabel(labelId: string, labelNode?: PhoenixMenuNode)\n \n \n\n\n \n \n Defined in src/managers/ui-manager/phoenix-menu/phoenix-menu-ui.ts:460\n \n \n\n\n \n \n Remove label from the menu and scene if it exists.\n\n\n \n Parameters :\n \n \n \n \n Name\n Type\n Optional\n Description\n \n \n \n \n labelId\n \n string\n \n\n \n No\n \n\n\n \n A unique label ID string.\n\n \n \n \n labelNode\n \n PhoenixMenuNode\n \n\n \n Yes\n \n\n\n \n \n \n \n \n \n \n \n \n Returns : void\n\n \n \n \n \n \n \n \n \n\n\n\n\n\n\n \n\n\n \n import {\n BufferGeometry,\n Color,\n Mesh,\n MeshPhongMaterial,\n Object3D,\n} from 'three';\nimport { SceneManager } from '../../three-manager/scene-manager';\nimport { ThreeManager } from '../../three-manager';\nimport { PhoenixMenuNode } from './phoenix-menu-node';\nimport { Cut } from '../../../lib/models/cut.model';\nimport { PrettySymbols } from '../../../helpers/pretty-symbols';\nimport { ColorByOptionKeys, ColorOptions } from '../color-options';\nimport { PhoenixUI } from '../phoenix-ui';\n\n/**\n * A wrapper class for Phoenix menu to perform UI related operations.\n */\nexport class PhoenixMenuUI implements PhoenixUI {\n /** Phoenix menu node containing geometries data */\n private geomFolder: PhoenixMenuNode;\n /** Phoenix menu node containing event related data. */\n private eventFolder: PhoenixMenuNode;\n /** State of the Phoenix menu node containing event related data. */\n private eventFolderState: any;\n /** Phoenix menu node containing labels. */\n private labelsFolder: PhoenixMenuNode;\n /** Manager for managing functions of the three.js scene. */\n private sceneManager: SceneManager;\n\n /**\n * Create Phoenix menu UI with different controls related to detector geometry and event data.\n * @param phoenixMenuRoot Root node of the Phoenix menu.\n * @param three The three manager for managing three.js related operations.\n */\n constructor(\n private phoenixMenuRoot: PhoenixMenuNode,\n private three: ThreeManager\n ) {\n this.geomFolder = null;\n this.eventFolder = null;\n this.labelsFolder = null;\n this.sceneManager = three.getSceneManager();\n }\n\n /**\n * Clear the menu by removing all folders.\n */\n public clear() {\n if (this.phoenixMenuRoot) {\n this.phoenixMenuRoot.truncate();\n this.phoenixMenuRoot = undefined;\n }\n\n this.geomFolder = null;\n this.eventFolder = null;\n this.labelsFolder = null;\n }\n\n /**\n * Add geometry (detector geometry) folder to the menu.\n */\n public addGeometryFolder() {\n // Phoenix menu\n if (this.geomFolder === null) {\n this.geomFolder = this.phoenixMenuRoot.addChild(\n 'Detector',\n (value) => {\n this.sceneManager.groupVisibility(SceneManager.GEOMETRIES_ID, value);\n },\n 'perspective'\n );\n }\n\n this.geomFolder\n .addConfig('checkbox', {\n label: 'Wireframe',\n isChecked: false,\n onChange: (value) => {\n this.sceneManager.wireframeGeometries(value);\n },\n })\n .addConfig('slider', {\n label: 'Opacity',\n min: 0,\n max: 1,\n step: 0.01,\n allowCustomValue: true,\n onChange: (value) => {\n this.sceneManager.setGeometryOpacity(\n this.sceneManager.getObjectByName(SceneManager.GEOMETRIES_ID),\n value\n );\n },\n })\n .addConfig('slider', {\n label: 'Scale',\n min: 0,\n max: 20,\n step: 0.01,\n allowCustomValue: true,\n onChange: (scale) => {\n this.sceneManager.scaleObject(\n this.sceneManager.getObjectByName(SceneManager.GEOMETRIES_ID),\n scale\n );\n },\n });\n }\n\n /**\n * Add geometry to the menu's geometry folder and set up its configurable options.\n * @param object Object to add to the UI menu.\n * @param menuSubfolder Subfolder in the menu to add the geometry to. Example `Folder > Subfolder`.\n */\n public addGeometry(object: Object3D, menuSubfolder?: string) {\n const { name, material, visible } = object as Mesh;\n const color = material?.color;\n\n let parentNode: PhoenixMenuNode = this.geomFolder;\n if (menuSubfolder) {\n parentNode = this.geomFolder.findInTreeOrCreate(menuSubfolder);\n }\n\n // find out where the actual object name starts, providing that the name\n // is hierarchical and contents higher level menu names too\n let nameStart = name.lastIndexOf(' > ');\n if (nameStart '\n }\n const objFolder = parentNode.addChild(\n name.substring(nameStart),\n (value: boolean) => {\n this.sceneManager.objectVisibility(object, value);\n }\n );\n\n objFolder.toggleState = visible;\n\n objFolder\n .addConfig('color', {\n label: 'Color',\n color: color ? `#${new Color(color).getHexString()}` : undefined,\n onChange: (value) => {\n this.sceneManager.changeObjectColor(object, value);\n },\n })\n .addConfig('slider', {\n label: 'Opacity',\n min: 0,\n max: 1,\n step: 0.05,\n allowCustomValue: true,\n onChange: (opacity) => {\n this.sceneManager.setGeometryOpacity(object, opacity);\n },\n })\n .addConfig('button', {\n label: 'Remove',\n onClick: () => {\n objFolder.remove();\n this.sceneManager.removeGeometry(object);\n },\n });\n }\n\n /**\n * Add event data folder with functions for event data toggles like show/hide and depthTest.\n */\n public addEventDataFolder() {\n // Phoenix menu\n if (this.eventFolder !== null) {\n this.eventFolderState = this.eventFolder.getNodeState();\n this.eventFolder.remove();\n }\n this.eventFolder = this.phoenixMenuRoot.addChild(\n 'Event Data',\n (value: boolean) => {\n this.sceneManager.groupVisibility(SceneManager.EVENT_DATA_ID, value);\n },\n 'event-folder'\n );\n this.eventFolder.addConfig('checkbox', {\n label: 'Depth Test',\n isChecked: true,\n onChange: (value) => {\n this.three.eventDataDepthTest(value);\n },\n });\n }\n\n /**\n * Add folder for event data type like tracks or hits to the menu.\n * @param typeName Name of the type of event data.\n */\n public addEventDataTypeFolder(typeName: string): void {\n this.eventFolder.addChild(typeName, (value: boolean) => {\n this.sceneManager.objectVisibility(\n this.sceneManager\n .getObjectByName(SceneManager.EVENT_DATA_ID)\n .getObjectByName(typeName),\n value\n );\n });\n }\n\n /**\n * Add collection folder and its configurable options to the event data type (tracks, hits etc.) folder.\n * @param eventDataType Name of the event data type.\n * @param collectionName Name of the collection to be added in the type of event data (tracks, hits etc.).\n * @param cuts Cuts to the collection of event data that are to be made configurable to filter event data.\n * @param collectionColor Default color of the collection.\n */\n public addCollection(\n eventDataType: string,\n collectionName: string,\n cuts?: Cut[],\n collectionColor?: Color\n ) {\n const typeFolder = this.eventFolder.children.find(\n (eventDataTypeNode) => eventDataTypeNode.name === eventDataType\n );\n\n if (!typeFolder) {\n return;\n }\n\n const collectionNode = typeFolder.addChild(\n collectionName,\n (value: boolean) => {\n const collectionObject = this.sceneManager\n .getObjectByName(SceneManager.EVENT_DATA_ID)\n .getObjectByName(collectionName);\n this.sceneManager.objectVisibility(collectionObject, value);\n }\n );\n\n this.addDrawOptions(collectionNode, collectionName);\n\n if (cuts && cuts.length > 0) {\n this.addCutOptions(collectionNode, collectionName, cuts);\n }\n\n const colorByOptions: ColorByOptionKeys[] = [];\n\n // Extra config options specific to tracks\n if (typeFolder.name === 'Tracks') {\n colorByOptions.push(\n ColorByOptionKeys.CHARGE,\n ColorByOptionKeys.MOM,\n ColorByOptionKeys.VERTEX\n );\n }\n\n new ColorOptions(\n this.three.getColorManager(),\n collectionNode,\n collectionColor,\n colorByOptions\n );\n }\n\n /**\n * Add Cut Options folder to the menu.\n * @param collectionNode The parent node to attach folder to\n * @param collectionName The name of the collection\n */\n private addCutOptions(\n collectionNode: PhoenixMenuNode,\n collectionName: string,\n cuts: Cut[]\n ) {\n const cutsOptionsNode = collectionNode.addChild('Cut Options');\n\n cutsOptionsNode\n .addConfig('label', {\n label: 'Cuts',\n })\n .addConfig('button', {\n label: 'Reset cuts',\n onClick: () => {\n this.sceneManager.groupVisibility(\n collectionName,\n true,\n SceneManager.EVENT_DATA_ID\n );\n\n for (const cut of cuts) {\n cut.reset();\n }\n },\n });\n\n // Add range sliders for cuts\n for (const cut of cuts) {\n cutsOptionsNode.addConfig('rangeSlider', {\n label: PrettySymbols.getPrettySymbol(cut.field),\n min: cut.minValue,\n max: cut.maxValue,\n step: cut.step,\n value: cut.minValue,\n highValue: cut.maxValue,\n enableMin: cut.minCutActive,\n enableMax: cut.maxCutActive,\n onChange: ({ value, highValue }) => {\n cut.minValue = value;\n cut.maxValue = highValue;\n this.sceneManager.collectionFilter(collectionName, cuts);\n },\n setEnableMin: (checked: boolean) => {\n cut.enableMinCut(checked);\n this.sceneManager.collectionFilter(collectionName, cuts);\n },\n setEnableMax: (checked: boolean) => {\n cut.enableMaxCut(checked);\n this.sceneManager.collectionFilter(collectionName, cuts);\n },\n });\n }\n }\n\n /**\n * Add Draw Options folder to the menu.\n * @param collectionNode The parent node to attach folder to\n * @param collectionName The name of the collection\n */\n private addDrawOptions(\n collectionNode: PhoenixMenuNode,\n collectionName: string\n ) {\n const drawOptionsNode = collectionNode.addChild('Draw Options');\n\n drawOptionsNode.addConfig('slider', {\n label: 'Opacity',\n min: 0.1,\n step: 0.1,\n max: 1,\n onChange: (value) => {\n this.sceneManager.setGeometryOpacity(\n this.sceneManager\n .getObjectByName(SceneManager.EVENT_DATA_ID)\n .getObjectByName(collectionName),\n value\n );\n },\n });\n\n drawOptionsNode.addConfig('checkbox', {\n label: 'Wireframe',\n onChange: (value) =>\n this.sceneManager.wireframeObjects(\n this.sceneManager\n .getObjectByName(SceneManager.EVENT_DATA_ID)\n .getObjectByName(collectionName),\n value\n ),\n });\n }\n\n /**\n * Add labels folder to the menu.\n * @param configFunctions Functions to attach to the labels folder configuration.\n */\n public addLabelsFolder(configFunctions: any) {\n if (this.labelsFolder !== null) {\n return;\n }\n\n const {\n onToggle,\n onSizeChange,\n onColorChange,\n onSaveLabels,\n onLoadLabels,\n } = configFunctions;\n\n this.labelsFolder = this.phoenixMenuRoot.addChild(\n SceneManager.LABELS_ID,\n onToggle,\n 'info'\n );\n\n this.labelsFolder.addConfig('slider', {\n label: 'Size',\n min: 0,\n max: 10,\n step: 0.01,\n allowCustomValue: true,\n onChange: onSizeChange,\n });\n\n this.labelsFolder.addConfig('color', {\n label: 'Color',\n color: '#a8a8a8',\n onChange: onColorChange,\n });\n\n this.labelsFolder.addConfig('button', {\n label: 'Save Labels',\n onClick: onSaveLabels,\n });\n\n this.labelsFolder.addConfig('button', {\n label: 'Load Labels',\n onClick: onLoadLabels,\n });\n }\n\n /**\n * Add folder for configuration of label.\n * @param labelId Unique ID of the label.\n * @param onRemoveLabel Function called when label is removed.\n */\n public addLabel(labelId: string, onRemoveLabel?: () => void) {\n let labelNode = this.labelsFolder.children.find(\n (phoenixMenuNode) => phoenixMenuNode.name === labelId\n );\n\n if (labelNode) {\n return;\n }\n\n labelNode = this.labelsFolder.addChild(labelId, (value) => {\n const labelObject = this.sceneManager\n .getObjectByName(SceneManager.LABELS_ID)\n .getObjectByName(labelId);\n this.sceneManager.objectVisibility(labelObject, value);\n });\n\n labelNode.addConfig('color', {\n label: 'Color',\n color: '#a8a8a8',\n onChange: (value) => {\n this.sceneManager.changeObjectColor(\n this.sceneManager.getObjectByName(labelId),\n value\n );\n },\n });\n\n labelNode.addConfig('button', {\n label: 'Remove',\n onClick: () => {\n onRemoveLabel?.();\n this.removeLabel(labelId, labelNode);\n },\n });\n }\n\n /**\n * Remove label from the menu and scene if it exists.\n * @param labelId A unique label ID string.\n * @param labelFolderReference Reference to the label folder.\n */\n public removeLabel(labelId: string, labelNode?: PhoenixMenuNode) {\n if (!labelNode) {\n labelNode = this.labelsFolder?.children.find(\n (singleLabelNode) => singleLabelNode.name === labelId\n );\n }\n\n labelNode?.remove();\n }\n\n /**\n * Get the folder of the event data type.\n * @param typeName Name of the event data type.\n * @returns Folder of the event data type.\n */\n public getEventDataTypeFolder(typeName: string): PhoenixMenuNode {\n return this.eventFolder.children.find(\n (eventDataTypeNode) => eventDataTypeNode.name === typeName\n );\n }\n\n /**\n * Load previous state of the event data folder in Phoenix menu if any.\n */\n public loadEventFolderState() {\n if (this.eventFolderState) {\n this.eventFolder.loadStateFromJSON(this.eventFolderState);\n }\n }\n}\n\n \n\n\n\n\n\n\n\n\n\n\n \n \n results matching \"\"\n \n \n \n No results matching \"\"\n \n\n"},"interfaces/PhoenixUI.html":{"url":"interfaces/PhoenixUI.html","title":"interface - PhoenixUI","body":"\n \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n Interfaces\n \n PhoenixUI\n\n\n\n \n Info\n \n \n Source\n \n\n\n\n \n \n File\n \n \n src/managers/ui-manager/phoenix-ui.ts\n \n\n\n \n Description\n \n \n Common interface for implement Phoenix UI menu.\n\n \n\n\n \n Index\n \n \n \n \n Methods\n \n \n \n \n \n \n \n addCollection\n \n \n \n \n addEventDataFolder\n \n \n \n \n addEventDataTypeFolder\n \n \n \n \n addGeometry\n \n \n \n \n addGeometryFolder\n \n \n \n \n addLabel\n \n \n \n \n addLabelsFolder\n \n \n \n \n clear\n \n \n \n \n getEventDataTypeFolder\n \n \n \n \n removeLabel\n \n \n \n \n \n \n \n \n\n \n \n \n Methods\n \n \n \n \n \n \n \n addCollection\n \n \n \n \n \n \naddCollection(eventDataType: string, collectionName: string, cuts?: Cut[], collectionColor?: Color)\n \n \n\n\n \n \n Defined in src/managers/ui-manager/phoenix-ui.ts:43\n \n \n\n\n \n \n Add collection folder and its configurable options to the event data type (tracks, hits etc.) folder.\n\n\n \n Parameters :\n \n \n \n \n Name\n Type\n Optional\n Description\n \n \n \n \n eventDataType\n \n string\n \n\n \n No\n \n\n\n \n Name of the event data type.\n\n \n \n \n collectionName\n \n string\n \n\n \n No\n \n\n\n \n Name of the collection to be added in the type of event data (tracks, hits etc.).\n\n \n \n \n cuts\n \n Cut[]\n \n\n \n Yes\n \n\n\n \n Cuts to the collection of event data that are to be made configurable to filter event data.\n\n \n \n \n collectionColor\n \n Color\n \n\n \n Yes\n \n\n\n \n Default color of the collection.\n\n \n \n \n \n \n \n \n \n Returns : void\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n addEventDataFolder\n \n \n \n \n \n \naddEventDataFolder()\n \n \n\n\n \n \n Defined in src/managers/ui-manager/phoenix-ui.ts:28\n \n \n\n\n \n \n Add event data folder with functions for event data toggles like show/hide and depthTest.\n\n\n \n Returns : void\n\n \n \n \n \n \n \n \n \n \n \n \n addEventDataTypeFolder\n \n \n \n \n \n \naddEventDataTypeFolder(typeName: string)\n \n \n\n\n \n \n Defined in src/managers/ui-manager/phoenix-ui.ts:34\n \n \n\n\n \n \n Add folder for event data type like tracks or hits to the menu.\n\n\n \n Parameters :\n \n \n \n \n Name\n Type\n Optional\n Description\n \n \n \n \n typeName\n \n string\n \n\n \n No\n \n\n\n \n Name of the type of event data.\n\n \n \n \n \n \n \n \n \n Returns : void\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n addGeometry\n \n \n \n \n \n \naddGeometry(object: Object3D, menuSubfolder?: string)\n \n \n\n\n \n \n Defined in src/managers/ui-manager/phoenix-ui.ts:23\n \n \n\n\n \n \n Add geometry to the menu's geometry folder and set up its configurable options.\n\n\n \n Parameters :\n \n \n \n \n Name\n Type\n Optional\n Description\n \n \n \n \n object\n \n Object3D\n \n\n \n No\n \n\n\n \n Object to add to the UI menu.\n\n \n \n \n menuSubfolder\n \n string\n \n\n \n Yes\n \n\n\n \n Subfolder in the menu to add the geometry to. Example Folder > Subfolder.\n\n \n \n \n \n \n \n \n \n Returns : void\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n addGeometryFolder\n \n \n \n \n \n \naddGeometryFolder()\n \n \n\n\n \n \n Defined in src/managers/ui-manager/phoenix-ui.ts:16\n \n \n\n\n \n \n Add geometry (detector geometry) folder to the menu.\n\n\n \n Returns : void\n\n \n \n \n \n \n \n \n \n \n \n \n addLabel\n \n \n \n \n \n \naddLabel(labelId: string, onRemoveLabel: () => void)\n \n \n\n\n \n \n Defined in src/managers/ui-manager/phoenix-ui.ts:61\n \n \n\n\n \n \n Add folder for configuration of label.\n\n\n \n Parameters :\n \n \n \n \n Name\n Type\n Optional\n Description\n \n \n \n \n labelId\n \n string\n \n\n \n No\n \n\n\n \n Unique ID of the label.\n\n \n \n \n onRemoveLabel\n \n function\n \n\n \n No\n \n\n\n \n Function called when label is removed.\n\n \n \n \n \n \n \n \n \n Returns : void\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n addLabelsFolder\n \n \n \n \n \n \naddLabelsFolder(configFunctions: any)\n \n \n\n\n \n \n Defined in src/managers/ui-manager/phoenix-ui.ts:54\n \n \n\n\n \n \n Add labels folder to the menu.\n\n\n \n Parameters :\n \n \n \n \n Name\n Type\n Optional\n Description\n \n \n \n \n configFunctions\n \n any\n \n\n \n No\n \n\n\n \n Functions to attach to the labels folder configuration.\n\n \n \n \n \n \n \n \n \n Returns : void\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n clear\n \n \n \n \n \n \nclear()\n \n \n\n\n \n \n Defined in src/managers/ui-manager/phoenix-ui.ts:11\n \n \n\n\n \n \n Clear the menu by removing all folders.\n\n\n \n Returns : void\n\n \n \n \n \n \n \n \n \n \n \n \n getEventDataTypeFolder\n \n \n \n \n \n \ngetEventDataTypeFolder(typeName: string)\n \n \n\n\n \n \n Defined in src/managers/ui-manager/phoenix-ui.ts:75\n \n \n\n\n \n \n Get the folder of the event data type.\n\n\n \n Parameters :\n \n \n \n \n Name\n Type\n Optional\n Description\n \n \n \n \n typeName\n \n string\n \n\n \n No\n \n\n\n \n Name of the event data type.\n\n \n \n \n \n \n \n \n \n Returns : T\n\n \n \n Folder of the event data type.\n\n \n \n \n \n \n \n \n \n \n \n \n removeLabel\n \n \n \n \n \n \nremoveLabel(labelId: string, labelFolderReference?: T)\n \n \n\n\n \n \n Defined in src/managers/ui-manager/phoenix-ui.ts:68\n \n \n\n\n \n \n Remove label from the menu and scene if it exists.\n\n\n \n Parameters :\n \n \n \n \n Name\n Type\n Optional\n Description\n \n \n \n \n labelId\n \n string\n \n\n \n No\n \n\n\n \n A unique label ID string.\n\n \n \n \n labelFolderReference\n \n T\n \n\n \n Yes\n \n\n\n \n Reference to the label folder.\n\n \n \n \n \n \n \n \n \n Returns : void\n\n \n \n \n \n \n \n \n \n\n\n \n\n\n \n import { Color, Object3D } from 'three';\nimport { Cut } from '../../lib/models/cut.model';\n\n/**\n * Common interface for implement Phoenix UI menu.\n */\nexport interface PhoenixUI {\n /**\n * Clear the menu by removing all folders.\n */\n clear(): void;\n\n /**\n * Add geometry (detector geometry) folder to the menu.\n */\n addGeometryFolder(): void;\n\n /**\n * Add geometry to the menu's geometry folder and set up its configurable options.\n * @param object Object to add to the UI menu.\n * @param menuSubfolder Subfolder in the menu to add the geometry to. Example `Folder > Subfolder`.\n */\n addGeometry(object: Object3D, menuSubfolder?: string): void;\n\n /**\n * Add event data folder with functions for event data toggles like show/hide and depthTest.\n */\n addEventDataFolder(): void;\n\n /**\n * Add folder for event data type like tracks or hits to the menu.\n * @param typeName Name of the type of event data.\n */\n addEventDataTypeFolder(typeName: string): void;\n\n /**\n * Add collection folder and its configurable options to the event data type (tracks, hits etc.) folder.\n * @param eventDataType Name of the event data type.\n * @param collectionName Name of the collection to be added in the type of event data (tracks, hits etc.).\n * @param cuts Cuts to the collection of event data that are to be made configurable to filter event data.\n * @param collectionColor Default color of the collection.\n */\n addCollection(\n eventDataType: string,\n collectionName: string,\n cuts?: Cut[],\n collectionColor?: Color\n ): void;\n\n /**\n * Add labels folder to the menu.\n * @param configFunctions Functions to attach to the labels folder configuration.\n */\n addLabelsFolder(configFunctions: any): void;\n\n /**\n * Add folder for configuration of label.\n * @param labelId Unique ID of the label.\n * @param onRemoveLabel Function called when label is removed.\n */\n addLabel(labelId: string, onRemoveLabel: () => void): void;\n\n /**\n * Remove label from the menu and scene if it exists.\n * @param labelId A unique label ID string.\n * @param labelFolderReference Reference to the label folder.\n */\n removeLabel(labelId: string, labelFolderReference?: T): void;\n\n /**\n * Get the folder of the event data type.\n * @param typeName Name of the event data type.\n * @returns Folder of the event data type.\n */\n getEventDataTypeFolder(typeName: string): T;\n}\n\n \n\n\n\n\n\n\n\n\n\n \n \n results matching \"\"\n \n \n \n No results matching \"\"\n \n\n"},"classes/PresetView.html":{"url":"classes/PresetView.html","title":"class - PresetView","body":"\n \n\n\n\n\n\n\n\n\n\n\n\n\n\n Classes\n PresetView\n\n\n\n \n Info\n \n \n Source\n \n\n\n\n \n \n File\n \n \n src/lib/models/preset-view.model.ts\n \n\n\n \n Description\n \n \n Preset view for easily transforming/changing camera position to a specified position.\nAlso allows to point the camera to a given target and to define the default clipping for that view\n\n \n\n\n\n\n \n Index\n \n \n \n \n Properties\n \n \n \n \n \n \n Public\n cameraPos\n \n \n Public\n cameraTarget\n \n \n Public\n clipping\n \n \n Public\n clippingOpeningAngle\n \n \n Public\n clippingStartAngle\n \n \n Public\n icon\n \n \n Public\n name\n \n \n \n \n\n \n \n Methods\n \n \n \n \n \n \n getIconURL\n \n \n \n \n\n\n\n\n\n \n \n\n\n \n Constructor\n \n \n \n \nconstructor(name: string, cameraPos: number[], cameraTarget: number[], icon: string, clipping: ClippingSetting, clippingStartAngle: number, clippingOpeningAngle: number)\n \n \n \n \n Defined in src/lib/models/preset-view.model.ts:28\n \n \n\n \n \n Create a preset view.\n\n \n Parameters :\n \n \n \n Name\n Type\n Optional\n Description\n \n \n \n \n name\n \n \n string\n \n \n \n No\n \n \n \n Name of the preset view.\n\n \n \n \n cameraPos\n \n \n number[]\n \n \n \n No\n \n \n \n Position to which the camera is to be set.\n\n \n \n \n cameraTarget\n \n \n number[]\n \n \n \n No\n \n \n \n Target to which the camera is pointing.\n\n \n \n \n icon\n \n \n string\n \n \n \n No\n \n \n \n Icon of the preset view (to describe the view angle).\n\n \n \n \n clipping\n \n \n ClippingSetting\n \n \n \n No\n \n \n \n \n \n \n clippingStartAngle\n \n \n number\n \n \n \n No\n \n \n \n \n \n \n clippingOpeningAngle\n \n \n number\n \n \n \n No\n \n \n \n \n \n \n \n \n \n \n \n \n\n\n \n \n \n Properties\n \n \n \n \n \n \n \n Public\n cameraPos\n \n \n \n \n \n \n Type : number[]\n\n \n \n \n \n Defined in src/lib/models/preset-view.model.ts:18\n \n \n\n \n \n Position to which the camera is to be set.\n\n \n \n\n \n \n \n \n \n \n \n \n Public\n cameraTarget\n \n \n \n \n \n \n Type : number[]\n\n \n \n \n \n Defined in src/lib/models/preset-view.model.ts:20\n \n \n\n \n \n Target to which the camera is pointing.\n\n \n \n\n \n \n \n \n \n \n \n \n Public\n clipping\n \n \n \n \n \n \n Type : ClippingSetting\n\n \n \n \n \n Defined in src/lib/models/preset-view.model.ts:24\n \n \n\n \n \n Whether clipping should be used.\n\n \n \n\n \n \n \n \n \n \n \n \n Public\n clippingOpeningAngle\n \n \n \n \n \n \n Type : number\n\n \n \n \n \n Defined in src/lib/models/preset-view.model.ts:28\n \n \n\n \n \n In case of clipping, value of the opening angle.\n\n \n \n\n \n \n \n \n \n \n \n \n Public\n clippingStartAngle\n \n \n \n \n \n \n Type : number\n\n \n \n \n \n Defined in src/lib/models/preset-view.model.ts:26\n \n \n\n \n \n In case of clipping, value of the start angle.\n\n \n \n\n \n \n \n \n \n \n \n \n Public\n icon\n \n \n \n \n \n \n Type : string\n\n \n \n \n \n Defined in src/lib/models/preset-view.model.ts:16\n \n \n\n \n \n Icon of the preset view (to describe the view angle).\n\n \n \n\n \n \n \n \n \n \n \n \n Public\n name\n \n \n \n \n \n \n Type : string\n\n \n \n \n \n Defined in src/lib/models/preset-view.model.ts:22\n \n \n\n \n \n Name of the preset view.\n\n \n \n\n \n \n\n\n \n \n \n Methods\n \n \n \n \n \n \n \n getIconURL\n \n \n \n \n \n \ngetIconURL()\n \n \n\n\n \n \n Defined in src/lib/models/preset-view.model.ts:59\n \n \n\n\n \n \n Get the URL of the preset view icon.\n\n\n \n \n \n Returns : string\n\n \n \n Icon URL.\n\n \n \n \n \n \n\n\n\n\n\n\n \n\n\n \n export enum ClippingSetting {\n NotForced,\n On,\n Off,\n}\n\n/**\n * Preset view for easily transforming/changing camera position to a specified position.\n * Also allows to point the camera to a given target and to define the default clipping for that view\n */\nexport class PresetView {\n /** Icon of the preset view (to describe the view angle). */\n public icon: string;\n /** Position to which the camera is to be set. */\n public cameraPos: number[];\n /** Target to which the camera is pointing. */\n public cameraTarget: number[];\n /** Name of the preset view. */\n public name: string;\n /** Whether clipping should be used. */\n public clipping: ClippingSetting;\n /** In case of clipping, value of the start angle. */\n public clippingStartAngle: number;\n /** In case of clipping, value of the opening angle. */\n public clippingOpeningAngle: number;\n\n /**\n * Create a preset view.\n * @param name Name of the preset view.\n * @param cameraPos Position to which the camera is to be set.\n * @param cameraTarget Target to which the camera is pointing.\n * @param icon Icon of the preset view (to describe the view angle).\n */\n constructor(\n name: string,\n cameraPos: number[],\n cameraTarget: number[],\n icon: string,\n clipping: ClippingSetting = ClippingSetting.NotForced,\n clippingStartAngle: number = 0,\n clippingOpeningAngle: number = 0\n ) {\n this.name = name;\n this.cameraPos = cameraPos;\n this.cameraTarget = cameraTarget;\n this.icon = icon;\n this.clipping = clipping;\n this.clippingStartAngle = clippingStartAngle;\n this.clippingOpeningAngle = clippingOpeningAngle;\n }\n\n /**\n * Get the URL of the preset view icon.\n * @returns Icon URL.\n */\n getIconURL(): string {\n return 'assets/preset-views/' + this.icon + '.svg#' + this.icon;\n }\n}\n\n \n\n\n\n\n\n\n\n\n\n\n \n \n results matching \"\"\n \n \n \n No results matching \"\"\n \n\n"},"classes/PrettySymbols.html":{"url":"classes/PrettySymbols.html","title":"class - PrettySymbols","body":"\n \n\n\n\n\n\n\n\n\n\n\n\n\n\n Classes\n PrettySymbols\n\n\n\n \n Info\n \n \n Source\n \n\n\n\n \n \n File\n \n \n src/helpers/pretty-symbols.ts\n \n\n\n \n Description\n \n \n Helper for pretty symbols functions.\n\n \n\n\n\n\n \n Index\n \n \n \n \n Properties\n \n \n \n \n \n \n Static\n Readonly\n symbols\n \n \n \n \n\n \n \n Methods\n \n \n \n \n \n \n Static\n getPrettyParams\n \n \n Static\n getPrettySymbol\n \n \n \n \n\n\n\n\n\n \n \n\n\n\n \n \n \n Properties\n \n \n \n \n \n \n \n Static\n Readonly\n symbols\n \n \n \n \n \n \n Type : literal type\n\n \n \n \n \n Default value : {\n θ: ['theta'],\n ϕ: ['phi'],\n pT: ['pt'],\n '𝛘2': ['chi2'],\n η: ['eta'],\n q: ['charge'],\n NDOF: ['ndof'],\n DOF: ['dof'],\n Energy: ['energy'],\n ET: ['et'],\n '|p|': ['momentum', 'mom'],\n }\n \n \n \n \n Defined in src/helpers/pretty-symbols.ts:6\n \n \n\n \n \n Pretty symbols for object params.\n\n \n \n\n \n \n\n\n \n \n \n Methods\n \n \n \n \n \n \n \n Static\n getPrettyParams\n \n \n \n \n \n \n \n getPrettyParams(params: literal type)\n \n \n\n\n \n \n Defined in src/helpers/pretty-symbols.ts:37\n \n \n\n\n \n \n Get pretty printed parameters of an object.\n\n\n \n Parameters :\n \n \n \n \n Name\n Type\n Optional\n Description\n \n \n \n \n params\n \n literal type\n \n\n \n No\n \n\n\n \n Object parameters to be pretty printed.\n\n \n \n \n \n \n \n \n \n Returns : literal type\n\n \n \n New pretty printed parameterss.\n\n \n \n \n \n \n \n \n \n \n \n \n Static\n getPrettySymbol\n \n \n \n \n \n \n \n getPrettySymbol(param: string)\n \n \n\n\n \n \n Defined in src/helpers/pretty-symbols.ts:24\n \n \n\n\n \n \n Get pretty symbol of a parameter.\n\n\n \n Parameters :\n \n \n \n \n Name\n Type\n Optional\n Description\n \n \n \n \n param\n \n string\n \n\n \n No\n \n\n\n \n Parameter of a physics object.\n\n \n \n \n \n \n \n \n \n Returns : any\n\n \n \n \n \n \n \n \n \n\n\n\n\n\n\n \n\n\n \n export class PrettySymbols {\n /** Pretty symbols for object params. */\n public static readonly symbols: { [key: string]: string[] } = {\n θ: ['theta'],\n ϕ: ['phi'],\n pT: ['pt'],\n '𝛘2': ['chi2'],\n η: ['eta'],\n q: ['charge'],\n NDOF: ['ndof'],\n DOF: ['dof'],\n Energy: ['energy'],\n ET: ['et'],\n '|p|': ['momentum', 'mom'],\n };\n\n /**\n * Get pretty symbol of a parameter.\n * @param param Parameter of a physics object.\n */\n public static getPrettySymbol(param: string) {\n const prettySymbol = Object.keys(PrettySymbols.symbols).find((symbol) =>\n PrettySymbols.symbols[symbol].includes(param)\n );\n\n return prettySymbol ? prettySymbol : param;\n }\n\n /**\n * Get pretty printed parameters of an object.\n * @param params Object parameters to be pretty printed.\n * @returns New pretty printed parameterss.\n */\n public static getPrettyParams(params: { [key: string]: any }): {\n [key: string]: any;\n } {\n // Create a copy of the params so we don't overwrite the original object\n const paramsCopy = Object.assign({}, params);\n // Go through all the parameters\n for (const paramKey of Object.keys(paramsCopy)) {\n // Get the pretty printed symbol\n const symbol = PrettySymbols.getPrettySymbol(paramKey);\n // If we do get a symbol\n if (symbol !== paramKey) {\n // Add a parameter with pretty printed symbol\n paramsCopy[symbol] = paramsCopy[paramKey];\n delete paramsCopy[paramKey];\n }\n }\n\n // Delete 'pos' since it's too long and not needed\n delete paramsCopy['pos'];\n\n // Pretty print the dparams if any\n if (paramsCopy?.dparams) {\n const prettyDParams: { [key: string]: any } = {};\n\n prettyDParams['θ'] = paramsCopy.dparams[3];\n prettyDParams['ϕ'] = paramsCopy.dparams[2];\n prettyDParams['|p|'] = Math.abs(1 / paramsCopy.dparams[4]);\n prettyDParams['q'] = Math.sign(1 / paramsCopy.dparams[4]);\n prettyDParams['d0'] = paramsCopy.dparams[0];\n prettyDParams['z0'] = paramsCopy.dparams[1];\n\n delete paramsCopy.dparams;\n\n return { ...paramsCopy, ...prettyDParams };\n }\n\n return paramsCopy;\n }\n}\n\n \n\n\n\n\n\n\n\n\n\n\n \n \n results matching \"\"\n \n \n \n No results matching \"\"\n \n\n"},"classes/RKHelper.html":{"url":"classes/RKHelper.html","title":"class - RKHelper","body":"\n \n\n\n\n\n\n\n\n\n\n\n\n\n\n Classes\n RKHelper\n\n\n\n \n Info\n \n \n Source\n \n\n\n\n \n \n File\n \n \n src/helpers/rk-helper.ts\n \n\n\n \n Description\n \n \n Helper methods for RungeKutta functions.\n\n \n\n\n\n\n \n Index\n \n \n\n \n \n Methods\n \n \n \n \n \n \n Static\n extrapolateTrackPositions\n \n \n Static\n extrapolationLimit\n \n \n Static\n getTracksWithRungeKutta\n \n \n \n \n\n\n\n\n\n \n \n\n\n\n\n \n \n \n Methods\n \n \n \n \n \n \n \n Static\n extrapolateTrackPositions\n \n \n \n \n \n \n \n extrapolateTrackPositions(track: literal type, inbounds: (pos: Vector3) => void)\n \n \n\n\n \n \n Defined in src/helpers/rk-helper.ts:44\n \n \n\n\n \n \n Extrapolate tracks using RungeKutta propagator.\nis out of bounds, when it returns false. Default is RKHelper.extrapolationLimit\n\n\n \n Parameters :\n \n \n \n \n Name\n Type\n Optional\n Default value\n Description\n \n \n \n \n track\n \n literal type\n \n\n \n No\n \n\n \n \n\n \n Track which is to be extrapolated.\n\n \n \n \n inbounds\n \n function\n \n\n \n No\n \n\n \n RKHelper.extrapolationLimit\n \n\n \n Function which returns true until the passed position\nis out of bounds, when it returns false. Default is RKHelper.extrapolationLimit\n\n \n \n \n \n \n \n \n \n Returns : any\n\n \n \n An array of track positions.\n\n \n \n \n \n \n \n \n \n \n \n \n Static\n extrapolationLimit\n \n \n \n \n \n \n \n extrapolationLimit(pos: Vector3)\n \n \n\n\n \n \n Defined in src/helpers/rk-helper.ts:14\n \n \n\n\n \n \n Function used by the extrapolator to check if the extrapolation should continue.\n\n\n \n Parameters :\n \n \n \n \n Name\n Type\n Optional\n Description\n \n \n \n \n pos\n \n Vector3\n \n\n \n No\n \n\n\n \n Location to be tested\n\n \n \n \n \n \n \n \n \n Returns : boolean\n\n \n \n A boolean: true, if the position is in-bounds, false otherwise.\n\n \n \n \n \n \n \n \n \n \n \n \n Static\n getTracksWithRungeKutta\n \n \n \n \n \n \n \n getTracksWithRungeKutta(tracksCollectionsEvent: any)\n \n \n\n\n \n \n Defined in src/helpers/rk-helper.ts:24\n \n \n\n\n \n \n Get extrapolated tracks using RungeKutta.\n\n\n \n Parameters :\n \n \n \n \n Name\n Type\n Optional\n Description\n \n \n \n \n tracksCollectionsEvent\n \n any\n \n\n \n No\n \n\n\n \n Event containing tracks collections.\n\n \n \n \n \n \n \n \n \n Returns : {}\n\n \n \n \n \n \n \n \n \n\n\n\n\n\n\n \n\n\n \n import { RungeKutta } from './runge-kutta';\nimport { Vector3 } from 'three';\nimport { CoordinateHelper } from './coordinate-helper';\n\n/**\n * Helper methods for RungeKutta functions.\n */\nexport class RKHelper {\n /**\n * Function used by the extrapolator to check if the extrapolation should continue.\n * @param pos Location to be tested\n * @returns A boolean: true, if the position is in-bounds, false otherwise.\n */\n public static extrapolationLimit(pos: Vector3) {\n if (pos.z > 3000) return false;\n if (Math.sqrt(pos.x * pos.x + pos.y * pos.y) > 1100) return false;\n return true;\n }\n\n /**\n * Get extrapolated tracks using RungeKutta.\n * @param tracksCollectionsEvent Event containing tracks collections.\n */\n public static getTracksWithRungeKutta(tracksCollectionsEvent: any) {\n const tracksCollections = Object.assign({}, tracksCollectionsEvent);\n const Tracks = {};\n for (const tracksCollection of Object.keys(tracksCollections)) {\n for (const track of tracksCollections[tracksCollection]) {\n track.pos = RKHelper.extrapolateTrackPositions(track);\n }\n }\n\n return Tracks;\n }\n\n /**\n * Extrapolate tracks using RungeKutta propagator.\n * @param track Track which is to be extrapolated.\n * @param inbounds Function which returns true until the passed position\n * is out of bounds, when it returns false. Default is RKHelper.extrapolationLimit\n * @returns An array of track positions.\n\n */\n public static extrapolateTrackPositions(\n track: { dparams: any },\n inbounds: (pos: Vector3) => boolean = RKHelper.extrapolationLimit\n ): any {\n const dparams = track.dparams;\n // ATLAS uses mm, MeV\n const d0 = dparams[0];\n const z0 = dparams[1];\n const phi = dparams[2];\n let theta = dparams[3];\n const qop = dparams[4];\n\n if (theta [\n val.pos.x,\n val.pos.y,\n val.pos.z,\n ]);\n\n return positions.concat(extrapolatedPos);\n }\n}\n\n \n\n\n\n\n\n\n\n\n\n\n \n \n results matching \"\"\n \n \n \n No results matching \"\"\n \n\n"},"classes/RendererManager.html":{"url":"classes/RendererManager.html","title":"class - RendererManager","body":"\n \n\n\n\n\n\n\n\n\n\n\n\n\n\n Classes\n RendererManager\n\n\n\n \n Info\n \n \n Source\n \n\n\n\n \n \n File\n \n \n src/managers/three-manager/renderer-manager.ts\n \n\n\n \n Description\n \n \n Manager for managing event display's renderer related functions.\n\n \n\n\n\n\n \n Index\n \n \n \n \n Properties\n \n \n \n \n \n \n Private\n fixedOverlay\n \n \n Private\n mainRenderer\n \n \n Private\n overlayRenderer\n \n \n Private\n renderers\n \n \n \n \n\n \n \n Methods\n \n \n \n \n \n \n Public\n addRenderer\n \n \n Private\n containsObject\n \n \n Public\n getLocalClipping\n \n \n getMainRenderer\n \n \n getOverlayRenderer\n \n \n getRenderers\n \n \n Public\n init\n \n \n Private\n initRenderer\n \n \n isFixedOverlay\n \n \n Public\n removeControls\n \n \n Public\n render\n \n \n setFixOverlay\n \n \n Public\n setLocalClippingEnabled\n \n \n setMainRenderer\n \n \n Public\n setOverlayRenderer\n \n \n setRenderers\n \n \n Public\n swapRenderers\n \n \n \n \n\n\n\n\n\n \n \n\n\n \n Constructor\n \n \n \n \nconstructor()\n \n \n \n \n Defined in src/managers/three-manager/renderer-manager.ts:14\n \n \n\n \n \n Create the renderer manager by initializing the main renderer.\n\n \n \n \n \n\n\n \n \n \n Properties\n \n \n \n \n \n \n \n Private\n fixedOverlay\n \n \n \n \n \n \n Type : boolean\n\n \n \n \n \n Defined in src/managers/three-manager/renderer-manager.ts:14\n \n \n\n \n \n If the overlay is fixed or not.\n\n \n \n\n \n \n \n \n \n \n \n \n Private\n mainRenderer\n \n \n \n \n \n \n Type : WebGLRenderer\n\n \n \n \n \n Default value : null\n \n \n \n \n Defined in src/managers/three-manager/renderer-manager.ts:8\n \n \n\n \n \n Main renderer to be used by the event display.\n\n \n \n\n \n \n \n \n \n \n \n \n Private\n overlayRenderer\n \n \n \n \n \n \n Type : WebGLRenderer\n\n \n \n \n \n Default value : null\n \n \n \n \n Defined in src/managers/three-manager/renderer-manager.ts:10\n \n \n\n \n \n Overlay renderer for rendering a secondary overlay canvas.\n\n \n \n\n \n \n \n \n \n \n \n \n Private\n renderers\n \n \n \n \n \n \n Type : WebGLRenderer[]\n\n \n \n \n \n Default value : []\n \n \n \n \n Defined in src/managers/three-manager/renderer-manager.ts:12\n \n \n\n \n \n A list of all available/created renderers.\n\n \n \n\n \n \n\n\n \n \n \n Methods\n \n \n \n \n \n \n \n Public\n addRenderer\n \n \n \n \n \n \n \n addRenderer(renderer: WebGLRenderer)\n \n \n\n\n \n \n Defined in src/managers/three-manager/renderer-manager.ts:153\n \n \n\n\n \n \n Add a renderer to the available renderers list.\n\n\n \n Parameters :\n \n \n \n \n Name\n Type\n Optional\n Description\n \n \n \n \n renderer\n \n WebGLRenderer\n \n\n \n No\n \n\n\n \n Three.js WebGLRenderer to be added.\n\n \n \n \n \n \n \n \n \n Returns : void\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n Private\n containsObject\n \n \n \n \n \n \n \n containsObject(obj: WebGLRenderer, list: WebGLRenderer[])\n \n \n\n\n \n \n Defined in src/managers/three-manager/renderer-manager.ts:187\n \n \n\n\n \n \n Check if the list of available renderers contains a renderer.\n\n\n \n Parameters :\n \n \n \n \n Name\n Type\n Optional\n Description\n \n \n \n \n obj\n \n WebGLRenderer\n \n\n \n No\n \n\n\n \n The renderer to be checked for containment.\n\n \n \n \n list\n \n WebGLRenderer[]\n \n\n \n No\n \n\n\n \n List of available renderers.\n\n \n \n \n \n \n \n \n \n Returns : boolean\n\n \n \n If the list contains the renderer or not.\n\n \n \n \n \n \n \n \n \n \n \n \n Public\n getLocalClipping\n \n \n \n \n \n \n \n getLocalClipping()\n \n \n\n\n \n \n Defined in src/managers/three-manager/renderer-manager.ts:210\n \n \n\n\n \n \n Get if the local clipping for the first renderer is enabled or disabled.\n\n\n \n \n \n Returns : any\n\n \n \n If the renderer local clipping is enabled or disabled.\n\n \n \n \n \n \n \n \n \n \n \n \n getMainRenderer\n \n \n \n \n \n \ngetMainRenderer()\n \n \n\n\n \n \n Defined in src/managers/three-manager/renderer-manager.ts:127\n \n \n\n\n \n \n Get the main renderer.\n\n\n \n \n \n Returns : WebGLRenderer\n\n \n \n The main renderer.\n\n \n \n \n \n \n \n \n \n \n \n \n getOverlayRenderer\n \n \n \n \n \n \ngetOverlayRenderer()\n \n \n\n\n \n \n Defined in src/managers/three-manager/renderer-manager.ts:135\n \n \n\n\n \n \n Get the renderer used for overlay.\n\n\n \n \n \n Returns : WebGLRenderer\n\n \n \n The overlay renderer.\n\n \n \n \n \n \n \n \n \n \n \n \n getRenderers\n \n \n \n \n \n \ngetRenderers()\n \n \n\n\n \n \n Defined in src/managers/three-manager/renderer-manager.ts:143\n \n \n\n\n \n \n Get all the available renderers.\n\n\n \n \n \n Returns : WebGLRenderer[]\n\n \n \n A list of three.js WebGLRenderers\n\n \n \n \n \n \n \n \n \n \n \n \n Public\n init\n \n \n \n \n \n \n \n init(elementId: string)\n \n \n\n\n \n \n Defined in src/managers/three-manager/renderer-manager.ts:34\n \n \n\n\n \n \n Initialize the renderer manager by setting up the main renderer.\n\n\n \n Parameters :\n \n \n \n \n Name\n Type\n Optional\n Default value\n Description\n \n \n \n \n elementId\n \n string\n \n\n \n No\n \n\n \n 'eventDisplay'\n \n\n \n ID of the wrapper element.\n\n \n \n \n \n \n \n \n \n Returns : void\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n Private\n initRenderer\n \n \n \n \n \n \n \n initRenderer(elementId: string)\n \n \n\n\n \n \n Defined in src/managers/three-manager/renderer-manager.ts:64\n \n \n\n\n \n \n Set up the renderer with the DOM.\n\n\n \n Parameters :\n \n \n \n \n Name\n Type\n Optional\n Description\n \n \n \n \n elementId\n \n string\n \n\n \n No\n \n\n\n \n ID of the wrapper element.\n\n \n \n \n \n \n \n \n \n Returns : void\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n isFixedOverlay\n \n \n \n \n \n \nisFixedOverlay()\n \n \n\n\n \n \n Defined in src/managers/three-manager/renderer-manager.ts:220\n \n \n\n\n \n \n Check if the overlay is fixed or not.\n\n\n \n \n \n Returns : boolean\n\n \n \n If the overlay is fixed or not.\n\n \n \n \n \n \n \n \n \n \n \n \n Public\n removeControls\n \n \n \n \n \n \n \n removeControls(renderer: WebGLRenderer)\n \n \n\n\n \n \n Defined in src/managers/three-manager/renderer-manager.ts:163\n \n \n\n\n \n \n Remove a renderer from the available renderers list.\n\n\n \n Parameters :\n \n \n \n \n Name\n Type\n Optional\n Description\n \n \n \n \n renderer\n \n WebGLRenderer\n \n\n \n No\n \n\n\n \n Three,js WebGLRenderer to be removed.\n\n \n \n \n \n \n \n \n \n Returns : void\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n Public\n render\n \n \n \n \n \n \n \n render(scene: Scene, camera: Camera)\n \n \n\n\n \n \n Defined in src/managers/three-manager/renderer-manager.ts:46\n \n \n\n\n \n \n Render the overlay.\n\n\n \n Parameters :\n \n \n \n \n Name\n Type\n Optional\n Description\n \n \n \n \n scene\n \n Scene\n \n\n \n No\n \n\n\n \n The event display scene to render.\n\n \n \n \n camera\n \n Camera\n \n\n \n No\n \n\n\n \n Camera for render.\n\n \n \n \n \n \n \n \n \n Returns : void\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n setFixOverlay\n \n \n \n \n \n \nsetFixOverlay(value: boolean)\n \n \n\n\n \n \n Defined in src/managers/three-manager/renderer-manager.ts:228\n \n \n\n\n \n \n Set if the overlay is to be fixed or not.\n\n\n \n Parameters :\n \n \n \n \n Name\n Type\n Optional\n Description\n \n \n \n \n value\n \n boolean\n \n\n \n No\n \n\n\n \n If the overlay is to be fixed or not.\n\n \n \n \n \n \n \n \n \n Returns : void\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n Public\n setLocalClippingEnabled\n \n \n \n \n \n \n \n setLocalClippingEnabled(value: boolean)\n \n \n\n\n \n \n Defined in src/managers/three-manager/renderer-manager.ts:200\n \n \n\n\n \n \n Set if local clipping is to be enabled or disabled for all the available renderers.\n\n\n \n Parameters :\n \n \n \n \n Name\n Type\n Optional\n Description\n \n \n \n \n value\n \n boolean\n \n\n \n No\n \n\n\n \n If the local clipping is to be enabled or disabled.\n\n \n \n \n \n \n \n \n \n Returns : void\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n setMainRenderer\n \n \n \n \n \n \nsetMainRenderer(renderer: WebGLRenderer)\n \n \n\n\n \n \n Defined in src/managers/three-manager/renderer-manager.ts:97\n \n \n\n\n \n \n Set the main renderer.\n\n\n \n Parameters :\n \n \n \n \n Name\n Type\n Optional\n Description\n \n \n \n \n renderer\n \n WebGLRenderer\n \n\n \n No\n \n\n\n \n Three.js WebGLRenderer.\n\n \n \n \n \n \n \n \n \n Returns : void\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n Public\n setOverlayRenderer\n \n \n \n \n \n \n \n setOverlayRenderer(overlayCanvas: HTMLCanvasElement)\n \n \n\n\n \n \n Defined in src/managers/three-manager/renderer-manager.ts:105\n \n \n\n\n \n \n Set the renderer for overlay event display view.\n\n\n \n Parameters :\n \n \n \n \n Name\n Type\n Optional\n Description\n \n \n \n \n overlayCanvas\n \n HTMLCanvasElement\n \n\n \n No\n \n\n\n \n Canvas on which the overlay is to be rendered.\n\n \n \n \n \n \n \n \n \n Returns : void\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n setRenderers\n \n \n \n \n \n \nsetRenderers(renderers: WebGLRenderer[])\n \n \n\n\n \n \n Defined in src/managers/three-manager/renderer-manager.ts:119\n \n \n\n\n \n \n Set the available renderers.\n\n\n \n Parameters :\n \n \n \n \n Name\n Type\n Optional\n Description\n \n \n \n \n renderers\n \n WebGLRenderer[]\n \n\n \n No\n \n\n\n \n List of three.js WebGLRenderers.\n\n \n \n \n \n \n \n \n \n Returns : void\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n Public\n swapRenderers\n \n \n \n \n \n \n \n swapRenderers(rendererA: WebGLRenderer, rendererB: WebGLRenderer)\n \n \n\n\n \n \n Defined in src/managers/three-manager/renderer-manager.ts:175\n \n \n\n\n \n \n Swap any two renderers.\n\n\n \n Parameters :\n \n \n \n \n Name\n Type\n Optional\n Description\n \n \n \n \n rendererA\n \n WebGLRenderer\n \n\n \n No\n \n\n\n \n Renderer A to be swapped with renderer B.\n\n \n \n \n rendererB\n \n WebGLRenderer\n \n\n \n No\n \n\n\n \n Renderer B to be swapped with renderer A.\n\n \n \n \n \n \n \n \n \n Returns : void\n\n \n \n \n \n \n \n \n \n\n\n\n\n\n\n \n\n\n \n import { WebGLRenderer, Scene, Camera } from 'three';\n\n/**\n * Manager for managing event display's renderer related functions.\n */\nexport class RendererManager {\n /** Main renderer to be used by the event display. */\n private mainRenderer: WebGLRenderer = null;\n /** Overlay renderer for rendering a secondary overlay canvas. */\n private overlayRenderer: WebGLRenderer = null;\n /** A list of all available/created renderers. */\n private renderers: WebGLRenderer[] = [];\n /** If the overlay is fixed or not. */\n private fixedOverlay: boolean;\n\n /**\n * Create the renderer manager by initializing the main renderer.\n */\n constructor() {\n const renderer: WebGLRenderer = new WebGLRenderer({\n antialias: true,\n alpha: true,\n powerPreference: 'high-performance',\n });\n\n this.addRenderer(renderer);\n this.setMainRenderer(renderer);\n }\n\n /**\n * Initialize the renderer manager by setting up the main renderer.\n * @param elementId ID of the wrapper element.\n */\n public init(elementId: string = 'eventDisplay') {\n // Reset the animation loop\n this.getMainRenderer().setAnimationLoop(null);\n // Main renderer for current browsers\n this.initRenderer(elementId);\n }\n\n /**\n * Render the overlay.\n * @param scene The event display scene to render.\n * @param camera Camera for render.\n */\n public render(scene: Scene, camera: Camera) {\n if (this.getOverlayRenderer()) {\n if (!this.getOverlayRenderer().domElement.hidden) {\n const sceneColor = scene.background;\n scene.background = null;\n\n if (!this.isFixedOverlay()) {\n this.getOverlayRenderer().render(scene, camera);\n }\n scene.background = sceneColor;\n }\n }\n }\n\n /**\n * Set up the renderer with the DOM.\n * @param elementId ID of the wrapper element.\n */\n private initRenderer(elementId: string) {\n let canvasWrapper = document.getElementById(elementId);\n if (!canvasWrapper) {\n canvasWrapper = document.body;\n }\n\n const rendererWidth = () =>\n canvasWrapper.offsetWidth > 0\n ? canvasWrapper.offsetWidth\n : window.innerWidth;\n const rendererHeight = () =>\n canvasWrapper.offsetHeight > 0\n ? canvasWrapper.offsetHeight\n : window.innerHeight;\n\n const mainRenderer = this.getMainRenderer();\n mainRenderer.setSize(rendererWidth(), rendererHeight(), false);\n mainRenderer.setPixelRatio(window.devicePixelRatio);\n mainRenderer.domElement.id = 'three-canvas';\n\n canvasWrapper.appendChild(this.getMainRenderer().domElement);\n\n window.addEventListener('resize', () => {\n mainRenderer.setSize(rendererWidth(), rendererHeight());\n });\n }\n\n // SET/GET\n\n /**\n * Set the main renderer.\n * @param renderer Three.js WebGLRenderer.\n */\n setMainRenderer(renderer: WebGLRenderer) {\n this.mainRenderer = renderer;\n }\n\n /**\n * Set the renderer for overlay event display view.\n * @param overlayCanvas Canvas on which the overlay is to be rendered.\n */\n public setOverlayRenderer(overlayCanvas: HTMLCanvasElement): void {\n const overlayRenderer: WebGLRenderer = new WebGLRenderer({\n canvas: overlayCanvas,\n antialias: false,\n alpha: true,\n });\n this.addRenderer(overlayRenderer);\n this.overlayRenderer = overlayRenderer;\n }\n\n /**\n * Set the available renderers.\n * @param renderers List of three.js WebGLRenderers.\n */\n setRenderers(renderers: WebGLRenderer[]) {\n this.renderers = renderers;\n }\n\n /**\n * Get the main renderer.\n * @returns The main renderer.\n */\n getMainRenderer(): WebGLRenderer {\n return this.mainRenderer;\n }\n\n /**\n * Get the renderer used for overlay.\n * @returns The overlay renderer.\n */\n getOverlayRenderer(): WebGLRenderer {\n return this.overlayRenderer;\n }\n\n /**\n * Get all the available renderers.\n * @returns A list of three.js WebGLRenderers\n */\n getRenderers(): WebGLRenderer[] {\n return this.renderers;\n }\n\n // FUNCTIONS\n\n /**\n * Add a renderer to the available renderers list.\n * @param renderer Three.js WebGLRenderer to be added.\n */\n public addRenderer(renderer: WebGLRenderer) {\n if (!this.containsObject(renderer, this.renderers)) {\n this.renderers.push(renderer);\n }\n }\n\n /**\n * Remove a renderer from the available renderers list.\n * @param renderer Three,js WebGLRenderer to be removed.\n */\n public removeControls(renderer: WebGLRenderer) {\n const index: number = this.renderers.indexOf(renderer);\n if (index > -1) {\n this.renderers.splice(index, 1);\n }\n }\n\n /**\n * Swap any two renderers.\n * @param rendererA Renderer A to be swapped with renderer B.\n * @param rendererB Renderer B to be swapped with renderer A.\n */\n public swapRenderers(rendererA: WebGLRenderer, rendererB: WebGLRenderer) {\n const temp: WebGLRenderer = rendererA;\n rendererA = rendererB;\n rendererB = temp;\n }\n\n /**\n * Check if the list of available renderers contains a renderer.\n * @param obj The renderer to be checked for containment.\n * @param list List of available renderers.\n * @returns If the list contains the renderer or not.\n */\n private containsObject(obj: WebGLRenderer, list: WebGLRenderer[]): boolean {\n for (const object of list) {\n if (object === obj) {\n return true;\n }\n }\n return false;\n }\n\n /**\n * Set if local clipping is to be enabled or disabled for all the available renderers.\n * @param value If the local clipping is to be enabled or disabled.\n */\n public setLocalClippingEnabled(value: boolean) {\n for (const renderer of this.renderers) {\n renderer.localClippingEnabled = value;\n }\n }\n\n /**\n * Get if the local clipping for the first renderer is enabled or disabled.\n * @returns If the renderer local clipping is enabled or disabled.\n */\n public getLocalClipping() {\n if (this.renderers.length > 0) {\n return this.renderers[0].localClippingEnabled;\n }\n }\n\n /**\n * Check if the overlay is fixed or not.\n * @returns If the overlay is fixed or not.\n */\n isFixedOverlay(): boolean {\n return this.fixedOverlay;\n }\n\n /**\n * Set if the overlay is to be fixed or not.\n * @param value If the overlay is to be fixed or not.\n */\n setFixOverlay(value: boolean) {\n this.fixedOverlay = value;\n }\n}\n\n \n\n\n\n\n\n\n\n\n\n\n \n \n results matching \"\"\n \n \n \n No results matching \"\"\n \n\n"},"classes/RungeKutta.html":{"url":"classes/RungeKutta.html","title":"class - RungeKutta","body":"\n \n\n\n\n\n\n\n\n\n\n\n\n\n\n Classes\n RungeKutta\n\n\n\n \n Info\n \n \n Source\n \n\n\n\n \n \n File\n \n \n src/helpers/runge-kutta.ts\n \n\n\n \n Description\n \n \n Class for performing Runge-Kutta operations.\n\n \n\n\n\n\n \n Index\n \n \n\n \n \n Methods\n \n \n \n \n \n \n Static\n propagate\n \n \n Static\n step\n \n \n \n \n\n\n\n\n\n \n \n\n\n\n\n \n \n \n Methods\n \n \n \n \n \n \n \n Static\n propagate\n \n \n \n \n \n \n \n propagate(startPos: Vector3, startDir: Vector3, p: number, q: number, mss: number, plength: number, inbounds: (pos: Vector3) => void)\n \n \n\n\n \n \n Defined in src/helpers/runge-kutta.ts:126\n \n \n\n\n \n \n Propagate using the given properties by performing the Runge-Kutta steps.\nis out of bounds, when it returns false.\nthrough the Runge-Kutta steps.\n\n\n \n Parameters :\n \n \n \n \n Name\n Type\n Optional\n Default value\n Description\n \n \n \n \n startPos\n \n Vector3\n \n\n \n No\n \n\n \n \n\n \n Starting position in 3D space.\n\n \n \n \n startDir\n \n Vector3\n \n\n \n No\n \n\n \n \n\n \n Starting direction in 3D space.\n\n \n \n \n p\n \n number\n \n\n \n No\n \n\n \n \n\n \n Momentum.\n\n \n \n \n q\n \n number\n \n\n \n No\n \n\n \n \n\n \n Charge.\n\n \n \n \n mss\n \n number\n \n\n \n No\n \n\n \n -1\n \n\n \n Max step size.\n\n \n \n \n plength\n \n number\n \n\n \n No\n \n\n \n 1000\n \n\n \n Path length.\n\n \n \n \n inbounds\n \n function\n \n\n \n No\n \n\n \n () => true\n \n\n \n Function which returns true until the passed position\nis out of bounds, when it returns false.\n\n \n \n \n \n \n \n \n \n Returns : literal type[]\n\n \n \n An array containing position and direction at that position calculated\nthrough the Runge-Kutta steps.\n\n \n \n \n \n \n \n \n \n \n \n \n Static\n step\n \n \n \n \n \n \n \n step(state: State)\n \n \n\n\n \n \n Defined in src/helpers/runge-kutta.ts:12\n \n \n\n\n \n \n Perform a Runge-Kutta step for the given state.\n\n\n \n Parameters :\n \n \n \n \n Name\n Type\n Optional\n Description\n \n \n \n \n state\n \n State\n \n\n \n No\n \n\n\n \n State at which the step is to be performed.\n\n \n \n \n \n \n \n \n \n Returns : number\n\n \n \n The computed step size.\n\n \n \n \n \n \n\n\n\n\n\n\n \n\n\n \n import { Vector3 } from 'three';\n\n/**\n * Class for performing Runge-Kutta operations.\n */\nexport class RungeKutta {\n /**\n * Perform a Runge-Kutta step for the given state.\n * @param state State at which the step is to be performed.\n * @returns The computed step size.\n */\n static step(state: State): number {\n // Charge (q) to momentum (p) ratio in SI units\n const qop: number = state.q / (state.unitC * state.p);\n\n // Runge-Kutta integrator state\n let h2: number,\n half_h: number,\n B_middle: Vector3,\n B_last: Vector3,\n k2: Vector3,\n k3: Vector3,\n k4: Vector3;\n\n // First Runge-Kutta point (at current position)\n const B_first: Vector3 = Field.get(state.pos);\n // state.dir.cross(B_first) * qop\n const k1: Vector3 = state.dir.clone().cross(B_first).multiplyScalar(qop);\n\n // Try Runge-Kutta step with h as the step size\n const tryRungeKuttaStep = (h: number) => {\n h2 = h * h;\n half_h = h / 2;\n\n // Second Runge-Kutta point\n // state.pos + state.dir * half_h + k1 * (h2 / 8)\n const pos1: Vector3 = state.pos\n .clone()\n .add(state.dir.clone().multiplyScalar(half_h))\n .add(k1.clone().multiplyScalar(h2 / 8));\n B_middle = Field.get(pos1);\n // (state.dir + k1 * half_h).cross(B_middle) * qop\n k2 = state.dir\n .clone()\n .add(k1.clone().multiplyScalar(half_h))\n .cross(B_middle)\n .multiplyScalar(qop);\n\n // Third Runge-Kutta point\n // (state.dir + k2 * half_h).cross(B_middle) * qop\n k3 = state.dir\n .clone()\n .add(k2.clone().multiplyScalar(half_h))\n .cross(B_middle)\n .multiplyScalar(qop);\n\n // Last Runge-Kutta point\n // state.pos + state.dir * h + k3 * (h2 / 2)\n const pos2: Vector3 = state.pos\n .clone()\n .add(state.dir.clone().multiplyScalar(h))\n .add(k3.clone().multiplyScalar(h2 / 2));\n B_last = Field.get(pos2);\n // (state.dir + k3 * h).cross(B_last) * qop\n k4 = state.dir\n .clone()\n .add(k3.clone().multiplyScalar(h))\n .cross(B_last)\n .multiplyScalar(qop);\n\n // (k1 - k2 - k3 + k4)\n const returnVec = k1.clone().sub(k2).sub(k3).add(k4);\n // h * (k1 - k2 - k3 + k4).lpNorm()\n return (\n h *\n (Math.abs(returnVec.x) + Math.abs(returnVec.y) + Math.abs(returnVec.z))\n );\n };\n\n // Checking the error estimate\n let error_estimate: number = tryRungeKuttaStep(state.stepSize);\n while (error_estimate > 0.0002) {\n state.stepSize *= 0.5;\n error_estimate = tryRungeKuttaStep(state.stepSize);\n }\n\n const fh: number = state.stepSize;\n const fh2: number = Math.pow(fh, 2);\n\n // Update position and momentum\n // state.pos += state.dir * fh + (k1 + k2 + k3) * (fh2 /6)\n state.pos.add(state.dir.clone().multiplyScalar(fh)).add(\n k1\n .clone()\n .add(k2)\n .add(k3)\n .multiplyScalar(fh2 / 6)\n );\n // state.dir += (k1 + k2 * 2 + k3 * 2 + k4) * (fh / 6)\n state.dir.add(\n k1\n .clone()\n .add(k2.clone().multiplyScalar(2))\n .add(k3.clone().multiplyScalar(2))\n .add(k4)\n .multiplyScalar(fh / 6)\n );\n state.dir.normalize();\n\n return state.stepSize;\n }\n\n /**\n * Propagate using the given properties by performing the Runge-Kutta steps.\n * @param startPos Starting position in 3D space.\n * @param startDir Starting direction in 3D space.\n * @param p Momentum.\n * @param q Charge.\n * @param mss Max step size.\n * @param plength Path length.\n * @param inbounds Function which returns true until the passed position\n * is out of bounds, when it returns false.\n * @returns An array containing position and direction at that position calculated\n * through the Runge-Kutta steps.\n */\n static propagate(\n startPos: Vector3,\n startDir: Vector3,\n p: number,\n q: number,\n mss: number = -1,\n plength: number = 1000,\n inbounds: (pos: Vector3) => boolean = () => true\n ): { pos: Vector3; dir: Vector3 }[] {\n const rkState: State = new State();\n rkState.pos = startPos;\n rkState.dir = startDir;\n rkState.p = p;\n rkState.q = q;\n rkState.maxStepSize = mss;\n\n const result: { pos: Vector3; dir: Vector3 }[] = [];\n\n while (rkState.pathLength \n \n\n\n\n\n\n\n\n\n\n\n \n \n results matching \"\"\n \n \n \n No results matching \"\"\n \n\n"},"classes/ScriptLoader.html":{"url":"classes/ScriptLoader.html","title":"class - ScriptLoader","body":"\n \n\n\n\n\n\n\n\n\n\n\n\n\n\n Classes\n ScriptLoader\n\n\n\n \n Info\n \n \n Source\n \n\n\n\n \n \n File\n \n \n src/loaders/script-loader.ts\n \n\n\n \n Description\n \n \n Script loader for dynamically loading external scripts.\n\n \n\n\n\n\n \n Index\n \n \n\n \n \n Methods\n \n \n \n \n \n \n Static\n loadScript\n \n \n \n \n\n\n\n\n\n \n \n\n\n\n\n \n \n \n Methods\n \n \n \n \n \n \n \n Static\n loadScript\n \n \n \n \n \n \n \n loadScript(scriptURL: string, scriptFor?: string, parentElement: HTMLElement)\n \n \n\n\n \n \n Defined in src/loaders/script-loader.ts:15\n \n \n\n\n \n \n Load a script dynamically from a URL.\nDefaults to tag.\n\n\n \n Parameters :\n \n \n \n \n Name\n Type\n Optional\n Default value\n Description\n \n \n \n \n scriptURL\n \n string\n \n\n \n No\n \n\n \n \n\n \n URL of the script to be loaded.\n\n \n \n \n scriptFor\n \n string\n \n\n \n Yes\n \n\n \n \n\n \n Optional data attribute to identify what the script is for. [data-scriptFor]\n\n \n \n \n parentElement\n \n HTMLElement\n \n\n \n No\n \n\n \n document.getElementsByTagName('head')[0]\n \n\n \n Parent element to which the script is to be appended.\nDefaults to tag.\n\n \n \n \n \n \n \n \n \n Returns : Promise\n\n \n \n Promise for the script load.\n\n \n \n \n \n \n\n\n\n\n\n\n \n\n\n \n import { LoadingManager } from '../managers/loading-manager';\n\n/**\n * Script loader for dynamically loading external scripts.\n */\nexport class ScriptLoader {\n /**\n * Load a script dynamically from a URL.\n * @param scriptURL URL of the script to be loaded.\n * @param scriptFor Optional data attribute to identify what the script is for. `[data-scriptFor]`\n * @param parentElement Parent element to which the script is to be appended.\n * Defaults to `` tag.\n * @returns Promise for the script load.\n */\n public static loadScript(\n scriptURL: string,\n scriptFor?: string,\n parentElement: HTMLElement = document.getElementsByTagName('head')[0]\n ): Promise {\n const loadingManager = new LoadingManager();\n loadingManager.addLoadableItem('single_script');\n\n return new Promise((resolve, reject) => {\n const scriptExists = document.querySelectorAll(\n 'script[src=\"' + scriptURL + '\"]'\n );\n\n // If no script exists - add one\n if (scriptExists.length === 0) {\n const scriptElement = document.createElement('script');\n scriptElement.type = 'text/javascript';\n scriptElement.src = scriptURL;\n if (scriptFor) {\n scriptElement.setAttribute('data-scriptfor', scriptFor);\n }\n\n scriptElement.addEventListener('load', () => {\n scriptElement.setAttribute('data-loaded', 'true');\n resolve();\n loadingManager.itemLoaded('single_script');\n });\n scriptElement.onerror = (event) => {\n console.error('ERROR LOADING SCRIPT: ', event);\n reject();\n loadingManager.itemLoaded('single_script');\n };\n\n parentElement.appendChild(scriptElement);\n } else {\n // If script has already loaded then resolve else wait for it to load\n if (scriptExists[0].dataset.loaded === 'true') {\n resolve();\n loadingManager.itemLoaded('single_script');\n } else {\n scriptExists[0].addEventListener('load', () => {\n resolve();\n loadingManager.itemLoaded('single_script');\n });\n }\n }\n });\n }\n}\n\n \n\n\n\n\n\n\n\n\n\n\n \n \n results matching \"\"\n \n \n \n No results matching \"\"\n \n\n"},"classes/SelectionManager.html":{"url":"classes/SelectionManager.html","title":"class - SelectionManager","body":"\n \n\n\n\n\n\n\n\n\n\n\n\n\n\n Classes\n SelectionManager\n\n\n\n \n Info\n \n \n Source\n \n\n\n\n \n \n File\n \n \n src/managers/three-manager/selection-manager.ts\n \n\n\n \n Description\n \n \n Manager for managing event display's selection related functions.\n\n \n\n\n\n\n \n Index\n \n \n \n \n Properties\n \n \n \n \n \n \n Private\n activeObject\n \n \n Private\n camera\n \n \n Private\n effectsManager\n \n \n Private\n ignoreList\n \n \n Private\n infoLogger\n \n \n Private\n isInit\n \n \n Private\n onDocumentMouseDown\n \n \n Private\n onTouchDown\n \n \n Private\n onTouchMove\n \n \n Private\n outlinePass\n \n \n Private\n preSelectionAntialias\n \n \n Private\n scene\n \n \n Private\n selectedObject\n \n \n \n \n\n \n \n Methods\n \n \n \n \n \n \n Private\n disableSelecting\n \n \n Private\n enableSelecting\n \n \n Public\n getActiveObjectId\n \n \n Public\n highlightObject\n \n \n Public\n init\n \n \n Private\n intersectObject\n \n \n Public\n setSelectedObject\n \n \n Public\n setSelecting\n \n \n \n \n\n\n\n\n\n \n \n\n\n \n Constructor\n \n \n \n \nconstructor()\n \n \n \n \n Defined in src/managers/three-manager/selection-manager.ts:43\n \n \n\n \n \n Constructor for the selection manager.\n\n \n \n \n \n\n\n \n \n \n Properties\n \n \n \n \n \n \n \n Private\n activeObject\n \n \n \n \n \n \n Default value : new ActiveVariable('')\n \n \n \n \n Defined in src/managers/three-manager/selection-manager.ts:30\n \n \n\n \n \n The currently selected object which is observable for changes.\n\n \n \n\n \n \n \n \n \n \n \n \n Private\n camera\n \n \n \n \n \n \n Type : Camera\n\n \n \n \n \n Defined in src/managers/three-manager/selection-manager.ts:24\n \n \n\n \n \n The camera inside the scene.\n\n \n \n\n \n \n \n \n \n \n \n \n Private\n effectsManager\n \n \n \n \n \n \n Type : EffectsManager\n\n \n \n \n \n Defined in src/managers/three-manager/selection-manager.ts:38\n \n \n\n \n \n Manager for managing three.js event display effects like outline pass and unreal bloom.\n\n \n \n\n \n \n \n \n \n \n \n \n Private\n ignoreList\n \n \n \n \n \n \n Type : string[]\n\n \n \n \n \n Defined in src/managers/three-manager/selection-manager.ts:32\n \n \n\n \n \n Objects to be ignored on hovering over the scene.\n\n \n \n\n \n \n \n \n \n \n \n \n Private\n infoLogger\n \n \n \n \n \n \n Type : InfoLogger\n\n \n \n \n \n Defined in src/managers/three-manager/selection-manager.ts:41\n \n \n\n \n \n Service for logging data to the information panel.\n\n \n \n\n \n \n \n \n \n \n \n \n Private\n isInit\n \n \n \n \n \n \n Type : boolean\n\n \n \n \n \n Defined in src/managers/three-manager/selection-manager.ts:22\n \n \n\n \n \n Is initialized.\n\n \n \n\n \n \n \n \n \n \n \n \n Private\n onDocumentMouseDown\n \n \n \n \n \n \n Default value : () => {...}\n \n \n \n \n Defined in src/managers/three-manager/selection-manager.ts:158\n \n \n\n \n \n Function to call on mouse click when object selection is enabled.\n\n \n \n\n \n \n \n \n \n \n \n \n Private\n onTouchDown\n \n \n \n \n \n \n Default value : () => {...}\n \n \n \n \n Defined in src/managers/three-manager/selection-manager.ts:207\n \n \n\n \n \n Function to call on touch when object selection is enabled.\n\n \n \n\n \n \n \n Parameters :\n \n \n \n Name\n Description\n \n \n \n \n event\n \n Event containing touch data.\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n Private\n onTouchMove\n \n \n \n \n \n \n Default value : () => {...}\n \n \n \n \n Defined in src/managers/three-manager/selection-manager.ts:145\n \n \n\n \n \n Function to call on mouse move when object selection is enabled.\n\n \n \n\n \n \n \n \n \n \n \n \n Private\n outlinePass\n \n \n \n \n \n \n Type : OutlinePass\n\n \n \n \n \n Defined in src/managers/three-manager/selection-manager.ts:36\n \n \n\n \n \n Outline pass for highlighting the hovered over event display elements.\n\n \n \n\n \n \n \n \n \n \n \n \n Private\n preSelectionAntialias\n \n \n \n \n \n \n Type : boolean\n\n \n \n \n \n Defined in src/managers/three-manager/selection-manager.ts:43\n \n \n\n \n \n Performance mode value before enabling selection.\n\n \n \n\n \n \n \n \n \n \n \n \n Private\n scene\n \n \n \n \n \n \n Type : Scene\n\n \n \n \n \n Defined in src/managers/three-manager/selection-manager.ts:26\n \n \n\n \n \n The scene used for event display.\n\n \n \n\n \n \n \n \n \n \n \n \n Private\n selectedObject\n \n \n \n \n \n \n Type : literal type\n\n \n \n \n \n Defined in src/managers/three-manager/selection-manager.ts:28\n \n \n\n \n \n Object used to display the information of the selected 3D object.\n\n \n \n\n \n \n\n\n \n \n \n Methods\n \n \n \n \n \n \n \n Private\n disableSelecting\n \n \n \n \n \n \n \n disableSelecting()\n \n \n\n\n \n \n Defined in src/managers/three-manager/selection-manager.ts:128\n \n \n\n\n \n \n Disable selecting of event display elements and remove mouse move and click events.\n\n\n \n Returns : void\n\n \n \n \n \n \n \n \n \n \n \n \n Private\n enableSelecting\n \n \n \n \n \n \n \n enableSelecting()\n \n \n\n\n \n \n Defined in src/managers/three-manager/selection-manager.ts:111\n \n \n\n\n \n \n Enable selecting of event display elements and set mouse move and click events.\n\n\n \n Returns : void\n\n \n \n \n \n \n \n \n \n \n \n \n Public\n getActiveObjectId\n \n \n \n \n \n \n \n getActiveObjectId()\n \n \n\n\n \n \n Defined in src/managers/three-manager/selection-manager.ts:94\n \n \n\n\n \n \n Get the uuid of the currently selected object.\n\n\n \n \n \n Returns : ActiveVariable\n\n \n \n uuid of the currently selected object.\n\n \n \n \n \n \n \n \n \n \n \n \n Public\n highlightObject\n \n \n \n \n \n \n \n highlightObject(uuid: string, objectsGroup: Object3D)\n \n \n\n\n \n \n Defined in src/managers/three-manager/selection-manager.ts:241\n \n \n\n\n \n \n Highlight the object with the given uuid by giving it an outline.\nwith the given uuid.\n\n\n \n Parameters :\n \n \n \n \n Name\n Type\n Optional\n Description\n \n \n \n \n uuid\n \n string\n \n\n \n No\n \n\n\n \n uuid of the object.\n\n \n \n \n objectsGroup\n \n Object3D\n \n\n \n No\n \n\n\n \n Group of objects to be traversed for finding the object\nwith the given uuid.\n\n \n \n \n \n \n \n \n \n Returns : void\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n Public\n init\n \n \n \n \n \n \n \n init(camera: Camera, scene: Scene, effectsManager: EffectsManager, infoLogger: InfoLogger)\n \n \n\n\n \n \n Defined in src/managers/three-manager/selection-manager.ts:65\n \n \n\n\n \n \n Initialize the selection manager.\nlike outline pass and unreal bloom.\n\n\n \n Parameters :\n \n \n \n \n Name\n Type\n Optional\n Description\n \n \n \n \n camera\n \n Camera\n \n\n \n No\n \n\n\n \n The camera inside the scene.\n\n \n \n \n scene\n \n Scene\n \n\n \n No\n \n\n\n \n The scene used for event display.\n\n \n \n \n effectsManager\n \n EffectsManager\n \n\n \n No\n \n\n\n \n Manager for managing three.js event display effects\nlike outline pass and unreal bloom.\n\n \n \n \n infoLogger\n \n InfoLogger\n \n\n \n No\n \n\n\n \n Service for logging data to the information panel.\n\n \n \n \n \n \n \n \n \n Returns : void\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n Private\n intersectObject\n \n \n \n \n \n \n \n intersectObject(event: any)\n \n \n\n\n \n \n Defined in src/managers/three-manager/selection-manager.ts:218\n \n \n\n\n \n \n Check if any object intersects on mouse move.\n\n\n \n Parameters :\n \n \n \n \n Name\n Type\n Optional\n Description\n \n \n \n \n event\n \n any\n \n\n \n No\n \n\n\n \n Event containing data of the mouse move.\n\n \n \n \n \n \n \n \n \n Returns : Object3D\n\n \n \n Intersected or hovered over object.\n\n \n \n \n \n \n \n \n \n \n \n \n Public\n setSelectedObject\n \n \n \n \n \n \n \n setSelectedObject(selectedObject: literal type)\n \n \n\n\n \n \n Defined in src/managers/three-manager/selection-manager.ts:83\n \n \n\n\n \n \n Set the currently selected object.\n\n\n \n Parameters :\n \n \n \n \n Name\n Type\n Optional\n Description\n \n \n \n \n selectedObject\n \n literal type\n \n\n \n No\n \n\n\n \n The currently selected object.\n\n \n \n \n \n \n \n \n \n Returns : void\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n Public\n setSelecting\n \n \n \n \n \n \n \n setSelecting(enable: boolean)\n \n \n\n\n \n \n Defined in src/managers/three-manager/selection-manager.ts:102\n \n \n\n\n \n \n Set if selecting is to be enabled or disabled.\n\n\n \n Parameters :\n \n \n \n \n Name\n Type\n Optional\n Description\n \n \n \n \n enable\n \n boolean\n \n\n \n No\n \n\n\n \n If selecting is to be enabled or disabled.\n\n \n \n \n \n \n \n \n \n Returns : void\n\n \n \n \n \n \n \n \n \n\n\n\n\n\n\n \n\n\n \n import {\n Vector2,\n Raycaster,\n Camera,\n Scene,\n Object3D,\n DirectionalLight,\n AmbientLight,\n AxesHelper,\n} from 'three';\nimport { OutlinePass } from 'three/examples/jsm/postprocessing/OutlinePass.js';\nimport { InfoLogger } from '../../helpers/info-logger';\nimport { EffectsManager } from './effects-manager';\nimport { PrettySymbols } from '../../helpers/pretty-symbols';\nimport { ActiveVariable } from '../../helpers/active-variable';\n\n/**\n * Manager for managing event display's selection related functions.\n */\nexport class SelectionManager {\n /** Is initialized. */\n private isInit: boolean;\n /** The camera inside the scene. */\n private camera: Camera;\n /** The scene used for event display. */\n private scene: Scene;\n /** Object used to display the information of the selected 3D object. */\n private selectedObject: { name: string; attributes: any[] };\n /** The currently selected object which is observable for changes. */\n private activeObject = new ActiveVariable('');\n /** Objects to be ignored on hovering over the scene. */\n private ignoreList: string[];\n\n // Post processing\n /** Outline pass for highlighting the hovered over event display elements. */\n private outlinePass: OutlinePass;\n /** Manager for managing three.js event display effects like outline pass and unreal bloom. */\n private effectsManager: EffectsManager;\n\n /** Service for logging data to the information panel. */\n private infoLogger: InfoLogger;\n /** Performance mode value before enabling selection. */\n private preSelectionAntialias: boolean;\n\n /**\n * Constructor for the selection manager.\n */\n constructor() {\n this.isInit = false;\n this.ignoreList = [\n new AmbientLight().type,\n new DirectionalLight().type,\n new AxesHelper().type,\n ];\n }\n\n /**\n * Initialize the selection manager.\n * @param camera The camera inside the scene.\n * @param scene The scene used for event display.\n * @param effectsManager Manager for managing three.js event display effects\n * like outline pass and unreal bloom.\n * @param infoLogger Service for logging data to the information panel.\n */\n public init(\n camera: Camera,\n scene: Scene,\n effectsManager: EffectsManager,\n infoLogger: InfoLogger\n ) {\n this.camera = camera;\n this.scene = scene;\n this.isInit = true;\n this.infoLogger = infoLogger;\n this.effectsManager = effectsManager;\n this.outlinePass = this.effectsManager.addOutlinePassForSelection();\n }\n\n /**\n * Set the currently selected object.\n * @param selectedObject The currently selected object.\n */\n public setSelectedObject(selectedObject: {\n name: string;\n attributes: any[];\n }) {\n this.selectedObject = selectedObject;\n }\n\n /**\n * Get the uuid of the currently selected object.\n * @returns uuid of the currently selected object.\n */\n public getActiveObjectId(): ActiveVariable {\n return this.activeObject;\n }\n\n /**\n * Set if selecting is to be enabled or disabled.\n * @param enable If selecting is to be enabled or disabled.\n */\n public setSelecting(enable: boolean) {\n if (this.isInit) {\n enable ? this.enableSelecting() : this.disableSelecting();\n }\n }\n\n /**\n * Enable selecting of event display elements and set mouse move and click events.\n */\n private enableSelecting() {\n document\n .getElementById('three-canvas')\n .addEventListener('mousemove', this.onTouchMove, true);\n document\n .getElementById('three-canvas')\n .addEventListener('click', this.onDocumentMouseDown, true);\n document\n .getElementById('three-canvas')\n .addEventListener('touchstart', this.onTouchDown);\n this.preSelectionAntialias = this.effectsManager.antialiasing;\n this.effectsManager.setAntialiasing(false);\n }\n\n /**\n * Disable selecting of event display elements and remove mouse move and click events.\n */\n private disableSelecting() {\n document\n .getElementById('three-canvas')\n .removeEventListener('mousemove', this.onTouchMove, true);\n document\n .getElementById('three-canvas')\n .removeEventListener('click', this.onDocumentMouseDown, true);\n document\n .getElementById('three-canvas')\n .removeEventListener('touchstart', this.onTouchDown);\n this.outlinePass.selectedObjects = [];\n this.effectsManager.setAntialiasing(this.preSelectionAntialias);\n }\n\n /**\n * Function to call on mouse move when object selection is enabled.\n */\n private onTouchMove = (event: any) => {\n const intersectedObject = this.intersectObject(event);\n if (intersectedObject) {\n if (this.ignoreList.includes(intersectedObject.type)) {\n return;\n }\n this.outlinePass.selectedObjects = [intersectedObject];\n }\n };\n\n /**\n * Function to call on mouse click when object selection is enabled.\n */\n private onDocumentMouseDown = () => {\n const intersectedObject = this.outlinePass.selectedObjects[0];\n if (intersectedObject) {\n this.selectedObject.name = intersectedObject.name;\n this.selectedObject.attributes.splice(\n 0,\n this.selectedObject.attributes.length\n );\n\n this.activeObject.update(intersectedObject.uuid);\n\n const prettyParams = PrettySymbols.getPrettyParams(\n intersectedObject.userData\n );\n\n for (const key of Object.keys(prettyParams)) {\n this.selectedObject.attributes.push({\n attributeName: key,\n attributeValue: prettyParams[key],\n });\n }\n\n // Process properties of the selected object\n const props = Object.keys(intersectedObject.userData)\n .map((key) => {\n // Only take properties that are a string or number (no arrays or objects)\n if (\n ['string', 'number'].includes(\n typeof intersectedObject.userData[key]\n )\n ) {\n return key + '=' + intersectedObject.userData[key];\n }\n })\n .filter((val) => val);\n // Build the log text and add to the logger\n const log =\n intersectedObject.name +\n (props.length > 0 ? ' with ' + props.join(', ') : '');\n if (log) {\n this.infoLogger.add(log, 'Clicked');\n }\n }\n };\n\n /**\n * Function to call on touch when object selection is enabled.\n * @param event Event containing touch data.\n */\n private onTouchDown = (event: TouchEvent) => {\n event.preventDefault();\n this.onTouchMove(event.targetTouches[0]);\n this.onDocumentMouseDown();\n };\n\n /**\n * Check if any object intersects on mouse move.\n * @param event Event containing data of the mouse move.\n * @returns Intersected or hovered over object.\n */\n private intersectObject(event: any): Object3D {\n event.preventDefault?.();\n const mouse = new Vector2();\n const rendererElement = this.effectsManager.composer.renderer.domElement;\n mouse.x = (event.clientX / rendererElement.clientWidth) * 2 - 1;\n mouse.y = -(event.clientY / rendererElement.clientHeight) * 2 + 1;\n const raycaster = new Raycaster();\n raycaster.setFromCamera(mouse, this.camera);\n raycaster.params.Line.threshold = 3;\n const intersects = raycaster.intersectObjects(this.scene.children, true);\n\n if (intersects.length > 0) {\n // We want the closest one\n return intersects[0].object;\n }\n }\n\n /**\n * Highlight the object with the given uuid by giving it an outline.\n * @param uuid uuid of the object.\n * @param objectsGroup Group of objects to be traversed for finding the object\n * with the given uuid.\n */\n public highlightObject(uuid: string, objectsGroup: Object3D) {\n const object = objectsGroup.getObjectByProperty('uuid', uuid);\n if (object) {\n this.outlinePass.selectedObjects = [object];\n }\n }\n}\n\n \n\n\n\n\n\n\n\n\n\n\n \n \n results matching \"\"\n \n \n \n No results matching \"\"\n \n\n"},"classes/State.html":{"url":"classes/State.html","title":"class - State","body":"\n \n\n\n\n\n\n\n\n\n\n\n\n\n\n Classes\n State\n\n\n\n \n Info\n \n \n Source\n \n\n\n\n \n \n File\n \n \n src/helpers/runge-kutta.ts\n \n\n\n \n Description\n \n \n State of the particle.\n\n \n\n\n\n\n \n Index\n \n \n \n \n Properties\n \n \n \n \n \n \n dir\n \n \n maxStepSize\n \n \n p\n \n \n pathLength\n \n \n pos\n \n \n q\n \n \n stepSize\n \n \n unitC\n \n \n \n \n\n\n\n\n\n\n \n \n\n\n\n \n \n \n Properties\n \n \n \n \n \n \n \n dir\n \n \n \n \n \n \n Type : Vector3\n\n \n \n \n \n Default value : new Vector3(0, 0, 0)\n \n \n \n \n Defined in src/helpers/runge-kutta.ts:170\n \n \n\n \n \n Direction.\n\n \n \n\n \n \n \n \n \n \n \n \n maxStepSize\n \n \n \n \n \n \n Type : number\n\n \n \n \n \n Default value : 10\n \n \n \n \n Defined in src/helpers/runge-kutta.ts:180\n \n \n\n \n \n Max step size.\n\n \n \n\n \n \n \n \n \n \n \n \n p\n \n \n \n \n \n \n Type : number\n\n \n \n \n \n Default value : 0\n \n \n \n \n Defined in src/helpers/runge-kutta.ts:172\n \n \n\n \n \n Momentum.\n\n \n \n\n \n \n \n \n \n \n \n \n pathLength\n \n \n \n \n \n \n Type : number\n\n \n \n \n \n Default value : 0\n \n \n \n \n Defined in src/helpers/runge-kutta.ts:182\n \n \n\n \n \n Path length..\n\n \n \n\n \n \n \n \n \n \n \n \n pos\n \n \n \n \n \n \n Type : Vector3\n\n \n \n \n \n Default value : new Vector3(0, 0, 0)\n \n \n \n \n Defined in src/helpers/runge-kutta.ts:168\n \n \n\n \n \n Position.\n\n \n \n\n \n \n \n \n \n \n \n \n q\n \n \n \n \n \n \n Type : number\n\n \n \n \n \n Default value : 1\n \n \n \n \n Defined in src/helpers/runge-kutta.ts:174\n \n \n\n \n \n Charge.\n\n \n \n\n \n \n \n \n \n \n \n \n stepSize\n \n \n \n \n \n \n Type : number\n\n \n \n \n \n Default value : 1000\n \n \n \n \n Defined in src/helpers/runge-kutta.ts:178\n \n \n\n \n \n Step size.\n\n \n \n\n \n \n \n \n \n \n \n \n unitC\n \n \n \n \n \n \n Type : number\n\n \n \n \n \n Default value : 3.3333\n \n \n \n \n Defined in src/helpers/runge-kutta.ts:176\n \n \n\n \n \n Unit.\n\n \n \n\n \n \n\n\n\n\n\n\n\n\n \n\n\n \n import { Vector3 } from 'three';\n\n/**\n * Class for performing Runge-Kutta operations.\n */\nexport class RungeKutta {\n /**\n * Perform a Runge-Kutta step for the given state.\n * @param state State at which the step is to be performed.\n * @returns The computed step size.\n */\n static step(state: State): number {\n // Charge (q) to momentum (p) ratio in SI units\n const qop: number = state.q / (state.unitC * state.p);\n\n // Runge-Kutta integrator state\n let h2: number,\n half_h: number,\n B_middle: Vector3,\n B_last: Vector3,\n k2: Vector3,\n k3: Vector3,\n k4: Vector3;\n\n // First Runge-Kutta point (at current position)\n const B_first: Vector3 = Field.get(state.pos);\n // state.dir.cross(B_first) * qop\n const k1: Vector3 = state.dir.clone().cross(B_first).multiplyScalar(qop);\n\n // Try Runge-Kutta step with h as the step size\n const tryRungeKuttaStep = (h: number) => {\n h2 = h * h;\n half_h = h / 2;\n\n // Second Runge-Kutta point\n // state.pos + state.dir * half_h + k1 * (h2 / 8)\n const pos1: Vector3 = state.pos\n .clone()\n .add(state.dir.clone().multiplyScalar(half_h))\n .add(k1.clone().multiplyScalar(h2 / 8));\n B_middle = Field.get(pos1);\n // (state.dir + k1 * half_h).cross(B_middle) * qop\n k2 = state.dir\n .clone()\n .add(k1.clone().multiplyScalar(half_h))\n .cross(B_middle)\n .multiplyScalar(qop);\n\n // Third Runge-Kutta point\n // (state.dir + k2 * half_h).cross(B_middle) * qop\n k3 = state.dir\n .clone()\n .add(k2.clone().multiplyScalar(half_h))\n .cross(B_middle)\n .multiplyScalar(qop);\n\n // Last Runge-Kutta point\n // state.pos + state.dir * h + k3 * (h2 / 2)\n const pos2: Vector3 = state.pos\n .clone()\n .add(state.dir.clone().multiplyScalar(h))\n .add(k3.clone().multiplyScalar(h2 / 2));\n B_last = Field.get(pos2);\n // (state.dir + k3 * h).cross(B_last) * qop\n k4 = state.dir\n .clone()\n .add(k3.clone().multiplyScalar(h))\n .cross(B_last)\n .multiplyScalar(qop);\n\n // (k1 - k2 - k3 + k4)\n const returnVec = k1.clone().sub(k2).sub(k3).add(k4);\n // h * (k1 - k2 - k3 + k4).lpNorm()\n return (\n h *\n (Math.abs(returnVec.x) + Math.abs(returnVec.y) + Math.abs(returnVec.z))\n );\n };\n\n // Checking the error estimate\n let error_estimate: number = tryRungeKuttaStep(state.stepSize);\n while (error_estimate > 0.0002) {\n state.stepSize *= 0.5;\n error_estimate = tryRungeKuttaStep(state.stepSize);\n }\n\n const fh: number = state.stepSize;\n const fh2: number = Math.pow(fh, 2);\n\n // Update position and momentum\n // state.pos += state.dir * fh + (k1 + k2 + k3) * (fh2 /6)\n state.pos.add(state.dir.clone().multiplyScalar(fh)).add(\n k1\n .clone()\n .add(k2)\n .add(k3)\n .multiplyScalar(fh2 / 6)\n );\n // state.dir += (k1 + k2 * 2 + k3 * 2 + k4) * (fh / 6)\n state.dir.add(\n k1\n .clone()\n .add(k2.clone().multiplyScalar(2))\n .add(k3.clone().multiplyScalar(2))\n .add(k4)\n .multiplyScalar(fh / 6)\n );\n state.dir.normalize();\n\n return state.stepSize;\n }\n\n /**\n * Propagate using the given properties by performing the Runge-Kutta steps.\n * @param startPos Starting position in 3D space.\n * @param startDir Starting direction in 3D space.\n * @param p Momentum.\n * @param q Charge.\n * @param mss Max step size.\n * @param plength Path length.\n * @param inbounds Function which returns true until the passed position\n * is out of bounds, when it returns false.\n * @returns An array containing position and direction at that position calculated\n * through the Runge-Kutta steps.\n */\n static propagate(\n startPos: Vector3,\n startDir: Vector3,\n p: number,\n q: number,\n mss: number = -1,\n plength: number = 1000,\n inbounds: (pos: Vector3) => boolean = () => true\n ): { pos: Vector3; dir: Vector3 }[] {\n const rkState: State = new State();\n rkState.pos = startPos;\n rkState.dir = startDir;\n rkState.p = p;\n rkState.q = q;\n rkState.maxStepSize = mss;\n\n const result: { pos: Vector3; dir: Vector3 }[] = [];\n\n while (rkState.pathLength \n \n\n\n\n\n\n\n\n\n\n\n \n \n results matching \"\"\n \n \n \n No results matching \"\"\n \n\n"},"classes/StateManager.html":{"url":"classes/StateManager.html","title":"class - StateManager","body":"\n \n\n\n\n\n\n\n\n\n\n\n\n\n\n Classes\n StateManager\n\n\n\n \n Info\n \n \n Source\n \n\n\n\n \n \n File\n \n \n src/managers/state-manager.ts\n \n\n\n \n Description\n \n \n A singleton manager for managing the scene's state.\n\n \n\n\n\n\n \n Index\n \n \n \n \n Properties\n \n \n \n \n \n \n activeCamera\n \n \n clippingEnabled\n \n \n eventDisplay\n \n \n eventMetadata\n \n \n Private\n Static\n instance\n \n \n openingClippingAngle\n \n \n phoenixMenuRoot\n \n \n startClippingAngle\n \n \n \n \n\n \n \n Methods\n \n \n \n \n \n \n Static\n getInstance\n \n \n getOpeningClippingAngle\n \n \n getStartClippingAngle\n \n \n loadStateFromJSON\n \n \n saveStateAsJSON\n \n \n setCamera\n \n \n setClippingEnabled\n \n \n setEventDisplay\n \n \n setOpeningClippingAngle\n \n \n setPhoenixMenuRoot\n \n \n setStartClippingAngle\n \n \n \n \n\n\n\n\n\n \n \n\n\n \n Constructor\n \n \n \n \nconstructor()\n \n \n \n \n Defined in src/managers/state-manager.ts:29\n \n \n\n \n \n Create the state manager.\n\n \n \n \n \n\n\n \n \n \n Properties\n \n \n \n \n \n \n \n activeCamera\n \n \n \n \n \n \n Type : Camera\n\n \n \n \n \n Defined in src/managers/state-manager.ts:22\n \n \n\n \n \n The active camera.\n\n \n \n\n \n \n \n \n \n \n \n \n clippingEnabled\n \n \n \n \n \n \n Default value : new ActiveVariable(false)\n \n \n \n \n Defined in src/managers/state-manager.ts:16\n \n \n\n \n \n Whether the clipping is enabled or not.\n\n \n \n\n \n \n \n \n \n \n \n \n eventDisplay\n \n \n \n \n \n \n Type : EventDisplay\n\n \n \n \n \n Defined in src/managers/state-manager.ts:24\n \n \n\n \n \n The event display.\n\n \n \n\n \n \n \n \n \n \n \n \n eventMetadata\n \n \n \n \n \n \n Type : literal type\n\n \n \n \n \n Default value : {\n runNumber: '000',\n eventNumber: '000',\n }\n \n \n \n \n Defined in src/managers/state-manager.ts:26\n \n \n\n \n \n Current loaded event's metadata.\n\n \n \n\n \n \n \n \n \n \n \n \n Private\n Static\n instance\n \n \n \n \n \n \n Type : StateManager\n\n \n \n \n \n Defined in src/managers/state-manager.ts:12\n \n \n\n \n \n Instance of the state manager.\n\n \n \n\n \n \n \n \n \n \n \n \n openingClippingAngle\n \n \n \n \n \n \n Default value : new ActiveVariable(0)\n \n \n \n \n Defined in src/managers/state-manager.ts:20\n \n \n\n \n \n Opening angle of the clipping.\n\n \n \n\n \n \n \n \n \n \n \n \n phoenixMenuRoot\n \n \n \n \n \n \n Type : PhoenixMenuNode\n\n \n \n \n \n Defined in src/managers/state-manager.ts:14\n \n \n\n \n \n Root node of the phoenix menu.\n\n \n \n\n \n \n \n \n \n \n \n \n startClippingAngle\n \n \n \n \n \n \n Default value : new ActiveVariable(0)\n \n \n \n \n Defined in src/managers/state-manager.ts:18\n \n \n\n \n \n Starting angle of the clipping.\n\n \n \n\n \n \n\n\n \n \n \n Methods\n \n \n \n \n \n \n \n Static\n getInstance\n \n \n \n \n \n \n \n getInstance()\n \n \n\n\n \n \n Defined in src/managers/state-manager.ts:46\n \n \n\n\n \n \n Get the instance of state manager.\n\n\n \n \n \n Returns : StateManager\n\n \n \n The state manager instance.\n\n \n \n \n \n \n \n \n \n \n \n \n getOpeningClippingAngle\n \n \n \n \n \n \ngetOpeningClippingAngle()\n \n \n\n\n \n \n Defined in src/managers/state-manager.ts:179\n \n \n\n\n \n \n Get the opening angle of clipping.\n\n\n \n \n \n Returns : number\n\n \n \n The opening angle of clipping.\n\n \n \n \n \n \n \n \n \n \n \n \n getStartClippingAngle\n \n \n \n \n \n \ngetStartClippingAngle()\n \n \n\n\n \n \n Defined in src/managers/state-manager.ts:163\n \n \n\n\n \n \n Get the start clipping angle of clipping.\n\n\n \n \n \n Returns : number\n\n \n \n The starting angle of clipping.\n\n \n \n \n \n \n \n \n \n \n \n \n loadStateFromJSON\n \n \n \n \n \n \nloadStateFromJSON(json: string | literal type)\n \n \n\n\n \n \n Defined in src/managers/state-manager.ts:104\n \n \n\n\n \n \n Load the state from JSON.\n\n\n \n Parameters :\n \n \n \n \n Name\n Type\n Optional\n Description\n \n \n \n \n json\n \n string | literal type\n \n\n \n No\n \n\n\n \n JSON for state.\n\n \n \n \n \n \n \n \n \n Returns : void\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n saveStateAsJSON\n \n \n \n \n \n \nsaveStateAsJSON()\n \n \n\n\n \n \n Defined in src/managers/state-manager.ts:80\n \n \n\n\n \n \n Save the state of the event display as JSON.\n\n\n \n Returns : void\n\n \n \n \n \n \n \n \n \n \n \n \n setCamera\n \n \n \n \n \n \nsetCamera(camera: Camera)\n \n \n\n\n \n \n Defined in src/managers/state-manager.ts:187\n \n \n\n\n \n \n Set the scene camera for state.\n\n\n \n Parameters :\n \n \n \n \n Name\n Type\n Optional\n Description\n \n \n \n \n camera\n \n Camera\n \n\n \n No\n \n\n\n \n The camera.\n\n \n \n \n \n \n \n \n \n Returns : void\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n setClippingEnabled\n \n \n \n \n \n \nsetClippingEnabled(clipping: boolean)\n \n \n\n\n \n \n Defined in src/managers/state-manager.ts:147\n \n \n\n\n \n \n Set the state of clipping.\n\n\n \n Parameters :\n \n \n \n \n Name\n Type\n Optional\n Description\n \n \n \n \n clipping\n \n boolean\n \n\n \n No\n \n\n\n \n Whether the clipping is enabled or not.\n\n \n \n \n \n \n \n \n \n Returns : void\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n setEventDisplay\n \n \n \n \n \n \nsetEventDisplay(eventDisplay: EventDisplay)\n \n \n\n\n \n \n Defined in src/managers/state-manager.ts:195\n \n \n\n\n \n \n Set the event display.\n\n\n \n Parameters :\n \n \n \n \n Name\n Type\n Optional\n Description\n \n \n \n \n eventDisplay\n \n EventDisplay\n \n\n \n No\n \n\n\n \n The event display.\n\n \n \n \n \n \n \n \n \n Returns : void\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n setOpeningClippingAngle\n \n \n \n \n \n \nsetOpeningClippingAngle(angle: number)\n \n \n\n\n \n \n Defined in src/managers/state-manager.ts:171\n \n \n\n\n \n \n Set the opening angle of clipping.\n\n\n \n Parameters :\n \n \n \n \n Name\n Type\n Optional\n Description\n \n \n \n \n angle\n \n number\n \n\n \n No\n \n\n\n \n Angle for clipping.\n\n \n \n \n \n \n \n \n \n Returns : void\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n setPhoenixMenuRoot\n \n \n \n \n \n \nsetPhoenixMenuRoot(phoenixMenuRoot: PhoenixMenuNode)\n \n \n\n\n \n \n Defined in src/managers/state-manager.ts:54\n \n \n\n\n \n \n Set the root node of Phoenix menu.\n\n\n \n Parameters :\n \n \n \n \n Name\n Type\n Optional\n Description\n \n \n \n \n phoenixMenuRoot\n \n PhoenixMenuNode\n \n\n \n No\n \n\n\n \n Phoenix menu root node.\n\n \n \n \n \n \n \n \n \n Returns : void\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n setStartClippingAngle\n \n \n \n \n \n \nsetStartClippingAngle(angle: number)\n \n \n\n\n \n \n Defined in src/managers/state-manager.ts:155\n \n \n\n\n \n \n Set the start clipping angle of clipping.\n\n\n \n Parameters :\n \n \n \n \n Name\n Type\n Optional\n Description\n \n \n \n \n angle\n \n number\n \n\n \n No\n \n\n\n \n Angle for clipping.\n\n \n \n \n \n \n \n \n \n Returns : void\n\n \n \n \n \n \n \n \n \n\n\n\n\n\n\n \n\n\n \n import { EventDisplay } from '../event-display';\nimport { Camera } from 'three';\nimport { PhoenixMenuNode } from './ui-manager/phoenix-menu/phoenix-menu-node';\nimport { loadFile, saveFile } from '../helpers/file';\nimport { ActiveVariable } from '../helpers/active-variable';\n\n/**\n * A singleton manager for managing the scene's state.\n */\nexport class StateManager {\n /** Instance of the state manager. */\n private static instance: StateManager;\n /** Root node of the phoenix menu. */\n phoenixMenuRoot: PhoenixMenuNode;\n /** Whether the clipping is enabled or not. */\n clippingEnabled = new ActiveVariable(false);\n /** Starting angle of the clipping. */\n startClippingAngle = new ActiveVariable(0);\n /** Opening angle of the clipping. */\n openingClippingAngle = new ActiveVariable(0);\n /** The active camera. */\n activeCamera: Camera;\n /** The event display. */\n eventDisplay: EventDisplay;\n /** Current loaded event's metadata. */\n eventMetadata: { runNumber: string; eventNumber: string } = {\n runNumber: '000',\n eventNumber: '000',\n };\n\n /**\n * Create the state manager.\n * @returns The state manager instance.\n */\n constructor() {\n if (StateManager.instance === undefined) {\n StateManager.instance = this;\n }\n return StateManager.instance;\n }\n\n /**\n * Get the instance of state manager.\n * @returns The state manager instance.\n */\n static getInstance(): StateManager {\n return StateManager.instance;\n }\n\n /**\n * Set the root node of Phoenix menu.\n * @param phoenixMenuRoot Phoenix menu root node.\n */\n setPhoenixMenuRoot(phoenixMenuRoot: PhoenixMenuNode) {\n this.phoenixMenuRoot = phoenixMenuRoot;\n\n if (this.phoenixMenuRoot) {\n // Add save and load config buttons to the root node\n this.phoenixMenuRoot\n .addConfig('button', {\n label: 'Save state',\n onClick: () => {\n this.saveStateAsJSON();\n },\n })\n .addConfig('button', {\n label: 'Load state',\n onClick: () => {\n loadFile((data) => {\n this.loadStateFromJSON(JSON.parse(data));\n });\n },\n });\n }\n }\n\n /**\n * Save the state of the event display as JSON.\n */\n saveStateAsJSON() {\n const state: { [key: string]: any } = {\n phoenixMenu: this.phoenixMenuRoot.getNodeState(),\n eventDisplay: {\n cameraPosition: this.activeCamera.position.toArray(),\n startClippingAngle: this.clippingEnabled.value\n ? this.startClippingAngle.value\n : null,\n openingClippingAngle: this.clippingEnabled.value\n ? this.openingClippingAngle.value\n : null,\n },\n };\n\n saveFile(\n JSON.stringify(state),\n `run${this.eventMetadata.runNumber}_evt${this.eventMetadata.eventNumber}.json`\n );\n }\n\n /**\n * Load the state from JSON.\n * @param json JSON for state.\n */\n loadStateFromJSON(json: string | { [key: string]: any }) {\n const jsonData: { [key: string]: any } =\n typeof json === 'string' ? JSON.parse(json) : json;\n\n if (jsonData['phoenixMenu'] && this.phoenixMenuRoot) {\n this.phoenixMenuRoot.loadStateFromJSON(jsonData['phoenixMenu']);\n this.phoenixMenuRoot.configActive = false;\n }\n\n if (jsonData['eventDisplay']) {\n this.activeCamera.position.fromArray(\n jsonData['eventDisplay']?.['cameraPosition']\n );\n\n const startAngle = jsonData['eventDisplay']?.['startClippingAngle'];\n const openingAngle = jsonData['eventDisplay']?.['openingClippingAngle'];\n\n if (startAngle || openingAngle) {\n this.setClippingEnabled(true);\n this.eventDisplay.getUIManager().setClipping(true);\n\n if (startAngle) {\n this.eventDisplay\n .getUIManager()\n .rotateStartAngleClipping(\n jsonData['eventDisplay']['startClippingAngle']\n );\n }\n if (openingAngle) {\n this.eventDisplay\n .getUIManager()\n .rotateOpeningAngleClipping(\n jsonData['eventDisplay']['openingClippingAngle']\n );\n }\n }\n }\n }\n\n /**\n * Set the state of clipping.\n * @param clipping Whether the clipping is enabled or not.\n */\n setClippingEnabled(clipping: boolean) {\n this.clippingEnabled.update(clipping);\n }\n\n /**\n * Set the start clipping angle of clipping.\n * @param angle Angle for clipping.\n */\n setStartClippingAngle(angle: number) {\n this.startClippingAngle.update(angle);\n }\n\n /**\n * Get the start clipping angle of clipping.\n * @returns The starting angle of clipping.\n */\n getStartClippingAngle(): number {\n return this.startClippingAngle.value;\n }\n\n /**\n * Set the opening angle of clipping.\n * @param angle Angle for clipping.\n */\n setOpeningClippingAngle(angle: number) {\n this.openingClippingAngle.update(angle);\n }\n\n /**\n * Get the opening angle of clipping.\n * @returns The opening angle of clipping.\n */\n getOpeningClippingAngle(): number {\n return this.openingClippingAngle.value;\n }\n\n /**\n * Set the scene camera for state.\n * @param camera The camera.\n */\n setCamera(camera: Camera) {\n this.activeCamera = camera;\n }\n\n /**\n * Set the event display.\n * @param eventDisplay The event display.\n */\n setEventDisplay(eventDisplay: EventDisplay) {\n this.eventDisplay = eventDisplay;\n }\n}\n\n \n\n\n\n\n\n\n\n\n\n\n \n \n results matching \"\"\n \n \n \n No results matching \"\"\n \n\n"},"classes/TracksMaterial.html":{"url":"classes/TracksMaterial.html","title":"class - TracksMaterial","body":"\n \n\n\n\n\n\n\n\n\n\n\n\n\n\n Classes\n TracksMaterial\n\n\n\n \n Info\n \n \n Source\n \n\n\n\n \n \n File\n \n \n src/loaders/objects/tracks.ts\n \n\n\n \n Description\n \n \n Custom material for the tracks.\n\n \n\n \n Extends\n \n \n ShaderMaterial\n \n\n\n\n \n Index\n \n \n \n \n Properties\n \n \n \n \n \n \n isTracksMaterial\n \n \n \n \n\n\n\n\n\n\n \n \n\n\n \n Constructor\n \n \n \n \nconstructor(params)\n \n \n \n \n Defined in src/loaders/objects/tracks.ts:230\n \n \n\n \n \n Create the tracks material.\n\n \n Parameters :\n \n \n \n Name\n Optional\n Description\n \n \n \n \n params\n \n \n \n No\n \n \n \n Params for creating the tracks material.\n\n \n \n \n \n \n \n \n \n \n\n\n \n \n \n Properties\n \n \n \n \n \n \n \n isTracksMaterial\n \n \n \n \n \n \n Type : boolean\n\n \n \n \n \n Defined in src/loaders/objects/tracks.ts:230\n \n \n\n \n \n If the material is of track.\n\n \n \n\n \n \n\n\n\n\n\n\n\n\n \n\n\n \n import {\n BufferGeometry,\n BufferAttribute,\n ShaderMaterial,\n ShaderChunk,\n Vector2,\n Vector3,\n Color,\n ColorRepresentation,\n} from 'three';\n\n/**\n * Custom mesh for tracks.\n */\nexport class TracksMesh extends BufferGeometry {\n /** ID of the next track. */\n next_track_id: number;\n /** Positions. */\n positions: number[];\n /** Previous. */\n previous: number[];\n /** Next. */\n next: number[];\n /** Colors. */\n colors: number[];\n /** Counter. */\n counter: number[];\n /** Track ID. */\n track_id: any[];\n /** Side. */\n side: any[];\n /** Indices. */\n indices_array: any[];\n /** Attributes. */\n _attributes: any;\n\n /**\n * Create the tracks mesh.\n */\n constructor() {\n super();\n (this.type as string) = 'TracksMesh';\n this.positions = [];\n this.previous = [];\n this.next = [];\n this.side = [];\n this.counter = [];\n this.track_id = [];\n this.colors = [];\n this.indices_array = [];\n this.next_track_id = 0;\n }\n\n /**\n * Add a track to the tracks mesh.\n * @param points Points for constructing the track.\n * @param color Color of the track.\n * @returns ID of the track.\n */\n addTrack(points: Vector3[], color: ColorRepresentation) {\n const id = this.next_track_id++;\n\n const col = new Color(color);\n\n this.previous.push(points[0].x, points[0].y, points[0].z);\n this.previous.push(points[0].x, points[0].y, points[0].z);\n\n for (let i = 0; i 0) {\n this.next.push(p.x, p.y, p.z);\n this.next.push(p.x, p.y, p.z);\n }\n }\n\n const i = points.length - 1;\n this.next.push(points[i].x, points[i].y, points[i].z);\n this.next.push(points[i].x, points[i].y, points[i].z);\n\n //this.process()\n return id;\n }\n\n /**\n * Process the track mesh.\n */\n process() {\n if (\n !this._attributes ||\n this._attributes.position.count !== this.positions.length\n ) {\n this._attributes = {\n position: new BufferAttribute(new Float32Array(this.positions), 3),\n previous: new BufferAttribute(new Float32Array(this.previous), 3),\n next: new BufferAttribute(new Float32Array(this.next), 3),\n side: new BufferAttribute(new Float32Array(this.side), 1),\n track_id: new BufferAttribute(new Int32Array(this.track_id), 1),\n color: new BufferAttribute(new Float32Array(this.colors), 3),\n counter: new BufferAttribute(new Float32Array(this.counter), 1),\n index: new BufferAttribute(new Uint32Array(this.indices_array), 1),\n };\n } else {\n (this._attributes.position as BufferAttribute).copyArray(\n new Float32Array(this.positions)\n );\n this._attributes.position.needsUpdate = true;\n (this._attributes.previous as BufferAttribute).copyArray(\n new Float32Array(this.previous)\n );\n this._attributes.previous.needsUpdate = true;\n (this._attributes.next as BufferAttribute).copyArray(\n new Float32Array(this.next)\n );\n this._attributes.next.needsUpdate = true;\n (this._attributes.side as BufferAttribute).copyArray(\n new Float32Array(this.side)\n );\n this._attributes.side.needsUpdate = true;\n (this._attributes.track_id as BufferAttribute).copyArray(\n new Int32Array(this.track_id)\n );\n this._attributes.track_id.needsUpdate = true;\n (this._attributes.color as BufferAttribute).copyArray(\n new Float32Array(this.colors)\n );\n this._attributes.color.needsUpdate = true;\n (this._attributes.counter as BufferAttribute).copyArray(\n new Float32Array(this.counter)\n );\n this._attributes.counter.needsUpdate = true;\n (this._attributes.index as BufferAttribute).copyArray(\n new Uint32Array(this.indices_array)\n );\n this._attributes.index.needsUpdate = true;\n }\n\n this.setAttribute('position', this._attributes.position);\n this.setAttribute('previous', this._attributes.previous);\n this.setAttribute('next', this._attributes.next);\n this.setAttribute('side', this._attributes.side);\n this.setAttribute('track_id', this._attributes.track_id);\n this.setAttribute('color', this._attributes.color);\n this.setAttribute('counter', this._attributes.counter);\n\n this.setIndex(this._attributes.index as BufferAttribute);\n\n this.computeBoundingSphere();\n this.computeBoundingBox();\n }\n}\n\n/** Custom vertex shader for tracks. */\nShaderChunk['tracks_vert'] = [\n 'attribute vec3 previous;',\n 'attribute vec3 next;',\n 'attribute int track_id;',\n 'attribute float side;',\n 'attribute vec3 color;',\n 'attribute float counter;',\n\n 'varying vec3 v_color;',\n 'varying float v_counter;',\n 'flat varying int v_track_id;',\n\n 'uniform vec2 resolution;',\n 'uniform float lineWidth;',\n 'void main() {',\n ' vec2 aspect = vec2(resolution.x / resolution.y, 1.0);',\n '',\n ' v_color = color;',\n ' v_counter = counter;',\n ' v_track_id = track_id;',\n '',\n ' mat4 m = projectionMatrix * modelViewMatrix;',\n ' vec4 finalPosition = m * vec4(position, 1.0);',\n ' vec4 prevPos = m * vec4(previous, 1.0);',\n ' vec4 nextPos = m * vec4(next, 1.0);',\n '',\n ' vec2 curP = finalPosition.xy / finalPosition.w * aspect;',\n ' vec2 prevP = prevPos.xy / prevPos.w * aspect;',\n ' vec2 nextP = nextPos.xy / nextPos.w * aspect;',\n '',\n ' vec2 dir;',\n ' if (curP == prevP) dir = normalize(nextP - curP);',\n ' else if (curP == nextP) dir = normalize(curP - prevP);',\n ' else dir = normalize(curP - prevP);',\n '',\n ' vec2 normal = vec2(-dir.y, dir.x);',\n ' normal.xy *= .5 * lineWidth;',\n ' normal.x /= aspect.x;',\n ' normal.xy *= finalPosition.w * 0.001;',\n\n ' finalPosition.xy += normal.xy * side;',\n ' gl_Position = finalPosition;',\n '}',\n].join('\\n');\n\n/** Custom fragment shadre for track. */\nShaderChunk['tracks_frag'] = [\n 'uniform float progress;',\n 'varying vec3 v_color;',\n 'varying float v_counter;',\n 'flat varying int v_track_id;',\n 'void main() {',\n ' if (v_counter > progress) discard;',\n ' gl_FragColor = vec4(v_color, 1.0);',\n '}',\n].join('\\n');\n\n/**\n * Custom material for the tracks.\n */\nexport class TracksMaterial extends ShaderMaterial {\n /** If the material is of track. */\n isTracksMaterial: boolean;\n\n /**\n * Create the tracks material.\n * @param params Params for creating the tracks material.\n */\n constructor(params) {\n super({\n uniforms: Object.assign(\n {},\n {\n lineWidth: { value: 1 },\n resolution: { value: new Vector2(1, 1) },\n progress: { value: 1 },\n }\n ),\n vertexShader: ShaderChunk['tracks_vert'],\n fragmentShader: ShaderChunk['tracks_vert'],\n });\n this.isTracksMaterial = true;\n this.type = 'TracksMaterial';\n\n Object.defineProperties(this, {\n lineWidth: {\n enumerable: true,\n get: function () {\n return this.uniforms.lineWidth.value;\n },\n set: function (value) {\n this.uniforms.lineWidth.value = value;\n },\n },\n resolution: {\n enumerable: true,\n get: function () {\n return this.uniforms.resolution.value;\n },\n set: function (value) {\n this.uniforms.resolution.value.copy(value);\n },\n },\n progress: {\n enumerable: true,\n get: function () {\n return this.uniforms.progress.value;\n },\n set: function (value) {\n this.uniforms.progress.value = value;\n },\n },\n });\n\n this.setValues(params);\n }\n}\n\n \n\n\n\n\n\n\n\n\n\n\n \n \n results matching \"\"\n \n \n \n No results matching \"\"\n \n\n"},"classes/TracksMesh.html":{"url":"classes/TracksMesh.html","title":"class - TracksMesh","body":"\n \n\n\n\n\n\n\n\n\n\n\n\n\n\n Classes\n TracksMesh\n\n\n\n \n Info\n \n \n Source\n \n\n\n\n \n \n File\n \n \n src/loaders/objects/tracks.ts\n \n\n\n \n Description\n \n \n Custom mesh for tracks.\n\n \n\n \n Extends\n \n \n BufferGeometry\n \n\n\n\n \n Index\n \n \n \n \n Properties\n \n \n \n \n \n \n _attributes\n \n \n colors\n \n \n counter\n \n \n indices_array\n \n \n next\n \n \n next_track_id\n \n \n positions\n \n \n previous\n \n \n side\n \n \n track_id\n \n \n \n \n\n \n \n Methods\n \n \n \n \n \n \n addTrack\n \n \n process\n \n \n \n \n\n\n\n\n\n \n \n\n\n \n Constructor\n \n \n \n \nconstructor()\n \n \n \n \n Defined in src/loaders/objects/tracks.ts:35\n \n \n\n \n \n Create the tracks mesh.\n\n \n \n \n \n\n\n \n \n \n Properties\n \n \n \n \n \n \n \n _attributes\n \n \n \n \n \n \n Type : any\n\n \n \n \n \n Defined in src/loaders/objects/tracks.ts:35\n \n \n\n \n \n Attributes.\n\n \n \n\n \n \n \n \n \n \n \n \n colors\n \n \n \n \n \n \n Type : number[]\n\n \n \n \n \n Defined in src/loaders/objects/tracks.ts:25\n \n \n\n \n \n Colors.\n\n \n \n\n \n \n \n \n \n \n \n \n counter\n \n \n \n \n \n \n Type : number[]\n\n \n \n \n \n Defined in src/loaders/objects/tracks.ts:27\n \n \n\n \n \n Counter.\n\n \n \n\n \n \n \n \n \n \n \n \n indices_array\n \n \n \n \n \n \n Type : any[]\n\n \n \n \n \n Defined in src/loaders/objects/tracks.ts:33\n \n \n\n \n \n Indices.\n\n \n \n\n \n \n \n \n \n \n \n \n next\n \n \n \n \n \n \n Type : number[]\n\n \n \n \n \n Defined in src/loaders/objects/tracks.ts:23\n \n \n\n \n \n Next.\n\n \n \n\n \n \n \n \n \n \n \n \n next_track_id\n \n \n \n \n \n \n Type : number\n\n \n \n \n \n Defined in src/loaders/objects/tracks.ts:17\n \n \n\n \n \n ID of the next track.\n\n \n \n\n \n \n \n \n \n \n \n \n positions\n \n \n \n \n \n \n Type : number[]\n\n \n \n \n \n Defined in src/loaders/objects/tracks.ts:19\n \n \n\n \n \n Positions.\n\n \n \n\n \n \n \n \n \n \n \n \n previous\n \n \n \n \n \n \n Type : number[]\n\n \n \n \n \n Defined in src/loaders/objects/tracks.ts:21\n \n \n\n \n \n Previous.\n\n \n \n\n \n \n \n \n \n \n \n \n side\n \n \n \n \n \n \n Type : any[]\n\n \n \n \n \n Defined in src/loaders/objects/tracks.ts:31\n \n \n\n \n \n Side.\n\n \n \n\n \n \n \n \n \n \n \n \n track_id\n \n \n \n \n \n \n Type : any[]\n\n \n \n \n \n Defined in src/loaders/objects/tracks.ts:29\n \n \n\n \n \n Track ID.\n\n \n \n\n \n \n\n\n \n \n \n Methods\n \n \n \n \n \n \n \n addTrack\n \n \n \n \n \n \naddTrack(points: Vector3[], color: ColorRepresentation)\n \n \n\n\n \n \n Defined in src/loaders/objects/tracks.ts:60\n \n \n\n\n \n \n Add a track to the tracks mesh.\n\n\n \n Parameters :\n \n \n \n \n Name\n Type\n Optional\n Description\n \n \n \n \n points\n \n Vector3[]\n \n\n \n No\n \n\n\n \n Points for constructing the track.\n\n \n \n \n color\n \n ColorRepresentation\n \n\n \n No\n \n\n\n \n Color of the track.\n\n \n \n \n \n \n \n \n \n Returns : number\n\n \n \n ID of the track.\n\n \n \n \n \n \n \n \n \n \n \n \n process\n \n \n \n \n \n \nprocess()\n \n \n\n\n \n \n Defined in src/loaders/objects/tracks.ts:102\n \n \n\n\n \n \n Process the track mesh.\n\n\n \n Returns : void\n\n \n \n \n \n \n\n\n\n\n\n\n \n\n\n \n import {\n BufferGeometry,\n BufferAttribute,\n ShaderMaterial,\n ShaderChunk,\n Vector2,\n Vector3,\n Color,\n ColorRepresentation,\n} from 'three';\n\n/**\n * Custom mesh for tracks.\n */\nexport class TracksMesh extends BufferGeometry {\n /** ID of the next track. */\n next_track_id: number;\n /** Positions. */\n positions: number[];\n /** Previous. */\n previous: number[];\n /** Next. */\n next: number[];\n /** Colors. */\n colors: number[];\n /** Counter. */\n counter: number[];\n /** Track ID. */\n track_id: any[];\n /** Side. */\n side: any[];\n /** Indices. */\n indices_array: any[];\n /** Attributes. */\n _attributes: any;\n\n /**\n * Create the tracks mesh.\n */\n constructor() {\n super();\n (this.type as string) = 'TracksMesh';\n this.positions = [];\n this.previous = [];\n this.next = [];\n this.side = [];\n this.counter = [];\n this.track_id = [];\n this.colors = [];\n this.indices_array = [];\n this.next_track_id = 0;\n }\n\n /**\n * Add a track to the tracks mesh.\n * @param points Points for constructing the track.\n * @param color Color of the track.\n * @returns ID of the track.\n */\n addTrack(points: Vector3[], color: ColorRepresentation) {\n const id = this.next_track_id++;\n\n const col = new Color(color);\n\n this.previous.push(points[0].x, points[0].y, points[0].z);\n this.previous.push(points[0].x, points[0].y, points[0].z);\n\n for (let i = 0; i 0) {\n this.next.push(p.x, p.y, p.z);\n this.next.push(p.x, p.y, p.z);\n }\n }\n\n const i = points.length - 1;\n this.next.push(points[i].x, points[i].y, points[i].z);\n this.next.push(points[i].x, points[i].y, points[i].z);\n\n //this.process()\n return id;\n }\n\n /**\n * Process the track mesh.\n */\n process() {\n if (\n !this._attributes ||\n this._attributes.position.count !== this.positions.length\n ) {\n this._attributes = {\n position: new BufferAttribute(new Float32Array(this.positions), 3),\n previous: new BufferAttribute(new Float32Array(this.previous), 3),\n next: new BufferAttribute(new Float32Array(this.next), 3),\n side: new BufferAttribute(new Float32Array(this.side), 1),\n track_id: new BufferAttribute(new Int32Array(this.track_id), 1),\n color: new BufferAttribute(new Float32Array(this.colors), 3),\n counter: new BufferAttribute(new Float32Array(this.counter), 1),\n index: new BufferAttribute(new Uint32Array(this.indices_array), 1),\n };\n } else {\n (this._attributes.position as BufferAttribute).copyArray(\n new Float32Array(this.positions)\n );\n this._attributes.position.needsUpdate = true;\n (this._attributes.previous as BufferAttribute).copyArray(\n new Float32Array(this.previous)\n );\n this._attributes.previous.needsUpdate = true;\n (this._attributes.next as BufferAttribute).copyArray(\n new Float32Array(this.next)\n );\n this._attributes.next.needsUpdate = true;\n (this._attributes.side as BufferAttribute).copyArray(\n new Float32Array(this.side)\n );\n this._attributes.side.needsUpdate = true;\n (this._attributes.track_id as BufferAttribute).copyArray(\n new Int32Array(this.track_id)\n );\n this._attributes.track_id.needsUpdate = true;\n (this._attributes.color as BufferAttribute).copyArray(\n new Float32Array(this.colors)\n );\n this._attributes.color.needsUpdate = true;\n (this._attributes.counter as BufferAttribute).copyArray(\n new Float32Array(this.counter)\n );\n this._attributes.counter.needsUpdate = true;\n (this._attributes.index as BufferAttribute).copyArray(\n new Uint32Array(this.indices_array)\n );\n this._attributes.index.needsUpdate = true;\n }\n\n this.setAttribute('position', this._attributes.position);\n this.setAttribute('previous', this._attributes.previous);\n this.setAttribute('next', this._attributes.next);\n this.setAttribute('side', this._attributes.side);\n this.setAttribute('track_id', this._attributes.track_id);\n this.setAttribute('color', this._attributes.color);\n this.setAttribute('counter', this._attributes.counter);\n\n this.setIndex(this._attributes.index as BufferAttribute);\n\n this.computeBoundingSphere();\n this.computeBoundingBox();\n }\n}\n\n/** Custom vertex shader for tracks. */\nShaderChunk['tracks_vert'] = [\n 'attribute vec3 previous;',\n 'attribute vec3 next;',\n 'attribute int track_id;',\n 'attribute float side;',\n 'attribute vec3 color;',\n 'attribute float counter;',\n\n 'varying vec3 v_color;',\n 'varying float v_counter;',\n 'flat varying int v_track_id;',\n\n 'uniform vec2 resolution;',\n 'uniform float lineWidth;',\n 'void main() {',\n ' vec2 aspect = vec2(resolution.x / resolution.y, 1.0);',\n '',\n ' v_color = color;',\n ' v_counter = counter;',\n ' v_track_id = track_id;',\n '',\n ' mat4 m = projectionMatrix * modelViewMatrix;',\n ' vec4 finalPosition = m * vec4(position, 1.0);',\n ' vec4 prevPos = m * vec4(previous, 1.0);',\n ' vec4 nextPos = m * vec4(next, 1.0);',\n '',\n ' vec2 curP = finalPosition.xy / finalPosition.w * aspect;',\n ' vec2 prevP = prevPos.xy / prevPos.w * aspect;',\n ' vec2 nextP = nextPos.xy / nextPos.w * aspect;',\n '',\n ' vec2 dir;',\n ' if (curP == prevP) dir = normalize(nextP - curP);',\n ' else if (curP == nextP) dir = normalize(curP - prevP);',\n ' else dir = normalize(curP - prevP);',\n '',\n ' vec2 normal = vec2(-dir.y, dir.x);',\n ' normal.xy *= .5 * lineWidth;',\n ' normal.x /= aspect.x;',\n ' normal.xy *= finalPosition.w * 0.001;',\n\n ' finalPosition.xy += normal.xy * side;',\n ' gl_Position = finalPosition;',\n '}',\n].join('\\n');\n\n/** Custom fragment shadre for track. */\nShaderChunk['tracks_frag'] = [\n 'uniform float progress;',\n 'varying vec3 v_color;',\n 'varying float v_counter;',\n 'flat varying int v_track_id;',\n 'void main() {',\n ' if (v_counter > progress) discard;',\n ' gl_FragColor = vec4(v_color, 1.0);',\n '}',\n].join('\\n');\n\n/**\n * Custom material for the tracks.\n */\nexport class TracksMaterial extends ShaderMaterial {\n /** If the material is of track. */\n isTracksMaterial: boolean;\n\n /**\n * Create the tracks material.\n * @param params Params for creating the tracks material.\n */\n constructor(params) {\n super({\n uniforms: Object.assign(\n {},\n {\n lineWidth: { value: 1 },\n resolution: { value: new Vector2(1, 1) },\n progress: { value: 1 },\n }\n ),\n vertexShader: ShaderChunk['tracks_vert'],\n fragmentShader: ShaderChunk['tracks_vert'],\n });\n this.isTracksMaterial = true;\n this.type = 'TracksMaterial';\n\n Object.defineProperties(this, {\n lineWidth: {\n enumerable: true,\n get: function () {\n return this.uniforms.lineWidth.value;\n },\n set: function (value) {\n this.uniforms.lineWidth.value = value;\n },\n },\n resolution: {\n enumerable: true,\n get: function () {\n return this.uniforms.resolution.value;\n },\n set: function (value) {\n this.uniforms.resolution.value.copy(value);\n },\n },\n progress: {\n enumerable: true,\n get: function () {\n return this.uniforms.progress.value;\n },\n set: function (value) {\n this.uniforms.progress.value = value;\n },\n },\n });\n\n this.setValues(params);\n }\n}\n\n \n\n\n\n\n\n\n\n\n\n\n \n \n results matching \"\"\n \n \n \n No results matching \"\"\n \n\n"},"classes/URLOptionsManager.html":{"url":"classes/URLOptionsManager.html","title":"class - URLOptionsManager","body":"\n \n\n\n\n\n\n\n\n\n\n\n\n\n\n Classes\n URLOptionsManager\n\n\n\n \n Info\n \n \n Source\n \n\n\n\n \n \n File\n \n \n src/managers/url-options-manager.ts\n \n\n\n \n Description\n \n \n A manager for managing options given through URL.\n\n \n\n\n\n\n \n Index\n \n \n \n \n Properties\n \n \n \n \n \n \n Private\n urlOptions\n \n \n \n \n\n \n \n Methods\n \n \n \n \n \n \n Public\n applyEmbedOption\n \n \n Public\n applyEventOptions\n \n \n Public\n applyHideWidgetsOptions\n \n \n Public\n applyOptions\n \n \n Public\n getURLOptions\n \n \n Private\n Async\n handleJiveXMLEvent\n \n \n Private\n Async\n handleJSONEvent\n \n \n Private\n Async\n handleZipFileEvents\n \n \n Private\n hideIdsWithURLOption\n \n \n \n \n\n\n\n\n\n \n \n\n\n \n Constructor\n \n \n \n \nconstructor(eventDisplay: EventDisplay, configuration: Configuration)\n \n \n \n \n Defined in src/managers/url-options-manager.ts:24\n \n \n\n \n \n Constructor for the URL options manager.\n\n \n Parameters :\n \n \n \n Name\n Type\n Optional\n Description\n \n \n \n \n eventDisplay\n \n \n EventDisplay\n \n \n \n No\n \n \n \n The Phoenix event display.\n\n \n \n \n configuration\n \n \n Configuration\n \n \n \n No\n \n \n \n Configuration of the event display.\n\n \n \n \n \n \n \n \n \n \n\n\n \n \n \n Properties\n \n \n \n \n \n \n \n Private\n urlOptions\n \n \n \n \n \n \n Type : URLSearchParams\n\n \n \n \n \n Defined in src/managers/url-options-manager.ts:24\n \n \n\n \n \n Variable containing all URL search parameters.\n\n \n \n\n \n \n\n\n \n \n \n Methods\n \n \n \n \n \n \n \n Public\n applyEmbedOption\n \n \n \n \n \n \n \n applyEmbedOption()\n \n \n\n\n \n \n Defined in src/managers/url-options-manager.ts:227\n \n \n\n\n \n \n Hide all overlay widgets and enable embed menu if \"hideWidgets\" option from the URL is true.\n\n\n \n Returns : void\n\n \n \n \n \n \n \n \n \n \n \n \n Public\n applyEventOptions\n \n \n \n \n \n \n \n applyEventOptions(defaultEventPath?: string, defaultEventType?: string)\n \n \n\n\n \n \n Defined in src/managers/url-options-manager.ts:59\n \n \n\n\n \n \n Initialize the event display with event data and configuration from URL.\n(Only JiveXML and JSON)\n\n\n \n Parameters :\n \n \n \n \n Name\n Type\n Optional\n Description\n \n \n \n \n defaultEventPath\n \n string\n \n\n \n Yes\n \n\n\n \n Default event path to fallback to if none in URL.\n\n \n \n \n defaultEventType\n \n string\n \n\n \n Yes\n \n\n\n \n Default event type to fallback to if none in URL.\n\n \n \n \n \n \n \n \n \n Returns : void\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n Public\n applyHideWidgetsOptions\n \n \n \n \n \n \n \n applyHideWidgetsOptions()\n \n \n\n\n \n \n Defined in src/managers/url-options-manager.ts:209\n \n \n\n\n \n \n Hide all overlay widgets if \"hideWidgets\" option from the URL is true.\n\n\n \n Returns : void\n\n \n \n \n \n \n \n \n \n \n \n \n Public\n applyOptions\n \n \n \n \n \n \n \n applyOptions()\n \n \n\n\n \n \n Defined in src/managers/url-options-manager.ts:43\n \n \n\n\n \n \n Initialize and apply all URL options on page load.\n\n\n \n Returns : void\n\n \n \n \n \n \n \n \n \n \n \n \n Public\n getURLOptions\n \n \n \n \n \n \n \n getURLOptions()\n \n \n\n\n \n \n Defined in src/managers/url-options-manager.ts:268\n \n \n\n\n \n \n Get options from URL set through query parameters.\n\n\n \n \n \n Returns : URLSearchParams\n\n \n \n URL options.\n\n \n \n \n \n \n \n \n \n \n \n \n Private\n Async\n handleJiveXMLEvent\n \n \n \n \n \n \n \n handleJiveXMLEvent(fileURL: string)\n \n \n\n\n \n \n Defined in src/managers/url-options-manager.ts:143\n \n \n\n\n \n \n Handle JiveXML event from file URL.\n\n\n \n Parameters :\n \n \n \n \n Name\n Type\n Optional\n Description\n \n \n \n \n fileURL\n \n string\n \n\n \n No\n \n\n\n \n URL to the XML file.\n\n \n \n \n \n \n \n \n \n Returns : any\n\n \n \n An empty promise. ;(\n\n \n \n \n \n \n \n \n \n \n \n \n Private\n Async\n handleJSONEvent\n \n \n \n \n \n \n \n handleJSONEvent(fileURL: string)\n \n \n\n\n \n \n Defined in src/managers/url-options-manager.ts:158\n \n \n\n\n \n \n Handle JSON event from file URL.\n\n\n \n Parameters :\n \n \n \n \n Name\n Type\n Optional\n Description\n \n \n \n \n fileURL\n \n string\n \n\n \n No\n \n\n\n \n URL to the JSON file.\n\n \n \n \n \n \n \n \n \n Returns : any\n\n \n \n An empty promise. ;(\n\n \n \n \n \n \n \n \n \n \n \n \n Private\n Async\n handleZipFileEvents\n \n \n \n \n \n \n \n handleZipFileEvents(fileURL: string)\n \n \n\n\n \n \n Defined in src/managers/url-options-manager.ts:169\n \n \n\n\n \n \n Handle zip containing event data files.\n\n\n \n Parameters :\n \n \n \n \n Name\n Type\n Optional\n Description\n \n \n \n \n fileURL\n \n string\n \n\n \n No\n \n\n\n \n URL to the zip file.\n\n \n \n \n \n \n \n \n \n Returns : any\n\n \n \n An empty promise. ;(\n\n \n \n \n \n \n \n \n \n \n \n \n Private\n hideIdsWithURLOption\n \n \n \n \n \n \n \n hideIdsWithURLOption(urlOptionWithIds: literal type)\n \n \n\n\n \n \n Defined in src/managers/url-options-manager.ts:252\n \n \n\n\n \n \n Hide element with IDs based on a URL option.\n\n\n \n Parameters :\n \n \n \n \n Name\n Type\n Optional\n Description\n \n \n \n \n urlOptionWithIds\n \n literal type\n \n\n \n No\n \n\n\n \n IDs to hide with keys as the URL option and its array value as IDs.\n\n \n \n \n \n \n \n \n \n Returns : void\n\n \n \n \n \n \n \n \n \n\n\n\n\n\n\n \n\n\n \n import { JiveXMLLoader } from '../loaders/jivexml-loader';\nimport { PhoenixLoader } from '../loaders/phoenix-loader';\nimport { Configuration } from '../lib/types/configuration';\nimport { EventDisplay } from '../event-display';\nimport { StateManager } from './state-manager';\nimport { readZipFile } from '../helpers/zip';\n\n/**\n * Model for Phoenix URL options.\n */\nexport const phoenixURLOptions = {\n file: '',\n type: '',\n config: '',\n hideWidgets: false,\n embed: false,\n};\n\n/**\n * A manager for managing options given through URL.\n */\nexport class URLOptionsManager {\n /** Variable containing all URL search parameters. */\n private urlOptions: URLSearchParams;\n\n /**\n * Constructor for the URL options manager.\n * @param eventDisplay The Phoenix event display.\n * @param configuration Configuration of the event display.\n */\n constructor(\n private eventDisplay: EventDisplay,\n private configuration: Configuration\n ) {\n this.urlOptions = new URLSearchParams(\n window.location.href.substr(window.location.href.lastIndexOf('?'))\n );\n }\n\n /**\n * Initialize and apply all URL options on page load.\n */\n public applyOptions() {\n // Initialize event with data from URL if there is any\n this.applyEventOptions(\n this.configuration.defaultEventFile?.eventFile,\n this.configuration.defaultEventFile?.eventType\n );\n this.applyHideWidgetsOptions();\n this.applyEmbedOption();\n }\n\n /**\n * Initialize the event display with event data and configuration from URL.\n * (Only JiveXML and JSON)\n * @param defaultEventPath Default event path to fallback to if none in URL.\n * @param defaultEventType Default event type to fallback to if none in URL.\n */\n public applyEventOptions(\n defaultEventPath?: string,\n defaultEventType?: string\n ) {\n if (!('fetch' in window)) {\n return;\n }\n\n let file: string, type: string;\n\n if (\n (!this.urlOptions.get('file') && this.urlOptions.get('type')) ||\n (this.urlOptions.get('file') && !this.urlOptions.get('type'))\n ) {\n console.log(\n 'WARNING - if you set one of type or file, then you need to set both!'\n );\n console.log('WARNING - reverting to defaults!');\n }\n\n if (!this.urlOptions.get('file') || !this.urlOptions.get('type')) {\n console.log('Setting and config from defaults');\n file = defaultEventPath;\n type = defaultEventType;\n } else {\n console.log('Setting and config from urlOptions');\n file = this.urlOptions.get('file');\n type = this.urlOptions.get('type').toLowerCase();\n }\n\n console.log('Loading ', file, 'of type', type);\n // Load config from URL\n const loadConfig = () => {\n if (this.urlOptions.get('config')) {\n this.eventDisplay.getLoadingManager().addLoadableItem('url_config');\n fetch(this.urlOptions.get('config'))\n .then((res) => res.json())\n .then((jsonState) => {\n const stateManager = new StateManager();\n stateManager.loadStateFromJSON(jsonState);\n })\n .finally(() => {\n this.eventDisplay.getLoadingManager().itemLoaded('url_config');\n });\n }\n };\n\n const processEventFile = (fileURL: string) => {\n if (type === 'jivexml') {\n console.log('Opening JiveXML');\n return this.handleJiveXMLEvent(fileURL);\n } else if (type === 'zip') {\n console.log('Opening zip file');\n return this.handleZipFileEvents(fileURL);\n } else {\n return this.handleJSONEvent(fileURL);\n }\n };\n\n // Load event file from URL\n if (file && type) {\n this.eventDisplay.getLoadingManager().addLoadableItem('url_event');\n processEventFile(file)\n .catch((error) => {\n this.eventDisplay\n .getInfoLogger()\n .add('Could not find the file specified in URL.', 'Error');\n console.error('Could not find the file specified in URL.', error);\n })\n .finally(() => {\n // Load config from URL after loading the event\n loadConfig();\n this.eventDisplay.getLoadingManager().itemLoaded('url_event');\n });\n } else {\n loadConfig();\n }\n }\n\n /**\n * Handle JiveXML event from file URL.\n * @param fileURL URL to the XML file.\n * @returns An empty promise. ;(\n */\n private async handleJiveXMLEvent(fileURL: string) {\n const fileData = await (await fetch(fileURL)).text();\n const loader = new JiveXMLLoader();\n this.configuration.eventDataLoader = loader;\n // Parse the XML to extract events and their data\n loader.process(fileData);\n const eventData = loader.getEventData();\n this.eventDisplay.buildEventDataFromJSON(eventData);\n }\n\n /**\n * Handle JSON event from file URL.\n * @param fileURL URL to the JSON file.\n * @returns An empty promise. ;(\n */\n private async handleJSONEvent(fileURL: string) {\n const fileData = await (await fetch(fileURL)).json();\n this.configuration.eventDataLoader = new PhoenixLoader();\n this.eventDisplay.parsePhoenixEvents(fileData);\n }\n\n /**\n * Handle zip containing event data files.\n * @param fileURL URL to the zip file.\n * @returns An empty promise. ;(\n */\n private async handleZipFileEvents(fileURL: string) {\n const fileBuffer = await (await fetch(fileURL)).arrayBuffer();\n const allEventsObject = {};\n let filesWithData: { [fileName: string]: string };\n\n // Using a try catch block to catch any errors in Promises\n try {\n filesWithData = await readZipFile(fileBuffer);\n } catch (error) {\n console.error('Error while reading zip', error);\n this.eventDisplay.getInfoLogger().add('Could not read zip file', 'Error');\n return;\n }\n\n // JSON event data\n Object.keys(filesWithData)\n .filter((fileName) => fileName.endsWith('.json'))\n .forEach((fileName) => {\n Object.assign(allEventsObject, JSON.parse(filesWithData[fileName]));\n });\n\n // JiveXML event data\n const jiveloader = new JiveXMLLoader();\n Object.keys(filesWithData)\n .filter((fileName) => {\n return fileName.endsWith('.xml') || fileName.startsWith('JiveXML');\n })\n .forEach((fileName) => {\n jiveloader.process(filesWithData[fileName]);\n const eventData = jiveloader.getEventData();\n Object.assign(allEventsObject, { [fileName]: eventData });\n });\n // For some reason the above doesn't pick up JiveXML_XXX_YYY.zip\n\n this.eventDisplay.parsePhoenixEvents(allEventsObject);\n }\n\n /**\n * Hide all overlay widgets if \"hideWidgets\" option from the URL is true.\n */\n public applyHideWidgetsOptions() {\n const hideWidgetsOptions = {\n hideWidgets: [\n 'mainLogo', // Main logo\n 'uiMenu', // UI menu\n 'experimentInfo', // Experiment info\n 'phoenixMenu', // Phoenix menu\n 'statsElement', // Stats at the bottom left\n 'gui', // dat.GUI menu\n ],\n };\n\n this.hideIdsWithURLOption(hideWidgetsOptions);\n }\n\n /**\n * Hide all overlay widgets and enable embed menu if \"hideWidgets\" option from the URL is true.\n */\n public applyEmbedOption() {\n if (this.urlOptions.get('embed') === 'true') {\n const hideWidgetsOptions = {\n embed: [\n 'mainLogo', // Main logo\n 'uiMenu', // UI menu\n 'experimentInfo', // Experiment info\n 'phoenixMenu', // Phoenix menu\n 'statsElement', // Stats at the bottom left\n 'gui', // dat.GUI menu\n ],\n };\n\n this.hideIdsWithURLOption(hideWidgetsOptions);\n\n document\n .getElementById('embedMenu')\n ?.style.setProperty('display', 'block');\n }\n }\n\n /**\n * Hide element with IDs based on a URL option.\n * @param urlOptionWithIds IDs to hide with keys as the URL option and its array value as IDs.\n */\n private hideIdsWithURLOption(urlOptionWithIds: { [key: string]: string[] }) {\n Object.entries(urlOptionWithIds).forEach(([urlOption, idsToHide]) => {\n if (this.urlOptions.get(urlOption) === 'true') {\n idsToHide.forEach((singleId) => {\n document\n .getElementById(singleId)\n ?.style.setProperty('display', 'none');\n });\n }\n });\n }\n\n /**\n * Get options from URL set through query parameters.\n * @returns URL options.\n */\n public getURLOptions() {\n return this.urlOptions;\n }\n}\n\n \n\n\n\n\n\n\n\n\n\n\n \n \n results matching \"\"\n \n \n \n No results matching \"\"\n \n\n"},"classes/VRManager.html":{"url":"classes/VRManager.html","title":"class - VRManager","body":"\n \n\n\n\n\n\n\n\n\n\n\n\n\n\n Classes\n VRManager\n\n\n\n \n Info\n \n \n Source\n \n\n\n\n \n \n File\n \n \n src/managers/three-manager/xr/vr-manager.ts\n \n\n\n \n Description\n \n \n VR manager for VR related operations.\n\n \n\n \n Extends\n \n \n XRManager\n \n\n\n\n \n Index\n \n \n \n \n Properties\n \n \n \n \n \n \n Private\n controller1\n \n \n Private\n controller2\n \n \n Private\n controllerGrip1\n \n \n Private\n controllerGrip2\n \n \n Private\n onControllerSelectEnd\n \n \n Private\n onControllerSelectStart\n \n \n Static\n Readonly\n SESSION_TYPE\n \n \n Public\n cameraGroup\n \n \n Protected\n currentXRSession\n \n \n Protected\n onSessionEnded\n \n \n Protected\n renderer\n \n \n Protected\n sessionInit\n \n \n Protected\n xrActive\n \n \n Public\n xrCamera\n \n \n \n \n\n \n \n Methods\n \n \n \n \n \n \n Private\n moveInDirection\n \n \n Protected\n onXRSessionEnded\n \n \n Private\n setupVRControls\n \n \n Public\n setXRSession\n \n \n Public\n endXRSession\n \n \n Public\n getCameraGroup\n \n \n Public\n getXRCamera\n \n \n Protected\n Async\n onXRSessionStarted\n \n \n \n \n\n\n\n\n\n \n \n\n\n \n Constructor\n \n \n \n \nconstructor()\n \n \n \n \n Defined in src/managers/three-manager/xr/vr-manager.ts:28\n \n \n\n \n \n Create the VR manager.\n\n \n \n \n \n\n\n \n \n \n Properties\n \n \n \n \n \n \n \n Private\n controller1\n \n \n \n \n \n \n Type : any\n\n \n \n \n \n Defined in src/managers/three-manager/xr/vr-manager.ts:17\n \n \n\n \n \n The VR controller for movement.\n\n \n \n\n \n \n \n \n \n \n \n \n Private\n controller2\n \n \n \n \n \n \n Type : any\n\n \n \n \n \n Defined in src/managers/three-manager/xr/vr-manager.ts:19\n \n \n\n \n \n The VR controller for movement.\n\n \n \n\n \n \n \n \n \n \n \n \n Private\n controllerGrip1\n \n \n \n \n \n \n Type : any\n\n \n \n \n \n Defined in src/managers/three-manager/xr/vr-manager.ts:21\n \n \n\n \n \n The VR controller representation\n\n \n \n\n \n \n \n \n \n \n \n \n Private\n controllerGrip2\n \n \n \n \n \n \n Type : any\n\n \n \n \n \n Defined in src/managers/three-manager/xr/vr-manager.ts:23\n \n \n\n \n \n The VR controller representation\n\n \n \n\n \n \n \n \n \n \n \n \n Private\n onControllerSelectEnd\n \n \n \n \n \n \n Type : function\n\n \n \n \n \n Defined in src/managers/three-manager/xr/vr-manager.ts:28\n \n \n\n \n \n Listener for when the \"Select Start\" button is released.\n\n \n \n\n \n \n \n \n \n \n \n \n Private\n onControllerSelectStart\n \n \n \n \n \n \n Type : function\n\n \n \n \n \n Defined in src/managers/three-manager/xr/vr-manager.ts:26\n \n \n\n \n \n Listener for when the \"Select Start\" button is pushed.\n\n \n \n\n \n \n \n \n \n \n \n \n Static\n Readonly\n SESSION_TYPE\n \n \n \n \n \n \n Type : string\n\n \n \n \n \n Default value : 'immersive-vr'\n \n \n \n \n Defined in src/managers/three-manager/xr/vr-manager.ts:15\n \n \n\n \n \n Session type to use for VR.\n\n \n \n\n \n \n \n \n \n \n \n \n Public\n cameraGroup\n \n \n \n \n \n \n Type : Group\n\n \n \n \n \n Inherited from XRManager\n\n \n \n \n \n Defined in XRManager:36\n\n \n \n\n \n \n Group containing the the camera for XR.\n\n \n \n\n \n \n \n \n \n \n \n \n Protected\n currentXRSession\n \n \n \n \n \n \n Type : any\n\n \n \n \n \n Default value : null\n \n \n \n \n Inherited from XRManager\n\n \n \n \n \n Defined in XRManager:32\n\n \n \n\n \n \n Currently active XR session.\n\n \n \n\n \n \n \n \n \n \n \n \n Protected\n onSessionEnded\n \n \n \n \n \n \n Type : function\n\n \n \n \n \n Inherited from XRManager\n\n \n \n \n \n Defined in XRManager:34\n\n \n \n\n \n \n Callback to call when the XR session ends.\n\n \n \n\n \n \n \n \n \n \n \n \n Protected\n renderer\n \n \n \n \n \n \n Type : WebGLRenderer\n\n \n \n \n \n Inherited from XRManager\n\n \n \n \n \n Defined in XRManager:30\n\n \n \n\n \n \n Renderer to set the XR session for.\n\n \n \n\n \n \n \n \n \n \n \n \n Protected\n sessionInit\n \n \n \n \n \n \n Type : function\n\n \n \n \n \n Inherited from XRManager\n\n \n \n \n \n Defined in XRManager:28\n\n \n \n\n \n \n Returns required and optional features when requesting an XR session.\n\n \n \n\n \n \n \n \n \n \n \n \n Protected\n xrActive\n \n \n \n \n \n \n Type : boolean\n\n \n \n \n \n Default value : false\n \n \n \n \n Inherited from XRManager\n\n \n \n \n \n Defined in XRManager:26\n\n \n \n\n \n \n Whether the XR is currently active or not.\n\n \n \n\n \n \n \n \n \n \n \n \n Public\n xrCamera\n \n \n \n \n \n \n Type : Camera\n\n \n \n \n \n Inherited from XRManager\n\n \n \n \n \n Defined in XRManager:38\n\n \n \n\n \n \n The camera used by XR.\n\n \n \n\n \n \n\n\n \n \n \n Methods\n \n \n \n \n \n \n \n Private\n moveInDirection\n \n \n \n \n \n \n \n moveInDirection(direction: Vector3, stepDistance: number)\n \n \n\n\n \n \n Defined in src/managers/three-manager/xr/vr-manager.ts:149\n \n \n\n\n \n \n Move the camera in the given direction.\n\n\n \n Parameters :\n \n \n \n \n Name\n Type\n Optional\n Description\n \n \n \n \n direction\n \n Vector3\n \n\n \n No\n \n\n\n \n Direction to move towards.\n\n \n \n \n stepDistance\n \n number\n \n\n \n No\n \n\n\n \n Distance to move by.\n\n \n \n \n \n \n \n \n \n Returns : void\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n Protected\n onXRSessionEnded\n \n \n \n \n \n \n \n onXRSessionEnded()\n \n \n\n\n \n \n Inherited from XRManager\n\n \n \n \n \n Defined in XRManager:61\n\n \n \n\n\n \n \n Callback when the VR session ends.\n\n\n \n Returns : void\n\n \n \n \n \n \n \n \n \n \n \n \n Private\n setupVRControls\n \n \n \n \n \n \n \n setupVRControls()\n \n \n\n\n \n \n Defined in src/managers/three-manager/xr/vr-manager.ts:77\n \n \n\n\n \n \n Set up VR controls for moving around the event display.\n\n\n \n Returns : void\n\n \n \n \n \n \n \n \n \n \n \n \n Public\n setXRSession\n \n \n \n \n \n \n \n setXRSession(renderer: WebGLRenderer, onSessionStarted?: () => void, onSessionEnded?: () => void)\n \n \n\n\n \n \n Inherited from XRManager\n\n \n \n \n \n Defined in XRManager:48\n\n \n \n\n\n \n \n Set and configure the VR session.\n\n\n \n Parameters :\n \n \n \n \n Name\n Type\n Optional\n Description\n \n \n \n \n renderer\n \n WebGLRenderer\n \n\n \n No\n \n\n\n \n Renderer to set the VR session for.\n\n \n \n \n onSessionStarted\n \n function\n \n\n \n Yes\n \n\n\n \n Callback to call when the VR session starts.\n\n \n \n \n onSessionEnded\n \n function\n \n\n \n Yes\n \n\n\n \n Callback to call when the VR session ends.\n\n \n \n \n \n \n \n \n \n Returns : void\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n Public\n endXRSession\n \n \n \n \n \n \n \n endXRSession()\n \n \n\n\n \n \n Inherited from XRManager\n\n \n \n \n \n Defined in XRManager:99\n\n \n \n\n\n \n \n End the current XR session.\n\n\n \n Returns : void\n\n \n \n \n \n \n \n \n \n \n \n \n Public\n getCameraGroup\n \n \n \n \n \n \n \n getCameraGroup(camera?: Camera)\n \n \n\n\n \n \n Inherited from XRManager\n\n \n \n \n \n Defined in XRManager:109\n\n \n \n\n\n \n \n Get the group containing the camera for XR.\nXR camera works by adding a Group with Camera to the scene.\n\n\n \n Parameters :\n \n \n \n \n Name\n Type\n Optional\n Description\n \n \n \n \n camera\n \n Camera\n \n\n \n Yes\n \n\n\n \n Camera which is to be cloned for XR use.\n\n \n \n \n \n \n \n \n \n Returns : Group\n\n \n \n The camera group used in XR mode.\n\n \n \n \n \n \n \n \n \n \n \n \n Public\n getXRCamera\n \n \n \n \n \n \n \n getXRCamera()\n \n \n\n\n \n \n Inherited from XRManager\n\n \n \n \n \n Defined in XRManager:135\n\n \n \n\n\n \n \n Get the camera used by XR.\n\n\n \n \n \n Returns : Camera\n\n \n \n The camera used by XR.\n\n \n \n \n \n \n \n \n \n \n \n \n Protected\n Async\n onXRSessionStarted\n \n \n \n \n \n \n \n onXRSessionStarted(session: any)\n \n \n\n\n \n \n Inherited from XRManager\n\n \n \n \n \n Defined in XRManager:78\n\n \n \n\n\n \n \n Callback for when the XR session is started.\n\n\n \n Parameters :\n \n \n \n \n Name\n Type\n Optional\n Description\n \n \n \n \n session\n \n any\n \n\n \n No\n \n\n\n \n The XR session.\n\n \n \n \n \n \n \n \n \n Returns : any\n\n \n \n \n \n \n \n \n \n\n\n\n\n\n\n \n\n\n \n import { WebGLRenderer, Vector3, BufferGeometry, Line } from 'three';\nimport { XRControllerModelFactory } from 'three/examples/jsm/webxr/XRControllerModelFactory';\nimport { XRManager, XRSessionType } from './xr-manager';\n\n// NOTE: This was created on 29/08/2020\n// It might become outdated given how WebXR is still a work in progress\n\n// LAST UPDATED ON 20/06/2021\n\n/**\n * VR manager for VR related operations.\n */\nexport class VRManager extends XRManager {\n /** Session type to use for VR. */\n static readonly SESSION_TYPE: string = 'immersive-vr';\n /** The VR controller for movement. */\n private controller1: any;\n /** The VR controller for movement. */\n private controller2: any;\n /** The VR controller representation */\n private controllerGrip1: any;\n /** The VR controller representation */\n private controllerGrip2: any;\n\n /** Listener for when the \"Select Start\" button is pushed. */\n private onControllerSelectStart: () => void;\n /** Listener for when the \"Select Start\" button is released. */\n private onControllerSelectEnd: () => void;\n\n /**\n * Create the VR manager.\n * @override\n */\n constructor() {\n super(XRSessionType.VR);\n this.sessionInit = () => ({\n optionalFeatures: ['local-floor', 'bounded-floor', 'hand-tracking'],\n });\n }\n\n /**\n * Set and configure the VR session.\n * @param renderer Renderer to set the VR session for.\n * @param onSessionStarted Callback to call when the VR session starts.\n * @param onSessionEnded Callback to call when the VR session ends.\n * @override\n */\n public setXRSession(\n renderer: WebGLRenderer,\n onSessionStarted?: () => void,\n onSessionEnded?: () => void\n ) {\n super.setXRSession(renderer, onSessionStarted, onSessionEnded);\n this.setupVRControls();\n }\n\n /**\n * Callback when the VR session ends.\n * @override\n */\n protected onXRSessionEnded() {\n super.onXRSessionEnded();\n\n this.controller1?.removeEventListener(\n 'selectstart',\n this.onControllerSelectStart\n );\n this.controller1?.removeEventListener(\n 'selectend',\n this.onControllerSelectEnd\n );\n }\n\n /**\n * Set up VR controls for moving around the event display.\n */\n private setupVRControls() {\n // Get the controllers\n this.controller1 = this.renderer.xr.getController(0);\n this.getCameraGroup().add(this.controller1);\n this.controller2 = this.renderer.xr.getController(1);\n this.getCameraGroup().add(this.controller2);\n\n const controllerModelFactory = new XRControllerModelFactory();\n this.controllerGrip1 = this.renderer.xr.getControllerGrip(0);\n this.controllerGrip1.add(\n controllerModelFactory.createControllerModel(this.controllerGrip1)\n );\n this.getCameraGroup().add(this.controllerGrip1);\n\n this.controllerGrip2 = this.renderer.xr.getControllerGrip(1);\n this.controllerGrip2.add(\n controllerModelFactory.createControllerModel(this.controllerGrip2)\n );\n this.getCameraGroup().add(this.controllerGrip2);\n\n const geometry = new BufferGeometry().setFromPoints([\n new Vector3(0, 0, 0),\n new Vector3(0, 0, -1),\n ]);\n\n const line = new Line(geometry);\n line.name = 'line';\n line.scale.z = 50;\n\n this.controller1.add(line.clone());\n this.controller2.add(line.clone());\n\n // Set up movement\n\n // Distance for a single step\n const stepDistance = 30;\n // Unit vector in camera direction\n const direction = new Vector3();\n // Interval ID for the movement interval\n let intervalId: NodeJS.Timeout;\n\n this.onControllerSelectStart = () => {\n console.log(\n 'Select: c1 position ' + this.controller1.position.toArray().join(', ')\n );\n console.log(\n 'Select: CG position ' + this.cameraGroup.position.toArray().join(', ')\n );\n\n // Start movement in camera direction\n intervalId = setInterval(() => {\n this.moveInDirection(direction, stepDistance);\n }, 20);\n };\n\n this.onControllerSelectEnd = () => {\n // Stop the movement\n clearInterval(intervalId);\n };\n\n this.controller1.addEventListener(\n 'selectstart',\n this.onControllerSelectStart\n );\n this.controller1.addEventListener('selectend', this.onControllerSelectEnd);\n }\n\n /**\n * Move the camera in the given direction.\n * @param direction Direction to move towards.\n * @param stepDistance Distance to move by.\n */\n private moveInDirection(direction: Vector3, stepDistance: number) {\n // Get the direction the controller is facing\n //! this.controller.getWorldDirection(direction);\n\n // Get direction the camera is facing\n this.xrCamera?.getWorldDirection(direction);\n\n // Move the camera in the given direction\n this.cameraGroup.position.addScaledVector(direction, stepDistance);\n this.xrCamera.position.addScaledVector(direction, stepDistance);\n }\n}\n\n \n\n\n\n\n\n\n\n\n\n\n \n \n results matching \"\"\n \n \n \n No results matching \"\"\n \n\n"},"interfaces/Window.html":{"url":"interfaces/Window.html","title":"interface - Window","body":"\n \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n Interfaces\n \n Window\n\n\n\n \n Info\n \n \n Source\n \n\n\n\n \n \n File\n \n \n src/event-display.ts\n \n\n\n \n Description\n \n \n Window interface for adding objects to the window object.\n\n \n\n\n \n Index\n \n \n \n \n Properties\n \n \n \n \n \n \n \n EventDisplay\n \n \n \n \n \n \n \n \n\n\n\n \n Properties\n \n \n \n \n \n EventDisplay\n \n \n \n \n \n \n \n \n EventDisplay: any\n\n \n \n\n\n \n \n Type : any\n\n \n \n\n\n\n\n\n \n \n EventDisplay object containing event display related functions.\n\n \n \n \n \n \n \n\n\n \n import { httpRequest } from 'jsroot';\nimport { settings as jsrootSettings } from 'jsroot';\nimport { build } from 'jsroot/geom';\nimport { openFile } from 'jsroot/io';\nimport { ThreeManager } from './managers/three-manager';\nimport { UIManager } from './managers/ui-manager';\nimport { InfoLogger } from './helpers/info-logger';\nimport { Configuration } from './lib/types/configuration';\nimport { StateManager } from './managers/state-manager';\nimport { LoadingManager } from './managers/loading-manager';\nimport { URLOptionsManager } from './managers/url-options-manager';\nimport { ActiveVariable } from './helpers/active-variable';\nimport { AnimationPreset } from './managers/three-manager/animations-manager';\nimport { XRSessionType } from './managers/three-manager/xr/xr-manager';\nimport { getLabelTitle } from './helpers/labels';\nimport { PhoenixLoader } from './loaders/phoenix-loader';\n\ndeclare global {\n /**\n * Window interface for adding objects to the window object.\n */\n interface Window {\n /** EventDisplay object containing event display related functions. */\n EventDisplay: any;\n }\n}\n\n/**\n * Phoenix event display class for managing detector geometries and event data.\n */\nexport class EventDisplay {\n /** Configuration for preset views and event data loader. */\n private configuration: Configuration;\n /** An object containing event data. */\n private eventsData: any;\n /** Array containing callbacks to be called when events change. */\n private onEventsChange: ((events: any) => void)[] = [];\n /** Array containing callbacks to be called when the displayed event changes. */\n private onDisplayedEventChange: ((nowDisplayingEvent: any) => void)[] = [];\n /** Three manager for three.js operations. */\n private graphicsLibrary: ThreeManager;\n /** Info logger for storing event display logs. */\n private infoLogger: InfoLogger;\n /** UI manager for UI menu. */\n private ui: UIManager;\n /** Loading manager for loadable resources */\n private loadingManager: LoadingManager;\n /** State manager for managing event display state. */\n private stateManager: StateManager;\n /** URL manager for managing options given through URL. */\n private urlOptionsManager: URLOptionsManager;\n\n /**\n * Create the Phoenix event display and intitialize all the elements.\n * @param configuration Configuration used to customize different aspects.\n */\n constructor(configuration?: Configuration) {\n this.loadingManager = new LoadingManager();\n this.infoLogger = new InfoLogger();\n this.graphicsLibrary = new ThreeManager(this.infoLogger);\n this.ui = new UIManager(this.graphicsLibrary);\n if (configuration) {\n this.init(configuration);\n }\n }\n\n /**\n * Initialize all the Phoenix event display elements.\n * @param configuration Configuration used to customize different aspects.\n */\n public init(configuration: Configuration) {\n this.configuration = configuration;\n\n // Initialize the three manager with configuration\n this.graphicsLibrary.init(configuration);\n // Initialize the UI with configuration\n this.ui.init(configuration);\n // Set up for the state manager\n this.getStateManager().setEventDisplay(this);\n\n // Animate loop\n const uiLoop = () => {\n this.ui.updateUI();\n };\n this.graphicsLibrary.setAnimationLoop(uiLoop);\n\n // Process and apply URL options\n this.urlOptionsManager = new URLOptionsManager(this, configuration);\n if (configuration.allowUrlOptions !== false) {\n this.urlOptionsManager.applyOptions();\n }\n\n // Allow adding elements through console\n this.enableEventDisplayConsole();\n // Allow keyboard controls\n this.enableKeyboardControls();\n }\n\n /**\n * Takes a screen shot of the current view\n * @param width the width of the picture to be created\n * @param height the height of the picture to be created\n * @param fitting the type of fitting to use in case width and height\n * ratio do not match the current screen ratio. Posible values are\n * - Crop : current view is cropped on both side or up and done to fit ratio\n * thus it is not stretched, but some parts are lost\n * - Stretch : current view is stretched to given format\n * this is the default and used also for any other value given to fitting\n */\n public makeScreenShot(\n width: number,\n height: number,\n fitting: string = 'Stretch'\n ) {\n this.graphicsLibrary.makeScreenShot(width, height, fitting);\n }\n\n /**\n * Initialize XR.\n * @param xrSessionType Type of the XR session. Either AR or VR.\n * @param onSessionEnded Callback when the XR session ends.\n */\n public initXR(xrSessionType: XRSessionType, onSessionEnded?: () => void) {\n this.graphicsLibrary.initXRSession(xrSessionType, onSessionEnded);\n }\n\n /**\n * End VR and remove VR settings.\n * @param xrSessionType Type of the XR session. Either AR or VR.\n */\n public endXR(xrSessionType: XRSessionType) {\n this.graphicsLibrary.endXRSession(xrSessionType);\n }\n\n /**\n * Receives an object containing all the eventKeys and saves it.\n * Then it loads by default the first event.\n * @param eventsData Object containing the event data.\n * @returns Array of strings containing the keys of the eventsData object.\n */\n public parsePhoenixEvents(eventsData: any): string[] {\n this.eventsData = eventsData;\n if (typeof this.configuration.eventDataLoader === 'undefined') {\n this.configuration.eventDataLoader = new PhoenixLoader();\n }\n const eventKeys =\n this.configuration.eventDataLoader.getEventsList(eventsData);\n this.loadEvent(eventKeys[0]);\n this.onEventsChange.forEach((callback) => callback(eventKeys));\n\n return eventKeys;\n }\n\n /**\n * Receives an object containing one event and builds the different collections\n * of physics objects.\n * @param eventData Object containing the event data.\n */\n public buildEventDataFromJSON(eventData: any) {\n // Reset labels\n this.resetLabels();\n // Creating UI folder\n this.ui.addEventDataFolder();\n this.ui.addLabelsFolder();\n // Clearing existing event data\n this.graphicsLibrary.clearEventData();\n // Build data and add to scene\n this.configuration.eventDataLoader.buildEventData(\n eventData,\n this.graphicsLibrary,\n this.ui,\n this.infoLogger\n );\n this.onDisplayedEventChange.forEach((callback) => callback(eventData));\n // Reload the event data state in Phoenix menu\n this.ui.loadEventFolderPhoenixMenuState();\n }\n\n /**\n * Receives a string representing the key of an event and loads\n * the event associated with that key.\n * @param eventKey String that represents the event in the eventsData object.\n */\n public loadEvent(eventKey: any) {\n const event = this.eventsData[eventKey];\n\n if (event) {\n this.buildEventDataFromJSON(event);\n }\n }\n\n /**\n * Get the three manager responsible for three.js functions.\n * @returns The three.js manager.\n */\n public getThreeManager() {\n return this.graphicsLibrary;\n }\n\n /**\n * Get the UI manager responsible for UI related functions.\n * @returns The UI manager.\n */\n public getUIManager() {\n return this.ui;\n }\n\n /**\n * Get the info logger containing event display logs.\n * @returns The info logger instance being used by the event display.\n */\n public getInfoLogger() {\n return this.infoLogger;\n }\n\n /**\n * Get the loading manager for managing loadable items.\n * @returns The loading manager.\n */\n public getLoadingManager() {\n return this.loadingManager;\n }\n\n /**\n * Get the state manager that manages event display's state.\n * @returns The state manager.\n */\n public getStateManager() {\n if (!this.stateManager) {\n this.stateManager = new StateManager();\n }\n\n return this.stateManager;\n }\n\n /**\n * Get the URL options manager that manages options given through URL.\n * @returns The URL options manager.\n */\n public getURLOptionsManager() {\n return this.urlOptionsManager;\n }\n\n // **********************\n // * LOADING GEOMETRIES *\n // **********************\n\n /**\n * Loads an OBJ (.obj) geometry from the given filename\n * and adds it to the dat.GUI menu.\n * @param filename Path to the geometry.\n * @param name Name given to the geometry.\n * @param color Color to initialize the geometry.\n * @param menuNodeName Name of the node in Phoenix menu to add the geometry to. Use > as a separator for specifying the hierarchy for sub-folders.\n * @param doubleSided If true, render both sides of the material.\n * @param initiallyVisible Whether the geometry is initially visible or not. Default `true`.\n * @param setFlat Whether object should be flat-shaded or not. Default `true`.\n * @returns Promise for loading the geometry.\n */\n public async loadOBJGeometry(\n filename: string,\n name: string,\n color: any,\n menuNodeName?: string,\n doubleSided?: boolean,\n initiallyVisible: boolean = true,\n setFlat: boolean = true\n ): Promise {\n this.loadingManager.addLoadableItem(`obj_geom_${name}`);\n\n const { object } = await this.graphicsLibrary.loadOBJGeometry(\n filename,\n name,\n color,\n doubleSided,\n initiallyVisible,\n setFlat\n );\n this.ui.addGeometry(object, menuNodeName);\n\n this.loadingManager.itemLoaded(`obj_geom_${name}`);\n this.infoLogger.add(name, 'Loaded OBJ geometry');\n }\n\n /**\n * Parses and loads an OBJ geometry from the given content\n * and adds it to the dat.GUI menu.\n * @param content Content of the OBJ geometry.\n * @param name Name given to the geometry.\n * @param menuNodeName Name of the node in Phoenix menu to add the geometry to. Use > as a separator for specifying the hierarchy for sub-folders.\n * @param initiallyVisible Whether the geometry is initially visible or not. Default `true`.\n */\n public parseOBJGeometry(\n content: string,\n name: string,\n menuNodeName?: string,\n initiallyVisible: boolean = true\n ) {\n this.loadingManager.addLoadableItem(`parse_obj_${name}`);\n const { object } = this.graphicsLibrary.parseOBJGeometry(\n content,\n name,\n initiallyVisible\n );\n this.ui.addGeometry(object, menuNodeName);\n this.loadingManager.itemLoaded(`parse_obj_${name}`);\n }\n\n /**\n * Exports scene to OBJ file format.\n */\n public exportToOBJ() {\n this.graphicsLibrary.exportSceneToOBJ();\n this.infoLogger.add('Exported scene to OBJ');\n }\n\n /**\n * Parse and load an event from the Phoenix file format (.phnx).\n * @param input Content containing the JSON with event data\n * and other configuration.\n * @returns Promise for loading the geometry.\n */\n public async parsePhoenixDisplay(input: any): Promise {\n const phoenixScene = JSON.parse(input);\n\n if (phoenixScene.sceneConfiguration && phoenixScene.scene) {\n // Creating UI folder\n this.ui.addEventDataFolder();\n this.ui.addLabelsFolder();\n // Clearing existing event data\n this.graphicsLibrary.clearEventData();\n // Add to scene\n this.loadSceneConfiguration(phoenixScene.sceneConfiguration);\n\n this.loadingManager.addLoadableItem(`parse_phnx_${name}`);\n await this.graphicsLibrary.parsePhnxScene(phoenixScene.scene);\n this.loadingManager.itemLoaded(`parse_phnx_${name}`);\n }\n }\n\n /**\n * Exports scene as phoenix format, allowing to load it later and recover the saved configuration.\n */\n public exportPhoenixDisplay() {\n this.graphicsLibrary.exportPhoenixScene();\n }\n\n /**\n * Parses and loads a geometry in GLTF (.gltf) format.\n * @param input Data of the GLTF (.gltf) file.\n * @param name Name given to the geometry. If empty Name will be taken from the geometry itself\n * @returns Promise for loading the geometry.\n */\n public async parseGLTFGeometry(\n input: string | ArrayBuffer,\n name: string\n ): Promise {\n this.loadingManager.addLoadableItem(`parse_gltf_${name}`);\n\n const allGeometriesUIParameters =\n await this.graphicsLibrary.parseGLTFGeometry(input, name);\n for (const { object } of allGeometriesUIParameters) {\n this.ui.addGeometry(object);\n }\n\n this.loadingManager.itemLoaded(`parse_gltf_${name}`);\n }\n\n /**\n * Loads a GLTF (.gltf) scene/geometry from the given URL.\n * and adds it to the dat.GUI menu.\n * @param url URL to the GLTF (.gltf) file.\n * @param name Name of the loaded scene/geometry.\n * @param menuNodeName Name of the node in Phoenix menu to add the geometry to. Use > as a separator for specifying the hierarchy for sub-folders.\n * @param scale Scale of the geometry.\n * @param initiallyVisible Whether the geometry is initially visible or not. Default `true`.\n * @returns Promise for loading the geometry.\n */\n public async loadGLTFGeometry(\n url: any,\n name: string | undefined,\n menuNodeName?: string,\n scale?: number,\n initiallyVisible: boolean = true\n ): Promise {\n this.loadingManager.addLoadableItem(`gltf_geom_${name}`);\n\n const allGeometriesUIParameters =\n await this.graphicsLibrary.loadGLTFGeometry(\n url,\n name,\n menuNodeName,\n scale,\n initiallyVisible\n );\n for (const { object, menuNodeName } of allGeometriesUIParameters) {\n this.ui.addGeometry(object, menuNodeName);\n }\n\n this.loadingManager.itemLoaded(`gltf_geom_${name}`);\n }\n\n /**\n * Loads geometries from JSON.\n * @param json JSON or URL to JSON file of the geometry.\n * @param name Name of the geometry or group of geometries.\n * @param menuNodeName Name of the node in Phoenix menu to add the geometry to. Use > as a separator for specifying the hierarchy for sub-folders.\n * @param scale Scale of the geometry.\n * @param doubleSided Renders both sides of the material.\n * @param initiallyVisible Whether the geometry is initially visible or not. Default `true`.\n * @returns Promise for loading the geometry.\n */\n public async loadJSONGeometry(\n json: string | { [key: string]: any },\n name: string,\n menuNodeName?: string,\n scale?: number,\n doubleSided?: boolean,\n initiallyVisible: boolean = true\n ): Promise {\n this.loadingManager.addLoadableItem(`json_geom_${name}`);\n\n const { object } = await this.graphicsLibrary.loadJSONGeometry(\n json,\n name,\n scale,\n doubleSided,\n initiallyVisible\n );\n this.ui.addGeometry(object, menuNodeName);\n\n this.loadingManager.itemLoaded(`json_geom_${name}`);\n this.infoLogger.add(name, 'Loaded JSON geometry');\n }\n\n /**\n * Load JSON geometry from JSRoot.\n * @param url URL of the JSRoot geometry file.\n * @param name Name of the geometry.\n * @param menuNodeName Name of the node in Phoenix menu to add the geometry to. Use > as a separator for specifying the hierarchy for sub-folders.\n * @param scale Scale of the geometry.\n * @param doubleSided Renders both sides of the material.\n * @param initiallyVisible Whether the geometry is initially visible or not. Default `true`.\n */\n public async loadRootJSONGeometry(\n url: string,\n name: string,\n menuNodeName?: string,\n scale?: number,\n doubleSided?: boolean,\n initiallyVisible: boolean = true\n ) {\n this.loadingManager.addLoadableItem('root_json_geom');\n\n const object = await httpRequest(url, 'object');\n await this.loadJSONGeometry(\n build(object, { dflt_colors: true }).toJSON(),\n name,\n menuNodeName,\n scale,\n doubleSided,\n initiallyVisible\n );\n\n this.loadingManager.itemLoaded('root_json_geom');\n }\n\n /**\n * Load ROOT geometry from JSRoot.\n * @param url URL of the JSRoot file.\n * @param objectName Name of the object inside the \".root\" file.\n * @param name Name of the geometry.\n * @param menuNodeName Name of the node in Phoenix menu to add the geometry to. Use > as a separator for specifying the hierarchy for sub-folders.\n * @param scale Scale of the geometry.\n * @param doubleSided Renders both sides of the material.\n * @param initiallyVisible Whether the geometry is initially visible or not. Default `true`.\n */\n public async loadRootGeometry(\n url: string,\n objectName: string,\n name: string,\n menuNodeName?: string,\n scale?: number,\n doubleSided?: boolean,\n initiallyVisible: boolean = true\n ) {\n this.loadingManager.addLoadableItem('root_geom');\n // See https://github.com/root-project/jsroot/blob/19ce116b68701ab45e0a092c673119bf97ede0c2/modules/core.mjs#L241.\n jsrootSettings.UseStamp = false;\n\n const file = await openFile(url);\n const obj = await file.readObject(objectName);\n\n await this.loadJSONGeometry(\n build(obj, { dflt_colors: true }).toJSON(),\n name,\n menuNodeName,\n scale,\n doubleSided,\n initiallyVisible\n );\n\n this.loadingManager.itemLoaded('root_geom');\n }\n\n /**\n * Build Geometry from thr passed parameters, where\n * @param parameters\n */\n public buildGeometryFromParameters(parameters: any): void {\n this.graphicsLibrary.addGeometryFromParameters(parameters);\n }\n\n /**\n * Zoom all the cameras by a specific zoom factor.\n * The factor may either be greater (zoom in) or smaller (zoom out) than 1.\n * @param zoomFactor The factor to zoom by.\n * @param zoomTime The time it takes for a zoom animation to complete.\n */\n public zoomTo(zoomFactor: number, zoomTime: number) {\n this.graphicsLibrary.zoomTo(zoomFactor, zoomTime);\n }\n\n /**\n * Processes event data and geometry for Loading the scene\n * from Phoenix file format (.phnx).\n * @param sceneConfiguration Scene configuration containingevent data and detector geometry.\n */\n private loadSceneConfiguration(sceneConfiguration: {\n eventData: { [key: string]: any };\n geometries: any[];\n }) {\n for (const objectType of Object.keys(sceneConfiguration.eventData)) {\n this.ui.addEventDataTypeFolder(objectType);\n\n const collections = sceneConfiguration.eventData[objectType];\n for (const collection of collections) {\n this.ui.addCollection(objectType, collection);\n }\n }\n\n for (const geom of sceneConfiguration.geometries) {\n this.ui.addGeometry(geom, '#ffffff');\n }\n }\n\n /**\n * Get all the objects inside a collection.\n * @param collectionName Key of the collection that will be retrieved.\n * @returns Object containing all physics objects from the desired collection.\n */\n public getCollection(collectionName: string) {\n return this.configuration.eventDataLoader.getCollection(collectionName);\n }\n\n /**\n * Get the different collections for the current stored event.\n * @returns List of strings, each representing a collection of the event displayed.\n */\n public getCollections(): string[] {\n return this.configuration.eventDataLoader.getCollections();\n }\n\n /**\n * Add a callback to onDisplayedEventChange array to call\n * the callback on changes to the displayed event.\n * @param callback Callback to be added to the onDisplayedEventChange array.\n */\n public listenToDisplayedEventChange(callback: (event) => any) {\n this.onDisplayedEventChange.push(callback);\n }\n\n /**\n * Add a callback to onEventsChange array to call\n * the callback on changes to the events.\n * @param callback Callback to be added to the onEventsChange array.\n */\n public listenToLoadedEventsChange(callback: (events) => any) {\n this.onEventsChange.push(callback);\n }\n\n /**\n * Get metadata associated to the displayed event (experiment info, time, run, event...).\n * @returns Metadata of the displayed event.\n */\n public getEventMetadata(): any[] {\n return this.configuration.eventDataLoader.getEventMetadata();\n }\n\n /**\n * Enables calling specified event display methods in console.\n */\n private enableEventDisplayConsole() {\n // Defining an EventDisplay object in window to access methods through console\n window.EventDisplay = {\n loadGLTFGeometry: (sceneUrl: string, name: string) => {\n this.loadGLTFGeometry(sceneUrl, name);\n },\n loadOBJGeometry: (\n filename: string,\n name: string,\n colour: any,\n menuNodeName: string,\n doubleSided: boolean\n ) => {\n this.loadOBJGeometry(filename, name, colour, menuNodeName, doubleSided);\n },\n loadJSONGeometry: (\n json: string | { [key: string]: any },\n name: string,\n menuNodeName: string,\n scale?: number,\n doubleSided?: boolean,\n initiallyVisible: boolean = true\n ) => {\n this.loadJSONGeometry(\n json,\n name,\n menuNodeName,\n scale,\n doubleSided,\n initiallyVisible\n );\n },\n buildGeometryFromParameters: (parameters: { [key: string]: any }) =>\n this.buildGeometryFromParameters(parameters),\n scene: this.getThreeManager().getSceneManager().getScene(),\n };\n }\n\n /**\n * Sets the renderer to be used to render the event display on the overlayed canvas.\n * @param overlayCanvas An HTML canvas on which the overlay renderer is to be set.\n */\n public setOverlayRenderer(overlayCanvas: HTMLCanvasElement) {\n this.graphicsLibrary.setOverlayRenderer(overlayCanvas);\n }\n\n /**\n * Initializes the object which will show information of the selected geometry/event data.\n * @param selectedObject Object to display the data.\n */\n public allowSelection(selectedObject: { name: string; attributes: any[] }) {\n this.graphicsLibrary.setSelectedObjectDisplay(selectedObject);\n }\n\n /**\n * Toggles the ability of selecting geometries/event data by clicking on the screen.\n * @param enable Value to enable or disable the functionality.\n */\n public enableSelecting(enable: boolean) {\n this.graphicsLibrary.enableSelecting(enable);\n }\n\n /**\n * Fixes the camera position of the overlay view.\n * @param fixed Whether the overlay view is to be fixed or not.\n */\n public fixOverlayView(fixed: boolean) {\n this.graphicsLibrary.fixOverlayView(fixed);\n }\n\n /**\n * Get the uuid of the currently selected object.\n * @returns uuid of the currently selected object.\n */\n public getActiveObjectId(): ActiveVariable {\n return this.graphicsLibrary.getActiveObjectId();\n }\n\n /**\n * Move the camera to look at the object with the given uuid\n * and highlight it.\n * @param uuid uuid of the object.\n */\n public lookAtObject(uuid: string) {\n this.graphicsLibrary.lookAtObject(uuid);\n this.graphicsLibrary.highlightObject(uuid);\n }\n\n /**\n * Highlight the object with the given uuid by giving it an outline.\n * @param uuid uuid of the object.\n */\n public highlightObject(uuid: string) {\n this.graphicsLibrary.highlightObject(uuid);\n }\n\n /**\n * Enable keyboard controls for the event display.\n */\n public enableKeyboardControls() {\n this.ui.enableKeyboardControls();\n this.graphicsLibrary.enableKeyboardControls();\n }\n\n /**\n * Animate the camera through the event scene.\n * @param startPos Start position of the translation animation.\n * @param tweenDuration Duration of each tween in the translation animation.\n * @param onAnimationEnd Callback when the last animation ends.\n */\n public animateThroughEvent(\n startPos: number[],\n tweenDuration: number,\n onAnimationEnd?: () => void\n ) {\n this.graphicsLibrary.animateThroughEvent(\n startPos,\n tweenDuration,\n onAnimationEnd\n );\n }\n\n /**\n * Animate scene by animating camera through the scene and animating event collision.\n * @param animationPreset Preset for animation including positions to go through and\n * event collision animation options.\n * @param onEnd Function to call when the animation ends.\n */\n public animatePreset(animationPreset: AnimationPreset, onEnd?: () => void) {\n this.graphicsLibrary.animatePreset(animationPreset, onEnd);\n }\n\n /**\n * Animate the propagation and generation of event data with particle collison.\n * @param tweenDuration Duration of the animation tween.\n * @param onEnd Function to call when all animations have ended.\n */\n public animateEventWithCollision(tweenDuration: number, onEnd?: () => void) {\n this.graphicsLibrary.animateEventWithCollision(tweenDuration, onEnd);\n }\n\n /**\n * Animate the propagation and generation of event data\n * using clipping planes after particle collison.\n * @param tweenDuration Duration of the animation tween.\n * @param onEnd Function to call when all animations have ended.\n */\n public animateClippingWithCollision(\n tweenDuration: number,\n onEnd?: () => void\n ) {\n this.graphicsLibrary.animateClippingWithCollision(tweenDuration, onEnd);\n }\n\n /**\n * Add label to a 3D object.\n * @param label Label to add to the event object.\n * @param collection Collection the event object is a part of.\n * @param indexInCollection Event object's index in collection.\n * @param uuid UUID of the three.js object.\n */\n public addLabelToObject(\n label: string,\n collection: string,\n indexInCollection: number,\n uuid: string\n ) {\n const labelId = this.configuration.eventDataLoader.addLabelToEventObject(\n label,\n collection,\n indexInCollection\n );\n\n // Remove the label if the string is empty\n if (!label) {\n this.ui.removeLabel(labelId, true);\n return;\n }\n\n this.ui.addLabel(labelId);\n this.graphicsLibrary.addLabelToObject(label, uuid, labelId);\n }\n\n /**\n * Reset/remove all labels.\n */\n public resetLabels() {\n // labelsObject[EventDataType][Collection][Index]\n const labelsObject = this.configuration.eventDataLoader.getLabelsObject();\n for (const eventDataType in labelsObject) {\n for (const collection in labelsObject[eventDataType]) {\n for (const index in labelsObject[eventDataType][collection]) {\n const labelId = getLabelTitle(eventDataType, collection, index);\n this.ui.removeLabel(labelId, true);\n\n delete labelsObject[eventDataType][collection][index];\n }\n }\n }\n }\n}\n\n \n\n\n\n\n\n\n\n\n\n \n \n results matching \"\"\n \n \n \n No results matching \"\"\n \n\n"},"classes/XRManager.html":{"url":"classes/XRManager.html","title":"class - XRManager","body":"\n \n\n\n\n\n\n\n\n\n\n\n\n\n\n Classes\n XRManager\n\n\n\n \n Info\n \n \n Source\n \n\n\n\n \n \n File\n \n \n src/managers/three-manager/xr/xr-manager.ts\n \n\n\n \n Description\n \n \n XR manager for XR related operations.\n\n \n\n\n\n\n \n Index\n \n \n \n \n Properties\n \n \n \n \n \n \n Public\n cameraGroup\n \n \n Protected\n currentXRSession\n \n \n Protected\n onSessionEnded\n \n \n Protected\n renderer\n \n \n Protected\n sessionInit\n \n \n Protected\n xrActive\n \n \n Public\n xrCamera\n \n \n \n \n\n \n \n Methods\n \n \n \n \n \n \n Public\n endXRSession\n \n \n Public\n getCameraGroup\n \n \n Public\n getXRCamera\n \n \n Protected\n onXRSessionEnded\n \n \n Protected\n Async\n onXRSessionStarted\n \n \n Public\n setXRSession\n \n \n \n \n\n\n\n\n\n \n \n\n\n \n Constructor\n \n \n \n \nconstructor(sessionType: XRSessionType)\n \n \n \n \n Defined in src/managers/three-manager/xr/xr-manager.ts:38\n \n \n\n \n \n Create the XR manager.\n\n \n Parameters :\n \n \n \n Name\n Type\n Optional\n Description\n \n \n \n \n sessionType\n \n \n XRSessionType\n \n \n \n No\n \n \n \n Type of the session, either AR or VR.\n\n \n \n \n \n \n \n \n \n \n\n\n \n \n \n Properties\n \n \n \n \n \n \n \n Public\n cameraGroup\n \n \n \n \n \n \n Type : Group\n\n \n \n \n \n Defined in src/managers/three-manager/xr/xr-manager.ts:36\n \n \n\n \n \n Group containing the the camera for XR.\n\n \n \n\n \n \n \n \n \n \n \n \n Protected\n currentXRSession\n \n \n \n \n \n \n Type : any\n\n \n \n \n \n Default value : null\n \n \n \n \n Defined in src/managers/three-manager/xr/xr-manager.ts:32\n \n \n\n \n \n Currently active XR session.\n\n \n \n\n \n \n \n \n \n \n \n \n Protected\n onSessionEnded\n \n \n \n \n \n \n Type : function\n\n \n \n \n \n Defined in src/managers/three-manager/xr/xr-manager.ts:34\n \n \n\n \n \n Callback to call when the XR session ends.\n\n \n \n\n \n \n \n \n \n \n \n \n Protected\n renderer\n \n \n \n \n \n \n Type : WebGLRenderer\n\n \n \n \n \n Defined in src/managers/three-manager/xr/xr-manager.ts:30\n \n \n\n \n \n Renderer to set the XR session for.\n\n \n \n\n \n \n \n \n \n \n \n \n Protected\n sessionInit\n \n \n \n \n \n \n Type : function\n\n \n \n \n \n Defined in src/managers/three-manager/xr/xr-manager.ts:28\n \n \n\n \n \n Returns required and optional features when requesting an XR session.\n\n \n \n\n \n \n \n \n \n \n \n \n Protected\n xrActive\n \n \n \n \n \n \n Type : boolean\n\n \n \n \n \n Default value : false\n \n \n \n \n Defined in src/managers/three-manager/xr/xr-manager.ts:26\n \n \n\n \n \n Whether the XR is currently active or not.\n\n \n \n\n \n \n \n \n \n \n \n \n Public\n xrCamera\n \n \n \n \n \n \n Type : Camera\n\n \n \n \n \n Defined in src/managers/three-manager/xr/xr-manager.ts:38\n \n \n\n \n \n The camera used by XR.\n\n \n \n\n \n \n\n\n \n \n \n Methods\n \n \n \n \n \n \n \n Public\n endXRSession\n \n \n \n \n \n \n \n endXRSession()\n \n \n\n\n \n \n Defined in src/managers/three-manager/xr/xr-manager.ts:99\n \n \n\n\n \n \n End the current XR session.\n\n\n \n Returns : void\n\n \n \n \n \n \n \n \n \n \n \n \n Public\n getCameraGroup\n \n \n \n \n \n \n \n getCameraGroup(camera?: Camera)\n \n \n\n\n \n \n Defined in src/managers/three-manager/xr/xr-manager.ts:109\n \n \n\n\n \n \n Get the group containing the camera for XR.\nXR camera works by adding a Group with Camera to the scene.\n\n\n \n Parameters :\n \n \n \n \n Name\n Type\n Optional\n Description\n \n \n \n \n camera\n \n Camera\n \n\n \n Yes\n \n\n\n \n Camera which is to be cloned for XR use.\n\n \n \n \n \n \n \n \n \n Returns : Group\n\n \n \n The camera group used in XR mode.\n\n \n \n \n \n \n \n \n \n \n \n \n Public\n getXRCamera\n \n \n \n \n \n \n \n getXRCamera()\n \n \n\n\n \n \n Defined in src/managers/three-manager/xr/xr-manager.ts:135\n \n \n\n\n \n \n Get the camera used by XR.\n\n\n \n \n \n Returns : Camera\n\n \n \n The camera used by XR.\n\n \n \n \n \n \n \n \n \n \n \n \n Protected\n onXRSessionEnded\n \n \n \n \n \n \n \n onXRSessionEnded()\n \n \n\n\n \n \n Defined in src/managers/three-manager/xr/xr-manager.ts:88\n \n \n\n\n \n \n Callback when the XR session ends.\n\n\n \n Returns : void\n\n \n \n \n \n \n \n \n \n \n \n \n Protected\n Async\n onXRSessionStarted\n \n \n \n \n \n \n \n onXRSessionStarted(session: any)\n \n \n\n\n \n \n Defined in src/managers/three-manager/xr/xr-manager.ts:78\n \n \n\n\n \n \n Callback for when the XR session is started.\n\n\n \n Parameters :\n \n \n \n \n Name\n Type\n Optional\n Description\n \n \n \n \n session\n \n any\n \n\n \n No\n \n\n\n \n The XR session.\n\n \n \n \n \n \n \n \n \n Returns : any\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n Public\n setXRSession\n \n \n \n \n \n \n \n setXRSession(renderer: WebGLRenderer, onSessionStarted?: () => void, onSessionEnded?: () => void)\n \n \n\n\n \n \n Defined in src/managers/three-manager/xr/xr-manager.ts:53\n \n \n\n\n \n \n Set and configure the XR session.\n\n\n \n Parameters :\n \n \n \n \n Name\n Type\n Optional\n Description\n \n \n \n \n renderer\n \n WebGLRenderer\n \n\n \n No\n \n\n\n \n Renderer to set the XR session for.\n\n \n \n \n onSessionStarted\n \n function\n \n\n \n Yes\n \n\n\n \n Callback to call when the XR session starts.\n\n \n \n \n onSessionEnded\n \n function\n \n\n \n Yes\n \n\n\n \n Callback to call when the XR session ends.\n\n \n \n \n \n \n \n \n \n Returns : void\n\n \n \n \n \n \n \n \n \n\n\n\n\n\n\n \n\n\n \n import {\n ArrayCamera,\n Camera,\n Group,\n PerspectiveCamera,\n Vector3,\n WebGLRenderer,\n} from 'three';\n\n// NOTE: This was created on 28/06/2021\n// It might become outdated given how WebXR is still a work in progress\n\n// LAST UPDATED ON 29/06/2021\n\n/** Type of the XR session. */\nexport enum XRSessionType {\n VR = 'VR',\n AR = 'AR',\n}\n\n/**\n * XR manager for XR related operations.\n */\nexport class XRManager {\n /** Whether the XR is currently active or not. */\n protected xrActive: boolean = false;\n /** Returns required and optional features when requesting an XR session. */\n protected sessionInit: () => { [key: string]: any };\n /** Renderer to set the XR session for. */\n protected renderer: WebGLRenderer;\n /** Currently active XR session. */\n protected currentXRSession: any = null;\n /** Callback to call when the XR session ends. */\n protected onSessionEnded: () => void;\n /** Group containing the the camera for XR. */\n public cameraGroup: Group;\n /** The camera used by XR. */\n public xrCamera: Camera;\n\n /**\n * Create the XR manager.\n * @param sessionType Type of the session, either AR or VR.\n * @param sessionInit Other options for the session like optional features.\n */\n constructor(private sessionType: XRSessionType) {}\n\n /**\n * Set and configure the XR session.\n * @param renderer Renderer to set the XR session for.\n * @param onSessionStarted Callback to call when the XR session starts.\n * @param onSessionEnded Callback to call when the XR session ends.\n */\n public setXRSession(\n renderer: WebGLRenderer,\n onSessionStarted?: () => void,\n onSessionEnded?: () => void\n ) {\n this.renderer = renderer;\n this.onSessionEnded = onSessionEnded;\n const webXR = (navigator as any)?.xr;\n const xrType = this.sessionType === XRSessionType.VR ? 'vr' : 'ar';\n\n webXR\n ?.requestSession(`immersive-${xrType}`, this.sessionInit?.())\n .then((session: any) => {\n this.onXRSessionStarted.bind(this)(session);\n onSessionStarted?.();\n })\n .catch((error: any) => {\n console.error(`${xrType.toUpperCase()} Error:`, error);\n });\n }\n\n /**\n * Callback for when the XR session is started.\n * @param session The XR session.\n */\n protected async onXRSessionStarted(session: any) {\n this.xrActive = true;\n session.addEventListener('end', this.onXRSessionEnded.bind(this));\n await this.renderer.xr.setSession(session);\n this.currentXRSession = session;\n }\n\n /**\n * Callback when the XR session ends.\n */\n protected onXRSessionEnded() {\n this.xrActive = false;\n this.currentXRSession.removeEventListener('end', this.onXRSessionEnded);\n this.currentXRSession = null;\n this.cameraGroup = undefined;\n this.onSessionEnded?.();\n }\n\n /**\n * End the current XR session.\n */\n public endXRSession() {\n this.currentXRSession?.end();\n }\n\n /**\n * Get the group containing the camera for XR.\n * XR camera works by adding a Group with Camera to the scene.\n * @param camera Camera which is to be cloned for XR use.\n * @returns The camera group used in XR mode.\n */\n public getCameraGroup(camera?: Camera): Group {\n // Set up the camera position in the XR - Adding a group with camera does it\n if (!this.cameraGroup) {\n this.cameraGroup = new Group();\n }\n if (camera && this.xrActive) {\n this.xrCamera = this.renderer.xr\n .getCamera()\n .copy(new ArrayCamera([camera.clone() as PerspectiveCamera]));\n this.xrCamera.name = 'XR_CAMERA';\n\n const cameraPosition =\n this.sessionType === XRSessionType.VR\n ? this.xrCamera.position\n : new Vector3(0, 0, 0.1);\n this.cameraGroup.position.copy(cameraPosition);\n this.cameraGroup.add(this.xrCamera);\n }\n\n return this.cameraGroup;\n }\n\n /**\n * Get the camera used by XR.\n * @returns The camera used by XR.\n */\n public getXRCamera() {\n return this.xrCamera;\n }\n}\n\n \n\n\n\n\n\n\n\n\n\n\n \n \n results matching \"\"\n \n \n \n No results matching \"\"\n \n\n"},"changelog.html":{"url":"changelog.html","title":"getting-started - changelog","body":"\n \n\nChange Log\nAll notable changes to this project will be documented in this file.\nSee Conventional Commits for commit guidelines.\n2.14.1 (2023-05-14)\nBug Fixes\n\nconfigure git when trying to release (fc4ae96)\n\n2.14.0 (2023-03-22)\nNote: Version bump only for package phoenix-event-display\n2.13.0 (2023-03-02)\nReverts\n\nRevert \"Updated versions to try to reduce yarn warnings\" (477845f)\n\n2.12.0 (2023-01-13)\nBug Fixes\n\nevent-display: allowing geometry name to be undefined (9ffb5e2)\nevent-display: make side and length optional in calo cell params (448eb4f)\n\nFeatures\n\nevent-display: adding side and length variables for the calo cell/cluster (29beae7)\n\n2.11.4 (2022-10-27)\nBug Fixes\n\nevent-display: An argument for 'camera' was not provided (dcb4c88)\nlinting (f97e615)\n\n2.11.2 (2022-10-03)\nReverts\n\nRevert \"Simple angular 14 fix\" (f40beac)\nRevert \"Improve scripts after removing phoenix-event-display from phoenix-ng 'paths'\" (24ecd77)\n\n2.11.1 (2022-09-29)\nNote: Version bump only for package phoenix-event-display\n2.11.0 (2022-09-13)\nFeatures\n\napp: add e2e tests for phoenix app (69544e6)\nevent-display: add root geometry loading to loading manager (6c92e33)\nevent-display: load root geometry in io options correctly (ff77aaa)\nevent-display: remove loadJSRootScripts function from script loader (e152933)\nevent-display: update jsroot usage in JSRootEventLoader (4791f53)\nevent-display: use full path for object names to make them unique (3d1f91c)\nevent-display: use jsroot 7 to load root json geometry (5518a3e)\nevent-display: use url inside of objects for loading jsroot geometries (a54d302)\n\n2.10.0 (2022-07-21)\nBug Fixes\n\nevent-display: fixed handling of event properties (6ace2f6)\n\n2.9.0 (2022-06-17)\nBug Fixes\n\nevent-display: fix clipping angle not being applied from menu config (62bf178)\nevent-display: fix geometry not being loaded correctly in menu (7e0870b)\nevent-display: fix opacity not being set for LHCb geometry (65e657b)\n\nFeatures\n\napp: add component to periodically cycle through events (05ae1d6)\nupdate all packages (9276ef9)\napp: make sure all volumes are transparent in LHCb (7e36462)\n\n2.8.0 (2022-05-16)\nNote: Version bump only for package phoenix-event-display\n2.7.0 (2022-04-05)\nFeatures\n\napp: add object clipping for upper and lower geometry (1788560)\napp: add start clipping angle and opening angle for object clipping (9bc48e0)\napp: add start clipping angle and opening angle for object clipping (12b1754)\napp: add start clipping angle and opening angle for object clipping (4c5fac9)\napp: add start clipping angle and opening angle for object clipping (a8336ae)\napp: add start clipping angle and opening angle for object clipping (3255a65)\nevent-display: add 'start' clipping angle as well as opening angle (d2c02d5)\nevent-display: add docs to phoenix ui implementations (0c48b27)\nevent-display: add function to get event data type folder of each menu (c91aa0e)\nevent-display: add interface for Phoenix UI (aaed8f5)\nevent-display: implement phoenix-ui interface for phoenix menu (d4866ea)\nevent-display: implement PhoenixUI interface for dat.GUI menu (a4e8aaa)\nevent-display: update calls to ui-manager (473a39c)\nevent-display: update phoenix loader UI manager for PhoenixUI interface (f2376cc)\nevent-display: use generic menus in ui-manager (7a42b65)\n\n2.6.0 (2022-02-28)\nBug Fixes\n\napp: fix types in templates (545c956)\napp: use workaround for phoenix menu config types in templates (9d109e5)\n\nFeatures\n\nupdate packages (f2ed0a3)\n\n2.5.2 (2022-01-15)\nNote: Version bump only for package phoenix-event-display\n2.5.0 (2021-12-20)\nBug Fixes\n\nevent-display: fix jets disappearing on scaling to 0 (14cdc8f)\n\nFeatures\n\nupdate packages (26444f1)\nevent-display: externalize three.js dependency in webpack bundle (6a7e82f)\nevent-display: improve JiveXML loader (34a783c), closes #364\nevent-display: simplify phoenix menu node types (c60b3c1)\n\n2.4.0 (2021-10-28)\nBug Fixes\n\nevent-display: handle AR and VR permission errors (dfbc6a2)\nevent-display: update three.js imports (4e41f72)\nevent-display: use proper error handling for local storage (55cad7c)\n\nFeatures\n\nupdate all packages (c0af497)\nevent-display: remove labels on event load (75f829a)\n\n2.3.2 (2021-09-28)\nBug Fixes\n\nevent-display: remove XRSessionInit type from xr-manager (608f529)\n\n2.3.1 (2021-09-28)\nBug Fixes\n\nevent-display: add @types/three package as a dev dependency (10244f7)\n\nFeatures\n\nevent-display: function to get url options from url options manager (0ba5097)\n\n2.3.0 (2021-09-20)\nBug Fixes\n\nevent-display: do not apply Phoenix menu node toggle if undefined in config (bf98a24)\nevent-display: fix cuts not displaying for tracks in collections info (14d5f3a)\nevent-display: fix error in adding labels for electrons (98c7055)\nevent-display: fix opacity for tracks (094261c)\n\nFeatures\n\nUpgrade all packages (4698ea4)\n\n2.2.0 (2021-08-03)\nBug Fixes\n\nevent-display: fix AR not working in playground (7f35fdb)\nevent-display: fix bug in jive xml loader (39241a4)\nevent-display: fix collection color not working with load state (4603dbc)\nevent-display: fix load state throwing error (16ea0df)\nevent-display: fix tests (7e9c733)\nevent-display: increase max cut value for jets (9f4cf7c), closes #336\nevent-display: use coneR, if available, to determine jet width (d4b62c2)\nFix linting issues and update code (dc7d74a)\n\nFeatures\n\nevent-display: add option to scale vertices (08c8e00)\nevent-display: improve handling of scale option and add it for vertices (34d9b2c)\nupdate all packages including Angular (9a88331)\nupdate packages except Angular (26eff0e)\nupgrade all packages (36486b8)\napp: option to start AR with or without DOM overlay (9a6c243)\nevent-display: JiveXML, load coneR (set default if missing). (867d28a)\nevent-display: make background transparent in AR mode (46b8aee)\nevent-display: use dom overlay for AR (c897ab3)\nevent-display: use DOM overlay for AR (a5eaa34)\n\n2.1.0 (2021-06-28)\nBug Fixes\n\napp: clean packages not used in phoenix-ng (037af62)\nevent-display: bug when handling out-of-bounds theta (717304e)\nevent-display: cuts to match pT values (62ae417)\nevent-display: fix pt scale of compound objects for JiveXML (a821e42)\nevent-display: handle track pT as p (scale correctly) (7b839e3)\nevent-display: simplify handling of compound objs needing a track extrapolation (3daabc5)\nevent-display: since can scale jets, no longer limit length (bb41683)\n\nFeatures\n\nevent-display: add AR manager (3017ca9)\nevent-display: add docs to AR manager (5334996)\nevent-display: add scene to window EventDisplay object (07d8633)\nevent-display: combine repeating code for VR and AR into XR (50fc5f7)\nevent-display: create a common xr-manager (2700aaf)\nevent-display: extend ARManager from XRManager (ae76d4a)\nevent-display: extend VRManager from XRManager (15dd07c)\nevent-display: handle camera position differently for AR (5894cac)\nevent-display: refactor to make general getCompound from getMuon (dfe8e8d)\nevent-display: setup AR with event display (8e7396f)\nevent-display: use new extrapolationLimit of RKHelper and better debug output (14e4cbb)\nevent-display: use workaround to manage scale in AR (a5481e1)\nevent-display: working AR setup in event display (fdd492a)\n\n2.0.0 (2021-06-08)\nBug Fixes\n\nevent-display: add energy cut, refactor (000ab78)\nevent-display: attempt to improve robustness of tracks (689da29)\nevent-display: better debugging info and prettier (df9ce07)\nevent-display: fix #289 cluster rendering (1a01248)\nevent-display: fix collision animation (3e5d80d)\nevent-display: fix eta calculation for JiveXML (6dbd797)\nevent-display: fix phoenix menu node types (1af6ae2)\nevent-display: fix too many params for hits (8b994a7)\nevent-display: fixes and improvements for track import from JiveXML (c92d65f)\nevent-display: persist cuts when collection is toggled (1dd0431)\nevent-display: properly display the PlanarCalorimeters (f41920b)\nevent-display: random colors for collections and fix color by vertex (303187a)\nevent-display: use line animation for line hit (df425ee)\nfix misc errors and improve styles (124a272)\nevent-display: rk-helper should use CoordinateHelper (6085f50)\n\nFeatures\n\napp: add embed in sharable link constructor (8a0c0b1)\napp: add embed menu with a URL option for embed (56c6eff)\napp: add load progress based on number of loaded items (20ef288)\napp: improve background colors (2c97f5c)\napp: setup for preset scene animations (6e919e1)\nevent-display: add a sample animation preset (e07725a)\nevent-display: add color by vertex options (d2e0547)\nevent-display: add color options to tracks collections (90aea3c)\nevent-display: add docs for color options class (6cd5d53)\nevent-display: add embed option to URL (cb68283)\nevent-display: add function to animate scene (a411631)\nevent-display: add momentum color options UI (f1d2cef)\nevent-display: add types for Phoenix menu configs (68f3d45)\nevent-display: code improvement for momentum sliders (1a17e99)\nevent-display: color options for event data objects (9908cc9)\nevent-display: complete types for phoenix menu node (cc04d5a)\nevent-display: divide collection config options into child nodes (2e52c22)\nevent-display: highly optimize and generalize color by options (595d9e5)\nevent-display: implement color by momentum (9222e04)\nevent-display: implement embed menu (872f708)\nevent-display: improve preset animation (2371f75)\nupdate all packages (7d2eb64)\nevent-display: create coloring manager and color tracks by properties (c446567)\nevent-display: improve color manager code (3839578)\nevent-display: only show selected color by options (3041166)\nevent-display: type changes for phoenix menu (9a79692)\nevent-display: use child node for collection's color options (8559830)\nevent-display: use class for color options in UI (4acca1a)\nevent-dosplay: improve processing of PlanarCaloCells in Phoenix loader (5a8fe9f)\n\n1.9.0 (2021-05-16)\nBug Fixes\n\nevent-display: add energy cut, refactor (000ab78)\nevent-display: attempt to improve robustness of tracks (689da29)\nevent-display: better debugging info and prettier (df9ce07)\nevent-display: fix #289 cluster rendering (1a01248)\nevent-display: fix eta calculation for JiveXML (6dbd797)\nevent-display: fix phoenix menu node types (1af6ae2)\nevent-display: fixes and improvements for track import from JiveXML (c92d65f)\nevent-display: properly display the PlanarCalorimeters (f41920b)\nevent-display: rk-helper should use CoordinateHelper (6085f50)\n\nFeatures\n\napp: add embed in sharable link constructor (8a0c0b1)\napp: add embed menu with a URL option for embed (56c6eff)\napp: add load progress based on number of loaded items (20ef288)\nevent-display: add color by vertex options (d2e0547)\nevent-display: add color options to tracks collections (90aea3c)\nevent-display: add docs for color options class (6cd5d53)\nevent-display: add embed option to URL (cb68283)\nevent-display: add momentum color options UI (f1d2cef)\nevent-display: add types for Phoenix menu configs (68f3d45)\nevent-display: code improvement for momentum sliders (1a17e99)\nevent-display: color options for event data objects (9908cc9)\nevent-display: complete types for phoenix menu node (cc04d5a)\nevent-display: create coloring manager and color tracks by properties (c446567)\nevent-display: divide collection config options into child nodes (2e52c22)\nevent-display: highly optimize and generalize color by options (595d9e5)\nevent-display: implement color by momentum (9222e04)\nevent-display: implement embed menu (872f708)\nevent-display: improve color manager code (3839578)\nevent-display: only show selected color by options (3041166)\nevent-display: type changes for phoenix menu (9a79692)\nevent-display: use child node for collection's color options (8559830)\nevent-display: use class for color options in UI (4acca1a)\nevent-dosplay: improve processing of PlanarCaloCells in Phoenix loader (5a8fe9f)\n\n1.8.0 (2021-05-01)\nBug Fixes\n\nevent-display: better debugging info and prettier (df9ce07)\nevent-display: fix #289 cluster rendering (1a01248)\nevent-display: fixes and improvements for track import from JiveXML (c92d65f)\nevent-display: rk-helper should use CoordinateHelper (6085f50)\n\nFeatures\n\napp: add embed in sharable link constructor (8a0c0b1)\napp: add embed menu with a URL option for embed (56c6eff)\napp: add load progress based on number of loaded items (20ef288)\nevent-display: add color options to tracks collections (90aea3c)\nevent-display: add docs for color options class (6cd5d53)\nevent-display: add embed option to URL (cb68283)\nevent-display: add momentum color options UI (f1d2cef)\nevent-display: code improvement for momentum sliders (1a17e99)\nevent-display: color options for event data objects (9908cc9)\nevent-display: create coloring manager and color tracks by properties (c446567)\nevent-display: divide collection config options into child nodes (2e52c22)\nevent-display: highly optimize and generalize color by options (595d9e5)\nevent-display: implement color by momentum (9222e04)\nevent-display: implement embed menu (872f708)\nevent-display: use child node for collection's color options (8559830)\nevent-display: use class for color options in UI (4acca1a)\n\n1.7.0 (2021-04-21)\nBug Fixes\n\nevent-display: attempt to improve the output of the track extension by removing close hits (5bdc562)\nevent-display: fix drawing of hits (db3ca8b)\nevent-display: handle older json hit format again (edcd567)\n\n1.6.0 (2021-04-18)\nBug Fixes\n\napp: add sphericalToCartesian method (bbea6b0)\nevent-display: add back in geometrical limits for clusters (0b95e5b)\nevent-display: add eta and phi cuts for tracks (f8a0080)\nevent-display: add missing docs (c9781e5)\nevent-display: add missing documentation (236bdf4)\nevent-display: calocluster eta position was wrong. (66cbbc0)\nevent-display: cleanup JixeXML loader (6a834e8)\nevent-display: prettier fixes (7528ee0)\nevent-display: run prettier (again) (f279898)\nevent-display: use BufferGeometry for CMS objects with new three.js update (b8e88b8)\n\nFeatures\n\napp: bind clipping state with UI menu (40bbba0)\napp: complete dialog for share link and embed (50c2584)\napp: setup link share form (b10bb7a)\nevent-display: ability to remove geometry in Phoenix menu (7d90d72)\nevent-display: ability to scale CaloClusters (ff666e2)\nevent-display: add ability to scale clusters in just one direction (5a562ab), closes #257\nevent-display: add coordinate helper (57e438f)\nevent-display: add guidelines and simplify some coordinate transformations (56f94f0)\nevent-display: Add missing energy (6ef17d0)\nevent-display: add opacity and wireframe for CaloClusters (85d4a14)\nevent-display: add support for HitLines (455f536)\nevent-display: add types for dat.GUI (7632a18)\nevent-display: create an active observable variable (854e543)\nevent-display: improve grid lines (ca3cc2f)\nevent-display: improve handling of UI menus in UI manager (b7a324a)\nevent-display: introduce new URL options and improve handling them (f7cd6b4)\nevent-display: JiveXML : add support for more hit types (bbcdf0c)\nevent-display: keep state of event data folder on event switch (b52282f)\nevent-display: make Phoenix available in browser without a namespace (5389282)\nevent-display: move opacity and wireframing to collection level (6486982)\nevent-display: options for CaloClusters (68cd7ad)\nevent-display: Remove LineHits and use hits to extend tracks (30b5160)\nevent-display: restructure phoenix-event-display (2e16371)\nevent-display: separate dat.GUI UI menu (29093a2)\nevent-display: separate Phoenix menu UI from UI manager (5743adc)\nevent-display: split dat.GUI menu options (45a0123)\nevent-display: start splitting UI manager (56ff275)\nevent-display: use run and event number and file name for config json (03a1de4)\nupgrade all packages except three.js (8e2eff4)\nupgrade three.js except for CMSObjects (0b2dd8a)\n\n1.5.0 (2021-03-24)\nBug Fixes\n\nevent-display: catch VR request session error (d2874b8)\nevent-display: fix jsroot loading root file (8cbcaa5)\nevent-display: handle tracks with no positions (3b1991c)\nevent-display: improve renderer init (a8f8353)\nevent-display: remove optimize controls function (266af04)\nevent-display: remove redundant import (359d353)\nevent-display: use per physics object color and not collection color (ac0c4f1)\nremove JSROOT source files from repo (7bcd7ba)\n\nFeatures\n\napp: ability to import ig archive in CMS (9540af5)\napp: Add more realistic geometry for ATLAS (d207bad)\nevent-display: allow resize and improve tests and drop improving CPU usage (a474af2)\nevent-display: resize canvas with window resize (5ea04f1)\nevent-display: update to use CDN for JSROOT (2fa310f)\nevent-display: use latest version of JSROOT (fbd584e)\n\n1.4.0 (2021-02-16)\nBug Fixes\n\nevent-display: disable keyboard controls when typing (4f80bd6)\nevent-display: improve object selection from uuid and label input (3475836)\nevent-display: persist toggle state of phoenix menu node children (e96136b)\nevent-display: remove rollup config and fix globalThis usage (e6f69a0)\n\nFeatures\n\nevent-display: ability to add 3D label text (c9d4880)\nevent-display: add labels configuration to dat.GUI menu (d677089)\nevent-display: add labels to UI configuration (d90e3a6)\nevent-display: add size and color options for labels (3ce675f)\nevent-display: better handling of labels object (e10a68d)\nevent-display: complete setup with webpack for browser (3f6367f)\nevent-display: complete support to save and load labels (2219a3e)\nevent-display: create a url options manager for url options (fe0b2e6)\nevent-display: create generic function for getting object position (8d7b160)\nevent-display: delete label on empty value and change add label icon (3756330)\nevent-display: make label always look at camera (0837334)\nevent-display: set up add label to object functions (db261a6)\nevent-display: setup webpack for browser bundle (dc05ed9)\nevent-display: support to hide widgets through URL (cb2ec40)\nevent-display: use optional chaining for hide widgets url option (c991e54)\nevent-display: Use types for phoenix menu configuration (79e6d7c)\nevent-display: working labels object (60269f7)\nUpdate Angular and all packages to latest (f4c2e31)\n\n1.3.0 (2021-01-16)\nBug Fixes\n\nevent-display: assign the right name to geometry (b7e8da0)\nevent-display: code improvements (f94c0e4)\nevent-display: fix parsing of GLTF geometry (dc5d489)\nevent-display: improve code for hiding tube tracks (e9f1bc9)\nevent-display: minor script fix (5139c6e)\nevent-display: remove color from obj file userdata (8ba94e7)\nevent-display: revert jasmine spec files (dc140dd)\nevent-display: try fixing CMSLoader tests (789da8b)\n\nFeatures\n\nevent-display: display size on selection (6943f79)\nevent-display: hide tube tracks on zoom (7d606b2)\n\n1.2.0 (2020-12-06)\nBug Fixes\n\nevent-display: add Edward's controller set up (a6a1c19)\nevent-display: changes to animation loop for VR (37df19f)\nevent-display: finally fix VR completely (4764196)\nevent-display: fix applying multiple cuts at the same time (8f3e8e1)\nevent-display: fix applying state for range slider (c36a222)\nevent-display: fix loading and add default view to experiments (ab8feb4)\nevent-display: initialize cuts with correct values (e297c98)\nevent-display: make it possible to flat shade (dcf6cec)\nevent-display: optimal animation loop set up (da3ead5)\nevent-display: optimal render for effects manager (1975d70)\nevent-display: reset clipping on init (029d526)\nevent-display: stop animation loop on home (c39ecd3)\nevent-display: update configuration in tests (18f8db2)\n\nFeatures\n\napp: add toggle for screenshot mode (22a1ec8)\napp: make loader generic (ff10477)\napp: set up performance mode with selection (947f6bf)\napp: use event display loader in Angular component (25b2a9d)\nevent-display: ability to add geometry to a menu folder (30b0383)\nevent-display: ability to initialize event display without init (69d3f75)\nevent-display: add ability to add parametrised geometry (04dc545)\nevent-display: add and set up loading manager (5f0f942)\nevent-display: handle loading better (9474565)\nevent-display: make loading functions return Promise for async await (4262a1b)\nevent-display: performance mode and antialias support (d3920c4)\nevent-display: support for toggling antialiasing (48130b2)\nevent-display: use object to simplify configuration (4b10452)\n\n1.1.0 (2020-11-07)\nBug Fixes\n\napp: cut filter failed if value return was zero (0a26fea)\napp: cut should be pT, not mom (73b7c27)\napp: fix attribute pipe (0980379)\napp: fix tests (f87c587)\napp: pT should always be positive (3918159)\nevent-display: add optional chaining to CMS event info (fixes tests) (5283e9a)\nevent-display: fix geometry too big in overlay view (c7a35db)\nevent-display: fix URL event not working with hash routes (9eb21f5)\nevent-display: Formatted correctly (b46c49f)\nevent-display: use optional chaining in CMS loader (cfb1b6a)\nVR: Fix bugged scene in VR mode (9efd9ca)\n\nFeatures\n\napp: Option to load config from URL in ATLAS (1906976)\napp: phoenix-ui-components library (17909eb)\napp: yet another MAJOR refactoring (1261358)\nevent-display: add defaultView to configuration (612205c)\nevent-display: implicitly load event data from URL (9e3dc20)\nevent-display: state manager for managing event display state for save and load (7d1ca22)\n\n1.0.2 (2020-10-05)\n\nComplete deployment set up (399ac77)\n\n1.0.1 (2020-10-05)\nNote: Version bump only for package phoenix-event-display\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n \n results matching \"\"\n \n \n \n No results matching \"\"\n \n\n"},"coverage.html":{"url":"coverage.html","title":"coverage - coverage","body":"\n \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n Documentation coverage\n\n\n\n \n\n\n\n \n \n File\n Type\n Identifier\n Statements\n \n \n \n \n \n \n src/event-display.ts\n \n class\n EventDisplay\n \n 100 %\n (58/58)\n \n \n \n \n \n src/event-display.ts\n \n interface\n Window\n \n 100 %\n (2/2)\n \n \n \n \n \n src/helpers/active-variable.ts\n \n class\n ActiveVariable\n \n 100 %\n (6/6)\n \n \n \n \n \n src/helpers/browser-storage.ts\n \n variable\n getFromLocalStorage\n \n 100 %\n (1/1)\n \n \n \n \n \n src/helpers/browser-storage.ts\n \n variable\n setToLocalStorage\n \n 100 %\n (1/1)\n \n \n \n \n \n src/helpers/constants.ts\n \n variable\n EVENT_DATA_TYPE_COLORS\n \n 100 %\n (1/1)\n \n \n \n \n \n src/helpers/coordinate-helper.ts\n \n class\n CoordinateHelper\n \n 100 %\n (7/7)\n \n \n \n \n \n src/helpers/file.ts\n \n variable\n loadFile\n \n 100 %\n (1/1)\n \n \n \n \n \n src/helpers/file.ts\n \n variable\n saveFile\n \n 100 %\n (1/1)\n \n \n \n \n \n src/helpers/info-logger.ts\n \n class\n InfoLogger\n \n 100 %\n (5/5)\n \n \n \n \n \n src/helpers/labels.ts\n \n variable\n getLabelTitle\n \n 100 %\n (1/1)\n \n \n \n \n \n src/helpers/pretty-symbols.ts\n \n class\n PrettySymbols\n \n 100 %\n (4/4)\n \n \n \n \n \n src/helpers/rk-helper.ts\n \n class\n RKHelper\n \n 100 %\n (4/4)\n \n \n \n \n \n src/helpers/runge-kutta.ts\n \n class\n Field\n \n 100 %\n (2/2)\n \n \n \n \n \n src/helpers/runge-kutta.ts\n \n class\n RungeKutta\n \n 100 %\n (3/3)\n \n \n \n \n \n src/helpers/runge-kutta.ts\n \n class\n State\n \n 100 %\n (9/9)\n \n \n \n \n \n src/helpers/zip.ts\n \n variable\n readZipFile\n \n 100 %\n (1/1)\n \n \n \n \n \n src/lib/models/cut.model.ts\n \n class\n Cut\n \n 100 %\n (16/16)\n \n \n \n \n \n src/lib/models/preset-view.model.ts\n \n class\n PresetView\n \n 100 %\n (10/10)\n \n \n \n \n \n src/lib/types/configuration.ts\n \n interface\n Configuration\n \n 100 %\n (11/11)\n \n \n \n \n \n src/loaders/cms-loader.ts\n \n class\n CMSLoader\n \n 100 %\n (33/33)\n \n \n \n \n \n src/loaders/edm4hep-json-loader.ts\n \n class\n Edm4hepJsonLoader\n \n 100 %\n (40/40)\n \n \n \n \n \n src/loaders/event-data-loader.ts\n \n interface\n EventDataLoader\n \n 100 %\n (8/8)\n \n \n \n \n \n src/loaders/jivexml-loader.ts\n \n class\n JiveXMLLoader\n \n 100 %\n (43/43)\n \n \n \n \n \n src/loaders/jsroot-event-loader.ts\n \n class\n JSRootEventLoader\n \n 100 %\n (28/28)\n \n \n \n \n \n src/loaders/objects/cms-objects.ts\n \n class\n CMSObjects\n \n 100 %\n (2/2)\n \n \n \n \n \n src/loaders/objects/phoenix-objects.ts\n \n class\n PhoenixObjects\n \n 100 %\n (18/18)\n \n \n \n \n \n src/loaders/objects/tracks.ts\n \n class\n TracksMaterial\n \n 100 %\n (3/3)\n \n \n \n \n \n src/loaders/objects/tracks.ts\n \n class\n TracksMesh\n \n 100 %\n (14/14)\n \n \n \n \n \n src/loaders/phoenix-loader.ts\n \n class\n PhoenixLoader\n \n 100 %\n (21/21)\n \n \n \n \n \n src/loaders/script-loader.ts\n \n class\n ScriptLoader\n \n 100 %\n (2/2)\n \n \n \n \n \n src/loaders/trackml-loader.ts\n \n class\n TrackmlLoader\n \n 100 %\n (28/28)\n \n \n \n \n \n src/managers/loading-manager.ts\n \n class\n LoadingManager\n \n 100 %\n (15/15)\n \n \n \n \n \n src/managers/state-manager.ts\n \n class\n StateManager\n \n 100 %\n (21/21)\n \n \n \n \n \n src/managers/three-manager/animations-manager.ts\n \n class\n AnimationsManager\n \n 100 %\n (12/12)\n \n \n \n \n \n src/managers/three-manager/animations-manager.ts\n \n interface\n AnimationPreset\n \n 100 %\n (5/5)\n \n \n \n \n \n src/managers/three-manager/color-manager.ts\n \n class\n ColorManager\n \n 100 %\n (6/6)\n \n \n \n \n \n src/managers/three-manager/controls-manager.ts\n \n class\n ControlsManager\n \n 100 %\n (36/36)\n \n \n \n \n \n src/managers/three-manager/effects-manager.ts\n \n class\n EffectsManager\n \n 100 %\n (13/13)\n \n \n \n \n \n src/managers/three-manager/export-manager.ts\n \n class\n ExportManager\n \n 100 %\n (6/6)\n \n \n \n \n \n src/managers/three-manager/import-manager.ts\n \n class\n ImportManager\n \n 100 %\n (16/16)\n \n \n \n \n \n src/managers/three-manager/index.ts\n \n class\n ThreeManager\n \n 100 %\n (68/68)\n \n \n \n \n \n src/managers/three-manager/renderer-manager.ts\n \n class\n RendererManager\n \n 100 %\n (23/23)\n \n \n \n \n \n src/managers/three-manager/scene-manager.ts\n \n class\n SceneManager\n \n 100 %\n (42/42)\n \n \n \n \n \n src/managers/three-manager/selection-manager.ts\n \n class\n SelectionManager\n \n 100 %\n (23/23)\n \n \n \n \n \n src/managers/three-manager/xr/ar-manager.ts\n \n class\n ARManager\n \n 100 %\n (19/19)\n \n \n \n \n \n src/managers/three-manager/xr/vr-manager.ts\n \n class\n VRManager\n \n 100 %\n (24/24)\n \n \n \n \n \n src/managers/three-manager/xr/xr-manager.ts\n \n class\n XRManager\n \n 100 %\n (15/15)\n \n \n \n \n \n src/managers/ui-manager/color-options.ts\n \n class\n ColorOptions\n \n 100 %\n (19/19)\n \n \n \n \n \n src/managers/ui-manager/dat-gui-ui.ts\n \n class\n DatGUIMenuUI\n \n 100 %\n (22/22)\n \n \n \n \n \n src/managers/ui-manager/index.ts\n \n class\n UIManager\n \n 100 %\n (40/40)\n \n \n \n \n \n src/managers/ui-manager/index.ts\n \n variable\n defaultAnimationPresets\n \n 100 %\n (1/1)\n \n \n \n \n \n src/managers/ui-manager/phoenix-menu/phoenix-menu-node.ts\n \n class\n PhoenixMenuNode\n \n 100 %\n (24/24)\n \n \n \n \n \n src/managers/ui-manager/phoenix-menu/phoenix-menu-ui.ts\n \n class\n PhoenixMenuUI\n \n 100 %\n (20/20)\n \n \n \n \n \n src/managers/ui-manager/phoenix-ui.ts\n \n interface\n PhoenixUI\n \n 100 %\n (11/11)\n \n \n \n \n \n src/managers/url-options-manager.ts\n \n class\n URLOptionsManager\n \n 100 %\n (12/12)\n \n \n \n \n \n src/managers/url-options-manager.ts\n \n variable\n phoenixURLOptions\n \n 100 %\n (1/1)\n \n \n \n\n\n\n\n\n new Tablesort(document.getElementById('coverage-table'));\n\n\n \n \n results matching \"\"\n \n \n \n No results matching \"\"\n \n\n"},"dependencies.html":{"url":"dependencies.html","title":"package-dependencies - dependencies","body":"\n \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n Dependencies\n \n \n \n @babel/core : ^7.21.5\n \n @tweenjs/tween.js : ^20.0.3\n \n dat.gui : ^0.7.9\n \n html2canvas : ^1.4.1\n \n jsroot : ^7.3.1\n \n jszip : ^3.10.1\n \n stats-js : ^1.0.1\n \n three : ^0.152.2\n \n\n\n\n\n\n\n\n \n \n results matching \"\"\n \n \n \n No results matching \"\"\n \n\n"},"miscellaneous/enumerations.html":{"url":"miscellaneous/enumerations.html","title":"miscellaneous-enumerations - enumerations","body":"\n \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n Miscellaneous\n Enumerations\n\n\n\n Index\n \n \n \n \n \n \n ClippingSetting   (src/.../preset-view.model.ts)\n \n \n ColorByOptionKeys   (src/.../color-options.ts)\n \n \n XRSessionType   (src/.../xr-manager.ts)\n \n \n \n \n \n \n\n\n src/lib/models/preset-view.model.ts\n \n \n \n \n \n \n ClippingSetting\n \n \n \n \n Preset view settings for clipping\n\n \n \n \n \n  NotForced\n \n \n \n \n  On\n \n \n \n \n  Off\n \n \n \n \n\n src/managers/ui-manager/color-options.ts\n \n \n \n \n \n \n ColorByOptionKeys\n \n \n \n \n Keys for options available for coloring event data by.\n\n \n \n \n \n  CHARGE\n \n \n \n \n Value : charge\n \n \n \n \n  MOM\n \n \n \n \n Value : mom\n \n \n \n \n  VERTEX\n \n \n \n \n Value : vertex\n \n \n \n \n\n src/managers/three-manager/xr/xr-manager.ts\n \n \n \n \n \n \n XRSessionType\n \n \n \n \n Type of the XR session.\n\n \n \n \n \n  VR\n \n \n \n \n Value : VR\n \n \n \n \n  AR\n \n \n \n \n Value : AR\n \n \n \n \n\n\n\n\n \n \n results matching \"\"\n \n \n \n No results matching \"\"\n \n\n"},"index.html":{"url":"index.html","title":"getting-started - index","body":"\n \n\nPhoenix event display\n\n\n\nA highly modular and API driven experiment independent event display that uses three.js for processing and presenting detector geometry and event data.\nTo use in your application, install the package.\nnpm install phoenix-event-display\n# or\nyarn add phoenix-event-displayUsage\nAs a module\nTo create a simple event display.\n// Import required classes\nimport { EventDisplay, PhoenixLoader } from 'phoenix-event-display';\n\n// Create the event display\nconst eventDisplay = new EventDisplay();\n\n// Define the configuration\nconst configuration = {\n elementId: '',\n eventDataLoader: new PhoenixLoader(), // or some other event data loader\n // ... other configuration options\n};\n\n// Initialize the event display with the configuration\neventDisplay.init(configuration);\n\n// Load and parse event data in Phoenix format and display it\nfetch('path/to/event-data.json')\n .then((res) => res.json())\n .then((res) => {\n eventDisplay.parsePhoenixEvents(res);\n });\n\n// Load detector geometry\neventDisplay.loadOBJGeometry(\n 'path/to/geometry.obj',\n 'Detector OBJ',\n 0x8c8c8c /* color */\n);As a standalone bundle\nPhoenix can be bundled and used directly in the HTML as a script along with three.js. You can either use the CDN or build from source.\nTo build Phoenix as a bundle.\nyarn build:bundleThis will generate a file phoenix.min.js in the ./dist/bundle directory which can be included in your HTML code.\nWithout building, you can include the bundle directly from CDN.\n\n \n ...\n \n\n \n \n\n \n \n\n \n // Create the event display\n const eventDisplay = new EventDisplay();\n\n // Define the configuration\n const configuration = {\n elementId: 'eventDisplay',\n eventDataLoader: new PhoenixLoader(), // or some other event data loader\n // ... other configuration options\n };\n\n // Initialize the event display with the configuration\n eventDisplay.init(configuration);\n\n // ... other event display functions\n \n \nExamples\n\nUsage in Angular (as a service)\nUsage in React\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n \n results matching \"\"\n \n \n \n No results matching \"\"\n \n\n"},"modules.html":{"url":"modules.html","title":"modules - modules","body":"\n \n\n\n\n\n Modules\n\n\n \n \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n \n results matching \"\"\n \n \n \n No results matching \"\"\n \n\n"},"overview.html":{"url":"overview.html","title":"overview - overview","body":"\n \n\n\n\n Overview\n\n \n\n \n \n \n \n \n 43 Classes\n \n \n \n \n \n \n \n 5 Interfaces\n \n \n \n \n\n\n \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n \n results matching \"\"\n \n \n \n No results matching \"\"\n \n\n"},"properties.html":{"url":"properties.html","title":"package-properties - properties","body":"\n \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n Properties\n \n \n \n Version : 2.14.1\n \n Description : API for web-based experiment independent event display.\n \n Homepage : http://github.com/HSF/phoenix/tree/master/packages/phoenix-event-display#readme\n \n License : Apache-2.0\n \n Repository : git://github.com/HSF/phoenix.git\n \n Author : Phoenix contributors (https://github.com/HSF/phoenix/graphs/contributors)\n \n\n\n\n\n\n \n \n results matching \"\"\n \n \n \n No results matching \"\"\n \n\n"},"miscellaneous/typealiases.html":{"url":"miscellaneous/typealiases.html","title":"miscellaneous-typealiases - typealiases","body":"\n \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n Miscellaneous\n Type aliases\n\n\n\n Index\n \n \n \n \n \n \n CallbackFunction   (src/.../active-variable.ts)\n \n \n ColorByOption   (src/.../color-options.ts)\n \n \n ConfigButton   (src/.../config-types.ts)\n \n \n ConfigCheckbox   (src/.../config-types.ts)\n \n \n ConfigColor   (src/.../config-types.ts)\n \n \n ConfigLabel   (src/.../config-types.ts)\n \n \n ConfigRangeSlider   (src/.../config-types.ts)\n \n \n ConfigSelect   (src/.../config-types.ts)\n \n \n ConfigSlider   (src/.../config-types.ts)\n \n \n GeometryUIParameters   (src/.../geometry-ui-parameters.ts)\n \n \n PhoenixMenuConfigs   (src/.../config-types.ts)\n \n \n \n \n \n \n\n\n src/helpers/active-variable.ts\n \n \n \n \n \n \n CallbackFunction\n \n \n \n \n Callback function type.\n\n \n \n \n \n function\n\n \n \n \n \n src/managers/ui-manager/color-options.ts\n \n \n \n \n \n \n ColorByOption\n \n \n \n \n Type for a single color by option.\n\n \n \n \n \n literal type\n\n \n \n \n \n src/managers/ui-manager/phoenix-menu/config-types.ts\n \n \n \n \n \n \n ConfigButton\n \n \n \n \n Type for Phoenix menu node \"button\" config.\n\n \n \n \n \n \n\n \n \n \n \n \n \n \n \n \n ConfigCheckbox\n \n \n \n \n Type for Phoenix menu node \"checkbox\" config.\n\n \n \n \n \n \n\n \n \n \n \n \n \n \n \n \n ConfigColor\n \n \n \n \n Type for Phoenix menu node \"color\" config.\n\n \n \n \n \n \n\n \n \n \n \n \n \n \n \n \n ConfigLabel\n \n \n \n \n Type for Phoenix menu node \"label\" config.\n\n \n \n \n \n literal type\n\n \n \n \n \n \n \n \n \n \n ConfigRangeSlider\n \n \n \n \n Type for Phoenix menu node \"rangeSlider\" config.\n\n \n \n \n \n \n\n \n \n \n \n \n \n \n \n \n ConfigSelect\n \n \n \n \n Type for Phoenix menu node \"select\" config.\n\n \n \n \n \n \n\n \n \n \n \n \n \n \n \n \n ConfigSlider\n \n \n \n \n Type for Phoenix menu node \"slider\" config.\n\n \n \n \n \n \n\n \n \n \n \n \n \n \n \n \n PhoenixMenuConfigs\n \n \n \n \n Type for all Phoenix menu mode configuration options.\n\n \n \n \n \n literal type\n\n \n \n \n \n src/lib/types/geometry-ui-parameters.ts\n \n \n \n \n \n \n GeometryUIParameters\n \n \n \n \n Parameters used when adding geometry to UI menus.\n\n \n \n \n \n literal type\n\n \n \n \n \n\n\n\n \n \n results matching \"\"\n \n \n \n No results matching \"\"\n \n\n"},"miscellaneous/variables.html":{"url":"miscellaneous/variables.html","title":"miscellaneous-variables - variables","body":"\n \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n Miscellaneous\n Variables\n\n\n\n Index\n \n \n \n \n \n \n defaultAnimationPresets   (src/.../index.ts)\n \n \n EVENT_DATA_TYPE_COLORS   (src/.../constants.ts)\n \n \n getFromLocalStorage   (src/.../browser-storage.ts)\n \n \n getLabelTitle   (src/.../labels.ts)\n \n \n loadFile   (src/.../file.ts)\n \n \n phoenixURLOptions   (src/.../url-options-manager.ts)\n \n \n readZipFile   (src/.../zip.ts)\n \n \n saveFile   (src/.../file.ts)\n \n \n setToLocalStorage   (src/.../browser-storage.ts)\n \n \n \n \n \n \n\n\n src/managers/ui-manager/index.ts\n \n \n \n \n \n \n \n defaultAnimationPresets\n \n \n \n \n \n \n Type : AnimationPreset[]\n\n \n \n \n \n Default value : [\n {\n name: 'Cavern to ID',\n positions: [\n {\n position: [66388.95051168812, 5264.228603228927, -46910.7848593543],\n duration: 1000,\n },\n {\n position: [12834.18729094943, 677.7571205763458, 135.68755273443463],\n duration: 2000,\n },\n {\n position: [312.02688693297375, 25.884223757326, 270.10019006776236],\n duration: 3500,\n },\n {\n position: [263.3640855132258, 19.874838262525053, -318.16541790248885],\n duration: 3000,\n },\n {\n position: [5534.140362338047, 234.03507981484574, -2933.619479808285],\n duration: 2000,\n },\n {\n position: [2681.277288705242, 646.5795158318147, 5628.5248735111745],\n duration: 1000,\n },\n {\n position: [-6062.586283740076, 790.5876682946184, 1381.1675900848818],\n duration: 1000,\n },\n {\n position: [-1766.7693725879053, 1007.1048030984678, -5928.901341784575],\n duration: 1000,\n },\n {\n position: [12814.982506255355, 2516.987185037266, -22891.902734328327],\n duration: 1000,\n },\n ],\n animateEventAfterInterval: 5000,\n collisionDuration: 6000,\n },\n]\n \n \n\n \n \n If animation presets not passed in configuration, we will use this.\n\n \n \n\n \n \n\n src/helpers/constants.ts\n \n \n \n \n \n \n \n EVENT_DATA_TYPE_COLORS\n \n \n \n \n \n \n Type : object\n\n \n \n \n \n Default value : {\n Hits: new Color(0xff0000),\n Tracks: new Color(0xff0000),\n Jets: new Color(0x2194ce),\n CaloClusters: new Color(0xffd166),\n MuonChambers: new Color(0xff0000),\n Vertices: new Color(0xffd166),\n MissingEnergy: new Color(0xffffff),\n PlanarCaloCells: new Color(0xfff69a),\n}\n \n \n\n \n \n Colors of different event data types.\n\n \n \n\n \n \n\n src/helpers/browser-storage.ts\n \n \n \n \n \n \n \n getFromLocalStorage\n \n \n \n \n \n \n Default value : (item: string) => {\n try {\n return localStorage.getItem(item);\n } catch (exception) {\n console.warn('Exception in localStorage', exception);\n }\n}\n \n \n\n \n \n Get an item from local storage.\n\n \n \n\n \n \n \n \n \n \n \n \n setToLocalStorage\n \n \n \n \n \n \n Default value : (item: string, value: string) => {\n try {\n localStorage.setItem(item, value);\n } catch (exception) {\n console.warn('Exception in localStorage', exception);\n }\n}\n \n \n\n \n \n Set item to local storage.\n\n \n \n\n \n \n\n src/helpers/labels.ts\n \n \n \n \n \n \n \n getLabelTitle\n \n \n \n \n \n \n Default value : (\n eventDataType: string,\n collection: string,\n index: string | number\n) => `${eventDataType} > ${collection} > ${index}`\n \n \n\n \n \n Get title of the label.\n\n \n \n\n \n \n\n src/helpers/file.ts\n \n \n \n \n \n \n \n loadFile\n \n \n \n \n \n \n Default value : (\n onFileRead: (data: string) => void,\n contentType: string = 'application/json'\n) => {\n // Create a mock input file element and use that to read the file\n let inputFile = document.createElement('input');\n inputFile.type = 'file';\n inputFile.accept = contentType;\n inputFile.onchange = (e: any) => {\n const configFile = e.target?.files[0];\n const reader = new FileReader();\n reader.onload = (e) => {\n onFileRead?.(e.target.result.toString());\n\n inputFile.remove();\n inputFile = null;\n };\n reader.readAsText(configFile);\n };\n inputFile.click();\n}\n \n \n\n \n \n Load a file from user by mocking an input element.\n\n \n \n\n \n \n \n \n \n \n \n \n saveFile\n \n \n \n \n \n \n Default value : (\n data: string,\n fileName: string,\n contentType: string = 'application/json'\n) => {\n const blob = new Blob([data], { type: contentType });\n const tempAnchor = document.createElement('a');\n tempAnchor.style.display = 'none';\n tempAnchor.href = URL.createObjectURL(blob);\n tempAnchor.download = fileName;\n tempAnchor.click();\n tempAnchor.remove();\n}\n \n \n\n \n \n Save and download file with the given data.\n\n \n \n\n \n \n\n src/managers/url-options-manager.ts\n \n \n \n \n \n \n \n phoenixURLOptions\n \n \n \n \n \n \n Type : object\n\n \n \n \n \n Default value : {\n file: '',\n type: '',\n config: '',\n hideWidgets: false,\n embed: false,\n}\n \n \n\n \n \n Model for Phoenix URL options.\n\n \n \n\n \n \n\n src/helpers/zip.ts\n \n \n \n \n \n \n \n readZipFile\n \n \n \n \n \n \n Default value : async (file: File | ArrayBuffer) => {\n const archive = new JSZip();\n const filesWithData: { [fileName: string]: string } = {};\n\n await archive.loadAsync(file);\n for (const filePath in archive.files) {\n const fileData = await archive.file(filePath).async('string');\n filesWithData[filePath] = fileData;\n }\n\n return filesWithData;\n}\n \n \n\n \n \n Read a zip file and return its contents as an object.\n\n \n \n\n \n \n\n\n\n\n \n \n results matching \"\"\n \n \n \n No results matching \"\"\n \n\n"}} } diff --git a/docs/api-docs/properties.html b/docs/api-docs/properties.html index d15cbae03..e14e8bad9 100644 --- a/docs/api-docs/properties.html +++ b/docs/api-docs/properties.html @@ -51,7 +51,7 @@
      • - Version : 2.14.0
      • + Version : 2.14.1
      • Description : API for web-based experiment independent event display.
      • diff --git a/docs/common.81bdd95ae5536501.js b/docs/common.81bdd95ae5536501.js deleted file mode 100644 index 2cebb2068..000000000 --- a/docs/common.81bdd95ae5536501.js +++ /dev/null @@ -1,2 +0,0 @@ -"use strict";(self.webpackChunkphoenix_app=self.webpackChunkphoenix_app||[]).push([[592],{7822:(Y,S,u)=>{u.d(S,{Y:()=>I});var C=u(4788),O=u(9900),F=u(9542),R=u(1968);function I(){return z.apply(this,arguments)}function z(){return(z=(0,C.Z)(function*(){let a=this.$fp||this.getFramePainter();if(delete this.$fp,!((0,F.isObject)(a)&&a.grx&&a.gry&&a.grz))return this;let A=this.getObject(),c=1,r=0,h=A.fP;for(let o=0;oa.scale_xmax||h[o+1]a.scale_ymax||h[o+2]a.scale_zmax||++r;F.settings.OptimizeDraw>0&&r>5e4&&(c=Math.floor(r/5e4),c<=2&&(c=2));let i=Math.floor(r/c),l=new R.B_(i,a.webgl,a.size_x3d/100),s=new Int32Array(i),f=0,M=0;for(let o=0;oa.scale_xmax||h[o+1]a.scale_ymax||h[o+2]a.scale_zmax||c>1&&(f=(f+1)%c,0!==f)||(s[M++]=o,l.addPoint(a.grx(h[o]),a.gry(h[o+1]),a.grz(h[o+2])));return l.createPoints({color:this.getColor(A.fMarkerColor),style:A.fMarkerStyle}).then(o=>(o.tip_color=3===A.fMarkerColor?16711680:65280,o.tip_name=A.fName||"Poly3D",o.poly=A,o.painter=a,o.scale0=.7*l.scale,o.index=s,a.toplevel.add(o),o.tooltip=function(D){if(!Number.isInteger(D.index))return console.error(`intersect.index not provided, three.js version ${O.UZH}`),null;let T=Math.floor(D.index/this.nvertex);if(T<0||T>=this.index.length)return null;T=this.index[T];let t=this.painter,_=t.grx(this.poly.fP[T]),g=t.gry(this.poly.fP[T+1]),x=t.grz(this.poly.fP[T+2]);return{x1:_-this.scale0,x2:_+this.scale0,y1:g-this.scale0,y2:g+this.scale0,z1:x-this.scale0,z2:x+this.scale0,color:this.tip_color,lines:[this.tip_name,"pnt: "+T/3,"x: "+t.axisAsText("x",this.poly.fP[T]),"y: "+t.axisAsText("y",this.poly.fP[T+1]),"z: "+t.axisAsText("z",this.poly.fP[T+2])]}},a.render3D(100),this))})).apply(this,arguments)}},4971:(Y,S,u)=>{u.r(S),u.d(S,{drawBox:()=>M,drawEllipse:()=>s,drawJSImage:()=>T,drawMarker:()=>o,drawPie:()=>f,drawPolyLine:()=>l,drawPolyMarker:()=>D,drawTLine:()=>h,drawText:()=>e});var C=u(4788),O=u(9542),F=u(2253),R=u(3675),I=u(6458),z=u(6417),a=u(6367),A=u(49),c=u(9622);function e(){return r.apply(this,arguments)}function r(){return(r=(0,C.Z)(function*(){let t=this.getObject(),_=this.getPadPainter(),g=_.getPadWidth(),x=_.getPadHeight(),n=t.fX,m=t.fY,d=this.getColor(t.fTextColor),P=!1,v=1,E=t.fTextSize||.05,y=this.getFramePainter();t.TestBit((0,O.BIT)(14))?this.isndc=!0:y&&!y.mode3d?(g=y.getFrameWidth(),x=y.getFrameHeight(),P="upper_layer"):_.getRootPad(!0)||(this.isndc=!0,n=m=.5,t.fTextAlign=22,d||(d="black")),this.createG(P),this.draw_g.attr("transform",null),this.pos_x=this.axisToSvg("x",n,this.isndc),this.pos_y=this.axisToSvg("y",m,this.isndc);let p={align:t.fTextAlign,x:this.pos_x,y:this.pos_y,text:t.fTitle,color:d,latex:0};return t.fTextAngle&&(p.rotate=-t.fTextAngle),t._typename==O.clTLatex?(p.latex=1,v=.9):t._typename==O.clTMathText&&(p.latex=2,v=.8),this.startTextDrawing(t.fTextFont,Math.round(E>1?E:E*Math.min(g,x)*v)),this.drawText(p),this.finishTextDrawing().then(()=>((0,O.isBatchMode)()||(this.pos_dx=this.pos_dy=0,this.moveDrag||(this.moveDrag=function(b,$){this.pos_dx+=b,this.pos_dy+=$,this.draw_g.attr("transform",`translate(${this.pos_dx},${this.pos_dy})`)}),this.moveEnd||(this.moveEnd=function(b){if(b)return;let $=this.getObject();$.fX=this.svgToAxis("x",this.pos_x+this.pos_dx,this.isndc),$.fY=this.svgToAxis("y",this.pos_y+this.pos_dy,this.isndc),this.submitCanvExec(`SetX(${$.fX});;SetY(${$.fY});;`)}),(0,c.Z)(this)),this))})).apply(this,arguments)}function h(t,_){return i.apply(this,arguments)}function i(){return(i=(0,C.Z)(function*(t,_){let g=new I.tK(t,_);return g.redraw=function(){const x=(0,O.BIT)(14),n=this.getObject(),m=new a.rE(n),d=n.TestBit(x);return this.createG(),this.draw_g.append("svg:path").attr("d",`M${this.axisToSvg("x",n.fX1,d)},${this.axisToSvg("y",n.fY1,d)}L${this.axisToSvg("x",n.fX2,d)},${this.axisToSvg("y",n.fY2,d)}`).call(m.func),this},(0,A.ensureTCanvas)(g,!1).then(()=>g.redraw())})).apply(this,arguments)}function l(){this.createG();let t=this.getObject(),_=new a.rE(t),g=this.createAttFill(t),x=(0,O.BIT)(14),n=t.TestBit(x),m="",d=this.getAxisToSvgFunc(n);for(let P=0;P<=t.fLastPoint;++P)m+=`${P>0?"L":"M"}${d.x(t.fX[P])},${d.y(t.fY[P])}`;t._typename!=O.clTPolyLine&&g.setSolidColor("none"),g.empty()||(m+="Z"),this.draw_g.append("svg:path").attr("d",m).call(_.func).call(g.func)}function s(){let t=this.getObject();this.createAttLine({attr:t}),this.createAttFill({attr:t}),this.createG();let _=this.getAxisToSvgFunc(),g=_.x(t.fX1),x=_.y(t.fY1),n=_.x(t.fX1+t.fR1)-g,m=x-_.y(t.fY1+t.fR2),d="",P=0==t.fPhimin&&360==t.fPhimax;if("TCrown"==t._typename&&t.fR1<=0&&(n=_.x(t.fX1+t.fR2)-g),"TCrown"==t._typename&&t.fR1>0){let v=n,E=m,y=x-_.y(t.fY1+t.fR1),p=_.x(t.fX1+t.fR2)-g;if(P)d=`M${-v},0A${v},${y},0,1,0,${v},0A${v},${y},0,1,0,${-v},0M${-p},0A${p},${E},0,1,0,${p},0A${p},${E},0,1,0,${-p},0`;else{let b=t.fPhimax-t.fPhimin>=180?1:0,$=t.fPhimin*Math.PI/180,w=t.fPhimax*Math.PI/180,B=Math.round(v*Math.cos($)),L=Math.round(y*Math.sin($));d=`M${Math.round(v*Math.cos(w))},${Math.round(y*Math.sin(w))}A${v},${y},0,${b},0,${B},${L}L${Math.round(p*Math.cos($))},${Math.round(E*Math.sin($))}A${p},${E},0,${b},1,${Math.round(p*Math.cos(w))},${Math.round(E*Math.sin(w))}Z`}}else if(0==t.fTheta)d=P?`M${-n},0A${n},${m},0,1,0,${n},0A${n},${m},0,1,0,${-n},0Z`:`M0,0L${Math.round(n*Math.cos(t.fPhimin*Math.PI/180))},${Math.round(m*Math.sin(t.fPhimin*Math.PI/180))}A${n},${m},0,1,1,${Math.round(n*Math.cos(t.fPhimax*Math.PI/180))},${Math.round(m*Math.sin(t.fPhimax*Math.PI/180))}Z`;else{let v=Math.cos(t.fTheta*Math.PI/180),E=Math.sin(t.fTheta*Math.PI/180),y=t.fPhimin*Math.PI/180,b=200,$=(t.fPhimax*Math.PI/180-y)/(b-(P?0:1)),w=0,B=0;P||(d="M0,0");for(let L=0;L=0,x=this.createAttLine(t),n=this.createAttFill(t);this.createG();let m=this.axisToSvg("x",t.fX1),d=this.axisToSvg("x",t.fX2),P=this.axisToSvg("y",t.fY1),v=this.axisToSvg("y",t.fY2),E=Math.min(m,d),y=Math.min(P,v),p=Math.abs(d-m),b=Math.abs(P-v);if(!n.empty()&&!g&&(x.color="none"),this.draw_g.append("svg:path").attr("d",`M${E},${y}h${p}v${b}h${-p}z`).call(x.func).call(n.func),t.fBorderMode&&t.fBorderSize&&n.hasColor()){let $=t.fBorderSize,w=t.fBorderSize,B=`M${E},${y}h${p}l${-$},${w}h${2*$-p}v${b-2*w}l${-$},${w}z`,L=`M${E+p},${y+b}v${-b}l${-$},${w}v${b-2*w}h${2*$-p}l${-$},${w}z`;if(t.fBorderMode<0){let K=B;B=L,L=K}this.draw_g.append("svg:path").attr("d",B).call(n.func).style("fill",(0,F.B8)(n.color).brighter(.5).formatHex()),this.draw_g.append("svg:path").attr("d",L).call(n.func).style("fill",(0,F.B8)(n.color).darker(.5).formatHex())}}function o(){const t=this.getObject(),_=new z.M(t),g=(0,O.BIT)(14),x=t.TestBit(g);this.createG();let n=this.axisToSvg("x",t.fX,x),m=this.axisToSvg("y",t.fY,x),d=_.create(n,m);d&&this.draw_g.append("svg:path").attr("d",d).call(_.func)}function D(){this.createG();let t=this.getObject(),_=new z.M(t),g="",x=this.getAxisToSvgFunc();for(let n=0;n=0?m.style("width","100%").style("height","100%"):g&&g.indexOf("center")>=0&&(n.style("position","relative"),m.attr("style","margin: 0; position: absolute; top: 50%; left: 50%; transform: translate(-50%, -50%);")),x.setTopPainter(),x}},9428:(Y,S,u)=>{u.r(S),u.d(S,{TF1Painter:()=>A,proivdeEvalPar:()=>a});var C=u(4788),O=u(9542),F=u(3675),R=u(6458),I=u(9670),z=u(6976);function a(c){c._math=z;let e=c.fTitle,r=!1,h="[";"gaus"===e&&(e="gaus(0)"),c.fFormula&&(0,O.isStr)(c.fFormula.fFormula)&&(0==c.fFormula.fFormula.indexOf("[](double*x,double*p)")?(r=!0,h="p[",e=c.fFormula.fFormula.slice(21)):(e=c.fFormula.fFormula,h="[p"),c.fFormula.fClingParameters&&c.fFormula.fParams&&c.fFormula.fParams.forEach(i=>{let l=new RegExp(`(\\[${i.first}\\])`,"g"),s=c.fFormula.fClingParameters[i.second];e=e.replace(l,s<0?`(${s})`:s)})),"formulas"in c&&c.formulas.forEach(i=>{e=e.replaceAll(i.fName,i.fTitle)}),e=e.replace(/\b(abs)\b/g,"TMath::Abs").replace(/\b(TMath::Exp)/g,"Math.exp").replace(/\b(TMath::Abs)/g,"Math.abs"),e=e.replace(/xygaus\(/g,"this._math.gausxy(this, x, y, ").replace(/gaus\(/g,"this._math.gaus(this, x, ").replace(/gausn\(/g,"this._math.gausn(this, x, ").replace(/expo\(/g,"this._math.expo(this, x, ").replace(/landau\(/g,"this._math.landau(this, x, ").replace(/landaun\(/g,"this._math.landaun(this, x, ").replace(/TMath::/g,"this._math.").replace(/ROOT::Math::/g,"this._math.");for(let i=0;is&&(s=i),l0&&f>0&&(M=!0,s=Math.log(s),f=Math.log(f));let o=Math.max(r.fNpx,101),D=(f-s)/(o-1),T=[],t=!1,_=r.fSave.length>3;if(!_||!e&&!O.settings.PreferSavedPoints){r.evalPar||a(r);for(let x=0;xl))continue;let P=r.fSave[m];Number.isFinite(P)&&T.push({x:d,y:P})}}return T}createDummyHisto(){let e=0,r=1,h=0,i=1,l=this.createBins(!0);l?.length&&(e=r=l[0].x,h=i=l[0].y,l.forEach(M=>{e=Math.min(M.x,e),r=Math.max(M.x,r),h=Math.min(M.y,h),i=Math.max(M.y,i)}),i>0&&(i*=1+O.gStyle.fHistTopMargin),h<0&&(h*=1+O.gStyle.fHistTopMargin));let s=(0,O.create)("TH1I"),f=this.getObject();return s.fName=f.fName+"_hist",s.fTitle=f.fTitle,s.fXaxis.fXmin=e,s.fXaxis.fXmax=r,s.fYaxis.fXmin=h,s.fYaxis.fXmax=i,s.fMinimum=f.fMinimum,s.fMaximum=f.fMaximum,s}updateObject(e){if(!this.matchObjectType(e))return!1;let r=this.getObject();return Object.assign(r,e),delete r.evalPar,!0}processTooltipEvent(e){let r=!1;if((!e||!this.bins||e.disabled||!this.bins.length||e.xthis.bins[this.bins.length-1].grx)&&(r=!0),r)return this.draw_g&&this.draw_g.select(".tooltip_bin").remove(),null;let l,h=1e5,i=-1;for(let t=0;t2){let s=h;i.hmin&&i.hmin>=0&&(s=Math.round(l.gry(0)),(s>h||s<0)&&(s=h));let f=(0,F.Cq)("bezier",this.bins,s,2);this.lineatt.empty()||this.draw_g.append("svg:path").attr("class","line").attr("d",f.path).style("fill","none").call(this.lineatt.func),this.fillatt.empty()||this.draw_g.append("svg:path").attr("class","area").attr("d",f.path+f.close).call(this.fillatt.func)}}canZoomInside(e,r,h){if("x"!==e)return!1;let i=this.getObject();if(i.fSave.length>0){let l=i.fNpx;return Math.abs(i.fSave[l+1]-i.fSave[l+2])/l(i.addToPadPrimitives(),i.redraw(),i))})()}}},3761:(Y,S,u)=>{u.d(S,{o:()=>I});var C=u(4788),O=u(8241),F=u(629),R=u(1968);class I extends O.TGraphPainter{drawBins3D(a,A){if(!(a.mode3d&&a.grx&&a.gry&&a.grz&&a.toplevel))return console.log("Frame painter missing base 3d elements");if(a.zoom_xmin!=a.zoom_xmax&&(this.options.pos3da.zoom_xmax))return;let c=this.optimizeBins(1e3),e=0,r=c.length-1;if(a.zoom_ymin!=a.zoom_ymax){for(;ea.zoom_ymax;)r--}if(e==r)return;let h=[],i=a.grx(this.options.pos3d),l=c[e];for(let f=e+1;f<=r;++f){let M=c[f];h.push(i,a.gry(l.x),a.grz(l.y),i,a.gry(M.x),a.grz(M.y)),l=M}let s=(0,R.Qy)(h,(0,R.rq)(this,A));a.toplevel.add(s),a.render3D(100)}drawAxisHisto(){var a=this;return(0,C.Z)(function*(){return F.TH1Painter.draw(a.getDom(),a.createHistogram(),a.options.Axis)})()}static draw(a,A,c){return(0,C.Z)(function*(){return I._drawGraph(new I(a,A),c)})()}}}}]); -//# sourceMappingURL=common.81bdd95ae5536501.js.map \ No newline at end of file diff --git a/docs/common.81bdd95ae5536501.js.map b/docs/common.81bdd95ae5536501.js.map deleted file mode 100644 index 05470d8a1..000000000 --- a/docs/common.81bdd95ae5536501.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"common.81bdd95ae5536501.js","mappings":"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","names":["drawPolyMarker3D","fp","this","$fp","getFramePainter","isObject","grx","gry","grz","poly","getObject","step","numselect","fP","i","length","scale_xmin","scale_xmax","scale_ymin","scale_ymax","scale_zmin","scale_zmax","settings","Math","floor","size","pnts","PointsCreator","webgl","size_x3d","index","Int32Array","select","icnt","addPoint","createPoints","color","getColor","fMarkerColor","style","fMarkerStyle","then","mesh","tip_color","tip_name","fName","painter","scale0","scale","toplevel","add","tooltip","intersect","Number","isInteger","console","error","REVISION","indx","nvertex","p","x1","x2","y1","y2","z1","z2","lines","axisAsText","render3D","apply","drawText","text","pp","getPadPainter","w","getPadWidth","h","getPadHeight","pos_x","fX","pos_y","fY","tcolor","fTextColor","use_frame","fact","textsize","fTextSize","main","TestBit","BIT","isndc","mode3d","getFrameWidth","getFrameHeight","getRootPad","fTextAlign","createG","draw_g","attr","axisToSvg","arg","align","x","y","fTitle","latex","fTextAngle","rotate","_typename","clTLatex","clTMathText","startTextDrawing","fTextFont","round","min","finishTextDrawing","isBatchMode","pos_dx","pos_dy","moveDrag","dx","dy","moveEnd","not_changed","svgToAxis","submitCanvExec","addMoveHandler","drawTLine","_x","dom","obj","ObjectPainter","redraw","kLineNDC","line","lineatt","TAttLineHandler","append","fX1","fY1","fX2","fY2","call","func","ensureTCanvas","drawPolyLine","polyline","fillatt","createAttFill","kPolyLineNDC","cmd","getAxisToSvgFunc","n","fLastPoint","clTPolyLine","setSolidColor","empty","drawEllipse","ellipse","createAttLine","funcs","rx","fR1","ry","fR2","path","closed_ellipse","fPhimin","fPhimax","rx1","ry2","ry1","rx2","large_arc","a1","PI","a2","dx1","cos","dy1","sin","fTheta","ct","st","phi1","np","dphi","lastx","lasty","angle","px","py","drawPie","pie","xc","yc","fRadius","nb","fPieSlices","total","af","fAngularOffset","fValue","slice","drawBox","box","draw_line","getDrawOpt","toUpperCase","indexOf","xx","yy","ww","abs","hh","fBorderMode","fBorderSize","hasColor","pww","phh","side1","side2","s","d3_rgb","brighter","formatHex","darker","drawMarker","marker","att","TAttMarkerHandler","kMarkerNDC","create","drawPolyMarker","fN","drawJSImage","opt","BasePainter","selectDom","img","setTopPainter","proivdeEvalPar","_math","jsroot_math","_func","isformula","pprefix","fFormula","isStr","fClingParameters","fParams","forEach","pair","regex","RegExp","first","parvalue","second","replace","formulas","entry","replaceAll","fNpar","GetParValue","clTF2","evalPar","Function","bind","TF1Painter","createBins","ignore_zoom","tf1","gxmin","gxmax","gr","getGrFuncs","second_x","second_y","xmin","fXmin","xmax","fXmax","logx","log","max","fNpx","res","iserror","has_saved_points","fSave","exp","isFinite","push","use_histo","$histo","bin","fXaxis","FindBin","GetBinCenter","createDummyHisto","ymin","ymax","bins","gStyle","histo","fYaxis","fMinimum","fMaximum","updateObject","matchObjectType","Object","assign","processTooltipEvent","pnt","cleanup","disabled","remove","best","dist","gbin","radius","width","name","title","color1","color2","getFillColor","exact","changed","property","menu","menu_dist","sqrt","getObjectHint","pmain","getMainPainter","used","kind","h0","hmin","buildSvgPath","close","canZoomInside","axis","nb_points","static","d","DrawOptions","has_main","aopt","check","pr","Promise","resolve","TH1Painter","addToPadPrimitives","TGraphPainter","TGraphPainter2D","drawBins3D","graph","zoom_xmin","zoom_xmax","options","pos3d","drawbins","optimizeBins","last","zoom_ymin","zoom_ymax","p0","p1","createLineSegments","create3DLineMaterial","drawAxisHisto","_this","getDom","createHistogram","Axis","_drawGraph"],"sourceRoot":"webpack:///","sources":["../node_modules/jsroot/modules/draw/TPolyMarker3D.mjs","../node_modules/jsroot/modules/draw/more.mjs","../node_modules/jsroot/modules/hist/TF1Painter.mjs","../node_modules/jsroot/modules/hist/TGraphPainter.mjs"],"sourcesContent":["import { REVISION } from '../three.mjs';\nimport { settings, isObject } from '../core.mjs';\nimport { PointsCreator } from '../base/base3d.mjs';\n\n/** @summary direct draw function for TPolyMarker3D object\n * @private */\nasync function drawPolyMarker3D() {\n\n let fp = this.$fp || this.getFramePainter();\n\n delete this.$fp;\n\n if (!isObject(fp) || !fp.grx || !fp.gry || !fp.grz)\n return this;\n\n let poly = this.getObject(), step = 1, sizelimit = 50000, numselect = 0, fP = poly.fP;\n\n for (let i = 0; i < fP.length; i += 3) {\n if ((fP[i] < fp.scale_xmin) || (fP[i] > fp.scale_xmax) ||\n (fP[i+1] < fp.scale_ymin) || (fP[i+1] > fp.scale_ymax) ||\n (fP[i+2] < fp.scale_zmin) || (fP[i+2] > fp.scale_zmax)) continue;\n ++numselect;\n }\n\n if ((settings.OptimizeDraw > 0) && (numselect > sizelimit)) {\n step = Math.floor(numselect/sizelimit);\n if (step <= 2) step = 2;\n }\n\n let size = Math.floor(numselect/step),\n pnts = new PointsCreator(size, fp.webgl, fp.size_x3d/100),\n index = new Int32Array(size),\n select = 0, icnt = 0;\n\n for (let i = 0; i < fP.length; i += 3) {\n\n if ((fP[i] < fp.scale_xmin) || (fP[i] > fp.scale_xmax) ||\n (fP[i+1] < fp.scale_ymin) || (fP[i+1] > fp.scale_ymax) ||\n (fP[i+2] < fp.scale_zmin) || (fP[i+2] > fp.scale_zmax)) continue;\n\n if (step > 1) {\n select = (select+1) % step;\n if (select !== 0) continue;\n }\n\n index[icnt++] = i;\n\n pnts.addPoint(fp.grx(fP[i]), fp.gry(fP[i+1]), fp.grz(fP[i+2]));\n }\n\n return pnts.createPoints({ color: this.getColor(poly.fMarkerColor), style: poly.fMarkerStyle }).then(mesh => {\n\n mesh.tip_color = (poly.fMarkerColor === 3) ? 0xFF0000 : 0x00FF00;\n mesh.tip_name = poly.fName || 'Poly3D';\n mesh.poly = poly;\n mesh.painter = fp;\n mesh.scale0 = 0.7*pnts.scale;\n mesh.index = index;\n\n fp.toplevel.add(mesh);\n\n mesh.tooltip = function(intersect) {\n if (!Number.isInteger(intersect.index)) {\n console.error(`intersect.index not provided, three.js version ${REVISION}`);\n return null;\n }\n let indx = Math.floor(intersect.index / this.nvertex);\n if ((indx < 0) || (indx >= this.index.length)) return null;\n\n indx = this.index[indx];\n\n let p = this.painter,\n grx = p.grx(this.poly.fP[indx]),\n gry = p.gry(this.poly.fP[indx+1]),\n grz = p.grz(this.poly.fP[indx+2]);\n\n return {\n x1: grx - this.scale0,\n x2: grx + this.scale0,\n y1: gry - this.scale0,\n y2: gry + this.scale0,\n z1: grz - this.scale0,\n z2: grz + this.scale0,\n color: this.tip_color,\n lines: [ this.tip_name,\n 'pnt: ' + indx/3,\n 'x: ' + p.axisAsText('x', this.poly.fP[indx]),\n 'y: ' + p.axisAsText('y', this.poly.fP[indx+1]),\n 'z: ' + p.axisAsText('z', this.poly.fP[indx+2])\n ]\n };\n };\n\n fp.render3D(100); // set timeout to be able draw other points\n\n return this;\n });\n}\n\nexport { drawPolyMarker3D };\n","import { BIT, isBatchMode, clTLatex, clTMathText, clTPolyLine } from '../core.mjs';\nimport { rgb as d3_rgb } from '../d3.mjs';\nimport { BasePainter } from '../base/BasePainter.mjs';\nimport { ObjectPainter } from '../base/ObjectPainter.mjs';\nimport { TAttMarkerHandler } from '../base/TAttMarkerHandler.mjs';\nimport { TAttLineHandler } from '../base/TAttLineHandler.mjs';\nimport { ensureTCanvas } from '../gpad/TCanvasPainter.mjs';\nimport { addMoveHandler } from '../gui/utils.mjs';\n\n\n/** @summary Draw TText\n * @private */\nasync function drawText() {\n let text = this.getObject(),\n pp = this.getPadPainter(),\n w = pp.getPadWidth(),\n h = pp.getPadHeight(),\n pos_x = text.fX, pos_y = text.fY,\n tcolor = this.getColor(text.fTextColor),\n use_frame = false,\n fact = 1., textsize = text.fTextSize || 0.05,\n main = this.getFramePainter();\n\n if (text.TestBit(BIT(14))) {\n // NDC coordinates\n this.isndc = true;\n } else if (main && !main.mode3d) {\n // frame coordiantes\n w = main.getFrameWidth();\n h = main.getFrameHeight();\n use_frame = 'upper_layer';\n } else if (pp.getRootPad(true)) {\n // force pad coordiantes\n } else {\n // place in the middle\n this.isndc = true;\n pos_x = pos_y = 0.5;\n text.fTextAlign = 22;\n if (!tcolor) tcolor = 'black';\n }\n\n this.createG(use_frame);\n\n this.draw_g.attr('transform', null); // remove transofrm from interactive changes\n\n this.pos_x = this.axisToSvg('x', pos_x, this.isndc);\n this.pos_y = this.axisToSvg('y', pos_y, this.isndc);\n\n let arg = { align: text.fTextAlign, x: this.pos_x, y: this.pos_y, text: text.fTitle, color: tcolor, latex: 0 };\n\n if (text.fTextAngle) arg.rotate = -text.fTextAngle;\n\n if (text._typename == clTLatex) {\n arg.latex = 1;\n fact = 0.9;\n } else if (text._typename == clTMathText) {\n arg.latex = 2;\n fact = 0.8;\n }\n\n this.startTextDrawing(text.fTextFont, Math.round((textsize > 1) ? textsize : textsize*Math.min(w,h)*fact));\n\n this.drawText(arg);\n\n return this.finishTextDrawing().then(() => {\n if (isBatchMode()) return this;\n\n this.pos_dx = this.pos_dy = 0;\n\n if (!this.moveDrag)\n this.moveDrag = function(dx,dy) {\n this.pos_dx += dx;\n this.pos_dy += dy;\n this.draw_g.attr('transform', `translate(${this.pos_dx},${this.pos_dy})`);\n }\n\n if (!this.moveEnd)\n this.moveEnd = function(not_changed) {\n if (not_changed) return;\n let text = this.getObject();\n text.fX = this.svgToAxis('x', this.pos_x + this.pos_dx, this.isndc),\n text.fY = this.svgToAxis('y', this.pos_y + this.pos_dy, this.isndc);\n this.submitCanvExec(`SetX(${text.fX});;SetY(${text.fY});;`);\n }\n\n addMoveHandler(this);\n\n return this;\n });\n}\n\n/** @summary Draw TLine\n * @private */\nasync function drawTLine(dom, obj) {\n let painter = new ObjectPainter(dom, obj);\n\n painter.redraw = function() {\n const kLineNDC = BIT(14),\n line = this.getObject(),\n lineatt = new TAttLineHandler(line),\n isndc = line.TestBit(kLineNDC);\n\n this.createG();\n\n this.draw_g\n .append('svg:path')\n .attr('d', `M${this.axisToSvg('x',line.fX1,isndc)},${this.axisToSvg('y',line.fY1,isndc)}L${this.axisToSvg('x',line.fX2,isndc)},${this.axisToSvg('y',line.fY2,isndc)}`)\n .call(lineatt.func);\n\n return this;\n }\n\n return ensureTCanvas(painter, false).then(() => painter.redraw());\n}\n\n/** @summary Draw TPolyLine\n * @private */\nfunction drawPolyLine() {\n\n this.createG();\n\n let polyline = this.getObject(),\n lineatt = new TAttLineHandler(polyline),\n fillatt = this.createAttFill(polyline),\n kPolyLineNDC = BIT(14),\n isndc = polyline.TestBit(kPolyLineNDC),\n cmd = '', func = this.getAxisToSvgFunc(isndc);\n\n for (let n = 0; n <= polyline.fLastPoint; ++n)\n cmd += `${n>0?'L':'M'}${func.x(polyline.fX[n])},${func.y(polyline.fY[n])}`;\n\n if (polyline._typename != clTPolyLine)\n fillatt.setSolidColor('none');\n\n if (!fillatt.empty())\n cmd += 'Z';\n\n this.draw_g\n .append('svg:path')\n .attr('d', cmd)\n .call(lineatt.func)\n .call(fillatt.func);\n}\n\n/** @summary Draw TEllipse\n * @private */\nfunction drawEllipse() {\n\n let ellipse = this.getObject();\n\n this.createAttLine({ attr: ellipse });\n this.createAttFill({ attr: ellipse });\n\n this.createG();\n\n let funcs = this.getAxisToSvgFunc(),\n x = funcs.x(ellipse.fX1),\n y = funcs.y(ellipse.fY1),\n rx = funcs.x(ellipse.fX1 + ellipse.fR1) - x,\n ry = y - funcs.y(ellipse.fY1 + ellipse.fR2),\n path = '', closed_ellipse = (ellipse.fPhimin == 0) && (ellipse.fPhimax == 360);\n\n // handle same as ellipse with equal radius\n if ((ellipse._typename == 'TCrown') && (ellipse.fR1 <= 0))\n rx = funcs.x(ellipse.fX1 + ellipse.fR2) - x;\n\n if ((ellipse._typename == 'TCrown') && (ellipse.fR1 > 0)) {\n let rx1 = rx, ry2 = ry,\n ry1 = y - funcs.y(ellipse.fY1 + ellipse.fR1),\n rx2 = funcs.x(ellipse.fX1 + ellipse.fR2) - x;\n\n if (closed_ellipse) {\n path = `M${-rx1},0A${rx1},${ry1},0,1,0,${rx1},0A${rx1},${ry1},0,1,0,${-rx1},0` +\n `M${-rx2},0A${rx2},${ry2},0,1,0,${rx2},0A${rx2},${ry2},0,1,0,${-rx2},0`;\n } else {\n let large_arc = (ellipse.fPhimax-ellipse.fPhimin>=180) ? 1 : 0,\n a1 = ellipse.fPhimin*Math.PI/180, a2 = ellipse.fPhimax*Math.PI/180,\n dx1 = Math.round(rx1*Math.cos(a1)), dy1 = Math.round(ry1*Math.sin(a1)),\n dx2 = Math.round(rx1*Math.cos(a2)), dy2 = Math.round(ry1*Math.sin(a2)),\n dx3 = Math.round(rx2*Math.cos(a1)), dy3 = Math.round(ry2*Math.sin(a1)),\n dx4 = Math.round(rx2*Math.cos(a2)), dy4 = Math.round(ry2*Math.sin(a2));\n\n path = `M${dx2},${dy2}A${rx1},${ry1},0,${large_arc},0,${dx1},${dy1}` +\n `L${dx3},${dy3}A${rx2},${ry2},0,${large_arc},1,${dx4},${dy4}Z`;\n }\n } else if (ellipse.fTheta == 0) {\n if (closed_ellipse) {\n path = `M${-rx},0A${rx},${ry},0,1,0,${rx},0A${rx},${ry},0,1,0,${-rx},0Z`;\n } else {\n let x1 = Math.round(rx * Math.cos(ellipse.fPhimin*Math.PI/180)),\n y1 = Math.round(ry * Math.sin(ellipse.fPhimin*Math.PI/180)),\n x2 = Math.round(rx * Math.cos(ellipse.fPhimax*Math.PI/180)),\n y2 = Math.round(ry * Math.sin(ellipse.fPhimax*Math.PI/180));\n path = `M0,0L${x1},${y1}A${rx},${ry},0,1,1,${x2},${y2}Z`;\n }\n } else {\n let ct = Math.cos(ellipse.fTheta*Math.PI/180),\n st = Math.sin(ellipse.fTheta*Math.PI/180),\n phi1 = ellipse.fPhimin*Math.PI/180,\n phi2 = ellipse.fPhimax*Math.PI/180,\n np = 200,\n dphi = (phi2-phi1) / (np - (closed_ellipse ? 0 : 1)),\n lastx = 0, lasty = 0;\n if (!closed_ellipse) path = 'M0,0';\n for (let n = 0; n < np; ++n) {\n let angle = phi1 + n*dphi,\n dx = ellipse.fR1 * Math.cos(angle),\n dy = ellipse.fR2 * Math.sin(angle),\n px = funcs.x(ellipse.fX1 + dx*ct - dy*st) - x,\n py = funcs.y(ellipse.fY1 + dx*st + dy*ct) - y;\n if (!path)\n path = `M${px},${py}`;\n else if (lastx == px)\n path += `v${py-lasty}`;\n else if (lasty == py)\n path += `h${px-lastx}`;\n else\n path += `l${px-lastx},${py-lasty}`;\n lastx = px; lasty = py;\n }\n path += 'Z';\n }\n\n this.draw_g\n .append('svg:path')\n .attr('transform',`translate(${x},${y})`)\n .attr('d', path)\n .call(this.lineatt.func).call(this.fillatt.func);\n}\n\n/** @summary Draw TPie\n * @private */\nfunction drawPie() {\n let pie = this.getObject();\n\n this.createG();\n\n let xc = this.axisToSvg('x', pie.fX),\n yc = this.axisToSvg('y', pie.fY),\n rx = this.axisToSvg('x', pie.fX + pie.fRadius) - xc,\n ry = this.axisToSvg('y', pie.fY + pie.fRadius) - yc;\n\n this.draw_g.attr('transform', `translate(${xc},${yc})`);\n\n // Draw the slices\n let nb = pie.fPieSlices.length, total = 0,\n af = (pie.fAngularOffset*Math.PI)/180,\n x1 = Math.round(rx*Math.cos(af)),\n y1 = Math.round(ry*Math.sin(af));\n\n for (let n = 0; n < nb; n++)\n total += pie.fPieSlices[n].fValue;\n\n for (let n = 0; n < nb; n++) {\n let slice = pie.fPieSlices[n],\n lineatt = new TAttLineHandler({attr: slice}),\n fillatt = this.createAttFill(slice);\n\n af += slice.fValue/total*2*Math.PI;\n let x2 = Math.round(rx*Math.cos(af)), y2 = Math.round(ry*Math.sin(af));\n\n this.draw_g\n .append('svg:path')\n .attr('d', `M0,0L${x1},${y1}A${rx},${ry},0,0,0,${x2},${y2}z`)\n .call(lineatt.func)\n .call(fillatt.func);\n x1 = x2; y1 = y2;\n }\n}\n\n/** @summary Draw TBox\n * @private */\nfunction drawBox() {\n let box = this.getObject(),\n opt = this.getDrawOpt(),\n draw_line = (opt.toUpperCase().indexOf('L') >= 0),\n lineatt = this.createAttLine(box),\n fillatt = this.createAttFill(box);\n\n this.createG();\n\n let x1 = this.axisToSvg('x', box.fX1),\n x2 = this.axisToSvg('x', box.fX2),\n y1 = this.axisToSvg('y', box.fY1),\n y2 = this.axisToSvg('y', box.fY2),\n xx = Math.min(x1,x2), yy = Math.min(y1,y2),\n ww = Math.abs(x2-x1), hh = Math.abs(y1-y2);\n\n // if box filled, contour line drawn only with 'L' draw option:\n if (!fillatt.empty() && !draw_line) lineatt.color = 'none';\n\n this.draw_g\n .append('svg:path')\n .attr('d', `M${xx},${yy}h${ww}v${hh}h${-ww}z`)\n .call(lineatt.func)\n .call(fillatt.func);\n\n if (box.fBorderMode && box.fBorderSize && fillatt.hasColor()) {\n let pww = box.fBorderSize, phh = box.fBorderSize,\n side1 = `M${xx},${yy}h${ww}l${-pww},${phh}h${2*pww-ww}v${hh-2*phh}l${-pww},${phh}z`,\n side2 = `M${xx+ww},${yy+hh}v${-hh}l${-pww},${phh}v${hh-2*phh}h${2*pww-ww}l${-pww},${phh}z`;\n\n if (box.fBorderMode < 0) { let s = side1; side1 = side2; side2 = s; }\n\n this.draw_g.append('svg:path')\n .attr('d', side1)\n .call(fillatt.func)\n .style('fill', d3_rgb(fillatt.color).brighter(0.5).formatHex());\n\n this.draw_g.append('svg:path')\n .attr('d', side2)\n .call(fillatt.func)\n .style('fill', d3_rgb(fillatt.color).darker(0.5).formatHex());\n }\n}\n\n/** @summary Draw TMarker\n * @private */\nfunction drawMarker() {\n const marker = this.getObject(),\n att = new TAttMarkerHandler(marker),\n kMarkerNDC = BIT(14),\n isndc = marker.TestBit(kMarkerNDC);\n\n this.createG();\n\n let x = this.axisToSvg('x', marker.fX, isndc),\n y = this.axisToSvg('y', marker.fY, isndc),\n path = att.create(x, y);\n\n if (path)\n this.draw_g.append('svg:path')\n .attr('d', path)\n .call(att.func);\n}\n\n/** @summary Draw TPolyMarker\n * @private */\nfunction drawPolyMarker() {\n this.createG();\n\n let poly = this.getObject(),\n att = new TAttMarkerHandler(poly),\n path = '',\n func = this.getAxisToSvgFunc();\n\n for (let n = 0; n < poly.fN; ++n)\n path += att.create(func.x(poly.fX[n]), func.y(poly.fY[n]));\n\n if (path)\n this.draw_g.append('svg:path')\n .attr('d', path)\n .call(att.func);\n}\n\n/** @summary Draw JS image\n * @private */\nfunction drawJSImage(dom, obj, opt) {\n let painter = new BasePainter(dom),\n main = painter.selectDom(),\n img = main.append('img').attr('src', obj.fName).attr('title', obj.fTitle || obj.fName);\n\n if (opt && opt.indexOf('scale') >= 0) {\n img.style('width','100%').style('height','100%');\n } else if (opt && opt.indexOf('center') >= 0) {\n main.style('position', 'relative');\n img.attr('style', 'margin: 0; position: absolute; top: 50%; left: 50%; transform: translate(-50%, -50%);');\n }\n\n painter.setTopPainter();\n\n return painter;\n}\n\nexport { drawText, drawTLine, drawPolyLine, drawEllipse, drawPie, drawBox,\n drawMarker, drawPolyMarker, drawJSImage };\n","import { settings, create, gStyle, isStr, clTF2 } from '../core.mjs';\nimport { DrawOptions, buildSvgPath } from '../base/BasePainter.mjs';\nimport { ObjectPainter } from '../base/ObjectPainter.mjs';\nimport { TH1Painter } from '../hist2d/TH1Painter.mjs';\nimport * as jsroot_math from '../base/math.mjs';\n\n\nfunction proivdeEvalPar(obj) {\n\n obj._math = jsroot_math;\n\n let _func = obj.fTitle, isformula = false, pprefix = '[';\n if (_func === 'gaus') _func = 'gaus(0)';\n if (obj.fFormula && isStr(obj.fFormula.fFormula)) {\n if (obj.fFormula.fFormula.indexOf('[](double*x,double*p)') == 0) {\n isformula = true; pprefix = 'p[';\n _func = obj.fFormula.fFormula.slice(21);\n } else {\n _func = obj.fFormula.fFormula;\n pprefix = '[p';\n }\n\n if (obj.fFormula.fClingParameters && obj.fFormula.fParams)\n obj.fFormula.fParams.forEach(pair => {\n let regex = new RegExp(`(\\\\[${pair.first}\\\\])`, 'g'),\n parvalue = obj.fFormula.fClingParameters[pair.second];\n _func = _func.replace(regex, (parvalue < 0) ? `(${parvalue})` : parvalue);\n });\n }\n\n if ('formulas' in obj)\n obj.formulas.forEach(entry => {\n _func = _func.replaceAll(entry.fName, entry.fTitle);\n });\n\n _func = _func.replace(/\\b(abs)\\b/g, 'TMath::Abs')\n .replace(/\\b(TMath::Exp)/g, 'Math.exp')\n .replace(/\\b(TMath::Abs)/g, 'Math.abs');\n\n _func = _func.replace(/xygaus\\(/g, 'this._math.gausxy(this, x, y, ')\n .replace(/gaus\\(/g, 'this._math.gaus(this, x, ')\n .replace(/gausn\\(/g, 'this._math.gausn(this, x, ')\n .replace(/expo\\(/g, 'this._math.expo(this, x, ')\n .replace(/landau\\(/g, 'this._math.landau(this, x, ')\n .replace(/landaun\\(/g, 'this._math.landaun(this, x, ')\n .replace(/TMath::/g, 'this._math.')\n .replace(/ROOT::Math::/g, 'this._math.');\n\n for (let i = 0; i < obj.fNpar; ++i)\n _func = _func.replaceAll(pprefix + i + ']', `(${obj.GetParValue(i)})`);\n\n _func = _func.replace(/\\b(sin)\\b/gi, 'Math.sin')\n .replace(/\\b(cos)\\b/gi, 'Math.cos')\n .replace(/\\b(tan)\\b/gi, 'Math.tan')\n .replace(/\\b(exp)\\b/gi, 'Math.exp')\n .replace(/\\b(pow)\\b/gi, 'Math.pow')\n .replace(/pi/g, 'Math.PI');\n for (let n = 2; n < 10; ++n)\n _func = _func.replaceAll(`x^${n}`, `Math.pow(x,${n})`);\n\n if (isformula) {\n _func = _func.replace(/x\\[0\\]/g,'x');\n if (obj._typename === clTF2) {\n _func = _func.replace(/x\\[1\\]/g,'y');\n obj.evalPar = new Function('x', 'y', _func).bind(obj);\n } else {\n obj.evalPar = new Function('x', _func).bind(obj);\n }\n } else if (obj._typename === clTF2)\n obj.evalPar = new Function('x', 'y', 'return ' + _func).bind(obj);\n else\n obj.evalPar = new Function('x', 'return ' + _func).bind(obj);\n}\n\n/**\n * @summary Painter for TF1 object\n *\n * @private\n */\n\nclass TF1Painter extends ObjectPainter {\n\n /** @summary Create bins for TF1 drawing */\n createBins(ignore_zoom) {\n let tf1 = this.getObject(),\n main = this.getFramePainter(),\n gxmin = 0, gxmax = 0;\n\n if (main && !ignore_zoom) {\n let gr = main.getGrFuncs(this.second_x, this.second_y);\n gxmin = gr.scale_xmin;\n gxmax = gr.scale_xmax;\n }\n\n let xmin = tf1.fXmin, xmax = tf1.fXmax, logx = false;\n\n if (gxmin !== gxmax) {\n if (gxmin > xmin) xmin = gxmin;\n if (gxmax < xmax) xmax = gxmax;\n }\n\n if (main && main.logx && (xmin > 0) && (xmax > 0)) {\n logx = true;\n xmin = Math.log(xmin);\n xmax = Math.log(xmax);\n }\n\n let np = Math.max(tf1.fNpx, 101),\n dx = (xmax - xmin) / (np - 1),\n res = [], iserror = false,\n has_saved_points = tf1.fSave.length > 3,\n force_use_save = has_saved_points && (ignore_zoom || settings.PreferSavedPoints);\n\n if (!force_use_save) {\n if (!tf1.evalPar)\n proivdeEvalPar(tf1);\n\n for (let n = 0; n < np; n++) {\n let x = xmin + n*dx, y = 0;\n if (logx) x = Math.exp(x);\n try {\n y = tf1.evalPar(x);\n } catch(err) {\n iserror = true;\n }\n\n if (iserror) break;\n\n if (Number.isFinite(y))\n res.push({ x, y });\n }\n }\n\n // in the case there were points have saved and we cannot calculate function\n // if we don't have the user's function\n if ((iserror || ignore_zoom || !res.length) && has_saved_points) {\n\n np = tf1.fSave.length - 2;\n xmin = tf1.fSave[np];\n xmax = tf1.fSave[np+1];\n res = [];\n dx = 0;\n let use_histo = tf1.$histo && (xmin === xmax), bin = 0;\n\n if (use_histo) {\n xmin = tf1.fSave[--np];\n bin = tf1.$histo.fXaxis.FindBin(xmin, 0);\n } else {\n dx = (xmax - xmin) / (np-1);\n }\n\n for (let n = 0; n < np; ++n) {\n let x = use_histo ? tf1.$histo.fXaxis.GetBinCenter(bin+n+1) : xmin + dx*n;\n // check if points need to be displayed at all, keep at least 4-5 points for Bezier curves\n if ((gxmin !== gxmax) && ((x + 2*dx < gxmin) || (x - 2*dx > gxmax))) continue;\n let y = tf1.fSave[n];\n\n if (Number.isFinite(y)) res.push({ x, y });\n }\n }\n\n return res;\n }\n\n /** @summary Create histogram for axes drawing */\n createDummyHisto() {\n\n let xmin = 0, xmax = 1, ymin = 0, ymax = 1,\n bins = this.createBins(true);\n\n if (bins?.length) {\n\n xmin = xmax = bins[0].x;\n ymin = ymax = bins[0].y;\n\n bins.forEach(bin => {\n xmin = Math.min(bin.x, xmin);\n xmax = Math.max(bin.x, xmax);\n ymin = Math.min(bin.y, ymin);\n ymax = Math.max(bin.y, ymax);\n });\n\n if (ymax > 0.0) ymax *= (1 + gStyle.fHistTopMargin);\n if (ymin < 0.0) ymin *= (1 + gStyle.fHistTopMargin);\n }\n\n let histo = create('TH1I'),\n tf1 = this.getObject();\n\n histo.fName = tf1.fName + '_hist';\n histo.fTitle = tf1.fTitle;\n\n histo.fXaxis.fXmin = xmin;\n histo.fXaxis.fXmax = xmax;\n histo.fYaxis.fXmin = ymin;\n histo.fYaxis.fXmax = ymax;\n\n histo.fMinimum = tf1.fMinimum;\n histo.fMaximum = tf1.fMaximum;\n\n return histo;\n }\n\n updateObject(obj /*, opt */) {\n if (!this.matchObjectType(obj)) return false;\n let tf1 = this.getObject();\n Object.assign(tf1, obj);\n delete tf1.evalPar;\n return true;\n }\n\n /** @summary Process tooltip event */\n processTooltipEvent(pnt) {\n let cleanup = false;\n\n if (!pnt || !this.bins || pnt.disabled) {\n cleanup = true;\n } else if (!this.bins.length || (pnt.x < this.bins[0].grx) || (pnt.x > this.bins[this.bins.length-1].grx)) {\n cleanup = true;\n }\n\n if (cleanup) {\n if (this.draw_g)\n this.draw_g.select('.tooltip_bin').remove();\n return null;\n }\n\n let min = 100000, best = -1, bin;\n\n for(let n = 0; n < this.bins.length; ++n) {\n bin = this.bins[n];\n let dist = Math.abs(bin.grx - pnt.x);\n if (dist < min) { min = dist; best = n; }\n }\n\n bin = this.bins[best];\n\n let gbin = this.draw_g.select('.tooltip_bin'),\n radius = this.lineatt.width + 3;\n\n if (gbin.empty())\n gbin = this.draw_g.append('svg:circle')\n .attr('class', 'tooltip_bin')\n .style('pointer-events', 'none')\n .attr('r', radius)\n .call(this.lineatt.func)\n .call(this.fillatt.func);\n\n let res = { name: this.getObject().fName,\n title: this.getObject().fTitle,\n x: bin.grx,\n y: bin.gry,\n color1: this.lineatt.color,\n color2: this.fillatt.getFillColor(),\n lines: [],\n exact: (Math.abs(bin.grx - pnt.x) < radius) && (Math.abs(bin.gry - pnt.y) < radius) };\n\n res.changed = gbin.property('current_bin') !== best;\n res.menu = res.exact;\n res.menu_dist = Math.sqrt((bin.grx - pnt.x)**2 + (bin.gry - pnt.y)**2);\n\n if (res.changed)\n gbin.attr('cx', bin.grx)\n .attr('cy', bin.gry)\n .property('current_bin', best);\n\n let name = this.getObjectHint();\n if (name) res.lines.push(name);\n\n let pmain = this.getFramePainter(),\n funcs = pmain?.getGrFuncs(this.second_x, this.second_y);\n if (funcs)\n res.lines.push(`x = ${funcs.axisAsText('x',bin.x)} y = ${funcs.axisAsText('y',bin.y)}`);\n\n return res;\n }\n\n /** @summary Redraw function */\n redraw() {\n\n let tf1 = this.getObject(),\n fp = this.getFramePainter(),\n h = fp.getFrameHeight(),\n pmain = this.getMainPainter();\n\n this.createG(true);\n\n // recalculate drawing bins when necessary\n this.bins = this.createBins(false);\n\n this.createAttLine({ attr: tf1 });\n this.lineatt.used = false;\n\n this.createAttFill({ attr: tf1, kind: 1 });\n this.fillatt.used = false;\n\n let funcs = fp.getGrFuncs(this.second_x, this.second_y);\n\n // first calculate graphical coordinates\n for(let n = 0; n < this.bins.length; ++n) {\n let bin = this.bins[n];\n bin.grx = funcs.grx(bin.x);\n bin.gry = funcs.gry(bin.y);\n }\n\n if (this.bins.length > 2) {\n\n let h0 = h; // use maximal frame height for filling\n if (pmain.hmin && (pmain.hmin >= 0)) {\n h0 = Math.round(funcs.gry(0));\n if ((h0 > h) || (h0 < 0)) h0 = h;\n }\n\n let path = buildSvgPath('bezier', this.bins, h0, 2);\n\n if (!this.lineatt.empty())\n this.draw_g.append('svg:path')\n .attr('class', 'line')\n .attr('d', path.path)\n .style('fill', 'none')\n .call(this.lineatt.func);\n\n if (!this.fillatt.empty())\n this.draw_g.append('svg:path')\n .attr('class', 'area')\n .attr('d', path.path + path.close)\n .call(this.fillatt.func);\n }\n }\n\n /** @summary Checks if it makes sense to zoom inside specified axis range */\n canZoomInside(axis,min,max) {\n if (axis !== 'x') return false;\n\n let tf1 = this.getObject();\n\n if (tf1.fSave.length > 0) {\n // in the case where the points have been saved, useful for example\n // if we don't have the user's function\n let nb_points = tf1.fNpx,\n xmin = tf1.fSave[nb_points + 1],\n xmax = tf1.fSave[nb_points + 2];\n\n return Math.abs(xmin - xmax) / nb_points < Math.abs(min - max);\n }\n\n // if function calculated, one always could zoom inside\n return true;\n }\n\n /** @summary draw TF1 object */\n static async draw(dom, tf1, opt) {\n let painter = new TF1Painter(dom, tf1, opt),\n d = new DrawOptions(opt),\n has_main = !!painter.getMainPainter(),\n aopt = 'AXIS';\n d.check('SAME'); // just ignore same\n if (d.check('X+')) { aopt += 'X+'; painter.second_x = has_main; }\n if (d.check('Y+')) { aopt += 'Y+'; painter.second_y = has_main; }\n if (d.check('RX')) aopt += 'RX';\n if (d.check('RY')) aopt += 'RY';\n\n let pr = Promise.resolve(true);\n\n if (!has_main || painter.second_x || painter.second_y)\n pr = TH1Painter.draw(dom, painter.createDummyHisto(), aopt);\n\n return pr.then(() => {\n painter.addToPadPrimitives();\n painter.redraw();\n return painter;\n });\n }\n\n} // class TF1Painter\n\nexport { TF1Painter, proivdeEvalPar };\n","import { TGraphPainter as TGraphPainter2D } from '../hist2d/TGraphPainter.mjs';\nimport { TH1Painter } from './TH1Painter.mjs';\nimport { createLineSegments, create3DLineMaterial } from '../base/base3d.mjs';\n\n\nclass TGraphPainter extends TGraphPainter2D {\n\n /** @summary Draw TGraph points in 3D\n * @private */\n drawBins3D(fp, graph) {\n\n if (!fp.mode3d || !fp.grx || !fp.gry || !fp.grz || !fp.toplevel)\n return console.log('Frame painter missing base 3d elements');\n\n if (fp.zoom_xmin != fp.zoom_xmax)\n if ((this.options.pos3d < fp.zoom_xmin) || (this.options.pos3d > fp.zoom_xmax)) return;\n\n let drawbins = this.optimizeBins(1000),\n first = 0, last = drawbins.length-1;\n\n if (fp.zoom_ymin != fp.zoom_ymax) {\n while ((first < last) && (drawbins[first].x < fp.zoom_ymin)) first++;\n while ((first < last) && (drawbins[last].x > fp.zoom_ymax)) last--;\n }\n\n if (first == last) return;\n\n let pnts = [], grx = fp.grx(this.options.pos3d),\n p0 = drawbins[first];\n\n for (let n = first + 1; n <= last; ++n) {\n let p1 = drawbins[n];\n pnts.push(grx, fp.gry(p0.x), fp.grz(p0.y),\n grx, fp.gry(p1.x), fp.grz(p1.y));\n p0 = p1;\n }\n\n let lines = createLineSegments(pnts, create3DLineMaterial(this, graph));\n\n fp.toplevel.add(lines);\n\n fp.render3D(100);\n }\n\n /** @summary Draw axis histogram\n * @private */\n async drawAxisHisto() {\n return TH1Painter.draw(this.getDom(), this.createHistogram(), this.options.Axis);\n }\n\n static async draw(dom, graph, opt) {\n return TGraphPainter._drawGraph(new TGraphPainter(dom, graph), opt);\n }\n\n} // class TGraphPainter\n\nexport { TGraphPainter };\n"],"x_google_ignoreList":[0,1,2,3]} \ No newline at end of file diff --git a/docs/common.95cee8198ab89914.js b/docs/common.95cee8198ab89914.js new file mode 100644 index 000000000..1048527c3 --- /dev/null +++ b/docs/common.95cee8198ab89914.js @@ -0,0 +1,2 @@ +"use strict";(self.webpackChunkphoenix_app=self.webpackChunkphoenix_app||[]).push([[592],{7822:(j,S,m)=>{m.d(S,{Y:()=>I});var C=m(5835),O=m(9900),F=m(9542),R=m(1968);function I(){return z.apply(this,arguments)}function z(){return(z=(0,C.Z)(function*(){let i=this.$fp||this.getFramePainter();if(delete this.$fp,!((0,F.isObject)(i)&&i.grx&&i.gry&&i.grz))return this;let A=this.getObject(),_=1,r=0,h=A.fP;for(let f=0;fi.scale_xmax||h[f+1]i.scale_ymax||h[f+2]i.scale_zmax||++r;F.settings.OptimizeDraw>0&&r>5e4&&(_=Math.floor(r/5e4),_<=2&&(_=2));let a=Math.floor(r/_),l=new R.B_(a,i.webgl,i.size_x3d/100),s=new Int32Array(a),o=0,M=0;for(let f=0;fi.scale_xmax||h[f+1]i.scale_ymax||h[f+2]i.scale_zmax||_>1&&(o=(o+1)%_,0!==o)||(s[M++]=f,l.addPoint(i.grx(h[f]),i.gry(h[f+1]),i.grz(h[f+2])));return l.createPoints({color:this.getColor(A.fMarkerColor),style:A.fMarkerStyle}).then(f=>(f.tip_color=3===A.fMarkerColor?16711680:65280,f.tip_name=A.fName||"Poly3D",f.poly=A,f.painter=i,f.scale0=.7*l.scale,f.index=s,i.toplevel.add(f),f.tooltip=function(D){if(!Number.isInteger(D.index))return console.error(`intersect.index not provided, three.js version ${O.UZH}`),null;let T=Math.floor(D.index/this.nvertex);if(T<0||T>=this.index.length)return null;T=this.index[T];let t=this.painter,c=t.grx(this.poly.fP[T]),g=t.gry(this.poly.fP[T+1]),d=t.grz(this.poly.fP[T+2]);return{x1:c-this.scale0,x2:c+this.scale0,y1:g-this.scale0,y2:g+this.scale0,z1:d-this.scale0,z2:d+this.scale0,color:this.tip_color,lines:[this.tip_name,"pnt: "+T/3,"x: "+t.axisAsText("x",this.poly.fP[T]),"y: "+t.axisAsText("y",this.poly.fP[T+1]),"z: "+t.axisAsText("z",this.poly.fP[T+2])]}},i.render3D(100),this))})).apply(this,arguments)}},4971:(j,S,m)=>{m.r(S),m.d(S,{drawBox:()=>M,drawEllipse:()=>s,drawJSImage:()=>T,drawMarker:()=>f,drawPie:()=>o,drawPolyLine:()=>l,drawPolyMarker:()=>D,drawTLine:()=>h,drawText:()=>e});var C=m(5835),O=m(9542),F=m(2253),R=m(3675),I=m(6458),z=m(6417),i=m(6367),A=m(49),_=m(9622);function e(){return r.apply(this,arguments)}function r(){return(r=(0,C.Z)(function*(){let t=this.getObject(),c=this.getPadPainter(),g=c.getPadWidth(),d=c.getPadHeight(),n=t.fX,u=t.fY,x=this.getColor(t.fTextColor),P=!1,v=1,E=t.fTextSize||.05,y=this.getFramePainter();t.TestBit((0,O.BIT)(14))?this.isndc=!0:y&&!y.mode3d?(g=y.getFrameWidth(),d=y.getFrameHeight(),P="upper_layer"):c.getRootPad(!0)||(this.isndc=!0,n=u=.5,t.fTextAlign=22,x||(x="black")),this.createG(P),this.draw_g.attr("transform",null),this.pos_x=this.axisToSvg("x",n,this.isndc),this.pos_y=this.axisToSvg("y",u,this.isndc);let p={align:t.fTextAlign,x:this.pos_x,y:this.pos_y,text:t.fTitle,color:x,latex:0};return t.fTextAngle&&(p.rotate=-t.fTextAngle),t._typename==O.clTLatex?(p.latex=1,v=.9):t._typename==O.clTMathText&&(p.latex=2,v=.8),this.startTextDrawing(t.fTextFont,Math.round(E>1?E:E*Math.min(g,d)*v)),this.drawText(p),this.finishTextDrawing().then(()=>((0,O.isBatchMode)()||(this.pos_dx=this.pos_dy=0,this.moveDrag||(this.moveDrag=function(b,$){this.pos_dx+=b,this.pos_dy+=$,this.draw_g.attr("transform",`translate(${this.pos_dx},${this.pos_dy})`)}),this.moveEnd||(this.moveEnd=function(b){if(b)return;let $=this.getObject();$.fX=this.svgToAxis("x",this.pos_x+this.pos_dx,this.isndc),$.fY=this.svgToAxis("y",this.pos_y+this.pos_dy,this.isndc),this.submitCanvExec(`SetX(${$.fX});;SetY(${$.fY});;`)}),(0,_.Z)(this)),this))})).apply(this,arguments)}function h(t,c){return a.apply(this,arguments)}function a(){return(a=(0,C.Z)(function*(t,c){let g=new I.tK(t,c);return g.redraw=function(){const d=(0,O.BIT)(14),n=this.getObject(),u=new i.rE(n),x=n.TestBit(d);return this.createG(),this.draw_g.append("svg:path").attr("d",`M${this.axisToSvg("x",n.fX1,x)},${this.axisToSvg("y",n.fY1,x)}L${this.axisToSvg("x",n.fX2,x)},${this.axisToSvg("y",n.fY2,x)}`).call(u.func),this},(0,A.ensureTCanvas)(g,!1).then(()=>g.redraw())})).apply(this,arguments)}function l(){this.createG();let t=this.getObject(),c=new i.rE(t),g=this.createAttFill(t),d=(0,O.BIT)(14),n=t.TestBit(d),u="",x=this.getAxisToSvgFunc(n);for(let P=0;P<=t.fLastPoint;++P)u+=`${P>0?"L":"M"}${x.x(t.fX[P])},${x.y(t.fY[P])}`;t._typename!=O.clTPolyLine&&g.setSolidColor("none"),g.empty()||(u+="Z"),this.draw_g.append("svg:path").attr("d",u).call(c.func).call(g.func)}function s(){let t=this.getObject();this.createAttLine({attr:t}),this.createAttFill({attr:t}),this.createG();let c=this.getAxisToSvgFunc(),g=c.x(t.fX1),d=c.y(t.fY1),n=c.x(t.fX1+t.fR1)-g,u=d-c.y(t.fY1+t.fR2),x="",P=0==t.fPhimin&&360==t.fPhimax;if("TCrown"==t._typename&&t.fR1<=0&&(n=c.x(t.fX1+t.fR2)-g),"TCrown"==t._typename&&t.fR1>0){let v=n,E=u,y=d-c.y(t.fY1+t.fR1),p=c.x(t.fX1+t.fR2)-g;if(P)x=`M${-v},0A${v},${y},0,1,0,${v},0A${v},${y},0,1,0,${-v},0M${-p},0A${p},${E},0,1,0,${p},0A${p},${E},0,1,0,${-p},0`;else{let b=t.fPhimax-t.fPhimin>=180?1:0,$=t.fPhimin*Math.PI/180,w=t.fPhimax*Math.PI/180,B=Math.round(v*Math.cos($)),L=Math.round(y*Math.sin($));x=`M${Math.round(v*Math.cos(w))},${Math.round(y*Math.sin(w))}A${v},${y},0,${b},0,${B},${L}L${Math.round(p*Math.cos($))},${Math.round(E*Math.sin($))}A${p},${E},0,${b},1,${Math.round(p*Math.cos(w))},${Math.round(E*Math.sin(w))}Z`}}else if(0==t.fTheta)x=P?`M${-n},0A${n},${u},0,1,0,${n},0A${n},${u},0,1,0,${-n},0Z`:`M0,0L${Math.round(n*Math.cos(t.fPhimin*Math.PI/180))},${Math.round(u*Math.sin(t.fPhimin*Math.PI/180))}A${n},${u},0,1,1,${Math.round(n*Math.cos(t.fPhimax*Math.PI/180))},${Math.round(u*Math.sin(t.fPhimax*Math.PI/180))}Z`;else{let v=Math.cos(t.fTheta*Math.PI/180),E=Math.sin(t.fTheta*Math.PI/180),y=t.fPhimin*Math.PI/180,b=200,$=(t.fPhimax*Math.PI/180-y)/(b-(P?0:1)),w=0,B=0;P||(x="M0,0");for(let L=0;L=0,d=this.createAttLine(t),n=this.createAttFill(t);this.createG();let u=this.axisToSvg("x",t.fX1),x=this.axisToSvg("x",t.fX2),P=this.axisToSvg("y",t.fY1),v=this.axisToSvg("y",t.fY2),E=Math.min(u,x),y=Math.min(P,v),p=Math.abs(x-u),b=Math.abs(P-v);if(!n.empty()&&!g&&(d.color="none"),this.draw_g.append("svg:path").attr("d",`M${E},${y}h${p}v${b}h${-p}z`).call(d.func).call(n.func),t.fBorderMode&&t.fBorderSize&&n.hasColor()){let $=t.fBorderSize,w=t.fBorderSize,B=`M${E},${y}h${p}l${-$},${w}h${2*$-p}v${b-2*w}l${-$},${w}z`,L=`M${E+p},${y+b}v${-b}l${-$},${w}v${b-2*w}h${2*$-p}l${-$},${w}z`;if(t.fBorderMode<0){let U=B;B=L,L=U}this.draw_g.append("svg:path").attr("d",B).call(n.func).style("fill",(0,F.B8)(n.color).brighter(.5).formatHex()),this.draw_g.append("svg:path").attr("d",L).call(n.func).style("fill",(0,F.B8)(n.color).darker(.5).formatHex())}}function f(){const t=this.getObject(),c=new z.M(t),g=(0,O.BIT)(14),d=t.TestBit(g);this.createG();let n=this.axisToSvg("x",t.fX,d),u=this.axisToSvg("y",t.fY,d),x=c.create(n,u);x&&this.draw_g.append("svg:path").attr("d",x).call(c.func)}function D(){this.createG();let t=this.getObject(),c=new z.M(t),g="",d=this.getAxisToSvgFunc();for(let n=0;n=0?u.style("width","100%").style("height","100%"):g&&g.indexOf("center")>=0&&(n.style("position","relative"),u.attr("style","margin: 0; position: absolute; top: 50%; left: 50%; transform: translate(-50%, -50%);")),d.setTopPainter(),d}},9428:(j,S,m)=>{m.r(S),m.d(S,{TF1Painter:()=>A,proivdeEvalPar:()=>i});var C=m(5835),O=m(9542),F=m(3675),R=m(6458),I=m(9670),z=m(6976);function i(_){_._math=z;let e=_.fTitle,r=!1,h="[";"gaus"===e&&(e="gaus(0)"),_.fFormula&&(0,O.isStr)(_.fFormula.fFormula)&&(0==_.fFormula.fFormula.indexOf("[](double*x,double*p)")?(r=!0,h="p[",e=_.fFormula.fFormula.slice(21)):(e=_.fFormula.fFormula,h="[p"),_.fFormula.fClingParameters&&_.fFormula.fParams&&_.fFormula.fParams.forEach(a=>{let l=new RegExp(`(\\[${a.first}\\])`,"g"),s=_.fFormula.fClingParameters[a.second];e=e.replace(l,s<0?`(${s})`:s)})),"formulas"in _&&_.formulas.forEach(a=>{e=e.replaceAll(a.fName,a.fTitle)}),e=e.replace(/\b(abs)\b/g,"TMath::Abs").replace(/\b(TMath::Exp)/g,"Math.exp").replace(/\b(TMath::Abs)/g,"Math.abs"),e=e.replace(/xygaus\(/g,"this._math.gausxy(this, x, y, ").replace(/gaus\(/g,"this._math.gaus(this, x, ").replace(/gausn\(/g,"this._math.gausn(this, x, ").replace(/expo\(/g,"this._math.expo(this, x, ").replace(/landau\(/g,"this._math.landau(this, x, ").replace(/landaun\(/g,"this._math.landaun(this, x, ").replace(/TMath::/g,"this._math.").replace(/ROOT::Math::/g,"this._math.");for(let a=0;a<_.fNpar;++a)e=e.replaceAll(h+a+"]",`(${_.GetParValue(a)})`);e=e.replace(/\b(sin)\b/gi,"Math.sin").replace(/\b(cos)\b/gi,"Math.cos").replace(/\b(tan)\b/gi,"Math.tan").replace(/\b(exp)\b/gi,"Math.exp").replace(/\b(pow)\b/gi,"Math.pow").replace(/pi/g,"Math.PI");for(let a=2;a<10;++a)e=e.replaceAll(`x^${a}`,`Math.pow(x,${a})`);r?(e=e.replace(/x\[0\]/g,"x"),_._typename===O.clTF2?(e=e.replace(/x\[1\]/g,"y"),_.evalPar=new Function("x","y",e).bind(_)):_.evalPar=new Function("x",e).bind(_)):_.evalPar=_._typename===O.clTF2?new Function("x","y","return "+e).bind(_):new Function("x","return "+e).bind(_)}class A extends R.tK{createBins(e){let r=this.getObject(),h=this.getFramePainter(),a=0,l=0;if(h&&!e){let d=h.getGrFuncs(this.second_x,this.second_y);a=d.scale_xmin,l=d.scale_xmax}let s=r.fXmin,o=r.fXmax,M=!1;a!==l&&(a>s&&(s=a),l0&&o>0&&(M=!0,s=Math.log(s),o=Math.log(o));let f=Math.max(r.fNpx,101),D=(o-s)/(f-1),T=[],t=!1,c=r.fSave.length>3;if(!c||!e&&!O.settings.PreferSavedPoints){r.evalPar||i(r);for(let d=0;dl))continue;let P=r.fSave[u];Number.isFinite(P)&&T.push({x,y:P})}}return T}createDummyHisto(){let e=0,r=1,h=0,a=1,l=this.createBins(!0);l?.length&&(e=r=l[0].x,h=a=l[0].y,l.forEach(M=>{e=Math.min(M.x,e),r=Math.max(M.x,r),h=Math.min(M.y,h),a=Math.max(M.y,a)}),a>0&&(a*=1+O.gStyle.fHistTopMargin),h<0&&(h*=1+O.gStyle.fHistTopMargin));let s=(0,O.create)("TH1I"),o=this.getObject();return s.fName=o.fName+"_hist",s.fTitle=o.fTitle,s.fXaxis.fXmin=e,s.fXaxis.fXmax=r,s.fYaxis.fXmin=h,s.fYaxis.fXmax=a,s.fMinimum=o.fMinimum,s.fMaximum=o.fMaximum,s}updateObject(e){if(!this.matchObjectType(e))return!1;let r=this.getObject();return Object.assign(r,e),delete r.evalPar,!0}processTooltipEvent(e){let r=!1;if((!e||!this.bins||e.disabled||!this.bins.length||e.xthis.bins[this.bins.length-1].grx)&&(r=!0),r)return this.draw_g&&this.draw_g.select(".tooltip_bin").remove(),null;let l,h=1e5,a=-1;for(let t=0;t2){let s=h;a.hmin&&a.hmin>=0&&(s=Math.round(l.gry(0)),(s>h||s<0)&&(s=h));let o=(0,F.Cq)("bezier",this.bins,s,2);this.lineatt.empty()||this.draw_g.append("svg:path").attr("class","line").attr("d",o.path).style("fill","none").call(this.lineatt.func),this.fillatt.empty()||this.draw_g.append("svg:path").attr("class","area").attr("d",o.path+o.close).call(this.fillatt.func)}}canZoomInside(e,r,h){if("x"!==e)return!1;let a=this.getObject();if(a.fSave.length>0){let l=a.fNpx;return Math.abs(a.fSave[l+1]-a.fSave[l+2])/l(a.addToPadPrimitives(),a.redraw(),a))})()}}},3761:(j,S,m)=>{m.d(S,{o:()=>I});var C=m(5835),O=m(8241),F=m(629),R=m(1968);class I extends O.TGraphPainter{drawBins3D(i,A){if(!(i.mode3d&&i.grx&&i.gry&&i.grz&&i.toplevel))return console.log("Frame painter missing base 3d elements");if(i.zoom_xmin!=i.zoom_xmax&&(this.options.pos3di.zoom_xmax))return;let _=this.optimizeBins(1e3),e=0,r=_.length-1;if(i.zoom_ymin!=i.zoom_ymax){for(;ei.zoom_ymax;)r--}if(e==r)return;let h=[],a=i.grx(this.options.pos3d),l=_[e];for(let o=e+1;o<=r;++o){let M=_[o];h.push(a,i.gry(l.x),i.grz(l.y),a,i.gry(M.x),i.grz(M.y)),l=M}let s=(0,R.Qy)(h,(0,R.rq)(this,A));i.toplevel.add(s),i.render3D(100)}drawAxisHisto(){var i=this;return(0,C.Z)(function*(){return F.TH1Painter.draw(i.getDom(),i.createHistogram(),i.options.Axis)})()}static draw(i,A,_){return(0,C.Z)(function*(){return I._drawGraph(new I(i,A),_)})()}}}}]); +//# sourceMappingURL=common.95cee8198ab89914.js.map \ No newline at end of file diff --git a/docs/common.95cee8198ab89914.js.map b/docs/common.95cee8198ab89914.js.map new file mode 100644 index 000000000..2d62732fb --- /dev/null +++ b/docs/common.95cee8198ab89914.js.map @@ -0,0 +1 @@ +{"version":3,"file":"common.95cee8198ab89914.js","mappings":"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","names":["drawPolyMarker3D","fp","this","$fp","getFramePainter","isObject","grx","gry","grz","poly","getObject","step","numselect","fP","i","length","scale_xmin","scale_xmax","scale_ymin","scale_ymax","scale_zmin","scale_zmax","settings","Math","floor","size","pnts","PointsCreator","webgl","size_x3d","index","Int32Array","select","icnt","addPoint","createPoints","color","getColor","fMarkerColor","style","fMarkerStyle","then","mesh","tip_color","tip_name","fName","painter","scale0","scale","toplevel","add","tooltip","intersect","Number","isInteger","console","error","REVISION","indx","nvertex","p","x1","x2","y1","y2","z1","z2","lines","axisAsText","render3D","apply","drawText","text","pp","getPadPainter","w","getPadWidth","h","getPadHeight","pos_x","fX","pos_y","fY","tcolor","fTextColor","use_frame","fact","textsize","fTextSize","main","TestBit","BIT","isndc","mode3d","getFrameWidth","getFrameHeight","getRootPad","fTextAlign","createG","draw_g","attr","axisToSvg","arg","align","x","y","fTitle","latex","fTextAngle","rotate","_typename","clTLatex","clTMathText","startTextDrawing","fTextFont","round","min","finishTextDrawing","isBatchMode","pos_dx","pos_dy","moveDrag","dx","dy","moveEnd","not_changed","svgToAxis","submitCanvExec","addMoveHandler","drawTLine","_x","dom","obj","ObjectPainter","redraw","kLineNDC","line","lineatt","TAttLineHandler","append","fX1","fY1","fX2","fY2","call","func","ensureTCanvas","drawPolyLine","polyline","fillatt","createAttFill","kPolyLineNDC","cmd","getAxisToSvgFunc","n","fLastPoint","clTPolyLine","setSolidColor","empty","drawEllipse","ellipse","createAttLine","funcs","rx","fR1","ry","fR2","path","closed_ellipse","fPhimin","fPhimax","rx1","ry2","ry1","rx2","large_arc","a1","PI","a2","dx1","cos","dy1","sin","dy4","fTheta","ct","st","phi1","np","dphi","lastx","lasty","angle","px","py","drawPie","pie","xc","yc","fRadius","nb","fPieSlices","total","af","fAngularOffset","fValue","slice","drawBox","box","draw_line","getDrawOpt","toUpperCase","indexOf","xx","yy","ww","abs","hh","fBorderMode","fBorderSize","hasColor","pww","phh","side1","side2","s","d3_rgb","brighter","formatHex","darker","drawMarker","marker","att","TAttMarkerHandler","kMarkerNDC","create","drawPolyMarker","fN","drawJSImage","opt","BasePainter","selectDom","img","setTopPainter","proivdeEvalPar","_math","jsroot_math","_func","isformula","pprefix","fFormula","isStr","fClingParameters","fParams","forEach","pair","regex","RegExp","first","parvalue","second","replace","formulas","entry","replaceAll","fNpar","GetParValue","clTF2","evalPar","Function","bind","TF1Painter","createBins","ignore_zoom","tf1","gxmin","gxmax","gr","getGrFuncs","second_x","second_y","xmin","fXmin","xmax","fXmax","logx","log","max","fNpx","res","iserror","has_saved_points","fSave","exp","isFinite","push","use_histo","$histo","bin","fXaxis","FindBin","GetBinCenter","createDummyHisto","ymin","ymax","bins","gStyle","histo","fYaxis","fMinimum","fMaximum","updateObject","matchObjectType","Object","assign","processTooltipEvent","pnt","cleanup","disabled","remove","best","dist","gbin","radius","width","name","title","color1","color2","getFillColor","exact","changed","property","menu","menu_dist","sqrt","getObjectHint","pmain","getMainPainter","used","kind","h0","hmin","buildSvgPath","close","canZoomInside","axis","nb_points","static","d","DrawOptions","has_main","aopt","check","pr","Promise","resolve","TH1Painter","addToPadPrimitives","TGraphPainter","TGraphPainter2D","drawBins3D","graph","zoom_xmin","zoom_xmax","options","pos3d","drawbins","optimizeBins","last","zoom_ymin","zoom_ymax","p0","p1","createLineSegments","create3DLineMaterial","drawAxisHisto","_this","getDom","createHistogram","Axis","_drawGraph"],"sourceRoot":"webpack:///","sources":["../node_modules/jsroot/modules/draw/TPolyMarker3D.mjs","../node_modules/jsroot/modules/draw/more.mjs","../node_modules/jsroot/modules/hist/TF1Painter.mjs","../node_modules/jsroot/modules/hist/TGraphPainter.mjs"],"sourcesContent":["import { REVISION } from '../three.mjs';\nimport { settings, isObject } from '../core.mjs';\nimport { PointsCreator } from '../base/base3d.mjs';\n\n/** @summary direct draw function for TPolyMarker3D object\n * @private */\nasync function drawPolyMarker3D() {\n\n let fp = this.$fp || this.getFramePainter();\n\n delete this.$fp;\n\n if (!isObject(fp) || !fp.grx || !fp.gry || !fp.grz)\n return this;\n\n let poly = this.getObject(), step = 1, sizelimit = 50000, numselect = 0, fP = poly.fP;\n\n for (let i = 0; i < fP.length; i += 3) {\n if ((fP[i] < fp.scale_xmin) || (fP[i] > fp.scale_xmax) ||\n (fP[i+1] < fp.scale_ymin) || (fP[i+1] > fp.scale_ymax) ||\n (fP[i+2] < fp.scale_zmin) || (fP[i+2] > fp.scale_zmax)) continue;\n ++numselect;\n }\n\n if ((settings.OptimizeDraw > 0) && (numselect > sizelimit)) {\n step = Math.floor(numselect/sizelimit);\n if (step <= 2) step = 2;\n }\n\n let size = Math.floor(numselect/step),\n pnts = new PointsCreator(size, fp.webgl, fp.size_x3d/100),\n index = new Int32Array(size),\n select = 0, icnt = 0;\n\n for (let i = 0; i < fP.length; i += 3) {\n\n if ((fP[i] < fp.scale_xmin) || (fP[i] > fp.scale_xmax) ||\n (fP[i+1] < fp.scale_ymin) || (fP[i+1] > fp.scale_ymax) ||\n (fP[i+2] < fp.scale_zmin) || (fP[i+2] > fp.scale_zmax)) continue;\n\n if (step > 1) {\n select = (select+1) % step;\n if (select !== 0) continue;\n }\n\n index[icnt++] = i;\n\n pnts.addPoint(fp.grx(fP[i]), fp.gry(fP[i+1]), fp.grz(fP[i+2]));\n }\n\n return pnts.createPoints({ color: this.getColor(poly.fMarkerColor), style: poly.fMarkerStyle }).then(mesh => {\n\n mesh.tip_color = (poly.fMarkerColor === 3) ? 0xFF0000 : 0x00FF00;\n mesh.tip_name = poly.fName || 'Poly3D';\n mesh.poly = poly;\n mesh.painter = fp;\n mesh.scale0 = 0.7*pnts.scale;\n mesh.index = index;\n\n fp.toplevel.add(mesh);\n\n mesh.tooltip = function(intersect) {\n if (!Number.isInteger(intersect.index)) {\n console.error(`intersect.index not provided, three.js version ${REVISION}`);\n return null;\n }\n let indx = Math.floor(intersect.index / this.nvertex);\n if ((indx < 0) || (indx >= this.index.length)) return null;\n\n indx = this.index[indx];\n\n let p = this.painter,\n grx = p.grx(this.poly.fP[indx]),\n gry = p.gry(this.poly.fP[indx+1]),\n grz = p.grz(this.poly.fP[indx+2]);\n\n return {\n x1: grx - this.scale0,\n x2: grx + this.scale0,\n y1: gry - this.scale0,\n y2: gry + this.scale0,\n z1: grz - this.scale0,\n z2: grz + this.scale0,\n color: this.tip_color,\n lines: [ this.tip_name,\n 'pnt: ' + indx/3,\n 'x: ' + p.axisAsText('x', this.poly.fP[indx]),\n 'y: ' + p.axisAsText('y', this.poly.fP[indx+1]),\n 'z: ' + p.axisAsText('z', this.poly.fP[indx+2])\n ]\n };\n };\n\n fp.render3D(100); // set timeout to be able draw other points\n\n return this;\n });\n}\n\nexport { drawPolyMarker3D };\n","import { BIT, isBatchMode, clTLatex, clTMathText, clTPolyLine } from '../core.mjs';\nimport { rgb as d3_rgb } from '../d3.mjs';\nimport { BasePainter } from '../base/BasePainter.mjs';\nimport { ObjectPainter } from '../base/ObjectPainter.mjs';\nimport { TAttMarkerHandler } from '../base/TAttMarkerHandler.mjs';\nimport { TAttLineHandler } from '../base/TAttLineHandler.mjs';\nimport { ensureTCanvas } from '../gpad/TCanvasPainter.mjs';\nimport { addMoveHandler } from '../gui/utils.mjs';\n\n\n/** @summary Draw TText\n * @private */\nasync function drawText() {\n let text = this.getObject(),\n pp = this.getPadPainter(),\n w = pp.getPadWidth(),\n h = pp.getPadHeight(),\n pos_x = text.fX, pos_y = text.fY,\n tcolor = this.getColor(text.fTextColor),\n use_frame = false,\n fact = 1., textsize = text.fTextSize || 0.05,\n main = this.getFramePainter();\n\n if (text.TestBit(BIT(14))) {\n // NDC coordinates\n this.isndc = true;\n } else if (main && !main.mode3d) {\n // frame coordiantes\n w = main.getFrameWidth();\n h = main.getFrameHeight();\n use_frame = 'upper_layer';\n } else if (pp.getRootPad(true)) {\n // force pad coordiantes\n } else {\n // place in the middle\n this.isndc = true;\n pos_x = pos_y = 0.5;\n text.fTextAlign = 22;\n if (!tcolor) tcolor = 'black';\n }\n\n this.createG(use_frame);\n\n this.draw_g.attr('transform', null); // remove transofrm from interactive changes\n\n this.pos_x = this.axisToSvg('x', pos_x, this.isndc);\n this.pos_y = this.axisToSvg('y', pos_y, this.isndc);\n\n let arg = { align: text.fTextAlign, x: this.pos_x, y: this.pos_y, text: text.fTitle, color: tcolor, latex: 0 };\n\n if (text.fTextAngle) arg.rotate = -text.fTextAngle;\n\n if (text._typename == clTLatex) {\n arg.latex = 1;\n fact = 0.9;\n } else if (text._typename == clTMathText) {\n arg.latex = 2;\n fact = 0.8;\n }\n\n this.startTextDrawing(text.fTextFont, Math.round((textsize > 1) ? textsize : textsize*Math.min(w,h)*fact));\n\n this.drawText(arg);\n\n return this.finishTextDrawing().then(() => {\n if (isBatchMode()) return this;\n\n this.pos_dx = this.pos_dy = 0;\n\n if (!this.moveDrag)\n this.moveDrag = function(dx,dy) {\n this.pos_dx += dx;\n this.pos_dy += dy;\n this.draw_g.attr('transform', `translate(${this.pos_dx},${this.pos_dy})`);\n }\n\n if (!this.moveEnd)\n this.moveEnd = function(not_changed) {\n if (not_changed) return;\n let text = this.getObject();\n text.fX = this.svgToAxis('x', this.pos_x + this.pos_dx, this.isndc),\n text.fY = this.svgToAxis('y', this.pos_y + this.pos_dy, this.isndc);\n this.submitCanvExec(`SetX(${text.fX});;SetY(${text.fY});;`);\n }\n\n addMoveHandler(this);\n\n return this;\n });\n}\n\n/** @summary Draw TLine\n * @private */\nasync function drawTLine(dom, obj) {\n let painter = new ObjectPainter(dom, obj);\n\n painter.redraw = function() {\n const kLineNDC = BIT(14),\n line = this.getObject(),\n lineatt = new TAttLineHandler(line),\n isndc = line.TestBit(kLineNDC);\n\n this.createG();\n\n this.draw_g\n .append('svg:path')\n .attr('d', `M${this.axisToSvg('x',line.fX1,isndc)},${this.axisToSvg('y',line.fY1,isndc)}L${this.axisToSvg('x',line.fX2,isndc)},${this.axisToSvg('y',line.fY2,isndc)}`)\n .call(lineatt.func);\n\n return this;\n }\n\n return ensureTCanvas(painter, false).then(() => painter.redraw());\n}\n\n/** @summary Draw TPolyLine\n * @private */\nfunction drawPolyLine() {\n\n this.createG();\n\n let polyline = this.getObject(),\n lineatt = new TAttLineHandler(polyline),\n fillatt = this.createAttFill(polyline),\n kPolyLineNDC = BIT(14),\n isndc = polyline.TestBit(kPolyLineNDC),\n cmd = '', func = this.getAxisToSvgFunc(isndc);\n\n for (let n = 0; n <= polyline.fLastPoint; ++n)\n cmd += `${n>0?'L':'M'}${func.x(polyline.fX[n])},${func.y(polyline.fY[n])}`;\n\n if (polyline._typename != clTPolyLine)\n fillatt.setSolidColor('none');\n\n if (!fillatt.empty())\n cmd += 'Z';\n\n this.draw_g\n .append('svg:path')\n .attr('d', cmd)\n .call(lineatt.func)\n .call(fillatt.func);\n}\n\n/** @summary Draw TEllipse\n * @private */\nfunction drawEllipse() {\n\n let ellipse = this.getObject();\n\n this.createAttLine({ attr: ellipse });\n this.createAttFill({ attr: ellipse });\n\n this.createG();\n\n let funcs = this.getAxisToSvgFunc(),\n x = funcs.x(ellipse.fX1),\n y = funcs.y(ellipse.fY1),\n rx = funcs.x(ellipse.fX1 + ellipse.fR1) - x,\n ry = y - funcs.y(ellipse.fY1 + ellipse.fR2),\n path = '', closed_ellipse = (ellipse.fPhimin == 0) && (ellipse.fPhimax == 360);\n\n // handle same as ellipse with equal radius\n if ((ellipse._typename == 'TCrown') && (ellipse.fR1 <= 0))\n rx = funcs.x(ellipse.fX1 + ellipse.fR2) - x;\n\n if ((ellipse._typename == 'TCrown') && (ellipse.fR1 > 0)) {\n let rx1 = rx, ry2 = ry,\n ry1 = y - funcs.y(ellipse.fY1 + ellipse.fR1),\n rx2 = funcs.x(ellipse.fX1 + ellipse.fR2) - x;\n\n if (closed_ellipse) {\n path = `M${-rx1},0A${rx1},${ry1},0,1,0,${rx1},0A${rx1},${ry1},0,1,0,${-rx1},0` +\n `M${-rx2},0A${rx2},${ry2},0,1,0,${rx2},0A${rx2},${ry2},0,1,0,${-rx2},0`;\n } else {\n let large_arc = (ellipse.fPhimax-ellipse.fPhimin>=180) ? 1 : 0,\n a1 = ellipse.fPhimin*Math.PI/180, a2 = ellipse.fPhimax*Math.PI/180,\n dx1 = Math.round(rx1*Math.cos(a1)), dy1 = Math.round(ry1*Math.sin(a1)),\n dx2 = Math.round(rx1*Math.cos(a2)), dy2 = Math.round(ry1*Math.sin(a2)),\n dx3 = Math.round(rx2*Math.cos(a1)), dy3 = Math.round(ry2*Math.sin(a1)),\n dx4 = Math.round(rx2*Math.cos(a2)), dy4 = Math.round(ry2*Math.sin(a2));\n\n path = `M${dx2},${dy2}A${rx1},${ry1},0,${large_arc},0,${dx1},${dy1}` +\n `L${dx3},${dy3}A${rx2},${ry2},0,${large_arc},1,${dx4},${dy4}Z`;\n }\n } else if (ellipse.fTheta == 0) {\n if (closed_ellipse) {\n path = `M${-rx},0A${rx},${ry},0,1,0,${rx},0A${rx},${ry},0,1,0,${-rx},0Z`;\n } else {\n let x1 = Math.round(rx * Math.cos(ellipse.fPhimin*Math.PI/180)),\n y1 = Math.round(ry * Math.sin(ellipse.fPhimin*Math.PI/180)),\n x2 = Math.round(rx * Math.cos(ellipse.fPhimax*Math.PI/180)),\n y2 = Math.round(ry * Math.sin(ellipse.fPhimax*Math.PI/180));\n path = `M0,0L${x1},${y1}A${rx},${ry},0,1,1,${x2},${y2}Z`;\n }\n } else {\n let ct = Math.cos(ellipse.fTheta*Math.PI/180),\n st = Math.sin(ellipse.fTheta*Math.PI/180),\n phi1 = ellipse.fPhimin*Math.PI/180,\n phi2 = ellipse.fPhimax*Math.PI/180,\n np = 200,\n dphi = (phi2-phi1) / (np - (closed_ellipse ? 0 : 1)),\n lastx = 0, lasty = 0;\n if (!closed_ellipse) path = 'M0,0';\n for (let n = 0; n < np; ++n) {\n let angle = phi1 + n*dphi,\n dx = ellipse.fR1 * Math.cos(angle),\n dy = ellipse.fR2 * Math.sin(angle),\n px = funcs.x(ellipse.fX1 + dx*ct - dy*st) - x,\n py = funcs.y(ellipse.fY1 + dx*st + dy*ct) - y;\n if (!path)\n path = `M${px},${py}`;\n else if (lastx == px)\n path += `v${py-lasty}`;\n else if (lasty == py)\n path += `h${px-lastx}`;\n else\n path += `l${px-lastx},${py-lasty}`;\n lastx = px; lasty = py;\n }\n path += 'Z';\n }\n\n this.draw_g\n .append('svg:path')\n .attr('transform',`translate(${x},${y})`)\n .attr('d', path)\n .call(this.lineatt.func).call(this.fillatt.func);\n}\n\n/** @summary Draw TPie\n * @private */\nfunction drawPie() {\n let pie = this.getObject();\n\n this.createG();\n\n let xc = this.axisToSvg('x', pie.fX),\n yc = this.axisToSvg('y', pie.fY),\n rx = this.axisToSvg('x', pie.fX + pie.fRadius) - xc,\n ry = this.axisToSvg('y', pie.fY + pie.fRadius) - yc;\n\n this.draw_g.attr('transform', `translate(${xc},${yc})`);\n\n // Draw the slices\n let nb = pie.fPieSlices.length, total = 0,\n af = (pie.fAngularOffset*Math.PI)/180,\n x1 = Math.round(rx*Math.cos(af)),\n y1 = Math.round(ry*Math.sin(af));\n\n for (let n = 0; n < nb; n++)\n total += pie.fPieSlices[n].fValue;\n\n for (let n = 0; n < nb; n++) {\n let slice = pie.fPieSlices[n],\n lineatt = new TAttLineHandler({attr: slice}),\n fillatt = this.createAttFill(slice);\n\n af += slice.fValue/total*2*Math.PI;\n let x2 = Math.round(rx*Math.cos(af)), y2 = Math.round(ry*Math.sin(af));\n\n this.draw_g\n .append('svg:path')\n .attr('d', `M0,0L${x1},${y1}A${rx},${ry},0,0,0,${x2},${y2}z`)\n .call(lineatt.func)\n .call(fillatt.func);\n x1 = x2; y1 = y2;\n }\n}\n\n/** @summary Draw TBox\n * @private */\nfunction drawBox() {\n let box = this.getObject(),\n opt = this.getDrawOpt(),\n draw_line = (opt.toUpperCase().indexOf('L') >= 0),\n lineatt = this.createAttLine(box),\n fillatt = this.createAttFill(box);\n\n this.createG();\n\n let x1 = this.axisToSvg('x', box.fX1),\n x2 = this.axisToSvg('x', box.fX2),\n y1 = this.axisToSvg('y', box.fY1),\n y2 = this.axisToSvg('y', box.fY2),\n xx = Math.min(x1,x2), yy = Math.min(y1,y2),\n ww = Math.abs(x2-x1), hh = Math.abs(y1-y2);\n\n // if box filled, contour line drawn only with 'L' draw option:\n if (!fillatt.empty() && !draw_line) lineatt.color = 'none';\n\n this.draw_g\n .append('svg:path')\n .attr('d', `M${xx},${yy}h${ww}v${hh}h${-ww}z`)\n .call(lineatt.func)\n .call(fillatt.func);\n\n if (box.fBorderMode && box.fBorderSize && fillatt.hasColor()) {\n let pww = box.fBorderSize, phh = box.fBorderSize,\n side1 = `M${xx},${yy}h${ww}l${-pww},${phh}h${2*pww-ww}v${hh-2*phh}l${-pww},${phh}z`,\n side2 = `M${xx+ww},${yy+hh}v${-hh}l${-pww},${phh}v${hh-2*phh}h${2*pww-ww}l${-pww},${phh}z`;\n\n if (box.fBorderMode < 0) { let s = side1; side1 = side2; side2 = s; }\n\n this.draw_g.append('svg:path')\n .attr('d', side1)\n .call(fillatt.func)\n .style('fill', d3_rgb(fillatt.color).brighter(0.5).formatHex());\n\n this.draw_g.append('svg:path')\n .attr('d', side2)\n .call(fillatt.func)\n .style('fill', d3_rgb(fillatt.color).darker(0.5).formatHex());\n }\n}\n\n/** @summary Draw TMarker\n * @private */\nfunction drawMarker() {\n const marker = this.getObject(),\n att = new TAttMarkerHandler(marker),\n kMarkerNDC = BIT(14),\n isndc = marker.TestBit(kMarkerNDC);\n\n this.createG();\n\n let x = this.axisToSvg('x', marker.fX, isndc),\n y = this.axisToSvg('y', marker.fY, isndc),\n path = att.create(x, y);\n\n if (path)\n this.draw_g.append('svg:path')\n .attr('d', path)\n .call(att.func);\n}\n\n/** @summary Draw TPolyMarker\n * @private */\nfunction drawPolyMarker() {\n this.createG();\n\n let poly = this.getObject(),\n att = new TAttMarkerHandler(poly),\n path = '',\n func = this.getAxisToSvgFunc();\n\n for (let n = 0; n < poly.fN; ++n)\n path += att.create(func.x(poly.fX[n]), func.y(poly.fY[n]));\n\n if (path)\n this.draw_g.append('svg:path')\n .attr('d', path)\n .call(att.func);\n}\n\n/** @summary Draw JS image\n * @private */\nfunction drawJSImage(dom, obj, opt) {\n let painter = new BasePainter(dom),\n main = painter.selectDom(),\n img = main.append('img').attr('src', obj.fName).attr('title', obj.fTitle || obj.fName);\n\n if (opt && opt.indexOf('scale') >= 0) {\n img.style('width','100%').style('height','100%');\n } else if (opt && opt.indexOf('center') >= 0) {\n main.style('position', 'relative');\n img.attr('style', 'margin: 0; position: absolute; top: 50%; left: 50%; transform: translate(-50%, -50%);');\n }\n\n painter.setTopPainter();\n\n return painter;\n}\n\nexport { drawText, drawTLine, drawPolyLine, drawEllipse, drawPie, drawBox,\n drawMarker, drawPolyMarker, drawJSImage };\n","import { settings, create, gStyle, isStr, clTF2 } from '../core.mjs';\nimport { DrawOptions, buildSvgPath } from '../base/BasePainter.mjs';\nimport { ObjectPainter } from '../base/ObjectPainter.mjs';\nimport { TH1Painter } from '../hist2d/TH1Painter.mjs';\nimport * as jsroot_math from '../base/math.mjs';\n\n\nfunction proivdeEvalPar(obj) {\n\n obj._math = jsroot_math;\n\n let _func = obj.fTitle, isformula = false, pprefix = '[';\n if (_func === 'gaus') _func = 'gaus(0)';\n if (obj.fFormula && isStr(obj.fFormula.fFormula)) {\n if (obj.fFormula.fFormula.indexOf('[](double*x,double*p)') == 0) {\n isformula = true; pprefix = 'p[';\n _func = obj.fFormula.fFormula.slice(21);\n } else {\n _func = obj.fFormula.fFormula;\n pprefix = '[p';\n }\n\n if (obj.fFormula.fClingParameters && obj.fFormula.fParams)\n obj.fFormula.fParams.forEach(pair => {\n let regex = new RegExp(`(\\\\[${pair.first}\\\\])`, 'g'),\n parvalue = obj.fFormula.fClingParameters[pair.second];\n _func = _func.replace(regex, (parvalue < 0) ? `(${parvalue})` : parvalue);\n });\n }\n\n if ('formulas' in obj)\n obj.formulas.forEach(entry => {\n _func = _func.replaceAll(entry.fName, entry.fTitle);\n });\n\n _func = _func.replace(/\\b(abs)\\b/g, 'TMath::Abs')\n .replace(/\\b(TMath::Exp)/g, 'Math.exp')\n .replace(/\\b(TMath::Abs)/g, 'Math.abs');\n\n _func = _func.replace(/xygaus\\(/g, 'this._math.gausxy(this, x, y, ')\n .replace(/gaus\\(/g, 'this._math.gaus(this, x, ')\n .replace(/gausn\\(/g, 'this._math.gausn(this, x, ')\n .replace(/expo\\(/g, 'this._math.expo(this, x, ')\n .replace(/landau\\(/g, 'this._math.landau(this, x, ')\n .replace(/landaun\\(/g, 'this._math.landaun(this, x, ')\n .replace(/TMath::/g, 'this._math.')\n .replace(/ROOT::Math::/g, 'this._math.');\n\n for (let i = 0; i < obj.fNpar; ++i)\n _func = _func.replaceAll(pprefix + i + ']', `(${obj.GetParValue(i)})`);\n\n _func = _func.replace(/\\b(sin)\\b/gi, 'Math.sin')\n .replace(/\\b(cos)\\b/gi, 'Math.cos')\n .replace(/\\b(tan)\\b/gi, 'Math.tan')\n .replace(/\\b(exp)\\b/gi, 'Math.exp')\n .replace(/\\b(pow)\\b/gi, 'Math.pow')\n .replace(/pi/g, 'Math.PI');\n for (let n = 2; n < 10; ++n)\n _func = _func.replaceAll(`x^${n}`, `Math.pow(x,${n})`);\n\n if (isformula) {\n _func = _func.replace(/x\\[0\\]/g,'x');\n if (obj._typename === clTF2) {\n _func = _func.replace(/x\\[1\\]/g,'y');\n obj.evalPar = new Function('x', 'y', _func).bind(obj);\n } else {\n obj.evalPar = new Function('x', _func).bind(obj);\n }\n } else if (obj._typename === clTF2)\n obj.evalPar = new Function('x', 'y', 'return ' + _func).bind(obj);\n else\n obj.evalPar = new Function('x', 'return ' + _func).bind(obj);\n}\n\n/**\n * @summary Painter for TF1 object\n *\n * @private\n */\n\nclass TF1Painter extends ObjectPainter {\n\n /** @summary Create bins for TF1 drawing */\n createBins(ignore_zoom) {\n let tf1 = this.getObject(),\n main = this.getFramePainter(),\n gxmin = 0, gxmax = 0;\n\n if (main && !ignore_zoom) {\n let gr = main.getGrFuncs(this.second_x, this.second_y);\n gxmin = gr.scale_xmin;\n gxmax = gr.scale_xmax;\n }\n\n let xmin = tf1.fXmin, xmax = tf1.fXmax, logx = false;\n\n if (gxmin !== gxmax) {\n if (gxmin > xmin) xmin = gxmin;\n if (gxmax < xmax) xmax = gxmax;\n }\n\n if (main && main.logx && (xmin > 0) && (xmax > 0)) {\n logx = true;\n xmin = Math.log(xmin);\n xmax = Math.log(xmax);\n }\n\n let np = Math.max(tf1.fNpx, 101),\n dx = (xmax - xmin) / (np - 1),\n res = [], iserror = false,\n has_saved_points = tf1.fSave.length > 3,\n force_use_save = has_saved_points && (ignore_zoom || settings.PreferSavedPoints);\n\n if (!force_use_save) {\n if (!tf1.evalPar)\n proivdeEvalPar(tf1);\n\n for (let n = 0; n < np; n++) {\n let x = xmin + n*dx, y = 0;\n if (logx) x = Math.exp(x);\n try {\n y = tf1.evalPar(x);\n } catch(err) {\n iserror = true;\n }\n\n if (iserror) break;\n\n if (Number.isFinite(y))\n res.push({ x, y });\n }\n }\n\n // in the case there were points have saved and we cannot calculate function\n // if we don't have the user's function\n if ((iserror || ignore_zoom || !res.length) && has_saved_points) {\n\n np = tf1.fSave.length - 2;\n xmin = tf1.fSave[np];\n xmax = tf1.fSave[np+1];\n res = [];\n dx = 0;\n let use_histo = tf1.$histo && (xmin === xmax), bin = 0;\n\n if (use_histo) {\n xmin = tf1.fSave[--np];\n bin = tf1.$histo.fXaxis.FindBin(xmin, 0);\n } else {\n dx = (xmax - xmin) / (np-1);\n }\n\n for (let n = 0; n < np; ++n) {\n let x = use_histo ? tf1.$histo.fXaxis.GetBinCenter(bin+n+1) : xmin + dx*n;\n // check if points need to be displayed at all, keep at least 4-5 points for Bezier curves\n if ((gxmin !== gxmax) && ((x + 2*dx < gxmin) || (x - 2*dx > gxmax))) continue;\n let y = tf1.fSave[n];\n\n if (Number.isFinite(y)) res.push({ x, y });\n }\n }\n\n return res;\n }\n\n /** @summary Create histogram for axes drawing */\n createDummyHisto() {\n\n let xmin = 0, xmax = 1, ymin = 0, ymax = 1,\n bins = this.createBins(true);\n\n if (bins?.length) {\n\n xmin = xmax = bins[0].x;\n ymin = ymax = bins[0].y;\n\n bins.forEach(bin => {\n xmin = Math.min(bin.x, xmin);\n xmax = Math.max(bin.x, xmax);\n ymin = Math.min(bin.y, ymin);\n ymax = Math.max(bin.y, ymax);\n });\n\n if (ymax > 0.0) ymax *= (1 + gStyle.fHistTopMargin);\n if (ymin < 0.0) ymin *= (1 + gStyle.fHistTopMargin);\n }\n\n let histo = create('TH1I'),\n tf1 = this.getObject();\n\n histo.fName = tf1.fName + '_hist';\n histo.fTitle = tf1.fTitle;\n\n histo.fXaxis.fXmin = xmin;\n histo.fXaxis.fXmax = xmax;\n histo.fYaxis.fXmin = ymin;\n histo.fYaxis.fXmax = ymax;\n\n histo.fMinimum = tf1.fMinimum;\n histo.fMaximum = tf1.fMaximum;\n\n return histo;\n }\n\n updateObject(obj /*, opt */) {\n if (!this.matchObjectType(obj)) return false;\n let tf1 = this.getObject();\n Object.assign(tf1, obj);\n delete tf1.evalPar;\n return true;\n }\n\n /** @summary Process tooltip event */\n processTooltipEvent(pnt) {\n let cleanup = false;\n\n if (!pnt || !this.bins || pnt.disabled) {\n cleanup = true;\n } else if (!this.bins.length || (pnt.x < this.bins[0].grx) || (pnt.x > this.bins[this.bins.length-1].grx)) {\n cleanup = true;\n }\n\n if (cleanup) {\n if (this.draw_g)\n this.draw_g.select('.tooltip_bin').remove();\n return null;\n }\n\n let min = 100000, best = -1, bin;\n\n for(let n = 0; n < this.bins.length; ++n) {\n bin = this.bins[n];\n let dist = Math.abs(bin.grx - pnt.x);\n if (dist < min) { min = dist; best = n; }\n }\n\n bin = this.bins[best];\n\n let gbin = this.draw_g.select('.tooltip_bin'),\n radius = this.lineatt.width + 3;\n\n if (gbin.empty())\n gbin = this.draw_g.append('svg:circle')\n .attr('class', 'tooltip_bin')\n .style('pointer-events', 'none')\n .attr('r', radius)\n .call(this.lineatt.func)\n .call(this.fillatt.func);\n\n let res = { name: this.getObject().fName,\n title: this.getObject().fTitle,\n x: bin.grx,\n y: bin.gry,\n color1: this.lineatt.color,\n color2: this.fillatt.getFillColor(),\n lines: [],\n exact: (Math.abs(bin.grx - pnt.x) < radius) && (Math.abs(bin.gry - pnt.y) < radius) };\n\n res.changed = gbin.property('current_bin') !== best;\n res.menu = res.exact;\n res.menu_dist = Math.sqrt((bin.grx - pnt.x)**2 + (bin.gry - pnt.y)**2);\n\n if (res.changed)\n gbin.attr('cx', bin.grx)\n .attr('cy', bin.gry)\n .property('current_bin', best);\n\n let name = this.getObjectHint();\n if (name) res.lines.push(name);\n\n let pmain = this.getFramePainter(),\n funcs = pmain?.getGrFuncs(this.second_x, this.second_y);\n if (funcs)\n res.lines.push(`x = ${funcs.axisAsText('x',bin.x)} y = ${funcs.axisAsText('y',bin.y)}`);\n\n return res;\n }\n\n /** @summary Redraw function */\n redraw() {\n\n let tf1 = this.getObject(),\n fp = this.getFramePainter(),\n h = fp.getFrameHeight(),\n pmain = this.getMainPainter();\n\n this.createG(true);\n\n // recalculate drawing bins when necessary\n this.bins = this.createBins(false);\n\n this.createAttLine({ attr: tf1 });\n this.lineatt.used = false;\n\n this.createAttFill({ attr: tf1, kind: 1 });\n this.fillatt.used = false;\n\n let funcs = fp.getGrFuncs(this.second_x, this.second_y);\n\n // first calculate graphical coordinates\n for(let n = 0; n < this.bins.length; ++n) {\n let bin = this.bins[n];\n bin.grx = funcs.grx(bin.x);\n bin.gry = funcs.gry(bin.y);\n }\n\n if (this.bins.length > 2) {\n\n let h0 = h; // use maximal frame height for filling\n if (pmain.hmin && (pmain.hmin >= 0)) {\n h0 = Math.round(funcs.gry(0));\n if ((h0 > h) || (h0 < 0)) h0 = h;\n }\n\n let path = buildSvgPath('bezier', this.bins, h0, 2);\n\n if (!this.lineatt.empty())\n this.draw_g.append('svg:path')\n .attr('class', 'line')\n .attr('d', path.path)\n .style('fill', 'none')\n .call(this.lineatt.func);\n\n if (!this.fillatt.empty())\n this.draw_g.append('svg:path')\n .attr('class', 'area')\n .attr('d', path.path + path.close)\n .call(this.fillatt.func);\n }\n }\n\n /** @summary Checks if it makes sense to zoom inside specified axis range */\n canZoomInside(axis,min,max) {\n if (axis !== 'x') return false;\n\n let tf1 = this.getObject();\n\n if (tf1.fSave.length > 0) {\n // in the case where the points have been saved, useful for example\n // if we don't have the user's function\n let nb_points = tf1.fNpx,\n xmin = tf1.fSave[nb_points + 1],\n xmax = tf1.fSave[nb_points + 2];\n\n return Math.abs(xmin - xmax) / nb_points < Math.abs(min - max);\n }\n\n // if function calculated, one always could zoom inside\n return true;\n }\n\n /** @summary draw TF1 object */\n static async draw(dom, tf1, opt) {\n let painter = new TF1Painter(dom, tf1, opt),\n d = new DrawOptions(opt),\n has_main = !!painter.getMainPainter(),\n aopt = 'AXIS';\n d.check('SAME'); // just ignore same\n if (d.check('X+')) { aopt += 'X+'; painter.second_x = has_main; }\n if (d.check('Y+')) { aopt += 'Y+'; painter.second_y = has_main; }\n if (d.check('RX')) aopt += 'RX';\n if (d.check('RY')) aopt += 'RY';\n\n let pr = Promise.resolve(true);\n\n if (!has_main || painter.second_x || painter.second_y)\n pr = TH1Painter.draw(dom, painter.createDummyHisto(), aopt);\n\n return pr.then(() => {\n painter.addToPadPrimitives();\n painter.redraw();\n return painter;\n });\n }\n\n} // class TF1Painter\n\nexport { TF1Painter, proivdeEvalPar };\n","import { TGraphPainter as TGraphPainter2D } from '../hist2d/TGraphPainter.mjs';\nimport { TH1Painter } from './TH1Painter.mjs';\nimport { createLineSegments, create3DLineMaterial } from '../base/base3d.mjs';\n\n\nclass TGraphPainter extends TGraphPainter2D {\n\n /** @summary Draw TGraph points in 3D\n * @private */\n drawBins3D(fp, graph) {\n\n if (!fp.mode3d || !fp.grx || !fp.gry || !fp.grz || !fp.toplevel)\n return console.log('Frame painter missing base 3d elements');\n\n if (fp.zoom_xmin != fp.zoom_xmax)\n if ((this.options.pos3d < fp.zoom_xmin) || (this.options.pos3d > fp.zoom_xmax)) return;\n\n let drawbins = this.optimizeBins(1000),\n first = 0, last = drawbins.length-1;\n\n if (fp.zoom_ymin != fp.zoom_ymax) {\n while ((first < last) && (drawbins[first].x < fp.zoom_ymin)) first++;\n while ((first < last) && (drawbins[last].x > fp.zoom_ymax)) last--;\n }\n\n if (first == last) return;\n\n let pnts = [], grx = fp.grx(this.options.pos3d),\n p0 = drawbins[first];\n\n for (let n = first + 1; n <= last; ++n) {\n let p1 = drawbins[n];\n pnts.push(grx, fp.gry(p0.x), fp.grz(p0.y),\n grx, fp.gry(p1.x), fp.grz(p1.y));\n p0 = p1;\n }\n\n let lines = createLineSegments(pnts, create3DLineMaterial(this, graph));\n\n fp.toplevel.add(lines);\n\n fp.render3D(100);\n }\n\n /** @summary Draw axis histogram\n * @private */\n async drawAxisHisto() {\n return TH1Painter.draw(this.getDom(), this.createHistogram(), this.options.Axis);\n }\n\n static async draw(dom, graph, opt) {\n return TGraphPainter._drawGraph(new TGraphPainter(dom, graph), opt);\n }\n\n} // class TGraphPainter\n\nexport { TGraphPainter };\n"],"x_google_ignoreList":[0,1,2,3]} \ No newline at end of file diff --git a/docs/index.html b/docs/index.html index 2e447d9e6..b3163dce7 100644 --- a/docs/index.html +++ b/docs/index.html @@ -24,10 +24,10 @@ - + - + \ No newline at end of file diff --git a/docs/main.46d6821a25958691.js b/docs/main.46d6821a25958691.js deleted file mode 100644 index bba98552a..000000000 --- a/docs/main.46d6821a25958691.js +++ /dev/null @@ -1,4 +0,0 @@ -(self.webpackChunkphoenix_app=self.webpackChunkphoenix_app||[]).push([[179],{2699:(jr,At,Me)=>{"use strict";function ze(i){return"function"==typeof i}function M(i){const t=i(n=>{Error.call(n),n.stack=(new Error).stack});return t.prototype=Object.create(Error.prototype),t.prototype.constructor=t,t}const L=M(i=>function(t){i(this),this.message=t?`${t.length} errors occurred during unsubscription:\n${t.map((n,r)=>`${r+1}) ${n.toString()}`).join("\n ")}`:"",this.name="UnsubscriptionError",this.errors=t});function _e(i,e){if(i){const t=i.indexOf(e);0<=t&&i.splice(t,1)}}class De{constructor(e){this.initialTeardown=e,this.closed=!1,this._parentage=null,this._finalizers=null}unsubscribe(){let e;if(!this.closed){this.closed=!0;const{_parentage:t}=this;if(t)if(this._parentage=null,Array.isArray(t))for(const s of t)s.remove(this);else t.remove(this);const{initialTeardown:n}=this;if(ze(n))try{n()}catch(s){e=s instanceof L?s.errors:[s]}const{_finalizers:r}=this;if(r){this._finalizers=null;for(const s of r)try{Ie(s)}catch(a){e=e??[],a instanceof L?e=[...e,...a.errors]:e.push(a)}}if(e)throw new L(e)}}add(e){var t;if(e&&e!==this)if(this.closed)Ie(e);else{if(e instanceof De){if(e.closed||e._hasParent(this))return;e._addParent(this)}(this._finalizers=null!==(t=this._finalizers)&&void 0!==t?t:[]).push(e)}}_hasParent(e){const{_parentage:t}=this;return t===e||Array.isArray(t)&&t.includes(e)}_addParent(e){const{_parentage:t}=this;this._parentage=Array.isArray(t)?(t.push(e),t):t?[t,e]:e}_removeParent(e){const{_parentage:t}=this;t===e?this._parentage=null:Array.isArray(t)&&_e(t,e)}remove(e){const{_finalizers:t}=this;t&&_e(t,e),e instanceof De&&e._removeParent(this)}}De.EMPTY=(()=>{const i=new De;return i.closed=!0,i})();const $e=De.EMPTY;function Ze(i){return i instanceof De||i&&"closed"in i&&ze(i.remove)&&ze(i.add)&&ze(i.unsubscribe)}function Ie(i){ze(i)?i():i.unsubscribe()}const Ve={onUnhandledError:null,onStoppedNotification:null,Promise:void 0,useDeprecatedSynchronousErrorHandling:!1,useDeprecatedNextContext:!1},Re={setTimeout(i,e,...t){const{delegate:n}=Re;return n?.setTimeout?n.setTimeout(i,e,...t):setTimeout(i,e,...t)},clearTimeout(i){const{delegate:e}=Re;return(e?.clearTimeout||clearTimeout)(i)},delegate:void 0};function ce(i){Re.setTimeout(()=>{const{onUnhandledError:e}=Ve;if(!e)throw i;e(i)})}function Z(){}const Y=J("C",void 0,void 0);function J(i,e,t){return{kind:i,value:e,error:t}}let R=null;function P(i){if(Ve.useDeprecatedSynchronousErrorHandling){const e=!R;if(e&&(R={errorThrown:!1,error:null}),i(),e){const{errorThrown:t,error:n}=R;if(R=null,t)throw n}}else i()}class A extends De{constructor(e){super(),this.isStopped=!1,e?(this.destination=e,Ze(e)&&e.add(this)):this.destination=$}static create(e,t,n){return new k(e,t,n)}next(e){this.isStopped?T(function K(i){return J("N",i,void 0)}(e),this):this._next(e)}error(e){this.isStopped?T(function ue(i){return J("E",void 0,i)}(e),this):(this.isStopped=!0,this._error(e))}complete(){this.isStopped?T(Y,this):(this.isStopped=!0,this._complete())}unsubscribe(){this.closed||(this.isStopped=!0,super.unsubscribe(),this.destination=null)}_next(e){this.destination.next(e)}_error(e){try{this.destination.error(e)}finally{this.unsubscribe()}}_complete(){try{this.destination.complete()}finally{this.unsubscribe()}}}const w=Function.prototype.bind;function m(i,e){return w.call(i,e)}class _{constructor(e){this.partialObserver=e}next(e){const{partialObserver:t}=this;if(t.next)try{t.next(e)}catch(n){F(n)}}error(e){const{partialObserver:t}=this;if(t.error)try{t.error(e)}catch(n){F(n)}else F(e)}complete(){const{partialObserver:e}=this;if(e.complete)try{e.complete()}catch(t){F(t)}}}class k extends A{constructor(e,t,n){let r;if(super(),ze(e)||!e)r={next:e??void 0,error:t??void 0,complete:n??void 0};else{let s;this&&Ve.useDeprecatedNextContext?(s=Object.create(e),s.unsubscribe=()=>this.unsubscribe(),r={next:e.next&&m(e.next,s),error:e.error&&m(e.error,s),complete:e.complete&&m(e.complete,s)}):r=e}this.destination=new _(r)}}function F(i){Ve.useDeprecatedSynchronousErrorHandling?function v(i){Ve.useDeprecatedSynchronousErrorHandling&&R&&(R.errorThrown=!0,R.error=i)}(i):ce(i)}function T(i,e){const{onStoppedNotification:t}=Ve;t&&Re.setTimeout(()=>t(i,e))}const $={closed:!0,next:Z,error:function q(i){throw i},complete:Z},ee="function"==typeof Symbol&&Symbol.observable||"@@observable";function re(i){return i}function he(i){return 0===i.length?re:1===i.length?i[0]:function(t){return i.reduce((n,r)=>r(n),t)}}let de=(()=>{class i{constructor(t){t&&(this._subscribe=t)}lift(t){const n=new i;return n.source=this,n.operator=t,n}subscribe(t,n,r){const s=function H(i){return i&&i instanceof A||function U(i){return i&&ze(i.next)&&ze(i.error)&&ze(i.complete)}(i)&&Ze(i)}(t)?t:new k(t,n,r);return P(()=>{const{operator:a,source:l}=this;s.add(a?a.call(s,l):l?this._subscribe(s):this._trySubscribe(s))}),s}_trySubscribe(t){try{return this._subscribe(t)}catch(n){t.error(n)}}forEach(t,n){return new(n=I(n))((r,s)=>{const a=new k({next:l=>{try{t(l)}catch(u){s(u),a.unsubscribe()}},error:s,complete:r});this.subscribe(a)})}_subscribe(t){var n;return null===(n=this.source)||void 0===n?void 0:n.subscribe(t)}[ee](){return this}pipe(...t){return he(t)(this)}toPromise(t){return new(t=I(t))((n,r)=>{let s;this.subscribe(a=>s=a,a=>r(a),()=>n(s))})}}return i.create=e=>new i(e),i})();function I(i){var e;return null!==(e=i??Ve.Promise)&&void 0!==e?e:Promise}const le=M(i=>function(){i(this),this.name="ObjectUnsubscribedError",this.message="object unsubscribed"});let D=(()=>{class i extends de{constructor(){super(),this.closed=!1,this.currentObservers=null,this.observers=[],this.isStopped=!1,this.hasError=!1,this.thrownError=null}lift(t){const n=new oe(this,this);return n.operator=t,n}_throwIfClosed(){if(this.closed)throw new le}next(t){P(()=>{if(this._throwIfClosed(),!this.isStopped){this.currentObservers||(this.currentObservers=Array.from(this.observers));for(const n of this.currentObservers)n.next(t)}})}error(t){P(()=>{if(this._throwIfClosed(),!this.isStopped){this.hasError=this.isStopped=!0,this.thrownError=t;const{observers:n}=this;for(;n.length;)n.shift().error(t)}})}complete(){P(()=>{if(this._throwIfClosed(),!this.isStopped){this.isStopped=!0;const{observers:t}=this;for(;t.length;)t.shift().complete()}})}unsubscribe(){this.isStopped=this.closed=!0,this.observers=this.currentObservers=null}get observed(){var t;return(null===(t=this.observers)||void 0===t?void 0:t.length)>0}_trySubscribe(t){return this._throwIfClosed(),super._trySubscribe(t)}_subscribe(t){return this._throwIfClosed(),this._checkFinalizedStatuses(t),this._innerSubscribe(t)}_innerSubscribe(t){const{hasError:n,isStopped:r,observers:s}=this;return n||r?$e:(this.currentObservers=null,s.push(t),new De(()=>{this.currentObservers=null,_e(s,t)}))}_checkFinalizedStatuses(t){const{hasError:n,thrownError:r,isStopped:s}=this;n?t.error(r):s&&t.complete()}asObservable(){const t=new de;return t.source=this,t}}return i.create=(e,t)=>new oe(e,t),i})();class oe extends D{constructor(e,t){super(),this.destination=e,this.source=t}next(e){var t,n;null===(n=null===(t=this.destination)||void 0===t?void 0:t.next)||void 0===n||n.call(t,e)}error(e){var t,n;null===(n=null===(t=this.destination)||void 0===t?void 0:t.error)||void 0===n||n.call(t,e)}complete(){var e,t;null===(t=null===(e=this.destination)||void 0===e?void 0:e.complete)||void 0===t||t.call(e)}_subscribe(e){var t,n;return null!==(n=null===(t=this.source)||void 0===t?void 0:t.subscribe(e))&&void 0!==n?n:$e}}function ge(i){return ze(i?.lift)}function Ee(i){return e=>{if(ge(e))return e.lift(function(t){try{return i(t,this)}catch(n){this.error(n)}});throw new TypeError("Unable to lift unknown Observable type")}}function Ge(i,e,t,n,r){return new We(i,e,t,n,r)}class We extends A{constructor(e,t,n,r,s,a){super(e),this.onFinalize=s,this.shouldUnsubscribe=a,this._next=t?function(l){try{t(l)}catch(u){e.error(u)}}:super._next,this._error=r?function(l){try{r(l)}catch(u){e.error(u)}finally{this.unsubscribe()}}:super._error,this._complete=n?function(){try{n()}catch(l){e.error(l)}finally{this.unsubscribe()}}:super._complete}unsubscribe(){var e;if(!this.shouldUnsubscribe||this.shouldUnsubscribe()){const{closed:t}=this;super.unsubscribe(),!t&&(null===(e=this.onFinalize)||void 0===e||e.call(this))}}}function et(i,e){return Ee((t,n)=>{let r=0;t.subscribe(Ge(n,s=>{n.next(i.call(e,s,r++))}))})}function $n(i){return this instanceof $n?(this.v=i,this):new $n(i)}function bn(i,e,t){if(!Symbol.asyncIterator)throw new TypeError("Symbol.asyncIterator is not defined.");var r,n=t.apply(i,e||[]),s=[];return r={},a("next"),a("throw"),a("return"),r[Symbol.asyncIterator]=function(){return this},r;function a(C){n[C]&&(r[C]=function(O){return new Promise(function(Q,W){s.push([C,O,Q,W])>1||l(C,O)})})}function l(C,O){try{!function u(C){C.value instanceof $n?Promise.resolve(C.value.v).then(d,p):y(s[0][2],C)}(n[C](O))}catch(Q){y(s[0][3],Q)}}function d(C){l("next",C)}function p(C){l("throw",C)}function y(C,O){C(O),s.shift(),s.length&&l(s[0][0],s[0][1])}}function qt(i){if(!Symbol.asyncIterator)throw new TypeError("Symbol.asyncIterator is not defined.");var t,e=i[Symbol.asyncIterator];return e?e.call(i):(i=function Ot(i){var e="function"==typeof Symbol&&Symbol.iterator,t=e&&i[e],n=0;if(t)return t.call(i);if(i&&"number"==typeof i.length)return{next:function(){return i&&n>=i.length&&(i=void 0),{value:i&&i[n++],done:!i}}};throw new TypeError(e?"Object is not iterable.":"Symbol.iterator is not defined.")}(i),t={},n("next"),n("throw"),n("return"),t[Symbol.asyncIterator]=function(){return this},t);function n(s){t[s]=i[s]&&function(a){return new Promise(function(l,u){!function r(s,a,l,u){Promise.resolve(u).then(function(d){s({value:d,done:l})},a)}(l,u,(a=i[s](a)).done,a.value)})}}}const Sr=i=>i&&"number"==typeof i.length&&"function"!=typeof i;function Nr(i){return ze(i?.then)}function gr(i){return ze(i[ee])}function hs(i){return Symbol.asyncIterator&&ze(i?.[Symbol.asyncIterator])}function Hs(i){return new TypeError(`You provided ${null!==i&&"object"==typeof i?"an invalid object":`'${i}'`} where a stream was expected. You can provide an Observable, Promise, ReadableStream, Array, AsyncIterable, or Iterable.`)}const po=function Jr(){return"function"==typeof Symbol&&Symbol.iterator?Symbol.iterator:"@@iterator"}();function ao(i){return ze(i?.[po])}function Ms(i){return bn(this,arguments,function*(){const t=i.getReader();try{for(;;){const{value:n,done:r}=yield $n(t.read());if(r)return yield $n(void 0);yield yield $n(n)}}finally{t.releaseLock()}})}function Ds(i){return ze(i?.getReader)}function $o(i){if(i instanceof de)return i;if(null!=i){if(gr(i))return function kl(i){return new de(e=>{const t=i[ee]();if(ze(t.subscribe))return t.subscribe(e);throw new TypeError("Provided object does not correctly implement Symbol.observable")})}(i);if(Sr(i))return function Ao(i){return new de(e=>{for(let t=0;t{i.then(t=>{e.closed||(e.next(t),e.complete())},t=>e.error(t)).then(null,ce)})}(i);if(hs(i))return Tr(i);if(ao(i))return function tl(i){return new de(e=>{for(const t of i)if(e.next(t),e.closed)return;e.complete()})}(i);if(Ds(i))return function bo(i){return Tr(Ms(i))}(i)}throw Hs(i)}function Tr(i){return new de(e=>{(function ja(i,e){var t,n,r,s;return function pt(i,e,t,n){return new(t||(t=Promise))(function(s,a){function l(p){try{d(n.next(p))}catch(y){a(y)}}function u(p){try{d(n.throw(p))}catch(y){a(y)}}function d(p){p.done?s(p.value):function r(s){return s instanceof t?s:new t(function(a){a(s)})}(p.value).then(l,u)}d((n=n.apply(i,e||[])).next())})}(this,void 0,void 0,function*(){try{for(t=qt(i);!(n=yield t.next()).done;)if(e.next(n.value),e.closed)return}catch(a){r={error:a}}finally{try{n&&!n.done&&(s=t.return)&&(yield s.call(t))}finally{if(r)throw r.error}}e.complete()})})(i,e).catch(t=>e.error(t))})}function ho(i,e,t,n=0,r=!1){const s=e.schedule(function(){t(),r?i.add(this.schedule(null,n)):this.unsubscribe()},n);if(i.add(s),!r)return s}function ma(i,e,t=1/0){return ze(e)?ma((n,r)=>et((s,a)=>e(n,s,r,a))($o(i(n,r))),t):("number"==typeof e&&(t=e),Ee((n,r)=>function Ji(i,e,t,n,r,s,a,l){const u=[];let d=0,p=0,y=!1;const C=()=>{y&&!u.length&&!d&&e.complete()},O=W=>d{s&&e.next(W),d++;let se=!1;$o(t(W,p++)).subscribe(Ge(e,ye=>{r?.(ye),s?O(ye):e.next(ye)},()=>{se=!0},void 0,()=>{if(se)try{for(d--;u.length&&dQ(ye)):Q(ye)}C()}catch(ye){e.error(ye)}}))};return i.subscribe(Ge(e,O,()=>{y=!0,C()})),()=>{l?.()}}(n,r,i,t)))}function ba(i=1/0){return ma(re,i)}const Sa=new de(i=>i.complete());function pe(i){return i&&ze(i.schedule)}function rt(i){return i[i.length-1]}function ot(i){return ze(rt(i))?i.pop():void 0}function xt(i){return pe(rt(i))?i.pop():void 0}function pn(i,e=0){return Ee((t,n)=>{t.subscribe(Ge(n,r=>ho(n,i,()=>n.next(r),e),()=>ho(n,i,()=>n.complete(),e),r=>ho(n,i,()=>n.error(r),e)))})}function Wn(i,e=0){return Ee((t,n)=>{n.add(i.schedule(()=>t.subscribe(n),e))})}function Xe(i,e){if(!i)throw new Error("Iterable cannot be null");return new de(t=>{ho(t,e,()=>{const n=i[Symbol.asyncIterator]();ho(t,e,()=>{n.next().then(r=>{r.done?t.complete():t.next(r.value)})},0,!0)})})}function cn(i,e){return e?function it(i,e){if(null!=i){if(gr(i))return function Yn(i,e){return $o(i).pipe(Wn(e),pn(e))}(i,e);if(Sr(i))return function mt(i,e){return new de(t=>{let n=0;return e.schedule(function(){n===i.length?t.complete():(t.next(i[n++]),t.closed||this.schedule())})})}(i,e);if(Nr(i))return function lt(i,e){return $o(i).pipe(Wn(e),pn(e))}(i,e);if(hs(i))return Xe(i,e);if(ao(i))return function Rt(i,e){return new de(t=>{let n;return ho(t,e,()=>{n=i[po](),ho(t,e,()=>{let r,s;try{({value:r,done:s}=n.next())}catch(a){return void t.error(a)}s?t.complete():t.next(r)},0,!0)}),()=>ze(n?.return)&&n.return()})}(i,e);if(Ds(i))return function Lt(i,e){return Xe(Ms(i),e)}(i,e)}throw Hs(i)}(i,e):$o(i)}function It(...i){const e=xt(i),t=function fn(i,e){return"number"==typeof rt(i)?i.pop():e}(i,1/0),n=i;return n.length?1===n.length?$o(n[0]):ba(t)(cn(n,e)):Sa}function Pt(i={}){const{connector:e=(()=>new D),resetOnError:t=!0,resetOnComplete:n=!0,resetOnRefCountZero:r=!0}=i;return s=>{let a,l,u,d=0,p=!1,y=!1;const C=()=>{l?.unsubscribe(),l=void 0},O=()=>{C(),a=u=void 0,p=y=!1},Q=()=>{const W=a;O(),W?.unsubscribe()};return Ee((W,se)=>{d++,!y&&!p&&C();const ye=u=u??e();se.add(()=>{d--,0===d&&!y&&!p&&(l=En(Q,r))}),ye.subscribe(se),!a&&d>0&&(a=new k({next:Le=>ye.next(Le),error:Le=>{y=!0,C(),l=En(O,t,Le),ye.error(Le)},complete:()=>{p=!0,C(),l=En(O,n),ye.complete()}}),$o(W).subscribe(a))})(s)}}function En(i,e,...t){if(!0===e)return void i();if(!1===e)return;const n=new k({next:()=>{n.unsubscribe(),i()}});return $o(e(...t)).subscribe(n)}function Rn(i){for(let e in i)if(i[e]===Rn)return e;throw Error("Could not find renamed property on target object.")}function qi(i,e){for(const t in e)e.hasOwnProperty(t)&&!i.hasOwnProperty(t)&&(i[t]=e[t])}function kn(i){if("string"==typeof i)return i;if(Array.isArray(i))return"["+i.map(kn).join(", ")+"]";if(null==i)return""+i;if(i.overriddenName)return`${i.overriddenName}`;if(i.name)return`${i.name}`;const e=i.toString();if(null==e)return""+e;const t=e.indexOf("\n");return-1===t?e:e.substring(0,t)}function ii(i,e){return null==i||""===i?null===e?"":e:null==e||""===e?i:i+" "+e}const lr=Rn({__forward_ref__:Rn});function ar(i){return i.__forward_ref__=ar,i.toString=function(){return kn(this())},i}function $i(i){return rs(i)?i():i}function rs(i){return"function"==typeof i&&i.hasOwnProperty(lr)&&i.__forward_ref__===ar}function qs(i){return i&&!!i.\u0275providers}const xo="https://g.co/ng/security#xss";class fi extends Error{constructor(e,t){super(function yl(i,e){return`NG0${Math.abs(i)}${e?": "+e.trim():""}`}(e,t)),this.code=e}}function Or(i){return"string"==typeof i?i:null==i?"":String(i)}function $a(i,e){throw new fi(-201,!1)}function E(i,e){null==i&&function z(i,e,t,n){throw new Error(`ASSERTION ERROR: ${i}`+(null==n?"":` [Expected=> ${t} ${n} ${e} <=Actual]`))}(e,i,null,"!=")}function Ue(i){return{token:i.token,providedIn:i.providedIn||null,factory:i.factory,value:void 0}}function ft(i){return{providers:i.providers||[],imports:i.imports||[]}}function vt(i){return hn(i,li)||hn(i,mi)}function hn(i,e){return i.hasOwnProperty(e)?i[e]:null}function An(i){return i&&(i.hasOwnProperty(ti)||i.hasOwnProperty(Xn))?i[ti]:null}const li=Rn({\u0275prov:Rn}),ti=Rn({\u0275inj:Rn}),mi=Rn({ngInjectableDef:Rn}),Xn=Rn({ngInjectorDef:Rn});var Ii=(()=>((Ii=Ii||{})[Ii.Default=0]="Default",Ii[Ii.Host=1]="Host",Ii[Ii.Self=2]="Self",Ii[Ii.SkipSelf=4]="SkipSelf",Ii[Ii.Optional=8]="Optional",Ii))();let Ri;function es(i){const e=Ri;return Ri=i,e}function ss(i,e,t){const n=vt(i);return n&&"root"==n.providedIn?void 0===n.value?n.value=n.factory():n.value:t&Ii.Optional?null:void 0!==e?e:void $a(kn(i))}const ds=(()=>typeof globalThis<"u"&&globalThis||typeof global<"u"&&global||typeof window<"u"&&window||typeof self<"u"&&typeof WorkerGlobalScope<"u"&&self instanceof WorkerGlobalScope&&self)(),aa={},XA="__NG_DI_FLAG__",Sh="ngTempTokenPath",th=/\n/gm,Qm="__source";let KA;function Jp(i){const e=KA;return KA=i,e}function eA(i,e=Ii.Default){if(void 0===KA)throw new fi(-203,!1);return null===KA?ss(i,void 0,e):KA.get(i,e&Ii.Optional?null:void 0,e)}function ci(i,e=Ii.Default){return(function Hi(){return Ri}()||eA)($i(i),e)}function To(i,e=Ii.Default){return ci(i,Wm(e))}function Wm(i){return typeof i>"u"||"number"==typeof i?i:0|(i.optional&&8)|(i.host&&1)|(i.self&&2)|(i.skipSelf&&4)}function b0(i){const e=[];for(let t=0;t((nh=nh||{})[nh.OnPush=0]="OnPush",nh[nh.Default=1]="Default",nh))(),Th=(()=>{return(i=Th||(Th={}))[i.Emulated=0]="Emulated",i[i.None=2]="None",i[i.ShadowDom=3]="ShadowDom",Th;var i})();const Jl={},Vs=[],za=Rn({\u0275cmp:Rn}),ki=Rn({\u0275dir:Rn}),yc=Rn({\u0275pipe:Rn}),$m=Rn({\u0275mod:Rn}),Fu=Rn({\u0275fac:Rn}),vc=Rn({__NG_ELEMENT_ID__:Rn});let ZA=0;function Fr(i){return zf(()=>{const t=!0===i.standalone,n={},r={type:i.type,providersResolver:null,decls:i.decls,vars:i.vars,factory:null,template:i.template||null,consts:i.consts||null,ngContentSelectors:i.ngContentSelectors,hostBindings:i.hostBindings||null,hostVars:i.hostVars||0,hostAttrs:i.hostAttrs||null,contentQueries:i.contentQueries||null,declaredInputs:n,inputs:null,outputs:null,exportAs:i.exportAs||null,onPush:i.changeDetection===nh.OnPush,directiveDefs:null,pipeDefs:null,standalone:t,dependencies:t&&i.dependencies||null,getStandaloneInjector:null,selectors:i.selectors||Vs,viewQuery:i.viewQuery||null,features:i.features||null,data:i.data||{},encapsulation:i.encapsulation||Th.Emulated,id:"c"+ZA++,styles:i.styles||Vs,_:null,setInput:null,schemas:i.schemas||null,tView:null,findHostDirectiveDefs:null,hostDirectives:null},s=i.dependencies,a=i.features;return r.inputs=lu(i.inputs,n),r.outputs=lu(i.outputs),a&&a.forEach(l=>l(r)),r.directiveDefs=s?()=>("function"==typeof s?s():s).map(JA).filter(il):null,r.pipeDefs=s?()=>("function"==typeof s?s():s).map(ec).filter(il):null,r})}function JA(i){return Io(i)||Cr(i)}function il(i){return null!==i}function ia(i){return zf(()=>({type:i.type,bootstrap:i.bootstrap||Vs,declarations:i.declarations||Vs,imports:i.imports||Vs,exports:i.exports||Vs,transitiveCompileScopes:null,schemas:i.schemas||null,id:i.id||null}))}function lu(i,e){if(null==i)return Jl;const t={};for(const n in i)if(i.hasOwnProperty(n)){let r=i[n],s=r;Array.isArray(r)&&(s=r[1],r=r[0]),t[r]=n,e&&(e[r]=s)}return t}const Oi=Fr;function hc(i){return{type:i.type,name:i.name,factory:null,pure:!1!==i.pure,standalone:!0===i.standalone,onDestroy:i.type.prototype.ngOnDestroy||null}}function Io(i){return i[za]||null}function Cr(i){return i[ki]||null}function ec(i){return i[yc]||null}function Ic(i,e){const t=i[$m]||null;if(!t&&!0===e)throw new Error(`Type ${kn(i)} does not have '\u0275mod' property.`);return t}function tc(i){return Array.isArray(i)&&"object"==typeof i[1]}function Wc(i){return Array.isArray(i)&&!0===i[1]}function nA(i){return 0!=(4&i.flags)}function Ih(i){return i.componentOffset>-1}function lo(i){return 1==(1&i.flags)}function Pc(i){return null!==i.template}function mu(i){return 0!=(256&i[2])}function td(i,e){return i.hasOwnProperty(Fu)?i[Fu]:null}class s1{constructor(e,t,n){this.previousValue=e,this.currentValue=t,this.firstChange=n}isFirstChange(){return this.firstChange}}function bc(){return up}function up(i){return i.type.prototype.ngOnChanges&&(i.setInput=rm),Wy}function Wy(){const i=Id(this),e=i?.current;if(e){const t=i.previous;if(t===Jl)i.previous=e;else for(let n in e)t[n]=e[n];i.current=null,this.ngOnChanges(e)}}function rm(i,e,t,n){const r=this.declaredInputs[t],s=Id(i)||function Ru(i,e){return i[hp]=e}(i,{previous:Jl,current:null}),a=s.current||(s.current={}),l=s.previous,u=l[r];a[r]=new s1(u&&u.currentValue,e,l===Jl),i[n]=e}bc.ngInherit=!0;const hp="__ngSimpleChanges__";function Id(i){return i[hp]||null}function xc(i){for(;Array.isArray(i);)i=i[0];return i}function nd(i,e){return xc(e[i])}function Fa(i,e){return xc(e[i.index])}function gu(i,e){return i.data[e]}function id(i,e){return i[e]}function Fc(i,e){const t=e[i];return tc(t)?t:t[0]}function Ph(i){return 64==(64&i[2])}function Eo(i,e){return null==e?null:i[e]}function zl(i){i[18]=0}function fp(i,e){i[5]+=e;let t=i,n=i[3];for(;null!==n&&(1===e&&1===t[5]||-1===e&&0===t[5]);)n[5]+=e,t=n,n=n[3]}const Fo={lFrame:aA(null),bindingsEnabled:!0};function o1(){return Fo.bindingsEnabled}function er(){return Fo.lFrame.lView}function ga(){return Fo.lFrame.tView}function ks(i){return Fo.lFrame.contextLView=i,i[8]}function ys(i){return Fo.lFrame.contextLView=null,i}function wc(){let i=om();for(;null!==i&&64===i.type;)i=i.parent;return i}function om(){return Fo.lFrame.currentTNode}function $c(i,e){const t=Fo.lFrame;t.currentTNode=i,t.isParent=e}function yu(){return Fo.lFrame.isParent}function sd(){Fo.lFrame.isParent=!1}function $l(){const i=Fo.lFrame;let e=i.bindingRootIndex;return-1===e&&(e=i.bindingRootIndex=i.tView.bindingStartIndex),e}function nf(){return Fo.lFrame.bindingIndex++}function ad(i){const e=Fo.lFrame,t=e.bindingIndex;return e.bindingIndex=e.bindingIndex+i,t}function E0(i,e){const t=Fo.lFrame;t.bindingIndex=t.bindingRootIndex=i,Hl(e)}function Hl(i){Fo.lFrame.currentDirectiveIndex=i}function rf(){return Fo.lFrame.currentQueryIndex}function kd(i){Fo.lFrame.currentQueryIndex=i}function Fd(i){const e=i[1];return 2===e.type?e.declTNode:1===e.type?i[6]:null}function lm(i,e,t){if(t&Ii.SkipSelf){let r=e,s=i;for(;!(r=r.parent,null!==r||t&Ii.Host||(r=Fd(s),null===r||(s=s[15],10&r.type))););if(null===r)return!1;e=r,i=s}const n=Fo.lFrame=oA();return n.currentTNode=e,n.lView=i,!0}function sA(i){const e=oA(),t=i[1];Fo.lFrame=e,e.currentTNode=t.firstChild,e.lView=i,e.tView=t,e.contextLView=i,e.bindingIndex=t.bindingStartIndex,e.inI18n=!1}function oA(){const i=Fo.lFrame,e=null===i?null:i.child;return null===e?aA(i):e}function aA(i){const e={currentTNode:null,isParent:!0,lView:null,tView:null,selectedIndex:-1,contextLView:null,elementDepthCount:0,currentNamespace:null,currentDirectiveIndex:-1,bindingRootIndex:-1,bindingIndex:-1,currentQueryIndex:0,parent:i,child:null,inI18n:!1};return null!==i&&(i.child=e),e}function lA(){const i=Fo.lFrame;return Fo.lFrame=i.parent,i.currentTNode=null,i.lView=null,i}const cm=lA;function cA(){const i=lA();i.isParent=!0,i.tView=null,i.selectedIndex=-1,i.contextLView=null,i.elementDepthCount=0,i.currentDirectiveIndex=-1,i.currentNamespace=null,i.bindingRootIndex=-1,i.bindingIndex=-1,i.currentQueryIndex=0}function Gr(){return Fo.lFrame.selectedIndex}function Zr(i){Fo.lFrame.selectedIndex=i}function Bl(){const i=Fo.lFrame;return gu(i.tView,i.selectedIndex)}function vl(){Fo.lFrame.currentNamespace="svg"}function cd(){!function eg(){Fo.lFrame.currentNamespace=null}()}function tg(i,e){for(let t=e.directiveStart,n=e.directiveEnd;t=n)break}else e[u]<0&&(i[18]+=65536),(l>11>16&&(3&i[2])===e){i[2]+=2048;try{s.call(l)}finally{}}}else try{s.call(l)}finally{}}class fA{constructor(e,t,n){this.factory=e,this.resolving=!1,this.canSeeViewProviders=t,this.injectImpl=n}}function ud(i,e,t){let n=0;for(;ne){a=s-1;break}}}for(;s>16}(i),n=e;for(;t>0;)n=n[15],t--;return n}let sg=!0;function Ap(i){const e=sg;return sg=i,e}let lg=0;const Xc={};function sf(i,e){const t=O0(i,e);if(-1!==t)return t;const n=e[1];n.firstCreatePass&&(i.injectorIndex=e.length,cg(n.data,i),cg(e,null),cg(n.blueprint,null));const r=af(i,e),s=i.injectorIndex;if(k0(r)){const a=pp(r),l=kh(r,e),u=l[1].data;for(let d=0;d<8;d++)e[s+d]=l[a+d]|u[a+d]}return e[s+8]=r,s}function cg(i,e){i.push(0,0,0,0,0,0,0,0,e)}function O0(i,e){return-1===i.injectorIndex||i.parent&&i.parent.injectorIndex===i.injectorIndex||null===e[i.injectorIndex+8]?-1:i.injectorIndex}function af(i,e){if(i.parent&&-1!==i.parent.injectorIndex)return i.parent.injectorIndex;let t=0,n=null,r=e;for(;null!==r;){if(n=mp(r),null===n)return-1;if(t++,r=r[15],-1!==n.injectorIndex)return n.injectorIndex|t<<16}return-1}function ug(i,e,t){!function pA(i,e,t){let n;"string"==typeof t?n=t.charCodeAt(0)||0:t.hasOwnProperty(vc)&&(n=t[vc]),null==n&&(n=t[vc]=lg++);const r=255&n;e.data[i+(r>>5)]|=1<=0?255&e:fg:e}(t);if("function"==typeof s){if(!lm(e,i,n))return n&Ii.Host?L0(r,0,n):N0(e,t,n,r);try{const a=s(n);if(null!=a||n&Ii.Optional)return a;$a()}finally{cm()}}else if("number"==typeof s){let a=null,l=O0(i,e),u=-1,d=n&Ii.Host?e[16][6]:null;for((-1===l||n&Ii.SkipSelf)&&(u=-1===l?af(i,e):e[l+8],-1!==u&&dm(n,!1)?(a=e[1],l=pp(u),e=kh(u,e)):l=-1);-1!==l;){const p=e[1];if(U0(s,l,p.data)){const y=dg(l,e,t,a,n,d);if(y!==Xc)return y}u=e[l+8],-1!==u&&dm(n,e[1].data[l+8]===d)&&U0(s,l,e)?(a=p,l=pp(u),e=kh(u,e)):l=-1}}return r}function dg(i,e,t,n,r,s){const a=e[1],l=a.data[i+8],p=hm(l,a,t,null==n?Ih(l)&&sg:n!=a&&0!=(3&l.type),r&Ii.Host&&s===l);return null!==p?Qf(e,a,p,l):Xc}function hm(i,e,t,n,r){const s=i.providerIndexes,a=e.data,l=1048575&s,u=i.directiveStart,p=s>>20,C=r?l+p:i.directiveEnd;for(let O=n?l:l+p;O=u&&Q.type===t)return O}if(r){const O=a[u];if(O&&Pc(O)&&O.type===t)return u}return null}function Qf(i,e,t,n){let r=i[t];const s=e.data;if(function $y(i){return i instanceof fA}(r)){const a=r;a.resolving&&function Ta(i,e){const t=e?`. Dependency path: ${e.join(" > ")} > ${i}`:"";throw new fi(-200,`Circular dependency in DI detected for ${i}${t}`)}(function Os(i){return"function"==typeof i?i.name||i.toString():"object"==typeof i&&null!=i&&"function"==typeof i.type?i.type.name||i.type.toString():Or(i)}(s[t]));const l=Ap(a.canSeeViewProviders);a.resolving=!0;const u=a.injectImpl?es(a.injectImpl):null;lm(i,n,Ii.Default);try{r=i[t]=a.factory(void 0,s,i,n),e.firstCreatePass&&t>=n.directiveStart&&function um(i,e,t){const{ngOnChanges:n,ngOnInit:r,ngDoCheck:s}=e.type.prototype;if(n){const a=up(e);(t.preOrderHooks||(t.preOrderHooks=[])).push(i,a),(t.preOrderCheckHooks||(t.preOrderCheckHooks=[])).push(i,a)}r&&(t.preOrderHooks||(t.preOrderHooks=[])).push(0-i,r),s&&((t.preOrderHooks||(t.preOrderHooks=[])).push(i,s),(t.preOrderCheckHooks||(t.preOrderCheckHooks=[])).push(i,s))}(t,s[t],e)}finally{null!==u&&es(u),Ap(l),a.resolving=!1,cm()}}return r}function U0(i,e,t){return!!(t[e+(i>>5)]&1<{const e=i.prototype.constructor,t=e[Fu]||z0(e),n=Object.prototype;let r=Object.getPrototypeOf(i.prototype).constructor;for(;r&&r!==n;){const s=r[Fu]||z0(r);if(s&&s!==t)return s;r=Object.getPrototypeOf(r)}return s=>new s})}function z0(i){return rs(i)?()=>{const e=z0($i(i));return e&&e()}:td(i)}function mp(i){const e=i[1],t=e.type;return 2===t?e.declTNode:1===t?i[6]:null}function Oh(i){return function R0(i,e){if("class"===e)return i.classes;if("style"===e)return i.styles;const t=i.attrs;if(t){const n=t.length;let r=0;for(;r{const n=function lf(i){return function(...t){if(i){const n=i(...t);for(const r in n)this[r]=n[r]}}}(e);function r(...s){if(this instanceof r)return n.apply(this,s),this;const a=new r(...s);return l.annotation=a,l;function l(u,d,p){const y=u.hasOwnProperty(Vl)?u[Vl]:Object.defineProperty(u,Vl,{value:[]})[Vl];for(;y.length<=p;)y.push(null);return(y[p]=y[p]||[]).push(a),u}}return t&&(r.prototype=Object.create(t.prototype)),r.prototype.ngMetadataName=i,r.annotationCls=r,r})}class cr{constructor(e,t){this._desc=e,this.ngMetadataName="InjectionToken",this.\u0275prov=void 0,"number"==typeof t?this.__NG_ELEMENT_ID__=t:void 0!==t&&(this.\u0275prov=Ue({token:this,providedIn:t.providedIn||"root",factory:t.factory}))}get multi(){return this}toString(){return`InjectionToken ${this._desc}`}}function Rd(i,e){i.forEach(t=>Array.isArray(t)?Rd(t,e):e(t))}function fm(i,e,t){e>=i.length?i.push(t):i.splice(e,0,t)}function mg(i,e){return e>=i.length-1?i.pop():i.splice(e,1)[0]}function yp(i,e){const t=[];for(let n=0;n=0?i[1|n]=t:(n=~n,function A1(i,e,t,n){let r=i.length;if(r==e)i.push(t,n);else if(1===r)i.push(n,i[0]),i[0]=t;else{for(r--,i.push(i[r-1],i[r]);r>e;)i[r]=i[r-2],r--;i[e]=t,i[e+1]=n}}(i,n,e,t)),n}function mA(i,e){const t=jf(i,e);if(t>=0)return i[1|t]}function jf(i,e){return function m1(i,e,t){let n=0,r=i.length>>t;for(;r!==n;){const s=n+(r-n>>1),a=i[s<e?r=s:n=s+1}return~(r<({token:i})),-1),Ld=YA(Wf("Optional"),8),_A=YA(Wf("SkipSelf"),4);var Mc=(()=>((Mc=Mc||{})[Mc.Important=1]="Important",Mc[Mc.DashCase=2]="DashCase",Mc))();const Kf=new Map;let xA=0;const Mg="__ngContext__";function zr(i,e){tc(e)?(i[Mg]=e[20],function bp(i){Kf.set(i[20],i)}(e)):i[Mg]=e}function Nc(i,e){return undefined(i,e)}function bm(i){const e=i[3];return Wc(e)?e[3]:e}function zd(i){return pf(i[13])}function Uc(i){return pf(i[4])}function pf(i){for(;null!==i&&!Wc(i);)i=i[4];return i}function gd(i,e,t,n,r){if(null!=n){let s,a=!1;Wc(n)?s=n:tc(n)&&(a=!0,n=n[0]);const l=xc(n);0===i&&null!==t?null==r?wm(e,t,l):Hu(e,t,l,r||null,!0):1===i&&null!==t?Hu(e,t,l,r||null,!0):2===i?function kg(i,e,t){const n=Ig(i,e);n&&function T1(i,e,t,n){i.removeChild(e,t,n)}(i,n,e,t)}(e,l,a):3===i&&e.destroyNode(l),null!=s&&function Oe(i,e,t,n,r){const s=t[7];s!==xc(t)&&gd(e,i,n,s,r);for(let l=10;l0&&(i[t-1][4]=n[4]);const s=mg(i,10+e);!function C1(i,e){G(i,e,e[11],2,null,null),e[0]=null,e[6]=null}(n[1],n);const a=s[19];null!==a&&a.detachView(s[1]),n[3]=null,n[4]=null,n[2]&=-65}return n}function _d(i,e){if(!(128&e[2])){const t=e[11];t.destroyNode&&G(i,e,t,3,null,null),function pc(i){let e=i[13];if(!e)return Vd(i[1],i);for(;e;){let t=null;if(tc(e))t=e[13];else{const n=e[10];n&&(t=n)}if(!t){for(;e&&!e[4]&&e!==i;)tc(e)&&Vd(e[1],e),e=e[3];null===e&&(e=i),tc(e)&&Vd(e[1],e),t=e&&e[4]}e=t}}(e)}}function Vd(i,e){if(!(128&e[2])){e[2]&=-65,e[2]|=128,function mf(i,e){let t;if(null!=i&&null!=(t=i.destroyHooks))for(let n=0;n=0?n[r=a]():n[r=-a].unsubscribe(),s+=2}else{const a=n[r=t[s+1]];t[s].call(a)}if(null!==n){for(let s=r+1;s-1){const{encapsulation:s}=i.data[n.directiveStart+r];if(s===Th.None||s===Th.Emulated)return null}return Fa(n,t)}}(i,e.parent,t)}function Hu(i,e,t,n,r){i.insertBefore(e,t,n,r)}function wm(i,e,t){i.appendChild(e,t)}function wp(i,e,t,n,r){null!==n?Hu(i,e,t,n,r):wm(i,e,t)}function Ig(i,e){return i.parentNode(e)}function J0(i,e,t){return e_(i,e,t)}let Pn,zo,xa,e_=function D1(i,e,t){return 40&i.type?Fa(i,t):null};function MA(i,e,t,n){const r=CA(i,n,e),s=e[11],l=J0(n.parent||e[6],n,e);if(null!=r)if(Array.isArray(t))for(let u=0;ui,createScript:i=>i,createScriptURL:i=>i})}catch{}return Pn}()?.createHTML(i)||i}function Ho(){if(void 0===xa&&(xa=null,ds.trustedTypes))try{xa=ds.trustedTypes.createPolicy("angular#unsafe-bypass",{createHTML:i=>i,createScript:i=>i,createScriptURL:i=>i})}catch{}return xa}function Do(i){return Ho()?.createHTML(i)||i}function wa(i){return Ho()?.createScriptURL(i)||i}class ra{constructor(e){this.changingThisBreaksApplicationSecurity=e}toString(){return`SafeValue must use [property]=binding: ${this.changingThisBreaksApplicationSecurity} (see ${xo})`}}class Oo extends ra{getTypeName(){return"HTML"}}class Ac extends ra{getTypeName(){return"Style"}}class Vu extends ra{getTypeName(){return"Script"}}class lh extends ra{getTypeName(){return"URL"}}class ul extends ra{getTypeName(){return"ResourceURL"}}function sl(i){return i instanceof ra?i.changingThisBreaksApplicationSecurity:i}function sc(i,e){const t=function vu(i){return i instanceof ra&&i.getTypeName()||null}(i);if(null!=t&&t!==e){if("ResourceURL"===t&&"URL"===e)return!0;throw new Error(`Required a safe ${e}, got a ${t} (see ${xo})`)}return t===e}class _f{constructor(e){this.inertDocumentHelper=e}getInertBodyElement(e){e=""+e;try{const t=(new window.DOMParser).parseFromString(Jn(e),"text/html").body;return null===t?this.inertDocumentHelper.getInertBodyElement(e):(t.removeChild(t.firstChild),t)}catch{return null}}}class Jf{constructor(e){if(this.defaultDoc=e,this.inertDocument=this.defaultDoc.implementation.createHTMLDocument("sanitization-inert"),null==this.inertDocument.body){const t=this.inertDocument.createElement("html");this.inertDocument.appendChild(t);const n=this.inertDocument.createElement("body");t.appendChild(n)}}getInertBodyElement(e){const t=this.inertDocument.createElement("template");if("content"in t)return t.innerHTML=Jn(e),t;const n=this.inertDocument.createElement("body");return n.innerHTML=Jn(e),this.defaultDoc.documentMode&&this.stripCustomNsAttrs(n),n}stripCustomNsAttrs(e){const t=e.attributes;for(let r=t.length-1;0"),!0}endElement(e){const t=e.nodeName.toLowerCase();P1.hasOwnProperty(t)&&!Cx.hasOwnProperty(t)&&(this.buf.push(""))}chars(e){this.buf.push(dv(e))}checkClobberedElement(e,t){if(t&&(e.compareDocumentPosition(t)&Node.DOCUMENT_POSITION_CONTAINED_BY)===Node.DOCUMENT_POSITION_CONTAINED_BY)throw new Error(`Failed to sanitize html because the element is clobbered: ${e.outerHTML}`);return t}}const eC=/[\uD800-\uDBFF][\uDC00-\uDFFF]/g,tC=/([^\#-~ |!])/g;function dv(i){return i.replace(/&/g,"&").replace(eC,function(e){return"&#"+(1024*(e.charCodeAt(0)-55296)+(e.charCodeAt(1)-56320)+65536)+";"}).replace(tC,function(e){return"&#"+e.charCodeAt(0)+";"}).replace(//g,">")}let F1;function fv(i,e){let t=null;try{F1=F1||function gf(i){const e=new Jf(i);return function yf(){try{return!!(new window.DOMParser).parseFromString(Jn(""),"text/html")}catch{return!1}}()?new _f(e):e}(i);let n=e?String(e):"";t=F1.getInertBodyElement(n);let r=5,s=n;do{if(0===r)throw new Error("Failed to sanitize html because the input is unstable");r--,n=s,s=t.innerHTML,t=F1.getInertBodyElement(n)}while(n!==s);return Jn((new J2).sanitizeChildren(O1(t)||t))}finally{if(t){const n=O1(t)||t;for(;n.firstChild;)n.removeChild(n.firstChild)}}}function O1(i){return"content"in i&&function nC(i){return i.nodeType===Node.ELEMENT_NODE&&"TEMPLATE"===i.nodeName}(i)?i.content:null}var ol=(()=>((ol=ol||{})[ol.NONE=0]="NONE",ol[ol.HTML=1]="HTML",ol[ol.STYLE=2]="STYLE",ol[ol.SCRIPT=3]="SCRIPT",ol[ol.URL=4]="URL",ol[ol.RESOURCE_URL=5]="RESOURCE_URL",ol))();function Ex(i){const e=R1();return e?Do(e.sanitize(ol.HTML,i)||""):sc(i,"HTML")?Do(sl(i)):fv(function Ps(){return void 0!==zo?zo:typeof document<"u"?document:void 0}(),Or(i))}function yd(i){const e=R1();return e?e.sanitize(ol.URL,i)||"":sc(i,"URL")?sl(i):ep(Or(i))}function Dx(i){const e=R1();if(e)return wa(e.sanitize(ol.RESOURCE_URL,i)||"");if(sc(i,"ResourceURL"))return wa(sl(i));throw new fi(904,!1)}function R1(){const i=er();return i&&i[12]}const g=new cr("ENVIRONMENT_INITIALIZER"),V=new cr("INJECTOR",-1),fe=new cr("INJECTOR_DEF_TYPES");class xe{get(e,t=aa){if(t===aa){const n=new Error(`NullInjectorError: No provider for ${kn(e)}!`);throw n.name="NullInjectorError",n}return t}}function nt(...i){return{\u0275providers:yt(0,i),\u0275fromNgModule:!0}}function yt(i,...e){const t=[],n=new Set;let r;return Rd(e,s=>{const a=s;kt(a,t,[],n)&&(r||(r=[]),r.push(a))}),void 0!==r&&Mt(r,t),t}function Mt(i,e){for(let t=0;t{e.push(s)})}}function kt(i,e,t,n){if(!(i=$i(i)))return!1;let r=null,s=An(i);const a=!s&&Io(i);if(s||a){if(a&&!a.standalone)return!1;r=i}else{const u=i.ngModule;if(s=An(u),!s)return!1;r=u}const l=n.has(r);if(a){if(l)return!1;if(n.add(r),a.dependencies){const u="function"==typeof a.dependencies?a.dependencies():a.dependencies;for(const d of u)kt(d,e,t,n)}}else{if(!s)return!1;{if(null!=s.imports&&!l){let d;n.add(r);try{Rd(s.imports,p=>{kt(p,e,t,n)&&(d||(d=[]),d.push(p))})}finally{}void 0!==d&&Mt(d,e)}if(!l){const d=td(r)||(()=>new r);e.push({provide:r,useFactory:d,deps:Vs},{provide:fe,useValue:r,multi:!0},{provide:g,useValue:()=>ci(r),multi:!0})}const u=s.providers;null==u||l||on(u,p=>{e.push(p)})}}return r!==i&&void 0!==i.providers}function on(i,e){for(let t of i)qs(t)&&(t=t.\u0275providers),Array.isArray(t)?on(t,e):e(t)}const Dn=Rn({provide:String,useValue:Rn});function On(i){return null!==i&&"object"==typeof i&&Dn in i}function mr(i){return"function"==typeof i}const Ys=new cr("Set Injector scope."),go={},Br={};let Li;function ro(){return void 0===Li&&(Li=new xe),Li}class Ur{}class Wo extends Ur{get destroyed(){return this._destroyed}constructor(e,t,n,r){super(),this.parent=t,this.source=n,this.scopes=r,this.records=new Map,this._ngOnDestroyHooks=new Set,this._onDestroyHooks=[],this._destroyed=!1,Kc(e,a=>this.processProvider(a)),this.records.set(V,Qs(void 0,this)),r.has("environment")&&this.records.set(Ur,Qs(void 0,this));const s=this.records.get(Ys);null!=s&&"string"==typeof s.value&&this.scopes.add(s.value),this.injectorDefTypes=new Set(this.get(fe.multi,Vs,Ii.Self))}destroy(){this.assertNotDestroyed(),this._destroyed=!0;try{for(const e of this._ngOnDestroyHooks)e.ngOnDestroy();for(const e of this._onDestroyHooks)e()}finally{this.records.clear(),this._ngOnDestroyHooks.clear(),this.injectorDefTypes.clear(),this._onDestroyHooks.length=0}}onDestroy(e){this._onDestroyHooks.push(e)}runInContext(e){this.assertNotDestroyed();const t=Jp(this),n=es(void 0);try{return e()}finally{Jp(t),es(n)}}get(e,t=aa,n=Ii.Default){this.assertNotDestroyed(),n=Wm(n);const r=Jp(this),s=es(void 0);try{if(!(n&Ii.SkipSelf)){let l=this.records.get(e);if(void 0===l){const u=function Gu(i){return"function"==typeof i||"object"==typeof i&&i instanceof cr}(e)&&vt(e);l=u&&this.injectableDefInScope(u)?Qs(ca(e),go):null,this.records.set(e,l)}if(null!=l)return this.hydrate(e,l)}return(n&Ii.Self?ro():this.parent).get(e,t=n&Ii.Optional&&t===aa?null:t)}catch(a){if("NullInjectorError"===a.name){if((a[Sh]=a[Sh]||[]).unshift(kn(e)),r)throw a;return function Gy(i,e,t,n){const r=i[Sh];throw e[Qm]&&r.unshift(e[Qm]),i.message=function qy(i,e,t,n=null){i=i&&"\n"===i.charAt(0)&&"\u0275"==i.charAt(1)?i.slice(2):i;let r=kn(e);if(Array.isArray(e))r=e.map(kn).join(" -> ");else if("object"==typeof e){let s=[];for(let a in e)if(e.hasOwnProperty(a)){let l=e[a];s.push(a+":"+("string"==typeof l?JSON.stringify(l):kn(l)))}r=`{${s.join(", ")}}`}return`${t}${n?"("+n+")":""}[${r}]: ${i.replace(th,"\n ")}`}("\n"+i.message,r,t,n),i.ngTokenPath=r,i[Sh]=null,i}(a,e,"R3InjectorError",this.source)}throw a}finally{es(s),Jp(r)}}resolveInjectorInitializers(){const e=Jp(this),t=es(void 0);try{const n=this.get(g.multi,Vs,Ii.Self);for(const r of n)r()}finally{Jp(e),es(t)}}toString(){const e=[],t=this.records;for(const n of t.keys())e.push(kn(n));return`R3Injector[${e.join(", ")}]`}assertNotDestroyed(){if(this._destroyed)throw new fi(205,!1)}processProvider(e){let t=mr(e=$i(e))?e:$i(e&&e.provide);const n=function oc(i){return On(i)?Qs(void 0,i.useValue):Qs(eo(i),go)}(e);if(mr(e)||!0!==e.multi)this.records.get(t);else{let r=this.records.get(t);r||(r=Qs(void 0,go,!0),r.factory=()=>b0(r.multi),this.records.set(t,r)),t=e,r.multi.push(e)}this.records.set(t,n)}hydrate(e,t){return t.value===go&&(t.value=Br,t.value=t.factory()),"object"==typeof t.value&&t.value&&function ac(i){return null!==i&&"object"==typeof i&&"function"==typeof i.ngOnDestroy}(t.value)&&this._ngOnDestroyHooks.add(t.value),t.value}injectableDefInScope(e){if(!e.providedIn)return!1;const t=$i(e.providedIn);return"string"==typeof t?"any"===t||this.scopes.has(t):this.injectorDefTypes.has(t)}}function ca(i){const e=vt(i),t=null!==e?e.factory:td(i);if(null!==t)return t;if(i instanceof cr)throw new fi(204,!1);if(i instanceof Function)return function Il(i){const e=i.length;if(e>0)throw yp(e,"?"),new fi(204,!1);const t=function gn(i){const e=i&&(i[li]||i[mi]);if(e){const t=function mn(i){if(i.hasOwnProperty("name"))return i.name;const e=(""+i).match(/^function\s*([^\s(]+)/);return null===e?"":e[1]}(i);return console.warn(`DEPRECATED: DI is instantiating a token "${t}" that inherits its @Injectable decorator but does not provide one itself.\nThis will become an error in a future version of Angular. Please add @Injectable() to the "${t}" class.`),e}return null}(i);return null!==t?()=>t.factory(i):()=>new i}(i);throw new fi(204,!1)}function eo(i,e,t){let n;if(mr(i)){const r=$i(i);return td(r)||ca(r)}if(On(i))n=()=>$i(i.useValue);else if(function Dr(i){return!(!i||!i.useFactory)}(i))n=()=>i.useFactory(...b0(i.deps||[]));else if(function bi(i){return!(!i||!i.useExisting)}(i))n=()=>ci($i(i.useExisting));else{const r=$i(i&&(i.useClass||i.provide));if(!function Ro(i){return!!i.deps}(i))return td(r)||ca(r);n=()=>new r(...b0(i.deps))}return n}function Qs(i,e,t=!1){return{factory:i,value:e,multi:t?[]:void 0}}function Kc(i,e){for(const t of i)Array.isArray(t)?Kc(t,e):t&&qs(t)?Kc(t.\u0275providers,e):e(t)}class xu{}class Hh{}class r_{resolveComponentFactory(e){throw function Yc(i){const e=Error(`No component factory found for ${kn(i)}. Did you add it to @NgModule.entryComponents?`);return e.ngComponent=i,e}(e)}}let Gd=(()=>{class i{}return i.NULL=new r_,i})();function bf(){return tp(wc(),er())}function tp(i,e){return new Cs(Fa(i,e))}let Cs=(()=>{class i{constructor(t){this.nativeElement=t}}return i.__NG_ELEMENT_ID__=bf,i})();function Fg(i){return i instanceof Cs?i.nativeElement:i}class Ep{}let as=(()=>{class i{}return i.__NG_ELEMENT_ID__=()=>function ha(){const i=er(),t=Fc(wc().index,i);return(tc(t)?t:i)[11]}(),i})(),Ha=(()=>{class i{}return i.\u0275prov=Ue({token:i,providedIn:"root",factory:()=>null}),i})();class Ir{constructor(e){this.full=e,this.major=e.split(".")[0],this.minor=e.split(".")[1],this.patch=e.split(".").slice(2).join(".")}}const ch=new Ir("15.1.2"),hl={};function qd(i){return i.ngOriginalError}class vd{constructor(){this._console=console}handleError(e){const t=this._findOriginalError(e);this._console.error("ERROR",e),t&&this._console.error("ORIGINAL ERROR",t)}_findOriginalError(e){let t=e&&qd(e);for(;t&&qd(t);)t=qd(t);return t||null}}function Px(i){return i.ownerDocument.defaultView}function np(i){return i instanceof Function?i():i}function C3(i,e,t){let n=i.length;for(;;){const r=i.indexOf(e,t);if(-1===r)return r;if(0===r||i.charCodeAt(r-1)<=32){const s=e.length;if(r+s===n||i.charCodeAt(r+s)<=32)return r}t=r+1}}const M3="ng-template";function cB(i,e,t){let n=0;for(;ns?"":r[y+1].toLowerCase();const O=8&n?C:null;if(O&&-1!==C3(O,d,0)||2&n&&d!==C){if(Dp(n))return!1;a=!0}}}}else{if(!a&&!Dp(n)&&!Dp(u))return!1;if(a&&Dp(u))continue;a=!1,n=u|1&n}}return Dp(n)||a}function Dp(i){return 0==(1&i)}function dB(i,e,t,n){if(null===e)return-1;let r=0;if(n||!t){let s=!1;for(;r-1)for(t++;t0?'="'+l+'"':"")+"]"}else 8&n?r+="."+a:4&n&&(r+=" "+a);else""!==r&&!Dp(a)&&(e+=o_(s,r),r=""),n=a,s=s||!Dp(n);t++}return""!==r&&(e+=o_(s,r)),e}const ea={};function Nn(i){mv(ga(),er(),Gr()+i,!1)}function mv(i,e,t,n){if(!n)if(3==(3&e[2])){const s=i.preOrderCheckHooks;null!==s&&ng(e,s,t)}else{const s=i.preOrderHooks;null!==s&&hA(e,s,0,t)}Zr(t)}function cC(i,e=null,t=null,n){const r=uC(i,e,t,n);return r.resolveInjectorInitializers(),r}function uC(i,e=null,t=null,n,r=new Set){const s=[t||Vs,nt(i)];return n=n||("object"==typeof i?void 0:kn(i)),new Wo(s,e||ro(),n||null,r)}let zc=(()=>{class i{static create(t,n){if(Array.isArray(t))return cC({name:""},n,t,"");{const r=t.name??"";return cC({name:r},t.parent,t.providers,r)}}}return i.THROW_IF_NOT_FOUND=aa,i.NULL=new xe,i.\u0275prov=Ue({token:i,providedIn:"any",factory:()=>ci(V)}),i.__NG_ELEMENT_ID__=-1,i})();function wt(i,e=Ii.Default){const t=er();return null===t?ci(i,e):hg(wc(),t,$i(i),e)}function Qd(){throw new Error("invalid")}function EB(i,e){const t=i.contentQueries;if(null!==t)for(let n=0;n22&&mv(i,e,22,!1),t(n,r)}finally{Zr(s)}}function u_(i,e,t){if(nA(e)){const r=e.directiveEnd;for(let s=e.directiveStart;s0;){const t=i[--e];if("number"==typeof t&&t<0)return t}return 0})(a)!=l&&a.push(l),a.push(t,n,s)}}(i,e,n,H1(i,t,r.hostVars,ea),r)}function TA(i,e,t,n,r,s){const a=Fa(i,e);!function xv(i,e,t,n,r,s,a){if(null==s)i.removeAttribute(e,r,t);else{const l=null==a?Or(s):a(s,n||"",r);i.setAttribute(e,r,l,t)}}(e[11],a,s,i.value,t,n,r)}function vC(i,e,t,n,r,s){const a=s[e];if(null!==a){const l=n.setInput;for(let u=0;u0&&CC(t)}}function CC(i){for(let n=zd(i);null!==n;n=Uc(n))for(let r=10;r0&&CC(s)}const t=i[1].components;if(null!==t)for(let n=0;n0&&CC(r)}}function IB(i,e){const t=Fc(e,i),n=t[1];(function PB(i,e){for(let t=e.length;t-1&&(Hd(e,n),mg(t,n))}this._attachedToViewContainer=!1}_d(this._lView[1],this._lView)}onDestroy(e){h_(this._lView[1],this._lView,null,e)}markForCheck(){f_(this._cdRefInjectingView||this._lView)}detach(){this._lView[2]&=-65}reattach(){this._lView[2]|=64}detectChanges(){Q1(this._lView[1],this._lView,this.context)}checkNoChanges(){}attachToViewContainerRef(){if(this._appRef)throw new fi(902,!1);this._attachedToViewContainer=!0}detachFromAppRef(){this._appRef=null,function Ya(i,e){G(i,e,e[11],2,null,null)}(this._lView[1],this._lView)}attachToAppRef(e){if(this._attachedToViewContainer)throw new fi(902,!1);this._appRef=e}}class J3 extends Mv{constructor(e){super(e),this._view=e}detectChanges(){const e=this._view;Q1(e[1],e,e[8],!1)}checkNoChanges(){}get context(){return null}}class TC extends Gd{constructor(e){super(),this.ngModule=e}resolveComponentFactory(e){const t=Io(e);return new Tv(t,this.ngModule)}}function Sv(i){const e=[];for(let t in i)i.hasOwnProperty(t)&&e.push({propName:i[t],templateName:t});return e}class FB{constructor(e,t){this.injector=e,this.parentInjector=t}get(e,t,n){n=Wm(n);const r=this.injector.get(e,hl,n);return r!==hl||t===hl?r:this.parentInjector.get(e,t,n)}}class Tv extends Hh{get inputs(){return Sv(this.componentDef.inputs)}get outputs(){return Sv(this.componentDef.outputs)}constructor(e,t){super(),this.componentDef=e,this.ngModule=t,this.componentType=e.type,this.selector=function Sc(i){return i.map(mB).join(",")}(e.selectors),this.ngContentSelectors=e.ngContentSelectors?e.ngContentSelectors:[],this.isBoundToModule=!!t}create(e,t,n,r){let s=(r=r||this.ngModule)instanceof Ur?r:r?.injector;s&&null!==this.componentDef.getStandaloneInjector&&(s=this.componentDef.getStandaloneInjector(s)||s);const a=s?new FB(e,s):e,l=a.get(Ep,null);if(null===l)throw new fi(407,!1);const u=a.get(Ha,null),d=l.createRenderer(null,this.componentDef),p=this.componentDef.selectors[0][0]||"div",y=n?function vv(i,e,t){return i.selectRootElement(e,t===Th.ShadowDom)}(d,n,this.componentDef.encapsulation):Dg(d,p,function kB(i){const e=i.toLowerCase();return"svg"===e?"svg":"math"===e?"math":null}(p)),C=this.componentDef.onPush?288:272,O=Hg(0,null,null,1,0,null,null,null,null,null),Q=_C(null,O,null,C,null,null,l,d,u,a,null);let W,se;sA(Q);try{const ye=this.componentDef;let Le,we=null;ye.findHostDirectiveDefs?(Le=[],we=new Map,ye.findHostDirectiveDefs(ye,Le,we),Le.push(ye)):Le=[ye];const He=function eT(i,e){const t=i[1];return i[22]=e,z1(t,22,2,"#host",null)}(Q,y),gt=function jx(i,e,t,n,r,s,a,l){const u=r[1];!function OB(i,e,t,n){for(const r of i)e.mergedAttrs=dd(e.mergedAttrs,r.hostAttrs);null!==e.mergedAttrs&&(p_(e,e.mergedAttrs,!0),null!==t&&$t(n,t,e))}(n,i,e,a);const d=s.createRenderer(e,t),p=_C(r,Vh(t),null,t.onPush?32:16,r[i.index],i,s,d,l||null,null,null);return u.firstCreatePass&&Qx(u,i,n.length-1),wv(r,p),r[i.index]=p}(He,y,ye,Le,Q,l,d);se=gu(O,22),y&&function W1(i,e,t,n){if(n)ud(i,t,["ng-version",ch.full]);else{const{attrs:r,classes:s}=function Rx(i){const e=[],t=[];let n=1,r=2;for(;n0&&Kt(i,t,s.join(" "))}}(d,ye,y,n),void 0!==t&&function $x(i,e,t){const n=i.projection=[];for(let r=0;r=0;n--){const r=i[n];r.hostVars=e+=r.hostVars,r.hostAttrs=dd(r.hostAttrs,t=dd(t,r.hostAttrs))}}(n)}function Xx(i){return i===Jl?{}:i===Vs?[]:i}function LB(i,e){const t=i.viewQuery;i.viewQuery=t?(n,r)=>{e(n,r),t(n,r)}:e}function NB(i,e){const t=i.contentQueries;i.contentQueries=t?(n,r,s)=>{e(n,r,s),t(n,r,s)}:e}function rR(i,e){const t=i.hostBindings;i.hostBindings=t?(n,r)=>{e(n,r),t(n,r)}:e}let Iv=null;function Vg(){if(!Iv){const i=ds.Symbol;if(i&&i.iterator)Iv=i.iterator;else{const e=Object.getOwnPropertyNames(Map.prototype);for(let t=0;ta(xc(He[n.index])):n.index;let we=null;if(!a&&l&&(we=function QB(i,e,t,n){const r=i.cleanup;if(null!=r)for(let s=0;su?l[u]:null}"string"==typeof a&&(s+=2)}return null}(i,e,r,n.index)),null!==we)(we.__ngLastListenerFn__||we).__ngNextListenerFn__=s,we.__ngLastListenerFn__=s,C=!1;else{s=PC(n,e,p,s,!1);const He=t.listen(se,r,s);y.push(s,He),d&&d.push(r,Le,ye,ye+1)}}else s=PC(n,e,p,s,!1);const O=n.outputs;let Q;if(C&&null!==O&&(Q=O[r])){const W=Q.length;if(W)for(let se=0;se-1?Fc(i.index,e):e);let u=pT(e,0,n,a),d=s.__ngNextListenerFn__;for(;d;)u=pT(e,0,d,a)&&u,d=d.__ngNextListenerFn__;return r&&!1===u&&(a.preventDefault(),a.returnValue=!1),u}}function Mr(i=1){return function Zm(i){return(Fo.lFrame.contextLView=function Jm(i,e){for(;i>0;)e=e[15],i--;return e}(i,Fo.lFrame.contextLView))[8]}(i)}function AT(i,e){let t=null;const n=function fB(i){const e=i.attrs;if(null!=e){const t=e.indexOf(5);if(!(1&t))return e[t+1]}return null}(i);for(let r=0;r>17&32767}function Jx(i){return 2|i}function v_(i){return(131068&i)>>2}function Em(i,e){return-131069&i|e<<2}function DA(i){return 1|i}function HC(i,e,t,n,r){const s=i[t+1],a=null===e;let l=n?Wg(s):v_(s),u=!1;for(;0!==l&&(!1===u||a);){const p=i[l+1];bT(i[l],e)&&(u=!0,i[l+1]=n?DA(p):Jx(p)),l=n?Wg(p):v_(p)}u&&(i[t+1]=n?Jx(s):DA(s))}function bT(i,e){return null===i||null==e||(Array.isArray(i)?i[1]:i)===e||!(!Array.isArray(i)||"string"!=typeof e)&&jf(i,e)>=0}const Cu={textEnd:0,key:0,keyEnd:0,value:0,valueEnd:0};function xT(i){return i.substring(Cu.key,Cu.keyEnd)}function $B(i){return i.substring(Cu.value,Cu.valueEnd)}function wT(i,e){const t=Cu.textEnd;return t===e?-1:(e=Cu.keyEnd=function CT(i,e,t){for(;e32;)e++;return e}(i,Cu.key=e,t),dl(i,e,t))}function ew(i,e){const t=Cu.textEnd;let n=Cu.key=dl(i,e,t);return t===n?-1:(n=Cu.keyEnd=function MT(i,e,t){let n;for(;e=65&&(-33&n)<=90||n>=48&&n<=57);)e++;return e}(i,n,t),n=Rv(i,n,t),n=Cu.value=dl(i,n,t),n=Cu.valueEnd=function tw(i,e,t){let n=-1,r=-1,s=-1,a=e,l=a;for(;a32&&(l=a),s=r,r=n,n=-33&u}return l}(i,n,t),Rv(i,n,t))}function Ov(i){Cu.key=0,Cu.keyEnd=0,Cu.value=0,Cu.valueEnd=0,Cu.textEnd=i.length}function dl(i,e,t){for(;e=0;t=ew(e,t))qC(i,xT(e),$B(e))}function jd(i,e){for(let t=function XB(i){return Ov(i),wT(i,dl(i,0,Cu.textEnd))}(e);t>=0;t=wT(e,t))zu(i,xT(e),!0)}function Op(i,e,t,n){const r=er(),s=ga(),a=ad(2);s.firstUpdatePass&&b_(s,i,a,n),e!==ea&&qh(r,a,e)&&K1(s,s.data[Gr()],r,r[11],i,r[a+1]=function TT(i,e){return null==i||("string"==typeof e?i+=e:"object"==typeof i&&(i=kn(sl(i)))),i}(e,t),n,a)}function Rp(i,e,t,n){const r=ga(),s=ad(2);r.firstUpdatePass&&b_(r,null,s,n);const a=er();if(t!==ea&&qh(a,s,t)){const l=r.data[Gr()];if(ET(l,n)&&!jg(r,s)){let u=n?l.classesWithoutHost:l.stylesWithoutHost;null!==u&&(t=ii(u,t||"")),hT(r,l,a,t,n)}else!function e5(i,e,t,n,r,s,a,l){r===ea&&(r=Vs);let u=0,d=0,p=0=i.expandoStartIndex}function b_(i,e,t,n){const r=i.data;if(null===r[t+1]){const s=r[Gr()],a=jg(i,t);ET(s,n)&&null===e&&!a&&(e=!1),e=function ZB(i,e,t,n){const r=function Pd(i){const e=Fo.lFrame.currentDirectiveIndex;return-1===e?null:i[e]}(i);let s=n?e.residualClasses:e.residualStyles;if(null===r)0===(n?e.classBindings:e.styleBindings)&&(t=Lv(t=iw(null,i,e,t,n),e.attrs,n),s=null);else{const a=e.directiveStylingLast;if(-1===a||i[a]!==r)if(t=iw(r,i,e,t,n),null===s){let u=function VC(i,e,t){const n=t?e.classBindings:e.styleBindings;if(0!==v_(n))return i[Wg(n)]}(i,e,n);void 0!==u&&Array.isArray(u)&&(u=iw(null,i,e,u[1],n),u=Lv(u,e.attrs,n),function GC(i,e,t,n){i[Wg(t?e.classBindings:e.styleBindings)]=n}(i,e,n,u))}else s=function ST(i,e,t){let n;const r=e.directiveEnd;for(let s=1+e.directiveStylingLast;s0)&&(d=!0)):p=t,r)if(0!==u){const C=Wg(i[l+1]);i[n+1]=Zx(C,l),0!==C&&(i[C+1]=Em(i[C+1],n)),i[l+1]=function UC(i,e){return 131071&i|e<<17}(i[l+1],n)}else i[n+1]=Zx(l,0),0!==l&&(i[l+1]=Em(i[l+1],n)),l=n;else i[n+1]=Zx(u,0),0===l?l=n:i[u+1]=Em(i[u+1],n),u=n;d&&(i[n+1]=Jx(i[n+1])),HC(i,p,n,!0),HC(i,p,n,!1),function vT(i,e,t,n,r){const s=r?i.residualClasses:i.residualStyles;null!=s&&"string"==typeof e&&jf(s,e)>=0&&(t[n+1]=DA(t[n+1]))}(e,p,i,n,s),a=Zx(l,u),s?e.classBindings=a:e.styleBindings=a}(r,s,e,t,a,n)}}function iw(i,e,t,n,r){let s=null;const a=t.directiveEnd;let l=t.directiveStylingLast;for(-1===l?l=t.directiveStart:l++;l0;){const u=i[r],d=Array.isArray(u),p=d?u[1]:u,y=null===p;let C=t[r+1];C===ea&&(C=y?Vs:void 0);let O=y?mA(C,n):p===n?C:void 0;if(d&&!x_(O)&&(O=mA(u,n)),x_(O)&&(l=O,a))return l;const Q=i[r+1];r=a?Wg(Q):v_(Q)}if(null!==e){let u=s?e.residualClasses:e.residualStyles;null!=u&&(l=mA(u,n))}return l}function x_(i){return void 0!==i}function ET(i,e){return 0!=(i.flags&(e?8:16))}function dr(i,e=""){const t=er(),n=ga(),r=i+22,s=n.firstCreatePass?z1(n,r,1,e,null):n.data[r],a=t[r]=function Tg(i,e){return i.createText(e)}(t[11],e);MA(n,t,a,s),$c(s,!1)}function ph(i){return Gl("",i,""),ph}function Gl(i,e,t){const n=er(),r=function g_(i,e,t,n){return qh(i,nf(),t)?e+Or(t)+n:ea}(n,i,e,t);return r!==ea&&function Gh(i,e,t){const n=nd(e,i);!function Eg(i,e,t){i.setValue(e,t)}(i[11],n,t)}(n,Gr(),r),Gl}function Di(i,e,t){const n=er();return qh(n,nf(),e)&&hh(ga(),Bl(),n,i,e,n[11],t,!0),Di}const Pi="en-US";let vi=Pi;function r5(i,e,t,n,r){if(i=$i(i),Array.isArray(i))for(let s=0;s>20;if(mr(i)||!i.multi){const O=new fA(u,r,wt),Q=o5(l,e,r?p:p+C,y);-1===Q?(ug(sf(d,a),s,l),s5(s,i,e.length),e.push(l),d.directiveStart++,d.directiveEnd++,r&&(d.providerIndexes+=1048576),t.push(O),a.push(O)):(t[Q]=O,a[Q]=O)}else{const O=o5(l,e,p+C,y),Q=o5(l,e,p,p+C),se=Q>=0&&t[Q];if(r&&!se||!r&&!(O>=0&&t[O])){ug(sf(d,a),s,l);const ye=function wq(i,e,t,n,r){const s=new fA(i,t,wt);return s.multi=[],s.index=e,s.componentProviders=0,fR(s,r,n&&!t),s}(r?xq:bq,t.length,r,n,u);!r&&se&&(t[Q].providerFactory=ye),s5(s,i,e.length,0),e.push(l),d.directiveStart++,d.directiveEnd++,r&&(d.providerIndexes+=1048576),t.push(ye),a.push(ye)}else s5(s,i,O>-1?O:Q,fR(t[r?Q:O],u,!r&&n));!r&&n&&se&&t[Q].componentProviders++}}}function s5(i,e,t,n){const r=mr(e),s=function Yi(i){return!!i.useClass}(e);if(r||s){const u=(s?$i(e.useClass):e).prototype.ngOnDestroy;if(u){const d=i.destroyHooks||(i.destroyHooks=[]);if(!r&&e.multi){const p=d.indexOf(t);-1===p?d.push(t,[n,u]):d[p+1].push(n,u)}else d.push(t,u)}}}function fR(i,e,t){return t&&i.componentProviders++,i.multi.push(e)-1}function o5(i,e,t,n){for(let r=t;r{t.providersResolver=(n,r)=>function vq(i,e,t){const n=ga();if(n.firstCreatePass){const r=Pc(i);r5(t,n.data,n.blueprint,r,!0),r5(e,n.data,n.blueprint,r,!1)}}(n,r?r(i):i,e)}}class sw{}class pR{}class AR extends sw{constructor(e,t){super(),this._parent=t,this._bootstrapComponents=[],this.destroyCbs=[],this.componentFactoryResolver=new TC(this);const n=Ic(e);this._bootstrapComponents=np(n.bootstrap),this._r3Injector=uC(e,t,[{provide:sw,useValue:this},{provide:Gd,useValue:this.componentFactoryResolver}],kn(e),new Set(["environment"])),this._r3Injector.resolveInjectorInitializers(),this.instance=this._r3Injector.get(e)}get injector(){return this._r3Injector}destroy(){const e=this._r3Injector;!e.destroyed&&e.destroy(),this.destroyCbs.forEach(t=>t()),this.destroyCbs=null}onDestroy(e){this.destroyCbs.push(e)}}class l5 extends pR{constructor(e){super(),this.moduleType=e}create(e){return new AR(this.moduleType,e)}}class Mq extends sw{constructor(e,t,n){super(),this.componentFactoryResolver=new TC(this),this.instance=null;const r=new Wo([...e,{provide:sw,useValue:this},{provide:Gd,useValue:this.componentFactoryResolver}],t||ro(),n,new Set(["environment"]));this.injector=r,r.resolveInjectorInitializers()}destroy(){this.injector.destroy()}onDestroy(e){this.injector.onDestroy(e)}}function OT(i,e,t=null){return new Mq(i,e,t).injector}let Sq=(()=>{class i{constructor(t){this._injector=t,this.cachedInjectors=new Map}getOrCreateStandaloneInjector(t){if(!t.standalone)return null;if(!this.cachedInjectors.has(t.id)){const n=yt(0,t.type),r=n.length>0?OT([n],this._injector,`Standalone[${t.type.name}]`):null;this.cachedInjectors.set(t.id,r)}return this.cachedInjectors.get(t.id)}ngOnDestroy(){try{for(const t of this.cachedInjectors.values())null!==t&&t.destroy()}finally{this.cachedInjectors.clear()}}}return i.\u0275prov=Ue({token:i,providedIn:"environment",factory:()=>new i(ci(Ur))}),i})();function c5(i){i.getStandaloneInjector=e=>e.get(Sq).getOrCreateStandaloneInjector(i)}function $d(i,e,t,n){return wR(er(),$l(),i,e,t,n)}function xR(i,e,t,n,r){return function CR(i,e,t,n,r,s,a){const l=e+t;return Gg(i,l,r,s)?Bp(i,l+2,a?n.call(a,r,s):n(r,s)):KC(i,l+2)}(er(),$l(),i,e,t,n,r)}function RT(i,e,t,n,r,s){return function MR(i,e,t,n,r,s,a,l){const u=e+t;return function Pv(i,e,t,n,r){const s=Gg(i,e,t,n);return qh(i,e+2,r)||s}(i,u,r,s,a)?Bp(i,u+3,l?n.call(l,r,s,a):n(r,s,a)):KC(i,u+3)}(er(),$l(),i,e,t,n,r,s)}function KC(i,e){const t=i[e];return t===ea?void 0:t}function wR(i,e,t,n,r,s){const a=e+t;return qh(i,a,r)?Bp(i,a+1,s?n.call(s,r):n(r)):KC(i,a+1)}function h5(i){return e=>{setTimeout(i,void 0,e)}}const Ws=class jq extends D{constructor(e=!1){super(),this.__isAsync=e}emit(e){super.next(e)}subscribe(e,t,n){let r=e,s=t||(()=>null),a=n;if(e&&"object"==typeof e){const u=e;r=u.next?.bind(u),s=u.error?.bind(u),a=u.complete?.bind(u)}this.__isAsync&&(s=h5(s),r&&(r=h5(r)),a&&(a=h5(a)));const l=super.subscribe({next:r,error:s,complete:a});return e instanceof De&&e.add(l),l}};function $q(){return this._results[Vg()]()}class Hv{get changes(){return this._changes||(this._changes=new Ws)}constructor(e=!1){this._emitDistinctChangesOnly=e,this.dirty=!0,this._results=[],this._changesDetected=!1,this._changes=null,this.length=0,this.first=void 0,this.last=void 0;const t=Vg(),n=Hv.prototype;n[t]||(n[t]=$q)}get(e){return this._results[e]}map(e){return this._results.map(e)}filter(e){return this._results.filter(e)}find(e){return this._results.find(e)}reduce(e,t){return this._results.reduce(e,t)}forEach(e){this._results.forEach(e)}some(e){return this._results.some(e)}toArray(){return this._results.slice()}toString(){return this._results.toString()}reset(e,t){const n=this;n.dirty=!1;const r=function Rh(i){return i.flat(Number.POSITIVE_INFINITY)}(e);(this._changesDetected=!function Zy(i,e,t){if(i.length!==e.length)return!1;for(let n=0;n{class i{}return i.__NG_ELEMENT_ID__=Yq,i})();const Xq=gh,Kq=class extends Xq{constructor(e,t,n){super(),this._declarationLView=e,this._declarationTContainer=t,this.elementRef=n}createEmbeddedView(e,t){const n=this._declarationTContainer.tViews,r=_C(this._declarationLView,n,e,16,null,n.declTNode,null,null,null,null,t||null);r[17]=this._declarationLView[this._declarationTContainer.index];const a=this._declarationLView[19];return null!==a&&(r[19]=a.createEmbeddedView(n)),Ux(n,r,e),new Mv(r)}};function Yq(){return LT(wc(),er())}function LT(i,e){return 4&i.type?new Kq(e,i,tp(i,e)):null}let Mu=(()=>{class i{}return i.__NG_ELEMENT_ID__=Zq,i})();function Zq(){return PR(wc(),er())}const Jq=Mu,BR=class extends Jq{constructor(e,t,n){super(),this._lContainer=e,this._hostTNode=t,this._hostLView=n}get element(){return tp(this._hostTNode,this._hostLView)}get injector(){return new Fh(this._hostTNode,this._hostLView)}get parentInjector(){const e=af(this._hostTNode,this._hostLView);if(k0(e)){const t=kh(e,this._hostLView),n=pp(e);return new Fh(t[1].data[n+8],t)}return new Fh(null,this._hostLView)}clear(){for(;this.length>0;)this.remove(this.length-1)}get(e){const t=IR(this._lContainer);return null!==t&&t[e]||null}get length(){return this._lContainer.length-10}createEmbeddedView(e,t,n){let r,s;"number"==typeof n?r=n:null!=n&&(r=n.index,s=n.injector);const a=e.createEmbeddedView(t||{},s);return this.insert(a,r),a}createComponent(e,t,n,r,s){const a=e&&!function cf(i){return"function"==typeof i}(e);let l;if(a)l=t;else{const y=t||{};l=y.index,n=y.injector,r=y.projectableNodes,s=y.environmentInjector||y.ngModuleRef}const u=a?e:new Tv(Io(e)),d=n||this.parentInjector;if(!s&&null==u.ngModule){const C=(a?d:this.parentInjector).get(Ur,null);C&&(s=C)}const p=u.create(d,r,void 0,s);return this.insert(p.hostView,l),p}insert(e,t){const n=e._lView,r=n[1];if(function Oc(i){return Wc(i[3])}(n)){const p=this.indexOf(e);if(-1!==p)this.detach(p);else{const y=n[3],C=new BR(y,y[6],y[3]);C.detach(C.indexOf(e))}}const s=this._adjustIndex(t),a=this._lContainer;!function xp(i,e,t,n){const r=10+n,s=t.length;n>0&&(t[r-1][4]=e),n0)n.push(a[l/2]);else{const d=s[l+1],p=e[-u];for(let y=10;y{class i{constructor(t){this.appInits=t,this.resolve=zT,this.reject=zT,this.initialized=!1,this.done=!1,this.donePromise=new Promise((n,r)=>{this.resolve=n,this.reject=r})}runInitializers(){if(this.initialized)return;const t=[],n=()=>{this.done=!0,this.resolve()};if(this.appInits)for(let r=0;r{s.subscribe({complete:l,error:u})});t.push(a)}}Promise.all(t).then(()=>{n()}).catch(r=>{this.reject(r)}),0===t.length&&n(),this.initialized=!0}}return i.\u0275fac=function(t){return new(t||i)(ci(HT,8))},i.\u0275prov=Ue({token:i,factory:i.\u0275fac,providedIn:"root"}),i})();const lw=new cr("AppId",{providedIn:"root",factory:function n8(){return`${x5()}${x5()}${x5()}`}});function x5(){return String.fromCharCode(97+Math.floor(25*Math.random()))}const i8=new cr("Platform Initializer"),GT=new cr("Platform ID",{providedIn:"platform",factory:()=>"unknown"}),r8=new cr("appBootstrapListener"),_h=new cr("AnimationModuleType");let MQ=(()=>{class i{log(t){console.log(t)}warn(t){console.warn(t)}}return i.\u0275fac=function(t){return new(t||i)},i.\u0275prov=Ue({token:i,factory:i.\u0275fac,providedIn:"platform"}),i})();const Kg=new cr("LocaleId",{providedIn:"root",factory:()=>To(Kg,Ii.Optional|Ii.SkipSelf)||function SQ(){return typeof $localize<"u"&&$localize.locale||Pi}()});class EQ{constructor(e,t){this.ngModuleFactory=e,this.componentFactories=t}}let s8=(()=>{class i{compileModuleSync(t){return new l5(t)}compileModuleAsync(t){return Promise.resolve(this.compileModuleSync(t))}compileModuleAndAllComponentsSync(t){const n=this.compileModuleSync(t),s=np(Ic(t).declarations).reduce((a,l)=>{const u=Io(l);return u&&a.push(new Tv(u)),a},[]);return new EQ(n,s)}compileModuleAndAllComponentsAsync(t){return Promise.resolve(this.compileModuleAndAllComponentsSync(t))}clearCache(){}clearCacheFor(t){}getModuleId(t){}}return i.\u0275fac=function(t){return new(t||i)},i.\u0275prov=Ue({token:i,factory:i.\u0275fac,providedIn:"root"}),i})();const IQ=(()=>Promise.resolve(0))();function w5(i){typeof Zone>"u"?IQ.then(()=>{i&&i.apply(null,null)}):Zone.current.scheduleMicroTask("scheduleMicrotask",i)}class mo{constructor({enableLongStackTrace:e=!1,shouldCoalesceEventChangeDetection:t=!1,shouldCoalesceRunChangeDetection:n=!1}){if(this.hasPendingMacrotasks=!1,this.hasPendingMicrotasks=!1,this.isStable=!0,this.onUnstable=new Ws(!1),this.onMicrotaskEmpty=new Ws(!1),this.onStable=new Ws(!1),this.onError=new Ws(!1),typeof Zone>"u")throw new fi(908,!1);Zone.assertZonePatched();const r=this;r._nesting=0,r._outer=r._inner=Zone.current,Zone.TaskTrackingZoneSpec&&(r._inner=r._inner.fork(new Zone.TaskTrackingZoneSpec)),e&&Zone.longStackTraceZoneSpec&&(r._inner=r._inner.fork(Zone.longStackTraceZoneSpec)),r.shouldCoalesceEventChangeDetection=!n&&t,r.shouldCoalesceRunChangeDetection=n,r.lastRequestAnimationFrameId=-1,r.nativeRequestAnimationFrame=function PQ(){let i=ds.requestAnimationFrame,e=ds.cancelAnimationFrame;if(typeof Zone<"u"&&i&&e){const t=i[Zone.__symbol__("OriginalDelegate")];t&&(i=t);const n=e[Zone.__symbol__("OriginalDelegate")];n&&(e=n)}return{nativeRequestAnimationFrame:i,nativeCancelAnimationFrame:e}}().nativeRequestAnimationFrame,function OQ(i){const e=()=>{!function FQ(i){i.isCheckStableRunning||-1!==i.lastRequestAnimationFrameId||(i.lastRequestAnimationFrameId=i.nativeRequestAnimationFrame.call(ds,()=>{i.fakeTopEventTask||(i.fakeTopEventTask=Zone.root.scheduleEventTask("fakeTopEventTask",()=>{i.lastRequestAnimationFrameId=-1,M5(i),i.isCheckStableRunning=!0,C5(i),i.isCheckStableRunning=!1},void 0,()=>{},()=>{})),i.fakeTopEventTask.invoke()}),M5(i))}(i)};i._inner=i._inner.fork({name:"angular",properties:{isAngularZone:!0},onInvokeTask:(t,n,r,s,a,l)=>{try{return l8(i),t.invokeTask(r,s,a,l)}finally{(i.shouldCoalesceEventChangeDetection&&"eventTask"===s.type||i.shouldCoalesceRunChangeDetection)&&e(),c8(i)}},onInvoke:(t,n,r,s,a,l,u)=>{try{return l8(i),t.invoke(r,s,a,l,u)}finally{i.shouldCoalesceRunChangeDetection&&e(),c8(i)}},onHasTask:(t,n,r,s)=>{t.hasTask(r,s),n===r&&("microTask"==s.change?(i._hasPendingMicrotasks=s.microTask,M5(i),C5(i)):"macroTask"==s.change&&(i.hasPendingMacrotasks=s.macroTask))},onHandleError:(t,n,r,s)=>(t.handleError(r,s),i.runOutsideAngular(()=>i.onError.emit(s)),!1)})}(r)}static isInAngularZone(){return typeof Zone<"u"&&!0===Zone.current.get("isAngularZone")}static assertInAngularZone(){if(!mo.isInAngularZone())throw new fi(909,!1)}static assertNotInAngularZone(){if(mo.isInAngularZone())throw new fi(909,!1)}run(e,t,n){return this._inner.run(e,t,n)}runTask(e,t,n,r){const s=this._inner,a=s.scheduleEventTask("NgZoneEvent: "+r,e,kQ,zT,zT);try{return s.runTask(a,t,n)}finally{s.cancelTask(a)}}runGuarded(e,t,n){return this._inner.runGuarded(e,t,n)}runOutsideAngular(e){return this._outer.run(e)}}const kQ={};function C5(i){if(0==i._nesting&&!i.hasPendingMicrotasks&&!i.isStable)try{i._nesting++,i.onMicrotaskEmpty.emit(null)}finally{if(i._nesting--,!i.hasPendingMicrotasks)try{i.runOutsideAngular(()=>i.onStable.emit(null))}finally{i.isStable=!0}}}function M5(i){i.hasPendingMicrotasks=!!(i._hasPendingMicrotasks||(i.shouldCoalesceEventChangeDetection||i.shouldCoalesceRunChangeDetection)&&-1!==i.lastRequestAnimationFrameId)}function l8(i){i._nesting++,i.isStable&&(i.isStable=!1,i.onUnstable.emit(null))}function c8(i){i._nesting--,C5(i)}class RQ{constructor(){this.hasPendingMicrotasks=!1,this.hasPendingMacrotasks=!1,this.isStable=!0,this.onUnstable=new Ws,this.onMicrotaskEmpty=new Ws,this.onStable=new Ws,this.onError=new Ws}run(e,t,n){return e.apply(t,n)}runGuarded(e,t,n){return e.apply(t,n)}runOutsideAngular(e){return e()}runTask(e,t,n,r){return e.apply(t,n)}}const u8=new cr(""),qT=new cr("");let E5,S5=(()=>{class i{constructor(t,n,r){this._ngZone=t,this.registry=n,this._pendingCount=0,this._isZoneStable=!0,this._didWork=!1,this._callbacks=[],this.taskTrackingZone=null,E5||(function LQ(i){E5=i}(r),r.addToWindow(n)),this._watchAngularEvents(),t.run(()=>{this.taskTrackingZone=typeof Zone>"u"?null:Zone.current.get("TaskTrackingZone")})}_watchAngularEvents(){this._ngZone.onUnstable.subscribe({next:()=>{this._didWork=!0,this._isZoneStable=!1}}),this._ngZone.runOutsideAngular(()=>{this._ngZone.onStable.subscribe({next:()=>{mo.assertNotInAngularZone(),w5(()=>{this._isZoneStable=!0,this._runCallbacksIfReady()})}})})}increasePendingRequestCount(){return this._pendingCount+=1,this._didWork=!0,this._pendingCount}decreasePendingRequestCount(){if(this._pendingCount-=1,this._pendingCount<0)throw new Error("pending async requests below zero");return this._runCallbacksIfReady(),this._pendingCount}isStable(){return this._isZoneStable&&0===this._pendingCount&&!this._ngZone.hasPendingMacrotasks}_runCallbacksIfReady(){if(this.isStable())w5(()=>{for(;0!==this._callbacks.length;){let t=this._callbacks.pop();clearTimeout(t.timeoutId),t.doneCb(this._didWork)}this._didWork=!1});else{let t=this.getPendingTasks();this._callbacks=this._callbacks.filter(n=>!n.updateCb||!n.updateCb(t)||(clearTimeout(n.timeoutId),!1)),this._didWork=!0}}getPendingTasks(){return this.taskTrackingZone?this.taskTrackingZone.macroTasks.map(t=>({source:t.source,creationLocation:t.creationLocation,data:t.data})):[]}addCallback(t,n,r){let s=-1;n&&n>0&&(s=setTimeout(()=>{this._callbacks=this._callbacks.filter(a=>a.timeoutId!==s),t(this._didWork,this.getPendingTasks())},n)),this._callbacks.push({doneCb:t,timeoutId:s,updateCb:r})}whenStable(t,n,r){if(r&&!this.taskTrackingZone)throw new Error('Task tracking zone is required when passing an update callback to whenStable(). Is "zone.js/plugins/task-tracking" loaded?');this.addCallback(t,n,r),this._runCallbacksIfReady()}getPendingRequestCount(){return this._pendingCount}registerApplication(t){this.registry.registerApplication(t,this)}unregisterApplication(t){this.registry.unregisterApplication(t)}findProviders(t,n,r){return[]}}return i.\u0275fac=function(t){return new(t||i)(ci(mo),ci(T5),ci(qT))},i.\u0275prov=Ue({token:i,factory:i.\u0275fac}),i})(),T5=(()=>{class i{constructor(){this._applications=new Map}registerApplication(t,n){this._applications.set(t,n)}unregisterApplication(t){this._applications.delete(t)}unregisterAllApplications(){this._applications.clear()}getTestability(t){return this._applications.get(t)||null}getAllTestabilities(){return Array.from(this._applications.values())}getAllRootElements(){return Array.from(this._applications.keys())}findTestabilityInTree(t,n=!0){return E5?.findTestabilityInTree(this,t,n)??null}}return i.\u0275fac=function(t){return new(t||i)},i.\u0275prov=Ue({token:i,factory:i.\u0275fac,providedIn:"platform"}),i})(),ey=null;const h8=new cr("AllowMultipleToken"),D5=new cr("PlatformDestroyListeners");class d8{constructor(e,t){this.name=e,this.token=t}}function p8(i,e,t=[]){const n=`Platform: ${e}`,r=new cr(n);return(s=[])=>{let a=B5();if(!a||a.injector.get(h8,!1)){const l=[...t,...s,{provide:r,useValue:!0}];i?i(l):function zQ(i){if(ey&&!ey.get(h8,!1))throw new fi(400,!1);ey=i;const e=i.get(m8);(function f8(i){const e=i.get(i8,null);e&&e.forEach(t=>t())})(i)}(function A8(i=[],e){return zc.create({name:e,providers:[{provide:Ys,useValue:"platform"},{provide:D5,useValue:new Set([()=>ey=null])},...i]})}(l,n))}return function VQ(i){const e=B5();if(!e)throw new fi(401,!1);return e}()}}function B5(){return ey?.get(m8)??null}let m8=(()=>{class i{constructor(t){this._injector=t,this._modules=[],this._destroyListeners=[],this._destroyed=!1}bootstrapModuleFactory(t,n){const r=function _8(i,e){let t;return t="noop"===i?new RQ:("zone.js"===i?void 0:i)||new mo(e),t}(n?.ngZone,function g8(i){return{enableLongStackTrace:!1,shouldCoalesceEventChangeDetection:!(!i||!i.ngZoneEventCoalescing)||!1,shouldCoalesceRunChangeDetection:!(!i||!i.ngZoneRunCoalescing)||!1}}(n)),s=[{provide:mo,useValue:r}];return r.run(()=>{const a=zc.create({providers:s,parent:this.injector,name:t.moduleType.name}),l=t.create(a),u=l.injector.get(vd,null);if(!u)throw new fi(402,!1);return r.runOutsideAngular(()=>{const d=r.onError.subscribe({next:p=>{u.handleError(p)}});l.onDestroy(()=>{QT(this._modules,l),d.unsubscribe()})}),function y8(i,e,t){try{const n=t();return Fv(n)?n.catch(r=>{throw e.runOutsideAngular(()=>i.handleError(r)),r}):n}catch(n){throw e.runOutsideAngular(()=>i.handleError(n)),n}}(u,r,()=>{const d=l.injector.get(VT);return d.runInitializers(),d.donePromise.then(()=>(function ir(i){E(i,"Expected localeId to be defined"),"string"==typeof i&&(vi=i.toLowerCase().replace(/_/g,"-"))}(l.injector.get(Kg,Pi)||Pi),this._moduleDoBootstrap(l),l))})})}bootstrapModule(t,n=[]){const r=v8({},n);return function NQ(i,e,t){const n=new l5(t);return Promise.resolve(n)}(0,0,t).then(s=>this.bootstrapModuleFactory(s,r))}_moduleDoBootstrap(t){const n=t.injector.get(cw);if(t._bootstrapComponents.length>0)t._bootstrapComponents.forEach(r=>n.bootstrap(r));else{if(!t.instance.ngDoBootstrap)throw new fi(-403,!1);t.instance.ngDoBootstrap(n)}this._modules.push(t)}onDestroy(t){this._destroyListeners.push(t)}get injector(){return this._injector}destroy(){if(this._destroyed)throw new fi(404,!1);this._modules.slice().forEach(n=>n.destroy()),this._destroyListeners.forEach(n=>n());const t=this._injector.get(D5,null);t&&(t.forEach(n=>n()),t.clear()),this._destroyed=!0}get destroyed(){return this._destroyed}}return i.\u0275fac=function(t){return new(t||i)(ci(zc))},i.\u0275prov=Ue({token:i,factory:i.\u0275fac,providedIn:"platform"}),i})();function v8(i,e){return Array.isArray(e)?e.reduce(v8,i):{...i,...e}}let cw=(()=>{class i{get destroyed(){return this._destroyed}get injector(){return this._injector}constructor(t,n,r){this._zone=t,this._injector=n,this._exceptionHandler=r,this._bootstrapListeners=[],this._views=[],this._runningTick=!1,this._stable=!0,this._destroyed=!1,this._destroyListeners=[],this.componentTypes=[],this.components=[],this._onMicrotaskEmptySubscription=this._zone.onMicrotaskEmpty.subscribe({next:()=>{this._zone.run(()=>{this.tick()})}});const s=new de(l=>{this._stable=this._zone.isStable&&!this._zone.hasPendingMacrotasks&&!this._zone.hasPendingMicrotasks,this._zone.runOutsideAngular(()=>{l.next(this._stable),l.complete()})}),a=new de(l=>{let u;this._zone.runOutsideAngular(()=>{u=this._zone.onStable.subscribe(()=>{mo.assertNotInAngularZone(),w5(()=>{!this._stable&&!this._zone.hasPendingMacrotasks&&!this._zone.hasPendingMicrotasks&&(this._stable=!0,l.next(!0))})})});const d=this._zone.onUnstable.subscribe(()=>{mo.assertInAngularZone(),this._stable&&(this._stable=!1,this._zone.runOutsideAngular(()=>{l.next(!1)}))});return()=>{u.unsubscribe(),d.unsubscribe()}});this.isStable=It(s,a.pipe(Pt()))}bootstrap(t,n){const r=t instanceof Hh;if(!this._injector.get(VT).done)throw!r&&function pu(i){const e=Io(i)||Cr(i)||ec(i);return null!==e&&e.standalone}(t),new fi(405,false);let a;a=r?t:this._injector.get(Gd).resolveComponentFactory(t),this.componentTypes.push(a.componentType);const l=function UQ(i){return i.isBoundToModule}(a)?void 0:this._injector.get(sw),d=a.create(zc.NULL,[],n||a.selector,l),p=d.location.nativeElement,y=d.injector.get(u8,null);return y?.registerApplication(p),d.onDestroy(()=>{this.detachView(d.hostView),QT(this.components,d),y?.unregisterApplication(p)}),this._loadComponent(d),d}tick(){if(this._runningTick)throw new fi(101,!1);try{this._runningTick=!0;for(let t of this._views)t.detectChanges()}catch(t){this._zone.runOutsideAngular(()=>this._exceptionHandler.handleError(t))}finally{this._runningTick=!1}}attachView(t){const n=t;this._views.push(n),n.attachToAppRef(this)}detachView(t){const n=t;QT(this._views,n),n.detachFromAppRef()}_loadComponent(t){this.attachView(t.hostView),this.tick(),this.components.push(t);const n=this._injector.get(r8,[]);n.push(...this._bootstrapListeners),n.forEach(r=>r(t))}ngOnDestroy(){if(!this._destroyed)try{this._destroyListeners.forEach(t=>t()),this._views.slice().forEach(t=>t.destroy()),this._onMicrotaskEmptySubscription.unsubscribe()}finally{this._destroyed=!0,this._views=[],this._bootstrapListeners=[],this._destroyListeners=[]}}onDestroy(t){return this._destroyListeners.push(t),()=>QT(this._destroyListeners,t)}destroy(){if(this._destroyed)throw new fi(406,!1);const t=this._injector;t.destroy&&!t.destroyed&&t.destroy()}get viewCount(){return this._views.length}warnIfDestroyed(){}}return i.\u0275fac=function(t){return new(t||i)(ci(mo),ci(Ur),ci(vd))},i.\u0275prov=Ue({token:i,factory:i.\u0275fac,providedIn:"root"}),i})();function QT(i,e){const t=i.indexOf(e);t>-1&&i.splice(t,1)}let pl=(()=>{class i{}return i.__NG_ELEMENT_ID__=qQ,i})();function qQ(i){return function QQ(i,e,t){if(Ih(i)&&!t){const n=Fc(i.index,e);return new Mv(n,n)}return 47&i.type?new Mv(e[16],e):null}(wc(),er(),16==(16&i))}class M8{constructor(){}supports(e){return DC(e)}create(e){return new YQ(e)}}const KQ=(i,e)=>e;class YQ{constructor(e){this.length=0,this._linkedRecords=null,this._unlinkedRecords=null,this._previousItHead=null,this._itHead=null,this._itTail=null,this._additionsHead=null,this._additionsTail=null,this._movesHead=null,this._movesTail=null,this._removalsHead=null,this._removalsTail=null,this._identityChangesHead=null,this._identityChangesTail=null,this._trackByFn=e||KQ}forEachItem(e){let t;for(t=this._itHead;null!==t;t=t._next)e(t)}forEachOperation(e){let t=this._itHead,n=this._removalsHead,r=0,s=null;for(;t||n;){const a=!n||t&&t.currentIndex{a=this._trackByFn(r,l),null!==t&&Object.is(t.trackById,a)?(n&&(t=this._verifyReinsertion(t,l,a,r)),Object.is(t.item,l)||this._addIdentityChange(t,l)):(t=this._mismatch(t,l,a,r),n=!0),t=t._next,r++}),this.length=r;return this._truncate(t),this.collection=e,this.isDirty}get isDirty(){return null!==this._additionsHead||null!==this._movesHead||null!==this._removalsHead||null!==this._identityChangesHead}_reset(){if(this.isDirty){let e;for(e=this._previousItHead=this._itHead;null!==e;e=e._next)e._nextPrevious=e._next;for(e=this._additionsHead;null!==e;e=e._nextAdded)e.previousIndex=e.currentIndex;for(this._additionsHead=this._additionsTail=null,e=this._movesHead;null!==e;e=e._nextMoved)e.previousIndex=e.currentIndex;this._movesHead=this._movesTail=null,this._removalsHead=this._removalsTail=null,this._identityChangesHead=this._identityChangesTail=null}}_mismatch(e,t,n,r){let s;return null===e?s=this._itTail:(s=e._prev,this._remove(e)),null!==(e=null===this._unlinkedRecords?null:this._unlinkedRecords.get(n,null))?(Object.is(e.item,t)||this._addIdentityChange(e,t),this._reinsertAfter(e,s,r)):null!==(e=null===this._linkedRecords?null:this._linkedRecords.get(n,r))?(Object.is(e.item,t)||this._addIdentityChange(e,t),this._moveAfter(e,s,r)):e=this._addAfter(new ZQ(t,n),s,r),e}_verifyReinsertion(e,t,n,r){let s=null===this._unlinkedRecords?null:this._unlinkedRecords.get(n,null);return null!==s?e=this._reinsertAfter(s,e._prev,r):e.currentIndex!=r&&(e.currentIndex=r,this._addToMoves(e,r)),e}_truncate(e){for(;null!==e;){const t=e._next;this._addToRemovals(this._unlink(e)),e=t}null!==this._unlinkedRecords&&this._unlinkedRecords.clear(),null!==this._additionsTail&&(this._additionsTail._nextAdded=null),null!==this._movesTail&&(this._movesTail._nextMoved=null),null!==this._itTail&&(this._itTail._next=null),null!==this._removalsTail&&(this._removalsTail._nextRemoved=null),null!==this._identityChangesTail&&(this._identityChangesTail._nextIdentityChange=null)}_reinsertAfter(e,t,n){null!==this._unlinkedRecords&&this._unlinkedRecords.remove(e);const r=e._prevRemoved,s=e._nextRemoved;return null===r?this._removalsHead=s:r._nextRemoved=s,null===s?this._removalsTail=r:s._prevRemoved=r,this._insertAfter(e,t,n),this._addToMoves(e,n),e}_moveAfter(e,t,n){return this._unlink(e),this._insertAfter(e,t,n),this._addToMoves(e,n),e}_addAfter(e,t,n){return this._insertAfter(e,t,n),this._additionsTail=null===this._additionsTail?this._additionsHead=e:this._additionsTail._nextAdded=e,e}_insertAfter(e,t,n){const r=null===t?this._itHead:t._next;return e._next=r,e._prev=t,null===r?this._itTail=e:r._prev=e,null===t?this._itHead=e:t._next=e,null===this._linkedRecords&&(this._linkedRecords=new S8),this._linkedRecords.put(e),e.currentIndex=n,e}_remove(e){return this._addToRemovals(this._unlink(e))}_unlink(e){null!==this._linkedRecords&&this._linkedRecords.remove(e);const t=e._prev,n=e._next;return null===t?this._itHead=n:t._next=n,null===n?this._itTail=t:n._prev=t,e}_addToMoves(e,t){return e.previousIndex===t||(this._movesTail=null===this._movesTail?this._movesHead=e:this._movesTail._nextMoved=e),e}_addToRemovals(e){return null===this._unlinkedRecords&&(this._unlinkedRecords=new S8),this._unlinkedRecords.put(e),e.currentIndex=null,e._nextRemoved=null,null===this._removalsTail?(this._removalsTail=this._removalsHead=e,e._prevRemoved=null):(e._prevRemoved=this._removalsTail,this._removalsTail=this._removalsTail._nextRemoved=e),e}_addIdentityChange(e,t){return e.item=t,this._identityChangesTail=null===this._identityChangesTail?this._identityChangesHead=e:this._identityChangesTail._nextIdentityChange=e,e}}class ZQ{constructor(e,t){this.item=e,this.trackById=t,this.currentIndex=null,this.previousIndex=null,this._nextPrevious=null,this._prev=null,this._next=null,this._prevDup=null,this._nextDup=null,this._prevRemoved=null,this._nextRemoved=null,this._nextAdded=null,this._nextMoved=null,this._nextIdentityChange=null}}class JQ{constructor(){this._head=null,this._tail=null}add(e){null===this._head?(this._head=this._tail=e,e._nextDup=null,e._prevDup=null):(this._tail._nextDup=e,e._prevDup=this._tail,e._nextDup=null,this._tail=e)}get(e,t){let n;for(n=this._head;null!==n;n=n._nextDup)if((null===t||t<=n.currentIndex)&&Object.is(n.trackById,e))return n;return null}remove(e){const t=e._prevDup,n=e._nextDup;return null===t?this._head=n:t._nextDup=n,null===n?this._tail=t:n._prevDup=t,null===this._head}}class S8{constructor(){this.map=new Map}put(e){const t=e.trackById;let n=this.map.get(t);n||(n=new JQ,this.map.set(t,n)),n.add(e)}get(e,t){const r=this.map.get(e);return r?r.get(e,t):null}remove(e){const t=e.trackById;return this.map.get(t).remove(e)&&this.map.delete(t),e}get isEmpty(){return 0===this.map.size}clear(){this.map.clear()}}function T8(i,e,t){const n=i.previousIndex;if(null===n)return n;let r=0;return t&&n{if(t&&t.key===r)this._maybeAddToChanges(t,n),this._appendAfter=t,t=t._next;else{const s=this._getOrCreateRecordForKey(r,n);t=this._insertBeforeOrAppend(t,s)}}),t){t._prev&&(t._prev._next=null),this._removalsHead=t;for(let n=t;null!==n;n=n._nextRemoved)n===this._mapHead&&(this._mapHead=null),this._records.delete(n.key),n._nextRemoved=n._next,n.previousValue=n.currentValue,n.currentValue=null,n._prev=null,n._next=null}return this._changesTail&&(this._changesTail._nextChanged=null),this._additionsTail&&(this._additionsTail._nextAdded=null),this.isDirty}_insertBeforeOrAppend(e,t){if(e){const n=e._prev;return t._next=e,t._prev=n,e._prev=t,n&&(n._next=t),e===this._mapHead&&(this._mapHead=t),this._appendAfter=e,e}return this._appendAfter?(this._appendAfter._next=t,t._prev=this._appendAfter):this._mapHead=t,this._appendAfter=t,null}_getOrCreateRecordForKey(e,t){if(this._records.has(e)){const r=this._records.get(e);this._maybeAddToChanges(r,t);const s=r._prev,a=r._next;return s&&(s._next=a),a&&(a._prev=s),r._next=null,r._prev=null,r}const n=new tW(e);return this._records.set(e,n),n.currentValue=t,this._addToAdditions(n),n}_reset(){if(this.isDirty){let e;for(this._previousMapHead=this._mapHead,e=this._previousMapHead;null!==e;e=e._next)e._nextPrevious=e._next;for(e=this._changesHead;null!==e;e=e._nextChanged)e.previousValue=e.currentValue;for(e=this._additionsHead;null!=e;e=e._nextAdded)e.previousValue=e.currentValue;this._changesHead=this._changesTail=null,this._additionsHead=this._additionsTail=null,this._removalsHead=null}}_maybeAddToChanges(e,t){Object.is(t,e.currentValue)||(e.previousValue=e.currentValue,e.currentValue=t,this._addToChanges(e))}_addToAdditions(e){null===this._additionsHead?this._additionsHead=this._additionsTail=e:(this._additionsTail._nextAdded=e,this._additionsTail=e)}_addToChanges(e){null===this._changesHead?this._changesHead=this._changesTail=e:(this._changesTail._nextChanged=e,this._changesTail=e)}_forEach(e,t){e instanceof Map?e.forEach(t):Object.keys(e).forEach(n=>t(e[n],n))}}class tW{constructor(e){this.key=e,this.previousValue=null,this.currentValue=null,this._nextPrevious=null,this._next=null,this._prev=null,this._nextAdded=null,this._nextRemoved=null,this._nextChanged=null}}function D8(){return new Gv([new M8])}let Gv=(()=>{class i{constructor(t){this.factories=t}static create(t,n){if(null!=n){const r=n.factories.slice();t=t.concat(r)}return new i(t)}static extend(t){return{provide:i,useFactory:n=>i.create(t,n||D8()),deps:[[i,new _A,new Ld]]}}find(t){const n=this.factories.find(r=>r.supports(t));if(null!=n)return n;throw new fi(901,!1)}}return i.\u0275prov=Ue({token:i,providedIn:"root",factory:D8}),i})();function B8(){return new JC([new E8])}let JC=(()=>{class i{constructor(t){this.factories=t}static create(t,n){if(n){const r=n.factories.slice();t=t.concat(r)}return new i(t)}static extend(t){return{provide:i,useFactory:n=>i.create(t,n||B8()),deps:[[i,new _A,new Ld]]}}find(t){const n=this.factories.find(r=>r.supports(t));if(n)return n;throw new fi(901,!1)}}return i.\u0275prov=Ue({token:i,providedIn:"root",factory:B8}),i})();const rW=p8(null,"core",[]);let sW=(()=>{class i{constructor(t){}}return i.\u0275fac=function(t){return new(t||i)(ci(cw))},i.\u0275mod=ia({type:i}),i.\u0275inj=ft({}),i})();function uw(i){return"boolean"==typeof i?i:null!=i&&"false"!==i}let O5=null;function Yg(){return O5}class lW{}const Zo=new cr("DocumentToken");let R5=(()=>{class i{historyGo(t){throw new Error("Not implemented")}}return i.\u0275fac=function(t){return new(t||i)},i.\u0275prov=Ue({token:i,factory:function(){return function cW(){return ci(I8)}()},providedIn:"platform"}),i})();const uW=new cr("Location Initialized");let I8=(()=>{class i extends R5{constructor(t){super(),this._doc=t,this._location=window.location,this._history=window.history}getBaseHrefFromDOM(){return Yg().getBaseHref(this._doc)}onPopState(t){const n=Yg().getGlobalEventTarget(this._doc,"window");return n.addEventListener("popstate",t,!1),()=>n.removeEventListener("popstate",t)}onHashChange(t){const n=Yg().getGlobalEventTarget(this._doc,"window");return n.addEventListener("hashchange",t,!1),()=>n.removeEventListener("hashchange",t)}get href(){return this._location.href}get protocol(){return this._location.protocol}get hostname(){return this._location.hostname}get port(){return this._location.port}get pathname(){return this._location.pathname}get search(){return this._location.search}get hash(){return this._location.hash}set pathname(t){this._location.pathname=t}pushState(t,n,r){P8()?this._history.pushState(t,n,r):this._location.hash=r}replaceState(t,n,r){P8()?this._history.replaceState(t,n,r):this._location.hash=r}forward(){this._history.forward()}back(){this._history.back()}historyGo(t=0){this._history.go(t)}getState(){return this._history.state}}return i.\u0275fac=function(t){return new(t||i)(ci(Zo))},i.\u0275prov=Ue({token:i,factory:function(){return function hW(){return new I8(ci(Zo))}()},providedIn:"platform"}),i})();function P8(){return!!window.history.pushState}function L5(i,e){if(0==i.length)return e;if(0==e.length)return i;let t=0;return i.endsWith("/")&&t++,e.startsWith("/")&&t++,2==t?i+e.substring(1):1==t?i+e:i+"/"+e}function k8(i){const e=i.match(/#|\?|$/),t=e&&e.index||i.length;return i.slice(0,t-("/"===i[t-1]?1:0))+i.slice(t)}function T_(i){return i&&"?"!==i[0]?"?"+i:i}let qv=(()=>{class i{historyGo(t){throw new Error("Not implemented")}}return i.\u0275fac=function(t){return new(t||i)},i.\u0275prov=Ue({token:i,factory:function(){return To(O8)},providedIn:"root"}),i})();const F8=new cr("appBaseHref");let O8=(()=>{class i extends qv{constructor(t,n){super(),this._platformLocation=t,this._removeListenerFns=[],this._baseHref=n??this._platformLocation.getBaseHrefFromDOM()??To(Zo).location?.origin??""}ngOnDestroy(){for(;this._removeListenerFns.length;)this._removeListenerFns.pop()()}onPopState(t){this._removeListenerFns.push(this._platformLocation.onPopState(t),this._platformLocation.onHashChange(t))}getBaseHref(){return this._baseHref}prepareExternalUrl(t){return L5(this._baseHref,t)}path(t=!1){const n=this._platformLocation.pathname+T_(this._platformLocation.search),r=this._platformLocation.hash;return r&&t?`${n}${r}`:n}pushState(t,n,r,s){const a=this.prepareExternalUrl(r+T_(s));this._platformLocation.pushState(t,n,a)}replaceState(t,n,r,s){const a=this.prepareExternalUrl(r+T_(s));this._platformLocation.replaceState(t,n,a)}forward(){this._platformLocation.forward()}back(){this._platformLocation.back()}getState(){return this._platformLocation.getState()}historyGo(t=0){this._platformLocation.historyGo?.(t)}}return i.\u0275fac=function(t){return new(t||i)(ci(R5),ci(F8,8))},i.\u0275prov=Ue({token:i,factory:i.\u0275fac,providedIn:"root"}),i})(),dW=(()=>{class i extends qv{constructor(t,n){super(),this._platformLocation=t,this._baseHref="",this._removeListenerFns=[],null!=n&&(this._baseHref=n)}ngOnDestroy(){for(;this._removeListenerFns.length;)this._removeListenerFns.pop()()}onPopState(t){this._removeListenerFns.push(this._platformLocation.onPopState(t),this._platformLocation.onHashChange(t))}getBaseHref(){return this._baseHref}path(t=!1){let n=this._platformLocation.hash;return null==n&&(n="#"),n.length>0?n.substring(1):n}prepareExternalUrl(t){const n=L5(this._baseHref,t);return n.length>0?"#"+n:n}pushState(t,n,r,s){let a=this.prepareExternalUrl(r+T_(s));0==a.length&&(a=this._platformLocation.pathname),this._platformLocation.pushState(t,n,a)}replaceState(t,n,r,s){let a=this.prepareExternalUrl(r+T_(s));0==a.length&&(a=this._platformLocation.pathname),this._platformLocation.replaceState(t,n,a)}forward(){this._platformLocation.forward()}back(){this._platformLocation.back()}getState(){return this._platformLocation.getState()}historyGo(t=0){this._platformLocation.historyGo?.(t)}}return i.\u0275fac=function(t){return new(t||i)(ci(R5),ci(F8,8))},i.\u0275prov=Ue({token:i,factory:i.\u0275fac}),i})(),eM=(()=>{class i{constructor(t){this._subject=new Ws,this._urlChangeListeners=[],this._urlChangeSubscription=null,this._locationStrategy=t;const n=this._locationStrategy.getBaseHref();this._basePath=function AW(i){if(new RegExp("^(https?:)?//").test(i)){const[,t]=i.split(/\/\/[^\/]+/);return t}return i}(k8(R8(n))),this._locationStrategy.onPopState(r=>{this._subject.emit({url:this.path(!0),pop:!0,state:r.state,type:r.type})})}ngOnDestroy(){this._urlChangeSubscription?.unsubscribe(),this._urlChangeListeners=[]}path(t=!1){return this.normalize(this._locationStrategy.path(t))}getState(){return this._locationStrategy.getState()}isCurrentPathEqualTo(t,n=""){return this.path()==this.normalize(t+T_(n))}normalize(t){return i.stripTrailingSlash(function pW(i,e){return i&&new RegExp(`^${i}([/;?#]|$)`).test(e)?e.substring(i.length):e}(this._basePath,R8(t)))}prepareExternalUrl(t){return t&&"/"!==t[0]&&(t="/"+t),this._locationStrategy.prepareExternalUrl(t)}go(t,n="",r=null){this._locationStrategy.pushState(r,"",t,n),this._notifyUrlChangeListeners(this.prepareExternalUrl(t+T_(n)),r)}replaceState(t,n="",r=null){this._locationStrategy.replaceState(r,"",t,n),this._notifyUrlChangeListeners(this.prepareExternalUrl(t+T_(n)),r)}forward(){this._locationStrategy.forward()}back(){this._locationStrategy.back()}historyGo(t=0){this._locationStrategy.historyGo?.(t)}onUrlChange(t){return this._urlChangeListeners.push(t),this._urlChangeSubscription||(this._urlChangeSubscription=this.subscribe(n=>{this._notifyUrlChangeListeners(n.url,n.state)})),()=>{const n=this._urlChangeListeners.indexOf(t);this._urlChangeListeners.splice(n,1),0===this._urlChangeListeners.length&&(this._urlChangeSubscription?.unsubscribe(),this._urlChangeSubscription=null)}}_notifyUrlChangeListeners(t="",n){this._urlChangeListeners.forEach(r=>r(t,n))}subscribe(t,n,r){return this._subject.subscribe({next:t,error:n,complete:r})}}return i.normalizeQueryParams=T_,i.joinWithSlash=L5,i.stripTrailingSlash=k8,i.\u0275fac=function(t){return new(t||i)(ci(qv))},i.\u0275prov=Ue({token:i,factory:function(){return function fW(){return new eM(ci(qv))}()},providedIn:"root"}),i})();function R8(i){return i.replace(/\/index.html$/,"")}function Q8(i,e){e=encodeURIComponent(e);for(const t of i.split(";")){const n=t.indexOf("="),[r,s]=-1==n?[t,""]:[t.slice(0,n),t.slice(n+1)];if(r.trim()===e)return decodeURIComponent(s)}return null}const j5=/\s+/,W8=[];let FA=(()=>{class i{constructor(t,n,r,s){this._iterableDiffers=t,this._keyValueDiffers=n,this._ngEl=r,this._renderer=s,this.initialClasses=W8,this.stateMap=new Map}set klass(t){this.initialClasses=null!=t?t.trim().split(j5):W8}set ngClass(t){this.rawClass="string"==typeof t?t.trim().split(j5):t}ngDoCheck(){for(const n of this.initialClasses)this._updateState(n,!0);const t=this.rawClass;if(Array.isArray(t)||t instanceof Set)for(const n of t)this._updateState(n,!0);else if(null!=t)for(const n of Object.keys(t))this._updateState(n,Boolean(t[n]));this._applyStateDiff()}_updateState(t,n){const r=this.stateMap.get(t);void 0!==r?(r.enabled!==n&&(r.changed=!0,r.enabled=n),r.touched=!0):this.stateMap.set(t,{enabled:n,changed:!0,touched:!0})}_applyStateDiff(){for(const t of this.stateMap){const n=t[0],r=t[1];r.changed?(this._toggleClass(n,r.enabled),r.changed=!1):r.touched||(r.enabled&&this._toggleClass(n,!1),this.stateMap.delete(n)),r.touched=!1}}_toggleClass(t,n){(t=t.trim()).length>0&&t.split(j5).forEach(r=>{n?this._renderer.addClass(this._ngEl.nativeElement,r):this._renderer.removeClass(this._ngEl.nativeElement,r)})}}return i.\u0275fac=function(t){return new(t||i)(wt(Gv),wt(JC),wt(Cs),wt(as))},i.\u0275dir=Oi({type:i,selectors:[["","ngClass",""]],inputs:{klass:["class","klass"],ngClass:"ngClass"},standalone:!0}),i})();class JW{constructor(e,t,n,r){this.$implicit=e,this.ngForOf=t,this.index=n,this.count=r}get first(){return 0===this.index}get last(){return this.index===this.count-1}get even(){return this.index%2==0}get odd(){return!this.even}}let Sf=(()=>{class i{set ngForOf(t){this._ngForOf=t,this._ngForOfDirty=!0}set ngForTrackBy(t){this._trackByFn=t}get ngForTrackBy(){return this._trackByFn}constructor(t,n,r){this._viewContainer=t,this._template=n,this._differs=r,this._ngForOf=null,this._ngForOfDirty=!0,this._differ=null}set ngForTemplate(t){t&&(this._template=t)}ngDoCheck(){if(this._ngForOfDirty){this._ngForOfDirty=!1;const t=this._ngForOf;!this._differ&&t&&(this._differ=this._differs.find(t).create(this.ngForTrackBy))}if(this._differ){const t=this._differ.diff(this._ngForOf);t&&this._applyChanges(t)}}_applyChanges(t){const n=this._viewContainer;t.forEachOperation((r,s,a)=>{if(null==r.previousIndex)n.createEmbeddedView(this._template,new JW(r.item,this._ngForOf,-1,-1),null===a?void 0:a);else if(null==a)n.remove(null===s?void 0:s);else if(null!==s){const l=n.get(s);n.move(l,a),X8(l,r)}});for(let r=0,s=n.length;r{X8(n.get(r.currentIndex),r)})}static ngTemplateContextGuard(t,n){return!0}}return i.\u0275fac=function(t){return new(t||i)(wt(Mu),wt(gh),wt(Gv))},i.\u0275dir=Oi({type:i,selectors:[["","ngFor","","ngForOf",""]],inputs:{ngForOf:"ngForOf",ngForTrackBy:"ngForTrackBy",ngForTemplate:"ngForTemplate"},standalone:!0}),i})();function X8(i,e){i.context.$implicit=e.item}let Tu=(()=>{class i{constructor(t,n){this._viewContainer=t,this._context=new tj,this._thenTemplateRef=null,this._elseTemplateRef=null,this._thenViewRef=null,this._elseViewRef=null,this._thenTemplateRef=n}set ngIf(t){this._context.$implicit=this._context.ngIf=t,this._updateView()}set ngIfThen(t){K8("ngIfThen",t),this._thenTemplateRef=t,this._thenViewRef=null,this._updateView()}set ngIfElse(t){K8("ngIfElse",t),this._elseTemplateRef=t,this._elseViewRef=null,this._updateView()}_updateView(){this._context.$implicit?this._thenViewRef||(this._viewContainer.clear(),this._elseViewRef=null,this._thenTemplateRef&&(this._thenViewRef=this._viewContainer.createEmbeddedView(this._thenTemplateRef,this._context))):this._elseViewRef||(this._viewContainer.clear(),this._thenViewRef=null,this._elseTemplateRef&&(this._elseViewRef=this._viewContainer.createEmbeddedView(this._elseTemplateRef,this._context)))}static ngTemplateContextGuard(t,n){return!0}}return i.\u0275fac=function(t){return new(t||i)(wt(Mu),wt(gh))},i.\u0275dir=Oi({type:i,selectors:[["","ngIf",""]],inputs:{ngIf:"ngIf",ngIfThen:"ngIfThen",ngIfElse:"ngIfElse"},standalone:!0}),i})();class tj{constructor(){this.$implicit=null,this.ngIf=null}}function K8(i,e){if(e&&!e.createEmbeddedView)throw new Error(`${i} must be a TemplateRef, but received '${kn(e)}'.`)}class $5{constructor(e,t){this._viewContainerRef=e,this._templateRef=t,this._created=!1}create(){this._created=!0,this._viewContainerRef.createEmbeddedView(this._templateRef)}destroy(){this._created=!1,this._viewContainerRef.clear()}enforceState(e){e&&!this._created?this.create():!e&&this._created&&this.destroy()}}let iE=(()=>{class i{constructor(){this._defaultViews=[],this._defaultUsed=!1,this._caseCount=0,this._lastCaseCheckIndex=0,this._lastCasesMatched=!1}set ngSwitch(t){this._ngSwitch=t,0===this._caseCount&&this._updateDefaultCases(!0)}_addCase(){return this._caseCount++}_addDefault(t){this._defaultViews.push(t)}_matchCase(t){const n=t==this._ngSwitch;return this._lastCasesMatched=this._lastCasesMatched||n,this._lastCaseCheckIndex++,this._lastCaseCheckIndex===this._caseCount&&(this._updateDefaultCases(!this._lastCasesMatched),this._lastCaseCheckIndex=0,this._lastCasesMatched=!1),n}_updateDefaultCases(t){if(this._defaultViews.length>0&&t!==this._defaultUsed){this._defaultUsed=t;for(const n of this._defaultViews)n.enforceState(t)}}}return i.\u0275fac=function(t){return new(t||i)},i.\u0275dir=Oi({type:i,selectors:[["","ngSwitch",""]],inputs:{ngSwitch:"ngSwitch"},standalone:!0}),i})(),Y8=(()=>{class i{constructor(t,n,r){this.ngSwitch=r,r._addCase(),this._view=new $5(t,n)}ngDoCheck(){this._view.enforceState(this.ngSwitch._matchCase(this.ngSwitchCase))}}return i.\u0275fac=function(t){return new(t||i)(wt(Mu),wt(gh),wt(iE,9))},i.\u0275dir=Oi({type:i,selectors:[["","ngSwitchCase",""]],inputs:{ngSwitchCase:"ngSwitchCase"},standalone:!0}),i})(),X5=(()=>{class i{constructor(t,n,r){this._ngEl=t,this._differs=n,this._renderer=r,this._ngStyle=null,this._differ=null}set ngStyle(t){this._ngStyle=t,!this._differ&&t&&(this._differ=this._differs.find(t).create())}ngDoCheck(){if(this._differ){const t=this._differ.diff(this._ngStyle);t&&this._applyChanges(t)}}_setStyle(t,n){const[r,s]=t.split("."),a=-1===r.indexOf("-")?void 0:Mc.DashCase;null!=n?this._renderer.setStyle(this._ngEl.nativeElement,r,s?`${n}${s}`:n,a):this._renderer.removeStyle(this._ngEl.nativeElement,r,a)}_applyChanges(t){t.forEachRemovedItem(n=>this._setStyle(n.key,null)),t.forEachAddedItem(n=>this._setStyle(n.key,n.currentValue)),t.forEachChangedItem(n=>this._setStyle(n.key,n.currentValue))}}return i.\u0275fac=function(t){return new(t||i)(wt(Cs),wt(JC),wt(as))},i.\u0275dir=Oi({type:i,selectors:[["","ngStyle",""]],inputs:{ngStyle:"ngStyle"},standalone:!0}),i})(),K5=(()=>{class i{constructor(t){this._viewContainerRef=t,this._viewRef=null,this.ngTemplateOutletContext=null,this.ngTemplateOutlet=null,this.ngTemplateOutletInjector=null}ngOnChanges(t){if(t.ngTemplateOutlet||t.ngTemplateOutletInjector){const n=this._viewContainerRef;if(this._viewRef&&n.remove(n.indexOf(this._viewRef)),this.ngTemplateOutlet){const{ngTemplateOutlet:r,ngTemplateOutletContext:s,ngTemplateOutletInjector:a}=this;this._viewRef=n.createEmbeddedView(r,s,a?{injector:a}:void 0)}else this._viewRef=null}else this._viewRef&&t.ngTemplateOutletContext&&this.ngTemplateOutletContext&&(this._viewRef.context=this.ngTemplateOutletContext)}}return i.\u0275fac=function(t){return new(t||i)(wt(Mu))},i.\u0275dir=Oi({type:i,selectors:[["","ngTemplateOutlet",""]],inputs:{ngTemplateOutletContext:"ngTemplateOutletContext",ngTemplateOutlet:"ngTemplateOutlet",ngTemplateOutletInjector:"ngTemplateOutletInjector"},standalone:!0,features:[bc]}),i})(),D_=(()=>{class i{}return i.\u0275fac=function(t){return new(t||i)},i.\u0275mod=ia({type:i}),i.\u0275inj=ft({}),i})();const eL="browser";let Bj=(()=>{class i{}return i.\u0275prov=Ue({token:i,providedIn:"root",factory:()=>new Ij(ci(Zo),window)}),i})();class Ij{constructor(e,t){this.document=e,this.window=t,this.offset=()=>[0,0]}setOffset(e){this.offset=Array.isArray(e)?()=>e:e}getScrollPosition(){return this.supportsScrolling()?[this.window.pageXOffset,this.window.pageYOffset]:[0,0]}scrollToPosition(e){this.supportsScrolling()&&this.window.scrollTo(e[0],e[1])}scrollToAnchor(e){if(!this.supportsScrolling())return;const t=function Pj(i,e){const t=i.getElementById(e)||i.getElementsByName(e)[0];if(t)return t;if("function"==typeof i.createTreeWalker&&i.body&&(i.body.createShadowRoot||i.body.attachShadow)){const n=i.createTreeWalker(i.body,NodeFilter.SHOW_ELEMENT);let r=n.currentNode;for(;r;){const s=r.shadowRoot;if(s){const a=s.getElementById(e)||s.querySelector(`[name="${e}"]`);if(a)return a}r=n.nextNode()}}return null}(this.document,e);t&&(this.scrollToElement(t),t.focus())}setHistoryScrollRestoration(e){if(this.supportScrollRestoration()){const t=this.window.history;t&&t.scrollRestoration&&(t.scrollRestoration=e)}}scrollToElement(e){const t=e.getBoundingClientRect(),n=t.left+this.window.pageXOffset,r=t.top+this.window.pageYOffset,s=this.offset();this.window.scrollTo(n-s[0],r-s[1])}supportScrollRestoration(){try{if(!this.supportsScrolling())return!1;const e=tL(this.window.history)||tL(Object.getPrototypeOf(this.window.history));return!(!e||!e.writable&&!e.set)}catch{return!1}}supportsScrolling(){try{return!!this.window&&!!this.window.scrollTo&&"pageXOffset"in this.window}catch{return!1}}}function tL(i){return Object.getOwnPropertyDescriptor(i,"scrollRestoration")}class nL{}class s$ extends lW{constructor(){super(...arguments),this.supportsDOMEvents=!0}}class tI extends s${static makeCurrent(){!function aW(i){O5||(O5=i)}(new tI)}onAndCancel(e,t,n){return e.addEventListener(t,n,!1),()=>{e.removeEventListener(t,n,!1)}}dispatchEvent(e,t){e.dispatchEvent(t)}remove(e){e.parentNode&&e.parentNode.removeChild(e)}createElement(e,t){return(t=t||this.getDefaultDocument()).createElement(e)}createHtmlDocument(){return document.implementation.createHTMLDocument("fakeTitle")}getDefaultDocument(){return document}isElementNode(e){return e.nodeType===Node.ELEMENT_NODE}isShadowRoot(e){return e instanceof DocumentFragment}getGlobalEventTarget(e,t){return"window"===t?window:"document"===t?e:"body"===t?e.body:null}getBaseHref(e){const t=function o$(){return rM=rM||document.querySelector("base"),rM?rM.getAttribute("href"):null}();return null==t?null:function a$(i){sE=sE||document.createElement("a"),sE.setAttribute("href",i);const e=sE.pathname;return"/"===e.charAt(0)?e:`/${e}`}(t)}resetBaseElement(){rM=null}getUserAgent(){return window.navigator.userAgent}getCookie(e){return Q8(document.cookie,e)}}let sE,rM=null;const lL=new cr("TRANSITION_ID"),c$=[{provide:HT,useFactory:function l$(i,e,t){return()=>{t.get(VT).donePromise.then(()=>{const n=Yg(),r=e.querySelectorAll(`style[ng-transition="${i}"]`);for(let s=0;s{class i{build(){return new XMLHttpRequest}}return i.\u0275fac=function(t){return new(t||i)},i.\u0275prov=Ue({token:i,factory:i.\u0275fac}),i})();const oE=new cr("EventManagerPlugins");let aE=(()=>{class i{constructor(t,n){this._zone=n,this._eventNameToPlugin=new Map,t.forEach(r=>r.manager=this),this._plugins=t.slice().reverse()}addEventListener(t,n,r){return this._findPluginFor(n).addEventListener(t,n,r)}addGlobalEventListener(t,n,r){return this._findPluginFor(n).addGlobalEventListener(t,n,r)}getZone(){return this._zone}_findPluginFor(t){const n=this._eventNameToPlugin.get(t);if(n)return n;const r=this._plugins;for(let s=0;s{class i{constructor(){this._stylesSet=new Set}addStyles(t){const n=new Set;t.forEach(r=>{this._stylesSet.has(r)||(this._stylesSet.add(r),n.add(r))}),this.onStylesAdded(n)}onStylesAdded(t){}getAllStyles(){return Array.from(this._stylesSet)}}return i.\u0275fac=function(t){return new(t||i)},i.\u0275prov=Ue({token:i,factory:i.\u0275fac}),i})(),sM=(()=>{class i extends uL{constructor(t){super(),this._doc=t,this._hostNodes=new Map,this._hostNodes.set(t.head,[])}_addStylesToHost(t,n,r){t.forEach(s=>{const a=this._doc.createElement("style");a.textContent=s,r.push(n.appendChild(a))})}addHost(t){const n=[];this._addStylesToHost(this._stylesSet,t,n),this._hostNodes.set(t,n)}removeHost(t){const n=this._hostNodes.get(t);n&&n.forEach(hL),this._hostNodes.delete(t)}onStylesAdded(t){this._hostNodes.forEach((n,r)=>{this._addStylesToHost(t,r,n)})}ngOnDestroy(){this._hostNodes.forEach(t=>t.forEach(hL))}}return i.\u0275fac=function(t){return new(t||i)(ci(Zo))},i.\u0275prov=Ue({token:i,factory:i.\u0275fac}),i})();function hL(i){Yg().remove(i)}const nI={svg:"http://www.w3.org/2000/svg",xhtml:"http://www.w3.org/1999/xhtml",xlink:"http://www.w3.org/1999/xlink",xml:"http://www.w3.org/XML/1998/namespace",xmlns:"http://www.w3.org/2000/xmlns/",math:"http://www.w3.org/1998/MathML/"},iI=/%COMP%/g;function rI(i,e){return e.flat(100).map(t=>t.replace(iI,i))}function pL(i){return e=>{if("__ngUnwrap__"===e)return i;!1===i(e)&&(e.preventDefault(),e.returnValue=!1)}}let lE=(()=>{class i{constructor(t,n,r){this.eventManager=t,this.sharedStylesHost=n,this.appId=r,this.rendererByCompId=new Map,this.defaultRenderer=new sI(t)}createRenderer(t,n){if(!t||!n)return this.defaultRenderer;switch(n.encapsulation){case Th.Emulated:{let r=this.rendererByCompId.get(n.id);return r||(r=new g$(this.eventManager,this.sharedStylesHost,n,this.appId),this.rendererByCompId.set(n.id,r)),r.applyToHost(t),r}case Th.ShadowDom:return new _$(this.eventManager,this.sharedStylesHost,t,n);default:if(!this.rendererByCompId.has(n.id)){const r=rI(n.id,n.styles);this.sharedStylesHost.addStyles(r),this.rendererByCompId.set(n.id,this.defaultRenderer)}return this.defaultRenderer}}begin(){}end(){}}return i.\u0275fac=function(t){return new(t||i)(ci(aE),ci(sM),ci(lw))},i.\u0275prov=Ue({token:i,factory:i.\u0275fac}),i})();class sI{constructor(e){this.eventManager=e,this.data=Object.create(null),this.destroyNode=null}destroy(){}createElement(e,t){return t?document.createElementNS(nI[t]||t,e):document.createElement(e)}createComment(e){return document.createComment(e)}createText(e){return document.createTextNode(e)}appendChild(e,t){(mL(e)?e.content:e).appendChild(t)}insertBefore(e,t,n){e&&(mL(e)?e.content:e).insertBefore(t,n)}removeChild(e,t){e&&e.removeChild(t)}selectRootElement(e,t){let n="string"==typeof e?document.querySelector(e):e;if(!n)throw new Error(`The selector "${e}" did not match any elements`);return t||(n.textContent=""),n}parentNode(e){return e.parentNode}nextSibling(e){return e.nextSibling}setAttribute(e,t,n,r){if(r){t=r+":"+t;const s=nI[r];s?e.setAttributeNS(s,t,n):e.setAttribute(t,n)}else e.setAttribute(t,n)}removeAttribute(e,t,n){if(n){const r=nI[n];r?e.removeAttributeNS(r,t):e.removeAttribute(`${n}:${t}`)}else e.removeAttribute(t)}addClass(e,t){e.classList.add(t)}removeClass(e,t){e.classList.remove(t)}setStyle(e,t,n,r){r&(Mc.DashCase|Mc.Important)?e.style.setProperty(t,n,r&Mc.Important?"important":""):e.style[t]=n}removeStyle(e,t,n){n&Mc.DashCase?e.style.removeProperty(t):e.style[t]=""}setProperty(e,t,n){e[t]=n}setValue(e,t){e.nodeValue=t}listen(e,t,n){return"string"==typeof e?this.eventManager.addGlobalEventListener(e,t,pL(n)):this.eventManager.addEventListener(e,t,pL(n))}}function mL(i){return"TEMPLATE"===i.tagName&&void 0!==i.content}class g$ extends sI{constructor(e,t,n,r){super(e),this.component=n;const s=rI(r+"-"+n.id,n.styles);t.addStyles(s),this.contentAttr=function p$(i){return"_ngcontent-%COMP%".replace(iI,i)}(r+"-"+n.id),this.hostAttr=function A$(i){return"_nghost-%COMP%".replace(iI,i)}(r+"-"+n.id)}applyToHost(e){super.setAttribute(e,this.hostAttr,"")}createElement(e,t){const n=super.createElement(e,t);return super.setAttribute(n,this.contentAttr,""),n}}class _$ extends sI{constructor(e,t,n,r){super(e),this.sharedStylesHost=t,this.hostEl=n,this.shadowRoot=n.attachShadow({mode:"open"}),this.sharedStylesHost.addHost(this.shadowRoot);const s=rI(r.id,r.styles);for(let a=0;a{class i extends cL{constructor(t){super(t)}supports(t){return!0}addEventListener(t,n,r){return t.addEventListener(n,r,!1),()=>this.removeEventListener(t,n,r)}removeEventListener(t,n,r){return t.removeEventListener(n,r)}}return i.\u0275fac=function(t){return new(t||i)(ci(Zo))},i.\u0275prov=Ue({token:i,factory:i.\u0275fac}),i})();const gL=["alt","control","meta","shift"],v$={"\b":"Backspace","\t":"Tab","\x7f":"Delete","\x1b":"Escape",Del:"Delete",Esc:"Escape",Left:"ArrowLeft",Right:"ArrowRight",Up:"ArrowUp",Down:"ArrowDown",Menu:"ContextMenu",Scroll:"ScrollLock",Win:"OS"},b$={alt:i=>i.altKey,control:i=>i.ctrlKey,meta:i=>i.metaKey,shift:i=>i.shiftKey};let x$=(()=>{class i extends cL{constructor(t){super(t)}supports(t){return null!=i.parseEventName(t)}addEventListener(t,n,r){const s=i.parseEventName(n),a=i.eventCallback(s.fullKey,r,this.manager.getZone());return this.manager.getZone().runOutsideAngular(()=>Yg().onAndCancel(t,s.domEventName,a))}static parseEventName(t){const n=t.toLowerCase().split("."),r=n.shift();if(0===n.length||"keydown"!==r&&"keyup"!==r)return null;const s=i._normalizeKey(n.pop());let a="",l=n.indexOf("code");if(l>-1&&(n.splice(l,1),a="code."),gL.forEach(d=>{const p=n.indexOf(d);p>-1&&(n.splice(p,1),a+=d+".")}),a+=s,0!=n.length||0===s.length)return null;const u={};return u.domEventName=r,u.fullKey=a,u}static matchEventFullKeyCode(t,n){let r=v$[t.key]||t.key,s="";return n.indexOf("code.")>-1&&(r=t.code,s="code."),!(null==r||!r)&&(r=r.toLowerCase()," "===r?r="space":"."===r&&(r="dot"),gL.forEach(a=>{a!==r&&(0,b$[a])(t)&&(s+=a+".")}),s+=r,s===n)}static eventCallback(t,n,r){return s=>{i.matchEventFullKeyCode(s,t)&&r.runGuarded(()=>n(s))}}static _normalizeKey(t){return"esc"===t?"escape":t}}return i.\u0275fac=function(t){return new(t||i)(ci(Zo))},i.\u0275prov=Ue({token:i,factory:i.\u0275fac}),i})();const yL=[{provide:GT,useValue:eL},{provide:i8,useValue:function w$(){tI.makeCurrent()},multi:!0},{provide:Zo,useFactory:function M$(){return function Rs(i){zo=i}(document),document},deps:[]}],S$=p8(rW,"browser",yL),vL=new cr(""),bL=[{provide:qT,useClass:class u${addToWindow(e){ds.getAngularTestability=(n,r=!0)=>{const s=e.findTestabilityInTree(n,r);if(null==s)throw new Error("Could not find testability for element.");return s},ds.getAllAngularTestabilities=()=>e.getAllTestabilities(),ds.getAllAngularRootElements=()=>e.getAllRootElements(),ds.frameworkStabilizers||(ds.frameworkStabilizers=[]),ds.frameworkStabilizers.push(n=>{const r=ds.getAllAngularTestabilities();let s=r.length,a=!1;const l=function(u){a=a||u,s--,0==s&&n(a)};r.forEach(function(u){u.whenStable(l)})})}findTestabilityInTree(e,t,n){return null==t?null:e.getTestability(t)??(n?Yg().isShadowRoot(t)?this.findTestabilityInTree(e,t.host,!0):this.findTestabilityInTree(e,t.parentElement,!0):null)}},deps:[]},{provide:u8,useClass:S5,deps:[mo,T5,qT]},{provide:S5,useClass:S5,deps:[mo,T5,qT]}],xL=[{provide:Ys,useValue:"root"},{provide:vd,useFactory:function C$(){return new vd},deps:[]},{provide:oE,useClass:y$,multi:!0,deps:[Zo,mo,GT]},{provide:oE,useClass:x$,multi:!0,deps:[Zo]},{provide:lE,useClass:lE,deps:[aE,sM,lw]},{provide:Ep,useExisting:lE},{provide:uL,useExisting:sM},{provide:sM,useClass:sM,deps:[Zo]},{provide:aE,useClass:aE,deps:[oE,mo]},{provide:nL,useClass:h$,deps:[]},[]];let wL=(()=>{class i{constructor(t){}static withServerTransition(t){return{ngModule:i,providers:[{provide:lw,useValue:t.appId},{provide:lL,useExisting:lw},c$]}}}return i.\u0275fac=function(t){return new(t||i)(ci(vL,12))},i.\u0275mod=ia({type:i}),i.\u0275inj=ft({providers:[...xL,...bL],imports:[D_,sW]}),i})(),CL=(()=>{class i{constructor(t){this._doc=t}getTitle(){return this._doc.title}setTitle(t){this._doc.title=t||""}}return i.\u0275fac=function(t){return new(t||i)(ci(Zo))},i.\u0275prov=Ue({token:i,factory:function(t){let n=null;return n=t?new t:function E$(){return new CL(ci(Zo))}(),n},providedIn:"root"}),i})();typeof window<"u"&&window;let lI=(()=>{class i{}return i.\u0275fac=function(t){return new(t||i)},i.\u0275prov=Ue({token:i,factory:function(t){let n=null;return n=t?new(t||i):ci(TL),n},providedIn:"root"}),i})(),TL=(()=>{class i extends lI{constructor(t){super(),this._doc=t}sanitize(t,n){if(null==n)return null;switch(t){case ol.NONE:return n;case ol.HTML:return sc(n,"HTML")?sl(n):fv(this._doc,String(n)).toString();case ol.STYLE:return sc(n,"Style")?sl(n):n;case ol.SCRIPT:if(sc(n,"Script"))return sl(n);throw new Error("unsafe value used in a script context");case ol.URL:return sc(n,"URL")?sl(n):ep(String(n));case ol.RESOURCE_URL:if(sc(n,"ResourceURL"))return sl(n);throw new Error(`unsafe value used in a resource URL context (see ${xo})`);default:throw new Error(`Unexpected SecurityContext ${t} (see ${xo})`)}}bypassSecurityTrustHtml(t){return function bu(i){return new Oo(i)}(t)}bypassSecurityTrustStyle(t){return function Cp(i){return new Ac(i)}(t)}bypassSecurityTrustScript(t){return function Uh(i){return new Vu(i)}(t)}bypassSecurityTrustUrl(t){return function Zf(i){return new lh(i)}(t)}bypassSecurityTrustResourceUrl(t){return function Mp(i){return new ul(i)}(t)}}return i.\u0275fac=function(t){return new(t||i)(ci(Zo))},i.\u0275prov=Ue({token:i,factory:function(t){let n=null;return n=t?new t:function O$(i){return new TL(i.get(Zo))}(ci(zc)),n},providedIn:"root"}),i})();function oM(i){return(oM="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(i)}function Wt(i,e,t){return(e=function L$(i){var e=function R$(i,e){if("object"!==oM(i)||null===i)return i;var t=i[Symbol.toPrimitive];if(void 0!==t){var n=t.call(i,e||"default");if("object"!==oM(n))return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===e?String:Number)(i)}(i,"string");return"symbol"===oM(e)?e:String(e)}(e))in i?Object.defineProperty(i,e,{value:t,enumerable:!0,configurable:!0,writable:!0}):i[e]=t,i}function no(...i){return cn(i,xt(i))}function ny(i,e){return ze(e)?ma(i,e,1):ma(i,1)}function tu(i,e){return Ee((t,n)=>{let r=0;t.subscribe(Ge(n,s=>i.call(e,s,r++)&&n.next(s)))})}class cE{}class cI{}class Zg{constructor(e){this.normalizedNames=new Map,this.lazyUpdate=null,e?this.lazyInit="string"==typeof e?()=>{this.headers=new Map,e.split("\n").forEach(t=>{const n=t.indexOf(":");if(n>0){const r=t.slice(0,n),s=r.toLowerCase(),a=t.slice(n+1).trim();this.maybeSetNormalizedName(r,s),this.headers.has(s)?this.headers.get(s).push(a):this.headers.set(s,[a])}})}:()=>{this.headers=new Map,Object.keys(e).forEach(t=>{let n=e[t];const r=t.toLowerCase();"string"==typeof n&&(n=[n]),n.length>0&&(this.headers.set(r,n),this.maybeSetNormalizedName(t,r))})}:this.headers=new Map}has(e){return this.init(),this.headers.has(e.toLowerCase())}get(e){this.init();const t=this.headers.get(e.toLowerCase());return t&&t.length>0?t[0]:null}keys(){return this.init(),Array.from(this.normalizedNames.values())}getAll(e){return this.init(),this.headers.get(e.toLowerCase())||null}append(e,t){return this.clone({name:e,value:t,op:"a"})}set(e,t){return this.clone({name:e,value:t,op:"s"})}delete(e,t){return this.clone({name:e,value:t,op:"d"})}maybeSetNormalizedName(e,t){this.normalizedNames.has(t)||this.normalizedNames.set(t,e)}init(){this.lazyInit&&(this.lazyInit instanceof Zg?this.copyFrom(this.lazyInit):this.lazyInit(),this.lazyInit=null,this.lazyUpdate&&(this.lazyUpdate.forEach(e=>this.applyUpdate(e)),this.lazyUpdate=null))}copyFrom(e){e.init(),Array.from(e.headers.keys()).forEach(t=>{this.headers.set(t,e.headers.get(t)),this.normalizedNames.set(t,e.normalizedNames.get(t))})}clone(e){const t=new Zg;return t.lazyInit=this.lazyInit&&this.lazyInit instanceof Zg?this.lazyInit:this,t.lazyUpdate=(this.lazyUpdate||[]).concat([e]),t}applyUpdate(e){const t=e.name.toLowerCase();switch(e.op){case"a":case"s":let n=e.value;if("string"==typeof n&&(n=[n]),0===n.length)return;this.maybeSetNormalizedName(e.name,t);const r=("a"===e.op?this.headers.get(t):void 0)||[];r.push(...n),this.headers.set(t,r);break;case"d":const s=e.value;if(s){let a=this.headers.get(t);if(!a)return;a=a.filter(l=>-1===s.indexOf(l)),0===a.length?(this.headers.delete(t),this.normalizedNames.delete(t)):this.headers.set(t,a)}else this.headers.delete(t),this.normalizedNames.delete(t)}}forEach(e){this.init(),Array.from(this.normalizedNames.keys()).forEach(t=>e(this.normalizedNames.get(t),this.headers.get(t)))}}class N${encodeKey(e){return EL(e)}encodeValue(e){return EL(e)}decodeKey(e){return decodeURIComponent(e)}decodeValue(e){return decodeURIComponent(e)}}const z$=/%(\d[a-f0-9])/gi,H$={40:"@","3A":":",24:"$","2C":",","3B":";","3D":"=","3F":"?","2F":"/"};function EL(i){return encodeURIComponent(i).replace(z$,(e,t)=>H$[t]??e)}function uE(i){return`${i}`}class iy{constructor(e={}){if(this.updates=null,this.cloneFrom=null,this.encoder=e.encoder||new N$,e.fromString){if(e.fromObject)throw new Error("Cannot specify both fromString and fromObject.");this.map=function U$(i,e){const t=new Map;return i.length>0&&i.replace(/^\?/,"").split("&").forEach(r=>{const s=r.indexOf("="),[a,l]=-1==s?[e.decodeKey(r),""]:[e.decodeKey(r.slice(0,s)),e.decodeValue(r.slice(s+1))],u=t.get(a)||[];u.push(l),t.set(a,u)}),t}(e.fromString,this.encoder)}else e.fromObject?(this.map=new Map,Object.keys(e.fromObject).forEach(t=>{const n=e.fromObject[t],r=Array.isArray(n)?n.map(uE):[uE(n)];this.map.set(t,r)})):this.map=null}has(e){return this.init(),this.map.has(e)}get(e){this.init();const t=this.map.get(e);return t?t[0]:null}getAll(e){return this.init(),this.map.get(e)||null}keys(){return this.init(),Array.from(this.map.keys())}append(e,t){return this.clone({param:e,value:t,op:"a"})}appendAll(e){const t=[];return Object.keys(e).forEach(n=>{const r=e[n];Array.isArray(r)?r.forEach(s=>{t.push({param:n,value:s,op:"a"})}):t.push({param:n,value:r,op:"a"})}),this.clone(t)}set(e,t){return this.clone({param:e,value:t,op:"s"})}delete(e,t){return this.clone({param:e,value:t,op:"d"})}toString(){return this.init(),this.keys().map(e=>{const t=this.encoder.encodeKey(e);return this.map.get(e).map(n=>t+"="+this.encoder.encodeValue(n)).join("&")}).filter(e=>""!==e).join("&")}clone(e){const t=new iy({encoder:this.encoder});return t.cloneFrom=this.cloneFrom||this,t.updates=(this.updates||[]).concat(e),t}init(){null===this.map&&(this.map=new Map),null!==this.cloneFrom&&(this.cloneFrom.init(),this.cloneFrom.keys().forEach(e=>this.map.set(e,this.cloneFrom.map.get(e))),this.updates.forEach(e=>{switch(e.op){case"a":case"s":const t=("a"===e.op?this.map.get(e.param):void 0)||[];t.push(uE(e.value)),this.map.set(e.param,t);break;case"d":if(void 0===e.value){this.map.delete(e.param);break}{let n=this.map.get(e.param)||[];const r=n.indexOf(uE(e.value));-1!==r&&n.splice(r,1),n.length>0?this.map.set(e.param,n):this.map.delete(e.param)}}}),this.cloneFrom=this.updates=null)}}class V${constructor(){this.map=new Map}set(e,t){return this.map.set(e,t),this}get(e){return this.map.has(e)||this.map.set(e,e.defaultValue()),this.map.get(e)}delete(e){return this.map.delete(e),this}has(e){return this.map.has(e)}keys(){return this.map.keys()}}function DL(i){return typeof ArrayBuffer<"u"&&i instanceof ArrayBuffer}function BL(i){return typeof Blob<"u"&&i instanceof Blob}function IL(i){return typeof FormData<"u"&&i instanceof FormData}class aM{constructor(e,t,n,r){let s;if(this.url=t,this.body=null,this.reportProgress=!1,this.withCredentials=!1,this.responseType="json",this.method=e.toUpperCase(),function G$(i){switch(i){case"DELETE":case"GET":case"HEAD":case"OPTIONS":case"JSONP":return!1;default:return!0}}(this.method)||r?(this.body=void 0!==n?n:null,s=r):s=n,s&&(this.reportProgress=!!s.reportProgress,this.withCredentials=!!s.withCredentials,s.responseType&&(this.responseType=s.responseType),s.headers&&(this.headers=s.headers),s.context&&(this.context=s.context),s.params&&(this.params=s.params)),this.headers||(this.headers=new Zg),this.context||(this.context=new V$),this.params){const a=this.params.toString();if(0===a.length)this.urlWithParams=t;else{const l=t.indexOf("?");this.urlWithParams=t+(-1===l?"?":ly.set(C,e.setHeaders[C]),u)),e.setParams&&(d=Object.keys(e.setParams).reduce((y,C)=>y.set(C,e.setParams[C]),d)),new aM(t,n,s,{params:d,headers:u,context:p,reportProgress:l,responseType:r,withCredentials:a})}}var ju=(()=>((ju=ju||{})[ju.Sent=0]="Sent",ju[ju.UploadProgress=1]="UploadProgress",ju[ju.ResponseHeader=2]="ResponseHeader",ju[ju.DownloadProgress=3]="DownloadProgress",ju[ju.Response=4]="Response",ju[ju.User=5]="User",ju))();class uI{constructor(e,t=200,n="OK"){this.headers=e.headers||new Zg,this.status=void 0!==e.status?e.status:t,this.statusText=e.statusText||n,this.url=e.url||null,this.ok=this.status>=200&&this.status<300}}class hI extends uI{constructor(e={}){super(e),this.type=ju.ResponseHeader}clone(e={}){return new hI({headers:e.headers||this.headers,status:void 0!==e.status?e.status:this.status,statusText:e.statusText||this.statusText,url:e.url||this.url||void 0})}}class hE extends uI{constructor(e={}){super(e),this.type=ju.Response,this.body=void 0!==e.body?e.body:null}clone(e={}){return new hE({body:void 0!==e.body?e.body:this.body,headers:e.headers||this.headers,status:void 0!==e.status?e.status:this.status,statusText:e.statusText||this.statusText,url:e.url||this.url||void 0})}}class PL extends uI{constructor(e){super(e,0,"Unknown Error"),this.name="HttpErrorResponse",this.ok=!1,this.message=this.status>=200&&this.status<300?`Http failure during parsing for ${e.url||"(unknown url)"}`:`Http failure response for ${e.url||"(unknown url)"}: ${e.status} ${e.statusText}`,this.error=e.error||null}}function dI(i,e){return{body:e,headers:i.headers,context:i.context,observe:i.observe,params:i.params,reportProgress:i.reportProgress,responseType:i.responseType,withCredentials:i.withCredentials}}let lM=(()=>{class i{constructor(t){this.handler=t}request(t,n,r={}){let s;if(t instanceof aM)s=t;else{let u,d;u=r.headers instanceof Zg?r.headers:new Zg(r.headers),r.params&&(d=r.params instanceof iy?r.params:new iy({fromObject:r.params})),s=new aM(t,n,void 0!==r.body?r.body:null,{headers:u,context:r.context,params:d,reportProgress:r.reportProgress,responseType:r.responseType||"json",withCredentials:r.withCredentials})}const a=no(s).pipe(ny(u=>this.handler.handle(u)));if(t instanceof aM||"events"===r.observe)return a;const l=a.pipe(tu(u=>u instanceof hE));switch(r.observe||"body"){case"body":switch(s.responseType){case"arraybuffer":return l.pipe(et(u=>{if(null!==u.body&&!(u.body instanceof ArrayBuffer))throw new Error("Response is not an ArrayBuffer.");return u.body}));case"blob":return l.pipe(et(u=>{if(null!==u.body&&!(u.body instanceof Blob))throw new Error("Response is not a Blob.");return u.body}));case"text":return l.pipe(et(u=>{if(null!==u.body&&"string"!=typeof u.body)throw new Error("Response is not a string.");return u.body}));default:return l.pipe(et(u=>u.body))}case"response":return l;default:throw new Error(`Unreachable: unhandled observe type ${r.observe}}`)}}delete(t,n={}){return this.request("DELETE",t,n)}get(t,n={}){return this.request("GET",t,n)}head(t,n={}){return this.request("HEAD",t,n)}jsonp(t,n){return this.request("JSONP",t,{params:(new iy).append(n,"JSONP_CALLBACK"),observe:"body",responseType:"json"})}options(t,n={}){return this.request("OPTIONS",t,n)}patch(t,n,r={}){return this.request("PATCH",t,dI(r,n))}post(t,n,r={}){return this.request("POST",t,dI(r,n))}put(t,n,r={}){return this.request("PUT",t,dI(r,n))}}return i.\u0275fac=function(t){return new(t||i)(ci(cE))},i.\u0275prov=Ue({token:i,factory:i.\u0275fac}),i})();function kL(i,e){return e(i)}function Q$(i,e){return(t,n)=>e.intercept(t,{handle:r=>i(r,n)})}const j$=new cr("HTTP_INTERCEPTORS"),cM=new cr("HTTP_INTERCEPTOR_FNS");function X$(){let i=null;return(e,t)=>(null===i&&(i=(To(j$,{optional:!0})??[]).reduceRight(Q$,kL)),i(e,t))}let FL=(()=>{class i extends cE{constructor(t,n){super(),this.backend=t,this.injector=n,this.chain=null}handle(t){if(null===this.chain){const n=Array.from(new Set(this.injector.get(cM)));this.chain=n.reduceRight((r,s)=>function W$(i,e,t){return(n,r)=>t.runInContext(()=>e(n,s=>i(s,r)))}(r,s,this.injector),kL)}return this.chain(t,n=>this.backend.handle(n))}}return i.\u0275fac=function(t){return new(t||i)(ci(cI),ci(Ur))},i.\u0275prov=Ue({token:i,factory:i.\u0275fac}),i})();const J$=/^\)\]\}',?\n/;let RL=(()=>{class i{constructor(t){this.xhrFactory=t}handle(t){if("JSONP"===t.method)throw new Error("Attempted to construct Jsonp request without HttpClientJsonpModule installed.");return new de(n=>{const r=this.xhrFactory.build();if(r.open(t.method,t.urlWithParams),t.withCredentials&&(r.withCredentials=!0),t.headers.forEach((O,Q)=>r.setRequestHeader(O,Q.join(","))),t.headers.has("Accept")||r.setRequestHeader("Accept","application/json, text/plain, */*"),!t.headers.has("Content-Type")){const O=t.detectContentTypeHeader();null!==O&&r.setRequestHeader("Content-Type",O)}if(t.responseType){const O=t.responseType.toLowerCase();r.responseType="json"!==O?O:"text"}const s=t.serializeBody();let a=null;const l=()=>{if(null!==a)return a;const O=r.statusText||"OK",Q=new Zg(r.getAllResponseHeaders()),W=function eX(i){return"responseURL"in i&&i.responseURL?i.responseURL:/^X-Request-URL:/m.test(i.getAllResponseHeaders())?i.getResponseHeader("X-Request-URL"):null}(r)||t.url;return a=new hI({headers:Q,status:r.status,statusText:O,url:W}),a},u=()=>{let{headers:O,status:Q,statusText:W,url:se}=l(),ye=null;204!==Q&&(ye=typeof r.response>"u"?r.responseText:r.response),0===Q&&(Q=ye?200:0);let Le=Q>=200&&Q<300;if("json"===t.responseType&&"string"==typeof ye){const we=ye;ye=ye.replace(J$,"");try{ye=""!==ye?JSON.parse(ye):null}catch(He){ye=we,Le&&(Le=!1,ye={error:He,text:ye})}}Le?(n.next(new hE({body:ye,headers:O,status:Q,statusText:W,url:se||void 0})),n.complete()):n.error(new PL({error:ye,headers:O,status:Q,statusText:W,url:se||void 0}))},d=O=>{const{url:Q}=l(),W=new PL({error:O,status:r.status||0,statusText:r.statusText||"Unknown Error",url:Q||void 0});n.error(W)};let p=!1;const y=O=>{p||(n.next(l()),p=!0);let Q={type:ju.DownloadProgress,loaded:O.loaded};O.lengthComputable&&(Q.total=O.total),"text"===t.responseType&&r.responseText&&(Q.partialText=r.responseText),n.next(Q)},C=O=>{let Q={type:ju.UploadProgress,loaded:O.loaded};O.lengthComputable&&(Q.total=O.total),n.next(Q)};return r.addEventListener("load",u),r.addEventListener("error",d),r.addEventListener("timeout",d),r.addEventListener("abort",d),t.reportProgress&&(r.addEventListener("progress",y),null!==s&&r.upload&&r.upload.addEventListener("progress",C)),r.send(s),n.next({type:ju.Sent}),()=>{r.removeEventListener("error",d),r.removeEventListener("abort",d),r.removeEventListener("load",u),r.removeEventListener("timeout",d),t.reportProgress&&(r.removeEventListener("progress",y),null!==s&&r.upload&&r.upload.removeEventListener("progress",C)),r.readyState!==r.DONE&&r.abort()}})}}return i.\u0275fac=function(t){return new(t||i)(ci(nL))},i.\u0275prov=Ue({token:i,factory:i.\u0275fac}),i})();const fI=new cr("XSRF_ENABLED"),LL="XSRF-TOKEN",NL=new cr("XSRF_COOKIE_NAME",{providedIn:"root",factory:()=>LL}),UL="X-XSRF-TOKEN",zL=new cr("XSRF_HEADER_NAME",{providedIn:"root",factory:()=>UL});class HL{}let tX=(()=>{class i{constructor(t,n,r){this.doc=t,this.platform=n,this.cookieName=r,this.lastCookieString="",this.lastToken=null,this.parseCount=0}getToken(){if("server"===this.platform)return null;const t=this.doc.cookie||"";return t!==this.lastCookieString&&(this.parseCount++,this.lastToken=Q8(t,this.cookieName),this.lastCookieString=t),this.lastToken}}return i.\u0275fac=function(t){return new(t||i)(ci(Zo),ci(GT),ci(NL))},i.\u0275prov=Ue({token:i,factory:i.\u0275fac}),i})();function nX(i,e){const t=i.url.toLowerCase();if(!To(fI)||"GET"===i.method||"HEAD"===i.method||t.startsWith("http://")||t.startsWith("https://"))return e(i);const n=To(HL).getToken(),r=To(zL);return null!=n&&!i.headers.has(r)&&(i=i.clone({headers:i.headers.set(r,n)})),e(i)}var Eu=(()=>((Eu=Eu||{})[Eu.Interceptors=0]="Interceptors",Eu[Eu.LegacyInterceptors=1]="LegacyInterceptors",Eu[Eu.CustomXsrfConfiguration=2]="CustomXsrfConfiguration",Eu[Eu.NoXsrfProtection=3]="NoXsrfProtection",Eu[Eu.JsonpSupport=4]="JsonpSupport",Eu[Eu.RequestsMadeViaParent=5]="RequestsMadeViaParent",Eu))();function hw(i,e){return{\u0275kind:i,\u0275providers:e}}function iX(...i){const e=[lM,RL,FL,{provide:cE,useExisting:FL},{provide:cI,useExisting:RL},{provide:cM,useValue:nX,multi:!0},{provide:fI,useValue:!0},{provide:HL,useClass:tX}];for(const t of i)e.push(...t.\u0275providers);return function qe(i){return{\u0275providers:i}}(e)}const VL=new cr("LEGACY_INTERCEPTOR_FN");function sX({cookieName:i,headerName:e}){const t=[];return void 0!==i&&t.push({provide:NL,useValue:i}),void 0!==e&&t.push({provide:zL,useValue:e}),hw(Eu.CustomXsrfConfiguration,t)}let oX=(()=>{class i{}return i.\u0275fac=function(t){return new(t||i)},i.\u0275mod=ia({type:i}),i.\u0275inj=ft({providers:[iX(hw(Eu.LegacyInterceptors,[{provide:VL,useFactory:X$},{provide:cM,useExisting:VL,multi:!0}]),sX({cookieName:LL,headerName:UL}))]}),i})();class rp extends D{constructor(e){super(),this._value=e}get value(){return this.getValue()}_subscribe(e){const t=super._subscribe(e);return!t.closed&&e.next(this._value),t}getValue(){const{hasError:e,thrownError:t,_value:n}=this;if(e)throw t;return this._throwIfClosed(),n}next(e){super.next(this._value=e)}}const dE=M(i=>function(){i(this),this.name="EmptyError",this.message="no elements in sequence"}),{isArray:aX}=Array,{getPrototypeOf:lX,prototype:cX,keys:uX}=Object;function GL(i){if(1===i.length){const e=i[0];if(aX(e))return{args:e,keys:null};if(function hX(i){return i&&"object"==typeof i&&lX(i)===cX}(e)){const t=uX(e);return{args:t.map(n=>e[n]),keys:t}}}return{args:i,keys:null}}const{isArray:dX}=Array;function pI(i){return et(e=>function fX(i,e){return dX(e)?i(...e):i(e)}(i,e))}function qL(i,e){return i.reduce((t,n,r)=>(t[n]=e[r],t),{})}function AI(...i){const e=xt(i),t=ot(i),{args:n,keys:r}=GL(i);if(0===n.length)return cn([],e);const s=new de(function pX(i,e,t=re){return n=>{QL(e,()=>{const{length:r}=i,s=new Array(r);let a=r,l=r;for(let u=0;u{const d=cn(i[u],e);let p=!1;d.subscribe(Ge(n,y=>{s[u]=y,p||(p=!0,l--),l||n.next(t(s.slice()))},()=>{--a||n.complete()}))},n)},n)}}(n,e,r?a=>qL(r,a):re));return t?s.pipe(pI(t)):s}function QL(i,e,t){i?ho(t,i,e):e()}function uM(...i){return function AX(){return ba(1)}()(cn(i,xt(i)))}function fE(i){return new de(e=>{$o(i()).subscribe(e)})}function dw(i,e){const t=ze(i)?i:()=>i,n=r=>r.error(t());return new de(e?r=>e.schedule(n,0,r):n)}function mI(){return Ee((i,e)=>{let t=null;i._refCount++;const n=Ge(e,void 0,void 0,void 0,()=>{if(!i||i._refCount<=0||0<--i._refCount)return void(t=null);const r=i._connection,s=t;t=null,r&&(!s||r===s)&&r.unsubscribe(),e.unsubscribe()});i.subscribe(n),n.closed||(t=i.connect())})}class gI extends de{constructor(e,t){super(),this.source=e,this.subjectFactory=t,this._subject=null,this._refCount=0,this._connection=null,ge(e)&&(this.lift=e.lift)}_subscribe(e){return this.getSubject().subscribe(e)}getSubject(){const e=this._subject;return(!e||e.isStopped)&&(this._subject=this.subjectFactory()),this._subject}_teardown(){this._refCount=0;const{_connection:e}=this;this._subject=this._connection=null,e?.unsubscribe()}connect(){let e=this._connection;if(!e){e=this._connection=new De;const t=this.getSubject();e.add(this.source.subscribe(Ge(t,void 0,()=>{this._teardown(),t.complete()},n=>{this._teardown(),t.error(n)},()=>this._teardown()))),e.closed&&(this._connection=null,e=De.EMPTY)}return e}refCount(){return mI()(this)}}function sp(i,e){return Ee((t,n)=>{let r=null,s=0,a=!1;const l=()=>a&&!r&&n.complete();t.subscribe(Ge(n,u=>{r?.unsubscribe();let d=0;const p=s++;$o(i(u,p)).subscribe(r=Ge(n,y=>n.next(e?e(u,y,p,d++):y),()=>{r=null,l()}))},()=>{a=!0,l()}))})}function nu(i){return i<=0?()=>Sa:Ee((e,t)=>{let n=0;e.subscribe(Ge(t,r=>{++n<=i&&(t.next(r),i<=n&&t.complete())}))})}function op(...i){const e=xt(i);return Ee((t,n)=>{(e?uM(i,t,e):uM(i,t)).subscribe(n)})}function pE(i){return Ee((e,t)=>{let n=!1;e.subscribe(Ge(t,r=>{n=!0,t.next(r)},()=>{n||t.next(i),t.complete()}))})}function WL(i=mX){return Ee((e,t)=>{let n=!1;e.subscribe(Ge(t,r=>{n=!0,t.next(r)},()=>n?t.complete():t.error(i())))})}function mX(){return new dE}function ry(i,e){const t=arguments.length>=2;return n=>n.pipe(i?tu((r,s)=>i(r,s,n)):re,nu(1),t?pE(e):WL(()=>new dE))}function Dc(i,e,t){const n=ze(i)||e||t?{next:i,error:e,complete:t}:i;return n?Ee((r,s)=>{var a;null===(a=n.subscribe)||void 0===a||a.call(n);let l=!0;r.subscribe(Ge(s,u=>{var d;null===(d=n.next)||void 0===d||d.call(n,u),s.next(u)},()=>{var u;l=!1,null===(u=n.complete)||void 0===u||u.call(n),s.complete()},u=>{var d;l=!1,null===(d=n.error)||void 0===d||d.call(n,u),s.error(u)},()=>{var u,d;l&&(null===(u=n.unsubscribe)||void 0===u||u.call(n)),null===(d=n.finalize)||void 0===d||d.call(n)}))}):re}function B_(i){return Ee((e,t)=>{let s,n=null,r=!1;n=e.subscribe(Ge(t,void 0,void 0,a=>{s=$o(i(a,B_(i)(e))),n?(n.unsubscribe(),n=null,s.subscribe(t)):r=!0})),r&&(n.unsubscribe(),n=null,s.subscribe(t))})}function gX(i,e,t,n,r){return(s,a)=>{let l=t,u=e,d=0;s.subscribe(Ge(a,p=>{const y=d++;u=l?i(u,p,y):(l=!0,p),n&&a.next(u)},r&&(()=>{l&&a.next(u),a.complete()})))}}function jL(i,e){return Ee(gX(i,e,arguments.length>=2,!0))}function _I(i){return i<=0?()=>Sa:Ee((e,t)=>{let n=[];e.subscribe(Ge(t,r=>{n.push(r),i{for(const r of n)t.next(r);t.complete()},void 0,()=>{n=null}))})}function $L(i,e){const t=arguments.length>=2;return n=>n.pipe(i?tu((r,s)=>i(r,s,n)):re,_I(1),t?pE(e):WL(()=>new dE))}function XL(i){return et(()=>i)}function AE(i){return Ee((e,t)=>{try{e.subscribe(t)}finally{t.add(i)}})}const da="primary",hM=Symbol("RouteTitle");class yX{constructor(e){this.params=e||{}}has(e){return Object.prototype.hasOwnProperty.call(this.params,e)}get(e){if(this.has(e)){const t=this.params[e];return Array.isArray(t)?t[0]:t}return null}getAll(e){if(this.has(e)){const t=this.params[e];return Array.isArray(t)?t:[t]}return[]}get keys(){return Object.keys(this.params)}}function fw(i){return new yX(i)}function vX(i,e,t){const n=t.path.split("/");if(n.length>i.length||"full"===t.pathMatch&&(e.hasChildren()||n.lengthn[s]===r)}return i===e}function YL(i){return Array.prototype.concat.apply([],i)}function ZL(i){return i.length>0?i[i.length-1]:null}function Md(i,e){for(const t in i)i.hasOwnProperty(t)&&e(i[t],t)}function sy(i){return Pp(i)?i:Fv(i)?cn(Promise.resolve(i)):no(i)}const mE=!1,xX={exact:function t6(i,e,t){if(!Wv(i.segments,e.segments)||!gE(i.segments,e.segments,t)||i.numberOfChildren!==e.numberOfChildren)return!1;for(const n in e.children)if(!i.children[n]||!t6(i.children[n],e.children[n],t))return!1;return!0},subset:n6},JL={exact:function wX(i,e){return Jg(i,e)},subset:function CX(i,e){return Object.keys(e).length<=Object.keys(i).length&&Object.keys(e).every(t=>KL(i[t],e[t]))},ignored:()=>!0};function e6(i,e,t){return xX[t.paths](i.root,e.root,t.matrixParams)&&JL[t.queryParams](i.queryParams,e.queryParams)&&!("exact"===t.fragment&&i.fragment!==e.fragment)}function n6(i,e,t){return i6(i,e,e.segments,t)}function i6(i,e,t,n){if(i.segments.length>t.length){const r=i.segments.slice(0,t.length);return!(!Wv(r,t)||e.hasChildren()||!gE(r,t,n))}if(i.segments.length===t.length){if(!Wv(i.segments,t)||!gE(i.segments,t,n))return!1;for(const r in e.children)if(!i.children[r]||!n6(i.children[r],e.children[r],n))return!1;return!0}{const r=t.slice(0,i.segments.length),s=t.slice(i.segments.length);return!!(Wv(i.segments,r)&&gE(i.segments,r,n)&&i.children[da])&&i6(i.children[da],e,s,n)}}function gE(i,e,t){return e.every((n,r)=>JL[t](i[r].parameters,n.parameters))}class Qv{constructor(e=new La([],{}),t={},n=null){this.root=e,this.queryParams=t,this.fragment=n}get queryParamMap(){return this._queryParamMap||(this._queryParamMap=fw(this.queryParams)),this._queryParamMap}toString(){return TX.serialize(this)}}class La{constructor(e,t){this.segments=e,this.children=t,this.parent=null,Md(t,(n,r)=>n.parent=this)}hasChildren(){return this.numberOfChildren>0}get numberOfChildren(){return Object.keys(this.children).length}toString(){return _E(this)}}class dM{constructor(e,t){this.path=e,this.parameters=t}get parameterMap(){return this._parameterMap||(this._parameterMap=fw(this.parameters)),this._parameterMap}toString(){return o6(this)}}function Wv(i,e){return i.length===e.length&&i.every((t,n)=>t.path===e[n].path)}let fM=(()=>{class i{}return i.\u0275fac=function(t){return new(t||i)},i.\u0275prov=Ue({token:i,factory:function(){return new yI},providedIn:"root"}),i})();class yI{parse(e){const t=new RX(e);return new Qv(t.parseRootSegment(),t.parseQueryParams(),t.parseFragment())}serialize(e){const t=`/${pM(e.root,!0)}`,n=function BX(i){const e=Object.keys(i).map(t=>{const n=i[t];return Array.isArray(n)?n.map(r=>`${yE(t)}=${yE(r)}`).join("&"):`${yE(t)}=${yE(n)}`}).filter(t=>!!t);return e.length?`?${e.join("&")}`:""}(e.queryParams);return`${t}${n}${"string"==typeof e.fragment?`#${function EX(i){return encodeURI(i)}(e.fragment)}`:""}`}}const TX=new yI;function _E(i){return i.segments.map(e=>o6(e)).join("/")}function pM(i,e){if(!i.hasChildren())return _E(i);if(e){const t=i.children[da]?pM(i.children[da],!1):"",n=[];return Md(i.children,(r,s)=>{s!==da&&n.push(`${s}:${pM(r,!1)}`)}),n.length>0?`${t}(${n.join("//")})`:t}{const t=function SX(i,e){let t=[];return Md(i.children,(n,r)=>{r===da&&(t=t.concat(e(n,r)))}),Md(i.children,(n,r)=>{r!==da&&(t=t.concat(e(n,r)))}),t}(i,(n,r)=>r===da?[pM(i.children[da],!1)]:[`${r}:${pM(n,!1)}`]);return 1===Object.keys(i.children).length&&null!=i.children[da]?`${_E(i)}/${t[0]}`:`${_E(i)}/(${t.join("//")})`}}function r6(i){return encodeURIComponent(i).replace(/%40/g,"@").replace(/%3A/gi,":").replace(/%24/g,"$").replace(/%2C/gi,",")}function yE(i){return r6(i).replace(/%3B/gi,";")}function vI(i){return r6(i).replace(/\(/g,"%28").replace(/\)/g,"%29").replace(/%26/gi,"&")}function vE(i){return decodeURIComponent(i)}function s6(i){return vE(i.replace(/\+/g,"%20"))}function o6(i){return`${vI(i.path)}${function DX(i){return Object.keys(i).map(e=>`;${vI(e)}=${vI(i[e])}`).join("")}(i.parameters)}`}const IX=/^[^\/()?;=#]+/;function bE(i){const e=i.match(IX);return e?e[0]:""}const PX=/^[^=?&#]+/,FX=/^[^&#]+/;class RX{constructor(e){this.url=e,this.remaining=e}parseRootSegment(){return this.consumeOptional("/"),""===this.remaining||this.peekStartsWith("?")||this.peekStartsWith("#")?new La([],{}):new La([],this.parseChildren())}parseQueryParams(){const e={};if(this.consumeOptional("?"))do{this.parseQueryParam(e)}while(this.consumeOptional("&"));return e}parseFragment(){return this.consumeOptional("#")?decodeURIComponent(this.remaining):null}parseChildren(){if(""===this.remaining)return{};this.consumeOptional("/");const e=[];for(this.peekStartsWith("(")||e.push(this.parseSegment());this.peekStartsWith("/")&&!this.peekStartsWith("//")&&!this.peekStartsWith("/(");)this.capture("/"),e.push(this.parseSegment());let t={};this.peekStartsWith("/(")&&(this.capture("/"),t=this.parseParens(!0));let n={};return this.peekStartsWith("(")&&(n=this.parseParens(!1)),(e.length>0||Object.keys(t).length>0)&&(n[da]=new La(e,t)),n}parseSegment(){const e=bE(this.remaining);if(""===e&&this.peekStartsWith(";"))throw new fi(4009,mE);return this.capture(e),new dM(vE(e),this.parseMatrixParams())}parseMatrixParams(){const e={};for(;this.consumeOptional(";");)this.parseParam(e);return e}parseParam(e){const t=bE(this.remaining);if(!t)return;this.capture(t);let n="";if(this.consumeOptional("=")){const r=bE(this.remaining);r&&(n=r,this.capture(n))}e[vE(t)]=vE(n)}parseQueryParam(e){const t=function kX(i){const e=i.match(PX);return e?e[0]:""}(this.remaining);if(!t)return;this.capture(t);let n="";if(this.consumeOptional("=")){const a=function OX(i){const e=i.match(FX);return e?e[0]:""}(this.remaining);a&&(n=a,this.capture(n))}const r=s6(t),s=s6(n);if(e.hasOwnProperty(r)){let a=e[r];Array.isArray(a)||(a=[a],e[r]=a),a.push(s)}else e[r]=s}parseParens(e){const t={};for(this.capture("(");!this.consumeOptional(")")&&this.remaining.length>0;){const n=bE(this.remaining),r=this.remaining[n.length];if("/"!==r&&")"!==r&&";"!==r)throw new fi(4010,mE);let s;n.indexOf(":")>-1?(s=n.slice(0,n.indexOf(":")),this.capture(s),this.capture(":")):e&&(s=da);const a=this.parseChildren();t[s]=1===Object.keys(a).length?a[da]:new La([],a),this.consumeOptional("//")}return t}peekStartsWith(e){return this.remaining.startsWith(e)}consumeOptional(e){return!!this.peekStartsWith(e)&&(this.remaining=this.remaining.substring(e.length),!0)}capture(e){if(!this.consumeOptional(e))throw new fi(4011,mE)}}function bI(i){return i.segments.length>0?new La([],{[da]:i}):i}function xE(i){const e={};for(const n of Object.keys(i.children)){const s=xE(i.children[n]);(s.segments.length>0||s.hasChildren())&&(e[n]=s)}return function LX(i){if(1===i.numberOfChildren&&i.children[da]){const e=i.children[da];return new La(i.segments.concat(e.segments),e.children)}return i}(new La(i.segments,e))}function jv(i){return i instanceof Qv}function zX(i,e,t,n,r){if(0===t.length)return pw(e.root,e.root,e.root,n,r);const s=function c6(i){if("string"==typeof i[0]&&1===i.length&&"/"===i[0])return new l6(!0,0,i);let e=0,t=!1;const n=i.reduce((r,s,a)=>{if("object"==typeof s&&null!=s){if(s.outlets){const l={};return Md(s.outlets,(u,d)=>{l[d]="string"==typeof u?u.split("/"):u}),[...r,{outlets:l}]}if(s.segmentPath)return[...r,s.segmentPath]}return"string"!=typeof s?[...r,s]:0===a?(s.split("/").forEach((l,u)=>{0==u&&"."===l||(0==u&&""===l?t=!0:".."===l?e++:""!=l&&r.push(l))}),r):[...r,s]},[]);return new l6(t,e,n)}(t);return s.toRoot()?pw(e.root,e.root,new La([],{}),n,r):function a(u){const d=function VX(i,e,t,n){if(i.isAbsolute)return new Aw(e.root,!0,0);if(-1===n)return new Aw(t,t===e.root,0);return function u6(i,e,t){let n=i,r=e,s=t;for(;s>r;){if(s-=r,n=n.parent,!n)throw new fi(4005,!1);r=n.segments.length}return new Aw(n,!1,r-s)}(t,n+(AM(i.commands[0])?0:1),i.numberOfDoubleDots)}(s,e,i.snapshot?._urlSegment,u),p=d.processChildren?mw(d.segmentGroup,d.index,s.commands):wI(d.segmentGroup,d.index,s.commands);return pw(e.root,d.segmentGroup,p,n,r)}(i.snapshot?._lastPathIndex)}function AM(i){return"object"==typeof i&&null!=i&&!i.outlets&&!i.segmentPath}function mM(i){return"object"==typeof i&&null!=i&&i.outlets}function pw(i,e,t,n,r){let a,s={};n&&Md(n,(u,d)=>{s[d]=Array.isArray(u)?u.map(p=>`${p}`):`${u}`}),a=i===e?t:a6(i,e,t);const l=bI(xE(a));return new Qv(l,s,r)}function a6(i,e,t){const n={};return Md(i.children,(r,s)=>{n[s]=r===e?t:a6(r,e,t)}),new La(i.segments,n)}class l6{constructor(e,t,n){if(this.isAbsolute=e,this.numberOfDoubleDots=t,this.commands=n,e&&n.length>0&&AM(n[0]))throw new fi(4003,!1);const r=n.find(mM);if(r&&r!==ZL(n))throw new fi(4004,!1)}toRoot(){return this.isAbsolute&&1===this.commands.length&&"/"==this.commands[0]}}class Aw{constructor(e,t,n){this.segmentGroup=e,this.processChildren=t,this.index=n}}function wI(i,e,t){if(i||(i=new La([],{})),0===i.segments.length&&i.hasChildren())return mw(i,e,t);const n=function qX(i,e,t){let n=0,r=e;const s={match:!1,pathIndex:0,commandIndex:0};for(;r=t.length)return s;const a=i.segments[r],l=t[n];if(mM(l))break;const u=`${l}`,d=n0&&void 0===u)break;if(u&&d&&"object"==typeof d&&void 0===d.outlets){if(!d6(u,d,a))return s;n+=2}else{if(!d6(u,{},a))return s;n++}r++}return{match:!0,pathIndex:r,commandIndex:n}}(i,e,t),r=t.slice(n.commandIndex);if(n.match&&n.pathIndex{"string"==typeof s&&(s=[s]),null!==s&&(r[a]=wI(i.children[a],e,s))}),Md(i.children,(s,a)=>{void 0===n[a]&&(r[a]=s)}),new La(i.segments,r))}}function CI(i,e,t){const n=i.segments.slice(0,e);let r=0;for(;r{"string"==typeof t&&(t=[t]),null!==t&&(e[n]=CI(new La([],{}),0,t))}),e}function h6(i){const e={};return Md(i,(t,n)=>e[n]=`${t}`),e}function d6(i,e,t){return i==t.path&&Jg(e,t.parameters)}const gM="imperative";class e0{constructor(e,t){this.id=e,this.url=t}}class MI extends e0{constructor(e,t,n="imperative",r=null){super(e,t),this.type=0,this.navigationTrigger=n,this.restoredState=r}toString(){return`NavigationStart(id: ${this.id}, url: '${this.url}')`}}class $v extends e0{constructor(e,t,n){super(e,t),this.urlAfterRedirects=n,this.type=1}toString(){return`NavigationEnd(id: ${this.id}, url: '${this.url}', urlAfterRedirects: '${this.urlAfterRedirects}')`}}class wE extends e0{constructor(e,t,n,r){super(e,t),this.reason=n,this.code=r,this.type=2}toString(){return`NavigationCancel(id: ${this.id}, url: '${this.url}')`}}class f6 extends e0{constructor(e,t,n,r){super(e,t),this.reason=n,this.code=r,this.type=16}}class p6 extends e0{constructor(e,t,n,r){super(e,t),this.error=n,this.target=r,this.type=3}toString(){return`NavigationError(id: ${this.id}, url: '${this.url}', error: ${this.error})`}}class WX extends e0{constructor(e,t,n,r){super(e,t),this.urlAfterRedirects=n,this.state=r,this.type=4}toString(){return`RoutesRecognized(id: ${this.id}, url: '${this.url}', urlAfterRedirects: '${this.urlAfterRedirects}', state: ${this.state})`}}class jX extends e0{constructor(e,t,n,r){super(e,t),this.urlAfterRedirects=n,this.state=r,this.type=7}toString(){return`GuardsCheckStart(id: ${this.id}, url: '${this.url}', urlAfterRedirects: '${this.urlAfterRedirects}', state: ${this.state})`}}class $X extends e0{constructor(e,t,n,r,s){super(e,t),this.urlAfterRedirects=n,this.state=r,this.shouldActivate=s,this.type=8}toString(){return`GuardsCheckEnd(id: ${this.id}, url: '${this.url}', urlAfterRedirects: '${this.urlAfterRedirects}', state: ${this.state}, shouldActivate: ${this.shouldActivate})`}}class XX extends e0{constructor(e,t,n,r){super(e,t),this.urlAfterRedirects=n,this.state=r,this.type=5}toString(){return`ResolveStart(id: ${this.id}, url: '${this.url}', urlAfterRedirects: '${this.urlAfterRedirects}', state: ${this.state})`}}class KX extends e0{constructor(e,t,n,r){super(e,t),this.urlAfterRedirects=n,this.state=r,this.type=6}toString(){return`ResolveEnd(id: ${this.id}, url: '${this.url}', urlAfterRedirects: '${this.urlAfterRedirects}', state: ${this.state})`}}class YX{constructor(e){this.route=e,this.type=9}toString(){return`RouteConfigLoadStart(path: ${this.route.path})`}}class ZX{constructor(e){this.route=e,this.type=10}toString(){return`RouteConfigLoadEnd(path: ${this.route.path})`}}class JX{constructor(e){this.snapshot=e,this.type=11}toString(){return`ChildActivationStart(path: '${this.snapshot.routeConfig&&this.snapshot.routeConfig.path||""}')`}}class eK{constructor(e){this.snapshot=e,this.type=12}toString(){return`ChildActivationEnd(path: '${this.snapshot.routeConfig&&this.snapshot.routeConfig.path||""}')`}}class tK{constructor(e){this.snapshot=e,this.type=13}toString(){return`ActivationStart(path: '${this.snapshot.routeConfig&&this.snapshot.routeConfig.path||""}')`}}class nK{constructor(e){this.snapshot=e,this.type=14}toString(){return`ActivationEnd(path: '${this.snapshot.routeConfig&&this.snapshot.routeConfig.path||""}')`}}class A6{constructor(e,t,n){this.routerEvent=e,this.position=t,this.anchor=n,this.type=15}toString(){return`Scroll(anchor: '${this.anchor}', position: '${this.position?`${this.position[0]}, ${this.position[1]}`:null}')`}}let rK=(()=>{class i{createUrlTree(t,n,r,s,a,l){return zX(t||n.root,r,s,a,l)}}return i.\u0275fac=function(t){return new(t||i)},i.\u0275prov=Ue({token:i,factory:i.\u0275fac}),i})(),sK=(()=>{class i{}return i.\u0275fac=function(t){return new(t||i)},i.\u0275prov=Ue({token:i,factory:function(e){return rK.\u0275fac(e)},providedIn:"root"}),i})();class m6{constructor(e){this._root=e}get root(){return this._root.value}parent(e){const t=this.pathFromRoot(e);return t.length>1?t[t.length-2]:null}children(e){const t=SI(e,this._root);return t?t.children.map(n=>n.value):[]}firstChild(e){const t=SI(e,this._root);return t&&t.children.length>0?t.children[0].value:null}siblings(e){const t=TI(e,this._root);return t.length<2?[]:t[t.length-2].children.map(r=>r.value).filter(r=>r!==e)}pathFromRoot(e){return TI(e,this._root).map(t=>t.value)}}function SI(i,e){if(i===e.value)return e;for(const t of e.children){const n=SI(i,t);if(n)return n}return null}function TI(i,e){if(i===e.value)return[e];for(const t of e.children){const n=TI(i,t);if(n.length)return n.unshift(e),n}return[]}class I_{constructor(e,t){this.value=e,this.children=t}toString(){return`TreeNode(${this.value})`}}function gw(i){const e={};return i&&i.children.forEach(t=>e[t.value.outlet]=t),e}class g6 extends m6{constructor(e,t){super(e),this.snapshot=t,EI(this,e)}toString(){return this.snapshot.toString()}}function _6(i,e){const t=function oK(i,e){const a=new CE([],{},{},"",{},da,e,null,i.root,-1,{});return new v6("",new I_(a,[]))}(i,e),n=new rp([new dM("",{})]),r=new rp({}),s=new rp({}),a=new rp({}),l=new rp(""),u=new _w(n,r,a,l,s,da,e,t.root);return u.snapshot=t.root,new g6(new I_(u,[]),t)}class _w{constructor(e,t,n,r,s,a,l,u){this.url=e,this.params=t,this.queryParams=n,this.fragment=r,this.data=s,this.outlet=a,this.component=l,this.title=this.data?.pipe(et(d=>d[hM]))??no(void 0),this._futureSnapshot=u}get routeConfig(){return this._futureSnapshot.routeConfig}get root(){return this._routerState.root}get parent(){return this._routerState.parent(this)}get firstChild(){return this._routerState.firstChild(this)}get children(){return this._routerState.children(this)}get pathFromRoot(){return this._routerState.pathFromRoot(this)}get paramMap(){return this._paramMap||(this._paramMap=this.params.pipe(et(e=>fw(e)))),this._paramMap}get queryParamMap(){return this._queryParamMap||(this._queryParamMap=this.queryParams.pipe(et(e=>fw(e)))),this._queryParamMap}toString(){return this.snapshot?this.snapshot.toString():`Future(${this._futureSnapshot})`}}function y6(i,e="emptyOnly"){const t=i.pathFromRoot;let n=0;if("always"!==e)for(n=t.length-1;n>=1;){const r=t[n],s=t[n-1];if(r.routeConfig&&""===r.routeConfig.path)n--;else{if(s.component)break;n--}}return function aK(i){return i.reduce((e,t)=>({params:{...e.params,...t.params},data:{...e.data,...t.data},resolve:{...t.data,...e.resolve,...t.routeConfig?.data,...t._resolvedData}}),{params:{},data:{},resolve:{}})}(t.slice(n))}class CE{get title(){return this.data?.[hM]}constructor(e,t,n,r,s,a,l,u,d,p,y){this.url=e,this.params=t,this.queryParams=n,this.fragment=r,this.data=s,this.outlet=a,this.component=l,this.routeConfig=u,this._urlSegment=d,this._lastPathIndex=p,this._resolve=y}get root(){return this._routerState.root}get parent(){return this._routerState.parent(this)}get firstChild(){return this._routerState.firstChild(this)}get children(){return this._routerState.children(this)}get pathFromRoot(){return this._routerState.pathFromRoot(this)}get paramMap(){return this._paramMap||(this._paramMap=fw(this.params)),this._paramMap}get queryParamMap(){return this._queryParamMap||(this._queryParamMap=fw(this.queryParams)),this._queryParamMap}toString(){return`Route(url:'${this.url.map(n=>n.toString()).join("/")}', path:'${this.routeConfig?this.routeConfig.path:""}')`}}class v6 extends m6{constructor(e,t){super(t),this.url=e,EI(this,t)}toString(){return b6(this._root)}}function EI(i,e){e.value._routerState=i,e.children.forEach(t=>EI(i,t))}function b6(i){const e=i.children.length>0?` { ${i.children.map(b6).join(", ")} } `:"";return`${i.value}${e}`}function DI(i){if(i.snapshot){const e=i.snapshot,t=i._futureSnapshot;i.snapshot=t,Jg(e.queryParams,t.queryParams)||i.queryParams.next(t.queryParams),e.fragment!==t.fragment&&i.fragment.next(t.fragment),Jg(e.params,t.params)||i.params.next(t.params),function bX(i,e){if(i.length!==e.length)return!1;for(let t=0;tJg(t.parameters,e[n].parameters))}(i.url,e.url);return t&&!(!i.parent!=!e.parent)&&(!i.parent||BI(i.parent,e.parent))}function _M(i,e,t){if(t&&i.shouldReuseRoute(e.value,t.value.snapshot)){const n=t.value;n._futureSnapshot=e.value;const r=function cK(i,e,t){return e.children.map(n=>{for(const r of t.children)if(i.shouldReuseRoute(n.value,r.value.snapshot))return _M(i,n,r);return _M(i,n)})}(i,e,t);return new I_(n,r)}{if(i.shouldAttach(e.value)){const s=i.retrieve(e.value);if(null!==s){const a=s.route;return a.value._futureSnapshot=e.value,a.children=e.children.map(l=>_M(i,l)),a}}const n=function uK(i){return new _w(new rp(i.url),new rp(i.params),new rp(i.queryParams),new rp(i.fragment),new rp(i.data),i.outlet,i.component,i)}(e.value),r=e.children.map(s=>_M(i,s));return new I_(n,r)}}const II="ngNavigationCancelingError";function x6(i,e){const{redirectTo:t,navigationBehaviorOptions:n}=jv(e)?{redirectTo:e,navigationBehaviorOptions:void 0}:e,r=w6(!1,0,e);return r.url=t,r.navigationBehaviorOptions=n,r}function w6(i,e,t){const n=new Error("NavigationCancelingError: "+(i||""));return n[II]=!0,n.cancellationCode=e,t&&(n.url=t),n}function C6(i){return M6(i)&&jv(i.url)}function M6(i){return i&&i[II]}class hK{constructor(){this.outlet=null,this.route=null,this.resolver=null,this.injector=null,this.children=new yM,this.attachRef=null}}let yM=(()=>{class i{constructor(){this.contexts=new Map}onChildOutletCreated(t,n){const r=this.getOrCreateContext(t);r.outlet=n,this.contexts.set(t,r)}onChildOutletDestroyed(t){const n=this.getContext(t);n&&(n.outlet=null,n.attachRef=null)}onOutletDeactivated(){const t=this.contexts;return this.contexts=new Map,t}onOutletReAttached(t){this.contexts=t}getOrCreateContext(t){let n=this.getContext(t);return n||(n=new hK,this.contexts.set(t,n)),n}getContext(t){return this.contexts.get(t)||null}}return i.\u0275fac=function(t){return new(t||i)},i.\u0275prov=Ue({token:i,factory:i.\u0275fac,providedIn:"root"}),i})();const ME=!1;let PI=(()=>{class i{constructor(){this.activated=null,this._activatedRoute=null,this.name=da,this.activateEvents=new Ws,this.deactivateEvents=new Ws,this.attachEvents=new Ws,this.detachEvents=new Ws,this.parentContexts=To(yM),this.location=To(Mu),this.changeDetector=To(pl),this.environmentInjector=To(Ur)}ngOnChanges(t){if(t.name){const{firstChange:n,previousValue:r}=t.name;if(n)return;this.isTrackedInParentContexts(r)&&(this.deactivate(),this.parentContexts.onChildOutletDestroyed(r)),this.initializeOutletWithName()}}ngOnDestroy(){this.isTrackedInParentContexts(this.name)&&this.parentContexts.onChildOutletDestroyed(this.name)}isTrackedInParentContexts(t){return this.parentContexts.getContext(t)?.outlet===this}ngOnInit(){this.initializeOutletWithName()}initializeOutletWithName(){if(this.parentContexts.onChildOutletCreated(this.name,this),this.activated)return;const t=this.parentContexts.getContext(this.name);t?.route&&(t.attachRef?this.attach(t.attachRef,t.route):this.activateWith(t.route,t.injector))}get isActivated(){return!!this.activated}get component(){if(!this.activated)throw new fi(4012,ME);return this.activated.instance}get activatedRoute(){if(!this.activated)throw new fi(4012,ME);return this._activatedRoute}get activatedRouteData(){return this._activatedRoute?this._activatedRoute.snapshot.data:{}}detach(){if(!this.activated)throw new fi(4012,ME);this.location.detach();const t=this.activated;return this.activated=null,this._activatedRoute=null,this.detachEvents.emit(t.instance),t}attach(t,n){this.activated=t,this._activatedRoute=n,this.location.insert(t.hostView),this.attachEvents.emit(t.instance)}deactivate(){if(this.activated){const t=this.component;this.activated.destroy(),this.activated=null,this._activatedRoute=null,this.deactivateEvents.emit(t)}}activateWith(t,n){if(this.isActivated)throw new fi(4013,ME);this._activatedRoute=t;const r=this.location,a=t.snapshot.component,l=this.parentContexts.getOrCreateContext(this.name).children,u=new dK(t,l,r.injector);if(n&&function fK(i){return!!i.resolveComponentFactory}(n)){const d=n.resolveComponentFactory(a);this.activated=r.createComponent(d,r.length,u)}else this.activated=r.createComponent(a,{index:r.length,injector:u,environmentInjector:n??this.environmentInjector});this.changeDetector.markForCheck(),this.activateEvents.emit(this.activated.instance)}}return i.\u0275fac=function(t){return new(t||i)},i.\u0275dir=Oi({type:i,selectors:[["router-outlet"]],inputs:{name:"name"},outputs:{activateEvents:"activate",deactivateEvents:"deactivate",attachEvents:"attach",detachEvents:"detach"},exportAs:["outlet"],standalone:!0,features:[bc]}),i})();class dK{constructor(e,t,n){this.route=e,this.childContexts=t,this.parent=n}get(e,t){return e===_w?this.route:e===yM?this.childContexts:this.parent.get(e,t)}}let kI=(()=>{class i{}return i.\u0275fac=function(t){return new(t||i)},i.\u0275cmp=Fr({type:i,selectors:[["ng-component"]],standalone:!0,features:[c5],decls:1,vars:0,template:function(t,n){1&t&&Pr(0,"router-outlet")},dependencies:[PI],encapsulation:2}),i})();function S6(i,e){return i.providers&&!i._injector&&(i._injector=OT(i.providers,e,`Route: ${i.path}`)),i._injector??e}function OI(i){const e=i.children&&i.children.map(OI),t=e?{...i,children:e}:{...i};return!t.component&&!t.loadComponent&&(e||t.loadChildren)&&t.outlet&&t.outlet!==da&&(t.component=kI),t}function OA(i){return i.outlet||da}function T6(i,e){const t=i.filter(n=>OA(n)===e);return t.push(...i.filter(n=>OA(n)!==e)),t}function vM(i){if(!i)return null;if(i.routeConfig?._injector)return i.routeConfig._injector;for(let e=i.parent;e;e=e.parent){const t=e.routeConfig;if(t?._loadedInjector)return t._loadedInjector;if(t?._injector)return t._injector}return null}class _K{constructor(e,t,n,r){this.routeReuseStrategy=e,this.futureState=t,this.currState=n,this.forwardEvent=r}activate(e){const t=this.futureState._root,n=this.currState?this.currState._root:null;this.deactivateChildRoutes(t,n,e),DI(this.futureState.root),this.activateChildRoutes(t,n,e)}deactivateChildRoutes(e,t,n){const r=gw(t);e.children.forEach(s=>{const a=s.value.outlet;this.deactivateRoutes(s,r[a],n),delete r[a]}),Md(r,(s,a)=>{this.deactivateRouteAndItsChildren(s,n)})}deactivateRoutes(e,t,n){const r=e.value,s=t?t.value:null;if(r===s)if(r.component){const a=n.getContext(r.outlet);a&&this.deactivateChildRoutes(e,t,a.children)}else this.deactivateChildRoutes(e,t,n);else s&&this.deactivateRouteAndItsChildren(t,n)}deactivateRouteAndItsChildren(e,t){e.value.component&&this.routeReuseStrategy.shouldDetach(e.value.snapshot)?this.detachAndStoreRouteSubtree(e,t):this.deactivateRouteAndOutlet(e,t)}detachAndStoreRouteSubtree(e,t){const n=t.getContext(e.value.outlet),r=n&&e.value.component?n.children:t,s=gw(e);for(const a of Object.keys(s))this.deactivateRouteAndItsChildren(s[a],r);if(n&&n.outlet){const a=n.outlet.detach(),l=n.children.onOutletDeactivated();this.routeReuseStrategy.store(e.value.snapshot,{componentRef:a,route:e,contexts:l})}}deactivateRouteAndOutlet(e,t){const n=t.getContext(e.value.outlet),r=n&&e.value.component?n.children:t,s=gw(e);for(const a of Object.keys(s))this.deactivateRouteAndItsChildren(s[a],r);n&&n.outlet&&(n.outlet.deactivate(),n.children.onOutletDeactivated(),n.attachRef=null,n.resolver=null,n.route=null)}activateChildRoutes(e,t,n){const r=gw(t);e.children.forEach(s=>{this.activateRoutes(s,r[s.value.outlet],n),this.forwardEvent(new nK(s.value.snapshot))}),e.children.length&&this.forwardEvent(new eK(e.value.snapshot))}activateRoutes(e,t,n){const r=e.value,s=t?t.value:null;if(DI(r),r===s)if(r.component){const a=n.getOrCreateContext(r.outlet);this.activateChildRoutes(e,t,a.children)}else this.activateChildRoutes(e,t,n);else if(r.component){const a=n.getOrCreateContext(r.outlet);if(this.routeReuseStrategy.shouldAttach(r.snapshot)){const l=this.routeReuseStrategy.retrieve(r.snapshot);this.routeReuseStrategy.store(r.snapshot,null),a.children.onOutletReAttached(l.contexts),a.attachRef=l.componentRef,a.route=l.route.value,a.outlet&&a.outlet.attach(l.componentRef,l.route.value),DI(l.route.value),this.activateChildRoutes(e,null,a.children)}else{const l=vM(r.snapshot),u=l?.get(Gd)??null;a.attachRef=null,a.route=r,a.resolver=u,a.injector=l,a.outlet&&a.outlet.activateWith(r,a.injector),this.activateChildRoutes(e,null,a.children)}}else this.activateChildRoutes(e,null,n)}}class E6{constructor(e){this.path=e,this.route=this.path[this.path.length-1]}}class SE{constructor(e,t){this.component=e,this.route=t}}function yK(i,e,t){const n=i._root;return bM(n,e?e._root:null,t,[n.value])}function yw(i,e){const t=Symbol(),n=e.get(i,t);return n===t?"function"!=typeof i||function Vt(i){return null!==vt(i)}(i)?e.get(i):i:n}function bM(i,e,t,n,r={canDeactivateChecks:[],canActivateChecks:[]}){const s=gw(e);return i.children.forEach(a=>{(function bK(i,e,t,n,r={canDeactivateChecks:[],canActivateChecks:[]}){const s=i.value,a=e?e.value:null,l=t?t.getContext(i.value.outlet):null;if(a&&s.routeConfig===a.routeConfig){const u=function xK(i,e,t){if("function"==typeof t)return t(i,e);switch(t){case"pathParamsChange":return!Wv(i.url,e.url);case"pathParamsOrQueryParamsChange":return!Wv(i.url,e.url)||!Jg(i.queryParams,e.queryParams);case"always":return!0;case"paramsOrQueryParamsChange":return!BI(i,e)||!Jg(i.queryParams,e.queryParams);default:return!BI(i,e)}}(a,s,s.routeConfig.runGuardsAndResolvers);u?r.canActivateChecks.push(new E6(n)):(s.data=a.data,s._resolvedData=a._resolvedData),bM(i,e,s.component?l?l.children:null:t,n,r),u&&l&&l.outlet&&l.outlet.isActivated&&r.canDeactivateChecks.push(new SE(l.outlet.component,a))}else a&&xM(e,l,r),r.canActivateChecks.push(new E6(n)),bM(i,null,s.component?l?l.children:null:t,n,r)})(a,s[a.value.outlet],t,n.concat([a.value]),r),delete s[a.value.outlet]}),Md(s,(a,l)=>xM(a,t.getContext(l),r)),r}function xM(i,e,t){const n=gw(i),r=i.value;Md(n,(s,a)=>{xM(s,r.component?e?e.children.getContext(a):null:e,t)}),t.canDeactivateChecks.push(new SE(r.component&&e&&e.outlet&&e.outlet.isActivated?e.outlet.component:null,r))}function wM(i){return"function"==typeof i}function RI(i){return i instanceof dE||"EmptyError"===i?.name}const TE=Symbol("INITIAL_VALUE");function vw(){return sp(i=>AI(i.map(e=>e.pipe(nu(1),op(TE)))).pipe(et(e=>{for(const t of e)if(!0!==t){if(t===TE)return TE;if(!1===t||t instanceof Qv)return t}return!0}),tu(e=>e!==TE),nu(1)))}function D6(i){return function be(...i){return he(i)}(Dc(e=>{if(jv(e))throw x6(0,e)}),et(e=>!0===e))}const LI={matched:!1,consumedSegments:[],remainingSegments:[],parameters:{},positionalParamSegments:{}};function B6(i,e,t,n,r){const s=NI(i,e,t);return s.matched?function UK(i,e,t,n){const r=e.canMatch;return r&&0!==r.length?no(r.map(a=>{const l=yw(a,i);return sy(function EK(i){return i&&wM(i.canMatch)}(l)?l.canMatch(e,t):i.runInContext(()=>l(e,t)))})).pipe(vw(),D6()):no(!0)}(n=S6(e,n),e,t).pipe(et(a=>!0===a?s:{...LI})):no(s)}function NI(i,e,t){if(""===e.path)return"full"===e.pathMatch&&(i.hasChildren()||t.length>0)?{...LI}:{matched:!0,consumedSegments:[],remainingSegments:t,parameters:{},positionalParamSegments:{}};const r=(e.matcher||vX)(t,i,e);if(!r)return{...LI};const s={};Md(r.posParams,(l,u)=>{s[u]=l.path});const a=r.consumed.length>0?{...s,...r.consumed[r.consumed.length-1].parameters}:s;return{matched:!0,consumedSegments:r.consumed,remainingSegments:t.slice(r.consumed.length),parameters:a,positionalParamSegments:r.posParams??{}}}function EE(i,e,t,n){if(t.length>0&&function VK(i,e,t){return t.some(n=>DE(i,e,n)&&OA(n)!==da)}(i,t,n)){const s=new La(e,function HK(i,e,t,n){const r={};r[da]=n,n._sourceSegment=i,n._segmentIndexShift=e.length;for(const s of t)if(""===s.path&&OA(s)!==da){const a=new La([],{});a._sourceSegment=i,a._segmentIndexShift=e.length,r[OA(s)]=a}return r}(i,e,n,new La(t,i.children)));return s._sourceSegment=i,s._segmentIndexShift=e.length,{segmentGroup:s,slicedSegments:[]}}if(0===t.length&&function GK(i,e,t){return t.some(n=>DE(i,e,n))}(i,t,n)){const s=new La(i.segments,function zK(i,e,t,n,r){const s={};for(const a of n)if(DE(i,t,a)&&!r[OA(a)]){const l=new La([],{});l._sourceSegment=i,l._segmentIndexShift=e.length,s[OA(a)]=l}return{...r,...s}}(i,e,t,n,i.children));return s._sourceSegment=i,s._segmentIndexShift=e.length,{segmentGroup:s,slicedSegments:t}}const r=new La(i.segments,i.children);return r._sourceSegment=i,r._segmentIndexShift=e.length,{segmentGroup:r,slicedSegments:t}}function DE(i,e,t){return(!(i.hasChildren()||e.length>0)||"full"!==t.pathMatch)&&""===t.path}function I6(i,e,t,n){return!!(OA(i)===n||n!==da&&DE(e,t,i))&&("**"===i.path||NI(e,i,t).matched)}function P6(i,e,t){return 0===e.length&&!i.children[t]}const BE=!1;class IE{constructor(e){this.segmentGroup=e||null}}class k6{constructor(e){this.urlTree=e}}function CM(i){return dw(new IE(i))}function F6(i){return dw(new k6(i))}class jK{constructor(e,t,n,r,s){this.injector=e,this.configLoader=t,this.urlSerializer=n,this.urlTree=r,this.config=s,this.allowRedirects=!0}apply(){const e=EE(this.urlTree.root,[],[],this.config).segmentGroup,t=new La(e.segments,e.children);return this.expandSegmentGroup(this.injector,this.config,t,da).pipe(et(s=>this.createUrlTree(xE(s),this.urlTree.queryParams,this.urlTree.fragment))).pipe(B_(s=>{if(s instanceof k6)return this.allowRedirects=!1,this.match(s.urlTree);throw s instanceof IE?this.noMatchError(s):s}))}match(e){return this.expandSegmentGroup(this.injector,this.config,e.root,da).pipe(et(r=>this.createUrlTree(xE(r),e.queryParams,e.fragment))).pipe(B_(r=>{throw r instanceof IE?this.noMatchError(r):r}))}noMatchError(e){return new fi(4002,BE)}createUrlTree(e,t,n){const r=bI(e);return new Qv(r,t,n)}expandSegmentGroup(e,t,n,r){return 0===n.segments.length&&n.hasChildren()?this.expandChildren(e,t,n).pipe(et(s=>new La([],s))):this.expandSegment(e,n,t,n.segments,r,!0)}expandChildren(e,t,n){const r=[];for(const s of Object.keys(n.children))"primary"===s?r.unshift(s):r.push(s);return cn(r).pipe(ny(s=>{const a=n.children[s],l=T6(t,s);return this.expandSegmentGroup(e,l,a,s).pipe(et(u=>({segment:u,outlet:s})))}),jL((s,a)=>(s[a.outlet]=a.segment,s),{}),$L())}expandSegment(e,t,n,r,s,a){return cn(n).pipe(ny(l=>this.expandSegmentAgainstRoute(e,t,n,l,r,s,a).pipe(B_(d=>{if(d instanceof IE)return no(null);throw d}))),ry(l=>!!l),B_((l,u)=>{if(RI(l))return P6(t,r,s)?no(new La([],{})):CM(t);throw l}))}expandSegmentAgainstRoute(e,t,n,r,s,a,l){return I6(r,t,s,a)?void 0===r.redirectTo?this.matchSegmentAgainstRoute(e,t,r,s,a):l&&this.allowRedirects?this.expandSegmentAgainstRouteUsingRedirect(e,t,n,r,s,a):CM(t):CM(t)}expandSegmentAgainstRouteUsingRedirect(e,t,n,r,s,a){return"**"===r.path?this.expandWildCardWithParamsAgainstRouteUsingRedirect(e,n,r,a):this.expandRegularSegmentAgainstRouteUsingRedirect(e,t,n,r,s,a)}expandWildCardWithParamsAgainstRouteUsingRedirect(e,t,n,r){const s=this.applyRedirectCommands([],n.redirectTo,{});return n.redirectTo.startsWith("/")?F6(s):this.lineralizeSegments(n,s).pipe(ma(a=>{const l=new La(a,{});return this.expandSegment(e,l,t,a,r,!1)}))}expandRegularSegmentAgainstRouteUsingRedirect(e,t,n,r,s,a){const{matched:l,consumedSegments:u,remainingSegments:d,positionalParamSegments:p}=NI(t,r,s);if(!l)return CM(t);const y=this.applyRedirectCommands(u,r.redirectTo,p);return r.redirectTo.startsWith("/")?F6(y):this.lineralizeSegments(r,y).pipe(ma(C=>this.expandSegment(e,t,n,C.concat(d),a,!1)))}matchSegmentAgainstRoute(e,t,n,r,s){return"**"===n.path?(e=S6(n,e),n.loadChildren?(n._loadedRoutes?no({routes:n._loadedRoutes,injector:n._loadedInjector}):this.configLoader.loadChildren(e,n)).pipe(et(l=>(n._loadedRoutes=l.routes,n._loadedInjector=l.injector,new La(r,{})))):no(new La(r,{}))):B6(t,n,r,e).pipe(sp(({matched:a,consumedSegments:l,remainingSegments:u})=>a?this.getChildConfig(e=n._injector??e,n,r).pipe(ma(p=>{const y=p.injector??e,C=p.routes,{segmentGroup:O,slicedSegments:Q}=EE(t,l,u,C),W=new La(O.segments,O.children);if(0===Q.length&&W.hasChildren())return this.expandChildren(y,C,W).pipe(et(we=>new La(l,we)));if(0===C.length&&0===Q.length)return no(new La(l,{}));const se=OA(n)===s;return this.expandSegment(y,W,C,Q,se?da:s,!0).pipe(et(Le=>new La(l.concat(Le.segments),Le.children)))})):CM(t)))}getChildConfig(e,t,n){return t.children?no({routes:t.children,injector:e}):t.loadChildren?void 0!==t._loadedRoutes?no({routes:t._loadedRoutes,injector:t._loadedInjector}):function NK(i,e,t,n){const r=e.canLoad;return void 0===r||0===r.length?no(!0):no(r.map(a=>{const l=yw(a,i);return sy(function CK(i){return i&&wM(i.canLoad)}(l)?l.canLoad(e,t):i.runInContext(()=>l(e,t)))})).pipe(vw(),D6())}(e,t,n).pipe(ma(r=>r?this.configLoader.loadChildren(e,t).pipe(Dc(s=>{t._loadedRoutes=s.routes,t._loadedInjector=s.injector})):function QK(i){return dw(w6(BE,3))}())):no({routes:[],injector:e})}lineralizeSegments(e,t){let n=[],r=t.root;for(;;){if(n=n.concat(r.segments),0===r.numberOfChildren)return no(n);if(r.numberOfChildren>1||!r.children[da])return dw(new fi(4e3,BE));r=r.children[da]}}applyRedirectCommands(e,t,n){return this.applyRedirectCreateUrlTree(t,this.urlSerializer.parse(t),e,n)}applyRedirectCreateUrlTree(e,t,n,r){const s=this.createSegmentGroup(e,t.root,n,r);return new Qv(s,this.createQueryParams(t.queryParams,this.urlTree.queryParams),t.fragment)}createQueryParams(e,t){const n={};return Md(e,(r,s)=>{if("string"==typeof r&&r.startsWith(":")){const l=r.substring(1);n[s]=t[l]}else n[s]=r}),n}createSegmentGroup(e,t,n,r){const s=this.createSegments(e,t.segments,n,r);let a={};return Md(t.children,(l,u)=>{a[u]=this.createSegmentGroup(e,l,n,r)}),new La(s,a)}createSegments(e,t,n,r){return t.map(s=>s.path.startsWith(":")?this.findPosParam(e,s,r):this.findOrReturn(s,n))}findPosParam(e,t,n){const r=n[t.path.substring(1)];if(!r)throw new fi(4001,BE);return r}findOrReturn(e,t){let n=0;for(const r of t){if(r.path===e.path)return t.splice(n),r;n++}return e}}class XK{}class ZK{constructor(e,t,n,r,s,a,l){this.injector=e,this.rootComponentType=t,this.config=n,this.urlTree=r,this.url=s,this.paramsInheritanceStrategy=a,this.urlSerializer=l}recognize(){const e=EE(this.urlTree.root,[],[],this.config.filter(t=>void 0===t.redirectTo)).segmentGroup;return this.processSegmentGroup(this.injector,this.config,e,da).pipe(et(t=>{if(null===t)return null;const n=new CE([],Object.freeze({}),Object.freeze({...this.urlTree.queryParams}),this.urlTree.fragment,{},da,this.rootComponentType,null,this.urlTree.root,-1,{}),r=new I_(n,t),s=new v6(this.url,r);return this.inheritParamsAndData(s._root),s}))}inheritParamsAndData(e){const t=e.value,n=y6(t,this.paramsInheritanceStrategy);t.params=Object.freeze(n.params),t.data=Object.freeze(n.data),e.children.forEach(r=>this.inheritParamsAndData(r))}processSegmentGroup(e,t,n,r){return 0===n.segments.length&&n.hasChildren()?this.processChildren(e,t,n):this.processSegment(e,t,n,n.segments,r)}processChildren(e,t,n){return cn(Object.keys(n.children)).pipe(ny(r=>{const s=n.children[r],a=T6(t,r);return this.processSegmentGroup(e,a,s,r)}),jL((r,s)=>r&&s?(r.push(...s),r):null),function _X(i,e=!1){return Ee((t,n)=>{let r=0;t.subscribe(Ge(n,s=>{const a=i(s,r++);(a||e)&&n.next(s),!a&&n.complete()}))})}(r=>null!==r),pE(null),$L(),et(r=>{if(null===r)return null;const s=R6(r);return function JK(i){i.sort((e,t)=>e.value.outlet===da?-1:t.value.outlet===da?1:e.value.outlet.localeCompare(t.value.outlet))}(s),s}))}processSegment(e,t,n,r,s){return cn(t).pipe(ny(a=>this.processSegmentAgainstRoute(a._injector??e,a,n,r,s)),ry(a=>!!a),B_(a=>{if(RI(a))return P6(n,r,s)?no([]):no(null);throw a}))}processSegmentAgainstRoute(e,t,n,r,s){if(t.redirectTo||!I6(t,n,r,s))return no(null);let a;if("**"===t.path){const l=r.length>0?ZL(r).parameters:{},u=N6(n)+r.length;a=no({snapshot:new CE(r,l,Object.freeze({...this.urlTree.queryParams}),this.urlTree.fragment,U6(t),OA(t),t.component??t._loadedComponent??null,t,L6(n),u,z6(t)),consumedSegments:[],remainingSegments:[]})}else a=B6(n,t,r,e).pipe(et(({matched:l,consumedSegments:u,remainingSegments:d,parameters:p})=>{if(!l)return null;const y=N6(n)+u.length;return{snapshot:new CE(u,p,Object.freeze({...this.urlTree.queryParams}),this.urlTree.fragment,U6(t),OA(t),t.component??t._loadedComponent??null,t,L6(n),y,z6(t)),consumedSegments:u,remainingSegments:d}}));return a.pipe(sp(l=>{if(null===l)return no(null);const{snapshot:u,consumedSegments:d,remainingSegments:p}=l;e=t._injector??e;const y=t._loadedInjector??e,C=function eY(i){return i.children?i.children:i.loadChildren?i._loadedRoutes:[]}(t),{segmentGroup:O,slicedSegments:Q}=EE(n,d,p,C.filter(se=>void 0===se.redirectTo));if(0===Q.length&&O.hasChildren())return this.processChildren(y,C,O).pipe(et(se=>null===se?null:[new I_(u,se)]));if(0===C.length&&0===Q.length)return no([new I_(u,[])]);const W=OA(t)===s;return this.processSegment(y,C,O,Q,W?da:s).pipe(et(se=>null===se?null:[new I_(u,se)]))}))}}function tY(i){const e=i.value.routeConfig;return e&&""===e.path&&void 0===e.redirectTo}function R6(i){const e=[],t=new Set;for(const n of i){if(!tY(n)){e.push(n);continue}const r=e.find(s=>n.value.routeConfig===s.value.routeConfig);void 0!==r?(r.children.push(...n.children),t.add(r)):e.push(n)}for(const n of t){const r=R6(n.children);e.push(new I_(n.value,r))}return e.filter(n=>!t.has(n))}function L6(i){let e=i;for(;e._sourceSegment;)e=e._sourceSegment;return e}function N6(i){let e=i,t=e._segmentIndexShift??0;for(;e._sourceSegment;)e=e._sourceSegment,t+=e._segmentIndexShift??0;return t-1}function U6(i){return i.data||{}}function z6(i){return i.resolve||{}}function H6(i){return"string"==typeof i.title||null===i.title}function UI(i){return sp(e=>{const t=i(e);return t?cn(t).pipe(et(()=>e)):no(e)})}const bw=new cr("ROUTES");let zI=(()=>{class i{constructor(t,n){this.injector=t,this.compiler=n,this.componentLoaders=new WeakMap,this.childrenLoaders=new WeakMap}loadComponent(t){if(this.componentLoaders.get(t))return this.componentLoaders.get(t);if(t._loadedComponent)return no(t._loadedComponent);this.onLoadStartListener&&this.onLoadStartListener(t);const n=sy(t.loadComponent()).pipe(et(G6),Dc(s=>{this.onLoadEndListener&&this.onLoadEndListener(t),t._loadedComponent=s}),AE(()=>{this.componentLoaders.delete(t)})),r=new gI(n,()=>new D).pipe(mI());return this.componentLoaders.set(t,r),r}loadChildren(t,n){if(this.childrenLoaders.get(n))return this.childrenLoaders.get(n);if(n._loadedRoutes)return no({routes:n._loadedRoutes,injector:n._loadedInjector});this.onLoadStartListener&&this.onLoadStartListener(n);const s=this.loadModuleFactoryOrRoutes(n.loadChildren).pipe(et(l=>{this.onLoadEndListener&&this.onLoadEndListener(n);let u,d,p=!1;Array.isArray(l)?d=l:(u=l.create(t).injector,d=YL(u.get(bw,[],Ii.Self|Ii.Optional)));return{routes:d.map(OI),injector:u}}),AE(()=>{this.childrenLoaders.delete(n)})),a=new gI(s,()=>new D).pipe(mI());return this.childrenLoaders.set(n,a),a}loadModuleFactoryOrRoutes(t){return sy(t()).pipe(et(G6),ma(r=>r instanceof pR||Array.isArray(r)?no(r):cn(this.compiler.compileModuleAsync(r))))}}return i.\u0275fac=function(t){return new(t||i)(ci(zc),ci(s8))},i.\u0275prov=Ue({token:i,factory:i.\u0275fac,providedIn:"root"}),i})();function G6(i){return function uY(i){return i&&"object"==typeof i&&"default"in i}(i)?i.default:i}let kE=(()=>{class i{get hasRequestedNavigation(){return 0!==this.navigationId}constructor(){this.currentNavigation=null,this.lastSuccessfulNavigation=null,this.events=new D,this.configLoader=To(zI),this.environmentInjector=To(Ur),this.urlSerializer=To(fM),this.rootContexts=To(yM),this.navigationId=0,this.afterPreactivation=()=>no(void 0),this.rootComponentType=null,this.configLoader.onLoadEndListener=r=>this.events.next(new ZX(r)),this.configLoader.onLoadStartListener=r=>this.events.next(new YX(r))}complete(){this.transitions?.complete()}handleNavigationRequest(t){const n=++this.navigationId;this.transitions?.next({...this.transitions.value,...t,id:n})}setupNavigations(t){return this.transitions=new rp({id:0,targetPageId:0,currentUrlTree:t.currentUrlTree,currentRawUrl:t.currentUrlTree,extractedUrl:t.urlHandlingStrategy.extract(t.currentUrlTree),urlAfterRedirects:t.urlHandlingStrategy.extract(t.currentUrlTree),rawUrl:t.currentUrlTree,extras:{},resolve:null,reject:null,promise:Promise.resolve(!0),source:gM,restoredState:null,currentSnapshot:t.routerState.snapshot,targetSnapshot:null,currentRouterState:t.routerState,targetRouterState:null,guards:{canActivateChecks:[],canDeactivateChecks:[]},guardsResult:null}),this.transitions.pipe(tu(n=>0!==n.id),et(n=>({...n,extractedUrl:t.urlHandlingStrategy.extract(n.rawUrl)})),sp(n=>{let r=!1,s=!1;return no(n).pipe(Dc(a=>{this.currentNavigation={id:a.id,initialUrl:a.rawUrl,extractedUrl:a.extractedUrl,trigger:a.source,extras:a.extras,previousNavigation:this.lastSuccessfulNavigation?{...this.lastSuccessfulNavigation,previousNavigation:null}:null}}),sp(a=>{const l=t.browserUrlTree.toString(),u=!t.navigated||a.extractedUrl.toString()!==l||l!==t.currentUrlTree.toString();if(!u&&"reload"!==(a.extras.onSameUrlNavigation??t.onSameUrlNavigation)){const p="";return this.events.next(new f6(a.id,t.serializeUrl(n.rawUrl),p,0)),t.rawUrlTree=a.rawUrl,a.resolve(null),Sa}if(t.urlHandlingStrategy.shouldProcessUrl(a.rawUrl))return q6(a.source)&&(t.browserUrlTree=a.extractedUrl),no(a).pipe(sp(p=>{const y=this.transitions?.getValue();return this.events.next(new MI(p.id,this.urlSerializer.serialize(p.extractedUrl),p.source,p.restoredState)),y!==this.transitions?.getValue()?Sa:Promise.resolve(p)}),function $K(i,e,t,n){return sp(r=>function WK(i,e,t,n,r){return new jK(i,e,t,n,r).apply()}(i,e,t,r.extractedUrl,n).pipe(et(s=>({...r,urlAfterRedirects:s}))))}(this.environmentInjector,this.configLoader,this.urlSerializer,t.config),Dc(p=>{this.currentNavigation={...this.currentNavigation,finalUrl:p.urlAfterRedirects},n.urlAfterRedirects=p.urlAfterRedirects}),function iY(i,e,t,n,r){return ma(s=>function YK(i,e,t,n,r,s,a="emptyOnly"){return new ZK(i,e,t,n,r,a,s).recognize().pipe(sp(l=>null===l?function KK(i){return new de(e=>e.error(i))}(new XK):no(l)))}(i,e,t,s.urlAfterRedirects,n.serialize(s.urlAfterRedirects),n,r).pipe(et(a=>({...s,targetSnapshot:a}))))}(this.environmentInjector,this.rootComponentType,t.config,this.urlSerializer,t.paramsInheritanceStrategy),Dc(p=>{if(n.targetSnapshot=p.targetSnapshot,"eager"===t.urlUpdateStrategy){if(!p.extras.skipLocationChange){const C=t.urlHandlingStrategy.merge(p.urlAfterRedirects,p.rawUrl);t.setBrowserUrl(C,p)}t.browserUrlTree=p.urlAfterRedirects}const y=new WX(p.id,this.urlSerializer.serialize(p.extractedUrl),this.urlSerializer.serialize(p.urlAfterRedirects),p.targetSnapshot);this.events.next(y)}));if(u&&t.urlHandlingStrategy.shouldProcessUrl(t.rawUrlTree)){const{id:p,extractedUrl:y,source:C,restoredState:O,extras:Q}=a,W=new MI(p,this.urlSerializer.serialize(y),C,O);this.events.next(W);const se=_6(y,this.rootComponentType).snapshot;return no(n={...a,targetSnapshot:se,urlAfterRedirects:y,extras:{...Q,skipLocationChange:!1,replaceUrl:!1}})}{const p="";return this.events.next(new f6(a.id,t.serializeUrl(n.extractedUrl),p,1)),t.rawUrlTree=a.rawUrl,a.resolve(null),Sa}}),Dc(a=>{const l=new jX(a.id,this.urlSerializer.serialize(a.extractedUrl),this.urlSerializer.serialize(a.urlAfterRedirects),a.targetSnapshot);this.events.next(l)}),et(a=>n={...a,guards:yK(a.targetSnapshot,a.currentSnapshot,this.rootContexts)}),function BK(i,e){return ma(t=>{const{targetSnapshot:n,currentSnapshot:r,guards:{canActivateChecks:s,canDeactivateChecks:a}}=t;return 0===a.length&&0===s.length?no({...t,guardsResult:!0}):function IK(i,e,t,n){return cn(i).pipe(ma(r=>function LK(i,e,t,n,r){const s=e&&e.routeConfig?e.routeConfig.canDeactivate:null;return s&&0!==s.length?no(s.map(l=>{const u=vM(e)??r,d=yw(l,u);return sy(function TK(i){return i&&wM(i.canDeactivate)}(d)?d.canDeactivate(i,e,t,n):u.runInContext(()=>d(i,e,t,n))).pipe(ry())})).pipe(vw()):no(!0)}(r.component,r.route,t,e,n)),ry(r=>!0!==r,!0))}(a,n,r,i).pipe(ma(l=>l&&function wK(i){return"boolean"==typeof i}(l)?function PK(i,e,t,n){return cn(e).pipe(ny(r=>uM(function FK(i,e){return null!==i&&e&&e(new JX(i)),no(!0)}(r.route.parent,n),function kK(i,e){return null!==i&&e&&e(new tK(i)),no(!0)}(r.route,n),function RK(i,e,t){const n=e[e.length-1],s=e.slice(0,e.length-1).reverse().map(a=>function vK(i){const e=i.routeConfig?i.routeConfig.canActivateChild:null;return e&&0!==e.length?{node:i,guards:e}:null}(a)).filter(a=>null!==a).map(a=>fE(()=>no(a.guards.map(u=>{const d=vM(a.node)??t,p=yw(u,d);return sy(function SK(i){return i&&wM(i.canActivateChild)}(p)?p.canActivateChild(n,i):d.runInContext(()=>p(n,i))).pipe(ry())})).pipe(vw())));return no(s).pipe(vw())}(i,r.path,t),function OK(i,e,t){const n=e.routeConfig?e.routeConfig.canActivate:null;if(!n||0===n.length)return no(!0);const r=n.map(s=>fE(()=>{const a=vM(e)??t,l=yw(s,a);return sy(function MK(i){return i&&wM(i.canActivate)}(l)?l.canActivate(e,i):a.runInContext(()=>l(e,i))).pipe(ry())}));return no(r).pipe(vw())}(i,r.route,t))),ry(r=>!0!==r,!0))}(n,s,i,e):no(l)),et(l=>({...t,guardsResult:l})))})}(this.environmentInjector,a=>this.events.next(a)),Dc(a=>{if(n.guardsResult=a.guardsResult,jv(a.guardsResult))throw x6(0,a.guardsResult);const l=new $X(a.id,this.urlSerializer.serialize(a.extractedUrl),this.urlSerializer.serialize(a.urlAfterRedirects),a.targetSnapshot,!!a.guardsResult);this.events.next(l)}),tu(a=>!!a.guardsResult||(t.restoreHistory(a),this.cancelNavigationTransition(a,"",3),!1)),UI(a=>{if(a.guards.canActivateChecks.length)return no(a).pipe(Dc(l=>{const u=new XX(l.id,this.urlSerializer.serialize(l.extractedUrl),this.urlSerializer.serialize(l.urlAfterRedirects),l.targetSnapshot);this.events.next(u)}),sp(l=>{let u=!1;return no(l).pipe(function rY(i,e){return ma(t=>{const{targetSnapshot:n,guards:{canActivateChecks:r}}=t;if(!r.length)return no(t);let s=0;return cn(r).pipe(ny(a=>function sY(i,e,t,n){const r=i.routeConfig,s=i._resolve;return void 0!==r?.title&&!H6(r)&&(s[hM]=r.title),function oY(i,e,t,n){const r=function aY(i){return[...Object.keys(i),...Object.getOwnPropertySymbols(i)]}(i);if(0===r.length)return no({});const s={};return cn(r).pipe(ma(a=>function lY(i,e,t,n){const r=vM(e)??n,s=yw(i,r);return sy(s.resolve?s.resolve(e,t):r.runInContext(()=>s(e,t)))}(i[a],e,t,n).pipe(ry(),Dc(l=>{s[a]=l}))),_I(1),XL(s),B_(a=>RI(a)?Sa:dw(a)))}(s,i,e,n).pipe(et(a=>(i._resolvedData=a,i.data=y6(i,t).resolve,r&&H6(r)&&(i.data[hM]=r.title),null)))}(a.route,n,i,e)),Dc(()=>s++),_I(1),ma(a=>s===r.length?no(t):Sa))})}(t.paramsInheritanceStrategy,this.environmentInjector),Dc({next:()=>u=!0,complete:()=>{u||(t.restoreHistory(l),this.cancelNavigationTransition(l,"",2))}}))}),Dc(l=>{const u=new KX(l.id,this.urlSerializer.serialize(l.extractedUrl),this.urlSerializer.serialize(l.urlAfterRedirects),l.targetSnapshot);this.events.next(u)}))}),UI(a=>{const l=u=>{const d=[];u.routeConfig?.loadComponent&&!u.routeConfig._loadedComponent&&d.push(this.configLoader.loadComponent(u.routeConfig).pipe(Dc(p=>{u.component=p}),et(()=>{})));for(const p of u.children)d.push(...l(p));return d};return AI(l(a.targetSnapshot.root)).pipe(pE(),nu(1))}),UI(()=>this.afterPreactivation()),et(a=>{const l=function lK(i,e,t){const n=_M(i,e._root,t?t._root:void 0);return new g6(n,e)}(t.routeReuseStrategy,a.targetSnapshot,a.currentRouterState);return n={...a,targetRouterState:l}}),Dc(a=>{t.currentUrlTree=a.urlAfterRedirects,t.rawUrlTree=t.urlHandlingStrategy.merge(a.urlAfterRedirects,a.rawUrl),t.routerState=a.targetRouterState,"deferred"===t.urlUpdateStrategy&&(a.extras.skipLocationChange||t.setBrowserUrl(t.rawUrlTree,a),t.browserUrlTree=a.urlAfterRedirects)}),((i,e,t)=>et(n=>(new _K(e,n.targetRouterState,n.currentRouterState,t).activate(i),n)))(this.rootContexts,t.routeReuseStrategy,a=>this.events.next(a)),Dc({next:a=>{r=!0,this.lastSuccessfulNavigation=this.currentNavigation,t.navigated=!0,this.events.next(new $v(a.id,this.urlSerializer.serialize(a.extractedUrl),this.urlSerializer.serialize(t.currentUrlTree))),t.titleStrategy?.updateTitle(a.targetRouterState.snapshot),a.resolve(!0)},complete:()=>{r=!0}}),AE(()=>{r||s||this.cancelNavigationTransition(n,"",1),this.currentNavigation?.id===n.id&&(this.currentNavigation=null)}),B_(a=>{if(s=!0,M6(a)){C6(a)||(t.navigated=!0,t.restoreHistory(n,!0));const l=new wE(n.id,this.urlSerializer.serialize(n.extractedUrl),a.message,a.cancellationCode);if(this.events.next(l),C6(a)){const u=t.urlHandlingStrategy.merge(a.url,t.rawUrlTree),d={skipLocationChange:n.extras.skipLocationChange,replaceUrl:"eager"===t.urlUpdateStrategy||q6(n.source)};t.scheduleNavigation(u,gM,null,d,{resolve:n.resolve,reject:n.reject,promise:n.promise})}else n.resolve(!1)}else{t.restoreHistory(n,!0);const l=new p6(n.id,this.urlSerializer.serialize(n.extractedUrl),a,n.targetSnapshot??void 0);this.events.next(l);try{n.resolve(t.errorHandler(a))}catch(u){n.reject(u)}}return Sa}))}))}cancelNavigationTransition(t,n,r){const s=new wE(t.id,this.urlSerializer.serialize(t.extractedUrl),n,r);this.events.next(s),t.resolve(!1)}}return i.\u0275fac=function(t){return new(t||i)},i.\u0275prov=Ue({token:i,factory:i.\u0275fac,providedIn:"root"}),i})();function q6(i){return i!==gM}let Q6=(()=>{class i{buildTitle(t){let n,r=t.root;for(;void 0!==r;)n=this.getResolvedTitleForRoute(r)??n,r=r.children.find(s=>s.outlet===da);return n}getResolvedTitleForRoute(t){return t.data[hM]}}return i.\u0275fac=function(t){return new(t||i)},i.\u0275prov=Ue({token:i,factory:function(){return To(hY)},providedIn:"root"}),i})(),hY=(()=>{class i extends Q6{constructor(t){super(),this.title=t}updateTitle(t){const n=this.buildTitle(t);void 0!==n&&this.title.setTitle(n)}}return i.\u0275fac=function(t){return new(t||i)(ci(CL))},i.\u0275prov=Ue({token:i,factory:i.\u0275fac,providedIn:"root"}),i})(),dY=(()=>{class i{}return i.\u0275fac=function(t){return new(t||i)},i.\u0275prov=Ue({token:i,factory:function(){return To(pY)},providedIn:"root"}),i})();class fY{shouldDetach(e){return!1}store(e,t){}shouldAttach(e){return!1}retrieve(e){return null}shouldReuseRoute(e,t){return e.routeConfig===t.routeConfig}}let pY=(()=>{class i extends fY{}return i.\u0275fac=function(){let e;return function(n){return(e||(e=Ka(i)))(n||i)}}(),i.\u0275prov=Ue({token:i,factory:i.\u0275fac,providedIn:"root"}),i})();const FE=new cr("",{providedIn:"root",factory:()=>({})});let mY=(()=>{class i{}return i.\u0275fac=function(t){return new(t||i)},i.\u0275prov=Ue({token:i,factory:function(){return To(gY)},providedIn:"root"}),i})(),gY=(()=>{class i{shouldProcessUrl(t){return!0}extract(t){return t}merge(t,n){return t}}return i.\u0275fac=function(t){return new(t||i)},i.\u0275prov=Ue({token:i,factory:i.\u0275fac,providedIn:"root"}),i})();function _Y(i){throw i}function yY(i,e,t){return e.parse("/")}const vY={paths:"exact",fragment:"ignored",matrixParams:"ignored",queryParams:"exact"},bY={paths:"subset",fragment:"ignored",matrixParams:"ignored",queryParams:"subset"};let Lp=(()=>{class i{get navigationId(){return this.navigationTransitions.navigationId}get browserPageId(){return this.location.getState()?.\u0275routerPageId}get events(){return this.navigationTransitions.events}constructor(){this.disposed=!1,this.currentPageId=0,this.console=To(MQ),this.isNgZoneEnabled=!1,this.options=To(FE,{optional:!0})||{},this.errorHandler=this.options.errorHandler||_Y,this.malformedUriErrorHandler=this.options.malformedUriErrorHandler||yY,this.navigated=!1,this.lastSuccessfulId=-1,this.urlHandlingStrategy=To(mY),this.routeReuseStrategy=To(dY),this.urlCreationStrategy=To(sK),this.titleStrategy=To(Q6),this.onSameUrlNavigation=this.options.onSameUrlNavigation||"ignore",this.paramsInheritanceStrategy=this.options.paramsInheritanceStrategy||"emptyOnly",this.urlUpdateStrategy=this.options.urlUpdateStrategy||"deferred",this.canceledNavigationResolution=this.options.canceledNavigationResolution||"replace",this.config=YL(To(bw,{optional:!0})??[]),this.navigationTransitions=To(kE),this.urlSerializer=To(fM),this.location=To(eM),this.isNgZoneEnabled=To(mo)instanceof mo&&mo.isInAngularZone(),this.resetConfig(this.config),this.currentUrlTree=new Qv,this.rawUrlTree=this.currentUrlTree,this.browserUrlTree=this.currentUrlTree,this.routerState=_6(this.currentUrlTree,null),this.navigationTransitions.setupNavigations(this).subscribe(t=>{this.lastSuccessfulId=t.id,this.currentPageId=t.targetPageId},t=>{this.console.warn(`Unhandled Navigation Error: ${t}`)})}resetRootComponentType(t){this.routerState.root.component=t,this.navigationTransitions.rootComponentType=t}initialNavigation(){if(this.setUpLocationChangeListener(),!this.navigationTransitions.hasRequestedNavigation){const t=this.location.getState();this.navigateToSyncWithBrowser(this.location.path(!0),gM,t)}}setUpLocationChangeListener(){this.locationSubscription||(this.locationSubscription=this.location.subscribe(t=>{const n="popstate"===t.type?"popstate":"hashchange";"popstate"===n&&setTimeout(()=>{this.navigateToSyncWithBrowser(t.url,n,t.state)},0)}))}navigateToSyncWithBrowser(t,n,r){const s={replaceUrl:!0},a=r?.navigationId?r:null;if(r){const u={...r};delete u.navigationId,delete u.\u0275routerPageId,0!==Object.keys(u).length&&(s.state=u)}const l=this.parseUrl(t);this.scheduleNavigation(l,n,a,s)}get url(){return this.serializeUrl(this.currentUrlTree)}getCurrentNavigation(){return this.navigationTransitions.currentNavigation}resetConfig(t){this.config=t.map(OI),this.navigated=!1,this.lastSuccessfulId=-1}ngOnDestroy(){this.dispose()}dispose(){this.navigationTransitions.complete(),this.locationSubscription&&(this.locationSubscription.unsubscribe(),this.locationSubscription=void 0),this.disposed=!0}createUrlTree(t,n={}){const{relativeTo:r,queryParams:s,fragment:a,queryParamsHandling:l,preserveFragment:u}=n,d=u?this.currentUrlTree.fragment:a;let p=null;switch(l){case"merge":p={...this.currentUrlTree.queryParams,...s};break;case"preserve":p=this.currentUrlTree.queryParams;break;default:p=s||null}return null!==p&&(p=this.removeEmptyProps(p)),this.urlCreationStrategy.createUrlTree(r,this.routerState,this.currentUrlTree,t,p,d??null)}navigateByUrl(t,n={skipLocationChange:!1}){const r=jv(t)?t:this.parseUrl(t),s=this.urlHandlingStrategy.merge(r,this.rawUrlTree);return this.scheduleNavigation(s,gM,null,n)}navigate(t,n={skipLocationChange:!1}){return function xY(i){for(let e=0;e{const s=t[r];return null!=s&&(n[r]=s),n},{})}scheduleNavigation(t,n,r,s,a){if(this.disposed)return Promise.resolve(!1);let l,u,d,p;return a?(l=a.resolve,u=a.reject,d=a.promise):d=new Promise((y,C)=>{l=y,u=C}),p="computed"===this.canceledNavigationResolution?r&&r.\u0275routerPageId?r.\u0275routerPageId:s.replaceUrl||s.skipLocationChange?this.browserPageId??0:(this.browserPageId??0)+1:0,this.navigationTransitions.handleNavigationRequest({targetPageId:p,source:n,restoredState:r,currentUrlTree:this.currentUrlTree,currentRawUrl:this.currentUrlTree,rawUrl:t,extras:s,resolve:l,reject:u,promise:d,currentSnapshot:this.routerState.snapshot,currentRouterState:this.routerState}),d.catch(y=>Promise.reject(y))}setBrowserUrl(t,n){const r=this.urlSerializer.serialize(t),s={...n.extras.state,...this.generateNgRouterState(n.id,n.targetPageId)};this.location.isCurrentPathEqualTo(r)||n.extras.replaceUrl?this.location.replaceState(r,"",s):this.location.go(r,"",s)}restoreHistory(t,n=!1){if("computed"===this.canceledNavigationResolution){const r=this.currentPageId-t.targetPageId;"popstate"!==t.source&&"eager"!==this.urlUpdateStrategy&&this.currentUrlTree!==this.getCurrentNavigation()?.finalUrl||0===r?this.currentUrlTree===this.getCurrentNavigation()?.finalUrl&&0===r&&(this.resetState(t),this.browserUrlTree=t.currentUrlTree,this.resetUrlToCurrentUrlTree()):this.location.historyGo(r)}else"replace"===this.canceledNavigationResolution&&(n&&this.resetState(t),this.resetUrlToCurrentUrlTree())}resetState(t){this.routerState=t.currentRouterState,this.currentUrlTree=t.currentUrlTree,this.rawUrlTree=this.urlHandlingStrategy.merge(this.currentUrlTree,t.rawUrl)}resetUrlToCurrentUrlTree(){this.location.replaceState(this.urlSerializer.serialize(this.rawUrlTree),"",this.generateNgRouterState(this.lastSuccessfulId,this.currentPageId))}generateNgRouterState(t,n){return"computed"===this.canceledNavigationResolution?{navigationId:t,\u0275routerPageId:n}:{navigationId:t}}}return i.\u0275fac=function(t){return new(t||i)},i.\u0275prov=Ue({token:i,factory:i.\u0275fac,providedIn:"root"}),i})(),MM=(()=>{class i{constructor(t,n,r,s,a,l){this.router=t,this.route=n,this.tabIndexAttribute=r,this.renderer=s,this.el=a,this.locationStrategy=l,this._preserveFragment=!1,this._skipLocationChange=!1,this._replaceUrl=!1,this.href=null,this.commands=null,this.onChanges=new D;const u=a.nativeElement.tagName;this.isAnchorElement="A"===u||"AREA"===u,this.isAnchorElement?this.subscription=t.events.subscribe(d=>{d instanceof $v&&this.updateHref()}):this.setTabIndexIfNotOnNativeEl("0")}set preserveFragment(t){this._preserveFragment=uw(t)}get preserveFragment(){return this._preserveFragment}set skipLocationChange(t){this._skipLocationChange=uw(t)}get skipLocationChange(){return this._skipLocationChange}set replaceUrl(t){this._replaceUrl=uw(t)}get replaceUrl(){return this._replaceUrl}setTabIndexIfNotOnNativeEl(t){null!=this.tabIndexAttribute||this.isAnchorElement||this.applyAttributeValue("tabindex",t)}ngOnChanges(t){this.isAnchorElement&&this.updateHref(),this.onChanges.next(this)}set routerLink(t){null!=t?(this.commands=Array.isArray(t)?t:[t],this.setTabIndexIfNotOnNativeEl("0")):(this.commands=null,this.setTabIndexIfNotOnNativeEl(null))}onClick(t,n,r,s,a){return!!(null===this.urlTree||this.isAnchorElement&&(0!==t||n||r||s||a||"string"==typeof this.target&&"_self"!=this.target))||(this.router.navigateByUrl(this.urlTree,{skipLocationChange:this.skipLocationChange,replaceUrl:this.replaceUrl,state:this.state}),!this.isAnchorElement)}ngOnDestroy(){this.subscription?.unsubscribe()}updateHref(){this.href=null!==this.urlTree&&this.locationStrategy?this.locationStrategy?.prepareExternalUrl(this.router.serializeUrl(this.urlTree)):null;const t=null===this.href?null:function Av(i,e,t){return function pv(i,e){return"src"===e&&("embed"===i||"frame"===i||"iframe"===i||"media"===i||"script"===i)||"href"===e&&("base"===i||"link"===i)?Dx:yd}(e,t)(i)}(this.href,this.el.nativeElement.tagName.toLowerCase(),"href");this.applyAttributeValue("href",t)}applyAttributeValue(t,n){const r=this.renderer,s=this.el.nativeElement;null!==n?r.setAttribute(s,t,n):r.removeAttribute(s,t)}get urlTree(){return null===this.commands?null:this.router.createUrlTree(this.commands,{relativeTo:void 0!==this.relativeTo?this.relativeTo:this.route,queryParams:this.queryParams,fragment:this.fragment,queryParamsHandling:this.queryParamsHandling,preserveFragment:this.preserveFragment})}}return i.\u0275fac=function(t){return new(t||i)(wt(Lp),wt(_w),Oh("tabindex"),wt(as),wt(Cs),wt(qv))},i.\u0275dir=Oi({type:i,selectors:[["","routerLink",""]],hostVars:1,hostBindings:function(t,n){1&t&&Fi("click",function(s){return n.onClick(s.button,s.ctrlKey,s.shiftKey,s.altKey,s.metaKey)}),2&t&&Ea("target",n.target)},inputs:{target:"target",queryParams:"queryParams",fragment:"fragment",queryParamsHandling:"queryParamsHandling",state:"state",relativeTo:"relativeTo",preserveFragment:"preserveFragment",skipLocationChange:"skipLocationChange",replaceUrl:"replaceUrl",routerLink:"routerLink"},standalone:!0,features:[bc]}),i})();class j6{}let MY=(()=>{class i{constructor(t,n,r,s,a){this.router=t,this.injector=r,this.preloadingStrategy=s,this.loader=a}setUpPreloading(){this.subscription=this.router.events.pipe(tu(t=>t instanceof $v),ny(()=>this.preload())).subscribe(()=>{})}preload(){return this.processRoutes(this.injector,this.router.config)}ngOnDestroy(){this.subscription&&this.subscription.unsubscribe()}processRoutes(t,n){const r=[];for(const s of n){s.providers&&!s._injector&&(s._injector=OT(s.providers,t,`Route: ${s.path}`));const a=s._injector??t,l=s._loadedInjector??a;s.loadChildren&&!s._loadedRoutes&&void 0===s.canLoad||s.loadComponent&&!s._loadedComponent?r.push(this.preloadConfig(a,s)):(s.children||s._loadedRoutes)&&r.push(this.processRoutes(l,s.children??s._loadedRoutes))}return cn(r).pipe(ba())}preloadConfig(t,n){return this.preloadingStrategy.preload(n,()=>{let r;r=n.loadChildren&&void 0===n.canLoad?this.loader.loadChildren(t,n):no(null);const s=r.pipe(ma(a=>null===a?no(void 0):(n._loadedRoutes=a.routes,n._loadedInjector=a.injector,this.processRoutes(a.injector??t,a.routes))));return n.loadComponent&&!n._loadedComponent?cn([s,this.loader.loadComponent(n)]).pipe(ba()):s})}}return i.\u0275fac=function(t){return new(t||i)(ci(Lp),ci(s8),ci(Ur),ci(j6),ci(zI))},i.\u0275prov=Ue({token:i,factory:i.\u0275fac,providedIn:"root"}),i})();const HI=new cr("");let $6=(()=>{class i{constructor(t,n,r,s,a={}){this.urlSerializer=t,this.transitions=n,this.viewportScroller=r,this.zone=s,this.options=a,this.lastId=0,this.lastSource="imperative",this.restoredId=0,this.store={},a.scrollPositionRestoration=a.scrollPositionRestoration||"disabled",a.anchorScrolling=a.anchorScrolling||"disabled"}init(){"disabled"!==this.options.scrollPositionRestoration&&this.viewportScroller.setHistoryScrollRestoration("manual"),this.routerEventsSubscription=this.createScrollEvents(),this.scrollEventsSubscription=this.consumeScrollEvents()}createScrollEvents(){return this.transitions.events.subscribe(t=>{t instanceof MI?(this.store[this.lastId]=this.viewportScroller.getScrollPosition(),this.lastSource=t.navigationTrigger,this.restoredId=t.restoredState?t.restoredState.navigationId:0):t instanceof $v&&(this.lastId=t.id,this.scheduleScrollEvent(t,this.urlSerializer.parse(t.urlAfterRedirects).fragment))})}consumeScrollEvents(){return this.transitions.events.subscribe(t=>{t instanceof A6&&(t.position?"top"===this.options.scrollPositionRestoration?this.viewportScroller.scrollToPosition([0,0]):"enabled"===this.options.scrollPositionRestoration&&this.viewportScroller.scrollToPosition(t.position):t.anchor&&"enabled"===this.options.anchorScrolling?this.viewportScroller.scrollToAnchor(t.anchor):"disabled"!==this.options.scrollPositionRestoration&&this.viewportScroller.scrollToPosition([0,0]))})}scheduleScrollEvent(t,n){this.zone.runOutsideAngular(()=>{setTimeout(()=>{this.zone.run(()=>{this.transitions.events.next(new A6(t,"popstate"===this.lastSource?this.store[this.restoredId]:null,n))})},0)})}ngOnDestroy(){this.routerEventsSubscription?.unsubscribe(),this.scrollEventsSubscription?.unsubscribe()}}return i.\u0275fac=function(t){Qd()},i.\u0275prov=Ue({token:i,factory:i.\u0275fac}),i})();function Xv(i,e){return{\u0275kind:i,\u0275providers:e}}function K6(){const i=To(zc);return e=>{const t=i.get(cw);if(e!==t.components[0])return;const n=i.get(Lp),r=i.get(Y6);1===i.get(GI)&&n.initialNavigation(),i.get(Z6,null,Ii.Optional)?.setUpPreloading(),i.get(HI,null,Ii.Optional)?.init(),n.resetRootComponentType(t.componentTypes[0]),r.closed||(r.next(),r.unsubscribe())}}const Y6=new cr("",{factory:()=>new D}),GI=new cr("",{providedIn:"root",factory:()=>1});const Z6=new cr("");function BY(i){return Xv(0,[{provide:Z6,useExisting:MY},{provide:j6,useExisting:i}])}const J6=new cr("ROUTER_FORROOT_GUARD"),IY=[eM,{provide:fM,useClass:yI},Lp,yM,{provide:_w,useFactory:function X6(i){return i.routerState.root},deps:[Lp]},zI,[]];function PY(){return new d8("Router",Lp)}let e7=(()=>{class i{constructor(t){}static forRoot(t,n){return{ngModule:i,providers:[IY,[],{provide:bw,multi:!0,useValue:t},{provide:J6,useFactory:RY,deps:[[Lp,new Ld,new _A]]},{provide:FE,useValue:n||{}},n?.useHash?{provide:qv,useClass:dW}:{provide:qv,useClass:O8},{provide:HI,useFactory:()=>{const i=To(Bj),e=To(mo),t=To(FE),n=To(kE),r=To(fM);return t.scrollOffset&&i.setOffset(t.scrollOffset),new $6(r,n,i,e,t)}},n?.preloadingStrategy?BY(n.preloadingStrategy).\u0275providers:[],{provide:d8,multi:!0,useFactory:PY},n?.initialNavigation?LY(n):[],[{provide:t7,useFactory:K6},{provide:r8,multi:!0,useExisting:t7}]]}}static forChild(t){return{ngModule:i,providers:[{provide:bw,multi:!0,useValue:t}]}}}return i.\u0275fac=function(t){return new(t||i)(ci(J6,8))},i.\u0275mod=ia({type:i}),i.\u0275inj=ft({imports:[kI]}),i})();function RY(i){return"guarded"}function LY(i){return["disabled"===i.initialNavigation?Xv(3,[{provide:HT,multi:!0,useFactory:()=>{const e=To(Lp);return()=>{e.setUpLocationChangeListener()}}},{provide:GI,useValue:2}]).\u0275providers:[],"enabledBlocking"===i.initialNavigation?Xv(2,[{provide:GI,useValue:0},{provide:HT,multi:!0,deps:[zc],useFactory:e=>{const t=e.get(uW,Promise.resolve());return()=>t.then(()=>new Promise(r=>{const s=e.get(Lp),a=e.get(Y6);(function n(r){e.get(Lp).events.pipe(tu(a=>a instanceof $v||a instanceof wE||a instanceof p6),et(a=>a instanceof $v||a instanceof wE&&(0===a.code||1===a.code)&&null),tu(a=>null!==a),nu(1)).subscribe(()=>{r()})})(()=>{r(!0)}),e.get(kE).afterPreactivation=()=>(r(!0),a.closed?no(void 0):a),s.initialNavigation()}))}}]).\u0275providers:[]]}const t7=new cr("");class TM{}Wt(TM,"\u0275fac",function(e){return new(e||TM)}),Wt(TM,"\u0275cmp",Fr({type:TM,selectors:[["app-root"]],decls:1,vars:0,template:function(e,t){1&e&&Pr(0,"router-outlet")},dependencies:[PI]}));var n7=Me(9542),i7=(Me(2253),Me(3675),Me(6458),Me(629),Me(8189),Me(5906),Me(9665)),UY=(Me(9622),Me(7825),Me(8538));Me(2487),Me(4074),Me(3414);var EM,t0={Linear:{None:function(i){return i}},Quadratic:{In:function(i){return i*i},Out:function(i){return i*(2-i)},InOut:function(i){return(i*=2)<1?.5*i*i:-.5*(--i*(i-2)-1)}},Cubic:{In:function(i){return i*i*i},Out:function(i){return--i*i*i+1},InOut:function(i){return(i*=2)<1?.5*i*i*i:.5*((i-=2)*i*i+2)}},Quartic:{In:function(i){return i*i*i*i},Out:function(i){return 1- --i*i*i*i},InOut:function(i){return(i*=2)<1?.5*i*i*i*i:-.5*((i-=2)*i*i*i-2)}},Quintic:{In:function(i){return i*i*i*i*i},Out:function(i){return--i*i*i*i*i+1},InOut:function(i){return(i*=2)<1?.5*i*i*i*i*i:.5*((i-=2)*i*i*i*i+2)}},Sinusoidal:{In:function(i){return 1-Math.cos(i*Math.PI/2)},Out:function(i){return Math.sin(i*Math.PI/2)},InOut:function(i){return.5*(1-Math.cos(Math.PI*i))}},Exponential:{In:function(i){return 0===i?0:Math.pow(1024,i-1)},Out:function(i){return 1===i?1:1-Math.pow(2,-10*i)},InOut:function(i){return 0===i?0:1===i?1:(i*=2)<1?.5*Math.pow(1024,i-1):.5*(2-Math.pow(2,-10*(i-1)))}},Circular:{In:function(i){return 1-Math.sqrt(1-i*i)},Out:function(i){return Math.sqrt(1- --i*i)},InOut:function(i){return(i*=2)<1?-.5*(Math.sqrt(1-i*i)-1):.5*(Math.sqrt(1-(i-=2)*i)+1)}},Elastic:{In:function(i){return 0===i?0:1===i?1:-Math.pow(2,10*(i-1))*Math.sin(5*(i-1.1)*Math.PI)},Out:function(i){return 0===i?0:1===i?1:Math.pow(2,-10*i)*Math.sin(5*(i-.1)*Math.PI)+1},InOut:function(i){return 0===i?0:1===i?1:(i*=2)<1?-.5*Math.pow(2,10*(i-1))*Math.sin(5*(i-1.1)*Math.PI):.5*Math.pow(2,-10*(i-1))*Math.sin(5*(i-1.1)*Math.PI)+1}},Back:{In:function(i){var e=1.70158;return i*i*((e+1)*i-e)},Out:function(i){var e=1.70158;return--i*i*((e+1)*i+e)+1},InOut:function(i){var e=2.5949095;return(i*=2)<1?i*i*((e+1)*i-e)*.5:.5*((i-=2)*i*((e+1)*i+e)+2)}},Bounce:{In:function(i){return 1-t0.Bounce.Out(1-i)},Out:function(i){return i<1/2.75?7.5625*i*i:i<2/2.75?7.5625*(i-=1.5/2.75)*i+.75:i<2.5/2.75?7.5625*(i-=2.25/2.75)*i+.9375:7.5625*(i-=2.625/2.75)*i+.984375},InOut:function(i){return i<.5?.5*t0.Bounce.In(2*i):.5*t0.Bounce.Out(2*i-1)+.5}}};EM=typeof self>"u"&&typeof process<"u"&&process.hrtime?function(){var i=process.hrtime();return 1e3*i[0]+i[1]/1e6}:typeof self<"u"&&void 0!==self.performance&&void 0!==self.performance.now?self.performance.now.bind(self.performance):void 0!==Date.now?Date.now:function(){return(new Date).getTime()};var i,Kv=EM,r7=function(){function i(){this._tweens={},this._tweensAddedDuringUpdate={}}return i.prototype.getAll=function(){var e=this;return Object.keys(this._tweens).map(function(t){return e._tweens[t]})},i.prototype.removeAll=function(){this._tweens={}},i.prototype.add=function(e){this._tweens[e.getId()]=e,this._tweensAddedDuringUpdate[e.getId()]=e},i.prototype.remove=function(e){delete this._tweens[e.getId()],delete this._tweensAddedDuringUpdate[e.getId()]},i.prototype.update=function(e,t){void 0===e&&(e=Kv()),void 0===t&&(t=!1);var n=Object.keys(this._tweens);if(0===n.length)return!1;for(;n.length>0;){this._tweensAddedDuringUpdate={};for(var r=0;r1?s(i[t],i[t-1],t-n):s(i[r],i[r+1>t?t:r+1],n-r)},Bezier:function(i,e){for(var t=0,n=i.length-1,r=Math.pow,s=ww.Utils.Bernstein,a=0;a<=n;a++)t+=r(1-e,n-a)*r(e,a)*i[a]*s(n,a);return t},CatmullRom:function(i,e){var t=i.length-1,n=t*e,r=Math.floor(n),s=ww.Utils.CatmullRom;return i[0]===i[t]?(e<0&&(r=Math.floor(n=t*(1+e))),s(i[(r-1+t)%t],i[r],i[(r+1)%t],i[(r+2)%t],n-r)):e<0?i[0]-(s(i[0],i[0],i[1],i[1],-n)-i[0]):e>1?i[t]-(s(i[t],i[t],i[t-1],i[t-1],n-t)-i[t]):s(i[r?r-1:0],i[r],i[t1;n--)t*=n;return i[e]=t,t}),CatmullRom:function(i,e,t,n,r){var s=.5*(t-i),a=.5*(n-e),l=r*r;return(2*e-2*t+s+a)*(r*l)+(-3*e+3*t-2*s-a)*l+s*r+e}}},QI=function(){function i(){}return i.nextId=function(){return i._nextId++},i._nextId=0,i}(),s7=new r7,Tf=function(){function i(e,t){void 0===t&&(t=s7),this._object=e,this._group=t,this._isPaused=!1,this._pauseStart=0,this._valuesStart={},this._valuesEnd={},this._valuesStartRepeat={},this._duration=1e3,this._initialRepeat=0,this._repeat=0,this._yoyo=!1,this._isPlaying=!1,this._reversed=!1,this._delayTime=0,this._startTime=0,this._easingFunction=t0.Linear.None,this._interpolationFunction=ww.Linear,this._chainedTweens=[],this._onStartCallbackFired=!1,this._id=QI.nextId(),this._isChainStopped=!1,this._goToEnd=!1}return i.prototype.getId=function(){return this._id},i.prototype.isPlaying=function(){return this._isPlaying},i.prototype.isPaused=function(){return this._isPaused},i.prototype.to=function(e,t){return this._valuesEnd=Object.create(e),void 0!==t&&(this._duration=t),this},i.prototype.duration=function(e){return this._duration=e,this},i.prototype.start=function(e){if(this._isPlaying)return this;if(this._group&&this._group.add(this),this._repeat=this._initialRepeat,this._reversed)for(var t in this._reversed=!1,this._valuesStartRepeat)this._swapEndStartRepeatValues(t),this._valuesStart[t]=this._valuesStartRepeat[t];return this._isPlaying=!0,this._isPaused=!1,this._onStartCallbackFired=!1,this._isChainStopped=!1,this._startTime=void 0!==e?"string"==typeof e?Kv()+parseFloat(e):e:Kv(),this._startTime+=this._delayTime,this._setupProperties(this._object,this._valuesStart,this._valuesEnd,this._valuesStartRepeat),this},i.prototype._setupProperties=function(e,t,n,r){for(var s in n){var a=e[s],l=Array.isArray(a),u=l?"array":typeof a,d=!l&&Array.isArray(n[s]);if("undefined"!==u&&"function"!==u){if(d){var p=n[s];if(0===p.length)continue;p=p.map(this._handleRelativeValue.bind(this,a)),n[s]=[a].concat(p)}if("object"!==u&&!l||!a||d)typeof t[s]>"u"&&(t[s]=a),l||(t[s]*=1),r[s]=d?n[s].slice().reverse():t[s]||0;else{for(var y in t[s]=l?[]:{},a)t[s][y]=a[y];r[s]=l?[]:{},this._setupProperties(a,t[s],n[s],r[s])}}}},i.prototype.stop=function(){return this._isChainStopped||(this._isChainStopped=!0,this.stopChainedTweens()),this._isPlaying?(this._group&&this._group.remove(this),this._isPlaying=!1,this._isPaused=!1,this._onStopCallback&&this._onStopCallback(this._object),this):this},i.prototype.end=function(){return this._goToEnd=!0,this.update(1/0),this},i.prototype.pause=function(e){return void 0===e&&(e=Kv()),this._isPaused||!this._isPlaying||(this._isPaused=!0,this._pauseStart=e,this._group&&this._group.remove(this)),this},i.prototype.resume=function(e){return void 0===e&&(e=Kv()),this._isPaused&&this._isPlaying?(this._isPaused=!1,this._startTime+=e-this._pauseStart,this._pauseStart=0,this._group&&this._group.add(this),this):this},i.prototype.stopChainedTweens=function(){for(var e=0,t=this._chainedTweens.length;ethis._startTime+this._duration)return!1;t&&this.start(e)}if(this._goToEnd=!1,e1?1:r);if(this._updateProperties(this._object,this._valuesStart,this._valuesEnd,a),this._onUpdateCallback&&this._onUpdateCallback(this._object,r),1===r){if(this._repeat>0){for(n in isFinite(this._repeat)&&this._repeat--,this._valuesStartRepeat)!this._yoyo&&"string"==typeof this._valuesEnd[n]&&(this._valuesStartRepeat[n]=this._valuesStartRepeat[n]+parseFloat(this._valuesEnd[n])),this._yoyo&&this._swapEndStartRepeatValues(n),this._valuesStart[n]=this._valuesStartRepeat[n];return this._yoyo&&(this._reversed=!this._reversed),this._startTime=void 0!==this._repeatDelayTime?e+this._repeatDelayTime:e+this._delayTime,this._onRepeatCallback&&this._onRepeatCallback(this._object),!0}this._onCompleteCallback&&this._onCompleteCallback(this._object);for(var l=0,u=this._chainedTweens.length;l>8&255]+Xd[i>>16&255]+Xd[i>>24&255]+"-"+Xd[255&e]+Xd[e>>8&255]+"-"+Xd[e>>16&15|64]+Xd[e>>24&255]+"-"+Xd[63&t|128]+Xd[t>>8&255]+"-"+Xd[t>>16&255]+Xd[t>>24&255]+Xd[255&n]+Xd[n>>8&255]+Xd[n>>16&255]+Xd[n>>24&255]).toLowerCase()}function Du(i,e,t){return Math.max(e,Math.min(t,i))}function sP(i,e){return(i%e+e)%e}function OM(i,e,t){return(1-t)*i+t*e}function oP(i){return 0==(i&i-1)&&0!==i}function q7(i){return Math.pow(2,Math.ceil(Math.log(i)/Math.LN2))}function HE(i){return Math.pow(2,Math.floor(Math.log(i)/Math.LN2))}function k_(i,e){switch(e.constructor){case Float32Array:return i;case Uint16Array:return i/65535;case Uint8Array:return i/255;case Int16Array:return Math.max(i/32767,-1);case Int8Array:return Math.max(i/127,-1);default:throw new Error("Invalid component type.")}}function lc(i,e){switch(e.constructor){case Float32Array:return i;case Uint16Array:return Math.round(65535*i);case Uint8Array:return Math.round(255*i);case Int16Array:return Math.round(32767*i);case Int8Array:return Math.round(127*i);default:throw new Error("Invalid component type.")}}var VE=Object.freeze({__proto__:null,DEG2RAD:ob,RAD2DEG:FM,ceilPowerOfTwo:q7,clamp:Du,damp:function WZ(i,e,t,n){return OM(i,e,1-Math.exp(-t*n))},degToRad:function eJ(i){return i*ob},denormalize:k_,euclideanModulo:sP,floorPowerOfTwo:HE,generateUUID:Hp,inverseLerp:function QZ(i,e,t){return i!==e?(t-i)/(e-i):0},isPowerOfTwo:oP,lerp:OM,mapLinear:function qZ(i,e,t,n,r){return n+(i-e)*(r-n)/(t-e)},normalize:lc,pingpong:function jZ(i,e=1){return e-Math.abs(sP(i,2*e)-e)},radToDeg:function tJ(i){return i*FM},randFloat:function YZ(i,e){return i+Math.random()*(e-i)},randFloatSpread:function ZZ(i){return i*(.5-Math.random())},randInt:function KZ(i,e){return i+Math.floor(Math.random()*(e-i+1))},seededRandom:function JZ(i){void 0!==i&&(G7=i);let e=G7+=1831565813;return e=Math.imul(e^e>>>15,1|e),e^=e+Math.imul(e^e>>>7,61|e),((e^e>>>14)>>>0)/4294967296},setQuaternionFromProperEuler:function nJ(i,e,t,n,r){const s=Math.cos,a=Math.sin,l=s(t/2),u=a(t/2),d=s((e+n)/2),p=a((e+n)/2),y=s((e-n)/2),C=a((e-n)/2),O=s((n-e)/2),Q=a((n-e)/2);switch(r){case"XYX":i.set(l*p,u*y,u*C,l*d);break;case"YZY":i.set(u*C,l*p,u*y,l*d);break;case"ZXZ":i.set(u*y,u*C,l*p,l*d);break;case"XZX":i.set(l*p,u*Q,u*O,l*d);break;case"YXY":i.set(u*O,l*p,u*Q,l*d);break;case"ZYZ":i.set(u*Q,u*O,l*p,l*d);break;default:console.warn("THREE.MathUtils: .setQuaternionFromProperEuler() encountered an unknown order: "+r)}},smootherstep:function XZ(i,e,t){return i<=e?0:i>=t?1:(i=(i-e)/(t-e))*i*i*(i*(6*i-15)+10)},smoothstep:function $Z(i,e,t){return i<=e?0:i>=t?1:(i=(i-e)/(t-e))*i*(3-2*i)}});class ji{constructor(e=0,t=0){ji.prototype.isVector2=!0,this.x=e,this.y=t}get width(){return this.x}set width(e){this.x=e}get height(){return this.y}set height(e){this.y=e}set(e,t){return this.x=e,this.y=t,this}setScalar(e){return this.x=e,this.y=e,this}setX(e){return this.x=e,this}setY(e){return this.y=e,this}setComponent(e,t){switch(e){case 0:this.x=t;break;case 1:this.y=t;break;default:throw new Error("index is out of range: "+e)}return this}getComponent(e){switch(e){case 0:return this.x;case 1:return this.y;default:throw new Error("index is out of range: "+e)}}clone(){return new this.constructor(this.x,this.y)}copy(e){return this.x=e.x,this.y=e.y,this}add(e){return this.x+=e.x,this.y+=e.y,this}addScalar(e){return this.x+=e,this.y+=e,this}addVectors(e,t){return this.x=e.x+t.x,this.y=e.y+t.y,this}addScaledVector(e,t){return this.x+=e.x*t,this.y+=e.y*t,this}sub(e){return this.x-=e.x,this.y-=e.y,this}subScalar(e){return this.x-=e,this.y-=e,this}subVectors(e,t){return this.x=e.x-t.x,this.y=e.y-t.y,this}multiply(e){return this.x*=e.x,this.y*=e.y,this}multiplyScalar(e){return this.x*=e,this.y*=e,this}divide(e){return this.x/=e.x,this.y/=e.y,this}divideScalar(e){return this.multiplyScalar(1/e)}applyMatrix3(e){const t=this.x,n=this.y,r=e.elements;return this.x=r[0]*t+r[3]*n+r[6],this.y=r[1]*t+r[4]*n+r[7],this}min(e){return this.x=Math.min(this.x,e.x),this.y=Math.min(this.y,e.y),this}max(e){return this.x=Math.max(this.x,e.x),this.y=Math.max(this.y,e.y),this}clamp(e,t){return this.x=Math.max(e.x,Math.min(t.x,this.x)),this.y=Math.max(e.y,Math.min(t.y,this.y)),this}clampScalar(e,t){return this.x=Math.max(e,Math.min(t,this.x)),this.y=Math.max(e,Math.min(t,this.y)),this}clampLength(e,t){const n=this.length();return this.divideScalar(n||1).multiplyScalar(Math.max(e,Math.min(t,n)))}floor(){return this.x=Math.floor(this.x),this.y=Math.floor(this.y),this}ceil(){return this.x=Math.ceil(this.x),this.y=Math.ceil(this.y),this}round(){return this.x=Math.round(this.x),this.y=Math.round(this.y),this}roundToZero(){return this.x=this.x<0?Math.ceil(this.x):Math.floor(this.x),this.y=this.y<0?Math.ceil(this.y):Math.floor(this.y),this}negate(){return this.x=-this.x,this.y=-this.y,this}dot(e){return this.x*e.x+this.y*e.y}cross(e){return this.x*e.y-this.y*e.x}lengthSq(){return this.x*this.x+this.y*this.y}length(){return Math.sqrt(this.x*this.x+this.y*this.y)}manhattanLength(){return Math.abs(this.x)+Math.abs(this.y)}normalize(){return this.divideScalar(this.length()||1)}angle(){return Math.atan2(-this.y,-this.x)+Math.PI}distanceTo(e){return Math.sqrt(this.distanceToSquared(e))}distanceToSquared(e){const t=this.x-e.x,n=this.y-e.y;return t*t+n*n}manhattanDistanceTo(e){return Math.abs(this.x-e.x)+Math.abs(this.y-e.y)}setLength(e){return this.normalize().multiplyScalar(e)}lerp(e,t){return this.x+=(e.x-this.x)*t,this.y+=(e.y-this.y)*t,this}lerpVectors(e,t,n){return this.x=e.x+(t.x-e.x)*n,this.y=e.y+(t.y-e.y)*n,this}equals(e){return e.x===this.x&&e.y===this.y}fromArray(e,t=0){return this.x=e[t],this.y=e[t+1],this}toArray(e=[],t=0){return e[t]=this.x,e[t+1]=this.y,e}fromBufferAttribute(e,t){return this.x=e.getX(t),this.y=e.getY(t),this}rotateAround(e,t){const n=Math.cos(t),r=Math.sin(t),s=this.x-e.x,a=this.y-e.y;return this.x=s*n-a*r+e.x,this.y=s*r+a*n+e.y,this}random(){return this.x=Math.random(),this.y=Math.random(),this}*[Symbol.iterator](){yield this.x,yield this.y}}class Df{constructor(){Df.prototype.isMatrix3=!0,this.elements=[1,0,0,0,1,0,0,0,1]}set(e,t,n,r,s,a,l,u,d){const p=this.elements;return p[0]=e,p[1]=r,p[2]=l,p[3]=t,p[4]=s,p[5]=u,p[6]=n,p[7]=a,p[8]=d,this}identity(){return this.set(1,0,0,0,1,0,0,0,1),this}copy(e){const t=this.elements,n=e.elements;return t[0]=n[0],t[1]=n[1],t[2]=n[2],t[3]=n[3],t[4]=n[4],t[5]=n[5],t[6]=n[6],t[7]=n[7],t[8]=n[8],this}extractBasis(e,t,n){return e.setFromMatrix3Column(this,0),t.setFromMatrix3Column(this,1),n.setFromMatrix3Column(this,2),this}setFromMatrix4(e){const t=e.elements;return this.set(t[0],t[4],t[8],t[1],t[5],t[9],t[2],t[6],t[10]),this}multiply(e){return this.multiplyMatrices(this,e)}premultiply(e){return this.multiplyMatrices(e,this)}multiplyMatrices(e,t){const n=e.elements,r=t.elements,s=this.elements,a=n[0],l=n[3],u=n[6],d=n[1],p=n[4],y=n[7],C=n[2],O=n[5],Q=n[8],W=r[0],se=r[3],ye=r[6],Le=r[1],we=r[4],He=r[7],gt=r[2],Et=r[5],Yt=r[8];return s[0]=a*W+l*Le+u*gt,s[3]=a*se+l*we+u*Et,s[6]=a*ye+l*He+u*Yt,s[1]=d*W+p*Le+y*gt,s[4]=d*se+p*we+y*Et,s[7]=d*ye+p*He+y*Yt,s[2]=C*W+O*Le+Q*gt,s[5]=C*se+O*we+Q*Et,s[8]=C*ye+O*He+Q*Yt,this}multiplyScalar(e){const t=this.elements;return t[0]*=e,t[3]*=e,t[6]*=e,t[1]*=e,t[4]*=e,t[7]*=e,t[2]*=e,t[5]*=e,t[8]*=e,this}determinant(){const e=this.elements,t=e[0],n=e[1],r=e[2],s=e[3],a=e[4],l=e[5],u=e[6],d=e[7],p=e[8];return t*a*p-t*l*d-n*s*p+n*l*u+r*s*d-r*a*u}invert(){const e=this.elements,t=e[0],n=e[1],r=e[2],s=e[3],a=e[4],l=e[5],u=e[6],d=e[7],p=e[8],y=p*a-l*d,C=l*u-p*s,O=d*s-a*u,Q=t*y+n*C+r*O;if(0===Q)return this.set(0,0,0,0,0,0,0,0,0);const W=1/Q;return e[0]=y*W,e[1]=(r*d-p*n)*W,e[2]=(l*n-r*a)*W,e[3]=C*W,e[4]=(p*t-r*u)*W,e[5]=(r*s-l*t)*W,e[6]=O*W,e[7]=(n*u-d*t)*W,e[8]=(a*t-n*s)*W,this}transpose(){let e;const t=this.elements;return e=t[1],t[1]=t[3],t[3]=e,e=t[2],t[2]=t[6],t[6]=e,e=t[5],t[5]=t[7],t[7]=e,this}getNormalMatrix(e){return this.setFromMatrix4(e).invert().transpose()}transposeIntoArray(e){const t=this.elements;return e[0]=t[0],e[1]=t[3],e[2]=t[6],e[3]=t[1],e[4]=t[4],e[5]=t[7],e[6]=t[2],e[7]=t[5],e[8]=t[8],this}setUvTransform(e,t,n,r,s,a,l){const u=Math.cos(s),d=Math.sin(s);return this.set(n*u,n*d,-n*(u*a+d*l)+a+e,-r*d,r*u,-r*(-d*a+u*l)+l+t,0,0,1),this}scale(e,t){return this.premultiply(aP.makeScale(e,t)),this}rotate(e){return this.premultiply(aP.makeRotation(-e)),this}translate(e,t){return this.premultiply(aP.makeTranslation(e,t)),this}makeTranslation(e,t){return this.set(1,0,e,0,1,t,0,0,1),this}makeRotation(e){const t=Math.cos(e),n=Math.sin(e);return this.set(t,-n,0,n,t,0,0,0,1),this}makeScale(e,t){return this.set(e,0,0,0,t,0,0,0,1),this}equals(e){const t=this.elements,n=e.elements;for(let r=0;r<9;r++)if(t[r]!==n[r])return!1;return!0}fromArray(e,t=0){for(let n=0;n<9;n++)this.elements[n]=e[n+t];return this}toArray(e=[],t=0){const n=this.elements;return e[t]=n[0],e[t+1]=n[1],e[t+2]=n[2],e[t+3]=n[3],e[t+4]=n[4],e[t+5]=n[5],e[t+6]=n[6],e[t+7]=n[7],e[t+8]=n[8],e}clone(){return(new this.constructor).fromArray(this.elements)}}const aP=new Df;function Q7(i){for(let e=i.length-1;e>=0;--e)if(i[e]>=65535)return!0;return!1}const iJ={Int8Array,Uint8Array,Uint8ClampedArray,Int16Array,Uint16Array,Int32Array,Uint32Array,Float32Array,Float64Array};function Ow(i,e){return new iJ[i](e)}function RM(i){return document.createElementNS("http://www.w3.org/1999/xhtml",i)}function ab(i){return i<.04045?.0773993808*i:Math.pow(.9478672986*i+.0521327014,2.4)}function GE(i){return i<.0031308?12.92*i:1.055*Math.pow(i,.41666)-.055}const lP={[a0]:{[kM]:ab},[kM]:{[a0]:GE}},Bf={legacyMode:!0,get workingColorSpace(){return kM},set workingColorSpace(i){console.warn("THREE.ColorManagement: .workingColorSpace is readonly.")},convert:function(i,e,t){if(this.legacyMode||e===t||!e||!t)return i;if(lP[e]&&void 0!==lP[e][t]){const n=lP[e][t];return i.r=n(i.r),i.g=n(i.g),i.b=n(i.b),i}throw new Error("Unsupported color space conversion.")},fromWorkingColorSpace:function(i,e){return this.convert(i,this.workingColorSpace,e)},toWorkingColorSpace:function(i,e){return this.convert(i,e,this.workingColorSpace)}},W7={aliceblue:15792383,antiquewhite:16444375,aqua:65535,aquamarine:8388564,azure:15794175,beige:16119260,bisque:16770244,black:0,blanchedalmond:16772045,blue:255,blueviolet:9055202,brown:10824234,burlywood:14596231,cadetblue:6266528,chartreuse:8388352,chocolate:13789470,coral:16744272,cornflowerblue:6591981,cornsilk:16775388,crimson:14423100,cyan:65535,darkblue:139,darkcyan:35723,darkgoldenrod:12092939,darkgray:11119017,darkgreen:25600,darkgrey:11119017,darkkhaki:12433259,darkmagenta:9109643,darkolivegreen:5597999,darkorange:16747520,darkorchid:10040012,darkred:9109504,darksalmon:15308410,darkseagreen:9419919,darkslateblue:4734347,darkslategray:3100495,darkslategrey:3100495,darkturquoise:52945,darkviolet:9699539,deeppink:16716947,deepskyblue:49151,dimgray:6908265,dimgrey:6908265,dodgerblue:2003199,firebrick:11674146,floralwhite:16775920,forestgreen:2263842,fuchsia:16711935,gainsboro:14474460,ghostwhite:16316671,gold:16766720,goldenrod:14329120,gray:8421504,green:32768,greenyellow:11403055,grey:8421504,honeydew:15794160,hotpink:16738740,indianred:13458524,indigo:4915330,ivory:16777200,khaki:15787660,lavender:15132410,lavenderblush:16773365,lawngreen:8190976,lemonchiffon:16775885,lightblue:11393254,lightcoral:15761536,lightcyan:14745599,lightgoldenrodyellow:16448210,lightgray:13882323,lightgreen:9498256,lightgrey:13882323,lightpink:16758465,lightsalmon:16752762,lightseagreen:2142890,lightskyblue:8900346,lightslategray:7833753,lightslategrey:7833753,lightsteelblue:11584734,lightyellow:16777184,lime:65280,limegreen:3329330,linen:16445670,magenta:16711935,maroon:8388608,mediumaquamarine:6737322,mediumblue:205,mediumorchid:12211667,mediumpurple:9662683,mediumseagreen:3978097,mediumslateblue:8087790,mediumspringgreen:64154,mediumturquoise:4772300,mediumvioletred:13047173,midnightblue:1644912,mintcream:16121850,mistyrose:16770273,moccasin:16770229,navajowhite:16768685,navy:128,oldlace:16643558,olive:8421376,olivedrab:7048739,orange:16753920,orangered:16729344,orchid:14315734,palegoldenrod:15657130,palegreen:10025880,paleturquoise:11529966,palevioletred:14381203,papayawhip:16773077,peachpuff:16767673,peru:13468991,pink:16761035,plum:14524637,powderblue:11591910,purple:8388736,rebeccapurple:6697881,red:16711680,rosybrown:12357519,royalblue:4286945,saddlebrown:9127187,salmon:16416882,sandybrown:16032864,seagreen:3050327,seashell:16774638,sienna:10506797,silver:12632256,skyblue:8900331,slateblue:6970061,slategray:7372944,slategrey:7372944,snow:16775930,springgreen:65407,steelblue:4620980,tan:13808780,teal:32896,thistle:14204888,tomato:16737095,turquoise:4251856,violet:15631086,wheat:16113331,white:16777215,whitesmoke:16119285,yellow:16776960,yellowgreen:10145074},bh={r:0,g:0,b:0},Pm={h:0,s:0,l:0},qE={h:0,s:0,l:0};function cP(i,e,t){return t<0&&(t+=1),t>1&&(t-=1),t<1/6?i+6*(e-i)*t:t<.5?e:t<2/3?i+6*(e-i)*(2/3-t):i}function QE(i,e){return e.r=i.r,e.g=i.g,e.b=i.b,e}let Rw,Lr=(()=>{class i{constructor(t,n,r){return this.isColor=!0,this.r=1,this.g=1,this.b=1,void 0===n&&void 0===r?this.set(t):this.setRGB(t,n,r)}set(t){return t&&t.isColor?this.copy(t):"number"==typeof t?this.setHex(t):"string"==typeof t&&this.setStyle(t),this}setScalar(t){return this.r=t,this.g=t,this.b=t,this}setHex(t,n=a0){return t=Math.floor(t),this.r=(t>>16&255)/255,this.g=(t>>8&255)/255,this.b=(255&t)/255,Bf.toWorkingColorSpace(this,n),this}setRGB(t,n,r,s=Bf.workingColorSpace){return this.r=t,this.g=n,this.b=r,Bf.toWorkingColorSpace(this,s),this}setHSL(t,n,r,s=Bf.workingColorSpace){if(t=sP(t,1),n=Du(n,0,1),r=Du(r,0,1),0===n)this.r=this.g=this.b=r;else{const a=r<=.5?r*(1+n):r+n-r*n,l=2*r-a;this.r=cP(l,a,t+1/3),this.g=cP(l,a,t),this.b=cP(l,a,t-1/3)}return Bf.toWorkingColorSpace(this,s),this}setStyle(t,n=a0){function r(a){void 0!==a&&parseFloat(a)<1&&console.warn("THREE.Color: Alpha component of "+t+" will be ignored.")}let s;if(s=/^((?:rgb|hsl)a?)\(([^\)]*)\)/.exec(t)){let a;const u=s[2];switch(s[1]){case"rgb":case"rgba":if(a=/^\s*(\d+)\s*,\s*(\d+)\s*,\s*(\d+)\s*(?:,\s*(\d*\.?\d+)\s*)?$/.exec(u))return this.r=Math.min(255,parseInt(a[1],10))/255,this.g=Math.min(255,parseInt(a[2],10))/255,this.b=Math.min(255,parseInt(a[3],10))/255,Bf.toWorkingColorSpace(this,n),r(a[4]),this;if(a=/^\s*(\d+)\%\s*,\s*(\d+)\%\s*,\s*(\d+)\%\s*(?:,\s*(\d*\.?\d+)\s*)?$/.exec(u))return this.r=Math.min(100,parseInt(a[1],10))/100,this.g=Math.min(100,parseInt(a[2],10))/100,this.b=Math.min(100,parseInt(a[3],10))/100,Bf.toWorkingColorSpace(this,n),r(a[4]),this;break;case"hsl":case"hsla":if(a=/^\s*(\d*\.?\d+)\s*,\s*(\d*\.?\d+)\%\s*,\s*(\d*\.?\d+)\%\s*(?:,\s*(\d*\.?\d+)\s*)?$/.exec(u)){const d=parseFloat(a[1])/360,p=parseFloat(a[2])/100,y=parseFloat(a[3])/100;return r(a[4]),this.setHSL(d,p,y,n)}}}else if(s=/^\#([A-Fa-f\d]+)$/.exec(t)){const a=s[1],l=a.length;if(3===l)return this.r=parseInt(a.charAt(0)+a.charAt(0),16)/255,this.g=parseInt(a.charAt(1)+a.charAt(1),16)/255,this.b=parseInt(a.charAt(2)+a.charAt(2),16)/255,Bf.toWorkingColorSpace(this,n),this;if(6===l)return this.r=parseInt(a.charAt(0)+a.charAt(1),16)/255,this.g=parseInt(a.charAt(2)+a.charAt(3),16)/255,this.b=parseInt(a.charAt(4)+a.charAt(5),16)/255,Bf.toWorkingColorSpace(this,n),this}return t&&t.length>0?this.setColorName(t,n):this}setColorName(t,n=a0){const r=W7[t.toLowerCase()];return void 0!==r?this.setHex(r,n):console.warn("THREE.Color: Unknown color "+t),this}clone(){return new this.constructor(this.r,this.g,this.b)}copy(t){return this.r=t.r,this.g=t.g,this.b=t.b,this}copySRGBToLinear(t){return this.r=ab(t.r),this.g=ab(t.g),this.b=ab(t.b),this}copyLinearToSRGB(t){return this.r=GE(t.r),this.g=GE(t.g),this.b=GE(t.b),this}convertSRGBToLinear(){return this.copySRGBToLinear(this),this}convertLinearToSRGB(){return this.copyLinearToSRGB(this),this}getHex(t=a0){return Bf.fromWorkingColorSpace(QE(this,bh),t),Du(255*bh.r,0,255)<<16^Du(255*bh.g,0,255)<<8^Du(255*bh.b,0,255)<<0}getHexString(t=a0){return("000000"+this.getHex(t).toString(16)).slice(-6)}getHSL(t,n=Bf.workingColorSpace){Bf.fromWorkingColorSpace(QE(this,bh),n);const r=bh.r,s=bh.g,a=bh.b,l=Math.max(r,s,a),u=Math.min(r,s,a);let d,p;const y=(u+l)/2;if(u===l)d=0,p=0;else{const C=l-u;switch(p=y<=.5?C/(l+u):C/(2-l-u),l){case r:d=(s-a)/C+(s"u")return e.src;let t;if(e instanceof HTMLCanvasElement)t=e;else{void 0===Rw&&(Rw=RM("canvas")),Rw.width=e.width,Rw.height=e.height;const n=Rw.getContext("2d");e instanceof ImageData?n.putImageData(e,0,0):n.drawImage(e,0,0,e.width,e.height),t=Rw}return t.width>2048||t.height>2048?(console.warn("THREE.ImageUtils.getDataURL: Image converted to jpg for performance reasons",e),t.toDataURL("image/jpeg",.6)):t.toDataURL("image/png")}static sRGBToLinear(e){if(typeof HTMLImageElement<"u"&&e instanceof HTMLImageElement||typeof HTMLCanvasElement<"u"&&e instanceof HTMLCanvasElement||typeof ImageBitmap<"u"&&e instanceof ImageBitmap){const t=RM("canvas");t.width=e.width,t.height=e.height;const n=t.getContext("2d");n.drawImage(e,0,0,e.width,e.height);const r=n.getImageData(0,0,e.width,e.height),s=r.data;for(let a=0;a{class i extends sb{constructor(t=i.DEFAULT_IMAGE,n=i.DEFAULT_MAPPING,r=Sd,s=Sd,a=iu,l=o0,u=zp,d=eb,p=i.DEFAULT_ANISOTROPY,y=ly){super(),this.isTexture=!0,Object.defineProperty(this,"id",{value:rJ++}),this.uuid=Hp(),this.name="",this.source=new lb(t),this.mipmaps=[],this.mapping=n,this.wrapS=r,this.wrapT=s,this.magFilter=a,this.minFilter=l,this.anisotropy=p,this.format=u,this.internalFormat=null,this.type=d,this.offset=new ji(0,0),this.repeat=new ji(1,1),this.center=new ji(0,0),this.rotation=0,this.matrixAutoUpdate=!0,this.matrix=new Df,this.generateMipmaps=!0,this.premultiplyAlpha=!1,this.flipY=!0,this.unpackAlignment=4,this.encoding=y,this.userData={},this.version=0,this.onUpdate=null,this.isRenderTargetTexture=!1,this.needsPMREMUpdate=!1}get image(){return this.source.data}set image(t){this.source.data=t}updateMatrix(){this.matrix.setUvTransform(this.offset.x,this.offset.y,this.repeat.x,this.repeat.y,this.rotation,this.center.x,this.center.y)}clone(){return(new this.constructor).copy(this)}copy(t){return this.name=t.name,this.source=t.source,this.mipmaps=t.mipmaps.slice(0),this.mapping=t.mapping,this.wrapS=t.wrapS,this.wrapT=t.wrapT,this.magFilter=t.magFilter,this.minFilter=t.minFilter,this.anisotropy=t.anisotropy,this.format=t.format,this.internalFormat=t.internalFormat,this.type=t.type,this.offset.copy(t.offset),this.repeat.copy(t.repeat),this.center.copy(t.center),this.rotation=t.rotation,this.matrixAutoUpdate=t.matrixAutoUpdate,this.matrix.copy(t.matrix),this.generateMipmaps=t.generateMipmaps,this.premultiplyAlpha=t.premultiplyAlpha,this.flipY=t.flipY,this.unpackAlignment=t.unpackAlignment,this.encoding=t.encoding,this.userData=JSON.parse(JSON.stringify(t.userData)),this.needsUpdate=!0,this}toJSON(t){const n=void 0===t||"string"==typeof t;if(!n&&void 0!==t.textures[this.uuid])return t.textures[this.uuid];const r={metadata:{version:4.5,type:"Texture",generator:"Texture.toJSON"},uuid:this.uuid,name:this.name,image:this.source.toJSON(t).uuid,mapping:this.mapping,repeat:[this.repeat.x,this.repeat.y],offset:[this.offset.x,this.offset.y],center:[this.center.x,this.center.y],rotation:this.rotation,wrap:[this.wrapS,this.wrapT],format:this.format,type:this.type,encoding:this.encoding,minFilter:this.minFilter,magFilter:this.magFilter,anisotropy:this.anisotropy,flipY:this.flipY,generateMipmaps:this.generateMipmaps,premultiplyAlpha:this.premultiplyAlpha,unpackAlignment:this.unpackAlignment};return Object.keys(this.userData).length>0&&(r.userData=this.userData),n||(t.textures[this.uuid]=r),r}dispose(){this.dispatchEvent({type:"dispose"})}transformUv(t){if(300!==this.mapping)return t;if(t.applyMatrix3(this.matrix),t.x<0||t.x>1)switch(this.wrapS){case oy:t.x=t.x-Math.floor(t.x);break;case Sd:t.x=t.x<0?0:1;break;case Ew:t.x=1===Math.abs(Math.floor(t.x)%2)?Math.ceil(t.x)-t.x:t.x-Math.floor(t.x)}if(t.y<0||t.y>1)switch(this.wrapT){case oy:t.y=t.y-Math.floor(t.y);break;case Sd:t.y=t.y<0?0:1;break;case Ew:t.y=1===Math.abs(Math.floor(t.y)%2)?Math.ceil(t.y)-t.y:t.y-Math.floor(t.y)}return this.flipY&&(t.y=1-t.y),t}set needsUpdate(t){!0===t&&(this.version++,this.source.needsUpdate=!0)}}return i.DEFAULT_IMAGE=null,i.DEFAULT_MAPPING=300,i.DEFAULT_ANISOTROPY=1,i})();class Xl{constructor(e=0,t=0,n=0,r=1){Xl.prototype.isVector4=!0,this.x=e,this.y=t,this.z=n,this.w=r}get width(){return this.z}set width(e){this.z=e}get height(){return this.w}set height(e){this.w=e}set(e,t,n,r){return this.x=e,this.y=t,this.z=n,this.w=r,this}setScalar(e){return this.x=e,this.y=e,this.z=e,this.w=e,this}setX(e){return this.x=e,this}setY(e){return this.y=e,this}setZ(e){return this.z=e,this}setW(e){return this.w=e,this}setComponent(e,t){switch(e){case 0:this.x=t;break;case 1:this.y=t;break;case 2:this.z=t;break;case 3:this.w=t;break;default:throw new Error("index is out of range: "+e)}return this}getComponent(e){switch(e){case 0:return this.x;case 1:return this.y;case 2:return this.z;case 3:return this.w;default:throw new Error("index is out of range: "+e)}}clone(){return new this.constructor(this.x,this.y,this.z,this.w)}copy(e){return this.x=e.x,this.y=e.y,this.z=e.z,this.w=void 0!==e.w?e.w:1,this}add(e){return this.x+=e.x,this.y+=e.y,this.z+=e.z,this.w+=e.w,this}addScalar(e){return this.x+=e,this.y+=e,this.z+=e,this.w+=e,this}addVectors(e,t){return this.x=e.x+t.x,this.y=e.y+t.y,this.z=e.z+t.z,this.w=e.w+t.w,this}addScaledVector(e,t){return this.x+=e.x*t,this.y+=e.y*t,this.z+=e.z*t,this.w+=e.w*t,this}sub(e){return this.x-=e.x,this.y-=e.y,this.z-=e.z,this.w-=e.w,this}subScalar(e){return this.x-=e,this.y-=e,this.z-=e,this.w-=e,this}subVectors(e,t){return this.x=e.x-t.x,this.y=e.y-t.y,this.z=e.z-t.z,this.w=e.w-t.w,this}multiply(e){return this.x*=e.x,this.y*=e.y,this.z*=e.z,this.w*=e.w,this}multiplyScalar(e){return this.x*=e,this.y*=e,this.z*=e,this.w*=e,this}applyMatrix4(e){const t=this.x,n=this.y,r=this.z,s=this.w,a=e.elements;return this.x=a[0]*t+a[4]*n+a[8]*r+a[12]*s,this.y=a[1]*t+a[5]*n+a[9]*r+a[13]*s,this.z=a[2]*t+a[6]*n+a[10]*r+a[14]*s,this.w=a[3]*t+a[7]*n+a[11]*r+a[15]*s,this}divideScalar(e){return this.multiplyScalar(1/e)}setAxisAngleFromQuaternion(e){this.w=2*Math.acos(e.w);const t=Math.sqrt(1-e.w*e.w);return t<1e-4?(this.x=1,this.y=0,this.z=0):(this.x=e.x/t,this.y=e.y/t,this.z=e.z/t),this}setAxisAngleFromRotationMatrix(e){let t,n,r,s;const u=e.elements,d=u[0],p=u[4],y=u[8],C=u[1],O=u[5],Q=u[9],W=u[2],se=u[6],ye=u[10];if(Math.abs(p-C)<.01&&Math.abs(y-W)<.01&&Math.abs(Q-se)<.01){if(Math.abs(p+C)<.1&&Math.abs(y+W)<.1&&Math.abs(Q+se)<.1&&Math.abs(d+O+ye-3)<.1)return this.set(1,0,0,0),this;t=Math.PI;const we=(d+1)/2,He=(O+1)/2,gt=(ye+1)/2,Et=(p+C)/4,Yt=(y+W)/4,dt=(Q+se)/4;return we>He&&we>gt?we<.01?(n=0,r=.707106781,s=.707106781):(n=Math.sqrt(we),r=Et/n,s=Yt/n):He>gt?He<.01?(n=.707106781,r=0,s=.707106781):(r=Math.sqrt(He),n=Et/r,s=dt/r):gt<.01?(n=.707106781,r=.707106781,s=0):(s=Math.sqrt(gt),n=Yt/s,r=dt/s),this.set(n,r,s,t),this}let Le=Math.sqrt((se-Q)*(se-Q)+(y-W)*(y-W)+(C-p)*(C-p));return Math.abs(Le)<.001&&(Le=1),this.x=(se-Q)/Le,this.y=(y-W)/Le,this.z=(C-p)/Le,this.w=Math.acos((d+O+ye-1)/2),this}min(e){return this.x=Math.min(this.x,e.x),this.y=Math.min(this.y,e.y),this.z=Math.min(this.z,e.z),this.w=Math.min(this.w,e.w),this}max(e){return this.x=Math.max(this.x,e.x),this.y=Math.max(this.y,e.y),this.z=Math.max(this.z,e.z),this.w=Math.max(this.w,e.w),this}clamp(e,t){return this.x=Math.max(e.x,Math.min(t.x,this.x)),this.y=Math.max(e.y,Math.min(t.y,this.y)),this.z=Math.max(e.z,Math.min(t.z,this.z)),this.w=Math.max(e.w,Math.min(t.w,this.w)),this}clampScalar(e,t){return this.x=Math.max(e,Math.min(t,this.x)),this.y=Math.max(e,Math.min(t,this.y)),this.z=Math.max(e,Math.min(t,this.z)),this.w=Math.max(e,Math.min(t,this.w)),this}clampLength(e,t){const n=this.length();return this.divideScalar(n||1).multiplyScalar(Math.max(e,Math.min(t,n)))}floor(){return this.x=Math.floor(this.x),this.y=Math.floor(this.y),this.z=Math.floor(this.z),this.w=Math.floor(this.w),this}ceil(){return this.x=Math.ceil(this.x),this.y=Math.ceil(this.y),this.z=Math.ceil(this.z),this.w=Math.ceil(this.w),this}round(){return this.x=Math.round(this.x),this.y=Math.round(this.y),this.z=Math.round(this.z),this.w=Math.round(this.w),this}roundToZero(){return this.x=this.x<0?Math.ceil(this.x):Math.floor(this.x),this.y=this.y<0?Math.ceil(this.y):Math.floor(this.y),this.z=this.z<0?Math.ceil(this.z):Math.floor(this.z),this.w=this.w<0?Math.ceil(this.w):Math.floor(this.w),this}negate(){return this.x=-this.x,this.y=-this.y,this.z=-this.z,this.w=-this.w,this}dot(e){return this.x*e.x+this.y*e.y+this.z*e.z+this.w*e.w}lengthSq(){return this.x*this.x+this.y*this.y+this.z*this.z+this.w*this.w}length(){return Math.sqrt(this.x*this.x+this.y*this.y+this.z*this.z+this.w*this.w)}manhattanLength(){return Math.abs(this.x)+Math.abs(this.y)+Math.abs(this.z)+Math.abs(this.w)}normalize(){return this.divideScalar(this.length()||1)}setLength(e){return this.normalize().multiplyScalar(e)}lerp(e,t){return this.x+=(e.x-this.x)*t,this.y+=(e.y-this.y)*t,this.z+=(e.z-this.z)*t,this.w+=(e.w-this.w)*t,this}lerpVectors(e,t,n){return this.x=e.x+(t.x-e.x)*n,this.y=e.y+(t.y-e.y)*n,this.z=e.z+(t.z-e.z)*n,this.w=e.w+(t.w-e.w)*n,this}equals(e){return e.x===this.x&&e.y===this.y&&e.z===this.z&&e.w===this.w}fromArray(e,t=0){return this.x=e[t],this.y=e[t+1],this.z=e[t+2],this.w=e[t+3],this}toArray(e=[],t=0){return e[t]=this.x,e[t+1]=this.y,e[t+2]=this.z,e[t+3]=this.w,e}fromBufferAttribute(e,t){return this.x=e.getX(t),this.y=e.getY(t),this.z=e.getZ(t),this.w=e.getW(t),this}random(){return this.x=Math.random(),this.y=Math.random(),this.z=Math.random(),this.w=Math.random(),this}*[Symbol.iterator](){yield this.x,yield this.y,yield this.z,yield this.w}}class If extends sb{constructor(e=1,t=1,n={}){super(),this.isWebGLRenderTarget=!0,this.width=e,this.height=t,this.depth=1,this.scissor=new Xl(0,0,e,t),this.scissorTest=!1,this.viewport=new Xl(0,0,e,t),this.texture=new RA({width:e,height:t,depth:1},n.mapping,n.wrapS,n.wrapT,n.magFilter,n.minFilter,n.format,n.type,n.anisotropy,n.encoding),this.texture.isRenderTargetTexture=!0,this.texture.flipY=!1,this.texture.generateMipmaps=void 0!==n.generateMipmaps&&n.generateMipmaps,this.texture.internalFormat=void 0!==n.internalFormat?n.internalFormat:null,this.texture.minFilter=void 0!==n.minFilter?n.minFilter:iu,this.depthBuffer=void 0===n.depthBuffer||n.depthBuffer,this.stencilBuffer=void 0!==n.stencilBuffer&&n.stencilBuffer,this.depthTexture=void 0!==n.depthTexture?n.depthTexture:null,this.samples=void 0!==n.samples?n.samples:0}setSize(e,t,n=1){(this.width!==e||this.height!==t||this.depth!==n)&&(this.width=e,this.height=t,this.depth=n,this.texture.image.width=e,this.texture.image.height=t,this.texture.image.depth=n,this.dispose()),this.viewport.set(0,0,e,t),this.scissor.set(0,0,e,t)}clone(){return(new this.constructor).copy(this)}copy(e){this.width=e.width,this.height=e.height,this.depth=e.depth,this.viewport.copy(e.viewport),this.texture=e.texture.clone(),this.texture.isRenderTargetTexture=!0;const t=Object.assign({},e.texture.image);return this.texture.source=new lb(t),this.depthBuffer=e.depthBuffer,this.stencilBuffer=e.stencilBuffer,null!==e.depthTexture&&(this.depthTexture=e.depthTexture.clone()),this.samples=e.samples,this}dispose(){this.dispatchEvent({type:"dispose"})}}class hP extends RA{constructor(e=null,t=1,n=1,r=1){super(null),this.isDataArrayTexture=!0,this.image={data:e,width:t,height:n,depth:r},this.magFilter=hu,this.minFilter=hu,this.wrapR=Sd,this.generateMipmaps=!1,this.flipY=!1,this.unpackAlignment=1}}class $7 extends RA{constructor(e=null,t=1,n=1,r=1){super(null),this.isData3DTexture=!0,this.image={data:e,width:t,height:n,depth:r},this.magFilter=hu,this.minFilter=hu,this.wrapR=Sd,this.generateMipmaps=!1,this.flipY=!1,this.unpackAlignment=1}}class Vc{constructor(e=0,t=0,n=0,r=1){this.isQuaternion=!0,this._x=e,this._y=t,this._z=n,this._w=r}static slerpFlat(e,t,n,r,s,a,l){let u=n[r+0],d=n[r+1],p=n[r+2],y=n[r+3];const C=s[a+0],O=s[a+1],Q=s[a+2],W=s[a+3];if(0===l)return e[t+0]=u,e[t+1]=d,e[t+2]=p,void(e[t+3]=y);if(1===l)return e[t+0]=C,e[t+1]=O,e[t+2]=Q,void(e[t+3]=W);if(y!==W||u!==C||d!==O||p!==Q){let se=1-l;const ye=u*C+d*O+p*Q+y*W,Le=ye>=0?1:-1,we=1-ye*ye;if(we>Number.EPSILON){const gt=Math.sqrt(we),Et=Math.atan2(gt,ye*Le);se=Math.sin(se*Et)/gt,l=Math.sin(l*Et)/gt}const He=l*Le;if(u=u*se+C*He,d=d*se+O*He,p=p*se+Q*He,y=y*se+W*He,se===1-l){const gt=1/Math.sqrt(u*u+d*d+p*p+y*y);u*=gt,d*=gt,p*=gt,y*=gt}}e[t]=u,e[t+1]=d,e[t+2]=p,e[t+3]=y}static multiplyQuaternionsFlat(e,t,n,r,s,a){const l=n[r],u=n[r+1],d=n[r+2],p=n[r+3],y=s[a],C=s[a+1],O=s[a+2],Q=s[a+3];return e[t]=l*Q+p*y+u*O-d*C,e[t+1]=u*Q+p*C+d*y-l*O,e[t+2]=d*Q+p*O+l*C-u*y,e[t+3]=p*Q-l*y-u*C-d*O,e}get x(){return this._x}set x(e){this._x=e,this._onChangeCallback()}get y(){return this._y}set y(e){this._y=e,this._onChangeCallback()}get z(){return this._z}set z(e){this._z=e,this._onChangeCallback()}get w(){return this._w}set w(e){this._w=e,this._onChangeCallback()}set(e,t,n,r){return this._x=e,this._y=t,this._z=n,this._w=r,this._onChangeCallback(),this}clone(){return new this.constructor(this._x,this._y,this._z,this._w)}copy(e){return this._x=e.x,this._y=e.y,this._z=e.z,this._w=e.w,this._onChangeCallback(),this}setFromEuler(e,t){const n=e._x,r=e._y,s=e._z,a=e._order,l=Math.cos,u=Math.sin,d=l(n/2),p=l(r/2),y=l(s/2),C=u(n/2),O=u(r/2),Q=u(s/2);switch(a){case"XYZ":this._x=C*p*y+d*O*Q,this._y=d*O*y-C*p*Q,this._z=d*p*Q+C*O*y,this._w=d*p*y-C*O*Q;break;case"YXZ":this._x=C*p*y+d*O*Q,this._y=d*O*y-C*p*Q,this._z=d*p*Q-C*O*y,this._w=d*p*y+C*O*Q;break;case"ZXY":this._x=C*p*y-d*O*Q,this._y=d*O*y+C*p*Q,this._z=d*p*Q+C*O*y,this._w=d*p*y-C*O*Q;break;case"ZYX":this._x=C*p*y-d*O*Q,this._y=d*O*y+C*p*Q,this._z=d*p*Q-C*O*y,this._w=d*p*y+C*O*Q;break;case"YZX":this._x=C*p*y+d*O*Q,this._y=d*O*y+C*p*Q,this._z=d*p*Q-C*O*y,this._w=d*p*y-C*O*Q;break;case"XZY":this._x=C*p*y-d*O*Q,this._y=d*O*y-C*p*Q,this._z=d*p*Q+C*O*y,this._w=d*p*y+C*O*Q;break;default:console.warn("THREE.Quaternion: .setFromEuler() encountered an unknown order: "+a)}return!1!==t&&this._onChangeCallback(),this}setFromAxisAngle(e,t){const n=t/2,r=Math.sin(n);return this._x=e.x*r,this._y=e.y*r,this._z=e.z*r,this._w=Math.cos(n),this._onChangeCallback(),this}setFromRotationMatrix(e){const t=e.elements,n=t[0],r=t[4],s=t[8],a=t[1],l=t[5],u=t[9],d=t[2],p=t[6],y=t[10],C=n+l+y;if(C>0){const O=.5/Math.sqrt(C+1);this._w=.25/O,this._x=(p-u)*O,this._y=(s-d)*O,this._z=(a-r)*O}else if(n>l&&n>y){const O=2*Math.sqrt(1+n-l-y);this._w=(p-u)/O,this._x=.25*O,this._y=(r+a)/O,this._z=(s+d)/O}else if(l>y){const O=2*Math.sqrt(1+l-n-y);this._w=(s-d)/O,this._x=(r+a)/O,this._y=.25*O,this._z=(u+p)/O}else{const O=2*Math.sqrt(1+y-n-l);this._w=(a-r)/O,this._x=(s+d)/O,this._y=(u+p)/O,this._z=.25*O}return this._onChangeCallback(),this}setFromUnitVectors(e,t){let n=e.dot(t)+1;return nMath.abs(e.z)?(this._x=-e.y,this._y=e.x,this._z=0,this._w=n):(this._x=0,this._y=-e.z,this._z=e.y,this._w=n)):(this._x=e.y*t.z-e.z*t.y,this._y=e.z*t.x-e.x*t.z,this._z=e.x*t.y-e.y*t.x,this._w=n),this.normalize()}angleTo(e){return 2*Math.acos(Math.abs(Du(this.dot(e),-1,1)))}rotateTowards(e,t){const n=this.angleTo(e);if(0===n)return this;const r=Math.min(1,t/n);return this.slerp(e,r),this}identity(){return this.set(0,0,0,1)}invert(){return this.conjugate()}conjugate(){return this._x*=-1,this._y*=-1,this._z*=-1,this._onChangeCallback(),this}dot(e){return this._x*e._x+this._y*e._y+this._z*e._z+this._w*e._w}lengthSq(){return this._x*this._x+this._y*this._y+this._z*this._z+this._w*this._w}length(){return Math.sqrt(this._x*this._x+this._y*this._y+this._z*this._z+this._w*this._w)}normalize(){let e=this.length();return 0===e?(this._x=0,this._y=0,this._z=0,this._w=1):(e=1/e,this._x=this._x*e,this._y=this._y*e,this._z=this._z*e,this._w=this._w*e),this._onChangeCallback(),this}multiply(e){return this.multiplyQuaternions(this,e)}premultiply(e){return this.multiplyQuaternions(e,this)}multiplyQuaternions(e,t){const n=e._x,r=e._y,s=e._z,a=e._w,l=t._x,u=t._y,d=t._z,p=t._w;return this._x=n*p+a*l+r*d-s*u,this._y=r*p+a*u+s*l-n*d,this._z=s*p+a*d+n*u-r*l,this._w=a*p-n*l-r*u-s*d,this._onChangeCallback(),this}slerp(e,t){if(0===t)return this;if(1===t)return this.copy(e);const n=this._x,r=this._y,s=this._z,a=this._w;let l=a*e._w+n*e._x+r*e._y+s*e._z;if(l<0?(this._w=-e._w,this._x=-e._x,this._y=-e._y,this._z=-e._z,l=-l):this.copy(e),l>=1)return this._w=a,this._x=n,this._y=r,this._z=s,this;const u=1-l*l;if(u<=Number.EPSILON){const O=1-t;return this._w=O*a+t*this._w,this._x=O*n+t*this._x,this._y=O*r+t*this._y,this._z=O*s+t*this._z,this.normalize(),this._onChangeCallback(),this}const d=Math.sqrt(u),p=Math.atan2(d,l),y=Math.sin((1-t)*p)/d,C=Math.sin(t*p)/d;return this._w=a*y+this._w*C,this._x=n*y+this._x*C,this._y=r*y+this._y*C,this._z=s*y+this._z*C,this._onChangeCallback(),this}slerpQuaternions(e,t,n){return this.copy(e).slerp(t,n)}random(){const e=Math.random(),t=Math.sqrt(1-e),n=Math.sqrt(e),r=2*Math.PI*Math.random(),s=2*Math.PI*Math.random();return this.set(t*Math.cos(r),n*Math.sin(s),n*Math.cos(s),t*Math.sin(r))}equals(e){return e._x===this._x&&e._y===this._y&&e._z===this._z&&e._w===this._w}fromArray(e,t=0){return this._x=e[t],this._y=e[t+1],this._z=e[t+2],this._w=e[t+3],this._onChangeCallback(),this}toArray(e=[],t=0){return e[t]=this._x,e[t+1]=this._y,e[t+2]=this._z,e[t+3]=this._w,e}fromBufferAttribute(e,t){return this._x=e.getX(t),this._y=e.getY(t),this._z=e.getZ(t),this._w=e.getW(t),this}_onChange(e){return this._onChangeCallback=e,this}_onChangeCallback(){}*[Symbol.iterator](){yield this._x,yield this._y,yield this._z,yield this._w}}class Nt{constructor(e=0,t=0,n=0){Nt.prototype.isVector3=!0,this.x=e,this.y=t,this.z=n}set(e,t,n){return void 0===n&&(n=this.z),this.x=e,this.y=t,this.z=n,this}setScalar(e){return this.x=e,this.y=e,this.z=e,this}setX(e){return this.x=e,this}setY(e){return this.y=e,this}setZ(e){return this.z=e,this}setComponent(e,t){switch(e){case 0:this.x=t;break;case 1:this.y=t;break;case 2:this.z=t;break;default:throw new Error("index is out of range: "+e)}return this}getComponent(e){switch(e){case 0:return this.x;case 1:return this.y;case 2:return this.z;default:throw new Error("index is out of range: "+e)}}clone(){return new this.constructor(this.x,this.y,this.z)}copy(e){return this.x=e.x,this.y=e.y,this.z=e.z,this}add(e){return this.x+=e.x,this.y+=e.y,this.z+=e.z,this}addScalar(e){return this.x+=e,this.y+=e,this.z+=e,this}addVectors(e,t){return this.x=e.x+t.x,this.y=e.y+t.y,this.z=e.z+t.z,this}addScaledVector(e,t){return this.x+=e.x*t,this.y+=e.y*t,this.z+=e.z*t,this}sub(e){return this.x-=e.x,this.y-=e.y,this.z-=e.z,this}subScalar(e){return this.x-=e,this.y-=e,this.z-=e,this}subVectors(e,t){return this.x=e.x-t.x,this.y=e.y-t.y,this.z=e.z-t.z,this}multiply(e){return this.x*=e.x,this.y*=e.y,this.z*=e.z,this}multiplyScalar(e){return this.x*=e,this.y*=e,this.z*=e,this}multiplyVectors(e,t){return this.x=e.x*t.x,this.y=e.y*t.y,this.z=e.z*t.z,this}applyEuler(e){return this.applyQuaternion(X7.setFromEuler(e))}applyAxisAngle(e,t){return this.applyQuaternion(X7.setFromAxisAngle(e,t))}applyMatrix3(e){const t=this.x,n=this.y,r=this.z,s=e.elements;return this.x=s[0]*t+s[3]*n+s[6]*r,this.y=s[1]*t+s[4]*n+s[7]*r,this.z=s[2]*t+s[5]*n+s[8]*r,this}applyNormalMatrix(e){return this.applyMatrix3(e).normalize()}applyMatrix4(e){const t=this.x,n=this.y,r=this.z,s=e.elements,a=1/(s[3]*t+s[7]*n+s[11]*r+s[15]);return this.x=(s[0]*t+s[4]*n+s[8]*r+s[12])*a,this.y=(s[1]*t+s[5]*n+s[9]*r+s[13])*a,this.z=(s[2]*t+s[6]*n+s[10]*r+s[14])*a,this}applyQuaternion(e){const t=this.x,n=this.y,r=this.z,s=e.x,a=e.y,l=e.z,u=e.w,d=u*t+a*r-l*n,p=u*n+l*t-s*r,y=u*r+s*n-a*t,C=-s*t-a*n-l*r;return this.x=d*u+C*-s+p*-l-y*-a,this.y=p*u+C*-a+y*-s-d*-l,this.z=y*u+C*-l+d*-a-p*-s,this}project(e){return this.applyMatrix4(e.matrixWorldInverse).applyMatrix4(e.projectionMatrix)}unproject(e){return this.applyMatrix4(e.projectionMatrixInverse).applyMatrix4(e.matrixWorld)}transformDirection(e){const t=this.x,n=this.y,r=this.z,s=e.elements;return this.x=s[0]*t+s[4]*n+s[8]*r,this.y=s[1]*t+s[5]*n+s[9]*r,this.z=s[2]*t+s[6]*n+s[10]*r,this.normalize()}divide(e){return this.x/=e.x,this.y/=e.y,this.z/=e.z,this}divideScalar(e){return this.multiplyScalar(1/e)}min(e){return this.x=Math.min(this.x,e.x),this.y=Math.min(this.y,e.y),this.z=Math.min(this.z,e.z),this}max(e){return this.x=Math.max(this.x,e.x),this.y=Math.max(this.y,e.y),this.z=Math.max(this.z,e.z),this}clamp(e,t){return this.x=Math.max(e.x,Math.min(t.x,this.x)),this.y=Math.max(e.y,Math.min(t.y,this.y)),this.z=Math.max(e.z,Math.min(t.z,this.z)),this}clampScalar(e,t){return this.x=Math.max(e,Math.min(t,this.x)),this.y=Math.max(e,Math.min(t,this.y)),this.z=Math.max(e,Math.min(t,this.z)),this}clampLength(e,t){const n=this.length();return this.divideScalar(n||1).multiplyScalar(Math.max(e,Math.min(t,n)))}floor(){return this.x=Math.floor(this.x),this.y=Math.floor(this.y),this.z=Math.floor(this.z),this}ceil(){return this.x=Math.ceil(this.x),this.y=Math.ceil(this.y),this.z=Math.ceil(this.z),this}round(){return this.x=Math.round(this.x),this.y=Math.round(this.y),this.z=Math.round(this.z),this}roundToZero(){return this.x=this.x<0?Math.ceil(this.x):Math.floor(this.x),this.y=this.y<0?Math.ceil(this.y):Math.floor(this.y),this.z=this.z<0?Math.ceil(this.z):Math.floor(this.z),this}negate(){return this.x=-this.x,this.y=-this.y,this.z=-this.z,this}dot(e){return this.x*e.x+this.y*e.y+this.z*e.z}lengthSq(){return this.x*this.x+this.y*this.y+this.z*this.z}length(){return Math.sqrt(this.x*this.x+this.y*this.y+this.z*this.z)}manhattanLength(){return Math.abs(this.x)+Math.abs(this.y)+Math.abs(this.z)}normalize(){return this.divideScalar(this.length()||1)}setLength(e){return this.normalize().multiplyScalar(e)}lerp(e,t){return this.x+=(e.x-this.x)*t,this.y+=(e.y-this.y)*t,this.z+=(e.z-this.z)*t,this}lerpVectors(e,t,n){return this.x=e.x+(t.x-e.x)*n,this.y=e.y+(t.y-e.y)*n,this.z=e.z+(t.z-e.z)*n,this}cross(e){return this.crossVectors(this,e)}crossVectors(e,t){const n=e.x,r=e.y,s=e.z,a=t.x,l=t.y,u=t.z;return this.x=r*u-s*l,this.y=s*a-n*u,this.z=n*l-r*a,this}projectOnVector(e){const t=e.lengthSq();if(0===t)return this.set(0,0,0);const n=e.dot(this)/t;return this.copy(e).multiplyScalar(n)}projectOnPlane(e){return dP.copy(this).projectOnVector(e),this.sub(dP)}reflect(e){return this.sub(dP.copy(e).multiplyScalar(2*this.dot(e)))}angleTo(e){const t=Math.sqrt(this.lengthSq()*e.lengthSq());if(0===t)return Math.PI/2;const n=this.dot(e)/t;return Math.acos(Du(n,-1,1))}distanceTo(e){return Math.sqrt(this.distanceToSquared(e))}distanceToSquared(e){const t=this.x-e.x,n=this.y-e.y,r=this.z-e.z;return t*t+n*n+r*r}manhattanDistanceTo(e){return Math.abs(this.x-e.x)+Math.abs(this.y-e.y)+Math.abs(this.z-e.z)}setFromSpherical(e){return this.setFromSphericalCoords(e.radius,e.phi,e.theta)}setFromSphericalCoords(e,t,n){const r=Math.sin(t)*e;return this.x=r*Math.sin(n),this.y=Math.cos(t)*e,this.z=r*Math.cos(n),this}setFromCylindrical(e){return this.setFromCylindricalCoords(e.radius,e.theta,e.y)}setFromCylindricalCoords(e,t,n){return this.x=e*Math.sin(t),this.y=n,this.z=e*Math.cos(t),this}setFromMatrixPosition(e){const t=e.elements;return this.x=t[12],this.y=t[13],this.z=t[14],this}setFromMatrixScale(e){const t=this.setFromMatrixColumn(e,0).length(),n=this.setFromMatrixColumn(e,1).length(),r=this.setFromMatrixColumn(e,2).length();return this.x=t,this.y=n,this.z=r,this}setFromMatrixColumn(e,t){return this.fromArray(e.elements,4*t)}setFromMatrix3Column(e,t){return this.fromArray(e.elements,3*t)}setFromEuler(e){return this.x=e._x,this.y=e._y,this.z=e._z,this}equals(e){return e.x===this.x&&e.y===this.y&&e.z===this.z}fromArray(e,t=0){return this.x=e[t],this.y=e[t+1],this.z=e[t+2],this}toArray(e=[],t=0){return e[t]=this.x,e[t+1]=this.y,e[t+2]=this.z,e}fromBufferAttribute(e,t){return this.x=e.getX(t),this.y=e.getY(t),this.z=e.getZ(t),this}random(){return this.x=Math.random(),this.y=Math.random(),this.z=Math.random(),this}randomDirection(){const e=2*(Math.random()-.5),t=Math.random()*Math.PI*2,n=Math.sqrt(1-e**2);return this.x=n*Math.cos(t),this.y=n*Math.sin(t),this.z=e,this}*[Symbol.iterator](){yield this.x,yield this.y,yield this.z}}const dP=new Nt,X7=new Vc;class cb{constructor(e=new Nt(1/0,1/0,1/0),t=new Nt(-1/0,-1/0,-1/0)){this.isBox3=!0,this.min=e,this.max=t}set(e,t){return this.min.copy(e),this.max.copy(t),this}setFromArray(e){let t=1/0,n=1/0,r=1/0,s=-1/0,a=-1/0,l=-1/0;for(let u=0,d=e.length;us&&(s=p),y>a&&(a=y),C>l&&(l=C)}return this.min.set(t,n,r),this.max.set(s,a,l),this}setFromBufferAttribute(e){let t=1/0,n=1/0,r=1/0,s=-1/0,a=-1/0,l=-1/0;for(let u=0,d=e.count;us&&(s=p),y>a&&(a=y),C>l&&(l=C)}return this.min.set(t,n,r),this.max.set(s,a,l),this}setFromPoints(e){this.makeEmpty();for(let t=0,n=e.length;tthis.max.x||e.ythis.max.y||e.zthis.max.z)}containsBox(e){return this.min.x<=e.min.x&&e.max.x<=this.max.x&&this.min.y<=e.min.y&&e.max.y<=this.max.y&&this.min.z<=e.min.z&&e.max.z<=this.max.z}getParameter(e,t){return t.set((e.x-this.min.x)/(this.max.x-this.min.x),(e.y-this.min.y)/(this.max.y-this.min.y),(e.z-this.min.z)/(this.max.z-this.min.z))}intersectsBox(e){return!(e.max.xthis.max.x||e.max.ythis.max.y||e.max.zthis.max.z)}intersectsSphere(e){return this.clampPoint(e.center,ub),ub.distanceToSquared(e.center)<=e.radius*e.radius}intersectsPlane(e){let t,n;return e.normal.x>0?(t=e.normal.x*this.min.x,n=e.normal.x*this.max.x):(t=e.normal.x*this.max.x,n=e.normal.x*this.min.x),e.normal.y>0?(t+=e.normal.y*this.min.y,n+=e.normal.y*this.max.y):(t+=e.normal.y*this.max.y,n+=e.normal.y*this.min.y),e.normal.z>0?(t+=e.normal.z*this.min.z,n+=e.normal.z*this.max.z):(t+=e.normal.z*this.max.z,n+=e.normal.z*this.min.z),t<=-e.constant&&n>=-e.constant}intersectsTriangle(e){if(this.isEmpty())return!1;this.getCenter(LM),WE.subVectors(this.max,LM),Lw.subVectors(e.a,LM),Nw.subVectors(e.b,LM),Uw.subVectors(e.c,LM),cy.subVectors(Nw,Lw),uy.subVectors(Uw,Nw),hb.subVectors(Lw,Uw);let t=[0,-cy.z,cy.y,0,-uy.z,uy.y,0,-hb.z,hb.y,cy.z,0,-cy.x,uy.z,0,-uy.x,hb.z,0,-hb.x,-cy.y,cy.x,0,-uy.y,uy.x,0,-hb.y,hb.x,0];return!(!pP(t,Lw,Nw,Uw,WE)||(t=[1,0,0,0,1,0,0,0,1],!pP(t,Lw,Nw,Uw,WE)))&&(jE.crossVectors(cy,uy),t=[jE.x,jE.y,jE.z],pP(t,Lw,Nw,Uw,WE))}clampPoint(e,t){return t.copy(e).clamp(this.min,this.max)}distanceToPoint(e){return ub.copy(e).clamp(this.min,this.max).sub(e).length()}getBoundingSphere(e){return this.getCenter(e.center),e.radius=.5*this.getSize(ub).length(),e}intersect(e){return this.min.max(e.min),this.max.min(e.max),this.isEmpty()&&this.makeEmpty(),this}union(e){return this.min.min(e.min),this.max.max(e.max),this}applyMatrix4(e){return this.isEmpty()||(F_[0].set(this.min.x,this.min.y,this.min.z).applyMatrix4(e),F_[1].set(this.min.x,this.min.y,this.max.z).applyMatrix4(e),F_[2].set(this.min.x,this.max.y,this.min.z).applyMatrix4(e),F_[3].set(this.min.x,this.max.y,this.max.z).applyMatrix4(e),F_[4].set(this.max.x,this.min.y,this.min.z).applyMatrix4(e),F_[5].set(this.max.x,this.min.y,this.max.z).applyMatrix4(e),F_[6].set(this.max.x,this.max.y,this.min.z).applyMatrix4(e),F_[7].set(this.max.x,this.max.y,this.max.z).applyMatrix4(e),this.setFromPoints(F_)),this}translate(e){return this.min.add(e),this.max.add(e),this}equals(e){return e.min.equals(this.min)&&e.max.equals(this.max)}}const F_=[new Nt,new Nt,new Nt,new Nt,new Nt,new Nt,new Nt,new Nt],ub=new Nt,fP=new cb,Lw=new Nt,Nw=new Nt,Uw=new Nt,cy=new Nt,uy=new Nt,hb=new Nt,LM=new Nt,WE=new Nt,jE=new Nt,db=new Nt;function pP(i,e,t,n,r){for(let s=0,a=i.length-3;s<=a;s+=3){db.fromArray(i,s);const l=r.x*Math.abs(db.x)+r.y*Math.abs(db.y)+r.z*Math.abs(db.z),u=e.dot(db),d=t.dot(db),p=n.dot(db);if(Math.max(-Math.max(u,d,p),Math.min(u,d,p))>l)return!1}return!0}const sJ=new cb,NM=new Nt,AP=new Nt;class O_{constructor(e=new Nt,t=-1){this.center=e,this.radius=t}set(e,t){return this.center.copy(e),this.radius=t,this}setFromPoints(e,t){const n=this.center;void 0!==t?n.copy(t):sJ.setFromPoints(e).getCenter(n);let r=0;for(let s=0,a=e.length;sthis.radius*this.radius&&(t.sub(this.center).normalize(),t.multiplyScalar(this.radius).add(this.center)),t}getBoundingBox(e){return this.isEmpty()?(e.makeEmpty(),e):(e.set(this.center,this.center),e.expandByScalar(this.radius),e)}applyMatrix4(e){return this.center.applyMatrix4(e),this.radius=this.radius*e.getMaxScaleOnAxis(),this}translate(e){return this.center.add(e),this}expandByPoint(e){if(this.isEmpty())return this.center.copy(e),this.radius=0,this;NM.subVectors(e,this.center);const t=NM.lengthSq();if(t>this.radius*this.radius){const n=Math.sqrt(t),r=.5*(n-this.radius);this.center.addScaledVector(NM,r/n),this.radius+=r}return this}union(e){return e.isEmpty()?this:this.isEmpty()?(this.copy(e),this):(!0===this.center.equals(e.center)?this.radius=Math.max(this.radius,e.radius):(AP.subVectors(e.center,this.center).setLength(e.radius),this.expandByPoint(NM.copy(e.center).add(AP)),this.expandByPoint(NM.copy(e.center).sub(AP))),this)}equals(e){return e.center.equals(this.center)&&e.radius===this.radius}clone(){return(new this.constructor).copy(this)}}const R_=new Nt,mP=new Nt,$E=new Nt,hy=new Nt,gP=new Nt,XE=new Nt,_P=new Nt;class KE{constructor(e=new Nt,t=new Nt(0,0,-1)){this.origin=e,this.direction=t}set(e,t){return this.origin.copy(e),this.direction.copy(t),this}copy(e){return this.origin.copy(e.origin),this.direction.copy(e.direction),this}at(e,t){return t.copy(this.direction).multiplyScalar(e).add(this.origin)}lookAt(e){return this.direction.copy(e).sub(this.origin).normalize(),this}recast(e){return this.origin.copy(this.at(e,R_)),this}closestPointToPoint(e,t){t.subVectors(e,this.origin);const n=t.dot(this.direction);return n<0?t.copy(this.origin):t.copy(this.direction).multiplyScalar(n).add(this.origin)}distanceToPoint(e){return Math.sqrt(this.distanceSqToPoint(e))}distanceSqToPoint(e){const t=R_.subVectors(e,this.origin).dot(this.direction);return t<0?this.origin.distanceToSquared(e):(R_.copy(this.direction).multiplyScalar(t).add(this.origin),R_.distanceToSquared(e))}distanceSqToSegment(e,t,n,r){mP.copy(e).add(t).multiplyScalar(.5),$E.copy(t).sub(e).normalize(),hy.copy(this.origin).sub(mP);const s=.5*e.distanceTo(t),a=-this.direction.dot($E),l=hy.dot(this.direction),u=-hy.dot($E),d=hy.lengthSq(),p=Math.abs(1-a*a);let y,C,O,Q;if(p>0)if(y=a*u-l,C=a*l-u,Q=s*p,y>=0)if(C>=-Q)if(C<=Q){const W=1/p;y*=W,C*=W,O=y*(y+a*C+2*l)+C*(a*y+C+2*u)+d}else C=s,y=Math.max(0,-(a*C+l)),O=-y*y+C*(C+2*u)+d;else C=-s,y=Math.max(0,-(a*C+l)),O=-y*y+C*(C+2*u)+d;else C<=-Q?(y=Math.max(0,-(-a*s+l)),C=y>0?-s:Math.min(Math.max(-s,-u),s),O=-y*y+C*(C+2*u)+d):C<=Q?(y=0,C=Math.min(Math.max(-s,-u),s),O=C*(C+2*u)+d):(y=Math.max(0,-(a*s+l)),C=y>0?s:Math.min(Math.max(-s,-u),s),O=-y*y+C*(C+2*u)+d);else C=a>0?-s:s,y=Math.max(0,-(a*C+l)),O=-y*y+C*(C+2*u)+d;return n&&n.copy(this.direction).multiplyScalar(y).add(this.origin),r&&r.copy($E).multiplyScalar(C).add(mP),O}intersectSphere(e,t){R_.subVectors(e.center,this.origin);const n=R_.dot(this.direction),r=R_.dot(R_)-n*n,s=e.radius*e.radius;if(r>s)return null;const a=Math.sqrt(s-r),l=n-a,u=n+a;return l<0&&u<0?null:this.at(l<0?u:l,t)}intersectsSphere(e){return this.distanceSqToPoint(e.center)<=e.radius*e.radius}distanceToPlane(e){const t=e.normal.dot(this.direction);if(0===t)return 0===e.distanceToPoint(this.origin)?0:null;const n=-(this.origin.dot(e.normal)+e.constant)/t;return n>=0?n:null}intersectPlane(e,t){const n=this.distanceToPlane(e);return null===n?null:this.at(n,t)}intersectsPlane(e){const t=e.distanceToPoint(this.origin);return 0===t||e.normal.dot(this.direction)*t<0}intersectBox(e,t){let n,r,s,a,l,u;const d=1/this.direction.x,p=1/this.direction.y,y=1/this.direction.z,C=this.origin;return d>=0?(n=(e.min.x-C.x)*d,r=(e.max.x-C.x)*d):(n=(e.max.x-C.x)*d,r=(e.min.x-C.x)*d),p>=0?(s=(e.min.y-C.y)*p,a=(e.max.y-C.y)*p):(s=(e.max.y-C.y)*p,a=(e.min.y-C.y)*p),n>a||s>r||((s>n||isNaN(n))&&(n=s),(a=0?(l=(e.min.z-C.z)*y,u=(e.max.z-C.z)*y):(l=(e.max.z-C.z)*y,u=(e.min.z-C.z)*y),n>u||l>r)||((l>n||n!=n)&&(n=l),(u=0?n:r,t)}intersectsBox(e){return null!==this.intersectBox(e,R_)}intersectTriangle(e,t,n,r,s){gP.subVectors(t,e),XE.subVectors(n,e),_P.crossVectors(gP,XE);let l,a=this.direction.dot(_P);if(a>0){if(r)return null;l=1}else{if(!(a<0))return null;l=-1,a=-a}hy.subVectors(this.origin,e);const u=l*this.direction.dot(XE.crossVectors(hy,XE));if(u<0)return null;const d=l*this.direction.dot(gP.cross(hy));if(d<0||u+d>a)return null;const p=-l*hy.dot(_P);return p<0?null:this.at(p/a,s)}applyMatrix4(e){return this.origin.applyMatrix4(e),this.direction.transformDirection(e),this}equals(e){return e.origin.equals(this.origin)&&e.direction.equals(this.direction)}clone(){return(new this.constructor).copy(this)}}class Jo{constructor(){Jo.prototype.isMatrix4=!0,this.elements=[1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1]}set(e,t,n,r,s,a,l,u,d,p,y,C,O,Q,W,se){const ye=this.elements;return ye[0]=e,ye[4]=t,ye[8]=n,ye[12]=r,ye[1]=s,ye[5]=a,ye[9]=l,ye[13]=u,ye[2]=d,ye[6]=p,ye[10]=y,ye[14]=C,ye[3]=O,ye[7]=Q,ye[11]=W,ye[15]=se,this}identity(){return this.set(1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1),this}clone(){return(new Jo).fromArray(this.elements)}copy(e){const t=this.elements,n=e.elements;return t[0]=n[0],t[1]=n[1],t[2]=n[2],t[3]=n[3],t[4]=n[4],t[5]=n[5],t[6]=n[6],t[7]=n[7],t[8]=n[8],t[9]=n[9],t[10]=n[10],t[11]=n[11],t[12]=n[12],t[13]=n[13],t[14]=n[14],t[15]=n[15],this}copyPosition(e){const t=this.elements,n=e.elements;return t[12]=n[12],t[13]=n[13],t[14]=n[14],this}setFromMatrix3(e){const t=e.elements;return this.set(t[0],t[3],t[6],0,t[1],t[4],t[7],0,t[2],t[5],t[8],0,0,0,0,1),this}extractBasis(e,t,n){return e.setFromMatrixColumn(this,0),t.setFromMatrixColumn(this,1),n.setFromMatrixColumn(this,2),this}makeBasis(e,t,n){return this.set(e.x,t.x,n.x,0,e.y,t.y,n.y,0,e.z,t.z,n.z,0,0,0,0,1),this}extractRotation(e){const t=this.elements,n=e.elements,r=1/zw.setFromMatrixColumn(e,0).length(),s=1/zw.setFromMatrixColumn(e,1).length(),a=1/zw.setFromMatrixColumn(e,2).length();return t[0]=n[0]*r,t[1]=n[1]*r,t[2]=n[2]*r,t[3]=0,t[4]=n[4]*s,t[5]=n[5]*s,t[6]=n[6]*s,t[7]=0,t[8]=n[8]*a,t[9]=n[9]*a,t[10]=n[10]*a,t[11]=0,t[12]=0,t[13]=0,t[14]=0,t[15]=1,this}makeRotationFromEuler(e){const t=this.elements,n=e.x,r=e.y,s=e.z,a=Math.cos(n),l=Math.sin(n),u=Math.cos(r),d=Math.sin(r),p=Math.cos(s),y=Math.sin(s);if("XYZ"===e.order){const C=a*p,O=a*y,Q=l*p,W=l*y;t[0]=u*p,t[4]=-u*y,t[8]=d,t[1]=O+Q*d,t[5]=C-W*d,t[9]=-l*u,t[2]=W-C*d,t[6]=Q+O*d,t[10]=a*u}else if("YXZ"===e.order){const C=u*p,O=u*y,Q=d*p,W=d*y;t[0]=C+W*l,t[4]=Q*l-O,t[8]=a*d,t[1]=a*y,t[5]=a*p,t[9]=-l,t[2]=O*l-Q,t[6]=W+C*l,t[10]=a*u}else if("ZXY"===e.order){const C=u*p,O=u*y,Q=d*p,W=d*y;t[0]=C-W*l,t[4]=-a*y,t[8]=Q+O*l,t[1]=O+Q*l,t[5]=a*p,t[9]=W-C*l,t[2]=-a*d,t[6]=l,t[10]=a*u}else if("ZYX"===e.order){const C=a*p,O=a*y,Q=l*p,W=l*y;t[0]=u*p,t[4]=Q*d-O,t[8]=C*d+W,t[1]=u*y,t[5]=W*d+C,t[9]=O*d-Q,t[2]=-d,t[6]=l*u,t[10]=a*u}else if("YZX"===e.order){const C=a*u,O=a*d,Q=l*u,W=l*d;t[0]=u*p,t[4]=W-C*y,t[8]=Q*y+O,t[1]=y,t[5]=a*p,t[9]=-l*p,t[2]=-d*p,t[6]=O*y+Q,t[10]=C-W*y}else if("XZY"===e.order){const C=a*u,O=a*d,Q=l*u,W=l*d;t[0]=u*p,t[4]=-y,t[8]=d*p,t[1]=C*y+W,t[5]=a*p,t[9]=O*y-Q,t[2]=Q*y-O,t[6]=l*p,t[10]=W*y+C}return t[3]=0,t[7]=0,t[11]=0,t[12]=0,t[13]=0,t[14]=0,t[15]=1,this}makeRotationFromQuaternion(e){return this.compose(oJ,e,aJ)}lookAt(e,t,n){const r=this.elements;return Vp.subVectors(e,t),0===Vp.lengthSq()&&(Vp.z=1),Vp.normalize(),dy.crossVectors(n,Vp),0===dy.lengthSq()&&(1===Math.abs(n.z)?Vp.x+=1e-4:Vp.z+=1e-4,Vp.normalize(),dy.crossVectors(n,Vp)),dy.normalize(),YE.crossVectors(Vp,dy),r[0]=dy.x,r[4]=YE.x,r[8]=Vp.x,r[1]=dy.y,r[5]=YE.y,r[9]=Vp.y,r[2]=dy.z,r[6]=YE.z,r[10]=Vp.z,this}multiply(e){return this.multiplyMatrices(this,e)}premultiply(e){return this.multiplyMatrices(e,this)}multiplyMatrices(e,t){const n=e.elements,r=t.elements,s=this.elements,a=n[0],l=n[4],u=n[8],d=n[12],p=n[1],y=n[5],C=n[9],O=n[13],Q=n[2],W=n[6],se=n[10],ye=n[14],Le=n[3],we=n[7],He=n[11],gt=n[15],Et=r[0],Yt=r[4],dt=r[8],Ut=r[12],_n=r[1],Hn=r[5],gi=r[9],Vn=r[13],Tn=r[2],yi=r[6],qn=r[10],xi=r[14],si=r[3],zi=r[7],Ki=r[11],cs=r[15];return s[0]=a*Et+l*_n+u*Tn+d*si,s[4]=a*Yt+l*Hn+u*yi+d*zi,s[8]=a*dt+l*gi+u*qn+d*Ki,s[12]=a*Ut+l*Vn+u*xi+d*cs,s[1]=p*Et+y*_n+C*Tn+O*si,s[5]=p*Yt+y*Hn+C*yi+O*zi,s[9]=p*dt+y*gi+C*qn+O*Ki,s[13]=p*Ut+y*Vn+C*xi+O*cs,s[2]=Q*Et+W*_n+se*Tn+ye*si,s[6]=Q*Yt+W*Hn+se*yi+ye*zi,s[10]=Q*dt+W*gi+se*qn+ye*Ki,s[14]=Q*Ut+W*Vn+se*xi+ye*cs,s[3]=Le*Et+we*_n+He*Tn+gt*si,s[7]=Le*Yt+we*Hn+He*yi+gt*zi,s[11]=Le*dt+we*gi+He*qn+gt*Ki,s[15]=Le*Ut+we*Vn+He*xi+gt*cs,this}multiplyScalar(e){const t=this.elements;return t[0]*=e,t[4]*=e,t[8]*=e,t[12]*=e,t[1]*=e,t[5]*=e,t[9]*=e,t[13]*=e,t[2]*=e,t[6]*=e,t[10]*=e,t[14]*=e,t[3]*=e,t[7]*=e,t[11]*=e,t[15]*=e,this}determinant(){const e=this.elements,t=e[0],n=e[4],r=e[8],s=e[12],a=e[1],l=e[5],u=e[9],d=e[13],p=e[2],y=e[6],C=e[10],O=e[14];return e[3]*(+s*u*y-r*d*y-s*l*C+n*d*C+r*l*O-n*u*O)+e[7]*(+t*u*O-t*d*C+s*a*C-r*a*O+r*d*p-s*u*p)+e[11]*(+t*d*y-t*l*O-s*a*y+n*a*O+s*l*p-n*d*p)+e[15]*(-r*l*p-t*u*y+t*l*C+r*a*y-n*a*C+n*u*p)}transpose(){const e=this.elements;let t;return t=e[1],e[1]=e[4],e[4]=t,t=e[2],e[2]=e[8],e[8]=t,t=e[6],e[6]=e[9],e[9]=t,t=e[3],e[3]=e[12],e[12]=t,t=e[7],e[7]=e[13],e[13]=t,t=e[11],e[11]=e[14],e[14]=t,this}setPosition(e,t,n){const r=this.elements;return e.isVector3?(r[12]=e.x,r[13]=e.y,r[14]=e.z):(r[12]=e,r[13]=t,r[14]=n),this}invert(){const e=this.elements,t=e[0],n=e[1],r=e[2],s=e[3],a=e[4],l=e[5],u=e[6],d=e[7],p=e[8],y=e[9],C=e[10],O=e[11],Q=e[12],W=e[13],se=e[14],ye=e[15],Le=y*se*d-W*C*d+W*u*O-l*se*O-y*u*ye+l*C*ye,we=Q*C*d-p*se*d-Q*u*O+a*se*O+p*u*ye-a*C*ye,He=p*W*d-Q*y*d+Q*l*O-a*W*O-p*l*ye+a*y*ye,gt=Q*y*u-p*W*u-Q*l*C+a*W*C+p*l*se-a*y*se,Et=t*Le+n*we+r*He+s*gt;if(0===Et)return this.set(0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0);const Yt=1/Et;return e[0]=Le*Yt,e[1]=(W*C*s-y*se*s-W*r*O+n*se*O+y*r*ye-n*C*ye)*Yt,e[2]=(l*se*s-W*u*s+W*r*d-n*se*d-l*r*ye+n*u*ye)*Yt,e[3]=(y*u*s-l*C*s-y*r*d+n*C*d+l*r*O-n*u*O)*Yt,e[4]=we*Yt,e[5]=(p*se*s-Q*C*s+Q*r*O-t*se*O-p*r*ye+t*C*ye)*Yt,e[6]=(Q*u*s-a*se*s-Q*r*d+t*se*d+a*r*ye-t*u*ye)*Yt,e[7]=(a*C*s-p*u*s+p*r*d-t*C*d-a*r*O+t*u*O)*Yt,e[8]=He*Yt,e[9]=(Q*y*s-p*W*s-Q*n*O+t*W*O+p*n*ye-t*y*ye)*Yt,e[10]=(a*W*s-Q*l*s+Q*n*d-t*W*d-a*n*ye+t*l*ye)*Yt,e[11]=(p*l*s-a*y*s-p*n*d+t*y*d+a*n*O-t*l*O)*Yt,e[12]=gt*Yt,e[13]=(p*W*r-Q*y*r+Q*n*C-t*W*C-p*n*se+t*y*se)*Yt,e[14]=(Q*l*r-a*W*r-Q*n*u+t*W*u+a*n*se-t*l*se)*Yt,e[15]=(a*y*r-p*l*r+p*n*u-t*y*u-a*n*C+t*l*C)*Yt,this}scale(e){const t=this.elements,n=e.x,r=e.y,s=e.z;return t[0]*=n,t[4]*=r,t[8]*=s,t[1]*=n,t[5]*=r,t[9]*=s,t[2]*=n,t[6]*=r,t[10]*=s,t[3]*=n,t[7]*=r,t[11]*=s,this}getMaxScaleOnAxis(){const e=this.elements;return Math.sqrt(Math.max(e[0]*e[0]+e[1]*e[1]+e[2]*e[2],e[4]*e[4]+e[5]*e[5]+e[6]*e[6],e[8]*e[8]+e[9]*e[9]+e[10]*e[10]))}makeTranslation(e,t,n){return this.set(1,0,0,e,0,1,0,t,0,0,1,n,0,0,0,1),this}makeRotationX(e){const t=Math.cos(e),n=Math.sin(e);return this.set(1,0,0,0,0,t,-n,0,0,n,t,0,0,0,0,1),this}makeRotationY(e){const t=Math.cos(e),n=Math.sin(e);return this.set(t,0,n,0,0,1,0,0,-n,0,t,0,0,0,0,1),this}makeRotationZ(e){const t=Math.cos(e),n=Math.sin(e);return this.set(t,-n,0,0,n,t,0,0,0,0,1,0,0,0,0,1),this}makeRotationAxis(e,t){const n=Math.cos(t),r=Math.sin(t),s=1-n,a=e.x,l=e.y,u=e.z,d=s*a,p=s*l;return this.set(d*a+n,d*l-r*u,d*u+r*l,0,d*l+r*u,p*l+n,p*u-r*a,0,d*u-r*l,p*u+r*a,s*u*u+n,0,0,0,0,1),this}makeScale(e,t,n){return this.set(e,0,0,0,0,t,0,0,0,0,n,0,0,0,0,1),this}makeShear(e,t,n,r,s,a){return this.set(1,n,s,0,e,1,a,0,t,r,1,0,0,0,0,1),this}compose(e,t,n){const r=this.elements,s=t._x,a=t._y,l=t._z,u=t._w,d=s+s,p=a+a,y=l+l,C=s*d,O=s*p,Q=s*y,W=a*p,se=a*y,ye=l*y,Le=u*d,we=u*p,He=u*y,gt=n.x,Et=n.y,Yt=n.z;return r[0]=(1-(W+ye))*gt,r[1]=(O+He)*gt,r[2]=(Q-we)*gt,r[3]=0,r[4]=(O-He)*Et,r[5]=(1-(C+ye))*Et,r[6]=(se+Le)*Et,r[7]=0,r[8]=(Q+we)*Yt,r[9]=(se-Le)*Yt,r[10]=(1-(C+W))*Yt,r[11]=0,r[12]=e.x,r[13]=e.y,r[14]=e.z,r[15]=1,this}decompose(e,t,n){const r=this.elements;let s=zw.set(r[0],r[1],r[2]).length();const a=zw.set(r[4],r[5],r[6]).length(),l=zw.set(r[8],r[9],r[10]).length();this.determinant()<0&&(s=-s),e.x=r[12],e.y=r[13],e.z=r[14],km.copy(this);const d=1/s,p=1/a,y=1/l;return km.elements[0]*=d,km.elements[1]*=d,km.elements[2]*=d,km.elements[4]*=p,km.elements[5]*=p,km.elements[6]*=p,km.elements[8]*=y,km.elements[9]*=y,km.elements[10]*=y,t.setFromRotationMatrix(km),n.x=s,n.y=a,n.z=l,this}makePerspective(e,t,n,r,s,a){const l=this.elements,d=2*s/(n-r),p=(t+e)/(t-e),y=(n+r)/(n-r),C=-(a+s)/(a-s),O=-2*a*s/(a-s);return l[0]=2*s/(t-e),l[4]=0,l[8]=p,l[12]=0,l[1]=0,l[5]=d,l[9]=y,l[13]=0,l[2]=0,l[6]=0,l[10]=C,l[14]=O,l[3]=0,l[7]=0,l[11]=-1,l[15]=0,this}makeOrthographic(e,t,n,r,s,a){const l=this.elements,u=1/(t-e),d=1/(n-r),p=1/(a-s),y=(t+e)*u,C=(n+r)*d,O=(a+s)*p;return l[0]=2*u,l[4]=0,l[8]=0,l[12]=-y,l[1]=0,l[5]=2*d,l[9]=0,l[13]=-C,l[2]=0,l[6]=0,l[10]=-2*p,l[14]=-O,l[3]=0,l[7]=0,l[11]=0,l[15]=1,this}equals(e){const t=this.elements,n=e.elements;for(let r=0;r<16;r++)if(t[r]!==n[r])return!1;return!0}fromArray(e,t=0){for(let n=0;n<16;n++)this.elements[n]=e[n+t];return this}toArray(e=[],t=0){const n=this.elements;return e[t]=n[0],e[t+1]=n[1],e[t+2]=n[2],e[t+3]=n[3],e[t+4]=n[4],e[t+5]=n[5],e[t+6]=n[6],e[t+7]=n[7],e[t+8]=n[8],e[t+9]=n[9],e[t+10]=n[10],e[t+11]=n[11],e[t+12]=n[12],e[t+13]=n[13],e[t+14]=n[14],e[t+15]=n[15],e}}const zw=new Nt,km=new Jo,oJ=new Nt(0,0,0),aJ=new Nt(1,1,1),dy=new Nt,YE=new Nt,Vp=new Nt,K7=new Jo,Y7=new Vc;let Z7=(()=>{class i{constructor(t=0,n=0,r=0,s=i.DEFAULT_ORDER){this.isEuler=!0,this._x=t,this._y=n,this._z=r,this._order=s}get x(){return this._x}set x(t){this._x=t,this._onChangeCallback()}get y(){return this._y}set y(t){this._y=t,this._onChangeCallback()}get z(){return this._z}set z(t){this._z=t,this._onChangeCallback()}get order(){return this._order}set order(t){this._order=t,this._onChangeCallback()}set(t,n,r,s=this._order){return this._x=t,this._y=n,this._z=r,this._order=s,this._onChangeCallback(),this}clone(){return new this.constructor(this._x,this._y,this._z,this._order)}copy(t){return this._x=t._x,this._y=t._y,this._z=t._z,this._order=t._order,this._onChangeCallback(),this}setFromRotationMatrix(t,n=this._order,r=!0){const s=t.elements,a=s[0],l=s[4],u=s[8],d=s[1],p=s[5],y=s[9],C=s[2],O=s[6],Q=s[10];switch(n){case"XYZ":this._y=Math.asin(Du(u,-1,1)),Math.abs(u)<.9999999?(this._x=Math.atan2(-y,Q),this._z=Math.atan2(-l,a)):(this._x=Math.atan2(O,p),this._z=0);break;case"YXZ":this._x=Math.asin(-Du(y,-1,1)),Math.abs(y)<.9999999?(this._y=Math.atan2(u,Q),this._z=Math.atan2(d,p)):(this._y=Math.atan2(-C,a),this._z=0);break;case"ZXY":this._x=Math.asin(Du(O,-1,1)),Math.abs(O)<.9999999?(this._y=Math.atan2(-C,Q),this._z=Math.atan2(-l,p)):(this._y=0,this._z=Math.atan2(d,a));break;case"ZYX":this._y=Math.asin(-Du(C,-1,1)),Math.abs(C)<.9999999?(this._x=Math.atan2(O,Q),this._z=Math.atan2(d,a)):(this._x=0,this._z=Math.atan2(-l,p));break;case"YZX":this._z=Math.asin(Du(d,-1,1)),Math.abs(d)<.9999999?(this._x=Math.atan2(-y,p),this._y=Math.atan2(-C,a)):(this._x=0,this._y=Math.atan2(u,Q));break;case"XZY":this._z=Math.asin(-Du(l,-1,1)),Math.abs(l)<.9999999?(this._x=Math.atan2(O,p),this._y=Math.atan2(u,a)):(this._x=Math.atan2(-y,Q),this._y=0);break;default:console.warn("THREE.Euler: .setFromRotationMatrix() encountered an unknown order: "+n)}return this._order=n,!0===r&&this._onChangeCallback(),this}setFromQuaternion(t,n,r){return K7.makeRotationFromQuaternion(t),this.setFromRotationMatrix(K7,n,r)}setFromVector3(t,n=this._order){return this.set(t.x,t.y,t.z,n)}reorder(t){return Y7.setFromEuler(this),this.setFromQuaternion(Y7,t)}equals(t){return t._x===this._x&&t._y===this._y&&t._z===this._z&&t._order===this._order}fromArray(t){return this._x=t[0],this._y=t[1],this._z=t[2],void 0!==t[3]&&(this._order=t[3]),this._onChangeCallback(),this}toArray(t=[],n=0){return t[n]=this._x,t[n+1]=this._y,t[n+2]=this._z,t[n+3]=this._order,t}_onChange(t){return this._onChangeCallback=t,this}_onChangeCallback(){}*[Symbol.iterator](){yield this._x,yield this._y,yield this._z,yield this._order}}return i.DEFAULT_ORDER="XYZ",i})();class yP{constructor(){this.mask=1}set(e){this.mask=(1<>>0}enable(e){this.mask|=1<{class i extends sb{constructor(){super(),this.isObject3D=!0,Object.defineProperty(this,"id",{value:lJ++}),this.uuid=Hp(),this.name="",this.type="Object3D",this.parent=null,this.children=[],this.up=i.DEFAULT_UP.clone();const t=new Nt,n=new Z7,r=new Vc,s=new Nt(1,1,1);n._onChange(function a(){r.setFromEuler(n,!1)}),r._onChange(function l(){n.setFromQuaternion(r,void 0,!1)}),Object.defineProperties(this,{position:{configurable:!0,enumerable:!0,value:t},rotation:{configurable:!0,enumerable:!0,value:n},quaternion:{configurable:!0,enumerable:!0,value:r},scale:{configurable:!0,enumerable:!0,value:s},modelViewMatrix:{value:new Jo},normalMatrix:{value:new Df}}),this.matrix=new Jo,this.matrixWorld=new Jo,this.matrixAutoUpdate=i.DEFAULT_MATRIX_AUTO_UPDATE,this.matrixWorldNeedsUpdate=!1,this.matrixWorldAutoUpdate=i.DEFAULT_MATRIX_WORLD_AUTO_UPDATE,this.layers=new yP,this.visible=!0,this.castShadow=!1,this.receiveShadow=!1,this.frustumCulled=!0,this.renderOrder=0,this.animations=[],this.userData={}}onBeforeRender(){}onAfterRender(){}applyMatrix4(t){this.matrixAutoUpdate&&this.updateMatrix(),this.matrix.premultiply(t),this.matrix.decompose(this.position,this.quaternion,this.scale)}applyQuaternion(t){return this.quaternion.premultiply(t),this}setRotationFromAxisAngle(t,n){this.quaternion.setFromAxisAngle(t,n)}setRotationFromEuler(t){this.quaternion.setFromEuler(t,!0)}setRotationFromMatrix(t){this.quaternion.setFromRotationMatrix(t)}setRotationFromQuaternion(t){this.quaternion.copy(t)}rotateOnAxis(t,n){return Hw.setFromAxisAngle(t,n),this.quaternion.multiply(Hw),this}rotateOnWorldAxis(t,n){return Hw.setFromAxisAngle(t,n),this.quaternion.premultiply(Hw),this}rotateX(t){return this.rotateOnAxis(eN,t)}rotateY(t){return this.rotateOnAxis(tN,t)}rotateZ(t){return this.rotateOnAxis(nN,t)}translateOnAxis(t,n){return J7.copy(t).applyQuaternion(this.quaternion),this.position.add(J7.multiplyScalar(n)),this}translateX(t){return this.translateOnAxis(eN,t)}translateY(t){return this.translateOnAxis(tN,t)}translateZ(t){return this.translateOnAxis(nN,t)}localToWorld(t){return this.updateWorldMatrix(!0,!1),t.applyMatrix4(this.matrixWorld)}worldToLocal(t){return this.updateWorldMatrix(!0,!1),t.applyMatrix4(L_.copy(this.matrixWorld).invert())}lookAt(t,n,r){t.isVector3?ZE.copy(t):ZE.set(t,n,r);const s=this.parent;this.updateWorldMatrix(!0,!1),UM.setFromMatrixPosition(this.matrixWorld),this.isCamera||this.isLight?L_.lookAt(UM,ZE,this.up):L_.lookAt(ZE,UM,this.up),this.quaternion.setFromRotationMatrix(L_),s&&(L_.extractRotation(s.matrixWorld),Hw.setFromRotationMatrix(L_),this.quaternion.premultiply(Hw.invert()))}add(t){if(arguments.length>1){for(let n=0;n1){for(let r=0;r0&&(r=r.concat(l))}return r}getWorldPosition(t){return this.updateWorldMatrix(!0,!1),t.setFromMatrixPosition(this.matrixWorld)}getWorldQuaternion(t){return this.updateWorldMatrix(!0,!1),this.matrixWorld.decompose(UM,t,cJ),t}getWorldScale(t){return this.updateWorldMatrix(!0,!1),this.matrixWorld.decompose(UM,uJ,t),t}getWorldDirection(t){this.updateWorldMatrix(!0,!1);const n=this.matrixWorld.elements;return t.set(n[8],n[9],n[10]).normalize()}raycast(){}traverse(t){t(this);const n=this.children;for(let r=0,s=n.length;r0&&(s.userData=this.userData),s.layers=this.layers.mask,s.matrix=this.matrix.toArray(),!1===this.matrixAutoUpdate&&(s.matrixAutoUpdate=!1),this.isInstancedMesh&&(s.type="InstancedMesh",s.count=this.count,s.instanceMatrix=this.instanceMatrix.toJSON(),null!==this.instanceColor&&(s.instanceColor=this.instanceColor.toJSON())),this.isScene)this.background&&(this.background.isColor?s.background=this.background.toJSON():this.background.isTexture&&(s.background=this.background.toJSON(t).uuid)),this.environment&&this.environment.isTexture&&!0!==this.environment.isRenderTargetTexture&&(s.environment=this.environment.toJSON(t).uuid);else if(this.isMesh||this.isLine||this.isPoints){s.geometry=a(t.geometries,this.geometry);const u=this.geometry.parameters;if(void 0!==u&&void 0!==u.shapes){const d=u.shapes;if(Array.isArray(d))for(let p=0,y=d.length;p0){s.children=[];for(let u=0;u0){s.animations=[];for(let u=0;u0&&(r.geometries=u),d.length>0&&(r.materials=d),p.length>0&&(r.textures=p),y.length>0&&(r.images=y),C.length>0&&(r.shapes=C),O.length>0&&(r.skeletons=O),Q.length>0&&(r.animations=Q),W.length>0&&(r.nodes=W)}return r.object=s,r;function l(u){const d=[];for(const p in u){const y=u[p];delete y.metadata,d.push(y)}return d}}clone(t){return(new this.constructor).copy(this,t)}copy(t,n=!0){if(this.name=t.name,this.up.copy(t.up),this.position.copy(t.position),this.rotation.order=t.rotation.order,this.quaternion.copy(t.quaternion),this.scale.copy(t.scale),this.matrix.copy(t.matrix),this.matrixWorld.copy(t.matrixWorld),this.matrixAutoUpdate=t.matrixAutoUpdate,this.matrixWorldNeedsUpdate=t.matrixWorldNeedsUpdate,this.matrixWorldAutoUpdate=t.matrixWorldAutoUpdate,this.layers.mask=t.layers.mask,this.visible=t.visible,this.castShadow=t.castShadow,this.receiveShadow=t.receiveShadow,this.frustumCulled=t.frustumCulled,this.renderOrder=t.renderOrder,this.userData=JSON.parse(JSON.stringify(t.userData)),!0===n)for(let r=0;r0?r.multiplyScalar(1/Math.sqrt(s)):r.set(0,0,0)}static getBarycoord(e,t,n,r,s){Fm.subVectors(r,t),N_.subVectors(n,t),vP.subVectors(e,t);const a=Fm.dot(Fm),l=Fm.dot(N_),u=Fm.dot(vP),d=N_.dot(N_),p=N_.dot(vP),y=a*d-l*l;if(0===y)return s.set(-2,-1,-1);const C=1/y,O=(d*u-l*p)*C,Q=(a*p-l*u)*C;return s.set(1-O-Q,Q,O)}static containsPoint(e,t,n,r){return this.getBarycoord(e,t,n,r,U_),U_.x>=0&&U_.y>=0&&U_.x+U_.y<=1}static getUV(e,t,n,r,s,a,l,u){return this.getBarycoord(e,t,n,r,U_),u.set(0,0),u.addScaledVector(s,U_.x),u.addScaledVector(a,U_.y),u.addScaledVector(l,U_.z),u}static isFrontFacing(e,t,n,r){return Fm.subVectors(n,t),N_.subVectors(e,t),Fm.cross(N_).dot(r)<0}set(e,t,n){return this.a.copy(e),this.b.copy(t),this.c.copy(n),this}setFromPointsAndIndices(e,t,n,r){return this.a.copy(e[t]),this.b.copy(e[n]),this.c.copy(e[r]),this}setFromAttributeAndIndices(e,t,n,r){return this.a.fromBufferAttribute(e,t),this.b.fromBufferAttribute(e,n),this.c.fromBufferAttribute(e,r),this}clone(){return(new this.constructor).copy(this)}copy(e){return this.a.copy(e.a),this.b.copy(e.b),this.c.copy(e.c),this}getArea(){return Fm.subVectors(this.c,this.b),N_.subVectors(this.a,this.b),.5*Fm.cross(N_).length()}getMidpoint(e){return e.addVectors(this.a,this.b).add(this.c).multiplyScalar(1/3)}getNormal(e){return LA.getNormal(this.a,this.b,this.c,e)}getPlane(e){return e.setFromCoplanarPoints(this.a,this.b,this.c)}getBarycoord(e,t){return LA.getBarycoord(e,this.a,this.b,this.c,t)}getUV(e,t,n,r,s){return LA.getUV(e,this.a,this.b,this.c,t,n,r,s)}containsPoint(e){return LA.containsPoint(e,this.a,this.b,this.c)}isFrontFacing(e){return LA.isFrontFacing(this.a,this.b,this.c,e)}intersectsBox(e){return e.intersectsTriangle(this)}closestPointToPoint(e,t){const n=this.a,r=this.b,s=this.c;let a,l;Vw.subVectors(r,n),Gw.subVectors(s,n),bP.subVectors(e,n);const u=Vw.dot(bP),d=Gw.dot(bP);if(u<=0&&d<=0)return t.copy(n);xP.subVectors(e,r);const p=Vw.dot(xP),y=Gw.dot(xP);if(p>=0&&y<=p)return t.copy(r);const C=u*y-p*d;if(C<=0&&u>=0&&p<=0)return a=u/(u-p),t.copy(n).addScaledVector(Vw,a);wP.subVectors(e,s);const O=Vw.dot(wP),Q=Gw.dot(wP);if(Q>=0&&O<=Q)return t.copy(s);const W=O*d-u*Q;if(W<=0&&d>=0&&Q<=0)return l=d/(d-Q),t.copy(n).addScaledVector(Gw,l);const se=p*Q-O*y;if(se<=0&&y-p>=0&&O-Q>=0)return rN.subVectors(s,r),l=(y-p)/(y-p+(O-Q)),t.copy(r).addScaledVector(rN,l);const ye=1/(se+W+C);return a=W*ye,l=C*ye,t.copy(n).addScaledVector(Vw,a).addScaledVector(Gw,l)}equals(e){return e.a.equals(this.a)&&e.b.equals(this.b)&&e.c.equals(this.c)}}let dJ=0;class ru extends sb{constructor(){super(),this.isMaterial=!0,Object.defineProperty(this,"id",{value:dJ++}),this.uuid=Hp(),this.name="",this.type="Material",this.blending=1,this.side=0,this.vertexColors=!1,this.opacity=1,this.transparent=!1,this.blendSrc=204,this.blendDst=205,this.blendEquation=100,this.blendSrcAlpha=null,this.blendDstAlpha=null,this.blendEquationAlpha=null,this.depthFunc=3,this.depthTest=!0,this.depthWrite=!0,this.stencilWriteMask=255,this.stencilFunc=519,this.stencilRef=0,this.stencilFuncMask=255,this.stencilFail=7680,this.stencilZFail=7680,this.stencilZPass=7680,this.stencilWrite=!1,this.clippingPlanes=null,this.clipIntersection=!1,this.clipShadows=!1,this.shadowSide=null,this.colorWrite=!0,this.precision=null,this.polygonOffset=!1,this.polygonOffsetFactor=0,this.polygonOffsetUnits=0,this.dithering=!1,this.alphaToCoverage=!1,this.premultipliedAlpha=!1,this.forceSinglePass=!1,this.visible=!0,this.toneMapped=!0,this.userData={},this.version=0,this._alphaTest=0}get alphaTest(){return this._alphaTest}set alphaTest(e){this._alphaTest>0!=e>0&&this.version++,this._alphaTest=e}onBuild(){}onBeforeRender(){}onBeforeCompile(){}customProgramCacheKey(){return this.onBeforeCompile.toString()}setValues(e){if(void 0!==e)for(const t in e){const n=e[t];if(void 0===n){console.warn("THREE.Material: '"+t+"' parameter is undefined.");continue}const r=this[t];void 0!==r?r&&r.isColor?r.set(n):r&&r.isVector3&&n&&n.isVector3?r.copy(n):this[t]=n:console.warn("THREE."+this.type+": '"+t+"' is not a property of this material.")}}toJSON(e){const t=void 0===e||"string"==typeof e;t&&(e={textures:{},images:{}});const n={metadata:{version:4.5,type:"Material",generator:"Material.toJSON"}};function r(s){const a=[];for(const l in s){const u=s[l];delete u.metadata,a.push(u)}return a}if(n.uuid=this.uuid,n.type=this.type,""!==this.name&&(n.name=this.name),this.color&&this.color.isColor&&(n.color=this.color.getHex()),void 0!==this.roughness&&(n.roughness=this.roughness),void 0!==this.metalness&&(n.metalness=this.metalness),void 0!==this.sheen&&(n.sheen=this.sheen),this.sheenColor&&this.sheenColor.isColor&&(n.sheenColor=this.sheenColor.getHex()),void 0!==this.sheenRoughness&&(n.sheenRoughness=this.sheenRoughness),this.emissive&&this.emissive.isColor&&(n.emissive=this.emissive.getHex()),this.emissiveIntensity&&1!==this.emissiveIntensity&&(n.emissiveIntensity=this.emissiveIntensity),this.specular&&this.specular.isColor&&(n.specular=this.specular.getHex()),void 0!==this.specularIntensity&&(n.specularIntensity=this.specularIntensity),this.specularColor&&this.specularColor.isColor&&(n.specularColor=this.specularColor.getHex()),void 0!==this.shininess&&(n.shininess=this.shininess),void 0!==this.clearcoat&&(n.clearcoat=this.clearcoat),void 0!==this.clearcoatRoughness&&(n.clearcoatRoughness=this.clearcoatRoughness),this.clearcoatMap&&this.clearcoatMap.isTexture&&(n.clearcoatMap=this.clearcoatMap.toJSON(e).uuid),this.clearcoatRoughnessMap&&this.clearcoatRoughnessMap.isTexture&&(n.clearcoatRoughnessMap=this.clearcoatRoughnessMap.toJSON(e).uuid),this.clearcoatNormalMap&&this.clearcoatNormalMap.isTexture&&(n.clearcoatNormalMap=this.clearcoatNormalMap.toJSON(e).uuid,n.clearcoatNormalScale=this.clearcoatNormalScale.toArray()),void 0!==this.iridescence&&(n.iridescence=this.iridescence),void 0!==this.iridescenceIOR&&(n.iridescenceIOR=this.iridescenceIOR),void 0!==this.iridescenceThicknessRange&&(n.iridescenceThicknessRange=this.iridescenceThicknessRange),this.iridescenceMap&&this.iridescenceMap.isTexture&&(n.iridescenceMap=this.iridescenceMap.toJSON(e).uuid),this.iridescenceThicknessMap&&this.iridescenceThicknessMap.isTexture&&(n.iridescenceThicknessMap=this.iridescenceThicknessMap.toJSON(e).uuid),this.map&&this.map.isTexture&&(n.map=this.map.toJSON(e).uuid),this.matcap&&this.matcap.isTexture&&(n.matcap=this.matcap.toJSON(e).uuid),this.alphaMap&&this.alphaMap.isTexture&&(n.alphaMap=this.alphaMap.toJSON(e).uuid),this.lightMap&&this.lightMap.isTexture&&(n.lightMap=this.lightMap.toJSON(e).uuid,n.lightMapIntensity=this.lightMapIntensity),this.aoMap&&this.aoMap.isTexture&&(n.aoMap=this.aoMap.toJSON(e).uuid,n.aoMapIntensity=this.aoMapIntensity),this.bumpMap&&this.bumpMap.isTexture&&(n.bumpMap=this.bumpMap.toJSON(e).uuid,n.bumpScale=this.bumpScale),this.normalMap&&this.normalMap.isTexture&&(n.normalMap=this.normalMap.toJSON(e).uuid,n.normalMapType=this.normalMapType,n.normalScale=this.normalScale.toArray()),this.displacementMap&&this.displacementMap.isTexture&&(n.displacementMap=this.displacementMap.toJSON(e).uuid,n.displacementScale=this.displacementScale,n.displacementBias=this.displacementBias),this.roughnessMap&&this.roughnessMap.isTexture&&(n.roughnessMap=this.roughnessMap.toJSON(e).uuid),this.metalnessMap&&this.metalnessMap.isTexture&&(n.metalnessMap=this.metalnessMap.toJSON(e).uuid),this.emissiveMap&&this.emissiveMap.isTexture&&(n.emissiveMap=this.emissiveMap.toJSON(e).uuid),this.specularMap&&this.specularMap.isTexture&&(n.specularMap=this.specularMap.toJSON(e).uuid),this.specularIntensityMap&&this.specularIntensityMap.isTexture&&(n.specularIntensityMap=this.specularIntensityMap.toJSON(e).uuid),this.specularColorMap&&this.specularColorMap.isTexture&&(n.specularColorMap=this.specularColorMap.toJSON(e).uuid),this.envMap&&this.envMap.isTexture&&(n.envMap=this.envMap.toJSON(e).uuid,void 0!==this.combine&&(n.combine=this.combine)),void 0!==this.envMapIntensity&&(n.envMapIntensity=this.envMapIntensity),void 0!==this.reflectivity&&(n.reflectivity=this.reflectivity),void 0!==this.refractionRatio&&(n.refractionRatio=this.refractionRatio),this.gradientMap&&this.gradientMap.isTexture&&(n.gradientMap=this.gradientMap.toJSON(e).uuid),void 0!==this.transmission&&(n.transmission=this.transmission),this.transmissionMap&&this.transmissionMap.isTexture&&(n.transmissionMap=this.transmissionMap.toJSON(e).uuid),void 0!==this.thickness&&(n.thickness=this.thickness),this.thicknessMap&&this.thicknessMap.isTexture&&(n.thicknessMap=this.thicknessMap.toJSON(e).uuid),void 0!==this.attenuationDistance&&this.attenuationDistance!==1/0&&(n.attenuationDistance=this.attenuationDistance),void 0!==this.attenuationColor&&(n.attenuationColor=this.attenuationColor.getHex()),void 0!==this.size&&(n.size=this.size),null!==this.shadowSide&&(n.shadowSide=this.shadowSide),void 0!==this.sizeAttenuation&&(n.sizeAttenuation=this.sizeAttenuation),1!==this.blending&&(n.blending=this.blending),0!==this.side&&(n.side=this.side),this.vertexColors&&(n.vertexColors=!0),this.opacity<1&&(n.opacity=this.opacity),!0===this.transparent&&(n.transparent=this.transparent),n.depthFunc=this.depthFunc,n.depthTest=this.depthTest,n.depthWrite=this.depthWrite,n.colorWrite=this.colorWrite,n.stencilWrite=this.stencilWrite,n.stencilWriteMask=this.stencilWriteMask,n.stencilFunc=this.stencilFunc,n.stencilRef=this.stencilRef,n.stencilFuncMask=this.stencilFuncMask,n.stencilFail=this.stencilFail,n.stencilZFail=this.stencilZFail,n.stencilZPass=this.stencilZPass,void 0!==this.rotation&&0!==this.rotation&&(n.rotation=this.rotation),!0===this.polygonOffset&&(n.polygonOffset=!0),0!==this.polygonOffsetFactor&&(n.polygonOffsetFactor=this.polygonOffsetFactor),0!==this.polygonOffsetUnits&&(n.polygonOffsetUnits=this.polygonOffsetUnits),void 0!==this.linewidth&&1!==this.linewidth&&(n.linewidth=this.linewidth),void 0!==this.dashSize&&(n.dashSize=this.dashSize),void 0!==this.gapSize&&(n.gapSize=this.gapSize),void 0!==this.scale&&(n.scale=this.scale),!0===this.dithering&&(n.dithering=!0),this.alphaTest>0&&(n.alphaTest=this.alphaTest),!0===this.alphaToCoverage&&(n.alphaToCoverage=this.alphaToCoverage),!0===this.premultipliedAlpha&&(n.premultipliedAlpha=this.premultipliedAlpha),!0===this.forceSinglePass&&(n.forceSinglePass=this.forceSinglePass),!0===this.wireframe&&(n.wireframe=this.wireframe),this.wireframeLinewidth>1&&(n.wireframeLinewidth=this.wireframeLinewidth),"round"!==this.wireframeLinecap&&(n.wireframeLinecap=this.wireframeLinecap),"round"!==this.wireframeLinejoin&&(n.wireframeLinejoin=this.wireframeLinejoin),!0===this.flatShading&&(n.flatShading=this.flatShading),!1===this.visible&&(n.visible=!1),!1===this.toneMapped&&(n.toneMapped=!1),!1===this.fog&&(n.fog=!1),Object.keys(this.userData).length>0&&(n.userData=this.userData),t){const s=r(e.textures),a=r(e.images);s.length>0&&(n.textures=s),a.length>0&&(n.images=a)}return n}clone(){return(new this.constructor).copy(this)}copy(e){this.name=e.name,this.blending=e.blending,this.side=e.side,this.vertexColors=e.vertexColors,this.opacity=e.opacity,this.transparent=e.transparent,this.blendSrc=e.blendSrc,this.blendDst=e.blendDst,this.blendEquation=e.blendEquation,this.blendSrcAlpha=e.blendSrcAlpha,this.blendDstAlpha=e.blendDstAlpha,this.blendEquationAlpha=e.blendEquationAlpha,this.depthFunc=e.depthFunc,this.depthTest=e.depthTest,this.depthWrite=e.depthWrite,this.stencilWriteMask=e.stencilWriteMask,this.stencilFunc=e.stencilFunc,this.stencilRef=e.stencilRef,this.stencilFuncMask=e.stencilFuncMask,this.stencilFail=e.stencilFail,this.stencilZFail=e.stencilZFail,this.stencilZPass=e.stencilZPass,this.stencilWrite=e.stencilWrite;const t=e.clippingPlanes;let n=null;if(null!==t){const r=t.length;n=new Array(r);for(let s=0;s!==r;++s)n[s]=t[s].clone()}return this.clippingPlanes=n,this.clipIntersection=e.clipIntersection,this.clipShadows=e.clipShadows,this.shadowSide=e.shadowSide,this.colorWrite=e.colorWrite,this.precision=e.precision,this.polygonOffset=e.polygonOffset,this.polygonOffsetFactor=e.polygonOffsetFactor,this.polygonOffsetUnits=e.polygonOffsetUnits,this.dithering=e.dithering,this.alphaTest=e.alphaTest,this.alphaToCoverage=e.alphaToCoverage,this.premultipliedAlpha=e.premultipliedAlpha,this.forceSinglePass=e.forceSinglePass,this.visible=e.visible,this.toneMapped=e.toneMapped,this.userData=JSON.parse(JSON.stringify(e.userData)),this}dispose(){this.dispatchEvent({type:"dispose"})}set needsUpdate(e){!0===e&&this.version++}}class xh extends ru{constructor(e){super(),this.isMeshBasicMaterial=!0,this.type="MeshBasicMaterial",this.color=new Lr(16777215),this.map=null,this.lightMap=null,this.lightMapIntensity=1,this.aoMap=null,this.aoMapIntensity=1,this.specularMap=null,this.alphaMap=null,this.envMap=null,this.combine=0,this.reflectivity=1,this.refractionRatio=.98,this.wireframe=!1,this.wireframeLinewidth=1,this.wireframeLinecap="round",this.wireframeLinejoin="round",this.fog=!0,this.setValues(e)}copy(e){return super.copy(e),this.color.copy(e.color),this.map=e.map,this.lightMap=e.lightMap,this.lightMapIntensity=e.lightMapIntensity,this.aoMap=e.aoMap,this.aoMapIntensity=e.aoMapIntensity,this.specularMap=e.specularMap,this.alphaMap=e.alphaMap,this.envMap=e.envMap,this.combine=e.combine,this.reflectivity=e.reflectivity,this.refractionRatio=e.refractionRatio,this.wireframe=e.wireframe,this.wireframeLinewidth=e.wireframeLinewidth,this.wireframeLinecap=e.wireframeLinecap,this.wireframeLinejoin=e.wireframeLinejoin,this.fog=e.fog,this}}const $u=new Nt,JE=new ji;class va{constructor(e,t,n=!1){if(Array.isArray(e))throw new TypeError("THREE.BufferAttribute: array should be a Typed Array.");this.isBufferAttribute=!0,this.name="",this.array=e,this.itemSize=t,this.count=void 0!==e?e.length/t:0,this.normalized=n,this.usage=35044,this.updateRange={offset:0,count:-1},this.version=0}onUploadCallback(){}set needsUpdate(e){!0===e&&this.version++}setUsage(e){return this.usage=e,this}copy(e){return this.name=e.name,this.array=new e.array.constructor(e.array),this.itemSize=e.itemSize,this.count=e.count,this.normalized=e.normalized,this.usage=e.usage,this}copyAt(e,t,n){e*=this.itemSize,n*=t.itemSize;for(let r=0,s=this.itemSize;r0&&(e.userData=this.userData),void 0!==this.parameters){const u=this.parameters;for(const d in u)void 0!==u[d]&&(e[d]=u[d]);return e}e.data={attributes:{}};const t=this.index;null!==t&&(e.data.index={type:t.array.constructor.name,array:Array.prototype.slice.call(t.array)});const n=this.attributes;for(const u in n)e.data.attributes[u]=n[u].toJSON(e.data);const r={};let s=!1;for(const u in this.morphAttributes){const d=this.morphAttributes[u],p=[];for(let y=0,C=d.length;y0&&(r[u]=p,s=!0)}s&&(e.data.morphAttributes=r,e.data.morphTargetsRelative=this.morphTargetsRelative);const a=this.groups;a.length>0&&(e.data.groups=JSON.parse(JSON.stringify(a)));const l=this.boundingSphere;return null!==l&&(e.data.boundingSphere={center:l.center.toArray(),radius:l.radius}),e}clone(){return(new this.constructor).copy(this)}copy(e){this.index=null,this.attributes={},this.morphAttributes={},this.groups=[],this.boundingBox=null,this.boundingSphere=null;const t={};this.name=e.name;const n=e.index;null!==n&&this.setIndex(n.clone(t));const r=e.attributes;for(const d in r)this.setAttribute(d,r[d].clone(t));const s=e.morphAttributes;for(const d in s){const p=[],y=s[d];for(let C=0,O=y.length;C0){const r=t[n[0]];if(void 0!==r){this.morphTargetInfluences=[],this.morphTargetDictionary={};for(let s=0,a=r.length;st.far?null:{distance:d,point:s4.clone(),object:i}}(i,e,t,n,HM,VM,GM,TP);if(d){r&&(t4.fromBufferAttribute(r,a),n4.fromBufferAttribute(r,l),r4.fromBufferAttribute(r,u),d.uv=LA.getUV(TP,HM,VM,GM,t4,n4,r4,new ji)),s&&(t4.fromBufferAttribute(s,a),n4.fromBufferAttribute(s,l),r4.fromBufferAttribute(s,u),d.uv2=LA.getUV(TP,HM,VM,GM,t4,n4,r4,new ji));const p={a,b:l,c:u,normal:new Nt,materialIndex:0};LA.getNormal(HM,VM,GM,p.normal),d.face=p}return d}class Om extends Co{constructor(e=1,t=1,n=1,r=1,s=1,a=1){super(),this.type="BoxGeometry",this.parameters={width:e,height:t,depth:n,widthSegments:r,heightSegments:s,depthSegments:a};const l=this;r=Math.floor(r),s=Math.floor(s),a=Math.floor(a);const u=[],d=[],p=[],y=[];let C=0,O=0;function Q(W,se,ye,Le,we,He,gt,Et,Yt,dt,Ut){const _n=He/Yt,Hn=gt/dt,gi=He/2,Vn=gt/2,Tn=Et/2,yi=Yt+1,qn=dt+1;let xi=0,si=0;const zi=new Nt;for(let Ki=0;Ki0?1:-1,p.push(zi.x,zi.y,zi.z),y.push(oi/Yt),y.push(1-Ki/dt),xi+=1}for(let Ki=0;Ki0&&(t.defines=this.defines),t.vertexShader=this.vertexShader,t.fragmentShader=this.fragmentShader;const n={};for(const r in this.extensions)!0===this.extensions[r]&&(n[r]=!0);return Object.keys(n).length>0&&(t.extensions=n),t}}class DP extends Bc{constructor(){super(),this.isCamera=!0,this.type="Camera",this.matrixWorldInverse=new Jo,this.projectionMatrix=new Jo,this.projectionMatrixInverse=new Jo}copy(e,t){return super.copy(e,t),this.matrixWorldInverse.copy(e.matrixWorldInverse),this.projectionMatrix.copy(e.projectionMatrix),this.projectionMatrixInverse.copy(e.projectionMatrixInverse),this}getWorldDirection(e){this.updateWorldMatrix(!0,!1);const t=this.matrixWorld.elements;return e.set(-t[8],-t[9],-t[10]).normalize()}updateMatrixWorld(e){super.updateMatrixWorld(e),this.matrixWorldInverse.copy(this.matrixWorld).invert()}updateWorldMatrix(e,t){super.updateWorldMatrix(e,t),this.matrixWorldInverse.copy(this.matrixWorld).invert()}clone(){return(new this.constructor).copy(this)}}class jh extends DP{constructor(e=50,t=1,n=.1,r=2e3){super(),this.isPerspectiveCamera=!0,this.type="PerspectiveCamera",this.fov=e,this.zoom=1,this.near=n,this.far=r,this.focus=10,this.aspect=t,this.view=null,this.filmGauge=35,this.filmOffset=0,this.updateProjectionMatrix()}copy(e,t){return super.copy(e,t),this.fov=e.fov,this.zoom=e.zoom,this.near=e.near,this.far=e.far,this.focus=e.focus,this.aspect=e.aspect,this.view=null===e.view?null:Object.assign({},e.view),this.filmGauge=e.filmGauge,this.filmOffset=e.filmOffset,this}setFocalLength(e){const t=.5*this.getFilmHeight()/e;this.fov=2*FM*Math.atan(t),this.updateProjectionMatrix()}getFocalLength(){const e=Math.tan(.5*ob*this.fov);return.5*this.getFilmHeight()/e}getEffectiveFOV(){return 2*FM*Math.atan(Math.tan(.5*ob*this.fov)/this.zoom)}getFilmWidth(){return this.filmGauge*Math.min(this.aspect,1)}getFilmHeight(){return this.filmGauge/Math.max(this.aspect,1)}setViewOffset(e,t,n,r,s,a){this.aspect=e/t,null===this.view&&(this.view={enabled:!0,fullWidth:1,fullHeight:1,offsetX:0,offsetY:0,width:1,height:1}),this.view.enabled=!0,this.view.fullWidth=e,this.view.fullHeight=t,this.view.offsetX=n,this.view.offsetY=r,this.view.width=s,this.view.height=a,this.updateProjectionMatrix()}clearViewOffset(){null!==this.view&&(this.view.enabled=!1),this.updateProjectionMatrix()}updateProjectionMatrix(){const e=this.near;let t=e*Math.tan(.5*ob*this.fov)/this.zoom,n=2*t,r=this.aspect*n,s=-.5*r;const a=this.view;if(null!==this.view&&this.view.enabled){const u=a.fullWidth,d=a.fullHeight;s+=a.offsetX*r/u,t-=a.offsetY*n/d,r*=a.width/u,n*=a.height/d}const l=this.filmOffset;0!==l&&(s+=e*l/this.getFilmWidth()),this.projectionMatrix.makePerspective(s,s+r,t,t-n,e,this.far),this.projectionMatrixInverse.copy(this.projectionMatrix).invert()}toJSON(e){const t=super.toJSON(e);return t.object.fov=this.fov,t.object.zoom=this.zoom,t.object.near=this.near,t.object.far=this.far,t.object.focus=this.focus,t.object.aspect=this.aspect,null!==this.view&&(t.object.view=Object.assign({},this.view)),t.object.filmGauge=this.filmGauge,t.object.filmOffset=this.filmOffset,t}}class _J extends Bc{constructor(e,t,n){super(),this.type="CubeCamera",this.renderTarget=n;const r=new jh(-90,1,e,t);r.layers=this.layers,r.up.set(0,1,0),r.lookAt(1,0,0),this.add(r);const s=new jh(-90,1,e,t);s.layers=this.layers,s.up.set(0,1,0),s.lookAt(-1,0,0),this.add(s);const a=new jh(-90,1,e,t);a.layers=this.layers,a.up.set(0,0,-1),a.lookAt(0,1,0),this.add(a);const l=new jh(-90,1,e,t);l.layers=this.layers,l.up.set(0,0,1),l.lookAt(0,-1,0),this.add(l);const u=new jh(-90,1,e,t);u.layers=this.layers,u.up.set(0,1,0),u.lookAt(0,0,1),this.add(u);const d=new jh(-90,1,e,t);d.layers=this.layers,d.up.set(0,1,0),d.lookAt(0,0,-1),this.add(d)}update(e,t){null===this.parent&&this.updateMatrixWorld();const n=this.renderTarget,[r,s,a,l,u,d]=this.children,p=e.getRenderTarget(),y=e.toneMapping,C=e.xr.enabled;e.toneMapping=0,e.xr.enabled=!1;const O=n.texture.generateMipmaps;n.texture.generateMipmaps=!1,e.setRenderTarget(n,0),e.render(t,r),e.setRenderTarget(n,1),e.render(t,s),e.setRenderTarget(n,2),e.render(t,a),e.setRenderTarget(n,3),e.render(t,l),e.setRenderTarget(n,4),e.render(t,u),n.texture.generateMipmaps=O,e.setRenderTarget(n,5),e.render(t,d),e.setRenderTarget(p),e.toneMapping=y,e.xr.enabled=C,n.texture.needsPMREMUpdate=!0}}class a4 extends RA{constructor(e,t,n,r,s,a,l,u,d,p){super(e=void 0!==e?e:[],t=void 0!==t?t:301,n,r,s,a,l,u,d,p),this.isCubeTexture=!0,this.flipY=!1}get images(){return this.image}set images(e){this.image=e}}class yJ extends If{constructor(e=1,t={}){super(e,e,t),this.isWebGLCubeRenderTarget=!0;const n={width:e,height:e,depth:1};this.texture=new a4([n,n,n,n,n,n],t.mapping,t.wrapS,t.wrapT,t.magFilter,t.minFilter,t.format,t.type,t.anisotropy,t.encoding),this.texture.isRenderTargetTexture=!0,this.texture.generateMipmaps=void 0!==t.generateMipmaps&&t.generateMipmaps,this.texture.minFilter=void 0!==t.minFilter?t.minFilter:iu}fromEquirectangularTexture(e,t){this.texture.type=t.type,this.texture.encoding=t.encoding,this.texture.generateMipmaps=t.generateMipmaps,this.texture.minFilter=t.minFilter,this.texture.magFilter=t.magFilter;const n_uniforms={tEquirect:{value:null}},n_vertexShader="\n\n\t\t\t\tvarying vec3 vWorldDirection;\n\n\t\t\t\tvec3 transformDirection( in vec3 dir, in mat4 matrix ) {\n\n\t\t\t\t\treturn normalize( ( matrix * vec4( dir, 0.0 ) ).xyz );\n\n\t\t\t\t}\n\n\t\t\t\tvoid main() {\n\n\t\t\t\t\tvWorldDirection = transformDirection( position, modelMatrix );\n\n\t\t\t\t\t#include \n\t\t\t\t\t#include \n\n\t\t\t\t}\n\t\t\t",n_fragmentShader="\n\n\t\t\t\tuniform sampler2D tEquirect;\n\n\t\t\t\tvarying vec3 vWorldDirection;\n\n\t\t\t\t#include \n\n\t\t\t\tvoid main() {\n\n\t\t\t\t\tvec3 direction = normalize( vWorldDirection );\n\n\t\t\t\t\tvec2 sampleUV = equirectUv( direction );\n\n\t\t\t\t\tgl_FragColor = texture2D( tEquirect, sampleUV );\n\n\t\t\t\t}\n\t\t\t",r=new Om(5,5,5),s=new Td({name:"CubemapFromEquirect",uniforms:Ww(n_uniforms),vertexShader:n_vertexShader,fragmentShader:n_fragmentShader,side:1,blending:0});s.uniforms.tEquirect.value=t;const a=new Pa(r,s),l=t.minFilter;return t.minFilter===o0&&(t.minFilter=iu),new _J(1,10,this).update(e,a),t.minFilter=l,a.geometry.dispose(),a.material.dispose(),this}clear(e,t,n,r){const s=e.getRenderTarget();for(let a=0;a<6;a++)e.setRenderTarget(this,a),e.clear(t,n,r);e.setRenderTarget(s)}}const BP=new Nt,vJ=new Nt,bJ=new Df;class Rm{constructor(e=new Nt(1,0,0),t=0){this.isPlane=!0,this.normal=e,this.constant=t}set(e,t){return this.normal.copy(e),this.constant=t,this}setComponents(e,t,n,r){return this.normal.set(e,t,n),this.constant=r,this}setFromNormalAndCoplanarPoint(e,t){return this.normal.copy(e),this.constant=-t.dot(this.normal),this}setFromCoplanarPoints(e,t,n){const r=BP.subVectors(n,t).cross(vJ.subVectors(e,t)).normalize();return this.setFromNormalAndCoplanarPoint(r,e),this}copy(e){return this.normal.copy(e.normal),this.constant=e.constant,this}normalize(){const e=1/this.normal.length();return this.normal.multiplyScalar(e),this.constant*=e,this}negate(){return this.constant*=-1,this.normal.negate(),this}distanceToPoint(e){return this.normal.dot(e)+this.constant}distanceToSphere(e){return this.distanceToPoint(e.center)-e.radius}projectPoint(e,t){return t.copy(this.normal).multiplyScalar(-this.distanceToPoint(e)).add(e)}intersectLine(e,t){const n=e.delta(BP),r=this.normal.dot(n);if(0===r)return 0===this.distanceToPoint(e.start)?t.copy(e.start):null;const s=-(e.start.dot(this.normal)+this.constant)/r;return s<0||s>1?null:t.copy(n).multiplyScalar(s).add(e.start)}intersectsLine(e){const t=this.distanceToPoint(e.start),n=this.distanceToPoint(e.end);return t<0&&n>0||n<0&&t>0}intersectsBox(e){return e.intersectsPlane(this)}intersectsSphere(e){return e.intersectsPlane(this)}coplanarPoint(e){return e.copy(this.normal).multiplyScalar(-this.constant)}applyMatrix4(e,t){const n=t||bJ.getNormalMatrix(e),r=this.coplanarPoint(BP).applyMatrix4(e),s=this.normal.applyMatrix3(n).normalize();return this.constant=-r.dot(s),this}translate(e){return this.constant-=e.dot(this.normal),this}equals(e){return e.normal.equals(this.normal)&&e.constant===this.constant}clone(){return(new this.constructor).copy(this)}}const Xw=new O_,l4=new Nt;class IP{constructor(e=new Rm,t=new Rm,n=new Rm,r=new Rm,s=new Rm,a=new Rm){this.planes=[e,t,n,r,s,a]}set(e,t,n,r,s,a){const l=this.planes;return l[0].copy(e),l[1].copy(t),l[2].copy(n),l[3].copy(r),l[4].copy(s),l[5].copy(a),this}copy(e){const t=this.planes;for(let n=0;n<6;n++)t[n].copy(e.planes[n]);return this}setFromProjectionMatrix(e){const t=this.planes,n=e.elements,r=n[0],s=n[1],a=n[2],l=n[3],u=n[4],d=n[5],p=n[6],y=n[7],C=n[8],O=n[9],Q=n[10],W=n[11],se=n[12],ye=n[13],Le=n[14],we=n[15];return t[0].setComponents(l-r,y-u,W-C,we-se).normalize(),t[1].setComponents(l+r,y+u,W+C,we+se).normalize(),t[2].setComponents(l+s,y+d,W+O,we+ye).normalize(),t[3].setComponents(l-s,y-d,W-O,we-ye).normalize(),t[4].setComponents(l-a,y-p,W-Q,we-Le).normalize(),t[5].setComponents(l+a,y+p,W+Q,we+Le).normalize(),this}intersectsObject(e){const t=e.geometry;return null===t.boundingSphere&&t.computeBoundingSphere(),Xw.copy(t.boundingSphere).applyMatrix4(e.matrixWorld),this.intersectsSphere(Xw)}intersectsSprite(e){return Xw.center.set(0,0,0),Xw.radius=.7071067811865476,Xw.applyMatrix4(e.matrixWorld),this.intersectsSphere(Xw)}intersectsSphere(e){const t=this.planes,n=e.center,r=-e.radius;for(let s=0;s<6;s++)if(t[s].distanceToPoint(n)0?e.max.x:e.min.x,l4.y=r.normal.y>0?e.max.y:e.min.y,l4.z=r.normal.z>0?e.max.z:e.min.z,r.distanceToPoint(l4)<0)return!1}return!0}containsPoint(e){const t=this.planes;for(let n=0;n<6;n++)if(t[n].distanceToPoint(e)<0)return!1;return!0}clone(){return(new this.constructor).copy(this)}}function cN(){let i=null,e=!1,t=null,n=null;function r(s,a){t(s,a),n=i.requestAnimationFrame(r)}return{start:function(){!0!==e&&null!==t&&(n=i.requestAnimationFrame(r),e=!0)},stop:function(){i.cancelAnimationFrame(n),e=!1},setAnimationLoop:function(s){t=s},setContext:function(s){i=s}}}function xJ(i,e){const t=e.isWebGL2,n=new WeakMap;return{get:function a(d){return d.isInterleavedBufferAttribute&&(d=d.data),n.get(d)},remove:function l(d){d.isInterleavedBufferAttribute&&(d=d.data);const p=n.get(d);p&&(i.deleteBuffer(p.buffer),n.delete(d))},update:function u(d,p){if(d.isGLBufferAttribute){const C=n.get(d);return void((!C||C.version 0.0 ) ? v : 0.5 * inversesqrt( max( 1.0 - x * x, 1e-7 ) ) - v;\n\treturn cross( v1, v2 ) * theta_sintheta;\n}\nvec3 LTC_Evaluate( const in vec3 N, const in vec3 V, const in vec3 P, const in mat3 mInv, const in vec3 rectCoords[ 4 ] ) {\n\tvec3 v1 = rectCoords[ 1 ] - rectCoords[ 0 ];\n\tvec3 v2 = rectCoords[ 3 ] - rectCoords[ 0 ];\n\tvec3 lightNormal = cross( v1, v2 );\n\tif( dot( lightNormal, P - rectCoords[ 0 ] ) < 0.0 ) return vec3( 0.0 );\n\tvec3 T1, T2;\n\tT1 = normalize( V - N * dot( V, N ) );\n\tT2 = - cross( N, T1 );\n\tmat3 mat = mInv * transposeMat3( mat3( T1, T2, N ) );\n\tvec3 coords[ 4 ];\n\tcoords[ 0 ] = mat * ( rectCoords[ 0 ] - P );\n\tcoords[ 1 ] = mat * ( rectCoords[ 1 ] - P );\n\tcoords[ 2 ] = mat * ( rectCoords[ 2 ] - P );\n\tcoords[ 3 ] = mat * ( rectCoords[ 3 ] - P );\n\tcoords[ 0 ] = normalize( coords[ 0 ] );\n\tcoords[ 1 ] = normalize( coords[ 1 ] );\n\tcoords[ 2 ] = normalize( coords[ 2 ] );\n\tcoords[ 3 ] = normalize( coords[ 3 ] );\n\tvec3 vectorFormFactor = vec3( 0.0 );\n\tvectorFormFactor += LTC_EdgeVectorFormFactor( coords[ 0 ], coords[ 1 ] );\n\tvectorFormFactor += LTC_EdgeVectorFormFactor( coords[ 1 ], coords[ 2 ] );\n\tvectorFormFactor += LTC_EdgeVectorFormFactor( coords[ 2 ], coords[ 3 ] );\n\tvectorFormFactor += LTC_EdgeVectorFormFactor( coords[ 3 ], coords[ 0 ] );\n\tfloat result = LTC_ClippedSphereFormFactor( vectorFormFactor );\n\treturn vec3( result );\n}\nfloat G_BlinnPhong_Implicit( ) {\n\treturn 0.25;\n}\nfloat D_BlinnPhong( const in float shininess, const in float dotNH ) {\n\treturn RECIPROCAL_PI * ( shininess * 0.5 + 1.0 ) * pow( dotNH, shininess );\n}\nvec3 BRDF_BlinnPhong( const in vec3 lightDir, const in vec3 viewDir, const in vec3 normal, const in vec3 specularColor, const in float shininess ) {\n\tvec3 halfDir = normalize( lightDir + viewDir );\n\tfloat dotNH = saturate( dot( normal, halfDir ) );\n\tfloat dotVH = saturate( dot( viewDir, halfDir ) );\n\tvec3 F = F_Schlick( specularColor, 1.0, dotVH );\n\tfloat G = G_BlinnPhong_Implicit( );\n\tfloat D = D_BlinnPhong( shininess, dotNH );\n\treturn F * ( G * D );\n}\n#if defined( USE_SHEEN )\nfloat D_Charlie( float roughness, float dotNH ) {\n\tfloat alpha = pow2( roughness );\n\tfloat invAlpha = 1.0 / alpha;\n\tfloat cos2h = dotNH * dotNH;\n\tfloat sin2h = max( 1.0 - cos2h, 0.0078125 );\n\treturn ( 2.0 + invAlpha ) * pow( sin2h, invAlpha * 0.5 ) / ( 2.0 * PI );\n}\nfloat V_Neubelt( float dotNV, float dotNL ) {\n\treturn saturate( 1.0 / ( 4.0 * ( dotNL + dotNV - dotNL * dotNV ) ) );\n}\nvec3 BRDF_Sheen( const in vec3 lightDir, const in vec3 viewDir, const in vec3 normal, vec3 sheenColor, const in float sheenRoughness ) {\n\tvec3 halfDir = normalize( lightDir + viewDir );\n\tfloat dotNL = saturate( dot( normal, lightDir ) );\n\tfloat dotNV = saturate( dot( normal, viewDir ) );\n\tfloat dotNH = saturate( dot( normal, halfDir ) );\n\tfloat D = D_Charlie( sheenRoughness, dotNH );\n\tfloat V = V_Neubelt( dotNV, dotNL );\n\treturn sheenColor * ( D * V );\n}\n#endif",iridescence_fragment:"#ifdef USE_IRIDESCENCE\n\tconst mat3 XYZ_TO_REC709 = mat3(\n\t\t 3.2404542, -0.9692660, 0.0556434,\n\t\t-1.5371385, 1.8760108, -0.2040259,\n\t\t-0.4985314, 0.0415560, 1.0572252\n\t);\n\tvec3 Fresnel0ToIor( vec3 fresnel0 ) {\n\t\tvec3 sqrtF0 = sqrt( fresnel0 );\n\t\treturn ( vec3( 1.0 ) + sqrtF0 ) / ( vec3( 1.0 ) - sqrtF0 );\n\t}\n\tvec3 IorToFresnel0( vec3 transmittedIor, float incidentIor ) {\n\t\treturn pow2( ( transmittedIor - vec3( incidentIor ) ) / ( transmittedIor + vec3( incidentIor ) ) );\n\t}\n\tfloat IorToFresnel0( float transmittedIor, float incidentIor ) {\n\t\treturn pow2( ( transmittedIor - incidentIor ) / ( transmittedIor + incidentIor ));\n\t}\n\tvec3 evalSensitivity( float OPD, vec3 shift ) {\n\t\tfloat phase = 2.0 * PI * OPD * 1.0e-9;\n\t\tvec3 val = vec3( 5.4856e-13, 4.4201e-13, 5.2481e-13 );\n\t\tvec3 pos = vec3( 1.6810e+06, 1.7953e+06, 2.2084e+06 );\n\t\tvec3 var = vec3( 4.3278e+09, 9.3046e+09, 6.6121e+09 );\n\t\tvec3 xyz = val * sqrt( 2.0 * PI * var ) * cos( pos * phase + shift ) * exp( - pow2( phase ) * var );\n\t\txyz.x += 9.7470e-14 * sqrt( 2.0 * PI * 4.5282e+09 ) * cos( 2.2399e+06 * phase + shift[ 0 ] ) * exp( - 4.5282e+09 * pow2( phase ) );\n\t\txyz /= 1.0685e-7;\n\t\tvec3 rgb = XYZ_TO_REC709 * xyz;\n\t\treturn rgb;\n\t}\n\tvec3 evalIridescence( float outsideIOR, float eta2, float cosTheta1, float thinFilmThickness, vec3 baseF0 ) {\n\t\tvec3 I;\n\t\tfloat iridescenceIOR = mix( outsideIOR, eta2, smoothstep( 0.0, 0.03, thinFilmThickness ) );\n\t\tfloat sinTheta2Sq = pow2( outsideIOR / iridescenceIOR ) * ( 1.0 - pow2( cosTheta1 ) );\n\t\tfloat cosTheta2Sq = 1.0 - sinTheta2Sq;\n\t\tif ( cosTheta2Sq < 0.0 ) {\n\t\t\t return vec3( 1.0 );\n\t\t}\n\t\tfloat cosTheta2 = sqrt( cosTheta2Sq );\n\t\tfloat R0 = IorToFresnel0( iridescenceIOR, outsideIOR );\n\t\tfloat R12 = F_Schlick( R0, 1.0, cosTheta1 );\n\t\tfloat R21 = R12;\n\t\tfloat T121 = 1.0 - R12;\n\t\tfloat phi12 = 0.0;\n\t\tif ( iridescenceIOR < outsideIOR ) phi12 = PI;\n\t\tfloat phi21 = PI - phi12;\n\t\tvec3 baseIOR = Fresnel0ToIor( clamp( baseF0, 0.0, 0.9999 ) );\t\tvec3 R1 = IorToFresnel0( baseIOR, iridescenceIOR );\n\t\tvec3 R23 = F_Schlick( R1, 1.0, cosTheta2 );\n\t\tvec3 phi23 = vec3( 0.0 );\n\t\tif ( baseIOR[ 0 ] < iridescenceIOR ) phi23[ 0 ] = PI;\n\t\tif ( baseIOR[ 1 ] < iridescenceIOR ) phi23[ 1 ] = PI;\n\t\tif ( baseIOR[ 2 ] < iridescenceIOR ) phi23[ 2 ] = PI;\n\t\tfloat OPD = 2.0 * iridescenceIOR * thinFilmThickness * cosTheta2;\n\t\tvec3 phi = vec3( phi21 ) + phi23;\n\t\tvec3 R123 = clamp( R12 * R23, 1e-5, 0.9999 );\n\t\tvec3 r123 = sqrt( R123 );\n\t\tvec3 Rs = pow2( T121 ) * R23 / ( vec3( 1.0 ) - R123 );\n\t\tvec3 C0 = R12 + Rs;\n\t\tI = C0;\n\t\tvec3 Cm = Rs - T121;\n\t\tfor ( int m = 1; m <= 2; ++ m ) {\n\t\t\tCm *= r123;\n\t\t\tvec3 Sm = 2.0 * evalSensitivity( float( m ) * OPD, float( m ) * phi );\n\t\t\tI += Cm * Sm;\n\t\t}\n\t\treturn max( I, vec3( 0.0 ) );\n\t}\n#endif",bumpmap_pars_fragment:"#ifdef USE_BUMPMAP\n\tuniform sampler2D bumpMap;\n\tuniform float bumpScale;\n\tvec2 dHdxy_fwd() {\n\t\tvec2 dSTdx = dFdx( vUv );\n\t\tvec2 dSTdy = dFdy( vUv );\n\t\tfloat Hll = bumpScale * texture2D( bumpMap, vUv ).x;\n\t\tfloat dBx = bumpScale * texture2D( bumpMap, vUv + dSTdx ).x - Hll;\n\t\tfloat dBy = bumpScale * texture2D( bumpMap, vUv + dSTdy ).x - Hll;\n\t\treturn vec2( dBx, dBy );\n\t}\n\tvec3 perturbNormalArb( vec3 surf_pos, vec3 surf_norm, vec2 dHdxy, float faceDirection ) {\n\t\tvec3 vSigmaX = dFdx( surf_pos.xyz );\n\t\tvec3 vSigmaY = dFdy( surf_pos.xyz );\n\t\tvec3 vN = surf_norm;\n\t\tvec3 R1 = cross( vSigmaY, vN );\n\t\tvec3 R2 = cross( vN, vSigmaX );\n\t\tfloat fDet = dot( vSigmaX, R1 ) * faceDirection;\n\t\tvec3 vGrad = sign( fDet ) * ( dHdxy.x * R1 + dHdxy.y * R2 );\n\t\treturn normalize( abs( fDet ) * surf_norm - vGrad );\n\t}\n#endif",clipping_planes_fragment:"#if NUM_CLIPPING_PLANES > 0\n\tvec4 plane;\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < UNION_CLIPPING_PLANES; i ++ ) {\n\t\tplane = clippingPlanes[ i ];\n\t\tif ( dot( vClipPosition, plane.xyz ) > plane.w ) discard;\n\t}\n\t#pragma unroll_loop_end\n\t#if UNION_CLIPPING_PLANES < NUM_CLIPPING_PLANES\n\t\tbool clipped = true;\n\t\t#pragma unroll_loop_start\n\t\tfor ( int i = UNION_CLIPPING_PLANES; i < NUM_CLIPPING_PLANES; i ++ ) {\n\t\t\tplane = clippingPlanes[ i ];\n\t\t\tclipped = ( dot( vClipPosition, plane.xyz ) > plane.w ) && clipped;\n\t\t}\n\t\t#pragma unroll_loop_end\n\t\tif ( clipped ) discard;\n\t#endif\n#endif",clipping_planes_pars_fragment:"#if NUM_CLIPPING_PLANES > 0\n\tvarying vec3 vClipPosition;\n\tuniform vec4 clippingPlanes[ NUM_CLIPPING_PLANES ];\n#endif",clipping_planes_pars_vertex:"#if NUM_CLIPPING_PLANES > 0\n\tvarying vec3 vClipPosition;\n#endif",clipping_planes_vertex:"#if NUM_CLIPPING_PLANES > 0\n\tvClipPosition = - mvPosition.xyz;\n#endif",color_fragment:"#if defined( USE_COLOR_ALPHA )\n\tdiffuseColor *= vColor;\n#elif defined( USE_COLOR )\n\tdiffuseColor.rgb *= vColor;\n#endif",color_pars_fragment:"#if defined( USE_COLOR_ALPHA )\n\tvarying vec4 vColor;\n#elif defined( USE_COLOR )\n\tvarying vec3 vColor;\n#endif",color_pars_vertex:"#if defined( USE_COLOR_ALPHA )\n\tvarying vec4 vColor;\n#elif defined( USE_COLOR ) || defined( USE_INSTANCING_COLOR )\n\tvarying vec3 vColor;\n#endif",color_vertex:"#if defined( USE_COLOR_ALPHA )\n\tvColor = vec4( 1.0 );\n#elif defined( USE_COLOR ) || defined( USE_INSTANCING_COLOR )\n\tvColor = vec3( 1.0 );\n#endif\n#ifdef USE_COLOR\n\tvColor *= color;\n#endif\n#ifdef USE_INSTANCING_COLOR\n\tvColor.xyz *= instanceColor.xyz;\n#endif",common:"#define PI 3.141592653589793\n#define PI2 6.283185307179586\n#define PI_HALF 1.5707963267948966\n#define RECIPROCAL_PI 0.3183098861837907\n#define RECIPROCAL_PI2 0.15915494309189535\n#define EPSILON 1e-6\n#ifndef saturate\n#define saturate( a ) clamp( a, 0.0, 1.0 )\n#endif\n#define whiteComplement( a ) ( 1.0 - saturate( a ) )\nfloat pow2( const in float x ) { return x*x; }\nvec3 pow2( const in vec3 x ) { return x*x; }\nfloat pow3( const in float x ) { return x*x*x; }\nfloat pow4( const in float x ) { float x2 = x*x; return x2*x2; }\nfloat max3( const in vec3 v ) { return max( max( v.x, v.y ), v.z ); }\nfloat average( const in vec3 v ) { return dot( v, vec3( 0.3333333 ) ); }\nhighp float rand( const in vec2 uv ) {\n\tconst highp float a = 12.9898, b = 78.233, c = 43758.5453;\n\thighp float dt = dot( uv.xy, vec2( a,b ) ), sn = mod( dt, PI );\n\treturn fract( sin( sn ) * c );\n}\n#ifdef HIGH_PRECISION\n\tfloat precisionSafeLength( vec3 v ) { return length( v ); }\n#else\n\tfloat precisionSafeLength( vec3 v ) {\n\t\tfloat maxComponent = max3( abs( v ) );\n\t\treturn length( v / maxComponent ) * maxComponent;\n\t}\n#endif\nstruct IncidentLight {\n\tvec3 color;\n\tvec3 direction;\n\tbool visible;\n};\nstruct ReflectedLight {\n\tvec3 directDiffuse;\n\tvec3 directSpecular;\n\tvec3 indirectDiffuse;\n\tvec3 indirectSpecular;\n};\nstruct GeometricContext {\n\tvec3 position;\n\tvec3 normal;\n\tvec3 viewDir;\n#ifdef USE_CLEARCOAT\n\tvec3 clearcoatNormal;\n#endif\n};\nvec3 transformDirection( in vec3 dir, in mat4 matrix ) {\n\treturn normalize( ( matrix * vec4( dir, 0.0 ) ).xyz );\n}\nvec3 inverseTransformDirection( in vec3 dir, in mat4 matrix ) {\n\treturn normalize( ( vec4( dir, 0.0 ) * matrix ).xyz );\n}\nmat3 transposeMat3( const in mat3 m ) {\n\tmat3 tmp;\n\ttmp[ 0 ] = vec3( m[ 0 ].x, m[ 1 ].x, m[ 2 ].x );\n\ttmp[ 1 ] = vec3( m[ 0 ].y, m[ 1 ].y, m[ 2 ].y );\n\ttmp[ 2 ] = vec3( m[ 0 ].z, m[ 1 ].z, m[ 2 ].z );\n\treturn tmp;\n}\nfloat luminance( const in vec3 rgb ) {\n\tconst vec3 weights = vec3( 0.2126729, 0.7151522, 0.0721750 );\n\treturn dot( weights, rgb );\n}\nbool isPerspectiveMatrix( mat4 m ) {\n\treturn m[ 2 ][ 3 ] == - 1.0;\n}\nvec2 equirectUv( in vec3 dir ) {\n\tfloat u = atan( dir.z, dir.x ) * RECIPROCAL_PI2 + 0.5;\n\tfloat v = asin( clamp( dir.y, - 1.0, 1.0 ) ) * RECIPROCAL_PI + 0.5;\n\treturn vec2( u, v );\n}",cube_uv_reflection_fragment:"#ifdef ENVMAP_TYPE_CUBE_UV\n\t#define cubeUV_minMipLevel 4.0\n\t#define cubeUV_minTileSize 16.0\n\tfloat getFace( vec3 direction ) {\n\t\tvec3 absDirection = abs( direction );\n\t\tfloat face = - 1.0;\n\t\tif ( absDirection.x > absDirection.z ) {\n\t\t\tif ( absDirection.x > absDirection.y )\n\t\t\t\tface = direction.x > 0.0 ? 0.0 : 3.0;\n\t\t\telse\n\t\t\t\tface = direction.y > 0.0 ? 1.0 : 4.0;\n\t\t} else {\n\t\t\tif ( absDirection.z > absDirection.y )\n\t\t\t\tface = direction.z > 0.0 ? 2.0 : 5.0;\n\t\t\telse\n\t\t\t\tface = direction.y > 0.0 ? 1.0 : 4.0;\n\t\t}\n\t\treturn face;\n\t}\n\tvec2 getUV( vec3 direction, float face ) {\n\t\tvec2 uv;\n\t\tif ( face == 0.0 ) {\n\t\t\tuv = vec2( direction.z, direction.y ) / abs( direction.x );\n\t\t} else if ( face == 1.0 ) {\n\t\t\tuv = vec2( - direction.x, - direction.z ) / abs( direction.y );\n\t\t} else if ( face == 2.0 ) {\n\t\t\tuv = vec2( - direction.x, direction.y ) / abs( direction.z );\n\t\t} else if ( face == 3.0 ) {\n\t\t\tuv = vec2( - direction.z, direction.y ) / abs( direction.x );\n\t\t} else if ( face == 4.0 ) {\n\t\t\tuv = vec2( - direction.x, direction.z ) / abs( direction.y );\n\t\t} else {\n\t\t\tuv = vec2( direction.x, direction.y ) / abs( direction.z );\n\t\t}\n\t\treturn 0.5 * ( uv + 1.0 );\n\t}\n\tvec3 bilinearCubeUV( sampler2D envMap, vec3 direction, float mipInt ) {\n\t\tfloat face = getFace( direction );\n\t\tfloat filterInt = max( cubeUV_minMipLevel - mipInt, 0.0 );\n\t\tmipInt = max( mipInt, cubeUV_minMipLevel );\n\t\tfloat faceSize = exp2( mipInt );\n\t\thighp vec2 uv = getUV( direction, face ) * ( faceSize - 2.0 ) + 1.0;\n\t\tif ( face > 2.0 ) {\n\t\t\tuv.y += faceSize;\n\t\t\tface -= 3.0;\n\t\t}\n\t\tuv.x += face * faceSize;\n\t\tuv.x += filterInt * 3.0 * cubeUV_minTileSize;\n\t\tuv.y += 4.0 * ( exp2( CUBEUV_MAX_MIP ) - faceSize );\n\t\tuv.x *= CUBEUV_TEXEL_WIDTH;\n\t\tuv.y *= CUBEUV_TEXEL_HEIGHT;\n\t\t#ifdef texture2DGradEXT\n\t\t\treturn texture2DGradEXT( envMap, uv, vec2( 0.0 ), vec2( 0.0 ) ).rgb;\n\t\t#else\n\t\t\treturn texture2D( envMap, uv ).rgb;\n\t\t#endif\n\t}\n\t#define cubeUV_r0 1.0\n\t#define cubeUV_v0 0.339\n\t#define cubeUV_m0 - 2.0\n\t#define cubeUV_r1 0.8\n\t#define cubeUV_v1 0.276\n\t#define cubeUV_m1 - 1.0\n\t#define cubeUV_r4 0.4\n\t#define cubeUV_v4 0.046\n\t#define cubeUV_m4 2.0\n\t#define cubeUV_r5 0.305\n\t#define cubeUV_v5 0.016\n\t#define cubeUV_m5 3.0\n\t#define cubeUV_r6 0.21\n\t#define cubeUV_v6 0.0038\n\t#define cubeUV_m6 4.0\n\tfloat roughnessToMip( float roughness ) {\n\t\tfloat mip = 0.0;\n\t\tif ( roughness >= cubeUV_r1 ) {\n\t\t\tmip = ( cubeUV_r0 - roughness ) * ( cubeUV_m1 - cubeUV_m0 ) / ( cubeUV_r0 - cubeUV_r1 ) + cubeUV_m0;\n\t\t} else if ( roughness >= cubeUV_r4 ) {\n\t\t\tmip = ( cubeUV_r1 - roughness ) * ( cubeUV_m4 - cubeUV_m1 ) / ( cubeUV_r1 - cubeUV_r4 ) + cubeUV_m1;\n\t\t} else if ( roughness >= cubeUV_r5 ) {\n\t\t\tmip = ( cubeUV_r4 - roughness ) * ( cubeUV_m5 - cubeUV_m4 ) / ( cubeUV_r4 - cubeUV_r5 ) + cubeUV_m4;\n\t\t} else if ( roughness >= cubeUV_r6 ) {\n\t\t\tmip = ( cubeUV_r5 - roughness ) * ( cubeUV_m6 - cubeUV_m5 ) / ( cubeUV_r5 - cubeUV_r6 ) + cubeUV_m5;\n\t\t} else {\n\t\t\tmip = - 2.0 * log2( 1.16 * roughness );\t\t}\n\t\treturn mip;\n\t}\n\tvec4 textureCubeUV( sampler2D envMap, vec3 sampleDir, float roughness ) {\n\t\tfloat mip = clamp( roughnessToMip( roughness ), cubeUV_m0, CUBEUV_MAX_MIP );\n\t\tfloat mipF = fract( mip );\n\t\tfloat mipInt = floor( mip );\n\t\tvec3 color0 = bilinearCubeUV( envMap, sampleDir, mipInt );\n\t\tif ( mipF == 0.0 ) {\n\t\t\treturn vec4( color0, 1.0 );\n\t\t} else {\n\t\t\tvec3 color1 = bilinearCubeUV( envMap, sampleDir, mipInt + 1.0 );\n\t\t\treturn vec4( mix( color0, color1, mipF ), 1.0 );\n\t\t}\n\t}\n#endif",defaultnormal_vertex:"vec3 transformedNormal = objectNormal;\n#ifdef USE_INSTANCING\n\tmat3 m = mat3( instanceMatrix );\n\ttransformedNormal /= vec3( dot( m[ 0 ], m[ 0 ] ), dot( m[ 1 ], m[ 1 ] ), dot( m[ 2 ], m[ 2 ] ) );\n\ttransformedNormal = m * transformedNormal;\n#endif\ntransformedNormal = normalMatrix * transformedNormal;\n#ifdef FLIP_SIDED\n\ttransformedNormal = - transformedNormal;\n#endif\n#ifdef USE_TANGENT\n\tvec3 transformedTangent = ( modelViewMatrix * vec4( objectTangent, 0.0 ) ).xyz;\n\t#ifdef FLIP_SIDED\n\t\ttransformedTangent = - transformedTangent;\n\t#endif\n#endif",displacementmap_pars_vertex:"#ifdef USE_DISPLACEMENTMAP\n\tuniform sampler2D displacementMap;\n\tuniform float displacementScale;\n\tuniform float displacementBias;\n#endif",displacementmap_vertex:"#ifdef USE_DISPLACEMENTMAP\n\ttransformed += normalize( objectNormal ) * ( texture2D( displacementMap, vUv ).x * displacementScale + displacementBias );\n#endif",emissivemap_fragment:"#ifdef USE_EMISSIVEMAP\n\tvec4 emissiveColor = texture2D( emissiveMap, vUv );\n\ttotalEmissiveRadiance *= emissiveColor.rgb;\n#endif",emissivemap_pars_fragment:"#ifdef USE_EMISSIVEMAP\n\tuniform sampler2D emissiveMap;\n#endif",encodings_fragment:"gl_FragColor = linearToOutputTexel( gl_FragColor );",encodings_pars_fragment:"vec4 LinearToLinear( in vec4 value ) {\n\treturn value;\n}\nvec4 LinearTosRGB( in vec4 value ) {\n\treturn vec4( mix( pow( value.rgb, vec3( 0.41666 ) ) * 1.055 - vec3( 0.055 ), value.rgb * 12.92, vec3( lessThanEqual( value.rgb, vec3( 0.0031308 ) ) ) ), value.a );\n}",envmap_fragment:"#ifdef USE_ENVMAP\n\t#ifdef ENV_WORLDPOS\n\t\tvec3 cameraToFrag;\n\t\tif ( isOrthographic ) {\n\t\t\tcameraToFrag = normalize( vec3( - viewMatrix[ 0 ][ 2 ], - viewMatrix[ 1 ][ 2 ], - viewMatrix[ 2 ][ 2 ] ) );\n\t\t} else {\n\t\t\tcameraToFrag = normalize( vWorldPosition - cameraPosition );\n\t\t}\n\t\tvec3 worldNormal = inverseTransformDirection( normal, viewMatrix );\n\t\t#ifdef ENVMAP_MODE_REFLECTION\n\t\t\tvec3 reflectVec = reflect( cameraToFrag, worldNormal );\n\t\t#else\n\t\t\tvec3 reflectVec = refract( cameraToFrag, worldNormal, refractionRatio );\n\t\t#endif\n\t#else\n\t\tvec3 reflectVec = vReflect;\n\t#endif\n\t#ifdef ENVMAP_TYPE_CUBE\n\t\tvec4 envColor = textureCube( envMap, vec3( flipEnvMap * reflectVec.x, reflectVec.yz ) );\n\t#else\n\t\tvec4 envColor = vec4( 0.0 );\n\t#endif\n\t#ifdef ENVMAP_BLENDING_MULTIPLY\n\t\toutgoingLight = mix( outgoingLight, outgoingLight * envColor.xyz, specularStrength * reflectivity );\n\t#elif defined( ENVMAP_BLENDING_MIX )\n\t\toutgoingLight = mix( outgoingLight, envColor.xyz, specularStrength * reflectivity );\n\t#elif defined( ENVMAP_BLENDING_ADD )\n\t\toutgoingLight += envColor.xyz * specularStrength * reflectivity;\n\t#endif\n#endif",envmap_common_pars_fragment:"#ifdef USE_ENVMAP\n\tuniform float envMapIntensity;\n\tuniform float flipEnvMap;\n\t#ifdef ENVMAP_TYPE_CUBE\n\t\tuniform samplerCube envMap;\n\t#else\n\t\tuniform sampler2D envMap;\n\t#endif\n\t\n#endif",envmap_pars_fragment:"#ifdef USE_ENVMAP\n\tuniform float reflectivity;\n\t#if defined( USE_BUMPMAP ) || defined( USE_NORMALMAP ) || defined( PHONG ) || defined( LAMBERT )\n\t\t#define ENV_WORLDPOS\n\t#endif\n\t#ifdef ENV_WORLDPOS\n\t\tvarying vec3 vWorldPosition;\n\t\tuniform float refractionRatio;\n\t#else\n\t\tvarying vec3 vReflect;\n\t#endif\n#endif",envmap_pars_vertex:"#ifdef USE_ENVMAP\n\t#if defined( USE_BUMPMAP ) || defined( USE_NORMALMAP ) || defined( PHONG ) || defined( LAMBERT )\n\t\t#define ENV_WORLDPOS\n\t#endif\n\t#ifdef ENV_WORLDPOS\n\t\t\n\t\tvarying vec3 vWorldPosition;\n\t#else\n\t\tvarying vec3 vReflect;\n\t\tuniform float refractionRatio;\n\t#endif\n#endif",envmap_physical_pars_fragment:"#if defined( USE_ENVMAP )\n\tvec3 getIBLIrradiance( const in vec3 normal ) {\n\t\t#if defined( ENVMAP_TYPE_CUBE_UV )\n\t\t\tvec3 worldNormal = inverseTransformDirection( normal, viewMatrix );\n\t\t\tvec4 envMapColor = textureCubeUV( envMap, worldNormal, 1.0 );\n\t\t\treturn PI * envMapColor.rgb * envMapIntensity;\n\t\t#else\n\t\t\treturn vec3( 0.0 );\n\t\t#endif\n\t}\n\tvec3 getIBLRadiance( const in vec3 viewDir, const in vec3 normal, const in float roughness ) {\n\t\t#if defined( ENVMAP_TYPE_CUBE_UV )\n\t\t\tvec3 reflectVec = reflect( - viewDir, normal );\n\t\t\treflectVec = normalize( mix( reflectVec, normal, roughness * roughness) );\n\t\t\treflectVec = inverseTransformDirection( reflectVec, viewMatrix );\n\t\t\tvec4 envMapColor = textureCubeUV( envMap, reflectVec, roughness );\n\t\t\treturn envMapColor.rgb * envMapIntensity;\n\t\t#else\n\t\t\treturn vec3( 0.0 );\n\t\t#endif\n\t}\n#endif",envmap_vertex:"#ifdef USE_ENVMAP\n\t#ifdef ENV_WORLDPOS\n\t\tvWorldPosition = worldPosition.xyz;\n\t#else\n\t\tvec3 cameraToVertex;\n\t\tif ( isOrthographic ) {\n\t\t\tcameraToVertex = normalize( vec3( - viewMatrix[ 0 ][ 2 ], - viewMatrix[ 1 ][ 2 ], - viewMatrix[ 2 ][ 2 ] ) );\n\t\t} else {\n\t\t\tcameraToVertex = normalize( worldPosition.xyz - cameraPosition );\n\t\t}\n\t\tvec3 worldNormal = inverseTransformDirection( transformedNormal, viewMatrix );\n\t\t#ifdef ENVMAP_MODE_REFLECTION\n\t\t\tvReflect = reflect( cameraToVertex, worldNormal );\n\t\t#else\n\t\t\tvReflect = refract( cameraToVertex, worldNormal, refractionRatio );\n\t\t#endif\n\t#endif\n#endif",fog_vertex:"#ifdef USE_FOG\n\tvFogDepth = - mvPosition.z;\n#endif",fog_pars_vertex:"#ifdef USE_FOG\n\tvarying float vFogDepth;\n#endif",fog_fragment:"#ifdef USE_FOG\n\t#ifdef FOG_EXP2\n\t\tfloat fogFactor = 1.0 - exp( - fogDensity * fogDensity * vFogDepth * vFogDepth );\n\t#else\n\t\tfloat fogFactor = smoothstep( fogNear, fogFar, vFogDepth );\n\t#endif\n\tgl_FragColor.rgb = mix( gl_FragColor.rgb, fogColor, fogFactor );\n#endif",fog_pars_fragment:"#ifdef USE_FOG\n\tuniform vec3 fogColor;\n\tvarying float vFogDepth;\n\t#ifdef FOG_EXP2\n\t\tuniform float fogDensity;\n\t#else\n\t\tuniform float fogNear;\n\t\tuniform float fogFar;\n\t#endif\n#endif",gradientmap_pars_fragment:"#ifdef USE_GRADIENTMAP\n\tuniform sampler2D gradientMap;\n#endif\nvec3 getGradientIrradiance( vec3 normal, vec3 lightDirection ) {\n\tfloat dotNL = dot( normal, lightDirection );\n\tvec2 coord = vec2( dotNL * 0.5 + 0.5, 0.0 );\n\t#ifdef USE_GRADIENTMAP\n\t\treturn vec3( texture2D( gradientMap, coord ).r );\n\t#else\n\t\tvec2 fw = fwidth( coord ) * 0.5;\n\t\treturn mix( vec3( 0.7 ), vec3( 1.0 ), smoothstep( 0.7 - fw.x, 0.7 + fw.x, coord.x ) );\n\t#endif\n}",lightmap_fragment:"#ifdef USE_LIGHTMAP\n\tvec4 lightMapTexel = texture2D( lightMap, vUv2 );\n\tvec3 lightMapIrradiance = lightMapTexel.rgb * lightMapIntensity;\n\treflectedLight.indirectDiffuse += lightMapIrradiance;\n#endif",lightmap_pars_fragment:"#ifdef USE_LIGHTMAP\n\tuniform sampler2D lightMap;\n\tuniform float lightMapIntensity;\n#endif",lights_lambert_fragment:"LambertMaterial material;\nmaterial.diffuseColor = diffuseColor.rgb;\nmaterial.specularStrength = specularStrength;",lights_lambert_pars_fragment:"varying vec3 vViewPosition;\nstruct LambertMaterial {\n\tvec3 diffuseColor;\n\tfloat specularStrength;\n};\nvoid RE_Direct_Lambert( const in IncidentLight directLight, const in GeometricContext geometry, const in LambertMaterial material, inout ReflectedLight reflectedLight ) {\n\tfloat dotNL = saturate( dot( geometry.normal, directLight.direction ) );\n\tvec3 irradiance = dotNL * directLight.color;\n\treflectedLight.directDiffuse += irradiance * BRDF_Lambert( material.diffuseColor );\n}\nvoid RE_IndirectDiffuse_Lambert( const in vec3 irradiance, const in GeometricContext geometry, const in LambertMaterial material, inout ReflectedLight reflectedLight ) {\n\treflectedLight.indirectDiffuse += irradiance * BRDF_Lambert( material.diffuseColor );\n}\n#define RE_Direct\t\t\t\tRE_Direct_Lambert\n#define RE_IndirectDiffuse\t\tRE_IndirectDiffuse_Lambert",lights_pars_begin:"uniform bool receiveShadow;\nuniform vec3 ambientLightColor;\nuniform vec3 lightProbe[ 9 ];\nvec3 shGetIrradianceAt( in vec3 normal, in vec3 shCoefficients[ 9 ] ) {\n\tfloat x = normal.x, y = normal.y, z = normal.z;\n\tvec3 result = shCoefficients[ 0 ] * 0.886227;\n\tresult += shCoefficients[ 1 ] * 2.0 * 0.511664 * y;\n\tresult += shCoefficients[ 2 ] * 2.0 * 0.511664 * z;\n\tresult += shCoefficients[ 3 ] * 2.0 * 0.511664 * x;\n\tresult += shCoefficients[ 4 ] * 2.0 * 0.429043 * x * y;\n\tresult += shCoefficients[ 5 ] * 2.0 * 0.429043 * y * z;\n\tresult += shCoefficients[ 6 ] * ( 0.743125 * z * z - 0.247708 );\n\tresult += shCoefficients[ 7 ] * 2.0 * 0.429043 * x * z;\n\tresult += shCoefficients[ 8 ] * 0.429043 * ( x * x - y * y );\n\treturn result;\n}\nvec3 getLightProbeIrradiance( const in vec3 lightProbe[ 9 ], const in vec3 normal ) {\n\tvec3 worldNormal = inverseTransformDirection( normal, viewMatrix );\n\tvec3 irradiance = shGetIrradianceAt( worldNormal, lightProbe );\n\treturn irradiance;\n}\nvec3 getAmbientLightIrradiance( const in vec3 ambientLightColor ) {\n\tvec3 irradiance = ambientLightColor;\n\treturn irradiance;\n}\nfloat getDistanceAttenuation( const in float lightDistance, const in float cutoffDistance, const in float decayExponent ) {\n\t#if defined ( PHYSICALLY_CORRECT_LIGHTS )\n\t\tfloat distanceFalloff = 1.0 / max( pow( lightDistance, decayExponent ), 0.01 );\n\t\tif ( cutoffDistance > 0.0 ) {\n\t\t\tdistanceFalloff *= pow2( saturate( 1.0 - pow4( lightDistance / cutoffDistance ) ) );\n\t\t}\n\t\treturn distanceFalloff;\n\t#else\n\t\tif ( cutoffDistance > 0.0 && decayExponent > 0.0 ) {\n\t\t\treturn pow( saturate( - lightDistance / cutoffDistance + 1.0 ), decayExponent );\n\t\t}\n\t\treturn 1.0;\n\t#endif\n}\nfloat getSpotAttenuation( const in float coneCosine, const in float penumbraCosine, const in float angleCosine ) {\n\treturn smoothstep( coneCosine, penumbraCosine, angleCosine );\n}\n#if NUM_DIR_LIGHTS > 0\n\tstruct DirectionalLight {\n\t\tvec3 direction;\n\t\tvec3 color;\n\t};\n\tuniform DirectionalLight directionalLights[ NUM_DIR_LIGHTS ];\n\tvoid getDirectionalLightInfo( const in DirectionalLight directionalLight, const in GeometricContext geometry, out IncidentLight light ) {\n\t\tlight.color = directionalLight.color;\n\t\tlight.direction = directionalLight.direction;\n\t\tlight.visible = true;\n\t}\n#endif\n#if NUM_POINT_LIGHTS > 0\n\tstruct PointLight {\n\t\tvec3 position;\n\t\tvec3 color;\n\t\tfloat distance;\n\t\tfloat decay;\n\t};\n\tuniform PointLight pointLights[ NUM_POINT_LIGHTS ];\n\tvoid getPointLightInfo( const in PointLight pointLight, const in GeometricContext geometry, out IncidentLight light ) {\n\t\tvec3 lVector = pointLight.position - geometry.position;\n\t\tlight.direction = normalize( lVector );\n\t\tfloat lightDistance = length( lVector );\n\t\tlight.color = pointLight.color;\n\t\tlight.color *= getDistanceAttenuation( lightDistance, pointLight.distance, pointLight.decay );\n\t\tlight.visible = ( light.color != vec3( 0.0 ) );\n\t}\n#endif\n#if NUM_SPOT_LIGHTS > 0\n\tstruct SpotLight {\n\t\tvec3 position;\n\t\tvec3 direction;\n\t\tvec3 color;\n\t\tfloat distance;\n\t\tfloat decay;\n\t\tfloat coneCos;\n\t\tfloat penumbraCos;\n\t};\n\tuniform SpotLight spotLights[ NUM_SPOT_LIGHTS ];\n\tvoid getSpotLightInfo( const in SpotLight spotLight, const in GeometricContext geometry, out IncidentLight light ) {\n\t\tvec3 lVector = spotLight.position - geometry.position;\n\t\tlight.direction = normalize( lVector );\n\t\tfloat angleCos = dot( light.direction, spotLight.direction );\n\t\tfloat spotAttenuation = getSpotAttenuation( spotLight.coneCos, spotLight.penumbraCos, angleCos );\n\t\tif ( spotAttenuation > 0.0 ) {\n\t\t\tfloat lightDistance = length( lVector );\n\t\t\tlight.color = spotLight.color * spotAttenuation;\n\t\t\tlight.color *= getDistanceAttenuation( lightDistance, spotLight.distance, spotLight.decay );\n\t\t\tlight.visible = ( light.color != vec3( 0.0 ) );\n\t\t} else {\n\t\t\tlight.color = vec3( 0.0 );\n\t\t\tlight.visible = false;\n\t\t}\n\t}\n#endif\n#if NUM_RECT_AREA_LIGHTS > 0\n\tstruct RectAreaLight {\n\t\tvec3 color;\n\t\tvec3 position;\n\t\tvec3 halfWidth;\n\t\tvec3 halfHeight;\n\t};\n\tuniform sampler2D ltc_1;\tuniform sampler2D ltc_2;\n\tuniform RectAreaLight rectAreaLights[ NUM_RECT_AREA_LIGHTS ];\n#endif\n#if NUM_HEMI_LIGHTS > 0\n\tstruct HemisphereLight {\n\t\tvec3 direction;\n\t\tvec3 skyColor;\n\t\tvec3 groundColor;\n\t};\n\tuniform HemisphereLight hemisphereLights[ NUM_HEMI_LIGHTS ];\n\tvec3 getHemisphereLightIrradiance( const in HemisphereLight hemiLight, const in vec3 normal ) {\n\t\tfloat dotNL = dot( normal, hemiLight.direction );\n\t\tfloat hemiDiffuseWeight = 0.5 * dotNL + 0.5;\n\t\tvec3 irradiance = mix( hemiLight.groundColor, hemiLight.skyColor, hemiDiffuseWeight );\n\t\treturn irradiance;\n\t}\n#endif",lights_toon_fragment:"ToonMaterial material;\nmaterial.diffuseColor = diffuseColor.rgb;",lights_toon_pars_fragment:"varying vec3 vViewPosition;\nstruct ToonMaterial {\n\tvec3 diffuseColor;\n};\nvoid RE_Direct_Toon( const in IncidentLight directLight, const in GeometricContext geometry, const in ToonMaterial material, inout ReflectedLight reflectedLight ) {\n\tvec3 irradiance = getGradientIrradiance( geometry.normal, directLight.direction ) * directLight.color;\n\treflectedLight.directDiffuse += irradiance * BRDF_Lambert( material.diffuseColor );\n}\nvoid RE_IndirectDiffuse_Toon( const in vec3 irradiance, const in GeometricContext geometry, const in ToonMaterial material, inout ReflectedLight reflectedLight ) {\n\treflectedLight.indirectDiffuse += irradiance * BRDF_Lambert( material.diffuseColor );\n}\n#define RE_Direct\t\t\t\tRE_Direct_Toon\n#define RE_IndirectDiffuse\t\tRE_IndirectDiffuse_Toon",lights_phong_fragment:"BlinnPhongMaterial material;\nmaterial.diffuseColor = diffuseColor.rgb;\nmaterial.specularColor = specular;\nmaterial.specularShininess = shininess;\nmaterial.specularStrength = specularStrength;",lights_phong_pars_fragment:"varying vec3 vViewPosition;\nstruct BlinnPhongMaterial {\n\tvec3 diffuseColor;\n\tvec3 specularColor;\n\tfloat specularShininess;\n\tfloat specularStrength;\n};\nvoid RE_Direct_BlinnPhong( const in IncidentLight directLight, const in GeometricContext geometry, const in BlinnPhongMaterial material, inout ReflectedLight reflectedLight ) {\n\tfloat dotNL = saturate( dot( geometry.normal, directLight.direction ) );\n\tvec3 irradiance = dotNL * directLight.color;\n\treflectedLight.directDiffuse += irradiance * BRDF_Lambert( material.diffuseColor );\n\treflectedLight.directSpecular += irradiance * BRDF_BlinnPhong( directLight.direction, geometry.viewDir, geometry.normal, material.specularColor, material.specularShininess ) * material.specularStrength;\n}\nvoid RE_IndirectDiffuse_BlinnPhong( const in vec3 irradiance, const in GeometricContext geometry, const in BlinnPhongMaterial material, inout ReflectedLight reflectedLight ) {\n\treflectedLight.indirectDiffuse += irradiance * BRDF_Lambert( material.diffuseColor );\n}\n#define RE_Direct\t\t\t\tRE_Direct_BlinnPhong\n#define RE_IndirectDiffuse\t\tRE_IndirectDiffuse_BlinnPhong",lights_physical_fragment:"PhysicalMaterial material;\nmaterial.diffuseColor = diffuseColor.rgb * ( 1.0 - metalnessFactor );\nvec3 dxy = max( abs( dFdx( geometryNormal ) ), abs( dFdy( geometryNormal ) ) );\nfloat geometryRoughness = max( max( dxy.x, dxy.y ), dxy.z );\nmaterial.roughness = max( roughnessFactor, 0.0525 );material.roughness += geometryRoughness;\nmaterial.roughness = min( material.roughness, 1.0 );\n#ifdef IOR\n\tmaterial.ior = ior;\n\t#ifdef SPECULAR\n\t\tfloat specularIntensityFactor = specularIntensity;\n\t\tvec3 specularColorFactor = specularColor;\n\t\t#ifdef USE_SPECULARINTENSITYMAP\n\t\t\tspecularIntensityFactor *= texture2D( specularIntensityMap, vUv ).a;\n\t\t#endif\n\t\t#ifdef USE_SPECULARCOLORMAP\n\t\t\tspecularColorFactor *= texture2D( specularColorMap, vUv ).rgb;\n\t\t#endif\n\t\tmaterial.specularF90 = mix( specularIntensityFactor, 1.0, metalnessFactor );\n\t#else\n\t\tfloat specularIntensityFactor = 1.0;\n\t\tvec3 specularColorFactor = vec3( 1.0 );\n\t\tmaterial.specularF90 = 1.0;\n\t#endif\n\tmaterial.specularColor = mix( min( pow2( ( material.ior - 1.0 ) / ( material.ior + 1.0 ) ) * specularColorFactor, vec3( 1.0 ) ) * specularIntensityFactor, diffuseColor.rgb, metalnessFactor );\n#else\n\tmaterial.specularColor = mix( vec3( 0.04 ), diffuseColor.rgb, metalnessFactor );\n\tmaterial.specularF90 = 1.0;\n#endif\n#ifdef USE_CLEARCOAT\n\tmaterial.clearcoat = clearcoat;\n\tmaterial.clearcoatRoughness = clearcoatRoughness;\n\tmaterial.clearcoatF0 = vec3( 0.04 );\n\tmaterial.clearcoatF90 = 1.0;\n\t#ifdef USE_CLEARCOATMAP\n\t\tmaterial.clearcoat *= texture2D( clearcoatMap, vUv ).x;\n\t#endif\n\t#ifdef USE_CLEARCOAT_ROUGHNESSMAP\n\t\tmaterial.clearcoatRoughness *= texture2D( clearcoatRoughnessMap, vUv ).y;\n\t#endif\n\tmaterial.clearcoat = saturate( material.clearcoat );\tmaterial.clearcoatRoughness = max( material.clearcoatRoughness, 0.0525 );\n\tmaterial.clearcoatRoughness += geometryRoughness;\n\tmaterial.clearcoatRoughness = min( material.clearcoatRoughness, 1.0 );\n#endif\n#ifdef USE_IRIDESCENCE\n\tmaterial.iridescence = iridescence;\n\tmaterial.iridescenceIOR = iridescenceIOR;\n\t#ifdef USE_IRIDESCENCEMAP\n\t\tmaterial.iridescence *= texture2D( iridescenceMap, vUv ).r;\n\t#endif\n\t#ifdef USE_IRIDESCENCE_THICKNESSMAP\n\t\tmaterial.iridescenceThickness = (iridescenceThicknessMaximum - iridescenceThicknessMinimum) * texture2D( iridescenceThicknessMap, vUv ).g + iridescenceThicknessMinimum;\n\t#else\n\t\tmaterial.iridescenceThickness = iridescenceThicknessMaximum;\n\t#endif\n#endif\n#ifdef USE_SHEEN\n\tmaterial.sheenColor = sheenColor;\n\t#ifdef USE_SHEENCOLORMAP\n\t\tmaterial.sheenColor *= texture2D( sheenColorMap, vUv ).rgb;\n\t#endif\n\tmaterial.sheenRoughness = clamp( sheenRoughness, 0.07, 1.0 );\n\t#ifdef USE_SHEENROUGHNESSMAP\n\t\tmaterial.sheenRoughness *= texture2D( sheenRoughnessMap, vUv ).a;\n\t#endif\n#endif",lights_physical_pars_fragment:"struct PhysicalMaterial {\n\tvec3 diffuseColor;\n\tfloat roughness;\n\tvec3 specularColor;\n\tfloat specularF90;\n\t#ifdef USE_CLEARCOAT\n\t\tfloat clearcoat;\n\t\tfloat clearcoatRoughness;\n\t\tvec3 clearcoatF0;\n\t\tfloat clearcoatF90;\n\t#endif\n\t#ifdef USE_IRIDESCENCE\n\t\tfloat iridescence;\n\t\tfloat iridescenceIOR;\n\t\tfloat iridescenceThickness;\n\t\tvec3 iridescenceFresnel;\n\t\tvec3 iridescenceF0;\n\t#endif\n\t#ifdef USE_SHEEN\n\t\tvec3 sheenColor;\n\t\tfloat sheenRoughness;\n\t#endif\n\t#ifdef IOR\n\t\tfloat ior;\n\t#endif\n\t#ifdef USE_TRANSMISSION\n\t\tfloat transmission;\n\t\tfloat transmissionAlpha;\n\t\tfloat thickness;\n\t\tfloat attenuationDistance;\n\t\tvec3 attenuationColor;\n\t#endif\n};\nvec3 clearcoatSpecular = vec3( 0.0 );\nvec3 sheenSpecular = vec3( 0.0 );\nfloat IBLSheenBRDF( const in vec3 normal, const in vec3 viewDir, const in float roughness ) {\n\tfloat dotNV = saturate( dot( normal, viewDir ) );\n\tfloat r2 = roughness * roughness;\n\tfloat a = roughness < 0.25 ? -339.2 * r2 + 161.4 * roughness - 25.9 : -8.48 * r2 + 14.3 * roughness - 9.95;\n\tfloat b = roughness < 0.25 ? 44.0 * r2 - 23.7 * roughness + 3.26 : 1.97 * r2 - 3.27 * roughness + 0.72;\n\tfloat DG = exp( a * dotNV + b ) + ( roughness < 0.25 ? 0.0 : 0.1 * ( roughness - 0.25 ) );\n\treturn saturate( DG * RECIPROCAL_PI );\n}\nvec2 DFGApprox( const in vec3 normal, const in vec3 viewDir, const in float roughness ) {\n\tfloat dotNV = saturate( dot( normal, viewDir ) );\n\tconst vec4 c0 = vec4( - 1, - 0.0275, - 0.572, 0.022 );\n\tconst vec4 c1 = vec4( 1, 0.0425, 1.04, - 0.04 );\n\tvec4 r = roughness * c0 + c1;\n\tfloat a004 = min( r.x * r.x, exp2( - 9.28 * dotNV ) ) * r.x + r.y;\n\tvec2 fab = vec2( - 1.04, 1.04 ) * a004 + r.zw;\n\treturn fab;\n}\nvec3 EnvironmentBRDF( const in vec3 normal, const in vec3 viewDir, const in vec3 specularColor, const in float specularF90, const in float roughness ) {\n\tvec2 fab = DFGApprox( normal, viewDir, roughness );\n\treturn specularColor * fab.x + specularF90 * fab.y;\n}\n#ifdef USE_IRIDESCENCE\nvoid computeMultiscatteringIridescence( const in vec3 normal, const in vec3 viewDir, const in vec3 specularColor, const in float specularF90, const in float iridescence, const in vec3 iridescenceF0, const in float roughness, inout vec3 singleScatter, inout vec3 multiScatter ) {\n#else\nvoid computeMultiscattering( const in vec3 normal, const in vec3 viewDir, const in vec3 specularColor, const in float specularF90, const in float roughness, inout vec3 singleScatter, inout vec3 multiScatter ) {\n#endif\n\tvec2 fab = DFGApprox( normal, viewDir, roughness );\n\t#ifdef USE_IRIDESCENCE\n\t\tvec3 Fr = mix( specularColor, iridescenceF0, iridescence );\n\t#else\n\t\tvec3 Fr = specularColor;\n\t#endif\n\tvec3 FssEss = Fr * fab.x + specularF90 * fab.y;\n\tfloat Ess = fab.x + fab.y;\n\tfloat Ems = 1.0 - Ess;\n\tvec3 Favg = Fr + ( 1.0 - Fr ) * 0.047619;\tvec3 Fms = FssEss * Favg / ( 1.0 - Ems * Favg );\n\tsingleScatter += FssEss;\n\tmultiScatter += Fms * Ems;\n}\n#if NUM_RECT_AREA_LIGHTS > 0\n\tvoid RE_Direct_RectArea_Physical( const in RectAreaLight rectAreaLight, const in GeometricContext geometry, const in PhysicalMaterial material, inout ReflectedLight reflectedLight ) {\n\t\tvec3 normal = geometry.normal;\n\t\tvec3 viewDir = geometry.viewDir;\n\t\tvec3 position = geometry.position;\n\t\tvec3 lightPos = rectAreaLight.position;\n\t\tvec3 halfWidth = rectAreaLight.halfWidth;\n\t\tvec3 halfHeight = rectAreaLight.halfHeight;\n\t\tvec3 lightColor = rectAreaLight.color;\n\t\tfloat roughness = material.roughness;\n\t\tvec3 rectCoords[ 4 ];\n\t\trectCoords[ 0 ] = lightPos + halfWidth - halfHeight;\t\trectCoords[ 1 ] = lightPos - halfWidth - halfHeight;\n\t\trectCoords[ 2 ] = lightPos - halfWidth + halfHeight;\n\t\trectCoords[ 3 ] = lightPos + halfWidth + halfHeight;\n\t\tvec2 uv = LTC_Uv( normal, viewDir, roughness );\n\t\tvec4 t1 = texture2D( ltc_1, uv );\n\t\tvec4 t2 = texture2D( ltc_2, uv );\n\t\tmat3 mInv = mat3(\n\t\t\tvec3( t1.x, 0, t1.y ),\n\t\t\tvec3( 0, 1, 0 ),\n\t\t\tvec3( t1.z, 0, t1.w )\n\t\t);\n\t\tvec3 fresnel = ( material.specularColor * t2.x + ( vec3( 1.0 ) - material.specularColor ) * t2.y );\n\t\treflectedLight.directSpecular += lightColor * fresnel * LTC_Evaluate( normal, viewDir, position, mInv, rectCoords );\n\t\treflectedLight.directDiffuse += lightColor * material.diffuseColor * LTC_Evaluate( normal, viewDir, position, mat3( 1.0 ), rectCoords );\n\t}\n#endif\nvoid RE_Direct_Physical( const in IncidentLight directLight, const in GeometricContext geometry, const in PhysicalMaterial material, inout ReflectedLight reflectedLight ) {\n\tfloat dotNL = saturate( dot( geometry.normal, directLight.direction ) );\n\tvec3 irradiance = dotNL * directLight.color;\n\t#ifdef USE_CLEARCOAT\n\t\tfloat dotNLcc = saturate( dot( geometry.clearcoatNormal, directLight.direction ) );\n\t\tvec3 ccIrradiance = dotNLcc * directLight.color;\n\t\tclearcoatSpecular += ccIrradiance * BRDF_GGX( directLight.direction, geometry.viewDir, geometry.clearcoatNormal, material.clearcoatF0, material.clearcoatF90, material.clearcoatRoughness );\n\t#endif\n\t#ifdef USE_SHEEN\n\t\tsheenSpecular += irradiance * BRDF_Sheen( directLight.direction, geometry.viewDir, geometry.normal, material.sheenColor, material.sheenRoughness );\n\t#endif\n\t#ifdef USE_IRIDESCENCE\n\t\treflectedLight.directSpecular += irradiance * BRDF_GGX_Iridescence( directLight.direction, geometry.viewDir, geometry.normal, material.specularColor, material.specularF90, material.iridescence, material.iridescenceFresnel, material.roughness );\n\t#else\n\t\treflectedLight.directSpecular += irradiance * BRDF_GGX( directLight.direction, geometry.viewDir, geometry.normal, material.specularColor, material.specularF90, material.roughness );\n\t#endif\n\treflectedLight.directDiffuse += irradiance * BRDF_Lambert( material.diffuseColor );\n}\nvoid RE_IndirectDiffuse_Physical( const in vec3 irradiance, const in GeometricContext geometry, const in PhysicalMaterial material, inout ReflectedLight reflectedLight ) {\n\treflectedLight.indirectDiffuse += irradiance * BRDF_Lambert( material.diffuseColor );\n}\nvoid RE_IndirectSpecular_Physical( const in vec3 radiance, const in vec3 irradiance, const in vec3 clearcoatRadiance, const in GeometricContext geometry, const in PhysicalMaterial material, inout ReflectedLight reflectedLight) {\n\t#ifdef USE_CLEARCOAT\n\t\tclearcoatSpecular += clearcoatRadiance * EnvironmentBRDF( geometry.clearcoatNormal, geometry.viewDir, material.clearcoatF0, material.clearcoatF90, material.clearcoatRoughness );\n\t#endif\n\t#ifdef USE_SHEEN\n\t\tsheenSpecular += irradiance * material.sheenColor * IBLSheenBRDF( geometry.normal, geometry.viewDir, material.sheenRoughness );\n\t#endif\n\tvec3 singleScattering = vec3( 0.0 );\n\tvec3 multiScattering = vec3( 0.0 );\n\tvec3 cosineWeightedIrradiance = irradiance * RECIPROCAL_PI;\n\t#ifdef USE_IRIDESCENCE\n\t\tcomputeMultiscatteringIridescence( geometry.normal, geometry.viewDir, material.specularColor, material.specularF90, material.iridescence, material.iridescenceFresnel, material.roughness, singleScattering, multiScattering );\n\t#else\n\t\tcomputeMultiscattering( geometry.normal, geometry.viewDir, material.specularColor, material.specularF90, material.roughness, singleScattering, multiScattering );\n\t#endif\n\tvec3 totalScattering = singleScattering + multiScattering;\n\tvec3 diffuse = material.diffuseColor * ( 1.0 - max( max( totalScattering.r, totalScattering.g ), totalScattering.b ) );\n\treflectedLight.indirectSpecular += radiance * singleScattering;\n\treflectedLight.indirectSpecular += multiScattering * cosineWeightedIrradiance;\n\treflectedLight.indirectDiffuse += diffuse * cosineWeightedIrradiance;\n}\n#define RE_Direct\t\t\t\tRE_Direct_Physical\n#define RE_Direct_RectArea\t\tRE_Direct_RectArea_Physical\n#define RE_IndirectDiffuse\t\tRE_IndirectDiffuse_Physical\n#define RE_IndirectSpecular\t\tRE_IndirectSpecular_Physical\nfloat computeSpecularOcclusion( const in float dotNV, const in float ambientOcclusion, const in float roughness ) {\n\treturn saturate( pow( dotNV + ambientOcclusion, exp2( - 16.0 * roughness - 1.0 ) ) - 1.0 + ambientOcclusion );\n}",lights_fragment_begin:"\nGeometricContext geometry;\ngeometry.position = - vViewPosition;\ngeometry.normal = normal;\ngeometry.viewDir = ( isOrthographic ) ? vec3( 0, 0, 1 ) : normalize( vViewPosition );\n#ifdef USE_CLEARCOAT\n\tgeometry.clearcoatNormal = clearcoatNormal;\n#endif\n#ifdef USE_IRIDESCENCE\n\tfloat dotNVi = saturate( dot( normal, geometry.viewDir ) );\n\tif ( material.iridescenceThickness == 0.0 ) {\n\t\tmaterial.iridescence = 0.0;\n\t} else {\n\t\tmaterial.iridescence = saturate( material.iridescence );\n\t}\n\tif ( material.iridescence > 0.0 ) {\n\t\tmaterial.iridescenceFresnel = evalIridescence( 1.0, material.iridescenceIOR, dotNVi, material.iridescenceThickness, material.specularColor );\n\t\tmaterial.iridescenceF0 = Schlick_to_F0( material.iridescenceFresnel, 1.0, dotNVi );\n\t}\n#endif\nIncidentLight directLight;\n#if ( NUM_POINT_LIGHTS > 0 ) && defined( RE_Direct )\n\tPointLight pointLight;\n\t#if defined( USE_SHADOWMAP ) && NUM_POINT_LIGHT_SHADOWS > 0\n\tPointLightShadow pointLightShadow;\n\t#endif\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_POINT_LIGHTS; i ++ ) {\n\t\tpointLight = pointLights[ i ];\n\t\tgetPointLightInfo( pointLight, geometry, directLight );\n\t\t#if defined( USE_SHADOWMAP ) && ( UNROLLED_LOOP_INDEX < NUM_POINT_LIGHT_SHADOWS )\n\t\tpointLightShadow = pointLightShadows[ i ];\n\t\tdirectLight.color *= ( directLight.visible && receiveShadow ) ? getPointShadow( pointShadowMap[ i ], pointLightShadow.shadowMapSize, pointLightShadow.shadowBias, pointLightShadow.shadowRadius, vPointShadowCoord[ i ], pointLightShadow.shadowCameraNear, pointLightShadow.shadowCameraFar ) : 1.0;\n\t\t#endif\n\t\tRE_Direct( directLight, geometry, material, reflectedLight );\n\t}\n\t#pragma unroll_loop_end\n#endif\n#if ( NUM_SPOT_LIGHTS > 0 ) && defined( RE_Direct )\n\tSpotLight spotLight;\n\tvec4 spotColor;\n\tvec3 spotLightCoord;\n\tbool inSpotLightMap;\n\t#if defined( USE_SHADOWMAP ) && NUM_SPOT_LIGHT_SHADOWS > 0\n\tSpotLightShadow spotLightShadow;\n\t#endif\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_SPOT_LIGHTS; i ++ ) {\n\t\tspotLight = spotLights[ i ];\n\t\tgetSpotLightInfo( spotLight, geometry, directLight );\n\t\t#if ( UNROLLED_LOOP_INDEX < NUM_SPOT_LIGHT_SHADOWS_WITH_MAPS )\n\t\t#define SPOT_LIGHT_MAP_INDEX UNROLLED_LOOP_INDEX\n\t\t#elif ( UNROLLED_LOOP_INDEX < NUM_SPOT_LIGHT_SHADOWS )\n\t\t#define SPOT_LIGHT_MAP_INDEX NUM_SPOT_LIGHT_MAPS\n\t\t#else\n\t\t#define SPOT_LIGHT_MAP_INDEX ( UNROLLED_LOOP_INDEX - NUM_SPOT_LIGHT_SHADOWS + NUM_SPOT_LIGHT_SHADOWS_WITH_MAPS )\n\t\t#endif\n\t\t#if ( SPOT_LIGHT_MAP_INDEX < NUM_SPOT_LIGHT_MAPS )\n\t\t\tspotLightCoord = vSpotLightCoord[ i ].xyz / vSpotLightCoord[ i ].w;\n\t\t\tinSpotLightMap = all( lessThan( abs( spotLightCoord * 2. - 1. ), vec3( 1.0 ) ) );\n\t\t\tspotColor = texture2D( spotLightMap[ SPOT_LIGHT_MAP_INDEX ], spotLightCoord.xy );\n\t\t\tdirectLight.color = inSpotLightMap ? directLight.color * spotColor.rgb : directLight.color;\n\t\t#endif\n\t\t#undef SPOT_LIGHT_MAP_INDEX\n\t\t#if defined( USE_SHADOWMAP ) && ( UNROLLED_LOOP_INDEX < NUM_SPOT_LIGHT_SHADOWS )\n\t\tspotLightShadow = spotLightShadows[ i ];\n\t\tdirectLight.color *= ( directLight.visible && receiveShadow ) ? getShadow( spotShadowMap[ i ], spotLightShadow.shadowMapSize, spotLightShadow.shadowBias, spotLightShadow.shadowRadius, vSpotLightCoord[ i ] ) : 1.0;\n\t\t#endif\n\t\tRE_Direct( directLight, geometry, material, reflectedLight );\n\t}\n\t#pragma unroll_loop_end\n#endif\n#if ( NUM_DIR_LIGHTS > 0 ) && defined( RE_Direct )\n\tDirectionalLight directionalLight;\n\t#if defined( USE_SHADOWMAP ) && NUM_DIR_LIGHT_SHADOWS > 0\n\tDirectionalLightShadow directionalLightShadow;\n\t#endif\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_DIR_LIGHTS; i ++ ) {\n\t\tdirectionalLight = directionalLights[ i ];\n\t\tgetDirectionalLightInfo( directionalLight, geometry, directLight );\n\t\t#if defined( USE_SHADOWMAP ) && ( UNROLLED_LOOP_INDEX < NUM_DIR_LIGHT_SHADOWS )\n\t\tdirectionalLightShadow = directionalLightShadows[ i ];\n\t\tdirectLight.color *= ( directLight.visible && receiveShadow ) ? getShadow( directionalShadowMap[ i ], directionalLightShadow.shadowMapSize, directionalLightShadow.shadowBias, directionalLightShadow.shadowRadius, vDirectionalShadowCoord[ i ] ) : 1.0;\n\t\t#endif\n\t\tRE_Direct( directLight, geometry, material, reflectedLight );\n\t}\n\t#pragma unroll_loop_end\n#endif\n#if ( NUM_RECT_AREA_LIGHTS > 0 ) && defined( RE_Direct_RectArea )\n\tRectAreaLight rectAreaLight;\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_RECT_AREA_LIGHTS; i ++ ) {\n\t\trectAreaLight = rectAreaLights[ i ];\n\t\tRE_Direct_RectArea( rectAreaLight, geometry, material, reflectedLight );\n\t}\n\t#pragma unroll_loop_end\n#endif\n#if defined( RE_IndirectDiffuse )\n\tvec3 iblIrradiance = vec3( 0.0 );\n\tvec3 irradiance = getAmbientLightIrradiance( ambientLightColor );\n\tirradiance += getLightProbeIrradiance( lightProbe, geometry.normal );\n\t#if ( NUM_HEMI_LIGHTS > 0 )\n\t\t#pragma unroll_loop_start\n\t\tfor ( int i = 0; i < NUM_HEMI_LIGHTS; i ++ ) {\n\t\t\tirradiance += getHemisphereLightIrradiance( hemisphereLights[ i ], geometry.normal );\n\t\t}\n\t\t#pragma unroll_loop_end\n\t#endif\n#endif\n#if defined( RE_IndirectSpecular )\n\tvec3 radiance = vec3( 0.0 );\n\tvec3 clearcoatRadiance = vec3( 0.0 );\n#endif",lights_fragment_maps:"#if defined( RE_IndirectDiffuse )\n\t#ifdef USE_LIGHTMAP\n\t\tvec4 lightMapTexel = texture2D( lightMap, vUv2 );\n\t\tvec3 lightMapIrradiance = lightMapTexel.rgb * lightMapIntensity;\n\t\tirradiance += lightMapIrradiance;\n\t#endif\n\t#if defined( USE_ENVMAP ) && defined( STANDARD ) && defined( ENVMAP_TYPE_CUBE_UV )\n\t\tiblIrradiance += getIBLIrradiance( geometry.normal );\n\t#endif\n#endif\n#if defined( USE_ENVMAP ) && defined( RE_IndirectSpecular )\n\tradiance += getIBLRadiance( geometry.viewDir, geometry.normal, material.roughness );\n\t#ifdef USE_CLEARCOAT\n\t\tclearcoatRadiance += getIBLRadiance( geometry.viewDir, geometry.clearcoatNormal, material.clearcoatRoughness );\n\t#endif\n#endif",lights_fragment_end:"#if defined( RE_IndirectDiffuse )\n\tRE_IndirectDiffuse( irradiance, geometry, material, reflectedLight );\n#endif\n#if defined( RE_IndirectSpecular )\n\tRE_IndirectSpecular( radiance, iblIrradiance, clearcoatRadiance, geometry, material, reflectedLight );\n#endif",logdepthbuf_fragment:"#if defined( USE_LOGDEPTHBUF ) && defined( USE_LOGDEPTHBUF_EXT )\n\tgl_FragDepthEXT = vIsPerspective == 0.0 ? gl_FragCoord.z : log2( vFragDepth ) * logDepthBufFC * 0.5;\n#endif",logdepthbuf_pars_fragment:"#if defined( USE_LOGDEPTHBUF ) && defined( USE_LOGDEPTHBUF_EXT )\n\tuniform float logDepthBufFC;\n\tvarying float vFragDepth;\n\tvarying float vIsPerspective;\n#endif",logdepthbuf_pars_vertex:"#ifdef USE_LOGDEPTHBUF\n\t#ifdef USE_LOGDEPTHBUF_EXT\n\t\tvarying float vFragDepth;\n\t\tvarying float vIsPerspective;\n\t#else\n\t\tuniform float logDepthBufFC;\n\t#endif\n#endif",logdepthbuf_vertex:"#ifdef USE_LOGDEPTHBUF\n\t#ifdef USE_LOGDEPTHBUF_EXT\n\t\tvFragDepth = 1.0 + gl_Position.w;\n\t\tvIsPerspective = float( isPerspectiveMatrix( projectionMatrix ) );\n\t#else\n\t\tif ( isPerspectiveMatrix( projectionMatrix ) ) {\n\t\t\tgl_Position.z = log2( max( EPSILON, gl_Position.w + 1.0 ) ) * logDepthBufFC - 1.0;\n\t\t\tgl_Position.z *= gl_Position.w;\n\t\t}\n\t#endif\n#endif",map_fragment:"#ifdef USE_MAP\n\tvec4 sampledDiffuseColor = texture2D( map, vUv );\n\t#ifdef DECODE_VIDEO_TEXTURE\n\t\tsampledDiffuseColor = vec4( mix( pow( sampledDiffuseColor.rgb * 0.9478672986 + vec3( 0.0521327014 ), vec3( 2.4 ) ), sampledDiffuseColor.rgb * 0.0773993808, vec3( lessThanEqual( sampledDiffuseColor.rgb, vec3( 0.04045 ) ) ) ), sampledDiffuseColor.w );\n\t#endif\n\tdiffuseColor *= sampledDiffuseColor;\n#endif",map_pars_fragment:"#ifdef USE_MAP\n\tuniform sampler2D map;\n#endif",map_particle_fragment:"#if defined( USE_MAP ) || defined( USE_ALPHAMAP )\n\tvec2 uv = ( uvTransform * vec3( gl_PointCoord.x, 1.0 - gl_PointCoord.y, 1 ) ).xy;\n#endif\n#ifdef USE_MAP\n\tdiffuseColor *= texture2D( map, uv );\n#endif\n#ifdef USE_ALPHAMAP\n\tdiffuseColor.a *= texture2D( alphaMap, uv ).g;\n#endif",map_particle_pars_fragment:"#if defined( USE_MAP ) || defined( USE_ALPHAMAP )\n\tuniform mat3 uvTransform;\n#endif\n#ifdef USE_MAP\n\tuniform sampler2D map;\n#endif\n#ifdef USE_ALPHAMAP\n\tuniform sampler2D alphaMap;\n#endif",metalnessmap_fragment:"float metalnessFactor = metalness;\n#ifdef USE_METALNESSMAP\n\tvec4 texelMetalness = texture2D( metalnessMap, vUv );\n\tmetalnessFactor *= texelMetalness.b;\n#endif",metalnessmap_pars_fragment:"#ifdef USE_METALNESSMAP\n\tuniform sampler2D metalnessMap;\n#endif",morphcolor_vertex:"#if defined( USE_MORPHCOLORS ) && defined( MORPHTARGETS_TEXTURE )\n\tvColor *= morphTargetBaseInfluence;\n\tfor ( int i = 0; i < MORPHTARGETS_COUNT; i ++ ) {\n\t\t#if defined( USE_COLOR_ALPHA )\n\t\t\tif ( morphTargetInfluences[ i ] != 0.0 ) vColor += getMorph( gl_VertexID, i, 2 ) * morphTargetInfluences[ i ];\n\t\t#elif defined( USE_COLOR )\n\t\t\tif ( morphTargetInfluences[ i ] != 0.0 ) vColor += getMorph( gl_VertexID, i, 2 ).rgb * morphTargetInfluences[ i ];\n\t\t#endif\n\t}\n#endif",morphnormal_vertex:"#ifdef USE_MORPHNORMALS\n\tobjectNormal *= morphTargetBaseInfluence;\n\t#ifdef MORPHTARGETS_TEXTURE\n\t\tfor ( int i = 0; i < MORPHTARGETS_COUNT; i ++ ) {\n\t\t\tif ( morphTargetInfluences[ i ] != 0.0 ) objectNormal += getMorph( gl_VertexID, i, 1 ).xyz * morphTargetInfluences[ i ];\n\t\t}\n\t#else\n\t\tobjectNormal += morphNormal0 * morphTargetInfluences[ 0 ];\n\t\tobjectNormal += morphNormal1 * morphTargetInfluences[ 1 ];\n\t\tobjectNormal += morphNormal2 * morphTargetInfluences[ 2 ];\n\t\tobjectNormal += morphNormal3 * morphTargetInfluences[ 3 ];\n\t#endif\n#endif",morphtarget_pars_vertex:"#ifdef USE_MORPHTARGETS\n\tuniform float morphTargetBaseInfluence;\n\t#ifdef MORPHTARGETS_TEXTURE\n\t\tuniform float morphTargetInfluences[ MORPHTARGETS_COUNT ];\n\t\tuniform sampler2DArray morphTargetsTexture;\n\t\tuniform ivec2 morphTargetsTextureSize;\n\t\tvec4 getMorph( const in int vertexIndex, const in int morphTargetIndex, const in int offset ) {\n\t\t\tint texelIndex = vertexIndex * MORPHTARGETS_TEXTURE_STRIDE + offset;\n\t\t\tint y = texelIndex / morphTargetsTextureSize.x;\n\t\t\tint x = texelIndex - y * morphTargetsTextureSize.x;\n\t\t\tivec3 morphUV = ivec3( x, y, morphTargetIndex );\n\t\t\treturn texelFetch( morphTargetsTexture, morphUV, 0 );\n\t\t}\n\t#else\n\t\t#ifndef USE_MORPHNORMALS\n\t\t\tuniform float morphTargetInfluences[ 8 ];\n\t\t#else\n\t\t\tuniform float morphTargetInfluences[ 4 ];\n\t\t#endif\n\t#endif\n#endif",morphtarget_vertex:"#ifdef USE_MORPHTARGETS\n\ttransformed *= morphTargetBaseInfluence;\n\t#ifdef MORPHTARGETS_TEXTURE\n\t\tfor ( int i = 0; i < MORPHTARGETS_COUNT; i ++ ) {\n\t\t\tif ( morphTargetInfluences[ i ] != 0.0 ) transformed += getMorph( gl_VertexID, i, 0 ).xyz * morphTargetInfluences[ i ];\n\t\t}\n\t#else\n\t\ttransformed += morphTarget0 * morphTargetInfluences[ 0 ];\n\t\ttransformed += morphTarget1 * morphTargetInfluences[ 1 ];\n\t\ttransformed += morphTarget2 * morphTargetInfluences[ 2 ];\n\t\ttransformed += morphTarget3 * morphTargetInfluences[ 3 ];\n\t\t#ifndef USE_MORPHNORMALS\n\t\t\ttransformed += morphTarget4 * morphTargetInfluences[ 4 ];\n\t\t\ttransformed += morphTarget5 * morphTargetInfluences[ 5 ];\n\t\t\ttransformed += morphTarget6 * morphTargetInfluences[ 6 ];\n\t\t\ttransformed += morphTarget7 * morphTargetInfluences[ 7 ];\n\t\t#endif\n\t#endif\n#endif",normal_fragment_begin:"float faceDirection = gl_FrontFacing ? 1.0 : - 1.0;\n#ifdef FLAT_SHADED\n\tvec3 fdx = dFdx( vViewPosition );\n\tvec3 fdy = dFdy( vViewPosition );\n\tvec3 normal = normalize( cross( fdx, fdy ) );\n#else\n\tvec3 normal = normalize( vNormal );\n\t#ifdef DOUBLE_SIDED\n\t\tnormal = normal * faceDirection;\n\t#endif\n\t#ifdef USE_TANGENT\n\t\tvec3 tangent = normalize( vTangent );\n\t\tvec3 bitangent = normalize( vBitangent );\n\t\t#ifdef DOUBLE_SIDED\n\t\t\ttangent = tangent * faceDirection;\n\t\t\tbitangent = bitangent * faceDirection;\n\t\t#endif\n\t\t#if defined( TANGENTSPACE_NORMALMAP ) || defined( USE_CLEARCOAT_NORMALMAP )\n\t\t\tmat3 vTBN = mat3( tangent, bitangent, normal );\n\t\t#endif\n\t#endif\n#endif\nvec3 geometryNormal = normal;",normal_fragment_maps:"#ifdef OBJECTSPACE_NORMALMAP\n\tnormal = texture2D( normalMap, vUv ).xyz * 2.0 - 1.0;\n\t#ifdef FLIP_SIDED\n\t\tnormal = - normal;\n\t#endif\n\t#ifdef DOUBLE_SIDED\n\t\tnormal = normal * faceDirection;\n\t#endif\n\tnormal = normalize( normalMatrix * normal );\n#elif defined( TANGENTSPACE_NORMALMAP )\n\tvec3 mapN = texture2D( normalMap, vUv ).xyz * 2.0 - 1.0;\n\tmapN.xy *= normalScale;\n\t#ifdef USE_TANGENT\n\t\tnormal = normalize( vTBN * mapN );\n\t#else\n\t\tnormal = perturbNormal2Arb( - vViewPosition, normal, mapN, faceDirection );\n\t#endif\n#elif defined( USE_BUMPMAP )\n\tnormal = perturbNormalArb( - vViewPosition, normal, dHdxy_fwd(), faceDirection );\n#endif",normal_pars_fragment:"#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n\t#ifdef USE_TANGENT\n\t\tvarying vec3 vTangent;\n\t\tvarying vec3 vBitangent;\n\t#endif\n#endif",normal_pars_vertex:"#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n\t#ifdef USE_TANGENT\n\t\tvarying vec3 vTangent;\n\t\tvarying vec3 vBitangent;\n\t#endif\n#endif",normal_vertex:"#ifndef FLAT_SHADED\n\tvNormal = normalize( transformedNormal );\n\t#ifdef USE_TANGENT\n\t\tvTangent = normalize( transformedTangent );\n\t\tvBitangent = normalize( cross( vNormal, vTangent ) * tangent.w );\n\t#endif\n#endif",normalmap_pars_fragment:"#ifdef USE_NORMALMAP\n\tuniform sampler2D normalMap;\n\tuniform vec2 normalScale;\n#endif\n#ifdef OBJECTSPACE_NORMALMAP\n\tuniform mat3 normalMatrix;\n#endif\n#if ! defined ( USE_TANGENT ) && ( defined ( TANGENTSPACE_NORMALMAP ) || defined ( USE_CLEARCOAT_NORMALMAP ) )\n\tvec3 perturbNormal2Arb( vec3 eye_pos, vec3 surf_norm, vec3 mapN, float faceDirection ) {\n\t\tvec3 q0 = dFdx( eye_pos.xyz );\n\t\tvec3 q1 = dFdy( eye_pos.xyz );\n\t\tvec2 st0 = dFdx( vUv.st );\n\t\tvec2 st1 = dFdy( vUv.st );\n\t\tvec3 N = surf_norm;\n\t\tvec3 q1perp = cross( q1, N );\n\t\tvec3 q0perp = cross( N, q0 );\n\t\tvec3 T = q1perp * st0.x + q0perp * st1.x;\n\t\tvec3 B = q1perp * st0.y + q0perp * st1.y;\n\t\tfloat det = max( dot( T, T ), dot( B, B ) );\n\t\tfloat scale = ( det == 0.0 ) ? 0.0 : faceDirection * inversesqrt( det );\n\t\treturn normalize( T * ( mapN.x * scale ) + B * ( mapN.y * scale ) + N * mapN.z );\n\t}\n#endif",clearcoat_normal_fragment_begin:"#ifdef USE_CLEARCOAT\n\tvec3 clearcoatNormal = geometryNormal;\n#endif",clearcoat_normal_fragment_maps:"#ifdef USE_CLEARCOAT_NORMALMAP\n\tvec3 clearcoatMapN = texture2D( clearcoatNormalMap, vUv ).xyz * 2.0 - 1.0;\n\tclearcoatMapN.xy *= clearcoatNormalScale;\n\t#ifdef USE_TANGENT\n\t\tclearcoatNormal = normalize( vTBN * clearcoatMapN );\n\t#else\n\t\tclearcoatNormal = perturbNormal2Arb( - vViewPosition, clearcoatNormal, clearcoatMapN, faceDirection );\n\t#endif\n#endif",clearcoat_pars_fragment:"#ifdef USE_CLEARCOATMAP\n\tuniform sampler2D clearcoatMap;\n#endif\n#ifdef USE_CLEARCOAT_ROUGHNESSMAP\n\tuniform sampler2D clearcoatRoughnessMap;\n#endif\n#ifdef USE_CLEARCOAT_NORMALMAP\n\tuniform sampler2D clearcoatNormalMap;\n\tuniform vec2 clearcoatNormalScale;\n#endif",iridescence_pars_fragment:"#ifdef USE_IRIDESCENCEMAP\n\tuniform sampler2D iridescenceMap;\n#endif\n#ifdef USE_IRIDESCENCE_THICKNESSMAP\n\tuniform sampler2D iridescenceThicknessMap;\n#endif",output_fragment:"#ifdef OPAQUE\ndiffuseColor.a = 1.0;\n#endif\n#ifdef USE_TRANSMISSION\ndiffuseColor.a *= material.transmissionAlpha + 0.1;\n#endif\ngl_FragColor = vec4( outgoingLight, diffuseColor.a );",packing:"vec3 packNormalToRGB( const in vec3 normal ) {\n\treturn normalize( normal ) * 0.5 + 0.5;\n}\nvec3 unpackRGBToNormal( const in vec3 rgb ) {\n\treturn 2.0 * rgb.xyz - 1.0;\n}\nconst float PackUpscale = 256. / 255.;const float UnpackDownscale = 255. / 256.;\nconst vec3 PackFactors = vec3( 256. * 256. * 256., 256. * 256., 256. );\nconst vec4 UnpackFactors = UnpackDownscale / vec4( PackFactors, 1. );\nconst float ShiftRight8 = 1. / 256.;\nvec4 packDepthToRGBA( const in float v ) {\n\tvec4 r = vec4( fract( v * PackFactors ), v );\n\tr.yzw -= r.xyz * ShiftRight8;\treturn r * PackUpscale;\n}\nfloat unpackRGBAToDepth( const in vec4 v ) {\n\treturn dot( v, UnpackFactors );\n}\nvec2 packDepthToRG( in highp float v ) {\n\treturn packDepthToRGBA( v ).yx;\n}\nfloat unpackRGToDepth( const in highp vec2 v ) {\n\treturn unpackRGBAToDepth( vec4( v.xy, 0.0, 0.0 ) );\n}\nvec4 pack2HalfToRGBA( vec2 v ) {\n\tvec4 r = vec4( v.x, fract( v.x * 255.0 ), v.y, fract( v.y * 255.0 ) );\n\treturn vec4( r.x - r.y / 255.0, r.y, r.z - r.w / 255.0, r.w );\n}\nvec2 unpackRGBATo2Half( vec4 v ) {\n\treturn vec2( v.x + ( v.y / 255.0 ), v.z + ( v.w / 255.0 ) );\n}\nfloat viewZToOrthographicDepth( const in float viewZ, const in float near, const in float far ) {\n\treturn ( viewZ + near ) / ( near - far );\n}\nfloat orthographicDepthToViewZ( const in float linearClipZ, const in float near, const in float far ) {\n\treturn linearClipZ * ( near - far ) - near;\n}\nfloat viewZToPerspectiveDepth( const in float viewZ, const in float near, const in float far ) {\n\treturn ( ( near + viewZ ) * far ) / ( ( far - near ) * viewZ );\n}\nfloat perspectiveDepthToViewZ( const in float invClipZ, const in float near, const in float far ) {\n\treturn ( near * far ) / ( ( far - near ) * invClipZ - far );\n}",premultiplied_alpha_fragment:"#ifdef PREMULTIPLIED_ALPHA\n\tgl_FragColor.rgb *= gl_FragColor.a;\n#endif",project_vertex:"vec4 mvPosition = vec4( transformed, 1.0 );\n#ifdef USE_INSTANCING\n\tmvPosition = instanceMatrix * mvPosition;\n#endif\nmvPosition = modelViewMatrix * mvPosition;\ngl_Position = projectionMatrix * mvPosition;",dithering_fragment:"#ifdef DITHERING\n\tgl_FragColor.rgb = dithering( gl_FragColor.rgb );\n#endif",dithering_pars_fragment:"#ifdef DITHERING\n\tvec3 dithering( vec3 color ) {\n\t\tfloat grid_position = rand( gl_FragCoord.xy );\n\t\tvec3 dither_shift_RGB = vec3( 0.25 / 255.0, -0.25 / 255.0, 0.25 / 255.0 );\n\t\tdither_shift_RGB = mix( 2.0 * dither_shift_RGB, -2.0 * dither_shift_RGB, grid_position );\n\t\treturn color + dither_shift_RGB;\n\t}\n#endif",roughnessmap_fragment:"float roughnessFactor = roughness;\n#ifdef USE_ROUGHNESSMAP\n\tvec4 texelRoughness = texture2D( roughnessMap, vUv );\n\troughnessFactor *= texelRoughness.g;\n#endif",roughnessmap_pars_fragment:"#ifdef USE_ROUGHNESSMAP\n\tuniform sampler2D roughnessMap;\n#endif",shadowmap_pars_fragment:"#if NUM_SPOT_LIGHT_COORDS > 0\n varying vec4 vSpotLightCoord[ NUM_SPOT_LIGHT_COORDS ];\n#endif\n#if NUM_SPOT_LIGHT_MAPS > 0\n uniform sampler2D spotLightMap[ NUM_SPOT_LIGHT_MAPS ];\n#endif\n#ifdef USE_SHADOWMAP\n\t#if NUM_DIR_LIGHT_SHADOWS > 0\n\t\tuniform sampler2D directionalShadowMap[ NUM_DIR_LIGHT_SHADOWS ];\n\t\tvarying vec4 vDirectionalShadowCoord[ NUM_DIR_LIGHT_SHADOWS ];\n\t\tstruct DirectionalLightShadow {\n\t\t\tfloat shadowBias;\n\t\t\tfloat shadowNormalBias;\n\t\t\tfloat shadowRadius;\n\t\t\tvec2 shadowMapSize;\n\t\t};\n\t\tuniform DirectionalLightShadow directionalLightShadows[ NUM_DIR_LIGHT_SHADOWS ];\n\t#endif\n\t#if NUM_SPOT_LIGHT_SHADOWS > 0\n\t\tuniform sampler2D spotShadowMap[ NUM_SPOT_LIGHT_SHADOWS ];\n\t\tstruct SpotLightShadow {\n\t\t\tfloat shadowBias;\n\t\t\tfloat shadowNormalBias;\n\t\t\tfloat shadowRadius;\n\t\t\tvec2 shadowMapSize;\n\t\t};\n\t\tuniform SpotLightShadow spotLightShadows[ NUM_SPOT_LIGHT_SHADOWS ];\n\t#endif\n\t#if NUM_POINT_LIGHT_SHADOWS > 0\n\t\tuniform sampler2D pointShadowMap[ NUM_POINT_LIGHT_SHADOWS ];\n\t\tvarying vec4 vPointShadowCoord[ NUM_POINT_LIGHT_SHADOWS ];\n\t\tstruct PointLightShadow {\n\t\t\tfloat shadowBias;\n\t\t\tfloat shadowNormalBias;\n\t\t\tfloat shadowRadius;\n\t\t\tvec2 shadowMapSize;\n\t\t\tfloat shadowCameraNear;\n\t\t\tfloat shadowCameraFar;\n\t\t};\n\t\tuniform PointLightShadow pointLightShadows[ NUM_POINT_LIGHT_SHADOWS ];\n\t#endif\n\tfloat texture2DCompare( sampler2D depths, vec2 uv, float compare ) {\n\t\treturn step( compare, unpackRGBAToDepth( texture2D( depths, uv ) ) );\n\t}\n\tvec2 texture2DDistribution( sampler2D shadow, vec2 uv ) {\n\t\treturn unpackRGBATo2Half( texture2D( shadow, uv ) );\n\t}\n\tfloat VSMShadow (sampler2D shadow, vec2 uv, float compare ){\n\t\tfloat occlusion = 1.0;\n\t\tvec2 distribution = texture2DDistribution( shadow, uv );\n\t\tfloat hard_shadow = step( compare , distribution.x );\n\t\tif (hard_shadow != 1.0 ) {\n\t\t\tfloat distance = compare - distribution.x ;\n\t\t\tfloat variance = max( 0.00000, distribution.y * distribution.y );\n\t\t\tfloat softness_probability = variance / (variance + distance * distance );\t\t\tsoftness_probability = clamp( ( softness_probability - 0.3 ) / ( 0.95 - 0.3 ), 0.0, 1.0 );\t\t\tocclusion = clamp( max( hard_shadow, softness_probability ), 0.0, 1.0 );\n\t\t}\n\t\treturn occlusion;\n\t}\n\tfloat getShadow( sampler2D shadowMap, vec2 shadowMapSize, float shadowBias, float shadowRadius, vec4 shadowCoord ) {\n\t\tfloat shadow = 1.0;\n\t\tshadowCoord.xyz /= shadowCoord.w;\n\t\tshadowCoord.z += shadowBias;\n\t\tbool inFrustum = shadowCoord.x >= 0.0 && shadowCoord.x <= 1.0 && shadowCoord.y >= 0.0 && shadowCoord.y <= 1.0;\n\t\tbool frustumTest = inFrustum && shadowCoord.z <= 1.0;\n\t\tif ( frustumTest ) {\n\t\t#if defined( SHADOWMAP_TYPE_PCF )\n\t\t\tvec2 texelSize = vec2( 1.0 ) / shadowMapSize;\n\t\t\tfloat dx0 = - texelSize.x * shadowRadius;\n\t\t\tfloat dy0 = - texelSize.y * shadowRadius;\n\t\t\tfloat dx1 = + texelSize.x * shadowRadius;\n\t\t\tfloat dy1 = + texelSize.y * shadowRadius;\n\t\t\tfloat dx2 = dx0 / 2.0;\n\t\t\tfloat dy2 = dy0 / 2.0;\n\t\t\tfloat dx3 = dx1 / 2.0;\n\t\t\tfloat dy3 = dy1 / 2.0;\n\t\t\tshadow = (\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx0, dy0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( 0.0, dy0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx1, dy0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx2, dy2 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( 0.0, dy2 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx3, dy2 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx0, 0.0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx2, 0.0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy, shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx3, 0.0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx1, 0.0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx2, dy3 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( 0.0, dy3 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx3, dy3 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx0, dy1 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( 0.0, dy1 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx1, dy1 ), shadowCoord.z )\n\t\t\t) * ( 1.0 / 17.0 );\n\t\t#elif defined( SHADOWMAP_TYPE_PCF_SOFT )\n\t\t\tvec2 texelSize = vec2( 1.0 ) / shadowMapSize;\n\t\t\tfloat dx = texelSize.x;\n\t\t\tfloat dy = texelSize.y;\n\t\t\tvec2 uv = shadowCoord.xy;\n\t\t\tvec2 f = fract( uv * shadowMapSize + 0.5 );\n\t\t\tuv -= f * texelSize;\n\t\t\tshadow = (\n\t\t\t\ttexture2DCompare( shadowMap, uv, shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, uv + vec2( dx, 0.0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, uv + vec2( 0.0, dy ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, uv + texelSize, shadowCoord.z ) +\n\t\t\t\tmix( texture2DCompare( shadowMap, uv + vec2( -dx, 0.0 ), shadowCoord.z ),\n\t\t\t\t\t texture2DCompare( shadowMap, uv + vec2( 2.0 * dx, 0.0 ), shadowCoord.z ),\n\t\t\t\t\t f.x ) +\n\t\t\t\tmix( texture2DCompare( shadowMap, uv + vec2( -dx, dy ), shadowCoord.z ),\n\t\t\t\t\t texture2DCompare( shadowMap, uv + vec2( 2.0 * dx, dy ), shadowCoord.z ),\n\t\t\t\t\t f.x ) +\n\t\t\t\tmix( texture2DCompare( shadowMap, uv + vec2( 0.0, -dy ), shadowCoord.z ),\n\t\t\t\t\t texture2DCompare( shadowMap, uv + vec2( 0.0, 2.0 * dy ), shadowCoord.z ),\n\t\t\t\t\t f.y ) +\n\t\t\t\tmix( texture2DCompare( shadowMap, uv + vec2( dx, -dy ), shadowCoord.z ),\n\t\t\t\t\t texture2DCompare( shadowMap, uv + vec2( dx, 2.0 * dy ), shadowCoord.z ),\n\t\t\t\t\t f.y ) +\n\t\t\t\tmix( mix( texture2DCompare( shadowMap, uv + vec2( -dx, -dy ), shadowCoord.z ),\n\t\t\t\t\t\t texture2DCompare( shadowMap, uv + vec2( 2.0 * dx, -dy ), shadowCoord.z ),\n\t\t\t\t\t\t f.x ),\n\t\t\t\t\t mix( texture2DCompare( shadowMap, uv + vec2( -dx, 2.0 * dy ), shadowCoord.z ),\n\t\t\t\t\t\t texture2DCompare( shadowMap, uv + vec2( 2.0 * dx, 2.0 * dy ), shadowCoord.z ),\n\t\t\t\t\t\t f.x ),\n\t\t\t\t\t f.y )\n\t\t\t) * ( 1.0 / 9.0 );\n\t\t#elif defined( SHADOWMAP_TYPE_VSM )\n\t\t\tshadow = VSMShadow( shadowMap, shadowCoord.xy, shadowCoord.z );\n\t\t#else\n\t\t\tshadow = texture2DCompare( shadowMap, shadowCoord.xy, shadowCoord.z );\n\t\t#endif\n\t\t}\n\t\treturn shadow;\n\t}\n\tvec2 cubeToUV( vec3 v, float texelSizeY ) {\n\t\tvec3 absV = abs( v );\n\t\tfloat scaleToCube = 1.0 / max( absV.x, max( absV.y, absV.z ) );\n\t\tabsV *= scaleToCube;\n\t\tv *= scaleToCube * ( 1.0 - 2.0 * texelSizeY );\n\t\tvec2 planar = v.xy;\n\t\tfloat almostATexel = 1.5 * texelSizeY;\n\t\tfloat almostOne = 1.0 - almostATexel;\n\t\tif ( absV.z >= almostOne ) {\n\t\t\tif ( v.z > 0.0 )\n\t\t\t\tplanar.x = 4.0 - v.x;\n\t\t} else if ( absV.x >= almostOne ) {\n\t\t\tfloat signX = sign( v.x );\n\t\t\tplanar.x = v.z * signX + 2.0 * signX;\n\t\t} else if ( absV.y >= almostOne ) {\n\t\t\tfloat signY = sign( v.y );\n\t\t\tplanar.x = v.x + 2.0 * signY + 2.0;\n\t\t\tplanar.y = v.z * signY - 2.0;\n\t\t}\n\t\treturn vec2( 0.125, 0.25 ) * planar + vec2( 0.375, 0.75 );\n\t}\n\tfloat getPointShadow( sampler2D shadowMap, vec2 shadowMapSize, float shadowBias, float shadowRadius, vec4 shadowCoord, float shadowCameraNear, float shadowCameraFar ) {\n\t\tvec2 texelSize = vec2( 1.0 ) / ( shadowMapSize * vec2( 4.0, 2.0 ) );\n\t\tvec3 lightToPosition = shadowCoord.xyz;\n\t\tfloat dp = ( length( lightToPosition ) - shadowCameraNear ) / ( shadowCameraFar - shadowCameraNear );\t\tdp += shadowBias;\n\t\tvec3 bd3D = normalize( lightToPosition );\n\t\t#if defined( SHADOWMAP_TYPE_PCF ) || defined( SHADOWMAP_TYPE_PCF_SOFT ) || defined( SHADOWMAP_TYPE_VSM )\n\t\t\tvec2 offset = vec2( - 1, 1 ) * shadowRadius * texelSize.y;\n\t\t\treturn (\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.xyy, texelSize.y ), dp ) +\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.yyy, texelSize.y ), dp ) +\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.xyx, texelSize.y ), dp ) +\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.yyx, texelSize.y ), dp ) +\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D, texelSize.y ), dp ) +\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.xxy, texelSize.y ), dp ) +\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.yxy, texelSize.y ), dp ) +\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.xxx, texelSize.y ), dp ) +\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.yxx, texelSize.y ), dp )\n\t\t\t) * ( 1.0 / 9.0 );\n\t\t#else\n\t\t\treturn texture2DCompare( shadowMap, cubeToUV( bd3D, texelSize.y ), dp );\n\t\t#endif\n\t}\n#endif",shadowmap_pars_vertex:"#if NUM_SPOT_LIGHT_COORDS > 0\n uniform mat4 spotLightMatrix[ NUM_SPOT_LIGHT_COORDS ];\n varying vec4 vSpotLightCoord[ NUM_SPOT_LIGHT_COORDS ];\n#endif\n#ifdef USE_SHADOWMAP\n\t#if NUM_DIR_LIGHT_SHADOWS > 0\n\t\tuniform mat4 directionalShadowMatrix[ NUM_DIR_LIGHT_SHADOWS ];\n\t\tvarying vec4 vDirectionalShadowCoord[ NUM_DIR_LIGHT_SHADOWS ];\n\t\tstruct DirectionalLightShadow {\n\t\t\tfloat shadowBias;\n\t\t\tfloat shadowNormalBias;\n\t\t\tfloat shadowRadius;\n\t\t\tvec2 shadowMapSize;\n\t\t};\n\t\tuniform DirectionalLightShadow directionalLightShadows[ NUM_DIR_LIGHT_SHADOWS ];\n\t#endif\n\t#if NUM_SPOT_LIGHT_SHADOWS > 0\n\t\tstruct SpotLightShadow {\n\t\t\tfloat shadowBias;\n\t\t\tfloat shadowNormalBias;\n\t\t\tfloat shadowRadius;\n\t\t\tvec2 shadowMapSize;\n\t\t};\n\t\tuniform SpotLightShadow spotLightShadows[ NUM_SPOT_LIGHT_SHADOWS ];\n\t#endif\n\t#if NUM_POINT_LIGHT_SHADOWS > 0\n\t\tuniform mat4 pointShadowMatrix[ NUM_POINT_LIGHT_SHADOWS ];\n\t\tvarying vec4 vPointShadowCoord[ NUM_POINT_LIGHT_SHADOWS ];\n\t\tstruct PointLightShadow {\n\t\t\tfloat shadowBias;\n\t\t\tfloat shadowNormalBias;\n\t\t\tfloat shadowRadius;\n\t\t\tvec2 shadowMapSize;\n\t\t\tfloat shadowCameraNear;\n\t\t\tfloat shadowCameraFar;\n\t\t};\n\t\tuniform PointLightShadow pointLightShadows[ NUM_POINT_LIGHT_SHADOWS ];\n\t#endif\n#endif",shadowmap_vertex:"#if ( defined( USE_SHADOWMAP ) && ( NUM_DIR_LIGHT_SHADOWS > 0 || NUM_POINT_LIGHT_SHADOWS > 0 ) ) || ( NUM_SPOT_LIGHT_COORDS > 0 )\n\tvec3 shadowWorldNormal = inverseTransformDirection( transformedNormal, viewMatrix );\n\tvec4 shadowWorldPosition;\n#endif\n#if defined( USE_SHADOWMAP )\n\t#if NUM_DIR_LIGHT_SHADOWS > 0\n\t\t#pragma unroll_loop_start\n\t\tfor ( int i = 0; i < NUM_DIR_LIGHT_SHADOWS; i ++ ) {\n\t\t\tshadowWorldPosition = worldPosition + vec4( shadowWorldNormal * directionalLightShadows[ i ].shadowNormalBias, 0 );\n\t\t\tvDirectionalShadowCoord[ i ] = directionalShadowMatrix[ i ] * shadowWorldPosition;\n\t\t}\n\t\t#pragma unroll_loop_end\n\t#endif\n\t#if NUM_POINT_LIGHT_SHADOWS > 0\n\t\t#pragma unroll_loop_start\n\t\tfor ( int i = 0; i < NUM_POINT_LIGHT_SHADOWS; i ++ ) {\n\t\t\tshadowWorldPosition = worldPosition + vec4( shadowWorldNormal * pointLightShadows[ i ].shadowNormalBias, 0 );\n\t\t\tvPointShadowCoord[ i ] = pointShadowMatrix[ i ] * shadowWorldPosition;\n\t\t}\n\t\t#pragma unroll_loop_end\n\t#endif\n#endif\n#if NUM_SPOT_LIGHT_COORDS > 0\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_SPOT_LIGHT_COORDS; i ++ ) {\n\t\tshadowWorldPosition = worldPosition;\n\t\t#if ( defined( USE_SHADOWMAP ) && UNROLLED_LOOP_INDEX < NUM_SPOT_LIGHT_SHADOWS )\n\t\t\tshadowWorldPosition.xyz += shadowWorldNormal * spotLightShadows[ i ].shadowNormalBias;\n\t\t#endif\n\t\tvSpotLightCoord[ i ] = spotLightMatrix[ i ] * shadowWorldPosition;\n\t}\n\t#pragma unroll_loop_end\n#endif",shadowmask_pars_fragment:"float getShadowMask() {\n\tfloat shadow = 1.0;\n\t#ifdef USE_SHADOWMAP\n\t#if NUM_DIR_LIGHT_SHADOWS > 0\n\tDirectionalLightShadow directionalLight;\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_DIR_LIGHT_SHADOWS; i ++ ) {\n\t\tdirectionalLight = directionalLightShadows[ i ];\n\t\tshadow *= receiveShadow ? getShadow( directionalShadowMap[ i ], directionalLight.shadowMapSize, directionalLight.shadowBias, directionalLight.shadowRadius, vDirectionalShadowCoord[ i ] ) : 1.0;\n\t}\n\t#pragma unroll_loop_end\n\t#endif\n\t#if NUM_SPOT_LIGHT_SHADOWS > 0\n\tSpotLightShadow spotLight;\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_SPOT_LIGHT_SHADOWS; i ++ ) {\n\t\tspotLight = spotLightShadows[ i ];\n\t\tshadow *= receiveShadow ? getShadow( spotShadowMap[ i ], spotLight.shadowMapSize, spotLight.shadowBias, spotLight.shadowRadius, vSpotLightCoord[ i ] ) : 1.0;\n\t}\n\t#pragma unroll_loop_end\n\t#endif\n\t#if NUM_POINT_LIGHT_SHADOWS > 0\n\tPointLightShadow pointLight;\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_POINT_LIGHT_SHADOWS; i ++ ) {\n\t\tpointLight = pointLightShadows[ i ];\n\t\tshadow *= receiveShadow ? getPointShadow( pointShadowMap[ i ], pointLight.shadowMapSize, pointLight.shadowBias, pointLight.shadowRadius, vPointShadowCoord[ i ], pointLight.shadowCameraNear, pointLight.shadowCameraFar ) : 1.0;\n\t}\n\t#pragma unroll_loop_end\n\t#endif\n\t#endif\n\treturn shadow;\n}",skinbase_vertex:"#ifdef USE_SKINNING\n\tmat4 boneMatX = getBoneMatrix( skinIndex.x );\n\tmat4 boneMatY = getBoneMatrix( skinIndex.y );\n\tmat4 boneMatZ = getBoneMatrix( skinIndex.z );\n\tmat4 boneMatW = getBoneMatrix( skinIndex.w );\n#endif",skinning_pars_vertex:"#ifdef USE_SKINNING\n\tuniform mat4 bindMatrix;\n\tuniform mat4 bindMatrixInverse;\n\tuniform highp sampler2D boneTexture;\n\tuniform int boneTextureSize;\n\tmat4 getBoneMatrix( const in float i ) {\n\t\tfloat j = i * 4.0;\n\t\tfloat x = mod( j, float( boneTextureSize ) );\n\t\tfloat y = floor( j / float( boneTextureSize ) );\n\t\tfloat dx = 1.0 / float( boneTextureSize );\n\t\tfloat dy = 1.0 / float( boneTextureSize );\n\t\ty = dy * ( y + 0.5 );\n\t\tvec4 v1 = texture2D( boneTexture, vec2( dx * ( x + 0.5 ), y ) );\n\t\tvec4 v2 = texture2D( boneTexture, vec2( dx * ( x + 1.5 ), y ) );\n\t\tvec4 v3 = texture2D( boneTexture, vec2( dx * ( x + 2.5 ), y ) );\n\t\tvec4 v4 = texture2D( boneTexture, vec2( dx * ( x + 3.5 ), y ) );\n\t\tmat4 bone = mat4( v1, v2, v3, v4 );\n\t\treturn bone;\n\t}\n#endif",skinning_vertex:"#ifdef USE_SKINNING\n\tvec4 skinVertex = bindMatrix * vec4( transformed, 1.0 );\n\tvec4 skinned = vec4( 0.0 );\n\tskinned += boneMatX * skinVertex * skinWeight.x;\n\tskinned += boneMatY * skinVertex * skinWeight.y;\n\tskinned += boneMatZ * skinVertex * skinWeight.z;\n\tskinned += boneMatW * skinVertex * skinWeight.w;\n\ttransformed = ( bindMatrixInverse * skinned ).xyz;\n#endif",skinnormal_vertex:"#ifdef USE_SKINNING\n\tmat4 skinMatrix = mat4( 0.0 );\n\tskinMatrix += skinWeight.x * boneMatX;\n\tskinMatrix += skinWeight.y * boneMatY;\n\tskinMatrix += skinWeight.z * boneMatZ;\n\tskinMatrix += skinWeight.w * boneMatW;\n\tskinMatrix = bindMatrixInverse * skinMatrix * bindMatrix;\n\tobjectNormal = vec4( skinMatrix * vec4( objectNormal, 0.0 ) ).xyz;\n\t#ifdef USE_TANGENT\n\t\tobjectTangent = vec4( skinMatrix * vec4( objectTangent, 0.0 ) ).xyz;\n\t#endif\n#endif",specularmap_fragment:"float specularStrength;\n#ifdef USE_SPECULARMAP\n\tvec4 texelSpecular = texture2D( specularMap, vUv );\n\tspecularStrength = texelSpecular.r;\n#else\n\tspecularStrength = 1.0;\n#endif",specularmap_pars_fragment:"#ifdef USE_SPECULARMAP\n\tuniform sampler2D specularMap;\n#endif",tonemapping_fragment:"#if defined( TONE_MAPPING )\n\tgl_FragColor.rgb = toneMapping( gl_FragColor.rgb );\n#endif",tonemapping_pars_fragment:"#ifndef saturate\n#define saturate( a ) clamp( a, 0.0, 1.0 )\n#endif\nuniform float toneMappingExposure;\nvec3 LinearToneMapping( vec3 color ) {\n\treturn toneMappingExposure * color;\n}\nvec3 ReinhardToneMapping( vec3 color ) {\n\tcolor *= toneMappingExposure;\n\treturn saturate( color / ( vec3( 1.0 ) + color ) );\n}\nvec3 OptimizedCineonToneMapping( vec3 color ) {\n\tcolor *= toneMappingExposure;\n\tcolor = max( vec3( 0.0 ), color - 0.004 );\n\treturn pow( ( color * ( 6.2 * color + 0.5 ) ) / ( color * ( 6.2 * color + 1.7 ) + 0.06 ), vec3( 2.2 ) );\n}\nvec3 RRTAndODTFit( vec3 v ) {\n\tvec3 a = v * ( v + 0.0245786 ) - 0.000090537;\n\tvec3 b = v * ( 0.983729 * v + 0.4329510 ) + 0.238081;\n\treturn a / b;\n}\nvec3 ACESFilmicToneMapping( vec3 color ) {\n\tconst mat3 ACESInputMat = mat3(\n\t\tvec3( 0.59719, 0.07600, 0.02840 ),\t\tvec3( 0.35458, 0.90834, 0.13383 ),\n\t\tvec3( 0.04823, 0.01566, 0.83777 )\n\t);\n\tconst mat3 ACESOutputMat = mat3(\n\t\tvec3( 1.60475, -0.10208, -0.00327 ),\t\tvec3( -0.53108, 1.10813, -0.07276 ),\n\t\tvec3( -0.07367, -0.00605, 1.07602 )\n\t);\n\tcolor *= toneMappingExposure / 0.6;\n\tcolor = ACESInputMat * color;\n\tcolor = RRTAndODTFit( color );\n\tcolor = ACESOutputMat * color;\n\treturn saturate( color );\n}\nvec3 CustomToneMapping( vec3 color ) { return color; }",transmission_fragment:"#ifdef USE_TRANSMISSION\n\tmaterial.transmission = transmission;\n\tmaterial.transmissionAlpha = 1.0;\n\tmaterial.thickness = thickness;\n\tmaterial.attenuationDistance = attenuationDistance;\n\tmaterial.attenuationColor = attenuationColor;\n\t#ifdef USE_TRANSMISSIONMAP\n\t\tmaterial.transmission *= texture2D( transmissionMap, vUv ).r;\n\t#endif\n\t#ifdef USE_THICKNESSMAP\n\t\tmaterial.thickness *= texture2D( thicknessMap, vUv ).g;\n\t#endif\n\tvec3 pos = vWorldPosition;\n\tvec3 v = normalize( cameraPosition - pos );\n\tvec3 n = inverseTransformDirection( normal, viewMatrix );\n\tvec4 transmission = getIBLVolumeRefraction(\n\t\tn, v, material.roughness, material.diffuseColor, material.specularColor, material.specularF90,\n\t\tpos, modelMatrix, viewMatrix, projectionMatrix, material.ior, material.thickness,\n\t\tmaterial.attenuationColor, material.attenuationDistance );\n\tmaterial.transmissionAlpha = mix( material.transmissionAlpha, transmission.a, material.transmission );\n\ttotalDiffuse = mix( totalDiffuse, transmission.rgb, material.transmission );\n#endif",transmission_pars_fragment:"#ifdef USE_TRANSMISSION\n\tuniform float transmission;\n\tuniform float thickness;\n\tuniform float attenuationDistance;\n\tuniform vec3 attenuationColor;\n\t#ifdef USE_TRANSMISSIONMAP\n\t\tuniform sampler2D transmissionMap;\n\t#endif\n\t#ifdef USE_THICKNESSMAP\n\t\tuniform sampler2D thicknessMap;\n\t#endif\n\tuniform vec2 transmissionSamplerSize;\n\tuniform sampler2D transmissionSamplerMap;\n\tuniform mat4 modelMatrix;\n\tuniform mat4 projectionMatrix;\n\tvarying vec3 vWorldPosition;\n\tvec3 getVolumeTransmissionRay( const in vec3 n, const in vec3 v, const in float thickness, const in float ior, const in mat4 modelMatrix ) {\n\t\tvec3 refractionVector = refract( - v, normalize( n ), 1.0 / ior );\n\t\tvec3 modelScale;\n\t\tmodelScale.x = length( vec3( modelMatrix[ 0 ].xyz ) );\n\t\tmodelScale.y = length( vec3( modelMatrix[ 1 ].xyz ) );\n\t\tmodelScale.z = length( vec3( modelMatrix[ 2 ].xyz ) );\n\t\treturn normalize( refractionVector ) * thickness * modelScale;\n\t}\n\tfloat applyIorToRoughness( const in float roughness, const in float ior ) {\n\t\treturn roughness * clamp( ior * 2.0 - 2.0, 0.0, 1.0 );\n\t}\n\tvec4 getTransmissionSample( const in vec2 fragCoord, const in float roughness, const in float ior ) {\n\t\tfloat framebufferLod = log2( transmissionSamplerSize.x ) * applyIorToRoughness( roughness, ior );\n\t\t#ifdef texture2DLodEXT\n\t\t\treturn texture2DLodEXT( transmissionSamplerMap, fragCoord.xy, framebufferLod );\n\t\t#else\n\t\t\treturn texture2D( transmissionSamplerMap, fragCoord.xy, framebufferLod );\n\t\t#endif\n\t}\n\tvec3 applyVolumeAttenuation( const in vec3 radiance, const in float transmissionDistance, const in vec3 attenuationColor, const in float attenuationDistance ) {\n\t\tif ( isinf( attenuationDistance ) ) {\n\t\t\treturn radiance;\n\t\t} else {\n\t\t\tvec3 attenuationCoefficient = -log( attenuationColor ) / attenuationDistance;\n\t\t\tvec3 transmittance = exp( - attenuationCoefficient * transmissionDistance );\t\t\treturn transmittance * radiance;\n\t\t}\n\t}\n\tvec4 getIBLVolumeRefraction( const in vec3 n, const in vec3 v, const in float roughness, const in vec3 diffuseColor,\n\t\tconst in vec3 specularColor, const in float specularF90, const in vec3 position, const in mat4 modelMatrix,\n\t\tconst in mat4 viewMatrix, const in mat4 projMatrix, const in float ior, const in float thickness,\n\t\tconst in vec3 attenuationColor, const in float attenuationDistance ) {\n\t\tvec3 transmissionRay = getVolumeTransmissionRay( n, v, thickness, ior, modelMatrix );\n\t\tvec3 refractedRayExit = position + transmissionRay;\n\t\tvec4 ndcPos = projMatrix * viewMatrix * vec4( refractedRayExit, 1.0 );\n\t\tvec2 refractionCoords = ndcPos.xy / ndcPos.w;\n\t\trefractionCoords += 1.0;\n\t\trefractionCoords /= 2.0;\n\t\tvec4 transmittedLight = getTransmissionSample( refractionCoords, roughness, ior );\n\t\tvec3 attenuatedColor = applyVolumeAttenuation( transmittedLight.rgb, length( transmissionRay ), attenuationColor, attenuationDistance );\n\t\tvec3 F = EnvironmentBRDF( n, v, specularColor, specularF90, roughness );\n\t\treturn vec4( ( 1.0 - F ) * attenuatedColor * diffuseColor, transmittedLight.a );\n\t}\n#endif",uv_pars_fragment:"#if ( defined( USE_UV ) && ! defined( UVS_VERTEX_ONLY ) )\n\tvarying vec2 vUv;\n#endif",uv_pars_vertex:"#ifdef USE_UV\n\t#ifdef UVS_VERTEX_ONLY\n\t\tvec2 vUv;\n\t#else\n\t\tvarying vec2 vUv;\n\t#endif\n\tuniform mat3 uvTransform;\n#endif",uv_vertex:"#ifdef USE_UV\n\tvUv = ( uvTransform * vec3( uv, 1 ) ).xy;\n#endif",uv2_pars_fragment:"#if defined( USE_LIGHTMAP ) || defined( USE_AOMAP )\n\tvarying vec2 vUv2;\n#endif",uv2_pars_vertex:"#if defined( USE_LIGHTMAP ) || defined( USE_AOMAP )\n\tattribute vec2 uv2;\n\tvarying vec2 vUv2;\n\tuniform mat3 uv2Transform;\n#endif",uv2_vertex:"#if defined( USE_LIGHTMAP ) || defined( USE_AOMAP )\n\tvUv2 = ( uv2Transform * vec3( uv2, 1 ) ).xy;\n#endif",worldpos_vertex:"#if defined( USE_ENVMAP ) || defined( DISTANCE ) || defined ( USE_SHADOWMAP ) || defined ( USE_TRANSMISSION ) || NUM_SPOT_LIGHT_COORDS > 0\n\tvec4 worldPosition = vec4( transformed, 1.0 );\n\t#ifdef USE_INSTANCING\n\t\tworldPosition = instanceMatrix * worldPosition;\n\t#endif\n\tworldPosition = modelMatrix * worldPosition;\n#endif",background_vert:"varying vec2 vUv;\nuniform mat3 uvTransform;\nvoid main() {\n\tvUv = ( uvTransform * vec3( uv, 1 ) ).xy;\n\tgl_Position = vec4( position.xy, 1.0, 1.0 );\n}",background_frag:"uniform sampler2D t2D;\nuniform float backgroundIntensity;\nvarying vec2 vUv;\nvoid main() {\n\tvec4 texColor = texture2D( t2D, vUv );\n\t#ifdef DECODE_VIDEO_TEXTURE\n\t\ttexColor = vec4( mix( pow( texColor.rgb * 0.9478672986 + vec3( 0.0521327014 ), vec3( 2.4 ) ), texColor.rgb * 0.0773993808, vec3( lessThanEqual( texColor.rgb, vec3( 0.04045 ) ) ) ), texColor.w );\n\t#endif\n\ttexColor.rgb *= backgroundIntensity;\n\tgl_FragColor = texColor;\n\t#include \n\t#include \n}",backgroundCube_vert:"varying vec3 vWorldDirection;\n#include \nvoid main() {\n\tvWorldDirection = transformDirection( position, modelMatrix );\n\t#include \n\t#include \n\tgl_Position.z = gl_Position.w;\n}",backgroundCube_frag:"#ifdef ENVMAP_TYPE_CUBE\n\tuniform samplerCube envMap;\n#elif defined( ENVMAP_TYPE_CUBE_UV )\n\tuniform sampler2D envMap;\n#endif\nuniform float flipEnvMap;\nuniform float backgroundBlurriness;\nuniform float backgroundIntensity;\nvarying vec3 vWorldDirection;\n#include \nvoid main() {\n\t#ifdef ENVMAP_TYPE_CUBE\n\t\tvec4 texColor = textureCube( envMap, vec3( flipEnvMap * vWorldDirection.x, vWorldDirection.yz ) );\n\t#elif defined( ENVMAP_TYPE_CUBE_UV )\n\t\tvec4 texColor = textureCubeUV( envMap, vWorldDirection, backgroundBlurriness );\n\t#else\n\t\tvec4 texColor = vec4( 0.0, 0.0, 0.0, 1.0 );\n\t#endif\n\ttexColor.rgb *= backgroundIntensity;\n\tgl_FragColor = texColor;\n\t#include \n\t#include \n}",cube_vert:"varying vec3 vWorldDirection;\n#include \nvoid main() {\n\tvWorldDirection = transformDirection( position, modelMatrix );\n\t#include \n\t#include \n\tgl_Position.z = gl_Position.w;\n}",cube_frag:"uniform samplerCube tCube;\nuniform float tFlip;\nuniform float opacity;\nvarying vec3 vWorldDirection;\nvoid main() {\n\tvec4 texColor = textureCube( tCube, vec3( tFlip * vWorldDirection.x, vWorldDirection.yz ) );\n\tgl_FragColor = texColor;\n\tgl_FragColor.a *= opacity;\n\t#include \n\t#include \n}",depth_vert:"#include \n#include \n#include \n#include \n#include \n#include \n#include \nvarying vec2 vHighPrecisionZW;\nvoid main() {\n\t#include \n\t#include \n\t#ifdef USE_DISPLACEMENTMAP\n\t\t#include \n\t\t#include \n\t\t#include \n\t#endif\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvHighPrecisionZW = gl_Position.zw;\n}",depth_frag:"#if DEPTH_PACKING == 3200\n\tuniform float opacity;\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvarying vec2 vHighPrecisionZW;\nvoid main() {\n\t#include \n\tvec4 diffuseColor = vec4( 1.0 );\n\t#if DEPTH_PACKING == 3200\n\t\tdiffuseColor.a = opacity;\n\t#endif\n\t#include \n\t#include \n\t#include \n\t#include \n\tfloat fragCoordZ = 0.5 * vHighPrecisionZW[0] / vHighPrecisionZW[1] + 0.5;\n\t#if DEPTH_PACKING == 3200\n\t\tgl_FragColor = vec4( vec3( 1.0 - fragCoordZ ), opacity );\n\t#elif DEPTH_PACKING == 3201\n\t\tgl_FragColor = packDepthToRGBA( fragCoordZ );\n\t#endif\n}",distanceRGBA_vert:"#define DISTANCE\nvarying vec3 vWorldPosition;\n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#ifdef USE_DISPLACEMENTMAP\n\t\t#include \n\t\t#include \n\t\t#include \n\t#endif\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvWorldPosition = worldPosition.xyz;\n}",distanceRGBA_frag:"#define DISTANCE\nuniform vec3 referencePosition;\nuniform float nearDistance;\nuniform float farDistance;\nvarying vec3 vWorldPosition;\n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main () {\n\t#include \n\tvec4 diffuseColor = vec4( 1.0 );\n\t#include \n\t#include \n\t#include \n\tfloat dist = length( vWorldPosition - referencePosition );\n\tdist = ( dist - nearDistance ) / ( farDistance - nearDistance );\n\tdist = saturate( dist );\n\tgl_FragColor = packDepthToRGBA( dist );\n}",equirect_vert:"varying vec3 vWorldDirection;\n#include \nvoid main() {\n\tvWorldDirection = transformDirection( position, modelMatrix );\n\t#include \n\t#include \n}",equirect_frag:"uniform sampler2D tEquirect;\nvarying vec3 vWorldDirection;\n#include \nvoid main() {\n\tvec3 direction = normalize( vWorldDirection );\n\tvec2 sampleUV = equirectUv( direction );\n\tgl_FragColor = texture2D( tEquirect, sampleUV );\n\t#include \n\t#include \n}",linedashed_vert:"uniform float scale;\nattribute float lineDistance;\nvarying float vLineDistance;\n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\tvLineDistance = scale * lineDistance;\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}",linedashed_frag:"uniform vec3 diffuse;\nuniform float opacity;\nuniform float dashSize;\nuniform float totalSize;\nvarying float vLineDistance;\n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\tif ( mod( vLineDistance, totalSize ) > dashSize ) {\n\t\tdiscard;\n\t}\n\tvec3 outgoingLight = vec3( 0.0 );\n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\t#include \n\t#include \n\toutgoingLight = diffuseColor.rgb;\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}",meshbasic_vert:"#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#include \n\t#if defined ( USE_ENVMAP ) || defined ( USE_SKINNING )\n\t\t#include \n\t\t#include \n\t\t#include \n\t\t#include \n\t\t#include \n\t#endif\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}",meshbasic_frag:"uniform vec3 diffuse;\nuniform float opacity;\n#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\n\t#ifdef USE_LIGHTMAP\n\t\tvec4 lightMapTexel = texture2D( lightMap, vUv2 );\n\t\treflectedLight.indirectDiffuse += lightMapTexel.rgb * lightMapIntensity * RECIPROCAL_PI;\n\t#else\n\t\treflectedLight.indirectDiffuse += vec3( 1.0 );\n\t#endif\n\t#include \n\treflectedLight.indirectDiffuse *= diffuseColor.rgb;\n\tvec3 outgoingLight = reflectedLight.indirectDiffuse;\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}",meshlambert_vert:"#define LAMBERT\nvarying vec3 vViewPosition;\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvViewPosition = - mvPosition.xyz;\n\t#include \n\t#include \n\t#include \n\t#include \n}",meshlambert_frag:"#define LAMBERT\nuniform vec3 diffuse;\nuniform vec3 emissive;\nuniform float opacity;\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\tReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\n\tvec3 totalEmissiveRadiance = emissive;\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvec3 outgoingLight = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse + totalEmissiveRadiance;\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}",meshmatcap_vert:"#define MATCAP\nvarying vec3 vViewPosition;\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvViewPosition = - mvPosition.xyz;\n}",meshmatcap_frag:"#define MATCAP\nuniform vec3 diffuse;\nuniform float opacity;\nuniform sampler2D matcap;\nvarying vec3 vViewPosition;\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvec3 viewDir = normalize( vViewPosition );\n\tvec3 x = normalize( vec3( viewDir.z, 0.0, - viewDir.x ) );\n\tvec3 y = cross( viewDir, x );\n\tvec2 uv = vec2( dot( x, normal ), dot( y, normal ) ) * 0.495 + 0.5;\n\t#ifdef USE_MATCAP\n\t\tvec4 matcapColor = texture2D( matcap, uv );\n\t#else\n\t\tvec4 matcapColor = vec4( vec3( mix( 0.2, 0.8, uv.y ) ), 1.0 );\n\t#endif\n\tvec3 outgoingLight = diffuseColor.rgb * matcapColor.rgb;\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}",meshnormal_vert:"#define NORMAL\n#if defined( FLAT_SHADED ) || defined( USE_BUMPMAP ) || defined( TANGENTSPACE_NORMALMAP )\n\tvarying vec3 vViewPosition;\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n#if defined( FLAT_SHADED ) || defined( USE_BUMPMAP ) || defined( TANGENTSPACE_NORMALMAP )\n\tvViewPosition = - mvPosition.xyz;\n#endif\n}",meshnormal_frag:"#define NORMAL\nuniform float opacity;\n#if defined( FLAT_SHADED ) || defined( USE_BUMPMAP ) || defined( TANGENTSPACE_NORMALMAP )\n\tvarying vec3 vViewPosition;\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#include \n\tgl_FragColor = vec4( packNormalToRGB( normal ), opacity );\n\t#ifdef OPAQUE\n\t\tgl_FragColor.a = 1.0;\n\t#endif\n}",meshphong_vert:"#define PHONG\nvarying vec3 vViewPosition;\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvViewPosition = - mvPosition.xyz;\n\t#include \n\t#include \n\t#include \n\t#include \n}",meshphong_frag:"#define PHONG\nuniform vec3 diffuse;\nuniform vec3 emissive;\nuniform vec3 specular;\nuniform float shininess;\nuniform float opacity;\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\tReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\n\tvec3 totalEmissiveRadiance = emissive;\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvec3 outgoingLight = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse + reflectedLight.directSpecular + reflectedLight.indirectSpecular + totalEmissiveRadiance;\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}",meshphysical_vert:"#define STANDARD\nvarying vec3 vViewPosition;\n#ifdef USE_TRANSMISSION\n\tvarying vec3 vWorldPosition;\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvViewPosition = - mvPosition.xyz;\n\t#include \n\t#include \n\t#include \n#ifdef USE_TRANSMISSION\n\tvWorldPosition = worldPosition.xyz;\n#endif\n}",meshphysical_frag:"#define STANDARD\n#ifdef PHYSICAL\n\t#define IOR\n\t#define SPECULAR\n#endif\nuniform vec3 diffuse;\nuniform vec3 emissive;\nuniform float roughness;\nuniform float metalness;\nuniform float opacity;\n#ifdef IOR\n\tuniform float ior;\n#endif\n#ifdef SPECULAR\n\tuniform float specularIntensity;\n\tuniform vec3 specularColor;\n\t#ifdef USE_SPECULARINTENSITYMAP\n\t\tuniform sampler2D specularIntensityMap;\n\t#endif\n\t#ifdef USE_SPECULARCOLORMAP\n\t\tuniform sampler2D specularColorMap;\n\t#endif\n#endif\n#ifdef USE_CLEARCOAT\n\tuniform float clearcoat;\n\tuniform float clearcoatRoughness;\n#endif\n#ifdef USE_IRIDESCENCE\n\tuniform float iridescence;\n\tuniform float iridescenceIOR;\n\tuniform float iridescenceThicknessMinimum;\n\tuniform float iridescenceThicknessMaximum;\n#endif\n#ifdef USE_SHEEN\n\tuniform vec3 sheenColor;\n\tuniform float sheenRoughness;\n\t#ifdef USE_SHEENCOLORMAP\n\t\tuniform sampler2D sheenColorMap;\n\t#endif\n\t#ifdef USE_SHEENROUGHNESSMAP\n\t\tuniform sampler2D sheenRoughnessMap;\n\t#endif\n#endif\nvarying vec3 vViewPosition;\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\tReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\n\tvec3 totalEmissiveRadiance = emissive;\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvec3 totalDiffuse = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse;\n\tvec3 totalSpecular = reflectedLight.directSpecular + reflectedLight.indirectSpecular;\n\t#include \n\tvec3 outgoingLight = totalDiffuse + totalSpecular + totalEmissiveRadiance;\n\t#ifdef USE_SHEEN\n\t\tfloat sheenEnergyComp = 1.0 - 0.157 * max3( material.sheenColor );\n\t\toutgoingLight = outgoingLight * sheenEnergyComp + sheenSpecular;\n\t#endif\n\t#ifdef USE_CLEARCOAT\n\t\tfloat dotNVcc = saturate( dot( geometry.clearcoatNormal, geometry.viewDir ) );\n\t\tvec3 Fcc = F_Schlick( material.clearcoatF0, material.clearcoatF90, dotNVcc );\n\t\toutgoingLight = outgoingLight * ( 1.0 - material.clearcoat * Fcc ) + clearcoatSpecular * material.clearcoat;\n\t#endif\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}",meshtoon_vert:"#define TOON\nvarying vec3 vViewPosition;\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvViewPosition = - mvPosition.xyz;\n\t#include \n\t#include \n\t#include \n}",meshtoon_frag:"#define TOON\nuniform vec3 diffuse;\nuniform vec3 emissive;\nuniform float opacity;\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\tReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\n\tvec3 totalEmissiveRadiance = emissive;\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvec3 outgoingLight = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse + totalEmissiveRadiance;\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}",points_vert:"uniform float size;\nuniform float scale;\n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tgl_PointSize = size;\n\t#ifdef USE_SIZEATTENUATION\n\t\tbool isPerspective = isPerspectiveMatrix( projectionMatrix );\n\t\tif ( isPerspective ) gl_PointSize *= ( scale / - mvPosition.z );\n\t#endif\n\t#include \n\t#include \n\t#include \n\t#include \n}",points_frag:"uniform vec3 diffuse;\nuniform float opacity;\n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\tvec3 outgoingLight = vec3( 0.0 );\n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\t#include \n\t#include \n\t#include \n\t#include \n\toutgoingLight = diffuseColor.rgb;\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}",shadow_vert:"#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}",shadow_frag:"uniform vec3 color;\nuniform float opacity;\n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\tgl_FragColor = vec4( color, opacity * ( 1.0 - getShadowMask() ) );\n\t#include \n\t#include \n\t#include \n}",sprite_vert:"uniform float rotation;\nuniform vec2 center;\n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\tvec4 mvPosition = modelViewMatrix * vec4( 0.0, 0.0, 0.0, 1.0 );\n\tvec2 scale;\n\tscale.x = length( vec3( modelMatrix[ 0 ].x, modelMatrix[ 0 ].y, modelMatrix[ 0 ].z ) );\n\tscale.y = length( vec3( modelMatrix[ 1 ].x, modelMatrix[ 1 ].y, modelMatrix[ 1 ].z ) );\n\t#ifndef USE_SIZEATTENUATION\n\t\tbool isPerspective = isPerspectiveMatrix( projectionMatrix );\n\t\tif ( isPerspective ) scale *= - mvPosition.z;\n\t#endif\n\tvec2 alignedPosition = ( position.xy - ( center - vec2( 0.5 ) ) ) * scale;\n\tvec2 rotatedPosition;\n\trotatedPosition.x = cos( rotation ) * alignedPosition.x - sin( rotation ) * alignedPosition.y;\n\trotatedPosition.y = sin( rotation ) * alignedPosition.x + cos( rotation ) * alignedPosition.y;\n\tmvPosition.xy += rotatedPosition;\n\tgl_Position = projectionMatrix * mvPosition;\n\t#include \n\t#include \n\t#include \n}",sprite_frag:"uniform vec3 diffuse;\nuniform float opacity;\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\tvec3 outgoingLight = vec3( 0.0 );\n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\t#include \n\t#include \n\t#include \n\t#include \n\toutgoingLight = diffuseColor.rgb;\n\t#include \n\t#include \n\t#include \n\t#include \n}"},bs={common:{diffuse:{value:new Lr(16777215)},opacity:{value:1},map:{value:null},uvTransform:{value:new Df},uv2Transform:{value:new Df},alphaMap:{value:null},alphaTest:{value:0}},specularmap:{specularMap:{value:null}},envmap:{envMap:{value:null},flipEnvMap:{value:-1},reflectivity:{value:1},ior:{value:1.5},refractionRatio:{value:.98}},aomap:{aoMap:{value:null},aoMapIntensity:{value:1}},lightmap:{lightMap:{value:null},lightMapIntensity:{value:1}},emissivemap:{emissiveMap:{value:null}},bumpmap:{bumpMap:{value:null},bumpScale:{value:1}},normalmap:{normalMap:{value:null},normalScale:{value:new ji(1,1)}},displacementmap:{displacementMap:{value:null},displacementScale:{value:1},displacementBias:{value:0}},roughnessmap:{roughnessMap:{value:null}},metalnessmap:{metalnessMap:{value:null}},gradientmap:{gradientMap:{value:null}},fog:{fogDensity:{value:25e-5},fogNear:{value:1},fogFar:{value:2e3},fogColor:{value:new Lr(16777215)}},lights:{ambientLightColor:{value:[]},lightProbe:{value:[]},directionalLights:{value:[],properties:{direction:{},color:{}}},directionalLightShadows:{value:[],properties:{shadowBias:{},shadowNormalBias:{},shadowRadius:{},shadowMapSize:{}}},directionalShadowMap:{value:[]},directionalShadowMatrix:{value:[]},spotLights:{value:[],properties:{color:{},position:{},direction:{},distance:{},coneCos:{},penumbraCos:{},decay:{}}},spotLightShadows:{value:[],properties:{shadowBias:{},shadowNormalBias:{},shadowRadius:{},shadowMapSize:{}}},spotLightMap:{value:[]},spotShadowMap:{value:[]},spotLightMatrix:{value:[]},pointLights:{value:[],properties:{color:{},position:{},decay:{},distance:{}}},pointLightShadows:{value:[],properties:{shadowBias:{},shadowNormalBias:{},shadowRadius:{},shadowMapSize:{},shadowCameraNear:{},shadowCameraFar:{}}},pointShadowMap:{value:[]},pointShadowMatrix:{value:[]},hemisphereLights:{value:[],properties:{direction:{},skyColor:{},groundColor:{}}},rectAreaLights:{value:[],properties:{color:{},position:{},width:{},height:{}}},ltc_1:{value:null},ltc_2:{value:null}},points:{diffuse:{value:new Lr(16777215)},opacity:{value:1},size:{value:1},scale:{value:1},map:{value:null},alphaMap:{value:null},alphaTest:{value:0},uvTransform:{value:new Df}},sprite:{diffuse:{value:new Lr(16777215)},opacity:{value:1},center:{value:new ji(.5,.5)},rotation:{value:0},map:{value:null},alphaMap:{value:null},alphaTest:{value:0},uvTransform:{value:new Df}}},l0={basic:{uniforms:Pf([bs.common,bs.specularmap,bs.envmap,bs.aomap,bs.lightmap,bs.fog]),vertexShader:fa.meshbasic_vert,fragmentShader:fa.meshbasic_frag},lambert:{uniforms:Pf([bs.common,bs.specularmap,bs.envmap,bs.aomap,bs.lightmap,bs.emissivemap,bs.bumpmap,bs.normalmap,bs.displacementmap,bs.fog,bs.lights,{emissive:{value:new Lr(0)}}]),vertexShader:fa.meshlambert_vert,fragmentShader:fa.meshlambert_frag},phong:{uniforms:Pf([bs.common,bs.specularmap,bs.envmap,bs.aomap,bs.lightmap,bs.emissivemap,bs.bumpmap,bs.normalmap,bs.displacementmap,bs.fog,bs.lights,{emissive:{value:new Lr(0)},specular:{value:new Lr(1118481)},shininess:{value:30}}]),vertexShader:fa.meshphong_vert,fragmentShader:fa.meshphong_frag},standard:{uniforms:Pf([bs.common,bs.envmap,bs.aomap,bs.lightmap,bs.emissivemap,bs.bumpmap,bs.normalmap,bs.displacementmap,bs.roughnessmap,bs.metalnessmap,bs.fog,bs.lights,{emissive:{value:new Lr(0)},roughness:{value:1},metalness:{value:0},envMapIntensity:{value:1}}]),vertexShader:fa.meshphysical_vert,fragmentShader:fa.meshphysical_frag},toon:{uniforms:Pf([bs.common,bs.aomap,bs.lightmap,bs.emissivemap,bs.bumpmap,bs.normalmap,bs.displacementmap,bs.gradientmap,bs.fog,bs.lights,{emissive:{value:new Lr(0)}}]),vertexShader:fa.meshtoon_vert,fragmentShader:fa.meshtoon_frag},matcap:{uniforms:Pf([bs.common,bs.bumpmap,bs.normalmap,bs.displacementmap,bs.fog,{matcap:{value:null}}]),vertexShader:fa.meshmatcap_vert,fragmentShader:fa.meshmatcap_frag},points:{uniforms:Pf([bs.points,bs.fog]),vertexShader:fa.points_vert,fragmentShader:fa.points_frag},dashed:{uniforms:Pf([bs.common,bs.fog,{scale:{value:1},dashSize:{value:1},totalSize:{value:2}}]),vertexShader:fa.linedashed_vert,fragmentShader:fa.linedashed_frag},depth:{uniforms:Pf([bs.common,bs.displacementmap]),vertexShader:fa.depth_vert,fragmentShader:fa.depth_frag},normal:{uniforms:Pf([bs.common,bs.bumpmap,bs.normalmap,bs.displacementmap,{opacity:{value:1}}]),vertexShader:fa.meshnormal_vert,fragmentShader:fa.meshnormal_frag},sprite:{uniforms:Pf([bs.sprite,bs.fog]),vertexShader:fa.sprite_vert,fragmentShader:fa.sprite_frag},background:{uniforms:{uvTransform:{value:new Df},t2D:{value:null},backgroundIntensity:{value:1}},vertexShader:fa.background_vert,fragmentShader:fa.background_frag},backgroundCube:{uniforms:{envMap:{value:null},flipEnvMap:{value:-1},backgroundBlurriness:{value:0},backgroundIntensity:{value:1}},vertexShader:fa.backgroundCube_vert,fragmentShader:fa.backgroundCube_frag},cube:{uniforms:{tCube:{value:null},tFlip:{value:-1},opacity:{value:1}},vertexShader:fa.cube_vert,fragmentShader:fa.cube_frag},equirect:{uniforms:{tEquirect:{value:null}},vertexShader:fa.equirect_vert,fragmentShader:fa.equirect_frag},distanceRGBA:{uniforms:Pf([bs.common,bs.displacementmap,{referencePosition:{value:new Nt},nearDistance:{value:1},farDistance:{value:1e3}}]),vertexShader:fa.distanceRGBA_vert,fragmentShader:fa.distanceRGBA_frag},shadow:{uniforms:Pf([bs.lights,bs.fog,{color:{value:new Lr(0)},opacity:{value:1}}]),vertexShader:fa.shadow_vert,fragmentShader:fa.shadow_frag}};l0.physical={uniforms:Pf([l0.standard.uniforms,{clearcoat:{value:0},clearcoatMap:{value:null},clearcoatRoughness:{value:0},clearcoatRoughnessMap:{value:null},clearcoatNormalScale:{value:new ji(1,1)},clearcoatNormalMap:{value:null},iridescence:{value:0},iridescenceMap:{value:null},iridescenceIOR:{value:1.3},iridescenceThicknessMinimum:{value:100},iridescenceThicknessMaximum:{value:400},iridescenceThicknessMap:{value:null},sheen:{value:0},sheenColor:{value:new Lr(0)},sheenColorMap:{value:null},sheenRoughness:{value:1},sheenRoughnessMap:{value:null},transmission:{value:0},transmissionMap:{value:null},transmissionSamplerSize:{value:new ji},transmissionSamplerMap:{value:null},thickness:{value:0},thicknessMap:{value:null},attenuationDistance:{value:0},attenuationColor:{value:new Lr(0)},specularIntensity:{value:1},specularIntensityMap:{value:null},specularColor:{value:new Lr(1,1,1)},specularColorMap:{value:null}}]),vertexShader:fa.meshphysical_vert,fragmentShader:fa.meshphysical_frag};const u4={r:0,b:0,g:0};function bte(i,e,t,n,r,s,a){const l=new Lr(0);let d,p,u=!0===s?0:1,y=null,C=0,O=null;function W(se,ye){se.getRGB(u4,lN(i)),n.buffers.color.setClear(u4.r,u4.g,u4.b,ye,a)}return{getClearColor:function(){return l},setClearColor:function(se,ye=1){l.set(se),u=ye,W(l,u)},getClearAlpha:function(){return u},setClearAlpha:function(se){u=se,W(l,u)},render:function Q(se,ye){let Le=!1,we=!0===ye.isScene?ye.background:null;we&&we.isTexture&&(we=(ye.backgroundBlurriness>0?t:e).get(we));const He=i.xr,gt=He.getSession&&He.getSession();gt&&"additive"===gt.environmentBlendMode&&(we=null),null===we?W(l,u):we&&we.isColor&&(W(we,1),Le=!0),(i.autoClear||Le)&&i.clear(i.autoClearColor,i.autoClearDepth,i.autoClearStencil),we&&(we.isCubeTexture||306===we.mapping)?(void 0===p&&(p=new Pa(new Om(1,1,1),new Td({name:"BackgroundCubeMaterial",uniforms:Ww(l0.backgroundCube.uniforms),vertexShader:l0.backgroundCube.vertexShader,fragmentShader:l0.backgroundCube.fragmentShader,side:1,depthTest:!1,depthWrite:!1,fog:!1})),p.geometry.deleteAttribute("normal"),p.geometry.deleteAttribute("uv"),p.onBeforeRender=function(Et,Yt,dt){this.matrixWorld.copyPosition(dt.matrixWorld)},Object.defineProperty(p.material,"envMap",{get:function(){return this.uniforms.envMap.value}}),r.update(p)),p.material.uniforms.envMap.value=we,p.material.uniforms.flipEnvMap.value=we.isCubeTexture&&!1===we.isRenderTargetTexture?-1:1,p.material.uniforms.backgroundBlurriness.value=ye.backgroundBlurriness,p.material.uniforms.backgroundIntensity.value=ye.backgroundIntensity,p.material.toneMapped=we.encoding!==Pl,(y!==we||C!==we.version||O!==i.toneMapping)&&(p.material.needsUpdate=!0,y=we,C=we.version,O=i.toneMapping),p.layers.enableAll(),se.unshift(p,p.geometry,p.material,0,0,null)):we&&we.isTexture&&(void 0===d&&(d=new Pa(new c4(2,2),new Td({name:"BackgroundMaterial",uniforms:Ww(l0.background.uniforms),vertexShader:l0.background.vertexShader,fragmentShader:l0.background.fragmentShader,side:0,depthTest:!1,depthWrite:!1,fog:!1})),d.geometry.deleteAttribute("normal"),Object.defineProperty(d.material,"map",{get:function(){return this.uniforms.t2D.value}}),r.update(d)),d.material.uniforms.t2D.value=we,d.material.uniforms.backgroundIntensity.value=ye.backgroundIntensity,d.material.toneMapped=we.encoding!==Pl,!0===we.matrixAutoUpdate&&we.updateMatrix(),d.material.uniforms.uvTransform.value.copy(we.matrix),(y!==we||C!==we.version||O!==i.toneMapping)&&(d.material.needsUpdate=!0,y=we,C=we.version,O=i.toneMapping),d.layers.enableAll(),se.unshift(d,d.geometry,d.material,0,0,null))}}}function xte(i,e,t,n){const r=i.getParameter(34921),s=n.isWebGL2?null:e.get("OES_vertex_array_object"),a=n.isWebGL2||null!==s,l={},u=se(null);let d=u,p=!1;function O(Tn){return n.isWebGL2?i.bindVertexArray(Tn):s.bindVertexArrayOES(Tn)}function Q(Tn){return n.isWebGL2?i.deleteVertexArray(Tn):s.deleteVertexArrayOES(Tn)}function se(Tn){const yi=[],qn=[],xi=[];for(let si=0;si=0){const hr=si[oi];let Yr=zi[oi];if(void 0===Yr&&("instanceMatrix"===oi&&Tn.instanceMatrix&&(Yr=Tn.instanceMatrix),"instanceColor"===oi&&Tn.instanceColor&&(Yr=Tn.instanceColor)),void 0===hr||hr.attribute!==Yr||Yr&&hr.data!==Yr.data)return!0;Ki++}return d.attributesNum!==Ki||d.index!==xi}(Tn,xi,qn,si),zi&&function Le(Tn,yi,qn,xi){const si={},zi=yi.attributes;let Ki=0;const cs=qn.getAttributes();for(const oi in cs)if(cs[oi].location>=0){let hr=zi[oi];void 0===hr&&("instanceMatrix"===oi&&Tn.instanceMatrix&&(hr=Tn.instanceMatrix),"instanceColor"===oi&&Tn.instanceColor&&(hr=Tn.instanceColor));const Yr={};Yr.attribute=hr,hr&&hr.data&&(Yr.data=hr.data),si[oi]=Yr,Ki++}d.attributes=si,d.attributesNum=Ki,d.index=xi}(Tn,xi,qn,si)}else{const Ki=!0===yi.wireframe;(d.geometry!==xi.id||d.program!==qn.id||d.wireframe!==Ki)&&(d.geometry=xi.id,d.program=qn.id,d.wireframe=Ki,zi=!0)}null!==si&&t.update(si,34963),(zi||p)&&(p=!1,function dt(Tn,yi,qn,xi){if(!1===n.isWebGL2&&(Tn.isInstancedMesh||xi.isInstancedBufferGeometry)&&null===e.get("ANGLE_instanced_arrays"))return;we();const si=xi.attributes,zi=qn.getAttributes(),Ki=yi.defaultAttributeValues;for(const cs in zi){const oi=zi[cs];if(oi.location>=0){let fr=si[cs];if(void 0===fr&&("instanceMatrix"===cs&&Tn.instanceMatrix&&(fr=Tn.instanceMatrix),"instanceColor"===cs&&Tn.instanceColor&&(fr=Tn.instanceColor)),void 0!==fr){const hr=fr.normalized,Yr=fr.itemSize,Ci=t.get(fr);if(void 0===Ci)continue;const Es=Ci.buffer,Ss=Ci.type,Bs=Ci.bytesPerElement;if(fr.isInterleavedBufferAttribute){const $r=fr.data,ta=$r.stride,yr=fr.offset;if($r.isInstancedInterleavedBuffer){for(let _r=0;_r0&&i.getShaderPrecisionFormat(35632,36338).precision>0)return"highp";Yt="mediump"}return"mediump"===Yt&&i.getShaderPrecisionFormat(35633,36337).precision>0&&i.getShaderPrecisionFormat(35632,36337).precision>0?"mediump":"lowp"}const a=typeof WebGL2RenderingContext<"u"&&i instanceof WebGL2RenderingContext;let l=void 0!==t.precision?t.precision:"highp";const u=s(l);u!==l&&(console.warn("THREE.WebGLRenderer:",l,"not supported, using",u,"instead."),l=u);const d=a||e.has("WEBGL_draw_buffers"),p=!0===t.logarithmicDepthBuffer,y=i.getParameter(34930),C=i.getParameter(35660),O=i.getParameter(3379),Q=i.getParameter(34076),W=i.getParameter(34921),se=i.getParameter(36347),ye=i.getParameter(36348),Le=i.getParameter(36349),we=C>0,He=a||e.has("OES_texture_float");return{isWebGL2:a,drawBuffers:d,getMaxAnisotropy:function r(){if(void 0!==n)return n;if(!0===e.has("EXT_texture_filter_anisotropic")){const Yt=e.get("EXT_texture_filter_anisotropic");n=i.getParameter(Yt.MAX_TEXTURE_MAX_ANISOTROPY_EXT)}else n=0;return n},getMaxPrecision:s,precision:l,logarithmicDepthBuffer:p,maxTextures:y,maxVertexTextures:C,maxTextureSize:O,maxCubemapSize:Q,maxAttributes:W,maxVertexUniforms:se,maxVaryings:ye,maxFragmentUniforms:Le,vertexTextures:we,floatFragmentTextures:He,floatVertexTextures:we&&He,maxSamples:a?i.getParameter(36183):0}}function Mte(i){const e=this;let t=null,n=0,r=!1,s=!1;const a=new Rm,l=new Df,u={value:null,needsUpdate:!1};function p(y,C,O,Q){const W=null!==y?y.length:0;let se=null;if(0!==W){if(se=u.value,!0!==Q||null===se){const ye=O+4*W,Le=C.matrixWorldInverse;l.getNormalMatrix(Le),(null===se||se.length0),e.numPlanes=n,e.numIntersection=0}();else{const Le=s?0:n,we=4*Le;let He=ye.clippingState||null;u.value=He,He=p(Q,C,we,O);for(let gt=0;gt!==we;++gt)He[gt]=t[gt];ye.clippingState=He,this.numIntersection=W?this.numPlanes:0,this.numPlanes+=Le}}}function Ste(i){let e=new WeakMap;function t(a,l){return 303===l?a.mapping=301:304===l&&(a.mapping=302),a}function r(a){const l=a.target;l.removeEventListener("dispose",r);const u=e.get(l);void 0!==u&&(e.delete(l),u.dispose())}return{get:function n(a){if(a&&a.isTexture&&!1===a.isRenderTargetTexture){const l=a.mapping;if(303===l||304===l){if(e.has(a))return t(e.get(a).texture,a.mapping);{const u=a.image;if(u&&u.height>0){const d=new yJ(u.height/2);return d.fromEquirectangularTexture(i,a),e.set(a,d),a.addEventListener("dispose",r),t(d.texture,a.mapping)}return null}}}return a},dispose:function s(){e=new WeakMap}}}class Kw extends DP{constructor(e=-1,t=1,n=1,r=-1,s=.1,a=2e3){super(),this.isOrthographicCamera=!0,this.type="OrthographicCamera",this.zoom=1,this.view=null,this.left=e,this.right=t,this.top=n,this.bottom=r,this.near=s,this.far=a,this.updateProjectionMatrix()}copy(e,t){return super.copy(e,t),this.left=e.left,this.right=e.right,this.top=e.top,this.bottom=e.bottom,this.near=e.near,this.far=e.far,this.zoom=e.zoom,this.view=null===e.view?null:Object.assign({},e.view),this}setViewOffset(e,t,n,r,s,a){null===this.view&&(this.view={enabled:!0,fullWidth:1,fullHeight:1,offsetX:0,offsetY:0,width:1,height:1}),this.view.enabled=!0,this.view.fullWidth=e,this.view.fullHeight=t,this.view.offsetX=n,this.view.offsetY=r,this.view.width=s,this.view.height=a,this.updateProjectionMatrix()}clearViewOffset(){null!==this.view&&(this.view.enabled=!1),this.updateProjectionMatrix()}updateProjectionMatrix(){const e=(this.right-this.left)/(2*this.zoom),t=(this.top-this.bottom)/(2*this.zoom),n=(this.right+this.left)/2,r=(this.top+this.bottom)/2;let s=n-e,a=n+e,l=r+t,u=r-t;if(null!==this.view&&this.view.enabled){const d=(this.right-this.left)/this.view.fullWidth/this.zoom,p=(this.top-this.bottom)/this.view.fullHeight/this.zoom;s+=d*this.view.offsetX,a=s+d*this.view.width,l-=p*this.view.offsetY,u=l-p*this.view.height}this.projectionMatrix.makeOrthographic(s,a,l,u,this.near,this.far),this.projectionMatrixInverse.copy(this.projectionMatrix).invert()}toJSON(e){const t=super.toJSON(e);return t.object.zoom=this.zoom,t.object.left=this.left,t.object.right=this.right,t.object.top=this.top,t.object.bottom=this.bottom,t.object.near=this.near,t.object.far=this.far,null!==this.view&&(t.object.view=Object.assign({},this.view)),t}}const uN=[.125,.215,.35,.446,.526,.582],PP=new Kw,hN=new Lr;let kP=null;const pb=(1+Math.sqrt(5))/2,Zw=1/pb,dN=[new Nt(1,1,1),new Nt(-1,1,1),new Nt(1,1,-1),new Nt(-1,1,-1),new Nt(0,pb,Zw),new Nt(0,pb,-Zw),new Nt(Zw,0,pb),new Nt(-Zw,0,pb),new Nt(pb,Zw,0),new Nt(-pb,Zw,0)];class fN{constructor(e){this._renderer=e,this._pingPongRenderTarget=null,this._lodMax=0,this._cubeSize=0,this._lodPlanes=[],this._sizeLods=[],this._sigmas=[],this._blurMaterial=null,this._cubemapMaterial=null,this._equirectMaterial=null,this._compileMaterial(this._blurMaterial)}fromScene(e,t=0,n=.1,r=100){kP=this._renderer.getRenderTarget(),this._setSize(256);const s=this._allocateTargets();return s.depthBuffer=!0,this._sceneToCubeUV(e,n,r,s),t>0&&this._blur(s,0,0,t),this._applyPMREM(s),this._cleanup(s),s}fromEquirectangular(e,t=null){return this._fromTexture(e,t)}fromCubemap(e,t=null){return this._fromTexture(e,t)}compileCubemapShader(){null===this._cubemapMaterial&&(this._cubemapMaterial=mN(),this._compileMaterial(this._cubemapMaterial))}compileEquirectangularShader(){null===this._equirectMaterial&&(this._equirectMaterial=AN(),this._compileMaterial(this._equirectMaterial))}dispose(){this._dispose(),null!==this._cubemapMaterial&&this._cubemapMaterial.dispose(),null!==this._equirectMaterial&&this._equirectMaterial.dispose()}_setSize(e){this._lodMax=Math.floor(Math.log2(e)),this._cubeSize=Math.pow(2,this._lodMax)}_dispose(){null!==this._blurMaterial&&this._blurMaterial.dispose(),null!==this._pingPongRenderTarget&&this._pingPongRenderTarget.dispose();for(let e=0;ei-4?u=uN[a-i+4-1]:0===a&&(u=0),n.push(u);const d=1/(l-2),p=-d,y=1+d,C=[p,p,y,p,y,y,p,p,y,y,p,y],O=6,Q=6,W=3,se=2,ye=1,Le=new Float32Array(W*Q*O),we=new Float32Array(se*Q*O),He=new Float32Array(ye*Q*O);for(let Et=0;Et2?0:-1;Le.set([Yt,dt,0,Yt+2/3,dt,0,Yt+2/3,dt+1,0,Yt,dt,0,Yt+2/3,dt+1,0,Yt,dt+1,0],W*Q*Et),we.set(C,se*Q*Et),He.set([Et,Et,Et,Et,Et,Et],ye*Q*Et)}const gt=new Co;gt.setAttribute("position",new va(Le,W)),gt.setAttribute("uv",new va(we,se)),gt.setAttribute("faceIndex",new va(He,ye)),e.push(gt),r>4&&r--}return{lodPlanes:e,sizeLods:t,sigmas:n}}(s)),this._blurMaterial=function Ete(i,e,t){const n=new Float32Array(20),r=new Nt(0,1,0);return new Td({name:"SphericalGaussianBlur",defines:{n:20,CUBEUV_TEXEL_WIDTH:1/e,CUBEUV_TEXEL_HEIGHT:1/t,CUBEUV_MAX_MIP:`${i}.0`},uniforms:{envMap:{value:null},samples:{value:1},weights:{value:n},latitudinal:{value:!1},dTheta:{value:0},mipInt:{value:0},poleAxis:{value:r}},vertexShader:"\n\n\t\tprecision mediump float;\n\t\tprecision mediump int;\n\n\t\tattribute float faceIndex;\n\n\t\tvarying vec3 vOutputDirection;\n\n\t\t// RH coordinate system; PMREM face-indexing convention\n\t\tvec3 getDirection( vec2 uv, float face ) {\n\n\t\t\tuv = 2.0 * uv - 1.0;\n\n\t\t\tvec3 direction = vec3( uv, 1.0 );\n\n\t\t\tif ( face == 0.0 ) {\n\n\t\t\t\tdirection = direction.zyx; // ( 1, v, u ) pos x\n\n\t\t\t} else if ( face == 1.0 ) {\n\n\t\t\t\tdirection = direction.xzy;\n\t\t\t\tdirection.xz *= -1.0; // ( -u, 1, -v ) pos y\n\n\t\t\t} else if ( face == 2.0 ) {\n\n\t\t\t\tdirection.x *= -1.0; // ( -u, v, 1 ) pos z\n\n\t\t\t} else if ( face == 3.0 ) {\n\n\t\t\t\tdirection = direction.zyx;\n\t\t\t\tdirection.xz *= -1.0; // ( -1, v, -u ) neg x\n\n\t\t\t} else if ( face == 4.0 ) {\n\n\t\t\t\tdirection = direction.xzy;\n\t\t\t\tdirection.xy *= -1.0; // ( -u, -1, v ) neg y\n\n\t\t\t} else if ( face == 5.0 ) {\n\n\t\t\t\tdirection.z *= -1.0; // ( u, v, -1 ) neg z\n\n\t\t\t}\n\n\t\t\treturn direction;\n\n\t\t}\n\n\t\tvoid main() {\n\n\t\t\tvOutputDirection = getDirection( uv, faceIndex );\n\t\t\tgl_Position = vec4( position, 1.0 );\n\n\t\t}\n\t",fragmentShader:"\n\n\t\t\tprecision mediump float;\n\t\t\tprecision mediump int;\n\n\t\t\tvarying vec3 vOutputDirection;\n\n\t\t\tuniform sampler2D envMap;\n\t\t\tuniform int samples;\n\t\t\tuniform float weights[ n ];\n\t\t\tuniform bool latitudinal;\n\t\t\tuniform float dTheta;\n\t\t\tuniform float mipInt;\n\t\t\tuniform vec3 poleAxis;\n\n\t\t\t#define ENVMAP_TYPE_CUBE_UV\n\t\t\t#include \n\n\t\t\tvec3 getSample( float theta, vec3 axis ) {\n\n\t\t\t\tfloat cosTheta = cos( theta );\n\t\t\t\t// Rodrigues' axis-angle rotation\n\t\t\t\tvec3 sampleDirection = vOutputDirection * cosTheta\n\t\t\t\t\t+ cross( axis, vOutputDirection ) * sin( theta )\n\t\t\t\t\t+ axis * dot( axis, vOutputDirection ) * ( 1.0 - cosTheta );\n\n\t\t\t\treturn bilinearCubeUV( envMap, sampleDirection, mipInt );\n\n\t\t\t}\n\n\t\t\tvoid main() {\n\n\t\t\t\tvec3 axis = latitudinal ? poleAxis : cross( poleAxis, vOutputDirection );\n\n\t\t\t\tif ( all( equal( axis, vec3( 0.0 ) ) ) ) {\n\n\t\t\t\t\taxis = vec3( vOutputDirection.z, 0.0, - vOutputDirection.x );\n\n\t\t\t\t}\n\n\t\t\t\taxis = normalize( axis );\n\n\t\t\t\tgl_FragColor = vec4( 0.0, 0.0, 0.0, 1.0 );\n\t\t\t\tgl_FragColor.rgb += weights[ 0 ] * getSample( 0.0, axis );\n\n\t\t\t\tfor ( int i = 1; i < n; i++ ) {\n\n\t\t\t\t\tif ( i >= samples ) {\n\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tfloat theta = dTheta * float( i );\n\t\t\t\t\tgl_FragColor.rgb += weights[ i ] * getSample( -1.0 * theta, axis );\n\t\t\t\t\tgl_FragColor.rgb += weights[ i ] * getSample( theta, axis );\n\n\t\t\t\t}\n\n\t\t\t}\n\t\t",blending:0,depthTest:!1,depthWrite:!1})}(s,e,t)}return r}_compileMaterial(e){const t=new Pa(this._lodPlanes[0],e);this._renderer.compile(t,PP)}_sceneToCubeUV(e,t,n,r){const l=new jh(90,1,t,n),u=[1,-1,1,1,1,1],d=[1,1,1,-1,-1,-1],p=this._renderer,y=p.autoClear,C=p.toneMapping;p.getClearColor(hN),p.toneMapping=0,p.autoClear=!1;const O=new xh({name:"PMREM.Background",side:1,depthWrite:!1,depthTest:!1}),Q=new Pa(new Om,O);let W=!1;const se=e.background;se?se.isColor&&(O.color.copy(se),e.background=null,W=!0):(O.color.copy(hN),W=!0);for(let ye=0;ye<6;ye++){const Le=ye%3;0===Le?(l.up.set(0,u[ye],0),l.lookAt(d[ye],0,0)):1===Le?(l.up.set(0,0,u[ye]),l.lookAt(0,d[ye],0)):(l.up.set(0,u[ye],0),l.lookAt(0,0,d[ye]));const we=this._cubeSize;h4(r,Le*we,ye>2?we:0,we,we),p.setRenderTarget(r),W&&p.render(Q,l),p.render(e,l)}Q.geometry.dispose(),Q.material.dispose(),p.toneMapping=C,p.autoClear=y,e.background=se}_textureToCubeUV(e,t){const n=this._renderer,r=301===e.mapping||302===e.mapping;r?(null===this._cubemapMaterial&&(this._cubemapMaterial=mN()),this._cubemapMaterial.uniforms.flipEnvMap.value=!1===e.isRenderTargetTexture?-1:1):null===this._equirectMaterial&&(this._equirectMaterial=AN());const s=r?this._cubemapMaterial:this._equirectMaterial,a=new Pa(this._lodPlanes[0],s);s.uniforms.envMap.value=e;const u=this._cubeSize;h4(t,0,0,3*u,2*u),n.setRenderTarget(t),n.render(a,PP)}_applyPMREM(e){const t=this._renderer,n=t.autoClear;t.autoClear=!1;for(let r=1;r20&&console.warn(`sigmaRadians, ${s}, is too large and will clip, as it requested ${se} samples when the maximum is set to 20`);const ye=[];let Le=0;for(let Yt=0;Yt<20;++Yt){const dt=Yt/W,Ut=Math.exp(-dt*dt/2);ye.push(Ut),0===Yt?Le+=Ut:Ytwe-4?r-we+4:0),4*(this._cubeSize-He),3*He,2*He),u.setRenderTarget(t),u.render(y,PP)}}function pN(i,e,t){const n=new If(i,e,t);return n.texture.mapping=306,n.texture.name="PMREM.cubeUv",n.scissorTest=!0,n}function h4(i,e,t,n,r){i.viewport.set(e,t,n,r),i.scissor.set(e,t,n,r)}function AN(){return new Td({name:"EquirectangularToCubeUV",uniforms:{envMap:{value:null}},vertexShader:"\n\n\t\tprecision mediump float;\n\t\tprecision mediump int;\n\n\t\tattribute float faceIndex;\n\n\t\tvarying vec3 vOutputDirection;\n\n\t\t// RH coordinate system; PMREM face-indexing convention\n\t\tvec3 getDirection( vec2 uv, float face ) {\n\n\t\t\tuv = 2.0 * uv - 1.0;\n\n\t\t\tvec3 direction = vec3( uv, 1.0 );\n\n\t\t\tif ( face == 0.0 ) {\n\n\t\t\t\tdirection = direction.zyx; // ( 1, v, u ) pos x\n\n\t\t\t} else if ( face == 1.0 ) {\n\n\t\t\t\tdirection = direction.xzy;\n\t\t\t\tdirection.xz *= -1.0; // ( -u, 1, -v ) pos y\n\n\t\t\t} else if ( face == 2.0 ) {\n\n\t\t\t\tdirection.x *= -1.0; // ( -u, v, 1 ) pos z\n\n\t\t\t} else if ( face == 3.0 ) {\n\n\t\t\t\tdirection = direction.zyx;\n\t\t\t\tdirection.xz *= -1.0; // ( -1, v, -u ) neg x\n\n\t\t\t} else if ( face == 4.0 ) {\n\n\t\t\t\tdirection = direction.xzy;\n\t\t\t\tdirection.xy *= -1.0; // ( -u, -1, v ) neg y\n\n\t\t\t} else if ( face == 5.0 ) {\n\n\t\t\t\tdirection.z *= -1.0; // ( u, v, -1 ) neg z\n\n\t\t\t}\n\n\t\t\treturn direction;\n\n\t\t}\n\n\t\tvoid main() {\n\n\t\t\tvOutputDirection = getDirection( uv, faceIndex );\n\t\t\tgl_Position = vec4( position, 1.0 );\n\n\t\t}\n\t",fragmentShader:"\n\n\t\t\tprecision mediump float;\n\t\t\tprecision mediump int;\n\n\t\t\tvarying vec3 vOutputDirection;\n\n\t\t\tuniform sampler2D envMap;\n\n\t\t\t#include \n\n\t\t\tvoid main() {\n\n\t\t\t\tvec3 outputDirection = normalize( vOutputDirection );\n\t\t\t\tvec2 uv = equirectUv( outputDirection );\n\n\t\t\t\tgl_FragColor = vec4( texture2D ( envMap, uv ).rgb, 1.0 );\n\n\t\t\t}\n\t\t",blending:0,depthTest:!1,depthWrite:!1})}function mN(){return new Td({name:"CubemapToCubeUV",uniforms:{envMap:{value:null},flipEnvMap:{value:-1}},vertexShader:"\n\n\t\tprecision mediump float;\n\t\tprecision mediump int;\n\n\t\tattribute float faceIndex;\n\n\t\tvarying vec3 vOutputDirection;\n\n\t\t// RH coordinate system; PMREM face-indexing convention\n\t\tvec3 getDirection( vec2 uv, float face ) {\n\n\t\t\tuv = 2.0 * uv - 1.0;\n\n\t\t\tvec3 direction = vec3( uv, 1.0 );\n\n\t\t\tif ( face == 0.0 ) {\n\n\t\t\t\tdirection = direction.zyx; // ( 1, v, u ) pos x\n\n\t\t\t} else if ( face == 1.0 ) {\n\n\t\t\t\tdirection = direction.xzy;\n\t\t\t\tdirection.xz *= -1.0; // ( -u, 1, -v ) pos y\n\n\t\t\t} else if ( face == 2.0 ) {\n\n\t\t\t\tdirection.x *= -1.0; // ( -u, v, 1 ) pos z\n\n\t\t\t} else if ( face == 3.0 ) {\n\n\t\t\t\tdirection = direction.zyx;\n\t\t\t\tdirection.xz *= -1.0; // ( -1, v, -u ) neg x\n\n\t\t\t} else if ( face == 4.0 ) {\n\n\t\t\t\tdirection = direction.xzy;\n\t\t\t\tdirection.xy *= -1.0; // ( -u, -1, v ) neg y\n\n\t\t\t} else if ( face == 5.0 ) {\n\n\t\t\t\tdirection.z *= -1.0; // ( u, v, -1 ) neg z\n\n\t\t\t}\n\n\t\t\treturn direction;\n\n\t\t}\n\n\t\tvoid main() {\n\n\t\t\tvOutputDirection = getDirection( uv, faceIndex );\n\t\t\tgl_Position = vec4( position, 1.0 );\n\n\t\t}\n\t",fragmentShader:"\n\n\t\t\tprecision mediump float;\n\t\t\tprecision mediump int;\n\n\t\t\tuniform float flipEnvMap;\n\n\t\t\tvarying vec3 vOutputDirection;\n\n\t\t\tuniform samplerCube envMap;\n\n\t\t\tvoid main() {\n\n\t\t\t\tgl_FragColor = textureCube( envMap, vec3( flipEnvMap * vOutputDirection.x, vOutputDirection.yz ) );\n\n\t\t\t}\n\t\t",blending:0,depthTest:!1,depthWrite:!1})}function Dte(i){let e=new WeakMap,t=null;function s(l){const u=l.target;u.removeEventListener("dispose",s);const d=e.get(u);void 0!==d&&(e.delete(u),d.dispose())}return{get:function n(l){if(l&&l.isTexture){const u=l.mapping,d=303===u||304===u,p=301===u||302===u;if(d||p){if(l.isRenderTargetTexture&&!0===l.needsPMREMUpdate){l.needsPMREMUpdate=!1;let y=e.get(l);return null===t&&(t=new fN(i)),y=d?t.fromEquirectangular(l,y):t.fromCubemap(l,y),e.set(l,y),y.texture}if(e.has(l))return e.get(l).texture;{const y=l.image;if(d&&y&&y.height>0||p&&y&&function r(l){let u=0;for(let p=0;p<6;p++)void 0!==l[p]&&u++;return 6===u}(y)){null===t&&(t=new fN(i));const C=d?t.fromEquirectangular(l):t.fromCubemap(l);return e.set(l,C),l.addEventListener("dispose",s),C.texture}return null}}}return l},dispose:function a(){e=new WeakMap,null!==t&&(t.dispose(),t=null)}}}function Bte(i){const e={};function t(n){if(void 0!==e[n])return e[n];let r;switch(n){case"WEBGL_depth_texture":r=i.getExtension("WEBGL_depth_texture")||i.getExtension("MOZ_WEBGL_depth_texture")||i.getExtension("WEBKIT_WEBGL_depth_texture");break;case"EXT_texture_filter_anisotropic":r=i.getExtension("EXT_texture_filter_anisotropic")||i.getExtension("MOZ_EXT_texture_filter_anisotropic")||i.getExtension("WEBKIT_EXT_texture_filter_anisotropic");break;case"WEBGL_compressed_texture_s3tc":r=i.getExtension("WEBGL_compressed_texture_s3tc")||i.getExtension("MOZ_WEBGL_compressed_texture_s3tc")||i.getExtension("WEBKIT_WEBGL_compressed_texture_s3tc");break;case"WEBGL_compressed_texture_pvrtc":r=i.getExtension("WEBGL_compressed_texture_pvrtc")||i.getExtension("WEBKIT_WEBGL_compressed_texture_pvrtc");break;default:r=i.getExtension(n)}return e[n]=r,r}return{has:function(n){return null!==t(n)},init:function(n){n.isWebGL2?t("EXT_color_buffer_float"):(t("WEBGL_depth_texture"),t("OES_texture_float"),t("OES_texture_half_float"),t("OES_texture_half_float_linear"),t("OES_standard_derivatives"),t("OES_element_index_uint"),t("OES_vertex_array_object"),t("ANGLE_instanced_arrays")),t("OES_texture_float_linear"),t("EXT_color_buffer_half_float"),t("WEBGL_multisampled_render_to_texture")},get:function(n){const r=t(n);return null===r&&console.warn("THREE.WebGLRenderer: "+n+" extension not supported."),r}}}function Ite(i,e,t,n){const r={},s=new WeakMap;function a(y){const C=y.target;null!==C.index&&e.remove(C.index);for(const Q in C.attributes)e.remove(C.attributes[Q]);C.removeEventListener("dispose",a),delete r[C.id];const O=s.get(C);O&&(e.remove(O),s.delete(C)),n.releaseStatesOfGeometry(C),!0===C.isInstancedBufferGeometry&&delete C._maxInstanceCount,t.memory.geometries--}function d(y){const C=[],O=y.index,Q=y.attributes.position;let W=0;if(null!==O){const Le=O.array;W=O.version;for(let we=0,He=Le.length;wee.maxTextureSize&&(Hn=Math.ceil(_n/e.maxTextureSize),_n=e.maxTextureSize);const gi=new Float32Array(_n*Hn*4*W),Vn=new hP(gi,_n,Hn,W);Vn.type=ay,Vn.needsUpdate=!0;const Tn=4*Ut;for(let qn=0;qn0)return i;const r=e*t;let s=bN[r];if(void 0===s&&(s=new Float32Array(r),bN[r]=s),0!==e){n.toArray(s,0);for(let a=1,l=0;a!==e;++a)l+=t,i[a].toArray(s,l)}return s}function wh(i,e){if(i.length!==e.length)return!1;for(let t=0,n=i.length;t":" "} ${l}: ${t[a]}`)}return n.join("\n")}(i.getShaderSource(e),a)}return r}function Ine(i,e){const t=function Bne(i){switch(i){case ly:return["Linear","( value )"];case Pl:return["sRGB","( value )"];default:return console.warn("THREE.WebGLProgram: Unsupported encoding:",i),["Linear","( value )"]}}(e);return"vec4 "+i+"( vec4 value ) { return LinearTo"+t[0]+t[1]+"; }"}function Pne(i,e){let t;switch(e){case 1:t="Linear";break;case 2:t="Reinhard";break;case 3:t="OptimizedCineon";break;case 4:t="ACESFilmic";break;case 5:t="Custom";break;default:console.warn("THREE.WebGLProgram: Unsupported toneMapping:",e),t="Linear"}return"vec3 "+i+"( vec3 color ) { return "+t+"ToneMapping( color ); }"}function qM(i){return""!==i}function DN(i,e){const t=e.numSpotLightShadows+e.numSpotLightMaps-e.numSpotLightShadowsWithMaps;return i.replace(/NUM_DIR_LIGHTS/g,e.numDirLights).replace(/NUM_SPOT_LIGHTS/g,e.numSpotLights).replace(/NUM_SPOT_LIGHT_MAPS/g,e.numSpotLightMaps).replace(/NUM_SPOT_LIGHT_COORDS/g,t).replace(/NUM_RECT_AREA_LIGHTS/g,e.numRectAreaLights).replace(/NUM_POINT_LIGHTS/g,e.numPointLights).replace(/NUM_HEMI_LIGHTS/g,e.numHemiLights).replace(/NUM_DIR_LIGHT_SHADOWS/g,e.numDirLightShadows).replace(/NUM_SPOT_LIGHT_SHADOWS_WITH_MAPS/g,e.numSpotLightShadowsWithMaps).replace(/NUM_SPOT_LIGHT_SHADOWS/g,e.numSpotLightShadows).replace(/NUM_POINT_LIGHT_SHADOWS/g,e.numPointLightShadows)}function BN(i,e){return i.replace(/NUM_CLIPPING_PLANES/g,e.numClippingPlanes).replace(/UNION_CLIPPING_PLANES/g,e.numClippingPlanes-e.numClipIntersection)}const Rne=/^[ \t]*#include +<([\w\d./]+)>/gm;function RP(i){return i.replace(Rne,Lne)}function Lne(i,e){const t=fa[e];if(void 0===t)throw new Error("Can not resolve #include <"+e+">");return RP(t)}const Nne=/#pragma unroll_loop_start\s+for\s*\(\s*int\s+i\s*=\s*(\d+)\s*;\s*i\s*<\s*(\d+)\s*;\s*i\s*\+\+\s*\)\s*{([\s\S]+?)}\s+#pragma unroll_loop_end/g;function IN(i){return i.replace(Nne,Une)}function Une(i,e,t,n){let r="";for(let s=parseInt(e);s0&&(se+="\n"),ye=[O,Q].filter(qM).join("\n"),ye.length>0&&(ye+="\n")):(se=[PN(t),"#define SHADER_NAME "+t.shaderName,Q,t.instancing?"#define USE_INSTANCING":"",t.instancingColor?"#define USE_INSTANCING_COLOR":"",t.supportsVertexTextures?"#define VERTEX_TEXTURES":"",t.useFog&&t.fog?"#define USE_FOG":"",t.useFog&&t.fogExp2?"#define FOG_EXP2":"",t.map?"#define USE_MAP":"",t.envMap?"#define USE_ENVMAP":"",t.envMap?"#define "+p:"",t.lightMap?"#define USE_LIGHTMAP":"",t.aoMap?"#define USE_AOMAP":"",t.emissiveMap?"#define USE_EMISSIVEMAP":"",t.bumpMap?"#define USE_BUMPMAP":"",t.normalMap?"#define USE_NORMALMAP":"",t.normalMap&&t.objectSpaceNormalMap?"#define OBJECTSPACE_NORMALMAP":"",t.normalMap&&t.tangentSpaceNormalMap?"#define TANGENTSPACE_NORMALMAP":"",t.clearcoatMap?"#define USE_CLEARCOATMAP":"",t.clearcoatRoughnessMap?"#define USE_CLEARCOAT_ROUGHNESSMAP":"",t.clearcoatNormalMap?"#define USE_CLEARCOAT_NORMALMAP":"",t.iridescenceMap?"#define USE_IRIDESCENCEMAP":"",t.iridescenceThicknessMap?"#define USE_IRIDESCENCE_THICKNESSMAP":"",t.displacementMap&&t.supportsVertexTextures?"#define USE_DISPLACEMENTMAP":"",t.specularMap?"#define USE_SPECULARMAP":"",t.specularIntensityMap?"#define USE_SPECULARINTENSITYMAP":"",t.specularColorMap?"#define USE_SPECULARCOLORMAP":"",t.roughnessMap?"#define USE_ROUGHNESSMAP":"",t.metalnessMap?"#define USE_METALNESSMAP":"",t.alphaMap?"#define USE_ALPHAMAP":"",t.transmission?"#define USE_TRANSMISSION":"",t.transmissionMap?"#define USE_TRANSMISSIONMAP":"",t.thicknessMap?"#define USE_THICKNESSMAP":"",t.sheenColorMap?"#define USE_SHEENCOLORMAP":"",t.sheenRoughnessMap?"#define USE_SHEENROUGHNESSMAP":"",t.vertexTangents?"#define USE_TANGENT":"",t.vertexColors?"#define USE_COLOR":"",t.vertexAlphas?"#define USE_COLOR_ALPHA":"",t.vertexUvs?"#define USE_UV":"",t.uvsVertexOnly?"#define UVS_VERTEX_ONLY":"",t.flatShading?"#define FLAT_SHADED":"",t.skinning?"#define USE_SKINNING":"",t.morphTargets?"#define USE_MORPHTARGETS":"",t.morphNormals&&!1===t.flatShading?"#define USE_MORPHNORMALS":"",t.morphColors&&t.isWebGL2?"#define USE_MORPHCOLORS":"",t.morphTargetsCount>0&&t.isWebGL2?"#define MORPHTARGETS_TEXTURE":"",t.morphTargetsCount>0&&t.isWebGL2?"#define MORPHTARGETS_TEXTURE_STRIDE "+t.morphTextureStride:"",t.morphTargetsCount>0&&t.isWebGL2?"#define MORPHTARGETS_COUNT "+t.morphTargetsCount:"",t.doubleSided?"#define DOUBLE_SIDED":"",t.flipSided?"#define FLIP_SIDED":"",t.shadowMapEnabled?"#define USE_SHADOWMAP":"",t.shadowMapEnabled?"#define "+u:"",t.sizeAttenuation?"#define USE_SIZEATTENUATION":"",t.logarithmicDepthBuffer?"#define USE_LOGDEPTHBUF":"",t.logarithmicDepthBuffer&&t.rendererExtensionFragDepth?"#define USE_LOGDEPTHBUF_EXT":"","uniform mat4 modelMatrix;","uniform mat4 modelViewMatrix;","uniform mat4 projectionMatrix;","uniform mat4 viewMatrix;","uniform mat3 normalMatrix;","uniform vec3 cameraPosition;","uniform bool isOrthographic;","#ifdef USE_INSTANCING","\tattribute mat4 instanceMatrix;","#endif","#ifdef USE_INSTANCING_COLOR","\tattribute vec3 instanceColor;","#endif","attribute vec3 position;","attribute vec3 normal;","attribute vec2 uv;","#ifdef USE_TANGENT","\tattribute vec4 tangent;","#endif","#if defined( USE_COLOR_ALPHA )","\tattribute vec4 color;","#elif defined( USE_COLOR )","\tattribute vec3 color;","#endif","#if ( defined( USE_MORPHTARGETS ) && ! defined( MORPHTARGETS_TEXTURE ) )","\tattribute vec3 morphTarget0;","\tattribute vec3 morphTarget1;","\tattribute vec3 morphTarget2;","\tattribute vec3 morphTarget3;","\t#ifdef USE_MORPHNORMALS","\t\tattribute vec3 morphNormal0;","\t\tattribute vec3 morphNormal1;","\t\tattribute vec3 morphNormal2;","\t\tattribute vec3 morphNormal3;","\t#else","\t\tattribute vec3 morphTarget4;","\t\tattribute vec3 morphTarget5;","\t\tattribute vec3 morphTarget6;","\t\tattribute vec3 morphTarget7;","\t#endif","#endif","#ifdef USE_SKINNING","\tattribute vec4 skinIndex;","\tattribute vec4 skinWeight;","#endif","\n"].filter(qM).join("\n"),ye=[O,PN(t),"#define SHADER_NAME "+t.shaderName,Q,t.useFog&&t.fog?"#define USE_FOG":"",t.useFog&&t.fogExp2?"#define FOG_EXP2":"",t.map?"#define USE_MAP":"",t.matcap?"#define USE_MATCAP":"",t.envMap?"#define USE_ENVMAP":"",t.envMap?"#define "+d:"",t.envMap?"#define "+p:"",t.envMap?"#define "+y:"",C?"#define CUBEUV_TEXEL_WIDTH "+C.texelWidth:"",C?"#define CUBEUV_TEXEL_HEIGHT "+C.texelHeight:"",C?"#define CUBEUV_MAX_MIP "+C.maxMip+".0":"",t.lightMap?"#define USE_LIGHTMAP":"",t.aoMap?"#define USE_AOMAP":"",t.emissiveMap?"#define USE_EMISSIVEMAP":"",t.bumpMap?"#define USE_BUMPMAP":"",t.normalMap?"#define USE_NORMALMAP":"",t.normalMap&&t.objectSpaceNormalMap?"#define OBJECTSPACE_NORMALMAP":"",t.normalMap&&t.tangentSpaceNormalMap?"#define TANGENTSPACE_NORMALMAP":"",t.clearcoat?"#define USE_CLEARCOAT":"",t.clearcoatMap?"#define USE_CLEARCOATMAP":"",t.clearcoatRoughnessMap?"#define USE_CLEARCOAT_ROUGHNESSMAP":"",t.clearcoatNormalMap?"#define USE_CLEARCOAT_NORMALMAP":"",t.iridescence?"#define USE_IRIDESCENCE":"",t.iridescenceMap?"#define USE_IRIDESCENCEMAP":"",t.iridescenceThicknessMap?"#define USE_IRIDESCENCE_THICKNESSMAP":"",t.specularMap?"#define USE_SPECULARMAP":"",t.specularIntensityMap?"#define USE_SPECULARINTENSITYMAP":"",t.specularColorMap?"#define USE_SPECULARCOLORMAP":"",t.roughnessMap?"#define USE_ROUGHNESSMAP":"",t.metalnessMap?"#define USE_METALNESSMAP":"",t.alphaMap?"#define USE_ALPHAMAP":"",t.alphaTest?"#define USE_ALPHATEST":"",t.sheen?"#define USE_SHEEN":"",t.sheenColorMap?"#define USE_SHEENCOLORMAP":"",t.sheenRoughnessMap?"#define USE_SHEENROUGHNESSMAP":"",t.transmission?"#define USE_TRANSMISSION":"",t.transmissionMap?"#define USE_TRANSMISSIONMAP":"",t.thicknessMap?"#define USE_THICKNESSMAP":"",t.decodeVideoTexture?"#define DECODE_VIDEO_TEXTURE":"",t.vertexTangents?"#define USE_TANGENT":"",t.vertexColors||t.instancingColor?"#define USE_COLOR":"",t.vertexAlphas?"#define USE_COLOR_ALPHA":"",t.vertexUvs?"#define USE_UV":"",t.uvsVertexOnly?"#define UVS_VERTEX_ONLY":"",t.gradientMap?"#define USE_GRADIENTMAP":"",t.flatShading?"#define FLAT_SHADED":"",t.doubleSided?"#define DOUBLE_SIDED":"",t.flipSided?"#define FLIP_SIDED":"",t.shadowMapEnabled?"#define USE_SHADOWMAP":"",t.shadowMapEnabled?"#define "+u:"",t.premultipliedAlpha?"#define PREMULTIPLIED_ALPHA":"",t.physicallyCorrectLights?"#define PHYSICALLY_CORRECT_LIGHTS":"",t.logarithmicDepthBuffer?"#define USE_LOGDEPTHBUF":"",t.logarithmicDepthBuffer&&t.rendererExtensionFragDepth?"#define USE_LOGDEPTHBUF_EXT":"","uniform mat4 viewMatrix;","uniform vec3 cameraPosition;","uniform bool isOrthographic;",0!==t.toneMapping?"#define TONE_MAPPING":"",0!==t.toneMapping?fa.tonemapping_pars_fragment:"",0!==t.toneMapping?Pne("toneMapping",t.toneMapping):"",t.dithering?"#define DITHERING":"",t.opaque?"#define OPAQUE":"",fa.encodings_pars_fragment,Ine("linearToOutputTexel",t.outputEncoding),t.useDepthPacking?"#define DEPTH_PACKING "+t.depthPacking:"","\n"].filter(qM).join("\n")),a=RP(a),a=DN(a,t),a=BN(a,t),l=RP(l),l=DN(l,t),l=BN(l,t),a=IN(a),l=IN(l),t.isWebGL2&&!0!==t.isRawShaderMaterial&&(Le="#version 300 es\n",se=["precision mediump sampler2DArray;","#define attribute in","#define varying out","#define texture2D texture"].join("\n")+"\n"+se,ye=["#define varying in","300 es"===t.glslVersion?"":"layout(location = 0) out highp vec4 pc_fragColor;","300 es"===t.glslVersion?"":"#define gl_FragColor pc_fragColor","#define gl_FragDepthEXT gl_FragDepth","#define texture2D texture","#define textureCube texture","#define texture2DProj textureProj","#define texture2DLodEXT textureLod","#define texture2DProjLodEXT textureProjLod","#define textureCubeLodEXT textureLod","#define texture2DGradEXT textureGrad","#define texture2DProjGradEXT textureProjGrad","#define textureCubeGradEXT textureGrad"].join("\n")+"\n"+ye);const He=Le+ye+l,gt=TN(r,35633,Le+se+a),Et=TN(r,35632,He);if(r.attachShader(W,gt),r.attachShader(W,Et),void 0!==t.index0AttributeName?r.bindAttribLocation(W,0,t.index0AttributeName):!0===t.morphTargets&&r.bindAttribLocation(W,0,"position"),r.linkProgram(W),i.debug.checkShaderErrors){const Ut=r.getProgramInfoLog(W).trim(),_n=r.getShaderInfoLog(gt).trim(),Hn=r.getShaderInfoLog(Et).trim();let gi=!0,Vn=!0;if(!1===r.getProgramParameter(W,35714)){gi=!1;const Tn=EN(r,gt,"vertex"),yi=EN(r,Et,"fragment");console.error("THREE.WebGLProgram: Shader Error "+r.getError()+" - VALIDATE_STATUS "+r.getProgramParameter(W,35715)+"\n\nProgram Info Log: "+Ut+"\n"+Tn+"\n"+yi)}else""!==Ut?console.warn("THREE.WebGLProgram: Program Info Log:",Ut):(""===_n||""===Hn)&&(Vn=!1);Vn&&(this.diagnostics={runnable:gi,programLog:Ut,vertexShader:{log:_n,prefix:se},fragmentShader:{log:Hn,prefix:ye}})}let Yt,dt;return r.deleteShader(gt),r.deleteShader(Et),this.getUniforms=function(){return void 0===Yt&&(Yt=new f4(r,W)),Yt},this.getAttributes=function(){return void 0===dt&&(dt=function One(i,e){const t={},n=i.getProgramParameter(e,35721);for(let r=0;r0,Bs=dt.iridescence>0;return{isWebGL2:p,shaderID:si,shaderName:dt.type,vertexShader:oi,fragmentShader:fr,defines:dt.defines,customVertexShaderID:hr,customFragmentShaderID:Yr,isRawShaderMaterial:!0===dt.isRawShaderMaterial,glslVersion:dt.glslVersion,precision:O,instancing:!0===gi.isInstancedMesh,instancingColor:!0===gi.isInstancedMesh&&null!==gi.instanceColor,supportsVertexTextures:C,outputEncoding:null===Ci?i.outputEncoding:!0===Ci.isXRRenderTarget?Ci.texture.encoding:ly,map:!!dt.map,matcap:!!dt.matcap,envMap:!!qn,envMapMode:qn&&qn.mapping,envMapCubeUVHeight:xi,lightMap:!!dt.lightMap,aoMap:!!dt.aoMap,emissiveMap:!!dt.emissiveMap,bumpMap:!!dt.bumpMap,normalMap:!!dt.normalMap,objectSpaceNormalMap:1===dt.normalMapType,tangentSpaceNormalMap:0===dt.normalMapType,decodeVideoTexture:!!dt.map&&!0===dt.map.isVideoTexture&&dt.map.encoding===Pl,clearcoat:Ss,clearcoatMap:Ss&&!!dt.clearcoatMap,clearcoatRoughnessMap:Ss&&!!dt.clearcoatRoughnessMap,clearcoatNormalMap:Ss&&!!dt.clearcoatNormalMap,iridescence:Bs,iridescenceMap:Bs&&!!dt.iridescenceMap,iridescenceThicknessMap:Bs&&!!dt.iridescenceThicknessMap,displacementMap:!!dt.displacementMap,roughnessMap:!!dt.roughnessMap,metalnessMap:!!dt.metalnessMap,specularMap:!!dt.specularMap,specularIntensityMap:!!dt.specularIntensityMap,specularColorMap:!!dt.specularColorMap,opaque:!1===dt.transparent&&1===dt.blending,alphaMap:!!dt.alphaMap,alphaTest:dt.alphaTest>0,gradientMap:!!dt.gradientMap,sheen:dt.sheen>0,sheenColorMap:!!dt.sheenColorMap,sheenRoughnessMap:!!dt.sheenRoughnessMap,transmission:dt.transmission>0,transmissionMap:!!dt.transmissionMap,thicknessMap:!!dt.thicknessMap,combine:dt.combine,vertexTangents:!!dt.normalMap&&!!Tn.attributes.tangent,vertexColors:dt.vertexColors,vertexAlphas:!0===dt.vertexColors&&!!Tn.attributes.color&&4===Tn.attributes.color.itemSize,vertexUvs:!!(dt.map||dt.bumpMap||dt.normalMap||dt.specularMap||dt.alphaMap||dt.emissiveMap||dt.roughnessMap||dt.metalnessMap||dt.clearcoatMap||dt.clearcoatRoughnessMap||dt.clearcoatNormalMap||dt.iridescenceMap||dt.iridescenceThicknessMap||dt.displacementMap||dt.transmissionMap||dt.thicknessMap||dt.specularIntensityMap||dt.specularColorMap||dt.sheenColorMap||dt.sheenRoughnessMap),uvsVertexOnly:!(dt.map||dt.bumpMap||dt.normalMap||dt.specularMap||dt.alphaMap||dt.emissiveMap||dt.roughnessMap||dt.metalnessMap||dt.clearcoatNormalMap||dt.iridescenceMap||dt.iridescenceThicknessMap||dt.transmission>0||dt.transmissionMap||dt.thicknessMap||dt.specularIntensityMap||dt.specularColorMap||dt.sheen>0||dt.sheenColorMap||dt.sheenRoughnessMap||!dt.displacementMap),fog:!!Vn,useFog:!0===dt.fog,fogExp2:Vn&&Vn.isFogExp2,flatShading:!!dt.flatShading,sizeAttenuation:dt.sizeAttenuation,logarithmicDepthBuffer:y,skinning:!0===gi.isSkinnedMesh,morphTargets:void 0!==Tn.morphAttributes.position,morphNormals:void 0!==Tn.morphAttributes.normal,morphColors:void 0!==Tn.morphAttributes.color,morphTargetsCount:Ki,morphTextureStride:cs,numDirLights:Ut.directional.length,numPointLights:Ut.point.length,numSpotLights:Ut.spot.length,numSpotLightMaps:Ut.spotLightMap.length,numRectAreaLights:Ut.rectArea.length,numHemiLights:Ut.hemi.length,numDirLightShadows:Ut.directionalShadowMap.length,numPointLightShadows:Ut.pointShadowMap.length,numSpotLightShadows:Ut.spotShadowMap.length,numSpotLightShadowsWithMaps:Ut.numSpotLightShadowsWithMaps,numClippingPlanes:a.numPlanes,numClipIntersection:a.numIntersection,dithering:dt.dithering,shadowMapEnabled:i.shadowMap.enabled&&_n.length>0,shadowMapType:i.shadowMap.type,toneMapping:dt.toneMapped?i.toneMapping:0,physicallyCorrectLights:i.physicallyCorrectLights,premultipliedAlpha:dt.premultipliedAlpha,doubleSided:2===dt.side,flipSided:1===dt.side,useDepthPacking:!!dt.depthPacking,depthPacking:dt.depthPacking||0,index0AttributeName:dt.index0AttributeName,extensionDerivatives:dt.extensions&&dt.extensions.derivatives,extensionFragDepth:dt.extensions&&dt.extensions.fragDepth,extensionDrawBuffers:dt.extensions&&dt.extensions.drawBuffers,extensionShaderTextureLOD:dt.extensions&&dt.extensions.shaderTextureLOD,rendererExtensionFragDepth:p||n.has("EXT_frag_depth"),rendererExtensionDrawBuffers:p||n.has("WEBGL_draw_buffers"),rendererExtensionShaderTextureLod:p||n.has("EXT_shader_texture_lod"),customProgramCacheKey:dt.customProgramCacheKey()}},getProgramCacheKey:function se(dt){const Ut=[];if(dt.shaderID?Ut.push(dt.shaderID):(Ut.push(dt.customVertexShaderID),Ut.push(dt.customFragmentShaderID)),void 0!==dt.defines)for(const _n in dt.defines)Ut.push(_n),Ut.push(dt.defines[_n]);return!1===dt.isRawShaderMaterial&&(function ye(dt,Ut){dt.push(Ut.precision),dt.push(Ut.outputEncoding),dt.push(Ut.envMapMode),dt.push(Ut.envMapCubeUVHeight),dt.push(Ut.combine),dt.push(Ut.vertexUvs),dt.push(Ut.fogExp2),dt.push(Ut.sizeAttenuation),dt.push(Ut.morphTargetsCount),dt.push(Ut.morphAttributeCount),dt.push(Ut.numDirLights),dt.push(Ut.numPointLights),dt.push(Ut.numSpotLights),dt.push(Ut.numSpotLightMaps),dt.push(Ut.numHemiLights),dt.push(Ut.numRectAreaLights),dt.push(Ut.numDirLightShadows),dt.push(Ut.numPointLightShadows),dt.push(Ut.numSpotLightShadows),dt.push(Ut.numSpotLightShadowsWithMaps),dt.push(Ut.shadowMapType),dt.push(Ut.toneMapping),dt.push(Ut.numClippingPlanes),dt.push(Ut.numClipIntersection),dt.push(Ut.depthPacking)}(Ut,dt),function Le(dt,Ut){l.disableAll(),Ut.isWebGL2&&l.enable(0),Ut.supportsVertexTextures&&l.enable(1),Ut.instancing&&l.enable(2),Ut.instancingColor&&l.enable(3),Ut.map&&l.enable(4),Ut.matcap&&l.enable(5),Ut.envMap&&l.enable(6),Ut.lightMap&&l.enable(7),Ut.aoMap&&l.enable(8),Ut.emissiveMap&&l.enable(9),Ut.bumpMap&&l.enable(10),Ut.normalMap&&l.enable(11),Ut.objectSpaceNormalMap&&l.enable(12),Ut.tangentSpaceNormalMap&&l.enable(13),Ut.clearcoat&&l.enable(14),Ut.clearcoatMap&&l.enable(15),Ut.clearcoatRoughnessMap&&l.enable(16),Ut.clearcoatNormalMap&&l.enable(17),Ut.iridescence&&l.enable(18),Ut.iridescenceMap&&l.enable(19),Ut.iridescenceThicknessMap&&l.enable(20),Ut.displacementMap&&l.enable(21),Ut.specularMap&&l.enable(22),Ut.roughnessMap&&l.enable(23),Ut.metalnessMap&&l.enable(24),Ut.gradientMap&&l.enable(25),Ut.alphaMap&&l.enable(26),Ut.alphaTest&&l.enable(27),Ut.vertexColors&&l.enable(28),Ut.vertexAlphas&&l.enable(29),Ut.vertexUvs&&l.enable(30),Ut.vertexTangents&&l.enable(31),Ut.uvsVertexOnly&&l.enable(32),dt.push(l.mask),l.disableAll(),Ut.fog&&l.enable(0),Ut.useFog&&l.enable(1),Ut.flatShading&&l.enable(2),Ut.logarithmicDepthBuffer&&l.enable(3),Ut.skinning&&l.enable(4),Ut.morphTargets&&l.enable(5),Ut.morphNormals&&l.enable(6),Ut.morphColors&&l.enable(7),Ut.premultipliedAlpha&&l.enable(8),Ut.shadowMapEnabled&&l.enable(9),Ut.physicallyCorrectLights&&l.enable(10),Ut.doubleSided&&l.enable(11),Ut.flipSided&&l.enable(12),Ut.useDepthPacking&&l.enable(13),Ut.dithering&&l.enable(14),Ut.specularIntensityMap&&l.enable(15),Ut.specularColorMap&&l.enable(16),Ut.transmission&&l.enable(17),Ut.transmissionMap&&l.enable(18),Ut.thicknessMap&&l.enable(19),Ut.sheen&&l.enable(20),Ut.sheenColorMap&&l.enable(21),Ut.sheenRoughnessMap&&l.enable(22),Ut.decodeVideoTexture&&l.enable(23),Ut.opaque&&l.enable(24),dt.push(l.mask)}(Ut,dt),Ut.push(i.outputEncoding)),Ut.push(dt.customProgramCacheKey),Ut.join()},getUniforms:function we(dt){const Ut=Q[dt.type];let _n;return _n=Ut?EP.clone(l0[Ut].uniforms):dt.uniforms,_n},acquireProgram:function He(dt,Ut){let _n;for(let Hn=0,gi=d.length;Hn0?n.push(ye):!0===O.transparent?r.push(ye):t.push(ye)},unshift:function u(y,C,O,Q,W,se){const ye=a(y,C,O,Q,W,se);O.transmission>0?n.unshift(ye):!0===O.transparent?r.unshift(ye):t.unshift(ye)},finish:function p(){for(let y=e,C=i.length;y1&&t.sort(y||Yne),n.length>1&&n.sort(C||kN),r.length>1&&r.sort(C||kN)}}}function Zne(){let i=new WeakMap;return{get:function e(n,r){const s=i.get(n);let a;return void 0===s?(a=new FN,i.set(n,[a])):r>=s.length?(a=new FN,s.push(a)):a=s[r],a},dispose:function t(){i=new WeakMap}}}function Jne(){const i={};return{get:function(e){if(void 0!==i[e.id])return i[e.id];let t;switch(e.type){case"DirectionalLight":t={direction:new Nt,color:new Lr};break;case"SpotLight":t={position:new Nt,direction:new Nt,color:new Lr,distance:0,coneCos:0,penumbraCos:0,decay:0};break;case"PointLight":t={position:new Nt,color:new Lr,distance:0,decay:0};break;case"HemisphereLight":t={direction:new Nt,skyColor:new Lr,groundColor:new Lr};break;case"RectAreaLight":t={color:new Lr,position:new Nt,halfWidth:new Nt,halfHeight:new Nt}}return i[e.id]=t,t}}}let tie=0;function nie(i,e){return(e.castShadow?2:0)-(i.castShadow?2:0)+(e.map?1:0)-(i.map?1:0)}function iie(i,e){const t=new Jne,n=function eie(){const i={};return{get:function(e){if(void 0!==i[e.id])return i[e.id];let t;switch(e.type){case"DirectionalLight":case"SpotLight":t={shadowBias:0,shadowNormalBias:0,shadowRadius:1,shadowMapSize:new ji};break;case"PointLight":t={shadowBias:0,shadowNormalBias:0,shadowRadius:1,shadowMapSize:new ji,shadowCameraNear:1,shadowCameraFar:1e3}}return i[e.id]=t,t}}}(),r={version:0,hash:{directionalLength:-1,pointLength:-1,spotLength:-1,rectAreaLength:-1,hemiLength:-1,numDirectionalShadows:-1,numPointShadows:-1,numSpotShadows:-1,numSpotMaps:-1},ambient:[0,0,0],probe:[],directional:[],directionalShadow:[],directionalShadowMap:[],directionalShadowMatrix:[],spot:[],spotLightMap:[],spotShadow:[],spotShadowMap:[],spotLightMatrix:[],rectArea:[],rectAreaLTC1:null,rectAreaLTC2:null,point:[],pointShadow:[],pointShadowMap:[],pointShadowMatrix:[],hemi:[],numSpotLightShadowsWithMaps:0};for(let p=0;p<9;p++)r.probe.push(new Nt);const s=new Nt,a=new Jo,l=new Jo;return{setup:function u(p,y){let C=0,O=0,Q=0;for(let Hn=0;Hn<9;Hn++)r.probe[Hn].set(0,0,0);let W=0,se=0,ye=0,Le=0,we=0,He=0,gt=0,Et=0,Yt=0,dt=0;p.sort(nie);const Ut=!0!==y?Math.PI:1;for(let Hn=0,gi=p.length;Hn0&&(e.isWebGL2||!0===i.has("OES_texture_float_linear")?(r.rectAreaLTC1=bs.LTC_FLOAT_1,r.rectAreaLTC2=bs.LTC_FLOAT_2):!0===i.has("OES_texture_half_float_linear")?(r.rectAreaLTC1=bs.LTC_HALF_1,r.rectAreaLTC2=bs.LTC_HALF_2):console.error("THREE.WebGLRenderer: Unable to use RectAreaLight. Missing WebGL extensions.")),r.ambient[0]=C,r.ambient[1]=O,r.ambient[2]=Q;const _n=r.hash;(_n.directionalLength!==W||_n.pointLength!==se||_n.spotLength!==ye||_n.rectAreaLength!==Le||_n.hemiLength!==we||_n.numDirectionalShadows!==He||_n.numPointShadows!==gt||_n.numSpotShadows!==Et||_n.numSpotMaps!==Yt)&&(r.directional.length=W,r.spot.length=ye,r.rectArea.length=Le,r.point.length=se,r.hemi.length=we,r.directionalShadow.length=He,r.directionalShadowMap.length=He,r.pointShadow.length=gt,r.pointShadowMap.length=gt,r.spotShadow.length=Et,r.spotShadowMap.length=Et,r.directionalShadowMatrix.length=He,r.pointShadowMatrix.length=gt,r.spotLightMatrix.length=Et+Yt-dt,r.spotLightMap.length=Yt,r.numSpotLightShadowsWithMaps=dt,_n.directionalLength=W,_n.pointLength=se,_n.spotLength=ye,_n.rectAreaLength=Le,_n.hemiLength=we,_n.numDirectionalShadows=He,_n.numPointShadows=gt,_n.numSpotShadows=Et,_n.numSpotMaps=Yt,r.version=tie++)},setupView:function d(p,y){let C=0,O=0,Q=0,W=0,se=0;const ye=y.matrixWorldInverse;for(let Le=0,we=p.length;Le=l.length?(u=new ON(i,e),l.push(u)):u=l[a],u},dispose:function r(){t=new WeakMap}}}class LP extends ru{constructor(e){super(),this.isMeshDepthMaterial=!0,this.type="MeshDepthMaterial",this.depthPacking=3200,this.map=null,this.alphaMap=null,this.displacementMap=null,this.displacementScale=1,this.displacementBias=0,this.wireframe=!1,this.wireframeLinewidth=1,this.setValues(e)}copy(e){return super.copy(e),this.depthPacking=e.depthPacking,this.map=e.map,this.alphaMap=e.alphaMap,this.displacementMap=e.displacementMap,this.displacementScale=e.displacementScale,this.displacementBias=e.displacementBias,this.wireframe=e.wireframe,this.wireframeLinewidth=e.wireframeLinewidth,this}}class RN extends ru{constructor(e){super(),this.isMeshDistanceMaterial=!0,this.type="MeshDistanceMaterial",this.referencePosition=new Nt,this.nearDistance=1,this.farDistance=1e3,this.map=null,this.alphaMap=null,this.displacementMap=null,this.displacementScale=1,this.displacementBias=0,this.setValues(e)}copy(e){return super.copy(e),this.referencePosition.copy(e.referencePosition),this.nearDistance=e.nearDistance,this.farDistance=e.farDistance,this.map=e.map,this.alphaMap=e.alphaMap,this.displacementMap=e.displacementMap,this.displacementScale=e.displacementScale,this.displacementBias=e.displacementBias,this}}function aie(i,e,t){let n=new IP;const r=new ji,s=new ji,a=new Xl,l=new LP({depthPacking:3201}),u=new RN,d={},p=t.maxTextureSize,y={0:1,1:0,2:2},C=new Td({defines:{VSM_SAMPLES:8},uniforms:{shadow_pass:{value:null},resolution:{value:new ji},radius:{value:4}},vertexShader:"void main() {\n\tgl_Position = vec4( position, 1.0 );\n}",fragmentShader:"uniform sampler2D shadow_pass;\nuniform vec2 resolution;\nuniform float radius;\n#include \nvoid main() {\n\tconst float samples = float( VSM_SAMPLES );\n\tfloat mean = 0.0;\n\tfloat squared_mean = 0.0;\n\tfloat uvStride = samples <= 1.0 ? 0.0 : 2.0 / ( samples - 1.0 );\n\tfloat uvStart = samples <= 1.0 ? 0.0 : - 1.0;\n\tfor ( float i = 0.0; i < samples; i ++ ) {\n\t\tfloat uvOffset = uvStart + i * uvStride;\n\t\t#ifdef HORIZONTAL_PASS\n\t\t\tvec2 distribution = unpackRGBATo2Half( texture2D( shadow_pass, ( gl_FragCoord.xy + vec2( uvOffset, 0.0 ) * radius ) / resolution ) );\n\t\t\tmean += distribution.x;\n\t\t\tsquared_mean += distribution.y * distribution.y + distribution.x * distribution.x;\n\t\t#else\n\t\t\tfloat depth = unpackRGBAToDepth( texture2D( shadow_pass, ( gl_FragCoord.xy + vec2( 0.0, uvOffset ) * radius ) / resolution ) );\n\t\t\tmean += depth;\n\t\t\tsquared_mean += depth * depth;\n\t\t#endif\n\t}\n\tmean = mean / samples;\n\tsquared_mean = squared_mean / samples;\n\tfloat std_dev = sqrt( squared_mean - mean * mean );\n\tgl_FragColor = pack2HalfToRGBA( vec2( mean, std_dev ) );\n}"}),O=C.clone();O.defines.HORIZONTAL_PASS=1;const Q=new Co;Q.setAttribute("position",new va(new Float32Array([-1,-1,.5,3,-1,.5,-1,3,.5]),3));const W=new Pa(Q,C),se=this;function ye(He,gt){const Et=e.update(W);C.defines.VSM_SAMPLES!==He.blurSamples&&(C.defines.VSM_SAMPLES=He.blurSamples,O.defines.VSM_SAMPLES=He.blurSamples,C.needsUpdate=!0,O.needsUpdate=!0),null===He.mapPass&&(He.mapPass=new If(r.x,r.y)),C.uniforms.shadow_pass.value=He.map.texture,C.uniforms.resolution.value=He.mapSize,C.uniforms.radius.value=He.radius,i.setRenderTarget(He.mapPass),i.clear(),i.renderBufferDirect(gt,null,Et,C,W,null),O.uniforms.shadow_pass.value=He.mapPass.texture,O.uniforms.resolution.value=He.mapSize,O.uniforms.radius.value=He.radius,i.setRenderTarget(He.map),i.clear(),i.renderBufferDirect(gt,null,Et,O,W,null)}function Le(He,gt,Et,Yt,dt,Ut){let _n=null;const Hn=!0===Et.isPointLight?He.customDistanceMaterial:He.customDepthMaterial;if(void 0!==Hn)_n=Hn;else if(_n=!0===Et.isPointLight?u:l,i.localClippingEnabled&&!0===gt.clipShadows&&Array.isArray(gt.clippingPlanes)&&0!==gt.clippingPlanes.length||gt.displacementMap&&0!==gt.displacementScale||gt.alphaMap&>.alphaTest>0||gt.map&>.alphaTest>0){const gi=_n.uuid,Vn=gt.uuid;let Tn=d[gi];void 0===Tn&&(Tn={},d[gi]=Tn);let yi=Tn[Vn];void 0===yi&&(yi=_n.clone(),Tn[Vn]=yi),_n=yi}return _n.visible=gt.visible,_n.wireframe=gt.wireframe,_n.side=3===Ut?null!==gt.shadowSide?gt.shadowSide:gt.side:null!==gt.shadowSide?gt.shadowSide:y[gt.side],_n.alphaMap=gt.alphaMap,_n.alphaTest=gt.alphaTest,_n.map=gt.map,_n.clipShadows=gt.clipShadows,_n.clippingPlanes=gt.clippingPlanes,_n.clipIntersection=gt.clipIntersection,_n.displacementMap=gt.displacementMap,_n.displacementScale=gt.displacementScale,_n.displacementBias=gt.displacementBias,_n.wireframeLinewidth=gt.wireframeLinewidth,_n.linewidth=gt.linewidth,!0===Et.isPointLight&&!0===_n.isMeshDistanceMaterial&&(_n.referencePosition.setFromMatrixPosition(Et.matrixWorld),_n.nearDistance=Yt,_n.farDistance=dt),_n}function we(He,gt,Et,Yt,dt){if(!1===He.visible)return;if(He.layers.test(gt.layers)&&(He.isMesh||He.isLine||He.isPoints)&&(He.castShadow||He.receiveShadow&&3===dt)&&(!He.frustumCulled||n.intersectsObject(He))){He.modelViewMatrix.multiplyMatrices(Et.matrixWorldInverse,He.matrixWorld);const Hn=e.update(He),gi=He.material;if(Array.isArray(gi)){const Vn=Hn.groups;for(let Tn=0,yi=Vn.length;Tnp||r.y>p)&&(r.x>p&&(s.x=Math.floor(p/yi.x),r.x=s.x*yi.x,Tn.mapSize.x=s.x),r.y>p&&(s.y=Math.floor(p/yi.y),r.y=s.y*yi.y,Tn.mapSize.y=s.y)),null===Tn.map&&(Tn.map=new If(r.x,r.y,3!==this.type?{minFilter:hu,magFilter:hu}:{}),Tn.map.texture.name=Vn.name+".shadowMap",Tn.camera.updateProjectionMatrix()),i.setRenderTarget(Tn.map),i.clear();const qn=Tn.getViewportCount();for(let xi=0;xi=1):-1!==si.indexOf("OpenGL ES")&&(xi=parseFloat(/^OpenGL ES (\d)/.exec(si)[1]),qn=xi>=2);let zi=null,Ki={};const cs=i.getParameter(3088),oi=i.getParameter(2978),fr=(new Xl).fromArray(cs),hr=(new Xl).fromArray(oi);function Yr(Zn,sr,Xr){const js=new Uint8Array(4),Bo=i.createTexture();i.bindTexture(Zn,Bo),i.texParameteri(Zn,10241,9728),i.texParameteri(Zn,10240,9728);for(let Nl=0;Nl"u")&&/OculusBrowser/g.test(navigator.userAgent),Q=new WeakMap;let W;const se=new WeakMap;let ye=!1;try{ye=typeof OffscreenCanvas<"u"&&null!==new OffscreenCanvas(1,1).getContext("2d")}catch{}function Le(vn,en){return ye?new OffscreenCanvas(vn,en):RM("canvas")}function we(vn,en,Vi,Wr){let is=1;if((vn.width>Wr||vn.height>Wr)&&(is=Wr/Math.max(vn.width,vn.height)),is<1||!0===en){if(typeof HTMLImageElement<"u"&&vn instanceof HTMLImageElement||typeof HTMLCanvasElement<"u"&&vn instanceof HTMLCanvasElement||typeof ImageBitmap<"u"&&vn instanceof ImageBitmap){const Is=en?HE:Math.floor,Yo=Is(is*vn.width),Bn=Is(is*vn.height);void 0===W&&(W=Le(Yo,Bn));const ui=Vi?Le(Yo,Bn):W;return ui.width=Yo,ui.height=Bn,ui.getContext("2d").drawImage(vn,0,0,Yo,Bn),console.warn("THREE.WebGLRenderer: Texture has been resized from ("+vn.width+"x"+vn.height+") to ("+Yo+"x"+Bn+")."),ui}return"data"in vn&&console.warn("THREE.WebGLRenderer: Image in DataTexture is too big ("+vn.width+"x"+vn.height+")."),vn}return vn}function He(vn){return oP(vn.width)&&oP(vn.height)}function Et(vn,en){return vn.generateMipmaps&&en&&vn.minFilter!==hu&&vn.minFilter!==iu}function Yt(vn){i.generateMipmap(vn)}function dt(vn,en,Vi,Wr,is=!1){if(!1===l)return en;if(null!==vn){if(void 0!==i[vn])return i[vn];console.warn("THREE.WebGLRenderer: Attempt to use non-existing WebGL internal format '"+vn+"'")}let Is=en;return 6403===en&&(5126===Vi&&(Is=33326),5131===Vi&&(Is=33325),5121===Vi&&(Is=33321)),33319===en&&(5126===Vi&&(Is=33328),5131===Vi&&(Is=33327),5121===Vi&&(Is=33323)),6408===en&&(5126===Vi&&(Is=34836),5131===Vi&&(Is=34842),5121===Vi&&(Is=Wr===Pl&&!1===is?35907:32856),32819===Vi&&(Is=32854),32820===Vi&&(Is=32855)),(33325===Is||33326===Is||33327===Is||33328===Is||34842===Is||34836===Is)&&e.get("EXT_color_buffer_float"),Is}function Ut(vn,en,Vi){return!0===Et(vn,Vi)||vn.isFramebufferTexture&&vn.minFilter!==hu&&vn.minFilter!==iu?Math.log2(Math.max(en.width,en.height))+1:void 0!==vn.mipmaps&&vn.mipmaps.length>0?vn.mipmaps.length:vn.isCompressedTexture&&Array.isArray(vn.image)?en.mipmaps.length:1}function _n(vn){return vn===hu||1004===vn||vn===Dw?9728:9729}function Hn(vn){const en=vn.target;en.removeEventListener("dispose",Hn),function Vn(vn){const en=n.get(vn);if(void 0===en.__webglInit)return;const Vi=vn.source,Wr=se.get(Vi);if(Wr){const is=Wr[en.__cacheKey];is.usedTimes--,0===is.usedTimes&&Tn(vn),0===Object.keys(Wr).length&&se.delete(Vi)}n.remove(vn)}(en),en.isVideoTexture&&Q.delete(en)}function gi(vn){const en=vn.target;en.removeEventListener("dispose",gi),function yi(vn){const en=vn.texture,Vi=n.get(vn),Wr=n.get(en);if(void 0!==Wr.__webglTexture&&(i.deleteTexture(Wr.__webglTexture),a.memory.textures--),vn.depthTexture&&vn.depthTexture.dispose(),vn.isWebGLCubeRenderTarget)for(let is=0;is<6;is++)i.deleteFramebuffer(Vi.__webglFramebuffer[is]),Vi.__webglDepthbuffer&&i.deleteRenderbuffer(Vi.__webglDepthbuffer[is]);else{if(i.deleteFramebuffer(Vi.__webglFramebuffer),Vi.__webglDepthbuffer&&i.deleteRenderbuffer(Vi.__webglDepthbuffer),Vi.__webglMultisampledFramebuffer&&i.deleteFramebuffer(Vi.__webglMultisampledFramebuffer),Vi.__webglColorRenderbuffer)for(let is=0;is0&&Vi.__version!==vn.version){const Wr=vn.image;if(null===Wr)console.warn("THREE.WebGLRenderer: Texture marked for update but no image data found.");else{if(!1!==Wr.complete)return void Ss(Vi,vn,en);console.warn("THREE.WebGLRenderer: Texture marked for update but image is incomplete")}}t.bindTexture(3553,Vi.__webglTexture,33984+en)}const hr={[oy]:10497,[Sd]:33071,[Ew]:33648},Yr={[hu]:9728,1004:9984,[Dw]:9986,[iu]:9729,1007:9985,[o0]:9987};function Ci(vn,en,Vi){if(Vi?(i.texParameteri(vn,10242,hr[en.wrapS]),i.texParameteri(vn,10243,hr[en.wrapT]),(32879===vn||35866===vn)&&i.texParameteri(vn,32882,hr[en.wrapR]),i.texParameteri(vn,10240,Yr[en.magFilter]),i.texParameteri(vn,10241,Yr[en.minFilter])):(i.texParameteri(vn,10242,33071),i.texParameteri(vn,10243,33071),(32879===vn||35866===vn)&&i.texParameteri(vn,32882,33071),(en.wrapS!==Sd||en.wrapT!==Sd)&&console.warn("THREE.WebGLRenderer: Texture is not power of two. Texture.wrapS and Texture.wrapT should be set to THREE.ClampToEdgeWrapping."),i.texParameteri(vn,10240,_n(en.magFilter)),i.texParameteri(vn,10241,_n(en.minFilter)),en.minFilter!==hu&&en.minFilter!==iu&&console.warn("THREE.WebGLRenderer: Texture is not power of two. Texture.minFilter should be set to THREE.NearestFilter or THREE.LinearFilter.")),!0===e.has("EXT_texture_filter_anisotropic")){const Wr=e.get("EXT_texture_filter_anisotropic");if(en.magFilter===hu||en.minFilter!==Dw&&en.minFilter!==o0||en.type===ay&&!1===e.has("OES_texture_float_linear")||!1===l&&en.type===PM&&!1===e.has("OES_texture_half_float_linear"))return;(en.anisotropy>1||n.get(en).__currentAnisotropy)&&(i.texParameterf(vn,Wr.TEXTURE_MAX_ANISOTROPY_EXT,Math.min(en.anisotropy,r.getMaxAnisotropy())),n.get(en).__currentAnisotropy=en.anisotropy)}}function Es(vn,en){let Vi=!1;void 0===vn.__webglInit&&(vn.__webglInit=!0,en.addEventListener("dispose",Hn));const Wr=en.source;let is=se.get(Wr);void 0===is&&(is={},se.set(Wr,is));const Is=function zi(vn){const en=[];return en.push(vn.wrapS),en.push(vn.wrapT),en.push(vn.wrapR||0),en.push(vn.magFilter),en.push(vn.minFilter),en.push(vn.anisotropy),en.push(vn.internalFormat),en.push(vn.format),en.push(vn.type),en.push(vn.generateMipmaps),en.push(vn.premultiplyAlpha),en.push(vn.flipY),en.push(vn.unpackAlignment),en.push(vn.encoding),en.join()}(en);if(Is!==vn.__cacheKey){void 0===is[Is]&&(is[Is]={texture:i.createTexture(),usedTimes:0},a.memory.textures++,Vi=!0),is[Is].usedTimes++;const Yo=is[vn.__cacheKey];void 0!==Yo&&(is[vn.__cacheKey].usedTimes--,0===Yo.usedTimes&&Tn(en)),vn.__cacheKey=Is,vn.__webglTexture=is[Is].texture}return Vi}function Ss(vn,en,Vi){let Wr=3553;(en.isDataArrayTexture||en.isCompressedArrayTexture)&&(Wr=35866),en.isData3DTexture&&(Wr=32879);const is=Es(vn,en),Is=en.source;t.bindTexture(Wr,vn.__webglTexture,33984+Vi);const Yo=n.get(Is);if(Is.version!==Yo.__version||!0===is){t.activeTexture(33984+Vi),i.pixelStorei(37440,en.flipY),i.pixelStorei(37441,en.premultiplyAlpha),i.pixelStorei(3317,en.unpackAlignment),i.pixelStorei(37443,0);const Bn=function gt(vn){return!l&&(vn.wrapS!==Sd||vn.wrapT!==Sd||vn.minFilter!==hu&&vn.minFilter!==iu)}(en)&&!1===He(en.image);let ui=we(en.image,Bn,!1,p);ui=El(en,ui);const Fs=He(ui)||l,Js=s.convert(en.format,en.encoding);let vo,zs=s.convert(en.type),Mo=dt(en.internalFormat,Js,zs,en.encoding,en.isVideoTexture);Ci(Wr,en,Fs);const al=en.mipmaps,Al=l&&!0!==en.isVideoTexture,Zl=void 0===Yo.__version||!0===is,Zn=Ut(en,ui,Fs);if(en.isDepthTexture)Mo=6402,l?Mo=en.type===ay?36012:en.type===tb?33190:en.type===Bw?35056:33189:en.type===ay&&console.error("WebGLRenderer: Floating point depth texture requires WebGL2."),en.format===nb&&6402===Mo&&1012!==en.type&&en.type!==tb&&(console.warn("THREE.WebGLRenderer: Use UnsignedShortType or UnsignedIntType for DepthFormat DepthTexture."),en.type=tb,zs=s.convert(en.type)),en.format===Iw&&6402===Mo&&(Mo=34041,en.type!==Bw&&(console.warn("THREE.WebGLRenderer: Use UnsignedInt248Type for DepthStencilFormat DepthTexture."),en.type=Bw,zs=s.convert(en.type))),Zl&&(Al?t.texStorage2D(3553,1,Mo,ui.width,ui.height):t.texImage2D(3553,0,Mo,ui.width,ui.height,0,Js,zs,null));else if(en.isDataTexture)if(al.length>0&&Fs){Al&&Zl&&t.texStorage2D(3553,Zn,Mo,al[0].width,al[0].height);for(let sr=0,Xr=al.length;sr>=1,Xr>>=1}}else if(al.length>0&&Fs){Al&&Zl&&t.texStorage2D(3553,Zn,Mo,al[0].width,al[0].height);for(let sr=0,Xr=al.length;sr=34069&&is<=34074)&&i.framebufferTexture2D(36160,Wr,is,n.get(Vi).__webglTexture,0),t.bindFramebuffer(36160,null)}function ta(vn,en,Vi){if(i.bindRenderbuffer(36161,vn),en.depthBuffer&&!en.stencilBuffer){let Wr=33189;if(Vi||ko(en)){const is=en.depthTexture;is&&is.isDepthTexture&&(is.type===ay?Wr=36012:is.type===tb&&(Wr=33190));const Is=Go(en);ko(en)?C.renderbufferStorageMultisampleEXT(36161,Is,Wr,en.width,en.height):i.renderbufferStorageMultisample(36161,Is,Wr,en.width,en.height)}else i.renderbufferStorage(36161,Wr,en.width,en.height);i.framebufferRenderbuffer(36160,36096,36161,vn)}else if(en.depthBuffer&&en.stencilBuffer){const Wr=Go(en);Vi&&!1===ko(en)?i.renderbufferStorageMultisample(36161,Wr,35056,en.width,en.height):ko(en)?C.renderbufferStorageMultisampleEXT(36161,Wr,35056,en.width,en.height):i.renderbufferStorage(36161,34041,en.width,en.height),i.framebufferRenderbuffer(36160,33306,36161,vn)}else{const Wr=!0===en.isWebGLMultipleRenderTargets?en.texture:[en.texture];for(let is=0;is0&&!0===e.has("WEBGL_multisampled_render_to_texture")&&!1!==en.__useRenderToTexture}function El(vn,en){const Vi=vn.encoding,Wr=vn.format,is=vn.type;return!0===vn.isCompressedTexture||!0===vn.isVideoTexture||1035===vn.format||Vi!==ly&&(Vi===Pl?!1===l?!0===e.has("EXT_sRGB")&&Wr===zp?(vn.format=1035,vn.minFilter=iu,vn.generateMipmaps=!1):en=j7.sRGBToLinear(en):(Wr!==zp||is!==eb)&&console.warn("THREE.WebGLTextures: sRGB encoded textures have to use RGBAFormat and UnsignedByteType."):console.error("THREE.WebGLTextures: Unsupported texture encoding:",Vi)),en}this.allocateTextureUnit=function si(){const vn=qn;return vn>=u&&console.warn("THREE.WebGLTextures: Trying to use "+vn+" texture units while this GPU supports only "+u),qn+=1,vn},this.resetTextureUnits=function xi(){qn=0},this.setTexture2D=Ki,this.setTexture2DArray=function cs(vn,en){const Vi=n.get(vn);vn.version>0&&Vi.__version!==vn.version?Ss(Vi,vn,en):t.bindTexture(35866,Vi.__webglTexture,33984+en)},this.setTexture3D=function oi(vn,en){const Vi=n.get(vn);vn.version>0&&Vi.__version!==vn.version?Ss(Vi,vn,en):t.bindTexture(32879,Vi.__webglTexture,33984+en)},this.setTextureCube=function fr(vn,en){const Vi=n.get(vn);vn.version>0&&Vi.__version!==vn.version?function Bs(vn,en,Vi){if(6!==en.image.length)return;const Wr=Es(vn,en),is=en.source;t.bindTexture(34067,vn.__webglTexture,33984+Vi);const Is=n.get(is);if(is.version!==Is.__version||!0===Wr){t.activeTexture(33984+Vi),i.pixelStorei(37440,en.flipY),i.pixelStorei(37441,en.premultiplyAlpha),i.pixelStorei(3317,en.unpackAlignment),i.pixelStorei(37443,0);const Yo=en.isCompressedTexture||en.image[0].isCompressedTexture,Bn=en.image[0]&&en.image[0].isDataTexture,ui=[];for(let sr=0;sr<6;sr++)ui[sr]=Yo||Bn?Bn?en.image[sr].image:en.image[sr]:we(en.image[sr],!1,!0,d),ui[sr]=El(en,ui[sr]);const Fs=ui[0],Js=He(Fs)||l,zs=s.convert(en.format,en.encoding),Mo=s.convert(en.type),vo=dt(en.internalFormat,zs,Mo,en.encoding),al=l&&!0!==en.isVideoTexture,Al=void 0===Is.__version||!0===Wr;let Zn,Zl=Ut(en,Fs,Js);if(Ci(34067,en,Js),Yo){al&&Al&&t.texStorage2D(34067,Zl,vo,Fs.width,Fs.height);for(let sr=0;sr<6;sr++){Zn=ui[sr].mipmaps;for(let Xr=0;Xr0&&Zl++,t.texStorage2D(34067,Zl,vo,ui[0].width,ui[0].height));for(let sr=0;sr<6;sr++)if(Bn){al?t.texSubImage2D(34069+sr,0,0,0,ui[sr].width,ui[sr].height,zs,Mo,ui[sr].data):t.texImage2D(34069+sr,0,vo,ui[sr].width,ui[sr].height,0,zs,Mo,ui[sr].data);for(let Xr=0;Xr0&&!1===ko(vn)){const Bn=Is?en:[en];Vi.__webglMultisampledFramebuffer=i.createFramebuffer(),Vi.__webglColorRenderbuffer=[],t.bindFramebuffer(36160,Vi.__webglMultisampledFramebuffer);for(let ui=0;ui0&&!1===ko(vn)){const en=vn.isWebGLMultipleRenderTargets?vn.texture:[vn.texture],Vi=vn.width,Wr=vn.height;let is=16384;const Is=[],Yo=vn.stencilBuffer?33306:36096,Bn=n.get(vn),ui=!0===vn.isWebGLMultipleRenderTargets;if(ui)for(let Fs=0;FsO+Q?(d.inputState.pinching=!1,this.dispatchEvent({type:"pinchend",handedness:e.handedness,target:this})):!d.inputState.pinching&&C<=O-Q&&(d.inputState.pinching=!0,this.dispatchEvent({type:"pinchstart",handedness:e.handedness,target:this}))}else null!==u&&e.gripSpace&&(s=t.getPose(e.gripSpace,n),null!==s&&(u.matrix.fromArray(s.transform.matrix),u.matrix.decompose(u.position,u.rotation,u.scale),s.linearVelocity?(u.hasLinearVelocity=!0,u.linearVelocity.copy(s.linearVelocity)):u.hasLinearVelocity=!1,s.angularVelocity?(u.hasAngularVelocity=!0,u.angularVelocity.copy(s.angularVelocity)):u.hasAngularVelocity=!1));null!==l&&(r=t.getPose(e.targetRaySpace,n),null===r&&null!==s&&(r=s),null!==r&&(l.matrix.fromArray(r.transform.matrix),l.matrix.decompose(l.position,l.rotation,l.scale),r.linearVelocity?(l.hasLinearVelocity=!0,l.linearVelocity.copy(r.linearVelocity)):l.hasLinearVelocity=!1,r.angularVelocity?(l.hasAngularVelocity=!0,l.angularVelocity.copy(r.angularVelocity)):l.hasAngularVelocity=!1,this.dispatchEvent(hie)))}return null!==l&&(l.visible=null!==r),null!==u&&(u.visible=null!==s),null!==d&&(d.visible=null!==a),this}_getHandJoint(e,t){if(void 0===e.joints[t.jointName]){const n=new Xu;n.matrixAutoUpdate=!1,n.visible=!1,e.joints[t.jointName]=n,e.add(n)}return e.joints[t.jointName]}}class die extends RA{constructor(e,t,n,r,s,a,l,u,d,p){if((p=void 0!==p?p:nb)!==nb&&p!==Iw)throw new Error("DepthTexture format must be either THREE.DepthFormat or THREE.DepthStencilFormat");void 0===n&&p===nb&&(n=tb),void 0===n&&p===Iw&&(n=Bw),super(null,r,s,a,l,u,p,n,d),this.isDepthTexture=!0,this.image={width:e,height:t},this.magFilter=void 0!==l?l:hu,this.minFilter=void 0!==u?u:hu,this.flipY=!1,this.generateMipmaps=!1}}class fie extends sb{constructor(e,t){super();const n=this;let r=null,s=1,a=null,l="local-floor",u=1,d=null,p=null,y=null,C=null,O=null,Q=null;const W=t.getContextAttributes();let se=null,ye=null;const Le=[],we=[],He=new Set,gt=new Map,Et=new jh;Et.layers.enable(1),Et.viewport=new Xl;const Yt=new jh;Yt.layers.enable(2),Yt.viewport=new Xl;const dt=[Et,Yt],Ut=new LN;Ut.layers.enable(1),Ut.layers.enable(2);let _n=null,Hn=null;function gi(oi){const fr=we.indexOf(oi.inputSource);if(-1===fr)return;const hr=Le[fr];void 0!==hr&&hr.dispatchEvent({type:oi.type,data:oi.inputSource})}function Vn(){r.removeEventListener("select",gi),r.removeEventListener("selectstart",gi),r.removeEventListener("selectend",gi),r.removeEventListener("squeeze",gi),r.removeEventListener("squeezestart",gi),r.removeEventListener("squeezeend",gi),r.removeEventListener("end",Vn),r.removeEventListener("inputsourceschange",Tn);for(let oi=0;oi=0&&(we[Yr]=null,Le[Yr].disconnect(hr))}for(let fr=0;fr=we.length){we.push(hr),Yr=Es;break}if(null===we[Es]){we[Es]=hr,Yr=Es;break}}if(-1===Yr)break}const Ci=Le[Yr];Ci&&Ci.connect(hr)}}this.cameraAutoUpdate=!0,this.enabled=!1,this.isPresenting=!1,this.getController=function(oi){let fr=Le[oi];return void 0===fr&&(fr=new NP,Le[oi]=fr),fr.getTargetRaySpace()},this.getControllerGrip=function(oi){let fr=Le[oi];return void 0===fr&&(fr=new NP,Le[oi]=fr),fr.getGripSpace()},this.getHand=function(oi){let fr=Le[oi];return void 0===fr&&(fr=new NP,Le[oi]=fr),fr.getHandSpace()},this.setFramebufferScaleFactor=function(oi){s=oi,!0===n.isPresenting&&console.warn("THREE.WebXRManager: Cannot change framebuffer scale while presenting.")},this.setReferenceSpaceType=function(oi){l=oi,!0===n.isPresenting&&console.warn("THREE.WebXRManager: Cannot change reference space type while presenting.")},this.getReferenceSpace=function(){return d||a},this.setReferenceSpace=function(oi){d=oi},this.getBaseLayer=function(){return null!==C?C:O},this.getBinding=function(){return y},this.getFrame=function(){return Q},this.getSession=function(){return r},this.setSession=function(){var oi=(0,Np.Z)(function*(fr){if(r=fr,null!==r){if(se=e.getRenderTarget(),r.addEventListener("select",gi),r.addEventListener("selectstart",gi),r.addEventListener("selectend",gi),r.addEventListener("squeeze",gi),r.addEventListener("squeezestart",gi),r.addEventListener("squeezeend",gi),r.addEventListener("end",Vn),r.addEventListener("inputsourceschange",Tn),!0!==W.xrCompatible&&(yield t.makeXRCompatible()),void 0===r.renderState.layers||!1===e.capabilities.isWebGL2)O=new XRWebGLLayer(r,t,{antialias:void 0!==r.renderState.layers||W.antialias,alpha:W.alpha,depth:W.depth,stencil:W.stencil,framebufferScaleFactor:s}),r.updateRenderState({baseLayer:O}),ye=new If(O.framebufferWidth,O.framebufferHeight,{format:zp,type:eb,encoding:e.outputEncoding,stencilBuffer:W.stencil});else{let hr=null,Yr=null,Ci=null;W.depth&&(Ci=W.stencil?35056:33190,hr=W.stencil?Iw:nb,Yr=W.stencil?Bw:tb);const Es={colorFormat:32856,depthFormat:Ci,scaleFactor:s};y=new XRWebGLBinding(r,t),C=y.createProjectionLayer(Es),r.updateRenderState({layers:[C]}),ye=new If(C.textureWidth,C.textureHeight,{format:zp,type:eb,depthTexture:new die(C.textureWidth,C.textureHeight,Yr,void 0,void 0,void 0,void 0,void 0,void 0,hr),stencilBuffer:W.stencil,encoding:e.outputEncoding,samples:W.antialias?4:0}),e.properties.get(ye).__ignoreDepthValues=C.ignoreDepthValues}ye.isXRRenderTarget=!0,this.setFoveation(u),d=null,a=yield r.requestReferenceSpace(l),cs.setContext(r),cs.start(),n.isPresenting=!0,n.dispatchEvent({type:"sessionstart"})}});return function(fr){return oi.apply(this,arguments)}}();const yi=new Nt,qn=new Nt;function si(oi,fr){null===fr?oi.matrixWorld.copy(oi.matrix):oi.matrixWorld.multiplyMatrices(fr.matrixWorld,oi.matrix),oi.matrixWorldInverse.copy(oi.matrixWorld).invert()}this.updateCamera=function(oi){if(null===r)return;Ut.near=Yt.near=Et.near=oi.near,Ut.far=Yt.far=Et.far=oi.far,(_n!==Ut.near||Hn!==Ut.far)&&(r.updateRenderState({depthNear:Ut.near,depthFar:Ut.far}),_n=Ut.near,Hn=Ut.far);const fr=oi.parent,hr=Ut.cameras;si(Ut,fr);for(let Ci=0;CiCi&&(gt.set(Yr,Yr.lastChangedTime),n.dispatchEvent({type:"planechanged",data:Yr}))}else He.add(Yr),gt.set(Yr,fr.lastChangedTime),n.dispatchEvent({type:"planeadded",data:Yr})}Q=null}),this.setAnimationLoop=function(oi){zi=oi},this.dispose=function(){}}}function pie(i,e){function r(W,se){W.opacity.value=se.opacity,se.color&&W.diffuse.value.copy(se.color),se.emissive&&W.emissive.value.copy(se.emissive).multiplyScalar(se.emissiveIntensity),se.map&&(W.map.value=se.map),se.alphaMap&&(W.alphaMap.value=se.alphaMap),se.bumpMap&&(W.bumpMap.value=se.bumpMap,W.bumpScale.value=se.bumpScale,1===se.side&&(W.bumpScale.value*=-1)),se.displacementMap&&(W.displacementMap.value=se.displacementMap,W.displacementScale.value=se.displacementScale,W.displacementBias.value=se.displacementBias),se.emissiveMap&&(W.emissiveMap.value=se.emissiveMap),se.normalMap&&(W.normalMap.value=se.normalMap,W.normalScale.value.copy(se.normalScale),1===se.side&&W.normalScale.value.negate()),se.specularMap&&(W.specularMap.value=se.specularMap),se.alphaTest>0&&(W.alphaTest.value=se.alphaTest);const ye=e.get(se).envMap;if(ye&&(W.envMap.value=ye,W.flipEnvMap.value=ye.isCubeTexture&&!1===ye.isRenderTargetTexture?-1:1,W.reflectivity.value=se.reflectivity,W.ior.value=se.ior,W.refractionRatio.value=se.refractionRatio),se.lightMap){W.lightMap.value=se.lightMap;const He=!0!==i.physicallyCorrectLights?Math.PI:1;W.lightMapIntensity.value=se.lightMapIntensity*He}let Le,we;se.aoMap&&(W.aoMap.value=se.aoMap,W.aoMapIntensity.value=se.aoMapIntensity),se.map?Le=se.map:se.specularMap?Le=se.specularMap:se.displacementMap?Le=se.displacementMap:se.normalMap?Le=se.normalMap:se.bumpMap?Le=se.bumpMap:se.roughnessMap?Le=se.roughnessMap:se.metalnessMap?Le=se.metalnessMap:se.alphaMap?Le=se.alphaMap:se.emissiveMap?Le=se.emissiveMap:se.clearcoatMap?Le=se.clearcoatMap:se.clearcoatNormalMap?Le=se.clearcoatNormalMap:se.clearcoatRoughnessMap?Le=se.clearcoatRoughnessMap:se.iridescenceMap?Le=se.iridescenceMap:se.iridescenceThicknessMap?Le=se.iridescenceThicknessMap:se.specularIntensityMap?Le=se.specularIntensityMap:se.specularColorMap?Le=se.specularColorMap:se.transmissionMap?Le=se.transmissionMap:se.thicknessMap?Le=se.thicknessMap:se.sheenColorMap?Le=se.sheenColorMap:se.sheenRoughnessMap&&(Le=se.sheenRoughnessMap),void 0!==Le&&(Le.isWebGLRenderTarget&&(Le=Le.texture),!0===Le.matrixAutoUpdate&&Le.updateMatrix(),W.uvTransform.value.copy(Le.matrix)),se.aoMap?we=se.aoMap:se.lightMap&&(we=se.lightMap),void 0!==we&&(we.isWebGLRenderTarget&&(we=we.texture),!0===we.matrixAutoUpdate&&we.updateMatrix(),W.uv2Transform.value.copy(we.matrix))}return{refreshFogUniforms:function t(W,se){se.color.getRGB(W.fogColor.value,lN(i)),se.isFog?(W.fogNear.value=se.near,W.fogFar.value=se.far):se.isFogExp2&&(W.fogDensity.value=se.density)},refreshMaterialUniforms:function n(W,se,ye,Le,we){se.isMeshBasicMaterial||se.isMeshLambertMaterial?r(W,se):se.isMeshToonMaterial?(r(W,se),function p(W,se){se.gradientMap&&(W.gradientMap.value=se.gradientMap)}(W,se)):se.isMeshPhongMaterial?(r(W,se),function d(W,se){W.specular.value.copy(se.specular),W.shininess.value=Math.max(se.shininess,1e-4)}(W,se)):se.isMeshStandardMaterial?(r(W,se),function y(W,se){W.roughness.value=se.roughness,W.metalness.value=se.metalness,se.roughnessMap&&(W.roughnessMap.value=se.roughnessMap),se.metalnessMap&&(W.metalnessMap.value=se.metalnessMap),e.get(se).envMap&&(W.envMapIntensity.value=se.envMapIntensity)}(W,se),se.isMeshPhysicalMaterial&&function C(W,se,ye){W.ior.value=se.ior,se.sheen>0&&(W.sheenColor.value.copy(se.sheenColor).multiplyScalar(se.sheen),W.sheenRoughness.value=se.sheenRoughness,se.sheenColorMap&&(W.sheenColorMap.value=se.sheenColorMap),se.sheenRoughnessMap&&(W.sheenRoughnessMap.value=se.sheenRoughnessMap)),se.clearcoat>0&&(W.clearcoat.value=se.clearcoat,W.clearcoatRoughness.value=se.clearcoatRoughness,se.clearcoatMap&&(W.clearcoatMap.value=se.clearcoatMap),se.clearcoatRoughnessMap&&(W.clearcoatRoughnessMap.value=se.clearcoatRoughnessMap),se.clearcoatNormalMap&&(W.clearcoatNormalScale.value.copy(se.clearcoatNormalScale),W.clearcoatNormalMap.value=se.clearcoatNormalMap,1===se.side&&W.clearcoatNormalScale.value.negate())),se.iridescence>0&&(W.iridescence.value=se.iridescence,W.iridescenceIOR.value=se.iridescenceIOR,W.iridescenceThicknessMinimum.value=se.iridescenceThicknessRange[0],W.iridescenceThicknessMaximum.value=se.iridescenceThicknessRange[1],se.iridescenceMap&&(W.iridescenceMap.value=se.iridescenceMap),se.iridescenceThicknessMap&&(W.iridescenceThicknessMap.value=se.iridescenceThicknessMap)),se.transmission>0&&(W.transmission.value=se.transmission,W.transmissionSamplerMap.value=ye.texture,W.transmissionSamplerSize.value.set(ye.width,ye.height),se.transmissionMap&&(W.transmissionMap.value=se.transmissionMap),W.thickness.value=se.thickness,se.thicknessMap&&(W.thicknessMap.value=se.thicknessMap),W.attenuationDistance.value=se.attenuationDistance,W.attenuationColor.value.copy(se.attenuationColor)),W.specularIntensity.value=se.specularIntensity,W.specularColor.value.copy(se.specularColor),se.specularIntensityMap&&(W.specularIntensityMap.value=se.specularIntensityMap),se.specularColorMap&&(W.specularColorMap.value=se.specularColorMap)}(W,se,we)):se.isMeshMatcapMaterial?(r(W,se),function O(W,se){se.matcap&&(W.matcap.value=se.matcap)}(W,se)):se.isMeshDepthMaterial?r(W,se):se.isMeshDistanceMaterial?(r(W,se),function Q(W,se){W.referencePosition.value.copy(se.referencePosition),W.nearDistance.value=se.nearDistance,W.farDistance.value=se.farDistance}(W,se)):se.isMeshNormalMaterial?r(W,se):se.isLineBasicMaterial?(function s(W,se){W.diffuse.value.copy(se.color),W.opacity.value=se.opacity}(W,se),se.isLineDashedMaterial&&function a(W,se){W.dashSize.value=se.dashSize,W.totalSize.value=se.dashSize+se.gapSize,W.scale.value=se.scale}(W,se)):se.isPointsMaterial?function l(W,se,ye,Le){let we;W.diffuse.value.copy(se.color),W.opacity.value=se.opacity,W.size.value=se.size*ye,W.scale.value=.5*Le,se.map&&(W.map.value=se.map),se.alphaMap&&(W.alphaMap.value=se.alphaMap),se.alphaTest>0&&(W.alphaTest.value=se.alphaTest),se.map?we=se.map:se.alphaMap&&(we=se.alphaMap),void 0!==we&&(!0===we.matrixAutoUpdate&&we.updateMatrix(),W.uvTransform.value.copy(we.matrix))}(W,se,ye,Le):se.isSpriteMaterial?function u(W,se){let ye;W.diffuse.value.copy(se.color),W.opacity.value=se.opacity,W.rotation.value=se.rotation,se.map&&(W.map.value=se.map),se.alphaMap&&(W.alphaMap.value=se.alphaMap),se.alphaTest>0&&(W.alphaTest.value=se.alphaTest),se.map?ye=se.map:se.alphaMap&&(ye=se.alphaMap),void 0!==ye&&(!0===ye.matrixAutoUpdate&&ye.updateMatrix(),W.uvTransform.value.copy(ye.matrix))}(W,se):se.isShadowMaterial?(W.color.value.copy(se.color),W.opacity.value=se.opacity):se.isShaderMaterial&&(se.uniformsNeedUpdate=!1)}}}function Aie(i,e,t,n){let r={},s={},a=[];const l=t.isWebGL2?i.getParameter(35375):0;function O(Le,we,He){const gt=Le.value;if(void 0===He[we]){if("number"==typeof gt)He[we]=gt;else{const Et=Array.isArray(gt)?gt:[gt],Yt=[];for(let dt=0;dt0&&(Et=He%16,0!==Et&&16-Et-_n.boundary<0&&(He+=16-Et,Ut.__offset=He)),He+=_n.storage}Et=He%16,Et>0&&(He+=16-Et),Le.__size=He,Le.__cache={}}(Le),He=function p(Le){const we=function y(){for(let Le=0;Le0&&function cx(ln,Ei,or){const Ai=Bs.isWebGL2;null===Ki&&(Ki=new If(1,1,{generateMipmaps:!0,type:Ss.has("EXT_color_buffer_half_float")?PM:eb,minFilter:o0,samples:Ai&&!0===s?4:0})),W.getDrawingBufferSize(oi),Ai?Ki.setSize(oi.x,oi.y):Ki.setSize(HE(oi.x),HE(oi.y));const Ar=W.getRenderTarget();W.setRenderTarget(Ki),W.clear();const qo=W.toneMapping;W.toneMapping=0,Gc(ln,Ei,or),W.toneMapping=qo,_r.updateMultisampleRenderTarget(Ki),_r.updateRenderTargetMipmap(Ki),W.setRenderTarget(Ar)}(Ar,Ei,or),Ai&&$r.viewport(Et.copy(Ai)),Ar.length>0&&Gc(Ar,Ei,or),qo.length>0&&Gc(qo,Ei,or),Aa.length>0&&Gc(Aa,Ei,or),$r.buffers.depth.setTest(!0),$r.buffers.depth.setMask(!0),$r.buffers.color.setMask(!0),$r.setPolygonOffset(!1)}function Gc(ln,Ei,or){const Ai=!0===Ei.isScene?Ei.overrideMaterial:null;for(let Ar=0,qo=ln.length;Ar0?Q[Q.length-1]:null,O.pop(),y=O.length>0?O[O.length-1]:null}}else console.error("THREE.WebGLRenderer.render: camera is not an instance of THREE.Camera.")},this.getActiveCubeFace=function(){return ye},this.getActiveMipmapLevel=function(){return Le},this.getRenderTarget=function(){return we},this.setRenderTargetTextures=function(ln,Ei,or){yr.get(ln.texture).__webglTexture=Ei,yr.get(ln.depthTexture).__webglTexture=or;const Ai=yr.get(ln);Ai.__hasExternalTextures=!0,Ai.__hasExternalTextures&&(Ai.__autoAllocateDepthBuffer=void 0===or,Ai.__autoAllocateDepthBuffer||!0===Ss.has("WEBGL_multisampled_render_to_texture")&&(console.warn("THREE.WebGLRenderer: Render-to-texture extension was disabled because an external texture was provided"),Ai.__useRenderToTexture=!1))},this.setRenderTargetFramebuffer=function(ln,Ei){const or=yr.get(ln);or.__webglFramebuffer=Ei,or.__useDefaultFramebuffer=void 0===Ei},this.setRenderTarget=function(ln,Ei=0,or=0){we=ln,ye=Ei,Le=or;let Ai=!0,Ar=null,qo=!1,Aa=!1;if(ln){const Wa=yr.get(ln);void 0!==Wa.__useDefaultFramebuffer?($r.bindFramebuffer(36160,null),Ai=!1):void 0===Wa.__webglFramebuffer?_r.setupRenderTarget(ln):Wa.__hasExternalTextures&&_r.rebindTextures(ln,yr.get(ln.texture).__webglTexture,yr.get(ln.depthTexture).__webglTexture);const Dl=ln.texture;(Dl.isData3DTexture||Dl.isDataArrayTexture||Dl.isCompressedArrayTexture)&&(Aa=!0);const ml=yr.get(ln).__webglFramebuffer;ln.isWebGLCubeRenderTarget?(Ar=ml[Ei],qo=!0):Ar=Bs.isWebGL2&&ln.samples>0&&!1===_r.useMultisampledRTT(ln)?yr.get(ln).__webglMultisampledFramebuffer:ml,Et.copy(ln.viewport),Yt.copy(ln.scissor),dt=ln.scissorTest}else Et.copy(Tn).multiplyScalar(Hn).floor(),Yt.copy(yi).multiplyScalar(Hn).floor(),dt=qn;if($r.bindFramebuffer(36160,Ar)&&Bs.drawBuffers&&Ai&&$r.drawBuffers(ln,Ar),$r.viewport(Et),$r.scissor(Yt),$r.setScissorTest(dt),qo){const Wa=yr.get(ln.texture);Ci.framebufferTexture2D(36160,36064,34069+Ei,Wa.__webglTexture,or)}else if(Aa){const Wa=yr.get(ln.texture);Ci.framebufferTextureLayer(36160,36064,Wa.__webglTexture,or||0,Ei||0)}He=-1},this.readRenderTargetPixels=function(ln,Ei,or,Ai,Ar,qo,Aa){if(!ln||!ln.isWebGLRenderTarget)return void console.error("THREE.WebGLRenderer.readRenderTargetPixels: renderTarget is not THREE.WebGLRenderTarget.");let Na=yr.get(ln).__webglFramebuffer;if(ln.isWebGLCubeRenderTarget&&void 0!==Aa&&(Na=Na[Aa]),Na){$r.bindFramebuffer(36160,Na);try{const Wa=ln.texture,Dl=Wa.format,ml=Wa.type;if(Dl!==zp&&Bn.convert(Dl)!==Ci.getParameter(35739))return void console.error("THREE.WebGLRenderer.readRenderTargetPixels: renderTarget is not in RGBA or implementation defined format.");const gl=ml===PM&&(Ss.has("EXT_color_buffer_half_float")||Bs.isWebGL2&&Ss.has("EXT_color_buffer_float"));if(!(ml===eb||Bn.convert(ml)===Ci.getParameter(35738)||ml===ay&&(Bs.isWebGL2||Ss.has("OES_texture_float")||Ss.has("WEBGL_color_buffer_float"))||gl))return void console.error("THREE.WebGLRenderer.readRenderTargetPixels: renderTarget is not in UnsignedByteType or implementation defined type.");Ei>=0&&Ei<=ln.width-Ai&&or>=0&&or<=ln.height-Ar&&Ci.readPixels(Ei,or,Ai,Ar,Bn.convert(Dl),Bn.convert(ml),qo)}finally{const Wa=null!==we?yr.get(we).__webglFramebuffer:null;$r.bindFramebuffer(36160,Wa)}}},this.copyFramebufferToTexture=function(ln,Ei,or=0){const Ai=Math.pow(2,-or),Ar=Math.floor(Ei.image.width*Ai),qo=Math.floor(Ei.image.height*Ai);_r.setTexture2D(Ei,0),Ci.copyTexSubImage2D(3553,or,0,0,ln.x,ln.y,Ar,qo),$r.unbindTexture()},this.copyTextureToTexture=function(ln,Ei,or,Ai=0){const Ar=Ei.image.width,qo=Ei.image.height,Aa=Bn.convert(or.format),Na=Bn.convert(or.type);_r.setTexture2D(or,0),Ci.pixelStorei(37440,or.flipY),Ci.pixelStorei(37441,or.premultiplyAlpha),Ci.pixelStorei(3317,or.unpackAlignment),Ei.isDataTexture?Ci.texSubImage2D(3553,Ai,ln.x,ln.y,Ar,qo,Aa,Na,Ei.image.data):Ei.isCompressedTexture?Ci.compressedTexSubImage2D(3553,Ai,ln.x,ln.y,Ei.mipmaps[0].width,Ei.mipmaps[0].height,Aa,Ei.mipmaps[0].data):Ci.texSubImage2D(3553,Ai,ln.x,ln.y,Aa,Na,Ei.image),0===Ai&&or.generateMipmaps&&Ci.generateMipmap(3553),$r.unbindTexture()},this.copyTextureToTexture3D=function(ln,Ei,or,Ai,Ar=0){if(W.isWebGL1Renderer)return void console.warn("THREE.WebGLRenderer.copyTextureToTexture3D: can only be used with WebGL2.");const qo=ln.max.x-ln.min.x+1,Aa=ln.max.y-ln.min.y+1,Na=ln.max.z-ln.min.z+1,Wa=Bn.convert(Ai.format),Dl=Bn.convert(Ai.type);let ml;if(Ai.isData3DTexture)_r.setTexture3D(Ai,0),ml=32879;else{if(!Ai.isDataArrayTexture)return void console.warn("THREE.WebGLRenderer.copyTextureToTexture3D: only supports THREE.DataTexture3D and THREE.DataTexture2DArray.");_r.setTexture2DArray(Ai,0),ml=35866}Ci.pixelStorei(37440,Ai.flipY),Ci.pixelStorei(37441,Ai.premultiplyAlpha),Ci.pixelStorei(3317,Ai.unpackAlignment);const gl=Ci.getParameter(3314),Ju=Ci.getParameter(32878),Xp=Ci.getParameter(3316),Y_=Ci.getParameter(3315),ux=Ci.getParameter(32877),eh=or.isCompressedTexture?or.mipmaps[0]:or.image;Ci.pixelStorei(3314,eh.width),Ci.pixelStorei(32878,eh.height),Ci.pixelStorei(3316,ln.min.x),Ci.pixelStorei(3315,ln.min.y),Ci.pixelStorei(32877,ln.min.z),or.isDataTexture||or.isData3DTexture?Ci.texSubImage3D(ml,Ar,Ei.x,Ei.y,Ei.z,qo,Aa,Na,Wa,Dl,eh.data):or.isCompressedArrayTexture?(console.warn("THREE.WebGLRenderer.copyTextureToTexture3D: untested support for compressed srcTexture."),Ci.compressedTexSubImage3D(ml,Ar,Ei.x,Ei.y,Ei.z,qo,Aa,Na,Wa,eh.data)):Ci.texSubImage3D(ml,Ar,Ei.x,Ei.y,Ei.z,qo,Aa,Na,Wa,Dl,eh),Ci.pixelStorei(3314,gl),Ci.pixelStorei(32878,Ju),Ci.pixelStorei(3316,Xp),Ci.pixelStorei(3315,Y_),Ci.pixelStorei(32877,ux),0===Ar&&Ai.generateMipmaps&&Ci.generateMipmap(ml),$r.unbindTexture()},this.initTexture=function(ln){ln.isCubeTexture?_r.setTextureCube(ln,0):ln.isData3DTexture?_r.setTexture3D(ln,0):ln.isDataArrayTexture||ln.isCompressedArrayTexture?_r.setTexture2DArray(ln,0):_r.setTexture2D(ln,0),$r.unbindTexture()},this.resetState=function(){ye=0,Le=0,we=null,$r.reset(),ui.reset()},typeof __THREE_DEVTOOLS__<"u"&&__THREE_DEVTOOLS__.dispatchEvent(new CustomEvent("observe",{detail:this}))}(class gie extends UP{}).prototype.isWebGL1Renderer=!0;class zP{constructor(e,t=25e-5){this.isFogExp2=!0,this.name="",this.color=new Lr(e),this.density=t}clone(){return new zP(this.color,this.density)}toJSON(){return{type:"FogExp2",color:this.color.getHex(),density:this.density}}}class HP{constructor(e,t=1,n=1e3){this.isFog=!0,this.name="",this.color=new Lr(e),this.near=t,this.far=n}clone(){return new HP(this.color,this.near,this.far)}toJSON(){return{type:"Fog",color:this.color.getHex(),near:this.near,far:this.far}}}class p4 extends Bc{constructor(){super(),this.isScene=!0,this.type="Scene",this.background=null,this.environment=null,this.fog=null,this.backgroundBlurriness=0,this.backgroundIntensity=1,this.overrideMaterial=null,typeof __THREE_DEVTOOLS__<"u"&&__THREE_DEVTOOLS__.dispatchEvent(new CustomEvent("observe",{detail:this}))}copy(e,t){return super.copy(e,t),null!==e.background&&(this.background=e.background.clone()),null!==e.environment&&(this.environment=e.environment.clone()),null!==e.fog&&(this.fog=e.fog.clone()),this.backgroundBlurriness=e.backgroundBlurriness,this.backgroundIntensity=e.backgroundIntensity,null!==e.overrideMaterial&&(this.overrideMaterial=e.overrideMaterial.clone()),this.matrixAutoUpdate=e.matrixAutoUpdate,this}toJSON(e){const t=super.toJSON(e);return null!==this.fog&&(t.object.fog=this.fog.toJSON()),this.backgroundBlurriness>0&&(t.object.backgroundBlurriness=this.backgroundBlurriness),1!==this.backgroundIntensity&&(t.object.backgroundIntensity=this.backgroundIntensity),t}get autoUpdate(){return console.warn("THREE.Scene: autoUpdate was renamed to matrixWorldAutoUpdate in r144."),this.matrixWorldAutoUpdate}set autoUpdate(e){console.warn("THREE.Scene: autoUpdate was renamed to matrixWorldAutoUpdate in r144."),this.matrixWorldAutoUpdate=e}}class VP{constructor(e,t){this.isInterleavedBuffer=!0,this.array=e,this.stride=t,this.count=void 0!==e?e.length/t:0,this.usage=35044,this.updateRange={offset:0,count:-1},this.version=0,this.uuid=Hp()}onUploadCallback(){}set needsUpdate(e){!0===e&&this.version++}setUsage(e){return this.usage=e,this}copy(e){return this.array=new e.array.constructor(e.array),this.count=e.count,this.stride=e.stride,this.usage=e.usage,this}copyAt(e,t,n){e*=this.stride,n*=t.stride;for(let r=0,s=this.stride;re.far||t.push({distance:u,point:QM.clone(),uv:LA.getUV(QM,A4,jM,m4,zN,GP,HN,new ji),face:null,object:this})}copy(e,t){return super.copy(e,t),void 0!==e.center&&this.center.copy(e.center),this.material=e.material,this}}function g4(i,e,t,n,r,s){r2.subVectors(i,t).addScalar(.5).multiply(n),void 0!==r?(WM.x=s*r2.x-r*r2.y,WM.y=r*r2.x+s*r2.y):WM.copy(r2),i.copy(e),i.x+=WM.x,i.y+=WM.y,i.applyMatrix4(UN)}const _4=new Nt,VN=new Nt;class yie extends Bc{constructor(){super(),this._currentLevel=0,this.type="LOD",Object.defineProperties(this,{levels:{enumerable:!0,value:[]},isLOD:{value:!0}}),this.autoUpdate=!0}copy(e){super.copy(e,!1);const t=e.levels;for(let n=0,r=t.length;n0){let n,r;for(n=1,r=t.length;n0){_4.setFromMatrixPosition(this.matrixWorld);const r=e.ray.origin.distanceTo(_4);this.getObjectForDistance(r).raycast(e,t)}}update(e){const t=this.levels;if(t.length>1){_4.setFromMatrixPosition(e.matrixWorld),VN.setFromMatrixPosition(this.matrixWorld);const n=_4.distanceTo(VN)/e.zoom;let r,s;for(t[0].object.visible=!0,r=1,s=t.length;r=a))break;t[r-1].object.visible=!1,t[r].object.visible=!0}for(this._currentLevel=r-1;ru)continue;C.applyMatrix4(this.matrixWorld);const dt=e.ray.origin.distanceTo(C);dte.far||t.push({distance:dt,point:y.clone().applyMatrix4(this.matrixWorld),index:we,face:null,faceIndex:null,object:this})}else for(let we=Math.max(0,a.start),He=Math.min(se.count,a.start+a.count)-1;weu)continue;C.applyMatrix4(this.matrixWorld);const Et=e.ray.origin.distanceTo(C);Ete.far||t.push({distance:Et,point:y.clone().applyMatrix4(this.matrixWorld),index:we,face:null,faceIndex:null,object:this})}}updateMorphTargets(){const t=this.geometry.morphAttributes,n=Object.keys(t);if(n.length>0){const r=t[n[0]];if(void 0!==r){this.morphTargetInfluences=[],this.morphTargetDictionary={};for(let s=0,a=r.length;s0){const r=t[n[0]];if(void 0!==r){this.morphTargetInfluences=[],this.morphTargetDictionary={};for(let s=0,a=r.length;sr.far)return;s.push({distance:d,distanceToRay:Math.sqrt(l),point:u,index:e,face:null,object:a})}}class Cie extends RA{constructor(e,t,n,r,s,a,l,u,d){super(e,t,n,r,s,a,l,u,d),this.isCanvasTexture=!0,this.needsUpdate=!0}}class u0{constructor(){this.type="Curve",this.arcLengthDivisions=200}getPoint(){return console.warn("THREE.Curve: .getPoint() not implemented."),null}getPointAt(e,t){const n=this.getUtoTmapping(e);return this.getPoint(n,t)}getPoints(e=5){const t=[];for(let n=0;n<=e;n++)t.push(this.getPoint(n/e));return t}getSpacedPoints(e=5){const t=[];for(let n=0;n<=e;n++)t.push(this.getPointAt(n/e));return t}getLength(){const e=this.getLengths();return e[e.length-1]}getLengths(e=this.arcLengthDivisions){if(this.cacheArcLengths&&this.cacheArcLengths.length===e+1&&!this.needsUpdate)return this.cacheArcLengths;this.needsUpdate=!1;const t=[];let n,r=this.getPoint(0),s=0;t.push(0);for(let a=1;a<=e;a++)n=this.getPoint(a/e),s+=n.distanceTo(r),t.push(s),r=n;return this.cacheArcLengths=t,t}updateArcLengths(){this.needsUpdate=!0,this.getLengths()}getUtoTmapping(e,t){const n=this.getLengths();let r=0;const s=n.length;let a;a=t||e*n[s-1];let d,l=0,u=s-1;for(;l<=u;)if(r=Math.floor(l+(u-l)/2),d=n[r]-a,d<0)l=r+1;else{if(!(d>0)){u=r;break}u=r-1}if(r=u,n[r]===a)return r/(s-1);const p=n[r];return(r+(a-p)/(n[r+1]-p))/(s-1)}getTangent(e,t){let r=e-1e-4,s=e+1e-4;r<0&&(r=0),s>1&&(s=1);const a=this.getPoint(r),l=this.getPoint(s),u=t||(a.isVector2?new ji:new Nt);return u.copy(l).sub(a).normalize(),u}getTangentAt(e,t){const n=this.getUtoTmapping(e);return this.getTangent(n,t)}computeFrenetFrames(e,t){const n=new Nt,r=[],s=[],a=[],l=new Nt,u=new Jo;for(let O=0;O<=e;O++)r[O]=this.getTangentAt(O/e,new Nt);s[0]=new Nt,a[0]=new Nt;let d=Number.MAX_VALUE;const p=Math.abs(r[0].x),y=Math.abs(r[0].y),C=Math.abs(r[0].z);p<=d&&(d=p,n.set(1,0,0)),y<=d&&(d=y,n.set(0,1,0)),C<=d&&n.set(0,0,1),l.crossVectors(r[0],n).normalize(),s[0].crossVectors(r[0],l),a[0].crossVectors(r[0],s[0]);for(let O=1;O<=e;O++){if(s[O]=s[O-1].clone(),a[O]=a[O-1].clone(),l.crossVectors(r[O-1],r[O]),l.length()>Number.EPSILON){l.normalize();const Q=Math.acos(Du(r[O-1].dot(r[O]),-1,1));s[O].applyMatrix4(u.makeRotationAxis(l,Q))}a[O].crossVectors(r[O],s[O])}if(!0===t){let O=Math.acos(Du(s[0].dot(s[e]),-1,1));O/=e,r[0].dot(l.crossVectors(s[0],s[e]))>0&&(O=-O);for(let Q=1;Q<=e;Q++)s[Q].applyMatrix4(u.makeRotationAxis(r[Q],O*Q)),a[Q].crossVectors(r[Q],s[Q])}return{tangents:r,normals:s,binormals:a}}clone(){return(new this.constructor).copy(this)}copy(e){return this.arcLengthDivisions=e.arcLengthDivisions,this}toJSON(){const e={metadata:{version:4.5,type:"Curve",generator:"Curve.toJSON"}};return e.arcLengthDivisions=this.arcLengthDivisions,e.type=this.type,e}fromJSON(e){return this.arcLengthDivisions=e.arcLengthDivisions,this}}class jP extends u0{constructor(e=0,t=0,n=1,r=1,s=0,a=2*Math.PI,l=!1,u=0){super(),this.isEllipseCurve=!0,this.type="EllipseCurve",this.aX=e,this.aY=t,this.xRadius=n,this.yRadius=r,this.aStartAngle=s,this.aEndAngle=a,this.aClockwise=l,this.aRotation=u}getPoint(e,t){const n=t||new ji,r=2*Math.PI;let s=this.aEndAngle-this.aStartAngle;const a=Math.abs(s)r;)s-=r;s0?0:(Math.floor(Math.abs(l)/s)+1)*s:0===u&&l===s-1&&(l=s-2,u=1),this.closed||l>0?d=r[(l-1)%s]:(C4.subVectors(r[0],r[1]).add(r[0]),d=C4);const y=r[l%s],C=r[(l+1)%s];if(this.closed||l+2r.length-2?r.length-1:a+1],y=r[a>r.length-3?r.length-1:a+2];return n.set(o9(l,u.x,d.x,p.x,y.x),o9(l,u.y,d.y,p.y,y.y)),n}copy(e){super.copy(e),this.points=[];for(let t=0,n=e.points.length;t=n){const a=r[s]-n,l=this.curves[s],u=l.getLength();return l.getPointAt(0===u?0:1-a/u,t)}s++}return null}getLength(){const e=this.getCurveLengths();return e[e.length-1]}updateArcLengths(){this.needsUpdate=!0,this.cacheLengths=null,this.getCurveLengths()}getCurveLengths(){if(this.cacheLengths&&this.cacheLengths.length===this.curves.length)return this.cacheLengths;const e=[];let t=0;for(let n=0,r=this.curves.length;n1&&!t[t.length-1].equals(t[0])&&t.push(t[0]),t}copy(e){super.copy(e),this.curves=[];for(let t=0,n=e.curves.length;t0){const y=d.getPoint(0);y.equals(this.currentPoint)||this.lineTo(y.x,y.y)}this.curves.push(d);const p=d.getPoint(1);return this.currentPoint.copy(p),this}copy(e){return super.copy(e),this.currentPoint.copy(e.currentPoint),this}toJSON(){const e=super.toJSON();return e.currentPoint=this.currentPoint.toArray(),e}fromJSON(e){return super.fromJSON(e),this.currentPoint.fromArray(e.currentPoint),this}}class S4 extends Co{constructor(e=[new ji(0,-.5),new ji(.5,0),new ji(0,.5)],t=12,n=0,r=2*Math.PI){super(),this.type="LatheGeometry",this.parameters={points:e,segments:t,phiStart:n,phiLength:r},t=Math.floor(t),r=Du(r,0,2*Math.PI);const s=[],a=[],l=[],u=[],d=[],p=1/t,y=new Nt,C=new ji,O=new Nt,Q=new Nt,W=new Nt;let se=0,ye=0;for(let Le=0;Le<=e.length-1;Le++)switch(Le){case 0:se=e[Le+1].x-e[Le].x,ye=e[Le+1].y-e[Le].y,O.x=1*ye,O.y=-se,O.z=0*ye,W.copy(O),O.normalize(),u.push(O.x,O.y,O.z);break;case e.length-1:u.push(W.x,W.y,W.z);break;default:se=e[Le+1].x-e[Le].x,ye=e[Le+1].y-e[Le].y,O.x=1*ye,O.y=-se,O.z=0*ye,Q.copy(O),O.x+=W.x,O.y+=W.y,O.z+=W.z,O.normalize(),u.push(O.x,O.y,O.z),W.copy(Q)}for(let Le=0;Le<=t;Le++){const we=n+Le*p*r,He=Math.sin(we),gt=Math.cos(we);for(let Et=0;Et<=e.length-1;Et++)y.x=e[Et].x*He,y.y=e[Et].y,y.z=e[Et].x*gt,a.push(y.x,y.y,y.z),C.x=Le/t,C.y=Et/(e.length-1),l.push(C.x,C.y),d.push(u[3*Et+0]*He,u[3*Et+1],u[3*Et+0]*gt)}for(let Le=0;Le0&&we(!0),t>0&&we(!1)),this.setIndex(p),this.setAttribute("position",new Ls(y,3)),this.setAttribute("normal",new Ls(C,3)),this.setAttribute("uv",new Ls(O,2))}static fromJSON(e){return new s2(e.radiusTop,e.radiusBottom,e.height,e.radialSegments,e.heightSegments,e.openEnded,e.thetaStart,e.thetaLength)}}class rk extends s2{constructor(e=1,t=1,n=32,r=1,s=!1,a=0,l=2*Math.PI){super(0,e,t,n,r,s,a,l),this.type="ConeGeometry",this.parameters={radius:e,height:t,radialSegments:n,heightSegments:r,openEnded:s,thetaStart:a,thetaLength:l}}static fromJSON(e){return new rk(e.radius,e.height,e.radialSegments,e.heightSegments,e.openEnded,e.thetaStart,e.thetaLength)}}class gb extends Co{constructor(e=[],t=[],n=1,r=0){super(),this.type="PolyhedronGeometry",this.parameters={vertices:e,indices:t,radius:n,detail:r};const s=[],a=[];function u(Le,we,He,gt){const Et=gt+1,Yt=[];for(let dt=0;dt<=Et;dt++){Yt[dt]=[];const Ut=Le.clone().lerp(He,dt/Et),_n=we.clone().lerp(He,dt/Et),Hn=Et-dt;for(let gi=0;gi<=Hn;gi++)Yt[dt][gi]=0===gi&&dt===Et?Ut:Ut.clone().lerp(_n,gi/Hn)}for(let dt=0;dt.9&&Yt<.1&&(we<.2&&(a[Le+0]+=1),He<.2&&(a[Le+2]+=1),gt<.2&&(a[Le+4]+=1))}}()}(),this.setAttribute("position",new Ls(s,3)),this.setAttribute("normal",new Ls(s.slice(),3)),this.setAttribute("uv",new Ls(a,2)),0===r?this.computeVertexNormals():this.normalizeNormals()}static fromJSON(e){return new gb(e.vertices,e.indices,e.radius,e.details)}}class sk extends gb{constructor(e=1,t=0){const n=(1+Math.sqrt(5))/2,r=1/n;super([-1,-1,-1,-1,-1,1,-1,1,-1,-1,1,1,1,-1,-1,1,-1,1,1,1,-1,1,1,1,0,-r,-n,0,-r,n,0,r,-n,0,r,n,-r,-n,0,-r,n,0,r,-n,0,r,n,0,-n,0,-r,n,0,-r,-n,0,r,n,0,r],[3,11,7,3,7,15,3,15,13,7,19,17,7,17,6,7,6,15,17,4,8,17,8,10,17,10,6,8,0,16,8,16,2,8,2,10,0,12,1,0,1,18,0,18,16,6,10,2,6,2,13,6,13,15,2,16,18,2,18,3,2,3,13,18,1,9,18,9,11,18,11,3,4,14,12,4,12,0,4,0,8,11,9,5,11,5,19,11,19,7,19,5,14,19,14,4,19,4,17,1,12,14,1,14,5,1,5,9],e,t),this.type="DodecahedronGeometry",this.parameters={radius:e,detail:t}}static fromJSON(e){return new sk(e.radius,e.detail)}}const T4=new Nt,E4=new Nt,ok=new Nt,D4=new LA;class u9 extends Co{constructor(e=null,t=1){if(super(),this.type="EdgesGeometry",this.parameters={geometry:e,thresholdAngle:t},null!==e){const r=Math.pow(10,4),s=Math.cos(ob*t),a=e.getIndex(),l=e.getAttribute("position"),u=a?a.count:l.count,d=[0,0,0],p=["a","b","c"],y=new Array(3),C={},O=[];for(let Q=0;Q0)for(s=e;s=e;s-=n)a=p9(s,i[s],i[s+1],a);return a&&B4(a,a.next)&&(tS(a),a=a.next),a}function _b(i,e){if(!i)return i;e||(e=i);let n,t=i;do{if(n=!1,t.steiner||!B4(t,t.next)&&0!==ou(t.prev,t,t.next))t=t.next;else{if(tS(t),t=e=t.prev,t===t.next)break;n=!0}}while(n||t!==e);return e}function JM(i,e,t,n,r,s,a){if(!i)return;!a&&s&&function Wie(i,e,t,n){let r=i;do{0===r.z&&(r.z=ak(r.x,r.y,e,t,n)),r.prevZ=r.prev,r.nextZ=r.next,r=r.next}while(r!==i);r.prevZ.nextZ=null,r.prevZ=null,function jie(i){let e,t,n,r,s,a,l,u,d=1;do{for(t=i,i=null,s=null,a=0;t;){for(a++,n=t,l=0,e=0;e0||u>0&&n;)0!==l&&(0===u||!n||t.z<=n.z)?(r=t,t=t.nextZ,l--):(r=n,n=n.nextZ,u--),s?s.nextZ=r:i=r,r.prevZ=s,s=r;t=n}s.nextZ=null,d*=2}while(a>1)}(r)}(i,n,r,s);let u,d,l=i;for(;i.prev!==i.next;)if(u=i.prev,d=i.next,s?Nie(i,n,r,s):Lie(i))e.push(u.i/t|0),e.push(i.i/t|0),e.push(d.i/t|0),tS(i),i=d.next,l=d.next;else if((i=d)===l){a?1===a?JM(i=Uie(_b(i),e,t),e,t,n,r,s,2):2===a&&zie(i,e,t,n,r,s):JM(_b(i),e,t,n,r,s,1);break}}function Lie(i){const e=i.prev,t=i,n=i.next;if(ou(e,t,n)>=0)return!1;const r=e.x,s=t.x,a=n.x,l=e.y,u=t.y,d=n.y,p=rs?r>a?r:a:s>a?s:a,O=l>u?l>d?l:d:u>d?u:d;let Q=n.next;for(;Q!==e;){if(Q.x>=p&&Q.x<=C&&Q.y>=y&&Q.y<=O&&a2(r,l,s,u,a,d,Q.x,Q.y)&&ou(Q.prev,Q,Q.next)>=0)return!1;Q=Q.next}return!0}function Nie(i,e,t,n){const r=i.prev,s=i,a=i.next;if(ou(r,s,a)>=0)return!1;const l=r.x,u=s.x,d=a.x,p=r.y,y=s.y,C=a.y,O=lu?l>d?l:d:u>d?u:d,se=p>y?p>C?p:C:y>C?y:C,ye=ak(O,Q,e,t,n),Le=ak(W,se,e,t,n);let we=i.prevZ,He=i.nextZ;for(;we&&we.z>=ye&&He&&He.z<=Le;){if(we.x>=O&&we.x<=W&&we.y>=Q&&we.y<=se&&we!==r&&we!==a&&a2(l,p,u,y,d,C,we.x,we.y)&&ou(we.prev,we,we.next)>=0||(we=we.prevZ,He.x>=O&&He.x<=W&&He.y>=Q&&He.y<=se&&He!==r&&He!==a&&a2(l,p,u,y,d,C,He.x,He.y)&&ou(He.prev,He,He.next)>=0))return!1;He=He.nextZ}for(;we&&we.z>=ye;){if(we.x>=O&&we.x<=W&&we.y>=Q&&we.y<=se&&we!==r&&we!==a&&a2(l,p,u,y,d,C,we.x,we.y)&&ou(we.prev,we,we.next)>=0)return!1;we=we.prevZ}for(;He&&He.z<=Le;){if(He.x>=O&&He.x<=W&&He.y>=Q&&He.y<=se&&He!==r&&He!==a&&a2(l,p,u,y,d,C,He.x,He.y)&&ou(He.prev,He,He.next)>=0)return!1;He=He.nextZ}return!0}function Uie(i,e,t){let n=i;do{const r=n.prev,s=n.next.next;!B4(r,s)&&d9(r,n,n.next,s)&&eS(r,s)&&eS(s,r)&&(e.push(r.i/t|0),e.push(n.i/t|0),e.push(s.i/t|0),tS(n),tS(n.next),n=i=s),n=n.next}while(n!==i);return _b(n)}function zie(i,e,t,n,r,s){let a=i;do{let l=a.next.next;for(;l!==a.prev;){if(a.i!==l.i&&Xie(a,l)){let u=f9(a,l);return a=_b(a,a.next),u=_b(u,u.next),JM(a,e,t,n,r,s,0),void JM(u,e,t,n,r,s,0)}l=l.next}a=a.next}while(a!==i)}function Vie(i,e){return i.x-e.x}function Gie(i,e){const t=function qie(i,e){let r,t=e,n=-1/0;const s=i.x,a=i.y;do{if(a<=t.y&&a>=t.next.y&&t.next.y!==t.y){const C=t.x+(a-t.y)*(t.next.x-t.x)/(t.next.y-t.y);if(C<=s&&C>n&&(n=C,r=t.x=t.x&&t.x>=u&&s!==t.x&&a2(ar.x||t.x===r.x&&Qie(r,t)))&&(r=t,p=y)),t=t.next}while(t!==l);return r}(i,e);if(!t)return e;const n=f9(t,i);return _b(n,n.next),_b(t,t.next)}function Qie(i,e){return ou(i.prev,i,e.prev)<0&&ou(e.next,i,i.next)<0}function ak(i,e,t,n,r){return(i=1431655765&((i=858993459&((i=252645135&((i=16711935&((i=(i-t)*r|0)|i<<8))|i<<4))|i<<2))|i<<1))|(e=1431655765&((e=858993459&((e=252645135&((e=16711935&((e=(e-n)*r|0)|e<<8))|e<<4))|e<<2))|e<<1))<<1}function $ie(i){let e=i,t=i;do{(e.x=(i-a)*(s-l)&&(i-a)*(n-l)>=(t-a)*(e-l)&&(t-a)*(s-l)>=(r-a)*(n-l)}function Xie(i,e){return i.next.i!==e.i&&i.prev.i!==e.i&&!function Kie(i,e){let t=i;do{if(t.i!==i.i&&t.next.i!==i.i&&t.i!==e.i&&t.next.i!==e.i&&d9(t,t.next,i,e))return!0;t=t.next}while(t!==i);return!1}(i,e)&&(eS(i,e)&&eS(e,i)&&function Yie(i,e){let t=i,n=!1;const r=(i.x+e.x)/2,s=(i.y+e.y)/2;do{t.y>s!=t.next.y>s&&t.next.y!==t.y&&r<(t.next.x-t.x)*(s-t.y)/(t.next.y-t.y)+t.x&&(n=!n),t=t.next}while(t!==i);return n}(i,e)&&(ou(i.prev,i,e.prev)||ou(i,e.prev,e))||B4(i,e)&&ou(i.prev,i,i.next)>0&&ou(e.prev,e,e.next)>0)}function ou(i,e,t){return(e.y-i.y)*(t.x-e.x)-(e.x-i.x)*(t.y-e.y)}function B4(i,e){return i.x===e.x&&i.y===e.y}function d9(i,e,t,n){const r=P4(ou(i,e,t)),s=P4(ou(i,e,n)),a=P4(ou(t,n,i)),l=P4(ou(t,n,e));return!!(r!==s&&a!==l||0===r&&I4(i,t,e)||0===s&&I4(i,n,e)||0===a&&I4(t,i,n)||0===l&&I4(t,e,n))}function I4(i,e,t){return e.x<=Math.max(i.x,t.x)&&e.x>=Math.min(i.x,t.x)&&e.y<=Math.max(i.y,t.y)&&e.y>=Math.min(i.y,t.y)}function P4(i){return i>0?1:i<0?-1:0}function eS(i,e){return ou(i.prev,i,i.next)<0?ou(i,e,i.next)>=0&&ou(i,i.prev,e)>=0:ou(i,e,i.prev)<0||ou(i,i.next,e)<0}function f9(i,e){const t=new lk(i.i,i.x,i.y),n=new lk(e.i,e.x,e.y),r=i.next,s=e.prev;return i.next=e,e.prev=i,t.next=r,r.prev=t,n.next=t,t.prev=n,s.next=n,n.prev=s,n}function p9(i,e,t,n){const r=new lk(i,e,t);return n?(r.next=n.next,r.prev=n,n.next.prev=r,n.next=r):(r.prev=r,r.next=r),r}function tS(i){i.next.prev=i.prev,i.prev.next=i.next,i.prevZ&&(i.prevZ.nextZ=i.nextZ),i.nextZ&&(i.nextZ.prevZ=i.prevZ)}function lk(i,e,t){this.i=i,this.x=e,this.y=t,this.prev=null,this.next=null,this.z=0,this.prevZ=null,this.nextZ=null,this.steiner=!1}class H_{static area(e){const t=e.length;let n=0;for(let r=t-1,s=0;s80*t){l=d=i[0],u=p=i[1];for(let Q=t;Qd&&(d=y),C>p&&(p=C);O=Math.max(d-l,p-u),O=0!==O?32767/O:0}return JM(s,a,t,l,u,O,0),a}(n,r);for(let u=0;u2&&i[e-1].equals(i[0])&&i.pop()}function m9(i,e){for(let t=0;tNumber.EPSILON){const Vi=Math.sqrt(vn),Wr=Math.sqrt(Yl*Yl+El*El),is=_r.x-ko/Vi,Is=_r.y+Go/Vi,ui=((us.x-El/Wr-is)*El-(us.y+Yl/Wr-Is)*Yl)/(Go*El-ko*Yl);uo=is+Go*ui-yr.x,_s=Is+ko*ui-yr.y;const Fs=uo*uo+_s*_s;if(Fs<=2)return new ji(uo,_s);oa=Math.sqrt(Fs/2)}else{let Vi=!1;Go>Number.EPSILON?Yl>Number.EPSILON&&(Vi=!0):Go<-Number.EPSILON?Yl<-Number.EPSILON&&(Vi=!0):Math.sign(ko)===Math.sign(El)&&(Vi=!0),Vi?(uo=-ko,_s=Go,oa=Math.sqrt(vn)):(uo=Go,_s=ko,oa=Math.sqrt(vn/2))}return new ji(uo/oa,_s/oa)}const zi=[];for(let yr=0,_r=Tn.length,us=_r-1,uo=yr+1;yr<_r;yr++,us++,uo++)us===_r&&(us=0),uo===_r&&(uo=0),zi[yr]=si(Tn[yr],Tn[us],Tn[uo]);const Ki=[];let cs,oi=zi.concat();for(let yr=0,_r=Hn.length;yr<_r;yr++){const us=Hn[yr];cs=[];for(let uo=0,_s=us.length,oa=_s-1,Go=uo+1;uo<_s;uo++,oa++,Go++)oa===_s&&(oa=0),Go===_s&&(Go=0),cs[uo]=si(us[uo],us[oa],us[Go]);Ki.push(cs),oi=oi.concat(cs)}for(let yr=0;yr=0;yr--){const _r=yr/se,us=O*Math.cos(_r*Math.PI/2),uo=Q*Math.sin(_r*Math.PI/2)+W;for(let _s=0,oa=Tn.length;_s=0;){const uo=us;let _s=us-1;_s<0&&(_s=yr.length-1);for(let oa=0,Go=p+2*se;oa0)&&O.push(p[ye][Le+1],He,Et),(ye!==n-1||u0!=e>0&&this.version++,this._sheen=e}get clearcoat(){return this._clearcoat}set clearcoat(e){this._clearcoat>0!=e>0&&this.version++,this._clearcoat=e}get iridescence(){return this._iridescence}set iridescence(e){this._iridescence>0!=e>0&&this.version++,this._iridescence=e}get transmission(){return this._transmission}set transmission(e){this._transmission>0!=e>0&&this.version++,this._transmission=e}copy(e){return super.copy(e),this.defines={STANDARD:"",PHYSICAL:""},this.clearcoat=e.clearcoat,this.clearcoatMap=e.clearcoatMap,this.clearcoatRoughness=e.clearcoatRoughness,this.clearcoatRoughnessMap=e.clearcoatRoughnessMap,this.clearcoatNormalMap=e.clearcoatNormalMap,this.clearcoatNormalScale.copy(e.clearcoatNormalScale),this.ior=e.ior,this.iridescence=e.iridescence,this.iridescenceMap=e.iridescenceMap,this.iridescenceIOR=e.iridescenceIOR,this.iridescenceThicknessRange=[...e.iridescenceThicknessRange],this.iridescenceThicknessMap=e.iridescenceThicknessMap,this.sheen=e.sheen,this.sheenColor.copy(e.sheenColor),this.sheenColorMap=e.sheenColorMap,this.sheenRoughness=e.sheenRoughness,this.sheenRoughnessMap=e.sheenRoughnessMap,this.transmission=e.transmission,this.transmissionMap=e.transmissionMap,this.thickness=e.thickness,this.thicknessMap=e.thicknessMap,this.attenuationDistance=e.attenuationDistance,this.attenuationColor.copy(e.attenuationColor),this.specularIntensity=e.specularIntensity,this.specularIntensityMap=e.specularIntensityMap,this.specularColor.copy(e.specularColor),this.specularColorMap=e.specularColorMap,this}}class Lm extends ru{constructor(e){super(),this.isMeshPhongMaterial=!0,this.type="MeshPhongMaterial",this.color=new Lr(16777215),this.specular=new Lr(1118481),this.shininess=30,this.map=null,this.lightMap=null,this.lightMapIntensity=1,this.aoMap=null,this.aoMapIntensity=1,this.emissive=new Lr(0),this.emissiveIntensity=1,this.emissiveMap=null,this.bumpMap=null,this.bumpScale=1,this.normalMap=null,this.normalMapType=0,this.normalScale=new ji(1,1),this.displacementMap=null,this.displacementScale=1,this.displacementBias=0,this.specularMap=null,this.alphaMap=null,this.envMap=null,this.combine=0,this.reflectivity=1,this.refractionRatio=.98,this.wireframe=!1,this.wireframeLinewidth=1,this.wireframeLinecap="round",this.wireframeLinejoin="round",this.flatShading=!1,this.fog=!0,this.setValues(e)}copy(e){return super.copy(e),this.color.copy(e.color),this.specular.copy(e.specular),this.shininess=e.shininess,this.map=e.map,this.lightMap=e.lightMap,this.lightMapIntensity=e.lightMapIntensity,this.aoMap=e.aoMap,this.aoMapIntensity=e.aoMapIntensity,this.emissive.copy(e.emissive),this.emissiveMap=e.emissiveMap,this.emissiveIntensity=e.emissiveIntensity,this.bumpMap=e.bumpMap,this.bumpScale=e.bumpScale,this.normalMap=e.normalMap,this.normalMapType=e.normalMapType,this.normalScale.copy(e.normalScale),this.displacementMap=e.displacementMap,this.displacementScale=e.displacementScale,this.displacementBias=e.displacementBias,this.specularMap=e.specularMap,this.alphaMap=e.alphaMap,this.envMap=e.envMap,this.combine=e.combine,this.reflectivity=e.reflectivity,this.refractionRatio=e.refractionRatio,this.wireframe=e.wireframe,this.wireframeLinewidth=e.wireframeLinewidth,this.wireframeLinecap=e.wireframeLinecap,this.wireframeLinejoin=e.wireframeLinejoin,this.flatShading=e.flatShading,this.fog=e.fog,this}}class y9 extends ru{constructor(e){super(),this.isMeshToonMaterial=!0,this.defines={TOON:""},this.type="MeshToonMaterial",this.color=new Lr(16777215),this.map=null,this.gradientMap=null,this.lightMap=null,this.lightMapIntensity=1,this.aoMap=null,this.aoMapIntensity=1,this.emissive=new Lr(0),this.emissiveIntensity=1,this.emissiveMap=null,this.bumpMap=null,this.bumpScale=1,this.normalMap=null,this.normalMapType=0,this.normalScale=new ji(1,1),this.displacementMap=null,this.displacementScale=1,this.displacementBias=0,this.alphaMap=null,this.wireframe=!1,this.wireframeLinewidth=1,this.wireframeLinecap="round",this.wireframeLinejoin="round",this.fog=!0,this.setValues(e)}copy(e){return super.copy(e),this.color.copy(e.color),this.map=e.map,this.gradientMap=e.gradientMap,this.lightMap=e.lightMap,this.lightMapIntensity=e.lightMapIntensity,this.aoMap=e.aoMap,this.aoMapIntensity=e.aoMapIntensity,this.emissive.copy(e.emissive),this.emissiveMap=e.emissiveMap,this.emissiveIntensity=e.emissiveIntensity,this.bumpMap=e.bumpMap,this.bumpScale=e.bumpScale,this.normalMap=e.normalMap,this.normalMapType=e.normalMapType,this.normalScale.copy(e.normalScale),this.displacementMap=e.displacementMap,this.displacementScale=e.displacementScale,this.displacementBias=e.displacementBias,this.alphaMap=e.alphaMap,this.wireframe=e.wireframe,this.wireframeLinewidth=e.wireframeLinewidth,this.wireframeLinecap=e.wireframeLinecap,this.wireframeLinejoin=e.wireframeLinejoin,this.fog=e.fog,this}}class sre extends ru{constructor(e){super(),this.isMeshNormalMaterial=!0,this.type="MeshNormalMaterial",this.bumpMap=null,this.bumpScale=1,this.normalMap=null,this.normalMapType=0,this.normalScale=new ji(1,1),this.displacementMap=null,this.displacementScale=1,this.displacementBias=0,this.wireframe=!1,this.wireframeLinewidth=1,this.flatShading=!1,this.setValues(e)}copy(e){return super.copy(e),this.bumpMap=e.bumpMap,this.bumpScale=e.bumpScale,this.normalMap=e.normalMap,this.normalMapType=e.normalMapType,this.normalScale.copy(e.normalScale),this.displacementMap=e.displacementMap,this.displacementScale=e.displacementScale,this.displacementBias=e.displacementBias,this.wireframe=e.wireframe,this.wireframeLinewidth=e.wireframeLinewidth,this.flatShading=e.flatShading,this}}class ore extends ru{constructor(e){super(),this.isMeshLambertMaterial=!0,this.type="MeshLambertMaterial",this.color=new Lr(16777215),this.map=null,this.lightMap=null,this.lightMapIntensity=1,this.aoMap=null,this.aoMapIntensity=1,this.emissive=new Lr(0),this.emissiveIntensity=1,this.emissiveMap=null,this.bumpMap=null,this.bumpScale=1,this.normalMap=null,this.normalMapType=0,this.normalScale=new ji(1,1),this.displacementMap=null,this.displacementScale=1,this.displacementBias=0,this.specularMap=null,this.alphaMap=null,this.envMap=null,this.combine=0,this.reflectivity=1,this.refractionRatio=.98,this.wireframe=!1,this.wireframeLinewidth=1,this.wireframeLinecap="round",this.wireframeLinejoin="round",this.flatShading=!1,this.fog=!0,this.setValues(e)}copy(e){return super.copy(e),this.color.copy(e.color),this.map=e.map,this.lightMap=e.lightMap,this.lightMapIntensity=e.lightMapIntensity,this.aoMap=e.aoMap,this.aoMapIntensity=e.aoMapIntensity,this.emissive.copy(e.emissive),this.emissiveMap=e.emissiveMap,this.emissiveIntensity=e.emissiveIntensity,this.bumpMap=e.bumpMap,this.bumpScale=e.bumpScale,this.normalMap=e.normalMap,this.normalMapType=e.normalMapType,this.normalScale.copy(e.normalScale),this.displacementMap=e.displacementMap,this.displacementScale=e.displacementScale,this.displacementBias=e.displacementBias,this.specularMap=e.specularMap,this.alphaMap=e.alphaMap,this.envMap=e.envMap,this.combine=e.combine,this.reflectivity=e.reflectivity,this.refractionRatio=e.refractionRatio,this.wireframe=e.wireframe,this.wireframeLinewidth=e.wireframeLinewidth,this.wireframeLinecap=e.wireframeLinecap,this.wireframeLinejoin=e.wireframeLinejoin,this.flatShading=e.flatShading,this.fog=e.fog,this}}class are extends ru{constructor(e){super(),this.isMeshMatcapMaterial=!0,this.defines={MATCAP:""},this.type="MeshMatcapMaterial",this.color=new Lr(16777215),this.matcap=null,this.map=null,this.bumpMap=null,this.bumpScale=1,this.normalMap=null,this.normalMapType=0,this.normalScale=new ji(1,1),this.displacementMap=null,this.displacementScale=1,this.displacementBias=0,this.alphaMap=null,this.flatShading=!1,this.fog=!0,this.setValues(e)}copy(e){return super.copy(e),this.defines={MATCAP:""},this.color.copy(e.color),this.matcap=e.matcap,this.map=e.map,this.bumpMap=e.bumpMap,this.bumpScale=e.bumpScale,this.normalMap=e.normalMap,this.normalMapType=e.normalMapType,this.normalScale.copy(e.normalScale),this.displacementMap=e.displacementMap,this.displacementScale=e.displacementScale,this.displacementBias=e.displacementBias,this.alphaMap=e.alphaMap,this.flatShading=e.flatShading,this.fog=e.fog,this}}class R4 extends su{constructor(e){super(),this.isLineDashedMaterial=!0,this.type="LineDashedMaterial",this.scale=1,this.dashSize=3,this.gapSize=1,this.setValues(e)}copy(e){return super.copy(e),this.scale=e.scale,this.dashSize=e.dashSize,this.gapSize=e.gapSize,this}}function zA(i,e,t){return Ak(i)?new i.constructor(i.subarray(e,void 0!==t?t:i.length)):i.slice(e,t)}function vb(i,e,t){return!i||!t&&i.constructor===e?i:"number"==typeof e.BYTES_PER_ELEMENT?new e(i):Array.prototype.slice.call(i)}function Ak(i){return ArrayBuffer.isView(i)&&!(i instanceof DataView)}function v9(i){const t=i.length,n=new Array(t);for(let r=0;r!==t;++r)n[r]=r;return n.sort(function e(r,s){return i[r]-i[s]}),n}function mk(i,e,t){const n=i.length,r=new i.constructor(n);for(let s=0,a=0;a!==n;++s){const l=t[s]*e;for(let u=0;u!==e;++u)r[a++]=i[l+u]}return r}function gk(i,e,t,n){let r=1,s=i[0];for(;void 0!==s&&void 0===s[n];)s=i[r++];if(void 0===s)return;let a=s[n];if(void 0!==a)if(Array.isArray(a))do{a=s[n],void 0!==a&&(e.push(s.time),t.push.apply(t,a)),s=i[r++]}while(void 0!==s);else if(void 0!==a.toArray)do{a=s[n],void 0!==a&&(e.push(s.time),a.toArray(t,t.length)),s=i[r++]}while(void 0!==s);else do{a=s[n],void 0!==a&&(e.push(s.time),t.push(a)),s=i[r++]}while(void 0!==s)}class nS{constructor(e,t,n,r){this.parameterPositions=e,this._cachedIndex=0,this.resultBuffer=void 0!==r?r:new t.constructor(n),this.sampleValues=t,this.valueSize=n,this.settings=null,this.DefaultSettings_={}}evaluate(e){const t=this.parameterPositions;let n=this._cachedIndex,r=t[n],s=t[n-1];e:{t:{let a;n:{i:if(!(e=s)break e;{const l=t[1];e=s)break t}a=n,n=0}}for(;n>>1;et;)--a;if(++a,0!==s||a!==r){s>=a&&(a=Math.max(a,1),s=a-1);const l=this.getValueSize();this.times=zA(n,s,a),this.values=zA(this.values,s*l,a*l)}return this}validate(){let e=!0;const t=this.getValueSize();t-Math.floor(t)!=0&&(console.error("THREE.KeyframeTrack: Invalid value size in track.",this),e=!1);const n=this.times,r=this.values,s=n.length;0===s&&(console.error("THREE.KeyframeTrack: Track is empty.",this),e=!1);let a=null;for(let l=0;l!==s;l++){const u=n[l];if("number"==typeof u&&isNaN(u)){console.error("THREE.KeyframeTrack: Time is not a valid number.",this,l,u),e=!1;break}if(null!==a&&a>u){console.error("THREE.KeyframeTrack: Out of order keys.",this,l,u,a),e=!1;break}a=u}if(void 0!==r&&Ak(r))for(let l=0,u=r.length;l!==u;++l){const d=r[l];if(isNaN(d)){console.error("THREE.KeyframeTrack: Value is not a valid number.",this,l,d),e=!1;break}}return e}optimize(){const e=zA(this.times),t=zA(this.values),n=this.getValueSize(),r=2302===this.getInterpolation(),s=e.length-1;let a=1;for(let l=1;l0){e[a]=e[s];for(let l=s*n,u=a*n,d=0;d!==n;++d)t[u+d]=t[l+d];++a}return a!==e.length?(this.times=zA(e,0,a),this.values=zA(t,0,a*n)):(this.times=e,this.values=t),this}clone(){const e=zA(this.times,0),t=zA(this.values,0),r=new(0,this.constructor)(this.name,e,t);return r.createInterpolant=this.createInterpolant,r}}h0.prototype.TimeBufferType=Float32Array,h0.prototype.ValueBufferType=Float32Array,h0.prototype.DefaultInterpolation=ib;class l2 extends h0{}l2.prototype.ValueTypeName="bool",l2.prototype.ValueBufferType=Array,l2.prototype.DefaultInterpolation=Pw,l2.prototype.InterpolantFactoryMethodLinear=void 0,l2.prototype.InterpolantFactoryMethodSmooth=void 0;class x9 extends h0{}x9.prototype.ValueTypeName="color";class iS extends h0{}iS.prototype.ValueTypeName="number";class dre extends nS{constructor(e,t,n,r){super(e,t,n,r)}interpolate_(e,t,n,r){const s=this.resultBuffer,a=this.sampleValues,l=this.valueSize,u=(n-t)/(r-t);let d=e*l;for(let p=d+l;d!==p;d+=4)Vc.slerpFlat(s,0,a,d-l,a,d,u);return s}}class bb extends h0{InterpolantFactoryMethodLinear(e){return new dre(this.times,this.values,this.getValueSize(),e)}}bb.prototype.ValueTypeName="quaternion",bb.prototype.DefaultInterpolation=ib,bb.prototype.InterpolantFactoryMethodSmooth=void 0;class c2 extends h0{}c2.prototype.ValueTypeName="string",c2.prototype.ValueBufferType=Array,c2.prototype.DefaultInterpolation=Pw,c2.prototype.InterpolantFactoryMethodLinear=void 0,c2.prototype.InterpolantFactoryMethodSmooth=void 0;class rS extends h0{}rS.prototype.ValueTypeName="vector";class sS{constructor(e,t=-1,n,r=2500){this.name=e,this.tracks=n,this.duration=t,this.blendMode=r,this.uuid=Hp(),this.duration<0&&this.resetDuration()}static parse(e){const t=[],n=e.tracks,r=1/(e.fps||1);for(let a=0,l=n.length;a!==l;++a)t.push(pre(n[a]).scale(r));const s=new this(e.name,e.duration,t,e.blendMode);return s.uuid=e.uuid,s}static toJSON(e){const t=[],n=e.tracks,r={name:e.name,duration:e.duration,tracks:t,uuid:e.uuid,blendMode:e.blendMode};for(let s=0,a=n.length;s!==a;++s)t.push(h0.toJSON(n[s]));return r}static CreateFromMorphTargetSequence(e,t,n,r){const s=t.length,a=[];for(let l=0;l1){const y=p[1];let C=r[y];C||(r[y]=C=[]),C.push(d)}}const a=[];for(const l in r)a.push(this.CreateFromMorphTargetSequence(l,r[l],t,n));return a}static parseAnimation(e,t){if(!e)return console.error("THREE.AnimationClip: No animation in JSONLoader data."),null;const n=function(y,C,O,Q,W){if(0!==O.length){const se=[],ye=[];gk(O,se,ye,Q),0!==se.length&&W.push(new y(C,se,ye))}},r=[],s=e.name||"default",a=e.fps||30,l=e.blendMode;let u=e.length||-1;const d=e.hierarchy||[];for(let y=0;y{t&&t(s),this.manager.itemEnd(e)},0),s;if(void 0!==V_[e])return void V_[e].push({onLoad:t,onProgress:n,onError:r});V_[e]=[],V_[e].push({onLoad:t,onProgress:n,onError:r});const a=new Request(e,{headers:new Headers(this.requestHeader),credentials:this.withCredentials?"include":"same-origin"}),l=this.mimeType,u=this.responseType;fetch(a).then(d=>{if(200===d.status||0===d.status){if(0===d.status&&console.warn("THREE.FileLoader: HTTP Status 0 received."),typeof ReadableStream>"u"||void 0===d.body||void 0===d.body.getReader)return d;const p=V_[e],y=d.body.getReader(),C=d.headers.get("Content-Length")||d.headers.get("X-File-Size"),O=C?parseInt(C):0,Q=0!==O;let W=0;const se=new ReadableStream({start(ye){!function Le(){y.read().then(({done:we,value:He})=>{if(we)ye.close();else{W+=He.byteLength;const gt=new ProgressEvent("progress",{lengthComputable:Q,loaded:W,total:O});for(let Et=0,Yt=p.length;Et{switch(u){case"arraybuffer":return d.arrayBuffer();case"blob":return d.blob();case"document":return d.text().then(p=>(new DOMParser).parseFromString(p,l));case"json":return d.json();default:if(void 0===l)return d.text();{const y=/charset="?([^;"\s]*)"?/i.exec(l),C=y&&y[1]?y[1].toLowerCase():void 0,O=new TextDecoder(C);return d.arrayBuffer().then(Q=>O.decode(Q))}}}).then(d=>{u2.add(e,d);const p=V_[e];delete V_[e];for(let y=0,C=p.length;y{const p=V_[e];if(void 0===p)throw this.manager.itemError(e),d;delete V_[e];for(let y=0,C=p.length;y{this.manager.itemEnd(e)}),this.manager.itemStart(e)}setResponseType(e){return this.responseType=e,this}setMimeType(e){return this.mimeType=e,this}}class L4 extends d0{constructor(e){super(e)}load(e,t,n,r){void 0!==this.path&&(e=this.path+e),e=this.manager.resolveURL(e);const s=this,a=u2.get(e);if(void 0!==a)return s.manager.itemStart(e),setTimeout(function(){t&&t(a),s.manager.itemEnd(e)},0),a;const l=RM("img");function u(){p(),u2.add(e,this),t&&t(this),s.manager.itemEnd(e)}function d(y){p(),r&&r(y),s.manager.itemError(e),s.manager.itemEnd(e)}function p(){l.removeEventListener("load",u,!1),l.removeEventListener("error",d,!1)}return l.addEventListener("load",u,!1),l.addEventListener("error",d,!1),"data:"!==e.slice(0,5)&&void 0!==this.crossOrigin&&(l.crossOrigin=this.crossOrigin),s.manager.itemStart(e),l.src=e,l}}class gre extends d0{constructor(e){super(e)}load(e,t,n,r){const s=new RA,a=new L4(this.manager);return a.setCrossOrigin(this.crossOrigin),a.setPath(this.path),a.load(e,function(l){s.image=l,s.needsUpdate=!0,void 0!==t&&t(s)},n,r),s}}class xb extends Bc{constructor(e,t=1){super(),this.isLight=!0,this.type="Light",this.color=new Lr(e),this.intensity=t}dispose(){}copy(e,t){return super.copy(e,t),this.color.copy(e.color),this.intensity=e.intensity,this}toJSON(e){const t=super.toJSON(e);return t.object.color=this.color.getHex(),t.object.intensity=this.intensity,void 0!==this.groundColor&&(t.object.groundColor=this.groundColor.getHex()),void 0!==this.distance&&(t.object.distance=this.distance),void 0!==this.angle&&(t.object.angle=this.angle),void 0!==this.decay&&(t.object.decay=this.decay),void 0!==this.penumbra&&(t.object.penumbra=this.penumbra),void 0!==this.shadow&&(t.object.shadow=this.shadow.toJSON()),t}}class _re extends xb{constructor(e,t,n){super(e,n),this.isHemisphereLight=!0,this.type="HemisphereLight",this.position.copy(Bc.DEFAULT_UP),this.updateMatrix(),this.groundColor=new Lr(t)}copy(e,t){return super.copy(e,t),this.groundColor.copy(e.groundColor),this}}const _k=new Jo,C9=new Nt,M9=new Nt;class yk{constructor(e){this.camera=e,this.bias=0,this.normalBias=0,this.radius=1,this.blurSamples=8,this.mapSize=new ji(512,512),this.map=null,this.mapPass=null,this.matrix=new Jo,this.autoUpdate=!0,this.needsUpdate=!1,this._frustum=new IP,this._frameExtents=new ji(1,1),this._viewportCount=1,this._viewports=[new Xl(0,0,1,1)]}getViewportCount(){return this._viewportCount}getFrustum(){return this._frustum}updateMatrices(e){const t=this.camera,n=this.matrix;C9.setFromMatrixPosition(e.matrixWorld),t.position.copy(C9),M9.setFromMatrixPosition(e.target.matrixWorld),t.lookAt(M9),t.updateMatrixWorld(),_k.multiplyMatrices(t.projectionMatrix,t.matrixWorldInverse),this._frustum.setFromProjectionMatrix(_k),n.set(.5,0,0,.5,0,.5,0,.5,0,0,.5,.5,0,0,0,1),n.multiply(_k)}getViewport(e){return this._viewports[e]}getFrameExtents(){return this._frameExtents}dispose(){this.map&&this.map.dispose(),this.mapPass&&this.mapPass.dispose()}copy(e){return this.camera=e.camera.clone(),this.bias=e.bias,this.radius=e.radius,this.mapSize.copy(e.mapSize),this}clone(){return(new this.constructor).copy(this)}toJSON(){const e={};return 0!==this.bias&&(e.bias=this.bias),0!==this.normalBias&&(e.normalBias=this.normalBias),1!==this.radius&&(e.radius=this.radius),(512!==this.mapSize.x||512!==this.mapSize.y)&&(e.mapSize=this.mapSize.toArray()),e.camera=this.camera.toJSON(!1).object,delete e.camera.matrix,e}}class yre extends yk{constructor(){super(new jh(50,1,.5,500)),this.isSpotLightShadow=!0,this.focus=1}updateMatrices(e){const t=this.camera,n=2*FM*e.angle*this.focus,r=this.mapSize.width/this.mapSize.height,s=e.distance||t.far;(n!==t.fov||r!==t.aspect||s!==t.far)&&(t.fov=n,t.aspect=r,t.far=s,t.updateProjectionMatrix()),super.updateMatrices(e)}copy(e){return super.copy(e),this.focus=e.focus,this}}class S9 extends xb{constructor(e,t,n=0,r=Math.PI/3,s=0,a=2){super(e,t),this.isSpotLight=!0,this.type="SpotLight",this.position.copy(Bc.DEFAULT_UP),this.updateMatrix(),this.target=new Bc,this.distance=n,this.angle=r,this.penumbra=s,this.decay=a,this.map=null,this.shadow=new yre}get power(){return this.intensity*Math.PI}set power(e){this.intensity=e/Math.PI}dispose(){this.shadow.dispose()}copy(e,t){return super.copy(e,t),this.distance=e.distance,this.angle=e.angle,this.penumbra=e.penumbra,this.decay=e.decay,this.target=e.target.clone(),this.shadow=e.shadow.clone(),this}}const T9=new Jo,oS=new Nt,vk=new Nt;class vre extends yk{constructor(){super(new jh(90,1,.5,500)),this.isPointLightShadow=!0,this._frameExtents=new ji(4,2),this._viewportCount=6,this._viewports=[new Xl(2,1,1,1),new Xl(0,1,1,1),new Xl(3,1,1,1),new Xl(1,1,1,1),new Xl(3,0,1,1),new Xl(1,0,1,1)],this._cubeDirections=[new Nt(1,0,0),new Nt(-1,0,0),new Nt(0,0,1),new Nt(0,0,-1),new Nt(0,1,0),new Nt(0,-1,0)],this._cubeUps=[new Nt(0,1,0),new Nt(0,1,0),new Nt(0,1,0),new Nt(0,1,0),new Nt(0,0,1),new Nt(0,0,-1)]}updateMatrices(e,t=0){const n=this.camera,r=this.matrix,s=e.distance||n.far;s!==n.far&&(n.far=s,n.updateProjectionMatrix()),oS.setFromMatrixPosition(e.matrixWorld),n.position.copy(oS),vk.copy(n.position),vk.add(this._cubeDirections[t]),n.up.copy(this._cubeUps[t]),n.lookAt(vk),n.updateMatrixWorld(),r.makeTranslation(-oS.x,-oS.y,-oS.z),T9.multiplyMatrices(n.projectionMatrix,n.matrixWorldInverse),this._frustum.setFromProjectionMatrix(T9)}}class E9 extends xb{constructor(e,t,n=0,r=2){super(e,t),this.isPointLight=!0,this.type="PointLight",this.distance=n,this.decay=r,this.shadow=new vre}get power(){return 4*this.intensity*Math.PI}set power(e){this.intensity=e/(4*Math.PI)}dispose(){this.shadow.dispose()}copy(e,t){return super.copy(e,t),this.distance=e.distance,this.decay=e.decay,this.shadow=e.shadow.clone(),this}}class bre extends yk{constructor(){super(new Kw(-5,5,5,-5,.5,500)),this.isDirectionalLightShadow=!0}}class h2 extends xb{constructor(e,t){super(e,t),this.isDirectionalLight=!0,this.type="DirectionalLight",this.position.copy(Bc.DEFAULT_UP),this.updateMatrix(),this.target=new Bc,this.shadow=new bre}dispose(){this.shadow.dispose()}copy(e){return super.copy(e),this.target=e.target.clone(),this.shadow=e.shadow.clone(),this}}class N4 extends xb{constructor(e,t){super(e,t),this.isAmbientLight=!0,this.type="AmbientLight"}}class xre extends xb{constructor(e,t,n=10,r=10){super(e,t),this.isRectAreaLight=!0,this.type="RectAreaLight",this.width=n,this.height=r}get power(){return this.intensity*this.width*this.height*Math.PI}set power(e){this.intensity=e/(this.width*this.height*Math.PI)}copy(e){return super.copy(e),this.width=e.width,this.height=e.height,this}toJSON(e){const t=super.toJSON(e);return t.object.width=this.width,t.object.height=this.height,t}}class wre{constructor(){this.isSphericalHarmonics3=!0,this.coefficients=[];for(let e=0;e<9;e++)this.coefficients.push(new Nt)}set(e){for(let t=0;t<9;t++)this.coefficients[t].copy(e[t]);return this}zero(){for(let e=0;e<9;e++)this.coefficients[e].set(0,0,0);return this}getAt(e,t){const n=e.x,r=e.y,s=e.z,a=this.coefficients;return t.copy(a[0]).multiplyScalar(.282095),t.addScaledVector(a[1],.488603*r),t.addScaledVector(a[2],.488603*s),t.addScaledVector(a[3],.488603*n),t.addScaledVector(a[4],n*r*1.092548),t.addScaledVector(a[5],r*s*1.092548),t.addScaledVector(a[6],.315392*(3*s*s-1)),t.addScaledVector(a[7],n*s*1.092548),t.addScaledVector(a[8],.546274*(n*n-r*r)),t}getIrradianceAt(e,t){const n=e.x,r=e.y,s=e.z,a=this.coefficients;return t.copy(a[0]).multiplyScalar(.886227),t.addScaledVector(a[1],1.023328*r),t.addScaledVector(a[2],1.023328*s),t.addScaledVector(a[3],1.023328*n),t.addScaledVector(a[4],.858086*n*r),t.addScaledVector(a[5],.858086*r*s),t.addScaledVector(a[6],.743125*s*s-.247708),t.addScaledVector(a[7],.858086*n*s),t.addScaledVector(a[8],.429043*(n*n-r*r)),t}add(e){for(let t=0;t<9;t++)this.coefficients[t].add(e.coefficients[t]);return this}addScaledSH(e,t){for(let n=0;n<9;n++)this.coefficients[n].addScaledVector(e.coefficients[n],t);return this}scale(e){for(let t=0;t<9;t++)this.coefficients[t].multiplyScalar(e);return this}lerp(e,t){for(let n=0;n<9;n++)this.coefficients[n].lerp(e.coefficients[n],t);return this}equals(e){for(let t=0;t<9;t++)if(!this.coefficients[t].equals(e.coefficients[t]))return!1;return!0}copy(e){return this.set(e.coefficients)}clone(){return(new this.constructor).copy(this)}fromArray(e,t=0){const n=this.coefficients;for(let r=0;r<9;r++)n[r].fromArray(e,t+3*r);return this}toArray(e=[],t=0){const n=this.coefficients;for(let r=0;r<9;r++)n[r].toArray(e,t+3*r);return e}static getBasisAt(e,t){const n=e.x,r=e.y,s=e.z;t[0]=.282095,t[1]=.488603*r,t[2]=.488603*s,t[3]=.488603*n,t[4]=1.092548*n*r,t[5]=1.092548*r*s,t[6]=.315392*(3*s*s-1),t[7]=1.092548*n*s,t[8]=.546274*(n*n-r*r)}}class Cre extends xb{constructor(e=new wre,t=1){super(void 0,t),this.isLightProbe=!0,this.sh=e}copy(e){return super.copy(e),this.sh.copy(e.sh),this}fromJSON(e){return this.intensity=e.intensity,this.sh.fromArray(e.sh),this}toJSON(e){const t=super.toJSON(e);return t.object.sh=this.sh.toArray(),t}}class bk extends d0{constructor(e){super(e),this.textures={}}load(e,t,n,r){const s=this,a=new qp(s.manager);a.setPath(s.path),a.setRequestHeader(s.requestHeader),a.setWithCredentials(s.withCredentials),a.load(e,function(l){try{t(s.parse(JSON.parse(l)))}catch(u){r?r(u):console.error(u),s.manager.itemError(e)}},n,r)}parse(e){const t=this.textures;function n(s){return void 0===t[s]&&console.warn("THREE.MaterialLoader: Undefined texture",s),t[s]}const r=bk.createMaterialFromType(e.type);if(void 0!==e.uuid&&(r.uuid=e.uuid),void 0!==e.name&&(r.name=e.name),void 0!==e.color&&void 0!==r.color&&r.color.setHex(e.color),void 0!==e.roughness&&(r.roughness=e.roughness),void 0!==e.metalness&&(r.metalness=e.metalness),void 0!==e.sheen&&(r.sheen=e.sheen),void 0!==e.sheenColor&&(r.sheenColor=(new Lr).setHex(e.sheenColor)),void 0!==e.sheenRoughness&&(r.sheenRoughness=e.sheenRoughness),void 0!==e.emissive&&void 0!==r.emissive&&r.emissive.setHex(e.emissive),void 0!==e.specular&&void 0!==r.specular&&r.specular.setHex(e.specular),void 0!==e.specularIntensity&&(r.specularIntensity=e.specularIntensity),void 0!==e.specularColor&&void 0!==r.specularColor&&r.specularColor.setHex(e.specularColor),void 0!==e.shininess&&(r.shininess=e.shininess),void 0!==e.clearcoat&&(r.clearcoat=e.clearcoat),void 0!==e.clearcoatRoughness&&(r.clearcoatRoughness=e.clearcoatRoughness),void 0!==e.iridescence&&(r.iridescence=e.iridescence),void 0!==e.iridescenceIOR&&(r.iridescenceIOR=e.iridescenceIOR),void 0!==e.iridescenceThicknessRange&&(r.iridescenceThicknessRange=e.iridescenceThicknessRange),void 0!==e.transmission&&(r.transmission=e.transmission),void 0!==e.thickness&&(r.thickness=e.thickness),void 0!==e.attenuationDistance&&(r.attenuationDistance=e.attenuationDistance),void 0!==e.attenuationColor&&void 0!==r.attenuationColor&&r.attenuationColor.setHex(e.attenuationColor),void 0!==e.fog&&(r.fog=e.fog),void 0!==e.flatShading&&(r.flatShading=e.flatShading),void 0!==e.blending&&(r.blending=e.blending),void 0!==e.combine&&(r.combine=e.combine),void 0!==e.side&&(r.side=e.side),void 0!==e.shadowSide&&(r.shadowSide=e.shadowSide),void 0!==e.opacity&&(r.opacity=e.opacity),void 0!==e.transparent&&(r.transparent=e.transparent),void 0!==e.alphaTest&&(r.alphaTest=e.alphaTest),void 0!==e.depthTest&&(r.depthTest=e.depthTest),void 0!==e.depthWrite&&(r.depthWrite=e.depthWrite),void 0!==e.colorWrite&&(r.colorWrite=e.colorWrite),void 0!==e.stencilWrite&&(r.stencilWrite=e.stencilWrite),void 0!==e.stencilWriteMask&&(r.stencilWriteMask=e.stencilWriteMask),void 0!==e.stencilFunc&&(r.stencilFunc=e.stencilFunc),void 0!==e.stencilRef&&(r.stencilRef=e.stencilRef),void 0!==e.stencilFuncMask&&(r.stencilFuncMask=e.stencilFuncMask),void 0!==e.stencilFail&&(r.stencilFail=e.stencilFail),void 0!==e.stencilZFail&&(r.stencilZFail=e.stencilZFail),void 0!==e.stencilZPass&&(r.stencilZPass=e.stencilZPass),void 0!==e.wireframe&&(r.wireframe=e.wireframe),void 0!==e.wireframeLinewidth&&(r.wireframeLinewidth=e.wireframeLinewidth),void 0!==e.wireframeLinecap&&(r.wireframeLinecap=e.wireframeLinecap),void 0!==e.wireframeLinejoin&&(r.wireframeLinejoin=e.wireframeLinejoin),void 0!==e.rotation&&(r.rotation=e.rotation),1!==e.linewidth&&(r.linewidth=e.linewidth),void 0!==e.dashSize&&(r.dashSize=e.dashSize),void 0!==e.gapSize&&(r.gapSize=e.gapSize),void 0!==e.scale&&(r.scale=e.scale),void 0!==e.polygonOffset&&(r.polygonOffset=e.polygonOffset),void 0!==e.polygonOffsetFactor&&(r.polygonOffsetFactor=e.polygonOffsetFactor),void 0!==e.polygonOffsetUnits&&(r.polygonOffsetUnits=e.polygonOffsetUnits),void 0!==e.dithering&&(r.dithering=e.dithering),void 0!==e.alphaToCoverage&&(r.alphaToCoverage=e.alphaToCoverage),void 0!==e.premultipliedAlpha&&(r.premultipliedAlpha=e.premultipliedAlpha),void 0!==e.forceSinglePass&&(r.forceSinglePass=e.forceSinglePass),void 0!==e.visible&&(r.visible=e.visible),void 0!==e.toneMapped&&(r.toneMapped=e.toneMapped),void 0!==e.userData&&(r.userData=e.userData),void 0!==e.vertexColors&&(r.vertexColors="number"==typeof e.vertexColors?e.vertexColors>0:e.vertexColors),void 0!==e.uniforms)for(const s in e.uniforms){const a=e.uniforms[s];switch(r.uniforms[s]={},a.type){case"t":r.uniforms[s].value=n(a.value);break;case"c":r.uniforms[s].value=(new Lr).setHex(a.value);break;case"v2":r.uniforms[s].value=(new ji).fromArray(a.value);break;case"v3":r.uniforms[s].value=(new Nt).fromArray(a.value);break;case"v4":r.uniforms[s].value=(new Xl).fromArray(a.value);break;case"m3":r.uniforms[s].value=(new Df).fromArray(a.value);break;case"m4":r.uniforms[s].value=(new Jo).fromArray(a.value);break;default:r.uniforms[s].value=a.value}}if(void 0!==e.defines&&(r.defines=e.defines),void 0!==e.vertexShader&&(r.vertexShader=e.vertexShader),void 0!==e.fragmentShader&&(r.fragmentShader=e.fragmentShader),void 0!==e.glslVersion&&(r.glslVersion=e.glslVersion),void 0!==e.extensions)for(const s in e.extensions)r.extensions[s]=e.extensions[s];if(void 0!==e.size&&(r.size=e.size),void 0!==e.sizeAttenuation&&(r.sizeAttenuation=e.sizeAttenuation),void 0!==e.map&&(r.map=n(e.map)),void 0!==e.matcap&&(r.matcap=n(e.matcap)),void 0!==e.alphaMap&&(r.alphaMap=n(e.alphaMap)),void 0!==e.bumpMap&&(r.bumpMap=n(e.bumpMap)),void 0!==e.bumpScale&&(r.bumpScale=e.bumpScale),void 0!==e.normalMap&&(r.normalMap=n(e.normalMap)),void 0!==e.normalMapType&&(r.normalMapType=e.normalMapType),void 0!==e.normalScale){let s=e.normalScale;!1===Array.isArray(s)&&(s=[s,s]),r.normalScale=(new ji).fromArray(s)}return void 0!==e.displacementMap&&(r.displacementMap=n(e.displacementMap)),void 0!==e.displacementScale&&(r.displacementScale=e.displacementScale),void 0!==e.displacementBias&&(r.displacementBias=e.displacementBias),void 0!==e.roughnessMap&&(r.roughnessMap=n(e.roughnessMap)),void 0!==e.metalnessMap&&(r.metalnessMap=n(e.metalnessMap)),void 0!==e.emissiveMap&&(r.emissiveMap=n(e.emissiveMap)),void 0!==e.emissiveIntensity&&(r.emissiveIntensity=e.emissiveIntensity),void 0!==e.specularMap&&(r.specularMap=n(e.specularMap)),void 0!==e.specularIntensityMap&&(r.specularIntensityMap=n(e.specularIntensityMap)),void 0!==e.specularColorMap&&(r.specularColorMap=n(e.specularColorMap)),void 0!==e.envMap&&(r.envMap=n(e.envMap)),void 0!==e.envMapIntensity&&(r.envMapIntensity=e.envMapIntensity),void 0!==e.reflectivity&&(r.reflectivity=e.reflectivity),void 0!==e.refractionRatio&&(r.refractionRatio=e.refractionRatio),void 0!==e.lightMap&&(r.lightMap=n(e.lightMap)),void 0!==e.lightMapIntensity&&(r.lightMapIntensity=e.lightMapIntensity),void 0!==e.aoMap&&(r.aoMap=n(e.aoMap)),void 0!==e.aoMapIntensity&&(r.aoMapIntensity=e.aoMapIntensity),void 0!==e.gradientMap&&(r.gradientMap=n(e.gradientMap)),void 0!==e.clearcoatMap&&(r.clearcoatMap=n(e.clearcoatMap)),void 0!==e.clearcoatRoughnessMap&&(r.clearcoatRoughnessMap=n(e.clearcoatRoughnessMap)),void 0!==e.clearcoatNormalMap&&(r.clearcoatNormalMap=n(e.clearcoatNormalMap)),void 0!==e.clearcoatNormalScale&&(r.clearcoatNormalScale=(new ji).fromArray(e.clearcoatNormalScale)),void 0!==e.iridescenceMap&&(r.iridescenceMap=n(e.iridescenceMap)),void 0!==e.iridescenceThicknessMap&&(r.iridescenceThicknessMap=n(e.iridescenceThicknessMap)),void 0!==e.transmissionMap&&(r.transmissionMap=n(e.transmissionMap)),void 0!==e.thicknessMap&&(r.thicknessMap=n(e.thicknessMap)),void 0!==e.sheenColorMap&&(r.sheenColorMap=n(e.sheenColorMap)),void 0!==e.sheenRoughnessMap&&(r.sheenRoughnessMap=n(e.sheenRoughnessMap)),r}setTextures(e){return this.textures=e,this}static createMaterialFromType(e){return new{ShadowMaterial:ire,SpriteMaterial:NN,RawShaderMaterial:rre,ShaderMaterial:Td,PointsMaterial:z_,MeshPhysicalMaterial:py,MeshStandardMaterial:O4,MeshPhongMaterial:Lm,MeshToonMaterial:y9,MeshNormalMaterial:sre,MeshLambertMaterial:ore,MeshDepthMaterial:LP,MeshDistanceMaterial:RN,MeshBasicMaterial:xh,MeshMatcapMaterial:are,LineDashedMaterial:R4,LineBasicMaterial:su,Material:ru}[e]}}class aS{static decodeText(e){if(typeof TextDecoder<"u")return(new TextDecoder).decode(e);let t="";for(let n=0,r=e.length;n0){const u=new w9(t);s=new L4(u),s.setCrossOrigin(this.crossOrigin);for(let d=0,p=e.length;d0){s=new L4(t.manager),s.setCrossOrigin(t.crossOrigin);for(let u=0,d=e.length;u"u"&&console.warn("THREE.ImageBitmapLoader: createImageBitmap() not supported."),typeof fetch>"u"&&console.warn("THREE.ImageBitmapLoader: fetch() not supported."),this.options={premultiplyAlpha:"none"}}setOptions(e){return this.options=e,this}load(e,t,n,r){void 0===e&&(e=""),void 0!==this.path&&(e=this.path+e),e=this.manager.resolveURL(e);const s=this,a=u2.get(e);if(void 0!==a)return s.manager.itemStart(e),setTimeout(function(){t&&t(a),s.manager.itemEnd(e)},0),a;const l={};l.credentials="anonymous"===this.crossOrigin?"same-origin":"include",l.headers=this.requestHeader,fetch(e,l).then(function(u){return u.blob()}).then(function(u){return createImageBitmap(u,Object.assign(s.options,{colorSpaceConversion:"none"}))}).then(function(u){u2.add(e,u),t&&t(u),s.manager.itemEnd(e)}).catch(function(u){r&&r(u),s.manager.itemError(e),s.manager.itemEnd(e)}),s.manager.itemStart(e)}}class F9{constructor(e=!0){this.autoStart=e,this.startTime=0,this.oldTime=0,this.elapsedTime=0,this.running=!1}start(){this.startTime=O9(),this.oldTime=this.startTime,this.elapsedTime=0,this.running=!0}stop(){this.getElapsedTime(),this.running=!1,this.autoStart=!1}getElapsedTime(){return this.getDelta(),this.elapsedTime}getDelta(){let e=0;if(this.autoStart&&!this.running)return this.start(),0;if(this.running){const t=O9();e=(t-this.oldTime)/1e3,this.oldTime=t,this.elapsedTime+=e}return e}}function O9(){return(typeof performance>"u"?Date:performance).now()}const xk="\\[\\]\\.:\\/",kre=new RegExp("["+xk+"]","g"),wk="[^"+xk+"]",Fre="[^"+xk.replace("\\.","")+"]",Ure=new RegExp("^"+/((?:WC+[\/:])*)/.source.replace("WC",wk)+/(WCOD+)?/.source.replace("WCOD",Fre)+/(?:\.(WC+)(?:\[(.+)\])?)?/.source.replace("WC",wk)+/\.(WC+)(?:\[(.+)\])?/.source.replace("WC",wk)+"$"),zre=["material","materials","bones","map"];class Hre{constructor(e,t,n){const r=n||Ll.parseTrackName(t);this._targetGroup=e,this._bindings=e.subscribe_(t,r)}getValue(e,t){this.bind();const r=this._bindings[this._targetGroup.nCachedObjects_];void 0!==r&&r.getValue(e,t)}setValue(e,t){const n=this._bindings;for(let r=this._targetGroup.nCachedObjects_,s=n.length;r!==s;++r)n[r].setValue(e,t)}bind(){const e=this._bindings;for(let t=this._targetGroup.nCachedObjects_,n=e.length;t!==n;++t)e[t].bind()}unbind(){const e=this._bindings;for(let t=this._targetGroup.nCachedObjects_,n=e.length;t!==n;++t)e[t].unbind()}}let Ll=(()=>{class i{constructor(t,n,r){this.path=n,this.parsedPath=r||i.parseTrackName(n),this.node=i.findNode(t,this.parsedPath.nodeName)||t,this.rootNode=t,this.getValue=this._getValue_unbound,this.setValue=this._setValue_unbound}static create(t,n,r){return t&&t.isAnimationObjectGroup?new i.Composite(t,n,r):new i(t,n,r)}static sanitizeNodeName(t){return t.replace(/\s/g,"_").replace(kre,"")}static parseTrackName(t){const n=Ure.exec(t);if(null===n)throw new Error("PropertyBinding: Cannot parse trackName: "+t);const r={nodeName:n[2],objectName:n[3],objectIndex:n[4],propertyName:n[5],propertyIndex:n[6]},s=r.nodeName&&r.nodeName.lastIndexOf(".");if(void 0!==s&&-1!==s){const a=r.nodeName.substring(s+1);-1!==zre.indexOf(a)&&(r.nodeName=r.nodeName.substring(0,s),r.objectName=a)}if(null===r.propertyName||0===r.propertyName.length)throw new Error("PropertyBinding: can not parse propertyName from trackName: "+t);return r}static findNode(t,n){if(void 0===n||""===n||"."===n||-1===n||n===t.name||n===t.uuid)return t;if(t.skeleton){const r=t.skeleton.getBoneByName(n);if(void 0!==r)return r}if(t.children){const r=function(a){for(let l=0;lNumber.EPSILON){if(_n<0&&(Yt=Le[Et],Ut=-Ut,dt=Le[gt],_n=-_n),ye.ydt.y)continue;if(ye.y===Yt.y){if(ye.x===Yt.x)return!0}else{const Hn=_n*(ye.x-Yt.x)-Ut*(ye.y-Yt.y);if(0===Hn)return!0;if(Hn<0)continue;He=!He}}else{if(ye.y!==Yt.y)continue;if(dt.x<=ye.x&&ye.x<=Yt.x||Yt.x<=ye.x&&ye.x<=dt.x)return!0}}return He}const r=H_.isClockWise,s=this.subPaths;if(0===s.length)return[];let a,l,u;const d=[];if(1===s.length)return l=s[0],u=new o2,u.curves=l.curves,d.push(u),d;let p=!r(s[0].getPoints());p=e?!p:p;const y=[],C=[];let W,se,O=[],Q=0;C[Q]=void 0,O[Q]=[];for(let ye=0,Le=s.length;ye1){let ye=!1,Le=0;for(let we=0,He=C.length;we0&&!1===ye&&(O=y)}for(let ye=0,Le=C.length;yeMath.PI&&(Al-=Mo),Zl<-Math.PI?Zl+=Mo:Zl>Math.PI&&(Zl-=Mo),l.theta=Al<=Zl?Math.max(Al,Math.min(Zl,l.theta)):l.theta>(Al+Zl)/2?Math.max(Al,l.theta):Math.min(Zl,l.theta)),l.phi=Math.max(n.minPolarAngle,Math.min(n.maxPolarAngle,l.phi)),l.makeSafe(),l.radius*=d,l.radius=Math.max(n.minDistance,Math.min(n.maxDistance,l.radius)),!0===n.enableDamping?n.target.addScaledVector(p,n.dampingFactor):n.target.add(p),Bn.setFromSpherical(l),Bn.applyQuaternion(Fs),al.copy(n.target).add(Bn),n.object.lookAt(n.target),!0===n.enableDamping?(u.theta*=1-n.dampingFactor,u.phi*=1-n.dampingFactor,p.multiplyScalar(1-n.dampingFactor)):(u.set(0,0,0),p.set(0,0,0)),d=1,!!(y||Js.distanceToSquared(n.object.position)>a||8*(1-zs.dot(n.object.quaternion))>a)&&(n.dispatchEvent(K9),Js.copy(n.object.position),zs.copy(n.object.quaternion),y=!1,!0)}}(),this.dispose=function(){n.domElement.removeEventListener("contextmenu",Vi),n.domElement.removeEventListener("pointerdown",us),n.domElement.removeEventListener("pointercancel",oa),n.domElement.removeEventListener("wheel",Yl),n.domElement.removeEventListener("pointermove",uo),n.domElement.removeEventListener("pointerup",_s),null!==n._domElementKeyEvents&&n._domElementKeyEvents.removeEventListener("keydown",El)};const n=this,r={NONE:-1,ROTATE:0,DOLLY:1,PAN:2,TOUCH_ROTATE:3,TOUCH_PAN:4,TOUCH_DOLLY_PAN:5,TOUCH_DOLLY_ROTATE:6};let s=r.NONE;const a=1e-6,l=new z9,u=new z9;let d=1;const p=new Nt;let y=!1;const C=new ji,O=new ji,Q=new ji,W=new ji,se=new ji,ye=new ji,Le=new ji,we=new ji,He=new ji,gt=[],Et={};function dt(){return Math.pow(.95,n.zoomSpeed)}function Ut(Bn){u.theta-=Bn}function _n(Bn){u.phi-=Bn}const Hn=function(){const Bn=new Nt;return function(Fs,Js){Bn.setFromMatrixColumn(Js,0),Bn.multiplyScalar(-Fs),p.add(Bn)}}(),gi=function(){const Bn=new Nt;return function(Fs,Js){!0===n.screenSpacePanning?Bn.setFromMatrixColumn(Js,1):(Bn.setFromMatrixColumn(Js,0),Bn.crossVectors(n.object.up,Bn)),Bn.multiplyScalar(Fs),p.add(Bn)}}(),Vn=function(){const Bn=new Nt;return function(Fs,Js){const zs=n.domElement;if(n.object.isPerspectiveCamera){Bn.copy(n.object.position).sub(n.target);let vo=Bn.length();vo*=Math.tan(n.object.fov/2*Math.PI/180),Hn(2*Fs*vo/zs.clientHeight,n.object.matrix),gi(2*Js*vo/zs.clientHeight,n.object.matrix)}else n.object.isOrthographicCamera?(Hn(Fs*(n.object.right-n.object.left)/n.object.zoom/zs.clientWidth,n.object.matrix),gi(Js*(n.object.top-n.object.bottom)/n.object.zoom/zs.clientHeight,n.object.matrix)):(console.warn("WARNING: OrbitControls.js encountered an unknown camera type - pan disabled."),n.enablePan=!1)}}();function Tn(Bn){n.object.isPerspectiveCamera?d/=Bn:n.object.isOrthographicCamera?(n.object.zoom=Math.max(n.minZoom,Math.min(n.maxZoom,n.object.zoom*Bn)),n.object.updateProjectionMatrix(),y=!0):(console.warn("WARNING: OrbitControls.js encountered an unknown camera type - dolly/zoom disabled."),n.enableZoom=!1)}function yi(Bn){n.object.isPerspectiveCamera?d*=Bn:n.object.isOrthographicCamera?(n.object.zoom=Math.max(n.minZoom,Math.min(n.maxZoom,n.object.zoom/Bn)),n.object.updateProjectionMatrix(),y=!0):(console.warn("WARNING: OrbitControls.js encountered an unknown camera type - dolly/zoom disabled."),n.enableZoom=!1)}function qn(Bn){C.set(Bn.clientX,Bn.clientY)}function si(Bn){W.set(Bn.clientX,Bn.clientY)}function hr(){1===gt.length?C.set(gt[0].pageX,gt[0].pageY):C.set(.5*(gt[0].pageX+gt[1].pageX),.5*(gt[0].pageY+gt[1].pageY))}function Yr(){1===gt.length?W.set(gt[0].pageX,gt[0].pageY):W.set(.5*(gt[0].pageX+gt[1].pageX),.5*(gt[0].pageY+gt[1].pageY))}function Ci(){const Bn=gt[0].pageX-gt[1].pageX,ui=gt[0].pageY-gt[1].pageY,Fs=Math.sqrt(Bn*Bn+ui*ui);Le.set(0,Fs)}function Bs(Bn){if(1==gt.length)O.set(Bn.pageX,Bn.pageY);else{const Fs=Yo(Bn);O.set(.5*(Bn.pageX+Fs.x),.5*(Bn.pageY+Fs.y))}Q.subVectors(O,C).multiplyScalar(n.rotateSpeed);const ui=n.domElement;Ut(2*Math.PI*Q.x/ui.clientHeight),_n(2*Math.PI*Q.y/ui.clientHeight),C.copy(O)}function $r(Bn){if(1===gt.length)se.set(Bn.pageX,Bn.pageY);else{const ui=Yo(Bn);se.set(.5*(Bn.pageX+ui.x),.5*(Bn.pageY+ui.y))}ye.subVectors(se,W).multiplyScalar(n.panSpeed),Vn(ye.x,ye.y),W.copy(se)}function ta(Bn){const ui=Yo(Bn),Fs=Bn.pageX-ui.x,Js=Bn.pageY-ui.y,zs=Math.sqrt(Fs*Fs+Js*Js);we.set(0,zs),He.set(0,Math.pow(we.y/Le.y,n.zoomSpeed)),Tn(He.y),Le.copy(we)}function us(Bn){!1!==n.enabled&&(0===gt.length&&(n.domElement.setPointerCapture(Bn.pointerId),n.domElement.addEventListener("pointermove",uo),n.domElement.addEventListener("pointerup",_s)),function Wr(Bn){gt.push(Bn)}(Bn),"touch"===Bn.pointerType?function vn(Bn){switch(Is(Bn),gt.length){case 1:switch(n.touches.ONE){case 0:if(!1===n.enableRotate)return;hr(),s=r.TOUCH_ROTATE;break;case 1:if(!1===n.enablePan)return;Yr(),s=r.TOUCH_PAN;break;default:s=r.NONE}break;case 2:switch(n.touches.TWO){case 2:if(!1===n.enableZoom&&!1===n.enablePan)return;(function Es(){n.enableZoom&&Ci(),n.enablePan&&Yr()})(),s=r.TOUCH_DOLLY_PAN;break;case 3:if(!1===n.enableZoom&&!1===n.enableRotate)return;(function Ss(){n.enableZoom&&Ci(),n.enableRotate&&hr()})(),s=r.TOUCH_DOLLY_ROTATE;break;default:s=r.NONE}break;default:s=r.NONE}s!==r.NONE&&n.dispatchEvent(Ek)}(Bn):function Go(Bn){let ui;switch(Bn.button){case 0:ui=n.mouseButtons.LEFT;break;case 1:ui=n.mouseButtons.MIDDLE;break;case 2:ui=n.mouseButtons.RIGHT;break;default:ui=-1}switch(ui){case 1:if(!1===n.enableZoom)return;(function xi(Bn){Le.set(Bn.clientX,Bn.clientY)})(Bn),s=r.DOLLY;break;case 0:if(Bn.ctrlKey||Bn.metaKey||Bn.shiftKey){if(!1===n.enablePan)return;si(Bn),s=r.PAN}else{if(!1===n.enableRotate)return;qn(Bn),s=r.ROTATE}break;case 2:if(Bn.ctrlKey||Bn.metaKey||Bn.shiftKey){if(!1===n.enableRotate)return;qn(Bn),s=r.ROTATE}else{if(!1===n.enablePan)return;si(Bn),s=r.PAN}break;default:s=r.NONE}s!==r.NONE&&n.dispatchEvent(Ek)}(Bn))}function uo(Bn){!1!==n.enabled&&("touch"===Bn.pointerType?function en(Bn){switch(Is(Bn),s){case r.TOUCH_ROTATE:if(!1===n.enableRotate)return;Bs(Bn),n.update();break;case r.TOUCH_PAN:if(!1===n.enablePan)return;$r(Bn),n.update();break;case r.TOUCH_DOLLY_PAN:if(!1===n.enableZoom&&!1===n.enablePan)return;(function yr(Bn){n.enableZoom&&ta(Bn),n.enablePan&&$r(Bn)})(Bn),n.update();break;case r.TOUCH_DOLLY_ROTATE:if(!1===n.enableZoom&&!1===n.enableRotate)return;(function _r(Bn){n.enableZoom&&ta(Bn),n.enableRotate&&Bs(Bn)})(Bn),n.update();break;default:s=r.NONE}}(Bn):function ko(Bn){switch(s){case r.ROTATE:if(!1===n.enableRotate)return;!function zi(Bn){O.set(Bn.clientX,Bn.clientY),Q.subVectors(O,C).multiplyScalar(n.rotateSpeed);const ui=n.domElement;Ut(2*Math.PI*Q.x/ui.clientHeight),_n(2*Math.PI*Q.y/ui.clientHeight),C.copy(O),n.update()}(Bn);break;case r.DOLLY:if(!1===n.enableZoom)return;!function Ki(Bn){we.set(Bn.clientX,Bn.clientY),He.subVectors(we,Le),He.y>0?Tn(dt()):He.y<0&&yi(dt()),Le.copy(we),n.update()}(Bn);break;case r.PAN:if(!1===n.enablePan)return;!function cs(Bn){se.set(Bn.clientX,Bn.clientY),ye.subVectors(se,W).multiplyScalar(n.panSpeed),Vn(ye.x,ye.y),W.copy(se),n.update()}(Bn)}}(Bn))}function _s(Bn){is(Bn),0===gt.length&&(n.domElement.releasePointerCapture(Bn.pointerId),n.domElement.removeEventListener("pointermove",uo),n.domElement.removeEventListener("pointerup",_s)),n.dispatchEvent(Y9),s=r.NONE}function oa(Bn){is(Bn)}function Yl(Bn){!1===n.enabled||!1===n.enableZoom||s!==r.NONE||(Bn.preventDefault(),n.dispatchEvent(Ek),function oi(Bn){Bn.deltaY<0?yi(dt()):Bn.deltaY>0&&Tn(dt()),n.update()}(Bn),n.dispatchEvent(Y9))}function El(Bn){!1===n.enabled||!1===n.enablePan||function fr(Bn){let ui=!1;switch(Bn.code){case n.keys.UP:Bn.ctrlKey||Bn.metaKey||Bn.shiftKey?_n(2*Math.PI*n.rotateSpeed/n.domElement.clientHeight):Vn(0,n.keyPanSpeed),ui=!0;break;case n.keys.BOTTOM:Bn.ctrlKey||Bn.metaKey||Bn.shiftKey?_n(-2*Math.PI*n.rotateSpeed/n.domElement.clientHeight):Vn(0,-n.keyPanSpeed),ui=!0;break;case n.keys.LEFT:Bn.ctrlKey||Bn.metaKey||Bn.shiftKey?Ut(2*Math.PI*n.rotateSpeed/n.domElement.clientHeight):Vn(n.keyPanSpeed,0),ui=!0;break;case n.keys.RIGHT:Bn.ctrlKey||Bn.metaKey||Bn.shiftKey?Ut(-2*Math.PI*n.rotateSpeed/n.domElement.clientHeight):Vn(-n.keyPanSpeed,0),ui=!0}ui&&(Bn.preventDefault(),n.update())}(Bn)}function Vi(Bn){!1!==n.enabled&&Bn.preventDefault()}function is(Bn){delete Et[Bn.pointerId];for(let ui=0;ui=6&&(this.perspectiveControls.target=this.orthographicControls.target=new Nt(t[3],t[4],t[5])),this.addControls(this.perspectiveControls),this.addControls(this.orthographicControls),this.setActiveControls(this.perspectiveControls),this.setMainControls(this.perspectiveControls),this.setOverlayControls(this.orthographicControls),this.getActiveControls().addEventListener("change",()=>{this.transformSync(),this.updateSync()}),this.initializeZoomControls(),this.setupResize(r)}setOrbitControls(e,t){const n=new ese(e,t);return n.enableDamping=!0,n.dampingFactor=.25,n.enableZoom=!0,n.autoRotate=!1,n}setActiveControls(e){this.activeControls=e}setMainControls(e){this.mainControls=e}setOverlayControls(e){this.overlayControls=e}getActiveControls(){return this.activeControls}getMainControls(){return this.mainControls}getOverlayControls(){return this.overlayControls}getActiveCamera(){return this.activeControls.object}getMainCamera(){return this.mainControls.object}getOverlayCamera(){return this.overlayControls.object}getAllCameras(){return[this.getMainCamera(),this.getOverlayCamera()]}addControls(e){this.containsObject(e,this.controls)||this.controls.push(e)}removeControls(e){const t=this.controls.indexOf(e);t>-1&&this.controls.splice(t,1)}swapControls(){const e=this.mainControls;this.mainControls=this.overlayControls,this.overlayControls=e}updateSync(){for(const e of this.controls)e!==this.activeControls&&this.update(e)}update(e){e.update()}transformSync(){for(const e of this.controls)e!==this.activeControls&&(this.positionSync(e),this.rotationSync(e))}zoomTo(e,t){for(const n of this.zoomCameraAnimPairs){const r=n.camera,s=n.anim;if(r.isOrthographicCamera)s.to({zoom:r.zoom*(1/e)},t),r.updateProjectionMatrix();else{const a=r.position;s.to({x:a.x*e,y:a.y*e,z:a.z*e},t)}s.start()}}lookAtObject(e,t){const n=new Nt(0,0,0),r=this.getObjectPosition(e,t);if(r&&r.distanceTo(n)>.001)for(const s of this.getAllCameras())new Tf(s.position).to({x:1.1*r.x,y:1.1*r.y,z:1.1*r.z},200).start()}getObjectPosition(e,t){var n,r;const s=t.getObjectByProperty("uuid",e);if(s){const a=new Nt(0,0,0);let l=new Nt;return s instanceof Xu?s.traverse(u=>{var d,p;if(0===u.children.length)if(u.position.equals(a)){if(null!==(d=u.geometry)&&void 0!==d&&d.boundingSphere)try{l.add(u.geometry.boundingSphere.getBoundingBox().max)}catch{l.add(null===(p=u.geometry.boundingSphere)||void 0===p?void 0:p.center)}}else l.add(u.position)}):l=s.position.equals(a)?null===(r=null===(n=s.geometry)||void 0===n?void 0:n.boundingSphere)||void 0===r?void 0:r.center:s.position,l}}hideTubeTracksOnZoom(e,t){let n=!1;const r=new Nt;this.activeControls.addEventListener("change",s=>{var a,l,u,d;const p=(null===(l=null===(a=s?.target)||void 0===a?void 0:a.object)||void 0===l?void 0:l.position).distanceTo(r){"Track"===y.name&&y.geometry instanceof yb&&(y.visible=!1)}),n=!0):!p&&n&&(null===(d=e.getObjectByName("Tracks"))||void 0===d||d.traverse(y=>{"Track"===y.name&&y.geometry instanceof yb&&(y.visible=!0)}),n=!1)})}initializeZoomControls(){const e=this.getAllCameras();this.zoomCameraAnimPairs=[];for(const t of e){const n=new Tf(t.isOrthographicCamera?t:t.position);this.zoomCameraAnimPairs.push({camera:t,anim:n})}}positionSync(e){e.object.position.set(this.activeControls.object.position.x,this.activeControls.object.position.y,this.activeControls.object.position.z)}rotationSync(e){e.target=this.activeControls.target}containsObject(e,t){for(const n of t)if(n===e)return!0;return!1}setupResize(e){window.addEventListener("resize",()=>{let t=this.getMainCamera();t.isOrthographicCamera?(t.left=e.offsetWidth/-2,t.right=e.offsetWidth/2,t.top=e.offsetHeight/2,t.bottom=e.offsetHeight/-2,t.updateProjectionMatrix()):(t.aspect=e.offsetWidth/e.offsetHeight,t.updateProjectionMatrix())})}objectIndex(e,t){for(let n=0;nt.offsetWidth>0?t.offsetWidth:window.innerWidth,r=()=>t.offsetHeight>0?t.offsetHeight:window.innerHeight,s=this.getMainRenderer();s.setSize(n(),r(),!1),s.setPixelRatio(window.devicePixelRatio),s.domElement.id="three-canvas",t.appendChild(this.getMainRenderer().domElement),window.addEventListener("resize",()=>{s.setSize(n(),r())})}setMainRenderer(e){this.mainRenderer=e}setOverlayRenderer(e){const t=new UP({canvas:e,antialias:!1,alpha:!0});this.addRenderer(t),this.overlayRenderer=t}setRenderers(e){this.renderers=e}getMainRenderer(){return this.mainRenderer}getOverlayRenderer(){return this.overlayRenderer}getRenderers(){return this.renderers}addRenderer(e){this.containsObject(e,this.renderers)||this.renderers.push(e)}removeControls(e){const t=this.renderers.indexOf(e);t>-1&&this.renderers.splice(t,1)}swapRenderers(e,t){const n=e;e=t,t=n}containsObject(e,t){for(const n of t)if(n===e)return!0;return!1}setLocalClippingEnabled(e){for(const t of this.renderers)t.localClippingEnabled=e}getLocalClipping(){if(this.renderers.length>0)return this.renderers[0].localClippingEnabled}isFixedOverlay(){return this.fixedOverlay}setFixOverlay(e){this.fixedOverlay=e}}class ise{parse(e){let t="",n=0,r=0,s=0;const a=new Nt,l=new Lr,u=new Nt,d=new ji,p=[];return e.traverse(function(Q){!0===Q.isMesh&&function y(Q){let W=0,se=0,ye=0;const Le=Q.geometry,we=new Df,He=Le.getAttribute("position"),gt=Le.getAttribute("normal"),Et=Le.getAttribute("uv"),Yt=Le.getIndex();if(t+="o "+Q.name+"\n",Q.material&&Q.material.name&&(t+="usemtl "+Q.material.name+"\n"),void 0!==He)for(let dt=0,Ut=He.count;dt"u"&&typeof OffscreenCanvas<"u"?new OffscreenCanvas(1,1):document.createElement("canvas")}function iU(i,e){if(void 0!==i.toBlob)return new Promise(n=>i.toBlob(n,e));let t;return"image/jpeg"===e?t=.92:"image/webp"===e&&(t=.8),i.convertToBlob({type:e,quality:t})}class dse{constructor(){this.plugins=[],this.options={},this.pending=[],this.buffers=[],this.byteOffset=0,this.buffers=[],this.nodeMap=new Map,this.skins=[],this.extensionsUsed={},this.uids=new Map,this.uid=0,this.json={asset:{version:"2.0",generator:"THREE.GLTFExporter"}},this.cache={meshes:new Map,attributes:new Map,attributesNormalized:new Map,materials:new Map,textures:new Map,images:new Map}}setPlugins(e){this.plugins=e}write(e,t,n={}){var r=this;return(0,Np.Z)(function*(){r.options=Object.assign({binary:!1,trs:!1,onlyVisible:!0,maxTextureSize:1/0,animations:[],includeCustomExtensions:!1},n),r.options.animations.length>0&&(r.options.trs=!0),r.processInput(e),yield Promise.all(r.pending);const l=r.json;n=r.options;const u=r.extensionsUsed,d=new Blob(r.buffers,{type:"application/octet-stream"}),p=Object.keys(u);if(p.length>0&&(l.extensionsUsed=p),l.buffers&&l.buffers.length>0&&(l.buffers[0].byteLength=d.size),!0===n.binary){const y=new FileReader;y.readAsArrayBuffer(d),y.onloadend=function(){const C=Bk(y.result),O=new DataView(new ArrayBuffer(8));O.setUint32(0,C.byteLength,!0),O.setUint32(4,5130562,!0);const Q=Bk(function cse(i){return(new TextEncoder).encode(i).buffer}(JSON.stringify(l)),32),W=new DataView(new ArrayBuffer(8));W.setUint32(0,Q.byteLength,!0),W.setUint32(4,1313821514,!0);const se=new ArrayBuffer(12),ye=new DataView(se);ye.setUint32(0,1179937895,!0),ye.setUint32(4,2,!0),ye.setUint32(8,12+W.byteLength+Q.byteLength+O.byteLength+C.byteLength,!0);const we=new Blob([se,W,Q,O,C],{type:"application/octet-stream"}),He=new FileReader;He.readAsArrayBuffer(we),He.onloadend=function(){t(He.result)}}}else if(l.buffers&&l.buffers.length>0){const y=new FileReader;y.readAsDataURL(d),y.onloadend=function(){l.buffers[0].uri=y.result,t(l)}}else t(l)})()}serializeUserData(e,t){if(0===Object.keys(e.userData).length)return;const n=this.options,r=this.extensionsUsed;try{const s=JSON.parse(JSON.stringify(e.userData));if(n.includeCustomExtensions&&s.gltfExtensions){void 0===t.extensions&&(t.extensions={});for(const a in s.gltfExtensions)t.extensions[a]=s.gltfExtensions[a],r[a]=!0;delete s.gltfExtensions}Object.keys(s).length>0&&(t.extras=s)}catch(s){console.warn("THREE.GLTFExporter: userData of '"+e.name+"' won't be serialized because of JSON.stringify error - "+s.message)}}getUID(e,t=!1){if(!1===this.uids.has(e)){const r=new Map;r.set(!0,this.uid++),r.set(!1,this.uid++),this.uids.set(e,r)}return this.uids.get(e).get(t)}isNormalizedNormalAttribute(e){if(this.cache.attributesNormalized.has(e))return!1;const n=new Nt;for(let r=0,s=e.count;r5e-4)return!1;return!0}createNormalizedNormalAttribute(e){const t=this.cache;if(t.attributesNormalized.has(e))return t.attributesNormalized.get(e);const n=e.clone(),r=new Nt;for(let s=0,a=n.count;s4?W=e.array[O*e.itemSize+Q]:(0===Q?W=e.getX(O):1===Q?W=e.getY(O):2===Q?W=e.getZ(O):3===Q&&(W=e.getW(O)),!0===e.normalized&&(W=VE.normalize(W,e.array))),5126===t?d.setFloat32(p,W,!0):5125===t?d.setUint32(p,W,!0):5123===t?d.setUint16(p,W,!0):5121===t&&d.setUint8(p,W),p+=l}const y={buffer:this.processBuffer(d.buffer),byteOffset:this.byteOffset,byteLength:u};return void 0!==s&&(y.target=s),34962===s&&(y.byteStride=e.itemSize*l),this.byteOffset+=u,a.bufferViews.push(y),{id:a.bufferViews.length-1,byteLength:0}}processBufferViewImage(e){const t=this,n=t.json;return n.bufferViews||(n.bufferViews=[]),new Promise(function(r){const s=new FileReader;s.readAsArrayBuffer(e),s.onloadend=function(){const a=Bk(s.result),l={buffer:t.processBuffer(a),byteOffset:t.byteOffset,byteLength:a.byteLength};t.byteOffset+=a.byteLength,r(n.bufferViews.push(l)-1)}})}processAccessor(e,t,n,r){const s=this.json;let l;if(e.array.constructor===Float32Array)l=5126;else if(e.array.constructor===Uint32Array)l=5125;else if(e.array.constructor===Uint16Array)l=5123;else{if(e.array.constructor!==Uint8Array)throw new Error("THREE.GLTFExporter: Unsupported bufferAttribute component type.");l=5121}if(void 0===n&&(n=0),void 0===r&&(r=e.count),0===r)return null;const u=function hse(i,e,t){const n={min:new Array(i.itemSize).fill(Number.POSITIVE_INFINITY),max:new Array(i.itemSize).fill(Number.NEGATIVE_INFINITY)};for(let r=e;r4?a=i.array[r*i.itemSize+s]:(0===s?a=i.getX(r):1===s?a=i.getY(r):2===s?a=i.getZ(r):3===s&&(a=i.getW(r)),!0===i.normalized&&(a=VE.normalize(a,i.array))),n.min[s]=Math.min(n.min[s],a),n.max[s]=Math.max(n.max[s],a)}return n}(e,n,r);let d;void 0!==t&&(d=e===t.index?34963:34962);const p=this.processBufferView(e,l,n,r,d),y={bufferView:p.id,byteOffset:p.byteOffset,componentType:l,count:r,max:u.max,min:u.min,type:{1:"SCALAR",2:"VEC2",3:"VEC3",4:"VEC4",16:"MAT4"}[e.itemSize]};return!0===e.normalized&&(y.normalized=!0),s.accessors||(s.accessors=[]),s.accessors.push(y)-1}processImage(e,t,n,r="image/png"){if(null!==e){const s=this,a=s.cache,l=s.json,u=s.options,d=s.pending;a.images.has(e)||a.images.set(e,{});const p=a.images.get(e),y=r+":flipY/"+n.toString();if(void 0!==p[y])return p[y];l.images||(l.images=[]);const C={mimeType:r},O=nU();O.width=Math.min(e.width,u.maxTextureSize),O.height=Math.min(e.height,u.maxTextureSize);const Q=O.getContext("2d");if(!0===n&&(Q.translate(0,O.height),Q.scale(1,-1)),void 0!==e.data){t!==zp&&console.error("GLTFExporter: Only RGBAFormat is supported."),(e.width>u.maxTextureSize||e.height>u.maxTextureSize)&&console.warn("GLTFExporter: Image size is bigger than maxTextureSize",e);const se=new Uint8ClampedArray(e.height*e.width*4);for(let ye=0;yes.processBufferViewImage(se)).then(se=>{C.bufferView=se})):void 0!==O.toDataURL?C.uri=O.toDataURL(r):d.push(iU(O,r).then(se=>(new FileReader).readAsDataURL(se)).then(se=>{C.uri=se}));const W=l.images.push(C)-1;return p[y]=W,W}throw new Error("THREE.GLTFExporter: No valid image data found. Unable to process texture.")}processSampler(e){const t=this.json;return t.samplers||(t.samplers=[]),t.samplers.push({magFilter:Qp[e.magFilter],minFilter:Qp[e.minFilter],wrapS:Qp[e.wrapS],wrapT:Qp[e.wrapT]})-1}processTexture(e){const t=this.cache,n=this.json;if(t.textures.has(e))return t.textures.get(e);n.textures||(n.textures=[]);let r=e.userData.mimeType;"image/webp"===r&&(r="image/png");const s={sampler:this.processSampler(e),source:this.processImage(e.image,e.format,e.flipY,r)};e.name&&(s.name=e.name),this._invokeAll(function(l){l.writeTexture&&l.writeTexture(e,s)});const a=n.textures.push(s)-1;return t.textures.set(e,a),a}processMaterial(e){const t=this.cache,n=this.json;if(t.materials.has(e))return t.materials.get(e);if(e.isShaderMaterial)return console.warn("GLTFExporter: THREE.ShaderMaterial not supported."),null;n.materials||(n.materials=[]);const r={pbrMetallicRoughness:{}};!0!==e.isMeshStandardMaterial&&!0!==e.isMeshBasicMaterial&&console.warn("GLTFExporter: Use MeshStandardMaterial or MeshBasicMaterial for best results.");const s=e.color.toArray().concat([e.opacity]);if(lS(s,[1,1,1,1])||(r.pbrMetallicRoughness.baseColorFactor=s),e.isMeshStandardMaterial?(r.pbrMetallicRoughness.metallicFactor=e.metalness,r.pbrMetallicRoughness.roughnessFactor=e.roughness):(r.pbrMetallicRoughness.metallicFactor=.5,r.pbrMetallicRoughness.roughnessFactor=.5),e.metalnessMap||e.roughnessMap){const l=this.buildMetalRoughTexture(e.metalnessMap,e.roughnessMap),u={index:this.processTexture(l)};this.applyTextureTransform(u,l),r.pbrMetallicRoughness.metallicRoughnessTexture=u}if(e.map){const l={index:this.processTexture(e.map)};this.applyTextureTransform(l,e.map),r.pbrMetallicRoughness.baseColorTexture=l}if(e.emissive){const l=e.emissive.clone().multiplyScalar(e.emissiveIntensity),u=Math.max(l.r,l.g,l.b);if(u>1&&(l.multiplyScalar(1/u),console.warn("THREE.GLTFExporter: Some emissive components exceed 1; emissive has been limited")),u>0&&(r.emissiveFactor=l.toArray()),e.emissiveMap){const d={index:this.processTexture(e.emissiveMap)};this.applyTextureTransform(d,e.emissiveMap),r.emissiveTexture=d}}if(e.normalMap){const l={index:this.processTexture(e.normalMap)};e.normalScale&&1!==e.normalScale.x&&(l.scale=e.normalScale.x),this.applyTextureTransform(l,e.normalMap),r.normalTexture=l}if(e.aoMap){const l={index:this.processTexture(e.aoMap),texCoord:1};1!==e.aoMapIntensity&&(l.strength=e.aoMapIntensity),this.applyTextureTransform(l,e.aoMap),r.occlusionTexture=l}e.transparent?r.alphaMode="BLEND":e.alphaTest>0&&(r.alphaMode="MASK",r.alphaCutoff=e.alphaTest),2===e.side&&(r.doubleSided=!0),""!==e.name&&(r.name=e.name),this.serializeUserData(e,r),this._invokeAll(function(l){l.writeMaterial&&l.writeMaterial(e,r)});const a=n.materials.push(r)-1;return t.materials.set(e,a),a}processMesh(e){const t=this.cache,n=this.json,r=[e.geometry.uuid];if(Array.isArray(e.material))for(let we=0,He=e.material.length;we0){const we=[],He=[],gt={};if(void 0!==e.morphTargetDictionary)for(const Et in e.morphTargetDictionary)gt[e.morphTargetDictionary[Et]]=Et;for(let Et=0;Et0&&(u.extras={},u.extras.targetNames=He)}const W=Array.isArray(e.material);if(W&&0===a.groups.length)return null;const se=W?e.material:[e.material],ye=W?a.groups:[{materialIndex:0,start:void 0,count:void 0}];for(let we=0,He=ye.length;we0&&(gt.targets=y),null!==a.index){let Yt=this.getUID(a.index);(void 0!==ye[we].start||void 0!==ye[we].count)&&(Yt+=":"+ye[we].start+":"+ye[we].count),t.attributes.has(Yt)?gt.indices=t.attributes.get(Yt):(gt.indices=this.processAccessor(a.index,a,ye[we].start,ye[we].count),t.attributes.set(Yt,gt.indices)),null===gt.indices&&delete gt.indices}const Et=this.processMaterial(se[ye[we].materialIndex]);null!==Et&&(gt.material=Et),p.push(gt)}u.primitives=p,n.meshes||(n.meshes=[]),this._invokeAll(function(we){we.writeMesh&&we.writeMesh(e,u)});const Le=n.meshes.push(u)-1;return t.meshes.set(s,Le),Le}processCamera(e){const t=this.json;t.cameras||(t.cameras=[]);const n=e.isOrthographicCamera,r={type:n?"orthographic":"perspective"};return n?r.orthographic={xmag:2*e.right,ymag:2*e.top,zfar:e.far<=0?.001:e.far,znear:e.near<0?0:e.near}:r.perspective={aspectRatio:e.aspect,yfov:VE.degToRad(e.fov),zfar:e.far<=0?.001:e.far,znear:e.near<0?0:e.near},""!==e.name&&(r.name=e.type),t.cameras.push(r)-1}processAnimation(e,t){const n=this.json,r=this.nodeMap;n.animations||(n.animations=[]);const s=(e=Dk.Utils.mergeMorphTargetTracks(e.clone(),t)).tracks,a=[],l=[];for(let u=0;u0){const l=[];for(let u=0,d=e.children.length;u0&&(s.children=l)}this._invokeAll(function(l){l.writeNode&&l.writeNode(e,s)});const a=t.nodes.push(s)-1;return r.set(e,a),a}processScene(e){const t=this.json,n=this.options;t.scenes||(t.scenes=[],t.scene=0);const r={};""!==e.name&&(r.name=e.name),t.scenes.push(r);const s=[];for(let a=0,l=e.children.length;a0&&(r.nodes=s),this.serializeUserData(e,r)}processObjects(e){const t=new p4;t.name="AuxScene";for(let n=0;n0&&this.processObjects(n);for(let r=0;r0&&(a.range=e.distance)):e.isSpotLight&&(a.type="spot",e.distance>0&&(a.range=e.distance),a.spot={},a.spot.innerConeAngle=(e.penumbra-1)*e.angle*-1,a.spot.outerConeAngle=e.angle),void 0!==e.decay&&2!==e.decay&&console.warn("THREE.GLTFExporter: Light decay may be lost. glTF is physically-based, and expects light.decay=2."),e.target&&(e.target.parent!==e||0!==e.target.position.x||0!==e.target.position.y||-1!==e.target.position.z)&&console.warn("THREE.GLTFExporter: Light direction may be lost. For best results, make light.target a child of the light with position 0,0,-1."),s[this.name]||(r.extensions=r.extensions||{},r.extensions[this.name]={lights:[]},s[this.name]=!0);const l=r.extensions[this.name].lights;l.push(a),t.extensions=t.extensions||{},t.extensions[this.name]={light:l.length-1}}}class pse{constructor(e){this.writer=e,this.name="KHR_materials_unlit"}writeMaterial(e,t){if(!e.isMeshBasicMaterial)return;const r=this.writer.extensionsUsed;t.extensions=t.extensions||{},t.extensions[this.name]={},r[this.name]=!0,t.pbrMetallicRoughness.metallicFactor=0,t.pbrMetallicRoughness.roughnessFactor=.9}}class Ase{constructor(e){this.writer=e,this.name="KHR_materials_clearcoat"}writeMaterial(e,t){if(!e.isMeshPhysicalMaterial||0===e.clearcoat)return;const n=this.writer,r=n.extensionsUsed,s={};if(s.clearcoatFactor=e.clearcoat,e.clearcoatMap){const a={index:n.processTexture(e.clearcoatMap)};n.applyTextureTransform(a,e.clearcoatMap),s.clearcoatTexture=a}if(s.clearcoatRoughnessFactor=e.clearcoatRoughness,e.clearcoatRoughnessMap){const a={index:n.processTexture(e.clearcoatRoughnessMap)};n.applyTextureTransform(a,e.clearcoatRoughnessMap),s.clearcoatRoughnessTexture=a}if(e.clearcoatNormalMap){const a={index:n.processTexture(e.clearcoatNormalMap)};n.applyTextureTransform(a,e.clearcoatNormalMap),s.clearcoatNormalTexture=a}t.extensions=t.extensions||{},t.extensions[this.name]=s,r[this.name]=!0}}class mse{constructor(e){this.writer=e,this.name="KHR_materials_iridescence"}writeMaterial(e,t){if(!e.isMeshPhysicalMaterial||0===e.iridescence)return;const n=this.writer,r=n.extensionsUsed,s={};if(s.iridescenceFactor=e.iridescence,e.iridescenceMap){const a={index:n.processTexture(e.iridescenceMap)};n.applyTextureTransform(a,e.iridescenceMap),s.iridescenceTexture=a}if(s.iridescenceIor=e.iridescenceIOR,s.iridescenceThicknessMinimum=e.iridescenceThicknessRange[0],s.iridescenceThicknessMaximum=e.iridescenceThicknessRange[1],e.iridescenceThicknessMap){const a={index:n.processTexture(e.iridescenceThicknessMap)};n.applyTextureTransform(a,e.iridescenceThicknessMap),s.iridescenceThicknessTexture=a}t.extensions=t.extensions||{},t.extensions[this.name]=s,r[this.name]=!0}}class gse{constructor(e){this.writer=e,this.name="KHR_materials_transmission"}writeMaterial(e,t){if(!e.isMeshPhysicalMaterial||0===e.transmission)return;const n=this.writer,r=n.extensionsUsed,s={};if(s.transmissionFactor=e.transmission,e.transmissionMap){const a={index:n.processTexture(e.transmissionMap)};n.applyTextureTransform(a,e.transmissionMap),s.transmissionTexture=a}t.extensions=t.extensions||{},t.extensions[this.name]=s,r[this.name]=!0}}class _se{constructor(e){this.writer=e,this.name="KHR_materials_volume"}writeMaterial(e,t){if(!e.isMeshPhysicalMaterial||0===e.transmission)return;const n=this.writer,r=n.extensionsUsed,s={};if(s.thicknessFactor=e.thickness,e.thicknessMap){const a={index:n.processTexture(e.thicknessMap)};n.applyTextureTransform(a,e.thicknessMap),s.thicknessTexture=a}s.attenuationDistance=e.attenuationDistance,s.attenuationColor=e.attenuationColor.toArray(),t.extensions=t.extensions||{},t.extensions[this.name]=s,r[this.name]=!0}}class yse{constructor(e){this.writer=e,this.name="KHR_materials_ior"}writeMaterial(e,t){if(!e.isMeshPhysicalMaterial||1.5===e.ior)return;const r=this.writer.extensionsUsed,s={};s.ior=e.ior,t.extensions=t.extensions||{},t.extensions[this.name]=s,r[this.name]=!0}}class vse{constructor(e){this.writer=e,this.name="KHR_materials_specular"}writeMaterial(e,t){if(!e.isMeshPhysicalMaterial||1===e.specularIntensity&&e.specularColor.equals(rse)&&!e.specularIntensityMap&&!e.specularColorTexture)return;const n=this.writer,r=n.extensionsUsed,s={};if(e.specularIntensityMap){const a={index:n.processTexture(e.specularIntensityMap)};n.applyTextureTransform(a,e.specularIntensityMap),s.specularTexture=a}if(e.specularColorMap){const a={index:n.processTexture(e.specularColorMap)};n.applyTextureTransform(a,e.specularColorMap),s.specularColorTexture=a}s.specularFactor=e.specularIntensity,s.specularColorFactor=e.specularColor.toArray(),t.extensions=t.extensions||{},t.extensions[this.name]=s,r[this.name]=!0}}Dk.Utils={insertKeyframe:function(i,e){const n=i.getValueSize(),r=new i.TimeBufferType(i.times.length+1),s=new i.ValueBufferType(i.values.length+n),a=i.createInterpolant(new i.ValueBufferType(n));let l;if(0===i.times.length){r[0]=e;for(let u=0;ui.times[i.times.length-1]){if(Math.abs(i.times[i.times.length-1]-e)<.001)return i.times.length-1;r[r.length-1]=e,r.set(i.times,0),s.set(i.values,0),s.set(a.evaluate(e),i.values.length),l=r.length-1}else for(let u=0;ue){r.set(i.times.slice(0,u+1),0),r[u+1]=e,r.set(i.times.slice(u+1),u+2),s.set(i.values.slice(0,(u+1)*n),0),s.set(a.evaluate(e),(u+1)*n),s.set(i.values.slice((u+1)*n),(u+2)*n),l=u+1;break}}return i.times=r,i.values=s,l},mergeMorphTargetTracks:function(i,e){const t=[],n={},r=i.tracks;for(let s=0;s{const n=new Blob([i],{type:t}),r=document.createElement("a");r.style.display="none",r.href=URL.createObjectURL(n),r.download=e,r.click(),r.remove()},rU=(i,e="application/json")=>{let t=document.createElement("input");t.type="file",t.accept=e,t.onchange=n=>{var r;const s=null===(r=n.target)||void 0===r?void 0:r.files[0],a=new FileReader;a.onload=l=>{i?.(l.target.result.toString()),t.remove(),t=null},a.readAsText(s)},t.click()};class bse{exportSceneToOBJ(e){const n=(new ise).parse(e);W4(n,"phoenix-obj.obj","text/plain")}exportPhoenixScene(e,t,n){const r=new Dk,s=this.saveSceneConfig(t,n);r.parse(e,a=>{const u=JSON.stringify({sceneConfiguration:s,scene:a},null,2);W4(u,"phoenix-scene.phnx","text/plain")},null)}saveSceneConfig(e,t){return{eventData:this.saveEventDataConfiguration(e),geometries:this.saveGeometriesConfiguration(t)}}saveEventDataConfiguration(e){const t={};for(const n of e.children)if(n.name){t[n.name]=[];for(const r of n.children)r.name&&t[n.name].push(r.name)}return t}saveGeometriesConfiguration(e){const t=[];return e.children.forEach(n=>{"EventData"!==n.name&&t.push(n.name)}),t}}const xse=/^[og]\s*(.+)?/,wse=/^mtllib /,Cse=/^usemtl /,Mse=/^usemap /,sU=/\s+/,oU=new Nt,Ik=new Nt,aU=new Nt,lU=new Nt,HA=new Nt,j4=new Lr;function Sse(){const i={objects:[],object:{},vertices:[],normals:[],colors:[],uvs:[],materials:{},materialLibraries:[],startObject:function(e,t){if(this.object&&!1===this.object.fromDeclaration)return this.object.name=e,void(this.object.fromDeclaration=!1!==t);const n=this.object&&"function"==typeof this.object.currentMaterial?this.object.currentMaterial():void 0;if(this.object&&"function"==typeof this.object._finalize&&this.object._finalize(!0),this.object={name:e||"",fromDeclaration:!1!==t,geometry:{vertices:[],normals:[],colors:[],uvs:[],hasUVIndices:!1},materials:[],smooth:!0,startMaterial:function(r,s){const a=this._finalize(!1);a&&(a.inherited||a.groupCount<=0)&&this.materials.splice(a.index,1);const l={index:this.materials.length,name:r||"",mtllib:Array.isArray(s)&&s.length>0?s[s.length-1]:"",smooth:void 0!==a?a.smooth:this.smooth,groupStart:void 0!==a?a.groupEnd:0,groupEnd:-1,groupCount:-1,inherited:!1,clone:function(u){const d={index:"number"==typeof u?u:this.index,name:this.name,mtllib:this.mtllib,smooth:this.smooth,groupStart:0,groupEnd:-1,groupCount:-1,inherited:!1};return d.clone=this.clone.bind(d),d}};return this.materials.push(l),l},currentMaterial:function(){if(this.materials.length>0)return this.materials[this.materials.length-1]},_finalize:function(r){const s=this.currentMaterial();if(s&&-1===s.groupEnd&&(s.groupEnd=this.geometry.vertices.length/3,s.groupCount=s.groupEnd-s.groupStart,s.inherited=!1),r&&this.materials.length>1)for(let a=this.materials.length-1;a>=0;a--)this.materials[a].groupCount<=0&&this.materials.splice(a,1);return r&&0===this.materials.length&&this.materials.push({name:"",smooth:this.smooth}),s}},n&&n.name&&"function"==typeof n.clone){const r=n.clone(0);r.inherited=!0,this.object.materials.push(r)}this.objects.push(this.object)},finalize:function(){this.object&&"function"==typeof this.object._finalize&&this.object._finalize(!0)},parseVertexIndex:function(e,t){const n=parseInt(e,10);return 3*(n>=0?n-1:n+t/3)},parseNormalIndex:function(e,t){const n=parseInt(e,10);return 3*(n>=0?n-1:n+t/3)},parseUVIndex:function(e,t){const n=parseInt(e,10);return 2*(n>=0?n-1:n+t/2)},addVertex:function(e,t,n){const r=this.vertices,s=this.object.geometry.vertices;s.push(r[e+0],r[e+1],r[e+2]),s.push(r[t+0],r[t+1],r[t+2]),s.push(r[n+0],r[n+1],r[n+2])},addVertexPoint:function(e){const t=this.vertices;this.object.geometry.vertices.push(t[e+0],t[e+1],t[e+2])},addVertexLine:function(e){const t=this.vertices;this.object.geometry.vertices.push(t[e+0],t[e+1],t[e+2])},addNormal:function(e,t,n){const r=this.normals,s=this.object.geometry.normals;s.push(r[e+0],r[e+1],r[e+2]),s.push(r[t+0],r[t+1],r[t+2]),s.push(r[n+0],r[n+1],r[n+2])},addFaceNormal:function(e,t,n){const r=this.vertices,s=this.object.geometry.normals;oU.fromArray(r,e),Ik.fromArray(r,t),aU.fromArray(r,n),HA.subVectors(aU,Ik),lU.subVectors(oU,Ik),HA.cross(lU),HA.normalize(),s.push(HA.x,HA.y,HA.z),s.push(HA.x,HA.y,HA.z),s.push(HA.x,HA.y,HA.z)},addColor:function(e,t,n){const r=this.colors,s=this.object.geometry.colors;void 0!==r[e]&&s.push(r[e+0],r[e+1],r[e+2]),void 0!==r[t]&&s.push(r[t+0],r[t+1],r[t+2]),void 0!==r[n]&&s.push(r[n+0],r[n+1],r[n+2])},addUV:function(e,t,n){const r=this.uvs,s=this.object.geometry.uvs;s.push(r[e+0],r[e+1]),s.push(r[t+0],r[t+1]),s.push(r[n+0],r[n+1])},addDefaultUV:function(){const e=this.object.geometry.uvs;e.push(0,0),e.push(0,0),e.push(0,0)},addUVLine:function(e){const t=this.uvs;this.object.geometry.uvs.push(t[e+0],t[e+1])},addFace:function(e,t,n,r,s,a,l,u,d){const p=this.vertices.length;let y=this.parseVertexIndex(e,p),C=this.parseVertexIndex(t,p),O=this.parseVertexIndex(n,p);if(this.addVertex(y,C,O),this.addColor(y,C,O),void 0!==l&&""!==l){const Q=this.normals.length;y=this.parseNormalIndex(l,Q),C=this.parseNormalIndex(u,Q),O=this.parseNormalIndex(d,Q),this.addNormal(y,C,O)}else this.addFaceNormal(y,C,O);if(void 0!==r&&""!==r){const Q=this.uvs.length;y=this.parseUVIndex(r,Q),C=this.parseUVIndex(s,Q),O=this.parseUVIndex(a,Q),this.addUV(y,C,O),this.object.geometry.hasUVIndices=!0}else this.addDefaultUV()},addPointGeometry:function(e){this.object.geometry.type="Points";const t=this.vertices.length;for(let n=0,r=e.length;n=7?(j4.setRGB(parseFloat(y[4]),parseFloat(y[5]),parseFloat(y[6])).convertSRGBToLinear(),t.colors.push(j4.r,j4.g,j4.b)):t.colors.push(void 0,void 0,void 0);break;case"vn":t.normals.push(parseFloat(y[1]),parseFloat(y[2]),parseFloat(y[3]));break;case"vt":t.uvs.push(parseFloat(y[1]),parseFloat(y[2]))}}else if("f"===p){const C=d.slice(1).trim().split(sU),O=[];for(let W=0,se=C.length;W0){const Le=ye.split("/");O.push(Le)}}const Q=O[0];for(let W=1,se=O.length-1;W1){const C=r[1].trim().toLowerCase();t.object.smooth="0"!==C&&"off"!==C}else t.object.smooth=!0;const y=t.object.currentMaterial();y&&(y.smooth=t.object.smooth)}else{if("\0"===d)continue;console.warn('THREE.OBJLoader: Unexpected line: "'+d+'"')}}t.finalize();const s=new Xu;if(s.materialLibraries=[].concat(t.materialLibraries),1==!(1===t.objects.length&&0===t.objects[0].geometry.vertices.length))for(let l=0,u=t.objects.length;l0&&W.setAttribute("normal",new Ls(p.normals,3)),p.colors.length>0&&(Q=!0,W.setAttribute("color",new Ls(p.colors,3))),!0===p.hasUVIndices&&W.setAttribute("uv",new Ls(p.uvs,2));const se=[];for(let Le=0,we=y.length;Le1){for(let Le=0,we=y.length;Le0){const l=new z_({size:1,sizeAttenuation:!1}),u=new Co;u.setAttribute("position",new Ls(t.vertices,3)),t.colors.length>0&&void 0!==t.colors[0]&&(u.setAttribute("color",new Ls(t.colors,3)),l.vertexColors=!0);const d=new mb(u,l);s.add(d)}return s}}function Pk(i,e=!1){const t=null!==i[0].index,n=new Set(Object.keys(i[0].attributes)),r=new Set(Object.keys(i[0].morphAttributes)),s={},a={},l=i[0].morphTargetsRelative,u=new Co;let d=0;for(let p=0;p=2.0 are supported.")));const d=new toe(s,{path:t||this.resourcePath||"",crossOrigin:this.crossOrigin,requestHeader:this.requestHeader,manager:this.manager,ktx2Loader:this.ktx2Loader,meshoptDecoder:this.meshoptDecoder});d.fileLoader.setRequestHeader(this.requestHeader);for(let p=0;p=0&&void 0===l[y]&&console.warn('THREE.GLTFLoader: Unknown extension "'+y+'".')}}d.setExtensions(a),d.setPlugins(l),d.parse(n,r)}parseAsync(e,t){const n=this;return new Promise(function(r,s){n.parse(e,t,r,s)})}}function Tse(){let i={};return{get:function(e){return i[e]},add:function(e,t){i[e]=t},remove:function(e){delete i[e]},removeAll:function(){i={}}}}const xl={KHR_BINARY_GLTF:"KHR_binary_glTF",KHR_DRACO_MESH_COMPRESSION:"KHR_draco_mesh_compression",KHR_LIGHTS_PUNCTUAL:"KHR_lights_punctual",KHR_MATERIALS_CLEARCOAT:"KHR_materials_clearcoat",KHR_MATERIALS_IOR:"KHR_materials_ior",KHR_MATERIALS_SHEEN:"KHR_materials_sheen",KHR_MATERIALS_SPECULAR:"KHR_materials_specular",KHR_MATERIALS_TRANSMISSION:"KHR_materials_transmission",KHR_MATERIALS_IRIDESCENCE:"KHR_materials_iridescence",KHR_MATERIALS_UNLIT:"KHR_materials_unlit",KHR_MATERIALS_VOLUME:"KHR_materials_volume",KHR_TEXTURE_BASISU:"KHR_texture_basisu",KHR_TEXTURE_TRANSFORM:"KHR_texture_transform",KHR_MESH_QUANTIZATION:"KHR_mesh_quantization",KHR_MATERIALS_EMISSIVE_STRENGTH:"KHR_materials_emissive_strength",EXT_TEXTURE_WEBP:"EXT_texture_webp",EXT_MESHOPT_COMPRESSION:"EXT_meshopt_compression",EXT_MESH_GPU_INSTANCING:"EXT_mesh_gpu_instancing"};class Ese{constructor(e){this.parser=e,this.name=xl.KHR_LIGHTS_PUNCTUAL,this.cache={refs:{},uses:{}}}_markDefs(){const e=this.parser,t=this.parser.json.nodes||[];for(let n=0,r=t.length;n=0)throw new Error("THREE.GLTFLoader: setKTX2Loader must be called before loading KTX2 textures");return null}return t.loadTextureImage(e,s.source,a)}}class Use{constructor(e){this.parser=e,this.name=xl.EXT_TEXTURE_WEBP,this.isSupported=null}loadTexture(e){const t=this.name,n=this.parser,r=n.json,s=r.textures[e];if(!s.extensions||!s.extensions[t])return null;const a=s.extensions[t],l=r.images[a.source];let u=n.textureLoader;if(l.uri){const d=n.options.manager.getHandler(l.uri);null!==d&&(u=d)}return this.detectSupport().then(function(d){if(d)return n.loadTextureImage(e,a.source,u);if(r.extensionsRequired&&r.extensionsRequired.indexOf(t)>=0)throw new Error("THREE.GLTFLoader: WebP required by asset but unsupported.");return n.loadTexture(e)})}detectSupport(){return this.isSupported||(this.isSupported=new Promise(function(e){const t=new Image;t.src="data:image/webp;base64,UklGRiIAAABXRUJQVlA4IBYAAAAwAQCdASoBAAEADsD+JaQAA3AAAAAA",t.onload=t.onerror=function(){e(1===t.height)}})),this.isSupported}}class zse{constructor(e){this.name=xl.EXT_MESHOPT_COMPRESSION,this.parser=e}loadBufferView(e){const t=this.parser.json,n=t.bufferViews[e];if(n.extensions&&n.extensions[this.name]){const r=n.extensions[this.name],s=this.parser.getDependency("buffer",r.buffer),a=this.parser.options.meshoptDecoder;if(!a||!a.supported){if(t.extensionsRequired&&t.extensionsRequired.indexOf(this.name)>=0)throw new Error("THREE.GLTFLoader: setMeshoptDecoder must be called before loading compressed files");return null}return s.then(function(l){const p=r.count,y=r.byteStride,C=new Uint8Array(l,r.byteOffset||0,r.byteLength||0);return a.decodeGltfBufferAsync?a.decodeGltfBufferAsync(p,y,C,r.mode,r.filter).then(function(O){return O.buffer}):a.ready.then(function(){const O=new ArrayBuffer(p*y);return a.decodeGltfBuffer(new Uint8Array(O),p,y,C,r.mode,r.filter),O})})}return null}}class Hse{constructor(e){this.name=xl.EXT_MESH_GPU_INSTANCING,this.parser=e}createNodeMesh(e){const t=this.parser.json,n=t.nodes[e];if(!n.extensions||!n.extensions[this.name]||void 0===n.mesh)return null;const r=t.meshes[n.mesh];for(const d of r.primitives)if(d.mode!==VA.TRIANGLES&&d.mode!==VA.TRIANGLE_STRIP&&d.mode!==VA.TRIANGLE_FAN&&void 0!==d.mode)return null;const a=n.extensions[this.name].attributes,l=[],u={};for(const d in a)l.push(this.parser.getDependency("accessor",a[d]).then(p=>(u[d]=p,u[d])));return l.length<1?null:(l.push(this.parser.createNodeMesh(e)),Promise.all(l).then(d=>{const p=d.pop(),y=p.isGroup?p.children:[p],C=d[0].count,O=[];for(const Q of y){const W=new Jo,se=new Nt,ye=new Vc,Le=new Nt(1,1,1),we=new YN(Q.geometry,Q.material,C);for(let He=0;He-1,s=r?navigator.userAgent.match(/Firefox\/([0-9]+)\./)[1]:-1),this.textureLoader=typeof createImageBitmap>"u"||n||r&&s<98?new gre(this.options.manager):new Dre(this.options.manager),this.textureLoader.setCrossOrigin(this.options.crossOrigin),this.textureLoader.setRequestHeader(this.options.requestHeader),this.fileLoader=new qp(this.options.manager),this.fileLoader.setResponseType("arraybuffer"),"use-credentials"===this.options.crossOrigin&&this.fileLoader.setWithCredentials(!0)}setExtensions(e){this.extensions=e}setPlugins(e){this.plugins=e}parse(e,t){const n=this,r=this.json,s=this.extensions;this.cache.removeAll(),this._invokeAll(function(a){return a._markDefs&&a._markDefs()}),Promise.all(this._invokeAll(function(a){return a.beforeRoot&&a.beforeRoot()})).then(function(){return Promise.all([n.getDependencies("scene"),n.getDependencies("animation"),n.getDependencies("camera")])}).then(function(a){const l={scene:a[0][r.scene||0],scenes:a[0],animations:a[1],cameras:a[2],asset:r.asset,parser:n,userData:{}};uS(s,l,r),gy(l,r),Promise.all(n._invokeAll(function(u){return u.afterRoot&&u.afterRoot(l)})).then(function(){e(l)})}).catch(t)}_markDefs(){const e=this.json.nodes||[],t=this.json.skins||[],n=this.json.meshes||[];for(let r=0,s=t.length;r{const u=this.associations.get(a);null!=u&&this.associations.set(l,u);for(const[d,p]of a.children.entries())s(p,l.children[d])};return s(n,r),r.name+="_instance_"+e.uses[t]++,r}_invokeOne(e){const t=Object.values(this.plugins);t.push(this);for(let n=0;n=2&&se.setY(Ut,Et[Yt*u+1]),u>=3&&se.setZ(Ut,Et[Yt*u+2]),u>=4&&se.setW(Ut,Et[Yt*u+3]),u>=5)throw new Error("THREE.GLTFLoader: Unsupported itemSize in sparse BufferAttribute.")}}return se})}loadTexture(e){const t=this.json,s=t.textures[e].source,a=t.images[s];let l=this.textureLoader;if(a.uri){const u=this.options.manager.getHandler(a.uri);null!==u&&(l=u)}return this.loadTextureImage(e,s,l)}loadTextureImage(e,t,n){const r=this,s=this.json,a=s.textures[e],l=s.images[t],u=(l.uri||l.bufferView)+":"+a.sampler;if(this.textureCache[u])return this.textureCache[u];const d=this.loadImageSource(t,n).then(function(p){p.flipY=!1,p.name=a.name||l.name||"";const C=(s.samplers||{})[a.sampler]||{};return p.magFilter=AU[C.magFilter]||iu,p.minFilter=AU[C.minFilter]||o0,p.wrapS=mU[C.wrapS]||oy,p.wrapT=mU[C.wrapT]||oy,r.associations.set(p,{textures:e}),p}).catch(function(){return null});return this.textureCache[u]=d,d}loadImageSource(e,t){const r=this.json,s=this.options;if(void 0!==this.sourceCache[e])return this.sourceCache[e].then(y=>y.clone());const a=r.images[e],l=self.URL||self.webkitURL;let u=a.uri||"",d=!1;if(void 0!==a.bufferView)u=this.getDependency("bufferView",a.bufferView).then(function(y){d=!0;const C=new Blob([y],{type:a.mimeType});return u=l.createObjectURL(C),u});else if(void 0===a.uri)throw new Error("THREE.GLTFLoader: Image "+e+" is missing URI and bufferView");const p=Promise.resolve(u).then(function(y){return new Promise(function(C,O){let Q=C;!0===t.isImageBitmapLoader&&(Q=function(W){const se=new RA(W);se.needsUpdate=!0,C(se)}),t.load(aS.resolveURL(y,s.path),Q,void 0,O)})}).then(function(y){return!0===d&&l.revokeObjectURL(u),y.userData.mimeType=a.mimeType||function Jse(i){return i.search(/\.jpe?g($|\?)/i)>0||0===i.search(/^data\:image\/jpeg/)?"image/jpeg":i.search(/\.webp($|\?)/i)>0||0===i.search(/^data\:image\/webp/)?"image/webp":"image/png"}(a.uri),y}).catch(function(y){throw console.error("THREE.GLTFLoader: Couldn't load texture",u),y});return this.sourceCache[e]=p,p}assignTexture(e,t,n,r){const s=this;return this.getDependency("texture",n.index).then(function(a){if(!a)return null;if(void 0!==n.texCoord&&0!=n.texCoord&&!("aoMap"===t&&1==n.texCoord)&&console.warn("THREE.GLTFLoader: Custom UV set "+n.texCoord+" for texture "+t+" not yet supported."),s.extensions[xl.KHR_TEXTURE_TRANSFORM]){const l=void 0!==n.extensions?n.extensions[xl.KHR_TEXTURE_TRANSFORM]:void 0;if(l){const u=s.associations.get(a);a=s.extensions[xl.KHR_TEXTURE_TRANSFORM].extendTexture(a,l),s.associations.set(a,u)}}return void 0!==r&&(a.encoding=r),e[t]=a,a})}assignFinalMaterial(e){const t=e.geometry;let n=e.material;const r=void 0===t.attributes.tangent,s=void 0!==t.attributes.color,a=void 0===t.attributes.normal;if(e.isPoints){const l="PointsMaterial:"+n.uuid;let u=this.cache.get(l);u||(u=new z_,ru.prototype.copy.call(u,n),u.color.copy(n.color),u.map=n.map,u.sizeAttenuation=!1,this.cache.add(l,u)),n=u}else if(e.isLine){const l="LineBasicMaterial:"+n.uuid;let u=this.cache.get(l);u||(u=new su,ru.prototype.copy.call(u,n),u.color.copy(n.color),this.cache.add(l,u)),n=u}if(r||s||a){let l="ClonedMaterial:"+n.uuid+":";r&&(l+="derivative-tangents:"),s&&(l+="vertex-colors:"),a&&(l+="flat-shading:");let u=this.cache.get(l);u||(u=n.clone(),s&&(u.vertexColors=!0),a&&(u.flatShading=!0),r&&(u.normalScale&&(u.normalScale.y*=-1),u.clearcoatNormalScale&&(u.clearcoatNormalScale.y*=-1)),this.cache.add(l,u),this.associations.set(u,this.associations.get(n))),n=u}n.aoMap&&void 0===t.attributes.uv2&&void 0!==t.attributes.uv&&t.setAttribute("uv2",t.attributes.uv),e.material=n}getMaterialType(){return O4}loadMaterial(e){const t=this,r=this.extensions,s=this.json.materials[e];let a;const l={},d=[];if((s.extensions||{})[xl.KHR_MATERIALS_UNLIT]){const y=r[xl.KHR_MATERIALS_UNLIT];a=y.getMaterialType(),d.push(y.extendParams(l,s,t))}else{const y=s.pbrMetallicRoughness||{};if(l.color=new Lr(1,1,1),l.opacity=1,Array.isArray(y.baseColorFactor)){const C=y.baseColorFactor;l.color.fromArray(C),l.opacity=C[3]}void 0!==y.baseColorTexture&&d.push(t.assignTexture(l,"map",y.baseColorTexture,Pl)),l.metalness=void 0!==y.metallicFactor?y.metallicFactor:1,l.roughness=void 0!==y.roughnessFactor?y.roughnessFactor:1,void 0!==y.metallicRoughnessTexture&&(d.push(t.assignTexture(l,"metalnessMap",y.metallicRoughnessTexture)),d.push(t.assignTexture(l,"roughnessMap",y.metallicRoughnessTexture))),a=this._invokeOne(function(C){return C.getMaterialType&&C.getMaterialType(e)}),d.push(Promise.all(this._invokeAll(function(C){return C.extendMaterialParams&&C.extendMaterialParams(e,l)})))}!0===s.doubleSided&&(l.side=2);const p=s.alphaMode||"OPAQUE";if("BLEND"===p?(l.transparent=!0,l.depthWrite=!1):(l.transparent=!1,"MASK"===p&&(l.alphaTest=void 0!==s.alphaCutoff?s.alphaCutoff:.5)),void 0!==s.normalTexture&&a!==xh&&(d.push(t.assignTexture(l,"normalMap",s.normalTexture)),l.normalScale=new ji(1,1),void 0!==s.normalTexture.scale)){const y=s.normalTexture.scale;l.normalScale.set(y,y)}return void 0!==s.occlusionTexture&&a!==xh&&(d.push(t.assignTexture(l,"aoMap",s.occlusionTexture)),void 0!==s.occlusionTexture.strength&&(l.aoMapIntensity=s.occlusionTexture.strength)),void 0!==s.emissiveFactor&&a!==xh&&(l.emissive=(new Lr).fromArray(s.emissiveFactor)),void 0!==s.emissiveTexture&&a!==xh&&d.push(t.assignTexture(l,"emissiveMap",s.emissiveTexture,Pl)),Promise.all(d).then(function(){const y=new a(l);return s.name&&(y.name=s.name),gy(y,s),t.associations.set(y,{materials:e}),s.extensions&&uS(r,y,s),y})}createUniqueName(e){const t=Ll.sanitizeNodeName(e||"");let n=t;for(let r=1;this.nodeNamesUsed[n];++r)n=t+"_"+r;return this.nodeNamesUsed[n]=!0,n}loadGeometries(e){const t=this,n=this.extensions,r=this.primitiveCache;function s(l){return n[xl.KHR_DRACO_MESH_COMPRESSION].decodePrimitive(l,t).then(function(u){return _U(u,l,t)})}const a=[];for(let l=0,u=e.length;l0&&Yse(ye,s),ye.name=t.createUniqueName(s.name||"mesh_"+e),gy(ye,s),se.extensions&&uS(r,ye,se),t.assignFinalMaterial(ye),y.push(ye)}for(let O=0,Q=y.length;O1?new Xu:1===u.length?u[0]:new Bc,y!==u[0])for(let C=0,O=u.length;C{const y=new Map;for(const[C,O]of r.associations)(C instanceof ru||C instanceof RA)&&y.set(C,O);return p.traverse(C=>{const O=r.associations.get(C);null!=O&&y.set(C,O)}),y})(s),s})}}function _U(i,e,t){const n=e.attributes,r=[];function s(a,l){return t.getDependency("accessor",a).then(function(u){i.setAttribute(l,u)})}for(const a in n){const l=Ok[a]||a.toLowerCase();l in i.attributes||r.push(s(n[a],l))}if(void 0!==e.indices&&!i.index){const a=t.getDependency("accessor",e.indices).then(function(l){i.setIndex(l)});r.push(a)}return gy(i,e),function noe(i,e,t){const n=e.attributes,r=new cb;if(void 0===n.POSITION)return;{const l=t.json.accessors[n.POSITION],u=l.min,d=l.max;if(void 0===u||void 0===d)return void console.warn("THREE.GLTFLoader: Missing min/max properties for accessor POSITION.");if(r.set(new Nt(u[0],u[1],u[2]),new Nt(d[0],d[1],d[2])),l.normalized){const p=Lk(d2[l.componentType]);r.min.multiplyScalar(p),r.max.multiplyScalar(p)}}const s=e.targets;if(void 0!==s){const l=new Nt,u=new Nt;for(let d=0,p=s.length;d{this.decodeDracoFile(a,t).catch(r)},n,r)}decodeDracoFile(e,t,n,r){return this.decodeGeometry(e,{attributeIDs:n||this.defaultAttributeIDs,attributeTypes:r||this.defaultAttributeTypes,useUniqueIDs:!!n}).then(t)}decodeGeometry(e,t){const n=JSON.stringify(t);if(Nk.has(e)){const u=Nk.get(e);if(u.key===n)return u.promise;if(0===e.byteLength)throw new Error("THREE.DRACOLoader: Unable to re-decode a buffer with different settings. Buffer has already been transferred.")}let r;const s=this.workerNextTaskID++,l=this._getWorker(s,e.byteLength).then(u=>(r=u,new Promise((d,p)=>{r._callbacks[s]={resolve:d,reject:p},r.postMessage({type:"decode",id:s,taskConfig:t,buffer:e},[e])}))).then(u=>this._createGeometry(u.geometry));return l.catch(()=>!0).then(()=>{r&&s&&this._releaseTask(r,s)}),Nk.set(e,{key:n,promise:l}),l}_createGeometry(e){const t=new Co;e.index&&t.setIndex(new va(e.index.array,1));for(let n=0;n{n.load(e,r,void 0,s)})}preload(){return this._initDecoder(),this}_initDecoder(){if(this.decoderPending)return this.decoderPending;const e="object"!=typeof WebAssembly||"js"===this.decoderConfig.type,t=[];return e?t.push(this._loadLibrary("draco_decoder.js","text")):(t.push(this._loadLibrary("draco_wasm_wrapper.js","text")),t.push(this._loadLibrary("draco_decoder.wasm","arraybuffer"))),this.decoderPending=Promise.all(t).then(n=>{const r=n[0];e||(this.decoderConfig.wasmBinary=n[1]);const s=ioe.toString(),a=["/* draco decoder */",r,"","/* worker */",s.substring(s.indexOf("{")+1,s.lastIndexOf("}"))].join("\n");this.workerSourceURL=URL.createObjectURL(new Blob([a]))}),this.decoderPending}_getWorker(e,t){return this._initDecoder().then(()=>{if(this.workerPool.lengths._taskLoad?-1:1});const n=this.workerPool[this.workerPool.length-1];return n._taskCosts[e]=t,n._taskLoad+=t,n})}_releaseTask(e,t){e._taskLoad-=e._taskCosts[t],delete e._callbacks[t],delete e._taskCosts[t]}debug(){console.log("Task load: ",this.workerPool.map(e=>e._taskLoad))}dispose(){for(let e=0;e{const y=p.draco,C=new y.Decoder,O=new y.DecoderBuffer;O.Init(new Int8Array(u),u.byteLength);try{const Q=function t(a,l,u,d){const p=d.attributeIDs,y=d.attributeTypes;let C,O;const Q=l.GetEncodedGeometryType(u);if(Q===a.TRIANGULAR_MESH)C=new a.Mesh,O=l.DecodeBufferToMesh(u,C);else{if(Q!==a.POINT_CLOUD)throw new Error("THREE.DRACOLoader: Unexpected geometry type.");C=new a.PointCloud,O=l.DecodeBufferToPointCloud(u,C)}if(!O.ok()||0===C.ptr)throw new Error("THREE.DRACOLoader: Decoding failed: "+O.error_msg());const W={index:null,attributes:[]};for(const se in p){const ye=self[y[se]];let Le,we;if(d.useUniqueIDs)we=p[se],Le=l.GetAttributeByUniqueId(C,we);else{if(we=l.GetAttributeId(C,a[p[se]]),-1===we)continue;Le=l.GetAttribute(C,we)}W.attributes.push(r(a,l,C,se,ye,Le))}return Q===a.TRIANGULAR_MESH&&(W.index=function n(a,l,u){const p=3*u.num_faces(),y=4*p,C=a._malloc(y);l.GetTrianglesUInt32Array(u,y,C);const O=new Uint32Array(a.HEAPF32.buffer,C,p).slice();return a._free(C),{array:O,itemSize:1}}(a,l,C)),a.destroy(C),W}(y,C,O,d),W=Q.attributes.map(se=>se.array.buffer);Q.index&&W.push(Q.index.array.buffer),self.postMessage({type:"decode",id:l.id,geometry:Q},W)}catch(Q){console.error(Q),self.postMessage({type:"error",id:l.id,error:Q.message})}finally{y.destroy(O),y.destroy(C)}})}}}class roe{constructor(e,t,n){this.clipPlanes=e,this.EVENT_DATA_ID=t,this.GEOMETRIES_ID=n}loadOBJGeometry(e,t,n,r,s){n=n??4302580;const a=new cU;return new Promise((l,u)=>{a.load(e,d=>{const p=this.processOBJ(d,t,n,r,s);l({object:p})},null,d=>{u(d)})})}parseOBJGeometry(e,t){const r=(new cU).parse(e);return this.processOBJ(r,t,4302580,!1,!1)}processOBJ(e,t,n,r,s){return e.name=t,e.userData={name:t},this.setObjFlat(e,n,r,s)}setObjFlat(e,t,n,r){const s=new Lm({color:t,shininess:0,wireframe:!1,clippingPlanes:this.clipPlanes,clipIntersection:!0,clipShadows:!1,side:n?2:0,flatShading:r});return e.traverse(a=>{a instanceof Pa?(a.name=e.name,a.userData=e.userData,a.userData.size=this.getObjectSize(a),a.material instanceof ru&&(a.material.dispose(),a.material=s),a.castShadow=!1,a.receiveShadow=!1):a instanceof UA&&a.material instanceof su&&a.material.color.set(t)}),e}parsePhnxScene(e,t){const n=new $4,r=new Uk;r.setDecoderPath(`https://cdn.jsdelivr.net/npm/three@0.${Cw}.0/examples/jsm/libs/draco/`),n.setDRACOLoader(r);const s=JSON.stringify(e,null,2);return new Promise((a,l)=>{n.parse(s,"",u=>{const d=u.scene.getObjectByName(this.EVENT_DATA_ID),p=u.scene.getObjectByName(this.GEOMETRIES_ID);t(d,p),a()},u=>{l(u)})})}loadGLTFGeometry(e,t,n,r,s){const a=new $4,l=new Uk;return l.setDecoderPath(`https://cdn.jsdelivr.net/npm/three@0.${Cw}.0/examples/jsm/libs/draco/`),a.setDRACOLoader(l),new Promise((u,d)=>{a.load(e,p=>{var y;const C=[];for(const O of p.scenes){O.visible=null!==(y=O.userData.visible)&&void 0!==y?y:s;const Q=this.processGLTFSceneName(O.name,n),W={},se=(ye,Le,we)=>{const He=Le.clone().multiply(ye.matrix);if(ye instanceof Pa){const gt=ye.material.id;W[gt]||(W[gt]={material:ye.material,geoms:[],renderOrder:-we}),W[gt].geoms.push(ye.geometry.clone().applyMatrix4(He))}for(const gt of ye.children)se(gt,He,we+1)};se(O,new Jo,0),O.remove(...O.children);for(const ye of Object.values(W)){const Le=new Pa(Pk(ye.geoms),ye.material);Le.renderOrder=ye.renderOrder,O.add(Le)}this.processGeometry(O,t??Q.name,r,!0),C.push({object:O,menuNodeName:n??Q.menuNodeName})}u(C)},void 0,p=>{d(p)})})}parseGLTFGeometry(e,t){const n=new $4,r=new Uk;return r.setDecoderPath(`https://cdn.jsdelivr.net/npm/three@0.${Cw}.0/examples/jsm/libs/draco/`),n.setDRACOLoader(r),new Promise((s,a)=>{n.parse(e,"",l=>{const u=[];for(const d of l.scenes){d.visible=d.userData.visible;const p=this.processGLTFSceneName(d.name);this.processGeometry(d,t??p.name),u.push({object:d})}s(u)},l=>{a(l)})})}processGLTFSceneName(e,t){if(e){const n=e.split("_>_");t&&n.unshift(t);const r=n.join(" > ");return n.pop(),{name:r,menuNodeName:n.join(" > ")}}}loadJSONGeometry(e,t,n,r){const s=new Tre;switch(typeof e){case"string":return new Promise((a,l)=>{s.load(e,u=>{this.processGeometry(u,t,n,r),a({object:u})},null,u=>{l(u)})});case"object":return new Promise(a=>{const l=s.parse(e);this.processGeometry(l,t,n,r),a({object:l})})}}processGeometry(e,t,n,r){e.name=t,n&&e.scale.setScalar(n),e.traverse(s=>{var a;if(s instanceof Pa&&(s.name=s.userData.name=t,s.userData.size=this.getObjectSize(s),s.material instanceof ru)){const l=s.material.color?s.material.color:3135121,u=r?2:s.material.side;s.material.dispose();let d=!1;e.userData.opacity&&(d=!0),s.material=new Lm({color:l,shininess:0,side:u,transparent:d,opacity:null!==(a=e.userData.opacity)&&void 0!==a?a:1}),s.material.clippingPlanes=this.clipPlanes,s.material.clipIntersection=!0,s.material.clipShadows=!1}})}getObjectSize(e){var t,n;const r=new Nt;return e.geometry.computeBoundingBox(),null===(n=null===(t=e.geometry)||void 0===t?void 0:t.boundingBox)||void 0===n||n.getSize(r),JSON.stringify(r,null,2)}}let _y=(()=>{class i{static getPrettySymbol(t){return Object.keys(i.symbols).find(r=>i.symbols[r].includes(t))||t}static getPrettyParams(t){const n=Object.assign({},t);for(const r of Object.keys(n)){const s=i.getPrettySymbol(r);s!==r&&(n[s]=n[r],delete n[r])}if(delete n.pos,n?.dparams){const r={};return r.\u03b8=n.dparams[3],r.\u03d5=n.dparams[2],r["|p|"]=Math.abs(1/n.dparams[4]),r.q=Math.sign(1/n.dparams[4]),r.d0=n.dparams[0],r.z0=n.dparams[1],delete n.dparams,Object.assign(Object.assign({},n),r)}return n}}return i.symbols={\u03b8:["theta"],\u03d5:["phi"],pT:["pt"],\u{1d6d8}2:["chi2"],\u03b7:["eta"],q:["charge"],NDOF:["ndof"],DOF:["dof"],Energy:["energy"],ET:["et"],"|p|":["momentum","mom"]},i})();class f2{constructor(e){this.value=e,this.callbacks=[]}update(e){this.value=e,this.callbacks.forEach(t=>t(e))}onUpdate(e){this.callbacks.push(e)}}class soe{constructor(){this.activeObject=new f2(""),this.onTouchMove=e=>{const t=this.intersectObject(e);if(t){if(this.ignoreList.includes(t.type))return;this.outlinePass.selectedObjects=[t]}},this.onDocumentMouseDown=()=>{const e=this.outlinePass.selectedObjects[0];if(e){this.selectedObject.name=e.name,this.selectedObject.attributes.splice(0,this.selectedObject.attributes.length),this.activeObject.update(e.uuid);const t=_y.getPrettyParams(e.userData);for(const s of Object.keys(t))this.selectedObject.attributes.push({attributeName:s,attributeValue:t[s]});const n=Object.keys(e.userData).map(s=>{if(["string","number"].includes(typeof e.userData[s]))return s+"="+e.userData[s]}).filter(s=>s),r=e.name+(n.length>0?" with "+n.join(", "):"");r&&this.infoLogger.add(r,"Clicked")}},this.onTouchDown=e=>{e.preventDefault(),this.onTouchMove(e.targetTouches[0]),this.onDocumentMouseDown()},this.isInit=!1,this.ignoreList=[(new N4).type,(new h2).type,(new Tk).type]}init(e,t,n,r){this.camera=e,this.scene=t,this.isInit=!0,this.infoLogger=r,this.effectsManager=n,this.outlinePass=this.effectsManager.addOutlinePassForSelection()}setSelectedObject(e){this.selectedObject=e}getActiveObjectId(){return this.activeObject}setSelecting(e){this.isInit&&(e?this.enableSelecting():this.disableSelecting())}enableSelecting(){document.getElementById("three-canvas").addEventListener("mousemove",this.onTouchMove,!0),document.getElementById("three-canvas").addEventListener("click",this.onDocumentMouseDown,!0),document.getElementById("three-canvas").addEventListener("touchstart",this.onTouchDown),this.preSelectionAntialias=this.effectsManager.antialiasing,this.effectsManager.setAntialiasing(!1)}disableSelecting(){document.getElementById("three-canvas").removeEventListener("mousemove",this.onTouchMove,!0),document.getElementById("three-canvas").removeEventListener("click",this.onDocumentMouseDown,!0),document.getElementById("three-canvas").removeEventListener("touchstart",this.onTouchDown),this.outlinePass.selectedObjects=[],this.effectsManager.setAntialiasing(this.preSelectionAntialias)}intersectObject(e){var t;null===(t=e.preventDefault)||void 0===t||t.call(e);const n=new ji,r=this.effectsManager.composer.renderer.domElement;n.x=e.clientX/r.clientWidth*2-1,n.y=-e.clientY/r.clientHeight*2+1;const s=new Qre;s.setFromCamera(n,this.camera),s.params.Line.threshold=3;const a=s.intersectObjects(this.scene.children,!0);if(a.length>0)return a[0].object}highlightObject(e,t){const n=t.getObjectByProperty("uuid",e);n&&(this.outlinePass.selectedObjects=[n])}}class ooe extends k4{constructor(e,t={}){const n=t.font;if(void 0===n)super();else{const r=n.generateShapes(e,t.size);t.depth=void 0!==t.height?t.height:50,void 0===t.bevelThickness&&(t.bevelThickness=10),void 0===t.bevelSize&&(t.bevelSize=8),void 0===t.bevelEnabled&&(t.bevelEnabled=!1),super(r,t)}this.type="TextGeometry"}}class yU{constructor(e){this.isFont=!0,this.type="Font",this.data=e}generateShapes(e,t=100){const n=[],r=function aoe(i,e,t){const n=Array.from(i),r=e/t.resolution,s=(t.boundingBox.yMax-t.boundingBox.yMin+t.underlineThickness)*r,a=[];let l=0,u=0;for(let d=0;dt,r=0e;return n&&r}static etaToTheta(e){return 2*Math.atan(Math.pow(Math.E,-e))}static thetaToEta(e){return-Math.log(Math.tan(e/2))}static sphericalToCartesian(e,t,n){const r=new Nt;return r.setFromSphericalCoords(e,t,n),r.applyQuaternion(Ff.atlasQuaternion()),r}static etaPhiToCartesian(e,t,n){const r=new Nt;return r.setFromSphericalCoords(e,this.etaToTheta(t),n),r.applyQuaternion(Ff.atlasQuaternion()),r}static atlasQuaternion(){const e=new Nt(0,1,0),t=new Nt(0,0,1),n=new Vc;n.setFromUnitVectors(e,t);const r=new Vc;return r.setFromAxisAngle(new Nt(0,1,0),Math.PI/2),n.multiply(r),n}}const coe=JSON.parse('{"glyphs":{"0":{"x_min":73,"x_max":715,"ha":792,"o":"m 394 -29 q 153 129 242 -29 q 73 479 73 272 q 152 829 73 687 q 394 989 241 989 q 634 829 545 989 q 715 479 715 684 q 635 129 715 270 q 394 -29 546 -29 m 394 89 q 546 211 489 89 q 598 479 598 322 q 548 748 598 640 q 394 871 491 871 q 241 748 298 871 q 190 479 190 637 q 239 211 190 319 q 394 89 296 89 "},"1":{"x_min":215.671875,"x_max":574,"ha":792,"o":"m 574 0 l 442 0 l 442 697 l 215 697 l 215 796 q 386 833 330 796 q 475 986 447 875 l 574 986 l 574 0 "},"2":{"x_min":59,"x_max":731,"ha":792,"o":"m 731 0 l 59 0 q 197 314 59 188 q 457 487 199 315 q 598 691 598 580 q 543 819 598 772 q 411 867 488 867 q 272 811 328 867 q 209 630 209 747 l 81 630 q 182 901 81 805 q 408 986 271 986 q 629 909 536 986 q 731 694 731 826 q 613 449 731 541 q 378 316 495 383 q 201 122 235 234 l 731 122 l 731 0 "},"3":{"x_min":54,"x_max":737,"ha":792,"o":"m 737 284 q 635 55 737 141 q 399 -25 541 -25 q 156 52 248 -25 q 54 308 54 140 l 185 308 q 245 147 185 202 q 395 96 302 96 q 539 140 484 96 q 602 280 602 190 q 510 429 602 390 q 324 454 451 454 l 324 565 q 487 584 441 565 q 565 719 565 617 q 515 835 565 791 q 395 879 466 879 q 255 824 307 879 q 203 661 203 769 l 78 661 q 166 909 78 822 q 387 992 250 992 q 603 921 513 992 q 701 723 701 844 q 669 607 701 656 q 578 524 637 558 q 696 434 655 499 q 737 284 737 369 "},"4":{"x_min":48,"x_max":742.453125,"ha":792,"o":"m 742 243 l 602 243 l 602 0 l 476 0 l 476 243 l 48 243 l 48 368 l 476 958 l 602 958 l 602 354 l 742 354 l 742 243 m 476 354 l 476 792 l 162 354 l 476 354 "},"5":{"x_min":54.171875,"x_max":738,"ha":792,"o":"m 738 314 q 626 60 738 153 q 382 -23 526 -23 q 155 47 248 -23 q 54 256 54 125 l 183 256 q 259 132 204 174 q 382 91 314 91 q 533 149 471 91 q 602 314 602 213 q 538 469 602 411 q 386 528 475 528 q 284 506 332 528 q 197 439 237 484 l 81 439 l 159 958 l 684 958 l 684 840 l 254 840 l 214 579 q 306 627 258 612 q 407 643 354 643 q 636 552 540 643 q 738 314 738 457 "},"6":{"x_min":53,"x_max":739,"ha":792,"o":"m 739 312 q 633 62 739 162 q 400 -31 534 -31 q 162 78 257 -31 q 53 439 53 206 q 178 859 53 712 q 441 986 284 986 q 643 912 559 986 q 732 713 732 833 l 601 713 q 544 830 594 786 q 426 875 494 875 q 268 793 331 875 q 193 517 193 697 q 301 597 240 570 q 427 624 362 624 q 643 540 552 624 q 739 312 739 451 m 603 298 q 540 461 603 400 q 404 516 484 516 q 268 461 323 516 q 207 300 207 401 q 269 137 207 198 q 405 83 325 83 q 541 137 486 83 q 603 298 603 197 "},"7":{"x_min":58.71875,"x_max":730.953125,"ha":792,"o":"m 730 839 q 469 448 560 641 q 335 0 378 255 l 192 0 q 328 441 235 252 q 593 830 421 630 l 58 830 l 58 958 l 730 958 l 730 839 "},"8":{"x_min":55,"x_max":736,"ha":792,"o":"m 571 527 q 694 424 652 491 q 736 280 736 358 q 648 71 736 158 q 395 -26 551 -26 q 142 69 238 -26 q 55 279 55 157 q 96 425 55 359 q 220 527 138 491 q 120 615 153 562 q 88 726 88 668 q 171 904 88 827 q 395 986 261 986 q 618 905 529 986 q 702 727 702 830 q 670 616 702 667 q 571 527 638 565 m 394 565 q 519 610 475 565 q 563 717 563 655 q 521 823 563 781 q 392 872 474 872 q 265 824 312 872 q 224 720 224 783 q 265 613 224 656 q 394 565 312 565 m 395 91 q 545 150 488 91 q 597 280 597 204 q 546 408 597 355 q 395 465 492 465 q 244 408 299 465 q 194 280 194 356 q 244 150 194 203 q 395 91 299 91 "},"9":{"x_min":53,"x_max":739,"ha":792,"o":"m 739 524 q 619 94 739 241 q 362 -32 516 -32 q 150 47 242 -32 q 59 244 59 126 l 191 244 q 246 129 191 176 q 373 82 301 82 q 526 161 466 82 q 597 440 597 255 q 363 334 501 334 q 130 432 216 334 q 53 650 53 521 q 134 880 53 786 q 383 986 226 986 q 659 841 566 986 q 739 524 739 719 m 388 449 q 535 514 480 449 q 585 658 585 573 q 535 805 585 744 q 388 873 480 873 q 242 809 294 873 q 191 658 191 745 q 239 514 191 572 q 388 449 292 449 "},"\u03bf":{"x_min":0,"x_max":712,"ha":815,"o":"m 356 -25 q 96 88 192 -25 q 0 368 0 201 q 92 642 0 533 q 356 761 192 761 q 617 644 517 761 q 712 368 712 533 q 619 91 712 201 q 356 -25 520 -25 m 356 85 q 527 175 465 85 q 583 369 583 255 q 528 562 583 484 q 356 651 466 651 q 189 560 250 651 q 135 369 135 481 q 187 177 135 257 q 356 85 250 85 "},"S":{"x_min":0,"x_max":788,"ha":890,"o":"m 788 291 q 662 54 788 144 q 397 -26 550 -26 q 116 68 226 -26 q 0 337 0 168 l 131 337 q 200 152 131 220 q 384 85 269 85 q 557 129 479 85 q 650 270 650 183 q 490 429 650 379 q 194 513 341 470 q 33 739 33 584 q 142 964 33 881 q 388 1041 242 1041 q 644 957 543 1041 q 756 716 756 867 l 625 716 q 561 874 625 816 q 395 933 497 933 q 243 891 309 933 q 164 759 164 841 q 325 609 164 656 q 625 526 475 568 q 788 291 788 454 "},"\xa6":{"x_min":343,"x_max":449,"ha":792,"o":"m 449 462 l 343 462 l 343 986 l 449 986 l 449 462 m 449 -242 l 343 -242 l 343 280 l 449 280 l 449 -242 "},"/":{"x_min":183.25,"x_max":608.328125,"ha":792,"o":"m 608 1041 l 266 -129 l 183 -129 l 520 1041 l 608 1041 "},"\u03a4":{"x_min":-0.4375,"x_max":777.453125,"ha":839,"o":"m 777 893 l 458 893 l 458 0 l 319 0 l 319 892 l 0 892 l 0 1013 l 777 1013 l 777 893 "},"y":{"x_min":0,"x_max":684.78125,"ha":771,"o":"m 684 738 l 388 -83 q 311 -216 356 -167 q 173 -279 252 -279 q 97 -266 133 -279 l 97 -149 q 132 -155 109 -151 q 168 -160 155 -160 q 240 -114 213 -160 q 274 -26 248 -98 l 0 738 l 137 737 l 341 139 l 548 737 l 684 738 "},"\u03a0":{"x_min":0,"x_max":803,"ha":917,"o":"m 803 0 l 667 0 l 667 886 l 140 886 l 140 0 l 0 0 l 0 1012 l 803 1012 l 803 0 "},"\u0390":{"x_min":-111,"x_max":339,"ha":361,"o":"m 339 800 l 229 800 l 229 925 l 339 925 l 339 800 m -1 800 l -111 800 l -111 925 l -1 925 l -1 800 m 284 3 q 233 -10 258 -5 q 182 -15 207 -15 q 85 26 119 -15 q 42 200 42 79 l 42 737 l 167 737 l 168 215 q 172 141 168 157 q 226 101 183 101 q 248 103 239 101 q 284 112 257 104 l 284 3 m 302 1040 l 113 819 l 30 819 l 165 1040 l 302 1040 "},"g":{"x_min":0,"x_max":686,"ha":838,"o":"m 686 34 q 586 -213 686 -121 q 331 -306 487 -306 q 131 -252 216 -306 q 31 -84 31 -190 l 155 -84 q 228 -174 166 -138 q 345 -207 284 -207 q 514 -109 454 -207 q 564 89 564 -27 q 461 6 521 36 q 335 -23 401 -23 q 88 100 184 -23 q 0 370 0 215 q 87 634 0 522 q 330 758 183 758 q 457 728 398 758 q 564 644 515 699 l 564 737 l 686 737 l 686 34 m 582 367 q 529 560 582 481 q 358 652 468 652 q 189 561 250 652 q 135 369 135 482 q 189 176 135 255 q 361 85 251 85 q 529 176 468 85 q 582 367 582 255 "},"\xb2":{"x_min":0,"x_max":442,"ha":539,"o":"m 442 383 l 0 383 q 91 566 0 492 q 260 668 176 617 q 354 798 354 727 q 315 875 354 845 q 227 905 277 905 q 136 869 173 905 q 99 761 99 833 l 14 761 q 82 922 14 864 q 232 974 141 974 q 379 926 316 974 q 442 797 442 878 q 351 635 442 704 q 183 539 321 611 q 92 455 92 491 l 442 455 l 442 383 "},"\u2013":{"x_min":0,"x_max":705.5625,"ha":803,"o":"m 705 334 l 0 334 l 0 410 l 705 410 l 705 334 "},"\u039a":{"x_min":0,"x_max":819.5625,"ha":893,"o":"m 819 0 l 650 0 l 294 509 l 139 356 l 139 0 l 0 0 l 0 1013 l 139 1013 l 139 526 l 626 1013 l 809 1013 l 395 600 l 819 0 "},"\u0192":{"x_min":-46.265625,"x_max":392,"ha":513,"o":"m 392 651 l 259 651 l 79 -279 l -46 -278 l 134 651 l 14 651 l 14 751 l 135 751 q 151 948 135 900 q 304 1041 185 1041 q 334 1040 319 1041 q 392 1034 348 1039 l 392 922 q 337 931 360 931 q 271 883 287 931 q 260 793 260 853 l 260 751 l 392 751 l 392 651 "},"e":{"x_min":0,"x_max":714,"ha":813,"o":"m 714 326 l 140 326 q 200 157 140 227 q 359 87 260 87 q 488 130 431 87 q 561 245 545 174 l 697 245 q 577 48 670 123 q 358 -26 484 -26 q 97 85 195 -26 q 0 363 0 197 q 94 642 0 529 q 358 765 195 765 q 626 627 529 765 q 714 326 714 503 m 576 429 q 507 583 564 522 q 355 650 445 650 q 206 583 266 650 q 140 429 152 522 l 576 429 "},"\u03cc":{"x_min":0,"x_max":712,"ha":815,"o":"m 356 -25 q 94 91 194 -25 q 0 368 0 202 q 92 642 0 533 q 356 761 192 761 q 617 644 517 761 q 712 368 712 533 q 619 91 712 201 q 356 -25 520 -25 m 356 85 q 527 175 465 85 q 583 369 583 255 q 528 562 583 484 q 356 651 466 651 q 189 560 250 651 q 135 369 135 481 q 187 177 135 257 q 356 85 250 85 m 576 1040 l 387 819 l 303 819 l 438 1040 l 576 1040 "},"J":{"x_min":0,"x_max":588,"ha":699,"o":"m 588 279 q 287 -26 588 -26 q 58 73 126 -26 q 0 327 0 158 l 133 327 q 160 172 133 227 q 288 96 198 96 q 426 171 391 96 q 449 336 449 219 l 449 1013 l 588 1013 l 588 279 "},"\xbb":{"x_min":-1,"x_max":503,"ha":601,"o":"m 503 302 l 280 136 l 281 256 l 429 373 l 281 486 l 280 608 l 503 440 l 503 302 m 221 302 l 0 136 l 0 255 l 145 372 l 0 486 l -1 608 l 221 440 l 221 302 "},"\xa9":{"x_min":-3,"x_max":1008,"ha":1106,"o":"m 502 -7 q 123 151 263 -7 q -3 501 -3 294 q 123 851 -3 706 q 502 1011 263 1011 q 881 851 739 1011 q 1008 501 1008 708 q 883 151 1008 292 q 502 -7 744 -7 m 502 60 q 830 197 709 60 q 940 501 940 322 q 831 805 940 681 q 502 944 709 944 q 174 805 296 944 q 65 501 65 680 q 173 197 65 320 q 502 60 294 60 m 741 394 q 661 246 731 302 q 496 190 591 190 q 294 285 369 190 q 228 497 228 370 q 295 714 228 625 q 499 813 370 813 q 656 762 588 813 q 733 625 724 711 l 634 625 q 589 704 629 673 q 498 735 550 735 q 377 666 421 735 q 334 504 334 597 q 374 340 334 408 q 490 272 415 272 q 589 304 549 272 q 638 394 628 337 l 741 394 "},"\u03ce":{"x_min":0,"x_max":922,"ha":1030,"o":"m 687 1040 l 498 819 l 415 819 l 549 1040 l 687 1040 m 922 339 q 856 97 922 203 q 650 -26 780 -26 q 538 9 587 -26 q 461 103 489 44 q 387 12 436 46 q 277 -22 339 -22 q 69 97 147 -22 q 0 338 0 202 q 45 551 0 444 q 161 737 84 643 l 302 737 q 175 552 219 647 q 124 336 124 446 q 155 179 124 248 q 275 88 197 88 q 375 163 341 88 q 400 294 400 219 l 400 572 l 524 572 l 524 294 q 561 135 524 192 q 643 88 591 88 q 762 182 719 88 q 797 341 797 257 q 745 555 797 450 q 619 737 705 637 l 760 737 q 874 551 835 640 q 922 339 922 444 "},"^":{"x_min":193.0625,"x_max":598.609375,"ha":792,"o":"m 598 772 l 515 772 l 395 931 l 277 772 l 193 772 l 326 1013 l 462 1013 l 598 772 "},"\xab":{"x_min":0,"x_max":507.203125,"ha":604,"o":"m 506 136 l 284 302 l 284 440 l 506 608 l 507 485 l 360 371 l 506 255 l 506 136 m 222 136 l 0 302 l 0 440 l 222 608 l 221 486 l 73 373 l 222 256 l 222 136 "},"D":{"x_min":0,"x_max":828,"ha":935,"o":"m 389 1013 q 714 867 593 1013 q 828 521 828 729 q 712 161 828 309 q 382 0 587 0 l 0 0 l 0 1013 l 389 1013 m 376 124 q 607 247 523 124 q 681 510 681 355 q 607 771 681 662 q 376 896 522 896 l 139 896 l 139 124 l 376 124 "},"\u2219":{"x_min":0,"x_max":142,"ha":239,"o":"m 142 585 l 0 585 l 0 738 l 142 738 l 142 585 "},"\xff":{"x_min":0,"x_max":47,"ha":125,"o":"m 47 3 q 37 -7 47 -7 q 28 0 30 -7 q 39 -4 32 -4 q 45 3 45 -1 l 37 0 q 28 9 28 0 q 39 19 28 19 l 47 16 l 47 19 l 47 3 m 37 1 q 44 8 44 1 q 37 16 44 16 q 30 8 30 16 q 37 1 30 1 m 26 1 l 23 22 l 14 0 l 3 22 l 3 3 l 0 25 l 13 1 l 22 25 l 26 1 "},"w":{"x_min":0,"x_max":1009.71875,"ha":1100,"o":"m 1009 738 l 783 0 l 658 0 l 501 567 l 345 0 l 222 0 l 0 738 l 130 738 l 284 174 l 432 737 l 576 738 l 721 173 l 881 737 l 1009 738 "},"$":{"x_min":0,"x_max":700,"ha":793,"o":"m 664 717 l 542 717 q 490 825 531 785 q 381 872 450 865 l 381 551 q 620 446 540 522 q 700 241 700 370 q 618 45 700 116 q 381 -25 536 -25 l 381 -152 l 307 -152 l 307 -25 q 81 62 162 -25 q 0 297 0 149 l 124 297 q 169 146 124 204 q 307 81 215 89 l 307 441 q 80 536 148 469 q 13 725 13 603 q 96 910 13 839 q 307 982 180 982 l 307 1077 l 381 1077 l 381 982 q 574 917 494 982 q 664 717 664 845 m 307 565 l 307 872 q 187 831 233 872 q 142 724 142 791 q 180 618 142 656 q 307 565 218 580 m 381 76 q 562 237 562 96 q 517 361 562 313 q 381 423 472 409 l 381 76 "},"\\\\":{"x_min":-0.015625,"x_max":425.0625,"ha":522,"o":"m 425 -129 l 337 -129 l 0 1041 l 83 1041 l 425 -129 "},"\xb5":{"x_min":0,"x_max":697.21875,"ha":747,"o":"m 697 -4 q 629 -14 658 -14 q 498 97 513 -14 q 422 9 470 41 q 313 -23 374 -23 q 207 4 258 -23 q 119 81 156 32 l 119 -278 l 0 -278 l 0 738 l 124 738 l 124 343 q 165 173 124 246 q 308 83 216 83 q 452 178 402 83 q 493 359 493 255 l 493 738 l 617 738 l 617 214 q 623 136 617 160 q 673 92 637 92 q 697 96 684 92 l 697 -4 "},"\u0399":{"x_min":42,"x_max":181,"ha":297,"o":"m 181 0 l 42 0 l 42 1013 l 181 1013 l 181 0 "},"\u038e":{"x_min":0,"x_max":1144.5,"ha":1214,"o":"m 1144 1012 l 807 416 l 807 0 l 667 0 l 667 416 l 325 1012 l 465 1012 l 736 533 l 1004 1012 l 1144 1012 m 277 1040 l 83 799 l 0 799 l 140 1040 l 277 1040 "},"\u2019":{"x_min":0,"x_max":139,"ha":236,"o":"m 139 851 q 102 737 139 784 q 0 669 65 690 l 0 734 q 59 787 42 741 q 72 873 72 821 l 0 873 l 0 1013 l 139 1013 l 139 851 "},"\u039d":{"x_min":0,"x_max":801,"ha":915,"o":"m 801 0 l 651 0 l 131 822 l 131 0 l 0 0 l 0 1013 l 151 1013 l 670 191 l 670 1013 l 801 1013 l 801 0 "},"-":{"x_min":8.71875,"x_max":350.390625,"ha":478,"o":"m 350 317 l 8 317 l 8 428 l 350 428 l 350 317 "},"Q":{"x_min":0,"x_max":968,"ha":1072,"o":"m 954 5 l 887 -79 l 744 35 q 622 -11 687 2 q 483 -26 556 -26 q 127 130 262 -26 q 0 504 0 279 q 127 880 0 728 q 484 1041 262 1041 q 841 884 708 1041 q 968 507 968 735 q 933 293 968 398 q 832 104 899 188 l 954 5 m 723 191 q 802 330 777 248 q 828 499 828 412 q 744 790 828 673 q 483 922 650 922 q 228 791 322 922 q 142 505 142 673 q 227 221 142 337 q 487 91 323 91 q 632 123 566 91 l 520 215 l 587 301 l 723 191 "},"\u03c2":{"x_min":1,"x_max":676.28125,"ha":740,"o":"m 676 460 l 551 460 q 498 595 542 546 q 365 651 448 651 q 199 578 263 651 q 136 401 136 505 q 266 178 136 241 q 508 106 387 142 q 640 -50 640 62 q 625 -158 640 -105 q 583 -278 611 -211 l 465 -278 q 498 -182 490 -211 q 515 -80 515 -126 q 381 12 515 -15 q 134 91 197 51 q 1 388 1 179 q 100 651 1 542 q 354 761 199 761 q 587 680 498 761 q 676 460 676 599 "},"M":{"x_min":0,"x_max":954,"ha":1067,"o":"m 954 0 l 819 0 l 819 869 l 537 0 l 405 0 l 128 866 l 128 0 l 0 0 l 0 1013 l 200 1013 l 472 160 l 757 1013 l 954 1013 l 954 0 "},"\u03a8":{"x_min":0,"x_max":1006,"ha":1094,"o":"m 1006 678 q 914 319 1006 429 q 571 200 814 200 l 571 0 l 433 0 l 433 200 q 92 319 194 200 q 0 678 0 429 l 0 1013 l 139 1013 l 139 679 q 191 417 139 492 q 433 326 255 326 l 433 1013 l 571 1013 l 571 326 l 580 326 q 813 423 747 326 q 868 679 868 502 l 868 1013 l 1006 1013 l 1006 678 "},"C":{"x_min":0,"x_max":886,"ha":944,"o":"m 886 379 q 760 87 886 201 q 455 -26 634 -26 q 112 136 236 -26 q 0 509 0 283 q 118 882 0 737 q 469 1041 245 1041 q 748 955 630 1041 q 879 708 879 859 l 745 708 q 649 862 724 805 q 473 920 573 920 q 219 791 312 920 q 136 509 136 675 q 217 229 136 344 q 470 99 311 99 q 672 179 591 99 q 753 379 753 259 l 886 379 "},"!":{"x_min":0,"x_max":138,"ha":236,"o":"m 138 684 q 116 409 138 629 q 105 244 105 299 l 33 244 q 16 465 33 313 q 0 684 0 616 l 0 1013 l 138 1013 l 138 684 m 138 0 l 0 0 l 0 151 l 138 151 l 138 0 "},"{":{"x_min":0,"x_max":480.5625,"ha":578,"o":"m 480 -286 q 237 -213 303 -286 q 187 -45 187 -159 q 194 48 187 -15 q 201 141 201 112 q 164 264 201 225 q 0 314 118 314 l 0 417 q 164 471 119 417 q 201 605 201 514 q 199 665 201 644 q 193 772 193 769 q 241 941 193 887 q 480 1015 308 1015 l 480 915 q 336 866 375 915 q 306 742 306 828 q 310 662 306 717 q 314 577 314 606 q 288 452 314 500 q 176 365 256 391 q 289 275 257 337 q 314 143 314 226 q 313 84 314 107 q 310 -11 310 -5 q 339 -131 310 -94 q 480 -182 377 -182 l 480 -286 "},"X":{"x_min":-0.015625,"x_max":854.15625,"ha":940,"o":"m 854 0 l 683 0 l 423 409 l 166 0 l 0 0 l 347 519 l 18 1013 l 186 1013 l 428 637 l 675 1013 l 836 1013 l 504 520 l 854 0 "},"#":{"x_min":0,"x_max":963.890625,"ha":1061,"o":"m 963 690 l 927 590 l 719 590 l 655 410 l 876 410 l 840 310 l 618 310 l 508 -3 l 393 -2 l 506 309 l 329 310 l 215 -2 l 102 -3 l 212 310 l 0 310 l 36 410 l 248 409 l 312 590 l 86 590 l 120 690 l 347 690 l 459 1006 l 573 1006 l 462 690 l 640 690 l 751 1006 l 865 1006 l 754 690 l 963 690 m 606 590 l 425 590 l 362 410 l 543 410 l 606 590 "},"\u03b9":{"x_min":42,"x_max":284,"ha":361,"o":"m 284 3 q 233 -10 258 -5 q 182 -15 207 -15 q 85 26 119 -15 q 42 200 42 79 l 42 738 l 167 738 l 168 215 q 172 141 168 157 q 226 101 183 101 q 248 103 239 101 q 284 112 257 104 l 284 3 "},"\u0386":{"x_min":0,"x_max":906.953125,"ha":982,"o":"m 283 1040 l 88 799 l 5 799 l 145 1040 l 283 1040 m 906 0 l 756 0 l 650 303 l 251 303 l 143 0 l 0 0 l 376 1012 l 529 1012 l 906 0 m 609 421 l 452 866 l 293 421 l 609 421 "},")":{"x_min":0,"x_max":318,"ha":415,"o":"m 318 365 q 257 25 318 191 q 87 -290 197 -141 l 0 -290 q 140 21 93 -128 q 193 360 193 189 q 141 704 193 537 q 0 1024 97 850 l 87 1024 q 257 706 197 871 q 318 365 318 542 "},"\u03b5":{"x_min":0,"x_max":634.71875,"ha":714,"o":"m 634 234 q 527 38 634 110 q 300 -25 433 -25 q 98 29 183 -25 q 0 204 0 93 q 37 314 0 265 q 128 390 67 353 q 56 460 82 419 q 26 555 26 505 q 114 712 26 654 q 295 763 191 763 q 499 700 416 763 q 589 515 589 631 l 478 515 q 419 618 464 580 q 307 657 374 657 q 207 630 253 657 q 151 547 151 598 q 238 445 151 469 q 389 434 280 434 l 389 331 l 349 331 q 206 315 255 331 q 125 210 125 287 q 183 107 125 145 q 302 76 233 76 q 436 117 379 76 q 509 234 493 159 l 634 234 "},"\u0394":{"x_min":0,"x_max":952.78125,"ha":1028,"o":"m 952 0 l 0 0 l 400 1013 l 551 1013 l 952 0 m 762 124 l 476 867 l 187 124 l 762 124 "},"}":{"x_min":0,"x_max":481,"ha":578,"o":"m 481 314 q 318 262 364 314 q 282 136 282 222 q 284 65 282 97 q 293 -58 293 -48 q 241 -217 293 -166 q 0 -286 174 -286 l 0 -182 q 143 -130 105 -182 q 171 -2 171 -93 q 168 81 171 22 q 165 144 165 140 q 188 275 165 229 q 306 365 220 339 q 191 455 224 391 q 165 588 165 505 q 168 681 165 624 q 171 742 171 737 q 141 865 171 827 q 0 915 102 915 l 0 1015 q 243 942 176 1015 q 293 773 293 888 q 287 675 293 741 q 282 590 282 608 q 318 466 282 505 q 481 417 364 417 l 481 314 "},"\u2030":{"x_min":-3,"x_max":1672,"ha":1821,"o":"m 846 0 q 664 76 732 0 q 603 244 603 145 q 662 412 603 344 q 846 489 729 489 q 1027 412 959 489 q 1089 244 1089 343 q 1029 76 1089 144 q 846 0 962 0 m 845 103 q 945 143 910 103 q 981 243 981 184 q 947 340 981 301 q 845 385 910 385 q 745 342 782 385 q 709 243 709 300 q 742 147 709 186 q 845 103 781 103 m 888 986 l 284 -25 l 199 -25 l 803 986 l 888 986 m 241 468 q 58 545 126 468 q -3 715 -3 615 q 56 881 -3 813 q 238 958 124 958 q 421 881 353 958 q 483 712 483 813 q 423 544 483 612 q 241 468 356 468 m 241 855 q 137 811 175 855 q 100 710 100 768 q 136 612 100 653 q 240 572 172 572 q 344 614 306 572 q 382 713 382 656 q 347 810 382 771 q 241 855 308 855 m 1428 0 q 1246 76 1314 0 q 1185 244 1185 145 q 1244 412 1185 344 q 1428 489 1311 489 q 1610 412 1542 489 q 1672 244 1672 343 q 1612 76 1672 144 q 1428 0 1545 0 m 1427 103 q 1528 143 1492 103 q 1564 243 1564 184 q 1530 340 1564 301 q 1427 385 1492 385 q 1327 342 1364 385 q 1291 243 1291 300 q 1324 147 1291 186 q 1427 103 1363 103 "},"a":{"x_min":0,"x_max":698.609375,"ha":794,"o":"m 698 0 q 661 -12 679 -7 q 615 -17 643 -17 q 536 12 564 -17 q 500 96 508 41 q 384 6 456 37 q 236 -25 312 -25 q 65 31 130 -25 q 0 194 0 88 q 118 390 0 334 q 328 435 180 420 q 488 483 476 451 q 495 523 495 504 q 442 619 495 584 q 325 654 389 654 q 209 617 257 654 q 152 513 161 580 l 33 513 q 123 705 33 633 q 332 772 207 772 q 528 712 448 772 q 617 531 617 645 l 617 163 q 624 108 617 126 q 664 90 632 90 l 698 94 l 698 0 m 491 262 l 491 372 q 272 329 350 347 q 128 201 128 294 q 166 113 128 144 q 264 83 205 83 q 414 130 346 83 q 491 262 491 183 "},"\u2014":{"x_min":0,"x_max":941.671875,"ha":1039,"o":"m 941 334 l 0 334 l 0 410 l 941 410 l 941 334 "},"=":{"x_min":8.71875,"x_max":780.953125,"ha":792,"o":"m 780 510 l 8 510 l 8 606 l 780 606 l 780 510 m 780 235 l 8 235 l 8 332 l 780 332 l 780 235 "},"N":{"x_min":0,"x_max":801,"ha":914,"o":"m 801 0 l 651 0 l 131 823 l 131 0 l 0 0 l 0 1013 l 151 1013 l 670 193 l 670 1013 l 801 1013 l 801 0 "},"\u03c1":{"x_min":0,"x_max":712,"ha":797,"o":"m 712 369 q 620 94 712 207 q 362 -26 521 -26 q 230 2 292 -26 q 119 83 167 30 l 119 -278 l 0 -278 l 0 362 q 91 643 0 531 q 355 764 190 764 q 617 647 517 764 q 712 369 712 536 m 583 366 q 530 559 583 480 q 359 651 469 651 q 190 562 252 651 q 135 370 135 483 q 189 176 135 257 q 359 85 250 85 q 528 175 466 85 q 583 366 583 254 "},"\xaf":{"x_min":0,"x_max":941.671875,"ha":938,"o":"m 941 1033 l 0 1033 l 0 1109 l 941 1109 l 941 1033 "},"Z":{"x_min":0,"x_max":779,"ha":849,"o":"m 779 0 l 0 0 l 0 113 l 621 896 l 40 896 l 40 1013 l 779 1013 l 778 887 l 171 124 l 779 124 l 779 0 "},"u":{"x_min":0,"x_max":617,"ha":729,"o":"m 617 0 l 499 0 l 499 110 q 391 10 460 45 q 246 -25 322 -25 q 61 58 127 -25 q 0 258 0 136 l 0 738 l 125 738 l 125 284 q 156 148 125 202 q 273 82 197 82 q 433 165 369 82 q 493 340 493 243 l 493 738 l 617 738 l 617 0 "},"k":{"x_min":0,"x_max":612.484375,"ha":697,"o":"m 612 738 l 338 465 l 608 0 l 469 0 l 251 382 l 121 251 l 121 0 l 0 0 l 0 1013 l 121 1013 l 121 402 l 456 738 l 612 738 "},"\u0397":{"x_min":0,"x_max":803,"ha":917,"o":"m 803 0 l 667 0 l 667 475 l 140 475 l 140 0 l 0 0 l 0 1013 l 140 1013 l 140 599 l 667 599 l 667 1013 l 803 1013 l 803 0 "},"\u0391":{"x_min":0,"x_max":906.953125,"ha":985,"o":"m 906 0 l 756 0 l 650 303 l 251 303 l 143 0 l 0 0 l 376 1013 l 529 1013 l 906 0 m 609 421 l 452 866 l 293 421 l 609 421 "},"s":{"x_min":0,"x_max":604,"ha":697,"o":"m 604 217 q 501 36 604 104 q 292 -23 411 -23 q 86 43 166 -23 q 0 238 0 114 l 121 237 q 175 122 121 164 q 300 85 223 85 q 415 112 363 85 q 479 207 479 147 q 361 309 479 276 q 140 372 141 370 q 21 544 21 426 q 111 708 21 647 q 298 761 190 761 q 492 705 413 761 q 583 531 583 643 l 462 531 q 412 625 462 594 q 298 657 363 657 q 199 636 242 657 q 143 558 143 608 q 262 454 143 486 q 484 394 479 397 q 604 217 604 341 "},"B":{"x_min":0,"x_max":778,"ha":876,"o":"m 580 546 q 724 469 670 535 q 778 311 778 403 q 673 83 778 171 q 432 0 575 0 l 0 0 l 0 1013 l 411 1013 q 629 957 541 1013 q 732 768 732 892 q 691 633 732 693 q 580 546 650 572 m 393 899 l 139 899 l 139 588 l 379 588 q 521 624 462 588 q 592 744 592 667 q 531 859 592 819 q 393 899 471 899 m 419 124 q 566 169 504 124 q 635 303 635 219 q 559 436 635 389 q 402 477 494 477 l 139 477 l 139 124 l 419 124 "},"\u2026":{"x_min":0,"x_max":614,"ha":708,"o":"m 142 0 l 0 0 l 0 151 l 142 151 l 142 0 m 378 0 l 236 0 l 236 151 l 378 151 l 378 0 m 614 0 l 472 0 l 472 151 l 614 151 l 614 0 "},"?":{"x_min":0,"x_max":607,"ha":704,"o":"m 607 777 q 543 599 607 674 q 422 474 482 537 q 357 272 357 391 l 236 272 q 297 487 236 395 q 411 619 298 490 q 474 762 474 691 q 422 885 474 838 q 301 933 371 933 q 179 880 228 933 q 124 706 124 819 l 0 706 q 94 963 0 872 q 302 1044 177 1044 q 511 973 423 1044 q 607 777 607 895 m 370 0 l 230 0 l 230 151 l 370 151 l 370 0 "},"H":{"x_min":0,"x_max":803,"ha":915,"o":"m 803 0 l 667 0 l 667 475 l 140 475 l 140 0 l 0 0 l 0 1013 l 140 1013 l 140 599 l 667 599 l 667 1013 l 803 1013 l 803 0 "},"\u03bd":{"x_min":0,"x_max":675,"ha":761,"o":"m 675 738 l 404 0 l 272 0 l 0 738 l 133 738 l 340 147 l 541 738 l 675 738 "},"c":{"x_min":1,"x_max":701.390625,"ha":775,"o":"m 701 264 q 584 53 681 133 q 353 -26 487 -26 q 91 91 188 -26 q 1 370 1 201 q 92 645 1 537 q 353 761 190 761 q 572 688 479 761 q 690 493 666 615 l 556 493 q 487 606 545 562 q 356 650 428 650 q 186 563 246 650 q 134 372 134 487 q 188 179 134 258 q 359 88 250 88 q 492 136 437 88 q 566 264 548 185 l 701 264 "},"\xb6":{"x_min":0,"x_max":566.671875,"ha":678,"o":"m 21 892 l 52 892 l 98 761 l 145 892 l 176 892 l 178 741 l 157 741 l 157 867 l 108 741 l 88 741 l 40 871 l 40 741 l 21 741 l 21 892 m 308 854 l 308 731 q 252 691 308 691 q 227 691 240 691 q 207 696 213 695 l 207 712 l 253 706 q 288 733 288 706 l 288 763 q 244 741 279 741 q 193 797 193 741 q 261 860 193 860 q 287 860 273 860 q 308 854 302 855 m 288 842 l 263 843 q 213 796 213 843 q 248 756 213 756 q 288 796 288 756 l 288 842 m 566 988 l 502 988 l 502 -1 l 439 -1 l 439 988 l 317 988 l 317 -1 l 252 -1 l 252 602 q 81 653 155 602 q 0 805 0 711 q 101 989 0 918 q 309 1053 194 1053 l 566 1053 l 566 988 "},"\u03b2":{"x_min":0,"x_max":660,"ha":745,"o":"m 471 550 q 610 450 561 522 q 660 280 660 378 q 578 64 660 151 q 367 -22 497 -22 q 239 5 299 -22 q 126 82 178 32 l 126 -278 l 0 -278 l 0 593 q 54 903 0 801 q 318 1042 127 1042 q 519 964 436 1042 q 603 771 603 887 q 567 644 603 701 q 471 550 532 586 m 337 79 q 476 138 418 79 q 535 279 535 198 q 427 437 535 386 q 226 477 344 477 l 226 583 q 398 620 329 583 q 486 762 486 668 q 435 884 486 833 q 312 935 384 935 q 169 861 219 935 q 126 698 126 797 l 126 362 q 170 169 126 242 q 337 79 224 79 "},"\u039c":{"x_min":0,"x_max":954,"ha":1068,"o":"m 954 0 l 819 0 l 819 868 l 537 0 l 405 0 l 128 865 l 128 0 l 0 0 l 0 1013 l 199 1013 l 472 158 l 758 1013 l 954 1013 l 954 0 "},"\u038c":{"x_min":0.109375,"x_max":1120,"ha":1217,"o":"m 1120 505 q 994 132 1120 282 q 642 -29 861 -29 q 290 130 422 -29 q 167 505 167 280 q 294 883 167 730 q 650 1046 430 1046 q 999 882 868 1046 q 1120 505 1120 730 m 977 504 q 896 784 977 669 q 644 915 804 915 q 391 785 484 915 q 307 504 307 669 q 391 224 307 339 q 644 95 486 95 q 894 224 803 95 q 977 504 977 339 m 277 1040 l 83 799 l 0 799 l 140 1040 l 277 1040 "},"\u0389":{"x_min":0,"x_max":1158,"ha":1275,"o":"m 1158 0 l 1022 0 l 1022 475 l 496 475 l 496 0 l 356 0 l 356 1012 l 496 1012 l 496 599 l 1022 599 l 1022 1012 l 1158 1012 l 1158 0 m 277 1040 l 83 799 l 0 799 l 140 1040 l 277 1040 "},"\u2022":{"x_min":0,"x_max":663.890625,"ha":775,"o":"m 663 529 q 566 293 663 391 q 331 196 469 196 q 97 294 194 196 q 0 529 0 393 q 96 763 0 665 q 331 861 193 861 q 566 763 469 861 q 663 529 663 665 "},"\xa5":{"x_min":0.1875,"x_max":819.546875,"ha":886,"o":"m 563 561 l 697 561 l 696 487 l 520 487 l 482 416 l 482 380 l 697 380 l 695 308 l 482 308 l 482 0 l 342 0 l 342 308 l 125 308 l 125 380 l 342 380 l 342 417 l 303 487 l 125 487 l 125 561 l 258 561 l 0 1013 l 140 1013 l 411 533 l 679 1013 l 819 1013 l 563 561 "},"(":{"x_min":0,"x_max":318.0625,"ha":415,"o":"m 318 -290 l 230 -290 q 61 23 122 -142 q 0 365 0 190 q 62 712 0 540 q 230 1024 119 869 l 318 1024 q 175 705 219 853 q 125 360 125 542 q 176 22 125 187 q 318 -290 223 -127 "},"U":{"x_min":0,"x_max":796,"ha":904,"o":"m 796 393 q 681 93 796 212 q 386 -25 566 -25 q 101 95 208 -25 q 0 393 0 211 l 0 1013 l 138 1013 l 138 391 q 204 191 138 270 q 394 107 276 107 q 586 191 512 107 q 656 391 656 270 l 656 1013 l 796 1013 l 796 393 "},"\u03b3":{"x_min":0.5,"x_max":744.953125,"ha":822,"o":"m 744 737 l 463 54 l 463 -278 l 338 -278 l 338 54 l 154 495 q 104 597 124 569 q 13 651 67 651 l 0 651 l 0 751 l 39 753 q 168 711 121 753 q 242 594 207 676 l 403 208 l 617 737 l 744 737 "},"\u03b1":{"x_min":0,"x_max":765.5625,"ha":809,"o":"m 765 -4 q 698 -14 726 -14 q 564 97 586 -14 q 466 7 525 40 q 337 -26 407 -26 q 88 98 186 -26 q 0 369 0 212 q 88 637 0 525 q 337 760 184 760 q 465 728 407 760 q 563 637 524 696 l 563 739 l 685 739 l 685 222 q 693 141 685 168 q 748 94 708 94 q 765 96 760 94 l 765 -4 m 584 371 q 531 562 584 485 q 360 653 470 653 q 192 566 254 653 q 135 379 135 489 q 186 181 135 261 q 358 84 247 84 q 528 176 465 84 q 584 371 584 260 "},"F":{"x_min":0,"x_max":683.328125,"ha":717,"o":"m 683 888 l 140 888 l 140 583 l 613 583 l 613 458 l 140 458 l 140 0 l 0 0 l 0 1013 l 683 1013 l 683 888 "},"\xad":{"x_min":0,"x_max":705.5625,"ha":803,"o":"m 705 334 l 0 334 l 0 410 l 705 410 l 705 334 "},":":{"x_min":0,"x_max":142,"ha":239,"o":"m 142 585 l 0 585 l 0 738 l 142 738 l 142 585 m 142 0 l 0 0 l 0 151 l 142 151 l 142 0 "},"\u03a7":{"x_min":0,"x_max":854.171875,"ha":935,"o":"m 854 0 l 683 0 l 423 409 l 166 0 l 0 0 l 347 519 l 18 1013 l 186 1013 l 427 637 l 675 1013 l 836 1013 l 504 521 l 854 0 "},"*":{"x_min":116,"x_max":674,"ha":792,"o":"m 674 768 l 475 713 l 610 544 l 517 477 l 394 652 l 272 478 l 178 544 l 314 713 l 116 766 l 153 876 l 341 812 l 342 1013 l 446 1013 l 446 811 l 635 874 l 674 768 "},"\u2020":{"x_min":0,"x_max":777,"ha":835,"o":"m 458 804 l 777 804 l 777 683 l 458 683 l 458 0 l 319 0 l 319 681 l 0 683 l 0 804 l 319 804 l 319 1015 l 458 1013 l 458 804 "},"\xb0":{"x_min":0,"x_max":347,"ha":444,"o":"m 173 802 q 43 856 91 802 q 0 977 0 905 q 45 1101 0 1049 q 173 1153 90 1153 q 303 1098 255 1153 q 347 977 347 1049 q 303 856 347 905 q 173 802 256 802 m 173 884 q 238 910 214 884 q 262 973 262 937 q 239 1038 262 1012 q 173 1064 217 1064 q 108 1037 132 1064 q 85 973 85 1010 q 108 910 85 937 q 173 884 132 884 "},"V":{"x_min":0,"x_max":862.71875,"ha":940,"o":"m 862 1013 l 505 0 l 361 0 l 0 1013 l 143 1013 l 434 165 l 718 1012 l 862 1013 "},"\u039e":{"x_min":0,"x_max":734.71875,"ha":763,"o":"m 723 889 l 9 889 l 9 1013 l 723 1013 l 723 889 m 673 463 l 61 463 l 61 589 l 673 589 l 673 463 m 734 0 l 0 0 l 0 124 l 734 124 l 734 0 "},"\xa0":{"x_min":0,"x_max":0,"ha":853},"\u03ab":{"x_min":0.328125,"x_max":819.515625,"ha":889,"o":"m 588 1046 l 460 1046 l 460 1189 l 588 1189 l 588 1046 m 360 1046 l 232 1046 l 232 1189 l 360 1189 l 360 1046 m 819 1012 l 482 416 l 482 0 l 342 0 l 342 416 l 0 1012 l 140 1012 l 411 533 l 679 1012 l 819 1012 "},"\u201d":{"x_min":0,"x_max":347,"ha":454,"o":"m 139 851 q 102 737 139 784 q 0 669 65 690 l 0 734 q 59 787 42 741 q 72 873 72 821 l 0 873 l 0 1013 l 139 1013 l 139 851 m 347 851 q 310 737 347 784 q 208 669 273 690 l 208 734 q 267 787 250 741 q 280 873 280 821 l 208 873 l 208 1013 l 347 1013 l 347 851 "},"@":{"x_min":0,"x_max":1260,"ha":1357,"o":"m 1098 -45 q 877 -160 1001 -117 q 633 -203 752 -203 q 155 -29 327 -203 q 0 360 0 127 q 176 802 0 616 q 687 1008 372 1008 q 1123 854 969 1008 q 1260 517 1260 718 q 1155 216 1260 341 q 868 82 1044 82 q 772 106 801 82 q 737 202 737 135 q 647 113 700 144 q 527 82 594 82 q 367 147 420 82 q 314 312 314 212 q 401 565 314 452 q 639 690 498 690 q 810 588 760 690 l 849 668 l 938 668 q 877 441 900 532 q 833 226 833 268 q 853 182 833 198 q 902 167 873 167 q 1088 272 1012 167 q 1159 512 1159 372 q 1051 793 1159 681 q 687 925 925 925 q 248 747 415 925 q 97 361 97 586 q 226 26 97 159 q 627 -122 370 -122 q 856 -87 737 -122 q 1061 8 976 -53 l 1098 -45 m 786 488 q 738 580 777 545 q 643 615 700 615 q 483 517 548 615 q 425 322 425 430 q 457 203 425 250 q 552 156 490 156 q 722 273 665 156 q 786 488 738 309 "},"\u038a":{"x_min":0,"x_max":499,"ha":613,"o":"m 277 1040 l 83 799 l 0 799 l 140 1040 l 277 1040 m 499 0 l 360 0 l 360 1012 l 499 1012 l 499 0 "},"i":{"x_min":14,"x_max":136,"ha":275,"o":"m 136 873 l 14 873 l 14 1013 l 136 1013 l 136 873 m 136 0 l 14 0 l 14 737 l 136 737 l 136 0 "},"\u0392":{"x_min":0,"x_max":778,"ha":877,"o":"m 580 545 q 724 468 671 534 q 778 310 778 402 q 673 83 778 170 q 432 0 575 0 l 0 0 l 0 1013 l 411 1013 q 629 957 541 1013 q 732 768 732 891 q 691 632 732 692 q 580 545 650 571 m 393 899 l 139 899 l 139 587 l 379 587 q 521 623 462 587 q 592 744 592 666 q 531 859 592 819 q 393 899 471 899 m 419 124 q 566 169 504 124 q 635 302 635 219 q 559 435 635 388 q 402 476 494 476 l 139 476 l 139 124 l 419 124 "},"\u03c5":{"x_min":0,"x_max":617,"ha":725,"o":"m 617 352 q 540 94 617 199 q 308 -24 455 -24 q 76 94 161 -24 q 0 352 0 199 l 0 739 l 126 739 l 126 355 q 169 185 126 257 q 312 98 220 98 q 451 185 402 98 q 492 355 492 257 l 492 739 l 617 739 l 617 352 "},"]":{"x_min":0,"x_max":275,"ha":372,"o":"m 275 -281 l 0 -281 l 0 -187 l 151 -187 l 151 920 l 0 920 l 0 1013 l 275 1013 l 275 -281 "},"m":{"x_min":0,"x_max":1019,"ha":1128,"o":"m 1019 0 l 897 0 l 897 454 q 860 591 897 536 q 739 660 816 660 q 613 586 659 660 q 573 436 573 522 l 573 0 l 447 0 l 447 455 q 412 591 447 535 q 294 657 372 657 q 165 586 213 657 q 122 437 122 521 l 122 0 l 0 0 l 0 738 l 117 738 l 117 640 q 202 730 150 697 q 316 763 254 763 q 437 730 381 763 q 525 642 494 697 q 621 731 559 700 q 753 763 682 763 q 943 694 867 763 q 1019 512 1019 625 l 1019 0 "},"\u03c7":{"x_min":8.328125,"x_max":780.5625,"ha":815,"o":"m 780 -278 q 715 -294 747 -294 q 616 -257 663 -294 q 548 -175 576 -227 l 379 133 l 143 -277 l 9 -277 l 313 254 l 163 522 q 127 586 131 580 q 36 640 91 640 q 8 637 27 640 l 8 752 l 52 757 q 162 719 113 757 q 236 627 200 690 l 383 372 l 594 737 l 726 737 l 448 250 l 625 -69 q 670 -153 647 -110 q 743 -188 695 -188 q 780 -184 759 -188 l 780 -278 "},"\u03af":{"x_min":42,"x_max":326.71875,"ha":361,"o":"m 284 3 q 233 -10 258 -5 q 182 -15 207 -15 q 85 26 119 -15 q 42 200 42 79 l 42 737 l 167 737 l 168 215 q 172 141 168 157 q 226 101 183 101 q 248 102 239 101 q 284 112 257 104 l 284 3 m 326 1040 l 137 819 l 54 819 l 189 1040 l 326 1040 "},"\u0396":{"x_min":0,"x_max":779.171875,"ha":850,"o":"m 779 0 l 0 0 l 0 113 l 620 896 l 40 896 l 40 1013 l 779 1013 l 779 887 l 170 124 l 779 124 l 779 0 "},"R":{"x_min":0,"x_max":781.953125,"ha":907,"o":"m 781 0 l 623 0 q 587 242 590 52 q 407 433 585 433 l 138 433 l 138 0 l 0 0 l 0 1013 l 396 1013 q 636 946 539 1013 q 749 731 749 868 q 711 597 749 659 q 608 502 674 534 q 718 370 696 474 q 729 207 722 352 q 781 26 736 62 l 781 0 m 373 551 q 533 594 465 551 q 614 731 614 645 q 532 859 614 815 q 373 896 465 896 l 138 896 l 138 551 l 373 551 "},"o":{"x_min":0,"x_max":713,"ha":821,"o":"m 357 -25 q 94 91 194 -25 q 0 368 0 202 q 93 642 0 533 q 357 761 193 761 q 618 644 518 761 q 713 368 713 533 q 619 91 713 201 q 357 -25 521 -25 m 357 85 q 528 175 465 85 q 584 369 584 255 q 529 562 584 484 q 357 651 467 651 q 189 560 250 651 q 135 369 135 481 q 187 177 135 257 q 357 85 250 85 "},"K":{"x_min":0,"x_max":819.46875,"ha":906,"o":"m 819 0 l 649 0 l 294 509 l 139 355 l 139 0 l 0 0 l 0 1013 l 139 1013 l 139 526 l 626 1013 l 809 1013 l 395 600 l 819 0 "},",":{"x_min":0,"x_max":142,"ha":239,"o":"m 142 -12 q 105 -132 142 -82 q 0 -205 68 -182 l 0 -138 q 57 -82 40 -124 q 70 0 70 -51 l 0 0 l 0 151 l 142 151 l 142 -12 "},"d":{"x_min":0,"x_max":683,"ha":796,"o":"m 683 0 l 564 0 l 564 93 q 456 6 516 38 q 327 -25 395 -25 q 87 100 181 -25 q 0 365 0 215 q 90 639 0 525 q 343 763 187 763 q 564 647 486 763 l 564 1013 l 683 1013 l 683 0 m 582 373 q 529 562 582 484 q 361 653 468 653 q 190 561 253 653 q 135 365 135 479 q 189 175 135 254 q 358 85 251 85 q 529 178 468 85 q 582 373 582 258 "},"\xa8":{"x_min":-109,"x_max":247,"ha":232,"o":"m 247 1046 l 119 1046 l 119 1189 l 247 1189 l 247 1046 m 19 1046 l -109 1046 l -109 1189 l 19 1189 l 19 1046 "},"E":{"x_min":0,"x_max":736.109375,"ha":789,"o":"m 736 0 l 0 0 l 0 1013 l 725 1013 l 725 889 l 139 889 l 139 585 l 677 585 l 677 467 l 139 467 l 139 125 l 736 125 l 736 0 "},"Y":{"x_min":0,"x_max":820,"ha":886,"o":"m 820 1013 l 482 416 l 482 0 l 342 0 l 342 416 l 0 1013 l 140 1013 l 411 534 l 679 1012 l 820 1013 "},"\\"":{"x_min":0,"x_max":299,"ha":396,"o":"m 299 606 l 203 606 l 203 988 l 299 988 l 299 606 m 96 606 l 0 606 l 0 988 l 96 988 l 96 606 "},"\u2039":{"x_min":17.984375,"x_max":773.609375,"ha":792,"o":"m 773 40 l 18 376 l 17 465 l 773 799 l 773 692 l 159 420 l 773 149 l 773 40 "},"\u201e":{"x_min":0,"x_max":364,"ha":467,"o":"m 141 -12 q 104 -132 141 -82 q 0 -205 67 -182 l 0 -138 q 56 -82 40 -124 q 69 0 69 -51 l 0 0 l 0 151 l 141 151 l 141 -12 m 364 -12 q 327 -132 364 -82 q 222 -205 290 -182 l 222 -138 q 279 -82 262 -124 q 292 0 292 -51 l 222 0 l 222 151 l 364 151 l 364 -12 "},"\u03b4":{"x_min":1,"x_max":710,"ha":810,"o":"m 710 360 q 616 87 710 196 q 356 -28 518 -28 q 99 82 197 -28 q 1 356 1 192 q 100 606 1 509 q 355 703 199 703 q 180 829 288 754 q 70 903 124 866 l 70 1012 l 643 1012 l 643 901 l 258 901 q 462 763 422 794 q 636 592 577 677 q 710 360 710 485 m 584 365 q 552 501 584 447 q 451 602 521 555 q 372 611 411 611 q 197 541 258 611 q 136 355 136 472 q 190 171 136 245 q 358 85 252 85 q 528 173 465 85 q 584 365 584 252 "},"\u03ad":{"x_min":0,"x_max":634.71875,"ha":714,"o":"m 634 234 q 527 38 634 110 q 300 -25 433 -25 q 98 29 183 -25 q 0 204 0 93 q 37 313 0 265 q 128 390 67 352 q 56 459 82 419 q 26 555 26 505 q 114 712 26 654 q 295 763 191 763 q 499 700 416 763 q 589 515 589 631 l 478 515 q 419 618 464 580 q 307 657 374 657 q 207 630 253 657 q 151 547 151 598 q 238 445 151 469 q 389 434 280 434 l 389 331 l 349 331 q 206 315 255 331 q 125 210 125 287 q 183 107 125 145 q 302 76 233 76 q 436 117 379 76 q 509 234 493 159 l 634 234 m 520 1040 l 331 819 l 248 819 l 383 1040 l 520 1040 "},"\u03c9":{"x_min":0,"x_max":922,"ha":1031,"o":"m 922 339 q 856 97 922 203 q 650 -26 780 -26 q 538 9 587 -26 q 461 103 489 44 q 387 12 436 46 q 277 -22 339 -22 q 69 97 147 -22 q 0 339 0 203 q 45 551 0 444 q 161 738 84 643 l 302 738 q 175 553 219 647 q 124 336 124 446 q 155 179 124 249 q 275 88 197 88 q 375 163 341 88 q 400 294 400 219 l 400 572 l 524 572 l 524 294 q 561 135 524 192 q 643 88 591 88 q 762 182 719 88 q 797 342 797 257 q 745 556 797 450 q 619 738 705 638 l 760 738 q 874 551 835 640 q 922 339 922 444 "},"\xb4":{"x_min":0,"x_max":96,"ha":251,"o":"m 96 606 l 0 606 l 0 988 l 96 988 l 96 606 "},"\xb1":{"x_min":11,"x_max":781,"ha":792,"o":"m 781 490 l 446 490 l 446 255 l 349 255 l 349 490 l 11 490 l 11 586 l 349 586 l 349 819 l 446 819 l 446 586 l 781 586 l 781 490 m 781 21 l 11 21 l 11 115 l 781 115 l 781 21 "},"|":{"x_min":343,"x_max":449,"ha":792,"o":"m 449 462 l 343 462 l 343 986 l 449 986 l 449 462 m 449 -242 l 343 -242 l 343 280 l 449 280 l 449 -242 "},"\u03cb":{"x_min":0,"x_max":617,"ha":725,"o":"m 482 800 l 372 800 l 372 925 l 482 925 l 482 800 m 239 800 l 129 800 l 129 925 l 239 925 l 239 800 m 617 352 q 540 93 617 199 q 308 -24 455 -24 q 76 93 161 -24 q 0 352 0 199 l 0 738 l 126 738 l 126 354 q 169 185 126 257 q 312 98 220 98 q 451 185 402 98 q 492 354 492 257 l 492 738 l 617 738 l 617 352 "},"\xa7":{"x_min":0,"x_max":593,"ha":690,"o":"m 593 425 q 554 312 593 369 q 467 233 516 254 q 537 83 537 172 q 459 -74 537 -12 q 288 -133 387 -133 q 115 -69 184 -133 q 47 96 47 -6 l 166 96 q 199 7 166 40 q 288 -26 232 -26 q 371 -5 332 -26 q 420 60 420 21 q 311 201 420 139 q 108 309 210 255 q 0 490 0 383 q 33 602 0 551 q 124 687 66 654 q 75 743 93 712 q 58 812 58 773 q 133 984 58 920 q 300 1043 201 1043 q 458 987 394 1043 q 529 814 529 925 l 411 814 q 370 908 404 877 q 289 939 336 939 q 213 911 246 939 q 180 841 180 883 q 286 720 180 779 q 484 612 480 615 q 593 425 593 534 m 467 409 q 355 544 467 473 q 196 630 228 612 q 146 587 162 609 q 124 525 124 558 q 239 387 124 462 q 398 298 369 315 q 448 345 429 316 q 467 409 467 375 "},"b":{"x_min":0,"x_max":685,"ha":783,"o":"m 685 372 q 597 99 685 213 q 347 -25 501 -25 q 219 5 277 -25 q 121 93 161 36 l 121 0 l 0 0 l 0 1013 l 121 1013 l 121 634 q 214 723 157 692 q 341 754 272 754 q 591 637 493 754 q 685 372 685 526 m 554 356 q 499 550 554 470 q 328 644 437 644 q 162 556 223 644 q 108 369 108 478 q 160 176 108 256 q 330 83 221 83 q 498 169 435 83 q 554 356 554 245 "},"q":{"x_min":0,"x_max":683,"ha":876,"o":"m 683 -278 l 564 -278 l 564 97 q 474 8 533 39 q 345 -23 415 -23 q 91 93 188 -23 q 0 364 0 203 q 87 635 0 522 q 337 760 184 760 q 466 727 408 760 q 564 637 523 695 l 564 737 l 683 737 l 683 -278 m 582 375 q 527 564 582 488 q 358 652 466 652 q 190 565 253 652 q 135 377 135 488 q 189 179 135 261 q 361 84 251 84 q 530 179 469 84 q 582 375 582 260 "},"\u03a9":{"x_min":-0.171875,"x_max":969.5625,"ha":1068,"o":"m 969 0 l 555 0 l 555 123 q 744 308 675 194 q 814 558 814 423 q 726 812 814 709 q 484 922 633 922 q 244 820 334 922 q 154 567 154 719 q 223 316 154 433 q 412 123 292 199 l 412 0 l 0 0 l 0 124 l 217 124 q 68 327 122 210 q 15 572 15 444 q 144 911 15 781 q 484 1041 274 1041 q 822 909 691 1041 q 953 569 953 777 q 899 326 953 443 q 750 124 846 210 l 969 124 l 969 0 "},"\u03cd":{"x_min":0,"x_max":617,"ha":725,"o":"m 617 352 q 540 93 617 199 q 308 -24 455 -24 q 76 93 161 -24 q 0 352 0 199 l 0 738 l 126 738 l 126 354 q 169 185 126 257 q 312 98 220 98 q 451 185 402 98 q 492 354 492 257 l 492 738 l 617 738 l 617 352 m 535 1040 l 346 819 l 262 819 l 397 1040 l 535 1040 "},"z":{"x_min":-0.015625,"x_max":613.890625,"ha":697,"o":"m 613 0 l 0 0 l 0 100 l 433 630 l 20 630 l 20 738 l 594 738 l 593 636 l 163 110 l 613 110 l 613 0 "},"\u2122":{"x_min":0,"x_max":894,"ha":1000,"o":"m 389 951 l 229 951 l 229 503 l 160 503 l 160 951 l 0 951 l 0 1011 l 389 1011 l 389 951 m 894 503 l 827 503 l 827 939 l 685 503 l 620 503 l 481 937 l 481 503 l 417 503 l 417 1011 l 517 1011 l 653 580 l 796 1010 l 894 1011 l 894 503 "},"\u03ae":{"x_min":0.78125,"x_max":697,"ha":810,"o":"m 697 -278 l 572 -278 l 572 454 q 540 587 572 536 q 425 650 501 650 q 271 579 337 650 q 206 420 206 509 l 206 0 l 81 0 l 81 489 q 73 588 81 562 q 0 644 56 644 l 0 741 q 68 755 38 755 q 158 721 124 755 q 200 630 193 687 q 297 726 234 692 q 434 761 359 761 q 620 692 544 761 q 697 516 697 624 l 697 -278 m 479 1040 l 290 819 l 207 819 l 341 1040 l 479 1040 "},"\u0398":{"x_min":0,"x_max":960,"ha":1056,"o":"m 960 507 q 833 129 960 280 q 476 -32 698 -32 q 123 129 255 -32 q 0 507 0 280 q 123 883 0 732 q 476 1045 255 1045 q 832 883 696 1045 q 960 507 960 732 m 817 500 q 733 789 817 669 q 476 924 639 924 q 223 792 317 924 q 142 507 142 675 q 222 222 142 339 q 476 89 315 89 q 730 218 636 89 q 817 500 817 334 m 716 449 l 243 449 l 243 571 l 716 571 l 716 449 "},"\xae":{"x_min":-3,"x_max":1008,"ha":1106,"o":"m 503 532 q 614 562 566 532 q 672 658 672 598 q 614 747 672 716 q 503 772 569 772 l 338 772 l 338 532 l 503 532 m 502 -7 q 123 151 263 -7 q -3 501 -3 294 q 123 851 -3 706 q 502 1011 263 1011 q 881 851 739 1011 q 1008 501 1008 708 q 883 151 1008 292 q 502 -7 744 -7 m 502 60 q 830 197 709 60 q 940 501 940 322 q 831 805 940 681 q 502 944 709 944 q 174 805 296 944 q 65 501 65 680 q 173 197 65 320 q 502 60 294 60 m 788 146 l 678 146 q 653 316 655 183 q 527 449 652 449 l 338 449 l 338 146 l 241 146 l 241 854 l 518 854 q 688 808 621 854 q 766 658 766 755 q 739 563 766 607 q 668 497 713 519 q 751 331 747 472 q 788 164 756 190 l 788 146 "},"~":{"x_min":0,"x_max":833,"ha":931,"o":"m 833 958 q 778 753 833 831 q 594 665 716 665 q 402 761 502 665 q 240 857 302 857 q 131 795 166 857 q 104 665 104 745 l 0 665 q 54 867 0 789 q 237 958 116 958 q 429 861 331 958 q 594 765 527 765 q 704 827 670 765 q 729 958 729 874 l 833 958 "},"\u0395":{"x_min":0,"x_max":736.21875,"ha":778,"o":"m 736 0 l 0 0 l 0 1013 l 725 1013 l 725 889 l 139 889 l 139 585 l 677 585 l 677 467 l 139 467 l 139 125 l 736 125 l 736 0 "},"\xb3":{"x_min":0,"x_max":450,"ha":547,"o":"m 450 552 q 379 413 450 464 q 220 366 313 366 q 69 414 130 366 q 0 567 0 470 l 85 567 q 126 470 85 504 q 225 437 168 437 q 320 467 280 437 q 360 552 360 498 q 318 632 360 608 q 213 657 276 657 q 195 657 203 657 q 176 657 181 657 l 176 722 q 279 733 249 722 q 334 815 334 752 q 300 881 334 856 q 220 907 267 907 q 133 875 169 907 q 97 781 97 844 l 15 781 q 78 926 15 875 q 220 972 135 972 q 364 930 303 972 q 426 817 426 888 q 344 697 426 733 q 421 642 392 681 q 450 552 450 603 "},"[":{"x_min":0,"x_max":273.609375,"ha":371,"o":"m 273 -281 l 0 -281 l 0 1013 l 273 1013 l 273 920 l 124 920 l 124 -187 l 273 -187 l 273 -281 "},"L":{"x_min":0,"x_max":645.828125,"ha":696,"o":"m 645 0 l 0 0 l 0 1013 l 140 1013 l 140 126 l 645 126 l 645 0 "},"\u03c3":{"x_min":0,"x_max":803.390625,"ha":894,"o":"m 803 628 l 633 628 q 713 368 713 512 q 618 93 713 204 q 357 -25 518 -25 q 94 91 194 -25 q 0 368 0 201 q 94 644 0 533 q 356 761 194 761 q 481 750 398 761 q 608 739 564 739 l 803 739 l 803 628 m 360 85 q 529 180 467 85 q 584 374 584 262 q 527 566 584 490 q 352 651 463 651 q 187 559 247 651 q 135 368 135 478 q 189 175 135 254 q 360 85 251 85 "},"\u03b6":{"x_min":0,"x_max":573,"ha":642,"o":"m 573 -40 q 553 -162 573 -97 q 510 -278 543 -193 l 400 -278 q 441 -187 428 -219 q 462 -90 462 -132 q 378 -14 462 -14 q 108 45 197 -14 q 0 290 0 117 q 108 631 0 462 q 353 901 194 767 l 55 901 l 55 1012 l 561 1012 l 561 924 q 261 669 382 831 q 128 301 128 489 q 243 117 128 149 q 458 98 350 108 q 573 -40 573 80 "},"\u03b8":{"x_min":0,"x_max":674,"ha":778,"o":"m 674 496 q 601 160 674 304 q 336 -26 508 -26 q 73 153 165 -26 q 0 485 0 296 q 72 840 0 683 q 343 1045 166 1045 q 605 844 516 1045 q 674 496 674 692 m 546 579 q 498 798 546 691 q 336 935 437 935 q 178 798 237 935 q 126 579 137 701 l 546 579 m 546 475 l 126 475 q 170 233 126 348 q 338 80 230 80 q 504 233 447 80 q 546 475 546 346 "},"\u039f":{"x_min":0,"x_max":958,"ha":1054,"o":"m 485 1042 q 834 883 703 1042 q 958 511 958 735 q 834 136 958 287 q 481 -26 701 -26 q 126 130 261 -26 q 0 504 0 279 q 127 880 0 729 q 485 1042 263 1042 m 480 98 q 731 225 638 98 q 815 504 815 340 q 733 783 815 670 q 480 913 640 913 q 226 785 321 913 q 142 504 142 671 q 226 224 142 339 q 480 98 319 98 "},"\u0393":{"x_min":0,"x_max":705.28125,"ha":749,"o":"m 705 886 l 140 886 l 140 0 l 0 0 l 0 1012 l 705 1012 l 705 886 "}," ":{"x_min":0,"x_max":0,"ha":375},"%":{"x_min":-3,"x_max":1089,"ha":1186,"o":"m 845 0 q 663 76 731 0 q 602 244 602 145 q 661 412 602 344 q 845 489 728 489 q 1027 412 959 489 q 1089 244 1089 343 q 1029 76 1089 144 q 845 0 962 0 m 844 103 q 945 143 909 103 q 981 243 981 184 q 947 340 981 301 q 844 385 909 385 q 744 342 781 385 q 708 243 708 300 q 741 147 708 186 q 844 103 780 103 m 888 986 l 284 -25 l 199 -25 l 803 986 l 888 986 m 241 468 q 58 545 126 468 q -3 715 -3 615 q 56 881 -3 813 q 238 958 124 958 q 421 881 353 958 q 483 712 483 813 q 423 544 483 612 q 241 468 356 468 m 241 855 q 137 811 175 855 q 100 710 100 768 q 136 612 100 653 q 240 572 172 572 q 344 614 306 572 q 382 713 382 656 q 347 810 382 771 q 241 855 308 855 "},"P":{"x_min":0,"x_max":726,"ha":806,"o":"m 424 1013 q 640 931 555 1013 q 726 719 726 850 q 637 506 726 587 q 413 426 548 426 l 140 426 l 140 0 l 0 0 l 0 1013 l 424 1013 m 379 889 l 140 889 l 140 548 l 372 548 q 522 589 459 548 q 593 720 593 637 q 528 845 593 801 q 379 889 463 889 "},"\u0388":{"x_min":0,"x_max":1078.21875,"ha":1118,"o":"m 1078 0 l 342 0 l 342 1013 l 1067 1013 l 1067 889 l 481 889 l 481 585 l 1019 585 l 1019 467 l 481 467 l 481 125 l 1078 125 l 1078 0 m 277 1040 l 83 799 l 0 799 l 140 1040 l 277 1040 "},"\u038f":{"x_min":0.125,"x_max":1136.546875,"ha":1235,"o":"m 1136 0 l 722 0 l 722 123 q 911 309 842 194 q 981 558 981 423 q 893 813 981 710 q 651 923 800 923 q 411 821 501 923 q 321 568 321 720 q 390 316 321 433 q 579 123 459 200 l 579 0 l 166 0 l 166 124 l 384 124 q 235 327 289 210 q 182 572 182 444 q 311 912 182 782 q 651 1042 441 1042 q 989 910 858 1042 q 1120 569 1120 778 q 1066 326 1120 443 q 917 124 1013 210 l 1136 124 l 1136 0 m 277 1040 l 83 800 l 0 800 l 140 1041 l 277 1040 "},"_":{"x_min":0,"x_max":705.5625,"ha":803,"o":"m 705 -334 l 0 -334 l 0 -234 l 705 -234 l 705 -334 "},"\u03aa":{"x_min":-110,"x_max":246,"ha":275,"o":"m 246 1046 l 118 1046 l 118 1189 l 246 1189 l 246 1046 m 18 1046 l -110 1046 l -110 1189 l 18 1189 l 18 1046 m 136 0 l 0 0 l 0 1012 l 136 1012 l 136 0 "},"+":{"x_min":23,"x_max":768,"ha":792,"o":"m 768 372 l 444 372 l 444 0 l 347 0 l 347 372 l 23 372 l 23 468 l 347 468 l 347 840 l 444 840 l 444 468 l 768 468 l 768 372 "},"\xbd":{"x_min":0,"x_max":1050,"ha":1149,"o":"m 1050 0 l 625 0 q 712 178 625 108 q 878 277 722 187 q 967 385 967 328 q 932 456 967 429 q 850 484 897 484 q 759 450 798 484 q 721 352 721 416 l 640 352 q 706 502 640 448 q 851 551 766 551 q 987 509 931 551 q 1050 385 1050 462 q 976 251 1050 301 q 829 179 902 215 q 717 68 740 133 l 1050 68 l 1050 0 m 834 985 l 215 -28 l 130 -28 l 750 984 l 834 985 m 224 422 l 142 422 l 142 811 l 0 811 l 0 867 q 104 889 62 867 q 164 973 157 916 l 224 973 l 224 422 "},"\u03a1":{"x_min":0,"x_max":720,"ha":783,"o":"m 424 1013 q 637 933 554 1013 q 720 723 720 853 q 633 508 720 591 q 413 426 546 426 l 140 426 l 140 0 l 0 0 l 0 1013 l 424 1013 m 378 889 l 140 889 l 140 548 l 371 548 q 521 589 458 548 q 592 720 592 637 q 527 845 592 801 q 378 889 463 889 "},"\'":{"x_min":0,"x_max":139,"ha":236,"o":"m 139 851 q 102 737 139 784 q 0 669 65 690 l 0 734 q 59 787 42 741 q 72 873 72 821 l 0 873 l 0 1013 l 139 1013 l 139 851 "},"\xaa":{"x_min":0,"x_max":350,"ha":397,"o":"m 350 625 q 307 616 328 616 q 266 631 281 616 q 247 673 251 645 q 190 628 225 644 q 116 613 156 613 q 32 641 64 613 q 0 722 0 669 q 72 826 0 800 q 247 866 159 846 l 247 887 q 220 934 247 916 q 162 953 194 953 q 104 934 129 953 q 76 882 80 915 l 16 882 q 60 976 16 941 q 166 1011 104 1011 q 266 979 224 1011 q 308 891 308 948 l 308 706 q 311 679 308 688 q 331 670 315 670 l 350 672 l 350 625 m 247 757 l 247 811 q 136 790 175 798 q 64 726 64 773 q 83 682 64 697 q 132 667 103 667 q 207 690 174 667 q 247 757 247 718 "},"\u0385":{"x_min":0,"x_max":450,"ha":553,"o":"m 450 800 l 340 800 l 340 925 l 450 925 l 450 800 m 406 1040 l 212 800 l 129 800 l 269 1040 l 406 1040 m 110 800 l 0 800 l 0 925 l 110 925 l 110 800 "},"T":{"x_min":0,"x_max":777,"ha":835,"o":"m 777 894 l 458 894 l 458 0 l 319 0 l 319 894 l 0 894 l 0 1013 l 777 1013 l 777 894 "},"\u03a6":{"x_min":0,"x_max":915,"ha":997,"o":"m 527 0 l 389 0 l 389 122 q 110 231 220 122 q 0 509 0 340 q 110 785 0 677 q 389 893 220 893 l 389 1013 l 527 1013 l 527 893 q 804 786 693 893 q 915 509 915 679 q 805 231 915 341 q 527 122 696 122 l 527 0 m 527 226 q 712 310 641 226 q 779 507 779 389 q 712 705 779 627 q 527 787 641 787 l 527 226 m 389 226 l 389 787 q 205 698 275 775 q 136 505 136 620 q 206 308 136 391 q 389 226 276 226 "},"\u204b":{"x_min":0,"x_max":0,"ha":694},"j":{"x_min":-77.78125,"x_max":167,"ha":349,"o":"m 167 871 l 42 871 l 42 1013 l 167 1013 l 167 871 m 167 -80 q 121 -231 167 -184 q -26 -278 76 -278 l -77 -278 l -77 -164 l -41 -164 q 26 -143 11 -164 q 42 -65 42 -122 l 42 737 l 167 737 l 167 -80 "},"\u03a3":{"x_min":0,"x_max":756.953125,"ha":819,"o":"m 756 0 l 0 0 l 0 107 l 395 523 l 22 904 l 22 1013 l 745 1013 l 745 889 l 209 889 l 566 523 l 187 125 l 756 125 l 756 0 "},"\u203a":{"x_min":18.0625,"x_max":774,"ha":792,"o":"m 774 376 l 18 40 l 18 149 l 631 421 l 18 692 l 18 799 l 774 465 l 774 376 "},"<":{"x_min":17.984375,"x_max":773.609375,"ha":792,"o":"m 773 40 l 18 376 l 17 465 l 773 799 l 773 692 l 159 420 l 773 149 l 773 40 "},"\xa3":{"x_min":0,"x_max":704.484375,"ha":801,"o":"m 704 41 q 623 -10 664 5 q 543 -26 583 -26 q 359 15 501 -26 q 243 36 288 36 q 158 23 197 36 q 73 -21 119 10 l 6 76 q 125 195 90 150 q 175 331 175 262 q 147 443 175 383 l 0 443 l 0 512 l 108 512 q 43 734 43 623 q 120 929 43 854 q 358 1010 204 1010 q 579 936 487 1010 q 678 729 678 857 l 678 684 l 552 684 q 504 838 552 780 q 362 896 457 896 q 216 852 263 896 q 176 747 176 815 q 199 627 176 697 q 248 512 217 574 l 468 512 l 468 443 l 279 443 q 297 356 297 398 q 230 194 297 279 q 153 107 211 170 q 227 133 190 125 q 293 142 264 142 q 410 119 339 142 q 516 96 482 96 q 579 105 550 96 q 648 142 608 115 l 704 41 "},"t":{"x_min":0,"x_max":367,"ha":458,"o":"m 367 0 q 312 -5 339 -2 q 262 -8 284 -8 q 145 28 183 -8 q 108 143 108 64 l 108 638 l 0 638 l 0 738 l 108 738 l 108 944 l 232 944 l 232 738 l 367 738 l 367 638 l 232 638 l 232 185 q 248 121 232 140 q 307 102 264 102 q 345 104 330 102 q 367 107 360 107 l 367 0 "},"\xac":{"x_min":0,"x_max":706,"ha":803,"o":"m 706 411 l 706 158 l 630 158 l 630 335 l 0 335 l 0 411 l 706 411 "},"\u03bb":{"x_min":0,"x_max":750,"ha":803,"o":"m 750 -7 q 679 -15 716 -15 q 538 59 591 -15 q 466 214 512 97 l 336 551 l 126 0 l 0 0 l 270 705 q 223 837 247 770 q 116 899 190 899 q 90 898 100 899 l 90 1004 q 152 1011 125 1011 q 298 938 244 1011 q 373 783 326 901 l 605 192 q 649 115 629 136 q 716 95 669 95 l 736 95 q 750 97 745 97 l 750 -7 "},"W":{"x_min":0,"x_max":1263.890625,"ha":1351,"o":"m 1263 1013 l 995 0 l 859 0 l 627 837 l 405 0 l 265 0 l 0 1013 l 136 1013 l 342 202 l 556 1013 l 701 1013 l 921 207 l 1133 1012 l 1263 1013 "},">":{"x_min":18.0625,"x_max":774,"ha":792,"o":"m 774 376 l 18 40 l 18 149 l 631 421 l 18 692 l 18 799 l 774 465 l 774 376 "},"v":{"x_min":0,"x_max":675.15625,"ha":761,"o":"m 675 738 l 404 0 l 272 0 l 0 738 l 133 737 l 340 147 l 541 737 l 675 738 "},"\u03c4":{"x_min":0.28125,"x_max":644.5,"ha":703,"o":"m 644 628 l 382 628 l 382 179 q 388 120 382 137 q 436 91 401 91 q 474 94 447 91 q 504 97 501 97 l 504 0 q 454 -9 482 -5 q 401 -14 426 -14 q 278 67 308 -14 q 260 233 260 118 l 260 628 l 0 628 l 0 739 l 644 739 l 644 628 "},"\u03be":{"x_min":0,"x_max":624.9375,"ha":699,"o":"m 624 -37 q 608 -153 624 -96 q 563 -278 593 -211 l 454 -278 q 491 -183 486 -200 q 511 -83 511 -126 q 484 -23 511 -44 q 370 1 452 1 q 323 0 354 1 q 283 -1 293 -1 q 84 76 169 -1 q 0 266 0 154 q 56 431 0 358 q 197 538 108 498 q 94 613 134 562 q 54 730 54 665 q 77 823 54 780 q 143 901 101 867 l 27 901 l 27 1012 l 576 1012 l 576 901 l 380 901 q 244 863 303 901 q 178 745 178 820 q 312 600 178 636 q 532 582 380 582 l 532 479 q 276 455 361 479 q 118 281 118 410 q 165 173 118 217 q 274 120 208 133 q 494 101 384 110 q 624 -37 624 76 "},"&":{"x_min":-3,"x_max":894.25,"ha":992,"o":"m 894 0 l 725 0 l 624 123 q 471 0 553 40 q 306 -41 390 -41 q 168 -7 231 -41 q 62 92 105 26 q 14 187 31 139 q -3 276 -3 235 q 55 433 -3 358 q 248 581 114 508 q 170 689 196 640 q 137 817 137 751 q 214 985 137 922 q 384 1041 284 1041 q 548 988 483 1041 q 622 824 622 928 q 563 666 622 739 q 431 556 516 608 l 621 326 q 649 407 639 361 q 663 493 653 426 l 781 493 q 703 229 781 352 l 894 0 m 504 818 q 468 908 504 877 q 384 940 433 940 q 293 907 331 940 q 255 818 255 875 q 289 714 255 767 q 363 628 313 678 q 477 729 446 682 q 504 818 504 771 m 556 209 l 314 499 q 179 395 223 449 q 135 283 135 341 q 146 222 135 253 q 183 158 158 192 q 333 80 241 80 q 556 209 448 80 "},"\u039b":{"x_min":0,"x_max":862.5,"ha":942,"o":"m 862 0 l 719 0 l 426 847 l 143 0 l 0 0 l 356 1013 l 501 1013 l 862 0 "},"I":{"x_min":41,"x_max":180,"ha":293,"o":"m 180 0 l 41 0 l 41 1013 l 180 1013 l 180 0 "},"G":{"x_min":0,"x_max":921,"ha":1011,"o":"m 921 0 l 832 0 l 801 136 q 655 15 741 58 q 470 -28 568 -28 q 126 133 259 -28 q 0 499 0 284 q 125 881 0 731 q 486 1043 259 1043 q 763 957 647 1043 q 905 709 890 864 l 772 709 q 668 866 747 807 q 486 926 589 926 q 228 795 322 926 q 142 507 142 677 q 228 224 142 342 q 483 94 323 94 q 712 195 625 94 q 796 435 796 291 l 477 435 l 477 549 l 921 549 l 921 0 "},"\u03b0":{"x_min":0,"x_max":617,"ha":725,"o":"m 524 800 l 414 800 l 414 925 l 524 925 l 524 800 m 183 800 l 73 800 l 73 925 l 183 925 l 183 800 m 617 352 q 540 93 617 199 q 308 -24 455 -24 q 76 93 161 -24 q 0 352 0 199 l 0 738 l 126 738 l 126 354 q 169 185 126 257 q 312 98 220 98 q 451 185 402 98 q 492 354 492 257 l 492 738 l 617 738 l 617 352 m 489 1040 l 300 819 l 216 819 l 351 1040 l 489 1040 "},"`":{"x_min":0,"x_max":138.890625,"ha":236,"o":"m 138 699 l 0 699 l 0 861 q 36 974 0 929 q 138 1041 72 1020 l 138 977 q 82 931 95 969 q 69 839 69 893 l 138 839 l 138 699 "},"\xb7":{"x_min":0,"x_max":142,"ha":239,"o":"m 142 585 l 0 585 l 0 738 l 142 738 l 142 585 "},"\u03a5":{"x_min":0.328125,"x_max":819.515625,"ha":889,"o":"m 819 1013 l 482 416 l 482 0 l 342 0 l 342 416 l 0 1013 l 140 1013 l 411 533 l 679 1013 l 819 1013 "},"r":{"x_min":0,"x_max":355.5625,"ha":432,"o":"m 355 621 l 343 621 q 179 569 236 621 q 122 411 122 518 l 122 0 l 0 0 l 0 737 l 117 737 l 117 604 q 204 719 146 686 q 355 753 262 753 l 355 621 "},"x":{"x_min":0,"x_max":675,"ha":764,"o":"m 675 0 l 525 0 l 331 286 l 144 0 l 0 0 l 256 379 l 12 738 l 157 737 l 336 473 l 516 738 l 661 738 l 412 380 l 675 0 "},"\u03bc":{"x_min":0,"x_max":696.609375,"ha":747,"o":"m 696 -4 q 628 -14 657 -14 q 498 97 513 -14 q 422 8 470 41 q 313 -24 374 -24 q 207 3 258 -24 q 120 80 157 31 l 120 -278 l 0 -278 l 0 738 l 124 738 l 124 343 q 165 172 124 246 q 308 82 216 82 q 451 177 402 82 q 492 358 492 254 l 492 738 l 616 738 l 616 214 q 623 136 616 160 q 673 92 636 92 q 696 95 684 92 l 696 -4 "},"h":{"x_min":0,"x_max":615,"ha":724,"o":"m 615 472 l 615 0 l 490 0 l 490 454 q 456 590 490 535 q 338 654 416 654 q 186 588 251 654 q 122 436 122 522 l 122 0 l 0 0 l 0 1013 l 122 1013 l 122 633 q 218 727 149 694 q 362 760 287 760 q 552 676 484 760 q 615 472 615 600 "},".":{"x_min":0,"x_max":142,"ha":239,"o":"m 142 0 l 0 0 l 0 151 l 142 151 l 142 0 "},"\u03c6":{"x_min":-2,"x_max":878,"ha":974,"o":"m 496 -279 l 378 -279 l 378 -17 q 101 88 204 -17 q -2 367 -2 194 q 68 626 -2 510 q 283 758 151 758 l 283 646 q 167 537 209 626 q 133 373 133 462 q 192 177 133 254 q 378 93 259 93 l 378 758 q 445 764 426 763 q 476 765 464 765 q 765 659 653 765 q 878 377 878 553 q 771 96 878 209 q 496 -17 665 -17 l 496 -279 m 496 93 l 514 93 q 687 183 623 93 q 746 380 746 265 q 691 569 746 491 q 522 658 629 658 l 496 656 l 496 93 "},";":{"x_min":0,"x_max":142,"ha":239,"o":"m 142 585 l 0 585 l 0 738 l 142 738 l 142 585 m 142 -12 q 105 -132 142 -82 q 0 -206 68 -182 l 0 -138 q 58 -82 43 -123 q 68 0 68 -56 l 0 0 l 0 151 l 142 151 l 142 -12 "},"f":{"x_min":0,"x_max":378,"ha":472,"o":"m 378 638 l 246 638 l 246 0 l 121 0 l 121 638 l 0 638 l 0 738 l 121 738 q 137 935 121 887 q 290 1028 171 1028 q 320 1027 305 1028 q 378 1021 334 1026 l 378 908 q 323 918 346 918 q 257 870 273 918 q 246 780 246 840 l 246 738 l 378 738 l 378 638 "},"\u201c":{"x_min":1,"x_max":348.21875,"ha":454,"o":"m 140 670 l 1 670 l 1 830 q 37 943 1 897 q 140 1011 74 990 l 140 947 q 82 900 97 940 q 68 810 68 861 l 140 810 l 140 670 m 348 670 l 209 670 l 209 830 q 245 943 209 897 q 348 1011 282 990 l 348 947 q 290 900 305 940 q 276 810 276 861 l 348 810 l 348 670 "},"A":{"x_min":0.03125,"x_max":906.953125,"ha":1008,"o":"m 906 0 l 756 0 l 648 303 l 251 303 l 142 0 l 0 0 l 376 1013 l 529 1013 l 906 0 m 610 421 l 452 867 l 293 421 l 610 421 "},"\u2018":{"x_min":1,"x_max":139.890625,"ha":236,"o":"m 139 670 l 1 670 l 1 830 q 37 943 1 897 q 139 1011 74 990 l 139 947 q 82 900 97 940 q 68 810 68 861 l 139 810 l 139 670 "},"\u03ca":{"x_min":-70,"x_max":283,"ha":361,"o":"m 283 800 l 173 800 l 173 925 l 283 925 l 283 800 m 40 800 l -70 800 l -70 925 l 40 925 l 40 800 m 283 3 q 232 -10 257 -5 q 181 -15 206 -15 q 84 26 118 -15 q 41 200 41 79 l 41 737 l 166 737 l 167 215 q 171 141 167 157 q 225 101 182 101 q 247 103 238 101 q 283 112 256 104 l 283 3 "},"\u03c0":{"x_min":-0.21875,"x_max":773.21875,"ha":857,"o":"m 773 -7 l 707 -11 q 575 40 607 -11 q 552 174 552 77 l 552 226 l 552 626 l 222 626 l 222 0 l 97 0 l 97 626 l 0 626 l 0 737 l 773 737 l 773 626 l 676 626 l 676 171 q 695 103 676 117 q 773 90 714 90 l 773 -7 "},"\u03ac":{"x_min":0,"x_max":765.5625,"ha":809,"o":"m 765 -4 q 698 -14 726 -14 q 564 97 586 -14 q 466 7 525 40 q 337 -26 407 -26 q 88 98 186 -26 q 0 369 0 212 q 88 637 0 525 q 337 760 184 760 q 465 727 407 760 q 563 637 524 695 l 563 738 l 685 738 l 685 222 q 693 141 685 168 q 748 94 708 94 q 765 95 760 94 l 765 -4 m 584 371 q 531 562 584 485 q 360 653 470 653 q 192 566 254 653 q 135 379 135 489 q 186 181 135 261 q 358 84 247 84 q 528 176 465 84 q 584 371 584 260 m 604 1040 l 415 819 l 332 819 l 466 1040 l 604 1040 "},"O":{"x_min":0,"x_max":958,"ha":1057,"o":"m 485 1041 q 834 882 702 1041 q 958 512 958 734 q 834 136 958 287 q 481 -26 702 -26 q 126 130 261 -26 q 0 504 0 279 q 127 880 0 728 q 485 1041 263 1041 m 480 98 q 731 225 638 98 q 815 504 815 340 q 733 783 815 669 q 480 912 640 912 q 226 784 321 912 q 142 504 142 670 q 226 224 142 339 q 480 98 319 98 "},"n":{"x_min":0,"x_max":615,"ha":724,"o":"m 615 463 l 615 0 l 490 0 l 490 454 q 453 592 490 537 q 331 656 410 656 q 178 585 240 656 q 117 421 117 514 l 117 0 l 0 0 l 0 738 l 117 738 l 117 630 q 218 728 150 693 q 359 764 286 764 q 552 675 484 764 q 615 463 615 593 "},"l":{"x_min":41,"x_max":166,"ha":279,"o":"m 166 0 l 41 0 l 41 1013 l 166 1013 l 166 0 "},"\xa4":{"x_min":40.09375,"x_max":728.796875,"ha":825,"o":"m 728 304 l 649 224 l 512 363 q 383 331 458 331 q 256 363 310 331 l 119 224 l 40 304 l 177 441 q 150 553 150 493 q 184 673 150 621 l 40 818 l 119 898 l 267 749 q 321 766 291 759 q 384 773 351 773 q 447 766 417 773 q 501 749 477 759 l 649 898 l 728 818 l 585 675 q 612 618 604 648 q 621 553 621 587 q 591 441 621 491 l 728 304 m 384 682 q 280 643 318 682 q 243 551 243 604 q 279 461 243 499 q 383 423 316 423 q 487 461 449 423 q 525 553 525 500 q 490 641 525 605 q 384 682 451 682 "},"\u03ba":{"x_min":0,"x_max":632.328125,"ha":679,"o":"m 632 0 l 482 0 l 225 384 l 124 288 l 124 0 l 0 0 l 0 738 l 124 738 l 124 446 l 433 738 l 596 738 l 312 466 l 632 0 "},"p":{"x_min":0,"x_max":685,"ha":786,"o":"m 685 364 q 598 96 685 205 q 350 -23 504 -23 q 121 89 205 -23 l 121 -278 l 0 -278 l 0 738 l 121 738 l 121 633 q 220 726 159 691 q 351 761 280 761 q 598 636 504 761 q 685 364 685 522 m 557 371 q 501 560 557 481 q 330 651 437 651 q 162 559 223 651 q 108 366 108 479 q 162 177 108 254 q 333 87 224 87 q 502 178 441 87 q 557 371 557 258 "},"\u2021":{"x_min":0,"x_max":777,"ha":835,"o":"m 458 238 l 458 0 l 319 0 l 319 238 l 0 238 l 0 360 l 319 360 l 319 681 l 0 683 l 0 804 l 319 804 l 319 1015 l 458 1013 l 458 804 l 777 804 l 777 683 l 458 683 l 458 360 l 777 360 l 777 238 l 458 238 "},"\u03c8":{"x_min":0,"x_max":808,"ha":907,"o":"m 465 -278 l 341 -278 l 341 -15 q 87 102 180 -15 q 0 378 0 210 l 0 739 l 133 739 l 133 379 q 182 195 133 275 q 341 98 242 98 l 341 922 l 465 922 l 465 98 q 623 195 563 98 q 675 382 675 278 l 675 742 l 808 742 l 808 381 q 720 104 808 213 q 466 -13 627 -13 l 465 -278 "},"\u03b7":{"x_min":0.78125,"x_max":697,"ha":810,"o":"m 697 -278 l 572 -278 l 572 454 q 540 587 572 536 q 425 650 501 650 q 271 579 337 650 q 206 420 206 509 l 206 0 l 81 0 l 81 489 q 73 588 81 562 q 0 644 56 644 l 0 741 q 68 755 38 755 q 158 720 124 755 q 200 630 193 686 q 297 726 234 692 q 434 761 359 761 q 620 692 544 761 q 697 516 697 624 l 697 -278 "}},"cssFontWeight":"normal","ascender":1189,"underlinePosition":-100,"cssFontStyle":"normal","boundingBox":{"yMin":-334,"xMin":-111,"yMax":1189,"xMax":1672},"resolution":1000,"original_font_information":{"postscript_name":"Helvetiker-Regular","version_string":"Version 1.00 2004 initial release","vendor_url":"http://www.magenta.gr/","full_font_name":"Helvetiker","font_family_name":"Helvetiker","copyright":"Copyright (c) \u039cagenta ltd, 2004","description":"","trademark":"","designer":"","designer_url":"","unique_font_identifier":"\u039cagenta ltd:Helvetiker:22-10-104","license_url":"http://www.ellak.gr/fonts/MgOpen/license.html","license_description":"Copyright (c) 2004 by MAGENTA Ltd. All Rights Reserved.\\r\\n\\r\\nPermission is hereby granted, free of charge, to any person obtaining a copy of the fonts accompanying this license (\\"Fonts\\") and associated documentation files (the \\"Font Software\\"), to reproduce and distribute the Font Software, including without limitation the rights to use, copy, merge, publish, distribute, and/or sell copies of the Font Software, and to permit persons to whom the Font Software is furnished to do so, subject to the following conditions: \\r\\n\\r\\nThe above copyright and this permission notice shall be included in all copies of one or more of the Font Software typefaces.\\r\\n\\r\\nThe Font Software may be modified, altered, or added to, and in particular the designs of glyphs or characters in the Fonts may be modified and additional glyphs or characters may be added to the Fonts, only if the fonts are renamed to names not containing the word \\"MgOpen\\", or if the modifications are accepted for inclusion in the Font Software itself by the each appointed Administrator.\\r\\n\\r\\nThis License becomes null and void to the extent applicable to Fonts or Font Software that has been modified and is distributed under the \\"MgOpen\\" name.\\r\\n\\r\\nThe Font Software may be sold as part of a larger software package but no copy of one or more of the Font Software typefaces may be sold by itself. \\r\\n\\r\\nTHE FONT SOFTWARE IS PROVIDED \\"AS IS\\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL MAGENTA OR PERSONS OR BODIES IN CHARGE OF ADMINISTRATION AND MAINTENANCE OF THE FONT SOFTWARE BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM OTHER DEALINGS IN THE FONT SOFTWARE.","manufacturer_name":"\u039cagenta ltd","font_sub_family_name":"Regular"},"descender":-334,"familyName":"Helvetiker","lineHeight":1522,"underlineThickness":50}');let qa=(()=>{class i{constructor(t,n=!0){this.useCameraLight=!0,this.textFont=new yU(coe),this.labelTextLookCallbacks={},this.getScene(),this.ignoreList=t,this.axis=null,this.setLights(n)}setLights(t=!0){this.useCameraLight=t;const n=new N4(16777215,.6);this.scene.add(n),this.useCameraLight?(this.cameraLight=new h2(16777215,.45),this.cameraLight.position.set(0,0,10),this.scene.add(this.cameraLight)):[[-100,-50,100],[100,50,-100],[-100,50,-100],[100,-50,100]].forEach(r=>{const s=new h2(16777215,.2);s.position.set(r[0],r[1],r[2]),this.scene.add(s)})}updateLights(t){this.useCameraLight&&this.cameraLight.position.copy(t.position)}getScene(){return this.scene||(this.scene=new p4),this.scene}getCleanScene(){const t=this.scene.clone(),n=[];return t.traverse(r=>{this.ignoreList.includes(r.type)&&n.push(r)}),t.remove(...n),t}setGeometryOpacity(t,n){n&&t&&t.traverse(r=>{r?.material&&(r.material.transparent=!0,r.material.opacity=n)})}changeObjectColor(t,n){t&&t.traverse(r=>{(r instanceof Pa||r instanceof UA)&&(r.material instanceof Lm||r.material instanceof xh||r.material instanceof su)&&r.material.color.set(n)})}objectVisibility(t,n){t&&(t.visible=n,t.traverse(r=>{n?(r.layers.enable(0),r.layers.disable(1)):(r.layers.disable(0),r.layers.enable(1))}))}getObjectPosition(t){var n;return null===(n=this.scene.getObjectByName(t))||void 0===n?void 0:n.position}removeGeometry(t){this.getGeometries().remove(t)}removeLabel(t){const n=this.scene.getObjectByName(t);this.getObjectsGroup(i.LABELS_ID).remove(n)}scaleObject(t,n){t.scale.setScalar(n)}addEventDataTypeGroup(t){const n=this.getEventData();let r=this.scene.getObjectByName(t);return r||(r=new Xu),r.name=t,n.add(r),r}collectionFilter(t,n){const r=this.getScene().getObjectByName(i.EVENT_DATA_ID).getObjectByName(t);for(const s of Object.values(r.children))if(s.userData)for(const a of n){const l=s.userData[a.field];if(l){if(!a.cutPassed(l)){s.visible=!1;break}s.visible=!0}}}groupVisibility(t,n,r){const a=(r?this.scene.getObjectByName(r):this.scene).getObjectByName(t);for(const l of Object.values(a.children))l.visible=n}getObjectsGroup(t){let n=this.scene.getObjectByName(t);return null==n&&(n=new Xu,n.name=t,this.scene.add(n)),n}getEventData(){return this.getObjectsGroup(i.EVENT_DATA_ID)}getGeometries(){return this.getObjectsGroup(i.GEOMETRIES_ID)}clearEventData(){const t=this.getEventData();null!=t&&this.scene.remove(t),this.getEventData()}getText(t,n){const r=new ooe(t,{font:this.textFont,size:60,curveSegments:1,height:1});return new Pa(r,new xh({color:new Lr(n)}))}setAxis(t,n=2e3,r=!0){if(null==this.axis&&(this.axis=new Tk(n),this.scene.add(this.axis)),this.axis.visible=t,r&&null==this.axisLabels){this.axisLabels=new Xu;const s=["X","Y","Z"],a=[16711680,65280,255];let l=0;for(const u of s){const d=this.getText(u,new Lr(a[l++]));this.axisLabels.add(d)}this.axisLabels.children[0].position.set(n+20,0,0),this.axisLabels.children[1].position.set(0,n+20,0),this.axisLabels.children[2].position.set(0,0,n+20),this.scene.add(this.axisLabels)}this.axisLabels.visible=t}eventDataDepthTest(t){const n=this.getEventData();null!==n&&n.traverse(r=>{r.material&&(r.renderOrder=t?0:999,r.material.depthTest=t)})}wireframeGeometries(t){this.getGeometries().traverse(r=>{r.material&&(r.material.wireframe=t,t?(r.material.transparent=!0,r.material.opacity=.1):(r.material.transparent=!1,r.material.opacity=1))})}wireframeObjects(t,n){t.traverse(r=>{r.material&&(r.material.wireframe=n)})}scaleJets(t){t<=0||this.scene.getObjectByName("Jets").traverse(r=>{if("Jet"===r.name){const s=r.scale.x;r.scale.setScalar(t),r.position.divideScalar(s).multiplyScalar(t)}})}scaleChildObjects(t,n,r){this.scene.getObjectByName(t).traverse(a=>{0===a.children.length&&(r?a.scale[r]=n:a.scale.setScalar(n))})}addLabelToObject(t,n,r,s,a){this.scene.getObjectByProperty("uuid",n).userData.label=t;const u=this.getObjectsGroup(i.LABELS_ID),d=this.scene.getObjectByName(r);d&&u.remove(d);const p=this.getText(t,new Lr("#a8a8a8"));p.position.fromArray(s.toArray()),p.name=r,u.add(p),a.removeEventListener("change",this.labelTextLookCallbacks[n]),this.labelTextLookCallbacks[n]=()=>{p.lookAt(a.object.position)},this.labelTextLookCallbacks[n](),a.addEventListener("change",this.labelTextLookCallbacks[n])}setEtaPhiGrid(t,n=3e3){if(null==this.grid){this.grid=new Xu;let r=[];const s=n,a=new Lr(255);for(let Le=-3;Le<=3;Le+=1){r.push(new Nt(0,0,0));const we=Ff.etaPhiToCartesian(s,Le,Math.PI/2),He=this.getText("\u03b7="+Le.toPrecision(2),a);He.position.set(we.x,we.y,we.z),He.rotateOnWorldAxis(new Nt(0,1,0),Math.PI/2),this.grid.add(He),r.push(we)}const l=(new Co).setFromPoints(r),u=new R4({color:a,dashSize:2,gapSize:1,scale:.01}),d=new UA(l,u);d.computeLineDistances();const p=2*Math.PI/8,y=["-\u03c0","-3\u03c0/4","-\u03c0/2,","-\u03c0/4","0","\u03c0/4","\u03c0/2,","3\u03c0/4"];let C=0;const O=new Lr(16711680);r=[];const Q=.9*s;for(let Le=-Math.PI;Le0&&(this.next.push(l.x,l.y,l.z),this.next.push(l.x,l.y,l.z))}const s=e.length-1;return this.next.push(e[s].x,e[s].y,e[s].z),this.next.push(e[s].x,e[s].y,e[s].z),n}process(){this._attributes&&this._attributes.position.count===this.positions.length?(this._attributes.position.copyArray(new Float32Array(this.positions)),this._attributes.position.needsUpdate=!0,this._attributes.previous.copyArray(new Float32Array(this.previous)),this._attributes.previous.needsUpdate=!0,this._attributes.next.copyArray(new Float32Array(this.next)),this._attributes.next.needsUpdate=!0,this._attributes.side.copyArray(new Float32Array(this.side)),this._attributes.side.needsUpdate=!0,this._attributes.track_id.copyArray(new Int32Array(this.track_id)),this._attributes.track_id.needsUpdate=!0,this._attributes.color.copyArray(new Float32Array(this.colors)),this._attributes.color.needsUpdate=!0,this._attributes.counter.copyArray(new Float32Array(this.counter)),this._attributes.counter.needsUpdate=!0,this._attributes.index.copyArray(new Uint32Array(this.indices_array)),this._attributes.index.needsUpdate=!0):this._attributes={position:new va(new Float32Array(this.positions),3),previous:new va(new Float32Array(this.previous),3),next:new va(new Float32Array(this.next),3),side:new va(new Float32Array(this.side),1),track_id:new va(new Int32Array(this.track_id),1),color:new va(new Float32Array(this.colors),3),counter:new va(new Float32Array(this.counter),1),index:new va(new Uint32Array(this.indices_array),1)},this.setAttribute("position",this._attributes.position),this.setAttribute("previous",this._attributes.previous),this.setAttribute("next",this._attributes.next),this.setAttribute("side",this._attributes.side),this.setAttribute("track_id",this._attributes.track_id),this.setAttribute("color",this._attributes.color),this.setAttribute("counter",this._attributes.counter),this.setIndex(this._attributes.index),this.computeBoundingSphere(),this.computeBoundingBox()}}fa.tracks_vert=["attribute vec3 previous;","attribute vec3 next;","attribute int track_id;","attribute float side;","attribute vec3 color;","attribute float counter;","varying vec3 v_color;","varying float v_counter;","flat varying int v_track_id;","uniform vec2 resolution;","uniform float lineWidth;","void main() {"," vec2 aspect = vec2(resolution.x / resolution.y, 1.0);",""," v_color = color;"," v_counter = counter;"," v_track_id = track_id;",""," mat4 m = projectionMatrix * modelViewMatrix;"," vec4 finalPosition = m * vec4(position, 1.0);"," vec4 prevPos = m * vec4(previous, 1.0);"," vec4 nextPos = m * vec4(next, 1.0);",""," vec2 curP = finalPosition.xy / finalPosition.w * aspect;"," vec2 prevP = prevPos.xy / prevPos.w * aspect;"," vec2 nextP = nextPos.xy / nextPos.w * aspect;",""," vec2 dir;"," if (curP == prevP) dir = normalize(nextP - curP);"," else if (curP == nextP) dir = normalize(curP - prevP);"," else dir = normalize(curP - prevP);",""," vec2 normal = vec2(-dir.y, dir.x);"," normal.xy *= .5 * lineWidth;"," normal.x /= aspect.x;"," normal.xy *= finalPosition.w * 0.001;"," finalPosition.xy += normal.xy * side;"," gl_Position = finalPosition;","}"].join("\n"),fa.tracks_frag=["uniform float progress;","varying vec3 v_color;","varying float v_counter;","flat varying int v_track_id;","void main() {"," if (v_counter > progress) discard;"," gl_FragColor = vec4(v_color, 1.0);","}"].join("\n");class uoe extends Td{constructor(e){super({uniforms:Object.assign({},{lineWidth:{value:1},resolution:{value:new ji(1,1)},progress:{value:1}}),vertexShader:fa.tracks_vert,fragmentShader:fa.tracks_frag}),this.isTracksMaterial=!0,this.type="TracksMaterial",Object.defineProperties(this,{lineWidth:{enumerable:!0,get:function(){return this.uniforms.lineWidth.value},set:function(t){this.uniforms.lineWidth.value=t}},resolution:{enumerable:!0,get:function(){return this.uniforms.resolution.value},set:function(t){this.uniforms.resolution.value.copy(t)}},progress:{enumerable:!0,get:function(){return this.uniforms.progress.value},set:function(t){this.uniforms.progress.value=t}}}),this.setValues(e)}}class hoe{constructor(e,t,n){this.scene=e,this.activeCamera=t,this.rendererManager=n,this.animateEvent=this.animateEvent.bind(this),this.animateEventWithClipping=this.animateEventWithClipping.bind(this)}getCameraTween(e,t=1e3,n){const r=new Tf(this.activeCamera.position).to({x:e[0],y:e[1],z:e[2]},t);return n&&r.easing(n),r}animateThroughEvent(e,t,n){const r=this.getCameraTween(e,1e3,t0.Cubic.Out),a=this.getCameraTween([0,0,e[2]],t),p=3*Math.PI/24,y=[];for(let we=1;we<=24;we++)y.push([500*Math.sin(p*we),0,500*Math.cos(p*we)]);const C=this.getCameraTween([0,0,500],t,t0.Cubic.Out);let O=C;const W=4*t/24;for(const we of y){const He=this.getCameraTween(we,W);O.chain(He),O=He}const ye=this.getCameraTween([0,0,-e[2]],t,t0.Cubic.In),Le=this.getCameraTween(e,t,t0.Cubic.Out);Le.onComplete(()=>n?.()),Le.delay(500),r.chain(a),a.chain(C),O.chain(ye),ye.chain(Le),r.start()}animateEvent(e,t,n){const r=.25*e;e*=.75;const s=this.scene.getObjectByName(qa.EVENT_DATA_ID),a=new O_(new Nt,0),l=[],u=[];s.traverse(C=>{var O,Q,W;if(C.geometry)if("Track"===C.name||"LineHit"===C.name){let se=null===(W=null===(Q=null===(O=C.geometry)||void 0===O?void 0:O.attributes)||void 0===Q?void 0:Q.position)||void 0===W?void 0:W.count;if(se)if(C.geometry instanceof yb&&(se*=6),C.geometry instanceof vU){C.material.progress=0;const ye=new Tf(C.material).to({progress:1},e);ye.onComplete(()=>{C.material.progress=1}),u.push(ye)}else if(C.geometry instanceof Co){const ye=C.geometry.drawRange.count;C.geometry.setDrawRange(0,0);const Le=new Tf(C.geometry.drawRange).to({count:se},e);Le.onComplete(()=>{C.geometry.drawRange.count=ye}),u.push(Le)}}else if("Jet"===C.name){const se=new Tf({x:.01,y:.01,z:.01}).to({x:C.scale.x,y:C.scale.y,z:C.scale.z},e);se.onUpdate(ye=>{const Le=C.scale.x;C.scale.setScalar(ye.x),C.position.divideScalar(Le).multiplyScalar(ye.x)}),u.push(se)}else{let ye=C.position.equals(new Nt(0,0,0))?C.geometry.boundingSphere.center:C.position;"Hit"===C.name?(ye=Array.from(C.geometry.attributes.position.array),C.geometry.deleteAttribute("position"),C.geometry.computeBoundingSphere()):C.visible=!1,l.push({eventObject:C,position:ye})}});const d=new Tf(a).to({radius:3e3},e),p=C=>{l.forEach(O=>{if("Hit"===O.eventObject.name){const Q=O.eventObject.geometry,se=this.getHitsPositions(O.position).filter(ye=>C.containsPoint((new Nt).fromArray(ye)));se.length>0&&(Q.setAttribute("position",new va(new Float32Array([].concat(...se)),3)),Q.computeBoundingSphere())}else C.containsPoint(O.position)&&(O.eventObject.visible=!0)})};d.onUpdate(p);const y=new Tf(a).to({radius:1e4},r);y.onUpdate(p),d.chain(y),u.push(d),u[0].onStart(()=>n?.());for(const C of u)C.easing(t0.Quartic.Out).start();y.onComplete(()=>{p(new O_(new Nt,1/0)),t?.()})}animateEventWithClipping(e,t,n,r=11e3){const s=this.scene.getObjectByName(qa.EVENT_DATA_ID),a=new fy(1,8,8),l=[],u=a.attributes.position,d=new Nt;for(let C=0;C{C.geometry&&C.material&&(C.material.clippingPlanes=l)});const y=[];for(const C of l){C.constant=0;const O=new Tf(C).to({constant:r},e);y.push(O)}y[0].onStart(()=>n?.());for(const C of y)C.start();y[y.length-1].onComplete(()=>{p||(this.rendererManager.getMainRenderer().localClippingEnabled=p),s.traverse(C=>{C.geometry&&C.material&&(C.material.clippingPlanes=null)}),t?.()})}collideParticles(e,t=10,n=5e3,r=new Lr(16777215),s){const a=new fy(t,32,32),l=new xh({color:r,transparent:!0,opacity:0}),u=new Pa(a,l),d=u.clone();u.position.setZ(n),d.position.setZ(-n);const p=[u,d];this.scene.add(...p);const y=[];for(const C of p){new Tf(C.material).to({opacity:1},300).start();const O=new Tf(C.position).to({z:0},e).start();y.push(O)}y[0].onComplete(()=>{this.scene.remove(...p),s?.()})}animateWithCollision(e,t,n){var r,s;const a=this.scene.getObjectByName(qa.EVENT_DATA_ID),l=a.getObjectByName("Track");let u;u=l instanceof Xu?null===(s=null===(r=l.children[0])||void 0===r?void 0:r.material)||void 0===s?void 0:s.color:l?.material.color,a&&(a.visible=!1),this.collideParticles(1500,30,5e3,u,()=>{e(t,n,()=>{a&&(a.visible=!0)})})}animateEventWithCollision(e,t){this.animateWithCollision(this.animateEvent,e,t)}animateClippingWithCollision(e,t){this.animateWithCollision(this.animateEventWithClipping,e,t)}getHitsPositions(e){const t=[];for(let n=0;n{this.animateEventWithCollision(a)},s));const l=this.getCameraTween(r[0].position,null!==(n=r[0].duration)&&void 0!==n?n:2e3,r[0].easing);let u=l;r.slice(1).forEach(({position:d,duration:p,easing:y})=>{const C=this.getCameraTween(d,p??2e3,y);u.chain(C),u=C}),u.onComplete(t),l.start()}}const bU={uniforms:{tDiffuse:{value:null},opacity:{value:1}},vertexShader:"\n\n\t\tvarying vec2 vUv;\n\n\t\tvoid main() {\n\n\t\t\tvUv = uv;\n\t\t\tgl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\n\n\t\t}",fragmentShader:"\n\n\t\tuniform float opacity;\n\n\t\tuniform sampler2D tDiffuse;\n\n\t\tvarying vec2 vUv;\n\n\t\tvoid main() {\n\n\t\t\tgl_FragColor = texture2D( tDiffuse, vUv );\n\t\t\tgl_FragColor.a *= opacity;\n\n\n\t\t}"};class hS{constructor(){this.enabled=!0,this.needsSwap=!0,this.clear=!1,this.renderToScreen=!1}setSize(){}render(){console.error("THREE.Pass: .render() must be implemented in derived pass.")}dispose(){}}const doe=new Kw(-1,1,1,-1,0,1),zk=new Co;zk.setAttribute("position",new Ls([-1,3,0,-1,-1,0,3,-1,0],3)),zk.setAttribute("uv",new Ls([0,2,0,0,2,0],2));class xU{constructor(e){this._mesh=new Pa(zk,e)}dispose(){this._mesh.geometry.dispose()}render(e){e.render(this._mesh,doe)}get material(){return this._mesh.material}set material(e){this._mesh.material=e}}class foe extends hS{constructor(e,t){super(),this.textureID=void 0!==t?t:"tDiffuse",e instanceof Td?(this.uniforms=e.uniforms,this.material=e):e&&(this.uniforms=EP.clone(e.uniforms),this.material=new Td({defines:Object.assign({},e.defines),uniforms:this.uniforms,vertexShader:e.vertexShader,fragmentShader:e.fragmentShader})),this.fsQuad=new xU(this.material)}render(e,t,n){this.uniforms[this.textureID]&&(this.uniforms[this.textureID].value=n.texture),this.fsQuad.material=this.material,this.renderToScreen?(e.setRenderTarget(null),this.fsQuad.render(e)):(e.setRenderTarget(t),this.clear&&e.clear(e.autoClearColor,e.autoClearDepth,e.autoClearStencil),this.fsQuad.render(e))}dispose(){this.material.dispose(),this.fsQuad.dispose()}}class wU extends hS{constructor(e,t){super(),this.scene=e,this.camera=t,this.clear=!0,this.needsSwap=!1,this.inverse=!1}render(e,t,n){const r=e.getContext(),s=e.state;let a,l;s.buffers.color.setMask(!1),s.buffers.depth.setMask(!1),s.buffers.color.setLocked(!0),s.buffers.depth.setLocked(!0),this.inverse?(a=0,l=1):(a=1,l=0),s.buffers.stencil.setTest(!0),s.buffers.stencil.setOp(r.REPLACE,r.REPLACE,r.REPLACE),s.buffers.stencil.setFunc(r.ALWAYS,a,4294967295),s.buffers.stencil.setClear(l),s.buffers.stencil.setLocked(!0),e.setRenderTarget(n),this.clear&&e.clear(),e.render(this.scene,this.camera),e.setRenderTarget(t),this.clear&&e.clear(),e.render(this.scene,this.camera),s.buffers.color.setLocked(!1),s.buffers.depth.setLocked(!1),s.buffers.stencil.setLocked(!1),s.buffers.stencil.setFunc(r.EQUAL,1,4294967295),s.buffers.stencil.setOp(r.KEEP,r.KEEP,r.KEEP),s.buffers.stencil.setLocked(!0)}}class poe extends hS{constructor(){super(),this.needsSwap=!1}render(e){e.state.buffers.stencil.setLocked(!1),e.state.buffers.stencil.setTest(!1)}}class Aoe{constructor(e,t){if(this.renderer=e,void 0===t){const n=e.getSize(new ji);this._pixelRatio=e.getPixelRatio(),this._width=n.width,this._height=n.height,(t=new If(this._width*this._pixelRatio,this._height*this._pixelRatio)).texture.name="EffectComposer.rt1"}else this._pixelRatio=1,this._width=t.width,this._height=t.height;this.renderTarget1=t,this.renderTarget2=t.clone(),this.renderTarget2.texture.name="EffectComposer.rt2",this.writeBuffer=this.renderTarget1,this.readBuffer=this.renderTarget2,this.renderToScreen=!0,this.passes=[],this.copyPass=new foe(bU),this.clock=new F9}swapBuffers(){const e=this.readBuffer;this.readBuffer=this.writeBuffer,this.writeBuffer=e}addPass(e){this.passes.push(e),e.setSize(this._width*this._pixelRatio,this._height*this._pixelRatio)}insertPass(e,t){this.passes.splice(t,0,e),e.setSize(this._width*this._pixelRatio,this._height*this._pixelRatio)}removePass(e){const t=this.passes.indexOf(e);-1!==t&&this.passes.splice(t,1)}isLastEnabledPass(e){for(let t=e+1;t0){e.getClearColor(this._oldClearColor),this.oldClearAlpha=e.getClearAlpha();const a=e.autoClear;e.autoClear=!1,s&&e.state.buffers.stencil.setTest(!1),e.setClearColor(16777215,1),this.changeVisibilityOfSelectedObjects(!1);const l=this.renderScene.background;if(this.renderScene.background=null,this.renderScene.overrideMaterial=this.depthMaterial,e.setRenderTarget(this.renderTargetDepthBuffer),e.clear(),e.render(this.renderScene,this.renderCamera),this.changeVisibilityOfSelectedObjects(!0),this._visibilityCache.clear(),this.updateTextureMatrix(),this.changeVisibilityOfNonSelectedObjects(!1),this.renderScene.overrideMaterial=this.prepareMaskMaterial,this.prepareMaskMaterial.uniforms.cameraNearFar.value.set(this.renderCamera.near,this.renderCamera.far),this.prepareMaskMaterial.uniforms.depthTexture.value=this.renderTargetDepthBuffer.texture,this.prepareMaskMaterial.uniforms.textureMatrix.value=this.textureMatrix,e.setRenderTarget(this.renderTargetMaskBuffer),e.clear(),e.render(this.renderScene,this.renderCamera),this.renderScene.overrideMaterial=null,this.changeVisibilityOfNonSelectedObjects(!0),this._visibilityCache.clear(),this.renderScene.background=l,this.fsQuad.material=this.materialCopy,this.copyUniforms.tDiffuse.value=this.renderTargetMaskBuffer.texture,e.setRenderTarget(this.renderTargetMaskDownSampleBuffer),e.clear(),this.fsQuad.render(e),this.tempPulseColor1.copy(this.visibleEdgeColor),this.tempPulseColor2.copy(this.hiddenEdgeColor),this.pulsePeriod>0){const u=.625+.75*Math.cos(.01*performance.now()/this.pulsePeriod)/2;this.tempPulseColor1.multiplyScalar(u),this.tempPulseColor2.multiplyScalar(u)}this.fsQuad.material=this.edgeDetectionMaterial,this.edgeDetectionMaterial.uniforms.maskTexture.value=this.renderTargetMaskDownSampleBuffer.texture,this.edgeDetectionMaterial.uniforms.texSize.value.set(this.renderTargetMaskDownSampleBuffer.width,this.renderTargetMaskDownSampleBuffer.height),this.edgeDetectionMaterial.uniforms.visibleEdgeColor.value=this.tempPulseColor1,this.edgeDetectionMaterial.uniforms.hiddenEdgeColor.value=this.tempPulseColor2,e.setRenderTarget(this.renderTargetEdgeBuffer1),e.clear(),this.fsQuad.render(e),this.fsQuad.material=this.separableBlurMaterial1,this.separableBlurMaterial1.uniforms.colorTexture.value=this.renderTargetEdgeBuffer1.texture,this.separableBlurMaterial1.uniforms.direction.value=yy.BlurDirectionX,this.separableBlurMaterial1.uniforms.kernelRadius.value=this.edgeThickness,e.setRenderTarget(this.renderTargetBlurBuffer1),e.clear(),this.fsQuad.render(e),this.separableBlurMaterial1.uniforms.colorTexture.value=this.renderTargetBlurBuffer1.texture,this.separableBlurMaterial1.uniforms.direction.value=yy.BlurDirectionY,e.setRenderTarget(this.renderTargetEdgeBuffer1),e.clear(),this.fsQuad.render(e),this.fsQuad.material=this.separableBlurMaterial2,this.separableBlurMaterial2.uniforms.colorTexture.value=this.renderTargetEdgeBuffer1.texture,this.separableBlurMaterial2.uniforms.direction.value=yy.BlurDirectionX,e.setRenderTarget(this.renderTargetBlurBuffer2),e.clear(),this.fsQuad.render(e),this.separableBlurMaterial2.uniforms.colorTexture.value=this.renderTargetBlurBuffer2.texture,this.separableBlurMaterial2.uniforms.direction.value=yy.BlurDirectionY,e.setRenderTarget(this.renderTargetEdgeBuffer2),e.clear(),this.fsQuad.render(e),this.fsQuad.material=this.overlayMaterial,this.overlayMaterial.uniforms.maskTexture.value=this.renderTargetMaskBuffer.texture,this.overlayMaterial.uniforms.edgeTexture1.value=this.renderTargetEdgeBuffer1.texture,this.overlayMaterial.uniforms.edgeTexture2.value=this.renderTargetEdgeBuffer2.texture,this.overlayMaterial.uniforms.patternTexture.value=this.patternTexture,this.overlayMaterial.uniforms.edgeStrength.value=this.edgeStrength,this.overlayMaterial.uniforms.edgeGlow.value=this.edgeGlow,this.overlayMaterial.uniforms.usePatternTexture.value=this.usePatternTexture,s&&e.state.buffers.stencil.setTest(!0),e.setRenderTarget(n),this.fsQuad.render(e),e.setClearColor(this._oldClearColor,this.oldClearAlpha),e.autoClear=a}this.renderToScreen&&(this.fsQuad.material=this.materialCopy,this.copyUniforms.tDiffuse.value=n.texture,e.setRenderTarget(null),this.fsQuad.render(e))}getPrepareMaskMaterial(){return new Td({uniforms:{depthTexture:{value:null},cameraNearFar:{value:new ji(.5,.5)},textureMatrix:{value:null}},vertexShader:"#include \n\t\t\t\t#include \n\n\t\t\t\tvarying vec4 projTexCoord;\n\t\t\t\tvarying vec4 vPosition;\n\t\t\t\tuniform mat4 textureMatrix;\n\n\t\t\t\tvoid main() {\n\n\t\t\t\t\t#include \n\t\t\t\t\t#include \n\t\t\t\t\t#include \n\t\t\t\t\t#include \n\t\t\t\t\t#include \n\n\t\t\t\t\tvPosition = mvPosition;\n\n\t\t\t\t\tvec4 worldPosition = vec4( transformed, 1.0 );\n\n\t\t\t\t\t#ifdef USE_INSTANCING\n\n\t\t\t\t\t\tworldPosition = instanceMatrix * worldPosition;\n\n\t\t\t\t\t#endif\n\t\t\t\t\t\n\t\t\t\t\tworldPosition = modelMatrix * worldPosition;\n\n\t\t\t\t\tprojTexCoord = textureMatrix * worldPosition;\n\n\t\t\t\t}",fragmentShader:"#include \n\t\t\t\tvarying vec4 vPosition;\n\t\t\t\tvarying vec4 projTexCoord;\n\t\t\t\tuniform sampler2D depthTexture;\n\t\t\t\tuniform vec2 cameraNearFar;\n\n\t\t\t\tvoid main() {\n\n\t\t\t\t\tfloat depth = unpackRGBAToDepth(texture2DProj( depthTexture, projTexCoord ));\n\t\t\t\t\tfloat viewZ = - DEPTH_TO_VIEW_Z( depth, cameraNearFar.x, cameraNearFar.y );\n\t\t\t\t\tfloat depthTest = (-vPosition.z > viewZ) ? 1.0 : 0.0;\n\t\t\t\t\tgl_FragColor = vec4(0.0, depthTest, 1.0, 1.0);\n\n\t\t\t\t}"})}getEdgeDetectionMaterial(){return new Td({uniforms:{maskTexture:{value:null},texSize:{value:new ji(.5,.5)},visibleEdgeColor:{value:new Nt(1,1,1)},hiddenEdgeColor:{value:new Nt(1,1,1)}},vertexShader:"varying vec2 vUv;\n\n\t\t\t\tvoid main() {\n\t\t\t\t\tvUv = uv;\n\t\t\t\t\tgl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\n\t\t\t\t}",fragmentShader:"varying vec2 vUv;\n\n\t\t\t\tuniform sampler2D maskTexture;\n\t\t\t\tuniform vec2 texSize;\n\t\t\t\tuniform vec3 visibleEdgeColor;\n\t\t\t\tuniform vec3 hiddenEdgeColor;\n\n\t\t\t\tvoid main() {\n\t\t\t\t\tvec2 invSize = 1.0 / texSize;\n\t\t\t\t\tvec4 uvOffset = vec4(1.0, 0.0, 0.0, 1.0) * vec4(invSize, invSize);\n\t\t\t\t\tvec4 c1 = texture2D( maskTexture, vUv + uvOffset.xy);\n\t\t\t\t\tvec4 c2 = texture2D( maskTexture, vUv - uvOffset.xy);\n\t\t\t\t\tvec4 c3 = texture2D( maskTexture, vUv + uvOffset.yw);\n\t\t\t\t\tvec4 c4 = texture2D( maskTexture, vUv - uvOffset.yw);\n\t\t\t\t\tfloat diff1 = (c1.r - c2.r)*0.5;\n\t\t\t\t\tfloat diff2 = (c3.r - c4.r)*0.5;\n\t\t\t\t\tfloat d = length( vec2(diff1, diff2) );\n\t\t\t\t\tfloat a1 = min(c1.g, c2.g);\n\t\t\t\t\tfloat a2 = min(c3.g, c4.g);\n\t\t\t\t\tfloat visibilityFactor = min(a1, a2);\n\t\t\t\t\tvec3 edgeColor = 1.0 - visibilityFactor > 0.001 ? visibleEdgeColor : hiddenEdgeColor;\n\t\t\t\t\tgl_FragColor = vec4(edgeColor, 1.0) * vec4(d);\n\t\t\t\t}"})}getSeperableBlurMaterial(e){return new Td({defines:{MAX_RADIUS:e},uniforms:{colorTexture:{value:null},texSize:{value:new ji(.5,.5)},direction:{value:new ji(.5,.5)},kernelRadius:{value:1}},vertexShader:"varying vec2 vUv;\n\n\t\t\t\tvoid main() {\n\t\t\t\t\tvUv = uv;\n\t\t\t\t\tgl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\n\t\t\t\t}",fragmentShader:"#include \n\t\t\t\tvarying vec2 vUv;\n\t\t\t\tuniform sampler2D colorTexture;\n\t\t\t\tuniform vec2 texSize;\n\t\t\t\tuniform vec2 direction;\n\t\t\t\tuniform float kernelRadius;\n\n\t\t\t\tfloat gaussianPdf(in float x, in float sigma) {\n\t\t\t\t\treturn 0.39894 * exp( -0.5 * x * x/( sigma * sigma))/sigma;\n\t\t\t\t}\n\n\t\t\t\tvoid main() {\n\t\t\t\t\tvec2 invSize = 1.0 / texSize;\n\t\t\t\t\tfloat sigma = kernelRadius/2.0;\n\t\t\t\t\tfloat weightSum = gaussianPdf(0.0, sigma);\n\t\t\t\t\tvec4 diffuseSum = texture2D( colorTexture, vUv) * weightSum;\n\t\t\t\t\tvec2 delta = direction * invSize * kernelRadius/float(MAX_RADIUS);\n\t\t\t\t\tvec2 uvOffset = delta;\n\t\t\t\t\tfor( int i = 1; i <= MAX_RADIUS; i ++ ) {\n\t\t\t\t\t\tfloat x = kernelRadius * float(i) / float(MAX_RADIUS);\n\t\t\t\t\t\tfloat w = gaussianPdf(x, sigma);\n\t\t\t\t\t\tvec4 sample1 = texture2D( colorTexture, vUv + uvOffset);\n\t\t\t\t\t\tvec4 sample2 = texture2D( colorTexture, vUv - uvOffset);\n\t\t\t\t\t\tdiffuseSum += ((sample1 + sample2) * w);\n\t\t\t\t\t\tweightSum += (2.0 * w);\n\t\t\t\t\t\tuvOffset += delta;\n\t\t\t\t\t}\n\t\t\t\t\tgl_FragColor = diffuseSum/weightSum;\n\t\t\t\t}"})}getOverlayMaterial(){return new Td({uniforms:{maskTexture:{value:null},edgeTexture1:{value:null},edgeTexture2:{value:null},patternTexture:{value:null},edgeStrength:{value:1},edgeGlow:{value:1},usePatternTexture:{value:0}},vertexShader:"varying vec2 vUv;\n\n\t\t\t\tvoid main() {\n\t\t\t\t\tvUv = uv;\n\t\t\t\t\tgl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\n\t\t\t\t}",fragmentShader:"varying vec2 vUv;\n\n\t\t\t\tuniform sampler2D maskTexture;\n\t\t\t\tuniform sampler2D edgeTexture1;\n\t\t\t\tuniform sampler2D edgeTexture2;\n\t\t\t\tuniform sampler2D patternTexture;\n\t\t\t\tuniform float edgeStrength;\n\t\t\t\tuniform float edgeGlow;\n\t\t\t\tuniform bool usePatternTexture;\n\n\t\t\t\tvoid main() {\n\t\t\t\t\tvec4 edgeValue1 = texture2D(edgeTexture1, vUv);\n\t\t\t\t\tvec4 edgeValue2 = texture2D(edgeTexture2, vUv);\n\t\t\t\t\tvec4 maskColor = texture2D(maskTexture, vUv);\n\t\t\t\t\tvec4 patternColor = texture2D(patternTexture, 6.0 * vUv);\n\t\t\t\t\tfloat visibilityFactor = 1.0 - maskColor.g > 0.0 ? 1.0 : 0.5;\n\t\t\t\t\tvec4 edgeValue = edgeValue1 + edgeValue2 * edgeGlow;\n\t\t\t\t\tvec4 finalColor = edgeStrength * maskColor.r * edgeValue;\n\t\t\t\t\tif(usePatternTexture)\n\t\t\t\t\t\tfinalColor += + visibilityFactor * (1.0 - maskColor.r) * (1.0 - patternColor.r);\n\t\t\t\t\tgl_FragColor = finalColor;\n\t\t\t\t}",blending:2,depthTest:!1,depthWrite:!1,transparent:!0})}}yy.BlurDirectionX=new ji(1,0),yy.BlurDirectionY=new ji(0,1);class goe{constructor(e,t,n){this.antialiasing=!0,this.composer=new Aoe(n),this.camera=e,this.scene=t,this.defaultRenderPass=new moe(this.scene,this.camera),this.composer.addPass(this.defaultRenderPass),this.render=this.antialiasing?this.antialiasRender:this.effectsRender}effectsRender(e,t){this.composer&&(this.defaultRenderPass.camera=t,this.defaultRenderPass.scene=e,this.composer.render())}antialiasRender(e,t){this.composer.renderer.render(e,t)}addOutlinePassForSelection(){const e=new yy(new ji(window.innerWidth,window.innerHeight),this.scene,this.camera);return e.overlayMaterial.blending=1,e.visibleEdgeColor.set(16777062),e.visibleEdgeColor.set(14635824),this.composer.addPass(e),e}removePass(e){const t=this.composer.passes.indexOf(e);this.composer.passes.splice(t,1)}setAntialiasing(e){this.antialiasing=e,this.render=this.antialiasing?this.antialiasRender:this.effectsRender}}class Nm{constructor(){return this.clippingEnabled=new f2(!1),this.startClippingAngle=new f2(0),this.openingClippingAngle=new f2(0),this.eventMetadata={runNumber:"000",eventNumber:"000"},void 0===Nm.instance&&(Nm.instance=this),Nm.instance}static getInstance(){return Nm.instance}setPhoenixMenuRoot(e){this.phoenixMenuRoot=e,this.phoenixMenuRoot&&this.phoenixMenuRoot.addConfig("button",{label:"Save state",onClick:()=>{this.saveStateAsJSON()}}).addConfig("button",{label:"Load state",onClick:()=>{rU(t=>{this.loadStateFromJSON(JSON.parse(t))})}})}saveStateAsJSON(){const e={phoenixMenu:this.phoenixMenuRoot.getNodeState(),eventDisplay:{cameraPosition:this.activeCamera.position.toArray(),startClippingAngle:this.clippingEnabled.value?this.startClippingAngle.value:null,openingClippingAngle:this.clippingEnabled.value?this.openingClippingAngle.value:null}};W4(JSON.stringify(e),`run${this.eventMetadata.runNumber}_evt${this.eventMetadata.eventNumber}.json`)}loadStateFromJSON(e){var t,n,r;const s="string"==typeof e?JSON.parse(e):e;if(s.phoenixMenu&&this.phoenixMenuRoot&&(this.phoenixMenuRoot.loadStateFromJSON(s.phoenixMenu),this.phoenixMenuRoot.configActive=!1),s.eventDisplay){this.activeCamera.position.fromArray(null===(t=s.eventDisplay)||void 0===t?void 0:t.cameraPosition);const a=null===(n=s.eventDisplay)||void 0===n?void 0:n.startClippingAngle,l=null===(r=s.eventDisplay)||void 0===r?void 0:r.openingClippingAngle;(a||l)&&(this.setClippingEnabled(!0),this.eventDisplay.getUIManager().setClipping(!0),a&&this.eventDisplay.getUIManager().rotateStartAngleClipping(s.eventDisplay.startClippingAngle),l&&this.eventDisplay.getUIManager().rotateOpeningAngleClipping(s.eventDisplay.openingClippingAngle))}}setClippingEnabled(e){this.clippingEnabled.update(e)}setStartClippingAngle(e){this.startClippingAngle.update(e)}getStartClippingAngle(){return this.startClippingAngle.value}setOpeningClippingAngle(e){this.openingClippingAngle.update(e)}getOpeningClippingAngle(){return this.openingClippingAngle.value}setCamera(e){this.activeCamera=e}setEventDisplay(e){this.eventDisplay=e}}class Eb{constructor(){return this.toLoad=[],this.loaded=[],this.onLoadCallbacks=[],this.onProgressCallbacks=[],this.progressItems={},void 0===Eb.instance&&(Eb.instance=this),Eb.instance}addLoadableItem(e=""){this.toLoad.push(e),this.progressItems[e]=0}itemLoaded(e=""){this.loaded.push(e),this.onProgress(e,100),this.toLoad.length===this.loaded.length&&this.toLoad.sort().join(",")===this.loaded.sort().join(",")&&(this.onLoadCallbacks.forEach(t=>t()),this.reset())}onProgress(e,t){this.progressItems[e]=t;const s=Object.values(this.progressItems).reduce((a,l)=>a+l,0)/Object.keys(this.progressItems).length;for(const a of this.onProgressCallbacks)a(s)}addLoadListener(e){this.onLoadCallbacks.push(e)}addLoadListenerWithCheck(e){this.toLoad.length>0&&this.toLoad.length!==this.loaded.length?this.onLoadCallbacks.push(e):e()}addProgressListener(e){this.onProgressCallbacks.push(e)}reset(){this.toLoad=[],this.loaded=[],this.onLoadCallbacks=[],this.onProgressCallbacks=[],this.progressItems={}}}class _oe{constructor(e){this.sceneManager=e}colorObjectsByProperty(e,t,n){this.sceneManager.getScene().getObjectByName(t).traverse(s=>{var a;null!==(a=s.material)&&void 0!==a&&a.color&&n(s.userData)&&s.material.color.set(e)})}collectionColor(e,t){const n=this.sceneManager.getScene().getObjectByName(qa.EVENT_DATA_ID).getObjectByName(e);for(const r of Object.values(n.children))r.traverse(s=>{var a,l;null===(l=null===(a=s.material)||void 0===a?void 0:a.color)||void 0===l||l.set(t)})}collectionColorRandom(e){const t=this.sceneManager.getScene().getObjectByName(qa.EVENT_DATA_ID).getObjectByName(e);for(const n of Object.values(t.children))n.traverse(r=>{var s,a;null===(a=null===(s=r.material)||void 0===s?void 0:s.color)||void 0===a||a.set(16777215*Math.random())})}colorTracksByVertex(e){const t=this.sceneManager.getScene();t.getObjectByName("Vertices").traverse(r=>{const{linkedTrackCollection:s,linkedTracks:a}=r.userData;if("Vertex"===r.name&&s===e&&a){const l=r.material.color,u=t.getObjectByName(s);a.forEach(d=>{u.children[d].traverse(p=>{var y,C;null===(C=null===(y=p?.material)||void 0===y?void 0:y.color)||void 0===C||C.set(l)})})}})}}var Of=(()=>(function(i){i.VR="VR",i.AR="AR"}(Of||(Of={})),Of))();class CU{constructor(e){this.sessionType=e,this.xrActive=!1,this.currentXRSession=null}setXRSession(e,t,n){var r;this.renderer=e,this.onSessionEnded=n;const s=navigator?.xr,a=this.sessionType===Of.VR?"vr":"ar";s?.requestSession(`immersive-${a}`,null===(r=this.sessionInit)||void 0===r?void 0:r.call(this)).then(l=>{this.onXRSessionStarted.bind(this)(l),t?.()}).catch(l=>{console.error(`${a.toUpperCase()} Error:`,l)})}onXRSessionStarted(e){return function(i,e,t,n){return new(t||(t=Promise))(function(s,a){function l(p){try{d(n.next(p))}catch(y){a(y)}}function u(p){try{d(n.throw(p))}catch(y){a(y)}}function d(p){p.done?s(p.value):function r(s){return s instanceof t?s:new t(function(a){a(s)})}(p.value).then(l,u)}d((n=n.apply(i,e||[])).next())})}(this,void 0,void 0,function*(){this.xrActive=!0,e.addEventListener("end",this.onXRSessionEnded.bind(this)),yield this.renderer.xr.setSession(e),this.currentXRSession=e})}onXRSessionEnded(){var e;this.xrActive=!1,this.currentXRSession.removeEventListener("end",this.onXRSessionEnded),this.currentXRSession=null,this.cameraGroup=void 0,null===(e=this.onSessionEnded)||void 0===e||e.call(this)}endXRSession(){var e;null===(e=this.currentXRSession)||void 0===e||e.end()}getCameraGroup(e){if(this.cameraGroup||(this.cameraGroup=new Xu),e&&this.xrActive){this.xrCamera=this.renderer.xr.getCamera().copy(new LN([e.clone()])),this.xrCamera.name="XR_CAMERA";const t=this.sessionType===Of.VR?this.xrCamera.position:new Nt(0,0,.1);this.cameraGroup.position.copy(t),this.cameraGroup.add(this.xrCamera)}return this.cameraGroup}getXRCamera(){return this.xrCamera}}const fu={Handedness:Object.freeze({NONE:"none",LEFT:"left",RIGHT:"right"}),ComponentState:Object.freeze({DEFAULT:"default",TOUCHED:"touched",PRESSED:"pressed"}),ComponentProperty:Object.freeze({BUTTON:"button",X_AXIS:"xAxis",Y_AXIS:"yAxis",STATE:"state"}),ComponentType:Object.freeze({TRIGGER:"trigger",SQUEEZE:"squeeze",TOUCHPAD:"touchpad",THUMBSTICK:"thumbstick",BUTTON:"button"}),ButtonTouchThreshold:.05,AxisTouchThreshold:.1,VisualResponseProperty:Object.freeze({TRANSFORM:"transform",VISIBILITY:"visibility"})};function MU(i){return Hk.apply(this,arguments)}function Hk(){return Hk=(0,Np.Z)(function*(i){const e=yield fetch(i);if(e.ok)return e.json();throw new Error(e.statusText)}),Hk.apply(this,arguments)}function voe(i){return Vk.apply(this,arguments)}function Vk(){return Vk=(0,Np.Z)(function*(i){if(!i)throw new Error("No basePath supplied");return yield MU(`${i}/profilesList.json`)}),Vk.apply(this,arguments)}function Gk(){return Gk=(0,Np.Z)(function*(i,e,t=null,n=!0){if(!i)throw new Error("No xrInputSource supplied");if(!e)throw new Error("No basePath supplied");const r=yield voe(e);let s;if(i.profiles.some(u=>{const d=r[u];return d&&(s={profileId:u,profilePath:`${e}/${d.path}`,deprecated:!!d.deprecated}),!!s}),!s){if(!t)throw new Error("No matching profile name found");const u=r[t];if(!u)throw new Error(`No matching profile name found and default profile "${t}" missing.`);s={profileId:t,profilePath:`${e}/${u.path}`,deprecated:!!u.deprecated}}const a=yield MU(s.profilePath);let l;if(n){let u;if(u="any"===i.handedness?a.layouts[Object.keys(a.layouts)[0]]:a.layouts[i.handedness],!u)throw new Error(`No matching handedness, ${i.handedness}, in profile ${s.profileId}`);u.assetPath&&(l=s.profilePath.replace("profile.json",u.assetPath))}return{profile:a,assetPath:l}}),Gk.apply(this,arguments)}const xoe={xAxis:0,yAxis:0,button:0,state:fu.ComponentState.DEFAULT};class Coe{constructor(e){this.componentProperty=e.componentProperty,this.states=e.states,this.valueNodeName=e.valueNodeName,this.valueNodeProperty=e.valueNodeProperty,this.valueNodeProperty===fu.VisualResponseProperty.TRANSFORM&&(this.minNodeName=e.minNodeName,this.maxNodeName=e.maxNodeName),this.value=0,this.updateFromComponent(xoe)}updateFromComponent({xAxis:e,yAxis:t,button:n,state:r}){const{normalizedXAxis:s,normalizedYAxis:a}=function woe(i=0,e=0){let t=i,n=e;if(Math.sqrt(i*i+e*e)>1){const a=Math.atan2(e,i);t=Math.cos(a),n=Math.sin(a)}return{normalizedXAxis:.5*t+.5,normalizedYAxis:.5*n+.5}}(e,t);switch(this.componentProperty){case fu.ComponentProperty.X_AXIS:this.value=this.states.includes(r)?s:.5;break;case fu.ComponentProperty.Y_AXIS:this.value=this.states.includes(r)?a:.5;break;case fu.ComponentProperty.BUTTON:this.value=this.states.includes(r)?n:0;break;case fu.ComponentProperty.STATE:this.value=this.valueNodeProperty===fu.VisualResponseProperty.VISIBILITY?this.states.includes(r):this.states.includes(r)?1:0;break;default:throw new Error(`Unexpected visualResponse componentProperty ${this.componentProperty}`)}}}class Moe{constructor(e,t){if(!(e&&t&&t.visualResponses&&t.gamepadIndices&&0!==Object.keys(t.gamepadIndices).length))throw new Error("Invalid arguments supplied");this.id=e,this.type=t.type,this.rootNodeName=t.rootNodeName,this.touchPointNodeName=t.touchPointNodeName,this.visualResponses={},Object.keys(t.visualResponses).forEach(n=>{const r=new Coe(t.visualResponses[n]);this.visualResponses[n]=r}),this.gamepadIndices=Object.assign({},t.gamepadIndices),this.values={state:fu.ComponentState.DEFAULT,button:void 0!==this.gamepadIndices.button?0:void 0,xAxis:void 0!==this.gamepadIndices.xAxis?0:void 0,yAxis:void 0!==this.gamepadIndices.yAxis?0:void 0}}get data(){return{id:this.id,...this.values}}updateFromGamepad(e){if(this.values.state=fu.ComponentState.DEFAULT,void 0!==this.gamepadIndices.button&&e.buttons.length>this.gamepadIndices.button){const t=e.buttons[this.gamepadIndices.button];this.values.button=t.value,this.values.button=this.values.button<0?0:this.values.button,this.values.button=this.values.button>1?1:this.values.button,t.pressed||1===this.values.button?this.values.state=fu.ComponentState.PRESSED:(t.touched||this.values.button>fu.ButtonTouchThreshold)&&(this.values.state=fu.ComponentState.TOUCHED)}void 0!==this.gamepadIndices.xAxis&&e.axes.length>this.gamepadIndices.xAxis&&(this.values.xAxis=e.axes[this.gamepadIndices.xAxis],this.values.xAxis=this.values.xAxis<-1?-1:this.values.xAxis,this.values.xAxis=this.values.xAxis>1?1:this.values.xAxis,this.values.state===fu.ComponentState.DEFAULT&&Math.abs(this.values.xAxis)>fu.AxisTouchThreshold&&(this.values.state=fu.ComponentState.TOUCHED)),void 0!==this.gamepadIndices.yAxis&&e.axes.length>this.gamepadIndices.yAxis&&(this.values.yAxis=e.axes[this.gamepadIndices.yAxis],this.values.yAxis=this.values.yAxis<-1?-1:this.values.yAxis,this.values.yAxis=this.values.yAxis>1?1:this.values.yAxis,this.values.state===fu.ComponentState.DEFAULT&&Math.abs(this.values.yAxis)>fu.AxisTouchThreshold&&(this.values.state=fu.ComponentState.TOUCHED)),Object.values(this.visualResponses).forEach(t=>{t.updateFromComponent(this.values)})}}class Soe{constructor(e,t,n){if(!e)throw new Error("No xrInputSource supplied");if(!t)throw new Error("No profile supplied");this.xrInputSource=e,this.assetUrl=n,this.id=t.profileId,this.layoutDescription=t.layouts[e.handedness],this.components={},Object.keys(this.layoutDescription.components).forEach(r=>{this.components[r]=new Moe(r,this.layoutDescription.components[r])}),this.updateFromGamepad()}get gripSpace(){return this.xrInputSource.gripSpace}get targetRaySpace(){return this.xrInputSource.targetRaySpace}get data(){const e=[];return Object.values(this.components).forEach(t=>{e.push(t.data)}),e}updateFromGamepad(){Object.values(this.components).forEach(e=>{e.updateFromGamepad(this.xrInputSource.gamepad)})}}class Doe extends Bc{constructor(){super(),this.motionController=null,this.envMap=null}setEnvironmentMap(e){return this.envMap==e||(this.envMap=e,this.traverse(t=>{t.isMesh&&(t.material.envMap=this.envMap,t.material.needsUpdate=!0)})),this}updateMatrixWorld(e){super.updateMatrixWorld(e),this.motionController&&(this.motionController.updateFromGamepad(),Object.values(this.motionController.components).forEach(t=>{Object.values(t.visualResponses).forEach(n=>{const{valueNode:r,minNode:s,maxNode:a,value:l,valueNodeProperty:u}=n;r&&(u===fu.VisualResponseProperty.VISIBILITY?r.visible=l:u===fu.VisualResponseProperty.TRANSFORM&&(r.quaternion.slerpQuaternions(s.quaternion,a.quaternion,l),r.position.lerpVectors(s.position,a.position,l)))})}))}}function SU(i,e){(function Boe(i,e){Object.values(i.components).forEach(t=>{const{type:n,touchPointNodeName:r,visualResponses:s}=t;if(n===fu.ComponentType.TOUCHPAD)if(t.touchPointNode=e.getObjectByName(r),t.touchPointNode){const a=new fy(.001),l=new xh({color:255}),u=new Pa(a,l);t.touchPointNode.add(u)}else console.warn(`Could not find touch dot, ${t.touchPointNodeName}, in touchpad component ${t.id}`);Object.values(s).forEach(a=>{const{valueNodeName:l,minNodeName:u,maxNodeName:d,valueNodeProperty:p}=a;if(p===fu.VisualResponseProperty.TRANSFORM){if(a.minNode=e.getObjectByName(u),a.maxNode=e.getObjectByName(d),!a.minNode)return void console.warn(`Could not find ${u} in the model`);if(!a.maxNode)return void console.warn(`Could not find ${d} in the model`)}a.valueNode=e.getObjectByName(l),a.valueNode||console.warn(`Could not find ${l} in the model`)})})})(i.motionController,e),i.envMap&&e.traverse(t=>{t.isMesh&&(t.material.envMap=i.envMap,t.material.needsUpdate=!0)}),i.add(e)}class Ioe{constructor(e=null){this.gltfLoader=e,this.path="https://cdn.jsdelivr.net/npm/@webxr-input-profiles/assets@1.0/dist/profiles",this._assetCache={},this.gltfLoader||(this.gltfLoader=new $4)}createControllerModel(e){const t=new Doe;let n=null;return e.addEventListener("connected",r=>{const s=r.data;"tracked-pointer"!==s.targetRayMode||!s.gamepad||function boe(i,e){return Gk.apply(this,arguments)}(s,this.path,"generic-trigger").then(({profile:a,assetPath:l})=>{t.motionController=new Soe(s,a,l);const u=this._assetCache[t.motionController.assetUrl];if(u)n=u.scene.clone(),SU(t,n);else{if(!this.gltfLoader)throw new Error("GLTFLoader not set.");this.gltfLoader.setPath(""),this.gltfLoader.load(t.motionController.assetUrl,d=>{this._assetCache[t.motionController.assetUrl]=d,n=d.scene.clone(),SU(t,n)},null,()=>{throw new Error(`Asset ${t.motionController.assetUrl} missing or malformed.`)})}}).catch(a=>{console.warn(a)})}),e.addEventListener("disconnected",()=>{t.motionController=null,t.remove(n),n=null}),t}}let TU=(()=>{class i extends CU{constructor(){super(Of.VR),this.sessionInit=()=>({optionalFeatures:["local-floor","bounded-floor","hand-tracking"]})}setXRSession(t,n,r){super.setXRSession(t,n,r),this.setupVRControls()}onXRSessionEnded(){var t,n;super.onXRSessionEnded(),null===(t=this.controller1)||void 0===t||t.removeEventListener("selectstart",this.onControllerSelectStart),null===(n=this.controller1)||void 0===n||n.removeEventListener("selectend",this.onControllerSelectEnd)}setupVRControls(){this.controller1=this.renderer.xr.getController(0),this.getCameraGroup().add(this.controller1),this.controller2=this.renderer.xr.getController(1),this.getCameraGroup().add(this.controller2);const t=new Ioe;this.controllerGrip1=this.renderer.xr.getControllerGrip(0),this.controllerGrip1.add(t.createControllerModel(this.controllerGrip1)),this.getCameraGroup().add(this.controllerGrip1),this.controllerGrip2=this.renderer.xr.getControllerGrip(1),this.controllerGrip2.add(t.createControllerModel(this.controllerGrip2)),this.getCameraGroup().add(this.controllerGrip2);const n=(new Co).setFromPoints([new Nt(0,0,0),new Nt(0,0,-1)]),r=new c0(n);r.name="line",r.scale.z=50,this.controller1.add(r.clone()),this.controller2.add(r.clone());const a=new Nt;let l;this.onControllerSelectStart=()=>{console.log("Select: c1 position "+this.controller1.position.toArray().join(", ")),console.log("Select: CG position "+this.cameraGroup.position.toArray().join(", ")),l=setInterval(()=>{this.moveInDirection(a,30)},20)},this.onControllerSelectEnd=()=>{clearInterval(l)},this.controller1.addEventListener("selectstart",this.onControllerSelectStart),this.controller1.addEventListener("selectend",this.onControllerSelectEnd)}moveInDirection(t,n){var r;null===(r=this.xrCamera)||void 0===r||r.getWorldDirection(t),this.cameraGroup.position.addScaledVector(t,n),this.xrCamera.position.addScaledVector(t,n)}}return i.SESSION_TYPE="immersive-vr",i})();let qk=(()=>{class i extends CU{constructor(t,n){super(Of.AR),this.scene=t,this.camera=n,this.previousValues={sceneScale:1,cameraNear:10},this.previousValues.sceneScale=t.scale.x,this.previousValues.cameraNear=n.near,this.sessionInit=()=>i.enableDomOverlay?{optionalFeatures:["dom-overlay"],domOverlay:{root:document.body}}:{}}onXRSessionStarted(t){const n=Object.create(null,{onXRSessionStarted:{get:()=>super.onXRSessionStarted}});return function(i,e,t,n){return new(t||(t=Promise))(function(s,a){function l(p){try{d(n.next(p))}catch(y){a(y)}}function u(p){try{d(n.throw(p))}catch(y){a(y)}}function d(p){p.done?s(p.value):function r(s){return s instanceof t?s:new t(function(a){a(s)})}(p.value).then(l,u)}d((n=n.apply(i,e||[])).next())})}(this,void 0,void 0,function*(){document.body.style.setProperty("background-color","transparent"),this.previousValues.sceneScale=this.scene.scale.x,this.previousValues.cameraNear=this.camera.near,this.scaleScene(1e-5),this.camera.near=.01,this.renderer.xr.setReferenceSpaceType("local"),yield n.onXRSessionStarted.call(this,t)})}onXRSessionEnded(){document.body.style.removeProperty("background-color"),this.scaleScene(this.previousValues.sceneScale),this.camera.near=this.previousValues.cameraNear,super.onXRSessionEnded()}scaleScene(t){[qa.EVENT_DATA_ID,qa.GEOMETRIES_ID,qa.LABELS_ID].forEach(n=>{var r;null===(r=this.scene.getObjectByName(n))||void 0===r||r.scale.setScalar(t)})}}return i.SESSION_TYPE="immersive-ar",i.enableDomOverlay=!0,i})();var dS=function(i,e,t,n){return new(t||(t=Promise))(function(s,a){function l(p){try{d(n.next(p))}catch(y){a(y)}}function u(p){try{d(n.throw(p))}catch(y){a(y)}}function d(p){p.done?s(p.value):function r(s){return s instanceof t?s:new t(function(a){a(s)})}(p.value).then(l,u)}d((n=n.apply(i,e||[])).next())})};!function(){const i=Bc.prototype.updateMatrixWorld;Bc.prototype.updateMatrixWorld=function(){this.visible&&i.apply(this)}}();class koe{constructor(e){this.infoLogger=e,this.ignoreList=[(new N4).type,(new h2).type,(new Tk).type],this.saveBlob=function(){const t=document.createElement("a");return document.body.appendChild(t),t.style.display="none",function(r,s){const a=window.URL.createObjectURL(r);t.href=a,t.download=s,t.click()}}(),this.rendererManager=new nse,this.loadingManager=new Eb}init(e){this.clipPlanes=[new Rm(new Nt(0,1,0),0),new Rm(new Nt(0,-1,0),0)],this.sceneManager=new qa(this.ignoreList),this.exportManager=new bse,this.importManager=new roe(this.clipPlanes,qa.EVENT_DATA_ID,qa.GEOMETRIES_ID),this.rendererManager.init(e.elementId),this.controlsManager=new tse(this.rendererManager,e.defaultView),this.controlsManager.hideTubeTracksOnZoom(this.sceneManager.getScene(),200),this.effectsManager=new goe(this.controlsManager.getMainCamera(),this.sceneManager.getScene(),this.rendererManager.getMainRenderer()),this.animationsManager=new hoe(this.sceneManager.getScene(),this.controlsManager.getActiveCamera(),this.rendererManager),this.vrManager=new TU,this.arManager=new qk(this.sceneManager.getScene(),this.controlsManager.getMainCamera()),this.colorManager=new _oe(this.sceneManager),this.getSelectionManager().init(this.controlsManager.getMainCamera(),this.sceneManager.getScene(),this.effectsManager,this.infoLogger),(new Nm).setCamera(this.controlsManager.getActiveCamera())}updateControls(){this.controlsManager.getActiveControls().update(),this.controlsManager.updateSync(),o7()}setAnimationLoop(e){this.uiLoop=e,this.animationLoop=()=>{this.uiLoop(),this.updateControls(),this.render()},this.rendererManager.getMainRenderer().setAnimationLoop(this.animationLoop)}stopAnimationLoop(){this.rendererManager.getMainRenderer().setAnimationLoop(null)}render(){this.rendererManager.render(this.sceneManager.getScene(),this.controlsManager.getOverlayCamera()),this.effectsManager.render(this.sceneManager.getScene(),this.controlsManager.getMainCamera()),this.sceneManager.updateLights(this.controlsManager.getActiveCamera())}xrRender(e){this.uiLoop(),this.rendererManager.getMainRenderer().render(this.sceneManager.getScene(),e.getXRCamera()),this.sceneManager.updateLights(e.getXRCamera())}getSceneManager(){return this.sceneManager||(this.sceneManager=new qa(this.ignoreList)),this.sceneManager}autoRotate(e){this.controlsManager.getActiveControls().autoRotate=e}setClipping(e){this.rendererManager.setLocalClippingEnabled(e)}setClippingAngle(e,t){const n=new Vc;n.setFromAxisAngle(new Nt(0,0,1),e*Math.PI/180),this.clipPlanes[0].normal.set(0,-1,0).applyQuaternion(n);const r=new Vc;r.setFromAxisAngle(new Nt(0,0,1),(e+t)*Math.PI/180),this.clipPlanes[1].normal.set(0,1,0).applyQuaternion(r),(this.clipIntersection&&t>180||!this.clipIntersection&&t<180)&&(this.clipIntersection=t<180,this.sceneManager.getGeometries().traverse(a=>{a instanceof Pa&&a.material instanceof ru&&(a.material.clipIntersection=this.clipIntersection)}))}animateCameraTransform(e,t,n){this.animateCameraPosition(e,n),this.animateCameraTarget(t,n)}swapCameras(e){let t;t=e?"OrthographicCamera":"PerspectiveCamera",this.controlsManager.getMainCamera().type!==t&&this.controlsManager.swapControls()}loadOBJGeometry(e,t,n,r,s=!0,a=!0){return dS(this,void 0,void 0,function*(){const l=this.sceneManager.getGeometries(),u=yield this.importManager.loadOBJGeometry(e,t,n,r,a),{object:d}=u;return d.visible=s,l.add(d),u})}loadGLTFGeometry(e,t,n,r,s){return dS(this,void 0,void 0,function*(){const a=this.sceneManager.getGeometries(),l=yield this.importManager.loadGLTFGeometry(e,t,n,r,s);for(const{object:u}of l)a.add(u),this.infoLogger.add(t,"Loaded GLTF scene");return l})}parseOBJGeometry(e,t,n=!0){const r=this.sceneManager.getGeometries(),s=this.importManager.parseOBJGeometry(e,t);return s.visible=n,r.add(s),{object:s}}parseGLTFGeometry(e,t){return dS(this,void 0,void 0,function*(){const n=yield this.importManager.parseGLTFGeometry(e,t);for(const{object:r}of n)this.sceneManager.getGeometries().add(r),this.infoLogger.add(t,"Parsed GLTF geometry");return n})}parsePhnxScene(e){return dS(this,void 0,void 0,function*(){yield this.importManager.parsePhnxScene(e,(n,r)=>{this.sceneManager.getScene().add(n),this.sceneManager.getScene().add(r)})})}loadJSONGeometry(e,t,n,r,s=!0){return dS(this,void 0,void 0,function*(){const a=this.sceneManager.getGeometries(),{object:l}=yield this.importManager.loadJSONGeometry(e,t,n,r);return l.visible=s,a.add(l),{object:l}})}exportSceneToOBJ(){const e=this.sceneManager.getCleanScene();this.exportManager.exportSceneToOBJ(e)}exportPhoenixScene(){const e=this.sceneManager.getCleanScene();this.exportManager.exportPhoenixScene(e,this.sceneManager.getEventData(),this.sceneManager.getGeometries())}fixOverlayView(e){this.rendererManager.setFixOverlay(e)}setSelectedObjectDisplay(e){this.getSelectionManager().setSelectedObject(e)}eventDataDepthTest(e){this.sceneManager.eventDataDepthTest(e)}enableSelecting(e){this.getSelectionManager().setSelecting(e)}clearEventData(){this.sceneManager.clearEventData()}addEventDataTypeGroup(e){return this.sceneManager.addEventDataTypeGroup(e)}setOverlayRenderer(e){this.rendererManager&&this.rendererManager.setOverlayRenderer(e)}zoomTo(e,t){this.controlsManager.zoomTo(e,t)}getSelectionManager(){return this.selectionManager||(this.selectionManager=new soe),this.selectionManager}animateCameraPosition(e,t){const n=new Tf(this.controlsManager.getActiveCamera().position);n.to({x:e[0],y:e[1],z:e[2]},t),n.start()}animateCameraTarget(e,t){const n=new Tf(this.controlsManager.getActiveControls().target);n.to({x:e[0],y:e[1],z:e[2]},t),n.start()}getActiveObjectId(){return this.getSelectionManager().getActiveObjectId()}lookAtObject(e){this.controlsManager.lookAtObject(e,this.getSceneManager().getEventData())}getObjectPosition(e){return this.controlsManager.getObjectPosition(e,this.getSceneManager().getScene())}highlightObject(e){this.selectionManager.highlightObject(e,this.getSceneManager().getEventData())}enableKeyboardControls(){document.addEventListener("keydown",e=>{var t;if(!["input","textarea"].includes(null===(t=e.target)||void 0===t?void 0:t.tagName.toLowerCase())&&e.shiftKey)switch(e.code){case"KeyR":this.autoRotate(!this.controlsManager.getActiveControls().autoRotate);break;case"Equal":this.zoomTo(1/1.2,100);break;case"Minus":this.zoomTo(1.2,100);break;case"KeyC":this.setClipping(!this.rendererManager.getLocalClipping()),this.rendererManager.getLocalClipping()&&this.setClippingAngle(0,180);break;case"KeyV":{const r="OrthographicCamera"===this.controlsManager.getMainCamera().type;this.swapCameras(!r);break}}})}animateThroughEvent(e,t,n){this.animationsManager.animateThroughEvent(e,t,n)}animatePreset(e,t){this.animationsManager.animatePreset(e,t)}animateEventWithCollision(e,t){this.animationsManager.animateEventWithCollision(e,t)}animateClippingWithCollision(e,t){this.animationsManager.animateClippingWithCollision(e,t)}makeScreenShot(e,t,n="Strech"){const r=this.rendererManager.getMainRenderer(),s=new ji;r.getSize(s);let a=t,l=e;"Crop"==n&&(s.width*t"CANVAS"==ye.tagName}).then(ye=>{ye.toBlob(Le=>{O.drawImage(ye,W/6,W/6,se,W),C.toBlob(we=>{const He=document.createElement("a");document.body.appendChild(He),He.style.display="none";const gt=window.URL.createObjectURL(we);He.href=gt,He.download="screencapture.png",He.click()})})})}}initXRSession(e,t){const n=e===Of.VR?this.vrManager:this.arManager,r=this.rendererManager.getMainRenderer();r.xr.enabled=!0,r.xr.setAnimationLoop(this.xrRender.bind(this,n)),n.setXRSession(r,()=>{const a=n.getCameraGroup(this.controlsManager.getMainCamera());this.sceneManager.getScene().add(a)},t)}endXRSession(e){const t=e===Of.VR?this.vrManager:this.arManager;this.sceneManager.getScene().remove(t.getCameraGroup());const n=this.rendererManager.getMainRenderer();n.xr.setAnimationLoop(null),n.xr.enabled=!1,t.endXRSession()}getObjectByName(e){return this.getSceneManager().getScene().getObjectByName(e)}setAntialiasing(e){this.effectsManager.setAntialiasing(e)}addGeometryFromParameters(e){this.loadingManager.addLoadableItem("geom_from_params");const t=this.getSceneManager().getScene(),l=e.NumPhiEl,u=e.NumZEl,d=e.Radius,p=e.MinZ,y=e.MaxZ,C=e.TiltAngle,O=e.ZTiltAngle,Q=e.PhiOffset,W=e.Colour,ye=new Om(e.Xdim,e.Ydim,e.Zdim),Le=new xh({color:W,opacity:.5,transparent:!0}),we=(y-p)/u,He=2*Math.PI/l;let gt=p+we/2;const Et=Math.PI/2;let Yt;for(let dt=0;dt(function(i){i[i.NotForced=0]="NotForced",i[i.On=1]="On",i[i.Off=2]="Off"}(vy||(vy={})),vy))();class $h{constructor(e,t,n,r,s=vy.NotForced,a=0,l=0){this.name=e,this.cameraPos=t,this.cameraTarget=n,this.icon=r,this.clipping=s,this.clippingStartAngle=a,this.clippingOpeningAngle=l}getIconURL(){return"assets/preset-views/"+this.icon+".svg#"+this.icon}}function p2(i,e){var t=i.__state.conversionName.toString(),n=Math.round(i.r),r=Math.round(i.g),s=Math.round(i.b),a=i.a,l=Math.round(i.h),u=i.s.toFixed(1),d=i.v.toFixed(1);if(e||"THREE_CHAR_HEX"===t||"SIX_CHAR_HEX"===t){for(var p=i.hex.toString(16);p.length<6;)p="0"+p;return"#"+p}return"CSS_RGB"===t?"rgb("+n+","+r+","+s+")":"CSS_RGBA"===t?"rgba("+n+","+r+","+s+","+a+")":"HEX"===t?"0x"+i.hex.toString(16):"RGB_ARRAY"===t?"["+n+","+r+","+s+"]":"RGBA_ARRAY"===t?"["+n+","+r+","+s+","+a+"]":"RGB_OBJ"===t?"{r:"+n+",g:"+r+",b:"+s+"}":"RGBA_OBJ"===t?"{r:"+n+",g:"+r+",b:"+s+",a:"+a+"}":"HSV_OBJ"===t?"{h:"+l+",s:"+u+",v:"+d+"}":"HSVA_OBJ"===t?"{h:"+l+",s:"+u+",v:"+d+",a:"+a+"}":"unknown format"}var EU=Array.prototype.forEach,fS=Array.prototype.slice,xr={BREAK:{},extend:function(e){return this.each(fS.call(arguments,1),function(t){(this.isObject(t)?Object.keys(t):[]).forEach(function(r){this.isUndefined(t[r])||(e[r]=t[r])}.bind(this))},this),e},defaults:function(e){return this.each(fS.call(arguments,1),function(t){(this.isObject(t)?Object.keys(t):[]).forEach(function(r){this.isUndefined(e[r])&&(e[r]=t[r])}.bind(this))},this),e},compose:function(){var e=fS.call(arguments);return function(){for(var t=fS.call(arguments),n=e.length-1;n>=0;n--)t=[e[n].apply(this,t)];return t[0]}},each:function(e,t,n){if(e)if(EU&&e.forEach&&e.forEach===EU)e.forEach(t,n);else if(e.length===e.length+0){var s,r=void 0;for(r=0,s=e.length;r1?xr.toArray(arguments):arguments[0];return xr.each(Roe,function(t){if(t.litmus(e))return xr.each(t.conversions,function(n,r){if(pS=n.read(e),!1===X4&&!1!==pS)return X4=pS,pS.conversionName=r,pS.conversion=n,xr.BREAK}),xr.BREAK}),X4},DU=void 0,AS={hsv_to_rgb:function(e,t,n){var r=Math.floor(e/60)%6,s=e/60-Math.floor(e/60),a=n*(1-t),l=n*(1-s*t),u=n*(1-(1-s)*t),d=[[n,u,a],[l,n,a],[a,n,u],[a,l,n],[u,a,n],[n,a,l]][r];return{r:255*d[0],g:255*d[1],b:255*d[2]}},rgb_to_hsv:function(e,t,n){var r=Math.min(e,t,n),s=Math.max(e,t,n),a=s-r,l=void 0;return 0===s?{h:NaN,s:0,v:0}:(l=e===s?(t-n)/a:t===s?2+(n-e)/a:4+(e-t)/a,(l/=6)<0&&(l+=1),{h:360*l,s:a/s,v:s/255})},rgb_to_hex:function(e,t,n){var r=this.hex_with_component(0,2,e);return r=this.hex_with_component(r,1,t),this.hex_with_component(r,0,n)},component_from_hex:function(e,t){return e>>8*t&255},hex_with_component:function(e,t,n){return n<<(DU=8*t)|e&~(255<-1?e.length-e.indexOf(".")-1:0}var $k=function(i){function e(t,n,r){Um(this,e);var s=wy(this,(e.__proto__||Object.getPrototypeOf(e)).call(this,t,n)),a=r||{};return s.__min=a.min,s.__max=a.max,s.__step=a.step,s.__impliedStep=xr.isUndefined(s.__step)?0===s.initialValue?1:Math.pow(10,Math.floor(Math.log(Math.abs(s.initialValue))/Math.LN10))/10:s.__step,s.__precision=kU(s.__impliedStep),s}return xy(e,i),zm(e,[{key:"setValue",value:function(n){var r=n;return void 0!==this.__min&&rthis.__max&&(r=this.__max),void 0!==this.__step&&r%this.__step!=0&&(r=Math.round(r/this.__step)*this.__step),by(e.prototype.__proto__||Object.getPrototypeOf(e.prototype),"setValue",this).call(this,r)}},{key:"min",value:function(n){return this.__min=n,this}},{key:"max",value:function(n){return this.__max=n,this}},{key:"step",value:function(n){return this.__step=n,this.__impliedStep=n,this.__precision=kU(n),this}}]),e}(Cy),mS=function(i){function e(t,n,r){Um(this,e);var s=wy(this,(e.__proto__||Object.getPrototypeOf(e)).call(this,t,n,r));s.__truncationSuspended=!1;var a=s,l=void 0;function d(){a.__onFinishChange&&a.__onFinishChange.call(a,a.getValue())}function y(Q){var W=l-Q.clientY;a.setValue(a.getValue()+W*a.__impliedStep),l=Q.clientY}function C(){Ti.unbind(window,"mousemove",y),Ti.unbind(window,"mouseup",C),d()}return s.__input=document.createElement("input"),s.__input.setAttribute("type","text"),Ti.bind(s.__input,"change",function u(){var Q=parseFloat(a.__input.value);xr.isNaN(Q)||a.setValue(Q)}),Ti.bind(s.__input,"blur",function p(){d()}),Ti.bind(s.__input,"mousedown",function O(Q){Ti.bind(window,"mousemove",y),Ti.bind(window,"mouseup",C),l=Q.clientY}),Ti.bind(s.__input,"keydown",function(Q){13===Q.keyCode&&(a.__truncationSuspended=!0,this.blur(),a.__truncationSuspended=!1,d())}),s.updateDisplay(),s.domElement.appendChild(s.__input),s}return xy(e,i),zm(e,[{key:"updateDisplay",value:function(){return this.__input.value=this.__truncationSuspended?this.getValue():function zoe(i,e){var t=Math.pow(10,e);return Math.round(i*t)/t}(this.getValue(),this.__precision),by(e.prototype.__proto__||Object.getPrototypeOf(e.prototype),"updateDisplay",this).call(this)}}]),e}($k);function FU(i,e,t,n,r){return n+(i-e)/(t-e)*(r-n)}var Y4=function(i){function e(t,n,r,s,a){Um(this,e);var l=wy(this,(e.__proto__||Object.getPrototypeOf(e)).call(this,t,n,{min:r,max:s,step:a})),u=l;function p(W){W.preventDefault();var se=u.__background.getBoundingClientRect();return u.setValue(FU(W.clientX,se.left,se.right,u.__min,u.__max)),!1}function y(){Ti.unbind(window,"mousemove",p),Ti.unbind(window,"mouseup",y),u.__onFinishChange&&u.__onFinishChange.call(u,u.getValue())}function O(W){var se=W.touches[0].clientX,ye=u.__background.getBoundingClientRect();u.setValue(FU(se,ye.left,ye.right,u.__min,u.__max))}function Q(){Ti.unbind(window,"touchmove",O),Ti.unbind(window,"touchend",Q),u.__onFinishChange&&u.__onFinishChange.call(u,u.getValue())}return l.__background=document.createElement("div"),l.__foreground=document.createElement("div"),Ti.bind(l.__background,"mousedown",function d(W){document.activeElement.blur(),Ti.bind(window,"mousemove",p),Ti.bind(window,"mouseup",y),p(W)}),Ti.bind(l.__background,"touchstart",function C(W){1===W.touches.length&&(Ti.bind(window,"touchmove",O),Ti.bind(window,"touchend",Q),O(W))}),Ti.addClass(l.__background,"slider"),Ti.addClass(l.__foreground,"slider-fg"),l.updateDisplay(),l.__background.appendChild(l.__foreground),l.domElement.appendChild(l.__background),l}return xy(e,i),zm(e,[{key:"updateDisplay",value:function(){var n=(this.getValue()-this.__min)/(this.__max-this.__min);return this.__foreground.style.width=100*n+"%",by(e.prototype.__proto__||Object.getPrototypeOf(e.prototype),"updateDisplay",this).call(this)}}]),e}($k),Xk=function(i){function e(t,n,r){Um(this,e);var s=wy(this,(e.__proto__||Object.getPrototypeOf(e)).call(this,t,n)),a=s;return s.__button=document.createElement("div"),s.__button.innerHTML=void 0===r?"Fire":r,Ti.bind(s.__button,"click",function(l){return l.preventDefault(),a.fire(),!1}),Ti.addClass(s.__button,"button"),s.domElement.appendChild(s.__button),s}return xy(e,i),zm(e,[{key:"fire",value:function(){this.__onChange&&this.__onChange.call(this),this.getValue().call(this.object),this.__onFinishChange&&this.__onFinishChange.call(this,this.getValue())}}]),e}(Cy),Z4=function(i){function e(t,n){Um(this,e);var r=wy(this,(e.__proto__||Object.getPrototypeOf(e)).call(this,t,n));r.__color=new Mh(r.getValue()),r.__temp=new Mh(0);var s=r;r.domElement=document.createElement("div"),Ti.makeSelectable(r.domElement,!1),r.__selector=document.createElement("div"),r.__selector.className="selector",r.__saturation_field=document.createElement("div"),r.__saturation_field.className="saturation-field",r.__field_knob=document.createElement("div"),r.__field_knob.className="field-knob",r.__field_knob_border="2px solid ",r.__hue_knob=document.createElement("div"),r.__hue_knob.className="hue-knob",r.__hue_field=document.createElement("div"),r.__hue_field.className="hue-field",r.__input=document.createElement("input"),r.__input.type="text",r.__input_textShadow="0 1px 1px ",Ti.bind(r.__input,"keydown",function(W){13===W.keyCode&&y.call(this)}),Ti.bind(r.__input,"blur",y),Ti.bind(r.__selector,"mousedown",function(){Ti.addClass(this,"drag").bind(window,"mouseup",function(){Ti.removeClass(s.__selector,"drag")})}),Ti.bind(r.__selector,"touchstart",function(){Ti.addClass(this,"drag").bind(window,"touchend",function(){Ti.removeClass(s.__selector,"drag")})});var a=document.createElement("div");function l(W){O(W),Ti.bind(window,"mousemove",O),Ti.bind(window,"touchmove",O),Ti.bind(window,"mouseup",d),Ti.bind(window,"touchend",d)}function u(W){Q(W),Ti.bind(window,"mousemove",Q),Ti.bind(window,"touchmove",Q),Ti.bind(window,"mouseup",p),Ti.bind(window,"touchend",p)}function d(){Ti.unbind(window,"mousemove",O),Ti.unbind(window,"touchmove",O),Ti.unbind(window,"mouseup",d),Ti.unbind(window,"touchend",d),C()}function p(){Ti.unbind(window,"mousemove",Q),Ti.unbind(window,"touchmove",Q),Ti.unbind(window,"mouseup",p),Ti.unbind(window,"touchend",p),C()}function y(){var W=K4(this.value);!1!==W?(s.__color.__state=W,s.setValue(s.__color.toOriginal())):this.value=s.__color.toString()}function C(){s.__onFinishChange&&s.__onFinishChange.call(s,s.__color.toOriginal())}function O(W){-1===W.type.indexOf("touch")&&W.preventDefault();var se=s.__saturation_field.getBoundingClientRect(),ye=W.touches&&W.touches[0]||W,He=(ye.clientX-se.left)/(se.right-se.left),gt=1-(ye.clientY-se.top)/(se.bottom-se.top);return gt>1?gt=1:gt<0&&(gt=0),He>1?He=1:He<0&&(He=0),s.__color.v=gt,s.__color.s=He,s.setValue(s.__color.toOriginal()),!1}function Q(W){-1===W.type.indexOf("touch")&&W.preventDefault();var se=s.__hue_field.getBoundingClientRect(),we=1-((W.touches&&W.touches[0]||W).clientY-se.top)/(se.bottom-se.top);return we>1?we=1:we<0&&(we=0),s.__color.h=360*we,s.setValue(s.__color.toOriginal()),!1}return xr.extend(r.__selector.style,{width:"122px",height:"102px",padding:"3px",backgroundColor:"#222",boxShadow:"0px 1px 3px rgba(0,0,0,0.3)"}),xr.extend(r.__field_knob.style,{position:"absolute",width:"12px",height:"12px",border:r.__field_knob_border+(r.__color.v<.5?"#fff":"#000"),boxShadow:"0px 1px 3px rgba(0,0,0,0.5)",borderRadius:"12px",zIndex:1}),xr.extend(r.__hue_knob.style,{position:"absolute",width:"15px",height:"2px",borderRight:"4px solid #fff",zIndex:1}),xr.extend(r.__saturation_field.style,{width:"100px",height:"100px",border:"1px solid #555",marginRight:"3px",display:"inline-block",cursor:"pointer"}),xr.extend(a.style,{width:"100%",height:"100%",background:"none"}),OU(a,"top","rgba(0,0,0,0)","#000"),xr.extend(r.__hue_field.style,{width:"15px",height:"100px",border:"1px solid #555",cursor:"ns-resize",position:"absolute",top:"3px",right:"3px"}),function Voe(i){i.style.background="",i.style.cssText+="background: -moz-linear-gradient(top, #ff0000 0%, #ff00ff 17%, #0000ff 34%, #00ffff 50%, #00ff00 67%, #ffff00 84%, #ff0000 100%);",i.style.cssText+="background: -webkit-linear-gradient(top, #ff0000 0%,#ff00ff 17%,#0000ff 34%,#00ffff 50%,#00ff00 67%,#ffff00 84%,#ff0000 100%);",i.style.cssText+="background: -o-linear-gradient(top, #ff0000 0%,#ff00ff 17%,#0000ff 34%,#00ffff 50%,#00ff00 67%,#ffff00 84%,#ff0000 100%);",i.style.cssText+="background: -ms-linear-gradient(top, #ff0000 0%,#ff00ff 17%,#0000ff 34%,#00ffff 50%,#00ff00 67%,#ffff00 84%,#ff0000 100%);",i.style.cssText+="background: linear-gradient(top, #ff0000 0%,#ff00ff 17%,#0000ff 34%,#00ffff 50%,#00ff00 67%,#ffff00 84%,#ff0000 100%);"}(r.__hue_field),xr.extend(r.__input.style,{outline:"none",textAlign:"center",color:"#fff",border:0,fontWeight:"bold",textShadow:r.__input_textShadow+"rgba(0,0,0,0.7)"}),Ti.bind(r.__saturation_field,"mousedown",l),Ti.bind(r.__saturation_field,"touchstart",l),Ti.bind(r.__field_knob,"mousedown",l),Ti.bind(r.__field_knob,"touchstart",l),Ti.bind(r.__hue_field,"mousedown",u),Ti.bind(r.__hue_field,"touchstart",u),r.__saturation_field.appendChild(a),r.__selector.appendChild(r.__field_knob),r.__selector.appendChild(r.__saturation_field),r.__selector.appendChild(r.__hue_field),r.__hue_field.appendChild(r.__hue_knob),r.domElement.appendChild(r.__input),r.domElement.appendChild(r.__selector),r.updateDisplay(),r}return xy(e,i),zm(e,[{key:"updateDisplay",value:function(){var n=K4(this.getValue());if(!1!==n){var r=!1;xr.each(Mh.COMPONENTS,function(l){if(!xr.isUndefined(n[l])&&!xr.isUndefined(this.__color.__state[l])&&n[l]!==this.__color.__state[l])return r=!0,{}},this),r&&xr.extend(this.__color.__state,n)}xr.extend(this.__temp.__state,this.__color.__state),this.__temp.a=1;var s=this.__color.v<.5||this.__color.s>.5?255:0,a=255-s;xr.extend(this.__field_knob.style,{marginLeft:100*this.__color.s-7+"px",marginTop:100*(1-this.__color.v)-7+"px",backgroundColor:this.__temp.toHexString(),border:this.__field_knob_border+"rgb("+s+","+s+","+s+")"}),this.__hue_knob.style.marginTop=100*(1-this.__color.h/360)+"px",this.__temp.s=1,this.__temp.v=1,OU(this.__saturation_field,"left","#fff",this.__temp.toHexString()),this.__input.value=this.__color.toString(),xr.extend(this.__input.style,{backgroundColor:this.__color.toHexString(),color:"rgb("+s+","+s+","+s+")",textShadow:this.__input_textShadow+"rgba("+a+","+a+","+a+",.7)"})}}]),e}(Cy),Hoe=["-moz-","-o-","-webkit-","-ms-",""];function OU(i,e,t,n){i.style.background="",xr.each(Hoe,function(r){i.style.cssText+="background: "+r+"linear-gradient("+e+", "+t+" 0%, "+n+" 100%); "})}var qoe='
        \n\n Here\'s the new load parameter for your GUI\'s constructor:\n\n \n\n
        \n\n Automatically save\n values to localStorage on exit.\n\n
        The values saved to localStorage will\n override those passed to dat.GUI\'s constructor. This makes it\n easier to work incrementally, but localStorage is fragile,\n and your friends may not see the same values you do.\n\n
        \n\n
        \n\n
        ',Qoe=function(e,t){var n=e[t];return xr.isArray(arguments[2])||xr.isObject(arguments[2])?new IU(e,t,arguments[2]):xr.isNumber(n)?xr.isNumber(arguments[2])&&xr.isNumber(arguments[3])?xr.isNumber(arguments[4])?new Y4(e,t,arguments[2],arguments[3],arguments[4]):new Y4(e,t,arguments[2],arguments[3]):xr.isNumber(arguments[4])?new mS(e,t,{min:arguments[2],max:arguments[3],step:arguments[4]}):new mS(e,t,{min:arguments[2],max:arguments[3]}):xr.isString(n)?new PU(e,t):xr.isFunction(n)?new Xk(e,t,""):xr.isBoolean(n)?new jk(e,t):null},joe=window.requestAnimationFrame||window.webkitRequestAnimationFrame||window.mozRequestAnimationFrame||window.oRequestAnimationFrame||window.msRequestAnimationFrame||function Woe(i){setTimeout(i,1e3/60)},$oe=function(){function i(){Um(this,i),this.backgroundElement=document.createElement("div"),xr.extend(this.backgroundElement.style,{backgroundColor:"rgba(0,0,0,0.8)",top:0,left:0,display:"none",zIndex:"1000",opacity:0,WebkitTransition:"opacity 0.2s linear",transition:"opacity 0.2s linear"}),Ti.makeFullscreen(this.backgroundElement),this.backgroundElement.style.position="fixed",this.domElement=document.createElement("div"),xr.extend(this.domElement.style,{position:"fixed",display:"none",zIndex:"1001",opacity:0,WebkitTransition:"-webkit-transform 0.2s ease-out, opacity 0.2s linear",transition:"transform 0.2s ease-out, opacity 0.2s linear"}),document.body.appendChild(this.backgroundElement),document.body.appendChild(this.domElement);var e=this;Ti.bind(this.backgroundElement,"click",function(){e.hide()})}return zm(i,[{key:"show",value:function(){var t=this;this.backgroundElement.style.display="block",this.domElement.style.display="block",this.domElement.style.opacity=0,this.domElement.style.webkitTransform="scale(1.1)",this.layout(),xr.defer(function(){t.backgroundElement.style.opacity=1,t.domElement.style.opacity=1,t.domElement.style.webkitTransform="scale(1)"})}},{key:"hide",value:function(){var t=this,n=function r(){t.domElement.style.display="none",t.backgroundElement.style.display="none",Ti.unbind(t.domElement,"webkitTransitionEnd",r),Ti.unbind(t.domElement,"transitionend",r),Ti.unbind(t.domElement,"oTransitionEnd",r)};Ti.bind(this.domElement,"webkitTransitionEnd",n),Ti.bind(this.domElement,"transitionend",n),Ti.bind(this.domElement,"oTransitionEnd",n),this.backgroundElement.style.opacity=0,this.domElement.style.opacity=0,this.domElement.style.webkitTransform="scale(1.1)"}},{key:"layout",value:function(){this.domElement.style.left=window.innerWidth/2-Ti.getWidth(this.domElement)/2+"px",this.domElement.style.top=window.innerHeight/2-Ti.getHeight(this.domElement)/2+"px"}}]),i}(),Xoe=function Ooe(i){if(i&&!(typeof window>"u")){var e=document.createElement("style");return e.setAttribute("type","text/css"),e.innerHTML=i,document.head.appendChild(e),i}}(".dg ul{list-style:none;margin:0;padding:0;width:100%;clear:both}.dg.ac{position:fixed;top:0;left:0;right:0;height:0;z-index:0}.dg:not(.ac) .main{overflow:hidden}.dg.main{-webkit-transition:opacity .1s linear;-o-transition:opacity .1s linear;-moz-transition:opacity .1s linear;transition:opacity .1s linear}.dg.main.taller-than-window{overflow-y:auto}.dg.main.taller-than-window .close-button{opacity:1;margin-top:-1px;border-top:1px solid #2c2c2c}.dg.main ul.closed .close-button{opacity:1 !important}.dg.main:hover .close-button,.dg.main .close-button.drag{opacity:1}.dg.main .close-button{-webkit-transition:opacity .1s linear;-o-transition:opacity .1s linear;-moz-transition:opacity .1s linear;transition:opacity .1s linear;border:0;line-height:19px;height:20px;cursor:pointer;text-align:center;background-color:#000}.dg.main .close-button.close-top{position:relative}.dg.main .close-button.close-bottom{position:absolute}.dg.main .close-button:hover{background-color:#111}.dg.a{float:right;margin-right:15px;overflow-y:visible}.dg.a.has-save>ul.close-top{margin-top:0}.dg.a.has-save>ul.close-bottom{margin-top:27px}.dg.a.has-save>ul.closed{margin-top:0}.dg.a .save-row{top:0;z-index:1002}.dg.a .save-row.close-top{position:relative}.dg.a .save-row.close-bottom{position:fixed}.dg li{-webkit-transition:height .1s ease-out;-o-transition:height .1s ease-out;-moz-transition:height .1s ease-out;transition:height .1s ease-out;-webkit-transition:overflow .1s linear;-o-transition:overflow .1s linear;-moz-transition:overflow .1s linear;transition:overflow .1s linear}.dg li:not(.folder){cursor:auto;height:27px;line-height:27px;padding:0 4px 0 5px}.dg li.folder{padding:0;border-left:4px solid rgba(0,0,0,0)}.dg li.title{cursor:pointer;margin-left:-4px}.dg .closed li:not(.title),.dg .closed ul li,.dg .closed ul li>*{height:0;overflow:hidden;border:0}.dg .cr{clear:both;padding-left:3px;height:27px;overflow:hidden}.dg .property-name{cursor:default;float:left;clear:left;width:40%;overflow:hidden;text-overflow:ellipsis}.dg .cr.function .property-name{width:100%}.dg .c{float:left;width:60%;position:relative}.dg .c input[type=text]{border:0;margin-top:4px;padding:3px;width:100%;float:right}.dg .has-slider input[type=text]{width:30%;margin-left:0}.dg .slider{float:left;width:66%;margin-left:-5px;margin-right:0;height:19px;margin-top:4px}.dg .slider-fg{height:100%}.dg .c input[type=checkbox]{margin-top:7px}.dg .c select{margin-top:5px}.dg .cr.function,.dg .cr.function .property-name,.dg .cr.function *,.dg .cr.boolean,.dg .cr.boolean *{cursor:pointer}.dg .cr.color{overflow:visible}.dg .selector{display:none;position:absolute;margin-left:-9px;margin-top:23px;z-index:10}.dg .c:hover .selector,.dg .selector.drag{display:block}.dg li.save-row{padding:0}.dg li.save-row .button{display:inline-block;padding:0px 6px}.dg.dialogue{background-color:#222;width:460px;padding:15px;font-size:13px;line-height:15px}#dg-new-constructor{padding:10px;color:#222;font-family:Monaco, monospace;font-size:10px;border:0;resize:none;box-shadow:inset 1px 1px 1px #888;word-wrap:break-word;margin:12px 0;display:block;width:440px;overflow-y:scroll;height:100px;position:relative}#dg-local-explain{display:none;font-size:11px;line-height:17px;border-radius:3px;background-color:#333;padding:8px;margin-top:10px}#dg-local-explain code{font-size:10px}#dat-gui-save-locally{display:none}.dg{color:#eee;font:11px 'Lucida Grande', sans-serif;text-shadow:0 -1px 0 #111}.dg.main::-webkit-scrollbar{width:5px;background:#1a1a1a}.dg.main::-webkit-scrollbar-corner{height:0;display:none}.dg.main::-webkit-scrollbar-thumb{border-radius:5px;background:#676767}.dg li:not(.folder){background:#1a1a1a;border-bottom:1px solid #2c2c2c}.dg li.save-row{line-height:25px;background:#dad5cb;border:0}.dg li.save-row select{margin-left:5px;width:108px}.dg li.save-row .button{margin-left:5px;margin-top:1px;border-radius:2px;font-size:9px;line-height:7px;padding:4px 4px 5px 4px;background:#c5bdad;color:#fff;text-shadow:0 1px 0 #b0a58f;box-shadow:0 -1px 0 #b0a58f;cursor:pointer}.dg li.save-row .button.gears{background:#c5bdad url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAsAAAANCAYAAAB/9ZQ7AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAQJJREFUeNpiYKAU/P//PwGIC/ApCABiBSAW+I8AClAcgKxQ4T9hoMAEUrxx2QSGN6+egDX+/vWT4e7N82AMYoPAx/evwWoYoSYbACX2s7KxCxzcsezDh3evFoDEBYTEEqycggWAzA9AuUSQQgeYPa9fPv6/YWm/Acx5IPb7ty/fw+QZblw67vDs8R0YHyQhgObx+yAJkBqmG5dPPDh1aPOGR/eugW0G4vlIoTIfyFcA+QekhhHJhPdQxbiAIguMBTQZrPD7108M6roWYDFQiIAAv6Aow/1bFwXgis+f2LUAynwoIaNcz8XNx3Dl7MEJUDGQpx9gtQ8YCueB+D26OECAAQDadt7e46D42QAAAABJRU5ErkJggg==) 2px 1px no-repeat;height:7px;width:8px}.dg li.save-row .button:hover{background-color:#bab19e;box-shadow:0 -1px 0 #b0a58f}.dg li.folder{border-bottom:0}.dg li.title{padding-left:16px;background:#000 url(data:image/gif;base64,R0lGODlhBQAFAJEAAP////Pz8////////yH5BAEAAAIALAAAAAAFAAUAAAIIlI+hKgFxoCgAOw==) 6px 10px no-repeat;cursor:pointer;border-bottom:1px solid rgba(255,255,255,0.2)}.dg .closed li.title{background-image:url(data:image/gif;base64,R0lGODlhBQAFAJEAAP////Pz8////////yH5BAEAAAIALAAAAAAFAAUAAAIIlGIWqMCbWAEAOw==)}.dg .cr.boolean{border-left:3px solid #806787}.dg .cr.color{border-left:3px solid}.dg .cr.function{border-left:3px solid #e61d5f}.dg .cr.number{border-left:3px solid #2FA1D6}.dg .cr.number input[type=text]{color:#2FA1D6}.dg .cr.string{border-left:3px solid #1ed36f}.dg .cr.string input[type=text]{color:#1ed36f}.dg .cr.function:hover,.dg .cr.boolean:hover{background:#111}.dg .c input[type=text]{background:#303030;outline:none}.dg .c input[type=text]:hover{background:#3c3c3c}.dg .c input[type=text]:focus{background:#494949;color:#fff}.dg .c .slider{background:#303030;cursor:ew-resize}.dg .c .slider-fg{background:#2FA1D6;max-width:100%}.dg .c .slider:hover{background:#3c3c3c}.dg .c .slider:hover .slider-fg{background:#44abda}\n");!function(e,t){var n=t||document,r=document.createElement("style");r.type="text/css",r.innerHTML=e;var s=n.getElementsByTagName("head")[0];try{s.appendChild(r)}catch{}}(Xoe);var gS="Default",_S=function(){try{return!!window.localStorage}catch{return!1}}(),yS=void 0,UU=!0,A2=void 0,Kk=!1,zU=[],cc=function i(e){var t=this,n=e||{};this.domElement=document.createElement("div"),this.__ul=document.createElement("ul"),this.domElement.appendChild(this.__ul),Ti.addClass(this.domElement,"dg"),this.__folders={},this.__controllers=[],this.__rememberedObjects=[],this.__rememberedObjectIndecesToControllers=[],this.__listening=[],n=xr.defaults(n,{closeOnTop:!1,autoPlace:!0,width:i.DEFAULT_WIDTH}),n=xr.defaults(n,{resizable:n.autoPlace,hideable:n.autoPlace}),xr.isUndefined(n.load)?n.load={preset:gS}:n.preset&&(n.load.preset=n.preset),xr.isUndefined(n.parent)&&n.hideable&&zU.push(this),n.resizable=xr.isUndefined(n.parent)&&n.resizable,n.autoPlace&&xr.isUndefined(n.scrollable)&&(n.scrollable=!0);var r=_S&&"true"===localStorage.getItem(m2(0,"isLocal")),s=void 0,a=void 0;if(Object.defineProperties(this,{parent:{get:function(){return n.parent}},scrollable:{get:function(){return n.scrollable}},autoPlace:{get:function(){return n.autoPlace}},closeOnTop:{get:function(){return n.closeOnTop}},preset:{get:function(){return t.parent?t.getRoot().preset:n.load.preset},set:function(C){t.parent?t.getRoot().preset=C:n.load.preset=C,function Joe(i){for(var e=0;e1){var l=t.__li.nextElementSibling;return t.remove(),vS(i,t.object,t.property,{before:l,factoryArgs:[xr.toArray(arguments)]})}if(xr.isArray(a)||xr.isObject(a)){var u=t.__li.nextElementSibling;return t.remove(),vS(i,t.object,t.property,{before:u,factoryArgs:[a]})}},name:function(a){return t.__li.firstElementChild.firstElementChild.innerHTML=a,t},listen:function(){return t.__gui.listen(t),t},remove:function(){return t.__gui.remove(t),t}}),t instanceof Y4){var n=new mS(t.object,t.property,{min:t.__min,max:t.__max,step:t.__step});xr.each(["updateDisplay","onChange","onFinishChange","step","min","max"],function(s){var a=t[s],l=n[s];t[s]=n[s]=function(){var u=Array.prototype.slice.call(arguments);return l.apply(n,u),a.apply(t,u)}}),Ti.addClass(e,"has-slider"),t.domElement.insertBefore(n.domElement,t.domElement.firstElementChild)}else if(t instanceof mS){var r=function(a){if(xr.isNumber(t.__min)&&xr.isNumber(t.__max)){var l=t.__li.firstElementChild.firstElementChild.innerHTML,u=t.__gui.__listening.indexOf(t)>-1;t.remove();var d=vS(i,t.object,t.property,{before:t.__li.nextElementSibling,factoryArgs:[t.__min,t.__max,t.__step]});return d.name(l),u&&d.listen(),d}return a};t.min=xr.compose(r,t.min),t.max=xr.compose(r,t.max)}else t instanceof jk?(Ti.bind(e,"click",function(){Ti.fakeEvent(t.__checkbox,"click")}),Ti.bind(t.__checkbox,"click",function(s){s.stopPropagation()})):t instanceof Xk?(Ti.bind(e,"click",function(){Ti.fakeEvent(t.__button,"click")}),Ti.bind(e,"mouseover",function(){Ti.addClass(t.__button,"hover")}),Ti.bind(e,"mouseout",function(){Ti.removeClass(t.__button,"hover")})):t instanceof Z4&&(Ti.addClass(e,"color"),t.updateDisplay=xr.compose(function(s){return e.style.borderLeftColor=t.__color.toString(),s},t.updateDisplay),t.updateDisplay());t.setValue=xr.compose(function(s){return i.getRoot().__preset_select&&t.isModified()&&Zk(i.getRoot(),!0),s},t.setValue)}(i,u,r),i.__controllers.push(r),r}function m2(i,e){return document.location.href+"."+e}function Jk(i,e,t){var n=document.createElement("option");n.innerHTML=e,n.value=e,i.__preset_select.appendChild(n),t&&(i.__preset_select.selectedIndex=i.__preset_select.length-1)}function GU(i,e){e.style.display=i.useLocalStorage?"block":"none"}function Yoe(i){var e=i.__save_row=document.createElement("li");Ti.addClass(i.domElement,"has-save"),i.__ul.insertBefore(e,i.__ul.firstChild),Ti.addClass(e,"save-row");var t=document.createElement("span");t.innerHTML=" ",Ti.addClass(t,"button gears");var n=document.createElement("span");n.innerHTML="Save",Ti.addClass(n,"button"),Ti.addClass(n,"save");var r=document.createElement("span");r.innerHTML="New",Ti.addClass(r,"button"),Ti.addClass(r,"save-as");var s=document.createElement("span");s.innerHTML="Revert",Ti.addClass(s,"button"),Ti.addClass(s,"revert");var a=i.__preset_select=document.createElement("select");if(i.load&&i.load.remembered?xr.each(i.load.remembered,function(y,C){Jk(i,C,C===i.preset)}):Jk(i,gS,!1),Ti.bind(a,"change",function(){for(var y=0;y0&&(e.preset=this.preset,e.remembered||(e.remembered={}),e.remembered[this.preset]=J4(this)),e.folders={},xr.each(this.__folders,function(t,n){e.folders[n]=t.getSaveObject()}),e},save:function(){this.load.remembered||(this.load.remembered={}),this.load.remembered[this.preset]=J4(this),Zk(this,!1),this.saveToLocalStorageIfPossible()},saveAs:function(e){this.load.remembered||(this.load.remembered={},this.load.remembered[gS]=J4(this,!0)),this.load.remembered[e]=J4(this),this.preset=e,Jk(this,e,!0),this.saveToLocalStorageIfPossible()},revert:function(e){xr.each(this.__controllers,function(t){this.getRoot().load.remembered?VU(e||this.getRoot(),t):t.setValue(t.initialValue),t.__onFinishChange&&t.__onFinishChange.call(t,t.getValue())},this),xr.each(this.__folders,function(t){t.revert(t)}),e||Zk(this.getRoot(),!1)},listen:function(e){var t=0===this.__listening.length;this.__listening.push(e),t&&qU(this.__listening)},updateDisplay:function(){xr.each(this.__controllers,function(e){e.updateDisplay()}),xr.each(this.__folders,function(e){e.updateDisplay()})}});var QU=cc;class WU{constructor(e="eventDisplay",t){var n;this.three=t,this.guiParameters={rotate:void 0,axis:void 0,lowRes:void 0,eventData:void 0,geometries:void 0,labels:void 0},this.maxPositionX=4e3,this.maxPositionY=4e3,this.maxPositionZ=4e3,this.gui=new QU,this.gui.domElement.id="gui",this.gui.domElement.style.cssText="position: absolute; right: 0; top: 2rem; z-index: 11;",(null!==(n=document.getElementById(e))&&void 0!==n?n:document.body).appendChild(this.gui.domElement),this.geomFolder=null,this.eventFolder=null,this.labelsFolder=null,this.sceneManager=t.getSceneManager()}clear(){document.getElementById("gui")?.remove(),this.geomFolder=null}addGeometryFolder(){null===this.geomFolder&&(this.geomFolder=this.gui.addFolder(qa.GEOMETRIES_ID)),this.guiParameters.geometries={show:!0,wireframe:!1},this.geomFolder.add(this.guiParameters.geometries,"show").name("Show").listen().onChange(n=>{this.sceneManager.objectVisibility(this.sceneManager.getObjectByName(qa.GEOMETRIES_ID),n)}),this.geomFolder.add(this.guiParameters.geometries,"wireframe").name("Wireframe").listen().onChange(n=>{this.sceneManager.wireframeGeometries(n)})}addGeometry(e,t){const{name:n,material:r,visible:s}=e,a=r?.color;this.guiParameters[n]={show:s,color:a??"#000000",x:0,y:0,z:0,detectorOpacity:1,remove:this.removeOBJ(e),scale:1};const l=this.geomFolder.addFolder(n);l.addColor(this.guiParameters[n],"color").name("Color").onChange(C=>this.sceneManager.changeObjectColor(e,C)),l.add(this.guiParameters[n],"detectorOpacity",0,1).name("Opacity").onFinishChange(C=>this.sceneManager.setGeometryOpacity(e,C)),l.add(this.guiParameters[n],"show").name("Show").listen().onChange(C=>this.sceneManager.objectVisibility(e,C)),l.add(this.guiParameters[n],"scale",0,1e3).name("Scale").onChange(C=>{this.sceneManager.scaleObject(e,C)}),l.add(this.guiParameters[n],"x",-this.maxPositionX,this.maxPositionX).name("X").onChange(C=>this.sceneManager.getObjectPosition(n).setX(C)),l.add(this.guiParameters[n],"y",-this.maxPositionY,this.maxPositionY).name("Y").onChange(C=>this.sceneManager.getObjectPosition(n).setY(C)),l.add(this.guiParameters[n],"z",-this.maxPositionZ,this.maxPositionZ).name("Z").onChange(C=>this.sceneManager.getObjectPosition(n).setZ(C)),l.add(this.guiParameters[n],"remove").name("Remove")}removeOBJ(e){return()=>{const t=this.geomFolder.__folders[e.name];t&&this.geomFolder.removeFolder(t),this.sceneManager.removeGeometry(e)}}addEventDataFolder(){null!==this.eventFolder&&this.gui.removeFolder(this.eventFolder),this.eventFolder=this.gui.addFolder("Event Data"),this.guiParameters.eventData={show:!0,depthTest:!0},this.eventFolder.add(this.guiParameters.eventData,"show").name("Show").listen().onChange(n=>this.sceneManager.groupVisibility(qa.EVENT_DATA_ID,n)),this.eventFolder.add(this.guiParameters.eventData,"depthTest").name("Depth Test").listen().onChange(n=>this.three.eventDataDepthTest(n))}addEventDataTypeFolder(e){const t=this.eventFolder.addFolder(e);this.guiParameters.eventData[e]=!0,t.add(this.guiParameters.eventData,e).name("Show").listen().onChange(r=>this.sceneManager.objectVisibility(this.sceneManager.getObjectByName(qa.EVENT_DATA_ID).getObjectByName(e),r))}addCollection(e,t,n,r){const s=this.eventFolder.__folders[e];if(!s)return;this.guiParameters[t]={show:!0,color:0,randomColor:()=>this.three.getColorManager().collectionColorRandom(t),resetCut:()=>this.sceneManager.groupVisibility(t,!0,qa.EVENT_DATA_ID)};const a=s.addFolder(t);a.add(this.guiParameters[t],"show").name("Show").listen().onChange(d=>{const p=this.sceneManager.getObjectByName(qa.EVENT_DATA_ID).getObjectByName(t);this.sceneManager.objectVisibility(p,d)});const u=a.addColor(this.guiParameters[t],"color").name("Color");if(u.onChange(d=>this.three.getColorManager().collectionColor(t,d)),u.setValue(r?.getHex()),a.add(this.guiParameters[t],"randomColor").name("Random Color"),n){const d=a.addFolder("Cuts");d.add(this.guiParameters[t],"resetCut").name("Reset cuts");for(const p of n)d.add(p,"minValue",p.minValue,p.maxValue).name("min "+p.field).onChange(O=>{this.sceneManager.collectionFilter(t,n)}),d.add(p,"maxValue",p.minValue,p.maxValue).name("max "+p.field).onChange(O=>{this.sceneManager.collectionFilter(t,n)})}}addLabelsFolder(e){if(null!==this.labelsFolder)return;const{onToggle:t,onSizeChange:n,onColorChange:r,onSaveLabels:s,onLoadLabels:a}=e;this.labelsFolder=this.gui.addFolder(qa.LABELS_ID),this.guiParameters.labels={show:!0,size:1,color:"#a8a8a8",saveLabels:s,loadLabels:a},this.labelsFolder.add(this.guiParameters.labels,"show").name("Show").listen().onChange(t),this.labelsFolder.add(this.guiParameters.labels,"size",0,10).name("Size").onFinishChange(n),this.labelsFolder.addColor(this.guiParameters.labels,"color").name("Color").onChange(r),this.labelsFolder.add(this.guiParameters.labels,"saveLabels").name("Save Labels"),this.labelsFolder.add(this.guiParameters.labels,"loadLabels").name("Load Labels")}addLabel(e,t){this.guiParameters[e]={show:!0,color:11513775};const n=this.labelsFolder.addFolder(e);n.add(this.guiParameters[e],"show").name("Show").listen().onChange(a=>{const l=this.sceneManager.getObjectByName(qa.LABELS_ID).getObjectByName(e);this.sceneManager.objectVisibility(l,a)}),n.addColor(this.guiParameters[e],"color").name("\xc7olor").onChange(a=>this.sceneManager.changeObjectColor(this.sceneManager.getObjectByName(e),a)),this.guiParameters[e].removeLabel=()=>{t?.(),this.removeLabel(e,n)},n.add(this.guiParameters[e],"removeLabel").name("Remove")}removeLabel(e,t){t||(t=this.labelsFolder.__folders[e]),t&&this.labelsFolder.removeFolder(t)}getEventDataTypeFolder(e){return this.eventFolder.__folders[e]}}var Rf=(()=>(function(i){i.CHARGE="charge",i.MOM="mom",i.VERTEX="vertex"}(Rf||(Rf={})),Rf))();class rae{constructor(e,t,n,r){this.colorManager=e,this.allColorByOptions=[{key:Rf.CHARGE,name:"Charge "+_y.getPrettySymbol("charge"),initialize:this.initChargeColorOptions.bind(this),apply:this.applyChargeColorOptions.bind(this)},{key:Rf.MOM,name:"Momentum "+_y.getPrettySymbol("mom"),initialize:this.initMomColorOptions.bind(this),apply:this.applyMomColorOptions.bind(this)},{key:Rf.VERTEX,name:"Vertex",apply:this.applyVertexColorOptions.bind(this)}],this.chargeColors={"-1":"#ff0000",0:"#ff0000",1:"#ff0000"},this.momColors={min:{value:0,color:"#ff0000"},max:{value:5e4,color:"#ff0000"}},this.collectionName=t.name,this.colorOptionsFolder=t.addChild("Color Options"),this.colorOptionsFolder.addConfig("color",{label:"Color",color:n?`#${n?.getHexString()}`:void 0,onChange:s=>this.colorManager.collectionColor(this.collectionName,s)}),this.colorOptionsFolder.addConfig("button",{label:"Random",onClick:()=>this.colorManager.collectionColorRandom(this.collectionName)}),r?.length>0&&(this.colorByOptions=this.allColorByOptions.filter(s=>r.includes(s.key)),this.initColorByOptions(),this.colorByOptions.forEach(s=>{var a;return null===(a=s.initialize)||void 0===a?void 0:a.call(s)}),this.onlySelectedColorByOption())}initColorByOptions(){this.selectedColorByOption=this.colorByOptions[0].key,this.colorOptionsFolder.addConfig("select",{label:"Color by",options:this.colorByOptions.map(e=>e.name),onChange:e=>{var t;const n=this.colorByOptions.find(r=>r.name===e);this.selectedColorByOption=n?.key,null===(t=n?.apply)||void 0===t||t.call(n),this.onlySelectedColorByOption()}})}initChargeColorOptions(){[-1,0,1].forEach(e=>{this.colorOptionsFolder.addConfig("color",{label:`${_y.getPrettySymbol("charge")}=${e}`,group:Rf.CHARGE,color:this.chargeColors[e],onChange:t=>{this.chargeColors[e]=t,this.selectedColorByOption===Rf.CHARGE&&this.colorManager.colorObjectsByProperty(t,this.collectionName,n=>this.shouldColorByCharge(n,e))}})})}applyChargeColorOptions(){[-1,0,1].forEach(e=>{this.colorManager.colorObjectsByProperty(this.chargeColors[e],this.collectionName,t=>this.shouldColorByCharge(t,e))})}shouldColorByCharge(e,t){var n;return Math.sign(1/parseInt(null===(n=e?.dparams)||void 0===n?void 0:n[4]))===t||e?.charge===t||void 0}initMomColorOptions(){Object.entries(this.momColors).forEach(([e,t])=>{this.colorOptionsFolder.addConfig("slider",{label:_y.getPrettySymbol("mom")+" "+e,group:Rf.MOM,min:this.momColors.min.value,max:this.momColors.max.value,value:this.momColors[e].value,step:10,allowCustomValue:!0,onChange:n=>{this.momColors[e].value=n,this.selectedColorByOption===Rf.MOM&&(this.colorByMomentum("min"),this.colorByMomentum("max"))}}),this.colorOptionsFolder.addConfig("color",{label:_y.getPrettySymbol("mom")+" "+e+" color",group:Rf.MOM,color:t.color,onChange:n=>{this.momColors[e].color=n,this.selectedColorByOption===Rf.MOM&&this.colorByMomentum(e)}})})}applyMomColorOptions(){this.colorByMomentum("min"),this.colorByMomentum("max")}colorByMomentum(e){this.colorManager.colorObjectsByProperty(this.momColors[e].color,this.collectionName,t=>{const n=this.getMomentum(t),r=(this.momColors.min.value+this.momColors.max.value)/2;return"max"===e&&n>r&&nthis.momColors.min.value||void 0})}getMomentum(e){var t,n;return null!==(t=e?.dparams)&&void 0!==t&&t[4]?Math.abs(1/parseFloat(null===(n=e?.dparams)||void 0===n?void 0:n[4])):e?.mom}applyVertexColorOptions(){this.colorManager.colorTracksByVertex(this.collectionName)}onlySelectedColorByOption(){this.colorOptionsFolder.configs.forEach(e=>{e.hidden=!(void 0===e.group||e.group===this.selectedColorByOption)})}}class tF{constructor(e,t){this.phoenixMenuRoot=e,this.three=t,this.geomFolder=null,this.eventFolder=null,this.labelsFolder=null,this.sceneManager=t.getSceneManager()}clear(){this.phoenixMenuRoot&&(this.phoenixMenuRoot.truncate(),this.phoenixMenuRoot=void 0),this.geomFolder=null,this.eventFolder=null,this.labelsFolder=null}addGeometryFolder(){null===this.geomFolder&&(this.geomFolder=this.phoenixMenuRoot.addChild("Detector",e=>{this.sceneManager.groupVisibility(qa.GEOMETRIES_ID,e)},"perspective")),this.geomFolder.addConfig("checkbox",{label:"Wireframe",isChecked:!1,onChange:e=>{this.sceneManager.wireframeGeometries(e)}}).addConfig("slider",{label:"Opacity",min:0,max:1,step:.01,allowCustomValue:!0,onChange:e=>{this.sceneManager.setGeometryOpacity(this.sceneManager.getObjectByName(qa.GEOMETRIES_ID),e)}}).addConfig("slider",{label:"Scale",min:0,max:20,step:.01,allowCustomValue:!0,onChange:e=>{this.sceneManager.scaleObject(this.sceneManager.getObjectByName(qa.GEOMETRIES_ID),e)}})}addGeometry(e,t){const{name:n,material:r,visible:s}=e,a=r?.color;let l=this.geomFolder;t&&(l=this.geomFolder.findInTreeOrCreate(t));let u=n.lastIndexOf(" > ");u<0?u=0:u+=3;const d=l.addChild(n.substring(u),p=>{this.sceneManager.objectVisibility(e,p)});d.toggleState=s,d.addConfig("color",{label:"Color",color:a?`#${new Lr(a).getHexString()}`:void 0,onChange:p=>{this.sceneManager.changeObjectColor(e,p)}}).addConfig("slider",{label:"Opacity",min:0,max:1,step:.05,allowCustomValue:!0,onChange:p=>{this.sceneManager.setGeometryOpacity(e,p)}}).addConfig("button",{label:"Remove",onClick:()=>{d.remove(),this.sceneManager.removeGeometry(e)}})}addEventDataFolder(){null!==this.eventFolder&&(this.eventFolderState=this.eventFolder.getNodeState(),this.eventFolder.remove()),this.eventFolder=this.phoenixMenuRoot.addChild("Event Data",e=>{this.sceneManager.groupVisibility(qa.EVENT_DATA_ID,e)},"event-folder"),this.eventFolder.addConfig("checkbox",{label:"Depth Test",isChecked:!0,onChange:e=>{this.three.eventDataDepthTest(e)}})}addEventDataTypeFolder(e){this.eventFolder.addChild(e,t=>{this.sceneManager.objectVisibility(this.sceneManager.getObjectByName(qa.EVENT_DATA_ID).getObjectByName(e),t)})}addCollection(e,t,n,r){const s=this.eventFolder.children.find(u=>u.name===e);if(!s)return;const a=s.addChild(t,u=>{const d=this.sceneManager.getObjectByName(qa.EVENT_DATA_ID).getObjectByName(t);this.sceneManager.objectVisibility(d,u)});this.addDrawOptions(a,t),n&&n.length>0&&this.addCutOptions(a,t,n);const l=[];"Tracks"===s.name&&l.push(Rf.CHARGE,Rf.MOM,Rf.VERTEX),new rae(this.three.getColorManager(),a,r,l)}addCutOptions(e,t,n){const r=e.addChild("Cut Options");r.addConfig("label",{label:"Cuts"}).addConfig("button",{label:"Reset cuts",onClick:()=>{this.sceneManager.groupVisibility(t,!0,qa.EVENT_DATA_ID);for(const s of n)s.reset()}});for(const s of n)r.addConfig("rangeSlider",{label:_y.getPrettySymbol(s.field),min:s.minValue,max:s.maxValue,step:s.step,value:s.minValue,highValue:s.maxValue,enableMin:s.minCutActive,enableMax:s.maxCutActive,onChange:({value:a,highValue:l})=>{s.minValue=a,s.maxValue=l,this.sceneManager.collectionFilter(t,n)},setEnableMin:a=>{s.enableMinCut(a),this.sceneManager.collectionFilter(t,n)},setEnableMax:a=>{s.enableMaxCut(a),this.sceneManager.collectionFilter(t,n)}})}addDrawOptions(e,t){const n=e.addChild("Draw Options");n.addConfig("slider",{label:"Opacity",min:.1,step:.1,max:1,onChange:r=>{this.sceneManager.setGeometryOpacity(this.sceneManager.getObjectByName(qa.EVENT_DATA_ID).getObjectByName(t),r)}}),n.addConfig("checkbox",{label:"Wireframe",onChange:r=>this.sceneManager.wireframeObjects(this.sceneManager.getObjectByName(qa.EVENT_DATA_ID).getObjectByName(t),r)})}addLabelsFolder(e){if(null!==this.labelsFolder)return;const{onToggle:t,onSizeChange:n,onColorChange:r,onSaveLabels:s,onLoadLabels:a}=e;this.labelsFolder=this.phoenixMenuRoot.addChild(qa.LABELS_ID,t,"info"),this.labelsFolder.addConfig("slider",{label:"Size",min:0,max:10,step:.01,allowCustomValue:!0,onChange:n}),this.labelsFolder.addConfig("color",{label:"Color",color:"#a8a8a8",onChange:r}),this.labelsFolder.addConfig("button",{label:"Save Labels",onClick:s}),this.labelsFolder.addConfig("button",{label:"Load Labels",onClick:a})}addLabel(e,t){let n=this.labelsFolder.children.find(r=>r.name===e);n||(n=this.labelsFolder.addChild(e,r=>{const s=this.sceneManager.getObjectByName(qa.LABELS_ID).getObjectByName(e);this.sceneManager.objectVisibility(s,r)}),n.addConfig("color",{label:"Color",color:"#a8a8a8",onChange:r=>{this.sceneManager.changeObjectColor(this.sceneManager.getObjectByName(e),r)}}),n.addConfig("button",{label:"Remove",onClick:()=>{t?.(),this.removeLabel(e,n)}}))}removeLabel(e,t){var n;t||(t=null===(n=this.labelsFolder)||void 0===n?void 0:n.children.find(r=>r.name===e)),t?.remove()}getEventDataTypeFolder(e){return this.eventFolder.children.find(t=>t.name===e)}loadEventFolderState(){this.eventFolderState&&this.eventFolder.loadStateFromJSON(this.eventFolderState)}}const jU=i=>{try{return localStorage.getItem(i)}catch(e){console.warn("Exception in localStorage",e)}},oae=[{name:"Cavern to ID",positions:[{position:[66388.95051168812,5264.228603228927,-46910.7848593543],duration:1e3},{position:[12834.18729094943,677.7571205763458,135.68755273443463],duration:2e3},{position:[312.02688693297375,25.884223757326,270.10019006776236],duration:3500},{position:[263.3640855132258,19.874838262525053,-318.16541790248885],duration:3e3},{position:[5534.140362338047,234.03507981484574,-2933.619479808285],duration:2e3},{position:[2681.277288705242,646.5795158318147,5628.5248735111745],duration:1e3},{position:[-6062.586283740076,790.5876682946184,1381.1675900848818],duration:1e3},{position:[-1766.7693725879053,1007.1048030984678,-5928.901341784575],duration:1e3},{position:[12814.982506255355,2516.987185037266,-22891.902734328327],duration:1e3}],animateEventAfterInterval:5e3,collisionDuration:6e3}];class aae{constructor(e){this.three=e,this.uiMenus=[],this.geomFolderAdded=!1,this.labelsFolderAdded=!1}init(e){this.clearUI(),this.configuration=e,this.showStats(e.elementId),this.uiMenus=[],e.enableDatGUIMenu&&this.uiMenus.push(new WU(e.elementId,this.three)),e.phoenixMenuRoot&&this.uiMenus.push(new tF(e.phoenixMenuRoot,this.three)),e.forceColourTheme?this.setDarkTheme("dark"==e.forceColourTheme.toLocaleLowerCase()):this.detectColorScheme(),this.stateManager=new Nm,this.stateManager.setPhoenixMenuRoot(e.phoenixMenuRoot)}showStats(e="eventDisplay"){this.stats=Foe(),this.stats.showPanel(0),this.stats.dom.className="ui-element",this.stats.dom.id="statsElement",this.stats.domElement.style.cssText="position: absolute; left: 0px; cursor: pointer; opacity: 0.9; z-index: 10; bottom: 0px;";let t=document.getElementById(e);null==t&&(t=document.body),t.appendChild(this.stats.dom)}updateUI(){this.stats.update()}clearUI(){this.uiMenus.forEach(e=>e.clear()),this.geomFolderAdded=!1,this.labelsFolderAdded=!1}addGeomFolder(){this.geomFolderAdded=!0,this.uiMenus.forEach(e=>e.addGeometryFolder())}addGeometry(e,t){this.geomFolderAdded||this.addGeomFolder(),this.uiMenus.forEach(n=>n.addGeometry(e,t))}addEventDataFolder(){this.uiMenus.forEach(e=>e.addEventDataFolder())}addEventDataTypeFolder(e){this.uiMenus.forEach(t=>t.addEventDataTypeFolder(e))}addCollection(e,t,n,r){this.uiMenus.forEach(s=>s.addCollection(e,t,n,r))}addLabelsFolder(){const e=this.three.getSceneManager();this.labelsFolderAdded=!0;const t=l=>{e.objectVisibility(e.getObjectByName(qa.LABELS_ID),l)},n=l=>{const u=e.getObjectByName(qa.LABELS_ID);e.scaleObject(u,l)},r=l=>{const u=e.getObjectByName(qa.LABELS_ID);e.changeObjectColor(u,l)},s=()=>{var l,u;const d=null===(u=null===(l=this.configuration)||void 0===l?void 0:l.eventDataLoader)||void 0===u?void 0:u.getLabelsObject();d&&W4(JSON.stringify(d),"phoenix-labels.json")},a=()=>{this.loadLabelsFile()};this.uiMenus.forEach(l=>l.addLabelsFolder({onToggle:t,onSizeChange:n,onColorChange:r,onSaveLabels:s,onLoadLabels:a}))}addLabel(e){this.labelsFolderAdded||this.addLabelsFolder(),this.uiMenus.forEach(t=>t?.addLabel(e,()=>this.removeLabel(e)))}removeLabel(e,t){var n,r,s;this.three.getSceneManager().removeLabel(e);const a=e.split(" > ");null===(s=null===(r=(null===(n=this.configuration.eventDataLoader)||void 0===n?void 0:n.getLabelsObject())?.[a[0]])||void 0===r?void 0:r[a[1]])||void 0===s||delete s[a[2]],t&&this.uiMenus.forEach(u=>u.removeLabel(e))}geometryVisibility(e,t){const n=this.three.getSceneManager();n.objectVisibility(n.getObjectByName(e),t)}rotateStartAngleClipping(e){const t=this.stateManager.getOpeningClippingAngle();this.three.setClippingAngle(e,t),this.stateManager.setStartClippingAngle(e)}rotateOpeningAngleClipping(e){const t=this.stateManager.getStartClippingAngle();this.three.setClippingAngle(t,e),this.stateManager.setOpeningClippingAngle(e)}setClipping(e){this.three.setClipping(e),this.stateManager.setClippingEnabled(e)}detectColorScheme(){let e=!1;jU("theme")?"dark"===jU("theme")&&(e=!0):window.matchMedia&&matchMedia("(prefers-color-scheme: dark)").matches&&(e=!0),this.darkTheme=e,this.setDarkTheme(e)}setDarkTheme(e){const t=e?"dark":"light";((i,e)=>{try{localStorage.setItem("theme",e)}catch(t){console.warn("Exception in localStorage",t)}})(0,t),document.documentElement.setAttribute("data-theme",t)}getDarkTheme(){return this.darkTheme}setAutoRotate(e){this.three.autoRotate(e)}setShowAxis(e){this.three.getSceneManager().setAxis(e)}setShowGrid(e){this.three.getSceneManager().setEtaPhiGrid(e)}getPresetViews(){var e;return null===(e=this.configuration)||void 0===e?void 0:e.presetViews}getPresetAnimations(){var e,t;return null!==(e=this.configuration)&&void 0!==e&&e.presetAnimations?null===(t=this.configuration)||void 0===t?void 0:t.presetAnimations:oae}displayView(e){this.three.animateCameraTransform(e.cameraPos,e.cameraTarget,1e3),e.clipping!=vy.NotForced&&(this.rotateStartAngleClipping(e.clippingStartAngle),this.rotateOpeningAngleClipping(e.clippingOpeningAngle),this.setClipping(e.clipping==vy.On))}toggleOrthographicView(e){this.three.swapCameras(e)}setOverlayRenderer(e){this.three.setOverlayRenderer(e)}enableKeyboardControls(){document.addEventListener("keydown",e=>{var t,n,r;if(!["input","textarea"].includes(null===(t=e.target)||void 0===t?void 0:t.tagName.toLowerCase())&&e.shiftKey&&("KeyT"===e.code&&this.setDarkTheme(!this.getDarkTheme()),null!==(n=this.configuration)&&void 0!==n&&n.presetViews&&e.code.startsWith("Digit"))){const a=parseInt(e.code.slice(-1))-1;null!==(r=this.configuration.presetViews)&&void 0!==r&&r[a]&&this.displayView(this.configuration.presetViews[a])}})}loadLabelsFile(){var e;const t=null===(e=this.configuration)||void 0===e?void 0:e.eventDataLoader,n=t?.getLabelsObject();t&&n&&rU(r=>{const s=JSON.parse(r);for(const a of Object.keys(s))for(const l of Object.keys(s[a])){const u=t.getCollection(l);for(const d of Object.keys(s[a][l])){const p=s[a][l][d],y=u[d].uuid,C=t.addLabelToEventObject(p,l,Number(d));this.addLabel(C),this.three.addLabelToObject(p,y,C)}}})}loadEventFolderPhoenixMenuState(){this.uiMenus.find(t=>t instanceof tF)?.loadEventFolderState()}getUIMenus(){return this.uiMenus}}class lae{constructor(){this.infoLoggerList=[],this.maxEntries=10}add(e,t){this.infoLoggerList.length>this.maxEntries&&this.infoLoggerList.pop(),this.infoLoggerList.unshift(t?t+": "+e:e)}getInfoLoggerList(){return this.infoLoggerList}}class Tl{constructor(e,t,n,r=1,s=!0,a=!0){this.field=e,this.minValue=t,this.maxValue=n,this.step=r,this.minCutActive=s,this.maxCutActive=a,this.defaultMinValue=t,this.defaultMaxValue=n,this.defaultApplyMinValue=s,this.defaultApplyMaxValue=a}enableMaxCut(e){this.maxCutActive=e}enableMinCut(e){this.minCutActive=e}cutPassed(e){return(!this.maxCutActive||e<=this.maxValue)&&(!this.minCutActive||e>this.minValue)}reset(){this.minValue=this.defaultMinValue,this.maxValue=this.defaultMaxValue,this.minCutActive=this.defaultApplyMinValue,this.maxCutActive=this.defaultApplyMaxValue}}const uae=new Nt,$U=new class Wre{constructor(e=new Nt,t=new Nt){this.start=e,this.end=t}set(e,t){return this.start.copy(e),this.end.copy(t),this}copy(e){return this.start.copy(e.start),this.end.copy(e.end),this}getCenter(e){return e.addVectors(this.start,this.end).multiplyScalar(.5)}delta(e){return e.subVectors(this.end,this.start)}distanceSq(){return this.start.distanceToSquared(this.end)}distance(){return this.start.distanceTo(this.end)}at(e,t){return this.delta(t).multiplyScalar(e).add(this.start)}closestPointToPointParameter(e,t){V9.subVectors(e,this.start),z4.subVectors(this.end,this.start);const n=z4.dot(z4);let s=z4.dot(V9)/n;return t&&(s=Du(s,0,1)),s}closestPointToPoint(e,t,n){const r=this.closestPointToPointParameter(e,t);return this.delta(n).multiplyScalar(r).add(this.start)}applyMatrix4(e){return this.start.applyMatrix4(e),this.end.applyMatrix4(e),this}equals(e){return e.start.equals(this.start)&&e.end.equals(this.end)}clone(){return(new this.constructor).copy(this)}},nF=new Rm,XU=new Nt,tD=new LA;class hae{constructor(){this.tolerance=-1,this.faces=[],this.newFaces=[],this.assigned=new KU,this.unassigned=new KU,this.vertices=[]}setFromPoints(e){if(e.length>=4){this.makeEmpty();for(let t=0,n=e.length;tthis.tolerance)return!1;return!0}intersectRay(e,t){const n=this.faces;let r=-1/0,s=1/0;for(let a=0,l=n.length;a0&&p>=0)return null;const y=0!==p?-d/p:0;if(!(y<=0)&&(p>0?s=Math.min(y,s):r=Math.max(y,r),r>s))return null}return e.at(r!==-1/0?r:s,t),t}intersectsRay(e){return null!==this.intersectRay(e,uae)}makeEmpty(){return this.faces=[],this.vertices=[],this}addVertexToFace(e,t){return e.face=t,null===t.outside?this.assigned.append(e):this.assigned.insertBefore(t.outside,e),t.outside=e,this}removeVertexFromFace(e,t){return e===t.outside&&(t.outside=null!==e.next&&e.next.face===t?e.next:null),this.assigned.remove(e),this}removeAllVerticesFromFace(e){if(null!==e.outside){const t=e.outside;let n=e.outside;for(;null!==n.next&&n.next.face===e;)n=n.next;return this.assigned.removeSubList(t,n),t.prev=n.next=null,e.outside=null,t}}deleteFaceVertices(e,t){const n=this.removeAllVerticesFromFace(e);if(void 0!==n)if(void 0===t)this.unassigned.appendChain(n);else{let r=n;do{const s=r.next;t.distanceToPoint(r.point)>this.tolerance?this.addVertexToFace(r,t):this.unassigned.append(r),r=s}while(null!==r)}return this}resolveUnassignedPoints(e){if(!1===this.unassigned.isEmpty()){let t=this.unassigned.first();do{const n=t.next;let r=this.tolerance,s=null;for(let a=0;ar&&(r=u,s=l),r>1e3*this.tolerance)break}}null!==s&&this.addVertexToFace(t,s),t=n}while(null!==t)}return this}computeExtremes(){const e=new Nt,t=new Nt,n=[],r=[];for(let s=0;s<3;s++)n[s]=r[s]=this.vertices[0];e.copy(this.vertices[0].point),t.copy(this.vertices[0].point);for(let s=0,a=this.vertices.length;st.getComponent(d)&&(t.setComponent(d,u.getComponent(d)),r[d]=l)}return this.tolerance=3*Number.EPSILON*(Math.max(Math.abs(e.x),Math.abs(t.x))+Math.max(Math.abs(e.y),Math.abs(t.y))+Math.max(Math.abs(e.z),Math.abs(t.z))),{min:n,max:r}}computeInitialHull(){const e=this.vertices,t=this.computeExtremes(),n=t.min,r=t.max;let s=0,a=0;for(let C=0;C<3;C++){const O=r[C].point.getComponent(C)-n[C].point.getComponent(C);O>s&&(s=O,a=C)}const l=n[a],u=r[a];let d,p;s=0,$U.set(l.point,u.point);for(let C=0,O=this.vertices.length;Cs&&(s=W,d=Q)}}s=-1,nF.setFromCoplanarPoints(l.point,u.point,d.point);for(let C=0,O=this.vertices.length;Cs&&(s=W,p=Q)}}const y=[];if(nF.distanceToPoint(p.point)<0){y.push(Hm.create(l,u,d),Hm.create(p,u,l),Hm.create(p,d,u),Hm.create(p,l,d));for(let C=0;C<3;C++){const O=(C+1)%3;y[C+1].getEdge(2).setTwin(y[0].getEdge(O)),y[C+1].getEdge(1).setTwin(y[O+1].getEdge(0))}}else{y.push(Hm.create(l,d,u),Hm.create(p,l,u),Hm.create(p,u,d),Hm.create(p,d,l));for(let C=0;C<3;C++){const O=(C+1)%3;y[C+1].getEdge(2).setTwin(y[0].getEdge((3-C)%3)),y[C+1].getEdge(0).setTwin(y[O+1].getEdge(1))}}for(let C=0;C<4;C++)this.faces.push(y[C]);for(let C=0,O=e.length;Cs&&(s=ye,W=this.faces[se])}null!==W&&this.addVertexToFace(Q,W)}}return this}reindexFaces(){const e=[];for(let t=0;tt&&(t=s,e=r),r=r.next}while(null!==r&&r.face===n);return e}}computeHorizon(e,t,n,r){let s;this.deleteFaceVertices(n),n.mark=1,s=null===t?t=n.getEdge(0):t.next;do{const a=s.twin,l=a.face;0===l.mark&&(l.distanceToPoint(e)>this.tolerance?this.computeHorizon(e,a,l,r):r.push(s)),s=s.next}while(s!==t);return this}addAdjoiningFace(e,t){const n=Hm.create(e,t.tail(),t.head());return this.faces.push(n),n.getEdge(-1).setTwin(t.twin),n.getEdge(0)}addNewFaces(e,t){this.newFaces=[];let n=null,r=null;for(let s=0;s0;)t=t.next,e--;for(;e<0;)t=t.prev,e++;return t}compute(){const e=this.edge.tail(),t=this.edge.head(),n=this.edge.next.head();return tD.set(e.point,t.point,n.point),tD.getNormal(this.normal),tD.getMidpoint(this.midpoint),this.area=tD.getArea(),this.constant=this.normal.dot(this.midpoint),this}distanceToPoint(e){return this.normal.dot(e)-this.constant}}class iF{constructor(e,t){this.vertex=e,this.prev=null,this.next=null,this.twin=null,this.face=t}head(){return this.vertex}tail(){return this.prev?this.prev.vertex:null}length(){const e=this.head(),t=this.tail();return null!==t?t.point.distanceTo(e.point):-1}lengthSquared(){const e=this.head(),t=this.tail();return null!==t?t.point.distanceToSquared(e.point):-1}setTwin(e){return this.twin=e,e.twin=this,this}}class dae{constructor(e){this.point=e,this.prev=null,this.next=null,this.face=null}}class KU{constructor(){this.head=null,this.tail=null}first(){return this.head}last(){return this.tail}clear(){return this.head=this.tail=null,this}insertBefore(e,t){return t.prev=e.prev,t.next=e,null===t.prev?this.head=t:t.prev.next=t,e.prev=t,this}insertAfter(e,t){return t.prev=e,t.next=e.next,null===t.next?this.tail=t:t.next.prev=t,e.next=t,this}append(e){return null===this.head?this.head=e:this.tail.next=e,e.prev=this.tail,e.next=null,this.tail=e,this}appendChain(e){for(null===this.head?this.head=e:this.tail.next=e,e.prev=this.tail;null!==e.next;)e=e.next;return this.tail=e,this}remove(e){return null===e.prev?this.head=e.next:e.prev.next=e.next,null===e.next?this.tail=e.prev:e.next.prev=e.prev,this}removeSubList(e,t){return null===e.prev?this.head=t.next:e.prev.next=t.next,null===t.next?this.tail=e.prev:t.next.prev=e.prev,this}isEmpty(){return null===this.head}}class fae extends Co{constructor(e=[]){super();const t=[],n=[],s=(new hae).setFromPoints(e).faces;for(let a=0;a{n=se*se,r=se/2;const ye=e.pos.clone().add(e.dir.clone().multiplyScalar(r)).add(y.clone().multiplyScalar(n/8));s=sF.get(ye),l=e.dir.clone().add(y.clone().multiplyScalar(r)).cross(s).multiplyScalar(t),u=e.dir.clone().add(l.clone().multiplyScalar(r)).cross(s).multiplyScalar(t);const Le=e.pos.clone().add(e.dir.clone().multiplyScalar(se)).add(u.clone().multiplyScalar(n/2));a=sF.get(Le),d=e.dir.clone().add(u.clone().multiplyScalar(se)).cross(a).multiplyScalar(t);const we=y.clone().sub(l).sub(u).add(d);return se*(Math.abs(we.x)+Math.abs(we.y)+Math.abs(we.z))};let O=C(e.stepSize);for(;O>2e-4;)e.stepSize*=.5,O=C(e.stepSize);const Q=e.stepSize,W=Math.pow(Q,2);return e.pos.add(e.dir.clone().multiplyScalar(Q)).add(y.clone().add(l).add(u).multiplyScalar(W/6)),e.dir.add(y.clone().add(l.clone().multiplyScalar(2)).add(u.clone().multiplyScalar(2)).add(d).multiplyScalar(Q/6)),e.dir.normalize(),e.stepSize}static propagate(e,t,n,r,s=-1,a=1e3,l=(()=>!0)){const u=new pae;u.pos=e,u.dir=t,u.p=n,u.q=r,u.maxStepSize=s;const d=[];for(;u.pathLength3e3||Math.sqrt(e.x*e.x+e.y*e.y)>1100)}static getTracksWithRungeKutta(e){const t=Object.assign({},e);for(const r of Object.keys(t))for(const s of t[r])s.pos=bS.extrapolateTrackPositions(s);return{}}static extrapolateTrackPositions(e,t=bS.extrapolationLimit){const n=e.dparams,r=n[0],a=n[2];let l=n[3];const u=n[4];let d;l<0&&(l+=Math.PI),d=0!==u?Math.abs(1/u):Number.MAX_VALUE;const p=Math.round(d*u),y=Ff.sphericalToCartesian(d,l,a),C=Ff.sphericalToCartesian(r,l,a),O=[];O.push([C.x,C.y,C.z]);const Q=y.clone();Q.normalize();const se=rF.propagate(C,Q,d,p,5,1500,t).map(ye=>[ye.pos.x,ye.pos.y,ye.pos.z]);return O.concat(se)}}class Iu{static getTracks(e){var t;const n=new vU,r=new uoe({lineWidth:2});for(const a of e){if((null===(t=a.pos)||void 0===t?void 0:t.length)>2||(a.dparams&&(a.pos=bS.extrapolateTrackPositions(a)),a.extended=!0),a.pos.length<2){console.log("Track too short, and extrapolation failed.");continue}a?.dparams&&(a?.phi||(a.phi=a.dparams[2]),a?.eta||(a.eta=Ff.thetaToEta(a.dparams[3])),a?.d0||(a.d0=a.dparams[0]),a?.z0||(a.z0=a.dparams[1]));const l=a.pos.map(y=>new Nt(y[0],y[1],y[2])),d=new ZP(l).getPoints(50),p=a.color?parseInt(a.color,16):Wp.Tracks.getHex();a.tid=n.addTrack(d,p),a.material=r}n.process();const s=new Pa(n,r);s.name="Track";for(const a of e)a.uuid=s.uuid;return s}static getTrack(e){var t;(null===(t=e.pos)||void 0===t?void 0:t.length)>2||(e.dparams&&(e.pos=bS.extrapolateTrackPositions(e)),e.extended=!0);const n=e.pos;if(n.length<2)return void console.log("Track too short, and extrapolation failed.");e?.dparams&&(e?.phi||(e.phi=e.dparams[2]),e?.eta||(e.eta=Ff.thetaToEta(e.dparams[3])),e?.d0||(e.d0=e.dparams[0]),e?.z0||(e.z0=e.dparams[1]));const r=e.color?parseInt(e.color,16):Wp.Tracks.getHex(),s=[];for(let W=0;W0))return console.log("No hits! Aborting from getHits."),new Bc;{const p=e[0];Array.isArray(p)?(a=!0,t={pos:e}):(t=e,"type"in p&&(r=p.type))}("Line"===r||"Box"===r)&&(s=6);const l=e.length*s;a&&(length=l);const u=new Float32Array(l);let d=0;for(const p of e)for(let y=0;yn&&p.setLength(p.length()*n/Math.abs(p.z));const y=p.x*p.x+p.y*p.y,C=t*t;y>C&&p.setLength(p.length()*Math.sqrt(C)/Math.sqrt(y))}return p}static getCaloCube(e,t=30,n=30){var r,s,a;const l=null!==(r=e.side)&&void 0!==r?r:t;let u=null!==(s=e.length)&&void 0!==s?s:n;u`${i} > ${e} > ${t}`;class My{constructor(){this.labelsObject={},this.loadingManager=new Eb,this.stateManager=new Nm}buildEventData(e,t,n,r){this.graphicsLibrary=t,this.ui=n,this.eventData=e,this.loadObjectTypes(e);const s=e["event number"]?e["event number"]:e.eventNumber,a=e["run number"]?e["run number"]:e.runNumber;r.add("Event#"+s+" from run#"+a,"Loaded"),this.stateManager.eventMetadata={runNumber:a,eventNumber:s}}getEventsList(e){const t=[];for(const n in e)null!==e[n]&&t.push(n);return t}getCollections(){if(!this.eventData)return null;const e=[];for(const t in this.eventData)if(this.eventData[t]&&"object"==typeof this.eventData[t])for(const n in this.eventData[t])e.push(n);return e}getCollection(e){if(!this.eventData)return null;for(const t in this.eventData)if(this.eventData[t])for(const n in this.eventData[t])if(n===e)return this.eventData[t][n]}loadObjectTypes(e){const t=parseFloat(Math.PI.toFixed(2));if(e.Tracks){const n=[new Tl("phi",-t,t,.01),new Tl("eta",-4,4,.1),new Tl("chi2",0,100),new Tl("dof",0,100),new Tl("pT",0,5e4,.1),new Tl("z0",-30,30,.1),new Tl("d0",-30,30,.1)];this.addObjectType(e.Tracks,Iu.getTrack,"Tracks",!1,n)}if(e.Jets){const n=[new Tl("phi",-t,t,.01),new Tl("eta",-5,5,.1),new Tl("energy",0,6e5,100)],s=this.addScaleOptions("jetsScale","Jets Scale",a=>{this.graphicsLibrary.getSceneManager().scaleJets(a)});this.addObjectType(e.Jets,Iu.getJet,"Jets",!1,n,s)}if(e.Hits&&this.addObjectType(e.Hits,Iu.getHits,"Hits",!0),e.CaloClusters){const n=[new Tl("phi",-t,t,.01),new Tl("eta",-5,5,.1),new Tl("energy",0,1e4)],s=this.addScaleOptions("caloClustersScale","CaloClusters Scale",a=>{this.graphicsLibrary.getSceneManager().scaleChildObjects("CaloClusters",a,"z")});this.addObjectType(e.CaloClusters,Iu.getCluster,"CaloClusters",!1,n,s)}if(e.CaloCells){const n=[new Tl("phi",-t,t,.01),new Tl("eta",-5,5,.1),new Tl("energy",0,1e4)],s=this.addScaleOptions("caloCellsScale","CaloCells Scale",a=>{this.graphicsLibrary.getSceneManager().scaleChildObjects("CaloCells",a,"z")});this.addObjectType(e.CaloCells,Iu.getCaloCell,"CaloCells",!1,n,s)}if(e.PlanarCaloCells){const n=[new Tl("energy",0,1e4)],s=this.addScaleOptions("planarCaloCellsScale","PlanarCaloCells Scale",l=>{this.graphicsLibrary.getSceneManager().scaleChildObjects("PlanarCaloCells",l,"z")}),a={};for(const l in e.PlanarCaloCells){const u=e.PlanarCaloCells[l],d=u.plane,p=new Nt(...d.slice(0,3)).normalize();u.cells.forEach(y=>y.plane=[...p.toArray(),d[3]]),a[l]=u.cells}this.addObjectType(a,Iu.getPlanarCaloCell,"PlanarCaloCells",!1,n,s)}if(e.IrregularCaloCells){const n=[new Tl("layer",0,10),new Tl("energy",0,1e4)],s=this.addScaleOptions("IrregularCaloCellsScale","IrregularCaloCells Scale",a=>{this.graphicsLibrary.getSceneManager().scaleChildObjects("IrregularCaloCells",a,"z")});this.addObjectType(e.IrregularCaloCells,Iu.getIrregularCaloCell,"IrregularCaloCells",!1,n,s)}if(e.Muons){const n=[new Tl("phi",-t,t,.01),new Tl("eta",-4,4,.1),new Tl("energy",0,1e4),new Tl("pT",0,5e4)];this.addObjectType(e.Muons,this.getCompound,"Muons",!1,n)}if(e.Photons){const n=[new Tl("phi",-t,t,.01),new Tl("eta",-4,4,.1),new Tl("energy",0,1e4),new Tl("pT",0,5e4)];this.addObjectType(e.Photons,this.getCompound,"Photons",!1,n)}if(e.Electrons){const n=[new Tl("phi",-t,t,.01),new Tl("eta",-4,4,.1),new Tl("energy",0,1e4),new Tl("pT",0,5e4)];this.addObjectType(e.Electrons,this.getCompound,"Electrons",!1,n)}if(e.Vertices){const n=[new Tl("vertexType",0,5)],s=this.addScaleOptions("verticesScale","Vertices Scale",a=>{this.graphicsLibrary.getSceneManager().scaleChildObjects("Vertices",a)});this.addObjectType(e.Vertices,Iu.getVertex,"Vertices",!1,n,s)}e.MissingEnergy&&this.addObjectType(e.MissingEnergy,Iu.getMissingEnergy,"MissingEnergy",!1,[],(r,s)=>{const a=l=>{this.graphicsLibrary.getSceneManager().scaleChildObjects("MissingEnergy",l)};r&&r.add({jetsScale:100},"jetsScale",1,200).name("Size (%)").onChange(a),s&&s.addConfig("slider",{label:"Size (%)",value:100,min:1,max:200,allowCustomValue:!0,onChange:a})})}addObjectType(e,t,n,r=!1,s,a){var l,u;const d=this.graphicsLibrary.addEventDataTypeGroup(n),p=this.getObjectTypeCollections(e);this.ui.addEventDataTypeFolder(n);for(const O of p){const Q=e[O];console.log(`${n} collection ${O} has ${Q.length} constituents.`),0!=Q.length?(this.addCollection(Q,O,t,d,r),s=s?.filter(W=>W.field in Q[0]),this.ui.addCollection(n,O,s)):console.log("Skipping")}a?.(null===(l=this.ui.getUIMenus().find(O=>O instanceof WU))||void 0===l?void 0:l.getEventDataTypeFolder(n),null===(u=this.ui.getUIMenus().find(O=>O instanceof tF))||void 0===u?void 0:u.getEventDataTypeFolder(n))}addCollection(e,t,n,r,s){const a=new Xu;if(a.name=t,s){const l=n.bind(this)(e);l&&a.add(l)}else for(const l of e){const u=n.bind(this)(l);u&&a.add(u)}r.add(a)}getObjectTypeCollections(e){const t=[];for(const n in e)null!==e[n]&&t.push(n);return t}getCompound(e){const t=new Xu;if("LinkedClusters"in e)for(const r of e.LinkedClusters){const s=r.split(":")[0],a=r.split(":")[1];if(s&&a&&this.eventData.CaloClusters&&this.eventData.CaloClusters[s]){const l=this.eventData.CaloClusters[s][a];if(l){const u=Iu.getCluster(l);t.add(u)}}}let n=!1;if("LinkedTracks"in e)for(const r of e.LinkedTracks){const s=r.split(":")[0],a=r.split(":")[1];if(s&&a&&this.eventData.Tracks&&this.eventData.Tracks[s]){const l=this.eventData.Tracks[s][a];if(l){const u=Iu.getTrack(l);u?(t.add(u),n=!0):console.log("WARNING: failed to get a track back.")}}}if(!n){new Nt(0,0,0);const s=Ff.etaToTheta(e.eta),a=e.pt/Math.cos(Math.PI/2-s);let l=0;"pdgId"in e&&(l=e.pdgId>0?1:-1);const d=Iu.getTrack({dparams:[0,0,e.phi,s,l/a]});d?t.add(d):console.log("WARNING: failed to get a track back.")}return e.uuid=t.uuid,t.name="CompoundObj",t}getEventMetadata(){const e=[],t=[[{keys:["runNumber","run number"],label:"Run"},{keys:["eventNumber","event number"],label:"Event"},{keys:["ls"],label:"LS"},{keys:["lumiBlock"],label:"LumiBlock"}],[{keys:["time"],label:"Data recorded"}]],n=Object.keys(this.eventData);for(const r of t){const s={};for(const a of r)for(const l of a.keys)if(n.includes(l)&&l in this.eventData){s[a.label]=this.eventData[l];break}Object.keys(s).length>0&&e.push({label:Object.keys(s).join(" / "),value:Object.values(s).join(" / ")})}return e}addLabelToEventObject(e,t,n){var r,s;for(const a in this.eventData)if(null!==(s=null===(r=this.eventData)||void 0===r?void 0:r[a])&&void 0!==s&&s[t])return this.labelsObject[a]=this.labelsObject[a]||{},this.labelsObject[a][t]=this.labelsObject[a][t]||{},this.labelsObject[a][t][n]=e,YU(a,t,n)}getLabelsObject(){return this.labelsObject}addScaleOptions(e,t,n){return(r,s)=>{r&&r.add({[e]:1},e,.001,100).name(t).onChange(n),s&&s.addConfig("slider",{label:t,value:1,min:.001,step:.01,max:100,allowCustomValue:!0,onChange:n})}}}class xS extends My{constructor(){super(),this.data={}}process(e){console.log("Processing JiveXML event data"),this.data=e}getEventData(){const n=(new DOMParser).parseFromString(this.data,"text/xml").getElementsByTagName("Event")[0],r={eventNumber:n.getAttribute("eventNumber"),runNumber:n.getAttribute("runNumber"),lumiBlock:n.getAttribute("lumiBlock"),time:n.getAttribute("dateTime"),Hits:void 0,Tracks:{},Jets:{},CaloClusters:{},CaloCells:{},PlanarCaloCells:{},Vertices:{},Electrons:{},Muons:{},Photons:{},MissingEnergy:{}};return this.getPixelClusters(n,r),this.getSCTClusters(n,r),this.getTRT_DriftCircles(n,r),this.getMuonPRD(n,"MDT",r),this.getRPC(n,r),this.getMuonPRD(n,"TGC",r),this.getMuonPRD(n,"CSCD",r),this.getMuonPRD(n,"MM",r),this.getMuonPRD(n,"STGC",r),this.getTracks(n,r),this.getJets(n,r),this.getCaloClusters(n,r),this.getCaloCells(n,"LAr",r),this.getCaloCells(n,"HEC",r),this.getCaloCells(n,"Tile",r),this.getVertices(n,r),this.getMissingEnergy(n,r),this.getElectrons(n,r),this.getMuons(n,r),this.getPhotons(n,r),r}getNumberArrayFromHTML(e,t){let n=[];const r=e.getElementsByTagName(t);return r.length&&(n=r[0].innerHTML.replace(/\r\n|\n|\r/gm," ").trim().split(" ").map(Number)),n}getStringArrayFromHTML(e,t){return e.getElementsByTagName(t)[0].innerHTML.replace(/\r\n|\n|\r/gm," ").trim().split(" ").map(String)}getPositionOfHit(e,t){for(const n in t.Hits)for(const r of t.Hits[n])if(null==r)console.log("Empty hit");else if("id"in r&&r.id==e)return[!0,r.pos[0],r.pos[1],r.pos[2]];return[!1,0,0,0]}getTracks(e,t){const n=e.getElementsByTagName("Track"),r=Array.from(n),s={};for(const a of r){let l=a.getAttribute("storeGateKey");"Tracks"===l&&(l="Tracks_");const u=Number(a.getAttribute("count")),d=[];let y,C,O,Q;if(0===a.getElementsByTagName("numPolyline").length)console.log("WARNING the track collection "+l+" has no line information. Will rely on Phoenix to extrapolate.");else{Q=this.getNumberArrayFromHTML(a,"numPolyline");const Hn=a.getElementsByTagName("polylineX");Hn.length>0?(y=Hn[0].innerHTML.replace(/\r\n|\n|\r/gm," ").trim().split(" ").map(Number),C=this.getNumberArrayFromHTML(a,"polylineY"),O=this.getNumberArrayFromHTML(a,"polylineZ")):(Q=null,y=null,C=null,O=null)}const W=this.getNumberArrayFromHTML(a,"chi2"),se=this.getNumberArrayFromHTML(a,"numDoF"),ye=this.getNumberArrayFromHTML(a,"pt"),Le=this.getNumberArrayFromHTML(a,"d0"),we=this.getNumberArrayFromHTML(a,"z0"),He=this.getNumberArrayFromHTML(a,"phi0"),gt=this.getNumberArrayFromHTML(a,"cotTheta");let dt;this.getNumberArrayFromHTML(a,"hits"),this.getNumberArrayFromHTML(a,"numHits"),(u!=ye.length||u!=Le.length||u!=we.length||u!=gt.length)&&console.log("ERROR: Wrong number of some track variables. Corrupted JiveXML?"),a.getElementsByTagName("trackAuthor").length&&(dt=this.getNumberArrayFromHTML(a,"trackAuthor"));let Ut=0;Q&&Q.length!=u&&console.log("numPolyline ",Q.length,"numOfTracks",u);for(let Hn=0;Hn=Hn&&(Tn.chi2=W[Hn]),se.length>=Hn&&(Tn.dof=se[Hn]),dt?.length>=Hn&&(Tn.author=dt[Hn]);let yi=Math.atan(1/gt[Hn]);Tn.pT=1e3*Math.abs(ye[Hn]);const qn=Tn.pT/Math.sin(yi);Tn.dparams=[Le[Hn],we[Hn],He[Hn],yi,1/qn],Tn.phi=He[Hn],yi<0&&(yi+=Math.PI),Tn.phi>Math.PI?Tn.phi-=2*Math.PI:Tn.phi<-Math.PI&&(Tn.phi+=2*Math.PI),Ff.anglesAreSane(yi,Tn.phi)||(s["Improper angles"]++,Tn.badtrack.push("Improper angles"),gi=!1),Tn.eta=Ff.thetaToEta(yi),Number.isNaN(Tn.eta)&&(Tn.badtrack.push("Invalid eta"),gi=!1);const xi=[];let zi=0,Ki=0,cs=0,oi=0,fr=0;if(Q){(Ut+Q[Hn]>y.length||Ut+Q[Hn]>C.length||Ut+Q[Hn]>O.length)&&console.log("ERROR: not enough points left for this track. Corrupted JiveXML?");for(let hr=0;hr0&&console.log(s[a]+' tracks had "'+a+'" and were marked as bad.')}getPixelClusters(e,t){if(t.Hits={},0===e.getElementsByTagName("PixCluster").length)return;const n=e.getElementsByTagName("PixCluster")[0],r=Number(n.getAttribute("count")),s=this.getNumberArrayFromHTML(n,"id"),a=this.getNumberArrayFromHTML(n,"x0"),l=this.getNumberArrayFromHTML(n,"y0"),u=this.getNumberArrayFromHTML(n,"z0"),d=this.getNumberArrayFromHTML(n,"eloss");t.Hits.Pixel=[];for(let p=0;p280?480:640,se=1030;Q.pos=[Math.cos(u[O])*W,Math.sin(u[O])*W,10*d[O],Math.cos(u[O])*se,Math.sin(u[O])*se,10*d[O]]}Q.id=a[O],Q.driftR=s[O],Q.noise=l[O],Q.threshold=y[O],Q.timeOverThreshold=C[O],t.Hits.TRT.push(Q)}}getMuonPRD(e,t,n){if(0===e.getElementsByTagName(t).length)return;const r=e.getElementsByTagName(t)[0];"CSCD"==t&&(t="CSC");const s=Number(r.getAttribute("count")),a=this.getNumberArrayFromHTML(r,"x"),l=this.getNumberArrayFromHTML(r,"y"),u=this.getNumberArrayFromHTML(r,"z"),d=this.getNumberArrayFromHTML(r,"length"),p=this.getNumberArrayFromHTML(r,"id"),y=this.getStringArrayFromHTML(r,"identifier");n.Hits[t]=[];for(let C=0;CW.length&&console.log("Error! TrackIndex exceeds maximum number of track indices."),He.push(W[ye]);se.push({x:l[Le],y:u[Le],z:d[Le],chi2:p[Le],primVxCand:y[Le],vertexType:C[Le],linkedTracks:He,linkedTrackCollection:Q[Le]})}t.Vertices[s.getAttribute("storeGateKey")]=se}}getMuons(e,t){const n=e.getElementsByTagName("Muon"),r=Array.from(n);for(const s of r){const a=Number(s.getAttribute("count")),l=[];for(let u=0;ufunction(i,e,t,n){return new(t||(t=Promise))(function(s,a){function l(p){try{d(n.next(p))}catch(y){a(y)}}function u(p){try{d(n.throw(p))}catch(y){a(y)}}function d(p){p.done?s(p.value):function r(s){return s instanceof t?s:new t(function(a){a(s)})}(p.value).then(l,u)}d((n=n.apply(i,e||[])).next())})}(void 0,void 0,void 0,function*(){const e=new(oF()),t={};yield e.loadAsync(i);for(const n in e.files){const r=yield e.file(n).async("string");t[n]=r}return t});var aF=function(i,e,t,n){return new(t||(t=Promise))(function(s,a){function l(p){try{d(n.next(p))}catch(y){a(y)}}function u(p){try{d(n.throw(p))}catch(y){a(y)}}function d(p){p.done?s(p.value):function r(s){return s instanceof t?s:new t(function(a){a(s)})}(p.value).then(l,u)}d((n=n.apply(i,e||[])).next())})};const gae={file:"",type:"",config:"",hideWidgets:!1,embed:!1};class _ae{constructor(e,t){this.eventDisplay=e,this.configuration=t,this.urlOptions=new URLSearchParams(window.location.href.substr(window.location.href.lastIndexOf("?")))}applyOptions(){var e,t;this.applyEventOptions(null===(e=this.configuration.defaultEventFile)||void 0===e?void 0:e.eventFile,null===(t=this.configuration.defaultEventFile)||void 0===t?void 0:t.eventType),this.applyHideWidgetsOptions(),this.applyEmbedOption()}applyEventOptions(e,t){if(!("fetch"in window))return;let n,r;(!this.urlOptions.get("file")&&this.urlOptions.get("type")||this.urlOptions.get("file")&&!this.urlOptions.get("type"))&&(console.log("WARNING - if you set one of type or file, then you need to set both!"),console.log("WARNING - reverting to defaults!")),this.urlOptions.get("file")&&this.urlOptions.get("type")?(console.log("Setting and config from urlOptions"),n=this.urlOptions.get("file"),r=this.urlOptions.get("type").toLowerCase()):(console.log("Setting and config from defaults"),n=e,r=t),console.log("Loading ",n,"of type",r);const s=()=>{this.urlOptions.get("config")&&(this.eventDisplay.getLoadingManager().addLoadableItem("url_config"),fetch(this.urlOptions.get("config")).then(l=>l.json()).then(l=>{(new Nm).loadStateFromJSON(l)}).finally(()=>{this.eventDisplay.getLoadingManager().itemLoaded("url_config")}))};n&&r?(this.eventDisplay.getLoadingManager().addLoadableItem("url_event"),(l=>"jivexml"===r?(console.log("Opening JiveXML"),this.handleJiveXMLEvent(l)):"zip"===r?(console.log("Opening zip file"),this.handleZipFileEvents(l)):this.handleJSONEvent(l))(n).catch(l=>{this.eventDisplay.getInfoLogger().add("Could not find the file specified in URL.","Error"),console.error("Could not find the file specified in URL.",l)}).finally(()=>{s(),this.eventDisplay.getLoadingManager().itemLoaded("url_event")})):s()}handleJiveXMLEvent(e){return aF(this,void 0,void 0,function*(){const t=yield(yield fetch(e)).text(),n=new xS;this.configuration.eventDataLoader=n,n.process(t);const r=n.getEventData();this.eventDisplay.buildEventDataFromJSON(r)})}handleJSONEvent(e){return aF(this,void 0,void 0,function*(){const t=yield(yield fetch(e)).json();this.configuration.eventDataLoader=new My,this.eventDisplay.parsePhoenixEvents(t)})}handleZipFileEvents(e){return aF(this,void 0,void 0,function*(){const t=yield(yield fetch(e)).arrayBuffer(),n={};let r;try{r=yield ZU(t)}catch(a){return console.error("Error while reading zip",a),void this.eventDisplay.getInfoLogger().add("Could not read zip file","Error")}Object.keys(r).filter(a=>a.endsWith(".json")).forEach(a=>{Object.assign(n,JSON.parse(r[a]))});const s=new xS;Object.keys(r).filter(a=>a.endsWith(".xml")||a.startsWith("JiveXML")).forEach(a=>{s.process(r[a]);const l=s.getEventData();Object.assign(n,{[a]:l})}),this.eventDisplay.parsePhoenixEvents(n)})}applyHideWidgetsOptions(){this.hideIdsWithURLOption({hideWidgets:["mainLogo","uiMenu","experimentInfo","phoenixMenu","statsElement","gui"]})}applyEmbedOption(){var e;"true"===this.urlOptions.get("embed")&&(this.hideIdsWithURLOption({embed:["mainLogo","uiMenu","experimentInfo","phoenixMenu","statsElement","gui"]}),null===(e=document.getElementById("embedMenu"))||void 0===e||e.style.setProperty("display","block"))}hideIdsWithURLOption(e){Object.entries(e).forEach(([t,n])=>{"true"===this.urlOptions.get(t)&&n.forEach(r=>{var s;null===(s=document.getElementById(r))||void 0===s||s.style.setProperty("display","none")})})}getURLOptions(){return this.urlOptions}}var Db=function(i,e,t,n){return new(t||(t=Promise))(function(s,a){function l(p){try{d(n.next(p))}catch(y){a(y)}}function u(p){try{d(n.throw(p))}catch(y){a(y)}}function d(p){p.done?s(p.value):function r(s){return s instanceof t?s:new t(function(a){a(s)})}(p.value).then(l,u)}d((n=n.apply(i,e||[])).next())})};class yae{constructor(e){this.onEventsChange=[],this.onDisplayedEventChange=[],this.loadingManager=new Eb,this.infoLogger=new lae,this.graphicsLibrary=new koe(this.infoLogger),this.ui=new aae(this.graphicsLibrary),e&&this.init(e)}init(e){this.configuration=e,this.graphicsLibrary.init(e),this.ui.init(e),this.getStateManager().setEventDisplay(this),this.graphicsLibrary.setAnimationLoop(()=>{this.ui.updateUI()}),this.urlOptionsManager=new _ae(this,e),!1!==e.allowUrlOptions&&this.urlOptionsManager.applyOptions(),this.enableEventDisplayConsole(),this.enableKeyboardControls()}makeScreenShot(e,t,n="Stretch"){this.graphicsLibrary.makeScreenShot(e,t,n)}initXR(e,t){this.graphicsLibrary.initXRSession(e,t)}endXR(e){this.graphicsLibrary.endXRSession(e)}parsePhoenixEvents(e){this.eventsData=e,typeof this.configuration.eventDataLoader>"u"&&(this.configuration.eventDataLoader=new My);const t=this.configuration.eventDataLoader.getEventsList(e);return this.loadEvent(t[0]),this.onEventsChange.forEach(n=>n(t)),t}buildEventDataFromJSON(e){this.resetLabels(),this.ui.addEventDataFolder(),this.ui.addLabelsFolder(),this.graphicsLibrary.clearEventData(),this.configuration.eventDataLoader.buildEventData(e,this.graphicsLibrary,this.ui,this.infoLogger),this.onDisplayedEventChange.forEach(t=>t(e)),this.ui.loadEventFolderPhoenixMenuState()}loadEvent(e){const t=this.eventsData[e];t&&this.buildEventDataFromJSON(t)}getThreeManager(){return this.graphicsLibrary}getUIManager(){return this.ui}getInfoLogger(){return this.infoLogger}getLoadingManager(){return this.loadingManager}getStateManager(){return this.stateManager||(this.stateManager=new Nm),this.stateManager}getURLOptionsManager(){return this.urlOptionsManager}loadOBJGeometry(e,t,n,r,s,a=!0,l=!0){return Db(this,void 0,void 0,function*(){this.loadingManager.addLoadableItem(`obj_geom_${t}`);const{object:u}=yield this.graphicsLibrary.loadOBJGeometry(e,t,n,s,a,l);this.ui.addGeometry(u,r),this.loadingManager.itemLoaded(`obj_geom_${t}`),this.infoLogger.add(t,"Loaded OBJ geometry")})}parseOBJGeometry(e,t,n,r=!0){this.loadingManager.addLoadableItem(`parse_obj_${t}`);const{object:s}=this.graphicsLibrary.parseOBJGeometry(e,t,r);this.ui.addGeometry(s,n),this.loadingManager.itemLoaded(`parse_obj_${t}`)}exportToOBJ(){this.graphicsLibrary.exportSceneToOBJ(),this.infoLogger.add("Exported scene to OBJ")}parsePhoenixDisplay(e){return Db(this,void 0,void 0,function*(){const t=JSON.parse(e);t.sceneConfiguration&&t.scene&&(this.ui.addEventDataFolder(),this.ui.addLabelsFolder(),this.graphicsLibrary.clearEventData(),this.loadSceneConfiguration(t.sceneConfiguration),this.loadingManager.addLoadableItem(`parse_phnx_${name}`),yield this.graphicsLibrary.parsePhnxScene(t.scene),this.loadingManager.itemLoaded(`parse_phnx_${name}`))})}exportPhoenixDisplay(){this.graphicsLibrary.exportPhoenixScene()}parseGLTFGeometry(e,t){return Db(this,void 0,void 0,function*(){this.loadingManager.addLoadableItem(`parse_gltf_${t}`);const n=yield this.graphicsLibrary.parseGLTFGeometry(e,t);for(const{object:r}of n)this.ui.addGeometry(r);this.loadingManager.itemLoaded(`parse_gltf_${t}`)})}loadGLTFGeometry(e,t,n,r,s=!0){return Db(this,void 0,void 0,function*(){this.loadingManager.addLoadableItem(`gltf_geom_${t}`);const a=yield this.graphicsLibrary.loadGLTFGeometry(e,t,n,r,s);for(const{object:l,menuNodeName:u}of a)this.ui.addGeometry(l,u);this.loadingManager.itemLoaded(`gltf_geom_${t}`)})}loadJSONGeometry(e,t,n,r,s,a=!0){return Db(this,void 0,void 0,function*(){this.loadingManager.addLoadableItem(`json_geom_${t}`);const{object:l}=yield this.graphicsLibrary.loadJSONGeometry(e,t,r,s,a);this.ui.addGeometry(l,n),this.loadingManager.itemLoaded(`json_geom_${t}`),this.infoLogger.add(t,"Loaded JSON geometry")})}loadRootJSONGeometry(e,t,n,r,s,a=!0){return Db(this,void 0,void 0,function*(){this.loadingManager.addLoadableItem("root_json_geom");const l=yield(0,n7.httpRequest)(e,"object");yield this.loadJSONGeometry((0,i7.build)(l,{dflt_colors:!0}).toJSON(),t,n,r,s,a),this.loadingManager.itemLoaded("root_json_geom")})}loadRootGeometry(e,t,n,r,s,a,l=!0){return Db(this,void 0,void 0,function*(){this.loadingManager.addLoadableItem("root_geom"),n7.settings.UseStamp=!1;const d=yield(yield(0,UY.ZB)(e)).readObject(t);yield this.loadJSONGeometry((0,i7.build)(d,{dflt_colors:!0}).toJSON(),n,r,s,a,l),this.loadingManager.itemLoaded("root_geom")})}buildGeometryFromParameters(e){this.graphicsLibrary.addGeometryFromParameters(e)}zoomTo(e,t){this.graphicsLibrary.zoomTo(e,t)}loadSceneConfiguration(e){for(const t of Object.keys(e.eventData)){this.ui.addEventDataTypeFolder(t);const n=e.eventData[t];for(const r of n)this.ui.addCollection(t,r)}for(const t of e.geometries)this.ui.addGeometry(t,"#ffffff")}getCollection(e){return this.configuration.eventDataLoader.getCollection(e)}getCollections(){return this.configuration.eventDataLoader.getCollections()}listenToDisplayedEventChange(e){this.onDisplayedEventChange.push(e)}listenToLoadedEventsChange(e){this.onEventsChange.push(e)}getEventMetadata(){return this.configuration.eventDataLoader.getEventMetadata()}enableEventDisplayConsole(){window.EventDisplay={loadGLTFGeometry:(e,t)=>{this.loadGLTFGeometry(e,t)},loadOBJGeometry:(e,t,n,r,s)=>{this.loadOBJGeometry(e,t,n,r,s)},loadJSONGeometry:(e,t,n,r,s,a=!0)=>{this.loadJSONGeometry(e,t,n,r,s,a)},buildGeometryFromParameters:e=>this.buildGeometryFromParameters(e),scene:this.getThreeManager().getSceneManager().getScene()}}setOverlayRenderer(e){this.graphicsLibrary.setOverlayRenderer(e)}allowSelection(e){this.graphicsLibrary.setSelectedObjectDisplay(e)}enableSelecting(e){this.graphicsLibrary.enableSelecting(e)}fixOverlayView(e){this.graphicsLibrary.fixOverlayView(e)}getActiveObjectId(){return this.graphicsLibrary.getActiveObjectId()}lookAtObject(e){this.graphicsLibrary.lookAtObject(e),this.graphicsLibrary.highlightObject(e)}highlightObject(e){this.graphicsLibrary.highlightObject(e)}enableKeyboardControls(){this.ui.enableKeyboardControls(),this.graphicsLibrary.enableKeyboardControls()}animateThroughEvent(e,t,n){this.graphicsLibrary.animateThroughEvent(e,t,n)}animatePreset(e,t){this.graphicsLibrary.animatePreset(e,t)}animateEventWithCollision(e,t){this.graphicsLibrary.animateEventWithCollision(e,t)}animateClippingWithCollision(e,t){this.graphicsLibrary.animateClippingWithCollision(e,t)}addLabelToObject(e,t,n,r){const s=this.configuration.eventDataLoader.addLabelToEventObject(e,t,n);e?(this.ui.addLabel(s),this.graphicsLibrary.addLabelToObject(e,r,s)):this.ui.removeLabel(s,!0)}resetLabels(){const e=this.configuration.eventDataLoader.getLabelsObject();for(const t in e)for(const n in e[t])for(const r in e[t][n]){const s=YU(t,n,r);this.ui.removeLabel(s,!0),delete e[t][n][r]}}}class g2{constructor(e,t,n,r,s,a){this.toggleState=!0,this.children=[],this.configs=[],this.nodeLevel=0,this.childrenToggleState={},this.childrenActive=!1,this.configActive=!1,this.name=e,this.icon=t,this.onToggle=n,r&&(this.children=r),s&&(this.configs=s),a&&(this.parent=a)}addChild(e,t,n){const r=new g2(e,n,t);return r.parent=this,r.nodeLevel=this.nodeLevel+1,this.children.push(r),r}removeChild(e){const t=this.children.indexOf(e);return this.children.splice(t,1),this}remove(){this.parent?this.parent.removeChild(this):console.error("Cannot delete root node of phoenix menu. Set it to undefined/null instead.")}truncate(){this.children=[]}addConfig(e,t){const n=this.configs.push(Object.assign({type:e},t));return this.applyConfigState(this.configs[n-1]),this}toggleSelfAndDescendants(e){var t;null===(t=this.onToggle)||void 0===t||t.call(this,e),this.toggleState=e;for(const n of this.children)e?(n.toggleState=this.childrenToggleState[n.name],n.toggleSelfAndDescendants(n.toggleState)):(this.childrenToggleState[n.name]=n.toggleState,n.toggleSelfAndDescendants(e))}applyConfigState(e){var t,n,r,s,a,l;"checkbox"===e.type&&e?.isChecked?null===(t=e.onChange)||void 0===t||t.call(e,e?.isChecked):"color"===e.type&&e?.color&&!e.group?null===(n=e.onChange)||void 0===n||n.call(e,e?.color):"slider"===e.type&&e?.value?null===(r=e.onChange)||void 0===r||r.call(e,e?.value):"rangeSlider"===e.type&&void 0!==e?.value&&(null===(s=e.onChange)||void 0===s||s.call(e,{value:e?.value,highValue:e?.highValue}),null===(a=e.setEnableMin)||void 0===a||a.call(e,e?.enableMin),null===(l=e.setEnableMax)||void 0===l||l.call(e,e?.enableMax))}getNodeState(){const e={};e.name=this.name,e.nodeLevel=this.nodeLevel,e.toggleState=this.toggleState,e.childrenActive=this.childrenActive,e.configs=this.configs,e.children=[];for(const t of this.children)e.children.push(t.getNodeState());return e}loadStateFromJSON(e){var t;let n;n="string"==typeof e?JSON.parse(e):e,this.childrenActive=n.childrenActive,this.toggleState=n.toggleState,void 0!==this.toggleState&&(null===(t=this.onToggle)||void 0===t||t.call(this,this.toggleState));for(const r of n.configs){const s=this.configs.find(a=>a.type===r.type&&a.label===r.label);if(s){for(const a in r)s[a]=r[a];this.applyConfigState(s)}}for(const r of n.children){const s=this.children.filter(a=>a.name===r.name&&a.nodeLevel===r.nodeLevel)[0];s&&s.loadStateFromJSON(r)}}findInTree(e){if(this.name===e)return this;for(const t of this.children){const n=t.findInTree(e);if(n)return n}}findInTreeOrCreate(e){let t=this;return e.split(">").forEach(n=>{n=n.trim();const r=t.findInTree(n);t=r||t.addChild(n,()=>{})}),t}}class vae{static getMuonChamber(e){var t;let n=[];const r=(...p)=>{n=n.concat(...p.map(y=>e[y]))};r("front_1","front_2","front_3"),r("front_3","front_4","front_1"),r("back_1","back_2","back_3"),r("back_3","back_4","back_1"),r("back_1","back_2","front_2"),r("front_2","front_1","back_1"),r("back_4","back_3","front_3"),r("front_3","front_4","back_4"),r("front_1","front_4","back_4"),r("back_4","back_1","front_1"),r("front_2","back_2","back_3"),r("back_3","front_3","front_2");const s=new Co;s.attributes.position=new va(new Float32Array(n),3),s.computeVertexNormals();const a=new Pa(s,new xh({color:null!==(t=e.color)&&void 0!==t?t:Wp.MuonChambers,transparent:!0,opacity:.1,side:2}));a.userData=Object.assign({},e),a.name="MuonChamber";const l=new u9(s),u=new UA(l,new su({color:16777215,transparent:!0,opacity:.7})),d=new Xu;return d.add(a),d.add(u),e.uuid=a.uuid,d}}class JU extends My{constructor(){super(),this.geometryScale=1e3,this.data={}}loadObjectTypes(e){super.loadObjectTypes(e),e.MuonChambers&&this.addObjectType(e.MuonChambers,vae.getMuonChamber,"MuonChambers")}readIgArchive(e,t,n){this.loadingManager.addLoadableItem("ig_archive");const r=new(oF()),s=[],a=l=>{r.loadAsync(l).then(()=>{let u=Object.keys(r.files);n&&(u=u.filter(p=>p.includes(n)));let d=1;for(const p of u)p.toLowerCase().startsWith("events")?r.file(p).async("string").then(y=>{y=y.replace(/'/g,'"').replace(/\(/g,"[").replace(/\)/g,"]").replace(/nan/g,"0");const C=JSON.parse(y);C.eventPath=p,s.push(C),d===u.length&&(t(s),this.loadingManager.itemLoaded("ig_archive")),d++}):(d===u.length&&(t(s),this.loadingManager.itemLoaded("ig_archive")),d++)})};e instanceof File?a(e):fetch(e).then(l=>l.arrayBuffer()).then(l=>{a(l)})}loadEventDataFromIg(e,t,n){this.readIgArchive(e,r=>{n(r[0])},t)}getEventData(){var e,t,n;const r=null===(n=null===(t=null===(e=this.data)||void 0===e?void 0:e.Collections)||void 0===t?void 0:t.Event_V2)||void 0===n?void 0:n[0],s={runNumber:r?.[0],eventNumber:r?.[1],ls:r?.[2],time:r?.[5],Hits:{},Tracks:{},Jets:{},CaloClusters:{},MuonChambers:{}};s.Hits=this.getTrackingClusters(s.Hits),s.Tracks=this.getTracks(),s.Jets=this.getJets(),s.CaloClusters=this.getCaloClusters(),s.MuonChambers=this.getMuonChambers();for(const a of["Hits","Tracks","Jets","CaloClusters","MuonChambers"])0===Object.keys(s[a]).length&&(s[a]=void 0);return s}getAllEventsData(e){const t={};for(const n of e)this.data=n,t[n.eventPath]=this.getEventData();return t}getTrackingClusters(e){const n=this.getObjectCollections(["TrackingRecHits_V1","SiStripClusters_V1","SiPixelClusters_V1","CSCLCTDigis_V1"],r=>{r.pos&&(r.pos=r.pos.map(s=>s*this.geometryScale))});return Object.assign(e,n),e}getCaloClusters(){return this.getObjectCollections(["SuperClusters_V1"],n=>{n.energy&&(n.energy*=this.geometryScale)})}getJets(){let e={};const t=Object.keys(this.data.Collections).filter(r=>r.toLowerCase().includes("jets"));return e=this.getObjectCollections(t,r=>{for(const s of["et","energy"])if(r[s]){r[s]*=this.geometryScale;break}},[{attribute:"et",min:10},{attribute:"energy",min:10}]),e}getMuonChambers(){return this.getObjectCollections(["MatchingCSCs_V1","MuonChambers_V1"],n=>{for(const r of Object.keys(n))(r.startsWith("front")||r.startsWith("back"))&&(n[r]=n[r].map(s=>s*this.geometryScale))})}getObjectCollections(e,t,n){const r={};e=e.filter(s=>this.data.Collections[s]);for(const s of e){r[s]=[];const a=this.data.Types[s];for(const l of this.data.Collections[s]){const u={};if(a.forEach((d,p)=>{u[d[0]]=l[p]}),n){let d=!0,p=!0;for(const y of n)if(u[y.attribute]){if(y.max&&u[y.attribute]>y.max){d=!1;break}if(y.min&&u[y.attribute]this.data.Collections[n.collection]);for(const n of t){e[n.collection]=[];const r=this.data.Collections[n.collection],s=this.data.Collections[n.extras],a=this.data.Associations[n.assocs],l=this.data.Types[n.collection];let u,d,p,y,C,O,Q,W,se,ye,Le,we;for(let He=0;He{we[Et[0]]=r[He][Yt]}),we.pt{const n={Vertices:{},Tracks:{},Hits:{},CaloCells:{},CaloClusters:{},Jets:{},MissingEnergy:{},"event number":this.getEventNumber(t),"run number":this.getRunNumber(t)};this.colorTracks(t),n.Vertices=this.getVertices(t),n.Tracks=this.getTracks(t),n.Hits=this.getHits(t),n.CaloCells=this.getCells(t),n.CaloClusters=this.getCaloClusters(t),n.Jets=this.getJets(t),n.MissingEnergy=this.getMissingEnergy(t),this.eventData[e]=n}),!0}getEventData(){return this.eventData}getNumEvents(){return Object.keys(this.rawEventData).length}getRunNumber(e){if(!("EventHeader"in e))return 0;const t=e.EventHeader.collection;return"runNumber"in t?0:t[0].runNumber}getEventNumber(e){if(!("EventHeader"in e))return 0;const t=e.EventHeader.collection;return"eventNumber"in t?0:t[0].eventNumber}colorTracks(e){let t,n,r,s;"ReconstructedParticles"in e&&(t=e.ReconstructedParticles.collection,"Particle"in e&&(n=e.Particle.collection,"MCRecoAssociations"in e&&(r=e.MCRecoAssociations.collection,"EFlowTrack"in e&&(s=e.EFlowTrack.collection,r.forEach(a=>{const d=n[a.sim.index].PDG;t[a.rec.index].tracks.forEach(y=>{const C=s[y.index];11===Math.abs(d)?(C.color="00ff00",C.pid="electron"):22===Math.abs(d)?(C.color="ff0000",C.pid="photon"):211===Math.abs(d)||111===Math.abs(d)?(C.color="a52a2a",C.pid="pion"):2212===Math.abs(d)?(C.color="778899",C.pid="proton"):321===Math.abs(d)?(C.color="5f9ea0",C.pid="kaon"):(C.color="0000cd",C.pid="other"),C.pdgid=d})})))))}getVertices(e){const t=[];for(const n in e){if(e[n].constructor!=Object)continue;const r=e[n];if(!("collType"in r)||!("collection"in r)||"edm4hep::VertexCollection"!==r.collType)continue;const s=[],a=r.collection,l=this.randomColor();a.forEach(u=>{const d=[];"position"in u&&(d.push(.1*u.position.x),d.push(.1*u.position.y),d.push(.1*u.position.z)),s.push({pos:d,size:.2,color:"#"+l})}),t[n]=s}return t}getTracks(e){const t=[];for(const n in e){if(e[n].constructor!=Object)continue;const r=e[n];if(!("collType"in r)||"edm4hep::TrackCollection"!==r.collType||!("collection"in r))continue;const a=[],l=[],u=[],d=[],p=[],y=[];r.collection.forEach(C=>{const O=[];"trackerHits"in C&&C.trackerHits.forEach(ye=>{const we=this.getCollByID(e,ye.collectionID)[ye.index];O.push([.1*we.position.x,.1*we.position.y,.1*we.position.z])}),"trackStates"in C&&0===O.length&&C.trackStates.forEach(ye=>{"referencePoint"in ye&&O.push([.1*ye.referencePoint.x,.1*ye.referencePoint.y,.1*ye.referencePoint.z])});let Q="0000cd";"color"in C&&(Q=C.color);const W={pos:O,color:Q};"pid"in C?"electron"==C.pid?a.push(W):"photon"==C.pid?l.push(W):"pion"==C.pid?u.push(W):"proton"==C.pid?d.push(W):"kaon"==C.pid?p.push(W):y.push(W):y.push(W)}),t[n+" | Electrons"]=a,t[n+" | Photons"]=l,t[n+" | Pions"]=u,t[n+" | Protons"]=d,t[n+" | Kaons"]=p,t[n+" | Other"]=y}return t}getHits(e){const t=[];for(const n in e){if(e[n].constructor!=Object)continue;const r=e[n];if(!("collType"in r&&r.collType.includes("edm4hep::")&&r.collType.includes("TrackerHitCollection")&&"collection"in r))continue;const s=r.collection,a=[],l=this.randomColor();s.forEach(u=>{const d=[];"position"in u&&(d.push(.1*u.position.x),d.push(.1*u.position.y),d.push(.1*u.position.z)),a.push({type:"CircularPoint",pos:d,color:"#"+l,size:2})}),t[n]=a}return t}getCells(e){const t=[];for(const n in e){if(e[n].constructor!=Object)continue;const r=e[n];if(!("collType"in r&&r.collType.includes("edm4hep::")&&r.collType.includes("CalorimeterHitCollection")&&"collection"in r))continue;const s=r.collection,a=[];let l=1e9;for(let p=0;p<1e4;++p){const y=Math.floor(Math.random()*s.length),C=Math.floor(Math.random()*s.length);if(y===C)continue;const O=Math.pow(s[y].position.x-s[C].position.x,2),Q=Math.pow(s[y].position.y-s[C].position.y,2),W=Math.pow(s[y].position.z-s[C].position.z,2),se=Math.sqrt(O+Q+W);se1?.1*Math.floor(l):1,d=Math.floor(358*Math.random());s.forEach(p=>{const y=.1*p.position.x,C=.1*p.position.y,O=.1*p.position.z,Q=Math.sqrt(Math.pow(y,2)+Math.pow(C,2)+Math.pow(O,2)),W=Math.sqrt(Math.pow(y,2)+Math.pow(C,2)),se=Math.asinh(O/W),ye=Math.acos(y/W)*Math.sign(C),Le=this.valToLightness(p.energy,.001,1),we={eta:se,phi:ye,energy:p.energy,radius:Q,side:u,length:u,color:"#"+this.convHSLtoHEX(d,90,Le)};a.push(we)}),t[n]=a}return t}getCaloClusters(e){const t=[];for(const n in e){if(e[n].constructor!=Object)continue;const r=e[n];if(!("collType"in r)||"edm4hep::ClusterCollection"!==r.collType||!("collection"in r))continue;const a=[];r.collection.forEach(l=>{const u=.1*l.position.x,d=.1*l.position.y,p=.1*l.position.z,y=Math.sqrt(Math.pow(u,2)+Math.pow(d,2)+Math.pow(p,2)),C=Math.sqrt(Math.pow(u,2)+Math.pow(d,2)),O=Math.asinh(p/C),Q=Math.acos(u/C)*Math.sign(d);a.push({eta:O,phi:Q,energy:100*l.energy,radius:y,side:4})}),t[n]=a}return t}getJets(e){const t=[];for(const n in e){if(e[n].constructor!=Object)continue;const r=e[n];if(!("collType"in r)||"edm4hep::ReconstructedParticleCollection"!==r.collType||!n.includes("Jet")&&!n.includes("jet")||!("collection"in r))continue;const s=[];r.collection.forEach(l=>{if(!("momentum"in l)||!("energy"in l))return;const u=l.momentum.x,d=l.momentum.y,p=l.momentum.z,y=Math.sqrt(Math.pow(u,2)+Math.pow(d,2)),C=Math.asinh(p/y),O=Math.acos(u/y)*Math.sign(d);s.push({eta:C,phi:O,energy:1e3*l.energy})}),t[n]=s}return t}getMissingEnergy(e){const t=[];for(const n in e){if(e[n].constructor!=Object)continue;const r=e[n];if(!("collType"in r)||"edm4hep::ReconstructedParticleCollection"!==r.collType||!n.includes("Missing")&&!n.includes("missing")||!("collection"in r))continue;const s=[];r.collection.forEach(u=>{if(!("momentum"in u)||!("energy"in u))return;const d=u.momentum.x,p=u.momentum.y,y=u.momentum.z,C=Math.sqrt(Math.pow(d,2)+Math.pow(p,2)+Math.pow(y,2));s.push({etx:u.energy*d/C*10,ety:u.energy*p/C*10,color:"#ff69b4"})}),t[n]=s}return t}randomColor(){return Math.floor(16777215*Math.random()).toString(16).padStart(6,"0").toUpperCase()}convHSLtoHEX(e,t,n){n/=100;const r=t*Math.min(n,1-n)/100,s=a=>{const l=(a+e/30)%12,u=n-r*Math.max(Math.min(l-3,9-l,1),-1);return Math.round(255*u).toString(16).padStart(2,"0")};return`${s(0)}${s(8)}${s(4)}`}valToLightness(e,t,n){let r=80-65*(e-t)/(n-t);return r<20&&(r=20),r>85&&(r=85),r}getCollByID(e,t){for(const n in e){if(e[n].constructor!=Object)continue;const r=e[n];if("collID"in r&&r.collID===t)return r.collection}}}class xae extends My{constructor(){super(),this.hitData=[],this.particleData=[],this.truthData={}}processHits(e){const t=e.split("\n");let n;console.log("Event has this many hits:",t.length);for(let r=1;r{this.loaded||(this.error=t)})}}Wt(Gm,"\u0275fac",function(e){return new(e||Gm)(wt(Sy))}),Wt(Gm,"\u0275cmp",Fr({type:Gm,selectors:[["app-loader"]],inputs:{loaded:"loaded",progress:"progress"},decls:4,vars:5,consts:[[1,"loader-wrapper","d-flex","position-absolute","flex-column","justify-content-center","align-items-center","w-100","h-100","p-5","text-center",3,"ngClass"],[4,"ngIf","ngIfElse"],["errorContainer",""],["src","assets/images/logo-small.svg","alt","Loader"],[1,"mt-5"],[1,"text-muted"],["class","loading-bar",4,"ngIf"],[1,"loading-bar"]],template:function(e,t){if(1&e&&(Zt(0,"div",0),qr(1,Mae,8,1,"ng-container",1),qr(2,Sae,2,0,"ng-template",null,2,NT),un()),2&e){const n=bl(3);Cn("ngClass",$d(3,Tae,t.loaded)),Nn(1),Cn("ngIf",void 0===t.error)("ngIfElse",n)}},dependencies:[FA,Tu],styles:[".loader-wrapper[_ngcontent-%COMP%]{background:var(--phoenix-background-color);z-index:9998}.loader-wrapper.load-complete[_ngcontent-%COMP%]{display:none!important}.loader-wrapper[_ngcontent-%COMP%] img[_ngcontent-%COMP%]{width:5rem;height:5rem;animation:loader 2s infinite}.loader-wrapper[_ngcontent-%COMP%] p[_ngcontent-%COMP%]{color:var(--phoenix-text-color)}.loader-wrapper[_ngcontent-%COMP%] .loading-bar[_ngcontent-%COMP%]{width:15rem;max-width:90%;height:.5rem;background:var(--phoenix-background-color-tertiary);border-radius:2.5rem;overflow:hidden}.loader-wrapper[_ngcontent-%COMP%] .loading-bar[_ngcontent-%COMP%] span[_ngcontent-%COMP%]{display:block;height:100%;border-radius:2.5rem;background:linear-gradient(to right,var(--phoenix-primary),var(--phoenix-secondary));transition:all .5s}@keyframes _ngcontent-%COMP%_app-loader_loader{0%,to{transform:scale(.1) rotate(0)}95%{transform:scale(1) rotate(15deg)}}"]}));class wS{constructor(e){Wt(this,"eventDisplay",void 0),Wt(this,"loaded",!1),Wt(this,"loadingProgress",0),this.eventDisplay=e}ngOnInit(){this.eventDisplay.init({}),this.eventDisplay.buildGeometryFromParameters({ModuleName:"Module 2",Xdim:10,Ydim:1,Zdim:45,NumPhiEl:64,NumZEl:10,Radius:75,MinZ:-250,MaxZ:250,TiltAngle:.3,PhiOffset:0,Colour:65280,EdgeColour:4494424}),this.eventDisplay.getLoadingManager().addProgressListener(t=>this.loadingProgress=t),this.eventDisplay.getLoadingManager().addLoadListenerWithCheck(()=>this.loaded=!0)}copyCode(){const e=document.getElementById("geometryCode").textContent.trim(),t=document.createElement("input");document.body.appendChild(t),t.value=e,t.select(),document.execCommand("copy"),document.body.removeChild(t)}}Wt(wS,"\u0275fac",function(e){return new(e||wS)(wt(Qa))}),Wt(wS,"\u0275cmp",Fr({type:wS,selectors:[["app-geometry"]],decls:14,vars:3,consts:[[3,"loaded","progress"],[1,"demo-info"],["id","geometryCode"],[1,"copy-code",3,"click"],["id","eventDisplay"]],template:function(e,t){1&e&&(Pr(0,"app-loader",0)(1,"app-nav"),Zt(2,"div",1)(3,"p")(4,"b"),dr(5,"Geometry Demo"),un()(),Zt(6,"p"),dr(7,"Try opening the console and typing:"),un(),Zt(8,"code",2),dr(9),un(),Zt(10,"p",3),Fi("click",function(){return t.copyCode()}),Zt(11,"b"),dr(12,"Copy"),un()()(),Pr(13,"div",4)),2&e&&(Cn("loaded",t.loaded)("progress",t.loadingProgress),Nn(9),Gl(" ",'var parameters = { ModuleName: "Module 3", Xdim: 10., Ydim: 1., Zdim: 45, NumPhiEl: 64, NumZEl: 10, Radius: 105, MinZ: -250, MaxZ: 250, TiltAngle: 0.3, PhiOffset: 0.0, Colour: 0xffff00, EdgeColour: 0x449458 }; window.EventDisplay.buildGeometryFromParameters(parameters);'," "))},dependencies:[Vm,Gm],styles:[".demo-info[_ngcontent-%COMP%]{position:absolute;top:5rem;left:1rem;font-size:.8rem;color:var(--phoenix-text-color-secondary);width:20rem;max-width:40%}.demo-info[_ngcontent-%COMP%] code[_ngcontent-%COMP%]{color:var(--phoenix-text-color-secondary);cursor:text}.demo-info[_ngcontent-%COMP%] .copy-code[_ngcontent-%COMP%]{cursor:pointer}"]}));var Xh=(()=>(function(i){i.JSON="JSON",i.EDM4HEPJSON="EDM4HEPJSON",i.JIVEXML="JIVEXML",i.IG="IG",i.ZIP="ZIP"}(Xh||(Xh={})),Xh))();class Bb{constructor(e,t,n,r){Wt(this,"format",void 0),Wt(this,"fileType",void 0),Wt(this,"handler",void 0),Wt(this,"accept",void 0),this.format=e,this.fileType=t,this.handler=n,this.accept=r}}JSON.parse('{"eventFile":"assets/files/JiveXML/JiveXML_336567_2327102923.xml","eventType":"jivexml"}');const Dae=JSON.parse('{"phoenixMenu":{"name":"Phoenix Menu","nodeLevel":0,"toggleState":true,"childrenActive":false,"configs":[{"type":"button","label":"Save state"},{"type":"button","label":"Load state"}],"children":[{"name":"Detector","nodeLevel":1,"toggleState":true,"childrenActive":false,"configs":[{"type":"checkbox","label":"Wireframe","isChecked":false},{"type":"slider","label":"Opacity","min":0,"max":1,"step":0.01,"allowCustomValue":true},{"type":"slider","label":"Scale","min":0,"max":20,"step":0.01,"allowCustomValue":true}],"children":[{"name":"Magnets","nodeLevel":2,"toggleState":true,"childrenActive":false,"configs":[],"children":[{"name":"Barrel Toroid","nodeLevel":3,"toggleState":true,"childrenActive":false,"configs":[{"type":"color","label":"Color"},{"type":"slider","label":"Opacity","min":0,"max":1,"step":0.05,"allowCustomValue":true},{"type":"button","label":"Remove"}],"children":[]},{"name":"Endcap","nodeLevel":3,"toggleState":false,"childrenActive":false,"configs":[{"type":"color","label":"Color"},{"type":"slider","label":"Opacity","min":0,"max":1,"step":0.05,"allowCustomValue":true},{"type":"button","label":"Remove"}],"children":[]},{"name":"Feet","nodeLevel":3,"toggleState":false,"childrenActive":false,"configs":[{"type":"color","label":"Color"},{"type":"slider","label":"Opacity","min":0,"max":1,"step":0.05,"allowCustomValue":true},{"type":"button","label":"Remove"}],"children":[]},{"name":"Warm structure","nodeLevel":3,"toggleState":true,"childrenActive":false,"configs":[{"type":"color","label":"Color"},{"type":"slider","label":"Opacity","min":0,"max":1,"step":0.05,"allowCustomValue":true},{"type":"button","label":"Remove"}],"children":[]}]},{"name":"Calorimeters","nodeLevel":2,"toggleState":false,"childrenActive":false,"configs":[],"children":[{"name":"LAr Barrel","nodeLevel":3,"toggleState":false,"childrenActive":false,"configs":[{"type":"color","label":"Color"},{"type":"slider","label":"Opacity","min":0,"max":1,"step":0.05,"allowCustomValue":true},{"type":"button","label":"Remove"}],"children":[]},{"name":"LAr EC1","nodeLevel":3,"toggleState":false,"childrenActive":false,"configs":[{"type":"color","label":"Color"},{"type":"slider","label":"Opacity","min":0,"max":1,"step":0.05,"allowCustomValue":true},{"type":"button","label":"Remove"}],"children":[]},{"name":"LAr FCAL","nodeLevel":3,"toggleState":false,"childrenActive":false,"configs":[{"type":"color","label":"Color"},{"type":"slider","label":"Opacity","min":0,"max":1,"step":0.05,"allowCustomValue":true},{"type":"button","label":"Remove"}],"children":[]},{"name":"LAr HEC","nodeLevel":3,"toggleState":false,"childrenActive":false,"configs":[{"type":"color","label":"Color"},{"type":"slider","label":"Opacity","min":0,"max":1,"step":0.05,"allowCustomValue":true},{"type":"button","label":"Remove"}],"children":[]},{"name":"Tile Cal","nodeLevel":3,"toggleState":false,"childrenActive":false,"configs":[{"type":"color","label":"Color"},{"type":"slider","label":"Opacity","min":0,"max":1,"step":0.05,"allowCustomValue":true},{"type":"button","label":"Remove"}],"children":[]},{"name":"Tile Cal EC","nodeLevel":3,"toggleState":false,"childrenActive":false,"configs":[{"type":"color","label":"Color"},{"type":"slider","label":"Opacity","min":0,"max":1,"step":0.05,"allowCustomValue":true},{"type":"button","label":"Remove"}],"children":[]}]},{"name":"Inner Detector","nodeLevel":2,"toggleState":true,"childrenActive":false,"configs":[],"children":[{"name":"Beam","nodeLevel":3,"toggleState":false,"childrenActive":false,"configs":[{"type":"color","label":"Color"},{"type":"slider","label":"Opacity","min":0,"max":1,"step":0.05,"allowCustomValue":true},{"type":"button","label":"Remove"}],"children":[]},{"name":"Pixel","nodeLevel":3,"toggleState":true,"childrenActive":false,"configs":[{"type":"color","label":"Color"},{"type":"slider","label":"Opacity","min":0,"max":1,"step":0.05,"allowCustomValue":true},{"type":"button","label":"Remove"}],"children":[]},{"name":"SCT","nodeLevel":3,"toggleState":true,"childrenActive":false,"configs":[{"type":"color","label":"Color"},{"type":"slider","label":"Opacity","min":0,"max":1,"step":0.05,"allowCustomValue":true},{"type":"button","label":"Remove"}],"children":[]},{"name":"SCT Endcaps","nodeLevel":3,"toggleState":true,"childrenActive":false,"configs":[{"type":"color","label":"Color"},{"type":"slider","label":"Opacity","min":0,"max":1,"step":0.05,"allowCustomValue":true},{"type":"button","label":"Remove"}],"children":[]},{"name":"TRT","nodeLevel":3,"toggleState":true,"childrenActive":false,"configs":[{"type":"color","label":"Color"},{"type":"slider","label":"Opacity","min":0,"max":1,"step":0.05,"allowCustomValue":true},{"type":"button","label":"Remove"}],"children":[]},{"name":"TRT Endcaps","nodeLevel":3,"toggleState":true,"childrenActive":false,"configs":[{"type":"color","label":"Color"},{"type":"slider","label":"Opacity","min":0,"max":1,"step":0.05,"allowCustomValue":true},{"type":"button","label":"Remove"}],"children":[]}]},{"name":"Muon Spectrometer","nodeLevel":2,"toggleState":false,"childrenActive":false,"configs":[],"children":[{"name":"Endcaps","nodeLevel":3,"toggleState":false,"childrenActive":false,"configs":[],"children":[{"name":"Extra wheel","nodeLevel":4,"toggleState":false,"childrenActive":false,"configs":[{"type":"color","label":"Color"},{"type":"slider","label":"Opacity","min":0,"max":1,"step":0.05,"allowCustomValue":true},{"type":"button","label":"Remove"}],"children":[]},{"name":"Big wheel","nodeLevel":4,"toggleState":false,"childrenActive":false,"configs":[{"type":"color","label":"Color"},{"type":"slider","label":"Opacity","min":0,"max":1,"step":0.05,"allowCustomValue":true},{"type":"button","label":"Remove"}],"children":[]},{"name":"Outer Wheel","nodeLevel":4,"toggleState":false,"childrenActive":false,"configs":[{"type":"color","label":"Color"},{"type":"slider","label":"Opacity","min":0,"max":1,"step":0.05,"allowCustomValue":true},{"type":"button","label":"Remove"}],"children":[]},{"name":"Big Wheel MDT ","nodeLevel":4,"toggleState":false,"childrenActive":false,"configs":[{"type":"color","label":"Color"},{"type":"slider","label":"Opacity","min":0,"max":1,"step":0.05,"allowCustomValue":true},{"type":"button","label":"Remove"}],"children":[]},{"name":"Small Wheel","nodeLevel":4,"toggleState":false,"childrenActive":false,"configs":[{"type":"color","label":"Color"},{"type":"slider","label":"Opacity","min":0,"max":1,"step":0.05,"allowCustomValue":true},{"type":"button","label":"Remove"}],"children":[]},{"name":"Small Wheel Hub","nodeLevel":4,"toggleState":false,"childrenActive":false,"configs":[{"type":"color","label":"Color"},{"type":"slider","label":"Opacity","min":0,"max":1,"step":0.05,"allowCustomValue":true},{"type":"button","label":"Remove"}],"children":[]},{"name":"Small Wheel Feet","nodeLevel":4,"toggleState":false,"childrenActive":false,"configs":[{"type":"color","label":"Color"},{"type":"slider","label":"Opacity","min":0,"max":1,"step":0.05,"allowCustomValue":true},{"type":"button","label":"Remove"}],"children":[]},{"name":"TGC2","nodeLevel":4,"toggleState":false,"childrenActive":false,"configs":[{"type":"color","label":"Color"},{"type":"slider","label":"Opacity","min":0,"max":1,"step":0.05,"allowCustomValue":true},{"type":"button","label":"Remove"}],"children":[]},{"name":"TGC3","nodeLevel":4,"toggleState":false,"childrenActive":false,"configs":[{"type":"color","label":"Color"},{"type":"slider","label":"Opacity","min":0,"max":1,"step":0.05,"allowCustomValue":true},{"type":"button","label":"Remove"}],"children":[]}]},{"name":"Barrel","nodeLevel":3,"toggleState":false,"childrenActive":false,"configs":[],"children":[{"name":"Muon Barrel Inner","nodeLevel":4,"toggleState":false,"childrenActive":false,"configs":[{"type":"color","label":"Color"},{"type":"slider","label":"Opacity","min":0,"max":1,"step":0.05,"allowCustomValue":true},{"type":"button","label":"Remove"}],"children":[]},{"name":"Muon Barrel Middle","nodeLevel":4,"toggleState":false,"childrenActive":false,"configs":[{"type":"color","label":"Color"},{"type":"slider","label":"Opacity","min":0,"max":1,"step":0.05,"allowCustomValue":true},{"type":"button","label":"Remove"}],"children":[]},{"name":"Muon Barrel Outer","nodeLevel":4,"toggleState":false,"childrenActive":false,"configs":[{"type":"color","label":"Color"},{"type":"slider","label":"Opacity","min":0,"max":1,"step":0.05,"allowCustomValue":true},{"type":"button","label":"Remove"}],"children":[]}]}]}]},{"name":"Event Data","nodeLevel":1,"toggleState":true,"childrenActive":false,"configs":[{"type":"checkbox","label":"Depth Test","isChecked":true}],"children":[{"name":"Tracks","nodeLevel":2,"toggleState":true,"childrenActive":false,"configs":[],"children":[{"name":"Tracks_","nodeLevel":3,"toggleState":true,"childrenActive":false,"configs":[],"children":[{"name":"Draw Options","nodeLevel":4,"toggleState":true,"childrenActive":false,"configs":[{"type":"slider","label":"Opacity","min":0.1,"step":0.1,"max":1},{"type":"checkbox","label":"Wireframe"}],"children":[]},{"name":"Cut Options","nodeLevel":4,"toggleState":true,"childrenActive":false,"configs":[{"type":"label","label":"Cuts"},{"type":"button","label":"Reset cuts"},{"type":"rangeSlider","label":"\u03d5","min":-3.14,"max":3.14,"step":0.01,"value":-3.14,"highValue":3.14},{"type":"rangeSlider","label":"\u03b7","min":-4,"max":4,"step":0.1,"value":-4,"highValue":4},{"type":"rangeSlider","label":"\u{1d6d8}2","min":0,"max":100,"step":1,"value":0,"highValue":100},{"type":"rangeSlider","label":"DOF","min":0,"max":100,"step":1,"value":0,"highValue":100},{"type":"rangeSlider","label":"pT","min":0,"max":50000,"step":0.1,"value":0,"highValue":50000},{"type":"rangeSlider","label":"z0","min":-30,"max":30,"step":0.1,"value":-30,"highValue":30},{"type":"rangeSlider","label":"d0","min":-30,"max":30,"step":0.1,"value":-30,"highValue":30}],"children":[]},{"name":"Color Options","nodeLevel":4,"toggleState":true,"childrenActive":false,"configs":[{"type":"color","label":"Color","hidden":false},{"type":"button","label":"Random","hidden":false},{"type":"select","label":"Color by","options":["Charge q","Momentum |p|","Vertex"],"hidden":false},{"type":"color","label":"q=-1","group":"charge","color":"#ff0000","hidden":false},{"type":"color","label":"q=0","group":"charge","color":"#ff0000","hidden":false},{"type":"color","label":"q=1","group":"charge","color":"#ff0000","hidden":false},{"type":"slider","label":"|p| min","group":"mom","min":0,"max":50000,"value":0,"step":10,"allowCustomValue":true,"hidden":true},{"type":"color","label":"|p| min color","group":"mom","color":"#ff0000","hidden":true},{"type":"slider","label":"|p| max","group":"mom","min":0,"max":50000,"value":50000,"step":10,"allowCustomValue":true,"hidden":true},{"type":"color","label":"|p| max color","group":"mom","color":"#ff0000","hidden":true}],"children":[]}]},{"name":"CombinedMuonTracks","nodeLevel":3,"toggleState":true,"childrenActive":false,"configs":[],"children":[{"name":"Draw Options","nodeLevel":4,"childrenActive":false,"configs":[{"type":"slider","label":"Opacity","min":0.1,"step":0.1,"max":1},{"type":"checkbox","label":"Wireframe"}],"children":[]},{"name":"Cut Options","nodeLevel":4,"childrenActive":false,"configs":[{"type":"label","label":"Cuts"},{"type":"button","label":"Reset cuts"},{"type":"rangeSlider","label":"\u03d5","min":-3.14,"max":3.14,"step":0.01,"value":-3.14,"highValue":3.14},{"type":"rangeSlider","label":"\u03b7","min":-4,"max":4,"step":0.1,"value":-4,"highValue":4},{"type":"rangeSlider","label":"\u{1d6d8}2","min":0,"max":100,"step":1,"value":0,"highValue":100},{"type":"rangeSlider","label":"DOF","min":0,"max":100,"step":1,"value":0,"highValue":100},{"type":"rangeSlider","label":"pT","min":0,"max":50000,"step":0.1,"value":0,"highValue":50000},{"type":"rangeSlider","label":"z0","min":-30,"max":30,"step":0.1,"value":-30,"highValue":30},{"type":"rangeSlider","label":"d0","min":-30,"max":30,"step":0.1,"value":-30,"highValue":30}],"children":[]},{"name":"Color Options","nodeLevel":4,"childrenActive":false,"configs":[{"type":"color","label":"Color","color":"#0adb2d","hidden":false},{"type":"button","label":"Random","hidden":false},{"type":"select","label":"Color by","options":["Charge q","Momentum |p|","Vertex"],"hidden":false},{"type":"color","label":"q=-1","group":"charge","color":"#ff0000","hidden":false},{"type":"color","label":"q=0","group":"charge","color":"#ff0000","hidden":false},{"type":"color","label":"q=1","group":"charge","color":"#ff0000","hidden":false},{"type":"slider","label":"|p| min","group":"mom","min":0,"max":50000,"value":0,"step":10,"allowCustomValue":true,"hidden":true},{"type":"color","label":"|p| min color","group":"mom","color":"#ff0000","hidden":true},{"type":"slider","label":"|p| max","group":"mom","min":0,"max":50000,"value":50000,"step":10,"allowCustomValue":true,"hidden":true},{"type":"color","label":"|p| max color","group":"mom","color":"#ff0000","hidden":true}],"children":[]}]},{"name":"MuonSpectrometerTracks","nodeLevel":3,"toggleState":false,"childrenActive":false,"configs":[],"children":[{"name":"Draw Options","nodeLevel":4,"toggleState":false,"childrenActive":false,"configs":[{"type":"slider","label":"Opacity","min":0.1,"step":0.1,"max":1},{"type":"checkbox","label":"Wireframe"}],"children":[]},{"name":"Cut Options","nodeLevel":4,"toggleState":false,"childrenActive":false,"configs":[{"type":"label","label":"Cuts"},{"type":"button","label":"Reset cuts"},{"type":"rangeSlider","label":"\u03d5","min":-3.14,"max":3.14,"step":0.01,"value":-3.14,"highValue":3.14},{"type":"rangeSlider","label":"\u03b7","min":-4,"max":4,"step":0.1,"value":-4,"highValue":4},{"type":"rangeSlider","label":"\u{1d6d8}2","min":0,"max":100,"step":1,"value":0,"highValue":100},{"type":"rangeSlider","label":"DOF","min":0,"max":100,"step":1,"value":0,"highValue":100},{"type":"rangeSlider","label":"pT","min":0,"max":50000,"step":0.1,"value":0,"highValue":50000},{"type":"rangeSlider","label":"z0","min":-30,"max":30,"step":0.1,"value":-30,"highValue":30},{"type":"rangeSlider","label":"d0","min":-30,"max":30,"step":0.1,"value":-30,"highValue":30}],"children":[]},{"name":"Color Options","nodeLevel":4,"toggleState":false,"childrenActive":false,"configs":[{"type":"color","label":"Color","hidden":false},{"type":"button","label":"Random","hidden":false},{"type":"select","label":"Color by","options":["Charge q","Momentum |p|","Vertex"],"hidden":false},{"type":"color","label":"q=-1","group":"charge","color":"#ff0000","hidden":false},{"type":"color","label":"q=0","group":"charge","color":"#ff0000","hidden":false},{"type":"color","label":"q=1","group":"charge","color":"#ff0000","hidden":false},{"type":"slider","label":"|p| min","group":"mom","min":0,"max":50000,"value":0,"step":10,"allowCustomValue":true,"hidden":true},{"type":"color","label":"|p| min color","group":"mom","color":"#ff0000","hidden":true},{"type":"slider","label":"|p| max","group":"mom","min":0,"max":50000,"value":50000,"step":10,"allowCustomValue":true,"hidden":true},{"type":"color","label":"|p| max color","group":"mom","color":"#ff0000","hidden":true}],"children":[]}]},{"name":"CombinedInDetTracks","nodeLevel":3,"toggleState":false,"childrenActive":false,"configs":[],"children":[{"name":"Draw Options","nodeLevel":4,"toggleState":true,"childrenActive":false,"configs":[{"type":"slider","label":"Opacity","min":0.1,"step":0.1,"max":1},{"type":"checkbox","label":"Wireframe"}],"children":[]},{"name":"Cut Options","nodeLevel":4,"toggleState":true,"childrenActive":false,"configs":[{"type":"label","label":"Cuts"},{"type":"button","label":"Reset cuts"},{"type":"rangeSlider","label":"\u03d5","min":-3.14,"max":3.14,"step":0.01,"value":-3.14,"highValue":3.14},{"type":"rangeSlider","label":"\u03b7","min":-4,"max":4,"step":0.1,"value":-4,"highValue":4},{"type":"rangeSlider","label":"\u{1d6d8}2","min":0,"max":100,"step":1,"value":0,"highValue":100},{"type":"rangeSlider","label":"DOF","min":0,"max":100,"step":1,"value":0,"highValue":100},{"type":"rangeSlider","label":"pT","min":0,"max":50000,"step":0.1,"value":0,"highValue":50000},{"type":"rangeSlider","label":"z0","min":-30,"max":30,"step":0.1,"value":-30,"highValue":30},{"type":"rangeSlider","label":"d0","min":-30,"max":30,"step":0.1,"value":-30,"highValue":30}],"children":[]},{"name":"Color Options","nodeLevel":4,"toggleState":true,"childrenActive":false,"configs":[{"type":"color","label":"Color","hidden":false},{"type":"button","label":"Random","hidden":false},{"type":"select","label":"Color by","options":["Charge q","Momentum |p|","Vertex"],"hidden":false},{"type":"color","label":"q=-1","group":"charge","color":"#ff0000","hidden":false},{"type":"color","label":"q=0","group":"charge","color":"#ff0000","hidden":false},{"type":"color","label":"q=1","group":"charge","color":"#ff0000","hidden":false},{"type":"slider","label":"|p| min","group":"mom","min":0,"max":50000,"value":0,"step":10,"allowCustomValue":true,"hidden":true},{"type":"color","label":"|p| min color","group":"mom","color":"#ff0000","hidden":true},{"type":"slider","label":"|p| max","group":"mom","min":0,"max":50000,"value":50000,"step":10,"allowCustomValue":true,"hidden":true},{"type":"color","label":"|p| max color","group":"mom","color":"#ff0000","hidden":true}],"children":[]}]},{"name":"GSFTracks","nodeLevel":3,"toggleState":false,"childrenActive":false,"configs":[],"children":[{"name":"Draw Options","nodeLevel":4,"toggleState":false,"childrenActive":false,"configs":[{"type":"slider","label":"Opacity","min":0.1,"step":0.1,"max":1},{"type":"checkbox","label":"Wireframe"}],"children":[]},{"name":"Cut Options","nodeLevel":4,"toggleState":false,"childrenActive":false,"configs":[{"type":"label","label":"Cuts"},{"type":"button","label":"Reset cuts"},{"type":"rangeSlider","label":"\u03d5","min":-3.14,"max":3.14,"step":0.01,"value":-3.14,"highValue":3.14},{"type":"rangeSlider","label":"\u03b7","min":-4,"max":4,"step":0.1,"value":-4,"highValue":4},{"type":"rangeSlider","label":"\u{1d6d8}2","min":0,"max":100,"step":1,"value":0,"highValue":100},{"type":"rangeSlider","label":"DOF","min":0,"max":100,"step":1,"value":0,"highValue":100},{"type":"rangeSlider","label":"pT","min":0,"max":50000,"step":0.1,"value":0,"highValue":50000},{"type":"rangeSlider","label":"z0","min":-30,"max":30,"step":0.1,"value":-30,"highValue":30},{"type":"rangeSlider","label":"d0","min":-30,"max":30,"step":0.1,"value":-30,"highValue":30}],"children":[]},{"name":"Color Options","nodeLevel":4,"toggleState":false,"childrenActive":false,"configs":[{"type":"color","label":"Color","hidden":false},{"type":"button","label":"Random","hidden":false},{"type":"select","label":"Color by","options":["Charge q","Momentum |p|","Vertex"],"hidden":false},{"type":"color","label":"q=-1","group":"charge","color":"#ff0000","hidden":false},{"type":"color","label":"q=0","group":"charge","color":"#ff0000","hidden":false},{"type":"color","label":"q=1","group":"charge","color":"#ff0000","hidden":false},{"type":"slider","label":"|p| min","group":"mom","min":0,"max":50000,"value":0,"step":10,"allowCustomValue":true,"hidden":true},{"type":"color","label":"|p| min color","group":"mom","color":"#ff0000","hidden":true},{"type":"slider","label":"|p| max","group":"mom","min":0,"max":50000,"value":50000,"step":10,"allowCustomValue":true,"hidden":true},{"type":"color","label":"|p| max color","group":"mom","color":"#ff0000","hidden":true}],"children":[]}]},{"name":"InDetTrackParticles_xAOD","nodeLevel":3,"toggleState":true,"childrenActive":false,"configs":[],"children":[{"name":"Draw Options","nodeLevel":4,"toggleState":true,"childrenActive":false,"configs":[{"type":"slider","label":"Opacity","min":0.1,"step":0.1,"max":1},{"type":"checkbox","label":"Wireframe"}],"children":[]},{"name":"Cut Options","nodeLevel":4,"toggleState":true,"childrenActive":false,"configs":[{"type":"label","label":"Cuts"},{"type":"button","label":"Reset cuts"},{"type":"rangeSlider","label":"\u03d5","min":-3.14,"max":3.14,"step":0.01,"value":-3.14,"highValue":3.14},{"type":"rangeSlider","label":"\u03b7","min":-4,"max":4,"step":0.1,"value":-4,"highValue":4},{"type":"rangeSlider","label":"\u{1d6d8}2","min":0,"max":100,"step":1,"value":0,"highValue":100},{"type":"rangeSlider","label":"DOF","min":0,"max":100,"step":1,"value":0,"highValue":100},{"type":"rangeSlider","label":"pT","min":0,"max":50000,"step":0.1,"value":0,"highValue":50000},{"type":"rangeSlider","label":"z0","min":-30,"max":30,"step":0.1,"value":-30,"highValue":30},{"type":"rangeSlider","label":"d0","min":-30,"max":30,"step":0.1,"value":-30,"highValue":30}],"children":[]},{"name":"Color Options","nodeLevel":4,"toggleState":true,"childrenActive":false,"configs":[{"type":"color","label":"Color","hidden":false},{"type":"button","label":"Random","hidden":false},{"type":"select","label":"Color by","options":["Charge q","Momentum |p|","Vertex"],"hidden":false},{"type":"color","label":"q=-1","group":"charge","color":"#ff0000","hidden":false},{"type":"color","label":"q=0","group":"charge","color":"#ff0000","hidden":false},{"type":"color","label":"q=1","group":"charge","color":"#ff0000","hidden":false},{"type":"slider","label":"|p| min","group":"mom","min":0,"max":50000,"value":0,"step":10,"allowCustomValue":true,"hidden":true},{"type":"color","label":"|p| min color","group":"mom","color":"#ff0000","hidden":true},{"type":"slider","label":"|p| max","group":"mom","min":0,"max":50000,"value":50000,"step":10,"allowCustomValue":true,"hidden":true},{"type":"color","label":"|p| max color","group":"mom","color":"#ff0000","hidden":true}],"children":[]}]},{"name":"CombinedMuonTrackParticles_xAOD","nodeLevel":3,"toggleState":false,"childrenActive":false,"configs":[],"children":[{"name":"Draw Options","nodeLevel":4,"toggleState":true,"childrenActive":false,"configs":[{"type":"slider","label":"Opacity","min":0.1,"step":0.1,"max":1},{"type":"checkbox","label":"Wireframe"}],"children":[]},{"name":"Cut Options","nodeLevel":4,"toggleState":true,"childrenActive":false,"configs":[{"type":"label","label":"Cuts"},{"type":"button","label":"Reset cuts"},{"type":"rangeSlider","label":"\u03d5","min":-3.14,"max":3.14,"step":0.01,"value":-3.14,"highValue":3.14},{"type":"rangeSlider","label":"\u03b7","min":-4,"max":4,"step":0.1,"value":-4,"highValue":4},{"type":"rangeSlider","label":"\u{1d6d8}2","min":0,"max":100,"step":1,"value":0,"highValue":100},{"type":"rangeSlider","label":"DOF","min":0,"max":100,"step":1,"value":0,"highValue":100},{"type":"rangeSlider","label":"pT","min":0,"max":50000,"step":0.1,"value":0,"highValue":50000},{"type":"rangeSlider","label":"z0","min":-30,"max":30,"step":0.1,"value":-30,"highValue":30},{"type":"rangeSlider","label":"d0","min":-30,"max":30,"step":0.1,"value":-30,"highValue":30}],"children":[]},{"name":"Color Options","nodeLevel":4,"toggleState":true,"childrenActive":false,"configs":[{"type":"color","label":"Color","hidden":false},{"type":"button","label":"Random","hidden":false},{"type":"select","label":"Color by","options":["Charge q","Momentum |p|","Vertex"],"hidden":false},{"type":"color","label":"q=-1","group":"charge","color":"#ff0000","hidden":false},{"type":"color","label":"q=0","group":"charge","color":"#ff0000","hidden":false},{"type":"color","label":"q=1","group":"charge","color":"#ff0000","hidden":false},{"type":"slider","label":"|p| min","group":"mom","min":0,"max":50000,"value":0,"step":10,"allowCustomValue":true,"hidden":true},{"type":"color","label":"|p| min color","group":"mom","color":"#ff0000","hidden":true},{"type":"slider","label":"|p| max","group":"mom","min":0,"max":50000,"value":50000,"step":10,"allowCustomValue":true,"hidden":true},{"type":"color","label":"|p| max color","group":"mom","color":"#ff0000","hidden":true}],"children":[]}]},{"name":"GSFTrackParticles_xAOD","nodeLevel":3,"toggleState":false,"childrenActive":false,"configs":[],"children":[{"name":"Draw Options","nodeLevel":4,"toggleState":true,"childrenActive":false,"configs":[{"type":"slider","label":"Opacity","min":0.1,"step":0.1,"max":1},{"type":"checkbox","label":"Wireframe"}],"children":[]},{"name":"Cut Options","nodeLevel":4,"toggleState":true,"childrenActive":false,"configs":[{"type":"label","label":"Cuts"},{"type":"button","label":"Reset cuts"},{"type":"rangeSlider","label":"\u03d5","min":-3.14,"max":3.14,"step":0.01,"value":-3.14,"highValue":3.14},{"type":"rangeSlider","label":"\u03b7","min":-4,"max":4,"step":0.1,"value":-4,"highValue":4},{"type":"rangeSlider","label":"\u{1d6d8}2","min":0,"max":100,"step":1,"value":0,"highValue":100},{"type":"rangeSlider","label":"DOF","min":0,"max":100,"step":1,"value":0,"highValue":100},{"type":"rangeSlider","label":"pT","min":0,"max":50000,"step":0.1,"value":0,"highValue":50000},{"type":"rangeSlider","label":"z0","min":-30,"max":30,"step":0.1,"value":-30,"highValue":30},{"type":"rangeSlider","label":"d0","min":-30,"max":30,"step":0.1,"value":-30,"highValue":30}],"children":[]},{"name":"Color Options","nodeLevel":4,"toggleState":true,"childrenActive":false,"configs":[{"type":"color","label":"Color","hidden":false},{"type":"button","label":"Random","hidden":false},{"type":"select","label":"Color by","options":["Charge q","Momentum |p|","Vertex"],"hidden":false},{"type":"color","label":"q=-1","group":"charge","color":"#ff0000","hidden":false},{"type":"color","label":"q=0","group":"charge","color":"#ff0000","hidden":false},{"type":"color","label":"q=1","group":"charge","color":"#ff0000","hidden":false},{"type":"slider","label":"|p| min","group":"mom","min":0,"max":50000,"value":0,"step":10,"allowCustomValue":true,"hidden":true},{"type":"color","label":"|p| min color","group":"mom","color":"#ff0000","hidden":true},{"type":"slider","label":"|p| max","group":"mom","min":0,"max":50000,"value":50000,"step":10,"allowCustomValue":true,"hidden":true},{"type":"color","label":"|p| max color","group":"mom","color":"#ff0000","hidden":true}],"children":[]}]}]},{"name":"Jets","nodeLevel":2,"toggleState":true,"childrenActive":false,"configs":[{"type":"slider","label":"Jets Scale","value":1,"min":0.001,"step":0.01,"max":100,"allowCustomValue":true}],"children":[{"name":"AntiKt4EMTopoJets_xAOD","nodeLevel":3,"toggleState":false,"childrenActive":false,"configs":[],"children":[{"name":"Draw Options","nodeLevel":4,"toggleState":true,"childrenActive":false,"configs":[{"type":"slider","label":"Opacity","min":0.1,"step":0.1,"max":1},{"type":"checkbox","label":"Wireframe"}],"children":[]},{"name":"Cut Options","nodeLevel":4,"toggleState":true,"childrenActive":false,"configs":[{"type":"label","label":"Cuts"},{"type":"button","label":"Reset cuts"},{"type":"rangeSlider","label":"\u03d5","min":-3.14,"max":3.14,"step":0.01,"value":-3.14,"highValue":3.14},{"type":"rangeSlider","label":"\u03b7","min":-5,"max":5,"step":0.1,"value":-5,"highValue":5},{"type":"rangeSlider","label":"Energy","min":0,"max":100000,"step":100,"value":0,"highValue":100000}],"children":[]},{"name":"Color Options","nodeLevel":4,"toggleState":true,"childrenActive":false,"configs":[{"type":"color","label":"Color"},{"type":"button","label":"Random"}],"children":[]}]},{"name":"AntiKt4LCTopoJets_xAOD","nodeLevel":3,"toggleState":true,"childrenActive":false,"configs":[],"children":[{"name":"Draw Options","nodeLevel":4,"toggleState":true,"childrenActive":false,"configs":[{"type":"slider","label":"Opacity","min":0.1,"step":0.1,"max":1},{"type":"checkbox","label":"Wireframe"}],"children":[]},{"name":"Cut Options","nodeLevel":4,"toggleState":true,"childrenActive":false,"configs":[{"type":"label","label":"Cuts"},{"type":"button","label":"Reset cuts"},{"type":"rangeSlider","label":"\u03d5","min":-3.14,"max":3.14,"step":0.01,"value":-3.14,"highValue":3.14},{"type":"rangeSlider","label":"\u03b7","min":-5,"max":5,"step":0.1,"value":-5,"highValue":5},{"type":"rangeSlider","label":"Energy","min":0,"max":100000,"step":100,"value":0,"highValue":100000}],"children":[]},{"name":"Color Options","nodeLevel":4,"toggleState":true,"childrenActive":false,"configs":[{"type":"color","label":"Color"},{"type":"button","label":"Random"}],"children":[]}]},{"name":"AntiKt10LCTopoJets_xAOD","nodeLevel":3,"toggleState":false,"childrenActive":false,"configs":[],"children":[{"name":"Draw Options","nodeLevel":4,"toggleState":false,"childrenActive":false,"configs":[{"type":"slider","label":"Opacity","min":0.1,"step":0.1,"max":1},{"type":"checkbox","label":"Wireframe"}],"children":[]},{"name":"Cut Options","nodeLevel":4,"toggleState":false,"childrenActive":false,"configs":[{"type":"label","label":"Cuts"},{"type":"button","label":"Reset cuts"},{"type":"rangeSlider","label":"\u03d5","min":-3.14,"max":3.14,"step":0.01,"value":-3.14,"highValue":3.14},{"type":"rangeSlider","label":"\u03b7","min":-5,"max":5,"step":0.1,"value":-5,"highValue":5},{"type":"rangeSlider","label":"Energy","min":0,"max":100000,"step":100,"value":0,"highValue":100000}],"children":[]},{"name":"Color Options","nodeLevel":4,"toggleState":false,"childrenActive":false,"configs":[{"type":"color","label":"Color"},{"type":"button","label":"Random"}],"children":[]}]}]},{"name":"Hits","nodeLevel":2,"toggleState":false,"childrenActive":false,"configs":[],"children":[{"name":"Pixel","nodeLevel":3,"toggleState":false,"childrenActive":false,"configs":[],"children":[{"name":"Draw Options","nodeLevel":4,"toggleState":true,"childrenActive":false,"configs":[{"type":"slider","label":"Opacity","min":0.1,"step":0.1,"max":1},{"type":"checkbox","label":"Wireframe"}],"children":[]},{"name":"Color Options","nodeLevel":4,"toggleState":true,"childrenActive":false,"configs":[{"type":"color","label":"Color"},{"type":"button","label":"Random"}],"children":[]}]},{"name":"SCT","nodeLevel":3,"toggleState":false,"childrenActive":false,"configs":[],"children":[{"name":"Draw Options","nodeLevel":4,"toggleState":true,"childrenActive":false,"configs":[{"type":"slider","label":"Opacity","min":0.1,"step":0.1,"max":1},{"type":"checkbox","label":"Wireframe"}],"children":[]},{"name":"Color Options","nodeLevel":4,"toggleState":true,"childrenActive":false,"configs":[{"type":"color","label":"Color"},{"type":"button","label":"Random"}],"children":[]}]},{"name":"TRT","nodeLevel":3,"toggleState":false,"childrenActive":false,"configs":[],"children":[{"name":"Draw Options","nodeLevel":4,"toggleState":true,"childrenActive":false,"configs":[{"type":"slider","label":"Opacity","min":0.1,"step":0.1,"max":1},{"type":"checkbox","label":"Wireframe"}],"children":[]},{"name":"Color Options","nodeLevel":4,"toggleState":true,"childrenActive":false,"configs":[{"type":"color","label":"Color"},{"type":"button","label":"Random"}],"children":[]}]},{"name":"MDT","nodeLevel":3,"toggleState":false,"childrenActive":false,"configs":[],"children":[{"name":"Draw Options","nodeLevel":4,"toggleState":true,"childrenActive":false,"configs":[{"type":"slider","label":"Opacity","min":0.1,"step":0.1,"max":1},{"type":"checkbox","label":"Wireframe"}],"children":[]},{"name":"Color Options","nodeLevel":4,"toggleState":true,"childrenActive":false,"configs":[{"type":"color","label":"Color"},{"type":"button","label":"Random"}],"children":[]}]},{"name":"RPC","nodeLevel":3,"toggleState":false,"childrenActive":false,"configs":[],"children":[{"name":"Draw Options","nodeLevel":4,"toggleState":true,"childrenActive":false,"configs":[{"type":"slider","label":"Opacity","min":0.1,"step":0.1,"max":1},{"type":"checkbox","label":"Wireframe"}],"children":[]},{"name":"Color Options","nodeLevel":4,"toggleState":true,"childrenActive":false,"configs":[{"type":"color","label":"Color"},{"type":"button","label":"Random"}],"children":[]}]},{"name":"TGC","nodeLevel":3,"toggleState":false,"childrenActive":false,"configs":[],"children":[{"name":"Draw Options","nodeLevel":4,"toggleState":true,"childrenActive":false,"configs":[{"type":"slider","label":"Opacity","min":0.1,"step":0.1,"max":1},{"type":"checkbox","label":"Wireframe"}],"children":[]},{"name":"Color Options","nodeLevel":4,"toggleState":true,"childrenActive":false,"configs":[{"type":"color","label":"Color"},{"type":"button","label":"Random"}],"children":[]}]},{"name":"CSC","nodeLevel":3,"toggleState":false,"childrenActive":false,"configs":[],"children":[{"name":"Draw Options","nodeLevel":4,"toggleState":true,"childrenActive":false,"configs":[{"type":"slider","label":"Opacity","min":0.1,"step":0.1,"max":1},{"type":"checkbox","label":"Wireframe"}],"children":[]},{"name":"Color Options","nodeLevel":4,"toggleState":true,"childrenActive":false,"configs":[{"type":"color","label":"Color"},{"type":"button","label":"Random"}],"children":[]}]}]},{"name":"CaloClusters","nodeLevel":2,"toggleState":true,"childrenActive":false,"configs":[{"type":"slider","label":"CaloClusters Scale","value":1,"min":0.001,"step":0.01,"max":100,"allowCustomValue":true}],"children":[{"name":"egammaClusters_xAOD","nodeLevel":3,"toggleState":false,"childrenActive":false,"configs":[],"children":[{"name":"Draw Options","nodeLevel":4,"toggleState":false,"childrenActive":false,"configs":[{"type":"slider","label":"Opacity","min":0.1,"step":0.1,"max":1},{"type":"checkbox","label":"Wireframe"}],"children":[]},{"name":"Cut Options","nodeLevel":4,"toggleState":false,"childrenActive":false,"configs":[{"type":"label","label":"Cuts"},{"type":"button","label":"Reset cuts"},{"type":"rangeSlider","label":"\u03d5","min":-3.14,"max":3.14,"step":0.01,"value":-3.14,"highValue":3.14},{"type":"rangeSlider","label":"\u03b7","min":-5,"max":5,"step":0.1,"value":-5,"highValue":5},{"type":"rangeSlider","label":"Energy","min":0,"max":10000,"step":1,"value":0,"highValue":10000}],"children":[]},{"name":"Color Options","nodeLevel":4,"toggleState":false,"childrenActive":false,"configs":[{"type":"color","label":"Color"},{"type":"button","label":"Random"}],"children":[]}]},{"name":"CaloCalTopoClusters","nodeLevel":3,"toggleState":true,"childrenActive":false,"configs":[],"children":[{"name":"Draw Options","nodeLevel":4,"toggleState":true,"childrenActive":false,"configs":[{"type":"slider","label":"Opacity","min":0.1,"step":0.1,"max":1},{"type":"checkbox","label":"Wireframe"}],"children":[]},{"name":"Cut Options","nodeLevel":4,"toggleState":true,"childrenActive":false,"configs":[{"type":"label","label":"Cuts"},{"type":"button","label":"Reset cuts"},{"type":"rangeSlider","label":"\u03d5","min":-3.14,"max":3.14,"step":0.01,"value":-3.14,"highValue":3.14},{"type":"rangeSlider","label":"\u03b7","min":-5,"max":5,"step":0.1,"value":-5,"highValue":5},{"type":"rangeSlider","label":"Energy","min":0,"max":10000,"step":1,"value":0,"highValue":10000}],"children":[]},{"name":"Color Options","nodeLevel":4,"toggleState":true,"childrenActive":false,"configs":[{"type":"color","label":"Color"},{"type":"button","label":"Random"}],"children":[]}]}]},{"name":"CaloCells","nodeLevel":2,"toggleState":false,"childrenActive":false,"configs":[],"children":[{"name":"LAr","nodeLevel":3,"toggleState":false,"childrenActive":false,"configs":[],"children":[{"name":"Draw Options","nodeLevel":4,"toggleState":false,"childrenActive":false,"configs":[{"type":"slider","label":"Opacity","min":0.1,"step":0.1,"max":1},{"type":"checkbox","label":"Wireframe"}],"children":[]},{"name":"Cut Options","nodeLevel":4,"toggleState":false,"childrenActive":false,"configs":[{"type":"label","label":"Cuts"},{"type":"button","label":"Reset cuts"},{"type":"rangeSlider","label":"\u03d5","min":-3.14,"max":3.14,"step":0.01,"value":-3.14,"highValue":3.14},{"type":"rangeSlider","label":"\u03b7","min":-5,"max":5,"step":0.1,"value":-5,"highValue":5},{"type":"rangeSlider","label":"Energy","min":0,"max":10000,"step":1,"value":0,"highValue":10000}],"children":[]},{"name":"Color Options","nodeLevel":4,"toggleState":false,"childrenActive":false,"configs":[{"type":"color","label":"Color"},{"type":"button","label":"Random"}],"children":[]}]},{"name":"HEC","nodeLevel":3,"toggleState":false,"childrenActive":false,"configs":[],"children":[{"name":"Draw Options","nodeLevel":4,"toggleState":false,"childrenActive":false,"configs":[{"type":"slider","label":"Opacity","min":0.1,"step":0.1,"max":1},{"type":"checkbox","label":"Wireframe"}],"children":[]},{"name":"Cut Options","nodeLevel":4,"toggleState":false,"childrenActive":false,"configs":[{"type":"label","label":"Cuts"},{"type":"button","label":"Reset cuts"},{"type":"rangeSlider","label":"\u03d5","min":-3.14,"max":3.14,"step":0.01,"value":-3.14,"highValue":3.14},{"type":"rangeSlider","label":"\u03b7","min":-5,"max":5,"step":0.1,"value":-5,"highValue":5},{"type":"rangeSlider","label":"Energy","min":0,"max":10000,"step":1,"value":0,"highValue":10000}],"children":[]},{"name":"Color Options","nodeLevel":4,"toggleState":false,"childrenActive":false,"configs":[{"type":"color","label":"Color"},{"type":"button","label":"Random"}],"children":[]}]}]},{"name":"PlanarCaloCells","nodeLevel":2,"toggleState":false,"childrenActive":false,"configs":[{"type":"slider","label":"PlanarCaloCells Scale","value":1,"min":0.001,"step":0.01,"max":100,"allowCustomValue":true}],"children":[]},{"name":"Muons","nodeLevel":2,"toggleState":false,"childrenActive":false,"configs":[],"children":[{"name":"Muons_xAOD","nodeLevel":3,"toggleState":false,"childrenActive":false,"configs":[],"children":[{"name":"Draw Options","nodeLevel":4,"toggleState":true,"childrenActive":false,"configs":[{"type":"slider","label":"Opacity","min":0.1,"step":0.1,"max":1},{"type":"checkbox","label":"Wireframe"}],"children":[]},{"name":"Cut Options","nodeLevel":4,"toggleState":true,"childrenActive":false,"configs":[{"type":"label","label":"Cuts"},{"type":"button","label":"Reset cuts"},{"type":"rangeSlider","label":"\u03d5","min":-3.14,"max":3.14,"step":0.01,"value":-3.14,"highValue":3.14},{"type":"rangeSlider","label":"\u03b7","min":-4,"max":4,"step":0.1,"value":-4,"highValue":4},{"type":"rangeSlider","label":"Energy","min":0,"max":10000,"step":1,"value":0,"highValue":10000}],"children":[]},{"name":"Color Options","nodeLevel":4,"toggleState":true,"childrenActive":false,"configs":[{"type":"color","label":"Color"},{"type":"button","label":"Random"}],"children":[]}]},{"name":"Muons","nodeLevel":3,"toggleState":false,"childrenActive":false,"configs":[],"children":[{"name":"Draw Options","nodeLevel":4,"toggleState":true,"childrenActive":false,"configs":[{"type":"slider","label":"Opacity","min":0.1,"step":0.1,"max":1},{"type":"checkbox","label":"Wireframe"}],"children":[]},{"name":"Cut Options","nodeLevel":4,"toggleState":true,"childrenActive":false,"configs":[{"type":"label","label":"Cuts"},{"type":"button","label":"Reset cuts"},{"type":"rangeSlider","label":"\u03d5","min":-3.14,"max":3.14,"step":0.01,"value":-3.14,"highValue":3.14},{"type":"rangeSlider","label":"\u03b7","min":-4,"max":4,"step":0.1,"value":-4,"highValue":4},{"type":"rangeSlider","label":"Energy","min":0,"max":10000,"step":1,"value":0,"highValue":10000}],"children":[]},{"name":"Color Options","nodeLevel":4,"toggleState":true,"childrenActive":false,"configs":[{"type":"color","label":"Color"},{"type":"button","label":"Random"}],"children":[]}]}]},{"name":"Photons","nodeLevel":2,"toggleState":true,"childrenActive":false,"configs":[],"children":[{"name":"Photons_xAOD","nodeLevel":3,"toggleState":true,"childrenActive":false,"configs":[],"children":[{"name":"Draw Options","nodeLevel":4,"toggleState":true,"childrenActive":false,"configs":[{"type":"slider","label":"Opacity","min":0.1,"step":0.1,"max":1},{"type":"checkbox","label":"Wireframe"}],"children":[]},{"name":"Cut Options","nodeLevel":4,"toggleState":true,"childrenActive":false,"configs":[{"type":"label","label":"Cuts"},{"type":"button","label":"Reset cuts"},{"type":"rangeSlider","label":"\u03d5","min":-3.14,"max":3.14,"step":0.01,"value":-3.14,"highValue":3.14},{"type":"rangeSlider","label":"\u03b7","min":-4,"max":4,"step":0.1,"value":-4,"highValue":4},{"type":"rangeSlider","label":"Energy","min":0,"max":10000,"step":1,"value":0,"highValue":10000}],"children":[]},{"name":"Color Options","nodeLevel":4,"toggleState":true,"childrenActive":false,"configs":[{"type":"color","label":"Color"},{"type":"button","label":"Random"}],"children":[]}]}]},{"name":"Electrons","nodeLevel":2,"toggleState":true,"childrenActive":false,"configs":[],"children":[{"name":"Electrons_xAOD","nodeLevel":3,"toggleState":true,"childrenActive":false,"configs":[],"children":[{"name":"Draw Options","nodeLevel":4,"toggleState":true,"childrenActive":false,"configs":[{"type":"slider","label":"Opacity","min":0.1,"step":0.1,"max":1},{"type":"checkbox","label":"Wireframe"}],"children":[]},{"name":"Cut Options","nodeLevel":4,"toggleState":true,"childrenActive":false,"configs":[{"type":"label","label":"Cuts"},{"type":"button","label":"Reset cuts"},{"type":"rangeSlider","label":"\u03d5","min":-3.14,"max":3.14,"step":0.01,"value":-3.14,"highValue":3.14},{"type":"rangeSlider","label":"\u03b7","min":-4,"max":4,"step":0.1,"value":-4,"highValue":4},{"type":"rangeSlider","label":"Energy","min":0,"max":10000,"step":1,"value":0,"highValue":10000}],"children":[]},{"name":"Color Options","nodeLevel":4,"toggleState":true,"childrenActive":false,"configs":[{"type":"color","label":"Color"},{"type":"button","label":"Random"}],"children":[]}]},{"name":"ForwardElectrons_xAOD","nodeLevel":3,"toggleState":true,"childrenActive":false,"configs":[],"children":[{"name":"Draw Options","nodeLevel":4,"toggleState":true,"childrenActive":false,"configs":[{"type":"slider","label":"Opacity","min":0.1,"step":0.1,"max":1},{"type":"checkbox","label":"Wireframe"}],"children":[]},{"name":"Cut Options","nodeLevel":4,"toggleState":true,"childrenActive":false,"configs":[{"type":"label","label":"Cuts"},{"type":"button","label":"Reset cuts"},{"type":"rangeSlider","label":"\u03d5","min":-3.14,"max":3.14,"step":0.01,"value":-3.14,"highValue":3.14},{"type":"rangeSlider","label":"\u03b7","min":-4,"max":4,"step":0.1,"value":-4,"highValue":4},{"type":"rangeSlider","label":"Energy","min":0,"max":10000,"step":1,"value":0,"highValue":10000}],"children":[]},{"name":"Color Options","nodeLevel":4,"toggleState":true,"childrenActive":false,"configs":[{"type":"color","label":"Color"},{"type":"button","label":"Random"}],"children":[]}]},{"name":"HLT_xAOD__ElectronContainer_egamma_Electrons_xAOD","nodeLevel":3,"toggleState":true,"childrenActive":false,"configs":[],"children":[{"name":"Draw Options","nodeLevel":4,"toggleState":true,"childrenActive":false,"configs":[{"type":"slider","label":"Opacity","min":0.1,"step":0.1,"max":1},{"type":"checkbox","label":"Wireframe"}],"children":[]},{"name":"Cut Options","nodeLevel":4,"toggleState":true,"childrenActive":false,"configs":[{"type":"label","label":"Cuts"},{"type":"button","label":"Reset cuts"},{"type":"rangeSlider","label":"\u03d5","min":-3.14,"max":3.14,"step":0.01,"value":-3.14,"highValue":3.14},{"type":"rangeSlider","label":"\u03b7","min":-4,"max":4,"step":0.1,"value":-4,"highValue":4},{"type":"rangeSlider","label":"Energy","min":0,"max":10000,"step":1,"value":0,"highValue":10000}],"children":[]},{"name":"Color Options","nodeLevel":4,"toggleState":true,"childrenActive":false,"configs":[{"type":"color","label":"Color"},{"type":"button","label":"Random"}],"children":[]}]}]},{"name":"Vertices","nodeLevel":2,"toggleState":true,"childrenActive":false,"configs":[{"type":"slider","label":"Vertices Scale","value":1,"min":0.001,"step":0.01,"max":100,"allowCustomValue":true}],"children":[{"name":"Vertices_xAOD","nodeLevel":3,"toggleState":true,"childrenActive":false,"configs":[],"children":[{"name":"Draw Options","nodeLevel":4,"toggleState":true,"childrenActive":false,"configs":[{"type":"slider","label":"Opacity","min":0.1,"step":0.1,"max":1},{"type":"checkbox","label":"Wireframe"}],"children":[]},{"name":"Cut Options","nodeLevel":4,"toggleState":true,"childrenActive":false,"configs":[{"type":"label","label":"Cuts"},{"type":"button","label":"Reset cuts"},{"type":"rangeSlider","label":"vertexType","min":0,"max":5,"step":1,"value":0,"highValue":5}],"children":[]},{"name":"Color Options","nodeLevel":4,"toggleState":true,"childrenActive":false,"configs":[{"type":"color","label":"Color"},{"type":"button","label":"Random"}],"children":[]}]}]},{"name":"MissingEnergy","nodeLevel":2,"toggleState":true,"childrenActive":false,"configs":[{"type":"slider","label":"Size (%)","value":100,"min":1,"max":200,"allowCustomValue":true}],"children":[{"name":"MET_Reference_AntiKt4EMTopo_xAOD","nodeLevel":3,"toggleState":true,"childrenActive":false,"configs":[],"children":[{"name":"Draw Options","nodeLevel":4,"toggleState":true,"childrenActive":false,"configs":[{"type":"slider","label":"Opacity","min":0.1,"step":0.1,"max":1},{"type":"checkbox","label":"Wireframe"}],"children":[]},{"name":"Color Options","nodeLevel":4,"toggleState":true,"childrenActive":false,"configs":[{"type":"color","label":"Color"},{"type":"button","label":"Random"}],"children":[]}]},{"name":"MET_Calo_xAOD","nodeLevel":3,"toggleState":true,"childrenActive":false,"configs":[],"children":[{"name":"Draw Options","nodeLevel":4,"toggleState":true,"childrenActive":false,"configs":[{"type":"slider","label":"Opacity","min":0.1,"step":0.1,"max":1},{"type":"checkbox","label":"Wireframe"}],"children":[]},{"name":"Color Options","nodeLevel":4,"toggleState":true,"childrenActive":false,"configs":[{"type":"color","label":"Color"},{"type":"button","label":"Random"}],"children":[]}]},{"name":"MET_LocHadTopo_xAOD","nodeLevel":3,"toggleState":true,"childrenActive":false,"configs":[],"children":[{"name":"Draw Options","nodeLevel":4,"toggleState":true,"childrenActive":false,"configs":[{"type":"slider","label":"Opacity","min":0.1,"step":0.1,"max":1},{"type":"checkbox","label":"Wireframe"}],"children":[]},{"name":"Color Options","nodeLevel":4,"toggleState":true,"childrenActive":false,"configs":[{"type":"color","label":"Color"},{"type":"button","label":"Random"}],"children":[]}]},{"name":"MET_Core_AntiKt4LCTopo_xAOD","nodeLevel":3,"toggleState":true,"childrenActive":false,"configs":[],"children":[{"name":"Draw Options","nodeLevel":4,"toggleState":true,"childrenActive":false,"configs":[{"type":"slider","label":"Opacity","min":0.1,"step":0.1,"max":1},{"type":"checkbox","label":"Wireframe"}],"children":[]},{"name":"Color Options","nodeLevel":4,"toggleState":true,"childrenActive":false,"configs":[{"type":"color","label":"Color"},{"type":"button","label":"Random"}],"children":[]}]}]}]},{"name":"Labels","nodeLevel":1,"toggleState":true,"childrenActive":false,"configs":[{"type":"slider","label":"Size","min":0,"max":10,"step":0.01,"allowCustomValue":true},{"type":"color","label":"Color","color":"#a8a8a8"},{"type":"button","label":"Save Labels"},{"type":"button","label":"Load Labels"}],"children":[]}]},"eventDisplay":{"cameraPosition":[3096.1557286722164,2821.4315307500133,4232.068942374551],"startClippingAngle":0,"openingClippingAngle":90}}');let lF;try{lF=typeof Intl<"u"&&Intl.v8BreakIterator}catch{lF=!1}let CS,iD,Ib,cF,Ku=(()=>{class i{constructor(t){this._platformId=t,this.isBrowser=this._platformId?function Dj(i){return i===eL}(this._platformId):"object"==typeof document&&!!document,this.EDGE=this.isBrowser&&/(edge)/i.test(navigator.userAgent),this.TRIDENT=this.isBrowser&&/(msie|trident)/i.test(navigator.userAgent),this.BLINK=this.isBrowser&&!(!window.chrome&&!lF)&&typeof CSS<"u"&&!this.EDGE&&!this.TRIDENT,this.WEBKIT=this.isBrowser&&/AppleWebKit/i.test(navigator.userAgent)&&!this.BLINK&&!this.EDGE&&!this.TRIDENT,this.IOS=this.isBrowser&&/iPad|iPhone|iPod/.test(navigator.userAgent)&&!("MSStream"in window),this.FIREFOX=this.isBrowser&&/(firefox|minefield)/i.test(navigator.userAgent),this.ANDROID=this.isBrowser&&/android/i.test(navigator.userAgent)&&!this.TRIDENT,this.SAFARI=this.isBrowser&&/safari/i.test(navigator.userAgent)&&this.WEBKIT}}return i.\u0275fac=function(t){return new(t||i)(ci(GT))},i.\u0275prov=Ue({token:i,factory:i.\u0275fac,providedIn:"root"}),i})();function p0(i){return function Bae(){if(null==CS&&typeof window<"u")try{window.addEventListener("test",null,Object.defineProperty({},"passive",{get:()=>CS=!0}))}finally{CS=CS||!1}return CS}()?i:!!i.capture}function tz(){if(null==Ib){if("object"!=typeof document||!document||"function"!=typeof Element||!Element)return Ib=!1,Ib;if("scrollBehavior"in document.documentElement.style)Ib=!0;else{const i=Element.prototype.scrollTo;Ib=!!i&&!/\{\s*\[native code\]\s*\}/.test(i.toString())}}return Ib}function MS(){if("object"!=typeof document||!document)return 0;if(null==iD){const i=document.createElement("div"),e=i.style;i.dir="rtl",e.width="1px",e.overflow="auto",e.visibility="hidden",e.pointerEvents="none",e.position="absolute";const t=document.createElement("div"),n=t.style;n.width="2px",n.height="1px",i.appendChild(t),document.body.appendChild(i),iD=0,0===i.scrollLeft&&(i.scrollLeft=1,iD=0===i.scrollLeft?1:2),i.remove()}return iD}function uF(i){if(function Iae(){if(null==cF){const i=typeof document<"u"?document.head:null;cF=!(!i||!i.createShadowRoot&&!i.attachShadow)}return cF}()){const e=i.getRootNode?i.getRootNode():null;if(typeof ShadowRoot<"u"&&ShadowRoot&&e instanceof ShadowRoot)return e}return null}function hF(){let i=typeof document<"u"&&document?document.activeElement:null;for(;i&&i.shadowRoot;){const e=i.shadowRoot.activeElement;if(e===i)break;i=e}return i}function GA(i){return i.composedPath?i.composedPath()[0]:i.target}function dF(){return typeof __karma__<"u"&&!!__karma__||typeof jasmine<"u"&&!!jasmine||typeof jest<"u"&&!!jest||typeof Mocha<"u"&&!!Mocha}function v2(i,...e){return e.length?e.some(t=>i[t]):i.altKey||i.shiftKey||i.ctrlKey||i.metaKey}class Wae extends De{constructor(e,t){super()}schedule(e,t=0){return this}}const sD={setInterval(i,e,...t){const{delegate:n}=sD;return n?.setInterval?n.setInterval(i,e,...t):setInterval(i,e,...t)},clearInterval(i){const{delegate:e}=sD;return(e?.clearInterval||clearInterval)(i)},delegate:void 0};class AF extends Wae{constructor(e,t){super(e,t),this.scheduler=e,this.work=t,this.pending=!1}schedule(e,t=0){var n;if(this.closed)return this;this.state=e;const r=this.id,s=this.scheduler;return null!=r&&(this.id=this.recycleAsyncId(s,r,t)),this.pending=!0,this.delay=t,this.id=null!==(n=this.id)&&void 0!==n?n:this.requestAsyncId(s,this.id,t),this}requestAsyncId(e,t,n=0){return sD.setInterval(e.flush.bind(e,this),n)}recycleAsyncId(e,t,n=0){if(null!=n&&this.delay===n&&!1===this.pending)return t;null!=t&&sD.clearInterval(t)}execute(e,t){if(this.closed)return new Error("executing a cancelled action");this.pending=!1;const n=this._execute(e,t);if(n)return n;!1===this.pending&&null!=this.id&&(this.id=this.recycleAsyncId(this.scheduler,this.id,null))}_execute(e,t){let r,n=!1;try{this.work(e)}catch(s){n=!0,r=s||new Error("Scheduled action threw falsy error")}if(n)return this.unsubscribe(),r}unsubscribe(){if(!this.closed){const{id:e,scheduler:t}=this,{actions:n}=t;this.work=this.state=this.scheduler=null,this.pending=!1,_e(n,this),null!=e&&(this.id=this.recycleAsyncId(t,e,null)),this.delay=null,super.unsubscribe()}}}const oz={now:()=>(oz.delegate||Date).now(),delegate:void 0};class SS{constructor(e,t=SS.now){this.schedulerActionCtor=e,this.now=t}schedule(e,t=0,n){return new this.schedulerActionCtor(this,e).schedule(n,t)}}SS.now=oz.now;class mF extends SS{constructor(e,t=SS.now){super(e,t),this.actions=[],this._active=!1}flush(e){const{actions:t}=this;if(this._active)return void t.push(e);let n;this._active=!0;do{if(n=e.execute(e.state,e.delay))break}while(e=t.shift());if(this._active=!1,n){for(;e=t.shift();)e.unsubscribe();throw n}}}const b2=new mF(AF),jae=b2;function gF(i,e=b2){return Ee((t,n)=>{let r=null,s=null,a=null;const l=()=>{if(r){r.unsubscribe(),r=null;const d=s;s=null,n.next(d)}};function u(){const d=a+i,p=e.now();if(p{s=d,a=e.now(),r||(r=e.schedule(u,i),n.add(r))},()=>{l(),n.complete()},void 0,()=>{s=r=null}))})}function _F(i){return tu((e,t)=>i<=t)}function oD(i,e=re){return i=i??$ae,Ee((t,n)=>{let r,s=!0;t.subscribe(Ge(n,a=>{const l=e(a);(s||!i(r,l))&&(s=!1,r=l,n.next(a))}))})}function $ae(i,e){return i===e}function ql(i){return Ee((e,t)=>{$o(i).subscribe(Ge(t,()=>t.complete(),Z)),!t.closed&&e.subscribe(t)})}function pa(i){return null!=i&&"false"!=`${i}`}function gc(i,e=0){return function Xae(i){return!isNaN(parseFloat(i))&&!isNaN(Number(i))}(i)?Number(i):e}function TS(i){return Array.isArray(i)?i:[i]}function Yu(i){return null==i?"":"string"==typeof i?i:`${i}px`}function Zu(i){return i instanceof Cs?i.nativeElement:i}let az=(()=>{class i{create(t){return typeof MutationObserver>"u"?null:new MutationObserver(t)}}return i.\u0275fac=function(t){return new(t||i)},i.\u0275prov=Ue({token:i,factory:i.\u0275fac,providedIn:"root"}),i})(),Kae=(()=>{class i{constructor(t){this._mutationObserverFactory=t,this._observedElements=new Map}ngOnDestroy(){this._observedElements.forEach((t,n)=>this._cleanupObserver(n))}observe(t){const n=Zu(t);return new de(r=>{const a=this._observeElement(n).subscribe(r);return()=>{a.unsubscribe(),this._unobserveElement(n)}})}_observeElement(t){if(this._observedElements.has(t))this._observedElements.get(t).count++;else{const n=new D,r=this._mutationObserverFactory.create(s=>n.next(s));r&&r.observe(t,{characterData:!0,childList:!0,subtree:!0}),this._observedElements.set(t,{observer:r,stream:n,count:1})}return this._observedElements.get(t).stream}_unobserveElement(t){this._observedElements.has(t)&&(this._observedElements.get(t).count--,this._observedElements.get(t).count||this._cleanupObserver(t))}_cleanupObserver(t){if(this._observedElements.has(t)){const{observer:n,stream:r}=this._observedElements.get(t);n&&n.disconnect(),r.complete(),this._observedElements.delete(t)}}}return i.\u0275fac=function(t){return new(t||i)(ci(az))},i.\u0275prov=Ue({token:i,factory:i.\u0275fac,providedIn:"root"}),i})(),Yae=(()=>{class i{get disabled(){return this._disabled}set disabled(t){this._disabled=pa(t),this._disabled?this._unsubscribe():this._subscribe()}get debounce(){return this._debounce}set debounce(t){this._debounce=gc(t),this._subscribe()}constructor(t,n,r){this._contentObserver=t,this._elementRef=n,this._ngZone=r,this.event=new Ws,this._disabled=!1,this._currentSubscription=null}ngAfterContentInit(){!this._currentSubscription&&!this.disabled&&this._subscribe()}ngOnDestroy(){this._unsubscribe()}_subscribe(){this._unsubscribe();const t=this._contentObserver.observe(this._elementRef);this._ngZone.runOutsideAngular(()=>{this._currentSubscription=(this.debounce?t.pipe(gF(this.debounce)):t).subscribe(this.event)})}_unsubscribe(){this._currentSubscription?.unsubscribe()}}return i.\u0275fac=function(t){return new(t||i)(wt(Kae),wt(Cs),wt(mo))},i.\u0275dir=Oi({type:i,selectors:[["","cdkObserveContent",""]],inputs:{disabled:["cdkObserveContentDisabled","disabled"],debounce:"debounce"},outputs:{event:"cdkObserveContent"},exportAs:["cdkObserveContent"]}),i})(),lz=(()=>{class i{}return i.\u0275fac=function(t){return new(t||i)},i.\u0275mod=ia({type:i}),i.\u0275inj=ft({providers:[az]}),i})();const cz=new Set;let x2,Zae=(()=>{class i{constructor(t){this._platform=t,this._matchMedia=this._platform.isBrowser&&window.matchMedia?window.matchMedia.bind(window):ele}matchMedia(t){return(this._platform.WEBKIT||this._platform.BLINK)&&function Jae(i){if(!cz.has(i))try{x2||(x2=document.createElement("style"),x2.setAttribute("type","text/css"),document.head.appendChild(x2)),x2.sheet&&(x2.sheet.insertRule(`@media ${i} {body{ }}`,0),cz.add(i))}catch(e){console.error(e)}}(t),this._matchMedia(t)}}return i.\u0275fac=function(t){return new(t||i)(ci(Ku))},i.\u0275prov=Ue({token:i,factory:i.\u0275fac,providedIn:"root"}),i})();function ele(i){return{matches:"all"===i||""===i,media:i,addListener:()=>{},removeListener:()=>{}}}let tle=(()=>{class i{constructor(t,n){this._mediaMatcher=t,this._zone=n,this._queries=new Map,this._destroySubject=new D}ngOnDestroy(){this._destroySubject.next(),this._destroySubject.complete()}isMatched(t){return uz(TS(t)).some(r=>this._registerQuery(r).mql.matches)}observe(t){let s=AI(uz(TS(t)).map(a=>this._registerQuery(a).observable));return s=uM(s.pipe(nu(1)),s.pipe(_F(1),gF(0))),s.pipe(et(a=>{const l={matches:!1,breakpoints:{}};return a.forEach(({matches:u,query:d})=>{l.matches=l.matches||u,l.breakpoints[d]=u}),l}))}_registerQuery(t){if(this._queries.has(t))return this._queries.get(t);const n=this._mediaMatcher.matchMedia(t),s={observable:new de(a=>{const l=u=>this._zone.run(()=>a.next(u));return n.addListener(l),()=>{n.removeListener(l)}}).pipe(op(n),et(({matches:a})=>({query:t,matches:a})),ql(this._destroySubject)),mql:n};return this._queries.set(t,s),s}}return i.\u0275fac=function(t){return new(t||i)(ci(Zae),ci(mo))},i.\u0275prov=Ue({token:i,factory:i.\u0275fac,providedIn:"root"}),i})();function uz(i){return i.map(e=>e.split(",")).reduce((e,t)=>e.concat(t)).map(e=>e.trim())}function aD(i,e){return(i.getAttribute(e)||"").match(/\S+/g)||[]}const dz="cdk-describedby-message",lD="cdk-describedby-host";let yF=0,rle=(()=>{class i{constructor(t,n){this._platform=n,this._messageRegistry=new Map,this._messagesContainer=null,this._id=""+yF++,this._document=t,this._id=To(lw)+"-"+yF++}describe(t,n,r){if(!this._canBeDescribed(t,n))return;const s=vF(n,r);"string"!=typeof n?(fz(n,this._id),this._messageRegistry.set(s,{messageElement:n,referenceCount:0})):this._messageRegistry.has(s)||this._createMessageElement(n,r),this._isElementDescribedByMessage(t,s)||this._addMessageReference(t,s)}removeDescription(t,n,r){if(!n||!this._isElementNode(t))return;const s=vF(n,r);if(this._isElementDescribedByMessage(t,s)&&this._removeMessageReference(t,s),"string"==typeof n){const a=this._messageRegistry.get(s);a&&0===a.referenceCount&&this._deleteMessageElement(s)}0===this._messagesContainer?.childNodes.length&&(this._messagesContainer.remove(),this._messagesContainer=null)}ngOnDestroy(){const t=this._document.querySelectorAll(`[${lD}="${this._id}"]`);for(let n=0;n0!=r.indexOf(dz));t.setAttribute("aria-describedby",n.join(" "))}_addMessageReference(t,n){const r=this._messageRegistry.get(n);(function nle(i,e,t){const n=aD(i,e);n.some(r=>r.trim()==t.trim())||(n.push(t.trim()),i.setAttribute(e,n.join(" ")))})(t,"aria-describedby",r.messageElement.id),t.setAttribute(lD,this._id),r.referenceCount++}_removeMessageReference(t,n){const r=this._messageRegistry.get(n);r.referenceCount--,function ile(i,e,t){const r=aD(i,e).filter(s=>s!=t.trim());r.length?i.setAttribute(e,r.join(" ")):i.removeAttribute(e)}(t,"aria-describedby",r.messageElement.id),t.removeAttribute(lD)}_isElementDescribedByMessage(t,n){const r=aD(t,"aria-describedby"),s=this._messageRegistry.get(n),a=s&&s.messageElement.id;return!!a&&-1!=r.indexOf(a)}_canBeDescribed(t,n){if(!this._isElementNode(t))return!1;if(n&&"object"==typeof n)return!0;const r=null==n?"":`${n}`.trim(),s=t.getAttribute("aria-label");return!(!r||s&&s.trim()===r)}_isElementNode(t){return t.nodeType===this._document.ELEMENT_NODE}}return i.\u0275fac=function(t){return new(t||i)(ci(Zo),ci(Ku))},i.\u0275prov=Ue({token:i,factory:i.\u0275fac,providedIn:"root"}),i})();function vF(i,e){return"string"==typeof i?`${e||""}/${i}`:i}function fz(i,e){i.id||(i.id=`${dz}-${e}-${yF++}`)}class sle{constructor(e){this._items=e,this._activeItemIndex=-1,this._activeItem=null,this._wrap=!1,this._letterKeyStream=new D,this._typeaheadSubscription=De.EMPTY,this._vertical=!0,this._allowedModifierKeys=[],this._homeAndEnd=!1,this._pageUpAndDown={enabled:!1,delta:10},this._skipPredicateFn=t=>t.disabled,this._pressedLetters=[],this.tabOut=new D,this.change=new D,e instanceof Hv&&(this._itemChangesSubscription=e.changes.subscribe(t=>{if(this._activeItem){const r=t.toArray().indexOf(this._activeItem);r>-1&&r!==this._activeItemIndex&&(this._activeItemIndex=r)}}))}skipPredicate(e){return this._skipPredicateFn=e,this}withWrap(e=!0){return this._wrap=e,this}withVerticalOrientation(e=!0){return this._vertical=e,this}withHorizontalOrientation(e){return this._horizontal=e,this}withAllowedModifierKeys(e){return this._allowedModifierKeys=e,this}withTypeAhead(e=200){return this._typeaheadSubscription.unsubscribe(),this._typeaheadSubscription=this._letterKeyStream.pipe(Dc(t=>this._pressedLetters.push(t)),gF(e),tu(()=>this._pressedLetters.length>0),et(()=>this._pressedLetters.join(""))).subscribe(t=>{const n=this._getItemsArray();for(let r=1;r!e[s]||this._allowedModifierKeys.indexOf(s)>-1);switch(t){case 9:return void this.tabOut.next();case 40:if(this._vertical&&r){this.setNextItemActive();break}return;case 38:if(this._vertical&&r){this.setPreviousItemActive();break}return;case 39:if(this._horizontal&&r){"rtl"===this._horizontal?this.setPreviousItemActive():this.setNextItemActive();break}return;case 37:if(this._horizontal&&r){"rtl"===this._horizontal?this.setNextItemActive():this.setPreviousItemActive();break}return;case 36:if(this._homeAndEnd&&r){this.setFirstItemActive();break}return;case 35:if(this._homeAndEnd&&r){this.setLastItemActive();break}return;case 33:if(this._pageUpAndDown.enabled&&r){const s=this._activeItemIndex-this._pageUpAndDown.delta;this._setActiveItemByIndex(s>0?s:0,1);break}return;case 34:if(this._pageUpAndDown.enabled&&r){const s=this._activeItemIndex+this._pageUpAndDown.delta,a=this._getItemsArray().length;this._setActiveItemByIndex(s=65&&t<=90||t>=48&&t<=57)&&this._letterKeyStream.next(String.fromCharCode(t))))}this._pressedLetters=[],e.preventDefault()}get activeItemIndex(){return this._activeItemIndex}get activeItem(){return this._activeItem}isTyping(){return this._pressedLetters.length>0}setFirstItemActive(){this._setActiveItemByIndex(0,1)}setLastItemActive(){this._setActiveItemByIndex(this._items.length-1,-1)}setNextItemActive(){this._activeItemIndex<0?this.setFirstItemActive():this._setActiveItemByDelta(1)}setPreviousItemActive(){this._activeItemIndex<0&&this._wrap?this.setLastItemActive():this._setActiveItemByDelta(-1)}updateActiveItem(e){const t=this._getItemsArray(),n="number"==typeof e?e:t.indexOf(e);this._activeItem=t[n]??null,this._activeItemIndex=n}destroy(){this._typeaheadSubscription.unsubscribe(),this._itemChangesSubscription?.unsubscribe(),this._letterKeyStream.complete(),this.tabOut.complete(),this.change.complete(),this._pressedLetters=[]}_setActiveItemByDelta(e){this._wrap?this._setActiveInWrapMode(e):this._setActiveInDefaultMode(e)}_setActiveInWrapMode(e){const t=this._getItemsArray();for(let n=1;n<=t.length;n++){const r=(this._activeItemIndex+e*n+t.length)%t.length;if(!this._skipPredicateFn(t[r]))return void this.setActiveItem(r)}}_setActiveInDefaultMode(e){this._setActiveItemByIndex(this._activeItemIndex+e,e)}_setActiveItemByIndex(e,t){const n=this._getItemsArray();if(n[e]){for(;this._skipPredicateFn(n[e]);)if(!n[e+=t])return;this.setActiveItem(e)}}_getItemsArray(){return this._items instanceof Hv?this._items.toArray():this._items}}class pz extends sle{constructor(){super(...arguments),this._origin="program"}setFocusOrigin(e){return this._origin=e,this}setActiveItem(e){super.setActiveItem(e),this.activeItem&&this.activeItem.focus(this._origin)}}let cD=(()=>{class i{constructor(t){this._platform=t}isDisabled(t){return t.hasAttribute("disabled")}isVisible(t){return function ale(i){return!!(i.offsetWidth||i.offsetHeight||"function"==typeof i.getClientRects&&i.getClientRects().length)}(t)&&"visible"===getComputedStyle(t).visibility}isTabbable(t){if(!this._platform.isBrowser)return!1;const n=function ole(i){try{return i.frameElement}catch{return null}}(function Ale(i){return i.ownerDocument&&i.ownerDocument.defaultView||window}(t));if(n&&(-1===mz(n)||!this.isVisible(n)))return!1;let r=t.nodeName.toLowerCase(),s=mz(t);return t.hasAttribute("contenteditable")?-1!==s:!("iframe"===r||"object"===r||this._platform.WEBKIT&&this._platform.IOS&&!function fle(i){let e=i.nodeName.toLowerCase(),t="input"===e&&i.type;return"text"===t||"password"===t||"select"===e||"textarea"===e}(t))&&("audio"===r?!!t.hasAttribute("controls")&&-1!==s:"video"===r?-1!==s&&(null!==s||this._platform.FIREFOX||t.hasAttribute("controls")):t.tabIndex>=0)}isFocusable(t,n){return function ple(i){return!function cle(i){return function hle(i){return"input"==i.nodeName.toLowerCase()}(i)&&"hidden"==i.type}(i)&&(function lle(i){let e=i.nodeName.toLowerCase();return"input"===e||"select"===e||"button"===e||"textarea"===e}(i)||function ule(i){return function dle(i){return"a"==i.nodeName.toLowerCase()}(i)&&i.hasAttribute("href")}(i)||i.hasAttribute("contenteditable")||Az(i))}(t)&&!this.isDisabled(t)&&(n?.ignoreVisibility||this.isVisible(t))}}return i.\u0275fac=function(t){return new(t||i)(ci(Ku))},i.\u0275prov=Ue({token:i,factory:i.\u0275fac,providedIn:"root"}),i})();function Az(i){if(!i.hasAttribute("tabindex")||void 0===i.tabIndex)return!1;let e=i.getAttribute("tabindex");return!(!e||isNaN(parseInt(e,10)))}function mz(i){if(!Az(i))return null;const e=parseInt(i.getAttribute("tabindex")||"",10);return isNaN(e)?-1:e}class mle{get enabled(){return this._enabled}set enabled(e){this._enabled=e,this._startAnchor&&this._endAnchor&&(this._toggleAnchorTabIndex(e,this._startAnchor),this._toggleAnchorTabIndex(e,this._endAnchor))}constructor(e,t,n,r,s=!1){this._element=e,this._checker=t,this._ngZone=n,this._document=r,this._hasAttached=!1,this.startAnchorListener=()=>this.focusLastTabbableElement(),this.endAnchorListener=()=>this.focusFirstTabbableElement(),this._enabled=!0,s||this.attachAnchors()}destroy(){const e=this._startAnchor,t=this._endAnchor;e&&(e.removeEventListener("focus",this.startAnchorListener),e.remove()),t&&(t.removeEventListener("focus",this.endAnchorListener),t.remove()),this._startAnchor=this._endAnchor=null,this._hasAttached=!1}attachAnchors(){return!!this._hasAttached||(this._ngZone.runOutsideAngular(()=>{this._startAnchor||(this._startAnchor=this._createAnchor(),this._startAnchor.addEventListener("focus",this.startAnchorListener)),this._endAnchor||(this._endAnchor=this._createAnchor(),this._endAnchor.addEventListener("focus",this.endAnchorListener))}),this._element.parentNode&&(this._element.parentNode.insertBefore(this._startAnchor,this._element),this._element.parentNode.insertBefore(this._endAnchor,this._element.nextSibling),this._hasAttached=!0),this._hasAttached)}focusInitialElementWhenReady(e){return new Promise(t=>{this._executeOnStable(()=>t(this.focusInitialElement(e)))})}focusFirstTabbableElementWhenReady(e){return new Promise(t=>{this._executeOnStable(()=>t(this.focusFirstTabbableElement(e)))})}focusLastTabbableElementWhenReady(e){return new Promise(t=>{this._executeOnStable(()=>t(this.focusLastTabbableElement(e)))})}_getRegionBoundary(e){const t=this._element.querySelectorAll(`[cdk-focus-region-${e}], [cdkFocusRegion${e}], [cdk-focus-${e}]`);return"start"==e?t.length?t[0]:this._getFirstTabbableElement(this._element):t.length?t[t.length-1]:this._getLastTabbableElement(this._element)}focusInitialElement(e){const t=this._element.querySelector("[cdk-focus-initial], [cdkFocusInitial]");if(t){if(!this._checker.isFocusable(t)){const n=this._getFirstTabbableElement(t);return n?.focus(e),!!n}return t.focus(e),!0}return this.focusFirstTabbableElement(e)}focusFirstTabbableElement(e){const t=this._getRegionBoundary("start");return t&&t.focus(e),!!t}focusLastTabbableElement(e){const t=this._getRegionBoundary("end");return t&&t.focus(e),!!t}hasAttached(){return this._hasAttached}_getFirstTabbableElement(e){if(this._checker.isFocusable(e)&&this._checker.isTabbable(e))return e;const t=e.children;for(let n=0;n=0;n--){const r=t[n].nodeType===this._document.ELEMENT_NODE?this._getLastTabbableElement(t[n]):null;if(r)return r}return null}_createAnchor(){const e=this._document.createElement("div");return this._toggleAnchorTabIndex(this._enabled,e),e.classList.add("cdk-visually-hidden"),e.classList.add("cdk-focus-trap-anchor"),e.setAttribute("aria-hidden","true"),e}_toggleAnchorTabIndex(e,t){e?t.setAttribute("tabindex","0"):t.removeAttribute("tabindex")}toggleAnchors(e){this._startAnchor&&this._endAnchor&&(this._toggleAnchorTabIndex(e,this._startAnchor),this._toggleAnchorTabIndex(e,this._endAnchor))}_executeOnStable(e){this._ngZone.isStable?e():this._ngZone.onStable.pipe(nu(1)).subscribe(e)}}let bF=(()=>{class i{constructor(t,n,r){this._checker=t,this._ngZone=n,this._document=r}create(t,n=!1){return new mle(t,this._checker,this._ngZone,this._document,n)}}return i.\u0275fac=function(t){return new(t||i)(ci(cD),ci(mo),ci(Zo))},i.\u0275prov=Ue({token:i,factory:i.\u0275fac,providedIn:"root"}),i})();function uD(i){return 0===i.buttons||0===i.offsetX&&0===i.offsetY}function hD(i){const e=i.touches&&i.touches[0]||i.changedTouches&&i.changedTouches[0];return!(!e||-1!==e.identifier||null!=e.radiusX&&1!==e.radiusX||null!=e.radiusY&&1!==e.radiusY)}const gle=new cr("cdk-input-modality-detector-options"),_le={ignoreKeys:[18,17,224,91,16]},w2=p0({passive:!0,capture:!0});let yle=(()=>{class i{get mostRecentModality(){return this._modality.value}constructor(t,n,r,s){this._platform=t,this._mostRecentTarget=null,this._modality=new rp(null),this._lastTouchMs=0,this._onKeydown=a=>{this._options?.ignoreKeys?.some(l=>l===a.keyCode)||(this._modality.next("keyboard"),this._mostRecentTarget=GA(a))},this._onMousedown=a=>{Date.now()-this._lastTouchMs<650||(this._modality.next(uD(a)?"keyboard":"mouse"),this._mostRecentTarget=GA(a))},this._onTouchstart=a=>{hD(a)?this._modality.next("keyboard"):(this._lastTouchMs=Date.now(),this._modality.next("touch"),this._mostRecentTarget=GA(a))},this._options={..._le,...s},this.modalityDetected=this._modality.pipe(_F(1)),this.modalityChanged=this.modalityDetected.pipe(oD()),t.isBrowser&&n.runOutsideAngular(()=>{r.addEventListener("keydown",this._onKeydown,w2),r.addEventListener("mousedown",this._onMousedown,w2),r.addEventListener("touchstart",this._onTouchstart,w2)})}ngOnDestroy(){this._modality.complete(),this._platform.isBrowser&&(document.removeEventListener("keydown",this._onKeydown,w2),document.removeEventListener("mousedown",this._onMousedown,w2),document.removeEventListener("touchstart",this._onTouchstart,w2))}}return i.\u0275fac=function(t){return new(t||i)(ci(Ku),ci(mo),ci(Zo),ci(gle,8))},i.\u0275prov=Ue({token:i,factory:i.\u0275fac,providedIn:"root"}),i})();const ble=new cr("cdk-focus-monitor-default-options"),dD=p0({passive:!0,capture:!0});let A0=(()=>{class i{constructor(t,n,r,s,a){this._ngZone=t,this._platform=n,this._inputModalityDetector=r,this._origin=null,this._windowFocused=!1,this._originFromTouchInteraction=!1,this._elementInfo=new Map,this._monitoredElementCount=0,this._rootNodeFocusListenerCount=new Map,this._windowFocusListener=()=>{this._windowFocused=!0,this._windowFocusTimeoutId=window.setTimeout(()=>this._windowFocused=!1)},this._stopInputModalityDetector=new D,this._rootNodeFocusAndBlurListener=l=>{for(let d=GA(l);d;d=d.parentElement)"focus"===l.type?this._onFocus(l,d):this._onBlur(l,d)},this._document=s,this._detectionMode=a?.detectionMode||0}monitor(t,n=!1){const r=Zu(t);if(!this._platform.isBrowser||1!==r.nodeType)return no(null);const s=uF(r)||this._getDocument(),a=this._elementInfo.get(r);if(a)return n&&(a.checkChildren=!0),a.subject;const l={checkChildren:n,subject:new D,rootNode:s};return this._elementInfo.set(r,l),this._registerGlobalListeners(l),l.subject}stopMonitoring(t){const n=Zu(t),r=this._elementInfo.get(n);r&&(r.subject.complete(),this._setClasses(n),this._elementInfo.delete(n),this._removeGlobalListeners(r))}focusVia(t,n,r){const s=Zu(t);s===this._getDocument().activeElement?this._getClosestElementsInfo(s).forEach(([l,u])=>this._originChanged(l,n,u)):(this._setOrigin(n),"function"==typeof s.focus&&s.focus(r))}ngOnDestroy(){this._elementInfo.forEach((t,n)=>this.stopMonitoring(n))}_getDocument(){return this._document||document}_getWindow(){return this._getDocument().defaultView||window}_getFocusOrigin(t){return this._origin?this._originFromTouchInteraction?this._shouldBeAttributedToTouch(t)?"touch":"program":this._origin:this._windowFocused&&this._lastFocusOrigin?this._lastFocusOrigin:t&&this._isLastInteractionFromInputLabel(t)?"mouse":"program"}_shouldBeAttributedToTouch(t){return 1===this._detectionMode||!!t?.contains(this._inputModalityDetector._mostRecentTarget)}_setClasses(t,n){t.classList.toggle("cdk-focused",!!n),t.classList.toggle("cdk-touch-focused","touch"===n),t.classList.toggle("cdk-keyboard-focused","keyboard"===n),t.classList.toggle("cdk-mouse-focused","mouse"===n),t.classList.toggle("cdk-program-focused","program"===n)}_setOrigin(t,n=!1){this._ngZone.runOutsideAngular(()=>{this._origin=t,this._originFromTouchInteraction="touch"===t&&n,0===this._detectionMode&&(clearTimeout(this._originTimeoutId),this._originTimeoutId=setTimeout(()=>this._origin=null,this._originFromTouchInteraction?650:1))})}_onFocus(t,n){const r=this._elementInfo.get(n),s=GA(t);!r||!r.checkChildren&&n!==s||this._originChanged(n,this._getFocusOrigin(s),r)}_onBlur(t,n){const r=this._elementInfo.get(n);!r||r.checkChildren&&t.relatedTarget instanceof Node&&n.contains(t.relatedTarget)||(this._setClasses(n),this._emitOrigin(r,null))}_emitOrigin(t,n){t.subject.observers.length&&this._ngZone.run(()=>t.subject.next(n))}_registerGlobalListeners(t){if(!this._platform.isBrowser)return;const n=t.rootNode,r=this._rootNodeFocusListenerCount.get(n)||0;r||this._ngZone.runOutsideAngular(()=>{n.addEventListener("focus",this._rootNodeFocusAndBlurListener,dD),n.addEventListener("blur",this._rootNodeFocusAndBlurListener,dD)}),this._rootNodeFocusListenerCount.set(n,r+1),1==++this._monitoredElementCount&&(this._ngZone.runOutsideAngular(()=>{this._getWindow().addEventListener("focus",this._windowFocusListener)}),this._inputModalityDetector.modalityDetected.pipe(ql(this._stopInputModalityDetector)).subscribe(s=>{this._setOrigin(s,!0)}))}_removeGlobalListeners(t){const n=t.rootNode;if(this._rootNodeFocusListenerCount.has(n)){const r=this._rootNodeFocusListenerCount.get(n);r>1?this._rootNodeFocusListenerCount.set(n,r-1):(n.removeEventListener("focus",this._rootNodeFocusAndBlurListener,dD),n.removeEventListener("blur",this._rootNodeFocusAndBlurListener,dD),this._rootNodeFocusListenerCount.delete(n))}--this._monitoredElementCount||(this._getWindow().removeEventListener("focus",this._windowFocusListener),this._stopInputModalityDetector.next(),clearTimeout(this._windowFocusTimeoutId),clearTimeout(this._originTimeoutId))}_originChanged(t,n,r){this._setClasses(t,n),this._emitOrigin(r,n),this._lastFocusOrigin=n}_getClosestElementsInfo(t){const n=[];return this._elementInfo.forEach((r,s)=>{(s===t||r.checkChildren&&s.contains(t))&&n.push([s,r])}),n}_isLastInteractionFromInputLabel(t){const{_mostRecentTarget:n,mostRecentModality:r}=this._inputModalityDetector;if("mouse"!==r||!n||n===t||"INPUT"!==t.nodeName&&"TEXTAREA"!==t.nodeName||t.disabled)return!1;const s=t.labels;if(s)for(let a=0;a{class i{constructor(t,n){this._elementRef=t,this._focusMonitor=n,this._focusOrigin=null,this.cdkFocusChange=new Ws}get focusOrigin(){return this._focusOrigin}ngAfterViewInit(){const t=this._elementRef.nativeElement;this._monitorSubscription=this._focusMonitor.monitor(t,1===t.nodeType&&t.hasAttribute("cdkMonitorSubtreeFocus")).subscribe(n=>{this._focusOrigin=n,this.cdkFocusChange.emit(n)})}ngOnDestroy(){this._focusMonitor.stopMonitoring(this._elementRef),this._monitorSubscription&&this._monitorSubscription.unsubscribe()}}return i.\u0275fac=function(t){return new(t||i)(wt(Cs),wt(A0))},i.\u0275dir=Oi({type:i,selectors:[["","cdkMonitorElementFocus",""],["","cdkMonitorSubtreeFocus",""]],outputs:{cdkFocusChange:"cdkFocusChange"},exportAs:["cdkMonitorFocus"]}),i})();const _z="cdk-high-contrast-black-on-white",yz="cdk-high-contrast-white-on-black",xF="cdk-high-contrast-active";let CF,vz=(()=>{class i{constructor(t,n){this._platform=t,this._document=n,this._breakpointSubscription=To(tle).observe("(forced-colors: active)").subscribe(()=>{this._hasCheckedHighContrastMode&&(this._hasCheckedHighContrastMode=!1,this._applyBodyHighContrastModeCssClasses())})}getHighContrastMode(){if(!this._platform.isBrowser)return 0;const t=this._document.createElement("div");t.style.backgroundColor="rgb(1,2,3)",t.style.position="absolute",this._document.body.appendChild(t);const n=this._document.defaultView||window,r=n&&n.getComputedStyle?n.getComputedStyle(t):null,s=(r&&r.backgroundColor||"").replace(/ /g,"");switch(t.remove(),s){case"rgb(0,0,0)":case"rgb(45,50,54)":case"rgb(32,32,32)":return 2;case"rgb(255,255,255)":case"rgb(255,250,239)":return 1}return 0}ngOnDestroy(){this._breakpointSubscription.unsubscribe()}_applyBodyHighContrastModeCssClasses(){if(!this._hasCheckedHighContrastMode&&this._platform.isBrowser&&this._document.body){const t=this._document.body.classList;t.remove(xF,_z,yz),this._hasCheckedHighContrastMode=!0;const n=this.getHighContrastMode();1===n?t.add(xF,_z):2===n&&t.add(xF,yz)}}}return i.\u0275fac=function(t){return new(t||i)(ci(Ku),ci(Zo))},i.\u0275prov=Ue({token:i,factory:i.\u0275fac,providedIn:"root"}),i})(),wF=(()=>{class i{constructor(t){t._applyBodyHighContrastModeCssClasses()}}return i.\u0275fac=function(t){return new(t||i)(ci(vz))},i.\u0275mod=ia({type:i}),i.\u0275inj=ft({imports:[lz]}),i})(),wle=1;const fD={};function bz(i){return i in fD&&(delete fD[i],!0)}const Cle={setImmediate(i){const e=wle++;return fD[e]=!0,CF||(CF=Promise.resolve()),CF.then(()=>bz(e)&&i()),e},clearImmediate(i){bz(i)}},{setImmediate:Mle,clearImmediate:Sle}=Cle,pD={setImmediate(...i){const{delegate:e}=pD;return(e?.setImmediate||Mle)(...i)},clearImmediate(i){const{delegate:e}=pD;return(e?.clearImmediate||Sle)(i)},delegate:void 0},MF=new class Ele extends mF{flush(e){this._active=!0;const t=this._scheduled;this._scheduled=void 0;const{actions:n}=this;let r;e=e||n.shift();do{if(r=e.execute(e.state,e.delay))break}while((e=n[0])&&e.id===t&&n.shift());if(this._active=!1,r){for(;(e=n[0])&&e.id===t&&n.shift();)e.unsubscribe();throw r}}}(class Tle extends AF{constructor(e,t){super(e,t),this.scheduler=e,this.work=t}requestAsyncId(e,t,n=0){return null!==n&&n>0?super.requestAsyncId(e,t,n):(e.actions.push(this),e._scheduled||(e._scheduled=pD.setImmediate(e.flush.bind(e,void 0))))}recycleAsyncId(e,t,n=0){var r;if(null!=n?n>0:this.delay>0)return super.recycleAsyncId(e,t,n);const{actions:s}=e;null!=t&&(null===(r=s[s.length-1])||void 0===r?void 0:r.id)!==t&&(pD.clearImmediate(t),e._scheduled=void 0)}});function xz(i,e){return e?t=>uM(e.pipe(nu(1),function Dle(){return Ee((i,e)=>{i.subscribe(Ge(e,Z))})}()),t.pipe(xz(i))):ma((t,n)=>$o(i(t,n)).pipe(nu(1),XL(t)))}function ES(i=0,e,t=jae){let n=-1;return null!=e&&(pe(e)?t=e:n=e),new de(r=>{let s=function Ble(i){return i instanceof Date&&!isNaN(i)}(i)?+i-t.now():i;s<0&&(s=0);let a=0;return t.schedule(function(){r.closed||(r.next(a++),0<=n?this.schedule(void 0,n):r.complete())},s)})}function wz(i,e=b2){const t=ES(i,e);return xz(()=>t)}const Ile=new cr("cdk-dir-doc",{providedIn:"root",factory:function Ple(){return To(Zo)}}),kle=/^(ar|ckb|dv|he|iw|fa|nqo|ps|sd|ug|ur|yi|.*[-_](Adlm|Arab|Hebr|Nkoo|Rohg|Thaa))(?!.*[-_](Latn|Cyrl)($|-|_))($|-|_)/i;let Ed=(()=>{class i{constructor(t){this.value="ltr",this.change=new Ws,t&&(this.value=function Fle(i){const e=i?.toLowerCase()||"";return"auto"===e&&typeof navigator<"u"&&navigator?.language?kle.test(navigator.language)?"rtl":"ltr":"rtl"===e?"rtl":"ltr"}((t.body?t.body.dir:null)||(t.documentElement?t.documentElement.dir:null)||"ltr"))}ngOnDestroy(){this.change.complete()}}return i.\u0275fac=function(t){return new(t||i)(ci(Ile,8))},i.\u0275prov=Ue({token:i,factory:i.\u0275fac,providedIn:"root"}),i})(),DS=(()=>{class i{}return i.\u0275fac=function(t){return new(t||i)},i.\u0275mod=ia({type:i}),i.\u0275inj=ft({}),i})();const Rle=new cr("mat-sanity-checks",{providedIn:"root",factory:function Ole(){return!0}});let Pu=(()=>{class i{constructor(t,n,r){this._sanityChecks=n,this._document=r,this._hasDoneGlobalChecks=!1,t._applyBodyHighContrastModeCssClasses(),this._hasDoneGlobalChecks||(this._hasDoneGlobalChecks=!0)}_checkIsEnabled(t){return!dF()&&("boolean"==typeof this._sanityChecks?this._sanityChecks:!!this._sanityChecks[t])}}return i.\u0275fac=function(t){return new(t||i)(ci(vz),ci(Rle,8),ci(Zo))},i.\u0275mod=ia({type:i}),i.\u0275inj=ft({imports:[DS,DS]}),i})();function Pb(i){return class extends i{get disabled(){return this._disabled}set disabled(e){this._disabled=pa(e)}constructor(...e){super(...e),this._disabled=!1}}}function C2(i,e){return class extends i{get color(){return this._color}set color(t){const n=t||this.defaultColor;n!==this._color&&(this._color&&this._elementRef.nativeElement.classList.remove(`mat-${this._color}`),n&&this._elementRef.nativeElement.classList.add(`mat-${n}`),this._color=n)}constructor(...t){super(...t),this.defaultColor=e,this.color=e}}}function kb(i){return class extends i{get disableRipple(){return this._disableRipple}set disableRipple(e){this._disableRipple=pa(e)}constructor(...e){super(...e),this._disableRipple=!1}}}function AD(i,e=0){return class extends i{get tabIndex(){return this.disabled?-1:this._tabIndex}set tabIndex(t){this._tabIndex=null!=t?gc(t):this.defaultTabIndex}constructor(...t){super(...t),this._tabIndex=e,this.defaultTabIndex=e}}}class Nle{constructor(e,t,n,r=!1){this._renderer=e,this.element=t,this.config=n,this._animationForciblyDisabledThroughCss=r,this.state=3}fadeOut(){this._renderer.fadeOutRipple(this)}}const Sz=p0({passive:!0,capture:!0});class Ule{constructor(){this._events=new Map,this._delegateEventHandler=e=>{const t=GA(e);t&&this._events.get(e.type)?.forEach((n,r)=>{(r===t||r.contains(t))&&n.forEach(s=>s.handleEvent(e))})}}addHandler(e,t,n,r){const s=this._events.get(t);if(s){const a=s.get(n);a?a.add(r):s.set(n,new Set([r]))}else this._events.set(t,new Map([[n,new Set([r])]])),e.runOutsideAngular(()=>{document.addEventListener(t,this._delegateEventHandler,Sz)})}removeHandler(e,t,n){const r=this._events.get(e);if(!r)return;const s=r.get(t);s&&(s.delete(n),0===s.size&&r.delete(t),0===r.size&&(this._events.delete(e),document.removeEventListener(e,this._delegateEventHandler,Sz)))}}const Tz={enterDuration:225,exitDuration:150},Ez=p0({passive:!0,capture:!0}),Dz=["mousedown","touchstart"],Bz=["mouseup","mouseleave","touchend","touchcancel"];class IS{constructor(e,t,n,r){this._target=e,this._ngZone=t,this._platform=r,this._isPointerDown=!1,this._activeRipples=new Map,this._pointerUpEventsRegistered=!1,r.isBrowser&&(this._containerElement=Zu(n))}fadeInRipple(e,t,n={}){const r=this._containerRect=this._containerRect||this._containerElement.getBoundingClientRect(),s={...Tz,...n.animation};n.centered&&(e=r.left+r.width/2,t=r.top+r.height/2);const a=n.radius||function Hle(i,e,t){const n=Math.max(Math.abs(i-t.left),Math.abs(i-t.right)),r=Math.max(Math.abs(e-t.top),Math.abs(e-t.bottom));return Math.sqrt(n*n+r*r)}(e,t,r),l=e-r.left,u=t-r.top,d=s.enterDuration,p=document.createElement("div");p.classList.add("mat-ripple-element"),p.style.left=l-a+"px",p.style.top=u-a+"px",p.style.height=2*a+"px",p.style.width=2*a+"px",null!=n.color&&(p.style.backgroundColor=n.color),p.style.transitionDuration=`${d}ms`,this._containerElement.appendChild(p);const y=window.getComputedStyle(p),O=y.transitionDuration,Q="none"===y.transitionProperty||"0s"===O||"0s, 0s"===O||0===r.width&&0===r.height,W=new Nle(this,p,n,Q);p.style.transform="scale3d(1, 1, 1)",W.state=0,n.persistent||(this._mostRecentTransientRipple=W);let se=null;return!Q&&(d||s.exitDuration)&&this._ngZone.runOutsideAngular(()=>{const ye=()=>this._finishRippleTransition(W),Le=()=>this._destroyRipple(W);p.addEventListener("transitionend",ye),p.addEventListener("transitioncancel",Le),se={onTransitionEnd:ye,onTransitionCancel:Le}}),this._activeRipples.set(W,se),(Q||!d)&&this._finishRippleTransition(W),W}fadeOutRipple(e){if(2===e.state||3===e.state)return;const t=e.element,n={...Tz,...e.config.animation};t.style.transitionDuration=`${n.exitDuration}ms`,t.style.opacity="0",e.state=2,(e._animationForciblyDisabledThroughCss||!n.exitDuration)&&this._finishRippleTransition(e)}fadeOutAll(){this._getActiveRipples().forEach(e=>e.fadeOut())}fadeOutAllNonPersistent(){this._getActiveRipples().forEach(e=>{e.config.persistent||e.fadeOut()})}setupTriggerEvents(e){const t=Zu(e);!this._platform.isBrowser||!t||t===this._triggerElement||(this._removeTriggerEvents(),this._triggerElement=t,Dz.forEach(n=>{IS._eventManager.addHandler(this._ngZone,n,t,this)}))}handleEvent(e){"mousedown"===e.type?this._onMousedown(e):"touchstart"===e.type?this._onTouchStart(e):this._onPointerUp(),this._pointerUpEventsRegistered||(this._ngZone.runOutsideAngular(()=>{Bz.forEach(t=>{this._triggerElement.addEventListener(t,this,Ez)})}),this._pointerUpEventsRegistered=!0)}_finishRippleTransition(e){0===e.state?this._startFadeOutTransition(e):2===e.state&&this._destroyRipple(e)}_startFadeOutTransition(e){const t=e===this._mostRecentTransientRipple,{persistent:n}=e.config;e.state=1,!n&&(!t||!this._isPointerDown)&&e.fadeOut()}_destroyRipple(e){const t=this._activeRipples.get(e)??null;this._activeRipples.delete(e),this._activeRipples.size||(this._containerRect=null),e===this._mostRecentTransientRipple&&(this._mostRecentTransientRipple=null),e.state=3,null!==t&&(e.element.removeEventListener("transitionend",t.onTransitionEnd),e.element.removeEventListener("transitioncancel",t.onTransitionCancel)),e.element.remove()}_onMousedown(e){const t=uD(e),n=this._lastTouchStartEvent&&Date.now(){!e.config.persistent&&(1===e.state||e.config.terminateOnPointerUp&&0===e.state)&&e.fadeOut()}))}_getActiveRipples(){return Array.from(this._activeRipples.keys())}_removeTriggerEvents(){const e=this._triggerElement;e&&(Dz.forEach(t=>IS._eventManager.removeHandler(t,e,this)),this._pointerUpEventsRegistered&&Bz.forEach(t=>e.removeEventListener(t,this,Ez)))}}IS._eventManager=new Ule;const Iz=new cr("mat-ripple-global-options");let qA=(()=>{class i{get disabled(){return this._disabled}set disabled(t){t&&this.fadeOutAllNonPersistent(),this._disabled=t,this._setupTriggerEventsIfEnabled()}get trigger(){return this._trigger||this._elementRef.nativeElement}set trigger(t){this._trigger=t,this._setupTriggerEventsIfEnabled()}constructor(t,n,r,s,a){this._elementRef=t,this._animationMode=a,this.radius=0,this._disabled=!1,this._isInitialized=!1,this._globalOptions=s||{},this._rippleRenderer=new IS(this,n,t,r)}ngOnInit(){this._isInitialized=!0,this._setupTriggerEventsIfEnabled()}ngOnDestroy(){this._rippleRenderer._removeTriggerEvents()}fadeOutAll(){this._rippleRenderer.fadeOutAll()}fadeOutAllNonPersistent(){this._rippleRenderer.fadeOutAllNonPersistent()}get rippleConfig(){return{centered:this.centered,radius:this.radius,color:this.color,animation:{...this._globalOptions.animation,..."NoopAnimations"===this._animationMode?{enterDuration:0,exitDuration:0}:{},...this.animation},terminateOnPointerUp:this._globalOptions.terminateOnPointerUp}}get rippleDisabled(){return this.disabled||!!this._globalOptions.disabled}_setupTriggerEventsIfEnabled(){!this.disabled&&this._isInitialized&&this._rippleRenderer.setupTriggerEvents(this.trigger)}launch(t,n=0,r){return"number"==typeof t?this._rippleRenderer.fadeInRipple(t,n,{...this.rippleConfig,...r}):this._rippleRenderer.fadeInRipple(0,0,{...this.rippleConfig,...t})}}return i.\u0275fac=function(t){return new(t||i)(wt(Cs),wt(mo),wt(Ku),wt(Iz,8),wt(_h,8))},i.\u0275dir=Oi({type:i,selectors:[["","mat-ripple",""],["","matRipple",""]],hostAttrs:[1,"mat-ripple"],hostVars:2,hostBindings:function(t,n){2&t&&jo("mat-ripple-unbounded",n.unbounded)},inputs:{color:["matRippleColor","color"],unbounded:["matRippleUnbounded","unbounded"],centered:["matRippleCentered","centered"],radius:["matRippleRadius","radius"],animation:["matRippleAnimation","animation"],disabled:["matRippleDisabled","disabled"],trigger:["matRippleTrigger","trigger"]},exportAs:["matRipple"]}),i})(),Fb=(()=>{class i{}return i.\u0275fac=function(t){return new(t||i)},i.\u0275mod=ia({type:i}),i.\u0275inj=ft({imports:[Pu,Pu]}),i})();class SF{attach(e){return this._attachedHost=e,e.attach(this)}detach(){let e=this._attachedHost;null!=e&&(this._attachedHost=null,e.detach())}get isAttached(){return null!=this._attachedHost}setAttachedHost(e){this._attachedHost=e}}class Ty extends SF{constructor(e,t,n,r,s){super(),this.component=e,this.viewContainerRef=t,this.injector=n,this.componentFactoryResolver=r,this.projectableNodes=s}}class PS extends SF{constructor(e,t,n,r){super(),this.templateRef=e,this.viewContainerRef=t,this.context=n,this.injector=r}get origin(){return this.templateRef.elementRef}attach(e,t=this.context){return this.context=t,super.attach(e)}detach(){return this.context=void 0,super.detach()}}class Vle extends SF{constructor(e){super(),this.element=e instanceof Cs?e.nativeElement:e}}class TF{constructor(){this._isDisposed=!1,this.attachDomPortal=null}hasAttached(){return!!this._attachedPortal}attach(e){return e instanceof Ty?(this._attachedPortal=e,this.attachComponentPortal(e)):e instanceof PS?(this._attachedPortal=e,this.attachTemplatePortal(e)):this.attachDomPortal&&e instanceof Vle?(this._attachedPortal=e,this.attachDomPortal(e)):void 0}detach(){this._attachedPortal&&(this._attachedPortal.setAttachedHost(null),this._attachedPortal=null),this._invokeDisposeFn()}dispose(){this.hasAttached()&&this.detach(),this._invokeDisposeFn(),this._isDisposed=!0}setDisposeFn(e){this._disposeFn=e}_invokeDisposeFn(){this._disposeFn&&(this._disposeFn(),this._disposeFn=null)}}class Gle extends TF{constructor(e,t,n,r,s){super(),this.outletElement=e,this._componentFactoryResolver=t,this._appRef=n,this._defaultInjector=r,this.attachDomPortal=a=>{const l=a.element,u=this._document.createComment("dom-portal");l.parentNode.insertBefore(u,l),this.outletElement.appendChild(l),this._attachedPortal=a,super.setDisposeFn(()=>{u.parentNode&&u.parentNode.replaceChild(l,u)})},this._document=s}attachComponentPortal(e){const n=(e.componentFactoryResolver||this._componentFactoryResolver).resolveComponentFactory(e.component);let r;return e.viewContainerRef?(r=e.viewContainerRef.createComponent(n,e.viewContainerRef.length,e.injector||e.viewContainerRef.injector,e.projectableNodes||void 0),this.setDisposeFn(()=>r.destroy())):(r=n.create(e.injector||this._defaultInjector||zc.NULL),this._appRef.attachView(r.hostView),this.setDisposeFn(()=>{this._appRef.viewCount>0&&this._appRef.detachView(r.hostView),r.destroy()})),this.outletElement.appendChild(this._getComponentRootNode(r)),this._attachedPortal=e,r}attachTemplatePortal(e){let t=e.viewContainerRef,n=t.createEmbeddedView(e.templateRef,e.context,{injector:e.injector});return n.rootNodes.forEach(r=>this.outletElement.appendChild(r)),n.detectChanges(),this.setDisposeFn(()=>{let r=t.indexOf(n);-1!==r&&t.remove(r)}),this._attachedPortal=e,n}dispose(){super.dispose(),this.outletElement.remove()}_getComponentRootNode(e){return e.hostView.rootNodes[0]}}let qle=(()=>{class i extends PS{constructor(t,n){super(t,n)}}return i.\u0275fac=function(t){return new(t||i)(wt(gh),wt(Mu))},i.\u0275dir=Oi({type:i,selectors:[["","cdkPortal",""]],exportAs:["cdkPortal"],features:[As]}),i})(),M2=(()=>{class i extends TF{constructor(t,n,r){super(),this._componentFactoryResolver=t,this._viewContainerRef=n,this._isInitialized=!1,this.attached=new Ws,this.attachDomPortal=s=>{const a=s.element,l=this._document.createComment("dom-portal");s.setAttachedHost(this),a.parentNode.insertBefore(l,a),this._getRootNode().appendChild(a),this._attachedPortal=s,super.setDisposeFn(()=>{l.parentNode&&l.parentNode.replaceChild(a,l)})},this._document=r}get portal(){return this._attachedPortal}set portal(t){this.hasAttached()&&!t&&!this._isInitialized||(this.hasAttached()&&super.detach(),t&&super.attach(t),this._attachedPortal=t||null)}get attachedRef(){return this._attachedRef}ngOnInit(){this._isInitialized=!0}ngOnDestroy(){super.dispose(),this._attachedRef=this._attachedPortal=null}attachComponentPortal(t){t.setAttachedHost(this);const n=null!=t.viewContainerRef?t.viewContainerRef:this._viewContainerRef,s=(t.componentFactoryResolver||this._componentFactoryResolver).resolveComponentFactory(t.component),a=n.createComponent(s,n.length,t.injector||n.injector,t.projectableNodes||void 0);return n!==this._viewContainerRef&&this._getRootNode().appendChild(a.hostView.rootNodes[0]),super.setDisposeFn(()=>a.destroy()),this._attachedPortal=t,this._attachedRef=a,this.attached.emit(a),a}attachTemplatePortal(t){t.setAttachedHost(this);const n=this._viewContainerRef.createEmbeddedView(t.templateRef,t.context,{injector:t.injector});return super.setDisposeFn(()=>this._viewContainerRef.clear()),this._attachedPortal=t,this._attachedRef=n,this.attached.emit(n),n}_getRootNode(){const t=this._viewContainerRef.element.nativeElement;return t.nodeType===t.ELEMENT_NODE?t:t.parentNode}}return i.\u0275fac=function(t){return new(t||i)(wt(Gd),wt(Mu),wt(Zo))},i.\u0275dir=Oi({type:i,selectors:[["","cdkPortalOutlet",""]],inputs:{portal:["cdkPortalOutlet","portal"]},outputs:{attached:"attached"},exportAs:["cdkPortalOutlet"],features:[As]}),i})(),kS=(()=>{class i{}return i.\u0275fac=function(t){return new(t||i)},i.\u0275mod=ia({type:i}),i.\u0275inj=ft({}),i})();class Pz{}class Qle{}const q_="*";function FS(i,e){return{type:7,name:i,definitions:e,options:{}}}function m0(i,e=null){return{type:4,styles:e,timings:i}}function Fz(i,e=null){return{type:2,steps:i,options:e}}function Kh(i){return{type:6,styles:i,offset:null}}function Q_(i,e,t){return{type:0,name:i,styles:e,options:t}}function g0(i,e,t=null){return{type:1,expr:i,animation:e,options:t}}function Lz(i){Promise.resolve().then(i)}class OS{constructor(e=0,t=0){this._onDoneFns=[],this._onStartFns=[],this._onDestroyFns=[],this._originalOnDoneFns=[],this._originalOnStartFns=[],this._started=!1,this._destroyed=!1,this._finished=!1,this._position=0,this.parentPlayer=null,this.totalTime=e+t}_onFinish(){this._finished||(this._finished=!0,this._onDoneFns.forEach(e=>e()),this._onDoneFns=[])}onStart(e){this._originalOnStartFns.push(e),this._onStartFns.push(e)}onDone(e){this._originalOnDoneFns.push(e),this._onDoneFns.push(e)}onDestroy(e){this._onDestroyFns.push(e)}hasStarted(){return this._started}init(){}play(){this.hasStarted()||(this._onStart(),this.triggerMicrotask()),this._started=!0}triggerMicrotask(){Lz(()=>this._onFinish())}_onStart(){this._onStartFns.forEach(e=>e()),this._onStartFns=[]}pause(){}restart(){}finish(){this._onFinish()}destroy(){this._destroyed||(this._destroyed=!0,this.hasStarted()||this._onStart(),this.finish(),this._onDestroyFns.forEach(e=>e()),this._onDestroyFns=[])}reset(){this._started=!1,this._finished=!1,this._onStartFns=this._originalOnStartFns,this._onDoneFns=this._originalOnDoneFns}setPosition(e){this._position=this.totalTime?e*this.totalTime:1}getPosition(){return this.totalTime?this._position/this.totalTime:1}triggerCallback(e){const t="start"==e?this._onStartFns:this._onDoneFns;t.forEach(n=>n()),t.length=0}}class Nz{constructor(e){this._onDoneFns=[],this._onStartFns=[],this._finished=!1,this._started=!1,this._destroyed=!1,this._onDestroyFns=[],this.parentPlayer=null,this.totalTime=0,this.players=e;let t=0,n=0,r=0;const s=this.players.length;0==s?Lz(()=>this._onFinish()):this.players.forEach(a=>{a.onDone(()=>{++t==s&&this._onFinish()}),a.onDestroy(()=>{++n==s&&this._onDestroy()}),a.onStart(()=>{++r==s&&this._onStart()})}),this.totalTime=this.players.reduce((a,l)=>Math.max(a,l.totalTime),0)}_onFinish(){this._finished||(this._finished=!0,this._onDoneFns.forEach(e=>e()),this._onDoneFns=[])}init(){this.players.forEach(e=>e.init())}onStart(e){this._onStartFns.push(e)}_onStart(){this.hasStarted()||(this._started=!0,this._onStartFns.forEach(e=>e()),this._onStartFns=[])}onDone(e){this._onDoneFns.push(e)}onDestroy(e){this._onDestroyFns.push(e)}hasStarted(){return this._started}play(){this.parentPlayer||this.init(),this._onStart(),this.players.forEach(e=>e.play())}pause(){this.players.forEach(e=>e.pause())}restart(){this.players.forEach(e=>e.restart())}finish(){this._onFinish(),this.players.forEach(e=>e.finish())}destroy(){this._onDestroy()}_onDestroy(){this._destroyed||(this._destroyed=!0,this._onFinish(),this.players.forEach(e=>e.destroy()),this._onDestroyFns.forEach(e=>e()),this._onDestroyFns=[])}reset(){this.players.forEach(e=>e.reset()),this._destroyed=!1,this._finished=!1,this._started=!1}setPosition(e){const t=e*this.totalTime;this.players.forEach(n=>{const r=n.totalTime?Math.min(1,t/n.totalTime):1;n.setPosition(r)})}getPosition(){const e=this.players.reduce((t,n)=>null===t||n.totalTime>t.totalTime?n:t,null);return null!=e?e.getPosition():0}beforeDestroy(){this.players.forEach(e=>{e.beforeDestroy&&e.beforeDestroy()})}triggerCallback(e){const t="start"==e?this._onStartFns:this._onDoneFns;t.forEach(n=>n()),t.length=0}}const Wle=["addListener","removeListener"],jle=["addEventListener","removeEventListener"],$le=["on","off"];function Ob(i,e,t,n){if(ze(t)&&(n=t,t=void 0),n)return Ob(i,e,t).pipe(pI(n));const[r,s]=function Yle(i){return ze(i.addEventListener)&&ze(i.removeEventListener)}(i)?jle.map(a=>l=>i[a](e,l,t)):function Xle(i){return ze(i.addListener)&&ze(i.removeListener)}(i)?Wle.map(Uz(i,e)):function Kle(i){return ze(i.on)&&ze(i.off)}(i)?$le.map(Uz(i,e)):[];if(!r&&Sr(i))return ma(a=>Ob(a,e,t))($o(i));if(!r)throw new TypeError("Invalid event target");return new de(a=>{const l=(...u)=>a.next(1s(l)})}function Uz(i,e){return t=>n=>i[t](e,n)}const RS={schedule(i){let e=requestAnimationFrame,t=cancelAnimationFrame;const{delegate:n}=RS;n&&(e=n.requestAnimationFrame,t=n.cancelAnimationFrame);const r=e(s=>{t=void 0,i(s)});return new De(()=>t?.(r))},requestAnimationFrame(...i){const{delegate:e}=RS;return(e?.requestAnimationFrame||requestAnimationFrame)(...i)},cancelAnimationFrame(...i){const{delegate:e}=RS;return(e?.cancelAnimationFrame||cancelAnimationFrame)(...i)},delegate:void 0},zz=new class Jle extends mF{flush(e){this._active=!0;const t=this._scheduled;this._scheduled=void 0;const{actions:n}=this;let r;e=e||n.shift();do{if(r=e.execute(e.state,e.delay))break}while((e=n[0])&&e.id===t&&n.shift());if(this._active=!1,r){for(;(e=n[0])&&e.id===t&&n.shift();)e.unsubscribe();throw r}}}(class Zle extends AF{constructor(e,t){super(e,t),this.scheduler=e,this.work=t}requestAsyncId(e,t,n=0){return null!==n&&n>0?super.requestAsyncId(e,t,n):(e.actions.push(this),e._scheduled||(e._scheduled=RS.requestAnimationFrame(()=>e.flush(void 0))))}recycleAsyncId(e,t,n=0){var r;if(null!=n?n>0:this.delay>0)return super.recycleAsyncId(e,t,n);const{actions:s}=e;null!=t&&(null===(r=s[s.length-1])||void 0===r?void 0:r.id)!==t&&(RS.cancelAnimationFrame(t),e._scheduled=void 0)}});function DF(i,e=b2){return function ece(i){return Ee((e,t)=>{let n=!1,r=null,s=null,a=!1;const l=()=>{if(s?.unsubscribe(),s=null,n){n=!1;const d=r;r=null,t.next(d)}a&&t.complete()},u=()=>{s=null,a&&t.complete()};e.subscribe(Ge(t,d=>{n=!0,r=d,s||$o(i(d)).subscribe(s=Ge(t,l,u))},()=>{a=!0,(!n||!s||s.closed)&&t.complete()}))})}(()=>ES(i,e))}const tce=["contentWrapper"],nce=["*"],ice=new cr("VIRTUAL_SCROLL_STRATEGY");let S2=(()=>{class i{constructor(t,n,r){this._ngZone=t,this._platform=n,this._scrolled=new D,this._globalSubscription=null,this._scrolledCount=0,this.scrollContainers=new Map,this._document=r}register(t){this.scrollContainers.has(t)||this.scrollContainers.set(t,t.elementScrolled().subscribe(()=>this._scrolled.next(t)))}deregister(t){const n=this.scrollContainers.get(t);n&&(n.unsubscribe(),this.scrollContainers.delete(t))}scrolled(t=20){return this._platform.isBrowser?new de(n=>{this._globalSubscription||this._addGlobalListener();const r=t>0?this._scrolled.pipe(DF(t)).subscribe(n):this._scrolled.subscribe(n);return this._scrolledCount++,()=>{r.unsubscribe(),this._scrolledCount--,this._scrolledCount||this._removeGlobalListener()}}):no()}ngOnDestroy(){this._removeGlobalListener(),this.scrollContainers.forEach((t,n)=>this.deregister(n)),this._scrolled.complete()}ancestorScrolled(t,n){const r=this.getAncestorScrollContainers(t);return this.scrolled(n).pipe(tu(s=>!s||r.indexOf(s)>-1))}getAncestorScrollContainers(t){const n=[];return this.scrollContainers.forEach((r,s)=>{this._scrollableContainsElement(s,t)&&n.push(s)}),n}_getWindow(){return this._document.defaultView||window}_scrollableContainsElement(t,n){let r=Zu(n),s=t.getElementRef().nativeElement;do{if(r==s)return!0}while(r=r.parentElement);return!1}_addGlobalListener(){this._globalSubscription=this._ngZone.runOutsideAngular(()=>Ob(this._getWindow().document,"scroll").subscribe(()=>this._scrolled.next()))}_removeGlobalListener(){this._globalSubscription&&(this._globalSubscription.unsubscribe(),this._globalSubscription=null)}}return i.\u0275fac=function(t){return new(t||i)(ci(mo),ci(Ku),ci(Zo,8))},i.\u0275prov=Ue({token:i,factory:i.\u0275fac,providedIn:"root"}),i})(),Hz=(()=>{class i{constructor(t,n,r,s){this.elementRef=t,this.scrollDispatcher=n,this.ngZone=r,this.dir=s,this._destroyed=new D,this._elementScrolled=new de(a=>this.ngZone.runOutsideAngular(()=>Ob(this.elementRef.nativeElement,"scroll").pipe(ql(this._destroyed)).subscribe(a)))}ngOnInit(){this.scrollDispatcher.register(this)}ngOnDestroy(){this.scrollDispatcher.deregister(this),this._destroyed.next(),this._destroyed.complete()}elementScrolled(){return this._elementScrolled}getElementRef(){return this.elementRef}scrollTo(t){const n=this.elementRef.nativeElement,r=this.dir&&"rtl"==this.dir.value;null==t.left&&(t.left=r?t.end:t.start),null==t.right&&(t.right=r?t.start:t.end),null!=t.bottom&&(t.top=n.scrollHeight-n.clientHeight-t.bottom),r&&0!=MS()?(null!=t.left&&(t.right=n.scrollWidth-n.clientWidth-t.left),2==MS()?t.left=t.right:1==MS()&&(t.left=t.right?-t.right:t.right)):null!=t.right&&(t.left=n.scrollWidth-n.clientWidth-t.right),this._applyScrollToOptions(t)}_applyScrollToOptions(t){const n=this.elementRef.nativeElement;tz()?n.scrollTo(t):(null!=t.top&&(n.scrollTop=t.top),null!=t.left&&(n.scrollLeft=t.left))}measureScrollOffset(t){const n="left",r="right",s=this.elementRef.nativeElement;if("top"==t)return s.scrollTop;if("bottom"==t)return s.scrollHeight-s.clientHeight-s.scrollTop;const a=this.dir&&"rtl"==this.dir.value;return"start"==t?t=a?r:n:"end"==t&&(t=a?n:r),a&&2==MS()?t==n?s.scrollWidth-s.clientWidth-s.scrollLeft:s.scrollLeft:a&&1==MS()?t==n?s.scrollLeft+s.scrollWidth-s.clientWidth:-s.scrollLeft:t==n?s.scrollLeft:s.scrollWidth-s.clientWidth-s.scrollLeft}}return i.\u0275fac=function(t){return new(t||i)(wt(Cs),wt(S2),wt(mo),wt(Ed,8))},i.\u0275dir=Oi({type:i,selectors:[["","cdk-scrollable",""],["","cdkScrollable",""]],standalone:!0}),i})(),Rb=(()=>{class i{constructor(t,n,r){this._platform=t,this._change=new D,this._changeListener=s=>{this._change.next(s)},this._document=r,n.runOutsideAngular(()=>{if(t.isBrowser){const s=this._getWindow();s.addEventListener("resize",this._changeListener),s.addEventListener("orientationchange",this._changeListener)}this.change().subscribe(()=>this._viewportSize=null)})}ngOnDestroy(){if(this._platform.isBrowser){const t=this._getWindow();t.removeEventListener("resize",this._changeListener),t.removeEventListener("orientationchange",this._changeListener)}this._change.complete()}getViewportSize(){this._viewportSize||this._updateViewportSize();const t={width:this._viewportSize.width,height:this._viewportSize.height};return this._platform.isBrowser||(this._viewportSize=null),t}getViewportRect(){const t=this.getViewportScrollPosition(),{width:n,height:r}=this.getViewportSize();return{top:t.top,left:t.left,bottom:t.top+r,right:t.left+n,height:r,width:n}}getViewportScrollPosition(){if(!this._platform.isBrowser)return{top:0,left:0};const t=this._document,n=this._getWindow(),r=t.documentElement,s=r.getBoundingClientRect();return{top:-s.top||t.body.scrollTop||n.scrollY||r.scrollTop||0,left:-s.left||t.body.scrollLeft||n.scrollX||r.scrollLeft||0}}change(t=20){return t>0?this._change.pipe(DF(t)):this._change}_getWindow(){return this._document.defaultView||window}_updateViewportSize(){const t=this._getWindow();this._viewportSize=this._platform.isBrowser?{width:t.innerWidth,height:t.innerHeight}:{width:0,height:0}}}return i.\u0275fac=function(t){return new(t||i)(ci(Ku),ci(mo),ci(Zo,8))},i.\u0275prov=Ue({token:i,factory:i.\u0275fac,providedIn:"root"}),i})();const Vz=new cr("VIRTUAL_SCROLLABLE");let oce=(()=>{class i extends Hz{constructor(t,n,r,s){super(t,n,r,s)}measureViewportSize(t){const n=this.elementRef.nativeElement;return"horizontal"===t?n.clientWidth:n.clientHeight}}return i.\u0275fac=function(t){return new(t||i)(wt(Cs),wt(S2),wt(mo),wt(Ed,8))},i.\u0275dir=Oi({type:i,features:[As]}),i})();const lce=typeof requestAnimationFrame<"u"?zz:MF;let cce=(()=>{class i extends oce{get orientation(){return this._orientation}set orientation(t){this._orientation!==t&&(this._orientation=t,this._calculateSpacerSize())}get appendOnly(){return this._appendOnly}set appendOnly(t){this._appendOnly=pa(t)}constructor(t,n,r,s,a,l,u,d){super(t,l,r,a),this.elementRef=t,this._changeDetectorRef=n,this._scrollStrategy=s,this.scrollable=d,this._platform=To(Ku),this._detachedSubject=new D,this._renderedRangeSubject=new D,this._orientation="vertical",this._appendOnly=!1,this.scrolledIndexChange=new de(p=>this._scrollStrategy.scrolledIndexChange.subscribe(y=>Promise.resolve().then(()=>this.ngZone.run(()=>p.next(y))))),this.renderedRangeStream=this._renderedRangeSubject,this._totalContentSize=0,this._totalContentWidth="",this._totalContentHeight="",this._renderedRange={start:0,end:0},this._dataLength=0,this._viewportSize=0,this._renderedContentOffset=0,this._renderedContentOffsetNeedsRewrite=!1,this._isChangeDetectionPending=!1,this._runAfterChangeDetection=[],this._viewportChanges=De.EMPTY,this._viewportChanges=u.change().subscribe(()=>{this.checkViewportSize()}),this.scrollable||(this.elementRef.nativeElement.classList.add("cdk-virtual-scrollable"),this.scrollable=this)}ngOnInit(){this._platform.isBrowser&&(this.scrollable===this&&super.ngOnInit(),this.ngZone.runOutsideAngular(()=>Promise.resolve().then(()=>{this._measureViewportSize(),this._scrollStrategy.attach(this),this.scrollable.elementScrolled().pipe(op(null),DF(0,lce)).subscribe(()=>this._scrollStrategy.onContentScrolled()),this._markChangeDetectionNeeded()})))}ngOnDestroy(){this.detach(),this._scrollStrategy.detach(),this._renderedRangeSubject.complete(),this._detachedSubject.complete(),this._viewportChanges.unsubscribe(),super.ngOnDestroy()}attach(t){this.ngZone.runOutsideAngular(()=>{this._forOf=t,this._forOf.dataStream.pipe(ql(this._detachedSubject)).subscribe(n=>{const r=n.length;r!==this._dataLength&&(this._dataLength=r,this._scrollStrategy.onDataLengthChanged()),this._doChangeDetection()})})}detach(){this._forOf=null,this._detachedSubject.next()}getDataLength(){return this._dataLength}getViewportSize(){return this._viewportSize}getRenderedRange(){return this._renderedRange}measureBoundingClientRectWithScrollOffset(t){return this.getElementRef().nativeElement.getBoundingClientRect()[t]}setTotalContentSize(t){this._totalContentSize!==t&&(this._totalContentSize=t,this._calculateSpacerSize(),this._markChangeDetectionNeeded())}setRenderedRange(t){(function ace(i,e){return i.start==e.start&&i.end==e.end})(this._renderedRange,t)||(this.appendOnly&&(t={start:0,end:Math.max(this._renderedRange.end,t.end)}),this._renderedRangeSubject.next(this._renderedRange=t),this._markChangeDetectionNeeded(()=>this._scrollStrategy.onContentRendered()))}getOffsetToRenderedContentStart(){return this._renderedContentOffsetNeedsRewrite?null:this._renderedContentOffset}setRenderedContentOffset(t,n="to-start"){t=this.appendOnly&&"to-start"===n?0:t;const s="horizontal"==this.orientation,a=s?"X":"Y";let u=`translate${a}(${Number((s&&this.dir&&"rtl"==this.dir.value?-1:1)*t)}px)`;this._renderedContentOffset=t,"to-end"===n&&(u+=` translate${a}(-100%)`,this._renderedContentOffsetNeedsRewrite=!0),this._renderedContentTransform!=u&&(this._renderedContentTransform=u,this._markChangeDetectionNeeded(()=>{this._renderedContentOffsetNeedsRewrite?(this._renderedContentOffset-=this.measureRenderedContentSize(),this._renderedContentOffsetNeedsRewrite=!1,this.setRenderedContentOffset(this._renderedContentOffset)):this._scrollStrategy.onRenderedOffsetChanged()}))}scrollToOffset(t,n="auto"){const r={behavior:n};"horizontal"===this.orientation?r.start=t:r.top=t,this.scrollable.scrollTo(r)}scrollToIndex(t,n="auto"){this._scrollStrategy.scrollToIndex(t,n)}measureScrollOffset(t){let n;return n=this.scrollable==this?r=>super.measureScrollOffset(r):r=>this.scrollable.measureScrollOffset(r),Math.max(0,n(t??("horizontal"===this.orientation?"start":"top"))-this.measureViewportOffset())}measureViewportOffset(t){let n;const r="left",s="right",a="rtl"==this.dir?.value;n="start"==t?a?s:r:"end"==t?a?r:s:t||("horizontal"===this.orientation?"left":"top");const l=this.scrollable.measureBoundingClientRectWithScrollOffset(n);return this.elementRef.nativeElement.getBoundingClientRect()[n]-l}measureRenderedContentSize(){const t=this._contentWrapper.nativeElement;return"horizontal"===this.orientation?t.offsetWidth:t.offsetHeight}measureRangeSize(t){return this._forOf?this._forOf.measureRangeSize(t,this.orientation):0}checkViewportSize(){this._measureViewportSize(),this._scrollStrategy.onDataLengthChanged()}_measureViewportSize(){this._viewportSize=this.scrollable.measureViewportSize(this.orientation)}_markChangeDetectionNeeded(t){t&&this._runAfterChangeDetection.push(t),this._isChangeDetectionPending||(this._isChangeDetectionPending=!0,this.ngZone.runOutsideAngular(()=>Promise.resolve().then(()=>{this._doChangeDetection()})))}_doChangeDetection(){this._isChangeDetectionPending=!1,this._contentWrapper.nativeElement.style.transform=this._renderedContentTransform,this.ngZone.run(()=>this._changeDetectorRef.markForCheck());const t=this._runAfterChangeDetection;this._runAfterChangeDetection=[];for(const n of t)n()}_calculateSpacerSize(){this._totalContentHeight="horizontal"===this.orientation?"":`${this._totalContentSize}px`,this._totalContentWidth="horizontal"===this.orientation?`${this._totalContentSize}px`:""}}return i.\u0275fac=function(t){return new(t||i)(wt(Cs),wt(pl),wt(mo),wt(ice,8),wt(Ed,8),wt(S2),wt(Rb),wt(Vz,8))},i.\u0275cmp=Fr({type:i,selectors:[["cdk-virtual-scroll-viewport"]],viewQuery:function(t,n){if(1&t&&la(tce,7),2&t){let r;so(r=oo())&&(n._contentWrapper=r.first)}},hostAttrs:[1,"cdk-virtual-scroll-viewport"],hostVars:4,hostBindings:function(t,n){2&t&&jo("cdk-virtual-scroll-orientation-horizontal","horizontal"===n.orientation)("cdk-virtual-scroll-orientation-vertical","horizontal"!==n.orientation)},inputs:{orientation:"orientation",appendOnly:"appendOnly"},outputs:{scrolledIndexChange:"scrolledIndexChange"},standalone:!0,features:[Po([{provide:Hz,useFactory:(e,t)=>e||t,deps:[[new Ld,new G0(Vz)],i]}]),As,c5],ngContentSelectors:nce,decls:4,vars:4,consts:[[1,"cdk-virtual-scroll-content-wrapper"],["contentWrapper",""],[1,"cdk-virtual-scroll-spacer"]],template:function(t,n){1&t&&(fh(),Zt(0,"div",0,1),uu(2),un(),Pr(3,"div",2)),2&t&&(Nn(3),Fp("width",n._totalContentWidth)("height",n._totalContentHeight))},styles:["cdk-virtual-scroll-viewport{display:block;position:relative;transform:translateZ(0)}.cdk-virtual-scrollable{overflow:auto;will-change:scroll-position;contain:strict;-webkit-overflow-scrolling:touch}.cdk-virtual-scroll-content-wrapper{position:absolute;top:0;left:0;contain:content}[dir=rtl] .cdk-virtual-scroll-content-wrapper{right:0;left:auto}.cdk-virtual-scroll-orientation-horizontal .cdk-virtual-scroll-content-wrapper{min-height:100%}.cdk-virtual-scroll-orientation-horizontal .cdk-virtual-scroll-content-wrapper>dl:not([cdkVirtualFor]),.cdk-virtual-scroll-orientation-horizontal .cdk-virtual-scroll-content-wrapper>ol:not([cdkVirtualFor]),.cdk-virtual-scroll-orientation-horizontal .cdk-virtual-scroll-content-wrapper>table:not([cdkVirtualFor]),.cdk-virtual-scroll-orientation-horizontal .cdk-virtual-scroll-content-wrapper>ul:not([cdkVirtualFor]){padding-left:0;padding-right:0;margin-left:0;margin-right:0;border-left-width:0;border-right-width:0;outline:none}.cdk-virtual-scroll-orientation-vertical .cdk-virtual-scroll-content-wrapper{min-width:100%}.cdk-virtual-scroll-orientation-vertical .cdk-virtual-scroll-content-wrapper>dl:not([cdkVirtualFor]),.cdk-virtual-scroll-orientation-vertical .cdk-virtual-scroll-content-wrapper>ol:not([cdkVirtualFor]),.cdk-virtual-scroll-orientation-vertical .cdk-virtual-scroll-content-wrapper>table:not([cdkVirtualFor]),.cdk-virtual-scroll-orientation-vertical .cdk-virtual-scroll-content-wrapper>ul:not([cdkVirtualFor]){padding-top:0;padding-bottom:0;margin-top:0;margin-bottom:0;border-top-width:0;border-bottom-width:0;outline:none}.cdk-virtual-scroll-spacer{height:1px;transform-origin:0 0;flex:0 0 auto}[dir=rtl] .cdk-virtual-scroll-spacer{transform-origin:100% 0}"],encapsulation:2,changeDetection:0}),i})(),LS=(()=>{class i{}return i.\u0275fac=function(t){return new(t||i)},i.\u0275mod=ia({type:i}),i.\u0275inj=ft({}),i})(),Gz=(()=>{class i{}return i.\u0275fac=function(t){return new(t||i)},i.\u0275mod=ia({type:i}),i.\u0275inj=ft({imports:[DS,LS,cce,DS,LS]}),i})();const qz=tz();class uce{constructor(e,t){this._viewportRuler=e,this._previousHTMLStyles={top:"",left:""},this._isEnabled=!1,this._document=t}attach(){}enable(){if(this._canBeEnabled()){const e=this._document.documentElement;this._previousScrollPosition=this._viewportRuler.getViewportScrollPosition(),this._previousHTMLStyles.left=e.style.left||"",this._previousHTMLStyles.top=e.style.top||"",e.style.left=Yu(-this._previousScrollPosition.left),e.style.top=Yu(-this._previousScrollPosition.top),e.classList.add("cdk-global-scrollblock"),this._isEnabled=!0}}disable(){if(this._isEnabled){const e=this._document.documentElement,n=e.style,r=this._document.body.style,s=n.scrollBehavior||"",a=r.scrollBehavior||"";this._isEnabled=!1,n.left=this._previousHTMLStyles.left,n.top=this._previousHTMLStyles.top,e.classList.remove("cdk-global-scrollblock"),qz&&(n.scrollBehavior=r.scrollBehavior="auto"),window.scroll(this._previousScrollPosition.left,this._previousScrollPosition.top),qz&&(n.scrollBehavior=s,r.scrollBehavior=a)}}_canBeEnabled(){if(this._document.documentElement.classList.contains("cdk-global-scrollblock")||this._isEnabled)return!1;const t=this._document.body,n=this._viewportRuler.getViewportSize();return t.scrollHeight>n.height||t.scrollWidth>n.width}}class hce{constructor(e,t,n,r){this._scrollDispatcher=e,this._ngZone=t,this._viewportRuler=n,this._config=r,this._scrollSubscription=null,this._detach=()=>{this.disable(),this._overlayRef.hasAttached()&&this._ngZone.run(()=>this._overlayRef.detach())}}attach(e){this._overlayRef=e}enable(){if(this._scrollSubscription)return;const e=this._scrollDispatcher.scrolled(0);this._config&&this._config.threshold&&this._config.threshold>1?(this._initialScrollPosition=this._viewportRuler.getViewportScrollPosition().top,this._scrollSubscription=e.subscribe(()=>{const t=this._viewportRuler.getViewportScrollPosition().top;Math.abs(t-this._initialScrollPosition)>this._config.threshold?this._detach():this._overlayRef.updatePosition()})):this._scrollSubscription=e.subscribe(this._detach)}disable(){this._scrollSubscription&&(this._scrollSubscription.unsubscribe(),this._scrollSubscription=null)}detach(){this.disable(),this._overlayRef=null}}class Qz{enable(){}disable(){}attach(){}}function BF(i,e){return e.some(t=>i.bottomt.bottom||i.rightt.right)}function Wz(i,e){return e.some(t=>i.topt.bottom||i.leftt.right)}class dce{constructor(e,t,n,r){this._scrollDispatcher=e,this._viewportRuler=t,this._ngZone=n,this._config=r,this._scrollSubscription=null}attach(e){this._overlayRef=e}enable(){this._scrollSubscription||(this._scrollSubscription=this._scrollDispatcher.scrolled(this._config?this._config.scrollThrottle:0).subscribe(()=>{if(this._overlayRef.updatePosition(),this._config&&this._config.autoClose){const t=this._overlayRef.overlayElement.getBoundingClientRect(),{width:n,height:r}=this._viewportRuler.getViewportSize();BF(t,[{width:n,height:r,bottom:r,right:n,top:0,left:0}])&&(this.disable(),this._ngZone.run(()=>this._overlayRef.detach()))}}))}disable(){this._scrollSubscription&&(this._scrollSubscription.unsubscribe(),this._scrollSubscription=null)}detach(){this.disable(),this._overlayRef=null}}let fce=(()=>{class i{constructor(t,n,r,s){this._scrollDispatcher=t,this._viewportRuler=n,this._ngZone=r,this.noop=()=>new Qz,this.close=a=>new hce(this._scrollDispatcher,this._ngZone,this._viewportRuler,a),this.block=()=>new uce(this._viewportRuler,this._document),this.reposition=a=>new dce(this._scrollDispatcher,this._viewportRuler,this._ngZone,a),this._document=s}}return i.\u0275fac=function(t){return new(t||i)(ci(S2),ci(Rb),ci(mo),ci(Zo))},i.\u0275prov=Ue({token:i,factory:i.\u0275fac,providedIn:"root"}),i})();class IF{constructor(e){if(this.scrollStrategy=new Qz,this.panelClass="",this.hasBackdrop=!1,this.backdropClass="cdk-overlay-dark-backdrop",this.disposeOnNavigation=!1,e){const t=Object.keys(e);for(const n of t)void 0!==e[n]&&(this[n]=e[n])}}}class pce{constructor(e,t){this.connectionPair=e,this.scrollableViewProperties=t}}let jz=(()=>{class i{constructor(t){this._attachedOverlays=[],this._document=t}ngOnDestroy(){this.detach()}add(t){this.remove(t),this._attachedOverlays.push(t)}remove(t){const n=this._attachedOverlays.indexOf(t);n>-1&&this._attachedOverlays.splice(n,1),0===this._attachedOverlays.length&&this.detach()}}return i.\u0275fac=function(t){return new(t||i)(ci(Zo))},i.\u0275prov=Ue({token:i,factory:i.\u0275fac,providedIn:"root"}),i})(),Ace=(()=>{class i extends jz{constructor(t,n){super(t),this._ngZone=n,this._keydownListener=r=>{const s=this._attachedOverlays;for(let a=s.length-1;a>-1;a--)if(s[a]._keydownEvents.observers.length>0){const l=s[a]._keydownEvents;this._ngZone?this._ngZone.run(()=>l.next(r)):l.next(r);break}}}add(t){super.add(t),this._isAttached||(this._ngZone?this._ngZone.runOutsideAngular(()=>this._document.body.addEventListener("keydown",this._keydownListener)):this._document.body.addEventListener("keydown",this._keydownListener),this._isAttached=!0)}detach(){this._isAttached&&(this._document.body.removeEventListener("keydown",this._keydownListener),this._isAttached=!1)}}return i.\u0275fac=function(t){return new(t||i)(ci(Zo),ci(mo,8))},i.\u0275prov=Ue({token:i,factory:i.\u0275fac,providedIn:"root"}),i})(),mce=(()=>{class i extends jz{constructor(t,n,r){super(t),this._platform=n,this._ngZone=r,this._cursorStyleIsSet=!1,this._pointerDownListener=s=>{this._pointerDownEventTarget=GA(s)},this._clickListener=s=>{const a=GA(s),l="click"===s.type&&this._pointerDownEventTarget?this._pointerDownEventTarget:a;this._pointerDownEventTarget=null;const u=this._attachedOverlays.slice();for(let d=u.length-1;d>-1;d--){const p=u[d];if(p._outsidePointerEvents.observers.length<1||!p.hasAttached())continue;if(p.overlayElement.contains(a)||p.overlayElement.contains(l))break;const y=p._outsidePointerEvents;this._ngZone?this._ngZone.run(()=>y.next(s)):y.next(s)}}}add(t){if(super.add(t),!this._isAttached){const n=this._document.body;this._ngZone?this._ngZone.runOutsideAngular(()=>this._addEventListeners(n)):this._addEventListeners(n),this._platform.IOS&&!this._cursorStyleIsSet&&(this._cursorOriginalValue=n.style.cursor,n.style.cursor="pointer",this._cursorStyleIsSet=!0),this._isAttached=!0}}detach(){if(this._isAttached){const t=this._document.body;t.removeEventListener("pointerdown",this._pointerDownListener,!0),t.removeEventListener("click",this._clickListener,!0),t.removeEventListener("auxclick",this._clickListener,!0),t.removeEventListener("contextmenu",this._clickListener,!0),this._platform.IOS&&this._cursorStyleIsSet&&(t.style.cursor=this._cursorOriginalValue,this._cursorStyleIsSet=!1),this._isAttached=!1}}_addEventListeners(t){t.addEventListener("pointerdown",this._pointerDownListener,!0),t.addEventListener("click",this._clickListener,!0),t.addEventListener("auxclick",this._clickListener,!0),t.addEventListener("contextmenu",this._clickListener,!0)}}return i.\u0275fac=function(t){return new(t||i)(ci(Zo),ci(Ku),ci(mo,8))},i.\u0275prov=Ue({token:i,factory:i.\u0275fac,providedIn:"root"}),i})(),mD=(()=>{class i{constructor(t,n){this._platform=n,this._document=t}ngOnDestroy(){this._containerElement?.remove()}getContainerElement(){return this._containerElement||this._createContainer(),this._containerElement}_createContainer(){const t="cdk-overlay-container";if(this._platform.isBrowser||dF()){const r=this._document.querySelectorAll(`.${t}[platform="server"], .${t}[platform="test"]`);for(let s=0;sthis._backdropClick.next(y),this._backdropTransitionendHandler=y=>{this._disposeBackdrop(y.target)},this._keydownEvents=new D,this._outsidePointerEvents=new D,r.scrollStrategy&&(this._scrollStrategy=r.scrollStrategy,this._scrollStrategy.attach(this)),this._positionStrategy=r.positionStrategy}get overlayElement(){return this._pane}get backdropElement(){return this._backdropElement}get hostElement(){return this._host}attach(e){!this._host.parentElement&&this._previousHostParent&&this._previousHostParent.appendChild(this._host);const t=this._portalOutlet.attach(e);return this._positionStrategy&&this._positionStrategy.attach(this),this._updateStackingOrder(),this._updateElementSize(),this._updateElementDirection(),this._scrollStrategy&&this._scrollStrategy.enable(),this._ngZone.onStable.pipe(nu(1)).subscribe(()=>{this.hasAttached()&&this.updatePosition()}),this._togglePointerEvents(!0),this._config.hasBackdrop&&this._attachBackdrop(),this._config.panelClass&&this._toggleClasses(this._pane,this._config.panelClass,!0),this._attachments.next(),this._keyboardDispatcher.add(this),this._config.disposeOnNavigation&&(this._locationChanges=this._location.subscribe(()=>this.dispose())),this._outsideClickDispatcher.add(this),"function"==typeof t?.onDestroy&&t.onDestroy(()=>{this.hasAttached()&&this._ngZone.runOutsideAngular(()=>Promise.resolve().then(()=>this.detach()))}),t}detach(){if(!this.hasAttached())return;this.detachBackdrop(),this._togglePointerEvents(!1),this._positionStrategy&&this._positionStrategy.detach&&this._positionStrategy.detach(),this._scrollStrategy&&this._scrollStrategy.disable();const e=this._portalOutlet.detach();return this._detachments.next(),this._keyboardDispatcher.remove(this),this._detachContentWhenStable(),this._locationChanges.unsubscribe(),this._outsideClickDispatcher.remove(this),e}dispose(){const e=this.hasAttached();this._positionStrategy&&this._positionStrategy.dispose(),this._disposeScrollStrategy(),this._disposeBackdrop(this._backdropElement),this._locationChanges.unsubscribe(),this._keyboardDispatcher.remove(this),this._portalOutlet.dispose(),this._attachments.complete(),this._backdropClick.complete(),this._keydownEvents.complete(),this._outsidePointerEvents.complete(),this._outsideClickDispatcher.remove(this),this._host?.remove(),this._previousHostParent=this._pane=this._host=null,e&&this._detachments.next(),this._detachments.complete()}hasAttached(){return this._portalOutlet.hasAttached()}backdropClick(){return this._backdropClick}attachments(){return this._attachments}detachments(){return this._detachments}keydownEvents(){return this._keydownEvents}outsidePointerEvents(){return this._outsidePointerEvents}getConfig(){return this._config}updatePosition(){this._positionStrategy&&this._positionStrategy.apply()}updatePositionStrategy(e){e!==this._positionStrategy&&(this._positionStrategy&&this._positionStrategy.dispose(),this._positionStrategy=e,this.hasAttached()&&(e.attach(this),this.updatePosition()))}updateSize(e){this._config={...this._config,...e},this._updateElementSize()}setDirection(e){this._config={...this._config,direction:e},this._updateElementDirection()}addPanelClass(e){this._pane&&this._toggleClasses(this._pane,e,!0)}removePanelClass(e){this._pane&&this._toggleClasses(this._pane,e,!1)}getDirection(){const e=this._config.direction;return e?"string"==typeof e?e:e.value:"ltr"}updateScrollStrategy(e){e!==this._scrollStrategy&&(this._disposeScrollStrategy(),this._scrollStrategy=e,this.hasAttached()&&(e.attach(this),e.enable()))}_updateElementDirection(){this._host.setAttribute("dir",this.getDirection())}_updateElementSize(){if(!this._pane)return;const e=this._pane.style;e.width=Yu(this._config.width),e.height=Yu(this._config.height),e.minWidth=Yu(this._config.minWidth),e.minHeight=Yu(this._config.minHeight),e.maxWidth=Yu(this._config.maxWidth),e.maxHeight=Yu(this._config.maxHeight)}_togglePointerEvents(e){this._pane.style.pointerEvents=e?"":"none"}_attachBackdrop(){const e="cdk-overlay-backdrop-showing";this._backdropElement=this._document.createElement("div"),this._backdropElement.classList.add("cdk-overlay-backdrop"),this._animationsDisabled&&this._backdropElement.classList.add("cdk-overlay-backdrop-noop-animation"),this._config.backdropClass&&this._toggleClasses(this._backdropElement,this._config.backdropClass,!0),this._host.parentElement.insertBefore(this._backdropElement,this._host),this._backdropElement.addEventListener("click",this._backdropClickHandler),!this._animationsDisabled&&typeof requestAnimationFrame<"u"?this._ngZone.runOutsideAngular(()=>{requestAnimationFrame(()=>{this._backdropElement&&this._backdropElement.classList.add(e)})}):this._backdropElement.classList.add(e)}_updateStackingOrder(){this._host.nextSibling&&this._host.parentNode.appendChild(this._host)}detachBackdrop(){const e=this._backdropElement;if(e){if(this._animationsDisabled)return void this._disposeBackdrop(e);e.classList.remove("cdk-overlay-backdrop-showing"),this._ngZone.runOutsideAngular(()=>{e.addEventListener("transitionend",this._backdropTransitionendHandler)}),e.style.pointerEvents="none",this._backdropTimeout=this._ngZone.runOutsideAngular(()=>setTimeout(()=>{this._disposeBackdrop(e)},500))}}_toggleClasses(e,t,n){const r=TS(t||[]).filter(s=>!!s);r.length&&(n?e.classList.add(...r):e.classList.remove(...r))}_detachContentWhenStable(){this._ngZone.runOutsideAngular(()=>{const e=this._ngZone.onStable.pipe(ql(It(this._attachments,this._detachments))).subscribe(()=>{(!this._pane||!this._host||0===this._pane.children.length)&&(this._pane&&this._config.panelClass&&this._toggleClasses(this._pane,this._config.panelClass,!1),this._host&&this._host.parentElement&&(this._previousHostParent=this._host.parentElement,this._host.remove()),e.unsubscribe())})})}_disposeScrollStrategy(){const e=this._scrollStrategy;e&&(e.disable(),e.detach&&e.detach())}_disposeBackdrop(e){e&&(e.removeEventListener("click",this._backdropClickHandler),e.removeEventListener("transitionend",this._backdropTransitionendHandler),e.remove(),this._backdropElement===e&&(this._backdropElement=null)),this._backdropTimeout&&(clearTimeout(this._backdropTimeout),this._backdropTimeout=void 0)}}const $z="cdk-overlay-connected-position-bounding-box",gce=/([A-Za-z%]+)$/;class _ce{get positions(){return this._preferredPositions}constructor(e,t,n,r,s){this._viewportRuler=t,this._document=n,this._platform=r,this._overlayContainer=s,this._lastBoundingBoxSize={width:0,height:0},this._isPushed=!1,this._canPush=!0,this._growAfterOpen=!1,this._hasFlexibleDimensions=!0,this._positionLocked=!1,this._viewportMargin=0,this._scrollables=[],this._preferredPositions=[],this._positionChanges=new D,this._resizeSubscription=De.EMPTY,this._offsetX=0,this._offsetY=0,this._appliedPanelClasses=[],this.positionChanges=this._positionChanges,this.setOrigin(e)}attach(e){this._validatePositions(),e.hostElement.classList.add($z),this._overlayRef=e,this._boundingBox=e.hostElement,this._pane=e.overlayElement,this._isDisposed=!1,this._isInitialRender=!0,this._lastPosition=null,this._resizeSubscription.unsubscribe(),this._resizeSubscription=this._viewportRuler.change().subscribe(()=>{this._isInitialRender=!0,this.apply()})}apply(){if(this._isDisposed||!this._platform.isBrowser)return;if(!this._isInitialRender&&this._positionLocked&&this._lastPosition)return void this.reapplyLastPosition();this._clearPanelClasses(),this._resetOverlayElementStyles(),this._resetBoundingBoxStyles(),this._viewportRect=this._getNarrowedViewportRect(),this._originRect=this._getOriginRect(),this._overlayRect=this._pane.getBoundingClientRect(),this._containerRect=this._overlayContainer.getContainerElement().getBoundingClientRect();const e=this._originRect,t=this._overlayRect,n=this._viewportRect,r=this._containerRect,s=[];let a;for(let l of this._preferredPositions){let u=this._getOriginPoint(e,r,l),d=this._getOverlayPoint(u,t,l),p=this._getOverlayFit(d,t,n,l);if(p.isCompletelyWithinViewport)return this._isPushed=!1,void this._applyPosition(l,u);this._canFitWithFlexibleDimensions(p,d,n)?s.push({position:l,origin:u,overlayRect:t,boundingBoxRect:this._calculateBoundingBoxRect(u,l)}):(!a||a.overlayFit.visibleAreau&&(u=p,l=d)}return this._isPushed=!1,void this._applyPosition(l.position,l.origin)}if(this._canPush)return this._isPushed=!0,void this._applyPosition(a.position,a.originPoint);this._applyPosition(a.position,a.originPoint)}detach(){this._clearPanelClasses(),this._lastPosition=null,this._previousPushAmount=null,this._resizeSubscription.unsubscribe()}dispose(){this._isDisposed||(this._boundingBox&&Lb(this._boundingBox.style,{top:"",left:"",right:"",bottom:"",height:"",width:"",alignItems:"",justifyContent:""}),this._pane&&this._resetOverlayElementStyles(),this._overlayRef&&this._overlayRef.hostElement.classList.remove($z),this.detach(),this._positionChanges.complete(),this._overlayRef=this._boundingBox=null,this._isDisposed=!0)}reapplyLastPosition(){if(this._isDisposed||!this._platform.isBrowser)return;const e=this._lastPosition;if(e){this._originRect=this._getOriginRect(),this._overlayRect=this._pane.getBoundingClientRect(),this._viewportRect=this._getNarrowedViewportRect(),this._containerRect=this._overlayContainer.getContainerElement().getBoundingClientRect();const t=this._getOriginPoint(this._originRect,this._containerRect,e);this._applyPosition(e,t)}else this.apply()}withScrollableContainers(e){return this._scrollables=e,this}withPositions(e){return this._preferredPositions=e,-1===e.indexOf(this._lastPosition)&&(this._lastPosition=null),this._validatePositions(),this}withViewportMargin(e){return this._viewportMargin=e,this}withFlexibleDimensions(e=!0){return this._hasFlexibleDimensions=e,this}withGrowAfterOpen(e=!0){return this._growAfterOpen=e,this}withPush(e=!0){return this._canPush=e,this}withLockedPosition(e=!0){return this._positionLocked=e,this}setOrigin(e){return this._origin=e,this}withDefaultOffsetX(e){return this._offsetX=e,this}withDefaultOffsetY(e){return this._offsetY=e,this}withTransformOriginOn(e){return this._transformOriginSelector=e,this}_getOriginPoint(e,t,n){let r,s;if("center"==n.originX)r=e.left+e.width/2;else{const a=this._isRtl()?e.right:e.left,l=this._isRtl()?e.left:e.right;r="start"==n.originX?a:l}return t.left<0&&(r-=t.left),s="center"==n.originY?e.top+e.height/2:"top"==n.originY?e.top:e.bottom,t.top<0&&(s-=t.top),{x:r,y:s}}_getOverlayPoint(e,t,n){let r,s;return r="center"==n.overlayX?-t.width/2:"start"===n.overlayX?this._isRtl()?-t.width:0:this._isRtl()?0:-t.width,s="center"==n.overlayY?-t.height/2:"top"==n.overlayY?0:-t.height,{x:e.x+r,y:e.y+s}}_getOverlayFit(e,t,n,r){const s=Kz(t);let{x:a,y:l}=e,u=this._getOffset(r,"x"),d=this._getOffset(r,"y");u&&(a+=u),d&&(l+=d);let C=0-l,O=l+s.height-n.height,Q=this._subtractOverflows(s.width,0-a,a+s.width-n.width),W=this._subtractOverflows(s.height,C,O),se=Q*W;return{visibleArea:se,isCompletelyWithinViewport:s.width*s.height===se,fitsInViewportVertically:W===s.height,fitsInViewportHorizontally:Q==s.width}}_canFitWithFlexibleDimensions(e,t,n){if(this._hasFlexibleDimensions){const r=n.bottom-t.y,s=n.right-t.x,a=Xz(this._overlayRef.getConfig().minHeight),l=Xz(this._overlayRef.getConfig().minWidth);return(e.fitsInViewportVertically||null!=a&&a<=r)&&(e.fitsInViewportHorizontally||null!=l&&l<=s)}return!1}_pushOverlayOnScreen(e,t,n){if(this._previousPushAmount&&this._positionLocked)return{x:e.x+this._previousPushAmount.x,y:e.y+this._previousPushAmount.y};const r=Kz(t),s=this._viewportRect,a=Math.max(e.x+r.width-s.width,0),l=Math.max(e.y+r.height-s.height,0),u=Math.max(s.top-n.top-e.y,0),d=Math.max(s.left-n.left-e.x,0);let p=0,y=0;return p=r.width<=s.width?d||-a:e.xQ&&!this._isInitialRender&&!this._growAfterOpen&&(a=e.y-Q/2)}if("end"===t.overlayX&&!r||"start"===t.overlayX&&r)C=n.width-e.x+this._viewportMargin,p=e.x-this._viewportMargin;else if("start"===t.overlayX&&!r||"end"===t.overlayX&&r)y=e.x,p=n.right-e.x;else{const O=Math.min(n.right-e.x+n.left,e.x),Q=this._lastBoundingBoxSize.width;p=2*O,y=e.x-O,p>Q&&!this._isInitialRender&&!this._growAfterOpen&&(y=e.x-Q/2)}return{top:a,left:y,bottom:l,right:C,width:p,height:s}}_setBoundingBoxStyles(e,t){const n=this._calculateBoundingBoxRect(e,t);!this._isInitialRender&&!this._growAfterOpen&&(n.height=Math.min(n.height,this._lastBoundingBoxSize.height),n.width=Math.min(n.width,this._lastBoundingBoxSize.width));const r={};if(this._hasExactPosition())r.top=r.left="0",r.bottom=r.right=r.maxHeight=r.maxWidth="",r.width=r.height="100%";else{const s=this._overlayRef.getConfig().maxHeight,a=this._overlayRef.getConfig().maxWidth;r.height=Yu(n.height),r.top=Yu(n.top),r.bottom=Yu(n.bottom),r.width=Yu(n.width),r.left=Yu(n.left),r.right=Yu(n.right),r.alignItems="center"===t.overlayX?"center":"end"===t.overlayX?"flex-end":"flex-start",r.justifyContent="center"===t.overlayY?"center":"bottom"===t.overlayY?"flex-end":"flex-start",s&&(r.maxHeight=Yu(s)),a&&(r.maxWidth=Yu(a))}this._lastBoundingBoxSize=n,Lb(this._boundingBox.style,r)}_resetBoundingBoxStyles(){Lb(this._boundingBox.style,{top:"0",left:"0",right:"0",bottom:"0",height:"",width:"",alignItems:"",justifyContent:""})}_resetOverlayElementStyles(){Lb(this._pane.style,{top:"",left:"",bottom:"",right:"",position:"",transform:""})}_setOverlayElementStyles(e,t){const n={},r=this._hasExactPosition(),s=this._hasFlexibleDimensions,a=this._overlayRef.getConfig();if(r){const p=this._viewportRuler.getViewportScrollPosition();Lb(n,this._getExactOverlayY(t,e,p)),Lb(n,this._getExactOverlayX(t,e,p))}else n.position="static";let l="",u=this._getOffset(t,"x"),d=this._getOffset(t,"y");u&&(l+=`translateX(${u}px) `),d&&(l+=`translateY(${d}px)`),n.transform=l.trim(),a.maxHeight&&(r?n.maxHeight=Yu(a.maxHeight):s&&(n.maxHeight="")),a.maxWidth&&(r?n.maxWidth=Yu(a.maxWidth):s&&(n.maxWidth="")),Lb(this._pane.style,n)}_getExactOverlayY(e,t,n){let r={top:"",bottom:""},s=this._getOverlayPoint(t,this._overlayRect,e);return this._isPushed&&(s=this._pushOverlayOnScreen(s,this._overlayRect,n)),"bottom"===e.overlayY?r.bottom=this._document.documentElement.clientHeight-(s.y+this._overlayRect.height)+"px":r.top=Yu(s.y),r}_getExactOverlayX(e,t,n){let a,r={left:"",right:""},s=this._getOverlayPoint(t,this._overlayRect,e);return this._isPushed&&(s=this._pushOverlayOnScreen(s,this._overlayRect,n)),a=this._isRtl()?"end"===e.overlayX?"left":"right":"end"===e.overlayX?"right":"left","right"===a?r.right=this._document.documentElement.clientWidth-(s.x+this._overlayRect.width)+"px":r.left=Yu(s.x),r}_getScrollVisibility(){const e=this._getOriginRect(),t=this._pane.getBoundingClientRect(),n=this._scrollables.map(r=>r.getElementRef().nativeElement.getBoundingClientRect());return{isOriginClipped:Wz(e,n),isOriginOutsideView:BF(e,n),isOverlayClipped:Wz(t,n),isOverlayOutsideView:BF(t,n)}}_subtractOverflows(e,...t){return t.reduce((n,r)=>n-Math.max(r,0),e)}_getNarrowedViewportRect(){const e=this._document.documentElement.clientWidth,t=this._document.documentElement.clientHeight,n=this._viewportRuler.getViewportScrollPosition();return{top:n.top+this._viewportMargin,left:n.left+this._viewportMargin,right:n.left+e-this._viewportMargin,bottom:n.top+t-this._viewportMargin,width:e-2*this._viewportMargin,height:t-2*this._viewportMargin}}_isRtl(){return"rtl"===this._overlayRef.getDirection()}_hasExactPosition(){return!this._hasFlexibleDimensions||this._isPushed}_getOffset(e,t){return"x"===t?null==e.offsetX?this._offsetX:e.offsetX:null==e.offsetY?this._offsetY:e.offsetY}_validatePositions(){}_addPanelClasses(e){this._pane&&TS(e).forEach(t=>{""!==t&&-1===this._appliedPanelClasses.indexOf(t)&&(this._appliedPanelClasses.push(t),this._pane.classList.add(t))})}_clearPanelClasses(){this._pane&&(this._appliedPanelClasses.forEach(e=>{this._pane.classList.remove(e)}),this._appliedPanelClasses=[])}_getOriginRect(){const e=this._origin;if(e instanceof Cs)return e.nativeElement.getBoundingClientRect();if(e instanceof Element)return e.getBoundingClientRect();const t=e.width||0,n=e.height||0;return{top:e.y,bottom:e.y+n,left:e.x,right:e.x+t,height:n,width:t}}}function Lb(i,e){for(let t in e)e.hasOwnProperty(t)&&(i[t]=e[t]);return i}function Xz(i){if("number"!=typeof i&&null!=i){const[e,t]=i.split(gce);return t&&"px"!==t?null:parseFloat(e)}return i||null}function Kz(i){return{top:Math.floor(i.top),right:Math.floor(i.right),bottom:Math.floor(i.bottom),left:Math.floor(i.left),width:Math.floor(i.width),height:Math.floor(i.height)}}const Yz="cdk-global-overlay-wrapper";class yce{constructor(){this._cssPosition="static",this._topOffset="",this._bottomOffset="",this._alignItems="",this._xPosition="",this._xOffset="",this._width="",this._height="",this._isDisposed=!1}attach(e){const t=e.getConfig();this._overlayRef=e,this._width&&!t.width&&e.updateSize({width:this._width}),this._height&&!t.height&&e.updateSize({height:this._height}),e.hostElement.classList.add(Yz),this._isDisposed=!1}top(e=""){return this._bottomOffset="",this._topOffset=e,this._alignItems="flex-start",this}left(e=""){return this._xOffset=e,this._xPosition="left",this}bottom(e=""){return this._topOffset="",this._bottomOffset=e,this._alignItems="flex-end",this}right(e=""){return this._xOffset=e,this._xPosition="right",this}start(e=""){return this._xOffset=e,this._xPosition="start",this}end(e=""){return this._xOffset=e,this._xPosition="end",this}width(e=""){return this._overlayRef?this._overlayRef.updateSize({width:e}):this._width=e,this}height(e=""){return this._overlayRef?this._overlayRef.updateSize({height:e}):this._height=e,this}centerHorizontally(e=""){return this.left(e),this._xPosition="center",this}centerVertically(e=""){return this.top(e),this._alignItems="center",this}apply(){if(!this._overlayRef||!this._overlayRef.hasAttached())return;const e=this._overlayRef.overlayElement.style,t=this._overlayRef.hostElement.style,n=this._overlayRef.getConfig(),{width:r,height:s,maxWidth:a,maxHeight:l}=n,u=!("100%"!==r&&"100vw"!==r||a&&"100%"!==a&&"100vw"!==a),d=!("100%"!==s&&"100vh"!==s||l&&"100%"!==l&&"100vh"!==l),p=this._xPosition,y=this._xOffset,C="rtl"===this._overlayRef.getConfig().direction;let O="",Q="",W="";u?W="flex-start":"center"===p?(W="center",C?Q=y:O=y):C?"left"===p||"end"===p?(W="flex-end",O=y):("right"===p||"start"===p)&&(W="flex-start",Q=y):"left"===p||"start"===p?(W="flex-start",O=y):("right"===p||"end"===p)&&(W="flex-end",Q=y),e.position=this._cssPosition,e.marginLeft=u?"0":O,e.marginTop=d?"0":this._topOffset,e.marginBottom=this._bottomOffset,e.marginRight=u?"0":Q,t.justifyContent=W,t.alignItems=d?"flex-start":this._alignItems}dispose(){if(this._isDisposed||!this._overlayRef)return;const e=this._overlayRef.overlayElement.style,t=this._overlayRef.hostElement,n=t.style;t.classList.remove(Yz),n.justifyContent=n.alignItems=e.marginTop=e.marginBottom=e.marginLeft=e.marginRight=e.position="",this._overlayRef=null,this._isDisposed=!0}}let vce=(()=>{class i{constructor(t,n,r,s){this._viewportRuler=t,this._document=n,this._platform=r,this._overlayContainer=s}global(){return new yce}flexibleConnectedTo(t){return new _ce(t,this._viewportRuler,this._document,this._platform,this._overlayContainer)}}return i.\u0275fac=function(t){return new(t||i)(ci(Rb),ci(Zo),ci(Ku),ci(mD))},i.\u0275prov=Ue({token:i,factory:i.\u0275fac,providedIn:"root"}),i})(),bce=0,ap=(()=>{class i{constructor(t,n,r,s,a,l,u,d,p,y,C,O){this.scrollStrategies=t,this._overlayContainer=n,this._componentFactoryResolver=r,this._positionBuilder=s,this._keyboardDispatcher=a,this._injector=l,this._ngZone=u,this._document=d,this._directionality=p,this._location=y,this._outsideClickDispatcher=C,this._animationsModuleType=O}create(t){const n=this._createHostElement(),r=this._createPaneElement(n),s=this._createPortalOutlet(r),a=new IF(t);return a.direction=a.direction||this._directionality.value,new NS(s,n,r,a,this._ngZone,this._keyboardDispatcher,this._document,this._location,this._outsideClickDispatcher,"NoopAnimations"===this._animationsModuleType)}position(){return this._positionBuilder}_createPaneElement(t){const n=this._document.createElement("div");return n.id="cdk-overlay-"+bce++,n.classList.add("cdk-overlay-pane"),t.appendChild(n),n}_createHostElement(){const t=this._document.createElement("div");return this._overlayContainer.getContainerElement().appendChild(t),t}_createPortalOutlet(t){return this._appRef||(this._appRef=this._injector.get(cw)),new Gle(t,this._componentFactoryResolver,this._appRef,this._injector,this._document)}}return i.\u0275fac=function(t){return new(t||i)(ci(fce),ci(mD),ci(Gd),ci(vce),ci(Ace),ci(zc),ci(mo),ci(Zo),ci(Ed),ci(eM),ci(mce),ci(_h,8))},i.\u0275prov=Ue({token:i,factory:i.\u0275fac,providedIn:"root"}),i})();const Cce={provide:new cr("cdk-connected-overlay-scroll-strategy"),deps:[ap],useFactory:function wce(i){return()=>i.scrollStrategies.reposition()}};let US=(()=>{class i{}return i.\u0275fac=function(t){return new(t||i)},i.\u0275mod=ia({type:i}),i.\u0275inj=ft({providers:[ap,Cce],imports:[DS,kS,Gz,Gz]}),i})();const Mce=["mat-menu-item",""];function Sce(i,e){1&i&&(vl(),Zt(0,"svg",3),Pr(1,"polygon",4),un())}const Tce=[[["mat-icon"],["","matMenuItemIcon",""]],"*"],Ece=["mat-icon, [matMenuItemIcon]","*"];function Dce(i,e){if(1&i){const t=Za();Zt(0,"div",0),Fi("keydown",function(r){return ks(t),ys(Mr()._handleKeydown(r))})("click",function(){return ks(t),ys(Mr().closed.emit("click"))})("@transformMenu.start",function(r){return ks(t),ys(Mr()._onAnimationStart(r))})("@transformMenu.done",function(r){return ks(t),ys(Mr()._onAnimationDone(r))}),Zt(1,"div",1),uu(2),un()()}if(2&i){const t=Mr();Cn("id",t.panelId)("ngClass",t._classList)("@transformMenu",t._panelAnimationState),Ea("aria-label",t.ariaLabel||null)("aria-labelledby",t.ariaLabelledby||null)("aria-describedby",t.ariaDescribedby||null)}}const Bce=["*"],PF=new cr("MAT_MENU_PANEL"),Ice=kb(Pb(class{}));let Ey=(()=>{class i extends Ice{constructor(t,n,r,s,a){super(),this._elementRef=t,this._document=n,this._focusMonitor=r,this._parentMenu=s,this._changeDetectorRef=a,this.role="menuitem",this._hovered=new D,this._focused=new D,this._highlighted=!1,this._triggersSubmenu=!1,s?.addItem?.(this)}focus(t,n){this._focusMonitor&&t?this._focusMonitor.focusVia(this._getHostElement(),t,n):this._getHostElement().focus(n),this._focused.next(this)}ngAfterViewInit(){this._focusMonitor&&this._focusMonitor.monitor(this._elementRef,!1)}ngOnDestroy(){this._focusMonitor&&this._focusMonitor.stopMonitoring(this._elementRef),this._parentMenu&&this._parentMenu.removeItem&&this._parentMenu.removeItem(this),this._hovered.complete(),this._focused.complete()}_getTabIndex(){return this.disabled?"-1":"0"}_getHostElement(){return this._elementRef.nativeElement}_checkDisabled(t){this.disabled&&(t.preventDefault(),t.stopPropagation())}_handleMouseEnter(){this._hovered.next(this)}getLabel(){const t=this._elementRef.nativeElement.cloneNode(!0),n=t.querySelectorAll("mat-icon, .material-icons");for(let r=0;r enter",m0("120ms cubic-bezier(0, 0, 0.2, 1)",Kh({opacity:1,transform:"scale(1)"}))),g0("* => void",m0("100ms 25ms linear",Kh({opacity:0})))]),fadeInItems:FS("fadeInItems",[Q_("showing",Kh({opacity:1})),g0("void => *",[Kh({opacity:0}),m0("400ms 100ms cubic-bezier(0.55, 0, 0.55, 0.2)")])])};let kce=0;const Zz=new cr("mat-menu-default-options",{providedIn:"root",factory:function Fce(){return{overlapTrigger:!1,xPosition:"after",yPosition:"below",backdropClass:"cdk-overlay-transparent-backdrop"}}});let zS=(()=>{class i{get xPosition(){return this._xPosition}set xPosition(t){this._xPosition=t,this.setPositionClasses()}get yPosition(){return this._yPosition}set yPosition(t){this._yPosition=t,this.setPositionClasses()}get overlapTrigger(){return this._overlapTrigger}set overlapTrigger(t){this._overlapTrigger=pa(t)}get hasBackdrop(){return this._hasBackdrop}set hasBackdrop(t){this._hasBackdrop=pa(t)}set panelClass(t){const n=this._previousPanelClass;n&&n.length&&n.split(" ").forEach(r=>{this._classList[r]=!1}),this._previousPanelClass=t,t&&t.length&&(t.split(" ").forEach(r=>{this._classList[r]=!0}),this._elementRef.nativeElement.className="")}get classList(){return this.panelClass}set classList(t){this.panelClass=t}constructor(t,n,r,s){this._elementRef=t,this._ngZone=n,this._defaultOptions=r,this._changeDetectorRef=s,this._xPosition=this._defaultOptions.xPosition,this._yPosition=this._defaultOptions.yPosition,this._directDescendantItems=new Hv,this._classList={},this._panelAnimationState="void",this._animationDone=new D,this.overlayPanelClass=this._defaultOptions.overlayPanelClass||"",this.backdropClass=this._defaultOptions.backdropClass,this._overlapTrigger=this._defaultOptions.overlapTrigger,this._hasBackdrop=this._defaultOptions.hasBackdrop,this.closed=new Ws,this.close=this.closed,this.panelId="mat-menu-panel-"+kce++}ngOnInit(){this.setPositionClasses()}ngAfterContentInit(){this._updateDirectDescendants(),this._keyManager=new pz(this._directDescendantItems).withWrap().withTypeAhead().withHomeAndEnd(),this._keyManager.tabOut.subscribe(()=>this.closed.emit("tab")),this._directDescendantItems.changes.pipe(op(this._directDescendantItems),sp(t=>It(...t.map(n=>n._focused)))).subscribe(t=>this._keyManager.updateActiveItem(t)),this._directDescendantItems.changes.subscribe(t=>{const n=this._keyManager;if("enter"===this._panelAnimationState&&n.activeItem?._hasFocus()){const r=t.toArray(),s=Math.max(0,Math.min(r.length-1,n.activeItemIndex||0));r[s]&&!r[s].disabled?n.setActiveItem(s):n.setNextItemActive()}})}ngOnDestroy(){this._keyManager?.destroy(),this._directDescendantItems.destroy(),this.closed.complete(),this._firstItemFocusSubscription?.unsubscribe()}_hovered(){return this._directDescendantItems.changes.pipe(op(this._directDescendantItems),sp(n=>It(...n.map(r=>r._hovered))))}addItem(t){}removeItem(t){}_handleKeydown(t){const n=t.keyCode,r=this._keyManager;switch(n){case 27:v2(t)||(t.preventDefault(),this.closed.emit("keydown"));break;case 37:this.parentMenu&&"ltr"===this.direction&&this.closed.emit("keydown");break;case 39:this.parentMenu&&"rtl"===this.direction&&this.closed.emit("keydown");break;default:return(38===n||40===n)&&r.setFocusOrigin("keyboard"),void r.onKeydown(t)}t.stopPropagation()}focusFirstItem(t="program"){this._firstItemFocusSubscription?.unsubscribe(),this._firstItemFocusSubscription=this._ngZone.onStable.pipe(nu(1)).subscribe(()=>{let n=null;if(this._directDescendantItems.length&&(n=this._directDescendantItems.first._getHostElement().closest('[role="menu"]')),!n||!n.contains(document.activeElement)){const r=this._keyManager;r.setFocusOrigin(t).setFirstItemActive(),!r.activeItem&&n&&n.focus()}})}resetActiveItem(){this._keyManager.setActiveItem(-1)}setElevation(t){const n=Math.min(this._baseElevation+t,24),r=`${this._elevationPrefix}${n}`,s=Object.keys(this._classList).find(a=>a.startsWith(this._elevationPrefix));(!s||s===this._previousElevation)&&(this._previousElevation&&(this._classList[this._previousElevation]=!1),this._classList[r]=!0,this._previousElevation=r)}setPositionClasses(t=this.xPosition,n=this.yPosition){const r=this._classList;r["mat-menu-before"]="before"===t,r["mat-menu-after"]="after"===t,r["mat-menu-above"]="above"===n,r["mat-menu-below"]="below"===n,this._changeDetectorRef?.markForCheck()}_startAnimation(){this._panelAnimationState="enter"}_resetAnimation(){this._panelAnimationState="void"}_onAnimationDone(t){this._animationDone.next(t),this._isAnimating=!1}_onAnimationStart(t){this._isAnimating=!0,"enter"===t.toState&&0===this._keyManager.activeItemIndex&&(t.element.scrollTop=0)}_updateDirectDescendants(){this._allItems.changes.pipe(op(this._allItems)).subscribe(t=>{this._directDescendantItems.reset(t.filter(n=>n._parentMenu===this)),this._directDescendantItems.notifyOnChanges()})}}return i.\u0275fac=function(t){return new(t||i)(wt(Cs),wt(mo),wt(Zz),wt(pl))},i.\u0275dir=Oi({type:i,contentQueries:function(t,n,r){if(1&t&&(Qh(r,Pce,5),Qh(r,Ey,5),Qh(r,Ey,4)),2&t){let s;so(s=oo())&&(n.lazyContent=s.first),so(s=oo())&&(n._allItems=s),so(s=oo())&&(n.items=s)}},viewQuery:function(t,n){if(1&t&&la(gh,5),2&t){let r;so(r=oo())&&(n.templateRef=r.first)}},inputs:{backdropClass:"backdropClass",ariaLabel:["aria-label","ariaLabel"],ariaLabelledby:["aria-labelledby","ariaLabelledby"],ariaDescribedby:["aria-describedby","ariaDescribedby"],xPosition:"xPosition",yPosition:"yPosition",overlapTrigger:"overlapTrigger",hasBackdrop:"hasBackdrop",panelClass:["class","panelClass"],classList:"classList"},outputs:{closed:"closed",close:"close"}}),i})(),HS=(()=>{class i extends zS{constructor(t,n,r,s){super(t,n,r,s),this._elevationPrefix="mat-elevation-z",this._baseElevation=8}}return i.\u0275fac=function(t){return new(t||i)(wt(Cs),wt(mo),wt(Zz),wt(pl))},i.\u0275cmp=Fr({type:i,selectors:[["mat-menu"]],hostVars:3,hostBindings:function(t,n){2&t&&Ea("aria-label",null)("aria-labelledby",null)("aria-describedby",null)},exportAs:["matMenu"],features:[Po([{provide:PF,useExisting:i}]),As],ngContentSelectors:Bce,decls:1,vars:0,consts:[["tabindex","-1","role","menu",1,"mat-mdc-menu-panel","mdc-menu-surface","mdc-menu-surface--open","mat-mdc-elevation-specific",3,"id","ngClass","keydown","click"],[1,"mat-mdc-menu-content","mdc-list"]],template:function(t,n){1&t&&(fh(),qr(0,Dce,3,6,"ng-template"))},dependencies:[FA],styles:['.mdc-menu-surface{display:none;position:absolute;box-sizing:border-box;max-width:var(--mdc-menu-max-width, calc(100vw - 32px));max-height:var(--mdc-menu-max-height, calc(100vh - 32px));margin:0;padding:0;transform:scale(1);transform-origin:top left;opacity:0;overflow:auto;will-change:transform,opacity;z-index:8;border-radius:var(--mdc-shape-medium, 4px);transform-origin-left:top left;transform-origin-right:top right}.mdc-menu-surface:focus{outline:none}.mdc-menu-surface--animating-open{display:inline-block;transform:scale(0.8);opacity:0}.mdc-menu-surface--open{display:inline-block;transform:scale(1);opacity:1}.mdc-menu-surface--animating-closed{display:inline-block;opacity:0}[dir=rtl] .mdc-menu-surface,.mdc-menu-surface[dir=rtl]{transform-origin-left:top right;transform-origin-right:top left}.mdc-menu-surface--anchor{position:relative;overflow:visible}.mdc-menu-surface--fixed{position:fixed}.mdc-menu-surface--fullwidth{width:100%}mat-menu{display:none}.mat-mdc-menu-content{margin:0;padding:8px 0;list-style-type:none}.mat-mdc-menu-content:focus{outline:none}.mat-mdc-menu-panel.ng-animating{pointer-events:none}.cdk-high-contrast-active .mat-mdc-menu-panel{outline:solid 1px}.mat-mdc-menu-panel.mat-mdc-menu-panel{min-width:112px;max-width:280px;overflow:auto;-webkit-overflow-scrolling:touch;position:relative}.mat-mdc-menu-item{display:flex;position:relative;align-items:center;justify-content:flex-start;overflow:hidden;padding:0;padding-left:16px;padding-right:16px;-webkit-user-select:none;user-select:none;cursor:pointer;outline:none;border:none;-webkit-tap-highlight-color:rgba(0,0,0,0);cursor:pointer;width:100%;text-align:left;box-sizing:border-box;color:inherit;font-size:inherit;background:none;text-decoration:none;margin:0;min-height:48px}.mat-mdc-menu-item:focus{outline:none}[dir=rtl] .mat-mdc-menu-item,.mat-mdc-menu-item[dir=rtl]{padding-left:16px;padding-right:16px}.mat-mdc-menu-item::-moz-focus-inner{border:0}.mat-mdc-menu-item.mdc-list-item{align-items:center}.mat-mdc-menu-item[disabled]{cursor:default;opacity:.38}.mat-mdc-menu-item[disabled]::after{display:block;position:absolute;content:"";top:0;left:0;bottom:0;right:0}.mat-mdc-menu-item .mat-icon{margin-right:16px}[dir=rtl] .mat-mdc-menu-item{text-align:right}[dir=rtl] .mat-mdc-menu-item .mat-icon{margin-right:0;margin-left:16px}.mat-mdc-menu-item .mdc-list-item__primary-text{white-space:normal}.mat-mdc-menu-item.mat-mdc-menu-item-submenu-trigger{padding-right:32px}[dir=rtl] .mat-mdc-menu-item.mat-mdc-menu-item-submenu-trigger{padding-right:16px;padding-left:32px}.cdk-high-contrast-active .mat-mdc-menu-item{margin-top:1px}.mat-mdc-menu-submenu-icon{position:absolute;top:50%;right:16px;transform:translateY(-50%);width:5px;height:10px;fill:currentColor}[dir=rtl] .mat-mdc-menu-submenu-icon{right:auto;left:16px;transform:translateY(-50%) scaleX(-1)}.cdk-high-contrast-active .mat-mdc-menu-submenu-icon{fill:CanvasText}.mat-mdc-menu-item .mat-mdc-menu-ripple{top:0;left:0;right:0;bottom:0;position:absolute;pointer-events:none}'],encapsulation:2,data:{animation:[gD.transformMenu,gD.fadeInItems]},changeDetection:0}),i})();const Jz=new cr("mat-menu-scroll-strategy"),Rce={provide:Jz,deps:[ap],useFactory:function Oce(i){return()=>i.scrollStrategies.reposition()}},eH=p0({passive:!0});let Lce=(()=>{class i{get _deprecatedMatMenuTriggerFor(){return this.menu}set _deprecatedMatMenuTriggerFor(t){this.menu=t}get menu(){return this._menu}set menu(t){t!==this._menu&&(this._menu=t,this._menuCloseSubscription.unsubscribe(),t&&(this._menuCloseSubscription=t.close.subscribe(n=>{this._destroyMenu(n),("click"===n||"tab"===n)&&this._parentMaterialMenu&&this._parentMaterialMenu.closed.emit(n)})),this._menuItemInstance?._setTriggersSubmenu(this.triggersSubmenu()))}constructor(t,n,r,s,a,l,u,d,p){this._overlay=t,this._element=n,this._viewContainerRef=r,this._menuItemInstance=l,this._dir=u,this._focusMonitor=d,this._ngZone=p,this._overlayRef=null,this._menuOpen=!1,this._closingActionsSubscription=De.EMPTY,this._hoverSubscription=De.EMPTY,this._menuCloseSubscription=De.EMPTY,this._changeDetectorRef=To(pl),this._handleTouchStart=y=>{hD(y)||(this._openedBy="touch")},this._openedBy=void 0,this.restoreFocus=!0,this.menuOpened=new Ws,this.onMenuOpen=this.menuOpened,this.menuClosed=new Ws,this.onMenuClose=this.menuClosed,this._scrollStrategy=s,this._parentMaterialMenu=a instanceof zS?a:void 0,n.nativeElement.addEventListener("touchstart",this._handleTouchStart,eH)}ngAfterContentInit(){this._handleHover()}ngOnDestroy(){this._overlayRef&&(this._overlayRef.dispose(),this._overlayRef=null),this._element.nativeElement.removeEventListener("touchstart",this._handleTouchStart,eH),this._menuCloseSubscription.unsubscribe(),this._closingActionsSubscription.unsubscribe(),this._hoverSubscription.unsubscribe()}get menuOpen(){return this._menuOpen}get dir(){return this._dir&&"rtl"===this._dir.value?"rtl":"ltr"}triggersSubmenu(){return!!(this._menuItemInstance&&this._parentMaterialMenu&&this.menu)}toggleMenu(){return this._menuOpen?this.closeMenu():this.openMenu()}openMenu(){const t=this.menu;if(this._menuOpen||!t)return;const n=this._createOverlay(t),r=n.getConfig(),s=r.positionStrategy;this._setPosition(t,s),r.hasBackdrop=null==t.hasBackdrop?!this.triggersSubmenu():t.hasBackdrop,n.attach(this._getPortal(t)),t.lazyContent&&t.lazyContent.attach(this.menuData),this._closingActionsSubscription=this._menuClosingActions().subscribe(()=>this.closeMenu()),this._initMenu(t),t instanceof zS&&(t._startAnimation(),t._directDescendantItems.changes.pipe(ql(t.close)).subscribe(()=>{s.withLockedPosition(!1).reapplyLastPosition(),s.withLockedPosition(!0)}))}closeMenu(){this.menu?.close.emit()}focus(t,n){this._focusMonitor&&t?this._focusMonitor.focusVia(this._element,t,n):this._element.nativeElement.focus(n)}updatePosition(){this._overlayRef?.updatePosition()}_destroyMenu(t){if(!this._overlayRef||!this.menuOpen)return;const n=this.menu;this._closingActionsSubscription.unsubscribe(),this._overlayRef.detach(),this.restoreFocus&&("keydown"===t||!this._openedBy||!this.triggersSubmenu())&&this.focus(this._openedBy),this._openedBy=void 0,n instanceof zS?(n._resetAnimation(),n.lazyContent?n._animationDone.pipe(tu(r=>"void"===r.toState),nu(1),ql(n.lazyContent._attached)).subscribe({next:()=>n.lazyContent.detach(),complete:()=>this._setIsMenuOpen(!1)}):this._setIsMenuOpen(!1)):(this._setIsMenuOpen(!1),n?.lazyContent?.detach())}_initMenu(t){t.parentMenu=this.triggersSubmenu()?this._parentMaterialMenu:void 0,t.direction=this.dir,this._setMenuElevation(t),t.focusFirstItem(this._openedBy||"program"),this._setIsMenuOpen(!0)}_setMenuElevation(t){if(t.setElevation){let n=0,r=t.parentMenu;for(;r;)n++,r=r.parentMenu;t.setElevation(n)}}_setIsMenuOpen(t){t!==this._menuOpen&&(this._menuOpen=t,this._menuOpen?this.menuOpened.emit():this.menuClosed.emit(),this.triggersSubmenu()&&this._menuItemInstance._setHighlighted(t),this._changeDetectorRef.markForCheck())}_createOverlay(t){if(!this._overlayRef){const n=this._getOverlayConfig(t);this._subscribeToPositions(t,n.positionStrategy),this._overlayRef=this._overlay.create(n),this._overlayRef.keydownEvents().subscribe()}return this._overlayRef}_getOverlayConfig(t){return new IF({positionStrategy:this._overlay.position().flexibleConnectedTo(this._element).withLockedPosition().withGrowAfterOpen().withTransformOriginOn(".mat-menu-panel, .mat-mdc-menu-panel"),backdropClass:t.backdropClass||"cdk-overlay-transparent-backdrop",panelClass:t.overlayPanelClass,scrollStrategy:this._scrollStrategy(),direction:this._dir})}_subscribeToPositions(t,n){t.setPositionClasses&&n.positionChanges.subscribe(r=>{const s="start"===r.connectionPair.overlayX?"after":"before",a="top"===r.connectionPair.overlayY?"below":"above";this._ngZone?this._ngZone.run(()=>t.setPositionClasses(s,a)):t.setPositionClasses(s,a)})}_setPosition(t,n){let[r,s]="before"===t.xPosition?["end","start"]:["start","end"],[a,l]="above"===t.yPosition?["bottom","top"]:["top","bottom"],[u,d]=[a,l],[p,y]=[r,s],C=0;if(this.triggersSubmenu()){if(y=r="before"===t.xPosition?"start":"end",s=p="end"===r?"start":"end",this._parentMaterialMenu){if(null==this._parentInnerPadding){const O=this._parentMaterialMenu.items.first;this._parentInnerPadding=O?O._getHostElement().offsetTop:0}C="bottom"===a?this._parentInnerPadding:-this._parentInnerPadding}}else t.overlapTrigger||(u="top"===a?"bottom":"top",d="top"===l?"bottom":"top");n.withPositions([{originX:r,originY:u,overlayX:p,overlayY:a,offsetY:C},{originX:s,originY:u,overlayX:y,overlayY:a,offsetY:C},{originX:r,originY:d,overlayX:p,overlayY:l,offsetY:-C},{originX:s,originY:d,overlayX:y,overlayY:l,offsetY:-C}])}_menuClosingActions(){const t=this._overlayRef.backdropClick(),n=this._overlayRef.detachments();return It(t,this._parentMaterialMenu?this._parentMaterialMenu.closed:no(),this._parentMaterialMenu?this._parentMaterialMenu._hovered().pipe(tu(a=>a!==this._menuItemInstance),tu(()=>this._menuOpen)):no(),n)}_handleMousedown(t){uD(t)||(this._openedBy=0===t.button?"mouse":void 0,this.triggersSubmenu()&&t.preventDefault())}_handleKeydown(t){const n=t.keyCode;(13===n||32===n)&&(this._openedBy="keyboard"),this.triggersSubmenu()&&(39===n&&"ltr"===this.dir||37===n&&"rtl"===this.dir)&&(this._openedBy="keyboard",this.openMenu())}_handleClick(t){this.triggersSubmenu()?(t.stopPropagation(),this.openMenu()):this.toggleMenu()}_handleHover(){!this.triggersSubmenu()||!this._parentMaterialMenu||(this._hoverSubscription=this._parentMaterialMenu._hovered().pipe(tu(t=>t===this._menuItemInstance&&!t.disabled),wz(0,MF)).subscribe(()=>{this._openedBy="mouse",this.menu instanceof zS&&this.menu._isAnimating?this.menu._animationDone.pipe(nu(1),wz(0,MF),ql(this._parentMaterialMenu._hovered())).subscribe(()=>this.openMenu()):this.openMenu()}))}_getPortal(t){return(!this._portal||this._portal.templateRef!==t.templateRef)&&(this._portal=new PS(t.templateRef,this._viewContainerRef)),this._portal}}return i.\u0275fac=function(t){return new(t||i)(wt(ap),wt(Cs),wt(Mu),wt(Jz),wt(PF,8),wt(Ey,10),wt(Ed,8),wt(A0),wt(mo))},i.\u0275dir=Oi({type:i,hostVars:3,hostBindings:function(t,n){1&t&&Fi("click",function(s){return n._handleClick(s)})("mousedown",function(s){return n._handleMousedown(s)})("keydown",function(s){return n._handleKeydown(s)}),2&t&&Ea("aria-haspopup",n.menu?"menu":null)("aria-expanded",n.menuOpen)("aria-controls",n.menuOpen?n.menu.panelId:null)},inputs:{_deprecatedMatMenuTriggerFor:["mat-menu-trigger-for","_deprecatedMatMenuTriggerFor"],menu:["matMenuTriggerFor","menu"],menuData:["matMenuTriggerData","menuData"],restoreFocus:["matMenuTriggerRestoreFocus","restoreFocus"]},outputs:{menuOpened:"menuOpened",onMenuOpen:"onMenuOpen",menuClosed:"menuClosed",onMenuClose:"onMenuClose"}}),i})(),VS=(()=>{class i extends Lce{}return i.\u0275fac=function(){let e;return function(n){return(e||(e=Ka(i)))(n||i)}}(),i.\u0275dir=Oi({type:i,selectors:[["","mat-menu-trigger-for",""],["","matMenuTriggerFor",""]],hostAttrs:[1,"mat-mdc-menu-trigger"],exportAs:["matMenuTrigger"],features:[As]}),i})(),Nce=(()=>{class i{}return i.\u0275fac=function(t){return new(t||i)},i.\u0275mod=ia({type:i}),i.\u0275inj=ft({providers:[Rce],imports:[D_,Fb,Pu,US,LS,Pu]}),i})();const Uce=["tooltip"],tH=new cr("mat-tooltip-scroll-strategy"),Vce={provide:tH,deps:[ap],useFactory:function Hce(i){return()=>i.scrollStrategies.reposition({scrollThrottle:20})}},qce=new cr("mat-tooltip-default-options",{providedIn:"root",factory:function Gce(){return{showDelay:0,hideDelay:0,touchendHideDelay:1500}}}),nH="tooltip-panel",iH=p0({passive:!0});let Kce=(()=>{class i{get position(){return this._position}set position(t){t!==this._position&&(this._position=t,this._overlayRef&&(this._updatePosition(this._overlayRef),this._tooltipInstance?.show(0),this._overlayRef.updatePosition()))}get positionAtOrigin(){return this._positionAtOrigin}set positionAtOrigin(t){this._positionAtOrigin=pa(t),this._detach(),this._overlayRef=null}get disabled(){return this._disabled}set disabled(t){this._disabled=pa(t),this._disabled?this.hide(0):this._setupPointerEnterEventsIfNeeded()}get showDelay(){return this._showDelay}set showDelay(t){this._showDelay=gc(t)}get hideDelay(){return this._hideDelay}set hideDelay(t){this._hideDelay=gc(t),this._tooltipInstance&&(this._tooltipInstance._mouseLeaveHideDelay=this._hideDelay)}get message(){return this._message}set message(t){this._ariaDescriber.removeDescription(this._elementRef.nativeElement,this._message,"tooltip"),this._message=null!=t?String(t).trim():"",!this._message&&this._isTooltipVisible()?this.hide(0):(this._setupPointerEnterEventsIfNeeded(),this._updateTooltipMessage(),this._ngZone.runOutsideAngular(()=>{Promise.resolve().then(()=>{this._ariaDescriber.describe(this._elementRef.nativeElement,this.message,"tooltip")})}))}get tooltipClass(){return this._tooltipClass}set tooltipClass(t){this._tooltipClass=t,this._tooltipInstance&&this._setTooltipClass(this._tooltipClass)}constructor(t,n,r,s,a,l,u,d,p,y,C,O){this._overlay=t,this._elementRef=n,this._scrollDispatcher=r,this._viewContainerRef=s,this._ngZone=a,this._platform=l,this._ariaDescriber=u,this._focusMonitor=d,this._dir=y,this._defaultOptions=C,this._position="below",this._positionAtOrigin=!1,this._disabled=!1,this._viewInitialized=!1,this._pointerExitEventsInitialized=!1,this._viewportMargin=8,this._cssClassPrefix="mat",this._showDelay=this._defaultOptions.showDelay,this._hideDelay=this._defaultOptions.hideDelay,this.touchGestures="auto",this._message="",this._passiveListeners=[],this._destroyed=new D,this._scrollStrategy=p,this._document=O,C&&(C.position&&(this.position=C.position),C.positionAtOrigin&&(this.positionAtOrigin=C.positionAtOrigin),C.touchGestures&&(this.touchGestures=C.touchGestures)),y.change.pipe(ql(this._destroyed)).subscribe(()=>{this._overlayRef&&this._updatePosition(this._overlayRef)})}ngAfterViewInit(){this._viewInitialized=!0,this._setupPointerEnterEventsIfNeeded(),this._focusMonitor.monitor(this._elementRef).pipe(ql(this._destroyed)).subscribe(t=>{t?"keyboard"===t&&this._ngZone.run(()=>this.show()):this._ngZone.run(()=>this.hide(0))})}ngOnDestroy(){const t=this._elementRef.nativeElement;clearTimeout(this._touchstartTimeout),this._overlayRef&&(this._overlayRef.dispose(),this._tooltipInstance=null),this._passiveListeners.forEach(([n,r])=>{t.removeEventListener(n,r,iH)}),this._passiveListeners.length=0,this._destroyed.next(),this._destroyed.complete(),this._ariaDescriber.removeDescription(t,this.message,"tooltip"),this._focusMonitor.stopMonitoring(t)}show(t=this.showDelay,n){if(this.disabled||!this.message||this._isTooltipVisible())return void this._tooltipInstance?._cancelPendingAnimations();const r=this._createOverlay(n);this._detach(),this._portal=this._portal||new Ty(this._tooltipComponent,this._viewContainerRef);const s=this._tooltipInstance=r.attach(this._portal).instance;s._triggerElement=this._elementRef.nativeElement,s._mouseLeaveHideDelay=this._hideDelay,s.afterHidden().pipe(ql(this._destroyed)).subscribe(()=>this._detach()),this._setTooltipClass(this._tooltipClass),this._updateTooltipMessage(),s.show(t)}hide(t=this.hideDelay){const n=this._tooltipInstance;n&&(n.isVisible()?n.hide(t):(n._cancelPendingAnimations(),this._detach()))}toggle(t){this._isTooltipVisible()?this.hide():this.show(void 0,t)}_isTooltipVisible(){return!!this._tooltipInstance&&this._tooltipInstance.isVisible()}_createOverlay(t){if(this._overlayRef){const s=this._overlayRef.getConfig().positionStrategy;if((!this.positionAtOrigin||!t)&&s._origin instanceof Cs)return this._overlayRef;this._detach()}const n=this._scrollDispatcher.getAncestorScrollContainers(this._elementRef),r=this._overlay.position().flexibleConnectedTo(this.positionAtOrigin&&t||this._elementRef).withTransformOriginOn(`.${this._cssClassPrefix}-tooltip`).withFlexibleDimensions(!1).withViewportMargin(this._viewportMargin).withScrollableContainers(n);return r.positionChanges.pipe(ql(this._destroyed)).subscribe(s=>{this._updateCurrentPositionClass(s.connectionPair),this._tooltipInstance&&s.scrollableViewProperties.isOverlayClipped&&this._tooltipInstance.isVisible()&&this._ngZone.run(()=>this.hide(0))}),this._overlayRef=this._overlay.create({direction:this._dir,positionStrategy:r,panelClass:`${this._cssClassPrefix}-${nH}`,scrollStrategy:this._scrollStrategy()}),this._updatePosition(this._overlayRef),this._overlayRef.detachments().pipe(ql(this._destroyed)).subscribe(()=>this._detach()),this._overlayRef.outsidePointerEvents().pipe(ql(this._destroyed)).subscribe(()=>this._tooltipInstance?._handleBodyInteraction()),this._overlayRef.keydownEvents().pipe(ql(this._destroyed)).subscribe(s=>{this._isTooltipVisible()&&27===s.keyCode&&!v2(s)&&(s.preventDefault(),s.stopPropagation(),this._ngZone.run(()=>this.hide(0)))}),this._defaultOptions?.disableTooltipInteractivity&&this._overlayRef.addPanelClass(`${this._cssClassPrefix}-tooltip-panel-non-interactive`),this._overlayRef}_detach(){this._overlayRef&&this._overlayRef.hasAttached()&&this._overlayRef.detach(),this._tooltipInstance=null}_updatePosition(t){const n=t.getConfig().positionStrategy,r=this._getOrigin(),s=this._getOverlayPosition();n.withPositions([this._addOffset({...r.main,...s.main}),this._addOffset({...r.fallback,...s.fallback})])}_addOffset(t){return t}_getOrigin(){const t=!this._dir||"ltr"==this._dir.value,n=this.position;let r;"above"==n||"below"==n?r={originX:"center",originY:"above"==n?"top":"bottom"}:"before"==n||"left"==n&&t||"right"==n&&!t?r={originX:"start",originY:"center"}:("after"==n||"right"==n&&t||"left"==n&&!t)&&(r={originX:"end",originY:"center"});const{x:s,y:a}=this._invertPosition(r.originX,r.originY);return{main:r,fallback:{originX:s,originY:a}}}_getOverlayPosition(){const t=!this._dir||"ltr"==this._dir.value,n=this.position;let r;"above"==n?r={overlayX:"center",overlayY:"bottom"}:"below"==n?r={overlayX:"center",overlayY:"top"}:"before"==n||"left"==n&&t||"right"==n&&!t?r={overlayX:"end",overlayY:"center"}:("after"==n||"right"==n&&t||"left"==n&&!t)&&(r={overlayX:"start",overlayY:"center"});const{x:s,y:a}=this._invertPosition(r.overlayX,r.overlayY);return{main:r,fallback:{overlayX:s,overlayY:a}}}_updateTooltipMessage(){this._tooltipInstance&&(this._tooltipInstance.message=this.message,this._tooltipInstance._markForCheck(),this._ngZone.onMicrotaskEmpty.pipe(nu(1),ql(this._destroyed)).subscribe(()=>{this._tooltipInstance&&this._overlayRef.updatePosition()}))}_setTooltipClass(t){this._tooltipInstance&&(this._tooltipInstance.tooltipClass=t,this._tooltipInstance._markForCheck())}_invertPosition(t,n){return"above"===this.position||"below"===this.position?"top"===n?n="bottom":"bottom"===n&&(n="top"):"end"===t?t="start":"start"===t&&(t="end"),{x:t,y:n}}_updateCurrentPositionClass(t){const{overlayY:n,originX:r,originY:s}=t;let a;if(a="center"===n?this._dir&&"rtl"===this._dir.value?"end"===r?"left":"right":"start"===r?"left":"right":"bottom"===n&&"top"===s?"above":"below",a!==this._currentPosition){const l=this._overlayRef;if(l){const u=`${this._cssClassPrefix}-${nH}-`;l.removePanelClass(u+this._currentPosition),l.addPanelClass(u+a)}this._currentPosition=a}}_setupPointerEnterEventsIfNeeded(){this._disabled||!this.message||!this._viewInitialized||this._passiveListeners.length||(this._platformSupportsMouseEvents()?this._passiveListeners.push(["mouseenter",t=>{let n;this._setupPointerExitEventsIfNeeded(),void 0!==t.x&&void 0!==t.y&&(n=t),this.show(void 0,n)}]):"off"!==this.touchGestures&&(this._disableNativeGesturesIfNecessary(),this._passiveListeners.push(["touchstart",t=>{const n=t.targetTouches?.[0],r=n?{x:n.clientX,y:n.clientY}:void 0;this._setupPointerExitEventsIfNeeded(),clearTimeout(this._touchstartTimeout),this._touchstartTimeout=setTimeout(()=>this.show(void 0,r),500)}])),this._addListeners(this._passiveListeners))}_setupPointerExitEventsIfNeeded(){if(this._pointerExitEventsInitialized)return;this._pointerExitEventsInitialized=!0;const t=[];if(this._platformSupportsMouseEvents())t.push(["mouseleave",n=>{const r=n.relatedTarget;(!r||!this._overlayRef?.overlayElement.contains(r))&&this.hide()}],["wheel",n=>this._wheelListener(n)]);else if("off"!==this.touchGestures){this._disableNativeGesturesIfNecessary();const n=()=>{clearTimeout(this._touchstartTimeout),this.hide(this._defaultOptions.touchendHideDelay)};t.push(["touchend",n],["touchcancel",n])}this._addListeners(t),this._passiveListeners.push(...t)}_addListeners(t){t.forEach(([n,r])=>{this._elementRef.nativeElement.addEventListener(n,r,iH)})}_platformSupportsMouseEvents(){return!this._platform.IOS&&!this._platform.ANDROID}_wheelListener(t){if(this._isTooltipVisible()){const n=this._document.elementFromPoint(t.clientX,t.clientY),r=this._elementRef.nativeElement;n!==r&&!r.contains(n)&&this.hide()}}_disableNativeGesturesIfNecessary(){const t=this.touchGestures;if("off"!==t){const n=this._elementRef.nativeElement,r=n.style;("on"===t||"INPUT"!==n.nodeName&&"TEXTAREA"!==n.nodeName)&&(r.userSelect=r.msUserSelect=r.webkitUserSelect=r.MozUserSelect="none"),("on"===t||!n.draggable)&&(r.webkitUserDrag="none"),r.touchAction="none",r.webkitTapHighlightColor="transparent"}}}return i.\u0275fac=function(t){Qd()},i.\u0275dir=Oi({type:i,inputs:{position:["matTooltipPosition","position"],positionAtOrigin:["matTooltipPositionAtOrigin","positionAtOrigin"],disabled:["matTooltipDisabled","disabled"],showDelay:["matTooltipShowDelay","showDelay"],hideDelay:["matTooltipHideDelay","hideDelay"],touchGestures:["matTooltipTouchGestures","touchGestures"],message:["matTooltip","message"],tooltipClass:["matTooltipClass","tooltipClass"]}}),i})(),Nb=(()=>{class i extends Kce{constructor(t,n,r,s,a,l,u,d,p,y,C,O){super(t,n,r,s,a,l,u,d,p,y,C,O),this._tooltipComponent=Zce,this._cssClassPrefix="mat-mdc",this._viewportMargin=8}_addOffset(t){const r=!this._dir||"ltr"==this._dir.value;return"top"===t.originY?t.offsetY=-8:"bottom"===t.originY?t.offsetY=8:"start"===t.originX?t.offsetX=r?-8:8:"end"===t.originX&&(t.offsetX=r?8:-8),t}}return i.\u0275fac=function(t){return new(t||i)(wt(ap),wt(Cs),wt(S2),wt(Mu),wt(mo),wt(Ku),wt(rle),wt(A0),wt(tH),wt(Ed,8),wt(qce,8),wt(Zo))},i.\u0275dir=Oi({type:i,selectors:[["","matTooltip",""]],hostAttrs:[1,"mat-mdc-tooltip-trigger"],exportAs:["matTooltip"],features:[As]}),i})(),Yce=(()=>{class i{constructor(t,n){this._changeDetectorRef=t,this._closeOnInteraction=!1,this._isVisible=!1,this._onHide=new D,this._animationsDisabled="NoopAnimations"===n}show(t){clearTimeout(this._hideTimeoutId),this._showTimeoutId=setTimeout(()=>{this._toggleVisibility(!0),this._showTimeoutId=void 0},t)}hide(t){clearTimeout(this._showTimeoutId),this._hideTimeoutId=setTimeout(()=>{this._toggleVisibility(!1),this._hideTimeoutId=void 0},t)}afterHidden(){return this._onHide}isVisible(){return this._isVisible}ngOnDestroy(){this._cancelPendingAnimations(),this._onHide.complete(),this._triggerElement=null}_handleBodyInteraction(){this._closeOnInteraction&&this.hide(0)}_markForCheck(){this._changeDetectorRef.markForCheck()}_handleMouseLeave({relatedTarget:t}){(!t||!this._triggerElement.contains(t))&&(this.isVisible()?this.hide(this._mouseLeaveHideDelay):this._finalizeAnimation(!1))}_onShow(){}_handleAnimationEnd({animationName:t}){(t===this._showAnimation||t===this._hideAnimation)&&this._finalizeAnimation(t===this._showAnimation)}_cancelPendingAnimations(){clearTimeout(this._showTimeoutId),clearTimeout(this._hideTimeoutId),this._showTimeoutId=this._hideTimeoutId=void 0}_finalizeAnimation(t){t?this._closeOnInteraction=!0:this.isVisible()||this._onHide.next()}_toggleVisibility(t){const n=this._tooltip.nativeElement,r=this._showAnimation,s=this._hideAnimation;if(n.classList.remove(t?s:r),n.classList.add(t?r:s),this._isVisible=t,t&&!this._animationsDisabled&&"function"==typeof getComputedStyle){const a=getComputedStyle(n);("0s"===a.getPropertyValue("animation-duration")||"none"===a.getPropertyValue("animation-name"))&&(this._animationsDisabled=!0)}t&&this._onShow(),this._animationsDisabled&&(n.classList.add("_mat-animation-noopable"),this._finalizeAnimation(t))}}return i.\u0275fac=function(t){return new(t||i)(wt(pl),wt(_h,8))},i.\u0275dir=Oi({type:i}),i})(),Zce=(()=>{class i extends Yce{constructor(t,n,r){super(t,r),this._elementRef=n,this._isMultiline=!1,this._showAnimation="mat-mdc-tooltip-show",this._hideAnimation="mat-mdc-tooltip-hide"}_onShow(){this._isMultiline=this._isTooltipMultiline(),this._markForCheck()}_isTooltipMultiline(){const t=this._elementRef.nativeElement.getBoundingClientRect();return t.height>24&&t.width>=200}}return i.\u0275fac=function(t){return new(t||i)(wt(pl),wt(Cs),wt(_h,8))},i.\u0275cmp=Fr({type:i,selectors:[["mat-tooltip-component"]],viewQuery:function(t,n){if(1&t&&la(Uce,7),2&t){let r;so(r=oo())&&(n._tooltip=r.first)}},hostAttrs:["aria-hidden","true"],hostVars:2,hostBindings:function(t,n){1&t&&Fi("mouseleave",function(s){return n._handleMouseLeave(s)}),2&t&&Fp("zoom",n.isVisible()?1:null)},features:[As],decls:4,vars:4,consts:[[1,"mdc-tooltip","mdc-tooltip--shown","mat-mdc-tooltip",3,"ngClass","animationend"],["tooltip",""],[1,"mdc-tooltip__surface","mdc-tooltip__surface-animation"]],template:function(t,n){1&t&&(Zt(0,"div",0,1),Fi("animationend",function(s){return n._handleAnimationEnd(s)}),Zt(2,"div",2),dr(3),un()()),2&t&&(jo("mdc-tooltip--multiline",n._isMultiline),Cn("ngClass",n.tooltipClass),Nn(3),ph(n.message))},dependencies:[FA],styles:['.mdc-tooltip__surface{word-break:var(--mdc-tooltip-word-break, normal);overflow-wrap:anywhere}.mdc-tooltip{position:fixed;display:none;z-index:9}.mdc-tooltip-wrapper--rich{position:relative}.mdc-tooltip--shown,.mdc-tooltip--showing,.mdc-tooltip--hide{display:inline-flex}.mdc-tooltip--shown.mdc-tooltip--rich,.mdc-tooltip--showing.mdc-tooltip--rich,.mdc-tooltip--hide.mdc-tooltip--rich{display:inline-block;left:-320px;position:absolute}.mdc-tooltip__surface{line-height:16px;padding:4px 8px;min-width:40px;max-width:200px;min-height:24px;max-height:40vh;box-sizing:border-box;overflow:hidden;text-align:center}.mdc-tooltip__surface::before{position:absolute;box-sizing:border-box;width:100%;height:100%;top:0;left:0;border:1px solid rgba(0,0,0,0);border-radius:inherit;content:"";pointer-events:none}@media screen and (forced-colors: active){.mdc-tooltip__surface::before{border-color:CanvasText}}.mdc-tooltip--rich .mdc-tooltip__surface{align-items:flex-start;display:flex;flex-direction:column;min-height:24px;min-width:40px;max-width:320px;position:relative}.mdc-tooltip--multiline .mdc-tooltip__surface{text-align:left}[dir=rtl] .mdc-tooltip--multiline .mdc-tooltip__surface,.mdc-tooltip--multiline .mdc-tooltip__surface[dir=rtl]{text-align:right}.mdc-tooltip__surface .mdc-tooltip__title{margin:0 8px}.mdc-tooltip__surface .mdc-tooltip__content{max-width:calc(200px - (2 * 8px));margin:8px;text-align:left}[dir=rtl] .mdc-tooltip__surface .mdc-tooltip__content,.mdc-tooltip__surface .mdc-tooltip__content[dir=rtl]{text-align:right}.mdc-tooltip--rich .mdc-tooltip__surface .mdc-tooltip__content{max-width:calc(320px - (2 * 8px));align-self:stretch}.mdc-tooltip__surface .mdc-tooltip__content-link{text-decoration:none}.mdc-tooltip--rich-actions,.mdc-tooltip__content,.mdc-tooltip__title{z-index:1}.mdc-tooltip__surface-animation{opacity:0;transform:scale(0.8);will-change:transform,opacity}.mdc-tooltip--shown .mdc-tooltip__surface-animation{transform:scale(1);opacity:1}.mdc-tooltip--hide .mdc-tooltip__surface-animation{transform:scale(1)}.mdc-tooltip__caret-surface-top,.mdc-tooltip__caret-surface-bottom{position:absolute;height:24px;width:24px;transform:rotate(35deg) skewY(20deg) scaleX(0.9396926208)}.mdc-tooltip__caret-surface-top .mdc-elevation-overlay,.mdc-tooltip__caret-surface-bottom .mdc-elevation-overlay{width:100%;height:100%;top:0;left:0}.mdc-tooltip__caret-surface-bottom{outline:1px solid rgba(0,0,0,0);z-index:-1}@media screen and (forced-colors: active){.mdc-tooltip__caret-surface-bottom{outline-color:CanvasText}}.mdc-tooltip__surface{background-color:var(--mdc-plain-tooltip-container-color, #fff)}.mdc-tooltip__surface{border-radius:var(--mdc-plain-tooltip-container-shape, var(--mdc-shape-small, 4px))}.mdc-tooltip__caret-surface-top,.mdc-tooltip__caret-surface-bottom{border-radius:var(--mdc-plain-tooltip-container-shape, var(--mdc-shape-small, 4px))}.mdc-tooltip__surface{color:var(--mdc-plain-tooltip-supporting-text-color, #000)}.mdc-tooltip__surface{font-family:var(--mdc-plain-tooltip-supporting-text-font, inherit);font-size:var(--mdc-plain-tooltip-supporting-text-size, inherit);font-weight:var(--mdc-plain-tooltip-supporting-text-weight, inherit);letter-spacing:var(--mdc-plain-tooltip-supporting-text-tracking, inherit)}.mat-mdc-tooltip{position:relative;transform:scale(0)}.mat-mdc-tooltip::before{content:"";top:-8px;right:-8px;bottom:-8px;left:-8px;z-index:-1;position:absolute}.mat-mdc-tooltip._mat-animation-noopable{animation:none;transform:scale(1)}.mat-mdc-tooltip-panel-non-interactive{pointer-events:none}@keyframes mat-mdc-tooltip-show{0%{opacity:0;transform:scale(0.8)}100%{opacity:1;transform:scale(1)}}@keyframes mat-mdc-tooltip-hide{0%{opacity:1;transform:scale(1)}100%{opacity:0;transform:scale(0.8)}}.mat-mdc-tooltip-show{animation:mat-mdc-tooltip-show 150ms cubic-bezier(0, 0, 0.2, 1) forwards}.mat-mdc-tooltip-hide{animation:mat-mdc-tooltip-hide 75ms cubic-bezier(0.4, 0, 1, 1) forwards}'],encapsulation:2,changeDetection:0}),i})(),Jce=(()=>{class i{}return i.\u0275fac=function(t){return new(t||i)},i.\u0275mod=ia({type:i}),i.\u0275inj=ft({providers:[Vce],imports:[wF,D_,US,Pu,Pu,LS]}),i})();const eue=function(i){return{disabled:i}},tue=function(i){return{"active-icon":i}};class Ql{constructor(){Wt(this,"icon",void 0),Wt(this,"active",void 0),Wt(this,"tooltip",void 0),Wt(this,"disabled",!1)}}function nue(i,e){if(1&i){const t=Za();Zt(0,"button",2),Fi("click",function(){const s=ks(t).$implicit;return ys(Mr().animatePreset(s))}),dr(1),un()}if(2&i){const t=e.$implicit;Nn(1),Gl(" ",t," ")}}Wt(Ql,"\u0275fac",function(e){return new(e||Ql)}),Wt(Ql,"\u0275cmp",Fr({type:Ql,selectors:[["app-menu-toggle"]],inputs:{icon:"icon",active:"active",tooltip:"tooltip",disabled:"disabled"},decls:3,vars:9,consts:[["matTooltipPosition","above","matTooltipTouchGestures","off",1,"menu-toggle",3,"ngClass","matTooltip"],[1,"menu-toggle-icon",3,"ngClass"]],template:function(e,t){1&e&&(Zt(0,"button",0),vl(),Zt(1,"svg",1),Pr(2,"use"),un()()),2&e&&(Cn("ngClass",$d(5,eue,t.disabled))("matTooltip",t.tooltip),Nn(1),Cn("ngClass",$d(7,tue,t.active)),Nn(1),y_("href","assets/icons/",t.icon,".svg#",t.icon,""))},dependencies:[FA,Nb],styles:["[_nghost-%COMP%]{display:flex;margin:0 .6rem}[_nghost-%COMP%] .menu-toggle[_ngcontent-%COMP%]{display:flex;background:unset;border:none;height:2.5rem;width:2.5rem;min-height:2.5rem;min-width:2.5rem;padding:.65rem;cursor:pointer;align-self:center;transition:all .4s}[_nghost-%COMP%] .menu-toggle-icon[_ngcontent-%COMP%]{width:100%;height:100%}[_nghost-%COMP%] .menu-toggle-icon.active-icon[_ngcontent-%COMP%]{--phoenix-options-icon-path: #00bcd4}[_nghost-%COMP%] .menu-toggle[_ngcontent-%COMP%]:hover{background-color:var(--phoenix-options-icon-bg);border-radius:40%;transition:all .4s}[_nghost-%COMP%] .menu-toggle.disabled[_ngcontent-%COMP%]{cursor:not-allowed;opacity:.4}"]}));const rH={"Cavern to ID":{name:"Cavern to ID",positions:[{position:[66388.95051168812,5264.228603228927,-46910.7848593543],duration:1e3},{position:[12834.18729094943,677.7571205763458,135.68755273443463],duration:2e3},{position:[312.02688693297375,25.884223757326,270.10019006776236],duration:3500},{position:[263.3640855132258,19.874838262525053,-318.16541790248885],duration:3e3},{position:[5534.140362338047,234.03507981484574,-2933.619479808285],duration:2e3},{position:[2681.277288705242,646.5795158318147,5628.5248735111745],duration:1e3},{position:[-6062.586283740076,790.5876682946184,1381.1675900848818],duration:1e3},{position:[-1766.7693725879053,1007.1048030984678,-5928.901341784575],duration:1e3},{position:[12814.982506255355,2516.987185037266,-22891.902734328327],duration:1e3}],animateEventAfterInterval:5e3,collisionDuration:6e3}};class Ub{constructor(e){Wt(this,"eventDisplay",void 0),Wt(this,"animationPresets",rH),Wt(this,"animationPresetsKeys",Object.keys(this.animationPresets)),Wt(this,"isAnimating",!1),this.eventDisplay=e}animatePreset(e){this.setDetectorOpacity(.2),this.eventDisplay.animatePreset(this.animationPresets[e],()=>{this.setDetectorOpacity(1)})}animateCamera(){this.isAnimating||(this.isAnimating=!0,this.eventDisplay.animateThroughEvent([11976,7262,11927],3e3,()=>{this.isAnimating=!1}))}setDetectorOpacity(e){const t=this.eventDisplay.getThreeManager().getSceneManager(),n=t.getObjectByName(qa.GEOMETRIES_ID);t.setGeometryOpacity(n,e)}}Wt(Ub,"\u0275fac",function(e){return new(e||Ub)(wt(Qa))}),Wt(Ub,"\u0275cmp",Fr({type:Ub,selectors:[["app-animate-camera"]],inputs:{animationPresets:"animationPresets"},decls:6,vars:2,consts:[["animationPresets",""],["mat-menu-item","",3,"click",4,"ngFor","ngForOf"],["mat-menu-item","",3,"click"],["tooltip","Preset animations","icon","animate-camera",3,"matMenuTriggerFor"]],template:function(e,t){if(1&e&&(Zt(0,"mat-menu",null,0),qr(2,nue,2,1,"button",1),Zt(3,"button",2),Fi("click",function(){return t.animateCamera()}),dr(4,"Animate camera"),un()(),Pr(5,"app-menu-toggle",3)),2&e){const n=bl(1);Nn(2),Cn("ngForOf",t.animationPresetsKeys),Nn(3),Cn("matMenuTriggerFor",n)}},dependencies:[Sf,HS,Ey,VS,Ql]}));const iue=function(i){return{"ui-menu-hidden":i}};class zb{constructor(){Wt(this,"hideUIMenu",!1)}}function sH(...i){const e=ot(i),{args:t,keys:n}=GL(i),r=new de(s=>{const{length:a}=t;if(!a)return void s.complete();const l=new Array(a);let u=a,d=a;for(let p=0;p{y||(y=!0,d--),l[p]=C},()=>u--,void 0,()=>{(!u||!y)&&(d||s.next(n?qL(n,l):l),s.complete())}))}});return e?r.pipe(pI(e)):r}Wt(zb,"\u0275fac",function(e){return new(e||zb)}),Wt(zb,"\u0275cmp",Fr({type:zb,selectors:[["app-ui-menu-wrapper"]],ngContentSelectors:["*"],decls:6,vars:5,consts:[["id","uiMenu"],["id","hideUIMenu","matTooltipPosition","above",3,"matTooltip","ngClass","click"],["href","assets/icons/expand.svg#expand"],["id","optionsPanel",3,"hidden"]],template:function(e,t){1&e&&(fh(),Zt(0,"div",0)(1,"button",1),Fi("click",function(){return t.hideUIMenu=!t.hideUIMenu}),vl(),Zt(2,"svg"),Pr(3,"use",2),un()(),cd(),Zt(4,"div",3),uu(5),un()()),2&e&&(Nn(1),Cn("matTooltip",t.hideUIMenu?"Show toolbar":"Hide toolbar")("ngClass",$d(3,iue,t.hideUIMenu)),Nn(3),Cn("hidden",t.hideUIMenu))},dependencies:[FA,Nb],styles:["#uiMenu[_ngcontent-%COMP%]{position:absolute;bottom:1rem;width:100%;box-sizing:border-box;display:flex;flex-direction:column;align-items:center}#optionsPanel[_ngcontent-%COMP%]{display:flex;align-items:center;background:var(--phoenix-background-color-secondary);border:1px solid var(--phoenix-background-color-tertiary);box-shadow:var(--phoenix-box-shadow);border-radius:30px;max-width:95%;padding:.3rem 1rem;overflow-x:scroll;z-index:90}#hideUIMenu[_ngcontent-%COMP%]{background:var(--phoenix-background-color-secondary);height:1.2rem;width:3rem;border:1px solid var(--phoenix-border);border-bottom:none;box-shadow:var(--phoenix-box-shadow);border-top-left-radius:15px;border-top-right-radius:15px;padding:3px}#hideUIMenu[_ngcontent-%COMP%] svg[_ngcontent-%COMP%]{height:100%;width:100%;vertical-align:top;transition:all .3s}#hideUIMenu.ui-menu-hidden[_ngcontent-%COMP%] svg[_ngcontent-%COMP%]{transform:scaleY(-1);transition:all .3s}"]}));let oH=(()=>{class i{constructor(t,n){this._renderer=t,this._elementRef=n,this.onChange=r=>{},this.onTouched=()=>{}}setProperty(t,n){this._renderer.setProperty(this._elementRef.nativeElement,t,n)}registerOnTouched(t){this.onTouched=t}registerOnChange(t){this.onChange=t}setDisabledState(t){this.setProperty("disabled",t)}}return i.\u0275fac=function(t){return new(t||i)(wt(as),wt(Cs))},i.\u0275dir=Oi({type:i}),i})(),Hb=(()=>{class i extends oH{}return i.\u0275fac=function(){let e;return function(n){return(e||(e=Ka(i)))(n||i)}}(),i.\u0275dir=Oi({type:i,features:[As]}),i})();const Kd=new cr("NgValueAccessor"),oue={provide:Kd,useExisting:ar(()=>kF),multi:!0},lue=new cr("CompositionEventMode");let kF=(()=>{class i extends oH{constructor(t,n,r){super(t,n),this._compositionMode=r,this._composing=!1,null==this._compositionMode&&(this._compositionMode=!function aue(){const i=Yg()?Yg().getUserAgent():"";return/android (\d+)/.test(i.toLowerCase())}())}writeValue(t){this.setProperty("value",t??"")}_handleInput(t){(!this._compositionMode||this._compositionMode&&!this._composing)&&this.onChange(t)}_compositionStart(){this._composing=!0}_compositionEnd(t){this._composing=!1,this._compositionMode&&this.onChange(t)}}return i.\u0275fac=function(t){return new(t||i)(wt(as),wt(Cs),wt(lue,8))},i.\u0275dir=Oi({type:i,selectors:[["input","formControlName","",3,"type","checkbox"],["textarea","formControlName",""],["input","formControl","",3,"type","checkbox"],["textarea","formControl",""],["input","ngModel","",3,"type","checkbox"],["textarea","ngModel",""],["","ngDefaultControl",""]],hostBindings:function(t,n){1&t&&Fi("input",function(s){return n._handleInput(s.target.value)})("blur",function(){return n.onTouched()})("compositionstart",function(){return n._compositionStart()})("compositionend",function(s){return n._compositionEnd(s.target.value)})},features:[Po([oue]),As]}),i})();const Yh=new cr("NgValidators"),By=new cr("NgAsyncValidators");function gH(i){return null!=i}function _H(i){return Fv(i)?cn(i):i}function yH(i){let e={};return i.forEach(t=>{e=null!=t?{...e,...t}:e}),0===Object.keys(e).length?null:e}function vH(i,e){return e.map(t=>t(i))}function bH(i){return i.map(e=>function hue(i){return!i.validate}(e)?e:t=>e.validate(t))}function FF(i){return null!=i?function xH(i){if(!i)return null;const e=i.filter(gH);return 0==e.length?null:function(t){return yH(vH(t,e))}}(bH(i)):null}function OF(i){return null!=i?function wH(i){if(!i)return null;const e=i.filter(gH);return 0==e.length?null:function(t){return sH(vH(t,e).map(_H)).pipe(et(yH))}}(bH(i)):null}function CH(i,e){return null===i?[e]:Array.isArray(i)?[...i,e]:[i,e]}function RF(i){return i?Array.isArray(i)?i:[i]:[]}function yD(i,e){return Array.isArray(i)?i.includes(e):i===e}function TH(i,e){const t=RF(e);return RF(i).forEach(r=>{yD(t,r)||t.push(r)}),t}function EH(i,e){return RF(e).filter(t=>!yD(i,t))}class DH{constructor(){this._rawValidators=[],this._rawAsyncValidators=[],this._onDestroyCallbacks=[]}get value(){return this.control?this.control.value:null}get valid(){return this.control?this.control.valid:null}get invalid(){return this.control?this.control.invalid:null}get pending(){return this.control?this.control.pending:null}get disabled(){return this.control?this.control.disabled:null}get enabled(){return this.control?this.control.enabled:null}get errors(){return this.control?this.control.errors:null}get pristine(){return this.control?this.control.pristine:null}get dirty(){return this.control?this.control.dirty:null}get touched(){return this.control?this.control.touched:null}get status(){return this.control?this.control.status:null}get untouched(){return this.control?this.control.untouched:null}get statusChanges(){return this.control?this.control.statusChanges:null}get valueChanges(){return this.control?this.control.valueChanges:null}get path(){return null}_setValidators(e){this._rawValidators=e||[],this._composedValidatorFn=FF(this._rawValidators)}_setAsyncValidators(e){this._rawAsyncValidators=e||[],this._composedAsyncValidatorFn=OF(this._rawAsyncValidators)}get validator(){return this._composedValidatorFn||null}get asyncValidator(){return this._composedAsyncValidatorFn||null}_registerOnDestroy(e){this._onDestroyCallbacks.push(e)}_invokeOnDestroyCallbacks(){this._onDestroyCallbacks.forEach(e=>e()),this._onDestroyCallbacks=[]}reset(e){this.control&&this.control.reset(e)}hasError(e,t){return!!this.control&&this.control.hasError(e,t)}getError(e,t){return this.control?this.control.getError(e,t):null}}class Lf extends DH{get formDirective(){return null}get path(){return null}}class Iy extends DH{constructor(){super(...arguments),this._parent=null,this.name=null,this.valueAccessor=null}}class BH{constructor(e){this._cd=e}get isTouched(){return!!this._cd?.control?.touched}get isUntouched(){return!!this._cd?.control?.untouched}get isPristine(){return!!this._cd?.control?.pristine}get isDirty(){return!!this._cd?.control?.dirty}get isValid(){return!!this._cd?.control?.valid}get isInvalid(){return!!this._cd?.control?.invalid}get isPending(){return!!this._cd?.control?.pending}get isSubmitted(){return!!this._cd?.submitted}}let IH=(()=>{class i extends BH{constructor(t){super(t)}}return i.\u0275fac=function(t){return new(t||i)(wt(Iy,2))},i.\u0275dir=Oi({type:i,selectors:[["","formControlName",""],["","ngModel",""],["","formControl",""]],hostVars:14,hostBindings:function(t,n){2&t&&jo("ng-untouched",n.isUntouched)("ng-touched",n.isTouched)("ng-pristine",n.isPristine)("ng-dirty",n.isDirty)("ng-valid",n.isValid)("ng-invalid",n.isInvalid)("ng-pending",n.isPending)},features:[As]}),i})();const GS="VALID",bD="INVALID",T2="PENDING",qS="DISABLED";function xD(i){return null!=i&&!Array.isArray(i)&&"object"==typeof i}class OH{constructor(e,t){this._pendingDirty=!1,this._hasOwnPendingAsyncValidator=!1,this._pendingTouched=!1,this._onCollectionChange=()=>{},this._parent=null,this.pristine=!0,this.touched=!1,this._onDisabledChange=[],this._assignValidators(e),this._assignAsyncValidators(t)}get validator(){return this._composedValidatorFn}set validator(e){this._rawValidators=this._composedValidatorFn=e}get asyncValidator(){return this._composedAsyncValidatorFn}set asyncValidator(e){this._rawAsyncValidators=this._composedAsyncValidatorFn=e}get parent(){return this._parent}get valid(){return this.status===GS}get invalid(){return this.status===bD}get pending(){return this.status==T2}get disabled(){return this.status===qS}get enabled(){return this.status!==qS}get dirty(){return!this.pristine}get untouched(){return!this.touched}get updateOn(){return this._updateOn?this._updateOn:this.parent?this.parent.updateOn:"change"}setValidators(e){this._assignValidators(e)}setAsyncValidators(e){this._assignAsyncValidators(e)}addValidators(e){this.setValidators(TH(e,this._rawValidators))}addAsyncValidators(e){this.setAsyncValidators(TH(e,this._rawAsyncValidators))}removeValidators(e){this.setValidators(EH(e,this._rawValidators))}removeAsyncValidators(e){this.setAsyncValidators(EH(e,this._rawAsyncValidators))}hasValidator(e){return yD(this._rawValidators,e)}hasAsyncValidator(e){return yD(this._rawAsyncValidators,e)}clearValidators(){this.validator=null}clearAsyncValidators(){this.asyncValidator=null}markAsTouched(e={}){this.touched=!0,this._parent&&!e.onlySelf&&this._parent.markAsTouched(e)}markAllAsTouched(){this.markAsTouched({onlySelf:!0}),this._forEachChild(e=>e.markAllAsTouched())}markAsUntouched(e={}){this.touched=!1,this._pendingTouched=!1,this._forEachChild(t=>{t.markAsUntouched({onlySelf:!0})}),this._parent&&!e.onlySelf&&this._parent._updateTouched(e)}markAsDirty(e={}){this.pristine=!1,this._parent&&!e.onlySelf&&this._parent.markAsDirty(e)}markAsPristine(e={}){this.pristine=!0,this._pendingDirty=!1,this._forEachChild(t=>{t.markAsPristine({onlySelf:!0})}),this._parent&&!e.onlySelf&&this._parent._updatePristine(e)}markAsPending(e={}){this.status=T2,!1!==e.emitEvent&&this.statusChanges.emit(this.status),this._parent&&!e.onlySelf&&this._parent.markAsPending(e)}disable(e={}){const t=this._parentMarkedDirty(e.onlySelf);this.status=qS,this.errors=null,this._forEachChild(n=>{n.disable({...e,onlySelf:!0})}),this._updateValue(),!1!==e.emitEvent&&(this.valueChanges.emit(this.value),this.statusChanges.emit(this.status)),this._updateAncestors({...e,skipPristineCheck:t}),this._onDisabledChange.forEach(n=>n(!0))}enable(e={}){const t=this._parentMarkedDirty(e.onlySelf);this.status=GS,this._forEachChild(n=>{n.enable({...e,onlySelf:!0})}),this.updateValueAndValidity({onlySelf:!0,emitEvent:e.emitEvent}),this._updateAncestors({...e,skipPristineCheck:t}),this._onDisabledChange.forEach(n=>n(!1))}_updateAncestors(e){this._parent&&!e.onlySelf&&(this._parent.updateValueAndValidity(e),e.skipPristineCheck||this._parent._updatePristine(),this._parent._updateTouched())}setParent(e){this._parent=e}getRawValue(){return this.value}updateValueAndValidity(e={}){this._setInitialStatus(),this._updateValue(),this.enabled&&(this._cancelExistingSubscription(),this.errors=this._runValidator(),this.status=this._calculateStatus(),(this.status===GS||this.status===T2)&&this._runAsyncValidator(e.emitEvent)),!1!==e.emitEvent&&(this.valueChanges.emit(this.value),this.statusChanges.emit(this.status)),this._parent&&!e.onlySelf&&this._parent.updateValueAndValidity(e)}_updateTreeValidity(e={emitEvent:!0}){this._forEachChild(t=>t._updateTreeValidity(e)),this.updateValueAndValidity({onlySelf:!0,emitEvent:e.emitEvent})}_setInitialStatus(){this.status=this._allControlsDisabled()?qS:GS}_runValidator(){return this.validator?this.validator(this):null}_runAsyncValidator(e){if(this.asyncValidator){this.status=T2,this._hasOwnPendingAsyncValidator=!0;const t=_H(this.asyncValidator(this));this._asyncValidationSubscription=t.subscribe(n=>{this._hasOwnPendingAsyncValidator=!1,this.setErrors(n,{emitEvent:e})})}}_cancelExistingSubscription(){this._asyncValidationSubscription&&(this._asyncValidationSubscription.unsubscribe(),this._hasOwnPendingAsyncValidator=!1)}setErrors(e,t={}){this.errors=e,this._updateControlsErrors(!1!==t.emitEvent)}get(e){let t=e;return null==t||(Array.isArray(t)||(t=t.split(".")),0===t.length)?null:t.reduce((n,r)=>n&&n._find(r),this)}getError(e,t){const n=t?this.get(t):this;return n&&n.errors?n.errors[e]:null}hasError(e,t){return!!this.getError(e,t)}get root(){let e=this;for(;e._parent;)e=e._parent;return e}_updateControlsErrors(e){this.status=this._calculateStatus(),e&&this.statusChanges.emit(this.status),this._parent&&this._parent._updateControlsErrors(e)}_initObservables(){this.valueChanges=new Ws,this.statusChanges=new Ws}_calculateStatus(){return this._allControlsDisabled()?qS:this.errors?bD:this._hasOwnPendingAsyncValidator||this._anyControlsHaveStatus(T2)?T2:this._anyControlsHaveStatus(bD)?bD:GS}_anyControlsHaveStatus(e){return this._anyControls(t=>t.status===e)}_anyControlsDirty(){return this._anyControls(e=>e.dirty)}_anyControlsTouched(){return this._anyControls(e=>e.touched)}_updatePristine(e={}){this.pristine=!this._anyControlsDirty(),this._parent&&!e.onlySelf&&this._parent._updatePristine(e)}_updateTouched(e={}){this.touched=this._anyControlsTouched(),this._parent&&!e.onlySelf&&this._parent._updateTouched(e)}_registerOnCollectionChange(e){this._onCollectionChange=e}_setUpdateStrategy(e){xD(e)&&null!=e.updateOn&&(this._updateOn=e.updateOn)}_parentMarkedDirty(e){return!e&&!(!this._parent||!this._parent.dirty)&&!this._parent._anyControlsDirty()}_find(e){return null}_assignValidators(e){this._rawValidators=Array.isArray(e)?e.slice():e,this._composedValidatorFn=function yue(i){return Array.isArray(i)?FF(i):i||null}(this._rawValidators)}_assignAsyncValidators(e){this._rawAsyncValidators=Array.isArray(e)?e.slice():e,this._composedAsyncValidatorFn=function vue(i){return Array.isArray(i)?OF(i):i||null}(this._rawAsyncValidators)}}const QS=new cr("CallSetDisabledState",{providedIn:"root",factory:()=>GF}),GF="always";function WS(i,e,t=GF){(function qF(i,e){const t=function MH(i){return i._rawValidators}(i);null!==e.validator?i.setValidators(CH(t,e.validator)):"function"==typeof t&&i.setValidators([t]);const n=function SH(i){return i._rawAsyncValidators}(i);null!==e.asyncValidator?i.setAsyncValidators(CH(n,e.asyncValidator)):"function"==typeof n&&i.setAsyncValidators([n]);const r=()=>i.updateValueAndValidity();MD(e._rawValidators,r),MD(e._rawAsyncValidators,r)})(i,e),e.valueAccessor.writeValue(i.value),(i.disabled||"always"===t)&&e.valueAccessor.setDisabledState?.(i.disabled),function wue(i,e){e.valueAccessor.registerOnChange(t=>{i._pendingValue=t,i._pendingChange=!0,i._pendingDirty=!0,"change"===i.updateOn&&RH(i,e)})}(i,e),function Mue(i,e){const t=(n,r)=>{e.valueAccessor.writeValue(n),r&&e.viewToModelUpdate(n)};i.registerOnChange(t),e._registerOnDestroy(()=>{i._unregisterOnChange(t)})}(i,e),function Cue(i,e){e.valueAccessor.registerOnTouched(()=>{i._pendingTouched=!0,"blur"===i.updateOn&&i._pendingChange&&RH(i,e),"submit"!==i.updateOn&&i.markAsTouched()})}(i,e),function xue(i,e){if(e.valueAccessor.setDisabledState){const t=n=>{e.valueAccessor.setDisabledState(n)};i.registerOnDisabledChange(t),e._registerOnDestroy(()=>{i._unregisterOnDisabledChange(t)})}}(i,e)}function MD(i,e){i.forEach(t=>{t.registerOnValidatorChange&&t.registerOnValidatorChange(e)})}function RH(i,e){i._pendingDirty&&i.markAsDirty(),i.setValue(i._pendingValue,{emitModelToViewChange:!1}),e.viewToModelUpdate(i._pendingValue),i._pendingChange=!1}function UH(i,e){const t=i.indexOf(e);t>-1&&i.splice(t,1)}function zH(i){return"object"==typeof i&&null!==i&&2===Object.keys(i).length&&"value"in i&&"disabled"in i}const HH=class extends OH{constructor(e=null,t,n){super(function zF(i){return(xD(i)?i.validators:i)||null}(t),function HF(i,e){return(xD(e)?e.asyncValidators:i)||null}(n,t)),this.defaultValue=null,this._onChange=[],this._pendingChange=!1,this._applyFormState(e),this._setUpdateStrategy(t),this._initObservables(),this.updateValueAndValidity({onlySelf:!0,emitEvent:!!this.asyncValidator}),xD(t)&&(t.nonNullable||t.initialValueIsDefault)&&(this.defaultValue=zH(e)?e.value:e)}setValue(e,t={}){this.value=this._pendingValue=e,this._onChange.length&&!1!==t.emitModelToViewChange&&this._onChange.forEach(n=>n(this.value,!1!==t.emitViewToModelChange)),this.updateValueAndValidity(t)}patchValue(e,t={}){this.setValue(e,t)}reset(e=this.defaultValue,t={}){this._applyFormState(e),this.markAsPristine(t),this.markAsUntouched(t),this.setValue(this.value,t),this._pendingChange=!1}_updateValue(){}_anyControls(e){return!1}_allControlsDisabled(){return this.disabled}registerOnChange(e){this._onChange.push(e)}_unregisterOnChange(e){UH(this._onChange,e)}registerOnDisabledChange(e){this._onDisabledChange.push(e)}_unregisterOnDisabledChange(e){UH(this._onDisabledChange,e)}_forEachChild(e){}_syncPendingControls(){return!("submit"!==this.updateOn||(this._pendingDirty&&this.markAsDirty(),this._pendingTouched&&this.markAsTouched(),!this._pendingChange)||(this.setValue(this._pendingValue,{onlySelf:!0,emitModelToViewChange:!1}),0))}_applyFormState(e){zH(e)?(this.value=this._pendingValue=e.value,e.disabled?this.disable({onlySelf:!0,emitEvent:!1}):this.enable({onlySelf:!0,emitEvent:!1})):this.value=this._pendingValue=e}},kue={provide:Iy,useExisting:ar(()=>XF)},qH=(()=>Promise.resolve())();let XF=(()=>{class i extends Iy{constructor(t,n,r,s,a,l){super(),this._changeDetectorRef=a,this.callSetDisabledState=l,this.control=new HH,this._registered=!1,this.update=new Ws,this._parent=t,this._setValidators(n),this._setAsyncValidators(r),this.valueAccessor=function jF(i,e){if(!e)return null;let t,n,r;return Array.isArray(e),e.forEach(s=>{s.constructor===kF?t=s:function Eue(i){return Object.getPrototypeOf(i.constructor)===Hb}(s)?n=s:r=s}),r||n||t||null}(0,s)}ngOnChanges(t){if(this._checkForErrors(),!this._registered||"name"in t){if(this._registered&&(this._checkName(),this.formDirective)){const n=t.name.previousValue;this.formDirective.removeControl({name:n,path:this._getPath(n)})}this._setUpControl()}"isDisabled"in t&&this._updateDisabled(t),function WF(i,e){if(!i.hasOwnProperty("model"))return!1;const t=i.model;return!!t.isFirstChange()||!Object.is(e,t.currentValue)}(t,this.viewModel)&&(this._updateValue(this.model),this.viewModel=this.model)}ngOnDestroy(){this.formDirective&&this.formDirective.removeControl(this)}get path(){return this._getPath(this.name)}get formDirective(){return this._parent?this._parent.formDirective:null}viewToModelUpdate(t){this.viewModel=t,this.update.emit(t)}_setUpControl(){this._setUpdateStrategy(),this._isStandalone()?this._setUpStandalone():this.formDirective.addControl(this),this._registered=!0}_setUpdateStrategy(){this.options&&null!=this.options.updateOn&&(this.control._updateOn=this.options.updateOn)}_isStandalone(){return!this._parent||!(!this.options||!this.options.standalone)}_setUpStandalone(){WS(this.control,this,this.callSetDisabledState),this.control.updateValueAndValidity({emitEvent:!1})}_checkForErrors(){this._isStandalone()||this._checkParentType(),this._checkName()}_checkParentType(){}_checkName(){this.options&&this.options.name&&(this.name=this.options.name),this._isStandalone()}_updateValue(t){qH.then(()=>{this.control.setValue(t,{emitViewToModelChange:!1}),this._changeDetectorRef?.markForCheck()})}_updateDisabled(t){const n=t.isDisabled.currentValue,r=0!==n&&uw(n);qH.then(()=>{r&&!this.control.disabled?this.control.disable():!r&&this.control.disabled&&this.control.enable(),this._changeDetectorRef?.markForCheck()})}_getPath(t){return this._parent?function wD(i,e){return[...e.path,i]}(t,this._parent):[t]}}return i.\u0275fac=function(t){return new(t||i)(wt(Lf,9),wt(Yh,10),wt(By,10),wt(Kd,10),wt(pl,8),wt(QS,8))},i.\u0275dir=Oi({type:i,selectors:[["","ngModel","",3,"formControlName","",3,"formControl",""]],inputs:{name:"name",isDisabled:["disabled","isDisabled"],model:["ngModel","model"],options:["ngModelOptions","options"]},outputs:{update:"ngModelChange"},exportAs:["ngModel"],features:[Po([kue]),As,bc]}),i})(),WH=(()=>{class i{}return i.\u0275fac=function(t){return new(t||i)},i.\u0275mod=ia({type:i}),i.\u0275inj=ft({}),i})();const que={provide:Kd,useExisting:ar(()=>JF),multi:!0};function JH(i,e){return null==i?`${e}`:(e&&"object"==typeof e&&(e="Object"),`${i}: ${e}`.slice(0,50))}let JF=(()=>{class i extends Hb{constructor(){super(...arguments),this._optionMap=new Map,this._idCounter=0,this._compareWith=Object.is}set compareWith(t){this._compareWith=t}writeValue(t){this.value=t;const r=JH(this._getOptionId(t),t);this.setProperty("value",r)}registerOnChange(t){this.onChange=n=>{this.value=this._getOptionValue(n),t(this.value)}}_registerOption(){return(this._idCounter++).toString()}_getOptionId(t){for(const n of Array.from(this._optionMap.keys()))if(this._compareWith(this._optionMap.get(n),t))return n;return null}_getOptionValue(t){const n=function Que(i){return i.split(":")[0]}(t);return this._optionMap.has(n)?this._optionMap.get(n):t}}return i.\u0275fac=function(){let e;return function(n){return(e||(e=Ka(i)))(n||i)}}(),i.\u0275dir=Oi({type:i,selectors:[["select","formControlName","",3,"multiple",""],["select","formControl","",3,"multiple",""],["select","ngModel","",3,"multiple",""]],hostBindings:function(t,n){1&t&&Fi("change",function(s){return n.onChange(s.target.value)})("blur",function(){return n.onTouched()})},inputs:{compareWith:"compareWith"},features:[Po([que]),As]}),i})(),$S=(()=>{class i{constructor(t,n,r){this._element=t,this._renderer=n,this._select=r,this._select&&(this.id=this._select._registerOption())}set ngValue(t){null!=this._select&&(this._select._optionMap.set(this.id,t),this._setElementValue(JH(this.id,t)),this._select.writeValue(this._select.value))}set value(t){this._setElementValue(t),this._select&&this._select.writeValue(this._select.value)}_setElementValue(t){this._renderer.setProperty(this._element.nativeElement,"value",t)}ngOnDestroy(){this._select&&(this._select._optionMap.delete(this.id),this._select.writeValue(this._select.value))}}return i.\u0275fac=function(t){return new(t||i)(wt(Cs),wt(as),wt(JF,9))},i.\u0275dir=Oi({type:i,selectors:[["option"]],inputs:{ngValue:"ngValue",value:"value"}}),i})();const Wue={provide:Kd,useExisting:ar(()=>eO),multi:!0};function eV(i,e){return null==i?`${e}`:("string"==typeof e&&(e=`'${e}'`),e&&"object"==typeof e&&(e="Object"),`${i}: ${e}`.slice(0,50))}let eO=(()=>{class i extends Hb{constructor(){super(...arguments),this._optionMap=new Map,this._idCounter=0,this._compareWith=Object.is}set compareWith(t){this._compareWith=t}writeValue(t){let n;if(this.value=t,Array.isArray(t)){const r=t.map(s=>this._getOptionId(s));n=(s,a)=>{s._setSelected(r.indexOf(a.toString())>-1)}}else n=(r,s)=>{r._setSelected(!1)};this._optionMap.forEach(n)}registerOnChange(t){this.onChange=n=>{const r=[],s=n.selectedOptions;if(void 0!==s){const a=s;for(let l=0;l{class i{constructor(t,n,r){this._element=t,this._renderer=n,this._select=r,this._select&&(this.id=this._select._registerOption(this))}set ngValue(t){null!=this._select&&(this._value=t,this._setElementValue(eV(this.id,t)),this._select.writeValue(this._select.value))}set value(t){this._select?(this._value=t,this._setElementValue(eV(this.id,t)),this._select.writeValue(this._select.value)):this._setElementValue(t)}_setElementValue(t){this._renderer.setProperty(this._element.nativeElement,"value",t)}_setSelected(t){this._renderer.setProperty(this._element.nativeElement,"selected",t)}ngOnDestroy(){this._select&&(this._select._optionMap.delete(this.id),this._select.writeValue(this._select.value))}}return i.\u0275fac=function(t){return new(t||i)(wt(Cs),wt(as),wt(eO,9))},i.\u0275dir=Oi({type:i,selectors:[["option"]],inputs:{ngValue:"ngValue",value:"value"}}),i})(),nhe=(()=>{class i{}return i.\u0275fac=function(t){return new(t||i)},i.\u0275mod=ia({type:i}),i.\u0275inj=ft({imports:[WH]}),i})(),rhe=(()=>{class i{static withConfig(t){return{ngModule:i,providers:[{provide:QS,useValue:t.callSetDisabledState??GF}]}}}return i.\u0275fac=function(t){return new(t||i)},i.\u0275mod=ia({type:i}),i.\u0275inj=ft({imports:[nhe]}),i})();const she=["input"],ohe=["label"],ahe=["*"],lhe=new cr("mat-checkbox-default-options",{providedIn:"root",factory:cV});function cV(){return{color:"accent",clickAction:"check-indeterminate"}}const che={provide:Kd,useExisting:ar(()=>E2),multi:!0};class uhe{}let hhe=0;const uV=cV(),dhe=AD(C2(kb(Pb(class{constructor(i){this._elementRef=i}}))));let fhe=(()=>{class i extends dhe{get inputId(){return`${this.id||this._uniqueId}-input`}get required(){return this._required}set required(t){this._required=pa(t)}constructor(t,n,r,s,a,l,u){super(n),this._changeDetectorRef=r,this._ngZone=s,this._animationMode=l,this._options=u,this.ariaLabel="",this.ariaLabelledby=null,this.labelPosition="after",this.name=null,this.change=new Ws,this.indeterminateChange=new Ws,this._onTouched=()=>{},this._currentAnimationClass="",this._currentCheckState=0,this._controlValueAccessorChangeFn=()=>{},this._checked=!1,this._disabled=!1,this._indeterminate=!1,this._options=this._options||uV,this.color=this.defaultColor=this._options.color||uV.color,this.tabIndex=parseInt(a)||0,this.id=this._uniqueId=`${t}${++hhe}`}ngAfterViewInit(){this._syncIndeterminate(this._indeterminate)}get checked(){return this._checked}set checked(t){const n=pa(t);n!=this.checked&&(this._checked=n,this._changeDetectorRef.markForCheck())}get disabled(){return this._disabled}set disabled(t){const n=pa(t);n!==this.disabled&&(this._disabled=n,this._changeDetectorRef.markForCheck())}get indeterminate(){return this._indeterminate}set indeterminate(t){const n=t!=this._indeterminate;this._indeterminate=pa(t),n&&(this._transitionCheckState(this._indeterminate?3:this.checked?1:2),this.indeterminateChange.emit(this._indeterminate)),this._syncIndeterminate(this._indeterminate)}_isRippleDisabled(){return this.disableRipple||this.disabled}_onLabelTextChange(){this._changeDetectorRef.detectChanges()}writeValue(t){this.checked=!!t}registerOnChange(t){this._controlValueAccessorChangeFn=t}registerOnTouched(t){this._onTouched=t}setDisabledState(t){this.disabled=t}_getAriaChecked(){return this.checked?"true":this.indeterminate?"mixed":"false"}_transitionCheckState(t){let n=this._currentCheckState,r=this._getAnimationTargetElement();if(n!==t&&r&&(this._currentAnimationClass&&r.classList.remove(this._currentAnimationClass),this._currentAnimationClass=this._getAnimationClassForCheckStateTransition(n,t),this._currentCheckState=t,this._currentAnimationClass.length>0)){r.classList.add(this._currentAnimationClass);const s=this._currentAnimationClass;this._ngZone.runOutsideAngular(()=>{setTimeout(()=>{r.classList.remove(s)},1e3)})}}_emitChangeEvent(){this._controlValueAccessorChangeFn(this.checked),this.change.emit(this._createChangeEvent(this.checked)),this._inputElement&&(this._inputElement.nativeElement.checked=this.checked)}toggle(){this.checked=!this.checked,this._controlValueAccessorChangeFn(this.checked)}_handleInputClick(){const t=this._options?.clickAction;this.disabled||"noop"===t?!this.disabled&&"noop"===t&&(this._inputElement.nativeElement.checked=this.checked,this._inputElement.nativeElement.indeterminate=this.indeterminate):(this.indeterminate&&"check"!==t&&Promise.resolve().then(()=>{this._indeterminate=!1,this.indeterminateChange.emit(this._indeterminate)}),this._checked=!this._checked,this._transitionCheckState(this._checked?1:2),this._emitChangeEvent())}_onInteractionEvent(t){t.stopPropagation()}_onBlur(){Promise.resolve().then(()=>{this._onTouched(),this._changeDetectorRef.markForCheck()})}_getAnimationClassForCheckStateTransition(t,n){if("NoopAnimations"===this._animationMode)return"";switch(t){case 0:if(1===n)return this._animationClasses.uncheckedToChecked;if(3==n)return this._checked?this._animationClasses.checkedToIndeterminate:this._animationClasses.uncheckedToIndeterminate;break;case 2:return 1===n?this._animationClasses.uncheckedToChecked:this._animationClasses.uncheckedToIndeterminate;case 1:return 2===n?this._animationClasses.checkedToUnchecked:this._animationClasses.checkedToIndeterminate;case 3:return 1===n?this._animationClasses.indeterminateToChecked:this._animationClasses.indeterminateToUnchecked}return""}_syncIndeterminate(t){const n=this._inputElement;n&&(n.nativeElement.indeterminate=t)}}return i.\u0275fac=function(t){Qd()},i.\u0275dir=Oi({type:i,viewQuery:function(t,n){if(1&t&&(la(she,5),la(ohe,5),la(qA,5)),2&t){let r;so(r=oo())&&(n._inputElement=r.first),so(r=oo())&&(n._labelElement=r.first),so(r=oo())&&(n.ripple=r.first)}},inputs:{ariaLabel:["aria-label","ariaLabel"],ariaLabelledby:["aria-labelledby","ariaLabelledby"],ariaDescribedby:["aria-describedby","ariaDescribedby"],id:"id",required:"required",labelPosition:"labelPosition",name:"name",value:"value",checked:"checked",disabled:"disabled",indeterminate:"indeterminate"},outputs:{change:"change",indeterminateChange:"indeterminateChange"},features:[As]}),i})(),E2=(()=>{class i extends fhe{constructor(t,n,r,s,a,l){super("mat-mdc-checkbox-",t,n,r,s,a,l),this._animationClasses={uncheckedToChecked:"mdc-checkbox--anim-unchecked-checked",uncheckedToIndeterminate:"mdc-checkbox--anim-unchecked-indeterminate",checkedToUnchecked:"mdc-checkbox--anim-checked-unchecked",checkedToIndeterminate:"mdc-checkbox--anim-checked-indeterminate",indeterminateToChecked:"mdc-checkbox--anim-indeterminate-checked",indeterminateToUnchecked:"mdc-checkbox--anim-indeterminate-unchecked"}}focus(){this._inputElement.nativeElement.focus()}_createChangeEvent(t){const n=new uhe;return n.source=this,n.checked=t,n}_getAnimationTargetElement(){return this._inputElement?.nativeElement}_onInputClick(){super._handleInputClick()}_preventBubblingFromLabel(t){t.target&&this._labelElement.nativeElement.contains(t.target)&&t.stopPropagation()}}return i.\u0275fac=function(t){return new(t||i)(wt(Cs),wt(pl),wt(mo),Oh("tabindex"),wt(_h,8),wt(lhe,8))},i.\u0275cmp=Fr({type:i,selectors:[["mat-checkbox"]],hostAttrs:[1,"mat-mdc-checkbox"],hostVars:12,hostBindings:function(t,n){2&t&&(Di("id",n.id),Ea("tabindex",null)("aria-label",null)("aria-labelledby",null),jo("_mat-animation-noopable","NoopAnimations"===n._animationMode)("mdc-checkbox--disabled",n.disabled)("mat-mdc-checkbox-disabled",n.disabled)("mat-mdc-checkbox-checked",n.checked))},inputs:{disableRipple:"disableRipple",color:"color",tabIndex:"tabIndex"},exportAs:["matCheckbox"],features:[Po([che]),As],ngContentSelectors:ahe,decls:15,vars:19,consts:[[1,"mdc-form-field",3,"click"],[1,"mdc-checkbox"],["checkbox",""],[1,"mat-mdc-checkbox-touch-target",3,"click"],["type","checkbox",1,"mdc-checkbox__native-control",3,"checked","disabled","id","required","tabIndex","blur","click","change"],["input",""],[1,"mdc-checkbox__ripple"],[1,"mdc-checkbox__background"],["focusable","false","viewBox","0 0 24 24","aria-hidden","true",1,"mdc-checkbox__checkmark"],["fill","none","d","M1.73,12.91 8.1,19.28 22.79,4.59",1,"mdc-checkbox__checkmark-path"],[1,"mdc-checkbox__mixedmark"],["mat-ripple","",1,"mat-mdc-checkbox-ripple","mat-mdc-focus-indicator",3,"matRippleTrigger","matRippleDisabled","matRippleCentered"],[3,"for"],["label",""]],template:function(t,n){if(1&t&&(fh(),Zt(0,"div",0),Fi("click",function(s){return n._preventBubblingFromLabel(s)}),Zt(1,"div",1,2)(3,"div",3),Fi("click",function(){return n._onInputClick()}),un(),Zt(4,"input",4,5),Fi("blur",function(){return n._onBlur()})("click",function(){return n._onInputClick()})("change",function(s){return n._onInteractionEvent(s)}),un(),Pr(6,"div",6),Zt(7,"div",7),vl(),Zt(8,"svg",8),Pr(9,"path",9),un(),cd(),Pr(10,"div",10),un(),Pr(11,"div",11),un(),Zt(12,"label",12,13),uu(14),un()()),2&t){const r=bl(2);jo("mdc-form-field--align-end","before"==n.labelPosition),Nn(4),jo("mdc-checkbox--selected",n.checked),Cn("checked",n.checked)("disabled",n.disabled)("id",n.inputId)("required",n.required)("tabIndex",n.tabIndex),Ea("aria-checked",n._getAriaChecked())("aria-label",n.ariaLabel||null)("aria-labelledby",n.ariaLabelledby)("aria-describedby",n.ariaDescribedby)("name",n.name)("value",n.value),Nn(7),Cn("matRippleTrigger",r)("matRippleDisabled",n.disableRipple||n.disabled)("matRippleCentered",!0),Nn(1),Cn("for",n.inputId)}},dependencies:[qA],styles:['.mdc-touch-target-wrapper{display:inline}@keyframes mdc-checkbox-unchecked-checked-checkmark-path{0%,50%{stroke-dashoffset:29.7833385}50%{animation-timing-function:cubic-bezier(0, 0, 0.2, 1)}100%{stroke-dashoffset:0}}@keyframes mdc-checkbox-unchecked-indeterminate-mixedmark{0%,68.2%{transform:scaleX(0)}68.2%{animation-timing-function:cubic-bezier(0, 0, 0, 1)}100%{transform:scaleX(1)}}@keyframes mdc-checkbox-checked-unchecked-checkmark-path{from{animation-timing-function:cubic-bezier(0.4, 0, 1, 1);opacity:1;stroke-dashoffset:0}to{opacity:0;stroke-dashoffset:-29.7833385}}@keyframes mdc-checkbox-checked-indeterminate-checkmark{from{animation-timing-function:cubic-bezier(0, 0, 0.2, 1);transform:rotate(0deg);opacity:1}to{transform:rotate(45deg);opacity:0}}@keyframes mdc-checkbox-indeterminate-checked-checkmark{from{animation-timing-function:cubic-bezier(0.14, 0, 0, 1);transform:rotate(45deg);opacity:0}to{transform:rotate(360deg);opacity:1}}@keyframes mdc-checkbox-checked-indeterminate-mixedmark{from{animation-timing-function:mdc-animation-deceleration-curve-timing-function;transform:rotate(-45deg);opacity:0}to{transform:rotate(0deg);opacity:1}}@keyframes mdc-checkbox-indeterminate-checked-mixedmark{from{animation-timing-function:cubic-bezier(0.14, 0, 0, 1);transform:rotate(0deg);opacity:1}to{transform:rotate(315deg);opacity:0}}@keyframes mdc-checkbox-indeterminate-unchecked-mixedmark{0%{animation-timing-function:linear;transform:scaleX(1);opacity:1}32.8%,100%{transform:scaleX(0);opacity:0}}.mdc-checkbox{display:inline-block;position:relative;flex:0 0 18px;box-sizing:content-box;width:18px;height:18px;line-height:0;white-space:nowrap;cursor:pointer;vertical-align:bottom}.mdc-checkbox[hidden]{display:none}.mdc-checkbox.mdc-ripple-upgraded--background-focused .mdc-checkbox__focus-ring,.mdc-checkbox:not(.mdc-ripple-upgraded):focus .mdc-checkbox__focus-ring{pointer-events:none;border:2px solid rgba(0,0,0,0);border-radius:6px;box-sizing:content-box;position:absolute;top:50%;left:50%;transform:translate(-50%, -50%);height:100%;width:100%}@media screen and (forced-colors: active){.mdc-checkbox.mdc-ripple-upgraded--background-focused .mdc-checkbox__focus-ring,.mdc-checkbox:not(.mdc-ripple-upgraded):focus .mdc-checkbox__focus-ring{border-color:CanvasText}}.mdc-checkbox.mdc-ripple-upgraded--background-focused .mdc-checkbox__focus-ring::after,.mdc-checkbox:not(.mdc-ripple-upgraded):focus .mdc-checkbox__focus-ring::after{content:"";border:2px solid rgba(0,0,0,0);border-radius:8px;display:block;position:absolute;top:50%;left:50%;transform:translate(-50%, -50%);height:calc(100% + 4px);width:calc(100% + 4px)}@media screen and (forced-colors: active){.mdc-checkbox.mdc-ripple-upgraded--background-focused .mdc-checkbox__focus-ring::after,.mdc-checkbox:not(.mdc-ripple-upgraded):focus .mdc-checkbox__focus-ring::after{border-color:CanvasText}}@media all and (-ms-high-contrast: none){.mdc-checkbox .mdc-checkbox__focus-ring{display:none}}@media screen and (forced-colors: active),(-ms-high-contrast: active){.mdc-checkbox__mixedmark{margin:0 1px}}.mdc-checkbox--disabled{cursor:default;pointer-events:none}.mdc-checkbox__background{display:inline-flex;position:absolute;align-items:center;justify-content:center;box-sizing:border-box;width:18px;height:18px;border:2px solid currentColor;border-radius:2px;background-color:rgba(0,0,0,0);pointer-events:none;will-change:background-color,border-color;transition:background-color 90ms 0ms cubic-bezier(0.4, 0, 0.6, 1),border-color 90ms 0ms cubic-bezier(0.4, 0, 0.6, 1)}.mdc-checkbox__checkmark{position:absolute;top:0;right:0;bottom:0;left:0;width:100%;opacity:0;transition:opacity 180ms 0ms cubic-bezier(0.4, 0, 0.6, 1)}.mdc-checkbox--upgraded .mdc-checkbox__checkmark{opacity:1}.mdc-checkbox__checkmark-path{transition:stroke-dashoffset 180ms 0ms cubic-bezier(0.4, 0, 0.6, 1);stroke:currentColor;stroke-width:3.12px;stroke-dashoffset:29.7833385;stroke-dasharray:29.7833385}.mdc-checkbox__mixedmark{width:100%;height:0;transform:scaleX(0) rotate(0deg);border-width:1px;border-style:solid;opacity:0;transition:opacity 90ms 0ms cubic-bezier(0.4, 0, 0.6, 1),transform 90ms 0ms cubic-bezier(0.4, 0, 0.6, 1)}.mdc-checkbox--anim-unchecked-checked .mdc-checkbox__background,.mdc-checkbox--anim-unchecked-indeterminate .mdc-checkbox__background,.mdc-checkbox--anim-checked-unchecked .mdc-checkbox__background,.mdc-checkbox--anim-indeterminate-unchecked .mdc-checkbox__background{animation-duration:180ms;animation-timing-function:linear}.mdc-checkbox--anim-unchecked-checked .mdc-checkbox__checkmark-path{animation:mdc-checkbox-unchecked-checked-checkmark-path 180ms linear 0s;transition:none}.mdc-checkbox--anim-unchecked-indeterminate .mdc-checkbox__mixedmark{animation:mdc-checkbox-unchecked-indeterminate-mixedmark 90ms linear 0s;transition:none}.mdc-checkbox--anim-checked-unchecked .mdc-checkbox__checkmark-path{animation:mdc-checkbox-checked-unchecked-checkmark-path 90ms linear 0s;transition:none}.mdc-checkbox--anim-checked-indeterminate .mdc-checkbox__checkmark{animation:mdc-checkbox-checked-indeterminate-checkmark 90ms linear 0s;transition:none}.mdc-checkbox--anim-checked-indeterminate .mdc-checkbox__mixedmark{animation:mdc-checkbox-checked-indeterminate-mixedmark 90ms linear 0s;transition:none}.mdc-checkbox--anim-indeterminate-checked .mdc-checkbox__checkmark{animation:mdc-checkbox-indeterminate-checked-checkmark 500ms linear 0s;transition:none}.mdc-checkbox--anim-indeterminate-checked .mdc-checkbox__mixedmark{animation:mdc-checkbox-indeterminate-checked-mixedmark 500ms linear 0s;transition:none}.mdc-checkbox--anim-indeterminate-unchecked .mdc-checkbox__mixedmark{animation:mdc-checkbox-indeterminate-unchecked-mixedmark 300ms linear 0s;transition:none}.mdc-checkbox__native-control:checked~.mdc-checkbox__background,.mdc-checkbox__native-control:indeterminate~.mdc-checkbox__background,.mdc-checkbox__native-control[data-indeterminate=true]~.mdc-checkbox__background{transition:border-color 90ms 0ms cubic-bezier(0, 0, 0.2, 1),background-color 90ms 0ms cubic-bezier(0, 0, 0.2, 1)}.mdc-checkbox__native-control:checked~.mdc-checkbox__background .mdc-checkbox__checkmark-path,.mdc-checkbox__native-control:indeterminate~.mdc-checkbox__background .mdc-checkbox__checkmark-path,.mdc-checkbox__native-control[data-indeterminate=true]~.mdc-checkbox__background .mdc-checkbox__checkmark-path{stroke-dashoffset:0}.mdc-checkbox__native-control{position:absolute;margin:0;padding:0;opacity:0;cursor:inherit}.mdc-checkbox__native-control:disabled{cursor:default;pointer-events:none}.mdc-checkbox--touch{margin:calc((var(--mdc-checkbox-state-layer-size, 48px) - var(--mdc-checkbox-state-layer-size, 40px)) / 2)}.mdc-checkbox--touch .mdc-checkbox__native-control{top:calc((var(--mdc-checkbox-state-layer-size, 40px) - var(--mdc-checkbox-state-layer-size, 48px)) / 2);right:calc((var(--mdc-checkbox-state-layer-size, 40px) - var(--mdc-checkbox-state-layer-size, 48px)) / 2);left:calc((var(--mdc-checkbox-state-layer-size, 40px) - var(--mdc-checkbox-state-layer-size, 48px)) / 2);width:var(--mdc-checkbox-state-layer-size, 48px);height:var(--mdc-checkbox-state-layer-size, 48px)}.mdc-checkbox__native-control:checked~.mdc-checkbox__background .mdc-checkbox__checkmark{transition:opacity 180ms 0ms cubic-bezier(0, 0, 0.2, 1),transform 180ms 0ms cubic-bezier(0, 0, 0.2, 1);opacity:1}.mdc-checkbox__native-control:checked~.mdc-checkbox__background .mdc-checkbox__mixedmark{transform:scaleX(1) rotate(-45deg)}.mdc-checkbox__native-control:indeterminate~.mdc-checkbox__background .mdc-checkbox__checkmark,.mdc-checkbox__native-control[data-indeterminate=true]~.mdc-checkbox__background .mdc-checkbox__checkmark{transform:rotate(45deg);opacity:0;transition:opacity 90ms 0ms cubic-bezier(0.4, 0, 0.6, 1),transform 90ms 0ms cubic-bezier(0.4, 0, 0.6, 1)}.mdc-checkbox__native-control:indeterminate~.mdc-checkbox__background .mdc-checkbox__mixedmark,.mdc-checkbox__native-control[data-indeterminate=true]~.mdc-checkbox__background .mdc-checkbox__mixedmark{transform:scaleX(1) rotate(0deg);opacity:1}.mdc-checkbox.mdc-checkbox--upgraded .mdc-checkbox__background,.mdc-checkbox.mdc-checkbox--upgraded .mdc-checkbox__checkmark,.mdc-checkbox.mdc-checkbox--upgraded .mdc-checkbox__checkmark-path,.mdc-checkbox.mdc-checkbox--upgraded .mdc-checkbox__mixedmark{transition:none}.mdc-form-field{display:inline-flex;align-items:center;vertical-align:middle}.mdc-form-field[hidden]{display:none}.mdc-form-field>label{margin-left:0;margin-right:auto;padding-left:4px;padding-right:0;order:0}[dir=rtl] .mdc-form-field>label,.mdc-form-field>label[dir=rtl]{margin-left:auto;margin-right:0}[dir=rtl] .mdc-form-field>label,.mdc-form-field>label[dir=rtl]{padding-left:0;padding-right:4px}.mdc-form-field--nowrap>label{text-overflow:ellipsis;overflow:hidden;white-space:nowrap}.mdc-form-field--align-end>label{margin-left:auto;margin-right:0;padding-left:0;padding-right:4px;order:-1}[dir=rtl] .mdc-form-field--align-end>label,.mdc-form-field--align-end>label[dir=rtl]{margin-left:0;margin-right:auto}[dir=rtl] .mdc-form-field--align-end>label,.mdc-form-field--align-end>label[dir=rtl]{padding-left:4px;padding-right:0}.mdc-form-field--space-between{justify-content:space-between}.mdc-form-field--space-between>label{margin:0}[dir=rtl] .mdc-form-field--space-between>label,.mdc-form-field--space-between>label[dir=rtl]{margin:0}.mat-mdc-checkbox{display:inline-block;position:relative;-webkit-tap-highlight-color:rgba(0,0,0,0)}.mat-mdc-checkbox .mdc-checkbox{padding:calc((var(--mdc-checkbox-state-layer-size, 40px) - 18px) / 2);margin:calc((var(--mdc-checkbox-state-layer-size, 40px) - var(--mdc-checkbox-state-layer-size, 40px)) / 2)}.mat-mdc-checkbox .mdc-checkbox .mdc-checkbox__native-control[disabled]:not(:checked):not(:indeterminate):not([data-indeterminate=true])~.mdc-checkbox__background{border-color:var(--mdc-checkbox-disabled-unselected-icon-color, rgba(0, 0, 0, 0.38));background-color:transparent}.mat-mdc-checkbox .mdc-checkbox .mdc-checkbox__native-control[disabled]:checked~.mdc-checkbox__background,.mat-mdc-checkbox .mdc-checkbox .mdc-checkbox__native-control[disabled]:indeterminate~.mdc-checkbox__background,.mat-mdc-checkbox .mdc-checkbox .mdc-checkbox__native-control[data-indeterminate=true][disabled]~.mdc-checkbox__background{border-color:transparent;background-color:var(--mdc-checkbox-disabled-selected-icon-color, rgba(0, 0, 0, 0.38))}.mat-mdc-checkbox .mdc-checkbox .mdc-checkbox__native-control:enabled~.mdc-checkbox__background .mdc-checkbox__checkmark{color:var(--mdc-checkbox-selected-checkmark-color, #fff)}.mat-mdc-checkbox .mdc-checkbox .mdc-checkbox__native-control:enabled~.mdc-checkbox__background .mdc-checkbox__mixedmark{border-color:var(--mdc-checkbox-selected-checkmark-color, #fff)}.mat-mdc-checkbox .mdc-checkbox .mdc-checkbox__native-control:disabled~.mdc-checkbox__background .mdc-checkbox__checkmark{color:var(--mdc-checkbox-disabled-selected-checkmark-color, #fff)}.mat-mdc-checkbox .mdc-checkbox .mdc-checkbox__native-control:disabled~.mdc-checkbox__background .mdc-checkbox__mixedmark{border-color:var(--mdc-checkbox-disabled-selected-checkmark-color, #fff)}.mat-mdc-checkbox .mdc-checkbox .mdc-checkbox__native-control:enabled:not(:checked):not(:indeterminate):not([data-indeterminate=true])~.mdc-checkbox__background{border-color:var(--mdc-checkbox-unselected-icon-color, rgba(0, 0, 0, 0.54));background-color:transparent}.mat-mdc-checkbox .mdc-checkbox .mdc-checkbox__native-control:enabled:checked~.mdc-checkbox__background,.mat-mdc-checkbox .mdc-checkbox .mdc-checkbox__native-control:enabled:indeterminate~.mdc-checkbox__background,.mat-mdc-checkbox .mdc-checkbox .mdc-checkbox__native-control[data-indeterminate=true]:enabled~.mdc-checkbox__background{border-color:var(--mdc-checkbox-selected-icon-color, var(--mdc-theme-secondary, #018786));background-color:var(--mdc-checkbox-selected-icon-color, var(--mdc-theme-secondary, #018786))}@keyframes mdc-checkbox-fade-in-background-8A000000FF01878600000000FF018786{0%{border-color:var(--mdc-checkbox-unselected-icon-color, rgba(0, 0, 0, 0.54));background-color:transparent}50%{border-color:var(--mdc-checkbox-selected-icon-color, var(--mdc-theme-secondary, #018786));background-color:var(--mdc-checkbox-selected-icon-color, var(--mdc-theme-secondary, #018786))}}@keyframes mdc-checkbox-fade-out-background-8A000000FF01878600000000FF018786{0%,80%{border-color:var(--mdc-checkbox-selected-icon-color, var(--mdc-theme-secondary, #018786));background-color:var(--mdc-checkbox-selected-icon-color, var(--mdc-theme-secondary, #018786))}100%{border-color:var(--mdc-checkbox-unselected-icon-color, rgba(0, 0, 0, 0.54));background-color:transparent}}.mat-mdc-checkbox .mdc-checkbox.mdc-checkbox--anim-unchecked-checked .mdc-checkbox__native-control:enabled~.mdc-checkbox__background,.mat-mdc-checkbox .mdc-checkbox.mdc-checkbox--anim-unchecked-indeterminate .mdc-checkbox__native-control:enabled~.mdc-checkbox__background{animation-name:mdc-checkbox-fade-in-background-8A000000FF01878600000000FF018786}.mat-mdc-checkbox .mdc-checkbox.mdc-checkbox--anim-checked-unchecked .mdc-checkbox__native-control:enabled~.mdc-checkbox__background,.mat-mdc-checkbox .mdc-checkbox.mdc-checkbox--anim-indeterminate-unchecked .mdc-checkbox__native-control:enabled~.mdc-checkbox__background{animation-name:mdc-checkbox-fade-out-background-8A000000FF01878600000000FF018786}.mat-mdc-checkbox .mdc-checkbox:hover .mdc-checkbox__native-control:enabled:not(:checked):not(:indeterminate):not([data-indeterminate=true])~.mdc-checkbox__background{border-color:var(--mdc-checkbox-unselected-hover-icon-color, var(--mdc-theme-secondary, #018786));background-color:transparent}.mat-mdc-checkbox .mdc-checkbox:hover .mdc-checkbox__native-control:enabled:checked~.mdc-checkbox__background,.mat-mdc-checkbox .mdc-checkbox:hover .mdc-checkbox__native-control:enabled:indeterminate~.mdc-checkbox__background,.mat-mdc-checkbox .mdc-checkbox:hover .mdc-checkbox__native-control[data-indeterminate=true]:enabled~.mdc-checkbox__background{border-color:var(--mdc-checkbox-selected-hover-icon-color, var(--mdc-theme-secondary, #018786));background-color:var(--mdc-checkbox-selected-hover-icon-color, var(--mdc-theme-secondary, #018786))}@keyframes mdc-checkbox-fade-in-background-FF018786FF01878600000000FF018786{0%{border-color:var(--mdc-checkbox-unselected-hover-icon-color, var(--mdc-theme-secondary, #018786));background-color:transparent}50%{border-color:var(--mdc-checkbox-selected-hover-icon-color, var(--mdc-theme-secondary, #018786));background-color:var(--mdc-checkbox-selected-hover-icon-color, var(--mdc-theme-secondary, #018786))}}@keyframes mdc-checkbox-fade-out-background-FF018786FF01878600000000FF018786{0%,80%{border-color:var(--mdc-checkbox-selected-hover-icon-color, var(--mdc-theme-secondary, #018786));background-color:var(--mdc-checkbox-selected-hover-icon-color, var(--mdc-theme-secondary, #018786))}100%{border-color:var(--mdc-checkbox-unselected-hover-icon-color, var(--mdc-theme-secondary, #018786));background-color:transparent}}.mat-mdc-checkbox .mdc-checkbox:hover.mdc-checkbox--anim-unchecked-checked .mdc-checkbox__native-control:enabled~.mdc-checkbox__background,.mat-mdc-checkbox .mdc-checkbox:hover.mdc-checkbox--anim-unchecked-indeterminate .mdc-checkbox__native-control:enabled~.mdc-checkbox__background{animation-name:mdc-checkbox-fade-in-background-FF018786FF01878600000000FF018786}.mat-mdc-checkbox .mdc-checkbox:hover.mdc-checkbox--anim-checked-unchecked .mdc-checkbox__native-control:enabled~.mdc-checkbox__background,.mat-mdc-checkbox .mdc-checkbox:hover.mdc-checkbox--anim-indeterminate-unchecked .mdc-checkbox__native-control:enabled~.mdc-checkbox__background{animation-name:mdc-checkbox-fade-out-background-FF018786FF01878600000000FF018786}.mat-mdc-checkbox .mdc-checkbox.mdc-ripple-upgraded--background-focused .mdc-checkbox__native-control:enabled:not(:checked):not(:indeterminate):not([data-indeterminate=true])~.mdc-checkbox__background,.mat-mdc-checkbox .mdc-checkbox:not(.mdc-ripple-upgraded):focus .mdc-checkbox__native-control:enabled:not(:checked):not(:indeterminate):not([data-indeterminate=true])~.mdc-checkbox__background{border-color:var(--mdc-checkbox-unselected-focus-icon-color, var(--mdc-theme-secondary, #018786));background-color:transparent}.mat-mdc-checkbox .mdc-checkbox.mdc-ripple-upgraded--background-focused .mdc-checkbox__native-control:enabled:checked~.mdc-checkbox__background,.mat-mdc-checkbox .mdc-checkbox.mdc-ripple-upgraded--background-focused .mdc-checkbox__native-control:enabled:indeterminate~.mdc-checkbox__background,.mat-mdc-checkbox .mdc-checkbox.mdc-ripple-upgraded--background-focused .mdc-checkbox__native-control[data-indeterminate=true]:enabled~.mdc-checkbox__background,.mat-mdc-checkbox .mdc-checkbox:not(.mdc-ripple-upgraded):focus .mdc-checkbox__native-control:enabled:checked~.mdc-checkbox__background,.mat-mdc-checkbox .mdc-checkbox:not(.mdc-ripple-upgraded):focus .mdc-checkbox__native-control:enabled:indeterminate~.mdc-checkbox__background,.mat-mdc-checkbox .mdc-checkbox:not(.mdc-ripple-upgraded):focus .mdc-checkbox__native-control[data-indeterminate=true]:enabled~.mdc-checkbox__background{border-color:var(--mdc-checkbox-selected-focus-icon-color, var(--mdc-theme-secondary, #018786));background-color:var(--mdc-checkbox-selected-focus-icon-color, var(--mdc-theme-secondary, #018786))}@keyframes mdc-checkbox-fade-in-background-FF018786FF01878600000000FF018786{0%{border-color:var(--mdc-checkbox-unselected-focus-icon-color, var(--mdc-theme-secondary, #018786));background-color:transparent}50%{border-color:var(--mdc-checkbox-selected-focus-icon-color, var(--mdc-theme-secondary, #018786));background-color:var(--mdc-checkbox-selected-focus-icon-color, var(--mdc-theme-secondary, #018786))}}@keyframes mdc-checkbox-fade-out-background-FF018786FF01878600000000FF018786{0%,80%{border-color:var(--mdc-checkbox-selected-focus-icon-color, var(--mdc-theme-secondary, #018786));background-color:var(--mdc-checkbox-selected-focus-icon-color, var(--mdc-theme-secondary, #018786))}100%{border-color:var(--mdc-checkbox-unselected-focus-icon-color, var(--mdc-theme-secondary, #018786));background-color:transparent}}.mat-mdc-checkbox .mdc-checkbox.mdc-ripple-upgraded--background-focused.mdc-checkbox--anim-unchecked-checked .mdc-checkbox__native-control:enabled~.mdc-checkbox__background,.mat-mdc-checkbox .mdc-checkbox.mdc-ripple-upgraded--background-focused.mdc-checkbox--anim-unchecked-indeterminate .mdc-checkbox__native-control:enabled~.mdc-checkbox__background,.mat-mdc-checkbox .mdc-checkbox:not(.mdc-ripple-upgraded):focus.mdc-checkbox--anim-unchecked-checked .mdc-checkbox__native-control:enabled~.mdc-checkbox__background,.mat-mdc-checkbox .mdc-checkbox:not(.mdc-ripple-upgraded):focus.mdc-checkbox--anim-unchecked-indeterminate .mdc-checkbox__native-control:enabled~.mdc-checkbox__background{animation-name:mdc-checkbox-fade-in-background-FF018786FF01878600000000FF018786}.mat-mdc-checkbox .mdc-checkbox.mdc-ripple-upgraded--background-focused.mdc-checkbox--anim-checked-unchecked .mdc-checkbox__native-control:enabled~.mdc-checkbox__background,.mat-mdc-checkbox .mdc-checkbox.mdc-ripple-upgraded--background-focused.mdc-checkbox--anim-indeterminate-unchecked .mdc-checkbox__native-control:enabled~.mdc-checkbox__background,.mat-mdc-checkbox .mdc-checkbox:not(.mdc-ripple-upgraded):focus.mdc-checkbox--anim-checked-unchecked .mdc-checkbox__native-control:enabled~.mdc-checkbox__background,.mat-mdc-checkbox .mdc-checkbox:not(.mdc-ripple-upgraded):focus.mdc-checkbox--anim-indeterminate-unchecked .mdc-checkbox__native-control:enabled~.mdc-checkbox__background{animation-name:mdc-checkbox-fade-out-background-FF018786FF01878600000000FF018786}.mat-mdc-checkbox .mdc-checkbox:not(:disabled):active .mdc-checkbox__native-control:enabled:not(:checked):not(:indeterminate):not([data-indeterminate=true])~.mdc-checkbox__background{border-color:var(--mdc-checkbox-unselected-pressed-icon-color, rgba(0, 0, 0, 0.54));background-color:transparent}.mat-mdc-checkbox .mdc-checkbox:not(:disabled):active .mdc-checkbox__native-control:enabled:checked~.mdc-checkbox__background,.mat-mdc-checkbox .mdc-checkbox:not(:disabled):active .mdc-checkbox__native-control:enabled:indeterminate~.mdc-checkbox__background,.mat-mdc-checkbox .mdc-checkbox:not(:disabled):active .mdc-checkbox__native-control[data-indeterminate=true]:enabled~.mdc-checkbox__background{border-color:var(--mdc-checkbox-selected-pressed-icon-color, var(--mdc-theme-secondary, #018786));background-color:var(--mdc-checkbox-selected-pressed-icon-color, var(--mdc-theme-secondary, #018786))}@keyframes mdc-checkbox-fade-in-background-8A000000FF01878600000000FF018786{0%{border-color:var(--mdc-checkbox-unselected-pressed-icon-color, rgba(0, 0, 0, 0.54));background-color:transparent}50%{border-color:var(--mdc-checkbox-selected-pressed-icon-color, var(--mdc-theme-secondary, #018786));background-color:var(--mdc-checkbox-selected-pressed-icon-color, var(--mdc-theme-secondary, #018786))}}@keyframes mdc-checkbox-fade-out-background-8A000000FF01878600000000FF018786{0%,80%{border-color:var(--mdc-checkbox-selected-pressed-icon-color, var(--mdc-theme-secondary, #018786));background-color:var(--mdc-checkbox-selected-pressed-icon-color, var(--mdc-theme-secondary, #018786))}100%{border-color:var(--mdc-checkbox-unselected-pressed-icon-color, rgba(0, 0, 0, 0.54));background-color:transparent}}.mat-mdc-checkbox .mdc-checkbox:not(:disabled):active.mdc-checkbox--anim-unchecked-checked .mdc-checkbox__native-control:enabled~.mdc-checkbox__background,.mat-mdc-checkbox .mdc-checkbox:not(:disabled):active.mdc-checkbox--anim-unchecked-indeterminate .mdc-checkbox__native-control:enabled~.mdc-checkbox__background{animation-name:mdc-checkbox-fade-in-background-8A000000FF01878600000000FF018786}.mat-mdc-checkbox .mdc-checkbox:not(:disabled):active.mdc-checkbox--anim-checked-unchecked .mdc-checkbox__native-control:enabled~.mdc-checkbox__background,.mat-mdc-checkbox .mdc-checkbox:not(:disabled):active.mdc-checkbox--anim-indeterminate-unchecked .mdc-checkbox__native-control:enabled~.mdc-checkbox__background{animation-name:mdc-checkbox-fade-out-background-8A000000FF01878600000000FF018786}.mat-mdc-checkbox .mdc-checkbox .mdc-checkbox__background{top:calc((var(--mdc-checkbox-state-layer-size, 40px) - 18px) / 2);left:calc((var(--mdc-checkbox-state-layer-size, 40px) - 18px) / 2)}.mat-mdc-checkbox .mdc-checkbox .mdc-checkbox__native-control{top:calc((var(--mdc-checkbox-state-layer-size, 40px) - var(--mdc-checkbox-state-layer-size, 40px)) / 2);right:calc((var(--mdc-checkbox-state-layer-size, 40px) - var(--mdc-checkbox-state-layer-size, 40px)) / 2);left:calc((var(--mdc-checkbox-state-layer-size, 40px) - var(--mdc-checkbox-state-layer-size, 40px)) / 2);width:var(--mdc-checkbox-state-layer-size, 40px);height:var(--mdc-checkbox-state-layer-size, 40px)}.mat-mdc-checkbox .mdc-checkbox:hover .mdc-checkbox__native-control:not([disabled])~.mdc-checkbox__ripple{opacity:.04;transform:scale(1);transition:opacity 80ms 0 cubic-bezier(0, 0, 0.2, 1),transform 80ms 0 cubic-bezier(0, 0, 0.2, 1)}.mat-mdc-checkbox .mdc-checkbox .mdc-checkbox__native-control:not([disabled]):focus~.mdc-checkbox__ripple{opacity:.16}.mat-mdc-checkbox .mdc-checkbox__background{-webkit-print-color-adjust:exact;color-adjust:exact}.mat-mdc-checkbox._mat-animation-noopable *,.mat-mdc-checkbox._mat-animation-noopable *::before{transition:none !important;animation:none !important}.mat-mdc-checkbox label{cursor:pointer}.mat-mdc-checkbox.mat-mdc-checkbox-disabled label{cursor:default}.mat-mdc-checkbox label:empty{display:none}.mat-mdc-checkbox .mdc-checkbox__native-control:focus:enabled:not(:checked):not(:indeterminate):not([data-indeterminate=true])~.mdc-checkbox__background{border-color:var(--mdc-checkbox-unselected-focus-icon-color, black)}.cdk-high-contrast-active .mat-mdc-checkbox.mat-mdc-checkbox-disabled{opacity:.5}.cdk-high-contrast-active .mat-mdc-checkbox .mdc-checkbox__checkmark{--mdc-checkbox-selected-checkmark-color: CanvasText;--mdc-checkbox-disabled-selected-checkmark-color: CanvasText}.mat-mdc-checkbox .mdc-checkbox__ripple{opacity:0}.mat-mdc-checkbox-ripple,.mdc-checkbox__ripple{top:0;left:0;right:0;bottom:0;position:absolute;border-radius:50%;pointer-events:none}.mat-mdc-checkbox-ripple:not(:empty),.mdc-checkbox__ripple:not(:empty){transform:translateZ(0)}.mat-mdc-checkbox-touch-target{position:absolute;top:50%;height:48px;left:50%;width:48px;transform:translate(-50%, -50%)}.mat-mdc-checkbox-ripple::before{border-radius:50%}.mdc-checkbox__native-control:focus~.mat-mdc-focus-indicator::before{content:""}'],encapsulation:2,changeDetection:0}),i})(),hV=(()=>{class i{}return i.\u0275fac=function(t){return new(t||i)},i.\u0275mod=ia({type:i}),i.\u0275inj=ft({}),i})(),mhe=(()=>{class i{}return i.\u0275fac=function(t){return new(t||i)},i.\u0275mod=ia({type:i}),i.\u0275inj=ft({imports:[Pu,Fb,hV,Pu,hV]}),i})();var ghe=Me(3144);function nO(i,e,t){for(let n in e)if(e.hasOwnProperty(n)){const r=e[n];r?i.setProperty(n,r,t?.has(n)?"important":""):i.removeProperty(n)}return i}function D2(i,e){const t=e?"":"none";nO(i.style,{"touch-action":e?"":"none","-webkit-user-drag":e?"":"none","-webkit-tap-highlight-color":e?"":"transparent","user-select":t,"-ms-user-select":t,"-webkit-user-select":t,"-moz-user-select":t})}function dV(i,e,t){nO(i.style,{position:e?"":"fixed",top:e?"":"0",opacity:e?"":"0",left:e?"":"-999em"},t)}function ED(i,e){return e&&"none"!=e?i+" "+e:i}function fV(i){const e=i.toLowerCase().indexOf("ms")>-1?1:1e3;return parseFloat(i)*e}function iO(i,e){return i.getPropertyValue(e).split(",").map(n=>n.trim())}function rO(i){const e=i.getBoundingClientRect();return{top:e.top,right:e.right,bottom:e.bottom,left:e.left,width:e.width,height:e.height,x:e.x,y:e.y}}function sO(i,e,t){const{top:n,bottom:r,left:s,right:a}=i;return t>=n&&t<=r&&e>=s&&e<=a}function KS(i,e,t){i.top+=e,i.bottom=i.top+i.height,i.left+=t,i.right=i.left+i.width}function pV(i,e,t,n){const{top:r,right:s,bottom:a,left:l,width:u,height:d}=i,p=u*e,y=d*e;return n>r-y&&nl-p&&t{this.positions.set(t,{scrollPosition:{top:t.scrollTop,left:t.scrollLeft},clientRect:rO(t)})})}handleScroll(e){const t=GA(e),n=this.positions.get(t);if(!n)return null;const r=n.scrollPosition;let s,a;if(t===this._document){const d=this.getViewportScrollPosition();s=d.top,a=d.left}else s=t.scrollTop,a=t.scrollLeft;const l=r.top-s,u=r.left-a;return this.positions.forEach((d,p)=>{d.clientRect&&t!==p&&t.contains(p)&&KS(d.clientRect,l,u)}),r.top=s,r.left=a,{top:l,left:u}}getViewportScrollPosition(){return{top:window.scrollY,left:window.scrollX}}}function mV(i){const e=i.cloneNode(!0),t=e.querySelectorAll("[id]"),n=i.nodeName.toLowerCase();e.removeAttribute("id");for(let r=0;rD2(n,t)))}constructor(e,t,n,r,s,a){this._config=t,this._document=n,this._ngZone=r,this._viewportRuler=s,this._dragDropRegistry=a,this._passiveTransform={x:0,y:0},this._activeTransform={x:0,y:0},this._hasStartedDragging=!1,this._moveEvents=new D,this._pointerMoveSubscription=De.EMPTY,this._pointerUpSubscription=De.EMPTY,this._scrollSubscription=De.EMPTY,this._resizeSubscription=De.EMPTY,this._boundaryElement=null,this._nativeInteractionsEnabled=!0,this._handles=[],this._disabledHandles=new Set,this._direction="ltr",this.dragStartDelay=0,this._disabled=!1,this.beforeStarted=new D,this.started=new D,this.released=new D,this.ended=new D,this.entered=new D,this.exited=new D,this.dropped=new D,this.moved=this._moveEvents,this._pointerDown=l=>{if(this.beforeStarted.next(),this._handles.length){const u=this._getTargetHandle(l);u&&!this._disabledHandles.has(u)&&!this.disabled&&this._initializeDragSequence(u,l)}else this.disabled||this._initializeDragSequence(this._rootElement,l)},this._pointerMove=l=>{const u=this._getPointerPositionOnPage(l);if(!this._hasStartedDragging){if(Math.abs(u.x-this._pickupPositionOnPage.x)+Math.abs(u.y-this._pickupPositionOnPage.y)>=this._config.dragStartThreshold){const O=Date.now()>=this._dragStartTime+this._getDragStartDelay(l),Q=this._dropContainer;if(!O)return void this._endDragSequence(l);(!Q||!Q.isDragging()&&!Q.isReceiving())&&(l.preventDefault(),this._hasStartedDragging=!0,this._ngZone.run(()=>this._startDragSequence(l)))}return}l.preventDefault();const d=this._getConstrainedPointerPosition(u);if(this._hasMoved=!0,this._lastKnownPointerPosition=u,this._updatePointerDirectionDelta(d),this._dropContainer)this._updateActiveDropContainer(d,u);else{const p=this.constrainPosition?this._initialClientRect:this._pickupPositionOnPage,y=this._activeTransform;y.x=d.x-p.x+this._passiveTransform.x,y.y=d.y-p.y+this._passiveTransform.y,this._applyRootElementTransform(y.x,y.y)}this._moveEvents.observers.length&&this._ngZone.run(()=>{this._moveEvents.next({source:this,pointerPosition:d,event:l,distance:this._getDragDistance(d),delta:this._pointerDirectionDelta})})},this._pointerUp=l=>{this._endDragSequence(l)},this._nativeDragStart=l=>{if(this._handles.length){const u=this._getTargetHandle(l);u&&!this._disabledHandles.has(u)&&!this.disabled&&l.preventDefault()}else this.disabled||l.preventDefault()},this.withRootElement(e).withParent(t.parentDragRef||null),this._parentPositions=new AV(n),a.registerDragItem(this)}getPlaceholderElement(){return this._placeholder}getRootElement(){return this._rootElement}getVisibleElement(){return this.isDragging()?this.getPlaceholderElement():this.getRootElement()}withHandles(e){this._handles=e.map(n=>Zu(n)),this._handles.forEach(n=>D2(n,this.disabled)),this._toggleNativeDragInteractions();const t=new Set;return this._disabledHandles.forEach(n=>{this._handles.indexOf(n)>-1&&t.add(n)}),this._disabledHandles=t,this}withPreviewTemplate(e){return this._previewTemplate=e,this}withPlaceholderTemplate(e){return this._placeholderTemplate=e,this}withRootElement(e){const t=Zu(e);return t!==this._rootElement&&(this._rootElement&&this._removeRootElementListeners(this._rootElement),this._ngZone.runOutsideAngular(()=>{t.addEventListener("mousedown",this._pointerDown,DD),t.addEventListener("touchstart",this._pointerDown,vV),t.addEventListener("dragstart",this._nativeDragStart,DD)}),this._initialTransform=void 0,this._rootElement=t),typeof SVGElement<"u"&&this._rootElement instanceof SVGElement&&(this._ownerSVGElement=this._rootElement.ownerSVGElement),this}withBoundaryElement(e){return this._boundaryElement=e?Zu(e):null,this._resizeSubscription.unsubscribe(),e&&(this._resizeSubscription=this._viewportRuler.change(10).subscribe(()=>this._containInsideBoundaryOnResize())),this}withParent(e){return this._parentDragRef=e,this}dispose(){this._removeRootElementListeners(this._rootElement),this.isDragging()&&this._rootElement?.remove(),this._anchor?.remove(),this._destroyPreview(),this._destroyPlaceholder(),this._dragDropRegistry.removeDragItem(this),this._removeSubscriptions(),this.beforeStarted.complete(),this.started.complete(),this.released.complete(),this.ended.complete(),this.entered.complete(),this.exited.complete(),this.dropped.complete(),this._moveEvents.complete(),this._handles=[],this._disabledHandles.clear(),this._dropContainer=void 0,this._resizeSubscription.unsubscribe(),this._parentPositions.clear(),this._boundaryElement=this._rootElement=this._ownerSVGElement=this._placeholderTemplate=this._previewTemplate=this._anchor=this._parentDragRef=null}isDragging(){return this._hasStartedDragging&&this._dragDropRegistry.isDragging(this)}reset(){this._rootElement.style.transform=this._initialTransform||"",this._activeTransform={x:0,y:0},this._passiveTransform={x:0,y:0}}disableHandle(e){!this._disabledHandles.has(e)&&this._handles.indexOf(e)>-1&&(this._disabledHandles.add(e),D2(e,!0))}enableHandle(e){this._disabledHandles.has(e)&&(this._disabledHandles.delete(e),D2(e,this.disabled))}withDirection(e){return this._direction=e,this}_withDropContainer(e){this._dropContainer=e}getFreeDragPosition(){const e=this.isDragging()?this._activeTransform:this._passiveTransform;return{x:e.x,y:e.y}}setFreeDragPosition(e){return this._activeTransform={x:0,y:0},this._passiveTransform.x=e.x,this._passiveTransform.y=e.y,this._dropContainer||this._applyRootElementTransform(e.x,e.y),this}withPreviewContainer(e){return this._previewContainer=e,this}_sortFromLastPointerPosition(){const e=this._lastKnownPointerPosition;e&&this._dropContainer&&this._updateActiveDropContainer(this._getConstrainedPointerPosition(e),e)}_removeSubscriptions(){this._pointerMoveSubscription.unsubscribe(),this._pointerUpSubscription.unsubscribe(),this._scrollSubscription.unsubscribe()}_destroyPreview(){this._preview?.remove(),this._previewRef?.destroy(),this._preview=this._previewRef=null}_destroyPlaceholder(){this._placeholder?.remove(),this._placeholderRef?.destroy(),this._placeholder=this._placeholderRef=null}_endDragSequence(e){if(this._dragDropRegistry.isDragging(this)&&(this._removeSubscriptions(),this._dragDropRegistry.stopDragging(this),this._toggleNativeDragInteractions(),this._handles&&(this._rootElement.style.webkitTapHighlightColor=this._rootElementTapHighlight),this._hasStartedDragging))if(this.released.next({source:this,event:e}),this._dropContainer)this._dropContainer._stopScrolling(),this._animatePreviewToPlaceholder().then(()=>{this._cleanupDragArtifacts(e),this._cleanupCachedDimensions(),this._dragDropRegistry.stopDragging(this)});else{this._passiveTransform.x=this._activeTransform.x;const t=this._getPointerPositionOnPage(e);this._passiveTransform.y=this._activeTransform.y,this._ngZone.run(()=>{this.ended.next({source:this,distance:this._getDragDistance(t),dropPoint:t,event:e})}),this._cleanupCachedDimensions(),this._dragDropRegistry.stopDragging(this)}}_startDragSequence(e){YS(e)&&(this._lastTouchEventTime=Date.now()),this._toggleNativeDragInteractions();const t=this._dropContainer;if(t){const n=this._rootElement,r=n.parentNode,s=this._placeholder=this._createPlaceholderElement(),a=this._anchor=this._anchor||this._document.createComment(""),l=this._getShadowRoot();r.insertBefore(a,n),this._initialTransform=n.style.transform||"",this._preview=this._createPreviewElement(),dV(n,!1,oO),this._document.body.appendChild(r.replaceChild(s,n)),this._getPreviewInsertionPoint(r,l).appendChild(this._preview),this.started.next({source:this,event:e}),t.start(),this._initialContainer=t,this._initialIndex=t.getItemIndex(this)}else this.started.next({source:this,event:e}),this._initialContainer=this._initialIndex=void 0;this._parentPositions.cache(t?t.getScrollableParents():[])}_initializeDragSequence(e,t){this._parentDragRef&&t.stopPropagation();const n=this.isDragging(),r=YS(t),s=!r&&0!==t.button,a=this._rootElement,l=GA(t),u=!r&&this._lastTouchEventTime&&this._lastTouchEventTime+800>Date.now(),d=r?hD(t):uD(t);if(l&&l.draggable&&"mousedown"===t.type&&t.preventDefault(),n||s||u||d)return;if(this._handles.length){const C=a.style;this._rootElementTapHighlight=C.webkitTapHighlightColor||"",C.webkitTapHighlightColor="transparent"}this._hasStartedDragging=this._hasMoved=!1,this._removeSubscriptions(),this._initialClientRect=this._rootElement.getBoundingClientRect(),this._pointerMoveSubscription=this._dragDropRegistry.pointerMove.subscribe(this._pointerMove),this._pointerUpSubscription=this._dragDropRegistry.pointerUp.subscribe(this._pointerUp),this._scrollSubscription=this._dragDropRegistry.scrolled(this._getShadowRoot()).subscribe(C=>this._updateOnScroll(C)),this._boundaryElement&&(this._boundaryRect=rO(this._boundaryElement));const p=this._previewTemplate;this._pickupPositionInElement=p&&p.template&&!p.matchSize?{x:0,y:0}:this._getPointerPositionInElement(this._initialClientRect,e,t);const y=this._pickupPositionOnPage=this._lastKnownPointerPosition=this._getPointerPositionOnPage(t);this._pointerDirectionDelta={x:0,y:0},this._pointerPositionAtLastDirectionChange={x:y.x,y:y.y},this._dragStartTime=Date.now(),this._dragDropRegistry.startDragging(this,t)}_cleanupDragArtifacts(e){dV(this._rootElement,!0,oO),this._anchor.parentNode.replaceChild(this._rootElement,this._anchor),this._destroyPreview(),this._destroyPlaceholder(),this._initialClientRect=this._boundaryRect=this._previewRect=this._initialTransform=void 0,this._ngZone.run(()=>{const t=this._dropContainer,n=t.getItemIndex(this),r=this._getPointerPositionOnPage(e),s=this._getDragDistance(r),a=t._isOverContainer(r.x,r.y);this.ended.next({source:this,distance:s,dropPoint:r,event:e}),this.dropped.next({item:this,currentIndex:n,previousIndex:this._initialIndex,container:t,previousContainer:this._initialContainer,isPointerOverContainer:a,distance:s,dropPoint:r,event:e}),t.drop(this,n,this._initialIndex,this._initialContainer,a,s,r,e),this._dropContainer=this._initialContainer})}_updateActiveDropContainer({x:e,y:t},{x:n,y:r}){let s=this._initialContainer._getSiblingContainerFromPosition(this,e,t);!s&&this._dropContainer!==this._initialContainer&&this._initialContainer._isOverContainer(e,t)&&(s=this._initialContainer),s&&s!==this._dropContainer&&this._ngZone.run(()=>{this.exited.next({item:this,container:this._dropContainer}),this._dropContainer.exit(this),this._dropContainer=s,this._dropContainer.enter(this,e,t,s===this._initialContainer&&s.sortingDisabled?this._initialIndex:void 0),this.entered.next({item:this,container:s,currentIndex:s.getItemIndex(this)})}),this.isDragging()&&(this._dropContainer._startScrollingIfNecessary(n,r),this._dropContainer._sortItem(this,e,t,this._pointerDirectionDelta),this.constrainPosition?this._applyPreviewTransform(e,t):this._applyPreviewTransform(e-this._pickupPositionInElement.x,t-this._pickupPositionInElement.y))}_createPreviewElement(){const e=this._previewTemplate,t=this.previewClass,n=e?e.template:null;let r;if(n&&e){const s=e.matchSize?this._initialClientRect:null,a=e.viewContainer.createEmbeddedView(n,e.context);a.detectChanges(),r=xV(a,this._document),this._previewRef=a,e.matchSize?wV(r,s):r.style.transform=BD(this._pickupPositionOnPage.x,this._pickupPositionOnPage.y)}else r=mV(this._rootElement),wV(r,this._initialClientRect),this._initialTransform&&(r.style.transform=this._initialTransform);return nO(r.style,{"pointer-events":"none",margin:"0",position:"fixed",top:"0",left:"0","z-index":`${this._config.zIndex||1e3}`},oO),D2(r,!1),r.classList.add("cdk-drag-preview"),r.setAttribute("dir",this._direction),t&&(Array.isArray(t)?t.forEach(s=>r.classList.add(s)):r.classList.add(t)),r}_animatePreviewToPlaceholder(){if(!this._hasMoved)return Promise.resolve();const e=this._placeholder.getBoundingClientRect();this._preview.classList.add("cdk-drag-animating"),this._applyPreviewTransform(e.left,e.top);const t=function yhe(i){const e=getComputedStyle(i),t=iO(e,"transition-property"),n=t.find(l=>"transform"===l||"all"===l);if(!n)return 0;const r=t.indexOf(n),s=iO(e,"transition-duration"),a=iO(e,"transition-delay");return fV(s[r])+fV(a[r])}(this._preview);return 0===t?Promise.resolve():this._ngZone.runOutsideAngular(()=>new Promise(n=>{const r=a=>{(!a||GA(a)===this._preview&&"transform"===a.propertyName)&&(this._preview?.removeEventListener("transitionend",r),n(),clearTimeout(s))},s=setTimeout(r,1.5*t);this._preview.addEventListener("transitionend",r)}))}_createPlaceholderElement(){const e=this._placeholderTemplate,t=e?e.template:null;let n;return t?(this._placeholderRef=e.viewContainer.createEmbeddedView(t,e.context),this._placeholderRef.detectChanges(),n=xV(this._placeholderRef,this._document)):n=mV(this._rootElement),n.style.pointerEvents="none",n.classList.add("cdk-drag-placeholder"),n}_getPointerPositionInElement(e,t,n){const r=t===this._rootElement?null:t,s=r?r.getBoundingClientRect():e,a=YS(n)?n.targetTouches[0]:n,l=this._getViewportScrollPosition();return{x:s.left-e.left+(a.pageX-s.left-l.left),y:s.top-e.top+(a.pageY-s.top-l.top)}}_getPointerPositionOnPage(e){const t=this._getViewportScrollPosition(),n=YS(e)?e.touches[0]||e.changedTouches[0]||{pageX:0,pageY:0}:e,r=n.pageX-t.left,s=n.pageY-t.top;if(this._ownerSVGElement){const a=this._ownerSVGElement.getScreenCTM();if(a){const l=this._ownerSVGElement.createSVGPoint();return l.x=r,l.y=s,l.matrixTransform(a.inverse())}}return{x:r,y:s}}_getConstrainedPointerPosition(e){const t=this._dropContainer?this._dropContainer.lockAxis:null;let{x:n,y:r}=this.constrainPosition?this.constrainPosition(e,this,this._initialClientRect,this._pickupPositionInElement):e;if("x"===this.lockAxis||"x"===t?r=this._pickupPositionOnPage.y:("y"===this.lockAxis||"y"===t)&&(n=this._pickupPositionOnPage.x),this._boundaryRect){const{x:s,y:a}=this._pickupPositionInElement,l=this._boundaryRect,{width:u,height:d}=this._getPreviewRect(),p=l.top+a,y=l.bottom-(d-a);n=bV(n,l.left+s,l.right-(u-s)),r=bV(r,p,y)}return{x:n,y:r}}_updatePointerDirectionDelta(e){const{x:t,y:n}=e,r=this._pointerDirectionDelta,s=this._pointerPositionAtLastDirectionChange,a=Math.abs(t-s.x),l=Math.abs(n-s.y);return a>this._config.pointerDirectionChangeThreshold&&(r.x=t>s.x?1:-1,s.x=t),l>this._config.pointerDirectionChangeThreshold&&(r.y=n>s.y?1:-1,s.y=n),r}_toggleNativeDragInteractions(){if(!this._rootElement||!this._handles)return;const e=this._handles.length>0||!this.isDragging();e!==this._nativeInteractionsEnabled&&(this._nativeInteractionsEnabled=e,D2(this._rootElement,e))}_removeRootElementListeners(e){e.removeEventListener("mousedown",this._pointerDown,DD),e.removeEventListener("touchstart",this._pointerDown,vV),e.removeEventListener("dragstart",this._nativeDragStart,DD)}_applyRootElementTransform(e,t){const n=BD(e,t),r=this._rootElement.style;null==this._initialTransform&&(this._initialTransform=r.transform&&"none"!=r.transform?r.transform:""),r.transform=ED(n,this._initialTransform)}_applyPreviewTransform(e,t){const n=this._previewTemplate?.template?void 0:this._initialTransform,r=BD(e,t);this._preview.style.transform=ED(r,n)}_getDragDistance(e){const t=this._pickupPositionOnPage;return t?{x:e.x-t.x,y:e.y-t.y}:{x:0,y:0}}_cleanupCachedDimensions(){this._boundaryRect=this._previewRect=void 0,this._parentPositions.clear()}_containInsideBoundaryOnResize(){let{x:e,y:t}=this._passiveTransform;if(0===e&&0===t||this.isDragging()||!this._boundaryElement)return;const n=this._rootElement.getBoundingClientRect(),r=this._boundaryElement.getBoundingClientRect();if(0===r.width&&0===r.height||0===n.width&&0===n.height)return;const s=r.left-n.left,a=n.right-r.right,l=r.top-n.top,u=n.bottom-r.bottom;r.width>n.width?(s>0&&(e+=s),a>0&&(e-=a)):e=0,r.height>n.height?(l>0&&(t+=l),u>0&&(t-=u)):t=0,(e!==this._passiveTransform.x||t!==this._passiveTransform.y)&&this.setFreeDragPosition({y:t,x:e})}_getDragStartDelay(e){const t=this.dragStartDelay;return"number"==typeof t?t:YS(e)?t.touch:t?t.mouse:0}_updateOnScroll(e){const t=this._parentPositions.handleScroll(e);if(t){const n=GA(e);this._boundaryRect&&n!==this._boundaryElement&&n.contains(this._boundaryElement)&&KS(this._boundaryRect,t.top,t.left),this._pickupPositionOnPage.x+=t.left,this._pickupPositionOnPage.y+=t.top,this._dropContainer||(this._activeTransform.x-=t.left,this._activeTransform.y-=t.top,this._applyRootElementTransform(this._activeTransform.x,this._activeTransform.y))}}_getViewportScrollPosition(){return this._parentPositions.positions.get(this._document)?.scrollPosition||this._parentPositions.getViewportScrollPosition()}_getShadowRoot(){return void 0===this._cachedShadowRoot&&(this._cachedShadowRoot=uF(this._rootElement)),this._cachedShadowRoot}_getPreviewInsertionPoint(e,t){const n=this._previewContainer||"global";if("parent"===n)return e;if("global"===n){const r=this._document;return t||r.fullscreenElement||r.webkitFullscreenElement||r.mozFullScreenElement||r.msFullscreenElement||r.body}return Zu(n)}_getPreviewRect(){return(!this._previewRect||!this._previewRect.width&&!this._previewRect.height)&&(this._previewRect=this._preview?this._preview.getBoundingClientRect():this._initialClientRect),this._previewRect}_getTargetHandle(e){return this._handles.find(t=>e.target&&(e.target===t||t.contains(e.target)))}}function BD(i,e){return`translate3d(${Math.round(i)}px, ${Math.round(e)}px, 0)`}function bV(i,e,t){return Math.max(e,Math.min(t,i))}function YS(i){return"t"===i.type[0]}function xV(i,e){const t=i.rootNodes;if(1===t.length&&t[0].nodeType===e.ELEMENT_NODE)return t[0];const n=e.createElement("div");return t.forEach(r=>n.appendChild(r)),n}function wV(i,e){i.style.width=`${e.width}px`,i.style.height=`${e.height}px`,i.style.transform=BD(e.left,e.top)}function ZS(i,e){return Math.max(0,Math.min(e,i))}class Che{constructor(e,t){this._element=e,this._dragDropRegistry=t,this._itemPositions=[],this.orientation="vertical",this._previousSwap={drag:null,delta:0,overlaps:!1}}start(e){this.withItems(e)}sort(e,t,n,r){const s=this._itemPositions,a=this._getItemIndexFromPointerPosition(e,t,n,r);if(-1===a&&s.length>0)return null;const l="horizontal"===this.orientation,u=s.findIndex(se=>se.drag===e),d=s[a],y=d.clientRect,C=u>a?1:-1,O=this._getItemOffsetPx(s[u].clientRect,y,C),Q=this._getSiblingOffsetPx(u,s,C),W=s.slice();return function whe(i,e,t){const n=ZS(e,i.length-1),r=ZS(t,i.length-1);if(n===r)return;const s=i[n],a=r{if(W[ye]===se)return;const Le=se.drag===e,we=Le?O:Q,He=Le?e.getPlaceholderElement():se.drag.getRootElement();se.offset+=we,l?(He.style.transform=ED(`translate3d(${Math.round(se.offset)}px, 0, 0)`,se.initialTransform),KS(se.clientRect,0,we)):(He.style.transform=ED(`translate3d(0, ${Math.round(se.offset)}px, 0)`,se.initialTransform),KS(se.clientRect,we,0))}),this._previousSwap.overlaps=sO(y,t,n),this._previousSwap.drag=d.drag,this._previousSwap.delta=l?r.x:r.y,{previousIndex:u,currentIndex:a}}enter(e,t,n,r){const s=null==r||r<0?this._getItemIndexFromPointerPosition(e,t,n):r,a=this._activeDraggables,l=a.indexOf(e),u=e.getPlaceholderElement();let d=a[s];if(d===e&&(d=a[s+1]),!d&&(null==s||-1===s||s-1&&a.splice(l,1),d&&!this._dragDropRegistry.isDragging(d)){const p=d.getRootElement();p.parentElement.insertBefore(u,p),a.splice(s,0,e)}else Zu(this._element).appendChild(u),a.push(e);u.style.transform="",this._cacheItemPositions()}withItems(e){this._activeDraggables=e.slice(),this._cacheItemPositions()}withSortPredicate(e){this._sortPredicate=e}reset(){this._activeDraggables.forEach(e=>{const t=e.getRootElement();if(t){const n=this._itemPositions.find(r=>r.drag===e)?.initialTransform;t.style.transform=n||""}}),this._itemPositions=[],this._activeDraggables=[],this._previousSwap.drag=null,this._previousSwap.delta=0,this._previousSwap.overlaps=!1}getActiveItemsSnapshot(){return this._activeDraggables}getItemIndex(e){return("horizontal"===this.orientation&&"rtl"===this.direction?this._itemPositions.slice().reverse():this._itemPositions).findIndex(n=>n.drag===e)}updateOnScroll(e,t){this._itemPositions.forEach(({clientRect:n})=>{KS(n,e,t)}),this._itemPositions.forEach(({drag:n})=>{this._dragDropRegistry.isDragging(n)&&n._sortFromLastPointerPosition()})}_cacheItemPositions(){const e="horizontal"===this.orientation;this._itemPositions=this._activeDraggables.map(t=>{const n=t.getVisibleElement();return{drag:t,offset:0,initialTransform:n.style.transform||"",clientRect:rO(n)}}).sort((t,n)=>e?t.clientRect.left-n.clientRect.left:t.clientRect.top-n.clientRect.top)}_getItemOffsetPx(e,t,n){const r="horizontal"===this.orientation;let s=r?t.left-e.left:t.top-e.top;return-1===n&&(s+=r?t.width-e.width:t.height-e.height),s}_getSiblingOffsetPx(e,t,n){const r="horizontal"===this.orientation,s=t[e].clientRect,a=t[e+-1*n];let l=s[r?"width":"height"]*n;if(a){const u=r?"left":"top",d=r?"right":"bottom";-1===n?l-=a.clientRect[u]-s[d]:l+=s[u]-a.clientRect[d]}return l}_shouldEnterAsFirstChild(e,t){if(!this._activeDraggables.length)return!1;const n=this._itemPositions,r="horizontal"===this.orientation;if(n[0].drag!==this._activeDraggables[0]){const a=n[n.length-1].clientRect;return r?e>=a.right:t>=a.bottom}{const a=n[0].clientRect;return r?e<=a.left:t<=a.top}}_getItemIndexFromPointerPosition(e,t,n,r){const s="horizontal"===this.orientation,a=this._itemPositions.findIndex(({drag:l,clientRect:u})=>l!==e&&((!r||l!==this._previousSwap.drag||!this._previousSwap.overlaps||(s?r.x:r.y)!==this._previousSwap.delta)&&(s?t>=Math.floor(u.left)&&t=Math.floor(u.top)&&n!0,this.sortPredicate=()=>!0,this.beforeStarted=new D,this.entered=new D,this.exited=new D,this.dropped=new D,this.sorted=new D,this.receivingStarted=new D,this.receivingStopped=new D,this._isDragging=!1,this._draggables=[],this._siblings=[],this._activeSiblings=new Set,this._viewportScrollSubscription=De.EMPTY,this._verticalScrollDirection=0,this._horizontalScrollDirection=0,this._stopScrollTimers=new D,this._cachedShadowRoot=null,this._startScrollInterval=()=>{this._stopScrolling(),function _he(i=0,e=b2){return i<0&&(i=0),ES(i,i,e)}(0,zz).pipe(ql(this._stopScrollTimers)).subscribe(()=>{const a=this._scrollNode,l=this.autoScrollStep;1===this._verticalScrollDirection?a.scrollBy(0,-l):2===this._verticalScrollDirection&&a.scrollBy(0,l),1===this._horizontalScrollDirection?a.scrollBy(-l,0):2===this._horizontalScrollDirection&&a.scrollBy(l,0)})},this.element=Zu(e),this._document=n,this.withScrollableParents([this.element]),t.registerDropContainer(this),this._parentPositions=new AV(n),this._sortStrategy=new Che(this.element,t),this._sortStrategy.withSortPredicate((a,l)=>this.sortPredicate(a,l,this))}dispose(){this._stopScrolling(),this._stopScrollTimers.complete(),this._viewportScrollSubscription.unsubscribe(),this.beforeStarted.complete(),this.entered.complete(),this.exited.complete(),this.dropped.complete(),this.sorted.complete(),this.receivingStarted.complete(),this.receivingStopped.complete(),this._activeSiblings.clear(),this._scrollNode=null,this._parentPositions.clear(),this._dragDropRegistry.removeDropContainer(this)}isDragging(){return this._isDragging}start(){this._draggingStarted(),this._notifyReceivingSiblings()}enter(e,t,n,r){this._draggingStarted(),null==r&&this.sortingDisabled&&(r=this._draggables.indexOf(e)),this._sortStrategy.enter(e,t,n,r),this._cacheParentPositions(),this._notifyReceivingSiblings(),this.entered.next({item:e,container:this,currentIndex:this.getItemIndex(e)})}exit(e){this._reset(),this.exited.next({item:e,container:this})}drop(e,t,n,r,s,a,l,u={}){this._reset(),this.dropped.next({item:e,currentIndex:t,previousIndex:n,container:this,previousContainer:r,isPointerOverContainer:s,distance:a,dropPoint:l,event:u})}withItems(e){const t=this._draggables;return this._draggables=e,e.forEach(n=>n._withDropContainer(this)),this.isDragging()&&(t.filter(r=>r.isDragging()).every(r=>-1===e.indexOf(r))?this._reset():this._sortStrategy.withItems(this._draggables)),this}withDirection(e){return this._sortStrategy.direction=e,this}connectedTo(e){return this._siblings=e.slice(),this}withOrientation(e){return this._sortStrategy.orientation=e,this}withScrollableParents(e){const t=Zu(this.element);return this._scrollableElements=-1===e.indexOf(t)?[t,...e]:e.slice(),this}getScrollableParents(){return this._scrollableElements}getItemIndex(e){return this._isDragging?this._sortStrategy.getItemIndex(e):this._draggables.indexOf(e)}isReceiving(){return this._activeSiblings.size>0}_sortItem(e,t,n,r){if(this.sortingDisabled||!this._clientRect||!pV(this._clientRect,.05,t,n))return;const s=this._sortStrategy.sort(e,t,n,r);s&&this.sorted.next({previousIndex:s.previousIndex,currentIndex:s.currentIndex,container:this,item:e})}_startScrollingIfNecessary(e,t){if(this.autoScrollDisabled)return;let n,r=0,s=0;if(this._parentPositions.positions.forEach((a,l)=>{l===this._document||!a.clientRect||n||pV(a.clientRect,.05,e,t)&&([r,s]=function She(i,e,t,n){const r=SV(e,n),s=TV(e,t);let a=0,l=0;if(r){const u=i.scrollTop;1===r?u>0&&(a=1):i.scrollHeight-u>i.clientHeight&&(a=2)}if(s){const u=i.scrollLeft;1===s?u>0&&(l=1):i.scrollWidth-u>i.clientWidth&&(l=2)}return[a,l]}(l,a.clientRect,e,t),(r||s)&&(n=l))}),!r&&!s){const{width:a,height:l}=this._viewportRuler.getViewportSize(),u={width:a,height:l,top:0,right:a,bottom:l,left:0};r=SV(u,t),s=TV(u,e),n=window}n&&(r!==this._verticalScrollDirection||s!==this._horizontalScrollDirection||n!==this._scrollNode)&&(this._verticalScrollDirection=r,this._horizontalScrollDirection=s,this._scrollNode=n,(r||s)&&n?this._ngZone.runOutsideAngular(this._startScrollInterval):this._stopScrolling())}_stopScrolling(){this._stopScrollTimers.next()}_draggingStarted(){const e=Zu(this.element).style;this.beforeStarted.next(),this._isDragging=!0,this._initialScrollSnap=e.msScrollSnapType||e.scrollSnapType||"",e.scrollSnapType=e.msScrollSnapType="none",this._sortStrategy.start(this._draggables),this._cacheParentPositions(),this._viewportScrollSubscription.unsubscribe(),this._listenToScrollEvents()}_cacheParentPositions(){const e=Zu(this.element);this._parentPositions.cache(this._scrollableElements),this._clientRect=this._parentPositions.positions.get(e).clientRect}_reset(){this._isDragging=!1;const e=Zu(this.element).style;e.scrollSnapType=e.msScrollSnapType=this._initialScrollSnap,this._siblings.forEach(t=>t._stopReceiving(this)),this._sortStrategy.reset(),this._stopScrolling(),this._viewportScrollSubscription.unsubscribe(),this._parentPositions.clear()}_isOverContainer(e,t){return null!=this._clientRect&&sO(this._clientRect,e,t)}_getSiblingContainerFromPosition(e,t,n){return this._siblings.find(r=>r._canReceive(e,t,n))}_canReceive(e,t,n){if(!this._clientRect||!sO(this._clientRect,t,n)||!this.enterPredicate(e,this))return!1;const r=this._getShadowRoot().elementFromPoint(t,n);if(!r)return!1;const s=Zu(this.element);return r===s||s.contains(r)}_startReceiving(e,t){const n=this._activeSiblings;!n.has(e)&&t.every(r=>this.enterPredicate(r,this)||this._draggables.indexOf(r)>-1)&&(n.add(e),this._cacheParentPositions(),this._listenToScrollEvents(),this.receivingStarted.next({initiator:e,receiver:this,items:t}))}_stopReceiving(e){this._activeSiblings.delete(e),this._viewportScrollSubscription.unsubscribe(),this.receivingStopped.next({initiator:e,receiver:this})}_listenToScrollEvents(){this._viewportScrollSubscription=this._dragDropRegistry.scrolled(this._getShadowRoot()).subscribe(e=>{if(this.isDragging()){const t=this._parentPositions.handleScroll(e);t&&this._sortStrategy.updateOnScroll(t.top,t.left)}else this.isReceiving()&&this._cacheParentPositions()})}_getShadowRoot(){if(!this._cachedShadowRoot){const e=uF(Zu(this.element));this._cachedShadowRoot=e||this._document}return this._cachedShadowRoot}_notifyReceivingSiblings(){const e=this._sortStrategy.getActiveItemsSnapshot().filter(t=>t.isDragging());this._siblings.forEach(t=>t._startReceiving(this,e))}}function SV(i,e){const{top:t,bottom:n,height:r}=i,s=.05*r;return e>=t-s&&e<=t+s?1:e>=n-s&&e<=n+s?2:0}function TV(i,e){const{left:t,right:n,width:r}=i,s=.05*r;return e>=t-s&&e<=t+s?1:e>=n-s&&e<=n+s?2:0}const ID=p0({passive:!1,capture:!0});let The=(()=>{class i{constructor(t,n){this._ngZone=t,this._dropInstances=new Set,this._dragInstances=new Set,this._activeDragInstances=[],this._globalListeners=new Map,this._draggingPredicate=r=>r.isDragging(),this.pointerMove=new D,this.pointerUp=new D,this.scroll=new D,this._preventDefaultWhileDragging=r=>{this._activeDragInstances.length>0&&r.preventDefault()},this._persistentTouchmoveListener=r=>{this._activeDragInstances.length>0&&(this._activeDragInstances.some(this._draggingPredicate)&&r.preventDefault(),this.pointerMove.next(r))},this._document=n}registerDropContainer(t){this._dropInstances.has(t)||this._dropInstances.add(t)}registerDragItem(t){this._dragInstances.add(t),1===this._dragInstances.size&&this._ngZone.runOutsideAngular(()=>{this._document.addEventListener("touchmove",this._persistentTouchmoveListener,ID)})}removeDropContainer(t){this._dropInstances.delete(t)}removeDragItem(t){this._dragInstances.delete(t),this.stopDragging(t),0===this._dragInstances.size&&this._document.removeEventListener("touchmove",this._persistentTouchmoveListener,ID)}startDragging(t,n){if(!(this._activeDragInstances.indexOf(t)>-1)&&(this._activeDragInstances.push(t),1===this._activeDragInstances.length)){const r=n.type.startsWith("touch");this._globalListeners.set(r?"touchend":"mouseup",{handler:s=>this.pointerUp.next(s),options:!0}).set("scroll",{handler:s=>this.scroll.next(s),options:!0}).set("selectstart",{handler:this._preventDefaultWhileDragging,options:ID}),r||this._globalListeners.set("mousemove",{handler:s=>this.pointerMove.next(s),options:ID}),this._ngZone.runOutsideAngular(()=>{this._globalListeners.forEach((s,a)=>{this._document.addEventListener(a,s.handler,s.options)})})}}stopDragging(t){const n=this._activeDragInstances.indexOf(t);n>-1&&(this._activeDragInstances.splice(n,1),0===this._activeDragInstances.length&&this._clearGlobalListeners())}isDragging(t){return this._activeDragInstances.indexOf(t)>-1}scrolled(t){const n=[this.scroll];return t&&t!==this._document&&n.push(new de(r=>this._ngZone.runOutsideAngular(()=>{const a=l=>{this._activeDragInstances.length&&r.next(l)};return t.addEventListener("scroll",a,!0),()=>{t.removeEventListener("scroll",a,!0)}}))),It(...n)}ngOnDestroy(){this._dragInstances.forEach(t=>this.removeDragItem(t)),this._dropInstances.forEach(t=>this.removeDropContainer(t)),this._clearGlobalListeners(),this.pointerMove.complete(),this.pointerUp.complete()}_clearGlobalListeners(){this._globalListeners.forEach((t,n)=>{this._document.removeEventListener(n,t.handler,t.options)}),this._globalListeners.clear()}}return i.\u0275fac=function(t){return new(t||i)(ci(mo),ci(Zo))},i.\u0275prov=Ue({token:i,factory:i.\u0275fac,providedIn:"root"}),i})();const Ehe={dragStartThreshold:5,pointerDirectionChangeThreshold:5};let aO=(()=>{class i{constructor(t,n,r,s){this._document=t,this._ngZone=n,this._viewportRuler=r,this._dragDropRegistry=s}createDrag(t,n=Ehe){return new xhe(t,n,this._document,this._ngZone,this._viewportRuler,this._dragDropRegistry)}createDropList(t){return new Mhe(t,this._dragDropRegistry,this._document,this._ngZone,this._viewportRuler)}}return i.\u0275fac=function(t){return new(t||i)(ci(Zo),ci(mo),ci(Rb),ci(The))},i.\u0275prov=Ue({token:i,factory:i.\u0275fac,providedIn:"root"}),i})();const lO=new cr("CDK_DRAG_PARENT"),EV=new cr("CDK_DRAG_CONFIG"),DV=new cr("CdkDropList"),uO=new cr("CdkDragHandle");let BV=(()=>{class i{get disabled(){return this._disabled}set disabled(t){this._disabled=pa(t),this._stateChanges.next(this)}constructor(t,n){this.element=t,this._stateChanges=new D,this._disabled=!1,this._parentDrag=n}ngOnDestroy(){this._stateChanges.complete()}}return i.\u0275fac=function(t){return new(t||i)(wt(Cs),wt(lO,12))},i.\u0275dir=Oi({type:i,selectors:[["","cdkDragHandle",""]],hostAttrs:[1,"cdk-drag-handle"],inputs:{disabled:["cdkDragHandleDisabled","disabled"]},standalone:!0,features:[Po([{provide:uO,useExisting:i}])]}),i})();const IV=new cr("CdkDragPlaceholder"),PV=new cr("CdkDragPreview");let hO=(()=>{class i{get disabled(){return this._disabled||this.dropContainer&&this.dropContainer.disabled}set disabled(t){this._disabled=pa(t),this._dragRef.disabled=this._disabled}constructor(t,n,r,s,a,l,u,d,p,y,C){this.element=t,this.dropContainer=n,this._ngZone=s,this._viewContainerRef=a,this._dir=u,this._changeDetectorRef=p,this._selfHandle=y,this._parentDrag=C,this._destroyed=new D,this.started=new Ws,this.released=new Ws,this.ended=new Ws,this.entered=new Ws,this.exited=new Ws,this.dropped=new Ws,this.moved=new de(O=>{const Q=this._dragRef.moved.pipe(et(W=>({source:this,pointerPosition:W.pointerPosition,event:W.event,delta:W.delta,distance:W.distance}))).subscribe(O);return()=>{Q.unsubscribe()}}),this._dragRef=d.createDrag(t,{dragStartThreshold:l&&null!=l.dragStartThreshold?l.dragStartThreshold:5,pointerDirectionChangeThreshold:l&&null!=l.pointerDirectionChangeThreshold?l.pointerDirectionChangeThreshold:5,zIndex:l?.zIndex}),this._dragRef.data=this,i._dragInstances.push(this),l&&this._assignDefaults(l),n&&(this._dragRef._withDropContainer(n._dropListRef),n.addItem(this)),this._syncInputs(this._dragRef),this._handleEvents(this._dragRef)}getPlaceholderElement(){return this._dragRef.getPlaceholderElement()}getRootElement(){return this._dragRef.getRootElement()}reset(){this._dragRef.reset()}getFreeDragPosition(){return this._dragRef.getFreeDragPosition()}setFreeDragPosition(t){this._dragRef.setFreeDragPosition(t)}ngAfterViewInit(){this._ngZone.runOutsideAngular(()=>{this._ngZone.onStable.pipe(nu(1),ql(this._destroyed)).subscribe(()=>{this._updateRootElement(),this._setupHandlesListener(),this.freeDragPosition&&this._dragRef.setFreeDragPosition(this.freeDragPosition)})})}ngOnChanges(t){const n=t.rootElementSelector,r=t.freeDragPosition;n&&!n.firstChange&&this._updateRootElement(),r&&!r.firstChange&&this.freeDragPosition&&this._dragRef.setFreeDragPosition(this.freeDragPosition)}ngOnDestroy(){this.dropContainer&&this.dropContainer.removeItem(this);const t=i._dragInstances.indexOf(this);t>-1&&i._dragInstances.splice(t,1),this._ngZone.runOutsideAngular(()=>{this._destroyed.next(),this._destroyed.complete(),this._dragRef.dispose()})}_updateRootElement(){const t=this.element.nativeElement;let n=t;this.rootElementSelector&&(n=void 0!==t.closest?t.closest(this.rootElementSelector):t.parentElement?.closest(this.rootElementSelector)),this._dragRef.withRootElement(n||t)}_getBoundaryElement(){const t=this.boundaryElement;return t?"string"==typeof t?this.element.nativeElement.closest(t):Zu(t):null}_syncInputs(t){t.beforeStarted.subscribe(()=>{if(!t.isDragging()){const n=this._dir,r=this.dragStartDelay,s=this._placeholderTemplate?{template:this._placeholderTemplate.templateRef,context:this._placeholderTemplate.data,viewContainer:this._viewContainerRef}:null,a=this._previewTemplate?{template:this._previewTemplate.templateRef,context:this._previewTemplate.data,matchSize:this._previewTemplate.matchSize,viewContainer:this._viewContainerRef}:null;t.disabled=this.disabled,t.lockAxis=this.lockAxis,t.dragStartDelay="object"==typeof r&&r?r:gc(r),t.constrainPosition=this.constrainPosition,t.previewClass=this.previewClass,t.withBoundaryElement(this._getBoundaryElement()).withPlaceholderTemplate(s).withPreviewTemplate(a).withPreviewContainer(this.previewContainer||"global"),n&&t.withDirection(n.value)}}),t.beforeStarted.pipe(nu(1)).subscribe(()=>{if(this._parentDrag)return void t.withParent(this._parentDrag._dragRef);let n=this.element.nativeElement.parentElement;for(;n;){if(n.classList.contains("cdk-drag")){t.withParent(i._dragInstances.find(r=>r.element.nativeElement===n)?._dragRef||null);break}n=n.parentElement}})}_handleEvents(t){t.started.subscribe(n=>{this.started.emit({source:this,event:n.event}),this._changeDetectorRef.markForCheck()}),t.released.subscribe(n=>{this.released.emit({source:this,event:n.event})}),t.ended.subscribe(n=>{this.ended.emit({source:this,distance:n.distance,dropPoint:n.dropPoint,event:n.event}),this._changeDetectorRef.markForCheck()}),t.entered.subscribe(n=>{this.entered.emit({container:n.container.data,item:this,currentIndex:n.currentIndex})}),t.exited.subscribe(n=>{this.exited.emit({container:n.container.data,item:this})}),t.dropped.subscribe(n=>{this.dropped.emit({previousIndex:n.previousIndex,currentIndex:n.currentIndex,previousContainer:n.previousContainer.data,container:n.container.data,isPointerOverContainer:n.isPointerOverContainer,item:this,distance:n.distance,dropPoint:n.dropPoint,event:n.event})})}_assignDefaults(t){const{lockAxis:n,dragStartDelay:r,constrainPosition:s,previewClass:a,boundaryElement:l,draggingDisabled:u,rootElementSelector:d,previewContainer:p}=t;this.disabled=u??!1,this.dragStartDelay=r||0,n&&(this.lockAxis=n),s&&(this.constrainPosition=s),a&&(this.previewClass=a),l&&(this.boundaryElement=l),d&&(this.rootElementSelector=d),p&&(this.previewContainer=p)}_setupHandlesListener(){this._handles.changes.pipe(op(this._handles),Dc(t=>{const n=t.filter(r=>r._parentDrag===this).map(r=>r.element);this._selfHandle&&this.rootElementSelector&&n.push(this.element),this._dragRef.withHandles(n)}),sp(t=>It(...t.map(n=>n._stateChanges.pipe(op(n))))),ql(this._destroyed)).subscribe(t=>{const n=this._dragRef,r=t.element.nativeElement;t.disabled?n.disableHandle(r):n.enableHandle(r)})}}return i._dragInstances=[],i.\u0275fac=function(t){return new(t||i)(wt(Cs),wt(DV,12),wt(Zo),wt(mo),wt(Mu),wt(EV,8),wt(Ed,8),wt(aO),wt(pl),wt(uO,10),wt(lO,12))},i.\u0275dir=Oi({type:i,selectors:[["","cdkDrag",""]],contentQueries:function(t,n,r){if(1&t&&(Qh(r,PV,5),Qh(r,IV,5),Qh(r,uO,5)),2&t){let s;so(s=oo())&&(n._previewTemplate=s.first),so(s=oo())&&(n._placeholderTemplate=s.first),so(s=oo())&&(n._handles=s)}},hostAttrs:[1,"cdk-drag"],hostVars:4,hostBindings:function(t,n){2&t&&jo("cdk-drag-disabled",n.disabled)("cdk-drag-dragging",n._dragRef.isDragging())},inputs:{data:["cdkDragData","data"],lockAxis:["cdkDragLockAxis","lockAxis"],rootElementSelector:["cdkDragRootElement","rootElementSelector"],boundaryElement:["cdkDragBoundary","boundaryElement"],dragStartDelay:["cdkDragStartDelay","dragStartDelay"],freeDragPosition:["cdkDragFreeDragPosition","freeDragPosition"],disabled:["cdkDragDisabled","disabled"],constrainPosition:["cdkDragConstrainPosition","constrainPosition"],previewClass:["cdkDragPreviewClass","previewClass"],previewContainer:["cdkDragPreviewContainer","previewContainer"]},outputs:{started:"cdkDragStarted",released:"cdkDragReleased",ended:"cdkDragEnded",entered:"cdkDragEntered",exited:"cdkDragExited",dropped:"cdkDragDropped",moved:"cdkDragMoved"},exportAs:["cdkDrag"],standalone:!0,features:[Po([{provide:lO,useExisting:i}]),bc]}),i})(),Ohe=(()=>{class i{}return i.\u0275fac=function(t){return new(t||i)},i.\u0275mod=ia({type:i}),i.\u0275inj=ft({providers:[aO],imports:[LS]}),i})();const Rhe=["overlayCard"],Lhe=["resizeHandleCorner"];function Nhe(i,e){if(1&i&&(Zt(0,"div",10),vl(),Zt(1,"svg"),Pr(2,"use"),un()()),2&i){const t=Mr(2);Nn(2),y_("href","assets/icons/",t.icon,".svg#",t.icon,"")}}const Uhe=function(i){return{"with-body":i}},zhe=function(i){return{expand:i}};function Hhe(i,e){if(1&i){const t=Za();Zt(0,"div",5),qr(1,Nhe,3,2,"div",6),Zt(2,"h5",7),dr(3),un(),Zt(4,"button",8),Fi("click",function(){ks(t);const r=Mr();return ys(r.showBody=!r.showBody)}),vl(),Zt(5,"svg"),Pr(6,"use",9),un()()()}if(2&i){const t=Mr();Cn("ngClass",$d(4,Uhe,t.showBody)),Nn(1),Cn("ngIf",t.icon),Nn(2),ph(t.overlayTitle),Nn(1),Cn("ngClass",$d(6,zhe,t.showBody))}}const Vhe=function(i){return{"transparent-bg":i}};function Ghe(i,e){if(1&i&&(Zt(0,"div",11),uu(1),un()),2&i){const t=Mr();Cn("ngClass",$d(1,Vhe,t.transparentBody))}}function qhe(i,e){if(1&i){const t=Za();Zt(0,"span",12,13),Fi("cdkDragMoved",function(){return ks(t),ys(Mr().onResize())}),un()}2&i&&Cn("hidden",!Mr().showBody)}class W_{constructor(){Wt(this,"overlayTitle",void 0),Wt(this,"active",!1),Wt(this,"icon",void 0),Wt(this,"resizable",!1),Wt(this,"transparentBody",!1),Wt(this,"keepAspectRatioFixed",!1),Wt(this,"showBody",!0),Wt(this,"aspectRatio",window.innerWidth/window.innerHeight),Wt(this,"overlayCard",void 0),Wt(this,"resizeHandleCorner",void 0),Wt(this,"MIN_RES_WIDTH",300),Wt(this,"MIN_RES_HEIGHT",100)}ngAfterViewInit(){if(this.resizable){const e=this.resizeHandleCorner.nativeElement;e.style.bottom="0",e.style.right="0",new ghe.ResizeSensor(this.overlayCard.nativeElement,()=>{this.resetHandlePosition()}),window.addEventListener("resize",()=>{this.resetHandlePosition()})}}onResize(){const t=this.overlayCard.nativeElement,n=this.resizeHandleCorner.nativeElement.getBoundingClientRect(),r=t.getBoundingClientRect(),s=n.left-r.left+n.width,a=n.top-r.top+n.height;this.setHandleTransform(r,n),s>this.MIN_RES_WIDTH&&a>this.MIN_RES_HEIGHT&&(t.style.width=s+"px",t.style.height=this.keepAspectRatioFixed?s/this.aspectRatio+30+"px":a+"px")}resetHandlePosition(){const e=this.resizeHandleCorner.nativeElement;this.setHandleTransform(this.overlayCard.nativeElement.getBoundingClientRect(),e.getBoundingClientRect()),e.style.bottom=null,e.style.right=null}setHandleTransform(e,t){this.resizeHandleCorner.nativeElement.style.transform=`translate3d(${e.width-t.width}px, ${e.height-t.height}px, 0)`}}function Whe(i,e){if(1&i&&(Zt(0,"option",15),dr(1),un()),2&i){const t=e.$implicit;Cn("value",t),Nn(1),Gl(" ",t," ")}}function jhe(i,e){if(1&i){const t=Za();Zt(0,"mat-checkbox",16),Fi("change",function(r){return ks(t),ys(Mr(3).toggleInvisible(r.checked))}),dr(1," Hide Invisible Objects "),un()}}function $he(i,e){if(1&i){const t=Za();Zt(0,"div",7)(1,"div",8)(2,"span"),dr(3,"Choose a collection: "),un(),Zt(4,"div",9)(5,"label",10),dr(6,"Event"),un(),Zt(7,"select",11),Fi("change",function(r){return ks(t),ys(Mr(2).changeCollection(r.target.value))}),Zt(8,"option",12),dr(9,"Choose Collection"),un(),qr(10,Whe,2,2,"option",13),un()(),qr(11,jhe,2,0,"mat-checkbox",14),un()()}if(2&i){const t=Mr(2);Nn(10),Cn("ngForOf",t.collections),Nn(1),Cn("ngIf",t.showingCollection)}}function Xhe(i,e){if(1&i){const t=Za();Zt(0,"th")(1,"div",20)(2,"div"),dr(3),un(),Zt(4,"div",21)(5,"button",22),Fi("click",function(){const s=ks(t).$implicit;return ys(Mr(3).sort(s,"dec"))}),vl(),Zt(6,"svg"),Pr(7,"use",23),un()(),cd(),Zt(8,"button",24),Fi("click",function(){const s=ks(t).$implicit;return ys(Mr(3).sort(s,"asc"))}),vl(),Zt(9,"svg"),Pr(10,"use",23),un()()()()()}if(2&i){const t=e.$implicit,n=Mr(3);Nn(3),Gl(" ",n.getPrettySymbol(t)," ")}}function Khe(i,e){if(1&i){const t=Za();Zt(0,"div",33)(1,"button",34),Fi("click",function(){ks(t);const r=Mr().$implicit;return ys(Mr(3).lookAtObject(r.uuid))}),vl(),Zt(2,"svg"),Pr(3,"use",35),un()(),cd(),Zt(4,"button",36),Fi("click",function(){ks(t);const r=Mr().$implicit;return ys(Mr(3).highlightObject(r.uuid))}),vl(),Zt(5,"svg"),Pr(6,"use",37),un()()()}}function Yhe(i,e){if(1&i&&(vl(),cd(),Zt(0,"td"),dr(1),un()),2&i){const t=e.$implicit,n=Mr().$implicit;Nn(1),Gl(" ",n[t]," ")}}Wt(W_,"\u0275fac",function(e){return new(e||W_)}),Wt(W_,"\u0275cmp",Fr({type:W_,selectors:[["app-overlay"]],viewQuery:function(e,t){if(1&e&&(la(Rhe,5),la(Lhe,5)),2&e){let n;so(n=oo())&&(t.overlayCard=n.first),so(n=oo())&&(t.resizeHandleCorner=n.first)}},inputs:{overlayTitle:"overlayTitle",active:"active",icon:"icon",resizable:"resizable",transparentBody:"transparentBody",keepAspectRatioFixed:"keepAspectRatioFixed"},ngContentSelectors:["*"],decls:5,vars:4,consts:[["cdkDrag","","cdkDragBoundary","body",1,"overlay-card","card",3,"hidden"],["overlayCard",""],["class","card-header d-flex justify-content-between","cdkDragHandle","",3,"ngClass",4,"ngIf"],["class","overlay-card-content",3,"ngClass",4,"ngIf"],["class","resize-handle corner","cdkDrag","",3,"hidden","cdkDragMoved",4,"ngIf"],["cdkDragHandle","",1,"card-header","d-flex","justify-content-between",3,"ngClass"],["class","align-self-center card-icon",4,"ngIf"],[1,"align-self-center","m-0","px-2"],["matTooltip","Expand / Collapse","matTooltipPosition","right",1,"align-self-center","card-icon","btn-blank","expandCollapse",3,"ngClass","click"],["href","assets/icons/expand.svg#expand"],[1,"align-self-center","card-icon"],[1,"overlay-card-content",3,"ngClass"],["cdkDrag","",1,"resize-handle","corner",3,"hidden","cdkDragMoved"],["resizeHandleCorner",""]],template:function(e,t){1&e&&(fh(),Zt(0,"div",0,1),qr(2,Hhe,7,8,"div",2),qr(3,Ghe,2,3,"div",3),qr(4,qhe,2,1,"span",4),un()),2&e&&(Cn("hidden",!t.active),Nn(2),Cn("ngIf",t.overlayTitle),Nn(1),Cn("ngIf",t.showBody),Nn(1),Cn("ngIf",t.resizable))},dependencies:[FA,Tu,hO,BV,Nb],styles:[".overlay-card.card{color:var(--phoenix-text-color);background:none;max-width:100vw;font-size:12px;min-width:300px;height:100%;max-height:70vh;box-shadow:none;border:none;position:relative;z-index:200}.overlay-card.card .card-header{width:12rem;background:var(--phoenix-background-color-secondary);box-shadow:var(--phoenix-box-shadow);padding:.4rem .8rem;border-radius:10px;border:none;cursor:move;text-align:center;transition:all .2s}.overlay-card.card .card-header.with-body{border-bottom-left-radius:0;border-bottom-right-radius:0}.overlay-card.card .card-header .card-icon{display:flex;height:.7rem;width:.7rem}.overlay-card.card .card-header h5{font-size:.9rem}.overlay-card.card .card-header .expandCollapse{cursor:pointer;transition:all .2s}.overlay-card.card .card-header .expandCollapse.expand{transform:scaleY(-1)}.overlay-card.card .card-header .expandCollapse svg{width:100%;height:100%}.overlay-card.card .overlay-card-content{background:var(--phoenix-background-color-secondary);box-shadow:var(--phoenix-box-shadow);border-radius:0 10px 10px;overflow:auto;height:100%}.overlay-card.card .overlay-card-content.transparent-bg{background:none}.overlay-card.card .list-group{color:var(--phoenix-text-color-secondary);background:var(--phoenix-background-color-secondary);max-height:40vh;overflow:auto}.overlay-card.card .list-group .list-group-item{background-color:var(--phoenix-background-color-secondary);border-color:var(--phoenix-border)}.overlay-card.card .resize-handle{width:1rem;height:1rem;cursor:nwse-resize;position:absolute}.overlay-card.card .resize-handle.corner{border-right:.2rem solid var(--phoenix-text-color);border-bottom:.2rem solid var(--phoenix-text-color)}\n"],encapsulation:2}));const Zhe=function(i,e,t){return{"active-object":i,"is-cut":e,"d-none":t}};function Jhe(i,e){if(1&i){const t=Za();Zt(0,"tr",25)(1,"td"),dr(2),un(),Zt(3,"td"),qr(4,Khe,7,0,"div",26),un(),Zt(5,"td")(6,"div",27)(7,"div",28),Pr(8,"input",29),un(),Zt(9,"div",30)(10,"button",31),Fi("click",function(){const r=ks(t),s=r.index,a=r.$implicit;return ys(Mr(3).addLabel(s,a.uuid))}),vl(),Zt(11,"svg"),Pr(12,"use",32),un()()()()(),qr(13,Yhe,2,1,"td",18),un()}if(2&i){const t=e.$implicit,n=e.index,r=Mr(3);Cn("ngClass",RT(6,Zhe,r.activeObject&&r.activeObject.value===t.uuid,t.isCut,t.isCut&&r.hideInvisible)),Ea("id",t.uuid),Nn(2),Gl("#",n,""),Nn(2),Cn("ngIf",t.uuid),Nn(4),Cn("id","label"+n),Nn(5),Cn("ngForOf",r.collectionColumns)}}function ede(i,e){if(1&i&&(Zt(0,"table",17)(1,"thead")(2,"tr")(3,"th"),dr(4,"No."),un(),Zt(5,"th"),dr(6,"Selection"),un(),Zt(7,"th"),dr(8,"Label"),un(),qr(9,Xhe,11,1,"th",18),un()(),Zt(10,"tbody"),qr(11,Jhe,14,10,"tr",19),un()()),2&i){const t=Mr(2);Nn(9),Cn("ngForOf",t.collectionColumns),Nn(2),Cn("ngForOf",t.showingCollection)}}function tde(i,e){1&i&&(Zt(0,"p",38),dr(1," Load event data to be able to display information about the collections here. "),un())}function nde(i,e){if(1&i&&(Zt(0,"div",2),qr(1,$he,12,2,"div",3),Zt(2,"div",4),qr(3,ede,12,2,"table",5),qr(4,tde,2,0,"p",6),un()()),2&i){const t=Mr();Nn(1),Cn("ngIf",null!=t.collections),Nn(2),Cn("ngIf",t.showingCollection),Nn(1),Cn("ngIf",!t.collections)}}class B2{constructor(e,t){Wt(this,"elementRef",void 0),Wt(this,"eventDisplay",void 0),Wt(this,"showObjectsInfo",void 0),Wt(this,"hideInvisible",void 0),Wt(this,"collections",void 0),Wt(this,"selectedCollection",void 0),Wt(this,"showingCollection",void 0),Wt(this,"collectionColumns",void 0),Wt(this,"getPrettySymbol",_y.getPrettySymbol),Wt(this,"activeObject",void 0),this.elementRef=e,this.eventDisplay=t}ngOnInit(){this.eventDisplay.listenToDisplayedEventChange(e=>this.collections=this.eventDisplay.getCollections()),this.activeObject=this.eventDisplay.getActiveObjectId(),this.activeObject.onUpdate(e=>{document.getElementById(e)&&document.getElementById(e).scrollIntoView(!1)})}changeCollection(e){const t=this.getEventDataGroup();this.selectedCollection=e,this.showingCollection=this.eventDisplay.getCollection(e).map(n=>({...n,isCut:!t.getObjectByProperty("uuid",n.uuid)?.visible})),this.collectionColumns=Object.keys(this.showingCollection[0]).filter(n=>!["uuid","hits","isCut"].includes(n))}sort(e,t){this.showingCollection.sort("asc"===t?(n,r)=>n[e]n[e]>r[e]?-1:1)}lookAtObject(e){e&&(this.activeObject.update(e),this.eventDisplay.lookAtObject(e))}highlightObject(e){e&&(this.activeObject.update(e),this.eventDisplay.highlightObject(e))}toggleInvisible(e){this.hideInvisible=e}addLabel(e,t){const n=this.elementRef.nativeElement.querySelector(`#label${e}`).value;this.selectedCollection&&this.eventDisplay.addLabelToObject(n,this.selectedCollection,e,t)}getEventDataGroup(){return this.eventDisplay.getThreeManager().getSceneManager().getScene().getObjectByName(qa.EVENT_DATA_ID)}}Wt(B2,"\u0275fac",function(e){return new(e||B2)(wt(Cs),wt(Qa))}),Wt(B2,"\u0275cmp",Fr({type:B2,selectors:[["app-collections-info-overlay"]],inputs:{showObjectsInfo:"showObjectsInfo"},decls:2,vars:3,consts:[["overlayTitle","Collections Info","icon","info",3,"resizable","active"],["class","collectionsInfo m-2",4,"ngIf"],[1,"collectionsInfo","m-2"],["class","collectionSelector mb-2 d-flex align-items-center",4,"ngIf"],[1,"boxBody","table-responsive"],["id","collectionTable","class","table table-borderless table-sm",4,"ngIf"],["class","emptyBox",4,"ngIf"],[1,"collectionSelector","mb-2","d-flex","align-items-center"],[1,"d-flex","align-items-center"],[1,"eventSelector"],["for","event"],["id","collection","name","collection",3,"change"],["value","","selected","","disabled","","hidden",""],[3,"value",4,"ngFor","ngForOf"],[3,"change",4,"ngIf"],[3,"value"],[3,"change"],["id","collectionTable",1,"table","table-borderless","table-sm"],[4,"ngFor","ngForOf"],[3,"ngClass",4,"ngFor","ngForOf"],[1,"head-wrapper"],[1,"sort-options"],[1,"icon-wrapper","icon-button","btn-blank","up",3,"click"],["href","assets/icons/expand.svg#expand"],[1,"icon-wrapper","icon-button","btn-blank",3,"click"],[3,"ngClass"],["class","row justify-content-center icon-wrapper",4,"ngIf"],[1,"row","m-0","add-label"],[1,"col-10","p-0"],["type","text",1,"form-control","form-control-sm",3,"id"],[1,"col-2","p-0","pl-2","text-center","icon-wrapper"],["matTooltip","Add, update or remove object label",1,"object-select","btn-blank",3,"click"],["href","assets/icons/update.svg#update"],[1,"row","justify-content-center","icon-wrapper"],["matTooltip","Move camera to object",1,"object-select","btn-blank",3,"click"],["href","assets/icons/views.svg#views"],["matTooltip","Highlight object",1,"object-select","btn-blank",3,"click"],["href","assets/icons/cursor.svg#cursor"],[1,"emptyBox"]],template:function(e,t){1&e&&(Zt(0,"app-overlay",0),qr(1,nde,5,3,"div",1),un()),2&e&&(Cn("resizable",!0)("active",t.showObjectsInfo),Nn(1),Cn("ngIf",t.showObjectsInfo))},dependencies:[FA,Sf,Tu,Nb,$S,XS,E2,W_],styles:[".collectionsInfo[_ngcontent-%COMP%]{height:95%}.collectionsInfo[_ngcontent-%COMP%] .collectionSelector[_ngcontent-%COMP%]{height:15%;min-height:2rem}.collectionsInfo[_ngcontent-%COMP%] .collectionSelector[_ngcontent-%COMP%] span[_ngcontent-%COMP%]{color:var(--phoenix-text-color-secondary);margin-right:1rem}.collectionsInfo[_ngcontent-%COMP%] .collectionSelector[_ngcontent-%COMP%] mat-checkbox[_ngcontent-%COMP%]{margin-left:1rem}.boxBody[_ngcontent-%COMP%]{height:85%;overflow:scroll}.boxBody[_ngcontent-%COMP%] p.emptyBox[_ngcontent-%COMP%]{max-width:21em}.boxBody[_ngcontent-%COMP%] .add-label[_ngcontent-%COMP%]{min-width:8rem}.boxBody[_ngcontent-%COMP%] .add-label[_ngcontent-%COMP%] input[_ngcontent-%COMP%]{padding:.1rem .3rem;font-size:.75rem}#collectionTable[_ngcontent-%COMP%]{position:relative;color:var(--phoenix-text-color-secondary)}#collectionTable[_ngcontent-%COMP%] thead[_ngcontent-%COMP%] tr[_ngcontent-%COMP%] th[_ngcontent-%COMP%]{position:sticky;top:0;z-index:100;background:var(--phoenix-background-color-secondary)}#collectionTable[_ngcontent-%COMP%] thead[_ngcontent-%COMP%] tr[_ngcontent-%COMP%] th[_ngcontent-%COMP%] .head-wrapper[_ngcontent-%COMP%]{display:flex;align-items:center}#collectionTable[_ngcontent-%COMP%] thead[_ngcontent-%COMP%] tr[_ngcontent-%COMP%] th[_ngcontent-%COMP%] .head-wrapper[_ngcontent-%COMP%] .sort-options[_ngcontent-%COMP%]{display:flex;flex-direction:row}#collectionTable[_ngcontent-%COMP%] thead[_ngcontent-%COMP%] tr[_ngcontent-%COMP%] th[_ngcontent-%COMP%] .head-wrapper[_ngcontent-%COMP%] .sort-options[_ngcontent-%COMP%] .icon-wrapper[_ngcontent-%COMP%]{display:flex;width:1rem;height:1rem;padding:.2rem}#collectionTable[_ngcontent-%COMP%] thead[_ngcontent-%COMP%] tr[_ngcontent-%COMP%] th[_ngcontent-%COMP%] .head-wrapper[_ngcontent-%COMP%] .sort-options[_ngcontent-%COMP%] .icon-wrapper.up[_ngcontent-%COMP%]{transform:rotate(180deg)}#collectionTable[_ngcontent-%COMP%] thead[_ngcontent-%COMP%] tr[_ngcontent-%COMP%] th[_ngcontent-%COMP%] .head-wrapper[_ngcontent-%COMP%] .sort-options[_ngcontent-%COMP%] .icon-wrapper[_ngcontent-%COMP%] svg[_ngcontent-%COMP%]{width:100%;height:100%}#collectionTable[_ngcontent-%COMP%] tr[_ngcontent-%COMP%] *[_ngcontent-%COMP%]{padding-right:1.2rem}#collectionTable[_ngcontent-%COMP%] tr[_ngcontent-%COMP%] *[_ngcontent-%COMP%]:last-child{padding-right:0}#collectionTable[_ngcontent-%COMP%] tr.is-cut[_ngcontent-%COMP%]{opacity:.5}#collectionTable[_ngcontent-%COMP%] tr.active-object[_ngcontent-%COMP%]{color:var(--phoenix-background-color);background:var(--phoenix-text-color);box-shadow:0 0 15px var(--phoenix-text-color)}#collectionTable[_ngcontent-%COMP%] tr.active-object[_ngcontent-%COMP%] div.icon-wrapper[_ngcontent-%COMP%]{--phoenix-options-icon-path: var(--phoenix-background-color);--phoenix-options-icon-bg: var(--phoenix-text-color-hover)}#collectionTable[_ngcontent-%COMP%] tr.active-object[_ngcontent-%COMP%] .add-label[_ngcontent-%COMP%] input[_ngcontent-%COMP%]{--phoenix-text-color: var(--phoenix-background-color);--phoenix-background-color-tertiary: var( --phoenix-text-color-secondary );--phoenix-border: var(--phoenix-background-color)}#collectionTable[_ngcontent-%COMP%] td[_ngcontent-%COMP%] .object-select[_ngcontent-%COMP%]{position:relative;width:1.6rem;height:1.6rem;margin-right:.4em;text-align:center;background-color:var(--phoenix-options-icon-bg);border-radius:10px;cursor:pointer}#collectionTable[_ngcontent-%COMP%] td[_ngcontent-%COMP%] .object-select[_ngcontent-%COMP%]:last-child{margin-right:0}#collectionTable[_ngcontent-%COMP%] td[_ngcontent-%COMP%] .object-select[_ngcontent-%COMP%]:hover{border:1px solid var(--phoenix-options-icon-path)}#collectionTable[_ngcontent-%COMP%] td[_ngcontent-%COMP%] .object-select[_ngcontent-%COMP%] svg[_ngcontent-%COMP%]{position:absolute;top:0;left:0;padding:.4rem;width:100%;height:100%;vertical-align:top}.eventSelector[_ngcontent-%COMP%]{display:flex}.eventSelector[_ngcontent-%COMP%] label[_ngcontent-%COMP%]{display:none;color:var(--phoenix-text-color-secondary)}.eventSelector[_ngcontent-%COMP%] select[_ngcontent-%COMP%]{width:9rem;padding:5px 10px;font-size:12px;border:1px solid rgba(88,88,88,.08);box-shadow:var(--phoenix-icon-shadow);background-color:var(--phoenix-background-color-tertiary);color:var(--phoenix-text-color-secondary)}"]}));class Gb{constructor(e){Wt(this,"overlay",void 0),Wt(this,"showObjectsInfo",!1),Wt(this,"overlayWindow",void 0),this.overlay=e}ngOnInit(){const e=this.overlay.create(),t=new Ty(B2);this.overlayWindow=e.attach(t),this.overlayWindow.instance.showObjectsInfo=this.showObjectsInfo}ngOnDestroy(){this.overlayWindow.destroy()}toggleOverlay(){this.showObjectsInfo=!this.showObjectsInfo,this.overlayWindow.instance.showObjectsInfo=this.showObjectsInfo}}function ide(i,e){}Wt(Gb,"\u0275fac",function(e){return new(e||Gb)(wt(ap))}),Wt(Gb,"\u0275cmp",Fr({type:Gb,selectors:[["app-collections-info"]],decls:1,vars:1,consts:[["tooltip","Event data collections info","icon","info",3,"active","click"]],template:function(e,t){1&e&&(Zt(0,"app-menu-toggle",0),Fi("click",function(){return t.toggleOverlay()}),un()),2&e&&Cn("active",t.showObjectsInfo)},dependencies:[Ql]}));class PD{constructor(){this.role="dialog",this.panelClass="",this.hasBackdrop=!0,this.backdropClass="",this.disableClose=!1,this.width="",this.height="",this.data=null,this.ariaDescribedBy=null,this.ariaLabelledBy=null,this.ariaLabel=null,this.ariaModal=!0,this.autoFocus="first-tabbable",this.restoreFocus=!0,this.closeOnNavigation=!0,this.closeOnDestroy=!0}}let kV=(()=>{class i extends TF{constructor(t,n,r,s,a,l,u,d){super(),this._elementRef=t,this._focusTrapFactory=n,this._config=s,this._interactivityChecker=a,this._ngZone=l,this._overlayRef=u,this._focusMonitor=d,this._elementFocusedBeforeDialogWasOpened=null,this._closeInteractionType=null,this.attachDomPortal=p=>{this._portalOutlet.hasAttached();const y=this._portalOutlet.attachDomPortal(p);return this._contentAttached(),y},this._ariaLabelledBy=this._config.ariaLabelledBy||null,this._document=r}_contentAttached(){this._initializeFocusTrap(),this._handleBackdropClicks(),this._captureInitialFocus()}_captureInitialFocus(){this._trapFocus()}ngOnDestroy(){this._restoreFocus()}attachComponentPortal(t){this._portalOutlet.hasAttached();const n=this._portalOutlet.attachComponentPortal(t);return this._contentAttached(),n}attachTemplatePortal(t){this._portalOutlet.hasAttached();const n=this._portalOutlet.attachTemplatePortal(t);return this._contentAttached(),n}_recaptureFocus(){this._containsFocus()||this._trapFocus()}_forceFocus(t,n){this._interactivityChecker.isFocusable(t)||(t.tabIndex=-1,this._ngZone.runOutsideAngular(()=>{const r=()=>{t.removeEventListener("blur",r),t.removeEventListener("mousedown",r),t.removeAttribute("tabindex")};t.addEventListener("blur",r),t.addEventListener("mousedown",r)})),t.focus(n)}_focusByCssSelector(t,n){let r=this._elementRef.nativeElement.querySelector(t);r&&this._forceFocus(r,n)}_trapFocus(){const t=this._elementRef.nativeElement;switch(this._config.autoFocus){case!1:case"dialog":this._containsFocus()||t.focus();break;case!0:case"first-tabbable":this._focusTrap.focusInitialElementWhenReady().then(n=>{n||this._focusDialogContainer()});break;case"first-heading":this._focusByCssSelector('h1, h2, h3, h4, h5, h6, [role="heading"]');break;default:this._focusByCssSelector(this._config.autoFocus)}}_restoreFocus(){const t=this._config.restoreFocus;let n=null;if("string"==typeof t?n=this._document.querySelector(t):"boolean"==typeof t?n=t?this._elementFocusedBeforeDialogWasOpened:null:t&&(n=t),this._config.restoreFocus&&n&&"function"==typeof n.focus){const r=hF(),s=this._elementRef.nativeElement;(!r||r===this._document.body||r===s||s.contains(r))&&(this._focusMonitor?(this._focusMonitor.focusVia(n,this._closeInteractionType),this._closeInteractionType=null):n.focus())}this._focusTrap&&this._focusTrap.destroy()}_focusDialogContainer(){this._elementRef.nativeElement.focus&&this._elementRef.nativeElement.focus()}_containsFocus(){const t=this._elementRef.nativeElement,n=hF();return t===n||t.contains(n)}_initializeFocusTrap(){this._focusTrap=this._focusTrapFactory.create(this._elementRef.nativeElement),this._document&&(this._elementFocusedBeforeDialogWasOpened=hF())}_handleBackdropClicks(){this._overlayRef.backdropClick().subscribe(()=>{this._config.disableClose&&this._recaptureFocus()})}}return i.\u0275fac=function(t){return new(t||i)(wt(Cs),wt(bF),wt(Zo,8),wt(PD),wt(cD),wt(mo),wt(NS),wt(A0))},i.\u0275cmp=Fr({type:i,selectors:[["cdk-dialog-container"]],viewQuery:function(t,n){if(1&t&&la(M2,7),2&t){let r;so(r=oo())&&(n._portalOutlet=r.first)}},hostAttrs:["tabindex","-1",1,"cdk-dialog-container"],hostVars:6,hostBindings:function(t,n){2&t&&Ea("id",n._config.id||null)("role",n._config.role)("aria-modal",n._config.ariaModal)("aria-labelledby",n._config.ariaLabel?null:n._ariaLabelledBy)("aria-label",n._config.ariaLabel)("aria-describedby",n._config.ariaDescribedBy||null)},features:[As],decls:1,vars:0,consts:[["cdkPortalOutlet",""]],template:function(t,n){1&t&&qr(0,ide,0,0,"ng-template",0)},dependencies:[M2],styles:[".cdk-dialog-container{display:block;width:100%;height:100%;min-height:inherit;max-height:inherit}"],encapsulation:2}),i})();class dO{constructor(e,t){this.overlayRef=e,this.config=t,this.closed=new D,this.disableClose=t.disableClose,this.backdropClick=e.backdropClick(),this.keydownEvents=e.keydownEvents(),this.outsidePointerEvents=e.outsidePointerEvents(),this.id=t.id,this.keydownEvents.subscribe(n=>{27===n.keyCode&&!this.disableClose&&!v2(n)&&(n.preventDefault(),this.close(void 0,{focusOrigin:"keyboard"}))}),this.backdropClick.subscribe(()=>{this.disableClose||this.close(void 0,{focusOrigin:"mouse"})})}close(e,t){if(this.containerInstance){const n=this.closed;this.containerInstance._closeInteractionType=t?.focusOrigin||"program",this.overlayRef.dispose(),n.next(e),n.complete(),this.componentInstance=this.containerInstance=null}}updatePosition(){return this.overlayRef.updatePosition(),this}updateSize(e="",t=""){return this.overlayRef.updateSize({width:e,height:t}),this}addPanelClass(e){return this.overlayRef.addPanelClass(e),this}removePanelClass(e){return this.overlayRef.removePanelClass(e),this}}const FV=new cr("DialogScrollStrategy"),rde=new cr("DialogData"),sde=new cr("DefaultDialogConfig"),ade={provide:FV,deps:[ap],useFactory:function ode(i){return()=>i.scrollStrategies.block()}};let lde=0,OV=(()=>{class i{get openDialogs(){return this._parentDialog?this._parentDialog.openDialogs:this._openDialogsAtThisLevel}get afterOpened(){return this._parentDialog?this._parentDialog.afterOpened:this._afterOpenedAtThisLevel}constructor(t,n,r,s,a,l){this._overlay=t,this._injector=n,this._defaultOptions=r,this._parentDialog=s,this._overlayContainer=a,this._openDialogsAtThisLevel=[],this._afterAllClosedAtThisLevel=new D,this._afterOpenedAtThisLevel=new D,this._ariaHiddenElements=new Map,this.afterAllClosed=fE(()=>this.openDialogs.length?this._getAfterAllClosed():this._getAfterAllClosed().pipe(op(void 0))),this._scrollStrategy=l}open(t,n){(n={...this._defaultOptions||new PD,...n}).id=n.id||"cdk-dialog-"+lde++,n.id&&this.getDialogById(n.id);const s=this._getOverlayConfig(n),a=this._overlay.create(s),l=new dO(a,n),u=this._attachContainer(a,l,n);return l.containerInstance=u,this._attachDialogContent(t,l,u,n),this.openDialogs.length||this._hideNonDialogContentFromAssistiveTechnology(),this.openDialogs.push(l),l.closed.subscribe(()=>this._removeOpenDialog(l,!0)),this.afterOpened.next(l),l}closeAll(){fO(this.openDialogs,t=>t.close())}getDialogById(t){return this.openDialogs.find(n=>n.id===t)}ngOnDestroy(){fO(this._openDialogsAtThisLevel,t=>{!1===t.config.closeOnDestroy&&this._removeOpenDialog(t,!1)}),fO(this._openDialogsAtThisLevel,t=>t.close()),this._afterAllClosedAtThisLevel.complete(),this._afterOpenedAtThisLevel.complete(),this._openDialogsAtThisLevel=[]}_getOverlayConfig(t){const n=new IF({positionStrategy:t.positionStrategy||this._overlay.position().global().centerHorizontally().centerVertically(),scrollStrategy:t.scrollStrategy||this._scrollStrategy(),panelClass:t.panelClass,hasBackdrop:t.hasBackdrop,direction:t.direction,minWidth:t.minWidth,minHeight:t.minHeight,maxWidth:t.maxWidth,maxHeight:t.maxHeight,width:t.width,height:t.height,disposeOnNavigation:t.closeOnNavigation});return t.backdropClass&&(n.backdropClass=t.backdropClass),n}_attachContainer(t,n,r){const s=r.injector||r.viewContainerRef?.injector,a=[{provide:PD,useValue:r},{provide:dO,useValue:n},{provide:NS,useValue:t}];let l;r.container?"function"==typeof r.container?l=r.container:(l=r.container.type,a.push(...r.container.providers(r))):l=kV;const u=new Ty(l,r.viewContainerRef,zc.create({parent:s||this._injector,providers:a}),r.componentFactoryResolver);return t.attach(u).instance}_attachDialogContent(t,n,r,s){if(t instanceof gh){const a=this._createInjector(s,n,r,void 0);let l={$implicit:s.data,dialogRef:n};s.templateContext&&(l={...l,..."function"==typeof s.templateContext?s.templateContext():s.templateContext}),r.attachTemplatePortal(new PS(t,null,l,a))}else{const a=this._createInjector(s,n,r,this._injector),l=r.attachComponentPortal(new Ty(t,s.viewContainerRef,a,s.componentFactoryResolver));n.componentInstance=l.instance}}_createInjector(t,n,r,s){const a=t.injector||t.viewContainerRef?.injector,l=[{provide:rde,useValue:t.data},{provide:dO,useValue:n}];return t.providers&&("function"==typeof t.providers?l.push(...t.providers(n,t,r)):l.push(...t.providers)),t.direction&&(!a||!a.get(Ed,null,{optional:!0}))&&l.push({provide:Ed,useValue:{value:t.direction,change:no()}}),zc.create({parent:a||s,providers:l})}_removeOpenDialog(t,n){const r=this.openDialogs.indexOf(t);r>-1&&(this.openDialogs.splice(r,1),this.openDialogs.length||(this._ariaHiddenElements.forEach((s,a)=>{s?a.setAttribute("aria-hidden",s):a.removeAttribute("aria-hidden")}),this._ariaHiddenElements.clear(),n&&this._getAfterAllClosed().next()))}_hideNonDialogContentFromAssistiveTechnology(){const t=this._overlayContainer.getContainerElement();if(t.parentElement){const n=t.parentElement.children;for(let r=n.length-1;r>-1;r--){const s=n[r];s!==t&&"SCRIPT"!==s.nodeName&&"STYLE"!==s.nodeName&&!s.hasAttribute("aria-live")&&(this._ariaHiddenElements.set(s,s.getAttribute("aria-hidden")),s.setAttribute("aria-hidden","true"))}}}_getAfterAllClosed(){const t=this._parentDialog;return t?t._getAfterAllClosed():this._afterAllClosedAtThisLevel}}return i.\u0275fac=function(t){return new(t||i)(ci(ap),ci(zc),ci(sde,8),ci(i,12),ci(mD),ci(FV))},i.\u0275prov=Ue({token:i,factory:i.\u0275fac}),i})();function fO(i,e){let t=i.length;for(;t--;)e(i[t])}let cde=(()=>{class i{}return i.\u0275fac=function(t){return new(t||i)},i.\u0275mod=ia({type:i}),i.\u0275inj=ft({providers:[OV,ade],imports:[US,kS,wF,kS]}),i})();function ude(i,e){}class kD{constructor(){this.role="dialog",this.panelClass="",this.hasBackdrop=!0,this.backdropClass="",this.disableClose=!1,this.width="",this.height="",this.maxWidth="80vw",this.data=null,this.ariaDescribedBy=null,this.ariaLabelledBy=null,this.ariaLabel=null,this.ariaModal=!0,this.autoFocus="first-tabbable",this.restoreFocus=!0,this.delayFocusTrap=!0,this.closeOnNavigation=!0}}const pO="mdc-dialog--open",RV="mdc-dialog--opening",LV="mdc-dialog--closing";let fde=(()=>{class i extends kV{constructor(t,n,r,s,a,l,u,d){super(t,n,r,s,a,l,u,d),this._animationStateChanged=new Ws}_captureInitialFocus(){this._config.delayFocusTrap||this._trapFocus()}_openAnimationDone(t){this._config.delayFocusTrap&&this._trapFocus(),this._animationStateChanged.next({state:"opened",totalTime:t})}}return i.\u0275fac=function(t){return new(t||i)(wt(Cs),wt(bF),wt(Zo,8),wt(kD),wt(cD),wt(mo),wt(NS),wt(A0))},i.\u0275cmp=Fr({type:i,selectors:[["ng-component"]],features:[As],decls:0,vars:0,template:function(t,n){},encapsulation:2}),i})();const NV="--mat-dialog-transition-duration";function UV(i){return null==i?null:"number"==typeof i?i:i.endsWith("ms")?gc(i.substring(0,i.length-2)):i.endsWith("s")?1e3*gc(i.substring(0,i.length-1)):"0"===i?0:null}let pde=(()=>{class i extends fde{constructor(t,n,r,s,a,l,u,d,p){super(t,n,r,s,a,l,u,p),this._animationMode=d,this._animationsEnabled="NoopAnimations"!==this._animationMode,this._hostElement=this._elementRef.nativeElement,this._openAnimationDuration=this._animationsEnabled?UV(this._config.enterAnimationDuration)??150:0,this._closeAnimationDuration=this._animationsEnabled?UV(this._config.exitAnimationDuration)??75:0,this._animationTimer=null,this._finishDialogOpen=()=>{this._clearAnimationClasses(),this._openAnimationDone(this._openAnimationDuration)},this._finishDialogClose=()=>{this._clearAnimationClasses(),this._animationStateChanged.emit({state:"closed",totalTime:this._closeAnimationDuration})}}_contentAttached(){super._contentAttached(),this._startOpenAnimation()}ngOnDestroy(){super.ngOnDestroy(),null!==this._animationTimer&&clearTimeout(this._animationTimer)}_startOpenAnimation(){this._animationStateChanged.emit({state:"opening",totalTime:this._openAnimationDuration}),this._animationsEnabled?(this._hostElement.style.setProperty(NV,`${this._openAnimationDuration}ms`),this._hostElement.classList.add(RV),this._hostElement.classList.add(pO),this._waitForAnimationToComplete(this._openAnimationDuration,this._finishDialogOpen)):(this._hostElement.classList.add(pO),Promise.resolve().then(()=>this._finishDialogOpen()))}_startExitAnimation(){this._animationStateChanged.emit({state:"closing",totalTime:this._closeAnimationDuration}),this._hostElement.classList.remove(pO),this._animationsEnabled?(this._hostElement.style.setProperty(NV,`${this._openAnimationDuration}ms`),this._hostElement.classList.add(LV),this._waitForAnimationToComplete(this._closeAnimationDuration,this._finishDialogClose)):Promise.resolve().then(()=>this._finishDialogClose())}_clearAnimationClasses(){this._hostElement.classList.remove(RV),this._hostElement.classList.remove(LV)}_waitForAnimationToComplete(t,n){null!==this._animationTimer&&clearTimeout(this._animationTimer),this._animationTimer=setTimeout(n,t)}}return i.\u0275fac=function(t){return new(t||i)(wt(Cs),wt(bF),wt(Zo,8),wt(kD),wt(cD),wt(mo),wt(NS),wt(_h,8),wt(A0))},i.\u0275cmp=Fr({type:i,selectors:[["mat-dialog-container"]],hostAttrs:["tabindex","-1",1,"mat-mdc-dialog-container","mdc-dialog"],hostVars:8,hostBindings:function(t,n){2&t&&(Di("id",n._config.id),Ea("aria-modal",n._config.ariaModal)("role",n._config.role)("aria-labelledby",n._config.ariaLabel?null:n._ariaLabelledBy)("aria-label",n._config.ariaLabel)("aria-describedby",n._config.ariaDescribedBy||null),jo("_mat-animation-noopable",!n._animationsEnabled))},features:[As],decls:3,vars:0,consts:[[1,"mdc-dialog__container"],[1,"mat-mdc-dialog-surface","mdc-dialog__surface"],["cdkPortalOutlet",""]],template:function(t,n){1&t&&(Zt(0,"div",0)(1,"div",1),qr(2,ude,0,0,"ng-template",2),un()())},dependencies:[M2],styles:['.mdc-elevation-overlay{position:absolute;border-radius:inherit;pointer-events:none;opacity:var(--mdc-elevation-overlay-opacity, 0);transition:opacity 280ms cubic-bezier(0.4, 0, 0.2, 1)}.mdc-dialog,.mdc-dialog__scrim{position:fixed;top:0;left:0;align-items:center;justify-content:center;box-sizing:border-box;width:100%;height:100%}.mdc-dialog{display:none;z-index:var(--mdc-dialog-z-index, 7)}.mdc-dialog .mdc-dialog__content{padding:20px 24px 20px 24px}.mdc-dialog .mdc-dialog__surface{min-width:280px}@media(max-width: 592px){.mdc-dialog .mdc-dialog__surface{max-width:calc(100vw - 32px)}}@media(min-width: 592px){.mdc-dialog .mdc-dialog__surface{max-width:560px}}.mdc-dialog .mdc-dialog__surface{max-height:calc(100% - 32px)}.mdc-dialog.mdc-dialog--fullscreen .mdc-dialog__surface{max-width:none}@media(max-width: 960px){.mdc-dialog.mdc-dialog--fullscreen .mdc-dialog__surface{max-height:560px;width:560px}.mdc-dialog.mdc-dialog--fullscreen .mdc-dialog__surface .mdc-dialog__close{right:-12px}}@media(max-width: 720px)and (max-width: 672px){.mdc-dialog.mdc-dialog--fullscreen .mdc-dialog__surface{width:calc(100vw - 112px)}}@media(max-width: 720px)and (min-width: 672px){.mdc-dialog.mdc-dialog--fullscreen .mdc-dialog__surface{width:560px}}@media(max-width: 720px)and (max-height: 720px){.mdc-dialog.mdc-dialog--fullscreen .mdc-dialog__surface{max-height:calc(100vh - 160px)}}@media(max-width: 720px)and (min-height: 720px){.mdc-dialog.mdc-dialog--fullscreen .mdc-dialog__surface{max-height:560px}}@media(max-width: 720px){.mdc-dialog.mdc-dialog--fullscreen .mdc-dialog__surface .mdc-dialog__close{right:-12px}}@media(max-width: 720px)and (max-height: 400px),(max-width: 600px),(min-width: 720px)and (max-height: 400px){.mdc-dialog.mdc-dialog--fullscreen .mdc-dialog__surface{height:100%;max-height:100vh;max-width:100vw;width:100vw;border-radius:0}.mdc-dialog.mdc-dialog--fullscreen .mdc-dialog__surface .mdc-dialog__close{order:-1;left:-12px}.mdc-dialog.mdc-dialog--fullscreen .mdc-dialog__surface .mdc-dialog__header{padding:0 16px 9px;justify-content:flex-start}.mdc-dialog.mdc-dialog--fullscreen .mdc-dialog__surface .mdc-dialog__title{margin-left:calc(16px - 2 * 12px)}}@media(min-width: 960px){.mdc-dialog.mdc-dialog--fullscreen .mdc-dialog__surface{width:calc(100vw - 400px)}.mdc-dialog.mdc-dialog--fullscreen .mdc-dialog__surface .mdc-dialog__close{right:-12px}}.mdc-dialog.mdc-dialog__scrim--hidden .mdc-dialog__scrim{opacity:0}.mdc-dialog__scrim{opacity:0;z-index:-1}.mdc-dialog__container{display:flex;flex-direction:row;align-items:center;justify-content:space-around;box-sizing:border-box;height:100%;transform:scale(0.8);opacity:0;pointer-events:none}.mdc-dialog__surface{position:relative;display:flex;flex-direction:column;flex-grow:0;flex-shrink:0;box-sizing:border-box;max-width:100%;max-height:100%;pointer-events:auto;overflow-y:auto}.mdc-dialog__surface .mdc-elevation-overlay{width:100%;height:100%;top:0;left:0}[dir=rtl] .mdc-dialog__surface,.mdc-dialog__surface[dir=rtl]{text-align:right}@media screen and (forced-colors: active),(-ms-high-contrast: active){.mdc-dialog__surface{outline:2px solid windowText}}.mdc-dialog__surface::before{position:absolute;box-sizing:border-box;width:100%;height:100%;top:0;left:0;border:2px solid rgba(0,0,0,0);border-radius:inherit;content:"";pointer-events:none}@media screen and (forced-colors: active){.mdc-dialog__surface::before{border-color:CanvasText}}@media screen and (-ms-high-contrast: active),screen and (-ms-high-contrast: none){.mdc-dialog__surface::before{content:none}}.mdc-dialog__title{display:block;margin-top:0;position:relative;flex-shrink:0;box-sizing:border-box;margin:0 0 1px;padding:0 24px 9px}.mdc-dialog__title::before{display:inline-block;width:0;height:40px;content:"";vertical-align:0}[dir=rtl] .mdc-dialog__title,.mdc-dialog__title[dir=rtl]{text-align:right}.mdc-dialog--scrollable .mdc-dialog__title{margin-bottom:1px;padding-bottom:15px}.mdc-dialog--fullscreen .mdc-dialog__header{align-items:baseline;border-bottom:1px solid rgba(0,0,0,0);display:inline-flex;justify-content:space-between;padding:0 24px 9px;z-index:1}@media screen and (forced-colors: active){.mdc-dialog--fullscreen .mdc-dialog__header{border-bottom-color:CanvasText}}.mdc-dialog--fullscreen .mdc-dialog__header .mdc-dialog__close{right:-12px}.mdc-dialog--fullscreen .mdc-dialog__title{margin-bottom:0;padding:0;border-bottom:0}.mdc-dialog--fullscreen.mdc-dialog--scrollable .mdc-dialog__title{border-bottom:0;margin-bottom:0}.mdc-dialog--fullscreen .mdc-dialog__close{top:5px}.mdc-dialog--fullscreen.mdc-dialog--scrollable .mdc-dialog__actions{border-top:1px solid rgba(0,0,0,0)}@media screen and (forced-colors: active){.mdc-dialog--fullscreen.mdc-dialog--scrollable .mdc-dialog__actions{border-top-color:CanvasText}}.mdc-dialog--fullscreen--titleless .mdc-dialog__close{margin-top:4px}.mdc-dialog--fullscreen--titleless.mdc-dialog--scrollable .mdc-dialog__close{margin-top:0}.mdc-dialog__content{flex-grow:1;box-sizing:border-box;margin:0;overflow:auto}.mdc-dialog__content>:first-child{margin-top:0}.mdc-dialog__content>:last-child{margin-bottom:0}.mdc-dialog__title+.mdc-dialog__content,.mdc-dialog__header+.mdc-dialog__content{padding-top:0}.mdc-dialog--scrollable .mdc-dialog__title+.mdc-dialog__content{padding-top:8px;padding-bottom:8px}.mdc-dialog__content .mdc-deprecated-list:first-child:last-child{padding:6px 0 0}.mdc-dialog--scrollable .mdc-dialog__content .mdc-deprecated-list:first-child:last-child{padding:0}.mdc-dialog__actions{display:flex;position:relative;flex-shrink:0;flex-wrap:wrap;align-items:center;justify-content:flex-end;box-sizing:border-box;min-height:52px;margin:0;padding:8px;border-top:1px solid rgba(0,0,0,0)}@media screen and (forced-colors: active){.mdc-dialog__actions{border-top-color:CanvasText}}.mdc-dialog--stacked .mdc-dialog__actions{flex-direction:column;align-items:flex-end}.mdc-dialog__button{margin-left:8px;margin-right:0;max-width:100%;text-align:right}[dir=rtl] .mdc-dialog__button,.mdc-dialog__button[dir=rtl]{margin-left:0;margin-right:8px}.mdc-dialog__button:first-child{margin-left:0;margin-right:0}[dir=rtl] .mdc-dialog__button:first-child,.mdc-dialog__button:first-child[dir=rtl]{margin-left:0;margin-right:0}[dir=rtl] .mdc-dialog__button,.mdc-dialog__button[dir=rtl]{text-align:left}.mdc-dialog--stacked .mdc-dialog__button:not(:first-child){margin-top:12px}.mdc-dialog--open,.mdc-dialog--opening,.mdc-dialog--closing{display:flex}.mdc-dialog--opening .mdc-dialog__scrim{transition:opacity 150ms linear}.mdc-dialog--opening .mdc-dialog__container{transition:opacity 75ms linear,transform 150ms 0ms cubic-bezier(0, 0, 0.2, 1)}.mdc-dialog--closing .mdc-dialog__scrim,.mdc-dialog--closing .mdc-dialog__container{transition:opacity 75ms linear}.mdc-dialog--closing .mdc-dialog__container{transform:none}.mdc-dialog--open .mdc-dialog__scrim{opacity:1}.mdc-dialog--open .mdc-dialog__container{transform:none;opacity:1}.mdc-dialog--open.mdc-dialog__surface-scrim--shown .mdc-dialog__surface-scrim{opacity:1}.mdc-dialog--open.mdc-dialog__surface-scrim--hiding .mdc-dialog__surface-scrim{transition:opacity 75ms linear}.mdc-dialog--open.mdc-dialog__surface-scrim--showing .mdc-dialog__surface-scrim{transition:opacity 150ms linear}.mdc-dialog__surface-scrim{display:none;opacity:0;position:absolute;width:100%;height:100%;z-index:1}.mdc-dialog__surface-scrim--shown .mdc-dialog__surface-scrim,.mdc-dialog__surface-scrim--showing .mdc-dialog__surface-scrim,.mdc-dialog__surface-scrim--hiding .mdc-dialog__surface-scrim{display:block}.mdc-dialog-scroll-lock{overflow:hidden}.mdc-dialog--no-content-padding .mdc-dialog__content{padding:0}.mdc-dialog--sheet .mdc-dialog__close{right:12px;top:9px;position:absolute;z-index:1}.mdc-dialog__scrim--removed{pointer-events:none}.mdc-dialog__scrim--removed .mdc-dialog__scrim,.mdc-dialog__scrim--removed .mdc-dialog__surface-scrim{display:none}.mat-mdc-dialog-content{max-height:65vh}.mat-mdc-dialog-container{position:static;display:block}.mat-mdc-dialog-container,.mat-mdc-dialog-container .mdc-dialog__container,.mat-mdc-dialog-container .mdc-dialog__surface{max-height:inherit;min-height:inherit;min-width:inherit;max-width:inherit}.mat-mdc-dialog-container .mdc-dialog__surface{display:block;width:100%;height:100%}.mat-mdc-dialog-container{outline:0}.mat-mdc-dialog-container .mdc-dialog__surface{background-color:var(--mdc-dialog-container-color, white)}.mat-mdc-dialog-container .mdc-dialog__surface{box-shadow:var(--mdc-dialog-container-elevation, 0px 11px 15px -7px rgba(0, 0, 0, 0.2), 0px 24px 38px 3px rgba(0, 0, 0, 0.14), 0px 9px 46px 8px rgba(0, 0, 0, 0.12))}.mat-mdc-dialog-container .mdc-dialog__surface{border-radius:var(--mdc-dialog-container-shape, var(--mdc-shape-medium, 4px))}.mat-mdc-dialog-container.mdc-dialog--scrollable .mdc-dialog__title,.mat-mdc-dialog-container.mdc-dialog--scrollable .mdc-dialog__actions,.mat-mdc-dialog-container.mdc-dialog--scrollable.mdc-dialog-scroll-divider-footer .mdc-dialog__actions{border-color:var(--mdc-dialog-with-divider-divider-color, black)}.mat-mdc-dialog-container.mdc-dialog--scrollable .mdc-dialog__title{border-bottom-color:var(--mdc-dialog-with-divider-divider-color, black)}.mat-mdc-dialog-container .mdc-dialog__title{font-family:var(--mdc-dialog-subhead-font, "Arial");line-height:var(--mdc-dialog-subhead-line-height, 14px);font-size:var(--mdc-dialog-subhead-size, 14px);font-weight:var(--mdc-dialog-subhead-weight, 500);letter-spacing:var(--mdc-dialog-subhead-tracking, 1px)}.mat-mdc-dialog-container .mdc-dialog__title{color:var(--mdc-dialog-subhead-color, black)}.mat-mdc-dialog-container .mdc-dialog__content{font-family:var(--mdc-dialog-supporting-text-font, "Arial");line-height:var(--mdc-dialog-supporting-text-line-height, 14px);font-size:var(--mdc-dialog-supporting-text-size, 14px);font-weight:var(--mdc-dialog-supporting-text-weight, 500);letter-spacing:var(--mdc-dialog-supporting-text-tracking, 1px)}.mat-mdc-dialog-container .mdc-dialog__content{color:var(--mdc-dialog-supporting-text-color, black)}.mat-mdc-dialog-container .mdc-dialog__container{transition-duration:var(--mat-dialog-transition-duration, 0ms)}.mat-mdc-dialog-container._mat-animation-noopable .mdc-dialog__container{transition:none}.mat-mdc-dialog-content{display:block}.mat-mdc-dialog-actions{justify-content:start}.mat-mdc-dialog-actions.mat-mdc-dialog-actions-align-center,.mat-mdc-dialog-actions[align=center]{justify-content:center}.mat-mdc-dialog-actions.mat-mdc-dialog-actions-align-end,.mat-mdc-dialog-actions[align=end]{justify-content:flex-end}.mat-mdc-dialog-actions .mat-button-base+.mat-button-base,.mat-mdc-dialog-actions .mat-mdc-button-base+.mat-mdc-button-base{margin-left:8px}[dir=rtl] .mat-mdc-dialog-actions .mat-button-base+.mat-button-base,[dir=rtl] .mat-mdc-dialog-actions .mat-mdc-button-base+.mat-mdc-button-base{margin-left:0;margin-right:8px}'],encapsulation:2}),i})();class JS{constructor(e,t,n){this._ref=e,this._containerInstance=n,this._afterOpened=new D,this._beforeClosed=new D,this._state=0,this.disableClose=t.disableClose,this.id=e.id,n._animationStateChanged.pipe(tu(r=>"opened"===r.state),nu(1)).subscribe(()=>{this._afterOpened.next(),this._afterOpened.complete()}),n._animationStateChanged.pipe(tu(r=>"closed"===r.state),nu(1)).subscribe(()=>{clearTimeout(this._closeFallbackTimeout),this._finishDialogClose()}),e.overlayRef.detachments().subscribe(()=>{this._beforeClosed.next(this._result),this._beforeClosed.complete(),this._finishDialogClose()}),It(this.backdropClick(),this.keydownEvents().pipe(tu(r=>27===r.keyCode&&!this.disableClose&&!v2(r)))).subscribe(r=>{this.disableClose||(r.preventDefault(),function Ade(i,e,t){i._closeInteractionType=e,i.close(t)}(this,"keydown"===r.type?"keyboard":"mouse"))})}close(e){this._result=e,this._containerInstance._animationStateChanged.pipe(tu(t=>"closing"===t.state),nu(1)).subscribe(t=>{this._beforeClosed.next(e),this._beforeClosed.complete(),this._ref.overlayRef.detachBackdrop(),this._closeFallbackTimeout=setTimeout(()=>this._finishDialogClose(),t.totalTime+100)}),this._state=1,this._containerInstance._startExitAnimation()}afterOpened(){return this._afterOpened}afterClosed(){return this._ref.closed}beforeClosed(){return this._beforeClosed}backdropClick(){return this._ref.backdropClick}keydownEvents(){return this._ref.keydownEvents}updatePosition(e){let t=this._ref.config.positionStrategy;return e&&(e.left||e.right)?e.left?t.left(e.left):t.right(e.right):t.centerHorizontally(),e&&(e.top||e.bottom)?e.top?t.top(e.top):t.bottom(e.bottom):t.centerVertically(),this._ref.updatePosition(),this}updateSize(e="",t=""){return this._ref.updateSize(e,t),this}addPanelClass(e){return this._ref.addPanelClass(e),this}removePanelClass(e){return this._ref.removePanelClass(e),this}getState(){return this._state}_finishDialogClose(){this._state=2,this._ref.close(this._result,{focusOrigin:this._closeInteractionType}),this.componentInstance=null}}const zV=new cr("MatMdcDialogData"),mde=new cr("mat-mdc-dialog-default-options"),HV=new cr("mat-mdc-dialog-scroll-strategy"),_de={provide:HV,deps:[ap],useFactory:function gde(i){return()=>i.scrollStrategies.block()}};let yde=0,vde=(()=>{class i{get openDialogs(){return this._parentDialog?this._parentDialog.openDialogs:this._openDialogsAtThisLevel}get afterOpened(){return this._parentDialog?this._parentDialog.afterOpened:this._afterOpenedAtThisLevel}_getAfterAllClosed(){const t=this._parentDialog;return t?t._getAfterAllClosed():this._afterAllClosedAtThisLevel}constructor(t,n,r,s,a,l,u,d,p,y){this._overlay=t,this._defaultOptions=r,this._parentDialog=s,this._dialogRefConstructor=u,this._dialogContainerType=d,this._dialogDataToken=p,this._openDialogsAtThisLevel=[],this._afterAllClosedAtThisLevel=new D,this._afterOpenedAtThisLevel=new D,this._idPrefix="mat-dialog-",this.dialogConfigClass=kD,this.afterAllClosed=fE(()=>this.openDialogs.length?this._getAfterAllClosed():this._getAfterAllClosed().pipe(op(void 0))),this._scrollStrategy=l,this._dialog=n.get(OV)}open(t,n){let r;(n={...this._defaultOptions||new kD,...n}).id=n.id||`${this._idPrefix}${yde++}`,n.scrollStrategy=n.scrollStrategy||this._scrollStrategy();const s=this._dialog.open(t,{...n,positionStrategy:this._overlay.position().global().centerHorizontally().centerVertically(),disableClose:!0,closeOnDestroy:!1,container:{type:this._dialogContainerType,providers:()=>[{provide:this.dialogConfigClass,useValue:n},{provide:PD,useValue:n}]},templateContext:()=>({dialogRef:r}),providers:(a,l,u)=>(r=new this._dialogRefConstructor(a,n,u),r.updatePosition(n?.position),[{provide:this._dialogContainerType,useValue:u},{provide:this._dialogDataToken,useValue:l.data},{provide:this._dialogRefConstructor,useValue:r}])});return r.componentInstance=s.componentInstance,this.openDialogs.push(r),this.afterOpened.next(r),r.afterClosed().subscribe(()=>{const a=this.openDialogs.indexOf(r);a>-1&&(this.openDialogs.splice(a,1),this.openDialogs.length||this._getAfterAllClosed().next())}),r}closeAll(){this._closeDialogs(this.openDialogs)}getDialogById(t){return this.openDialogs.find(n=>n.id===t)}ngOnDestroy(){this._closeDialogs(this._openDialogsAtThisLevel),this._afterAllClosedAtThisLevel.complete(),this._afterOpenedAtThisLevel.complete()}_closeDialogs(t){let n=t.length;for(;n--;)t[n].close()}}return i.\u0275fac=function(t){Qd()},i.\u0275prov=Ue({token:i,factory:i.\u0275fac}),i})(),e3=(()=>{class i extends vde{constructor(t,n,r,s,a,l,u,d){super(t,n,s,l,u,a,JS,pde,zV,d),this._idPrefix="mat-mdc-dialog-"}}return i.\u0275fac=function(t){return new(t||i)(ci(ap),ci(zc),ci(eM,8),ci(mde,8),ci(HV),ci(i,12),ci(mD),ci(_h,8))},i.\u0275prov=Ue({token:i,factory:i.\u0275fac}),i})(),bde=0,AO=(()=>{class i{constructor(t,n,r){this._dialogRef=t,this._elementRef=n,this._dialog=r,this.id="mat-mdc-dialog-title-"+bde++}ngOnInit(){this._dialogRef||(this._dialogRef=function xde(i,e){let t=i.nativeElement.parentElement;for(;t&&!t.classList.contains("mat-mdc-dialog-container");)t=t.parentElement;return t?e.find(n=>n.id===t.id):null}(this._elementRef,this._dialog.openDialogs)),this._dialogRef&&Promise.resolve().then(()=>{const t=this._dialogRef._containerInstance;t&&!t._ariaLabelledBy&&(t._ariaLabelledBy=this.id)})}}return i.\u0275fac=function(t){return new(t||i)(wt(JS,8),wt(Cs),wt(e3))},i.\u0275dir=Oi({type:i,selectors:[["","mat-dialog-title",""],["","matDialogTitle",""]],hostAttrs:[1,"mat-mdc-dialog-title","mdc-dialog__title"],hostVars:1,hostBindings:function(t,n){2&t&&Di("id",n.id)},inputs:{id:"id"},exportAs:["matDialogTitle"]}),i})(),mO=(()=>{class i{}return i.\u0275fac=function(t){return new(t||i)},i.\u0275dir=Oi({type:i,selectors:[["","mat-dialog-content",""],["mat-dialog-content"],["","matDialogContent",""]],hostAttrs:[1,"mat-mdc-dialog-content","mdc-dialog__content"]}),i})(),gO=(()=>{class i{constructor(){this.align="start"}}return i.\u0275fac=function(t){return new(t||i)},i.\u0275dir=Oi({type:i,selectors:[["","mat-dialog-actions",""],["mat-dialog-actions"],["","matDialogActions",""]],hostAttrs:[1,"mat-mdc-dialog-actions","mdc-dialog__actions"],hostVars:4,hostBindings:function(t,n){2&t&&jo("mat-mdc-dialog-actions-align-center","center"===n.align)("mat-mdc-dialog-actions-align-end","end"===n.align)},inputs:{align:"align"}}),i})(),wde=(()=>{class i{}return i.\u0275fac=function(t){return new(t||i)},i.\u0275mod=ia({type:i}),i.\u0275inj=ft({providers:[e3,_de],imports:[cde,US,kS,Pu,Pu]}),i})();const Cde=["mat-button",""],Mde=[[["",8,"material-icons",3,"iconPositionEnd",""],["mat-icon",3,"iconPositionEnd",""],["","matButtonIcon","",3,"iconPositionEnd",""]],"*",[["","iconPositionEnd","",8,"material-icons"],["mat-icon","iconPositionEnd",""],["","matButtonIcon","","iconPositionEnd",""]]],Sde=[".material-icons:not([iconPositionEnd]), mat-icon:not([iconPositionEnd]), [matButtonIcon]:not([iconPositionEnd])","*",".material-icons[iconPositionEnd], mat-icon[iconPositionEnd], [matButtonIcon][iconPositionEnd]"],Ede=["mat-icon-button",""],Dde=["*"],Bde=[{selector:"mat-button",mdcClasses:["mdc-button","mat-mdc-button"]},{selector:"mat-flat-button",mdcClasses:["mdc-button","mdc-button--unelevated","mat-mdc-unelevated-button"]},{selector:"mat-raised-button",mdcClasses:["mdc-button","mdc-button--raised","mat-mdc-raised-button"]},{selector:"mat-stroked-button",mdcClasses:["mdc-button","mdc-button--outlined","mat-mdc-outlined-button"]},{selector:"mat-fab",mdcClasses:["mdc-fab","mat-mdc-fab"]},{selector:"mat-mini-fab",mdcClasses:["mdc-fab","mdc-fab--mini","mat-mdc-mini-fab"]},{selector:"mat-icon-button",mdcClasses:["mdc-icon-button","mat-mdc-icon-button"]}],Ide=C2(Pb(kb(class{constructor(i){this._elementRef=i}})));let GV=(()=>{class i extends Ide{constructor(t,n,r,s){super(t),this._platform=n,this._ngZone=r,this._animationMode=s,this._focusMonitor=To(A0),this._isFab=!1;const a=t.nativeElement.classList;for(const l of Bde)this._hasHostAttributes(l.selector)&&l.mdcClasses.forEach(u=>{a.add(u)})}ngAfterViewInit(){this._focusMonitor.monitor(this._elementRef,!0)}ngOnDestroy(){this._focusMonitor.stopMonitoring(this._elementRef)}focus(t="program",n){t?this._focusMonitor.focusVia(this._elementRef.nativeElement,t,n):this._elementRef.nativeElement.focus(n)}_hasHostAttributes(...t){return t.some(n=>this._elementRef.nativeElement.hasAttribute(n))}_isRippleDisabled(){return this.disableRipple||this.disabled}}return i.\u0275fac=function(t){Qd()},i.\u0275dir=Oi({type:i,viewQuery:function(t,n){if(1&t&&la(qA,5),2&t){let r;so(r=oo())&&(n.ripple=r.first)}},features:[As]}),i})(),t3=(()=>{class i extends GV{constructor(t,n,r,s){super(t,n,r,s)}}return i.\u0275fac=function(t){return new(t||i)(wt(Cs),wt(Ku),wt(mo),wt(_h,8))},i.\u0275cmp=Fr({type:i,selectors:[["button","mat-button",""],["button","mat-raised-button",""],["button","mat-flat-button",""],["button","mat-stroked-button",""]],hostVars:7,hostBindings:function(t,n){2&t&&(Ea("disabled",n.disabled||null),jo("_mat-animation-noopable","NoopAnimations"===n._animationMode)("mat-unthemed",!n.color)("mat-mdc-button-base",!0))},inputs:{disabled:"disabled",disableRipple:"disableRipple",color:"color"},exportAs:["matButton"],features:[As],attrs:Cde,ngContentSelectors:Sde,decls:8,vars:6,consts:[[1,"mat-mdc-button-persistent-ripple"],[1,"mdc-button__label"],[1,"mat-mdc-focus-indicator"],["matRipple","",1,"mat-mdc-button-ripple",3,"matRippleDisabled","matRippleTrigger"],[1,"mat-mdc-button-touch-target"]],template:function(t,n){1&t&&(fh(Mde),Pr(0,"span",0),uu(1),Zt(2,"span",1),uu(3,1),un(),uu(4,2),Pr(5,"span",2)(6,"span",3)(7,"span",4)),2&t&&(jo("mdc-button__ripple",!n._isFab)("mdc-fab__ripple",n._isFab),Nn(6),Cn("matRippleDisabled",n._isRippleDisabled())("matRippleTrigger",n._elementRef.nativeElement))},dependencies:[qA],styles:['.mdc-touch-target-wrapper{display:inline}.mdc-elevation-overlay{position:absolute;border-radius:inherit;pointer-events:none;opacity:var(--mdc-elevation-overlay-opacity, 0);transition:opacity 280ms cubic-bezier(0.4, 0, 0.2, 1)}.mdc-button{position:relative;display:inline-flex;align-items:center;justify-content:center;box-sizing:border-box;min-width:64px;border:none;outline:none;line-height:inherit;user-select:none;-webkit-appearance:none;overflow:visible;vertical-align:middle;background:rgba(0,0,0,0)}.mdc-button .mdc-elevation-overlay{width:100%;height:100%;top:0;left:0}.mdc-button::-moz-focus-inner{padding:0;border:0}.mdc-button:active{outline:none}.mdc-button:hover{cursor:pointer}.mdc-button:disabled{cursor:default;pointer-events:none}.mdc-button[hidden]{display:none}.mdc-button .mdc-button__icon{margin-left:0;margin-right:8px;display:inline-block;position:relative;vertical-align:top}[dir=rtl] .mdc-button .mdc-button__icon,.mdc-button .mdc-button__icon[dir=rtl]{margin-left:8px;margin-right:0}.mdc-button .mdc-button__progress-indicator{font-size:0;position:absolute;transform:translate(-50%, -50%);top:50%;left:50%;line-height:initial}.mdc-button .mdc-button__label{position:relative}.mdc-button .mdc-button__focus-ring{pointer-events:none;border:2px solid rgba(0,0,0,0);border-radius:6px;box-sizing:content-box;position:absolute;top:50%;left:50%;transform:translate(-50%, -50%);height:calc(\n 100% + 4px\n );width:calc(\n 100% + 4px\n );display:none}@media screen and (forced-colors: active){.mdc-button .mdc-button__focus-ring{border-color:CanvasText}}.mdc-button .mdc-button__focus-ring::after{content:"";border:2px solid rgba(0,0,0,0);border-radius:8px;display:block;position:absolute;top:50%;left:50%;transform:translate(-50%, -50%);height:calc(100% + 4px);width:calc(100% + 4px)}@media screen and (forced-colors: active){.mdc-button .mdc-button__focus-ring::after{border-color:CanvasText}}@media screen and (forced-colors: active){.mdc-button.mdc-ripple-upgraded--background-focused .mdc-button__focus-ring,.mdc-button:not(.mdc-ripple-upgraded):focus .mdc-button__focus-ring{display:block}}.mdc-button .mdc-button__touch{position:absolute;top:50%;height:48px;left:0;right:0;transform:translateY(-50%)}.mdc-button__label+.mdc-button__icon{margin-left:8px;margin-right:0}[dir=rtl] .mdc-button__label+.mdc-button__icon,.mdc-button__label+.mdc-button__icon[dir=rtl]{margin-left:0;margin-right:8px}svg.mdc-button__icon{fill:currentColor}.mdc-button--touch{margin-top:6px;margin-bottom:6px}.mdc-button{padding:0 8px 0 8px}.mdc-button--unelevated{transition:box-shadow 280ms cubic-bezier(0.4, 0, 0.2, 1);padding:0 16px 0 16px}.mdc-button--unelevated.mdc-button--icon-trailing{padding:0 12px 0 16px}.mdc-button--unelevated.mdc-button--icon-leading{padding:0 16px 0 12px}.mdc-button--raised{transition:box-shadow 280ms cubic-bezier(0.4, 0, 0.2, 1);padding:0 16px 0 16px}.mdc-button--raised.mdc-button--icon-trailing{padding:0 12px 0 16px}.mdc-button--raised.mdc-button--icon-leading{padding:0 16px 0 12px}.mdc-button--outlined{border-style:solid;transition:border 280ms cubic-bezier(0.4, 0, 0.2, 1)}.mdc-button--outlined .mdc-button__ripple{border-style:solid;border-color:rgba(0,0,0,0)}.mat-mdc-button{height:var(--mdc-text-button-container-height, 36px);border-radius:var(--mdc-text-button-container-shape, var(--mdc-shape-small, 4px))}.mat-mdc-button:not(:disabled){color:var(--mdc-text-button-label-text-color, inherit)}.mat-mdc-button:disabled{color:var(--mdc-text-button-disabled-label-text-color, rgba(0, 0, 0, 0.38))}.mat-mdc-button .mdc-button__ripple{border-radius:var(--mdc-text-button-container-shape, var(--mdc-shape-small, 4px))}.mat-mdc-unelevated-button{height:var(--mdc-filled-button-container-height, 36px);border-radius:var(--mdc-filled-button-container-shape, var(--mdc-shape-small, 4px))}.mat-mdc-unelevated-button:not(:disabled){background-color:var(--mdc-filled-button-container-color, transparent)}.mat-mdc-unelevated-button:disabled{background-color:var(--mdc-filled-button-disabled-container-color, rgba(0, 0, 0, 0.12))}.mat-mdc-unelevated-button:not(:disabled){color:var(--mdc-filled-button-label-text-color, inherit)}.mat-mdc-unelevated-button:disabled{color:var(--mdc-filled-button-disabled-label-text-color, rgba(0, 0, 0, 0.38))}.mat-mdc-unelevated-button .mdc-button__ripple{border-radius:var(--mdc-filled-button-container-shape, var(--mdc-shape-small, 4px))}.mat-mdc-raised-button{height:var(--mdc-protected-button-container-height, 36px);border-radius:var(--mdc-protected-button-container-shape, var(--mdc-shape-small, 4px));box-shadow:var(--mdc-protected-button-container-elevation, 0px 3px 1px -2px rgba(0, 0, 0, 0.2), 0px 2px 2px 0px rgba(0, 0, 0, 0.14), 0px 1px 5px 0px rgba(0, 0, 0, 0.12))}.mat-mdc-raised-button:not(:disabled){background-color:var(--mdc-protected-button-container-color, transparent)}.mat-mdc-raised-button:disabled{background-color:var(--mdc-protected-button-disabled-container-color, rgba(0, 0, 0, 0.12))}.mat-mdc-raised-button:not(:disabled){color:var(--mdc-protected-button-label-text-color, inherit)}.mat-mdc-raised-button:disabled{color:var(--mdc-protected-button-disabled-label-text-color, rgba(0, 0, 0, 0.38))}.mat-mdc-raised-button .mdc-button__ripple{border-radius:var(--mdc-protected-button-container-shape, var(--mdc-shape-small, 4px))}.mat-mdc-raised-button.mdc-ripple-upgraded--background-focused,.mat-mdc-raised-button:not(.mdc-ripple-upgraded):focus{box-shadow:var(--mdc-protected-button-focus-container-elevation, 0px 2px 4px -1px rgba(0, 0, 0, 0.2), 0px 4px 5px 0px rgba(0, 0, 0, 0.14), 0px 1px 10px 0px rgba(0, 0, 0, 0.12))}.mat-mdc-raised-button:hover{box-shadow:var(--mdc-protected-button-hover-container-elevation, 0px 2px 4px -1px rgba(0, 0, 0, 0.2), 0px 4px 5px 0px rgba(0, 0, 0, 0.14), 0px 1px 10px 0px rgba(0, 0, 0, 0.12))}.mat-mdc-raised-button:not(:disabled):active{box-shadow:var(--mdc-protected-button-pressed-container-elevation, 0px 5px 5px -3px rgba(0, 0, 0, 0.2), 0px 8px 10px 1px rgba(0, 0, 0, 0.14), 0px 3px 14px 2px rgba(0, 0, 0, 0.12))}.mat-mdc-raised-button:disabled{box-shadow:var(--mdc-protected-button-disabled-container-elevation, 0px 0px 0px 0px rgba(0, 0, 0, 0.2), 0px 0px 0px 0px rgba(0, 0, 0, 0.14), 0px 0px 0px 0px rgba(0, 0, 0, 0.12))}.mat-mdc-outlined-button{height:var(--mdc-outlined-button-container-height, 36px);border-radius:var(--mdc-outlined-button-container-shape, var(--mdc-shape-small, 4px));padding:0 15px 0 15px;border-width:var(--mdc-outlined-button-outline-width, 1px)}.mat-mdc-outlined-button:not(:disabled){color:var(--mdc-outlined-button-label-text-color, inherit)}.mat-mdc-outlined-button:disabled{color:var(--mdc-outlined-button-disabled-label-text-color, rgba(0, 0, 0, 0.38))}.mat-mdc-outlined-button .mdc-button__ripple{border-radius:var(--mdc-outlined-button-container-shape, var(--mdc-shape-small, 4px))}.mat-mdc-outlined-button:not(:disabled){border-color:var(--mdc-outlined-button-outline-color, rgba(0, 0, 0, 0.12))}.mat-mdc-outlined-button:disabled{border-color:var(--mdc-outlined-button-disabled-outline-color, rgba(0, 0, 0, 0.12))}.mat-mdc-outlined-button.mdc-button--icon-trailing{padding:0 11px 0 15px}.mat-mdc-outlined-button.mdc-button--icon-leading{padding:0 15px 0 11px}.mat-mdc-outlined-button .mdc-button__ripple{top:-1px;left:-1px;bottom:-1px;right:-1px;border-width:var(--mdc-outlined-button-outline-width, 1px)}.mat-mdc-outlined-button .mdc-button__touch{left:calc(-1 * var(--mdc-outlined-button-outline-width, 1px));width:calc(100% + 2 * var(--mdc-outlined-button-outline-width, 1px))}.mat-mdc-button,.mat-mdc-unelevated-button,.mat-mdc-raised-button,.mat-mdc-outlined-button{-webkit-tap-highlight-color:rgba(0,0,0,0)}.mat-mdc-button .mat-mdc-button-ripple,.mat-mdc-button .mat-mdc-button-persistent-ripple,.mat-mdc-button .mat-mdc-button-persistent-ripple::before,.mat-mdc-unelevated-button .mat-mdc-button-ripple,.mat-mdc-unelevated-button .mat-mdc-button-persistent-ripple,.mat-mdc-unelevated-button .mat-mdc-button-persistent-ripple::before,.mat-mdc-raised-button .mat-mdc-button-ripple,.mat-mdc-raised-button .mat-mdc-button-persistent-ripple,.mat-mdc-raised-button .mat-mdc-button-persistent-ripple::before,.mat-mdc-outlined-button .mat-mdc-button-ripple,.mat-mdc-outlined-button .mat-mdc-button-persistent-ripple,.mat-mdc-outlined-button .mat-mdc-button-persistent-ripple::before{top:0;left:0;right:0;bottom:0;position:absolute;pointer-events:none;border-radius:inherit}.mat-mdc-button .mat-mdc-button-persistent-ripple::before,.mat-mdc-unelevated-button .mat-mdc-button-persistent-ripple::before,.mat-mdc-raised-button .mat-mdc-button-persistent-ripple::before,.mat-mdc-outlined-button .mat-mdc-button-persistent-ripple::before{content:"";opacity:0;background-color:var(--mat-mdc-button-persistent-ripple-color)}.mat-mdc-button .mat-ripple-element,.mat-mdc-unelevated-button .mat-ripple-element,.mat-mdc-raised-button .mat-ripple-element,.mat-mdc-outlined-button .mat-ripple-element{background-color:var(--mat-mdc-button-ripple-color)}.mat-mdc-button .mdc-button__label,.mat-mdc-unelevated-button .mdc-button__label,.mat-mdc-raised-button .mdc-button__label,.mat-mdc-outlined-button .mdc-button__label{z-index:1}.mat-mdc-button .mat-mdc-focus-indicator,.mat-mdc-unelevated-button .mat-mdc-focus-indicator,.mat-mdc-raised-button .mat-mdc-focus-indicator,.mat-mdc-outlined-button .mat-mdc-focus-indicator{top:0;left:0;right:0;bottom:0;position:absolute}.mat-mdc-button:focus .mat-mdc-focus-indicator::before,.mat-mdc-unelevated-button:focus .mat-mdc-focus-indicator::before,.mat-mdc-raised-button:focus .mat-mdc-focus-indicator::before,.mat-mdc-outlined-button:focus .mat-mdc-focus-indicator::before{content:""}.mat-mdc-button[disabled],.mat-mdc-unelevated-button[disabled],.mat-mdc-raised-button[disabled],.mat-mdc-outlined-button[disabled]{cursor:default;pointer-events:none}.mat-mdc-button .mat-mdc-button-touch-target,.mat-mdc-unelevated-button .mat-mdc-button-touch-target,.mat-mdc-raised-button .mat-mdc-button-touch-target,.mat-mdc-outlined-button .mat-mdc-button-touch-target{position:absolute;top:50%;height:48px;left:0;right:0;transform:translateY(-50%)}.mat-mdc-button._mat-animation-noopable,.mat-mdc-unelevated-button._mat-animation-noopable,.mat-mdc-raised-button._mat-animation-noopable,.mat-mdc-outlined-button._mat-animation-noopable{transition:none !important;animation:none !important}.mat-mdc-button>.mat-icon{margin-left:0;margin-right:8px;display:inline-block;position:relative;vertical-align:top;font-size:1.125rem;height:1.125rem;width:1.125rem}[dir=rtl] .mat-mdc-button>.mat-icon,.mat-mdc-button>.mat-icon[dir=rtl]{margin-left:8px;margin-right:0}.mat-mdc-button .mdc-button__label+.mat-icon{margin-left:8px;margin-right:0}[dir=rtl] .mat-mdc-button .mdc-button__label+.mat-icon,.mat-mdc-button .mdc-button__label+.mat-icon[dir=rtl]{margin-left:0;margin-right:8px}.mat-mdc-unelevated-button>.mat-icon,.mat-mdc-raised-button>.mat-icon,.mat-mdc-outlined-button>.mat-icon{margin-left:0;margin-right:8px;display:inline-block;position:relative;vertical-align:top;font-size:1.125rem;height:1.125rem;width:1.125rem;margin-left:-4px;margin-right:8px}[dir=rtl] .mat-mdc-unelevated-button>.mat-icon,[dir=rtl] .mat-mdc-raised-button>.mat-icon,[dir=rtl] .mat-mdc-outlined-button>.mat-icon,.mat-mdc-unelevated-button>.mat-icon[dir=rtl],.mat-mdc-raised-button>.mat-icon[dir=rtl],.mat-mdc-outlined-button>.mat-icon[dir=rtl]{margin-left:8px;margin-right:0}[dir=rtl] .mat-mdc-unelevated-button>.mat-icon,[dir=rtl] .mat-mdc-raised-button>.mat-icon,[dir=rtl] .mat-mdc-outlined-button>.mat-icon,.mat-mdc-unelevated-button>.mat-icon[dir=rtl],.mat-mdc-raised-button>.mat-icon[dir=rtl],.mat-mdc-outlined-button>.mat-icon[dir=rtl]{margin-left:8px;margin-right:-4px}.mat-mdc-unelevated-button .mdc-button__label+.mat-icon,.mat-mdc-raised-button .mdc-button__label+.mat-icon,.mat-mdc-outlined-button .mdc-button__label+.mat-icon{margin-left:8px;margin-right:-4px}[dir=rtl] .mat-mdc-unelevated-button .mdc-button__label+.mat-icon,[dir=rtl] .mat-mdc-raised-button .mdc-button__label+.mat-icon,[dir=rtl] .mat-mdc-outlined-button .mdc-button__label+.mat-icon,.mat-mdc-unelevated-button .mdc-button__label+.mat-icon[dir=rtl],.mat-mdc-raised-button .mdc-button__label+.mat-icon[dir=rtl],.mat-mdc-outlined-button .mdc-button__label+.mat-icon[dir=rtl]{margin-left:-4px;margin-right:8px}.mat-mdc-outlined-button .mat-mdc-button-ripple,.mat-mdc-outlined-button .mdc-button__ripple{top:-1px;left:-1px;bottom:-1px;right:-1px;border-width:-1px}.mat-mdc-unelevated-button .mat-mdc-focus-indicator::before,.mat-mdc-raised-button .mat-mdc-focus-indicator::before{margin:calc(calc(var(--mat-mdc-focus-indicator-border-width, 3px) + 2px) * -1)}.mat-mdc-outlined-button .mat-mdc-focus-indicator::before{margin:calc(calc(var(--mat-mdc-focus-indicator-border-width, 3px) + 3px) * -1)}',".cdk-high-contrast-active .mat-mdc-button:not(.mdc-button--outlined),.cdk-high-contrast-active .mat-mdc-unelevated-button:not(.mdc-button--outlined),.cdk-high-contrast-active .mat-mdc-raised-button:not(.mdc-button--outlined),.cdk-high-contrast-active .mat-mdc-outlined-button:not(.mdc-button--outlined),.cdk-high-contrast-active .mat-mdc-icon-button{outline:solid 1px}"],encapsulation:2,changeDetection:0}),i})(),Fde=(()=>{class i extends GV{constructor(t,n,r,s){super(t,n,r,s)}}return i.\u0275fac=function(t){return new(t||i)(wt(Cs),wt(Ku),wt(mo),wt(_h,8))},i.\u0275cmp=Fr({type:i,selectors:[["button","mat-icon-button",""]],hostVars:7,hostBindings:function(t,n){2&t&&(Ea("disabled",n.disabled||null),jo("_mat-animation-noopable","NoopAnimations"===n._animationMode)("mat-unthemed",!n.color)("mat-mdc-button-base",!0))},inputs:{disabled:"disabled",disableRipple:"disableRipple",color:"color"},exportAs:["matButton"],features:[As],attrs:Ede,ngContentSelectors:Dde,decls:5,vars:3,consts:[[1,"mat-mdc-button-persistent-ripple","mdc-icon-button__ripple"],[1,"mat-mdc-focus-indicator"],["matRipple","",1,"mat-mdc-button-ripple",3,"matRippleDisabled","matRippleCentered","matRippleTrigger"],[1,"mat-mdc-button-touch-target"]],template:function(t,n){1&t&&(fh(),Pr(0,"span",0),uu(1),Pr(2,"span",1)(3,"span",2)(4,"span",3)),2&t&&(Nn(3),Cn("matRippleDisabled",n._isRippleDisabled())("matRippleCentered",!0)("matRippleTrigger",n._elementRef.nativeElement))},dependencies:[qA],styles:['.mdc-icon-button{font-size:24px;width:48px;height:48px;padding:12px}.mdc-icon-button .mdc-icon-button__focus-ring{max-height:48px;max-width:48px}.mdc-icon-button.mdc-icon-button--reduced-size .mdc-icon-button__ripple{width:40px;height:40px;margin-top:4px;margin-bottom:4px;margin-right:4px;margin-left:4px}.mdc-icon-button.mdc-icon-button--reduced-size .mdc-icon-button__focus-ring{max-height:40px;max-width:40px}.mdc-icon-button .mdc-icon-button__touch{position:absolute;top:50%;height:48px;left:50%;width:48px;transform:translate(-50%, -50%)}.mdc-icon-button svg,.mdc-icon-button img{width:24px;height:24px}.mdc-icon-button{display:inline-block;position:relative;box-sizing:border-box;border:none;outline:none;background-color:rgba(0,0,0,0);fill:currentColor;color:inherit;text-decoration:none;cursor:pointer;user-select:none;z-index:0;overflow:visible}.mdc-icon-button .mdc-icon-button__touch{position:absolute;top:50%;height:48px;left:50%;width:48px;transform:translate(-50%, -50%)}@media screen and (forced-colors: active){.mdc-icon-button.mdc-ripple-upgraded--background-focused .mdc-icon-button__focus-ring,.mdc-icon-button:not(.mdc-ripple-upgraded):focus .mdc-icon-button__focus-ring{display:block}}.mdc-icon-button:disabled{cursor:default;pointer-events:none}.mdc-icon-button[hidden]{display:none}.mdc-icon-button--display-flex{align-items:center;display:inline-flex;justify-content:center}.mdc-icon-button__focus-ring{pointer-events:none;border:2px solid rgba(0,0,0,0);border-radius:6px;box-sizing:content-box;position:absolute;top:50%;left:50%;transform:translate(-50%, -50%);height:100%;width:100%;display:none}@media screen and (forced-colors: active){.mdc-icon-button__focus-ring{border-color:CanvasText}}.mdc-icon-button__focus-ring::after{content:"";border:2px solid rgba(0,0,0,0);border-radius:8px;display:block;position:absolute;top:50%;left:50%;transform:translate(-50%, -50%);height:calc(100% + 4px);width:calc(100% + 4px)}@media screen and (forced-colors: active){.mdc-icon-button__focus-ring::after{border-color:CanvasText}}.mdc-icon-button__icon{display:inline-block}.mdc-icon-button__icon.mdc-icon-button__icon--on{display:none}.mdc-icon-button--on .mdc-icon-button__icon{display:none}.mdc-icon-button--on .mdc-icon-button__icon.mdc-icon-button__icon--on{display:inline-block}.mdc-icon-button__link{height:100%;left:0;outline:none;position:absolute;top:0;width:100%}.mat-mdc-icon-button{height:var(--mdc-icon-button-state-layer-size, 48px);width:var(--mdc-icon-button-state-layer-size, 48px);color:var(--mdc-icon-button-icon-color, inherit);border-radius:50%;flex-shrink:0;text-align:center;-webkit-tap-highlight-color:rgba(0,0,0,0)}.mat-mdc-icon-button .mdc-button__icon{font-size:var(--mdc-icon-button-icon-size, 24px)}.mat-mdc-icon-button svg,.mat-mdc-icon-button img{width:var(--mdc-icon-button-icon-size, 24px);height:var(--mdc-icon-button-icon-size, 24px)}.mat-mdc-icon-button:disabled{opacity:var(--mdc-icon-button-disabled-icon-opacity, 0.38)}.mat-mdc-icon-button:disabled{color:var(--mdc-icon-button-disabled-icon-color, #000)}.mat-mdc-icon-button svg{vertical-align:baseline}.mat-mdc-icon-button[disabled]{cursor:default;pointer-events:none;opacity:1}.mat-mdc-icon-button .mat-mdc-button-ripple,.mat-mdc-icon-button .mat-mdc-button-persistent-ripple,.mat-mdc-icon-button .mat-mdc-button-persistent-ripple::before{top:0;left:0;right:0;bottom:0;position:absolute;pointer-events:none;border-radius:inherit}.mat-mdc-icon-button .mat-mdc-button-persistent-ripple::before{content:"";opacity:0;background-color:var(--mat-mdc-button-persistent-ripple-color)}.mat-mdc-icon-button .mat-ripple-element{background-color:var(--mat-mdc-button-ripple-color)}.mat-mdc-icon-button .mdc-button__label{z-index:1}.mat-mdc-icon-button .mat-mdc-focus-indicator{top:0;left:0;right:0;bottom:0;position:absolute}.mat-mdc-icon-button:focus .mat-mdc-focus-indicator::before{content:""}.mat-mdc-icon-button .mat-mdc-button-touch-target{position:absolute;top:50%;height:48px;left:50%;width:48px;transform:translate(-50%, -50%)}.mat-mdc-icon-button._mat-animation-noopable{transition:none !important;animation:none !important}.mat-mdc-icon-button .mat-mdc-button-persistent-ripple{border-radius:50%}.mat-mdc-icon-button.mat-unthemed:not(.mdc-ripple-upgraded):focus::before,.mat-mdc-icon-button.mat-primary:not(.mdc-ripple-upgraded):focus::before,.mat-mdc-icon-button.mat-accent:not(.mdc-ripple-upgraded):focus::before,.mat-mdc-icon-button.mat-warn:not(.mdc-ripple-upgraded):focus::before{background:rgba(0,0,0,0);opacity:1}',".cdk-high-contrast-active .mat-mdc-button:not(.mdc-button--outlined),.cdk-high-contrast-active .mat-mdc-unelevated-button:not(.mdc-button--outlined),.cdk-high-contrast-active .mat-mdc-raised-button:not(.mdc-button--outlined),.cdk-high-contrast-active .mat-mdc-outlined-button:not(.mdc-button--outlined),.cdk-high-contrast-active .mat-mdc-icon-button{outline:solid 1px}"],encapsulation:2,changeDetection:0}),i})(),Ode=(()=>{class i{}return i.\u0275fac=function(t){return new(t||i)},i.\u0275mod=ia({type:i}),i.\u0275inj=ft({imports:[Pu,Fb,Pu]}),i})();function Rde(i,e){if(1&i){const t=Za();bd(0),Zt(1,"input",28,29),Fi("change",function(r){return ys(ks(t).$implicit.handler(r.target.files))}),un(),Zt(3,"button",8),Fi("click",function(){return ks(t),ys(bl(2).click())}),Pr(4,"img",30),dr(5),un(),dh()}if(2&i){const t=e.$implicit;Nn(1),Cn("accept",t.accept),Nn(4),Gl(" Load ",t.fileType," ")}}function Lde(i,e){if(1&i&&(Zt(0,"div")(1,"p",4)(2,"b"),dr(3,"Event data"),un()(),Zt(4,"div",5),qr(5,Rde,6,2,"ng-container",27),un()()),2&i){const t=Mr();Nn(5),Cn("ngForOf",t.eventDataOptionsWithHandler)}}class I2{constructor(e,t){Wt(this,"eventDisplay",void 0),Wt(this,"dialogRef",void 0),Wt(this,"eventDataImportOptions",[Xh.JSON]),Wt(this,"eventDataOptionsWithHandler",void 0),Wt(this,"supportedEventDataFormats",[new Bb(Xh.JSON,".json",this.handleJSONEventDataInput.bind(this),"application/json"),new Bb(Xh.EDM4HEPJSON,".edm4hep.json",this.handleEDM4HEPJSONEventDataInput.bind(this),"application/json"),new Bb(Xh.JIVEXML,".xml",this.handleJiveXMLDataInput.bind(this),"text/xml"),new Bb(Xh.ZIP,".zip",this.handleZipEventDataInput.bind(this),".zip"),new Bb(Xh.IG,".ig",this.handleIgEventDataInput.bind(this),".ig")]),this.eventDisplay=e,this.dialogRef=t}ngOnInit(){this.eventDataOptionsWithHandler=this.supportedEventDataFormats.filter(e=>this.eventDataImportOptions.includes(e.format)),this.eventDataImportOptions.forEach(e=>{if(e instanceof Bb){const t=e.handler.bind(this);e.handler=n=>{t(n),this.onClose()},this.eventDataOptionsWithHandler.push(e)}})}getSupportedEventDataFormats(){return this.eventDataImportOptions.map(e=>e instanceof Bb?e.format:e).filter(e=>"ZIP"!==e).join(", ")}onClose(){this.dialogRef.close()}handleJSONEventDataInput(e){this.handleFileInput(e[0],"json",n=>{const r="string"==typeof n?JSON.parse(n):n;this.eventDisplay.parsePhoenixEvents(r)})}handleEDM4HEPJSONEventDataInput(e){this.handleFileInput(e[0],"json",n=>{const r="string"==typeof n?JSON.parse(n):n,s=new bae;s.setRawEventData(r),s.processEventData(),this.eventDisplay.parsePhoenixEvents(s.getEventData())})}handleJiveXMLDataInput(e){this.handleFileInput(e[0],"xml",n=>{const r=new xS;r.process(n);const s=r.getEventData();this.eventDisplay.buildEventDataFromJSON(s)})}handleOBJInput(e){this.handleFileInput(e[0],"obj",(n,r)=>{this.eventDisplay.parseOBJGeometry(n,r)})}handleSceneInput(e){this.handleFileInput(e[0],"phnx",n=>{this.eventDisplay.parsePhoenixDisplay(n)})}handleGLTFInput(e){this.handleFileInput(e[0],"gltf",(n,r)=>{this.eventDisplay.parseGLTFGeometry(n,r)})}handlePhoenixInput(e){this.handleFileInput(e[0],"phnx",n=>{this.eventDisplay.parsePhoenixDisplay(n)})}handleROOTInput(e){var t=this;return(0,Np.Z)(function*(){const n=prompt("Enter object name in ROOT file");yield t.eventDisplay.loadRootGeometry(URL.createObjectURL(e[0]),n,e[0].name.split(".")[0]),t.onClose()})()}handleRootJSONInput(e){var t=this;return(0,Np.Z)(function*(){if(!t.isFileOfExtension(e[0],"gz"))return;const n=e[0].name.split(".")[0];yield t.eventDisplay.loadRootJSONGeometry(URL.createObjectURL(e[0]),n),t.onClose()})()}handleIgEventDataInput(e){const t=new JU;t.readIgArchive(e[0],n=>{const r=t.getAllEventsData(n);this.eventDisplay.parsePhoenixEvents(r),this.onClose()})}handleZipEventDataInput(e){var t=this;return(0,Np.Z)(function*(){if(!t.isFileOfExtension(e[0],"zip"))return;const n={};let r;try{r=yield ZU(e[0])}catch(a){return console.error("Error while reading zip",a),void t.eventDisplay.getInfoLogger().add("Could not read zip file","Error")}Object.keys(r).filter(a=>a.endsWith(".json")).forEach(a=>{Object.assign(n,JSON.parse(r[a]))});const s=new xS;Object.keys(r).filter(a=>a.endsWith(".xml")||a.startsWith("JiveXML")).forEach(a=>{s.process(r[a]);const l=s.getEventData();Object.assign(n,{[a]:l})}),t.eventDisplay.parsePhoenixEvents(n),t.onClose()})()}handleFileInput(e,t,n){const r=new FileReader;this.isFileOfExtension(e,t)&&(r.onload=()=>{n(r.result.toString(),e.name.split(".")[0])},r.readAsText(e)),this.onClose()}isFileOfExtension(e,t){return e.name.split(".").pop()===t||(console.error("Error: Invalid file format!"),this.eventDisplay.getInfoLogger().add("Invalid file format!","Error"),!1)}saveScene(){this.eventDisplay.exportPhoenixDisplay()}exportOBJ(){this.eventDisplay.exportToOBJ()}}Wt(I2,"\u0275fac",function(e){return new(e||I2)(wt(Qa),wt(JS))}),Wt(I2,"\u0275cmp",Fr({type:I2,selectors:[["app-io-options-dialog"]],inputs:{eventDataImportOptions:"eventDataImportOptions"},decls:47,vars:1,consts:[[1,"dialog"],["mat-dialog-title",""],["mat-dialog-content","",1,"dialog-content"],[4,"ngIf"],[1,"text-center"],[1,"row","centered"],["type","file","tabindex","-1","accept",".obj","name","image",1,"file-input",3,"change"],["objFileInput",""],[1,"file-input-button",3,"click"],["src","assets/icons/obj.svg","alt",""],["type","file","tabindex","-1","accept",".gltf","name","image",1,"file-input",3,"change"],["gltfFileInput",""],["src","assets/icons/gltf.svg","alt",""],["type","file","tabindex","-1","accept",".root",1,"file-input",3,"change"],["rootFileInput",""],["src","assets/icons/file-import.svg","alt",""],["type","file","tabindex","-1","accept",".json.gz",1,"file-input",3,"change"],["rootJSONFileInput",""],["id","exportScene",1,"file-input-button","load-export",3,"click"],["src","assets/icons/save.svg","alt",""],["type","file","tabindex","-1","accept",".phnx","name","image",1,"file-input",3,"change"],["loadSceneInput",""],["id","importScene",1,"file-input-button","load-export",3,"click"],["src","assets/icons/upload.svg","alt",""],["id","exportOBJ",1,"file-input-button","export-button",3,"click"],["mat-dialog-actions","","align","end"],["mat-flat-button","","color","primary","cdkFocusInitial","",3,"click"],[4,"ngFor","ngForOf"],["type","file","tabindex","-1",1,"file-input",3,"accept","change"],["eventDataFileInput",""],["src","assets/icons/eventData.svg","alt","Event data icon"]],template:function(e,t){if(1&e){const n=Za();Zt(0,"div",0)(1,"h1",1),dr(2,"Import and export"),un(),Zt(3,"div",2),qr(4,Lde,6,1,"div",3),Zt(5,"p",4)(6,"b"),dr(7,"Geometries"),un()(),Zt(8,"div",5)(9,"input",6,7),Fi("change",function(s){return t.handleOBJInput(s.target.files)}),un(),Zt(11,"button",8),Fi("click",function(){return ks(n),ys(bl(10).click())}),Pr(12,"img",9),dr(13," Load .obj "),un(),Zt(14,"input",10,11),Fi("change",function(s){return t.handleGLTFInput(s.target.files)}),un(),Zt(16,"button",8),Fi("click",function(){return ks(n),ys(bl(15).click())}),Pr(17,"img",12),dr(18," Load .gltf "),un(),Zt(19,"input",13,14),Fi("change",function(s){return t.handleROOTInput(s.target.files)}),un(),Zt(21,"button",8),Fi("click",function(){return ks(n),ys(bl(20).click())}),Pr(22,"img",15),dr(23," Load .root "),un(),Zt(24,"input",16,17),Fi("change",function(s){return t.handleRootJSONInput(s.target.files)}),un(),Zt(26,"button",8),Fi("click",function(){return ks(n),ys(bl(25).click())}),Pr(27,"img",15),dr(28," Load .json.gz "),un()(),Zt(29,"p",4)(30,"b"),dr(31,"Scene"),un()(),Zt(32,"div",5)(33,"button",18),Fi("click",function(){return t.saveScene()}),Pr(34,"img",19),dr(35," Save scene "),un(),Zt(36,"input",20,21),Fi("change",function(s){return t.handlePhoenixInput(s.target.files)}),un(),Zt(38,"button",22),Fi("click",function(){return ks(n),ys(bl(37).click())}),Pr(39,"img",23),dr(40," Load scene "),un(),Zt(41,"button",24),Fi("click",function(){return t.exportOBJ()}),Pr(42,"img",9),dr(43," Save OBJ "),un()()(),Zt(44,"div",25)(45,"button",26),Fi("click",function(){return t.onClose()}),dr(46," Close "),un()()()}2&e&&(Nn(4),Cn("ngIf",t.eventDataImportOptions.length>0))},dependencies:[Sf,Tu,AO,mO,gO,t3],styles:[".row[_ngcontent-%COMP%]{justify-content:center;margin:1rem 0}.file-input[_ngcontent-%COMP%]{width:.1px;height:.1px;opacity:0;overflow:hidden;position:absolute;z-index:-1}.file-input-button[_ngcontent-%COMP%]{font-size:1em;font-weight:700;color:#fff;background-color:#6eaece;padding:1em .5em;border:none;border-radius:10px;width:8rem;margin:0 .4rem}.file-input-button.load-export[_ngcontent-%COMP%]{padding:.8em .2em;width:7rem}.file-input-button.load-export[_ngcontent-%COMP%] img[_ngcontent-%COMP%]{max-height:1.2em}.file-input-button.export-button[_ngcontent-%COMP%]{background-color:#cb7133}.file-input-button.export-button[_ngcontent-%COMP%]:hover{background-color:#ad5b2d}.file-input-button[_ngcontent-%COMP%] img[_ngcontent-%COMP%]{max-height:2em;display:block;width:100%}.file-input-button[_ngcontent-%COMP%]:hover{background-color:#118ab2}#exportScene[_ngcontent-%COMP%]{background-color:#5bd99e}#exportScene[_ngcontent-%COMP%]:hover{background-color:#05c292}#importScene[_ngcontent-%COMP%]{background-color:#ecc25e}#importScene[_ngcontent-%COMP%]:hover{background-color:#d6b44d}"]}));class qb{constructor(e){Wt(this,"dialog",void 0),Wt(this,"eventDataImportOptions",Object.values(Xh)),this.dialog=e}openIODialog(){this.dialog.open(I2,{panelClass:"dialog"}).componentInstance.eventDataImportOptions=this.eventDataImportOptions}}Wt(qb,"\u0275fac",function(e){return new(e||qb)(wt(e3))}),Wt(qb,"\u0275cmp",Fr({type:qb,selectors:[["app-io-options"]],inputs:{eventDataImportOptions:"eventDataImportOptions"},decls:1,vars:1,consts:[["tooltip","Import and export options","icon","import",3,"active","click"]],template:function(e,t){1&e&&(Zt(0,"app-menu-toggle",0),Fi("click",function(){return t.openIODialog()}),un()),2&e&&Cn("active",!1)},dependencies:[Ql]}));const Nde=["overlayWindow"];class P2{constructor(e){Wt(this,"eventDisplay",void 0),Wt(this,"showOverlay",!0),Wt(this,"transparentBody",!1),Wt(this,"orthographicView",!1),Wt(this,"overlayViewFixed",!1),Wt(this,"overlayWindow",void 0),this.eventDisplay=e}ngAfterViewInit(){const e=this.initializeCanvas(this.overlayWindow.nativeElement);this.eventDisplay.setOverlayRenderer(e)}initializeCanvas(e){const t=window.innerWidth/2.5,n=window.innerHeight/2.5;return e.width=t,e.height=n,e.style.width=t.toString()+" px",e.style.height=n.toString()+" px",e}switchOverlayView(){this.orthographicView=!this.orthographicView,this.eventDisplay.getUIManager().toggleOrthographicView(this.orthographicView)}fixOverlayView(){this.overlayViewFixed=!this.overlayViewFixed,this.eventDisplay.fixOverlayView(this.overlayViewFixed)}toggleBgTransparency(){this.transparentBody=!this.transparentBody}}Wt(P2,"\u0275fac",function(e){return new(e||P2)(wt(Qa))}),Wt(P2,"\u0275cmp",Fr({type:P2,selectors:[["app-overlay-view-window"]],viewQuery:function(e,t){if(1&e&&la(Nde,5),2&e){let n;so(n=oo())&&(t.overlayWindow=n.first)}},inputs:{showOverlay:"showOverlay"},decls:8,vars:9,consts:[["overlayTitle","Overlay View","icon","overlay",3,"resizable","transparentBody","active","keepAspectRatioFixed"],[1,"overlay-view-wrapper"],["id","overlay-canvas",3,"hidden"],["overlayWindow",""],[1,"overlay-view-controls","position-absolute","d-flex","flex-row"],["icon","transparent","matTooltip","Toggle background transparency",1,"overlay-view-control",3,"click"],["icon","move-lock",1,"overlay-view-control",3,"matTooltip","active","click"],[1,"overlay-view-control",3,"icon","matTooltip","click"]],template:function(e,t){1&e&&(Zt(0,"app-overlay",0)(1,"div",1),Pr(2,"canvas",2,3),Zt(4,"div",4)(5,"app-menu-toggle",5),Fi("click",function(){return t.toggleBgTransparency()}),un(),Zt(6,"app-menu-toggle",6),Fi("click",function(){return t.fixOverlayView()}),un(),Zt(7,"app-menu-toggle",7),Fi("click",function(){return t.switchOverlayView()}),un()()()()),2&e&&(Cn("resizable",!0)("transparentBody",t.transparentBody)("active",t.showOverlay)("keepAspectRatioFixed",!0),Nn(2),Cn("hidden",!t.showOverlay),Nn(4),Cn("matTooltip",(t.overlayViewFixed?"Restore":"Fix")+" overlay view")("active",t.overlayViewFixed),Nn(1),Cn("icon",t.orthographicView?"orthographic":"perspective")("matTooltip","Switch to "+(t.orthographicView?"orthographic":"perspective")+" view"))},dependencies:[Nb,Ql,W_],styles:["#overlay-canvas[_ngcontent-%COMP%]{background-color:#0000001a;width:100%}.overlay-view-controls[_ngcontent-%COMP%]{bottom:1em;right:1em;opacity:0;transition:opacity .2s}.overlay-view-controls[_ngcontent-%COMP%] .overlay-view-control[_ngcontent-%COMP%]{background:var(--phoenix-background-color-secondary);box-shadow:var(--phoenix-box-shadow);overflow:hidden;width:2.5rem;height:2.5rem;border-radius:50%;display:flex;justify-content:center;align-items:center}.overlay-view-wrapper[_ngcontent-%COMP%]:hover .overlay-view-controls[_ngcontent-%COMP%]{opacity:1;transition:opacity .2s}"]}));class Qb{constructor(e){Wt(this,"overlay",void 0),Wt(this,"overlayWindow",void 0),Wt(this,"showOverlay",!1),this.overlay=e}ngOnInit(){const e=this.overlay.create(),t=new Ty(P2);this.overlayWindow=e.attach(t),this.overlayWindow.instance.showOverlay=this.showOverlay}ngOnDestroy(){this.overlayWindow.destroy()}toggleOverlay(){this.showOverlay=!this.showOverlay,this.overlayWindow.instance.showOverlay=this.showOverlay}}Wt(Qb,"\u0275fac",function(e){return new(e||Qb)(wt(ap))}),Wt(Qb,"\u0275cmp",Fr({type:Qb,selectors:[["app-overlay-view"]],decls:1,vars:1,consts:[["tooltip","Overlay view","icon","overlay",3,"active","click"]],template:function(e,t){1&e&&(Zt(0,"app-menu-toggle",0),Fi("click",function(){return t.toggleOverlay()}),un()),2&e&&Cn("active",t.showOverlay)},dependencies:[Ql]}));class k2{transform(e,t){let n="";return Array.isArray(e)?(n+="\n",e.forEach(r=>n+=r+"\n")):n=e.toString(),n}}function Ude(i,e){if(1&i&&(Zt(0,"div",4)(1,"strong"),dr(2),un(),dr(3),function ER(i,e){const t=ga();let n;const r=i+22;t.firstCreatePass?(n=function Vq(i,e){if(e)for(let t=e.length-1;t>=0;t--){const n=e[t];if(i===n.name)return n}}(e,t.pipeRegistry),t.data[r]=n,n.onDestroy&&(t.destroyHooks||(t.destroyHooks=[])).push(r,n.onDestroy)):n=t.data[r];const s=n.factory||(n.factory=td(n.type)),a=es(wt);try{const l=Ap(!1),u=s();return Ap(l),function lR(i,e,t,n){t>=i.data.length&&(i.data[t]=null,i.blueprint[t]=null),e[t]=n}(t,er(),r,u),u}finally{es(a)}}(4,"attributePipe"),un()),2&i){const t=e.$implicit;Nn(2),ph(t.attributeName),Nn(1),Gl(" : ",function DR(i,e,t){const n=i+22,r=er(),s=id(r,n);return function YC(i,e){return i[1].data[e].pure}(r,n)?wR(r,$l(),e,s.transform,t,s):s.transform(t)}(4,2,t.attributeValue)," ")}}function zde(i,e){if(1&i&&(Zt(0,"div",2),qr(1,Ude,5,4,"div",3),un()),2&i){const t=Mr();Nn(1),Cn("ngForOf",t.selectedObject.attributes)}}Wt(k2,"\u0275fac",function(e){return new(e||k2)}),Wt(k2,"\u0275pipe",hc({name:"attributePipe",type:k2,pure:!0}));class F2{constructor(e){Wt(this,"eventDisplay",void 0),Wt(this,"hiddenSelectedInfo",void 0),Wt(this,"selectedObject",{name:"Object",attributes:[]}),this.eventDisplay=e}ngOnInit(){this.eventDisplay.allowSelection(this.selectedObject)}}Wt(F2,"\u0275fac",function(e){return new(e||F2)(wt(Qa))}),Wt(F2,"\u0275cmp",Fr({type:F2,selectors:[["app-object-selection-overlay"]],inputs:{hiddenSelectedInfo:"hiddenSelectedInfo"},decls:2,vars:3,consts:[["icon","cursor",3,"overlayTitle","active"],["id","selectedObjectPanelBody","class","m-1",4,"ngIf"],["id","selectedObjectPanelBody",1,"m-1"],["class","attributeField",4,"ngFor","ngForOf"],[1,"attributeField"]],template:function(e,t){1&e&&(Zt(0,"app-overlay",0),qr(1,zde,2,1,"div",1),un()),2&e&&(Cn("overlayTitle",t.selectedObject.name)("active",!t.hiddenSelectedInfo),Nn(1),Cn("ngIf",t.selectedObject.attributes.length>0))},dependencies:[Sf,Tu,W_,k2],styles:["#selectedObjectPanelBody[_ngcontent-%COMP%]{padding:0 .8em;overflow:auto;max-width:300px;max-height:16rem;min-width:7rem}"]}));class Wb{constructor(e,t){Wt(this,"overlay",void 0),Wt(this,"eventDisplay",void 0),Wt(this,"hiddenSelectedInfo",!0),Wt(this,"overlayWindow",void 0),this.overlay=e,this.eventDisplay=t}ngOnInit(){const e=this.overlay.create(),t=new Ty(F2);this.overlayWindow=e.attach(t),this.overlayWindow.instance.hiddenSelectedInfo=this.hiddenSelectedInfo}ngOnDestroy(){this.overlayWindow.destroy()}toggleOverlay(){this.hiddenSelectedInfo=!this.hiddenSelectedInfo,this.overlayWindow.instance.hiddenSelectedInfo=this.hiddenSelectedInfo,this.eventDisplay.enableSelecting(!this.hiddenSelectedInfo)}}function Hde(i,e){if(1&i&&(Zt(0,"option",4),dr(1),un()),2&i){const t=e.$implicit;Cn("value",t),Nn(1),Gl(" ",t," ")}}function Vde(i,e){if(1&i){const t=Za();Zt(0,"div",1)(1,"select",2),Fi("change",function(r){return ks(t),ys(Mr().changeEvent(r))}),qr(2,Hde,2,2,"option",3),un()()}if(2&i){const t=Mr();Nn(2),Cn("ngForOf",t.events)}}Wt(Wb,"\u0275fac",function(e){return new(e||Wb)(wt(ap),wt(Qa))}),Wt(Wb,"\u0275cmp",Fr({type:Wb,selectors:[["app-object-selection"]],decls:1,vars:1,consts:[["tooltip","Object selection","icon","cursor",3,"active","click"]],template:function(e,t){1&e&&(Zt(0,"app-menu-toggle",0),Fi("click",function(){return t.toggleOverlay()}),un()),2&e&&Cn("active",!t.hiddenSelectedInfo)},dependencies:[Ql]}));class jb{constructor(e){Wt(this,"eventDisplay",void 0),Wt(this,"events",void 0),this.eventDisplay=e}ngOnInit(){this.eventDisplay.listenToLoadedEventsChange(e=>this.events=e)}changeEvent(e){this.eventDisplay.loadEvent(e.target.value)}}Wt(jb,"\u0275fac",function(e){return new(e||jb)(wt(Qa))}),Wt(jb,"\u0275cmp",Fr({type:jb,selectors:[["app-event-selector"]],decls:1,vars:1,consts:[["class","eventSelector mx-2","matTooltip","Event selector","matTooltipPosition","above",4,"ngIf"],["matTooltip","Event selector","matTooltipPosition","above",1,"eventSelector","mx-2"],["name","event",3,"change"],[3,"value",4,"ngFor","ngForOf"],[3,"value"]],template:function(e,t){1&e&&qr(0,Vde,3,1,"div",0),2&e&&Cn("ngIf",null!=t.events)},dependencies:[Sf,Tu,Nb,$S,XS],styles:[".eventSelector[_ngcontent-%COMP%] select[_ngcontent-%COMP%]{width:9rem;padding:5px 10px;font-size:12px;border:1px solid rgba(88,88,88,.08);box-shadow:var(--phoenix-icon-shadow);background-color:var(--phoenix-background-color-tertiary);color:var(--phoenix-text-color-secondary)}"]}));const Gde=["knob"],qde=["valueIndicatorContainer"];function Qde(i,e){if(1&i&&(Zt(0,"div",4,5)(2,"div",6)(3,"span",7),dr(4),un()()()),2&i){const t=Mr();Nn(4),ph(t.valueIndicatorText)}}const Wde=["trackActive"];function jde(i,e){if(1&i&&Pr(0,"div"),2&i){const t=e.$implicit,n=e.index,r=Mr(3);(function X1(i){Rp(zu,jd,i,!0)})(0===t?"mdc-slider__tick-mark--active":"mdc-slider__tick-mark--inactive"),Fp("transform",r._calcTickMarkTransform(n))}}function $de(i,e){if(1&i&&(bd(0),qr(1,jde,1,4,"div",11),dh()),2&i){const t=Mr(2);Nn(1),Cn("ngForOf",t._tickMarks)}}function Xde(i,e){if(1&i&&(Zt(0,"div",8,9),qr(2,$de,2,1,"ng-container",10),un()),2&i){const t=Mr();Nn(2),Cn("ngIf",t._cachedWidth)}}function Kde(i,e){if(1&i&&Pr(0,"mat-slider-visual-thumb",7),2&i){const t=Mr();Cn("discrete",t.discrete)("thumbPosition",1)("valueIndicatorText",t.startValueIndicatorText)}}const Yde=["*"],FD=new cr("_MatSlider"),qV=new cr("_MatSliderThumb"),QV=new cr("_MatSliderRangeThumb"),WV=new cr("_MatSliderVisualThumb");let Zde=(()=>{class i{constructor(t,n,r,s){this._cdr=t,this._ngZone=n,this._slider=s,this._isHovered=!1,this._isActive=!1,this._isValueIndicatorVisible=!1,this._onPointerMove=a=>{if(this._sliderInput._isFocused)return;const l=this._hostElement.getBoundingClientRect(),u=this._isSliderThumbHovered(a,l);this._isHovered=u,u?this._showHoverRipple():this._hideRipple(this._hoverRippleRef)},this._onMouseLeave=()=>{this._isHovered=!1,this._hideRipple(this._hoverRippleRef)},this._onFocus=()=>{this._hideRipple(this._hoverRippleRef),this._showFocusRipple(),this._hostElement.classList.add("mdc-slider__thumb--focused")},this._onBlur=()=>{this._isActive||this._hideRipple(this._focusRippleRef),this._isHovered&&this._showHoverRipple(),this._hostElement.classList.remove("mdc-slider__thumb--focused")},this._onDragStart=()=>{this._isActive=!0,this._showActiveRipple()},this._onDragEnd=()=>{this._isActive=!1,this._hideRipple(this._activeRippleRef),this._sliderInput._isFocused||this._hideRipple(this._focusRippleRef)},this._hostElement=r.nativeElement}ngAfterViewInit(){this._ripple.radius=24,this._sliderInput=this._slider._getInput(this.thumbPosition),this._sliderInputEl=this._sliderInput._hostElement;const t=this._sliderInputEl;this._ngZone.runOutsideAngular(()=>{t.addEventListener("pointermove",this._onPointerMove),t.addEventListener("pointerdown",this._onDragStart),t.addEventListener("pointerup",this._onDragEnd),t.addEventListener("pointerleave",this._onMouseLeave),t.addEventListener("focus",this._onFocus),t.addEventListener("blur",this._onBlur)})}ngOnDestroy(){const t=this._sliderInputEl;t.removeEventListener("pointermove",this._onPointerMove),t.removeEventListener("pointerdown",this._onDragStart),t.removeEventListener("pointerup",this._onDragEnd),t.removeEventListener("pointerleave",this._onMouseLeave),t.removeEventListener("focus",this._onFocus),t.removeEventListener("blur",this._onBlur)}_showHoverRipple(){this._isShowingRipple(this._hoverRippleRef)||(this._hoverRippleRef=this._showRipple({enterDuration:0,exitDuration:0}),this._hoverRippleRef?.element.classList.add("mat-mdc-slider-hover-ripple"))}_showFocusRipple(){this._isShowingRipple(this._focusRippleRef)||(this._focusRippleRef=this._showRipple({enterDuration:0,exitDuration:0},!0),this._focusRippleRef?.element.classList.add("mat-mdc-slider-focus-ripple"))}_showActiveRipple(){this._isShowingRipple(this._activeRippleRef)||(this._activeRippleRef=this._showRipple({enterDuration:225,exitDuration:400}),this._activeRippleRef?.element.classList.add("mat-mdc-slider-active-ripple"))}_isShowingRipple(t){return 0===t?.state||1===t?.state}_showRipple(t,n){if(!this._slider.disabled&&(this._showValueIndicator(),this._slider._isRange&&this._slider._getThumb(1===this.thumbPosition?2:1)._showValueIndicator(),!this._slider._globalRippleOptions?.disabled||n))return this._ripple.launch({animation:this._slider._noopAnimations?{enterDuration:0,exitDuration:0}:t,centered:!0,persistent:!0})}_hideRipple(t){if(t?.fadeOut(),this._isShowingAnyRipple())return;this._slider._isRange||this._hideValueIndicator();const n=this._getSibling();n._isShowingAnyRipple()||(this._hideValueIndicator(),n._hideValueIndicator())}_showValueIndicator(){this._hostElement.classList.add("mdc-slider__thumb--with-indicator")}_hideValueIndicator(){this._hostElement.classList.remove("mdc-slider__thumb--with-indicator")}_getSibling(){return this._slider._getThumb(1===this.thumbPosition?2:1)}_getValueIndicatorContainer(){return this._valueIndicatorContainer?.nativeElement}_getKnob(){return this._knob.nativeElement}_isShowingAnyRipple(){return this._isShowingRipple(this._hoverRippleRef)||this._isShowingRipple(this._focusRippleRef)||this._isShowingRipple(this._activeRippleRef)}_isSliderThumbHovered(t,n){const r=n.width/2,u=t.clientY-(n.y+r);return Math.pow(t.clientX-(n.x+r),2)+Math.pow(u,2){class i extends Jde{get disabled(){return this._disabled}set disabled(t){this._disabled=pa(t);const n=this._getInput(2),r=this._getInput(1);n&&(n.disabled=this._disabled),r&&(r.disabled=this._disabled)}get discrete(){return this._discrete}set discrete(t){this._discrete=pa(t),this._updateValueIndicatorUIs()}get showTickMarks(){return this._showTickMarks}set showTickMarks(t){this._showTickMarks=pa(t)}get min(){return this._min}set min(t){const n=gc(t,this._min);this._min!==n&&this._updateMin(n)}_updateMin(t){const n=this._min;this._min=t,this._isRange?this._updateMinRange({old:n,new:t}):this._updateMinNonRange(t),this._onMinMaxOrStepChange()}_updateMinRange(t){const n=this._getInput(2),r=this._getInput(1),s=n.value,a=r.value;r.min=t.new,n.min=Math.max(t.new,r.value),r.max=Math.min(n.max,n.value),r._updateWidthInactive(),n._updateWidthInactive(),t.newt.old?this._onTranslateXChangeBySideEffect(r,n):this._onTranslateXChangeBySideEffect(n,r),s!==n.value&&this._onValueChange(n),a!==r.value&&this._onValueChange(r)}_updateMaxNonRange(t){const n=this._getInput(2);if(n){const r=n.value;n.max=t,n._updateThumbUIByValue(),this._updateTrackUI(n),r!==n.value&&this._onValueChange(n)}}get step(){return this._step}set step(t){const n=gc(t,this._step);this._step!==n&&this._updateStep(n)}_updateStep(t){this._step=t,this._isRange?this._updateStepRange():this._updateStepNonRange(),this._onMinMaxOrStepChange()}_updateStepRange(){const t=this._getInput(2),n=this._getInput(1),r=t.value,s=n.value,a=n.value;t.min=this._min,n.max=this._max,t.step=this._step,n.step=this._step,this._platform.SAFARI&&(t.value=t.value,n.value=n.value),t.min=Math.max(this._min,n.value),n.max=Math.min(this._max,t.value),n._updateWidthInactive(),t._updateWidthInactive(),t.value`${d}`,this._rippleRadius=24,this.startValueIndicatorText="",this.endValueIndicatorText="",this._isRange=!1,this._isRtl=!1,this._hasViewInitialized=!1,this._tickMarkTrackWidth=0,this._hasAnimation=!1,this._resizeTimer=null,this._knobRadius=8,this._thumbsOverlap=!1,this._noopAnimations="NoopAnimations"===u,this._dirChangeSubscription=this._dir.change.subscribe(()=>this._onDirChange()),this._isRtl="rtl"===this._dir.value}ngAfterViewInit(){this._platform.isBrowser&&this._updateDimensions();const t=this._getInput(2),n=this._getInput(1);this._isRange=!!t&&!!n,this._cdr.detectChanges();const r=this._getThumb(2);this._rippleRadius=r._ripple.radius,this._inputPadding=this._rippleRadius-this._knobRadius,this._inputOffset=this._knobRadius,this._isRange?this._initUIRange(t,n):this._initUINonRange(t),this._updateTrackUI(t),this._updateTickMarkUI(),this._updateTickMarkTrackUI(),this._observeHostResize(),this._cdr.detectChanges()}_initUINonRange(t){t.initProps(),t.initUI(),this._updateValueIndicatorUI(t),this._hasViewInitialized=!0,t._updateThumbUIByValue()}_initUIRange(t,n){t.initProps(),t.initUI(),n.initProps(),n.initUI(),t._updateMinMax(),n._updateMinMax(),t._updateStaticStyles(),n._updateStaticStyles(),this._updateValueIndicatorUIs(),this._hasViewInitialized=!0,t._updateThumbUIByValue(),n._updateThumbUIByValue()}ngOnDestroy(){this._dirChangeSubscription.unsubscribe(),this._resizeObserver?.disconnect(),this._resizeObserver=null}_onDirChange(){this._isRtl="rtl"===this._dir.value,this._isRange?this._onDirChangeRange():this._onDirChangeNonRange(),this._updateTickMarkUI()}_onDirChangeRange(){const t=this._getInput(2),n=this._getInput(1);t._setIsLeftThumb(),n._setIsLeftThumb(),t.translateX=t._calcTranslateXByValue(),n.translateX=n._calcTranslateXByValue(),t._updateStaticStyles(),n._updateStaticStyles(),t._updateWidthInactive(),n._updateWidthInactive(),t._updateThumbUIByValue(),n._updateThumbUIByValue()}_onDirChangeNonRange(){this._getInput(2)._updateThumbUIByValue()}_observeHostResize(){typeof ResizeObserver>"u"||!ResizeObserver||this._ngZone.runOutsideAngular(()=>{this._resizeObserver=new ResizeObserver(()=>{this._isActive()||(this._resizeTimer&&clearTimeout(this._resizeTimer),this._onResize())}),this._resizeObserver.observe(this._elementRef.nativeElement)})}_isActive(){return this._getThumb(1)._isActive||this._getThumb(2)._isActive}_getValue(t=2){const n=this._getInput(t);return n?n.value:this.min}_skipUpdate(){return!(!this._getInput(1)?._skipUIUpdate&&!this._getInput(2)?._skipUIUpdate)}_updateDimensions(){this._cachedWidth=this._elementRef.nativeElement.offsetWidth,this._cachedLeft=this._elementRef.nativeElement.getBoundingClientRect().left}_setTrackActiveStyles(t){const n=this._trackActive.nativeElement.style,r=t.left!==n.left&&t.right!==n.right;n.left=t.left,n.right=t.right,n.transformOrigin=t.transformOrigin,r?(this._elementRef.nativeElement.classList.add("mat-mdc-slider-disable-track-animation"),this._ngZone.onStable.pipe(nu(1)).subscribe(()=>{this._elementRef.nativeElement.classList.remove("mat-mdc-slider-disable-track-animation"),n.transform=t.transform})):n.transform=t.transform}_calcTickMarkTransform(t){return`translateX(${t*(this._tickMarkTrackWidth/(this._tickMarks.length-1))}px`}_onTranslateXChange(t){this._hasViewInitialized&&(this._updateThumbUI(t),this._updateTrackUI(t),this._updateOverlappingThumbUI(t))}_onTranslateXChangeBySideEffect(t,n){this._hasViewInitialized&&(t._updateThumbUIByValue(),n._updateThumbUIByValue())}_onValueChange(t){this._hasViewInitialized&&(this._updateValueIndicatorUI(t),this._updateTickMarkUI(),this._cdr.detectChanges())}_onMinMaxOrStepChange(){this._hasViewInitialized&&(this._updateTickMarkUI(),this._updateTickMarkTrackUI(),this._cdr.markForCheck())}_onResize(){if(this._hasViewInitialized){if(this._updateDimensions(),this._isRange){const t=this._getInput(2),n=this._getInput(1);t._updateThumbUIByValue(),n._updateThumbUIByValue(),t._updateStaticStyles(),n._updateStaticStyles(),t._updateMinMax(),n._updateMinMax(),t._updateWidthInactive(),n._updateWidthInactive()}else{const t=this._getInput(2);t&&t._updateThumbUIByValue()}this._updateTickMarkUI(),this._updateTickMarkTrackUI(),this._cdr.detectChanges()}}_areThumbsOverlapping(){const t=this._getInput(1),n=this._getInput(2);return!(!t||!n)&&n.translateX-t.translateX<20}_updateOverlappingThumbClassNames(t){const n=t.getSibling(),r=this._getThumb(t.thumbPosition);this._getThumb(n.thumbPosition)._hostElement.classList.remove("mdc-slider__thumb--top"),r._hostElement.classList.toggle("mdc-slider__thumb--top",this._thumbsOverlap)}_updateOverlappingThumbUI(t){!this._isRange||this._skipUpdate()||this._thumbsOverlap!==this._areThumbsOverlapping()&&(this._thumbsOverlap=!this._thumbsOverlap,this._updateOverlappingThumbClassNames(t))}_updateThumbUI(t){this._skipUpdate()||(this._getThumb(2===t.thumbPosition?2:1)._hostElement.style.transform=`translateX(${t.translateX}px)`)}_updateValueIndicatorUI(t){if(this._skipUpdate())return;const n=this.displayWith(t.value);if(this._hasViewInitialized?t._valuetext=n:t._hostElement.setAttribute("aria-valuetext",n),this.discrete){1===t.thumbPosition?this.startValueIndicatorText=n:this.endValueIndicatorText=n;const r=this._getThumb(t.thumbPosition);n.length<3?r._hostElement.classList.add("mdc-slider__thumb--short-value"):r._hostElement.classList.remove("mdc-slider__thumb--short-value")}}_updateValueIndicatorUIs(){const t=this._getInput(2),n=this._getInput(1);t&&this._updateValueIndicatorUI(t),n&&this._updateValueIndicatorUI(n)}_updateTickMarkTrackUI(){if(!this.showTickMarks||this._skipUpdate())return;const t=this._step&&this._step>0?this._step:1,r=(Math.floor(this.max/t)*t-this.min)/(this.max-this.min);this._tickMarkTrackWidth=this._cachedWidth*r-6}_updateTrackUI(t){this._skipUpdate()||(this._isRange?this._updateTrackUIRange(t):this._updateTrackUINonRange(t))}_updateTrackUIRange(t){const n=t.getSibling();if(!n||!this._cachedWidth)return;const r=Math.abs(n.translateX-t.translateX)/this._cachedWidth;this._setTrackActiveStyles(t._isLeftThumb&&this._cachedWidth?{left:"auto",right:this._cachedWidth-n.translateX+"px",transformOrigin:"right",transform:`scaleX(${r})`}:{left:`${n.translateX}px`,right:"auto",transformOrigin:"left",transform:`scaleX(${r})`})}_updateTrackUINonRange(t){this._setTrackActiveStyles(this._isRtl?{left:"auto",right:"0px",transformOrigin:"right",transform:`scaleX(${1-t.fillPercentage})`}:{left:"0px",right:"auto",transformOrigin:"left",transform:`scaleX(${t.fillPercentage})`})}_updateTickMarkUI(){if(!this.showTickMarks||void 0===this.step||void 0===this.min||void 0===this.max)return;const t=this.step>0?this.step:1;this._isRange?this._updateTickMarkUIRange(t):this._updateTickMarkUINonRange(t),this._isRtl&&this._tickMarks.reverse()}_updateTickMarkUINonRange(t){const n=this._getValue();let r=Math.max(Math.round((n-this.min)/t),0),s=Math.max(Math.round((this.max-n)/t),0);this._isRtl?r++:s++,this._tickMarks=Array(r).fill(0).concat(Array(s).fill(1))}_updateTickMarkUIRange(t){const n=this._getValue(),r=this._getValue(1),s=Math.max(Math.floor((r-this.min)/t),0),a=Math.max(Math.floor((n-r)/t)+1,0),l=Math.max(Math.floor((this.max-n)/t),0);this._tickMarks=Array(s).fill(1).concat(Array(a).fill(0),Array(l).fill(1))}_getInput(t){return 2===t&&this._input?this._input:this._inputs?.length?1===t?this._inputs.first:this._inputs.last:void 0}_getThumb(t){return 2===t?this._thumbs?.last:this._thumbs?.first}_setTransition(t){this._hasAnimation=t&&!this._noopAnimations,this._elementRef.nativeElement.classList.toggle("mat-mdc-slider-with-animation",this._hasAnimation)}}return i.\u0275fac=function(t){return new(t||i)(wt(mo),wt(pl),wt(Ku),wt(Cs),wt(Ed,8),wt(Iz,8),wt(_h,8))},i.\u0275cmp=Fr({type:i,selectors:[["mat-slider"]],contentQueries:function(t,n,r){if(1&t&&(Qh(r,qV,5),Qh(r,QV,4)),2&t){let s;so(s=oo())&&(n._input=s.first),so(s=oo())&&(n._inputs=s)}},viewQuery:function(t,n){if(1&t&&(la(Wde,5),la(WV,5)),2&t){let r;so(r=oo())&&(n._trackActive=r.first),so(r=oo())&&(n._thumbs=r)}},hostAttrs:[1,"mat-mdc-slider","mdc-slider"],hostVars:10,hostBindings:function(t,n){2&t&&jo("mdc-slider--range",n._isRange)("mdc-slider--disabled",n.disabled)("mdc-slider--discrete",n.discrete)("mdc-slider--tick-marks",n.showTickMarks)("_mat-animation-noopable",n._noopAnimations)},inputs:{color:"color",disableRipple:"disableRipple",disabled:"disabled",discrete:"discrete",showTickMarks:"showTickMarks",min:"min",max:"max",step:"step",displayWith:"displayWith"},exportAs:["matSlider"],features:[Po([{provide:FD,useExisting:i}]),As],ngContentSelectors:Yde,decls:9,vars:5,consts:[[1,"mdc-slider__track"],[1,"mdc-slider__track--inactive"],[1,"mdc-slider__track--active"],[1,"mdc-slider__track--active_fill"],["trackActive",""],["class","mdc-slider__tick-marks",4,"ngIf"],[3,"discrete","thumbPosition","valueIndicatorText",4,"ngIf"],[3,"discrete","thumbPosition","valueIndicatorText"],[1,"mdc-slider__tick-marks"],["tickMarkContainer",""],[4,"ngIf"],[3,"class","transform",4,"ngFor","ngForOf"]],template:function(t,n){1&t&&(fh(),uu(0),Zt(1,"div",0),Pr(2,"div",1),Zt(3,"div",2),Pr(4,"div",3,4),un(),qr(6,Xde,3,1,"div",5),un(),qr(7,Kde,1,3,"mat-slider-visual-thumb",6),Pr(8,"mat-slider-visual-thumb",7)),2&t&&(Nn(6),Cn("ngIf",n.showTickMarks),Nn(1),Cn("ngIf",n._isRange),Nn(1),Cn("discrete",n.discrete)("thumbPosition",2)("valueIndicatorText",n.endValueIndicatorText))},dependencies:[Sf,Tu,Zde],styles:['.mdc-slider{cursor:pointer;height:48px;margin:0 24px;position:relative;touch-action:pan-y}.mdc-slider .mdc-slider__track{position:absolute;top:50%;transform:translateY(-50%);width:100%}.mdc-slider .mdc-slider__track--active,.mdc-slider .mdc-slider__track--inactive{display:flex;height:100%;position:absolute;width:100%}.mdc-slider .mdc-slider__track--active{overflow:hidden}.mdc-slider .mdc-slider__track--active_fill{border-top-style:solid;box-sizing:border-box;height:100%;width:100%;position:relative;-webkit-transform-origin:left;transform-origin:left}[dir=rtl] .mdc-slider .mdc-slider__track--active_fill,.mdc-slider .mdc-slider__track--active_fill[dir=rtl]{-webkit-transform-origin:right;transform-origin:right}.mdc-slider .mdc-slider__track--inactive{left:0;top:0}.mdc-slider .mdc-slider__track--inactive::before{position:absolute;box-sizing:border-box;width:100%;height:100%;top:0;left:0;border:1px solid rgba(0,0,0,0);border-radius:inherit;content:"";pointer-events:none}@media screen and (forced-colors: active){.mdc-slider .mdc-slider__track--inactive::before{border-color:CanvasText}}.mdc-slider .mdc-slider__value-indicator-container{bottom:44px;left:var(--slider-value-indicator-container-left, 50%);pointer-events:none;position:absolute;right:var(--slider-value-indicator-container-right);transform:var(--slider-value-indicator-container-transform, translateX(-50%))}.mdc-slider .mdc-slider__value-indicator{transition:transform 100ms 0ms cubic-bezier(0.4, 0, 1, 1);align-items:center;border-radius:4px;display:flex;height:32px;padding:0 12px;transform:scale(0);transform-origin:bottom}.mdc-slider .mdc-slider__value-indicator::before{border-left:6px solid rgba(0,0,0,0);border-right:6px solid rgba(0,0,0,0);border-top:6px solid;bottom:-5px;content:"";height:0;left:var(--slider-value-indicator-caret-left, 50%);position:absolute;right:var(--slider-value-indicator-caret-right);transform:var(--slider-value-indicator-caret-transform, translateX(-50%));width:0}.mdc-slider .mdc-slider__value-indicator::after{position:absolute;box-sizing:border-box;width:100%;height:100%;top:0;left:0;border:1px solid rgba(0,0,0,0);border-radius:inherit;content:"";pointer-events:none}@media screen and (forced-colors: active){.mdc-slider .mdc-slider__value-indicator::after{border-color:CanvasText}}.mdc-slider .mdc-slider__thumb--with-indicator .mdc-slider__value-indicator-container{pointer-events:auto}.mdc-slider .mdc-slider__thumb--with-indicator .mdc-slider__value-indicator{transition:transform 100ms 0ms cubic-bezier(0, 0, 0.2, 1);transform:scale(1)}@media(prefers-reduced-motion){.mdc-slider .mdc-slider__value-indicator,.mdc-slider .mdc-slider__thumb--with-indicator .mdc-slider__value-indicator{transition:none}}.mdc-slider .mdc-slider__thumb{display:flex;left:-24px;outline:none;position:absolute;user-select:none;height:48px;width:48px}.mdc-slider .mdc-slider__thumb--top{z-index:1}.mdc-slider .mdc-slider__thumb--top .mdc-slider__thumb-knob,.mdc-slider .mdc-slider__thumb--top.mdc-slider__thumb:hover .mdc-slider__thumb-knob,.mdc-slider .mdc-slider__thumb--top.mdc-slider__thumb--focused .mdc-slider__thumb-knob{border-style:solid;border-width:1px;box-sizing:content-box}.mdc-slider .mdc-slider__thumb-knob{box-sizing:border-box;left:50%;position:absolute;top:50%;transform:translate(-50%, -50%)}.mdc-slider .mdc-slider__tick-marks{align-items:center;box-sizing:border-box;display:flex;height:100%;justify-content:space-between;padding:0 1px;position:absolute;width:100%}.mdc-slider--discrete .mdc-slider__thumb,.mdc-slider--discrete .mdc-slider__track--active_fill{transition:transform 80ms ease}@media(prefers-reduced-motion){.mdc-slider--discrete .mdc-slider__thumb,.mdc-slider--discrete .mdc-slider__track--active_fill{transition:none}}.mdc-slider--disabled{cursor:auto}.mdc-slider--disabled .mdc-slider__thumb{pointer-events:none}.mdc-slider__input{cursor:pointer;left:0;margin:0;height:100%;opacity:0;pointer-events:none;position:absolute;top:0;width:100%}.mat-mdc-slider{display:inline-block;box-sizing:border-box;outline:none;vertical-align:middle;margin-left:8px;margin-right:8px;width:auto;min-width:112px;-webkit-tap-highlight-color:rgba(0,0,0,0)}.mat-mdc-slider .mdc-slider__thumb-knob{background-color:var(--mdc-slider-handle-color, var(--mdc-theme-primary, #6200ee));border-color:var(--mdc-slider-handle-color, var(--mdc-theme-primary, #6200ee))}.mat-mdc-slider .mdc-slider__thumb--top .mdc-slider__thumb-knob,.mat-mdc-slider .mdc-slider__thumb--top.mdc-slider__thumb:hover .mdc-slider__thumb-knob,.mat-mdc-slider .mdc-slider__thumb--top.mdc-slider__thumb--focused .mdc-slider__thumb-knob{border-color:#fff}.mat-mdc-slider.mdc-slider--disabled .mdc-slider__thumb-knob{background-color:var(--mdc-slider-disabled-handle-color, var(--mdc-theme-on-surface, #000));border-color:var(--mdc-slider-disabled-handle-color, var(--mdc-theme-on-surface, #000))}.mat-mdc-slider.mdc-slider--disabled .mdc-slider__thumb--top .mdc-slider__thumb-knob,.mat-mdc-slider.mdc-slider--disabled .mdc-slider__thumb--top.mdc-slider__thumb:hover .mdc-slider__thumb-knob,.mat-mdc-slider.mdc-slider--disabled .mdc-slider__thumb--top.mdc-slider__thumb--focused .mdc-slider__thumb-knob{border-color:#fff}.mat-mdc-slider .mdc-slider__thumb::before,.mat-mdc-slider .mdc-slider__thumb::after{background-color:var(--mdc-slider-handle-color, var(--mdc-theme-primary, #6200ee))}.mat-mdc-slider .mdc-slider__thumb:hover::before,.mat-mdc-slider .mdc-slider__thumb.mdc-ripple-surface--hover::before{opacity:var(--mdc-ripple-hover-opacity, 0.04)}.mat-mdc-slider .mdc-slider__thumb.mdc-ripple-upgraded--background-focused::before,.mat-mdc-slider .mdc-slider__thumb:not(.mdc-ripple-upgraded):focus::before{transition-duration:75ms;opacity:var(--mdc-ripple-focus-opacity, 0.12)}.mat-mdc-slider .mdc-slider__thumb:not(.mdc-ripple-upgraded)::after{transition:opacity 150ms linear}.mat-mdc-slider .mdc-slider__thumb:not(.mdc-ripple-upgraded):active::after{transition-duration:75ms;opacity:var(--mdc-ripple-press-opacity, 0.12)}.mat-mdc-slider .mdc-slider__thumb.mdc-ripple-upgraded{--mdc-ripple-fg-opacity:var(--mdc-ripple-press-opacity, 0.12)}.mat-mdc-slider .mdc-slider__track--active_fill{border-color:var(--mdc-slider-active-track-color, var(--mdc-theme-primary, #6200ee))}.mat-mdc-slider.mdc-slider--disabled .mdc-slider__track--active_fill{border-color:var(--mdc-slider-disabled-active-track-color, var(--mdc-theme-on-surface, #000))}.mat-mdc-slider .mdc-slider__track--inactive{background-color:var(--mdc-slider-inactive-track-color, var(--mdc-theme-primary, #6200ee));opacity:.24}.mat-mdc-slider.mdc-slider--disabled .mdc-slider__track--inactive{background-color:var(--mdc-slider-disabled-inactive-track-color, var(--mdc-theme-on-surface, #000));opacity:.24}.mat-mdc-slider .mdc-slider__tick-mark--active{background-color:var(--mdc-slider-with-tick-marks-active-container-color, var(--mdc-theme-on-primary, #fff));opacity:var(--mdc-slider-with-tick-marks-active-container-opacity, 0.6)}.mat-mdc-slider.mdc-slider--disabled .mdc-slider__tick-mark--active{background-color:var(--mdc-slider-with-tick-marks-active-container-color, var(--mdc-theme-on-primary, #fff));opacity:var(--mdc-slider-with-tick-marks-active-container-opacity, 0.6)}.mat-mdc-slider .mdc-slider__tick-mark--inactive{background-color:var(--mdc-slider-with-tick-marks-inactive-container-color, var(--mdc-theme-primary, #6200ee));opacity:var(--mdc-slider-with-tick-marks-inactive-container-opacity, 0.6)}.mat-mdc-slider.mdc-slider--disabled .mdc-slider__tick-mark--inactive{background-color:var(--mdc-slider-with-tick-marks-disabled-container-color, var(--mdc-theme-on-surface, #000));opacity:var(--mdc-slider-with-tick-marks-inactive-container-opacity, 0.6)}.mat-mdc-slider .mdc-slider__value-indicator{background-color:var(--mdc-slider-label-container-color, #666666);opacity:1}.mat-mdc-slider .mdc-slider__value-indicator::before{border-top-color:var(--mdc-slider-label-container-color, #666666)}.mat-mdc-slider .mdc-slider__value-indicator{color:var(--mdc-slider-label-label-text-color, var(--mdc-theme-on-primary, #fff))}.mat-mdc-slider .mdc-slider__track{height:var(--mdc-slider-inactive-track-height, 4px)}.mat-mdc-slider .mdc-slider__track--active{height:var(--mdc-slider-active-track-height, 6px);top:calc((var(--mdc-slider-inactive-track-height, 4px) - var(--mdc-slider-active-track-height, 6px)) / 2)}.mat-mdc-slider .mdc-slider__track--active_fill{border-top-width:var(--mdc-slider-active-track-height, 6px)}.mat-mdc-slider .mdc-slider__track--inactive{height:var(--mdc-slider-inactive-track-height, 4px)}.mat-mdc-slider .mdc-slider__tick-mark--active,.mat-mdc-slider .mdc-slider__tick-mark--inactive{height:var(--mdc-slider-with-tick-marks-container-size, 2px);width:var(--mdc-slider-with-tick-marks-container-size, 2px)}.mat-mdc-slider.mdc-slider--disabled{opacity:0.38}.mat-mdc-slider .mdc-slider__value-indicator-text{letter-spacing:var(--mdc-slider-label-label-text-tracking, 0.0071428571em);font-size:var(--mdc-slider-label-label-text-size, 0.875rem);font-family:var(--mdc-slider-label-label-text-font, Roboto, sans-serif);font-weight:var(--mdc-slider-label-label-text-weight, 500);line-height:var(--mdc-slider-label-label-text-line-height, 1.375rem)}.mat-mdc-slider .mdc-slider__track--active{border-radius:var(--mdc-slider-active-track-shape, 9999px)}.mat-mdc-slider .mdc-slider__track--inactive{border-radius:var(--mdc-slider-inactive-track-shape, 9999px)}.mat-mdc-slider .mdc-slider__thumb-knob{border-radius:var(--mdc-slider-handle-shape, 50%);width:var(--mdc-slider-handle-width, 20px);height:var(--mdc-slider-handle-height, 20px);border-style:solid;border-width:calc(var(--mdc-slider-handle-height, 20px) / 2) calc(var(--mdc-slider-handle-width, 20px) / 2)}.mat-mdc-slider .mdc-slider__tick-mark--active,.mat-mdc-slider .mdc-slider__tick-mark--inactive{border-radius:var(--mdc-slider-with-tick-marks-container-shape, 50%)}.mat-mdc-slider .mdc-slider__thumb-knob{box-shadow:var(--mdc-slider-handle-elevation, 0px 2px 1px -1px rgba(0, 0, 0, 0.2), 0px 1px 1px 0px rgba(0, 0, 0, 0.14), 0px 1px 3px 0px rgba(0, 0, 0, 0.12))}.mat-mdc-slider .mdc-slider__thumb:hover .mdc-slider__thumb-knob{background-color:var(--mdc-slider-hover-handle-color, var(--mdc-theme-primary, #6200ee));border-color:var(--mdc-slider-hover-handle-color, var(--mdc-theme-primary, #6200ee))}.mat-mdc-slider .mdc-slider__thumb:hover .mdc-slider__thumb--top .mdc-slider__thumb-knob,.mat-mdc-slider .mdc-slider__thumb:hover .mdc-slider__thumb--top.mdc-slider__thumb:hover .mdc-slider__thumb-knob,.mat-mdc-slider .mdc-slider__thumb:hover .mdc-slider__thumb--top.mdc-slider__thumb--focused .mdc-slider__thumb-knob{border-color:#fff}.mat-mdc-slider .mdc-slider__thumb--focused .mdc-slider__thumb-knob{background-color:var(--mdc-slider-focus-handle-color, var(--mdc-theme-primary, #6200ee));border-color:var(--mdc-slider-focus-handle-color, var(--mdc-theme-primary, #6200ee))}.mat-mdc-slider .mdc-slider__thumb--focused .mdc-slider__thumb--top .mdc-slider__thumb-knob,.mat-mdc-slider .mdc-slider__thumb--focused .mdc-slider__thumb--top.mdc-slider__thumb:hover .mdc-slider__thumb-knob,.mat-mdc-slider .mdc-slider__thumb--focused .mdc-slider__thumb--top.mdc-slider__thumb--focused .mdc-slider__thumb-knob{border-color:#fff}.mat-mdc-slider .mdc-slider__thumb:not(:disabled):active .mdc-slider__thumb--top .mdc-slider__thumb-knob,.mat-mdc-slider .mdc-slider__thumb:not(:disabled):active .mdc-slider__thumb--top.mdc-slider__thumb:hover .mdc-slider__thumb-knob,.mat-mdc-slider .mdc-slider__thumb:not(:disabled):active .mdc-slider__thumb--top.mdc-slider__thumb--focused .mdc-slider__thumb-knob{border-color:#fff}.mat-mdc-slider .mdc-slider__thumb--top .mdc-slider__thumb-knob,.mat-mdc-slider .mdc-slider__thumb--top.mdc-slider__thumb:hover .mdc-slider__thumb-knob,.mat-mdc-slider .mdc-slider__thumb--top.mdc-slider__thumb--focused .mdc-slider__thumb-knob{border-color:var(--mdc-slider-with-overlap-handle-outline-color, #fff);border-width:var(--mdc-slider-with-overlap-handle-outline-width, 1px)}.mat-mdc-slider .mdc-slider__input{box-sizing:content-box;pointer-events:auto}.mat-mdc-slider .mdc-slider__input.mat-mdc-slider-input-no-pointer-events{pointer-events:none}.mat-mdc-slider .mdc-slider__input.mat-slider__right-input{left:auto;right:0}.mat-mdc-slider .mdc-slider__thumb,.mat-mdc-slider .mdc-slider__track--active_fill{transition-duration:0ms}.mat-mdc-slider.mat-mdc-slider-with-animation .mdc-slider__thumb,.mat-mdc-slider.mat-mdc-slider-with-animation .mdc-slider__track--active_fill{transition-duration:80ms}.mat-mdc-slider.mat-mdc-slider-with-animation.mat-mdc-slider-disable-track-animation .mdc-slider__track--active_fill{transition-duration:0ms}.mat-mdc-slider.mdc-slider--discrete .mdc-slider__thumb,.mat-mdc-slider.mdc-slider--discrete .mdc-slider__track--active_fill{transition-duration:0ms}.mat-mdc-slider.mat-mdc-slider-with-animation .mdc-slider__thumb,.mat-mdc-slider.mat-mdc-slider-with-animation .mdc-slider__track--active_fill{transition-duration:80ms}.mat-mdc-slider.mat-mdc-slider-with-animation.mat-mdc-slider-disable-track-animation .mdc-slider__track--active_fill{transition-duration:0ms}.mat-mdc-slider .mdc-slider__track,.mat-mdc-slider .mdc-slider__thumb{pointer-events:none}.mat-mdc-slider .mdc-slider__value-indicator{opacity:var(--mat-mdc-slider-value-indicator-opacity, 1)}.mat-mdc-slider .mat-ripple .mat-ripple-element{background-color:var(--mat-mdc-slider-ripple-color, transparent)}.mat-mdc-slider .mat-ripple .mat-mdc-slider-hover-ripple{background-color:var(--mat-mdc-slider-hover-ripple-color, transparent)}.mat-mdc-slider .mat-ripple .mat-mdc-slider-focus-ripple,.mat-mdc-slider .mat-ripple .mat-mdc-slider-active-ripple{background-color:var(--mat-mdc-slider-focus-ripple-color, transparent)}.mat-mdc-slider._mat-animation-noopable.mdc-slider--discrete .mdc-slider__thumb,.mat-mdc-slider._mat-animation-noopable.mdc-slider--discrete .mdc-slider__track--active_fill,.mat-mdc-slider._mat-animation-noopable .mdc-slider__value-indicator{transition:none}.mat-mdc-slider .mat-mdc-focus-indicator::before{border-radius:50%}.mdc-slider__thumb--focused .mat-mdc-focus-indicator::before{content:""}'],encapsulation:2,changeDetection:0}),i})();const tfe={provide:Kd,useExisting:ar(()=>OD),multi:!0};let OD=(()=>{class i{get value(){return gc(this._hostElement.value)}set value(t){const n=gc(t).toString();this._hasSetInitialValue?this._isActive||(this._hostElement.value=n,this._updateThumbUIByValue(),this._slider._onValueChange(this),this._cdr.detectChanges()):this._initialValue=n}get translateX(){return this._slider.min>=this._slider.max?(this._translateX=0,this._translateX):(void 0===this._translateX&&(this._translateX=this._calcTranslateXByValue()),this._translateX)}set translateX(t){this._translateX=t}get min(){return gc(this._hostElement.min)}set min(t){this._hostElement.min=gc(t).toString(),this._cdr.detectChanges()}get max(){return gc(this._hostElement.max)}set max(t){this._hostElement.max=gc(t).toString(),this._cdr.detectChanges()}get step(){return gc(this._hostElement.step)}set step(t){this._hostElement.step=gc(t).toString(),this._cdr.detectChanges()}get disabled(){return pa(this._hostElement.disabled)}set disabled(t){this._hostElement.disabled=pa(t),this._cdr.detectChanges(),this._slider.disabled!==this.disabled&&(this._slider.disabled=this.disabled)}get percentage(){return this._slider.min>=this._slider.max?this._slider._isRtl?1:0:(this.value-this._slider.min)/(this._slider.max-this._slider.min)}get fillPercentage(){return this._slider._cachedWidth?0===this._translateX?0:this.translateX/this._slider._cachedWidth:this._slider._isRtl?1:0}_setIsFocused(t){this._isFocused=t}constructor(t,n,r,s){this._ngZone=t,this._elementRef=n,this._cdr=r,this._slider=s,this.valueChange=new Ws,this.dragStart=new Ws,this.dragEnd=new Ws,this.thumbPosition=2,this._knobRadius=8,this._isActive=!1,this._isFocused=!1,this._hasSetInitialValue=!1,this._destroyed=new D,this._skipUIUpdate=!1,this._onChangeFn=()=>{},this._onTouchedFn=()=>{},this._hostElement=n.nativeElement,this._ngZone.runOutsideAngular(()=>{this._hostElement.addEventListener("pointerdown",this._onPointerDown.bind(this)),this._hostElement.addEventListener("pointermove",this._onPointerMove.bind(this)),this._hostElement.addEventListener("pointerup",this._onPointerUp.bind(this))})}ngOnDestroy(){this._hostElement.removeEventListener("pointerdown",this._onPointerDown),this._hostElement.removeEventListener("pointermove",this._onPointerMove),this._hostElement.removeEventListener("pointerup",this._onPointerUp),this._destroyed.next(),this._destroyed.complete(),this.dragStart.complete(),this.dragEnd.complete()}initProps(){this._updateWidthInactive(),this.disabled!==this._slider.disabled&&(this._slider.disabled=!0),this.step=this._slider.step,this.min=this._slider.min,this.max=this._slider.max,this._initValue()}initUI(){this._updateThumbUIByValue()}_initValue(){this._hasSetInitialValue=!0,void 0===this._initialValue?this.value=this._getDefaultValue():(this._hostElement.value=this._initialValue,this._updateThumbUIByValue(),this._slider._onValueChange(this),this._cdr.detectChanges())}_getDefaultValue(){return this.min}_onBlur(){this._setIsFocused(!1),this._onTouchedFn()}_onFocus(){this._setIsFocused(!0)}_onChange(){this._isActive&&this._updateThumbUIByValue({withAnimation:!0})}_onInput(){this.valueChange.emit(this.value),this._onChangeFn(this.value),(this._slider.step||!this._isActive)&&this._updateThumbUIByValue({withAnimation:!0}),this._slider._onValueChange(this)}_onNgControlValueChange(){(!this._isActive||!this._isFocused)&&(this._slider._onValueChange(this),this._updateThumbUIByValue()),this._slider.disabled=this._formControl.disabled}_onPointerDown(t){this.disabled||0!==t.button||(this._isActive=!0,this._setIsFocused(!0),this._updateWidthActive(),this._slider._updateDimensions(),this._slider.step||this._updateThumbUIByPointerEvent(t,{withAnimation:!0}),this.disabled||(this._handleValueCorrection(t),this.dragStart.emit({source:this,parent:this._slider,value:this.value})))}_handleValueCorrection(t){this._skipUIUpdate=!0,setTimeout(()=>{this._skipUIUpdate=!1,this._fixValue(t)},0)}_fixValue(t){const n=t.clientX-this._slider._cachedLeft,r=this._slider._cachedWidth,s=0===this._slider.step?1:this._slider.step,a=Math.floor((this._slider.max-this._slider.min)/s),d=Math.round((this._slider._isRtl?1-n/r:n/r)*a)/a*(this._slider.max-this._slider.min)+this._slider.min,p=Math.round(d/s)*s;if(p===this.value)return this._slider._onValueChange(this),void(this._slider.step>0?this._updateThumbUIByValue():this._updateThumbUIByPointerEvent(t,{withAnimation:this._slider._hasAnimation}));this.value=p,this.valueChange.emit(this.value),this._onChangeFn(this.value),this._slider._onValueChange(this),this._slider.step>0?this._updateThumbUIByValue():this._updateThumbUIByPointerEvent(t,{withAnimation:this._slider._hasAnimation})}_onPointerMove(t){!this._slider.step&&this._isActive&&this._updateThumbUIByPointerEvent(t)}_onPointerUp(){this._isActive&&(this._isActive=!1,this.dragEnd.emit({source:this,parent:this._slider,value:this.value}),setTimeout(()=>this._updateWidthInactive()))}_clamp(t){return Math.max(Math.min(t,this._slider._cachedWidth),0)}_calcTranslateXByValue(){return this._slider._isRtl?(1-this.percentage)*this._slider._cachedWidth:this.percentage*this._slider._cachedWidth}_calcTranslateXByPointerEvent(t){return t.clientX-this._slider._cachedLeft}_updateWidthActive(){this._hostElement.style.padding=`0 ${this._slider._inputPadding}px`,this._hostElement.style.width=`calc(100% + ${this._slider._inputPadding}px)`}_updateWidthInactive(){this._hostElement.style.padding="0px",this._hostElement.style.width="calc(100% + 48px)",this._hostElement.style.left="-24px"}_updateThumbUIByValue(t){this.translateX=this._clamp(this._calcTranslateXByValue()),this._updateThumbUI(t)}_updateThumbUIByPointerEvent(t,n){this.translateX=this._clamp(this._calcTranslateXByPointerEvent(t)),this._updateThumbUI(n)}_updateThumbUI(t){this._slider._setTransition(!!t?.withAnimation),this._slider._onTranslateXChange(this)}writeValue(t){this.value=t}registerOnChange(t){this._onChangeFn=t}registerOnTouched(t){this._onTouchedFn=t}setDisabledState(t){this.disabled=t}focus(){this._hostElement.focus()}blur(){this._hostElement.blur()}}return i.\u0275fac=function(t){return new(t||i)(wt(mo),wt(Cs),wt(pl),wt(FD))},i.\u0275dir=Oi({type:i,selectors:[["input","matSliderThumb",""]],hostAttrs:["type","range",1,"mdc-slider__input"],hostVars:1,hostBindings:function(t,n){1&t&&Fi("change",function(){return n._onChange()})("input",function(){return n._onInput()})("blur",function(){return n._onBlur()})("focus",function(){return n._onFocus()}),2&t&&Ea("aria-valuetext",n._valuetext)},inputs:{value:"value"},outputs:{valueChange:"valueChange",dragStart:"dragStart",dragEnd:"dragEnd"},exportAs:["matSliderThumb"],features:[Po([tfe,{provide:qV,useExisting:i}])]}),i})(),rfe=(()=>{class i{}return i.\u0275fac=function(t){return new(t||i)},i.\u0275mod=ia({type:i}),i.\u0275inj=ft({imports:[Pu,D_,Fb]}),i})();class $b{constructor(e){Wt(this,"eventDisplay",void 0),Wt(this,"clippingEnabled",void 0),Wt(this,"startClippingAngle",void 0),Wt(this,"openingClippingAngle",void 0),this.eventDisplay=e;const t=this.eventDisplay.getStateManager();t.clippingEnabled.onUpdate(n=>this.clippingEnabled=n),t.startClippingAngle.onUpdate(n=>this.startClippingAngle=n),t.openingClippingAngle.onUpdate(n=>this.openingClippingAngle=n)}changeStartClippingAngle(e){this.eventDisplay.getUIManager().rotateStartAngleClipping(e)}changeOpeningClippingAngle(e){this.eventDisplay.getUIManager().rotateOpeningAngleClipping(e)}toggleClipping(e){const t=e.checked;this.eventDisplay.getUIManager().setClipping(t),this.clippingEnabled=t}}Wt($b,"\u0275fac",function(e){return new(e||$b)(wt(Qa))}),Wt($b,"\u0275cmp",Fr({type:$b,selectors:[["app-object-clipping"]],decls:17,vars:5,consts:[[1,"mat-menu"],["menu",""],["mat-menu-item","",3,"click"],[3,"checked","click","change"],["clippingCheckbox",""],["mat-menu-item","",1,"slider-btn",3,"focus"],["min","0","max","360","step","1","thumbLabel",""],["matSliderThumb","",3,"value","valueChange"],["startingAngleSlider",""],["openingAngleSlider",""],["tooltip","Geometry clipping","icon","clipping",3,"matMenuTriggerFor","active"]],template:function(e,t){if(1&e){const n=Za();Zt(0,"mat-menu",0,1)(2,"button",2),Fi("click",function(s){ks(n);const a=bl(4);return s.stopPropagation(),ys(a._inputElement.nativeElement.click())}),Zt(3,"mat-checkbox",3,4),Fi("click",function(s){return s.stopPropagation()})("change",function(s){return t.toggleClipping(s)}),dr(5," Clipping "),un()(),Zt(6,"button",5),Fi("focus",function(){return ks(n),ys(bl(9).focus())}),Zt(7,"mat-slider",6)(8,"input",7,8),Fi("valueChange",function(s){return t.changeStartClippingAngle(s)}),un()(),dr(10," Start Angle "),un(),Zt(11,"button",5),Fi("focus",function(){return ks(n),ys(bl(14).focus())}),Zt(12,"mat-slider",6)(13,"input",7,9),Fi("valueChange",function(s){return t.changeOpeningClippingAngle(s)}),un()(),dr(15," Opening Angle "),un()(),Pr(16,"app-menu-toggle",10)}if(2&e){const n=bl(1);Nn(3),Cn("checked",t.clippingEnabled),Nn(5),Cn("value",t.startClippingAngle),Nn(5),Cn("value",t.openingClippingAngle),Nn(3),Cn("matMenuTriggerFor",n)("active",t.clippingEnabled)}},dependencies:[HS,Ey,VS,jV,OD,E2,Ql],styles:[".slider-btn[_ngcontent-%COMP%]{overflow:visible}mat-slider[_ngcontent-%COMP%]{margin-left:.75rem;margin-right:.75rem}"]}));class Py{constructor(e){Wt(this,"eventDisplay",void 0),Wt(this,"darkTheme",!1),this.eventDisplay=e}ngOnInit(){this.darkTheme=this.eventDisplay.getUIManager().getDarkTheme()}setDarkTheme(){this.darkTheme=!this.darkTheme,this.eventDisplay.getUIManager().setDarkTheme(this.darkTheme)}}Wt(Py,"\u0275fac",function(e){return new(e||Py)(wt(Qa))}),Wt(Py,"\u0275cmp",Fr({type:Py,selectors:[["app-dark-theme"]],decls:1,vars:1,consts:[["tooltip","Dark theme","icon","dark",3,"active","click"]],template:function(e,t){1&e&&(Zt(0,"app-menu-toggle",0),Fi("click",function(){return t.setDarkTheme()}),un()),2&e&&Cn("active",t.darkTheme)},dependencies:[Ql]}));class ky{constructor(e){Wt(this,"eventDisplay",void 0),Wt(this,"autoRotate",!1),this.eventDisplay=e}toggleAutoRotate(){this.autoRotate=!this.autoRotate,this.eventDisplay.getUIManager().setAutoRotate(this.autoRotate)}}function sfe(i,e){if(1&i&&(vl(),Zt(0,"svg",8),Pr(1,"use"),un()),2&i){const t=Mr().$implicit;Nn(1),y_("href","assets/icons/",t.icon,".svg#",t.icon,"")}}function ofe(i,e){if(1&i){const t=Za();Zt(0,"button",1),Fi("click",function(r){const a=ks(t).$implicit;return ys(Mr().displayView(r,a))}),qr(1,sfe,2,2,"svg",7),dr(2),un()}if(2&i){const t=e.$implicit;Nn(1),Cn("ngIf",t.icon),Nn(1),Gl(" ",t.name," ")}}Wt(ky,"\u0275fac",function(e){return new(e||ky)(wt(Qa))}),Wt(ky,"\u0275cmp",Fr({type:ky,selectors:[["app-auto-rotate"]],decls:1,vars:1,consts:[["tooltip","Auto rotate","icon","rotate",3,"active","click"]],template:function(e,t){1&e&&(Zt(0,"app-menu-toggle",0),Fi("click",function(){return t.toggleAutoRotate()}),un()),2&e&&Cn("active",t.autoRotate)},dependencies:[Ql]}));class Xb{constructor(e){Wt(this,"eventDisplay",void 0),Wt(this,"views",void 0),this.eventDisplay=e}ngOnInit(){this.views=this.eventDisplay.getUIManager().getPresetViews()}displayView(e,t){e.stopPropagation(),this.eventDisplay.getUIManager().displayView(t)}setAxis(e){const t=e.checked;this.eventDisplay.getUIManager().setShowAxis(t)}setGrid(e){const t=e.checked;this.eventDisplay.getUIManager().setShowGrid(t)}}Wt(Xb,"\u0275fac",function(e){return new(e||Xb)(wt(Qa))}),Wt(Xb,"\u0275cmp",Fr({type:Xb,selectors:[["app-view-options"]],decls:12,vars:3,consts:[["viewOptions",""],["mat-menu-item","",3,"click"],[3,"click","change"],["showGridCheckbox",""],["showAxisCheckbox",""],["mat-menu-item","",3,"click",4,"ngFor","ngForOf"],["tooltip","View options","icon","views",3,"matMenuTriggerFor","active"],["class","view-icon",4,"ngIf"],[1,"view-icon"]],template:function(e,t){if(1&e){const n=Za();Zt(0,"mat-menu",null,0)(2,"button",1),Fi("click",function(s){ks(n);const a=bl(4);return s.stopPropagation(),ys(a._inputElement.nativeElement.click())}),Zt(3,"mat-checkbox",2,3),Fi("click",function(s){return s.stopPropagation()})("change",function(s){return t.setGrid(s)}),dr(5,"Show Grid "),un()(),Zt(6,"button",1),Fi("click",function(s){ks(n);const a=bl(8);return s.stopPropagation(),ys(a._inputElement.nativeElement.click())}),Zt(7,"mat-checkbox",2,4),Fi("click",function(s){return s.stopPropagation()})("change",function(s){return t.setAxis(s)}),dr(9,"Show Axis "),un()(),qr(10,ofe,3,2,"button",5),un(),Pr(11,"app-menu-toggle",6)}if(2&e){const n=bl(1);Nn(10),Cn("ngForOf",t.views),Nn(1),Cn("matMenuTriggerFor",n)("active",!1)}},dependencies:[Sf,Tu,HS,Ey,VS,E2,Ql],styles:[".view-icon[_ngcontent-%COMP%]{width:1.2rem;height:1.2rem;margin-right:.5rem}"]}));function lfe(i,e){1&i&&(Zt(0,"li",2),dr(1," No actions. "),un())}function cfe(i,e){if(1&i&&(Zt(0,"li",2),dr(1),un()),2&i){const t=e.$implicit;Nn(1),Gl(" ",t," ")}}class O2{constructor(e){Wt(this,"eventDisplay",void 0),Wt(this,"showInfoPanel",void 0),Wt(this,"actionsList",[]),Wt(this,"version","2.14.0"),this.eventDisplay=e}ngOnInit(){this.actionsList=this.eventDisplay.getInfoLogger().getInfoLoggerList()}}Wt(O2,"\u0275fac",function(e){return new(e||O2)(wt(Qa))}),Wt(O2,"\u0275cmp",Fr({type:O2,selectors:[["app-info-panel-overlay"]],inputs:{showInfoPanel:"showInfoPanel"},decls:6,vars:5,consts:[["overlayTitle","Info Panel","icon","info-panel",3,"resizable","active"],[1,"list-group","list-group-flush"],[1,"list-group-item"],["class","list-group-item",4,"ngIf"],["class","list-group-item",4,"ngFor","ngForOf"]],template:function(e,t){1&e&&(Zt(0,"app-overlay",0)(1,"ul",1)(2,"li",2),dr(3),un(),qr(4,lfe,2,0,"li",3),qr(5,cfe,2,1,"li",4),un()()),2&e&&(Cn("resizable",!0)("active",t.showInfoPanel),Nn(3),Gl(" Phoenix Version: ",t.version," "),Nn(1),Cn("ngIf",0===t.actionsList.length),Nn(1),Cn("ngForOf",t.actionsList))},dependencies:[Sf,Tu,W_],styles:[".list-group-item[_ngcontent-%COMP%]{font-size:.8rem;padding:.5rem 1rem}"]}));class Kb{constructor(e){Wt(this,"overlay",void 0),Wt(this,"showInfoPanel",!1),Wt(this,"overlayWindow",void 0),this.overlay=e}ngOnInit(){const e=this.overlay.create(),t=new Ty(O2);this.overlayWindow=e.attach(t),this.overlayWindow.instance.showInfoPanel=this.showInfoPanel}ngOnDestroy(){this.overlayWindow.destroy()}toggleOverlay(){this.showInfoPanel=!this.showInfoPanel,this.overlayWindow.instance.showInfoPanel=this.showInfoPanel}}Wt(Kb,"\u0275fac",function(e){return new(e||Kb)(wt(ap))}),Wt(Kb,"\u0275cmp",Fr({type:Kb,selectors:[["app-info-panel"]],decls:1,vars:1,consts:[["tooltip","Info panel","icon","info-panel",3,"active","click"]],template:function(e,t){1&e&&(Zt(0,"app-menu-toggle",0),Fi("click",function(){return t.toggleOverlay()}),un()),2&e&&Cn("active",t.showInfoPanel)},dependencies:[Ql]}));class Fy{constructor(e){Wt(this,"eventDisplay",void 0),Wt(this,"orthographicView",!1),this.eventDisplay=e}switchMainView(){this.orthographicView=!this.orthographicView,this.eventDisplay.getUIManager().toggleOrthographicView(this.orthographicView)}}Wt(Fy,"\u0275fac",function(e){return new(e||Fy)(wt(Qa))}),Wt(Fy,"\u0275cmp",Fr({type:Fy,selectors:[["app-main-view-toggle"]],decls:1,vars:2,consts:[[3,"icon","matTooltip","click"]],template:function(e,t){1&e&&(Zt(0,"app-menu-toggle",0),Fi("click",function(){return t.switchMainView()}),un()),2&e&&Cn("icon",t.orthographicView?"perspective":"orthographic")("matTooltip","Switch to "+(t.orthographicView?"perspective":"orthographic")+" view")},dependencies:[Nb,Ql]}));class Yb{constructor(e){Wt(this,"eventDisplay",void 0),Wt(this,"allCameras",void 0),Wt(this,"zoomFactor",1.1),Wt(this,"zoomTimeout",void 0),Wt(this,"zoomTime",200),this.eventDisplay=e}zoomTo(e){this.zoomTime=this.zoomTime>30?Math.floor(this.zoomTime/1.1):this.zoomTime,this.eventDisplay.zoomTo(e,this.zoomTime),this.zoomTimeout=setTimeout(()=>{this.zoomTo(e)},this.zoomTime)}zoomIn(e){e&&this.zoomTo(1/this.zoomFactor)}zoomOut(e){e&&this.zoomTo(this.zoomFactor)}clearZoom(){this.zoomTime=200,clearTimeout(this.zoomTimeout)}}Wt(Yb,"\u0275fac",function(e){return new(e||Yb)(wt(Qa))}),Wt(Yb,"\u0275cmp",Fr({type:Yb,selectors:[["app-zoom-controls"]],decls:3,vars:2,consts:[[1,"d-flex"],["tooltip","Zoom out (hold)","icon","zoom-out",3,"active","click","touchstart","mousedown","mouseup","mouseleave","touchend","touchcancel","touchmove"],["tooltip","Zoom in (hold)","icon","zoom-in",3,"active","click","touchstart","mousedown","mouseup","mouseleave","touchend","touchcancel","touchmove"]],template:function(e,t){1&e&&(Zt(0,"div",0)(1,"app-menu-toggle",1),Fi("click",function(){return t.zoomOut(!0),t.clearZoom()})("touchstart",function(){return t.zoomOut(!0)})("mousedown",function(r){return t.zoomOut(0===r.button)})("mouseup",function(){return t.clearZoom()})("mouseleave",function(){return t.clearZoom()})("touchend",function(){return t.clearZoom()})("touchcancel",function(){return t.clearZoom()})("touchmove",function(){return t.clearZoom()}),un(),Zt(2,"app-menu-toggle",2),Fi("click",function(){return t.zoomIn(!0),t.clearZoom()})("touchstart",function(){return t.zoomIn(!0)})("mousedown",function(r){return t.zoomIn(0===r.button)})("mouseup",function(){return t.clearZoom()})("mouseleave",function(){return t.clearZoom()})("touchend",function(){return t.clearZoom()})("touchcancel",function(){return t.clearZoom()})("touchmove",function(){return t.clearZoom()}),un()()),2&e&&(Nn(1),Cn("active",!1),Nn(1),Cn("active",!1))},dependencies:[Ql]}));class Oy{constructor(e){Wt(this,"eventDisplay",void 0),Wt(this,"isAnimating",!1),this.eventDisplay=e}toggleAnimateEvent(){this.isAnimating||(this.isAnimating=!0,this.eventDisplay.animateEventWithCollision(1e4,()=>{this.isAnimating=!1}))}}Wt(Oy,"\u0275fac",function(e){return new(e||Oy)(wt(Qa))}),Wt(Oy,"\u0275cmp",Fr({type:Oy,selectors:[["app-animate-event"]],decls:1,vars:1,consts:[["tooltip","Animate event","icon","event-folder",3,"active","click"]],template:function(e,t){1&e&&(Zt(0,"app-menu-toggle",0),Fi("click",function(){return t.toggleAnimateEvent()}),un()),2&e&&Cn("active",t.isAnimating)},dependencies:[Ql]}));class Zb{constructor(e){Wt(this,"eventDisplay",void 0),Wt(this,"vrSupported",!1),Wt(this,"vrActive",!1),this.eventDisplay=e,navigator?.xr?.isSessionSupported?.(TU.SESSION_TYPE).then(t=>{t&&(this.vrSupported=!0)}).catch(t=>console.warn("Error in VR",t))}toggleVr(){this.vrActive?(this.eventDisplay.endXR(Of.VR),this.vrActive=!1):(this.eventDisplay.initXR(Of.VR,()=>{this.vrActive=!1,this.eventDisplay.endXR(Of.VR)}),this.vrActive=!0)}}function ufe(i,e){if(1&i){const t=Za();bd(0),Zt(1,"button",4),Fi("click",function(){return ks(t),ys(Mr().toggleAr(!0))}),dr(2,"AR with overlays"),un(),Zt(3,"button",4),Fi("click",function(){return ks(t),ys(Mr().toggleAr(!1))}),dr(4,"AR without overlays"),un(),dh()}}function hfe(i,e){1&i&&(Zt(0,"button",5),dr(1,"AR not supported"),un())}Wt(Zb,"\u0275fac",function(e){return new(e||Zb)(wt(Qa))}),Wt(Zb,"\u0275cmp",Fr({type:Zb,selectors:[["app-vr-toggle"]],decls:1,vars:3,consts:[["icon","vr",3,"disabled","active","tooltip","click"]],template:function(e,t){1&e&&(Zt(0,"app-menu-toggle",0),Fi("click",function(){return t.vrSupported&&t.toggleVr()}),un()),2&e&&Cn("disabled",!t.vrSupported)("active",t.vrActive)("tooltip",t.vrSupported?t.vrActive?"Exit VR":"Enter VR":"VR not supported")},dependencies:[Ql]}));class Jb{constructor(e){Wt(this,"eventDisplay",void 0),Wt(this,"arSupported",!1),Wt(this,"arActive",!1),this.eventDisplay=e,navigator.xr?.isSessionSupported?.(qk.SESSION_TYPE).then(t=>{t&&(this.arSupported=!0)}).catch(t=>console.warn("Error in AR",t))}toggleAr(e=!0){qk.enableDomOverlay=e,this.arActive?(this.eventDisplay.endXR(Of.AR),this.arActive=!1):(this.eventDisplay.initXR(Of.AR,()=>{this.arActive=!1,this.eventDisplay.endXR(Of.AR)}),this.arActive=!0)}}Wt(Jb,"\u0275fac",function(e){return new(e||Jb)(wt(Qa))}),Wt(Jb,"\u0275cmp",Fr({type:Jb,selectors:[["app-ar-toggle"]],decls:5,vars:6,consts:[["arToggleOptions",""],[4,"ngIf"],["mat-menu-item","","disabled","",4,"ngIf"],["icon","ar",3,"matMenuTriggerFor","disabled","active","tooltip","click"],["mat-menu-item","",3,"click"],["mat-menu-item","","disabled",""]],template:function(e,t){if(1&e&&(Zt(0,"mat-menu",null,0),qr(2,ufe,5,0,"ng-container",1),qr(3,hfe,2,0,"button",2),un(),Zt(4,"app-menu-toggle",3),Fi("click",function(){return t.arSupported&&(t.arActive?t.toggleAr():null)}),un()),2&e){const n=bl(1);Nn(2),Cn("ngIf",t.arSupported),Nn(1),Cn("ngIf",!t.arSupported),Nn(1),Cn("matMenuTriggerFor",n)("disabled",!t.arSupported)("active",t.arActive)("tooltip",t.arSupported?t.arActive?"Exit AR":"Enter AR":"AR not supported")}},dependencies:[Tu,HS,Ey,VS,Ql]}));class ex{constructor(){Wt(this,"ssMode",!1),Wt(this,"onDocumentClick",()=>{document.exitFullscreen?.()})}ngOnInit(){document.onfullscreenchange=()=>{document.fullscreenElement||this.toggleSSMode()}}toggleSSMode(){this.ssMode=!this.ssMode,document.body.classList.toggle("ss-mode"),this.ssMode?(setTimeout(()=>{document.addEventListener("click",this.onDocumentClick),document.addEventListener("touchstart",this.onDocumentClick)},1),document.documentElement.requestFullscreen?.()):(document.removeEventListener("click",this.onDocumentClick),document.removeEventListener("touchstart",this.onDocumentClick))}}Wt(ex,"\u0275fac",function(e){return new(e||ex)}),Wt(ex,"\u0275cmp",Fr({type:ex,selectors:[["app-ss-mode"]],decls:1,vars:1,consts:[["tooltip","Screenshot mode: phoenix will become fullscreen and the menu is suppressed","icon","ss-mode",3,"active","click"]],template:function(e,t){1&e&&(Zt(0,"app-menu-toggle",0),Fi("click",function(){return t.toggleSSMode()}),un()),2&e&&Cn("active",t.ssMode)},dependencies:[Ql],styles:["#uiMenu,#phoenixMenu,#mainLogo,#statsElement{transition:opacity .4s}.ss-mode #uiMenu,.ss-mode #phoenixMenu,.ss-mode #mainLogo,.ss-mode #statsElement{visibility:hidden;opacity:0}\n"],encapsulation:2}));class dfe{}class pfe{get selected(){return this._selected||(this._selected=Array.from(this._selection.values())),this._selected}constructor(e=!1,t,n=!0,r){this._multiple=e,this._emitChanges=n,this.compareWith=r,this._selection=new Set,this._deselectedToEmit=[],this._selectedToEmit=[],this.changed=new D,t&&t.length&&(e?t.forEach(s=>this._markSelected(s)):this._markSelected(t[0]),this._selectedToEmit.length=0)}select(...e){this._verifyValueAssignment(e),e.forEach(n=>this._markSelected(n));const t=this._hasQueuedChanges();return this._emitChangeEvent(),t}deselect(...e){this._verifyValueAssignment(e),e.forEach(n=>this._unmarkSelected(n));const t=this._hasQueuedChanges();return this._emitChangeEvent(),t}setSelection(...e){this._verifyValueAssignment(e);const t=this.selected,n=new Set(e);e.forEach(s=>this._markSelected(s)),t.filter(s=>!n.has(s)).forEach(s=>this._unmarkSelected(s));const r=this._hasQueuedChanges();return this._emitChangeEvent(),r}toggle(e){return this.isSelected(e)?this.deselect(e):this.select(e)}clear(e=!0){this._unmarkAll();const t=this._hasQueuedChanges();return e&&this._emitChangeEvent(),t}isSelected(e){if(this.compareWith){for(const t of this._selection)if(this.compareWith(t,e))return!0;return!1}return this._selection.has(e)}isEmpty(){return 0===this._selection.size}hasValue(){return!this.isEmpty()}sort(e){this._multiple&&this.selected&&this._selected.sort(e)}isMultipleSelection(){return this._multiple}_emitChangeEvent(){this._selected=null,(this._selectedToEmit.length||this._deselectedToEmit.length)&&(this.changed.next({source:this,added:this._selectedToEmit,removed:this._deselectedToEmit}),this._deselectedToEmit=[],this._selectedToEmit=[])}_markSelected(e){this.isSelected(e)||(this._multiple||this._unmarkAll(),this.isSelected(e)||this._selection.add(e),this._emitChanges&&this._selectedToEmit.push(e))}_unmarkSelected(e){this.isSelected(e)&&(this._selection.delete(e),this._emitChanges&&this._deselectedToEmit.push(e))}_unmarkAll(){this.isEmpty()||this._selection.forEach(e=>this._unmarkSelected(e))}_verifyValueAssignment(e){}_hasQueuedChanges(){return!(!this._deselectedToEmit.length&&!this._selectedToEmit.length)}}let Afe=(()=>{class i{constructor(){this._listeners=[]}notify(t,n){for(let r of this._listeners)r(t,n)}listen(t){return this._listeners.push(t),()=>{this._listeners=this._listeners.filter(n=>t!==n)}}ngOnDestroy(){this._listeners=[]}}return i.\u0275fac=function(t){return new(t||i)},i.\u0275prov=Ue({token:i,factory:i.\u0275fac,providedIn:"root"}),i})();const mfe=["input"],gfe=["*"];let $V=0;class XV{constructor(e,t){this.source=e,this.value=t}}const _fe={provide:Kd,useExisting:ar(()=>YV),multi:!0},KV=new cr("MatRadioGroup"),yfe=new cr("mat-radio-default-options",{providedIn:"root",factory:function vfe(){return{color:"accent"}}});let bfe=(()=>{class i{get name(){return this._name}set name(t){this._name=t,this._updateRadioButtonNames()}get labelPosition(){return this._labelPosition}set labelPosition(t){this._labelPosition="before"===t?"before":"after",this._markRadiosForCheck()}get value(){return this._value}set value(t){this._value!==t&&(this._value=t,this._updateSelectedRadioFromValue(),this._checkSelectedRadioButton())}_checkSelectedRadioButton(){this._selected&&!this._selected.checked&&(this._selected.checked=!0)}get selected(){return this._selected}set selected(t){this._selected=t,this.value=t?t.value:null,this._checkSelectedRadioButton()}get disabled(){return this._disabled}set disabled(t){this._disabled=pa(t),this._markRadiosForCheck()}get required(){return this._required}set required(t){this._required=pa(t),this._markRadiosForCheck()}constructor(t){this._changeDetector=t,this._value=null,this._name="mat-radio-group-"+$V++,this._selected=null,this._isInitialized=!1,this._labelPosition="after",this._disabled=!1,this._required=!1,this._controlValueAccessorChangeFn=()=>{},this.onTouched=()=>{},this.change=new Ws}ngAfterContentInit(){this._isInitialized=!0}_touch(){this.onTouched&&this.onTouched()}_updateRadioButtonNames(){this._radios&&this._radios.forEach(t=>{t.name=this.name,t._markForCheck()})}_updateSelectedRadioFromValue(){this._radios&&(null===this._selected||this._selected.value!==this._value)&&(this._selected=null,this._radios.forEach(n=>{n.checked=this.value===n.value,n.checked&&(this._selected=n)}))}_emitChangeEvent(){this._isInitialized&&this.change.emit(new XV(this._selected,this._value))}_markRadiosForCheck(){this._radios&&this._radios.forEach(t=>t._markForCheck())}writeValue(t){this.value=t,this._changeDetector.markForCheck()}registerOnChange(t){this._controlValueAccessorChangeFn=t}registerOnTouched(t){this.onTouched=t}setDisabledState(t){this.disabled=t,this._changeDetector.markForCheck()}}return i.\u0275fac=function(t){return new(t||i)(wt(pl))},i.\u0275dir=Oi({type:i,inputs:{color:"color",name:"name",labelPosition:"labelPosition",value:"value",selected:"selected",disabled:"disabled",required:"required"},outputs:{change:"change"}}),i})();class xfe{constructor(e){this._elementRef=e}}const wfe=kb(AD(xfe));let Cfe=(()=>{class i extends wfe{get checked(){return this._checked}set checked(t){const n=pa(t);this._checked!==n&&(this._checked=n,n&&this.radioGroup&&this.radioGroup.value!==this.value?this.radioGroup.selected=this:!n&&this.radioGroup&&this.radioGroup.value===this.value&&(this.radioGroup.selected=null),n&&this._radioDispatcher.notify(this.id,this.name),this._changeDetector.markForCheck())}get value(){return this._value}set value(t){this._value!==t&&(this._value=t,null!==this.radioGroup&&(this.checked||(this.checked=this.radioGroup.value===t),this.checked&&(this.radioGroup.selected=this)))}get labelPosition(){return this._labelPosition||this.radioGroup&&this.radioGroup.labelPosition||"after"}set labelPosition(t){this._labelPosition=t}get disabled(){return this._disabled||null!==this.radioGroup&&this.radioGroup.disabled}set disabled(t){this._setDisabled(pa(t))}get required(){return this._required||this.radioGroup&&this.radioGroup.required}set required(t){this._required=pa(t)}get color(){return this._color||this.radioGroup&&this.radioGroup.color||this._providerOverride&&this._providerOverride.color||"accent"}set color(t){this._color=t}get inputId(){return`${this.id||this._uniqueId}-input`}constructor(t,n,r,s,a,l,u,d){super(n),this._changeDetector=r,this._focusMonitor=s,this._radioDispatcher=a,this._providerOverride=u,this._uniqueId="mat-radio-"+ ++$V,this.id=this._uniqueId,this.change=new Ws,this._checked=!1,this._value=null,this._removeUniqueSelectionListener=()=>{},this.radioGroup=t,this._noopAnimations="NoopAnimations"===l,d&&(this.tabIndex=gc(d,0))}focus(t,n){n?this._focusMonitor.focusVia(this._inputElement,n,t):this._inputElement.nativeElement.focus(t)}_markForCheck(){this._changeDetector.markForCheck()}ngOnInit(){this.radioGroup&&(this.checked=this.radioGroup.value===this._value,this.checked&&(this.radioGroup.selected=this),this.name=this.radioGroup.name),this._removeUniqueSelectionListener=this._radioDispatcher.listen((t,n)=>{t!==this.id&&n===this.name&&(this.checked=!1)})}ngDoCheck(){this._updateTabIndex()}ngAfterViewInit(){this._updateTabIndex(),this._focusMonitor.monitor(this._elementRef,!0).subscribe(t=>{!t&&this.radioGroup&&this.radioGroup._touch()})}ngOnDestroy(){this._focusMonitor.stopMonitoring(this._elementRef),this._removeUniqueSelectionListener()}_emitChangeEvent(){this.change.emit(new XV(this,this._value))}_isRippleDisabled(){return this.disableRipple||this.disabled}_onInputClick(t){t.stopPropagation()}_onInputInteraction(t){if(t.stopPropagation(),!this.checked&&!this.disabled){const n=this.radioGroup&&this.value!==this.radioGroup.value;this.checked=!0,this._emitChangeEvent(),this.radioGroup&&(this.radioGroup._controlValueAccessorChangeFn(this.value),n&&this.radioGroup._emitChangeEvent())}}_setDisabled(t){this._disabled!==t&&(this._disabled=t,this._changeDetector.markForCheck())}_updateTabIndex(){const t=this.radioGroup;let n;if(n=t&&t.selected&&!this.disabled?t.selected===this?this.tabIndex:-1:this.tabIndex,n!==this._previousTabIndex){const r=this._inputElement?.nativeElement;r&&(r.setAttribute("tabindex",n+""),this._previousTabIndex=n)}}}return i.\u0275fac=function(t){Qd()},i.\u0275dir=Oi({type:i,viewQuery:function(t,n){if(1&t&&la(mfe,5),2&t){let r;so(r=oo())&&(n._inputElement=r.first)}},inputs:{id:"id",name:"name",ariaLabel:["aria-label","ariaLabel"],ariaLabelledby:["aria-labelledby","ariaLabelledby"],ariaDescribedby:["aria-describedby","ariaDescribedby"],checked:"checked",value:"value",labelPosition:"labelPosition",disabled:"disabled",required:"required",color:"color"},outputs:{change:"change"},features:[As]}),i})(),YV=(()=>{class i extends bfe{}return i.\u0275fac=function(){let e;return function(n){return(e||(e=Ka(i)))(n||i)}}(),i.\u0275dir=Oi({type:i,selectors:[["mat-radio-group"]],contentQueries:function(t,n,r){if(1&t&&Qh(r,ZV,5),2&t){let s;so(s=oo())&&(n._radios=s)}},hostAttrs:["role","radiogroup",1,"mat-mdc-radio-group"],exportAs:["matRadioGroup"],features:[Po([_fe,{provide:KV,useExisting:i}]),As]}),i})(),ZV=(()=>{class i extends Cfe{constructor(t,n,r,s,a,l,u,d){super(t,n,r,s,a,l,u,d)}}return i.\u0275fac=function(t){return new(t||i)(wt(KV,8),wt(Cs),wt(pl),wt(A0),wt(Afe),wt(_h,8),wt(yfe,8),Oh("tabindex"))},i.\u0275cmp=Fr({type:i,selectors:[["mat-radio-button"]],hostAttrs:[1,"mat-mdc-radio-button"],hostVars:15,hostBindings:function(t,n){1&t&&Fi("focus",function(){return n._inputElement.nativeElement.focus()}),2&t&&(Ea("id",n.id)("tabindex",null)("aria-label",null)("aria-labelledby",null)("aria-describedby",null),jo("mat-primary","primary"===n.color)("mat-accent","accent"===n.color)("mat-warn","warn"===n.color)("mat-mdc-radio-checked",n.checked)("_mat-animation-noopable",n._noopAnimations))},inputs:{disableRipple:"disableRipple",tabIndex:"tabIndex"},exportAs:["matRadioButton"],features:[As],ngContentSelectors:gfe,decls:13,vars:17,consts:[[1,"mdc-form-field"],["formField",""],[1,"mdc-radio"],[1,"mat-mdc-radio-touch-target",3,"click"],["type","radio",1,"mdc-radio__native-control",3,"id","checked","disabled","required","change"],["input",""],[1,"mdc-radio__background"],[1,"mdc-radio__outer-circle"],[1,"mdc-radio__inner-circle"],["mat-ripple","",1,"mat-radio-ripple","mat-mdc-focus-indicator",3,"matRippleTrigger","matRippleDisabled","matRippleCentered"],[1,"mat-ripple-element","mat-radio-persistent-ripple"],[3,"for"]],template:function(t,n){if(1&t&&(fh(),Zt(0,"div",0,1)(2,"div",2)(3,"div",3),Fi("click",function(s){return n._onInputInteraction(s)}),un(),Zt(4,"input",4,5),Fi("change",function(s){return n._onInputInteraction(s)}),un(),Zt(6,"div",6),Pr(7,"div",7)(8,"div",8),un(),Zt(9,"div",9),Pr(10,"div",10),un()(),Zt(11,"label",11),uu(12),un()()),2&t){const r=bl(1);jo("mdc-form-field--align-end","before"==n.labelPosition),Nn(2),jo("mdc-radio--disabled",n.disabled),Nn(2),Cn("id",n.inputId)("checked",n.checked)("disabled",n.disabled)("required",n.required),Ea("name",n.name)("value",n.value)("aria-label",n.ariaLabel)("aria-labelledby",n.ariaLabelledby)("aria-describedby",n.ariaDescribedby),Nn(5),Cn("matRippleTrigger",r)("matRippleDisabled",n._isRippleDisabled())("matRippleCentered",!0),Nn(2),Cn("for",n.inputId)}},dependencies:[qA],styles:['.mdc-radio{display:inline-block;position:relative;flex:0 0 auto;box-sizing:content-box;width:20px;height:20px;cursor:pointer;will-change:opacity,transform,border-color,color}.mdc-radio[hidden]{display:none}.mdc-radio__background{display:inline-block;position:relative;box-sizing:border-box;width:20px;height:20px}.mdc-radio__background::before{position:absolute;transform:scale(0, 0);border-radius:50%;opacity:0;pointer-events:none;content:"";transition:opacity 120ms 0ms cubic-bezier(0.4, 0, 0.6, 1),transform 120ms 0ms cubic-bezier(0.4, 0, 0.6, 1)}.mdc-radio__outer-circle{position:absolute;top:0;left:0;box-sizing:border-box;width:100%;height:100%;border-width:2px;border-style:solid;border-radius:50%;transition:border-color 120ms 0ms cubic-bezier(0.4, 0, 0.6, 1)}.mdc-radio__inner-circle{position:absolute;top:0;left:0;box-sizing:border-box;width:100%;height:100%;transform:scale(0, 0);border-width:10px;border-style:solid;border-radius:50%;transition:transform 120ms 0ms cubic-bezier(0.4, 0, 0.6, 1),border-color 120ms 0ms cubic-bezier(0.4, 0, 0.6, 1)}.mdc-radio__native-control{position:absolute;margin:0;padding:0;opacity:0;cursor:inherit;z-index:1}.mdc-radio--touch{margin-top:4px;margin-bottom:4px;margin-right:4px;margin-left:4px}.mdc-radio--touch .mdc-radio__native-control{top:calc((40px - 48px) / 2);right:calc((40px - 48px) / 2);left:calc((40px - 48px) / 2);width:48px;height:48px}.mdc-radio.mdc-ripple-upgraded--background-focused .mdc-radio__focus-ring,.mdc-radio:not(.mdc-ripple-upgraded):focus .mdc-radio__focus-ring{pointer-events:none;border:2px solid rgba(0,0,0,0);border-radius:6px;box-sizing:content-box;position:absolute;top:50%;left:50%;transform:translate(-50%, -50%);height:100%;width:100%}@media screen and (forced-colors: active){.mdc-radio.mdc-ripple-upgraded--background-focused .mdc-radio__focus-ring,.mdc-radio:not(.mdc-ripple-upgraded):focus .mdc-radio__focus-ring{border-color:CanvasText}}.mdc-radio.mdc-ripple-upgraded--background-focused .mdc-radio__focus-ring::after,.mdc-radio:not(.mdc-ripple-upgraded):focus .mdc-radio__focus-ring::after{content:"";border:2px solid rgba(0,0,0,0);border-radius:8px;display:block;position:absolute;top:50%;left:50%;transform:translate(-50%, -50%);height:calc(100% + 4px);width:calc(100% + 4px)}@media screen and (forced-colors: active){.mdc-radio.mdc-ripple-upgraded--background-focused .mdc-radio__focus-ring::after,.mdc-radio:not(.mdc-ripple-upgraded):focus .mdc-radio__focus-ring::after{border-color:CanvasText}}.mdc-radio__native-control:checked+.mdc-radio__background,.mdc-radio__native-control:disabled+.mdc-radio__background{transition:opacity 120ms 0ms cubic-bezier(0, 0, 0.2, 1),transform 120ms 0ms cubic-bezier(0, 0, 0.2, 1)}.mdc-radio__native-control:checked+.mdc-radio__background .mdc-radio__outer-circle,.mdc-radio__native-control:disabled+.mdc-radio__background .mdc-radio__outer-circle{transition:border-color 120ms 0ms cubic-bezier(0, 0, 0.2, 1)}.mdc-radio__native-control:checked+.mdc-radio__background .mdc-radio__inner-circle,.mdc-radio__native-control:disabled+.mdc-radio__background .mdc-radio__inner-circle{transition:transform 120ms 0ms cubic-bezier(0, 0, 0.2, 1),border-color 120ms 0ms cubic-bezier(0, 0, 0.2, 1)}.mdc-radio--disabled{cursor:default;pointer-events:none}.mdc-radio__native-control:checked+.mdc-radio__background .mdc-radio__inner-circle{transform:scale(0.5);transition:transform 120ms 0ms cubic-bezier(0, 0, 0.2, 1),border-color 120ms 0ms cubic-bezier(0, 0, 0.2, 1)}.mdc-radio__native-control:disabled+.mdc-radio__background,[aria-disabled=true] .mdc-radio__native-control+.mdc-radio__background{cursor:default}.mdc-radio__native-control:focus+.mdc-radio__background::before{transform:scale(1);opacity:.12;transition:opacity 120ms 0ms cubic-bezier(0, 0, 0.2, 1),transform 120ms 0ms cubic-bezier(0, 0, 0.2, 1)}.mdc-form-field{display:inline-flex;align-items:center;vertical-align:middle}.mdc-form-field[hidden]{display:none}.mdc-form-field>label{margin-left:0;margin-right:auto;padding-left:4px;padding-right:0;order:0}[dir=rtl] .mdc-form-field>label,.mdc-form-field>label[dir=rtl]{margin-left:auto;margin-right:0}[dir=rtl] .mdc-form-field>label,.mdc-form-field>label[dir=rtl]{padding-left:0;padding-right:4px}.mdc-form-field--nowrap>label{text-overflow:ellipsis;overflow:hidden;white-space:nowrap}.mdc-form-field--align-end>label{margin-left:auto;margin-right:0;padding-left:0;padding-right:4px;order:-1}[dir=rtl] .mdc-form-field--align-end>label,.mdc-form-field--align-end>label[dir=rtl]{margin-left:0;margin-right:auto}[dir=rtl] .mdc-form-field--align-end>label,.mdc-form-field--align-end>label[dir=rtl]{padding-left:4px;padding-right:0}.mdc-form-field--space-between{justify-content:space-between}.mdc-form-field--space-between>label{margin:0}[dir=rtl] .mdc-form-field--space-between>label,.mdc-form-field--space-between>label[dir=rtl]{margin:0}.mat-mdc-radio-button{-webkit-tap-highlight-color:rgba(0,0,0,0)}.mat-mdc-radio-button .mdc-radio{padding:calc((var(--mdc-radio-state-layer-size, 40px) - 20px) / 2)}.mat-mdc-radio-button .mdc-radio [aria-disabled=true] .mdc-radio__native-control:checked+.mdc-radio__background .mdc-radio__outer-circle,.mat-mdc-radio-button .mdc-radio .mdc-radio__native-control:disabled:checked+.mdc-radio__background .mdc-radio__outer-circle{border-color:var(--mdc-radio-disabled-selected-icon-color, #000)}.mat-mdc-radio-button .mdc-radio [aria-disabled=true] .mdc-radio__native-control+.mdc-radio__background .mdc-radio__inner-circle,.mat-mdc-radio-button .mdc-radio .mdc-radio__native-control:disabled+.mdc-radio__background .mdc-radio__inner-circle{border-color:var(--mdc-radio-disabled-selected-icon-color, #000)}.mat-mdc-radio-button .mdc-radio [aria-disabled=true] .mdc-radio__native-control:checked+.mdc-radio__background .mdc-radio__outer-circle,.mat-mdc-radio-button .mdc-radio .mdc-radio__native-control:disabled:checked+.mdc-radio__background .mdc-radio__outer-circle{opacity:var(--mdc-radio-disabled-selected-icon-opacity, 0.38)}.mat-mdc-radio-button .mdc-radio [aria-disabled=true] .mdc-radio__native-control+.mdc-radio__background .mdc-radio__inner-circle,.mat-mdc-radio-button .mdc-radio .mdc-radio__native-control:disabled+.mdc-radio__background .mdc-radio__inner-circle{opacity:var(--mdc-radio-disabled-selected-icon-opacity, 0.38)}.mat-mdc-radio-button .mdc-radio [aria-disabled=true] .mdc-radio__native-control:not(:checked)+.mdc-radio__background .mdc-radio__outer-circle,.mat-mdc-radio-button .mdc-radio .mdc-radio__native-control:disabled:not(:checked)+.mdc-radio__background .mdc-radio__outer-circle{border-color:var(--mdc-radio-disabled-unselected-icon-color, #000)}.mat-mdc-radio-button .mdc-radio [aria-disabled=true] .mdc-radio__native-control:not(:checked)+.mdc-radio__background .mdc-radio__outer-circle,.mat-mdc-radio-button .mdc-radio .mdc-radio__native-control:disabled:not(:checked)+.mdc-radio__background .mdc-radio__outer-circle{opacity:var(--mdc-radio-disabled-unselected-icon-opacity, 0.38)}.mat-mdc-radio-button .mdc-radio.mdc-ripple-upgraded--background-focused .mdc-radio__native-control:enabled:checked+.mdc-radio__background .mdc-radio__outer-circle,.mat-mdc-radio-button .mdc-radio:not(.mdc-ripple-upgraded):focus .mdc-radio__native-control:enabled:checked+.mdc-radio__background .mdc-radio__outer-circle{border-color:var(--mdc-radio-selected-focus-icon-color, #6200ee)}.mat-mdc-radio-button .mdc-radio.mdc-ripple-upgraded--background-focused .mdc-radio__native-control:enabled+.mdc-radio__background .mdc-radio__inner-circle,.mat-mdc-radio-button .mdc-radio:not(.mdc-ripple-upgraded):focus .mdc-radio__native-control:enabled+.mdc-radio__background .mdc-radio__inner-circle{border-color:var(--mdc-radio-selected-focus-icon-color, #6200ee)}.mat-mdc-radio-button .mdc-radio:hover .mdc-radio__native-control:enabled:checked+.mdc-radio__background .mdc-radio__outer-circle{border-color:var(--mdc-radio-selected-hover-icon-color, #6200ee)}.mat-mdc-radio-button .mdc-radio:hover .mdc-radio__native-control:enabled+.mdc-radio__background .mdc-radio__inner-circle{border-color:var(--mdc-radio-selected-hover-icon-color, #6200ee)}.mat-mdc-radio-button .mdc-radio .mdc-radio__native-control:enabled:checked+.mdc-radio__background .mdc-radio__outer-circle{border-color:var(--mdc-radio-selected-icon-color, #6200ee)}.mat-mdc-radio-button .mdc-radio .mdc-radio__native-control:enabled+.mdc-radio__background .mdc-radio__inner-circle{border-color:var(--mdc-radio-selected-icon-color, #6200ee)}.mat-mdc-radio-button .mdc-radio:not(:disabled):active .mdc-radio__native-control:enabled:checked+.mdc-radio__background .mdc-radio__outer-circle{border-color:var(--mdc-radio-selected-pressed-icon-color, #6200ee)}.mat-mdc-radio-button .mdc-radio:not(:disabled):active .mdc-radio__native-control:enabled+.mdc-radio__background .mdc-radio__inner-circle{border-color:var(--mdc-radio-selected-pressed-icon-color, #6200ee)}.mat-mdc-radio-button .mdc-radio:hover .mdc-radio__native-control:enabled:not(:checked)+.mdc-radio__background .mdc-radio__outer-circle{border-color:var(--mdc-radio-unselected-hover-icon-color, #000)}.mat-mdc-radio-button .mdc-radio .mdc-radio__native-control:enabled:not(:checked)+.mdc-radio__background .mdc-radio__outer-circle{border-color:var(--mdc-radio-unselected-icon-color, #000)}.mat-mdc-radio-button .mdc-radio:not(:disabled):active .mdc-radio__native-control:enabled:not(:checked)+.mdc-radio__background .mdc-radio__outer-circle{border-color:var(--mdc-radio-unselected-pressed-icon-color, #000)}.mat-mdc-radio-button .mdc-radio .mdc-radio__background::before{top:calc(-1 * (var(--mdc-radio-state-layer-size, 40px) - 20px) / 2);left:calc(-1 * (var(--mdc-radio-state-layer-size, 40px) - 20px) / 2);width:var(--mdc-radio-state-layer-size, 40px);height:var(--mdc-radio-state-layer-size, 40px)}.mat-mdc-radio-button .mdc-radio .mdc-radio__native-control{top:calc((var(--mdc-radio-state-layer-size, 40px) - var(--mdc-radio-state-layer-size, 40px)) / 2);right:calc((var(--mdc-radio-state-layer-size, 40px) - var(--mdc-radio-state-layer-size, 40px)) / 2);left:calc((var(--mdc-radio-state-layer-size, 40px) - var(--mdc-radio-state-layer-size, 40px)) / 2);width:var(--mdc-radio-state-layer-size, 40px);height:var(--mdc-radio-state-layer-size, 40px)}.mat-mdc-radio-button .mdc-radio .mdc-radio__background::before{background-color:var(--mat-mdc-radio-ripple-color, transparent)}.mat-mdc-radio-button .mdc-radio:hover .mdc-radio__native-control:not([disabled]):not(:focus)~.mdc-radio__background::before{opacity:.04;transform:scale(1)}.mat-mdc-radio-button.mat-mdc-radio-checked .mdc-radio__background::before{background-color:var(--mat-mdc-radio-checked-ripple-color, transparent)}.mat-mdc-radio-button.mat-mdc-radio-checked .mat-ripple-element{background-color:var(--mat-mdc-radio-checked-ripple-color, transparent)}.mat-mdc-radio-button .mat-radio-ripple{top:0;left:0;right:0;bottom:0;position:absolute;pointer-events:none;border-radius:50%}.mat-mdc-radio-button .mat-radio-ripple .mat-ripple-element{opacity:.14}.mat-mdc-radio-button .mat-radio-ripple::before{border-radius:50%}.mat-mdc-radio-button._mat-animation-noopable .mdc-radio__background::before,.mat-mdc-radio-button._mat-animation-noopable .mdc-radio__outer-circle,.mat-mdc-radio-button._mat-animation-noopable .mdc-radio__inner-circle{transition:none !important}.mat-mdc-radio-button .mdc-radio .mdc-radio__native-control:focus:enabled:not(:checked)~.mdc-radio__background .mdc-radio__outer-circle{border-color:var(--mdc-radio-unselected-focus-icon-color, black)}.mat-mdc-radio-button.cdk-focused .mat-mdc-focus-indicator::before{content:""}.mat-mdc-radio-touch-target{position:absolute;top:50%;height:48px;left:50%;width:48px;transform:translate(-50%, -50%)}[dir=rtl] .mat-mdc-radio-touch-target{left:0;right:50%;transform:translate(50%, -50%)}'],encapsulation:2,changeDetection:0}),i})(),Mfe=(()=>{class i{}return i.\u0275fac=function(t){return new(t||i)},i.\u0275mod=ia({type:i}),i.\u0275inj=ft({imports:[Pu,D_,Fb,Pu]}),i})();function Sfe(i,e){if(1&i&&(Zt(0,"mat-radio-button",12),dr(1),un()),2&i){const t=e.$implicit;Cn("value",t),Nn(1),Gl("",t," ")}}class tx{constructor(e){Wt(this,"eventDisplay",void 0),Wt(this,"fittings",["Crop","Stretch"]),Wt(this,"fitting","Crop"),Wt(this,"width",3840),Wt(this,"height",2160),this.eventDisplay=e}ngOnInit(){}setWidth(e){this.width=e}setHeight(e){this.height=e}makePicture(){this.eventDisplay.makeScreenShot(this.width,this.height,this.fitting)}}Wt(tx,"\u0275fac",function(e){return new(e||tx)(wt(Qa))}),Wt(tx,"\u0275cmp",Fr({type:tx,selectors:[["app-make-picture"]],decls:20,vars:5,consts:[[1,"mat-menu"],["menu",""],["mat-menu-item","",1,"size-input",3,"click"],["mapInput","","type","number",3,"value","change","click"],["width",""],["height",""],["mat-menu-item","",3,"click"],[1,"fitting-radios",3,"ngModel","ngModelChange"],[3,"value",4,"ngFor","ngForOf"],["mat-menu-item","",1,"make-picture",3,"click"],["tooltip","Creates a picture from the current view: directly saves a png of arbitrary size from the current view","icon","png",3,"matMenuTriggerFor"],["hidden","","id","screenshotCanvas"],[3,"value"]],template:function(e,t){if(1&e){const n=Za();Zt(0,"mat-menu",0,1)(2,"button",2),Fi("click",function(s){return s.stopPropagation()}),Zt(3,"label"),dr(4,"width"),un(),Zt(5,"input",3,4),Fi("change",function(){ks(n);const s=bl(6);return ys(t.setWidth(s.value))})("click",function(s){return s.stopPropagation()}),un()(),Zt(7,"button",2),Fi("click",function(s){return s.stopPropagation()}),Zt(8,"label"),dr(9,"height"),un(),Zt(10,"input",3,5),Fi("change",function(){ks(n);const s=bl(11);return ys(t.setHeight(s.value))})("click",function(s){return s.stopPropagation()}),un()(),Zt(12,"button",6),Fi("click",function(s){return s.stopPropagation()}),Zt(13,"mat-radio-group",7),Fi("ngModelChange",function(s){return t.fitting=s}),qr(14,Sfe,2,2,"mat-radio-button",8),un()(),Zt(15,"button",9),Fi("click",function(){return t.makePicture()}),dr(16," Create picture "),un()(),Pr(17,"app-menu-toggle",10),Zt(18,"div"),Pr(19,"canvas",11),un()}if(2&e){const n=bl(1);Nn(5),Cn("value",3840),Nn(5),Cn("value",2610),Nn(3),Cn("ngModel",t.fitting),Nn(1),Cn("ngForOf",t.fittings),Nn(3),Cn("matMenuTriggerFor",n)}},dependencies:[Sf,IH,XF,HS,Ey,VS,YV,ZV,Ql],styles:[".size-input{background:transparent;color:var(--phoenix-text-color);text-align:center}.size-input label{width:60px}.size-input input{background:transparent;color:var(--phoenix-text-color);width:80px}.make-picture{text-align:center;display:block}.make-picture span{padding:5px 25px;border:2px solid var(--phoenix-text-color);border-radius:8px}\n"],encapsulation:2}));class nx{constructor(e){Wt(this,"eventDisplay",void 0),Wt(this,"performanceMode",!1),this.eventDisplay=e}togglePerformance(){this.performanceMode=!this.performanceMode,this.eventDisplay.getThreeManager().setAntialiasing(!this.performanceMode)}}Wt(nx,"\u0275fac",function(e){return new(e||nx)(wt(Qa))}),Wt(nx,"\u0275cmp",Fr({type:nx,selectors:[["app-performance-toggle"]],decls:1,vars:1,consts:[["tooltip","Performance mode","icon","performance",3,"active","click"]],template:function(e,t){1&e&&(Zt(0,"app-menu-toggle",0),Fi("click",function(){return t.togglePerformance()}),un()),2&e&&Cn("active",t.performanceMode)},dependencies:[Ql]}));var Tfe=Me(9393);const Efe=["qrcodeCanvas"];class R2{constructor(e){Wt(this,"dialogRef",void 0),Wt(this,"baseLink",void 0),Wt(this,"shareLink",void 0),Wt(this,"embedLink",void 0),Wt(this,"urlOptions",Object.assign({},gae)),Wt(this,"qrcodeCanvas",void 0),this.dialogRef=e;const t=window.location.href,n=-1===t.lastIndexOf("?")?t.length:t.lastIndexOf("?");this.baseLink=t.slice(0,n),this.shareLink=new f2(this.baseLink),this.embedLink=this.getEmbedLink()}ngAfterViewInit(){this.updateQRCode(this.shareLink.value),this.shareLink.onUpdate(this.updateQRCode.bind(this))}onClose(){this.dialogRef.close()}getEmbedLink(e=""){return``}setOptionValue(e,t){this.urlOptions[e]=t,this.onOptionsChange()}onOptionsChange(){const e=Object.getOwnPropertyNames(this.urlOptions).reduce((t,n)=>(this.urlOptions[n]&&t.push(`${n}=${encodeURI(this.urlOptions[n])}`),t),[]).join("&");this.shareLink.update(this.baseLink+(e?"?":"")+e),this.embedLink=this.getEmbedLink(e)}copyText(e,t){const n=document.createElement("input");document.body.appendChild(n),n.value=e,n.select(),document.execCommand("copy"),document.body.removeChild(n),t.focus(),t.innerText="COPIED",setTimeout(()=>{t.innerText="COPY"},2e3)}updateQRCode(e){Tfe.toCanvas(this.qrcodeCanvas.nativeElement,e)}}Wt(R2,"\u0275fac",function(e){return new(e||R2)(wt(JS))}),Wt(R2,"\u0275cmp",Fr({type:R2,selectors:[["app-share-link-dialog"]],viewQuery:function(e,t){if(1&e&&la(Efe,5),2&e){let n;so(n=oo())&&(t.qrcodeCanvas=n.first)}},decls:49,vars:5,consts:[[1,"dialog"],["mat-dialog-title",""],["mat-dialog-content","",1,"dialog-content"],[1,"form-group","mt-2"],["for","eventDataFile"],["type","text","id","eventDataFile","placeholder","assets/files/event_data/atlaseventdump2.json",1,"form-control",3,"value","input"],[1,"form-group"],["for","eventDataType"],["id","eventDataType",1,"form-control",3,"input"],["selected","","value",""],["value","jivexml"],["value","json"],["for","configuration"],["type","text","id","configuration","placeholder","assets/files/config/phoenix-config.json",1,"form-control",3,"value","input"],[3,"checked","change"],[1,"share-box","my-2"],[1,"share-box-copy",3,"click"],[1,"qrcode","d-flex","justify-content-center"],["qrcodeCanvas",""],["mat-dialog-actions",""],["mat-button","","cdkFocusInitial","",3,"click"]],template:function(e,t){1&e&&(Zt(0,"div",0)(1,"h1",1),dr(2,"Create shareable link"),un(),Zt(3,"div",2)(4,"h5"),dr(5,"URL options"),un(),Zt(6,"div",3)(7,"label",4),dr(8,"Event data file (URL or path)"),un(),Zt(9,"input",5),Fi("input",function(r){return t.setOptionValue("file",r.target.value)}),un()(),Zt(10,"div",6)(11,"label",7),dr(12,"Event data type"),un(),Zt(13,"select",8),Fi("input",function(r){return t.setOptionValue("type",r.target.value)}),Zt(14,"option",9),dr(15,"Select"),un(),Zt(16,"option",10),dr(17,"JiveXML"),un(),Zt(18,"option",11),dr(19,"JSON"),un()()(),Zt(20,"div",6)(21,"label",12),dr(22,"Configuration (URL or path)"),un(),Zt(23,"input",13),Fi("input",function(r){return t.setOptionValue("config",r.target.value)}),un()(),Zt(24,"div",6)(25,"mat-checkbox",14),Fi("change",function(r){return t.setOptionValue("hideWidgets",r.checked)}),dr(26," Hide all widgets "),un()(),Zt(27,"h5"),dr(28,"Share"),un(),Zt(29,"div",15)(30,"span"),dr(31),un(),Zt(32,"button",16),Fi("click",function(r){return t.copyText(t.shareLink.value,r.target)}),dr(33," COPY "),un()(),Zt(34,"h5"),dr(35,"Embed"),un(),Zt(36,"div",15)(37,"span"),dr(38),un(),Zt(39,"button",16),Fi("click",function(r){return t.copyText(t.embedLink,r.target)}),dr(40," COPY "),un()(),Zt(41,"h5"),dr(42,"QR Code"),un(),Zt(43,"div",17),Pr(44,"canvas",null,18),un()(),Zt(46,"div",19)(47,"button",20),Fi("click",function(){return t.onClose()}),dr(48,"Close"),un()()()),2&e&&(Nn(9),Cn("value",t.urlOptions.file),Nn(14),Cn("value",t.urlOptions.config),Nn(2),Cn("checked",t.urlOptions.hideWidgets),Nn(6),ph(t.shareLink.value),Nn(7),ph(t.embedLink))},dependencies:[AO,mO,gO,t3,$S,XS,E2],styles:[".share-box[_ngcontent-%COMP%]{width:30rem;max-width:100%;position:relative;background:var(--phoenix-background-color-tertiary);border:1px solid var(--phoenix-border);border-radius:.5rem;padding:1.25rem;word-wrap:break-word}.share-box[_ngcontent-%COMP%] .share-box-copy[_ngcontent-%COMP%]{position:absolute;top:-1px;right:-1px;background:transparent;color:inherit;cursor:pointer;padding:.25rem .5rem;font-size:.75rem;border:1px solid var(--phoenix-border);border-radius:.5rem}.share-box[_ngcontent-%COMP%] .share-box-copy[_ngcontent-%COMP%]:hover{background:var(--phoenix-border)}"]}));class ix{constructor(e){Wt(this,"dialog",void 0),this.dialog=e}openShareLinkDialog(){this.dialog.open(R2)}}Wt(ix,"\u0275fac",function(e){return new(e||ix)(wt(e3))}),Wt(ix,"\u0275cmp",Fr({type:ix,selectors:[["app-share-link"]],decls:1,vars:1,consts:[["tooltip","Create shareable link","icon","share",3,"active","click"]],template:function(e,t){1&e&&(Zt(0,"app-menu-toggle",0),Fi("click",function(){return t.openShareLinkDialog()}),un()),2&e&&Cn("active",!1)},dependencies:[Ql]}));class j_{constructor(){Wt(this,"eventDataImportOptions",Object.values(Xh)),Wt(this,"animationPresets",rH)}}function Bfe(i,e){if(1&i&&(Zt(0,"a",5),Pr(1,"img",6),un()),2&i){const t=Mr();Cn("href",t.url,yd),Nn(1),Cn("src",t.logo,yd)}}function Ife(i,e){if(1&i&&(Zt(0,"p")(1,"b"),dr(2),un()()),2&i){const t=Mr();Nn(2),ph(t.tagline)}}function Pfe(i,e){if(1&i&&(bd(0),Zt(1,"b"),dr(2),un(),dr(3),dh()),2&i){const t=Mr().$implicit;Nn(2),Gl("",t.label,": "),Nn(1),Gl("",t.value," ")}}function kfe(i,e){if(1&i&&(bd(0),dr(1),dh()),2&i){const t=Mr().$implicit;Nn(1),Gl(" ",t," ")}}function Ffe(i,e){if(1&i&&(Zt(0,"p"),qr(1,Pfe,4,2,"ng-container",3),qr(2,kfe,2,1,"ng-container",3),un()),2&i){const t=e.$implicit;Nn(1),Cn("ngIf",t.label),Nn(1),Cn("ngIf",!t.label)}}Wt(j_,"\u0275fac",function(e){return new(e||j_)}),Wt(j_,"\u0275cmp",Fr({type:j_,selectors:[["app-ui-menu"]],inputs:{eventDataImportOptions:"eventDataImportOptions",animationPresets:"animationPresets"},ngContentSelectors:["*"],decls:22,vars:2,consts:[[3,"animationPresets"],[3,"eventDataImportOptions"]],template:function(e,t){1&e&&(fh(),Zt(0,"app-ui-menu-wrapper"),Pr(1,"app-event-selector")(2,"app-zoom-controls")(3,"app-view-options")(4,"app-auto-rotate")(5,"app-dark-theme")(6,"app-object-clipping")(7,"app-main-view-toggle")(8,"app-overlay-view")(9,"app-object-selection")(10,"app-info-panel")(11,"app-animate-event")(12,"app-animate-camera",0)(13,"app-collections-info")(14,"app-performance-toggle")(15,"app-vr-toggle")(16,"app-ar-toggle")(17,"app-ss-mode")(18,"app-make-picture")(19,"app-io-options",1)(20,"app-share-link"),uu(21),un()),2&e&&(Nn(12),Cn("animationPresets",t.animationPresets),Nn(7),Cn("eventDataImportOptions",t.eventDataImportOptions))},dependencies:[zb,Gb,qb,Qb,Wb,jb,$b,Py,ky,Xb,Kb,Fy,Yb,Ub,Oy,Zb,Jb,ex,tx,nx,ix]}));class Ry{constructor(e){Wt(this,"eventDisplay",void 0),Wt(this,"experimentInfo",void 0),Wt(this,"url",void 0),Wt(this,"logo",void 0),Wt(this,"tagline",void 0),this.eventDisplay=e}ngOnInit(){this.eventDisplay.listenToDisplayedEventChange(()=>{this.experimentInfo=this.eventDisplay.getEventMetadata()})}}Wt(Ry,"\u0275fac",function(e){return new(e||Ry)(wt(Qa))}),Wt(Ry,"\u0275cmp",Fr({type:Ry,selectors:[["app-experiment-info"]],inputs:{url:"url",logo:"logo",tagline:"tagline"},decls:5,vars:3,consts:[["id","experimentInfo","cdkDrag","","cdkDragBoundary","body",1,"experimentInfo"],["class","experimentLogoWrapper","target","_blank","rel","noopener noreferrer",3,"href",4,"ngIf"],[1,"textInfo"],[4,"ngIf"],[4,"ngFor","ngForOf"],["target","_blank","rel","noopener noreferrer",1,"experimentLogoWrapper",3,"href"],["alt","",1,"experimentLogo",3,"src"]],template:function(e,t){1&e&&(Zt(0,"div",0),qr(1,Bfe,2,2,"a",1),Zt(2,"div",2),qr(3,Ife,3,1,"p",3),qr(4,Ffe,3,2,"p",4),un()()),2&e&&(Nn(1),Cn("ngIf",t.url),Nn(2),Cn("ngIf",t.tagline),Nn(1),Cn("ngForOf",t.experimentInfo))},dependencies:[Sf,Tu,hO],styles:[".experimentInfo[_ngcontent-%COMP%]{position:absolute;top:5rem;left:1rem;display:flex;flex-direction:row;justify-items:flex-end;justify-content:flex-end;align-items:center;align-content:center;font-family:Courier New,Lucida Console,monospace;cursor:move}.experimentLogoWrapper[_ngcontent-%COMP%]{width:6rem}.experimentLogoWrapper[_ngcontent-%COMP%] .experimentLogo[_ngcontent-%COMP%]{width:100%;height:100%}.textInfo[_ngcontent-%COMP%]{margin-left:1rem}.textInfo[_ngcontent-%COMP%] p[_ngcontent-%COMP%]{color:var(--phoenix-text-color-secondary);font-size:.8rem;margin-bottom:.5rem;-webkit-user-select:none;user-select:none}@media screen and (max-width: 768px){.experimentInfo[_ngcontent-%COMP%]{top:4rem;max-width:40%}.experimentLogoWrapper[_ngcontent-%COMP%]{height:4rem}.textInfo[_ngcontent-%COMP%]{display:none}}"]}));const Ofe=["switch"],Rfe=["*"],Lfe=new cr("mat-slide-toggle-default-options",{providedIn:"root",factory:()=>({disableToggleValue:!1})}),Nfe={provide:Kd,useExisting:ar(()=>eG),multi:!0};class JV{constructor(e,t){this.source=e,this.checked=t}}let Ufe=0;const zfe=AD(C2(kb(Pb(class{constructor(i){this._elementRef=i}}))));let Hfe=(()=>{class i extends zfe{get required(){return this._required}set required(t){this._required=pa(t)}get checked(){return this._checked}set checked(t){this._checked=pa(t),this._changeDetectorRef.markForCheck()}get inputId(){return`${this.id||this._uniqueId}-input`}constructor(t,n,r,s,a,l,u){super(t),this._focusMonitor=n,this._changeDetectorRef=r,this.defaults=a,this._onChange=d=>{},this._onTouched=()=>{},this._required=!1,this._checked=!1,this.name=null,this.labelPosition="after",this.ariaLabel=null,this.ariaLabelledby=null,this.change=new Ws,this.toggleChange=new Ws,this.tabIndex=parseInt(s)||0,this.color=this.defaultColor=a.color||"accent",this._noopAnimations="NoopAnimations"===l,this.id=this._uniqueId=`${u}${++Ufe}`}ngAfterContentInit(){this._focusMonitor.monitor(this._elementRef,!0).subscribe(t=>{"keyboard"===t||"program"===t?(this._focused=!0,this._changeDetectorRef.markForCheck()):t||Promise.resolve().then(()=>{this._focused=!1,this._onTouched(),this._changeDetectorRef.markForCheck()})})}ngOnDestroy(){this._focusMonitor.stopMonitoring(this._elementRef)}writeValue(t){this.checked=!!t}registerOnChange(t){this._onChange=t}registerOnTouched(t){this._onTouched=t}setDisabledState(t){this.disabled=t,this._changeDetectorRef.markForCheck()}toggle(){this.checked=!this.checked,this._onChange(this.checked)}_emitChangeEvent(){this._onChange(this.checked),this.change.emit(this._createChangeEvent(this.checked))}}return i.\u0275fac=function(t){Qd()},i.\u0275dir=Oi({type:i,inputs:{name:"name",id:"id",labelPosition:"labelPosition",ariaLabel:["aria-label","ariaLabel"],ariaLabelledby:["aria-labelledby","ariaLabelledby"],ariaDescribedby:["aria-describedby","ariaDescribedby"],required:"required",checked:"checked"},outputs:{change:"change",toggleChange:"toggleChange"},features:[As]}),i})(),eG=(()=>{class i extends Hfe{get buttonId(){return`${this.id||this._uniqueId}-button`}constructor(t,n,r,s,a,l){super(t,n,r,s,a,l,"mat-mdc-slide-toggle-"),this._labelId=this._uniqueId+"-label"}_handleClick(){this.toggleChange.emit(),this.defaults.disableToggleValue||(this.checked=!this.checked,this._onChange(this.checked),this.change.emit(new JV(this,this.checked)))}focus(){this._switchElement.nativeElement.focus()}_createChangeEvent(t){return new JV(this,t)}_getAriaLabelledBy(){return this.ariaLabelledby?this.ariaLabelledby:this.ariaLabel?null:this._labelId}}return i.\u0275fac=function(t){return new(t||i)(wt(Cs),wt(A0),wt(pl),Oh("tabindex"),wt(Lfe),wt(_h,8))},i.\u0275cmp=Fr({type:i,selectors:[["mat-slide-toggle"]],viewQuery:function(t,n){if(1&t&&la(Ofe,5),2&t){let r;so(r=oo())&&(n._switchElement=r.first)}},hostAttrs:[1,"mat-mdc-slide-toggle"],hostVars:11,hostBindings:function(t,n){2&t&&(Di("id",n.id),Ea("tabindex",null)("aria-label",null)("name",null)("aria-labelledby",null),jo("mat-mdc-slide-toggle-focused",n._focused)("mat-mdc-slide-toggle-checked",n.checked)("_mat-animation-noopable",n._noopAnimations))},inputs:{disabled:"disabled",disableRipple:"disableRipple",color:"color",tabIndex:"tabIndex"},exportAs:["matSlideToggle"],features:[Po([Nfe]),As],ngContentSelectors:Rfe,decls:17,vars:24,consts:[[1,"mdc-form-field"],["role","switch","type","button",1,"mdc-switch",3,"tabIndex","disabled","click"],["switch",""],[1,"mdc-switch__track"],[1,"mdc-switch__handle-track"],[1,"mdc-switch__handle"],[1,"mdc-switch__shadow"],[1,"mdc-elevation-overlay"],[1,"mdc-switch__ripple"],["mat-ripple","",1,"mat-mdc-slide-toggle-ripple","mat-mdc-focus-indicator",3,"matRippleTrigger","matRippleDisabled","matRippleCentered"],[1,"mdc-switch__icons"],["viewBox","0 0 24 24",1,"mdc-switch__icon","mdc-switch__icon--on"],["d","M19.69,5.23L8.96,15.96l-4.23-4.23L2.96,13.5l6,6L21.46,7L19.69,5.23z"],["viewBox","0 0 24 24",1,"mdc-switch__icon","mdc-switch__icon--off"],["d","M20 13H4v-2h16v2z"],[3,"for","click"]],template:function(t,n){if(1&t&&(fh(),Zt(0,"div",0)(1,"button",1,2),Fi("click",function(){return n._handleClick()}),Pr(3,"div",3),Zt(4,"div",4)(5,"div",5)(6,"div",6),Pr(7,"div",7),un(),Zt(8,"div",8),Pr(9,"div",9),un(),Zt(10,"div",10),vl(),Zt(11,"svg",11),Pr(12,"path",12),un(),Zt(13,"svg",13),Pr(14,"path",14),un()()()()(),cd(),Zt(15,"label",15),Fi("click",function(s){return s.stopPropagation()}),uu(16),un()()),2&t){const r=bl(2);jo("mdc-form-field--align-end","before"==n.labelPosition),Nn(1),jo("mdc-switch--selected",n.checked)("mdc-switch--unselected",!n.checked)("mdc-switch--checked",n.checked)("mdc-switch--disabled",n.disabled),Cn("tabIndex",n.tabIndex)("disabled",n.disabled),Ea("id",n.buttonId)("name",n.name)("aria-label",n.ariaLabel)("aria-labelledby",n._getAriaLabelledBy())("aria-describedby",n.ariaDescribedby)("aria-required",n.required||null)("aria-checked",n.checked),Nn(8),Cn("matRippleTrigger",r)("matRippleDisabled",n.disableRipple||n.disabled)("matRippleCentered",!0),Nn(6),Cn("for",n.buttonId),Ea("id",n._labelId)}},dependencies:[qA],styles:['.mdc-form-field{display:inline-flex;align-items:center;vertical-align:middle}.mdc-form-field[hidden]{display:none}.mdc-form-field>label{margin-left:0;margin-right:auto;padding-left:4px;padding-right:0;order:0}[dir=rtl] .mdc-form-field>label,.mdc-form-field>label[dir=rtl]{margin-left:auto;margin-right:0}[dir=rtl] .mdc-form-field>label,.mdc-form-field>label[dir=rtl]{padding-left:0;padding-right:4px}.mdc-form-field--nowrap>label{text-overflow:ellipsis;overflow:hidden;white-space:nowrap}.mdc-form-field--align-end>label{margin-left:auto;margin-right:0;padding-left:0;padding-right:4px;order:-1}[dir=rtl] .mdc-form-field--align-end>label,.mdc-form-field--align-end>label[dir=rtl]{margin-left:0;margin-right:auto}[dir=rtl] .mdc-form-field--align-end>label,.mdc-form-field--align-end>label[dir=rtl]{padding-left:4px;padding-right:0}.mdc-form-field--space-between{justify-content:space-between}.mdc-form-field--space-between>label{margin:0}[dir=rtl] .mdc-form-field--space-between>label,.mdc-form-field--space-between>label[dir=rtl]{margin:0}.mdc-elevation-overlay{position:absolute;border-radius:inherit;pointer-events:none;opacity:var(--mdc-elevation-overlay-opacity, 0);transition:opacity 280ms cubic-bezier(0.4, 0, 0.2, 1);background-color:var(--mdc-elevation-overlay-color, #fff)}.mdc-switch{align-items:center;background:none;border:none;cursor:pointer;display:inline-flex;flex-shrink:0;margin:0;outline:none;overflow:visible;padding:0;position:relative}.mdc-switch[hidden]{display:none}.mdc-switch:disabled{cursor:default;pointer-events:none}.mdc-switch__track{overflow:hidden;position:relative;width:100%}.mdc-switch__track::before,.mdc-switch__track::after{border:1px solid rgba(0,0,0,0);border-radius:inherit;box-sizing:border-box;content:"";height:100%;left:0;position:absolute;width:100%}@media screen and (forced-colors: active){.mdc-switch__track::before,.mdc-switch__track::after{border-color:currentColor}}.mdc-switch__track::before{transition:transform 75ms 0ms cubic-bezier(0, 0, 0.2, 1);transform:translateX(0)}.mdc-switch__track::after{transition:transform 75ms 0ms cubic-bezier(0.4, 0, 0.6, 1);transform:translateX(-100%)}[dir=rtl] .mdc-switch__track::after,.mdc-switch__track[dir=rtl]::after{transform:translateX(100%)}.mdc-switch--selected .mdc-switch__track::before{transition:transform 75ms 0ms cubic-bezier(0.4, 0, 0.6, 1);transform:translateX(100%)}[dir=rtl] .mdc-switch--selected .mdc-switch__track::before,.mdc-switch--selected .mdc-switch__track[dir=rtl]::before{transform:translateX(-100%)}.mdc-switch--selected .mdc-switch__track::after{transition:transform 75ms 0ms cubic-bezier(0, 0, 0.2, 1);transform:translateX(0)}.mdc-switch__handle-track{height:100%;pointer-events:none;position:absolute;top:0;transition:transform 75ms 0ms cubic-bezier(0.4, 0, 0.2, 1);left:0;right:auto;transform:translateX(0)}[dir=rtl] .mdc-switch__handle-track,.mdc-switch__handle-track[dir=rtl]{left:auto;right:0}.mdc-switch--selected .mdc-switch__handle-track{transform:translateX(100%)}[dir=rtl] .mdc-switch--selected .mdc-switch__handle-track,.mdc-switch--selected .mdc-switch__handle-track[dir=rtl]{transform:translateX(-100%)}.mdc-switch__handle{display:flex;pointer-events:auto;position:absolute;top:50%;transform:translateY(-50%);left:0;right:auto}[dir=rtl] .mdc-switch__handle,.mdc-switch__handle[dir=rtl]{left:auto;right:0}.mdc-switch__handle::before,.mdc-switch__handle::after{border:1px solid rgba(0,0,0,0);border-radius:inherit;box-sizing:border-box;content:"";width:100%;height:100%;left:0;position:absolute;top:0;transition:background-color 75ms 0ms cubic-bezier(0.4, 0, 0.2, 1),border-color 75ms 0ms cubic-bezier(0.4, 0, 0.2, 1);z-index:-1}@media screen and (forced-colors: active){.mdc-switch__handle::before,.mdc-switch__handle::after{border-color:currentColor}}.mdc-switch__shadow{border-radius:inherit;bottom:0;left:0;position:absolute;right:0;top:0}.mdc-elevation-overlay{bottom:0;left:0;right:0;top:0}.mdc-switch__ripple{left:50%;position:absolute;top:50%;transform:translate(-50%, -50%);z-index:-1}.mdc-switch:disabled .mdc-switch__ripple{display:none}.mdc-switch__icons{height:100%;position:relative;width:100%;z-index:1}.mdc-switch__icon{bottom:0;left:0;margin:auto;position:absolute;right:0;top:0;opacity:0;transition:opacity 30ms 0ms cubic-bezier(0.4, 0, 1, 1)}.mdc-switch--selected .mdc-switch__icon--on,.mdc-switch--unselected .mdc-switch__icon--off{opacity:1;transition:opacity 45ms 30ms cubic-bezier(0, 0, 0.2, 1)}.mat-mdc-slide-toggle{display:inline-block;-webkit-tap-highlight-color:rgba(0,0,0,0);outline:0}.mat-mdc-slide-toggle .mdc-switch{width:var(--mdc-switch-track-width, 36px)}.mat-mdc-slide-toggle .mdc-switch.mdc-switch--selected:enabled .mdc-switch__handle::after{background:var(--mdc-switch-selected-handle-color, var(--mdc-theme-primary, #6200ee))}.mat-mdc-slide-toggle .mdc-switch.mdc-switch--selected:enabled:hover:not(:focus):not(:active) .mdc-switch__handle::after{background:var(--mdc-switch-selected-hover-handle-color, #310077)}.mat-mdc-slide-toggle .mdc-switch.mdc-switch--selected:enabled:focus:not(:active) .mdc-switch__handle::after{background:var(--mdc-switch-selected-focus-handle-color, #310077)}.mat-mdc-slide-toggle .mdc-switch.mdc-switch--selected:enabled:active .mdc-switch__handle::after{background:var(--mdc-switch-selected-pressed-handle-color, #310077)}.mat-mdc-slide-toggle .mdc-switch.mdc-switch--selected:disabled .mdc-switch__handle::after{background:var(--mdc-switch-disabled-selected-handle-color, #424242)}.mat-mdc-slide-toggle .mdc-switch.mdc-switch--unselected:enabled .mdc-switch__handle::after{background:var(--mdc-switch-unselected-handle-color, #616161)}.mat-mdc-slide-toggle .mdc-switch.mdc-switch--unselected:enabled:hover:not(:focus):not(:active) .mdc-switch__handle::after{background:var(--mdc-switch-unselected-hover-handle-color, #212121)}.mat-mdc-slide-toggle .mdc-switch.mdc-switch--unselected:enabled:focus:not(:active) .mdc-switch__handle::after{background:var(--mdc-switch-unselected-focus-handle-color, #212121)}.mat-mdc-slide-toggle .mdc-switch.mdc-switch--unselected:enabled:active .mdc-switch__handle::after{background:var(--mdc-switch-unselected-pressed-handle-color, #212121)}.mat-mdc-slide-toggle .mdc-switch.mdc-switch--unselected:disabled .mdc-switch__handle::after{background:var(--mdc-switch-disabled-unselected-handle-color, #424242)}.mat-mdc-slide-toggle .mdc-switch .mdc-switch__handle::before{background:var(--mdc-switch-handle-surface-color, var(--mdc-theme-surface, #fff))}.mat-mdc-slide-toggle .mdc-switch:enabled .mdc-switch__shadow{box-shadow:var(--mdc-switch-handle-elevation, 0px 2px 1px -1px rgba(0, 0, 0, 0.2), 0px 1px 1px 0px rgba(0, 0, 0, 0.14), 0px 1px 3px 0px rgba(0, 0, 0, 0.12))}.mat-mdc-slide-toggle .mdc-switch:disabled .mdc-switch__shadow{box-shadow:var(--mdc-switch-disabled-handle-elevation, 0px 0px 0px 0px rgba(0, 0, 0, 0.2), 0px 0px 0px 0px rgba(0, 0, 0, 0.14), 0px 0px 0px 0px rgba(0, 0, 0, 0.12))}.mat-mdc-slide-toggle .mdc-switch .mdc-switch__focus-ring-wrapper,.mat-mdc-slide-toggle .mdc-switch .mdc-switch__handle{height:var(--mdc-switch-handle-height, 20px)}.mat-mdc-slide-toggle .mdc-switch:disabled .mdc-switch__handle::after{opacity:var(--mdc-switch-disabled-handle-opacity, 0.38)}.mat-mdc-slide-toggle .mdc-switch .mdc-switch__handle{border-radius:var(--mdc-switch-handle-shape, 10px)}.mat-mdc-slide-toggle .mdc-switch .mdc-switch__handle{width:var(--mdc-switch-handle-width, 20px)}.mat-mdc-slide-toggle .mdc-switch .mdc-switch__handle-track{width:calc(100% - var(--mdc-switch-handle-width, 20px))}.mat-mdc-slide-toggle .mdc-switch.mdc-switch--selected:enabled .mdc-switch__icon{fill:var(--mdc-switch-selected-icon-color, var(--mdc-theme-on-primary, #fff))}.mat-mdc-slide-toggle .mdc-switch.mdc-switch--selected:disabled .mdc-switch__icon{fill:var(--mdc-switch-disabled-selected-icon-color, var(--mdc-theme-on-primary, #fff))}.mat-mdc-slide-toggle .mdc-switch.mdc-switch--unselected:enabled .mdc-switch__icon{fill:var(--mdc-switch-unselected-icon-color, var(--mdc-theme-on-primary, #fff))}.mat-mdc-slide-toggle .mdc-switch.mdc-switch--unselected:disabled .mdc-switch__icon{fill:var(--mdc-switch-disabled-unselected-icon-color, var(--mdc-theme-on-primary, #fff))}.mat-mdc-slide-toggle .mdc-switch.mdc-switch--selected:disabled .mdc-switch__icons{opacity:var(--mdc-switch-disabled-selected-icon-opacity, 0.38)}.mat-mdc-slide-toggle .mdc-switch.mdc-switch--unselected:disabled .mdc-switch__icons{opacity:var(--mdc-switch-disabled-unselected-icon-opacity, 0.38)}.mat-mdc-slide-toggle .mdc-switch.mdc-switch--selected .mdc-switch__icon{width:var(--mdc-switch-selected-icon-size, 18px);height:var(--mdc-switch-selected-icon-size, 18px)}.mat-mdc-slide-toggle .mdc-switch.mdc-switch--unselected .mdc-switch__icon{width:var(--mdc-switch-unselected-icon-size, 18px);height:var(--mdc-switch-unselected-icon-size, 18px)}.mat-mdc-slide-toggle .mdc-switch.mdc-switch--selected:enabled:hover:not(:focus) .mdc-switch__ripple::before,.mat-mdc-slide-toggle .mdc-switch.mdc-switch--selected:enabled:hover:not(:focus) .mdc-switch__ripple::after{background-color:var(--mdc-switch-selected-hover-state-layer-color, var(--mdc-theme-primary, #6200ee))}.mat-mdc-slide-toggle .mdc-switch.mdc-switch--selected:enabled:focus .mdc-switch__ripple::before,.mat-mdc-slide-toggle .mdc-switch.mdc-switch--selected:enabled:focus .mdc-switch__ripple::after{background-color:var(--mdc-switch-selected-focus-state-layer-color, var(--mdc-theme-primary, #6200ee))}.mat-mdc-slide-toggle .mdc-switch.mdc-switch--selected:enabled:active .mdc-switch__ripple::before,.mat-mdc-slide-toggle .mdc-switch.mdc-switch--selected:enabled:active .mdc-switch__ripple::after{background-color:var(--mdc-switch-selected-pressed-state-layer-color, var(--mdc-theme-primary, #6200ee))}.mat-mdc-slide-toggle .mdc-switch.mdc-switch--unselected:enabled:hover:not(:focus) .mdc-switch__ripple::before,.mat-mdc-slide-toggle .mdc-switch.mdc-switch--unselected:enabled:hover:not(:focus) .mdc-switch__ripple::after{background-color:var(--mdc-switch-unselected-hover-state-layer-color, #424242)}.mat-mdc-slide-toggle .mdc-switch.mdc-switch--unselected:enabled:focus .mdc-switch__ripple::before,.mat-mdc-slide-toggle .mdc-switch.mdc-switch--unselected:enabled:focus .mdc-switch__ripple::after{background-color:var(--mdc-switch-unselected-focus-state-layer-color, #424242)}.mat-mdc-slide-toggle .mdc-switch.mdc-switch--unselected:enabled:active .mdc-switch__ripple::before,.mat-mdc-slide-toggle .mdc-switch.mdc-switch--unselected:enabled:active .mdc-switch__ripple::after{background-color:var(--mdc-switch-unselected-pressed-state-layer-color, #424242)}.mat-mdc-slide-toggle .mdc-switch.mdc-switch--selected:enabled:hover:not(:focus):hover .mdc-switch__ripple::before,.mat-mdc-slide-toggle .mdc-switch.mdc-switch--selected:enabled:hover:not(:focus).mdc-ripple-surface--hover .mdc-switch__ripple::before{opacity:var(--mdc-switch-selected-hover-state-layer-opacity, 0.04)}.mat-mdc-slide-toggle .mdc-switch.mdc-switch--selected:enabled:focus.mdc-ripple-upgraded--background-focused .mdc-switch__ripple::before,.mat-mdc-slide-toggle .mdc-switch.mdc-switch--selected:enabled:focus:not(.mdc-ripple-upgraded):focus .mdc-switch__ripple::before{transition-duration:75ms;opacity:var(--mdc-switch-selected-focus-state-layer-opacity, 0.12)}.mat-mdc-slide-toggle .mdc-switch.mdc-switch--selected:enabled:active:not(.mdc-ripple-upgraded) .mdc-switch__ripple::after{transition:opacity 150ms linear}.mat-mdc-slide-toggle .mdc-switch.mdc-switch--selected:enabled:active:not(.mdc-ripple-upgraded):active .mdc-switch__ripple::after{transition-duration:75ms;opacity:var(--mdc-switch-selected-pressed-state-layer-opacity, 0.1)}.mat-mdc-slide-toggle .mdc-switch.mdc-switch--selected:enabled:active.mdc-ripple-upgraded{--mdc-ripple-fg-opacity:var(--mdc-switch-selected-pressed-state-layer-opacity, 0.1)}.mat-mdc-slide-toggle .mdc-switch.mdc-switch--unselected:enabled:hover:not(:focus):hover .mdc-switch__ripple::before,.mat-mdc-slide-toggle .mdc-switch.mdc-switch--unselected:enabled:hover:not(:focus).mdc-ripple-surface--hover .mdc-switch__ripple::before{opacity:var(--mdc-switch-unselected-hover-state-layer-opacity, 0.04)}.mat-mdc-slide-toggle .mdc-switch.mdc-switch--unselected:enabled:focus.mdc-ripple-upgraded--background-focused .mdc-switch__ripple::before,.mat-mdc-slide-toggle .mdc-switch.mdc-switch--unselected:enabled:focus:not(.mdc-ripple-upgraded):focus .mdc-switch__ripple::before{transition-duration:75ms;opacity:var(--mdc-switch-unselected-focus-state-layer-opacity, 0.12)}.mat-mdc-slide-toggle .mdc-switch.mdc-switch--unselected:enabled:active:not(.mdc-ripple-upgraded) .mdc-switch__ripple::after{transition:opacity 150ms linear}.mat-mdc-slide-toggle .mdc-switch.mdc-switch--unselected:enabled:active:not(.mdc-ripple-upgraded):active .mdc-switch__ripple::after{transition-duration:75ms;opacity:var(--mdc-switch-unselected-pressed-state-layer-opacity, 0.1)}.mat-mdc-slide-toggle .mdc-switch.mdc-switch--unselected:enabled:active.mdc-ripple-upgraded{--mdc-ripple-fg-opacity:var(--mdc-switch-unselected-pressed-state-layer-opacity, 0.1)}.mat-mdc-slide-toggle .mdc-switch .mdc-switch__ripple{height:var(--mdc-switch-state-layer-size, 48px);width:var(--mdc-switch-state-layer-size, 48px)}.mat-mdc-slide-toggle .mdc-switch .mdc-switch__track{height:var(--mdc-switch-track-height, 14px)}.mat-mdc-slide-toggle .mdc-switch:disabled .mdc-switch__track{opacity:var(--mdc-switch-disabled-track-opacity, 0.12)}.mat-mdc-slide-toggle .mdc-switch:enabled .mdc-switch__track::after{background:var(--mdc-switch-selected-track-color, #d7bbff)}.mat-mdc-slide-toggle .mdc-switch:enabled:hover:not(:focus):not(:active) .mdc-switch__track::after{background:var(--mdc-switch-selected-hover-track-color, #d7bbff)}.mat-mdc-slide-toggle .mdc-switch:enabled:focus:not(:active) .mdc-switch__track::after{background:var(--mdc-switch-selected-focus-track-color, #d7bbff)}.mat-mdc-slide-toggle .mdc-switch:enabled:active .mdc-switch__track::after{background:var(--mdc-switch-selected-pressed-track-color, #d7bbff)}.mat-mdc-slide-toggle .mdc-switch:disabled .mdc-switch__track::after{background:var(--mdc-switch-disabled-selected-track-color, #424242)}.mat-mdc-slide-toggle .mdc-switch:enabled .mdc-switch__track::before{background:var(--mdc-switch-unselected-track-color, #e0e0e0)}.mat-mdc-slide-toggle .mdc-switch:enabled:hover:not(:focus):not(:active) .mdc-switch__track::before{background:var(--mdc-switch-unselected-hover-track-color, #e0e0e0)}.mat-mdc-slide-toggle .mdc-switch:enabled:focus:not(:active) .mdc-switch__track::before{background:var(--mdc-switch-unselected-focus-track-color, #e0e0e0)}.mat-mdc-slide-toggle .mdc-switch:enabled:active .mdc-switch__track::before{background:var(--mdc-switch-unselected-pressed-track-color, #e0e0e0)}.mat-mdc-slide-toggle .mdc-switch:disabled .mdc-switch__track::before{background:var(--mdc-switch-disabled-unselected-track-color, #424242)}.mat-mdc-slide-toggle .mdc-switch .mdc-switch__track{border-radius:var(--mdc-switch-track-shape, 7px)}.mat-mdc-slide-toggle .mat-mdc-slide-toggle-ripple,.mat-mdc-slide-toggle .mdc-switch__ripple::after{top:0;left:0;right:0;bottom:0;position:absolute;border-radius:50%;pointer-events:none}.mat-mdc-slide-toggle .mat-mdc-slide-toggle-ripple:not(:empty),.mat-mdc-slide-toggle .mdc-switch__ripple::after:not(:empty){transform:translateZ(0)}.mat-mdc-slide-toggle .mdc-switch__ripple::after{content:"";opacity:0}.mat-mdc-slide-toggle .mdc-switch:hover .mdc-switch__ripple::after{opacity:.04;transition:opacity 75ms 0ms cubic-bezier(0, 0, 0.2, 1)}.mat-mdc-slide-toggle.mat-mdc-slide-toggle-focused .mdc-switch .mdc-switch__ripple::after{opacity:.12}.mat-mdc-slide-toggle.mat-mdc-slide-toggle-focused .mat-mdc-focus-indicator::before{content:""}.mat-mdc-slide-toggle .mat-ripple-element{opacity:.12}.mat-mdc-slide-toggle .mat-mdc-focus-indicator::before{border-radius:50%}.mat-mdc-slide-toggle._mat-animation-noopable .mdc-switch__handle-track,.mat-mdc-slide-toggle._mat-animation-noopable .mdc-elevation-overlay,.mat-mdc-slide-toggle._mat-animation-noopable .mdc-switch__icon,.mat-mdc-slide-toggle._mat-animation-noopable .mdc-switch__handle::before,.mat-mdc-slide-toggle._mat-animation-noopable .mdc-switch__handle::after,.mat-mdc-slide-toggle._mat-animation-noopable .mdc-switch__track::before,.mat-mdc-slide-toggle._mat-animation-noopable .mdc-switch__track::after{transition:none}'],encapsulation:2,changeDetection:0}),i})(),tG=(()=>{class i{}return i.\u0275fac=function(t){return new(t||i)},i.\u0275mod=ia({type:i}),i.\u0275inj=ft({}),i})(),qfe=(()=>{class i{}return i.\u0275fac=function(t){return new(t||i)},i.\u0275mod=ia({type:i}),i.\u0275inj=ft({imports:[tG,Pu,Fb,D_,tG,Pu]}),i})();const nG={leading:!0,trailing:!1};function RD(i,e=b2,t=nG){const n=ES(i,e);return function Qfe(i,e=nG){return Ee((t,n)=>{const{leading:r,trailing:s}=e;let a=!1,l=null,u=null,d=!1;const p=()=>{u?.unsubscribe(),u=null,s&&(O(),d&&n.complete())},y=()=>{u=null,d&&n.complete()},C=Q=>u=$o(i(Q)).subscribe(Ge(n,p,y)),O=()=>{if(a){a=!1;const Q=l;l=null,n.next(Q),!d&&C(Q)}};t.subscribe(Ge(n,Q=>{a=!0,l=Q,(!u||u.closed)&&(r?O():C(Q))},()=>{d=!0,(!(s&&a&&u)||u.closed)&&n.complete()}))})}(()=>n,t)}var iG=Me(1668);function Wfe(i,e){}function jfe(i,e){1&i&&qr(0,Wfe,0,0,"ng-template")}const $fe=function(i,e,t){return{tooltip:i,placement:e,content:t}};function Xfe(i,e){if(1&i&&(bd(0),qr(1,jfe,1,0,null,1),dh()),2&i){const t=Mr();Nn(1),Cn("ngTemplateOutlet",t.template)("ngTemplateOutletContext",RT(2,$fe,t.tooltip,t.placement,t.content))}}function Kfe(i,e){if(1&i&&(bd(0),Zt(1,"div",2),dr(2),un(),dh()),2&i){const t=Mr();Nn(1),Ea("title",t.tooltip)("data-tooltip-placement",t.placement),Nn(1),Gl(" ",t.content," ")}}const Yfe=["tooltipTemplate"],Zfe=["leftOuterSelectionBar"],Jfe=["rightOuterSelectionBar"],epe=["fullBar"],tpe=["selectionBar"],npe=["minHandle"],ipe=["maxHandle"],rpe=["floorLabel"],spe=["ceilLabel"],ope=["minHandleLabel"],ape=["maxHandleLabel"],lpe=["combinedLabel"],cpe=["ticksElement"];function upe(i,e){if(1&i&&Pr(0,"ngx-slider-tooltip-wrapper",31),2&i){const t=Mr().$implicit;Cn("template",Mr().tooltipTemplate)("tooltip",t.valueTooltip)("placement",t.valueTooltipPlacement)("content",t.value)}}function hpe(i,e){1&i&&Pr(0,"span",32),2&i&&Cn("innerHTML",Mr().$implicit.legend,Ex)}const dpe=function(i){return{"ngx-slider-selected":i}};function fpe(i,e){if(1&i&&(Zt(0,"span",27),Pr(1,"ngx-slider-tooltip-wrapper",28),qr(2,upe,1,4,"ngx-slider-tooltip-wrapper",29),qr(3,hpe,1,1,"span",30),un()),2&i){const t=e.$implicit,n=Mr();Cn("ngClass",$d(7,dpe,t.selected))("ngStyle",t.style),Nn(1),Cn("template",n.tooltipTemplate)("tooltip",t.tooltip)("placement",t.tooltipPlacement),Nn(1),Cn("ngIf",null!=t.value),Nn(1),Cn("ngIf",null!=t.legend)}}var QA=(()=>(function(i){i[i.Low=0]="Low",i[i.High=1]="High",i[i.Floor=2]="Floor",i[i.Ceil=3]="Ceil",i[i.TickValue=4]="TickValue"}(QA||(QA={})),QA))();class LD{constructor(){this.floor=0,this.ceil=null,this.step=null,this.minRange=null,this.maxRange=null,this.pushRange=!1,this.minLimit=null,this.maxLimit=null,this.translate=null,this.combineLabels=null,this.getLegend=null,this.stepsArray=null,this.bindIndexForStepsArray=!1,this.draggableRange=!1,this.draggableRangeOnly=!1,this.showSelectionBar=!1,this.showSelectionBarEnd=!1,this.showSelectionBarFromValue=null,this.showOuterSelectionBars=!1,this.hidePointerLabels=!1,this.hideLimitLabels=!1,this.autoHideLimitLabels=!0,this.readOnly=!1,this.disabled=!1,this.mouseEventsInterval=50,this.touchEventsInterval=50,this.inputEventsInterval=100,this.outputEventsInterval=100,this.showTicks=!1,this.showTicksValues=!1,this.tickStep=null,this.tickValueStep=null,this.ticksArray=null,this.ticksTooltip=null,this.ticksValuesTooltip=null,this.vertical=!1,this.getSelectionBarColor=null,this.getTickColor=null,this.getPointerColor=null,this.keyboardSupport=!0,this.scale=1,this.enforceStep=!0,this.enforceRange=!0,this.enforceStepsArray=!0,this.noSwitching=!1,this.onlyBindHandles=!1,this.rightToLeft=!1,this.reversedControls=!1,this.boundPointerLabels=!0,this.logScale=!1,this.customValueToPosition=null,this.customPositionToValue=null,this.precisionLimit=12,this.selectionBarGradient=null,this.ariaLabel=null,this.ariaLabelledBy=null,this.ariaLabelHigh=null,this.ariaLabelledByHigh=null,this.handleDimension=null,this.barDimension=null,this.animate=!0,this.animateOnMove=!1}}var Gs=(()=>(function(i){i[i.Min=0]="Min",i[i.Max=1]="Max"}(Gs||(Gs={})),Gs))();class ppe{}class vr{static isNullOrUndefined(e){return null==e}static areArraysEqual(e,t){if(e.length!==t.length)return!1;for(let n=0;nMath.abs(e-s.value));let r=0;for(let s=0;s{s.events.next(l)};return e.addEventListener(t,a,{passive:!0,capture:!1}),s.teardownCallback=()=>{e.removeEventListener(t,a,{passive:!0,capture:!1})},s.eventsSubscription=s.events.pipe(vr.isNullOrUndefined(r)?Dc(()=>{}):RD(r,void 0,{leading:!0,trailing:!0})).subscribe(l=>{n(l)}),s}detachEventListener(e){vr.isNullOrUndefined(e.eventsSubscription)||(e.eventsSubscription.unsubscribe(),e.eventsSubscription=null),vr.isNullOrUndefined(e.events)||(e.events.complete(),e.events=null),vr.isNullOrUndefined(e.teardownCallback)||(e.teardownCallback(),e.teardownCallback=null)}attachEventListener(e,t,n,r){const s=new rG;return s.eventName=t,s.events=new D,s.teardownCallback=this.renderer.listen(e,t,l=>{s.events.next(l)}),s.eventsSubscription=s.events.pipe(vr.isNullOrUndefined(r)?Dc(()=>{}):RD(r,void 0,{leading:!0,trailing:!0})).subscribe(l=>{n(l)}),s}}let Ny=(()=>{class i{constructor(t,n,r){this.elemRef=t,this.renderer=n,this.changeDetectionRef=r,this._position=0,this._dimension=0,this._alwaysHide=!1,this._vertical=!1,this._scale=1,this.opacity=1,this.visibility="visible",this.left="",this.bottom="",this.height="",this.width="",this.eventListeners=[],this.eventListenerHelper=new sG(this.renderer)}get position(){return this._position}get dimension(){return this._dimension}get alwaysHide(){return this._alwaysHide}get vertical(){return this._vertical}get scale(){return this._scale}setAlwaysHide(t){this._alwaysHide=t,this.visibility=t?"hidden":"visible"}hide(){this.opacity=0}show(){this.alwaysHide||(this.opacity=1)}isVisible(){return!this.alwaysHide&&0!==this.opacity}setVertical(t){this._vertical=t,this._vertical?(this.left="",this.width=""):(this.bottom="",this.height="")}setScale(t){this._scale=t}setPosition(t){this._position!==t&&!this.isRefDestroyed()&&this.changeDetectionRef.markForCheck(),this._position=t,this._vertical?this.bottom=Math.round(t)+"px":this.left=Math.round(t)+"px"}calculateDimension(){const t=this.getBoundingClientRect();this._dimension=this.vertical?(t.bottom-t.top)*this.scale:(t.right-t.left)*this.scale}setDimension(t){this._dimension!==t&&!this.isRefDestroyed()&&this.changeDetectionRef.markForCheck(),this._dimension=t,this._vertical?this.height=Math.round(t)+"px":this.width=Math.round(t)+"px"}getBoundingClientRect(){return this.elemRef.nativeElement.getBoundingClientRect()}on(t,n,r){const s=this.eventListenerHelper.attachEventListener(this.elemRef.nativeElement,t,n,r);this.eventListeners.push(s)}onPassive(t,n,r){const s=this.eventListenerHelper.attachPassiveEventListener(this.elemRef.nativeElement,t,n,r);this.eventListeners.push(s)}off(t){let n,r;vr.isNullOrUndefined(t)?(n=[],r=this.eventListeners):(n=this.eventListeners.filter(s=>s.eventName!==t),r=this.eventListeners.filter(s=>s.eventName===t));for(const s of r)this.eventListenerHelper.detachEventListener(s);this.eventListeners=n}isRefDestroyed(){return vr.isNullOrUndefined(this.changeDetectionRef)||this.changeDetectionRef.destroyed}}return i.\u0275fac=function(t){return new(t||i)(wt(Cs),wt(as),wt(pl))},i.\u0275dir=Oi({type:i,selectors:[["","ngxSliderElement",""]],hostVars:12,hostBindings:function(t,n){2&t&&Fp("opacity",n.opacity)("visibility",n.visibility)("left",n.left)("bottom",n.bottom)("height",n.height)("width",n.width)}}),i})(),_O=(()=>{class i extends Ny{constructor(t,n,r){super(t,n,r),this.active=!1,this.role="",this.tabindex="",this.ariaOrientation="",this.ariaLabel="",this.ariaLabelledBy="",this.ariaValueNow="",this.ariaValueText="",this.ariaValueMin="",this.ariaValueMax=""}focus(){this.elemRef.nativeElement.focus()}}return i.\u0275fac=function(t){return new(t||i)(wt(Cs),wt(as),wt(pl))},i.\u0275dir=Oi({type:i,selectors:[["","ngxSliderHandle",""]],hostVars:11,hostBindings:function(t,n){2&t&&(Ea("role",n.role)("tabindex",n.tabindex)("aria-orientation",n.ariaOrientation)("aria-label",n.ariaLabel)("aria-labelledby",n.ariaLabelledBy)("aria-valuenow",n.ariaValueNow)("aria-valuetext",n.ariaValueText)("aria-valuemin",n.ariaValueMin)("aria-valuemax",n.ariaValueMax),jo("ngx-slider-active",n.active))},features:[As]}),i})(),L2=(()=>{class i extends Ny{constructor(t,n,r){super(t,n,r),this._value=null}get value(){return this._value}setValue(t){let n=!1;!this.alwaysHide&&(vr.isNullOrUndefined(this.value)||this.value.length!==t.length||this.value.length>0&&0===this.dimension)&&(n=!0),this._value=t,this.elemRef.nativeElement.innerHTML=t,n&&this.calculateDimension()}}return i.\u0275fac=function(t){return new(t||i)(wt(Cs),wt(as),wt(pl))},i.\u0275dir=Oi({type:i,selectors:[["","ngxSliderLabel",""]],features:[As]}),i})(),Ape=(()=>{class i{}return i.\u0275fac=function(t){return new(t||i)},i.\u0275cmp=Fr({type:i,selectors:[["ngx-slider-tooltip-wrapper"]],inputs:{template:"template",tooltip:"tooltip",placement:"placement",content:"content"},decls:2,vars:2,consts:[[4,"ngIf"],[4,"ngTemplateOutlet","ngTemplateOutletContext"],[1,"ngx-slider-inner-tooltip"]],template:function(t,n){1&t&&(qr(0,Xfe,2,6,"ng-container",0),qr(1,Kfe,3,3,"ng-container",0)),2&t&&(Cn("ngIf",n.template),Nn(1),Cn("ngIf",!n.template))},dependencies:[Tu,K5],styles:[".ngx-slider-inner-tooltip[_ngcontent-%COMP%]{height:100%}"]}),i})();class mpe{constructor(){this.selected=!1,this.style={},this.tooltip=null,this.tooltipPlacement=null,this.value=null,this.valueTooltip=null,this.valueTooltipPlacement=null,this.legend=null}}class oG{constructor(){this.active=!1,this.value=0,this.difference=0,this.position=0,this.lowLimit=0,this.highLimit=0}}class ND{static compare(e,t){return!(vr.isNullOrUndefined(e)&&vr.isNullOrUndefined(t)||vr.isNullOrUndefined(e)!==vr.isNullOrUndefined(t))&&e.value===t.value&&e.highValue===t.highValue}}class aG extends ND{static compare(e,t){return!(vr.isNullOrUndefined(e)&&vr.isNullOrUndefined(t)||vr.isNullOrUndefined(e)!==vr.isNullOrUndefined(t))&&e.value===t.value&&e.highValue===t.highValue&&e.forceChange===t.forceChange}}const gpe={provide:Kd,useExisting:ar(()=>lG),multi:!0};let lG=(()=>{class i{constructor(t,n,r,s){this.renderer=t,this.elementRef=n,this.changeDetectionRef=r,this.zone=s,this.value=null,this.valueChange=new Ws,this.highValue=null,this.highValueChange=new Ws,this.options=new LD,this.userChangeStart=new Ws,this.userChange=new Ws,this.userChangeEnd=new Ws,this.initHasRun=!1,this.inputModelChangeSubject=new D,this.inputModelChangeSubscription=null,this.outputModelChangeSubject=new D,this.outputModelChangeSubscription=null,this.viewLowValue=null,this.viewHighValue=null,this.viewOptions=new LD,this.handleHalfDimension=0,this.maxHandlePosition=0,this.currentTrackingPointer=null,this.currentFocusPointer=null,this.firstKeyDown=!1,this.touchId=null,this.dragging=new oG,this.sliderElementVerticalClass=!1,this.sliderElementAnimateClass=!1,this.sliderElementWithLegendClass=!1,this.sliderElementDisabledAttr=null,this.barStyle={},this.minPointerStyle={},this.maxPointerStyle={},this.fullBarTransparentClass=!1,this.selectionBarDraggableClass=!1,this.ticksUnderValuesClass=!1,this.intermediateTicks=!1,this.ticks=[],this.eventListenerHelper=null,this.onMoveEventListener=null,this.onEndEventListener=null,this.moving=!1,this.resizeObserver=null,this.onTouchedCallback=null,this.onChangeCallback=null,this.eventListenerHelper=new sG(this.renderer)}set manualRefresh(t){this.unsubscribeManualRefresh(),this.manualRefreshSubscription=t.subscribe(()=>{setTimeout(()=>this.calculateViewDimensionsAndDetectChanges())})}set triggerFocus(t){this.unsubscribeTriggerFocus(),this.triggerFocusSubscription=t.subscribe(n=>{this.focusPointer(n)})}get range(){return!vr.isNullOrUndefined(this.value)&&!vr.isNullOrUndefined(this.highValue)}get showTicks(){return this.viewOptions.showTicks}ngOnInit(){this.viewOptions=new LD,Object.assign(this.viewOptions,this.options),this.updateDisabledState(),this.updateVerticalState()}ngAfterViewInit(){this.applyOptions(),this.subscribeInputModelChangeSubject(this.viewOptions.inputEventsInterval),this.subscribeOutputModelChangeSubject(this.viewOptions.outputEventsInterval),this.renormaliseModelValues(),this.viewLowValue=this.modelValueToViewValue(this.value),this.viewHighValue=this.range?this.modelValueToViewValue(this.highValue):null,this.updateVerticalState(),this.manageElementsStyle(),this.updateDisabledState(),this.calculateViewDimensions(),this.addAccessibility(),this.updateCeilLabel(),this.updateFloorLabel(),this.initHandles(),this.manageEventsBindings(),this.subscribeResizeObserver(),this.initHasRun=!0,this.isRefDestroyed()||this.changeDetectionRef.detectChanges()}ngOnChanges(t){this.haveOptionsChanged(t)&&this.onChangeOptions(),this.haveValuesChanged(t)&&this.inputModelChangeSubject.next({value:this.value,highValue:this.highValue,forceChange:!1,internalChange:!1})}haveOptionsChanged(t){return!vr.isNullOrUndefined(t.options)&&t.options.currentValue?.floor!==t.options.previousValue?.floor&&t.options.currentValue?.ceil!==t.options.previousValue?.ceil}haveValuesChanged(t){return!vr.isNullOrUndefined(t.value)&&t.value.currentValue!==t.value.previousValue||!vr.isNullOrUndefined(t.highValue)&&t.highValue.currentValue!==t.highValue.previousValue}ngOnDestroy(){this.unbindEvents(),this.unsubscribeResizeObserver(),this.unsubscribeInputModelChangeSubject(),this.unsubscribeOutputModelChangeSubject(),this.unsubscribeManualRefresh(),this.unsubscribeTriggerFocus()}writeValue(t){t instanceof Array?(this.value=t[0],this.highValue=t[1]):this.value=t,this.inputModelChangeSubject.next({value:this.value,highValue:this.highValue,forceChange:!1,internalChange:!1})}registerOnChange(t){this.onChangeCallback=t}registerOnTouched(t){this.onTouchedCallback=t}setDisabledState(t){this.viewOptions.disabled=t,this.updateDisabledState()}onResize(t){this.calculateViewDimensionsAndDetectChanges()}subscribeInputModelChangeSubject(t){this.inputModelChangeSubscription=this.inputModelChangeSubject.pipe(oD(aG.compare),tu(n=>!n.forceChange&&!n.internalChange),vr.isNullOrUndefined(t)?Dc(()=>{}):RD(t,void 0,{leading:!0,trailing:!0})).subscribe(n=>this.applyInputModelChange(n))}subscribeOutputModelChangeSubject(t){this.outputModelChangeSubscription=this.outputModelChangeSubject.pipe(oD(aG.compare),vr.isNullOrUndefined(t)?Dc(()=>{}):RD(t,void 0,{leading:!0,trailing:!0})).subscribe(n=>this.publishOutputModelChange(n))}subscribeResizeObserver(){Ly.isResizeObserverAvailable()&&(this.resizeObserver=new ResizeObserver(()=>this.calculateViewDimensionsAndDetectChanges()),this.resizeObserver.observe(this.elementRef.nativeElement))}unsubscribeResizeObserver(){Ly.isResizeObserverAvailable()&&null!==this.resizeObserver&&(this.resizeObserver.disconnect(),this.resizeObserver=null)}unsubscribeOnMove(){vr.isNullOrUndefined(this.onMoveEventListener)||(this.eventListenerHelper.detachEventListener(this.onMoveEventListener),this.onMoveEventListener=null)}unsubscribeOnEnd(){vr.isNullOrUndefined(this.onEndEventListener)||(this.eventListenerHelper.detachEventListener(this.onEndEventListener),this.onEndEventListener=null)}unsubscribeInputModelChangeSubject(){vr.isNullOrUndefined(this.inputModelChangeSubscription)||(this.inputModelChangeSubscription.unsubscribe(),this.inputModelChangeSubscription=null)}unsubscribeOutputModelChangeSubject(){vr.isNullOrUndefined(this.outputModelChangeSubscription)||(this.outputModelChangeSubscription.unsubscribe(),this.outputModelChangeSubscription=null)}unsubscribeManualRefresh(){vr.isNullOrUndefined(this.manualRefreshSubscription)||(this.manualRefreshSubscription.unsubscribe(),this.manualRefreshSubscription=null)}unsubscribeTriggerFocus(){vr.isNullOrUndefined(this.triggerFocusSubscription)||(this.triggerFocusSubscription.unsubscribe(),this.triggerFocusSubscription=null)}getPointerElement(t){return t===Gs.Min?this.minHandleElement:t===Gs.Max?this.maxHandleElement:null}getCurrentTrackingValue(){return this.currentTrackingPointer===Gs.Min?this.viewLowValue:this.currentTrackingPointer===Gs.Max?this.viewHighValue:null}modelValueToViewValue(t){return vr.isNullOrUndefined(t)?NaN:vr.isNullOrUndefined(this.viewOptions.stepsArray)||this.viewOptions.bindIndexForStepsArray?+t:vr.findStepIndex(+t,this.viewOptions.stepsArray)}viewValueToModelValue(t){return vr.isNullOrUndefined(this.viewOptions.stepsArray)||this.viewOptions.bindIndexForStepsArray?t:this.getStepValue(t)}getStepValue(t){const n=this.viewOptions.stepsArray[t];return vr.isNullOrUndefined(n)?NaN:n.value}applyViewChange(){this.value=this.viewValueToModelValue(this.viewLowValue),this.range&&(this.highValue=this.viewValueToModelValue(this.viewHighValue)),this.outputModelChangeSubject.next({value:this.value,highValue:this.highValue,userEventInitiated:!0,forceChange:!1}),this.inputModelChangeSubject.next({value:this.value,highValue:this.highValue,forceChange:!1,internalChange:!0})}applyInputModelChange(t){const n=this.normaliseModelValues(t),r=!ND.compare(t,n);r&&(this.value=n.value,this.highValue=n.highValue),this.viewLowValue=this.modelValueToViewValue(n.value),this.viewHighValue=this.range?this.modelValueToViewValue(n.highValue):null,this.updateLowHandle(this.valueToPosition(this.viewLowValue)),this.range&&this.updateHighHandle(this.valueToPosition(this.viewHighValue)),this.updateSelectionBar(),this.updateTicksScale(),this.updateAriaAttributes(),this.range&&this.updateCombinedLabel(),this.outputModelChangeSubject.next({value:n.value,highValue:n.highValue,forceChange:r,userEventInitiated:!1})}publishOutputModelChange(t){const n=()=>{this.valueChange.emit(t.value),this.range&&this.highValueChange.emit(t.highValue),vr.isNullOrUndefined(this.onChangeCallback)||this.onChangeCallback(this.range?[t.value,t.highValue]:t.value),vr.isNullOrUndefined(this.onTouchedCallback)||this.onTouchedCallback(this.range?[t.value,t.highValue]:t.value)};t.userEventInitiated?(n(),this.userChange.emit(this.getChangeContext())):setTimeout(()=>{n()})}normaliseModelValues(t){const n=new ND;if(n.value=t.value,n.highValue=t.highValue,!vr.isNullOrUndefined(this.viewOptions.stepsArray)){if(this.viewOptions.enforceStepsArray){const r=vr.findStepIndex(n.value,this.viewOptions.stepsArray);if(n.value=this.viewOptions.stepsArray[r].value,this.range){const s=vr.findStepIndex(n.highValue,this.viewOptions.stepsArray);n.highValue=this.viewOptions.stepsArray[s].value}}return n}if(this.viewOptions.enforceStep&&(n.value=this.roundStep(n.value),this.range&&(n.highValue=this.roundStep(n.highValue))),this.viewOptions.enforceRange&&(n.value=ku.clampToRange(n.value,this.viewOptions.floor,this.viewOptions.ceil),this.range&&(n.highValue=ku.clampToRange(n.highValue,this.viewOptions.floor,this.viewOptions.ceil)),this.range&&t.value>t.highValue))if(this.viewOptions.noSwitching)n.value=n.highValue;else{const r=t.value;n.value=t.highValue,n.highValue=r}return n}renormaliseModelValues(){const t={value:this.value,highValue:this.highValue},n=this.normaliseModelValues(t);ND.compare(n,t)||(this.value=n.value,this.highValue=n.highValue,this.outputModelChangeSubject.next({value:this.value,highValue:this.highValue,forceChange:!0,userEventInitiated:!1}))}onChangeOptions(){if(!this.initHasRun)return;const t=this.viewOptions.inputEventsInterval,n=this.viewOptions.outputEventsInterval,r=this.getOptionsInfluencingEventBindings(this.viewOptions);this.applyOptions();const s=this.getOptionsInfluencingEventBindings(this.viewOptions),a=!vr.areArraysEqual(r,s);t!==this.viewOptions.inputEventsInterval&&(this.unsubscribeInputModelChangeSubject(),this.subscribeInputModelChangeSubject(this.viewOptions.inputEventsInterval)),n!==this.viewOptions.outputEventsInterval&&(this.unsubscribeInputModelChangeSubject(),this.subscribeInputModelChangeSubject(this.viewOptions.outputEventsInterval)),this.renormaliseModelValues(),this.viewLowValue=this.modelValueToViewValue(this.value),this.viewHighValue=this.range?this.modelValueToViewValue(this.highValue):null,this.resetSlider(a)}applyOptions(){if(this.viewOptions=new LD,Object.assign(this.viewOptions,this.options),this.viewOptions.draggableRange=this.range&&this.viewOptions.draggableRange,this.viewOptions.draggableRangeOnly=this.range&&this.viewOptions.draggableRangeOnly,this.viewOptions.draggableRangeOnly&&(this.viewOptions.draggableRange=!0),this.viewOptions.showTicks=this.viewOptions.showTicks||this.viewOptions.showTicksValues||!vr.isNullOrUndefined(this.viewOptions.ticksArray),this.viewOptions.showTicks&&(!vr.isNullOrUndefined(this.viewOptions.tickStep)||!vr.isNullOrUndefined(this.viewOptions.ticksArray))&&(this.intermediateTicks=!0),this.viewOptions.showSelectionBar=this.viewOptions.showSelectionBar||this.viewOptions.showSelectionBarEnd||!vr.isNullOrUndefined(this.viewOptions.showSelectionBarFromValue),vr.isNullOrUndefined(this.viewOptions.stepsArray)?this.applyFloorCeilOptions():this.applyStepsArrayOptions(),vr.isNullOrUndefined(this.viewOptions.combineLabels)&&(this.viewOptions.combineLabels=(t,n)=>t+" - "+n),this.viewOptions.logScale&&0===this.viewOptions.floor)throw Error("Can't use floor=0 with logarithmic scale")}applyStepsArrayOptions(){this.viewOptions.floor=0,this.viewOptions.ceil=this.viewOptions.stepsArray.length-1,this.viewOptions.step=1,vr.isNullOrUndefined(this.viewOptions.translate)&&(this.viewOptions.translate=t=>String(this.viewOptions.bindIndexForStepsArray?this.getStepValue(t):t))}getViewOptionsStepOrEstimate(){let t=this.viewOptions.step;if(vr.isNullOrUndefined(this.viewOptions.step)){const n=this.viewOptions.ceil-this.viewOptions.floor+1;t=n<50?1:Math.floor(n/20)}return t}applyFloorCeilOptions(){if(vr.isNullOrUndefined(this.viewOptions.step)?this.viewOptions.step=this.getViewOptionsStepOrEstimate():(this.viewOptions.step=+this.viewOptions.step,this.viewOptions.step<=0&&(this.viewOptions.step=1)),vr.isNullOrUndefined(this.viewOptions.ceil)||vr.isNullOrUndefined(this.viewOptions.floor))throw Error("floor and ceil options must be supplied");this.viewOptions.ceil=+this.viewOptions.ceil,this.viewOptions.floor=+this.viewOptions.floor,vr.isNullOrUndefined(this.viewOptions.translate)&&(this.viewOptions.translate=t=>String(t))}resetSlider(t=!0){this.manageElementsStyle(),this.addAccessibility(),this.updateCeilLabel(),this.updateFloorLabel(),t&&(this.unbindEvents(),this.manageEventsBindings()),this.updateDisabledState(),this.calculateViewDimensions()}focusPointer(t){t!==Gs.Min&&t!==Gs.Max&&(t=Gs.Min),t===Gs.Min?this.minHandleElement.focus():this.range&&t===Gs.Max&&this.maxHandleElement.focus()}refocusPointerIfNeeded(){vr.isNullOrUndefined(this.currentFocusPointer)||(this.onPointerFocus(this.currentFocusPointer),this.getPointerElement(this.currentFocusPointer).focus())}manageElementsStyle(){this.updateScale(),this.floorLabelElement.setAlwaysHide(this.viewOptions.showTicksValues||this.viewOptions.hideLimitLabels),this.ceilLabelElement.setAlwaysHide(this.viewOptions.showTicksValues||this.viewOptions.hideLimitLabels);const t=this.viewOptions.showTicksValues&&!this.intermediateTicks;this.minHandleLabelElement.setAlwaysHide(t||this.viewOptions.hidePointerLabels),this.maxHandleLabelElement.setAlwaysHide(t||!this.range||this.viewOptions.hidePointerLabels),this.combinedLabelElement.setAlwaysHide(t||!this.range||this.viewOptions.hidePointerLabels),this.selectionBarElement.setAlwaysHide(!this.range&&!this.viewOptions.showSelectionBar),this.leftOuterSelectionBarElement.setAlwaysHide(!this.range||!this.viewOptions.showOuterSelectionBars),this.rightOuterSelectionBarElement.setAlwaysHide(!this.range||!this.viewOptions.showOuterSelectionBars),this.fullBarTransparentClass=this.range&&this.viewOptions.showOuterSelectionBars,this.selectionBarDraggableClass=this.viewOptions.draggableRange&&!this.viewOptions.onlyBindHandles,this.ticksUnderValuesClass=this.intermediateTicks&&this.options.showTicksValues,this.sliderElementVerticalClass!==this.viewOptions.vertical&&(this.updateVerticalState(),setTimeout(()=>{this.resetSlider()})),this.sliderElementAnimateClass!==this.viewOptions.animate&&setTimeout(()=>{this.sliderElementAnimateClass=this.viewOptions.animate})}manageEventsBindings(){this.viewOptions.disabled||this.viewOptions.readOnly?this.unbindEvents():this.bindEvents()}updateDisabledState(){this.sliderElementDisabledAttr=this.viewOptions.disabled?"disabled":null}updateVerticalState(){this.sliderElementVerticalClass=this.viewOptions.vertical;for(const t of this.getAllSliderElements())vr.isNullOrUndefined(t)||t.setVertical(this.viewOptions.vertical)}updateScale(){for(const t of this.getAllSliderElements())t.setScale(this.viewOptions.scale)}getAllSliderElements(){return[this.leftOuterSelectionBarElement,this.rightOuterSelectionBarElement,this.fullBarElement,this.selectionBarElement,this.minHandleElement,this.maxHandleElement,this.floorLabelElement,this.ceilLabelElement,this.minHandleLabelElement,this.maxHandleLabelElement,this.combinedLabelElement,this.ticksElement]}initHandles(){this.updateLowHandle(this.valueToPosition(this.viewLowValue)),this.range&&this.updateHighHandle(this.valueToPosition(this.viewHighValue)),this.updateSelectionBar(),this.range&&this.updateCombinedLabel(),this.updateTicksScale()}addAccessibility(){this.updateAriaAttributes(),this.minHandleElement.role="slider",this.minHandleElement.tabindex=!this.viewOptions.keyboardSupport||this.viewOptions.readOnly||this.viewOptions.disabled?"":"0",this.minHandleElement.ariaOrientation=this.viewOptions.vertical?"vertical":"horizontal",vr.isNullOrUndefined(this.viewOptions.ariaLabel)?vr.isNullOrUndefined(this.viewOptions.ariaLabelledBy)||(this.minHandleElement.ariaLabelledBy=this.viewOptions.ariaLabelledBy):this.minHandleElement.ariaLabel=this.viewOptions.ariaLabel,this.range&&(this.maxHandleElement.role="slider",this.maxHandleElement.tabindex=!this.viewOptions.keyboardSupport||this.viewOptions.readOnly||this.viewOptions.disabled?"":"0",this.maxHandleElement.ariaOrientation=this.viewOptions.vertical?"vertical":"horizontal",vr.isNullOrUndefined(this.viewOptions.ariaLabelHigh)?vr.isNullOrUndefined(this.viewOptions.ariaLabelledByHigh)||(this.maxHandleElement.ariaLabelledBy=this.viewOptions.ariaLabelledByHigh):this.maxHandleElement.ariaLabel=this.viewOptions.ariaLabelHigh)}updateAriaAttributes(){this.minHandleElement.ariaValueNow=(+this.value).toString(),this.minHandleElement.ariaValueText=this.viewOptions.translate(+this.value,QA.Low),this.minHandleElement.ariaValueMin=this.viewOptions.floor.toString(),this.minHandleElement.ariaValueMax=this.viewOptions.ceil.toString(),this.range&&(this.maxHandleElement.ariaValueNow=(+this.highValue).toString(),this.maxHandleElement.ariaValueText=this.viewOptions.translate(+this.highValue,QA.High),this.maxHandleElement.ariaValueMin=this.viewOptions.floor.toString(),this.maxHandleElement.ariaValueMax=this.viewOptions.ceil.toString())}calculateViewDimensions(){vr.isNullOrUndefined(this.viewOptions.handleDimension)?this.minHandleElement.calculateDimension():this.minHandleElement.setDimension(this.viewOptions.handleDimension);const t=this.minHandleElement.dimension;this.handleHalfDimension=t/2,vr.isNullOrUndefined(this.viewOptions.barDimension)?this.fullBarElement.calculateDimension():this.fullBarElement.setDimension(this.viewOptions.barDimension),this.maxHandlePosition=this.fullBarElement.dimension-t,this.initHasRun&&(this.updateFloorLabel(),this.updateCeilLabel(),this.initHandles())}calculateViewDimensionsAndDetectChanges(){this.calculateViewDimensions(),this.isRefDestroyed()||this.changeDetectionRef.detectChanges()}isRefDestroyed(){return this.changeDetectionRef.destroyed}updateTicksScale(){if(!this.viewOptions.showTicks&&this.sliderElementWithLegendClass)return void setTimeout(()=>{this.sliderElementWithLegendClass=!1});const t=vr.isNullOrUndefined(this.viewOptions.ticksArray)?this.getTicksArray():this.viewOptions.ticksArray,n=this.viewOptions.vertical?"translateY":"translateX";this.viewOptions.rightToLeft&&t.reverse();const r=vr.isNullOrUndefined(this.viewOptions.tickValueStep)?vr.isNullOrUndefined(this.viewOptions.tickStep)?this.getViewOptionsStepOrEstimate():this.viewOptions.tickStep:this.viewOptions.tickValueStep;let s=!1;const a=t.map(l=>{let u=this.valueToPosition(l);this.viewOptions.vertical&&(u=this.maxHandlePosition-u);const d=n+"("+Math.round(u)+"px)",p=new mpe;p.selected=this.isTickSelected(l),p.style={"-webkit-transform":d,"-moz-transform":d,"-o-transform":d,"-ms-transform":d,transform:d},p.selected&&!vr.isNullOrUndefined(this.viewOptions.getSelectionBarColor)&&(p.style["background-color"]=this.getSelectionBarColor()),!p.selected&&!vr.isNullOrUndefined(this.viewOptions.getTickColor)&&(p.style["background-color"]=this.getTickColor(l)),vr.isNullOrUndefined(this.viewOptions.ticksTooltip)||(p.tooltip=this.viewOptions.ticksTooltip(l),p.tooltipPlacement=this.viewOptions.vertical?"right":"top"),this.viewOptions.showTicksValues&&!vr.isNullOrUndefined(r)&&ku.isModuloWithinPrecisionLimit(l,r,this.viewOptions.precisionLimit)&&(p.value=this.getDisplayValue(l,QA.TickValue),vr.isNullOrUndefined(this.viewOptions.ticksValuesTooltip)||(p.valueTooltip=this.viewOptions.ticksValuesTooltip(l),p.valueTooltipPlacement=this.viewOptions.vertical?"right":"top"));let y=null;if(vr.isNullOrUndefined(this.viewOptions.stepsArray))vr.isNullOrUndefined(this.viewOptions.getLegend)||(y=this.viewOptions.getLegend(l));else{const C=this.viewOptions.stepsArray[l];vr.isNullOrUndefined(C)||(y=C.legend)}return vr.isNullOrUndefined(y)||(p.legend=y,s=!0),p});if(this.sliderElementWithLegendClass!==s&&setTimeout(()=>{this.sliderElementWithLegendClass=s}),vr.isNullOrUndefined(this.ticks)||this.ticks.length!==a.length)this.ticks=a,this.isRefDestroyed()||this.changeDetectionRef.detectChanges();else for(let l=0;l=this.viewLowValue)return!0}else if(this.viewOptions.showSelectionBar&&t<=this.viewLowValue)return!0}else{const n=this.viewOptions.showSelectionBarFromValue;if(this.viewLowValue>n&&t>=n&&t<=this.viewLowValue)return!0;if(this.viewLowValue=this.viewLowValue)return!0}return!!(this.range&&t>=this.viewLowValue&&t<=this.viewHighValue)}updateFloorLabel(){this.floorLabelElement.alwaysHide||(this.floorLabelElement.setValue(this.getDisplayValue(this.viewOptions.floor,QA.Floor)),this.floorLabelElement.calculateDimension(),this.floorLabelElement.setPosition(this.viewOptions.rightToLeft?this.fullBarElement.dimension-this.floorLabelElement.dimension:0))}updateCeilLabel(){this.ceilLabelElement.alwaysHide||(this.ceilLabelElement.setValue(this.getDisplayValue(this.viewOptions.ceil,QA.Ceil)),this.ceilLabelElement.calculateDimension(),this.ceilLabelElement.setPosition(this.viewOptions.rightToLeft?0:this.fullBarElement.dimension-this.ceilLabelElement.dimension))}updateHandles(t,n){t===Gs.Min?this.updateLowHandle(n):t===Gs.Max&&this.updateHighHandle(n),this.updateSelectionBar(),this.updateTicksScale(),this.range&&this.updateCombinedLabel()}getHandleLabelPos(t,n){const r=t===Gs.Min?this.minHandleLabelElement.dimension:this.maxHandleLabelElement.dimension,s=n-r/2+this.handleHalfDimension,a=this.fullBarElement.dimension-r;return this.viewOptions.boundPointerLabels?this.viewOptions.rightToLeft&&t===Gs.Min||!this.viewOptions.rightToLeft&&t===Gs.Max?Math.min(s,a):Math.min(Math.max(s,0),a):s}updateLowHandle(t){this.minHandleElement.setPosition(t),this.minHandleLabelElement.setValue(this.getDisplayValue(this.viewLowValue,QA.Low)),this.minHandleLabelElement.setPosition(this.getHandleLabelPos(Gs.Min,t)),vr.isNullOrUndefined(this.viewOptions.getPointerColor)||(this.minPointerStyle={backgroundColor:this.getPointerColor(Gs.Min)}),this.viewOptions.autoHideLimitLabels&&this.updateFloorAndCeilLabelsVisibility()}updateHighHandle(t){this.maxHandleElement.setPosition(t),this.maxHandleLabelElement.setValue(this.getDisplayValue(this.viewHighValue,QA.High)),this.maxHandleLabelElement.setPosition(this.getHandleLabelPos(Gs.Max,t)),vr.isNullOrUndefined(this.viewOptions.getPointerColor)||(this.maxPointerStyle={backgroundColor:this.getPointerColor(Gs.Max)}),this.viewOptions.autoHideLimitLabels&&this.updateFloorAndCeilLabelsVisibility()}updateFloorAndCeilLabelsVisibility(){if(this.viewOptions.hidePointerLabels)return;let t=!1,n=!1;const r=this.isLabelBelowFloorLabel(this.minHandleLabelElement),s=this.isLabelAboveCeilLabel(this.minHandleLabelElement),a=this.isLabelAboveCeilLabel(this.maxHandleLabelElement),l=this.isLabelBelowFloorLabel(this.combinedLabelElement),u=this.isLabelAboveCeilLabel(this.combinedLabelElement);if(r?(t=!0,this.floorLabelElement.hide()):(t=!1,this.floorLabelElement.show()),s?(n=!0,this.ceilLabelElement.hide()):(n=!1,this.ceilLabelElement.show()),this.range){const d=this.combinedLabelElement.isVisible()?u:a,p=this.combinedLabelElement.isVisible()?l:r;d?this.ceilLabelElement.hide():n||this.ceilLabelElement.show(),p?this.floorLabelElement.hide():t||this.floorLabelElement.show()}}isLabelBelowFloorLabel(t){const n=t.position,s=this.floorLabelElement.position;return this.viewOptions.rightToLeft?n+t.dimension>=s-2:n<=s+this.floorLabelElement.dimension+2}isLabelAboveCeilLabel(t){const n=t.position,s=this.ceilLabelElement.position;return this.viewOptions.rightToLeft?n<=s+this.ceilLabelElement.dimension+2:n+t.dimension>=s-2}updateSelectionBar(){let t=0,n=0;const r=this.viewOptions.rightToLeft?!this.viewOptions.showSelectionBarEnd:this.viewOptions.showSelectionBarEnd,s=this.viewOptions.rightToLeft?this.maxHandleElement.position+this.handleHalfDimension:this.minHandleElement.position+this.handleHalfDimension;if(this.range)n=Math.abs(this.maxHandleElement.position-this.minHandleElement.position),t=s;else if(vr.isNullOrUndefined(this.viewOptions.showSelectionBarFromValue))r?(n=Math.ceil(Math.abs(this.maxHandlePosition-this.minHandleElement.position)+this.handleHalfDimension),t=Math.floor(this.minHandleElement.position+this.handleHalfDimension)):(n=this.minHandleElement.position+this.handleHalfDimension,t=0);else{const a=this.viewOptions.showSelectionBarFromValue,l=this.valueToPosition(a);(this.viewOptions.rightToLeft?this.viewLowValue<=a:this.viewLowValue>a)?(n=this.minHandleElement.position-l,t=l+this.handleHalfDimension):(n=l-this.minHandleElement.position,t=this.minHandleElement.position+this.handleHalfDimension)}if(this.selectionBarElement.setDimension(n),this.selectionBarElement.setPosition(t),this.range&&this.viewOptions.showOuterSelectionBars&&(this.viewOptions.rightToLeft?(this.rightOuterSelectionBarElement.setDimension(t),this.rightOuterSelectionBarElement.setPosition(0),this.fullBarElement.calculateDimension(),this.leftOuterSelectionBarElement.setDimension(this.fullBarElement.dimension-(t+n)),this.leftOuterSelectionBarElement.setPosition(t+n)):(this.leftOuterSelectionBarElement.setDimension(t),this.leftOuterSelectionBarElement.setPosition(0),this.fullBarElement.calculateDimension(),this.rightOuterSelectionBarElement.setDimension(this.fullBarElement.dimension-(t+n)),this.rightOuterSelectionBarElement.setPosition(t+n))),vr.isNullOrUndefined(this.viewOptions.getSelectionBarColor)){if(!vr.isNullOrUndefined(this.viewOptions.selectionBarGradient)){const a=vr.isNullOrUndefined(this.viewOptions.showSelectionBarFromValue)?0:this.valueToPosition(this.viewOptions.showSelectionBarFromValue),l=a-t>0&&!r||a-t<=0&&r;this.barStyle={backgroundImage:"linear-gradient(to "+(this.viewOptions.vertical?l?"bottom":"top":l?"left":"right")+", "+this.viewOptions.selectionBarGradient.from+" 0%,"+this.viewOptions.selectionBarGradient.to+" 100%)"},this.viewOptions.vertical?(this.barStyle.backgroundPosition="center "+(a+n+t+(l?-this.handleHalfDimension:0))+"px",this.barStyle.backgroundSize="100% "+(this.fullBarElement.dimension-this.handleHalfDimension)+"px"):(this.barStyle.backgroundPosition=a-t+(l?this.handleHalfDimension:0)+"px center",this.barStyle.backgroundSize=this.fullBarElement.dimension-this.handleHalfDimension+"px 100%")}}else{const a=this.getSelectionBarColor();this.barStyle={backgroundColor:a}}}getSelectionBarColor(){return this.range?this.viewOptions.getSelectionBarColor(this.value,this.highValue):this.viewOptions.getSelectionBarColor(this.value)}getPointerColor(t){return this.viewOptions.getPointerColor(t===Gs.Max?this.highValue:this.value,t)}getTickColor(t){return this.viewOptions.getTickColor(t)}updateCombinedLabel(){let t=null;if(t=this.viewOptions.rightToLeft?this.minHandleLabelElement.position-this.minHandleLabelElement.dimension-10<=this.maxHandleLabelElement.position:this.minHandleLabelElement.position+this.minHandleLabelElement.dimension+10>=this.maxHandleLabelElement.position,t){const n=this.getDisplayValue(this.viewLowValue,QA.Low),r=this.getDisplayValue(this.viewHighValue,QA.High),s=this.viewOptions.rightToLeft?this.viewOptions.combineLabels(r,n):this.viewOptions.combineLabels(n,r);this.combinedLabelElement.setValue(s);const a=this.viewOptions.boundPointerLabels?Math.min(Math.max(this.selectionBarElement.position+this.selectionBarElement.dimension/2-this.combinedLabelElement.dimension/2,0),this.fullBarElement.dimension-this.combinedLabelElement.dimension):this.selectionBarElement.position+this.selectionBarElement.dimension/2-this.combinedLabelElement.dimension/2;this.combinedLabelElement.setPosition(a),this.minHandleLabelElement.hide(),this.maxHandleLabelElement.hide(),this.combinedLabelElement.show()}else this.updateHighHandle(this.valueToPosition(this.viewHighValue)),this.updateLowHandle(this.valueToPosition(this.viewLowValue)),this.maxHandleLabelElement.show(),this.minHandleLabelElement.show(),this.combinedLabelElement.hide();this.viewOptions.autoHideLimitLabels&&this.updateFloorAndCeilLabelsVisibility()}getDisplayValue(t,n){return!vr.isNullOrUndefined(this.viewOptions.stepsArray)&&!this.viewOptions.bindIndexForStepsArray&&(t=this.getStepValue(t)),this.viewOptions.translate(t,n)}roundStep(t,n){const r=vr.isNullOrUndefined(n)?this.getViewOptionsStepOrEstimate():n;let s=ku.roundToPrecisionLimit((t-this.viewOptions.floor)/r,this.viewOptions.precisionLimit);return s=Math.round(s)*r,ku.roundToPrecisionLimit(this.viewOptions.floor+s,this.viewOptions.precisionLimit)}valueToPosition(t){let n=vr.linearValueToPosition;vr.isNullOrUndefined(this.viewOptions.customValueToPosition)?this.viewOptions.logScale&&(n=vr.logValueToPosition):n=this.viewOptions.customValueToPosition;let r=n(t=ku.clampToRange(t,this.viewOptions.floor,this.viewOptions.ceil),this.viewOptions.floor,this.viewOptions.ceil);return vr.isNullOrUndefined(r)&&(r=0),this.viewOptions.rightToLeft&&(r=1-r),r*this.maxHandlePosition}positionToValue(t){let n=t/this.maxHandlePosition;this.viewOptions.rightToLeft&&(n=1-n);let r=vr.linearPositionToValue;vr.isNullOrUndefined(this.viewOptions.customPositionToValue)?this.viewOptions.logScale&&(r=vr.logPositionToValue):r=this.viewOptions.customPositionToValue;const s=r(n,this.viewOptions.floor,this.viewOptions.ceil);return vr.isNullOrUndefined(s)?0:s}getEventXY(t,n){if(t instanceof MouseEvent)return this.viewOptions.vertical?t.clientY:t.clientX;let r=0;const s=t.touches;if(!vr.isNullOrUndefined(n))for(let a=0;as?Gs.Max:this.viewOptions.rightToLeft?n>this.minHandleElement.position?Gs.Min:Gs.Max:nthis.onBarStart(null,t,n,!0,!0,!0)),this.viewOptions.draggableRangeOnly?(this.minHandleElement.on("mousedown",n=>this.onBarStart(Gs.Min,t,n,!0,!0)),this.maxHandleElement.on("mousedown",n=>this.onBarStart(Gs.Max,t,n,!0,!0))):(this.minHandleElement.on("mousedown",n=>this.onStart(Gs.Min,n,!0,!0)),this.range&&this.maxHandleElement.on("mousedown",n=>this.onStart(Gs.Max,n,!0,!0)),this.viewOptions.onlyBindHandles||(this.fullBarElement.on("mousedown",n=>this.onStart(null,n,!0,!0,!0)),this.ticksElement.on("mousedown",n=>this.onStart(null,n,!0,!0,!0,!0)))),this.viewOptions.onlyBindHandles||this.selectionBarElement.onPassive("touchstart",n=>this.onBarStart(null,t,n,!0,!0,!0)),this.viewOptions.draggableRangeOnly?(this.minHandleElement.onPassive("touchstart",n=>this.onBarStart(Gs.Min,t,n,!0,!0)),this.maxHandleElement.onPassive("touchstart",n=>this.onBarStart(Gs.Max,t,n,!0,!0))):(this.minHandleElement.onPassive("touchstart",n=>this.onStart(Gs.Min,n,!0,!0)),this.range&&this.maxHandleElement.onPassive("touchstart",n=>this.onStart(Gs.Max,n,!0,!0)),this.viewOptions.onlyBindHandles||(this.fullBarElement.onPassive("touchstart",n=>this.onStart(null,n,!0,!0,!0)),this.ticksElement.onPassive("touchstart",n=>this.onStart(null,n,!1,!1,!0,!0)))),this.viewOptions.keyboardSupport&&(this.minHandleElement.on("focus",()=>this.onPointerFocus(Gs.Min)),this.range&&this.maxHandleElement.on("focus",()=>this.onPointerFocus(Gs.Max)))}getOptionsInfluencingEventBindings(t){return[t.disabled,t.readOnly,t.draggableRange,t.draggableRangeOnly,t.onlyBindHandles,t.keyboardSupport]}unbindEvents(){this.unsubscribeOnMove(),this.unsubscribeOnEnd();for(const t of this.getAllSliderElements())vr.isNullOrUndefined(t)||t.off()}onBarStart(t,n,r,s,a,l,u){n?this.onDragStart(t,r,s,a):this.onStart(t,r,s,a,l,u)}onStart(t,n,r,s,a,l){n.stopPropagation(),(!Ly.isTouchEvent(n)||!iG.hasSupport)&&n.preventDefault(),this.moving=!1,this.calculateViewDimensions(),vr.isNullOrUndefined(t)&&(t=this.getNearestHandle(n)),this.currentTrackingPointer=t;const u=this.getPointerElement(t);if(u.active=!0,this.viewOptions.keyboardSupport&&u.focus(),r){this.unsubscribeOnMove();const d=p=>this.dragging.active?this.onDragMove(p):this.onMove(p);this.onMoveEventListener=Ly.isTouchEvent(n)?this.eventListenerHelper.attachPassiveEventListener(document,"touchmove",d,this.viewOptions.touchEventsInterval):this.eventListenerHelper.attachEventListener(document,"mousemove",d,this.viewOptions.mouseEventsInterval)}if(s){this.unsubscribeOnEnd();const d=p=>this.onEnd(p);this.onEndEventListener=Ly.isTouchEvent(n)?this.eventListenerHelper.attachPassiveEventListener(document,"touchend",d):this.eventListenerHelper.attachEventListener(document,"mouseup",d)}this.userChangeStart.emit(this.getChangeContext()),Ly.isTouchEvent(n)&&!vr.isNullOrUndefined(n.changedTouches)&&vr.isNullOrUndefined(this.touchId)&&(this.touchId=n.changedTouches[0].identifier),a&&this.onMove(n,!0),l&&this.onEnd(n)}onMove(t,n){let r=null;if(Ly.isTouchEvent(t)){const d=t.changedTouches;for(let p=0;p=this.maxHandlePosition?a=this.viewOptions.rightToLeft?this.viewOptions.floor:this.viewOptions.ceil:(a=this.positionToValue(s),a=n&&!vr.isNullOrUndefined(this.viewOptions.tickStep)?this.roundStep(a,this.viewOptions.tickStep):this.roundStep(a)),this.positionTrackingHandle(a)}onEnd(t){Ly.isTouchEvent(t)&&t.changedTouches[0].identifier!==this.touchId||(this.moving=!1,this.viewOptions.animate&&(this.sliderElementAnimateClass=!0),this.touchId=null,this.viewOptions.keyboardSupport||(this.minHandleElement.active=!1,this.maxHandleElement.active=!1,this.currentTrackingPointer=null),this.dragging.active=!1,this.unsubscribeOnMove(),this.unsubscribeOnEnd(),this.userChangeEnd.emit(this.getChangeContext()))}onPointerFocus(t){const n=this.getPointerElement(t);n.on("blur",()=>this.onPointerBlur(n)),n.on("keydown",r=>this.onKeyboardEvent(r)),n.on("keyup",()=>this.onKeyUp()),n.active=!0,this.currentTrackingPointer=t,this.currentFocusPointer=t,this.firstKeyDown=!0}onKeyUp(){this.firstKeyDown=!0,this.userChangeEnd.emit(this.getChangeContext())}onPointerBlur(t){t.off("blur"),t.off("keydown"),t.off("keyup"),t.active=!1,vr.isNullOrUndefined(this.touchId)&&(this.currentTrackingPointer=null,this.currentFocusPointer=null)}getKeyActions(t){const n=this.viewOptions.ceil-this.viewOptions.floor,r=this.getViewOptionsStepOrEstimate();let s=t+r,a=t-r,l=t+n/10,u=t-n/10;this.viewOptions.reversedControls&&(s=t-r,a=t+r,l=t-n/10,u=t+n/10);const d={UP:s,DOWN:a,LEFT:a,RIGHT:s,PAGEUP:l,PAGEDOWN:u,HOME:this.viewOptions.reversedControls?this.viewOptions.ceil:this.viewOptions.floor,END:this.viewOptions.reversedControls?this.viewOptions.floor:this.viewOptions.ceil};return this.viewOptions.rightToLeft&&(d.LEFT=s,d.RIGHT=a,this.viewOptions.vertical&&(d.UP=a,d.DOWN=s)),d}onKeyboardEvent(t){const n=this.getCurrentTrackingValue(),r=vr.isNullOrUndefined(t.keyCode)?t.which:t.keyCode,u=this.getKeyActions(n)[{38:"UP",40:"DOWN",37:"LEFT",39:"RIGHT",33:"PAGEUP",34:"PAGEDOWN",36:"HOME",35:"END"}[r]];if(vr.isNullOrUndefined(u)||vr.isNullOrUndefined(this.currentTrackingPointer))return;t.preventDefault(),this.firstKeyDown&&(this.firstKeyDown=!1,this.userChangeStart.emit(this.getChangeContext()));const d=ku.clampToRange(u,this.viewOptions.floor,this.viewOptions.ceil),p=this.roundStep(d);if(this.viewOptions.draggableRangeOnly){const y=this.viewHighValue-this.viewLowValue;let C,O;this.currentTrackingPointer===Gs.Min?(C=p,O=p+y,O>this.viewOptions.ceil&&(O=this.viewOptions.ceil,C=O-y)):this.currentTrackingPointer===Gs.Max&&(O=p,C=p-y,C=this.maxHandlePosition-r;let p,y;if(n<=s){if(0===a.position)return;p=this.getMinValue(n,!0,!1),y=this.getMaxValue(n,!0,!1)}else if(d){if(l.position===this.maxHandlePosition)return;y=this.getMaxValue(n,!0,!0),p=this.getMinValue(n,!0,!0)}else p=this.getMinValue(n,!1,!1),y=this.getMaxValue(n,!1,!1);this.positionTrackingBar(p,y)}positionTrackingBar(t,n){!vr.isNullOrUndefined(this.viewOptions.minLimit)&&tthis.viewOptions.maxLimit&&(t=ku.roundToPrecisionLimit((n=this.viewOptions.maxLimit)-this.dragging.difference,this.viewOptions.precisionLimit)),this.viewLowValue=t,this.viewHighValue=n,this.applyViewChange(),this.updateHandles(Gs.Min,this.valueToPosition(t)),this.updateHandles(Gs.Max,this.valueToPosition(n))}positionTrackingHandle(t){t=this.applyMinMaxLimit(t),this.range&&(this.viewOptions.pushRange?t=this.applyPushRange(t):(this.viewOptions.noSwitching&&(this.currentTrackingPointer===Gs.Min&&t>this.viewHighValue?t=this.applyMinMaxRange(this.viewHighValue):this.currentTrackingPointer===Gs.Max&&tthis.viewHighValue?(this.viewLowValue=this.viewHighValue,this.applyViewChange(),this.updateHandles(Gs.Min,this.maxHandleElement.position),this.updateAriaAttributes(),this.currentTrackingPointer=Gs.Max,this.minHandleElement.active=!1,this.maxHandleElement.active=!0,this.viewOptions.keyboardSupport&&this.maxHandleElement.focus()):this.currentTrackingPointer===Gs.Max&&tthis.viewOptions.maxLimit?this.viewOptions.maxLimit:t}applyMinMaxRange(t){const r=Math.abs(t-(this.currentTrackingPointer===Gs.Min?this.viewHighValue:this.viewLowValue));if(!vr.isNullOrUndefined(this.viewOptions.minRange)&&rthis.viewOptions.maxRange){if(this.currentTrackingPointer===Gs.Min)return ku.roundToPrecisionLimit(this.viewHighValue-this.viewOptions.maxRange,this.viewOptions.precisionLimit);if(this.currentTrackingPointer===Gs.Max)return ku.roundToPrecisionLimit(this.viewLowValue+this.viewOptions.maxRange,this.viewOptions.precisionLimit)}return t}applyPushRange(t){const n=this.currentTrackingPointer===Gs.Min?this.viewHighValue-t:t-this.viewLowValue,r=vr.isNullOrUndefined(this.viewOptions.minRange)?this.getViewOptionsStepOrEstimate():this.viewOptions.minRange,s=this.viewOptions.maxRange;return ns&&(this.currentTrackingPointer===Gs.Min?(this.viewHighValue=ku.roundToPrecisionLimit(t+s,this.viewOptions.precisionLimit),this.applyViewChange(),this.updateHandles(Gs.Max,this.valueToPosition(this.viewHighValue))):this.currentTrackingPointer===Gs.Max&&(this.viewLowValue=ku.roundToPrecisionLimit(t-s,this.viewOptions.precisionLimit),this.applyViewChange(),this.updateHandles(Gs.Min,this.valueToPosition(this.viewLowValue))),this.updateAriaAttributes()),t}getChangeContext(){const t=new ppe;return t.pointerType=this.currentTrackingPointer,t.value=+this.value,this.range&&(t.highValue=+this.highValue),t}}return i.\u0275fac=function(t){return new(t||i)(wt(as),wt(Cs),wt(pl),wt(mo))},i.\u0275cmp=Fr({type:i,selectors:[["ngx-slider"]],contentQueries:function(t,n,r){if(1&t&&Qh(r,Yfe,5),2&t){let s;so(s=oo())&&(n.tooltipTemplate=s.first)}},viewQuery:function(t,n){if(1&t&&(la(Zfe,5,Ny),la(Jfe,5,Ny),la(epe,5,Ny),la(tpe,5,Ny),la(npe,5,_O),la(ipe,5,_O),la(rpe,5,L2),la(spe,5,L2),la(ope,5,L2),la(ape,5,L2),la(lpe,5,L2),la(cpe,5,Ny)),2&t){let r;so(r=oo())&&(n.leftOuterSelectionBarElement=r.first),so(r=oo())&&(n.rightOuterSelectionBarElement=r.first),so(r=oo())&&(n.fullBarElement=r.first),so(r=oo())&&(n.selectionBarElement=r.first),so(r=oo())&&(n.minHandleElement=r.first),so(r=oo())&&(n.maxHandleElement=r.first),so(r=oo())&&(n.floorLabelElement=r.first),so(r=oo())&&(n.ceilLabelElement=r.first),so(r=oo())&&(n.minHandleLabelElement=r.first),so(r=oo())&&(n.maxHandleLabelElement=r.first),so(r=oo())&&(n.combinedLabelElement=r.first),so(r=oo())&&(n.ticksElement=r.first)}},hostAttrs:[1,"ngx-slider"],hostVars:7,hostBindings:function(t,n){1&t&&Fi("resize",function(s){return n.onResize(s)},0,Px),2&t&&(Ea("disabled",n.sliderElementDisabledAttr),jo("vertical",n.sliderElementVerticalClass)("animate",n.sliderElementAnimateClass)("with-legend",n.sliderElementWithLegendClass))},inputs:{value:"value",highValue:"highValue",options:"options",manualRefresh:"manualRefresh",triggerFocus:"triggerFocus"},outputs:{valueChange:"valueChange",highValueChange:"highValueChange",userChangeStart:"userChangeStart",userChange:"userChange",userChangeEnd:"userChangeEnd"},features:[Po([gpe]),bc],decls:29,vars:13,consts:[["ngxSliderElement","",1,"ngx-slider-span","ngx-slider-bar-wrapper","ngx-slider-left-out-selection"],["leftOuterSelectionBar",""],[1,"ngx-slider-span","ngx-slider-bar"],["ngxSliderElement","",1,"ngx-slider-span","ngx-slider-bar-wrapper","ngx-slider-right-out-selection"],["rightOuterSelectionBar",""],["ngxSliderElement","",1,"ngx-slider-span","ngx-slider-bar-wrapper","ngx-slider-full-bar"],["fullBar",""],["ngxSliderElement","",1,"ngx-slider-span","ngx-slider-bar-wrapper","ngx-slider-selection-bar"],["selectionBar",""],[1,"ngx-slider-span","ngx-slider-bar","ngx-slider-selection",3,"ngStyle"],["ngxSliderHandle","",1,"ngx-slider-span","ngx-slider-pointer","ngx-slider-pointer-min",3,"ngStyle"],["minHandle",""],["ngxSliderHandle","",1,"ngx-slider-span","ngx-slider-pointer","ngx-slider-pointer-max",3,"ngStyle"],["maxHandle",""],["ngxSliderLabel","",1,"ngx-slider-span","ngx-slider-bubble","ngx-slider-limit","ngx-slider-floor"],["floorLabel",""],["ngxSliderLabel","",1,"ngx-slider-span","ngx-slider-bubble","ngx-slider-limit","ngx-slider-ceil"],["ceilLabel",""],["ngxSliderLabel","",1,"ngx-slider-span","ngx-slider-bubble","ngx-slider-model-value"],["minHandleLabel",""],["ngxSliderLabel","",1,"ngx-slider-span","ngx-slider-bubble","ngx-slider-model-high"],["maxHandleLabel",""],["ngxSliderLabel","",1,"ngx-slider-span","ngx-slider-bubble","ngx-slider-combined"],["combinedLabel",""],["ngxSliderElement","",1,"ngx-slider-ticks",3,"hidden"],["ticksElement",""],["class","ngx-slider-tick",3,"ngClass","ngStyle",4,"ngFor","ngForOf"],[1,"ngx-slider-tick",3,"ngClass","ngStyle"],[3,"template","tooltip","placement"],["class","ngx-slider-span ngx-slider-tick-value",3,"template","tooltip","placement","content",4,"ngIf"],["class","ngx-slider-span ngx-slider-tick-legend",3,"innerHTML",4,"ngIf"],[1,"ngx-slider-span","ngx-slider-tick-value",3,"template","tooltip","placement","content"],[1,"ngx-slider-span","ngx-slider-tick-legend",3,"innerHTML"]],template:function(t,n){1&t&&(Zt(0,"span",0,1),Pr(2,"span",2),un(),Zt(3,"span",3,4),Pr(5,"span",2),un(),Zt(6,"span",5,6),Pr(8,"span",2),un(),Zt(9,"span",7,8),Pr(11,"span",9),un(),Pr(12,"span",10,11)(14,"span",12,13)(16,"span",14,15)(18,"span",16,17)(20,"span",18,19)(22,"span",20,21)(24,"span",22,23),Zt(26,"span",24,25),qr(28,fpe,4,9,"span",26),un()),2&t&&(Nn(6),jo("ngx-slider-transparent",n.fullBarTransparentClass),Nn(3),jo("ngx-slider-draggable",n.selectionBarDraggableClass),Nn(2),Cn("ngStyle",n.barStyle),Nn(1),Cn("ngStyle",n.minPointerStyle),Nn(2),Fp("display",n.range?"inherit":"none"),Cn("ngStyle",n.maxPointerStyle),Nn(12),jo("ngx-slider-ticks-values-under",n.ticksUnderValuesClass),Cn("hidden",!n.showTicks),Nn(2),Cn("ngForOf",n.ticks))},dependencies:[Ape,Ny,X5,_O,L2,Sf,FA,Tu],styles:['.ngx-slider{display:inline-block;position:relative;height:4px;width:100%;margin:35px 0 15px;vertical-align:middle;-webkit-user-select:none;user-select:none;touch-action:pan-y} .ngx-slider.with-legend{margin-bottom:40px} .ngx-slider[disabled]{cursor:not-allowed} .ngx-slider[disabled] .ngx-slider-pointer{cursor:not-allowed;background-color:#d8e0f3} .ngx-slider[disabled] .ngx-slider-draggable{cursor:not-allowed} .ngx-slider[disabled] .ngx-slider-selection{background:#8b91a2} .ngx-slider[disabled] .ngx-slider-tick{cursor:not-allowed} .ngx-slider[disabled] .ngx-slider-tick.ngx-slider-selected{background:#8b91a2} .ngx-slider .ngx-slider-span{white-space:nowrap;position:absolute;display:inline-block} .ngx-slider .ngx-slider-base{width:100%;height:100%;padding:0} .ngx-slider .ngx-slider-bar-wrapper{left:0;box-sizing:border-box;margin-top:-16px;padding-top:16px;width:100%;height:32px;z-index:1} .ngx-slider .ngx-slider-draggable{cursor:move} .ngx-slider .ngx-slider-bar{left:0;width:100%;height:4px;z-index:1;background:#d8e0f3;border-radius:2px} .ngx-slider .ngx-slider-bar-wrapper.ngx-slider-transparent .ngx-slider-bar{background:transparent} .ngx-slider .ngx-slider-bar-wrapper.ngx-slider-left-out-selection .ngx-slider-bar{background:#df002d} .ngx-slider .ngx-slider-bar-wrapper.ngx-slider-right-out-selection .ngx-slider-bar{background:#03a688} .ngx-slider .ngx-slider-selection{z-index:2;background:#0db9f0;border-radius:2px} .ngx-slider .ngx-slider-pointer{cursor:pointer;width:32px;height:32px;top:-14px;background-color:#0db9f0;z-index:3;border-radius:16px} .ngx-slider .ngx-slider-pointer:after{content:"";width:8px;height:8px;position:absolute;top:12px;left:12px;border-radius:4px;background:#fff} .ngx-slider .ngx-slider-pointer:hover:after{background-color:#fff} .ngx-slider .ngx-slider-pointer.ngx-slider-active{z-index:4} .ngx-slider .ngx-slider-pointer.ngx-slider-active:after{background-color:#451aff} .ngx-slider .ngx-slider-bubble{cursor:default;bottom:16px;padding:1px 3px;color:#55637d;font-size:16px} .ngx-slider .ngx-slider-bubble.ngx-slider-limit{color:#55637d} .ngx-slider .ngx-slider-ticks{box-sizing:border-box;width:100%;height:0;position:absolute;left:0;top:-3px;margin:0;z-index:1;list-style:none} .ngx-slider .ngx-slider-ticks-values-under .ngx-slider-tick-value{top:auto;bottom:-36px} .ngx-slider .ngx-slider-tick{text-align:center;cursor:pointer;width:10px;height:10px;background:#d8e0f3;border-radius:50%;position:absolute;top:0;left:0;margin-left:16px-math-div(10px,2)} .ngx-slider .ngx-slider-tick.ngx-slider-selected{background:#0db9f0} .ngx-slider .ngx-slider-tick-value{position:absolute;top:-34px;transform:translate(-50%)} .ngx-slider .ngx-slider-tick-legend{position:absolute;top:24px;transform:translate(-50%);max-width:50px;white-space:normal} .ngx-slider.vertical{position:relative;width:4px;height:100%;margin:0 20px;padding:0;vertical-align:baseline;touch-action:pan-x} .ngx-slider.vertical .ngx-slider-base{width:100%;height:100%;padding:0} .ngx-slider.vertical .ngx-slider-bar-wrapper{top:auto;left:0;margin:0 0 0 -16px;padding:0 0 0 16px;height:100%;width:32px} .ngx-slider.vertical .ngx-slider-bar{bottom:0;left:auto;width:4px;height:100%} .ngx-slider.vertical .ngx-slider-pointer{left:-14px!important;top:auto;bottom:0} .ngx-slider.vertical .ngx-slider-bubble{left:16px!important;bottom:0} .ngx-slider.vertical .ngx-slider-ticks{height:100%;width:0;left:-3px;top:0;z-index:1} .ngx-slider.vertical .ngx-slider-tick{vertical-align:middle;margin-left:auto;margin-top:11px} .ngx-slider.vertical .ngx-slider-tick-value{left:24px;top:auto;transform:translateY(-28%)} .ngx-slider.vertical .ngx-slider-tick-legend{top:auto;right:24px;transform:translateY(-28%);max-width:none;white-space:nowrap} .ngx-slider.vertical .ngx-slider-ticks-values-under .ngx-slider-tick-value{bottom:auto;left:auto;right:24px} .ngx-slider *{transition:none} .ngx-slider.animate .ngx-slider-bar-wrapper{transition:all linear .3s} .ngx-slider.animate .ngx-slider-selection{transition:background-color linear .3s} .ngx-slider.animate .ngx-slider-pointer{transition:all linear .3s} .ngx-slider.animate .ngx-slider-bubble{transition:all linear .3s} .ngx-slider.animate .ngx-slider-bubble.ngx-slider-limit{transition:opacity linear .3s} .ngx-slider.animate .ngx-slider-bubble.ngx-slider-combined{transition:opacity linear .3s} .ngx-slider.animate .ngx-slider-tick{transition:background-color linear .3s}'],changeDetection:0}),i})(),_pe=(()=>{class i{}return i.\u0275fac=function(t){return new(t||i)},i.\u0275mod=ia({type:i}),i.\u0275inj=ft({imports:[[D_]]}),i})();function ype(i,e){if(1&i){const t=Za();Zt(0,"input",4),Fi("input",function(r){return ks(t),ys(Mr().onValueChange(r.target.value))}),un()}2&i&&Cn("value",Mr().value)}class N2{constructor(){Wt(this,"value",0),Wt(this,"min",0),Wt(this,"oldMin",0),Wt(this,"max",100),Wt(this,"oldMax",0),Wt(this,"step",1),Wt(this,"allowCustomValue",!1),Wt(this,"onChange",new Ws)}onValueChange(e){e&&this.onChange.emit(e)}toggleMinCut(e){e.checked?this.min=this.oldMin:(this.oldMin=this.min,this.min=Number.MIN_SAFE_INTEGER)}toggleMaxCut(e){e.checked?this.max=this.oldMax:(this.oldMax=this.max,this.max=Number.MAX_SAFE_INTEGER)}}Wt(N2,"\u0275fac",function(e){return new(e||N2)}),Wt(N2,"\u0275cmp",Fr({type:N2,selectors:[["app-config-slider"]],inputs:{value:"value",min:"min",max:"max",step:"step",allowCustomValue:"allowCustomValue"},outputs:{onChange:"onChange"},decls:4,vars:5,consts:[[1,"d-flex","flex-row","align-items-center"],["thumbLabel","",1,"mx-2",3,"min","max","step"],["matSliderThumb","",3,"value","valueChange"],["class","config-slider-input","type","number",3,"value","input",4,"ngIf"],["type","number",1,"config-slider-input",3,"value","input"]],template:function(e,t){1&e&&(Zt(0,"div",0)(1,"mat-slider",1)(2,"input",2),Fi("valueChange",function(r){return t.onValueChange(r)}),un()(),qr(3,ype,1,1,"input",3),un()),2&e&&(Nn(1),Cn("min",t.min)("max",t.max)("step",t.step),Nn(1),Cn("value",t.value),Nn(1),Cn("ngIf",t.allowCustomValue))},dependencies:[Tu,jV,OD],styles:[".config-slider-input[_ngcontent-%COMP%]{background:transparent;color:var(--phoenix-text-color);border:none;border-bottom:1px solid var(--phoenix-text-color);width:25%;-moz-appearance:textfield}input[_ngcontent-%COMP%]::-webkit-outer-spin-button, input[_ngcontent-%COMP%]::-webkit-inner-spin-button{-webkit-appearance:none}"]}));const vpe=["phoenixMenuItem"];function bpe(i,e){1&i&&Qg(0)}function xpe(i,e){if(1&i){const t=Za();bd(0),Zt(1,"mat-slide-toggle",9),Fi("change",function(r){return ks(t),ys(Mr().currentNode.toggleSelfAndDescendants(r.checked))}),qr(2,bpe,1,0,"ng-container",10),un(),dh()}if(2&i){const t=Mr(),n=bl(5);Nn(1),Cn("checked",t.currentNode.toggleState),Nn(1),Cn("ngTemplateOutlet",n)}}function wpe(i,e){if(1&i&&(Zt(0,"span",14),vl(),Zt(1,"svg"),Pr(2,"use"),un()()),2&i){const t=Mr(2);Nn(2),y_("href","assets/icons/",t.currentNode.icon,".svg#",t.currentNode.icon,"")}}function Cpe(i,e){if(1&i&&(Zt(0,"span",11),qr(1,wpe,3,2,"span",12),Zt(2,"span",13),dr(3),un()()),2&i){const t=Mr();Nn(1),Cn("ngIf",t.currentNode.icon),Nn(1),Cn("title",t.currentNode.name),Nn(1),ph(t.currentNode.name)}}function Mpe(i,e){if(1&i){const t=Za();vl(),cd(),Zt(0,"div",20),Fi("click",function(){return ks(t),ys(Mr(2).currentNode.configActive=!1)}),un()}}const Spe=function(i){return{"font-weight-bold w-100":i}};function Tpe(i,e){if(1&i&&(Zt(0,"label",26),dr(1),un()),2&i){const t=Mr(2).$implicit;Cn("ngClass",$d(2,Spe,"label"===t.type)),Nn(1),Gl(" ",t.label," ")}}function Epe(i,e){if(1&i){const t=Za();Zt(0,"mat-checkbox",9),Fi("change",function(r){ks(t);const s=Mr(3).$implicit;return s.onChange(r.checked),ys(s.isChecked=r.checked)}),un()}2&i&&Cn("checked",Mr(3).$implicit.isChecked)}function Dpe(i,e){if(1&i){const t=Za();Zt(0,"app-config-slider",34),Fi("onChange",function(r){ks(t);const s=Mr(3).$implicit;return s.onChange(r),ys(s.value=r)}),un()}if(2&i){const t=Mr(3).$implicit;Cn("value",t.value)("min",t.min)("max",t.max)("step",t.step)("allowCustomValue",t.allowCustomValue)}}function Bpe(i,e){if(1&i){const t=Za();Zt(0,"button",35),Fi("click",function(){return ks(t),ys(Mr(3).$implicit.onClick())}),dr(1),un()}if(2&i){const t=Mr(3).$implicit;Nn(1),Gl(" ",t.label," ")}}function Ipe(i,e){if(1&i){const t=Za();Zt(0,"input",36),Fi("input",function(r){ks(t);const s=Mr(3).$implicit;return s.onChange(r.target.value),ys(s.color=r.target.value)}),un()}2&i&&Cn("value",Mr(3).$implicit.color)}const Ppe=function(i,e,t){return{floor:i,ceil:e,step:t,animate:!1}};function kpe(i,e){if(1&i){const t=Za();Zt(0,"div",37)(1,"div",38)(2,"mat-checkbox",9),Fi("change",function(r){return ks(t),ys(Mr(3).$implicit.setEnableMin(r.checked))}),un(),Zt(3,"mat-checkbox",9),Fi("change",function(r){return ks(t),ys(Mr(3).$implicit.setEnableMax(r.checked))}),un()(),Zt(4,"div",38)(5,"input",39),Fi("input",function(r){ks(t);const s=Mr(3).$implicit;return s.value=r.target.value,ys(s.onChange(s))}),un(),Zt(6,"input",40),Fi("input",function(r){ks(t);const s=Mr(3).$implicit;return s.highValue=r.target.value,ys(s.onChange(s))}),un()(),Zt(7,"ngx-slider",41),Fi("valueChange",function(r){return ks(t),ys(Mr(3).$implicit.value=r)})("highValueChange",function(r){return ks(t),ys(Mr(3).$implicit.highValue=r)})("userChange",function(r){return ks(t),ys(Mr(3).$implicit.onChange(r))}),un()()}if(2&i){const t=Mr(3).$implicit;Nn(2),Cn("checked",t.enableMin),Nn(1),Cn("checked",t.enableMax),Nn(2),Cn("value",t.value),Nn(1),Cn("value",t.highValue),Nn(1),Cn("value",t.value)("highValue",t.highValue)("options",RT(7,Ppe,t.min,t.max,t.step))}}function Fpe(i,e){if(1&i&&(Zt(0,"option",44),dr(1),un()),2&i){const t=e.$implicit;Cn("value",t),Nn(1),Gl(" ",t," ")}}function Ope(i,e){if(1&i){const t=Za();Zt(0,"select",42),Fi("change",function(r){return ks(t),ys(Mr(3).$implicit.onChange(r.target.value))}),qr(1,Fpe,2,2,"option",43),un()}if(2&i){const t=Mr(3).$implicit;Nn(1),Cn("ngForOf",t.options)}}const Rpe=function(i){return{"p-0":i}};function Lpe(i,e){if(1&i&&(Zt(0,"div",27),qr(1,Epe,1,1,"mat-checkbox",28),qr(2,Dpe,1,5,"app-config-slider",29),qr(3,Bpe,2,1,"button",30),qr(4,Ipe,1,1,"input",31),qr(5,kpe,8,11,"div",32),qr(6,Ope,2,1,"select",33),un()),2&i){const t=Mr(2).$implicit;Cn("ngClass",$d(7,Rpe,"button"===t.type)),Nn(1),Cn("ngSwitchCase","checkbox"),Nn(1),Cn("ngSwitchCase","slider"),Nn(1),Cn("ngSwitchCase","button"),Nn(1),Cn("ngSwitchCase","color"),Nn(1),Cn("ngSwitchCase","rangeSlider"),Nn(1),Cn("ngSwitchCase","select")}}function Npe(i,e){if(1&i&&(Zt(0,"div",23),qr(1,Tpe,2,4,"label",24),qr(2,Lpe,7,9,"div",25),un()),2&i){const t=Mr().$implicit;Nn(1),Cn("ngIf","button"!==t.type),Nn(1),Cn("ngIf","label"!==t.type)}}function Upe(i,e){if(1&i&&(bd(0,21),qr(1,Npe,3,2,"div",22),dh()),2&i){const t=e.$implicit;Cn("ngSwitch",t.type),Nn(1),Cn("ngIf",!t.hidden)}}const zpe=function(i){return{"top.px":i}};function Hpe(i,e){if(1&i){const t=Za();Zt(0,"div")(1,"button",15),Fi("click",function(){ks(t);const r=Mr();return r.calculateConfigTop(),ys(r.currentNode.configActive=!r.currentNode.configActive)}),vl(),Zt(2,"svg"),Pr(3,"use",16),un()(),qr(4,Mpe,1,0,"div",17),cd(),Zt(5,"div",18),qr(6,Upe,2,2,"ng-container",19),un()()}if(2&i){const t=Mr();Nn(4),Cn("ngIf",t.currentNode.configActive),Nn(1),Cn("hidden",!t.currentNode.configActive)("ngStyle",$d(4,zpe,t.configTop)),Nn(1),Cn("ngForOf",t.castConfigsToAny(t.currentNode.configs))}}const Vpe=function(i){return{expanded:i}};function Gpe(i,e){if(1&i){const t=Za();Zt(0,"button",45),Fi("click",function(){ks(t);const r=Mr();return ys(r.currentNode.childrenActive=!r.currentNode.childrenActive)}),vl(),Zt(1,"svg"),Pr(2,"use",46),un()()}if(2&i){const t=Mr();Cn("ngClass",$d(1,Vpe,t.currentNode.childrenActive))}}function qpe(i,e){1&i&&Pr(0,"app-phoenix-menu-item",49),2&i&&Cn("currentNode",e.$implicit)}function Qpe(i,e){if(1&i&&(Zt(0,"div",47),qr(1,qpe,1,1,"app-phoenix-menu-item",48),un()),2&i){const t=Mr();Nn(1),Cn("ngForOf",t.currentNode.children)}}class rx{constructor(e){Wt(this,"cdr",void 0),Wt(this,"currentNode",void 0),Wt(this,"phoenixMenuItem",void 0),Wt(this,"configTop",void 0),this.cdr=e}calculateConfigTop(){this.phoenixMenuItem&&(this.configTop=this.phoenixMenuItem.nativeElement.getBoundingClientRect().top,this.cdr.detectChanges())}castConfigsToAny(e){return e}}Wt(rx,"\u0275fac",function(e){return new(e||rx)(wt(pl))}),Wt(rx,"\u0275cmp",Fr({type:rx,selectors:[["app-phoenix-menu-item"]],viewQuery:function(e,t){if(1&e&&la(vpe,5),2&e){let n;so(n=oo())&&(t.phoenixMenuItem=n.first)}},inputs:{currentNode:"currentNode"},decls:10,vars:5,consts:[[1,"phoenix-menu-item"],["phoenixMenuItem",""],[1,"phoenix-menu-item-left","align-items-center"],[4,"ngIf","ngIfElse"],["nodeName",""],[1,"phoenix-menu-item-right"],[4,"ngIf"],["class","icon-wrapper icon-button btn-blank item-expand","data-testid","dropdown",3,"ngClass","click",4,"ngIf"],["class","phoenix-menu-children",4,"ngIf"],[3,"checked","change"],[4,"ngTemplateOutlet"],[1,"d-flex","w-100","align-items-center"],["class","icon-wrapper item-icon",4,"ngIf"],[1,"item-name",3,"title"],[1,"icon-wrapper","item-icon"],[1,"icon-wrapper","icon-button","btn-blank","item-settings",3,"click"],["href","assets/icons/gear.svg#gear"],["class","item-config-backdrop",3,"click",4,"ngIf"],[1,"item-config",3,"hidden","ngStyle"],[3,"ngSwitch",4,"ngFor","ngForOf"],[1,"item-config-backdrop",3,"click"],[3,"ngSwitch"],["class","item-config-single",4,"ngIf"],[1,"item-config-single"],["class","item-config-label","for","item-config-field",3,"ngClass",4,"ngIf"],["class","item-config-data",3,"ngClass",4,"ngIf"],["for","item-config-field",1,"item-config-label",3,"ngClass"],[1,"item-config-data",3,"ngClass"],[3,"checked","change",4,"ngSwitchCase"],[3,"value","min","max","step","allowCustomValue","onChange",4,"ngSwitchCase"],["class","w-100","mat-button","","mat-stroked-button","",3,"click",4,"ngSwitchCase"],["id","item-config-field","type","color",3,"value","input",4,"ngSwitchCase"],["class","range-slider",4,"ngSwitchCase"],["id","item-config-field","class","w-100",3,"change",4,"ngSwitchCase"],[3,"value","min","max","step","allowCustomValue","onChange"],["mat-button","","mat-stroked-button","",1,"w-100",3,"click"],["id","item-config-field","type","color",3,"value","input"],[1,"range-slider"],[1,"range-slider-inputs","d-flex","justify-content-between"],["type","number","placeholder","Min","step","config.step",1,"form-control","form-control-sm",3,"value","input"],["type","number","placeholder","Max","step","config.step",1,"form-control","form-control-sm",3,"value","input"],["thumbLabel","",3,"value","highValue","options","valueChange","highValueChange","userChange"],["id","item-config-field",1,"w-100",3,"change"],[3,"value",4,"ngFor","ngForOf"],[3,"value"],["data-testid","dropdown",1,"icon-wrapper","icon-button","btn-blank","item-expand",3,"ngClass","click"],["href","assets/icons/expand.svg#expand"],[1,"phoenix-menu-children"],[3,"currentNode",4,"ngFor","ngForOf"],[3,"currentNode"]],template:function(e,t){if(1&e&&(Zt(0,"div",0,1)(2,"div",2),qr(3,xpe,3,2,"ng-container",3),qr(4,Cpe,4,3,"ng-template",null,4,NT),un(),Zt(6,"div",5),qr(7,Hpe,7,6,"div",6),qr(8,Gpe,3,3,"button",7),un()(),qr(9,Qpe,2,1,"div",8)),2&e){const n=bl(5);Nn(3),Cn("ngIf",t.currentNode.onToggle)("ngIfElse",n),Nn(4),Cn("ngIf",t.currentNode.configs.length>0),Nn(1),Cn("ngIf",t.currentNode.children.length>0),Nn(1),Cn("ngIf",t.currentNode.childrenActive)}},dependencies:[FA,Sf,Tu,K5,X5,iE,Y8,t3,$S,XS,eG,E2,lG,rx,N2],styles:[".phoenix-menu-item{width:100%;padding:.6rem;background:var(--phoenix-background-color-secondary);color:var(--phoenix-text-color);font-size:.8rem;transition:all .5s;display:flex;justify-content:space-between;align-items:center}.phoenix-menu-item-left{display:flex;justify-content:flex-start;min-width:0;padding-right:.5rem;overflow:hidden}.phoenix-menu-item-left .item-name{flex:1;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.phoenix-menu-item-left .item-icon{margin-right:.2rem}.phoenix-menu-item-right{display:flex;justify-content:flex-end}.phoenix-menu-item-right .item-expand.expanded{transform:scaleY(-1)}.phoenix-menu-item-right .item-settings{margin-right:.2rem}.phoenix-menu-item-right .item-config-backdrop{position:fixed;top:0;left:0;width:100vw;height:100vh;z-index:110}.phoenix-menu-item-right .item-config{position:absolute;margin-top:-5rem;right:100%;width:14rem;padding:.5rem;background:var(--phoenix-background-color-secondary);color:var(--phoenix-text-color-secondary);box-shadow:var(--phoenix-box-shadow);display:flex;flex-direction:column;z-index:120}.phoenix-menu-item-right .item-config>*{margin-bottom:.4rem}.phoenix-menu-item-right .item-config>*:last-child{margin-bottom:0}.phoenix-menu-item-right .item-config .item-config-single{display:flex;flex-direction:row}.phoenix-menu-item-right .item-config .item-config-single .item-config-label{width:30%}.phoenix-menu-item-right .item-config .item-config-single .item-config-data{flex-grow:1;padding-left:.5rem}.phoenix-menu-item .icon-wrapper{display:inline-block;width:1.3rem;height:1.3rem;padding:.23rem;transition:all .4s}.phoenix-menu-item .icon-wrapper.icon-button:hover{background:var(--phoenix-options-icon-bg);border-radius:40%;cursor:pointer}.phoenix-menu-item .icon-wrapper svg{width:100%;height:100%;vertical-align:top}.phoenix-menu-item .mat-slide-toggle-bar{width:30px!important}.phoenix-menu-item .mat-slide-toggle-thumb{width:15px!important;height:15px!important;position:absolute;top:2px}.phoenix-menu-item .mat-slider-horizontal{min-width:0;width:100%;height:20px}.phoenix-menu-item .mat-slider-horizontal .mat-slider-wrapper{top:10px}.phoenix-menu-item label.mat-checkbox-layout{margin:0}@media screen and (max-width: 768px){.phoenix-menu-item{font-size:.75rem;padding:.5rem}.phoenix-menu-item .icon-wrapper{width:1rem;height:1rem;padding:.15rem}}.phoenix-menu-children{margin-left:.5rem;border-left:1px solid var(--phoenix-accent)}.range-slider .range-slider-inputs{gap:20%}.range-slider .ngx-slider .ngx-slider-bar{background:var(--phoenix-text-color-secondary);height:.2rem}.range-slider .ngx-slider .ngx-slider-selection{background:var(--phoenix-accent)}.range-slider .ngx-slider .ngx-slider-pointer{width:1rem;height:1rem;top:-.45rem;bottom:0;background-color:var(--phoenix-accent)}.range-slider .ngx-slider .ngx-slider-pointer:after{display:none}.range-slider .ngx-slider .ngx-slider-bubble{color:var(--phoenix-text-color);font-size:.8rem}.range-slider .ngx-slider .ngx-slider-bubble.ngx-slider-limit{color:var(--phoenix-text-color-secondary)}\n"],encapsulation:2}));class $_{constructor(){Wt(this,"rootNode",void 0)}}Wt($_,"\u0275fac",function(e){return new(e||$_)}),Wt($_,"\u0275cmp",Fr({type:$_,selectors:[["app-phoenix-menu"]],inputs:{rootNode:"rootNode"},decls:2,vars:1,consts:[["id","phoenixMenu"],[3,"currentNode"]],template:function(e,t){1&e&&(Zt(0,"div",0),Pr(1,"app-phoenix-menu-item",1),un()),2&e&&(Nn(1),Cn("currentNode",t.rootNode))},dependencies:[rx],styles:["[_nghost-%COMP%]{width:15rem;max-width:45%;position:absolute;top:5rem;right:1rem}#phoenixMenu[_ngcontent-%COMP%]{background:var(--phoenix-background-color-secondary);max-height:75vh;overflow-y:auto;box-shadow:var(--phoenix-box-shadow);z-index:100}@media screen and (max-width: 768px){#phoenixMenu[_ngcontent-%COMP%]{top:4rem}}"]}));class U2{constructor(){Wt(this,"experimentLink",void 0)}ngOnInit(){const e=new URL(window.location.href);e.searchParams.delete("embed"),this.experimentLink=e.toString()}goToExperiment(){window.open(this.experimentLink,"_blank")}}Wt(U2,"\u0275fac",function(e){return new(e||U2)}),Wt(U2,"\u0275cmp",Fr({type:U2,selectors:[["app-experiment-link"]],decls:1,vars:0,consts:[["tooltip","See full event display","icon","link",3,"click"]],template:function(e,t){1&e&&(Zt(0,"app-menu-toggle",0),Fi("click",function(){return t.goToExperiment()}),un())},dependencies:[Ql]}));class _0{}Wt(_0,"\u0275fac",function(e){return new(e||_0)}),Wt(_0,"\u0275cmp",Fr({type:_0,selectors:[["app-embed-menu"]],decls:8,vars:0,consts:[["id","embedMenu"],["id","embedMenuInner"]],template:function(e,t){1&e&&(Zt(0,"div",0)(1,"div",1),Pr(2,"app-dark-theme")(3,"app-auto-rotate")(4,"app-main-view-toggle")(5,"app-animate-event")(6,"app-animate-camera")(7,"app-experiment-link"),un()())},dependencies:[Py,ky,Fy,Ub,Oy,U2],styles:["#embedMenu[_ngcontent-%COMP%]{display:none}#embedMenu[_ngcontent-%COMP%] #embedMenuInner[_ngcontent-%COMP%]{display:flex;position:absolute;left:1rem;bottom:1rem;background:var(--phoenix-background-color-secondary);border:1px solid var(--phoenix-background-color-tertiary);box-shadow:var(--phoenix-box-shadow);border-radius:30px;padding:.25rem 0}"]}));class z2{constructor(e){Wt(this,"eventDisplay",void 0),Wt(this,"phoenixMenuRoot",new g2("Phoenix Menu","phoenix-menu")),Wt(this,"eventDataImportOptions",[Xh.JSON,Xh.JIVEXML,Xh.ZIP]),Wt(this,"loaded",!1),Wt(this,"loadingProgress",0),this.eventDisplay=e}ngOnInit(){let e;e={eventFile:"assets/files/JiveXML/JiveXML_336567_2327102923.xml",eventType:"jivexml"};const t={eventDataLoader:new My,presetViews:[new $h("Left View",[0,0,-12e3],[0,0,0],"left-cube"),new $h("Center View",[-500,12e3,0],[0,0,0],"top-cube"),new $h("Right View",[0,0,12e3],[0,0,0],"right-cube")],defaultView:[4e3,0,4e3,0,0,0],phoenixMenuRoot:this.phoenixMenuRoot,defaultEventFile:e};this.eventDisplay.init(t),this.eventDisplay.loadGLTFGeometry("assets/geometry/ATLAS/Barrel-Toroid.gltf","Barrel Toroid","Magnets",1e3),this.eventDisplay.loadGLTFGeometry("assets/geometry/ATLAS/End-Cap-Toroid.gltf","Endcap","Magnets",1e3),this.eventDisplay.loadGLTFGeometry("assets/geometry/ATLAS/Feet.gltf","Feet","Magnets",1e3),this.eventDisplay.loadGLTFGeometry("assets/geometry/ATLAS/Warm-Structure.gltf","Warm structure","Magnets",1e3),this.eventDisplay.loadGLTFGeometry("assets/geometry/ATLAS/Lar-Barrel.gltf","LAr Barrel","Calorimeters",1e3),this.eventDisplay.loadGLTFGeometry("assets/geometry/ATLAS/Lar-EMEC.gltf","LAr EC1","Calorimeters",1e3),this.eventDisplay.loadGLTFGeometry("assets/geometry/ATLAS/Lar-FCAL.gltf","LAr FCAL","Calorimeters",1e3),this.eventDisplay.loadGLTFGeometry("assets/geometry/ATLAS/Lar-HEC.gltf","LAr HEC","Calorimeters",1e3),this.eventDisplay.loadGLTFGeometry("assets/geometry/ATLAS/Tile-Barrel.gltf","Tile Cal","Calorimeters",1e3),this.eventDisplay.loadGLTFGeometry("assets/geometry/ATLAS/Tile-End-Cap.gltf","Tile Cal EC","Calorimeters",1e3),this.eventDisplay.loadGLTFGeometry("assets/geometry/ATLAS/Beam.gltf","Beam","Inner Detector",1e3),this.eventDisplay.loadGLTFGeometry("assets/geometry/ATLAS/Pixel.gltf","Pixel","Inner Detector",1e3,!0),this.eventDisplay.loadGLTFGeometry("assets/geometry/ATLAS/SCT-BAR.gltf","SCT","Inner Detector",1e3),this.eventDisplay.loadGLTFGeometry("assets/geometry/ATLAS/SCT-EC.gltf","SCT Endcaps","Inner Detector",1e3),this.eventDisplay.loadGLTFGeometry("assets/geometry/ATLAS/TRT-BAR.gltf","TRT","Inner Detector",1e3),this.eventDisplay.loadGLTFGeometry("assets/geometry/ATLAS/TRT-EC.gltf","TRT Endcaps","Inner Detector",1e3),this.eventDisplay.loadGLTFGeometry("assets/geometry/ATLAS/Extra-Wheel.gltf","Extra wheel","Muon Spectrometer > Endcaps",1e3),this.eventDisplay.loadGLTFGeometry("assets/geometry/ATLAS/Big-Wheel.gltf","Big wheel","Muon Spectrometer > Endcaps",1e3),this.eventDisplay.loadGLTFGeometry("assets/geometry/ATLAS/Outer-Wheel.gltf","Outer Wheel","Muon Spectrometer > Endcaps",1e3),this.eventDisplay.loadGLTFGeometry("assets/geometry/ATLAS/Muon-Barrel-Inner.gltf","Muon Barrel Inner","Muon Spectrometer > Barrel",1e3),this.eventDisplay.loadGLTFGeometry("assets/geometry/ATLAS/Muon-Barrel-Middle.gltf","Muon Barrel Middle","Muon Spectrometer > Barrel",1e3),this.eventDisplay.loadGLTFGeometry("assets/geometry/ATLAS/Muon-Barrel-Outer.gltf","Muon Barrel Outer","Muon Spectrometer > Barrel",1e3),this.eventDisplay.loadGLTFGeometry("assets/geometry/ATLAS/Muon-Big-Wheel-MDT.gltf","Big Wheel MDT ","Muon Spectrometer > Endcaps",1e3),this.eventDisplay.loadGLTFGeometry("assets/geometry/ATLAS/Small-Wheel-Chambers.gltf","Small Wheel","Muon Spectrometer > Endcaps",1e3),this.eventDisplay.loadGLTFGeometry("assets/geometry/ATLAS/Small-Wheel-Hub.gltf","Small Wheel Hub","Muon Spectrometer > Endcaps",1e3),this.eventDisplay.loadGLTFGeometry("assets/geometry/ATLAS/Small-Wheel-NJD.gltf","Small Wheel Feet","Muon Spectrometer > Endcaps",1e3),this.eventDisplay.loadGLTFGeometry("assets/geometry/ATLAS/TGC2.gltf","TGC2","Muon Spectrometer > Endcaps",1e3),this.eventDisplay.loadGLTFGeometry("assets/geometry/ATLAS/TGC3.gltf","TGC3","Muon Spectrometer > Endcaps",1e3),this.eventDisplay.getLoadingManager().addProgressListener(n=>this.loadingProgress=n),this.eventDisplay.getLoadingManager().addLoadListenerWithCheck(()=>{console.log("Loading default configuration."),this.loaded=!0,this.eventDisplay.getURLOptionsManager().getURLOptions().get("config")||(new Nm).loadStateFromJSON(Dae)})}}Wt(z2,"\u0275fac",function(e){return new(e||z2)(wt(Qa))}),Wt(z2,"\u0275cmp",Fr({type:z2,selectors:[["app-atlas"]],decls:7,vars:4,consts:[[3,"loaded","progress"],[3,"eventDataImportOptions"],["logo","assets/images/atlas.svg","url","https://home.cern/science/experiments/atlas","tagline","ATLAS Experiment at CERN"],[3,"rootNode"],["id","eventDisplay"]],template:function(e,t){1&e&&Pr(0,"app-loader",0)(1,"app-nav")(2,"app-ui-menu",1)(3,"app-embed-menu")(4,"app-experiment-info",2)(5,"app-phoenix-menu",3)(6,"div",4),2&e&&(Cn("loaded",t.loaded)("progress",t.loadingProgress),Nn(2),Cn("eventDataImportOptions",t.eventDataImportOptions),Nn(3),Cn("rootNode",t.phoenixMenuRoot))},dependencies:[Vm,j_,Ry,$_,Gm,_0]}));class H2{constructor(e){Wt(this,"eventDisplay",void 0),Wt(this,"interval",void 0),Wt(this,"active",!1),Wt(this,"intervalId",void 0),Wt(this,"events",void 0),this.eventDisplay=e}ngOnInit(){this.eventDisplay.listenToLoadedEventsChange(e=>this.events=e)}toggleCycle(){this.active=!this.active,clearInterval(this.intervalId),this.active&&this.startCycleInterval()}startCycleInterval(e=0){let t=e;this.intervalId=setInterval(()=>{t=t>=this.events.length?0:t+1,this.eventDisplay.loadEvent(this.events[t])},this.interval)}}Wt(H2,"\u0275fac",function(e){return new(e||H2)(wt(Qa))}),Wt(H2,"\u0275cmp",Fr({type:H2,selectors:[["app-cycle-events"]],inputs:{interval:"interval"},decls:1,vars:1,consts:[["tooltip","Cycle through events","icon","cycle-events",3,"active","click"]],template:function(e,t){1&e&&(Zt(0,"app-menu-toggle",0),Fi("click",function(){return t.toggleCycle()}),un()),2&e&&Cn("active",t.active)},dependencies:[Ql],encapsulation:2}));class n3{constructor(e){Wt(this,"eventDisplay",void 0),Wt(this,"open",!1),this.eventDisplay=e}moveVP(e,t){for(const n of["Modules","Support","RFFoil","DeliveryPipes"])e.getObjectByName("VP > Left > "+n).position.setComponent(0,t),e.getObjectByName("VP > Right > "+n).position.setComponent(0,-t)}toggleVP(){this.open=!this.open,this.moveVP(this.eventDisplay.getThreeManager().getSceneManager(),this.open?30:0)}}Wt(n3,"\u0275fac",function(e){return new(e||n3)(wt(Qa))}),Wt(n3,"\u0275cmp",Fr({type:n3,selectors:[["app-vp-toggle"]],decls:1,vars:2,consts:[[3,"tooltip","icon","click"]],template:function(e,t){1&e&&(Zt(0,"app-menu-toggle",0),Fi("click",function(){return t.toggleVP()}),un()),2&e&&Cn("tooltip",(t.open?"Close":"Open")+"VP")("icon",t.open?"closevp":"openvp")},dependencies:[Ql]}));class r3{constructor(e){Wt(this,"eventDisplay",void 0),Wt(this,"events",void 0),Wt(this,"phoenixMenuRoot",new g2("Phoenix Menu","phoenix-menu")),Wt(this,"loaded",!1),Wt(this,"loadingProgress",0),Wt(this,"eventDataImportOptions",[Xh.JSON,Xh.ZIP]),this.eventDisplay=e}ngOnInit(){const e={eventDataLoader:new My,presetViews:[new $h("Global View",[-8e3,6e3,0],[0,0,8e3],"perspective",vy.On,90,90),new $h("Calo View",[-8e3,6e3,16e3],[0,0,12e3],"perspective",vy.On,90,90),new $h("Side View",[-12e3,0,12e3],[0,0,12e3],"right-cube"),new $h("Vertex Locator View",[-500,1e3,0],[0,0,0],"top-cube"),new $h("Front View",[0,0,-6e3],[0,0,0],"left-cube"),new $h("Top View",[0,16e3,12e3],[0,0,12e3],"top-cube")],defaultView:[-8e3,6e3,0,0,0,8e3],phoenixMenuRoot:this.phoenixMenuRoot,defaultEventFile:{eventFile:"assets/files/lhcb/LHCbEventData.json",eventType:"json"}};this.eventDisplay.init(e);try{this.eventDisplay.loadGLTFGeometry("assets/geometry/LHCb/LHCb.glb",void 0,void 0,1,!0)}catch(t){console.log("Error:",t)}this.eventDisplay.getLoadingManager().addProgressListener(t=>this.loadingProgress=t),this.eventDisplay.getLoadingManager().addLoadListenerWithCheck(()=>this.loaded=!0)}}Wt(r3,"\u0275fac",function(e){return new(e||r3)(wt(Qa))}),Wt(r3,"\u0275cmp",Fr({type:r3,selectors:[["app-lhcb"]],decls:28,vars:5,consts:[[3,"loaded","progress"],[3,"interval"],[3,"eventDataImportOptions"],["logo","assets/images/lhcb.svg","url","https://home.cern/science/experiments/lhcb","tagline","LHCb Experiment at CERN"],[3,"rootNode"],["id","eventDisplay"]],template:function(e,t){1&e&&(Pr(0,"app-loader",0)(1,"app-nav"),Zt(2,"app-ui-menu-wrapper"),Pr(3,"app-event-selector")(4,"app-cycle-events",1)(5,"app-zoom-controls")(6,"app-view-options")(7,"app-auto-rotate")(8,"app-dark-theme")(9,"app-object-clipping")(10,"app-main-view-toggle")(11,"app-overlay-view")(12,"app-object-selection")(13,"app-info-panel")(14,"app-animate-event")(15,"app-collections-info")(16,"app-performance-toggle")(17,"app-vr-toggle")(18,"app-ar-toggle")(19,"app-ss-mode")(20,"app-make-picture")(21,"app-io-options",2)(22,"app-share-link")(23,"app-vp-toggle"),un(),Pr(24,"app-embed-menu")(25,"app-experiment-info",3)(26,"app-phoenix-menu",4)(27,"div",5)),2&e&&(Cn("loaded",t.loaded)("progress",t.loadingProgress),Nn(4),Cn("interval",5e3),Nn(17),Cn("eventDataImportOptions",t.eventDataImportOptions),Nn(5),Cn("rootNode",t.phoenixMenuRoot))},dependencies:[Vm,zb,Gb,qb,Qb,Wb,jb,$b,Py,ky,Xb,Ry,Kb,Fy,Yb,$_,Oy,Zb,Jb,ex,tx,nx,Gm,ix,_0,H2,n3]}));class s3{constructor(e){Wt(this,"eventDisplay",void 0),Wt(this,"phoenixMenuRoot",new g2("Phoenix Menu","phoenix-menu")),Wt(this,"loaded",!1),Wt(this,"loadingProgress",0),Wt(this,"eventDataImportOptions",[Xh.JSON,Xh.IG]),this.eventDisplay=e}ngOnInit(){const e=new JU,t={eventDataLoader:e,presetViews:[new $h("Left View",[0,0,-12e3],[0,0,0],"left-cube"),new $h("Center View",[-500,12e3,0],[0,0,0],"top-cube"),new $h("Right View",[0,0,12e3],[0,0,0],"right-cube")],defaultView:[4e3,0,4e3,0,0,0],phoenixMenuRoot:this.phoenixMenuRoot};this.eventDisplay.init(t),this.eventDisplay.loadRootJSONGeometry("https://root.cern/js/files/geom/cms.json.gz","CMS Detector",void 0,10,!0),e.readIgArchive("assets/files/cms/Hto4l_120-130GeV.ig",n=>{const r=e.getAllEventsData(n);this.eventDisplay.parsePhoenixEvents(r)}),this.eventDisplay.getLoadingManager().addProgressListener(n=>this.loadingProgress=n),this.eventDisplay.getLoadingManager().addLoadListenerWithCheck(()=>this.loaded=!0)}}Wt(s3,"\u0275fac",function(e){return new(e||s3)(wt(Qa))}),Wt(s3,"\u0275cmp",Fr({type:s3,selectors:[["app-cms"]],decls:7,vars:4,consts:[[3,"loaded","progress"],[3,"eventDataImportOptions"],["logo","assets/images/cms.svg","url","https://home.cern/science/experiments/cms","tagline","CMS Experiment at LHC, CERN"],[3,"rootNode"],["id","eventDisplay"]],template:function(e,t){1&e&&Pr(0,"app-loader",0)(1,"app-nav")(2,"app-ui-menu",1)(3,"app-embed-menu")(4,"app-experiment-info",2)(5,"app-phoenix-menu",3)(6,"div",4),2&e&&(Cn("loaded",t.loaded)("progress",t.loadingProgress),Nn(2),Cn("eventDataImportOptions",t.eventDataImportOptions),Nn(3),Cn("rootNode",t.phoenixMenuRoot))},dependencies:[Vm,j_,Ry,$_,Gm,_0]}));class o3{constructor(e,t){Wt(this,"eventDisplay",void 0),Wt(this,"http",void 0),Wt(this,"hitsFile","assets/files/TrackML/event000001000-hits.csv"),Wt(this,"particlesFile","assets/files/TrackML/event000001000-particles.csv"),Wt(this,"truthFile","assets/files/TrackML/event000001000-truth.csv"),Wt(this,"filesProcessed",0),Wt(this,"numFiles",3),Wt(this,"trackMLLoader",void 0),Wt(this,"httpOptions",{headers:new Zg({}),responseType:"text"}),Wt(this,"phoenixMenuRoot",new g2("Phoenix Menu","phoenix-menu")),Wt(this,"loaded",!1),Wt(this,"loadingProgress",0),this.eventDisplay=e,this.http=t}ngOnInit(){this.trackMLLoader=new xae;const e={eventDataLoader:this.trackMLLoader,presetViews:[new $h("Right View",[0,0,6e3],[0,0,0],"right-cube"),new $h("Center View",[-500,1e3,0],[0,0,0],"top-cube"),new $h("Left View",[0,0,-6e3],[0,0,0],"left-cube")],defaultView:[4e3,0,4e3,0,0,0],phoenixMenuRoot:this.phoenixMenuRoot};this.eventDisplay.init(e),this.eventDisplay.loadOBJGeometry("assets/geometry/TrackML/strip_long_simplified.obj","Long Strip",15311419,void 0,!0),this.eventDisplay.loadOBJGeometry("assets/geometry/TrackML/pixel_simplified.obj","Pixel",14854632,void 0,!0),this.eventDisplay.loadOBJGeometry("assets/geometry/TrackML/strip_short_simplified.obj","Short Strip",3579797,void 0,!0),this.eventDisplay.loadOBJGeometry("assets/geometry/TrackML/beampipe_simplified.obj","Beampipe",8355711,void 0,!0),this.eventDisplay.loadOBJGeometry("assets/geometry/TrackML/pixel_support_tube_simplified.obj","PST",8107007,void 0,!0),this.loadTrackMLData(),this.eventDisplay.getLoadingManager().addProgressListener(t=>this.loadingProgress=t),this.eventDisplay.getLoadingManager().addLoadListenerWithCheck(()=>this.loaded=!0)}loadTrackMLData(){this.http.get(this.hitsFile,this.httpOptions).subscribe(e=>{this.loadHits(e),this.http.get(this.particlesFile,this.httpOptions).subscribe(t=>{this.loadParticles(t),this.http.get(this.truthFile,this.httpOptions).subscribe(n=>this.loadTruth(n))})})}loadHits(e){console.log("loading hits"),this.trackMLLoader.processHits(e),this.filesProcessed++,this.finishConversion()}loadParticles(e){console.log("loading particles"),this.trackMLLoader.processParticles(e),this.filesProcessed++,this.finishConversion()}loadTruth(e){console.log("loading truth"),this.trackMLLoader.processTruth(e),this.filesProcessed++,this.finishConversion()}finishConversion(){if(this.filesProcessed===this.numFiles){const e=this.trackMLLoader.getEventData("TrackMLEvent");this.eventDisplay.buildEventDataFromJSON(e)}}}Wt(o3,"\u0275fac",function(e){return new(e||o3)(wt(Qa),wt(lM))}),Wt(o3,"\u0275cmp",Fr({type:o3,selectors:[["app-trackml"]],decls:6,vars:3,consts:[[3,"loaded","progress"],[3,"rootNode"],["id","eventDisplay"]],template:function(e,t){1&e&&Pr(0,"app-loader",0)(1,"app-nav")(2,"app-ui-menu")(3,"app-embed-menu")(4,"app-phoenix-menu",1)(5,"div",2),2&e&&(Cn("loaded",t.loaded)("progress",t.loadingProgress),Nn(4),Cn("rootNode",t.phoenixMenuRoot))},dependencies:[Vm,j_,$_,Gm,_0]}));const Wpe=["*"];let UD;function a3(i){return function jpe(){if(void 0===UD&&(UD=null,typeof window<"u")){const i=window;void 0!==i.trustedTypes&&(UD=i.trustedTypes.createPolicy("angular#components",{createHTML:e=>e}))}return UD}()?.createHTML(i)||i}function cG(i){return Error(`Unable to find icon with the name "${i}"`)}function uG(i){return Error(`The URL provided to MatIconRegistry was not trusted as a resource URL via Angular's DomSanitizer. Attempted URL was "${i}".`)}function hG(i){return Error(`The literal provided to MatIconRegistry was not trusted as safe HTML by Angular's DomSanitizer. Attempted literal was "${i}".`)}class sx{constructor(e,t,n){this.url=e,this.svgText=t,this.options=n}}let zD=(()=>{class i{constructor(t,n,r,s){this._httpClient=t,this._sanitizer=n,this._errorHandler=s,this._svgIconConfigs=new Map,this._iconSetConfigs=new Map,this._cachedIconsByUrl=new Map,this._inProgressUrlFetches=new Map,this._fontCssClassesByAlias=new Map,this._resolvers=[],this._defaultFontSetClass=["material-icons","mat-ligature-font"],this._document=r}addSvgIcon(t,n,r){return this.addSvgIconInNamespace("",t,n,r)}addSvgIconLiteral(t,n,r){return this.addSvgIconLiteralInNamespace("",t,n,r)}addSvgIconInNamespace(t,n,r,s){return this._addSvgIconConfig(t,n,new sx(r,null,s))}addSvgIconResolver(t){return this._resolvers.push(t),this}addSvgIconLiteralInNamespace(t,n,r,s){const a=this._sanitizer.sanitize(ol.HTML,r);if(!a)throw hG(r);const l=a3(a);return this._addSvgIconConfig(t,n,new sx("",l,s))}addSvgIconSet(t,n){return this.addSvgIconSetInNamespace("",t,n)}addSvgIconSetLiteral(t,n){return this.addSvgIconSetLiteralInNamespace("",t,n)}addSvgIconSetInNamespace(t,n,r){return this._addSvgIconSetConfig(t,new sx(n,null,r))}addSvgIconSetLiteralInNamespace(t,n,r){const s=this._sanitizer.sanitize(ol.HTML,n);if(!s)throw hG(n);const a=a3(s);return this._addSvgIconSetConfig(t,new sx("",a,r))}registerFontClassAlias(t,n=t){return this._fontCssClassesByAlias.set(t,n),this}classNameForFontAlias(t){return this._fontCssClassesByAlias.get(t)||t}setDefaultFontSetClass(...t){return this._defaultFontSetClass=t,this}getDefaultFontSetClass(){return this._defaultFontSetClass}getSvgIconFromUrl(t){const n=this._sanitizer.sanitize(ol.RESOURCE_URL,t);if(!n)throw uG(t);const r=this._cachedIconsByUrl.get(n);return r?no(HD(r)):this._loadSvgIconFromConfig(new sx(t,null)).pipe(Dc(s=>this._cachedIconsByUrl.set(n,s)),et(s=>HD(s)))}getNamedSvgIcon(t,n=""){const r=dG(n,t);let s=this._svgIconConfigs.get(r);if(s)return this._getSvgFromConfig(s);if(s=this._getIconConfigFromResolvers(n,t),s)return this._svgIconConfigs.set(r,s),this._getSvgFromConfig(s);const a=this._iconSetConfigs.get(n);return a?this._getSvgFromIconSetConfigs(t,a):dw(cG(r))}ngOnDestroy(){this._resolvers=[],this._svgIconConfigs.clear(),this._iconSetConfigs.clear(),this._cachedIconsByUrl.clear()}_getSvgFromConfig(t){return t.svgText?no(HD(this._svgElementFromConfig(t))):this._loadSvgIconFromConfig(t).pipe(et(n=>HD(n)))}_getSvgFromIconSetConfigs(t,n){const r=this._extractIconWithNameFromAnySet(t,n);return r?no(r):sH(n.filter(a=>!a.svgText).map(a=>this._loadSvgIconSetFromConfig(a).pipe(B_(l=>{const d=`Loading icon set URL: ${this._sanitizer.sanitize(ol.RESOURCE_URL,a.url)} failed: ${l.message}`;return this._errorHandler.handleError(new Error(d)),no(null)})))).pipe(et(()=>{const a=this._extractIconWithNameFromAnySet(t,n);if(!a)throw cG(t);return a}))}_extractIconWithNameFromAnySet(t,n){for(let r=n.length-1;r>=0;r--){const s=n[r];if(s.svgText&&s.svgText.toString().indexOf(t)>-1){const a=this._svgElementFromConfig(s),l=this._extractSvgIconFromSet(a,t,s.options);if(l)return l}}return null}_loadSvgIconFromConfig(t){return this._fetchIcon(t).pipe(Dc(n=>t.svgText=n),et(()=>this._svgElementFromConfig(t)))}_loadSvgIconSetFromConfig(t){return t.svgText?no(null):this._fetchIcon(t).pipe(Dc(n=>t.svgText=n))}_extractSvgIconFromSet(t,n,r){const s=t.querySelector(`[id="${n}"]`);if(!s)return null;const a=s.cloneNode(!0);if(a.removeAttribute("id"),"svg"===a.nodeName.toLowerCase())return this._setSvgAttributes(a,r);if("symbol"===a.nodeName.toLowerCase())return this._setSvgAttributes(this._toSvgElement(a),r);const l=this._svgElementFromString(a3(""));return l.appendChild(a),this._setSvgAttributes(l,r)}_svgElementFromString(t){const n=this._document.createElement("DIV");n.innerHTML=t;const r=n.querySelector("svg");if(!r)throw Error(" tag not found");return r}_toSvgElement(t){const n=this._svgElementFromString(a3("")),r=t.attributes;for(let s=0;sa3(d)),AE(()=>this._inProgressUrlFetches.delete(a)),Pt());return this._inProgressUrlFetches.set(a,u),u}_addSvgIconConfig(t,n,r){return this._svgIconConfigs.set(dG(t,n),r),this}_addSvgIconSetConfig(t,n){const r=this._iconSetConfigs.get(t);return r?r.push(n):this._iconSetConfigs.set(t,[n]),this}_svgElementFromConfig(t){if(!t.svgElement){const n=this._svgElementFromString(t.svgText);this._setSvgAttributes(n,t.options),t.svgElement=n}return t.svgElement}_getIconConfigFromResolvers(t,n){for(let r=0;re?e.pathname+e.search:""}}}),fG=["clip-path","color-profile","src","cursor","fill","filter","marker","marker-start","marker-mid","marker-end","mask","stroke"],tAe=fG.map(i=>`[${i}]`).join(", "),nAe=/^url\(['"]?#(.*?)['"]?\)$/;let iAe=(()=>{class i extends Ype{get inline(){return this._inline}set inline(t){this._inline=pa(t)}get svgIcon(){return this._svgIcon}set svgIcon(t){t!==this._svgIcon&&(t?this._updateSvgIcon(t):this._svgIcon&&this._clearSvgElement(),this._svgIcon=t)}get fontSet(){return this._fontSet}set fontSet(t){const n=this._cleanupFontValue(t);n!==this._fontSet&&(this._fontSet=n,this._updateFontIconClasses())}get fontIcon(){return this._fontIcon}set fontIcon(t){const n=this._cleanupFontValue(t);n!==this._fontIcon&&(this._fontIcon=n,this._updateFontIconClasses())}constructor(t,n,r,s,a,l){super(t),this._iconRegistry=n,this._location=s,this._errorHandler=a,this._inline=!1,this._previousFontSetClass=[],this._currentIconFetch=De.EMPTY,l&&(l.color&&(this.color=this.defaultColor=l.color),l.fontSet&&(this.fontSet=l.fontSet)),r||t.nativeElement.setAttribute("aria-hidden","true")}_splitIconName(t){if(!t)return["",""];const n=t.split(":");switch(n.length){case 1:return["",n[0]];case 2:return n;default:throw Error(`Invalid icon name: "${t}"`)}}ngOnInit(){this._updateFontIconClasses()}ngAfterViewChecked(){const t=this._elementsWithExternalReferences;if(t&&t.size){const n=this._location.getPathname();n!==this._previousPath&&(this._previousPath=n,this._prependPathToReferences(n))}}ngOnDestroy(){this._currentIconFetch.unsubscribe(),this._elementsWithExternalReferences&&this._elementsWithExternalReferences.clear()}_usingFontIcon(){return!this.svgIcon}_setSvgElement(t){this._clearSvgElement();const n=this._location.getPathname();this._previousPath=n,this._cacheChildrenWithExternalReferences(t),this._prependPathToReferences(n),this._elementRef.nativeElement.appendChild(t)}_clearSvgElement(){const t=this._elementRef.nativeElement;let n=t.childNodes.length;for(this._elementsWithExternalReferences&&this._elementsWithExternalReferences.clear();n--;){const r=t.childNodes[n];(1!==r.nodeType||"svg"===r.nodeName.toLowerCase())&&r.remove()}}_updateFontIconClasses(){if(!this._usingFontIcon())return;const t=this._elementRef.nativeElement,n=(this.fontSet?this._iconRegistry.classNameForFontAlias(this.fontSet).split(/ +/):this._iconRegistry.getDefaultFontSetClass()).filter(r=>r.length>0);this._previousFontSetClass.forEach(r=>t.classList.remove(r)),n.forEach(r=>t.classList.add(r)),this._previousFontSetClass=n,this.fontIcon!==this._previousFontIconClass&&!n.includes("mat-ligature-font")&&(this._previousFontIconClass&&t.classList.remove(this._previousFontIconClass),this.fontIcon&&t.classList.add(this.fontIcon),this._previousFontIconClass=this.fontIcon)}_cleanupFontValue(t){return"string"==typeof t?t.trim().split(" ")[0]:t}_prependPathToReferences(t){const n=this._elementsWithExternalReferences;n&&n.forEach((r,s)=>{r.forEach(a=>{s.setAttribute(a.name,`url('${t}#${a.value}')`)})})}_cacheChildrenWithExternalReferences(t){const n=t.querySelectorAll(tAe),r=this._elementsWithExternalReferences=this._elementsWithExternalReferences||new Map;for(let s=0;s{const l=n[s],u=l.getAttribute(a),d=u?u.match(nAe):null;if(d){let p=r.get(l);p||(p=[],r.set(l,p)),p.push({name:a,value:d[1]})}})}_updateSvgIcon(t){if(this._svgNamespace=null,this._svgName=null,this._currentIconFetch.unsubscribe(),t){const[n,r]=this._splitIconName(t);n&&(this._svgNamespace=n),r&&(this._svgName=r),this._currentIconFetch=this._iconRegistry.getNamedSvgIcon(r,n).pipe(nu(1)).subscribe(s=>this._setSvgElement(s),s=>{this._errorHandler.handleError(new Error(`Error retrieving icon ${n}:${r}! ${s.message}`))})}}}return i.\u0275fac=function(t){return new(t||i)(wt(Cs),wt(zD),Oh("aria-hidden"),wt(Jpe),wt(vd),wt(Zpe,8))},i.\u0275cmp=Fr({type:i,selectors:[["mat-icon"]],hostAttrs:["role","img",1,"mat-icon","notranslate"],hostVars:8,hostBindings:function(t,n){2&t&&(Ea("data-mat-icon-type",n._usingFontIcon()?"font":"svg")("data-mat-icon-name",n._svgName||n.fontIcon)("data-mat-icon-namespace",n._svgNamespace||n.fontSet)("fontIcon",n._usingFontIcon()?n.fontIcon:null),jo("mat-icon-inline",n.inline)("mat-icon-no-color","primary"!==n.color&&"accent"!==n.color&&"warn"!==n.color))},inputs:{color:"color",inline:"inline",svgIcon:"svgIcon",fontSet:"fontSet",fontIcon:"fontIcon"},exportAs:["matIcon"],features:[As],ngContentSelectors:Wpe,decls:1,vars:0,template:function(t,n){1&t&&(fh(),uu(0))},styles:[".mat-icon{-webkit-user-select:none;user-select:none;background-repeat:no-repeat;display:inline-block;fill:currentColor;height:24px;width:24px;overflow:hidden}.mat-icon.mat-icon-inline{font-size:inherit;height:inherit;line-height:inherit;width:inherit}.mat-icon.mat-ligature-font[fontIcon]::before{content:attr(fontIcon)}[dir=rtl] .mat-icon-rtl-mirror{transform:scale(-1, 1)}.mat-form-field:not(.mat-form-field-appearance-legacy) .mat-form-field-prefix .mat-icon,.mat-form-field:not(.mat-form-field-appearance-legacy) .mat-form-field-suffix .mat-icon{display:block}.mat-form-field:not(.mat-form-field-appearance-legacy) .mat-form-field-prefix .mat-icon-button .mat-icon,.mat-form-field:not(.mat-form-field-appearance-legacy) .mat-form-field-suffix .mat-icon-button .mat-icon{margin:auto}"],encapsulation:2,changeDetection:0}),i})(),rAe=(()=>{class i{}return i.\u0275fac=function(t){return new(t||i)},i.\u0275mod=ia({type:i}),i.\u0275inj=ft({imports:[Pu,Pu]}),i})();function yO(i){return!!i&&(i instanceof de||ze(i.lift)&&ze(i.subscribe))}class sAe{constructor(){this.expansionModel=new pfe(!0)}toggle(e){this.expansionModel.toggle(this._trackByValue(e))}expand(e){this.expansionModel.select(this._trackByValue(e))}collapse(e){this.expansionModel.deselect(this._trackByValue(e))}isExpanded(e){return this.expansionModel.isSelected(this._trackByValue(e))}toggleDescendants(e){this.expansionModel.isSelected(this._trackByValue(e))?this.collapseDescendants(e):this.expandDescendants(e)}collapseAll(){this.expansionModel.clear()}expandDescendants(e){let t=[e];t.push(...this.getDescendants(e)),this.expansionModel.select(...t.map(n=>this._trackByValue(n)))}collapseDescendants(e){let t=[e];t.push(...this.getDescendants(e)),this.expansionModel.deselect(...t.map(n=>this._trackByValue(n)))}_trackByValue(e){return this.trackBy?this.trackBy(e):e}}class oAe extends sAe{constructor(e,t){super(),this.getChildren=e,this.options=t,this.options&&(this.trackBy=this.options.trackBy)}expandAll(){this.expansionModel.clear();const e=this.dataNodes.reduce((t,n)=>[...t,...this.getDescendants(n),n],[]);this.expansionModel.select(...e.map(t=>this._trackByValue(t)))}getDescendants(e){const t=[];return this._getDescendants(t,e),t.splice(1)}_getDescendants(e,t){e.push(t);const n=this.getChildren(t);Array.isArray(n)?n.forEach(r=>this._getDescendants(e,r)):yO(n)&&n.pipe(nu(1),tu(Boolean)).subscribe(r=>{for(const s of r)this._getDescendants(e,s)})}}const VD=new cr("CDK_TREE_NODE_OUTLET_NODE");let V2=(()=>{class i{constructor(t,n){this.viewContainer=t,this._node=n}}return i.\u0275fac=function(t){return new(t||i)(wt(Mu),wt(VD,8))},i.\u0275dir=Oi({type:i,selectors:[["","cdkTreeNodeOutlet",""]]}),i})();class aAe{constructor(e){this.$implicit=e}}let l3=(()=>{class i{constructor(t){this.template=t}}return i.\u0275fac=function(t){return new(t||i)(wt(gh))},i.\u0275dir=Oi({type:i,selectors:[["","cdkTreeNodeDef",""]],inputs:{when:["cdkTreeNodeDefWhen","when"]}}),i})(),y0=(()=>{class i{get dataSource(){return this._dataSource}set dataSource(t){this._dataSource!==t&&this._switchDataSource(t)}constructor(t,n){this._differs=t,this._changeDetectorRef=n,this._onDestroy=new D,this._levels=new Map,this.viewChange=new rp({start:0,end:Number.MAX_VALUE})}ngOnInit(){this._dataDiffer=this._differs.find([]).create(this.trackBy)}ngOnDestroy(){this._nodeOutlet.viewContainer.clear(),this.viewChange.complete(),this._onDestroy.next(),this._onDestroy.complete(),this._dataSource&&"function"==typeof this._dataSource.disconnect&&this.dataSource.disconnect(this),this._dataSubscription&&(this._dataSubscription.unsubscribe(),this._dataSubscription=null)}ngAfterContentChecked(){const t=this._nodeDefs.filter(n=>!n.when);this._defaultNodeDef=t[0],this.dataSource&&this._nodeDefs&&!this._dataSubscription&&this._observeRenderChanges()}_switchDataSource(t){this._dataSource&&"function"==typeof this._dataSource.disconnect&&this.dataSource.disconnect(this),this._dataSubscription&&(this._dataSubscription.unsubscribe(),this._dataSubscription=null),t||this._nodeOutlet.viewContainer.clear(),this._dataSource=t,this._nodeDefs&&this._observeRenderChanges()}_observeRenderChanges(){let t;!function ffe(i){return i&&"function"==typeof i.connect&&!(i instanceof gI)}(this._dataSource)?yO(this._dataSource)?t=this._dataSource:Array.isArray(this._dataSource)&&(t=no(this._dataSource)):t=this._dataSource.connect(this),t&&(this._dataSubscription=t.pipe(ql(this._onDestroy)).subscribe(n=>this.renderNodeChanges(n)))}renderNodeChanges(t,n=this._dataDiffer,r=this._nodeOutlet.viewContainer,s){const a=n.diff(t);a&&(a.forEachOperation((l,u,d)=>{if(null==l.previousIndex)this.insertNode(t[d],d,r,s);else if(null==d)r.remove(u),this._levels.delete(l.item);else{const p=r.get(u);r.move(p,d)}}),this._changeDetectorRef.detectChanges())}_getNodeDef(t,n){return 1===this._nodeDefs.length?this._nodeDefs.first:this._nodeDefs.find(s=>s.when&&s.when(n,t))||this._defaultNodeDef}insertNode(t,n,r,s){const a=this._getNodeDef(t,n),l=new aAe(t);l.level=this.treeControl.getLevel?this.treeControl.getLevel(t):typeof s<"u"&&this._levels.has(s)?this._levels.get(s)+1:0,this._levels.set(t,l.level),(r||this._nodeOutlet.viewContainer).createEmbeddedView(a.template,l,n),qm.mostRecentTreeNode&&(qm.mostRecentTreeNode.data=t)}}return i.\u0275fac=function(t){return new(t||i)(wt(Gv),wt(pl))},i.\u0275cmp=Fr({type:i,selectors:[["cdk-tree"]],contentQueries:function(t,n,r){if(1&t&&Qh(r,l3,5),2&t){let s;so(s=oo())&&(n._nodeDefs=s)}},viewQuery:function(t,n){if(1&t&&la(V2,7),2&t){let r;so(r=oo())&&(n._nodeOutlet=r.first)}},hostAttrs:["role","tree",1,"cdk-tree"],inputs:{dataSource:"dataSource",treeControl:"treeControl",trackBy:"trackBy"},exportAs:["cdkTree"],decls:1,vars:0,consts:[["cdkTreeNodeOutlet",""]],template:function(t,n){1&t&&Qg(0,0)},dependencies:[V2],encapsulation:2}),i})(),qm=(()=>{class i{get role(){return"treeitem"}set role(t){this._elementRef.nativeElement.setAttribute("role",t)}get data(){return this._data}set data(t){t!==this._data&&(this._data=t,this._setRoleFromData(),this._dataChanges.next())}get isExpanded(){return this._tree.treeControl.isExpanded(this._data)}get level(){return this._tree.treeControl.getLevel?this._tree.treeControl.getLevel(this._data):this._parentNodeAriaLevel}constructor(t,n){this._elementRef=t,this._tree=n,this._destroyed=new D,this._dataChanges=new D,i.mostRecentTreeNode=this,this.role="treeitem"}ngOnInit(){this._parentNodeAriaLevel=function lAe(i){let e=i.parentElement;for(;e&&!cAe(e);)e=e.parentElement;return e?e.classList.contains("cdk-nested-tree-node")?gc(e.getAttribute("aria-level")):0:-1}(this._elementRef.nativeElement),this._elementRef.nativeElement.setAttribute("aria-level",`${this.level+1}`)}ngOnDestroy(){i.mostRecentTreeNode===this&&(i.mostRecentTreeNode=null),this._dataChanges.complete(),this._destroyed.next(),this._destroyed.complete()}focus(){this._elementRef.nativeElement.focus()}_setRoleFromData(){this.role="treeitem"}}return i.mostRecentTreeNode=null,i.\u0275fac=function(t){return new(t||i)(wt(Cs),wt(y0))},i.\u0275dir=Oi({type:i,selectors:[["cdk-tree-node"]],hostAttrs:[1,"cdk-tree-node"],hostVars:1,hostBindings:function(t,n){2&t&&Ea("aria-expanded",n.isExpanded)},inputs:{role:"role"},exportAs:["cdkTreeNode"]}),i})();function cAe(i){const e=i.classList;return!(!e?.contains("cdk-nested-tree-node")&&!e?.contains("cdk-tree"))}let GD=(()=>{class i extends qm{constructor(t,n,r){super(t,n),this._differs=r}ngAfterContentInit(){this._dataDiffer=this._differs.find([]).create(this._tree.trackBy);const t=this._tree.treeControl.getChildren(this.data);Array.isArray(t)?this.updateChildrenNodes(t):yO(t)&&t.pipe(ql(this._destroyed)).subscribe(n=>this.updateChildrenNodes(n)),this.nodeOutlet.changes.pipe(ql(this._destroyed)).subscribe(()=>this.updateChildrenNodes())}ngOnInit(){super.ngOnInit()}ngOnDestroy(){this._clear(),super.ngOnDestroy()}updateChildrenNodes(t){const n=this._getNodeOutlet();t&&(this._children=t),n&&this._children?this._tree.renderNodeChanges(this._children,this._dataDiffer,n.viewContainer,this._data):this._dataDiffer.diff([])}_clear(){const t=this._getNodeOutlet();t&&(t.viewContainer.clear(),this._dataDiffer.diff([]))}_getNodeOutlet(){const t=this.nodeOutlet;return t&&t.find(n=>!n._node||n._node===this)}}return i.\u0275fac=function(t){return new(t||i)(wt(Cs),wt(y0),wt(Gv))},i.\u0275dir=Oi({type:i,selectors:[["cdk-nested-tree-node"]],contentQueries:function(t,n,r){if(1&t&&Qh(r,V2,5),2&t){let s;so(s=oo())&&(n.nodeOutlet=s)}},hostAttrs:[1,"cdk-nested-tree-node"],inputs:{role:"role",disabled:"disabled",tabIndex:"tabIndex"},exportAs:["cdkNestedTreeNode"],features:[Po([{provide:qm,useExisting:i},{provide:VD,useExisting:i}]),As]}),i})(),qD=(()=>{class i{get recursive(){return this._recursive}set recursive(t){this._recursive=pa(t)}constructor(t,n){this._tree=t,this._treeNode=n,this._recursive=!1}_toggle(t){this.recursive?this._tree.treeControl.toggleDescendants(this._treeNode.data):this._tree.treeControl.toggle(this._treeNode.data),t.stopPropagation()}}return i.\u0275fac=function(t){return new(t||i)(wt(y0),wt(qm))},i.\u0275dir=Oi({type:i,selectors:[["","cdkTreeNodeToggle",""]],hostBindings:function(t,n){1&t&&Fi("click",function(s){return n._toggle(s)})},inputs:{recursive:["cdkTreeNodeToggleRecursive","recursive"]}}),i})(),hAe=(()=>{class i{}return i.\u0275fac=function(t){return new(t||i)},i.\u0275mod=ia({type:i}),i.\u0275inj=ft({}),i})();function dAe(i,e){}const fAe=function(i){return{animationDuration:i}},pAe=function(i,e){return{value:i,params:e}};function AAe(i,e){1&i&&uu(0)}const pG=["*"],mAe=["tabListContainer"],gAe=["tabList"],_Ae=["tabListInner"],yAe=["nextPaginator"],vAe=["previousPaginator"],bAe=["tabBodyWrapper"],xAe=["tabHeader"];function wAe(i,e){}function CAe(i,e){1&i&&qr(0,wAe,0,0,"ng-template",14),2&i&&Cn("cdkPortalOutlet",Mr().$implicit.templateLabel)}function MAe(i,e){1&i&&dr(0),2&i&&ph(Mr().$implicit.textLabel)}function SAe(i,e){if(1&i){const t=Za();Zt(0,"div",6,7),Fi("click",function(){const r=ks(t),s=r.$implicit,a=r.index,l=Mr(),u=bl(1);return ys(l._handleClick(s,u,a))})("cdkFocusChange",function(r){const a=ks(t).index;return ys(Mr()._tabFocusChanged(r,a))}),Pr(2,"span",8)(3,"div",9),Zt(4,"span",10)(5,"span",11),qr(6,CAe,1,1,"ng-template",12),qr(7,MAe,1,1,"ng-template",null,13,NT),un()()()}if(2&i){const t=e.$implicit,n=e.index,r=bl(1),s=bl(8),a=Mr();jo("mdc-tab--active",a.selectedIndex===n),Cn("id",a._getTabLabelId(n))("ngClass",t.labelClass)("disabled",t.disabled)("fitInkBarToContent",a.fitInkBarToContent),Ea("tabIndex",a._getTabIndex(n))("aria-posinset",n+1)("aria-setsize",a._tabs.length)("aria-controls",a._getTabContentId(n))("aria-selected",a.selectedIndex===n)("aria-label",t.ariaLabel||null)("aria-labelledby",!t.ariaLabel&&t.ariaLabelledby?t.ariaLabelledby:null),Nn(3),Cn("matRippleTrigger",r)("matRippleDisabled",t.disabled||a.disableRipple),Nn(3),Cn("ngIf",t.templateLabel)("ngIfElse",s)}}function TAe(i,e){if(1&i){const t=Za();Zt(0,"mat-tab-body",15),Fi("_onCentered",function(){return ks(t),ys(Mr()._removeTabBodyWrapperHeight())})("_onCentering",function(r){return ks(t),ys(Mr()._setTabBodyWrapperHeight(r))}),un()}if(2&i){const t=e.$implicit,n=e.index,r=Mr();jo("mat-mdc-tab-body-active",r.selectedIndex===n),Cn("id",r._getTabContentId(n))("ngClass",t.bodyClass)("content",t.content)("position",t.position)("origin",t.origin)("animationDuration",r.animationDuration)("preserveContent",r.preserveContent),Ea("tabindex",null!=r.contentTabIndex&&r.selectedIndex===n?r.contentTabIndex:null)("aria-labelledby",r._getTabLabelId(n))}}const EAe={translateTab:FS("translateTab",[Q_("center, void, left-origin-center, right-origin-center",Kh({transform:"none"})),Q_("left",Kh({transform:"translate3d(-100%, 0, 0)",minHeight:"1px",visibility:"hidden"})),Q_("right",Kh({transform:"translate3d(100%, 0, 0)",minHeight:"1px",visibility:"hidden"})),g0("* => left, * => right, left => center, right => center",m0("{{animationDuration}} cubic-bezier(0.35, 0, 0.25, 1)")),g0("void => left-origin-center",[Kh({transform:"translate3d(-100%, 0, 0)",visibility:"hidden"}),m0("{{animationDuration}} cubic-bezier(0.35, 0, 0.25, 1)")]),g0("void => right-origin-center",[Kh({transform:"translate3d(100%, 0, 0)",visibility:"hidden"}),m0("{{animationDuration}} cubic-bezier(0.35, 0, 0.25, 1)")])])};let DAe=(()=>{class i extends M2{constructor(t,n,r,s){super(t,n,s),this._host=r,this._centeringSub=De.EMPTY,this._leavingSub=De.EMPTY}ngOnInit(){super.ngOnInit(),this._centeringSub=this._host._beforeCentering.pipe(op(this._host._isCenterPosition(this._host._position))).subscribe(t=>{t&&!this.hasAttached()&&this.attach(this._host._content)}),this._leavingSub=this._host._afterLeavingCenter.subscribe(()=>{this._host.preserveContent||this.detach()})}ngOnDestroy(){super.ngOnDestroy(),this._centeringSub.unsubscribe(),this._leavingSub.unsubscribe()}}return i.\u0275fac=function(t){return new(t||i)(wt(Gd),wt(Mu),wt(ar(()=>AG)),wt(Zo))},i.\u0275dir=Oi({type:i,selectors:[["","matTabBodyHost",""]],features:[As]}),i})(),BAe=(()=>{class i{set position(t){this._positionIndex=t,this._computePositionAnimationState()}constructor(t,n,r){this._elementRef=t,this._dir=n,this._dirChangeSubscription=De.EMPTY,this._translateTabComplete=new D,this._onCentering=new Ws,this._beforeCentering=new Ws,this._afterLeavingCenter=new Ws,this._onCentered=new Ws(!0),this.animationDuration="500ms",this.preserveContent=!1,n&&(this._dirChangeSubscription=n.change.subscribe(s=>{this._computePositionAnimationState(s),r.markForCheck()})),this._translateTabComplete.pipe(oD((s,a)=>s.fromState===a.fromState&&s.toState===a.toState)).subscribe(s=>{this._isCenterPosition(s.toState)&&this._isCenterPosition(this._position)&&this._onCentered.emit(),this._isCenterPosition(s.fromState)&&!this._isCenterPosition(this._position)&&this._afterLeavingCenter.emit()})}ngOnInit(){"center"==this._position&&null!=this.origin&&(this._position=this._computePositionFromOrigin(this.origin))}ngOnDestroy(){this._dirChangeSubscription.unsubscribe(),this._translateTabComplete.complete()}_onTranslateTabStarted(t){const n=this._isCenterPosition(t.toState);this._beforeCentering.emit(n),n&&this._onCentering.emit(this._elementRef.nativeElement.clientHeight)}_getLayoutDirection(){return this._dir&&"rtl"===this._dir.value?"rtl":"ltr"}_isCenterPosition(t){return"center"==t||"left-origin-center"==t||"right-origin-center"==t}_computePositionAnimationState(t=this._getLayoutDirection()){this._position=this._positionIndex<0?"ltr"==t?"left":"right":this._positionIndex>0?"ltr"==t?"right":"left":"center"}_computePositionFromOrigin(t){const n=this._getLayoutDirection();return"ltr"==n&&t<=0||"rtl"==n&&t>0?"left-origin-center":"right-origin-center"}}return i.\u0275fac=function(t){return new(t||i)(wt(Cs),wt(Ed,8),wt(pl))},i.\u0275dir=Oi({type:i,inputs:{_content:["content","_content"],origin:"origin",animationDuration:"animationDuration",preserveContent:"preserveContent",position:"position"},outputs:{_onCentering:"_onCentering",_beforeCentering:"_beforeCentering",_afterLeavingCenter:"_afterLeavingCenter",_onCentered:"_onCentered"}}),i})(),AG=(()=>{class i extends BAe{constructor(t,n,r){super(t,n,r)}}return i.\u0275fac=function(t){return new(t||i)(wt(Cs),wt(Ed,8),wt(pl))},i.\u0275cmp=Fr({type:i,selectors:[["mat-tab-body"]],viewQuery:function(t,n){if(1&t&&la(M2,5),2&t){let r;so(r=oo())&&(n._portalHost=r.first)}},hostAttrs:[1,"mat-mdc-tab-body"],features:[As],decls:3,vars:6,consts:[["cdkScrollable","",1,"mat-mdc-tab-body-content"],["content",""],["matTabBodyHost",""]],template:function(t,n){1&t&&(Zt(0,"div",0,1),Fi("@translateTab.start",function(s){return n._onTranslateTabStarted(s)})("@translateTab.done",function(s){return n._translateTabComplete.next(s)}),qr(2,dAe,0,0,"ng-template",2),un()),2&t&&Cn("@translateTab",xR(3,pAe,n._position,$d(1,fAe,n.animationDuration)))},dependencies:[DAe],styles:['.mat-mdc-tab-body{top:0;left:0;right:0;bottom:0;position:absolute;display:block;overflow:hidden;outline:0;flex-basis:100%}.mat-mdc-tab-body.mat-mdc-tab-body-active{position:relative;overflow-x:hidden;overflow-y:auto;z-index:1;flex-grow:1}.mat-mdc-tab-group.mat-mdc-tab-group-dynamic-height .mat-mdc-tab-body.mat-mdc-tab-body-active{overflow-y:hidden}.mat-mdc-tab-body-content{height:100%;overflow:auto}.mat-mdc-tab-group-dynamic-height .mat-mdc-tab-body-content{overflow:hidden}.mat-mdc-tab-body-content[style*="visibility: hidden"]{display:none}'],encapsulation:2,data:{animation:[EAe.translateTab]}}),i})();const IAe=new cr("MatTabContent");let PAe=(()=>{class i{constructor(t){this.template=t}}return i.\u0275fac=function(t){return new(t||i)(wt(gh))},i.\u0275dir=Oi({type:i,selectors:[["","matTabContent",""]],features:[Po([{provide:IAe,useExisting:i}])]}),i})();const kAe=new cr("MatTabLabel"),mG=new cr("MAT_TAB");let FAe=(()=>{class i extends qle{constructor(t,n,r){super(t,n),this._closestTab=r}}return i.\u0275fac=function(t){return new(t||i)(wt(gh),wt(Mu),wt(mG,8))},i.\u0275dir=Oi({type:i,selectors:[["","mat-tab-label",""],["","matTabLabel",""]],features:[Po([{provide:kAe,useExisting:i}]),As]}),i})();const bO="mdc-tab-indicator--active",gG="mdc-tab-indicator--no-transition";class OAe{constructor(e){this._items=e}hide(){this._items.forEach(e=>e.deactivateInkBar())}alignToElement(e){const t=this._items.find(r=>r.elementRef.nativeElement===e),n=this._currentItem;if(n?.deactivateInkBar(),t){const r=n?.elementRef.nativeElement.getBoundingClientRect?.();t.activateInkBar(r),this._currentItem=t}}}function RAe(i){return class extends i{constructor(...e){super(...e),this._fitToContent=!1}get fitInkBarToContent(){return this._fitToContent}set fitInkBarToContent(e){const t=pa(e);this._fitToContent!==t&&(this._fitToContent=t,this._inkBarElement&&this._appendInkBarElement())}activateInkBar(e){const t=this.elementRef.nativeElement;if(!e||!t.getBoundingClientRect||!this._inkBarContentElement)return void t.classList.add(bO);const n=t.getBoundingClientRect(),r=e.width/n.width,s=e.left-n.left;t.classList.add(gG),this._inkBarContentElement.style.setProperty("transform",`translateX(${s}px) scaleX(${r})`),t.getBoundingClientRect(),t.classList.remove(gG),t.classList.add(bO),this._inkBarContentElement.style.setProperty("transform","")}deactivateInkBar(){this.elementRef.nativeElement.classList.remove(bO)}ngOnInit(){this._createInkBarElement()}ngOnDestroy(){this._inkBarElement?.remove(),this._inkBarElement=this._inkBarContentElement=null}_createInkBarElement(){const e=this.elementRef.nativeElement.ownerDocument||document;this._inkBarElement=e.createElement("span"),this._inkBarContentElement=e.createElement("span"),this._inkBarElement.className="mdc-tab-indicator",this._inkBarContentElement.className="mdc-tab-indicator__content mdc-tab-indicator__content--underline",this._inkBarElement.appendChild(this._inkBarContentElement),this._appendInkBarElement()}_appendInkBarElement(){(this._fitToContent?this.elementRef.nativeElement.querySelector(".mdc-tab__content"):this.elementRef.nativeElement).appendChild(this._inkBarElement)}}}const NAe=Pb(class{}),UAe=RAe((()=>{class i extends NAe{constructor(t){super(),this.elementRef=t}focus(){this.elementRef.nativeElement.focus()}getOffsetLeft(){return this.elementRef.nativeElement.offsetLeft}getOffsetWidth(){return this.elementRef.nativeElement.offsetWidth}}return i.\u0275fac=function(t){return new(t||i)(wt(Cs))},i.\u0275dir=Oi({type:i,features:[As]}),i})());let _G=(()=>{class i extends UAe{}return i.\u0275fac=function(){let e;return function(n){return(e||(e=Ka(i)))(n||i)}}(),i.\u0275dir=Oi({type:i,selectors:[["","matTabLabelWrapper",""]],hostVars:3,hostBindings:function(t,n){2&t&&(Ea("aria-disabled",!!n.disabled),jo("mat-mdc-tab-disabled",n.disabled))},inputs:{disabled:"disabled",fitInkBarToContent:"fitInkBarToContent"},features:[As]}),i})();const zAe=Pb(class{}),yG=new cr("MAT_TAB_GROUP");let HAe=(()=>{class i extends zAe{get content(){return this._contentPortal}constructor(t,n){super(),this._viewContainerRef=t,this._closestTabGroup=n,this.textLabel="",this._contentPortal=null,this._stateChanges=new D,this.position=null,this.origin=null,this.isActive=!1}ngOnChanges(t){(t.hasOwnProperty("textLabel")||t.hasOwnProperty("disabled"))&&this._stateChanges.next()}ngOnDestroy(){this._stateChanges.complete()}ngOnInit(){this._contentPortal=new PS(this._explicitContent||this._implicitContent,this._viewContainerRef)}_setTemplateLabelInput(t){t&&t._closestTab===this&&(this._templateLabel=t)}}return i.\u0275fac=function(t){return new(t||i)(wt(Mu),wt(yG,8))},i.\u0275dir=Oi({type:i,viewQuery:function(t,n){if(1&t&&la(gh,7),2&t){let r;so(r=oo())&&(n._implicitContent=r.first)}},inputs:{textLabel:["label","textLabel"],ariaLabel:["aria-label","ariaLabel"],ariaLabelledby:["aria-labelledby","ariaLabelledby"],labelClass:"labelClass",bodyClass:"bodyClass"},features:[As,bc]}),i})(),vG=(()=>{class i extends HAe{get templateLabel(){return this._templateLabel}set templateLabel(t){this._setTemplateLabelInput(t)}}return i.\u0275fac=function(){let e;return function(n){return(e||(e=Ka(i)))(n||i)}}(),i.\u0275cmp=Fr({type:i,selectors:[["mat-tab"]],contentQueries:function(t,n,r){if(1&t&&(Qh(r,PAe,7,gh),Qh(r,FAe,5)),2&t){let s;so(s=oo())&&(n._explicitContent=s.first),so(s=oo())&&(n.templateLabel=s.first)}},inputs:{disabled:"disabled"},exportAs:["matTab"],features:[Po([{provide:mG,useExisting:i}]),As],ngContentSelectors:pG,decls:1,vars:0,template:function(t,n){1&t&&(fh(),qr(0,AAe,1,0,"ng-template"))},encapsulation:2}),i})();const bG=p0({passive:!0});let qAe=(()=>{class i{get disablePagination(){return this._disablePagination}set disablePagination(t){this._disablePagination=pa(t)}get selectedIndex(){return this._selectedIndex}set selectedIndex(t){t=gc(t),this._selectedIndex!=t&&(this._selectedIndexChanged=!0,this._selectedIndex=t,this._keyManager&&this._keyManager.updateActiveItem(t))}constructor(t,n,r,s,a,l,u){this._elementRef=t,this._changeDetectorRef=n,this._viewportRuler=r,this._dir=s,this._ngZone=a,this._platform=l,this._animationMode=u,this._scrollDistance=0,this._selectedIndexChanged=!1,this._destroyed=new D,this._showPaginationControls=!1,this._disableScrollAfter=!0,this._disableScrollBefore=!0,this._stopScrolling=new D,this._disablePagination=!1,this._selectedIndex=0,this.selectFocusedIndex=new Ws,this.indexFocused=new Ws,a.runOutsideAngular(()=>{Ob(t.nativeElement,"mouseleave").pipe(ql(this._destroyed)).subscribe(()=>{this._stopInterval()})})}ngAfterViewInit(){Ob(this._previousPaginator.nativeElement,"touchstart",bG).pipe(ql(this._destroyed)).subscribe(()=>{this._handlePaginatorPress("before")}),Ob(this._nextPaginator.nativeElement,"touchstart",bG).pipe(ql(this._destroyed)).subscribe(()=>{this._handlePaginatorPress("after")})}ngAfterContentInit(){const t=this._dir?this._dir.change:no("ltr"),n=this._viewportRuler.change(150),r=()=>{this.updatePagination(),this._alignInkBarToSelectedTab()};this._keyManager=new pz(this._items).withHorizontalOrientation(this._getLayoutDirection()).withHomeAndEnd().withWrap().skipPredicate(()=>!1),this._keyManager.updateActiveItem(this._selectedIndex),this._ngZone.onStable.pipe(nu(1)).subscribe(r),It(t,n,this._items.changes,this._itemsResized()).pipe(ql(this._destroyed)).subscribe(()=>{this._ngZone.run(()=>{Promise.resolve().then(()=>{this._scrollDistance=Math.max(0,Math.min(this._getMaxScrollDistance(),this._scrollDistance)),r()})}),this._keyManager.withHorizontalOrientation(this._getLayoutDirection())}),this._keyManager.change.subscribe(s=>{this.indexFocused.emit(s),this._setTabFocus(s)})}_itemsResized(){return"function"!=typeof ResizeObserver?Sa:this._items.changes.pipe(op(this._items),sp(t=>new de(n=>this._ngZone.runOutsideAngular(()=>{const r=new ResizeObserver(s=>n.next(s));return t.forEach(s=>r.observe(s.elementRef.nativeElement)),()=>{r.disconnect()}}))),_F(1),tu(t=>t.some(n=>n.contentRect.width>0&&n.contentRect.height>0)))}ngAfterContentChecked(){this._tabLabelCount!=this._items.length&&(this.updatePagination(),this._tabLabelCount=this._items.length,this._changeDetectorRef.markForCheck()),this._selectedIndexChanged&&(this._scrollToLabel(this._selectedIndex),this._checkScrollingControls(),this._alignInkBarToSelectedTab(),this._selectedIndexChanged=!1,this._changeDetectorRef.markForCheck()),this._scrollDistanceChanged&&(this._updateTabScrollPosition(),this._scrollDistanceChanged=!1,this._changeDetectorRef.markForCheck())}ngOnDestroy(){this._keyManager?.destroy(),this._destroyed.next(),this._destroyed.complete(),this._stopScrolling.complete()}_handleKeydown(t){if(!v2(t))switch(t.keyCode){case 13:case 32:if(this.focusIndex!==this.selectedIndex){const n=this._items.get(this.focusIndex);n&&!n.disabled&&(this.selectFocusedIndex.emit(this.focusIndex),this._itemSelected(t))}break;default:this._keyManager.onKeydown(t)}}_onContentChanges(){const t=this._elementRef.nativeElement.textContent;t!==this._currentTextContent&&(this._currentTextContent=t||"",this._ngZone.run(()=>{this.updatePagination(),this._alignInkBarToSelectedTab(),this._changeDetectorRef.markForCheck()}))}updatePagination(){this._checkPaginationEnabled(),this._checkScrollingControls(),this._updateTabScrollPosition()}get focusIndex(){return this._keyManager?this._keyManager.activeItemIndex:0}set focusIndex(t){!this._isValidIndex(t)||this.focusIndex===t||!this._keyManager||this._keyManager.setActiveItem(t)}_isValidIndex(t){return!this._items||!!this._items.toArray()[t]}_setTabFocus(t){if(this._showPaginationControls&&this._scrollToLabel(t),this._items&&this._items.length){this._items.toArray()[t].focus();const n=this._tabListContainer.nativeElement;n.scrollLeft="ltr"==this._getLayoutDirection()?0:n.scrollWidth-n.offsetWidth}}_getLayoutDirection(){return this._dir&&"rtl"===this._dir.value?"rtl":"ltr"}_updateTabScrollPosition(){if(this.disablePagination)return;const t=this.scrollDistance,n="ltr"===this._getLayoutDirection()?-t:t;this._tabList.nativeElement.style.transform=`translateX(${Math.round(n)}px)`,(this._platform.TRIDENT||this._platform.EDGE)&&(this._tabListContainer.nativeElement.scrollLeft=0)}get scrollDistance(){return this._scrollDistance}set scrollDistance(t){this._scrollTo(t)}_scrollHeader(t){return this._scrollTo(this._scrollDistance+("before"==t?-1:1)*this._tabListContainer.nativeElement.offsetWidth/3)}_handlePaginatorClick(t){this._stopInterval(),this._scrollHeader(t)}_scrollToLabel(t){if(this.disablePagination)return;const n=this._items?this._items.toArray()[t]:null;if(!n)return;const r=this._tabListContainer.nativeElement.offsetWidth,{offsetLeft:s,offsetWidth:a}=n.elementRef.nativeElement;let l,u;"ltr"==this._getLayoutDirection()?(l=s,u=l+a):(u=this._tabListInner.nativeElement.offsetWidth-s,l=u-a);const d=this.scrollDistance,p=this.scrollDistance+r;lp&&(this.scrollDistance+=u-p+60)}_checkPaginationEnabled(){if(this.disablePagination)this._showPaginationControls=!1;else{const t=this._tabListInner.nativeElement.scrollWidth>this._elementRef.nativeElement.offsetWidth;t||(this.scrollDistance=0),t!==this._showPaginationControls&&this._changeDetectorRef.markForCheck(),this._showPaginationControls=t}}_checkScrollingControls(){this.disablePagination?this._disableScrollAfter=this._disableScrollBefore=!0:(this._disableScrollBefore=0==this.scrollDistance,this._disableScrollAfter=this.scrollDistance==this._getMaxScrollDistance(),this._changeDetectorRef.markForCheck())}_getMaxScrollDistance(){return this._tabListInner.nativeElement.scrollWidth-this._tabListContainer.nativeElement.offsetWidth||0}_alignInkBarToSelectedTab(){const t=this._items&&this._items.length?this._items.toArray()[this.selectedIndex]:null,n=t?t.elementRef.nativeElement:null;n?this._inkBar.alignToElement(n):this._inkBar.hide()}_stopInterval(){this._stopScrolling.next()}_handlePaginatorPress(t,n){n&&null!=n.button&&0!==n.button||(this._stopInterval(),ES(650,100).pipe(ql(It(this._stopScrolling,this._destroyed))).subscribe(()=>{const{maxScrollDistance:r,distance:s}=this._scrollHeader(t);(0===s||s>=r)&&this._stopInterval()}))}_scrollTo(t){if(this.disablePagination)return{maxScrollDistance:0,distance:0};const n=this._getMaxScrollDistance();return this._scrollDistance=Math.max(0,Math.min(n,t)),this._scrollDistanceChanged=!0,this._checkScrollingControls(),{maxScrollDistance:n,distance:this._scrollDistance}}}return i.\u0275fac=function(t){return new(t||i)(wt(Cs),wt(pl),wt(Rb),wt(Ed,8),wt(mo),wt(Ku),wt(_h,8))},i.\u0275dir=Oi({type:i,inputs:{disablePagination:"disablePagination"}}),i})(),QAe=(()=>{class i extends qAe{get disableRipple(){return this._disableRipple}set disableRipple(t){this._disableRipple=pa(t)}constructor(t,n,r,s,a,l,u){super(t,n,r,s,a,l,u),this._disableRipple=!1}_itemSelected(t){t.preventDefault()}}return i.\u0275fac=function(t){return new(t||i)(wt(Cs),wt(pl),wt(Rb),wt(Ed,8),wt(mo),wt(Ku),wt(_h,8))},i.\u0275dir=Oi({type:i,inputs:{disableRipple:"disableRipple"},features:[As]}),i})(),WAe=(()=>{class i extends QAe{constructor(t,n,r,s,a,l,u){super(t,n,r,s,a,l,u)}ngAfterContentInit(){this._inkBar=new OAe(this._items),super.ngAfterContentInit()}}return i.\u0275fac=function(t){return new(t||i)(wt(Cs),wt(pl),wt(Rb),wt(Ed,8),wt(mo),wt(Ku),wt(_h,8))},i.\u0275cmp=Fr({type:i,selectors:[["mat-tab-header"]],contentQueries:function(t,n,r){if(1&t&&Qh(r,_G,4),2&t){let s;so(s=oo())&&(n._items=s)}},viewQuery:function(t,n){if(1&t&&(la(mAe,7),la(gAe,7),la(_Ae,7),la(yAe,5),la(vAe,5)),2&t){let r;so(r=oo())&&(n._tabListContainer=r.first),so(r=oo())&&(n._tabList=r.first),so(r=oo())&&(n._tabListInner=r.first),so(r=oo())&&(n._nextPaginator=r.first),so(r=oo())&&(n._previousPaginator=r.first)}},hostAttrs:[1,"mat-mdc-tab-header"],hostVars:4,hostBindings:function(t,n){2&t&&jo("mat-mdc-tab-header-pagination-controls-enabled",n._showPaginationControls)("mat-mdc-tab-header-rtl","rtl"==n._getLayoutDirection())},inputs:{selectedIndex:"selectedIndex"},outputs:{selectFocusedIndex:"selectFocusedIndex",indexFocused:"indexFocused"},features:[As],ngContentSelectors:pG,decls:13,vars:10,consts:[["aria-hidden","true","type","button","mat-ripple","","tabindex","-1",1,"mat-mdc-tab-header-pagination","mat-mdc-tab-header-pagination-before",3,"matRippleDisabled","disabled","click","mousedown","touchend"],["previousPaginator",""],[1,"mat-mdc-tab-header-pagination-chevron"],[1,"mat-mdc-tab-label-container",3,"keydown"],["tabListContainer",""],["role","tablist",1,"mat-mdc-tab-list",3,"cdkObserveContent"],["tabList",""],[1,"mat-mdc-tab-labels"],["tabListInner",""],["aria-hidden","true","type","button","mat-ripple","","tabindex","-1",1,"mat-mdc-tab-header-pagination","mat-mdc-tab-header-pagination-after",3,"matRippleDisabled","disabled","mousedown","click","touchend"],["nextPaginator",""]],template:function(t,n){1&t&&(fh(),Zt(0,"button",0,1),Fi("click",function(){return n._handlePaginatorClick("before")})("mousedown",function(s){return n._handlePaginatorPress("before",s)})("touchend",function(){return n._stopInterval()}),Pr(2,"div",2),un(),Zt(3,"div",3,4),Fi("keydown",function(s){return n._handleKeydown(s)}),Zt(5,"div",5,6),Fi("cdkObserveContent",function(){return n._onContentChanges()}),Zt(7,"div",7,8),uu(9),un()()(),Zt(10,"button",9,10),Fi("mousedown",function(s){return n._handlePaginatorPress("after",s)})("click",function(){return n._handlePaginatorClick("after")})("touchend",function(){return n._stopInterval()}),Pr(12,"div",2),un()),2&t&&(jo("mat-mdc-tab-header-pagination-disabled",n._disableScrollBefore),Cn("matRippleDisabled",n._disableScrollBefore||n.disableRipple)("disabled",n._disableScrollBefore||null),Nn(3),jo("_mat-animation-noopable","NoopAnimations"===n._animationMode),Nn(7),jo("mat-mdc-tab-header-pagination-disabled",n._disableScrollAfter),Cn("matRippleDisabled",n._disableScrollAfter||n.disableRipple)("disabled",n._disableScrollAfter||null))},dependencies:[qA,Yae],styles:[".mat-mdc-tab-header{display:flex;overflow:hidden;position:relative;flex-shrink:0}.mat-mdc-tab-header-pagination{-webkit-user-select:none;user-select:none;position:relative;display:none;justify-content:center;align-items:center;min-width:32px;cursor:pointer;z-index:2;-webkit-tap-highlight-color:rgba(0,0,0,0);touch-action:none;box-sizing:content-box;background:none;border:none;outline:0;padding:0}.mat-mdc-tab-header-pagination::-moz-focus-inner{border:0}.mat-mdc-tab-header-pagination .mat-ripple-element{opacity:.12}.mat-mdc-tab-header-pagination-controls-enabled .mat-mdc-tab-header-pagination{display:flex}.mat-mdc-tab-header-pagination-before,.mat-mdc-tab-header-rtl .mat-mdc-tab-header-pagination-after{padding-left:4px}.mat-mdc-tab-header-pagination-before .mat-mdc-tab-header-pagination-chevron,.mat-mdc-tab-header-rtl .mat-mdc-tab-header-pagination-after .mat-mdc-tab-header-pagination-chevron{transform:rotate(-135deg)}.mat-mdc-tab-header-rtl .mat-mdc-tab-header-pagination-before,.mat-mdc-tab-header-pagination-after{padding-right:4px}.mat-mdc-tab-header-rtl .mat-mdc-tab-header-pagination-before .mat-mdc-tab-header-pagination-chevron,.mat-mdc-tab-header-pagination-after .mat-mdc-tab-header-pagination-chevron{transform:rotate(45deg)}.mat-mdc-tab-header-pagination-chevron{border-style:solid;border-width:2px 2px 0 0;height:8px;width:8px}.mat-mdc-tab-header-pagination-disabled{box-shadow:none;cursor:default;pointer-events:none}.mat-mdc-tab-header-pagination-disabled .mat-mdc-tab-header-pagination-chevron{opacity:.4}.mat-mdc-tab-list{flex-grow:1;position:relative;transition:transform 500ms cubic-bezier(0.35, 0, 0.25, 1)}._mat-animation-noopable .mat-mdc-tab-list{transition:none}._mat-animation-noopable span.mdc-tab-indicator__content,._mat-animation-noopable span.mdc-tab__text-label{transition:none}.mat-mdc-tab-label-container{display:flex;flex-grow:1;overflow:hidden;z-index:1}.mat-mdc-tab-labels{display:flex;flex:1 0 auto}[mat-align-tabs=center]>.mat-mdc-tab-header .mat-mdc-tab-labels{justify-content:center}[mat-align-tabs=end]>.mat-mdc-tab-header .mat-mdc-tab-labels{justify-content:flex-end}.mat-mdc-tab::before{margin:5px}.cdk-high-contrast-active .mat-mdc-tab[aria-disabled=true]{color:GrayText}"],encapsulation:2}),i})();const wG=new cr("MAT_TABS_CONFIG");let jAe=0;const $Ae=C2(kb(class{constructor(i){this._elementRef=i}}),"primary");let XAe=(()=>{class i extends $Ae{get dynamicHeight(){return this._dynamicHeight}set dynamicHeight(t){this._dynamicHeight=pa(t)}get selectedIndex(){return this._selectedIndex}set selectedIndex(t){this._indexToSelect=gc(t,null)}get animationDuration(){return this._animationDuration}set animationDuration(t){this._animationDuration=/^\d+$/.test(t+"")?t+"ms":t}get contentTabIndex(){return this._contentTabIndex}set contentTabIndex(t){this._contentTabIndex=gc(t,null)}get disablePagination(){return this._disablePagination}set disablePagination(t){this._disablePagination=pa(t)}get preserveContent(){return this._preserveContent}set preserveContent(t){this._preserveContent=pa(t)}get backgroundColor(){return this._backgroundColor}set backgroundColor(t){const n=this._elementRef.nativeElement.classList;n.remove("mat-tabs-with-background",`mat-background-${this.backgroundColor}`),t&&n.add("mat-tabs-with-background",`mat-background-${t}`),this._backgroundColor=t}constructor(t,n,r,s){super(t),this._changeDetectorRef=n,this._animationMode=s,this._tabs=new Hv,this._indexToSelect=0,this._lastFocusedTabIndex=null,this._tabBodyWrapperHeight=0,this._tabsSubscription=De.EMPTY,this._tabLabelSubscription=De.EMPTY,this._dynamicHeight=!1,this._selectedIndex=null,this.headerPosition="above",this._disablePagination=!1,this._preserveContent=!1,this.selectedIndexChange=new Ws,this.focusChange=new Ws,this.animationDone=new Ws,this.selectedTabChange=new Ws(!0),this._groupId=jAe++,this.animationDuration=r&&r.animationDuration?r.animationDuration:"500ms",this.disablePagination=!(!r||null==r.disablePagination)&&r.disablePagination,this.dynamicHeight=!(!r||null==r.dynamicHeight)&&r.dynamicHeight,this.contentTabIndex=r?.contentTabIndex??null,this.preserveContent=!!r?.preserveContent}ngAfterContentChecked(){const t=this._indexToSelect=this._clampTabIndex(this._indexToSelect);if(this._selectedIndex!=t){const n=null==this._selectedIndex;if(!n){this.selectedTabChange.emit(this._createChangeEvent(t));const r=this._tabBodyWrapper.nativeElement;r.style.minHeight=r.clientHeight+"px"}Promise.resolve().then(()=>{this._tabs.forEach((r,s)=>r.isActive=s===t),n||(this.selectedIndexChange.emit(t),this._tabBodyWrapper.nativeElement.style.minHeight="")})}this._tabs.forEach((n,r)=>{n.position=r-t,null!=this._selectedIndex&&0==n.position&&!n.origin&&(n.origin=t-this._selectedIndex)}),this._selectedIndex!==t&&(this._selectedIndex=t,this._lastFocusedTabIndex=null,this._changeDetectorRef.markForCheck())}ngAfterContentInit(){this._subscribeToAllTabChanges(),this._subscribeToTabLabels(),this._tabsSubscription=this._tabs.changes.subscribe(()=>{const t=this._clampTabIndex(this._indexToSelect);if(t===this._selectedIndex){const n=this._tabs.toArray();let r;for(let s=0;s{n[t].isActive=!0,this.selectedTabChange.emit(this._createChangeEvent(t))})}this._changeDetectorRef.markForCheck()})}_subscribeToAllTabChanges(){this._allTabs.changes.pipe(op(this._allTabs)).subscribe(t=>{this._tabs.reset(t.filter(n=>n._closestTabGroup===this||!n._closestTabGroup)),this._tabs.notifyOnChanges()})}ngOnDestroy(){this._tabs.destroy(),this._tabsSubscription.unsubscribe(),this._tabLabelSubscription.unsubscribe()}realignInkBar(){this._tabHeader&&this._tabHeader._alignInkBarToSelectedTab()}updatePagination(){this._tabHeader&&this._tabHeader.updatePagination()}focusTab(t){const n=this._tabHeader;n&&(n.focusIndex=t)}_focusChanged(t){this._lastFocusedTabIndex=t,this.focusChange.emit(this._createChangeEvent(t))}_createChangeEvent(t){const n=new YAe;return n.index=t,this._tabs&&this._tabs.length&&(n.tab=this._tabs.toArray()[t]),n}_subscribeToTabLabels(){this._tabLabelSubscription&&this._tabLabelSubscription.unsubscribe(),this._tabLabelSubscription=It(...this._tabs.map(t=>t._stateChanges)).subscribe(()=>this._changeDetectorRef.markForCheck())}_clampTabIndex(t){return Math.min(this._tabs.length-1,Math.max(t||0,0))}_getTabLabelId(t){return`mat-tab-label-${this._groupId}-${t}`}_getTabContentId(t){return`mat-tab-content-${this._groupId}-${t}`}_setTabBodyWrapperHeight(t){if(!this._dynamicHeight||!this._tabBodyWrapperHeight)return;const n=this._tabBodyWrapper.nativeElement;n.style.height=this._tabBodyWrapperHeight+"px",this._tabBodyWrapper.nativeElement.offsetHeight&&(n.style.height=t+"px")}_removeTabBodyWrapperHeight(){const t=this._tabBodyWrapper.nativeElement;this._tabBodyWrapperHeight=t.clientHeight,t.style.height="",this.animationDone.emit()}_handleClick(t,n,r){n.focusIndex=r,t.disabled||(this.selectedIndex=r)}_getTabIndex(t){return t===(this._lastFocusedTabIndex??this.selectedIndex)?0:-1}_tabFocusChanged(t,n){t&&"mouse"!==t&&"touch"!==t&&(this._tabHeader.focusIndex=n)}}return i.\u0275fac=function(t){return new(t||i)(wt(Cs),wt(pl),wt(wG,8),wt(_h,8))},i.\u0275dir=Oi({type:i,inputs:{dynamicHeight:"dynamicHeight",selectedIndex:"selectedIndex",headerPosition:"headerPosition",animationDuration:"animationDuration",contentTabIndex:"contentTabIndex",disablePagination:"disablePagination",preserveContent:"preserveContent",backgroundColor:"backgroundColor"},outputs:{selectedIndexChange:"selectedIndexChange",focusChange:"focusChange",animationDone:"animationDone",selectedTabChange:"selectedTabChange"},features:[As]}),i})(),KAe=(()=>{class i extends XAe{get fitInkBarToContent(){return this._fitInkBarToContent}set fitInkBarToContent(t){this._fitInkBarToContent=pa(t),this._changeDetectorRef.markForCheck()}get stretchTabs(){return this._stretchTabs}set stretchTabs(t){this._stretchTabs=pa(t)}constructor(t,n,r,s){super(t,n,r,s),this._fitInkBarToContent=!1,this._stretchTabs=!0,this.fitInkBarToContent=!(!r||null==r.fitInkBarToContent)&&r.fitInkBarToContent}}return i.\u0275fac=function(t){return new(t||i)(wt(Cs),wt(pl),wt(wG,8),wt(_h,8))},i.\u0275cmp=Fr({type:i,selectors:[["mat-tab-group"]],contentQueries:function(t,n,r){if(1&t&&Qh(r,vG,5),2&t){let s;so(s=oo())&&(n._allTabs=s)}},viewQuery:function(t,n){if(1&t&&(la(bAe,5),la(xAe,5)),2&t){let r;so(r=oo())&&(n._tabBodyWrapper=r.first),so(r=oo())&&(n._tabHeader=r.first)}},hostAttrs:[1,"mat-mdc-tab-group"],hostVars:6,hostBindings:function(t,n){2&t&&jo("mat-mdc-tab-group-dynamic-height",n.dynamicHeight)("mat-mdc-tab-group-inverted-header","below"===n.headerPosition)("mat-mdc-tab-group-stretch-tabs",n.stretchTabs)},inputs:{color:"color",disableRipple:"disableRipple",fitInkBarToContent:"fitInkBarToContent",stretchTabs:["mat-stretch-tabs","stretchTabs"]},exportAs:["matTabGroup"],features:[Po([{provide:yG,useExisting:i}]),As],decls:6,vars:6,consts:[[3,"selectedIndex","disableRipple","indexFocused","selectFocusedIndex"],["tabHeader",""],["class","mdc-tab mat-mdc-tab mat-mdc-focus-indicator","role","tab","matTabLabelWrapper","","cdkMonitorElementFocus","",3,"id","mdc-tab--active","ngClass","disabled","fitInkBarToContent","click","cdkFocusChange",4,"ngFor","ngForOf"],[1,"mat-mdc-tab-body-wrapper"],["tabBodyWrapper",""],["role","tabpanel",3,"id","mat-mdc-tab-body-active","ngClass","content","position","origin","animationDuration","preserveContent","_onCentered","_onCentering",4,"ngFor","ngForOf"],["role","tab","matTabLabelWrapper","","cdkMonitorElementFocus","",1,"mdc-tab","mat-mdc-tab","mat-mdc-focus-indicator",3,"id","ngClass","disabled","fitInkBarToContent","click","cdkFocusChange"],["tabNode",""],[1,"mdc-tab__ripple"],["mat-ripple","",1,"mat-mdc-tab-ripple",3,"matRippleTrigger","matRippleDisabled"],[1,"mdc-tab__content"],[1,"mdc-tab__text-label"],[3,"ngIf","ngIfElse"],["tabTextLabel",""],[3,"cdkPortalOutlet"],["role","tabpanel",3,"id","ngClass","content","position","origin","animationDuration","preserveContent","_onCentered","_onCentering"]],template:function(t,n){1&t&&(Zt(0,"mat-tab-header",0,1),Fi("indexFocused",function(s){return n._focusChanged(s)})("selectFocusedIndex",function(s){return n.selectedIndex=s}),qr(2,SAe,9,17,"div",2),un(),Zt(3,"div",3,4),qr(5,TAe,1,11,"mat-tab-body",5),un()),2&t&&(Cn("selectedIndex",n.selectedIndex||0)("disableRipple",n.disableRipple),Nn(2),Cn("ngForOf",n._tabs),Nn(1),jo("_mat-animation-noopable","NoopAnimations"===n._animationMode),Nn(2),Cn("ngForOf",n._tabs))},dependencies:[FA,Sf,Tu,M2,qA,xle,AG,_G,WAe],styles:['.mdc-tab{min-width:90px;padding-right:24px;padding-left:24px;display:flex;flex:1 0 auto;justify-content:center;box-sizing:border-box;margin:0;padding-top:0;padding-bottom:0;border:none;outline:none;text-align:center;white-space:nowrap;cursor:pointer;-webkit-appearance:none;z-index:1}.mdc-tab::-moz-focus-inner{padding:0;border:0}.mdc-tab[hidden]{display:none}.mdc-tab--min-width{flex:0 1 auto}.mdc-tab__content{display:flex;align-items:center;justify-content:center;height:inherit;pointer-events:none}.mdc-tab__text-label{transition:150ms color linear;display:inline-block;line-height:1;z-index:2}.mdc-tab__icon{transition:150ms color linear;z-index:2}.mdc-tab--stacked .mdc-tab__content{flex-direction:column;align-items:center;justify-content:center}.mdc-tab--stacked .mdc-tab__text-label{padding-top:6px;padding-bottom:4px}.mdc-tab--active .mdc-tab__text-label,.mdc-tab--active .mdc-tab__icon{transition-delay:100ms}.mdc-tab:not(.mdc-tab--stacked) .mdc-tab__icon+.mdc-tab__text-label{padding-left:8px;padding-right:0}[dir=rtl] .mdc-tab:not(.mdc-tab--stacked) .mdc-tab__icon+.mdc-tab__text-label,.mdc-tab:not(.mdc-tab--stacked) .mdc-tab__icon+.mdc-tab__text-label[dir=rtl]{padding-left:0;padding-right:8px}.mdc-tab-indicator .mdc-tab-indicator__content--underline{border-top-width:2px}.mdc-tab-indicator .mdc-tab-indicator__content--icon{height:34px;font-size:34px}.mdc-tab-indicator{display:flex;position:absolute;top:0;left:0;justify-content:center;width:100%;height:100%;pointer-events:none;z-index:1}.mdc-tab-indicator__content{transform-origin:left;opacity:0}.mdc-tab-indicator__content--underline{align-self:flex-end;box-sizing:border-box;width:100%;border-top-style:solid}.mdc-tab-indicator__content--icon{align-self:center;margin:0 auto}.mdc-tab-indicator--active .mdc-tab-indicator__content{opacity:1}.mdc-tab-indicator .mdc-tab-indicator__content{transition:250ms transform cubic-bezier(0.4, 0, 0.2, 1)}.mdc-tab-indicator--no-transition .mdc-tab-indicator__content{transition:none}.mdc-tab-indicator--fade .mdc-tab-indicator__content{transition:150ms opacity linear}.mdc-tab-indicator--active.mdc-tab-indicator--fade .mdc-tab-indicator__content{transition-delay:100ms}.mat-mdc-tab-ripple{position:absolute;top:0;left:0;bottom:0;right:0;pointer-events:none}.mat-mdc-tab{-webkit-tap-highlight-color:rgba(0,0,0,0)}.mat-mdc-tab.mdc-tab{height:48px;flex-grow:0}.mat-mdc-tab .mdc-tab__ripple::before{content:"";display:block;position:absolute;top:0;left:0;right:0;bottom:0;opacity:0;pointer-events:none}.mat-mdc-tab .mdc-tab__text-label{display:inline-flex;align-items:center}.mat-mdc-tab .mdc-tab__content{position:relative}.mat-mdc-tab:hover .mdc-tab__ripple::before{opacity:.04}.mat-mdc-tab.cdk-program-focused .mdc-tab__ripple::before,.mat-mdc-tab.cdk-keyboard-focused .mdc-tab__ripple::before{opacity:.12}.mat-mdc-tab .mat-ripple-element{opacity:.12}.mat-mdc-tab-group.mat-mdc-tab-group-stretch-tabs>.mat-mdc-tab-header .mat-mdc-tab{flex-grow:1}.mat-mdc-tab-disabled{opacity:.4}.mat-mdc-tab-group{display:flex;flex-direction:column;max-width:100%}.mat-mdc-tab-group.mat-tabs-with-background>.mat-mdc-tab-header,.mat-mdc-tab-group.mat-tabs-with-background>.mat-mdc-tab-header-pagination{background-color:var(--mat-mdc-tab-header-with-background-background-color, transparent)}.mat-mdc-tab-group.mat-tabs-with-background>.mat-mdc-tab-header .mat-mdc-tab .mdc-tab__text-label,.mat-mdc-tab-group.mat-tabs-with-background>.mat-mdc-tab-header .mat-mdc-tab-link .mdc-tab__text-label{color:var(--mat-mdc-tab-header-with-background-foreground-color, inherit)}.mat-mdc-tab-group.mat-tabs-with-background>.mat-mdc-tab-header .mdc-tab-indicator__content--underline,.mat-mdc-tab-group.mat-tabs-with-background>.mat-mdc-tab-header .mat-mdc-tab-header-pagination-chevron,.mat-mdc-tab-group.mat-tabs-with-background>.mat-mdc-tab-header .mat-mdc-focus-indicator::before{border-color:var(--mat-mdc-tab-header-with-background-foreground-color, inherit)}.mat-mdc-tab-group.mat-tabs-with-background>.mat-mdc-tab-header .mat-ripple-element,.mat-mdc-tab-group.mat-tabs-with-background>.mat-mdc-tab-header .mdc-tab__ripple::before,.mat-mdc-tab-group.mat-tabs-with-background>.mat-mdc-tab-header-pagination .mat-ripple-element,.mat-mdc-tab-group.mat-tabs-with-background>.mat-mdc-tab-header-pagination .mdc-tab__ripple::before{background-color:var(--mat-mdc-tab-header-with-background-foreground-color, inherit)}.mat-mdc-tab-group.mat-tabs-with-background>.mat-mdc-tab-header .mat-mdc-tab-header-pagination-chevron,.mat-mdc-tab-group.mat-tabs-with-background>.mat-mdc-tab-header-pagination .mat-mdc-tab-header-pagination-chevron{border-color:var(--mat-mdc-tab-header-with-background-foreground-color, inherit)}.mat-mdc-tab-group.mat-mdc-tab-group-inverted-header{flex-direction:column-reverse}.mat-mdc-tab-group.mat-mdc-tab-group-inverted-header .mdc-tab-indicator__content--underline{align-self:flex-start}.mat-mdc-tab-body-wrapper{position:relative;overflow:hidden;display:flex;transition:height 500ms cubic-bezier(0.35, 0, 0.25, 1)}.mat-mdc-tab-body-wrapper._mat-animation-noopable{transition:none !important;animation:none !important}'],encapsulation:2}),i})();class YAe{}let ZAe=(()=>{class i{}return i.\u0275fac=function(t){return new(t||i)},i.\u0275mod=ia({type:i}),i.\u0275inj=ft({imports:[D_,Pu,kS,Fb,lz,wF,Pu]}),i})();function JAe(i,e){if(1&i){const t=Za();Zt(0,"button",7),Fi("click",function(){ks(t);const r=Mr(2);return ys(r.isExpanded=!r.isExpanded)}),Zt(1,"mat-icon",8),dr(2),un()()}if(2&i){const t=Mr(2);Nn(2),Gl(" ",t.isExpanded?"expand_more":"chevron_right"," ")}}function eme(i,e){if(1&i&&(Zt(0,"li"),Pr(1,"app-tree-menu-item",9),un()),2&i){const t=e.$implicit;Nn(1),Cn("node",t)}}const tme=function(i){return{visible:i}};function nme(i,e){if(1&i){const t=Za();bd(0),Zt(1,"div",1),qr(2,JAe,3,1,"button",2),Zt(3,"div",3),Fi("click",function(){ks(t);const r=Mr();return ys(r.toggleVisibility(!r.visible))}),dr(4),un()(),Zt(5,"ul",4)(6,"div",5),qr(7,eme,2,1,"li",6),un()(),dh()}if(2&i){const t=Mr();Nn(1),Cn("ngClass",$d(5,tme,t.visible)),Nn(1),Cn("ngIf",t.node.children),Nn(2),Gl(" ",t.node.name," "),Nn(1),Cn("hidden",!t.isExpanded),Nn(2),Cn("ngForOf",t.node.children)}}class Uy{constructor(e){Wt(this,"eventDisplay",void 0),Wt(this,"children",void 0),Wt(this,"node",void 0),Wt(this,"isExpanded",!1),Wt(this,"visible",!0),this.eventDisplay=e}toggleVisibility(e){console.log("hi! it's "+this.node.name),this.eventDisplay.getUIManager().geometryVisibility(this.node.geometryId,e),this.visible=e,this.children.forEach(t=>t.toggleVisibility(e))}}Wt(Uy,"\u0275fac",function(e){return new(e||Uy)(wt(Qa))}),Wt(Uy,"\u0275cmp",Fr({type:Uy,selectors:[["app-tree-menu-item"]],viewQuery:function(e,t){if(1&e&&la(Uy,5),2&e){let n;so(n=oo())&&(t.children=n)}},inputs:{node:"node"},decls:1,vars:1,consts:[[4,"ngIf"],[1,"header",3,"ngClass"],["mat-icon-button","","matTreeNodeToggle","",3,"click",4,"ngIf"],[1,"node-name",3,"click"],["hid","",3,"hidden"],[1,"children"],[4,"ngFor","ngForOf"],["mat-icon-button","","matTreeNodeToggle","",3,"click"],[1,"mat-icon-rtl-mirror"],[3,"node"]],template:function(e,t){1&e&&qr(0,nme,8,7,"ng-container",0),2&e&&Cn("ngIf",t.node)},dependencies:[FA,Sf,Tu,Fde,iAe,Uy],styles:[".header[_ngcontent-%COMP%]{cursor:pointer;user-select:none;-webkit-user-select:none;-khtml-user-select:none;-moz-user-select:none;-ms-user-select:none;display:flex;flex-direction:row;align-items:center}.header[_ngcontent-%COMP%] .node-name[_ngcontent-%COMP%], .header[_ngcontent-%COMP%] .mat-icon-rtl-mirror[_ngcontent-%COMP%]{color:var(--phoenix-text-color-secondary)}.header.visible[_ngcontent-%COMP%] .node-name[_ngcontent-%COMP%], .header.visible[_ngcontent-%COMP%] .mat-icon-rtl-mirror[_ngcontent-%COMP%]{color:var(--phoenix-accent)}.children[_ngcontent-%COMP%] li[_ngcontent-%COMP%]{list-style-type:none}"]}));class c3{constructor(){Wt(this,"rootNode",{name:"Atlas Detector",geometryId:"AtlasDetector",children:[{name:"Magnet systems",geometryId:"MagnetSys",children:[{name:"Toroids",geometryId:"Toroids"}]},{name:"Calorimeters",geometryId:"CaloSys",children:[{name:"LAr Barrel",geometryId:"LAr Barrel"},{name:"LAr EC1",geometryId:"LAr EC1"},{name:"LAr EC2",geometryId:"LAr EC2"},{name:"Tile Cal",geometryId:"Tile Cal"}]},{name:"Inner detector",geometryId:"InDetSys",children:[{name:"Pixel",geometryId:"Pixel"},{name:"SCT",geometryId:"SCT"},{name:"TRT",geometryId:"TRT"}]}]})}ngOnInit(){}}Wt(c3,"\u0275fac",function(e){return new(e||c3)}),Wt(c3,"\u0275cmp",Fr({type:c3,selectors:[["app-tree-menu"]],decls:3,vars:1,consts:[[1,"tree-wrapper"],[1,"tree-menu"],[3,"node"]],template:function(e,t){1&e&&(Zt(0,"div",0)(1,"div",1),Pr(2,"app-tree-menu-item",2),un()()),2&e&&(Nn(2),Cn("node",t.rootNode))},dependencies:[Uy],styles:[".tree-wrapper[_ngcontent-%COMP%]{position:absolute;top:0;bottom:0;left:0;display:flex;flex-direction:column;justify-content:center;align-items:center;align-content:center}.tree-menu[_ngcontent-%COMP%]{display:flex;flex-direction:column;justify-content:center;align-items:center;align-content:center;max-height:70vh;overflow-y:scroll}.example-tree-invisible[_ngcontent-%COMP%]{display:none}.example-tree[_ngcontent-%COMP%] ul[_ngcontent-%COMP%], .example-tree[_ngcontent-%COMP%] li[_ngcontent-%COMP%]{margin-top:0;margin-bottom:0;list-style-type:none}"]}));class ume extends dfe{constructor(){super(...arguments),this._data=new rp([])}get data(){return this._data.value}set data(e){this._data.next(e)}connect(e){return It(e.viewChange,this._data).pipe(et(()=>this.data))}disconnect(){}}function hme(i,e){if(1&i){const t=Za();Zt(0,"cdk-tree-node",3)(1,"button",4),Fi("click",function(){const s=ks(t).$implicit;return ys(Mr().onSelect(s.url))}),vl(),Zt(2,"svg",5),Pr(3,"use",6),un(),dr(4),un()()}if(2&i){const t=e.$implicit;Nn(4),Gl(" ",t.name," ")}}function dme(i,e){if(1&i&&(Zt(0,"cdk-nested-tree-node",3)(1,"button",7),vl(),Zt(2,"svg",5),Pr(3,"use",8),un(),dr(4),un(),cd(),Zt(5,"div"),Qg(6,9),un()()),2&i){const t=e.$implicit,n=Mr();Nn(1),Ea("aria-label","Toggle "+t.name),Nn(1),jo("node-icon-filled",!n.treeControl.isExpanded(t)),Nn(2),Gl(" ",t.name," "),Nn(1),jo("file-tree-invisible",!n.treeControl.isExpanded(t))}}class CG{constructor(e){Wt(this,"name",void 0),Wt(this,"url",void 0),Wt(this,"children",void 0),this.name=e}}class G2{constructor(){Wt(this,"rootFileNode",void 0),Wt(this,"onFileSelect",new Ws),Wt(this,"treeControl",new oAe(this.getSortedChildren.bind(this))),Wt(this,"dataSource",new ume),Wt(this,"hasChildren",(e,t)=>!!t.children&&Object.keys(t.children).length>0)}ngOnChanges(e){e.rootFileNode?.currentValue&&(this.dataSource.data=this.getSortedChildren(e.rootFileNode.currentValue))}onSelect(e){this.onFileSelect.emit(e)}getSortedChildren(e){return e.children?Object.values(e.children).sort((t,n)=>!t.url&&n.url?-1:1):[]}}Wt(G2,"\u0275fac",function(e){return new(e||G2)}),Wt(G2,"\u0275cmp",Fr({type:G2,selectors:[["app-file-explorer"]],inputs:{rootFileNode:"rootFileNode"},outputs:{onFileSelect:"onFileSelect"},features:[bc],decls:3,vars:3,consts:[[3,"dataSource","treeControl"],["class","tree-node",4,"cdkTreeNodeDef"],["class","tree-node",4,"cdkTreeNodeDef","cdkTreeNodeDefWhen"],[1,"tree-node"],["mat-button","","mat-stroked-button","",1,"tree-node-button",3,"click"],[1,"node-icon"],["href","assets/icons/file.svg#file"],["mat-button","","cdkTreeNodeToggle","",1,"tree-node-button"],["href","assets/icons/folder.svg#folder"],["cdkTreeNodeOutlet",""]],template:function(e,t){1&e&&(Zt(0,"cdk-tree",0),qr(1,hme,5,1,"cdk-tree-node",1),qr(2,dme,7,6,"cdk-nested-tree-node",2),un()),2&e&&(Cn("dataSource",t.dataSource)("treeControl",t.treeControl),Nn(2),Cn("cdkTreeNodeDefWhen",t.hasChildren))},dependencies:[t3,GD,l3,qD,y0,qm,V2],styles:[".file-tree-invisible[_ngcontent-%COMP%]{display:none}.tree-node[_ngcontent-%COMP%]{display:block;margin:.25rem 0}.tree-node[_ngcontent-%COMP%] .tree-node[_ngcontent-%COMP%]{padding-left:1rem}.tree-node-button[_ngcontent-%COMP%]{outline:none;padding:0 .75rem}.node-icon[_ngcontent-%COMP%]{width:1rem;height:1rem;margin-right:.25rem;margin-top:-2px}.node-icon.node-icon-filled[_ngcontent-%COMP%]{--icon-fill: var(--phoenix-options-icon-path, #fff)}"]}));class q2{}function fme(i,e){1&i&&Pr(0,"app-ring-loader")}function pme(i,e){1&i&&(Zt(0,"div"),dr(1,"Error processing request."),un())}function Ame(i,e){if(1&i){const t=Za();Zt(0,"mat-tab-group",8)(1,"mat-tab",9)(2,"div",10)(3,"app-file-explorer",11),Fi("onFileSelect",function(r){return ks(t),ys(Mr().loadEvent(r))}),un()()(),Zt(4,"mat-tab",12)(5,"div",10)(6,"app-file-explorer",11),Fi("onFileSelect",function(r){return ks(t),ys(Mr().loadConfig(r))}),un()()()()}if(2&i){const t=Mr();Nn(3),Cn("rootFileNode",t.eventDataFileNode),Nn(3),Cn("rootFileNode",t.configFileNode)}}Wt(q2,"\u0275fac",function(e){return new(e||q2)}),Wt(q2,"\u0275cmp",Fr({type:q2,selectors:[["app-ring-loader"]],decls:5,vars:0,consts:[[1,"ring"]],template:function(e,t){1&e&&(Zt(0,"div",0),Pr(1,"div")(2,"div")(3,"div")(4,"div"),un())},styles:[".ring[_ngcontent-%COMP%]{display:inline-block;position:relative;width:1.5rem;height:1.5rem}.ring[_ngcontent-%COMP%] div[_ngcontent-%COMP%]{box-sizing:border-box;display:block;position:absolute;width:1.5rem;height:1.5rem;margin:.25rem .5rem;border:.25rem solid var(--phoenix-text-color);border-radius:50%;animation:animate-ring 1.2s cubic-bezier(.5,0,.5,1) infinite;border-color:var(--phoenix-text-color) transparent transparent transparent}.ring[_ngcontent-%COMP%] div[_ngcontent-%COMP%]:nth-child(1){animation-delay:-.45s}.ring[_ngcontent-%COMP%] div[_ngcontent-%COMP%]:nth-child(2){animation-delay:-.3s}.ring[_ngcontent-%COMP%] div[_ngcontent-%COMP%]:nth-child(3){animation-delay:-.15s}@keyframes _ngcontent-%COMP%_app-ring-loader_animate-ring{0%{transform:rotate(0)}to{transform:rotate(360deg)}}"]}));const mme=["json","xml"];class Q2{constructor(e,t,n){Wt(this,"eventDisplay",void 0),Wt(this,"dialogRef",void 0),Wt(this,"dialogData",void 0),Wt(this,"eventDataFileNode",void 0),Wt(this,"configFileNode",void 0),Wt(this,"loading",!0),Wt(this,"error",!1),this.eventDisplay=e,this.dialogRef=t,this.dialogData=n,this.makeRequest(this.dialogData.apiURL,"json",r=>{const s=r.filter(a=>mme.includes(a.name.split(".").pop()));this.eventDataFileNode=this.buildFileNode(s)}),this.makeRequest(`${this.dialogData.apiURL}?type=config`,"json",r=>{const s=r.filter(a=>"json"===a.name.split(".").pop());this.configFileNode=this.buildFileNode(s)})}loadEvent(e){const t="zip"===e.split(".").pop(),n=t?e.substring(0,e.length-4):e;this.makeRequest(e,t?"blob":"text",r=>{switch(n.split(".").pop()){case"xml":this.loadJiveXMLEvent(r);break;case"json":this.loadJSONEvent(r)}})}loadJSONEvent(e){this.eventDisplay.parsePhoenixEvents(JSON.parse(e)),this.onClose()}loadJiveXMLEvent(e){const t=new xS;t.process(e);const n=t.getEventData();this.eventDisplay.buildEventDataFromJSON(n),this.onClose()}loadConfig(e){this.makeRequest(`${this.dialogData.apiURL}?type=config&f=${e}`,"text",t=>{this.eventDisplay.getStateManager().loadStateFromJSON(JSON.parse(t)),this.onClose()})}onClose(){this.dialogRef.close()}unzip(e){return(0,Np.Z)(function*(){const t=new(oF());yield t.loadAsync(e);let n="",r=!1;for(const s in t.files){if(r){console.error("Zip archive contains more than one file. Ignoring all but first");break}n=yield t.file(s).async("string"),r=!0}return n})()}makeRequest(e,t,n){this.loading=!0,fetch(e).then(r=>r[t]()).then(r=>{"blob"===t?r.arrayBuffer().then(s=>this.unzip(s)).then(s=>n(s)):n(r),this.error=!1}).catch(r=>{console.error(r),this.error=!0}).finally(()=>{this.loading=!1})}buildFileNode(e){const t=new CG;let n=t;for(const r of e)r.name.split("/").forEach(s=>{n.children=n.children??{},n.children[s]=n.children[s]??new CG(s),n=n.children[s]}),n.url=r.url,n=t;return t}}Wt(Q2,"\u0275fac",function(e){return new(e||Q2)(wt(Qa),wt(JS),wt(zV))}),Wt(Q2,"\u0275cmp",Fr({type:Q2,selectors:[["app-event-data-explorer-dialog"]],decls:11,vars:3,consts:[[1,"dialog"],[1,"d-flex"],["mat-dialog-title",""],[4,"ngIf"],["mat-dialog-content","",1,"dialog-content"],["mat-align-tabs","start","animationDuration","0ms","disableRipple","","color","transparent",4,"ngIf"],["mat-dialog-actions",""],["mat-button","","cdkFocusInitial","",3,"click"],["mat-align-tabs","start","animationDuration","0ms","disableRipple","","color","transparent"],["label","Event data"],[1,"py-3"],[3,"rootFileNode","onFileSelect"],["label","Config"]],template:function(e,t){1&e&&(Zt(0,"div",0)(1,"div",1)(2,"h1",2),dr(3,"Event data from directory"),un(),qr(4,fme,1,0,"app-ring-loader",3),un(),Zt(5,"div",4),qr(6,pme,2,0,"div",3),qr(7,Ame,7,2,"mat-tab-group",5),un(),Zt(8,"div",6)(9,"button",7),Fi("click",function(){return t.onClose()}),dr(10,"Close"),un()()()),2&e&&(Nn(4),Cn("ngIf",t.loading),Nn(2),Cn("ngIf",t.error),Nn(1),Cn("ngIf",!t.error))},dependencies:[Tu,AO,mO,gO,t3,vG,KAe,G2,q2],styles:[".dialog[_ngcontent-%COMP%]{width:30rem;max-width:95%}.file-path-button[_ngcontent-%COMP%]{width:100%;color:var(--phoenix-text-color);background:var(--phoenix-background-color-tertiary);text-align:left;border-radius:1rem;margin-bottom:.5rem;padding:.5rem 1rem}.file-path-button[_ngcontent-%COMP%]:last-child{margin-bottom:0}.file-path-button[_ngcontent-%COMP%]:hover{background:var(--phoenix-background-color-secondary)}.file-path-button[_ngcontent-%COMP%]:focus{border:1px solid var(--phoenix-text-color-secondary);box-shadow:none}"]}));class u3{constructor(e){Wt(this,"dialog",void 0),Wt(this,"apiURL",void 0),this.dialog=e}openEventDataExplorerDialog(){this.dialog.open(Q2,{data:{apiURL:this.apiURL}})}}Wt(u3,"\u0275fac",function(e){return new(e||u3)(wt(e3))}),Wt(u3,"\u0275cmp",Fr({type:u3,selectors:[["app-event-data-explorer"]],inputs:{apiURL:"apiURL"},decls:1,vars:1,consts:[["tooltip","Browse events in data directory","icon","server",3,"active","click"]],template:function(e,t){1&e&&(Zt(0,"app-menu-toggle",0),Fi("click",function(){return t.openEventDataExplorerDialog()}),un()),2&e&&Cn("active",!1)},dependencies:[Ql]}));class W2{constructor(e){Wt(this,"injector",void 0),this.injector=e}handleError(e){console.error("ERROR IN PHOENIX APP","\n",e),this.injector.get(Sy).setError(e)}}Wt(W2,"\u0275fac",function(e){return new(e||W2)(ci(zc))}),Wt(W2,"\u0275prov",Ue({token:W2,factory:W2.\u0275fac}));class j2{}Wt(j2,"\u0275fac",function(e){return new(e||j2)}),Wt(j2,"\u0275mod",ia({type:j2})),Wt(j2,"\u0275inj",ft({providers:[Qa,Sy,{provide:vd,useClass:W2}],imports:[D_,e7,Ohe,wde,Ode,Jce,US,rhe,Nce,Mfe,rfe,qfe,mhe,rAe,_pe,hAe,ZAe]}));class h3{constructor(e,t){Wt(this,"eventDisplay",void 0),Wt(this,"http",void 0),Wt(this,"loaded",!1),Wt(this,"loadingProgress",0),this.eventDisplay=e,this.http=t}ngOnInit(){const e={presetViews:[new $h("Left View",[0,0,-12e3],[0,0,0],"left-cube"),new $h("Center View",[-500,12e3,0],[0,0,0],"top-cube"),new $h("Right View",[0,0,12e3],[0,0,0],"right-cube")]};this.eventDisplay.init(e),this.eventDisplay.getLoadingManager().addProgressListener(t=>this.loadingProgress=t),this.eventDisplay.getLoadingManager().addLoadListenerWithCheck(()=>this.loaded=!0)}}function MG(i){return new fi(3e3,!1)}function Yme(){return typeof window<"u"&&typeof window.document<"u"}function wO(){return typeof process<"u"&&"[object process]"==={}.toString.call(process)}function zy(i){switch(i.length){case 0:return new OS;case 1:return i[0];default:return new Nz(i)}}function SG(i,e,t,n,r=new Map,s=new Map){const a=[],l=[];let u=-1,d=null;if(n.forEach(p=>{const y=p.get("offset"),C=y==u,O=C&&d||new Map;p.forEach((Q,W)=>{let se=W,ye=Q;if("offset"!==W)switch(se=e.normalizePropertyName(se,a),ye){case"!":ye=r.get(W);break;case q_:ye=s.get(W);break;default:ye=e.normalizeStyleValue(W,se,ye,a)}O.set(se,ye)}),C||l.push(O),d=O,u=y}),a.length)throw function Ume(i){return new fi(3502,!1)}();return l}function CO(i,e,t,n){switch(e){case"start":i.onStart(()=>n(t&&MO(t,"start",i)));break;case"done":i.onDone(()=>n(t&&MO(t,"done",i)));break;case"destroy":i.onDestroy(()=>n(t&&MO(t,"destroy",i)))}}function MO(i,e,t){const s=SO(i.element,i.triggerName,i.fromState,i.toState,e||i.phaseName,t.totalTime??i.totalTime,!!t.disabled),a=i._data;return null!=a&&(s._data=a),s}function SO(i,e,t,n,r="",s=0,a){return{element:i,triggerName:e,fromState:t,toState:n,phaseName:r,totalTime:s,disabled:!!a}}function jp(i,e,t){let n=i.get(e);return n||i.set(e,n=t),n}function TG(i){const e=i.indexOf(":");return[i.substring(1,e),i.slice(e+1)]}Wt(h3,"\u0275fac",function(e){return new(e||h3)(wt(Qa),wt(lM))}),Wt(h3,"\u0275cmp",Fr({type:h3,selectors:[["app-playground"]],decls:5,vars:2,consts:[[3,"loaded","progress"],["id","eventDisplay"]],template:function(e,t){1&e&&Pr(0,"app-loader",0)(1,"app-nav")(2,"app-ui-menu")(3,"app-embed-menu")(4,"div",1),2&e&&Cn("loaded",t.loaded)("progress",t.loadingProgress)},dependencies:[Vm,j_,Gm,_0]}));let TO=(i,e)=>!1,EG=(i,e,t)=>[],DG=null;function EO(i){const e=i.parentNode||i.host;return e===DG?null:e}(wO()||typeof Element<"u")&&(Yme()?(DG=(()=>document.documentElement)(),TO=(i,e)=>{for(;e;){if(e===i)return!0;e=EO(e)}return!1}):TO=(i,e)=>i.contains(e),EG=(i,e,t)=>{if(t)return Array.from(i.querySelectorAll(e));const n=i.querySelector(e);return n?[n]:[]});let ox=null,BG=!1;const IG=TO,PG=EG;let kG=(()=>{class i{validateStyleProperty(t){return function Jme(i){ox||(ox=function ege(){return typeof document<"u"?document.body:null}()||{},BG=!!ox.style&&"WebkitAppearance"in ox.style);let e=!0;return ox.style&&!function Zme(i){return"ebkit"==i.substring(1,6)}(i)&&(e=i in ox.style,!e&&BG&&(e="Webkit"+i.charAt(0).toUpperCase()+i.slice(1)in ox.style)),e}(t)}matchesElement(t,n){return!1}containsElement(t,n){return IG(t,n)}getParentElement(t){return EO(t)}query(t,n,r){return PG(t,n,r)}computeStyle(t,n,r){return r||""}animate(t,n,r,s,a,l=[],u){return new OS(r,s)}}return i.\u0275fac=function(t){return new(t||i)},i.\u0275prov=Ue({token:i,factory:i.\u0275fac}),i})(),DO=(()=>{class i{}return i.NOOP=new kG,i})();const BO="ng-enter",QD="ng-leave",WD="ng-trigger",jD=".ng-trigger",OG="ng-animating",IO=".ng-animating";function X_(i){if("number"==typeof i)return i;const e=i.match(/^(-?[\.\d]+)(m?s)/);return!e||e.length<2?0:PO(parseFloat(e[1]),e[2])}function PO(i,e){return"s"===e?1e3*i:i}function $D(i,e,t){return i.hasOwnProperty("duration")?i:function ige(i,e,t){let r,s=0,a="";if("string"==typeof i){const l=i.match(/^(-?[\.\d]+)(m?s)(?:\s+(-?[\.\d]+)(m?s))?(?:\s+([-a-z]+(?:\(.+?\))?))?$/i);if(null===l)return e.push(MG()),{duration:0,delay:0,easing:""};r=PO(parseFloat(l[1]),l[2]);const u=l[3];null!=u&&(s=PO(parseFloat(u),l[4]));const d=l[5];d&&(a=d)}else r=i;if(!t){let l=!1,u=e.length;r<0&&(e.push(function gme(){return new fi(3100,!1)}()),l=!0),s<0&&(e.push(function _me(){return new fi(3101,!1)}()),l=!0),l&&e.splice(u,0,MG())}return{duration:r,delay:s,easing:a}}(i,e,t)}function d3(i,e={}){return Object.keys(i).forEach(t=>{e[t]=i[t]}),e}function RG(i){const e=new Map;return Object.keys(i).forEach(t=>{e.set(t,i[t])}),e}function Hy(i,e=new Map,t){if(t)for(let[n,r]of t)e.set(n,r);for(let[n,r]of i)e.set(n,r);return e}function NG(i,e,t){return t?e+":"+t+";":""}function UG(i){let e="";for(let t=0;t{const s=FO(r);t&&!t.has(r)&&t.set(r,i.style[s]),i.style[s]=n}),wO()&&UG(i))}function ax(i,e){i.style&&(e.forEach((t,n)=>{const r=FO(n);i.style[r]=""}),wO()&&UG(i))}function f3(i){return Array.isArray(i)?1==i.length?i[0]:Fz(i):i}const kO=new RegExp("{{\\s*(.+?)\\s*}}","g");function zG(i){let e=[];if("string"==typeof i){let t;for(;t=kO.exec(i);)e.push(t[1]);kO.lastIndex=0}return e}function p3(i,e,t){const n=i.toString(),r=n.replace(kO,(s,a)=>{let l=e[a];return null==l&&(t.push(function vme(i){return new fi(3003,!1)}()),l=""),l.toString()});return r==n?i:r}function XD(i){const e=[];let t=i.next();for(;!t.done;)e.push(t.value),t=i.next();return e}const oge=/-+([a-z0-9])/g;function FO(i){return i.replace(oge,(...e)=>e[1].toUpperCase())}function age(i){return i.replace(/([a-z])([A-Z])/g,"$1-$2").toLowerCase()}function $p(i,e,t){switch(e.type){case 7:return i.visitTrigger(e,t);case 0:return i.visitState(e,t);case 1:return i.visitTransition(e,t);case 2:return i.visitSequence(e,t);case 3:return i.visitGroup(e,t);case 4:return i.visitAnimate(e,t);case 5:return i.visitKeyframes(e,t);case 6:return i.visitStyle(e,t);case 8:return i.visitReference(e,t);case 9:return i.visitAnimateChild(e,t);case 10:return i.visitAnimateRef(e,t);case 11:return i.visitQuery(e,t);case 12:return i.visitStagger(e,t);default:throw function bme(i){return new fi(3004,!1)}()}}function HG(i,e){return window.getComputedStyle(i)[e]}function fge(i,e){const t=[];return"string"==typeof i?i.split(/\s*,\s*/).forEach(n=>function pge(i,e,t){if(":"==i[0]){const u=function Age(i,e){switch(i){case":enter":return"void => *";case":leave":return"* => void";case":increment":return(t,n)=>parseFloat(n)>parseFloat(t);case":decrement":return(t,n)=>parseFloat(n) *"}}(i,t);if("function"==typeof u)return void e.push(u);i=u}const n=i.match(/^(\*|[-\w]+)\s*()\s*(\*|[-\w]+)$/);if(null==n||n.length<4)return t.push(function Fme(i){return new fi(3015,!1)}()),e;const r=n[1],s=n[2],a=n[3];e.push(VG(r,a));"<"==s[0]&&!("*"==r&&"*"==a)&&e.push(VG(a,r))}(n,t,e)):t.push(i),t}const JD=new Set(["true","1"]),eB=new Set(["false","0"]);function VG(i,e){const t=JD.has(i)||eB.has(i),n=JD.has(e)||eB.has(e);return(r,s)=>{let a="*"==i||i==r,l="*"==e||e==s;return!a&&t&&"boolean"==typeof r&&(a=r?JD.has(i):eB.has(i)),!l&&n&&"boolean"==typeof s&&(l=s?JD.has(e):eB.has(e)),a&&l}}const mge=new RegExp("s*:selfs*,?","g");function OO(i,e,t,n){return new gge(i).build(e,t,n)}class gge{constructor(e){this._driver=e}build(e,t,n){const r=new vge(t);return this._resetContextStyleTimingState(r),$p(this,f3(e),r)}_resetContextStyleTimingState(e){e.currentQuerySelector="",e.collectedStyles=new Map,e.collectedStyles.set("",new Map),e.currentTime=0}visitTrigger(e,t){let n=t.queryCount=0,r=t.depCount=0;const s=[],a=[];return"@"==e.name.charAt(0)&&t.errors.push(function wme(){return new fi(3006,!1)}()),e.definitions.forEach(l=>{if(this._resetContextStyleTimingState(t),0==l.type){const u=l,d=u.name;d.toString().split(/\s*,\s*/).forEach(p=>{u.name=p,s.push(this.visitState(u,t))}),u.name=d}else if(1==l.type){const u=this.visitTransition(l,t);n+=u.queryCount,r+=u.depCount,a.push(u)}else t.errors.push(function Cme(){return new fi(3007,!1)}())}),{type:7,name:e.name,states:s,transitions:a,queryCount:n,depCount:r,options:null}}visitState(e,t){const n=this.visitStyle(e.styles,t),r=e.options&&e.options.params||null;if(n.containsDynamicStyles){const s=new Set,a=r||{};n.styles.forEach(l=>{l instanceof Map&&l.forEach(u=>{zG(u).forEach(d=>{a.hasOwnProperty(d)||s.add(d)})})}),s.size&&(XD(s.values()),t.errors.push(function Mme(i,e){return new fi(3008,!1)}()))}return{type:0,name:e.name,style:n,options:r?{params:r}:null}}visitTransition(e,t){t.queryCount=0,t.depCount=0;const n=$p(this,f3(e.animation),t);return{type:1,matchers:fge(e.expr,t.errors),animation:n,queryCount:t.queryCount,depCount:t.depCount,options:lx(e.options)}}visitSequence(e,t){return{type:2,steps:e.steps.map(n=>$p(this,n,t)),options:lx(e.options)}}visitGroup(e,t){const n=t.currentTime;let r=0;const s=e.steps.map(a=>{t.currentTime=n;const l=$p(this,a,t);return r=Math.max(r,t.currentTime),l});return t.currentTime=r,{type:3,steps:s,options:lx(e.options)}}visitAnimate(e,t){const n=function xge(i,e){if(i.hasOwnProperty("duration"))return i;if("number"==typeof i)return RO($D(i,e).duration,0,"");const t=i;if(t.split(/\s+/).some(s=>"{"==s.charAt(0)&&"{"==s.charAt(1))){const s=RO(0,0,"");return s.dynamic=!0,s.strValue=t,s}const r=$D(t,e);return RO(r.duration,r.delay,r.easing)}(e.timings,t.errors);t.currentAnimateTimings=n;let r,s=e.styles?e.styles:Kh({});if(5==s.type)r=this.visitKeyframes(s,t);else{let a=e.styles,l=!1;if(!a){l=!0;const d={};n.easing&&(d.easing=n.easing),a=Kh(d)}t.currentTime+=n.duration+n.delay;const u=this.visitStyle(a,t);u.isEmptyStep=l,r=u}return t.currentAnimateTimings=null,{type:4,timings:n,style:r,options:null}}visitStyle(e,t){const n=this._makeStyleAst(e,t);return this._validateStyleAst(n,t),n}_makeStyleAst(e,t){const n=[],r=Array.isArray(e.styles)?e.styles:[e.styles];for(let l of r)"string"==typeof l?l===q_?n.push(l):t.errors.push(new fi(3002,!1)):n.push(RG(l));let s=!1,a=null;return n.forEach(l=>{if(l instanceof Map&&(l.has("easing")&&(a=l.get("easing"),l.delete("easing")),!s))for(let u of l.values())if(u.toString().indexOf("{{")>=0){s=!0;break}}),{type:6,styles:n,easing:a,offset:e.offset,containsDynamicStyles:s,options:null}}_validateStyleAst(e,t){const n=t.currentAnimateTimings;let r=t.currentTime,s=t.currentTime;n&&s>0&&(s-=n.duration+n.delay),e.styles.forEach(a=>{"string"!=typeof a&&a.forEach((l,u)=>{const d=t.collectedStyles.get(t.currentQuerySelector),p=d.get(u);let y=!0;p&&(s!=r&&s>=p.startTime&&r<=p.endTime&&(t.errors.push(function Tme(i,e,t,n,r){return new fi(3010,!1)}()),y=!1),s=p.startTime),y&&d.set(u,{startTime:s,endTime:r}),t.options&&function sge(i,e,t){const n=e.params||{},r=zG(i);r.length&&r.forEach(s=>{n.hasOwnProperty(s)||t.push(function yme(i){return new fi(3001,!1)}())})}(l,t.options,t.errors)})})}visitKeyframes(e,t){const n={type:5,styles:[],options:null};if(!t.currentAnimateTimings)return t.errors.push(function Eme(){return new fi(3011,!1)}()),n;let s=0;const a=[];let l=!1,u=!1,d=0;const p=e.steps.map(ye=>{const Le=this._makeStyleAst(ye,t);let we=null!=Le.offset?Le.offset:function bge(i){if("string"==typeof i)return null;let e=null;if(Array.isArray(i))i.forEach(t=>{if(t instanceof Map&&t.has("offset")){const n=t;e=parseFloat(n.get("offset")),n.delete("offset")}});else if(i instanceof Map&&i.has("offset")){const t=i;e=parseFloat(t.get("offset")),t.delete("offset")}return e}(Le.styles),He=0;return null!=we&&(s++,He=Le.offset=we),u=u||He<0||He>1,l=l||He0&&s{const we=C>0?Le==O?1:C*Le:a[Le],He=we*se;t.currentTime=Q+W.delay+He,W.duration=He,this._validateStyleAst(ye,t),ye.offset=we,n.styles.push(ye)}),n}visitReference(e,t){return{type:8,animation:$p(this,f3(e.animation),t),options:lx(e.options)}}visitAnimateChild(e,t){return t.depCount++,{type:9,options:lx(e.options)}}visitAnimateRef(e,t){return{type:10,animation:this.visitReference(e.animation,t),options:lx(e.options)}}visitQuery(e,t){const n=t.currentQuerySelector,r=e.options||{};t.queryCount++,t.currentQuery=e;const[s,a]=function _ge(i){const e=!!i.split(/\s*,\s*/).find(t=>":self"==t);return e&&(i=i.replace(mge,"")),i=i.replace(/@\*/g,jD).replace(/@\w+/g,t=>jD+"-"+t.slice(1)).replace(/:animating/g,IO),[i,e]}(e.selector);t.currentQuerySelector=n.length?n+" "+s:s,jp(t.collectedStyles,t.currentQuerySelector,new Map);const l=$p(this,f3(e.animation),t);return t.currentQuery=null,t.currentQuerySelector=n,{type:11,selector:s,limit:r.limit||0,optional:!!r.optional,includeSelf:a,animation:l,originalSelector:e.selector,options:lx(e.options)}}visitStagger(e,t){t.currentQuery||t.errors.push(function Pme(){return new fi(3013,!1)}());const n="full"===e.timings?{duration:0,delay:0,easing:"full"}:$D(e.timings,t.errors,!0);return{type:12,animation:$p(this,f3(e.animation),t),timings:n,options:null}}}class vge{constructor(e){this.errors=e,this.queryCount=0,this.depCount=0,this.currentTransition=null,this.currentQuery=null,this.currentQuerySelector=null,this.currentAnimateTimings=null,this.currentTime=0,this.collectedStyles=new Map,this.options=null,this.unsupportedCSSPropertiesFound=new Set}}function lx(i){return i?(i=d3(i)).params&&(i.params=function yge(i){return i?d3(i):null}(i.params)):i={},i}function RO(i,e,t){return{duration:i,delay:e,easing:t}}function LO(i,e,t,n,r,s,a=null,l=!1){return{type:1,element:i,keyframes:e,preStyleProps:t,postStyleProps:n,duration:r,delay:s,totalTime:r+s,easing:a,subTimeline:l}}class tB{constructor(){this._map=new Map}get(e){return this._map.get(e)||[]}append(e,t){let n=this._map.get(e);n||this._map.set(e,n=[]),n.push(...t)}has(e){return this._map.has(e)}clear(){this._map.clear()}}const Mge=new RegExp(":enter","g"),Tge=new RegExp(":leave","g");function NO(i,e,t,n,r,s=new Map,a=new Map,l,u,d=[]){return(new Ege).buildKeyframes(i,e,t,n,r,s,a,l,u,d)}class Ege{buildKeyframes(e,t,n,r,s,a,l,u,d,p=[]){d=d||new tB;const y=new UO(e,t,d,r,s,p,[]);y.options=u;const C=u.delay?X_(u.delay):0;y.currentTimeline.delayNextStep(C),y.currentTimeline.setStyles([a],null,y.errors,u),$p(this,n,y);const O=y.timelines.filter(Q=>Q.containsAnimation());if(O.length&&l.size){let Q;for(let W=O.length-1;W>=0;W--){const se=O[W];if(se.element===t){Q=se;break}}Q&&!Q.allowOnlyTimelineStyles()&&Q.setStyles([l],null,y.errors,u)}return O.length?O.map(Q=>Q.buildKeyframes()):[LO(t,[],[],[],0,C,"",!1)]}visitTrigger(e,t){}visitState(e,t){}visitTransition(e,t){}visitAnimateChild(e,t){const n=t.subInstructions.get(t.element);if(n){const r=t.createSubContext(e.options),s=t.currentTimeline.currentTime,a=this._visitSubInstructions(n,r,r.options);s!=a&&t.transformIntoNewTimeline(a)}t.previousNode=e}visitAnimateRef(e,t){const n=t.createSubContext(e.options);n.transformIntoNewTimeline(),this._applyAnimationRefDelays([e.options,e.animation.options],t,n),this.visitReference(e.animation,n),t.transformIntoNewTimeline(n.currentTimeline.currentTime),t.previousNode=e}_applyAnimationRefDelays(e,t,n){for(const r of e){const s=r?.delay;if(s){const a="number"==typeof s?s:X_(p3(s,r?.params??{},t.errors));n.delayNextStep(a)}}}_visitSubInstructions(e,t,n){let s=t.currentTimeline.currentTime;const a=null!=n.duration?X_(n.duration):null,l=null!=n.delay?X_(n.delay):null;return 0!==a&&e.forEach(u=>{const d=t.appendInstructionToTimeline(u,a,l);s=Math.max(s,d.duration+d.delay)}),s}visitReference(e,t){t.updateOptions(e.options,!0),$p(this,e.animation,t),t.previousNode=e}visitSequence(e,t){const n=t.subContextCount;let r=t;const s=e.options;if(s&&(s.params||s.delay)&&(r=t.createSubContext(s),r.transformIntoNewTimeline(),null!=s.delay)){6==r.previousNode.type&&(r.currentTimeline.snapshotCurrentStyles(),r.previousNode=nB);const a=X_(s.delay);r.delayNextStep(a)}e.steps.length&&(e.steps.forEach(a=>$p(this,a,r)),r.currentTimeline.applyStylesToKeyframe(),r.subContextCount>n&&r.transformIntoNewTimeline()),t.previousNode=e}visitGroup(e,t){const n=[];let r=t.currentTimeline.currentTime;const s=e.options&&e.options.delay?X_(e.options.delay):0;e.steps.forEach(a=>{const l=t.createSubContext(e.options);s&&l.delayNextStep(s),$p(this,a,l),r=Math.max(r,l.currentTimeline.currentTime),n.push(l.currentTimeline)}),n.forEach(a=>t.currentTimeline.mergeTimelineCollectedStyles(a)),t.transformIntoNewTimeline(r),t.previousNode=e}_visitTiming(e,t){if(e.dynamic){const n=e.strValue;return $D(t.params?p3(n,t.params,t.errors):n,t.errors)}return{duration:e.duration,delay:e.delay,easing:e.easing}}visitAnimate(e,t){const n=t.currentAnimateTimings=this._visitTiming(e.timings,t),r=t.currentTimeline;n.delay&&(t.incrementTime(n.delay),r.snapshotCurrentStyles());const s=e.style;5==s.type?this.visitKeyframes(s,t):(t.incrementTime(n.duration),this.visitStyle(s,t),r.applyStylesToKeyframe()),t.currentAnimateTimings=null,t.previousNode=e}visitStyle(e,t){const n=t.currentTimeline,r=t.currentAnimateTimings;!r&&n.hasCurrentStyleProperties()&&n.forwardFrame();const s=r&&r.easing||e.easing;e.isEmptyStep?n.applyEmptyStep(s):n.setStyles(e.styles,s,t.errors,t.options),t.previousNode=e}visitKeyframes(e,t){const n=t.currentAnimateTimings,r=t.currentTimeline.duration,s=n.duration,l=t.createSubContext().currentTimeline;l.easing=n.easing,e.styles.forEach(u=>{l.forwardTime((u.offset||0)*s),l.setStyles(u.styles,u.easing,t.errors,t.options),l.applyStylesToKeyframe()}),t.currentTimeline.mergeTimelineCollectedStyles(l),t.transformIntoNewTimeline(r+s),t.previousNode=e}visitQuery(e,t){const n=t.currentTimeline.currentTime,r=e.options||{},s=r.delay?X_(r.delay):0;s&&(6===t.previousNode.type||0==n&&t.currentTimeline.hasCurrentStyleProperties())&&(t.currentTimeline.snapshotCurrentStyles(),t.previousNode=nB);let a=n;const l=t.invokeQuery(e.selector,e.originalSelector,e.limit,e.includeSelf,!!r.optional,t.errors);t.currentQueryTotal=l.length;let u=null;l.forEach((d,p)=>{t.currentQueryIndex=p;const y=t.createSubContext(e.options,d);s&&y.delayNextStep(s),d===t.element&&(u=y.currentTimeline),$p(this,e.animation,y),y.currentTimeline.applyStylesToKeyframe(),a=Math.max(a,y.currentTimeline.currentTime)}),t.currentQueryIndex=0,t.currentQueryTotal=0,t.transformIntoNewTimeline(a),u&&(t.currentTimeline.mergeTimelineCollectedStyles(u),t.currentTimeline.snapshotCurrentStyles()),t.previousNode=e}visitStagger(e,t){const n=t.parentContext,r=t.currentTimeline,s=e.timings,a=Math.abs(s.duration),l=a*(t.currentQueryTotal-1);let u=a*t.currentQueryIndex;switch(s.duration<0?"reverse":s.easing){case"reverse":u=l-u;break;case"full":u=n.currentStaggerTime}const p=t.currentTimeline;u&&p.delayNextStep(u);const y=p.currentTime;$p(this,e.animation,t),t.previousNode=e,n.currentStaggerTime=r.currentTime-y+(r.startTime-n.currentTimeline.startTime)}}const nB={};class UO{constructor(e,t,n,r,s,a,l,u){this._driver=e,this.element=t,this.subInstructions=n,this._enterClassName=r,this._leaveClassName=s,this.errors=a,this.timelines=l,this.parentContext=null,this.currentAnimateTimings=null,this.previousNode=nB,this.subContextCount=0,this.options={},this.currentQueryIndex=0,this.currentQueryTotal=0,this.currentStaggerTime=0,this.currentTimeline=u||new iB(this._driver,t,0),l.push(this.currentTimeline)}get params(){return this.options.params}updateOptions(e,t){if(!e)return;const n=e;let r=this.options;null!=n.duration&&(r.duration=X_(n.duration)),null!=n.delay&&(r.delay=X_(n.delay));const s=n.params;if(s){let a=r.params;a||(a=this.options.params={}),Object.keys(s).forEach(l=>{(!t||!a.hasOwnProperty(l))&&(a[l]=p3(s[l],a,this.errors))})}}_copyOptions(){const e={};if(this.options){const t=this.options.params;if(t){const n=e.params={};Object.keys(t).forEach(r=>{n[r]=t[r]})}}return e}createSubContext(e=null,t,n){const r=t||this.element,s=new UO(this._driver,r,this.subInstructions,this._enterClassName,this._leaveClassName,this.errors,this.timelines,this.currentTimeline.fork(r,n||0));return s.previousNode=this.previousNode,s.currentAnimateTimings=this.currentAnimateTimings,s.options=this._copyOptions(),s.updateOptions(e),s.currentQueryIndex=this.currentQueryIndex,s.currentQueryTotal=this.currentQueryTotal,s.parentContext=this,this.subContextCount++,s}transformIntoNewTimeline(e){return this.previousNode=nB,this.currentTimeline=this.currentTimeline.fork(this.element,e),this.timelines.push(this.currentTimeline),this.currentTimeline}appendInstructionToTimeline(e,t,n){const r={duration:t??e.duration,delay:this.currentTimeline.currentTime+(n??0)+e.delay,easing:""},s=new Dge(this._driver,e.element,e.keyframes,e.preStyleProps,e.postStyleProps,r,e.stretchStartingKeyframe);return this.timelines.push(s),r}incrementTime(e){this.currentTimeline.forwardTime(this.currentTimeline.duration+e)}delayNextStep(e){e>0&&this.currentTimeline.delayNextStep(e)}invokeQuery(e,t,n,r,s,a){let l=[];if(r&&l.push(this.element),e.length>0){e=(e=e.replace(Mge,"."+this._enterClassName)).replace(Tge,"."+this._leaveClassName);let d=this._driver.query(this.element,e,1!=n);0!==n&&(d=n<0?d.slice(d.length+n,d.length):d.slice(0,n)),l.push(...d)}return!s&&0==l.length&&a.push(function kme(i){return new fi(3014,!1)}()),l}}class iB{constructor(e,t,n,r){this._driver=e,this.element=t,this.startTime=n,this._elementTimelineStylesLookup=r,this.duration=0,this._previousKeyframe=new Map,this._currentKeyframe=new Map,this._keyframes=new Map,this._styleSummary=new Map,this._localTimelineStyles=new Map,this._pendingStyles=new Map,this._backFill=new Map,this._currentEmptyStepKeyframe=null,this._elementTimelineStylesLookup||(this._elementTimelineStylesLookup=new Map),this._globalTimelineStyles=this._elementTimelineStylesLookup.get(t),this._globalTimelineStyles||(this._globalTimelineStyles=this._localTimelineStyles,this._elementTimelineStylesLookup.set(t,this._localTimelineStyles)),this._loadKeyframe()}containsAnimation(){switch(this._keyframes.size){case 0:return!1;case 1:return this.hasCurrentStyleProperties();default:return!0}}hasCurrentStyleProperties(){return this._currentKeyframe.size>0}get currentTime(){return this.startTime+this.duration}delayNextStep(e){const t=1===this._keyframes.size&&this._pendingStyles.size;this.duration||t?(this.forwardTime(this.currentTime+e),t&&this.snapshotCurrentStyles()):this.startTime+=e}fork(e,t){return this.applyStylesToKeyframe(),new iB(this._driver,e,t||this.currentTime,this._elementTimelineStylesLookup)}_loadKeyframe(){this._currentKeyframe&&(this._previousKeyframe=this._currentKeyframe),this._currentKeyframe=this._keyframes.get(this.duration),this._currentKeyframe||(this._currentKeyframe=new Map,this._keyframes.set(this.duration,this._currentKeyframe))}forwardFrame(){this.duration+=1,this._loadKeyframe()}forwardTime(e){this.applyStylesToKeyframe(),this.duration=e,this._loadKeyframe()}_updateStyle(e,t){this._localTimelineStyles.set(e,t),this._globalTimelineStyles.set(e,t),this._styleSummary.set(e,{time:this.currentTime,value:t})}allowOnlyTimelineStyles(){return this._currentEmptyStepKeyframe!==this._currentKeyframe}applyEmptyStep(e){e&&this._previousKeyframe.set("easing",e);for(let[t,n]of this._globalTimelineStyles)this._backFill.set(t,n||q_),this._currentKeyframe.set(t,q_);this._currentEmptyStepKeyframe=this._currentKeyframe}setStyles(e,t,n,r){t&&this._previousKeyframe.set("easing",t);const s=r&&r.params||{},a=function Bge(i,e){const t=new Map;let n;return i.forEach(r=>{if("*"===r){n=n||e.keys();for(let s of n)t.set(s,q_)}else Hy(r,t)}),t}(e,this._globalTimelineStyles);for(let[l,u]of a){const d=p3(u,s,n);this._pendingStyles.set(l,d),this._localTimelineStyles.has(l)||this._backFill.set(l,this._globalTimelineStyles.get(l)??q_),this._updateStyle(l,d)}}applyStylesToKeyframe(){0!=this._pendingStyles.size&&(this._pendingStyles.forEach((e,t)=>{this._currentKeyframe.set(t,e)}),this._pendingStyles.clear(),this._localTimelineStyles.forEach((e,t)=>{this._currentKeyframe.has(t)||this._currentKeyframe.set(t,e)}))}snapshotCurrentStyles(){for(let[e,t]of this._localTimelineStyles)this._pendingStyles.set(e,t),this._updateStyle(e,t)}getFinalKeyframe(){return this._keyframes.get(this.duration)}get properties(){const e=[];for(let t in this._currentKeyframe)e.push(t);return e}mergeTimelineCollectedStyles(e){e._styleSummary.forEach((t,n)=>{const r=this._styleSummary.get(n);(!r||t.time>r.time)&&this._updateStyle(n,t.value)})}buildKeyframes(){this.applyStylesToKeyframe();const e=new Set,t=new Set,n=1===this._keyframes.size&&0===this.duration;let r=[];this._keyframes.forEach((l,u)=>{const d=Hy(l,new Map,this._backFill);d.forEach((p,y)=>{"!"===p?e.add(y):p===q_&&t.add(y)}),n||d.set("offset",u/this.duration),r.push(d)});const s=e.size?XD(e.values()):[],a=t.size?XD(t.values()):[];if(n){const l=r[0],u=new Map(l);l.set("offset",0),u.set("offset",1),r=[l,u]}return LO(this.element,r,s,a,this.duration,this.startTime,this.easing,!1)}}class Dge extends iB{constructor(e,t,n,r,s,a,l=!1){super(e,t,a.delay),this.keyframes=n,this.preStyleProps=r,this.postStyleProps=s,this._stretchStartingKeyframe=l,this.timings={duration:a.duration,delay:a.delay,easing:a.easing}}containsAnimation(){return this.keyframes.length>1}buildKeyframes(){let e=this.keyframes,{delay:t,duration:n,easing:r}=this.timings;if(this._stretchStartingKeyframe&&t){const s=[],a=n+t,l=t/a,u=Hy(e[0]);u.set("offset",0),s.push(u);const d=Hy(e[0]);d.set("offset",QG(l)),s.push(d);const p=e.length-1;for(let y=1;y<=p;y++){let C=Hy(e[y]);const O=C.get("offset");C.set("offset",QG((t+O*n)/a)),s.push(C)}n=a,t=0,r="",e=s}return LO(this.element,e,this.preStyleProps,this.postStyleProps,n,t,r,!0)}}function QG(i,e=3){const t=Math.pow(10,e-1);return Math.round(i*t)/t}class zO{}const Ige=new Set(["width","height","minWidth","minHeight","maxWidth","maxHeight","left","top","bottom","right","fontSize","outlineWidth","outlineOffset","paddingTop","paddingLeft","paddingBottom","paddingRight","marginTop","marginLeft","marginBottom","marginRight","borderRadius","borderWidth","borderTopWidth","borderLeftWidth","borderRightWidth","borderBottomWidth","textIndent","perspective"]);class Pge extends zO{normalizePropertyName(e,t){return FO(e)}normalizeStyleValue(e,t,n,r){let s="";const a=n.toString().trim();if(Ige.has(t)&&0!==n&&"0"!==n)if("number"==typeof n)s="px";else{const l=n.match(/^[+-]?[\d\.]+([a-z]*)$/);l&&0==l[1].length&&r.push(function xme(i,e){return new fi(3005,!1)}())}return a+s}}function WG(i,e,t,n,r,s,a,l,u,d,p,y,C){return{type:0,element:i,triggerName:e,isRemovalTransition:r,fromState:t,fromStyles:s,toState:n,toStyles:a,timelines:l,queriedElements:u,preStyleProps:d,postStyleProps:p,totalTime:y,errors:C}}const HO={};class jG{constructor(e,t,n){this._triggerName=e,this.ast=t,this._stateStyles=n}match(e,t,n,r){return function kge(i,e,t,n,r){return i.some(s=>s(e,t,n,r))}(this.ast.matchers,e,t,n,r)}buildStyles(e,t,n){let r=this._stateStyles.get("*");return void 0!==e&&(r=this._stateStyles.get(e?.toString())||r),r?r.buildStyles(t,n):new Map}build(e,t,n,r,s,a,l,u,d,p){const y=[],C=this.ast.options&&this.ast.options.params||HO,Q=this.buildStyles(n,l&&l.params||HO,y),W=u&&u.params||HO,se=this.buildStyles(r,W,y),ye=new Set,Le=new Map,we=new Map,He="void"===r,gt={params:Fge(W,C),delay:this.ast.options?.delay},Et=p?[]:NO(e,t,this.ast.animation,s,a,Q,se,gt,d,y);let Yt=0;if(Et.forEach(Ut=>{Yt=Math.max(Ut.duration+Ut.delay,Yt)}),y.length)return WG(t,this._triggerName,n,r,He,Q,se,[],[],Le,we,Yt,y);Et.forEach(Ut=>{const _n=Ut.element,Hn=jp(Le,_n,new Set);Ut.preStyleProps.forEach(Vn=>Hn.add(Vn));const gi=jp(we,_n,new Set);Ut.postStyleProps.forEach(Vn=>gi.add(Vn)),_n!==t&&ye.add(_n)});const dt=XD(ye.values());return WG(t,this._triggerName,n,r,He,Q,se,Et,dt,Le,we,Yt)}}function Fge(i,e){const t=d3(e);for(const n in i)i.hasOwnProperty(n)&&null!=i[n]&&(t[n]=i[n]);return t}class Oge{constructor(e,t,n){this.styles=e,this.defaultParams=t,this.normalizer=n}buildStyles(e,t){const n=new Map,r=d3(this.defaultParams);return Object.keys(e).forEach(s=>{const a=e[s];null!==a&&(r[s]=a)}),this.styles.styles.forEach(s=>{"string"!=typeof s&&s.forEach((a,l)=>{a&&(a=p3(a,r,t));const u=this.normalizer.normalizePropertyName(l,t);a=this.normalizer.normalizeStyleValue(l,u,a,t),n.set(l,a)})}),n}}class Lge{constructor(e,t,n){this.name=e,this.ast=t,this._normalizer=n,this.transitionFactories=[],this.states=new Map,t.states.forEach(r=>{this.states.set(r.name,new Oge(r.style,r.options&&r.options.params||{},n))}),$G(this.states,"true","1"),$G(this.states,"false","0"),t.transitions.forEach(r=>{this.transitionFactories.push(new jG(e,r,this.states))}),this.fallbackTransition=function Nge(i,e,t){return new jG(i,{type:1,animation:{type:2,steps:[],options:null},matchers:[(a,l)=>!0],options:null,queryCount:0,depCount:0},e)}(e,this.states)}get containsQueries(){return this.ast.queryCount>0}matchTransition(e,t,n,r){return this.transitionFactories.find(a=>a.match(e,t,n,r))||null}matchStyles(e,t,n){return this.fallbackTransition.buildStyles(e,t,n)}}function $G(i,e,t){i.has(e)?i.has(t)||i.set(t,i.get(e)):i.has(t)&&i.set(e,i.get(t))}const Uge=new tB;class zge{constructor(e,t,n){this.bodyNode=e,this._driver=t,this._normalizer=n,this._animations=new Map,this._playersById=new Map,this.players=[]}register(e,t){const n=[],s=OO(this._driver,t,n,[]);if(n.length)throw function zme(i){return new fi(3503,!1)}();this._animations.set(e,s)}_buildPlayer(e,t,n){const r=e.element,s=SG(0,this._normalizer,0,e.keyframes,t,n);return this._driver.animate(r,s,e.duration,e.delay,e.easing,[],!0)}create(e,t,n={}){const r=[],s=this._animations.get(e);let a;const l=new Map;if(s?(a=NO(this._driver,t,s,BO,QD,new Map,new Map,n,Uge,r),a.forEach(p=>{const y=jp(l,p.element,new Map);p.postStyleProps.forEach(C=>y.set(C,null))})):(r.push(function Hme(){return new fi(3300,!1)}()),a=[]),r.length)throw function Vme(i){return new fi(3504,!1)}();l.forEach((p,y)=>{p.forEach((C,O)=>{p.set(O,this._driver.computeStyle(y,O,q_))})});const d=zy(a.map(p=>{const y=l.get(p.element);return this._buildPlayer(p,new Map,y)}));return this._playersById.set(e,d),d.onDestroy(()=>this.destroy(e)),this.players.push(d),d}destroy(e){const t=this._getPlayer(e);t.destroy(),this._playersById.delete(e);const n=this.players.indexOf(t);n>=0&&this.players.splice(n,1)}_getPlayer(e){const t=this._playersById.get(e);if(!t)throw function Gme(i){return new fi(3301,!1)}();return t}listen(e,t,n,r){const s=SO(t,"","","");return CO(this._getPlayer(e),n,s,r),()=>{}}command(e,t,n,r){if("register"==n)return void this.register(e,r[0]);if("create"==n)return void this.create(e,t,r[0]||{});const s=this._getPlayer(e);switch(n){case"play":s.play();break;case"pause":s.pause();break;case"reset":s.reset();break;case"restart":s.restart();break;case"finish":s.finish();break;case"init":s.init();break;case"setPosition":s.setPosition(parseFloat(r[0]));break;case"destroy":this.destroy(e)}}}const XG="ng-animate-queued",VO="ng-animate-disabled",Qge=[],KG={namespaceId:"",setForRemoval:!1,setForMove:!1,hasAnimation:!1,removedBeforeQueried:!1},Wge={namespaceId:"",setForMove:!1,setForRemoval:!1,hasAnimation:!1,removedBeforeQueried:!0},WA="__ng_removed";class GO{get params(){return this.options.params}constructor(e,t=""){this.namespaceId=t;const n=e&&e.hasOwnProperty("value");if(this.value=function Kge(i){return i??null}(n?e.value:e),n){const s=d3(e);delete s.value,this.options=s}else this.options={};this.options.params||(this.options.params={})}absorbOptions(e){const t=e.params;if(t){const n=this.options.params;Object.keys(t).forEach(r=>{null==n[r]&&(n[r]=t[r])})}}}const A3="void",qO=new GO(A3);class jge{constructor(e,t,n){this.id=e,this.hostElement=t,this._engine=n,this.players=[],this._triggers=new Map,this._queue=[],this._elementListeners=new Map,this._hostClassName="ng-tns-"+e,jA(t,this._hostClassName)}listen(e,t,n,r){if(!this._triggers.has(t))throw function qme(i,e){return new fi(3302,!1)}();if(null==n||0==n.length)throw function Qme(i){return new fi(3303,!1)}();if(!function Yge(i){return"start"==i||"done"==i}(n))throw function Wme(i,e){return new fi(3400,!1)}();const s=jp(this._elementListeners,e,[]),a={name:t,phase:n,callback:r};s.push(a);const l=jp(this._engine.statesByElement,e,new Map);return l.has(t)||(jA(e,WD),jA(e,WD+"-"+t),l.set(t,qO)),()=>{this._engine.afterFlush(()=>{const u=s.indexOf(a);u>=0&&s.splice(u,1),this._triggers.has(t)||l.delete(t)})}}register(e,t){return!this._triggers.has(e)&&(this._triggers.set(e,t),!0)}_getTrigger(e){const t=this._triggers.get(e);if(!t)throw function jme(i){return new fi(3401,!1)}();return t}trigger(e,t,n,r=!0){const s=this._getTrigger(t),a=new QO(this.id,t,e);let l=this._engine.statesByElement.get(e);l||(jA(e,WD),jA(e,WD+"-"+t),this._engine.statesByElement.set(e,l=new Map));let u=l.get(t);const d=new GO(n,this.id);if(!(n&&n.hasOwnProperty("value"))&&u&&d.absorbOptions(u.options),l.set(t,d),u||(u=qO),d.value!==A3&&u.value===d.value){if(!function e0e(i,e){const t=Object.keys(i),n=Object.keys(e);if(t.length!=n.length)return!1;for(let r=0;r{ax(e,se),v0(e,ye)})}return}const C=jp(this._engine.playersByElement,e,[]);C.forEach(W=>{W.namespaceId==this.id&&W.triggerName==t&&W.queued&&W.destroy()});let O=s.matchTransition(u.value,d.value,e,d.params),Q=!1;if(!O){if(!r)return;O=s.fallbackTransition,Q=!0}return this._engine.totalQueuedPlayers++,this._queue.push({element:e,triggerName:t,transition:O,fromState:u,toState:d,player:a,isFallbackTransition:Q}),Q||(jA(e,XG),a.onStart(()=>{$2(e,XG)})),a.onDone(()=>{let W=this.players.indexOf(a);W>=0&&this.players.splice(W,1);const se=this._engine.playersByElement.get(e);if(se){let ye=se.indexOf(a);ye>=0&&se.splice(ye,1)}}),this.players.push(a),C.push(a),a}deregister(e){this._triggers.delete(e),this._engine.statesByElement.forEach(t=>t.delete(e)),this._elementListeners.forEach((t,n)=>{this._elementListeners.set(n,t.filter(r=>r.name!=e))})}clearElementCache(e){this._engine.statesByElement.delete(e),this._elementListeners.delete(e);const t=this._engine.playersByElement.get(e);t&&(t.forEach(n=>n.destroy()),this._engine.playersByElement.delete(e))}_signalRemovalForInnerTriggers(e,t){const n=this._engine.driver.query(e,jD,!0);n.forEach(r=>{if(r[WA])return;const s=this._engine.fetchNamespacesByElement(r);s.size?s.forEach(a=>a.triggerLeaveAnimation(r,t,!1,!0)):this.clearElementCache(r)}),this._engine.afterFlushAnimationsDone(()=>n.forEach(r=>this.clearElementCache(r)))}triggerLeaveAnimation(e,t,n,r){const s=this._engine.statesByElement.get(e),a=new Map;if(s){const l=[];if(s.forEach((u,d)=>{if(a.set(d,u.value),this._triggers.has(d)){const p=this.trigger(e,d,A3,r);p&&l.push(p)}}),l.length)return this._engine.markElementAsRemoved(this.id,e,!0,t,a),n&&zy(l).onDone(()=>this._engine.processLeaveNode(e)),!0}return!1}prepareLeaveAnimationListeners(e){const t=this._elementListeners.get(e),n=this._engine.statesByElement.get(e);if(t&&n){const r=new Set;t.forEach(s=>{const a=s.name;if(r.has(a))return;r.add(a);const u=this._triggers.get(a).fallbackTransition,d=n.get(a)||qO,p=new GO(A3),y=new QO(this.id,a,e);this._engine.totalQueuedPlayers++,this._queue.push({element:e,triggerName:a,transition:u,fromState:d,toState:p,player:y,isFallbackTransition:!0})})}}removeNode(e,t){const n=this._engine;if(e.childElementCount&&this._signalRemovalForInnerTriggers(e,t),this.triggerLeaveAnimation(e,t,!0))return;let r=!1;if(n.totalAnimations){const s=n.players.length?n.playersByQueriedElement.get(e):[];if(s&&s.length)r=!0;else{let a=e;for(;a=a.parentNode;)if(n.statesByElement.get(a)){r=!0;break}}}if(this.prepareLeaveAnimationListeners(e),r)n.markElementAsRemoved(this.id,e,!1,t);else{const s=e[WA];(!s||s===KG)&&(n.afterFlush(()=>this.clearElementCache(e)),n.destroyInnerAnimations(e),n._onRemovalComplete(e,t))}}insertNode(e,t){jA(e,this._hostClassName)}drainQueuedTransitions(e){const t=[];return this._queue.forEach(n=>{const r=n.player;if(r.destroyed)return;const s=n.element,a=this._elementListeners.get(s);a&&a.forEach(l=>{if(l.name==n.triggerName){const u=SO(s,n.triggerName,n.fromState.value,n.toState.value);u._data=e,CO(n.player,l.phase,u,l.callback)}}),r.markedForDestroy?this._engine.afterFlush(()=>{r.destroy()}):t.push(n)}),this._queue=[],t.sort((n,r)=>{const s=n.transition.ast.depCount,a=r.transition.ast.depCount;return 0==s||0==a?s-a:this._engine.driver.containsElement(n.element,r.element)?1:-1})}destroy(e){this.players.forEach(t=>t.destroy()),this._signalRemovalForInnerTriggers(this.hostElement,e)}elementContainsData(e){let t=!1;return this._elementListeners.has(e)&&(t=!0),t=!!this._queue.find(n=>n.element===e)||t,t}}class $ge{_onRemovalComplete(e,t){this.onRemovalComplete(e,t)}constructor(e,t,n){this.bodyNode=e,this.driver=t,this._normalizer=n,this.players=[],this.newHostElements=new Map,this.playersByElement=new Map,this.playersByQueriedElement=new Map,this.statesByElement=new Map,this.disabledNodes=new Set,this.totalAnimations=0,this.totalQueuedPlayers=0,this._namespaceLookup={},this._namespaceList=[],this._flushFns=[],this._whenQuietFns=[],this.namespacesByHostElement=new Map,this.collectedEnterElements=[],this.collectedLeaveElements=[],this.onRemovalComplete=(r,s)=>{}}get queuedPlayers(){const e=[];return this._namespaceList.forEach(t=>{t.players.forEach(n=>{n.queued&&e.push(n)})}),e}createNamespace(e,t){const n=new jge(e,t,this);return this.bodyNode&&this.driver.containsElement(this.bodyNode,t)?this._balanceNamespaceList(n,t):(this.newHostElements.set(t,n),this.collectEnterElement(t)),this._namespaceLookup[e]=n}_balanceNamespaceList(e,t){const n=this._namespaceList,r=this.namespacesByHostElement;if(n.length-1>=0){let a=!1,l=this.driver.getParentElement(t);for(;l;){const u=r.get(l);if(u){const d=n.indexOf(u);n.splice(d+1,0,e),a=!0;break}l=this.driver.getParentElement(l)}a||n.unshift(e)}else n.push(e);return r.set(t,e),e}register(e,t){let n=this._namespaceLookup[e];return n||(n=this.createNamespace(e,t)),n}registerTrigger(e,t,n){let r=this._namespaceLookup[e];r&&r.register(t,n)&&this.totalAnimations++}destroy(e,t){if(!e)return;const n=this._fetchNamespace(e);this.afterFlush(()=>{this.namespacesByHostElement.delete(n.hostElement),delete this._namespaceLookup[e];const r=this._namespaceList.indexOf(n);r>=0&&this._namespaceList.splice(r,1)}),this.afterFlushAnimationsDone(()=>n.destroy(t))}_fetchNamespace(e){return this._namespaceLookup[e]}fetchNamespacesByElement(e){const t=new Set,n=this.statesByElement.get(e);if(n)for(let r of n.values())if(r.namespaceId){const s=this._fetchNamespace(r.namespaceId);s&&t.add(s)}return t}trigger(e,t,n,r){if(rB(t)){const s=this._fetchNamespace(e);if(s)return s.trigger(t,n,r),!0}return!1}insertNode(e,t,n,r){if(!rB(t))return;const s=t[WA];if(s&&s.setForRemoval){s.setForRemoval=!1,s.setForMove=!0;const a=this.collectedLeaveElements.indexOf(t);a>=0&&this.collectedLeaveElements.splice(a,1)}if(e){const a=this._fetchNamespace(e);a&&a.insertNode(t,n)}r&&this.collectEnterElement(t)}collectEnterElement(e){this.collectedEnterElements.push(e)}markElementAsDisabled(e,t){t?this.disabledNodes.has(e)||(this.disabledNodes.add(e),jA(e,VO)):this.disabledNodes.has(e)&&(this.disabledNodes.delete(e),$2(e,VO))}removeNode(e,t,n,r){if(rB(t)){const s=e?this._fetchNamespace(e):null;if(s?s.removeNode(t,r):this.markElementAsRemoved(e,t,!1,r),n){const a=this.namespacesByHostElement.get(t);a&&a.id!==e&&a.removeNode(t,r)}}else this._onRemovalComplete(t,r)}markElementAsRemoved(e,t,n,r,s){this.collectedLeaveElements.push(t),t[WA]={namespaceId:e,setForRemoval:r,hasAnimation:n,removedBeforeQueried:!1,previousTriggersValues:s}}listen(e,t,n,r,s){return rB(t)?this._fetchNamespace(e).listen(t,n,r,s):()=>{}}_buildInstruction(e,t,n,r,s){return e.transition.build(this.driver,e.element,e.fromState.value,e.toState.value,n,r,e.fromState.options,e.toState.options,t,s)}destroyInnerAnimations(e){let t=this.driver.query(e,jD,!0);t.forEach(n=>this.destroyActiveAnimationsForElement(n)),0!=this.playersByQueriedElement.size&&(t=this.driver.query(e,IO,!0),t.forEach(n=>this.finishActiveQueriedAnimationOnElement(n)))}destroyActiveAnimationsForElement(e){const t=this.playersByElement.get(e);t&&t.forEach(n=>{n.queued?n.markedForDestroy=!0:n.destroy()})}finishActiveQueriedAnimationOnElement(e){const t=this.playersByQueriedElement.get(e);t&&t.forEach(n=>n.finish())}whenRenderingDone(){return new Promise(e=>{if(this.players.length)return zy(this.players).onDone(()=>e());e()})}processLeaveNode(e){const t=e[WA];if(t&&t.setForRemoval){if(e[WA]=KG,t.namespaceId){this.destroyInnerAnimations(e);const n=this._fetchNamespace(t.namespaceId);n&&n.clearElementCache(e)}this._onRemovalComplete(e,t.setForRemoval)}e.classList?.contains(VO)&&this.markElementAsDisabled(e,!1),this.driver.query(e,".ng-animate-disabled",!0).forEach(n=>{this.markElementAsDisabled(n,!1)})}flush(e=-1){let t=[];if(this.newHostElements.size&&(this.newHostElements.forEach((n,r)=>this._balanceNamespaceList(n,r)),this.newHostElements.clear()),this.totalAnimations&&this.collectedEnterElements.length)for(let n=0;nn()),this._flushFns=[],this._whenQuietFns.length){const n=this._whenQuietFns;this._whenQuietFns=[],t.length?zy(t).onDone(()=>{n.forEach(r=>r())}):n.forEach(r=>r())}}reportError(e){throw function $me(i){return new fi(3402,!1)}()}_flushAnimations(e,t){const n=new tB,r=[],s=new Map,a=[],l=new Map,u=new Map,d=new Map,p=new Set;this.disabledNodes.forEach(qn=>{p.add(qn);const xi=this.driver.query(qn,".ng-animate-queued",!0);for(let si=0;si{const si=BO+W++;Q.set(xi,si),qn.forEach(zi=>jA(zi,si))});const se=[],ye=new Set,Le=new Set;for(let qn=0;qnye.add(zi)):Le.add(xi))}const we=new Map,He=JG(C,Array.from(ye));He.forEach((qn,xi)=>{const si=QD+W++;we.set(xi,si),qn.forEach(zi=>jA(zi,si))}),e.push(()=>{O.forEach((qn,xi)=>{const si=Q.get(xi);qn.forEach(zi=>$2(zi,si))}),He.forEach((qn,xi)=>{const si=we.get(xi);qn.forEach(zi=>$2(zi,si))}),se.forEach(qn=>{this.processLeaveNode(qn)})});const gt=[],Et=[];for(let qn=this._namespaceList.length-1;qn>=0;qn--)this._namespaceList[qn].drainQueuedTransitions(t).forEach(si=>{const zi=si.player,Ki=si.element;if(gt.push(zi),this.collectedEnterElements.length){const Es=Ki[WA];if(Es&&Es.setForMove){if(Es.previousTriggersValues&&Es.previousTriggersValues.has(si.triggerName)){const Ss=Es.previousTriggersValues.get(si.triggerName),Bs=this.statesByElement.get(si.element);if(Bs&&Bs.has(si.triggerName)){const $r=Bs.get(si.triggerName);$r.value=Ss,Bs.set(si.triggerName,$r)}}return void zi.destroy()}}const cs=!y||!this.driver.containsElement(y,Ki),oi=we.get(Ki),fr=Q.get(Ki),hr=this._buildInstruction(si,n,fr,oi,cs);if(hr.errors&&hr.errors.length)return void Et.push(hr);if(cs)return zi.onStart(()=>ax(Ki,hr.fromStyles)),zi.onDestroy(()=>v0(Ki,hr.toStyles)),void r.push(zi);if(si.isFallbackTransition)return zi.onStart(()=>ax(Ki,hr.fromStyles)),zi.onDestroy(()=>v0(Ki,hr.toStyles)),void r.push(zi);const Yr=[];hr.timelines.forEach(Es=>{Es.stretchStartingKeyframe=!0,this.disabledNodes.has(Es.element)||Yr.push(Es)}),hr.timelines=Yr,n.append(Ki,hr.timelines),a.push({instruction:hr,player:zi,element:Ki}),hr.queriedElements.forEach(Es=>jp(l,Es,[]).push(zi)),hr.preStyleProps.forEach((Es,Ss)=>{if(Es.size){let Bs=u.get(Ss);Bs||u.set(Ss,Bs=new Set),Es.forEach(($r,ta)=>Bs.add(ta))}}),hr.postStyleProps.forEach((Es,Ss)=>{let Bs=d.get(Ss);Bs||d.set(Ss,Bs=new Set),Es.forEach(($r,ta)=>Bs.add(ta))})});if(Et.length){const qn=[];Et.forEach(xi=>{qn.push(function Xme(i,e){return new fi(3505,!1)}())}),gt.forEach(xi=>xi.destroy()),this.reportError(qn)}const Yt=new Map,dt=new Map;a.forEach(qn=>{const xi=qn.element;n.has(xi)&&(dt.set(xi,xi),this._beforeAnimationBuild(qn.player.namespaceId,qn.instruction,Yt))}),r.forEach(qn=>{const xi=qn.element;this._getPreviousPlayers(xi,!1,qn.namespaceId,qn.triggerName,null).forEach(zi=>{jp(Yt,xi,[]).push(zi),zi.destroy()})});const Ut=se.filter(qn=>tq(qn,u,d)),_n=new Map;ZG(_n,this.driver,Le,d,q_).forEach(qn=>{tq(qn,u,d)&&Ut.push(qn)});const gi=new Map;O.forEach((qn,xi)=>{ZG(gi,this.driver,new Set(qn),u,"!")}),Ut.forEach(qn=>{const xi=_n.get(qn),si=gi.get(qn);_n.set(qn,new Map([...Array.from(xi?.entries()??[]),...Array.from(si?.entries()??[])]))});const Vn=[],Tn=[],yi={};a.forEach(qn=>{const{element:xi,player:si,instruction:zi}=qn;if(n.has(xi)){if(p.has(xi))return si.onDestroy(()=>v0(xi,zi.toStyles)),si.disabled=!0,si.overrideTotalTime(zi.totalTime),void r.push(si);let Ki=yi;if(dt.size>1){let oi=xi;const fr=[];for(;oi=oi.parentNode;){const hr=dt.get(oi);if(hr){Ki=hr;break}fr.push(oi)}fr.forEach(hr=>dt.set(hr,Ki))}const cs=this._buildAnimation(si.namespaceId,zi,Yt,s,gi,_n);if(si.setRealPlayer(cs),Ki===yi)Vn.push(si);else{const oi=this.playersByElement.get(Ki);oi&&oi.length&&(si.parentPlayer=zy(oi)),r.push(si)}}else ax(xi,zi.fromStyles),si.onDestroy(()=>v0(xi,zi.toStyles)),Tn.push(si),p.has(xi)&&r.push(si)}),Tn.forEach(qn=>{const xi=s.get(qn.element);if(xi&&xi.length){const si=zy(xi);qn.setRealPlayer(si)}}),r.forEach(qn=>{qn.parentPlayer?qn.syncPlayerEvents(qn.parentPlayer):qn.destroy()});for(let qn=0;qn!cs.destroyed);Ki.length?Zge(this,xi,Ki):this.processLeaveNode(xi)}return se.length=0,Vn.forEach(qn=>{this.players.push(qn),qn.onDone(()=>{qn.destroy();const xi=this.players.indexOf(qn);this.players.splice(xi,1)}),qn.play()}),Vn}elementContainsData(e,t){let n=!1;const r=t[WA];return r&&r.setForRemoval&&(n=!0),this.playersByElement.has(t)&&(n=!0),this.playersByQueriedElement.has(t)&&(n=!0),this.statesByElement.has(t)&&(n=!0),this._fetchNamespace(e).elementContainsData(t)||n}afterFlush(e){this._flushFns.push(e)}afterFlushAnimationsDone(e){this._whenQuietFns.push(e)}_getPreviousPlayers(e,t,n,r,s){let a=[];if(t){const l=this.playersByQueriedElement.get(e);l&&(a=l)}else{const l=this.playersByElement.get(e);if(l){const u=!s||s==A3;l.forEach(d=>{d.queued||!u&&d.triggerName!=r||a.push(d)})}}return(n||r)&&(a=a.filter(l=>!(n&&n!=l.namespaceId||r&&r!=l.triggerName))),a}_beforeAnimationBuild(e,t,n){const s=t.element,a=t.isRemovalTransition?void 0:e,l=t.isRemovalTransition?void 0:t.triggerName;for(const u of t.timelines){const d=u.element,p=d!==s,y=jp(n,d,[]);this._getPreviousPlayers(d,p,a,l,t.toState).forEach(O=>{const Q=O.getRealPlayer();Q.beforeDestroy&&Q.beforeDestroy(),O.destroy(),y.push(O)})}ax(s,t.fromStyles)}_buildAnimation(e,t,n,r,s,a){const l=t.triggerName,u=t.element,d=[],p=new Set,y=new Set,C=t.timelines.map(Q=>{const W=Q.element;p.add(W);const se=W[WA];if(se&&se.removedBeforeQueried)return new OS(Q.duration,Q.delay);const ye=W!==u,Le=function Jge(i){const e=[];return eq(i,e),e}((n.get(W)||Qge).map(Yt=>Yt.getRealPlayer())).filter(Yt=>!!Yt.element&&Yt.element===W),we=s.get(W),He=a.get(W),gt=SG(0,this._normalizer,0,Q.keyframes,we,He),Et=this._buildPlayer(Q,gt,Le);if(Q.subTimeline&&r&&y.add(W),ye){const Yt=new QO(e,l,W);Yt.setRealPlayer(Et),d.push(Yt)}return Et});d.forEach(Q=>{jp(this.playersByQueriedElement,Q.element,[]).push(Q),Q.onDone(()=>function Xge(i,e,t){let n=i.get(e);if(n){if(n.length){const r=n.indexOf(t);n.splice(r,1)}0==n.length&&i.delete(e)}return n}(this.playersByQueriedElement,Q.element,Q))}),p.forEach(Q=>jA(Q,OG));const O=zy(C);return O.onDestroy(()=>{p.forEach(Q=>$2(Q,OG)),v0(u,t.toStyles)}),y.forEach(Q=>{jp(r,Q,[]).push(O)}),O}_buildPlayer(e,t,n){return t.length>0?this.driver.animate(e.element,t,e.duration,e.delay,e.easing,n):new OS(e.duration,e.delay)}}class QO{constructor(e,t,n){this.namespaceId=e,this.triggerName=t,this.element=n,this._player=new OS,this._containsRealPlayer=!1,this._queuedCallbacks=new Map,this.destroyed=!1,this.markedForDestroy=!1,this.disabled=!1,this.queued=!0,this.totalTime=0}setRealPlayer(e){this._containsRealPlayer||(this._player=e,this._queuedCallbacks.forEach((t,n)=>{t.forEach(r=>CO(e,n,void 0,r))}),this._queuedCallbacks.clear(),this._containsRealPlayer=!0,this.overrideTotalTime(e.totalTime),this.queued=!1)}getRealPlayer(){return this._player}overrideTotalTime(e){this.totalTime=e}syncPlayerEvents(e){const t=this._player;t.triggerCallback&&e.onStart(()=>t.triggerCallback("start")),e.onDone(()=>this.finish()),e.onDestroy(()=>this.destroy())}_queueEvent(e,t){jp(this._queuedCallbacks,e,[]).push(t)}onDone(e){this.queued&&this._queueEvent("done",e),this._player.onDone(e)}onStart(e){this.queued&&this._queueEvent("start",e),this._player.onStart(e)}onDestroy(e){this.queued&&this._queueEvent("destroy",e),this._player.onDestroy(e)}init(){this._player.init()}hasStarted(){return!this.queued&&this._player.hasStarted()}play(){!this.queued&&this._player.play()}pause(){!this.queued&&this._player.pause()}restart(){!this.queued&&this._player.restart()}finish(){this._player.finish()}destroy(){this.destroyed=!0,this._player.destroy()}reset(){!this.queued&&this._player.reset()}setPosition(e){this.queued||this._player.setPosition(e)}getPosition(){return this.queued?0:this._player.getPosition()}triggerCallback(e){const t=this._player;t.triggerCallback&&t.triggerCallback(e)}}function rB(i){return i&&1===i.nodeType}function YG(i,e){const t=i.style.display;return i.style.display=e??"none",t}function ZG(i,e,t,n,r){const s=[];t.forEach(u=>s.push(YG(u)));const a=[];n.forEach((u,d)=>{const p=new Map;u.forEach(y=>{const C=e.computeStyle(d,y,r);p.set(y,C),(!C||0==C.length)&&(d[WA]=Wge,a.push(d))}),i.set(d,p)});let l=0;return t.forEach(u=>YG(u,s[l++])),a}function JG(i,e){const t=new Map;if(i.forEach(l=>t.set(l,[])),0==e.length)return t;const r=new Set(e),s=new Map;function a(l){if(!l)return 1;let u=s.get(l);if(u)return u;const d=l.parentNode;return u=t.has(d)?d:r.has(d)?1:a(d),s.set(l,u),u}return e.forEach(l=>{const u=a(l);1!==u&&t.get(u).push(l)}),t}function jA(i,e){i.classList?.add(e)}function $2(i,e){i.classList?.remove(e)}function Zge(i,e,t){zy(t).onDone(()=>i.processLeaveNode(e))}function eq(i,e){for(let t=0;tr.add(s)):e.set(i,n),t.delete(i),!0}class sB{constructor(e,t,n){this.bodyNode=e,this._driver=t,this._normalizer=n,this._triggerCache={},this.onRemovalComplete=(r,s)=>{},this._transitionEngine=new $ge(e,t,n),this._timelineEngine=new zge(e,t,n),this._transitionEngine.onRemovalComplete=(r,s)=>this.onRemovalComplete(r,s)}registerTrigger(e,t,n,r,s){const a=e+"-"+r;let l=this._triggerCache[a];if(!l){const u=[],p=OO(this._driver,s,u,[]);if(u.length)throw function Nme(i,e){return new fi(3404,!1)}();l=function Rge(i,e,t){return new Lge(i,e,t)}(r,p,this._normalizer),this._triggerCache[a]=l}this._transitionEngine.registerTrigger(t,r,l)}register(e,t){this._transitionEngine.register(e,t)}destroy(e,t){this._transitionEngine.destroy(e,t)}onInsert(e,t,n,r){this._transitionEngine.insertNode(e,t,n,r)}onRemove(e,t,n,r){this._transitionEngine.removeNode(e,t,r||!1,n)}disableAnimations(e,t){this._transitionEngine.markElementAsDisabled(e,t)}process(e,t,n,r){if("@"==n.charAt(0)){const[s,a]=TG(n);this._timelineEngine.command(s,t,a,r)}else this._transitionEngine.trigger(e,t,n,r)}listen(e,t,n,r,s){if("@"==n.charAt(0)){const[a,l]=TG(n);return this._timelineEngine.listen(a,t,l,s)}return this._transitionEngine.listen(e,t,n,r,s)}flush(e=-1){this._transitionEngine.flush(e)}get players(){return this._transitionEngine.players.concat(this._timelineEngine.players)}whenRenderingDone(){return this._transitionEngine.whenRenderingDone()}}let n0e=(()=>{class i{constructor(t,n,r){this._element=t,this._startStyles=n,this._endStyles=r,this._state=0;let s=i.initialStylesByElement.get(t);s||i.initialStylesByElement.set(t,s=new Map),this._initialStyles=s}start(){this._state<1&&(this._startStyles&&v0(this._element,this._startStyles,this._initialStyles),this._state=1)}finish(){this.start(),this._state<2&&(v0(this._element,this._initialStyles),this._endStyles&&(v0(this._element,this._endStyles),this._endStyles=null),this._state=1)}destroy(){this.finish(),this._state<3&&(i.initialStylesByElement.delete(this._element),this._startStyles&&(ax(this._element,this._startStyles),this._endStyles=null),this._endStyles&&(ax(this._element,this._endStyles),this._endStyles=null),v0(this._element,this._initialStyles),this._state=3)}}return i.initialStylesByElement=new WeakMap,i})();function WO(i){let e=null;return i.forEach((t,n)=>{(function i0e(i){return"display"===i||"position"===i})(n)&&(e=e||new Map,e.set(n,t))}),e}class nq{constructor(e,t,n,r){this.element=e,this.keyframes=t,this.options=n,this._specialStyles=r,this._onDoneFns=[],this._onStartFns=[],this._onDestroyFns=[],this._initialized=!1,this._finished=!1,this._started=!1,this._destroyed=!1,this._originalOnDoneFns=[],this._originalOnStartFns=[],this.time=0,this.parentPlayer=null,this.currentSnapshot=new Map,this._duration=n.duration,this._delay=n.delay||0,this.time=this._duration+this._delay}_onFinish(){this._finished||(this._finished=!0,this._onDoneFns.forEach(e=>e()),this._onDoneFns=[])}init(){this._buildPlayer(),this._preparePlayerBeforeStart()}_buildPlayer(){if(this._initialized)return;this._initialized=!0;const e=this.keyframes;this.domPlayer=this._triggerWebAnimation(this.element,e,this.options),this._finalKeyframe=e.length?e[e.length-1]:new Map,this.domPlayer.addEventListener("finish",()=>this._onFinish())}_preparePlayerBeforeStart(){this._delay?this._resetDomPlayerState():this.domPlayer.pause()}_convertKeyframesToObject(e){const t=[];return e.forEach(n=>{t.push(Object.fromEntries(n))}),t}_triggerWebAnimation(e,t,n){return e.animate(this._convertKeyframesToObject(t),n)}onStart(e){this._originalOnStartFns.push(e),this._onStartFns.push(e)}onDone(e){this._originalOnDoneFns.push(e),this._onDoneFns.push(e)}onDestroy(e){this._onDestroyFns.push(e)}play(){this._buildPlayer(),this.hasStarted()||(this._onStartFns.forEach(e=>e()),this._onStartFns=[],this._started=!0,this._specialStyles&&this._specialStyles.start()),this.domPlayer.play()}pause(){this.init(),this.domPlayer.pause()}finish(){this.init(),this._specialStyles&&this._specialStyles.finish(),this._onFinish(),this.domPlayer.finish()}reset(){this._resetDomPlayerState(),this._destroyed=!1,this._finished=!1,this._started=!1,this._onStartFns=this._originalOnStartFns,this._onDoneFns=this._originalOnDoneFns}_resetDomPlayerState(){this.domPlayer&&this.domPlayer.cancel()}restart(){this.reset(),this.play()}hasStarted(){return this._started}destroy(){this._destroyed||(this._destroyed=!0,this._resetDomPlayerState(),this._onFinish(),this._specialStyles&&this._specialStyles.destroy(),this._onDestroyFns.forEach(e=>e()),this._onDestroyFns=[])}setPosition(e){void 0===this.domPlayer&&this.init(),this.domPlayer.currentTime=e*this.time}getPosition(){return this.domPlayer.currentTime/this.time}get totalTime(){return this._delay+this._duration}beforeDestroy(){const e=new Map;this.hasStarted()&&this._finalKeyframe.forEach((n,r)=>{"offset"!==r&&e.set(r,this._finished?n:HG(this.element,r))}),this.currentSnapshot=e}triggerCallback(e){const t="start"===e?this._onStartFns:this._onDoneFns;t.forEach(n=>n()),t.length=0}}class r0e{validateStyleProperty(e){return!0}validateAnimatableStyleProperty(e){return!0}matchesElement(e,t){return!1}containsElement(e,t){return IG(e,t)}getParentElement(e){return EO(e)}query(e,t,n){return PG(e,t,n)}computeStyle(e,t,n){return window.getComputedStyle(e)[t]}animate(e,t,n,r,s,a=[]){const u={duration:n,delay:r,fill:0==r?"both":"forwards"};s&&(u.easing=s);const d=new Map,p=a.filter(O=>O instanceof nq);(function lge(i,e){return 0===i||0===e})(n,r)&&p.forEach(O=>{O.currentSnapshot.forEach((Q,W)=>d.set(W,Q))});let y=function rge(i){return i.length?i[0]instanceof Map?i:i.map(e=>RG(e)):[]}(t).map(O=>Hy(O));y=function cge(i,e,t){if(t.size&&e.length){let n=e[0],r=[];if(t.forEach((s,a)=>{n.has(a)||r.push(a),n.set(a,s)}),r.length)for(let s=1;sa.set(l,HG(i,l)))}}return e}(e,y,d);const C=function t0e(i,e){let t=null,n=null;return Array.isArray(e)&&e.length?(t=WO(e[0]),e.length>1&&(n=WO(e[e.length-1]))):e instanceof Map&&(t=WO(e)),t||n?new n0e(i,t,n):null}(e,y);return new nq(e,y,u,C)}}let s0e=(()=>{class i extends Pz{constructor(t,n){super(),this._nextAnimationId=0,this._renderer=t.createRenderer(n.body,{id:"0",encapsulation:Th.None,styles:[],data:{animation:[]}})}build(t){const n=this._nextAnimationId.toString();this._nextAnimationId++;const r=Array.isArray(t)?Fz(t):t;return iq(this._renderer,null,n,"register",[r]),new o0e(n,this._renderer)}}return i.\u0275fac=function(t){return new(t||i)(ci(Ep),ci(Zo))},i.\u0275prov=Ue({token:i,factory:i.\u0275fac}),i})();class o0e extends Qle{constructor(e,t){super(),this._id=e,this._renderer=t}create(e,t){return new a0e(this._id,e,t||{},this._renderer)}}class a0e{constructor(e,t,n,r){this.id=e,this.element=t,this._renderer=r,this.parentPlayer=null,this._started=!1,this.totalTime=0,this._command("create",n)}_listen(e,t){return this._renderer.listen(this.element,`@@${this.id}:${e}`,t)}_command(e,...t){return iq(this._renderer,this.element,this.id,e,t)}onDone(e){this._listen("done",e)}onStart(e){this._listen("start",e)}onDestroy(e){this._listen("destroy",e)}init(){this._command("init")}hasStarted(){return this._started}play(){this._command("play"),this._started=!0}pause(){this._command("pause")}restart(){this._command("restart")}finish(){this._command("finish")}destroy(){this._command("destroy")}reset(){this._command("reset"),this._started=!1}setPosition(e){this._command("setPosition",e)}getPosition(){return this._renderer.engine.players[+this.id]?.getPosition()??0}}function iq(i,e,t,n,r){return i.setProperty(e,`@@${t}:${n}`,r)}const rq="@.disabled";let l0e=(()=>{class i{constructor(t,n,r){this.delegate=t,this.engine=n,this._zone=r,this._currentId=0,this._microtaskId=1,this._animationCallbacksBuffer=[],this._rendererCache=new Map,this._cdRecurDepth=0,this.promise=Promise.resolve(0),n.onRemovalComplete=(s,a)=>{const l=a?.parentNode(s);l&&a.removeChild(l,s)}}createRenderer(t,n){const s=this.delegate.createRenderer(t,n);if(!(t&&n&&n.data&&n.data.animation)){let p=this._rendererCache.get(s);return p||(p=new sq("",s,this.engine,()=>this._rendererCache.delete(s)),this._rendererCache.set(s,p)),p}const a=n.id,l=n.id+"-"+this._currentId;this._currentId++,this.engine.register(l,t);const u=p=>{Array.isArray(p)?p.forEach(u):this.engine.registerTrigger(a,l,t,p.name,p)};return n.data.animation.forEach(u),new c0e(this,l,s,this.engine)}begin(){this._cdRecurDepth++,this.delegate.begin&&this.delegate.begin()}_scheduleCountTask(){this.promise.then(()=>{this._microtaskId++})}scheduleListenerCallback(t,n,r){t>=0&&tn(r)):(0==this._animationCallbacksBuffer.length&&Promise.resolve(null).then(()=>{this._zone.run(()=>{this._animationCallbacksBuffer.forEach(s=>{const[a,l]=s;a(l)}),this._animationCallbacksBuffer=[]})}),this._animationCallbacksBuffer.push([n,r]))}end(){this._cdRecurDepth--,0==this._cdRecurDepth&&this._zone.runOutsideAngular(()=>{this._scheduleCountTask(),this.engine.flush(this._microtaskId)}),this.delegate.end&&this.delegate.end()}whenRenderingDone(){return this.engine.whenRenderingDone()}}return i.\u0275fac=function(t){return new(t||i)(ci(Ep),ci(sB),ci(mo))},i.\u0275prov=Ue({token:i,factory:i.\u0275fac}),i})();class sq{constructor(e,t,n,r){this.namespaceId=e,this.delegate=t,this.engine=n,this._onDestroy=r,this.destroyNode=this.delegate.destroyNode?s=>t.destroyNode(s):null}get data(){return this.delegate.data}destroy(){this.engine.destroy(this.namespaceId,this.delegate),this.delegate.destroy(),this._onDestroy?.()}createElement(e,t){return this.delegate.createElement(e,t)}createComment(e){return this.delegate.createComment(e)}createText(e){return this.delegate.createText(e)}appendChild(e,t){this.delegate.appendChild(e,t),this.engine.onInsert(this.namespaceId,t,e,!1)}insertBefore(e,t,n,r=!0){this.delegate.insertBefore(e,t,n),this.engine.onInsert(this.namespaceId,t,e,r)}removeChild(e,t,n){this.engine.onRemove(this.namespaceId,t,this.delegate,n)}selectRootElement(e,t){return this.delegate.selectRootElement(e,t)}parentNode(e){return this.delegate.parentNode(e)}nextSibling(e){return this.delegate.nextSibling(e)}setAttribute(e,t,n,r){this.delegate.setAttribute(e,t,n,r)}removeAttribute(e,t,n){this.delegate.removeAttribute(e,t,n)}addClass(e,t){this.delegate.addClass(e,t)}removeClass(e,t){this.delegate.removeClass(e,t)}setStyle(e,t,n,r){this.delegate.setStyle(e,t,n,r)}removeStyle(e,t,n){this.delegate.removeStyle(e,t,n)}setProperty(e,t,n){"@"==t.charAt(0)&&t==rq?this.disableAnimations(e,!!n):this.delegate.setProperty(e,t,n)}setValue(e,t){this.delegate.setValue(e,t)}listen(e,t,n){return this.delegate.listen(e,t,n)}disableAnimations(e,t){this.engine.disableAnimations(e,t)}}class c0e extends sq{constructor(e,t,n,r,s){super(t,n,r,s),this.factory=e,this.namespaceId=t}setProperty(e,t,n){"@"==t.charAt(0)?"."==t.charAt(1)&&t==rq?this.disableAnimations(e,n=void 0===n||!!n):this.engine.process(this.namespaceId,e,t.slice(1),n):this.delegate.setProperty(e,t,n)}listen(e,t,n){if("@"==t.charAt(0)){const r=function u0e(i){switch(i){case"body":return document.body;case"document":return document;case"window":return window;default:return i}}(e);let s=t.slice(1),a="";return"@"!=s.charAt(0)&&([s,a]=function h0e(i){const e=i.indexOf(".");return[i.substring(0,e),i.slice(e+1)]}(s)),this.engine.listen(this.namespaceId,r,s,a,l=>{this.factory.scheduleListenerCallback(l._data||-1,n,l)})}return this.delegate.listen(e,t,n)}}let d0e=(()=>{class i extends sB{constructor(t,n,r,s){super(t.body,n,r)}ngOnDestroy(){this.flush()}}return i.\u0275fac=function(t){return new(t||i)(ci(Zo),ci(DO),ci(zO),ci(cw))},i.\u0275prov=Ue({token:i,factory:i.\u0275fac}),i})();const oq=[{provide:Pz,useClass:s0e},{provide:zO,useFactory:function f0e(){return new Pge}},{provide:sB,useClass:d0e},{provide:Ep,useFactory:function p0e(i,e,t){return new l0e(i,e,t)},deps:[lE,sB,mo]}],jO=[{provide:DO,useFactory:()=>new r0e},{provide:_h,useValue:"BrowserAnimations"},...oq],aq=[{provide:DO,useClass:kG},{provide:_h,useValue:"NoopAnimations"},...oq];let $O,A0e=(()=>{class i{static withConfig(t){return{ngModule:i,providers:t.disableAnimations?aq:jO}}}return i.\u0275fac=function(t){return new(t||i)},i.\u0275mod=ia({type:i}),i.\u0275inj=ft({providers:jO,imports:[wL]}),i})();$O=[{path:"",component:_2},{path:"home",component:_2},{path:"geometry",component:wS},{path:"atlas",component:z2},{path:"lhcb",component:r3},{path:"cms",component:s3},{path:"trackml",component:o3},{path:"playground",component:h3}];class X2{}Wt(X2,"\u0275fac",function(e){return new(e||X2)}),Wt(X2,"\u0275mod",ia({type:X2,bootstrap:[TM]})),Wt(X2,"\u0275inj",ft({imports:[wL,oX,e7.forRoot($O,{useHash:!0}),A0e,j2]})),S$().bootstrapModule(X2).catch(i=>console.error(i))},3144:(jr,At,Me)=>{jr.exports={ResizeSensor:Me(1710),ElementQueries:Me(9648)}},9648:function(jr,At,Me){"use strict";var ze,M,L;typeof window<"u"&&window,M=[Me(1710)],void 0!==(L="function"==typeof(ze=function(_e){var De=function(){var Ze,Ie={},Ve=[];function Re(F){F||(F=document.documentElement);var q=window.getComputedStyle(F,null).fontSize;return parseFloat(q)||16}function Z(F,q){var T=q.split(/\d/),$=T[T.length-1];switch(q=parseFloat(q),$){case"px":default:return q;case"em":return q*Re(F);case"rem":return q*Re();case"vw":return q*document.documentElement.clientWidth/100;case"vh":return q*document.documentElement.clientHeight/100;case"vmin":case"vmax":var ee=document.documentElement.clientWidth/100,re=document.documentElement.clientHeight/100;return q*(0,Math["vmin"===$?"min":"max"])(ee,re)}}function Y(F,q){this.element=F;var T,$,ee,re,be,he,de,I,U=["min-width","min-height","max-width","max-height"];this.call=function(){for(T in ee=function ce(F){if(!F.getBoundingClientRect)return{width:F.offsetWidth,height:F.offsetHeight};var q=F.getBoundingClientRect();return{width:Math.round(q.width),height:Math.round(q.height)}}(this.element),he={},Ie[q])Ie[q].hasOwnProperty(T)&&(re=Z(this.element,($=Ie[q][T]).value),be="width"===$.property?ee.width:ee.height,de="","min"===$.mode&&be>=re&&(de+=$.value),"max"===$.mode&&be<=re&&(de+=$.value),he[I=$.mode+"-"+$.property]||(he[I]=""),de&&-1===(" "+he[I]+" ").indexOf(" "+de+" ")&&(he[I]+=" "+de));for(var H in U)U.hasOwnProperty(H)&&(he[U[H]]?this.element.setAttribute(U[H],he[U[H]].substr(1)):this.element.removeAttribute(U[H]))}}function ue(F,q){F.elementQueriesSetupInformation||(F.elementQueriesSetupInformation=new Y(F,q)),F.elementQueriesSensor||(F.elementQueriesSensor=new _e(F,function(){F.elementQueriesSetupInformation.call()}))}function K(F,q,T,$){if(typeof Ie[F]>"u"){Ie[F]=[];var ee=Ve.length;Ze.innerHTML+="\n"+F+" {animation: 0.1s element-queries;}",Ze.innerHTML+="\n"+F+" > .resize-sensor {min-width: "+ee+"px;}",Ve.push(F)}Ie[F].push({mode:q,property:T,value:$})}function J(F){var q;if(document.querySelectorAll&&(q=F?F.querySelectorAll.bind(F):document.querySelectorAll.bind(document)),!q&&typeof $$<"u"&&(q=$$),!q&&typeof jQuery<"u"&&(q=jQuery),!q)throw"No document.querySelectorAll, jQuery or Mootools's $$ found.";return q}function P(F){var q=[],T=[],$=[],ee=0,re=-1,be=[];for(var he in F.children)if(F.children.hasOwnProperty(he)&&F.children[he].tagName&&"img"===F.children[he].tagName.toLowerCase()){q.push(F.children[he]);var de=F.children[he].getAttribute("min-width")||F.children[he].getAttribute("data-min-width"),I=F.children[he].getAttribute("data-src")||F.children[he].getAttribute("url");$.push(I),T.push({minWidth:de}),de?F.children[he].style.display="none":(ee=q.length-1,F.children[he].style.display="block")}function H(){var D,le=!1;for(D in q)q.hasOwnProperty(D)&&T[D].minWidth&&F.offsetWidth>T[D].minWidth&&(le=D);if(le||(le=ee),re!==le)if(be[le])q[re].style.display="none",q[le].style.display="block",re=le;else{var oe=new Image;oe.onload=function(){q[le].src=$[le],q[re].style.display="none",q[le].style.display="block",be[le]=!0,re=le},oe.src=$[le]}else q[le].src=$[le]}re=ee,F.resizeSensorInstance=new _e(F,H),H()}var A=/,?[\s\t]*([^,\n]*?)((?:\[[\s\t]*?(?:min|max)-(?:width|height)[\s\t]*?[~$\^]?=[\s\t]*?"[^"]*?"[\s\t]*?])+)([^,\n\s\{]*)/gim,w=/\[[\s\t]*?(min|max)-(width|height)[\s\t]*?[~$\^]?=[\s\t]*?"([^"]*?)"[\s\t]*?]/gim;function m(F){var q,T,$,ee;for(F=F.replace(/'/g,'"');null!==(q=A.exec(F));)for(T=q[1]+q[3],$=q[2];null!==(ee=w.exec($));)K(T,ee[1],ee[2],ee[3])}function _(F){var q="";if(F)if("string"==typeof F)(-1!==(F=F.toLowerCase()).indexOf("min-width")||-1!==F.indexOf("max-width"))&&m(F);else for(var T=0,$=F.length;T<$;T++)1===F[T].type?(-1!==(q=F[T].selectorText||F[T].cssText).indexOf("min-height")||-1!==q.indexOf("max-height")||-1!==q.indexOf("min-width")||-1!==q.indexOf("max-width"))&&m(q):4===F[T].type?_(F[T].cssRules||F[T].rules):3===F[T].type&&F[T].styleSheet.hasOwnProperty("cssRules")&&_(F[T].styleSheet.cssRules)}var k=!1;this.init=function(){var F="animationstart";typeof document.documentElement.style.webkitAnimationName<"u"?F="webkitAnimationStart":typeof document.documentElement.style.MozAnimationName<"u"?F="mozanimationstart":typeof document.documentElement.style.OAnimationName<"u"&&(F="oanimationstart"),document.body.addEventListener(F,function($){var ee=$.target,re=ee&&window.getComputedStyle(ee,null),be=re&&re.getPropertyValue("animation-name");if(be&&-1!==be.indexOf("element-queries")){ee.elementQueriesSensor=new _e(ee,function(){ee.elementQueriesSetupInformation&&ee.elementQueriesSetupInformation.call()});var I=window.getComputedStyle(ee.resizeSensor,null).getPropertyValue("min-width");I=parseInt(I.replace("px","")),ue($.target,Ve[I])}}),k||((Ze=document.createElement("style")).type="text/css",Ze.innerHTML="[responsive-image] > img, [data-responsive-image] {overflow: hidden; padding: 0; } [responsive-image] > img, [data-responsive-image] > img {width: 100%;}",Ze.innerHTML+="\n@keyframes element-queries { 0% { visibility: inherit; } }",document.getElementsByTagName("head")[0].appendChild(Ze),k=!0);for(var q=0,T=document.styleSheets.length;q"u")return null;var L=typeof window<"u"&&window.Math==Math?window:typeof self<"u"&&self.Math==Math?self:Function("return this")(),_e=L.requestAnimationFrame||L.mozRequestAnimationFrame||L.webkitRequestAnimationFrame||function(ce){return L.setTimeout(ce,20)},De=L.cancelAnimationFrame||L.mozCancelAnimationFrame||L.webkitCancelAnimationFrame||function(ce){L.clearTimeout(ce)};function $e(ce,Z){var Y=Object.prototype.toString.call(ce),ue="[object Array]"===Y||"[object NodeList]"===Y||"[object HTMLCollection]"===Y||"[object Object]"===Y||typeof jQuery<"u"&&ce instanceof jQuery||typeof Elements<"u"&&ce instanceof Elements,K=0,J=ce.length;if(ue)for(;K{"use strict";var ze={update:function(){if(typeof window<"u"&&"function"==typeof window.addEventListener){var L=!1,_e=Object.defineProperty({},"passive",{get:function(){L=!0}}),De=function(){};window.addEventListener("testPassiveEventSupport",De,_e),window.removeEventListener("testPassiveEventSupport",De,_e),ze.hasSupport=L}}};ze.update()},3940:jr=>{"use strict";var At={single_source_shortest_paths:function(Me,ze,M){var L={},_e={};_e[ze]=0;var $e,Ze,Ie,Ve,Re,Z,De=At.PriorityQueue.make();for(De.push(ze,0);!De.empty();)for(Ie in Ve=($e=De.pop()).cost,Re=Me[Ze=$e.value]||{})Re.hasOwnProperty(Ie)&&(Z=Ve+Re[Ie],(typeof _e[Ie]>"u"||_e[Ie]>Z)&&(_e[Ie]=Z,De.push(Ie,Z),L[Ie]=Ze));if(typeof M<"u"&&typeof _e[M]>"u"){var K=["Could not find a path from ",ze," to ",M,"."].join("");throw new Error(K)}return L},extract_shortest_path_from_predecessor_list:function(Me,ze){for(var M=[],L=ze;L;)M.push(L),L=Me[L];return M.reverse(),M},find_path:function(Me,ze,M){var L=At.single_source_shortest_paths(Me,ze,M);return At.extract_shortest_path_from_predecessor_list(L,M)},PriorityQueue:{make:function(Me){var L,ze=At.PriorityQueue,M={};for(L in Me=Me||{},ze)ze.hasOwnProperty(L)&&(M[L]=ze[L]);return M.queue=[],M.sorter=Me.sorter||ze.default_sorter,M},default_sorter:function(Me,ze){return Me.cost-ze.cost},push:function(Me,ze){this.queue.push({value:Me,cost:ze}),this.queue.sort(this.sorter)},pop:function(){return this.queue.shift()},empty:function(){return 0===this.queue.length}}};jr.exports=At},5724:jr=>{"use strict";jr.exports=function(Me){for(var ze=[],M=Me.length,L=0;L=55296&&_e<=56319&&M>L+1){var De=Me.charCodeAt(L+1);De>=56320&&De<=57343&&(_e=1024*(_e-55296)+De-56320+65536,L+=1)}_e<128?ze.push(_e):_e<2048?(ze.push(_e>>6|192),ze.push(63&_e|128)):_e<55296||_e>=57344&&_e<65536?(ze.push(_e>>12|224),ze.push(_e>>6&63|128),ze.push(63&_e|128)):_e>=65536&&_e<=1114111?(ze.push(_e>>18|240),ze.push(_e>>12&63|128),ze.push(_e>>6&63|128),ze.push(63&_e|128)):ze.push(239,191,189)}return new Uint8Array(ze).buffer}},3960:function(jr){jr.exports=function(){"use strict";var At=function(X,G){return(At=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(ne,te){ne.__proto__=te}||function(ne,te){for(var Oe in te)Object.prototype.hasOwnProperty.call(te,Oe)&&(ne[Oe]=te[Oe])})(X,G)};function Me(X,G){if("function"!=typeof G&&null!==G)throw new TypeError("Class extends value "+String(G)+" is not a constructor or null");function ne(){this.constructor=X}At(X,G),X.prototype=null===G?Object.create(G):(ne.prototype=G.prototype,new ne)}var ze=function(){return ze=Object.assign||function(G){for(var ne,te=1,Oe=arguments.length;te0&&tt[tt.length-1])&&(6===Pn[0]||2===Pn[0])){ne=0;continue}if(3===Pn[0]&&(!tt||Pn[1]>tt[0]&&Pn[1]=55296&&Oe<=56319&&ne>10),St%1024+56320),(Oe+1===ne||te.length>16384)&&(tt+=String.fromCharCode.apply(String,te),te.length=0)}return tt},Re="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",ce=typeof Uint8Array>"u"?[]:new Uint8Array(256),Z=0;Z"u"?[]:new Uint8Array(256),K=0;K=0){if(G<55296||G>56319&&G<=65535)return this.data[ne=((ne=this.index[G>>5])<<2)+(31&G)];if(G<=65535)return this.data[ne=((ne=this.index[2048+(G-55296>>5)])<<2)+(31&G)];if(G>11)],this.data[ne=((ne=this.index[ne+=G>>5&63])<<2)+(31&G)];if(G<=1114111)return this.data[this.highValueIndex]}return this.errorValue},X}(),D="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",oe=typeof Uint8Array>"u"?[]:new Uint8Array(256),ge=0;ge>4,zn[Oe++]=(15&St)<<4|Kt>>2,zn[Oe++]=(3&Kt)<<6|63&$t;return Pn}("KwAAAAAAAAAACA4AUD0AADAgAAACAAAAAAAIABAAGABAAEgAUABYAGAAaABgAGgAYgBqAF8AZwBgAGgAcQB5AHUAfQCFAI0AlQCdAKIAqgCyALoAYABoAGAAaABgAGgAwgDKAGAAaADGAM4A0wDbAOEA6QDxAPkAAQEJAQ8BFwF1AH0AHAEkASwBNAE6AUIBQQFJAVEBWQFhAWgBcAF4ATAAgAGGAY4BlQGXAZ8BpwGvAbUBvQHFAc0B0wHbAeMB6wHxAfkBAQIJAvEBEQIZAiECKQIxAjgCQAJGAk4CVgJeAmQCbAJ0AnwCgQKJApECmQKgAqgCsAK4ArwCxAIwAMwC0wLbAjAA4wLrAvMC+AIAAwcDDwMwABcDHQMlAy0DNQN1AD0DQQNJA0kDSQNRA1EDVwNZA1kDdQB1AGEDdQBpA20DdQN1AHsDdQCBA4kDkQN1AHUAmQOhA3UAdQB1AHUAdQB1AHUAdQB1AHUAdQB1AHUAdQB1AHUAdQB1AKYDrgN1AHUAtgO+A8YDzgPWAxcD3gPjA+sD8wN1AHUA+wMDBAkEdQANBBUEHQQlBCoEFwMyBDgEYABABBcDSARQBFgEYARoBDAAcAQzAXgEgASIBJAEdQCXBHUAnwSnBK4EtgS6BMIEyAR1AHUAdQB1AHUAdQCVANAEYABgAGAAYABgAGAAYABgANgEYADcBOQEYADsBPQE/AQEBQwFFAUcBSQFLAU0BWQEPAVEBUsFUwVbBWAAYgVgAGoFcgV6BYIFigWRBWAAmQWfBaYFYABgAGAAYABgAKoFYACxBbAFuQW6BcEFwQXHBcEFwQXPBdMF2wXjBeoF8gX6BQIGCgYSBhoGIgYqBjIGOgZgAD4GRgZMBmAAUwZaBmAAYABgAGAAYABgAGAAYABgAGAAYABgAGIGYABpBnAGYABgAGAAYABgAGAAYABgAGAAYAB4Bn8GhQZgAGAAYAB1AHcDFQSLBmAAYABgAJMGdQA9A3UAmwajBqsGqwaVALMGuwbDBjAAywbSBtIG1QbSBtIG0gbSBtIG0gbdBuMG6wbzBvsGAwcLBxMHAwcbByMHJwcsBywHMQcsB9IGOAdAB0gHTgfSBkgHVgfSBtIG0gbSBtIG0gbSBtIG0gbSBiwHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAdgAGAALAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAdbB2MHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsB2kH0gZwB64EdQB1AHUAdQB1AHUAdQB1AHUHfQdgAIUHjQd1AHUAlQedB2AAYAClB6sHYACzB7YHvgfGB3UAzgfWBzMB3gfmB1EB7gf1B/0HlQENAQUIDQh1ABUIHQglCBcDLQg1CD0IRQhNCEEDUwh1AHUAdQBbCGMIZAhlCGYIZwhoCGkIYwhkCGUIZghnCGgIaQhjCGQIZQhmCGcIaAhpCGMIZAhlCGYIZwhoCGkIYwhkCGUIZghnCGgIaQhjCGQIZQhmCGcIaAhpCGMIZAhlCGYIZwhoCGkIYwhkCGUIZghnCGgIaQhjCGQIZQhmCGcIaAhpCGMIZAhlCGYIZwhoCGkIYwhkCGUIZghnCGgIaQhjCGQIZQhmCGcIaAhpCGMIZAhlCGYIZwhoCGkIYwhkCGUIZghnCGgIaQhjCGQIZQhmCGcIaAhpCGMIZAhlCGYIZwhoCGkIYwhkCGUIZghnCGgIaQhjCGQIZQhmCGcIaAhpCGMIZAhlCGYIZwhoCGkIYwhkCGUIZghnCGgIaQhjCGQIZQhmCGcIaAhpCGMIZAhlCGYIZwhoCGkIYwhkCGUIZghnCGgIaQhjCGQIZQhmCGcIaAhpCGMIZAhlCGYIZwhoCGkIYwhkCGUIZghnCGgIaQhjCGQIZQhmCGcIaAhpCGMIZAhlCGYIZwhoCGkIYwhkCGUIZghnCGgIaQhjCGQIZQhmCGcIaAhpCGMIZAhlCGYIZwhoCGkIYwhkCGUIZghnCGgIaQhjCGQIZQhmCGcIaAhpCGMIZAhlCGYIZwhoCGkIYwhkCGUIZghnCGgIaQhjCGQIZQhmCGcIaAhpCGMIZAhlCGYIZwhoCGkIYwhkCGUIZghnCGgIaQhjCGQIZQhmCGcIaAhpCGMIZAhlCGYIZwhoCGkIYwhkCGUIZghnCGgIaQhjCGQIZQhmCGcIaAhpCGMIZAhlCGYIZwhoCGkIYwhkCGUIZghnCGgIaQhjCGQIZQhmCGcIaAhpCGMIZAhlCGYIZwhoCGkIYwhkCGUIZghnCGgIaQhjCGQIZQhmCGcIaAhpCGMIZAhlCGYIZwhoCGkIYwhkCGUIZghnCGgIcAh3CHoIMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwAIIIggiCCIIIggiCCIIIggiCCIIIggiCCIIIggiCCIIIggiCCIIIggiCCIIIggiCCIIIggiCCIIIggiCCIIIgggwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAALAcsBywHLAcsBywHLAcsBywHLAcsB4oILAcsB44I0gaWCJ4Ipgh1AHUAqgiyCHUAdQB1AHUAdQB1AHUAdQB1AHUAtwh8AXUAvwh1AMUIyQjRCNkI4AjoCHUAdQB1AO4I9gj+CAYJDgkTCS0HGwkjCYIIggiCCIIIggiCCIIIggiCCIIIggiCCIIIggiCCIIIggiCCIIIggiCCIIIggiCCIIIggiCCIIIggiCCIIIggiAAIAAAAFAAYABgAGIAXwBgAHEAdQBFAJUAogCyAKAAYABgAEIA4ABGANMA4QDxAMEBDwE1AFwBLAE6AQEBUQF4QkhCmEKoQrhCgAHIQsAB0MLAAcABwAHAAeDC6ABoAHDCwMMAAcABwAHAAdDDGMMAAcAB6MM4wwjDWMNow3jDaABoAGgAaABoAGgAaABoAGgAaABoAGgAaABoAGgAaABoAGgAaABoAEjDqABWw6bDqABpg6gAaABoAHcDvwOPA+gAaABfA/8DvwO/A78DvwO/A78DvwO/A78DvwO/A78DvwO/A78DvwO/A78DvwO/A78DvwO/A78DvwO/A78DpcPAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcAB9cPKwkyCToJMAB1AHUAdQBCCUoJTQl1AFUJXAljCWcJawkwADAAMAAwAHMJdQB2CX4JdQCECYoJjgmWCXUAngkwAGAAYABxAHUApgn3A64JtAl1ALkJdQDACTAAMAAwADAAdQB1AHUAdQB1AHUAdQB1AHUAowYNBMUIMAAwADAAMADICcsJ0wnZCRUE4QkwAOkJ8An4CTAAMAB1AAAKvwh1AAgKDwoXCh8KdQAwACcKLgp1ADYKqAmICT4KRgowADAAdQB1AE4KMAB1AFYKdQBeCnUAZQowADAAMAAwADAAMAAwADAAMAAVBHUAbQowADAAdQC5CXUKMAAwAHwBxAijBogEMgF9CoQKiASMCpQKmgqIBKIKqgquCogEDQG2Cr4KxgrLCjAAMADTCtsKCgHjCusK8Qr5CgELMAAwADAAMAB1AIsECQsRC3UANAEZCzAAMAAwADAAMAB1ACELKQswAHUANAExCzkLdQBBC0kLMABRC1kLMAAwADAAMAAwADAAdQBhCzAAMAAwAGAAYABpC3ELdwt/CzAAMACHC4sLkwubC58Lpwt1AK4Ltgt1APsDMAAwADAAMAAwADAAMAAwAL4LwwvLC9IL1wvdCzAAMADlC+kL8Qv5C/8LSQswADAAMAAwADAAMAAwADAAMAAHDDAAMAAwADAAMAAODBYMHgx1AHUAdQB1AHUAdQB1AHUAdQB1AHUAdQB1AHUAdQB1AHUAdQB1AHUAdQB1AHUAdQB1AHUAdQB1ACYMMAAwADAAdQB1AHUALgx1AHUAdQB1AHUAdQA2DDAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwAHUAdQB1AHUAdQB1AHUAdQB1AHUAdQB1AHUAdQB1AHUAdQB1AD4MdQBGDHUAdQB1AHUAdQB1AEkMdQB1AHUAdQB1AFAMMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwAHUAdQB1AHUAdQB1AHUAdQB1AHUAdQB1AHUAdQBYDHUAdQB1AF8MMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAB1AHUAdQB1AHUAdQB1AHUAdQB1AHUAdQB1AHUAdQB1AHUA+wMVBGcMMAAwAHwBbwx1AHcMfwyHDI8MMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAYABgAJcMMAAwADAAdQB1AJ8MlQClDDAAMACtDCwHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsB7UMLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHdQB1AHUAdQB1AHUAdQB1AHUAdQB1AHUAdQB1AA0EMAC9DDAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAsBywHLAcsBywHLAcsBywHLQcwAMEMyAwsBywHLAcsBywHLAcsBywHLAcsBywHzAwwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwAHUAdQB1ANQM2QzhDDAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMABgAGAAYABgAGAAYABgAOkMYADxDGAA+AwADQYNYABhCWAAYAAODTAAMAAwADAAFg1gAGAAHg37AzAAMAAwADAAYABgACYNYAAsDTQNPA1gAEMNPg1LDWAAYABgAGAAYABgAGAAYABgAGAAUg1aDYsGVglhDV0NcQBnDW0NdQ15DWAAYABgAGAAYABgAGAAYABgAGAAYABgAGAAYABgAGAAlQCBDZUAiA2PDZcNMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAnw2nDTAAMAAwADAAMAAwAHUArw23DTAAMAAwADAAMAAwADAAMAAwADAAMAB1AL8NMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAB1AHUAdQB1AHUAdQDHDTAAYABgAM8NMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAA1w11ANwNMAAwAD0B5A0wADAAMAAwADAAMADsDfQN/A0EDgwOFA4wABsOMAAwADAAMAAwADAAMAAwANIG0gbSBtIG0gbSBtIG0gYjDigOwQUuDsEFMw7SBjoO0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIGQg5KDlIOVg7SBtIGXg5lDm0OdQ7SBtIGfQ6EDooOjQ6UDtIGmg6hDtIG0gaoDqwO0ga0DrwO0gZgAGAAYADEDmAAYAAkBtIGzA5gANIOYADaDokO0gbSBt8O5w7SBu8O0gb1DvwO0gZgAGAAxA7SBtIG0gbSBtIGYABgAGAAYAAED2AAsAUMD9IG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIGFA8sBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAccD9IGLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHJA8sBywHLAcsBywHLAccDywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywPLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAc0D9IG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIGLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAccD9IG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIGFA8sBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHLAcsBywHPA/SBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gbSBtIG0gYUD0QPlQCVAJUAMAAwADAAMACVAJUAlQCVAJUAlQCVAEwPMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAA//8EAAQABAAEAAQABAAEAAQABAANAAMAAQABAAIABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQACgATABcAHgAbABoAHgAXABYAEgAeABsAGAAPABgAHABLAEsASwBLAEsASwBLAEsASwBLABgAGAAeAB4AHgATAB4AUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQABYAGwASAB4AHgAeAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAWAA0AEQAeAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArAAQABAAEAAQABAAFAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAJABYAGgAbABsAGwAeAB0AHQAeAE8AFwAeAA0AHgAeABoAGwBPAE8ADgBQAB0AHQAdAE8ATwAXAE8ATwBPABYAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAB0AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAdAFAAUABQAFAAUABQAFAAUAAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAFAAHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAeAB4AHgAeAFAATwBAAE8ATwBPAEAATwBQAFAATwBQAB4AHgAeAB4AHgAeAB0AHQAdAB0AHgAdAB4ADgBQAFAAUABQAFAAHgAeAB4AHgAeAB4AHgBQAB4AUAAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4ABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAJAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAkACQAJAAkACQAJAAkABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAeAB4AHgAeAFAAHgAeAB4AKwArAFAAUABQAFAAGABQACsAKwArACsAHgAeAFAAHgBQAFAAUAArAFAAKwAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AKwAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4ABAAEAAQABAAEAAQABAAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArACsAUAAeAB4AHgAeAB4AHgBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAYAA0AKwArAB4AHgAbACsABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQADQAEAB4ABAAEAB4ABAAEABMABAArACsAKwArACsAKwArACsAVgBWAFYAVgBWAFYAVgBWAFYAVgBWAFYAVgBWAFYAVgBWAFYAVgBWAFYAVgBWAFYAVgBWAFYAKwArACsAKwBWAFYAVgBWAB4AHgArACsAKwArACsAKwArACsAKwArACsAHgAeAB4AHgAeAB4AHgAeAB4AGgAaABoAGAAYAB4AHgAEAAQABAAEAAQABAAEAAQABAAEAAQAEwAEACsAEwATAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABABLAEsASwBLAEsASwBLAEsASwBLABoAGQAZAB4AUABQAAQAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQABMAUAAEAAQABAAEAAQABAAEAB4AHgAEAAQABAAEAAQABABQAFAABAAEAB4ABAAEAAQABABQAFAASwBLAEsASwBLAEsASwBLAEsASwBQAFAAUAAeAB4AUAAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AKwAeAFAABABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAABAAEAAQABAAEAAQABAAEAAQABAAEAFAAKwArACsAKwArACsAKwArACsAKwArACsAKwArAEsASwBLAEsASwBLAEsASwBLAEsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAABAAEAAQABAAEAAQABAAEAAQAUABQAB4AHgAYABMAUAArACsABAAbABsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAEAAQABAAEAFAABAAEAAQABAAEAFAABAAEAAQAUAAEAAQABAAEAAQAKwArAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAEAAQABAArACsAHgArAFAAUABQAFAAUABQAFAAUABQAFAAUAArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArAFAAUABQAFAAUABQAFAAUABQAFAAKwArACsAKwArACsAKwArACsAKwArAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAB4ABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAAQABAAEAFAABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQAUAAEAAQABAAEAAQABAAEAFAAUABQAFAAUABQAFAAUABQAFAABAAEAA0ADQBLAEsASwBLAEsASwBLAEsASwBLAB4AUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAEAAQABAArAFAAUABQAFAAUABQAFAAUAArACsAUABQACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwBQAFAAUABQAFAAUABQACsAUAArACsAKwBQAFAAUABQACsAKwAEAFAABAAEAAQABAAEAAQABAArACsABAAEACsAKwAEAAQABABQACsAKwArACsAKwArACsAKwAEACsAKwArACsAUABQACsAUABQAFAABAAEACsAKwBLAEsASwBLAEsASwBLAEsASwBLAFAAUAAaABoAUABQAFAAUABQAEwAHgAbAFAAHgAEACsAKwAEAAQABAArAFAAUABQAFAAUABQACsAKwArACsAUABQACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwBQAFAAUABQAFAAUABQACsAUABQACsAUABQACsAUABQACsAKwAEACsABAAEAAQABAAEACsAKwArACsABAAEACsAKwAEAAQABAArACsAKwAEACsAKwArACsAKwArACsAUABQAFAAUAArAFAAKwArACsAKwArACsAKwBLAEsASwBLAEsASwBLAEsASwBLAAQABABQAFAAUAAEAB4AKwArACsAKwArACsAKwArACsAKwAEAAQABAArAFAAUABQAFAAUABQAFAAUABQACsAUABQAFAAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwBQAFAAUABQAFAAUABQACsAUABQACsAUABQAFAAUABQACsAKwAEAFAABAAEAAQABAAEAAQABAAEACsABAAEAAQAKwAEAAQABAArACsAUAArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwBQAFAABAAEACsAKwBLAEsASwBLAEsASwBLAEsASwBLAB4AGwArACsAKwArACsAKwArAFAABAAEAAQABAAEAAQAKwAEAAQABAArAFAAUABQAFAAUABQAFAAUAArACsAUABQACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAAQABAAEAAQABAArACsABAAEACsAKwAEAAQABAArACsAKwArACsAKwArAAQABAAEACsAKwArACsAUABQACsAUABQAFAABAAEACsAKwBLAEsASwBLAEsASwBLAEsASwBLAB4AUABQAFAAUABQAFAAUAArACsAKwArACsAKwArACsAKwArAAQAUAArAFAAUABQAFAAUABQACsAKwArAFAAUABQACsAUABQAFAAUAArACsAKwBQAFAAKwBQACsAUABQACsAKwArAFAAUAArACsAKwBQAFAAUAArACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUAArACsAKwArAAQABAAEAAQABAArACsAKwAEAAQABAArAAQABAAEAAQAKwArAFAAKwArACsAKwArACsABAArACsAKwArACsAKwArACsAKwArAEsASwBLAEsASwBLAEsASwBLAEsAUABQAFAAHgAeAB4AHgAeAB4AGwAeACsAKwArACsAKwAEAAQABAAEAAQAUABQAFAAUABQAFAAUABQACsAUABQAFAAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwArACsAUAAEAAQABAAEAAQABAAEACsABAAEAAQAKwAEAAQABAAEACsAKwArACsAKwArACsABAAEACsAUABQAFAAKwArACsAKwArAFAAUAAEAAQAKwArAEsASwBLAEsASwBLAEsASwBLAEsAKwArACsAKwArACsAKwAOAFAAUABQAFAAUABQAFAAHgBQAAQABAAEAA4AUABQAFAAUABQAFAAUABQACsAUABQAFAAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArAFAAUABQAFAAUABQAFAAUABQAFAAKwBQAFAAUABQAFAAKwArAAQAUAAEAAQABAAEAAQABAAEACsABAAEAAQAKwAEAAQABAAEACsAKwArACsAKwArACsABAAEACsAKwArACsAKwArACsAUAArAFAAUAAEAAQAKwArAEsASwBLAEsASwBLAEsASwBLAEsAKwBQAFAAKwArACsAKwArACsAKwArACsAKwArACsAKwAEAAQABAAEAFAAUABQAFAAUABQAFAAUABQACsAUABQAFAAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAABAAEAFAABAAEAAQABAAEAAQABAArAAQABAAEACsABAAEAAQABABQAB4AKwArACsAKwBQAFAAUAAEAFAAUABQAFAAUABQAFAAUABQAFAABAAEACsAKwBLAEsASwBLAEsASwBLAEsASwBLAFAAUABQAFAAUABQAFAAUABQABoAUABQAFAAUABQAFAAKwAEAAQABAArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsAKwArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArAFAAUABQAFAAUABQAFAAUABQACsAUAArACsAUABQAFAAUABQAFAAUAArACsAKwAEACsAKwArACsABAAEAAQABAAEAAQAKwAEACsABAAEAAQABAAEAAQABAAEACsAKwArACsAKwArAEsASwBLAEsASwBLAEsASwBLAEsAKwArAAQABAAeACsAKwArACsAKwArACsAKwArACsAKwArAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXAAqAFwAXAAqACoAKgAqACoAKgAqACsAKwArACsAGwBcAFwAXABcAFwAXABcACoAKgAqACoAKgAqACoAKgAeAEsASwBLAEsASwBLAEsASwBLAEsADQANACsAKwArACsAKwBcAFwAKwBcACsAXABcAFwAXABcACsAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcACsAXAArAFwAXABcAFwAXABcAFwAXABcAFwAKgBcAFwAKgAqACoAKgAqACoAKgAqACoAXAArACsAXABcAFwAXABcACsAXAArACoAKgAqACoAKgAqACsAKwBLAEsASwBLAEsASwBLAEsASwBLACsAKwBcAFwAXABcAFAADgAOAA4ADgAeAA4ADgAJAA4ADgANAAkAEwATABMAEwATAAkAHgATAB4AHgAeAAQABAAeAB4AHgAeAB4AHgBLAEsASwBLAEsASwBLAEsASwBLAFAAUABQAFAAUABQAFAAUABQAFAADQAEAB4ABAAeAAQAFgARABYAEQAEAAQAUABQAFAAUABQAFAAUABQACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwArACsAKwAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQADQAEAAQABAAEAAQADQAEAAQAUABQAFAAUABQAAQABAAEAAQABAAEAAQABAAEAAQABAArAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAArAA0ADQAeAB4AHgAeAB4AHgAEAB4AHgAeAB4AHgAeACsAHgAeAA4ADgANAA4AHgAeAB4AHgAeAAkACQArACsAKwArACsAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcACoAKgAqACoAKgAqACoAKgAqACoAKgAqACoAKgAqACoAKgAqACoAKgBcAEsASwBLAEsASwBLAEsASwBLAEsADQANAB4AHgAeAB4AXABcAFwAXABcAFwAKgAqACoAKgBcAFwAXABcACoAKgAqAFwAKgAqACoAXABcACoAKgAqACoAKgAqACoAXABcAFwAKgAqACoAKgBcAFwAXABcAFwAXABcAFwAXABcAFwAXABcACoAKgAqACoAKgAqACoAKgAqACoAKgAqAFwAKgBLAEsASwBLAEsASwBLAEsASwBLACoAKgAqACoAKgAqAFAAUABQAFAAUABQACsAUAArACsAKwArACsAUAArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAHgBQAFAAUABQAFgAWABYAFgAWABYAFgAWABYAFgAWABYAFgAWABYAFgAWABYAFgAWABYAFgAWABYAFgAWABYAFgAWABYAFgAWABZAFkAWQBZAFkAWQBZAFkAWQBZAFkAWQBZAFkAWQBZAFkAWQBZAFkAWQBZAFkAWQBZAFkAWQBZAFkAWQBZAFkAWgBaAFoAWgBaAFoAWgBaAFoAWgBaAFoAWgBaAFoAWgBaAFoAWgBaAFoAWgBaAFoAWgBaAFoAWgBaAFoAWgBaAFAAUABQAFAAUABQAFAAUABQACsAUABQAFAAUAArACsAUABQAFAAUABQAFAAUAArAFAAKwBQAFAAUABQACsAKwBQAFAAUABQAFAAUABQAFAAUAArAFAAUABQAFAAKwArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArAFAAUABQAFAAKwArAFAAUABQAFAAUABQAFAAKwBQACsAUABQAFAAUAArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwBQAFAAUABQACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArACsABAAEAAQAHgANAB4AHgAeAB4AHgAeAB4AUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsAKwArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAHgAeAB4AHgAeAB4AHgAeAB4AHgArACsAKwArACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsAKwBQAFAAUABQAFAAUAArACsADQBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAHgAeAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAANAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAWABEAKwArACsAUABQAFAAUABQAFAAUABQAFAAUABQAA0ADQANAFAAUABQAFAAUABQAFAAUABQAFAAUAArACsAKwArACsAKwArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwBQAFAAUABQAAQABAAEACsAKwArACsAKwArACsAKwArACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAEAAQABAANAA0AKwArACsAKwArACsAKwArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAABAAEACsAKwArACsAKwArACsAKwArACsAKwArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwBQAFAAUAArAAQABAArACsAKwArACsAKwArACsAKwArACsAKwBcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAKgAqACoAKgAqACoAKgAqACoAKgAqACoAKgAqACoAKgAqACoAKgAqAA0ADQAVAFwADQAeAA0AGwBcACoAKwArAEsASwBLAEsASwBLAEsASwBLAEsAKwArACsAKwArACsAUABQAFAAUABQAFAAUABQAFAAUAArACsAKwArACsAKwAeAB4AEwATAA0ADQAOAB4AEwATAB4ABAAEAAQACQArAEsASwBLAEsASwBLAEsASwBLAEsAKwArACsAKwArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArACsAKwArACsAKwArAFAAUABQAFAAUAAEAAQAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAAQAUAArACsAKwArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArACsAKwArACsAKwArACsAKwArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwAEAAQABAAEAAQABAAEAAQABAAEAAQABAArACsAKwArAAQABAAEAAQABAAEAAQABAAEAAQABAAEACsAKwArACsAHgArACsAKwATABMASwBLAEsASwBLAEsASwBLAEsASwBcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXAArACsAXABcAFwAXABcACsAKwArACsAKwArACsAKwArACsAKwBcAFwAXABcAFwAXABcAFwAXABcAFwAXAArACsAKwArAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcACsAKwArACsAKwArAEsASwBLAEsASwBLAEsASwBLAEsAXAArACsAKwAqACoAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAAQABAAEAAQABAArACsAHgAeAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcACoAKgAqACoAKgAqACoAKgAqACoAKwAqACoAKgAqACoAKgAqACoAKgAqACoAKgAqACoAKgAqACoAKgAqACoAKgAqACoAKgAqACoAKgAqACoAKwArAAQASwBLAEsASwBLAEsASwBLAEsASwArACsAKwArACsAKwBLAEsASwBLAEsASwBLAEsASwBLACsAKwArACsAKwArACoAKgAqACoAKgAqACoAXAAqACoAKgAqACoAKgArACsABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsABAAEAAQABAAEAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAAQABAAEAAQABABQAFAAUABQAFAAUABQACsAKwArACsASwBLAEsASwBLAEsASwBLAEsASwANAA0AHgANAA0ADQANAB4AHgAeAB4AHgAeAB4AHgAeAB4ABAAEAAQABAAEAAQABAAEAAQAHgAeAB4AHgAeAB4AHgAeAB4AKwArACsABAAEAAQAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAABAAEAAQABAAEAAQABAAEAAQABAAEAAQABABQAFAASwBLAEsASwBLAEsASwBLAEsASwBQAFAAUABQAFAAUABQAFAABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEACsAKwArACsAKwArACsAKwAeAB4AHgAeAFAAUABQAFAABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEACsAKwArAA0ADQANAA0ADQBLAEsASwBLAEsASwBLAEsASwBLACsAKwArAFAAUABQAEsASwBLAEsASwBLAEsASwBLAEsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAA0ADQBQAFAAUABQAFAAUABQAFAAUAArACsAKwArACsAKwArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsAKwBQAFAAUAAeAB4AHgAeAB4AHgAeAB4AKwArACsAKwArACsAKwArAAQABAAEAB4ABAAEAAQABAAEAAQABAAEAAQABAAEAAQABABQAFAAUABQAAQAUABQAFAAUABQAFAABABQAFAABAAEAAQAUAArACsAKwArACsABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEACsABAAEAAQABAAEAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AKwArAFAAUABQAFAAUABQACsAKwBQAFAAUABQAFAAUABQAFAAKwBQACsAUAArAFAAKwAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeACsAKwAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgArAB4AHgAeAB4AHgAeAB4AHgBQAB4AHgAeAFAAUABQACsAHgAeAB4AHgAeAB4AHgAeAB4AHgBQAFAAUABQACsAKwAeAB4AHgAeAB4AHgArAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AKwArAFAAUABQACsAHgAeAB4AHgAeAB4AHgAOAB4AKwANAA0ADQANAA0ADQANAAkADQANAA0ACAAEAAsABAAEAA0ACQANAA0ADAAdAB0AHgAXABcAFgAXABcAFwAWABcAHQAdAB4AHgAUABQAFAANAAEAAQAEAAQABAAEAAQACQAaABoAGgAaABoAGgAaABoAHgAXABcAHQAVABUAHgAeAB4AHgAeAB4AGAAWABEAFQAVABUAHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4ADQAeAA0ADQANAA0AHgANAA0ADQAHAB4AHgAeAB4AKwAEAAQABAAEAAQABAAEAAQABAAEAFAAUAArACsATwBQAFAAUABQAFAAHgAeAB4AFgARAE8AUABPAE8ATwBPAFAAUABQAFAAUAAeAB4AHgAWABEAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsAKwArABsAGwAbABsAGwAbABsAGgAbABsAGwAbABsAGwAbABsAGwAbABsAGwAbABsAGgAbABsAGwAbABoAGwAbABoAGwAbABsAGwAbABsAGwAbABsAGwAbABsAGwAbABsAGwAbAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQAHgAeAFAAGgAeAB0AHgBQAB4AGgAeAB4AHgAeAB4AHgAeAB4AHgBPAB4AUAAbAB4AHgBQAFAAUABQAFAAHgAeAB4AHQAdAB4AUAAeAFAAHgBQAB4AUABPAFAAUAAeAB4AHgAeAB4AHgAeAFAAUABQAFAAUAAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAFAAHgBQAFAAUABQAE8ATwBQAFAAUABQAFAATwBQAFAATwBQAE8ATwBPAE8ATwBPAE8ATwBPAE8ATwBPAFAAUABQAFAATwBPAE8ATwBPAE8ATwBPAE8ATwBQAFAAUABQAFAAUABQAFAAUAAeAB4AUABQAFAAUABPAB4AHgArACsAKwArAB0AHQAdAB0AHQAdAB0AHQAdAB0AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB0AHgAdAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAdAB4AHQAdAB4AHgAeAB0AHQAeAB4AHQAeAB4AHgAdAB4AHQAbABsAHgAdAB4AHgAeAB4AHQAeAB4AHQAdAB0AHQAeAB4AHQAeAB0AHgAdAB0AHQAdAB0AHQAeAB0AHgAeAB4AHgAeAB0AHQAdAB0AHgAeAB4AHgAdAB0AHgAeAB4AHgAeAB4AHgAeAB4AHgAdAB4AHgAeAB0AHgAeAB4AHgAeAB0AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAdAB0AHgAeAB0AHQAdAB0AHgAeAB0AHQAeAB4AHQAdAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB0AHQAeAB4AHQAdAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHQAeAB4AHgAdAB4AHgAeAB4AHgAeAB4AHQAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB0AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AFAAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeABYAEQAWABEAHgAeAB4AHgAeAB4AHQAeAB4AHgAeAB4AHgAeACUAJQAeAB4AHgAeAB4AHgAeAB4AHgAWABEAHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AJQAlACUAJQAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArAE8ATwBPAE8ATwBPAE8ATwBPAE8ATwBPAE8ATwBPAE8ATwBPAE8ATwBPAE8ATwBPAE8ATwBPAE8ATwBPAE8ATwAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAE8ATwBPAE8ATwBPAE8ATwBPAE8ATwBPAE8ATwBPAE8ATwBPAE8ATwBPAFAAHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHgAeAB4AHgAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAeAB4AHQAdAB0AHQAeAB4AHgAeAB4AHgAeAB4AHgAeAB0AHQAeAB0AHQAdAB0AHQAdAB0AHgAeAB4AHgAeAB4AHgAeAB0AHQAeAB4AHQAdAB4AHgAeAB4AHQAdAB4AHgAeAB4AHQAdAB0AHgAeAB0AHgAeAB0AHQAdAB0AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAdAB0AHQAdAB4AHgAeAB4AHgAeAB4AHgAeAB0AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAlACUAJQAlAB4AHQAdAB4AHgAdAB4AHgAeAB4AHQAdAB4AHgAeAB4AJQAlAB0AHQAlAB4AJQAlACUAIAAlACUAHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAlACUAJQAeAB4AHgAeAB0AHgAdAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAdAB0AHgAdAB0AHQAeAB0AJQAdAB0AHgAdAB0AHgAdAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeACUAHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHQAdAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAlACUAJQAlACUAJQAlACUAJQAlACUAJQAdAB0AHQAdACUAHgAlACUAJQAdACUAJQAdAB0AHQAlACUAHQAdACUAHQAdACUAJQAlAB4AHQAeAB4AHgAeAB0AHQAlAB0AHQAdAB0AHQAdACUAJQAlACUAJQAdACUAJQAgACUAHQAdACUAJQAlACUAJQAlACUAJQAeAB4AHgAlACUAIAAgACAAIAAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB0AHgAeAB4AFwAXABcAFwAXABcAHgATABMAJQAeAB4AHgAWABEAFgARABYAEQAWABEAFgARABYAEQAWABEATwBPAE8ATwBPAE8ATwBPAE8ATwBPAE8ATwBPAE8ATwBPAE8ATwBPAE8ATwAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeABYAEQAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAWABEAFgARABYAEQAWABEAFgARAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AFgARABYAEQAWABEAFgARABYAEQAWABEAFgARABYAEQAWABEAFgARABYAEQAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAWABEAFgARAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AFgARAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAdAB0AHQAdAB0AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgArACsAHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AKwAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AUABQAFAAUAAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAEAAQABAAeAB4AKwArACsAKwArABMADQANAA0AUAATAA0AUABQAFAAUABQAFAAUABQACsAKwArACsAKwArACsAUAANACsAKwArACsAKwArACsAKwArACsAKwArACsAKwAEAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArACsAKwArACsAKwArACsAKwBQAFAAUABQAFAAUABQACsAUABQAFAAUABQAFAAUAArAFAAUABQAFAAUABQAFAAKwBQAFAAUABQAFAAUABQACsAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXAA0ADQANAA0ADQANAA0ADQAeAA0AFgANAB4AHgAXABcAHgAeABcAFwAWABEAFgARABYAEQAWABEADQANAA0ADQATAFAADQANAB4ADQANAB4AHgAeAB4AHgAMAAwADQANAA0AHgANAA0AFgANAA0ADQANAA0ADQANAA0AHgANAB4ADQANAB4AHgAeACsAKwArACsAKwArACsAKwArACsAKwArACsAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACsAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAKwArACsAKwArACsAKwArACsAKwArACsAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwAlACUAJQAlACUAJQAlACUAJQAlACUAJQArACsAKwArAA0AEQARACUAJQBHAFcAVwAWABEAFgARABYAEQAWABEAFgARACUAJQAWABEAFgARABYAEQAWABEAFQAWABEAEQAlAFcAVwBXAFcAVwBXAFcAVwBXAAQABAAEAAQABAAEACUAVwBXAFcAVwA2ACUAJQBXAFcAVwBHAEcAJQAlACUAKwBRAFcAUQBXAFEAVwBRAFcAUQBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFEAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBRAFcAUQBXAFEAVwBXAFcAVwBXAFcAUQBXAFcAVwBXAFcAVwBRAFEAKwArAAQABAAVABUARwBHAFcAFQBRAFcAUQBXAFEAVwBRAFcAUQBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFEAVwBRAFcAUQBXAFcAVwBXAFcAVwBRAFcAVwBXAFcAVwBXAFEAUQBXAFcAVwBXABUAUQBHAEcAVwArACsAKwArACsAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAKwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAKwAlACUAVwBXAFcAVwAlACUAJQAlACUAJQAlACUAJQAlACsAKwArACsAKwArACsAKwArACsAKwArAFEAUQBRAFEAUQBRAFEAUQBRAFEAUQBRAFEAUQBRAFEAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQArAFcAVwBXAFcAVwBXAFcAVwBXAFcAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQBPAE8ATwBPAE8ATwBPAE8AJQBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXACUAJQAlAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAEcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAKwArACsAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQArACsAKwArACsAKwArACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAADQATAA0AUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABLAEsASwBLAEsASwBLAEsASwBLAFAAUAArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAFAABAAEAAQABAAeAAQABAAEAAQABAAEAAQABAAEAAQAHgBQAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AUABQAAQABABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAAQABAAeAA0ADQANAA0ADQArACsAKwArACsAKwArACsAHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAFAAUABQAFAAUABQAFAAUABQAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AUAAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgBQAB4AHgAeAB4AHgAeAFAAHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgArACsAHgAeAB4AHgAeAB4AHgAeAB4AKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwAeAB4AUABQAFAAUABQAFAAUABQAFAAUABQAAQAUABQAFAABABQAFAAUABQAAQAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAAQABAAEAAQABAAeAB4AHgAeAAQAKwArACsAUABQAFAAUABQAFAAHgAeABoAHgArACsAKwArACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAADgAOABMAEwArACsAKwArACsAKwArACsABAAEAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAAQABAAEAAQABAAEACsAKwArACsAKwArACsAKwANAA0ASwBLAEsASwBLAEsASwBLAEsASwArACsAKwArACsAKwAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABABQAFAAUABQAFAAUAAeAB4AHgBQAA4AUABQAAQAUABQAFAAUABQAFAABAAEAAQABAAEAAQABAAEAA0ADQBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQAKwArACsAKwArACsAKwArACsAKwArAB4AWABYAFgAWABYAFgAWABYAFgAWABYAFgAWABYAFgAWABYAFgAWABYAFgAWABYAFgAWABYAFgAWABYACsAKwArAAQAHgAeAB4AHgAeAB4ADQANAA0AHgAeAB4AHgArAFAASwBLAEsASwBLAEsASwBLAEsASwArACsAKwArAB4AHgBcAFwAXABcAFwAKgBcAFwAXABcAFwAXABcAFwAXABcAEsASwBLAEsASwBLAEsASwBLAEsAXABcAFwAXABcACsAUABQAFAAUABQAFAAUABQAFAABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEACsAKwArACsAKwArACsAKwArAFAAUABQAAQAUABQAFAAUABQAFAAUABQAAQABAArACsASwBLAEsASwBLAEsASwBLAEsASwArACsAHgANAA0ADQBcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAKgAqACoAXAAqACoAKgBcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXAAqAFwAKgAqACoAXABcACoAKgBcAFwAXABcAFwAKgAqAFwAKgBcACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArAFwAXABcACoAKgBQAFAAUABQAFAAUABQAFAAUABQAFAABAAEAAQABAAEAA0ADQBQAFAAUAAEAAQAKwArACsAKwArACsAKwArACsAKwBQAFAAUABQAFAAUAArACsAUABQAFAAUABQAFAAKwArAFAAUABQAFAAUABQACsAKwArACsAKwArACsAKwArAFAAUABQAFAAUABQAFAAKwBQAFAAUABQAFAAUABQACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAHgAeACsAKwArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAEAAQABAAEAAQABAAEAAQADQAEAAQAKwArAEsASwBLAEsASwBLAEsASwBLAEsAKwArACsAKwArACsAVABVAFUAVQBVAFUAVQBVAFUAVQBVAFUAVQBVAFUAVQBVAFUAVQBVAFUAVQBVAFUAVQBVAFUAVQBUAFUAVQBVAFUAVQBVAFUAVQBVAFUAVQBVAFUAVQBVAFUAVQBVAFUAVQBVAFUAVQBVAFUAVQBVACsAKwArACsAKwArACsAKwArACsAKwArAFkAWQBZAFkAWQBZAFkAWQBZAFkAWQBZAFkAWQBZAFkAWQBZAFkAKwArACsAKwBaAFoAWgBaAFoAWgBaAFoAWgBaAFoAWgBaAFoAWgBaAFoAWgBaAFoAWgBaAFoAWgBaAFoAWgBaAFoAKwArACsAKwAGAAYABgAGAAYABgAGAAYABgAGAAYABgAGAAYABgAGAAYABgAGAAYABgAGAAYABgAGAAYABgAGAAYABgAGAAYAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXACUAJQBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAJQAlACUAJQAlACUAUABQAFAAUABQAFAAUAArACsAKwArACsAKwArACsAKwArACsAKwBQAFAAUABQAFAAKwArACsAKwArAFYABABWAFYAVgBWAFYAVgBWAFYAVgBWAB4AVgBWAFYAVgBWAFYAVgBWAFYAVgBWAFYAVgArAFYAVgBWAFYAVgArAFYAKwBWAFYAKwBWAFYAKwBWAFYAVgBWAFYAVgBWAFYAVgBWAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAEQAWAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUAAaAB4AKwArAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQAGAARABEAGAAYABMAEwAWABEAFAArACsAKwArACsAKwAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEACUAJQAlACUAJQAWABEAFgARABYAEQAWABEAFgARABYAEQAlACUAFgARACUAJQAlACUAJQAlACUAEQAlABEAKwAVABUAEwATACUAFgARABYAEQAWABEAJQAlACUAJQAlACUAJQAlACsAJQAbABoAJQArACsAKwArAFAAUABQAFAAUAArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwArAAcAKwATACUAJQAbABoAJQAlABYAEQAlACUAEQAlABEAJQBXAFcAVwBXAFcAVwBXAFcAVwBXABUAFQAlACUAJQATACUAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXABYAJQARACUAJQAlAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwAWACUAEQAlABYAEQARABYAEQARABUAVwBRAFEAUQBRAFEAUQBRAFEAUQBRAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAEcARwArACsAVwBXAFcAVwBXAFcAKwArAFcAVwBXAFcAVwBXACsAKwBXAFcAVwBXAFcAVwArACsAVwBXAFcAKwArACsAGgAbACUAJQAlABsAGwArAB4AHgAeAB4AHgAeAB4AKwArACsAKwArACsAKwArACsAKwAEAAQABAAQAB0AKwArAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwBQAFAAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArACsAKwArACsADQANAA0AKwArACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsAKwArAB4AHgAeAB4AHgAeAB4AHgAeAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgBQAFAAHgAeAB4AKwAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAAQAKwArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwAEAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsAKwArACsAKwArACsAKwArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwArACsAKwArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAABAAEAAQABAAEACsAKwArACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArAA0AUABQAFAAUAArACsAKwArAFAAUABQAFAAUABQAFAAUAANAFAAUABQAFAAUAArACsAKwArACsAKwArACsAKwArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwArACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsAKwArACsAKwArACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsAKwArACsAKwArACsAKwArACsAKwAeACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAUABQAFAAUABQAFAAKwArAFAAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArAFAAUAArACsAKwBQACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwANAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAeAB4AUABQAFAAUABQAFAAUAArACsAKwArACsAKwArAFAAUABQAFAAUABQAFAAUABQACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArAFAAUAArACsAKwArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsAKwArAA0AUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsAKwArACsAKwAeAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsAKwArACsAUABQAFAAUABQAAQABAAEACsABAAEACsAKwArACsAKwAEAAQABAAEAFAAUABQAFAAKwBQAFAAUAArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwArAAQABAAEACsAKwArACsABABQAFAAUABQAFAAUABQAFAAUAArACsAKwArACsAKwArAA0ADQANAA0ADQANAA0ADQAeACsAKwArACsAKwArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAeAFAAUABQAFAAUABQAFAAUAAeAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAAQABAArACsAKwArAFAAUABQAFAAUAANAA0ADQANAA0ADQAUACsAKwArACsAKwArACsAKwArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwArACsADQANAA0ADQANAA0ADQBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArACsAKwArACsAKwArAB4AHgAeAB4AKwArACsAKwArACsAKwArACsAKwArACsAUABQAFAAUABQAFAAUAArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArAFAAUABQAFAAUABQAFAAUABQACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsAKwArACsAKwArACsAKwArACsAKwArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArACsAKwArACsAKwArAFAAUABQAFAAUABQAAQABAAEAAQAKwArACsAKwArACsAKwArAEsASwBLAEsASwBLAEsASwBLAEsAKwArACsAKwArACsAUABQAFAAUABQAFAAUABQAFAAUAArAAQABAANACsAKwBQAFAAKwArACsAKwArACsAKwArACsAKwArACsAKwArAFAAUABQAFAAUABQAAQABAAEAAQABAAEAAQABAAEAAQABABQAFAAUABQAB4AHgAeAB4AHgArACsAKwArACsAKwAEAAQABAAEAAQABAAEAA0ADQAeAB4AHgAeAB4AKwArACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAEsASwBLAEsASwBLAEsASwBLAEsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsABABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAAQABAAEAAQABAAEAAQABAAEAAQABAAeAB4AHgANAA0ADQANACsAKwArACsAKwArACsAKwArACsAKwAeACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwArACsAKwArACsAKwBLAEsASwBLAEsASwBLAEsASwBLACsAKwArACsAKwArAFAAUABQAFAAUABQAFAABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEACsASwBLAEsASwBLAEsASwBLAEsASwANAA0ADQANAFAABAAEAFAAKwArACsAKwArACsAKwArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAABAAeAA4AUAArACsAKwArACsAKwArACsAKwAEAFAAUABQAFAADQANAB4ADQAEAAQABAAEAB4ABAAEAEsASwBLAEsASwBLAEsASwBLAEsAUAAOAFAADQANAA0AKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwArACsAKwArACsAKwArACsAKwArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAEAAQABAAEAAQABAAEAAQABAAEAAQABAANAA0AHgANAA0AHgAEACsAUABQAFAAUABQAFAAUAArAFAAKwBQAFAAUABQACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwBQAFAAUABQAFAAUABQAFAAUABQAA0AKwArACsAKwArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAEAAQABAAEAAQABAAEAAQABAAEAAQAKwArACsAKwArAEsASwBLAEsASwBLAEsASwBLAEsAKwArACsAKwArACsABAAEAAQABAArAFAAUABQAFAAUABQAFAAUAArACsAUABQACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwBQAFAAUABQAFAAUABQACsAUABQACsAUABQAFAAUABQACsABAAEAFAABAAEAAQABAAEAAQABAArACsABAAEACsAKwAEAAQABAArACsAUAArACsAKwArACsAKwAEACsAKwArACsAKwBQAFAAUABQAFAABAAEACsAKwAEAAQABAAEAAQABAAEACsAKwArAAQABAAEAAQABAArACsAKwArACsAKwArACsAKwArACsABAAEAAQABAAEAAQABABQAFAAUABQAA0ADQANAA0AHgBLAEsASwBLAEsASwBLAEsASwBLAA0ADQArAB4ABABQAFAAUAArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwAEAAQABAAEAFAAUAAeAFAAKwArACsAKwArACsAKwArAEsASwBLAEsASwBLAEsASwBLAEsAKwArACsAKwArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAABAAEAAQABAAEAAQABAArACsABAAEAAQABAAEAAQABAAEAAQADgANAA0AEwATAB4AHgAeAA0ADQANAA0ADQANAA0ADQANAA0ADQANAA0ADQANAFAAUABQAFAABAAEACsAKwAEAA0ADQAeAFAAKwArACsAKwArACsAKwArACsAKwArAEsASwBLAEsASwBLAEsASwBLAEsAKwArACsAKwArACsADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArAFAAUABQAFAAUABQAFAAUABQAFAAUAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAFAAKwArACsAKwArACsAKwBLAEsASwBLAEsASwBLAEsASwBLACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAXABcAFwAKwArACoAKgAqACoAKgAqACoAKgAqACoAKgAqACoAKgAqACsAKwArACsASwBLAEsASwBLAEsASwBLAEsASwBcAFwADQANAA0AKgBQAFAAUABQAFAAUABQAFAAUABQAFAAUAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAeACsAKwArACsASwBLAEsASwBLAEsASwBLAEsASwBQAFAAUABQAFAAUABQAFAAUAArACsAKwArACsAKwArACsAKwArACsAKwBQAFAAUABQAFAAUABQAFAAKwArAFAAKwArAFAAUABQAFAAUABQAFAAUAArAFAAUAArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAABAAEAAQABAAEAAQAKwAEAAQAKwArAAQABAAEAAQAUAAEAFAABAAEAA0ADQANACsAKwArACsAKwArACsAKwArAEsASwBLAEsASwBLAEsASwBLAEsAKwArACsAKwArACsAUABQAFAAUABQAFAAUABQACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAABAAEAAQABAAEAAQABAArACsABAAEAAQABAAEAAQABABQAA4AUAAEACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArAFAABAAEAAQABAAEAAQABAAEAAQABABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAEAAQABAAEAAQABAAEAFAABAAEAAQABAAOAB4ADQANAA0ADQAOAB4ABAArACsAKwArACsAKwArACsAUAAEAAQABAAEAAQABAAEAAQABAAEAAQAUABQAFAAUABQAFAAUABQAFAAUAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAA0ADQANAFAADgAOAA4ADQANACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwBQAFAAUABQAFAAUABQAFAAUAArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAABAAEAAQABAAEAAQABAAEACsABAAEAAQABAAEAAQABAAEAFAADQANAA0ADQANACsAKwArACsAKwArACsAKwArACsASwBLAEsASwBLAEsASwBLAEsASwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArACsAKwAOABMAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwArAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAArAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAArACsAKwArACsAKwArACsAKwBQAFAAUABQAFAAUABQACsAUABQACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAEAAQABAAEAAQABAArACsAKwAEACsABAAEACsABAAEAAQABAAEAAQABABQAAQAKwArACsAKwArACsAKwArAEsASwBLAEsASwBLAEsASwBLAEsAKwArACsAKwArACsAUABQAFAAUABQAFAAKwBQAFAAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAEAAQABAAEAAQAKwAEAAQAKwAEAAQABAAEAAQAUAArACsAKwArACsAKwArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAABAAEAAQABAAeAB4AKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwBQACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAB4AHgAeAB4AHgAeAB4AHgAaABoAGgAaAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgArACsAKwArACsAKwArACsAKwArACsAKwArAA0AUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsAKwArACsAKwArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsADQANAA0ADQANACsAKwArACsAKwArACsAKwArACsAKwBQAFAAUABQACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAASABIAEgAQwBDAEMAUABQAFAAUABDAFAAUABQAEgAQwBIAEMAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAASABDAEMAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwAJAAkACQAJAAkACQAJABYAEQArACsAKwArACsAKwArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABIAEMAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArAEsASwBLAEsASwBLAEsASwBLAEsAKwArACsAKwANAA0AKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwArAAQABAAEAAQABAANACsAKwArACsAKwArACsAKwArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAEAAQABAAEAAQABAAEAA0ADQANAB4AHgAeAB4AHgAeAFAAUABQAFAADQAeACsAKwArACsAKwArACsAKwArACsASwBLAEsASwBLAEsASwBLAEsASwArAFAAUABQAFAAUABQAFAAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArACsAKwArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAANAA0AHgAeACsAKwArACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAKwArACsAKwAEAFAABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQAKwArACsAKwArACsAKwAEAAQABAAEAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAARwBHABUARwAJACsAKwArACsAKwArACsAKwArACsAKwAEAAQAKwArACsAKwArACsAKwArACsAKwArACsAKwArAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXACsAKwArACsAKwArACsAKwBXAFcAVwBXAFcAVwBXAFcAVwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAUQBRAFEAKwArACsAKwArACsAKwArACsAKwArACsAKwBRAFEAUQBRACsAKwArACsAKwArACsAKwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXACsAKwArACsAUABQAFAAUABQAFAAUABQAFAAUABQACsAKwArACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsAKwArACsAKwArACsAUABQAFAAUABQAFAAUABQAFAAUAArACsAHgAEAAQADQAEAAQABAAEACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgArACsAKwArACsAKwArACsAKwArAB4AHgAeAB4AHgAeAB4AKwArAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAAQABAAEAAQABAAeAB4AHgAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAB4AHgAEAAQABAAEAAQABAAEAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4ABAAEAAQABAAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4ABAAEAAQAHgArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsAKwArACsAKwArACsAKwArACsAKwArAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgArACsAKwArACsAKwArACsAKwAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgArAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AKwBQAFAAKwArAFAAKwArAFAAUAArACsAUABQAFAAUAArAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeACsAUAArAFAAUABQAFAAUABQAFAAKwAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AKwBQAFAAUABQACsAKwBQAFAAUABQAFAAUABQAFAAKwBQAFAAUABQAFAAUABQACsAHgAeAFAAUABQAFAAUAArAFAAKwArACsAUABQAFAAUABQAFAAUAArAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AKwArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAHgBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgBQAFAAUABQAFAAUABQAFAAUABQAFAAHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAB4AHgAeAB4AHgAeAB4AHgAeACsAKwBLAEsASwBLAEsASwBLAEsASwBLAEsASwBLAEsASwBLAEsASwBLAEsASwBLAEsASwBLAEsASwBLAEsASwBLAEsASwBLAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAeAB4AHgAeAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAeAB4AHgAeAB4AHgAeAB4ABAAeAB4AHgAeAB4AHgAeAB4AHgAeAAQAHgAeAA0ADQANAA0AHgArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwAEAAQABAAEAAQAKwAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArAAQABAAEAAQABAAEAAQAKwAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQAKwArAAQABAAEAAQABAAEAAQAKwAEAAQAKwAEAAQABAAEAAQAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArACsAKwAEAAQABAAEAAQABAAEAFAAUABQAFAAUABQAFAAKwArAEsASwBLAEsASwBLAEsASwBLAEsAKwArACsAKwBQAB4AKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUAAEAAQABAAEAEsASwBLAEsASwBLAEsASwBLAEsAKwArACsAKwArABsAUABQAFAAUABQACsAKwBQAFAAUABQAFAAUABQAFAAUAAEAAQABAAEAAQABAAEACsAKwArACsAKwArACsAKwArAB4AHgAeAB4ABAAEAAQABAAEAAQABABQACsAKwArACsASwBLAEsASwBLAEsASwBLAEsASwArACsAKwArABYAFgArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAGgBQAFAAUAAaAFAAUABQAFAAKwArACsAKwArACsAKwArACsAKwArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAeAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQACsAKwBQAFAAUABQACsAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwBQAFAAKwBQACsAKwBQACsAUABQAFAAUABQAFAAUABQAFAAUAArAFAAUABQAFAAKwBQACsAUAArACsAKwArACsAKwBQACsAKwArACsAUAArAFAAKwBQACsAUABQAFAAKwBQAFAAKwBQACsAKwBQACsAUAArAFAAKwBQACsAUAArAFAAUAArAFAAKwArAFAAUABQAFAAKwBQAFAAUABQAFAAUABQACsAUABQAFAAUAArAFAAUABQAFAAKwBQACsAUABQAFAAUABQAFAAUABQAFAAUAArAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAArACsAKwArACsAUABQAFAAKwBQAFAAUABQAFAAKwBQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwAeAB4AKwArACsAKwArACsAKwArACsAKwArACsAKwArAE8ATwBPAE8ATwBPAE8ATwBPAE8ATwBPAE8AJQAlACUAHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHgAeAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB4AHgAeACUAJQAlAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQApACkAKQApACkAKQApACkAKQApACkAKQApACkAKQApACkAKQApACkAKQApACkAKQApACkAJQAlACUAJQAlACAAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAeAB4AJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlAB4AHgAlACUAJQAlACUAHgAlACUAJQAlACUAIAAgACAAJQAlACAAJQAlACAAIAAgACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACEAIQAhACEAIQAlACUAIAAgACUAJQAgACAAIAAgACAAIAAgACAAIAAgACAAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAJQAlACUAIAAlACUAJQAlACAAIAAgACUAIAAgACAAJQAlACUAJQAlACUAJQAgACUAIAAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAHgAlAB4AJQAeACUAJQAlACUAJQAgACUAJQAlACUAHgAlAB4AHgAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlAB4AHgAeAB4AHgAeAB4AJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAeAB4AHgAeAB4AHgAeAB4AHgAeACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACAAIAAlACUAJQAlACAAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACAAJQAlACUAJQAgACAAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAHgAeAB4AHgAeAB4AHgAeACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAeAB4AHgAeAB4AHgAlACUAJQAlACUAJQAlACAAIAAgACUAJQAlACAAIAAgACAAIAAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeABcAFwAXABUAFQAVAB4AHgAeAB4AJQAlACUAIAAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACAAIAAgACUAJQAlACUAJQAlACUAJQAlACAAJQAlACUAJQAlACUAJQAlACUAJQAlACAAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AJQAlACUAJQAlACUAJQAlACUAJQAlACUAHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AJQAlACUAJQAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeACUAJQAlACUAJQAlACUAJQAeAB4AHgAeAB4AHgAeAB4AHgAeACUAJQAlACUAJQAlAB4AHgAeAB4AHgAeAB4AHgAlACUAJQAlACUAJQAlACUAHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAgACUAJQAgACUAJQAlACUAJQAlACUAJQAgACAAIAAgACAAIAAgACAAJQAlACUAJQAlACUAIAAlACUAJQAlACUAJQAlACUAJQAgACAAIAAgACAAIAAgACAAIAAgACUAJQAgACAAIAAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAgACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACAAIAAlACAAIAAlACAAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAgACAAIAAlACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAJQAlAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AKwAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArAEsASwBLAEsASwBLAEsASwBLAEsAKwArACsAKwArACsAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAKwArAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXACUAJQBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwAlACUAJQAlACUAJQAlACUAJQAlACUAVwBXACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQBXAFcAVwBXAFcAVwBXAFcAVwBXAFcAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAJQAlACUAKwAEACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArACsAKwArAA=="),te=Array.isArray(ne)?function(X){for(var G=X.length,ne=[],te=0;te0;){var Kt=te[--tt];if(Array.isArray(X)?-1!==X.indexOf(Kt):X===Kt)for(var $t=ne;$t<=te.length;){var St;if((St=te[++$t])===G)return!0;if(St!==Ye)break}if(Kt!==Ye)break}return!1},ot=function(X,G){for(var ne=X;ne>=0;){var te=G[ne];if(te!==Ye)return te;ne--}return 0},xt=function(X,G,ne,te,Oe){if(0===ne[te])return Tr;var tt=te-1;if(Array.isArray(Oe)&&!0===Oe[tt])return Tr;var St=tt-1,Kt=tt+1,$t=G[tt],Pn=St>=0?G[St]:0,zn=G[Kt];if(2===$t&&3===zn)return Tr;if(-1!==Ji.indexOf($t))return"!";if(-1!==Ji.indexOf(zn)||-1!==ma.indexOf(zn))return Tr;if(8===ot(tt,G))return"\xf7";if(11===ja.get(X[tt])||($t===Nr||$t===gr)&&11===ja.get(X[Kt])||7===$t||7===zn||9===$t||-1===[Ye,tn,Ot].indexOf($t)&&9===zn||-1!==[Mn,Ln,In,Qt,ai].indexOf(zn)||ot(tt,G)===rn||rt(23,rn,tt,G)||rt([Mn,Ln],bn,tt,G)||rt(12,12,tt,G))return Tr;if($t===Ye)return"\xf7";if(23===$t||23===zn)return Tr;if(16===zn||16===$t)return"\xf7";if(-1!==[tn,Ot,bn].indexOf(zn)||14===$t||36===Pn&&-1!==st.indexOf($t)||$t===ai&&36===zn||zn===$n||-1!==ho.indexOf(zn)&&$t===jt||-1!==ho.indexOf($t)&&zn===jt||$t===dn&&-1!==[po,Nr,gr].indexOf(zn)||-1!==[po,Nr,gr].indexOf($t)&&zn===yn||-1!==ho.indexOf($t)&&-1!==ba.indexOf(zn)||-1!==ba.indexOf($t)&&-1!==ho.indexOf(zn)||-1!==[dn,yn].indexOf($t)&&(zn===jt||-1!==[rn,Ot].indexOf(zn)&&G[Kt+1]===jt)||-1!==[rn,Ot].indexOf($t)&&zn===jt||$t===jt&&-1!==[jt,ai,Qt].indexOf(zn))return Tr;if(-1!==[jt,ai,Qt,Mn,Ln].indexOf(zn))for(var Jn=tt;Jn>=0;){if((Ni=G[Jn])===jt)return Tr;if(-1===[ai,Qt].indexOf(Ni))break;Jn--}if(-1!==[dn,yn].indexOf(zn))for(Jn=-1!==[Mn,Ln].indexOf($t)?St:tt;Jn>=0;){var Ni;if((Ni=G[Jn])===jt)return Tr;if(-1===[ai,Qt].indexOf(Ni))break;Jn--}if(ao===$t&&-1!==[ao,Ms,hs,Hs].indexOf(zn)||-1!==[Ms,hs].indexOf($t)&&-1!==[Ms,Ds].indexOf(zn)||-1!==[Ds,Hs].indexOf($t)&&zn===Ds||-1!==uc.indexOf($t)&&-1!==[$n,yn].indexOf(zn)||-1!==uc.indexOf(zn)&&$t===dn||-1!==ho.indexOf($t)&&-1!==ho.indexOf(zn)||$t===Qt&&-1!==ho.indexOf(zn)||-1!==ho.concat(jt).indexOf($t)&&zn===rn&&-1===io.indexOf(X[Kt])||-1!==ho.concat(jt).indexOf(zn)&&$t===Ln)return Tr;if(41===$t&&41===zn){for(var ws=ne[tt],Hr=1;ws>0&&41===G[--ws];)Hr++;if(Hr%2!=0)return Tr}return $t===Nr&&zn===gr?Tr:"\xf7"},fn=function(X,G){G||(G={lineBreak:"normal",wordBreak:"normal"});var ne=function(X,G){void 0===G&&(G="strict");var ne=[],te=[],Oe=[];return X.forEach(function(tt,St){var Kt=ja.get(tt);if(Kt>50?(Oe.push(!0),Kt-=50):Oe.push(!1),-1!==["normal","auto","loose"].indexOf(G)&&-1!==[8208,8211,12316,12448].indexOf(tt))return te.push(St),ne.push(16);if(4===Kt||11===Kt){if(0===St)return te.push(St),ne.push(Gi);var $t=ne[St-1];return-1===Sa.indexOf($t)?(te.push(te[St-1]),ne.push($t)):(te.push(St),ne.push(Gi))}return te.push(St),31===Kt?ne.push("strict"===G?bn:po):Kt===kl||29===Kt?ne.push(Gi):43===Kt?ne.push(tt>=131072&&tt<=196605||tt>=196608&&tt<=262141?po:Gi):void ne.push(Kt)}),[te,ne,Oe]}(X,G.lineBreak),te=ne[0],Oe=ne[1],tt=ne[2];return("break-all"===G.wordBreak||"break-word"===G.wordBreak)&&(Oe=Oe.map(function(Kt){return-1!==[jt,Gi,kl].indexOf(Kt)?po:Kt})),[te,Oe,"keep-all"===G.wordBreak?tt.map(function(Kt,$t){return Kt&&X[$t]>=19968&&X[$t]<=40959}):void 0]},pn=function(){function X(G,ne,te,Oe){this.codePoints=G,this.required="!"===ne,this.start=te,this.end=Oe}return X.prototype.slice=function(){return Ve.apply(void 0,this.codePoints.slice(this.start,this.end))},X}(),li=function(X){return X>=48&&X<=57},mi=function(X){return li(X)||X>=65&&X<=70||X>=97&&X<=102},es=function(X){return 10===X||9===X||32===X},ss=function(X){return function(X){return function(X){return X>=97&&X<=122}(X)||function(X){return X>=65&&X<=90}(X)}(X)||function(X){return X>=128}(X)||95===X},Qo=function(X){return ss(X)||li(X)||45===X},ds=function(X){return X>=0&&X<=8||11===X||X>=14&&X<=31||127===X},ua=function(X,G){return 92===X&&10!==G},$s=function(X,G,ne){return 45===X?ss(G)||ua(G,ne):!!ss(X)||!(92!==X||!ua(X,G))},ll=function(X,G,ne){return 43===X||45===X?!!li(G)||46===G&&li(ne):li(46===X?G:X)},aa=function(X){var G=0,ne=1;(43===X[G]||45===X[G])&&(45===X[G]&&(ne=-1),G++);for(var te=[];li(X[G]);)te.push(X[G++]);var Oe=te.length?parseInt(Ve.apply(void 0,te),10):0;46===X[G]&&G++;for(var tt=[];li(X[G]);)tt.push(X[G++]);var St=tt.length,Kt=St?parseInt(Ve.apply(void 0,tt),10):0;(69===X[G]||101===X[G])&&G++;var $t=1;(43===X[G]||45===X[G])&&(45===X[G]&&($t=-1),G++);for(var Pn=[];li(X[G]);)Pn.push(X[G++]);var zn=Pn.length?parseInt(Ve.apply(void 0,Pn),10):0;return ne*(Oe+Kt*Math.pow(10,-St))*Math.pow(10,$t*zn)},XA={type:2},Sh={type:3},Zp={type:4},th={type:13},Wl={type:8},Qm={type:21},KA={type:9},Jp={type:10},eA={type:11},ci={type:12},Z_={type:14},To={type:23},Wm={type:1},b0={type:25},YA={type:24},Vy={type:26},Gy={type:27},qy={type:28},zf={type:29},nh={type:31},x0={type:32},jm=function(){function X(){this._value=[]}return X.prototype.write=function(G){this._value=this._value.concat(Ie(G))},X.prototype.read=function(){for(var G=[],ne=this.consumeToken();ne!==x0;)G.push(ne),ne=this.consumeToken();return G},X.prototype.consumeToken=function(){var G=this.consumeCodePoint();switch(G){case 34:return this.consumeStringToken(34);case 35:var ne=this.peekCodePoint(0),te=this.peekCodePoint(1),Oe=this.peekCodePoint(2);if(Qo(ne)||ua(te,Oe)){var tt=$s(ne,te,Oe)?2:1;return{type:5,value:this.consumeName(),flags:tt}}break;case 36:if(61===this.peekCodePoint(0))return this.consumeCodePoint(),th;break;case 39:return this.consumeStringToken(39);case 40:return XA;case 41:return Sh;case 42:if(61===this.peekCodePoint(0))return this.consumeCodePoint(),Z_;break;case 43:if(ll(G,this.peekCodePoint(0),this.peekCodePoint(1)))return this.reconsumeCodePoint(G),this.consumeNumericToken();break;case 44:return Zp;case 45:var Kt=G,$t=this.peekCodePoint(0),Pn=this.peekCodePoint(1);if(ll(Kt,$t,Pn))return this.reconsumeCodePoint(G),this.consumeNumericToken();if($s(Kt,$t,Pn))return this.reconsumeCodePoint(G),this.consumeIdentLikeToken();if(45===$t&&62===Pn)return this.consumeCodePoint(),this.consumeCodePoint(),YA;break;case 46:if(ll(G,this.peekCodePoint(0),this.peekCodePoint(1)))return this.reconsumeCodePoint(G),this.consumeNumericToken();break;case 47:if(42===this.peekCodePoint(0))for(this.consumeCodePoint();;){var zn=this.consumeCodePoint();if(42===zn&&47===(zn=this.consumeCodePoint()))return this.consumeToken();if(-1===zn)return this.consumeToken()}break;case 58:return Vy;case 59:return Gy;case 60:if(33===this.peekCodePoint(0)&&45===this.peekCodePoint(1)&&45===this.peekCodePoint(2))return this.consumeCodePoint(),this.consumeCodePoint(),b0;break;case 64:var Jn=this.peekCodePoint(0),Ni=this.peekCodePoint(1),ws=this.peekCodePoint(2);if($s(Jn,Ni,ws))return{type:7,value:this.consumeName()};break;case 91:return qy;case 92:if(ua(G,this.peekCodePoint(0)))return this.reconsumeCodePoint(G),this.consumeIdentLikeToken();break;case 93:return zf;case 61:if(61===this.peekCodePoint(0))return this.consumeCodePoint(),Wl;break;case 123:return eA;case 125:return ci;case 117:case 85:var Hr=this.peekCodePoint(0),fs=this.peekCodePoint(1);return 43===Hr&&(mi(fs)||63===fs)&&(this.consumeCodePoint(),this.consumeUnicodeRangeToken()),this.reconsumeCodePoint(G),this.consumeIdentLikeToken();case 124:if(61===this.peekCodePoint(0))return this.consumeCodePoint(),KA;if(124===this.peekCodePoint(0))return this.consumeCodePoint(),Qm;break;case 126:if(61===this.peekCodePoint(0))return this.consumeCodePoint(),Jp;break;case-1:return x0}return es(G)?(this.consumeWhiteSpace(),nh):li(G)?(this.reconsumeCodePoint(G),this.consumeNumericToken()):ss(G)?(this.reconsumeCodePoint(G),this.consumeIdentLikeToken()):{type:6,value:Ve(G)}},X.prototype.consumeCodePoint=function(){var G=this._value.shift();return typeof G>"u"?-1:G},X.prototype.reconsumeCodePoint=function(G){this._value.unshift(G)},X.prototype.peekCodePoint=function(G){return G>=this._value.length?-1:this._value[G]},X.prototype.consumeUnicodeRangeToken=function(){for(var G=[],ne=this.consumeCodePoint();mi(ne)&&G.length<6;)G.push(ne),ne=this.consumeCodePoint();for(var te=!1;63===ne&&G.length<6;)G.push(ne),ne=this.consumeCodePoint(),te=!0;if(te)return{type:30,start:parseInt(Ve.apply(void 0,G.map(function($t){return 63===$t?48:$t})),16),end:parseInt(Ve.apply(void 0,G.map(function($t){return 63===$t?70:$t})),16)};var St=parseInt(Ve.apply(void 0,G),16);if(45===this.peekCodePoint(0)&&mi(this.peekCodePoint(1))){this.consumeCodePoint(),ne=this.consumeCodePoint();for(var Kt=[];mi(ne)&&Kt.length<6;)Kt.push(ne),ne=this.consumeCodePoint();return{type:30,start:St,end:parseInt(Ve.apply(void 0,Kt),16)}}return{type:30,start:St,end:St}},X.prototype.consumeIdentLikeToken=function(){var G=this.consumeName();return"url"===G.toLowerCase()&&40===this.peekCodePoint(0)?(this.consumeCodePoint(),this.consumeUrlToken()):40===this.peekCodePoint(0)?(this.consumeCodePoint(),{type:19,value:G}):{type:20,value:G}},X.prototype.consumeUrlToken=function(){var G=[];if(this.consumeWhiteSpace(),-1===this.peekCodePoint(0))return{type:22,value:""};var ne=this.peekCodePoint(0);if(39===ne||34===ne){var te=this.consumeStringToken(this.consumeCodePoint());return 0===te.type&&(this.consumeWhiteSpace(),-1===this.peekCodePoint(0)||41===this.peekCodePoint(0))?(this.consumeCodePoint(),{type:22,value:te.value}):(this.consumeBadUrlRemnants(),To)}for(;;){var Oe=this.consumeCodePoint();if(-1===Oe||41===Oe)return{type:22,value:Ve.apply(void 0,G)};if(es(Oe))return this.consumeWhiteSpace(),-1===this.peekCodePoint(0)||41===this.peekCodePoint(0)?(this.consumeCodePoint(),{type:22,value:Ve.apply(void 0,G)}):(this.consumeBadUrlRemnants(),To);if(34===Oe||39===Oe||40===Oe||ds(Oe))return this.consumeBadUrlRemnants(),To;if(92===Oe){if(!ua(Oe,this.peekCodePoint(0)))return this.consumeBadUrlRemnants(),To;G.push(this.consumeEscapedCodePoint())}else G.push(Oe)}},X.prototype.consumeWhiteSpace=function(){for(;es(this.peekCodePoint(0));)this.consumeCodePoint()},X.prototype.consumeBadUrlRemnants=function(){for(;;){var G=this.consumeCodePoint();if(41===G||-1===G)return;ua(G,this.peekCodePoint(0))&&this.consumeEscapedCodePoint()}},X.prototype.consumeStringSlice=function(G){for(var te="";G>0;){var Oe=Math.min(5e4,G);te+=Ve.apply(void 0,this._value.splice(0,Oe)),G-=Oe}return this._value.shift(),te},X.prototype.consumeStringToken=function(G){for(var ne="",te=0;;){var Oe=this._value[te];if(-1===Oe||void 0===Oe||Oe===G)return{type:0,value:ne+=this.consumeStringSlice(te)};if(10===Oe)return this._value.splice(0,te),Wm;if(92===Oe){var tt=this._value[te+1];-1!==tt&&void 0!==tt&&(10===tt?(ne+=this.consumeStringSlice(te),te=-1,this._value.shift()):ua(Oe,tt)&&(ne+=this.consumeStringSlice(te),ne+=Ve(this.consumeEscapedCodePoint()),te=-1))}te++}},X.prototype.consumeNumber=function(){var G=[],ne=4,te=this.peekCodePoint(0);for((43===te||45===te)&&G.push(this.consumeCodePoint());li(this.peekCodePoint(0));)G.push(this.consumeCodePoint());te=this.peekCodePoint(0);var Oe=this.peekCodePoint(1);if(46===te&&li(Oe))for(G.push(this.consumeCodePoint(),this.consumeCodePoint()),ne=8;li(this.peekCodePoint(0));)G.push(this.consumeCodePoint());te=this.peekCodePoint(0),Oe=this.peekCodePoint(1);var tt=this.peekCodePoint(2);if((69===te||101===te)&&((43===Oe||45===Oe)&&li(tt)||li(Oe)))for(G.push(this.consumeCodePoint(),this.consumeCodePoint()),ne=8;li(this.peekCodePoint(0));)G.push(this.consumeCodePoint());return[aa(G),ne]},X.prototype.consumeNumericToken=function(){var G=this.consumeNumber(),ne=G[0],te=G[1],Oe=this.peekCodePoint(0),tt=this.peekCodePoint(1),St=this.peekCodePoint(2);return $s(Oe,tt,St)?{type:15,number:ne,flags:te,unit:this.consumeName()}:37===Oe?(this.consumeCodePoint(),{type:16,number:ne,flags:te}):{type:17,number:ne,flags:te}},X.prototype.consumeEscapedCodePoint=function(){var G=this.consumeCodePoint();if(mi(G)){for(var ne=Ve(G);mi(this.peekCodePoint(0))&&ne.length<6;)ne+=Ve(this.consumeCodePoint());es(this.peekCodePoint(0))&&this.consumeCodePoint();var te=parseInt(ne,16);return 0===te||function(X){return X>=55296&&X<=57343}(te)||te>1114111?65533:te}return-1===G?65533:G},X.prototype.consumeName=function(){for(var G="";;){var ne=this.consumeCodePoint();if(Qo(ne))G+=Ve(ne);else{if(!ua(ne,this.peekCodePoint(0)))return this.reconsumeCodePoint(ne),G;G+=Ve(this.consumeEscapedCodePoint())}}},X}(),Th=function(){function X(G){this._tokens=G}return X.create=function(G){var ne=new jm;return ne.write(G),new X(ne.read())},X.parseValue=function(G){return X.create(G).parseComponentValue()},X.parseValues=function(G){return X.create(G).parseComponentValues()},X.prototype.parseComponentValue=function(){for(var G=this.consumeToken();31===G.type;)G=this.consumeToken();if(32===G.type)throw new SyntaxError("Error parsing CSS component value, unexpected EOF");this.reconsumeToken(G);var ne=this.consumeComponentValue();do{G=this.consumeToken()}while(31===G.type);if(32===G.type)return ne;throw new SyntaxError("Error parsing CSS component value, multiple values found when expecting only one")},X.prototype.parseComponentValues=function(){for(var G=[];;){var ne=this.consumeComponentValue();if(32===ne.type)return G;G.push(ne),G.push()}},X.prototype.consumeComponentValue=function(){var G=this.consumeToken();switch(G.type){case 11:case 28:case 2:return this.consumeSimpleBlock(G.type);case 19:return this.consumeFunction(G)}return G},X.prototype.consumeSimpleBlock=function(G){for(var ne={type:G,values:[]},te=this.consumeToken();;){if(32===te.type||ZA(te,G))return ne;this.reconsumeToken(te),ne.values.push(this.consumeComponentValue()),te=this.consumeToken()}},X.prototype.consumeFunction=function(G){for(var ne={name:G.value,values:[],type:18};;){var te=this.consumeToken();if(32===te.type||3===te.type)return ne;this.reconsumeToken(te),ne.values.push(this.consumeComponentValue())}},X.prototype.consumeToken=function(){var G=this._tokens.shift();return typeof G>"u"?x0:G},X.prototype.reconsumeToken=function(G){this._tokens.unshift(G)},X}(),Jl=function(X){return 15===X.type},Vs=function(X){return 17===X.type},za=function(X){return 20===X.type},ki=function(X){return 0===X.type},yc=function(X,G){return za(X)&&X.value===G},$m=function(X){return 31!==X.type},Fu=function(X){return 31!==X.type&&4!==X.type},vc=function(X){var G=[],ne=[];return X.forEach(function(te){if(4===te.type){if(0===ne.length)throw new Error("Error parsing function args, zero tokens for arg");return G.push(ne),void(ne=[])}31!==te.type&&ne.push(te)}),ne.length&&G.push(ne),G},ZA=function(X,G){return 11===G&&12===X.type||28===G&&29===X.type||2===G&&3===X.type},Fr=function(X){return 17===X.type||15===X.type},Ul=function(X){return 16===X.type||Fr(X)},JA=function(X){return X.length>1?[X[0],X[1]]:[X[0]]},il={type:17,number:0,flags:4},ia={type:16,number:50,flags:4},Cl={type:16,number:100,flags:4},lu=function(X,G,ne){var te=X[0],Oe=X[1];return[Oi(te,G),Oi(typeof Oe<"u"?Oe:te,ne)]},Oi=function(X,G){if(16===X.type)return X.number/100*G;if(Jl(X))switch(X.unit){case"rem":case"em":return 16*X.number;default:return X.number}return X.number},pu_parse=function(X,G){if(15===G.type)switch(G.unit){case"deg":return Math.PI*G.number/180;case"grad":return Math.PI/200*G.number;case"rad":return G.number;case"turn":return 2*Math.PI*G.number}throw new Error("Unsupported angle type")},Ic=function(X){return 15===X.type&&("deg"===X.unit||"grad"===X.unit||"rad"===X.unit||"turn"===X.unit)},Eh=function(X){switch(X.filter(za).map(function(ne){return ne.value}).join(" ")){case"to bottom right":case"to right bottom":case"left top":case"top left":return[il,il];case"to top":case"bottom":return ts(0);case"to bottom left":case"to left bottom":case"right top":case"top right":return[il,Cl];case"to right":case"left":return ts(90);case"to top left":case"to left top":case"right bottom":case"bottom right":return[Cl,Cl];case"to bottom":case"top":return ts(180);case"to top right":case"to right top":case"left bottom":case"bottom left":return[Cl,il];case"to left":case"right":return ts(270)}return 0},ts=function(X){return Math.PI*X/180},Xs_parse=function(X,G){if(18===G.type){var ne=qc[G.name];if(typeof ne>"u")throw new Error('Attempting to parse an unsupported color function "'+G.name+'"');return ne(X,G.values)}if(5===G.type){if(3===G.value.length){var te=G.value.substring(0,1),Oe=G.value.substring(1,2),tt=G.value.substring(2,3);return ka(parseInt(te+te,16),parseInt(Oe+Oe,16),parseInt(tt+tt,16),1)}if(4===G.value.length){te=G.value.substring(0,1),Oe=G.value.substring(1,2),tt=G.value.substring(2,3);var St=G.value.substring(3,4);return ka(parseInt(te+te,16),parseInt(Oe+Oe,16),parseInt(tt+tt,16),parseInt(St+St,16)/255)}if(6===G.value.length)return te=G.value.substring(0,2),Oe=G.value.substring(2,4),tt=G.value.substring(4,6),ka(parseInt(te,16),parseInt(Oe,16),parseInt(tt,16),1);if(8===G.value.length)return te=G.value.substring(0,2),Oe=G.value.substring(2,4),tt=G.value.substring(4,6),St=G.value.substring(6,8),ka(parseInt(te,16),parseInt(Oe,16),parseInt(tt,16),parseInt(St,16)/255)}if(20===G.type){var Kt=ih[G.value.toUpperCase()];if(typeof Kt<"u")return Kt}return ih.TRANSPARENT},Ks=function(X){return 0==(255&X)},Uo=function(X){var G=255&X,ne=255&X>>8,te=255&X>>16,Oe=255&X>>24;return G<255?"rgba("+Oe+","+te+","+ne+","+G/255+")":"rgb("+Oe+","+te+","+ne+")"},ka=function(X,G,ne,te){return(X<<24|G<<16|ne<<8|Math.round(255*te)<<0)>>>0},zt=function(X,G){if(17===X.type)return X.number;if(16===X.type){var ne=3===G?1:255;return 3===G?X.number/100*ne:Math.round(X.number/100*ne)}return 0},Zd=function(X,G){var ne=G.filter(Fu);if(3===ne.length){var te=ne.map(zt);return ka(te[0],te[1],te[2],1)}if(4===ne.length){var Kt=ne.map(zt);return ka(Kt[0],Kt[1],Kt[2],Kt[3])}return 0};function cl(X,G,ne){return ne<0&&(ne+=1),ne>=1&&(ne-=1),ne<1/6?(G-X)*ne*6+X:ne<.5?G:ne<2/3?6*(G-X)*(2/3-ne)+X:X}var Au=function(X,G){var ne=G.filter(Fu),te=ne[0],Oe=ne[1],tt=ne[2],St=ne[3],Kt=(17===te.type?ts(te.number):pu_parse(X,te))/(2*Math.PI),$t=Ul(Oe)?Oe.number/100:0,Pn=Ul(tt)?tt.number/100:0,zn=typeof St<"u"&&Ul(St)?Oi(St,1):1;if(0===$t)return ka(255*Pn,255*Pn,255*Pn,1);var Jn=Pn<=.5?Pn*($t+1):Pn+$t-Pn*$t,Ni=2*Pn-Jn,ws=cl(Ni,Jn,Kt+1/3),Hr=cl(Ni,Jn,Kt),fs=cl(Ni,Jn,Kt-1/3);return ka(255*ws,255*Hr,255*fs,zn)},qc={hsl:Au,hsla:Au,rgb:Zd,rgba:Zd},wo=function(X,G){return Xs_parse(X,Th.create(G).parseComponentValue())},ih={ALICEBLUE:4042850303,ANTIQUEWHITE:4209760255,AQUA:16777215,AQUAMARINE:2147472639,AZURE:4043309055,BEIGE:4126530815,BISQUE:4293182719,BLACK:255,BLANCHEDALMOND:4293643775,BLUE:65535,BLUEVIOLET:2318131967,BROWN:2771004159,BURLYWOOD:3736635391,CADETBLUE:1604231423,CHARTREUSE:2147418367,CHOCOLATE:3530104575,CORAL:4286533887,CORNFLOWERBLUE:1687547391,CORNSILK:4294499583,CRIMSON:3692313855,CYAN:16777215,DARKBLUE:35839,DARKCYAN:9145343,DARKGOLDENROD:3095837695,DARKGRAY:2846468607,DARKGREEN:6553855,DARKGREY:2846468607,DARKKHAKI:3182914559,DARKMAGENTA:2332068863,DARKOLIVEGREEN:1433087999,DARKORANGE:4287365375,DARKORCHID:2570243327,DARKRED:2332033279,DARKSALMON:3918953215,DARKSEAGREEN:2411499519,DARKSLATEBLUE:1211993087,DARKSLATEGRAY:793726975,DARKSLATEGREY:793726975,DARKTURQUOISE:13554175,DARKVIOLET:2483082239,DEEPPINK:4279538687,DEEPSKYBLUE:12582911,DIMGRAY:1768516095,DIMGREY:1768516095,DODGERBLUE:512819199,FIREBRICK:2988581631,FLORALWHITE:4294635775,FORESTGREEN:579543807,FUCHSIA:4278255615,GAINSBORO:3705462015,GHOSTWHITE:4177068031,GOLD:4292280575,GOLDENROD:3668254975,GRAY:2155905279,GREEN:8388863,GREENYELLOW:2919182335,GREY:2155905279,HONEYDEW:4043305215,HOTPINK:4285117695,INDIANRED:3445382399,INDIGO:1258324735,IVORY:4294963455,KHAKI:4041641215,LAVENDER:3873897215,LAVENDERBLUSH:4293981695,LAWNGREEN:2096890111,LEMONCHIFFON:4294626815,LIGHTBLUE:2916673279,LIGHTCORAL:4034953471,LIGHTCYAN:3774873599,LIGHTGOLDENRODYELLOW:4210742015,LIGHTGRAY:3553874943,LIGHTGREEN:2431553791,LIGHTGREY:3553874943,LIGHTPINK:4290167295,LIGHTSALMON:4288707327,LIGHTSEAGREEN:548580095,LIGHTSKYBLUE:2278488831,LIGHTSLATEGRAY:2005441023,LIGHTSLATEGREY:2005441023,LIGHTSTEELBLUE:2965692159,LIGHTYELLOW:4294959359,LIME:16711935,LIMEGREEN:852308735,LINEN:4210091775,MAGENTA:4278255615,MAROON:2147483903,MEDIUMAQUAMARINE:1724754687,MEDIUMBLUE:52735,MEDIUMORCHID:3126187007,MEDIUMPURPLE:2473647103,MEDIUMSEAGREEN:1018393087,MEDIUMSLATEBLUE:2070474495,MEDIUMSPRINGGREEN:16423679,MEDIUMTURQUOISE:1221709055,MEDIUMVIOLETRED:3340076543,MIDNIGHTBLUE:421097727,MINTCREAM:4127193855,MISTYROSE:4293190143,MOCCASIN:4293178879,NAVAJOWHITE:4292783615,NAVY:33023,OLDLACE:4260751103,OLIVE:2155872511,OLIVEDRAB:1804477439,ORANGE:4289003775,ORANGERED:4282712319,ORCHID:3664828159,PALEGOLDENROD:4008225535,PALEGREEN:2566625535,PALETURQUOISE:2951671551,PALEVIOLETRED:3681588223,PAPAYAWHIP:4293907967,PEACHPUFF:4292524543,PERU:3448061951,PINK:4290825215,PLUM:3718307327,POWDERBLUE:2967529215,PURPLE:2147516671,REBECCAPURPLE:1714657791,RED:4278190335,ROSYBROWN:3163525119,ROYALBLUE:1097458175,SADDLEBROWN:2336560127,SALMON:4202722047,SANDYBROWN:4104413439,SEAGREEN:780883967,SEASHELL:4294307583,SIENNA:2689740287,SILVER:3233857791,SKYBLUE:2278484991,SLATEBLUE:1784335871,SLATEGRAY:1887473919,SLATEGREY:1887473919,SNOW:4294638335,SPRINGGREEN:16744447,STEELBLUE:1182971135,TAN:3535047935,TEAL:8421631,THISTLE:3636451583,TOMATO:4284696575,TRANSPARENT:0,TURQUOISE:1088475391,VIOLET:4001558271,WHEAT:4125012991,WHITE:4294967295,WHITESMOKE:4126537215,YELLOW:4294902015,YELLOWGREEN:2597139199},rh={name:"background-clip",initialValue:"border-box",prefix:!1,type:1,parse:function(X,G){return G.map(function(ne){if(za(ne))switch(ne.value){case"padding-box":return 1;case"content-box":return 2}return 0})}},Jd={name:"background-color",initialValue:"transparent",prefix:!1,type:3,format:"color"},Ou=function(X,G){var ne=Xs_parse(X,G[0]),te=G[1];return te&&Ul(te)?{color:ne,stop:te}:{color:ne,stop:null}},Ol=function(X,G){var ne=X[0],te=X[X.length-1];null===ne.stop&&(ne.stop=il),null===te.stop&&(te.stop=Cl);for(var Oe=[],tt=0,St=0;Sttt?$t:tt),tt=$t}else Oe.push(null)}var Pn=null;for(St=0;StSt.optimumDistance)?{optimumCorner:Kt,optimumDistance:zn}:St},{optimumDistance:Oe?1/0:-1/0,optimumCorner:null}).optimumCorner},tm=function(X,G){var ne=ts(180),te=[];return vc(G).forEach(function(Oe,tt){if(0===tt){var St=Oe[0];if(20===St.type&&-1!==["top","left","right","bottom"].indexOf(St.value))return void(ne=Eh(Oe));if(Ic(St))return void(ne=(pu_parse(X,St)+ts(270))%ts(360))}var Kt=Ou(X,Oe);te.push(Kt)}),{angle:ne,stops:te,type:1}},lp="closest-side",tA="farthest-side",Dd="closest-corner",sh="farthest-corner",J_="ellipse",Wc="contain",Ih=function(X,G){var ne=0,te=3,Oe=[],tt=[];return vc(G).forEach(function(St,Kt){var $t=!0;if(0===Kt?$t=St.reduce(function(zn,Jn){if(za(Jn))switch(Jn.value){case"center":return tt.push(ia),!1;case"top":case"left":return tt.push(il),!1;case"right":case"bottom":return tt.push(Cl),!1}else if(Ul(Jn)||Fr(Jn))return tt.push(Jn),!1;return zn},$t):1===Kt&&($t=St.reduce(function(zn,Jn){if(za(Jn))switch(Jn.value){case"circle":return ne=0,!1;case J_:return ne=1,!1;case Wc:case lp:return te=0,!1;case tA:return te=1,!1;case Dd:return te=2,!1;case"cover":case sh:return te=3,!1}else if(Fr(Jn)||Ul(Jn))return Array.isArray(te)||(te=[]),te.push(Jn),!1;return zn},$t)),$t){var Pn=Ou(X,St);Oe.push(Pn)}}),{size:te,shape:ne,stops:Oe,position:tt,type:2}},mu_parse=function(X,G){if(22===G.type){var ne={url:G.value,type:0};return X.cache.addImage(G.value),ne}if(18===G.type){var te=Km[G.name];if(typeof te>"u")throw new Error('Attempting to parse an unsupported image function "'+G.name+'"');return te(X,G.values)}throw new Error("Unsupported image type "+G.type)};for(var Km={"linear-gradient":function(X,G){var ne=ts(180),te=[];return vc(G).forEach(function(Oe,tt){if(0===tt){var St=Oe[0];if(20===St.type&&"to"===St.value)return void(ne=Eh(Oe));if(Ic(St))return void(ne=pu_parse(X,St))}var Kt=Ou(X,Oe);te.push(Kt)}),{angle:ne,stops:te,type:1}},"-moz-linear-gradient":tm,"-ms-linear-gradient":tm,"-o-linear-gradient":tm,"-webkit-linear-gradient":tm,"radial-gradient":function(X,G){var ne=0,te=3,Oe=[],tt=[];return vc(G).forEach(function(St,Kt){var $t=!0;if(0===Kt){var Pn=!1;$t=St.reduce(function(Jn,Ni){if(Pn)if(za(Ni))switch(Ni.value){case"center":return tt.push(ia),Jn;case"top":case"left":return tt.push(il),Jn;case"right":case"bottom":return tt.push(Cl),Jn}else(Ul(Ni)||Fr(Ni))&&tt.push(Ni);else if(za(Ni))switch(Ni.value){case"circle":return ne=0,!1;case J_:return ne=1,!1;case"at":return Pn=!0,!1;case lp:return te=0,!1;case"cover":case tA:return te=1,!1;case Wc:case Dd:return te=2,!1;case sh:return te=3,!1}else if(Fr(Ni)||Ul(Ni))return Array.isArray(te)||(te=[]),te.push(Ni),!1;return Jn},$t)}if($t){var zn=Ou(X,St);Oe.push(zn)}}),{size:te,shape:ne,stops:Oe,position:tt,type:2}},"-moz-radial-gradient":Ih,"-ms-radial-gradient":Ih,"-o-radial-gradient":Ih,"-webkit-radial-gradient":Ih,"-webkit-gradient":function(X,G){var ne=ts(180),te=[],Oe=1;return vc(G).forEach(function($t,Pn){var zn=$t[0];if(0===Pn){if(za(zn)&&"linear"===zn.value)return void(Oe=1);if(za(zn)&&"radial"===zn.value)return void(Oe=2)}if(18===zn.type)if("from"===zn.name){var Jn=Xs_parse(X,zn.values[0]);te.push({stop:il,color:Jn})}else if("to"===zn.name)Jn=Xs_parse(X,zn.values[0]),te.push({stop:Cl,color:Jn});else if("color-stop"===zn.name){var Ni=zn.values.filter(Fu);if(2===Ni.length){Jn=Xs_parse(X,Ni[1]);var ws=Ni[0];Vs(ws)&&te.push({stop:{type:16,number:100*ws.number,flags:ws.flags},color:Jn})}}}),1===Oe?{angle:(ne+ts(180))%ts(360),stops:te,type:Oe}:{size:3,shape:0,stops:te,position:[],type:Oe}}},ef={name:"background-image",initialValue:"none",type:1,prefix:!1,parse:function(X,G){if(0===G.length)return[];var ne=G[0];return 20===ne.type&&"none"===ne.value?[]:G.filter(function(te){return Fu(te)&&function e1(X){return!(20===X.type&&"none"===X.value||18===X.type&&!Km[X.name])}(te)}).map(function(te){return mu_parse(X,te)})}},nm={name:"background-origin",initialValue:"border-box",prefix:!1,type:1,parse:function(X,G){return G.map(function(ne){if(za(ne))switch(ne.value){case"padding-box":return 1;case"content-box":return 2}return 0})}},oh={name:"background-position",initialValue:"0% 0%",type:1,prefix:!1,parse:function(X,G){return vc(G).map(function(ne){return ne.filter(Ul)}).map(JA)}},t1={name:"background-repeat",initialValue:"repeat",prefix:!1,type:1,parse:function(X,G){return vc(G).map(function(ne){return ne.filter(za).map(function(te){return te.value}).join(" ")}).map(Qy)}},Qy=function(X){switch(X){case"no-repeat":return 1;case"repeat-x":case"repeat no-repeat":return 2;case"repeat-y":case"no-repeat repeat":return 3;default:return 0}},rl=(()=>{return(X=rl||(rl={})).AUTO="auto",X.CONTAIN="contain",X.COVER="cover",rl;var X})(),w0={name:"background-size",initialValue:"0",prefix:!1,type:1,parse:function(X,G){return vc(G).map(function(ne){return ne.filter(kc)})}},kc=function(X){return za(X)||Ul(X)},n1=function(X){return{name:"border-"+X+"-color",initialValue:"transparent",prefix:!1,type:3,format:"color"}},Bd=n1("top"),cp=n1("right"),fx=n1("bottom"),r1=n1("left"),im=function(X){return{name:"border-radius-"+X,initialValue:"0 0",prefix:!1,type:1,parse:function(G,ne){return JA(ne.filter(Ul))}}},Ym=im("top-left"),g3=im("top-right"),Ts=im("bottom-right"),K2=im("bottom-left"),td=function(X){return{name:"border-"+X+"-style",initialValue:"solid",prefix:!1,type:2,parse:function(G,ne){switch(ne){case"none":return 0;case"dashed":return 2;case"dotted":return 3;case"double":return 4}return 1}}},s1=td("top"),bc=td("right"),up=td("bottom"),Wy=td("left"),rm=function(X){return{name:"border-"+X+"-width",initialValue:"0",type:0,prefix:!1,parse:function(G,ne){return Jl(ne)?ne.number:0}}},hp=rm("top"),Id=rm("right"),Ru=rm("bottom"),dp=rm("left"),C0={name:"color",initialValue:"transparent",prefix:!1,type:3,format:"color"},Lu={name:"direction",initialValue:"ltr",prefix:!1,type:2,parse:function(X,G){return"rtl"===G?1:0}},M0={name:"display",initialValue:"inline-block",prefix:!1,type:1,parse:function(X,G){return G.filter(za).reduce(function(ne,te){return ne|S0(te.value)},0)}},S0=function(X){switch(X){case"block":case"-webkit-box":return 2;case"inline":return 4;case"run-in":return 8;case"flow":return 16;case"flow-root":return 32;case"table":return 64;case"flex":case"-webkit-flex":return 128;case"grid":case"-ms-grid":return 256;case"ruby":return 512;case"subgrid":return 1024;case"list-item":return 2048;case"table-row-group":return 4096;case"table-header-group":return 8192;case"table-footer-group":return 16384;case"table-row":return 32768;case"table-cell":return 65536;case"table-column-group":return 131072;case"table-column":return 262144;case"table-caption":return 524288;case"ruby-base":return 1048576;case"ruby-text":return 2097152;case"ruby-base-container":return 4194304;case"ruby-text-container":return 8388608;case"contents":return 16777216;case"inline-block":return 33554432;case"inline-list-item":return 67108864;case"inline-table":return 134217728;case"inline-flex":return 268435456;case"inline-grid":return 536870912}return 0},xc={name:"float",initialValue:"none",prefix:!1,type:2,parse:function(X,G){switch(G){case"left":return 1;case"right":return 2;case"inline-start":return 3;case"inline-end":return 4}return 0}},iA={name:"letter-spacing",initialValue:"0",prefix:!1,type:0,parse:function(X,G){return 20===G.type&&"normal"===G.value?0:17===G.type||15===G.type?G.number:0}},nd=(()=>{return(X=nd||(nd={})).NORMAL="normal",X.STRICT="strict",nd;var X})(),Fa={name:"line-break",initialValue:"normal",prefix:!1,type:2,parse:function(X,G){return"strict"===G?nd.STRICT:nd.NORMAL}},T0={name:"line-height",initialValue:"normal",prefix:!1,type:4},gu=function(X,G){return za(X)&&"normal"===X.value?1.2*G:17===X.type?G*X.number:Ul(X)?Oi(X,G):G},id={name:"list-style-image",initialValue:"none",type:0,prefix:!1,parse:function(X,G){return 20===G.type&&"none"===G.value?null:mu_parse(X,G)}},Fc={name:"list-style-position",initialValue:"outside",prefix:!1,type:2,parse:function(X,G){return"inside"===G?0:1}},_u={name:"list-style-type",initialValue:"none",prefix:!1,type:2,parse:function(X,G){switch(G){case"disc":return 0;case"circle":return 1;case"square":return 2;case"decimal":return 3;case"cjk-decimal":return 4;case"decimal-leading-zero":return 5;case"lower-roman":return 6;case"upper-roman":return 7;case"lower-greek":return 8;case"lower-alpha":return 9;case"upper-alpha":return 10;case"arabic-indic":return 11;case"armenian":return 12;case"bengali":return 13;case"cambodian":return 14;case"cjk-earthly-branch":return 15;case"cjk-heavenly-stem":return 16;case"cjk-ideographic":return 17;case"devanagari":return 18;case"ethiopic-numeric":return 19;case"georgian":return 20;case"gujarati":return 21;case"gurmukhi":case"hebrew":return 22;case"hiragana":return 23;case"hiragana-iroha":return 24;case"japanese-formal":return 25;case"japanese-informal":return 26;case"kannada":return 27;case"katakana":return 28;case"katakana-iroha":return 29;case"khmer":return 30;case"korean-hangul-formal":return 31;case"korean-hanja-formal":return 32;case"korean-hanja-informal":return 33;case"lao":return 34;case"lower-armenian":return 35;case"malayalam":return 36;case"mongolian":return 37;case"myanmar":return 38;case"oriya":return 39;case"persian":return 40;case"simp-chinese-formal":return 41;case"simp-chinese-informal":return 42;case"tamil":return 43;case"telugu":return 44;case"thai":return 45;case"tibetan":return 46;case"trad-chinese-formal":return 47;case"trad-chinese-informal":return 48;case"upper-armenian":return 49;case"disclosure-open":return 50;case"disclosure-closed":return 51;default:return-1}}},Ph=function(X){return{name:"margin-"+X,initialValue:"0",prefix:!1,type:4}},Oc=Ph("top"),Eo=Ph("right"),zl=Ph("bottom"),fp=Ph("left"),Fo={name:"overflow",initialValue:"visible",prefix:!1,type:1,parse:function(X,G){return G.filter(za).map(function(ne){switch(ne.value){case"hidden":return 1;case"scroll":return 2;case"clip":return 3;case"auto":return 4;default:return 0}})}},rd={name:"overflow-wrap",initialValue:"normal",prefix:!1,type:2,parse:function(X,G){return"break-word"===G?"break-word":"normal"}},jl=function(X){return{name:"padding-"+X,initialValue:"0",prefix:!1,type:3,format:"length-percentage"}},jc=jl("top"),jy=jl("right"),Hf=jl("bottom"),o1=jl("left"),sm={name:"text-align",initialValue:"left",prefix:!1,type:2,parse:function(X,G){switch(G){case"right":return 2;case"center":case"justify":return 1;default:return 0}}},nc={name:"position",initialValue:"static",prefix:!1,type:2,parse:function(X,G){switch(G){case"relative":return 1;case"absolute":return 2;case"fixed":return 3;case"sticky":return 4}return 0}},er={name:"text-shadow",initialValue:"none",type:1,prefix:!1,parse:function(X,G){return 1===G.length&&yc(G[0],"none")?[]:vc(G).map(function(ne){for(var te={color:ih.TRANSPARENT,offsetX:il,offsetY:il,blur:il},Oe=0,tt=0;tt"u")throw new Error('Attempting to parse an unsupported transform function "'+G.name+'"');return ne(G.values)}return null}},om={matrix:function(X){var G=X.filter(function(ne){return 17===ne.type}).map(function(ne){return ne.number});return 6===G.length?G:null},matrix3d:function(X){var G=X.filter(function($t){return 17===$t.type}).map(function($t){return $t.number});return 16===G.length?[G[0],G[1],G[4],G[5],G[12],G[13]]:null}},Vf={type:16,number:50,flags:4},$c=[Vf,Vf],yu={name:"transform-origin",initialValue:"50% 50%",prefix:!0,type:1,parse:function(X,G){var ne=G.filter(Ul);return 2!==ne.length?$c:[ne[0],ne[1]]}},sd={name:"visible",initialValue:"none",prefix:!1,type:2,parse:function(X,G){switch(G){case"hidden":return 1;case"collapse":return 2;default:return 0}}},tf=(()=>{return(X=tf||(tf={})).NORMAL="normal",X.BREAK_ALL="break-all",X.KEEP_ALL="keep-all",tf;var X})(),Gf={name:"word-break",initialValue:"normal",prefix:!1,type:2,parse:function(X,G){switch(G){case"break-all":return tf.BREAK_ALL;case"keep-all":return tf.KEEP_ALL;default:return tf.NORMAL}}},qf={name:"z-index",initialValue:"auto",prefix:!1,type:0,parse:function(X,G){if(20===G.type)return{auto:!0,order:0};if(Vs(G))return{auto:!1,order:G.number};throw new Error("Invalid z-index number parsed")}},$l={name:"time",parse:function(X,G){if(15===G.type)switch(G.unit.toLowerCase()){case"s":return 1e3*G.number;case"ms":return G.number}throw new Error("Unsupported time type")}},od={name:"opacity",initialValue:"1",type:0,prefix:!1,parse:function(X,G){return Vs(G)?G.number:1}},am={name:"text-decoration-color",initialValue:"transparent",prefix:!1,type:3,format:"color"},nf={name:"text-decoration-line",initialValue:"none",prefix:!1,type:1,parse:function(X,G){return G.filter(za).map(function(ne){switch(ne.value){case"underline":return 1;case"overline":return 2;case"line-through":return 3;case"none":return 4}return 0}).filter(function(ne){return 0!==ne})}},ad={name:"font-family",initialValue:"",prefix:!1,type:1,parse:function(X,G){var ne=[],te=[];return G.forEach(function(Oe){switch(Oe.type){case 20:case 0:ne.push(Oe.value);break;case 17:ne.push(Oe.number.toString());break;case 4:te.push(ne.join(" ")),ne.length=0}}),ne.length&&te.push(ne.join(" ")),te.map(function(Oe){return-1===Oe.indexOf(" ")?Oe:"'"+Oe+"'"})}},Nu={name:"font-size",initialValue:"0",prefix:!1,type:3,format:"length"},Uu={name:"font-weight",initialValue:"normal",type:0,prefix:!1,parse:function(X,G){return Vs(G)?G.number:za(G)&&"bold"===G.value?700:400}},E0={name:"font-variant",initialValue:"none",type:1,prefix:!1,parse:function(X,G){return G.filter(za).map(function(ne){return ne.value})}},rA={name:"font-style",initialValue:"normal",prefix:!1,type:2,parse:function(X,G){switch(G){case"oblique":return"oblique";case"italic":return"italic";default:return"normal"}}},Hl=function(X,G){return 0!=(X&G)},Pd={name:"content",initialValue:"none",type:1,prefix:!1,parse:function(X,G){if(0===G.length)return[];var ne=G[0];return 20===ne.type&&"none"===ne.value?[]:G}},rf={name:"counter-increment",initialValue:"none",prefix:!0,type:1,parse:function(X,G){if(0===G.length)return null;var ne=G[0];if(20===ne.type&&"none"===ne.value)return null;for(var te=[],Oe=G.filter($m),tt=0;tt1?1:0],this.overflowWrap=Gr(G,rd,ne.overflowWrap),this.paddingTop=Gr(G,jc,ne.paddingTop),this.paddingRight=Gr(G,jy,ne.paddingRight),this.paddingBottom=Gr(G,Hf,ne.paddingBottom),this.paddingLeft=Gr(G,o1,ne.paddingLeft),this.paintOrder=Gr(G,aA,ne.paintOrder),this.position=Gr(G,nc,ne.position),this.textAlign=Gr(G,sm,ne.textAlign),this.textDecorationColor=Gr(G,am,null!==(te=ne.textDecorationColor)&&void 0!==te?te:ne.color),this.textDecorationLine=Gr(G,nf,null!==(Oe=ne.textDecorationLine)&&void 0!==Oe?Oe:ne.textDecoration),this.textShadow=Gr(G,er,ne.textShadow),this.textTransform=Gr(G,ga,ne.textTransform),this.transform=Gr(G,ks,ne.transform),this.transformOrigin=Gr(G,yu,ne.transformOrigin),this.visibility=Gr(G,sd,ne.visibility),this.webkitTextStrokeColor=Gr(G,lA,ne.webkitTextStrokeColor),this.webkitTextStrokeWidth=Gr(G,cm,ne.webkitTextStrokeWidth),this.wordBreak=Gr(G,Gf,ne.wordBreak),this.zIndex=Gr(G,qf,ne.zIndex)}return X.prototype.isVisible=function(){return this.display>0&&this.opacity>0&&0===this.visibility},X.prototype.isTransparent=function(){return Ks(this.backgroundColor)},X.prototype.isTransformed=function(){return null!==this.transform},X.prototype.isPositioned=function(){return 0!==this.position},X.prototype.isPositionedWithZIndex=function(){return this.isPositioned()&&!this.zIndex.auto},X.prototype.isFloating=function(){return 0!==this.float},X.prototype.isInlineLevel=function(){return Hl(this.display,4)||Hl(this.display,33554432)||Hl(this.display,268435456)||Hl(this.display,536870912)||Hl(this.display,67108864)||Hl(this.display,134217728)},X}(),Zm=function X(G,ne){this.content=Gr(G,Pd,ne.content),this.quotes=Gr(G,lm,ne.quotes)},Jm=function X(G,ne){this.counterIncrement=Gr(G,rf,ne.counterIncrement),this.counterReset=Gr(G,kd,ne.counterReset)},Gr=function(X,G,ne){var te=new jm,Oe=null!==ne&&typeof ne<"u"?ne.toString():G.initialValue;te.write(Oe);var tt=new Th(te.read());switch(G.type){case 2:var St=tt.parseComponentValue();return G.parse(X,za(St)?St.value:G.initialValue);case 0:return G.parse(X,tt.parseComponentValue());case 1:return G.parse(X,tt.parseComponentValues());case 4:return tt.parseComponentValue();case 3:switch(G.format){case"angle":return pu_parse(X,tt.parseComponentValue());case"color":return Xs_parse(X,tt.parseComponentValue());case"image":return mu_parse(X,tt.parseComponentValue());case"length":var Kt=tt.parseComponentValue();return Fr(Kt)?Kt:il;case"length-percentage":var $t=tt.parseComponentValue();return Ul($t)?$t:il;case"time":return $l.parse(X,tt.parseComponentValue())}}},vl=function(X,G){var ne=function(X){switch(X.getAttribute("data-html2canvas-debug")){case"all":return 1;case"clone":return 2;case"parse":return 3;case"render":return 4;default:return 0}}(X);return 1===ne||G===ne},ld=function X(G,ne){this.context=G,this.textNodes=[],this.elements=[],this.flags=0,vl(ne,3),this.styles=new cA(G,window.getComputedStyle(ne,null)),H0(ne)&&(this.styles.animationDuration.some(function(te){return te>0})&&(ne.style.animationDuration="0s"),null!==this.styles.transform&&(ne.style.transform="none")),this.bounds=$e(this.context,ne),vl(ne,4)&&(this.flags|=16)},eg="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",uA=typeof Uint8Array>"u"?[]:new Uint8Array(256),um=0;um=0){if(G<55296||G>56319&&G<=65535)return this.data[ne=((ne=this.index[G>>5])<<2)+(31&G)];if(G<=65535)return this.data[ne=((ne=this.index[2048+(G-55296>>5)])<<2)+(31&G)];if(G>11)],this.data[ne=((ne=this.index[ne+=G>>5&63])<<2)+(31&G)];if(G<=1114111)return this.data[this.highValueIndex]}return this.errorValue},X}(),pp="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",c1=typeof Uint8Array>"u"?[]:new Uint8Array(256),kh=0;kh>10),St%1024+56320),(Oe+1===ne||te.length>16384)&&(tt+=String.fromCharCode.apply(String,te),te.length=0)}return tt},hg=function(X,G){var ne=function(X){var te,tt,St,Kt,$t,G=.75*X.length,ne=X.length,Oe=0;"="===X[X.length-1]&&(G--,"="===X[X.length-2]&&G--);var Pn=typeof ArrayBuffer<"u"&&typeof Uint8Array<"u"&&typeof Uint8Array.prototype.slice<"u"?new ArrayBuffer(G):new Array(G),zn=Array.isArray(Pn)?Pn:new Uint8Array(Pn);for(te=0;te>4,zn[Oe++]=(15&St)<<4|Kt>>2,zn[Oe++]=(3&Kt)<<6|63&$t;return Pn}(X),te=Array.isArray(ne)?function(X){for(var G=X.length,ne=[],te=0;te=55296&&Oe<=56319&&ne=ne)return{done:!0,value:null};for(var St="\xd7";teSt.x||zn.y>St.y;return St=zn,0===Pn||Jn});return X.body.removeChild(G),Kt}(document);return Object.defineProperty(Vl,"SUPPORT_WORD_BREAKING",{value:X}),X},get SUPPORT_SVG_DRAWING(){var X=function(X){var G=new Image,ne=X.createElement("canvas"),te=ne.getContext("2d");if(!te)return!1;G.src="data:image/svg+xml,";try{te.drawImage(G,0,0),ne.toDataURL()}catch{return!1}return!0}(document);return Object.defineProperty(Vl,"SUPPORT_SVG_DRAWING",{value:X}),X},get SUPPORT_FOREIGNOBJECT_DRAWING(){var X="function"==typeof Array.from&&"function"==typeof window.fetch?function(X){var G=X.createElement("canvas"),ne=100;G.width=ne,G.height=ne;var te=G.getContext("2d");if(!te)return Promise.reject(!1);te.fillStyle="rgb(0, 255, 0)",te.fillRect(0,0,ne,ne);var Oe=new Image,tt=G.toDataURL();Oe.src=tt;var St=Oh(ne,ne,0,0,Oe);return te.fillStyle="red",te.fillRect(0,0,ne,ne),gp(St).then(function(Kt){te.drawImage(Kt,0,0);var $t=te.getImageData(0,0,ne,ne).data;te.fillStyle="red",te.fillRect(0,0,ne,ne);var Pn=X.createElement("div");return Pn.style.backgroundImage="url("+tt+")",Pn.style.height="100px",h1($t)?gp(Oh(ne,ne,0,0,Pn)):Promise.reject(!1)}).then(function(Kt){return te.drawImage(Kt,0,0),h1(te.getImageData(0,0,ne,ne).data)}).catch(function(){return!1})}(document):Promise.resolve(!1);return Object.defineProperty(Vl,"SUPPORT_FOREIGNOBJECT_DRAWING",{value:X}),X},get SUPPORT_CORS_IMAGES(){var X=typeof(new Image).crossOrigin<"u";return Object.defineProperty(Vl,"SUPPORT_CORS_IMAGES",{value:X}),X},get SUPPORT_RESPONSE_TYPE(){var X="string"==typeof(new XMLHttpRequest).responseType;return Object.defineProperty(Vl,"SUPPORT_RESPONSE_TYPE",{value:X}),X},get SUPPORT_CORS_XHR(){var X="withCredentials"in new XMLHttpRequest;return Object.defineProperty(Vl,"SUPPORT_CORS_XHR",{value:X}),X},get SUPPORT_NATIVE_TEXT_SEGMENTATION(){var X=!!(typeof Intl<"u"&&Intl.Segmenter);return Object.defineProperty(Vl,"SUPPORT_NATIVE_TEXT_SEGMENTATION",{value:X}),X}},fd=function X(G,ne){this.text=G,this.bounds=ne},lf=function(X,G){var ne=G.ownerDocument;if(ne){var te=ne.createElement("html2canvaswrapper");te.appendChild(G.cloneNode(!0));var Oe=G.parentNode;if(Oe){Oe.replaceChild(te,G);var tt=$e(X,te);return te.firstChild&&Oe.replaceChild(te.firstChild,te),tt}}return De.EMPTY},Wf=function(X,G,ne){var te=X.ownerDocument;if(!te)throw new Error("Node has no owner document");var Oe=te.createRange();return Oe.setStart(X,G),Oe.setEnd(X,G+ne),Oe},d1=function(X){if(Vl.SUPPORT_NATIVE_TEXT_SEGMENTATION){var G=new Intl.Segmenter(void 0,{granularity:"grapheme"});return Array.from(G.segment(X)).map(function(ne){return ne.segment})}return function(X){for(var te,G=u1(X),ne=[];!(te=G.next()).done;)te.value&&ne.push(te.value.slice());return ne}(X)},cr=function(X,G){return 0!==G.letterSpacing?d1(X):function(X,G){if(Vl.SUPPORT_NATIVE_TEXT_SEGMENTATION){var ne=new Intl.Segmenter(void 0,{granularity:"word"});return Array.from(ne.segment(X)).map(function(te){return te.segment})}return f1(X,G)}(X,G)},Ax=[32,160,4961,65792,65793,4153,4241],f1=function(X,G){for(var Oe,ne=function(X,G){var ne=Ie(X),te=fn(ne,G),Oe=te[0],tt=te[1],St=te[2],Kt=ne.length,$t=0,Pn=0;return{next:function(){if(Pn>=Kt)return{done:!0,value:null};for(var zn=Tr;Pn0)if(Vl.SUPPORT_RANGE_BOUNDS){var $t=Wf(te,St,Kt.length).getClientRects();if($t.length>1){var Pn=d1(Kt),zn=0;Pn.forEach(function(Ni){tt.push(new fd(Ni,De.fromDOMRectList(X,Wf(te,zn+St,Ni.length).getClientRects()))),zn+=Ni.length})}else tt.push(new fd(Kt,De.fromDOMRectList(X,$t)))}else{var Jn=te.splitText(Kt.length);tt.push(new fd(Kt,lf(X,te))),te=Jn}else Vl.SUPPORT_RANGE_BOUNDS||(te=te.splitText(Kt.length));St+=Kt.length}),tt}(G,this.text,te,ne)},Ag=function(X,G){switch(G){case 1:return X.toLowerCase();case 3:return X.replace(mx,Ky);case 2:return X.toUpperCase();default:return X}},mx=/(^|\s|:|-|\(|\))([a-z])/g,Ky=function(X,G,ne){return X.length>0?G+ne.toUpperCase():X},Lc=function(X){function G(ne,te){var Oe=X.call(this,ne,te)||this;return Oe.src=te.currentSrc||te.src,Oe.intrinsicWidth=te.naturalWidth,Oe.intrinsicHeight=te.naturalHeight,Oe.context.cache.addImage(Oe.src),Oe}return Me(G,X),G}(ld),AA=function(X){function G(ne,te){var Oe=X.call(this,ne,te)||this;return Oe.canvas=te,Oe.intrinsicWidth=te.width,Oe.intrinsicHeight=te.height,Oe}return Me(G,X),G}(ld),Yy=function(X){function G(ne,te){var Oe=X.call(this,ne,te)||this,tt=new XMLSerializer,St=$e(ne,te);return te.setAttribute("width",St.width+"px"),te.setAttribute("height",St.height+"px"),Oe.svg="data:image/svg+xml,"+encodeURIComponent(tt.serializeToString(te)),Oe.intrinsicWidth=te.width.baseVal.value,Oe.intrinsicHeight=te.height.baseVal.value,Oe.context.cache.addImage(Oe.svg),Oe}return Me(G,X),G}(ld),Oa=function(X){function G(ne,te){var Oe=X.call(this,ne,te)||this;return Oe.value=te.value,Oe}return Me(G,X),G}(ld),ic=function(X){function G(ne,te){var Oe=X.call(this,ne,te)||this;return Oe.start=te.start,Oe.reversed="boolean"==typeof te.reversed&&!0===te.reversed,Oe}return Me(G,X),G}(ld),_p=[{type:15,flags:0,unit:"px",number:3}],cf=[{type:16,flags:0,number:50}],Rd="checkbox",fm="radio",mg="password",yp=707406591,gg=function(X){function G(ne,te){var Oe=X.call(this,ne,te)||this;switch(Oe.type=te.type.toLowerCase(),Oe.checked=te.checked,Oe.value=function(X){var G=X.type===mg?new Array(X.value.length+1).join("\u2022"):X.value;return 0===G.length?X.placeholder||"":G}(te),(Oe.type===Rd||Oe.type===fm)&&(Oe.styles.backgroundColor=3739148031,Oe.styles.borderTopColor=Oe.styles.borderRightColor=Oe.styles.borderBottomColor=Oe.styles.borderLeftColor=2779096575,Oe.styles.borderTopWidth=Oe.styles.borderRightWidth=Oe.styles.borderBottomWidth=Oe.styles.borderLeftWidth=1,Oe.styles.borderTopStyle=Oe.styles.borderRightStyle=Oe.styles.borderBottomStyle=Oe.styles.borderLeftStyle=1,Oe.styles.backgroundClip=[0],Oe.styles.backgroundOrigin=[0],Oe.bounds=function(X){return X.width>X.height?new De(X.left+(X.width-X.height)/2,X.top,X.height,X.height):X.width0)ne.textNodes.push(new p1(X,Oe,ne.styles));else if(gA(Oe))if(yA(Oe)&&Oe.assignedNodes)Oe.assignedNodes().forEach(function(Kt){return mA(X,Kt,ne,te)});else{var St=jf(X,Oe);St.styles.isVisible()&&(m1(Oe,St,te)?St.flags|=4:nv(St.styles)&&(St.flags|=2),-1!==zu.indexOf(Oe.tagName)&&(St.flags|=8),ne.elements.push(St),Oe.shadowRoot?mA(X,Oe.shadowRoot,St,te):!W0(Oe)&&!Ld(Oe)&&!j0(Oe)&&mA(X,Oe,St,te))}},jf=function(X,G){return Q0(G)?new Lc(X,G):_A(G)?new AA(X,G):Ld(G)?new Yy(X,G):_1(G)?new Oa(X,G):V0(G)?new ic(X,G):yg(G)?new gg(X,G):j0(G)?new Jy(X,G):W0(G)?new A1(X,G):pm(G)?new ev(X,G):new ld(X,G)},tv=function(X,G){var ne=jf(X,G);return ne.flags|=4,mA(X,G,ne,ne),ne},m1=function(X,G,ne){return G.styles.isPositionedWithZIndex()||G.styles.opacity<1||G.styles.isTransformed()||q0(X)&&ne.styles.isTransparent()},nv=function(X){return X.isPositioned()||X.isFloating()},g1=function(X){return X.nodeType===Node.TEXT_NODE},gA=function(X){return X.nodeType===Node.ELEMENT_NODE},H0=function(X){return gA(X)&&typeof X.style<"u"&&!_g(X)},_g=function(X){return"object"==typeof X.className},_1=function(X){return"LI"===X.tagName},V0=function(X){return"OL"===X.tagName},yg=function(X){return"INPUT"===X.tagName},Ld=function(X){return"svg"===X.tagName},q0=function(X){return"BODY"===X.tagName},_A=function(X){return"CANVAS"===X.tagName},iv=function(X){return"VIDEO"===X.tagName},Q0=function(X){return"IMG"===X.tagName},pm=function(X){return"IFRAME"===X.tagName},vg=function(X){return"STYLE"===X.tagName},W0=function(X){return"TEXTAREA"===X.tagName},j0=function(X){return"SELECT"===X.tagName},yA=function(X){return"SLOT"===X.tagName},Am=function(X){return X.tagName.indexOf("-")>0},gx=function(){function X(){this.counters={}}return X.prototype.getCounterValue=function(G){var ne=this.counters[G];return ne&&ne.length?ne[ne.length-1]:1},X.prototype.getCounterValues=function(G){return this.counters[G]||[]},X.prototype.pop=function(G){var ne=this;G.forEach(function(te){return ne.counters[te].pop()})},X.prototype.parse=function(G){var ne=this,te=G.counterIncrement,Oe=G.counterReset,tt=!0;null!==te&&te.forEach(function(Kt){var $t=ne.counters[Kt.counter];$t&&0!==Kt.increment&&(tt=!1,$t.length||$t.push(1),$t[Math.max(0,$t.length-1)]+=Kt.increment)});var St=[];return tt&&Oe.forEach(function(Kt){var $t=ne.counters[Kt.counter];St.push(Kt.counter),$t||($t=ne.counters[Kt.counter]=[]),$t.push(Kt.reset)}),St},X}(),_x={integers:[1e3,900,500,400,100,90,50,40,10,9,5,4,1],values:["M","CM","D","CD","C","XC","L","XL","X","IX","V","IV","I"]},v1={integers:[9e3,8e3,7e3,6e3,5e3,4e3,3e3,2e3,1e3,900,800,700,600,500,400,300,200,100,90,80,70,60,50,40,30,20,10,9,8,7,6,5,4,3,2,1],values:["\u0554","\u0553","\u0552","\u0551","\u0550","\u054f","\u054e","\u054d","\u054c","\u054b","\u054a","\u0549","\u0548","\u0547","\u0546","\u0545","\u0544","\u0543","\u0542","\u0541","\u0540","\u053f","\u053e","\u053d","\u053c","\u053b","\u053a","\u0539","\u0538","\u0537","\u0536","\u0535","\u0534","\u0533","\u0532","\u0531"]},yx={integers:[1e4,9e3,8e3,7e3,6e3,5e3,4e3,3e3,2e3,1e3,400,300,200,100,90,80,70,60,50,40,30,20,19,18,17,16,15,10,9,8,7,6,5,4,3,2,1],values:["\u05d9\u05f3","\u05d8\u05f3","\u05d7\u05f3","\u05d6\u05f3","\u05d5\u05f3","\u05d4\u05f3","\u05d3\u05f3","\u05d2\u05f3","\u05d1\u05f3","\u05d0\u05f3","\u05ea","\u05e9","\u05e8","\u05e7","\u05e6","\u05e4","\u05e2","\u05e1","\u05e0","\u05de","\u05dc","\u05db","\u05d9\u05d8","\u05d9\u05d7","\u05d9\u05d6","\u05d8\u05d6","\u05d8\u05d5","\u05d9","\u05d8","\u05d7","\u05d6","\u05d5","\u05d4","\u05d3","\u05d2","\u05d1","\u05d0"]},vx={integers:[1e4,9e3,8e3,7e3,6e3,5e3,4e3,3e3,2e3,1e3,900,800,700,600,500,400,300,200,100,90,80,70,60,50,40,30,20,10,9,8,7,6,5,4,3,2,1],values:["\u10f5","\u10f0","\u10ef","\u10f4","\u10ee","\u10ed","\u10ec","\u10eb","\u10ea","\u10e9","\u10e8","\u10e7","\u10e6","\u10e5","\u10e4","\u10f3","\u10e2","\u10e1","\u10e0","\u10df","\u10de","\u10dd","\u10f2","\u10dc","\u10db","\u10da","\u10d9","\u10d8","\u10d7","\u10f1","\u10d6","\u10d5","\u10d4","\u10d3","\u10d2","\u10d1","\u10d0"]},mm=function(X,G,ne,te,Oe,tt){return Xne?X0(X,Oe,tt.length>0):te.integers.reduce(function(St,Kt,$t){for(;X>=Kt;)X-=Kt,St+=te.values[$t];return St},"")+tt},rv=function(X,G,ne,te){var Oe="";do{ne||X--,Oe=te(X)+Oe,X/=G}while(X*G>=G);return Oe},dc=function(X,G,ne,te,Oe){var tt=ne-G+1;return(X<0?"-":"")+(rv(Math.abs(X),tt,te,function(St){return Ve(Math.floor(St%tt)+G)})+Oe)},Nd=function(X,G,ne){void 0===ne&&(ne=". ");var te=G.length;return rv(Math.abs(X),te,!1,function(Oe){return G[Math.floor(Oe%te)]})+ne},uf=function(X,G,ne,te,Oe,tt){if(X<-9999||X>9999)return X0(X,4,Oe.length>0);var St=Math.abs(X),Kt=Oe;if(0===St)return G[0]+Kt;for(var $t=0;St>0&&$t<=4;$t++){var Pn=St%10;0===Pn&&Hl(tt,1)&&""!==Kt?Kt=G[Pn]+Kt:Pn>1||1===Pn&&0===$t||1===Pn&&1===$t&&Hl(tt,2)||1===Pn&&1===$t&&Hl(tt,4)&&X>100||1===Pn&&$t>1&&Hl(tt,8)?Kt=G[Pn]+($t>0?ne[$t-1]:"")+Kt:1===Pn&&$t>0&&(Kt=ne[$t-1]+Kt),St=Math.floor(St/10)}return(X<0?te:"")+Kt},bg="\ub9c8\uc774\ub108\uc2a4",X0=function(X,G,ne){var te=ne?". ":"",Oe=ne?"\u3001":"",tt=ne?", ":"",St=ne?" ":"";switch(G){case 0:return"\u2022"+St;case 1:return"\u25e6"+St;case 2:return"\u25fe"+St;case 5:var Kt=dc(X,48,57,!0,te);return Kt.length<4?"0"+Kt:Kt;case 4:return Nd(X,"\u3007\u4e00\u4e8c\u4e09\u56db\u4e94\u516d\u4e03\u516b\u4e5d",Oe);case 6:return mm(X,1,3999,_x,3,te).toLowerCase();case 7:return mm(X,1,3999,_x,3,te);case 8:return dc(X,945,969,!1,te);case 9:return dc(X,97,122,!1,te);case 10:return dc(X,65,90,!1,te);case 11:return dc(X,1632,1641,!0,te);case 12:case 49:return mm(X,1,9999,v1,3,te);case 35:return mm(X,1,9999,v1,3,te).toLowerCase();case 13:return dc(X,2534,2543,!0,te);case 14:case 30:return dc(X,6112,6121,!0,te);case 15:return Nd(X,"\u5b50\u4e11\u5bc5\u536f\u8fb0\u5df3\u5348\u672a\u7533\u9149\u620c\u4ea5",Oe);case 16:return Nd(X,"\u7532\u4e59\u4e19\u4e01\u620a\u5df1\u5e9a\u8f9b\u58ec\u7678",Oe);case 17:case 48:return uf(X,"\u96f6\u4e00\u4e8c\u4e09\u56db\u4e94\u516d\u4e03\u516b\u4e5d","\u5341\u767e\u5343\u842c","\u8ca0",Oe,14);case 47:return uf(X,"\u96f6\u58f9\u8cb3\u53c3\u8086\u4f0d\u9678\u67d2\u634c\u7396","\u62fe\u4f70\u4edf\u842c","\u8ca0",Oe,15);case 42:return uf(X,"\u96f6\u4e00\u4e8c\u4e09\u56db\u4e94\u516d\u4e03\u516b\u4e5d","\u5341\u767e\u5343\u842c","\u8d1f",Oe,14);case 41:return uf(X,"\u96f6\u58f9\u8d30\u53c1\u8086\u4f0d\u9646\u67d2\u634c\u7396","\u62fe\u4f70\u4edf\u842c","\u8d1f",Oe,15);case 26:return uf(X,"\u3007\u4e00\u4e8c\u4e09\u56db\u4e94\u516d\u4e03\u516b\u4e5d","\u5341\u767e\u5343\u4e07","\u30de\u30a4\u30ca\u30b9",Oe,0);case 25:return uf(X,"\u96f6\u58f1\u5f10\u53c2\u56db\u4f0d\u516d\u4e03\u516b\u4e5d","\u62fe\u767e\u5343\u4e07","\u30de\u30a4\u30ca\u30b9",Oe,7);case 31:return uf(X,"\uc601\uc77c\uc774\uc0bc\uc0ac\uc624\uc721\uce60\ud314\uad6c","\uc2ed\ubc31\ucc9c\ub9cc",bg,tt,7);case 33:return uf(X,"\u96f6\u4e00\u4e8c\u4e09\u56db\u4e94\u516d\u4e03\u516b\u4e5d","\u5341\u767e\u5343\u842c",bg,tt,0);case 32:return uf(X,"\u96f6\u58f9\u8cb3\u53c3\u56db\u4e94\u516d\u4e03\u516b\u4e5d","\u62fe\u767e\u5343",bg,tt,7);case 18:return dc(X,2406,2415,!0,te);case 20:return mm(X,1,19999,vx,3,te);case 21:return dc(X,2790,2799,!0,te);case 22:return dc(X,2662,2671,!0,te);case 22:return mm(X,1,10999,yx,3,te);case 23:return Nd(X,"\u3042\u3044\u3046\u3048\u304a\u304b\u304d\u304f\u3051\u3053\u3055\u3057\u3059\u305b\u305d\u305f\u3061\u3064\u3066\u3068\u306a\u306b\u306c\u306d\u306e\u306f\u3072\u3075\u3078\u307b\u307e\u307f\u3080\u3081\u3082\u3084\u3086\u3088\u3089\u308a\u308b\u308c\u308d\u308f\u3090\u3091\u3092\u3093");case 24:return Nd(X,"\u3044\u308d\u306f\u306b\u307b\u3078\u3068\u3061\u308a\u306c\u308b\u3092\u308f\u304b\u3088\u305f\u308c\u305d\u3064\u306d\u306a\u3089\u3080\u3046\u3090\u306e\u304a\u304f\u3084\u307e\u3051\u3075\u3053\u3048\u3066\u3042\u3055\u304d\u3086\u3081\u307f\u3057\u3091\u3072\u3082\u305b\u3059");case 27:return dc(X,3302,3311,!0,te);case 28:return Nd(X,"\u30a2\u30a4\u30a6\u30a8\u30aa\u30ab\u30ad\u30af\u30b1\u30b3\u30b5\u30b7\u30b9\u30bb\u30bd\u30bf\u30c1\u30c4\u30c6\u30c8\u30ca\u30cb\u30cc\u30cd\u30ce\u30cf\u30d2\u30d5\u30d8\u30db\u30de\u30df\u30e0\u30e1\u30e2\u30e4\u30e6\u30e8\u30e9\u30ea\u30eb\u30ec\u30ed\u30ef\u30f0\u30f1\u30f2\u30f3",Oe);case 29:return Nd(X,"\u30a4\u30ed\u30cf\u30cb\u30db\u30d8\u30c8\u30c1\u30ea\u30cc\u30eb\u30f2\u30ef\u30ab\u30e8\u30bf\u30ec\u30bd\u30c4\u30cd\u30ca\u30e9\u30e0\u30a6\u30f0\u30ce\u30aa\u30af\u30e4\u30de\u30b1\u30d5\u30b3\u30a8\u30c6\u30a2\u30b5\u30ad\u30e6\u30e1\u30df\u30b7\u30f1\u30d2\u30e2\u30bb\u30b9",Oe);case 34:return dc(X,3792,3801,!0,te);case 37:return dc(X,6160,6169,!0,te);case 38:return dc(X,4160,4169,!0,te);case 39:return dc(X,2918,2927,!0,te);case 40:return dc(X,1776,1785,!0,te);case 43:return dc(X,3046,3055,!0,te);case 44:return dc(X,3174,3183,!0,te);case 45:return dc(X,3664,3673,!0,te);case 46:return dc(X,3872,3881,!0,te);default:return dc(X,48,57,!0,te)}},xx="data-html2canvas-ignore",K0=function(){function X(G,ne,te){if(this.context=G,this.options=te,this.scrolledElements=[],this.referenceElement=ne,this.counters=new gx,this.quoteDepth=0,!ne.ownerDocument)throw new Error("Cloned element does not have an owner document");this.documentElement=this.cloneNode(ne.ownerDocument.documentElement,!1)}return X.prototype.toIFrame=function(G,ne){var te=this,Oe=ls(G,ne);if(!Oe.contentWindow)return Promise.reject("Unable to find iframe window");var tt=G.defaultView.pageXOffset,St=G.defaultView.pageYOffset,Kt=Oe.contentWindow,$t=Kt.document,Pn=av(Oe).then(function(){return M(te,void 0,void 0,function(){var zn,Jn;return L(this,function(Ni){switch(Ni.label){case 0:return this.scrolledElements.forEach(fc),Kt&&(Kt.scrollTo(ne.left,ne.top),/(iPad|iPhone|iPod)/g.test(navigator.userAgent)&&(Kt.scrollY!==ne.top||Kt.scrollX!==ne.left)&&(this.context.logger.warn("Unable to restore scroll position for cloned document"),this.context.windowBounds=this.context.windowBounds.add(Kt.scrollX-ne.left,Kt.scrollY-ne.top,0,0))),zn=this.options.onclone,typeof(Jn=this.clonedReferenceElement)>"u"?[2,Promise.reject("Error finding the "+this.referenceElement.nodeName+" in the cloned document")]:$t.fonts&&$t.fonts.ready?[4,$t.fonts.ready]:[3,2];case 1:Ni.sent(),Ni.label=2;case 2:return/(AppleWebKit)/g.test(navigator.userAgent)?[4,ov($t)]:[3,4];case 3:Ni.sent(),Ni.label=4;case 4:return"function"==typeof zn?[2,Promise.resolve().then(function(){return zn($t,Jn)}).then(function(){return Oe})]:[2,Oe]}})})});return $t.open(),$t.write(gm(document.doctype)+""),_m(this.referenceElement.ownerDocument,tt,St),$t.replaceChild($t.adoptNode(this.documentElement),$t.documentElement),$t.close(),Pn},X.prototype.createElementClone=function(G){if(vl(G,2),_A(G))return this.createCanvasClone(G);if(iv(G))return this.createVideoClone(G);if(vg(G))return this.createStyleClone(G);var ne=G.cloneNode(!1);return Q0(ne)&&(Q0(G)&&G.currentSrc&&G.currentSrc!==G.src&&(ne.src=G.currentSrc,ne.srcset=""),"lazy"===ne.loading&&(ne.loading="eager")),Am(ne)?this.createCustomElementClone(ne):ne},X.prototype.createCustomElementClone=function(G){var ne=document.createElement("html2canvascustomelement");return df(G.style,ne),ne},X.prototype.createStyleClone=function(G){try{var ne=G.sheet;if(ne&&ne.cssRules){var te=[].slice.call(ne.cssRules,0).reduce(function(tt,St){return St&&"string"==typeof St.cssText?tt+St.cssText:tt},""),Oe=G.cloneNode(!1);return Oe.textContent=te,Oe}}catch(tt){if(this.context.logger.error("Unable to access cssRules property",tt),"SecurityError"!==tt.name)throw tt}return G.cloneNode(!1)},X.prototype.createCanvasClone=function(G){var ne;if(this.options.inlineImages&&G.ownerDocument){var te=G.ownerDocument.createElement("img");try{return te.src=G.toDataURL(),te}catch{this.context.logger.info("Unable to inline canvas contents, canvas is tainted",G)}}var Oe=G.cloneNode(!1);try{Oe.width=G.width,Oe.height=G.height;var tt=G.getContext("2d"),St=Oe.getContext("2d");if(St)if(!this.options.allowTaint&&tt)St.putImageData(tt.getImageData(0,0,G.width,G.height),0,0);else{var Kt=null!==(ne=G.getContext("webgl2"))&&void 0!==ne?ne:G.getContext("webgl");Kt&&!1===Kt.getContextAttributes()?.preserveDrawingBuffer&&this.context.logger.warn("Unable to clone WebGL context as it has preserveDrawingBuffer=false",G),St.drawImage(G,0,0)}return Oe}catch{this.context.logger.info("Unable to clone canvas as it is tainted",G)}return Oe},X.prototype.createVideoClone=function(G){var ne=G.ownerDocument.createElement("canvas");ne.width=G.offsetWidth,ne.height=G.offsetHeight;var te=ne.getContext("2d");try{return te&&(te.drawImage(G,0,0,ne.width,ne.height),this.options.allowTaint||te.getImageData(0,0,ne.width,ne.height)),ne}catch{this.context.logger.info("Unable to clone video as it is tainted",G)}var Oe=G.ownerDocument.createElement("canvas");return Oe.width=G.offsetWidth,Oe.height=G.offsetHeight,Oe},X.prototype.appendChildNode=function(G,ne,te){(!gA(ne)||!function(X){return"SCRIPT"===X.tagName}(ne)&&!ne.hasAttribute(xx)&&("function"!=typeof this.options.ignoreElements||!this.options.ignoreElements(ne)))&&(!this.options.copyStyles||!gA(ne)||!vg(ne))&&G.appendChild(this.cloneNode(ne,te))},X.prototype.cloneChildNodes=function(G,ne,te){for(var Oe=this,tt=G.shadowRoot?G.shadowRoot.firstChild:G.firstChild;tt;tt=tt.nextSibling)if(gA(tt)&&yA(tt)&&"function"==typeof tt.assignedNodes){var St=tt.assignedNodes();St.length&&St.forEach(function(Kt){return Oe.appendChildNode(ne,Kt,te)})}else this.appendChildNode(ne,tt,te)},X.prototype.cloneNode=function(G,ne){if(g1(G))return document.createTextNode(G.data);if(!G.ownerDocument)return G.cloneNode(!1);var te=G.ownerDocument.defaultView;if(te&&gA(G)&&(H0(G)||_g(G))){var Oe=this.createElementClone(G);Oe.style.transitionProperty="none";var tt=te.getComputedStyle(G),St=te.getComputedStyle(G,":before"),Kt=te.getComputedStyle(G,":after");this.referenceElement===G&&H0(Oe)&&(this.clonedReferenceElement=Oe),q0(Oe)&&cv(Oe);var $t=this.counters.parse(new Jm(this.context,tt)),Pn=this.resolvePseudoContent(G,Oe,St,Xo.BEFORE);Am(G)&&(ne=!0),iv(G)||this.cloneChildNodes(G,Oe,ne),Pn&&Oe.insertBefore(Pn,Oe.firstChild);var zn=this.resolvePseudoContent(G,Oe,Kt,Xo.AFTER);return zn&&Oe.appendChild(zn),this.counters.pop($t),(tt&&(this.options.copyStyles||_g(G))&&!pm(G)||ne)&&df(tt,Oe),(0!==G.scrollTop||0!==G.scrollLeft)&&this.scrolledElements.push([Oe,G.scrollLeft,G.scrollTop]),(W0(G)||j0(G))&&(W0(Oe)||j0(Oe))&&(Oe.value=G.value),Oe}return G.cloneNode(!1)},X.prototype.resolvePseudoContent=function(G,ne,te,Oe){var tt=this;if(te){var St=te.content,Kt=ne.ownerDocument;if(Kt&&St&&"none"!==St&&"-moz-alt-content"!==St&&"none"!==te.display){this.counters.parse(new Jm(this.context,te));var $t=new Zm(this.context,te),Pn=Kt.createElement("html2canvaspseudoelement");df(te,Pn),$t.content.forEach(function(Jn){if(0===Jn.type)Pn.appendChild(Kt.createTextNode(Jn.value));else if(22===Jn.type){var Ni=Kt.createElement("img");Ni.src=Jn.value,Ni.style.opacity="1",Pn.appendChild(Ni)}else if(18===Jn.type){if("attr"===Jn.name){var ws=Jn.values.filter(za);ws.length&&Pn.appendChild(Kt.createTextNode(G.getAttribute(ws[0].value)||""))}else if("counter"===Jn.name){var Hr=Jn.values.filter(Fu),zo=Hr[1];if((fs=Hr[0])&&za(fs)){var Rs=tt.counters.getCounterValue(fs.value),Ps=zo&&za(zo)?_u.parse(tt.context,zo.value):3;Pn.appendChild(Kt.createTextNode(X0(Rs,Ps,!1)))}}else if("counters"===Jn.name){var fs,xa=Jn.values.filter(Fu),Ho=xa[1];if(zo=xa[2],(fs=xa[0])&&za(fs)){var Do=tt.counters.getCounterValues(fs.value),ps=zo&&za(zo)?_u.parse(tt.context,zo.value):3,wa=Ho&&0===Ho.type?Ho.value:"",ra=Do.map(function(Vu){return X0(Vu,ps,!1)}).join(wa);Pn.appendChild(Kt.createTextNode(ra))}}}else if(20===Jn.type)switch(Jn.value){case"open-quote":Pn.appendChild(Kt.createTextNode(sA($t.quotes,tt.quoteDepth++,!0)));break;case"close-quote":Pn.appendChild(Kt.createTextNode(sA($t.quotes,--tt.quoteDepth,!1)));break;default:Pn.appendChild(Kt.createTextNode(Jn.value))}}),Pn.className=xg+" "+bA;var zn=Oe===Xo.BEFORE?" "+xg:" "+bA;return _g(ne)?ne.className.baseValue+=zn:ne.className+=zn,Pn}}},X.destroy=function(G){return!!G.parentNode&&(G.parentNode.removeChild(G),!0)},X}(),Xo=(()=>{return(X=Xo||(Xo={}))[X.BEFORE=0]="BEFORE",X[X.AFTER=1]="AFTER",Xo;var X})(),ls=function(X,G){var ne=X.createElement("iframe");return ne.className="html2canvas-container",ne.style.visibility="hidden",ne.style.position="fixed",ne.style.left="-10000px",ne.style.top="0px",ne.style.border="0",ne.width=G.width.toString(),ne.height=G.height.toString(),ne.scrolling="no",ne.setAttribute(xx,"true"),X.body.appendChild(ne),ne},hf=function(X){return new Promise(function(G){X.complete?G():X.src?(X.onload=G,X.onerror=G):G()})},ov=function(X){return Promise.all([].slice.call(X.images,0).map(hf))},av=function(X){return new Promise(function(G,ne){var te=X.contentWindow;if(!te)return ne("No window assigned for iframe");var Oe=te.document;te.onload=X.onload=function(){te.onload=X.onload=null;var tt=setInterval(function(){Oe.body.childNodes.length>0&&"complete"===Oe.readyState&&(clearInterval(tt),G(X))},50)}})},x1=["all","d","content"],df=function(X,G){for(var ne=X.length-1;ne>=0;ne--){var te=X.item(ne);-1===x1.indexOf(te)&&G.style.setProperty(te,X.getPropertyValue(te))}return G},gm=function(X){var G="";return X&&(G+=""),G},_m=function(X,G,ne){X&&X.defaultView&&(G!==X.defaultView.pageXOffset||ne!==X.defaultView.pageYOffset)&&X.defaultView.scrollTo(G,ne)},fc=function(X){var G=X[0],te=X[2];G.scrollLeft=X[1],G.scrollTop=te},xg="___html2canvas___pseudoelement_before",bA="___html2canvas___pseudoelement_after",lv='{\n content: "" !important;\n display: none !important;\n}',cv=function(X){Kf(X,"."+xg+":before"+lv+"\n ."+bA+":after"+lv)},Kf=function(X,G){var ne=X.ownerDocument;if(ne){var te=ne.createElement("style");te.textContent=G,X.appendChild(te)}},xA=function(){function X(){}return X.getOrigin=function(G){var ne=X._link;return ne?(ne.href=G,ne.href=ne.href,ne.protocol+ne.hostname+ne.port):"about:blank"},X.isSameOrigin=function(G){return X.getOrigin(G)===X._origin},X.setContext=function(G){X._link=G.document.createElement("a"),X._origin=X.getOrigin(G.location.href)},X._origin="about:blank",X}(),uv=function(){function X(G,ne){this.context=G,this._options=ne,this._cache={}}return X.prototype.addImage=function(G){var ne=Promise.resolve();return this.has(G)||(Lh(G)||Y0(G))&&(this._cache[G]=this.loadImage(G)).catch(function(){}),ne},X.prototype.match=function(G){return this._cache[G]},X.prototype.loadImage=function(G){return M(this,void 0,void 0,function(){var ne,te,Oe,tt,St=this;return L(this,function(Kt){switch(Kt.label){case 0:return ne=xA.isSameOrigin(G),te=!rc(G)&&!0===this._options.useCORS&&Vl.SUPPORT_CORS_IMAGES&&!ne,Oe=!rc(G)&&!ne&&!Lh(G)&&"string"==typeof this._options.proxy&&Vl.SUPPORT_CORS_XHR&&!te,ne||!1!==this._options.allowTaint||rc(G)||Lh(G)||Oe||te?(tt=G,Oe?[4,this.proxy(tt)]:[3,2]):[2];case 1:tt=Kt.sent(),Kt.label=2;case 2:return this.context.logger.debug("Added image "+G.substring(0,256)),[4,new Promise(function($t,Pn){var zn=new Image;zn.onload=function(){return $t(zn)},zn.onerror=Pn,(pd(tt)||te)&&(zn.crossOrigin="anonymous"),zn.src=tt,!0===zn.complete&&setTimeout(function(){return $t(zn)},500),St._options.imageTimeout>0&&setTimeout(function(){return Pn("Timed out ("+St._options.imageTimeout+"ms) loading image")},St._options.imageTimeout)})];case 3:return[2,Kt.sent()]}})})},X.prototype.has=function(G){return typeof this._cache[G]<"u"},X.prototype.keys=function(){return Promise.resolve(Object.keys(this._cache))},X.prototype.proxy=function(G){var ne=this,te=this._options.proxy;if(!te)throw new Error("No proxy defined");var Oe=G.substring(0,256);return new Promise(function(tt,St){var Kt=Vl.SUPPORT_RESPONSE_TYPE?"blob":"text",$t=new XMLHttpRequest;$t.onload=function(){if(200===$t.status)if("text"===Kt)tt($t.response);else{var Jn=new FileReader;Jn.addEventListener("load",function(){return tt(Jn.result)},!1),Jn.addEventListener("error",function(Ni){return St(Ni)},!1),Jn.readAsDataURL($t.response)}else St("Failed to proxy resource "+Oe+" with status code "+$t.status)},$t.onerror=St;var Pn=te.indexOf("?")>-1?"&":"?";if($t.open("GET",""+te+Pn+"url="+encodeURIComponent(G)+"&responseType="+Kt),"text"!==Kt&&$t instanceof XMLHttpRequest&&($t.responseType=Kt),ne._options.imageTimeout){var zn=ne._options.imageTimeout;$t.timeout=zn,$t.ontimeout=function(){return St("Timed out ("+zn+"ms) proxying "+Oe)}}$t.send()})},X}(),bp=/^data:image\/svg\+xml/i,wg=/^data:image\/.*;base64,/i,Cg=/^data:image\/.*/i,Y0=function(X){return Vl.SUPPORT_SVG_DRAWING||!Mg(X)},rc=function(X){return Cg.test(X)},pd=function(X){return wg.test(X)},Lh=function(X){return"blob"===X.substr(0,4)},Mg=function(X){return"svg"===X.substr(-3).toLowerCase()||bp.test(X)},zr=function(){function X(G,ne){this.type=0,this.x=G,this.y=ne}return X.prototype.add=function(G,ne){return new X(this.x+G,this.y+ne)},X}(),Ad=function(X,G,ne){return new zr(X.x+(G.x-X.x)*ne,X.y+(G.y-X.y)*ne)},ff=function(){function X(G,ne,te,Oe){this.type=1,this.start=G,this.startControl=ne,this.endControl=te,this.end=Oe}return X.prototype.subdivide=function(G,ne){var te=Ad(this.start,this.startControl,G),Oe=Ad(this.startControl,this.endControl,G),tt=Ad(this.endControl,this.end,G),St=Ad(te,Oe,G),Kt=Ad(Oe,tt,G),$t=Ad(St,Kt,G);return ne?new X(this.start,te,St,$t):new X($t,Kt,tt,this.end)},X.prototype.add=function(G,ne){return new X(this.start.add(G,ne),this.startControl.add(G,ne),this.endControl.add(G,ne),this.end.add(G,ne))},X.prototype.reverse=function(){return new X(this.end,this.endControl,this.startControl,this.start)},X}(),Nh=function(X){return 1===X.type},w1=function X(G){var ne=G.styles,te=G.bounds,Oe=lu(ne.borderTopLeftRadius,te.width,te.height),tt=Oe[0],St=Oe[1],Kt=lu(ne.borderTopRightRadius,te.width,te.height),$t=Kt[0],Pn=Kt[1],zn=lu(ne.borderBottomRightRadius,te.width,te.height),Jn=zn[0],Ni=zn[1],ws=lu(ne.borderBottomLeftRadius,te.width,te.height),Hr=ws[0],fs=ws[1],zo=[];zo.push((tt+$t)/te.width),zo.push((Hr+Jn)/te.width),zo.push((St+fs)/te.height),zo.push((Pn+Ni)/te.height);var Rs=Math.max.apply(Math,zo);Rs>1&&(tt/=Rs,St/=Rs,$t/=Rs,Pn/=Rs,Jn/=Rs,Ni/=Rs,Hr/=Rs,fs/=Rs);var Ps=te.width-$t,xa=te.height-Ni,Ho=te.width-Jn,Do=te.height-fs,ps=ne.borderTopWidth,wa=ne.borderRightWidth,ra=ne.borderBottomWidth,Oo=ne.borderLeftWidth,Ac=Oi(ne.paddingTop,G.bounds.width),Vu=Oi(ne.paddingRight,G.bounds.width),lh=Oi(ne.paddingBottom,G.bounds.width),ul=Oi(ne.paddingLeft,G.bounds.width);this.topLeftBorderDoubleOuterBox=tt>0||St>0?Ml(te.left+Oo/3,te.top+ps/3,tt-Oo/3,St-ps/3,_a.TOP_LEFT):new zr(te.left+Oo/3,te.top+ps/3),this.topRightBorderDoubleOuterBox=tt>0||St>0?Ml(te.left+Ps,te.top+ps/3,$t-wa/3,Pn-ps/3,_a.TOP_RIGHT):new zr(te.left+te.width-wa/3,te.top+ps/3),this.bottomRightBorderDoubleOuterBox=Jn>0||Ni>0?Ml(te.left+Ho,te.top+xa,Jn-wa/3,Ni-ra/3,_a.BOTTOM_RIGHT):new zr(te.left+te.width-wa/3,te.top+te.height-ra/3),this.bottomLeftBorderDoubleOuterBox=Hr>0||fs>0?Ml(te.left+Oo/3,te.top+Do,Hr-Oo/3,fs-ra/3,_a.BOTTOM_LEFT):new zr(te.left+Oo/3,te.top+te.height-ra/3),this.topLeftBorderDoubleInnerBox=tt>0||St>0?Ml(te.left+2*Oo/3,te.top+2*ps/3,tt-2*Oo/3,St-2*ps/3,_a.TOP_LEFT):new zr(te.left+2*Oo/3,te.top+2*ps/3),this.topRightBorderDoubleInnerBox=tt>0||St>0?Ml(te.left+Ps,te.top+2*ps/3,$t-2*wa/3,Pn-2*ps/3,_a.TOP_RIGHT):new zr(te.left+te.width-2*wa/3,te.top+2*ps/3),this.bottomRightBorderDoubleInnerBox=Jn>0||Ni>0?Ml(te.left+Ho,te.top+xa,Jn-2*wa/3,Ni-2*ra/3,_a.BOTTOM_RIGHT):new zr(te.left+te.width-2*wa/3,te.top+te.height-2*ra/3),this.bottomLeftBorderDoubleInnerBox=Hr>0||fs>0?Ml(te.left+2*Oo/3,te.top+Do,Hr-2*Oo/3,fs-2*ra/3,_a.BOTTOM_LEFT):new zr(te.left+2*Oo/3,te.top+te.height-2*ra/3),this.topLeftBorderStroke=tt>0||St>0?Ml(te.left+Oo/2,te.top+ps/2,tt-Oo/2,St-ps/2,_a.TOP_LEFT):new zr(te.left+Oo/2,te.top+ps/2),this.topRightBorderStroke=tt>0||St>0?Ml(te.left+Ps,te.top+ps/2,$t-wa/2,Pn-ps/2,_a.TOP_RIGHT):new zr(te.left+te.width-wa/2,te.top+ps/2),this.bottomRightBorderStroke=Jn>0||Ni>0?Ml(te.left+Ho,te.top+xa,Jn-wa/2,Ni-ra/2,_a.BOTTOM_RIGHT):new zr(te.left+te.width-wa/2,te.top+te.height-ra/2),this.bottomLeftBorderStroke=Hr>0||fs>0?Ml(te.left+Oo/2,te.top+Do,Hr-Oo/2,fs-ra/2,_a.BOTTOM_LEFT):new zr(te.left+Oo/2,te.top+te.height-ra/2),this.topLeftBorderBox=tt>0||St>0?Ml(te.left,te.top,tt,St,_a.TOP_LEFT):new zr(te.left,te.top),this.topRightBorderBox=$t>0||Pn>0?Ml(te.left+Ps,te.top,$t,Pn,_a.TOP_RIGHT):new zr(te.left+te.width,te.top),this.bottomRightBorderBox=Jn>0||Ni>0?Ml(te.left+Ho,te.top+xa,Jn,Ni,_a.BOTTOM_RIGHT):new zr(te.left+te.width,te.top+te.height),this.bottomLeftBorderBox=Hr>0||fs>0?Ml(te.left,te.top+Do,Hr,fs,_a.BOTTOM_LEFT):new zr(te.left,te.top+te.height),this.topLeftPaddingBox=tt>0||St>0?Ml(te.left+Oo,te.top+ps,Math.max(0,tt-Oo),Math.max(0,St-ps),_a.TOP_LEFT):new zr(te.left+Oo,te.top+ps),this.topRightPaddingBox=$t>0||Pn>0?Ml(te.left+Math.min(Ps,te.width-wa),te.top+ps,Ps>te.width+wa?0:Math.max(0,$t-wa),Math.max(0,Pn-ps),_a.TOP_RIGHT):new zr(te.left+te.width-wa,te.top+ps),this.bottomRightPaddingBox=Jn>0||Ni>0?Ml(te.left+Math.min(Ho,te.width-Oo),te.top+Math.min(xa,te.height-ra),Math.max(0,Jn-wa),Math.max(0,Ni-ra),_a.BOTTOM_RIGHT):new zr(te.left+te.width-wa,te.top+te.height-ra),this.bottomLeftPaddingBox=Hr>0||fs>0?Ml(te.left+Oo,te.top+Math.min(Do,te.height-ra),Math.max(0,Hr-Oo),Math.max(0,fs-ra),_a.BOTTOM_LEFT):new zr(te.left+Oo,te.top+te.height-ra),this.topLeftContentBox=tt>0||St>0?Ml(te.left+Oo+ul,te.top+ps+Ac,Math.max(0,tt-(Oo+ul)),Math.max(0,St-(ps+Ac)),_a.TOP_LEFT):new zr(te.left+Oo+ul,te.top+ps+Ac),this.topRightContentBox=$t>0||Pn>0?Ml(te.left+Math.min(Ps,te.width+Oo+ul),te.top+ps+Ac,Ps>te.width+Oo+ul?0:$t-Oo+ul,Pn-(ps+Ac),_a.TOP_RIGHT):new zr(te.left+te.width-(wa+Vu),te.top+ps+Ac),this.bottomRightContentBox=Jn>0||Ni>0?Ml(te.left+Math.min(Ho,te.width-(Oo+ul)),te.top+Math.min(xa,te.height+ps+Ac),Math.max(0,Jn-(wa+Vu)),Ni-(ra+lh),_a.BOTTOM_RIGHT):new zr(te.left+te.width-(wa+Vu),te.top+te.height-(ra+lh)),this.bottomLeftContentBox=Hr>0||fs>0?Ml(te.left+Oo+ul,te.top+Do,Math.max(0,Hr-(Oo+ul)),fs-(ra+lh),_a.BOTTOM_LEFT):new zr(te.left+Oo+ul,te.top+te.height-(ra+lh))},_a=(()=>{return(X=_a||(_a={}))[X.TOP_LEFT=0]="TOP_LEFT",X[X.TOP_RIGHT=1]="TOP_RIGHT",X[X.BOTTOM_RIGHT=2]="BOTTOM_RIGHT",X[X.BOTTOM_LEFT=3]="BOTTOM_LEFT",_a;var X})(),Ml=function(X,G,ne,te,Oe){var tt=(Math.sqrt(2)-1)/3*4,St=ne*tt,Kt=te*tt,$t=X+ne,Pn=G+te;switch(Oe){case _a.TOP_LEFT:return new ff(new zr(X,Pn),new zr(X,Pn-Kt),new zr($t-St,G),new zr($t,G));case _a.TOP_RIGHT:return new ff(new zr(X,G),new zr(X+St,G),new zr($t,Pn-Kt),new zr($t,Pn));case _a.BOTTOM_RIGHT:return new ff(new zr($t,G),new zr($t,G+Kt),new zr(X+St,Pn),new zr(X,Pn));default:return new ff(new zr($t,Pn),new zr($t-St,Pn),new zr(X,G+Kt),new zr(X,G))}},ym=function(X){return[X.topLeftBorderBox,X.topRightBorderBox,X.bottomRightBorderBox,X.bottomLeftBorderBox]},wA=function(X){return[X.topLeftPaddingBox,X.topRightPaddingBox,X.bottomRightPaddingBox,X.bottomLeftPaddingBox]},wx=function X(G,ne,te){this.offsetX=G,this.offsetY=ne,this.matrix=te,this.type=0,this.target=6},md=function X(G,ne){this.path=G,this.target=ne,this.type=1},vm=function X(G){this.opacity=G,this.type=2,this.target=6},Yf=function(X){return 1===X.type},Sg=function(X,G){return X.length===G.length&&X.some(function(ne,te){return ne===G[te]})},zd=function X(G){this.element=G,this.inlineLevel=[],this.nonInlineLevel=[],this.negativeZIndex=[],this.zeroOrAutoZIndexOrTransformedOrOpacity=[],this.positiveZIndex=[],this.nonPositionedFloats=[],this.nonPositionedInlineLevel=[]},Uc=function(){function X(G,ne){if(this.container=G,this.parent=ne,this.effects=[],this.curves=new w1(this.container),this.container.styles.opacity<1&&this.effects.push(new vm(this.container.styles.opacity)),null!==this.container.styles.transform&&this.effects.push(new wx(this.container.bounds.left+this.container.styles.transformOrigin[0].number,this.container.bounds.top+this.container.styles.transformOrigin[1].number,this.container.styles.transform)),0!==this.container.styles.overflowX){var St=ym(this.curves),Kt=wA(this.curves);Sg(St,Kt)?this.effects.push(new md(St,6)):(this.effects.push(new md(St,2)),this.effects.push(new md(Kt,4)))}}return X.prototype.getEffects=function(G){for(var ne=-1===[2,3].indexOf(this.container.styles.position),te=this.parent,Oe=this.effects.slice(0);te;){var tt=te.effects.filter(function($t){return!Yf($t)});if(ne||0!==te.container.styles.position||!te.parent){if(Oe.unshift.apply(Oe,tt),ne=-1===[2,3].indexOf(te.container.styles.position),0!==te.container.styles.overflowX){var St=ym(te.curves),Kt=wA(te.curves);Sg(St,Kt)||Oe.unshift(new md(Kt,6))}}else Oe.unshift.apply(Oe,tt);te=te.parent}return Oe.filter(function($t){return Hl($t.target,G)})},X}(),pf=function(X,G,ne,te){X.container.elements.forEach(function(Oe){var tt=Hl(Oe.flags,4),St=Hl(Oe.flags,2),Kt=new Uc(Oe,X);Hl(Oe.styles.display,2048)&&te.push(Kt);var $t=Hl(Oe.flags,8)?[]:te;if(tt||St){var Pn=tt||Oe.styles.isPositioned()?ne:G,zn=new zd(Kt);if(Oe.styles.isPositioned()||Oe.styles.opacity<1||Oe.styles.isTransformed()){var Jn=Oe.styles.zIndex.order;if(Jn<0){var Ni=0;Pn.negativeZIndex.some(function(Hr,fs){return Jn>Hr.element.container.styles.zIndex.order?(Ni=fs,!1):Ni>0}),Pn.negativeZIndex.splice(Ni,0,zn)}else if(Jn>0){var ws=0;Pn.positiveZIndex.some(function(Hr,fs){return Jn>=Hr.element.container.styles.zIndex.order?(ws=fs+1,!1):ws>0}),Pn.positiveZIndex.splice(ws,0,zn)}else Pn.zeroOrAutoZIndexOrTransformedOrOpacity.push(zn)}else Oe.styles.isFloating()?Pn.nonPositionedFloats.push(zn):Pn.nonPositionedInlineLevel.push(zn);pf(Kt,zn,tt?zn:ne,$t)}else Oe.styles.isInlineLevel()?G.inlineLevel.push(Kt):G.nonInlineLevel.push(Kt),pf(Kt,G,ne,$t);Hl(Oe.flags,8)&&gd(Oe,$t)})},gd=function(X,G){for(var ne=X instanceof ic?X.start:1,te=X instanceof ic&&X.reversed,Oe=0;Oe"u"?X[0]:ne},CA=function(X,G,ne,te,Oe){var tt=G[0],St=G[1],Kt=ne[0],$t=ne[1];switch(X){case 2:return[new zr(Math.round(te.left),Math.round(te.top+St)),new zr(Math.round(te.left+te.width),Math.round(te.top+St)),new zr(Math.round(te.left+te.width),Math.round($t+te.top+St)),new zr(Math.round(te.left),Math.round($t+te.top+St))];case 3:return[new zr(Math.round(te.left+tt),Math.round(te.top)),new zr(Math.round(te.left+tt+Kt),Math.round(te.top)),new zr(Math.round(te.left+tt+Kt),Math.round(te.height+te.top)),new zr(Math.round(te.left+tt),Math.round(te.height+te.top))];case 1:return[new zr(Math.round(te.left+tt),Math.round(te.top+St)),new zr(Math.round(te.left+tt+Kt),Math.round(te.top+St)),new zr(Math.round(te.left+tt+Kt),Math.round(te.top+St+$t)),new zr(Math.round(te.left+tt),Math.round(te.top+St+$t))];default:return[new zr(Math.round(Oe.left),Math.round(Oe.top)),new zr(Math.round(Oe.left+Oe.width),Math.round(Oe.top)),new zr(Math.round(Oe.left+Oe.width),Math.round(Oe.height+Oe.top)),new zr(Math.round(Oe.left),Math.round(Oe.height+Oe.top))]}},Hu="Hidden Text",wm=function(){function X(G){this._data={},this._document=G}return X.prototype.parseMetrics=function(G,ne){var te=this._document.createElement("div"),Oe=this._document.createElement("img"),tt=this._document.createElement("span"),St=this._document.body;te.style.visibility="hidden",te.style.fontFamily=G,te.style.fontSize=ne,te.style.margin="0",te.style.padding="0",te.style.whiteSpace="nowrap",St.appendChild(te),Oe.src="data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7",Oe.width=1,Oe.height=1,Oe.style.margin="0",Oe.style.padding="0",Oe.style.verticalAlign="baseline",tt.style.fontFamily=G,tt.style.fontSize=ne,tt.style.margin="0",tt.style.padding="0",tt.appendChild(this._document.createTextNode(Hu)),te.appendChild(tt),te.appendChild(Oe);var Kt=Oe.offsetTop-tt.offsetTop+2;te.removeChild(tt),te.appendChild(this._document.createTextNode(Hu)),te.style.lineHeight="normal",Oe.style.verticalAlign="super";var $t=Oe.offsetTop-te.offsetTop+2;return St.removeChild(te),{baseline:Kt,middle:$t}},X.prototype.getMetrics=function(G,ne){var te=G+" "+ne;return typeof this._data[te]>"u"&&(this._data[te]=this.parseMetrics(G,ne)),this._data[te]},X}(),wp=function X(G,ne){this.context=G,this.options=ne},E1=function(X){function G(ne,te){var Oe=X.call(this,ne,te)||this;return Oe._activeEffects=[],Oe.canvas=te.canvas?te.canvas:document.createElement("canvas"),Oe.ctx=Oe.canvas.getContext("2d"),te.canvas||(Oe.canvas.width=Math.floor(te.width*te.scale),Oe.canvas.height=Math.floor(te.height*te.scale),Oe.canvas.style.width=te.width+"px",Oe.canvas.style.height=te.height+"px"),Oe.fontMetrics=new wm(document),Oe.ctx.scale(Oe.options.scale,Oe.options.scale),Oe.ctx.translate(-te.x,-te.y),Oe.ctx.textBaseline="bottom",Oe._activeEffects=[],Oe.context.logger.debug("Canvas renderer initialized ("+te.width+"x"+te.height+") with scale "+te.scale),Oe}return Me(G,X),G.prototype.applyEffects=function(ne){for(var te=this;this._activeEffects.length;)this.popEffect();ne.forEach(function(Oe){return te.applyEffect(Oe)})},G.prototype.applyEffect=function(ne){this.ctx.save(),function(X){return 2===X.type}(ne)&&(this.ctx.globalAlpha=ne.opacity),function(X){return 0===X.type}(ne)&&(this.ctx.translate(ne.offsetX,ne.offsetY),this.ctx.transform(ne.matrix[0],ne.matrix[1],ne.matrix[2],ne.matrix[3],ne.matrix[4],ne.matrix[5]),this.ctx.translate(-ne.offsetX,-ne.offsetY)),Yf(ne)&&(this.path(ne.path),this.ctx.clip()),this._activeEffects.push(ne)},G.prototype.popEffect=function(){this._activeEffects.pop(),this.ctx.restore()},G.prototype.renderStack=function(ne){return M(this,void 0,void 0,function(){return L(this,function(Oe){switch(Oe.label){case 0:return ne.element.container.styles.isVisible()?[4,this.renderStackContent(ne)]:[3,2];case 1:Oe.sent(),Oe.label=2;case 2:return[2]}})})},G.prototype.renderNode=function(ne){return M(this,void 0,void 0,function(){return L(this,function(te){switch(te.label){case 0:return Hl(ne.container.flags,16),ne.container.styles.isVisible()?[4,this.renderNodeBackgroundAndBorders(ne)]:[3,3];case 1:return te.sent(),[4,this.renderNodeContent(ne)];case 2:te.sent(),te.label=3;case 3:return[2]}})})},G.prototype.renderTextWithLetterSpacing=function(ne,te,Oe){var tt=this;0===te?this.ctx.fillText(ne.text,ne.bounds.left,ne.bounds.top+Oe):d1(ne.text).reduce(function(Kt,$t){return tt.ctx.fillText($t,Kt,ne.bounds.top+Oe),Kt+tt.ctx.measureText($t).width},ne.bounds.left)},G.prototype.createFontStyle=function(ne){var te=ne.fontVariant.filter(function(St){return"normal"===St||"small-caps"===St}).join(""),Oe=e_(ne.fontFamily).join(", "),tt=Jl(ne.fontSize)?""+ne.fontSize.number+ne.fontSize.unit:ne.fontSize.number+"px";return[[ne.fontStyle,te,ne.fontWeight,tt,Oe].join(" "),Oe,tt]},G.prototype.renderTextNode=function(ne,te){return M(this,void 0,void 0,function(){var Oe,St,Kt,$t,Pn,zn,Jn,Ni=this;return L(this,function(ws){return Oe=this.createFontStyle(te),St=Oe[1],Kt=Oe[2],this.ctx.font=Oe[0],this.ctx.direction=1===te.direction?"rtl":"ltr",this.ctx.textAlign="left",this.ctx.textBaseline="alphabetic",$t=this.fontMetrics.getMetrics(St,Kt),Pn=$t.baseline,zn=$t.middle,Jn=te.paintOrder,ne.textBounds.forEach(function(Hr){Jn.forEach(function(fs){switch(fs){case 0:Ni.ctx.fillStyle=Uo(te.color),Ni.renderTextWithLetterSpacing(Hr,te.letterSpacing,Pn);var zo=te.textShadow;zo.length&&Hr.text.trim().length&&(zo.slice(0).reverse().forEach(function(Rs){Ni.ctx.shadowColor=Uo(Rs.color),Ni.ctx.shadowOffsetX=Rs.offsetX.number*Ni.options.scale,Ni.ctx.shadowOffsetY=Rs.offsetY.number*Ni.options.scale,Ni.ctx.shadowBlur=Rs.blur.number,Ni.renderTextWithLetterSpacing(Hr,te.letterSpacing,Pn)}),Ni.ctx.shadowColor="",Ni.ctx.shadowOffsetX=0,Ni.ctx.shadowOffsetY=0,Ni.ctx.shadowBlur=0),te.textDecorationLine.length&&(Ni.ctx.fillStyle=Uo(te.textDecorationColor||te.color),te.textDecorationLine.forEach(function(Rs){switch(Rs){case 1:Ni.ctx.fillRect(Hr.bounds.left,Math.round(Hr.bounds.top+Pn),Hr.bounds.width,1);break;case 2:Ni.ctx.fillRect(Hr.bounds.left,Math.round(Hr.bounds.top),Hr.bounds.width,1);break;case 3:Ni.ctx.fillRect(Hr.bounds.left,Math.ceil(Hr.bounds.top+zn),Hr.bounds.width,1)}}));break;case 1:te.webkitTextStrokeWidth&&Hr.text.trim().length&&(Ni.ctx.strokeStyle=Uo(te.webkitTextStrokeColor),Ni.ctx.lineWidth=te.webkitTextStrokeWidth,Ni.ctx.lineJoin=window.chrome?"miter":"round",Ni.ctx.strokeText(Hr.text,Hr.bounds.left,Hr.bounds.top+Pn)),Ni.ctx.strokeStyle="",Ni.ctx.lineWidth=0,Ni.ctx.lineJoin="miter"}})}),[2]})})},G.prototype.renderReplacedElement=function(ne,te,Oe){if(Oe&&ne.intrinsicWidth>0&&ne.intrinsicHeight>0){var tt=xp(ne),St=wA(te);this.path(St),this.ctx.save(),this.ctx.clip(),this.ctx.drawImage(Oe,0,0,ne.intrinsicWidth,ne.intrinsicHeight,tt.left,tt.top,tt.width,tt.height),this.ctx.restore()}},G.prototype.renderNodeContent=function(ne){return M(this,void 0,void 0,function(){var te,Oe,tt,St,Kt,zn,Jn,Ni,Hr,fs,zo,Rs,Ps,xa,Ho,Do;return L(this,function(ps){switch(ps.label){case 0:this.applyEffects(ne.getEffects(4)),Oe=ne.curves,tt=(te=ne.container).styles,St=0,Kt=te.textNodes,ps.label=1;case 1:return St0&&Zf>0&&(Mp=tt.ctx.createRadialGradient(Vu+vu,lh+bu,0,Vu+vu,lh+bu,Uh),Ol(zn.stops,2*Uh).forEach(function(ep){return Mp.addColorStop(ep.stop,Uo(ep.color))}),tt.path(Ac),tt.ctx.fillStyle=Mp,Uh!==Zf?(gf=ne.bounds.left+.5*ne.bounds.width,_f=ne.bounds.top+.5*ne.bounds.height,yf=1/(Jf=Zf/Uh),tt.ctx.save(),tt.ctx.translate(gf,_f),tt.ctx.transform(1,0,0,Jf,0,0),tt.ctx.translate(-gf,-_f),tt.ctx.fillRect(Vu,yf*(lh-_f)+_f,ul,sl*yf),tt.ctx.restore()):tt.ctx.fill())):(Hr=Hd(ne,te,[null,null,null]),Ac=Hr[0],vu=Hr[1],bu=Hr[2],fs=Bh(zn.angle,ul=Hr[3],sl=Hr[4]),zo=fs[0],Rs=fs[1],Ps=fs[2],xa=fs[3],Ho=fs[4],(Do=document.createElement("canvas")).width=ul,Do.height=sl,ps=Do.getContext("2d"),wa=ps.createLinearGradient(Rs,xa,Ps,Ho),Ol(zn.stops,zo).forEach(function(ep){return wa.addColorStop(ep.stop,Uo(ep.color))}),ps.fillStyle=wa,ps.fillRect(0,0,ul,sl),ul>0&&sl>0&&(ra=tt.ctx.createPattern(Do,"repeat"),tt.renderRepeat(Ac,ra,vu,bu))),SA.label=6;case 6:return te--,[2]}})},tt=this,St=0,Kt=ne.styles.backgroundImage.slice(0).reverse(),Pn.label=1;case 1:return St0?2!==zn.style?[3,5]:[4,this.renderDashedDottedBorder(zn.color,zn.width,Kt,ne.curves,2)]:[3,11]:[3,13];case 4:return Ni.sent(),[3,11];case 5:return 3!==zn.style?[3,7]:[4,this.renderDashedDottedBorder(zn.color,zn.width,Kt,ne.curves,3)];case 6:return Ni.sent(),[3,11];case 7:return 4!==zn.style?[3,9]:[4,this.renderDoubleBorder(zn.color,zn.width,Kt,ne.curves)];case 8:return Ni.sent(),[3,11];case 9:return[4,this.renderSolidBorder(zn.color,Kt,ne.curves)];case 10:Ni.sent(),Ni.label=11;case 11:Kt++,Ni.label=12;case 12:return $t++,[3,3];case 13:return[2]}})})},G.prototype.renderDashedDottedBorder=function(ne,te,Oe,tt,St){return M(this,void 0,void 0,function(){var Kt,$t,Pn,zn,Jn,Ni,ws,Hr,fs,zo,Rs,Ps,xa,Ho,Do,ps;return L(this,function(wa){return this.ctx.save(),Kt=function(X,G){switch(G){case 0:return Af(X.topLeftBorderStroke,X.topRightBorderStroke);case 1:return Af(X.topRightBorderStroke,X.bottomRightBorderStroke);case 2:return Af(X.bottomRightBorderStroke,X.bottomLeftBorderStroke);default:return Af(X.bottomLeftBorderStroke,X.topLeftBorderStroke)}}(tt,Oe),$t=Eg(tt,Oe),2===St&&(this.path($t),this.ctx.clip()),Nh($t[0])?(Pn=$t[0].start.x,zn=$t[0].start.y):(Pn=$t[0].x,zn=$t[0].y),Nh($t[1])?(Jn=$t[1].end.x,Ni=$t[1].end.y):(Jn=$t[1].x,Ni=$t[1].y),ws=0===Oe||2===Oe?Math.abs(Pn-Jn):Math.abs(zn-Ni),this.ctx.beginPath(),this.formatPath(3===St?Kt:$t.slice(0,2)),Hr=te<3?3*te:2*te,fs=te<3?2*te:te,3===St&&(Hr=te,fs=te),zo=!0,ws<=2*Hr?zo=!1:ws<=2*Hr+fs?(Hr*=Rs=ws/(2*Hr+fs),fs*=Rs):(Ps=Math.floor((ws+fs)/(Hr+fs)),xa=(ws-Ps*Hr)/(Ps-1),fs=(Ho=(ws-(Ps+1)*Hr)/Ps)<=0||Math.abs(fs-xa){jr.exports=function At(Me,ze,M){function L($e,Ze){if(!ze[$e]){if(!Me[$e]){if(_e)return _e($e,!0);var Ve=new Error("Cannot find module '"+$e+"'");throw Ve.code="MODULE_NOT_FOUND",Ve}var Re=ze[$e]={exports:{}};Me[$e][0].call(Re.exports,function(ce){return L(Me[$e][1][ce]||ce)},Re,Re.exports,At,Me,ze,M)}return ze[$e].exports}for(var _e=void 0,De=0;De>4,ce=1>6:64,Z=2>2)+_e.charAt(Re)+_e.charAt(ce)+_e.charAt(Z));return Y.join("")},ze.decode=function(De){var $e,Ze,Ie,Ve,Re,ce,Z=0,Y=0;if("data:"===De.substr(0,"data:".length))throw new Error("Invalid base64 input, it looks like a data url.");var K,J=3*(De=De.replace(/[^A-Za-z0-9+/=]/g,"")).length/4;if(De.charAt(De.length-1)===_e.charAt(64)&&J--,De.charAt(De.length-2)===_e.charAt(64)&&J--,J%1!=0)throw new Error("Invalid base64 input, bad content length.");for(K=L.uint8array?new Uint8Array(0|J):new Array(0|J);Z>4,Ze=(15&Ve)<<4|(Re=_e.indexOf(De.charAt(Z++)))>>2,Ie=(3&Re)<<6|(ce=_e.indexOf(De.charAt(Z++))),K[Y++]=$e,64!==Re&&(K[Y++]=Ze),64!==ce&&(K[Y++]=Ie);return K}},{"./support":30,"./utils":32}],2:[function(At,Me,ze){"use strict";var M=At("./external"),L=At("./stream/DataWorker"),_e=At("./stream/Crc32Probe"),De=At("./stream/DataLengthProbe");function $e(Ze,Ie,Ve,Re,ce){this.compressedSize=Ze,this.uncompressedSize=Ie,this.crc32=Ve,this.compression=Re,this.compressedContent=ce}$e.prototype={getContentWorker:function(){var Ze=new L(M.Promise.resolve(this.compressedContent)).pipe(this.compression.uncompressWorker()).pipe(new De("data_length")),Ie=this;return Ze.on("end",function(){if(this.streamInfo.data_length!==Ie.uncompressedSize)throw new Error("Bug : uncompressed data size mismatch")}),Ze},getCompressedWorker:function(){return new L(M.Promise.resolve(this.compressedContent)).withStreamInfo("compressedSize",this.compressedSize).withStreamInfo("uncompressedSize",this.uncompressedSize).withStreamInfo("crc32",this.crc32).withStreamInfo("compression",this.compression)}},$e.createWorkerFrom=function(Ze,Ie,Ve){return Ze.pipe(new _e).pipe(new De("uncompressedSize")).pipe(Ie.compressWorker(Ve)).pipe(new De("compressedSize")).withStreamInfo("compression",Ie)},Me.exports=$e},{"./external":6,"./stream/Crc32Probe":25,"./stream/DataLengthProbe":26,"./stream/DataWorker":27}],3:[function(At,Me,ze){"use strict";var M=At("./stream/GenericWorker");ze.STORE={magic:"\0\0",compressWorker:function(){return new M("STORE compression")},uncompressWorker:function(){return new M("STORE decompression")}},ze.DEFLATE=At("./flate")},{"./flate":7,"./stream/GenericWorker":28}],4:[function(At,Me,ze){"use strict";var M=At("./utils"),L=function(){for(var _e,De=[],$e=0;$e<256;$e++){_e=$e;for(var Ze=0;Ze<8;Ze++)_e=1&_e?3988292384^_e>>>1:_e>>>1;De[$e]=_e}return De}();Me.exports=function(_e,De){return void 0!==_e&&_e.length?"string"!==M.getTypeOf(_e)?function($e,Ze,Ie,Ve){var Re=L,ce=0+Ie;$e^=-1;for(var Z=0;Z>>8^Re[255&($e^Ze[Z])];return-1^$e}(0|De,_e,_e.length):function($e,Ze,Ie,Ve){var Re=L,ce=0+Ie;$e^=-1;for(var Z=0;Z>>8^Re[255&($e^Ze.charCodeAt(Z))];return-1^$e}(0|De,_e,_e.length):0}},{"./utils":32}],5:[function(At,Me,ze){"use strict";ze.base64=!1,ze.binary=!1,ze.dir=!1,ze.createFolders=!0,ze.date=null,ze.compression=null,ze.compressionOptions=null,ze.comment=null,ze.unixPermissions=null,ze.dosPermissions=null},{}],6:[function(At,Me,ze){"use strict";var M;M=typeof Promise<"u"?Promise:At("lie"),Me.exports={Promise:M}},{lie:37}],7:[function(At,Me,ze){"use strict";var M=typeof Uint8Array<"u"&&typeof Uint16Array<"u"&&typeof Uint32Array<"u",L=At("pako"),_e=At("./utils"),De=At("./stream/GenericWorker"),$e=M?"uint8array":"array";function Ze(Ie,Ve){De.call(this,"FlateWorker/"+Ie),this._pako=null,this._pakoAction=Ie,this._pakoOptions=Ve,this.meta={}}ze.magic="\b\0",_e.inherits(Ze,De),Ze.prototype.processChunk=function(Ie){this.meta=Ie.meta,null===this._pako&&this._createPako(),this._pako.push(_e.transformTo($e,Ie.data),!1)},Ze.prototype.flush=function(){De.prototype.flush.call(this),null===this._pako&&this._createPako(),this._pako.push([],!0)},Ze.prototype.cleanUp=function(){De.prototype.cleanUp.call(this),this._pako=null},Ze.prototype._createPako=function(){this._pako=new L[this._pakoAction]({raw:!0,level:this._pakoOptions.level||-1});var Ie=this;this._pako.onData=function(Ve){Ie.push({data:Ve,meta:Ie.meta})}},ze.compressWorker=function(Ie){return new Ze("Deflate",Ie)},ze.uncompressWorker=function(){return new Ze("Inflate",{})}},{"./stream/GenericWorker":28,"./utils":32,pako:38}],8:[function(At,Me,ze){"use strict";function M(Re,ce){var Z,Y="";for(Z=0;Z>>=8;return Y}function L(Re,ce,Z,Y,ue,K){var J,R,P=Re.file,v=Re.compression,A=K!==$e.utf8encode,w=_e.transformTo("string",K(P.name)),m=_e.transformTo("string",$e.utf8encode(P.name)),_=P.comment,k=_e.transformTo("string",K(_)),F=_e.transformTo("string",$e.utf8encode(_)),q=m.length!==P.name.length,T=F.length!==_.length,$="",ee="",re="",be=P.dir,he=P.date,de={crc32:0,compressedSize:0,uncompressedSize:0};ce&&!Z||(de.crc32=Re.crc32,de.compressedSize=Re.compressedSize,de.uncompressedSize=Re.uncompressedSize);var I=0;ce&&(I|=8),A||!q&&!T||(I|=2048);var D,ge,U=0,H=0;be&&(U|=16),"UNIX"===ue?(H=798,U|=(ge=D=P.unixPermissions,D||(ge=be?16893:33204),(65535&ge)<<16)):(H=20,U|=function(D){return 63&(D||0)}(P.dosPermissions)),J=he.getUTCHours(),J<<=6,J|=he.getUTCMinutes(),J<<=5,J|=he.getUTCSeconds()/2,R=he.getUTCFullYear()-1980,R<<=4,R|=he.getUTCMonth()+1,R<<=5,R|=he.getUTCDate(),q&&(ee=M(1,1)+M(Ze(w),4)+m,$+="up"+M(ee.length,2)+ee),T&&(re=M(1,1)+M(Ze(k),4)+F,$+="uc"+M(re.length,2)+re);var le="";return le+="\n\0",le+=M(I,2),le+=v.magic,le+=M(J,2),le+=M(R,2),le+=M(de.crc32,4),le+=M(de.compressedSize,4),le+=M(de.uncompressedSize,4),le+=M(w.length,2),le+=M($.length,2),{fileRecord:Ie.LOCAL_FILE_HEADER+le+w+$,dirRecord:Ie.CENTRAL_FILE_HEADER+M(H,2)+le+M(k.length,2)+"\0\0\0\0"+M(U,4)+M(Y,4)+w+$+k}}var _e=At("../utils"),De=At("../stream/GenericWorker"),$e=At("../utf8"),Ze=At("../crc32"),Ie=At("../signature");function Ve(Re,ce,Z,Y){De.call(this,"ZipFileWorker"),this.bytesWritten=0,this.zipComment=ce,this.zipPlatform=Z,this.encodeFileName=Y,this.streamFiles=Re,this.accumulate=!1,this.contentBuffer=[],this.dirRecords=[],this.currentSourceOffset=0,this.entriesCount=0,this.currentFile=null,this._sources=[]}_e.inherits(Ve,De),Ve.prototype.push=function(Re){var ce=Re.meta.percent||0,Z=this.entriesCount,Y=this._sources.length;this.accumulate?this.contentBuffer.push(Re):(this.bytesWritten+=Re.data.length,De.prototype.push.call(this,{data:Re.data,meta:{currentFile:this.currentFile,percent:Z?(ce+100*(Z-Y-1))/Z:100}}))},Ve.prototype.openedSource=function(Re){this.currentSourceOffset=this.bytesWritten,this.currentFile=Re.file.name;var ce=this.streamFiles&&!Re.file.dir;if(ce){var Z=L(Re,ce,!1,this.currentSourceOffset,this.zipPlatform,this.encodeFileName);this.push({data:Z.fileRecord,meta:{percent:0}})}else this.accumulate=!0},Ve.prototype.closedSource=function(Re){this.accumulate=!1;var Y,ce=this.streamFiles&&!Re.file.dir,Z=L(Re,ce,!0,this.currentSourceOffset,this.zipPlatform,this.encodeFileName);if(this.dirRecords.push(Z.dirRecord),ce)this.push({data:(Y=Re,Ie.DATA_DESCRIPTOR+M(Y.crc32,4)+M(Y.compressedSize,4)+M(Y.uncompressedSize,4)),meta:{percent:100}});else for(this.push({data:Z.fileRecord,meta:{percent:0}});this.contentBuffer.length;)this.push(this.contentBuffer.shift());this.currentFile=null},Ve.prototype.flush=function(){for(var Re=this.bytesWritten,ce=0;ce=this.index;De--)$e=($e<<8)+this.byteAt(De);return this.index+=_e,$e},readString:function(_e){return M.transformTo("string",this.readData(_e))},readData:function(){},lastIndexOfSignature:function(){},readAndCheckSignature:function(){},readDate:function(){var _e=this.readInt(4);return new Date(Date.UTC(1980+(_e>>25&127),(_e>>21&15)-1,_e>>16&31,_e>>11&31,_e>>5&63,(31&_e)<<1))}},Me.exports=L},{"../utils":32}],19:[function(At,Me,ze){"use strict";var M=At("./Uint8ArrayReader");function L(_e){M.call(this,_e)}At("../utils").inherits(L,M),L.prototype.readData=function(_e){this.checkOffset(_e);var De=this.data.slice(this.zero+this.index,this.zero+this.index+_e);return this.index+=_e,De},Me.exports=L},{"../utils":32,"./Uint8ArrayReader":21}],20:[function(At,Me,ze){"use strict";var M=At("./DataReader");function L(_e){M.call(this,_e)}At("../utils").inherits(L,M),L.prototype.byteAt=function(_e){return this.data.charCodeAt(this.zero+_e)},L.prototype.lastIndexOfSignature=function(_e){return this.data.lastIndexOf(_e)-this.zero},L.prototype.readAndCheckSignature=function(_e){return _e===this.readData(4)},L.prototype.readData=function(_e){this.checkOffset(_e);var De=this.data.slice(this.zero+this.index,this.zero+this.index+_e);return this.index+=_e,De},Me.exports=L},{"../utils":32,"./DataReader":18}],21:[function(At,Me,ze){"use strict";var M=At("./ArrayReader");function L(_e){M.call(this,_e)}At("../utils").inherits(L,M),L.prototype.readData=function(_e){if(this.checkOffset(_e),0===_e)return new Uint8Array(0);var De=this.data.subarray(this.zero+this.index,this.zero+this.index+_e);return this.index+=_e,De},Me.exports=L},{"../utils":32,"./ArrayReader":17}],22:[function(At,Me,ze){"use strict";var M=At("../utils"),L=At("../support"),_e=At("./ArrayReader"),De=At("./StringReader"),$e=At("./NodeBufferReader"),Ze=At("./Uint8ArrayReader");Me.exports=function(Ie){var Ve=M.getTypeOf(Ie);return M.checkSupport(Ve),"string"!==Ve||L.uint8array?"nodebuffer"===Ve?new $e(Ie):L.uint8array?new Ze(M.transformTo("uint8array",Ie)):new _e(M.transformTo("array",Ie)):new De(Ie)}},{"../support":30,"../utils":32,"./ArrayReader":17,"./NodeBufferReader":19,"./StringReader":20,"./Uint8ArrayReader":21}],23:[function(At,Me,ze){"use strict";ze.LOCAL_FILE_HEADER="PK\x03\x04",ze.CENTRAL_FILE_HEADER="PK\x01\x02",ze.CENTRAL_DIRECTORY_END="PK\x05\x06",ze.ZIP64_CENTRAL_DIRECTORY_LOCATOR="PK\x06\x07",ze.ZIP64_CENTRAL_DIRECTORY_END="PK\x06\x06",ze.DATA_DESCRIPTOR="PK\x07\b"},{}],24:[function(At,Me,ze){"use strict";var M=At("./GenericWorker"),L=At("../utils");function _e(De){M.call(this,"ConvertWorker to "+De),this.destType=De}L.inherits(_e,M),_e.prototype.processChunk=function(De){this.push({data:L.transformTo(this.destType,De.data),meta:De.meta})},Me.exports=_e},{"../utils":32,"./GenericWorker":28}],25:[function(At,Me,ze){"use strict";var M=At("./GenericWorker"),L=At("../crc32");function _e(){M.call(this,"Crc32Probe"),this.withStreamInfo("crc32",0)}At("../utils").inherits(_e,M),_e.prototype.processChunk=function(De){this.streamInfo.crc32=L(De.data,this.streamInfo.crc32||0),this.push(De)},Me.exports=_e},{"../crc32":4,"../utils":32,"./GenericWorker":28}],26:[function(At,Me,ze){"use strict";var M=At("../utils"),L=At("./GenericWorker");function _e(De){L.call(this,"DataLengthProbe for "+De),this.propName=De,this.withStreamInfo(De,0)}M.inherits(_e,L),_e.prototype.processChunk=function(De){De&&(this.streamInfo[this.propName]=(this.streamInfo[this.propName]||0)+De.data.length),L.prototype.processChunk.call(this,De)},Me.exports=_e},{"../utils":32,"./GenericWorker":28}],27:[function(At,Me,ze){"use strict";var M=At("../utils"),L=At("./GenericWorker");function _e(De){L.call(this,"DataWorker");var $e=this;this.dataIsReady=!1,this.index=0,this.max=0,this.data=null,this.type="",this._tickScheduled=!1,De.then(function(Ze){$e.dataIsReady=!0,$e.data=Ze,$e.max=Ze&&Ze.length||0,$e.type=M.getTypeOf(Ze),$e.isPaused||$e._tickAndRepeat()},function(Ze){$e.error(Ze)})}M.inherits(_e,L),_e.prototype.cleanUp=function(){L.prototype.cleanUp.call(this),this.data=null},_e.prototype.resume=function(){return!!L.prototype.resume.call(this)&&(!this._tickScheduled&&this.dataIsReady&&(this._tickScheduled=!0,M.delay(this._tickAndRepeat,[],this)),!0)},_e.prototype._tickAndRepeat=function(){this._tickScheduled=!1,this.isPaused||this.isFinished||(this._tick(),this.isFinished||(M.delay(this._tickAndRepeat,[],this),this._tickScheduled=!0))},_e.prototype._tick=function(){if(this.isPaused||this.isFinished)return!1;var De=null,$e=Math.min(this.max,this.index+16384);if(this.index>=this.max)return this.end();switch(this.type){case"string":De=this.data.substring(this.index,$e);break;case"uint8array":De=this.data.subarray(this.index,$e);break;case"array":case"nodebuffer":De=this.data.slice(this.index,$e)}return this.index=$e,this.push({data:De,meta:{percent:this.max?this.index/this.max*100:0}})},Me.exports=_e},{"../utils":32,"./GenericWorker":28}],28:[function(At,Me,ze){"use strict";function M(L){this.name=L||"default",this.streamInfo={},this.generatedError=null,this.extraStreamInfo={},this.isPaused=!0,this.isFinished=!1,this.isLocked=!1,this._listeners={data:[],end:[],error:[]},this.previous=null}M.prototype={push:function(L){this.emit("data",L)},end:function(){if(this.isFinished)return!1;this.flush();try{this.emit("end"),this.cleanUp(),this.isFinished=!0}catch(L){this.emit("error",L)}return!0},error:function(L){return!this.isFinished&&(this.isPaused?this.generatedError=L:(this.isFinished=!0,this.emit("error",L),this.previous&&this.previous.error(L),this.cleanUp()),!0)},on:function(L,_e){return this._listeners[L].push(_e),this},cleanUp:function(){this.streamInfo=this.generatedError=this.extraStreamInfo=null,this._listeners=[]},emit:function(L,_e){if(this._listeners[L])for(var De=0;De "+L:L}},Me.exports=M},{}],29:[function(At,Me,ze){"use strict";var M=At("../utils"),L=At("./ConvertWorker"),_e=At("./GenericWorker"),De=At("../base64"),$e=At("../support"),Ze=At("../external"),Ie=null;if($e.nodestream)try{Ie=At("../nodejs/NodejsStreamOutputAdapter")}catch{}function Re(ce,Z,Y){var ue=Z;switch(Z){case"blob":case"arraybuffer":ue="uint8array";break;case"base64":ue="string"}try{this._internalType=ue,this._outputType=Z,this._mimeType=Y,M.checkSupport(ue),this._worker=ce.pipe(new L(ue)),ce.lock()}catch(K){this._worker=new _e("error"),this._worker.error(K)}}Re.prototype={accumulate:function(ce){return function Ve(ce,Z){return new Ze.Promise(function(Y,ue){var K=[],J=ce._internalType,R=ce._outputType,P=ce._mimeType;ce.on("data",function(v,A){K.push(v),Z&&Z(A)}).on("error",function(v){K=[],ue(v)}).on("end",function(){try{var v=function(A,w,m){switch(A){case"blob":return M.newBlob(M.transformTo("arraybuffer",w),m);case"base64":return De.encode(w);default:return M.transformTo(A,w)}}(R,function(A,w){var m,_=0,k=null,F=0;for(m=0;m"u")ze.blob=!1;else{var M=new ArrayBuffer(0);try{ze.blob=0===new Blob([M],{type:"application/zip"}).size}catch{try{var L=new(self.BlobBuilder||self.WebKitBlobBuilder||self.MozBlobBuilder||self.MSBlobBuilder);L.append(M),ze.blob=0===L.getBlob("application/zip").size}catch{ze.blob=!1}}}try{ze.nodestream=!!At("readable-stream").Readable}catch{ze.nodestream=!1}},{"readable-stream":16}],31:[function(At,Me,ze){"use strict";for(var M=At("./utils"),L=At("./support"),_e=At("./nodejsUtils"),De=At("./stream/GenericWorker"),$e=new Array(256),Ze=0;Ze<256;Ze++)$e[Ze]=252<=Ze?6:248<=Ze?5:240<=Ze?4:224<=Ze?3:192<=Ze?2:1;function Ie(){De.call(this,"utf-8 decode"),this.leftOver=null}function Ve(){De.call(this,"utf-8 encode")}$e[254]=$e[254]=1,ze.utf8encode=function(Re){return L.nodebuffer?_e.newBufferFrom(Re,"utf-8"):function(ce){var Z,Y,ue,K,J,R=ce.length,P=0;for(K=0;K>>6:(Y<65536?Z[J++]=224|Y>>>12:(Z[J++]=240|Y>>>18,Z[J++]=128|Y>>>12&63),Z[J++]=128|Y>>>6&63),Z[J++]=128|63&Y);return Z}(Re)},ze.utf8decode=function(Re){return L.nodebuffer?M.transformTo("nodebuffer",Re).toString("utf-8"):function(ce){var Z,Y,ue,K,J=ce.length,R=new Array(2*J);for(Z=Y=0;Z>10&1023,R[Y++]=56320|1023&ue)}return R.length!==Y&&(R.subarray?R=R.subarray(0,Y):R.length=Y),M.applyFromCharCode(R)}(Re=M.transformTo(L.uint8array?"uint8array":"array",Re))},M.inherits(Ie,De),Ie.prototype.processChunk=function(Re){var ce=M.transformTo(L.uint8array?"uint8array":"array",Re.data);if(this.leftOver&&this.leftOver.length){if(L.uint8array){var Z=ce;(ce=new Uint8Array(Z.length+this.leftOver.length)).set(this.leftOver,0),ce.set(Z,this.leftOver.length)}else ce=this.leftOver.concat(ce);this.leftOver=null}var Y=function(K,J){var R;for((J=J||K.length)>K.length&&(J=K.length),R=J-1;0<=R&&128==(192&K[R]);)R--;return R<0||0===R?J:R+$e[K[R]]>J?R:J}(ce),ue=ce;Y!==ce.length&&(L.uint8array?(ue=ce.subarray(0,Y),this.leftOver=ce.subarray(Y,ce.length)):(ue=ce.slice(0,Y),this.leftOver=ce.slice(Y,ce.length))),this.push({data:ze.utf8decode(ue),meta:Re.meta})},Ie.prototype.flush=function(){this.leftOver&&this.leftOver.length&&(this.push({data:ze.utf8decode(this.leftOver),meta:{}}),this.leftOver=null)},ze.Utf8DecodeWorker=Ie,M.inherits(Ve,De),Ve.prototype.processChunk=function(Re){this.push({data:ze.utf8encode(Re.data),meta:Re.meta})},ze.Utf8EncodeWorker=Ve},{"./nodejsUtils":14,"./stream/GenericWorker":28,"./support":30,"./utils":32}],32:[function(At,Me,ze){"use strict";var M=At("./support"),L=At("./base64"),_e=At("./nodejsUtils"),De=At("./external");function $e(Z){return Z}function Ze(Z,Y){for(var ue=0;ue>8;this.dir=!!(16&this.externalFileAttributes),0==Re&&(this.dosPermissions=63&this.externalFileAttributes),3==Re&&(this.unixPermissions=this.externalFileAttributes>>16&65535),this.dir||"/"!==this.fileNameStr.slice(-1)||(this.dir=!0)},parseZIP64ExtraField:function(){if(this.extraFields[1]){var Re=M(this.extraFields[1].value);this.uncompressedSize===L.MAX_VALUE_32BITS&&(this.uncompressedSize=Re.readInt(8)),this.compressedSize===L.MAX_VALUE_32BITS&&(this.compressedSize=Re.readInt(8)),this.localHeaderOffset===L.MAX_VALUE_32BITS&&(this.localHeaderOffset=Re.readInt(8)),this.diskNumberStart===L.MAX_VALUE_32BITS&&(this.diskNumberStart=Re.readInt(4))}},readExtraFields:function(Re){var ce,Z,Y,ue=Re.index+this.extraFieldsLength;for(this.extraFields||(this.extraFields={});Re.index+4>>6:(Re<65536?Ve[Y++]=224|Re>>>12:(Ve[Y++]=240|Re>>>18,Ve[Y++]=128|Re>>>12&63),Ve[Y++]=128|Re>>>6&63),Ve[Y++]=128|63&Re);return Ve},ze.buf2binstring=function(Ie){return Ze(Ie,Ie.length)},ze.binstring2buf=function(Ie){for(var Ve=new M.Buf8(Ie.length),Re=0,ce=Ve.length;Re>10&1023,K[ce++]=56320|1023&Z)}return Ze(K,ce)},ze.utf8border=function(Ie,Ve){var Re;for((Ve=Ve||Ie.length)>Ie.length&&(Ve=Ie.length),Re=Ve-1;0<=Re&&128==(192&Ie[Re]);)Re--;return Re<0||0===Re?Ve:Re+De[Ie[Re]]>Ve?Re:Ve}},{"./common":41}],43:[function(At,Me,ze){"use strict";Me.exports=function(M,L,_e,De){for(var $e=65535&M|0,Ze=M>>>16&65535|0,Ie=0;0!==_e;){for(_e-=Ie=2e3<_e?2e3:_e;Ze=Ze+($e=$e+L[De++]|0)|0,--Ie;);$e%=65521,Ze%=65521}return $e|Ze<<16|0}},{}],44:[function(At,Me,ze){"use strict";Me.exports={Z_NO_FLUSH:0,Z_PARTIAL_FLUSH:1,Z_SYNC_FLUSH:2,Z_FULL_FLUSH:3,Z_FINISH:4,Z_BLOCK:5,Z_TREES:6,Z_OK:0,Z_STREAM_END:1,Z_NEED_DICT:2,Z_ERRNO:-1,Z_STREAM_ERROR:-2,Z_DATA_ERROR:-3,Z_BUF_ERROR:-5,Z_NO_COMPRESSION:0,Z_BEST_SPEED:1,Z_BEST_COMPRESSION:9,Z_DEFAULT_COMPRESSION:-1,Z_FILTERED:1,Z_HUFFMAN_ONLY:2,Z_RLE:3,Z_FIXED:4,Z_DEFAULT_STRATEGY:0,Z_BINARY:0,Z_TEXT:1,Z_UNKNOWN:2,Z_DEFLATED:8}},{}],45:[function(At,Me,ze){"use strict";var M=function(){for(var L,_e=[],De=0;De<256;De++){L=De;for(var $e=0;$e<8;$e++)L=1&L?3988292384^L>>>1:L>>>1;_e[De]=L}return _e}();Me.exports=function(L,_e,De,$e){var Ze=M,Ie=$e+De;L^=-1;for(var Ve=$e;Ve>>8^Ze[255&(L^_e[Ve])];return-1^L}},{}],46:[function(At,Me,ze){"use strict";var M,L=At("../utils/common"),_e=At("./trees"),De=At("./adler32"),$e=At("./crc32"),Ze=At("./messages"),_=258,k=262,q=113;function be(ve,Je){return ve.msg=Ze[Je],Je}function he(ve){return(ve<<1)-(4ve.avail_out&&(ct=ve.avail_out),0!==ct&&(L.arraySet(ve.output,Je.pending_buf,Je.pending_out,ct,ve.next_out),ve.next_out+=ct,Je.pending_out+=ct,ve.total_out+=ct,ve.avail_out-=ct,Je.pending-=ct,0===Je.pending&&(Je.pending_out=0))}function U(ve,Je){_e._tr_flush_block(ve,0<=ve.block_start?ve.block_start:-1,ve.strstart-ve.block_start,Je),ve.block_start=ve.strstart,I(ve.strm)}function H(ve,Je){ve.pending_buf[ve.pending++]=Je}function le(ve,Je){ve.pending_buf[ve.pending++]=Je>>>8&255,ve.pending_buf[ve.pending++]=255&Je}function D(ve,Je){var ct,je,Ye=ve.max_chain_length,pt=ve.strstart,Ht=ve.prev_length,tn=ve.nice_match,Ct=ve.strstart>ve.w_size-k?ve.strstart-(ve.w_size-k):0,Ot=ve.window,sn=ve.w_mask,Mn=ve.prev,Ln=ve.strstart+_,In=Ot[pt+Ht-1],$n=Ot[pt+Ht];ve.prev_length>=ve.good_match&&(Ye>>=2),tn>ve.lookahead&&(tn=ve.lookahead);do{if(Ot[(ct=Je)+Ht]===$n&&Ot[ct+Ht-1]===In&&Ot[ct]===Ot[pt]&&Ot[++ct]===Ot[pt+1]){pt+=2,ct++;do{}while(Ot[++pt]===Ot[++ct]&&Ot[++pt]===Ot[++ct]&&Ot[++pt]===Ot[++ct]&&Ot[++pt]===Ot[++ct]&&Ot[++pt]===Ot[++ct]&&Ot[++pt]===Ot[++ct]&&Ot[++pt]===Ot[++ct]&&Ot[++pt]===Ot[++ct]&&ptCt&&0!=--Ye);return Ht<=ve.lookahead?Ht:ve.lookahead}function oe(ve){var Je,ct,je,Ye,pt,Ht,tn,Ct,Ot,sn,Mn=ve.w_size;do{if(Ye=ve.window_size-ve.lookahead-ve.strstart,ve.strstart>=Mn+(Mn-k)){for(L.arraySet(ve.window,ve.window,Mn,Mn,0),ve.match_start-=Mn,ve.strstart-=Mn,ve.block_start-=Mn,Je=ct=ve.hash_size;je=ve.head[--Je],ve.head[Je]=Mn<=je?je-Mn:0,--ct;);for(Je=ct=Mn;je=ve.prev[--Je],ve.prev[Je]=Mn<=je?je-Mn:0,--ct;);Ye+=Mn}if(0===ve.strm.avail_in)break;if(tn=ve.window,Ct=ve.strstart+ve.lookahead,sn=void 0,(Ot=Ye)<(sn=(Ht=ve.strm).avail_in)&&(sn=Ot),ct=0===sn?0:(Ht.avail_in-=sn,L.arraySet(tn,Ht.input,Ht.next_in,sn,Ct),1===Ht.state.wrap?Ht.adler=De(Ht.adler,tn,sn,Ct):2===Ht.state.wrap&&(Ht.adler=$e(Ht.adler,tn,sn,Ct)),Ht.next_in+=sn,Ht.total_in+=sn,sn),ve.lookahead+=ct,ve.lookahead+ve.insert>=3)for(ve.ins_h=ve.window[pt=ve.strstart-ve.insert],ve.ins_h=(ve.ins_h<=3&&(ve.ins_h=(ve.ins_h<=3)if(je=_e._tr_tally(ve,ve.strstart-ve.match_start,ve.match_length-3),ve.lookahead-=ve.match_length,ve.match_length<=ve.max_lazy_match&&ve.lookahead>=3){for(ve.match_length--;ve.strstart++,ve.ins_h=(ve.ins_h<=3&&(ve.ins_h=(ve.ins_h<=3&&ve.match_length<=ve.prev_length){for(Ye=ve.strstart+ve.lookahead-3,je=_e._tr_tally(ve,ve.strstart-1-ve.prev_match,ve.prev_length-3),ve.lookahead-=ve.prev_length-1,ve.prev_length-=2;++ve.strstart<=Ye&&(ve.ins_h=(ve.ins_h<ve.pending_buf_size-5&&(ct=ve.pending_buf_size-5);;){if(ve.lookahead<=1){if(oe(ve),0===ve.lookahead&&0===Je)return 1;if(0===ve.lookahead)break}ve.strstart+=ve.lookahead,ve.lookahead=0;var je=ve.block_start+ct;if((0===ve.strstart||ve.strstart>=je)&&(ve.lookahead=ve.strstart-je,ve.strstart=je,U(ve,!1),0===ve.strm.avail_out)||ve.strstart-ve.block_start>=ve.w_size-k&&(U(ve,!1),0===ve.strm.avail_out))return 1}return ve.insert=0,4===Je?(U(ve,!0),0===ve.strm.avail_out?3:4):(ve.strstart>ve.block_start&&U(ve,!1),1)}),new Ge(4,4,8,4,ge),new Ge(4,5,16,8,ge),new Ge(4,6,32,32,ge),new Ge(4,4,16,16,Ee),new Ge(8,16,32,32,Ee),new Ge(8,16,128,128,Ee),new Ge(8,32,128,256,Ee),new Ge(32,128,258,1024,Ee),new Ge(32,258,258,4096,Ee)],ze.deflateInit=function(ve,Je){return Bt(ve,Je,8,15,8,0)},ze.deflateInit2=Bt,ze.deflateReset=Tt,ze.deflateResetKeep=et,ze.deflateSetHeader=function(ve,Je){return ve&&ve.state?2!==ve.state.wrap?-2:(ve.state.gzhead=Je,0):-2},ze.deflate=function(ve,Je){var ct,je,Ye,pt;if(!ve||!ve.state||5>8&255),H(je,je.gzhead.time>>16&255),H(je,je.gzhead.time>>24&255),H(je,9===je.level?2:2<=je.strategy||je.level<2?4:0),H(je,255&je.gzhead.os),je.gzhead.extra&&je.gzhead.extra.length&&(H(je,255&je.gzhead.extra.length),H(je,je.gzhead.extra.length>>8&255)),je.gzhead.hcrc&&(ve.adler=$e(ve.adler,je.pending_buf,je.pending,0)),je.gzindex=0,je.status=69):(H(je,0),H(je,0),H(je,0),H(je,0),H(je,0),H(je,9===je.level?2:2<=je.strategy||je.level<2?4:0),H(je,3),je.status=q);else{var Ht=8+(je.w_bits-8<<4)<<8;Ht|=(2<=je.strategy||je.level<2?0:je.level<6?1:6===je.level?2:3)<<6,0!==je.strstart&&(Ht|=32),Ht+=31-Ht%31,je.status=q,le(je,Ht),0!==je.strstart&&(le(je,ve.adler>>>16),le(je,65535&ve.adler)),ve.adler=1}if(69===je.status)if(je.gzhead.extra){for(Ye=je.pending;je.gzindex<(65535&je.gzhead.extra.length)&&(je.pending!==je.pending_buf_size||(je.gzhead.hcrc&&je.pending>Ye&&(ve.adler=$e(ve.adler,je.pending_buf,je.pending-Ye,Ye)),I(ve),Ye=je.pending,je.pending!==je.pending_buf_size));)H(je,255&je.gzhead.extra[je.gzindex]),je.gzindex++;je.gzhead.hcrc&&je.pending>Ye&&(ve.adler=$e(ve.adler,je.pending_buf,je.pending-Ye,Ye)),je.gzindex===je.gzhead.extra.length&&(je.gzindex=0,je.status=73)}else je.status=73;if(73===je.status)if(je.gzhead.name){Ye=je.pending;do{if(je.pending===je.pending_buf_size&&(je.gzhead.hcrc&&je.pending>Ye&&(ve.adler=$e(ve.adler,je.pending_buf,je.pending-Ye,Ye)),I(ve),Ye=je.pending,je.pending===je.pending_buf_size)){pt=1;break}pt=je.gzindexYe&&(ve.adler=$e(ve.adler,je.pending_buf,je.pending-Ye,Ye)),0===pt&&(je.gzindex=0,je.status=91)}else je.status=91;if(91===je.status)if(je.gzhead.comment){Ye=je.pending;do{if(je.pending===je.pending_buf_size&&(je.gzhead.hcrc&&je.pending>Ye&&(ve.adler=$e(ve.adler,je.pending_buf,je.pending-Ye,Ye)),I(ve),Ye=je.pending,je.pending===je.pending_buf_size)){pt=1;break}pt=je.gzindexYe&&(ve.adler=$e(ve.adler,je.pending_buf,je.pending-Ye,Ye)),0===pt&&(je.status=103)}else je.status=103;if(103===je.status&&(je.gzhead.hcrc?(je.pending+2>je.pending_buf_size&&I(ve),je.pending+2<=je.pending_buf_size&&(H(je,255&ve.adler),H(je,ve.adler>>8&255),ve.adler=0,je.status=q)):je.status=q),0!==je.pending){if(I(ve),0===ve.avail_out)return je.last_flush=-1,0}else if(0===ve.avail_in&&he(Je)<=he(ct)&&4!==Je)return be(ve,-5);if(666===je.status&&0!==ve.avail_in)return be(ve,-5);if(0!==ve.avail_in||0!==je.lookahead||0!==Je&&666!==je.status){var tn=2===je.strategy?function(Ct,Ot){for(var sn;;){if(0===Ct.lookahead&&(oe(Ct),0===Ct.lookahead)){if(0===Ot)return 1;break}if(Ct.match_length=0,sn=_e._tr_tally(Ct,0,Ct.window[Ct.strstart]),Ct.lookahead--,Ct.strstart++,sn&&(U(Ct,!1),0===Ct.strm.avail_out))return 1}return Ct.insert=0,4===Ot?(U(Ct,!0),0===Ct.strm.avail_out?3:4):Ct.last_lit&&(U(Ct,!1),0===Ct.strm.avail_out)?1:2}(je,Je):3===je.strategy?function(Ct,Ot){for(var sn,Mn,Ln,In,$n=Ct.window;;){if(Ct.lookahead<=_){if(oe(Ct),Ct.lookahead<=_&&0===Ot)return 1;if(0===Ct.lookahead)break}if(Ct.match_length=0,Ct.lookahead>=3&&0Ct.lookahead&&(Ct.match_length=Ct.lookahead)}if(Ct.match_length>=3?(sn=_e._tr_tally(Ct,1,Ct.match_length-3),Ct.lookahead-=Ct.match_length,Ct.strstart+=Ct.match_length,Ct.match_length=0):(sn=_e._tr_tally(Ct,0,Ct.window[Ct.strstart]),Ct.lookahead--,Ct.strstart++),sn&&(U(Ct,!1),0===Ct.strm.avail_out))return 1}return Ct.insert=0,4===Ot?(U(Ct,!0),0===Ct.strm.avail_out?3:4):Ct.last_lit&&(U(Ct,!1),0===Ct.strm.avail_out)?1:2}(je,Je):M[je.level].func(je,Je);if(3!==tn&&4!==tn||(je.status=666),1===tn||3===tn)return 0===ve.avail_out&&(je.last_flush=-1),0;if(2===tn&&(1===Je?_e._tr_align(je):5!==Je&&(_e._tr_stored_block(je,0,0,!1),3===Je&&(de(je.head),0===je.lookahead&&(je.strstart=0,je.block_start=0,je.insert=0))),I(ve),0===ve.avail_out))return je.last_flush=-1,0}return 4!==Je?0:je.wrap<=0?1:(2===je.wrap?(H(je,255&ve.adler),H(je,ve.adler>>8&255),H(je,ve.adler>>16&255),H(je,ve.adler>>24&255),H(je,255&ve.total_in),H(je,ve.total_in>>8&255),H(je,ve.total_in>>16&255),H(je,ve.total_in>>24&255)):(le(je,ve.adler>>>16),le(je,65535&ve.adler)),I(ve),0=ct.w_size&&(0===pt&&(de(ct.head),ct.strstart=0,ct.block_start=0,ct.insert=0),Ot=new L.Buf8(ct.w_size),L.arraySet(Ot,Je,sn-ct.w_size,ct.w_size,0),Je=Ot,sn=ct.w_size),Ht=ve.avail_in,tn=ve.next_in,Ct=ve.input,ve.avail_in=sn,ve.next_in=0,ve.input=Je,oe(ct);ct.lookahead>=3;){for(je=ct.strstart,Ye=ct.lookahead-2;ct.ins_h=(ct.ins_h<>>=m=w>>>24,J-=m,0==(m=w>>>16&255))$[Ze++]=65535&w;else{if(!(16&m)){if(!(64&m)){w=R[(65535&w)+(K&(1<>>=m,J-=m),J<15&&(K+=T[De++]<>>=m=w>>>24,J-=m,!(16&(m=w>>>16&255))){if(!(64&m)){w=P[(65535&w)+(K&(1<>>=m,J-=m,(m=Ze-Ie)>3,K&=(1<<(J-=_<<3))-1,M.next_in=De,M.next_out=Ze,M.avail_in=De<$e?$e-De+5:5-(De-$e),M.avail_out=Ze>>24&255)+(F>>>8&65280)+((65280&F)<<8)+((255&F)<<24)}function K(){this.mode=0,this.last=!1,this.wrap=0,this.havedict=!1,this.flags=0,this.dmax=0,this.check=0,this.total=0,this.head=null,this.wbits=0,this.wsize=0,this.whave=0,this.wnext=0,this.window=null,this.hold=0,this.bits=0,this.length=0,this.offset=0,this.extra=0,this.lencode=null,this.distcode=null,this.lenbits=0,this.distbits=0,this.ncode=0,this.nlen=0,this.ndist=0,this.have=0,this.next=null,this.lens=new M.Buf16(320),this.work=new M.Buf16(288),this.lendyn=null,this.distdyn=null,this.sane=0,this.back=0,this.was=0}function J(F){var q;return F&&F.state?(F.total_in=F.total_out=(q=F.state).total=0,F.msg="",q.wrap&&(F.adler=1&q.wrap),q.mode=1,q.last=0,q.havedict=0,q.dmax=32768,q.head=null,q.hold=0,q.bits=0,q.lencode=q.lendyn=new M.Buf32(852),q.distcode=q.distdyn=new M.Buf32(592),q.sane=1,q.back=-1,0):-2}function R(F){var q;return F&&F.state?((q=F.state).wsize=0,q.whave=0,q.wnext=0,J(F)):-2}function P(F,q){var T,$;return F&&F.state?($=F.state,q<0?(T=0,q=-q):(T=1+(q>>4),q<48&&(q&=15)),q&&(q<8||15=re.wsize?(M.arraySet(re.window,q,T-re.wsize,re.wsize,0),re.wnext=0,re.whave=re.wsize):($<(ee=re.wsize-re.wnext)&&(ee=$),M.arraySet(re.window,q,T-$,ee,re.wnext),($-=ee)?(M.arraySet(re.window,q,T-$,$,0),re.wnext=$,re.whave=re.wsize):(re.wnext+=ee,re.wnext===re.wsize&&(re.wnext=0),re.whave>>8&255,T.check=_e(T.check,pt,2,0),U=I=0,T.mode=2;break}if(T.flags=0,T.head&&(T.head.done=!1),!(1&T.wrap)||(((255&I)<<8)+(I>>8))%31){F.msg="incorrect header check",T.mode=30;break}if(8!=(15&I)){F.msg="unknown compression method",T.mode=30;break}if(U-=4,ve=8+(15&(I>>>=4)),0===T.wbits)T.wbits=ve;else if(ve>T.wbits){F.msg="invalid window size",T.mode=30;break}T.dmax=1<>8&1),512&T.flags&&(pt[0]=255&I,pt[1]=I>>>8&255,T.check=_e(T.check,pt,2,0)),U=I=0,T.mode=3;case 3:for(;U<32;){if(0===he)break e;he--,I+=$[re++]<>>8&255,pt[2]=I>>>16&255,pt[3]=I>>>24&255,T.check=_e(T.check,pt,4,0)),U=I=0,T.mode=4;case 4:for(;U<16;){if(0===he)break e;he--,I+=$[re++]<>8),512&T.flags&&(pt[0]=255&I,pt[1]=I>>>8&255,T.check=_e(T.check,pt,2,0)),U=I=0,T.mode=5;case 5:if(1024&T.flags){for(;U<16;){if(0===he)break e;he--,I+=$[re++]<>>8&255,T.check=_e(T.check,pt,2,0)),U=I=0}else T.head&&(T.head.extra=null);T.mode=6;case 6:if(1024&T.flags&&(he<(D=T.length)&&(D=he),D&&(T.head&&(ve=T.head.extra_len-T.length,T.head.extra||(T.head.extra=new Array(T.head.extra_len)),M.arraySet(T.head.extra,$,re,D,ve)),512&T.flags&&(T.check=_e(T.check,$,D,re)),he-=D,re+=D,T.length-=D),T.length))break e;T.length=0,T.mode=7;case 7:if(2048&T.flags){if(0===he)break e;for(D=0;ve=$[re+D++],T.head&&ve&&T.length<65536&&(T.head.name+=String.fromCharCode(ve)),ve&&D>9&1,T.head.done=!0),F.adler=T.check=0,T.mode=12;break;case 10:for(;U<32;){if(0===he)break e;he--,I+=$[re++]<>>=7&U,U-=7&U,T.mode=27;break}for(;U<3;){if(0===he)break e;he--,I+=$[re++]<>>=1)){case 0:T.mode=14;break;case 1:if(_(T),T.mode=20,6!==q)break;I>>>=2,U-=2;break e;case 2:T.mode=17;break;case 3:F.msg="invalid block type",T.mode=30}I>>>=2,U-=2;break;case 14:for(I>>>=7&U,U-=7&U;U<32;){if(0===he)break e;he--,I+=$[re++]<>>16^65535)){F.msg="invalid stored block lengths",T.mode=30;break}if(T.length=65535&I,U=I=0,T.mode=15,6===q)break e;case 15:T.mode=16;case 16:if(D=T.length){if(he>>=5)),U-=5,T.ncode=4+(15&(I>>>=5)),I>>>=4,U-=4,286>>=3,U-=3}for(;T.have<19;)T.lens[Ht[T.have++]]=0;if(T.lencode=T.lendyn,T.lenbits=7,Je=$e(0,T.lens,0,19,T.lencode,0,T.work,ct={bits:T.lenbits}),T.lenbits=ct.bits,Je){F.msg="invalid code lengths set",T.mode=30;break}T.have=0,T.mode=19;case 19:for(;T.have>>16&255,We=65535&Ye,!((Ee=Ye>>>24)<=U);){if(0===he)break e;he--,I+=$[re++]<>>=Ee,U-=Ee,T.lens[T.have++]=We;else{if(16===We){for(je=Ee+2;U>>=Ee,U-=Ee,0===T.have){F.msg="invalid bit length repeat",T.mode=30;break}ve=T.lens[T.have-1],D=3+(3&I),I>>>=2,U-=2}else if(17===We){for(je=Ee+3;U>>=Ee)),I>>>=3,U-=3}else{for(je=Ee+7;U>>=Ee)),I>>>=7,U-=7}if(T.have+D>T.nlen+T.ndist){F.msg="invalid bit length repeat",T.mode=30;break}for(;D--;)T.lens[T.have++]=ve}}if(30===T.mode)break;if(0===T.lens[256]){F.msg="invalid code -- missing end-of-block",T.mode=30;break}if(T.lenbits=9,Je=$e(1,T.lens,0,T.nlen,T.lencode,0,T.work,ct={bits:T.lenbits}),T.lenbits=ct.bits,Je){F.msg="invalid literal/lengths set",T.mode=30;break}if(T.distbits=6,T.distcode=T.distdyn,Je=$e(2,T.lens,T.nlen,T.ndist,T.distcode,0,T.work,ct={bits:T.distbits}),T.distbits=ct.bits,Je){F.msg="invalid distances set",T.mode=30;break}if(T.mode=20,6===q)break e;case 20:T.mode=21;case 21:if(6<=he&&258<=de){F.next_out=be,F.avail_out=de,F.next_in=re,F.avail_in=he,T.hold=I,T.bits=U,De(F,le),be=F.next_out,ee=F.output,de=F.avail_out,re=F.next_in,$=F.input,he=F.avail_in,I=T.hold,U=T.bits,12===T.mode&&(T.back=-1);break}for(T.back=0;Ge=(Ye=T.lencode[I&(1<>>16&255,We=65535&Ye,!((Ee=Ye>>>24)<=U);){if(0===he)break e;he--,I+=$[re++]<>et)])>>>16&255,We=65535&Ye,!(et+(Ee=Ye>>>24)<=U);){if(0===he)break e;he--,I+=$[re++]<>>=et,U-=et,T.back+=et}if(I>>>=Ee,U-=Ee,T.back+=Ee,T.length=We,0===Ge){T.mode=26;break}if(32&Ge){T.back=-1,T.mode=12;break}if(64&Ge){F.msg="invalid literal/length code",T.mode=30;break}T.extra=15&Ge,T.mode=22;case 22:if(T.extra){for(je=T.extra;U>>=T.extra,U-=T.extra,T.back+=T.extra}T.was=T.length,T.mode=23;case 23:for(;Ge=(Ye=T.distcode[I&(1<>>16&255,We=65535&Ye,!((Ee=Ye>>>24)<=U);){if(0===he)break e;he--,I+=$[re++]<>et)])>>>16&255,We=65535&Ye,!(et+(Ee=Ye>>>24)<=U);){if(0===he)break e;he--,I+=$[re++]<>>=et,U-=et,T.back+=et}if(I>>>=Ee,U-=Ee,T.back+=Ee,64&Ge){F.msg="invalid distance code",T.mode=30;break}T.offset=We,T.extra=15&Ge,T.mode=24;case 24:if(T.extra){for(je=T.extra;U>>=T.extra,U-=T.extra,T.back+=T.extra}if(T.offset>T.dmax){F.msg="invalid distance too far back",T.mode=30;break}T.mode=25;case 25:if(0===de)break e;if(T.offset>(D=le-de)){if((D=T.offset-D)>T.whave&&T.sane){F.msg="invalid distance too far back",T.mode=30;break}oe=D>T.wnext?T.wsize-(D-=T.wnext):T.wnext-D,D>T.length&&(D=T.length),ge=T.window}else ge=ee,oe=be-T.offset,D=T.length;for(deA?(m=oe[ge+Y[q]],U[H+Y[q]]):(m=96,0),K=1<>be)+(J-=K)]=w<<24|m<<16|_|0,0!==J;);for(K=1<>=1;if(0!==K?(I&=K-1,I+=K):I=0,q++,0==--le[F]){if(F===$)break;F=Ie[Ve+Y[q]]}if(ee>>7)]}function H(Ye,pt){Ye.pending_buf[Ye.pending++]=255&pt,Ye.pending_buf[Ye.pending++]=pt>>>8&255}function le(Ye,pt,Ht){Ye.bi_valid>16-Ht?(Ye.bi_buf|=pt<>16-Ye.bi_valid,Ye.bi_valid+=Ht-16):(Ye.bi_buf|=pt<>>=1,Ht<<=1,0<--pt;);return Ht>>>1}function ge(Ye,pt,Ht){var tn,Ct,Ot=new Array(16),sn=0;for(tn=1;tn<=Y;tn++)Ot[tn]=sn=sn+Ht[tn-1]<<1;for(Ct=0;Ct<=pt;Ct++){var Mn=Ye[2*Ct+1];0!==Mn&&(Ye[2*Ct]=oe(Ot[Mn]++,Mn))}}function Ee(Ye){var pt;for(pt=0;pt<286;pt++)Ye.dyn_ltree[2*pt]=0;for(pt=0;pt<30;pt++)Ye.dyn_dtree[2*pt]=0;for(pt=0;pt<19;pt++)Ye.bl_tree[2*pt]=0;Ye.dyn_ltree[512]=1,Ye.opt_len=Ye.static_len=0,Ye.last_lit=Ye.matches=0}function Ge(Ye){8>1;1<=Ht;Ht--)et(Ye,Ot,Ht);for(Ct=Ln;Ht=Ye.heap[1],Ye.heap[1]=Ye.heap[Ye.heap_len--],et(Ye,Ot,1),tn=Ye.heap[1],Ye.heap[--Ye.heap_max]=Ht,Ye.heap[--Ye.heap_max]=tn,Ot[2*Ct]=Ot[2*Ht]+Ot[2*tn],Ye.depth[Ct]=(Ye.depth[Ht]>=Ye.depth[tn]?Ye.depth[Ht]:Ye.depth[tn])+1,Ot[2*Ht+1]=Ot[2*tn+1]=Ct,Ye.heap[1]=Ct++,et(Ye,Ot,1),2<=Ye.heap_len;);Ye.heap[--Ye.heap_max]=Ye.heap[1],function($n,bn){var rn,qt,Qt,jt,yn,dn,ai=bn.dyn_tree,nr=bn.max_code,Gi=bn.stat_desc.static_tree,Sr=bn.stat_desc.has_stree,Nr=bn.stat_desc.extra_bits,gr=bn.stat_desc.extra_base,hs=bn.stat_desc.max_length,Hs=0;for(jt=0;jt<=Y;jt++)$n.bl_count[jt]=0;for(ai[2*$n.heap[$n.heap_max]+1]=0,rn=$n.heap_max+1;rn<573;rn++)hs<(jt=ai[2*ai[2*(qt=$n.heap[rn])+1]+1]+1)&&(jt=hs,Hs++),ai[2*qt+1]=jt,nr>=7;Ct<30;Ct++)for(he[Ct]=Ot<<7,pt=0;pt<1<>>=1)if(1&In&&0!==Mn.dyn_ltree[2*Ln])return 0;if(0!==Mn.dyn_ltree[18]||0!==Mn.dyn_ltree[20]||0!==Mn.dyn_ltree[26])return 1;for(Ln=32;Ln<256;Ln++)if(0!==Mn.dyn_ltree[2*Ln])return 1;return 0}(Ye)),Bt(Ye,Ye.l_desc),Bt(Ye,Ye.d_desc),sn=function(Mn){var Ln;for(ve(Mn,Mn.dyn_ltree,Mn.l_desc.max_code),ve(Mn,Mn.dyn_dtree,Mn.d_desc.max_code),Bt(Mn,Mn.bl_desc),Ln=18;3<=Ln&&0===Mn.bl_tree[2*_[Ln]+1];Ln--);return Mn.opt_len+=3*(Ln+1)+5+5+4,Ln}(Ye),(Ot=Ye.static_len+3+7>>>3)<=(Ct=Ye.opt_len+3+7>>>3)&&(Ct=Ot)):Ct=Ot=Ht+5,Ht+4<=Ct&&-1!==pt?je(Ye,pt,Ht,tn):4===Ye.strategy||Ot===Ct?(le(Ye,2+(tn?1:0),3),Tt(Ye,k,F)):(le(Ye,4+(tn?1:0),3),function(Mn,Ln,In,$n){var bn;for(le(Mn,Ln-257,5),le(Mn,In-1,5),le(Mn,$n-4,4),bn=0;bn<$n;bn++)le(Mn,Mn.bl_tree[2*_[bn]+1],3);Je(Mn,Mn.dyn_ltree,Ln-1),Je(Mn,Mn.dyn_dtree,In-1)}(Ye,Ye.l_desc.max_code+1,Ye.d_desc.max_code+1,sn+1),Tt(Ye,Ye.dyn_ltree,Ye.dyn_dtree)),Ee(Ye),tn&&Ge(Ye)},ze._tr_tally=function(Ye,pt,Ht){return Ye.pending_buf[Ye.d_buf+2*Ye.last_lit]=pt>>>8&255,Ye.pending_buf[Ye.d_buf+2*Ye.last_lit+1]=255&pt,Ye.pending_buf[Ye.l_buf+Ye.last_lit]=255&Ht,Ye.last_lit++,0===pt?Ye.dyn_ltree[2*Ht]++:(Ye.matches++,pt--,Ye.dyn_ltree[2*(T[Ht]+256+1)]++,Ye.dyn_dtree[2*U(pt)]++),Ye.last_lit===Ye.lit_bufsize-1},ze._tr_align=function(Ye){var pt;le(Ye,2,3),D(Ye,256,k),16===(pt=Ye).bi_valid?(H(pt,pt.bi_buf),pt.bi_buf=0,pt.bi_valid=0):8<=pt.bi_valid&&(pt.pending_buf[pt.pending++]=255&pt.bi_buf,pt.bi_buf>>=8,pt.bi_valid-=8)}},{"../utils/common":41}],53:[function(At,Me,ze){"use strict";Me.exports=function(){this.input=null,this.next_in=0,this.avail_in=0,this.total_in=0,this.output=null,this.next_out=0,this.avail_out=0,this.total_out=0,this.msg="",this.state=null,this.data_type=2,this.adler=0}},{}],54:[function(At,Me,ze){(function(M){!function(L,_e){"use strict";if(!L.setImmediate){var De,$e,Ze,Ie,Ve=1,Re={},ce=!1,Z=L.document,Y=Object.getPrototypeOf&&Object.getPrototypeOf(L);Y=Y&&Y.setTimeout?Y:L,De="[object process]"==={}.toString.call(L.process)?function(R){process.nextTick(function(){K(R)})}:function(){if(L.postMessage&&!L.importScripts){var R=!0,P=L.onmessage;return L.onmessage=function(){R=!1},L.postMessage("","*"),L.onmessage=P,R}}()?(Ie="setImmediate$"+Math.random()+"$",L.addEventListener?L.addEventListener("message",J,!1):L.attachEvent("onmessage",J),function(R){L.postMessage(Ie+R,"*")}):L.MessageChannel?((Ze=new MessageChannel).port1.onmessage=function(R){K(R.data)},function(R){Ze.port2.postMessage(R)}):Z&&"onreadystatechange"in Z.createElement("script")?($e=Z.documentElement,function(R){var P=Z.createElement("script");P.onreadystatechange=function(){K(R),P.onreadystatechange=null,$e.removeChild(P),P=null},$e.appendChild(P)}):function(R){setTimeout(K,0,R)},Y.setImmediate=function(R){"function"!=typeof R&&(R=new Function(""+R));for(var P=new Array(arguments.length-1),v=0;v"u"?void 0===M?this:M:self)}).call(this,typeof global<"u"?global:typeof self<"u"?self:typeof window<"u"?window:{})},{}]},{},[10])(10)},9393:(jr,At,Me)=>{const ze=Me(801),M=Me(3105),L=Me(6948),_e=Me(6297);function De($e,Ze,Ie,Ve,Re){const ce=[].slice.call(arguments,1),Z=ce.length,Y="function"==typeof ce[Z-1];if(!Y&&!ze())throw new Error("Callback required as last argument");if(!Y){if(Z<1)throw new Error("Too few arguments provided");return 1===Z?(Ie=Ze,Ze=Ve=void 0):2===Z&&!Ze.getContext&&(Ve=Ie,Ie=Ze,Ze=void 0),new Promise(function(ue,K){try{const J=M.create(Ie,Ve);ue($e(J,Ze,Ve))}catch(J){K(J)}})}if(Z<2)throw new Error("Too few arguments provided");2===Z?(Re=Ie,Ie=Ze,Ze=Ve=void 0):3===Z&&(Ze.getContext&&typeof Re>"u"?(Re=Ve,Ve=void 0):(Re=Ve,Ve=Ie,Ie=Ze,Ze=void 0));try{const ue=M.create(Ie,Ve);Re(null,$e(ue,Ze,Ve))}catch(ue){Re(ue)}}At.create=M.create,At.toCanvas=De.bind(null,L.render),At.toDataURL=De.bind(null,L.renderToDataURL),At.toString=De.bind(null,function($e,Ze,Ie){return _e.render($e,Ie)})},801:jr=>{jr.exports=function(){return"function"==typeof Promise&&Promise.prototype&&Promise.prototype.then}},7225:(jr,At,Me)=>{const ze=Me(5909).getSymbolSize;At.getRowColCoords=function(L){if(1===L)return[];const _e=Math.floor(L/7)+2,De=ze(L),$e=145===De?26:2*Math.ceil((De-13)/(2*_e-2)),Ze=[De-7];for(let Ie=1;Ie<_e-1;Ie++)Ze[Ie]=Ze[Ie-1]-$e;return Ze.push(6),Ze.reverse()},At.getPositions=function(L){const _e=[],De=At.getRowColCoords(L),$e=De.length;for(let Ze=0;Ze<$e;Ze++)for(let Ie=0;Ie<$e;Ie++)0===Ze&&0===Ie||0===Ze&&Ie===$e-1||Ze===$e-1&&0===Ie||_e.push([De[Ze],De[Ie]]);return _e}},1022:(jr,At,Me)=>{const ze=Me(3041),M=["0","1","2","3","4","5","6","7","8","9","A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z"," ","$","%","*","+","-",".","/",":"];function L(_e){this.mode=ze.ALPHANUMERIC,this.data=_e}L.getBitsLength=function(De){return 11*Math.floor(De/2)+De%2*6},L.prototype.getLength=function(){return this.data.length},L.prototype.getBitsLength=function(){return L.getBitsLength(this.data.length)},L.prototype.write=function(De){let $e;for($e=0;$e+2<=this.data.length;$e+=2){let Ze=45*M.indexOf(this.data[$e]);Ze+=M.indexOf(this.data[$e+1]),De.put(Ze,11)}this.data.length%2&&De.put(M.indexOf(this.data[$e]),6)},jr.exports=L},1012:jr=>{function At(){this.buffer=[],this.length=0}At.prototype={get:function(Me){const ze=Math.floor(Me/8);return 1==(this.buffer[ze]>>>7-Me%8&1)},put:function(Me,ze){for(let M=0;M>>ze-M-1&1))},getLengthInBits:function(){return this.length},putBit:function(Me){const ze=Math.floor(this.length/8);this.buffer.length<=ze&&this.buffer.push(0),Me&&(this.buffer[ze]|=128>>>this.length%8),this.length++}},jr.exports=At},4373:jr=>{function At(Me){if(!Me||Me<1)throw new Error("BitMatrix size must be defined and greater than 0");this.size=Me,this.data=new Uint8Array(Me*Me),this.reservedBit=new Uint8Array(Me*Me)}At.prototype.set=function(Me,ze,M,L){const _e=Me*this.size+ze;this.data[_e]=M,L&&(this.reservedBit[_e]=!0)},At.prototype.get=function(Me,ze){return this.data[Me*this.size+ze]},At.prototype.xor=function(Me,ze,M){this.data[Me*this.size+ze]^=M},At.prototype.isReserved=function(Me,ze){return this.reservedBit[Me*this.size+ze]},jr.exports=At},4179:(jr,At,Me)=>{const ze=Me(5724),M=Me(3041);function L(_e){this.mode=M.BYTE,"string"==typeof _e&&(_e=ze(_e)),this.data=new Uint8Array(_e)}L.getBitsLength=function(De){return 8*De},L.prototype.getLength=function(){return this.data.length},L.prototype.getBitsLength=function(){return L.getBitsLength(this.data.length)},L.prototype.write=function(_e){for(let De=0,$e=this.data.length;De<$e;De++)_e.put(this.data[De],8)},jr.exports=L},8439:(jr,At,Me)=>{const ze=Me(5755),M=[1,1,1,1,1,1,1,1,1,1,2,2,1,2,2,4,1,2,4,4,2,4,4,4,2,4,6,5,2,4,6,6,2,5,8,8,4,5,8,8,4,5,8,11,4,8,10,11,4,9,12,16,4,9,16,16,6,10,12,18,6,10,17,16,6,11,16,19,6,13,18,21,7,14,21,25,8,16,20,25,8,17,23,25,9,17,23,34,9,18,25,30,10,20,27,32,12,21,29,35,12,23,34,37,12,25,34,40,13,26,35,42,14,28,38,45,15,29,40,48,16,31,43,51,17,33,45,54,18,35,48,57,19,37,51,60,19,38,53,63,20,40,56,66,21,43,59,70,22,45,62,74,24,47,65,77,25,49,68,81],L=[7,10,13,17,10,16,22,28,15,26,36,44,20,36,52,64,26,48,72,88,36,64,96,112,40,72,108,130,48,88,132,156,60,110,160,192,72,130,192,224,80,150,224,264,96,176,260,308,104,198,288,352,120,216,320,384,132,240,360,432,144,280,408,480,168,308,448,532,180,338,504,588,196,364,546,650,224,416,600,700,224,442,644,750,252,476,690,816,270,504,750,900,300,560,810,960,312,588,870,1050,336,644,952,1110,360,700,1020,1200,390,728,1050,1260,420,784,1140,1350,450,812,1200,1440,480,868,1290,1530,510,924,1350,1620,540,980,1440,1710,570,1036,1530,1800,570,1064,1590,1890,600,1120,1680,1980,630,1204,1770,2100,660,1260,1860,2220,720,1316,1950,2310,750,1372,2040,2430];At.getBlocksCount=function(De,$e){switch($e){case ze.L:return M[4*(De-1)+0];case ze.M:return M[4*(De-1)+1];case ze.Q:return M[4*(De-1)+2];case ze.H:return M[4*(De-1)+3];default:return}},At.getTotalCodewordsCount=function(De,$e){switch($e){case ze.L:return L[4*(De-1)+0];case ze.M:return L[4*(De-1)+1];case ze.Q:return L[4*(De-1)+2];case ze.H:return L[4*(De-1)+3];default:return}}},5755:(jr,At)=>{At.L={bit:1},At.M={bit:0},At.Q={bit:3},At.H={bit:2},At.isValid=function(M){return M&&typeof M.bit<"u"&&M.bit>=0&&M.bit<4},At.from=function(M,L){if(At.isValid(M))return M;try{return function Me(ze){if("string"!=typeof ze)throw new Error("Param is not a string");switch(ze.toLowerCase()){case"l":case"low":return At.L;case"m":case"medium":return At.M;case"q":case"quartile":return At.Q;case"h":case"high":return At.H;default:throw new Error("Unknown EC Level: "+ze)}}(M)}catch{return L}}},1910:(jr,At,Me)=>{const ze=Me(5909).getSymbolSize;At.getPositions=function(_e){const De=ze(_e);return[[0,0],[De-7,0],[0,De-7]]}},1846:(jr,At,Me)=>{const ze=Me(5909),_e=ze.getBCHDigit(1335);At.getEncodedBits=function($e,Ze){const Ie=$e.bit<<3|Ze;let Ve=Ie<<10;for(;ze.getBCHDigit(Ve)-_e>=0;)Ve^=1335<{const Me=new Uint8Array(512),ze=new Uint8Array(256);(function(){let L=1;for(let _e=0;_e<255;_e++)Me[_e]=L,ze[L]=_e,L<<=1,256&L&&(L^=285);for(let _e=255;_e<512;_e++)Me[_e]=Me[_e-255]})(),At.log=function(L){if(L<1)throw new Error("log("+L+")");return ze[L]},At.exp=function(L){return Me[L]},At.mul=function(L,_e){return 0===L||0===_e?0:Me[ze[L]+ze[_e]]}},6910:(jr,At,Me)=>{const ze=Me(3041),M=Me(5909);function L(_e){this.mode=ze.KANJI,this.data=_e}L.getBitsLength=function(De){return 13*De},L.prototype.getLength=function(){return this.data.length},L.prototype.getBitsLength=function(){return L.getBitsLength(this.data.length)},L.prototype.write=function(_e){let De;for(De=0;De=33088&&$e<=40956)$e-=33088;else{if(!($e>=57408&&$e<=60351))throw new Error("Invalid SJIS character: "+this.data[De]+"\nMake sure your charset is UTF-8");$e-=49472}$e=192*($e>>>8&255)+(255&$e),_e.put($e,13)}},jr.exports=L},3524:(jr,At)=>{At.Patterns={PATTERN000:0,PATTERN001:1,PATTERN010:2,PATTERN011:3,PATTERN100:4,PATTERN101:5,PATTERN110:6,PATTERN111:7};function ze(M,L,_e){switch(M){case At.Patterns.PATTERN000:return(L+_e)%2==0;case At.Patterns.PATTERN001:return L%2==0;case At.Patterns.PATTERN010:return _e%3==0;case At.Patterns.PATTERN011:return(L+_e)%3==0;case At.Patterns.PATTERN100:return(Math.floor(L/2)+Math.floor(_e/3))%2==0;case At.Patterns.PATTERN101:return L*_e%2+L*_e%3==0;case At.Patterns.PATTERN110:return(L*_e%2+L*_e%3)%2==0;case At.Patterns.PATTERN111:return(L*_e%3+(L+_e)%2)%2==0;default:throw new Error("bad maskPattern:"+M)}}At.isValid=function(L){return null!=L&&""!==L&&!isNaN(L)&&L>=0&&L<=7},At.from=function(L){return At.isValid(L)?parseInt(L,10):void 0},At.getPenaltyN1=function(L){const _e=L.size;let De=0,$e=0,Ze=0,Ie=null,Ve=null;for(let Re=0;Re<_e;Re++){$e=Ze=0,Ie=Ve=null;for(let ce=0;ce<_e;ce++){let Z=L.get(Re,ce);Z===Ie?$e++:($e>=5&&(De+=$e-5+3),Ie=Z,$e=1),Z=L.get(ce,Re),Z===Ve?Ze++:(Ze>=5&&(De+=Ze-5+3),Ve=Z,Ze=1)}$e>=5&&(De+=$e-5+3),Ze>=5&&(De+=Ze-5+3)}return De},At.getPenaltyN2=function(L){const _e=L.size;let De=0;for(let $e=0;$e<_e-1;$e++)for(let Ze=0;Ze<_e-1;Ze++){const Ie=L.get($e,Ze)+L.get($e,Ze+1)+L.get($e+1,Ze)+L.get($e+1,Ze+1);(4===Ie||0===Ie)&&De++}return 3*De},At.getPenaltyN3=function(L){const _e=L.size;let De=0,$e=0,Ze=0;for(let Ie=0;Ie<_e;Ie++){$e=Ze=0;for(let Ve=0;Ve<_e;Ve++)$e=$e<<1&2047|L.get(Ie,Ve),Ve>=10&&(1488===$e||93===$e)&&De++,Ze=Ze<<1&2047|L.get(Ve,Ie),Ve>=10&&(1488===Ze||93===Ze)&&De++}return 40*De},At.getPenaltyN4=function(L){let _e=0;const De=L.data.length;for(let Ze=0;Ze{const ze=Me(3426),M=Me(3959);At.NUMERIC={id:"Numeric",bit:1,ccBits:[10,12,14]},At.ALPHANUMERIC={id:"Alphanumeric",bit:2,ccBits:[9,11,13]},At.BYTE={id:"Byte",bit:4,ccBits:[8,16,16]},At.KANJI={id:"Kanji",bit:8,ccBits:[8,10,12]},At.MIXED={bit:-1},At.getCharCountIndicator=function(De,$e){if(!De.ccBits)throw new Error("Invalid mode: "+De);if(!ze.isValid($e))throw new Error("Invalid version: "+$e);return $e>=1&&$e<10?De.ccBits[0]:$e<27?De.ccBits[1]:De.ccBits[2]},At.getBestModeForData=function(De){return M.testNumeric(De)?At.NUMERIC:M.testAlphanumeric(De)?At.ALPHANUMERIC:M.testKanji(De)?At.KANJI:At.BYTE},At.toString=function(De){if(De&&De.id)return De.id;throw new Error("Invalid mode")},At.isValid=function(De){return De&&De.bit&&De.ccBits},At.from=function(De,$e){if(At.isValid(De))return De;try{return function L(_e){if("string"!=typeof _e)throw new Error("Param is not a string");switch(_e.toLowerCase()){case"numeric":return At.NUMERIC;case"alphanumeric":return At.ALPHANUMERIC;case"kanji":return At.KANJI;case"byte":return At.BYTE;default:throw new Error("Unknown mode: "+_e)}}(De)}catch{return $e}}},58:(jr,At,Me)=>{const ze=Me(3041);function M(L){this.mode=ze.NUMERIC,this.data=L.toString()}M.getBitsLength=function(_e){return 10*Math.floor(_e/3)+(_e%3?_e%3*3+1:0)},M.prototype.getLength=function(){return this.data.length},M.prototype.getBitsLength=function(){return M.getBitsLength(this.data.length)},M.prototype.write=function(_e){let De,$e,Ze;for(De=0;De+3<=this.data.length;De+=3)$e=this.data.substr(De,3),Ze=parseInt($e,10),_e.put(Ze,10);const Ie=this.data.length-De;Ie>0&&($e=this.data.substr(De),Ze=parseInt($e,10),_e.put(Ze,3*Ie+1))},jr.exports=M},6662:(jr,At,Me)=>{const ze=Me(3907);At.mul=function(L,_e){const De=new Uint8Array(L.length+_e.length-1);for(let $e=0;$e=0;){const $e=De[0];for(let Ie=0;Ie<_e.length;Ie++)De[Ie]^=ze.mul(_e[Ie],$e);let Ze=0;for(;Ze{const ze=Me(5909),M=Me(5755),L=Me(1012),_e=Me(4373),De=Me(7225),$e=Me(1910),Ze=Me(3524),Ie=Me(8439),Ve=Me(874),Re=Me(5423),ce=Me(1846),Z=Me(3041),Y=Me(9690);function P(_,k,F){const q=_.size,T=ce.getEncodedBits(k,F);let $,ee;for($=0;$<15;$++)ee=1==(T>>$&1),_.set($<6?$:$<8?$+1:q-15+$,8,ee,!0),_.set(8,$<8?q-$-1:$<9?15-$-1+1:15-$-1,ee,!0);_.set(q-8,8,1,!0)}function m(_,k,F,q){let T;if(Array.isArray(_))T=Y.fromArray(_);else{if("string"!=typeof _)throw new Error("Invalid data");{let he=k;if(!he){const de=Y.rawSplit(_);he=Re.getBestVersionForData(de,F)}T=Y.fromString(_,he||40)}}const $=Re.getBestVersionForData(T,F);if(!$)throw new Error("The amount of data is too big to be stored in a QR Code");if(k){if(k<$)throw new Error("\nThe chosen QR Code version cannot contain this amount of data.\nMinimum version required to store current data is: "+$+".\n")}else k=$;const ee=function A(_,k,F){const q=new L;F.forEach(function(be){q.put(be.mode.bit,4),q.put(be.getLength(),Z.getCharCountIndicator(be.mode,_)),be.write(q)});const ee=8*(ze.getSymbolTotalCodewords(_)-Ie.getTotalCodewordsCount(_,k));for(q.getLengthInBits()+4<=ee&&q.put(0,4);q.getLengthInBits()%8!=0;)q.putBit(0);const re=(ee-q.getLengthInBits())/8;for(let be=0;be=0&&re<=6&&(0===be||6===be)||be>=0&&be<=6&&(0===re||6===re)||re>=2&&re<=4&&be>=2&&be<=4,!0)}}(be,k),function K(_){const k=_.size;for(let F=8;F=7&&function R(_,k){const F=_.size,q=Re.getEncodedBits(k);let T,$,ee;for(let re=0;re<18;re++)T=Math.floor(re/3),$=re%3+F-8-3,ee=1==(q>>re&1),_.set(T,$,ee,!0),_.set($,T,ee,!0)}(be,k),function v(_,k){const F=_.size;let q=-1,T=F-1,$=7,ee=0;for(let re=F-1;re>0;re-=2)for(6===re&&re--;;){for(let be=0;be<2;be++)if(!_.isReserved(T,re-be)){let he=!1;ee>>$&1)),_.set(T,re-be,he),$--,-1===$&&(ee++,$=7)}if(T+=q,T<0||F<=T){T-=q,q=-q;break}}}(be,ee),isNaN(q)&&(q=Ze.getBestMask(be,P.bind(null,be,F))),Ze.applyMask(q,be),P(be,F,q),{modules:be,version:k,errorCorrectionLevel:F,maskPattern:q,segments:T}}At.create=function(k,F){if(typeof k>"u"||""===k)throw new Error("No input text");let T,$,q=M.M;return typeof F<"u"&&(q=M.from(F.errorCorrectionLevel,M.M),T=Re.from(F.version),$=Ze.from(F.maskPattern),F.toSJISFunc&&ze.setToSJISFunction(F.toSJISFunc)),m(k,T,q,$)}},874:(jr,At,Me)=>{const ze=Me(6662);function M(L){this.genPoly=void 0,this.degree=L,this.degree&&this.initialize(this.degree)}M.prototype.initialize=function(_e){this.degree=_e,this.genPoly=ze.generateECPolynomial(this.degree)},M.prototype.encode=function(_e){if(!this.genPoly)throw new Error("Encoder not initialized");const De=new Uint8Array(_e.length+this.degree);De.set(_e);const $e=ze.mod(De,this.genPoly),Ze=this.degree-$e.length;if(Ze>0){const Ie=new Uint8Array(this.degree);return Ie.set($e,Ze),Ie}return $e},jr.exports=M},3959:(jr,At)=>{let M="(?:[u3000-u303F]|[u3040-u309F]|[u30A0-u30FF]|[uFF00-uFFEF]|[u4E00-u9FAF]|[u2605-u2606]|[u2190-u2195]|u203B|[u2010u2015u2018u2019u2025u2026u201Cu201Du2225u2260]|[u0391-u0451]|[u00A7u00A8u00B1u00B4u00D7u00F7])+";M=M.replace(/u/g,"\\u");const L="(?:(?![A-Z0-9 $%*+\\-./:]|"+M+")(?:.|[\r\n]))+";At.KANJI=new RegExp(M,"g"),At.BYTE_KANJI=new RegExp("[^A-Z0-9 $%*+\\-./:]+","g"),At.BYTE=new RegExp(L,"g"),At.NUMERIC=new RegExp("[0-9]+","g"),At.ALPHANUMERIC=new RegExp("[A-Z $%*+\\-./:]+","g");const _e=new RegExp("^"+M+"$"),De=new RegExp("^[0-9]+$"),$e=new RegExp("^[A-Z0-9 $%*+\\-./:]+$");At.testKanji=function(Ie){return _e.test(Ie)},At.testNumeric=function(Ie){return De.test(Ie)},At.testAlphanumeric=function(Ie){return $e.test(Ie)}},9690:(jr,At,Me)=>{const ze=Me(3041),M=Me(58),L=Me(1022),_e=Me(4179),De=Me(6910),$e=Me(3959),Ze=Me(5909),Ie=Me(3940);function Ve(R){return unescape(encodeURIComponent(R)).length}function Re(R,P,v){const A=[];let w;for(;null!==(w=R.exec(v));)A.push({data:w[0],index:w.index,mode:P,length:w[0].length});return A}function ce(R){const P=Re($e.NUMERIC,ze.NUMERIC,R),v=Re($e.ALPHANUMERIC,ze.ALPHANUMERIC,R);let A,w;return Ze.isKanjiModeEnabled()?(A=Re($e.BYTE,ze.BYTE,R),w=Re($e.KANJI,ze.KANJI,R)):(A=Re($e.BYTE_KANJI,ze.BYTE,R),w=[]),P.concat(v,A,w).sort(function(_,k){return _.index-k.index}).map(function(_){return{data:_.data,mode:_.mode,length:_.length}})}function Z(R,P){switch(P){case ze.NUMERIC:return M.getBitsLength(R);case ze.ALPHANUMERIC:return L.getBitsLength(R);case ze.KANJI:return De.getBitsLength(R);case ze.BYTE:return _e.getBitsLength(R)}}function J(R,P){let v;const A=ze.getBestModeForData(R);if(v=ze.from(P,A),v!==ze.BYTE&&v.bit=0?P[P.length-1]:null;return A&&A.mode===v.mode?(P[P.length-1].data+=v.data,P):(P.push(v),P)},[])}(k))},At.rawSplit=function(P){return At.fromArray(ce(P,Ze.isKanjiModeEnabled()))}},5909:(jr,At)=>{let Me;const ze=[0,26,44,70,100,134,172,196,242,292,346,404,466,532,581,655,733,815,901,991,1085,1156,1258,1364,1474,1588,1706,1828,1921,2051,2185,2323,2465,2611,2761,2876,3034,3196,3362,3532,3706];At.getSymbolSize=function(L){if(!L)throw new Error('"version" cannot be null or undefined');if(L<1||L>40)throw new Error('"version" should be in range from 1 to 40');return 4*L+17},At.getSymbolTotalCodewords=function(L){return ze[L]},At.getBCHDigit=function(M){let L=0;for(;0!==M;)L++,M>>>=1;return L},At.setToSJISFunction=function(L){if("function"!=typeof L)throw new Error('"toSJISFunc" is not a valid function.');Me=L},At.isKanjiModeEnabled=function(){return typeof Me<"u"},At.toSJIS=function(L){return Me(L)}},3426:(jr,At)=>{At.isValid=function(ze){return!isNaN(ze)&&ze>=1&&ze<=40}},5423:(jr,At,Me)=>{const ze=Me(5909),M=Me(8439),L=Me(5755),_e=Me(3041),De=Me(3426),Ze=ze.getBCHDigit(7973);function Ve(Z,Y){return _e.getCharCountIndicator(Z,Y)+4}function Re(Z,Y){let ue=0;return Z.forEach(function(K){const J=Ve(K.mode,Y);ue+=J+K.getBitsLength()}),ue}At.from=function(Y,ue){return De.isValid(Y)?parseInt(Y,10):ue},At.getCapacity=function(Y,ue,K){if(!De.isValid(Y))throw new Error("Invalid QR Code version");typeof K>"u"&&(K=_e.BYTE);const P=8*(ze.getSymbolTotalCodewords(Y)-M.getTotalCodewordsCount(Y,ue));if(K===_e.MIXED)return P;const v=P-Ve(K,Y);switch(K){case _e.NUMERIC:return Math.floor(v/10*3);case _e.ALPHANUMERIC:return Math.floor(v/11*2);case _e.KANJI:return Math.floor(v/13);default:return Math.floor(v/8)}},At.getBestVersionForData=function(Y,ue){let K;const J=L.from(ue,L.M);if(Array.isArray(Y)){if(Y.length>1)return function ce(Z,Y){for(let ue=1;ue<=40;ue++)if(Re(Z,ue)<=At.getCapacity(ue,Y,_e.MIXED))return ue}(Y,J);if(0===Y.length)return 1;K=Y[0]}else K=Y;return function Ie(Z,Y,ue){for(let K=1;K<=40;K++)if(Y<=At.getCapacity(K,ue,Z))return K}(K.mode,K.getLength(),J)},At.getEncodedBits=function(Y){if(!De.isValid(Y)||Y<7)throw new Error("Invalid QR Code version");let ue=Y<<12;for(;ze.getBCHDigit(ue)-Ze>=0;)ue^=7973<{const ze=Me(1591);At.render=function(De,$e,Ze){let Ie=Ze,Ve=$e;typeof Ie>"u"&&(!$e||!$e.getContext)&&(Ie=$e,$e=void 0),$e||(Ve=function L(){try{return document.createElement("canvas")}catch{throw new Error("You need to specify a canvas element")}}()),Ie=ze.getOptions(Ie);const Re=ze.getImageWidth(De.modules.size,Ie),ce=Ve.getContext("2d"),Z=ce.createImageData(Re,Re);return ze.qrToImageData(Z.data,De,Ie),function M(_e,De,$e){_e.clearRect(0,0,De.width,De.height),De.style||(De.style={}),De.height=$e,De.width=$e,De.style.height=$e+"px",De.style.width=$e+"px"}(ce,Ve,Re),ce.putImageData(Z,0,0),Ve},At.renderToDataURL=function(De,$e,Ze){let Ie=Ze;return typeof Ie>"u"&&(!$e||!$e.getContext)&&(Ie=$e,$e=void 0),Ie||(Ie={}),At.render(De,$e,Ie).toDataURL(Ie.type||"image/png",(Ie.rendererOpts||{}).quality)}},6297:(jr,At,Me)=>{const ze=Me(1591);function M(De,$e){const Ze=De.a/255,Ie=$e+'="'+De.hex+'"';return Ze<1?Ie+" "+$e+'-opacity="'+Ze.toFixed(2).slice(1)+'"':Ie}function L(De,$e,Ze){let Ie=De+$e;return typeof Ze<"u"&&(Ie+=" "+Ze),Ie}At.render=function($e,Ze,Ie){const Ve=ze.getOptions(Ze),Re=$e.modules.size,ce=$e.modules.data,Z=Re+2*Ve.margin,Y=Ve.color.light.a?"':"",ue="0&&Y>0&&De[Z-1]||(Ie+=Re?L("M",Y+Ze,.5+ue+Ze):L("m",Ve,0),Ve=0,Re=!1),Y+1<$e&&De[Z+1]||(Ie+=L("h",ce),ce=0)):Ve++}return Ie}(ce,Re,Ve.margin)+'"/>',R=''+Y+ue+"\n";return"function"==typeof Ie&&Ie(null,R),R}},1591:(jr,At)=>{function Me(ze){if("number"==typeof ze&&(ze=ze.toString()),"string"!=typeof ze)throw new Error("Color should be defined as hex string");let M=ze.slice().replace("#","").split("");if(M.length<3||5===M.length||M.length>8)throw new Error("Invalid hex color: "+ze);(3===M.length||4===M.length)&&(M=Array.prototype.concat.apply([],M.map(function(_e){return[_e,_e]}))),6===M.length&&M.push("F","F");const L=parseInt(M.join(""),16);return{r:L>>24&255,g:L>>16&255,b:L>>8&255,a:255&L,hex:"#"+M.slice(0,6).join("")}}At.getOptions=function(M){M||(M={}),M.color||(M.color={});const _e=M.width&&M.width>=21?M.width:void 0;return{width:_e,scale:_e?4:M.scale||4,margin:typeof M.margin>"u"||null===M.margin||M.margin<0?4:M.margin,color:{dark:Me(M.color.dark||"#000000ff"),light:Me(M.color.light||"#ffffffff")},type:M.type,rendererOpts:M.rendererOpts||{}}},At.getScale=function(M,L){return L.width&&L.width>=M+2*L.margin?L.width/(M+2*L.margin):L.scale},At.getImageWidth=function(M,L){const _e=At.getScale(M,L);return Math.floor((M+2*L.margin)*_e)},At.qrToImageData=function(M,L,_e){const De=L.modules.size,$e=L.modules.data,Ze=At.getScale(De,_e),Ie=Math.floor((De+2*_e.margin)*Ze),Ve=_e.margin*Ze,Re=[_e.color.light,_e.color.dark];for(let ce=0;ce=Ve&&Z>=Ve&&ce{"use strict";function ze(L,_e,De,$e,Ze,Ie,Ve){try{var Re=L[Ie](Ve),ce=Re.value}catch(Z){return void De(Z)}Re.done?_e(ce):Promise.resolve(ce).then($e,Ze)}function M(L){return function(){var _e=this,De=arguments;return new Promise(function($e,Ze){var Ie=L.apply(_e,De);function Ve(ce){ze(Ie,$e,Ze,Ve,Re,"next",ce)}function Re(ce){ze(Ie,$e,Ze,Ve,Re,"throw",ce)}Ve(void 0)})}}Me.d(At,{Z:()=>M})},3675:(jr,At,Me)=>{"use strict";Me.d(At,{Bu:()=>Z,Cq:()=>Ve,Ee:()=>$e,Yi:()=>De,Yo:()=>_e,be:()=>ce,ln:()=>Re,pc:()=>Ze,q9:()=>Ie});var ze=Me(4788),M=Me(2253),L=Me(9542);function _e(ue,K){if((0,L.isNodeJs)()&&"bbox"!=K)return{x:0,y:0,width:parseInt(ue.attr("width")),height:parseInt(ue.attr("height"))};const J=v=>{let A=ue.style(v);return A&&(0,L.isStr)(A)?(A=parseFloat(A.replace("px","")),Number.isFinite(A)?Math.round(A):0):0};let R=ue.node().getBoundingClientRect();"bbox"==K&&parseFloat(R.width)>0&&(R=ue.node().getBBox());let P={x:0,y:0,width:parseInt(R.width),height:parseInt(R.height)};return void 0!==R.left?(P.x=parseInt(R.left),P.y=parseInt(R.top)):void 0!==R.x&&(P.x=parseInt(R.x),P.y=parseInt(R.y)),(void 0===K||"nopadding"==K)&&(P.width-=J("padding-left")+J("padding-right"),P.height-=J("padding-top")+J("padding-bottom")),P}function De(ue,K){for(;K&&!ue.empty()&&!ue.classed("root_canvas");){let J=ue.attr("class");J&&(J.indexOf("root_frame")>=0||J.indexOf("__root_pad_")>=0)&&(K.x+=ue.property("draw_x")||0,K.y+=ue.property("draw_y")||0),ue=(0,M.Ys)(ue.node().parentNode)}return K}function $e(ue,K,J){K||(K="6.4g");let R=(K=K.trim()).length;if(R<2)return J?[ue.toFixed(4),"6.4f"]:ue.toFixed(4);let v,P=K[R-1],A=(K=K.slice(0,R-1)).indexOf(".");A=A<0?4:parseInt(K.slice(A+1)),(!Number.isInteger(A)||A<=0)&&(A=4);let w=!1;if("e"==P||"E"==P)v=!0;else if("Q"==P)v=!0,w=!0;else if("f"==P||"F"==P)v=!1;else if("W"==P)v=!1,w=!0;else{if("g"==P||"G"==P){let _=$e(ue,K+"Q",!0),k=$e(ue,K+"W",!0);return _[0].length0&&(A=20,m=ue.toFixed(A));let _=0;for(;__&&k--,0!=k&&(A-=k,A<0?A=0:A>20&&(A=20),m=ue.toFixed(A))}return J?[m,"5."+A+"f"]:m}class Ze{constructor(K){this.opt=(0,L.isStr)(K)?K.toUpperCase().trim():"",this.part=""}empty(){return 0===this.opt.length||0==this.opt.replace(/[ ;_,]/g,"").length}remain(){return this.opt}check(K,J){let R=this.opt.indexOf(K);if(R<0)return!1;if(this.opt=this.opt.slice(0,R)+this.opt.slice(R+K.length),this.part="",!J)return!0;let P=R;for(;PR&&(this.part=this.opt.slice(R,P),this.opt=this.opt.slice(0,R)+this.opt.slice(P)),!0}partAsInt(K,J){let R=this.part.replace(/^\D+/g,"");return R=R?parseInt(R,10):Number.NaN,Number.isInteger(R)?R+(K||0):J||0}partAsFloat(K,J){let R=this.part.replace(/^\D+/g,"");return R=R?parseFloat(R):Number.NaN,Number.isFinite(R)?R+(K||0):J||0}}class Ie{constructor(K){void 0!==K&&this.seed(K)}seed(K){(K=Math.abs(K))>1e8?K=Math.abs(1e8*Math.sin(K)):K<1&&(K*=1e8),this.m_w=Math.round(K),this.m_z=987654321}random(){if(void 0===this.m_z)return Math.random();this.m_z=36969*(65535&this.m_z)+(this.m_z>>16)&4294967295,this.m_w=18e3*(65535&this.m_w)+(this.m_w>>16)&4294967295;let K=(this.m_z<<16)+this.m_w&4294967295;return K/=4294967296,K+.5}}function Ve(ue,K,J,R){const P=ue.indexOf("bezier")>=0;void 0===R&&(R=P?2:0),void 0===J&&(J=0);const v=(be,he)=>(he.gry-be.gry)/(he.grx-be.grx);let T,$,m={path:"",close:""},_=K[0],k=Math.max(_.gry,J+5),F=Math.round(_.grx),q=Math.round(_.gry),ee=K.length;const re=be=>{let he=Math.round(be);if(0==R||he===be)return he.toString();let de=be.toFixed(R);for(;"0"==de[de.length-1]&&de.lastIndexOf(".")=0)&&(be=>{let he,de,I,U,H=(be=>{let he=0,de=be.length-1,I=[],U=be[0],H=be[1],le=I[0]=v(U,H);for(;++he9&&(U=3*he/Math.sqrt(U),H[le]=U*de,H[le+1]=U*I));for(le=-1;++le<=D;)U=(be[Math.min(D,le+1)].grx-be[Math.max(0,le-1)].grx)/(6*(1+H[le]*H[le])),be[le].dgrx=U||0,be[le].dgry=H[le]*U||0})(K),P){m.path+=`C${re(_.grx+_.dgrx)},${re(_.gry+_.dgry)},`;for(let be=1;be1&&(m.path+="S"),m.path+=`${re(_.grx-_.dgrx)},${re(_.gry-_.dgry)},${re(_.grx)},${re(_.gry)}`,k=Math.max(k,he.gry)}}else if(ee<1e4){let be=0,he=0;const de=()=>{be&&(m.path+="h"+be,be=0),he&&(m.path+="v"+he,he=0)};for(let I=1;I0&&(m.close=`L${re(_.grx)},${re(k)}h${re(K[0].grx-_.grx)}Z`),m}function Re(ue){return(ue=(ue=ue.replace(/url\(\"\;\#(\w+)\"\;\)/g,"url(#$1)").replace(/ class=\"\w*\"/g,"").replace(/ pad=\"\w*\"/g,"").replace(/ title=\"\"/g,"").replace(/<\/g>/g,"").replace(/<\/g>/g,"")).replace(/<\/svg>/g,"")).indexOf("xlink:href")<0&&(ue=ue.replace(/ xmlns:xlink=\"http:\/\/www.w3.org\/1999\/xlink\"/g,"")),ue}class ce{constructor(K){this.divid=null,K&&this.setDom(K)}setDom(K){void 0!==K&&(this.divid=K,delete this._selected_main)}getDom(){return this.divid}selectDom(K){if(!this.divid)return(0,M.Ys)(null);let J=this._selected_main;if(!J){if((0,L.isStr)(this.divid)){let A=this.divid;"#"!=A[0]&&(A="#"+A),J=(0,M.Ys)(A),J.empty()||(this.divid=J.node())}else J=(0,M.Ys)(this.divid);this._selected_main=J}if(!J||J.empty()||"origin"===K)return J;let R=J.property("use_enlarge"),v="simple"==(J.property("layout")||"simple")?"":J.property("layout_selector");return v&&(J=J.select(v)),!K&&!J.empty()&&R&&(J=(0,M.Ys)("#jsroot_enlarge_div")),J}_accessTopPainter(K){let J=this.selectDom().node()?.firstChild;return J?(!0===K?J.painter=this:!1===K&&delete J.painter,J.painter):null}setTopPainter(){this._accessTopPainter(!0)}getTopPainter(){return this._accessTopPainter()}clearTopPainter(){this._accessTopPainter(!1)}cleanup(K){this.clearTopPainter();let J=this.selectDom("origin");!J.empty()&&!K&&J.html(""),this.divid=null,delete this._selected_main,(0,L.isFunc)(this._hpainter?.removePainter)&&this._hpainter.removePainter(this),delete this._hitemname,delete this._hdrawopt,delete this._hpainter}checkResize(){}testMainResize(K,J,R){let P=this.enlargeMain("state"),v=this.selectDom("origin"),A=this.selectDom();"on"!==P&&J&&J.width&&J.height&&v.style("width",J.width+"px").style("height",J.height+"px");let m=_e(v,!0),_=v.attr("can_resize"),k=!1;"height"==_&&R&&Math.abs(m.width*R-m.height)>.1*m.width&&(k=!0),(m.height<=5||m.width<=5)&&_&&"false"!==_&&(k=!0),k&&"on"!==P&&(m.width>5?(R=R||.66,v.style("height",Math.round(m.width*R)+"px")):"height"!==_&&v.style("width","200px").style("height","100px"));let F=_e(A),q=A.property("draw_height"),T=A.property("draw_width");return F.changed=!1,q&&T&&q>0&&T>0?(q!==F.height||T!==F.width)&&(K>1||F.width/T<.66||F.width/T>1.5||F.height/q<.66&&F.height/q>1.5)&&(F.changed=!0):F.changed=!0,F}enlargeMain(K,J){let R=this.selectDom(!0),P=this.selectDom("origin");if(R.empty()||!L.settings.CanEnlarge||!1===P.property("can_enlarge"))return!1;if(void 0===K||"verify"===K)return!0;let v=P.property("use_enlarge")?"on":"off";if("state"===K)return v;"toggle"===K&&(K="off"===v);let A=(0,M.Ys)("#jsroot_enlarge_div");if(!0===K&&"on"!==v){if(!A.empty())return!1;A=(0,M.Ys)(document.body).append("div").attr("id","jsroot_enlarge_div").attr("style","position: fixed; margin: 0px; border: 0px; padding: 0px; left: 1px; right: 1px; top: 1px; bottom: 1px; background: white; opacity: 0.95; z-index: 100; overflow: hidden;");let w=_e(R),m=_e(A);if((m.width<=w.width||m.height<=w.height)&&m.width*m.height0;)A.node().appendChild(R.node().firstChild);return P.property("use_enlarge",!0),!0}if(!1===K&&"off"!==v){for(;A.node()&&A.node().childNodes.length>0;)R.node().appendChild(A.node().firstChild);return A.remove(),P.property("use_enlarge",!1),!0}return!1}setItemName(K,J,R){(0,L.isStr)(K)?this._hitemname=K:delete this._hitemname,(0,L.isStr)(J)&&(this._hdrawopt=J),this._hpainter=R}getItemName(){return this._hitemname??null}getItemDrawOpt(){return this._hdrawopt??""}}function Z(){return Y.apply(this,arguments)}function Y(){return(Y=(0,ze.Z)(function*(){return Me.e(993).then(Me.t.bind(Me,5993,19)).then(ue=>(L.internals.nodejs_window||(L.internals.nodejs_window=new ue.JSDOM("hello").window,L.internals.nodejs_document=L.internals.nodejs_window.document,L.internals.nodejs_body=(0,M.Ys)(L.internals.nodejs_document).select("body")),{JSDOM:ue.JSDOM,doc:L.internals.nodejs_document,body:L.internals.nodejs_body}))})).apply(this,arguments)}},4953:(jr,At,Me)=>{"use strict";Me.d(At,{G:()=>L});const ze=["Arial","iTimes New Roman","bTimes New Roman","biTimes New Roman","Arial","oArial","bArial","boArial","Courier New","oCourier New","bCourier New","boCourier New","Symbol","Times New Roman","Wingdings","iSymbol","Verdana","iVerdana","bVerdana","biVerdana"],M=[.5778,.5314,.5809,.554,.5778,.5783,.6034,.603,.6003,.6004,.6003,.6005,.5521,.5521,.5664,.5314,.5664,.5495,.5748,.5578];class L{constructor(De,$e,Ze,Ie,Ve,Re){if(this.name="Arial",this.style=null,this.weight=null,Ze&&$e<1&&($e*=Ze,this.scaled=!0),this.size=Math.round($e||11),this.scale=Ze,null!==De){let ce=Math.floor(De/10),Z=ze[ce]||"Arial";for(;Z;){if("b"===Z[0])this.weight="bold";else if("i"===Z[0])this.style="italic";else{if("o"!==Z[0])break;this.style="oblique"}Z=Z.slice(1)}this.name=Z,this.aver_width=M[ce]||.55}else this.name=Ie,this.style=Ve||null,this.weight=Re||null,this.aver_width=this.weight?.58:.55;"Symbol"==this.name||"Wingdings"==this.name?(this.isSymbol=this.name,this.name="Times New Roman"):this.isSymbol="",this.func=this.setFont.bind(this)}setFont(De,$e){De.attr("font-family",this.name),"without-size"!=$e&&De.attr("font-size",this.size).attr("xml:space","preserve"),De.attr("font-weight",this.weight||null),De.attr("font-style",this.style||null)}setSize(De){this.size=Math.round(De)}setColor(De){this.color=De}setAlign(De){this.align=De}setAngle(De){this.angle=De}roundAngle(De,$e){this.angle=parseInt(this.angle||0),Number.isInteger(this.angle)||(this.angle=0),this.angle=Math.round(this.angle/De)*De+($e||0),this.angle<0?this.angle+=360:this.angle>=360&&(this.angle-=360)}clearFont(De){De.attr("font-family",null).attr("font-size",null).attr("xml:space",null).attr("font-weight",null).attr("font-style",null)}isMonospace(){let De=this.name.toLowerCase();return 0==De.indexOf("courier")||"monospace"==De||"monaco"==De}getFontHtml(){let De=Math.round(this.size)+"pt "+this.name;return this.weight&&(De+=" "+this.weight),this.style&&(De+=" "+this.style),De}getFontName(){return this.isSymbol||this.name||"none"}}},6458:(jr,At,Me)=>{"use strict";Me.d(At,{Eq:()=>A,FG:()=>Y,O5:()=>R,SI:()=>v,SO:()=>ue,VE:()=>Z,VO:()=>w,X8:()=>P,tK:()=>ce});var ze=Me(4788),M=Me(2253),L=Me(9542),_e=Me(48),De=Me(3675),$e=Me(6417),Ze=Me(3627),Ie=Me(6367),Ve=Me(4953),Re=Me(3038);class ce extends De.be{constructor(_,k,F){super(_),this.pad_name=_?this.selectCurrentPad():"",this.assignObject(k),(0,L.isStr)(F)&&(this.options={original:F})}assignObject(_){(0,L.isObject)(_)?this.draw_object=_:delete this.draw_object}setPadName(_){this.pad_name=(0,L.isStr)(_)?_:this.selectCurrentPad()}getPadName(){return this.pad_name||""}assignSnapId(_){this.snapid=_}cleanup(){this.removeG();let _=!0;if(this.isMainPainter()){let k=this.getPadPainter();(!k||!1===k.normal_canvas)&&(_=!1)}delete this.pad_name,delete this._main_painter,this.draw_object=null,delete this.snapid,delete this.fillatt,delete this.lineatt,delete this.markeratt,delete this.bins,delete this.root_colors,delete this.options,delete this.options_store,delete this.rstyle,delete this.csstype,super.cleanup(_)}getObject(){return this.draw_object}getClassName(){return this.getObject()?._typename||""}matchObjectType(_){return!(!_||!this.draw_object)&&((0,L.isStr)(_)?this.draw_object._typename===_:_._typename?this.draw_object._typename===_._typename:this.draw_object._typename.match(_))}setItemName(_,k,F){if(super.setItemName(_,k,F),this.no_default_title||!_)return;let q=this.getCanvSvg();q.empty()?this.selectDom().attr("title",_):q.select("title").text(_);let T=this.getCanvPainter();T&&(T===this||this.isMainPainter()&&T===this.getPadPainter())&&T.drawItemNameOnCanvas(_)}storeDrawOpt(_){if(!this.options)return;_||(_="");let k=_.indexOf(";;");k>=0&&(_=_.slice(0,k)),this.options.original=_,this.options_store=Object.assign({},this.options)}getDrawOpt(){if(!this.options)return"";if((0,L.isFunc)(this.options.asString)){let _=!1,k=this.getPadPainter();if(!this.options_store||k?._interactively_changed)_=!0;else for(let F in this.options)this.options[F]!==this.options_store[F]&&(_=!0);if(_)return this.options.asString(this.isMainPainter(),k?.getRootPad())}return this.options.original||""}getSupportedDrawOptions(){let _=this.getPadPainter(),k=this.getObject();return k?._typename&&_?.getObjectDrawSettings?_.getObjectDrawSettings("ROOT."+k._typename,"nosame")?.opts:[]}redrawObject(_,k){if(!this.updateObject(_,k))return!1;let F=document.body.style.cursor;document.body.style.cursor="wait";let q=this.redrawPad();return document.body.style.cursor=F,q||!0}updateObject(_){return!!this.matchObjectType(_)&&(Object.assign(this.getObject(),_),!0)}getObjectHint(){let _=this.getItemName(),k=this.getObject();return _||(_=k&&k.fName?k.fName:""),_||(_=this.getClassName()),_.length>20&&(_=_.slice(0,17)+"..."),_}getColor(_){return this.root_colors||(this.root_colors=this.getCanvPainter()?.root_colors||(0,Re._V)()),this.root_colors[_]}addColor(_){this.root_colors||(this.root_colors=this.getCanvPainter()?.root_colors||(0,Re._V)());let k=this.root_colors.indexOf(_);return k>=0?k:(this.root_colors.push(_),this.root_colors.length-1)}isTooltipAllowed(){return!!(this.getCanvPainter()||this).tooltip_allowed}setTooltipAllowed(_){void 0===_&&(_=!0);let k=this.getCanvPainter()||this;k.tooltip_allowed="toggle"==_?!k.tooltip_allowed:_}checkResize(_){let k=this.getCanvPainter();return!!k&&(k.checkCanvasResize(_),!0)}removeG(){this.draw_g&&(this.draw_g.remove(),delete this.draw_g)}getG(){return this.draw_g}createG(_){let k;if(_){let F=this.getFrameSvg();if(F.empty())return console.error("Not found frame to create g element inside"),F;(0,L.isStr)(_)||(_="main_layer"),k=F.select("."+_)}else k=this.getLayerSvg("primitives_layer");return this.draw_g&&this.draw_g.node().parentNode!==k.node()&&(console.log("g element changes its layer!!"),this.removeG()),this.draw_g?this.draw_g.selectAll("*").remove():(this.draw_g=k.append("svg:g"),_||k.selectChildren(".most_upper_primitives").raise()),this.draw_object&&(this.draw_g.attr("objname",(this.draw_object.fName||"name").replace(/[^\w]/g,"_")),this.draw_g.attr("objtype",(this.draw_object._typename||"type").replace(/[^\w]/g,"_"))),this.draw_g.property("in_frame",!!_),this.draw_g}getCanvSvg(){return this.selectDom().select(".root_canvas")}getPadSvg(_){void 0===_&&(_=this.pad_name);let k=this.getCanvSvg();if(!_||k.empty())return k;let F=k.property("pad_painter");return F&&F.pads_cache&&F.pads_cache[_]?(0,M.Ys)(F.pads_cache[_]):(k=k.select(".primitives_layer .__root_pad_"+_),F&&(F.pads_cache||(F.pads_cache={}),F.pads_cache[_]=k.node()),k)}getLayerSvg(_,k){let F=this.getPadSvg(k);if(F.empty())return F;0==_.indexOf("prim#")&&(F=F.select(".primitives_layer"),_=_.slice(5));let q=F.node().firstChild;for(;q;){let T=(0,M.Ys)(q);if(T.classed(_))return T;q=q.nextSibling}return(0,M.Ys)(null)}selectCurrentPad(_){let k=this.getCanvSvg();if(k.empty())return"";let F=k.property("current_pad");return void 0!==_&&k.property("current_pad",_),F}getPadPainter(_){let k=this.getPadSvg((0,L.isStr)(_)?_:void 0);return k.empty()?null:k.property("pad_painter")}getCanvPainter(){let _=this.getCanvSvg();return _.empty()?null:_.property("pad_painter")}getAxisToSvgFunc(_,k){let F={isndc:_,nornd:k},q=this.draw_g&&this.draw_g.property("in_frame");if(q&&(F.main=this.getFramePainter()),F.main?.grx&&F.main?.gry)k?(F.x=function(T){return this.main.grx(T)},F.y=function(T){return this.main.gry(T)}):(F.x=function(T){return Math.round(this.main.grx(T))},F.y=function(T){return Math.round(this.main.gry(T))});else if(q)console.error(`Problem to create functor for ${this.getClassName()}`),F.x=()=>0,F.y=()=>0;else{let T=this.getPadPainter();_||(F.pad=T?.getRootPad(!0)),F.padw=T?.getPadWidth()??10,F.x=function($){return this.pad&&(this.pad.fLogx&&($=$>0?Math.log10($):this.pad.fUxmin),$=($-this.pad.fX1)/(this.pad.fX2-this.pad.fX1)),$*=this.padw,this.nornd?$:Math.round($)},F.padh=T?.getPadHeight()??10,F.y=function($){return this.pad&&(this.pad.fLogy&&($=$>0?Math.log10($):this.pad.fUymin),$=($-this.pad.fY1)/(this.pad.fY2-this.pad.fY1)),$=(1-$)*this.padh,this.nornd?$:Math.round($)}}return F}axisToSvg(_,k,F,q){return this.getAxisToSvgFunc(F,q)[_](k)}svgToAxis(_,k,F){if(this.draw_g&&this.draw_g.property("in_frame"))return this.getFramePainter()?.revertAxis(_,k)??0;let T=this.getPadPainter(),$=T?"y"==_?1-k/T.getPadHeight():k/T.getPadWidth():0,ee=F||!T?null:T.getRootPad(!0);return ee&&("y"==_?($=ee.fY1+$*(ee.fY2-ee.fY1),ee.fLogy&&($=Math.pow(10,$))):($=ee.fX1+$*(ee.fX2-ee.fX1),ee.fLogx&&($=Math.pow(10,$)))),$}getFrameSvg(_){let k=this.getLayerSvg("primitives_layer",_);if(k.empty())return k;let F=k.node().firstChild;for(;F;){let q=(0,M.Ys)(F);if(q.classed("root_frame"))return q;F=F.nextSibling}return(0,M.Ys)(null)}getFramePainter(){return this.getPadPainter()?.getFramePainter()}getMainPainter(_){let k=this._main_painter;if(!k){let F=this.getPadPainter();k=F?F.getMainPainter():this.getTopPainter(),k||(k=null),_||(this._main_painter=k)}return k}isMainPainter(){return this===this.getMainPainter()}setAsMainPainter(_){let k=this.getPadPainter();k?k.setMainPainter(this,_):this.setTopPainter()}addToPadPrimitives(_){void 0!==_&&this.setPadName(_);let k=this.getPadPainter(_);return!(!k||k===this||(k.painters.indexOf(this)<0&&k.painters.push(this),!this.rstyle&&k.next_rstyle&&(this.rstyle=k.next_rstyle),0))}removeFromPadPrimitives(){let _=this.getPadPainter();if(!_||_===this)return!1;let k=_.painters.indexOf(this);return k>=0&&_.painters.splice(k,1),!0}createAttMarker(_){(0,L.isObject)(_)?void 0!==_.fMarkerColor&&void 0!==_.fMarkerStyle&&void 0!==_.fMarkerSize&&(_={attr:_,std:!1}):_={std:!0},void 0===_.std&&(_.std=!0),void 0===_.painter&&(_.painter=this);let k=_.std?this.markeratt:null;return k?(!k.changed||_.force)&&k.setArgs(_):k=new $e.M(_),_.std&&(this.markeratt=k),k}createAttLine(_){(0,L.isObject)(_)?void 0!==_.fLineColor&&void 0!==_.fLineStyle&&void 0!==_.fLineWidth&&(_={attr:_,std:!1}):_={std:!0},void 0===_.std&&(_.std=!0),void 0===_.painter&&(_.painter=this);let k=_.std?this.lineatt:null;return k?(!k.changed||_.force)&&k.setArgs(_):k=new Ie.rE(_),_.std&&(this.lineatt=k),k}createAttFill(_){(0,L.isObject)(_)?_._typename&&void 0!==_.fFillColor&&void 0!==_.fFillStyle&&(_={attr:_,std:!1}):_={std:!0},void 0===_.std&&(_.std=!0);let k=_.std?this.fillatt:null;return _.svg||(_.svg=this.getCanvSvg()),void 0===_.painter&&(_.painter=this),k?(!k.changed||_.force)&&k.setArgs(_):k=new Ze.Y(_),_.std&&(this.fillatt=k),k}forEachPainter(_,k){let F=this.getPadPainter();if(F)F.forEachPainterInPad(_,k);else{let q=this.getTopPainter();q&&"pads"!==k&&_(q)}}interactiveRedraw(_,k,F){var q=this;return(0,ze.Z)(function*(){let T,$;return(0,L.isStr)(k)&&0!=k.indexOf("exec:")&&(T=k),"pad"==_?$=q.redrawPad(T):!1!==_&&($=q.redraw(T)),(0,L.getPromise)($).then(()=>{let ee=q.getCanvPainter();return(0,L.isFunc)(ee?.producePadEvent)&&ee.producePadEvent("redraw",q.getPadPainter(),q,null,F),(0,L.isFunc)(ee?.processChanges)&&ee.processChanges(k,q,F),q})})()}redrawPad(_){var k=this;return(0,ze.Z)(function*(){let F=k.getPadPainter();return!!F&&F.redrawPad(_)})()}executeMenuCommand(_){return"Inspect"==_.fName&&this.showInspector()}submitCanvExec(_,k){if(!_||!(0,L.isStr)(_))return;let F=this.getCanvPainter();(0,L.isFunc)(F?.submitExec)&&F.submitExec(this,_,k)}deleteAttr(){delete this.lineatt,delete this.fillatt,delete this.markeratt}showInspector(){return!1}fillContextMenu(_){let k=this.getObjectHint();return this.getObject()&&"_typename"in this.getObject()&&(k=this.getObject()._typename+"::"+k),_.add("header:"+k),_.addAttributesMenu(this),_.size()>0&&this.showInspector("check")&&_.add("Inspect",this.showInspector),_.size()>0}showObjectStatus(_,k,F,q){let T=this.getCanvPainter();if(T&&!(0,L.isFunc)(T.showCanvasStatus)&&(T=null),!T&&!(0,L.isFunc)(L.internals.showStatus)||"on"===this.enlargeMain("state"))return!1;if(void 0===_&&void 0===k){let $=this.getObject();if(!$)return;_=this.getItemName()||$.fName,k=$.fTitle||$._typename,F=$._typename}T?T.showCanvasStatus(_,k,F,q):L.internals.showStatus(_,k,F,q)}redraw(){}startTextDrawing(_,k,F,q){if(F||(F=this.draw_g),!F||F.empty())return;let T="font"===k?_:new Ve.G(_,k),$=this.getPadPainter();F.call(T.func),F.property("draw_text_completed",!1).property("all_args",[]).property("text_font",T).property("text_factor",0).property("max_text_width",0).property("max_font_size",q).property("_fast_drawing",$?._fast_drawing||!1),F.property("_fast_drawing")&&F.property("_font_too_small",q&&q<5||T.size<4)}scaleTextDrawing(_,k){k||(k=this.draw_g),k&&!k.empty()&&_&&_>k.property("text_factor")&&k.property("text_factor",_)}_checkAllTextDrawing(_,k,F){let q=_.property("all_args"),T=0;if(q||(console.log("Text drawing is finished - why calling _checkAllTextDrawing?????"),q=[]),q.forEach(U=>{U.ready||T++}),T>0)return void((0,L.isFunc)(k)&&(_.node().textResolveFunc=k,_.node().try_optimize=F));_.property("all_args",null);let $=_.property("text_factor"),ee=_.property("text_font"),re=_.property("max_font_size"),be=ee.size,he=!1,de=!0;$>0&&($<.9||$>1)&&(ee.size=Math.max(1,Math.floor(ee.size/$))),re&&ee.size>re&&(ee.size=re),ee.size!=be&&(_.call(ee.func),be=ee.size),q.forEach(U=>{if(U.mj_node&&U.applyAttributesToMathJax){let H=U.mj_node.select("svg");U.applyAttributesToMathJax(this,U.mj_node,H,U,be,$),delete U.mj_node,de=!1}else U.txt_g&&(de=!1)}),k||(k=_.node().textResolveFunc,F=_.node().try_optimize,delete _.node().textResolveFunc,delete _.node().try_optimize);let I=F&&de?[]:null;q.forEach(U=>{let H,le,D=1;if(U.txt_node)H=U.txt_node,delete U.txt_node,le=!0,null!==I&&I.push(H);else{if(!U.txt_g)return;H=U.txt_g,delete U.txt_g,le=!1}if(H.attr("visibility",null),he=!0,U.width&&("middle"==U.align[0]?U.x+=U.width/2:"end"==U.align[0]&&(U.x+=U.width)),U.height&&(0===U.align[1].indexOf("bottom")?U.y+=U.height:"middle"==U.align[1]&&(U.y+=U.height/2)),U.dx=U.dy=0,le)(0,L.isNodeJs)()?U.scale&&$>0&&(U.box.width*=1/$,U.box.height*=1/$):!U.plain&&!U.fast&&(U.box=(0,De.Yo)(H,"bbox")),U.plain?(H.attr("text-anchor",U.align[0]),"top"==U.align[1]?H.attr("dy",".8em"):"middle"==U.align[1]&&((0,L.isNodeJs)()?H.attr("dy",".4em"):H.attr("dominant-baseline","middle"))):(H.attr("text-anchor","start"),U.dx=("middle"==U.align[0]?-.5:"end"==U.align[0]?-1:0)*U.box.width,U.dy=("top"==U.align[1]?U.top_shift||1:"middle"==U.align[1]?U.mid_shift||.5:0)*U.box.height);else if(U.text_rect){let ge=U.text_rect;D=$>0&&Math.abs(1-$)>.01?1/$:1,U.dx=("middle"==U.align[0]?-.5:"end"==U.align[0]?-1:0)*ge.width*D,"top"==U.align[1]?U.dy=-ge.y1*D:"bottom"==U.align[1]?U.dy=-ge.y2*D:"middle"==U.align[1]&&(U.dy=-.5*(ge.y1+ge.y2)*D)}else console.error("text rect not calcualted - please check code");U.rotate||(U.x+=U.dx,U.y+=U.dy,U.dx=U.dy=0);let oe="";U.y?oe=`translate(${Math.round(U.x)},${Math.round(U.y)})`:U.x&&(oe=`translate(${Math.round(U.x)})`),U.rotate&&(oe+=` rotate(${Math.round(U.rotate)})`),1!==D&&(oe+=` scale(${D.toFixed(3)})`),U.dy?oe+=` translate(${Math.round(U.dx)},${Math.round(U.dy)})`:U.dx&&(oe+=` translate(${Math.round(U.dx)})`),oe&&H.attr("transform",oe)}),he||ee.clearFont(_),null!==I&&I.length>1&&["fill","text-anchor"].forEach(U=>{let H=I[0].attr(U);I.forEach(le=>{let D=le.attr(U);(!D||D!==H)&&(H=void 0)}),H&&(_.attr(U,H),I.forEach(le=>{le.attr(U,null)}))}),k&&k(this)}_postprocessDrawText(_,k){return _.box=(0,L.isNodeJs)()||L.settings.ApproxTextSize||_.fast?_.text_rect||{height:1.2*_.font_size,width:_.text.length*_.font_size*_.font.aver_width}:(0,De.Yo)(k,"bbox"),k.attr("visibility","hidden"),_.box.width>_.draw_g.property("max_text_width")&&_.draw_g.property("max_text_width",_.box.width),_.scale&&this.scaleTextDrawing(Math.max(1.05*_.box.width/_.width,1*_.box.height/_.height),_.draw_g),_.result_width=_.box.width,_.result_height=_.box.height,(0,L.isFunc)(_.post_process)&&_.post_process(this),_.box.width}drawText(_){if(_.text||(_.text=""),_.draw_g=_.draw_g||this.draw_g,!_.draw_g||_.draw_g.empty())return;let k=_.draw_g.property("text_font");_.font=k,k&&(k.color&&!_.color&&(_.color=k.color),k.align&&!_.align&&(_.align=k.align),k.angle&&!_.rotate&&(_.rotate=k.angle));let F=["start","middle"];if((0,L.isStr)(_.align)?(F=_.align.split(";"),1==F.length&&F.push("middle")):"number"==typeof _.align?(_.align/10>=3?F[0]="end":_.align/10>=2&&(F[0]="middle"),_.align%10==0?F[1]="bottom":_.align%10==1?F[1]="bottom-base":_.align%10==3&&(F[1]="top")):(0,L.isObject)(_.align)&&2==_.align.length&&(F=_.align),void 0===_.latex&&(_.latex=1),_.align=F,_.x=_.x||0,_.y=_.y||0,_.scale=_.width&&_.height&&!_.font_size,_.width=_.width||0,_.height=_.height||0,_.draw_g.property("_fast_drawing"))if(_.scale){if(_.height<4)return 0}else if(_.font_size){if(_.font_size<4)return 0}else if(_.draw_g.property("_font_too_small"))return 0;_.draw_g.property("all_args").push(_),_.ready=!1;let q=2==_.latex;return 1===_.latex&&(q=L.settings.Latex==L.constants.Latex.AlwaysMathJax||L.settings.Latex==L.constants.Latex.MathJax&&_.text.match(/[#{\\]/g)||_.text.match(/[\\]/g)),!q||_.nomathjax?(_.txt_node=_.draw_g.append("svg:text"),_.color&&_.txt_node.attr("fill",_.color),_.font_size?_.txt_node.attr("font-size",_.font_size):_.font_size=k.size,_.plain=!_.latex||L.settings.Latex==L.constants.Latex.Off||L.settings.Latex==L.constants.Latex.Symbols,_.simple_latex=_.latex&&L.settings.Latex==L.constants.Latex.Symbols,!_.plain||_.simple_latex||_.font&&_.font.isSymbol?(_.simple_latex||(0,_e.$1)(_.text)||_.plain?(_.simple_latex=!0,(0,_e.TT)(this,_.txt_node,_)):(_.txt_node.remove(),delete _.txt_node,_.txt_g=_.draw_g.append("svg:g"),(0,_e.ug)(this,_.txt_g,_)),_.ready=!0,this._postprocessDrawText(_,_.txt_g||_.txt_node),_.draw_g.property("draw_text_completed")&&this._checkAllTextDrawing(_.draw_g),0):(_.plain=!0,_.txt_node.text(_.text),_.ready=!0,this._postprocessDrawText(_,_.txt_node))):(_.mj_node=_.draw_g.append("svg:g").attr("visibility","hidden"),(0,_e.hs)(this,_.mj_node,_).then(()=>{_.ready=!0,_.draw_g.property("draw_text_completed")&&this._checkAllTextDrawing(_.draw_g)}),0)}finishTextDrawing(_,k){var F=this;return(0,ze.Z)(function*(){return _||(_=F.draw_g),!(!_||_.empty())&&(_.property("draw_text_completed",!0),new Promise(q=>{F._checkAllTextDrawing(_,q,k)}))})()}configureUserContextMenu(_){_&&(0,L.isFunc)(_)?this._userContextMenuFunc=_:delete this._userContextMenuFunc}fillObjectExecMenu(_,k){var F=this;return(0,ze.Z)(function*(){if(F._userContextMenuFunc)return F._userContextMenuFunc(_,k);let q=F.getCanvPainter();if(!F.snapid||!q||q?._readonly||!q?._websocket)return _;function T(re){let be=this.exec_painter||this,he=be.getCanvPainter(),de=be.args_menu_items[parseInt(re)];if(de&&de.fName){if("Show:Editor"==de.fExec)return void((0,L.isFunc)(he?.activateGed)&&he.activateGed(be));if((!(0,L.isFunc)(he?.executeObjectMethod)||!he.executeObjectMethod(be,de,be.args_menu_id))&&!be.executeMenuCommand(de)&&be.args_menu_id){if(!de.fArgs)return he?.v7canvas?he.submitExec(be,de.fExec,k):be.submitCanvExec(de.fExec,be.args_menu_id);de.fClassName=be.getClassName(),(be.args_menu_id.indexOf("#x")>0||be.args_menu_id.indexOf("#y")>0||be.args_menu_id.indexOf("#z")>0)&&(de.fClassName=L.clTAxis),_.showMethodArgsDialog(de).then(I=>{if(!I||be.executeMenuCommand(de,I))return;let U=de.fExec.slice(0,de.fExec.length-1)+I+")";he?.v7canvas?he.submitExec(be,U,k):he&&he.sendWebsocket(`OBJEXEC:${be.args_menu_id}:${U}`)})}}}const $=(re,be,he,de)=>{if(F._got_menu)return;F._got_menu=!0,de&&be!==de.fId&&console.error(`missmatch between request ${be} and reply ${de.fId} identifiers`);let I=de?de.fItems:null;if(I&&I.length){let U;re.size()>0&&re.add("separator"),F.args_menu_items=I,F.args_menu_id=de.fId;for(let H=0;H0?U.slice(D+2):U;re.add("sub:"+oe.replace(/[<>]/g,"_"))}void 0===le.fChecked||le.fChecked<0?re.add(le.fName,H,T):re.addchk(le.fChecked,le.fName,H,T)}U&&re.add("endsub:")}he(re)};let ee=F.snapid;return k&&(ee+="#"+k),F._got_menu=!1,_.painter&&(_.painter.exec_painter=_.painter!==F?F:void 0),new Promise(re=>{setTimeout(()=>$(_,ee,re),2e3),q.submitMenuRequest(F,k,ee).then(be=>$(_,ee,re,be))})})()}configureUserTooltipHandler(_,k){_&&(0,L.isFunc)(_)?(this._user_tooltip_handler=_,this._user_tooltip_timeout=k||100):(delete this._user_tooltip_handler,delete this._user_tooltip_timeout)}configureUserClickHandler(_){let k=this.getFramePainter();(0,L.isFunc)(k?.configureUserClickHandler)&&k.configureUserClickHandler(_)}configureUserDblclickHandler(_){let k=this.getFramePainter();(0,L.isFunc)(k?.configureUserDblclickHandler)&&k.configureUserDblclickHandler(_)}hasUserTooltip(){return(0,L.isFunc)(this._user_tooltip_handler)}provideUserTooltip(_){if(!this.hasUserTooltip())return;if(this._user_tooltip_timeout<=0)return this._user_tooltip_handler(_);if(this._user_tooltip_handle&&(clearTimeout(this._user_tooltip_handle),delete this._user_tooltip_handle),!_)return this._user_tooltip_handler(_);let k=_;this._user_tooltip_handle=setTimeout(()=>{delete this._user_tooltip_handle,this._user_tooltip_handler&&this._user_tooltip_handler(k)},this._user_tooltip_timeout)}provideSpecialDrawArea(_){var k=this;return(0,ze.Z)(function*(){return _==k._special_draw_area||k.getCanvPainter().toggleProjection(_).then(()=>(k._special_draw_area=_,!0))})()}drawInSpecialArea(_,k){var F=this;return(0,ze.Z)(function*(){let q=F.getCanvPainter();return!(!F._special_draw_area||!(0,L.isFunc)(q?.drawProjection))&&q.drawProjection(F._special_draw_area,_,k)})()}getToolTip(_){if(void 0===_?.clientX||void 0===_?.clientY)return null;let k=this.getFrameSvg();if(k.empty())return null;let F=k.select(".main_layer");if(F.empty())return null;let q=(0,M.cx)(_,F.node()),T={touch:!1,x:q[0],y:q[1]};if((0,L.isFunc)(this.extractToolTip))return this.extractToolTip(T);T.disabled=!0;let $=(0,L.isFunc)(this.processTooltipEvent)?this.processTooltipEvent(T):null;return $?.user_info||$}}function Z(m,_){let k=new De.be(m);return k.txt=_,k.redrawObject=function(F){return this.txt=F,this.drawText(),!0},k.drawText=(0,ze.Z)(function*(){let F=this.txt._typename&&this.txt._typename==L.clTObjString?this.txt.fString:this.txt.value;(0,L.isStr)(F)||(F="");let q=this.txt.mathjax||L.settings.Latex==L.constants.Latex.AlwaysMathJax;if(!q&&!("as_is"in this.txt)){let ee=F.split("\n");F="";for(let re=0;re${ee[re]}`}let T=this.selectDom(),$=T.select("div");return $.empty()&&($=T.append("div").attr("style","max-width:100%;max-height:100%;overflow:auto")),$.html(F),this.setTopPainter(),q&&(0,_e.jR)(T.node()),this}),k.drawText()}function Y(m){return new ce(m).getCanvPainter()}function ue(m){return new ce(m).getMainPainter(!0)}let J=null;function R(m){if(m.active){let _=J?J.getFramePainter():null;_&&_.setFrameActive(!1),J=m.pp,_=J?J.getFramePainter():null,_&&_.setFrameActive(!0)}else J===m.pp&&(J=null)}function P(){return J}function v(m,_){!0===_?_={force:!0}:(0,L.isObject)(_)||(_=null);let k=!1;return new ce(m).forEachPainter(F=>{!k&&(0,L.isFunc)(F.checkResize)&&(k=F.checkResize(_))}),k}function A(m){let _=new ce(m),k=[];return _.forEachPainter(F=>{k.indexOf(F)<0&&k.push(F)}),k.forEach(F=>F.cleanup()),_.selectDom().html(""),k}const w={kDecimals:(0,L.BIT)(7),kTickPlus:(0,L.BIT)(9),kTickMinus:(0,L.BIT)(10),kAxisRange:(0,L.BIT)(11),kCenterTitle:(0,L.BIT)(12),kCenterLabels:(0,L.BIT)(14),kRotateTitle:(0,L.BIT)(15),kPalette:(0,L.BIT)(16),kNoExponent:(0,L.BIT)(17),kLabelsHori:(0,L.BIT)(18),kLabelsVert:(0,L.BIT)(19),kLabelsDown:(0,L.BIT)(20),kLabelsUp:(0,L.BIT)(21),kIsInteger:(0,L.BIT)(22),kMoreLogLabels:(0,L.BIT)(23),kOppositeTitle:(0,L.BIT)(32)}},3627:(jr,At,Me)=>{"use strict";Me.d(At,{Y:()=>_e});var ze=Me(9542),M=Me(2253),L=Me(3038);class _e{constructor($e){this.color="none",this.colorindx=0,this.pattern=0,this.used=!0,this.kind=$e.kind||2,this.changed=!1,this.func=this.apply.bind(this),this.setArgs($e),this.changed=!1}setArgs($e){(0,ze.isObject)($e.attr)&&(void 0===$e.pattern&&void 0!==$e.attr.fFillStyle&&($e.pattern=$e.attr.fFillStyle),void 0===$e.color&&void 0!==$e.attr.fFillColor&&($e.color=$e.attr.fFillColor));let Ze=this.changed;this.change($e.color,$e.pattern,$e.svg,$e.color_as_svg,$e.painter),this.changed=Ze}apply($e){this.used=!0,$e.style("fill",this.getFillColor()),"opacity"in this&&$e.style("opacity",this.opacity),"antialias"in this&&$e.style("antialias",this.antialias)}getFillColor(){return this.pattern_url||this.color}getFillColorAlt($e){return this.color&&"none"!=this.color?this.color:$e}empty(){let $e=this.getFillColor();return!$e||"none"==$e}hasColor(){return this.color&&"none"!=this.color}setSolidColor($e){delete this.pattern_url,this.color=$e,this.pattern=1001}setOpacity($e){this.opacity=$e}isSolid($e){return 1001===this.pattern&&(!$e||$e==this.color)}verifyDirectChange($e){(0,ze.isStr)(this.pattern)&&(this.pattern=parseInt(this.pattern)),Number.isInteger(this.pattern)||(this.pattern=0),this.change(this.color,this.pattern,$e?$e.getCanvSvg():null,!0,$e)}change($e,Ze,Ie,Ve,Re){if(delete this.pattern_url,this.changed=!0,void 0!==$e&&Number.isInteger(parseInt($e))&&!Ve&&(this.colorindx=parseInt($e)),void 0!==Ze&&Number.isInteger(parseInt(Ze))&&(this.pattern=parseInt(Ze),delete this.opacity,delete this.antialias),1e3==this.pattern&&0===this.colorindx)return this.pattern_url="white",!0;if(1e3==this.pattern&&(this.pattern=1001),this.pattern<1001)return this.pattern_url="none",!0;if(this.isSolid()&&0===this.colorindx&&1===this.kind&&!Ve)return this.pattern_url="none",!0;let ce=this.colorindx;if(Ve?(this.color=$e,"none"!=$e&&(ce=(0,M.$_)($e).hex().slice(1))):this.color=Re?Re.getColor(ce):(0,L.Lq)(ce),(0,ze.isStr)(this.color)||(this.color="none"),this.isSolid())return!0;if(this.pattern>=4e3&&this.pattern<=4100)return this.opacity=(this.pattern-4e3)/100,!0;if(!Ie||Ie.empty()||this.pattern<3e3||"none"==this.color)return!1;let Z=`pat_${this.pattern}_${ce}`,Y=Ie.select(".canvas_defs");if(Y.empty()&&(Y=Ie.insert("svg:defs",":first-child").attr("class","canvas_defs")),this.pattern_url=`url(#${Z})`,this.antialias=!1,!Y.select("."+Z).empty())return!0;let ue="",K=null,J="",R="",P=2,v=2;switch(this.pattern){case 3001:P=v=2,J="M0,0h1v1h-1zM1,1h1v1h-1z";break;case 3002:P=4,v=2,J="M1,0h1v1h-1zM3,1h1v1h-1z";break;case 3003:P=v=4,J="M2,1h1v1h-1zM0,3h1v1h-1z";break;case 3004:P=v=8,ue="M8,0L0,8";break;case 3005:P=v=8,ue="M0,0L8,8";break;case 3006:P=v=4,ue="M1,0v4";break;case 3007:P=v=4,ue="M0,1h4";break;case 3008:P=v=10,J="M0,3v-3h3ZM7,0h3v3ZM0,7v3h3ZM7,10h3v-3ZM5,2l3,3l-3,3l-3,-3Z",ue="M0,3l5,5M3,10l5,-5M10,7l-5,-5M7,0l-5,5";break;case 3009:P=12,v=12,ue="M0,0A6,6,0,0,0,12,0M6,6A6,6,0,0,0,12,12M6,6A6,6,0,0,1,0,12",K="none";break;case 3010:P=v=10,ue="M0,2h10M0,7h10M2,0v2M7,2v5M2,7v3";break;case 3011:P=9,v=18,ue="M5,0v8M2,1l6,6M8,1l-6,6M9,9v8M6,10l3,3l-3,3M0,9v8M3,10l-3,3l3,3",K="none";break;case 3012:P=10,v=20,ue="M5,1A4,4,0,0,0,5,9A4,4,0,0,0,5,1M0,11A4,4,0,0,1,0,19M10,11A4,4,0,0,0,10,19",K="none";break;case 3013:P=v=7,ue="M0,0L7,7M7,0L0,7",K="none";break;case 3014:P=v=16,ue="M0,0h16v16h-16v-16M0,12h16M12,0v16M4,0v8M4,4h8M0,8h8M8,4v8",K="none";break;case 3015:P=6,v=12,ue="M2,1A2,2,0,0,0,2,5A2,2,0,0,0,2,1M0,7A2,2,0,0,1,0,11M6,7A2,2,0,0,0,6,11",K="none";break;case 3016:P=12,v=7,ue="M0,1A3,2,0,0,1,3,3A3,2,0,0,0,9,3A3,2,0,0,1,12,1",K="none";break;case 3017:P=v=4,ue="M3,1l-2,2";break;case 3018:P=v=4,ue="M1,1l2,2";break;case 3019:P=v=12,ue="M1,6A5,5,0,0,0,11,6A5,5,0,0,0,1,6h-1h1A5,5,0,0,1,6,11v1v-1A5,5,0,0,1,11,6h1h-1A5,5,0,0,1,6,1v-1v1A5,5,0,0,1,1,6",K="none";break;case 3020:P=7,v=12,ue="M1,0A2,3,0,0,0,3,3A2,3,0,0,1,3,9A2,3,0,0,0,1,12",K="none";break;case 3021:P=v=8,ue="M8,2h-2v4h-4v2M2,0v2h-2",K="none";break;case 3022:P=v=8,ue="M0,2h2v4h4v2M6,0v2h2",K="none";break;case 3023:P=v=8,J="M4,0h4v4zM8,4v4h-4z",R="M4,0L0,4L4,8L8,4Z";break;case 3024:P=v=16,J="M0,8v8h2v-8zM8,0v8h2v-8M4,14v2h12v-2z",R="M0,2h8v6h4v-6h4v12h-12v-6h-4z";break;case 3025:P=v=18,J="M5,13v-8h8ZM18,0v18h-18l5,-5h8v-8Z";break;default:if(this.pattern>3025&&this.pattern<3100){P=4,v=2,J="M1,0h1v1h-1zM3,1h1v1h-1z";break}let w=this.pattern%1e3,m=w%10,_=(w-m)%100/10,k=(w-10*_-m)/100;if(!k)break;let T,$,ee,re,be,he,de,q=k*(6*Math.round(2*Math.max(.5,ze.gStyle.fHatchesSpacing)));P=v=6*q;const I=(U,H)=>{for(T=[],$=q,be=0,de=v,Math.abs(U)<3&&($=Math.round(q/12*9)),0==U?($=Math.round(q/12*8),be=$/2):U>0?de-=$:be=$;be<=de;)he=be+U*$,he<0?(re=Math.round(be/(be-he)*P),T.push(0,be,re,0),T.push(P,v-be,P-re,v)):he>v?(re=Math.round((v-be)/(he-be)*P),T.push(0,be,re,v),T.push(P,v-be,P-re,0)):T.push(0,be,P,he),be+=$;for(let le=0;le=0&&(ze.gStyle[$e]=Ie)}Ze&&(ze.gStyle[Ze]=this.pattern)}}},6367:(jr,At,Me)=>{"use strict";Me.d(At,{p:()=>$e,rE:()=>De});var ze=Me(2253),M=Me(9542),L=Me(3038);const _e=["","","3,3","1,2","3,4,1,4","5,3,1,3","5,3,1,3,1,3,1,3","5,5","5,3,1,3,1,3","20,5","20,10,1,10","1,3"];class De{constructor(Ie){this.func=this.apply.bind(this),this.used=!0,Ie._typename&&void 0!==Ie.fLineStyle&&(Ie={attr:Ie}),this.setArgs(Ie)}setArgs(Ie){Ie.attr?(this.color_index=Ie.attr.fLineColor,Ie.color=Ie.color0||(Ie.painter?Ie.painter.getColor(this.color_index):(0,L.Lq)(this.color_index)),void 0===Ie.width&&(Ie.width=Ie.attr.fLineWidth),void 0===Ie.style&&(Ie.style=Ie.attr.fLineStyle)):(0,M.isStr)(Ie.color)?"none"!==Ie.color&&!Ie.width&&(Ie.width=1):"number"==typeof Ie.color&&(this.color_index=Ie.color,Ie.color=Ie.painter?Ie.painter.getColor(Ie.color):(0,L.Lq)(Ie.color)),void 0===Ie.width&&(Ie.width=Ie.color&&"none"!=Ie.color?1:0),this.color=0===Ie.width?"none":Ie.color,this.width=Ie.width,this.style=Ie.style,this.pattern=Ie.pattern||_e[this.style]||null,Ie.can_excl&&(this.excl_side=this.excl_width=0,Math.abs(this.width)>99&&(this.excl_side=this.width<0?-1:1,this.excl_width=5*Math.floor(this.width/100),this.width=Math.abs(this.width%100))),!this.color&&this.width>0&&(this.color="lightgrey")}changeExcl(Ie,Ve){void 0!==Ve&&(this.excl_width=Ve),void 0!==Ie&&(this.excl_side=Ie,0===this.excl_width&&0!==this.excl_side&&(this.excl_width=20)),this.changed=!0}empty(){return"none"==this.color}setBorder(Ie,Ve){this.rx=Ie,this.ry=Ve,this.func=this.applyBorder.bind(this)}apply(Ie){this.used=!0,this.empty()?Ie.style("stroke",null).style("stroke-width",null).style("stroke-dasharray",null):Ie.style("stroke",this.color).style("stroke-width",this.width).style("stroke-dasharray",this.pattern)}applyBorder(Ie){this.used=!0,this.empty()?Ie.style("stroke",null).style("stroke-width",null).style("stroke-dasharray",null).attr("rx",null).attr("ry",null):Ie.style("stroke",this.color).style("stroke-width",this.width).style("stroke-dasharray",this.pattern).attr("rx",this.rx||null).attr("ry",this.ry||null)}change(Ie,Ve,Re){void 0!==Ie&&(this.color!==Ie&&delete this.color_index,this.color=Ie),void 0!==Ve&&(this.width=Ve),void 0!==Re&&(this.style=Re,this.pattern=_e[this.style]||null),this.changed=!0}verifyDirectChange(){this.change(this.color,parseInt(this.width),parseInt(this.style))}createSample(Ie,Ve,Re,ce){ce&&(Ie=(0,ze.Ys)(Ie)),Ie.append("path").attr("d",`M0,${Re/2}h${Ve}`).call(this.func)}saveToStyle(Ie,Ve,Re){if(Ie){let ce=void 0!==this.color_index?this.color_index:(0,L.Kv)(this.color);ce>=0&&(M.gStyle[Ie]=ce)}Ve&&(M.gStyle[Ve]=this.width),Re&&(M.gStyle[Re]=this.style)}}function $e(Ze){return(Ze<0||Ze>=_e.length)&&(Ze=11),_e[Ze]}},6417:(jr,At,Me)=>{"use strict";Me.d(At,{M:()=>De});var ze=Me(9542),M=Me(2253),L=Me(3038);const _e=[0,1,2,3,4,5,106,107,104,1,1,1,1,1,1,1,1,1,1,1,104,125,126,132,4,25,26,27,28,130,30,3,32,127,128,35,36,37,38,137,40,140,42,142,44,144,46,146,148,149];class De{constructor(Ze){this.x0=this.y0=0,this.color="black",this.style=1,this.size=8,this.scale=1,this.stroke=!0,this.fill=!0,this.marker="",this.ndig=0,this.used=!0,this.changed=!1,this.func=this.apply.bind(this),this.setArgs(Ze),this.changed=!1}setArgs(Ze){(0,ze.isObject)(Ze)&&"number"==typeof Ze.fMarkerStyle&&(Ze={attr:Ze}),Ze.attr&&(void 0===Ze.color&&(Ze.color=Ze.painter?Ze.painter.getColor(Ze.attr.fMarkerColor):(0,L.Lq)(Ze.attr.fMarkerColor)),(!Ze.style||Ze.style<0)&&(Ze.style=Ze.attr.fMarkerStyle),Ze.size||(Ze.size=Ze.attr.fMarkerSize)),this.color=Ze.color,this.style=Ze.style,this.size=Ze.size,this.refsize=Ze.refsize,this._configure()}resetPos(){this.lastx=this.lasty=null}create(Ze,Ie){if(!this.optimized)return`M${(Ze+this.x0).toFixed(this.ndig)},${(Ie+this.y0).toFixed(this.ndig)}${this.marker}`;let Ve=Math.round(Ze),Re=Math.round(Ie),ce=`M${Ve},${Re}`;if(null!==this.lastx)if(Ve==this.lastx&&Re==this.lasty)ce="";else{let Z=`m${Ve-this.lastx},${Re-this.lasty}`;Z.length=0&&(this.style=Ie),void 0!==Ve&&(this.size=Ve),this._configure()}_configure(){if(this.x0=this.y0=0,1===this.style||777===this.style)return this.fill=!1,this.marker="h1",this.size=1,this.optimized=!0,this.resetPos(),!0;this.optimized=!1;let Ze=_e[this.style]??104,Ie=Ze%100;this.fill=Ze>=100,this.scale=this.refsize||8;let Ve=this.getFullSize();this.ndig=Ve>7?0:Ve>2?1:2,30==Ie&&this.ndig++;let Re=Ve.toFixed(this.ndig),ce=(Ve/2).toFixed(this.ndig),Z=(Ve/3).toFixed(this.ndig),Y=(Ve/4).toFixed(this.ndig),ue=(Ve/8).toFixed(this.ndig),K=(3*Ve/8).toFixed(this.ndig);switch(Ie){case 1:this.marker="h1";break;case 2:this.y0=-Ve/2,this.marker=`v${Re}m-${ce},-${ce}h${Re}`;break;case 3:this.x0=this.y0=-Ve/2,this.marker=`l${Re},${Re}m0,-${Re}l-${Re},${Re}m0,-${ce}h${Re}m-${ce},-${ce}v${Re}`;break;case 4:this.x0=-parseFloat(ce),Re=(2*parseFloat(ce)).toFixed(this.ndig),this.marker=`a${ce},${ce},0,1,0,${Re},0a${ce},${ce},0,1,0,-${Re},0z`;break;case 5:this.x0=this.y0=-Ve/2,this.marker=`l${Re},${Re}m0,-${Re}l-${Re},${Re}`;break;case 6:this.x0=-1,this.marker="a1,1,0,1,0,2,0a1,1,0,1,0,-2,0z";break;case 7:this.x0=-1.5,this.marker="a1.5,1.5,0,1,0,3,0a1.5,1.5,0,1,0,-3,0z";break;case 25:this.x0=this.y0=-Ve/2,this.marker=`v${Re}h${Re}v-${Re}z`;break;case 26:this.y0=-Ve/2,this.marker=`l-${ce},${Re}h${Re}z`;break;case 27:default:this.y0=-Ve/2,this.marker=`l${Z},${ce}l-${Z},${ce}l-${Z},-${ce}z`;break;case 28:this.x0=this.y0=Ve/6,this.marker=`h${Z}v-${Z}h-${Z}v-${Z}h-${Z}v${Z}h-${Z}v${Z}h${Z}v${Z}h${Z}z`;break;case 30:this.y0=-Ve/2;let J=(5*Ve/6).toFixed(this.ndig),R=(5*Ve/8).toFixed(this.ndig);this.marker=`l${Z},${Re}l-${J},-${R}h${Re}l-${J},${R}z`;break;case 32:this.y0=Ve/2,this.marker=`l-${ce},-${Re}h${Re}z`;break;case 35:this.x0=-Ve/2,this.marker=`l${ce},${ce}l${ce},-${ce}l-${ce},-${ce}zh${Re}m-${ce},-${ce}v${Re}`;break;case 36:this.x0=this.y0=-Ve/2,this.marker=`h${Re}v${Re}h-${Re}zl${Re},${Re}m0,-${Re}l-${Re},${Re}`;break;case 37:this.x0=-Ve/2,this.marker=`h${Re}l-${Y},-${ce}l-${ce},${Re}h${ce}l-${ce},-${Re}z`;break;case 38:this.x0=-Ve/4,this.y0=-Ve/2,this.marker=`h${ce}l${Y},${Y}v${ce}l-${Y},${Y}h-${ce}l-${Y},-${Y}v-${ce}zm${Y},0v${Re}m-${ce},-${ce}h${Re}`;break;case 40:this.x0=-Ve/4,this.y0=-Ve/2,this.marker=`l${ce},${Re}l${Y},-${Y}l-${Re},-${ce}zm${ce},0l-${ce},${Re}l-${Y},-${Y}l${Re},-${ce}z`;break;case 42:this.y0=-Ve/2,this.marker=`l${ue},${K}l${K},${ue}l-${K},${ue}l-${ue},${K}l-${ue},-${K}l-${K},-${ue}l${K},-${ue}z`;break;case 44:this.x0=-Ve/4,this.y0=-Ve/2,this.marker=`h${ce}l-${ue},${K}l${K},-${ue}v${ce}l-${K},-${ue}l${ue},${K}h-${ce}l${ue},-${K}l-${K},${ue}v-${ce}l${K},${ue}z`;break;case 46:this.x0=-Ve/4,this.y0=-Ve/2,this.marker=`l${Y},${Y}l${Y},-${Y}l${Y},${Y}l-${Y},${Y}l${Y},${Y}l-${Y},${Y}l-${Y},-${Y}l-${Y},${Y}l-${Y},-${Y}l${Y},-${Y}l-${Y},-${Y}z`;break;case 48:this.x0=-Ve/4,this.y0=-Ve/2,this.marker=`l${Y},${Y}l-${Y},${Y}l-${Y},-${Y}zm${ce},0l${Y},${Y}l-${Y},${Y}l-${Y},-${Y}zm0,${ce}l${Y},${Y}l-${Y},${Y}l-${Y},-${Y}zm-${ce},0l${Y},${Y}l-${Y},${Y}l-${Y},-${Y}z`;break;case 49:this.x0=-Ve/6,this.y0=-Ve/2,this.marker=`h${Z}v${Z}h-${Z}zm${Z},${Z}h${Z}v${Z}h-${Z}zm-${Z},${Z}h${Z}v${Z}h-${Z}zm-${Z},-${Z}h${Z}v${Z}h-${Z}z`}return!0}getStrokeColor(){return this.stroke?this.color:"none"}getFillColor(){return this.fill?this.color:"none"}empty(){return"none"===this.color||!this.fill&&!this.stroke}apply(Ze){Ze.style("stroke",this.stroke?this.color:"none").style("fill",this.fill?this.color:"none")}verifyDirectChange(){this.change(this.color,parseInt(this.style),parseFloat(this.size))}createSample(Ze,Ie,Ve,Re){Re&&(Ze=(0,M.Ys)(Ze)),this.resetPos(),Ze.append("path").attr("d",this.create(Ie/2,Ve/2)).call(this.func)}}},1968:(jr,At,Me)=>{"use strict";Me.d(At,{$Y:()=>Ve,B_:()=>F,JV:()=>v,Qy:()=>w,Sh:()=>Z,XZ:()=>m,cM:()=>K,iq:()=>Y,mF:()=>A,oc:()=>Re,rq:()=>q,sU:()=>Ie,v2:()=>J,vm:()=>_,wu:()=>R});var ze=Me(4788),M=Me(2253),L=Me(9900),_e=Me(9542),De=Me(3675),$e=Me(6417),Ze=Me(6367);const Ie=new L.Zxw(L.Qm_);function Ve(T,$,ee){if(T){void 0!==ee&&(globalThis.docuemnt=ee);let U=new L.uMZ;return U.setPrecision($),U}const re=";stroke-opacity:1;stroke-width:1;stroke-linecap:round",be=";fill-opacity:1";let he={svg_attr:{},svg_style:{},path_attr:{},accPath:"",createElementNS(U,H){return"path"==H?{_wrapper:this,setAttribute(le,D){if("style"==le&&D){let oe=D.indexOf(re);oe>=0&&oe==D.length-re.length&&(D=D.slice(0,D.length-re.length));let ge=D.indexOf(be);ge>=0&&ge==D.length-be.length&&(D=D.slice(0,D.length-be.length))}this._wrapper.path_attr[le]=D}}:"svg"!=H?(console.error(`not supported element for SVGRenderer ${H}`),null):{_wrapper:this,childNodes:[],style:this.svg_style,setAttribute(le,D){this._wrapper.svg_attr[le]=D},appendChild(le){this._wrapper.accPath+=``,this._wrapper.path_attr={}},removeChild(le){this.childNodes=[]}}}},de=globalThis.document;globalThis.document=he;let I=new L.uMZ;return globalThis.document=de,I.doc_wrapper=he,I.originalRender=I.render,I.render=function(U,H){let le=globalThis.document;globalThis.document=this.doc_wrapper,this.originalRender(U,H),globalThis.document=le},I.clearHTML=function(){this.doc_wrapper.accPath=""},I.makeOuterHTML=function(){let U=this.doc_wrapper;return`${U.accPath}`},I.setPrecision($),I}function Re(T){T||(T=(0,_e.isBatchMode)()?_e.settings.Render3DBatch:_e.settings.Render3D);let $=_e.constants.Render3D;return T==$.Default&&(T=(0,_e.isBatchMode)()?$.WebGLImage:$.WebGL),(0,_e.isBatchMode)()&&T==$.WebGL&&(T=$.WebGLImage),T}let ce={access3dKind(T){let $=this.getPadSvg();if($.empty())return-1;let ee=$.property("can3d");return void 0!==T&&$.property("can3d",T),ee??-1},getSizeFor3d(T,$){void 0===T&&(T=(T=Re())!==_e.constants.Render3D.WebGL?_e.constants.Embed3D.EmbedSVG:_e.settings.Embed3D!=_e.constants.Embed3D.Default?_e.settings.Embed3D:_e.browser.isFirefox||_e.browser.chromeVersion>95?_e.constants.Embed3D.Embed:_e.constants.Embed3D.Overlay);let ee=this.getPadSvg(),re="draw3d_"+(this.getPadName()||"canvas");if(ee.empty()){let U=(0,De.Yo)(this.selectDom());return U.height<10&&U.width>10&&(U.height=Math.round(.66*U.width),this.selectDom().style("height",U.height+"px")),U.x=0,U.y=0,U.clname=re,U.can3d=-1,U}let de,be=this.getFramePainter(),he=this.getPadPainter();if(be?.mode3d&&T>0)de=be.getFrameRect();else{let U=T>0?ee:this.getCanvSvg();de={x:0,y:0,width:U.property("draw_width"),height:U.property("draw_height")},Number.isNaN(de.width)||Number.isNaN(de.height)?(de.width=he.getPadWidth(),de.height=he.getPadHeight()):be&&!be.mode3d&&(U=this.getFrameSvg(),de.x=U.property("draw_x"),de.y=U.property("draw_y"))}de.clname=re,de.can3d=T;let I=he?.getPadRect();if(I){let U=Math.round(.07*de.width),H=Math.round(.05*de.height);de.x=Math.max(0,de.x-U),de.y=Math.max(0,de.y-H),de.width=Math.min(de.width+2*U,I.width-de.x),de.height=Math.min(de.height+2*H,I.height-de.y)}return 1===T&&(de=(0,De.Yi)(this.getPadSvg(),de)),de},clear3dCanvas(){let T=this.access3dKind(null);if(T<0){let ee=this.selectDom().node(),re=ee?ee.firstChild:null;return re&&!re.$jsroot&&(re=re.nextSibling),re&&re.$jsroot&&(delete re.painter,ee.removeChild(re)),T}let $=this.getSizeFor3d(T);if(0===$.can3d)(0,M.Ys)(this.getCanvSvg().node().nextSibling).remove(),this.getCanvSvg().style("display",null);else{if(this.getPadSvg().empty())return;this.apply3dSize($).remove(),this.getFrameSvg().style("display",null)}return T},add3dCanvas(T,$,ee){if($&&!(T.can3d<-1)){if(-1===T.can3d){let re=this.selectDom().node();return void(null!==re&&(re.appendChild($),$.painter=this,$.$jsroot=!0))}if(T.can3d>0&&!ee&&(T.can3d=_e.constants.Embed3D.EmbedSVG),this.access3dKind(T.can3d),0===T.can3d)this.getCanvSvg().style("display","none"),this.getCanvSvg().node().parentNode.appendChild($);else{if(this.getPadSvg().empty())return;this.getFrameSvg().style("display","none"),this.apply3dSize(T).attr("title","").node().appendChild($)}}},apply3dSize(T,$){if(T.can3d<0)return(0,M.Ys)(null);let ee;if(T.can3d>1){if(ee=this.getLayerSvg(T.clname),$)return ee;let re=this.getPadSvg();T.can3d===_e.constants.Embed3D.EmbedSVG?(ee.empty()&&(ee=re.insert("g",".primitives_layer").attr("class",T.clname)),ee.attr("transform",`translate(${T.x},${T.y})`)):(ee.empty()&&(ee=re.insert("foreignObject",".primitives_layer").attr("class",T.clname)),ee.attr("x",T.x).attr("y",T.y).attr("width",T.width).attr("height",T.height).attr("viewBox",`0 0 ${T.width} ${T.height}`).attr("preserveAspectRatio","xMidYMid"))}else{let re=this.getCanvSvg().node().parentNode;if(ee=(0,M.Ys)(re).select("."+T.clname),$)return ee;this.getCanvSvg().property("redraw_by_resize",!0),ee.empty()&&(ee=(0,M.Ys)(re).append("div").attr("class",T.clname).style("user-select","none"));let be=re.getBoundingClientRect();for(;re;){if(re===document){re=null;break}try{if("static"!==getComputedStyle(re).position)break}catch{break}re=re.parentNode}let he=re?.getBoundingClientRect()??{top:0,left:0},de=Math.round(be.left-he.left),I=Math.round(be.top-he.top);ee.style("position","absolute").style("left",T.x+de+"px").style("top",T.y+I+"px").style("width",T.width+"px").style("height",T.height+"px")}return ee}};function Z(T){Object.assign(T,ce)}function Y(T,$,ee,re){return ue.apply(this,arguments)}function ue(){return(ue=(0,ze.Z)(function*(T,$,ee,re){let he,be=_e.constants.Render3D,de=!1,I=(0,_e.getDocument)();if(ee=Re(ee),re||(re={antialias:!0,alpha:!0}),ee==be.WebGL)he=Promise.resolve(new L.CP7(re));else if(ee==be.SVG){let U=Ve(!1,0,I);(0,_e.isBatchMode)()?de=!0:U.jsroot_dom=I.createElementNS("http://www.w3.org/2000/svg","svg"),he=Promise.resolve(U)}else if((0,_e.isNodeJs)())he=Me.e(478).then(Me.t.bind(Me,9478,19)).then(U=>(re.canvas=U.default.createCanvas(T,$),re.canvas.addEventListener=function(){},re.canvas.removeEventListener=function(){},re.canvas.style={},Me.e(908).then(Me.t.bind(Me,1908,19)))).then(U=>{let H=U.default(T,$,{preserveDrawingBuffer:!0});if(!H)throw Error("Fail to create headless-gl");re.context=H,H.canvas=re.canvas;let le=new L.CP7(re);return le.jsroot_output=new L.dd2(T,$),le.setRenderTarget(le.jsroot_output),de=!0,le});else{let U=new L.CP7(re);U.jsroot_dom=I.createElementNS("http://www.w3.org/2000/svg","image"),(0,M.Ys)(U.jsroot_dom).attr("width",T).attr("height",$),he=Promise.resolve(U)}return he.then(U=>(de?(_e.internals.svg_3ds||(_e.internals.svg_3ds=[]),U.workaround_id=_e.internals.svg_3ds.length,_e.internals.svg_3ds[U.workaround_id]="",U.jsroot_dom=I.createElementNS("http://www.w3.org/2000/svg","path"),U.jsroot_dom.setAttribute("jsroot_svg_workaround",U.workaround_id)):U.jsroot_dom||(U.jsroot_dom=U.domElement),U.setSize(T,$),U.jsroot_render3d=ee,U.setJSROOTSize=function(H,le){if(this.jsroot_render3d===_e.constants.Render3D.WebGLImage&&!(0,_e.isBatchMode)()&&!(0,_e.isNodeJs)())return(0,M.Ys)(this.jsroot_dom).attr("width",H).attr("height",le)},U))})).apply(this,arguments)}function K(T){if(T)if((0,_e.isNodeJs)()){let ee=((0,_e.isFunc)(T.getContext)?T.getContext():null)?.getExtension("STACKGL_destroy_context");ee&&ee.destroy()}else _e.browser.isChrome&&(0,_e.isFunc)(T.forceContextLoss)&&T.forceContextLoss(),(0,_e.isFunc)(T.dispose)&&T.dispose()}function J(T){T.clearHTML&&T.clearHTML()}function R(T){let $=_e.constants.Render3D;if(T.jsroot_render3d!=$.WebGL)if(T.jsroot_render3d==$.SVG)if((0,_e.isBatchMode)())_e.internals.svg_3ds[T.workaround_id]=T.makeOuterHTML();else{let ee=T.jsroot_dom.parentNode;ee&&(ee.innerHTML=T.makeOuterHTML(),T.jsroot_dom=ee.firstChild)}else if((0,_e.isNodeJs)()){let ee=T.domElement,re=ee.getContext("2d"),be=new Uint8Array(4*ee.width*ee.height);T.readRenderTargetPixels(T.jsroot_output,0,0,ee.width,ee.height,be);let I,U,he=0,de=4*(ee.height-1)*ee.width;for(;he`}else{let ee=T.domElement.toDataURL("image/png");(0,M.Ys)(T.jsroot_dom).attr("xlink:href",ee)}}_e.internals.processSvgWorkarounds=function(T,$){if(!_e.internals.svg_3ds)return T;for(let ee=0;ee<_e.internals.svg_3ds.length;++ee)T=T.replace(``,_e.internals.svg_3ds[ee]);return $||(_e.internals.svg_3ds=void 0),T};class P{constructor($,ee){this.tt=null,this.cont=null,this.lastlbl="",this.parent=$||document.body,this.canvas=ee,this.abspos=!$}checkParent($){$&&this.parent!==$&&(this.hide(),this.parent=$)}extract_pos($){if((0,_e.isObject)($)&&void 0!==$.u&&void 0!==$.l)return $;let ee={u:0,l:0};return this.abspos?(ee.l=$.pageX,ee.u=$.pageY):(ee.l=$.offsetX,ee.u=$.offsetY),ee}pos($){if(!this.tt)return;let ee=this.extract_pos($);if(!this.abspos){let re=this.parent.getBoundingClientRect(),be=this.canvas.getBoundingClientRect();void 0!==re.left&&void 0!==be.left&&(ee.l+=be.left-re.left),void 0!==re.top&&void 0!==be.top&&(ee.u+=be.top-re.top),ee.l+this.tt.offsetWidth+3>=this.parent.offsetWidth&&(ee.l=this.parent.offsetWidth-this.tt.offsetWidth-3),ee.u+this.tt.offsetHeight+15>=this.parent.offsetHeight&&(ee.u=this.parent.offsetHeight-this.tt.offsetHeight-15);let he=this.parent;for(;he;){let de=getComputedStyle(he);if(!de||"static"!==de.position||!he.parentNode||1!=he.parentNode.nodeType)break;he=he.parentNode}if(he&&he!==this.parent){let de=he.getBoundingClientRect();ee.l+=re.left-de.left,ee.u+=re.top-de.top}}this.tt.style.top=ee.u+15+"px",this.tt.style.left=ee.l+3+"px"}show($){if(!$)return this.hide();if((0,_e.isObject)($)&&($.lines||$.line)){if($.only_status)return this.hide();if($.line)$=$.line;else{let ee=$.lines[0];for(let re=1;re<$.lines.length;++re)ee+="
        "+$.lines[re];$=ee}}null===this.tt&&(this.tt=document.createElement("div"),this.tt.setAttribute("style","opacity: 1; filter: alpha(opacity=1); position: absolute; display: block; overflow: hidden; z-index: 101;"),this.cont=document.createElement("div"),this.cont.setAttribute("style","display: block; padding: 2px 12px 3px 7px; margin-left: 5px; font-size: 11px; background: #777; color: #fff;"),this.tt.appendChild(this.cont),this.parent.appendChild(this.tt)),this.lastlbl!==$&&(this.cont.innerHTML=$,this.lastlbl=$,this.tt.style.width="auto")}hide(){null!==this.tt&&this.parent.removeChild(this.tt),this.tt=null,this.lastlbl=""}}function v(T,$,ee,re,be){let he=null,de=_e.settings.Zooming&&_e.settings.ZoomMouse,I=(0,_e.isFunc)(T.processMouseClick);function U(oe){if(he){if(he.mouse_zoom_mesh)return oe.stopImmediatePropagation(),void oe.stopPropagation();if(!(void 0!==oe.button&&0!==oe.button||void 0!==oe.buttons&&1!==oe.buttons)){if(he.enable_zoom&&(he.mouse_zoom_mesh=he.detectZoomMesh(oe),he.mouse_zoom_mesh))return oe.stopImmediatePropagation(),void oe.stopPropagation();he.enable_select&&(he.mouse_select_pnt=he.getMousePos(oe,{}))}}}function H(oe){if(he){if(he.mouse_zoom_mesh&&he.mouse_zoom_mesh.point2&&he.painter.get3dZoomCoord){let ge=he.mouse_zoom_mesh.object.zoom,Ee=he.painter.get3dZoomCoord(he.mouse_zoom_mesh.point,ge),Ge=he.painter.get3dZoomCoord(he.mouse_zoom_mesh.point2,ge);if(Ee>Ge){let We=Ee;Ee=Ge,Ge=We}"z"===ge&&he.mouse_zoom_mesh.object.use_y_for_z&&(ge="y"),Eethis.delayedProcessMouseMove(),this.mouse_tmout):this.delayedProcessMouseMove()}},he.delayedProcessMouseMove=function(){if(delete this.tmout_handle,!this.painter)return;let oe=this.tmout_mouse,ge=this.getMouseIntersects(oe),Ee=this.processMouseMove(ge);if(Ee){let Ge="",We="",et="",Tt="";oe&&(et=oe.x.toFixed(0)+","+oe.y.toFixed(0)),(0,_e.isStr)(Ee)?Tt=Ee:(Ge=Ee.name,We=Ee.title,Ee.line?Tt=Ee.line:Ee.lines&&(Tt=Ee.lines.slice(1).join(" "),Ge=Ee.lines[0])),this.painter.showObjectStatus(Ge,We,Tt,et)}if(this.cursor_changed=!1,Ee&&this.painter?.isTooltipAllowed())this.tooltip.checkParent(this.painter.selectDom().node()),this.tooltip.show(Ee,oe),this.tooltip.pos(this.tmout_ttpos);else if(this.tooltip.hide(),ge)for(let Ge=0;Gehe.changeEvent()),he.addEventListener("start",()=>he.startEvent()),he.addEventListener("end",()=>he.endEvent()),he.lstn_contextmenu=oe=>he.mainProcessContextMenu(oe),he.lstn_dblclick=oe=>he.mainProcessDblClick(oe),he.lstn_mousemove=oe=>he.mainProcessMouseMove(oe),he.lstn_mouseleave=()=>he.mainProcessMouseLeave(),re.domElement.addEventListener("click",he.lstn_click),re.domElement.addEventListener("dblclick",he.lstn_dblclick),re.domElement.addEventListener("contextmenu",he.lstn_contextmenu),re.domElement.addEventListener("mousemove",he.lstn_mousemove),re.domElement.addEventListener("mouseleave",he.lstn_mouseleave),he}function A(T,$){if(T){if(T.children)for(let ee=0;ee{let le={size:3*this.scale*ee};H?(le.map=H,le.transparent=!0):le.color=$.color||"black";let D=new L.woe(this.geom,new L.UY4(le));return D.nvertex=1,D};if(1!==ee){let H=re();return this.noPromise?H:Promise.resolve(H)}let U,be=new $e.M({style:$.style,color:$.color,size:7}),he=be.fill?1:7,de=``,I="data:image/svg+xml;charset=utf8,"+((0,_e.isNodeJs)()?de:encodeURIComponent(de));if((0,_e.isNodeJs)())U=Me.e(478).then(Me.t.bind(Me,9478,19)).then(H=>H.default.loadImage(I).then(le=>{const D=H.default.createCanvas(64,64);return D.getContext("2d").drawImage(le,0,0,64,64),new L.ROQ(D)}));else{if(this.noPromise)return re((new L.dpR).load(I));U=new Promise((H,le)=>{(new L.dpR).load(I,oe=>H(oe),void 0,()=>le())})}return U.then(re)}}function q(T,$,ee=!1){if(!T||!$)return null;let re,be,he;(0,_e.isStr)($)||ee?(re=T.v7EvalColor($+"color","black"),be=parseInt(T.v7EvalAttr($+"style",0)),he=parseInt(T.v7EvalAttr($+"width",1))):(re=T.getColor($.fLineColor),be=$.fLineStyle,he=$.fLineWidth);let U,de=be?(0,Ze.p)(be):"",I=de?de.split(","):[];return U=I&&I.length>=2?new L.FT0({color:re,dashSize:parseInt(I[0]),gapSize:parseInt(I[1])}):new L.nls({color:re}),he&&he>1&&(U.linewidth=he),U}},3038:(jr,At,Me)=>{"use strict";Me.d(At,{$8:()=>Ze,Kv:()=>Re,Lq:()=>Ve,NC:()=>M,VZ:()=>Z,_V:()=>De,hI:()=>ce,ow:()=>Ie,tF:()=>$e});var ze=Me(9542);function M(Y,ue){let K=Math.round(Y*(ue||255)).toString(16);return 1==K.length?"0"+K:K}let L=[];function De(){return L}function $e(Y){if(Y?._typename!=ze.clTColor)return null;let ue="#"+M(Y.fRed)+M(Y.fGreen)+M(Y.fBlue);switch(void 0!==Y.fAlpha&&1!==Y.fAlpha&&(ue+=M(Y.fAlpha)),ue){case"#ffffff":return"white";case"#000000":return"black";case"#ff0000":return"red";case"#00ff00":return"green";case"#0000ff":return"blue";case"#ffff00":return"yellow";case"#ff00ff":return"magenta";case"#00ffff":return"cyan"}return ue}function Ze(Y,ue){if(!Y){Y=[];for(let J=0;J=0&&R.fNumber<=1e4&&(K[R.fNumber]=$e(R))}}for(let J=0;J=0?K:(ue.push(Y),ue.length-1)}class Z{constructor(ue){this.palette=ue}calcColorIndex(ue,K){let J=this.palette.length,R=Math.floor((ue+.99)*J/(K-1));return R>J-1?J-1:R}getColor(ue){return this.palette[ue]}getLength(){return this.palette.length}calcColor(ue,K){return this.getColor(this.calcColorIndex(ue,K))}}!function _e(){let Y=["white","black","red","green","blue","yellow","magenta","cyan","#59d454","#5954d9","white"];Y[110]="white",[{n:11,s:"c1b7ad4d4d4d6666668080809a9a9ab3b3b3cdcdcde6e6e6f3f3f3cdc8accdc8acc3c0a9bbb6a4b3a697b8a49cae9a8d9c8f83886657b1cfc885c3a48aa9a1839f8daebdc87b8f9a768a926983976e7b857d9ad280809caca6c0d4cf88dfbb88bd9f83c89a7dc08378cf5f61ac8f94a6787b946971d45a549300ff7b00ff6300ff4b00ff3300ff1b00ff0300ff0014ff002cff0044ff005cff0074ff008cff00a4ff00bcff00d4ff00ecff00fffd00ffe500ffcd00ffb500ff9d00ff8500ff6d00ff5500ff3d00ff2600ff0e0aff0022ff003aff0052ff006aff0082ff009aff00b1ff00c9ff00e1ff00f9ff00ffef00ffd700ffbf00ffa700ff8f00ff7700ff6000ff4800ff3000ff1800ff0000"},{n:201,s:"5c5c5c7b7b7bb8b8b8d7d7d78a0f0fb81414ec4848f176760f8a0f14b81448ec4876f1760f0f8a1414b84848ec7676f18a8a0fb8b814ecec48f1f1768a0f8ab814b8ec48ecf176f10f8a8a14b8b848ecec76f1f1"},{n:390,s:"ffffcdffff9acdcd9affff66cdcd669a9a66ffff33cdcd339a9a33666633ffff00cdcd009a9a00666600333300"},{n:406,s:"cdffcd9aff9a9acd9a66ff6666cd66669a6633ff3333cd33339a3333663300ff0000cd00009a00006600003300"},{n:422,s:"cdffff9affff9acdcd66ffff66cdcd669a9a33ffff33cdcd339a9a33666600ffff00cdcd009a9a006666003333"},{n:590,s:"cdcdff9a9aff9a9acd6666ff6666cd66669a3333ff3333cd33339a3333660000ff0000cd00009a000066000033"},{n:606,s:"ffcdffff9affcd9acdff66ffcd66cd9a669aff33ffcd33cd9a339a663366ff00ffcd00cd9a009a660066330033"},{n:622,s:"ffcdcdff9a9acd9a9aff6666cd66669a6666ff3333cd33339a3333663333ff0000cd00009a0000660000330000"},{n:791,s:"ffcd9acd9a669a66339a6600cd9a33ffcd66ff9a00ffcd33cd9a00ffcd00ff9a33cd66006633009a3300cd6633ff9a66ff6600ff6633cd3300ff33009aff3366cd00336600339a0066cd339aff6666ff0066ff3333cd0033ff00cdff9a9acd66669a33669a009acd33cdff669aff00cdff339acd00cdff009affcd66cd9a339a66009a6633cd9a66ffcd00ff6633ffcd00cd9a00ffcd33ff9a00cd66006633009a3333cd6666ff9a00ff9a33ff6600cd3300ff339acdff669acd33669a00339a3366cd669aff0066ff3366ff0033cd0033ff339aff0066cd00336600669a339acd66cdff009aff33cdff009acd00cdffcd9aff9a66cd66339a66009a9a33cdcd66ff9a00ffcd33ff9a00cdcd00ff9a33ff6600cd33006633009a6633cd9a66ff6600ff6633ff3300cd3300ffff339acd00666600339a0033cd3366ff669aff0066ff3366cd0033ff0033ff9acdcd669a9a33669a0066cd339aff66cdff009acd009aff33cdff009a"},{n:920,s:"cdcdcd9a9a9a666666333333"}].forEach(K=>{let J=K.s;for(let R=0;R{"use strict";Me.d(At,{$1:()=>J,RO:()=>Ze,TT:()=>K,hs:()=>ee,jR:()=>be,ug:()=>P});var ze=Me(4788),M=Me(9542),L=Me(3675),_e=Me(4953);const De={"#alpha":"\u03b1","#beta":"\u03b2","#chi":"\u03c7","#delta":"\u03b4","#digamma":"\u03dd","#varepsilon":"\u03b5","#phi":"\u03c6","#gamma":"\u03b3","#eta":"\u03b7","#iota":"\u03b9","#varphi":"\u03c6","#kappa":"\u03ba","#koppa":"\u03df","#sampi":"\u03e1","#lambda":"\u03bb","#mu":"\u03bc","#nu":"\u03bd","#omicron":"\u03bf","#pi":"\u03c0","#theta":"\u03b8","#rho":"\u03c1","#sigma":"\u03c3","#stigma":"\u03db","#san":"\u03fb","#sho":"\u03f8","#tau":"\u03c4","#upsilon":"\u03c5","#varomega":"\u03d6","#varcoppa":"\u03d9","#omega":"\u03c9","#xi":"\u03be","#psi":"\u03c8","#zeta":"\u03b6","#Alpha":"\u0391","#Beta":"\u0392","#Chi":"\u03a7","#Delta":"\u0394","#Digamma":"\u03dc","#Epsilon":"\u0395","#Phi":"\u03a6","#Gamma":"\u0393","#Eta":"\u0397","#Iota":"\u0399","#vartheta":"\u03d1","#Kappa":"\u039a","#Koppa":"\u03de","#varKoppa":"\u03d8","#Sampi":"\u03e0","#Lambda":"\u039b","#Mu":"\u039c","#Nu":"\u039d","#Omicron":"\u039f","#Pi":"\u03a0","#Theta":"\u0398","#Rho":"\u03a1","#Sigma":"\u03a3","#Stigma":"\u03da","#San":"\u03fa","#Sho":"\u03f7","#Tau":"\u03a4","#Upsilon":"\u03a5","#varsigma":"\u03c2","#Omega":"\u03a9","#Xi":"\u039e","#Psi":"\u03a8","#Zeta":"\u0396","#varUpsilon":"\u03d2","#epsilon":"\u03b5","#P":"\xb6","#sqrt":"\u221a","#bar":"","#overline":"","#underline":"","#strike":"","#leq":"\u2264","#/":"\u2044","#infty":"\u221e","#voidb":"\u0192","#club":"\u2663","#diamond":"\u2666","#heart":"\u2665","#spade":"\u2660","#leftrightarrow":"\u2194","#leftarrow":"\u2190","#uparrow":"\u2191","#rightarrow":"\u2192","#downarrow":"\u2193","#circ":"\u02c6","#pm":"\xb1","#doublequote":"\u2033","#geq":"\u2265","#times":"\xd7","#propto":"\u221d","#partial":"\u2202","#bullet":"\u2022","#divide":"\xf7","#neq":"\u2260","#equiv":"\u2261","#approx":"\u2248","#3dots":"\u2026","#cbar":"|","#topbar":"\xaf","#downleftarrow":"\u21b5","#aleph":"\u2135","#Jgothic":"\u2111","#Rgothic":"\u211c","#voidn":"\u2118","#otimes":"\u2297","#oplus":"\u2295","#oslash":"\u2205","#cap":"\u2229","#cup":"\u222a","#supseteq":"\u2287","#supset":"\u2283","#notsubset":"\u2284","#subseteq":"\u2286","#subset":"\u2282","#int":"\u222b","#in":"\u2208","#notin":"\u2209","#angle":"\u2220","#nabla":"\u2207","#oright":"\xae","#ocopyright":"\xa9","#trademark":"\u2122","#prod":"\u220f","#surd":"\u221a","#upoint":"\u02d9","#corner":"\xac","#wedge":"\u2227","#vee":"\u2228","#Leftrightarrow":"\u21d4","#Leftarrow":"\u21d0","#Uparrow":"\u21d1","#Rightarrow":"\u21d2","#Downarrow":"\u21d3","#LT":"<","#void1":"\xae","#copyright":"\xa9","#void3":"\u2122","#sum":"\u2211","#arctop":"\u239b","#lbar":"\u23b8","#arcbottom":"\u239d","#void8":"","#bottombar":"\u230a","#arcbar":"\u23a7","#ltbar":"\u23a8","#AA":"\u212b","#aa":"\xe5","#void06":"","#GT":">","#forall":"\u2200","#exists":"\u2203","#vec":"","#dot":"\u22c5","#hat":"\xb7","#ddot":"","#acute":"","#grave":"","#check":"\u2713","#tilde":"\u02dc","#slash":"\u2044","#hbar":"\u0127","#box":"\u25fd","#Box":"\u2610","#parallel":"\u2225","#perp":"\u22a5","#odot":"\u2299","#left":"","#right":"","{}":""},$e=new RegExp("("+Object.keys(De).join("|").replace(/\\\{/g,"{").replace(/\\\}/g,"}")+")","g"),Ze=(de,I)=>{for(;de.length>2&&"{"==de[0]&&"}"==de[de.length-1];)de=de.slice(1,de.length-1);return de.replace($e,U=>De[U]).replace(/\{\}/g,"")},Ie=[453,535,661,973,955,1448,1242,324,593,596,778,1011,431,570,468,492,947,885,947,947,947,947,947,947,947,947,511,495,980,1010,987,893,1624,1185,1147,1193,1216,1080,1028,1270,1274,531,910,1177,1004,1521,1252,1276,1111,1276,1164,1056,1073,1215,1159,1596,1150,1124,1065,540,591,540,837,874,572,929,972,879,973,901,569,967,973,453,458,903,453,1477,973,970,972,976,638,846,548,973,870,1285,884,864,835,656,430,656,1069],Ve={945:1002,946:996,967:917,948:953,949:834,966:1149,947:847,951:989,953:516,954:951,955:913,956:1003,957:862,959:967,960:1070,952:954,961:973,963:1017,964:797,965:944,982:1354,969:1359,958:803,968:1232,950:825,913:1194,914:1153,935:1162,916:1178,917:1086,934:1358,915:1016,919:1275,921:539,977:995,922:1189,923:1170,924:1523,925:1253,927:1281,928:1281,920:1285,929:1102,931:1041,932:1069,933:1135,962:848,937:1279,926:1092,936:1334,918:1067,978:1154,8730:986,8804:940,8260:476,8734:1453,402:811,9827:1170,9830:931,9829:1067,9824:965,8596:1768,8592:1761,8593:895,8594:1761,8595:895,710:695,177:955,8243:680,8805:947,215:995,8733:1124,8706:916,8226:626,247:977,8800:969,8801:1031,8776:976,8230:1552,175:883,8629:1454,8501:1095,8465:1002,8476:1490,8472:1493,8855:1417,8853:1417,8709:1205,8745:1276,8746:1404,8839:1426,8835:1426,8836:1426,8838:1426,8834:1426,8747:480,8712:1426,8713:1426,8736:1608,8711:1551,174:1339,169:1339,8482:1469,8719:1364,729:522,172:1033,8743:1383,8744:1383,8660:1768,8656:1496,8657:1447,8658:1496,8659:1447,8721:1182,9115:882,9144:1e3,9117:882,8970:749,9127:1322,9128:1322,8491:1150,229:929,8704:1397,8707:1170,8901:524,183:519,10003:1477,732:692,295:984,9725:1780,9744:1581,8741:737,8869:1390,8857:1421};function Re(de,I,U){let H=de.length,le=(U||I.size)*I.aver_width;if(I.isMonospace())return H*le;let D=0;for(let oe=0;oe=32&&ge<127?Ie[ge-32]:Ve[ge]||1e3}return D/1e3*le}const ce=[{name:"#it{"},{name:"#bf{"},{name:"#underline{",deco:"underline"},{name:"#overline{",deco:"overline"},{name:"#strike{",deco:"line-through"},{name:"#kern[",arg:"float"},{name:"#lower[",arg:"float"},{name:"#scale[",arg:"float"},{name:"#color[",arg:"int"},{name:"#font[",arg:"int"},{name:"_{",low_up:"low"},{name:"^{",low_up:"up"},{name:"#bar{",deco:"overline"},{name:"#hat{",accent:"\u02c6",hasw:!0},{name:"#check{",accent:"\u02c7",hasw:!0},{name:"#acute{",accent:"\u02ca"},{name:"#grave{",accent:"\u02cb"},{name:"#dot{",accent:"\u02d9"},{name:"#ddot{",accent:"\u02ba",hasw:!0},{name:"#tilde{",accent:"\u02dc",hasw:!0},{name:"#slash{",accent:"\u2215"},{name:"#vec{",accent:"\u02ed",hasw:!0},{name:"#frac{",twolines:"line"},{name:"#splitline{",twolines:!0},{name:"#sqrt[",arg:"int",sqrt:!0},{name:"#sqrt{",sqrt:!0},{name:"#sum",special:"\u2211",w:.8,h:.9},{name:"#int",special:"\u222b",w:.3,h:1},{name:"#left[",right:"#right]",braces:"[]"},{name:"#left(",right:"#right)",braces:"()"},{name:"#left{",right:"#right}",braces:"{}"},{name:"#left|",right:"#right|",braces:"||"},{name:"#[]{",braces:"[]"},{name:"#(){",braces:"()"},{name:"#{}{",braces:"{}"},{name:"#||{",braces:"||"}],Z=[0,8704,0,8707,0,0,8717,0,0,8727,0,0,8722,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8773,913,914,935,916,917,934,915,919,921,977,922,923,924,925,927,928,920,929,931,932,933,962,937,926,936,918,0,8756,0,8869,0,0,945,946,967,948,949,966,947,951,953,981,954,955,956,957,959,960,952,961,963,964,965,982,969,958,968,950,0,402,0,8764,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,978,8242,8804,8260,8734,0,9827,9830,9829,9824,8596,8592,8593,8594,8595,0,0,8243,8805,0,8733,8706,8729,0,8800,8801,8776,8230,0,0,8629,8501,8465,8476,8472,8855,8853,8709,8745,8746,8835,8839,8836,8834,8838,8712,8713,8736,8711,0,0,8482,8719,8730,8901,0,8743,8744,8660,8656,8657,8658,8659,9674,9001,0,0,8482,8721,0,0,0,0,0,0,0,0,0,0,8364,9002,8747,8992,0,8993],Y=[128393,9986,9985,128083,128365,128366,128367,128383,9990,128386,128387,128234,128235,128236,128237,128193,128194,128196,128463,128464,128452,8987,128430,128432,128434,128435,128436,128427,128428,9991,9997,128398,9996,128076,128077,128078,9756,9758,9757,9759,128400,9786,128528,9785,128163,9760,127987,127985,9992,9788,128167,10052,128326,10014,128328,10016,10017,9770,9775,2384,9784,9800,9801,9802,9803,9804,9805,9806,9807,9808,9809,9810,9811,128624,128629,9679,128318,9632,9633,128912,10065,10066,11047,10731,9670,10070,11045,8999,11193,8984,127989,127990,128630,128631,0,9450,9312,9313,9314,9315,9316,9317,9318,9319,9320,9321,9471,10102,10103,10104,10105,10106,10107,10108,10109,10110,10111,128610,128608,128609,128611,128606,128604,128605,128607,183,8226,9642,9898,128902,128904,9673,9678,128319,9642,9723,128962,10022,9733,10038,10036,10041,10037,11216,8982,10209,8977,11217,10026,10032,128336,128337,128338,128339,128340,128341,128342,128343,128344,128345,128346,128347,11184,11185,11186,11187,11188,11189,11190,11191,128618,128619,128597,128596,128599,128598,128592,128593,128594,128595,9003,8998,11160,11162,11161,11163,11144,11146,11145,11147,129128,129130,129129,129131,129132,129133,129135,129134,129144,129146,129145,129147,129148,129149,129151,129150,8678,8680,8679,8681,11012,8691,11008,11009,11011,11010,129196,129197,128502,10004,128503,128505];function ue(de,I){let U="",H="Wingdings"==I?Y:Z;for(let le=0;le32?H[D-33]:0)||D)}return U}function K(de,I,U){U.plain=!0,U.simple_latex&&(U.text=Ze(U.text)),I.text(U.font&&U.font.isSymbol?ue(U.text,U.font.isSymbol):U.text)}function J(de){return!de||de.indexOf("#")<0&&de.indexOf("{")<0}function R(de,I,U,H){let le=0;const D=()=>(H.g||(H.g=de.append("svg:g")),H.g),oe=Bt=>{H.x+=Math.round(Bt)},ge=(Bt,ve,Je,ct)=>{H.rect?(H.rect.x1=Math.min(H.rect.x1,Bt),H.rect.y1=Math.min(H.rect.y1,ve),H.rect.x2=Math.max(H.rect.x2,Je),H.rect.y2=Math.max(H.rect.y2,ct)):H.rect={x1:Bt,y1:ve,x2:Je,y2:ct},H.rect.width=H.rect.x2-H.rect.x1,H.rect.height=H.rect.y2-H.rect.y1,H.parent||(I.text_rect=H.rect)},Ee=(Bt,ve,Je,ct)=>{ve=Math.round(ve),(Je=Math.round(Je))?Bt.g.attr("transform",`translate(${ve},${Je})`):ve&&Bt.g.attr("transform",`translate(${ve})`),Bt.rect.x1+=ve,Bt.rect.x2+=ve,Bt.rect.y1+=Je,Bt.rect.y2+=Je,ct?ge(H.x+Bt.rect.x1,H.y+Bt.rect.y1,H.x+Bt.rect.x2,H.y+Bt.rect.y2):ge(Bt.rect.x1,Bt.rect.y1,Bt.rect.x2,Bt.rect.y2)},Ge=()=>{let Bt=D();return 1==le&&!U&&!H.x&&!H.y||(Bt=Bt.append("svg:g"),H.y?Bt.attr("transform",`translate(${H.x},${H.y})`):H.x&&Bt.attr("transform",`translate(${H.x})`)),Bt},We=(Bt,ve,Je)=>{let ct=0,je=1,Ye=!1,pt=!1;ve||(ve="{"),Je||(Je="}");const Ht=Ct=>ct+Ct.length<=U.length&&U.slice(ct,ct+Ct.length)==Ct;for(Bt&&(Ht(ve)?U=U.slice(ve.length):Ye=!0);!Ye&&0!=je&&ctBt.append("svg:path").style("stroke",ve?"none":H.color||I.color).style("stroke-width",ve?null:Math.max(1,Math.round(H.fsize*(H.font.weight?.1:.07)))).style("fill",ve?H.color||I.color:"none"),Tt=Bt=>({lvl:H.lvl+1,x:0,y:0,fsize:H.fsize*(Bt||1),color:H.color,font:H.font,parent:H,painter:H.painter});for(;U;){let Bt=U.length,ve=null;for(let je=0;je=0&&Ye0){let je=Bt==U.length&&0==le&&!ve;le++;let Ye=Ze(U.slice(0,Bt));if(Ye||je){let Ht=(H.g||(je?de:D())).append("svg:text");je&&!H.g&&(H.g=Ht),H.ufont&&H.font.setFont(H.g),void 0!==H.bold&&H.g.attr("font-weight",H.bold?"bold":"normal"),void 0!==H.italic&&H.g.attr("font-style",H.italic?"italic":"normal"),Ht.attr("fill",H.color||I.color||null),H.fisze!==H.font.size&&Ht.attr("font-size",Math.round(H.fsize)),Ht.text(H.font&&H.font.isSymbol?ue(Ye,H.font.isSymbol):Ye);let tn=(0,M.isNodeJs)()||M.settings.ApproxTextSize||I.fast?{height:1.2*H.fsize,width:Re(Ye,H.font,H.fsize)}:(0,L.Yo)(Ht,"nopadding");H.x&&Ht.attr("x",H.x),H.y&&Ht.attr("y",H.y),H.last_y1=H.y-.8*tn.height,H.last_y2=H.y+.2*tn.height,ge(H.x,H.last_y1,H.x+tn.width,H.last_y2),je?H.deco&&(Ht.attr("text-decoration",H.deco),delete H.deco):oe(tn.width)}}if(!ve)return!0;if(U=U.slice(Bt+ve.name.length),le++,ve.accent){let je=We();if(-1===je)return!1;let Ye=Ge(),pt=Tt();R(Ye,I,je,pt);let Ht=.6*H.fsize,tn=0,Ct=pt.rect.width,Ot=Math.round(pt.rect.y1),sn=Math.round(.1*H.fsize),Mn=2*sn,Ln=`a${sn},${sn},0,0,1,${Mn},0a${sn},${sn},0,0,1,${-Mn},0z`;ve.hasw&&Ct0?Mn/2:0,Ln-Ot.rect.y1,!0),Ct&&Ct.attr("d",`M0,${Math.round(Ln)}h${Math.round(sn-.1*H.fsize)}`),oe(sn),delete H.twolines;continue}const Je=je=>{let Ye={};if(je&&(Ye[je]=We(),-1===Ye[je]))return!1;for(;U;)if("_"==U[0]){if(U=U.slice(1),Ye.low=Ye.low?-1:We("_"),-1===Ye.low)return console.log(`error with ${ve.name} low limit`),!1}else{if("^"!=U[0])break;if(U=U.slice(1),Ye.up=Ye.up?-1:We("^"),-1===Ye.up)return console.log(`error with ${ve.name} upper limit `+U),!1}return Ye};if(ve.low_up){const je=Je(ve.low_up);if(!je)return!1;let Ye,pt,Ht=H.x,tn=-H.fsize,Ct=.25*H.fsize,Ot=0,sn=0;je.up&&(Ye=Tt(.6),R(D(),I,je.up,Ye)),je.low&&(pt=Tt(.6),R(D(),I,je.low,pt)),void 0!==H.last_y1&&void 0!==H.last_y2&&(tn=H.last_y1,Ct=H.last_y2),Ye&&(Ee(Ye,Ht,tn-Ye.rect.y1-.1*H.fsize),Ot=Ye.rect.width),pt&&(Ee(pt,Ht,Ct-pt.rect.y2+.1*H.fsize),sn=pt.rect.width),oe(Math.max(Ot,sn));continue}if(ve.special){let Ot,sn,je=Je()||{},Ye=Ge(),pt=et(Ye),Ht=Math.round(1.7*H.fsize),tn=Math.round(H.fsize),Ct=Math.round(.1*Ht);if("#sum"==ve.name?(Ot=sn=tn/2,pt.attr("d",`M${tn},${Math.round(-.75*Ht)}h${-tn}l${Math.round(.4*tn)},${Math.round(.3*Ht)}l${Math.round(-.4*tn)},${Math.round(.7*Ht)}h${tn}`)):(Ot=3*Ct,sn=Ct,pt.attr("d",`M0,${Math.round(.25*Ht-Ct)}a${Ct},${Ct},0,0,0,${2*Ct},0v${2*Ct-Ht}a${Ct},${Ct},0,1,1,${2*Ct},0`)),ge(H.x,H.y-.6*Ht,H.x+tn,H.y+.4*Ht),je.low){let Mn=Tt(.6);R(Ye,I,je.low,Mn),Ee(Mn,sn-Mn.rect.width/2,.25*Ht-Mn.rect.y1,!0)}if(je.up){let Mn=Tt(.6);R(Ye,I,je.up,Mn),Ee(Mn,Ot-Mn.rect.width/2,-.75*Ht-Mn.rect.y2,!0)}oe(tn);continue}if(ve.braces){let je=ve.right,pt=We(!1,je?ve.name:"{",je),Ht=Ge(),tn=Tt(),Ct=et(Ht);R(Ht,I,pt,tn);let Ot=et(Ht),sn=Math.max(2,Math.round(.2*H.fsize)),Mn=tn.rect,Ln=Math.round(Mn.y2-Mn.y1),In=Math.round(Mn.y1),$n=Math.round(Mn.width);switch(ve.braces){case"||":Ct.attr("d",`M${sn},${In}v${Ln}`),Ot.attr("d",`M${3*sn+$n},${In}v${Ln}`);break;case"[]":Ct.attr("d",`M${2*sn},${In}h${-sn}v${Ln}h${sn}`),Ot.attr("d",`M${2*sn+$n},${In}h${sn}v${Ln}h${-sn}`);break;case"{}":Ct.attr("d",`M${2*sn},${In} a${sn},${sn},0,0,0,${-sn},${sn} v${Ln/2-2*sn} a${sn},${sn},0,0,1,${-sn},${sn} a${sn},${sn},0,0,1,${sn},${sn} v${Ln/2-2*sn} a${sn},${sn},0,0,0,${sn},${sn}`),Ot.attr("d",`M${2*sn+$n},${In} a${sn},${sn},0,0,1,${sn},${sn} v${Ln/2-2*sn} a${sn},${sn},0,0,0,${sn},${sn} a${sn},${sn},0,0,0,${-sn},${sn} v${Ln/2-2*sn} a${sn},${sn},0,0,1,${-sn},${sn}`);break;default:Ct.attr("d",`M${sn},${In}a${4*Ln},${4*Ln},0,0,0,0,${Ln}`),Ot.attr("d",`M${3*sn+$n},${In}a${4*Ln},${4*Ln},0,0,1,0,${Ln}`)}Ee(tn,2*sn,0,!0),ge(H.x,H.y+Mn.y1,H.x+4*sn+Mn.width,H.y+Mn.y2),oe(4*sn+Mn.width),H.last_y1=Mn.y1,H.last_y2=Mn.y2;continue}if(ve.deco){let je=We(),Ye=Ge(),pt=Tt();pt.deco=ve.deco,R(Ye,I,je,pt);let Ht=pt.rect;if(pt.deco){let tn=et(Ye),Ct=Math.round(Ht.width);switch(pt.deco){case"underline":tn.attr("d",`M0,${Math.round(Ht.y2)}h${Ct}`);break;case"overline":tn.attr("d",`M0,${Math.round(Ht.y1)}h${Ct}`);break;case"line-through":tn.attr("d",`M0,${Math.round(.45*Ht.y1+.55*Ht.y2)}h${Ct}`)}}Ee(pt,0,0,!0),oe(Ht.width);continue}if("#bf{"==ve.name||"#it{"==ve.name){let je=We();if(-1===je)return!1;let Ye=Tt();"#bf{"==ve.name?Ye.bold=!Ye.bold:Ye.italic=!Ye.italic,R(D(),I,je,Ye),Ee(Ye,H.x,H.y),oe(Ye.rect.width);continue}let ct=0;if(ve.arg){let je=U.indexOf("]{");if(je<0)return console.log("missing argument for ",ve.name),!1;if(ct=U.slice(0,je),"int"==ve.arg){if(ct=parseInt(ct),!Number.isInteger(ct))return console.log("wrong int argument",U.slice(0,je)),!1}else if("float"==ve.arg&&(ct=parseFloat(ct),!Number.isFinite(ct)))return console.log("wrong float argument",U.slice(0,je)),!1;U=U.slice(je+2)}if("#kern["!=ve.name&&"#lower["!=ve.name)if("#color["!=ve.name&&"#scale["!=ve.name&&"#font["!=ve.name){if(ve.sqrt){let je=We();if(-1===je)return!1;let pt,Ye=Ge(),Ht=Tt();ve.arg&&(pt=Tt(.7),R(Ye,I,ct.toString(),pt));let tn=et(Ye);R(Ye,I,je,Ht);let Ct=Ht.rect,Ot=Math.round(Ct.height),sn=Math.round(.1*Ct.height),Mn=Math.round(Ct.width),Ln=Math.round((Ct.y1+Ct.y2)/2),In=Math.round(.2*H.fsize),$n=Math.round(Ct.y2);pt&&Ee(pt,0,Ln-.3*pt.fsize,!0),tn.attr("d",`M0,${Ln}h${sn}l${sn},${$n-Ln-In}l${sn},${-Ot+In}h${Math.round(.2*Ot+Mn)}v${sn}`),Ee(Ht,.4*Ot,0,!0),ge(H.x,H.y+Ct.y1-.1*H.fsize,H.x+Mn+.6*Ot,H.y+Ct.y2),oe(Mn+.6*Ot)}}else{let je=We();if(-1===je)return!1;let Ye=Tt();"#color["==ve.name?Ye.color=H.painter.getColor(ct):"#font["==ve.name?(Ye.font=new _e.G(ct),Ye.ufont=!0):Ye.fsize*=ct,R(D(),I,je,Ye),Ee(Ye,H.x,H.y),oe(Ye.rect.width)}else{let je=We();if(-1===je)return!1;let Ye=Tt();R(D(),I,je,Ye);let pt=0,Ht=0;"kern["==ve.name?pt=ct:Ht=ct,Ee(Ye,H.x+pt*Ye.rect.width,H.y+Ht*Ye.rect.height),oe(Ye.rect.width*(pt>0?1+ct:1))}}return!0}function P(de,I,U){return R(I,U,U.text,{lvl:0,g:I,x:0,y:0,dx:0,dy:-.1,fsize:U.font_size,font:U.font,parent:null,painter:de})}let v;function A(){return w.apply(this,arguments)}function w(){return(w=(0,ze.Z)(function*(){let de=void 0!==v;if(!de&&typeof globalThis.MathJax<"u")return globalThis.MathJax;de||(v=[]);let I=new Promise(le=>{v?v.push(le):le(globalThis.MathJax)});if(de)return I;let H,U={scale:1,minScale:.5,mtextInheritFont:!1,merrorInheritFont:!0,mathmlSpacing:!1,skipAttributes:{},exFactor:.5,displayAlign:"center",displayIndent:"0",fontCache:"local",localID:null,internalSpeechTitles:!0,titleID:0};return(0,M.isNodeJs)()?(0,L.Bu)().then(le=>(H=le.JSDOM,Me.e(887).then(Me.t.bind(Me,1887,19)))).then(le=>(le.init({loader:{load:["input/tex","output/svg","[tex]/color","[tex]/upgreek","[tex]/mathtools","[tex]/physics"]},tex:{packages:{"[+]":["color","upgreek","mathtools","physics"]}},svg:U,config:{JSDOM:H},startup:{typeset:!1,ready(){MathJax.startup.registerConstructor("jsdomAdaptor",()=>new MathJax._.adaptors.HTMLAdaptor.HTMLAdaptor((new MathJax.config.config.JSDOM).window)),MathJax.startup.useAdaptor("jsdomAdaptor",!0),MathJax.startup.defaultReady();let D=v;v=void 0,D.forEach(oe=>oe(MathJax))}}}),I)):(window.MathJax={options:{enableMenu:!1},loader:{load:["[tex]/color","[tex]/upgreek","[tex]/mathtools","[tex]/physics"]},tex:{packages:{"[+]":["color","upgreek","mathtools","physics"]}},svg:U,startup:{ready(){MathJax.startup.defaultReady();let le=v;v=void 0,le.forEach(D=>D(globalThis.MathJax))}}},(0,M.loadScript)(M.source_dir+"../mathjax/3.2.0/es5/tex-svg.js").catch(()=>(0,M.loadScript)("https://cdn.jsdelivr.net/npm/mathjax@3.2.0/es5/tex-svg.js")).then(()=>I))})).apply(this,arguments)}const m={"#LT":"\\langle","#GT":"\\rangle","#club":"\\clubsuit","#spade":"\\spadesuit","#heart":"\\heartsuit","#diamond":"\\diamondsuit","#voidn":"\\wp","#voidb":"f","#copyright":"(c)","#ocopyright":"(c)","#trademark":"TM","#void3":"TM","#oright":"R","#void1":"R","#3dots":"\\ldots","#lbar":"\\mid","#void8":"\\mid","#divide":"\\div","#Jgothic":"\\Im","#Rgothic":"\\Re","#doublequote":'"',"#plus":"+","#minus":"-","#/":"/","#upoint":".","#aa":"\\mathring{a}","#AA":"\\mathring{A}","#omicron":"o","#Alpha":"A","#Beta":"B","#Epsilon":"E","#Zeta":"Z","#Eta":"H","#Iota":"I","#Kappa":"K","#Mu":"M","#Nu":"N","#Omicron":"O","#Rho":"P","#Tau":"T","#Chi":"X","#varomega":"\\varpi","#corner":"?","#ltbar":"?","#bottombar":"?","#notsubset":"?","#arcbottom":"?","#cbar":"?","#arctop":"?","#topbar":"?","#arcbar":"?","#downleftarrow":"?","#splitline":"\\genfrac{}{}{0pt}{}","#it":"\\textit","#bf":"\\textbf","#frac":"\\frac","#left{":"\\lbrace","#right}":"\\rbrace","#left\\[":"\\lbrack","#right\\]":"\\rbrack","#\\[\\]{":"\\lbrack"," } ":"\\rbrack","#\\[":"\\lbrack","#\\]":"\\rbrack","#{":"\\lbrace","#}":"\\rbrace"," ":"\\;"},_={upDelta:"Updelta",upGamma:"Upgamma",upLambda:"Uplambda",upOmega:"Upomega",upPhi:"Upphi",upPi:"Uppi",upPsi:"Uppsi",upSigma:"Upsigma",upTheta:"Uptheta",upUpsilon:"Upupsilon",upXi:"Upxi",notcong:"ncong",notgeq:"ngeq",notgr:"ngtr",notless:"nless",notleq:"nleq",notsucc:"nsucc",notprec:"nprec",notsubseteq:"nsubseteq",notsupseteq:"nsupseteq",openclubsuit:"clubsuit",openspadesuit:"spadesuit",dasharrow:"dashrightarrow",comp:"circ",iiintop:"iiint",iintop:"iint",ointop:"oint"},k={Digamma:988,upDigamma:988,digamma:989,updigamma:989,Koppa:990,koppa:991,upkoppa:991,upKoppa:990,VarKoppa:984,upVarKoppa:984,varkoppa:985,upvarkoppa:985,varkappa:954,upvarkappa:954,varbeta:976,upvarbeta:976,Sampi:992,upSampi:992,sampi:993,upsampi:993,Stigma:986,upStigma:986,stigma:987,upstigma:987,San:1018,upSan:1018,san:1019,upsan:1019,Sho:1015,upSho:1015,sho:1016,upsho:1016,P:182,aa:176,bulletdashcirc:8887,circdashbullet:8886,downuparrows:8693,updownarrows:8645,dashdownarrow:8675,dashuparrow:8673,complement:8705,dbar:396,ddddot:8943,dddot:8943,ddots:8945,defineequal:8797,defineeq:8797,downdownharpoons:10597,downupharpoons:10607,updownharpoons:10606,upupharpoons:10595,hateq:8793,ldbrack:10214,rdbrack:10215,leadsfrom:8604,leftsquigarrow:8668,lightning:9735,napprox:8777,nasymp:8813,nequiv:8802,nsimeq:8772,nsubseteq:8840,nsubset:8836,notapprox:8777,notasymp:8813,notequiv:8802,notni:8716,notsimeq:8772,notsubseteq:8840,notsubset:8836,notsupseteq:8841,notsupset:8837,nsupset:8837,setdif:8726,simarrow:10610,t:8256,u:711,v:711,undercurvearrowright:10555,updbar:396,wwbar:8213,awointop:8754,awoint:8755,barintop:10780,barint:10779,cwintop:8753,cwint:8753,cwointop:8755,cwoint:8754,oiiintop:8752,oiiint:8752,oiintop:8751,oiint:8751,slashintop:10767,slashint:10767},F=['"',"'","`","=","~"];function q(de,I,U,H){if(2!=I){for(let oe in m)de=de.replace(new RegExp(oe,"g"),m[oe]);for(let oe in De)oe.length>2&&(de=de.replace(new RegExp(oe,"g"),"\\"+oe.slice(1)));let le="",D=!0;for(;de;){let oe=de.indexOf("#color[");if(oe<0&&D){le=de;break}if(D=!1,0!=oe&&(le+=oe<0?de:de.slice(0,oe),oe<0))break;if(oe=(de=de.slice(oe+7)).indexOf("]{"),oe<=0)break;let ge=parseInt(de.slice(0,oe));if(!Number.isInteger(ge))break;let Ee=H.getColor(ge),Ge=1;for(de=de.slice(oe+2),oe=-1;Ge&&++oe{if(!Ee||!(0,M.isStr)(Ee)||Ee.length<3)return null;let Ge=Ee.indexOf("ex");return Ge<0||Ge!==Ee.length-2?null:(Ee=parseFloat(Ee.slice(0,Ge)),Number.isFinite(Ee)?Ee*H.font.size*.5:null)},D=le(U.getAttribute("width")),oe=le(U.getAttribute("height")),ge=U.getAttribute("style");if(ge&&ge.length>18&&0==ge.indexOf("vertical-align:")){let Ee=ge.indexOf("ex;");ge=Ee>0&&Ee==ge.length-3?le(ge.slice(16,ge.length-1)):null}else ge=null;if(D=!D||D<=.5?1:Math.round(D),oe=!oe||oe<=.5?1:Math.round(oe),U.setAttribute("width",D),U.setAttribute("height",oe),U.removeAttribute("style"),!(0,M.isNodeJs)()){let Ee=(0,L.Yo)(I,"bbox");D=1.05*Ee.width,oe=1.05*Ee.height}H.valign=ge,H.scale&&de.scaleTextDrawing(Math.max(D/H.width,oe/H.height),H.draw_g)}function $(de,I,U,H,le,D){let oe=parseInt(U.attr("width")),ge=parseInt(U.attr("height"));if(Number.isInteger(ge)&&Number.isInteger(oe))D>0&&(oe/=D,ge/=D,U.attr("width",Math.round(oe)).attr("height",Math.round(ge)));else{let Tt=(0,L.Yo)(I,"bbox");oe=Tt.width||oe||100,ge=Tt.height||ge||10}D>0&&H.valign&&(H.valign=H.valign/D),null===H.valign&&(H.valign=(le-ge)/2);let Ee={x:1,y:1},Ge="x",We="y";180==H.rotate?Ee.x=Ee.y=-1:(270==H.rotate||90==H.rotate)&&(Ee.x=270==H.rotate?-1:1,Ee.y=-Ee.x,Ge="y",We="x"),"middle"==H.align[0]?H[Ge]+=Ee.x*(H.width-oe)/2:"end"==H.align[0]&&(H[Ge]+=Ee.x*(H.width-oe)),"middle"==H.align[1]?H[We]+=Ee.y*(H.height-ge)/2:"bottom"==H.align[1]?H[We]+=Ee.y*(H.height-ge):"bottom-base"==H.align[1]&&(H[We]+=Ee.y*(H.height-ge-H.valign));let et=`translate(${H.x},${H.y})`;H.rotate&&(et+=` rotate(${H.rotate})`),I.attr("transform",et).attr("visibility",null)}function ee(de,I,U){return re.apply(this,arguments)}function re(){return(re=(0,ze.Z)(function*(de,I,U){let H=q(U.text,U.latex,U.color,de),le={em:U.font.size,ex:U.font.size/2,family:U.font.name,scale:1,containerWidth:-1,lineWidth:1e5};return A().then(()=>MathJax.tex2svgPromise(H,le)).then(D=>{let oe=D.querySelector("svg");return I.append(()=>oe),T(de,I,oe,U),U.applyAttributesToMathJax=$,!0})})).apply(this,arguments)}function be(de){return he.apply(this,arguments)}function he(){return(he=(0,ze.Z)(function*(de){return A().then(()=>MathJax.typesetPromise(de?[de]:void 0))})).apply(this,arguments)}},6976:(jr,At,Me)=>{"use strict";Me.r(At),Me.d(At,{Beta:()=>yn,BetaDist:()=>gr,BetaDistI:()=>hs,BetaIncomplete:()=>Ge,BreitWigner:()=>jt,Chebyshev1:()=>bo,Chebyshev10:()=>pe,Chebyshev2:()=>ja,Chebyshev3:()=>ho,Chebyshev4:()=>Ji,Chebyshev5:()=>ma,Chebyshev6:()=>ba,Chebyshev7:()=>Sa,Chebyshev8:()=>uc,Chebyshev9:()=>st,ChebyshevN:()=>Tr,FDist:()=>$n,FDistI:()=>rn,Gamma:()=>w,GammaDist:()=>dn,Gaus:()=>Qt,Landau:()=>ee,LaplaceDist:()=>ai,LaplaceDistI:()=>nr,LogNormal:()=>Nr,Polynomial1eval:()=>Re,Polynomialeval:()=>Ve,Prob:()=>qt,Student:()=>Gi,StudentI:()=>Sr,beta:()=>I,beta_cdf_c:()=>et,beta_pdf:()=>de,beta_quantile:()=>We,breitwigner_cdf:()=>ct,breitwigner_cdf_c:()=>Je,cauchy_cdf:()=>Ye,cauchy_cdf_c:()=>je,cauchy_pdf:()=>pt,chisquared_cdf:()=>Tt,chisquared_cdf_c:()=>U,chisquared_pdf:()=>In,crystalball_cdf:()=>io,crystalball_cdf_c:()=>tl,crystalball_function:()=>$o,crystalball_pdf:()=>kl,erf:()=>ue,erfc:()=>Y,expo:()=>ao,exponential_cdf:()=>Ln,exponential_cdf_c:()=>Mn,fdistribution_cdf:()=>rn,fdistribution_cdf_c:()=>bn,fdistribution_pdf:()=>$n,gamma:()=>w,gamma_pdf:()=>tn,gamma_quantile:()=>ve,gamma_quantile_c:()=>Bt,gaus:()=>Hs,gausn:()=>Jr,gaussian_cdf:()=>P,gaussian_cdf_c:()=>R,gaussian_pdf:()=>Ht,gausxy:()=>po,getTEfficiencyBoundaryFunc:()=>Yn,igam:()=>q,igamc:()=>F,igami:()=>T,inc_beta:()=>Ee,inc_gamma:()=>be,inc_gamma_c:()=>re,incbet:()=>oe,incbi:()=>ge,landau:()=>Ms,landau_pdf:()=>$,landaun:()=>Ds,lgam:()=>ce,lgamma:()=>he,lognormal_cdf:()=>J,lognormal_cdf_c:()=>K,lognormal_pdf:()=>v,ndtri:()=>m,normal_cdf:()=>P,normal_cdf_c:()=>R,normal_pdf:()=>A,normal_quantile:()=>_,normal_quantile_c:()=>k,pseries:()=>D,stirf:()=>Z,tdistribution_cdf:()=>Ot,tdistribution_cdf_c:()=>Ct,tdistribution_pdf:()=>sn,tgamma:()=>w});const ze=11102230246251565e-32,M=-708.3964185322641,L=709.782712893384,_e=108.11685576785767,De=4503599627370496,$e=2220446049250313e-31,Ze=1.4142135623730951,Ie=3.141592653589793;function Ve(lt,mt,Rt){if(!Rt)return mt[0];let Xe=mt[0];for(let Lt=1;Lt<=Rt;++Lt)Xe=Xe*lt+mt[Lt];return Xe}function Re(lt,mt,Rt){if(!Rt)return mt[0];let Xe=lt+mt[0];for(let Lt=1;Lt=Number.MAX_VALUE||lt==Number.POSITIVE_INFINITY)return Number.POSITIVE_INFINITY;if(lt<-34)return Rt=-lt,Lt=ce(Rt),mt=Math.floor(Rt),mt==Rt||(it=Rt-mt,it>.5&&(mt+=1,it=mt-Rt),it=Rt*Math.sin(Math.PI*it),it<1e-300)?Number.POSITIVE_INFINITY:(it=Math.log(Math.PI)-Math.log(it)-Lt,it);if(lt<13){for(it=1,mt=0,Xe=lt;Xe>=3;)mt-=1,Xe=lt+mt,it*=Xe;for(;Xe<2;){if(Xe<1e-300)return Number.POSITIVE_INFINITY;it/=Xe,mt+=1,Xe=lt+mt}return it<0&&(it=-it),2==Xe?Math.log(it):(mt-=2,mt=(lt+=mt)*Ve(lt,En,5)/Re(lt,Rn,6),Math.log(it)+mt)}return lt>2556348e299?Number.POSITIVE_INFINITY:(Rt=(lt-.5)*Math.log(lt)-lt+.9189385332046728,lt>1e8||(mt=1/(lt*lt),Rt+=lt>=1e3?((.0007936507936507937*mt-.002777777777777778)*mt+.08333333333333333)/lt:Ve(mt,[.0008116141674705085,-.0005950619042843014,.0007936503404577169,-.002777777777300997,.08333333333333319],4)/lt),Rt)}function Z(lt){let mt,Rt,Xe;const it=Math.sqrt(2*Math.PI);return Rt=1/lt,Rt=1+Rt*Ve(Rt,[.0007873113957930937,-.00022954996161337813,-.0026813261780578124,.0034722222160545866,.08333333333334822],4),mt=Math.exp(lt),lt>_e?(Xe=Math.pow(lt,.5*lt-.25),mt=Xe*(Xe/mt)):mt=Math.pow(lt,lt-.5)/mt,mt=it*mt*Rt,mt}function Y(lt){let it,cn,It,Pt,En;return It=lt<0?-lt:lt,It<1?1-ue(lt):(En=-lt*lt,En<-L||(En=Math.exp(En),It<8?(it=Ve(It,[2.461969814735305e-10,.5641895648310689,7.463210564422699,48.63719709856814,196.5208329560771,526.4451949954773,934.5285271719576,1027.5518868951572,557.5353353693994],8),cn=Re(It,[13.228195115474499,86.70721408859897,354.9377788878199,975.7085017432055,1823.9091668790973,2246.3376081871097,1656.6630919416134,557.5353408177277],8)):(it=Ve(It,[.5641895835477551,1.275366707599781,5.019050422511805,6.160210979930536,7.4097426995044895,2.9788666537210022],5),cn=Re(It,[2.2605286322011726,9.396035249380015,12.048953980809666,17.08144507475659,9.608968090632859,3.369076451000815],6)),Pt=En*it/cn,lt<0&&(Pt=2-Pt),0==Pt)?lt<0?2:0:Pt)}function ue(lt){if(Math.abs(lt)>1)return 1-Y(lt);let Xe=lt*lt;return lt*Ve(Xe,[9.604973739870516,90.02601972038427,2232.005345946843,7003.325141128051,55592.30130103949],4)/Re(Xe,[33.56171416475031,521.3579497801527,4594.323829709801,22629.000061389095,49267.39426086359],5)}function K(lt,mt,Rt,Xe){void 0===Xe&&(Xe=0);let Lt=(Math.log(lt-Xe)-mt)/(Rt*Ze);return Lt>1?.5*Y(Lt):.5*(1-ue(Lt))}function J(lt,mt,Rt,Xe=0){let Lt=(Math.log(lt-Xe)-mt)/(Rt*Ze);return Lt<-1?.5*Y(-Lt):.5*(1+ue(Lt))}function R(lt,mt,Rt=0){let Xe=(lt-Rt)/(mt*Ze);return Xe>1?.5*Y(Xe):.5*(1-ue(Xe))}function P(lt,mt,Rt=0){let Xe=(lt-Rt)/(mt*Ze);return Xe<-1?Y(-Xe):.5*(1+ue(Xe))}function v(lt,mt,Rt,Xe=0){if(lt-Xe<=0)return 0;let Lt=(Math.log(lt-Xe)-mt)/Rt;return 1/((lt-Xe)*Math.abs(Rt)*Math.sqrt(2*Ie))*Math.exp(-Lt*Lt/2)}function A(lt,mt=1,Rt=0){let Xe=(lt-Rt)/mt;return 1/(Math.sqrt(2*Ie)*Math.abs(mt))*Math.exp(-Xe*Xe/2)}function w(lt){let mt,Rt,Xe,Lt,it=1;if(lt>=Number.MAX_VALUE)return lt;if(Rt=Math.abs(lt),Rt>33){if(lt<0){if(mt=Math.floor(Rt),mt==Rt)return Number.POSITIVE_INFINITY;if(Lt=Math.round(mt),1&Lt||(it=-1),Xe=Rt-mt,Xe>.5&&(mt+=1,Xe=Rt-mt),Xe=Rt*Math.sin(Math.PI*Xe),0==Xe)return it>0?Number.POSITIVE_INFINITY:Number.NEGATIVE_INFINITY;Xe=Math.abs(Xe),Xe=Math.PI/(Xe*Z(Rt))}else Xe=Z(lt);return it*Xe}for(Xe=1;lt>=3;)Xe*=lt-=1;let cn=!1;for(;lt<0&&!cn;)lt>-1e-9?cn=!0:(Xe/=lt,lt+=1);for(;lt<2&&!cn;)lt<1e-9?cn=!0:(Xe/=lt,lt+=1);return cn?0==lt?Number.POSITIVE_INFINITY:Xe/((1+.5772156649015329*lt)*lt):2==lt?Xe:(mt=Ve(lt-=2,[.00016011952247675185,.0011913514700658638,.010421379756176158,.04763678004571372,.20744822764843598,.4942148268014971,1],6),Rt=Ve(lt,[-23158187332412014e-21,.0005396055804933034,-.004456419138517973,.011813978522206043,.035823639860549865,-.23459179571824335,.0714304917030273,1],7),Xe*mt/Rt)}function m(lt){if(lt<=0)return Number.NEGATIVE_INFINITY;if(lt>=1)return Number.POSITIVE_INFINITY;const Pt=.1353352832366127;let qi,kn,ii,lr,ar,En=1,Rn=lt;return Rn>1-Pt&&(Rn=1-Rn,En=0),Rn>Pt?(Rn-=.5,ii=Rn*Rn,qi=Rn+Rn*(ii*Ve(ii,[-59.96335010141079,98.00107541859997,-56.67628574690703,13.931260938727968,-1.2391658386738125],4)/Re(ii,[1.9544885833814176,4.676279128988815,86.36024213908905,-225.46268785411937,200.26021238006066,-82.03722561683334,15.90562251262117,-1.1833162112133],8)),qi*=2.5066282746310007,qi):(qi=Math.sqrt(-2*Math.log(Rn)),lr=qi-Math.log(qi)/qi,kn=1/qi,ar=qi<8?kn*Ve(kn,[4.0554489230596245,31.525109459989388,57.16281922464213,44.08050738932008,14.684956192885803,2.1866330685079025,-.1402560791713545,-.03504246268278482,-.0008574567851546854],8)/Re(kn,[15.779988325646675,45.39076351288792,41.3172038254672,15.04253856929075,2.504649462083094,-.14218292285478779,-.03808064076915783,-.0009332594808954574],8):kn*Ve(kn,[3.2377489177694603,6.915228890689842,3.9388102529247444,1.3330346081580755,.20148538954917908,.012371663481782003,.00030158155350823543,26580697468673755e-22,6.239745391849833e-9],8)/Re(kn,[6.02427039364742,3.6798356385616087,1.3770209948908132,.21623699359449663,.013420400608854318,.00032801446468212774,28924786474538068e-22,6.790194080099813e-9],8),qi=lr-ar,0!=En&&(qi=-qi),qi)}function _(lt,mt){return mt*m(lt)}function k(lt,mt){return-mt*m(lt)}function F(lt,mt){if(lt<=0)return 0;if(mt<=0)return 1;if(mt<1||mtDe&&(cn*=$e,Pt*=$e,It*=$e,En*=$e)}while(ii>ze);return Rn*Rt}function q(lt,mt){if(lt<=0)return 1;if(mt<=0)return 0;if(mt>1&&mt>lt)return 1-F(lt,mt);let Rt=lt*Math.log(mt)-mt-ce(lt);if(Rt<-L)return 0;Rt=Math.exp(Rt);let Xe=lt,Lt=1,it=1;do{Xe+=1,Lt*=mt/Xe,it+=Lt}while(Lt/it>ze);return it*Rt/lt}function T(lt,mt){if(lt<=0)return console.error("igami : Wrong domain for parameter a (must be > 0)"),0;if(mt<=0)return Number.POSITIVE_INFINITY;if(mt>=1)return 0;const Rt=Number.MAX_VALUE;let it,Pt,En,Rn,kn,ii,Xe=Rt,Lt=0,cn=0,It=1,qi=5*ze;for(En=1/(9*lt),Pt=1-En-m(mt)*Math.sqrt(En),it=lt*Pt*Pt*Pt,Rn=ce(lt),kn=0;kn<10&&!(it>Xe||itIt)||(Pt=mt?(Lt=it,It=Pt,ii<0?(ii=0,En=.5):En=ii>1?.5*En+.5:(mt-cn)/(It-cn),ii+=1):(Xe=it,cn=Pt,ii>0?(ii=0,En=.5):ii<-1?En*=.5:En=(mt-cn)/(It-cn),ii-=1);return it}function $(lt,mt,Rt=0){if(mt<=0)return 0;const Xe=(lt-Rt)/mt;let Lt,it,cn,It;const Pt=[.4259894875,-.124976255,.039842437,-.006298287635,.001511162253],En=[1,-.3388260629,.09594393323,-.01608042283,.003778942063],Rn=[.1788541609,.1173957403,.01488850518,-.001394989411,.0001283617211],qi=[1,.7428795082,.3153932961,.06694219548,.008790609714],kn=[.1788544503,.09359161662,.006325387654,6611667319e-14,-2031049101e-15],ii=[1,.6097809921,.2560616665,.04746722384,.006957301675],lr=[.9874054407,118.6723273,849.279436,-743.7792444,427.0262186],ar=[1,106.8615961,337.6496214,2016.712389,1597.063511],$i=[1.003675074,167.5702434,4789.711289,21217.86767,-22324.9491],rs=[1,156.9424537,3745.310488,9834.698876,66924.28357],qs=[1.000827619,664.9143136,62972.92665,475554.6998,-5743609.109],na=[1,651.4101098,56974.73333,165917.4725,-2815759.939],xo=[.04166666667,-.01996527778,.02709538966],fi=[-1.84556867,-4.284640743];if(Xe<-5.5){if(Lt=Math.exp(Xe+1),Lt<1e-10)return 0;it=Math.exp(-1/Lt),cn=Math.sqrt(Lt),It=it/cn*.3989422803*(1+(xo[0]+(xo[1]+xo[2]*Lt)*Lt)*Lt)}else Xe<-1?(Lt=Math.exp(-Xe-1),It=Math.exp(-Lt)*Math.sqrt(Lt)*(Pt[0]+(Pt[1]+(Pt[2]+(Pt[3]+Pt[4]*Xe)*Xe)*Xe)*Xe)/(En[0]+(En[1]+(En[2]+(En[3]+En[4]*Xe)*Xe)*Xe)*Xe)):Xe<1?It=(Rn[0]+(Rn[1]+(Rn[2]+(Rn[3]+Rn[4]*Xe)*Xe)*Xe)*Xe)/(qi[0]+(qi[1]+(qi[2]+(qi[3]+qi[4]*Xe)*Xe)*Xe)*Xe):Xe<5?It=(kn[0]+(kn[1]+(kn[2]+(kn[3]+kn[4]*Xe)*Xe)*Xe)*Xe)/(ii[0]+(ii[1]+(ii[2]+(ii[3]+ii[4]*Xe)*Xe)*Xe)*Xe):Xe<12?(Lt=1/Xe,It=Lt*Lt*(lr[0]+(lr[1]+(lr[2]+(lr[3]+lr[4]*Lt)*Lt)*Lt)*Lt)/(ar[0]+(ar[1]+(ar[2]+(ar[3]+ar[4]*Lt)*Lt)*Lt)*Lt)):Xe<50?(Lt=1/Xe,It=Lt*Lt*($i[0]+($i[1]+($i[2]+($i[3]+$i[4]*Lt)*Lt)*Lt)*Lt)/(rs[0]+(rs[1]+(rs[2]+(rs[3]+rs[4]*Lt)*Lt)*Lt)*Lt)):Xe<300?(Lt=1/Xe,It=Lt*Lt*(qs[0]+(qs[1]+(qs[2]+(qs[3]+qs[4]*Lt)*Lt)*Lt)*Lt)/(na[0]+(na[1]+(na[2]+(na[3]+na[4]*Lt)*Lt)*Lt)*Lt)):(Lt=1/(Xe-Xe*Math.log(Xe)/(Xe+1)),It=Lt*Lt*(1+(fi[0]+fi[1]*Lt)*Lt));return It/mt}function ee(lt,mt,Rt,Xe){if(Rt<=0)return 0;const Lt=$((lt-mt)/Rt,1,0);return Xe?Lt/Rt:Lt}function re(lt,mt){return F(lt,mt)}function be(lt,mt){return q(lt,mt)}function he(lt){return ce(lt)}function de(lt,mt,Rt){if(lt<0||lt>1)return 0;if(0==lt){if(mt<1)return Number.POSITIVE_INFINITY;if(mt>1)return 0;if(1==mt)return Rt}if(1==lt){if(Rt<1)return Number.POSITIVE_INFINITY;if(Rt>1)return 0;if(1==Rt)return mt}return Math.exp(he(mt+Rt)-he(mt)-he(Rt)+Math.log(lt)*(mt-1)+Math.log1p(-lt)*(Rt-1))}function I(lt,mt){return Math.exp(he(lt)+he(mt)-he(lt+mt))}function U(lt,mt,Rt=0){return re(.5*mt,.5*(lt-Rt))}function D(lt,mt,Rt){let Xe,Lt,it,cn,It,Pt,En,Rn;for(Rn=1/lt,it=(1-mt)*Rt,cn=it/(lt+1),Pt=cn,Lt=it,It=2,Xe=0,En=ze*Rn;Math.abs(cn)>En;)it=(It-mt)*Rt/It,Lt*=it,cn=Lt/(lt+It),Xe+=cn,It+=1;return Xe+=Pt,Xe+=Rn,it=lt*Math.log(Rt),lt+mt<_e&&Math.abs(it)=1?1:(Rn=0,Pt=1-Rt,Rt>lt/(lt+mt)?(Rn=1,Xe=mt,Lt=lt,It=Rt,cn=Pt):(Xe=lt,Lt=mt,It=Pt,cn=Rt),1==Rn&&Lt*cn<=1&&cn<=.95?it=D(Xe,Lt,cn):(En=cn*(Xe+Lt-2)-(Xe-1),Pt=En<0?function H(lt,mt,Rt){let Xe,Lt,it,cn,It,Pt,En,Rn,qi,kn,ii,lr,ar,$i,rs,qs,na,xo,fi,yl;Rn=lt,qi=lt+mt,kn=lt,ii=lt+1,lr=1,ar=mt-1,$i=ii,rs=lt+2,cn=0,En=1,it=1,Pt=1,xo=1,qs=1,yl=0,fi=3*ze;do{if(Xe=-Rt*Rn*qi/(kn*ii),Lt=it+cn*Xe,It=Pt+En*Xe,cn=it,it=Lt,En=Pt,Pt=It,Xe=Rt*lr*ar/($i*rs),Lt=it+cn*Xe,It=Pt+En*Xe,cn=it,it=Lt,En=Pt,Pt=It,0!=It&&(qs=Lt/It),0!=qs?(na=Math.abs((xo-qs)/qs),xo=qs):na=1,na<33306690738754696e-32)break;Rn+=1,qi+=1,kn+=2,ii+=2,lr+=1,ar-=1,$i+=2,rs+=2,Math.abs(It)+Math.abs(Lt)>De&&(cn*=$e,it*=$e,En*=$e,Pt*=$e),(Math.abs(It)<$e||Math.abs(Lt)<$e)&&(cn*=De,it*=De,En*=De,Pt*=De)}while(++yl<300);return xo}(Xe,Lt,cn):function le(lt,mt,Rt){let Xe,Lt,it,cn,It,Pt,En,Rn,qi,kn,ii,lr,ar,$i,rs,qs,na,xo,fi,yl,Or;Rn=lt,qi=mt-1,kn=lt,ii=lt+1,lr=1,ar=lt+mt,$i=lt+1,rs=lt+2,cn=0,En=1,it=1,Pt=1,fi=Rt/(1-Rt),xo=1,qs=1,Or=0,yl=3*ze;do{if(Xe=-fi*Rn*qi/(kn*ii),Lt=it+cn*Xe,It=Pt+En*Xe,cn=it,it=Lt,En=Pt,Pt=It,Xe=fi*lr*ar/($i*rs),Lt=it+cn*Xe,It=Pt+En*Xe,cn=it,it=Lt,En=Pt,Pt=It,0!=It&&(qs=Lt/It),0!=qs?(na=Math.abs((xo-qs)/qs),xo=qs):na=1,na<33306690738754696e-32)break;Rn+=1,qi-=1,kn+=2,ii+=2,lr+=1,ar+=1,$i+=2,rs+=2,Math.abs(It)+Math.abs(Lt)>De&&(cn*=$e,it*=$e,En*=$e,Pt*=$e),(Math.abs(It)<$e||Math.abs(Lt)<$e)&&(cn*=De,it*=De,En*=De,Pt*=De)}while(++Or<300);return xo}(Xe,Lt,cn)/It,En=Xe*Math.log(cn),it=Lt*Math.log(It),Xe+Lt<_e&&Math.abs(En)(na&&(Pt=Pt<=ze?1-ze:1-Pt),Pt);if(qs=0,Rt<=0)return 0;if(Rt>=1)return 1;if(En=0,ar=0,Rn=1,$i=1,fi=0,lt<=1||mt<=1)lr=1e-6,na=0,Xe=lt,Lt=mt,it=Rt,Pt=Xe/(Xe+Lt),It=oe(Xe,Lt,Pt);else{if(lr=1e-4,kn=-m(Rt),Rt>.5?(na=1,Xe=mt,Lt=lt,it=1-Rt,kn=-kn):(na=0,Xe=lt,Lt=mt,it=Rt),qi=(kn*kn-3)/6,Pt=2/(1/(2*Xe-1)+1/(2*Lt-1)),cn=kn*Math.sqrt(Pt+qi)/Pt-(1/(2*Lt-1)-1/(2*Xe-1))*(qi+5/6-2/(3*Pt)),cn*=2,cn0;){for(;yl;){for(xo=0,ii=.5,qs=0;qs<100;qs++){if(0!=qs){if(Pt=En+ii*(Rn-En),1==Pt&&(Pt=1-ze),0==Pt&&(ii=.5,Pt=En+ii*(Rn-En),0==Pt))return Or();if(It=oe(Xe,Lt,Pt),kn=(Rn-En)/(Rn+En),Math.abs(kn)3?1-(1-ii)*(1-ii):xo>1?.5*ii+.5:(it-It)/($i-ar),xo+=1,En>.75){1==na?(na=0,Xe=lt,Lt=mt,it=Rt):(na=1,Xe=mt,Lt=lt,it=1-Rt),Pt=1-Pt,It=oe(Xe,Lt,Pt),En=0,ar=0,Rn=1,$i=1;continue}}else{if(Rn=Pt,1==na&&Rn0?(xo=0,ii=.5):xo<-3?ii*=ii:xo<-1?ii*=.5:ii=(It-it)/($i-ar),xo-=1}}if(En>=1)return Pt=1-ze,Or();if(Pt<=0)return Pt=0,Or();break}if(yl=!0,fi)return Or();for(fi=1,qi=ce(Xe+Lt)-ce(Xe)-ce(Lt),qs=0;qs<8&&(0!=qs&&(It=oe(Xe,Lt,Pt)),It$i?(Pt=Rn,It=$i):ItL||(cn=Math.exp(cn),cn=(It-it)/cn,rs=Pt-cn,rs<=En&&(It=(Pt-En)/(Rn-En),rs=En+.5*It*(Pt-En),rs<=0))||rs>=Rn&&(It=(Rn-Pt)/(Rn-En),rs=Rn-.5*It*(Rn-Pt),rs>=1))break;if(Pt=rs,Math.abs(cn/Pt)<128*ze)return Or()}lr=256*ze}return Or()}function Ee(lt,mt,Rt){return oe(mt,Rt,lt)}const Ge=Ee;function We(lt,mt,Rt){return ge(mt,Rt,lt)}function et(lt,mt,Rt){return Ee(1-lt,Rt,mt)}function Tt(lt,mt,Rt=0){return be(.5*mt,.5*(lt-Rt))}function Bt(lt,mt,Rt){return Rt*T(mt,lt)}function ve(lt,mt,Rt){return Rt*T(mt,1-lt)}function Je(lt,mt,Rt=0){return.5-Math.atan(2*(lt-Rt)/mt)/Ie}function ct(lt,mt,Rt=0){return.5+Math.atan(2*(lt-Rt)/mt)/Ie}function je(lt,mt,Rt=0){return.5-Math.atan((lt-Rt)/mt)/Ie}function Ye(lt,mt,Rt=0){return.5+Math.atan((lt-Rt)/mt)/Ie}function pt(lt,mt=1,Rt=0){return mt/(Ie*((lt-Rt)*(lt-Rt)+mt*mt))}function Ht(lt,mt=1,Rt=0){let Xe=(lt-Rt)/mt;return 1/(Math.sqrt(2*Ie)*Math.abs(mt))*Math.exp(-Xe*Xe/2)}function tn(lt,mt,Rt,Xe=0){return lt-Xe<0?0:lt-Xe==0?1==mt?1/Rt:0:1==mt?Math.exp(-(lt-Xe)/Rt)/Rt:Math.exp((mt-1)*Math.log((lt-Xe)/Rt)-(lt-Xe)/Rt-he(mt))/Rt}function Ct(lt,mt,Rt=0){let Xe=lt-Rt,Lt=Xe>0?1:-1;return.5-.5*Ee(Xe*Xe/(mt+Xe*Xe),.5,.5*mt)*Lt}function Ot(lt,mt,Rt=0){let Xe=lt-Rt,Lt=Xe>0?1:-1;return.5+.5*Ee(Xe*Xe/(mt+Xe*Xe),.5,.5*mt)*Lt}function sn(lt,mt,Rt=0){return Math.exp(he((mt+1)/2)-he(mt/2))/Math.sqrt(Ie*mt)*Math.pow(1+(lt-Rt)*(lt-Rt)/mt,-(mt+1)/2)}function Mn(lt,mt,Rt=0){return lt-Rt<0?1:Math.exp(-mt*(lt-Rt))}function Ln(lt,mt,Rt=0){return lt-Rt<0?0:-Math.expm1(-mt*(lt-Rt))}function In(lt,mt,Rt=0){return lt-Rt<0?0:lt==Rt&&0==mt/2-1?.5:Math.exp((mt/2-1)*Math.log((lt-Rt)/2)-(lt-Rt)/2-he(mt/2))/2}function $n(lt,mt,Rt,Xe=0){return mt<0||Rt<0?Number.NaN:lt-Xe<0?0:Math.exp(mt/2*Math.log(mt)+Rt/2*Math.log(Rt)+he((mt+Rt)/2)-he(mt/2)-he(Rt/2)+(mt/2-1)*Math.log(lt-Xe)-(mt+Rt)/2*Math.log(Rt+mt*(lt-Xe)))}function bn(lt,mt,Rt,Xe=0){return mt<0||Rt<0?Number.NaN:Rt/(Rt+mt*(lt-Xe))>.9&&mt>1&&Rt>1?1-rn(lt,mt,Rt,Xe):Ee(Rt/(Rt+mt*(lt-Xe)),.5*Rt,.5*mt)}function rn(lt,mt,Rt,Xe=0){if(mt<0||Rt<0)return Number.NaN;let Lt=mt*(lt-Xe)/(Rt+mt*(lt-Xe));return Lt>.9&&mt>1&&Rt>1?1-bn(lt,mt,Rt,Xe):Ee(Lt,.5*mt,.5*Rt)}function qt(lt,mt){return mt<=0?0:lt<=0?lt<0?0:1:U(lt,mt,0)}function Qt(lt,mt,Rt){return Math.exp(-.5*Math.pow((lt-mt)/Rt,2))}function jt(lt,mt,Rt){return Rt/((lt-mt)*(lt-mt)+Rt*Rt/4)/2/Math.PI}function yn(lt,mt){return Math.exp(he(lt)+he(mt)-he(lt+mt))}function dn(lt,mt,Rt=0,Xe=1){return lt0?1-.5*Ge(Rt/(Rt+lt*lt),.5*Rt,.5):.5*Ge(Rt/(Rt+lt*lt),.5*Rt,.5)}function Nr(lt,mt,Rt=0,Xe=1){return lt1||mt<=0||Rt<=0)return 0;let Xe=yn(mt,Rt);return Math.pow(lt,mt-1)*Math.pow(1-lt,Rt-1)/Xe}function hs(lt,mt,Rt){return lt<0||lt>1||mt<=0||Rt<=0?0:Ge(lt,mt,Rt)}function Hs(lt,mt,Rt){return lt.GetParValue(Rt+0)*Math.exp(-.5*Math.pow((mt-lt.GetParValue(Rt+1))/lt.GetParValue(Rt+2),2))}function Jr(lt,mt,Rt){return Hs(lt,mt,Rt)/(Math.sqrt(2*Math.PI)*lt.GetParValue(Rt+2))}function po(lt,mt,Rt,Xe){return lt.GetParValue(Xe+0)*Math.exp(-.5*Math.pow((mt-lt.GetParValue(Xe+1))/lt.GetParValue(Xe+2),2))*Math.exp(-.5*Math.pow((Rt-lt.GetParValue(Xe+3))/lt.GetParValue(Xe+4),2))}function ao(lt,mt,Rt){return Math.exp(lt.GetParValue(Rt+0)+lt.GetParValue(Rt+1)*mt)}function Ms(lt,mt,Rt){return ee(mt,lt.GetParValue(Rt+1),lt.GetParValue(Rt+2),!1)}function Ds(lt,mt,Rt){return ee(mt,lt.GetParValue(Rt+1),lt.GetParValue(Rt+2),!0)}function $o(lt,mt,Rt,Xe,Lt=0){if(Xe<0)return 0;let it=(lt-Lt)/Xe;mt<0&&(it=-it);let cn=Math.abs(mt);if(it>-cn)return Math.exp(-.5*it*it);let It=Rt/cn;return Math.exp(-.5*cn*cn)*Math.pow(It/(It-cn-it),Rt)}function kl(lt,mt,Rt,Xe,Lt=0){if(Xe<0)return 0;if(Rt<=1)return Number.NaN;let it=Math.abs(mt);return 1/(Xe*(Rt/it*1/(Rt-1)*Math.exp(-mt*mt/2)+Math.sqrt(Ie/2)*(1+ue(it/Math.sqrt(2)))))*$o(lt,mt,Rt,Xe,Lt)}function Ao(lt,mt,Rt,Xe,Lt=0){if(0==Xe||0==mt)return 0;let it=1==Rt,cn=(lt-Lt)/Xe;mt<0&&(cn=-cn);let It=Math.abs(mt),Pt=0,En=0;const Rn=Math.sqrt(Ie/2),qi=Math.sqrt(2*Ie),kn=1/Math.sqrt(2);if(cn<=-It){let ii=Math.pow(Rt/It,Rt)*Math.exp(-.5*mt*mt),lr=Rt/It-It;En=it?-ii*Math.log(Rt/It)+ii*Math.log(lr-cn):Rt/It*(1/(Rt-1))*Math.exp(-mt*mt/2)-ii/(Rt-1)*Math.pow(lr-cn,1-Rt),Pt=Rn*(1+ue(It*kn))}else Pt=R(cn,1),Pt*=qi,En=0;return Xe*(Pt+En)}function io(lt,mt,Rt,Xe,Lt=0){if(Rt<=1)return Number.NaN;let it=Math.abs(mt),Pt=Xe*(Rt/it*1/(Rt-1)*Math.exp(-mt*mt/2)+Math.sqrt(Ie/2)*(1+ue(it/Math.sqrt(2)))),En=Ao(lt,mt,Rt,Xe,Lt);return mt>0?1-En/Pt:En/Pt}function tl(lt,mt,Rt,Xe,Lt=0){if(Rt<=1)return Number.NaN;let it=Math.abs(mt),Pt=Xe*(Rt/it*1/(Rt-1)*Math.exp(-mt*mt/2)+Math.sqrt(Ie/2)*(1+ue(it/Math.sqrt(2)))),En=Ao(lt,mt,Rt,Xe,Lt);return mt>0?En/Pt:1-En/Pt}function Tr(lt,mt,Rt){let Xe=0,Lt=0,it=2*mt;for(let cn=lt;cn>=1;cn--){let It=Xe;Xe=it*Xe-Lt+Rt[cn],Lt=It}return mt*Xe-Lt+Rt[0]}function bo(lt,mt,Rt){return mt+Rt*lt}function ja(lt,mt,Rt,Xe){return mt+Rt*lt+Xe*(2*lt*lt-1)}function ho(lt,...mt){return Tr(3,lt,mt)}function Ji(lt,...mt){return Tr(4,lt,mt)}function ma(lt,...mt){return Tr(5,lt,mt)}function ba(lt,...mt){return Tr(6,lt,mt)}function Sa(lt,...mt){return Tr(7,lt,mt)}function uc(lt,...mt){return Tr(8,lt,mt)}function st(lt,...mt){return Tr(9,lt,mt)}function pe(lt,...mt){return Tr(10,lt,mt)}function rt(lt,mt,Rt,Xe){let Lt=(1-Rt)/2;return Xe?mt==lt?1:We(1-Lt,mt+1,lt-mt):0==mt?0:We(Lt,mt,lt-mt+1)}function ot(lt,mt,Rt,Xe){if(0==lt)return Xe?1:0;let it=mt/lt,It=_(1-(1-Rt)/2,Math.sqrt(it*(1-it)/lt));return Xe?it+It>1?1:it+It:it-It<0?0:it-It}function xt(lt,mt,Rt,Xe){if(0==lt)return Xe?1:0;let it=mt/lt,cn=_(1-(1-Rt)/2,1),It=(mt+.5*cn*cn)/(lt+cn*cn),Pt=cn/(lt+cn*cn)*Math.sqrt(lt*it*(1-it)+cn*cn/4);return Xe?It+Pt>1?1:It+Pt:It-Pt<0?0:It-Pt}function fn(lt,mt,Rt,Xe){let it=_(1-(1-Rt)/2,1),cn=(mt+.5*it*it)/(lt+it*it),It=it*Math.sqrt(cn*(1-cn)/(lt+it*it));return Xe?cn+It>1?1:cn+It:cn-It<0?0:cn-It}function pn(lt,mt,Rt,Xe){const cn=(1-Rt)/2;let Pt=0,En=1,Rn=0;if(mt>0&&mt<1){let qi=pn(lt,0,Rt,Xe);return Rn=(pn(lt,1,Rt,Xe)-qi)*mt+qi,Rn}for(;Math.abs(En-Pt)>1e-9;){Rn=(Pt+En)/2;let qi=.5*de(Rn,mt+1,lt-mt+1)/(lt+1);mt-1>=0&&(qi+=et(Rn,mt,lt-mt+1)),qi>(Xe?cn:1-cn)?Pt=Rn:En=Rn}return Rn}function Wn(lt,mt,Rt,Xe,Lt,it){let cn=mt+Lt,It=lt-mt+it;return Xe?cn>0&&It>0?We((1+Rt)/2,cn,It):1:cn>0&&It>0?We((1-Rt)/2,cn,It):0}function Yn(lt,mt){if(mt)return Wn;switch(lt){case 0:return rt;case 1:return ot;case 2:return xt;case 3:return fn;case 4:return console.log("Feldman-Cousins interval kFFC not supported; using kFCP"),rt;case 8:return pn}return console.log(`Not recognized stat option ${lt}, using kFCP`),rt}},9542:(jr,At,Me)=>{"use strict";Me.r(At),Me.d(At,{BIT:()=>F,_ensureJSROOT:()=>mt,addMethods:()=>$,atob_func:()=>Y,browser:()=>K,btoa_func:()=>ue,clTAttCanvas:()=>hs,clTAttFill:()=>Je,clTAttLine:()=>ve,clTAttMarker:()=>ct,clTAttText:()=>je,clTAxis:()=>po,clTBox:()=>dn,clTCanvas:()=>gr,clTClonesArray:()=>Bt,clTColor:()=>jt,clTCutG:()=>tn,clTF1:()=>kl,clTF2:()=>Ao,clTGaxis:()=>Hs,clTGeoNode:()=>bo,clTGeoNodeMatrix:()=>ja,clTGeoVolume:()=>Tr,clTGraph:()=>pt,clTGraphPolargram:()=>Ct,clTGraphTime:()=>Ot,clTH1:()=>Ms,clTH2:()=>Ds,clTH3:()=>$o,clTHashList:()=>We,clTLatex:()=>qt,clTLegend:()=>In,clTLegendEntry:()=>$n,clTLine:()=>yn,clTList:()=>Ge,clTMap:()=>et,clTMathText:()=>Qt,clTMultiGraph:()=>Ht,clTNamed:()=>oe,clTObjArray:()=>Tt,clTObjString:()=>Ee,clTObject:()=>D,clTPad:()=>Nr,clTPaletteAxis:()=>bn,clTPave:()=>sn,clTPaveStats:()=>Ln,clTPaveText:()=>Mn,clTPolyLine:()=>ai,clTPolyLine3D:()=>nr,clTPolyMarker3D:()=>Gi,clTProfile:()=>io,clTProfile2D:()=>tl,clTString:()=>ge,clTStyle:()=>ao,clTText:()=>rn,clone:()=>q,constants:()=>R,create:()=>Ji,createHistogram:()=>ma,createHttpRequest:()=>U,createTGraph:()=>Sa,createTHStack:()=>uc,createTMultiGraph:()=>st,createTPolyLine:()=>ba,decodeUrl:()=>he,findFunction:()=>de,gStyle:()=>v,getDocument:()=>A,getMethods:()=>rt,getPromise:()=>lt,httpRequest:()=>H,injectCode:()=>w,internals:()=>Ze,isArrayProto:()=>J,isBatchMode:()=>Re,isFunc:()=>pn,isNodeJs:()=>Z,isObject:()=>fn,isPromise:()=>Yn,isRootCollection:()=>xt,isStr:()=>Wn,kNoZoom:()=>ho,loadScript:()=>_,parse:()=>ee,parseMulti:()=>re,registerMethods:()=>ot,setBatchMode:()=>ce,settings:()=>P,source_dir:()=>De,toJSON:()=>be,version:()=>_e,version_date:()=>L,version_id:()=>M});var ze=Me(4788);let M="7.3.0",L="15/12/2022",_e=M+" "+L,De="",$e=!!("object"==typeof process&&fn(process.versions)&&process.versions.node&&process.versions.v8),Ze={id_counter:1};const Ie="file:///home/ginpachi/projects/phoenix/node_modules/jsroot/modules/core.mjs";if(Ie&&Wn(Ie)){const Xe=Ie.indexOf("modules/core.mjs");Xe>=0?(De=Ie.slice(0,Xe),console.log(`Set jsroot source_dir to ${De}, ${_e}`)):(console.log(`jsroot bundle, ${_e}`),Ze.ignore_v6=!0)}let Ve=$e;function Re(){return Ve}function ce(Xe){Ve=!!Xe}function Z(){return $e}const Y=Z()?Xe=>Buffer.from(Xe,"base64").toString("latin1"):globalThis?.atob,ue=Z()?Xe=>Buffer.from(Xe,"latin1").toString("base64"):globalThis?.btoa;let K={isFirefox:!0,isSafari:!1,isChrome:!1,isWin:!1,touches:!1};function J(Xe){if(Xe.length<14||0!=Xe.indexOf("[object "))return 0;let Lt=Xe.indexOf("Array]");return Lt<0||Lt!=Xe.length-6?0:14==Xe.length?1:2}typeof document<"u"&&typeof window<"u"&&typeof navigator<"u"&&(K.isFirefox=navigator.userAgent.indexOf("Firefox")>=0||typeof InstallTrigger<"u",K.isSafari=Object.prototype.toString.call(window.HTMLElement).indexOf("Constructor")>0,K.isChrome=!!window.chrome,K.isChromeHeadless=navigator.userAgent.indexOf("HeadlessChrome")>=0,K.chromeVersion=K.isChrome||K.isChromeHeadless?parseInt(navigator.userAgent.match(/Chrom(?:e|ium)\/([0-9]+)\.([0-9]+)\.([0-9]+)\.([0-9]+)/)[1]):0,K.isWin=navigator.userAgent.indexOf("Windows")>=0,K.touches="ontouchend"in document);let R={Render3D:{Default:0,WebGL:1,WebGLImage:2,SVG:3,fromString(Xe){return"webgl"===Xe||"gl"==Xe?this.WebGL:"img"===Xe?this.WebGLImage:"svg"===Xe?this.SVG:this.Default}},Embed3D:{NoEmbed:-1,Default:0,Overlay:1,Embed:2,EmbedSVG:3,fromString(Xe){return"embed"===Xe?this.Embed:"overlay"===Xe?this.Overlay:this.Default}},Latex:{Off:0,Symbols:1,Normal:2,MathJax:3,AlwaysMathJax:4,fromString(Xe){if(!Xe||!Wn(Xe))return this.Normal;switch(Xe){case"off":return this.Off;case"symbols":return this.Symbols;case"normal":case"latex":case"exp":case"experimental":return this.Normal;case"MathJax":case"mathjax":case"math":return this.MathJax;case"AlwaysMathJax":case"alwaysmath":case"alwaysmathjax":return this.AlwaysMathJax}let Lt=parseInt(Xe);return Number.isInteger(Lt)&&Lt>=this.Off&&Lt<=this.AlwaysMathJax?Lt:this.Normal}}},P={Render3D:R.Render3D.Default,Render3DBatch:R.Render3D.Default,Embed3D:R.Embed3D.Default,Tooltip:!0,TooltipAnimation:500,ContextMenu:!0,Zooming:!0,ZoomMouse:!0,ZoomWheel:!0,ZoomTouch:!0,MoveResize:!0,HandleKeys:!0,DragAndDrop:!0,DragGraphs:!0,ProgressBox:!0,ToolBar:"popup",ToolBarSide:"left",ToolBarVert:!1,CanEnlarge:!0,CanAdjustFrame:!1,ApproxTextSize:!1,OptimizeDraw:1,AutoStat:!0,FrameNDC:{fX1NDC:.07,fY1NDC:.12,fX2NDC:.95,fY2NDC:.88},SmallPad:{width:150,height:100},Palette:57,Latex:R.Latex.Normal,GeoGradPerSegm:6,GeoCompressComp:!0,IgnoreUrlOptions:!1,HierarchyLimit:250,XValuesFormat:void 0,YValuesFormat:void 0,ZValuesFormat:void 0,HandleWrongHttpResponse:!1,UseStamp:!0,MaxRanges:200,SkipStreamerInfos:!1,OnlyLastCycle:!1,DarkMode:!1,PreferSavedPoints:!1};$e&&Object.assign(P,{ToolBar:!1,Tooltip:0,ContextMenu:!1,Zooming:!1,MoveResize:!1,DragAndDrop:!1,ProgressBox:!1});let v={fName:"Modern",fOptLogx:0,fOptLogy:0,fOptLogz:0,fOptDate:0,fOptFile:0,fDateX:.01,fDateY:.01,fOptTitle:1,fCanvasColor:0,fPadColor:0,fPadBottomMargin:.1,fPadTopMargin:.1,fPadLeftMargin:.1,fPadRightMargin:.1,fPadGridX:!1,fPadGridY:!1,fPadTickX:0,fPadTickY:0,fStatColor:0,fStatStyle:1e3,fStatTextColor:1,fStatFontSize:0,fStatFont:42,fStatBorderSize:1,fStatFormat:"6.4g",fStatX:.98,fStatY:.935,fStatW:.2,fStatH:.16,fTitleAlign:23,fTitleColor:0,fTitleTextColor:1,fTitleBorderSize:0,fTitleFont:42,fTitleFontSize:.05,fTitleStyle:0,fTitleX:.5,fTitleY:.995,fTitleW:0,fTitleH:0,fFitFormat:"5.4g",fOptStat:1111,fOptFit:0,fNumberContours:20,fGridColor:0,fGridStyle:3,fGridWidth:1,fFrameFillColor:0,fFrameFillStyle:1001,fFrameLineColor:1,fFrameLineWidth:1,fFrameLineStyle:1,fFrameBorderSize:1,fFrameBorderMode:0,fEndErrorSize:2,fErrorX:.5,fHistMinimumZero:!1,fHistTopMargin:.05,fHistFillColor:0,fHistFillStyle:1001,fHistLineColor:602,fHistLineStyle:1,fHistLineWidth:1,fPaintTextFormat:"g",fTimeOffset:788918400,fLegendBorderSize:1,fLegendFont:42,fLegendTextSize:0,fLegendFillColor:0,fHatchesLineWidth:1,fHatchesSpacing:1};function A(){return $e?Ze.nodejs_document:typeof document<"u"?document:"object"==typeof window?window.document:void 0}function w(Xe){return m.apply(this,arguments)}function m(){return(m=(0,ze.Z)(function*(Xe){if($e){let Lt,it;return Me.e(282).then(Me.t.bind(Me,1282,19)).then(cn=>(Lt=cn.tmpNameSync()+".js",Me.e(148).then(Me.t.bind(Me,2148,19)))).then(cn=>(it=cn,it.writeFileSync(Lt,Xe),import("file://"+Lt))).finally(()=>it.unlinkSync(Lt))}if(typeof document<"u"){let Lt=document.getElementsByTagName("script");for(let cn=0;cn=0?mt():Promise.resolve(!0)).then(()=>new Promise(cn=>{let It=document.createElement("script");It.setAttribute("type","text/javascript"),It.innerHTML=Xe,document.head.appendChild(It),setTimeout(()=>cn(!0),10)}))}return!1})).apply(this,arguments)}function _(Xe){return k.apply(this,arguments)}function k(){return(k=(0,ze.Z)(function*(Xe){if(!Xe)return!0;if(Wn(Xe)&&Xe.indexOf(";")>=0&&(Xe=Xe.split(";")),!Wn(Xe)){let It=Xe,Pt=()=>!It.length||_(It.shift()).then(Pt,Pt);return Pt()}0===Xe.indexOf("$$$")&&(0==(Xe=Xe.slice(3)).indexOf("style/")&&Xe.indexOf(".css")<0&&(Xe+=".css"),Xe=De+Xe);let Lt,it=Xe.indexOf(".css")>0;if($e)return it?null:0==Xe.indexOf("http:")||0==Xe.indexOf("https:")?H(Xe,"text").then(It=>w(It)):import(Xe);const cn=It=>{if(It==Xe)return!0;let Pt=It.indexOf(Xe);return Pt>0&&Pt+Xe.length==It.length&&"/"==It[Pt-1]};if(it){let It=document.getElementsByTagName("link");for(let Pt=0;Pt{Lt.onload=()=>It(!0),Lt.onerror=()=>{Lt.remove(),Pt(Error(`Fail to load ${Xe}`))},document.head.appendChild(Lt)})})).apply(this,arguments)}function F(Xe){return 1<=0)return Lt.clones[Pt]}else Lt={obj:[],clones:[],nofunc:it};let cn=J(Object.prototype.toString.apply(Xe));if(1==cn){let Pt=[];Lt.obj.push(Xe),Lt.clones.push(Pt);for(let En=0;En{if(null==Pt)return;if(Wn(Pt)){if(cn||Pt.length<6||0!==Pt.indexOf("$ref:"))return;let kn=parseInt(Pt.slice(5));return!Number.isInteger(kn)||kn<0||kn>=it.length?void 0:(cn=!1,it[kn])}if("object"!=typeof Pt)return;if(J(Object.prototype.toString.apply(Pt))>0){for(let kn=0;kn=it.length?void 0:(cn=!0,it[kn])}if(!1!==cn&&qi>1&&"$arr"===Rn[0]&&"len"===Rn[1]){let kn;switch(Pt.$arr){case"Int8":kn=new Int8Array(Pt.len);break;case"Uint8":kn=new Uint8Array(Pt.len);break;case"Int16":kn=new Int16Array(Pt.len);break;case"Uint16":kn=new Uint16Array(Pt.len);break;case"Int32":kn=new Int32Array(Pt.len);break;case"Uint32":kn=new Uint32Array(Pt.len);break;case"Float32":kn=new Float32Array(Pt.len);break;case"Int64":case"Uint64":case"Float64":kn=new Float64Array(Pt.len);break;default:kn=new Array(Pt.len)}if(kn.fill("Bool"!==Pt.$arr&&0),void 0!==Pt.b){let ii=Y(Pt.b);if(!kn.buffer)throw new Error("base64 coding supported only for native arrays with binary data");{let lr=new DataView(kn.buffer,Pt.o||0),ar=Math.min(ii.length,lr.byteLength);for(let $i=0;$i=0)){it.push(Pt),Pt._typename&&$(Pt);for(let kn=0;kn{if(pn(Pt))return;if(null==Pt||!fn(Pt))return Pt;if(J(Object.prototype.toString.apply(Pt))>0){let ii=new Array(Pt.length);for(let lr=0;lr=0)return{$ref:En};let Rn=Object.keys(Pt),qi=Rn.length,kn={};if(3==qi&&"$pair"===Rn[0]&&"first"===Rn[1]&&"second"===Rn[2])return kn.$pair=Pt.$pair,kn.first=cn(Pt.first),kn.second=cn(Pt.second),kn;it.push(Pt);for(let ii=0;ii"u")return Lt;Xe=document.URL}Lt.url=Xe;let it=Xe.indexOf("?");if(it<0)return Lt;for(Xe=decodeURI(Xe.slice(it+1));Xe;){let cn=0,It=0,Pt=-1,En=-1;for(;cn=0&&(It=(It+1)%2),En<0&&(En=cn);break;case'"':It<=0&&(It=(It-1)%2),En<0&&(En=cn);break;case"=":En<0&&Pt<0&&(Pt=cn)}cn++}if(Pt<0&&En<0&&(Lt.opts[Xe.slice(0,cn)]=""),Pt>0){let Rn=Xe.slice(Pt+1,cn);("'"===Rn[0]||'"'===Rn[0])&&Rn[0]===Rn[Rn.length-1]&&(Rn=Rn.slice(1,Rn.length-1)),Lt.opts[Xe.slice(0,Pt)]=Rn}if(cn>=Xe.length||"#"==Xe[cn])break;Xe=Xe.slice(cn+1)}return Lt}function de(Xe){if(pn(Xe))return Xe;if(!Wn(Xe))return null;let Lt=Xe.split("."),it=globalThis;for(let cn=0;it&&cn0&&(it=it.slice(0,Rn),En=!1),it){case"head":Pt="HEAD";break;case"posttext":Pt="POST",it="text";break;case"postbuf":Pt="POST",it="buf";break;case"post":case"multi":Pt="POST"}return Xe.kind=it,P.HandleWrongHttpResponse&&"GET"==Pt&&pn(Xe.addEventListener)&&Xe.addEventListener("progress",function(qi){qi.lengthComputable&&this.expected_size&&qi.loaded>this.expected_size&&(this.did_abort=!0,this.abort(),this.error_callback(Error(`Server sends more bytes ${qi.loaded} than expected ${this.expected_size}. Abort I/O operation`),598))}.bind(Xe)),Xe.onreadystatechange=function(){if(!this.did_abort){if(2===this.readyState&&this.expected_size){let qi=parseInt(this.getResponseHeader("Content-Length"));if(Number.isInteger(qi)&&qi>this.expected_size&&!P.HandleWrongHttpResponse)return this.did_abort=!0,this.abort(),this.error_callback(Error(`Server response size ${qi} larger than expected ${this.expected_size}. Abort I/O operation`),599)}if(4==this.readyState){if(200!=this.status&&206!=this.status&&!K.qt5&&(0!=this.status||0!=Lt.indexOf("file://")&&0!=Lt.indexOf("blob:")))return this.error_callback(Error(`Fail to load url ${Lt}`),this.status);if(this.nodejs_checkzip&&"gzip"==this.getResponseHeader("content-encoding"))return Me.e(843).then(Me.t.bind(Me,4843,19)).then(qi=>{let kn=qi.unzipSync(Buffer.from(this.response)),ii=JSON.parse(kn);return this.http_callback(ee(ii))});switch(this.kind){case"xml":return this.http_callback(this.responseXML);case"text":return this.http_callback(this.responseText);case"object":return this.http_callback(ee(this.responseText));case"multi":return this.http_callback(re(this.responseText));case"head":return this.http_callback(this)}if(void 0===this.responseType)return this.http_callback(this.responseText);if("bin"==this.kind&&"byteLength"in this.response){let qi="",kn=new Uint8Array(this.response);for(let ii=0;ii0&&(Xe.nodejs_checkzip=!0,Xe.responseType="arraybuffer"),Xe}function U(Xe,Lt,it,cn,It){if(Z()){if(!It)throw Error("Not allowed to create http requests in node without promise");return Me.e(680).then(Me.t.bind(Me,1680,19)).then(En=>{let Rn=new En.default;return I(Rn,Xe,Lt,it,cn),Rn})}let Pt=new XMLHttpRequest;return I(Pt,Xe,Lt,it,cn),It?Promise.resolve(Pt):Pt}function H(Xe,Lt,it){return le.apply(this,arguments)}function le(){return(le=(0,ze.Z)(function*(Xe,Lt,it){return new Promise((cn,It)=>{U(Xe,Lt,cn,It,!0).then(Pt=>Pt.send(it||null))})})).apply(this,arguments)}const D="TObject",oe="TNamed",ge="TString",Ee="TObjString",Ge="TList",We="THashList",et="TMap",Tt="TObjArray",Bt="TClonesArray",ve="TAttLine",Je="TAttFill",ct="TAttMarker",je="TAttText",Ye="THStack",pt="TGraph",Ht="TMultiGraph",tn="TCutG",Ct="TGraphPolargram",Ot="TGraphTime",sn="TPave",Mn="TPaveText",Ln="TPaveStats",In="TLegend",$n="TLegendEntry",bn="TPaletteAxis",rn="TText",qt="TLatex",Qt="TMathText",jt="TColor",yn="TLine",dn="TBox",ai="TPolyLine",nr="TPolyLine3D",Gi="TPolyMarker3D",Sr="TAttPad",Nr="TPad",gr="TCanvas",hs="TAttCanvas",Hs="TGaxis",Jr="TAttAxis",po="TAxis",ao="TStyle",Ms="TH1",Ds="TH2",$o="TH3",kl="TF1",Ao="TF2",io="TProfile",tl="TProfile2D",Tr="TGeoVolume",bo="TGeoNode",ja="TGeoNodeMatrix",ho=-1111;function Ji(Xe,Lt){let it=Lt||{};switch(Xe){case D:T(it,{fUniqueID:0,fBits:0});break;case oe:T(it,{fUniqueID:0,fBits:0,fName:"",fTitle:""});break;case Ge:case We:T(it,{name:Xe,arr:[],opt:[]});break;case Jr:T(it,{fNdivisions:510,fAxisColor:1,fLabelColor:1,fLabelFont:42,fLabelOffset:.005,fLabelSize:.035,fTickLength:.03,fTitleOffset:1,fTitleSize:.035,fTitleColor:1,fTitleFont:42});break;case po:Ji(oe,it),Ji(Jr,it),T(it,{fNbins:1,fXmin:0,fXmax:1,fXbins:[],fFirst:0,fLast:0,fBits2:0,fTimeDisplay:!1,fTimeFormat:"",fLabels:null,fModLabs:null});break;case ve:T(it,{fLineColor:1,fLineStyle:1,fLineWidth:1});break;case Je:T(it,{fFillColor:0,fFillStyle:0});break;case ct:T(it,{fMarkerColor:1,fMarkerStyle:1,fMarkerSize:1});break;case yn:Ji(D,it),Ji(ve,it),T(it,{fX1:0,fX2:1,fY1:0,fY2:1});break;case dn:Ji(D,it),Ji(ve,it),Ji(Je,it),T(it,{fX1:0,fX2:1,fY1:0,fY2:1});break;case sn:Ji(dn,it),T(it,{fX1NDC:0,fY1NDC:0,fX2NDC:1,fY2NDC:1,fBorderSize:0,fInit:1,fShadowColor:1,fCornerRadius:0,fOption:"brNDC",fName:"title"});break;case je:T(it,{fTextAngle:0,fTextSize:0,fTextAlign:22,fTextColor:1,fTextFont:42});break;case Mn:Ji(sn,it),Ji(je,it),T(it,{fLabel:"",fLongest:27,fMargin:.05,fLines:Ji(Ge)});break;case Ln:Ji(Mn,it),T(it,{fFillColor:v.fStatColor,fFillStyle:v.fStatStyle,fTextFont:v.fStatFont,fTextSize:v.fStatFontSize,fTextColor:v.fStatTextColor,fBorderSize:v.fStatBorderSize,fOptFit:0,fOptStat:0,fFitFormat:"",fStatFormat:"",fParent:null});break;case In:Ji(sn,it),Ji(je,it),T(it,{fColumnSeparation:0,fEntrySeparation:.1,fMargin:.25,fNColumns:1,fPrimitives:Ji(Ge),fBorderSize:v.fLegendBorderSize,fTextFont:v.fLegendFont,fTextSize:v.fLegendTextSize,fFillColor:v.fLegendFillColor});break;case bn:Ji(sn,it),T(it,{fAxis:Ji(Hs),fH:null,fName:sn});break;case $n:Ji(D,it),Ji(je,it),Ji(ve,it),Ji(Je,it),Ji(ct,it),T(it,{fLabel:"",fObject:null,fOption:""});break;case rn:Ji(oe,it),Ji(je,it),T(it,{fLimitFactorSize:3,fOriginSize:.04});break;case qt:Ji(rn,it),Ji(ve,it),T(it,{fX:0,fY:0});break;case Ee:Ji(D,it),T(it,{fString:""});break;case Ms:Ji(oe,it),Ji(ve,it),Ji(Je,it),Ji(ct,it),T(it,{fBits:8,fNcells:0,fXaxis:Ji(po),fYaxis:Ji(po),fZaxis:Ji(po),fFillColor:v.fHistFillColor,fFillStyle:v.fHistFillStyle,fLineColor:v.fHistLineColor,fLineStyle:v.fHistLineStyle,fLineWidth:v.fHistLineWidth,fBarOffset:0,fBarWidth:1e3,fEntries:0,fTsumw:0,fTsumw2:0,fTsumwx:0,fTsumwx2:0,fMaximum:ho,fMinimum:ho,fNormFactor:0,fContour:[],fSumw2:[],fOption:"",fFunctions:Ji(Ge),fBufferSize:0,fBuffer:[],fBinStatErrOpt:0,fStatOverflows:2});break;case"TH1I":case"TH1L64":case"TH1F":case"TH1D":case"TH1S":case"TH1C":Ji(Ms,it),it.fArray=[];break;case Ds:Ji(Ms,it),T(it,{fScalefactor:1,fTsumwy:0,fTsumwy2:0,fTsumwxy:0});break;case"TH2I":case"TH2L64":case"TH2F":case"TH2D":case"TH2S":case"TH2C":Ji(Ds,it),it.fArray=[];break;case $o:Ji(Ms,it),T(it,{fTsumwy:0,fTsumwy2:0,fTsumwz:0,fTsumwz2:0,fTsumwxy:0,fTsumwxz:0,fTsumwyz:0});break;case"TH3I":case"TH3L64":case"TH3F":case"TH3D":case"TH3S":case"TH3C":Ji($o,it),it.fArray=[];break;case Ye:Ji(oe,it),T(it,{fHists:Ji(Ge),fHistogram:null,fMaximum:ho,fMinimum:ho});break;case pt:Ji(oe,it),Ji(ve,it),Ji(Je,it),Ji(ct,it),T(it,{fFunctions:Ji(Ge),fHistogram:null,fMaxSize:0,fMaximum:ho,fMinimum:ho,fNpoints:0,fX:[],fY:[]});break;case"TGraphAsymmErrors":Ji(pt,it),T(it,{fEXlow:[],fEXhigh:[],fEYlow:[],fEYhigh:[]});break;case Ht:Ji(oe,it),T(it,{fFunctions:Ji(Ge),fGraphs:Ji(Ge),fHistogram:null,fMaximum:ho,fMinimum:ho});break;case Ct:Ji(oe,it),Ji(je,it),Ji(ve,it),T(it,{fRadian:!0,fDegree:!1,fGrad:!1,fPolarLabelColor:1,fRadialLabelColor:1,fAxisAngle:0,fPolarOffset:.04,fPolarTextSize:.04,fRadialOffset:.025,fRadialTextSize:.035,fRwrmin:0,fRwrmax:1,fRwtmin:0,fRwtmax:2*Math.PI,fTickpolarSize:.02,fPolarLabelFont:62,fRadialLabelFont:62,fCutRadial:0,fNdivRad:508,fNdivPol:508});break;case ai:Ji(D,it),Ji(ve,it),Ji(Je,it),T(it,{fLastPoint:-1,fN:0,fOption:"",fX:null,fY:null});break;case Hs:Ji(yn,it),Ji(je,it),T(it,{fChopt:"",fFunctionName:"",fGridLength:0,fLabelColor:1,fLabelFont:42,fLabelOffset:.005,fLabelSize:.035,fName:"",fNdiv:12,fTickSize:.02,fTimeFormat:"",fTitle:"",fTitleOffset:1,fTitleSize:.035,fWmax:100,fWmin:0});break;case Sr:T(it,{fLeftMargin:v.fPadLeftMargin,fRightMargin:v.fPadRightMargin,fBottomMargin:v.fPadBottomMargin,fTopMargin:v.fPadTopMargin,fXfile:2,fYfile:2,fAfile:1,fXstat:.99,fYstat:.99,fAstat:2,fFrameFillColor:v.fFrameFillColor,fFrameFillStyle:v.fFrameFillStyle,fFrameLineColor:v.fFrameLineColor,fFrameLineWidth:v.fFrameLineWidth,fFrameLineStyle:v.fFrameLineStyle,fFrameBorderSize:v.fFrameBorderSize,fFrameBorderMode:v.fFrameBorderMode});break;case Nr:Ji(D,it),Ji(ve,it),Ji(Je,it),Ji(Sr,it),T(it,{fFillColor:v.fPadColor,fFillStyle:1001,fX1:0,fY1:0,fX2:1,fY2:1,fXtoAbsPixelk:1,fXtoPixelk:1,fXtoPixel:1,fYtoAbsPixelk:1,fYtoPixelk:1,fYtoPixel:1,fUtoAbsPixelk:1,fUtoPixelk:1,fUtoPixel:1,fVtoAbsPixelk:1,fVtoPixelk:1,fVtoPixel:1,fAbsPixeltoXk:1,fPixeltoXk:1,fPixeltoX:1,fAbsPixeltoYk:1,fPixeltoYk:1,fPixeltoY:1,fXlowNDC:0,fYlowNDC:0,fXUpNDC:0,fYUpNDC:0,fWNDC:1,fHNDC:1,fAbsXlowNDC:0,fAbsYlowNDC:0,fAbsWNDC:1,fAbsHNDC:1,fUxmin:0,fUymin:0,fUxmax:0,fUymax:0,fTheta:30,fPhi:30,fAspectRatio:0,fNumber:0,fLogx:v.fOptLogx,fLogy:v.fOptLogy,fLogz:v.fOptLogz,fTickx:v.fPadTickX,fTicky:v.fPadTickY,fPadPaint:0,fCrosshair:0,fCrosshairPos:0,fBorderSize:2,fBorderMode:0,fModified:!1,fGridx:v.fPadGridX,fGridy:v.fPadGridY,fAbsCoord:!1,fEditable:!0,fFixedAspectRatio:!1,fPrimitives:Ji(Ge),fExecs:null,fName:"pad",fTitle:"canvas"});break;case hs:T(it,{fXBetween:2,fYBetween:2,fTitleFromTop:1.2,fXdate:.2,fYdate:.3,fAdate:1});break;case gr:Ji(Nr,it),T(it,{fFillColor:v.fCanvasColor,fFillStyle:1001,fNumPaletteColor:0,fNextPaletteColor:0,fDISPLAY:"$DISPLAY",fDoubleBuffer:0,fRetained:!0,fXsizeUser:0,fYsizeUser:0,fXsizeReal:20,fYsizeReal:10,fWindowTopX:0,fWindowTopY:0,fWindowWidth:0,fWindowHeight:0,fCw:500,fCh:300,fCatt:Ji(hs),kMoveOpaque:!0,kResizeOpaque:!0,fHighLightColor:5,fBatch:!0,kShowEventStatus:!1,kAutoExec:!0,kMenuBar:!0});break;case Tr:Ji(oe,it),Ji(ve,it),Ji(Je,it),T(it,{fGeoAtt:0,fFinder:null,fMedium:null,fNodes:null,fNtotal:0,fNumber:0,fRefCount:0,fShape:null,fVoxels:null});break;case bo:Ji(oe,it),T(it,{fGeoAtt:0,fMother:null,fNovlp:0,fNumber:0,fOverlaps:null,fVolume:null});break;case ja:Ji(bo,it),T(it,{fMatrix:null});break;case"TGeoTrack":Ji(D,it),Ji(ve,it),Ji(ct,it),T(it,{fGeoAtt:0,fNpoints:0,fPoints:[]});break;case nr:Ji(D,it),Ji(ve,it),T(it,{fLastPoint:-1,fN:0,fOption:"",fP:[]});break;case Gi:Ji(D,it),Ji(ct,it),T(it,{fLastPoint:-1,fN:0,fName:"",fOption:"",fP:[]})}return it._typename=Xe,$(it,Xe),it}function ma(Xe,Lt,it,cn){let It=Ji(Xe);if(!It.fXaxis||!It.fYaxis||!It.fZaxis)return null;switch(It.fName="hist",It.fTitle="title",Lt&&T(It.fXaxis,{fNbins:Lt,fXmin:0,fXmax:Lt}),it&&T(It.fYaxis,{fNbins:it,fXmin:0,fXmax:it}),cn&&T(It.fZaxis,{fNbins:cn,fXmin:0,fXmax:cn}),parseInt(Xe[2])){case 1:Lt&&(It.fNcells=Lt+2);break;case 2:Lt&&it&&(It.fNcells=(Lt+2)*(it+2));break;case 3:Lt&&it&&cn&&(It.fNcells=(Lt+2)*(it+2)*(cn+2))}if(It.fNcells>0){switch(Xe[3]){case"C":It.fArray=new Int8Array(It.fNcells);break;case"S":It.fArray=new Int16Array(It.fNcells);break;case"I":It.fArray=new Int32Array(It.fNcells);break;case"F":It.fArray=new Float32Array(It.fNcells);break;case"L":case"D":It.fArray=new Float64Array(It.fNcells);break;default:It.fArray=new Array(It.fNcells)}It.fArray.fill(0)}return It}function ba(Xe,Lt){let it=Ji(ai);return Xe&&(it.fN=Xe,Lt?(it.fX=new Int32Array(Xe),it.fY=new Int32Array(Xe)):(it.fX=new Float32Array(Xe),it.fY=new Float32Array(Xe))),it}function Sa(Xe,Lt,it){let cn=T(Ji(pt),{fBits:1032,fName:"graph",fTitle:"title"});if(Xe>0){cn.fMaxSize=cn.fNpoints=Xe;const It=fn(Lt)&&Lt.length===Xe,Pt=fn(it)&&it.length===Xe;for(let En=0;En"u"&&(it.TestBit=function(It){return 0!=(this.fBits&It)},it.InvertBit=function(It){this.fBits=this.fBits^16777215&It}),cn||((Xe===Ge||Xe===We)&&(it.Clear=function(){this.arr=[],this.opt=[]},it.Add=function(It,Pt){this.arr.push(It),this.opt.push(Wn(Pt)?Pt:"")},it.AddFirst=function(It,Pt){this.arr.unshift(It),this.opt.unshift(Wn(Pt)?Pt:"")},it.RemoveAt=function(It){this.arr.splice(It,1),this.opt.splice(It,1)}),(Xe===Mn||Xe===Ln)&&(it.AddText=function(It){let Pt=Ji(qt);Pt.fTitle=It,Pt.fTextAlign=this.fTextAlign,this.fLines.Add(Pt)},it.Clear=function(){this.fLines.Clear()}),(0==Xe.indexOf(kl)||Xe===Ao)&&(it.addFormula=function(It){It&&(void 0===this.formulas&&(this.formulas=[]),this.formulas.push(It))},it.GetParName=function(It){if(this.fParams&&this.fParams.fParNames)return this.fParams.fParNames[It];if(this.fFormula&&this.fFormula.fParams)for(let Pt=0;Pt=Pt||kn[Rn]=Pt)&&qi[En]+(Pt-kn[En])/(kn[Rn]-kn[En])*(qi[Rn]-qi[En])=this.fNcells&&(It=this.fNcells-1),It<0&&(It=0),It=0&&ItEn.fNbins+1&&(Rn=En.fNbins+1),this.fArray[Rn]+=void 0===Pt?1:Pt,this.fEntries++}),0==Xe.indexOf(Ds)&&(it.getBin=function(It,Pt){return It+(this.fXaxis.fNbins+2)*Pt},it.getBinContent=function(It,Pt){return this.fArray[this.getBin(It,Pt)]},it.Fill=function(It,Pt,En){let Rn=this.fXaxis,qi=this.fYaxis,kn=1+Math.floor((It-Rn.fXmin)/(Rn.fXmax-Rn.fXmin)*Rn.fNbins),ii=1+Math.floor((Pt-qi.fXmin)/(qi.fXmax-qi.fXmin)*qi.fNbins);kn<0?kn=0:kn>Rn.fNbins+1&&(kn=Rn.fNbins+1),ii<0?ii=0:ii>qi.fNbins+1&&(ii=qi.fNbins+1),this.fArray[kn+(Rn.fNbins+2)*ii]+=void 0===En?1:En,this.fEntries++}),0==Xe.indexOf($o)&&(it.getBin=function(It,Pt,En){return It+(this.fXaxis.fNbins+2)*(Pt+(this.fYaxis.fNbins+2)*En)},it.getBinContent=function(It,Pt,En){return this.fArray[this.getBin(It,Pt,En)]},it.Fill=function(It,Pt,En,Rn){let qi=this.fXaxis,kn=this.fYaxis,ii=this.fZaxis,lr=1+Math.floor((It-qi.fXmin)/(qi.fXmax-qi.fXmin)*qi.fNbins),ar=1+Math.floor((Pt-kn.fXmin)/(kn.fXmax-kn.fXmin)*kn.fNbins),$i=1+Math.floor((En-ii.fXmin)/(ii.fXmax-ii.fXmin)*ii.fNbins);lr<0?lr=0:lr>qi.fNbins+1&&(lr=qi.fNbins+1),ar<0?ar=0:ar>kn.fNbins+1&&(ar=kn.fNbins+1),$i<0?$i=0:$i>ii.fNbins+1&&($i=ii.fNbins+1),this.fArray[lr+(qi.fNbins+2)*(ar+(kn.fNbins+2)*$i)]+=void 0===Rn?1:Rn,this.fEntries++}),0==Xe.indexOf(io)&&(0==Xe.indexOf(tl)?(it.getBin=function(It,Pt){return It+(this.fXaxis.fNbins+2)*Pt},it.getBinContent=function(It,Pt){let En=this.getBin(It,Pt);return En<0||En>=this.fNcells||this.fBinEntries[En]<1e-300||!this.fArray?0:this.fArray[En]/this.fBinEntries[En]},it.getBinEntries=function(It,Pt){let En=this.getBin(It,Pt);return En<0||En>=this.fNcells?0:this.fBinEntries[En]}):(it.getBin=function(It){return It},it.getBinContent=function(It){return It<0||It>=this.fNcells||this.fBinEntries[It]<1e-300||!this.fArray?0:this.fArray[It]/this.fBinEntries[It]}),it.getBinEffectiveEntries=function(It){if(It<0||It>=this.fNcells)return 0;let Pt=this.fBinEntries[It];if(!this.fBinSumw2||this.fBinSumw2.length!=this.fNcells)return Pt;let En=this.fBinSumw2[It];return En>0?Pt*Pt/En:0},it.getBinError=function(It){if(It<0||It>=this.fNcells)return 0;let Pt=this.fArray[It],En=this.fBinEntries[It],Rn=this.fSumw2[It],qi=this.getBinEffectiveEntries(It);if(En<1e-300)return 0;if(3===this.fErrorMode)return 1/Math.sqrt(En);let lr=Math.sqrt(Math.abs(Rn/En-(Pt/En)**2));return 2===this.fErrorMode?0!=lr?lr/Math.sqrt(qi):1/Math.sqrt(12*qi):1===this.fErrorMode?lr:lr/Math.sqrt(qi)}),Xe==po&&(it.GetBinLowEdge=function(It){return this.fNbins<=0?0:this.fXbins.length>0&&It>0&&It<=this.fNbins?this.fXbins[It-1]:this.fXmin+(It-1)*(this.fXmax-this.fXmin)/this.fNbins},it.GetBinCenter=function(It){return this.fNbins<=0?0:this.fXbins.length>0&&It>0&&It=0?Math.sqrt(this.M2()):-Math.sqrt(-this.M2())},it.Perp2=it.Pt2=function(){return this.fX**2+this.fY**2},it.Pt=it.pt=function(){return Math.sqrt(this.P2())},it.Phi=it.phi=function(){return Math.atan2(this.fY,this.fX)},it.Eta=it.eta=function(){return Math.atanh(this.Pz/this.P())}),pe[Xe]=it),it}function ot(Xe,Lt){pe[Xe]=Lt}function xt(Xe,Lt){if(fn(Xe)){if(Xe.$kind===Ge||Xe.$kind===Tt)return!0;Lt||(Lt=Xe._typename)}return!!Lt&&(Lt===Ge||Lt===We||Lt===et||Lt===Tt||Lt===Bt)}function fn(Xe){return Xe&&"object"==typeof Xe}function pn(Xe){return"function"==typeof Xe}function Wn(Xe){return"string"==typeof Xe}function Yn(Xe){return fn(Xe)&&pn(Xe.then)}function lt(Xe){return Yn(Xe)?Xe:Promise.resolve(Xe)}function mt(){return Rt.apply(this,arguments)}function Rt(){return(Rt=(0,ze.Z)(function*(){return(globalThis.JSROOT?Promise.resolve(!0):_(De+"scripts/JSRoot.core.js")).then(()=>{if(globalThis.JSROOT?._complete_loading)return globalThis.JSROOT._complete_loading()}).then(()=>globalThis.JSROOT)})).apply(this,arguments)}},2253:(jr,At,Me)=>{"use strict";function M(g,V,fe){g.prototype=V.prototype=fe,fe.constructor=g}function L(g,V){var fe=Object.create(g.prototype);for(var xe in V)fe[xe]=V[xe];return fe}function _e(){}Me.d(At,{$_:()=>m,B8:()=>q,BY:()=>lm,N2:()=>lt,Nb:()=>M1,Xf:()=>Y0,Ys:()=>pu,cx:()=>Uo,d:()=>ka,eh:()=>uA,fF:()=>io,i$:()=>gm,oh:()=>Rl,p2:()=>vl});var $e=1/.7,Ze="\\s*([+-]?\\d+)\\s*",Ie="\\s*([+-]?(?:\\d*\\.)?\\d+(?:[eE][+-]?\\d+)?)\\s*",Ve="\\s*([+-]?(?:\\d*\\.)?\\d+(?:[eE][+-]?\\d+)?)%\\s*",Re=/^#([0-9a-f]{3,8})$/,ce=new RegExp(`^rgb\\(${Ze},${Ze},${Ze}\\)$`),Z=new RegExp(`^rgb\\(${Ve},${Ve},${Ve}\\)$`),Y=new RegExp(`^rgba\\(${Ze},${Ze},${Ze},${Ie}\\)$`),ue=new RegExp(`^rgba\\(${Ve},${Ve},${Ve},${Ie}\\)$`),K=new RegExp(`^hsl\\(${Ie},${Ve},${Ve}\\)$`),J=new RegExp(`^hsla\\(${Ie},${Ve},${Ve},${Ie}\\)$`),R={aliceblue:15792383,antiquewhite:16444375,aqua:65535,aquamarine:8388564,azure:15794175,beige:16119260,bisque:16770244,black:0,blanchedalmond:16772045,blue:255,blueviolet:9055202,brown:10824234,burlywood:14596231,cadetblue:6266528,chartreuse:8388352,chocolate:13789470,coral:16744272,cornflowerblue:6591981,cornsilk:16775388,crimson:14423100,cyan:65535,darkblue:139,darkcyan:35723,darkgoldenrod:12092939,darkgray:11119017,darkgreen:25600,darkgrey:11119017,darkkhaki:12433259,darkmagenta:9109643,darkolivegreen:5597999,darkorange:16747520,darkorchid:10040012,darkred:9109504,darksalmon:15308410,darkseagreen:9419919,darkslateblue:4734347,darkslategray:3100495,darkslategrey:3100495,darkturquoise:52945,darkviolet:9699539,deeppink:16716947,deepskyblue:49151,dimgray:6908265,dimgrey:6908265,dodgerblue:2003199,firebrick:11674146,floralwhite:16775920,forestgreen:2263842,fuchsia:16711935,gainsboro:14474460,ghostwhite:16316671,gold:16766720,goldenrod:14329120,gray:8421504,green:32768,greenyellow:11403055,grey:8421504,honeydew:15794160,hotpink:16738740,indianred:13458524,indigo:4915330,ivory:16777200,khaki:15787660,lavender:15132410,lavenderblush:16773365,lawngreen:8190976,lemonchiffon:16775885,lightblue:11393254,lightcoral:15761536,lightcyan:14745599,lightgoldenrodyellow:16448210,lightgray:13882323,lightgreen:9498256,lightgrey:13882323,lightpink:16758465,lightsalmon:16752762,lightseagreen:2142890,lightskyblue:8900346,lightslategray:7833753,lightslategrey:7833753,lightsteelblue:11584734,lightyellow:16777184,lime:65280,limegreen:3329330,linen:16445670,magenta:16711935,maroon:8388608,mediumaquamarine:6737322,mediumblue:205,mediumorchid:12211667,mediumpurple:9662683,mediumseagreen:3978097,mediumslateblue:8087790,mediumspringgreen:64154,mediumturquoise:4772300,mediumvioletred:13047173,midnightblue:1644912,mintcream:16121850,mistyrose:16770273,moccasin:16770229,navajowhite:16768685,navy:128,oldlace:16643558,olive:8421376,olivedrab:7048739,orange:16753920,orangered:16729344,orchid:14315734,palegoldenrod:15657130,palegreen:10025880,paleturquoise:11529966,palevioletred:14381203,papayawhip:16773077,peachpuff:16767673,peru:13468991,pink:16761035,plum:14524637,powderblue:11591910,purple:8388736,rebeccapurple:6697881,red:16711680,rosybrown:12357519,royalblue:4286945,saddlebrown:9127187,salmon:16416882,sandybrown:16032864,seagreen:3050327,seashell:16774638,sienna:10506797,silver:12632256,skyblue:8900331,slateblue:6970061,slategray:7372944,slategrey:7372944,snow:16775930,springgreen:65407,steelblue:4620980,tan:13808780,teal:32896,thistle:14204888,tomato:16737095,turquoise:4251856,violet:15631086,wheat:16113331,white:16777215,whitesmoke:16119285,yellow:16776960,yellowgreen:10145074};function P(){return this.rgb().formatHex()}function w(){return this.rgb().formatRgb()}function m(g){var V,fe;return g=(g+"").trim().toLowerCase(),(V=Re.exec(g))?(fe=V[1].length,V=parseInt(V[1],16),6===fe?_(V):3===fe?new T(V>>8&15|V>>4&240,V>>4&15|240&V,(15&V)<<4|15&V,1):8===fe?k(V>>24&255,V>>16&255,V>>8&255,(255&V)/255):4===fe?k(V>>12&15|V>>8&240,V>>8&15|V>>4&240,V>>4&15|240&V,((15&V)<<4|15&V)/255):null):(V=ce.exec(g))?new T(V[1],V[2],V[3],1):(V=Z.exec(g))?new T(255*V[1]/100,255*V[2]/100,255*V[3]/100,1):(V=Y.exec(g))?k(V[1],V[2],V[3],V[4]):(V=ue.exec(g))?k(255*V[1]/100,255*V[2]/100,255*V[3]/100,V[4]):(V=K.exec(g))?I(V[1],V[2]/100,V[3]/100,1):(V=J.exec(g))?I(V[1],V[2]/100,V[3]/100,V[4]):R.hasOwnProperty(g)?_(R[g]):"transparent"===g?new T(NaN,NaN,NaN,0):null}function _(g){return new T(g>>16&255,g>>8&255,255&g,1)}function k(g,V,fe,xe){return xe<=0&&(g=V=fe=NaN),new T(g,V,fe,xe)}function F(g){return g instanceof _e||(g=m(g)),g?new T((g=g.rgb()).r,g.g,g.b,g.opacity):new T}function q(g,V,fe,xe){return 1===arguments.length?F(g):new T(g,V,fe,xe??1)}function T(g,V,fe,xe){this.r=+g,this.g=+V,this.b=+fe,this.opacity=+xe}function $(){return`#${de(this.r)}${de(this.g)}${de(this.b)}`}function re(){const g=be(this.opacity);return`${1===g?"rgb(":"rgba("}${he(this.r)}, ${he(this.g)}, ${he(this.b)}${1===g?")":`, ${g})`}`}function be(g){return isNaN(g)?1:Math.max(0,Math.min(1,g))}function he(g){return Math.max(0,Math.min(255,Math.round(g)||0))}function de(g){return((g=he(g))<16?"0":"")+g.toString(16)}function I(g,V,fe,xe){return xe<=0?g=V=fe=NaN:fe<=0||fe>=1?g=V=NaN:V<=0&&(g=NaN),new le(g,V,fe,xe)}function U(g){if(g instanceof le)return new le(g.h,g.s,g.l,g.opacity);if(g instanceof _e||(g=m(g)),!g)return new le;if(g instanceof le)return g;var V=(g=g.rgb()).r/255,fe=g.g/255,xe=g.b/255,qe=Math.min(V,fe,xe),nt=Math.max(V,fe,xe),yt=NaN,Mt=nt-qe,kt=(nt+qe)/2;return Mt?(yt=V===nt?(fe-xe)/Mt+6*(fe0&&kt<1?0:yt,new le(yt,Mt,kt,g.opacity)}function le(g,V,fe,xe){this.h=+g,this.s=+V,this.l=+fe,this.opacity=+xe}function D(g){return(g=(g||0)%360)<0?g+360:g}function oe(g){return Math.max(0,Math.min(1,g||0))}function ge(g,V,fe){return 255*(g<60?V+(fe-V)*g/60:g<180?fe:g<240?V+(fe-V)*(240-g)/60:V)}M(_e,m,{copy(g){return Object.assign(new this.constructor,this,g)},displayable(){return this.rgb().displayable()},hex:P,formatHex:P,formatHex8:function v(){return this.rgb().formatHex8()},formatHsl:function A(){return U(this).formatHsl()},formatRgb:w,toString:w}),M(T,q,L(_e,{brighter(g){return g=null==g?$e:Math.pow($e,g),new T(this.r*g,this.g*g,this.b*g,this.opacity)},darker(g){return g=null==g?.7:Math.pow(.7,g),new T(this.r*g,this.g*g,this.b*g,this.opacity)},rgb(){return this},clamp(){return new T(he(this.r),he(this.g),he(this.b),be(this.opacity))},displayable(){return-.5<=this.r&&this.r<255.5&&-.5<=this.g&&this.g<255.5&&-.5<=this.b&&this.b<255.5&&0<=this.opacity&&this.opacity<=1},hex:$,formatHex:$,formatHex8:function ee(){return`#${de(this.r)}${de(this.g)}${de(this.b)}${de(255*(isNaN(this.opacity)?1:this.opacity))}`},formatRgb:re,toString:re})),M(le,function H(g,V,fe,xe){return 1===arguments.length?U(g):new le(g,V,fe,xe??1)},L(_e,{brighter(g){return g=null==g?$e:Math.pow($e,g),new le(this.h,this.s,this.l*g,this.opacity)},darker(g){return g=null==g?.7:Math.pow(.7,g),new le(this.h,this.s,this.l*g,this.opacity)},rgb(){var g=this.h%360+360*(this.h<0),V=isNaN(g)||isNaN(this.s)?0:this.s,fe=this.l,xe=fe+(fe<.5?fe:1-fe)*V,qe=2*fe-xe;return new T(ge(g>=240?g-240:g+120,qe,xe),ge(g,qe,xe),ge(g<120?g+240:g-120,qe,xe),this.opacity)},clamp(){return new le(D(this.h),oe(this.s),oe(this.l),be(this.opacity))},displayable(){return(0<=this.s&&this.s<=1||isNaN(this.s))&&0<=this.l&&this.l<=1&&0<=this.opacity&&this.opacity<=1},formatHsl(){const g=be(this.opacity);return`${1===g?"hsl(":"hsla("}${D(this.h)}, ${100*oe(this.s)}%, ${100*oe(this.l)}%${1===g?")":`, ${g})`}`}}));const Ee=Math.PI/180,Ge=180/Math.PI,ve=4/29,Je=6/29,ct=3*Je*Je;function Ye(g){if(g instanceof tn)return new tn(g.l,g.a,g.b,g.opacity);if(g instanceof bn)return rn(g);g instanceof T||(g=F(g));var nt,yt,V=Mn(g.r),fe=Mn(g.g),xe=Mn(g.b),qe=Ct((.2225045*V+.7168786*fe+.0606169*xe)/1);return V===fe&&fe===xe?nt=yt=qe:(nt=Ct((.4360747*V+.3850649*fe+.1430804*xe)/.96422),yt=Ct((.0139322*V+.0971045*fe+.7141733*xe)/.82521)),new tn(116*qe-16,500*(nt-qe),200*(qe-yt),g.opacity)}function tn(g,V,fe,xe){this.l=+g,this.a=+V,this.b=+fe,this.opacity=+xe}function Ct(g){return g>.008856451679035631?Math.pow(g,1/3):g/ct+ve}function Ot(g){return g>Je?g*g*g:ct*(g-ve)}function sn(g){return 255*(g<=.0031308?12.92*g:1.055*Math.pow(g,1/2.4)-.055)}function Mn(g){return(g/=255)<=.04045?g/12.92:Math.pow((g+.055)/1.055,2.4)}function Ln(g){if(g instanceof bn)return new bn(g.h,g.c,g.l,g.opacity);if(g instanceof tn||(g=Ye(g)),0===g.a&&0===g.b)return new bn(NaN,0g+xe)}function Ao(g){return function(V,fe){return g(V.source.value+V.target.value,fe.source.value+fe.target.value)}}function io(){return function bo(g,V){var fe=0,xe=null,qe=null,nt=null;function yt(Mt){var Dr,kt=Mt.length,Gt=new Array(kt),on=kl(0,kt),Dn=new Array(kt*kt),On=new Array(kt),bi=0;Mt=Float64Array.from({length:kt*kt},V?(mr,Yi)=>Mt[Yi%kt][Yi/kt|0]:(mr,Yi)=>Mt[Yi/kt|0][Yi%kt]);for(let mr=0;mrxe(Gt[Yi],Gt[Ys]));for(const Yi of on){const Ys=mr;if(g){const go=kl(1+~kt,kt).filter(Br=>Br<0?Mt[~Br*kt+Yi]:Mt[Yi*kt+Br]);qe&&go.sort((Br,Li)=>qe(Br<0?-Mt[~Br*kt+Yi]:Mt[Yi*kt+Br],Li<0?-Mt[~Li*kt+Yi]:Mt[Yi*kt+Li]));for(const Br of go)Br<0?(Dn[~Br*kt+Yi]||(Dn[~Br*kt+Yi]={source:null,target:null})).target={index:Yi,startAngle:mr,endAngle:mr+=Mt[~Br*kt+Yi]*bi,value:Mt[~Br*kt+Yi]}:(Dn[Yi*kt+Br]||(Dn[Yi*kt+Br]={source:null,target:null})).source={index:Yi,startAngle:mr,endAngle:mr+=Mt[Yi*kt+Br]*bi,value:Mt[Yi*kt+Br]};On[Yi]={index:Yi,startAngle:Ys,endAngle:mr,value:Gt[Yi]}}else{const go=kl(0,kt).filter(Br=>Mt[Yi*kt+Br]||Mt[Br*kt+Yi]);qe&&go.sort((Br,Li)=>qe(Mt[Yi*kt+Br],Mt[Yi*kt+Li]));for(const Br of go){let Li;if(YiJi)if(Math.abs(on*Mt-kt*Gt)>Ji&&qe){var On=fe-nt,bi=xe-yt,Dr=Mt*Mt+kt*kt,mr=On*On+bi*bi,Yi=Math.sqrt(Dr),Ys=Math.sqrt(Dn),go=qe*Math.tan((ja-Math.acos((Dr+Dn-mr)/(2*Yi*Ys)))/2),Br=go/Ys,Li=go/Yi;Math.abs(Br-1)>Ji&&(this._+="L"+(g+Br*Gt)+","+(V+Br*on)),this._+="A"+qe+","+qe+",0,0,"+ +(on*On>Gt*bi)+","+(this._x1=g+Li*Mt)+","+(this._y1=V+Li*kt)}else this._+="L"+(this._x1=g)+","+(this._y1=V)},arc:function(g,V,fe,xe,qe,nt){g=+g,V=+V,nt=!!nt;var yt=(fe=+fe)*Math.cos(xe),Mt=fe*Math.sin(xe),kt=g+yt,Gt=V+Mt,on=1^nt,Dn=nt?xe-qe:qe-xe;if(fe<0)throw new Error("negative radius: "+fe);null===this._x1?this._+="M"+kt+","+Gt:(Math.abs(this._x1-kt)>Ji||Math.abs(this._y1-Gt)>Ji)&&(this._+="L"+kt+","+Gt),fe&&(Dn<0&&(Dn=Dn%ho+ho),Dn>ma?this._+="A"+fe+","+fe+",0,1,"+on+","+(g-yt)+","+(V-Mt)+"A"+fe+","+fe+",0,1,"+on+","+(this._x1=kt)+","+(this._y1=Gt):Dn>Ji&&(this._+="A"+fe+","+fe+",0,"+ +(Dn>=ja)+","+on+","+(this._x1=g+fe*Math.cos(qe))+","+(this._y1=V+fe*Math.sin(qe))))},rect:function(g,V,fe,xe){this._+="M"+(this._x0=this._x1=+g)+","+(this._y0=this._y1=+V)+"h"+ +fe+"v"+ +xe+"h"+-fe+"Z"},toString:function(){return this._}};var uc=Array.prototype.slice;function st(g){return function(){return g}}function pe(g){return g.source}function rt(g){return g.target}function ot(g){return g.radius}function xt(g){return g.startAngle}function fn(g){return g.endAngle}function pn(){return 0}function lt(){return function Yn(g){var V=pe,fe=rt,xe=ot,qe=ot,nt=xt,yt=fn,Mt=pn,kt=null;function Gt(){var on,Dn=V.apply(this,arguments),On=fe.apply(this,arguments),bi=Mt.apply(this,arguments)/2,Dr=uc.call(arguments),mr=+xe.apply(this,(Dr[0]=Dn,Dr)),Yi=nt.apply(this,Dr)-ao,Ys=yt.apply(this,Dr)-ao,go=+qe.apply(this,(Dr[0]=On,Dr)),Br=nt.apply(this,Dr)-ao,Li=yt.apply(this,Dr)-ao;if(kt||(kt=on=Sa()),bi>$o&&(hs(Ys-Yi)>2*bi+$o?Ys>Yi?(Yi+=bi,Ys-=bi):(Yi-=bi,Ys+=bi):Yi=Ys=(Yi+Ys)/2,hs(Li-Br)>2*bi+$o?Li>Br?(Br+=bi,Li-=bi):(Br-=bi,Li+=bi):Br=Li=(Br+Li)/2),kt.moveTo(mr*Hs(Yi),mr*Jr(Yi)),kt.arc(0,0,mr,Yi,Ys),Yi!==Br||Ys!==Li)if(g){var Ur=go-+g.apply(this,arguments),Wo=(Br+Li)/2;kt.quadraticCurveTo(0,0,Ur*Hs(Br),Ur*Jr(Br)),kt.lineTo(go*Hs(Wo),go*Jr(Wo)),kt.lineTo(Ur*Hs(Li),Ur*Jr(Li))}else kt.quadraticCurveTo(0,0,go*Hs(Br),go*Jr(Br)),kt.arc(0,0,go,Br,Li);if(kt.quadraticCurveTo(0,0,mr*Hs(Yi),mr*Jr(Yi)),kt.closePath(),on)return kt=null,on+""||null}return g&&(Gt.headRadius=function(on){return arguments.length?(g="function"==typeof on?on:st(+on),Gt):g}),Gt.radius=function(on){return arguments.length?(xe=qe="function"==typeof on?on:st(+on),Gt):xe},Gt.sourceRadius=function(on){return arguments.length?(xe="function"==typeof on?on:st(+on),Gt):xe},Gt.targetRadius=function(on){return arguments.length?(qe="function"==typeof on?on:st(+on),Gt):qe},Gt.startAngle=function(on){return arguments.length?(nt="function"==typeof on?on:st(+on),Gt):nt},Gt.endAngle=function(on){return arguments.length?(yt="function"==typeof on?on:st(+on),Gt):yt},Gt.padAngle=function(on){return arguments.length?(Mt="function"==typeof on?on:st(+on),Gt):Mt},Gt.source=function(on){return arguments.length?(V=on,Gt):V},Gt.target=function(on){return arguments.length?(fe=on,Gt):fe},Gt.context=function(on){return arguments.length?(kt=on??null,Gt):kt},Gt}()}var Rt={value:()=>{}};function Xe(){for(var xe,g=0,V=arguments.length,fe={};g=0&&(xe=fe.slice(qe+1),fe=fe.slice(0,qe)),fe&&!V.hasOwnProperty(fe))throw new Error("unknown type: "+fe);return{type:fe,name:xe}})}function cn(g,V){for(var qe,fe=0,xe=g.length;fe0)for(var qe,nt,fe=new Array(qe),xe=0;xe=0&&"xmlns"!==(V=g.slice(0,fe))&&(g=g.slice(fe+1)),En.hasOwnProperty(V)?{space:En[V],local:g}:g}function qi(g){return function(){var V=this.ownerDocument,fe=this.namespaceURI;return fe===Pt&&V.documentElement.namespaceURI===Pt?V.createElement(g):V.createElementNS(fe,g)}}function kn(g){return function(){return this.ownerDocument.createElementNS(g.space,g.local)}}function ii(g){var V=Rn(g);return(V.local?kn:qi)(V)}function lr(){}function ar(g){return null==g?lr:function(){return this.querySelector(g)}}function rs(g){return null==g?[]:Array.isArray(g)?g:Array.from(g)}function qs(){return[]}function na(g){return null==g?qs:function(){return this.querySelectorAll(g)}}function yl(g){return function(){return this.matches(g)}}function Or(g){return function(V){return V.matches(g)}}var Os=Array.prototype.find;function Kr(){return this.firstElementChild}var $a=Array.prototype.filter;function nl(){return Array.from(this.children)}function So(g){return new Array(g.length)}function Fl(g,V){this.ownerDocument=g.ownerDocument,this.namespaceURI=g.namespaceURI,this._next=null,this._parent=g,this.__data__=V}function wl(g){return function(){return g}}function _c(g,V,fe,xe,qe,nt){for(var Mt,yt=0,kt=V.length,Gt=nt.length;ytV?1:g>=V?0:NaN}function mn(g){return function(){this.removeAttribute(g)}}function An(g){return function(){this.removeAttributeNS(g.space,g.local)}}function li(g,V){return function(){this.setAttribute(g,V)}}function ti(g,V){return function(){this.setAttributeNS(g.space,g.local,V)}}function mi(g,V){return function(){var fe=V.apply(this,arguments);null==fe?this.removeAttribute(g):this.setAttribute(g,fe)}}function Xn(g,V){return function(){var fe=V.apply(this,arguments);null==fe?this.removeAttributeNS(g.space,g.local):this.setAttributeNS(g.space,g.local,fe)}}function Ri(g){return g.ownerDocument&&g.ownerDocument.defaultView||g.document&&g||g.defaultView}function Hi(g){return function(){this.style.removeProperty(g)}}function es(g,V,fe){return function(){this.style.setProperty(g,V,fe)}}function ss(g,V,fe){return function(){var xe=V.apply(this,arguments);null==xe?this.style.removeProperty(g):this.style.setProperty(g,xe,fe)}}function ds(g,V){return g.style.getPropertyValue(V)||Ri(g).getComputedStyle(g,null).getPropertyValue(V)}function ua(g){return function(){delete this[g]}}function $s(g,V){return function(){this[g]=V}}function ll(g,V){return function(){var fe=V.apply(this,arguments);null==fe?delete this[g]:this[g]=fe}}function XA(g){return g.trim().split(/^|\s+/)}function Sh(g){return g.classList||new Zp(g)}function Zp(g){this._node=g,this._names=XA(g.getAttribute("class")||"")}function th(g,V){for(var fe=Sh(g),xe=-1,qe=V.length;++xe=0&&(fe=V.slice(xe+1),V=V.slice(0,xe)),{type:V,name:fe}})}function Fr(g){return function(){var V=this.__on;if(V){for(var nt,fe=0,xe=-1,qe=V.length;fe=0&&(this._names.splice(V,1),this._node.setAttribute("class",this._names.join(" ")))},contains:function(g){return this._names.indexOf(g)>=0}};var hc=[null];function Io(g,V){this._groups=g,this._parents=V}function Cr(){return new Io([[document.documentElement]],hc)}function pu(g){return"string"==typeof g?new Io([[document.querySelector(g)]],[document.documentElement]):new Io([[g]],hc)}Io.prototype=Cr.prototype={constructor:Io,select:function $i(g){"function"!=typeof g&&(g=ar(g));for(var V=this._groups,fe=V.length,xe=new Array(fe),qe=0;qe=Br&&(Br=go+1);!(ro=Yi[Br])&&++Br=0;)(yt=xe[qe])&&(nt&&4^yt.compareDocumentPosition(nt)&&nt.parentNode.insertBefore(yt,nt),nt=yt);return this},sort:function Fe(g){function V(Dn,On){return Dn&&On?g(Dn.__data__,On.__data__):!Dn-!On}g||(g=Ue);for(var fe=this._groups,xe=fe.length,qe=new Array(xe),nt=0;nt1?this.each((null==V?Hi:"function"==typeof V?ss:es)(g,V,fe??"")):ds(this.node(),g)},property:function aa(g,V){return arguments.length>1?this.each((null==V?ua:"function"==typeof V?ll:$s)(g,V)):this.node()[g]},classed:function eA(g,V){var fe=XA(g+"");if(arguments.length<2){for(var xe=Sh(this.node()),qe=-1,nt=fe.length;++qeUo(fe,V))}Xs.prototype=function ts(){return new Xs}.prototype={constructor:Xs,get:function(g){for(var V=this._;!(V in g);)if(!(g=g.parentNode))return;return g[V]},set:function(g,V){return g[this._]=V},remove:function(g){return this._ in g&&delete g[this._]},toString:function(){return this._}};const Zd={passive:!1},cl={capture:!0,passive:!1};function Au(g){g.stopImmediatePropagation()}function qc(g){g.preventDefault(),g.stopImmediatePropagation()}var rh=g=>()=>g;function Jd(g,{sourceEvent:V,subject:fe,target:xe,identifier:qe,active:nt,x:yt,y:Mt,dx:kt,dy:Gt,dispatch:on}){Object.defineProperties(this,{type:{value:g,enumerable:!0,configurable:!0},sourceEvent:{value:V,enumerable:!0,configurable:!0},subject:{value:fe,enumerable:!0,configurable:!0},target:{value:xe,enumerable:!0,configurable:!0},identifier:{value:qe,enumerable:!0,configurable:!0},active:{value:nt,enumerable:!0,configurable:!0},x:{value:yt,enumerable:!0,configurable:!0},y:{value:Mt,enumerable:!0,configurable:!0},dx:{value:kt,enumerable:!0,configurable:!0},dy:{value:Gt,enumerable:!0,configurable:!0},_:{value:on}})}function Ou(g){return!g.ctrlKey&&!g.button}function Ol(){return this.parentNode}function Dh(g,V){return V??{x:g.x,y:g.y}}function Bh(){return navigator.maxTouchPoints||"ontouchstart"in this}function Rl(){var Mt,kt,Gt,on,g=Ou,V=Ol,fe=Dh,xe=Bh,qe={},nt=Xe("start","drag","end"),yt=0,Dn=0;function On(Li){Li.on("mousedown.drag",bi).filter(xe).on("touchstart.drag",Yi).on("touchmove.drag",Ys,Zd).on("touchend.drag touchcancel.drag",go).style("touch-action","none").style("-webkit-tap-highlight-color","rgba(0,0,0,0)")}function bi(Li,ro){if(!on&&g.call(this,Li,ro)){var Ur=Br(this,V.call(this,Li,ro),Li,ro,"mouse");Ur&&(pu(Li.view).on("mousemove.drag",Dr,cl).on("mouseup.drag",mr,cl),function wo(g){var V=g.document.documentElement,fe=pu(g).on("dragstart.drag",qc,cl);"onselectstart"in V?fe.on("selectstart.drag",qc,cl):(V.__noselect=V.style.MozUserSelect,V.style.MozUserSelect="none")}(Li.view),Au(Li),Gt=!1,Mt=Li.clientX,kt=Li.clientY,Ur("start",Li))}}function Dr(Li){if(qc(Li),!Gt){var ro=Li.clientX-Mt,Ur=Li.clientY-kt;Gt=ro*ro+Ur*Ur>Dn}qe.mouse("drag",Li)}function mr(Li){pu(Li.view).on("mousemove.drag mouseup.drag",null),function ih(g,V){var fe=g.document.documentElement,xe=pu(g).on("dragstart.drag",null);V&&(xe.on("click.drag",qc,cl),setTimeout(function(){xe.on("click.drag",null)},0)),"onselectstart"in fe?xe.on("selectstart.drag",null):(fe.style.MozUserSelect=fe.__noselect,delete fe.__noselect)}(Li.view,Gt),qc(Li),qe.mouse("end",Li)}function Yi(Li,ro){if(g.call(this,Li,ro)){var Il,oc,Ur=Li.changedTouches,Wo=V.call(this,Li,ro),ca=Ur.length;for(Il=0;IlV?1:g>=V?0:NaN}function em(g,V){return null==g||null==V?NaN:Vg?1:V>=g?0:NaN}function Ba(g){let V,fe,xe;function qe(Mt,kt,Gt=0,on=Mt.length){if(Gt>>1;fe(Mt[Dn],kt)<0?Gt=Dn+1:on=Dn}while(Gtcu(g(Mt),kt),xe=(Mt,kt)=>g(Mt)-kt):(V=g===cu||g===em?g:tm,fe=g,xe=g),{left:qe,center:function yt(Mt,kt,Gt=0,on=Mt.length){const Dn=qe(Mt,kt,Gt,on-1);return Dn>Gt&&xe(Mt[Dn-1],kt)>-xe(Mt[Dn],kt)?Dn-1:Dn},right:function nt(Mt,kt,Gt=0,on=Mt.length){if(Gt>>1;fe(Mt[Dn],kt)<=0?Gt=Dn+1:on=Dn}while(Gt0)return[g];if((xe=V0){let kt=Math.round(g/Mt),Gt=Math.round(V/Mt);for(kt*MtV&&--Gt,yt=new Array(nt=Gt-kt+1);++qeV&&--Gt,yt=new Array(nt=Gt-kt+1);++qe=0?(nt>=Pc?10:nt>=mu?5:nt>=e1?2:1)*Math.pow(10,qe):-Math.pow(10,-qe)/(nt>=Pc?10:nt>=mu?5:nt>=e1?2:1)}function nm(g,V,fe){var xe=Math.abs(V-g)/Math.max(0,fe),qe=Math.pow(10,Math.floor(Math.log(xe)/Math.LN10)),nt=xe/qe;return nt>=Pc?qe*=10:nt>=mu?qe*=5:nt>=e1&&(qe*=2),V()=>g;function bc(g,V){var fe=V-g;return fe?function K2(g,V){return function(fe){return g+fe*V}}(g,fe):Ts(isNaN(g)?V:g)}var up=function g(V){var fe=function s1(g){return 1==(g=+g)?bc:function(V,fe){return fe-V?function td(g,V,fe){return g=Math.pow(g,fe),V=Math.pow(V,fe)-g,fe=1/fe,function(xe){return Math.pow(g+xe*V,fe)}}(V,fe,g):Ts(isNaN(V)?fe:V)}}(V);function xe(qe,nt){var yt=fe((qe=q(qe)).r,(nt=q(nt)).r),Mt=fe(qe.g,nt.g),kt=fe(qe.b,nt.b),Gt=bc(qe.opacity,nt.opacity);return function(on){return qe.r=yt(on),qe.g=Mt(on),qe.b=kt(on),qe.opacity=Gt(on),qe+""}}return xe.gamma=g,xe}(1);function Wy(g,V){V||(V=[]);var qe,fe=g?Math.min(V.length,g.length):0,xe=V.slice();return function(nt){for(qe=0;qefe&&(nt=V.slice(fe,nt),Mt[yt]?Mt[yt]+=nt:Mt[++yt]=nt),(xe=xe[0])===(qe=qe[0])?Mt[yt]?Mt[yt]+=qe:Mt[++yt]=qe:(Mt[++yt]=null,kt.push({i:yt,x:Ru(xe,qe)})),fe=Lu.lastIndex;return fe180?on+=360:on-Gt>180&&(Gt+=360),On.push({i:Dn.push(qe(Dn)+"rotate(",null,xe)-2,x:Ru(Gt,on)})):on&&Dn.push(qe(Dn)+"rotate("+on+xe)}(Gt.rotate,on.rotate,Dn,On),function Mt(Gt,on,Dn,On){Gt!==on?On.push({i:Dn.push(qe(Dn)+"skewX(",null,xe)-2,x:Ru(Gt,on)}):on&&Dn.push(qe(Dn)+"skewX("+on+xe)}(Gt.skewX,on.skewX,Dn,On),function kt(Gt,on,Dn,On,bi,Dr){if(Gt!==Dn||on!==On){var mr=bi.push(qe(bi)+"scale(",null,",",null,")");Dr.push({i:mr-4,x:Ru(Gt,Dn)},{i:mr-2,x:Ru(on,On)})}else(1!==Dn||1!==On)&&bi.push(qe(bi)+"scale("+Dn+","+On+")")}(Gt.scaleX,Gt.scaleY,on.scaleX,on.scaleY,Dn,On),Gt=on=null,function(bi){for(var Yi,Dr=-1,mr=On.length;++DrV&&(fe=g,g=V,V=fe),function(xe){return Math.max(g,Math.min(V,xe))}}(g[0],g[On-1])),Mt=On>2?o1:Hf,kt=Gt=null,Dn}function Dn(On){return null==On||isNaN(On=+On)?nt:(kt||(kt=Mt(g.map(xe),V,fe)))(xe(yt(On)))}return Dn.invert=function(On){return yt(qe((Gt||(Gt=Mt(V,g.map(xe),Ru)))(On)))},Dn.domain=function(On){return arguments.length?(g=Array.from(On,Fo),on()):g.slice()},Dn.range=function(On){return arguments.length?(V=Array.from(On),on()):V.slice()},Dn.rangeRound=function(On){return V=Array.from(On),fe=nd,on()},Dn.clamp=function(On){return arguments.length?(yt=!!On||jl,on()):yt!==jl},Dn.interpolate=function(On){return arguments.length?(fe=On,on()):fe},Dn.unknown=function(On){return arguments.length?(nt=On,Dn):nt},function(On,bi){return xe=On,qe=bi,on()}}function er(){return nc()(jl,jl)}function ks(g,V){if((fe=(g=V?g.toExponential(V-1):g.toExponential()).indexOf("e"))<0)return null;var fe,xe=g.slice(0,fe);return[xe.length>1?xe[0]+xe.slice(2):xe,+g.slice(fe+1)]}function ys(g){return(g=ks(Math.abs(g)))?g[1]:NaN}var tf,Vf=/^(?:(.)?([<>=^]))?([+\-( ])?([$#])?(0)?(\d+)?(,)?(\.\d+)?(~)?([a-z%])?$/i;function $c(g){if(!(V=Vf.exec(g)))throw new Error("invalid format: "+g);var V;return new yu({fill:V[1],align:V[2],sign:V[3],symbol:V[4],zero:V[5],width:V[6],comma:V[7],precision:V[8]&&V[8].slice(1),trim:V[9],type:V[10]})}function yu(g){this.fill=void 0===g.fill?" ":g.fill+"",this.align=void 0===g.align?">":g.align+"",this.sign=void 0===g.sign?"-":g.sign+"",this.symbol=void 0===g.symbol?"":g.symbol+"",this.zero=!!g.zero,this.width=void 0===g.width?void 0:+g.width,this.comma=!!g.comma,this.precision=void 0===g.precision?void 0:+g.precision,this.trim=!!g.trim,this.type=void 0===g.type?"":g.type+""}function qf(g,V){var fe=ks(g,V);if(!fe)return g+"";var xe=fe[0],qe=fe[1];return qe<0?"0."+new Array(-qe).join("0")+xe:xe.length>qe+1?xe.slice(0,qe+1)+"."+xe.slice(qe+1):xe+new Array(qe-xe.length+2).join("0")}$c.prototype=yu.prototype,yu.prototype.toString=function(){return this.fill+this.align+this.sign+this.symbol+(this.zero?"0":"")+(void 0===this.width?"":Math.max(1,0|this.width))+(this.comma?",":"")+(void 0===this.precision?"":"."+Math.max(0,0|this.precision))+(this.trim?"~":"")+this.type};var $l={"%":(g,V)=>(100*g).toFixed(V),b:g=>Math.round(g).toString(2),c:g=>g+"",d:function ga(g){return Math.abs(g=Math.round(g))>=1e21?g.toLocaleString("en").replace(/,/g,""):g.toString(10)},e:(g,V)=>g.toExponential(V),f:(g,V)=>g.toFixed(V),g:(g,V)=>g.toPrecision(V),o:g=>Math.round(g).toString(8),p:(g,V)=>qf(100*g,V),r:qf,s:function Gf(g,V){var fe=ks(g,V);if(!fe)return g+"";var xe=fe[0],qe=fe[1],nt=qe-(tf=3*Math.max(-8,Math.min(8,Math.floor(qe/3))))+1,yt=xe.length;return nt===yt?xe:nt>yt?xe+new Array(nt-yt+1).join("0"):nt>0?xe.slice(0,nt)+"."+xe.slice(nt):"0."+new Array(1-nt).join("0")+ks(g,Math.max(0,V+nt-1))[0]},X:g=>Math.round(g).toString(16).toUpperCase(),x:g=>Math.round(g).toString(16)};function od(g){return g}var Nu,Uu,E0,am=Array.prototype.map,nf=["y","z","a","f","p","n","\xb5","m","","k","M","G","T","P","E","Z","Y"];function Fd(g){var V=g.domain;return g.ticks=function(fe){var xe=V();return Km(xe[0],xe[xe.length-1],fe??10)},g.tickFormat=function(fe,xe){var qe=V();return function kd(g,V,fe,xe){var nt,qe=nm(g,V,fe);switch((xe=$c(xe??",f")).type){case"s":var yt=Math.max(Math.abs(g),Math.abs(V));return null==xe.precision&&!isNaN(nt=function Pd(g,V){return Math.max(0,3*Math.max(-8,Math.min(8,Math.floor(ys(V)/3)))-ys(Math.abs(g)))}(qe,yt))&&(xe.precision=nt),E0(xe,yt);case"":case"e":case"g":case"p":case"r":null==xe.precision&&!isNaN(nt=function rf(g,V){return g=Math.abs(g),V=Math.abs(V)-g,Math.max(0,ys(V)-ys(g))+1}(qe,Math.max(Math.abs(g),Math.abs(V))))&&(xe.precision=nt-("e"===xe.type));break;case"f":case"%":null==xe.precision&&!isNaN(nt=function Hl(g){return Math.max(0,-ys(Math.abs(g)))}(qe))&&(xe.precision=nt-2*("%"===xe.type))}return Uu(xe)}(qe[0],qe[qe.length-1],fe??10,xe)},g.nice=function(fe){null==fe&&(fe=10);var kt,Gt,xe=V(),qe=0,nt=xe.length-1,yt=xe[qe],Mt=xe[nt],on=10;for(Mt0;){if((Gt=ef(yt,Mt,fe))===kt)return xe[qe]=yt,xe[nt]=Mt,V(xe);if(Gt>0)yt=Math.floor(yt/Gt)*Gt,Mt=Math.ceil(Mt/Gt)*Gt;else{if(!(Gt<0))break;yt=Math.ceil(yt*Gt)/Gt,Mt=Math.floor(Mt*Gt)/Gt}kt=Gt}return g},g}function lm(){var g=er();return g.copy=function(){return sm(g,lm())},Bd.apply(g,arguments),Fd(g)}function oA(g,V){var yt,fe=0,xe=(g=g.slice()).length-1,qe=g[fe],nt=g[xe];return nt-g(-V,fe)}function Bl(g){const V=g(aA,lA),fe=V.domain;let qe,nt,xe=10;function yt(){return qe=function Gr(g){return g===Math.E?Math.log:10===g&&Math.log10||2===g&&Math.log2||(g=Math.log(g),V=>Math.log(V)/g)}(xe),nt=function Jm(g){return 10===g?Zm:g===Math.E?Math.exp:V=>Math.pow(g,V)}(xe),fe()[0]<0?(qe=Zr(qe),nt=Zr(nt),g(cm,cA)):g(aA,lA),V}return V.base=function(Mt){return arguments.length?(xe=+Mt,yt()):xe},V.domain=function(Mt){return arguments.length?(fe(Mt),yt()):fe()},V.ticks=Mt=>{const kt=fe();let Gt=kt[0],on=kt[kt.length-1];const Dn=on0){for(;On<=bi;++On)for(Dr=1;Dron)break;Ys.push(mr)}}else for(;On<=bi;++On)for(Dr=xe-1;Dr>=1;--Dr)if(mr=On>0?Dr/nt(-On):Dr*nt(On),!(mron)break;Ys.push(mr)}2*Ys.length{if(null==Mt&&(Mt=10),null==kt&&(kt=10===xe?"s":","),"function"!=typeof kt&&(!(xe%1)&&null==(kt=$c(kt)).precision&&(kt.trim=!0),kt=Uu(kt)),Mt===1/0)return kt;const Gt=Math.max(1,xe*Mt/V.ticks().length);return on=>{let Dn=on/nt(Math.round(qe(on)));return Dn*xefe(oA(fe(),{floor:Mt=>nt(Math.floor(qe(Mt))),ceil:Mt=>nt(Math.ceil(qe(Mt)))})),V}function vl(){const g=Bl(nc()).domain([1,10]);return g.copy=()=>sm(g,vl()).base(g.base()),Bd.apply(g,arguments),g}function ld(g){return function(V){return Math.sign(V)*Math.log1p(Math.abs(V/g))}}function cd(g){return function(V){return Math.sign(V)*Math.expm1(Math.abs(V))*g}}function eg(g){var V=1,fe=g(ld(V),cd(V));return fe.constant=function(xe){return arguments.length?g(ld(V=+xe),cd(V)):V},Fd(fe)}function uA(){var g=eg(nc());return g.copy=function(){return sm(g,uA()).constant(g.constant())},Bd.apply(g,arguments)}!function rA(g){Nu=function ad(g){var V=void 0===g.grouping||void 0===g.thousands?od:function wc(g,V){return function(fe,xe){for(var qe=fe.length,nt=[],yt=0,Mt=g[0],kt=0;qe>0&&Mt>0&&(kt+Mt+1>xe&&(Mt=Math.max(1,xe-kt)),nt.push(fe.substring(qe-=Mt,qe+Mt)),!((kt+=Mt+1)>xe));)Mt=g[yt=(yt+1)%g.length];return nt.reverse().join(V)}}(am.call(g.grouping,Number),g.thousands+""),fe=void 0===g.currency?"":g.currency[0]+"",xe=void 0===g.currency?"":g.currency[1]+"",qe=void 0===g.decimal?".":g.decimal+"",nt=void 0===g.numerals?od:function om(g){return function(V){return V.replace(/[0-9]/g,function(fe){return g[+fe]})}}(am.call(g.numerals,String)),yt=void 0===g.percent?"%":g.percent+"",Mt=void 0===g.minus?"\u2212":g.minus+"",kt=void 0===g.nan?"NaN":g.nan+"";function Gt(Dn){var On=(Dn=$c(Dn)).fill,bi=Dn.align,Dr=Dn.sign,mr=Dn.symbol,Yi=Dn.zero,Ys=Dn.width,go=Dn.comma,Br=Dn.precision,Li=Dn.trim,ro=Dn.type;"n"===ro?(go=!0,ro="g"):$l[ro]||(void 0===Br&&(Br=12),Li=!0,ro="g"),(Yi||"0"===On&&"="===bi)&&(Yi=!0,On="0",bi="=");var Ur="$"===mr?fe:"#"===mr&&/[boxX]/.test(ro)?"0"+ro.toLowerCase():"",Wo="$"===mr?xe:/[%p]/.test(ro)?yt:"",ca=$l[ro],Il=/[defgprs%]/.test(ro);function oc(eo){var ac,Gu,Kc,Qs=Ur,Ro=Wo;if("c"===ro)Ro=ca(eo)+Ro,eo="";else{var xu=(eo=+eo)<0||1/eo<0;if(eo=isNaN(eo)?kt:ca(Math.abs(eo),Br),Li&&(eo=function sd(g){e:for(var qe,V=g.length,fe=1,xe=-1;fe0&&(xe=0)}return xe>0?g.slice(0,xe)+g.slice(qe+1):g}(eo)),xu&&0==+eo&&"+"!==Dr&&(xu=!1),Qs=(xu?"("===Dr?Dr:Mt:"-"===Dr||"("===Dr?"":Dr)+Qs,Ro=("s"===ro?nf[8+tf/3]:"")+Ro+(xu&&"("===Dr?")":""),Il)for(ac=-1,Gu=eo.length;++ac(Kc=eo.charCodeAt(ac))||Kc>57){Ro=(46===Kc?qe+eo.slice(ac+1):eo.slice(ac))+Ro,eo=eo.slice(0,ac);break}}go&&!Yi&&(eo=V(eo,1/0));var Hh=Qs.length+eo.length+Ro.length,Yc=Hh>1)+Qs+eo+Ro+Yc.slice(Hh);break;default:eo=Yc+Qs+eo+Ro}return nt(eo)}return Br=void 0===Br?6:/[gprs]/.test(ro)?Math.max(1,Math.min(21,Br)):Math.max(0,Math.min(20,Br)),oc.toString=function(){return Dn+""},oc}return{format:Gt,formatPrefix:function on(Dn,On){var bi=Gt(((Dn=$c(Dn)).type="f",Dn)),Dr=3*Math.max(-8,Math.min(8,Math.floor(ys(On)/3))),mr=Math.pow(10,-Dr),Yi=nf[8+Dr/3];return function(Ys){return bi(mr*Ys)+Yi}}}}(g),Uu=Nu.format,E0=Nu.formatPrefix}({thousands:",",grouping:[3],currency:["$",""]});var l1=new Date,I0=new Date;function Rc(g,V,fe,xe){function qe(nt){return g(nt=0===arguments.length?new Date:new Date(+nt)),nt}return qe.floor=function(nt){return g(nt=new Date(+nt)),nt},qe.ceil=function(nt){return g(nt=new Date(nt-1)),V(nt,1),g(nt),nt},qe.round=function(nt){var yt=qe(nt),Mt=qe.ceil(nt);return nt-yt0))return kt;do{kt.push(Gt=new Date(+nt)),V(nt,Mt),g(nt)}while(Gt=yt)for(;g(yt),!nt(yt);)yt.setTime(yt-1)},function(yt,Mt){if(yt>=yt)if(Mt<0)for(;++Mt<=0;)for(;V(yt,-1),!nt(yt););else for(;--Mt>=0;)for(;V(yt,1),!nt(yt););})},fe&&(qe.count=function(nt,yt){return l1.setTime(+nt),I0.setTime(+yt),g(l1),g(I0),Math.floor(fe(l1,I0))},qe.every=function(nt){return nt=Math.floor(nt),isFinite(nt)&&nt>0?nt>1?qe.filter(xe?function(yt){return xe(yt)%nt==0}:function(yt){return qe.count(0,yt)%nt==0}):qe:null}),qe}var P0=Rc(function(){},function(g,V){g.setTime(+g+V)},function(g,V){return V-g});P0.every=function(g){return g=Math.floor(g),isFinite(g)&&g>0?g>1?Rc(function(V){V.setTime(Math.floor(V/g)*g)},function(V,fe){V.setTime(+V+fe*g)},function(V,fe){return(fe-V)/g}):P0:null};var px=P0;const ud=1e3,ah=6e4,hd=60*ah,dd=24*hd,rg=7*dd,k0=30*dd,pp=365*dd;var kh=Rc(function(g){g.setTime(g-g.getMilliseconds())},function(g,V){g.setTime(+g+V*ud)},function(g,V){return(V-g)/ud},function(g){return g.getUTCSeconds()}),Ap=Rc(function(g){g.setTime(g-g.getMilliseconds()-g.getSeconds()*ud)},function(g,V){g.setTime(+g+V*ah)},function(g,V){return(V-g)/ah},function(g){return g.getMinutes()}),og=Rc(function(g){g.setTime(g-g.getMilliseconds()-g.getSeconds()*ud-g.getMinutes()*ah)},function(g,V){g.setTime(+g+V*hd)},function(g,V){return(V-g)/hd},function(g){return g.getHours()}),lg=Rc(g=>g.setHours(0,0,0,0),(g,V)=>g.setDate(g.getDate()+V),(g,V)=>(V-g-(V.getTimezoneOffset()-g.getTimezoneOffset())*ah)/dd,g=>g.getDate()-1);function Xc(g){return Rc(function(V){V.setDate(V.getDate()-(V.getDay()+7-g)%7),V.setHours(0,0,0,0)},function(V,fe){V.setDate(V.getDate()+7*fe)},function(V,fe){return(fe-V-(fe.getTimezoneOffset()-V.getTimezoneOffset())*ah)/rg})}var pA=Xc(0),sf=Xc(1),af=(Xc(2),Xc(3),Xc(4)),N0=(Xc(5),Xc(6),Rc(function(g){g.setDate(1),g.setHours(0,0,0,0)},function(g,V){g.setMonth(g.getMonth()+V)},function(g,V){return V.getMonth()-g.getMonth()+12*(V.getFullYear()-g.getFullYear())},function(g){return g.getMonth()})),hg=Rc(function(g){g.setMonth(0,1),g.setHours(0,0,0,0)},function(g,V){g.setFullYear(g.getFullYear()+V)},function(g,V){return V.getFullYear()-g.getFullYear()},function(g){return g.getFullYear()});hg.every=function(g){return isFinite(g=Math.floor(g))&&g>0?Rc(function(V){V.setFullYear(Math.floor(V.getFullYear()/g)*g),V.setMonth(0,1),V.setHours(0,0,0,0)},function(V,fe){V.setFullYear(V.getFullYear()+fe*g)}):null};var Cc=hg,hm=Rc(function(g){g.setUTCSeconds(0,0)},function(g,V){g.setTime(+g+V*ah)},function(g,V){return(V-g)/ah},function(g){return g.getUTCMinutes()}),u1=Rc(function(g){g.setUTCMinutes(0,0,0)},function(g,V){g.setTime(+g+V*hd)},function(g,V){return(V-g)/hd},function(g){return g.getUTCHours()}),dm=Rc(function(g){g.setUTCHours(0,0,0,0)},function(g,V){g.setUTCDate(g.getUTCDate()+V)},function(g,V){return(V-g)/dd},function(g){return g.getUTCDate()-1});function Fh(g){return Rc(function(V){V.setUTCDate(V.getUTCDate()-(V.getUTCDay()+7-g)%7),V.setUTCHours(0,0,0,0)},function(V,fe){V.setUTCDate(V.getUTCDate()+7*fe)},function(V,fe){return(fe-V)/rg})}var fg=Fh(0),Ka=Fh(1),mp=(Fh(2),Fh(3),Fh(4)),fd=(Fh(5),Fh(6),Rc(function(g){g.setUTCDate(1),g.setUTCHours(0,0,0,0)},function(g,V){g.setUTCMonth(g.getUTCMonth()+V)},function(g,V){return V.getUTCMonth()-g.getUTCMonth()+12*(V.getUTCFullYear()-g.getUTCFullYear())},function(g){return g.getUTCMonth()})),pg=Rc(function(g){g.setUTCMonth(0,1),g.setUTCHours(0,0,0,0)},function(g,V){g.setUTCFullYear(g.getUTCFullYear()+V)},function(g,V){return V.getUTCFullYear()-g.getUTCFullYear()},function(g){return g.getUTCFullYear()});pg.every=function(g){return isFinite(g=Math.floor(g))&&g>0?Rc(function(V){V.setUTCFullYear(Math.floor(V.getUTCFullYear()/g)*g),V.setUTCMonth(0,1),V.setUTCHours(0,0,0,0)},function(V,fe){V.setUTCFullYear(V.getUTCFullYear()+fe*g)}):null};var lf=pg;function Wf(g,V,fe,xe,qe,nt){const yt=[[kh,1,ud],[kh,5,5e3],[kh,15,15e3],[kh,30,3e4],[nt,1,ah],[nt,5,5*ah],[nt,15,15*ah],[nt,30,30*ah],[qe,1,hd],[qe,3,3*hd],[qe,6,6*hd],[qe,12,12*hd],[xe,1,dd],[xe,2,2*dd],[fe,1,rg],[V,1,k0],[V,3,3*k0],[g,1,pp]];function kt(Gt,on,Dn){const On=Math.abs(on-Gt)/Dn,bi=Ba(([,,Yi])=>Yi).right(yt,On);if(bi===yt.length)return g.every(nm(Gt/pp,on/pp,Dn));if(0===bi)return px.every(Math.max(nm(Gt,on,Dn),1));const[Dr,mr]=yt[On/yt[bi-1][2][V.toLowerCase(),fe]))}function Zy(g,V,fe){var xe=Lc.exec(V.slice(fe,fe+1));return xe?(g.w=+xe[0],fe+xe[0].length):-1}function Rh(g,V,fe){var xe=Lc.exec(V.slice(fe,fe+1));return xe?(g.u=+xe[0],fe+xe[0].length):-1}function Rd(g,V,fe){var xe=Lc.exec(V.slice(fe,fe+2));return xe?(g.U=+xe[0],fe+xe[0].length):-1}function fm(g,V,fe){var xe=Lc.exec(V.slice(fe,fe+2));return xe?(g.V=+xe[0],fe+xe[0].length):-1}function mg(g,V,fe){var xe=Lc.exec(V.slice(fe,fe+2));return xe?(g.W=+xe[0],fe+xe[0].length):-1}function yp(g,V,fe){var xe=Lc.exec(V.slice(fe,fe+4));return xe?(g.y=+xe[0],fe+xe[0].length):-1}function gg(g,V,fe){var xe=Lc.exec(V.slice(fe,fe+2));return xe?(g.y=+xe[0]+(+xe[0]>68?1900:2e3),fe+xe[0].length):-1}function Jy(g,V,fe){var xe=/^(Z)|([+-]\d\d)(?::?(\d\d))?/.exec(V.slice(fe,fe+6));return xe?(g.Z=xe[1]?0:-(xe[2]+(xe[3]||"00")),fe+xe[0].length):-1}function A1(g,V,fe){var xe=Lc.exec(V.slice(fe,fe+1));return xe?(g.q=3*xe[0]-3,fe+xe[0].length):-1}function ev(g,V,fe){var xe=Lc.exec(V.slice(fe,fe+2));return xe?(g.m=xe[0]-1,fe+xe[0].length):-1}function zu(g,V,fe){var xe=Lc.exec(V.slice(fe,fe+2));return xe?(g.d=+xe[0],fe+xe[0].length):-1}function mA(g,V,fe){var xe=Lc.exec(V.slice(fe,fe+3));return xe?(g.m=0,g.d=+xe[0],fe+xe[0].length):-1}function jf(g,V,fe){var xe=Lc.exec(V.slice(fe,fe+2));return xe?(g.H=+xe[0],fe+xe[0].length):-1}function tv(g,V,fe){var xe=Lc.exec(V.slice(fe,fe+2));return xe?(g.M=+xe[0],fe+xe[0].length):-1}function m1(g,V,fe){var xe=Lc.exec(V.slice(fe,fe+2));return xe?(g.S=+xe[0],fe+xe[0].length):-1}function nv(g,V,fe){var xe=Lc.exec(V.slice(fe,fe+3));return xe?(g.L=+xe[0],fe+xe[0].length):-1}function g1(g,V,fe){var xe=Lc.exec(V.slice(fe,fe+6));return xe?(g.L=Math.floor(xe[0]/1e3),fe+xe[0].length):-1}function gA(g,V,fe){var xe=AA.exec(V.slice(fe,fe+1));return xe?fe+xe[0].length:-1}function H0(g,V,fe){var xe=Lc.exec(V.slice(fe));return xe?(g.Q=+xe[0],fe+xe[0].length):-1}function _g(g,V,fe){var xe=Lc.exec(V.slice(fe));return xe?(g.s=+xe[0],fe+xe[0].length):-1}function _1(g,V){return Oa(g.getDate(),V,2)}function V0(g,V){return Oa(g.getHours(),V,2)}function yg(g,V){return Oa(g.getHours()%12||12,V,2)}function G0(g,V){return Oa(1+lg.count(Cc(g),g),V,3)}function Ld(g,V){return Oa(g.getMilliseconds(),V,3)}function q0(g,V){return Ld(g,V)+"000"}function _A(g,V){return Oa(g.getMonth()+1,V,2)}function iv(g,V){return Oa(g.getMinutes(),V,2)}function Q0(g,V){return Oa(g.getSeconds(),V,2)}function pm(g){var V=g.getDay();return 0===V?7:V}function vg(g,V){return Oa(pA.count(Cc(g)-1,g),V,2)}function y1(g){var V=g.getDay();return V>=4||0===V?af(g):af.ceil(g)}function W0(g,V){return g=y1(g),Oa(af.count(Cc(g),g)+(4===Cc(g).getDay()),V,2)}function j0(g){return g.getDay()}function yA(g,V){return Oa(sf.count(Cc(g)-1,g),V,2)}function Am(g,V){return Oa(g.getFullYear()%100,V,2)}function gx(g,V){return Oa((g=y1(g)).getFullYear()%100,V,2)}function _x(g,V){return Oa(g.getFullYear()%1e4,V,4)}function v1(g,V){var fe=g.getDay();return Oa((g=fe>=4||0===fe?af(g):af.ceil(g)).getFullYear()%1e4,V,4)}function yx(g){var V=g.getTimezoneOffset();return(V>0?"-":(V*=-1,"+"))+Oa(V/60|0,"0",2)+Oa(V%60,"0",2)}function vx(g,V){return Oa(g.getUTCDate(),V,2)}function mm(g,V){return Oa(g.getUTCHours(),V,2)}function rv(g,V){return Oa(g.getUTCHours()%12||12,V,2)}function dc(g,V){return Oa(1+dm.count(lf(g),g),V,3)}function Nd(g,V){return Oa(g.getUTCMilliseconds(),V,3)}function vA(g,V){return Nd(g,V)+"000"}function vp(g,V){return Oa(g.getUTCMonth()+1,V,2)}function $f(g,V){return Oa(g.getUTCMinutes(),V,2)}function $0(g,V){return Oa(g.getUTCSeconds(),V,2)}function uf(g){var V=g.getUTCDay();return 0===V?7:V}function bx(g,V){return Oa(fg.count(lf(g)-1,g),V,2)}function b1(g){var V=g.getUTCDay();return V>=4||0===V?mp(g):mp.ceil(g)}function sv(g,V){return g=b1(g),Oa(mp.count(lf(g),g)+(4===lf(g).getUTCDay()),V,2)}function bg(g){return g.getUTCDay()}function X0(g,V){return Oa(Ka.count(lf(g)-1,g),V,2)}function xx(g,V){return Oa(g.getUTCFullYear()%100,V,2)}function K0(g,V){return Oa((g=b1(g)).getUTCFullYear()%100,V,2)}function Xo(g,V){return Oa(g.getUTCFullYear()%1e4,V,4)}function ls(g,V){var fe=g.getUTCDay();return Oa((g=fe>=4||0===fe?mp(g):mp.ceil(g)).getUTCFullYear()%1e4,V,4)}function hf(){return"+0000"}function ov(){return"%"}function av(g){return+g}function x1(g){return Math.floor(+g/1e3)}!function Mc(g){df=function mx(g){var V=g.dateTime,fe=g.date,xe=g.time,qe=g.periods,nt=g.days,yt=g.shortDays,Mt=g.months,kt=g.shortMonths,Gt=_p(qe),on=cf(qe),Dn=_p(nt),On=cf(nt),bi=_p(yt),Dr=cf(yt),mr=_p(Mt),Yi=cf(Mt),Ys=_p(kt),go=cf(kt),Br={a:function xu(as){return yt[as.getDay()]},A:function Hh(as){return nt[as.getDay()]},b:function Yc(as){return kt[as.getMonth()]},B:function vf(as){return Mt[as.getMonth()]},c:null,d:_1,e:_1,f:q0,g:gx,G:v1,H:V0,I:yg,j:G0,L:Ld,m:_A,M:iv,p:function Tp(as){return qe[+(as.getHours()>=12)]},q:function r_(as){return 1+~~(as.getMonth()/3)},Q:av,s:x1,S:Q0,u:pm,U:vg,V:W0,w:j0,W:yA,x:null,X:null,y:Am,Y:_x,Z:yx,"%":ov},Li={a:function Gd(as){return yt[as.getUTCDay()]},A:function bf(as){return nt[as.getUTCDay()]},b:function tp(as){return kt[as.getUTCMonth()]},B:function Cs(as){return Mt[as.getUTCMonth()]},c:null,d:vx,e:vx,f:vA,g:K0,G:ls,H:mm,I:rv,j:dc,L:Nd,m:vp,M:$f,p:function Fg(as){return qe[+(as.getUTCHours()>=12)]},q:function Ep(as){return 1+~~(as.getUTCMonth()/3)},Q:av,s:x1,S:$0,u:uf,U:bx,V:sv,w:bg,W:X0,x:null,X:null,y:xx,Y:Xo,Z:hf,"%":ov},ro={a:function oc(as,ha,Ha){var Ir=bi.exec(ha.slice(Ha));return Ir?(as.w=Dr.get(Ir[0].toLowerCase()),Ha+Ir[0].length):-1},A:function eo(as,ha,Ha){var Ir=Dn.exec(ha.slice(Ha));return Ir?(as.w=On.get(Ir[0].toLowerCase()),Ha+Ir[0].length):-1},b:function Qs(as,ha,Ha){var Ir=Ys.exec(ha.slice(Ha));return Ir?(as.m=go.get(Ir[0].toLowerCase()),Ha+Ir[0].length):-1},B:function Ro(as,ha,Ha){var Ir=mr.exec(ha.slice(Ha));return Ir?(as.m=Yi.get(Ir[0].toLowerCase()),Ha+Ir[0].length):-1},c:function ac(as,ha,Ha){return ca(as,V,ha,Ha)},d:zu,e:zu,f:g1,g:gg,G:yp,H:jf,I:jf,j:mA,L:nv,m:ev,M:tv,p:function Il(as,ha,Ha){var Ir=Gt.exec(ha.slice(Ha));return Ir?(as.p=on.get(Ir[0].toLowerCase()),Ha+Ir[0].length):-1},q:A1,Q:H0,s:_g,S:m1,u:Rh,U:Rd,V:fm,w:Zy,W:mg,x:function Gu(as,ha,Ha){return ca(as,fe,ha,Ha)},X:function Kc(as,ha,Ha){return ca(as,xe,ha,Ha)},y:gg,Y:yp,Z:Jy,"%":gA};function Ur(as,ha){return function(Ha){var qu,qd,vd,Ir=[],ch=-1,hl=0,uh=as.length;for(Ha instanceof Date||(Ha=new Date(+Ha));++ch53)return null;"w"in Ir||(Ir.w=1),"Z"in Ir?(uh=(hl=p1(Ag(Ir.y,0,1))).getUTCDay(),hl=uh>4||0===uh?Ka.ceil(hl):Ka(hl),hl=dm.offset(hl,7*(Ir.V-1)),Ir.y=hl.getUTCFullYear(),Ir.m=hl.getUTCMonth(),Ir.d=hl.getUTCDate()+(Ir.w+6)%7):(uh=(hl=f1(Ag(Ir.y,0,1))).getDay(),hl=uh>4||0===uh?sf.ceil(hl):sf(hl),hl=lg.offset(hl,7*(Ir.V-1)),Ir.y=hl.getFullYear(),Ir.m=hl.getMonth(),Ir.d=hl.getDate()+(Ir.w+6)%7)}else("W"in Ir||"U"in Ir)&&("w"in Ir||(Ir.w="u"in Ir?Ir.u%7:"W"in Ir?1:0),uh="Z"in Ir?p1(Ag(Ir.y,0,1)).getUTCDay():f1(Ag(Ir.y,0,1)).getDay(),Ir.m=0,Ir.d="W"in Ir?(Ir.w+6)%7+7*Ir.W-(uh+5)%7:Ir.w+7*Ir.U-(uh+6)%7);return"Z"in Ir?(Ir.H+=Ir.Z/100|0,Ir.M+=Ir.Z%100,p1(Ir)):f1(Ir)}}function ca(as,ha,Ha,Ir){for(var qu,qd,ch=0,hl=ha.length,uh=Ha.length;ch=uh)return-1;if(37===(qu=ha.charCodeAt(ch++))){if(qu=ha.charAt(ch++),!(qd=ro[qu in Ky?ha.charAt(ch++):qu])||(Ir=qd(as,Ha,Ir))<0)return-1}else if(qu!=Ha.charCodeAt(Ir++))return-1}return Ir}return Br.x=Ur(fe,Br),Br.X=Ur(xe,Br),Br.c=Ur(V,Br),Li.x=Ur(fe,Li),Li.X=Ur(xe,Li),Li.c=Ur(V,Li),{format:function(as){var ha=Ur(as+="",Br);return ha.toString=function(){return as},ha},parse:function(as){var ha=Wo(as+="",!1);return ha.toString=function(){return as},ha},utcFormat:function(as){var ha=Ur(as+="",Li);return ha.toString=function(){return as},ha},utcParse:function(as){var ha=Wo(as+="",!0);return ha.toString=function(){return as},ha}}}(g),gm=df.format,fc=df.utcFormat,Xf=df.utcParse}({dateTime:"%x, %X",date:"%-m/%-d/%Y",time:"%-I:%M:%S %p",periods:["AM","PM"],days:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],shortDays:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],months:["January","February","March","April","May","June","July","August","September","October","November","December"],shortMonths:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"]});var xg="%Y-%m-%dT%H:%M:%S.%LZ";function bp(g){return new Date(g)}function wg(g){return g instanceof Date?+g:+new Date(+g)}function Cg(g,V,fe,xe,qe,nt,yt,Mt,kt,Gt){var on=er(),Dn=on.invert,On=on.domain,bi=Gt(".%L"),Dr=Gt(":%S"),mr=Gt("%I:%M"),Yi=Gt("%I %p"),Ys=Gt("%a %d"),go=Gt("%b %d"),Br=Gt("%B"),Li=Gt("%Y");function ro(Ur){return(kt(Ur)1?0:g<-1?pf:Math.acos(g)}function Z0(g){return g>=1?gd:g<=-1?-gd:Math.asin(g)}function Dg(g){return g.innerRadius}function C1(g){return g.outerRadius}function Af(g){return g.startAngle}function Ya(g){return g.endAngle}function pc(g){return g&&g.padAngle}function xp(g,V,fe,xe,qe,nt,yt,Mt){var kt=fe-g,Gt=xe-V,on=yt-qe,Dn=Mt-nt,On=Dn*kt-on*Gt;if(!(On*Onac*ac+Gu*Gu&&(ca=oc,Il=eo),{cx:ca,cy:Il,x01:-on,y01:-Dn,x11:ca*(qe/ro-1),y11:Il*(qe/ro-1)}}function M1(){var g=Dg,V=C1,fe=md(0),xe=null,qe=Af,nt=Ya,yt=pc,Mt=null;function kt(){var Gt,on,Dn=+g.apply(this,arguments),On=+V.apply(this,arguments),bi=qe.apply(this,arguments)-gd,Dr=nt.apply(this,arguments)-gd,mr=vm(Dr-bi),Yi=Dr>bi;if(Mt||(Mt=Gt=Sa()),OnUc)if(mr>Tg-Uc)Mt.moveTo(On*Yf(bi),On*Ud(bi)),Mt.arc(0,0,On,bi,Dr,!Yi),Dn>Uc&&(Mt.moveTo(Dn*Yf(Dr),Dn*Ud(Dr)),Mt.arc(0,0,Dn,Dr,bi,Yi));else{var Qs,Ro,Ys=bi,go=Dr,Br=bi,Li=Dr,ro=mr,Ur=mr,Wo=yt.apply(this,arguments)/2,ca=Wo>Uc&&(xe?+xe.apply(this,arguments):zd(Dn*Dn+On*On)),Il=Sg(vm(On-Dn)/2,+fe.apply(this,arguments)),oc=Il,eo=Il;if(ca>Uc){var ac=Z0(ca/Dn*Ud(Wo)),Gu=Z0(ca/On*Ud(Wo));(ro-=2*ac)>Uc?(Br+=ac*=Yi?1:-1,Li-=ac):(ro=0,Br=Li=(bi+Dr)/2),(Ur-=2*Gu)>Uc?(Ys+=Gu*=Yi?1:-1,go-=Gu):(Ur=0,Ys=go=(bi+Dr)/2)}var Kc=On*Yf(Ys),xu=On*Ud(Ys),Hh=Dn*Yf(Li),Yc=Dn*Ud(Li);if(Il>Uc){var bf,vf=On*Yf(go),Tp=On*Ud(go),r_=Dn*Yf(Br),Gd=Dn*Ud(Br);if(mrUc?eo>Uc?(Qs=Bg(r_,Gd,Kc,xu,On,eo,Yi),Ro=Bg(vf,Tp,Hh,Yc,On,eo,Yi),Mt.moveTo(Qs.cx+Qs.x01,Qs.cy+Qs.y01),eoUc&&ro>Uc?oc>Uc?(Qs=Bg(Hh,Yc,vf,Tp,Dn,-oc,Yi),Ro=Bg(Kc,xu,r_,Gd,Dn,-oc,Yi),Mt.lineTo(Qs.cx+Qs.x01,Qs.cy+Qs.y01),oc=0&&g._call.call(void 0,V),g=g._next;--Hd}()}finally{Hd=0,function B1(){for(var g,fe,V=mf,xe=1/0;V;)V._call?(xe>V._time&&(xe=V._time),g=V,V=V._next):(fe=V._next,V._next=null,V=g?g._next=fe:mf=fe);CA=g,MA(xe)}(),Hu=0}}function t_(){var g=wp.now(),V=g-xm;V>1e3&&(wm-=V,xm=g)}function MA(g){Hd||(_d&&(_d=clearTimeout(_d)),g-Hu>24?(g<1/0&&(_d=setTimeout(e_,g-wp.now()-wm)),Vd&&(Vd=clearInterval(Vd))):(Vd||(xm=wp.now(),Vd=setInterval(t_,1e3)),Hd=1,T1(e_)))}function Cm(g,V,fe){var xe=new Pg;return xe.restart(qe=>{xe.stop(),g(qe+V)},V=null==V?0:+V,fe),xe}Pg.prototype=J0.prototype={constructor:Pg,restart:function(g,V,fe){if("function"!=typeof g)throw new TypeError("callback is not a function");fe=(null==fe?E1():+fe)+(null==V?0:+V),!this._next&&CA!==this&&(CA?CA._next=this:mf=this,CA=this),this._call=g,this._time=fe,MA()},stop:function(){this._call&&(this._call=null,this._time=1/0,MA())}};var I1=Xe("start","end","cancel","interrupt"),n_=[];function St(g,V,fe,xe,qe,nt){var yt=g.__transition;if(yt){if(fe in yt)return}else g.__transition={};!function zn(g,V,fe){var qe,xe=g.__transition;function yt(Gt){var on,Dn,On,bi;if(1!==fe.state)return kt();for(on in xe)if((bi=xe[on]).name===fe.name){if(3===bi.state)return Cm(yt);4===bi.state?(bi.state=6,bi.timer.stop(),bi.on.call("interrupt",g,g.__data__,bi.index,bi.group),delete xe[on]):+on0)throw new Error("too late; already scheduled");return fe}function $t(g,V){var fe=Pn(g,V);if(fe.state>3)throw new Error("too late; already running");return fe}function Pn(g,V){var fe=g.__transition;if(!fe||!(fe=fe[V]))throw new Error("transition not found");return fe}function ws(g,V){var fe,xe;return function(){var qe=$t(this,g),nt=qe.tween;if(nt!==fe)for(var yt=0,Mt=(xe=fe=nt).length;yt=0&&(V=V.slice(0,fe)),!V||"start"===V})}(V)?Kt:$t;return function(){var yt=nt(this,g),Mt=yt.on;Mt!==xe&&(qe=(xe=Mt).copy()).on(V,fe),yt.on=qe}}var _3=Cr.prototype.constructor;function P1(g){return function(){this.style.removeProperty(g)}}function Z2(g,V,fe){return function(xe){this.style.setProperty(g,V.call(this,xe),fe)}}function J2(g,V,fe){var xe,qe;function nt(){var yt=V.apply(this,arguments);return yt!==qe&&(xe=(qe=yt)&&Z2(g,yt,fe)),xe}return nt._value=V,nt}function fv(g){return function(V){this.textContent=g.call(this,V)}}function O1(g){var V,fe;function xe(){var qe=g.apply(this,arguments);return qe!==fe&&(V=(fe=qe)&&fv(qe)),V}return xe._value=g,xe}var iC=0;function yd(g,V,fe,xe){this._groups=g,this._parents=V,this._name=fe,this._id=xe}function Bx(){return++iC}var zh=Cr.prototype;yd.prototype=function Dx(g){return Cr().transition(g)}.prototype={constructor:yd,select:function Mx(g){var V=this._name,fe=this._id;"function"!=typeof g&&(g=ar(g));for(var xe=this._groups,qe=xe.length,nt=new Array(qe),yt=0;yt2&&xe.state<5,xe.state=6,xe.timer.stop(),xe.on.call(qe?"interrupt":"cancel",g,g.__data__,xe.index,xe.group),delete fe[yt]):nt=!1;nt&&delete g.__transition}}(this,g)})},Cr.prototype.transition=function x3(g){var V,fe;g instanceof yd?(V=g._id,g=g._name):(V=Bx(),(fe=pv).time=E1(),g=null==g?null:g+"");for(var xe=this._groups,qe=xe.length,nt=0;nt{"use strict";Me.d(At,{JO:()=>_,Rw:()=>w,St:()=>m,ii:()=>q,pz:()=>$,wu:()=>k});var ze=Me(4788),L=(Me(2253),Me(9542)),_e=Me(8538),De=Me(3414),$e=Me(3675),Ze=Me(6458),Ie=Me(3834);const Ve="ROOT::Experimental::";function Re(){return ce.apply(this,arguments)}function ce(){return(ce=(0,ze.Z)(function*(){return Me.e(592).then(Me.bind(Me,4971))})).apply(this,arguments)}function Z(){return Y.apply(this,arguments)}function Y(){return(Y=(0,ze.Z)(function*(){return Promise.resolve().then(Me.bind(Me,9665)).then(D=>{let oe=m("ROOT.TGeoVolumeAssembly");return oe&&(oe.icon="img_geoassembly"),D})})).apply(this,arguments)}const ue="TGraph2D",K="TH2Poly",J="TEllipse",R="TSpline3",P="TTree",v="TCanvasWebSnapshot",A={lst:[{name:L.clTCanvas,icon:"img_canvas",class:()=>Promise.resolve().then(Me.bind(Me,49)).then(D=>D.TCanvasPainter),opt:";grid;gridx;gridy;tick;tickx;ticky;log;logx;logy;logz",expand_item:"fPrimitives"},{name:L.clTPad,icon:"img_canvas",class:()=>Promise.resolve().then(Me.bind(Me,3834)).then(D=>D.TPadPainter),opt:";grid;gridx;gridy;tick;tickx;ticky;log;logx;logy;logz",expand_item:"fPrimitives"},{name:"TSlider",icon:"img_canvas",class:()=>Promise.resolve().then(Me.bind(Me,3834)).then(D=>D.TPadPainter)},{name:Ie.clTButton,icon:"img_canvas",class:()=>Promise.resolve().then(Me.bind(Me,3834)).then(D=>D.TPadPainter)},{name:"TFrame",icon:"img_frame",draw:()=>Promise.resolve().then(Me.bind(Me,49)).then(D=>D.drawTFrame)},{name:L.clTPave,icon:"img_pavetext",class:()=>Promise.resolve().then(Me.bind(Me,4585)).then(D=>D.TPavePainter)},{name:L.clTPaveText,sameas:L.clTPave},{name:"TPavesText",sameas:L.clTPave},{name:L.clTPaveStats,sameas:L.clTPave},{name:"TPaveLabel",sameas:L.clTPave},{name:"TDiamond",sameas:L.clTPave},{name:L.clTLegend,icon:"img_pavelabel",sameas:L.clTPave},{name:L.clTPaletteAxis,icon:"img_colz",sameas:L.clTPave},{name:L.clTLatex,icon:"img_text",draw:()=>Re().then(D=>D.drawText),direct:!0},{name:L.clTMathText,sameas:L.clTLatex},{name:L.clTText,sameas:L.clTLatex},{name:/^TH1/,icon:"img_histo1d",class:()=>Promise.resolve().then(Me.bind(Me,629)).then(D=>D.TH1Painter),opt:";hist;P;P0;E;E1;E2;E3;E4;E1X0;L;LF2;B;B1;A;TEXT;LEGO;same",ctrl:"l"},{name:L.clTProfile,icon:"img_profile",class:()=>Promise.resolve().then(Me.bind(Me,629)).then(D=>D.TH1Painter),opt:";E0;E1;E2;p;AH;hist"},{name:K,icon:"img_histo2d",class:()=>Promise.resolve().then(Me.bind(Me,8189)).then(D=>D.TH2Painter),opt:";COL;COL0;COLZ;LCOL;LCOL0;LCOLZ;LEGO;TEXT;same",expand_item:"fBins",theonly:!0},{name:"TProfile2Poly",sameas:K},{name:"TH2PolyBin",icon:"img_histo2d",draw_field:"fPoly",draw_field_opt:"L"},{name:/^TH2/,icon:"img_histo2d",class:()=>Promise.resolve().then(Me.bind(Me,8189)).then(D=>D.TH2Painter),dflt:"col",opt:";COL;COLZ;COL0;COL1;COL0Z;COL1Z;COLA;BOX;BOX1;PROJ;PROJX1;PROJX2;PROJX3;PROJY1;PROJY2;PROJY3;SCAT;TEXT;TEXTE;TEXTE0;CANDLE;CANDLE1;CANDLE2;CANDLE3;CANDLE4;CANDLE5;CANDLE6;CANDLEY1;CANDLEY2;CANDLEY3;CANDLEY4;CANDLEY5;CANDLEY6;VIOLIN;VIOLIN1;VIOLIN2;VIOLINY1;VIOLINY2;CONT;CONT1;CONT2;CONT3;CONT4;ARR;SURF;SURF1;SURF2;SURF4;SURF6;E;A;LEGO;LEGO0;LEGO1;LEGO2;LEGO3;LEGO4;same",ctrl:"lego"},{name:L.clTProfile2D,sameas:L.clTH2},{name:/^TH3/,icon:"img_histo3d",class:()=>Promise.resolve().then(Me.bind(Me,5906)).then(D=>D.TH3Painter),opt:";SCAT;BOX;BOX2;BOX3;GLBOX1;GLBOX2;GLCOL"},{name:"THStack",icon:"img_histo1d",class:()=>Me.e(832).then(Me.bind(Me,832)).then(D=>D.THStackPainter),expand_item:"fHists",opt:"NOSTACK;HIST;E;PFC;PLC"},{name:L.clTPolyMarker3D,icon:"img_histo3d",draw:()=>Promise.all([Me.e(592),Me.e(60)]).then(Me.bind(Me,7060)).then(D=>D.drawPolyMarker3D),direct:!0,frame:"3d"},{name:L.clTPolyLine3D,icon:"img_graph",draw:()=>Promise.all([Me.e(592),Me.e(60)]).then(Me.bind(Me,7060)).then(D=>D.drawPolyLine3D),direct:!0,frame:"3d"},{name:"TGraphStruct"},{name:"TGraphNode"},{name:"TGraphEdge"},{name:L.clTGraphTime,icon:"img_graph",class:()=>Me.e(137).then(Me.bind(Me,8137)).then(D=>D.TGraphTimePainter),opt:"once;repeat;first",theonly:!0},{name:ue,icon:"img_graph",class:()=>Me.e(351).then(Me.bind(Me,7351)).then(D=>D.TGraph2DPainter),opt:";P;PCOL",theonly:!0},{name:"TGraph2DErrors",sameas:ue,opt:";P;PCOL;ERR",theonly:!0},{name:"TGraph2DAsymmErrors",sameas:ue,opt:";P;PCOL;ERR",theonly:!0},{name:L.clTGraphPolargram,icon:"img_graph",class:()=>Me.e(274).then(Me.bind(Me,6274)).then(D=>D.TGraphPolargramPainter),theonly:!0},{name:"TGraphPolar",icon:"img_graph",class:()=>Me.e(274).then(Me.bind(Me,6274)).then(D=>D.TGraphPolarPainter),opt:";F;L;P;PE",theonly:!0},{name:/^TGraph/,icon:"img_graph",class:()=>Me.e(241).then(Me.bind(Me,8241)).then(D=>D.TGraphPainter),opt:";L;P"},{name:"TEfficiency",icon:"img_graph",class:()=>Promise.all([Me.e(241),Me.e(592),Me.e(946)]).then(Me.bind(Me,8946)).then(D=>D.TEfficiencyPainter),opt:";AP"},{name:L.clTCutG,sameas:L.clTGraph},{name:/^RooHist/,sameas:L.clTGraph},{name:/^RooCurve/,sameas:L.clTGraph},{name:"RooPlot",icon:"img_canvas",func:function H(D,oe){return le.apply(this,arguments)}},{name:"TRatioPlot",icon:"img_mgraph",class:()=>Promise.all([Me.e(592),Me.e(230)]).then(Me.bind(Me,4230)).then(D=>D.TRatioPlotPainter),opt:""},{name:L.clTMultiGraph,icon:"img_mgraph",class:()=>Promise.all([Me.e(241),Me.e(592),Me.e(717)]).then(Me.bind(Me,3717)).then(D=>D.TMultiGraphPainter),opt:";l;p;3d",expand_item:"fGraphs"},{name:_e.I8,icon:"img_question",draw:()=>Promise.resolve().then(Me.bind(Me,4074)).then(D=>D.drawStreamerInfo)},{name:"TWebPainting",icon:"img_graph",class:()=>Me.e(15).then(Me.bind(Me,15)).then(D=>D.TWebPaintingPainter)},{name:v,icon:"img_canvas",draw:()=>Promise.resolve().then(Me.bind(Me,49)).then(D=>D.drawTPadSnapshot)},{name:"TPadWebSnapshot",sameas:v},{name:"kind:Text",icon:"img_text",func:Ze.VE},{name:L.clTObjString,icon:"img_text",func:Ze.VE},{name:L.clTF1,icon:"img_tf1",class:()=>Me.e(592).then(Me.bind(Me,9428)).then(D=>D.TF1Painter)},{name:L.clTF2,icon:"img_tf2",draw:()=>Promise.all([Me.e(592),Me.e(601)]).then(Me.bind(Me,3601)).then(D=>D.drawTF2)},{name:R,icon:"img_tf1",class:()=>Me.e(484).then(Me.bind(Me,1484)).then(D=>D.TSplinePainter)},{name:"TSpline5",sameas:R},{name:J,icon:"img_graph",draw:()=>Re().then(D=>D.drawEllipse),direct:!0},{name:"TArc",sameas:J},{name:"TCrown",sameas:J},{name:"TPie",icon:"img_graph",draw:()=>Re().then(D=>D.drawPie),direct:!0},{name:"TPieSlice",icon:"img_graph",dummy:!0},{name:"TExec",icon:"img_graph",dummy:!0},{name:L.clTLine,icon:"img_graph",draw:()=>Re().then(D=>D.drawTLine)},{name:"TArrow",icon:"img_graph",class:()=>Me.e(99).then(Me.bind(Me,5099)).then(D=>D.TArrowPainter)},{name:L.clTPolyLine,icon:"img_graph",draw:()=>Re().then(D=>D.drawPolyLine),direct:!0},{name:"TCurlyLine",sameas:L.clTPolyLine},{name:"TCurlyArc",sameas:L.clTPolyLine},{name:"TParallelCoord",icon:"img_graph",dummy:!0},{name:L.clTGaxis,icon:"img_graph",draw:()=>Promise.resolve().then(Me.bind(Me,49)).then(D=>D.drawTGaxis)},{name:L.clTBox,icon:"img_graph",draw:()=>Re().then(D=>D.drawBox),direct:!0},{name:"TWbox",sameas:L.clTBox},{name:"TSliderBox",sameas:L.clTBox},{name:"TMarker",icon:"img_graph",draw:()=>Re().then(D=>D.drawMarker),direct:!0},{name:"TPolyMarker",icon:"img_graph",draw:()=>Re().then(D=>D.drawPolyMarker),direct:!0},{name:"TASImage",icon:"img_mgraph",class:()=>Me.e(647).then(Me.bind(Me,5647)).then(D=>D.TASImagePainter),opt:";z"},{name:"TJSImage",icon:"img_mgraph",draw:()=>Re().then(D=>D.drawJSImage),opt:";scale;center"},{name:L.clTGeoVolume,icon:"img_histo3d",class:()=>Z().then(D=>D.TGeoPainter),get_expand:()=>Z().then(D=>D.expandGeoObject),opt:";more;all;count;projx;projz;wire;no_screen;dflt",ctrl:"dflt"},{name:"TEveGeoShapeExtract",sameas:L.clTGeoVolume,opt:";more;all;count;projx;projz;wire;dflt"},{name:Ve+"REveGeoShapeExtract",sameas:L.clTGeoVolume,opt:";more;all;count;projx;projz;wire;dflt"},{name:"TGeoOverlap",sameas:L.clTGeoVolume,opt:";more;all;count;projx;projz;wire;dflt",dflt:"dflt",ctrl:"expand"},{name:"TGeoManager",sameas:L.clTGeoVolume,opt:";more;all;count;projx;projz;wire;tracks;no_screen;dflt",dflt:"expand",ctrl:"dflt"},{name:"TGeoVolumeAssembly",sameas:L.clTGeoVolume,opt:";more;all;count"},{name:/^TGeo/,class:()=>Z().then(D=>D.TGeoPainter),get_expand:()=>Z().then(D=>D.expandGeoObject),opt:";more;all;axis;compa;count;projx;projz;wire;no_screen;dflt",dflt:"dflt",ctrl:"expand"},{name:"TAxis3D",icon:"img_graph",draw:()=>Z().then(D=>D.drawAxis3D),direct:!0},{name:"kind:Command",icon:"img_execute",execute:!0},{name:"TFolder",icon:"img_folder",icon2:"img_folderopen",noinspect:!0,get_expand:()=>Promise.resolve().then(Me.bind(Me,4074)).then(D=>D.folderHierarchy)},{name:"TTask",icon:"img_task",get_expand:()=>Promise.resolve().then(Me.bind(Me,4074)).then(D=>D.taskHierarchy),for_derived:!0},{name:P,icon:"img_tree",get_expand:()=>Promise.resolve().then(Me.bind(Me,3414)).then(D=>D.treeHierarchy),draw:()=>Promise.all([Me.e(241),Me.e(592),Me.e(580)]).then(Me.bind(Me,2580)).then(D=>D.drawTree),dflt:"expand",opt:"player;testio",shift:"inspect"},{name:"TNtuple",sameas:P},{name:"TNtupleD",sameas:P},{name:De.clTBranchFunc,icon:"img_leaf_method",draw:()=>Promise.all([Me.e(241),Me.e(592),Me.e(580)]).then(Me.bind(Me,2580)).then(D=>D.drawTree),opt:";dump",noinspect:!0},{name:/^TBranch/,icon:"img_branch",draw:()=>Promise.all([Me.e(241),Me.e(592),Me.e(580)]).then(Me.bind(Me,2580)).then(D=>D.drawTree),dflt:"expand",opt:";dump",ctrl:"dump",shift:"inspect",ignore_online:!0,always_draw:!0},{name:/^TLeaf/,icon:"img_leaf",noexpand:!0,draw:()=>Promise.all([Me.e(241),Me.e(592),Me.e(580)]).then(Me.bind(Me,2580)).then(D=>D.drawTree),opt:";dump",ctrl:"dump",ignore_online:!0,always_draw:!0},{name:L.clTList,icon:"img_list",draw:()=>Promise.resolve().then(Me.bind(Me,4074)).then(D=>D.drawList),get_expand:()=>Promise.resolve().then(Me.bind(Me,4074)).then(D=>D.listHierarchy),dflt:"expand"},{name:L.clTHashList,sameas:L.clTList},{name:L.clTObjArray,sameas:L.clTList},{name:L.clTClonesArray,sameas:L.clTList},{name:L.clTMap,sameas:L.clTList},{name:L.clTColor,icon:"img_color"},{name:"TFile",icon:"img_file",noinspect:!0},{name:"TMemFile",icon:"img_file",noinspect:!0},{name:L.clTStyle,icon:"img_question",noexpand:!0},{name:"Session",icon:"img_globe"},{name:"kind:TopFolder",icon:"img_base"},{name:"kind:Folder",icon:"img_folder",icon2:"img_folderopen",noinspect:!0},{name:Ve+"RCanvas",icon:"img_canvas",class:()=>I().then(D=>D.RCanvasPainter),opt:"",expand_item:"fPrimitives"},{name:Ve+"RCanvasDisplayItem",icon:"img_canvas",draw:()=>I().then(D=>D.drawRPadSnapshot),opt:"",expand_item:"fPrimitives"},{name:Ve+"RHist1Drawable",icon:"img_histo1d",class:()=>I("rh1").then(D=>D.RH1Painter),opt:""},{name:Ve+"RHist2Drawable",icon:"img_histo2d",class:()=>I("rh2").then(D=>D.RH2Painter),opt:""},{name:Ve+"RHist3Drawable",icon:"img_histo3d",class:()=>I("rh3").then(D=>D.RH3Painter),opt:""},{name:Ve+"RHistDisplayItem",icon:"img_histo1d",draw:()=>I("rh3").then(D=>D.drawHistDisplayItem),opt:""},{name:Ve+"RText",icon:"img_text",draw:()=>I("more").then(D=>D.drawText),opt:"",direct:"v7",csstype:"text"},{name:Ve+"RFrameTitle",icon:"img_text",draw:()=>I().then(D=>D.drawRFrameTitle),opt:"",direct:"v7",csstype:"title"},{name:Ve+"RPaletteDrawable",icon:"img_text",class:()=>I("more").then(D=>D.RPalettePainter),opt:""},{name:Ve+"RDisplayHistStat",icon:"img_pavetext",class:()=>I("pave").then(D=>D.RHistStatsPainter),opt:""},{name:Ve+"RLine",icon:"img_graph",draw:()=>I("more").then(D=>D.drawLine),opt:"",direct:"v7",csstype:"line"},{name:Ve+"RBox",icon:"img_graph",draw:()=>I("more").then(D=>D.drawBox),opt:"",direct:"v7",csstype:"box"},{name:Ve+"RMarker",icon:"img_graph",draw:()=>I("more").then(D=>D.drawMarker),opt:"",direct:"v7",csstype:"marker"},{name:Ve+"RPave",icon:"img_pavetext",class:()=>I("pave").then(D=>D.RPavePainter),opt:""},{name:Ve+"RLegend",icon:"img_graph",class:()=>I("pave").then(D=>D.RLegendPainter),opt:""},{name:Ve+"RPaveText",icon:"img_pavetext",class:()=>I("pave").then(D=>D.RPaveTextPainter),opt:""},{name:Ve+"RFrame",icon:"img_frame",draw:()=>I().then(D=>D.drawRFrame),opt:""},{name:Ve+"RFont",icon:"img_text",draw:()=>I().then(D=>D.drawRFont),opt:"",direct:"v7",csstype:"font"},{name:Ve+"RAxisDrawable",icon:"img_frame",draw:()=>I().then(D=>D.drawRAxis),opt:""}],cache:{}};function w(D){return A.lst.push(D),D}function m(D,oe){if(!(0,L.isStr)(D))return null;""===oe&&(oe=null);let ge=null;if(null===oe&&D in A.cache)return A.cache[D];let Ee=0==D.indexOf("ROOT.")?D.slice(5):"kind:"+D,Ge=0;for(let We=0;We=0)return et}}else if(oe===Ge)return et;++Ge}return ge}function _(D){return(0,L.isStr)(D)&&(D=m(D)),!!(0,L.isObject)(D)&&!!(D.func||D.class||D.draw||D.draw_field)}function k(D,oe){let ge={opts:null,inspect:!1,expand:!1,draw:!1,handle:null};if(!(0,L.isStr)(D))return ge;let Ee=!1,Ge=!1,We=!1;(0,L.isStr)(oe)||(oe="");for(let et=0;et<1e3;++et){let Tt=m(D,et);if(!(Tt&&(ge.handle||(ge.handle=Tt),Tt.noinspect&&(Ge=!0),(Tt.expand||Tt.get_expand||Tt.expand_item||Tt.can_expand)&&(We=!0),Tt.func||Tt.class||Tt.draw)))break;if(Ee=!0,!("opt"in Tt))continue;let Bt=Tt.opt.split(";");for(let ve=0;ve=0&&0==Bt[ve].indexOf("same"))&&(null===ge.opts&&(ge.opts=[]),ge.opts.indexOf(Bt[ve])<0&&ge.opts.push(Bt[ve]));if(Tt.theonly)break}return oe.indexOf("noinspect")>=0&&(Ge=!0),Ee&&null===ge.opts&&(ge.opts=[""]),!Ee&&0==D.indexOf("ROOT.")&&!Ge&&(ge.opts=[]),!Ge&&ge.opts&&ge.opts.push("inspect"),ge.inspect=!Ge,ge.expand=We,ge.draw=!!ge.opts,ge}function q(D,oe,ge){return T.apply(this,arguments)}function T(){return(T=(0,ze.Z)(function*(D,oe,ge){if(!(0,L.isObject)(oe))return Promise.reject(Error("not an object in draw call"));if("inspect"==ge)return Promise.resolve().then(Me.bind(Me,4074)).then(Tt=>Tt.drawInspector(D,oe));let Ee,Ge,et;if("_typename"in oe)Ge="type "+oe._typename,Ee=m("ROOT."+oe._typename,ge);else{if(!("_kind"in oe))return Promise.resolve().then(Me.bind(Me,4074)).then(Tt=>Tt.drawInspector(D,oe));Ge="kind "+oe._kind,Ee=m(oe._kind,ge)}if(!Ee)return Promise.reject(Error(`Object of ${Ge} cannot be shown with draw`));if(Ee.dummy)return null;if(Ee.draw_field&&oe[Ee.draw_field])return q(D,oe[Ee.draw_field],ge||Ee.draw_field_opt);if(!_(Ee)){if(ge&&ge.indexOf("same")>=0){let Tt=(0,Ze.SO)(D);if((0,L.isFunc)(Tt?.performDrop))return Tt.performDrop(oe,"",null,ge)}return Promise.reject(Error(`Function not specified to draw object ${Ge}`))}function We(){let Tt,Bt;return"v7"==Ee.direct?Tt=Me.e(56).then(Me.bind(Me,9056)).then(ve=>(Bt=new ve.RObjectPainter(D,oe,ge,Ee.csstype),Bt.redraw=Ee.func,ve.ensureRCanvas(Bt,Ee.frame||!1))).then(()=>Bt.redraw()):Ee.direct?(Bt=new Ze.tK(D,oe,ge),Bt.redraw=Ee.func,Tt=Promise.resolve().then(Me.bind(Me,49)).then(ve=>ve.ensureTCanvas(Bt,Ee.frame||!1)).then(()=>Bt.redraw())):Tt=(0,L.getPromise)(Ee.func(D,oe,ge)),Tt.then(ve=>{if(Bt||(Bt=ve),!Bt)throw Error(`Fail to draw object ${Ge}`);return(0,L.isObject)(Bt)&&!Bt.options&&(Bt.options={original:ge||""}),Bt})}if((0,L.isFunc)(Ee.func))return We();if((0,L.isFunc)(Ee.class))et=Ee.class().then(Tt=>{Ee.func=Tt.draw});else if((0,L.isFunc)(Ee.draw))et=Ee.draw().then(Tt=>{Ee.func=Tt});else{if(!Ee.func||!(0,L.isStr)(Ee.func))return Promise.reject(Error(`Draw function or class not specified to draw ${Ge}`));if(!Ee.prereq&&!Ee.script)return Promise.reject(Error(`Prerequicities to load ${Ee.func} are not specified`));et=(L.internals.ignore_v6?Promise.resolve(!0):(0,L._ensureJSROOT)().then(Bt=>(Ee.prereq?Bt.require(Ee.prereq):Promise.resolve(!0)).then(()=>{if(Ee.script)return(0,L.loadScript)(Ee.script)}).then(()=>Bt._complete_loading()))).then(()=>{let Bt=(0,L.findFunction)(Ee.func);if(!(0,L.isFunc)(Bt))return Promise.reject(Error(`Fail to find function ${Ee.func} after loading ${Ee.prereq||Ee.script}`));Ee.func=Bt})}return et.then(()=>We())})).apply(this,arguments)}function $(D,oe,ge){return ee.apply(this,arguments)}function ee(){return(ee=(0,ze.Z)(function*(D,oe,ge){if(!(0,L.isObject)(oe))return Promise.reject(Error("not an object in redraw"));let Ge,et,Ee=(0,Ze.FG)(D),We=null;if(oe._typename&&(Ge=m("ROOT."+oe._typename)),Ge?.draw_field&&oe[Ge.draw_field]&&(oe=oe[Ge.draw_field]),Ee)if(Ee.matchObjectType(oe._typename))et=Ee.redrawObject(oe,ge),et&&(We=Ee);else for(let Tt=0;TtWe):((0,Ze.Eq)(D),q(D,oe,ge))})).apply(this,arguments)}function de(D){D.prototype.drawObject=q,D.prototype.getObjectDrawSettings=k}function I(D){return U.apply(this,arguments)}function U(){return(U=(0,ze.Z)(function*(D){return Me.e(56).then(Me.bind(Me,9056)).then(oe=>{switch(de(oe.RPadPainter),D){case"more":return Promise.all([Me.e(56),Me.e(260)]).then(Me.bind(Me,260));case"pave":return Promise.all([Me.e(56),Me.e(625)]).then(Me.bind(Me,3625));case"rh1":return Promise.all([Me.e(56),Me.e(172),Me.e(61)]).then(Me.bind(Me,6061));case"rh2":return Promise.all([Me.e(56),Me.e(172),Me.e(476)]).then(Me.bind(Me,6476));case"rh3":return Promise.all([Me.e(56),Me.e(172),Me.e(476),Me.e(61),Me.e(579)]).then(Me.bind(Me,9579))}return oe})})).apply(this,arguments)}function le(){return(le=(0,ze.Z)(function*(D,oe){return q(D,oe._hist,"hist").then(ge=>{let Ee=[];for(let Ge=0;Gege)})})).apply(this,arguments)}L.internals.addDrawFunc=w,de(Ie.TPadPainter),L.internals.addStreamerInfosForPainter=function re(D){function oe(ge,Ee){if(!ge.fElements||Ee>10)return null;for(let Ge=0;Ge{if(null!==m("ROOT."+ge.fName))return;let Ee=oe(ge,0);if(Ee){let Ge=Object.assign({},Ee);Ge.name=ge.fName,w(Ge)}})}},9665:(jr,At,Me)=>{"use strict";Me.r(At),Me.d(At,{ClonedNodes:()=>pe,GeoDrawingControl:()=>$i,TGeoPainter:()=>$a,build:()=>au,createGeoPainter:()=>Xa,drawAxis3D:()=>Yp,drawDummy3DGeom:()=>wl,expandGeoObject:()=>qi,produceRenderOrder:()=>fn});var ze=Me(4788),M=Me(9542),L=Me(9900),_e=Me(9622),De=Me(1968),$e=Me(3038),Ze=Me(3675),Ie=Me(6458),Ve=Me(4383),Re=Me(49);class J{constructor(N,E,z,Ae,Be,Fe){this.x=N,this.y=E,this.z=z,this.nx=Ae,this.ny=Be,this.nz=Fe}setnormal(N,E,z){this.nx=N,this.ny=E,this.nz=z}clone(){return new J(this.x,this.y,this.z,this.nx,this.ny,this.nz)}add(N){return this.x+=N.x,this.y+=N.y,this.z+=N.z,this}subtract(N){return this.x-=N.x,this.y-=N.y,this.z-=N.z,this}cross3(N,E,z){let Ae=this.x,Be=this.y,Fe=this.z;return this.x=Be*z-Fe*E,this.y=Fe*N-Ae*z,this.z=Ae*E-Be*N,this}normalize(){let N=Math.sqrt(this.x**2+this.y**2+this.z**2);return this.x/=N,this.y/=N,this.z/=N,this}dot(N){return this.x*N.x+this.y*N.y+this.z*N.z}diff(N){let Be=this.x**2+this.y**2+this.z**2;return((this.x-N.x)**2+(this.y-N.y)**2+(this.z-N.z)**2)/(Be>0?Be:1e-10)}interpolate(N,E){let z=1-E;return new J(this.x*z+N.x*E,this.y*z+N.y*E,this.z*z+N.z*E,this.nx*z+N.nx*E,this.ny*z+N.ny*E,this.nz*z+N.nz*E)}applyMatrix4(N){let E=this.x,z=this.y,Ae=this.z,Be=N.elements;return this.x=Be[0]*E+Be[4]*z+Be[8]*Ae+Be[12],this.y=Be[1]*E+Be[5]*z+Be[9]*Ae+Be[13],this.z=Be[2]*E+Be[6]*z+Be[10]*Ae+Be[14],E=this.nx,z=this.ny,Ae=this.nz,this.nx=Be[0]*E+Be[4]*z+Be[8]*Ae,this.ny=Be[1]*E+Be[5]*z+Be[9]*Ae,this.nz=Be[2]*E+Be[6]*z+Be[10]*Ae,this}}class R{constructor(N,E,z){this.vertices=N||[],this.nsign=1,E?this.copyProperties(E,z):this.vertices.length>0&&this.calculateProperties()}copyProperties(N,E){return this.normal=N.normal,this.w=N.w,this.nsign=N.nsign,E&&void 0!==N.id&&(this.id=N.id,this.parent=N),this}calculateProperties(N){if(this.normal&&!N)return;let E=this.vertices[0],z=this.vertices[1],Ae=this.vertices[2];return this.nsign=1,this.normal=new J(z.x-E.x,z.y-E.y,z.z-E.z,0,0,0).cross3(Ae.x-E.x,Ae.y-E.y,Ae.z-E.z).normalize(),this.w=this.normal.dot(E),this}clone(){let N=this.vertices.length,E=[];for(let z=0;z1e-5?1:0}classifySide(N){let E=0,z=0,Ae=N.vertices.length;for(let Be=0;Be0&&0===z?1:0===E&&z>0?2:0===E&&0===z?0:3}splitPolygon(N,E,z,Ae,Be){let Fe=this.classifySide(N);if(0===Fe)(this.nsign*N.nsign*this.normal.dot(N.normal)>0?E:z).push(N);else if(1===Fe)Ae.push(N);else if(2===Fe)Be.push(N);else{let Vt,hn,gn,mn,An,li,ti,mi,Ue=N.vertices.length,Ke=this.normal.x,ft=this.normal.y,vt=this.normal.z,Xn=[],Ii=[];for(Vt=0;Vt=3&&Ae.push(new R(Xn,N,!0)),Ii.length>=3&&Be.push(new R(Ii,N,!0))}}}class P{constructor(N,E){if(this.polygons=[],this.front=this.back=void 0,!N)return;this.divider=N[0].clone();let z=N.length,Ae=[],Be=[];for(let Fe=0;Fe0&&(this.front=new P(Ae)),Be.length>0&&(this.back=new P(Be))}build(N){let E=N.length,z=0,Ae=[],Be=[];this.divider||(this.divider=N[0].clone(),this.polygons.push(N[0]),z=1);for(let Fe=z;Fe0&&(this.front||(this.front=new P),this.front.build(Ae)),Be.length>0&&(this.back||(this.back=new P),this.back.build(Be))}collectPolygons(N){void 0===N&&(N=[]);let E=this.polygons.length;for(let z=0;zE.clone()),N.front=this.front?.clone(),N.back=this.back?.clone(),N}invert(){let N=this.polygons.length;for(let z=0;z1;Ae;)for(Ae=!1,Vt=0;Vt0)for(N.splice(0,N.length),Fe=0;Fe=0){let Ue=z[Fe]||1;for(;E.indexOf(Be.fName+"#"+Ue)>=0;)++Ue;Be.$geo_suffix="#"+Ue,z[Fe]=Ue+1}}E.push(In(Be))}}}function bn(Ce,N,E,z,Ae,Be,Fe,Ue,Ke){let ft=new L.Pa4(Ce,N,E),vt=new L.Pa4(z,Ae,Be),Vt=new L.Pa4(Fe,Ue,Ke),hn=new L.Pa4,gn=new L.Pa4;return hn.subVectors(Vt,vt),gn.subVectors(ft,vt),hn.cross(gn),hn}class rn{constructor(N){this.nfaces=N,this.indx=0,this.pos=new Float32Array(9*N),this.norm=new Float32Array(9*N)}addFace3(N,E,z,Ae,Be,Fe,Ue,Ke,ft){let vt=this.indx,Vt=this.pos;Vt[vt]=N,Vt[vt+1]=E,Vt[vt+2]=z,Vt[vt+3]=Ae,Vt[vt+4]=Be,Vt[vt+5]=Fe,Vt[vt+6]=Ue,Vt[vt+7]=Ke,Vt[vt+8]=ft,this.last4=!1,this.indx=vt+9}startPolygon(){}stopPolygon(){}addFace4(N,E,z,Ae,Be,Fe,Ue,Ke,ft,vt,Vt,hn,gn){let mn=this.indx,An=this.pos;1!==gn&&(An[mn]=N,An[mn+1]=E,An[mn+2]=z,An[mn+3]=Ae,An[mn+4]=Be,An[mn+5]=Fe,An[mn+6]=Ue,An[mn+7]=Ke,An[mn+8]=ft,mn+=9),2!==gn&&(An[mn]=N,An[mn+1]=E,An[mn+2]=z,An[mn+3]=Ue,An[mn+4]=Ke,An[mn+5]=ft,An[mn+6]=vt,An[mn+7]=Vt,An[mn+8]=hn,mn+=9),this.last4=mn!==this.indx+9,this.indx=mn}setNormal4(N,E,z,Ae,Be,Fe,Ue,Ke,ft,vt,Vt,hn,gn){if(this.last4&&gn)return console.error("missmatch between addFace4 and setNormal4 calls");let mn=this.indx-(this.last4?18:9),An=this.norm;1!==gn&&(An[mn]=N,An[mn+1]=E,An[mn+2]=z,An[mn+3]=Ae,An[mn+4]=Be,An[mn+5]=Fe,An[mn+6]=Ue,An[mn+7]=Ke,An[mn+8]=ft,mn+=9),2!==gn&&(An[mn]=N,An[mn+1]=E,An[mn+2]=z,An[mn+3]=Ue,An[mn+4]=Ke,An[mn+5]=ft,An[mn+6]=vt,An[mn+7]=Vt,An[mn+8]=hn)}recalcZ(N){let E=this.pos,z=this.indx,Ae=z-(this.last4?18:9);for(;Ae0?9:18),ft=this.norm;1!==Ue&&(ft[Ke]=N,ft[Ke+1]=E,ft[Ke+2]=z,ft[Ke+3]=N,ft[Ke+4]=E,ft[Ke+5]=z,ft[Ke+6]=Ae,ft[Ke+7]=Be,ft[Ke+8]=Fe,Ke+=9),2!==Ue&&(ft[Ke]=N,ft[Ke+1]=E,ft[Ke+2]=z,ft[Ke+3]=Ae,ft[Ke+4]=Be,ft[Ke+5]=Fe,ft[Ke+6]=Ae,ft[Ke+7]=Be,ft[Ke+8]=Fe,Ke+=9)}create(){this.nfaces!==this.indx/9&&console.error(`Mismatch with created ${this.nfaces} and filled ${this.indx/9} number of faces`);let N=new L.u9r;return N.setAttribute("position",new L.TlE(this.pos,3)),N.setAttribute("normal",new L.TlE(this.norm,3)),N}}class qt{constructor(){this.polygons=[]}startPolygon(N){this.multi=1,this.mnormal=N}stopPolygon(){this.multi&&(this.multi=0,console.error("Polygon should be already closed at this moment"))}addFace3(N,E,z,Ae,Be,Fe,Ue,Ke,ft){this.addFace4(N,E,z,Ae,Be,Fe,Ue,Ke,ft,Ue,Ke,ft,2)}addFace4(N,E,z,Ae,Be,Fe,Ue,Ke,ft,vt,Vt,hn,gn){if(void 0===gn&&(gn=0),this.v1=new J(N,E,z,0,0,0),this.v2=1===gn?null:new J(Ae,Be,Fe,0,0,0),this.v3=new J(Ue,Ke,ft,0,0,0),this.v4=2===gn?null:new J(vt,Vt,hn,0,0,0),this.reduce=gn,this.multi){let An;return 2!==gn&&console.error("polygon not supported for not-reduced faces"),1==this.multi++?(An=new R,An.vertices.push(this.mnormal?this.v2:this.v3),this.polygons.push(An)):(An=this.polygons[this.polygons.length-1],(this.mnormal?this.v2:this.v3).diff(this.mnormal?An.vertices[An.vertices.length-1]:An.vertices[0])>1e-12&&console.error("vertex missmatch when building polygon")),void((this.mnormal?this.v3:this.v2).diff(this.mnormal?An.vertices[0]:An.vertices[An.vertices.length-1])<1e-12?this.multi=0:this.mnormal?An.vertices.push(this.v3):An.vertices.unshift(this.v2))}let mn=new R;switch(gn){case 0:mn.vertices.push(this.v1,this.v2,this.v3,this.v4);break;case 1:mn.vertices.push(this.v1,this.v3,this.v4);break;case 2:mn.vertices.push(this.v1,this.v2,this.v3)}this.polygons.push(mn)}setNormal4(N,E,z,Ae,Be,Fe,Ue,Ke,ft,vt,Vt,hn){this.v1.setnormal(N,E,z),this.v2&&this.v2.setnormal(Ae,Be,Fe),this.v3.setnormal(Ue,Ke,ft),this.v4&&this.v4.setnormal(vt,Vt,hn)}setNormal_12_34(N,E,z,Ae,Be,Fe){this.v1.setnormal(N,E,z),this.v2&&this.v2.setnormal(N,E,z),this.v3.setnormal(Ae,Be,Fe),this.v4&&this.v4.setnormal(Ae,Be,Fe)}calcNormal(){this.cb||(this.pA=new L.Pa4,this.pB=new L.Pa4,this.pC=new L.Pa4,this.cb=new L.Pa4,this.ab=new L.Pa4),this.pA.set(this.v1.x,this.v1.y,this.v1.z),1!==this.reduce?(this.pB.set(this.v2.x,this.v2.y,this.v2.z),this.pC.set(this.v3.x,this.v3.y,this.v3.z)):(this.pB.set(this.v3.x,this.v3.y,this.v3.z),this.pC.set(this.v4.x,this.v4.y,this.v4.z)),this.cb.subVectors(this.pC,this.pB),this.ab.subVectors(this.pA,this.pB),this.cb.cross(this.ab),this.setNormal(this.cb.x,this.cb.y,this.cb.z)}setNormal(N,E,z){this.v1.setnormal(N,E,z),this.v2&&this.v2.setnormal(N,E,z),this.v3.setnormal(N,E,z),this.v4&&this.v4.setnormal(N,E,z)}recalcZ(N){this.v1.z=N(this.v1.x,this.v1.y,this.v1.z),this.v2&&(this.v2.z=N(this.v2.x,this.v2.y,this.v2.z)),this.v3.z=N(this.v3.x,this.v3.y,this.v3.z),this.v4&&(this.v4.z=N(this.v4.x,this.v4.y,this.v4.z))}create(){return{polygons:this.polygons}}}function jt(Ce,N){let E=[4,7,6,5,0,3,7,4,4,5,1,0,6,2,1,5,7,3,2,6,1,2,3,0],z=N>0?new qt:new rn(12);for(let Ae=0;Ae0||z[1]>0,Be=0,Fe=360;(Ce._typename==be||Ce._typename==de||Ce._typename==I)&&(Be=Ce.fPhi1,Fe=Ce.fPhi2-Ce.fPhi1);let Ue=Math.max(4,Math.round(Fe/m.GradPerSegm)),Ke=Ue*(E[0]<=0||E[1]<=0?1:2);if(Ae&&(Ke+=Ue*(z[0]<=0||z[1]<=0?1:2)),E[0]>0&&(Ke+=Ue*(z[0]>0?2:1)),E[1]>0&&(Ke+=Ue*(z[1]>0?2:1)),Fe<360&&(Ke+=(E[0]>z[0]?2:0)+(E[1]>z[1]?2:0)),N<0)return Ke;let ft=Be*Math.PI/180,vt=Fe/Ue*Math.PI/180,Vt=new Float32Array(Ue+1),hn=new Float32Array(Ue+1);for(let An=0;An<=Ue;++An)hn[An]=Math.cos(ft+An*vt),Vt[An]=Math.sin(ft+An*vt);let gn=N?new qt:new rn(Ke);const mn=Ce._typename!==I?null:(An,li,ti)=>{let mi=ti<0?Ce.fNlow:Ce.fNhigh;return(ti<0?-Ce.fDz:Ce.fDz)-(An*mi[0]+li*mi[1])/mi[2]};for(let An=0;An<2&&(1!==An||Ae);++An){let li=0===An?E:z,ti=An,mi=1-An,Xn=1,Ii=0;if(li[0]!==li[1]){let Hi=Math.atan2(li[1]-li[0],2*Ce.fDZ);Xn=Math.cos(Hi),Ii=Math.sin(Hi)}1===An&&(Xn*=-1,Ii*=-1);let Ri=li[0]<=0?2:li[1]<=0?1:0;for(let Hi=0;Hi=0||Ae.indexOf(ft)>=0||Ae.indexOf(vt)>=0?z[Ue]=z[Ue+1]=z[Ue+2]=-1:(Ae.push(Ke,ft,vt),Be++)}let Fe=N?new qt:new rn(Be);for(let Ue=0;Ue=0&&Vt>=0&&N)if(0===Ue)mn=new L.Pa4(0,0,1);else if(30===Ue)mn=new L.Pa4(0,0,-1);else{let An=bn(E[Ke],E[Ke+1],E[Ke+2],E[ft],E[ft+1],E[ft+2],E[vt],E[vt+1],E[vt+2]);An.normalize();let li=bn(E[Vt],E[Vt+1],E[Vt+2],E[hn],E[hn+1],E[hn+2],E[gn],E[gn+1],E[gn+2]);li.normalize(),An.distanceToSquared(li)<1e-12&&(mn=An)}null!==mn?(Fe.addFace4(E[Ke],E[Ke+1],E[Ke+2],E[ft],E[ft+1],E[ft+2],E[vt],E[vt+1],E[vt+2],E[hn],E[hn+1],E[hn+2]),Fe.setNormal(mn.x,mn.y,mn.z)):(Ke>=0&&(Fe.addFace3(E[Ke],E[Ke+1],E[Ke+2],E[ft],E[ft+1],E[ft+2],E[vt],E[vt+1],E[vt+2]),Fe.calcNormal()),Vt>=0&&(Fe.addFace3(E[Vt],E[Vt+1],E[Vt+2],E[hn],E[hn+1],E[hn+2],E[gn],E[gn+1],E[gn+2]),Fe.calcNormal()))}return Fe.create()}(Ce,N);case Ge:return function nr(Ce,N){let E=[Ce.fRmax,Ce.fRmin],z=Ce.fPhi1,Ae=Ce.fPhi2-Ce.fPhi1,Be=Ce.fTheta1,Fe=Ce.fTheta2-Ce.fTheta1,Ue=Ce.fNseg,Ke=Ce.fNz,ft=E[1]<=0;if(N>0){let Ri=(ft?2:4)*Ue*Ke/N;Ri>1&&(Ue=Math.max(4,Math.floor(Ue/Math.sqrt(Ri))),Ke=Math.max(4,Math.floor(Ke/Math.sqrt(Ri))))}let vt=Ue*Ke*2,Vt=2*Ue,hn=2*Ue,gn=360===Ae?0:Ke*(ft?2:4),mn=1e-10;if(ft&&(hn=Vt=Ue),N<0)return vt*(ft?1:2)+Vt+hn+gn;let An=new Float32Array(Ue+1),li=new Float32Array(Ue+1),ti=new Float32Array(Ke+1),mi=new Float32Array(Ke+1);for(let Ri=0;Ri<=Ke;++Ri){let Hi=(Be+Fe/Ke*Ri)*Math.PI/180;ti[Ri]=Math.sin(Hi),mi[Ri]=Math.cos(Hi)}for(let Ri=0;Ri<=Ue;++Ri){let Hi=(z+Ae/Ue*Ri)*Math.PI/180;An[Ri]=Math.sin(Hi),li[Ri]=Math.cos(Hi)}Math.abs(ti[0])<=mn&&(vt-=Ue,Vt=0),Math.abs(ti[Ke])<=mn&&(vt-=Ue,hn=0);let Xn=vt*(ft?1:2)+Vt+hn+gn,Ii=N?new qt:new rn(Xn);for(let Ri=0;Ri<2&&(1!==Ri||!ft);++Ri){let Hi=E[Ri],es=0===Ri?1:-1,ss=1-Ri,Qo=1-ss;for(let ds=0;ds=mn){let Hi=ti[Ri],es=mi[Ri],ss=0===Ri?0:1,Qo=1-ss;for(let ds=0;ds0?4:2)*z*(Ae+(360!==Ce.fDphi?1:0));if(N<0)return Be;N>0&&Be>N&&(z=Math.floor(z/Math.sqrt(Be/N)),Ae=Math.floor(Ae/Math.sqrt(Be/N)),Be=(Ce.fRmin>0?4:2)*z*(Ae+(360!==Ce.fDphi?1:0)));let Fe=new Float32Array(z+1),Ue=new Float32Array(z+1),Ke=new Float32Array(Ae+1),ft=new Float32Array(Ae+1);for(let Ri=0;Ri<=z;++Ri)Fe[Ri]=Math.sin(Ri/z*2*Math.PI),Ue[Ri]=Math.cos(Ri/z*2*Math.PI);for(let Ri=0;Ri<=Ae;++Ri){let Hi=(Ce.fPhi1+Ce.fDphi*Ri/Ae)/180*Math.PI;Ke[Ri]=Math.sin(Hi),ft[Ri]=Math.cos(Hi)}let vt=N?new qt:new rn(Be),Vt=new L.Pa4,hn=new L.Pa4,gn=new L.Pa4,mn=new L.Pa4,An=new L.Pa4,li=new L.Pa4,ti=new L.Pa4,mi=new L.Pa4,Xn=new L.Pa4,Ii=new L.Pa4;for(let Ri=0;Ri<2&&!(Ri>0&&Ce.fRmin<=0);++Ri){let Hi=Ri>0?Ce.fRmin:Ce.fRmax,es=1-Ri,ss=1-es,Qo=Ri>0?-1:1;for(let ds=0;ds0?0:1,Qo=1-ss,ds=Ce.fRmin>0?0:1,ua=Ri>0?1:-1;for(let $s=0;$s0&&(Ke=!0);if(N<0)return(Ke?4:2)*Ae*(Ce.fNz-1);let ft=360===z?null:[];for(let ti=0;ti<2;++ti){let mi=0===ti?"fRmax":"fRmin";for(let Xn=0;Xn0&&Xn0&&(0===ti||Ke)&&(Fe[2*Xn+ti]=1,Ue++),null!==ft&&(0===ti?ft.push(new L.FM8(Be*Ri,Ii)):Ri0;--ti){if(Ce.fZ[ti]===Ce.fZ[ti-1])continue;let mi=2*Ce.fNz-1-ti;Vt.push([mi,ti-1,ti]),Vt.push([mi,mi+1,ti-1])}}else Vt=L.iDF.triangulateShape(ft,[]);vt+=2*Vt.length}let hn=E*Math.PI/180,gn=z/Ae*Math.PI/180,mn=new Float32Array(Ae+1),An=new Float32Array(Ae+1);for(let ti=0;ti<=Ae;++ti)An[ti]=Math.cos(hn+ti*gn),mn[ti]=Math.sin(hn+ti*gn);let li=N?new qt:new rn(vt);for(let ti=0;ti<2;++ti){let mi=0===ti?"fRmax":"fRmin",Xn=Ce.fZ[0],Ii=Be*Ce[mi][0],Ri=1-ti,Hi=ti;for(let es=0;es0&&(ds*=-1,ua*=-1);for(let $s=0;$s0);for(let ss=0;ss0){let mi=2*E*(z+1)/N;mi>1&&(E=Math.max(5,Math.floor(E/Math.sqrt(mi))),z=Math.max(5,Math.floor(z/Math.sqrt(mi))))}let Ae=-Ce.fDZ,Be=Ce.fDZ,Fe=Ce.fRlo,Ue=Ce.fRhi;Ce.fA>=0?Ce.fB>Ae&&(Ae=Ce.fB):Ce.fB0?-1:1;let es=0===An?1:0===Ii?2:0;for(let ss=0;ss0?4:2);if(N<0)return Ae;N>0&&N>Ae&&(E=Math.max(4,Math.floor(E/Math.sqrt(Ae/N))),z=Math.max(4,Math.floor(z/Math.sqrt(Ae/N))),Ae=E*(z+1)*(Ce.fRmin>0?4:2));let Be=new Float32Array(E+1),Fe=new Float32Array(E+1);for(let Ke=0;Ke<=E;++Ke)Fe[Ke]=Math.cos(Ke/E*2*Math.PI),Be[Ke]=Math.sin(Ke/E*2*Math.PI);let Ue=N?new qt:new rn(Ae);for(let Ke=0;Ke<2&&!(Ke>0&&Ce.fRmin<=0);++Ke){let ft=Ke>0?Ce.fRmin:Ce.fRmax,vt=Ke>0?Ce.fTinsq:Ce.fToutsq,Vt=1-Ke,hn=1-Vt;for(let gn=0;gn0?Math.sqrt(Ce.fRmin**2+Ce.fTinsq*ft**2):0,hn=Ce.fRmin>0?0:1,gn=1-Ke,mn=1-gn;for(let An=0;An=N||!z)return E.polygons&&(E=v(E.polygons)),Ue&&E.applyMatrix4(Ue),E._exceed_limit=!0,E;switch(Ae=new A(E,Ue,m.CompressComp?0:void 0),Be=new A(z,Ke,Ae.maxid),Ae.maxid=Be.maxid,Ce.fNode._typename){case"TGeoIntersection":Ae.direct_intersect(Be);break;case"TGeoUnion":Ae.direct_union(Be);break;case"TGeoSubtraction":Ae.direct_subtract(Be);break;default:sn("unsupported bool operation "+Ce.fNode._typename+", use first geom")}return 0===io(Ae)&&(sn(`Zero faces in comp shape left: ${Ce.fNode.fLeft._typename} ${io(E)} faces right: ${Ce.fNode.fRight._typename} ${io(z)} faces use first`),Ae=new A(E,Ue)),Fe?{polygons:Ae.toPolygons()}:Ae.toBufferGeometry()}(Ce,N);case Ee:break;case Ye:{let E=bo(Ce.fShape,N);return Ce.fScale&&N>=0&&(0,M.isFunc)(E?.scale)&&E.scale(Ce.fScale.fScale[0],Ce.fScale.fScale[1],Ce.fScale.fScale[2]),E}case je:if(N<0)return 1;default:sn(`unsupported shape type ${Ce._typename}`)}}catch(E){let z="";void 0!==E.stack&&(z=E.stack.split("\n")[0],z=z.indexOf(E.message)>=0?E.stack.split("\n")[1]:"at: "+z),sn(`${Ce._typename} err: ${E.message} ${z}`)}return N<0?0:null}function Ji(Ce,N){if(Ce.server_shape&&(Ce.nsegm===N||!Ce.shape))return Ce.server_shape;Ce.nsegm=N;let E=null;if(Ce.shape)E=bo(Ce.shape);else{if(!Ce.raw?.buffer)return console.error("No raw data at all"),null;E=Ce.sz?function ja(Ce){let N=0;if(Ce.sz[0]&&(Ce.vtxBuff=new Float32Array(Ce.raw.buffer,N,Ce.sz[0]),N+=4*Ce.sz[0]),Ce.sz[1]&&(N+=4*Ce.sz[1]),Ce.sz[2]&&(Ce.prefixBuf=new Uint32Array(Ce.raw.buffer,N,2),N+=8,Ce.idxBuff=new Uint32Array(Ce.raw.buffer,N,Ce.sz[2]-2),N+=4*(Ce.sz[2]-2)),4!=Ce.prefixBuf[0])throw"Expect triangles first.";if(Ce.idxBuff.length!=3*Ce.prefixBuf[1])throw"Expect single list of triangles in index buffer.";let Ae=new L.u9r;return Ae.setAttribute("position",new L.TlE(Ce.vtxBuff,3)),Ae.setIndex(new L.TlE(Ce.idxBuff,1)),Ae.computeVertexNormals(),Ae}(Ce):function ho(Ce){let N=new Float32Array(Ce.raw.buffer,0,Ce.raw.buffer.byteLength/4),E=new L.u9r;return E.setAttribute("position",new L.TlE(N,3)),E.setIndex(new L.TlE(new Uint32Array(Ce.idx),1)),E.computeVertexNormals(),E}(Ce)}return{_typename:"$$Shape$$",ready:!0,geom:E,nfaces:Ds(E)}}function ma(Ce){let N=[],E=null;if(void 0!==Ce.fVolume?E=Ce.fVolume.fShape:void 0!==Ce.fShape?E=Ce.fShape:void 0!==Ce.fShapeBits&&void 0!==Ce.fShapeId&&(E=Ce),!E)return N.push(Ce._typename),N;let z=Math.max(E.fDX,E.fDY,E.fDZ),Ae=z>1e7||z<1e-7,Be=Fe=>void 0===Fe?"???":Fe==Math.round(Fe)&&Fe<1e7?Math.round(Fe):Ae?Fe.toExponential(4):Fe.toPrecision(7);switch(N.push(E._typename),N.push(`DX=${Be(E.fDX)} DY=${Be(E.fDY)} DZ=${Be(E.fDZ)}`),E._typename){case $:break;case le:N.push(`Alpha=${E.fAlpha} Phi=${E.fPhi} Theta=${E.fTheta}`);break;case H:N.push(`Dy1=${Be(E.fDy1)} Dy2=${Be(E.fDy1)}`);case U:N.push(`Dx1=${Be(E.fDx1)} Dx2=${Be(E.fDx1)}`);break;case ee:case Tt:case Bt:break;case Ge:N.push(`Rmin=${Be(E.fRmin)} Rmax=${Be(E.fRmax)}`,`Phi1=${E.fPhi1} Phi2=${E.fPhi2}`,`Theta1=${E.fTheta1} Theta2=${E.fTheta2}`);break;case be:N.push(`Phi1=${E.fPhi1} Phi2=${E.fPhi2}`);case re:N.push(`Rmin1=${Be(E.fRmin1)} Rmax1=${Be(E.fRmax1)}`,`Rmin2=${Be(E.fRmin2)} Rmax2=${Be(E.fRmax2)}`);break;case I:case de:N.push(`Phi1=${E.fPhi1} Phi2=${E.fPhi2}`);case ve:case he:N.push(`Rmin=${Be(E.fRmin)} Rmax=${Be(E.fRmax)}`);break;case We:N.push(`Rmin=${Be(E.fRmin)} Rmax=${Be(E.fRmax)}`,`Phi1=${E.fPhi1} Dphi=${E.fDphi}`);break;case oe:case ge:case et:break;case D:N.push(`Rlo=${Be(E.fRlo)} Rhi=${Be(E.fRhi)}`,`A=${Be(E.fA)} B=${Be(E.fB)}`);break;case Je:N.push(`Rmin=${Be(E.fRmin)} Rmax=${Be(E.fRmax)}`,`StIn=${Be(E.fStIn)} StOut=${Be(E.fStOut)}`);break;case ct:case Ee:break;case Ye:N=ma(E.fShape),E.fScale&&N.unshift(`Scale X=${E.fScale.fScale[0]} Y=${E.fScale.fScale[1]} Z=${E.fScale.fScale[2]}`)}return N}function ba(Ce){let N=new L.yGw;return Ce.updateMatrixWorld(),Ce.matrixWorldInverse.copy(Ce.matrixWorld).invert(),N.multiplyMatrices(Ce.projectionMatrix,Ce.matrixWorldInverse),N}function Sa(Ce){if(!Ce)return null;Ce instanceof L.cPb&&(Ce=ba(Ce));let N=new L.iWj;return N.setFromProjectionMatrix(Ce),N.corners=new Float32Array([1,1,1,1,1,-1,1,-1,1,1,-1,-1,-1,1,1,-1,1,-1,-1,-1,1,-1,-1,-1,0,0,0]),N.test=new L.Pa4(0,0,0),N.CheckShape=function(E,z){let Ue,Ae=this.test,Be=this.corners.length,Fe=this.corners;for(Ue=0;Ue5},N}class pe{constructor(N,E){this.toplevel=!0,this.name_prefix="",this.maxdepth=1,this.vislevel=4,this.maxnodes=1e4,N?(N.$geoh&&(this.toplevel=!1),this.createClones(N)):E&&(this.nodes=E)}setVisLevel(N){this.vislevel=N&&Number.isInteger(N)?N:4}getVisLevel(){return this.vislevel}setMaxVisNodes(N){this.maxnodes=Number.isFinite(N)?N:1e4}getMaxVisNodes(){return this.maxnodes}updateNode(N){N&&Number.isInteger(N.id)&&N.idthis.maxdepth&&(this.maxdepth=E);let Ae=null;if(Ae=0===z?N.fVolume&&N.fVolume.fNodes?N.fVolume.fNodes.arr:null:N.fElements?N.fElements.arr:null,null!==Ae){$n(N,Ae);for(let Fe=0;Fe1)return;this.nodes=[];let Be=[];for(let Fe=0;FeUe.vol-Fe.vol),this.sortmap=new Array(this.nodes.length);for(let Fe=0;Fe0),Ht(Ue.fVolume,T.kVisDaughters,!0),Ht(Ue,T.kVisDaughters,!0))):(Fe.vis=!pt(Ue.fVolume,T.kVisNone)&&pt(Ue.fVolume,T.kVisThis)?99:0,(!pt(Ue,T.kVisDaughters)||!pt(Ue.fVolume,T.kVisDaughters))&&(Fe.nochlds=!0),Fe.vis>0&&Fe.chlds&&!Fe.nochlds&&(Fe.vis=1),0===Be&&(z&&(Fe.vis=0),delete Fe.nochlds))):(Fe.vis=Ue.fRnrSelf?99:0,0===Be&&1===this.nodes.length&&(Fe.vis=99),this.vislevel=9999),(Fe.vol<=0||Fe.nfaces<=0)&&(Fe.vis=0),Fe.vis&&Ae++}return Ae}produceIdShifts(){for(let E=0;E88&&(E=88),N.stack=new Array(100),N.nodeid=0,N.counter=0,N.last=0,N.CopyStack=function(Be){let Fe={nodeid:this.nodeid,seqid:this.counter,stack:new Array(this.last)};Be&&(Fe.factor=Be);for(let Ue=0;Ue0?N.matrices[N.last-1]:new L.yGw;Ae.matrix?(N.matrices[N.last]=N.mpool[N.last].fromArray(Be.elements),N.matrices[N.last].multiply(N.mpool[N.last+1].fromArray(Ae.matrix))):N.matrices[N.last]=Be}if(Ae.nochlds&&(E=0),Ae.vis>E&&(!N.func||N.func(Ae))&&z++,N.counter++,E>0&&Ae.chlds){N.last++;for(let Be=0;Be1&&1==Fe.fLineColor?Ue.fillcolor=E[Fe.fFillColor]:Fe.fLineColor>=0&&(Ue.fillcolor=E[Fe.fLineColor]);let ft=Fe?.fMedium?.fMaterial;if(ft){let vt=ft.fFillStyle,Vt=vt>=3e3&&vt<=3100?vt-3e3:0;if(this.use_dflt_colors){let hn=Math.round(ft.fZ);Ue.fillcolor=E[this.dflt_table[hn]],ft.fDensity<.1&&(Vt=60)}Vt>0&&(Ke=(100-Vt)/100),void 0===Ue.fillcolor&&(Ue.fillcolor=E[ft.fFillColor])}void 0===Ue.fillcolor&&(Ue.fillcolor="lightgrey"),Ue.material=new L.YBo({transparent:Ke<1,opacity:Ke,wireframe:!1,color:Ue.fillcolor,side:L.Wl3,vertexColors:!1,depthWrite:1==Ke}),Ue.material.inherentOpacity=Ke}return Ue}createObject3D(N,E,z){let Ae=this.nodes[0],Be=E,Fe=0,Ue=(0,M.isObject)(z)||"force"===z;for(let Ke=0;Ke<=N.length;++Ke){let vt,ft=Ke>0?N[Ke-1]:0;if(Ke>0&&(Ae=this.nodes[Ae.chlds[ft]]),Be.children)for(let Vt=0;Vt0)for(;Ae>Be&&z.vislvl>1;)z.vislvl--,z.reset(),Ae=this.scanVisible(z);this.actual_level=z.vislvl;let Fe=0,Ue=0,Ke=-1,ft=10,vt=this.nodes.length+1;if(console.log(`Total visible nodes ${Ae} numfaces ${z.facecnt}`),z.facecnt>N){let gn=this.getVolumeBoundary(z.viscnt,N*(E?.8:1),Be*(E?.8:1));if(Fe=gn.min,Ue=gn.max,vt=gn.sortidcut,E){z.domatrix=!0,z.frustum=E,z.totalcam=0,z.func=function(mn){return mn.vol<=Fe&&this.frustum.CheckShape(this.getmatrix(),mn)&&(this.viscnt[mn.id]++,this.totalcam+=mn.nfaces),!0};for(let mn=0;mn.2*N?this.getVolumeBoundary(z.viscnt,.2*N,.2*Be).min:0,ft=Ue/(Ke>0?Ke>0:Fe)}}return z.items=[],z.func=function(Vt){return Vt.sortid=0&&Vt.vol>Ke&&this.frustum.CheckShape(this.getmatrix(),Vt)&&this.items.push(this.CopyStack(ft)),!0},this.scanVisible(z),{lst:z.items,complete:0===Fe}}mergeVisibles(N,E){let z=0,Ae=[];for(let Be=0;BeAe.shape.factor&&(Ae.shape.factor=Ae.factor))}E.sort((z,Ae)=>Ae.vol*Ae.factor-z.vol*z.factor);for(let z=0;z=E)Fe.done=!0;else if(Ae>.01*N.length&&void 0!==z&&(new Date).getTime()-Be>z)return Fe}return Fe.done=!0,Fe}static formatServerElement(N){N.kind=2,N.vis=2;let E=N.matr;if(delete N.matr,!E?.length)return N;if(16==E.length)N.matrix=E;else{let z=N.matrix=new Array(16);z.fill(0),z[0]=z[5]=z[10]=z[15]=1,3==E.length?(z[12]=E[0],z[13]=E[1],z[14]=E[2]):4==E.length?(z[0]=E[0],z[5]=E[1],z[10]=E[2],z[15]=E[3]):9==E.length?(z[0]=E[0],z[4]=E[1],z[8]=E[2],z[1]=E[3],z[5]=E[4],z[9]=E[5],z[2]=E[6],z[6]=E[7],z[10]=E[8]):console.error(`wrong number of elements ${E.length} in the matrix`)}return N}}function rt(Ce,N){let E=new L.Pa4(1,1,-1);if(void 0===Ce.geomZ){let Ae=Ce.geom.getAttribute("position").array,Be=Ce.geom.getAttribute("normal").array,Fe=Ce.geom.getIndex();if(Fe){let hn=Fe.array,gn=Ce.geom.drawRange.start,mn=Ce.geom.drawRange.count;gn+mn>hn.length&&(mn=hn.length-gn);let An=new Float32Array(3*mn),li=new Float32Array(3*mn);for(let ti=0;ti=Ae.length)&&console.log(`strange index ${3*mi} totallen = ${Ae.length}`),An[3*ti]=Ae[3*mi],An[3*ti+1]=Ae[3*mi+1],An[3*ti+2]=Ae[3*mi+2],li[3*ti]=Be[3*mi],li[3*ti+1]=Be[3*mi+1],li[3*ti+2]=Be[3*mi+2]}Ae=An,Be=li}let Ke,Ue=Ae.length,ft=0,vt=new Float32Array(Ue),Vt=new Float32Array(Ue);for(Ke=0;Ke{vt.renderOrder=vt.defaultOrder||0,vt.material&&(vt.material.depthWrite=!0)})}function Fe(ft,vt,Vt){if(ft.children)for(let hn=0;hn1e3){for(let mn=0;mnmn.$jsroot_distance-An.$jsroot_distance);let gn=new Array(ft.length);for(let mn=0;mn=0;--mn){let li,An=ft[mn],mi=An.$jsroot_box3.getCenter(hn);for(let Xn=0;Xn<2;++Xn){mi.sub(N).normalize(),Ae.set(N,mi),li=Ae.intersectObjects(ft,!1)||[];let Ii=[];for(let Hi=0;Hi0&&console.log(`MISS ${z?.resolveStack(An.stack)?.name}`),li.indexOf(An)>=0||Xn>0)break;let Ri=An.geometry.attributes.position.array;mi=new L.Pa4((Ri[0]+Ri[3]+Ri[6])/3,(Ri[1]+Ri[4]+Ri[7])/3,(Ri[2]+Ri[5]+Ri[8])/3),mi.applyMatrix4(An.matrixWorld)}for(let Xn=0;XnPromise.resolve(Be._geoobj||null),_expand(Be,Fe){if(Fe.fVolume&&(Fe=Fe.fVolume.fNodes),!Fe.arr)return!1;Be._childs=[],$n(null,Fe.arr);for(let Ue in Fe.arr)Fl(Be,Fe.arr[Ue]);return!0}};Ce._childs||(Ce._childs=[]),Ce._childs.push(Ae)}function qi(Ce,N){if(Uf(),!Ce||!N)return!1;let Ue,Ke,ft,E=0===N._typename.indexOf(M.clTGeoNode),z=0===N._typename.indexOf(M.clTGeoVolume),Ae=N._typename===lt,Be=N._typename===mt||N._typename===cn,Fe=N._typename===Rt;if(!(E||z||Ae||Be||Fe))return!1;if(Ce._childs)return!0;if(Ae)return Rn(Ce,N.fMaterials,"Materials","list of materials"),Rn(Ce,N.fMedia,"Media","list of media"),Rn(Ce,N.fTracks,"Tracks","list of tracks"),Rn(Ce,N.fOverlaps,"Overlaps","list of detected overlaps"),Fl(Ce,N.fMasterVolume),!0;if(Fe)return Fl(Ce,N.fVolume1),Fl(Ce,N.fVolume2),Fl(Ce,N.fMarker,"Marker"),!0;if(Be?(Ke=N.fElements?.arr,ft=N.fShape):(Ue=E?N.fVolume:N,Ke=Ue?.fNodes?.arr,ft=Ue?.fShape),!Ke&&ft?._typename===ct&&ft?.fNode)return Ce._childs||(Fl(Ce,ft.fNode.fLeft,"Left"),Fl(Ce,ft.fNode.fRight,"Right")),!0;if(!Ke)return!1;$n(N,Ke);for(let vt=0;vt{(Ce===E._volume||Ce===E._geoobj)&&(E._icon=E._icon.split(" ")[0]+ii(Ce),N.updateTreeNode(E))})}class ar{constructor(N,E){this.bright=E,this.element=N.append("div").attr("class","geo_toolbar_group"),(0,_e.DW)(".geo_toolbar_group { float: left; box-sizing: border-box; position: relative; bottom: 23px; vertical-align: middle; white-space: nowrap; }\n .geo_toolbar_group:first-child { margin-left: 2px; }\n .geo_toolbar_group a { position: relative; font-size: 16px; padding: 3px 1px; cursor: pointer; line-height: normal; box-sizing: border-box; }\n .geo_toolbar_group a svg { position: relative; top: 2px; }\n .geo_toolbar_btn path { fill: rgba(0, 31, 95, 0.2); }\n .geo_toolbar_btn path .active,\n .geo_toolbar_btn path:hover { fill: rgba(0, 22, 72, 0.5); }\n .geo_toolbar_btn_bright path { fill: rgba(255, 224, 160, 0.2); }\n .geo_toolbar_btn_bright path .active,\n .geo_toolbar_btn_bright path:hover { fill: rgba(255, 233, 183, 0.5); }",this.element.node())}addButtons(N){this.buttonsNames=[],N.forEach(E=>{let z=E.name;if(!z)throw new Error("must provide button name in button config");if(-1!==this.buttonsNames.indexOf(z))throw new Error(`button name ${z} is taken`);this.buttonsNames.push(z);let Ae=E.title||E.name;if(!(0,M.isFunc)(E.click))throw new Error("must provide button click() function in button config");let Be=this.element.append("a").attr("class",this.bright?"geo_toolbar_btn_bright":"geo_toolbar_btn").attr("rel","tooltip").attr("data-title",Ae).on("click",E.click);_e.KL.createSVG(Be,_e.KL[E.icon],16,Ae)})}changeBrightness(N){this.bright=N,this.element&&this.element.selectAll(N?".geo_toolbar_btn":".geo_toolbar_btn_bright").attr("class",N?"geo_toolbar_btn_bright":"geo_toolbar_btn")}cleanup(){this.element&&(this.element.remove(),delete this.element)}}class $i extends De.vm{constructor(N,E){super(),this.mesh=N&&N.material?N:null,this.bloom=E}setHighlight(N,E){return this.drawSpecial(N,E)}drawSpecial(N){let E=this.mesh;if(E&&E.material){if(N)return E.origin||(E.origin={color:E.material.color,emissive:E.material.emissive,opacity:E.material.opacity,width:E.material.linewidth,size:E.material.size}),this.bloom?(E.layers.enable(1),E.material.emissive=new L.Ilk(65280)):(E.material.color=new L.Ilk(N),E.material.opacity=1),E.hightlightWidthScale&&!M.browser.isWin&&(E.material.linewidth=E.origin.width*E.hightlightWidthScale),E.highlightScale&&(E.material.size=E.origin.size*E.highlightScale),!0;if(E.origin)return this.bloom?(E.material.emissive=E.origin.emissive,E.layers.enable(0)):(E.material.color=E.origin.color,E.material.opacity=E.origin.opacity),E.hightlightWidthScale&&(E.material.linewidth=E.origin.width),E.highlightScale&&(E.material.size=E.origin.size),!0}}}class $a extends Ie.tK{constructor(N,E){let z;E?._typename===lt&&(z=E,E=E.fMasterVolume),E?._typename&&0===E._typename.indexOf(M.clTGeoVolume)&&(E={_typename:M.clTGeoNode,fVolume:E,fName:E.fName,$geoh:E.$geoh,_proxy:!0}),super(N,E),z&&(this.geo_manager=z),this.no_default_title=!0,this.mode3d=!0,this.drawing_stage=0,this.drawing_log="Init",this.ctrl={clipIntersect:!0,clip:[{name:"x",enabled:!1,value:0,min:-100,max:100},{name:"y",enabled:!1,value:0,min:-100,max:100},{name:"z",enabled:!1,value:0,min:-100,max:100}],ssao:{enabled:!1,output:L.GaR.OUTPUT.Default,kernelRadius:0,minDistance:.001,maxDistance:.1},bloom:{enabled:!0,strength:1.5},info:{num_meshes:0,num_faces:0,num_shapes:0},highlight:!1,highlight_scene:!1,depthTest:!0,depthMethod:"dflt",select_in_view:!1,update_browser:!0,light:{kind:"points",top:!1,bottom:!1,left:!1,right:!1,front:!1,specular:!0,power:1},trans_radial:0,trans_z:0},this.ctrl.depthMethodItems=[{name:"Default",value:"dflt"},{name:"Raytraicing",value:"ray"},{name:"Boundary box",value:"box"},{name:"Mesh size",value:"size"},{name:"Central point",value:"pnt"}],this.ctrl.ssao.outputItems=[{name:"Default",value:L.GaR.OUTPUT.Default},{name:"SSAO Only",value:L.GaR.OUTPUT.SSAO},{name:"SSAO Only + Blur",value:L.GaR.OUTPUT.Blur},{name:"Beauty",value:L.GaR.OUTPUT.Beauty},{name:"Depth",value:L.GaR.OUTPUT.Depth},{name:"Normal",value:L.GaR.OUTPUT.Normal}],this.cleanup(!0)}changeStage(N,E){if(this.drawing_stage=N,!E)switch(N){case 0:E="Building done";break;case 1:E="collect visibles";break;case 2:E="worker collect visibles";break;case 3:E="Analyse visibles";break;case 4:E="collect shapes for building";break;case 5:E="Start build shapes";break;case 6:E="Worker build shapes";break;case 7:E="Build shapes";break;case 8:E="Build ready";break;case 9:E="Wait for main painter";break;case 10:E="Build projection";break;default:E=`stage ${N}`}this.drawing_log=E}isStage(N){return N===this.drawing_stage}createToolbar(){if(this._toolbar||!this._webgl||this.ctrl.notoolbar||(0,M.isBatchMode)())return;let N=[{name:"toImage",title:"Save as PNG",icon:"camera",click:()=>this.createSnapshot()},{name:"control",title:"Toggle control UI",icon:"rect",click:()=>this.showControlOptions("toggle")},{name:"enlarge",title:"Enlarge geometry drawing",icon:"circle",click:()=>this.toggleEnlarge()}];navigator.getVRDisplays&&(N.push({name:"entervr",title:"Enter VR (It requires a VR Headset connected)",icon:"vrgoggles",click:()=>this.toggleVRMode()}),this.initVRMode()),M.settings.ContextMenu&&N.push({name:"menu",title:"Show context menu",icon:"question",click:z=>{z.preventDefault(),z.stopPropagation(),!(0,Ve.W)()&&(0,Ve.Z)(z,this).then(Ae=>{Ae.painter.fillContextMenu(Ae),Ae.show()})}});let E=new L.Ilk(this.ctrl.background);this._toolbar=new ar(this.selectDom(),E.r+E.g+E.b<1),this._toolbar.addButtons(N)}initVRMode(){this._dolly=new L.ZAu,this._scene.add(this._dolly),this._standingMatrix=new L.yGw,this._raycasterEnd=new L.Pa4,this._raycasterOrigin=new L.Pa4,navigator.getVRDisplays().then(N=>{let E=N[0];E&&(this._renderer.vr.setDevice(E),this._vrDisplay=E,E.stageParameters&&this._standingMatrix.fromArray(E.stageParameters.sittingToStandingTransform),this.initVRControllersGeometry())})}initVRControllersGeometry(){let N=new L.xo$(.025,18,36),E=new L.vBJ({color:"grey",vertexColors:!1}),z=new L.vBJ({color:"fuchsia",vertexColors:!1}),Ae=new L.DvJ(.001,.001,2),Be=new L.Kj0(Ae,z),Fe=new L.Kj0(Ae,z),Ue=new L.Kj0(N,E),Ke=new L.Kj0(N,E);this._controllersMeshes=[],this._controllersMeshes.push(Ue),this._controllersMeshes.push(Ke),Be.position.z-=1,Fe.position.z-=1,Ue.add(Be),Ke.add(Fe),this._dolly.add(Ue),this._dolly.add(Ke),Ue.visible=!1,Ke.visible=!1}updateVRControllersList(){let N=navigator.getGamepads&&navigator.getGamepads();if(!this.vrControllers||N.length!==this.vrControllers.length){this._controllersMeshes.forEach(E=>{E.visible=!1}),this._vrControllers=[];for(let E=0;E{this._previousCameraNear=this._camera.near,this._dolly.position.set(this._camera.position.x/4,-this._camera.position.y/8,-this._camera.position.z/4),this._camera.position.set(0,0,0),this._dolly.add(this._camera),this._camera.near=.1,this._camera.updateProjectionMatrix(),this._renderer.vr.enabled=!0,this._renderer.setAnimationLoop(()=>{this.updateVRControllers(),this.render3D(0)})}),this._renderer.vr.enabled=!0,window.addEventListener("keydown",N=>{"Escape"==N.code&&this.exitVRMode()})}}exitVRMode(){this._vrDisplay.isPresenting&&(this._renderer.vr.enabled=!1,this._dolly.remove(this._camera),this._scene.add(this._camera),this._camera.position.copy(this._previousCameraPosition),this._previousCameraPosition=void 0,this._camera.rotation.copy(this._previousCameraRotation),this._previousCameraRotation=void 0,this._camera.near=this._previousCameraNear,this._camera.updateProjectionMatrix(),this._vrDisplay.exitPresent())}getGeometry(){return this.getObject()}modifyVisisbility(N,E){if(0!==Mn(this.getGeometry()))return;if(!N)return Ht(this.getGeometry().fVolume,T.kVisThis,"+"===E);let z,Ae=!1;N.indexOf("*")<0?(z=new RegExp("^"+N+"$"),Ae=!0):(z=new RegExp("^"+N.split("*").join(".*")+"$"),Ae=!1),this.findNodeWithVolume(z,function(Be){return Ct(Be.node.fVolume,"+"!==E),Ae?Be:null})}decodeOptions(N){(0,M.isStr)(N)||(N="");let E={_grid:!1,_bound:!1,_debug:!1,_full:!1,_axis:0,_count:!1,wireframe:!1,scale:new L.Pa4(1,1,1),zoom:1,rotatey:0,rotatez:0,more:1,maxlimit:1e5,vislevel:void 0,maxnodes:void 0,dflt_colors:!1,use_worker:!1,show_controls:!1,highlight:!1,highlight_scene:!1,no_screen:!1,project:"",is_main:!1,tracks:!1,showtop:!1,can_rotate:!0,ortho_camera:!1,clipx:!1,clipy:!1,clipz:!1,usessao:!1,usebloom:!0,outline:!1,script_name:"",transparency:0,rotate:!1,background:"#FFFFFF",depthMethod:"dflt",mouse_tmout:50,trans_radial:0,trans_z:0},z=(0,M.decodeUrl)();"true"==z.get("_grid")&&(E._grid=!0);let Ae=z.get("_debug");"true"==Ae&&(E._debug=!0,E._grid=!0),"bound"==Ae&&(E._debug=!0,E._grid=!0,E._bound=!0),"full"==Ae&&(E._debug=!0,E._grid=!0,E._full=!0,E._bound=!0);let Be=N.indexOf("macro:");if(Be>=0){let Ue=N.indexOf(";",Be+6);Ue<0&&(Ue=N.length),E.script_name=N.slice(Be+6,Ue),N=N.slice(0,Be)+N.slice(Ue+1),console.log(`script ${E.script_name} rest ${N}`)}for(;;){let Ue=N.indexOf("+"),Ke=N.indexOf("-");if(Ue<0&&Ke<0)break;let ft=Ue,vt="+";(ft<0||Ke>=0&&Ke0)Ue=(0,$e.Lq)(Fe.partAsInt());else for(let Ke=0;Ke<8;++Ke)(0,$e.Lq)(Ke).toUpperCase()===Fe.part&&(Ue=(0,$e.Lq)(Ke));Ue&&(E.background="#"+new L.Ilk(Ue).getHexString())}return Fe.check("R3D_",!0)&&(E.Render3D=M.constants.Render3D.fromString(Fe.part.toLowerCase())),Fe.check("MORE3")&&(E.more=3),Fe.check("MORE")&&(E.more=2),Fe.check("ALL")&&(E.more=10,E.vislevel=9),(Fe.check("CONTROLS")||Fe.check("CTRL"))&&(E.show_controls=!0),Fe.check("CLIPXYZ")&&(E.clipx=E.clipy=E.clipz=!0),Fe.check("CLIPX")&&(E.clipx=!0),Fe.check("CLIPY")&&(E.clipy=!0),Fe.check("CLIPZ")&&(E.clipz=!0),Fe.check("CLIP")&&(E.clipx=E.clipy=E.clipz=!0),Fe.check("PROJX",!0)&&(E.project="x",Fe.partAsInt(1)>0&&(E.projectPos=Fe.partAsInt()),E.can_rotate=!1),Fe.check("PROJY",!0)&&(E.project="y",Fe.partAsInt(1)>0&&(E.projectPos=Fe.partAsInt()),E.can_rotate=!1),Fe.check("PROJZ",!0)&&(E.project="z",Fe.partAsInt(1)>0&&(E.projectPos=Fe.partAsInt()),E.can_rotate=!1),(Fe.check("DFLT_COLORS")||Fe.check("DFLT"))&&(E.dflt_colors=!0),Fe.check("SSAO")&&(E.usessao=!0),Fe.check("NOBLOOM")&&(E.usebloom=!1),Fe.check("BLOOM")&&(E.usebloom=!0),Fe.check("OUTLINE")&&(E.outline=!0),Fe.check("NOWORKER")&&(E.use_worker=-1),Fe.check("WORKER")&&(E.use_worker=1),(Fe.check("NOHIGHLIGHT")||Fe.check("NOHIGH"))&&(E.highlight_scene=E.highlight=0),Fe.check("HIGHLIGHT")&&(E.highlight_scene=E.highlight=!0),Fe.check("HSCENEONLY")&&(E.highlight_scene=!0,E.highlight=0),Fe.check("NOHSCENE")&&(E.highlight_scene=0),Fe.check("HSCENE")&&(E.highlight_scene=!0),(Fe.check("WIREFRAME")||Fe.check("WIRE"))&&(E.wireframe=!0),Fe.check("ROTATE")&&(E.rotate=!0),(Fe.check("INVX")||Fe.check("INVERTX"))&&(E.scale.x=-1),(Fe.check("INVY")||Fe.check("INVERTY"))&&(E.scale.y=-1),(Fe.check("INVZ")||Fe.check("INVERTZ"))&&(E.scale.z=-1),Fe.check("COUNT")&&(E._count=!0),Fe.check("TRANSP",!0)&&(E.transparency=Fe.partAsInt(0,100)/100),Fe.check("OPACITY",!0)&&(E.transparency=1-Fe.partAsInt(0,100)/100),(Fe.check("AXISCENTER")||Fe.check("AC"))&&(E._axis=2),Fe.check("TRR",!0)&&(E.trans_radial=Fe.partAsInt()/100),Fe.check("TRZ",!0)&&(E.trans_z=Fe.partAsInt()/100),(Fe.check("AXIS")||Fe.check("A"))&&(E._axis=!0),Fe.check("D")&&(E._debug=!0),Fe.check("G")&&(E._grid=!0),Fe.check("B")&&(E._bound=!0),Fe.check("W")&&(E.wireframe=!0),Fe.check("F")&&(E._full=!0),Fe.check("Y")&&(E._yup=!0),Fe.check("Z")&&(E._yup=!1),void 0===E._yup&&(E._yup=this.getCanvSvg().empty()),E}activateInBrowser(N,E){(0,M.isStr)(N)&&(N=[N]),this._hpainter&&(this._hpainter.activateItems(N,E),this.ctrl.update_browser||setTimeout(()=>this._hpainter.activateItems([]),2e3))}testMatrixes(){let N=0,E=0,z=0,Ae={domatrix:!0,func:()=>{let Ue=this.getmatrix(),Ke=this.CopyStack(),ft=this._clones.createObject3D(Ke.stack,this._toplevel,"mesh");if(!ft)return!0;E++;let Vt,vt=ft.matrixWorld;if(vt.equals(Ue)||vt.determinant()>0&&Ue.determinant()<-.9&&(Vt=new L.Pa4(1,1,-1),Ue=Ue.clone().scale(Vt),vt.equals(Ue)))return!0;let hn=0;for(let gn=0;gn<16;++gn)hn=Math.max(hn,Math.abs(vt.elements[gn]-Ue.elements[gn]));return z=Math.max(hn,z),hn<1e-4||(console.log(`${this._clones.resolveStack(Ke.stack).name} maxdiff ${hn} determ ${vt.determinant()} ${Ue.determinant()}`),N++,!1)}},Be=(new Date).getTime();this._clones.scanVisible(Ae);let Fe=(new Date).getTime();console.log(`Compare matrixes total ${E} errors ${N} takes ${Fe-Be} maxdiff ${z}`)}fillContextMenu(N){N.add("header: Draw options"),N.addchk(this.ctrl.update_browser,"Browser update",()=>{this.ctrl.update_browser=!this.ctrl.update_browser,this.ctrl.update_browser||this.activateInBrowser([])}),N.addchk(this.ctrl.show_controls,"Show Controls",()=>this.showControlOptions("toggle")),N.addchk(this.ctrl._axis,"Show axes",()=>this.setAxesDraw("toggle")),this.geo_manager&&N.addchk(this.ctrl.showtop,"Show top volume",()=>this.setShowTop(!this.ctrl.showtop)),N.addchk(this.ctrl.wireframe,"Wire frame",()=>this.toggleWireFrame()),N.addchk(this.ctrl.highlight,"Highlight volumes",()=>{this.ctrl.highlight=!this.ctrl.highlight}),N.addchk(this.ctrl.highlight_scene,"Highlight scene",()=>{this.ctrl.highlight_scene=!this.ctrl.highlight_scene}),N.add("Reset camera position",()=>this.focusCamera()),this._geom_viewer||N.add("Get camera position",()=>N.info("Position (as url)","&opt="+this.produceCameraUrl())),this.ctrl.project||N.addchk(this.ctrl.rotate,"Autorotate",()=>this.setAutoRotate(!this.ctrl.rotate)),N.addchk(this.ctrl.select_in_view,"Select in view",()=>{this.ctrl.select_in_view=!this.ctrl.select_in_view,this.ctrl.select_in_view&&this.startDrawGeometry()})}changedGlobalTransparency(N,E){let z=(0,M.isFunc)(N)?N:null;(z||void 0===N)&&(N=this.ctrl.transparency),this._toplevel.traverse(Ae=>{if(void 0!==Ae?.material?.inherentOpacity){let Be=z?z(Ae):void 0;Ae.material.opacity=void 0!==Be?1-Be:Math.min(1-(N||0),Ae.material.inherentOpacity),Ae.material.transparent=Ae.material.opacity<1}}),E||this.render3D(-1)}resetTransformation(){this.changedTransformation("reset")}changedTransformation(N){if(!this._toplevel)return;let E=this.ctrl,z=new L.yGw,Ae=new L.Pa4;"reset"==N&&(E.trans_z=E.trans_radial=0),this._toplevel.traverse(Be=>{if(void 0===Be.stack)return;let Fe=Be.parent;if("reset"==N)return Fe.matrix0&&(Fe.matrix.copy(Fe.matrix0),Fe.matrix.decompose(Fe.position,Fe.quaternion,Fe.scale),Fe.matrixWorldNeedsUpdate=!0),delete Fe.matrix0,delete Fe.vect0,delete Fe.vect1,void delete Fe.minvert;if(void 0===Fe.vect0){Fe.matrix0=Fe.matrix.clone(),Fe.minvert=(new L.yGw).copy(Fe.matrixWorld).invert();let Ue=ot(Be,null,!0);Fe.vect0=new L.Pa4((Ue.max.x+Ue.min.x)/2,(Ue.max.y+Ue.min.y)/2,(Be._flippedMesh?-1:1)*(Ue.max.z+Ue.min.z)/2).applyMatrix4(Fe.matrixWorld),Fe.vect1=new L.Pa4(0,0,0).applyMatrix4(Fe.minvert)}Ae.set(E.trans_radial*Fe.vect0.x,E.trans_radial*Fe.vect0.y,E.trans_z*Fe.vect0.z).applyMatrix4(Fe.minvert).sub(Fe.vect1),Fe.matrix.multiplyMatrices(Fe.matrix0,z.makeTranslation(Ae.x,Ae.y,Ae.z)),Fe.matrix.decompose(Fe.position,Fe.quaternion,Fe.scale),Fe.matrixWorldNeedsUpdate=!0}),this._toplevel.updateMatrixWorld(),"norender"!=N&&this.drawSimpleAxis()}changedAutoRotate(){this.autorotate(2.5)}changedAxes(){(0,M.isStr)(this.ctrl._axis)&&(this.ctrl._axis=parseInt(this.ctrl._axis)),this.drawSimpleAxis()}changedBackground(N){if(void 0!==N&&(this.ctrl.background=N),this._renderer.setClearColor(this.ctrl.background,1),this.render3D(0),this._toolbar){let E=new L.Ilk(this.ctrl.background);this._toolbar.changeBrightness(E.r+E.g+E.b<1)}}changedSSAO(){this.ctrl.ssao.enabled?(this.createSSAO(),this._ssaoPass.output=parseInt(this.ctrl.ssao.output),this._ssaoPass.kernelRadius=this.ctrl.ssao.kernelRadius,this._ssaoPass.minDistance=this.ctrl.ssao.minDistance,this._ssaoPass.maxDistance=this.ctrl.ssao.maxDistance):this.removeSSAO(),this.updateClipping(),this._slave_painters&&this._slave_painters.forEach(N=>{Object.assign(N.ctrl.ssao,this.ctrl.ssao),N.changedSSAO()})}showControlOptions(N){if(this.ctrl){if("toggle"===N?N=!this._datgui:void 0===N&&(N=this.ctrl.show_controls),this.ctrl.show_controls=N,this._datgui)return void(N||(this._datgui.domElement.remove(),this._datgui.destroy(),delete this._datgui));N&&Me.e(267).then(Me.bind(Me,8267)).then(E=>this.buildDatGui(E))}}buildDatGui(N){if(!this._renderer)return;if(!N)throw Error("Fail to load dat.gui");this._datgui=new N.GUI({autoPlace:!1,width:Math.min(650,this._renderer.domElement.width/2)});let E=this.selectDom();"static"==E.style("position")&&E.style("position","relative");let z=this._datgui.domElement;if(z.style.position="absolute",z.style.top=0,z.style.right=0,E.node().appendChild(z),this._datgui.painter=this,this.ctrl.project){let vt=this.getGeomBoundingBox(this.getProjectionSource(),.01),Vt=this.ctrl.project;void 0===this.ctrl.projectPos&&(this.ctrl.projectPos=(vt.min[Vt]+vt.max[Vt])/2),this._datgui.add(this.ctrl,"projectPos",vt.min[Vt],vt.max[Vt]).name(Vt.toUpperCase()+" projection").onChange(()=>this.startDrawGeometry())}else{let vt=this._datgui.addFolder("Clipping"),Vt=()=>this.changedClipping(-1);for(let hn=0;hn<3;++hn){let gn=this.ctrl.clip[hn],mn=gn.name.toUpperCase();vt.add(gn,"enabled").name("Enable "+mn).listen().onChange(Vt),vt.add(gn,"value",gn.min,gn.max).name(mn+" position").onChange(this.changedClipping.bind(this,hn))}vt.add(this.ctrl,"clipIntersect").name("Clip intersection").listen().onChange(Vt)}let Ae=this._datgui.addFolder("Appearance");if(Ae.add(this.ctrl,"highlight").name("Highlight Selection").listen().onChange(()=>this.changedHighlight()),Ae.add(this.ctrl,"transparency",0,1,.001).listen().onChange(vt=>this.changedGlobalTransparency(vt)),Ae.addColor(this.ctrl,"background").name("Background").onChange(vt=>this.changedBackground(vt)),Ae.add(this.ctrl,"wireframe").name("Wireframe").listen().onChange(()=>this.changedWireFrame()),this.ctrl._axis_cfg=0,Ae.add(this.ctrl,"_axis",{none:0,show:1,center:2}).name("Axes").onChange(()=>this.changedAxes()),this.ctrl.project||Ae.add(this.ctrl,"rotate").name("Autorotate").listen().onChange(()=>this.changedAutoRotate()),Ae.add(this,"focusCamera").name("Reset camera position"),this._webgl){let vt=this._datgui.addFolder("Advanced"),Vt={};this.ctrl.depthMethodItems.forEach(hn=>{Vt[hn.name]=hn.value}),vt.add(this.ctrl,"depthTest").name("Depth test").listen().onChange(()=>this.changedDepthTest()),vt.add(this.ctrl,"depthMethod",Vt).name("Rendering order").onChange(hn=>this.changedDepthMethod(hn)),vt.add(this.ctrl,"ortho_camera").name("Orhographic camera").listen().onChange(()=>this.changeCamera()),vt.add(this,"resetAdvanced").name("Reset")}if(!this.ctrl.project){let vt=this._datgui.addFolder("Transform");vt.add(this.ctrl,"trans_z",0,3,.01).name("Z axis").listen().onChange(()=>this.changedTransformation()),vt.add(this.ctrl,"trans_radial",0,3,.01).name("Radial").listen().onChange(()=>this.changedTransformation()),vt.add(this,"resetTransformation").name("Reset"),(this.ctrl.trans_z||this.ctrl.trans_radial)&&vt.open()}if(this.ctrl.outline)return;let Be=this._datgui.addFolder("Smooth Lighting (SSAO)"),Fe=()=>this.changedSSAO(),Ue={};this.ctrl.ssao.outputItems.forEach(vt=>{Ue[vt.name]=vt.value}),Be.add(this.ctrl.ssao,"enabled").name("Enable SSAO").listen().onChange(Fe),Be.add(this.ctrl.ssao,"output",Ue).listen().onChange(Fe),Be.add(this.ctrl.ssao,"kernelRadius",0,32).listen().onChange(Fe),Be.add(this.ctrl.ssao,"minDistance",.001,.02).listen().onChange(Fe),Be.add(this.ctrl.ssao,"maxDistance",.01,.3).listen().onChange(Fe);let Ke=this._datgui.addFolder("Unreal Bloom"),ft=()=>this.changedBloomSettings();Ke.add(this.ctrl.bloom,"enabled").name("Enable Blooming").listen().onChange(ft),Ke.add(this.ctrl.bloom,"strength",0,3).name("Strength").listen().onChange(ft)}changedBloomSettings(){this.ctrl.bloom.enabled?(this.createBloom(),this._bloomPass.strength=this.ctrl.bloom.strength):this.removeBloom(),this._slave_painters&&this._slave_painters.forEach(N=>{Object.assign(N.ctrl.bloom,this.ctrl.bloom),N.changedBloomSettings()})}changeCamera(){this._controls&&(this._controls.cleanup(),delete this._controls),this.removeBloom(),this.removeSSAO(),this.createCamera(),this.createSpecialEffects(),this._first_drawing=!0,this.startDrawGeometry(!0)}createBloom(){this._bloomPass||(this._camera.layers.enable(1),this._bloomComposer=new L.xCo(this._renderer),this._bloomComposer.addPass(new L.CDd(this._scene,this._camera)),this._bloomPass=new L.mih(new L.FM8(window.innerWidth,window.innerHeight),1.5,.4,.85),this._bloomPass.threshold=0,this._bloomPass.strength=this.ctrl.bloom.strength,this._bloomPass.radius=0,this._bloomPass.renderToScreen=!0,this._bloomComposer.addPass(this._bloomPass),this._renderer.autoClear=!1)}removeBloom(){this._bloomPass&&(delete this._bloomPass,delete this._bloomComposer,this._renderer.autoClear=!0,this._camera.layers.disable(1))}removeSSAO(){delete this._ssaoPass,delete this._effectComposer}createSSAO(){this._webgl&&(this._ssaoPass||(this._effectComposer||(this._effectComposer=new L.xCo(this._renderer),this._effectComposer.addPass(new L.CDd(this._scene,this._camera))),this._ssaoPass=new L.GaR(this._scene,this._camera,this._scene_width,this._scene_height),this._ssaoPass.kernelRadius=16,this._ssaoPass.renderToScreen=!0,this._effectComposer.addPass(this._ssaoPass)))}orbitContext(N,E){(0,Ve.Z)(N,this).then(z=>{let Ae=0,Be=0,Fe=0;if(E)for(let Ue=0;Ue1;Ue&&z.add("header:"+(Ae>0?"Items":"Nodes"));for(let Ke=0;Ke")&&(Vt=(this.getItemName()||"top")+Vt.slice(6)),vt=Vt.slice(Vt.lastIndexOf("/")+1),vt||(vt=Vt),hn=vt;else{if(!ft.stack)continue;vt=this._clones.resolveStack(ft.stack).name,Vt=this.getStackFullName(ft.stack),hn=this.getItemName(),0===vt.indexOf("Nodes/")?hn=vt.slice(6):vt?hn=vt:hn||(hn="header")}if(z.add((Ue?"sub:":"header:")+hn,Vt,mn=>this.activateInBrowser([mn],!0)),z.add("Browse",Vt,mn=>this.activateInBrowser([mn],!0)),this._hpainter&&z.add("Inspect",Vt,mn=>this._hpainter.display(mn,"inspect")),ft.geo_name){z.add("Hide",Ke,mn=>{let An=E[mn].object;An.visible=!1,An.geo_object&&(An.geo_object.$hidden_via_menu=!0),z.painter.render3D()}),Ue&&z.add("endsub:");continue}let gn=this.accessObjectWireFrame(ft);void 0!==gn&&z.addchk(gn,"Wireframe",Ke,function(mn){let An=E[mn].object.material;An.wireframe=!An.wireframe,this.render3D()}),++Fe>1&&z.add("Manifest",Ke,function(mn){this._last_manifest&&(this._last_manifest.wireframe=!this._last_manifest.wireframe),this._last_hidden&&this._last_hidden.forEach(An=>{An.visible=!0}),this._last_hidden=[];for(let An=0;An{An.visible=!1}),this._last_manifest=E[mn].object.material,this._last_manifest.wireframe=!this._last_manifest.wireframe,this.render3D()}),z.add("Focus",Ke,function(mn){this.focusCamera(E[mn].object)}),this._geom_viewer||z.add("Hide",Ke,function(mn){let An=z.painter._clones.resolveStack(E[mn].object.stack);An.obj&&0===An.node.kind&&An.obj.fVolume?(Ht(An.obj.fVolume,T.kVisThis,!1),lr(An.obj.fVolume,this._hpainter)):An.obj&&1===An.node.kind&&(An.obj.fRnrSelf=!1,lr(An.obj,this._hpainter)),this.testGeomChanges()}),Ue&&z.add("endsub:")}}z.show()})}filterIntersects(N){if(!N.length)return N;for(let z=0;z=0;--z){let Ae=N[z].object,Be=void 0!==Ae.stack||void 0!==Ae.geo_name;Be&&Ae.material&&void 0!==Ae.material.opacity&&(Be=Ae.material.opacity>=.1),Ae.jsroot_special&&(Be=!1);for(let Fe=0;Fethis._clipPlanes[0].constant^Fe&&(Ue=!1),E[1].enabled&&this._clipPlanes[1].normal.dot(Be)>this._clipPlanes[1].constant^Fe&&(Ue=!1),E[2].enabled&&this._clipPlanes[2].normal.dot(Be)>this._clipPlanes[2].constant&&(Ue=!1),Ue||z.push(N[Ae])}N=z}return N}testCameraPositionChange(){this.ctrl.select_in_view&&!this._draw_all_nodes&&(Sa(ba(this._camera)).CheckBox(this.getGeomBoundingBox(this._toplevel))||this.startDrawGeometry())}resolveStack(N){return this._clones&&N?this._clones.resolveStack(N):null}getStackFullName(N){let E=this.getItemName(),z=this.resolveStack(N);return z&&z.name?E?E+"/"+z.name:z.name:E}addHighlightHandler(N){(0,M.isFunc)(N?.highlightMesh)&&(this._highlight_handlers||(this._highlight_handlers=[]),this._highlight_handlers.push(N))}highlightMesh(N,E,z,Ae,Be,Fe){if(z){N=N?[N]:[];let vt=this.getExtrasContainer();vt&&vt.traverse(Vt=>{Vt.geo_object===z&&N.indexOf(Vt)<0&&N.push(Vt)})}else Be&&this._toplevel?(N=[],this._toplevel.traverse(vt=>{vt instanceof L.Kj0&&function st(Ce,N){if(!Ce||!N)return!1;if(Ce===N)return!0;if(Ce.length!==N.length)return!1;for(let E=0;Evt.get_ctrl?vt.get_ctrl():new $i(vt,this.ctrl.bloom.enabled);if(Ue&&N&&Ue.length==N.length){Ke=!0;for(let vt=0;vt{if(!this.ctrl||!this._controls)return;let Fe,Ue,E=null,z=null,Ae=null,Be=[];for(let ft=0;ft")&&(Vt=this.getItemName()+Vt.slice(6)),Be.push(Vt),E||(E=vt,z=Vt,Fe=vt.geo_object,vt.get_ctrl&&(Ue=vt.get_ctrl().extractIndex(N[ft]),void 0!==Ue&&(0,M.isStr)(z)&&(z+=" indx:"+JSON.stringify(Ue))),E.stack&&(Ae=this.resolveStack(E.stack)))))}if(this.highlightMesh(E,void 0,Fe,Ue),this.ctrl.update_browser&&(this.ctrl.highlight&&z&&(Be=[z]),this.activateInBrowser(Be)),!Ae||!Ae.obj)return z;let Ke=ma(Ae.obj);return Ke.unshift(z),{name:Ae.obj.fName,title:Ae.obj.fTitle||Ae.obj._typename,lines:Ke}},this._controls.processMouseLeave=function(){this.processMouseMove([])},this._controls.processDblClick=()=>{!this.ctrl||!this._controls||(this._last_manifest?(this._last_manifest.wireframe=!this._last_manifest.wireframe,this._last_hidden&&this._last_hidden.forEach(N=>{N.visible=!0}),delete this._last_hidden,delete this._last_manifest,this.render3D()):this.adjustCameraPosition())})}addTransformControl(){this._tcontrols||!this.ctrl._debug&&!this.ctrl._grid||(this._tcontrols=new L.Ys8(this._camera,this._renderer.domElement),this._scene.add(this._tcontrols),this._tcontrols.attach(this._toplevel),window.addEventListener("keydown",N=>{switch(N.key){case"q":this._tcontrols.setSpace("local"===this._tcontrols.space?"world":"local");break;case"Control":this._tcontrols.setTranslationSnap(Math.ceil(this._overall_size)/50),this._tcontrols.setRotationSnap(L.M8C.degToRad(15));break;case"t":this._tcontrols.setMode("translate");break;case"r":this._tcontrols.setMode("rotate");break;case"s":this._tcontrols.setMode("scale");break;case"+":this._tcontrols.setSize(this._tcontrols.size+.1);break;case"-":this._tcontrols.setSize(Math.max(this._tcontrols.size-.1,.1))}}),window.addEventListener("keyup",N=>{"Control"==N.key&&(this._tcontrols.setTranslationSnap(null),this._tcontrols.setRotationSnap(null))}),this._tcontrols.addEventListener("change",()=>this.render3D(0)))}nextDrawAction(){if(!this._clones||this.isStage(0))return!1;if(this.isStage(1)){if(this._geom_viewer)return this._draw_all_nodes=!1,this.changeStage(3),!0;if(this.ctrl.use_worker>0){if(!this._worker)return this.startWorker(),1;if(!this._worker_ready)return 1}let N=this._first_drawing?this._clones.countVisibles():0,E=null,z=null;N||(N=this._clones.markVisibles(!1,!1,!!this.geo_manager&&!this.ctrl.showtop)),this.ctrl.select_in_view&&!this._first_drawing&&(E=ba(this._camera),z=Sa(E),z.CheckBox(this.getGeomBoundingBox(this._toplevel))&&(E=null,z=null)),this._current_face_limit=this.ctrl.maxlimit,E&&(this._current_face_limit*=1.25);let Ae=!(0,M.isBatchMode)()&&M.browser.isChrome&&(N>1e4||E&&this._clones.scanVisible()>1e5);if(Ae&&0==M.source_dir.indexOf("file://")&&(console.log("disable worker for jsroot from file system"),Ae=!1),Ae&&!this._worker&&this.ctrl.use_worker>=0&&this.startWorker(),!Ae||!this._worker_ready){let Fe=this._clones.collectVisibles(this._current_face_limit,z);return this._new_draw_nodes=Fe.lst,this._draw_all_nodes=Fe.complete,this.changeStage(3),!0}let Be={collect:this._current_face_limit,flags:this._clones.getVisibleFlags(),matrix:E?E.elements:null};return this.submitToWorker(Be),this.changeStage(2),2}if(this.isStage(2))return 2;if(this.isStage(3)){if(this._new_append_nodes)this._new_draw_nodes=this._draw_nodes.concat(this._new_append_nodes),delete this._new_append_nodes;else if(this._draw_nodes){let N;N=this._geom_viewer?this._draw_nodes:this._clones.mergeVisibles(this._new_draw_nodes,this._draw_nodes);for(let E=0;E0&&(this.drawing_log=`Delete ${N.length} nodes`)}return this._draw_nodes=this._new_draw_nodes,delete this._new_draw_nodes,this.changeStage(4),!0}if(this.isStage(4)){let N=this._clones.collectShapes(this._draw_nodes);return this._build_shapes=this._clones.mergeShapesLists(this._build_shapes,N),this.changeStage(5),!0}if(this.isStage(5)){if(this.canSubmitToWorker()){let N={limit:this._current_face_limit,shapes:[]},E=0;for(let z=0;z0)return this.submitToWorker(N),this.changeStage(6),2}this.changeStage(7)}if(this.isStage(6))return 2;if(this.isStage(7)||this.isStage(8)){if(this.isStage(7)){let Ae=this._clones.buildShapes(this._build_shapes,this._current_face_limit,500);if(Ae.done)this.ctrl.info.num_shapes=this._build_shapes.length,this.changeStage(8);else if(this.ctrl.info.num_shapes=Ae.shapes,this.drawing_log=`Creating: ${Ae.shapes} / ${this._build_shapes.length} shapes, ${Ae.faces} faces`,Ae.notusedshapes<30)return!0}let N=(new Date).getTime(),E=!0,z=this.ctrl.project?this._full_geom:this._toplevel;for(let Ae=0;Ae500){E=!1;break}}else this.isStage(8)&&console.warn("shape marked as not ready when should"),E=!1}return E?this.ctrl.project?(this.changeStage(10),!0):(this.changeStage(0),!1):(this.isStage(7)||(this.drawing_log=`Building meshes ${this.ctrl.info.num_meshes} / ${this.ctrl.info.num_faces}`),!0)}if(this.isStage(9)){if(!this._main_painter)return this.changeStage(0,"Lost main painter"),!1;if(!this._main_painter._drawing_ready)return 1;this.changeStage(10)}return this.isStage(10)?(this.doProjection(),this.changeStage(0),!1):(console.error(`never come here, stage ${this.drawing_stage}`),!1)}createEntryMesh(N,E,z){if(!E.geom||0===E.nfaces)return this._clones.createObject3D(N.stack,z,"delete_mesh"),!1;this._splitColors&&N.stack&&(0===N.stack[0]?N.custom_color="green":1===N.stack[0]&&(N.custom_color="blue"));let Ue,Ae=this._clones.getDrawEntryProperties(N,(0,$e._V)()),Be=this._clones.createObject3D(N.stack,z,this.ctrl),Fe=Be.absMatrix||Be.matrixWorld;if(Ae.material.wireframe=this.ctrl.wireframe,Ae.material.side=this.ctrl.bothSides?L.ehD:L.Wl3,Ue=Fe.determinant()>-.9?new L.Kj0(E.geom,Ae.material):rt(E,Ae.material),Be.add(Ue),Be.absMatrix&&(Ue.matrix.copy(Be.absMatrix),Ue.matrix.decompose(Ue.position,Ue.quaternion,Ue.scale),Ue.updateMatrixWorld()),Ue.stack=N.stack,Ue.renderOrder=this._clones.maxdepth-N.stack.length,Ue.$jsroot_order=Be.$jsroot_depth,this.ctrl._debug||this.ctrl._full){let Ke=new L.Uk6(Ue.geometry),ft=new L.nls({color:Ae.fillcolor,linewidth:Ae.linewidth||1}),vt=new L.ejS(Ke,ft);Be.add(vt)}if(this.ctrl._bound||this.ctrl._full){let Ke=new L.fQA(Ue);Be.add(Ke)}return!0}appendMoreNodes(N,E){if(!this.isStage(0)&&!E)return void(this._provided_more_nodes=N);if(this._more_nodes)for(let Ae=0;Ae0&&(this._more_nodes=z),E||this.render3D()}getProjectionSource(){return this._clones_owner?this._full_geom:this._main_painter?this._main_painter._drawing_ready?this._main_painter._toplevel:(console.warn("MAIN PAINTER NOT READY WHEN DO PROJECTION"),null):(console.warn("MAIN PAINTER DISAPPER"),null)}getGeomBoundingBox(N,E){let z=new L.ZzF,Ae=!this._clones;return N?(z.makeEmpty(),N.traverse(Be=>{(Ae||Be.stack&&Be instanceof L.Kj0||Be.main_track&&Be instanceof L.ejS)&&ot(Be,z)}),void 0!==E&&z.expandByVector(z.getSize(new L.Pa4).multiplyScalar(E)),z):(z.min.x=z.min.y=z.min.z=-1,z.max.x=z.max.y=z.max.z=1,z)}doProjection(){let N=this.getProjectionSource();if(!N)return!1;if((0,De.mF)(this._toplevel,!0),void 0===this.ctrl.projectPos){let E=this.getGeomBoundingBox(N),z=E.min[this.ctrl.project],Ae=E.max[this.ctrl.project],Be=(z+Ae)/2;z<0&&Ae>0&&Math.abs(Be)<.2*Math.max(-z,Ae)&&(Be=0),this.ctrl.projectPos=Be}return N.traverse(E=>{if(!(E instanceof L.Kj0&&E.stack))return;let z=function Tr(Ce,N,E,z,Ae){Ce.boundingBox||Ce.computeBoundingBox();let Be=Ce.boundingBox.clone();if(Be.applyMatrix4(N),z||(z=0),Be.min[E]>=z&&Be.max[E]>=z||Be.min[E]<=z&&Be.max[E]<=z)return null;let Fe=new A(Ce,N,0,Ae),Ue=2*Math.max(Math.abs(Be.min.x),Math.abs(Be.max.x)),Ke=2*Math.max(Math.abs(Be.min.y),Math.abs(Be.max.y)),ft=2*Math.max(Math.abs(Be.min.z),Math.abs(Be.max.z)),vt=1e4;switch(E){case"x":vt=Math.max(Ke,ft);break;case"y":vt=Math.max(Ue,ft);break;case"z":vt=Math.max(Ue,Ke)}let Vt=function w(Ce,N,E){let z;switch((!E||E<1e4)&&(E=1e4),Ce){case"x":z=[new J(N,-3*E,E,1,0,0),new J(N,E,-3*E,1,0,0),new J(N,E,E,1,0,0)];break;case"y":z=[new J(-3*E,N,E,0,1,0),new J(E,N,E,0,1,0),new J(E,N,-3*E,0,1,0)];break;default:z=[new J(-3*E,E,N,0,0,1),new J(E,-3*E,N,0,0,1),new J(E,E,N,0,0,1)]}let Ae=new P([new R(z)]);return new A(Ae)}(E,z,vt);return Fe.cut_from_plane(Vt),Vt.toBufferGeometry()}(E.geometry,E.parent.absMatrix||E.parent.matrixWorld,this.ctrl.project,this.ctrl.projectPos,E._flippedMesh);if(!z)return;let Ae=new L.Kj0(z,E.material.clone());this._toplevel.add(Ae),Ae.stack=E.stack}),!0}changedLight(N){if(!this._camera)return;let E=!N;N||(N=this.getGeomBoundingBox(this._toplevel));let z=N.max.x-N.min.x,Ae=N.max.y-N.min.y,Be=N.max.z-N.min.z,Fe=[],Ue=this.ctrl.light.power;if(void 0===Ue&&(Ue=1),this._camera._lights!=this.ctrl.light.kind)switch((0,De.mF)(this._camera,!0),this._camera._lights=this.ctrl.light.kind,this._camera._lights){case"ambient":this._camera.add(new L.Mig(15724527,Ue));break;case"hemisphere":this._camera.add(new L.vmT(16777147,526368,Ue));break;default:for(let Ke=0;Ke<6;++Ke)this._camera.add(new L.cek(15724527,Ue))}for(let Ke=0;Ke{Ke.power=4*Ue*Math.PI/Fe.length}),E&&this.render3D()}createCamera(){this._camera&&(this._scene.remove(this._camera),(0,De.mF)(this._camera),delete this._camera),this.ctrl.ortho_camera?this._camera=new L.iKG(-this._scene_width/2,this._scene_width/2,this._scene_height/2,-this._scene_height/2,1,1e4):(this._camera=new L.cPb(25,this._scene_width/this._scene_height,1,1e4),this._camera.up=this.ctrl._yup?new L.Pa4(0,1,0):new L.Pa4(0,0,1));let N=new L.cek(15724527,1);N.position.set(10,10,10),this._camera.add(N),this._scene.add(this._camera)}createSpecialEffects(){this._webgl&&(this.ctrl.ssao.enabled||this.ctrl.outline)&&(this.ctrl.outline&&(0,M.isFunc)(this.createOutline)?(this._effectComposer=new L.xCo(this._renderer),this._effectComposer.addPass(new L.CDd(this._scene,this._camera)),this.createOutline(this._scene_width,this._scene_height)):this.ctrl.ssao.enabled&&this.createSSAO()),this._webgl&&this.ctrl.bloom.enabled&&this.createBloom()}createScene(N,E){var z=this;return(0,ze.Z)(function*(){return z._scene=new L.xsS,z._scene.fog=new L.ybr(16777215,1,1e4),z._scene.overrideMaterial=new L.YBo({color:7340287,vertexColors:!1,transparent:!0,opacity:.2,depthTest:!1}),z._scene_width=N,z._scene_height=E,z.createCamera(),z._selected_mesh=null,z._overall_size=10,z._toplevel=new L.Tme,z._scene.add(z._toplevel),(0,De.iq)(N,E,z.options.Render3D,{antialias:!0,logarithmicDepthBuffer:!1,preserveDrawingBuffer:!0}).then(Ae=>{if(z._renderer=Ae,z._webgl=z._renderer.jsroot_render3d===M.constants.Render3D.WebGL,z._renderer.setPixelRatio&&!(0,M.isNodeJs)()&&z._renderer.setPixelRatio(window.devicePixelRatio),z._renderer.setSize(N,E,!z._fit_main_area),z._renderer.localClippingEnabled=!0,z._renderer.setClearColor(z.ctrl.background,1),z._fit_main_area&&z._webgl){z._renderer.domElement.style.width="100%",z._renderer.domElement.style.height="100%";let Be=z.selectDom();"static"==Be.style("position")&&Be.style("position","relative")}if(z._animating=!1,z.ctrl.bothSides=!1,z.createSpecialEffects(),z._fit_main_area&&!z._webgl){let Fe=(0,M.getDocument)().createElementNS("http://www.w3.org/2000/svg","svg");return Fe.setAttribute("width",N),Fe.setAttribute("height",E),Fe.appendChild(z._renderer.jsroot_dom),Fe}return z._renderer.jsroot_dom})})()}startDrawGeometry(N){N||this.isStage(0)?(this._clones_owner&&this._clones&&this._clones.setDefaultColors(this.ctrl.dflt_colors),this._startm=(new Date).getTime(),this._last_render_tm=this._startm,this._last_render_meshes=0,this.changeStage(1),this._drawing_ready=!1,this.ctrl.info.num_meshes=0,this.ctrl.info.num_faces=0,this.ctrl.info.num_shapes=0,this._selected_mesh=null,this.ctrl.project&&(this._clones_owner?this._full_geom?this.changeStage(10):this._full_geom=new L.Tme:this.changeStage(9)),delete this._last_manifest,delete this._last_hidden,delete this._draw_nodes_again,this.continueDraw()):this._draw_nodes_again=!0}resetAdvanced(){this.ctrl.ssao.kernelRadius=16,this.ctrl.ssao.output=L.GaR.OUTPUT.Default,this.ctrl.depthTest=!0,this.ctrl.clipIntersect=!0,this.ctrl.depthMethod="ray",this.changedDepthMethod("norender"),this.changedDepthTest()}getOverallSize(N){if(!this._overall_size||N){let E=this.getGeomBoundingBox(this._toplevel);if(!Number.isFinite(E.min.x))return 1e3;this._overall_size=2*Math.max(E.max.x-E.min.x,E.max.y-E.min.y,E.max.z-E.min.z)}return this._overall_size}createSnapshot(N){if(!this._renderer)return;this.render3D(0);let E=this._renderer.domElement.toDataURL("image/png");if("asis"===N)return E;E.replace("image/png","image/octet-stream");let z=(0,M.getDocument)(),Ae=z.createElement("a");(0,M.isStr)(Ae.download)&&(z.body.appendChild(Ae),Ae.download=N||"geometry.png",Ae.href=E,Ae.click(),z.body.removeChild(Ae))}produceCameraUrl(N){if(!(this._lookat&&this._camera0pos&&this._camera&&this.ctrl))return;let E=(new L.Pa4).add(this._camera0pos).sub(this._lookat),z=(new L.Pa4).add(this._camera.position).sub(this._lookat),Ae=Math.min(1e4,Math.max(1,this.ctrl.zoom*z.length()/E.length()*100));E.normalize(),z.normalize();let Be=new L._fP,Fe=new L.USm;Be.setFromUnitVectors(E,z),Fe.setFromQuaternion(Be,"YZX");let Ue=Fe.y/Math.PI*180,Ke=Fe.z/Math.PI*180;return Ue<0&&(Ue+=360),Ke<0&&(Ke+=360),`roty${Ue.toFixed(N=N||0)},rotz${Ke.toFixed(N)},zoom${Ae.toFixed(N)}`}calculateZoom(){if(this._camera0pos&&this._camera&&this._lookat){let N=(new L.Pa4).add(this._camera0pos).sub(this._lookat);return(new L.Pa4).add(this._camera.position).sub(this._lookat).length()/N.length()}return 0}adjustCameraPosition(N,E){if(!this._toplevel)return;let z=this.getGeomBoundingBox(this._toplevel);if(!Number.isFinite(z.min.x))return;let Ae=z.max.x-z.min.x,Be=z.max.y-z.min.y,Fe=z.max.z-z.min.z,Ue=(z.max.x+z.min.x)/2,Ke=(z.max.y+z.min.y)/2,ft=(z.max.z+z.min.z)/2;if(this._overall_size=2*Math.max(Ae,Be,Fe),this._camera.near=this._overall_size/350,this._camera.far=12*this._overall_size,this._scene.fog.near=2*this._overall_size,this._scene.fog.far=12*this._overall_size,N)for(let hn=0;hn<3;++hn){let gn=this.ctrl.clip[hn];gn.min=z.min[gn.name],gn.max=z.max[gn.name];let mn=gn.max-gn.min;gn.max+=.01*mn,gn.min-=.01*mn,gn.value?gn.valuegn.max&&(gn.value=gn.max):gn.value=(gn.min+gn.max)/2}this.ctrl.ortho_camera&&(this._camera.left=z.min.x,this._camera.right=z.max.x,this._camera.top=z.max.y,this._camera.bottom=z.min.y),this._camera.updateProjectionMatrix();let vt=2*this.ctrl.zoom,Vt=Math.max(Ae,Be,Fe);if((this.ctrl.rotatey||this.ctrl.rotatez)&&this.ctrl.can_rotate){let hn=this.calculateZoom();E&&hn&&(vt=2*hn);let gn=new L.USm(0,this.ctrl.rotatey/180*Math.PI,this.ctrl.rotatez/180*Math.PI,"YZX");this._camera.position.set(-vt*Vt,0,0),this._camera.position.applyEuler(gn),this._camera.position.add(new L.Pa4(Ue,Ke,ft)),E&&hn&&(vt*=hn/this.calculateZoom(),this._camera.position.set(-vt*Vt,0,0),this._camera.position.applyEuler(gn),this._camera.position.add(new L.Pa4(Ue,Ke,ft)))}else if(this.ctrl.ortho_camera)this._camera.position.set(Ue,Ke,Math.max(Ae,Be));else if(this.ctrl.project)switch(this.ctrl.project){case"x":this._camera.position.set(1.5*vt*Math.max(Be,Fe),0,0);break;case"y":this._camera.position.set(0,1.5*vt*Math.max(Ae,Fe),0);break;case"z":this._camera.position.set(0,0,1.5*vt*Math.max(Ae,Be))}else this.ctrl._yup?this._camera.position.set(Ue-vt*Math.max(Ae,Fe),Ke+vt*Be,ft-vt*Math.max(Ae,Fe)):this._camera.position.set(Ue-vt*Math.max(Ae,Be),Ke-vt*Math.max(Ae,Be),ft+vt*Fe);this._lookat=new L.Pa4(Ue,Ke,ft),this._camera0pos=new L.Pa4(-2*Vt,0,0),this._camera.lookAt(this._lookat),this.changedLight(z),this._controls&&(this._controls.target.copy(this._lookat),this._controls.update()),this.ctrl.select_in_view&&this.startDrawGeometry()}setCameraPosition(N,E,z){if(!this.ctrl)return;this.ctrl.rotatey=N||0,this.ctrl.rotatez=E||0;let Ae=!1;z&&Number.isFinite(z)?this.ctrl.zoom=z:Ae=!0,this.adjustCameraPosition(!1,Ae)}focusOnItem(N){if(!N||!this._clones)return;let E=this._clones.findStackByName(N);E&&this.focusCamera(this._clones.resolveStack(E,!0),!1)}focusCamera(N,E){if(this.ctrl.project||this.ctrl.ortho_camera)return this.adjustCameraPosition();let z=new L.ZzF;if(void 0===N)z=this.getGeomBoundingBox(this._toplevel);else if(N instanceof L.Kj0)z.setFromObject(N);else{let mi=(new L.Pa4).setFromMatrixPosition(N.matrix),Xn=N.node,Ii=new L.Pa4(Xn.fDX,Xn.fDY,Xn.fDZ).multiplyScalar(.5);z.min=mi.clone().sub(Ii),z.max=mi.clone().add(Ii)}let vt,Ae=z.max.x-z.min.x,Be=z.max.y-z.min.y,Fe=z.max.z-z.min.z,Ue=(z.max.x+z.min.x)/2,Ke=(z.max.y+z.min.y)/2,ft=(z.max.z+z.min.z)/2;vt=this.ctrl._yup?new L.Pa4(Ue-2*Math.max(Ae,Fe),Ke+2*Be,ft-2*Math.max(Ae,Fe)):new L.Pa4(Ue-2*Math.max(Ae,Be),Ke-2*Math.max(Ae,Be),ft+2*Fe);let Vt=new L.Pa4(Ue,Ke,ft),hn=this._controls.target,gn=50,mn=0,An=vt.sub(this._camera.position).divideScalar(gn),li=Vt.sub(hn).divideScalar(gn);if(E=E&&this._webgl){for(let mi=0;mi<3;++mi){let Xn=this.ctrl.clip[mi];Xn.enabled||(Xn.value=Xn.min,Xn.enabled=!0),Xn.inc=((Xn.min+Xn.max)/2-Xn.value)/gn}this.updateClipping()}this._animating=!0;const ti=()=>{if(void 0===this._animating)return;this._animating?requestAnimationFrame(ti):this._geom_viewer||this.startDrawGeometry();let mi=1-Math.cos(2*Math.PI*mn/gn);this._camera.position.add(An.clone().multiplyScalar(mi)),hn.add(li.clone().multiplyScalar(mi)),this._lookat=hn,this._camera.lookAt(this._lookat),this._camera.updateProjectionMatrix();let Xn=(new Date).getTime();if(E){for(let Ri=0;Ri<3;++Ri)this.ctrl.clip[Ri].value+=this.ctrl.clip[Ri].inc*mi;this.updateClipping()}else this.render3D(0);let Ii=(new Date).getTime();0==mn&&Ii-Xn>200&&(gn=20),mn++,this._animating=mn{if(!this._renderer||!this.ctrl)return;let Be=new Date;this.ctrl.rotate&&requestAnimationFrame(Ae),this._controls&&(this._controls.autoRotate=this.ctrl.rotate,this._controls.autoRotateSpeed=E*(Be.getTime()-z.getTime())/16.6666,this._controls.update()),z=new Date,this.render3D(0)};this._webgl&&Ae()}completeScene(){if(this.ctrl._debug||this.ctrl._grid){if(this.ctrl._full){let N=new L.fQA(this._toplevel);this._scene.add(N)}this._scene.add(new L.y8_(2*this._overall_size)),this._scene.add(new L.VLJ(Math.ceil(this._overall_size),Math.ceil(this._overall_size)/50)),this.helpText("
        Transform Controls
        'T' translate | 'R' rotate | 'S' scale
        '+' increase size | '-' decrease size
        'W' toggle wireframe/solid display
        keep 'Ctrl' down to snap to grid
        ")}}drawCount(N,E){var z=this;return(0,ze.Z)(function*(){const Ae=hn=>((0,M.isBatchMode)()?"anytime":hn.toString())+" ms";let Be=["Unique nodes: "+z._clones.nodes.length,"Unique visible: "+N,"Time to clone: "+Ae(E)];z._clones.scanVisible();let Fe=0,Ue={clones:z._clones,cnt:[],func(hn){return void 0===this.cnt[this.last]?this.cnt[this.last]=1:this.cnt[this.last]++,Fe+=Ln(this.clones.getNodeShape(hn.id)),!0}},Ke=(new Date).getTime(),ft=z._clones.scanVisible(Ue),vt=(new Date).getTime();Be.push(`Total visible nodes: ${ft}`,`Total shapes: ${Fe}`);for(let hn=0;hnVt.append("p").text(hn)),new Promise(hn=>{setTimeout(()=>{Ue.domatrix=!0,Ke=(new Date).getTime(),ft=z._clones.scanVisible(Ue),vt=(new Date).getTime();let gn=`Time to scan with matrix: ${Ae(vt-Ke)}`;(0,M.isBatchMode)()?Be.push(gn):Vt.append("p").text(gn),hn(z)},100)})})()}performDrop(N,E,z,Ae){var Be=this;return(0,ze.Z)(function*(){if("TTree"===N?.$kind){let Fe="extract_geo_tracks";Ae&&Ae.indexOf("$")>0&&(Fe=Ae.slice(0,Ae.indexOf("$")),Ae=Ae.slice(Ae.indexOf("$")+1));let Ue=(0,M.findFunction)(Fe);return Ue?Ue(N,Ae).then(Ke=>Ke?Be.drawExtras(Ke,"",!1).then(()=>(Be.updateClipping(!0),Be.render3D(100))):Be):Promise.reject(Error(`Function ${Fe} not found`))}return Be.drawExtras(N,E).then(Fe=>Fe?(z&&(z._painter=Be),Be.render3D(100)):Be)})()}mouseOverHierarchy(N,E,z){if(!this.ctrl)return;let Ae=z._obj;this.ctrl._debug&&console.log(`Mouse over ${N} ${E} ${Ae?._typename}`),Ae&&(Ae._typename===Lt||Ae._typename===it||Ae._typename===M.clTPolyMarker3D)&&this.highlightMesh(null,65280,N?Ae:null)}clearExtras(){this.getExtrasContainer("delete"),delete this._extraObjects,this.render3D()}addExtra(N,E){return void 0===this._extraObjects&&(this._extraObjects=(0,M.create)(M.clTList)),!(this._extraObjects.arr.indexOf(N)>=0||(this._extraObjects.Add(N,E),delete N.$hidden_via_menu,0))}extraObjectVisible(N,E,z){if(!this._extraObjects)return;let Ae=N.itemFullName(E),Be=this._extraObjects.opt.indexOf(Ae);if(Be<0&&E._obj&&(Be=this._extraObjects.arr.indexOf(E._obj),Be>=0&&(this._extraObjects.opt[Be]=Ae)),Be<0)return;let Fe=this._extraObjects.arr[Be],Ue=!Fe.$hidden_via_menu;if(z){Fe.$hidden_via_menu=Ue,Ue=!Ue;let Ke=null;this._toplevel.traverse(ft=>{ft.geo_object===Fe&&(Ke=ft)}),Ke?(Ke.visible=Ue,this.render3D()):Ue&&this.drawExtras(Fe,"",!1).then(()=>{this.updateClipping(!0),this.render3D()})}return Ue}drawExtras(N,E,z){var Ae=this;return(0,ze.Z)(function*(){if(!N?._typename||!z&&N.$hidden_via_menu)return!1;let Be=!1;void 0===z&&(z=!0,Be=!0);let Fe=!1;if(N._typename===M.clTList||N._typename===M.clTObjArray){if(!N.arr)return!1;let Ue=[];for(let Ke=0;Ke")+`/[${Ke}]`),Ue.push(Ae.drawExtras(N.arr[Ke],vt,z))}Fe=Promise.all(Ue).then(Ke=>Ke.indexOf(!0)>=0)}else"Mesh"===N._typename?(Ae.addToExtrasContainer(N),Fe=Promise.resolve(!0)):"TGeoTrack"===N._typename?(!z||Ae.addExtra(N,E))&&(Fe=Ae.drawGeoTrack(N,E)):N._typename===M.clTPolyLine3D?(!z||Ae.addExtra(N,E))&&(Fe=Ae.drawPolyLine(N,E)):N._typename===Lt||"ROOT::Experimental::REveTrack"===N._typename?(!z||Ae.addExtra(N,E))&&(Fe=Ae.drawEveTrack(N,E)):N._typename===it||"ROOT::Experimental::REvePointSet"===N._typename||N._typename===M.clTPolyMarker3D?(!z||Ae.addExtra(N,E))&&(Fe=Ae.drawHit(N,E)):(N._typename===mt||N._typename===cn)&&(!z||Ae.addExtra(N,E))&&(Fe=Ae.drawExtraShape(N,E));return(0,M.getPromise)(Fe).then(Ue=>Ue&&Be?(Ae.updateClipping(!0),Ae.render3D(100)):Ue)})()}getExtrasContainer(N,E){if(!this._toplevel)return null;E||(E="tracks");let z=null,Ae=[];for(let Be=0;Be/Tracks")&&(gn.main_track=!0),this.addToExtrasContainer(gn),!0}drawPolyLine(N,E){if(!N)return!1;let z=M.browser.isWin?1:N.fLineWidth||1,Ae=(0,$e.Lq)(N.fLineColor)||"#ff00ff",Be=N.fN,Fe=N.fP,Ue=new Float32Array(6*(Be-1)),Ke=0,ft=this.ctrl.projectPos,vt="x"===this.ctrl.project,Vt="y"===this.ctrl.project,hn="z"===this.ctrl.project;for(let An=0;An(hn.defaultOrder=hn.renderOrder=1e6,hn.highlightScale=2,hn.geo_name=E,hn.geo_object=N,z.addToExtrasContainer(hn),!0))})()}drawExtraShape(N,E){let z=au(N);return!!z&&(z.geo_name=E,z.geo_object=N,this.addToExtrasContainer(z),!0)}findNodeWithVolume(N,E,z,Ae,Be){let Fe=!1,Ue=null;if(z)Ae&&(Ae+="/"),Ae+=z.fName;else{if(!(z=this.getGeometry())&&0!==Mn(z))return null;Ae=this.geo_manager?z.fName:"",Fe=!0,Be=[]}if(!z.fVolume||z.fVolume._searched)return null;if(N.test(z.fVolume.fName)&&(Ue=E({node:z,item:Ae}),Ue))return Ue;if(z.fVolume._searched=!0,Be.push(z.fVolume),z.fVolume.fNodes)for(let Ke=0,ft=z.fVolume.fNodes.arr.length;Ke{let Fe=new RegExp("^"+Be+"$"),Ue=E.findNodeWithVolume(Fe,Ke=>Ke);return Ue||console.log(`Did not found ${Be} volume`),{found:Ue,fVolume:Ue?.node?.fVolume,InvisibleAll(Ke){Ct(this.fVolume,Ke)},Draw(){!this.found||!this.fVolume||(z.obj=this.found.node,z.prefix=this.found.item,console.log(`Select volume for drawing ${this.fVolume.fName} ${z.prefix}`))},SetTransparency(Ke){this.fVolume?.fMedium?.fMaterial&&(this.fVolume.fMedium.fMaterial.fFillStyle=3e3+Ke)},SetLineColor(Ke){this.fVolume&&(this.fVolume.fLineColor=Ke)}}},DefaultColors:()=>{E.ctrl.dflt_colors=!0},SetMaxVisNodes:Be=>{E.ctrl.maxnodes||(E.ctrl.maxnodes=pasrseInt(Be)||0)},SetVisLevel:Be=>{E.ctrl.vislevel||(E.ctrl.vislevel=parseInt(Be)||0)}};return(0,_e.Ae)("Loading macro "+N),(0,M.httpRequest)(N,"text").then(Be=>{let Fe=Be.split("\n"),Ue=0;for(;UeGetVolume",".GetVolume"),Ke=Ke.replace("->InvisibleAll",".InvisibleAll"),Ke=Ke.replace("->SetMaxVisNodes",".SetMaxVisNodes"),Ke=Ke.replace("->DefaultColors",".DefaultColors"),Ke=Ke.replace("->Draw",".Draw"),Ke=Ke.replace("->SetTransparency",".SetTransparency"),Ke=Ke.replace("->SetLineColor",".SetLineColor"),Ke=Ke.replace("->SetVisLevel",".SetVisLevel"),Ke.indexOf("->")>=0)))try{new Function("gGeoManager",Ke)(Ae)}catch{console.error(`Problem by processing ${Ke}`)}}return z}).catch(()=>(console.error(`Fail to load ${N}`),z))})()}assignClones(N){this._clones_owner=!0,this._clones=N}extractRawShapes(N,E){let z=null,Ae=0;E&&(z=N.numnodes>1e6?{length:N.numnodes}:new Array(N.numnodes)),N.nodes.forEach(Fe=>{Fe=pe.formatServerElement(Fe),z?z[Fe.id]=Fe:this._clones.updateNode(Fe)}),E&&(this._clones_owner=!0,this._clones=new pe(null,z),this._clones.name_prefix=this._clones.getNodeName(0),this._clones.maxdepth=20);let Be=0;N.cfg&&(Be=N.cfg.nsegm),Be&&(Ae=_("GradPerSegm"),_("GradPerSegm",360/Math.max(Be,6)));for(let Fe=0;Fe(Be.fillatt?.color&&(z.ctrl.background=Be.fillatt.color),Ke=z.getFramePainter(),Ue=(0,De.oc)(),(0,De.Sh)(Ke),Ke.mode3d=!0,Fe=Ke.getSizeFor3d(void 0,Ue),z._fit_main_area=-1===Fe.can3d,z.createScene(Fe.width,Fe.height).then(ft=>Ke.add3dCanvas(Fe,ft,Ue===M.constants.Render3D.WebGL))))}else{z.ctrl.use_worker>0&&z.startWorker(),(0,De.Sh)(z);let Fe=z.getSizeFor3d(void 0,(0,De.oc)(z.options.Render3D));z._fit_main_area=-1===Fe.can3d,Ae=z.createScene(Fe.width,Fe.height).then(Ue=>z.add3dCanvas(Fe,Ue,z._webgl))}}return Ae.then(()=>(z._first_drawing&&(z.ctrl.maxlimit=(z._webgl?2e5:1e5)*z.ctrl.more),z.setAsMainPainter(),z.createToolbar(),z._clones?new Promise(Be=>{z._resolveFunc=Be,z.showDrawInfo("Drawing geometry"),z.startDrawGeometry(!0)}):z.completeDraw()))})()}showDrawInfo(N){if((0,M.isBatchMode)()||!this._first_drawing||!this._start_drawing_time)return;let E=this._renderer.domElement.parentNode,z=E.querySelector(".geo_info");if(N){let Ae=.001*((new Date).getTime()-this._start_drawing_time);z||(z=document.createElement("p"),z.setAttribute("class","geo_info"),z.setAttribute("style","position: absolute; text-align: center; vertical-align: middle; top: 45%; left: 40%; color: red; font-size: 150%;"),E.append(z)),z.innerHTML=`${N}, ${Ae.toFixed(1)}s`}else z.remove()}continueDraw(){if(this.isStage(0))return;let N=(new Date).getTime(),E=this._first_drawing?1e3:200,z=N;for(;;){let Be=this.nextDrawAction();if(!Be)break;if(z=(new Date).getTime(),z-this._startm>1e5){this.changeStage(0,"Abort build after 100s");break}if(!(!0===Be&&z-NE||1===Be||2===Be))return(0,_e.Ae)(this.drawing_log),this.showDrawInfo(this.drawing_log),this._first_drawing&&this._webgl&&this._num_meshes-this._last_render_meshes>100&&z-this._last_render_tm>2.5*E&&(this.adjustCameraPosition(),this.render3D(-1),this._last_render_meshes=this.ctrl.info.num_meshes),void(2!==Be&&setTimeout(()=>this.continueDraw(),1===Be?100:1))}let Ae=z-this._startm;if((this._first_drawing||this._full_redrawing)&&console.log(`Create tm = ${Ae} meshes ${this.ctrl.info.num_meshes} faces ${this.ctrl.info.num_faces}`),Ae>300)return(0,_e.Ae)("Rendering geometry"),this.showDrawInfo("Rendering"),setTimeout(()=>this.completeDraw(!0),10);this.completeDraw(!0)}testCameraPosition(N){this._camera.updateMatrixWorld();let E=this._camera.position.clone();!N&&this._last_camera_position&&this._last_camera_position.distanceTo(E)<1e-4*(this._overall_size||1e3)||(this._last_camera_position=E,this.ctrl.project||fn(this._toplevel,E,this.ctrl.depthMethod,this._clones))}render3D(N,E){if(!this._renderer)return this.did_cleanup?console.warn("try to render after cleanup"):console.warn("renderer object not exists - check code"),this;let z=void 0!==N&&N>0;if(void 0===N&&(N=5),N>0&&this._webgl)return(0,M.isBatchMode)()&&(N=1),z?new Promise(Fe=>{this._render_resolveFuncs||(this._render_resolveFuncs=[]),this._render_resolveFuncs.push(Fe),this.render_tmout||(this.render_tmout=setTimeout(()=>this.render3D(0,E),N))}):(this.render_tmout||(this.render_tmout=setTimeout(()=>this.render3D(0,E),N)),this);this.render_tmout&&(clearTimeout(this.render_tmout),delete this.render_tmout),(0,De.v2)(this._renderer);let Ae=new Date;this.testCameraPosition(-1===N),this._webgl&&this._effectComposer&&this._effectComposer.passes.length>0?this._effectComposer.render():this._webgl&&this._bloomComposer&&this._bloomComposer.passes.length>0?(this._renderer.clear(),this._camera.layers.set(1),this._bloomComposer.render(),this._renderer.clearDepth(),this._camera.layers.set(0),this._renderer.render(this._scene,this._camera)):this._renderer.render(this._scene,this._camera);let Be=new Date;this.last_render_tm=Be.getTime(),0===this.first_render_tm&&E&&(this.first_render_tm=Be.getTime()-Ae.getTime(),console.log(`three.js r${L.UZH}, first render tm = ${this.first_render_tm}`)),(0,De.wu)(this._renderer),this._render_resolveFuncs&&(this._render_resolveFuncs.forEach(Fe=>Fe(this)),delete this._render_resolveFuncs)}startWorker(){this._worker||(this._worker_ready=!1,this._worker_jobs=0,this._worker=new Worker(M.source_dir+"scripts/geoworker.js"),this._worker.onmessage=N=>{if((0,M.isObject)(N.data)){if("log"in N.data)return console.log(`geo: ${N.data.log}`);if("progress"in N.data)return(0,_e.Ae)(N.data.progress);N.data.tm3=(new Date).getTime(),"init"in N.data?(this._worker_ready=!0,console.log("Worker ready: "+(N.data.tm3-N.data.tm0))):this.processWorkerReply(N.data)}},this._worker.postMessage({init:!0,browser:M.browser,tm0:(new Date).getTime(),vislevel:this._clones.getVisLevel(),maxvisnodes:this._clones.getMaxVisNodes(),clones:this._clones.nodes,sortmap:this._clones.sortmap}))}canSubmitToWorker(N){return!!this._worker&&this._worker_ready&&(0==this._worker_jobs||N)}submitToWorker(N){if(!this._worker)return!1;this._worker_jobs++,N.tm0=(new Date).getTime(),this._worker.postMessage(N)}processWorkerReply(N){if(this._worker_jobs--,"collect"in N)return this._new_draw_nodes=N.new_nodes,this._draw_all_nodes=N.complete,this.changeStage(3),this.continueDraw();if("shapes"in N){for(let E=0;E=0||(Be[hn]=(E.min[gn]+E.max[gn])/2)}this.ctrl.ortho_camera&&(Vt=2,Ue[0]=Ue[2],Ke[0]=Ke[2],vt[0]=vt[2],ft=!0);for(let hn=0;hnE.max[An]-E.min[An]<2?es.toFixed(3):Math.abs(es)>1e5?es.toExponential(3):Math.round(es).toString();let ti=li(E.max[An]);switch(gn[0]=E.min.x,gn[1]=E.min.y,gn[2]=E.min.z,gn[3]=E.min.x,gn[4]=E.min.y,gn[5]=E.min.z,hn){case 0:gn[3]=E.max.x,vt[0]&&!ft?ti=Ue[0]+" "+ti:ti+=" "+Ue[0];break;case 1:gn[4]=E.max.y,vt[1]?ti+=" "+Ue[1]:ti=Ue[1]+" "+ti;break;case 2:gn[5]=E.max.z,ti+=" "+Ue[2]}if(2==this.ctrl._axis)for(let es=0;es<6;++es)es%3!==hn&&(gn[es]=Be[es%3]);let mi=new L.nls({color:mn}),Xn=(0,De.Qy)(gn,mi);Xn._axis_draw=!0,z.add(Xn);let Ii=new L.vBJ({color:mn,vertexColors:!1});if(0===Be[hn]&&Be[hn]>=E.min[An]&&Be[hn]<=E.max[An]&&(2!=this.ctrl._axis||0===hn)){let es=ft?new L.zf8(.25*Ae):new L.xo$(.25*Ae);Xn=new L.Kj0(es,Ii),Xn.translateX(0===hn?Be[0]:gn[0]),Xn.translateY(1===hn?Be[1]:gn[1]),Xn.translateZ(2===hn?Be[2]:gn[2]),z.add(Xn)}let Ri=new L.MP$(ti,{font:De.sU,size:Ae,height:0,curveSegments:5});Xn=new L.Kj0(Ri,Ii),Xn._axis_draw=!0;let Hi=(new L.ZzF).setFromObject(Xn);if(Xn.translateX(gn[3]),Xn.translateY(gn[4]),Xn.translateZ(gn[5]),vt[hn])switch(hn){case 0:ft?Xn.translateX(.5*Ae):(Xn.rotateY(Math.PI),Xn.translateX(-Hi.max.x-.5*Ae)),Xn.translateY(-Hi.max.y/2);break;case 1:ft?Xn.rotateZ(Math.PI/2):(Xn.rotateX(-Math.PI/2),Xn.rotateY(-Math.PI/2)),Xn.translateX(.5*Ae),Xn.translateY(-Hi.max.y/2);break;case 2:Xn.rotateY(-Math.PI/2),Xn.translateX(.5*Ae),Xn.translateY(-Hi.max.y/2)}else switch(hn){case 0:Xn.rotateX(Math.PI/2),Xn.translateY(-Hi.max.y/2),Xn.translateX(.5*Ae);break;case 1:Xn.rotateX(Math.PI/2),Xn.rotateY(-Math.PI/2),Xn.translateX(-Hi.max.x-.5*Ae),Xn.translateY(-Hi.max.y/2);break;case 2:Xn.rotateX(Math.PI/2),Xn.rotateZ(Math.PI/2),Xn.translateX(.5*Ae),Xn.translateY(-Hi.max.y/2)}if(z.add(Xn),Ri=new L.MP$(li(E.min[An]),{font:De.sU,size:Ae,height:0,curveSegments:5}),Xn=new L.Kj0(Ri,Ii),Xn._axis_draw=!0,Hi=(new L.ZzF).setFromObject(Xn),Xn.translateX(gn[0]),Xn.translateY(gn[1]),Xn.translateZ(gn[2]),vt[hn])switch(hn){case 0:ft?Xn.translateX(-Hi.max.x-.5*Ae):(Xn.rotateY(Math.PI),Xn.translateX(.5*Ae)),Xn.translateY(-Hi.max.y/2);break;case 1:ft?Xn.rotateZ(Math.PI/2):(Xn.rotateX(-Math.PI/2),Xn.rotateY(-Math.PI/2)),Xn.translateY(-Hi.max.y/2),Xn.translateX(-Hi.max.x-.5*Ae);break;case 2:Xn.rotateY(-Math.PI/2),Xn.translateX(-Hi.max.x-.5*Ae),Xn.translateY(-Hi.max.y/2)}else switch(hn){case 0:Xn.rotateX(Math.PI/2),Xn.translateX(-Hi.max.x-.5*Ae),Xn.translateY(-Hi.max.y/2);break;case 1:Xn.rotateX(Math.PI/2),Xn.rotateY(-Math.PI/2),Xn.translateY(-Hi.max.y/2),Xn.translateX(.5*Ae);break;case 2:Xn.rotateX(Math.PI/2),Xn.rotateZ(Math.PI/2),Xn.translateX(-Hi.max.x-.5*Ae),Xn.translateY(-Hi.max.y/2)}z.add(Xn)}return this.changedDepthMethod(N?"norender":void 0)}setAxesDraw(N){return this.ctrl._axis="toggle"===N?this.ctrl._axis?0:1:"number"==typeof N?N:N?1:0,this.drawSimpleAxis()}setAutoRotate(N){this.ctrl.project||(void 0!==N&&(this.ctrl.rotate=N),this.autorotate(2.5))}toggleWireFrame(){this.ctrl.wireframe=!this.ctrl.wireframe,this.changedWireFrame()}setWireFrame(N){this.ctrl.wireframe=!!N,this.changedWireFrame()}setShowTop(N){this.ctrl.showtop=!!N,this.redrawObject("same")}changedClipping(N){let E=this.ctrl.clip;void 0!==N&&N>=0&&!E[N].enabled||((E[0].enabled||E[1].enabled||E[2].enabled)&&(this.ctrl.ssao.enabled=!1,this.removeSSAO()),this.updateClipping(!1,!0))}changedDepthTest(){if(!this._toplevel)return;let N=this.ctrl.depthTest;this._toplevel.traverse(E=>{E instanceof L.Kj0&&(E.material.depthTest=N)}),this.render3D(0)}changedDepthMethod(N){if(delete this._last_camera_position,"norender"!==N)return this.render3D()}changedHighlight(){this.ctrl.highlight||this.highlightMesh(null)}updateClipping(N,E){if(this._renderer?.jsroot_render3d===M.constants.Render3D.SVG)return;this._clipPlanes||(this._clipPlanes=[new L.JOQ(new L.Pa4(1,0,0),0),new L.JOQ(new L.Pa4(0,this.ctrl._yup?-1:1,0),0),new L.JOQ(new L.Pa4(0,0,this.ctrl._yup?1:-1),0)]);let z=this.ctrl.clip,Ae=[],Be=!1,Fe=[-1*z[0].value,z[1].value,(this.ctrl._yup?-1:1)*z[2].value],Ue=this.ctrl.clipIntersect?16:0;for(let Vt=0;Vt<3;++Vt)z[Vt].enabled&&(Ue+=2<{!Vt._axis_draw&&Vt.hasOwnProperty("material")&&void 0!==Vt.material?.clippingPlanes&&(Vt.material.clippingPlanes!==Ae&&(Vt.material.clipIntersection=ft,Vt.material.clippingPlanes=Ae,Vt.material.needsUpdate=!0),void 0!==Vt.material.emissive&&Vt.material.side!=vt&&(Vt.material.side=vt,Vt.material.needsUpdate=!0))}),this.ctrl.bothSides=Ke,N||this.render3D(0),Be}setCompleteHandler(N){this._complete_handler=N}completeDraw(N){var E=this;return(0,ze.Z)(function*(){let z=!1,Ae=!1,Be=!0;if(!E.ctrl)return console.warn("ctrl object does not exist in completeDraw - something went wrong"),E;let Fe=Promise.resolve(!0);return E._clones?(E._first_drawing||E._full_redrawing)&&E.ctrl.tracks&&E.geo_manager&&(Fe=E.drawExtras(E.geo_manager.fTracks,"/Tracks")):(Be=!1,E.getExtrasContainer("delete"),Fe=E.drawExtras((E._main_painter?E._main_painter._extraObjects:null)||E._extraObjects,"",!1)),Fe.then(()=>{if(E._full_redrawing&&(E.adjustCameraPosition(!0),E._full_redrawing=!1,Ae=!0,E.changedDepthMethod("norender")),E._first_drawing&&(E.adjustCameraPosition(!0),E.showDrawInfo(),E._first_drawing=!1,z=!0,Ae=!0),0!==E.ctrl.transparency&&E.changedGlobalTransparency(E.ctrl.transparency,!0),z&&E.completeScene(),Ae&&(E.ctrl.trans_radial||E.ctrl.trans_z)&&E.changedTransformation("norender"),Ae&&E.ctrl._axis&&E.drawSimpleAxis(!0),E._scene.overrideMaterial=null,void 0!==E._provided_more_nodes&&(E.appendMoreNodes(E._provided_more_nodes,!0),delete E._provided_more_nodes),Be)return E.getExtrasContainer("delete"),E.drawExtras((E._main_painter?E._main_painter._extraObjects:null)||E._extraObjects,"",!1)}).then(()=>(E.updateClipping(!0),E.render3D(0,!0),N&&(0,_e.Ae)(),E.addOrbitControls(),E.addTransformControl(),z&&(!1===E.ctrl.highlight&&(E.ctrl.highlight=E.first_render_tm<1e3),!1===E.ctrl.highlight_scene&&(E.ctrl.highlight_scene=E.ctrl.highlight),E._webgl&&E.ctrl.rotate&&!E.ctrl.project&&E.autorotate(2.5),E._webgl&&E.ctrl.show_controls&&!(0,M.isBatchMode)()&&E.showControlOptions(!0)),E.setAsMainPainter(),(0,M.isFunc)(E._resolveFunc)&&(E._resolveFunc(E),delete E._resolveFunc),(0,M.isFunc)(E._complete_handler)&&E._complete_handler(E),E._draw_nodes_again?E.startDrawGeometry():E._drawing_ready=!0,E))})()}isDrawingReady(){return this._drawing_ready||!1}removeDrawnNode(N){if(!this._draw_nodes)return;let E=[];for(let z=0;z=0&&this._main_painter._slave_painters.splice(Ae,1)}for(let Ae=0;AeE(this)),delete this._render_resolveFuncs),(0,De.cM)(this._renderer),delete this._scene,this._scene_width=0,this._scene_height=0,this._renderer=null,this._toplevel=null,delete this._full_geom,delete this._camera,delete this._camera0pos,delete this._lookat,delete this._selected_mesh,this._clones&&this._clones_owner&&this._clones.cleanup(this._draw_nodes,this._build_shapes),delete this._clones,delete this._clones_owner,delete this._draw_nodes,delete this._drawing_ready,delete this._build_shapes,delete this._new_draw_nodes,delete this._new_append_nodes,delete this._last_camera_position,this.first_render_tm=0,this.last_render_tm=0,this.changeStage(0,"cleanup"),delete this.drawing_log,delete this._datgui,delete this._controls,delete this._context_menu,delete this._tcontrols,delete this._toolbar,delete this._worker}helpText(N){(0,_e.Ae)(N)}performResize(N,E){return!(this._scene_width===N&&this._scene_height===E||N<10||E<10||(this._scene_width=N,this._scene_height=E,this._camera&&this._renderer&&("PerspectiveCamera"==this._camera.type&&(this._camera.aspect=this._scene_width/this._scene_height),this._camera.updateProjectionMatrix(),this._renderer.setSize(this._scene_width,this._scene_height,!this._fit_main_area),this._effectComposer&&this._effectComposer.setSize(this._scene_width,this._scene_height),this._bloomComposer&&this._bloomComposer.setSize(this._scene_width,this._scene_height),this.isStage(0)&&this.render3D()),0))}checkResize(N){let E=this.getCanvPainter();if(E&&!E.checkCanvasResize(N))return!1;let z=this.getSizeFor3d();return this.performResize(z.width,z.height)}toggleEnlarge(){this.enlargeMain("toggle")&&this.checkResize()}ownedByTransformControls(N){let E=N.parent;for(;E&&!(E instanceof L.Ys8);)E=E.parent;return E&&E instanceof L.Ys8}accessObjectWireFrame(N,E){if(N.hasOwnProperty("material")&&!(N instanceof L.VLJ)&&!this.ownedByTransformControls(N))return void 0!==E&&N.stack&&(N.material.wireframe=E),N.material.wireframe}changedWireFrame(){if(!this._scene)return;let N=this.ctrl.wireframe;this._scene.traverse(E=>this.accessObjectWireFrame(E,N)),this.render3D()}updateObject(N){return!("same"!==N&&(!N?._typename||N!==this.getObject()&&(this.geo_manager&&N._typename==lt?(this.geo_manager=N,this.assignObject({_typename:M.clTGeoNode,fVolume:N.fMasterVolume,fName:N.fMasterVolume.fName,$geoh:N.fMasterVolume.$geoh,_proxy:!0}),0):!this.matchObjectType(N._typename)||(this.assignObject(N),0))))}clearDrawings(){this._clones&&this._clones_owner&&this._clones.cleanup(this._draw_nodes,this._build_shapes),delete this._clones,delete this._clones_owner,delete this._draw_nodes,delete this._drawing_ready,delete this._build_shapes,delete this._extraObjects,delete this._clipCfg,(0,De.mF)(this._toplevel,!0),this._full_redrawing=!0}redraw(){if(!this._on_pad)return;let N=this.getFramePainter();if(!N)return;let E=N.getSizeFor3d(N.access3dKind());return N.apply3dSize(E),this.performResize(E.width,E.height)}redrawObject(N){if(!this.updateObject(N))return!1;this.clearDrawings();let E=this.getGeometry(),z="";return this.geo_manager&&(z=E.fName),this.prepareObjectDraw(E,z)}static draw(N,E,z){return(0,ze.Z)(function*(){if(!E)return null;let Ae=null,Be=null,Fe="",Ue=!1;if("fShapeBits"in E&&"fShapeId"in E?(Ae=E,E=null):E._typename===Xe||E._typename===M.clTGeoVolume?Ae=E.fShape:E._typename===mt||E._typename===cn?(Ae=E.fShape,Ue=!0):E._typename===lt?Ae=E.fMasterVolume.fShape:E._typename===Rt?(Be=E.fMarker,Fe="/Marker",E=function It(Ce){let N=(0,M.create)(M.clTGeoVolume);Ht(N,T.kVisDaughters,!0),N.$geoh=!0,N.fName="";let E=(0,M.create)(M.clTGeoNodeMatrix);E.fName=Ce.fVolume1.fName||"Overlap1",E.fMatrix=Ce.fMatrix1,E.fVolume=Ce.fVolume1;let z=(0,M.create)(M.clTGeoNodeMatrix);return z.fName=Ce.fVolume2.fName||"Overlap2",z.fMatrix=Ce.fMatrix2,z.fVolume=Ce.fVolume2,N.fNodes=(0,M.create)(M.clTList),N.fNodes.Add(E),N.fNodes.Add(z),N}(E),z||(z="wire")):"fVolume"in E?E.fVolume&&(Ae=E.fVolume.fShape):E=null,(0,M.isStr)(z)&&0==z.indexOf("comp")&&Ae&&Ae._typename==ct&&Ae.fNode){let ft=1;"x"==(z=z.slice(4))[0]&&(ft=999,z=z.slice(1)+"_vislvl999"),E=En(Ae,ft)}if(!E&&Ae&&(E=Object.assign((0,M.create)(M.clTNamed),{_typename:mt,fTrans:null,fShape:Ae,fRGBA:[0,1,0,1],fElements:null,fRnrSelf:!0})),!E)return null;let Ke=Xa(N,E,z);return Ke.ctrl.is_main&&!E.$geo_painter&&(E.$geo_painter=Ke),!Ke.ctrl.is_main&&Ke.ctrl.project&&E.$geo_painter&&(Ke._main_painter=E.$geo_painter,Ke._main_painter._slave_painters.push(Ke)),(Ue&&!Ke.ctrl.vislevel||Ke.ctrl.vislevel<9)&&(Ke.ctrl.vislevel=9),Be&&(Ke._splitColors=!0,Ke.addExtra(Be,Fe)),Ke.loadMacro(Ke.ctrl.script_name).then(ft=>Ke.prepareObjectDraw(ft.obj,ft.prefix))})()}}let nl=!1;function Uf(){function Ce(N,E){return`.jsroot .img_${N} { display: inline-block; height: 16px; width: 16px; background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQ${E}'); }`}!nl&&(0,M.isFunc)(M.internals.addDrawFunc)&&(nl=!0,M.internals.addDrawFunc({name:it,icon_get:ed,icon_click:So}),M.internals.addDrawFunc({name:Lt,icon_get:ed,icon_click:So})),(0,_e.DW)(`\n${Ce("geoarb8","CAAAAAA6mKC9AAAABGdBTUEAALGPC/xhBQAAAAFzUkdCAK7OHOkAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAAJ0Uk5TAAB2k804AAAAAmJLR0QA/4ePzL8AAAAJcEhZcwAAAEgAAABIAEbJaz4AAAB1SURBVBjTdY6rEYAwEETTy6lzK8/Fo+Jj18dTAjUgaQGfGiggtRDE8RtY93Zu514If2nzk2ux9c5TZkwXbiWTUavzws69oBfpYBrMT4r0Jhsw+QfRgQSw+CaKRsKsnV+SaF8MN49RBSgPUxO85PMl5n4tfGUH2gghs2uPAeQAAAAldEVYdGRhdGU6Y3JlYXRlADIwMTUtMTItMDJUMTQ6MjY6MjkrMDE6MDDARtd2AAAAJXRFWHRkYXRlOm1vZGlmeQAyMDE0LTExLTEyVDA4OjM5OjE5KzAxOjAwO3ydwwAAAABJRU5ErkJggg==")}\n${Ce("geocombi","CAQAAAC1+jfqAAAABGdBTUEAALGPC/xhBQAAAAFzUkdCAK7OHOkAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAAJiS0dEAP+Hj8y/AAAACXBIWXMAAABIAAAASABGyWs+AAAAlUlEQVQoz5VQMQ4CMQyzEUNnBqT7Bo+4nZUH8gj+welWJsQDkHoCEYakTXMHSFiq2jqu4xRAEl2A7w4myWzpzCSZRZ658ldKu1hPnFsequBIc/hcLli3l52MAIANtpWrDsv8waGTW6BPuFtsdZArXyFuj33TQpazGEQF38phipnLgItxRcAoOeNpzv4PTXnC42fb//AGI5YqfQAU8dkAAAAldEVYdGRhdGU6Y3JlYXRlADIwMTUtMTItMDJUMTQ6MjY6MjkrMDE6MDDARtd2AAAAJXRFWHRkYXRlOm1vZGlmeQAyMDE0LTExLTEyVDA4OjM5OjE5KzAxOjAwO3ydwwAAAABJRU5ErkJggg==")}\n${Ce("geocone","CAAAAAA6mKC9AAAABGdBTUEAALGPC/xhBQAAAAFzUkdCAK7OHOkAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAAJ0Uk5TAAB2k804AAAAAmJLR0QA/4ePzL8AAAAJcEhZcwAAAEgAAABIAEbJaz4AAACRSURBVBjTdY+xDcNACEVvEm/ggo6Olva37IB0C3iEzJABvAHFTXBDeJRwthMnUvylk44vPjxK+afeokX0flQhJO7L4pafSOMxzaxIKc/Tc7SIjNLyieyZSjBzc4DqMZI0HTMonWPBNlogOLeuewbg9c0hOiIqH7DKmTCuFykjHe4XOzQ58XVMGxzt575tKzd6AX9yMkcWyPlsAAAAJXRFWHRkYXRlOmNyZWF0ZQAyMDE1LTEyLTAyVDE0OjI2OjI5KzAxOjAwwEbXdgAAACV0RVh0ZGF0ZTptb2RpZnkAMjAxNC0xMS0xMlQwODozOToxOSswMTowMDt8ncMAAAAASUVORK5CYII=")}\n${Ce("geogtra","CAAAAAA6mKC9AAAABGdBTUEAALGPC/xhBQAAAAFzUkdCAK7OHOkAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAAJ0Uk5TAAB2k804AAAAAmJLR0QA/4ePzL8AAAAJcEhZcwAAAEgAAABIAEbJaz4AAACCSURBVBjTVc+hDQMxDAVQD1FyqCQk0MwsCwQEG3+eCW6B0FvheDboFMGepTlVitPP/Cz5y0S/mNkw8pySU9INJDDH4vM4Usm5OrQXasXtkA+tQF+zxfcDY8EVwgNeiwmA37TEccK5oLOwQtuCj7BM2Fq7iGrxVqJbSsH+GzXs+798AThwKMh3/6jDAAAAJXRFWHRkYXRlOmNyZWF0ZQAyMDE1LTEyLTAyVDE0OjI2OjI5KzAxOjAwwEbXdgAAACV0RVh0ZGF0ZTptb2RpZnkAMjAxNC0xMS0xMlQwODozOToxOSswMTowMDt8ncMAAAAASUVORK5CYII=")}\n${Ce("geomedium","BAMAAADt3eJSAAAABGdBTUEAALGPC/xhBQAAAAFzUkdCAK7OHOkAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAABVQTFRFAAAAAAAAMDAww8PDWKj/////gICAG0/C4AAAAAF0Uk5TAEDm2GYAAAABYktHRAX4b+nHAAAACXBIWXMAAABIAAAASABGyWs+AAAAXElEQVQI102MwRGAMAgEuQ6IDwvQCjQdhAl/H7ED038JHhkd3dcOLAgESFARaAqnEB3yrj6QSEym1RbbOKinN+8q2Esui1GaX7VXSi4RUbxHRbER8X6O5Pg/fLgBBzMN8HfXD3AAAAAldEVYdGRhdGU6Y3JlYXRlADIwMTUtMTItMDJUMTQ6MjY6MjkrMDE6MDDARtd2AAAAJXRFWHRkYXRlOm1vZGlmeQAyMDE0LTExLTEyVDA4OjM5OjE5KzAxOjAwO3ydwwAAAABJRU5ErkJggg==")}\n${Ce("geopara","CAAAAAA6mKC9AAAABGdBTUEAALGPC/xhBQAAAAFzUkdCAK7OHOkAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAAJ0Uk5TAAB2k804AAAAAmJLR0QA/4ePzL8AAAAJcEhZcwAAAEgAAABIAEbJaz4AAABtSURBVBjTY2DADq5MT7+CzD9kaKjp+QhJYIWqublhMbKAgpOnZxWSQJdsVJTndCSBKoWoAM/VSALpqlEBAYeQBKJAAsi2BGgCBZDdEWUYFZCOLFBlGOWJ7AyGFeaotjIccopageK3R12PGHABACTYHWd0tGw6AAAAJXRFWHRkYXRlOmNyZWF0ZQAyMDE1LTEyLTAyVDE0OjI2OjI5KzAxOjAwwEbXdgAAACV0RVh0ZGF0ZTptb2RpZnkAMjAxNC0xMS0xMlQwODozOToxOSswMTowMDt8ncMAAAAASUVORK5CYII=")}\n${Ce("georotation","CAQAAAC1+jfqAAAABGdBTUEAALGPC/xhBQAAAAFzUkdCAK7OHOkAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAAJiS0dEAP+Hj8y/AAAACXBIWXMAAABIAAAASABGyWs+AAAAiklEQVQoz2NgYGBgYGDg+A/BmIAFIvyDEbs0AwMTAwHACLPiB5QVBTdpGSOSCZjScDcgc4z+32BgYGBgEGIQw3QDLkdCTZD8/xJFeBfDVxQT/j9n/MeIrMCNIRBJwX8GRuzGM/yHKMAljeILNFOuMTyEisEUMKIqucrwB2oyIhyQpH8y/MZrLWkAAHFzIHIc0Q5yAAAAJXRFWHRkYXRlOmNyZWF0ZQAyMDE1LTEyLTAyVDE0OjI2OjI5KzAxOjAwwEbXdgAAACV0RVh0ZGF0ZTptb2RpZnkAMjAxNC0xMS0xMlQwODozOToxOSswMTowMDt8ncMAAAAASUVORK5CYII=")}\n${Ce("geotranslation","CAAAAAA6mKC9AAAABGdBTUEAALGPC/xhBQAAAAFzUkdCAK7OHOkAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAAJ0Uk5TAAB2k804AAAAAmJLR0QA/4ePzL8AAAAJcEhZcwAAAEgAAABIAEbJaz4AAABESURBVBjTY2DgYGAAYzjgAAIQgSLAgSwAAcrWUUCAJBAVhSpgBAQumALGCJPAAsriHIS0IAQ4UAU4cGphQBWwZSAOAADGJBKdZk/rHQAAACV0RVh0ZGF0ZTpjcmVhdGUAMjAxNS0xMi0wMlQxNDoyNjoyOSswMTowMMBG13YAAAAldEVYdGRhdGU6bW9kaWZ5ADIwMTQtMTEtMTJUMDg6Mzk6MTkrMDE6MDA7fJ3DAAAAAElFTkSuQmCC")}\n${Ce("geotrd2","CAAAAAA6mKC9AAAABGdBTUEAALGPC/xhBQAAAAFzUkdCAK7OHOkAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAAJ0Uk5TAAB2k804AAAAAmJLR0QA/4ePzL8AAAAJcEhZcwAAAEgAAABIAEbJaz4AAABsSURBVBjTbY+xDcAwCARZx6UraiaAmpoRvIIb75PWI2QITxIiRQKk0CCO/xcA/NZ9LRs7RkJEYg3QxczUwoGsXiMAoe8lAelqRWFNKpiNXZLAalRDd0f3TMgeMckABKsCDmu+442RddeHz9cf9jUkW8smGn8AAAAldEVYdGRhdGU6Y3JlYXRlADIwMTUtMTItMDJUMTQ6MjY6MjkrMDE6MDDARtd2AAAAJXRFWHRkYXRlOm1vZGlmeQAyMDE0LTExLTEyVDA4OjM5OjE5KzAxOjAwO3ydwwAAAABJRU5ErkJggg==")}\n${Ce("geovolume","BAMAAADt3eJSAAAABGdBTUEAALGPC/xhBQAAAAFzUkdCAK7OHOkAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAB5QTFRFAAAAMDAw///Ay8uc/7+Q/4BgmJh4gIDgAAD/////CZb2ugAAAAF0Uk5TAEDm2GYAAAABYktHRAnx2aXsAAAACXBIWXMAAABIAAAASABGyWs+AAAAR0lEQVQI12NggAEBIBAEQgYGQUYQAyIGIhgwAZMSGCgwMJuEKimFOhswsKWAGG4JDGxJIBk1EEO9o6NIDVkEpgauC24ODAAASQ8Pkj/retYAAAAldEVYdGRhdGU6Y3JlYXRlADIwMTUtMTItMDJUMTQ6MjY6MjkrMDE6MDDARtd2AAAAJXRFWHRkYXRlOm1vZGlmeQAyMDE0LTExLTEyVDA4OjM5OjE5KzAxOjAwO3ydwwAAAABJRU5ErkJggg==")}\n${Ce("geoassembly","BAMAAADt3eJSAAAABGdBTUEAALGPC/xhBQAAAAFzUkdCAK7OHOkAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAA9QTFRFAAAAMDAw/wAAAAD/////jEo0BQAAAAF0Uk5TAEDm2GYAAAABYktHRASPaNlRAAAACXBIWXMAAABIAAAASABGyWs+AAAAOklEQVQI12NggAFGRgEgEBRgEBSAMhgYGQQEgAR+oARGDIwCIAYjUL0A2DQQg9nY2ABVBKoGrgsDAADxzgNboMz8zQAAACV0RVh0ZGF0ZTpjcmVhdGUAMjAxNS0xMi0wMlQxNDoyNjoyOSswMTowMMBG13YAAAAldEVYdGRhdGU6bW9kaWZ5ADIwMTQtMTEtMTJUMDg6Mzk6MTkrMDE6MDA7fJ3DAAAAAElFTkSuQmCC")}\n${Ce("geocomposite","CAAAAAA6mKC9AAAABGdBTUEAALGPC/xhBQAAAAFzUkdCAK7OHOkAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAAJ0Uk5TAAB2k804AAAAAmJLR0QA/4ePzL8AAAAJcEhZcwAAAEgAAABIAEbJaz4AAABuSURBVBjTY2AgF2hqgQCCr+0V4O7hFmgCF7CJyKysKkmxhfGNLaw9SppqAi2gfMuY5Agrl+ZaC6iAUXRJZX6Ic0klTMA5urapPFY5NRcmYKFqWl8S5RobBRNg0PbNT3a1dDGH8RlM3LysTRjIBwAG6xrzJt11BAAAACV0RVh0ZGF0ZTpjcmVhdGUAMjAxNS0xMi0wMlQxNDoyNjoyOSswMTowMMBG13YAAAAldEVYdGRhdGU6bW9kaWZ5ADIwMTQtMTEtMTJUMDg6Mzk6MTkrMDE6MDA7fJ3DAAAAAElFTkSuQmCC")}\n${Ce("geoctub","CAAAAAA6mKC9AAAABGdBTUEAALGPC/xhBQAAAAFzUkdCAK7OHOkAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAAJ0Uk5TAAB2k804AAAAAmJLR0QA/4ePzL8AAAAJcEhZcwAAAEgAAABIAEbJaz4AAACESURBVBjTdc+xDcMwDARA7cKKHTuWX37LHaw+vQbQAJomA7j2DB7FhCMFCZB8pxPwJEv5kQcZW+3HencRBekak4aaMQIi8YJdAQ1CMeE0UBkuaLMETklQ9Alhka0JzzXWqLVBuQYPpWcVuBbZjZafNRYcDk9o/b07bvhINz+/zxu1/M0FSRcmAk/HaIcAAAAldEVYdGRhdGU6Y3JlYXRlADIwMTUtMTItMDJUMTQ6MjY6MjkrMDE6MDDARtd2AAAAJXRFWHRkYXRlOm1vZGlmeQAyMDE0LTExLTEyVDA4OjM5OjE5KzAxOjAwO3ydwwAAAABJRU5ErkJggg==")}\n${Ce("geohype","CAAAAAA6mKC9AAAABGdBTUEAALGPC/xhBQAAAAFzUkdCAK7OHOkAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAAJ0Uk5TAAB2k804AAAAAmJLR0QA/4ePzL8AAAAJcEhZcwAAAEgAAABIAEbJaz4AAACKSURBVBjTbU+rFQQhDKQSDDISEYuMREfHx6eHKMpYuf5qoIQt5bgDblfcuJk3nySEhSvceDV3c/ejT66lspopE9pXyIlkCrHMBACpu1DClekQAREi/loviCnF/NhRwJLaQ6hVhPjB8bOCsjlnNnNl0FWJVWxAqGzHONRHpu5Ml+nQ+8GzNW9n+Is3eg80Nk0iiwoAAAAldEVYdGRhdGU6Y3JlYXRlADIwMTUtMTItMDJUMTQ6MjY6MjkrMDE6MDDARtd2AAAAJXRFWHRkYXRlOm1vZGlmeQAyMDE0LTExLTEyVDA4OjM5OjE5KzAxOjAwO3ydwwAAAABJRU5ErkJggg==")}\n${Ce("geomixture","BAMAAADt3eJSAAAABGdBTUEAALGPC/xhBQAAAAFzUkdCAK7OHOkAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAACFQTFRFAAAAAAAAKysrVVUA//8B//8AgICAqqpV398gv79A////VYJtlwAAAAF0Uk5TAEDm2GYAAAABYktHRApo0PRWAAAACXBIWXMAAABIAAAASABGyWs+AAAAXklEQVQI12NgwASCQsJCgoZAhoADq1tKIJAhEpDGxpYIZKgxsLElgBhibAkOCY4gKTaGkPRGIEPUIYEBrEaAIY0tDawmgYWNgREkkjCVjRWkWCUhLY0FJCIIBljsBgCZTAykgaRiRwAAACV0RVh0ZGF0ZTpjcmVhdGUAMjAxNS0xMi0wMlQxNDoyNjoyOSswMTowMMBG13YAAAAldEVYdGRhdGU6bW9kaWZ5ADIwMTQtMTEtMTJUMDg6Mzk6MTkrMDE6MDA7fJ3DAAAAAElFTkSuQmCC")}\n${Ce("geopcon","CAAAAAA6mKC9AAAABGdBTUEAALGPC/xhBQAAAAFzUkdCAK7OHOkAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAAJ0Uk5TAAB2k804AAAAAmJLR0QA/4ePzL8AAAAJcEhZcwAAAEgAAABIAEbJaz4AAACJSURBVBjTdc+hGcQwCIZhhjl/rkgWiECj8XgGyAbZoD5LdIRMkEnKkV575n75Pp8AgLU54dmh6mauelyAL2Qzxfe2sklioq6FacFAcRFXYhwJHdU5rDD2hEYB/CmoJVRMiIJqgtENuoqA8ltAlYAqRH4d1tGkwzTqN2gA7Nv+fUwkgZ/3mg34txM+szzATJS1HQAAACV0RVh0ZGF0ZTpjcmVhdGUAMjAxNS0xMi0wMlQxNDoyNjoyOSswMTowMMBG13YAAAAldEVYdGRhdGU6bW9kaWZ5ADIwMTQtMTEtMTJUMDg6Mzk6MTkrMDE6MDA7fJ3DAAAAAElFTkSuQmCC")}\n${Ce("geosphere","CAAAAAA6mKC9AAAABGdBTUEAALGPC/xhBQAAAAFzUkdCAK7OHOkAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAAJ0Uk5TAAB2k804AAAAAmJLR0QA/4ePzL8AAAAJcEhZcwAAAEgAAABIAEbJaz4AAACFSURBVBjTdY+xEcQwCAQp5QNFjpQ5vZACFBFTADFFfKYCXINzlUAJruXll2ekxDAEt9zcANFbXb2mqm56dxsymAH0yccAJaeNi0h5QGyfxGJmivMPjj0nmLsbRmyFCss3rlbpcUjfS8wLUNRcJyCF6uqg2IvYCnoKC7f1kSbA6riTz7evfwj3Ml+H3KBqAAAAJXRFWHRkYXRlOmNyZWF0ZQAyMDE1LTEyLTAyVDE0OjI2OjI5KzAxOjAwwEbXdgAAACV0RVh0ZGF0ZTptb2RpZnkAMjAxNC0xMS0xMlQwODozOToxOSswMTowMDt8ncMAAAAASUVORK5CYII=")}\n${Ce("geotrap","CAAAAAA6mKC9AAAABGdBTUEAALGPC/xhBQAAAAFzUkdCAK7OHOkAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAAJ0Uk5TAAB2k804AAAAAmJLR0QA/4ePzL8AAAAJcEhZcwAAAEgAAABIAEbJaz4AAAB5SURBVBjTbY+hFYAwDETZB1OJi4yNPp0JqjtAZ2AELL5DdABmIS2PtLxHXH7u7l2W5W+uHMHpGiCHLYR1yw4SCZMIXBOJWVSjK7QDDAu4g8OBmAKK4sAEDdR3rw8YmcUcrEijKKhl7lN1IQPn9ExlgU6/WEyc75+5AYK0KY5oHBDfAAAAJXRFWHRkYXRlOmNyZWF0ZQAyMDE1LTEyLTAyVDE0OjI2OjI5KzAxOjAwwEbXdgAAACV0RVh0ZGF0ZTptb2RpZnkAMjAxNC0xMS0xMlQwODozOToxOSswMTowMDt8ncMAAAAASUVORK5CYII=")}\n${Ce("geotubeseg","CAAAAAA6mKC9AAAABGdBTUEAALGPC/xhBQAAAAFzUkdCAK7OHOkAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAAJ0Uk5TAAB2k804AAAAAmJLR0QA/4ePzL8AAAAJcEhZcwAAAEgAAABIAEbJaz4AAACBSURBVBjTdc+hEcQwDARA12P6QFBQ9LDwcXEVkA7SQTr4BlJBakgpsWdsh/wfux3NSCrlV86Mlrxmz1pBWq3bAHwETohxABVmDZADQp1BE+wDNnGywzHgmHDOreJNTDH3Xn3CVX0dpu2MHcIFBkYp/gKsQ8SCQ72V+36/+2aWf3kAQfgshnpXF0wAAAAldEVYdGRhdGU6Y3JlYXRlADIwMTUtMTItMDJUMTQ6MjY6MjkrMDE6MDDARtd2AAAAJXRFWHRkYXRlOm1vZGlmeQAyMDE0LTExLTEyVDA4OjM5OjE5KzAxOjAwO3ydwwAAAABJRU5ErkJggg==")}\n${Ce("geoxtru","CAAAAAA6mKC9AAAABGdBTUEAALGPC/xhBQAAAAFzUkdCAK7OHOkAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAAJ0Uk5TAAB2k804AAAAAmJLR0QA/4ePzL8AAAAJcEhZcwAAAEgAAABIAEbJaz4AAABcSURBVBjTY2AgEmhpeZV56vmWwQW00QUYwAJlSAI6XmVqukh8PT1bT03PchhXX09Pr9wQIQDiJ+ZowgWAXD3bck+QQDlCQTkDQgCoxA/ERBKwhbDglgA1lDMQDwCc/Rvq8nYsWgAAACV0RVh0ZGF0ZTpjcmVhdGUAMjAxNS0xMi0wMlQxNDoyNjoyOSswMTowMMBG13YAAAAldEVYdGRhdGU6bW9kaWZ5ADIwMTQtMTEtMTJUMDg6Mzk6MTkrMDE6MDA7fJ3DAAAAAElFTkSuQmCC")}\n${Ce("geobbox","CAAAAAA6mKC9AAAABGdBTUEAALGPC/xhBQAAAAFzUkdCAK7OHOkAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAAJ0Uk5TAAB2k804AAAAAmJLR0QA/4ePzL8AAAAJcEhZcwAAAEgAAABIAEbJaz4AAAB/SURBVBjTVc+hEYAwDAXQLlNRF1tVGxn9NRswQiSSCdgDyQBM0FlIIb2WuL77uf6E8E0N02wKYRwDciTKREVvB04GuZSyOMCABRB1WGzF3uDNQTvs/RcDtJXT4fSEXA5XoiQt0ttVSm8Co2psIOvoimjAOqBmFtH5wEP2373TPIvTK1nrpULXAAAAJXRFWHRkYXRlOmNyZWF0ZQAyMDE1LTEyLTAyVDE0OjI2OjI5KzAxOjAwwEbXdgAAACV0RVh0ZGF0ZTptb2RpZnkAMjAxNC0xMS0xMlQwODozOToxOSswMTowMDt8ncMAAAAASUVORK5CYII=")}\n${Ce("geoconeseg","CAAAAAA6mKC9AAAABGdBTUEAALGPC/xhBQAAAAFzUkdCAK7OHOkAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAAJ0Uk5TAAB2k804AAAAAmJLR0QA/4ePzL8AAAAJcEhZcwAAAEgAAABIAEbJaz4AAAB4SURBVBjTdc6hEcAgDAXQbFNZXHQkFlkd/30myAIMwAws0gmYpVzvoFyv/S5P/B+izzQ387ZA2pkDnvsU1SQLVIFrOM4JFmEaYp2gCQbmPEGODhJ8jt7Am47hwgrzInGAifa/elUZnQLY00iU30BZAV+BWi2VfnIBv1osbHH8jX0AAAAldEVYdGRhdGU6Y3JlYXRlADIwMTUtMTItMDJUMTQ6MjY6MjkrMDE6MDDARtd2AAAAJXRFWHRkYXRlOm1vZGlmeQAyMDE0LTExLTEyVDA4OjM5OjE5KzAxOjAwO3ydwwAAAABJRU5ErkJggg==")}\n${Ce("geoeltu","CAAAAAA6mKC9AAAABGdBTUEAALGPC/xhBQAAAAFzUkdCAK7OHOkAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAAJ0Uk5TAAB2k804AAAAAmJLR0QA/4ePzL8AAAAJcEhZcwAAAEgAAABIAEbJaz4AAACGSURBVBjTdY+hFYUwDEU7xq9CIXC4uNjY6KczQXeoYgVMR2ABRmCGjvIp/6dgiEruueedvBDuOR57LQnKyc8CJmKO+N8bieIUPtmBWjIIx8XDBHYCipsnql1g2D0UP2OoDqwBncf+RdZmzFMHizRjog7KZYzawd4Ay93lEAPWR7WAvNbwMl/XwSxBV8qCjgAAACV0RVh0ZGF0ZTpjcmVhdGUAMjAxNS0xMi0wMlQxNDoyNjoyOSswMTowMMBG13YAAAAldEVYdGRhdGU6bW9kaWZ5ADIwMTQtMTEtMTJUMDg6Mzk6MTkrMDE6MDA7fJ3DAAAAAElFTkSuQmCC")}\n${Ce("geomaterial","CAQAAAC1+jfqAAAABGdBTUEAALGPC/xhBQAAAAFzUkdCAK7OHOkAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAAJiS0dEAP+Hj8y/AAAACXBIWXMAAABIAAAASABGyWs+AAAAbElEQVQoz62QMRbAIAhDP319Xon7j54qHSyCtaMZFCUkRjgDIdRU9yZUCfg8ut5aAHdcxtoNurmgA3ABNKIR9KimhSukPe2qxcCYC0pfFXx/aFWo7i42KKItOpopqvvnLzJmtlZTS7EfGAfwAM4EQbLIGV0sAAAAJXRFWHRkYXRlOmNyZWF0ZQAyMDE1LTEyLTAyVDE0OjI2OjI5KzAxOjAwwEbXdgAAACV0RVh0ZGF0ZTptb2RpZnkAMjAxNC0xMS0xMlQwODozOToxOSswMTowMDt8ncMAAAAASUVORK5CYII=")}\n${Ce("geoparab","CAAAAAA6mKC9AAAABGdBTUEAALGPC/xhBQAAAAFzUkdCAK7OHOkAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAAJ0Uk5TAAB2k804AAAAAmJLR0QA/4ePzL8AAAAJcEhZcwAAAEgAAABIAEbJaz4AAAB/SURBVBjTbY+xDYAwDAQ9UAp3X7p0m9o9dUZgA9oMwAjpMwMzMAnYBAQSX9mn9+tN9KOtzsWsLOvYCziUGNX3nnCLJRzKPgeYrhPW7FJNLUB3YJazYKQKTnBaxgXRzNmJcrt7XCHQp9kEB1wfELEir/KGj4Foh8A+/zW1nf51AFabKZuWK+mNAAAAJXRFWHRkYXRlOmNyZWF0ZQAyMDE1LTEyLTAyVDE0OjI2OjI5KzAxOjAwwEbXdgAAACV0RVh0ZGF0ZTptb2RpZnkAMjAxNC0xMS0xMlQwODozOToxOSswMTowMDt8ncMAAAAASUVORK5CYII=")}\n${Ce("geopgon","CAAAAAA6mKC9AAAABGdBTUEAALGPC/xhBQAAAAFzUkdCAK7OHOkAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAAJ0Uk5TAAB2k804AAAAAmJLR0QA/4ePzL8AAAAJcEhZcwAAAEgAAABIAEbJaz4AAABwSURBVBjTY2AgDlwAAzh3sX1sPRDEeuwDc+8V2dsHgQQ8LCzq74HkLSzs7Yva2tLt7S3sN4MNiDUGKQmysCi6BzWkzcI+PdY+aDPCljZlj1iFOUjW1tvHLjYuQhJIt5/DcAFZYLH9YnSn7iPST9gAACbsJth21haFAAAAJXRFWHRkYXRlOmNyZWF0ZQAyMDE1LTEyLTAyVDE0OjI2OjI5KzAxOjAwwEbXdgAAACV0RVh0ZGF0ZTptb2RpZnkAMjAxNC0xMS0xMlQwODozOToxOSswMTowMDt8ncMAAAAASUVORK5CYII=")}\n${Ce("geotorus","CAAAAAA6mKC9AAAABGdBTUEAALGPC/xhBQAAAAFzUkdCAK7OHOkAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAAJ0Uk5TAAB2k804AAAAAmJLR0QA/4ePzL8AAAAJcEhZcwAAAEgAAABIAEbJaz4AAACGSURBVBjTjY+hFcMwDEQ9SkFggXGIoejhw+LiGkBDlHoAr+AhgjNL5byChuXeE7gvPelUyjOds/f5Zw0ggfj5KVCPMBWeyx+SbQ1XUriAC2XfpWWxjQQEZasRtRHiCUAj3qN4JaolUJppzh4q7dUTdHFXW/tH9OuswWm3nI7tc08+/eGLl758ey9KpKrNOQAAACV0RVh0ZGF0ZTpjcmVhdGUAMjAxNS0xMi0wMlQxNDoyNjoyOSswMTowMMBG13YAAAAldEVYdGRhdGU6bW9kaWZ5ADIwMTQtMTEtMTJUMDg6Mzk6MTkrMDE6MDA7fJ3DAAAAAElFTkSuQmCC")}\n${Ce("geotrd1","CAAAAAA6mKC9AAAABGdBTUEAALGPC/xhBQAAAAFzUkdCAK7OHOkAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAAJ0Uk5TAAB2k804AAAAAmJLR0QA/4ePzL8AAAAJcEhZcwAAAEgAAABIAEbJaz4AAAB/SURBVBjTbc6xDQMhDAVQ9qH6lUtal65/zQ5IDMAMmYAZrmKGm4FJzlEQQUo+bvwkG4fwm9lbodV7w40Y4WGfSxQiXiJlQfZOjWRb8Ioi3tKuBQMCo7+9N72BzPsfAuoTdUP9QN8wgOQwvsfWmHzpeT5BKydMNW0nhJGvGf7mAc5WKO9e5N2dAAAAJXRFWHRkYXRlOmNyZWF0ZQAyMDE1LTEyLTAyVDE0OjI2OjI5KzAxOjAwwEbXdgAAACV0RVh0ZGF0ZTptb2RpZnkAMjAxNC0xMS0xMlQwODozOToxOSswMTowMDt8ncMAAAAASUVORK5CYII=")}\n${Ce("geotube","CAAAAAA6mKC9AAAABGdBTUEAALGPC/xhBQAAAAFzUkdCAK7OHOkAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAAJ0Uk5TAAB2k804AAAAAmJLR0QA/4ePzL8AAAAJcEhZcwAAAEgAAABIAEbJaz4AAACGSURBVBjTRc+tEcAwCAXgLFNbWeSzSDQazw5doWNUZIOM0BEyS/NHy10E30HyklKvWnJ+0le3sJoKn3X2z7GRuvG++YRyMMDt0IIKUXMzxbnugJi5m9K1gNnGBOUFElAWGMaKIKI4xoQggl00gT+A9hXWgDwnfqgsHRAx2m+8bfjfdyrx5AtsSjpwu+M2RgAAACV0RVh0ZGF0ZTpjcmVhdGUAMjAxNS0xMi0wMlQxNDoyNjoyOSswMTowMMBG13YAAAAldEVYdGRhdGU6bW9kaWZ5ADIwMTQtMTEtMTJUMDg6Mzk6MTkrMDE6MDA7fJ3DAAAAAElFTkSuQmCC")}\n${Ce("evepoints","BAMAAADt3eJSAAAABGdBTUEAALGPC/xhBQAAAAFzUkdCAK7OHOkAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAABJQTFRF////n4mJcEdKRDMzcEdH////lLE/CwAAAAF0Uk5TAEDm2GYAAAABYktHRACIBR1IAAAACXBIWXMAAABIAAAASABGyWs+AAAAI0lEQVQI12NgIAowIpgKEJIZLiAgAKWZGQzQ9UGlWIizBQgAN4IAvGtVrTcAAAAldEVYdGRhdGU6Y3JlYXRlADIwMTYtMDktMDJUMTU6MDQ6MzgrMDI6MDDPyc7hAAAAJXRFWHRkYXRlOm1vZGlmeQAyMDE2LTA5LTAyVDE1OjA0OjM4KzAyOjAwvpR2XQAAAABJRU5ErkJggg==")}\n${Ce("evetrack","CAQAAAC1+jfqAAAABGdBTUEAALGPC/xhBQAAAAFzUkdCAK7OHOkAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAAJiS0dEAP+Hj8y/AAAACXBIWXMAAABIAAAASABGyWs+AAAAqElEQVQoz32RMQrCQBBFf4IgSMB0IpGkMpVHCFh7BbHIGTyVhU0K8QYewEKsbVJZaCUiPAsXV8Puzhaz7H8zs5+JUDjikLilQr5zpCRl5xMXZNScQE5gSMGaz70jjUAJcw5c3UBMTsUe+9Kzf065SbropeLXimWfDIgoab/tOyPGzOhz53+oSWcSGh7UdB2ZNKXBZdgAuUdEKJYmrEILyVgG6pE2tEHgDfe42rbjYzSHAAAAJXRFWHRkYXRlOmNyZWF0ZQAyMDE2LTA5LTAyVDE1OjA0OjQ3KzAyOjAwM0S3EQAAACV0RVh0ZGF0ZTptb2RpZnkAMjAxNi0wOS0wMlQxNTowNDo0NyswMjowMEIZD60AAAAASUVORK5CYII=")}\n.jsroot .geovis_this { background-color: lightgreen; }\n.jsroot .geovis_daughters { background-color: lightblue; }\n.jsroot .geovis_all { background-color: yellow; }`)}function Xa(Ce,N,E){Uf(),_("GradPerSegm",M.settings.GeoGradPerSegm),_("CompressComp",M.settings.GeoCompressComp);let z=new $a(Ce,N);return z.options=z.decodeOptions(E),Object.assign(z.ctrl,z.options),z.ctrl.ssao.enabled=z.options.usessao,z.ctrl.bloom.enabled=z.options.usebloom,z.ctrl.clip[0].enabled=z.options.clipx,z.ctrl.clip[1].enabled=z.options.clipy,z.ctrl.clip[2].enabled=z.options.clipz,z}function Ua(Ce,N,E){if(!N._geoobj)return!1;let z=N._geoobj,Ae=N._volume,Be=z._typename===mt||z._typename===cn;if(!Ae&&!Be)return!1;Ce.add("separator");const Fe=(ft,vt,Vt)=>{if(vt||(vt={visible:0,hidden:0}),Vt||(void 0!==vt.assign?ft.fRnrSelf=vt.assign:ft.fRnrSelf?vt.vis++:vt.hidden++),ft.fElements)for(let hn=0;hn{"self"===ft?(z.fRnrSelf=!z.fRnrSelf,N._icon=N._icon.split(" ")[0]+ii(z),E.updateTreeNode(N)):(Fe(z,{assign:"true"===ft},!0),E.forEachItem(vt=>{vt._geoobj&&vt._icon&&(vt._icon=N._icon.split(" ")[0]+ii(vt._geoobj),E.updateTreeNode(vt))},N)),kn(N,"testGeomChanges")},Ke=ft=>{tn(Ae,ft);let vt=N._icon.split(" ")[0]+ii(Ae);E.forEachItem(Vt=>{N._volume===Vt._volume&&(Vt._icon=vt,E.updateTreeNode(Vt))}),E.updateTreeNode(N),kn(N,"testGeomChanges")};if(0===N._geoobj._typename.indexOf(M.clTGeoNode)&&kn(N)&&Ce.add("Focus",function(){let ft=kn(N);if(!ft)return;let vt=E.itemFullName(N,ft);(0,M.isFunc)(ft._painter?.focusOnItem)&&ft._painter.focusOnItem(vt)}),Be){Ce.addchk(z.fRnrSelf,"Visible","self",Ue);let ft=Fe(z,void 0,!0);ft.hidden+ft.visible>0&&Ce.addchk(0==ft.hidden,"Daughters",0!==ft.hidden?"true":"false",Ue)}else Ce.addchk(pt(Ae,T.kVisNone),"Invisible",T.kVisNone,Ke),Ce.addchk(pt(Ae,T.kVisThis),"Visible",T.kVisThis,Ke),Ce.addchk(pt(Ae,T.kVisDaughters),"Daughters",T.kVisDaughters,Ke);return!0}function So(Ce,N){if(Ce._volume)return tn(Ce._volume,Ce._more&&Ce._volume.fNodes&&Ce._volume.fNodes.arr.length>0?T.kVisDaughters:T.kVisThis),lr(Ce._volume,N),kn(Ce,"testGeomChanges"),!1;if(Ce._geoobj&&(Ce._geoobj._typename==mt||Ce._geoobj._typename==cn))return Ce._geoobj.fRnrSelf=!Ce._geoobj.fRnrSelf,lr(Ce._geoobj,N),kn(Ce,"testGeomChanges"),!1;let E=kn(Ce);return!!E&&void 0!==E._painter.extraObjectVisible(N,Ce,!0)}function ed(Ce,N){let E="";switch(Ce._kind){case"ROOT."+Lt:E="img_evetrack";break;case"ROOT."+it:case"ROOT."+M.clTPolyMarker3D:E="img_evepoints"}if(E){let z=kn(Ce);z?._painter&&z._painter.extraObjectVisible(N,Ce)&&(E+=" geovis_this")}return E}function Fl(Ce,N,E){let Ae,Be,Fe,z={_kind:"ROOT."+N._typename,_name:E||In(N),_title:N.fTitle,_parent:Ce,_geoobj:N,_get:Ke=>(Ke._geoobj&&(Ke._geoobj.$geoh=!0),Promise.resolve(Ke._geoobj))},Ue=!1;return"TGeoMaterial"==N._typename?z._icon="img_geomaterial":"TGeoMedium"==N._typename?z._icon="img_geomedium":"TGeoMixture"==N._typename?z._icon="img_geomixture":0===N._typename.indexOf(M.clTGeoNode)&&N.fVolume?(z._title="node:"+N._typename,N.fTitle&&(z._title+=" "+N.fTitle),Ae=N.fVolume):0===N._typename.indexOf(M.clTGeoVolume)?Ae=N:N._typename==mt||N._typename==cn?(Ue=!0,Be=N.fShape,Fe=N.fElements?N.fElements.arr:null):void 0!==N.fShapeBits&&void 0!==N.fShapeId&&(Be=N),Ae&&(Be=Ae.fShape,Fe=Ae.fNodes?Ae.fNodes.arr:null),(Ae||Be||Fe)&&(Ae&&(z._volume=Ae),Fe?(z._more=!0,z._expand=qi):Be&&Be._typename===ct&&Be.fNode&&(z._more=!0,z._shape=Be,z._expand=function(Ke){return Fl(Ke,Ke._shape.fNode.fLeft,"Left"),Fl(Ke,Ke._shape.fNode.fRight,"Right"),!0}),!z._title&&N._typename!=M.clTGeoVolume&&(z._title=N._typename),Be?(""==z._title&&(z._title=Be._typename),z._icon=function pn(Ce){switch(Ce._typename){case ee:return"img_geoarb8";case re:return"img_geocone";case be:return"img_geoconeseg";case ct:return"img_geocomposite";case he:return"img_geotube";case de:return"img_geotubeseg";case le:return"img_geopara";case D:return"img_geoparab";case oe:return"img_geopcon";case ge:return"img_geopgon";case Ee:return"img_geoassembly";case Ge:return"img_geosphere";case We:return"img_geotorus";case U:return"img_geotrd1";case H:return"img_geotrd2";case et:return"img_geoxtru";case Tt:return"img_geotrap";case Bt:return"img_geogtra";case ve:return"img_geoeltu";case Je:return"img_geohype";case I:return"img_geoctub"}return"img_geotube"}(Be)):z._icon=z._more?"img_geocombi":"img_geobbox",Ae?z._icon+=ii(Ae):Ue&&(z._icon+=ii(N)),z._menu=Ua,z._icon_click=So),Ce._childs||(Ce._childs=[]),z._name||((0,M.isStr)(Ce._name)?(z._name=Ce._name,z._name.lastIndexOf("s")===z._name.length-1&&(z._name=z._name.slice(0,z._name.length-1)),z._name+="_"+Ce._childs.length):z._name="item_"+Ce._childs.length),Ce._childs.push(z),z}function wl(Ce){return _c.apply(this,arguments)}function _c(){return(_c=(0,ze.Z)(function*(Ce){let N=Ce.getObject(),E=[-1,-1,-1],z=[1,1,1];if(N.fP?.length)for(let Ke=0;Ke1e3&&(Fe="bkgr_"+Ue.pad.fFillColor),$a.draw(Ce.getDom(),Be,Fe).then(Ke=>Ke.drawExtras(N))})).apply(this,arguments)}function Yp(){let Ce=this.getMainPainter();if((0,M.isFunc)(Ce?.setAxesDraw))return Ce.setAxesDraw(!0);console.error("no geometry painter found to toggle TAxis3D drawing")}function au(Ce,N){if(!Ce)return null;N||(N={}),N.numfaces||(N.numfaces=1e5),N.numnodes||(N.numnodes=1e3),N.frustum||(N.frustum=null),N.res_mesh=N.res_faces=0;let E=null,z=null;if(Ce.visibles&&Ce.nodes&&Ce.numnodes){let Fe=Ce.numnodes>1e6?{length:Ce.numnodes}:new Array(Ce.numnodes);Ce.nodes.forEach(Ke=>{Fe[Ke.id]=pe.formatServerElement(Ke)}),E=new pe(null,Fe),E.name_prefix=E.getNodeName(0),E.maxdepth=20;let Ue=Ce.cfg?.nsegm||30;for(let Ke=0;Ke-.9?new L.Kj0(Ke.geom,ft.material):rt(Ke,ft.material),Vt.name=E.getNodeName(Ue.nodeid),vt.add(Vt),vt.absMatrix&&(Vt.matrix.copy(vt.absMatrix),Vt.matrix.decompose(vt.position,vt.quaternion,vt.scale),Vt.updateMatrixWorld())}return Be}},6030:(jr,At,Me)=>{"use strict";Me.d(At,{KB:()=>Ve,ai:()=>Ie,z4:()=>Re});var ze=Me(4788),M=Me(9542),L=Me(2253),_e=Me(3675),De=Me(6458),$e=Me(4953);function Ie(ce,Z){return ce<.5?Z?"%S.%L":"%H:%M:%S.%L":ce<30?Z?"%Mm%S":"%H:%M:%S":(ce/=60)<30?Z?"%Hh%M":"%d/%m %H:%M":(ce/=60)<12?Z?"%d-%Hh":"%d/%m/%y %Hh":(ce/=24)<15.218425?Z?"%d/%m":"%d/%m/%y":(ce/=30.43685)<6?"%d/%m/%y":(ce/=12)<2?Z?"%m/%y":"%d/%m/%y":"%Y"}const Ve={initAxisPainter(){this.name="yaxis",this.kind="normal",this.func=null,this.order=0,this.full_min=0,this.full_max=1,this.scale_min=0,this.scale_max=1,this.ticks=[]},cleanupAxisPainter(){this.ticks=[],delete this.format,delete this.func,delete this.tfunc1,delete this.tfunc2,delete this.gr},assignFrameMembers(ce,Z){ce["gr"+Z]=this.gr,ce["log"+Z]=this.log,ce[`scale_${Z}min`]=this.scale_min,ce[`scale_${Z}max`]=this.scale_max},convertDate(ce){return new Date(this.timeoffset+1e3*ce)},revertPoint(ce){let Z=this.func.invert(ce);return"time"==this.kind?(Z-this.timeoffset)/1e3:Z},formatTime(ce,Z){return Z?this.tfunc1(ce):this.tfunc2(ce)},formatLog(ce,Z,Y){let ue=parseFloat(ce),K=Math.round(ue);if(!Z)return K===ue&&Math.abs(K)<1e9?K.toString():(0,_e.Ee)(ue,Y||M.gStyle.fStatFormat);if(ue<=0)return null;let J=Math.log10(ue),R=this.logbase;return 10!==R&&(J/=Math.log10(R)),this.moreloglabels||Math.abs(J-Math.round(J))<.001?this.noexp||2==Z?ue.toFixed(J<0?Math.round(.5-J):0):this.formatExp(R,Math.floor(J+.01),ue):null},formatNormal(ce,Z,Y){let ue=parseFloat(ce);return Z&&this.order&&(ue/=Math.pow(10,this.order)),ue===Math.round(ue)?Math.abs(ue)<1e9?ue.toFixed(0):ue.toExponential(4):Z?this.ndig>10?ue.toExponential(this.ndig-11):ue.toFixed(this.ndig):(0,_e.Ee)(ue,Y||M.gStyle.fStatFormat)},formatExp(ce,Z,Y){let ue="";if(Y&&0!=(Y=Math.round(Y/Math.pow(ce,Z)))&&1!=Y&&(ue=Y.toString()+(M.settings.Latex?"#times":"x")),Math.abs(ce-Math.exp(1))<.001?ue+="e":ue+=ce.toString(),M.settings.Latex>M.constants.Latex.Symbols)return ue+`^{${Z}}`;const K={0:"\u2070",1:"\xb9",2:"\xb2",3:"\xb3",4:"\u2074",5:"\u2075",6:"\u2076",7:"\u2077",8:"\u2078",9:"\u2079","-":"\u207b"};let J=Z.toString();for(let R=0;R{let J=0,R=0;for(let A=1;A4&&Y(ue);)Z=Math.round(.8*Z),ue=ce.ticks(Z);if(Z<5&&Y(ue)&&this.logbase&&10!=this.logbase){let K=[];ue.forEach(J=>{let R=Math.log10(J)/Math.log10(this.logbase);Math.abs(Math.round(R)-R)<.01&&K.push(J)}),K.length>0&&(ue=K)}return ue},produceTicks(ce,Z){if(!this.noticksopt){let K=ce*(Z||1);if(this.log)return this.poduceLogTicks(this.func,K);let J=this.func.domain();const R=A=>A.length<=K||!(A.length>K+1)&&(A[0]===J[0]||A[K]===J[1]);let P=this.func.ticks(K);if(Z||R(P))return P;let v=this.func.ticks(Math.round(.7*K));return v.length>2&&R(v)?v:P}let Y=this.func.domain(),ue=[];Z&&(ce=(ce-1)*Z);for(let K=0;K<=ce;++K)ue.push((Y[0]*(ce-K)+Y[1]*K)/ce);return ue},analyzeWheelEvent(ce,Z,Y,ue){Y||(Y={});let K=0,J=1,R=1;if("dleft"in Y&&(J=Y.dleft,K=1),"dright"in Y&&(R=Y.dright,K=1),Y.delta?K=Y.delta:ce&&(K=ce.wheelDelta?-ce.wheelDelta:ce.deltaY||ce.detail),!K||ue&&Y.ignore)return;K=K<0?-.2:.2,J*=K,R*=K;let P=Y.min=this.scale_min,v=Y.max=this.scale_max,A=this.full_min,w=this.full_max;if(Y.min===Y.max&&K<0&&(Y.min=A,Y.max=w),!(Y.min>=Y.max)){if(Y.reverse&&(Z=1-Z),Z>0&&Z<1){if(this.log){let m=Y.min>0?Math.log10(Y.max/Y.min):2;m>10?m=10:m<.01&&(m=.01),Y.min=Y.min/Math.pow(10,m*J*Z),Y.max=Y.max*Math.pow(10,m*R*(1-Z))}else if(J!==-R||Y.reverse){let m=Y.max-Y.min,_=m;J>0&&(m=1.001*m/(1-J)),Y.min+=-J*Z*m,R>0&&(_=1.001*_/(1-R)),Y.max-=-R*(1-Z)*_}else{let m=(Y.max-Y.min)*R*Z;Math.round(Y.max)===Y.max&&Math.round(Y.min)===Y.min&&Math.abs(m)>1&&(m=Math.round(m)),Y.min+mw&&(m=w-Y.max),0!=m?(Y.min+=m,Y.max+=m):(delete Y.min,delete Y.max)}Y.min>=Y.max?Y.min=Y.max=void 0:J!==R?(Y.minw&&v===w)&&(Y.min=Y.max=void 0):(Y.minw&&(Y.max=w))}else Y.min=Y.max=void 0;return Y.changed=void 0!==Y.min&&void 0!==Y.max,Y}}};class Re extends De.tK{constructor(Z,Y,ue){super(Z,Y),Object.assign(this,Ve),this.initAxisPainter(),this.embedded=ue,this.invert_side=!1,this.lbls_both_sides=!1}cleanup(){this.cleanupAxisPainter(),super.cleanup()}getAxisType(){return M.clTAxis}configureAxis(Z,Y,ue,K,J,R,P,v){this.name=Z,this.full_min=Y,this.full_max=ue,this.kind="normal",this.vertical=R,this.log=v.log||0,this.symlog=v.symlog||!1,this.reverse=v.reverse||!1,this.swap_side=v.swap_side||!1,this.fixed_ticks=v.fixed_ticks||null,this.maxTickSize=v.maxTickSize||0;let A=this.getObject();if(v.time_scale||A.fTimeDisplay?(this.kind="time",this.timeoffset=function Ze(ce){let Z=7889184e5;if(!ce)return Z;let Y=ce.fTimeFormat.indexOf("%F");if(Y<0)return 1e3*M.gStyle.fTimeOffset;let ue=ce.fTimeFormat.slice(Y+2);if(0==ue.indexOf("1995-01-01 00:00:00s0"))return Z;if("0"==ue||""==ue)return 0;const K=(F,q,T)=>{let $=ue.indexOf(F);if($<0)return q;let ee=parseInt(ue.slice(0,$));return ue=ue.slice($+1),!Number.isInteger(ee)||eeT?q:ee},J=K("-",1970,2300),R=K("-",1,12)-1,P=K(" ",1,31),v=K(":",0,23),A=K(":",0,59),w=K("s",0,59),m=K(" ",0,999),_=new Date(Date.UTC(J,R,P,v,A,w,m));let k=_.getTime();if(ue=ue.toUpperCase(),0==ue.indexOf("GMT")&&(k+=6e4*_.getTimezoneOffset(),ue=ue.slice(4).trim(),ue.length>3)){let F=0,q=1e3;"-"==ue[0]&&(F=1,q=-1e3),k-=q*(3600*parseInt(ue.slice(F,F+2))+60*parseInt(ue.slice(F+2,F+4)))}return k}(A)):this.kind=A.fLabels?"labels":"normal","time"==this.kind)this.func=(0,L.Xf)().domain([this.convertDate(K),this.convertDate(J)]);else if(this.log){if(this.logbase=2===this.log?2:10,J<=0&&(J=1),K<=0&&A&&!v.logcheckmin)for(let k=0;k0);++k);K<=0&&v.log_min_nz&&(K=v.log_min_nz),(K<=0||K>=J)&&(K=J*(v.logminfactor||1e-4)),this.func=(0,L.p2)().base(2==this.log?2:10).domain([K,J])}else if(this.symlog){let k=Math.max(Math.abs(K),Math.abs(J));Number.isInteger(this.symlog)&&this.symlog>0?k*=Math.pow(10,-1*this.symlog):k*=.01,this.func=(0,L.eh)().constant(k).domain([K,J])}else this.func=(0,L.BY)().domain([K,J]);if(this.vertical^this.reverse){let k=P[0];P[0]=P[1],P[1]=k}this.func.range(P),this.scale_min=K,this.scale_max=J,this.gr="time"==this.kind?k=>this.func(this.convertDate(k)):this.log?k=>k20&&(this.nticks=20);let _=Math.abs(this.func.range()[1]-this.func.range()[0]);if(_<=0&&(_=100),"time"==this.kind){this.nticks>8&&(this.nticks=8);let k=this.scale_max-this.scale_min,F=A.fTimeFormat.indexOf("%F"),q=F>=0?A.fTimeFormat.slice(0,F):A.fTimeFormat,T=Ie(k/_,!1);(!q||k<.1*(this.full_max-this.full_min))&&(q=Ie(k/this.nticks,!0)),this.tfunc1=this.tfunc2=(0,L.i$)(q),T!==q&&(this.tfunc2=(0,L.i$)(T)),this.format=this.formatTime}else if(this.log)this.nticks2>1&&(this.nticks*=this.nticks2,this.nticks2=1),this.noexp=!!A&&A.TestBit(De.VO.kNoExponent),this.scale_max<300&&this.scale_min>.3&&(this.noexp=!0),this.moreloglabels=!!A&&A.TestBit(De.VO.kMoreLogLabels),this.format=this.formatLog;else if("labels"==this.kind){this.nticks=50;let k=this.scale_max-this.scale_min;this.nticks>k&&(this.nticks=Math.round(k)),this.regular_labels=!0,A&&A.fNbins&&A.fLabels&&(A.fNbins!=Math.round(A.fXmax-A.fXmin)||0!=A.fXmin||A.fXmax!=A.fNbins)&&(this.regular_labels=!1),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(Z){let Y=parseFloat(Z),ue=this.getObject();if(Y=this.regular_labels?Math.floor(Y):Math.round((Y-ue.fXmin)/(ue.fXmax-ue.fXmin)*ue.fNbins),Y<0||Y>=ue.fNbins)return null;for(let K=0;K{P>=this.scale_min&&P<=this.scale_max&&R.push(P)});else if("labels"!=this.kind||this.regular_labels)R=this.produceTicks(this.nticks);else{R=[],J.lbl_pos=[];let P=this.getObject();for(let v=0;v=this.scale_min&&Athis.scale_min&&R.push(A))}}if(J.minor=J.middle=J.major=R,Z){let P=J.major,v=1e-5*(this.scale_max-this.scale_min);return P[0]>this.scale_min+v&&P.unshift(this.scale_min),P[P.length-1]1&&(!this.log||10===this.logbase)&&!this.fixed_ticks){J.minor=J.middle=this.produceTicks(J.major.length,this.nticks2);let P=Math.abs(this.func.range()[1]-this.func.range()[0]);J.middle.length<=J.major.length||J.middle.length>P/3.5?J.minor=J.middle=J.major:this.nticks3>1&&!this.log&&(J.minor=this.produceTicks(J.middle.length,this.nticks3),(J.minor.length<=J.middle.length||J.minor.length>P/1.7)&&(J.minor=J.middle))}if(J.reset=function(){this.nminor=this.nmiddle=this.nmajor=0},J.next=function(P){return!(this.nminor>=this.minor.length||(this.tick=this.minor[this.nminor++],this.grpos=this.func(this.tick),P&&(this.grpos=Math.round(this.grpos)),this.kind=3,this.nmiddle=this.major.length?null:this.func(this.major[this.nmajor])},this.order=0,this.ndig=0,"normal"==this.kind&&!this.log&&J.major.length>0){let P=0,v=0,A=!1;if(!Y){let k=Math.max(Math.abs(J.major[0]),Math.abs(J.major[J.major.length-1])),F=Math.min(Math.abs(J.major[0]),Math.abs(J.major[J.major.length-1])),q=k>0?3*Math.round(Math.log10(k)/3):0,T=F>0?3*Math.round(Math.log10(F)/3):0;A=k<2e4,(k||F)&&(P=Math.max(q,T)+3,v=Math.min(q,T)-3)}let w=0,m=this.ndig,_=1e10;for(let k=v;k<=P;k+=3){if(A&&3===k)continue;this.order=k,this.ndig=0;let F=[],q=0,T=0;for(;q15)break;F=[],q=0,T=0}}!k&&this.ndig<4&&(T-=2*J.major.length+3),T<_&&(_=T,w=this.order,m=this.ndig)}this.order=w,this.ndig=m,K&&(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 J}isCenteredLabels(){if("labels"===this.kind)return!0;if(this.log)return!1;let Z=this.getObject();return Z&&Z.TestBit(De.VO.kCenterLabels)}addTitleDrag(Z,Y,ue,K,J){if(!M.settings.MoveResize||(0,M.isBatchMode)())return;let P,v,A,w,m,_,k,R=null,F=(0,L.oh)().subject(Object);F.on("start",q=>{q.sourceEvent.preventDefault(),q.sourceEvent.stopPropagation();let T=Z.node().getBBox(),$=Y?T.height:T.width;A=P=Z.property("shift_x"),w=v=Z.property("shift_y"),m=Y?P>0:v>0,_=Y?[J,J/2,0]:[0,J/2,J];let ee=Y?-$/2:$/2;"middle"==this.title_align?(_[0]+=ee,_[2]-=ee):"begin"==this.title_align?(_[1]-=ee,_[2]-=2*ee):(_[0]+=2*ee,_[1]+=ee),k=this.titleCenter?1:K^this.titleOpposite?0:2,_[k]=Y?v:P,R=Z.append("rect").classed("zoom",!0).attr("x",T.x).attr("y",T.y).attr("width",T.width).attr("height",T.height).style("cursor","move")}).on("drag",q=>{if(!R)return;q.sourceEvent.preventDefault(),q.sourceEvent.stopPropagation(),P+=q.dx,v+=q.dy;let T,$,ee=0,re=Y?v:P;for(let be=1;be<3;++be)Math.abs(re-_[be])0:$>0)&&(A=T,w=$,k=ee,Z.attr("transform",`translate(${A},${w})`))}).on("end",q=>{if(!R)return;q.sourceEvent.preventDefault(),q.sourceEvent.stopPropagation(),Z.property("shift_x",A).property("shift_y",w);const T=this.getObject(),$=De.VO,ee=(re,be)=>{T.TestBit(re)!=be&&T.InvertBit(re)};this.titleOffset=(Y?A:w)/ue,T.fTitleOffset=this.titleOffset/this.titleSize,1==k?(ee($.kCenterTitle,!0),this.titleCenter=!0,ee($.kOppositeTitle,!1),this.titleOpposite=!1):0==k?(ee($.kCenterTitle,!1),this.titleCenter=!1,ee($.kOppositeTitle,!0),this.titleOpposite=!0):(ee($.kCenterTitle,!1),this.titleCenter=!1,ee($.kOppositeTitle,!1),this.titleOpposite=!1),this.submitAxisExec(`SetTitleOffset(${T.fTitleOffset});;SetBit(${$.kCenterTitle},${this.titleCenter?1:0})`),R.remove(),R=null}),Z.style("cursor","move").call(F)}setHistPainter(Z,Y){this.hist_painter=Z,this.hist_axis=Y}submitAxisExec(Z){let Y=this.hist_painter?.snapid;Y&&this.hist_axis&&this.submitCanvExec(Z,Y+"#"+this.hist_axis)}produceTicksPath(Z,Y,ue,K,J,R){let P="",v="";for(this.ticks=[];Z.next(!0);){let A=Math.round(ue/4),w=0;Z.kind<3&&(A=Math.round(ue/2)),1==Z.kind&&(null!==this.format(Z.tick,!0)&&(A=ue),this.ticks.push(Z.grpos)),K>0?w=-A:Y<0&&(w=-A,A=0),P+=this.vertical?`M${A},${Z.grpos}H${w}`:`M${Z.grpos},${-A}V${-w}`,J&&(v+=this.vertical?`M${J-A},${Z.grpos}H${J-w}`:`M${Z.grpos},${J+A}V${J+w}`)}return R?P+v:""}findLabelModifier(Z,Y,ue){if(!Z.fModLabs)return null;for(let K=0;K20&&U>m-v&&(q=Math.min(q,(m-v)/U));q>1e-4&&q<.7&&!I.vertical&&!F&&T>5&&1==ee.length&&(be=!0);let H=q*(be?3:1);H>1e-4&&H<1&&($=1/H,I.scaleTextDrawing($,ee[0]))}_.lbls_both_sides&&ee.push(Z.append("svg:g").attr("class","axis_labels").attr("transform",_.vertical?`translate(${ue})`:`translate(0,${-K})`));for(let I=0;I0&&(R=-R);let U=0,H=_.vertical?-v*R:(v+2)*R+w*A;_.startTextDrawing(P,"font",ee[I]);for(let le=0;le0&&(ge.color=_.getColor(oe.fTextColor)),ge.gap_before=le>0?Math.abs(Math.round(Ee-_.func(re[le-1]))):0,ge.gap_after=le(_.vertical?K:ue)+5)continue}if(T=Math.max(T,D.length),_.vertical?(ge.x=H,ge.y=Ee,ge.align=F?R<0?23:20:R<0?12:32):(ge.x=Ee,ge.y=H,ge.align=F?R<0?12:32:R<0?20:23),F&&(ge.rotate=270),0==I&&(ge.post_process=de),_.drawText(ge),U&&Ee!=U&&(_.vertical&&!F||!_.vertical&&F)){let Ge=Math.abs(Ee-U);q=Math.min(q,.9*Ge/P.size)}U=Ee}_.order&&_.drawText({color:P.color,x:_.vertical?5*R:ue+5,y:_.has_obstacle?H:_.vertical?-3:-3*R,align:_.vertical?R<0?30:10:_.has_obstacle^R<0?13:10,latex:1,text:"#times"+_.formatExp(10,_.order),draw_g:ee[I]})}return _.finishTextDrawing(ee[0],!0).then(()=>{if(ee.length>1)return $&&_.scaleTextDrawing($,ee[1]),_.finishTextDrawing(ee[1],!0)}).then(()=>(be&&ee[0].selectAll("text").each(function(){let I=(0,L.Ys)(this),U=I.attr("transform");I.attr("transform",U+" rotate(25)").style("text-anchor","start")}),he))})()}extractDrawAttributes(Z,Y,ue){let _,K=this.getObject(),J=K?._typename===M.clTGaxis,P=this.getPadPainter()?.getFrameRect(),v=Math.round((P?.width||8)/.8),A=Math.round((P?.height||8)/.8),w=0,m=0;if(this.scalingSize=Z||Math.max(Math.min(v,A),10),J){let k=K.fChopt.indexOf("S")>=0;this.optionUnlab=K.fChopt.indexOf("U")>=0,this.optionMinus=K.fChopt.indexOf("-")>=0||K.TestBit(De.VO.kTickMinus),this.optionPlus=K.fChopt.indexOf("+")>=0||K.TestBit(De.VO.kTickPlus),this.optionNoopt=K.fChopt.indexOf("N")>=0,this.optionInt=K.fChopt.indexOf("I")>=0,this.createAttLine({attr:K}),m=Z||(this.vertical?1.7*ue:.6*Y),w=k?K.fTickSize:.03,_=this.getColor(K.fTextColor)}else this.optionUnlab=!1,this.optionMinus=this.vertical^this.invert_side,this.optionPlus=!this.optionMinus,this.optionNoopt=!1,this.optionInt=!1,this.createAttLine({color:K.fAxisColor,width:1,style:1}),m=Z||(this.vertical?v:A),w=K.fTickLength,_=this.getColor(K.fTitleColor);this.optionNoexp=K.TestBit(De.VO.kNoExponent),this.ticksSize=Math.round(w*m),Z&&this.ticksSize<0&&(this.ticksSize=-this.ticksSize),this.maxTickSize&&this.ticksSize>this.maxTickSize&&(this.ticksSize=this.maxTickSize),this.ticksColor=this.lineatt.color,this.ticksWidth=this.lineatt.width,this.labelSize=Math.round(K.fLabelSize<1?K.fLabelSize*this.scalingSize:K.fLabelSize),this.labelsOffset=Math.round(Math.abs(K.fLabelOffset)*this.scalingSize),this.labelsFont=new $e.G(K.fLabelFont,this.labelSize,Z),(this.labelSize<=0||Math.abs(K.fLabelOffset)>1.1)&&(this.optionUnlab=!0),this.labelsFont.setColor(this.getColor(K.fLabelColor)),this.fTitle=K.fTitle,this.fTitle?(this.titleSize=K.fTitleSize>=1?K.fTitleSize:Math.round(K.fTitleSize*this.scalingSize),this.titleFont=new $e.G(K.fTitleFont,this.titleSize,Z),this.titleFont.setColor(_),this.titleOffset=K.fTitleOffset*this.titleSize,this.titleCenter=K.TestBit(De.VO.kCenterTitle),this.titleOpposite=K.TestBit(De.VO.kOppositeTitle)):(delete this.titleSize,delete this.titleFont,delete this.titleOffset,delete this.titleCenter,delete this.titleOpposite)}drawAxis(Z,Y,ue,K,J,R,P,v){var A=this;return(0,ze.Z)(function*(){let w=A.getObject(),m=w?._typename===M.clTGaxis,_=Z,k=!0,F=A.getPadPainter(),q=F?.getPadWidth()||10,T=F?.getPadHeight()||10,$=A.swap_side||!1;J?A.invert_side&&(J=-J):J=0,A.extractDrawAttributes(void 0,Y,ue),m&&(k=0!=w.fLineColor),A.lineatt.not_standard=!0,(!m||"zaxis"===A.name)&&(_=Z.select("."+A.name+"_container"),_.empty()?_=Z.append("svg:g").attr("class",A.name+"_container"):_.selectAll("*").remove());let ee="";k&&(ee="M0,0"+(A.vertical?`v${ue}`:`h${Y}`),J&&(ee+=A.vertical?`M${J},0v${ue}`:`M0,${J}h${Y}`)),_.attr("transform",K||null);let re=1,be=0;A.optionPlus&&A.optionMinus?(re=1,be=1):A.optionMinus?re=$^A.vertical?1:-1:A.optionPlus&&(re=$^A.vertical?-1:1);const he=A.createTicks(!1,A.optionNoexp,A.optionNoopt,A.optionInt);ee+=A.produceTicksPath(he,re,A.ticksSize,be,J,k&&!R&&!A.disable_ticks),!R&&ee&&!A.lineatt.empty()&&_.append("svg:path").attr("d",ee).call(A.lineatt.func);let de=0,I=0,U=null,H=null,le=0;return(R||A.optionUnlab?Promise.resolve(0):A.drawLabels(_,w,Y,ue,he,re,A.labelsFont,A.labelsOffset,A.ticksSize,be,P)).then(oe=>{if(le=oe,M.settings.Zooming&&!A.disable_zooming&&!(0,M.isBatchMode)()){let et=Math.max(A.labelsFont.size,5),Tt=_.append("svg:rect").attr("class","axis_zoom").style("opacity","0").style("cursor","crosshair");if(A.vertical){let Bt=(le||2*et)+3;Tt.attr("x",re>0?-Bt:0).attr("y",0).attr("width",Bt).attr("height",ue)}else Tt.attr("x",0).attr("y",re>0?0:-et-3).attr("width",Y).attr("height",et+3)}if(A.position=0,v){let et=_.node(),Tt=A.getPadSvg().node();if(et&&Tt&&et.getBoundingClientRect&&Tt.getBoundingClientRect){let Bt=et.getBoundingClientRect(),ve=Tt.getBoundingClientRect();A.position=Bt.left-ve.left}et&&!Tt&&console.warn("Why PAD element missing when search for position")}if(!A.fTitle||R)return!0;U=_.append("svg:g").attr("class","axis_title");let ge=1.6/A.scalingSize,Ee=w.TestBit(De.VO.kRotateTitle)?-1:1;A.startTextDrawing(A.titleFont,"font",U);let Ge=$^A.titleOpposite;if(A.title_align=A.titleCenter?"middle":Ee<0^Ge?"begin":"end",A.vertical){if(ge*=-re*q,de=Math.round(ge*A.titleOffset),"zaxis"==A.name&&m&&"getBoundingClientRect"in _.node()){let et=_.node().getBoundingClientRect();de{if(U){if(H){let oe=U.node().getBoundingClientRect();de=H.left!=H.right&&oe.left!=oe.right?re>0?Math.round(H.left-oe.right-.3*A.titleFont.size):Math.round(H.right-oe.left+.3*A.titleFont.size):-1*Math.round((re>0?A.labelsOffset+le:0)+.7*A.titleFont.size)}U.attr("transform",`translate(${de},${I})`).property("shift_x",de).property("shift_y",I)}return A})})()}convertTo(Z){let Y=this.getObject(),ue=this.axisToSvg("x",Y.fX1),K=this.axisToSvg("y",Y.fY1),J=this.axisToSvg("x",Y.fX2),R=this.axisToSvg("y",Y.fY2);if("ndc"==Z){let P=this.getPadPainter().getPadWidth(),v=this.getPadPainter().getPadHeight();Y.fX1=ue/P,Y.fX2=J/P,Y.fY1=(v-K)/v,Y.fY2=(v-R)/v,this.use_ndc=!0}else if("frame"==Z){let P=this.getFramePainter().getFrameRect();Y.fX1=(ue-P.x)/P.width,Y.fX2=(J-P.x)/P.width,Y.fY1=(K-P.y)/P.height,Y.fY2=(R-P.y)/P.height,this.bind_frame=!0}}redraw(){let Y,ue,K,J,Z=this.getObject();if(this.bind_frame){let k=this.getFramePainter().getFrameRect();Y=Math.round(k.x+Z.fX1*k.width),K=Math.round(k.x+Z.fX2*k.width),ue=Math.round(k.y+Z.fY1*k.height),J=Math.round(k.y+Z.fY2*k.height)}else Y=this.axisToSvg("x",Z.fX1,this.use_ndc),ue=this.axisToSvg("y",Z.fY1,this.use_ndc),K=this.axisToSvg("x",Z.fX2,this.use_ndc),J=this.axisToSvg("y",Z.fY2,this.use_ndc);let R=K-Y,P=ue-J,v=Math.abs(R)=0,log:Z.fChopt.indexOf("G")>=0?1:0,reverse:w,swap_side:w}),this.createG(),this.drawAxis(this.getG(),Math.abs(R),Math.abs(P),`translate(${Y},${J})`)}}},49:(jr,At,Me)=>{"use strict";Me.r(At),Me.d(At,{TCanvasPainter:()=>Z,TPadPainter:()=>Ve.TPadPainter,drawTFrame:()=>P,drawTGaxis:()=>R,drawTPadSnapshot:()=>K,ensureTCanvas:()=>Y});var ze=Me(4788),M=Me(9542),L=Me(2253),_e=Me(9622),De=Me(2487),$e=Me(6458),Ze=Me(6030),Ie=Me(6116),Ve=Me(3834);function Re(v,A,w){let m=new Ie.nF(v,A);return m.addToPadPrimitives(),"3d"==w&&(m.mode3d=!0),m.redraw()}const ce={kShowEventStatus:(0,M.BIT)(15),kAutoExec:(0,M.BIT)(16),kMenuBar:(0,M.BIT)(17),kShowToolBar:(0,M.BIT)(18),kShowEditor:(0,M.BIT)(19),kMoveOpaque:(0,M.BIT)(20),kResizeOpaque:(0,M.BIT)(21),kIsGrayscale:(0,M.BIT)(22),kShowToolTips:(0,M.BIT)(23)};class Z extends Ve.TPadPainter{constructor(A,w){super(A,w,!0),this._websocket=null,this.tooltip_allowed=M.settings.Tooltip}cleanup(){this._changed_layout&&this.setLayoutKind("simple"),delete this._changed_layout,super.cleanup()}getLayoutKind(){let A=this.selectDom("origin");return(A.empty()?"":A.property("layout"))||"simple"}setLayoutKind(A,w){let m=this.selectDom("origin");m.empty()||(A||(A="simple"),m.property("layout",A),m.property("layout_selector","simple"!=A&&w?w:null),this._changed_layout="simple"!==A)}changeLayout(A,w){var m=this;return(0,ze.Z)(function*(){if(m.getLayoutKind()==A)return!0;let k=m.selectDom("origin"),F=k.select(".side_panel"),q=m.selectDom(),T=[];for(;q.node().firstChild;)T.push(q.node().removeChild(q.node().firstChild));if(F.empty()||(0,$e.Eq)(F.node()),m.setLayoutKind("simple"),k.html(""),"simple"==A){q=k;for(let $=0;$(_.proj_painter=ee,ee))}return _.proj_painter.getMainPainter()?.updateObject(w,m),_.proj_painter.redrawPad()})()}testUI5(){return!!this.use_openui&&(console.warn("full ui5 should be used - not loaded yet? Please check!!"),!0)}drawInSidePanel(A,w){var m=this;return(0,ze.Z)(function*(){let _=m.selectDom("origin").select(".side_panel");return _.empty()?null:m.drawObject(_.node(),A,w)})()}showMessage(A){this.testUI5()||(0,_e.Ae)(A,7e3)}saveCanvasAsFile(A){let w=A.indexOf(".");this.createImage(A.slice(w+1)).then(m=>this.sendWebsocket("SAVE:"+A+":"+m))}sendSaveCommand(A){this.sendWebsocket("PRODUCE:"+A)}submitMenuRequest(A,w,m){var _=this;return(0,ze.Z)(function*(){return new Promise(k=>{_._getmenu_callback=k,_.sendWebsocket("GETMENU:"+m)})})()}submitExec(A,w,m){if(!this._readonly&&A&&(m||(m=A.snapid),m&&(0,M.isStr)(m)))return this.sendWebsocket(`OBJEXEC:${m}:${w}`)}sendWebsocket(A){return this._websocket?.canSend()?(this._websocket.send(A),!0):(console.warn(`DROP SEND: ${A}`),!1)}closeWebsocket(A){this._websocket&&(this._websocket.close(A),this._websocket.cleanup(),delete this._websocket)}useWebsocket(A){this.closeWebsocket(),this._websocket=A,this._websocket.setReceiver(this),this._websocket.connect()}onWebsocketOpened(){}onWebsocketClosed(){this.embed_canvas||(0,_e.Hw)()}onWebsocketMsg(A,w){if(console.log(`GET MSG len:${w.length} ${w.slice(0,60)}`),"CLOSE"==w)this.onWebsocketClosed(),this.closeWebsocket(!0);else if("SNAP6:"==w.slice(0,6)){let m=w.indexOf(":",6),_=w.slice(6,m),k=(0,M.parse)(w.slice(m+1));this.syncDraw(!0).then(()=>this.redrawPadSnap(k)).then(()=>{this.completeCanvasSnapDrawing();let F=this.getWebPadOptions();F&&(F=":"+F),A.send("READY6:"+_+F),this.confirmDraw()})}else if("MENU:"==w.slice(0,5)){let m=(0,M.parse)(w.slice(5));(0,M.isFunc)(this._getmenu_callback)&&(this._getmenu_callback(m),delete this._getmenu_callback)}else if("CMD:"==w.slice(0,4)){let m=(w=w.slice(4)).indexOf(":"),_=w.slice(0,m),k=w.slice(m+1),F="REPLY:"+_+":";"SVG"==k||"PNG"==k||"JPEG"==k?this.createImage(k.toLowerCase()).then(q=>A.send(F+q)):(console.log(`Unrecognized command ${k}`),A.send(F))}else if("DXPROJ:"==w.slice(0,7)||"DYPROJ:"==w.slice(0,7)){let m=w[1],_=(0,M.parse)(w.slice(7));this.drawProjection(m,_)}else if("SHOW:"==w.slice(0,5)){let m=w.slice(5),_="1"==m[m.length-1];this.showSection(m.slice(0,m.length-2),_)}else if("EDIT:"==w.slice(0,5)){let m=this.findSnap(w.slice(5));console.log(`GET EDIT ${w.slice(5)} found ${!!m}`),m&&this.showSection("Editor",!0).then(()=>this.producePadEvent("select",m.getPadPainter(),m))}else console.log(`unrecognized msg ${w}`)}clickPadButton(A,w){return"ToggleGed"==A?this.activateGed(this,null,"toggle"):"ToggleStatus"==A?this.activateStatusBar("toggle"):void super.clickPadButton(A,w)}hasEventStatus(){return!this.testUI5()&&(this.brlayout?this.brlayout.hasStatus():(0,De.nh)()?.hasStatusLine()??!1)}activateStatusBar(A){this.testUI5()||(this.brlayout?this.brlayout.createStatusLine(23,A):(0,De.nh)()?.createStatusLine(23,A),this.processChanges("sbits",this))}showCanvasStatus(...A){this.testUI5()||(this.brlayout||(0,De.nh)()?.brlayout)?.showStatus(...A)}hasGed(){return!this.testUI5()&&(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:M.settings,create:M.create,parse:M.parse,toJSON:M.toJSON,loadScript:M.loadScript,EAxisBits:$e.VO,getColorExec:_e.Aq}}}activateGed(A,w,m){var _=this;return(0,ze.Z)(function*(){if(_.testUI5()||!_.brlayout)return!1;if(_.brlayout.hasContent())return"toggle"===m||!1===m?_.removeGed():A?.getPadPainter()?.selectObjectPainter(A),!0;if(!1===m)return!1;let k=_.brlayout.createBrowserBtns();return _e.KL.createSVG(k,_e.KL.diamand,15,"toggle fix-pos mode").style("margin","3px").on("click",()=>_.brlayout.toggleKind("fix")),_e.KL.createSVG(k,_e.KL.circle,15,"toggle float mode").style("margin","3px").on("click",()=>_.brlayout.toggleKind("float")),_e.KL.createSVG(k,_e.KL.cross,15,"delete GED").style("margin","3px").on("click",()=>_.removeGed()),_.brlayout.setBrowserContent("
        Loading GED ...
        "),_.brlayout.setBrowserTitle("GED"),_.brlayout.toggleBrowserKind(w||"float"),new Promise(F=>{(0,_e.OA)().then(q=>{(0,L.Ys)("#ged_placeholder").text(""),q.ui.define(["sap/ui/model/json/JSONModel","sap/ui/core/mvc/XMLView"],(T,$)=>{let ee=new T({handle:null});$.create({viewName:"rootui5.canv.view.Ged",viewData:_.getUi5PanelData("Ged")}).then(re=>{re.setModel(ee),re.placeAt("ged_placeholder"),_.ged_view=re,_.registerForPadEvents(re.getController().padEventsReceiver.bind(re.getController())),A?.getPadPainter()?.selectObjectPainter(A),console.log("activate GED"),_.processChanges("sbits",_),F(!0)})})})})})()}showSection(A,w){var m=this;return(0,ze.Z)(function*(){if(m.testUI5())return!1;switch(A){case"Menu":case"ToolBar":break;case"StatusBar":m.activateStatusBar(w);break;case"Editor":return m.activateGed(m,null,!!w);case"ToolTips":m.setTooltipAllowed(w)}return!0})()}completeCanvasSnapDrawing(){this.pad&&(document&&!this.embed_canvas&&this._websocket&&(document.title=this.pad.fTitle),!this._all_sections_showed&&(this._all_sections_showed=!0,this.showSection("Menu",this.pad.TestBit(ce.kMenuBar)),this.showSection("StatusBar",this.pad.TestBit(ce.kShowEventStatus)),this.showSection("ToolBar",this.pad.TestBit(ce.kShowToolBar)),this.showSection("Editor",this.pad.TestBit(ce.kShowEditor)),this.showSection("ToolTips",this.pad.TestBit(ce.kShowToolTips)||this._highlight_connect)))}processHighlightConnect(A){if(!A||0==A.length||!this._highlight_connect||!this._websocket||this.doingDraw()||!this._websocket.canSend(2))return;let w=A[0]||A[1];if(!(w&&w.painter&&w.painter.snapid&&w.user_info))return;let m=w.painter.getPadPainter()||this;if(!m.snapid)return;let _=[m.snapid,w.painter.snapid,"0","0"];void 0!==w.user_info.binx&&void 0!==w.user_info.biny?(_[2]=w.user_info.binx.toString(),_[3]=w.user_info.biny.toString()):void 0!==w.user_info.bin&&(_[2]=w.user_info.bin.toString());let k=JSON.stringify(_);this._last_highlight_msg!=k&&(this._last_highlight_msg=k,this.sendWebsocket(`HIGHLIGHT:${k}`))}processChanges(A,w,m){if(!this._websocket||this._readonly||!this._websocket.canSend(2)||!(0,M.isStr)(A))return;let _="";switch(w||(w=this),A){case"sbits":_="STATUSBITS:"+this.getStatusBits();break;case"frame":case"zoom":(0,M.isFunc)(w.getWebPadOptions)||(w=w.getPadPainter()),(0,M.isFunc)(w.getWebPadOptions)&&(_="OPTIONS6:"+w.getWebPadOptions("only_this"));break;case"drawopt":w.snapid&&(_="DRAWOPT:"+JSON.stringify([w.snapid.toString(),w.getDrawOpt()||""]));break;case"pave_moved":if((0,M.isFunc)(w.fillWebObjectOptions)){let k=w.fillWebObjectOptions();k&&(_="PRIMIT6:"+(0,M.toJSON)(k))}break;case"logx":case"logy":case"logz":{let k=w.getPadPainter();k?.snapid&&k?.pad&&(w=k,A=`exec:${"SetLog"+A[3]}(${k.pad["fLog"+A[3]]})`);break}}!_&&w?.snapid&&"exec:"==A.slice(0,5)&&(_="PRIMIT6:"+(0,M.toJSON)({_typename:"TWebObjectOptions",snapid:w.snapid.toString()+(m?"#"+m:""),opt:A.slice(5),fcust:"exec",fopt:[]})),_?(console.log(`Sending ${_.length} ${_.slice(0,40)}`),this._websocket.send(_)):console.log(`Unprocessed changes ${A} for painter of ${w?.getObject()?._typename} subelem ${m}`)}selectActivePad(A,w,m){if(!this.snapid||!A)return;let _=null,k=!1,F=A.matchObjectType(Ve.clTButton);A.snapid&&this._websocket&&(_={_typename:"TWebPadClick",padid:A.snapid.toString(),objid:"",x:-1,y:-1,dbl:!1}),!A.is_active_pad&&!F&&(k=!0,this.forEachPainterInPad(q=>q.drawActiveBorder(null,q===A),"pads")),void 0!==w?.snapid&&_&&(k=!0,_.objid=w.snapid.toString()),m&&_&&(k=!0,_.x=Math.round(m.x||0),_.y=Math.round(m.y||0),m.dbl&&(_.dbl=!0)),_&&(k||F)&&this.sendWebsocket("PADCLICKED:"+(0,M.toJSON)(_))}getStatusBits(){let A=0;return this.hasEventStatus()&&(A|=ce.kShowEventStatus),this.hasGed()&&(A|=ce.kShowEditor),this.isTooltipAllowed()&&(A|=ce.kShowToolTips),this.use_openui&&(A|=ce.kMenuBar),A}produceJSON(){let A=this.getObject(),w=0==A.fFillStyle;w&&(A.fFillStyle=1001),this.normal_canvas||this.forEachPainterInPad(_=>{if(_.$secondary)return;let k=_.getObject();k?._typename&&A.fPrimitives.Add(k,_.getDrawOpt())},"objects");let m=(0,M.toJSON)(A);return w&&(A.fFillStyle=0),this.normal_canvas||A.fPrimitives.Clear(),m}static draw(A,w,m){return(0,ze.Z)(function*(){let _=!w;_&&(w=(0,M.create)(M.clTCanvas));let k=new Z(A,w);if(k.checkSpecialsInPrimitives(w),!_&&w.fCw&&w.fCh&&!(0,M.isBatchMode)()){let F=k.selectDom().node().getBoundingClientRect();!F.height&&F.width>.1*w.fCw&&(k.selectDom().style("width",w.fCw+"px").style("height",w.fCh+"px"),k._fixed_size=!0)}return k.decodeOptions(m),k.normal_canvas=!_,k.createCanvasSvg(0),k.addPadButtons(),_&&m.indexOf("noframe")<0&&Re(A,null),(0,$e.O5)({pp:k,active:!0}),k.drawPrimitives().then(()=>(k.showPadButtons(),k))})()}}function Y(v,A){return ue.apply(this,arguments)}function ue(){return(ue=(0,ze.Z)(function*(v,A){if(!v)return Promise.reject(Error("Painter not provided in ensureTCanvas"));let w=!1===A||"3d"==A?"noframe":"";return(v.getCanvSvg().empty()?Z.draw(v.getDom(),null,w):Promise.resolve(!0)).then(()=>(!1!==A&&v.getFrameSvg().select(".main_layer").empty()&&!v.getFramePainter()&&Re(v.getDom(),null,A),v.addToPadPrimitives(),v))})).apply(this,arguments)}function K(v,A){return J.apply(this,arguments)}function J(){return(J=(0,ze.Z)(function*(v,A){let w=(0,M.create)(M.clTCanvas),m=new Z(v,w);return m.normal_canvas=!1,m.addPadButtons(),m.syncDraw(!0).then(()=>m.redrawPadSnap(A)).then(()=>(m.confirmDraw(),m.showPadButtons(),m))})).apply(this,arguments)}function R(v,A,w){let m=new Ze.z4(v,A,!1);return m.disable_zooming=!0,Y(m,!1).then(()=>(w&&m.convertTo(w),m.redraw())).then(()=>m)}function P(v,A,w){let m=new Ie.nF(v,A);return Y(m,!1).then(()=>("3d"==w&&(m.mode3d=!0),m.redraw()))}},6116:(jr,At,Me)=>{"use strict";Me.d(At,{J9:()=>v,a4:()=>R,nF:()=>A,uI:()=>J});var ze=Me(4788),M=Me(9542),L=Me(2253),_e=Me(6458),De=Me(6367),$e=Me(6030),Ze=Me(3675),Ie=Me(4953),Ve=Me(4383),Re=Me(9622);function ce(w,m){if(!w)return;let _=w.getFramePainter();(0,M.isFunc)(_?.setTooltipEnabled)&&(_.setTooltipEnabled(m),_.processFrameTooltipEvent(null)),(0,M.isFunc)(w.control?.setTooltipEnabled)&&w.control.setTooltipEnabled(m)}let Z=null,Y="",ue=null;function K(w,m){return Z&&ue===w&&Y===m}function J(w,m){if(!M.settings.MoveResize||(0,M.isBatchMode)())return;let _=w,k=_.getPadPainter();if(k?._fast_drawing)return;function F(ee,re){function be(he,de){let I="js_"+he.replace(/[-]/g,"_"),U=ee.select("."+I);U.empty()&&(U=ee.append("path").classed(I,!0)),U.style("opacity",0).style("cursor",he).attr("d",de),re&&U.call(re)}be("nw-resize","M2,2h15v-5h-20v20h5Z"),be("ne-resize",`M${m.width-2},2h-15v-5h20v20h-5 Z`),be("sw-resize",`M2,${m.height-2}h15v5h-20v-20h5Z`),be("se-resize",`M${m.width-2},${m.height-2}h-15v5h20v-20h-5Z`),m.no_change_x||(be("w-resize",`M-3,18h5v${Math.max(0,m.height-36)}h-5Z`),be("e-resize",`M${m.width+3},18h-5v${Math.max(0,m.height-36)}h5Z`)),m.no_change_y||(be("n-resize",`M18,-3v5h${Math.max(0,m.width-36)}v-5Z`),be("s-resize",`M18,${m.height+3}v-5h${Math.max(0,m.width-36)}v5Z`))}const q=(ee,re,be,he)=>{if(ue=null,Y="",Z&&(Z.remove(),Z=null),!_.draw_g)return!1;let de=m.x,I=m.y;m.minwidth&&be600&&_.showContextMenu){let he=resize_se.node().getBoundingClientRect();_.showContextMenu("main",{clientX:he.left,clientY:he.top})}else m.canselect&&be<=600&&_.getPadPainter()?.selectObjectPainter(_)}});let $=(0,L.oh)().subject(Object);$.on("start",function(ee){if((0,Re.hj)(ee.sourceEvent)||Y)return;ee.sourceEvent.stopPropagation(),ee.sourceEvent.preventDefault(),ce(_,!1);let re=k.getPadRect(),be={x:m.x,y:m.y,width:m.width,height:m.height,acc_x1:m.x,acc_y1:m.y,acc_x2:m.x+m.width,acc_y2:m.y+m.height,pad_w:re.width,pad_h:re.height};ue=_,Y="resize",Z=(0,L.Ys)(_.draw_g.node().parentNode).append("rect").classed("zoom",!0).style("cursor",(0,L.Ys)(this).style("cursor")).attr("x",be.acc_x1).attr("y",be.acc_y1).attr("width",be.acc_x2-be.acc_x1).attr("height",be.acc_y2-be.acc_y1).property("drag_handle",be)}).on("drag",function(ee){if(!K(_,"resize"))return;ee.sourceEvent.preventDefault(),ee.sourceEvent.stopPropagation();let re=Z.property("drag_handle"),be=ee.dx,he=ee.dy,de=(0,L.Ys)(this);m.no_change_x&&(be=0),m.no_change_y&&(he=0),de.classed("js_nw_resize")?(re.acc_x1+=be,re.acc_y1+=he):de.classed("js_ne_resize")?(re.acc_x2+=be,re.acc_y1+=he):de.classed("js_sw_resize")?(re.acc_x1+=be,re.acc_y2+=he):de.classed("js_se_resize")?(re.acc_x2+=be,re.acc_y2+=he):de.classed("js_w_resize")?re.acc_x1+=be:de.classed("js_n_resize")?re.acc_y1+=he:de.classed("js_e_resize")?re.acc_x2+=be:de.classed("js_s_resize")&&(re.acc_y2+=he);let I=Math.max(0,re.acc_x1),U=Math.min(re.acc_x2,re.pad_w),H=Math.max(0,re.acc_y1),le=Math.min(re.acc_y2,re.pad_h);re.x=Math.min(I,U),re.y=Math.min(H,le),re.width=Math.abs(U-I),re.height=Math.abs(le-H),Z.attr("x",re.x).attr("y",re.y).attr("width",re.width).attr("height",re.height)}).on("end",function(ee){if(!K(_,"resize"))return;ee.sourceEvent.preventDefault();let re=Z.property("drag_handle");q(re.x,re.y,re.width,re.height)}),m.only_resize||_.draw_g.style("cursor","move").call(T),m.only_move||F(_.draw_g,$)}const R={hints_layer(){let w=this.getCanvPainter();return w?w.getLayerSvg("info_layer"):(0,L.Ys)(null)},isTooltipShown(){if(!this.tooltip_enabled||!this.isTooltipAllowed())return!1;let w=this.hints_layer().select(".objects_hints");return!w.empty()&&w.property("hints_pad")==this.getPadName()},setTooltipEnabled(w){void 0!==w&&(this.tooltip_enabled=w)},processFrameTooltipEvent(w,m){if(w?.handler){let bn=this.draw_g?this.draw_g.select(".main_layer"):null;if(!bn||bn.empty())w=null;else if(w.touch&&m){let rn=(0,L.d)(m,bn.node());w=rn&&1==rn.length?{touch:!0,x:rn[0][0],y:rn[0][1]}:null}else if(m){let rn=(0,L.cx)(m,bn.node());w={touch:!1,x:rn[0],y:rn[1]}}}let _=[],k=0,F=0,q=0,T=0,$=!1,ee=11,de=this.getFrameRect(),I=this.getPadPainter(),U=I.getPadWidth(),H=new Ie.G(160,ee),le=!this.isTooltipAllowed()||!this.tooltip_enabled;w&&le&&(w.disabled=!0),w&&(w.painters=!0),I&&(_=I.processPadTooltipEvent(w)),I?._deliver_webcanvas_events&&I?.is_active_pad&&w&&(0,M.isFunc)(I?.deliverWebCanvasEvent)&&I.deliverWebCanvasEvent("move",de.x+w.x,de.y+w.y,_),w?.touch&&(ee=15);for(let bn=0;bn<_.length;++bn){let rn=_[bn];if(rn){if(rn.painter&&void 0!==rn.user_info&&rn.painter.provideUserTooltip(rn.user_info),!rn.lines||0===rn.lines.length){_[bn]=null;continue}for(let qt=0;qt{q=Math.max(q,qt.length)}),rn.height=Math.round(rn.lines.length*ee*1.2+6-ee*(1.2-1)),void 0!==rn.color1&&"none"!==rn.color1&&(0!==T&&T!==rn.color1&&($=!0),T=rn.color1))}}let D=this.hints_layer(),oe=D.select(".objects_hints"),ge="",Ee="",Ge="",We=null,et=1e10,Tt=null,Bt=k>15,ve=w?Math.round(w.x)+","+Math.round(w.y):"";for(let bn=0;bn<(_?.length||0);++bn){if(!_[bn])continue;if(We||(We=_[bn]),_[bn].exact&&F<2&&(!We||!We.exact)){We=_[bn];break}if(!w||void 0===_[bn].x||void 0===_[bn].y)continue;let rn=(w.x-_[bn].x)**2+(w.y-_[bn].y)**2;rn1?We.lines[0]:We.name,ge=We.title||"",Ge=We.line,!Ge&&We.lines&&(Ge=We.lines.slice(1).join(" "))),this.showObjectStatus(Ee,ge,Ge,ve),!w||le||0===_.length||0===q||Bt&&!Tt)return void oe.remove();oe.empty()&&(oe=D.append("svg:g").attr("class","objects_hints").style("pointer-events","none"));let Je={x:0,y:0},ct=de.transform||"";I.iscan||(Je=(0,Ze.Yi)(this.getPadSvg(),Je),ct=`translate(${Je.x},${Je.y}) ${ct}`),oe.attr("transform",ct).property("last_point",w).property("hints_pad",this.getPadName());let je=oe.property("viewmode")||"",Ye=0,pt=w.x+de.hint_delta_x;if(Bt||1==k)je="single",pt+=15;else{let bn=.5,rn=.5;"left"==je?rn=.7:"right"==je&&(bn=.3),pt<=bn*de.width?(je="left",pt=20):pt>=rn*de.width?(je="right",pt=de.width-60):pt=oe.property("startx")}je!==oe.property("viewmode")&&(oe.property("viewmode",je),oe.selectAll("*").remove());let Ht=10,tn=10,Ct=-1111,Ot=-1111,sn=-Je.y,Mn=this.getCanvPainter(),Ln=Mn.getPadHeight()-de.y-Je.y;const In=bn=>{for(let rn=0;rn<_.length&&bn=bn-5&&qt.y<=bn+qt.height+5&&(bn=qt.y+10,rn=-1)}return bn};for(let bn=0;bn<_.length;++bn){let yn=function(){return function(){return function(dn){return dn<.8?"0":5*(dn-.8)}}},rn=_[bn],qt=oe.select(".painter_hint_"+bn);if(Bt&&rn!==Tt&&(rn=null),null===rn){qt.remove();continue}let Qt=qt.empty();Qt&&(qt=oe.append("svg:svg").attr("class","painter_hint_"+bn).attr("opacity",0).style("overflow","hidden").style("pointer-events","none")),"single"==je?Ht=w.touch?w.y-rn.height-5:Math.min(w.y+15,Ln-rn.height-3)+de.hint_delta_y:(tn=In(tn),-1111===Ct&&-1111===Ot&&(Ct=Ot=rn.x),Ct=Math.min(Ct,rn.x),Ot=Math.min(Ot,rn.x)),qt.attr("x",pt).attr("y",Ht).property("curry",Ht).property("gapy",tn),Ht+=rn.height+5,tn+=rn.height+5,Qt||qt.selectAll("*").remove(),qt.attr("width",60).attr("height",rn.height);let jt=qt.append("rect").attr("x",0).attr("y",0).attr("width",60).attr("height",rn.height).style("fill","lightgrey").style("pointer-events","none");if(k>1){let dn=$?rn.color1:rn.color2;dn&&"none"!==dn&&jt.style("stroke",dn)}jt.attr("stroke-width",rn.exact?3:1);for(let dn=0;dn<(rn.lines?rn.lines.length:0);dn++)if(null!==rn.lines[dn]){let ai=qt.append("svg:text").attr("text-anchor","start").attr("x",3).attr("y",3+dn*ee*1.2).attr("dy",".8em").style("fill","black").style("pointer-events","none").call(H.func).text(rn.lines[dn]),nr=(0,Ze.Yo)(ai,"bbox");Ye=Math.max(Ye,nr.width)}Qt&&(M.settings.TooltipAnimation>0?qt.transition().duration(M.settings.TooltipAnimation).attrTween("opacity",yn()):qt.attr("opacity",1))}Ye+=6;let $n=oe.selectAll("svg");if("right"==je&&pt+Ye>de.width-20&&(pt=de.width-Ye-20,$n.attr("x",pt)),"single"==je&&pt+Ye>U-de.x&&pt>Ye+20&&(pt-=Ye+20,$n.attr("x",pt)),"single"!==je&&tn=pt-5&&$n.attr("y",function(){return(0,L.Ys)(this).property("gapy")});else if("single"!==je&&Ht>Ln){let bn=Math.max(Ln-Ht-10,sn);bn<0&&$n.attr("y",function(){return(0,L.Ys)(this).property("curry")+bn})}Ye>10&&$n.attr("width",Ye).select("rect").attr("width",Ye),oe.property("startx",pt),Mn._highlight_connect&&(0,M.isFunc)(Mn.processHighlightConnect)&&Mn.processHighlightConnect(_)},assign(w){Object.assign(w,this,{tooltip_enabled:!0})}};function P(w){(0,Re.DW)("\n.jsroot rect.h1bin { stroke: #4572A7; fill: #4572A7; opacity: 0; }\n.jsroot rect.zoom { stroke: steelblue; fill-opacity: 0.1; }\n.jsroot path.zoom { stroke: steelblue; fill-opacity: 0.1; }\n.jsroot svg:not(:root) { overflow: hidden; }",w.node())}const v={addBasicInteractivity(){R.assign(this),!this._frame_rotate&&!this._frame_fixpos&&J(this,{obj:this,x:this._frame_x,y:this._frame_y,width:this.getFrameWidth(),height:this.getFrameHeight(),only_resize:!0,minwidth:20,minheight:20,redraw:()=>this.sizeChanged()}),P(this.draw_g);let w=this.draw_g.select(".main_layer");w.style("pointer-events","visibleFill").property("handlers_set",0);let _=this.getPadPainter()?._fast_drawing?0:1;if(w.property("handlers_set")!=_){let F=_?this.processFrameTooltipEvent.bind(this,null):null,q=_?this.processFrameTooltipEvent.bind(this,{handler:!0,touch:!1}):null;if(w.property("handlers_set",_).on("mouseenter",q).on("mousemove",q).on("mouseleave",F),M.browser.touches){let T=_?this.processFrameTooltipEvent.bind(this,{handler:!0,touch:!0}):null;w.on("touchstart",T).on("touchmove",T).on("touchend",F).on("touchcancel",F)}}w.attr("x",0).attr("y",0).attr("width",this.getFrameWidth()).attr("height",this.getFrameHeight());let k=this.hints_layer().select(".objects_hints");!k.empty()&&this.isTooltipAllowed()&&k.property("hints_pad")==this.getPadName()&&setTimeout(this.processFrameTooltipEvent.bind(this,k.property("last_point"),null),10)},addFrameInteractivity(w){var m=this;return(0,ze.Z)(function*(){let _=m.getPadPainter(),k=m.getFrameSvg();if(_?._fast_drawing||k.empty())return m;if(w){let T=k.selectAll(".x2axis_container"),$=k.selectAll(".y2axis_container");return M.settings.ContextMenu&&(T.on("contextmenu",ee=>m.showContextMenu("x2",ee)),$.on("contextmenu",ee=>m.showContextMenu("y2",ee))),T.on("mousemove",ee=>m.showAxisStatus("x2",ee)),$.on("mousemove",ee=>m.showAxisStatus("y2",ee)),m}let F=k.selectAll(".xaxis_container"),q=k.selectAll(".yaxis_container");return m.can_zoom_x=m.can_zoom_y=M.settings.Zooming,_?.options&&(_.options.NoZoomX&&(m.can_zoom_x=!1),_.options.NoZoomY&&(m.can_zoom_y=!1)),k.property("interactive_set")||(m.addFrameKeysHandler(),m.last_touch=new Date(0),m.zoom_kind=0,m.zoom_rect=null,m.zoom_origin=null,m.zoom_curr=null,m.touch_cnt=0),M.settings.Zooming&&!m.projection&&(M.settings.ZoomMouse&&(k.on("mousedown",m.startRectSel.bind(m)),k.on("dblclick",m.mouseDoubleClick.bind(m))),M.settings.ZoomWheel&&k.on("wheel",m.mouseWheel.bind(m))),M.browser.touches&&(M.settings.Zooming&&M.settings.ZoomTouch&&!m.projection||M.settings.ContextMenu)&&k.on("touchstart",m.startTouchZoom.bind(m)),M.settings.ContextMenu&&(M.browser.touches&&(F.on("touchstart",m.startTouchMenu.bind(m,"x")),q.on("touchstart",m.startTouchMenu.bind(m,"y"))),k.on("contextmenu",T=>m.showContextMenu("",T)),F.on("contextmenu",T=>m.showContextMenu("x",T)),q.on("contextmenu",T=>m.showContextMenu("y",T))),F.on("mousemove",T=>m.showAxisStatus("x",T)),q.on("mousemove",T=>m.showAxisStatus("y",T)),k.property("interactive_set",!0),m})()},addFrameKeysHandler(){this.keys_handler||typeof window>"u"||(this.keys_handler=w=>this.processKeyPress(w),window.addEventListener("keydown",this.keys_handler,!1))},processKeyPress(w){let _=this.selectDom(),k=w.key,F=this.getPadPainter();if(!M.settings.HandleKeys||_.empty()||!1===this.enabledKeys||(0,_e.X8)()!==F||["PageUp","PageDown","ArrowLeft","ArrowUp","ArrowRight","ArrowDown","PrintScreen","*"].indexOf(k)<0)return!1;w.shiftKey&&(k="Shift "+k),w.altKey&&(k="Alt "+k),w.ctrlKey&&(k="Ctrl "+k);let q={name:"x",dleft:0,dright:0};switch(k){case"ArrowLeft":q.dleft=-1,q.dright=1;break;case"ArrowRight":q.dleft=1,q.dright=-1;break;case"Ctrl ArrowLeft":q.dleft=q.dright=-1;break;case"Ctrl ArrowRight":q.dleft=q.dright=1;break;case"ArrowUp":q.name="y",q.dleft=1,q.dright=-1;break;case"ArrowDown":q.name="y",q.dleft=-1,q.dright=1;break;case"Ctrl ArrowUp":q.name="y",q.dleft=q.dright=1;break;case"Ctrl ArrowDown":q.name="y",q.dleft=q.dright=-1}if(q.dleft||q.dright){if(!M.settings.Zooming||this.mode3d&&0!==k.indexOf("Ctrl"))return!1;this.analyzeMouseWheelEvent(null,q,.5),this.zoom(q.name,q.min,q.max),q.changed&&this.zoomChangedInteractive(q.name,!0),w.stopPropagation(),w.preventDefault()}else{let T=F?.findPadButton(k);T&&(F.clickPadButton(T),w.stopPropagation(),w.preventDefault())}return!0},processFrameClick(w,m){let _=this.getPadPainter();if(!_)return;w.painters=!0,w.disabled=!0;let q,k=_.processPadTooltipEvent(w),F=null;for(let T=0;T100||1!==(w.which||w.button))return;w.preventDefault();let m=this.getFrameSvg(),_=(0,L.cx)(w,m.node());this.clearInteractiveElements();let k=this.getFrameWidth(),F=this.getFrameHeight();this.zoom_lastpos=_,this.zoom_curr=[Math.max(0,Math.min(k,_[0])),Math.max(0,Math.min(F,_[1]))],this.zoom_origin=[0,0],this.zoom_second=!1,_[0]<0||_[0]>k?(this.zoom_second=_[0]>k&&this.y2_handle,this.zoom_kind=3,this.zoom_origin[1]=this.zoom_curr[1],this.zoom_curr[0]=k,this.zoom_curr[1]+=1):_[1]<0||_[1]>F?(this.zoom_second=_[1]<0&&this.x2_handle,this.zoom_kind=2,this.zoom_origin[0]=this.zoom_curr[0],this.zoom_curr[0]+=1,this.zoom_curr[1]=F):(this.zoom_kind=1,this.zoom_origin[0]=this.zoom_curr[0],this.zoom_origin[1]=this.zoom_curr[1]),(0,L.Ys)(window).on("mousemove.zoomRect",this.moveRectSel.bind(this)).on("mouseup.zoomRect",this.endRectSel.bind(this),!0),this.zoom_rect=null,ce(this,!1),w.stopPropagation(),1!=this.zoom_kind&&setTimeout(()=>this.startLabelsMove(),500)},startLabelsMove(){if(this.zoom_rect)return;let w=2==this.zoom_kind?this.x_handle:this.y_handle;!w||!(0,M.isFunc)(w.processLabelsMove)||!this.zoom_lastpos||w.processLabelsMove("start",this.zoom_lastpos)&&(this.zoom_labels=w)},moveRectSel(w){if(0==this.zoom_kind||this.zoom_kind>100)return;w.preventDefault();let m=(0,L.cx)(w,this.getFrameSvg().node());if(this.zoom_labels)return this.zoom_labels.processLabelsMove("move",m);switch(this.zoom_lastpos[0]=m[0],this.zoom_lastpos[1]=m[1],m[0]=Math.max(0,Math.min(this.getFrameWidth(),m[0])),m[1]=Math.max(0,Math.min(this.getFrameHeight(),m[1])),this.zoom_kind){case 1:this.zoom_curr[0]=m[0],this.zoom_curr[1]=m[1];break;case 2:this.zoom_curr[0]=m[0];break;case 3:this.zoom_curr[1]=m[1]}let _=Math.min(this.zoom_origin[0],this.zoom_curr[0]),k=Math.min(this.zoom_origin[1],this.zoom_curr[1]),F=Math.abs(this.zoom_curr[0]-this.zoom_origin[0]),q=Math.abs(this.zoom_curr[1]-this.zoom_origin[1]);if(!this.zoom_rect){if(1!=this.zoom_kind&&(F<2||q<2))return;this.zoom_rect=this.getFrameSvg().append("rect").attr("class","zoom").style("pointer-events","none")}this.zoom_rect.attr("x",_).attr("y",k).attr("width",F).attr("height",q)},endRectSel(w){if(0==this.zoom_kind||this.zoom_kind>100)return;w.preventDefault(),(0,L.Ys)(window).on("mousemove.zoomRect",null).on("mouseup.zoomRect",null);let m=(0,L.cx)(w,this.getFrameSvg().node()),_=this.zoom_kind;if(this.zoom_labels)this.zoom_labels.processLabelsMove("stop",m);else{let F=[this.can_zoom_x,this.can_zoom_y];switch(m[0]=Math.max(0,Math.min(this.getFrameWidth(),m[0])),m[1]=Math.max(0,Math.min(this.getFrameHeight(),m[1])),this.zoom_kind){case 1:this.zoom_curr[0]=m[0],this.zoom_curr[1]=m[1];break;case 2:this.zoom_curr[0]=m[0],F[1]=!1;break;case 3:this.zoom_curr[1]=m[1],F[0]=!1}let q,T,$,ee,re=!1,be=this.swap_xy?1:0,he=1-be,de="x",I="y";F[be]&&Math.abs(this.zoom_curr[be]-this.zoom_origin[be])>10&&(this.zoom_second&&2==this.zoom_kind&&(de="x2"),q=Math.min(this.revertAxis(de,this.zoom_origin[be]),this.revertAxis(de,this.zoom_curr[be])),T=Math.max(this.revertAxis(de,this.zoom_origin[be]),this.revertAxis(de,this.zoom_curr[be])),re=!0),F[he]&&Math.abs(this.zoom_curr[he]-this.zoom_origin[he])>10&&(this.zoom_second&&3==this.zoom_kind&&(I="y2"),$=Math.min(this.revertAxis(I,this.zoom_origin[he]),this.revertAxis(I,this.zoom_curr[he])),ee=Math.max(this.revertAxis(I,this.zoom_origin[he]),this.revertAxis(I,this.zoom_curr[he])),re=!0),"x2"==de?(this.zoomChangedInteractive(de,!0),this.zoomSingle(de,q,T),_=0):"y2"==I?(this.zoomChangedInteractive(I,!0),this.zoomSingle(I,$,ee),_=0):re&&(this.zoomChangedInteractive("x",!0),this.zoomChangedInteractive("y",!0),this.zoom(q,T,$,ee),_=0)}let k=1===_?{x:this.zoom_origin[0],y:this.zoom_origin[1]}:null;switch(this.clearInteractiveElements(),_){case 1:this.processFrameClick(k);break;case 2:this.getPadPainter()?.selectObjectPainter(this,null,"xaxis");break;case 3:this.getPadPainter()?.selectObjectPainter(this,null,"yaxis")}},mouseDoubleClick(w){w.preventDefault();let m=(0,L.cx)(w,this.getFrameSvg().node()),_=this.getFrameWidth(),k=this.getFrameHeight();this.clearInteractiveElements();let F=m[0]>=0&&m[0]<=_,q=m[1]>=0&&m[1]<=k;if(F&&q&&this._dblclick_handler&&this.processFrameClick({x:m[0],y:m[1]},!0))return;let T=(this.can_zoom_x?"x":"")+(this.can_zoom_y?"y":"")+"z";if(F){if(!q){if(!this.can_zoom_x)return;T=this.swap_xy?"y":"x",m[1]<0&&this[T+"2_handle"]&&(T+="2")}}else{if(!this.can_zoom_y)return;T=this.swap_xy?"x":"y",m[0]>_&&this[T+"2_handle"]&&(T+="2")}this.unzoom(T).then($=>{if($)return;let ee=this.getPadPainter(),re=this.getFrameRect();ee&&ee.selectObjectPainter(ee,{x:m[0]+re.x,y:m[1]+re.y,dbl:!0})})},startTouchZoom(w){if(0!=this.zoom_kind||Y)return w.preventDefault(),void w.stopPropagation();let m=(0,L.d)(w,this.getFrameSvg().node());if(this.touch_cnt+=1,1==m.length){let T=new Date,$=T.getTime()-this.last_touch.getTime();this.last_touch=T,$<300&&this.zoom_curr&&Math.abs(this.zoom_curr[0]-m[0][0])<30&&Math.abs(this.zoom_curr[1]-m[0][1])<30?(w.preventDefault(),w.stopPropagation(),this.clearInteractiveElements(),this.unzoom("xyz"),this.last_touch=new Date(0),this.getFrameSvg().on("touchcancel",null).on("touchend",null,!0)):M.settings.ContextMenu&&(this.zoom_curr=m[0],this.getFrameSvg().on("touchcancel",this.endTouchSel.bind(this)).on("touchend",this.endTouchSel.bind(this)),w.preventDefault(),w.stopPropagation())}if(2!=m.length||!M.settings.Zooming||!M.settings.ZoomTouch)return;w.preventDefault(),w.stopPropagation(),this.clearInteractiveElements(),this.getFrameSvg().on("touchcancel",null).on("touchend",null);let _=m[0],k=m[1],F=this.getFrameWidth(),q=this.getFrameHeight();this.zoom_curr=[Math.min(_[0],k[0]),Math.min(_[1],k[1])],this.zoom_origin=[Math.max(_[0],k[0]),Math.max(_[1],k[1])],this.zoom_second=!1,this.zoom_curr[0]<0||this.zoom_curr[0]>F?(this.zoom_second=this.zoom_curr[0]>F&&this.y2_handle,this.zoom_kind=103,this.zoom_curr[0]=0,this.zoom_origin[0]=F):this.zoom_origin[1]>q||this.zoom_origin[1]<0?(this.zoom_second=this.zoom_origin[1]<0&&this.x2_handle,this.zoom_kind=102,this.zoom_curr[1]=0,this.zoom_origin[1]=q):this.zoom_kind=101,Y="zoom",ce(this,!1),this.zoom_rect=this.getFrameSvg().append("rect").attr("class","zoom").attr("id","zoomRect").attr("x",this.zoom_curr[0]).attr("y",this.zoom_curr[1]).attr("width",this.zoom_origin[0]-this.zoom_curr[0]).attr("height",this.zoom_origin[1]-this.zoom_curr[1]),(0,L.Ys)(window).on("touchmove.zoomRect",this.moveTouchZoom.bind(this)).on("touchcancel.zoomRect",this.endTouchZoom.bind(this)).on("touchend.zoomRect",this.endTouchZoom.bind(this))},moveTouchZoom(w){if(this.zoom_kind<100)return;w.preventDefault();let m=(0,L.d)(w,this.getFrameSvg().node());if(2!=m.length)return this.clearInteractiveElements();let _=m[0],k=m[1];103!=this.zoom_kind&&(this.zoom_curr[0]=Math.min(_[0],k[0]),this.zoom_origin[0]=Math.max(_[0],k[0])),102!=this.zoom_kind&&(this.zoom_curr[1]=Math.min(_[1],k[1]),this.zoom_origin[1]=Math.max(_[1],k[1])),this.zoom_rect.attr("x",this.zoom_curr[0]).attr("y",this.zoom_curr[1]).attr("width",this.zoom_origin[0]-this.zoom_curr[0]).attr("height",this.zoom_origin[1]-this.zoom_curr[1]),(this.zoom_origin[0]-this.zoom_curr[0]>10||this.zoom_origin[1]-this.zoom_curr[1]>10)&&ce(this,!1),w.stopPropagation()},endTouchZoom(w){if(this.getFrameSvg().on("touchcancel",null).on("touchend",null),0===this.zoom_kind){w.preventDefault();let de=(new Date).getTime()-this.last_touch.getTime();de>500&&de<2e3&&!this.isTooltipShown()?(this.showContextMenu("main",{clientX:this.zoom_curr[0],clientY:this.zoom_curr[1]}),this.last_touch=new Date(0)):this.clearInteractiveElements()}if(this.zoom_kind<100)return;Y="",w.preventDefault(),(0,L.Ys)(window).on("touchmove.zoomRect",null).on("touchend.zoomRect",null).on("touchcancel.zoomRect",null);let m,_,k,F,q=!1,T=this.swap_xy?1:0,$=1-T,ee=[!0,!0],re="x",be="y";102===this.zoom_kind&&(ee[1]=!1),103===this.zoom_kind&&(ee[0]=!1),ee[T]&&Math.abs(this.zoom_curr[T]-this.zoom_origin[T])>10&&(this.zoom_second&&102==this.zoom_kind&&(re="x2"),m=Math.min(this.revertAxis(re,this.zoom_origin[T]),this.revertAxis(re,this.zoom_curr[T])),_=Math.max(this.revertAxis(re,this.zoom_origin[T]),this.revertAxis(re,this.zoom_curr[T])),q=!0),ee[$]&&Math.abs(this.zoom_curr[$]-this.zoom_origin[$])>10&&(this.zoom_second&&103==this.zoom_kind&&(be="y2"),k=Math.min(this.revertAxis(be,this.zoom_origin[$]),this.revertAxis(be,this.zoom_curr[$])),F=Math.max(this.revertAxis(be,this.zoom_origin[$]),this.revertAxis(be,this.zoom_curr[$])),q=!0),this.clearInteractiveElements(),this.last_touch=new Date(0),"x2"==re?(this.zoomChangedInteractive(re,!0),this.zoomSingle(re,m,_)):"y2"==be?(this.zoomChangedInteractive(be,!0),this.zoomSingle(be,k,F)):q&&(this.zoomChangedInteractive("x",!0),this.zoomChangedInteractive("y",!0),this.zoom(m,_,k,F)),w.stopPropagation()},analyzeMouseWheelEvent(w,m,_,k,F){let q=F?this[m.name+"2_handle"]:null;if(q)return m.second=Object.assign({},m),q.analyzeWheelEvent(w,_,m.second,k);let T=this[m.name+"_handle"];if(T)return T.analyzeWheelEvent(w,_,m,k);console.error(`Fail to analyze zooming event for ${m.name}`)},isAllowedDefaultYZooming(){if(this.self_drawaxes)return!0;let w=this.getPadPainter();if(w?.painters)for(let m=0;m=0&&k[1]<=q,k[1]<0),this.can_zoom_y&&this.analyzeMouseWheelEvent(w,this.swap_xy?m:_,1-k[1]/q,k[0]>=0&&k[0]<=F,k[0]>F),this.zoom(m.min,m.max,_.min,_.max),m.changed&&this.zoomChangedInteractive("x",!0),_.changed&&this.zoomChangedInteractive("y",!0),m.second&&(this.zoomSingle("x2",m.second.min,m.second.max),m.second.changed&&this.zoomChangedInteractive("x2",!0)),_.second&&(this.zoomSingle("y2",_.second.min,_.second.max),_.second.changed&&this.zoomChangedInteractive("y2",!0))},showContextMenu(w,m,_){if("zoom_kind"in this&&this.zoom_kind>100)return;let k=this,F=null,q=!1,T=null;if(m.stopPropagation)if(m.preventDefault(),m.stopPropagation(),"painter"==w&&_)k=_,w="";else if(w)("x"==w||"y"==w||"z"==w)&&(F=this.getMainPainter(!0),this.v7_frame&&(0,M.isFunc)(F?.v7EvalAttr)&&(F=null));else{let $=(0,L.cx)(m,this.getFrameSvg().node()),ee=(0,L.d)(m,this.getFrameSvg().node()),re=this.getPadPainter(),be=null,he=null;if(T=this,1===ee.length?be={x:ee[0][0],y:ee[0][1],touch:!0}:2===$.length&&(be={x:$[0],y:$[1],touch:!1}),be&&re){be.painters=!0;let de=re.processPadTooltipEvent(be),I=1e3;for(let U=0;U0&&be.x<20&&be.y>0&&be.y<20),T.setLastEventPos(be)}else"painter"==w&&_&&(k=_,w="");F||(F=k),(0,M.isFunc)(k?.fillContextMenu)&&(this.clearInteractiveElements(),(0,Ve.Z)(m,k).then($=>{let ee=$.painter.fillContextMenu($,w,_);T&&(!ee||q&&"frame"!==w)&&(ee=T.fillContextMenu($)),ee&&F.fillObjectExecMenu($,w).then(re=>{ce(re.painter,!1),re.show().then(()=>ce(re.painter,!0))})}))},startTouchMenu(w,m){let _=(0,L.d)(m,this.getFrameSvg().node());if(1!=_.length)return;w||(w="main");let k="touch_"+w;m.sourceEvent.preventDefault(),m.sourceEvent.stopPropagation(),this[k]={dt:new Date,pos:_[0]};let F=this.endTouchMenu.bind(this,w);this.getFrameSvg().on("touchcancel",F).on("touchend",F)},endTouchMenu(w,m){let _="touch_"+w;if(!(_ in this))return;m.sourceEvent.preventDefault(),m.sourceEvent.stopPropagation();let k=(new Date).getTime()-this[_].dt.getTime();if(this.getFrameSvg().on("touchcancel",null).on("touchend",null),k>500){let F=this.getFrameSvg().node().getBoundingClientRect();this.showContextMenu(w,{clientX:F.left+this[_].pos[0],clientY:F.top+this[_].pos[1]})}delete this[_]},clearInteractiveElements(){(0,Ve.W)(),this.zoom_kind=0,this.zoom_rect&&(this.zoom_rect.remove(),delete this.zoom_rect),delete this.zoom_curr,delete this.zoom_origin,delete this.zoom_lastpos,delete this.zoom_labels,ce(this,!0)},assign(w){Object.assign(w,this)}};class A extends _e.tK{constructor(m,_){super(m,_&&_.$dummy?null:_),this.zoom_kind=0,this.mode3d=!1,this.shrink_frame_left=0,this.xmin=this.xmax=0,this.ymin=this.ymax=0,this.ranges_set=!1,this.axes_drawn=!1,this.keys_handler=null,this.projection=0}getFramePainter(){return this}is_root6(){return!0}getObject(m){return"xaxis"===m?this.xaxis:"yaxis"===m?this.yaxis:super.getObject()}setFrameActive(m){this.enabledKeys=!(!m||!M.settings.HandleKeys),this.control&&(this.control.enableKeys=this.enabledKeys)}shrinkFrame(m,_){this.fX1NDC+=m,this.fX2NDC-=_}setLastEventPos(m){this.fLastEventPnt=m}getLastEventPos(){return this.fLastEventPnt}getProjectionFunc(){switch(this.projection){case 1:return(m,_)=>{const k=Math.PI/180,F=m/2*k,q=_*k,T=Math.sqrt(2),$=2*T/Math.PI,ee=Math.cos(q),re=Math.sqrt(1+ee*Math.cos(F));return{x:ee*Math.sin(F)*2*T/re/$/k,y:Math.sin(q)*T/re/$/k}};case 2:return(m,_)=>({x:m,y:Math.log(Math.tan((Math.PI/2+_/180*Math.PI)/2))});case 3:return(m,_)=>({x:m*Math.cos(_/180*Math.PI),y:_});case 4:return(m,_)=>({x:m*(2*Math.cos(2*_/180*Math.PI/3)-1),y:180*Math.sin(_/180*Math.PI/3)})}}recalculateRange(m){this.projection=m||0,2==this.projection&&(this.scale_ymin<=-90||this.scale_ymax>=90)&&(console.warn(`Mercator Projection: Latitude out of range ${this.scale_ymin} ${this.scale_ymax}`),this.projection=0);let _=this.getProjectionFunc();if(!_)return;let k=[_(this.scale_xmin,this.scale_ymin),_(this.scale_xmin,this.scale_ymax),_(this.scale_xmax,this.scale_ymax),_(this.scale_xmax,this.scale_ymin)];this.scale_xmin<0&&this.scale_xmax>0&&(k.push(_(0,this.scale_ymin)),k.push(_(0,this.scale_ymax))),this.scale_ymin<0&&this.scale_ymax>0&&(k.push(_(this.scale_xmin,0)),k.push(_(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=k[0].x,this.scale_ymin=this.scale_ymax=k[0].y;for(let F=1;F1&&this.applyAxisZoom("y"),he>2&&this.applyAxisZoom("z")}be&&!be._checked_zooming&&(be._checked_zooming=!0,be.options.minimum!==M.kNoZoom&&(this.zoom_zmin=be.options.minimum,this.zoom_zmax=this.zmax),be.options.maximum!==M.kNoZoom&&(this.zoom_zmax=be.options.maximum,void 0===this.zoom_zmin&&(this.zoom_zmin=this.zmin)))}setAxes2Ranges(m,_,k,F,q,T,$,ee){m&&(this.x2axis=_,this.x2min=k,this.x2max=F),q&&(this.y2axis=T,this.y2min=$,this.y2max=ee)}getAxis(m){switch(m){case"x":return this.xaxis;case"y":return this.yaxis;case"z":return this.zaxis;case"x2":return this.x2axis;case"y2":return this.y2axis}return null}applyPadUserRange(m,_){if(!m)return;let k=m[`fU${_}min`],F=m[`fU${_}max`],q=1e-7;if("x"==_){if(Math.abs(m.fX1)>q||Math.abs(m.fX2-1)>q){let re=m.fX2-m.fX1;k=m.fX1+re*m.fLeftMargin,F=m.fX2-re*m.fRightMargin}}else if(Math.abs(m.fY1)>q||Math.abs(m.fY2-1)>q){let re=m.fY2-m.fY1;k=m.fY1+re*m.fBottomMargin,F=m.fY2-re*m.fTopMargin}if(k>=F||Math.abs(k)0&&(k=Math.exp(k*Math.log(10)),F=Math.exp(F*Math.log(10)));let T=_;this.swap_xy&&(T="x"==_?"y":"x");let $=`scale_${T}min`,ee=`scale_${T}max`;q=1e-7*(this[ee]-this[$]),(Math.abs(k-this[$])>q||Math.abs(F-this[ee])>q)&&(this[`zoom_${T}min`]=k,this[`zoom_${T}max`]=F)}applyAxisZoom(m){if(this.zoomChangedInteractive(m))return;this[`zoom_${m}min`]=this[`zoom_${m}max`]=0;const _=this.getAxis(m);_?.TestBit(_e.VO.kAxisRange)&&_.fFirst!==_.fLast&&(_.fFirst>1||_.fLast<_.fNbins)&&(this[`zoom_${m}min`]=_.fFirst>1?_.GetBinLowEdge(_.fFirst):_.fXmin,this[`zoom_${m}max`]=_.fLast<_.fNbins?_.GetBinLowEdge(_.fLast+1):_.fXmax,_.InvertBit(_e.VO.kAxisRange),_.fFirst=1,_.fLast=_.fNbins)}createXY(m){this.cleanXY(),m||(m={ndim:1}),this.swap_xy=m.swap_xy||!1,this.reverse_x=m.reverse_x||!1,this.reverse_y=m.reverse_y||!1,this.logx=this.logy=0;let _=this.getFrameWidth(),k=this.getFrameHeight(),q=this.getPadPainter().getRootPad();if(this.scale_xmin=this.xmin,this.scale_xmax=this.xmax,this.scale_ymin=this.ymin,this.scale_ymax=this.ymax,m.extra_y_space&&((this.swap_xy?q.fLogx:q.fLogy)&&this.scale_ymax>0?this.scale_ymax=Math.exp(1.1*Math.log(this.scale_ymax)):this.scale_ymax+=.1*(this.scale_ymax-this.scale_ymin)),m.check_pad_range&&(this.applyAxisZoom("x"),m.ndim>1&&this.applyAxisZoom("y"),m.ndim>2&&this.applyAxisZoom("z"),"pad_range"===m.check_pad_range)){let T=this.getCanvPainter();(!T||!T.online_canvas)&&(this.applyPadUserRange(q,"x"),this.applyPadUserRange(q,"y"))}m.zoom_ymin!=m.zoom_ymax&&this.zoom_ymin==this.zoom_ymax&&!this.zoomChangedInteractive("y")&&(this.zoom_ymin=m.zoom_ymin,this.zoom_ymax=m.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),this.recalculateRange(m.Proj),this.x_handle=new $e.z4(this.getDom(),this.xaxis,!0),this.x_handle.setPadName(this.getPadName()),this.x_handle.setHistPainter(m.hist_painter,"x"),this.x_handle.configureAxis("xaxis",this.xmin,this.xmax,this.scale_xmin,this.scale_xmax,this.swap_xy,this.swap_xy?[0,k]:[0,_],{reverse:this.reverse_x,log:this.swap_xy?q.fLogy:q.fLogx,symlog:this.swap_xy?m.symlog_y:m.symlog_x,logcheckmin:this.swap_xy,logminfactor:1e-4}),this.x_handle.assignFrameMembers(this,"x"),this.y_handle=new $e.z4(this.getDom(),this.yaxis,!0),this.y_handle.setPadName(this.getPadName()),this.y_handle.setHistPainter(m.hist_painter,"y"),this.y_handle.configureAxis("yaxis",this.ymin,this.ymax,this.scale_ymin,this.scale_ymax,!this.swap_xy,this.swap_xy?[0,_]:[0,k],{reverse:this.reverse_y,log:this.swap_xy?q.fLogx:q.fLogy,symlog:this.swap_xy?m.symlog_x:m.symlog_y,logcheckmin:m.ndim<2||this.swap_xy,log_min_nz:m.ymin_nz&&m.ymin_nz<.01*this.ymax?.3*m.ymin_nz:0,logminfactor:3e-4}),this.y_handle.assignFrameMembers(this,"y"),this.setRootPadRange(q)}createXY2(m){m||(m={}),this.reverse_x2=m.reverse_x||!1,this.reverse_y2=m.reverse_y||!1,this.logx2=this.logy2=0;let _=this.getFrameWidth(),k=this.getFrameHeight(),q=this.getPadPainter().getRootPad();m.second_x&&(this.scale_x2min=this.x2min,this.scale_x2max=this.x2max),m.second_y&&(this.scale_y2min=this.y2min,this.scale_y2max=this.y2max),m.extra_y_space&&m.second_y&&((this.swap_xy?q.fLogx:q.fLogy)&&this.scale_y2max>0?this.scale_y2max=Math.exp(1.1*Math.log(this.scale_y2max)):this.scale_y2max+=.1*(this.scale_y2max-this.scale_y2min)),this.zoom_x2min!=this.zoom_x2max&&m.second_x&&(this.scale_x2min=this.zoom_x2min,this.scale_x2max=this.zoom_x2max),this.zoom_y2min!=this.zoom_y2max&&m.second_y&&(this.scale_y2min=this.zoom_y2min,this.scale_y2max=this.zoom_y2max),m.second_x&&(this.x2_handle=new $e.z4(this.getDom(),this.x2axis,!0),this.x2_handle.setPadName(this.getPadName()),this.x2_handle.setHistPainter(m.hist_painter,"x"),this.x2_handle.configureAxis("x2axis",this.x2min,this.x2max,this.scale_x2min,this.scale_x2max,this.swap_xy,this.swap_xy?[0,k]:[0,_],{reverse:this.reverse_x2,log:this.swap_xy?q.fLogy:q.fLogx,logcheckmin:this.swap_xy,logminfactor:1e-4}),this.x2_handle.assignFrameMembers(this,"x2")),m.second_y&&(this.y2_handle=new $e.z4(this.getDom(),this.y2axis,!0),this.y2_handle.setPadName(this.getPadName()),this.y2_handle.setHistPainter(m.hist_painter,"y"),this.y2_handle.configureAxis("y2axis",this.y2min,this.y2max,this.scale_y2min,this.scale_y2max,!this.swap_xy,this.swap_xy?[0,_]:[0,k],{reverse:this.reverse_y2,log:this.swap_xy?q.fLogx:q.fLogy,logcheckmin:m.ndim<2||this.swap_xy,log_min_nz:m.ymin_nz&&m.ymin_nz<.01*this.y2max?.3*m.ymin_nz:0,logminfactor:3e-4}),this.y2_handle.assignFrameMembers(this,"y2"))}getGrFuncs(m,_){let k=m&&this.grx2,F=_&&this.gry2;return k||F?{use_x2:k,grx:k?this.grx2:this.grx,logx:this.logx,x_handle:k?this.x2_handle:this.x_handle,scale_xmin:k?this.scale_x2min:this.scale_xmin,scale_xmax:k?this.scale_x2max:this.scale_xmax,use_y2:F,gry:F?this.gry2:this.gry,logy:this.logy,y_handle:F?this.y2_handle:this.y_handle,scale_ymin:F?this.scale_y2min:this.scale_ymin,scale_ymax:F?this.scale_y2max:this.scale_ymax,swap_xy:this.swap_xy,fp:this,revertAxis(q,T){return"x"==q&&this.use_x2&&(q="x2"),"y"==q&&this.use_y2&&(q="y2"),this.fp.revertAxis(q,T)},axisAsText(q,T){return"x"==q&&this.use_x2&&(q="x2"),"y"==q&&this.use_y2&&(q="y2"),this.fp.axisAsText(q,T)}}:this}setRootPadRange(m,_){if(!m||!this.ranges_set)return;_?(m.fUxmin=m.fUymin=-.9,m.fUxmax=m.fUymax=.9):(m.fLogx=this.swap_xy?this.logy:this.logx,m.fUxmin=m.fLogx?Math.log10(this.scale_xmin):this.scale_xmin,m.fUxmax=m.fLogx?Math.log10(this.scale_xmax):this.scale_xmax,m.fLogy=this.swap_xy?this.logx:this.logy,m.fUymin=m.fLogy?Math.log10(this.scale_ymin):this.scale_ymin,m.fUymax=m.fLogy?Math.log10(this.scale_ymax):this.scale_ymax);let k=m.fUxmax-m.fUxmin,F=1-m.fLeftMargin-m.fRightMargin,q=m.fUymax-m.fUymin,T=1-m.fBottomMargin-m.fTopMargin;F<=0&&(F=.01),T<=0&&(T=.01),m.fX1=m.fUxmin-k/F*m.fLeftMargin,m.fX2=m.fUxmax+k/F*m.fRightMargin,m.fY1=m.fUymin-q/T*m.fBottomMargin,m.fY2=m.fUymax+q/T*m.fTopMargin}drawGrids(){let m=this.getFrameSvg().select(".grid_layer");m.selectAll(".xgrid").remove(),m.selectAll(".ygrid").remove();let k=this.getPadPainter()?.getRootPad(!0),F=this.getFrameHeight(),q=this.getFrameWidth(),T=M.gStyle.fGridStyle;if(k?.fGridx&&this.x_handle){let $="";for(let be=0;be0?M.gStyle.fGridColor:this.getAxis("x")?this.getAxis("x").fAxisColor:1,re=this.getColor(ee)||"black";$&&m.append("svg:path").attr("class","xgrid").attr("d",$).style("stroke",re).style("stroke-width",M.gStyle.fGridWidth).style("stroke-dasharray",(0,De.p)(T))}if(k?.fGridy&&this.y_handle){let $="";for(let be=0;be0?M.gStyle.fGridColor:this.getAxis("y")?this.getAxis("y").fAxisColor:1,re=this.getColor(ee)||"black";$&&m.append("svg:path").attr("class","ygrid").attr("d",$).style("stroke",re).style("stroke-width",M.gStyle.fGridWidth).style("stroke-dasharray",(0,De.p)(T))}}axisAsText(m,_){let k=this[m+"_handle"];return k?k.axisAsText(_,M.settings[m.toUpperCase()+"ValuesFormat"]):_.toPrecision(4)}hasDrawnAxes(m,_){return!m&&!_&&this.axes_drawn}drawAxes(m,_,k,F,q,T){var $=this;return(0,ze.Z)(function*(){if($.cleanAxesDrawings(),$.xmin==$.xmax||$.ymin==$.ymax)return!1;void 0===F&&(F=0);let ee=$.getFrameSvg().select(".axis_layer"),re=$.getFrameWidth(),be=$.getFrameHeight(),he=$.getPadPainter(),de=he.getRootPad(!0);$.x_handle.invert_side=F>=10,$.x_handle.lbls_both_sides=!$.x_handle.invert_side&&de&&de.fTickx>1,$.x_handle.has_obstacle=q,$.y_handle.invert_side=F%10==1,$.y_handle.lbls_both_sides=!$.y_handle.invert_side&&de&&de.fTicky>1,$.y_handle.has_obstacle=T;let I=$.swap_xy?$.y_handle:$.x_handle,U=$.swap_xy?$.x_handle:$.y_handle;(!_||!k)&&he._fast_drawing&&(_=k=!0);let H=Promise.resolve(!0);if(!_||!k){let le=!m&&M.settings.CanAdjustFrame,D=I.drawAxis(ee,re,be,I.invert_side?void 0:`translate(0,${be})`,de?.fTickx?-be:0,_,void 0,!1),oe=U.drawAxis(ee,re,be,U.invert_side?`translate(${re})`:void 0,de?.fTicky?re:0,k,U.invert_side?0:$._frame_x,le);H=Promise.all([D,oe]).then(()=>{if($.drawGrids(),!le)return;let ge=0,Ee=U.position;return-.2*re0&&Ee<.3*re&&$.shrink_frame_left>0&&Ee/re>$.shrink_frame_left&&(ge=-$.shrink_frame_left,$.shrink_frame_left=0),ge?($.shrinkFrame(ge,0),$.redraw().then(()=>$.drawAxes(!0))):void 0})}return H.then(()=>(m||($.axes_drawn=!0),!0))})()}drawAxes2(m,_){let k=this.getFrameSvg().select(".axis_layer"),F=this.getFrameWidth(),q=this.getFrameHeight(),T=this.getPadPainter(),$=T.getRootPad(!0);m&&(this.x2_handle.invert_side=!0,this.x2_handle.lbls_both_sides=!1,this.x2_handle.has_obstacle=!1),_&&(this.y2_handle.invert_side=!0,this.y2_handle.lbls_both_sides=!1);let be,he,ee=this.swap_xy?this.y2_handle:this.x2_handle,re=this.swap_xy?this.x2_handle:this.y2_handle;return(ee||re)&&T._fast_drawing&&(ee=re=null),ee&&(be=ee.drawAxis(k,F,q,ee.invert_side?void 0:`translate(0,${q})`,$?.fTickx?-q:0,!1,void 0,!1)),re&&(he=re.drawAxis(k,F,q,re.invert_side?`translate(${F})`:void 0,$?.fTicky?F:0,!1,re.invert_side?0:this._frame_x,!1)),Promise.all([be,he])}updateAttributes(m){let _=this.getPadPainter(),k=_?.getRootPad(!0),F=this.getObject();(void 0===this.fX1NDC||m&&!this.modified_NDC)&&Object.assign(this,k?{fX1NDC:k.fLeftMargin,fX2NDC:1-k.fRightMargin,fY1NDC:k.fBottomMargin,fY2NDC:1-k.fTopMargin}:M.settings.FrameNDC),void 0===this.fillatt&&(this.createAttFill(F?{attr:F}:k&&k.fFrameFillColor?{pattern:k.fFrameFillStyle,color:k.fFrameFillColor}:k?{attr:k}:{pattern:1001,color:0}),!F&&this.fillatt.empty()&&_?.iscan?this.fillatt.setSolidColor("white"):4e3===k?.fFillStyle&&!this.fillatt.empty()&&this.fillatt.setOpacity(0)),this.createAttLine(F||void 0===k?.fFrameLineColor?{attr:F,color:"black"}:{color:k.fFrameLineColor,width:k.fFrameLineWidth,style:k.fFrameLineStyle})}sizeChanged(){let m=this.getPadPainter()?.getRootPad(!0);m&&(m.fLeftMargin=this.fX1NDC,m.fRightMargin=1-this.fX2NDC,m.fBottomMargin=this.fY1NDC,m.fTopMargin=1-this.fY2NDC,this.setRootPadRange(m)),this.interactiveRedraw("pad","frame")}cleanXY(){delete this.grx,delete this.gry,delete this.grz,this.x_handle&&(this.x_handle.cleanup(),delete this.x_handle),this.y_handle&&(this.y_handle.cleanup(),delete this.y_handle),this.z_handle&&(this.z_handle.cleanup(),delete this.z_handle),delete this.grx2,delete this.gry2,this.x2_handle&&(this.x2_handle.cleanup(),delete this.x2_handle),this.y2_handle&&(this.y2_handle.cleanup(),delete this.y2_handle)}cleanAxesDrawings(){this.x_handle&&this.x_handle.removeG(),this.y_handle&&this.y_handle.removeG(),this.z_handle&&this.z_handle.removeG(),this.x2_handle&&this.x2_handle.removeG(),this.y2_handle&&this.y2_handle.removeG();let m=this.getG();m&&(m.select(".grid_layer").selectAll("*").remove(),m.select(".axis_layer").selectAll("*").remove()),this.axes_drawn=!1}cleanFrameDrawings(){(0,M.isFunc)(this.create3DScene)&&this.create3DScene(-1),this.cleanAxesDrawings(),this.cleanXY(),this.ranges_set=!1,this.xmin=this.xmax=0,this.ymin=this.ymax=0,this.zmin=this.zmax=0,this.zoom_xmin=this.zoom_xmax=0,this.zoom_ymin=this.zoom_ymax=0,this.zoom_zmin=this.zoom_zmax=0,this.scale_xmin=this.scale_xmax=0,this.scale_ymin=this.scale_ymax=0,this.scale_zmin=this.scale_zmax=0,this.draw_g&&(this.draw_g.select(".main_layer").selectAll("*").remove(),this.draw_g.select(".upper_layer").selectAll("*").remove()),this.xaxis=null,this.yaxis=null,this.zaxis=null,this.draw_g&&(this.draw_g.selectAll("*").remove(),this.draw_g.on("mousedown",null).on("dblclick",null).on("wheel",null).on("contextmenu",null).property("interactive_set",null),this.draw_g.remove()),delete this.draw_g,this.keys_handler&&(window.removeEventListener("keydown",this.keys_handler,!1),this.keys_handler=null)}cleanup(){this.cleanFrameDrawings(),delete this._click_handler,delete this._dblclick_handler,delete this.enabledKeys;let m=this.getPadPainter();m?.frame_painter_ref===this&&delete m.frame_painter_ref,super.cleanup()}redraw(){let m=this.getPadPainter();m&&(m.frame_painter_ref=this),this.updateAttributes();let re,be,he,_=m?.getPadRect()??{width:10,height:10},k=Math.round(_.width*this.fX1NDC),F=Math.round(_.width*(this.fX2NDC-this.fX1NDC)),q=Math.round(_.height*(1-this.fY2NDC)),T=Math.round(_.height*(this.fY2NDC-this.fY1NDC)),$=!1,ee=!1;return m?.options&&(m.options.RotateFrame&&($=!0),m.options.FixFrame&&(ee=!0)),$?(re=`rotate(-90,${k},${q}) translate(${k-T},${q})`,[F,T]=[T,F]):re=`translate(${k},${q})`,this._frame_x=k,this._frame_y=q,this._frame_width=F,this._frame_height=T,this._frame_rotate=$,this._frame_fixpos=ee,this.mode3d||(this.draw_g=this.getFrameSvg(),this.draw_g.empty()?(this.draw_g=this.getLayerSvg("primitives_layer").append("svg:g").attr("class","root_frame"),(0,M.isBatchMode)()||this.draw_g.append("svg:title").text(""),be=this.draw_g.append("svg:path"),this.draw_g.append("svg:g").attr("class","grid_layer"),he=this.draw_g.append("svg:svg").attr("class","main_layer").attr("x",0).attr("y",0).attr("overflow","hidden"),this.draw_g.append("svg:g").attr("class","axis_layer"),this.draw_g.append("svg:g").attr("class","upper_layer")):(be=this.draw_g.select("path"),he=this.draw_g.select(".main_layer")),this.axes_drawn=!1,this.draw_g.attr("transform",re),be.attr("d",`M0,0H${F}V${T}H0Z`).call(this.fillatt.func).call(this.lineatt.func),he.attr("width",F).attr("height",T).attr("viewBox",`0 0 ${F} ${T}`),(0,M.isBatchMode)()||(be.style("pointer-events","visibleFill"),v.assign(this),this.addBasicInteractivity())),this}changeAxisLog(m,_){let k=this.getPadPainter(),F=k?.getRootPad(!0);if(!F)return;k._interactively_changed=!0;let q="fLog"+m;!F[q]&&(this.swap_xy&&"x"===m?m="y":this.swap_xy&&"y"===m&&(m="x"),"labels"===this[m+"_handle"]?.kind)||(("toggle"==_||void 0===_)&&(_=F[q]?0:1),F[q]=_,this.interactiveRedraw("pad","log"+m))}toggleAxisLog(m){this.changeAxisLog(m,"toggle")}fillContextMenu(m,_,k){let F=this.getMainPainter(!0),q=this.getPadPainter(),T=q?.getRootPad(!0);if("x"==_||"y"==_||"z"==_||"x2"==_||"y2"==_){let ee=k||this[_+"axis"];if(m.add("header: "+_.toUpperCase()+" axis"),m.add("Unzoom",()=>this.unzoom(_)),T&&(m.add("sub:SetLog "+_[0]),m.addchk(0==T["fLog"+_[0]],"linear",()=>this.changeAxisLog(_[0],0)),m.addchk(1==T["fLog"+_[0]],"log",()=>this.changeAxisLog(_[0],1)),m.addchk(2==T["fLog"+_[0]],"log2",()=>this.changeAxisLog(_[0],2)),m.add("endsub:")),m.addchk(ee.TestBit(_e.VO.kMoreLogLabels),"More log",re=>{ee.InvertBit(_e.VO.kMoreLogLabels),F?.snapid&&1==_.length?F.interactiveRedraw("pad",`exec:SetMoreLogLabels(${re})`,_):this.interactiveRedraw("pad")}),m.addchk(ee.TestBit(_e.VO.kNoExponent),"No exponent",re=>{ee.InvertBit(_e.VO.kNoExponent),F?.snapid&&1==_.length?F.interactiveRedraw("pad",`exec:SetNoExponent(${re})`,_):this.interactiveRedraw("pad")}),"z"===_&&F?.options?.Zscale&&(0,M.isFunc)(F?.fillPaletteMenu)&&F.fillPaletteMenu(m),ee){let re=this[_+"_handle"];"labels"==re?.kind&&ee.fNbins>20&&m.add("Find label",()=>m.input("Label id").then(be=>{if(be)for(let he=0;hethis.unzoom("x")),this.zoom_ymin!==this.zoom_ymax&&m.add("Unzoom Y",()=>this.unzoom("y")),this.zoom_zmin!==this.zoom_zmax&&m.add("Unzoom Z",()=>this.unzoom("z")),this.zoom_x2min!==this.zoom_x2max&&m.add("Unzoom X2",()=>this.unzoom("x2")),this.zoom_y2min!==this.zoom_y2max&&m.add("Unzoom Y2",()=>this.unzoom("y2")),m.add("Unzoom all",()=>this.unzoom("all")),T&&(m.addchk(T.fLogx,"SetLogx",()=>this.toggleAxisLog("x")),m.addchk(T.fLogy,"SetLogy",()=>this.toggleAxisLog("y")),(0,M.isFunc)(F?.getDimension)&&F.getDimension()>1&&m.addchk(T.fLogz,"SetLogz",()=>this.toggleAxisLog("z")),m.add("separator")),m.addchk(this.isTooltipAllowed(),"Show tooltips",()=>this.setTooltipAllowed("toggle")),m.addAttributesMenu(this,$?"":"Frame "),m.add("Save to gStyle",function(){M.gStyle.fPadBottomMargin=this.fY1NDC,M.gStyle.fPadTopMargin=1-this.fY2NDC,M.gStyle.fPadLeftMargin=this.fX1NDC,M.gStyle.fPadRightMargin=1-this.fX2NDC,this.fillatt&&this.fillatt.saveToStyle("fFrameFillColor","fFrameFillStyle"),this.lineatt&&this.lineatt.saveToStyle("fFrameLineColor","fFrameLineWidth","fFrameLineStyle")},"Store frame position and graphical attributes to gStyle"),m.add("separator"),m.add("Save as frame.png",()=>q.saveAs("png","frame","frame.png")),m.add("Save as frame.svg",()=>q.saveAs("svg","frame","frame.svg")),!0}fillWebObjectOptions(m){if(!m){if(!this.snapid)return null;m={_typename:"TWebObjectOptions",snapid:this.snapid.toString(),opt:this.getDrawOpt(),fcust:"",fopt:[]}}return m.fcust="frame",m.fopt=[this.scale_xmin||0,this.scale_ymin||0,this.scale_xmax||0,this.scale_ymax||0],m}getFrameWidth(){return this._frame_width||0}getFrameHeight(){return this._frame_height||0}getFrameRect(){return{x:this._frame_x||0,y:this._frame_y||0,width:this.getFrameWidth(),height:this.getFrameHeight(),transform:this.draw_g?this.draw_g.attr("transform"):"",hint_delta_x:0,hint_delta_y:0}}configureUserClickHandler(m){this._click_handler=(0,M.isFunc)(m)?m:null}configureUserDblclickHandler(m){this._dblclick_handler=(0,M.isFunc)(m)?m:null}zoom(m,_,k,F,q,T){var $=this;return(0,ze.Z)(function*(){if($.projection)return!1;"x"===m?(m=_,_=k,k=void 0):"y"===m?(F=k,k=_,m=_=void 0):"z"===m&&(q=_,T=k,m=_=k=void 0);let ee=m!==_,re=k!==F,be=q!==T,he=!1,de=!1,I=!1;if(ee){let H=0;m<=$.xmin&&(m=$.xmin,H++),_>=$.xmax&&(_=$.xmax,H++),2===H&&(ee=!1,he=!0)}else he=m===_&&0===m;if(re){let H=0;k<=$.ymin&&(k=$.ymin,H++),F>=$.ymax&&(F=$.ymax,H++),2===H&&(re=!1,de=!0)}else de=k===F&&0===k;if(be){let H=0;q<=$.zmin&&(q=$.zmin,H++),T>=$.zmax&&(T=$.zmax,H++),2===H&&(be=!1,I=!0)}else I=q===T&&0===q;let U=!1;return(ee||re||be)&&$.forEachPainter(H=>{(0,M.isFunc)(H.canZoomInside)&&(ee&&H.canZoomInside("x",m,_)&&($.zoom_xmin=m,$.zoom_xmax=_,U=!0,ee=!1),re&&H.canZoomInside("y",k,F)&&($.zoom_ymin=k,$.zoom_ymax=F,U=!0,re=!1),be&&H.canZoomInside("z",q,T)&&($.zoom_zmin=q,$.zoom_zmax=T,U=!0,be=!1))}),(he||de||I)&&(he&&($.zoom_xmin!==$.zoom_xmax&&(U=!0),$.zoom_xmin=$.zoom_xmax=0),de&&($.zoom_ymin!==$.zoom_ymax&&(U=!0),$.zoom_ymin=$.zoom_ymax=0),I&&($.zoom_zmin!==$.zoom_zmax&&(U=!0),$.zoom_zmin=$.zoom_zmax=0),U||$.getPadPainter()?.painters?.forEach(H=>{(0,M.isFunc)(H?.unzoomUserRange)&&H.unzoomUserRange(he,de,I)&&(U=!0)})),!!U&&$.interactiveRedraw("pad","zoom").then(()=>!0)})()}zoomSingle(m,_,k){var F=this;return(0,ze.Z)(function*(){if(F.projection||!F[m+"_handle"])return!1;let q=_!==k,T=!1;if(q){let ee=0;_<=F[m+"min"]&&(_=F[m+"min"],ee++),k>=F[m+"max"]&&(k=F[m+"max"],ee++),2===ee&&(q=!1,T=!0)}else T=_===k&&0===_;let $=!1;return q&&F.forEachPainter(ee=>{(0,M.isFunc)(ee.canZoomInside)&&q&&ee.canZoomInside(m[0],_,k)&&(F["zoom_"+m+"min"]=_,F["zoom_"+m+"max"]=k,$=!0,q=!1)}),T&&(F["zoom_"+m+"min"]!==F["zoom_"+m+"max"]&&($=!0),F["zoom_"+m+"min"]=F["zoom_"+m+"max"]=0),!!$&&F.interactiveRedraw("pad","zoom").then(()=>!0)})()}isAxisZoomed(m){return this["zoom_"+m+"min"]!==this["zoom_"+m+"max"]}unzoom(m,_,k){var F=this;return(0,ze.Z)(function*(){return"all"==m?F.unzoom("x2").then(()=>F.unzoom("y2")).then(()=>F.unzoom("xyz")):"x2"==m||"y2"==m?F.zoomSingle(m,0,0).then(q=>(q&&F.zoomChangedInteractive(m,"unzoom"),q)):(typeof m>"u"?m=_=k=!0:(0,M.isStr)(m)&&(k=m.indexOf("z")>=0,_=m.indexOf("y")>=0,m=m.indexOf("x")>=0),F.zoom(m?0:void 0,m?0:void 0,_?0:void 0,_?0:void 0,k?0:void 0,k?0:void 0).then(q=>(q&&m&&F.zoomChangedInteractive("x","unzoom"),q&&_&&F.zoomChangedInteractive("y","unzoom"),q&&k&&F.zoomChangedInteractive("z","unzoom"),q)))})()}zoomChangedInteractive(m,_){if("reset"==m)return void(this.zoom_changed_x=this.zoom_changed_y=this.zoom_changed_z=void 0);if(!m||"any"==m)return this.zoom_changed_x||this.zoom_changed_y||this.zoom_changed_z;if("x"!==m&&"y"!==m&&"z"!==m)return;let k="zoom_changed_"+m;if(void 0===_)return!!this[k];"unzoom"!==_?_&&(this[k]=!0):this[k]=void 0===this[k]}revertAxis(m,_){let k=this[m+"_handle"];return k?k.revertPoint(_):0}showAxisStatus(m,_){let k=this.getAxis(m),F=m,q=M.clTAxis,T=(0,L.cx)(_,this.getFrameSvg().node()),$="x"==m?0:1;k&&(F=k.fName,q=k.fTitle||`TAxis object for ${m}`),this.swap_xy&&($=1-$);let ee=this.revertAxis(m,T[$]);this.showObjectStatus(F,q,m+" : "+this.axisAsText(m,ee),T[0]+","+T[1])}addKeysHandler(){(0,M.isBatchMode)()||(v.assign(this),this.addFrameKeysHandler())}addInteractivity(m){return!((0,M.isBatchMode)()||!M.settings.Zooming&&!M.settings.ContextMenu)&&(v.assign(this),this.addFrameInteractivity(m))}}},3834:(jr,At,Me)=>{"use strict";Me.r(At),Me.d(At,{PadButtonsHandler:()=>ue,TPadPainter:()=>J,clTButton:()=>ce});var ze=Me(4788),M=Me(9542),L=Me(2253),_e=Me(3038),De=Me(3675),$e=Me(6458),Ze=Me(6367),Ie=Me(4383),Ve=Me(9622),Re=Me(2487);const ce="TButton";function Z(R,P){return Math.round((P||1)*(R.iscan||!R.has_canvas?16:12))}function Y(R,P){let v=R.getLayerSvg("btns_layer",R.this_pad_name),A=v.select("[name='Toggle']");if(A.empty())return;let w=A.property("buttons_state");A.property("timout_handler")&&("timeout"!==P&&clearTimeout(A.property("timout_handler")),A.property("timout_handler",null));let m=!1;switch(P){case"enable":m=!0;break;case"enterbtn":return;case"timeout":m=!1;break;case"toggle":w=!w,A.property("buttons_state",w),m=w;break;case"disable":case"leavebtn":return void(w||A.property("timout_handler",setTimeout(()=>Y(R,"timeout"),1200)))}v.selectAll("svg").each(function(){this!==A.node()&&(0,L.Ys)(this).style("display",m?"":"none")})}let ue={alignButtons(R,P,v){let m,_,A=Z(this,1.25),w=(R.property("nextx")||0)+A;R.property("vertical")?(m=R.property("leftside")?2:P-A,_=v-w):(m=R.property("leftside")?2:P-w,_=v-A),R.attr("transform",`translate(${m},${_})`)},findPadButton(R){let P=this.getLayerSvg("btns_layer",this.this_pad_name),v="";return P.empty()||P.selectAll("svg").each(function(){(0,L.Ys)(this).attr("key")===R&&(v=(0,L.Ys)(this).attr("name"))}),v},removePadButtons(){let R=this.getLayerSvg("btns_layer",this.this_pad_name);R.empty()||(R.selectAll("*").remove(),R.property("nextx",null))},showPadButtons(){let R=this.getLayerSvg("btns_layer",this.this_pad_name);if(R.empty()||(R.selectAll("*").remove(),!this._buttons))return;let v,P=this.iscan||!this.has_canvas,A=R.property("leftside")?Z(this,1.25):0;if(this._fast_drawing)v=Ve.KL.createSVG(R,Ve.KL.circle,Z(this),"enlargePad"),v.attr("name","Enlarge").attr("x",0).attr("y",0).on("click",m=>this.clickPadButton("enlargePad",m));else{v=Ve.KL.createSVG(R,Ve.KL.rect,Z(this),"Toggle tool buttons"),v.attr("name","Toggle").attr("x",0).attr("y",0).property("buttons_state","popup"!==M.settings.ToolBar).on("click",()=>Y(this,"toggle")).on("mouseenter",()=>Y(this,"enable")).on("mouseleave",()=>Y(this,"disable"));for(let m=0;mY(this,"enterbtn")).on("mouseleave",()=>Y(this,"leavebtn")),_.keyname&&F.attr("key",_.keyname),F.on("click",q=>this.clickPadButton(_.funcname,q)),A+=Z(this,1.25)}}R.property("nextx",A),this.alignButtons(R,this.getPadWidth(),this.getPadHeight()),R.property("vertical")?v.attr("y",A):R.property("leftside")||v.attr("x",A)},assign(R){Object.assign(R,this)}};class J extends $e.tK{constructor(P,v,A){super(P,v),this.pad=v,this.iscan=A,this.this_pad_name="",!this.iscan&&v?.fName&&(this.this_pad_name=v.fName.replace(" ","_"),(!new RegExp("^[A-Za-z][A-Za-z0-9_]*$").test(this.this_pad_name)||"button"==this.this_pad_name&&v._typename==ce)&&(this.this_pad_name="jsroot_pad_"+M.internals.id_counter++)),this.painters=[],this.has_canvas=!0,this.forEachPainter=this.forEachPainterInPad}isRoot6(){return!0}svg_this_pad(){return this.getPadSvg(this.this_pad_name)}getMainPainter(){return this.main_painter_ref||null}setMainPainter(P,v){(!this.main_painter_ref||v)&&(this.main_painter_ref=P)}cleanup(){this._doing_draw&&console.error("pad drawing is not completed when cleanup is called"),this.painters.forEach(v=>v.cleanup());let P=this.svg_this_pad();P.empty()||(P.property("pad_painter",null),this.iscan||P.remove()),delete this.main_painter_ref,delete this.frame_painter_ref,delete this.pads_cache,delete this.custom_palette,delete this._pad_x,delete this._pad_y,delete this._pad_width,delete this._pad_height,delete this._doing_draw,delete this._interactively_changed,this.painters=[],this.pad=null,this.this_pad_name=void 0,this.has_canvas=!1,(0,$e.O5)({pp:this,active:!1}),super.cleanup()}getFramePainter(){return this.frame_painter_ref}getPadWidth(){return this._pad_width||0}getPadHeight(){return this._pad_height||0}getPadRect(){return{x:this._pad_x||0,y:this._pad_y||0,width:this.getPadWidth(),height:this.getPadHeight()}}getFrameRect(){let P=this.getFramePainter();if(P)return P.getFrameRect();let v=this.getPadWidth(),A=this.getPadHeight(),w={};return this.pad?(w.szx=Math.round(Math.max(0,.5-Math.max(this.pad.fLeftMargin,this.pad.fRightMargin))*v),w.szy=Math.round(Math.max(0,.5-Math.max(this.pad.fBottomMargin,this.pad.fTopMargin))*A)):(w.szx=Math.round(.5*v),w.szy=Math.round(.5*A)),w.width=2*w.szx,w.height=2*w.szy,w.x=Math.round(v/2-w.szx),w.y=Math.round(A/2-w.szy),w.hint_delta_x=w.szx,w.hint_delta_y=w.szy,w.transform=`translate(${w.x},${w.y})`,w}getRootPad(P){return void 0===P||P?this.pad:null}cleanPrimitives(P){if((0,M.isFunc)(P))for(let v=this.painters.length-1;v>=0;--v)P(this.painters[v])&&(this.painters[v].cleanup(),this.painters.splice(v,1))}getCustomPalette(){return this.custom_palette||this.getCanvPainter()?.custom_palette}getNumPainters(){return this.painters.length}forEachPainterInPad(P,v){v||(v="all"),"objects"!=v&&P(this);for(let A=0;A0){if(this._fixed_size)return P>1;if(w=this.getCanvSvg(),w.empty()||(A=w.property("height_factor"),_=this.testMainResize(P,null,A),!_.changed))return!1;(0,M.isBatchMode)()||(k=this.getLayerSvg("btns_layer",this.this_pad_name)),F=this.getLayerSvg("info_layer",this.this_pad_name),q=w.select(".canvas_fillrect")}else{let $=this.selectDom();"static"==$.style("position")&&$.style("position","relative"),w=$.append("svg").attr("class","jsroot root_canvas").property("pad_painter",this).property("current_pad","").property("redraw_by_resize",!1),this.setTopPainter(),(0,M.isBatchMode)()?(w.attr("xmlns","http://www.w3.org/2000/svg"),w.attr("xmlns:xlink","http://www.w3.org/1999/xlink")):this.online_canvas||w.append("svg:title").text("ROOT canvas"),(!(0,M.isBatchMode)()||this.pad.fFillStyle>0)&&(q=w.append("svg:path").attr("class","canvas_fillrect")),(0,M.isBatchMode)()||q.style("pointer-events","visibleFill").on("dblclick",ee=>this.enlargePad(ee)).on("click",()=>this.selectObjectPainter()).on("mouseenter",()=>this.showObjectStatus()).on("contextmenu",M.settings.ContextMenu?ee=>this.padContextMenu(ee):null),w.append("svg:g").attr("class","primitives_layer"),F=w.append("svg:g").attr("class","info_layer"),(0,M.isBatchMode)()||(k=w.append("svg:g").attr("class","btns_layer").property("leftside","left"==M.settings.ToolBarSide).property("vertical",M.settings.ToolBarVert)),A=.66,this.pad?.fCw&&this.pad?.fCh&&this.pad?.fCw>0&&(A=this.pad.fCh/this.pad.fCw,(A<.1||A>10)&&(A=.66)),this._fixed_size?($.style("overflow","auto"),_={width:this.pad.fCw,height:this.pad.fCh},(!_.width||!_.height)&&(_=(0,De.Yo)($))):_=this.testMainResize(2,v,A)}this.createAttFill({attr:this.pad}),_.width<=5||_.height<=5?(w.style("display","none"),console.warn(`Hide canvas while geometry too small w=${_.width} h=${_.height}`),_.width=200,_.height=100):w.style("display",null),w.attr("x",0).attr("y",0).style("position","absolute"),this._fixed_size?w.attr("width",_.width).attr("height",_.height):w.style("width","100%").style("height","100%").style("left",0).style("top",0).style("right",0).style("bottom",0),w.style("filter",M.settings.DarkMode||this.pad?.$dark?"invert(100%)":null),w.attr("viewBox",`0 0 ${_.width} ${_.height}`).attr("preserveAspectRatio","none").property("height_factor",A).property("draw_x",0).property("draw_y",0).property("draw_width",_.width).property("draw_height",_.height),this._pad_x=0,this._pad_y=0,this._pad_width=_.width,this._pad_height=_.height,q&&(q.attr("d",`M0,0H${_.width}V${_.height}H0Z`).call(this.fillatt.func),this.drawActiveBorder(q)),this._fast_drawing=M.settings.SmallPad&&(_.width1&&$.setTime(1e3*M.gStyle.fOptDate),T.attr("transform",`translate(${ee}, ${re})`).style("text-anchor","start").text($.toLocaleString("en-GB"))}else T.remove();return M.gStyle.fOptFile&&this.getItemName()?this.drawItemNameOnCanvas(this.getItemName()):F.select(".canvas_item").remove(),!0}drawItemNameOnCanvas(P){let v=this.getLayerSvg("info_layer",this.this_pad_name),A=v.select(".canvas_item");if(M.gStyle.fOptFile&&P){A.empty()&&(A=v.append("text").attr("class","canvas_item"));let w=this.getPadRect(),m=Math.round(w.width*(1-M.gStyle.fDateX)),_=Math.round(w.height*(1-M.gStyle.fDateY));A.attr("transform",`translate(${m}, ${_})`).style("text-anchor","end").text(P)}else A.remove()}enlargePad(P){P&&(P.preventDefault(),P.stopPropagation());let v=this.getCanvSvg(),A=v.property("pad_enlarged");if(!this.iscan&&this.has_canvas&&(A||this.hasObjectsToDraw()||this.painters))A?A===this.pad?(this.enlargeMain(!1),v.property("pad_enlarged",null)):console.error("missmatch with pad double click events"):(this.enlargeMain(!0,!0),v.property("pad_enlarged",this.pad));else{if(this._fixed_size||!this.enlargeMain("toggle"))return;"off"==this.enlargeMain("state")&&v.property("pad_enlarged",null)}let w=this._fast_drawing;this.checkResize(!0),this._fast_drawing!=w&&this.showPadButtons()}createPadSvg(P){if(!this.has_canvas)return this.createCanvasSvg(P?2:0),!0;let v=this.getCanvSvg(),A=v.property("draw_width"),w=v.property("draw_height"),m=v.property("pad_enlarged"),_=!(this.pad_draw_disabled||m&&m!==this.pad),k=Math.round(this.pad.fAbsWNDC*A),F=Math.round(this.pad.fAbsHNDC*w),q=Math.round(this.pad.fAbsXlowNDC*A),T=Math.round(w*(1-this.pad.fAbsYlowNDC))-F,$=null,ee=null,re=null;return m===this.pad&&(k=A,F=w,q=T=0),P?($=this.svg_this_pad(),ee=$.select(".root_pad_border"),(0,M.isBatchMode)()||(re=this.getLayerSvg("btns_layer",this.this_pad_name))):($=v.select(".primitives_layer").append("svg:svg").classed("__root_pad_"+this.this_pad_name,!0).attr("pad",this.this_pad_name).property("pad_painter",this),(0,M.isBatchMode)()||$.append("svg:title").text("subpad "+this.this_pad_name),(!(0,M.isBatchMode)()||this.pad.fFillStyle>0||this.pad.fLineStyle>0&&this.pad.fLineColor>0)&&(ee=$.append("svg:path").attr("class","root_pad_border")),(0,M.isBatchMode)()||ee.style("pointer-events","visibleFill").on("dblclick",be=>this.enlargePad(be)).on("click",()=>this.selectObjectPainter()).on("mouseenter",()=>this.showObjectStatus()).on("contextmenu",M.settings.ContextMenu?be=>this.padContextMenu(be):null),$.append("svg:g").attr("class","primitives_layer"),(0,M.isBatchMode)()||(re=$.append("svg:g").attr("class","btns_layer").property("leftside","left"!=M.settings.ToolBarSide).property("vertical",M.settings.ToolBarVert))),this.createAttFill({attr:this.pad}),this.createAttLine({attr:this.pad,color0:0==this.pad.fBorderMode?"none":""}),$.style("display",_?null:"none").attr("viewBox",`0 0 ${k} ${F}`).attr("preserveAspectRatio","none").attr("x",q).attr("y",T).attr("width",k).attr("height",F).property("draw_x",q).property("draw_y",T).property("draw_width",k).property("draw_height",F),this._pad_x=q,this._pad_y=T,this._pad_width=k,this._pad_height=F,ee&&(ee.attr("d",`M0,0H${k}V${F}H0Z`).call(this.fillatt.func).call(this.lineatt.func),this.drawActiveBorder(ee)),this._fast_drawing=M.settings.SmallPad&&(kw.fName==P&&(!v||w.typename==v)):null}findPainterFor(P,v,A){return this.painters.find(w=>{let m=w.getObject();if(m){if(P&&m===P)return!0;if((v||A)&&(!v||m.fName===v)&&(!A||m._typename===A))return!0}})}hasObjectsToDraw(){let P=this.pad?.fPrimitives?.arr;return!(!P||!P.find(v=>v._typename!=M.clTPad))}syncDraw(P){let v={kind:P||"redraw"};return void 0===this._doing_draw?(this._doing_draw=[v],Promise.resolve(!0)):!(!0!==v.kind&&this._doing_draw.findIndex((A,w)=>w>0&&A.kind==v.kind)>0)&&(this._doing_draw.push(v),new Promise(A=>{v.func=A}))}doingDraw(){return void 0!==this._doing_draw}confirmDraw(){if(void 0===this._doing_draw)return console.warn("failure, should not happen");if(this._doing_draw.shift(),0==this._doing_draw.length)delete this._doing_draw;else{let P=this._doing_draw[0];P.func&&(P.func(),delete P.func)}}drawObject(){return(0,ze.Z)(function*(){return console.log("Not possible to draw object without loading of draw.mjs"),null})()}drawPrimitives(P){var v=this;return(0,ze.Z)(function*(){if(void 0===P)return v.iscan&&(v._start_tm=(new Date).getTime()),v._num_primitives=v.pad?.fPrimitives?.arr?.length||0,v.syncDraw(!0).then(()=>v.drawPrimitives(0));if(!(P>=v._num_primitives))return v.drawObject(v.getDom(),v.pad.fPrimitives.arr[P],v.pad.fPrimitives.opt[P]).then(A=>((0,M.isObject)(A)&&(A._primitive=!0),v.drawPrimitives(P+1)));if(v._start_tm){let A=(new Date).getTime()-v._start_tm;A>1e3&&console.log(`Canvas ${v.pad?.fName||"---"} drawing took ${(.001*A).toFixed(2)}s`),delete v._start_tm}v.confirmDraw()})()}divide(P,v){var A=this;return(0,ze.Z)(function*(){if(!v){let $=P;if($<2)return A;(P=v=Math.round(Math.sqrt($)))*v<$&&(P+=1)}if(P*v<2)return A;let _=1/v,k=1/P,F=0,q=[];for(let $=0;$ee))for(let be=0;bede)continue;F++;let I=(0,M.create)(M.clTPad);I.fName=I.fTitle=`${A.pad.fName}_${F}`,I.fNumber=F,A.iscan?(I.fAbsWNDC=de-he,I.fAbsHNDC=ee-re,I.fAbsXlowNDC=he,I.fAbsYlowNDC=re):(I.fAbsWNDC=(de-he)*A.pad.fAbsWNDC,I.fAbsHNDC=(ee-re)*A.pad.fAbsHNDC,I.fAbsXlowNDC=A.pad.fAbsXlowNDC+he*A.pad.fAbsWNDC,I.fAbsYlowNDC=A.pad.fAbsYlowNDC+re*A.pad.fAbsWNDC),q.push(I)}}const T=()=>0==q.length?A:A.drawObject(A.getDom(),q.shift()).then(T);return T()})()}getSubPadPainter(P){for(let v=0;v{(0,M.isFunc)(w.processTooltipEvent)&&v.push(w)}),P&&(P.nproc=v.length),v.forEach(w=>{let m=w.processTooltipEvent(P);m||(m={user_info:null}),A.push(m),P&&P.painters&&(m.painter=w)}),A}changeDarkMode(P){this.getCanvSvg().style("filter",P??M.settings.DarkMode?"invert(100%)":null)}fillContextMenu(P){if(P.add(this.pad?`header:${this.pad._typename}::${this.pad.fName}`:"header:Canvas"),P.addchk(this.isTooltipAllowed(),"Show tooltips",()=>this.setTooltipAllowed("toggle")),!this._websocket){let A=function(w){this.pad[w.slice(1)]=parseInt(w[0]),this.interactiveRedraw("pad",w.slice(1))};P.addchk(this.pad.fGridx,"Grid x",(this.pad.fGridx?"0":"1")+"fGridx",A),P.addchk(this.pad.fGridy,"Grid y",(this.pad.fGridy?"0":"1")+"fGridy",A),P.add("sub:Ticks x"),P.addchk(0==this.pad.fTickx,"normal","0fTickx",A),P.addchk(1==this.pad.fTickx,"ticks on both sides","1fTickx",A),P.addchk(2==this.pad.fTickx,"labels on both sides","2fTickx",A),P.add("endsub:"),P.add("sub:Ticks y"),P.addchk(0==this.pad.fTicky,"normal","0fTicky",A),P.addchk(1==this.pad.fTicky,"ticks on both sides","1fTicky",A),P.addchk(2==this.pad.fTicky,"labels on both sides","2fTicky",A),P.add("endsub:"),P.addAttributesMenu(this),P.add("Save to gStyle",function(){this.fillatt&&this.fillatt.saveToStyle(this.iscan?"fCanvasColor":"fPadColor"),M.gStyle.fPadGridX=this.pad.fGridX,M.gStyle.fPadGridY=this.pad.fGridX,M.gStyle.fPadTickX=this.pad.fTickx,M.gStyle.fPadTickY=this.pad.fTicky,M.gStyle.fOptLogx=this.pad.fLogx,M.gStyle.fOptLogy=this.pad.fLogy,M.gStyle.fOptLogz=this.pad.fLogz},"Store pad fill attributes, grid, tick and log scale settings to gStyle"),this.iscan&&P.addSettingsMenu(!1,!1,w=>{"dark"==w&&this.changeDarkMode()})}P.add("separator"),(0,M.isFunc)(this.hasMenuBar)&&(0,M.isFunc)(this.actiavteMenuBar)&&P.addchk(this.hasMenuBar(),"Menu bar",A=>this.actiavteMenuBar(A)),(0,M.isFunc)(this.hasEventStatus)&&(0,M.isFunc)(this.activateStatusBar)&&P.addchk(this.hasEventStatus(),"Event status",()=>this.activateStatusBar("toggle")),(this.enlargeMain()||this.has_canvas&&this.hasObjectsToDraw())&&P.addchk("on"==this.enlargeMain("state"),"Enlarge "+(this.iscan?"canvas":"pad"),()=>this.enlargePad());let v=this.this_pad_name||(this.iscan?"canvas":"pad");return P.add(`Save as ${v}.png`,v+".png",A=>this.saveAs("png",this.iscan,A)),P.add(`Save as ${v}.svg`,v+".svg",A=>this.saveAs("svg",this.iscan,A)),!0}padContextMenu(P){if(P.stopPropagation){let v=(0,L.cx)(P,this.svg_this_pad().node());if(2==v.length&&v[0]>=0&&v[0]<10&&v[1]>=0&&v[1]<10)return;P.stopPropagation(),P.preventDefault(),this.getFramePainter()?.setLastEventPos()}(0,Ie.Z)(P,this).then(v=>(this.fillContextMenu(v),this.fillObjectExecMenu(v,""))).then(v=>v.show())}redrawPad(P){var v=this;return(0,ze.Z)(function*(){let A=v.syncDraw(P);if(!1===A)return console.log(`Prevent redrawing of ${v.pad.fName}`),!1;let w=!0;const m=_=>{for(;_m(_))}return!0};return A.then(()=>(v.iscan?v.createCanvasSvg(2):w=v.createPadSvg(!0),m(0))).then(()=>(v.confirmDraw(),(0,$e.X8)()===v&&v.getCanvPainter()?.producePadEvent("padredraw",v),!0))})()}redraw(P){this.redrawPad(P)}needRedrawByResize(){let P=this.svg_this_pad();return!P.empty()&&P.property("can3d")===M.constants.Embed3D.Overlay||this.painters.findIndex(v=>{if((0,M.isFunc)(v.needRedrawByResize))return v.needRedrawByResize()})>=0}checkCanvasResize(P,v){if(!this.iscan&&this.has_canvas)return!1;let A=this.syncDraw("canvas_resize");if(!1===A)return!1;(!0===P||!1===P)&&(v=P,P=null),(0,M.isObject)(P)&&P.force&&(v=!0),v||(v=this.needRedrawByResize());let w=!1,m=_=>!w||_>=this.painters.length?(this.confirmDraw(),w):(0,M.getPromise)(this.painters[_].redraw(v?"redraw":"resize")).then(()=>m(_+1));return A.then(()=>(w=this.createCanvasSvg(v?2:1,P),m(0)))}updateObject(P){if(!P)return!1;this.pad.fBits=P.fBits,this.pad.fTitle=P.fTitle,this.pad.fGridx=P.fGridx,this.pad.fGridy=P.fGridy,this.pad.fTickx=P.fTickx,this.pad.fTicky=P.fTicky,this.pad.fLogx=P.fLogx,this.pad.fLogy=P.fLogy,this.pad.fLogz=P.fLogz,this.pad.fUxmin=P.fUxmin,this.pad.fUxmax=P.fUxmax,this.pad.fUymin=P.fUymin,this.pad.fUymax=P.fUymax,this.pad.fX1=P.fX1,this.pad.fX2=P.fX2,this.pad.fY1=P.fY1,this.pad.fY2=P.fY2,this.pad.fLeftMargin=P.fLeftMargin,this.pad.fRightMargin=P.fRightMargin,this.pad.fBottomMargin=P.fBottomMargin,this.pad.fTopMargin=P.fTopMargin,this.pad.fFillColor=P.fFillColor,this.pad.fFillStyle=P.fFillStyle,this.pad.fLineColor=P.fLineColor,this.pad.fLineStyle=P.fLineStyle,this.pad.fLineWidth=P.fLineWidth,this.pad.fPhi=P.fPhi,this.pad.fTheta=P.fTheta,this.iscan&&this.checkSpecialsInPrimitives(P);let v=this.getFramePainter();if(v&&v.updateAttributes(!v.modified_NDC),!P.fPrimitives)return!1;let A=!1,w=0;for(let m=0;m{w!==P&&"hist"===w.$secondary&&(w.snapid=P.snapid+"#hist",console.log(`ASSIGN SECONDARY HIST ID ${w.snapid}`))}))}drawNextSnap(P,v){var A=this;return(0,ze.Z)(function*(){if(void 0===v&&(v=-1,A._snaps_map={},A._num_primitives=P?P.length:0),++v,!P||v>=P.length)return delete A._snaps_map,A;let w=P[v];if(5===w.fKind)return Object.assign(M.gStyle,w.fSnapshot),A.drawNextSnap(P,v);if(4===w.fKind){let F=[],q=w.fSnapshot.fOper.split(";");for(let T=0;T0?F[parseInt($.slice(0,ee))]=(0,L.$_)(`rgb(${$.slice(ee+1)})`).formatHex():(ee=$.indexOf("="),F[parseInt($.slice(0,ee))]=(0,L.$_)(`rgba(${$.slice(ee+1)})`).formatHex8())}if((!A.options||A.options.GlobalColors)&&(0,_e.ow)(F),A.options&&A.options.LocalColors&&(A.root_colors=(0,_e.$8)(null,F)),w.fSnapshot.fBuf&&(!A.options||!A.options.IgnorePalette)){let T=[];for(let $=0;$A.drawNextSnap(P,v));let F;return 1===w.fKind?k.updateObject(w.fSnapshot,w.fOption,!0)&&(F=k.redraw()):2===w.fKind&&k.updateObject(w.fSnapshot)&&(F=k.redraw()),(0,M.getPromise)(F).then(()=>A.drawNextSnap(P,v))}if(3===w.fKind){let F=w.fSnapshot;F.fPrimitives=null;let q=new J(A.getDom(),F,!1);q.decodeOptions(w.fOption),q.addToPadPrimitives(A.this_pad_name),q.snapid=w.fObjectID,q.is_active_pad=!!w.fActive,q._readonly=w.fReadOnly??!1,q.createPadSvg(),q.matchObjectType(M.clTPad)&&w.fPrimitives.length>0&&q.addPadButtons(!0);let T=q.selectCurrentPad(q.this_pad_name);return q.drawNextSnap(w.fPrimitives).then(()=>(q.selectCurrentPad(T),A.drawNextSnap(P,v)))}return 1===w.fKind||2===w.fKind?A.drawObject(A.getDom(),w.fSnapshot,w.fOption).then(F=>(A.addObjectPainter(F,P,v),A.drawNextSnap(P,v))):A.drawNextSnap(P,v)})()}findSnap(P){if(this.snapid===P)return this;if(!this.painters)return null;for(let v=0;vv.drawNextSnap(P.fPrimitives))}v.updateObject(A),v.iscan?v.createCanvasSvg(2):v.createPadSvg(!0);const w=(F,q,T,$)=>{let ee=F.find(be=>{if(void 0!==be.snapid&&be.matchObjectType(T)&&(!$||be.getObject()&&be.getObject().fName===$))return!0});if(!ee)return;let re=q.find(be=>{if(1===be.fKind&&be.fSnapshot&&be.fSnapshot._typename===T&&(!$||be.fSnapshot.fName===$))return!0});re&&ee.snapid!==re.fObjectID&&(ee.snapid=re.fObjectID)};P.fWithoutPrimitives||(w(v.painters,P.fPrimitives,"TFrame"),w(v.painters,P.fPrimitives,M.clTPaveText,"title"));let m=!1,_=!1;if(!P.fWithoutPrimitives)for(let F=0;F0&&(T=T.slice(0,$));for(let ee=0;ee{F!==q&&q.cleanup()}),delete v.main_painter_ref,v.painters=[],F&&(v.painters.push(F),F.cleanFrameDrawings(),F.redraw()),v.removePadButtons&&v.removePadButtons(),v.addPadButtons(!0)}let k=v.selectCurrentPad(v.this_pad_name);return v.drawNextSnap(P.fPrimitives).then(()=>{let F=[];return P.fWithoutPrimitives||v.painters.forEach(q=>{(void 0===q.snapid||q.$secondary)&&F.push(q.redraw())}),Promise.all(F)}).then(()=>(v.selectCurrentPad(k),(0,$e.X8)()===v&&v.getCanvPainter()?.producePadEvent("padredraw",v),v))})()}deliverWebCanvasEvent(P,v,A,w){if(!this._deliver_webcanvas_events||!this.is_active_pad||this.doingDraw()||void 0===v||void 0===A)return;let m=this.getCanvPainter();if(!m||!m._websocket||!m._websocket.canSend(2)||m._readonly)return;let _="";w&&w[0]&&w[0].painter?.snapid&&(_=w[0].painter.snapid.toString());let k=JSON.stringify([this.snapid,P,v.toString(),A.toString(),_]);m.sendWebsocket(`EVENT:${k}`)}createImage(P){var v=this;return(0,ze.Z)(function*(){return"pdf"==P?(0,M.btoa_func)("dummy PDF file"):"png"==P||"jpeg"==P||"svg"==P?v.produceImage(!0,P).then(A=>{if(!A||"svg"==P)return A;let w=A.indexOf("base64,");return w>0?A.slice(w+7):""}):""})()}getWebPadOptions(P,v){let A=void 0===P,w=null,m=!0;if(A&&this._readonly)return"";if("only_this"===P&&(A=!0,m=!1),A&&(P=[]),v||(v=this.iscan?this:this.getCanvPainter()),this.snapid){if(w={_typename:"TWebPadOptions",snapid:this.snapid.toString(),active:!!this.is_active_pad,cw:0,ch:0,bits:0,primitives:[],logx:this.pad.fLogx,logy:this.pad.fLogy,logz:this.pad.fLogz,gridx:this.pad.fGridx,gridy:this.pad.fGridy,tickx:this.pad.fTickx,ticky:this.pad.fTicky,mleft:this.pad.fLeftMargin,mright:this.pad.fRightMargin,mtop:this.pad.fTopMargin,mbottom:this.pad.fBottomMargin,xlow:0,ylow:0,xup:1,yup:1,zx1:0,zx2:0,zy1:0,zy2:0,zz1:0,zz2:0},this.iscan)w.bits=this.getStatusBits(),w.cw=this.getPadWidth(),w.ch=this.getPadHeight();else if(v){let _=v.getPadWidth(),k=v.getPadHeight(),F=this.getPadRect();w.cw=_,w.ch=k,w.xlow=F.x/_,w.ylow=1-(F.y+F.height)/k,w.xup=w.xlow+F.width/_,w.yup=w.ylow+F.height/k}this.getPadRanges(w)?P.push(w):console.log(`fail to get ranges for pad ${this.pad.fName}`)}return this.painters.forEach(_=>{if((0,M.isFunc)(_.getWebPadOptions))m&&_.getWebPadOptions(P,v);else if(_.snapid){let k={_typename:"TWebObjectOptions",snapid:_.snapid.toString(),opt:_.getDrawOpt(),fcust:"",fopt:[]};(0,M.isFunc)(_.fillWebObjectOptions)&&(k=_.fillWebObjectOptions(k)),w.primitives.push(k)}}),A?(0,M.toJSON)(P):void 0}getPadRanges(P){if(!P)return!1;let v=this.getFramePainter(),A=this.svg_this_pad();if(P.ranges=!!v?.ranges_set,P.ux1=P.px1=P.ranges?v.scale_xmin:0,P.uy1=P.py1=P.ranges?v.scale_ymin:0,P.ux2=P.px2=P.ranges?v.scale_xmax:0,P.uy2=P.py2=P.ranges?v.scale_ymax:0,P.uz1=P.ranges?v.scale_zmin??0:0,P.uz2=P.ranges?v.scale_zmax??0:0,v&&(v.zoom_xmin!==v.zoom_xmax&&(P.zx1=v.zoom_xmin,P.zx2=v.zoom_xmax),v.zoom_ymin!==v.zoom_ymax&&(P.zy1=v.zoom_ymin,P.zy2=v.zoom_ymax),v.zoom_zmin!==v.zoom_zmax&&(P.zz1=v.zoom_zmin,P.zz2=v.zoom_zmax)),!P.ranges||A.empty())return!0;const w=de=>de,m=[w,Math.log10,de=>Math.log10(de)/Math.log10(2)],_=[w,de=>Math.pow(10,de),de=>Math.pow(2,de)],k=(de,I,U)=>Math.abs(I-de)<1e-10*Math.abs(U)?I:de,F=v.getFrameRect();let q=m[v.logx],T=_[v.logx],$=(q(v.scale_xmax)-q(v.scale_xmin))/F.width,ee=q(v.scale_xmin)-$*F.x,re=ee+$*this.getPadWidth();P.px1=k(T(ee),P.px1,P.ux2-P.ux1),P.px2=k(T(re),P.px2,P.ux2-P.ux1),q=m[v.logy],T=_[v.logy],$=(q(v.scale_ymax)-q(v.scale_ymin))/F.height;let be=q(v.scale_ymax)+$*F.y,he=be-$*this.getPadHeight();return P.py1=k(T(he),P.py1,P.uy2-P.uy1),P.py2=k(T(be),P.py2,P.uy2-P.uy1),!0}itemContextMenu(P){let v=this.svg_this_pad().node().getBoundingClientRect(),A={clientX:v.left+10,clientY:v.top+10};if("pad"==P)return setTimeout(()=>this.padContextMenu(A),50);let m,w=null;switch(P){case"xaxis":case"yaxis":case"zaxis":w=this.getFramePainter(),m=P[0];break;case"frame":w=this.getFramePainter();break;default:{let _=parseInt(P);Number.isInteger(_)&&(w=this.painters[_])}}(0,M.isFunc)(w?.fillContextMenu)&&(0,Ie.Z)(A,w).then(_=>{w.fillContextMenu(_,m)&&w.fillObjectExecMenu(_,m).then(()=>setTimeout(()=>_.show(),50))})}saveAs(P,v,A){A||(A=(this.this_pad_name||(this.iscan?"canvas":"pad"))+"."+P),this.produceImage(v,P).then(w=>{if(!w)return console.error(`Fail to produce image ${A}`);(0,Ve.yH)(A,"svg"!=P?w:"data:image/svg+xml;charset=utf-8,"+encodeURIComponent(w))})}findActivePad(){let P;return this.forEachPainterInPad(v=>{v.is_active_pad&&!P&&(P=v)},"pads"),P}produceImage(P,v){var A=this;return(0,ze.Z)(function*(){let w="frame"===P,m=w?A.getFrameSvg(A.this_pad_name):P?A.getCanvSvg():A.svg_this_pad(),_=P&&!w?A.getCanvPainter():A,k=[],F=null;if(m.empty())return"";_.forEachPainterInPad(de=>{if(de.is_active_pad&&!F&&(F=de,F.drawActiveBorder(null,!1)),w)return;let I={prnt:de.svg_this_pad()};k.push(I);let U=de.getLayerSvg("btns_layer",de.this_pad_name);I.btns_node=U.node(),I.btns_node&&(I.btns_prnt=I.btns_node.parentNode,I.btns_next=I.btns_node.nextSibling,U.remove());let H=de.getFramePainter();if(!(0,M.isFunc)(H?.render3D)||!(0,M.isFunc)(H?.access3dKind))return;let le=H.access3dKind();if(le!==M.constants.Embed3D.Overlay&&le!==M.constants.Embed3D.Embed)return;let D=H.getSizeFor3d(M.constants.Embed3D.Embed),oe=H.renderer.domElement;H.render3D(0);let ge=oe.toDataURL("image/png");le===M.constants.Embed3D.Embed&&(I.foreign=I.prnt.select("."+D.clname),I.foreign.remove());let Ee=H.getFrameSvg();I.frame_node=Ee.node(),I.frame_node&&(I.frame_next=I.frame_node.nextSibling,Ee.remove()),I.img=I.prnt.insert("image",".primitives_layer").attr("x",D.x).attr("y",D.y).attr("width",oe.width).attr("height",oe.height).attr("href",ge)},"pads");const T=()=>{F&&F.drawActiveBorder(null,!0);for(let de=0;de${m.node().innerHTML}`;if(M.internals.processSvgWorkarounds&&(re=M.internals.processSvgWorkarounds(re)),re=(0,De.ln)(re),"svg"==v)return T(),re;let he=new Image;return new Promise(de=>{he.onload=function(){let I=document.createElement("canvas");I.width=he.width,I.height=he.height,I.getContext("2d").drawImage(he,0,0),T(),de(I.toDataURL("image/"+v))},he.onerror=function(I){console.log(`IMAGE ERROR ${I}`),T(),de(null)},he.src="data:image/svg+xml;base64,"+(0,M.btoa_func)((de=>(de=(de=encodeURIComponent(de)).replace(/%([0-9A-F]{2})/g,(I,U)=>{let H=String.fromCharCode("0x"+U);return"%"===H?"%25":H}),decodeURIComponent(de)))(''+re))})})()}clickPadButton(P,v){if("CanvasSnapShot"==P)return this.saveAs("png",!0);if("enlargePad"==P)return this.enlargePad();if("PadSnapShot"==P)return this.saveAs("png",!1);if("PadContextMenus"==P){if(v&&(v.preventDefault(),v.stopPropagation()),(0,Ie.W)())return;return void(0,Ie.Z)(v,this).then(w=>{w.add("header:Menus"),w.add(this.iscan?"Canvas":"Pad","pad",this.itemContextMenu),this.getFramePainter()&&w.add("Frame","frame",this.itemContextMenu);let m=this.getMainPainter();if(m&&(w.add("X axis","xaxis",this.itemContextMenu),w.add("Y axis","yaxis",this.itemContextMenu),(0,M.isFunc)(m.getDimension)&&m.getDimension()>1&&w.add("Z axis","zaxis",this.itemContextMenu)),this.painters&&this.painters.length>0){w.add("separator");let _=[];this.painters.forEach((k,F)=>{let q=k?k.getObject():null;if(!q||_.indexOf(q)>=0||k.$secondary)return;let T="_typename"in q?q._typename+"::":"";"fName"in q&&(T+=q.fName),T.length||(T="item"+F),w.add(T,F,this.itemContextMenu)})}w.show()})}let A=!1;this.painters.forEach(w=>{(0,M.isFunc)(w.clickPadButton)&&w.clickPadButton(P),!A&&(0,M.isFunc)(w.clickButton)&&(A=w.clickButton(P))})}addPadButton(P,v,A,w){if(M.settings.ToolBar&&!(0,M.isBatchMode)()&&!this.batch_mode){this._buttons||(this._buttons=[]);for(let _=0;_(w.showPadButtons(),w.selectCurrentPad(m),w))})()}}},4074:(jr,At,Me)=>{"use strict";Me.r(At),Me.d(At,{HierarchyPainter:()=>$,drawInspector:()=>be,drawList:()=>ue,drawStreamerInfo:()=>ee,folderHierarchy:()=>J,getHPainter:()=>ce.nh,keysHierarchy:()=>v,listHierarchy:()=>P,markAsStreamerInfo:()=>m,objectHierarchy:()=>A,taskHierarchy:()=>R});var ze=Me(4788),M=Me(9542),L=Me(2253),_e=Me(8538),De=Me(3038),$e=Me(3675),Ze=Me(6458),Ie=Me(4383),Ve=Me(4585),Re=Me(7825),ce=Me(2487),Z=Me(9622);function ue(de,I,U){return K.apply(this,arguments)}function K(){return(K=(0,ze.Z)(function*(de,I,U){return I&&I.arr?{dom:de,lst:I,opt:U,indx:-1,painter:null,draw_next(){for(;++this.indx(oe&&!this.painter&&(this.painter=oe),this.draw_next()))}return this.painter}}.draw_next():null})).apply(this,arguments)}function J(de,I){if(!I?.fFolders)return!1;if(0===I.fFolders.arr.length)return de._more=!1,!0;de._childs=[];for(let U=0;U=0?oe[et]++:(oe[D.length]=ge[D.length]=1,D.push(We))}de._childs=[];for(let Ee=0;Ee=0&&oe[et]>1&&(We._cycle=ge[et]++,We._keyname=We._name,We._name=We._keyname+";"+We._cycle)}de._childs.push(We)}return!0}function v(de,I,U,H){if(void 0===I)return!1;de._childs=[];for(let le=0;le0&&D.fName==I[le-1].fName&&D.fCycle1e5&&(oe._title+=" (size: "+(D.fObjlen/1e6).toFixed(1)+"MB)"),D.fRealName&&(oe._realname=D.fRealName+";"+D.fCycle),D.fClassName==_e.$Q||D.fClassName==_e.jH){let ge=H&&U?U.getDir(H+D.fName):null;ge?(oe._name=D.fName,v(oe,ge.fKeys,U,H+D.fName+"/")):(oe._more=!0,oe._expand=function(Ee,Ge){return v(Ee,Ge.fKeys)})}else if(D.fClassName==M.clTList&&D.fName==_e.S7){if(M.settings.SkipStreamerInfos)continue;oe._name=_e.S7,oe._kind="ROOT."+_e.I8,oe._title="List of streamer infos for binary I/O",oe._readobj=U.fStreamerInfos}de._childs.push(oe)}return!0}function A(de,I,U){if(!de||null===I)return!1;de._childs=[];let H=Object.prototype.toString.apply(I);if("[object DataView]"===H){let ve={_parent:de,_name:"size",_value:I.byteLength.toString(),_vclass:"h_value_num"};de._childs.push(ve);let Je=I.byteLength<10?1:Math.log10(I.byteLength);for(let ct=0;ct0&&I.length,Ee=ge&&I.length>M.settings.HierarchyLimit,Ge=!1;if(ge&&"Object"===de._name&&!de._parent&&(de._name="Array"),Ee){Ge=!0;for(let ve=0;ve=0)continue;if(Ee&&We){if(Tt===Je){++Bt,et=ve;continue}Bt>0&&(We._name+=".."+et)}let ct={_parent:de,_name:ve};if(Ee&&(We=ct,et=ve,Tt=Je,Bt=0),null===Je){ct._value=ct._title="null",le||de._childs.push(ct);continue}let je=!1;if((0,M.isObject)(Je))if(H=Object.prototype.toString.apply(Je),(0,M.isArrayProto)(H)>0)ct._title="array len="+Je.length,je="[object Array]"!=H,0===Je.length?(ct._value="[ ]",ct._more=!1):(ct._value="[...]",ct._more=!0,ct._expand=A,ct._obj=Je);else if("[object DataView]"===H)ct._title="DataView len="+Je.byteLength,ct._value="[...]",ct._more=!0,ct._expand=A,ct._obj=Je;else if("[object Date]"===H)ct._more=!1,ct._title="Date",ct._value=Je.toString(),ct._vclass="h_value_num";else{(Je.$kind||Je._typename)&&(ct._kind=ct._title="ROOT."+(Je.$kind||Je._typename)),Je._typename&&(ct._title=Je._typename,D&&(0,Re.JO)(Je._typename)&&(ct._direct_context=!0));let Ye=de,pt=!1;for(;Ye&&!pt;)pt=Ye._obj===Je,Ye=Ye._parent;if(pt)ct._value="{ prnt }",ct._vclass="h_value_num",ct._more=!1,je=!0;else switch(ct._obj=Je,ct._more=!1,Je._typename){case M.clTColor:ct._value=(0,De.tF)(Je);break;case M.clTText:case M.clTLatex:ct._value=Je.fTitle;break;case M.clTObjString:ct._value=Je.fString;break;default:(0,M.isRootCollection)(Je)&&(0,M.isObject)(Je.arr)?(ct._value=Je.arr.length?"[...]":"[]",ct._title+=", size:"+Je.arr.length,Je.arr.length>0&&(ct._more=!0)):(ct._more=!0,ct._value="{ }")}}else"number"==typeof Je||"boolean"==typeof Je?(je=!0,ct._value="fBits"==ve?"0x"+Je.toString(16):Je.toString(),ct._vclass="h_value_num"):(0,M.isStr)(Je)?(je=!0,ct._value="""+Je.replace(/\&/g,"&").replace(/\"/g,""").replace(//g,">")+""",ct._vclass="h_value_str"):typeof Je>"u"?(je=!0,ct._value="undefined",ct._vclass="h_value_num"):(je=!0,alert(`miss ${ve} type ${typeof Je}`));(!je||!le)&&de._childs.push(ct)}return Ee&&We&&Bt>0&&(We._name+=".."+et),!0}function w(de){let I={_name:_e.S7,_childs:[]};for(let U=0;U"u"){console.warn(`strange element in StreamerInfo with type ${H._typename}`);continue}let le={_name:`${H.fName};${H.fClassVersion}`,_kind:`class ${H.fName}`,_title:`class:${H.fName} version:${H.fClassVersion} checksum:${H.fCheckSum}`,_icon:"img_class",_childs:[]};if(H.fTitle&&(le._title+=" "+H.fTitle),I._childs.push(le),!(typeof H.fElements>"u")){for(let D=0;D0)"'"===de[oe]&&H--;else if(le>0)'"'===de[oe]&&le--;else switch(de[oe]){case"'":H++;break;case'"':le++;break;case"[":U++;break;case"]":if(oe1&&ge[0]==ge[ge.length-1]&&('"'==ge[0]||"'"==ge[0])&&(ge=ge.slice(1,ge.length-1)),I.push(ge),D=oe+1}}return 0===I.length&&I.push(de.slice(1,de.length-1).trim()),I}function F(de,I){if(I&&de&&"_childs"in I){for(let U=0;U(this._file||(this._file=ge),ge?ge.readObject(D).then(Ee=>{if(!le&&Ee){let Ge=U.findItem({name:D,top:this,last_exists:!0,check_keys:!0});if(void 0!==Ge?.last&&Ge.last!==this){let We=ge.getDir(U.itemFullName(Ge.last,this));if(We){Ge.last._name=Ge.last._keyname;let et=U.itemFullName(Ge.last,this);v(Ge.last,We.fKeys,ge,et+"/")}}else v(this,ge.fKeys,ge,"");le=U.findItem({name:D,top:this})}return le&&(le._readobj=Ee,"_expand"in le&&(le._name=le._keyname)),Ee}):Promise.resolve(null));return this._file?oe(this._file):this._localfile?(0,_e.ZB)(this._localfile).then(ge=>oe(ge)):this._fullurl?(0,_e.ZB)(this._fullurl).then(ge=>oe(ge)):Promise.resolve(null)}};return v(H,I.fKeys,I,""),H}forEachItem(I,U){(0,M.isFunc)(I)&&function H(le,D){if(le&&(D&&(le._parent=D),I(le),"_childs"in le))for(let oe=0;oe=oe.length-1||ge<0?Ge:U(Ge,oe.slice(ge+1))}for(;ge>0;){let Ge=ge>=oe.length?oe:oe.slice(0,ge);if(D._childs){for(let et=0;et=0&&etWe.showCommandArgsDialog(D._name,Ee)):Promise.resolve(Ee)).then(We=>{if(null===We)return!1;let et="";for(let Tt=0;Tt0?"&":"?"}arg${Tt+1}=${We[Tt]}`;return ge.empty()||(ge.style("background","yellow"),D._title&&ge.attr("title","Executing "+D._title)),(0,M.httpRequest)(oe+et,"text").then(Tt=>{if(ge.empty())return Tt;let Bt=Tt&&"false"!=Tt?"green":"red";return ge.style("background",Bt),D._title&&ge.attr("title",D._title+" lastres="+Tt),setTimeout(()=>{ge.style("background",null),D._icon&&ge.classed("jsroot_fastcmd_btn")&&ge.style("background-image",`url('${D._icon}')`)},2e3),"green"==Bt&&"_hreload"in D&&le.reload(),"green"==Bt&&"_update_item"in D&&le.updateItems(D._update_item.split(";")),Tt})})})()}getObject(I,U){var H=this;return(0,ze.Z)(function*(){let le,D,oe={item:null,obj:null};if(null===I)return oe;if((0,M.isStr)(I)?le=I:(0,M.isObject)(I)&&(void 0!==I._parent&&void 0!==I._name&&void 0!==I._kind?D=I:void 0!==I.name?le=I.name:void 0!==I.arg?le=I.arg:void 0!==I.item&&(D=I.item)),(0,M.isStr)(le)&&0==le.indexOf("img:"))return oe.obj={_typename:"TJSImage",fName:le.slice(4)},oe;D?le=H.itemFullName(D):D=H.findItem({name:le,allow_index:!0,check_keys:!0});let ge=D?null:H.findItem({name:le,last_exists:!0,check_keys:!0,allow_index:!0});if(null!==ge&&"last"in ge&&null!==ge.last){let Ge=H.itemFullName(ge.last);return(0,M.isObject)(I)&&"rest"in I&&(I.rest==ge.rest||I.rest.length<=ge.rest.length)?oe:H.expandItem(Ge,void 0,"hierarchy_expand_verbose"!=U).then(We=>{if(!We)return oe;let et=H.itemFullName(ge.last);return et&&(et+="/"),H.getObject({name:et+ge.rest,rest:ge.rest},U)})}if(oe.item=D,null!==D&&(0,M.isObject)(D._obj))return oe.obj=D._obj,oe;let Ee=D;for(;Ee;){if((0,M.isFunc)(Ee._get))return Ee._get(D,null,U).then(Ge=>(oe.obj=Ge,oe));Ee="_parent"in Ee?Ee._parent:null}return oe})()}isLastSibling(I){if(!I||!I._parent||!I._parent._childs)return!1;let U=I._parent._childs,H=U.indexOf(I);if(H<0)return!1;for(;++H=(I._parent._show_limit||M.settings.HierarchyLimit)&&(We=!0)),I._d3cont=et.node(),et.attr("item",Tt);let ve=et.append("div").attr("class","h_line"),Je=le?null:I._parent;for(;Je&&Je!==this.h;)ve.insert("div",":first-child").attr("class",this.isLastSibling(Je)?"img_empty":"img_line"),Je=Je._parent;let ct="",je=!1;le||(D&&!We?(ct=I._isopen?"img_minus":"img_plus",je=!0):ct="img_join");let Ye=this;if(ct){(We||this.isLastSibling(I))&&(ct+="bottom");let Ct=ve.append("div").attr("class",ct);je&&Ct.style("cursor","pointer").on("click",function(Ot){Ye.tree_click(Ot,this,"plusminus")})}if(this.with_icons&&!We){let Ot,Ct=I._isopen?Ee:ge;Ot=0==Ct.indexOf("img_")?ve.append("div").attr("class",Ct).attr("title",I._kind):ve.append("img").attr("src",Ct).attr("alt","").attr("title",I._kind).style("vertical-align","top").style("width","18px").style("height","18px"),("_icon_click"in I||oe&&"icon_click"in oe)&&Ot.on("click",function(sn){Ye.tree_click(sn,this,"icon")})}let pt=ve.append("a");if((Ge||D||We)&&pt.attr("class","h_item").on("click",function(Ct){Ye.tree_click(Ct,this)}),We)return I._break_point=!0,pt.attr("title","there are "+(I._parent._childs.length-H)+" more items").text("...more..."),!1;"disp_kind"in Ye?(M.settings.DragAndDrop&&Ge&&this.enableDrag(pt,Tt),M.settings.ContextMenu&&Bt&&pt.on("contextmenu",function(Ct){Ye.tree_contextmenu(Ct,this)}),pt.on("mouseover",function(){Ye.tree_mouseover(!0,this)}).on("mouseleave",function(){Ye.tree_mouseover(!1,this)})):I._direct_context&&M.settings.ContextMenu&&pt.on("contextmenu",function(Ct){Ye.direct_contextmenu(Ct,this)});let Ht=I._name,tn="";if("_realname"in I&&(Ht=I._realname),"_title"in I&&(tn=I._title),"_fullname"in I&&(tn+=" fullname: "+I._fullname),tn||(tn=Ht),pt.attr("title",tn).text(Ht+("_value"in I?":":"")).style("background",I._background?I._background:null),"_value"in I){let Ct=ve.append("p");"_vclass"in I&&Ct.attr("class",I._vclass),I._isopen||Ct.html(I._value)}if(D&&(le||I._isopen)){let Ct=et.append("div").attr("class","h_childs");this.show_overflow&&Ct.style("overflow","initial");for(let Ot=0;Ot{delete Ee._d3cont,"_fastcmd"in Ee&&"Command"==Ee._kind&&le.push(Ee),"_status"in Ee&&!D&&(D=Ee)}),!I.h||U.empty())return I;if(le.length){let Ee=U.append("div").attr("style","display: inline; vertical-align: middle; white-space: nowrap;");for(let Ge=0;GeI.toggleOpenState(!0)),oe.append("text").text(" | "),oe.append("a").attr("class","h_button").text("close all").attr("title","close all items in the browser").on("click",()=>I.toggleOpenState(!1)),(0,M.isFunc)(I.removeInspector)&&(oe.append("text").text(" | "),oe.append("a").attr("class","h_button").text("remove").attr("title","remove inspector").on("click",()=>I.removeInspector())),"_online"in I.h&&(oe.append("text").text(" | "),oe.append("a").attr("class","h_button").text("reload").attr("title","reload object list from the server").on("click",()=>I.reload())),"disp_kind"in I&&(oe.append("text").text(" | "),oe.append("a").attr("class","h_button").text("clear").attr("title","clear all drawn objects").on("click",()=>I.clearHierarchy(!1)));let ge=U.append("div").attr("class","jsroot").style("font-size",I.with_icons?"12px":"15px").style("flex","1");if(I.show_overflow||ge.style("overflow","auto"),I.background&&ge.style("background-color",I.background).style("margin","2px").style("padding","2px"),I.textcolor&&ge.style("color",I.textcolor),I.addItemHtml(I.h,ge.append("div").attr("class","h_tree")),I.setTopPainter(),D&&!I.status_disabled&&!(0,M.decodeUrl)().has("nostatus")){let Ee=(0,M.findFunction)(D._status);if((0,M.isFunc)(Ee))return I.createStatusLine().then(Ge=>{Ge&&Ee(Ge,I.itemFullName(D))})}return I})()}updateTreeNode(I,U){if(void 0===U||U.empty()){U=(0,L.Ys)(I._d3cont?I._d3cont:null);let H=this.itemFullName(I);if(U.empty()&&(U=this.selectDom().select(`[item='${H}']`)),U.empty()&&"_cycle"in I&&(U=this.selectDom().select(`[item='${H};${I._cycle}']`)),U.empty())return}this.addItemHtml(I,U,"update"),this.brlayout?.adjustBrowserSize(!0)}updateBackground(I,U){if(!I||!I._d3cont)return;let H=(0,L.Ys)(I._d3cont);if(H.empty())return;let le=H.select(".h_item");le.style("background",I._background?I._background:null),U&&I._background&&le.node().scrollIntoView(!1)}focusOnItem(I){var U=this;return(0,ze.Z)(function*(){(0,M.isStr)(I)&&(I=U.findItem(I));let H=I?U.itemFullName(I):"";if(!H)return!1;let le=I,D=!1;for(;le;)void 0!==le._childs&&!le._isopen&&(le._isopen=!0,D=!0),le=le._parent;return(D?U.refreshHtml():Promise.resolve(!0)).then(()=>{let ge=U.selectDom().select(`[item='${H}']`);return!ge.empty()&&(ge.node().scrollIntoView(),!0)})})()}tree_click(I,U,H){if(!U)return;let le=(0,L.Ys)(U.parentNode.parentNode),D=le.attr("item"),oe=D?this.findItem(D):null;if(!oe)return;if(oe._break_point){delete oe._break_point,this.addItemHtml(oe,le,"update");let Tt=oe._parent,Bt=Tt._childs.indexOf(oe),ve=(0,L.Ys)(le.node().parentNode);if(Bt<0)return console.error("internal error");Tt._show_limit=2*(Tt._show_limit||M.settings.HierarchyLimit);for(let Je=Bt+1;Je{this.fill_context(D,le),D.size()>0&&(D.tree_node=U.parentNode,D.show())})}fillSettingsMenu(I,U){I.addSettingsMenu(!0,U,H=>{"refresh"==H?(this.forEachRootFile(le=>v(le,le._file.fKeys,le._file,"")),this.refreshHtml()):"dark"==H&&(this.brlayout?.createStyle(),this.disp&&this.disp.forEachFrame(le=>{let D=(0,Ze.FG)(le);(0,M.isFunc)(D?.changeDarkMode)&&D.changeDarkMode()}))})}toggleDarkMode(){M.settings.DarkMode=!M.settings.DarkMode}tree_contextmenu(I,U){I.preventDefault();let H=(0,L.Ys)(U.parentNode.parentNode).attr("item"),le=this.findItem(H);if(!le)return;let D=this.getOnlineProp(H),oe=this.getFileProp(H);return(0,Ie.Z)(I,this).then(Ee=>{if(H&&le._parent||"_jsonfile"in le)if(D)this.fillOnlineMenu(Ee,D,H);else{let Ge=(0,Re.wu)(le._kind,"nosame");if(le._can_draw&&(Ge.opts||(Ge.opts=[""]),Ge.opts.indexOf("")<0&&Ge.opts.unshift("")),Ge.opts&&Ee.addDrawMenu("Draw",Ge.opts,We=>this.display(H,We)),oe&&Ge.opts&&!oe.localfile){let We=function ge(Ee){const We=document.createElement("div");return We.innerHTML=`x`,We.firstChild.href;var et}(oe.fileurl);if(0==We.indexOf(M.source_dir)&&(We=We.slice(M.source_dir.length)),We=oe.kind+"="+We,oe.itemname){let et=oe.itemname;et.search(/\+| |\,/)>=0&&(et=`'${et}'`),We+="&item="+et}Ee.addDrawMenu("Draw in new tab",Ge.opts,et=>window.open(`${M.source_dir}index.htm?nobrowser&${We}&opt=${et}`))}(Ge.expand||Ge.get_expand)&&!("_childs"in le)&&(le._more||!("_more"in le))&&Ee.add("Expand",()=>this.expandItem(H)),le._kind==="ROOT."+M.clTStyle&&Ee.add("Apply",()=>this.applyStyle(H))}else{let Ge=[],We="",et=0,Tt=()=>et++>0?"&":"?";this.forEachRootFile(Je=>Ge.push(Je._file.fFullURL)),this.getTopOnlineItem()||(We=M.source_dir+"index.htm"),this.isMonitoring()&&(We+=Tt()+"monitoring="+this.getMonitoringInterval()),1==Ge.length?We+=Tt()+"file="+Ge[0]:Ge.length>1&&(We+=Tt()+"files="+JSON.stringify(Ge)),this.disp_kind&&(We+=Tt()+"layout="+this.disp_kind.replace(/ /g,""));let Bt=[],ve=[];this.disp&&this.disp.forEachFrame(Je=>{let pt,ct=new Ze.tK(Je),je=ct.getTopPainter(),Ye=je?je.getItemName():null;Ye?pt=je.getDrawOpt()||je.getItemDrawOpt():(je=null,ct.forEachPainter(Ht=>{let tn=Ht.getItemName();if(!tn)return;let Ct=Ht.getDrawOpt()||Ht.getItemDrawOpt()||"";je?je.getPadPainter()===Ht.getPadPainter()&&(0==Ct.indexOf("same ")&&(Ct=Ct.slice(5)),Ye+="+"+tn,pt+="+"+Ct):(je=Ht,Ye=tn,pt=Ct)})),Ye&&(Bt.push(Ye),ve.push(pt||""))}),1==Bt.length?We+=Tt()+"item="+Bt[0]+Tt()+"opt="+ve[0]:Bt.length>1&&(We+=Tt()+"items="+JSON.stringify(Bt)+Tt()+"opts="+JSON.stringify(ve)),Ee.add("Direct link",()=>window.open(We)),Ee.add("Only items",()=>window.open(We+"&nobrowser")),this.fillSettingsMenu(Ee)}(0,M.isFunc)(le._menu)&&le._menu(Ee,le,this),Ee.size()>0&&(Ee.tree_node=U.parentNode,Ee.separ&&Ee.add("separator"),Ee.add("Close"),Ee.show())}),!1}player(I,U){var H=this;return(0,ze.Z)(function*(){let le=H.findItem(I);if(!le||!le._player||!(0,M.isStr)(le._player))return null;let D=null;if(le._module){let oe=yield H.importModule(le._module);D=oe?oe[le._player]:null}else(le._prereq||le._player.indexOf("JSROOT.")>=0)&&(yield H.loadScripts("",le._prereq)),D=(0,M.findFunction)(le._player);return(0,M.isFunc)(D)?(yield H.createDisplay(),D(H,I,U)):null})()}canDisplay(I,U){if(!I)return!1;if(I._player)return!0;if(void 0!==I._can_draw)return I._can_draw;if("inspect"==U)return!0;const H=(0,Re.St)(I._kind,U);return(0,Re.JO)(H)}isItemDisplayed(I){let U=this.getDisplay();return!!U&&null!==U.findFrame(I)}display(I,U,H){var le=this;return(0,ze.Z)(function*(){let D=null,oe=!1,ge=null,Ee=I,Ge=I,We="::_display_on_frame_::",et=U?U.indexOf(We):-1;et>=0&&(Ge=U.slice(et+We.length),U=U.slice(0,et));const Tt=(Bt,ve)=>(ve&&console.log("When display ",I,"got",ve),oe&&ge&&delete ge._doing_update,oe||(0,Z.Ae)(),(0,M.isFunc)(Bt?.setItemName)&&(Bt.setItemName(Ee,oe?null:U,le),ge&&!ge._painter&&(ge._painter=Bt)),Bt||D);return le.createDisplay().then(Bt=>{if(!Bt)return Tt();if(ge=le.findItem(Ee),ge&&"_player"in ge)return le.player(Ee,U).then(ct=>Tt(ct));if(oe=(0,M.isStr)(U)&&0==U.indexOf("update:"),oe){if(U=U.slice(7),!ge||ge._doing_update)return Tt();ge._doing_update=!0}if(ge&&!le.canDisplay(ge,U))return Tt();let ve="",Je=!1;if((0,M.isStr)(U)&&U.indexOf("divid:")>=0){let ct=U.indexOf("divid:");ve=U.slice(ct+6),U=U.slice(0,ct)}return"__default_draw_option__"==U&&(Je=!0,U=""),oe||(0,Z.Ae)("Loading "+Ee),le.getObject(Ee,U).then(ct=>{oe||(0,Z.Ae)(),ge||(ge=ct.item);let je=ct.obj;if(!je)return Tt();oe||(0,Z.Ae)("Drawing "+Ee);let Ye=je._typename?(0,Re.St)("ROOT."+je._typename):null;if(Ye?.draw_field&&je[Ye.draw_field]&&(je=je[Ye.draw_field],U||(U=Ye.draw_field_opt||""),Ye=je._typename?(0,Re.St)("ROOT."+je._typename):null),Je&&!U&&Ye?.dflt&&"expand"!=Ye.dflt&&(U=Ye.dflt),ve)return(oe?Re.pz:Re.ii)(ve,je,U).then(Ct=>Tt(Ct)).catch(Ct=>Tt(null,Ct));let pt=!1;if(Bt.forEachPainter((tn,Ct)=>{if(tn.getItemName()!=Ee)return;let Ot=tn.getItemDrawOpt();Je&&H&&(U=Ot),(oe||!U||Ot==U)&&(H&&!pt&&(pt=!0,Bt.activateFrame(Ct)),(0,M.isFunc)(tn.redrawObject)&&tn.redrawObject(je,U)&&(D=tn))}),D)return Tt();if(oe)return console.warn(`something went wrong - did not found painter when doing update of ${Ee}`),Tt();let Ht=Bt.findFrame(Ge,!0);return(0,Ze.Eq)(Ht),Bt.activateFrame(Ht),(0,Re.ii)(Ht,je,U).then(tn=>Tt(tn)).catch(tn=>Tt(null,tn))})})})()}enableDrag(I){I.attr("draggable","true").on("dragstart",function(U){let H=this.parentNode.parentNode.getAttribute("item");U.dataTransfer.setData("item",H)})}enableDrop(I){let U=this;(0,L.Ys)(I).on("dragover",function(H){let le=H.dataTransfer.getData("item"),D=U.findItem(le);(0,M.isStr)(D?._kind)&&0==D._kind.indexOf("ROOT.")&&H.preventDefault()}).on("dragenter",function(){(0,L.Ys)(this).classed("jsroot_drag_area",!0)}).on("dragleave",function(){(0,L.Ys)(this).classed("jsroot_drag_area",!1)}).on("drop",function(H){(0,L.Ys)(this).classed("jsroot_drag_area",!1);let le=H.dataTransfer.getData("item");le&&U.dropItem(le,this.getAttribute("id"))})}clearDrop(I){(0,L.Ys)(I).on("dragover",null).on("dragenter",null).on("dragleave",null).on("drop",null)}dropItem(I,U,H){var le=this;return(0,ze.Z)(function*(){(!H||!(0,M.isStr)(H))&&(H="");let D=(oe,ge)=>(!ge&&(0,M.isFunc)(oe?.setItemName)&&oe.setItemName(I,null,le),oe);return"$legend"==I?(0,Ve.produceLegend)(U,H).then(oe=>D(oe)):le.getObject(I).then(oe=>{if(!oe.obj)return null;let ge=(0,Ze.SO)(U);return(0,M.isFunc)(ge?.performDrop)?ge.performDrop(oe.obj,I,oe.item,H).then(Ee=>D(Ee,ge===Ee)):ge?.accept_drops?(0,Re.ii)(U,oe.obj,"same "+H).then(Ee=>D(Ee,ge===Ee)):(le.cleanupFrame(U),(0,Re.ii)(U,oe.obj,H).then(Ee=>D(Ee)))})})()}updateItems(I){var U=this;return(0,ze.Z)(function*(){if(!U.disp)return!1;let H=[],le=[],D=!1,oe=!1;return(0,M.isStr)(I)?I=[I]:(0,M.isObject)(I)||(void 0===I&&(I=!U.isMonitoring()),oe=!0,D=!!I),U.disp.forEachPainter(ge=>{let Ee=ge.getItemName();if((0,M.isStr)(Ee)&&!(H.indexOf(Ee)>=0)){if(oe){let Ge=U.findItem(Ee);if(!Ge||"_not_monitor"in Ge||"_player"in Ge)return;if(!("_always_monitor"in Ge)){let We=!1,et=(0,Re.St)(Ge._kind);if(void 0!==et?.monitor){if(!1===et.monitor||"never"==et.monitor)return;"always"==et.monitor&&(We=!0)}if(!We&&D)return}}else if(I.indexOf(Ee)<0)return;H.push(Ee),le.push("update:"+ge.getItemDrawOpt())}},!0),U.files_monitoring&&!D&&oe&&U.forEachRootFile(ge=>{U.forEachItem(Ee=>{delete Ee._readobj},ge),delete ge._file}),U.displayItems(H,le)})()}displayItems(I,U){var H=this;return(0,ze.Z)(function*(){if(!I||0==I.length)return!0;let le=H;for(U||(U=[]);U.lengthStart I/O test");let We=new Date;return H.getObject(I[0]).then(()=>{let et=new Date;return(0,L.Ys)("#"+H.disp_frameid).append("h2").html("Item "+I[0]+" reading time = "+(et.getTime()-We.getTime())+"ms"),!0})}let D=new Array(I.length),oe=new Array(I.length),ge=new Array(I.length);for(let We=0;We1&&"'"==et[0]&&"'"==et[et.length-1]&&(I[We]=et.slice(1,et.length-1),Tt=!1);let Bt=le.findItem({name:I[We],check_keys:!0});if(Bt){I[We]=le.itemFullName(Bt);continue}if(Tt&&"["==I[We][0]&&"]"==I[We][I[We].length-1]?(D[We]=k(I[We]),I[We]=D[We].shift()):Tt&&I[We].indexOf("+")>0&&(D[We]=I[We].split("+"),I[We]=D[We].shift()),D[We]&&D[We].length>0){for(let Je=0;Je0&&null===le.findItem(D[We][Je])&&(D[We][Je]=D[We][Je].slice(0,ct)+I[We].slice(ct)),Bt=le.findItem({name:D[We][Je],check_keys:!0}),Bt&&(D[We][Je]=le.itemFullName(Bt))}for("["==U[We][0]&&"]"==U[We][U[We].length-1]?(oe[We]=k(U[We]),U[We]=oe[We].shift()):U[We].indexOf("+")>0?(oe[We]=U[We].split("+"),U[We]=oe[We].shift()):oe[We]=[];oe[We].length0&&!le.findItem(I[We])&&We>0&&(I[We]=I[We].slice(0,ve)+I[0].slice(ve)),Bt=le.findItem({name:I[We],check_keys:!0}),Bt&&(I[We]=le.itemFullName(Bt))}for(let We=I.length-1;We>=0;--We){if(ge[We])continue;let et=le.findItem(I[We]);!et||le.canDisplay(et,U[We])||(le.expandItem(I[We],null,!0),I.splice(We,1),U.splice(We,1),D.splice(We,1))}if(0==I.length)return!0;let Ee=new Array(I.length),Ge=new Array(I.length);for(let We=0;We=0)et=U[We].slice(Bt+8),U[We]=U[We].slice(0,Bt);else for(;Ee.indexOf(et)>=0;)et=I[We]+"_"+Tt++;Ee[We]=et}for(let We=0;We=0&&(et=Tt);for(let Tt=0;Tt{if(!We)return!1;for(let Bt=0;Bt0)return le.dropItem(D[Bt].shift(),ve.getDom(),oe[Bt].shift()).then(()=>et(Bt,ve));D[Bt]=null,I[Bt]=null;for(let Je=0;Jeet(Je,ct))}let Tt=[];for(let Bt=0;Btet(Bt,ve)));return Promise.all(Tt)})})()}reload(){var I=this;return(0,ze.Z)(function*(){return"_online"in I.h&&I.openOnline(I.h._online).then(()=>I.refreshHtml())})()}activateItems(I,U){(0,M.isStr)(I)&&(I=[I]);let H=[],le=[];this.forEachItem(ge=>{ge._background&&(H.push(ge),delete ge._background)});let D=()=>{for(let ge=le.length-1;ge>=0;--ge)this.updateTreeNode(le[ge]);for(let ge=0;ge{if(void 0===ge){if(0==I.length)return D();ge=I.shift()}let Ge=this.findItem(ge);if(!Ge){let We=this.findItem({name:ge,last_exists:!0,check_keys:!0,allow_index:!0});if(!We||!We.last)return oe();if(We.now_found=this.itemFullName(We.last),U)return void 0!==Ee&&We.now_found===Ee?oe():this.expandItem(We.now_found).then(et=>{if(!et)return oe();let Tt=this.itemFullName(We.last);Tt&&(Tt+="/"),oe(Tt+We.rest,We.now_found)});Ge=We.last}if(Ge){let We=Ge._parent;for(;We;){if(!We._isopen){if(!U){Ge=We;break}We._isopen=!0,le.indexOf(We)<0&&le.push(We)}We=We._parent}Ge._background="LightSteelBlue",H.indexOf(Ge)<0&&H.push(Ge)}oe()};if(U&&this.brlayout){if(!this.brlayout.browser_kind)return this.createBrowser("float",!0).then(()=>oe());this.brlayout.browser_visible||this.brlayout.toggleBrowserVisisbility()}oe()}canExpandItem(I){if(!I)return!1;if(I._expand)return!0;let U=(0,Re.St)(I._kind,"::expand");return U&&q(U)}expandItem(I,U,H){var le=this;return(0,ze.Z)(function*(){let D=le.findItem(I),oe=le;if(!D&&U)return;function ge(We,et){return Ee.apply(this,arguments)}function Ee(){return(Ee=(0,ze.Z)(function*(We,et){if((0,M.isStr)(We._expand)&&(We._expand=(0,M.findFunction)(item._expand)),!(0,M.isFunc)(We._expand)){let Tt=(0,Re.St)(We._kind,"::expand");if(Tt?.expand_item&&(Tt=(et=et[Tt.expand_item])&&et._typename?(0,Re.St)("ROOT."+et._typename,"::expand"):null),Tt?.expand||Tt?.get_expand)if((0,M.isFunc)(Tt.expand))We._expand=Tt.expand;else if((0,M.isStr)(Tt.expand)){if(!M.internals.ignore_v6){let Bt=yield(0,M._ensureJSROOT)();yield Bt.require(Tt.prereq),yield Bt._complete_loading()}We._expand=Tt.expand=(0,M.findFunction)(Tt.expand)}else(0,M.isFunc)(Tt.get_expand)&&(We._expand=Tt.expand=yield Tt.get_expand())}return et&&(0,M.isFunc)(We?._expand)&&We._expand(We,et)||et&&A(We,et)?(We._isopen=!0,We._parent&&!We._parent._isopen?(We._parent._isopen=!0,H||oe.updateTreeNode(We._parent)):H||oe.updateTreeNode(We,U),We):-1})).apply(this,arguments)}let Ge=Promise.resolve(-1);if(D){if(!1===D._more||!D._parent&&D._childs)return;if(D._childs&&D._isopen)return D._isopen=!1,void(H||le.updateTreeNode(D,U));D._obj&&(Ge=ge(D,D._obj))}return Ge.then(We=>-1!==We?We:((0,Z.Ae)("Loading "+I),le.getObject(I,H?"hierarchy_expand":"hierarchy_expand_verbose").then(et=>{if((0,Z.Ae)(),et.obj)return ge(et.item,et.obj).then(Tt=>-1!==Tt?Tt:void 0)})))})()}getTopOnlineItem(I){if(I){for(;I&&!("_online"in I);)I=I._parent;return I}return this.h?"_online"in this.h?this.h:this.h._childs&&"_online"in this.h._childs[0]?this.h._childs[0]:null:null}forEachJsonFile(I){if(this.h){if("_jsonfile"in this.h)return I(this.h);if(this.h._childs)for(let U=0;U{le._jsonfile==I&&(H=!0)}),!H)return(0,M.httpRequest)(I,"object").then(le=>{let D={_jsonfile:I,_kind:"ROOT."+le._typename,_jsontmp:le,_name:I.split("/").pop()};if(le.fTitle&&(D._title=le.fTitle),D._get=function(oe){return oe._jsontmp?Promise.resolve(oe._jsontmp):(0,M.httpRequest)(oe._jsonfile,"object").then(ge=>(oe._jsontmp=ge,ge))},U.h)if("TopFolder"==U.h._kind)U.h._childs.push(D);else{let oe=U.h;U.h={_name:"_jsonfile"in oe?"Files":"Items",_kind:"TopFolder",_childs:[oe,D]}}else U.h=D;return U.refreshHtml()})})()}forEachRootFile(I){if(this.h){if(this.h._kind==T&&this.h._file)return I(this.h);if(this.h._childs)for(let U=0;U{D._fullurl===I&&(H=!0)}),H)return;let le=(0,M.isStr)(I)?I:"file";return(0,Z.Ae)(`Opening ${le} ...`),(0,_e.ZB)(I).then(D=>{let oe=U.fileHierarchy(D);if(oe._isopen=!0,U.h)if("TopFolder"==U.h._kind)U.h._childs.push(oe);else{let ge=U.h;U.h={_name:ge._kind==T?"Files":"Items",_kind:"TopFolder",_childs:[ge,oe],_isopen:!0}}else U.h=oe,U._topname&&(oe._name=U._topname);return U.refreshHtml()}).catch(()=>((0,M.isBatchMode)()?console.error(`Fail to open ${le} - check CORS headers`):(0,L.Ys)("#gui_fileCORS").style("background","red").empty()||setTimeout(()=>(0,L.Ys)("#gui_fileCORS").style("background",""),5e3),!1)).finally(()=>(0,Z.Ae)())})()}applyStyle(I){var U=this;return(0,ze.Z)(function*(){if(!I)return!0;let H=Promise.resolve(I);if((0,M.isStr)(I)){let le=U.findItem({name:I,allow_index:!0,check_keys:!0});null!==le?H=U.getObject(le).then(D=>D.obj):I.indexOf(".json")>0&&(H=(0,M.httpRequest)(I,"object"))}return H.then(le=>{le?._typename===M.clTStyle&&Object.assign(M.gStyle,le)})})()}getFileProp(I){let U=this.findItem(I);if(!U)return null;let H=U._name;for(;U._parent;){if(U=U._parent,"_file"in U)return{kind:"file",fileurl:U._file.fURL,itemname:H,localfile:!!U._file.fLocalFile};if("_jsonfile"in U)return{kind:"json",fileurl:U._jsonfile,itemname:H};H=U._name+"/"+H}return null}getOnlineItemUrl(I){(0,M.isStr)(I)&&(I=this.findItem(I));let U=I;for(;U&&void 0===U._online;)U=U._parent;return U?U._online+this.itemFullName(I,U):null}isOnlineItem(I){return null!==this.getOnlineItemUrl(I)}importModule(I){return(0,ze.Z)(function*(){switch(I){case"core":return Promise.resolve().then(Me.bind(Me,9542));case"draw_tree":return Promise.all([Me.e(241),Me.e(592),Me.e(580)]).then(Me.bind(Me,2580));case"hierarchy":return{HierarchyPainter:$,markAsStreamerInfo:m}}return import(I)})()}getOnlineItem(I,U,H){var le=this;return(0,ze.Z)(function*(){let D=U,oe=!1,ge="",Ee="object",Ge=null;if((0,M.isStr)(H)&&0==H.indexOf("hierarchy_expand")&&(oe=!0,H=void 0),I){D=le.getOnlineItemUrl(I);let We=null;if("_kind"in I&&(Ge=(0,Re.St)(I._kind)),oe?(ge="h.json?compact=3",I._expand=F):I._make_request?We=I._module?(yield le.importModule(I._module))[I._make_request]:(0,M.findFunction)(I._make_request):Ge?.make_request&&(We=Ge.make_request),(0,M.isFunc)(We)){let et=We(le,I,D,H);et&&((0,M.isStr)(et)?ge=et:("req"in et&&(ge=et.req),"kind"in et&&(Ee=et.kind)))}!ge&&0!=I._kind.indexOf("ROOT.")&&(ge="item.json.gz?compact=3")}if(!U&&I&&"_cached_draw_object"in le&&!ge){let We=le._cached_draw_object;return delete le._cached_draw_object,We}return ge||(ge="root.json.gz?compact=23"),D&&(D+="/"),D+=ge,new Promise(We=>{let et=null;(0,M.createHttpRequest)(D,Ee,Tt=>{let Bt=ve=>{if((0,M.isFunc)(ve)){let Je=ve(le,I,Tt,H,et);(0,M.isObject)(Je)&&(Tt=Je)}We(Tt)};!oe&&I?._after_request?I._module?le.importModule(I._module).then(ve=>Bt(ve[I._after_request])):Bt((0,M.findFunction)(I._after_request)):Bt(Ge?.after_request)},void 0,!0).then(Tt=>{et=Tt,Tt.send(null)})})})()}openOnline(I){var U=this;return(0,ze.Z)(function*(){let H=le=>{if(U.h=le,!le)return Promise.resolve(null);"_title"in U.h&&""!=U.h._title&&(document.title=U.h._title),le._isopen=!0,U.h._online=I,U.h._get=(Ge,We,et)=>U.getOnlineItem(Ge,We,et),U.h._expand=F;let D=[],oe=[],ge=[],Ee=[];return U.forEachItem(Ge=>{void 0!==Ge._childs&&(Ge._expand=F),Ge._autoload&&Ge._autoload.split(";").forEach(et=>{et.length>4&&et.lastIndexOf(".mjs")==et.length-4?Ee.push(U.importModule(et)):et.length>3&&et.lastIndexOf(".js")==et.length-3?oe.find(Tt=>Tt==et)||oe.push(et):et.length>4&&et.lastIndexOf(".css")==et.length-4?D.find(Tt=>Tt==et)||D.push(et):et&&!ge.find(Tt=>Tt==et)&&ge.push(et)})}),U.loadScripts(oe,ge).then(()=>(0,M.loadScript)(D)).then(()=>Promise.all(Ee)).then(()=>(U.forEachItem(Ge=>{if(!("_drawfunc"in Ge)||!("_kind"in Ge))return;let We="kind:"+Ge._kind;0==Ge._kind.indexOf("ROOT.")&&(We=Ge._kind.slice(5));let et=Ge._drawopt;(!(0,Re.JO)(We)||et)&&(0,Re.Rw)({name:We,func:Ge._drawfunc,script:Ge._drawscript,opt:et})}),U))};if(I||(I=""),(0,M.isObject)(I)){let le=I;return I="",H(le)}return(0,M.httpRequest)(I+"h.json?compact=3","object").then(le=>H(le))})()}getOnlineProp(I){let U=this.findItem(I);if(!U)return null;let H=U._name;for(;U._parent;){if(U=U._parent,"_online"in U)return{server:U._online,itemname:H};H=U._name+"/"+H}return null}fillOnlineMenu(I,U,H){let le=this.findItem(H),D=(0,Re.wu)(le._kind,"nosame;noinspect"),oe=(0,Re.St)(le._kind),ge=!!(0,M.isStr)(le._kind)&&0==le._kind.indexOf("ROOT.");D.opts&&!1!==le._can_draw&&(D.opts.push("inspect"),I.addDrawMenu("Draw",D.opts,Ee=>this.display(H,Ee))),!le._childs&&!1!==le._more&&(le._more||ge||D.expand||D.get_expand)&&I.add("Expand",()=>this.expandItem(H)),oe?.execute&&I.add("Execute",()=>this.executeCommand(H,I.tree_node)),D.opts&&!1!==le._can_draw&&I.addDrawMenu("Draw in new window",D.opts,Ee=>window.open(U.server+"?nobrowser&item="+U.itemname+(this.isMonitoring()?"&monitoring="+this.getMonitoringInterval():"")+(Ee?"&opt="+Ee:""))),D.opts&&D.opts.length>0&&ge&&!1!==le._can_draw&&I.addDrawMenu("Draw as png",D.opts,Ee=>window.open(U.server+U.itemname+"/root.png?w=600&h=400"+(Ee?"&opt="+Ee:""))),"_player"in le&&I.add("Player",()=>this.player(H))}setHierarchy(I){this.h=I,this.refreshHtml()}setMonitoring(I,U){this._runMonitoring("cleanup"),I&&(I=parseInt(I),Number.isInteger(I)&&I>0?(this._monitoring_interval=Math.max(100,I),U=!0):this._monitoring_interval=3e3),this._monitoring_on=U,this.isMonitoring()&&this._runMonitoring()}_runMonitoring(I){return"cleanup"!=I&&this.isMonitoring()?"frame"==I?(delete this._monitoring_handle,void(this._monitoring_frame=requestAnimationFrame(this._runMonitoring.bind(this,"draw")))):("draw"==I&&(delete this._monitoring_frame,this.updateItems()),void(this._monitoring_handle=setTimeout(this._runMonitoring.bind(this,"frame"),this.getMonitoringInterval()))):(this._monitoring_handle&&(clearTimeout(this._monitoring_handle),delete this._monitoring_handle),void(this._monitoring_frame&&(cancelAnimationFrame(this._monitoring_frame),delete this._monitoring_frame)))}getMonitoringInterval(){return this._monitoring_interval||3e3}isMonitoring(){return this._monitoring_on}setDisplay(I,U){!U&&(0,M.isObject)(I)?(this.disp=I,this.disp_kind="custom",this.disp_frameid=null):(this.disp_kind=I,this.disp_frameid=U),!this.register_resize&&"batch"!=this.disp_kind&&(this.register_resize=!0,(0,Z.MG)(this))}getLayout(){return this.disp_kind}removePainter(I){this.forEachItem(U=>{U._painter===I&&(delete U._painter,(0,M.isFunc)(U.clear)&&U.clear())})}clearHierarchy(I){this.disp&&(this.disp.cleanup(),delete this.disp);let U=[];this.forEachItem(H=>{delete H._painter,!I&&(0,M.isFunc)(H.clear)&&H.clear(),I&&U.push(H)}),I&&(this.enableMonitoring(!1),this.selectDom().html(""),U.forEach(H=>{delete H._parent,delete H._childs,delete H._obj,delete H._d3cont}),delete this.h)}getDisplay(){return this.disp}cleanupFrame(I){(0,L.Ys)(I).attr("frame_title",null),this.clearDrop(I);let U=(0,Ze.Eq)(I);U.length>0&&this.forEachItem(H=>{H._painter&&U.indexOf(H._painter)>=0&&delete H._painter})}createDisplay(){var I=this;return(0,ze.Z)(function*(){if("disp"in I){if(I.disp.numDraw()>0||"custom"==I.disp_kind)return I.disp;I.disp.cleanup(),delete I.disp}return"batch"==I.disp_kind?((0,M.isNodeJs)()?(0,$e.Bu)():Promise.resolve(null)).then(H=>(I.disp=new ce.DX(1200,800,H?.body),I.disp)):document.getElementById(I.disp_frameid)?(I.disp=0==I.disp_kind.indexOf("flex")||0==I.disp_kind.indexOf("coll")?new ce.oz(I.disp_frameid):"tabs"==I.disp_kind?new ce.Qq(I.disp_frameid):new ce.VU(I.disp_frameid,I.disp_kind),I.disp.cleanupFrame=I.cleanupFrame.bind(I),M.settings.DragAndDrop&&I.disp.setInitFrame(I.enableDrop.bind(I)),I.disp):null})()}createCustomDisplay(I,U){var H=this;return(0,ze.Z)(function*(){if("simple"!=H.disp_kind)return H.createDisplay();if(H.disp_kind=U,H.disp){let le=H.disp.numDraw();if(le>1||1==le&&!H.disp.findFrame(I))return H.createDisplay();H.disp.cleanup(),delete H.disp}return H.createDisplay()})()}updateOnOtherFrames(I,U){let H=this.disp,le=!1;if(!H)return!1;let D=U._typename?(0,Re.St)("ROOT."+U._typename):null;return D?.draw_field&&U[D?.draw_field]&&(U=U[D?.draw_field]),H.forEachPainter(oe=>{oe===I||oe.getItemName()!=I.getItemName()||(0,M.isFunc)(oe.redrawObject)&&oe.redrawObject(U)&&(le=!0)}),le}checkResize(I){this.disp&&this.disp.checkMDIResize(null,I)}loadScripts(I,U){return(0,ze.Z)(function*(){return!I?.length&&!U?.length||(M.internals.ignore_v6?(0,M.loadScript)(I):(0,M._ensureJSROOT)().then(H=>H.require(U).then(()=>(0,M.loadScript)(I)).then(()=>H._complete_loading())))})()}startGUI(I,U){var H=this;return(0,ze.Z)(function*(){let le=(0,M.decodeUrl)(U),D=In=>{let $n=le.get(In,null);return null===$n&&I&&!I.empty()&&I.node().hasAttribute(In)&&($n=I.attr(In)),$n},ge=In=>{let $n=(In=>{let $n=[];for(;In;){let bn=In.indexOf(";"),rn=bn>0?In.slice(0,bn):In;In=bn>0?In.slice(bn+1):"";let qt=!0;"#"==rn[0]&&(rn=rn.slice(1),qt=!1);let Qt=le.get(rn,null);qt?$n=$n.concat(k(Qt)):null!==Qt&&$n.push(Qt)}return $n})(In);if($n.length>0||!I||I.empty())return $n;for(;In;){let bn=In.indexOf(";"),rn=bn>0?In.slice(0,bn):In;In=bn>0?In.slice(bn+1):"";let qt=!0;if("#"==rn[0]&&(rn=rn.slice(1),qt=!1),"files"===rn||!I.node().hasAttribute(rn))continue;let Qt=I.attr(rn);qt?$n=$n.concat(k(Qt)):null!==Qt&&$n.push(Qt)}return $n},Ee=D("prereq")||"",Ge=le.get("path")||"",We=ge("#file;files"),et=ge("#json;jsons"),Tt=ge("expand"),Bt=D("focus"),ve=ge("#item;items"),Je=ge("#opt;opts"),ct=D("monitoring"),je=D("layout"),Ye=ge("#style"),pt=0,Ht=D("status"),tn=D("browser"),Ct=!!tn,Ot=D("title");ct=null===ct?0:""===ct?3e3:parseInt(ct),null!==D("float")?(tn="float",Ct=!0):null!==D("fix")&&(tn="fix",Ct=!0),H.no_select=D("noselect"),null!==D("files_monitoring")&&(H.files_monitoring=!0),Ot&&(document.title=Ot);let sn=D("load");if(0==Tt.length&&""===D("expand")&&Tt.push(""),Ge){for(let In=0;In{let In;if(sn||Ee)In=H.loadScripts(sn,Ee),sn="",Ee="";else if(tn)In=H.createBrowser(tn),tn="";else if(null!==Ht)In=H.createStatusLine(pt,Ht),Ht=null;else if(et.length>0)In=H.openJsonFile(et.shift());else if(We.length>0)In=H.openRootFile(We.shift());else if(Tt.length>0)In=H.expandItem(Tt.shift());else{if(!(Ye.length>0))return H.refreshHtml().then(()=>H.displayItems(ve,Je)).then(()=>Bt?H.focusOnItem(Bt):H).then(()=>(H.setMonitoring(ct),ve?H.refreshHtml():H));In=H.applyStyle(Ye.shift())}return In.then(Mn)},Ln=null;if(H.is_online){let In=M.internals.getCachedHierarchy||(0,M.findFunction)("GetCachedHierarchy");(0,M.isFunc)(In)&&(Ln=In()),(0,M.isObject)(Ln)||(Ln=""),"draw"==H.is_online&&!ve.length&&ve.push("")}return null!==Ln?H.openOnline(Ln).then(()=>(!H.exclude_browser&&!Ct&&"_browser"in H.h&&(tn=H.h._browser,"no"===tn?tn="":"off"===tn&&(tn="",Ht=null,H.exclude_browser=!0)),"_monitoring"in H.h&&!ct&&(ct=H.h._monitoring),"_loadfile"in H.h&&0==We.length&&(We=k(H.h._loadfile)),"_drawitem"in H.h&&0==ve.length&&(ve=k(H.h._drawitem),Je=k(H.h._drawopt)),"_layout"in H.h&&!je&&("draw"!=H.is_online||ve.length>1)&&(H.disp_kind=H.h._layout),"_toptitle"in H.h&&H.exclude_browser&&document&&(document.title=H.h._toptitle),I&&H.prepareGuiDiv(I.attr("id"),H.disp_kind),Mn())):(I&&H.prepareGuiDiv(I.attr("id"),H.disp_kind),Mn())})()}prepareGuiDiv(I,U){if(this.gui_div=(0,M.isStr)(I)?I:I.attr("id"),this.brlayout=new ce.$B(this.gui_div,this),this.brlayout.create(!this.exclude_browser),!this.exclude_browser){let H=this.brlayout.createBrowserBtns();Z.KL.createSVG(H,Z.KL.diamand,15,"toggle fix-pos browser").style("margin","3px").on("click",()=>this.createBrowser("fix",!0)),this.float_browser_disabled||Z.KL.createSVG(H,Z.KL.circle,15,"toggle float browser").style("margin","3px").on("click",()=>this.createBrowser("float",!0)),this.status_disabled||Z.KL.createSVG(H,Z.KL.three_circles,15,"toggle status line").style("margin","3px").on("click",()=>this.createStatusLine(0,"toggle"))}this.setDisplay(U,this.brlayout.drawing_divid())}hasStatusLine(){return!(this.status_disabled||!this.gui_div||!this.brlayout)&&this.brlayout.hasStatus()}createStatusLine(I,U){var H=this;return(0,ze.Z)(function*(){return!H.status_disabled&&H.gui_div&&H.brlayout?H.brlayout.createStatusLine(I,U):""})()}redrawObject(I){return!(!this._inspector&&!this._streamer_info)&&(this.h=this._streamer_info?w(I):_(I),this.refreshHtml().then(()=>{this.setTopPainter()}))}createBrowser(I,U){var H=this;return(0,ze.Z)(function*(){if(!H.gui_div||H.exclude_browser||!H.brlayout)return!1;let le=(0,L.Ys)(`#${H.gui_div} .jsroot_browser`);if(le.empty())return!1;if("float"==I&&H.float_browser_disabled&&(I="fix"),!le.select(".jsroot_browser_area").empty())return U&&H.brlayout.toggleKind(I),!0;let D=`

        JSROOT version ${M.version}

        `;if(H.is_online)D+='

        Hierarchy in json and xml format

        ';else if(H.no_select)"file"==H.no_select&&(D+='
        ');else{let Ee=(0,L.Ys)("#"+H.gui_div),Ge=Ee.attr("files")||"../files/hsimple.root",We=(0,M.decodeUrl)().get("path")||Ee.attr("path")||"",et=Ge.split(";");D+='

        Read docu how to open files from other servers.

        '}(H.is_online||!H.no_select||"file"==H.no_select)&&(D+='
        '),D+=`
        `,H.brlayout.setBrowserContent(D);let oe=H.brlayout.setBrowserTitle(H.is_online?"ROOT online server":"Read a ROOT file");oe&&oe.on("contextmenu",Ee=>{Ee.preventDefault(),(0,Ie.Z)(Ee).then(Ge=>{H.fillSettingsMenu(Ge,!0),Ge.show()})}),!H.is_online&&!H.no_select&&(H.readSelectedFile=function(){let Ee=le.select(".gui_urlToLoad").property("value").trim();Ee&&(Ee.toLowerCase().lastIndexOf(".json")==Ee.length-5?this.openJsonFile(Ee):this.openRootFile(Ee))},le.select(".gui_selectFileName").property("value","").on("change",Ee=>le.select(".gui_urlToLoad").property("value",Ee.target.value)),le.select(".gui_fileBtn").on("click",()=>le.select(".gui_localFile").node().click()),le.select(".gui_ReadFileBtn").on("click",()=>H.readSelectedFile()),le.select(".gui_ResetUIBtn").on("click",()=>H.clearHierarchy(!0)),le.select(".gui_urlToLoad").on("keyup",Ee=>{"Enter"==Ee.code&&H.readSelectedFile()}),le.select(".gui_localFile").on("change",Ee=>{let Ge=Ee.target.files;for(let We=0;Wege.append("option").attr("value",Ee).html(Ee)),ge.on("change",Ee=>H.setDisplay(Ee.target.value||"flex",H.gui_div+"_drawing"))),H.setDom(H.gui_div+"_browser_hierarchy"),U&&(H.refreshHtml(),H.initializeBrowser()),H.brlayout.toggleBrowserKind(I||"fix")})()}initializeBrowser(){let I=(0,L.Ys)(`#${this.gui_div} .jsroot_browser`);if(I.empty()||!this.brlayout)return;this.brlayout.adjustBrowserSize();let U=I.select(".gui_layout").node();if(U){let H=!1;for(let le in U.options){let D=U.options[le].text;if((0,M.isStr)(D)&&(D==this.getLayout()||D.replace(/ /g,"")==this.getLayout())){U.selectedIndex=le,H=!0;break}}if(!H){let le=document.createElement("option");le.innerHTML=le.value=this.getLayout(),U.appendChild(le),U.selectedIndex=U.options.length-1}}if(this.is_online)this.h?._toptitle&&this.brlayout.setBrowserTitle(this.h._toptitle),I.select(".gui_monitoring").property("checked",this.isMonitoring()).on("click",H=>{this.enableMonitoring(H.target.checked),this.updateItems()});else if(!this.no_select){let H="";this.forEachRootFile(le=>{H||(H=le._fullurl)}),I.select(".gui_urlToLoad").property("value",H)}}enableMonitoring(I){this.setMonitoring(void 0,I);let U=(0,L.Ys)(`#${this.gui_div} .jsroot_browser .gui_monitoring`);!U.empty()&&U.property("checked")!==I&&U.property("checked",I)}}function ee(de,I){return re.apply(this,arguments)}function re(){return(re=(0,ze.Z)(function*(de,I){let U=new $("sinfo",de,"__as_dark_mode__");return(0,M.isBatchMode)()?(U.selectDom().property("_json_object_",I),U):(U._streamer_info=!0,U.h=w(I),U.refreshHtml().then(()=>(U.setTopPainter(),U)))})).apply(this,arguments)}function be(de,I){return he.apply(this,arguments)}function he(){return(he=(0,ze.Z)(function*(de,I){(0,Ze.Eq)(de);let U=new $("inspector",de,"__as_dark_mode__");return(0,M.isBatchMode)()?(U.selectDom().property("_json_object_",I),U):(U.default_by_click="expand",U.with_icons=!1,U._inspector=!0,U.selectDom().classed("jsroot_inspector")&&(U.removeInspector=function(){this.selectDom().remove()}),U.fill_context=function(H,le){let D=(0,Re.wu)(le._kind,"nosame");D.opts&&H.addDrawMenu("nosub:Draw",D.opts,function(oe){if(!le||!le._obj)return;let ge=le._obj,Ee=this.selectDom().node();if(this.removeInspector&&(Ee=Ee.parentNode,this.removeInspector(),"inspect"==oe))return this.showInspector(ge);(0,Ze.Eq)(Ee),(0,Re.ii)(Ee,ge,oe)})},U.h=_(I),U.refreshHtml().then(()=>(U.setTopPainter(),U)))})).apply(this,arguments)}Ze.tK.prototype.showInspector=function(de){if("check"===de)return!0;let I=this.selectDom(),U=(0,$e.Yo)(I),H=Math.round(.05*U.width)+"px",le=Math.round(.05*U.height)+"px",D="root_inspector_"+M.internals.id_counter++;return I.append("div").attr("id",D).attr("class","jsroot_inspector").style("position","absolute").style("top",le).style("bottom",le).style("left",H).style("right",H),de?._typename||(de=this.getObject()),be(D,de)},M.internals.drawInspector=be},2487:(jr,At,Me)=>{"use strict";Me.d(At,{$B:()=>R,DX:()=>J,Qk:()=>Re,Qq:()=>ue,VU:()=>Y,nh:()=>Ve,oz:()=>K});var ze=Me(4788),M=Me(2253),L=Me(9542),_e=Me(3675),De=Me(6458),$e=Me(4383),Ze=Me(9622);let Ie=null;function Ve(){return Ie}function Re(P){Ie=P}class ce extends _e.be{constructor(v){super(),this.frameid=v,"$batch$"!=v&&(this.setDom(v),this.selectDom().property("mdi",this)),this.cleanupFrame=De.Eq,this.active_frame_title=""}setInitFrame(v){this.initFrame=v,this.forEachFrame(A=>v(A))}beforeCreateFrame(v){this.active_frame_title=v}afterCreateFrame(v){return(0,L.isFunc)(this.initFrame)&&this.initFrame(v),v}forEachFrame(v,A){console.warn(`forEachFrame not implemented in MDIDisplay ${typeof v} ${A}`)}forEachPainter(v,A){this.forEachFrame(w=>{new De.tK(w).forEachPainter(m=>v(m,w))},A)}numDraw(){let v=0;return this.forEachFrame(()=>++v),v}findFrame(v,A){let w=null;return this.forEachFrame(m=>{(0,M.Ys)(m).attr("frame_title")==v&&(w=m)}),!w&&A&&(w=this.createFrame(v)),w}activateFrame(v){this.active_frame_title=v?(0,M.Ys)(v).attr("frame_title"):""}getActiveFrame(){return this.findFrame(this.active_frame_title)}checkMDIResize(v,A){let w=null;this.forEachPainter((m,_)=>{if((!v||(0,M.Ys)(_).attr("id")==v)&&null!==m.getItemName()&&(0,L.isFunc)(m.checkResize)){if(w===_)return;m.checkResize(A),w=_}})}cleanup(){this.active_frame_title="",this.forEachFrame(this.cleanupFrame),this.selectDom().html("").property("mdi",null)}}class Y extends ce{constructor(v,A,w){super(v),this.framecnt=0,this.getcnt=0,this.groups=[],this.vertical=A&&"v"==A[0],this.use_separarators=!A||A.indexOf("x")<0,this.simple_layout=!1;let m=this.selectDom();if(m.style("overflow","hidden"),"simple"===A)return this.simple_layout=!0,this.use_separarators=!1,void(this.framecnt=1);let k,F,_=2;if(0==A.indexOf("grid")||w){A=w?A+"x"+w:A.slice(4).trim(),this.use_separarators=!1,"i"===A[0]&&(this.use_separarators=!0,A=A.slice(1));let T,$,q=A.indexOf("x");if(q>0?($=parseInt(A.slice(q+1)),T=parseInt(A.slice(0,q))):T=$=parseInt(A),Number.isInteger(T)||(T=3),Number.isInteger($)||($=3),$>1)this.vertical=!0,_=$,T>1&&(k=new Array(_).fill(T));else{if(!(T>1))return this.simple_layout=!0,this.use_separarators=!1,void(this.framecnt=1);this.vertical=!1,_=T}A=""}if(A&&A.indexOf("_")>0){let q=parseInt(A.slice(A.indexOf("_")+1),10);if(Number.isInteger(q)&&q>10)for(A=A.slice(0,A.indexOf("_")),F=[];q>0;)F.unshift(Math.max(q%10,1)),q=Math.round((q-F[0])/10),0===F[0]&&(F[0]=1)}if(A=A?parseInt(A.replace(/^\D+/g,""),10):0,Number.isInteger(A)&&A>1)if(A<10)_=A;else{for(k=[];A>0;)k.unshift(A%10),A=Math.round((A-k[0])/10),0===k[0]&&(k[0]=1);_=k.length}F&&F.length!==_&&(F=void 0),this.simple_layout||((0,Ze.DW)('.jsroot_vline:after { content:""; position: absolute; top: 0; bottom: 0; left: 50%; border-left: 1px dotted #ff0000; }\n .jsroot_hline:after { content:""; position: absolute; left: 0; right: 0; top: 50%; border-top: 1px dotted #ff0000; }\n .jsroot_separator { pointer-events: all; border: 0; margin: 0; padding: 0; }',m.node(),"grid_style"),this.createGroup(this,m,_,k,F))}createGroup(v,A,w,m,_){_||(_=new Array(w));let k=0,F=0;for(let q=0;q0&&(T.position=v.groups[q-1].position+v.groups[q-1].size),T.position0=T.position,(!m||!m[q]||m[q]<2)&&(T.drawid=this.framecnt++),v.groups.push(T);let $=A.append("div").attr("groupid",T.id);v.vertical?$.style("float","bottom").style("height",T.size+"%").style("width","100%"):$.style("float","left").style("width",T.size+"%").style("height","100%"),T.drawid>=0?($.classed("jsroot_newgrid",!0),(0,L.isStr)(this.frameid)&&$.attr("id",`${this.frameid}_${T.drawid}`)):$.style("display","flex").style("flex-direction",v.vertical?"row":"column"),m&&m[q]>1&&(T.vertical=!v.vertical,T.groups=[],$.style("overflow","hidden"),this.createGroup(T,$,m[q]))}if(this.use_separarators&&this.createSeparator)for(let q=1;q{let he=m.firstChild;for(;he;){if(he.getAttribute("groupid")==be)return(0,M.Ys)(he);he=he.nextSibling}return(0,M.Ys)(m).select(`[groupid='${be}']`)},T=be=>{let he=_.vertical?"height":"width",de=_.groups[be].size+"%";q(be).style(he,de).selectAll(".jsroot_separator").style(he,de)},$=be=>{let he=q(be);he.classed("jsroot_newgrid")||(he=he.select(".jsroot_newgrid")),he.each(function(){(0,De.SI)(this)})};if("start"==A)return F.startpos=F.position,void(F.acc_drag=0);if("end"==A)return void(Math.abs(F.startpos-F.position)>=.5&&($(k-1),$(k)));let ee;"restore"==A?ee=F.position0:_.vertical?(F.acc_drag+=A.dy,ee=F.startpos+(F.acc_drag+2)/m.clientHeight*100):(F.acc_drag+=A.dx,ee=F.startpos+(F.acc_drag+2)/m.clientWidth*100);let re=F.position-ee;Math.abs(re)<.3||Math.min(_.groups[k-1].size-re,F.size+re)<3||(_.groups[k-1].size-=re,F.size+=re,F.position=ee,w.style(_.vertical?"top":"left",`calc(${ee}% - 2px)`),T(k-1),T(k),"restore"==A&&($(k-1),$(k)))}createSeparator(v,A,w){let m=A.append("div");m.classed("jsroot_separator",!0).classed(v.vertical?"jsroot_hline":"jsroot_vline",!0).property("handle",v).property("separator_id",w.id).style("position","absolute").style(v.vertical?"top":"left",`calc(${w.position}% - 2px)`).style(v.vertical?"width":"height",(v.size||100)+"%").style(v.vertical?"height":"width","5px").style("cursor",v.vertical?"ns-resize":"ew-resize");let _=this,k=(0,M.oh)().on("start",function(){_.handleSeparator(this,"start")}).on("drag",function(F){_.handleSeparator(this,F)}).on("end",function(){_.handleSeparator(this,"end")});m.call(k).on("dblclick",function(){_.handleSeparator(this,"restore")}),L.browser.touches&&!A.on("touchmove")&&A.on("touchmove",function(){})}forEachFrame(v){this.simple_layout?v(this.getGridFrame()):this.selectDom().selectAll(".jsroot_newgrid").each(function(){v(this)})}getActiveFrame(){if(this.simple_layout)return this.getGridFrame();let v=super.getActiveFrame();return v||(this.forEachFrame(A=>{v||(v=A)}),v)}numGridFrames(){return this.framecnt}getGridFrame(v){if(this.simple_layout)return this.selectDom("origin").node();let A=null;return this.selectDom().selectAll(".jsroot_newgrid").each(function(){0==v--&&(A=this)}),A}createFrame(v){this.beforeCreateFrame(v);let A=null,w=this.framecnt||2;for(;!A&&w--;)A=this.getGridFrame(this.getcnt),!this.simple_layout&&this.framecnt&&(this.getcnt=(this.getcnt+1)%this.framecnt),(0,M.Ys)(A).classed("jsroot_fixed_frame")&&(A=null);return A&&(this.cleanupFrame(A),(0,M.Ys)(A).attr("frame_title",v)),this.afterCreateFrame(A)}}class ue extends ce{constructor(v){super(v),this.cnt=0,this.selectDom().style("overflow","hidden")}cleanup(){this.selectDom().style("overflow",null),this.cnt=0,super.cleanup()}forEachFrame(v,A){if((0,L.isFunc)(v))if(A){let m=this.getActiveFrame();m&&v(m)}else this.selectDom().select(".jsroot_tabs_main").selectAll(".jsroot_tabs_draw").each(function(){v(this)})}modifyTabsFrame(v,A){let k,F,w=this.selectDom().select(".jsroot_tabs"),m=w.select(".jsroot_tabs_labels"),_=w.select(".jsroot_tabs_main");if(m.selectAll(".jsroot_tabs_label").each(function(){let T=(0,M.Ys)(this).property("frame_id")==v;"activate"==A?(0,M.Ys)(this).style("background",T?L.settings.DarkMode?"black":"white":null):"close"==A&&T&&this.parentNode.remove()}),_.selectAll(".jsroot_tabs_draw").each(function(){(0,M.Ys)(this).property("frame_id")===v?k=this:F=this}),k)if("activate"==A)k.parentNode.appendChild(k);else if("close"==A){let q=k===this.getActiveFrame();(0,De.Eq)(k),k.remove(),q&&this.activateFrame(F)}}activateFrame(v){v&&this.modifyTabsFrame((0,M.Ys)(v).property("frame_id"),"activate"),super.activateFrame(v)}createFrame(v){this.beforeCreateFrame(v);let m,_,A=this.selectDom(),w=A.select(".jsroot_tabs");w.empty()?(w=A.append("div").classed("jsroot_tabs",!0),m=w.append("div").classed("jsroot_tabs_labels",!0),_=w.append("div").classed("jsroot_tabs_main",!0)):(m=w.select(".jsroot_tabs_labels"),_=w.select(".jsroot_tabs_main")),(0,Ze.DW)(`.jsroot_tabs { display: flex; flex-direction: column; position: absolute; overflow: hidden; inset: 0px 0px 0px 0px; }\n .jsroot_tabs_labels { white-space: nowrap; position: relative; overflow-x: auto; }\n .jsroot_tabs_labels .jsroot_tabs_label {\n color: ${L.settings.DarkMode?"#ddd":"inherit"}; background: ${L.settings.DarkMode?"#111":"#eee"}; border: 1px solid ${L.settings.DarkMode?"#333":"#ccc"}; display: inline-block; font-size: 1rem; left: 1px;\n margin-left: 3px; padding: 0px 5px 1px 5px; position: relative; vertical-align: bottom;\n }\n .jsroot_tabs_main { margin: 0; flex: 1 1 0%; position: relative; }\n .jsroot_tabs_main .jsroot_tabs_draw { overflow: hidden; background: ${L.settings.DarkMode?"black":"white"}; position: absolute; top: 0px; bottom: 0px; left: 0px; right: 0px; }`,A.node(),"tabs_style");let $=this.cnt++,ee=this,re=v;if((!re||!(0,L.isStr)(re))&&(re=`frame_${$}`),re.length>15){let he=re.lastIndexOf("/");he==re.length-1&&(he=re.lastIndexOf("/",he-1)),re=he>0&&re.length-he<20&&re.length-he>1?re.slice(he+1):"..."+re.slice(re.length-17)}m.append("span").attr("tabindex",0).append("label").attr("class","jsroot_tabs_label").style("background","white").property("frame_id",$).text(re).attr("title",v).on("click",function(he){he.preventDefault(),ee.modifyTabsFrame((0,M.Ys)(this).property("frame_id"),"activate")}).append("button").attr("title","close").attr("style","margin-left: .5em; padding: 0; font-size: 0.5em; width: 1.8em; height: 1.8em; vertical-align: center;").html("✕").on("click",function(){ee.modifyTabsFrame((0,M.Ys)(this.parentNode).property("frame_id"),"close")});let be=_.append("div").attr("frame_title",v).attr("class","jsroot_tabs_draw").property("frame_id",$);return this.modifyTabsFrame($,"activate"),this.afterCreateFrame(be.node())}}class K extends ce{constructor(v){super(v),this.cnt=0,this.selectDom().on("contextmenu",A=>this.showContextMenu(A)).style("overflow","auto")}cleanup(){this.selectDom().style("overflow",null).on("contextmenu",null),this.cnt=0,super.cleanup()}forEachFrame(v,A){if(!(0,L.isFunc)(v))return;let w=this;this.selectDom().select(".jsroot_flex_top").selectAll(".jsroot_flex_draw").each(function(){A&&"min"==w.getFrameState(this)||v(this)})}getActiveFrame(){let v=super.getActiveFrame();return v&&"min"!=(0,M.Ys)(v.parentNode).property("state")||(v=null,this.forEachFrame(A=>{v=A},!0)),v}activateFrame(v){if("first"===v||"last"===v){let w=null;this.forEachFrame(m=>{("last"==v||!w)&&(w=m)},!0),v=w}if(!v||"jsroot_flex_draw"!=v.getAttribute("class")||this.getActiveFrame()===v)return;super.activateFrame(v);let A=v.parentNode;A.parentNode.append(A),"min"!=this.getFrameState(v)&&((0,De.O5)({pp:(0,De.FG)(v),active:!0}),(0,De.SI)(v))}getFrameState(v){return(0,M.Ys)(v.parentNode).property("state")}getFrameRect(v){if("max"==this.getFrameState(v)){let _=this.selectDom().select(".jsroot_flex_top");return{x:0,y:0,w:_.node().clientWidth,h:_.node().clientHeight}}let A=(0,M.Ys)(v.parentNode),w=A.style("left"),m=A.style("top");return{x:parseInt(w.slice(0,w.length-2)),y:parseInt(m.slice(0,m.length-2)),w:A.node().clientWidth,h:A.node().clientHeight}}changeFrameState(v,A,w){let m=(0,M.Ys)(v.parentNode),_=m.property("state"),k=this.selectDom().select(".jsroot_flex_top");if(_==A)return!1;switch("normal"==_&&m.property("original_style",m.attr("style")),k.style("overflow",null),A){case"min":m.style("height","auto").style("width","auto"),m.select(".jsroot_flex_draw").style("display","none");break;case"max":m.style("height","100%").style("width","100%").style("left","").style("top",""),m.select(".jsroot_flex_draw").style("display",null),k.style("overflow","hidden");break;default:m.select(".jsroot_flex_draw").style("display",null),m.attr("style",m.property("original_style"))}if(m.select(".jsroot_flex_header").selectAll("button").each(function(F){let q=(0,M.Ys)(this);"minimize"==F.t&&"min"==A||"maximize"==F.t&&"max"==A?q.html("▞").attr("title","restore"):q.html(F.n).attr("title",F.t)}),m.property("state",A),m.select(".jsroot_flex_resize").style("display","normal"==A?null:"none"),"min"==A){const F=this.getFrameRect(v),q=this.selectDom().select(".jsroot_flex_top"),T=q.node().clientWidth,$=q.node().clientHeight,ee=[],re=4,be=(de,I)=>de.x<=I.x&&de.x+de.w>=I.x||I.x<=de.x&&I.x+I.w>=de.x,he=(de,I)=>de.y<=I.y&&de.y+de.h>=I.y||I.y<=de.y&&I.y+I.h>=de.y;this.forEachFrame(de=>{de!==v&&"min"==this.getFrameState(de)&&ee.push(this.getFrameRect(de))}),F.y=$;do{F.x=re,F.y-=F.h+re;let de=re,I=!1;ee.forEach(U=>{he(U,F)&&(de=Math.max(de,U.x+U.w+re),be(U,F)&&(I=!0))}),I&&(F.x=de)}while(F.x+F.w>T-re&&F.y>0);F.y<0&&(F.x=re,F.y=$-F.h-re),m.style("left",F.x+"px").style("top",F.y+"px")}else w||(0,De.SI)(v);return!0}_clickButton(v){let A=(0,M.Ys)(v).datum(),w=(0,M.Ys)(v.parentNode.parentNode),m=w.select(".jsroot_flex_draw").node();if("close"==A.t)return this.cleanupFrame(m),w.remove(),void this.activateFrame("last");let k,_=w.property("state");k="maximize"==A.t?"max"==_?"normal":"max":"min"==_?"normal":"min",this.changeFrameState(m,k)&&this.activateFrame("min"!=k?m:"last")}createFrame(v){this.beforeCreateFrame(v);let A=this,w=this.selectDom(),m=w.select(".jsroot_flex_top");(0,Ze.DW)(".jsroot_flex_top { overflow: auto; position: relative; height: 100%; width: 100%; }\n .jsroot_flex_btn { float: right; padding: 0; width: 1.4em; text-align: center; font-size: 10px; margin-top: 2px; margin-right: 4px; }\n .jsroot_flex_header { height: 23px; overflow: hidden; background-color: lightblue; }\n .jsroot_flex_header p { margin: 1px; float: left; font-size: 14px; padding-left: 5px; }\n .jsroot_flex_draw { overflow: hidden; width: 100%; height: calc(100% - 24px); }\n .jsroot_flex_frame { border: 1px solid black; box-shadow: 1px 1px 2px 2px #aaa; background: white; }\n .jsroot_flex_resize { position: absolute; right: 2px; bottom: 2px; overflow: hidden; cursor: nwse-resize; }\n .jsroot_flex_resizable_helper { border: 2px dotted #00F; }",w.node(),"flex_style"),m.empty()&&(m=w.append("div").classed("jsroot_flex_top",!0));let _=m.node().clientWidth,k=m.node().clientHeight,F=m.append("div");F.html(`

        ${v}

        `),F.attr("class","jsroot_flex_frame").style("position","absolute").style("left",Math.round(_*(this.cnt%5)/10)+"px").style("top",Math.round(k*(this.cnt%5)/10)+"px").style("width",Math.round(.58*_)+"px").style("height",Math.round(.58*k)+"px").property("state","normal").select(".jsroot_flex_header").on("click",function(){A.activateFrame((0,M.Ys)(this.parentNode).select(".jsroot_flex_draw").node())}).selectAll("button").data([{n:"✕",t:"close"},{n:"▔",t:"maximize"},{n:"▁",t:"minimize"}]).enter().append("button").attr("type","button").attr("class","jsroot_flex_btn").attr("title",he=>he.t).html(he=>he.n).on("click",function(){A._clickButton(this)});let q=null,T=null,$=!1,ee=(0,M.oh)().subject(Object),re=[];ee.on("start",function(he){if("button"==he.sourceEvent.target.type)return A._clickButton(he.sourceEvent.target);if((0,Ze.hj)(he.sourceEvent))return;let de=(0,M.Ys)(this.parentNode);!de.classed("jsroot_flex_frame")||"max"==de.property("state")||($=!(0,M.Ys)(this).classed("jsroot_flex_resize"),($||"min"!=de.property("state"))&&(A.activateFrame(de.select(".jsroot_flex_draw").node()),T=m.append("div").classed("jsroot_flex_resizable_helper",!0),T.attr("style",de.attr("style")),"min"==de.property("state")&&T.style("width",de.node().clientWidth+"px").style("height",de.node().clientHeight+"px"),he.sourceEvent.preventDefault(),he.sourceEvent.stopPropagation(),q=de,re=[]))}).on("drag",function(he){if(!T)return;he.sourceEvent.preventDefault(),he.sourceEvent.stopPropagation();let de=(I,U,H)=>{if(I>=re.length){let le=T.style(U);re[I]=parseInt(le.slice(0,le.length-2))}re[I]+=H,T.style(U,Math.max(0,re[I])+"px")};$?(de(0,"left",he.dx),de(1,"top",he.dy)):(de(0,"width",he.dx),de(1,"height",he.dy))}).on("end",function(he){T&&(he.sourceEvent.preventDefault(),he.sourceEvent.stopPropagation(),$?(q.style("left",T.style("left")),q.style("top",T.style("top"))):(q.style("width",T.style("width")),q.style("height",T.style("height"))),T.remove(),T=null,$||(0,De.SI)(q.select(".jsroot_flex_draw").node()))}),F.select(".jsroot_flex_header").call(ee),F.select(".jsroot_flex_resize").call(ee);let be=F.select(".jsroot_flex_draw").attr("frame_title",v).property("frame_cnt",this.cnt++).node();return this.afterCreateFrame(be)}minimizeAll(){this.forEachFrame(v=>this.changeFrameState(v,"min"))}showAll(){this.forEachFrame(v=>{"min"==this.getFrameState(v)&&this.changeFrameState(v,"normal")})}closeAllFrames(){let v=[];this.forEachFrame(A=>v.push(A)),v.forEach(A=>{this.cleanupFrame(A),(0,M.Ys)(A.parentNode).remove()})}sortFrames(v){let A=[];if(this.forEachFrame($=>{let ee=this.getFrameState($);"min"!=ee&&("max"==ee&&this.changeFrameState($,"normal",!0),A.push($))}),0==A.length)return;let w=this.selectDom(),m=w.node().clientWidth,_=w.node().clientHeight,k=Math.min(40,Math.round(.4*m/A.length)),F=Math.min(40,Math.round(.4*_/A.length)),q=Math.ceil(Math.sqrt(A.length)),T=q;q>1&&q*(q-1)>=A.length&&(m>_?T--:q--),A.forEach(($,ee)=>{let re=(0,M.Ys)($.parentNode);"cascade"==v?re.style("left",ee*k+"px").style("top",ee*F+"px").style("width",Math.round(.58*m)+"px").style("height",Math.round(.58*_)+"px"):re.style("left",Math.round(m/q*(ee%q))+"px").style("top",Math.round(_/T*((ee-ee%q)/q))+"px").style("width",Math.round(m/q-4)+"px").style("height",Math.round(_/T-4)+"px"),(0,De.SI)($)})}showContextMenu(v){if("jsroot_flex_top"!=v.target.getAttribute("class")||0==this.numDraw())return;v.preventDefault();let A=[],w=0;this.forEachFrame(_=>{A.push(_),"min"==this.getFrameState(_)&&w++});let m=this.getActiveFrame();A.sort((_,k)=>(0,M.Ys)(_).property("frame_cnt")<(0,M.Ys)(k).property("frame_cnt")?-1:1),(0,$e.Z)(v,this).then(_=>{_.add("header:Flex"),_.add("Cascade",()=>this.sortFrames("cascade"),"Cascade frames"),_.add("Tile",()=>this.sortFrames("tile"),"Tile all frames"),wthis.minimizeAll(),"Minimize all frames"),w>0&&_.add("Show all",()=>this.showAll(),"Restore minimized frames"),_.add("Close all",()=>this.closeAllFrames()),_.add("separator"),A.forEach((k,F)=>_.addchk(k===m,("min"==this.getFrameState(k)?"[min] ":"")+(0,M.Ys)(k).attr("frame_title"),F,q=>{let T=A[q];"min"==this.getFrameState(T)&&this.changeFrameState(T,"normal"),this.activateFrame(T)})),_.show()})}}class J extends ce{constructor(v,A,w){super("$batch$"),this.frames=[],this.width=v||1200,this.height=A||800,this.jsdom_body=w||(0,M.Ys)("body")}forEachFrame(v){this.frames.forEach(v)}createFrame(v){this.beforeCreateFrame(v);let A=this.jsdom_body.append("div").style("visible","hidden").attr("width",this.width).attr("height",this.height).style("width",this.width+"px").style("height",this.height+"px").attr("id","jsroot_batch_"+this.frames.length).attr("frame_title",v);return 0==this.frames.length&&(L.internals.svg_3ds=void 0),this.frames.push(A.node()),this.afterCreateFrame(A.node())}numFrames(){return this.frames.length}makeJSON(v,A){let w=this.frames[v];if(!w)return;let m=(0,M.Ys)(w).property("_json_object_");return m?((0,M.Ys)(w).property("_json_object_",null),(0,L.toJSON)(m,A)):void 0}makeSVG(v){let A=this.frames[v];if(!A)return;let w=(0,M.Ys)(A),m=L.internals.svg_3ds&&L.internals.processSvgWorkarounds;w.select("svg").attr("xmlns","http://www.w3.org/2000/svg").attr("xmlns:xlink","http://www.w3.org/1999/xlink").attr("width",this.width).attr("height",this.height).attr("title",null).attr("style",null).attr("class",null).attr("x",null).attr("y",null);let _=w.html();return m&&(_=L.internals.processSvgWorkarounds(_,v!=this.frames.length-1)),_=(0,_e.ln)(_),w.remove(),_}}class R{constructor(v,A,w){this.gui_div=v,this.hpainter=A,this.objpainter=w,this.browser_kind=null}main(){return(0,M.Ys)("#"+this.gui_div)}browser(){return this.main().select(".jsroot_browser")}drawing(){return(0,M.Ys)(`#${this.gui_div}_drawing`)}status(){return(0,M.Ys)(`#${this.gui_div}_status`)}drawing_divid(){return this.gui_div+"_drawing"}checkResize(){(0,L.isFunc)(this.hpainter?.checkResize)?this.hpainter.checkResize():(0,L.isFunc)(this.objpainter?.checkResize)&&this.objpainter.checkResize(!0)}createStyle(){let v=L.settings.DarkMode?"black":"#E6E6FA",w=L.settings.DarkMode?"#ddd":"inherit",m=L.settings.DarkMode?`background-color: #222; color: ${w}`:"";(0,Ze.DW)(`.jsroot_browser { pointer-events: none; position: absolute; left: 0; top: 0; bottom: 0; right:0; margin: 0; border: 0; overflow: hidden; }\n .jsroot_draw_area { background-color: ${v}; overflow: hidden; margin: 0; border: 0; }\n .jsroot_browser_area { color: ${w}; background-color: ${v}; font-size: 12px; font-family: Verdana; pointer-events: all; box-sizing: initial; }\n .jsroot_browser_area input { ${m} }\n .jsroot_browser_area select { ${m} }\n .jsroot_browser_title { font-family: Verdana; font-size: 20px; color: ${L.settings.DarkMode?"#ccc":"inherit"}; }\n .jsroot_browser_btns { pointer-events: all; opacity: 0; display:flex; flex-direction: column; }\n .jsroot_browser_btns:hover { opacity: 0.3; }\n .jsroot_browser_area p { margin-top: 5px; margin-bottom: 5px; white-space: nowrap; }\n .jsroot_browser_hierarchy { flex: 1; margin-top: 2px; }\n .jsroot_status_area { background-color: ${v}; overflow: hidden; font-size: 12px; font-family: Verdana; pointer-events: all; }\n .jsroot_float_browser { border: solid 3px white; }\n .jsroot_browser_resize { position: absolute; right: 3px; bottom: 3px; margin-bottom: 0px; margin-right: 0px; opacity: 0.5; cursor: se-resize; z-index: 1; }\n .jsroot_status_label { margin: 3px; margin-left: 5px; font-size: 14px; vertical-align: middle; white-space: nowrap; }\n .jsroot_separator { pointer-events: all; border: 0; margin: 0; padding: 0; }\n .jsroot_h_separator { cursor: ns-resize; background-color: azure; }\n .jsroot_v_separator { cursor: ew-resize; background-color: azure; }`,this.main().node(),"browser_layout_style")}create(v){let A=this.main();A.append("div").attr("id",this.drawing_divid()).classed("jsroot_draw_area",!0).style("position","absolute").style("left",0).style("top",0).style("bottom",0).style("right",0),v&&A.append("div").classed("jsroot_browser",!0),this.createStyle()}createBrowserBtns(){let v=this.browser();if(v.empty())return;let A=v.append("div").classed("jsroot_browser_btns",!0).classed("jsroot",!0);return A.style("position","absolute").style("left","7px").style("top","7px"),L.browser.touches&&A.style("opacity","0.2"),A}removeBrowserBtns(){this.browser().select(".jsroot_browser_btns").remove()}setBrowserContent(v){let A=this.browser();A.empty()||A.insert("div",".jsroot_browser_btns").classed("jsroot_browser_area",!0).style("position","absolute").style("left",0).style("top",0).style("bottom",0).style("width","250px").style("overflow","hidden").style("padding-left","5px").style("display","flex").style("flex-direction","column").html(`

        title

        ${v}`)}hasContent(){let v=this.browser();return!v.empty()&&!v.select(".jsroot_browser_area").empty()}deleteContent(v){let A=this.browser();A.empty()||(v||this.createStatusLine(0,"delete"),this.toggleBrowserVisisbility(!0),v?(A.select(".jsroot_browser_area").remove(),A.select(".jsroot_browser_btns").remove(),A.select(".jsroot_v_separator").remove()):A.selectAll("*").remove(),delete this.browser_visible,delete this.browser_kind,this.checkResize())}hasStatus(){return!this.browser().empty()&&!this.status().empty()}setBrowserTitle(v){let A=this.browser(),w=A.empty()?null:A.select(".jsroot_browser_title");return w&&w.text(v).style("cursor","flex"==this.browser_kind?"move":null),w}toggleKind(v){"changing"!==this.browser_visible&&(v===this.browser_kind?this.toggleBrowserVisisbility():this.toggleBrowserKind(v))}createStatusLine(v,A){var w=this;return(0,ze.Z)(function*(){let m=w.browser();if(m.empty())return"";let _=w.gui_div+"_status",k=(0,M.Ys)("#"+_),F=!k.empty();if("toggle"===A?A=!F:"delete"===A?(A=!1,v=0,delete w.status_layout):void 0===A&&(A=!0,w.status_layout="app"),F)return!0===A?_:(m.select(".jsroot_h_separator").remove(),k.remove(),"app"!==w.status_layout&&delete w.status_layout,w.status_handler&&L.internals.showStatus===w.status_handler&&(delete L.internals.showStatus,delete w.status_handler),w.adjustSeparators(null,0,!0),"");if(!1===A)return"";let q=w.drawing().style("left");m.insert("div",".jsroot_browser_area").attr("id",_).classed("jsroot_status_area",!0).style("position","absolute").style("left",q).style("height","20px").style("bottom",0).style("right",0).style("margin",0).style("border",0);let T=m.insert("div",".jsroot_browser_area").classed("jsroot_separator",!0).classed("jsroot_h_separator",!0).style("position","absolute").style("left",q).style("right",0).style("bottom","20px").style("height","5px"),$=(0,M.oh)().on("start",()=>{w._hsepar_move=w._hsepar_position,T.style("background-color","grey")}).on("drag",re=>{w._hsepar_move-=re.dy,w.adjustSeparators(null,Math.max(5,Math.round(w._hsepar_move)))}).on("end",()=>{delete w._hsepar_move,T.style("background-color",null),w.checkResize()});if(T.call($),L.browser.touches&&!m.on("touchmove")&&m.on("touchmove",function(){}),(!v||(0,L.isStr)(v))&&(v=w.last_hsepar_height||20),w.adjustSeparators(null,v,!0),"app"==w.status_layout)return _;w.status_layout=new Y(_,"horizx4_1213");let ee=["object name","object title","mouse coordinates","object info"];for(let re=0;re<4;++re)(0,M.Ys)(w.status_layout.getGridFrame(re)).attr("title",ee[re]).style("overflow","hidden").append("label").attr("class","jsroot_status_label");return L.internals.showStatus=w.status_handler=w.showStatus.bind(w),_})()}adjustSeparators(v,A,w,m){if(!this.gui_div)return;let _=this.browser();if(null===A&&m&&!_.select(".jsroot_h_separator").empty()&&(A=_.select(".jsroot_h_separator").style("bottom"),A=(0,L.isStr)(A)&&A.length>2&&A.indexOf("px")==A.length-2?A.slice(0,A.length-2):null),null!==A){A=parseInt(A);let F=_.select(".jsroot_h_separator"),q=0;if(!F.empty()){A<5&&(A=5);let T=_.node().clientHeight-5;T>0&&(A<0&&(A+=T),A>T&&(A=T)),this.last_hsepar_height=A,F.style("bottom",A+"px").style("height","5px"),this.status().style("height",A+"px"),q=A+5+"px"}this._hsepar_position=A,this.drawing().style("bottom",q)}null!==v&&((v=parseInt(v))<50&&(v=50),this._vsepar_position=v,_.select(".jsroot_browser_area").style("width",v-5+"px"),this.drawing().style("left",v+5+"px"),_.select(".jsroot_h_separator").style("left",v+5+"px"),this.status().style("left",v+5+"px"),_.select(".jsroot_v_separator").style("left",v+"px").style("width","5px")),w&&this.checkResize()}showStatus(...v){if(!this.status_layout)return;let A=0;for(let w=0;w<4;++w){let m=this.status_layout.getGridFrame(w).querySelector("label");A=Math.max(A,m.clientHeight),m.innerHTML=v[w]||""}this.status_layout.first_check||(this.status_layout.first_check=!0,A>5&&(A>this.last_hsepar_height||Aee/2&&(k=ee+10+"px"),F="-10px",q="0px"}else{if(v)return;w.property("last_left",null).property("last_vsepar",null).property("last_drawing",null)}let T=!this.browser_visible,$=v?0:700;this.browser_visible="changing",w.transition().style("left",k).duration($).on("end",()=>{v||(this.browser_visible=T,T&&this.setButtonsPosition())}),T||A.select(".jsroot_browser_btns").transition().style("left","7px").style("top","7px").duration($),m.empty()||(m.transition().style("left",F).duration($),_.transition().style("left",q).duration($).on("end",this.checkResize.bind(this))),this.status_layout&&"fix"==this.browser_kind&&(A.select(".jsroot_h_separator").transition().style("left",q).duration($),A.select(".jsroot_status_area").transition().style("left",q).duration($))}adjustBrowserSize(v){if(!this.gui_div||"float"!==this.browser_kind)return;let A=this.browser();if(A.empty())return;let w=A.select(".jsroot_browser_area"),m=A.select(".jsroot_browser_hierarchy"),_=(0,M.Ys)(m.node().firstChild);if(v)return void(w.node().parentNode.clientHeight-10{let F=m.style("left"),q=m.style("top");A._float_left=parseInt(F.slice(0,F.length-2)),A._float_top=parseInt(q.slice(0,q.length-2)),A._max_left=w.node().clientWidth-m.node().offsetWidth-1,A._max_top=w.node().clientHeight-m.node().offsetHeight-1}).filter(F=>w.select(".jsroot_browser_title").node()===F.target).on("drag",F=>{A._float_left+=F.dx,A._float_top+=F.dy,m.style("left",Math.min(Math.max(0,A._float_left),A._max_left)+"px").style("top",Math.min(Math.max(0,A._float_top),A._max_top)+"px"),A.setButtonsPosition()}),k=(0,M.oh)().on("start",()=>{let F=m.style("width");A._float_width=parseInt(F.slice(0,F.length-2)),A._float_height=m.node().clientHeight,A._max_width=w.node().clientWidth-m.node().offsetLeft-1,A._max_height=w.node().clientHeight-m.node().offsetTop-1}).on("drag",F=>{A._float_width+=F.dx,A._float_height+=F.dy,m.style("width",Math.min(Math.max(100,A._float_width),A._max_width)+"px").style("height",Math.min(Math.max(100,A._float_height),A._max_height)+"px"),A.setButtonsPosition()});w.call(_),w.select(".jsroot_browser_resize").call(k),A.adjustBrowserSize()}else{m.style("left",0).style("top",0).style("bottom",0).style("height",null);let _=w.append("div").classed("jsroot_separator",!0).classed("jsroot_v_separator",!0).style("position","absolute").style("top",0).style("bottom",0),k=(0,M.oh)().on("start",()=>{A._vsepar_move=A._vsepar_position,_.style("background-color","grey")}).on("drag",F=>{A._vsepar_move+=F.dx,A.setButtonsPosition(),A.adjustSeparators(Math.round(A._vsepar_move),null)}).on("end",()=>{delete A._vsepar_move,_.style("background-color",null),A.checkResize()});_.call(k),L.browser.touches&&!w.on("touchmove")&&w.on("touchmove",function(){}),A.adjustSeparators(250,null,!0,!0)}return A.setButtonsPosition(),A})()}}},4383:(jr,At,Me)=>{"use strict";Me.d(At,{W:()=>Y,Z:()=>Z});var ze=Me(4788),M=Me(9542),L=Me(2253),_e=Me(9622),De=Me(3038),$e=Me(6417),Ze=Me(6367),Ie=Me(4953);class Ve{constructor(K,J,R){this.painter=K,this.menuname=J,(0,M.isObject)(R)&&void 0!==R.clientX&&void 0!==R.clientY&&(this.show_evnt={clientX:R.clientX,clientY:R.clientY}),this.remove_handler=()=>this.remove(),this.element=null,this.cnt=0}native(){return!1}load(){var K=this;return(0,ze.Z)(function*(){return K})()}getEventPosition(){return this.show_evnt}add(){throw Error("add() method has to be implemented in the menu")}size(){return this.cnt}remove(){null!==this.element&&(this.element.remove(),this.resolveFunc&&(this.resolveFunc(),delete this.resolveFunc),document.body.removeEventListener("click",this.remove_handler)),this.element=null}show(){throw Error("show() method has to be implemented in the menu class")}addchk(K,J,R,P,v){let A=P;(0,M.isFunc)(R)&&(v=P,P=R,A=w=>P("1"==w),R=K?"0":"1"),this.add((K?"chk:":"unk:")+J,R,A,v)}addDrawMenu(K,J,R){if(!J||!J.length)return;let P=!1;if(0==K.indexOf("nosub:")&&(P=!0,K=K.slice(6)),1===J.length)return"inspect"===J[0]&&(K=K.replace("Draw","Inspect")),void this.add(K,J[0],R);P||this.add("sub:"+K,J[0],R);for(let v=0;v":"<dflt>"),w=v+1;if(J.length>5&&A)for(;w{this.input("Enter color "+(v?"(only id number)":"(name or id)"),J,v?"int":"text",v?0:void 0,v?9999:void 0).then(A=>{let w=parseInt(A);if(Number.isInteger(w)&&(0,De.Lq)(w))A=(0,De.Lq)(w);else if(v)return;R(v?w:A)})});for(let A=0;A<5;++A){this.add("column:");for(let w=0;w<10;w++){let m=10*A+w;v||--m;let _=m<0?"none":(0,De.Lq)(m);0==m&&1==P&&(_="none"),this.add(`${J==(v?m:_)?``:""}${m<=0||"#"!=_[0]?_:`col ${m}`}`,v?m:_,ee=>R(v?parseInt(ee):ee),"Select color "+_)}if(this.add("endcolumn:"),!this.native())break}this.add("endsub:")}addSizeMenu(K,J,R,P,v,A,w){if(void 0===v)return;let m=[],_=!1;if((0,M.isObject)(P))m=P,P=1;else for(let q=J;q<=R;q+=P)m.push(q);const k=q=>Math.abs(q-v)<1e-5*(R-J),F=(q,T)=>(q===v&&_&&(T=!0),q.toFixed(P>=1?0:P>=.1?T?2:1:T?4:2));m.findIndex(k)<0&&(_=!0,m.push(v),m=m.sort((q,T)=>q>T)),this.add("sub:"+K,()=>this.input("Enter value of "+K,F(v,!0),P>=1?"int":"float").then(A),w),m.forEach(q=>this.addchk(k(q),F(q),q,T=>A(P>=1?parseInt(T):parseFloat(T)))),this.add("endsub:")}addPaletteMenu(K,J){const R=(P,v,A,w)=>{v?A||(A=v):v=`pal ${P}`,A&&(A+=`, code ${P}`),this.addchk(P===K||w,""+v+"",P,J,A||v)};if(this.add("sub:Palette",()=>this.input("Enter palette code [1..113]",K,"int",1,113).then(J)),this.add("column:"),R(57,"Bird","Default color palette",K>113),R(55,"Rainbow"),R(51,"Deep Sea"),R(52,"Grayscale","New gray scale"),R(1,"","Old gray scale",K>0&&K<10),R(50,"ROOT 5","Default color palette in ROOT 5",K>=10&&K<51),R(53,"","Dark body radiator"),R(54,"","Two-color hue"),R(56,"","Inverted dark body radiator"),R(58,"Cubehelix"),R(59,"","Green Red Violet"),R(60,"","Blue Red Yellow"),R(61,"Ocean"),this.add("endcolumn:"),!this.native())return this.add("endsub:");this.add("column:"),R(62,"","Color Printable On Grey"),R(63,"Alpine"),R(64,"Aquamarine"),R(65,"Army"),R(66,"Atlantic"),R(67,"Aurora"),R(68,"Avocado"),R(69,"Beach"),R(70,"Black Body"),R(71,"","Blue Green Yellow"),R(72,"Brown Cyan"),R(73,"CMYK"),R(74,"Candy"),this.add("endcolumn:"),this.add("column:"),R(75,"Cherry"),R(76,"Coffee"),R(77,"","Dark Rain Bow"),R(78,"","Dark Terrain"),R(79,"Fall"),R(80,"Fruit Punch"),R(81,"Fuchsia"),R(82,"Grey Yellow"),R(83,"","Green Brown Terrain"),R(84,"Green Pink"),R(85,"Island"),R(86,"Lake"),R(87,"","Light Temperature"),this.add("endcolumn:"),this.add("column:"),R(88,"","Light Terrain"),R(89,"Mint"),R(90,"Neon"),R(91,"Pastel"),R(92,"Pearl"),R(93,"Pigeon"),R(94,"Plum"),R(95,"Red Blue"),R(96,"Rose"),R(97,"Rust"),R(98,"","Sandy Terrain"),R(99,"Sienna"),R(100,"Solar"),this.add("endcolumn:"),this.add("column:"),R(101,"","South West"),R(102,"","Starry Night"),R(103,"","Sunset"),R(104,"","Temperature Map"),R(105,"","Thermometer"),R(106,"Valentine"),R(107,"","Visible Spectrum"),R(108,"","Water Melon"),R(109,"Cool"),R(110,"Copper"),R(111,"","Gist Earth"),R(112,"Viridis"),R(113,"Cividis"),this.add("endcolumn:"),this.add("endsub:")}addRebinMenu(K){this.add("sub:Rebin",()=>this.input("Enter rebin value",2,"int",2).then(K));for(let J=2;J<=7;J++)this.add(J.toString(),J,R=>K(parseInt(R)));this.add("endsub:")}addSelectMenu(K,J,R,P){let v="number"==typeof R;this.add("sub:"+K);for(let A=0;AP(v?Number.parseInt(w):w));this.add("endsub:")}addRColorMenu(K,J,R){let P=["default","black","white","red","green","blue","yellow","magenta","cyan"];this.add("sub:"+K,()=>{this.input("Enter color name - empty string will reset color",J).then(R)});let v="black";for(let A=0;A0?(_="background-color:"+w,v="white"==w?"black":"white",(0,M.isStr)(J)&&J&&"auto"!=J&&"["!=J[0]&&(m=(0,L.B8)(J).toString()==(0,L.B8)(w).toString())):m=!J,this.addchk(m,`${w}`,w,F=>R("default"==F?null:F))}this.add("endsub:")}addRAttrTextItems(K,J,R){J||(J={}),this.addRColorMenu("color",K.color,P=>R({name:"color",value:P})),K.scaled?this.addSizeMenu("size",.01,.1,.01,K.size/K.scale,P=>R({name:"size",value:P})):this.addSizeMenu("size",6,20,2,K.size,P=>R({name:"size",value:P})),this.addSelectMenu("family",["Arial","Times New Roman","Courier New","Symbol"],K.name,P=>R({name:"font_family",value:P})),this.addSelectMenu("style",["normal","italic","oblique"],K.style||"normal",P=>R({name:"font_style",value:"normal"==P?null:P})),this.addSelectMenu("weight",["normal","lighter","bold","bolder"],K.weight||"normal",P=>R({name:"font_weight",value:"normal"==P?null:P})),J.noalign||this.add("align"),J.noangle||this.add("angle")}addTextAttributesMenu(K,J){let R=K.getObject();if(void 0===R?.fTextColor||null==R?.fTextAlign)return;this.add("sub:"+(J||"Text")),this.addColorMenu("color",R.fTextColor,v=>{R.fTextColor=v,K.interactiveRedraw(!0,(0,_e.Aq)(v,"SetTextColor"))});let P=[11,12,13,21,22,23,31,32,33];this.add("sub:align");for(let v=0;vthis.input("Enter line style id (1-solid)",J,"int",1,11).then(P=>{(0,Ze.p)(P)&&R(P)}));for(let P=1;P<11;++P){let v=(0,Ze.p)(P);this.addchk(J==P,`${P}`,P,w=>R(parseInt(w)))}this.add("endsub:")}addFillStyleMenu(K,J,R,P,v){this.add("sub:"+K,()=>{this.input("Enter fill style id (1001-solid, 3000..3010)",J,"int",0,4e3).then(w=>{w>=0&&w<=4e3&&v(w)})});let A=[1,1001,3001,3002,3003,3004,3005,3006,3007,3010,3021,3022];for(let w=0;w${A[w].toString()}`}this.addchk(J==A[w],m,A[w],_=>v(parseInt(_)))}this.add("endsub:")}addFontMenu(K,J,R){this.add("sub:"+K,()=>{this.input("Enter font id from [0..20]",Math.floor(J/10),"int",0,20).then(P=>{P>=0&&P<=20&&R(10*P+2)})}),this.add("column:");for(let P=1;P<20;++P){let v=new Ie.G(10*P+2,14),A=(0,L.Ys)(document.createElementNS("http://www.w3.org/2000/svg","text")),w=v.getFontName(),m=" "+w.split(" ")[0]+" ";v.weight&&(m="b"+m,w+=" "+v.weight),v.style&&(m=v.style[0]+m,w+=" "+v.style),A.attr("x",1).attr("y",15).text(m),v.setFont(A);let _=J!=10*P+2?"":"",k=`${A.node().outerHTML}${_}`;this.add(k,P,F=>R(10*parseInt(F)+2),w),10==P&&(this.add("endcolumn:"),this.add("column:"))}this.add("endcolumn:"),this.add("endsub:")}addAttributesMenu(K,J){if(J||(J=""),K.lineatt?.used&&(this.add("sub:"+J+"Line att"),this.addSizeMenu("width",1,10,1,K.lineatt.width,R=>{K.lineatt.change(void 0,R),K.interactiveRedraw(!0,`exec:SetLineWidth(${R})`)}),this.addColorMenu("color",K.lineatt.color,R=>{K.lineatt.change(R),K.interactiveRedraw(!0,(0,_e.Aq)(R,"SetLineColor"))}),this.addLineStyleMenu("style",K.lineatt.style,R=>{K.lineatt.change(void 0,void 0,R),K.interactiveRedraw(!0,`exec:SetLineStyle(${R})`)}),this.add("endsub:"),K.lineatt?.excl_side)){this.add("sub:Exclusion"),this.add("sub:side");for(let R=-1;R<=1;++R)this.addchk(K.lineatt.excl_side==R,R,R,function(P){this.lineatt.changeExcl(parseInt(P)),this.interactiveRedraw()}.bind(K));this.add("endsub:"),this.addSizeMenu("width",10,100,10,K.lineatt.excl_width,R=>{K.lineatt.changeExcl(void 0,R),K.interactiveRedraw()}),this.add("endsub:")}if(K.fillatt?.used&&(this.add("sub:"+J+"Fill att"),this.addColorMenu("color",K.fillatt.colorindx,R=>{K.fillatt.change(R,void 0,K.getCanvSvg()),K.interactiveRedraw(!0,(0,_e.Aq)(R,"SetFillColor"))},K.fillatt.kind),this.addFillStyleMenu("style",K.fillatt.pattern,K.fillatt.colorindx,K,R=>{K.fillatt.change(void 0,R,K.getCanvSvg()),K.interactiveRedraw(!0,`exec:SetFillStyle(${R})`)}),this.add("endsub:")),K.markeratt?.used){this.add("sub:"+J+"Marker att"),this.addColorMenu("color",K.markeratt.color,P=>{K.markeratt.change(P),K.interactiveRedraw(!0,(0,_e.Aq)(P,"SetMarkerColor"))}),this.addSizeMenu("size",.5,6,.5,K.markeratt.size,P=>{K.markeratt.change(void 0,void 0,P),K.interactiveRedraw(!0,`exec:SetMarkerSize(${P})`)}),this.add("sub:style");let R=[1,2,3,4,5,6,7,8,21,22,23,24,25,26,27,28,29,30,31,32,33,34];for(let P=0;P${R[P].toString()}`;this.addchk(K.markeratt.style==R[P],A,R[P],function(w){this.markeratt.change(void 0,parseInt(w)),this.interactiveRedraw(!0,`exec:SetMarkerStyle(${w})`)}.bind(K))}this.add("endsub:"),this.add("endsub:")}}addTAxisMenu(K,J,R,P){this.add("Divisions",()=>this.input("Set Ndivisions",R.fNdivisions,"int",0).then(v=>{R.fNdivisions=v,J.interactiveRedraw("pad",`exec:SetNdivisions(${v})`,P)})),this.add("sub:Labels"),this.addchk(R.TestBit(K.kCenterLabels),"Center",v=>{R.InvertBit(K.kCenterLabels),J.interactiveRedraw("pad",`exec:CenterLabels(${v})`,P)}),this.addchk(R.TestBit(K.kLabelsVert),"Rotate",v=>{R.InvertBit(K.kLabelsVert),J.interactiveRedraw("pad",`exec:SetBit(TAxis::kLabelsVert,${v})`,P)}),this.addColorMenu("Color",R.fLabelColor,v=>{R.fLabelColor=v,J.interactiveRedraw("pad",(0,_e.Aq)(v,"SetLabelColor"),P)}),this.addSizeMenu("Offset",0,.1,.01,R.fLabelOffset,v=>{R.fLabelOffset=v,J.interactiveRedraw("pad",`exec:SetLabelOffset(${v})`,P)}),this.addSizeMenu("Size",.02,.11,.01,R.fLabelSize,v=>{R.fLabelSize=v,J.interactiveRedraw("pad",`exec:SetLabelSize(${v})`,P)}),this.add("endsub:"),this.add("sub:Title"),this.add("SetTitle",()=>{this.input("Enter axis title",R.fTitle).then(v=>{R.fTitle=v,J.interactiveRedraw("pad",`exec:SetTitle("${v}")`,P)})}),this.addchk(R.TestBit(K.kCenterTitle),"Center",v=>{R.InvertBit(K.kCenterTitle),J.interactiveRedraw("pad",`exec:CenterTitle(${v})`,P)}),this.addchk(R.TestBit(K.kOppositeTitle),"Opposite",()=>{R.InvertBit(K.kOppositeTitle),J.redrawPad()}),this.addchk(R.TestBit(K.kRotateTitle),"Rotate",v=>{R.InvertBit(K.kRotateTitle),J.interactiveRedraw("pad",`exec:RotateTitle(${v})`,P)}),this.addColorMenu("Color",R.fTitleColor,v=>{R.fTitleColor=v,J.interactiveRedraw("pad",(0,_e.Aq)(v,"SetTitleColor"),P)}),this.addSizeMenu("Offset",0,3,.2,R.fTitleOffset,v=>{R.fTitleOffset=v,J.interactiveRedraw("pad",`exec:SetTitleOffset(${v})`,P)}),this.addSizeMenu("Size",.02,.11,.01,R.fTitleSize,v=>{R.fTitleSize=v,J.interactiveRedraw("pad",`exec:SetTitleSize(${v})`,P)}),this.add("endsub:"),this.add("sub:Ticks"),R._typename==M.clTGaxis?(this.addColorMenu("Color",R.fLineColor,v=>{R.fLineColor=v,J.interactiveRedraw("pad")}),this.addSizeMenu("Size",-.05,.055,.01,R.fTickSize,v=>{R.fTickSize=v,J.interactiveRedraw("pad")})):(this.addColorMenu("Color",R.fAxisColor,v=>{R.fAxisColor=v,J.interactiveRedraw("pad",(0,_e.Aq)(v,"SetAxisColor"),P)}),this.addSizeMenu("Size",-.05,.055,.01,R.fTickLength,v=>{R.fTickLength=v,J.interactiveRedraw("pad",`exec:SetTickLength(${v})`,P)})),this.add("endsub:")}addSettingsMenu(K,J,R){this.add(J?"header:Settings":"sub:Settings"),this.add("sub:Files"),K&&(this.addchk(M.settings.OnlyLastCycle,"Last cycle",A=>{M.settings.OnlyLastCycle=A,R&&R("refresh")}),this.addchk(!M.settings.SkipStreamerInfos,"Streamer infos",A=>{M.settings.SkipStreamerInfos=!A,R&&R("refresh")})),this.addchk(M.settings.UseStamp,"Use stamp arg",A=>{M.settings.UseStamp=A}),this.addSizeMenu("Max ranges",1,1e3,[1,10,20,50,200,1e3],M.settings.MaxRanges,A=>{M.settings.MaxRanges=A},"Maximal number of ranges in single http request"),this.addchk(M.settings.HandleWrongHttpResponse,"Handle wrong http response",A=>{M.settings.HandleWrongHttpResponse=A}),this.add("endsub:"),this.add("sub:Toolbar"),this.addchk(!1===M.settings.ToolBar,"Off",A=>{M.settings.ToolBar=!A}),this.addchk(!0===M.settings.ToolBar,"On",A=>{M.settings.ToolBar=A}),this.addchk("popup"===M.settings.ToolBar,"Popup",A=>{M.settings.ToolBar=!!A&&"popup"}),this.add("separator"),this.addchk("left"==M.settings.ToolBarSide,"Left side",A=>{M.settings.ToolBarSide=A?"left":"right"}),this.addchk(M.settings.ToolBarVert,"Vertical",A=>{M.settings.ToolBarVert=A}),this.add("endsub:"),this.add("sub:Interactive"),this.addchk(M.settings.Tooltip,"Tooltip",A=>{M.settings.Tooltip=A}),this.addchk(M.settings.ContextMenu,"Context menus",A=>{M.settings.ContextMenu=A}),this.add("sub:Zooming"),this.addchk(M.settings.Zooming,"Global",A=>{M.settings.Zooming=A}),this.addchk(M.settings.ZoomMouse,"Mouse",A=>{M.settings.ZoomMouse=A}),this.addchk(M.settings.ZoomWheel,"Wheel",A=>{M.settings.ZoomWheel=A}),this.addchk(M.settings.ZoomTouch,"Touch",A=>{M.settings.ZoomTouch=A}),this.add("endsub:"),this.addchk(M.settings.HandleKeys,"Keypress handling",A=>{M.settings.HandleKeys=A}),this.addchk(M.settings.MoveResize,"Move and resize",A=>{M.settings.MoveResize=A}),this.addchk(M.settings.DragAndDrop,"Drag and drop",A=>{M.settings.DragAndDrop=A}),this.addchk(M.settings.DragGraphs,"Drag graph points",A=>{M.settings.DragGraphs=A}),this.addchk(M.settings.ProgressBox,"Progress box",A=>{M.settings.ProgressBox=A}),this.add("endsub:"),this.add("sub:Drawing"),this.addSelectMenu("Optimize",["None","Smart","Always"],M.settings.OptimizeDraw,A=>{M.settings.OptimizeDraw=A}),this.addPaletteMenu(M.settings.Palette,A=>{M.settings.Palette=A}),this.addchk(M.settings.AutoStat,"Auto stat box",A=>{M.settings.AutoStat=A}),this.addSelectMenu("Latex",["Off","Symbols","Normal","MathJax","Force MathJax"],M.settings.Latex,A=>{M.settings.Latex=A}),this.addSelectMenu("3D rendering",["Default","WebGL","Image"],M.settings.Render3D,A=>{M.settings.Render3D=A}),this.addSelectMenu("WebGL embeding",["Default","Overlay","Embed"],M.settings.Embed3D,A=>{M.settings.Embed3D=A}),this.add("endsub:"),this.add("sub:Geometry"),this.add("Grad per segment: "+M.settings.GeoGradPerSegm,()=>this.input("Grad per segment in geometry",M.settings.GeoGradPerSegm,"int",1,60).then(A=>{M.settings.GeoGradPerSegm=A})),this.addchk(M.settings.GeoCompressComp,"Compress composites",A=>{M.settings.GeoCompressComp=A}),this.add("endsub:"),K&&this.add("Hierarchy limit: "+M.settings.HierarchyLimit,()=>this.input("Max number of items in hierarchy",M.settings.HierarchyLimit,"int",10,1e5).then(A=>{M.settings.HierarchyLimit=A,R&&R("refresh")})),this.add("Dark mode: "+(M.settings.DarkMode?"On":"Off"),()=>{M.settings.DarkMode=!M.settings.DarkMode,R&&R("dark")});const P=A=>{M.gStyle[A.slice(1)]=parseInt(A[0])},v=(A,w,m)=>{this.add("sub:"+A);for(let _=0;_{M.gStyle.fCanvasColor=A}),this.addchk(M.gStyle.fOptDate,"Draw date",A=>{M.gStyle.fOptDate=A?1:0}),this.addchk(M.gStyle.fOptFile,"Draw item",A=>{M.gStyle.fOptFile=A?1:0}),this.addSizeMenu("Date X",.01,.1,.01,M.gStyle.fDateX,A=>{M.gStyle.fDateX=A},"configure gStyle.fDateX for date/item name drawings"),this.addSizeMenu("Date Y",.01,.1,.01,M.gStyle.fDateY,A=>{M.gStyle.fDateY=A},"configure gStyle.fDateY for date/item name drawings"),this.add("endsub:"),this.add("sub:Pad"),this.addColorMenu("Color",M.gStyle.fPadColor,A=>{M.gStyle.fPadColor=A}),this.add("sub:Grid"),this.addchk(M.gStyle.fPadGridX,"X",A=>{M.gStyle.fPadGridX=A}),this.addchk(M.gStyle.fPadGridY,"Y",A=>{M.gStyle.fPadGridY=A}),this.addColorMenu("Color",M.gStyle.fGridColor,A=>{M.gStyle.fGridColor=A}),this.addSizeMenu("Width",1,10,1,M.gStyle.fGridWidth,A=>{M.gStyle.fGridWidth=A}),this.addLineStyleMenu("Style",M.gStyle.fGridStyle,A=>{M.gStyle.fGridStyle=A}),this.add("endsub:"),v("Ticks X","fPadTickX",["normal","ticks on both sides","labels on both sides"]),v("Ticks Y","fPadTickY",["normal","ticks on both sides","labels on both sides"]),v("Log X","fOptLogx",["off","on","log 2"]),v("Log Y","fOptLogy",["off","on","log 2"]),v("Log Z","fOptLogz",["off","on","log 2"]),this.addchk(1==M.gStyle.fOptTitle,"Hist title",A=>{M.gStyle.fOptTitle=A?1:0}),this.add("endsub:"),this.add("sub:Frame"),this.addColorMenu("Fill color",M.gStyle.fFrameFillColor,A=>{M.gStyle.fFrameFillColor=A}),this.addFillStyleMenu("Fill style",M.gStyle.fFrameFillStyle,M.gStyle.fFrameFillColor,null,A=>{M.gStyle.fFrameFillStyle=A}),this.addColorMenu("Line color",M.gStyle.fFrameLineColor,A=>{M.gStyle.fFrameLineColor=A}),this.addSizeMenu("Line width",1,10,1,M.gStyle.fFrameLineWidth,A=>{M.gStyle.fFrameLineWidth=A}),this.addLineStyleMenu("Line style",M.gStyle.fFrameLineStyle,A=>{M.gStyle.fFrameLineStyle=A}),this.addSizeMenu("Border size",0,10,1,M.gStyle.fFrameBorderSize,A=>{M.gStyle.fFrameBorderSize=A}),this.add("sub:Margins"),this.addSizeMenu("Bottom",0,.5,.05,M.gStyle.fPadBottomMargin,A=>{M.gStyle.fPadBottomMargin=A}),this.addSizeMenu("Top",0,.5,.05,M.gStyle.fPadTopMargin,A=>{M.gStyle.fPadTopMargin=A}),this.addSizeMenu("Left",0,.5,.05,M.gStyle.fPadLeftMargin,A=>{M.gStyle.fPadLeftMargin=A}),this.addSizeMenu("Right",0,.5,.05,M.gStyle.fPadRightMargin,A=>{M.gStyle.fPadRightMargin=A}),this.add("endsub:"),this.add("endsub:"),this.add("sub:Title"),this.addColorMenu("Fill color",M.gStyle.fTitleColor,A=>{M.gStyle.fTitleColor=A}),this.addFillStyleMenu("Fill style",M.gStyle.fTitleStyle,M.gStyle.fTitleColor,null,A=>{M.gStyle.fTitleStyle=A}),this.addColorMenu("Text color",M.gStyle.fTitleTextColor,A=>{M.gStyle.fTitleTextColor=A}),this.addSizeMenu("Border size",0,10,1,M.gStyle.fTitleBorderSize,A=>{M.gStyle.fTitleBorderSize=A}),this.addSizeMenu("Font size",.01,.1,.01,M.gStyle.fTitleFontSize,A=>{M.gStyle.fTitleFontSize=A}),this.addFontMenu("Font",M.gStyle.fTitleFont,A=>{M.gStyle.fTitleFont=A}),this.addSizeMenu("X: "+M.gStyle.fTitleX.toFixed(2),0,1,.1,M.gStyle.fTitleX,A=>{M.gStyle.fTitleX=A}),this.addSizeMenu("Y: "+M.gStyle.fTitleY.toFixed(2),0,1,.1,M.gStyle.fTitleY,A=>{M.gStyle.fTitleY=A}),this.addSizeMenu("W: "+M.gStyle.fTitleW.toFixed(2),0,1,.1,M.gStyle.fTitleW,A=>{M.gStyle.fTitleW=A}),this.addSizeMenu("H: "+M.gStyle.fTitleH.toFixed(2),0,1,.1,M.gStyle.fTitleH,A=>{M.gStyle.fTitleH=A}),this.add("endsub:"),this.add("sub:Stat box"),this.addColorMenu("Fill color",M.gStyle.fStatColor,A=>{M.gStyle.fStatColor=A}),this.addFillStyleMenu("Fill style",M.gStyle.fStatStyle,M.gStyle.fStatColor,null,A=>{M.gStyle.fStatStyle=A}),this.addColorMenu("Text color",M.gStyle.fStatTextColor,A=>{M.gStyle.fStatTextColor=A}),this.addSizeMenu("Border size",0,10,1,M.gStyle.fStatBorderSize,A=>{M.gStyle.fStatBorderSize=A}),this.addSizeMenu("Font size",0,30,5,M.gStyle.fStatFontSize,A=>{M.gStyle.fStatFontSize=A}),this.addFontMenu("Font",M.gStyle.fStatFont,A=>{M.gStyle.fStatFont=A}),this.add("Stat format",()=>this.input("Stat format",M.gStyle.fStatFormat).then(A=>{M.gStyle.fStatFormat=A})),this.addSizeMenu("X: "+M.gStyle.fStatX.toFixed(2),.2,1,.1,M.gStyle.fStatX,A=>{M.gStyle.fStatX=A}),this.addSizeMenu("Y: "+M.gStyle.fStatY.toFixed(2),.2,1,.1,M.gStyle.fStatY,A=>{M.gStyle.fStatY=A}),this.addSizeMenu("Width: "+M.gStyle.fStatW.toFixed(2),.1,1,.1,M.gStyle.fStatW,A=>{M.gStyle.fStatW=A}),this.addSizeMenu("Height: "+M.gStyle.fStatH.toFixed(2),.1,1,.1,M.gStyle.fStatH,A=>{M.gStyle.fStatH=A}),this.add("endsub:"),this.add("sub:Legend"),this.addColorMenu("Fill color",M.gStyle.fLegendFillColor,A=>{M.gStyle.fLegendFillColor=A}),this.addSizeMenu("Border size",0,10,1,M.gStyle.fLegendBorderSize,A=>{M.gStyle.fLegendBorderSize=A}),this.addFontMenu("Font",M.gStyle.fLegendFont,A=>{M.gStyle.fLegendFont=A}),this.addSizeMenu("Text size",0,.1,.01,M.gStyle.fLegendTextSize,A=>{M.gStyle.fLegendTextSize=A},"legend text size, when 0 - auto adjustment is used"),this.add("endsub:"),this.add("sub:Histogram"),this.addchk(M.gStyle.fHistMinimumZero,"Base0",A=>{M.gStyle.fHistMinimumZero=A},"when true, BAR and LEGO drawing using base = 0"),this.add("Text format",()=>this.input("Paint text format",M.gStyle.fPaintTextFormat).then(A=>{M.gStyle.fPaintTextFormat=A})),this.add("Time offset",()=>this.input("Time offset in seconds, default is 788918400 for 1/1/1995",M.gStyle.fTimeOffset,"int").then(A=>{M.gStyle.fTimeOffset=A})),this.addSizeMenu("ErrorX: "+M.gStyle.fErrorX.toFixed(2),0,1,.1,M.gStyle.fErrorX,A=>{M.gStyle.fErrorX=A}),this.addSizeMenu("End error",0,12,1,M.gStyle.fEndErrorSize,A=>{M.gStyle.fEndErrorSize=A},"size in pixels of end error for E1 draw options, gStyle.fEndErrorSize"),this.addSizeMenu("Top margin",0,.5,.05,M.gStyle.fHistTopMargin,A=>{M.gStyle.fHistTopMargin=A},"Margin between histogram top and frame top"),this.addColorMenu("Fill color",M.gStyle.fHistFillColor,A=>{M.gStyle.fHistFillColor=A}),this.addFillStyleMenu("Fill style",M.gStyle.fHistFillStyle,M.gStyle.fHistFillColor,null,A=>{M.gStyle.fHistFillStyle=A}),this.addColorMenu("Line color",M.gStyle.fHistLineColor,A=>{M.gStyle.fHistLineColor=A}),this.addSizeMenu("Line width",1,10,1,M.gStyle.fHistLineWidth,A=>{M.gStyle.fHistLineWidth=A}),this.addLineStyleMenu("Line style",M.gStyle.fHistLineStyle,A=>{M.gStyle.fHistLineStyle=A}),this.add("endsub:"),this.add("separator"),this.add("sub:Predefined"),["Modern","Plain","Bold"].forEach(A=>this.addchk(M.gStyle.fName==A,A,A,_e.Lf)),this.add("endsub:"),this.add("endsub:"),this.add("separator"),this.add("Save settings",()=>{((0,_e.JH)(!0)?Promise.resolve(!0):this.confirm("Save settings","Pressing OK one agreess that JSROOT will store settings as browser cookies")).then(w=>{w&&((0,_e.zQ)(),(0,_e.Bm)())})},"Store settings and gStyle as cookies"),this.add("Delete settings",()=>{(0,_e.zQ)(-1),(0,_e.Bm)(-1)},"Delete settings and gStyle from cookies"),J||this.add("endsub:")}runModal(){return(0,ze.Z)(function*(){throw Error("runModal() must be reimplemented")})()}info(K,J){return this.runModal(K,`

        ${J}

        `,{height:120,width:400,resizable:!0})}confirm(K,J){var R=this;return(0,ze.Z)(function*(){return R.runModal(K,J,{btns:!0,height:120,width:400}).then(P=>!!P)})()}input(K,J,R,P,v){var A=this;return(0,ze.Z)(function*(){R||(R="text");let m="";null==J&&(J=""),"int"==R&&(void 0!==P&&(m+=` min="${P}"`),void 0!==v&&(m+=` max="${v}"`));let _=`
        `;return new Promise(k=>{A.runModal(K,_,{btns:!0,height:150,width:400}).then(F=>{if(!F)return;let q=F.querySelector(".jsroot_dlginp").value;"float"==R?(q=parseFloat(q),Number.isFinite(q)&&k(q)):"int"==R?(q=parseInt(q),Number.isInteger(q)&&k(q)):k(q)})})})()}showMethodArgsDialog(K){var J=this;return(0,ze.Z)(function*(){let R=J.menuname+"_dialog",P='
        ';for(let v=0;v${A.fName}\n `}return P+="
        ",new Promise(v=>{J.runModal(K.fClassName+"::"+K.fName,P,{btns:!0,height:100+60*K.fArgs.length,width:400,resizable:!0}).then(A=>{if(!A)return;let w="";for(let m=0;m0?",":"")+k}v(w)})})})()}showCommandArgsDialog(K,J){var R=this;return(0,ze.Z)(function*(){let P=R.menuname+"_dialog",v='
        ';for(let A=0;Aarg${A+1}`;return v+="
        ",new Promise(A=>{R.runModal("Arguments for command "+K,v,{btns:!0,height:110+60*J.length,width:400,resizable:!0}).then(w=>{if(!w)return A(null);let m=[];for(let _=0;_0;)k[0].parentNode.removeChild(k[0]);v.style.position="fixed",v.style.left=J+"px",v.style.top=R+"px",(0,_e.DW)(".jsroot_ctxt_container {\n position: absolute; top: 0; user-select: none; z-index: 100000; background-color: rgb(250, 250, 250); margin: 0; padding: 0px; width: auto;\n min-width: 100px; box-shadow: 0px 0px 10px rgb(0, 0, 0, 0.2); border: 3px solid rgb(215, 215, 215); font-family: Arial, helvetica, sans-serif, serif;\n font-size: 13px; color: rgb(0, 0, 0, 0.8);\n }\n .jsroot_ctxt_column { float: left; }\n .jsroot_ctxt_divider { width: 85%; margin: 3px auto; border: 1px solid rgb(0, 0, 0, 0.15); }\n .jsroot_ctxt_header { background-color: lightblue; padding: 3px 7px; font-weight: bold; border-bottom: 1px; }\n .jsroot_ctxt_text { margin: 0; padding: 3px 7px; pointer-events: none; white-space: nowrap; }\n .jsroot_ctxt_extraText { margin: 0; padding: 3px 7px; color: rgb(0, 0, 0, 0.6); }\n .jsroot_ctxt_focus { background-color: rgb(220, 220, 220); }\n .jsroot_ctxt_item:hover { background-color: rgb(235, 235, 235); }",this.element)}else J<0&&R==J?(v.className="jsroot_ctxt_column",v.style.width=(100/-J).toFixed(1)+"%"):v.style.left=-P.offsetLeft+P.offsetWidth+"px";let A=!1,w=0;K.forEach(k=>{k.checked&&(A=!0),k.column&&w++}),K.forEach(k=>{if(w>0)return v.style.display="flex",void(k.column&&this._buildContextmenu(k.sub,-w,-w,v));if(k.divider){let $=document.createElement("hr");return $.className="jsroot_ctxt_divider",void v.appendChild($)}let F=document.createElement("div");if(F.style.position="relative",v.appendChild(F),k.header)return F.className="jsroot_ctxt_header",void(F.innerHTML=k.text);let q=document.createElement("div");q.style.width="100%",q.style.height="100%",q.className="jsroot_ctxt_item",q.style.display="flex",q.style.justifyContent="space-between",q.style.cursor="pointer",k.title&&q.setAttribute("title",k.title),F.appendChild(q),k.text||(k.text="item");let T=document.createElement("div");if(T.className="jsroot_ctxt_text",k.text.indexOf("=0)if(A){T.style.display="flex";let $=document.createElement("span");$.innerHTML=k.checked?"\u2713":"",$.style.display="inline-block",$.style.width="1em",T.appendChild($);let ee=document.createElement("div");ee.innerHTML=k.text,T.appendChild(ee)}else T.innerHTML=k.text;else{if(A){let ee=document.createElement("span");ee.innerHTML=k.checked?"\u2713":"",ee.style.display="inline-block",ee.style.width="1em",T.appendChild(ee)}let $=document.createElement("span");$.textContent=0==k.text.indexOf("")?k.text.slice(6,k.text.length-7):k.text,T.appendChild($)}if(q.appendChild(T),k.hasOwnProperty("extraText")||k.sub){let $=document.createElement("span");$.className="jsroot_ctxt_extraText jsroot_ctxt_text",$.textContent=k.sub?"\u25b6":k.extraText,q.appendChild($)}q.addEventListener("mouseenter",()=>{v.childNodes.forEach(ee=>{ee.classList.contains("jsroot_ctxt_focus")&&(ee.removeChild(ee.getElementsByClassName("jsroot_ctxt_container")[0]),ee.classList.remove("jsroot_ctxt_focus"))})}),k.sub&&q.addEventListener("mouseenter",()=>{F.classList.add("jsroot_ctxt_focus"),this._buildContextmenu(k.sub,0,0,F)}),k.func&&F.addEventListener("click",$=>{(this.painter?k.func.bind(this.painter):k.func)(k.arg),$.stopPropagation(),this.remove()})}),P.appendChild(v);let m=document.documentElement.clientWidth,_=document.documentElement.clientHeight;if(P===document.body)J+v.offsetWidth>m&&(v.style.left=m-v.offsetWidth+"px"),v.offsetHeight>_?(v.style.top=0,v.style.overflowY="scroll",v.style.overflowX="hidden",v.style.height=_+"px"):R+v.offsetHeight>_&&(v.style.top=_-v.offsetHeight+"px");else if("jsroot_ctxt_column"!=v.className){let k=P.getBoundingClientRect(),F=v.getBoundingClientRect();F.left+F.width>m&&(v.style.left=-P.offsetLeft-F.width+"px"),F.height>_?(v.style.top=-F.top+"px",v.style.overflowY="scroll",v.style.overflowX="hidden",v.style.height=_+"px"):F.height<_&&F.height>_/2?v.style.top=F.top-_/2>=0?-F.top-F.height+_+"px":-F.top+"px":F.top+F.height>_&&(v.style.top=-F.height+k.height+"px")}return v}show(K){var J=this;return(0,ze.Z)(function*(){J.remove(),!K&&J.show_evnt&&(K=J.show_evnt),document.body.addEventListener("click",J.remove_handler);let R=document.getElementById(J.menuname);return R&&R.remove(),J.element=J._buildContextmenu(J.code,(K?.clientX||0)+window.pageXOffset,(K?.clientY||0)+window.pageYOffset,document.body),J.element.setAttribute("id",J.menuname),J})()}runModal(K,J,R){var P=this;return(0,ze.Z)(function*(){R||(R={});let v=P.menuname+"_dialog";(0,L.Ys)(`#${v}`).remove(),(0,L.Ys)(`#${v}_block`).remove();let A=(0,L.Ys)("body").append("div").attr("id",v+"_block").attr("class","jsroot_dialog_block"),w=(0,L.Ys)("body").append("div").attr("id",v).attr("class","jsroot_dialog").style("width",(R.width||450)+"px").attr("tabindex","0").html(`
        \n
        ${K}
        \n
        ${J}
        \n \n
        `);return(0,_e.DW)(".jsroot_dialog_block { z-index: 100000; position: absolute; top: 0; left: 0; right: 0; bottom: 0; opacity: 0.2; background-color: white; }\n .jsroot_dialog { z-index: 100001; position: absolute; left: 50%; top: 50%; }\n .jsroot_dialog_body { position: relative; left: -50%; top: -50%; border: solid green 3px; padding: 5px; display: flex; flex-flow: column; background-color: white; }\n .jsroot_dialog_header { flex: 0 1 auto; padding: 5px; }\n .jsroot_dialog_content { flex: 1 1 auto; padding: 5px; }\n .jsroot_dialog_footer { flex: 0 1 auto; padding: 5px; }\n .jsroot_dialog_button { float: right; margin-right: 1em; }",w.node()),new Promise(m=>{w.on("keyup",k=>{("Enter"==k.code||"Escape"==k.code)&&(k.preventDefault(),k.stopPropagation(),m("Enter"==k.code?w.node():null),w.remove(),A.remove())}),w.on("keydown",k=>{("Enter"==k.code||"Escape"==k.code)&&(k.preventDefault(),k.stopPropagation())}),w.selectAll(".jsroot_dialog_button").on("click",k=>{m(R.btns&&"Ok"==(0,L.Ys)(k.target).text()?w.node():null),w.remove(),A.remove()});let _=w.select(".jsroot_dialog_content").select("input");_.empty()&&(_=w.select(".jsroot_dialog_footer").select("button")),_.empty()||_.node().focus()})})()}}class ce extends Ve{constructor(K,J,R){super(K,J,R),this.code="",this.funcs={},this.lvl=0}loadBS(K){let J="https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/5.0.2/";return(M.internals.bs_path?Promise.resolve(!0):(0,M.loadScript)(M.source_dir+"style/bootstrap.min.css").then(()=>{M.internals.bs_path=M.source_dir+"scripts/"}).catch(()=>(M.internals.bs_path=J+"js/",(0,M.loadScript)(J+"css/bootstrap.min.css")))).then(()=>!K||typeof bootstrap<"u"||(0,M.loadScript)(M.internals.bs_path+"bootstrap.bundle.min.js"))}load(){return this.loadBS().then(()=>this)}add(K,J,R,P){if("separator"==K)return void(this.code+='');if("column:"==K||"endcolumn:"==K)return;if(0==K.indexOf("header:"))return void(this.code+=``);let v=!1,A="",w="dropdown-item btn-sm",m="";if("endsub:"==K)return this.lvl--,this.code+="
      • ",void(this.code+="
      ");0==K.indexOf("sub:")&&(K=K.slice(4),v=!0),(0,M.isFunc)(J)&&(R=J,J=K),0==K.indexOf("chk:")?(m="\u2713",K=K.slice(4)):0==K.indexOf("unk:")&&(K=K.slice(4)),P&&(A+=` title="${P}"`),void 0!==J&&(A+=` arg="${J}"`),v&&(A+=' data-bs-toggle="dropdown" aria-haspopup="true" aria-expanded=\'false\'',w+=" dropdown-toggle");let _=``;_=v?`
    • ${_}`:`
    • ${_}
    • `,this.code+=_,v&&(this.code+=`
      ");0==X.indexOf("sub:")&&(X=X.slice(4),x=!0),(0,M.isFunc)(Z)&&(O=Z,Z=X),0==X.indexOf("chk:")?(m="\u2713",X=X.slice(4)):0==X.indexOf("unk:")&&(X=X.slice(4)),P&&(p+=` title="${P}"`),void 0!==Z&&(p+=` arg="${Z}"`),x&&(p+=' data-bs-toggle="dropdown" aria-haspopup="true" aria-expanded=\'false\'',w+=" dropdown-toggle");let _=``;_=x?`
    • ${_}`:`
    • ${_}
    • `,this.code+=_,x&&(this.code+=`