Your IP : 3.133.121.15
{"version":3,"sources":["webpack:///../../../../../src/.internal/plugins/forceDirected/ForceDirectedLink.ts","webpack:///../../../../../src/.internal/plugins/forceDirected/ForceDirectedNode.ts","webpack:///../../../../../src/.internal/plugins/forceDirected/ForceDirectedSeries.ts","webpack:///../../../../../src/.internal/plugins/forceDirected/ForceDirectedTree.ts","webpack:///./plugins/forceDirected.js"],"names":["ForceDirectedLink_ForceDirectedLink","_super","ForceDirectedLink","_this","call","this","className","interfaceColors","InterfaceColorSet","fillOpacity","strokeOpacity","stroke","getFor","isMeasured","nonScalingStroke","interactionsEnabled","distance","strength","applyTheme","Object","tslib_es6","prototype","validate","source","target","path","Path","x","pixelX","y","pixelY","isHidden","isHiding","hide","show","defineProperty","_source","value","_disposers","push","events","on","invalidate","_target","_adapterO","isEnabled","apply","properties","setPropertyValue","getTooltipX","getPropertyValue","Percent","x1","getTooltipY","y1","Sprite","Registry","registeredClasses","ForceDirectedNode_ForceDirectedNode","ForceDirectedNode","applyOnClones","togglable","draggable","setStateOnChildren","isActive","expandAll","paddingRadius","linksWith","Dictionary","dataItem","component","nodeDragStarted","updateSimulation","outerCircle","createChild","Circle","shouldClone","strokeWidth","bgColor","fill","states","create","scale","outerActiveState","visible","circle","hiddenState","radius","addDisposer","updateLabelSize","label","Label","horizontalCenter","verticalCenter","textAlign","textValign","adapter","add","pixelRadius","text","dsRadius","defaultState","Type","width","height","copyFrom","setActive","children","dataItemsInvalid","childrenInited","initNode","updateNodeList","each","child","node","parentLink","dispatchVisibility","restartSimulation","linkWith","link","getKey","uid","links","parent","zIndex","nodeIndex","nodes","indexOf","childIndex","forceLinks","childLinks","setKey","unlinkWith","removeKey","Container","ForceDirectedSeries_ForceDirectedSeriesDataItem","ForceDirectedSeriesDataItem","hasChildren","List","duration","delay","fields","_visible","event_1","type","dispatchImmediately","toValue","event_2","values","setValue","_node","component_1","node_1","Disposer","removeValue","addSprite","itemsFocusable","role","focusable","once","ev","readerTitle","populateString","itemReaderText","undefined","hoverable","level","color","colors","getIndex","step","index","setProperty","hiddenInLegend","collapsed","fixed","createLegendMarker","marker","_legendDataItem","valueLabel","Series","ForceDirectedSeries_ForceDirectedSeries","ForceDirectedSeries","d3forceSimulation","src","maxRadius","minRadius","ColorSet","manyBodyStrength","centerStrength","updateRadiuses","dataItems","updateLinksAndNodes","handleFixed","w","utils_Math","innerWidth","h","innerHeight","force","alpha","restart","getMaxValue","max","cmax","validateDataItems","chart","__disabled","_dataDisposers","_maxValue","reset","Math","min","length","angle","xField","propertyFields","yField","dataContext","dataFields","processLinkWith","i","tick","alphaDecay","pow","feedLegend","fx","Utils","fy","di","_linkForce","_collisionForce","linkDatum","getDistance","getStrength","disabled","nodeDragEnded","alphaTarget","updateRadius","minSide","cursorOverStyle","Mouse","pointer","default","maxLevels","index_1","next","diColor","utils_Array","id","dataItemToConnect","getDataItemById","linkWithStrength","createDataItem","_nodes","createNode","_links","createLink","RoundedRectangle","cornerRadius","legendDataItem","colorOrig","property","ForceDirectedTree_ForceDirectedTreeDataItem","ForceDirectedTreeDataItem","SerialChart","ForceDirectedTree_ForceDirectedTree","ForceDirectedTree","seriesContainer","layout","createSeries","legend","legendData_1","series","legendSettings","labelText","labels","template","itemLabelText","valueText","valueLabels","itemValueText","data","name","applyInternalDefaults","language","translate","getExporting","exporting","info","format","window","am4plugins_forceDirected","forceDirected_namespaceObject"],"mappings":";;;;;;;;;;;;;;;;;;;igBAsEAA,EAAA,SAAAC,GA8BC,SAAAC,IAAA,IAAAC,EACCF,EAAAG,KAAAC,OAAOA,KACPF,EAAKG,UAAY,oBAEjB,IAAIC,EAAkB,IAAIC,EAAA,SAE1BL,EAAKM,YAAc,EACnBN,EAAKO,cAAgB,GACrBP,EAAKQ,OAASJ,EAAgBK,OAAO,QACrCT,EAAKU,YAAa,EAClBV,EAAKW,kBAAmB,EAExBX,EAAKY,qBAAsB,EAE3BZ,EAAKa,SAAW,IAChBb,EAAKc,SAAW,EAEhBd,EAAKe,eAwKP,OAvNuCC,OAAAC,EAAA,EAAAD,CAAAjB,EAAAD,GAyD/BC,EAAAmB,UAAAC,SAAP,WACCrB,EAAAoB,UAAMC,SAAQlB,KAAAC,MACd,IAAIkB,EAASlB,KAAKkB,OACdC,EAASnB,KAAKmB,OACdD,GAAUC,IACbnB,KAAKoB,KAAOC,EAAA,QAAeC,EAAGJ,EAAOK,OAAQC,EAAGN,EAAOO,SAAYJ,EAAA,QAAeC,EAAGH,EAAOI,OAAQC,EAAGL,EAAOM,SAE1GP,EAAOQ,UAAYP,EAAOO,UAAYR,EAAOS,UAAYR,EAAOQ,SACnE3B,KAAK4B,OAGL5B,KAAK6B,SAWRf,OAAAgB,eAAWjC,EAAAmB,UAAA,cAWX,WACC,OAAOhB,KAAK+B,aAZb,SAAkBC,GACbA,IACHhC,KAAK+B,QAAUC,EACfhC,KAAKiC,WAAWC,KAAKF,EAAMG,OAAOC,GAAG,kBAAmBpC,KAAKqC,WAAYrC,MAAM,IAC/EA,KAAKiC,WAAWC,KAAKF,EAAMG,OAAOC,GAAG,YAAapC,KAAKqC,WAAYrC,MAAM,sCAgB3Ec,OAAAgB,eAAWjC,EAAAmB,UAAA,cAWX,WACC,OAAOhB,KAAKsC,aAZb,SAAkBN,GACbA,IACHhC,KAAKsC,QAAUN,EACfhC,KAAKiC,WAAWC,KAAKF,EAAMG,OAAOC,GAAG,kBAAmBpC,KAAKqC,WAAYrC,MAAM,IAC/EA,KAAKiC,WAAWC,KAAKF,EAAMG,OAAOC,GAAG,YAAapC,KAAKqC,WAAYrC,MAAM,sCAqB3Ec,OAAAgB,eAAWjC,EAAAmB,UAAA,gBAOX,WACC,OAAIhB,KAAKuC,WACJvC,KAAKuC,UAAUC,UAAU,YACrBxC,KAAKuC,UAAUE,MAAM,WAAYzC,KAAK0C,WAAW/B,UAGnDX,KAAK0C,WAAW/B,cAbxB,SAAoBqB,GACnBhC,KAAK2C,iBAAiB,WAAYX,oCA6BnClB,OAAAgB,eAAWjC,EAAAmB,UAAA,gBAOX,WACC,OAAIhB,KAAKuC,WACJvC,KAAKuC,UAAUC,UAAU,YACrBxC,KAAKuC,UAAUE,MAAM,WAAYzC,KAAK0C,WAAW9B,UAGnDZ,KAAK0C,WAAW9B,cAbxB,SAAoBoB,GACnBhC,KAAK2C,iBAAiB,WAAYX,oCAqB5BnC,EAAAmB,UAAA4B,YAAP,WACC,IAAItB,EAAItB,KAAK6C,iBAAiB,YAI9B,GAHMvB,aAAawB,EAAA,IAClBxB,EAAIR,OAAAgC,EAAA,EAAAhC,CAAQ,KAETQ,aAAawB,EAAA,EAAS,CACzB,IAAI5B,EAASlB,KAAKkB,OACdC,EAASnB,KAAKmB,OAClB,GAAID,GAAUC,EAAQ,CACrB,IAAI4B,EAAK7B,EAAOK,OAEhB,OAAOwB,GADE5B,EAAOI,OACEwB,GAAMzB,EAAEU,OAG5B,OAAO,GASDnC,EAAAmB,UAAAgC,YAAP,WACC,IAAIxB,EAAIxB,KAAK6C,iBAAiB,YAI9B,GAHMrB,aAAasB,EAAA,IAClBtB,EAAIV,OAAAgC,EAAA,EAAAhC,CAAQ,KAETU,aAAasB,EAAA,EAAS,CACzB,IAAI5B,EAASlB,KAAKkB,OACdC,EAASnB,KAAKmB,OAClB,GAAID,GAAUC,EAAQ,CACrB,IAAI8B,EAAK/B,EAAOO,OAEhB,OAAOwB,GADE9B,EAAOM,OACEwB,GAAMzB,EAAEQ,OAG5B,OAAO,GAETnC,EAvNA,CAAuCqD,EAAA,GA+NvCC,EAAA,EAASC,kBAAqC,kBAAIzD,sGCzNlD0D,EAAA,SAAAzD,GAiDC,SAAA0D,IAAA,IAAAxD,EACCF,EAAAG,KAAAC,OAAOA,KACPF,EAAKG,UAAY,oBAGjBH,EAAKyD,eAAgB,EACrBzD,EAAK0D,WAAY,EACjB1D,EAAK2D,WAAY,EACjB3D,EAAK4D,oBAAqB,EAE1B5D,EAAK6D,UAAW,EAChB7D,EAAK8D,WAAY,EACjB9D,EAAK+D,cAAgB,EAErB/D,EAAKgE,UAAY,IAAIC,EAAA,EACrBjE,EAAKmC,WAAWC,KAAK,IAAI6B,EAAA,EAAmBjE,EAAKgE,YAEjDhE,EAAKqC,OAAOC,GAAG,YAAa,WACvBtC,EAAKkE,SAASC,WACjBnE,EAAKkE,SAASC,UAAUC,mBAEvBpE,GAAM,GAETA,EAAKqC,OAAOC,GAAG,OAAQ,WACtBtC,EAAKqE,oBACHrE,GAAM,GAET,IAAIsE,EAActE,EAAKuE,YAAYC,EAAA,GACnCF,EAAYG,aAAc,EAC1BH,EAAYI,YAAc,EAE1B,IAAIC,GAAU,IAAItE,EAAA,GAAoBI,OAAO,cAC7C6D,EAAYM,KAAOD,EACnB3E,EAAKsE,YAAcA,EAEFA,EAAYO,OAAOC,OAAO,SAChClC,WAAWmC,MAAQ,IAE9B,IAAIC,EAAmBV,EAAYO,OAAOC,OAAO,UACjDE,EAAiBpC,WAAWmC,MAAQ,IACpCC,EAAiBpC,WAAWqC,SAAU,EAEfX,EAAYO,OAAOC,OAAO,eAChClC,WAAWmC,MAAQ,EAEpC,IAAIG,EAASlF,EAAKuE,YAAYC,EAAA,GAEZU,EAAOL,OAAOC,OAAO,UAC3BlC,WAAWqC,SAAU,EAEjCC,EAAOT,aAAc,EACrBS,EAAOtE,qBAAsB,EAC7BsE,EAAOC,YAAYvC,WAAWwC,OAAS,IACvCF,EAAO7C,OAAOC,GAAG,YAAatC,EAAKqE,iBAAkBrE,GAAM,GAC3DkF,EAAOC,YAAYvC,WAAWqC,SAAU,EAGxCjF,EAAKkF,OAASA,EAEdlF,EAAKqF,YAAYH,EAAO7C,OAAOC,GAAG,YAAatC,EAAKsF,gBAAiBtF,GAAM,IAE3EA,EAAKmC,WAAWC,KAAKpC,EAAKkF,QAE1B,IAAIK,EAAQvF,EAAKuE,YAAYiB,EAAA,UAC7BD,EAAMd,aAAc,EACpBc,EAAME,iBAAmB,SACzBF,EAAMG,eAAiB,SACvBH,EAAMX,KAAOD,EACbY,EAAMhF,cAAgB,EACtBgF,EAAM3E,qBAAsB,EAC5B2E,EAAMI,UAAY,SAClBJ,EAAMK,WAAa,SACnB5F,EAAKuF,MAAQA,EAEbvF,EAAK6F,QAAQC,IAAI,WAAY,SAACpE,EAAGL,GAChC,OAAQA,EAAO6D,OAAOa,gBA+MzB,OA3UuC/E,OAAAC,EAAA,EAAAD,CAAAwC,EAAA1D,GAmI5B0D,EAAAtC,UAAAoE,gBAAV,WACC,GAAIpF,KAAKqF,MAAMS,KAAM,CACpB,IAAId,EAAShF,KAAKgF,OACdE,EAASF,EAAOa,YAGhBE,EADKf,EAAOgB,aACEtD,WAAWwC,OACzBe,EAAA,SAAeF,KAClBb,EAASa,GAGV/F,KAAKqF,MAAMa,MAAQ,EAAIhB,EACvBlF,KAAKqF,MAAMc,OAAS,EAAIjB,IAUnB5B,EAAAtC,UAAAoF,SAAP,SAAgBlF,GACftB,EAAAoB,UAAMoF,SAAQrG,KAAAC,KAACkB,GACXlB,KAAKgF,QACRhF,KAAKgF,OAAOoB,SAASlF,EAAO8D,QAEzBhF,KAAKqF,OACRrF,KAAKqF,MAAMe,SAASlF,EAAOmE,OAExBrF,KAAKoE,aACRpE,KAAKoE,YAAYgC,SAASlF,EAAOkD,cAU5Bd,EAAAtC,UAAAqF,UAAP,SAAiBrE,GAAjB,IAAAlC,EAAAE,KACCJ,EAAAoB,UAAMqF,UAAStG,KAAAC,KAACgC,GAEhB,IAAIgC,EAAWhE,KAAKgE,SAEpB,GAAIA,EAAU,CAEb,IAAIsC,EAAWtC,EAASsC,SACpBrC,EAAYD,EAASC,UACpBA,EAAUsC,mBACVvE,GAASsE,IAAatC,EAASwC,iBAClCvC,EAAUwC,SAASzC,GACnBC,EAAUyC,kBAGP1E,GACCsE,GACHA,EAASK,KAAK,SAACC,GACdA,EAAMC,KAAKhF,OACX+E,EAAMC,KAAKnG,qBAAsB,EAC7BkG,EAAME,YACTF,EAAME,WAAWjF,OAEd/B,EAAK8D,UACRgD,EAAMC,KAAKlD,UAAW,EAGtBiD,EAAMC,KAAKlD,UAAW,IAKzBK,EAAS+C,oBAAmB,KAGxBT,GACHA,EAASK,KAAK,SAACC,GACVA,EAAME,YACTF,EAAME,WAAWlF,OAElBgF,EAAMC,KAAKlD,UAAW,EACtBiD,EAAMC,KAAKnG,qBAAsB,EAEjCkG,EAAMC,KAAKjF,SAGboC,EAAS+C,oBAAmB,KAK/B/G,KAAKmE,oBAOIb,EAAAtC,UAAAmD,iBAAV,WACC,IAAIH,EAAWhE,KAAKgE,SAChBA,GAAYA,EAASC,WACxBD,EAASC,UAAU+C,qBAcrBlG,OAAAgB,eAAWwB,EAAAtC,UAAA,iBAOX,WACC,OAAOhB,KAAK6C,iBAAiB,kBAR9B,SAAqBb,GACpBhC,KAAK2C,iBAAiB,YAAaX,oCAqB7BsB,EAAAtC,UAAAiG,SAAP,SAAgBJ,EAAyBjG,GACxC,IAAIsG,EAAOlH,KAAK8D,UAAUqD,OAAON,EAAKO,KAKtC,GAJKF,IACJA,EAAOL,EAAK/C,UAAUqD,OAAOnH,KAAKoH,OAG9BF,EAAM,CACV,IAAIlD,EAAWhE,KAAKgE,SAChBC,EAAYD,EAASC,WACzBiD,EAAOjD,EAAUoD,MAAMzC,UAClB0C,OAASrD,EACdiD,EAAKK,QAAU,EACfL,EAAKhG,OAASlB,KACdkH,EAAK/F,OAAS0F,EACdK,EAAK5G,OAAS0D,EAAS6C,KAAKnC,KAE5BwC,EAAKlD,SAAW6C,EAAK7C,SAEjBiC,EAAA,SAAerF,KAClBsG,EAAKtG,SAAWA,GAGjB,IAAI4G,EAAYvD,EAAUwD,MAAMC,QAAQ1D,EAAS6C,MAC7Cc,EAAa1D,EAAUwD,MAAMC,QAAQb,GAEzC5C,EAAU2D,WAAW1F,MAAOhB,OAAQsG,EAAWrG,OAAQwG,IACvD1D,EAAUyC,iBAEV1C,EAAS6D,WAAW3F,KAAKgF,GAEzBlH,KAAK8D,UAAUgE,OAAOjB,EAAKO,IAAKF,GAEjC,OAAOA,GASD5D,EAAAtC,UAAA+G,WAAP,SAAkBlB,GACjB7G,KAAK8D,UAAUkE,UAAUnB,EAAKO,MAU/BtG,OAAAgB,eAAWwB,EAAAtC,UAAA,qBAOX,WACC,OAAOhB,KAAK6C,iBAAiB,sBAR9B,SAAyBb,GACxBhC,KAAK2C,iBAAiB,gBAAiBX,oCASzCsB,EA3UA,CAAuC2E,EAAA,GAmVvC9E,EAAA,EAASC,kBAAqC,kBAAIC,sGCjXlD6E,EAAA,SAAAtI,GA2CC,SAAAuI,IAAA,IAAArI,EACCF,EAAAG,KAAAC,OAAOA,YANDF,EAAA0G,gBAA0B,EAOhC1G,EAAKG,UAAY,8BAEjBH,EAAKsI,YAAY9B,UAAW,EAE5BxG,EAAK+H,WAAa,IAAIQ,EAAA,EAEtBvI,EAAKe,eA+TP,OAlXiDC,OAAAC,EAAA,EAAAD,CAAAqH,EAAAvI,GA6DzCuI,EAAAnH,UAAAa,KAAP,SAAYyG,EAAmBC,EAAgBC,GAC9CxI,KAAKyI,UAAW,EAEZzI,KAAK6G,OACR7G,KAAK6G,KAAKlD,UAAW,IAQhBwE,EAAAnH,UAAA+F,mBAAP,SAA0BhC,GACzB,GAAI/E,KAAKmC,OAAOK,UAAU,qBAAsB,CAC/C,IAAMkG,GACLC,KAAM,oBACNxH,OAAQnB,KACR+E,QAASA,GAGV/E,KAAKmC,OAAOyG,oBAAoB,oBAAqBF,KAahDP,EAAAnH,UAAAY,KAAP,SAAY0G,EAAmBC,EAAgBM,EAAkBL,GAGhE,GAFAxI,KAAKyI,UAAW,EAEZzI,KAAKmC,OAAOK,UAAU,qBAAsB,CAC/C,IAAMsG,GACLH,KAAM,oBACNxH,OAAQnB,KACR+E,SAAS,GAGV/E,KAAKmC,OAAOyG,oBAAoB,oBAAqBE,GAGlD9I,KAAK6G,OACR7G,KAAK6G,KAAKlD,UAAW,IAUvB7C,OAAAgB,eAAWqG,EAAAnH,UAAA,aAOX,WAEC,IAAIgB,EAAQhC,KAAK+I,OAAO/G,MAAMA,MAW9B,OATKiE,EAAA,SAAejE,IACfhC,KAAKsG,WACRtE,EAAQ,EACRhC,KAAKsG,SAASK,KAAK,SAACC,GACnB5E,GAAS4E,EAAM5E,SAKXA,OApBR,SAAiBA,GAChBhC,KAAKgJ,SAAS,QAAShH,oCA4BxBlB,OAAAgB,eAAWqG,EAAAnH,UAAA,YAAX,eAAAlB,EAAAE,KACC,IAAKA,KAAKiJ,MAAO,CAEhB,IAAIC,EAAYlJ,KAAKiE,UAEjBkF,EAAOD,EAAUzB,MAAM7C,SAC3BuE,EAAK1F,WAAY,EACjBzD,KAAKiJ,MAAQE,EAEbnJ,KAAKiC,WAAWC,KAAKiH,GAErBnJ,KAAKiC,WAAWC,KAAK,IAAIkH,EAAA,EAAS,WACjCF,EAAUzB,MAAM4B,YAAYF,MAG7BnJ,KAAKsJ,UAAUH,GACfA,EAAKpE,QAAU/E,KAAK+E,QACpBoE,EAAKlE,YAAYvC,WAAWqC,SAAU,EAGlCmE,EAAUK,kBACbvJ,KAAKiE,UAAUuF,KAAO,OACtBL,EAAKK,KAAO,WACZL,EAAKM,WAAY,IAGjBzJ,KAAKiE,UAAUuF,KAAO,OACtBL,EAAKK,KAAO,WACZL,EAAKM,WAAY,GAIdN,EAAKM,YACRN,EAAKhH,OAAOuH,KAAK,QAAS,SAACC,GAC1BR,EAAKS,YAAcV,EAAUW,eAAeX,EAAUY,eAAgBhK,SACpEiK,GAAW,GACdZ,EAAKhH,OAAOuH,KAAK,OAAQ,SAACC,GACzBR,EAAKS,YAAc,SACjBG,GAAW,IAEXZ,EAAKa,YACRb,EAAKhH,OAAOuH,KAAK,OAAQ,SAACC,GACzBR,EAAKS,YAAcV,EAAUW,eAAeX,EAAUY,eAAgBhK,SACpEiK,GAAW,GACdZ,EAAKhH,OAAOuH,KAAK,MAAO,SAACC,GACxBR,EAAKS,YAAc,SACjBG,GAAW,IAGhB,OAAO/J,KAAKiJ,uCAYbnI,OAAAgB,eAAWqG,EAAAnH,UAAA,aAAX,WACC,OAAKhB,KAAKsH,OAIFtH,KAAKsH,OAAO2C,MAAQ,EAHpB,mCAeTnJ,OAAAgB,eAAWqG,EAAAnH,UAAA,aAOX,WACC,IAAIkJ,EAAQlK,KAAK0C,WAAWwH,MAY5B,YAVaH,GAATG,GACClK,KAAKsH,SACR4C,EAAQlK,KAAKsH,OAAO4C,YAGTH,GAATG,GACClK,KAAKiE,YACRiG,EAAQlK,KAAKiE,UAAUkG,OAAOC,SAASpK,KAAKiE,UAAUkG,OAAOE,KAAOrK,KAAKsK,QAGpEJ,OApBR,SAAiBlI,GAChBhC,KAAKuK,YAAY,QAASvI,oCA4B3BlB,OAAAgB,eAAWqG,EAAAnH,UAAA,gBAOX,WACC,OAAOhB,KAAK0C,WAAWuE,cARxB,SAAoBjF,GACnBhC,KAAKuK,YAAY,WAAYvI,oCAe9BlB,OAAAgB,eAAWqG,EAAAnH,UAAA,sBAOX,WACC,OAAOhB,KAAK0C,WAAW8H,oBARxB,SAA0BxI,GACzBhC,KAAKuK,YAAY,iBAAkBvI,oCAoBpClB,OAAAgB,eAAWqG,EAAAnH,UAAA,iBAQX,WACC,OAAOhB,KAAK0C,WAAW+H,eATxB,SAAqBzI,GACpBhC,KAAKuK,YAAY,YAAavI,GAC9BhC,KAAK6G,KAAKlD,UAAY3B,mCAgBvBlB,OAAAgB,eAAWqG,EAAAnH,UAAA,aAOX,WACC,OAAOhB,KAAK0C,WAAWgI,WARxB,SAAiB1I,GAChBhC,KAAKuK,YAAY,QAASvI,oCAe3BlB,OAAAgB,eAAWqG,EAAAnH,UAAA,gBAOX,WACC,OAAOhB,KAAK0C,WAAW4D,cARxB,SAAoBA,GACnBtG,KAAKuK,YAAY,WAAYjE,oCAgBvB6B,EAAAnH,UAAA2J,mBAAP,SAA0BC,GACzB5K,KAAKiE,UAAU0G,mBAAmBC,EAAQ5K,MACrCA,KAAK6G,KAAKlD,UACd3D,KAAK4B,QASPd,OAAAgB,eAAWqG,EAAAnH,UAAA,sBAaX,WACC,OAAOhB,KAAK6K,qBAdb,SAA0B7I,GACzBhC,KAAK6K,gBAAkB7I,EACnBA,EAAMqD,QACTrD,EAAMqD,MAAMrB,SAAWhE,MAEpBgC,EAAM8I,aACT9I,EAAM8I,WAAW9G,SAAWhE,uCAU/BmI,EAlXA,CAAiD4C,EAAA,GA0gBjDC,EAAA,SAAApL,GAwFC,SAAAqL,IAAA,IAAAnL,EACCF,EAAAG,KAAAC,OAAOA,YACPF,EAAKG,UAAY,sBAEjBH,EAAKoL,kBAAoBC,EAAA,IAEzBrL,EAAKsL,UAAYtK,OAAAgC,EAAA,EAAAhC,CAAQ,GACzBhB,EAAKuL,UAAYvK,OAAAgC,EAAA,EAAAhC,CAAQ,GAEzBhB,EAAKoG,MAAQpF,OAAAgC,EAAA,EAAAhC,CAAQ,KACrBhB,EAAKqG,OAASrF,OAAAgC,EAAA,EAAAhC,CAAQ,KAEtBhB,EAAKqK,OAAS,IAAImB,EAAA,EAClBxL,EAAKqK,OAAOE,KAAO,EAEnBvK,EAAKoG,MAAQpF,OAAAgC,EAAA,EAAAhC,CAAQ,KACrBhB,EAAKqG,OAASrF,OAAAgC,EAAA,EAAAhC,CAAQ,KAEtBhB,EAAKyL,kBAAoB,GACzBzL,EAAK0L,eAAiB,GAEtB1L,EAAKqC,OAAOC,GAAG,iBAAkB,WAChCtC,EAAK2L,eAAe3L,EAAK4L,WACzB5L,EAAK6L,sBAEL7L,EAAK4L,UAAU/E,KAAK,SAAC3C,GACpBlE,EAAK8L,YAAY5H,KAGlB,IAAIkH,EAAoBpL,EAAKoL,kBAEzBW,EAAIC,EAAA,IAAU,GAAIhM,EAAKiM,YACvBC,EAAIF,EAAA,IAAU,GAAIhM,EAAKmM,aAEvBf,IACHA,EAAkBgB,MAAM,IAAKf,EAAA,IAAiB7J,EAAEuK,EAAI,GAAGjL,SAA+B,IAAtBd,EAAK0L,eAAuBK,IAC5FX,EAAkBgB,MAAM,IAAKf,EAAA,IAAiB3J,EAAEwK,EAAI,GAAGpL,SAA+B,IAAtBd,EAAK0L,eAAuBQ,IACxFd,EAAkBiB,QAAU,KAC/BjB,EAAkBiB,MAAM,IACxBjB,EAAkBkB,cAKrBtM,EAAKe,eAyuBP,OA72ByCC,OAAAC,EAAA,EAAAD,CAAAmK,EAAArL,GA+I9BqL,EAAAjK,UAAAqL,YAAV,SAAsBX,EAA6DY,GAAnF,IAAAxM,EAAAE,KAaC,OAZA0L,EAAU/E,KAAK,SAAC3C,GAKf,GAJIA,EAAShC,MAAQsK,IACpBA,EAAMtI,EAAShC,OAGZgC,EAASsC,SAAU,CACtB,IAAIiG,EAAOzM,EAAKuM,YAAYrI,EAASsC,SAAUgG,GAC3CC,EAAOD,IACVA,EAAMC,MAIFD,GAQDrB,EAAAjK,UAAAwL,kBAAP,eAAA1M,EAAAE,KAEC,GAAIA,KAAKyM,MAAMC,WACd9M,EAAAoB,UAAMwL,kBAAiBzM,KAAAC,UADxB,CAKAA,KAAK2M,eAAezK,KAAK,IAAImG,EAAA,EAAarI,KAAKqH,QAE/CrH,KAAK4M,UAAY5M,KAAKqM,YAAYrM,KAAK0L,UAAW,GAElD1L,KAAK4H,cAEL5H,KAAKmK,OAAO0C,QAEZ,IAAIvC,EAAQ,EAERpF,EAAS4H,KAAKC,IAAI/M,KAAKiM,YAAc,EAAGjM,KAAK+L,WAAa,GAE1D/L,KAAK0L,UAAUsB,QAAU,IAC5B9H,EAAS,GAGVlF,KAAK0L,UAAU/E,KAAK,SAAC3C,GAEpB,IAAIiJ,EAAQ3C,EAAQxK,EAAK4L,UAAUsB,OAAS,IAExCnG,EAAO7C,EAAS6C,KAEhBqG,EAASrG,EAAKsG,eAAe7L,EAC7B8L,EAASvG,EAAKsG,eAAe3L,EAE7B0L,GAAUjH,EAAA,SAAqBjC,EAASqJ,YAAaH,IACxDrG,EAAKvF,EAAU0C,EAASqJ,YAAaH,GAGrCrG,EAAKvF,EAAIxB,EAAKiM,WAAa,EAAI7G,EAAS4G,EAAA,IAAUmB,GAE/CG,GAAUnH,EAAA,SAAqBjC,EAASqJ,YAAaD,IACxDvG,EAAKrF,EAAUwC,EAASqJ,YAAaD,GAGrCvG,EAAKrF,EAAI1B,EAAKmM,YAAc,EAAI/G,EAAS4G,EAAA,IAAUmB,GAGpDjJ,EAAS6C,KAAKnC,KAAOV,EAASkG,MAC9BlG,EAAS6C,KAAKvG,OAAS0D,EAASkG,MAEhCI,IAEAxK,EAAK2G,SAASzC,KAGXhE,KAAKsN,WAAWrG,UACnBjH,KAAK0L,UAAU/E,KAAK,SAAC3C,GACpBlE,EAAKyN,gBAAgBvJ,KAIvB,IAAIkH,EAAoBlL,KAAKkL,kBAE7BA,EAAkB9I,GAAG,OAAQ,WAC5BtC,EAAK6L,wBAIN,IAAK,IAAI6B,EAAI,EAAGA,EAAI,GAAIA,IACvBtC,EAAkBuC,OAEnBvC,EAAkBwC,WAAW,EAAIZ,KAAKa,IAAI,KAAO,EAAI,MAErD3N,KAAKyM,MAAMmB,aAEXhO,EAAAoB,UAAMwL,kBAAiBzM,KAAAC,QAGdiL,EAAAjK,UAAA4K,YAAV,SAAsB5H,GAAtB,IAAAlE,EAAAE,KACK6G,EAAO7C,EAAS6C,KAEhBqG,EAASrG,EAAKsG,eAAe7L,EAC7B8L,EAASvG,EAAKsG,eAAe3L,EAE7B0L,GAAUjH,EAAA,SAAqBjC,EAASqJ,YAAaH,MACxDrG,EAAKvF,EAAU0C,EAASqJ,YAAaH,IAGlCE,GAAUnH,EAAA,SAAqBjC,EAASqJ,YAAaD,MACxDvG,EAAKrF,EAAUwC,EAASqJ,YAAaD,IAGlCpJ,EAAS0G,OAER7D,EAAKvF,aAAawB,EAAA,EACf+D,EAAMgH,GAAKC,EAAA,gBAAuBjH,EAAKvF,EAAGtB,KAAK+L,YAG/ClF,EAAMgH,GAAKhH,EAAKvF,EAGnBuF,EAAKrF,aAAasB,EAAA,EACf+D,EAAMkH,GAAKD,EAAA,gBAAuBjH,EAAKrF,EAAGxB,KAAKiM,aAG/CpF,EAAMkH,GAAKlH,EAAKrF,EAGvBqF,EAAKpD,WAAY,EAEjBoD,EAAK5F,aAGC4F,EAAMgH,QAAK9D,EACXlD,EAAMkH,QAAKhE,EACjBlD,EAAKpD,WAAY,GAGfO,GAAYA,EAASsC,UACvBtC,EAASsC,SAASK,KAAK,SAACqH,GACvBlO,EAAK8L,YAAYoC,MASb/C,EAAAjK,UAAA0F,eAAP,WACC,IAAIwE,EAAoBlL,KAAKkL,kBAC7BA,EAAkBzD,MAAMzH,KAAKyH,MAAMsB,QACnC/I,KAAKiO,WAAa9C,EAAA,EAAkBnL,KAAK4H,YACzCsD,EAAkBgB,MAAM,OAAQlM,KAAKiO,YACrCjO,KAAKkO,gBAAkB/C,EAAA,IACvBD,EAAkBgB,MAAM,YAAalM,KAAKkO,iBAE1C,IAAIrC,EAAIC,EAAA,IAAU,GAAI9L,KAAK+L,YACvBC,EAAIF,EAAA,IAAU,GAAI9L,KAAKiM,aAE3Bf,EAAkBgB,MAAM,IAAKf,EAAA,IAAiB7J,EAAEuK,EAAI,GAAGjL,SAA+B,IAAtBZ,KAAKwL,eAAuBK,IAC5FX,EAAkBgB,MAAM,IAAKf,EAAA,IAAiB3J,EAAEwK,EAAI,GAAGpL,SAA+B,IAAtBZ,KAAKwL,eAAuBQ,KAOtFf,EAAAjK,UAAA2K,oBAAP,eAAA7L,EAAAE,KACKA,KAAKiO,aACRjO,KAAKiO,WAAWtN,SAAS,SAACwN,GACzB,OAAOrO,EAAKsO,YAAYD,KAEzBnO,KAAKiO,WAAWrN,SAAS,SAACuN,GACzB,OAAOrO,EAAKuO,YAAYF,MAItBnO,KAAKkO,iBACRlO,KAAKkO,gBAAgBhJ,OAAO,SAAS2B,GACpC,GAAIA,aAAgBxD,EAAmB,CACtC,IAAI6B,EAAS2B,EAAK7B,OAAOa,YAIzB,OAHKgB,EAAKzC,YAAYsI,YAAe7F,EAAKzC,YAAYkK,WAAYzH,EAAKzC,YAAYW,UAClFG,GAAUA,EAAS,GAAK2B,EAAKzC,YAAYS,OAEnCK,EAAS2B,EAAKhD,cAEtB,OAAO,IAIT7D,KAAKkL,kBAAkBgB,MAAM,WAAYf,EAAA,IAAwBvK,SAAS,SAACiG,GAC1E,OAAIA,aAAgBxD,EACZwD,EAAK7B,OAAOa,YAAc/F,EAAKyL,iBAEhCzL,EAAKyL,qBAQJN,EAAAjK,UAAAoN,YAAV,SAAsBD,GACrB,IAAIjN,EAA+CiN,EAAUjN,OACzDC,EAA+CgN,EAAUhN,OAEzDR,EAAW,EACf,GAAIQ,EAAO6C,UAAY9C,EAAO8C,SAAU,CAGvC,IAAIkD,EAAOhG,EAAO4C,UAAUqD,OAAOhG,EAAOiG,KAU1C,OARIF,IACHvG,EAAWuG,EAAKvG,UAGZO,EAAOyC,WACXhD,EAAW,GAGTQ,EAAOO,SACF,EAGAf,GAAYO,EAAO8D,OAAOa,YAAc1E,EAAO6D,OAAOa,aAG/D,OAAOlF,GAOEsK,EAAAjK,UAAAqN,YAAV,SAAsBF,GACrB,IAAIjN,EAA+CiN,EAAUjN,OACzDC,EAA+CgN,EAAUhN,OAEzDP,EAAW,EAEXsG,EAAOhG,EAAO4C,UAAUqD,OAAOhG,EAAOiG,KAK1C,OAJIF,IACHtG,EAAWsG,EAAKtG,UAGdO,EAAOO,SACF,EAGDd,GAQDqK,EAAAjK,UAAAuN,cAAP,WACCvO,KAAKkL,kBAAkBsD,YAAY,IAO7BvD,EAAAjK,UAAAkD,gBAAP,WACClE,KAAKkL,kBAAkBiB,MAAM,IAC7BnM,KAAKkL,kBAAkBkB,WAQjBnB,EAAAjK,UAAAgG,kBAAP,WACKhH,KAAKkL,kBAAkBiB,SAAW,KACrCnM,KAAKkL,kBAAkBiB,MAAM,IAC7BnM,KAAKkL,kBAAkBkB,YAOfnB,EAAAjK,UAAAyK,eAAV,SAAyBC,GAAzB,IAAA5L,EAAAE,KACC0L,EAAU/E,KAAK,SAAC3C,GACflE,EAAK2O,aAAazK,GACdA,EAASwC,gBACZ1G,EAAK2L,eAAezH,EAASsC,aAQtB2E,EAAAjK,UAAAyN,aAAV,SAAuBzK,GACtB,IAAI6C,EAAO7C,EAAS6C,KAChB6H,GAAW1O,KAAK+L,WAAa/L,KAAKiM,aAAe,EACjDZ,EAAYyC,EAAA,gBAAuB9N,KAAKqL,UAAWqD,GACnDtD,EAAY0C,EAAA,gBAAuB9N,KAAKoL,UAAWsD,GAEnDxJ,EAASmG,EAAYrH,EAAShC,MAAQhC,KAAK4M,WAAaxB,EAAYC,GAEnEpF,EAAA,SAAef,KACnBA,EAASmG,GAIVxE,EAAK7B,OAAOE,OAASA,EAErB2B,EAAKzC,YAAYc,OAASA,EAAS,EAEnC2B,EAAK7B,OAAOL,OAAOwC,OAAO,UAAUzE,WAAWwC,OAASA,EACxD2B,EAAK7B,OAAOgB,aAAatD,WAAWwC,OAASA,GAQvC+F,EAAAjK,UAAAyF,SAAP,SAAgBzC,GAAhB,IAAAlE,EAAAE,KAEK6G,EAAO7C,EAAS6C,KAgBpB,GAfAA,EAAKS,OAAStH,KACdA,KAAKyO,aAAazK,GAIbA,EAASsC,UAAwC,GAA5BtC,EAASsC,SAAS0G,OAM3CnG,EAAK8H,gBAAkBC,EAAA,EAAiBC,SALxChI,EAAKzC,YAAYkK,UAAW,EAC5BzH,EAAK7B,OAAOtE,qBAAsB,EAClCmG,EAAK8H,gBAAkBC,EAAA,EAAiBE,SAOrC9O,KAAKuG,mBAAqBvC,EAASiG,OAASjK,KAAK+O,UAAY,GAAK/K,EAASyG,WAG9E,OAFA5D,EAAKlD,UAAW,OAChB3D,KAAK0G,iBAUN,GANKG,EAAKlD,UACTkD,EAAKjF,KAAK,GAGX5B,KAAK4L,YAAY5H,GAEbA,EAASsC,SAAU,CACtB,IAAI0I,EAAQ,EACZhL,EAASwC,gBAAiB,EAEG,GAAzBxG,KAAK0L,UAAUsB,QAAiC,GAAlBhJ,EAASiG,OAC1CjK,KAAKmK,OAAO8E,OAGbjL,EAASsC,SAASK,KAAK,SAACC,GAcvB,IAAIM,EAAOL,EAAKI,SAASL,EAAMC,MAC/BD,EAAME,WAAaI,EAEnB,IASIgD,EATAhF,EAAS,EAAI2B,EAAK7B,OAAOa,YAAce,EAAMC,KAAK7B,OAAOa,YAEzDoH,EAAQ+B,EAAQhL,EAASsC,SAAS0G,OAAS,IAE/CpG,EAAMC,KAAKvF,EAAIuF,EAAKtF,OAAS2D,EAAS4G,EAAA,IAAUmB,GAChDrG,EAAMC,KAAKrF,EAAIqF,EAAKpF,OAASyD,EAAS4G,EAAA,IAAUmB,GAEhDrG,EAAMC,KAAK7B,OAAOE,OAAS,EAI3B,IAAIgK,EAAUtI,EAAMlE,WAAWwH,MAE9BA,EADGjE,EAAA,SAAeiJ,GACVA,EAGqB,GAAzBpP,EAAK4L,UAAUsB,QAAiC,GAAlBhJ,EAASiG,MAClCnK,EAAKqK,OAAO8E,OAGZjL,EAASkG,MAGnBtD,EAAMsD,MAAQA,EACdtD,EAAMC,KAAKnC,KAAOwF,EAClBtD,EAAMC,KAAKvG,OAAS4J,EACpBtD,EAAME,WAAWxG,OAAS4J,EAE1BpK,EAAK2G,SAASG,GAEdoI,MAGFnI,EAAKlD,UAAW,EAChBkD,EAAKhF,OACL7B,KAAK0G,kBAOIuE,EAAAjK,UAAAuM,gBAAV,SAA0BvJ,GAA1B,IAAAlE,EAAAE,KAEKgE,EAASiD,UACZkI,EAAA,KAAYnL,EAASiD,SAAU,SAACmI,EAAI9E,GACnC,IAAI+E,EAAoBvP,EAAKwP,gBAAgBxP,EAAK4L,UAAW0D,GAEzDC,GACHrL,EAAS6C,KAAKI,SAASoI,EAAkBxI,KAAM/G,EAAKyP,oBAKnDvL,EAASsC,UACZtC,EAASsC,SAASK,KAAK,SAACC,GACvB9G,EAAKyN,gBAAgB3G,MAYjBqE,EAAAjK,UAAAsO,gBAAP,SAAuB5D,EAA6D0D,GACnF,IAAK,IAAI5B,EAAI9B,EAAUsB,OAAS,EAAGQ,GAAK,EAAGA,IAAK,CAC/C,IAAIxJ,EAAW0H,EAAUtB,SAASoD,GAElC,GAAIxJ,EAASoL,IAAMA,EAClB,OAAOpL,EAER,GAAIA,EAASsC,SAAU,CACtB,IAAI0H,EAAKhO,KAAKsP,gBAAgBtL,EAASsC,SAAU8I,GACjD,GAAIpB,EACH,OAAOA,KAYD/C,EAAAjK,UAAAwO,eAAV,WACC,OAAO,IAAItH,GAQZpH,OAAAgB,eAAWmJ,EAAAjK,UAAA,aAAX,WACC,IAAKhB,KAAKyP,OAAQ,CACjB,IAAI5I,EAAO7G,KAAK0P,aAEhB7I,EAAKtD,eAAgB,EACrBvD,KAAKiC,WAAWC,KAAK2E,GAErB7G,KAAKyP,OAAS,IAAIpH,EAAA,EAAaxB,GAC/B7G,KAAKiC,WAAWC,KAAK,IAAImG,EAAA,EAAarI,KAAKyP,SAE5C,OAAOzP,KAAKyP,wCAQb3O,OAAAgB,eAAWmJ,EAAAjK,UAAA,aAAX,WACC,IAAKhB,KAAK2P,OAAQ,CACjB,IAAIzI,EAAOlH,KAAK4P,aAChB1I,EAAK3D,eAAgB,EACrBvD,KAAKiC,WAAWC,KAAKgF,GAErBlH,KAAK2P,OAAS,IAAItH,EAAA,EAAanB,GAC/BlH,KAAKiC,WAAWC,KAAK,IAAImG,EAAA,EAAarI,KAAK2P,SAE5C,OAAO3P,KAAK2P,wCAMH1E,EAAAjK,UAAA0O,WAAV,WACC,OAAO,IAAIrM,GAMF4H,EAAAjK,UAAA4O,WAAV,WACC,OAAO,IAAIjQ,GAYZmB,OAAAgB,eAAWmJ,EAAAjK,UAAA,iBAOX,WACC,OAAOhB,KAAK6C,iBAAiB,kBAR9B,SAAqBb,GACpBhC,KAAK2C,iBAAiB,YAAaX,GAAO,oCAmB3ClB,OAAAgB,eAAWmJ,EAAAjK,UAAA,iBAOX,WACC,OAAOhB,KAAK6C,iBAAiB,kBAR9B,SAAqBb,GACpBhC,KAAK2C,iBAAiB,YAAaX,GAAO,oCA2B3ClB,OAAAgB,eAAWmJ,EAAAjK,UAAA,cAOX,WACC,OAAOhB,KAAK6C,iBAAiB,eAR9B,SAAkBb,GACjBhC,KAAK2C,iBAAiB,SAAUX,GAAO,oCAexClB,OAAAgB,eAAWmJ,EAAAjK,UAAA,iBAOX,WACC,OAAOhB,KAAK6C,iBAAiB,kBAR9B,SAAqBb,GACpBhC,KAAK2C,iBAAiB,YAAaX,GAAO,oCAuB3ClB,OAAAgB,eAAWmJ,EAAAjK,UAAA,wBASX,WACC,OAAOhB,KAAK6C,iBAAiB,yBAV9B,SAA4Bb,GACvBhC,KAAK2C,iBAAiB,mBAAoBX,IAC7ChC,KAAKgH,qDAuBPlG,OAAAgB,eAAWmJ,EAAAjK,UAAA,sBASX,WACC,OAAOhB,KAAK6C,iBAAiB,uBAV9B,SAA0Bb,GACrBhC,KAAK2C,iBAAiB,iBAAkBX,IAC3ChC,KAAKgH,qDAkBPlG,OAAAgB,eAAWmJ,EAAAjK,UAAA,wBASX,WACC,OAAOhB,KAAK6C,iBAAiB,yBAV9B,SAA4Bb,GACvBhC,KAAK2C,iBAAiB,mBAAoBX,IAC7ChC,KAAKgH,qDAoBAiE,EAAAjK,UAAA2J,mBAAP,SAA0BC,EAAmB5G,GAC5C4G,EAAOtE,SAASK,KAAK,SAACC,GACrB,IAAIC,EAAO7C,EAAS6C,KAEhBD,aAAiBiJ,EAAA,GACpBjJ,EAAMkJ,aAAa,GAAI,GAAI,GAAI,IAIhClJ,EAAMZ,aAAatD,WAAWgC,KAAOmC,EAAKnC,KAC1CkC,EAAMZ,aAAatD,WAAWpC,OAASuG,EAAKvG,OAC5CsG,EAAMZ,aAAatD,WAAWtC,YAAcyG,EAAKzG,YACjDwG,EAAMZ,aAAatD,WAAWrC,cAAgBwG,EAAKxG,cAEnDuG,EAAMlC,KAAOmC,EAAKnC,KAClBkC,EAAMtG,OAASuG,EAAKvG,OACpBsG,EAAMxG,YAAcyG,EAAKzG,YACzBwG,EAAMvG,cAAgBwG,EAAKxG,mBAET0J,GAAdnD,EAAMlC,OACTkC,EAAM8F,YAAa,GAGpB,IAAIqD,EAAiCnF,EAAO5G,SAC5C+L,EAAe7F,MAAQrD,EAAKnC,KAC5BqL,EAAeC,UAAYnJ,EAAKnC,KAEhCmC,EAAK1E,OAAOC,GAAG,kBAAmB,SAACuH,GACf,QAAfA,EAAGsG,WAENrJ,EAAM8F,YAAa,EAEd9F,EAAMjD,WACViD,EAAMlC,KAAOmC,EAAKnC,MAEnBkC,EAAMZ,aAAatD,WAAWgC,KAAOmC,EAAKnC,KAC1CqL,EAAe7F,MAAQrD,EAAKnC,KAC5BqL,EAAeC,UAAYnJ,EAAKnC,MAGd,UAAfiF,EAAGsG,WACDrJ,EAAMjD,WACViD,EAAMtG,OAASuG,EAAKvG,QAErBsG,EAAMZ,aAAatD,WAAWpC,OAASuG,EAAKvG,cAE3CyJ,GAAW,MAGjBkB,EA72BA,CAAyCF,EAAA,GAq3BzC5H,EAAA,EAASC,kBAAuC,oBAAI4H,EACpD7H,EAAA,EAASC,kBAA+C,4BAAI8E,ECj5C5D,IAAAgI,EAAA,SAAAtQ,GAAA,SAAAuQ,mDAAqE,OAAtBrP,OAAAC,EAAA,EAAAD,CAAAqP,EAAAvQ,GAAsBuQ,EAArE,CAA+CC,EAAA,GAwD/CC,EAAA,SAAAzQ,GAmCC,SAAA0Q,IAAA,IAAAxQ,EAGCF,EAAAG,KAAAC,OAAOA,YACPF,EAAKG,UAAY,oBAEjBH,EAAKyQ,gBAAgB/P,YAAa,EAClCV,EAAKyQ,gBAAgBC,OAAS,WAI9B1Q,EAAKe,eA8GP,OA5JuCC,OAAAC,EAAA,EAAAD,CAAAwP,EAAA1Q,GAsD5B0Q,EAAAtP,UAAAyP,aAAV,WACC,OAAO,IAAIzF,GASFsF,EAAAtP,UAAAwO,eAAV,WACC,OAAO,IAAIU,GAQLI,EAAAtP,UAAA4M,WAAP,WACC,IAAI8C,EAAS1Q,KAAK0Q,OAClB,GAAIA,EAAQ,CAEX,IAAIC,KAEJ3Q,KAAK4Q,OAAOjK,KAAK,SAACiK,GACjB,IAAKA,EAAOpG,eAAgB,CAE3B,IAAIkB,EAAYkF,EAAOlF,UACvB,GAAwB,GAApBA,EAAUsB,OAAa,CAC1B,IAAI1G,EAAWsK,EAAOlF,UAAUtB,SAAS,GAAG9D,SACxCA,EAAS0G,OAAS,IACrBtB,EAAYpF,GAIdoF,EAAU/E,KAAK,SAAC3C,GACf,IAAKA,EAASwG,eAAgB,CAC7BmG,EAAWzO,KAAkC8B,GAE7C,IAAI6M,EAAiBD,EAAOC,eACxBA,IACCA,EAAeC,YAClBJ,EAAOK,OAAOC,SAASlL,KAAO+K,EAAeC,WAE1CD,EAAeI,gBAClBP,EAAOK,OAAOC,SAASlL,KAAO+K,EAAeI,eAE1CJ,EAAeK,YAClBR,EAAOS,YAAYH,SAASlL,KAAO+K,EAAeK,WAE/CL,EAAeO,gBAClBV,EAAOS,YAAYH,SAASlL,KAAO+K,EAAeO,sBAQxDV,EAAOW,KAAOV,EACdD,EAAOpD,WAAWgE,KAAO,SASjBhB,EAAAtP,UAAAuQ,sBAAV,WAEC3R,EAAAoB,UAAMuQ,sBAAqBxR,KAAAC,MAItBiG,EAAA,SAAejG,KAAK4J,eACxB5J,KAAK4J,YAAc5J,KAAKwR,SAASC,UAAU,yBAUnCnB,EAAAtP,UAAA0Q,aAAV,eAAA5R,EAAAE,KACO2R,EAAY/R,EAAAoB,UAAM0Q,aAAY3R,KAAAC,MAWpC,OAVA2R,EAAUhM,QAAQC,IAAI,mBAAoB,SAACgM,GAQ1C,MAPmB,OAAfA,EAAKC,QAAkC,QAAfD,EAAKC,QAChC/R,EAAK8Q,OAAOjK,KAAK,SAACiK,GACd3K,EAAA,SAAe2K,EAAOtD,WAAWhH,kBAC5BsL,EAAKtE,WAAWsD,EAAOtD,WAAWhH,YAIrCsL,IAEDD,GAGTrB,EA5JA,CAAuCF,EAAA,GAoKvCjN,EAAA,EAASC,kBAAqC,kBAAIiN,EAClDlN,EAAA,EAASC,kBAA6C,0BAAI8M,ECzP1D4B,OAAAC,yBAAkCC","file":"./plugins/forceDirected.js","sourcesContent":["/**\r\n * ForceDirectedLink module.\r\n */\r\n\r\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\r\nimport { Sprite, ISpriteProperties, ISpriteAdapters, ISpriteEvents } from \"../../core/Sprite\";\r\nimport { registry } from \"../../core/Registry\";\r\nimport { InterfaceColorSet } from \"../../core/utils/InterfaceColorSet\";\r\nimport { ForceDirectedNode } from \"./ForceDirectedNode\";\r\nimport * as $path from \"../../core/rendering/Path\";\r\nimport { percent, Percent } from \"../../core/utils/Percent\";\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * REQUISITES\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Defines properties for [[ForceDirectedLink]].\r\n */\r\nexport interface IForceDirectedLinkProperties extends ISpriteProperties {\r\n\r\n\t/**\r\n\t * Distance between centers of source and target nodes.\r\n\t */\r\n\tdistance?: number;\r\n\r\n\t/**\r\n\t * Strength of the \"traction\" between source and target nodes.\r\n\t */\r\n\tstrength?: number;\r\n\r\n}\r\n\r\n/**\r\n * Defines events for [[ForceDirectedLink]].\r\n */\r\nexport interface IForceDirectedLinkEvents extends ISpriteEvents { }\r\n\r\n/**\r\n * Defines adapters for [[ForceDirectedLink]].\r\n *\r\n * @see {@link Adapter}\r\n */\r\nexport interface IForceDirectedLinkAdapters extends ISpriteAdapters, IForceDirectedLinkProperties { }\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * A class that builds links between [[ForceDirectedNode]] elements.\r\n *\r\n * @see {@link IForceDirectedLinkEvents} for a list of available events\r\n * @see {@link IForceDirectedLinkAdapters} for a list of available Adapters\r\n * @since 4.3.8\r\n * @important\r\n */\r\nexport class ForceDirectedLink extends Sprite {\r\n\r\n\t/**\r\n\t * Defines available properties.\r\n\t */\r\n\tpublic _properties!: IForceDirectedLinkProperties;\r\n\r\n\t/**\r\n\t * Defines available adapters.\r\n\t */\r\n\tpublic _adapter!: IForceDirectedLinkAdapters;\r\n\r\n\t/**\r\n\t * Defines available events.\r\n\t */\r\n\tpublic _events!: IForceDirectedLinkEvents;\r\n\r\n\t/**\r\n\t * Link source node\r\n\t */\r\n\tprotected _source: ForceDirectedNode;\r\n\r\n\t/**\r\n\t * Link parent node\r\n\t */\r\n\tprotected _target: ForceDirectedNode;\r\n\r\n\t/**\r\n\t * Constructor\r\n\t */\r\n\tconstructor() {\r\n\t\tsuper();\r\n\t\tthis.className = \"ForceDirectedLink\";\r\n\r\n\t\tlet interfaceColors = new InterfaceColorSet();\r\n\r\n\t\tthis.fillOpacity = 0;\r\n\t\tthis.strokeOpacity = 0.5;\r\n\t\tthis.stroke = interfaceColors.getFor(\"grid\");\r\n\t\tthis.isMeasured = false;\r\n\t\tthis.nonScalingStroke = true;\r\n\r\n\t\tthis.interactionsEnabled = false;\r\n\r\n\t\tthis.distance = 1.5;\r\n\t\tthis.strength = 1;\r\n\r\n\t\tthis.applyTheme();\r\n\t}\r\n\r\n\t/**\r\n\t * Validates element:\r\n\t * * Triggers events\r\n\t * * Redraws the element\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t */\r\n\tpublic validate() {\r\n\t\tsuper.validate();\r\n\t\tlet source = this.source;\r\n\t\tlet target = this.target;\r\n\t\tif (source && target) {\r\n\t\t\tthis.path = $path.moveTo({ x: source.pixelX, y: source.pixelY }) + $path.lineTo({ x: target.pixelX, y: target.pixelY });\r\n\r\n\t\t\tif (source.isHidden || target.isHidden || source.isHiding || target.isHiding) {\r\n\t\t\t\tthis.hide();\r\n\t\t\t}\r\n\t\t\telse {\r\n\t\t\t\tthis.show();\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t}\r\n\r\n\t/**\r\n\t * Source node - a node link starts from.\r\n\t * \r\n\t * @param value Source node\r\n\t */\r\n\tpublic set source(value: ForceDirectedNode) {\r\n\t\tif (value) {\r\n\t\t\tthis._source = value;\r\n\t\t\tthis._disposers.push(value.events.on(\"positionchanged\", this.invalidate, this, false));\r\n\t\t\tthis._disposers.push(value.events.on(\"validated\", this.invalidate, this, false));\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * @return Source node\r\n\t */\r\n\tpublic get source(): ForceDirectedNode {\r\n\t\treturn this._source;\r\n\t}\r\n\r\n\t/**\r\n\t * Target node - a node link ends at.\r\n\t * \r\n\t * @param value Target node\r\n\t */\r\n\tpublic set target(value: ForceDirectedNode) {\r\n\t\tif (value) {\r\n\t\t\tthis._target = value;\r\n\t\t\tthis._disposers.push(value.events.on(\"positionchanged\", this.invalidate, this, false));\r\n\t\t\tthis._disposers.push(value.events.on(\"validated\", this.invalidate, this, false));\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * @return Target node\r\n\t */\r\n\tpublic get target(): ForceDirectedNode {\r\n\t\treturn this._target;\r\n\t}\r\n\r\n\t/**\r\n\t * Distance between centers of source and target nodes.\r\n\t *\r\n\t * This is relative to the radii to sum of both source and target nodes.\r\n\t *\r\n\t * E.g. if this would be set to `1` both nodes would be touching each other.\r\n\t *\r\n\t * @default 1.5\r\n\t * @param value Distance\r\n\t */\r\n\tpublic set distance(value: number) {\r\n\t\tthis.setPropertyValue(\"distance\", value);\r\n\t}\r\n\r\n\t/**\r\n\t * @return Distance\r\n\t */\r\n\tpublic get distance(): number {\r\n\t\tif (this._adapterO) {\r\n\t\t\tif (this._adapterO.isEnabled(\"distance\")) {\r\n\t\t\t\treturn this._adapterO.apply(\"distance\", this.properties.distance);\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn this.properties.distance;\r\n\t}\r\n\r\n\t/**\r\n\t * Relative \"strength\" of the traction between linked nodes.\r\n\t *\r\n\t * Available values: 0 to XX.\r\n\t *\r\n\t * The bigger the number, the more rigid the link and the less it will\r\n\t * stretch when node is dragged.\r\n\t *\r\n\t * Carefully with very big numbers: nodes and links might start behaving\r\n\t * quite \"nerviously\".\r\n\t *\r\n\t * @default 1\r\n\t * @param value Strength\r\n\t */\r\n\tpublic set strength(value: number) {\r\n\t\tthis.setPropertyValue(\"strength\", value);\r\n\t}\r\n\r\n\t/**\r\n\t * @return Strength\r\n\t */\r\n\tpublic get strength(): number {\r\n\t\tif (this._adapterO) {\r\n\t\t\tif (this._adapterO.isEnabled(\"strength\")) {\r\n\t\t\t\treturn this._adapterO.apply(\"strength\", this.properties.strength);\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn this.properties.strength;\r\n\t}\r\n\r\n\t/**\r\n\t * X coordinate for the slice tooltip.\r\n\t *\r\n\t * @ignore\r\n\t * @return X\r\n\t */\r\n\tpublic getTooltipX(): number {\r\n\t\tlet x = this.getPropertyValue(\"tooltipX\");\r\n\t\tif (!(x instanceof Percent)) {\r\n\t\t\tx = percent(50);\r\n\t\t}\r\n\t\tif (x instanceof Percent) {\r\n\t\t\tlet source = this.source;\r\n\t\t\tlet target = this.target;\r\n\t\t\tif (source && target) {\r\n\t\t\t\tlet x1 = source.pixelX;\r\n\t\t\t\tlet x2 = target.pixelX;\r\n\t\t\t\treturn x1 + (x2 - x1) * x.value;\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn 0;\r\n\t}\r\n\r\n\t/**\r\n\t * Y coordinate for the slice tooltip.\r\n\t *\r\n\t * @ignore\r\n\t * @return Y\r\n\t */\r\n\tpublic getTooltipY(): number {\r\n\t\tlet y = this.getPropertyValue(\"tooltipY\");\r\n\t\tif (!(y instanceof Percent)) {\r\n\t\t\ty = percent(50);\r\n\t\t}\r\n\t\tif (y instanceof Percent) {\r\n\t\t\tlet source = this.source;\r\n\t\t\tlet target = this.target;\r\n\t\t\tif (source && target) {\r\n\t\t\t\tlet y1 = source.pixelY;\r\n\t\t\t\tlet y2 = target.pixelY;\r\n\t\t\t\treturn y1 + (y2 - y1) * y.value;\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn 0;\r\n\t}\r\n}\r\n\r\n/**\r\n * Register class in system, so that it can be instantiated using its name from\r\n * anywhere.\r\n *\r\n * @ignore\r\n */\r\nregistry.registeredClasses[\"ForceDirectedLink\"] = ForceDirectedLink;\r\n\n\n\n// WEBPACK FOOTER //\n// ../../../../../src/.internal/plugins/forceDirected/ForceDirectedLink.ts","/**\r\n * Module that defines everything related to building ForceDirectedNodes.\r\n * \r\n * It is a container which has ForceDirectedNode element which is a RoundedRectangle.\r\n */\r\n\r\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\r\nimport { Container, IContainerProperties, IContainerAdapters, IContainerEvents } from \"../../core/Container\";\r\nimport { registry } from \"../../core/Registry\";\r\nimport { Circle } from \"../../core/elements/Circle\";\r\nimport { Label } from \"../../core/elements/Label\";\r\nimport { ForceDirectedSeriesDataItem } from \"./ForceDirectedSeries\";\r\nimport { ForceDirectedLink } from \"./ForceDirectedLink\";\r\nimport { InterfaceColorSet } from \"../../core/utils/InterfaceColorSet\";\r\nimport * as $type from \"../../core/utils/Type\";\r\nimport { Dictionary, DictionaryDisposer } from \"../../core/utils/Dictionary\";\r\n\r\n/**\r\n * ============================================================================\r\n * REQUISITES\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Defines properties for [[ForceDirectedNode]].\r\n */\r\nexport interface IForceDirectedNodeProperties extends IContainerProperties {\r\n\r\n\t/**\r\n\t * If set to `true` (default) toggling a node on will automatically expand\r\n\t * all nodes across the whole tree (all levels) of its descendants.\r\n\t *\r\n\t * Setting to `false` will only expand immediate children (one level).\r\n\t */\r\n\texpandAll?: boolean;\r\n\r\n\t/**\r\n\t * Padding of the nodes, in pixels.\r\n\t */\r\n\tpaddingRadius?: number;\r\n}\r\n\r\n/**\r\n * Defines events for [[ForceDirectedNode]].\r\n */\r\nexport interface IForceDirectedNodeEvents extends IContainerEvents { }\r\n\r\n/**\r\n * Defines adapters for [[ForceDirectedNode]].\r\n *\r\n * @see {@link Adapter}\r\n */\r\nexport interface IForceDirectedNodeAdapters extends IContainerAdapters, IForceDirectedNodeProperties { }\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Class used to creates [[ForceDirectedNode]] elements (circles).\r\n *\r\n * @see {@link IForceDirectedNodeEvents} for a list of available events\r\n * @see {@link IForceDirectedNodeAdapters} for a list of available Adapters\r\n * @since 4.3.8\r\n * @important\r\n */\r\nexport class ForceDirectedNode extends Container {\r\n\r\n\t/**\r\n\t * Defines available properties.\r\n\t */\r\n\tpublic _properties!: IForceDirectedNodeProperties;\r\n\r\n\t/**\r\n\t * Defines available adapters.\r\n\t */\r\n\tpublic _adapter!: IForceDirectedNodeAdapters;\r\n\r\n\t/**\r\n\t * Defines available events.\r\n\t */\r\n\tpublic _events!: IForceDirectedNodeEvents;\r\n\r\n\t/**\r\n\t * A node's [[Circle]] element.\r\n\t */\r\n\tpublic circle: Circle;\r\n\r\n\t/**\r\n\t * A [[Circle]] element for node's outline. This outline is used on nodes\r\n\t * that have children.\r\n\t */\r\n\tpublic outerCircle: Circle;\r\n\r\n\t/**\r\n\t * Related data item.\r\n\t */\r\n\tpublic _dataItem: ForceDirectedSeriesDataItem;\r\n\r\n\t/**\r\n\t * Node's [[Label]] element.\r\n\t */\r\n\tpublic label: Label;\r\n\r\n\t/**\r\n\t * A list of other [[ForceDirectedNode]] elements this node is linked with\r\n\t * using `linkWith`.\r\n\t *\r\n\t * @since 4.4.8\r\n\t */\r\n\tpublic linksWith: Dictionary<string, ForceDirectedLink>;\r\n\r\n\t/**\r\n\t * Constructor\r\n\t */\r\n\tconstructor() {\r\n\t\tsuper();\r\n\t\tthis.className = \"ForceDirectedNode\";\r\n\r\n\t\t//this.isMeasured = true; // for correct position of the tooltip\r\n\t\tthis.applyOnClones = true;\r\n\t\tthis.togglable = true;\r\n\t\tthis.draggable = true;\r\n\t\tthis.setStateOnChildren = true;\r\n\r\n\t\tthis.isActive = false;\r\n\t\tthis.expandAll = true;\r\n\t\tthis.paddingRadius = 0;\r\n\r\n\t\tthis.linksWith = new Dictionary<string, ForceDirectedLink>()\r\n\t\tthis._disposers.push(new DictionaryDisposer(this.linksWith));\r\n\r\n\t\tthis.events.on(\"dragstart\", () => {\r\n\t\t\tif (this.dataItem.component) {\r\n\t\t\t\tthis.dataItem.component.nodeDragStarted();\r\n\t\t\t}\r\n\t\t}, this, false);\r\n\r\n\t\tthis.events.on(\"drag\", () => {\r\n\t\t\tthis.updateSimulation();\r\n\t\t}, this, false);\r\n\r\n\t\tlet outerCircle = this.createChild(Circle);\r\n\t\touterCircle.shouldClone = false;\r\n\t\touterCircle.strokeWidth = 2;\r\n\r\n\t\tlet bgColor = new InterfaceColorSet().getFor(\"background\");\r\n\t\touterCircle.fill = bgColor;\r\n\t\tthis.outerCircle = outerCircle;\r\n\r\n\t\tlet hoverState = outerCircle.states.create(\"hover\");\r\n\t\thoverState.properties.scale = 1.1;\r\n\r\n\t\tlet outerActiveState = outerCircle.states.create(\"active\");\r\n\t\touterActiveState.properties.scale = 1.1;\r\n\t\touterActiveState.properties.visible = true;\r\n\r\n\t\tlet activeHoverState = outerCircle.states.create(\"hoverActive\");\r\n\t\tactiveHoverState.properties.scale = 1;\r\n\r\n\t\tlet circle = this.createChild(Circle);\r\n\r\n\t\tlet activeState = circle.states.create(\"active\");\r\n\t\tactiveState.properties.visible = true;\r\n\r\n\t\tcircle.shouldClone = false;\r\n\t\tcircle.interactionsEnabled = false;\r\n\t\tcircle.hiddenState.properties.radius = 0.01;\r\n\t\tcircle.events.on(\"validated\", this.updateSimulation, this, false)\r\n\t\tcircle.hiddenState.properties.visible = true;\r\n\r\n\r\n\t\tthis.circle = circle;\r\n\r\n\t\tthis.addDisposer(circle.events.on(\"validated\", this.updateLabelSize, this, false));\r\n\r\n\t\tthis._disposers.push(this.circle);\r\n\r\n\t\tlet label = this.createChild(Label);\r\n\t\tlabel.shouldClone = false;\r\n\t\tlabel.horizontalCenter = \"middle\";\r\n\t\tlabel.verticalCenter = \"middle\";\r\n\t\tlabel.fill = bgColor;\r\n\t\tlabel.strokeOpacity = 0;\r\n\t\tlabel.interactionsEnabled = false;\r\n\t\tlabel.textAlign = \"middle\";\r\n\t\tlabel.textValign = \"middle\";\r\n\t\tthis.label = label;\r\n\r\n\t\tthis.adapter.add(\"tooltipY\", (y, target) => {\r\n\t\t\treturn -target.circle.pixelRadius;\r\n\t\t})\r\n\t}\r\n\r\n\t/**\r\n\t * @ignore\r\n\t */\r\n\tprotected updateLabelSize() {\r\n\t\tif (this.label.text) {\r\n\t\t\tlet circle = this.circle;\r\n\t\t\tlet radius = circle.pixelRadius;\r\n\r\n\t\t\tlet ds = circle.defaultState;\r\n\t\t\tlet dsRadius = ds.properties.radius\r\n\t\t\tif ($type.isNumber(dsRadius)) {\r\n\t\t\t\tradius = dsRadius;\r\n\t\t\t}\r\n\r\n\t\t\tthis.label.width = 2 * radius;\r\n\t\t\tthis.label.height = 2 * radius;\r\n\t\t}\r\n\t}\r\n\r\n\r\n\t/**\r\n\t * Copies all parameters from another [[ForceDirectedNode]].\r\n\t *\r\n\t * @param source Source ForceDirectedNode\r\n\t */\r\n\tpublic copyFrom(source: this) {\r\n\t\tsuper.copyFrom(source);\r\n\t\tif (this.circle) {\r\n\t\t\tthis.circle.copyFrom(source.circle);\r\n\t\t}\r\n\t\tif (this.label) {\r\n\t\t\tthis.label.copyFrom(source.label);\r\n\t\t}\r\n\t\tif (this.outerCircle) {\r\n\t\t\tthis.outerCircle.copyFrom(source.outerCircle);\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Sets node as \"active\" (expanded).\r\n\t * \r\n\t * @ignore\r\n\t * @param value Active or not?\r\n\t */\r\n\tpublic setActive(value: boolean) {\r\n\t\tsuper.setActive(value);\r\n\r\n\t\tlet dataItem = this.dataItem;\r\n\r\n\t\tif (dataItem) {\r\n\r\n\t\t\tlet children = dataItem.children;\r\n\t\t\tlet component = dataItem.component;\r\n\t\t\tif (!component.dataItemsInvalid) {\r\n\t\t\t\tif (value && children && !dataItem.childrenInited) {\r\n\t\t\t\t\tcomponent.initNode(dataItem);\r\n\t\t\t\t\tcomponent.updateNodeList();\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (value) {\r\n\t\t\t\t\tif (children) {\r\n\t\t\t\t\t\tchildren.each((child) => {\r\n\t\t\t\t\t\t\tchild.node.show();\r\n\t\t\t\t\t\t\tchild.node.interactionsEnabled = true;\r\n\t\t\t\t\t\t\tif (child.parentLink) {\r\n\t\t\t\t\t\t\t\tchild.parentLink.show();\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\tif (this.expandAll) {\r\n\t\t\t\t\t\t\t\tchild.node.isActive = true;\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\telse {\r\n\t\t\t\t\t\t\t\tchild.node.isActive = false;\r\n\t\t\t\t\t\t\t\t//child.node.hide(0)\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t})\r\n\t\t\t\t\t}\r\n\t\t\t\t\tdataItem.dispatchVisibility(true);\r\n\t\t\t\t}\r\n\t\t\t\telse {\r\n\t\t\t\t\tif (children) {\r\n\t\t\t\t\t\tchildren.each((child) => {\r\n\t\t\t\t\t\t\tif (child.parentLink) {\r\n\t\t\t\t\t\t\t\tchild.parentLink.hide();\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\tchild.node.isActive = false;\r\n\t\t\t\t\t\t\tchild.node.interactionsEnabled = false;\r\n\r\n\t\t\t\t\t\t\tchild.node.hide();\r\n\t\t\t\t\t\t})\r\n\t\t\t\t\t}\r\n\t\t\t\t\tdataItem.dispatchVisibility(false);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tthis.updateSimulation();\r\n\t}\r\n\r\n\t/**\r\n\t * @ignore\r\n\t * @todo description\r\n\t */\r\n\tprotected updateSimulation() {\r\n\t\tlet dataItem = this.dataItem;\r\n\t\tif (dataItem && dataItem.component) {\r\n\t\t\tdataItem.component.restartSimulation();\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * If set to `true` (default) toggling a node on will automatically expand\r\n\t * all nodes across the whole tree (all levels) of its descendants.\r\n\t *\r\n\t * Setting to `false` will only expand immediate children (one level).\r\n\t * \r\n\t * @default true\r\n\t * @since 4.4.8\r\n\t * @param value Expand all?\r\n\t */\r\n\tpublic set expandAll(value: boolean) {\r\n\t\tthis.setPropertyValue(\"expandAll\", value);\r\n\t}\r\n\r\n\t/**\r\n\t * @return Expand all?\r\n\t */\r\n\tpublic get expandAll(): boolean {\r\n\t\treturn this.getPropertyValue(\"expandAll\");\r\n\t}\r\n\r\n\t/**\r\n\t * Creates a new link between two nodes.\r\n\t *\r\n\t * Use this method to dynamically add links without requiring to revalidate\r\n\t * whole of the data.\r\n\t * \r\n\t * @since 4.4.8\r\n\t * @param node Target node\r\n\t * @param strength Link strength\r\n\t * @return New link\r\n\t */\r\n\tpublic linkWith(node: ForceDirectedNode, strength?: number): ForceDirectedLink {\r\n\t\tlet link = this.linksWith.getKey(node.uid);\r\n\t\tif (!link) {\r\n\t\t\tlink = node.linksWith.getKey(this.uid);\r\n\t\t}\r\n\r\n\t\tif (!link) {\r\n\t\t\tlet dataItem = this.dataItem;\r\n\t\t\tlet component = dataItem.component;\r\n\t\t\tlink = component.links.create();\r\n\t\t\tlink.parent = component;\r\n\t\t\tlink.zIndex = -1;\r\n\t\t\tlink.source = this;\r\n\t\t\tlink.target = node;\r\n\t\t\tlink.stroke = dataItem.node.fill;\r\n\r\n\t\t\tlink.dataItem = node.dataItem;\r\n\r\n\t\t\tif ($type.isNumber(strength)) {\r\n\t\t\t\tlink.strength = strength;\r\n\t\t\t}\r\n\r\n\t\t\tlet nodeIndex = component.nodes.indexOf(dataItem.node);\r\n\t\t\tlet childIndex = component.nodes.indexOf(node);\r\n\r\n\t\t\tcomponent.forceLinks.push({ source: nodeIndex, target: childIndex });\r\n\t\t\tcomponent.updateNodeList();\r\n\r\n\t\t\tdataItem.childLinks.push(link);\r\n\r\n\t\t\tthis.linksWith.setKey(node.uid, link);\r\n\t\t}\r\n\t\treturn link;\r\n\t}\r\n\r\n\t/**\r\n\t * Removes a link between two nodes.\r\n\t * \r\n\t * @since 4.4.8\r\n\t * @param node Target node\r\n\t */\r\n\tpublic unlinkWith(node: ForceDirectedNode) {\r\n\t\tthis.linksWith.removeKey(node.uid);\r\n\t}\r\n\r\n\t/**\r\n\t * Padding of the nodes, in pixels.\r\n\t * \r\n\t * @since 4.6.7\r\n\t * @default 0\r\n\t * @param value padding radius\r\n\t */\r\n\tpublic set paddingRadius(value: number) {\r\n\t\tthis.setPropertyValue(\"paddingRadius\", value);\r\n\t}\r\n\r\n\t/** \r\n\t * @return Padding radius\r\n\t */\r\n\tpublic get paddingRadius(): number {\r\n\t\treturn this.getPropertyValue(\"paddingRadius\");\r\n\t}\r\n}\r\n\r\n/**\r\n * Register class in system, so that it can be instantiated using its name from\r\n * anywhere.\r\n *\r\n * @ignore\r\n */\r\nregistry.registeredClasses[\"ForceDirectedNode\"] = ForceDirectedNode;\n\n\n// WEBPACK FOOTER //\n// ../../../../../src/.internal/plugins/forceDirected/ForceDirectedNode.ts","/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\nimport { Series, SeriesDataItem, ISeriesDataFields, ISeriesProperties, ISeriesAdapters, ISeriesEvents } from \"../../charts/series/Series\";\r\nimport { ForceDirectedTree, ForceDirectedTreeDataItem } from \"./ForceDirectedTree\";\r\nimport { registry } from \"../../core/Registry\";\r\nimport { ListTemplate, ListDisposer, List } from \"../../core/utils/List\";\r\nimport { ForceDirectedNode } from \"./ForceDirectedNode\";\r\nimport { Disposer } from \"../../core/utils/Disposer\";\r\nimport { ForceDirectedLink } from \"./ForceDirectedLink\";\r\nimport { ColorSet } from \"../../core/utils/ColorSet\";\r\nimport * as d3force from \"d3-force\";\r\nimport * as $math from \"../../core/utils/Math\";\r\nimport * as $type from \"../../core/utils/Type\";\r\nimport * as $utils from \"../../core/utils/Utils\";\r\nimport * as $array from \"../../core/utils/Array\";\r\nimport { Percent, percent } from \"../../core/utils/Percent\";\r\nimport { Color } from \"../../core/utils/Color\";\r\nimport { LinearGradient } from \"../../core/rendering/fills/LinearGradient\";\r\nimport { RadialGradient } from \"../../core/rendering/fills/RadialGradient\";\r\nimport { Pattern } from \"../../core/rendering/fills/Pattern\";\r\nimport { MouseCursorStyle } from \"../../core/interaction/Mouse\";\r\nimport { OrderedListTemplate } from \"../../core/utils/SortedList\";\r\nimport { Container } from \"../../core/Container\";\r\nimport { LegendDataItem } from \"../../charts/Legend\";\r\nimport { RoundedRectangle } from \"../../core/elements/RoundedRectangle\";\r\nimport { Animation } from \"../../core/utils/Animation\";\r\nimport { AMEvent } from \"../../core/utils/EventDispatcher\";\r\nimport { IDataItemEvents } from \"../../core/DataItem\";\r\n/**\r\n * ============================================================================\r\n * DATA ITEM\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Defines a [[DataItem]] for [[ForceDirectedSeries]].\r\n *\r\n * @see {@link DataItem}\r\n * @since 4.3.8\r\n */\r\nexport class ForceDirectedSeriesDataItem extends SeriesDataItem {\r\n\r\n\t/**\r\n\t * Defines a type of [[Component]] this data item is used for.\r\n\t */\r\n\tpublic _component!: ForceDirectedSeries;\r\n\r\n\t/**\r\n\t * A reference to a component of a data item.\r\n\t */\r\n\tpublic component: ForceDirectedSeries;\r\n\r\n\t/**\r\n\t * A type of node used for this series.\r\n\t */\r\n\tpublic _node: ForceDirectedNode;\r\n\r\n\t/**\r\n\t * A list of [[ForceDirectedLink]] elements of links to node's children.\r\n\t *\r\n\t * This list does not include a link to node's parent, which is available\r\n\t * through `parentLink`.\r\n\t */\r\n\tpublic childLinks: List<ForceDirectedLink>;\r\n\r\n\t/**\r\n\t * A [[ForceDirectedLink]] to node's parent.\r\n\t */\r\n\tpublic parentLink: ForceDirectedLink;\r\n\r\n\t/**\r\n\t * A Legend's data item.\r\n\t */\r\n\tprotected _legendDataItem: LegendDataItem;\r\n\r\n\t/**\r\n\t * Have all children already been initialized?\r\n\t */\r\n\tpublic childrenInited: boolean = false;\r\n\r\n\t/**\r\n\t * Constructor\r\n\t */\r\n\tconstructor() {\r\n\t\tsuper();\r\n\t\tthis.className = \"ForceDirectedSeriesDataItem\";\r\n\r\n\t\tthis.hasChildren.children = true;\r\n\r\n\t\tthis.childLinks = new List<ForceDirectedLink>();\r\n\r\n\t\tthis.applyTheme();\r\n\t}\r\n\r\n\t/**\r\n\t * Shows the Data Item and related visual elements.\r\n\t *\r\n\t * @param duration Animation duration (ms)\r\n\t * @param delay Delay animation (ms)\r\n\t * @param fields A list of fields to set values of\r\n\t */\r\n\tpublic show(duration?: number, delay?: number, fields?: string[]): $type.Optional<Animation> {\r\n\t\tthis._visible = true;\r\n\r\n\t\tif (this.node) {\r\n\t\t\tthis.node.isActive = true;\r\n\t\t}\r\n\t\treturn;\r\n\t}\r\n\r\n\t/**\r\n\t * @ignore\r\n\t */\r\n\tpublic dispatchVisibility(visible: boolean) {\r\n\t\tif (this.events.isEnabled(\"visibilitychanged\")) {\r\n\t\t\tconst event: AMEvent<this, IDataItemEvents>[\"visibilitychanged\"] = {\r\n\t\t\t\ttype: \"visibilitychanged\",\r\n\t\t\t\ttarget: this,\r\n\t\t\t\tvisible: visible\r\n\t\t\t};\r\n\r\n\t\t\tthis.events.dispatchImmediately(\"visibilitychanged\", event);\r\n\t\t}\r\n\t}\r\n\r\n\r\n\t/**\r\n\t * Hides the Data Item and related visual elements.\r\n\t *\r\n\t * @param duration Animation duration (ms)\r\n\t * @param delay Delay animation (ms)\r\n\t * @param toValue A value to set to `fields` when hiding\r\n\t * @param fields A list of data fields to set value to `toValue`\r\n\t */\r\n\tpublic hide(duration?: number, delay?: number, toValue?: number, fields?: string[]): $type.Optional<Animation> {\r\n\t\tthis._visible = false;\r\n\r\n\t\tif (this.events.isEnabled(\"visibilitychanged\")) {\r\n\t\t\tconst event: AMEvent<this, IDataItemEvents>[\"visibilitychanged\"] = {\r\n\t\t\t\ttype: \"visibilitychanged\",\r\n\t\t\t\ttarget: this,\r\n\t\t\t\tvisible: false\r\n\t\t\t};\r\n\r\n\t\t\tthis.events.dispatchImmediately(\"visibilitychanged\", event);\r\n\t\t}\r\n\r\n\t\tif (this.node) {\r\n\t\t\tthis.node.isActive = false;\r\n\t\t}\r\n\t\treturn;\r\n\t}\r\n\r\n\t/**\r\n\t * Numeric value of the item.\r\n\t *\r\n\t * @param value Value\r\n\t */\r\n\tpublic set value(value: number) {\r\n\t\tthis.setValue(\"value\", value);\r\n\t}\r\n\r\n\t/**\r\n\t * @return Value\r\n\t */\r\n\tpublic get value(): number {\r\n\r\n\t\tlet value = this.values.value.value;\r\n\r\n\t\tif (!$type.isNumber(value)) {\r\n\t\t\tif (this.children) {\r\n\t\t\t\tvalue = 0;\r\n\t\t\t\tthis.children.each((child) => {\r\n\t\t\t\t\tvalue += child.value;\r\n\t\t\t\t})\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn value;\r\n\t}\r\n\r\n\t/**\r\n\t * An element, related to this data item. (node)\r\n\t *\r\n\t * @readonly\r\n\t * @return node element\r\n\t */\r\n\tpublic get node(): ForceDirectedNode {\r\n\t\tif (!this._node) {\r\n\r\n\t\t\tlet component = this.component;\r\n\r\n\t\t\tlet node = component.nodes.create();\r\n\t\t\tnode.draggable = true;\r\n\t\t\tthis._node = node;\r\n\r\n\t\t\tthis._disposers.push(node);\r\n\r\n\t\t\tthis._disposers.push(new Disposer(() => {\r\n\t\t\t\tcomponent.nodes.removeValue(node);\r\n\t\t\t}));\r\n\r\n\t\t\tthis.addSprite(node);\r\n\t\t\tnode.visible = this.visible;\r\n\t\t\tnode.hiddenState.properties.visible = true;\r\n\r\n\t\t\t// Apply accessibility\r\n\t\t\tif (component.itemsFocusable()) {\r\n\t\t\t\tthis.component.role = \"menu\";\r\n\t\t\t\tnode.role = \"menuitem\";\r\n\t\t\t\tnode.focusable = true;\r\n\t\t\t}\r\n\t\t\telse {\r\n\t\t\t\tthis.component.role = \"list\";\r\n\t\t\t\tnode.role = \"listitem\";\r\n\t\t\t\tnode.focusable = false;\r\n\t\t\t}\r\n\r\n\t\t\t// Apply screen reader label\r\n\t\t\tif (node.focusable) {\r\n\t\t\t\tnode.events.once(\"focus\", (ev) => {\r\n\t\t\t\t\tnode.readerTitle = component.populateString(component.itemReaderText, this);\r\n\t\t\t\t}, undefined, false);\r\n\t\t\t\tnode.events.once(\"blur\", (ev) => {\r\n\t\t\t\t\tnode.readerTitle = \"\";\r\n\t\t\t\t}, undefined, false);\r\n\t\t\t}\r\n\t\t\tif (node.hoverable) {\r\n\t\t\t\tnode.events.once(\"over\", (ev) => {\r\n\t\t\t\t\tnode.readerTitle = component.populateString(component.itemReaderText, this);\r\n\t\t\t\t}, undefined, false);\r\n\t\t\t\tnode.events.once(\"out\", (ev) => {\r\n\t\t\t\t\tnode.readerTitle = \"\";\r\n\t\t\t\t}, undefined, false);\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn this._node;\r\n\t}\r\n\r\n\t/**\r\n\t * Depth level in the series hierarchy.\r\n\t *\r\n\t * The top-level item will have level set at 0. Its children will have\r\n\t * level 1, and so on.\r\n\t *\r\n\t * @readonly\r\n\t * @return Level\r\n\t */\r\n\tpublic get level(): number {\r\n\t\tif (!this.parent) {\r\n\t\t\treturn 0;\r\n\t\t}\r\n\t\telse {\r\n\t\t\treturn this.parent.level + 1;\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Item's color.\r\n\t *\r\n\t * If not set, will use parent's color, or, if that is not set either,\r\n\t * automatically assigned color from chart's color set. (`chart.colors`)\r\n\t *\r\n\t * @param value : Color | LinearGradient | RadialGradient | Pattern\r\n\t */\r\n\tpublic set color(value: Color | LinearGradient | RadialGradient | Pattern) {\r\n\t\tthis.setProperty(\"color\", value);\r\n\t}\r\n\r\n\t/**\r\n\t * @return Color\r\n\t */\r\n\tpublic get color(): Color | LinearGradient | RadialGradient | Pattern {\r\n\t\tlet color = this.properties.color;\r\n\r\n\t\tif (color == undefined) {\r\n\t\t\tif (this.parent) {\r\n\t\t\t\tcolor = this.parent.color;\r\n\t\t\t}\r\n\t\t}\r\n\t\tif (color == undefined) {\r\n\t\t\tif (this.component) {\r\n\t\t\t\tcolor = this.component.colors.getIndex(this.component.colors.step * this.index);\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn color;\r\n\t}\r\n\r\n\t/**\r\n\t * An array of id's of other nodes outside of the child/parent tree to link\r\n\t * with.\r\n\t * \r\n\t * @param value Link list\r\n\t */\r\n\tpublic set linkWith(value: string[]) {\r\n\t\tthis.setProperty(\"linkWith\", value);\r\n\t}\r\n\r\n\t/**\r\n\t * @return Link list\r\n\t */\r\n\tpublic get linkWith(): string[] {\r\n\t\treturn this.properties.linkWith;\r\n\t}\r\n\r\n\t/**\r\n\t * Should dataItem (node) be hidden in legend?\r\n\t *\r\n\t * @param value Visible in legend?\r\n\t */\r\n\tpublic set hiddenInLegend(value: boolean) {\r\n\t\tthis.setProperty(\"hiddenInLegend\", value);\r\n\t}\r\n\r\n\t/**\r\n\t * @return Hidden in legend?\r\n\t */\r\n\tpublic get hiddenInLegend(): boolean {\r\n\t\treturn this.properties.hiddenInLegend;\r\n\t}\r\n\r\n\t/**\r\n\t * Indicates whether node should start off as collapsed.\r\n\t *\r\n\t * This can be used to specify whether node should start off as collapsed\r\n\t * via data.\r\n\t *\r\n\t * To toggle actual node, use its `isActive` property instead.\r\n\t * \r\n\t * @param value Collapsed?\r\n\t */\r\n\tpublic set collapsed(value: boolean) {\r\n\t\tthis.setProperty(\"collapsed\", value);\r\n\t\tthis.node.isActive = !value;\r\n\t}\r\n\r\n\t/**\r\n\t * @return Collapsed?\r\n\t */\r\n\tpublic get collapsed(): boolean {\r\n\t\treturn this.properties.collapsed;\r\n\t}\r\n\r\n\t/**\r\n\t * Is this node fixed (immovable)?\r\n\t *\r\n\t * @since 4.6.2\r\n\t * @param value Fixed?\r\n\t */\r\n\tpublic set fixed(value: boolean) {\r\n\t\tthis.setProperty(\"fixed\", value);\r\n\t}\r\n\r\n\t/**\r\n\t * @return Fixed?\r\n\t */\r\n\tpublic get fixed(): boolean {\r\n\t\treturn this.properties.fixed;\r\n\t}\r\n\r\n\t/**\r\n\t * A list of item's sub-children.\r\n\t *\r\n\t * @param children Item's children\r\n\t */\r\n\tpublic set children(children: OrderedListTemplate<ForceDirectedSeriesDataItem>) {\r\n\t\tthis.setProperty(\"children\", children);\r\n\t}\r\n\r\n\t/**\r\n\t * @return Item's children\r\n\t */\r\n\tpublic get children(): OrderedListTemplate<ForceDirectedSeriesDataItem> {\r\n\t\treturn this.properties.children;\r\n\t}\r\n\r\n\t/**\r\n\t * Creates a marker used in the legend for this slice.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @param marker Marker container\r\n\t */\r\n\tpublic createLegendMarker(marker: Container) {\r\n\t\tthis.component.createLegendMarker(marker, this);\r\n\t\tif (!this.node.isActive) {\r\n\t\t\tthis.hide();\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * A legend's data item, that corresponds to this data item.\r\n\t *\r\n\t * @param value Legend data item\r\n\t */\r\n\tpublic set legendDataItem(value: LegendDataItem) {\r\n\t\tthis._legendDataItem = value;\r\n\t\tif (value.label) {\r\n\t\t\tvalue.label.dataItem = this;\r\n\t\t}\r\n\t\tif (value.valueLabel) {\r\n\t\t\tvalue.valueLabel.dataItem = this;\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * @return Legend data item\r\n\t */\r\n\tpublic get legendDataItem(): LegendDataItem {\r\n\t\treturn this._legendDataItem;\r\n\t}\r\n}\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * REQUISITES\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Defines data fields for [[ForceDirectedSeries]].\r\n *\r\n * @since 4.3.8\r\n */\r\nexport interface IForceDirectedSeriesDataFields extends ISeriesDataFields {\r\n\r\n\t/**\r\n\t * Name of the field in data that holds category.\r\n\t */\r\n\tcategory?: string;\r\n\r\n\t/**\r\n\t * A name of the field in data that holds item's sub-items.\r\n\t */\r\n\tchildren?: string;\r\n\r\n\t/**\r\n\t * A name of the field in data that holds item's name.\r\n\t */\r\n\tname?: string;\r\n\r\n\t/**\r\n\t * A name of the field tha holds an array of ids that node should link with\r\n\t * besides of it's own children or parent.\r\n\t */\r\n\tlinkWith?: string;\r\n\r\n\t/**\r\n\t * A name of the field in data that holds item's color.\r\n\t *\r\n\t * If not set, a new color will be automatically assigned to each item as\r\n\t * defined by theme.\r\n\t */\r\n\tcolor?: string;\r\n\r\n\t/**\r\n\t * Name of the field in data that holds boolean flag if item should be\r\n\t * hidden in legend.\r\n\t */\r\n\thiddenInLegend?: string;\r\n\r\n\t/**\r\n\t * A name of the field that holds boolean flag whether node should start\r\n\t * as collapsed. (nodes start as fully expanded by default)\r\n\t */\r\n\tcollapsed?: string;\r\n\r\n\t/**\r\n\t * name of the field that holds boolean flag indicating whether this node\r\n\t * is \"fixed\" (immobavle).\r\n\t *\r\n\t * @since 4.6.2\r\n\t */\r\n\tfixed?: string;\r\n}\r\n\r\n/**\r\n * Defines properties for [[ForceDirectedSeries]].\r\n *\r\n * @since 4.3.8\r\n */\r\nexport interface IForceDirectedSeriesProperties extends ISeriesProperties {\r\n\r\n\t/**\r\n\t * Smallest possible radius in pixels of the node circle.\r\n\t * \r\n\t * @default 5\r\n\t */\r\n\tminRadius?: number | Percent;\r\n\r\n\t/**\r\n\t * Biggest possible radius in pixels of the node circle.\r\n\t * \r\n\t * @default 70\r\n\t */\r\n\tmaxRadius?: number | Percent;\r\n\r\n\t/**\r\n\t * A color set to be used for coloring nodes.\r\n\t *\r\n\t * Each new top level will be assigned a new color from this list.\r\n\t */\r\n\tcolors?: ColorSet;\r\n\r\n\t/**\r\n\t * Number of levels to display initially.\r\n\t */\r\n\tmaxLevels?: number;\r\n\r\n\t/**\r\n\t * A relative strength with which nodes push or attract each other.\r\n\t */\r\n\tmanyBodyStrength?: number;\r\n\r\n\t/**\r\n\t * A relative strength with which nodes are pushed away or attracted to\r\n\t * center of the chart.\r\n\t */\r\n\tcenterStrength?: number;\r\n\r\n\t/**\r\n\t * Relative attraction strength between the nodes connected with `linkWith`.\r\n\t *\r\n\t * @since 4.4.8\r\n\t */\r\n\tlinkWithStrength?: number;\r\n}\r\n\r\n/**\r\n * Defines events for [[ForceDirectedSeries]].\r\n *\r\n * @since 4.3.8\r\n */\r\nexport interface IForceDirectedSeriesEvents extends ISeriesEvents { }\r\n\r\n/**\r\n * Defines adapters for [[ForceDirectedSeries]].\r\n *\r\n * @see {@link Adapter}\r\n * @since 4.3.8\r\n */\r\nexport interface IForceDirectedSeriesAdapters extends ISeriesAdapters, IForceDirectedSeriesProperties { }\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Defines [[Series]] for a [[ForceDirectedTree]] chart.\r\n *\r\n * @see {@link IForceDirectedSeriesEvents} for a list of available Events\r\n * @see {@link IForceDirectedSeriesAdapters} for a list of available Adapters\r\n * @see {@link https://www.amcharts.com/docs/v4/chart-types/ForceDirectedTree/} For more information\r\n * @todo Example\r\n * @since 4.3.8\r\n * @important\r\n */\r\nexport class ForceDirectedSeries extends Series {\r\n\r\n\t/**\r\n\t * @ignore\r\n\t */\r\n\tpublic _node: ForceDirectedNode;\r\n\r\n\t/**\r\n\t * @ignore\r\n\t */\r\n\tprotected _nodes: ListTemplate<this[\"_node\"]>;\r\n\r\n\t/**\r\n\t * @ignore\r\n\t */\r\n\tpublic _link: ForceDirectedLink;\r\n\r\n\t/**\r\n\t * @ignore\r\n\t */\r\n\tprotected _links: ListTemplate<this[\"_link\"]>;\r\n\r\n\t/**\r\n\t * Defines the type of data fields used for the series.\r\n\t */\r\n\tpublic _dataFields: IForceDirectedSeriesDataFields;\r\n\r\n\t/**\r\n\t * Defines available properties.\r\n\t */\r\n\tpublic _properties!: IForceDirectedSeriesProperties;\r\n\r\n\t/**\r\n\t * Defines available adapters.\r\n\t */\r\n\tpublic _adapter!: IForceDirectedSeriesAdapters;\r\n\r\n\t/**\r\n\t * Defines available events.\r\n\t */\r\n\tpublic _events!: IForceDirectedSeriesEvents;\r\n\r\n\t/**\r\n\t * Defines the type of data item.\r\n\t */\r\n\tpublic _dataItem: ForceDirectedSeriesDataItem;\r\n\r\n\t/**\r\n\t * A chart series belongs to.\r\n\t */\r\n\tpublic _chart: ForceDirectedTree;\r\n\r\n\t/**\r\n\t * Parent data item of a series.\r\n\t */\r\n\tpublic parentDataItem: ForceDirectedTreeDataItem;\r\n\r\n\t/**\r\n\t * A reference to the `d3.Simulation` instance for fine-grained configuration\r\n\t * of node gravitational dynamics.\r\n\t *\r\n\t * @see {@link https://github.com/d3/d3-force#simulation} For more info\r\n\t */\r\n\tpublic d3forceSimulation: d3force.Simulation<{}, d3force.SimulationLinkDatum<d3force.SimulationNodeDatum>>;\r\n\r\n\t/**\r\n\t * @ignore\r\n\t */\r\n\tprotected _maxValue: number;\r\n\r\n\t/**\r\n\t * @ignore\r\n\t */\r\n\tpublic forceLinks: d3force.SimulationLinkDatum<d3force.SimulationNodeDatum>[];\r\n\r\n\t/**\r\n\t * @ignore\r\n\t */\r\n\tprotected _linkForce: d3force.ForceLink<d3force.SimulationNodeDatum, d3force.SimulationLinkDatum<d3force.SimulationNodeDatum>>;\r\n\r\n\t/**\r\n\t * @ignore\r\n\t */\r\n\tprotected _collisionForce: d3force.ForceCollide<d3force.SimulationNodeDatum>;\r\n\r\n\t/**\r\n\t * Constructor\r\n\t */\r\n\tconstructor() {\r\n\t\tsuper();\r\n\t\tthis.className = \"ForceDirectedSeries\";\r\n\r\n\t\tthis.d3forceSimulation = d3force.forceSimulation();\r\n\r\n\t\tthis.maxRadius = percent(8);\r\n\t\tthis.minRadius = percent(1);\r\n\r\n\t\tthis.width = percent(100);\r\n\t\tthis.height = percent(100);\r\n\r\n\t\tthis.colors = new ColorSet();\r\n\t\tthis.colors.step = 2;\r\n\r\n\t\tthis.width = percent(100);\r\n\t\tthis.height = percent(100);\r\n\r\n\t\tthis.manyBodyStrength = -15;\r\n\t\tthis.centerStrength = 0.8;\r\n\r\n\t\tthis.events.on(\"maxsizechanged\", () => {\r\n\t\t\tthis.updateRadiuses(this.dataItems);\r\n\t\t\tthis.updateLinksAndNodes();\r\n\r\n\t\t\tthis.dataItems.each((dataItem) => {\r\n\t\t\t\tthis.handleFixed(dataItem);\t\t\t\t\r\n\t\t\t})\r\n\r\n\t\t\tlet d3forceSimulation = this.d3forceSimulation;\r\n\r\n\t\t\tlet w = $math.max(50, this.innerWidth);\r\n\t\t\tlet h = $math.max(50, this.innerHeight);\r\n\r\n\t\t\tif (d3forceSimulation) {\r\n\t\t\t\td3forceSimulation.force(\"x\", d3force.forceX().x(w / 2).strength(this.centerStrength * 100 / w));\r\n\t\t\t\td3forceSimulation.force(\"y\", d3force.forceY().y(h / 2).strength(this.centerStrength * 100 / h));\r\n\t\t\t\tif (d3forceSimulation.alpha() < 0.4) {\r\n\t\t\t\t\td3forceSimulation.alpha(0.4);\r\n\t\t\t\t\td3forceSimulation.restart();\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t})\r\n\r\n\t\tthis.applyTheme();\r\n\t}\r\n\r\n\t/**\r\n\t * Returns maximum value from all supplied data items.\r\n\t * \r\n\t * @ignore\r\n\t * @param dataItems List of data items\r\n\t * @param max Default max\r\n\t * @return Max\r\n\t */\r\n\tprotected getMaxValue(dataItems: OrderedListTemplate<ForceDirectedSeriesDataItem>, max: number): number {\r\n\t\tdataItems.each((dataItem) => {\r\n\t\t\tif (dataItem.value > max) {\r\n\t\t\t\tmax = dataItem.value;\r\n\t\t\t}\r\n\r\n\t\t\tif (dataItem.children) {\r\n\t\t\t\tlet cmax = this.getMaxValue(dataItem.children, max);\r\n\t\t\t\tif (cmax > max) {\r\n\t\t\t\t\tmax = cmax;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t})\r\n\t\treturn max;\r\n\t}\r\n\r\n\t/**\r\n\t * Validates (processes) data items.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t */\r\n\tpublic validateDataItems(): void {\r\n\r\n\t\tif (this.chart.__disabled) {\r\n\t\t\tsuper.validateDataItems();\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tthis._dataDisposers.push(new ListDisposer(this.links));\r\n\r\n\t\tthis._maxValue = this.getMaxValue(this.dataItems, 0);\r\n\r\n\t\tthis.forceLinks = [];\r\n\r\n\t\tthis.colors.reset();\r\n\r\n\t\tlet index = 0;\r\n\r\n\t\tlet radius = Math.min(this.innerHeight / 3, this.innerWidth / 3);\r\n\r\n\t\tif (this.dataItems.length <= 1) {\r\n\t\t\tradius = 0;\r\n\t\t}\r\n\r\n\t\tthis.dataItems.each((dataItem) => {\r\n\r\n\t\t\tlet angle = index / this.dataItems.length * 360;\r\n\r\n\t\t\tlet node = dataItem.node;\r\n\r\n\t\t\tlet xField = node.propertyFields.x;\r\n\t\t\tlet yField = node.propertyFields.y;\r\n\r\n\t\t\tif (xField && $type.hasValue((<any>dataItem.dataContext)[xField])) {\r\n\t\t\t\tnode.x = (<any>dataItem.dataContext)[xField];\r\n\t\t\t}\r\n\t\t\telse {\r\n\t\t\t\tnode.x = this.innerWidth / 2 + radius * $math.cos(angle);\r\n\t\t\t}\r\n\t\t\tif (yField && $type.hasValue((<any>dataItem.dataContext)[yField])) {\r\n\t\t\t\tnode.y = (<any>dataItem.dataContext)[yField];\r\n\t\t\t}\r\n\t\t\telse {\r\n\t\t\t\tnode.y = this.innerHeight / 2 + radius * $math.sin(angle);\r\n\t\t\t}\r\n\r\n\t\t\tdataItem.node.fill = dataItem.color;\r\n\t\t\tdataItem.node.stroke = dataItem.color;\r\n\r\n\t\t\tindex++;\r\n\r\n\t\t\tthis.initNode(dataItem);\r\n\t\t})\r\n\r\n\t\tif (this.dataFields.linkWith) {\r\n\t\t\tthis.dataItems.each((dataItem) => {\r\n\t\t\t\tthis.processLinkWith(dataItem);\r\n\t\t\t})\r\n\t\t}\r\n\r\n\t\tlet d3forceSimulation = this.d3forceSimulation;\r\n\r\n\t\td3forceSimulation.on(\"tick\", () => {\r\n\t\t\tthis.updateLinksAndNodes();\r\n\t\t});\r\n\r\n\t\t// helps to avoid initial scatter\r\n\t\tfor (let i = 0; i < 10; i++) {\r\n\t\t\td3forceSimulation.tick();\r\n\t\t}\r\n\t\td3forceSimulation.alphaDecay(1 - Math.pow(0.001, 1 / 600));\r\n\r\n\t\tthis.chart.feedLegend();\r\n\r\n\t\tsuper.validateDataItems();\r\n\t}\r\n\r\n\tprotected handleFixed(dataItem: this[\"_dataItem\"]) {\r\n\t\tlet node = dataItem.node;\r\n\r\n\t\tlet xField = node.propertyFields.x;\r\n\t\tlet yField = node.propertyFields.y;\r\n\r\n\t\tif (xField && $type.hasValue((<any>dataItem.dataContext)[xField])) {\r\n\t\t\tnode.x = (<any>dataItem.dataContext)[xField];\r\n\t\t}\r\n\r\n\t\tif (yField && $type.hasValue((<any>dataItem.dataContext)[yField])) {\r\n\t\t\tnode.y = (<any>dataItem.dataContext)[yField];\r\n\t\t}\r\n\r\n\t\tif (dataItem.fixed) {\r\n\r\n\t\t\tif (node.x instanceof Percent) {\r\n\t\t\t\t(<any>node).fx = $utils.relativeToValue(node.x, this.innerWidth);\r\n\t\t\t}\r\n\t\t\telse {\r\n\t\t\t\t(<any>node).fx = node.x;\r\n\t\t\t}\r\n\r\n\t\t\tif (node.y instanceof Percent) {\r\n\t\t\t\t(<any>node).fy = $utils.relativeToValue(node.y, this.innerHeight);\r\n\t\t\t}\r\n\t\t\telse {\r\n\t\t\t\t(<any>node).fy = node.y;\r\n\t\t\t}\r\n\r\n\t\t\tnode.draggable = false;\r\n\r\n\t\t\tnode.validate(); // for links to redraw\r\n\t\t}\r\n\t\telse {\r\n\t\t\t(<any>node).fx = undefined;\r\n\t\t\t(<any>node).fy = undefined;\r\n\t\t\tnode.draggable = true;\r\n\t\t}\r\n\r\n\t\tif(dataItem && dataItem.children){\r\n\t\t\tdataItem.children.each((di)=>{\r\n\t\t\t\tthis.handleFixed(di)\r\n\t\t\t})\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * @ignore\r\n\t * @todo description\r\n\t */\r\n\tpublic updateNodeList() {\r\n\t\tlet d3forceSimulation = this.d3forceSimulation;\r\n\t\td3forceSimulation.nodes(this.nodes.values);\r\n\t\tthis._linkForce = d3force.forceLink(this.forceLinks);\r\n\t\td3forceSimulation.force(\"link\", this._linkForce);\r\n\t\tthis._collisionForce = d3force.forceCollide();\r\n\t\td3forceSimulation.force(\"collision\", this._collisionForce);\r\n\r\n\t\tlet w = $math.max(50, this.innerWidth);\r\n\t\tlet h = $math.max(50, this.innerHeight);\r\n\r\n\t\td3forceSimulation.force(\"x\", d3force.forceX().x(w / 2).strength(this.centerStrength * 100 / w));\r\n\t\td3forceSimulation.force(\"y\", d3force.forceY().y(h / 2).strength(this.centerStrength * 100 / h));\r\n\t}\r\n\r\n\t/**\r\n\t * @ignore\r\n\t * @todo description\r\n\t */\r\n\tpublic updateLinksAndNodes() {\r\n\t\tif (this._linkForce) {\r\n\t\t\tthis._linkForce.distance((linkDatum) => {\r\n\t\t\t\treturn this.getDistance(linkDatum)\r\n\t\t\t});\r\n\t\t\tthis._linkForce.strength((linkDatum) => {\r\n\t\t\t\treturn this.getStrength(linkDatum)\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\tif (this._collisionForce) {\r\n\t\t\tthis._collisionForce.radius(function(node) {\r\n\t\t\t\tif (node instanceof ForceDirectedNode) {\r\n\t\t\t\t\tlet radius = node.circle.pixelRadius;\r\n\t\t\t\t\tif (!node.outerCircle.__disabled && !node.outerCircle.disabled && node.outerCircle.visible) {\r\n\t\t\t\t\t\tradius = (radius + 3) * node.outerCircle.scale;\r\n\t\t\t\t\t}\r\n\t\t\t\t\treturn radius + node.paddingRadius;\r\n\t\t\t\t}\r\n\t\t\t\treturn 1;\r\n\t\t\t})\r\n\t\t}\r\n\r\n\t\tthis.d3forceSimulation.force(\"manybody\", d3force.forceManyBody().strength((node) => {\r\n\t\t\tif (node instanceof ForceDirectedNode) {\r\n\t\t\t\treturn node.circle.pixelRadius * this.manyBodyStrength;\r\n\t\t\t}\r\n\t\t\treturn this.manyBodyStrength;\r\n\t\t}));\r\n\t}\r\n\r\n\t/**\r\n\t * @ignore\r\n\t * @todo description\r\n\t */\r\n\tprotected getDistance(linkDatum: d3force.SimulationLinkDatum<d3force.SimulationNodeDatum>) {\r\n\t\tlet source: ForceDirectedNode = <ForceDirectedNode>linkDatum.source;\r\n\t\tlet target: ForceDirectedNode = <ForceDirectedNode>linkDatum.target;\r\n\r\n\t\tlet distance = 0;\r\n\t\tif (target.dataItem && source.dataItem) {\r\n\r\n\r\n\t\t\tlet link = source.linksWith.getKey(target.uid);\r\n\r\n\t\t\tif (link) {\r\n\t\t\t\tdistance = link.distance;\r\n\t\t\t}\r\n\r\n\t\t\tif (!source.isActive) {\r\n\t\t\t\tdistance = 1;\r\n\t\t\t}\r\n\r\n\t\t\tif(target.isHidden){\r\n\t\t\t\treturn 0;\r\n\t\t\t}\r\n\r\n\t\t\treturn (distance * (source.circle.pixelRadius + target.circle.pixelRadius));\r\n\t\t}\r\n\r\n\t\treturn distance;\r\n\t}\r\n\r\n\t/**\r\n\t * @ignore\r\n\t * @todo description\r\n\t */\r\n\tprotected getStrength(linkDatum: d3force.SimulationLinkDatum<d3force.SimulationNodeDatum>) {\r\n\t\tlet source: ForceDirectedNode = <ForceDirectedNode>linkDatum.source;\r\n\t\tlet target: ForceDirectedNode = <ForceDirectedNode>linkDatum.target;\r\n\r\n\t\tlet strength = 0;\r\n\r\n\t\tlet link = source.linksWith.getKey(target.uid);\r\n\t\tif (link) {\r\n\t\t\tstrength = link.strength;\r\n\t\t}\r\n\r\n\t\tif(target.isHidden){\r\n\t\t\treturn 0;\r\n\t\t}\r\n\r\n\t\treturn strength;\r\n\t}\r\n\r\n\t/**\r\n\t * Handler for drag end event.\r\n\t * \r\n\t * @ignore\r\n\t */\r\n\tpublic nodeDragEnded(): void {\r\n\t\tthis.d3forceSimulation.alphaTarget(0);\r\n\t}\r\n\t/**\r\n\t * Handler for drag start event.\r\n\t * \r\n\t * @ignore\r\n\t */\r\n\tpublic nodeDragStarted(): void {\r\n\t\tthis.d3forceSimulation.alpha(0.1);\r\n\t\tthis.d3forceSimulation.restart();\r\n\t}\r\n\r\n\t/**\r\n\t * Resets positions of whole tree.\r\n\t * \r\n\t * @ignore\r\n\t */\r\n\tpublic restartSimulation(): void {\r\n\t\tif (this.d3forceSimulation.alpha() <= 0.3) {\r\n\t\t\tthis.d3forceSimulation.alpha(0.3);\r\n\t\t\tthis.d3forceSimulation.restart();\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * @ignore\r\n\t */\r\n\tprotected updateRadiuses(dataItems: OrderedListTemplate<ForceDirectedSeriesDataItem>) {\r\n\t\tdataItems.each((dataItem) => {\r\n\t\t\tthis.updateRadius(dataItem);\r\n\t\t\tif (dataItem.childrenInited) {\r\n\t\t\t\tthis.updateRadiuses(dataItem.children);\r\n\t\t\t}\r\n\t\t})\r\n\t}\r\n\r\n\t/**\r\n\t * @ignore\r\n\t */\r\n\tprotected updateRadius(dataItem: ForceDirectedSeriesDataItem) {\r\n\t\tlet node = dataItem.node;\r\n\t\tlet minSide = (this.innerWidth + this.innerHeight) / 2;\r\n\t\tlet minRadius = $utils.relativeToValue(this.minRadius, minSide)\r\n\t\tlet maxRadius = $utils.relativeToValue(this.maxRadius, minSide)\r\n\r\n\t\tlet radius = minRadius + dataItem.value / this._maxValue * (maxRadius - minRadius);\r\n\r\n\t\tif (!$type.isNumber(radius)) {\r\n\t\t\tradius = minRadius;\r\n\t\t}\r\n\r\n\t\t//if(!node.circle.isHidden){\r\n\t\tnode.circle.radius = radius;\r\n\t\t//}\r\n\t\tnode.outerCircle.radius = radius + 3;\r\n\r\n\t\tnode.circle.states.getKey(\"active\").properties.radius = radius;\r\n\t\tnode.circle.defaultState.properties.radius = radius;\r\n\t}\r\n\r\n\t/**\r\n\t * Initializes node.\r\n\t * \r\n\t * @ignore\r\n\t */\r\n\tpublic initNode(dataItem: ForceDirectedSeriesDataItem): void {\r\n\r\n\t\tlet node = dataItem.node;\r\n\t\tnode.parent = this;\r\n\t\tthis.updateRadius(dataItem);\r\n\r\n\t\t//let nodeIndex = this.nodes.indexOf(dataItem.node);\r\n\r\n\t\tif (!dataItem.children || dataItem.children.length == 0) {\r\n\t\t\tnode.outerCircle.disabled = true;\r\n\t\t\tnode.circle.interactionsEnabled = true;\r\n\t\t\tnode.cursorOverStyle = MouseCursorStyle.default;\r\n\t\t}\r\n\t\telse {\r\n\t\t\tnode.cursorOverStyle = MouseCursorStyle.pointer;\r\n\t\t}\r\n\r\n\r\n\t\tif (this.dataItemsInvalid && (dataItem.level >= this.maxLevels - 1 || dataItem.collapsed)) {\r\n\t\t\tnode.isActive = false;\r\n\t\t\tthis.updateNodeList();\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tif (!node.isActive) {\r\n\t\t\tnode.hide(0);\r\n\t\t}\r\n\r\n\t\tthis.handleFixed(dataItem);\r\n\r\n\t\tif (dataItem.children) {\r\n\t\t\tlet index = 0;\r\n\t\t\tdataItem.childrenInited = true;\r\n\r\n\t\t\tif (this.dataItems.length == 1 && dataItem.level == 0) {\r\n\t\t\t\tthis.colors.next();\r\n\t\t\t}\r\n\r\n\t\t\tdataItem.children.each((child) => {\r\n\t\t\t\t/*\r\n\t\t\t\tlet link = this.links.create();\r\n\t\t\t\tlink.parent = this;\r\n\t\t\t\tlink.zIndex = -1;\r\n\t\t\t\tdataItem.childLinks.push(link);\r\n\t\t\t\tlink.source = dataItem.node;\r\n\t\t\t\tlet childIndex = this.nodes.indexOf(child.node);\r\n\t\t\t\tlink.target = child.node;\r\n\t\t\t\tchild.parentLink = link;\r\n\r\n\t\t\t\tthis._forceLinks.push({ source: nodeIndex, target: childIndex });\r\n\t\t\t\t*/\r\n\r\n\t\t\t\tlet link = node.linkWith(child.node);\r\n\t\t\t\tchild.parentLink = link;\r\n\r\n\t\t\t\tlet radius = 2 * node.circle.pixelRadius + child.node.circle.pixelRadius;\r\n\r\n\t\t\t\tlet angle = index / dataItem.children.length * 360;\r\n\r\n\t\t\t\tchild.node.x = node.pixelX + radius * $math.cos(angle);\r\n\t\t\t\tchild.node.y = node.pixelY + radius * $math.sin(angle);\r\n\r\n\t\t\t\tchild.node.circle.radius = 0;\r\n\r\n\t\t\t\tlet color: Color | LinearGradient | RadialGradient | Pattern;\r\n\r\n\t\t\t\tlet diColor = child.properties.color;\r\n\t\t\t\tif ($type.hasValue(diColor)) {\r\n\t\t\t\t\tcolor = diColor;\r\n\t\t\t\t}\r\n\t\t\t\telse {\r\n\t\t\t\t\tif (this.dataItems.length == 1 && dataItem.level == 0) {\r\n\t\t\t\t\t\tcolor = this.colors.next();\r\n\t\t\t\t\t}\r\n\t\t\t\t\telse {\r\n\t\t\t\t\t\tcolor = dataItem.color;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\tchild.color = color;\r\n\t\t\t\tchild.node.fill = color;\r\n\t\t\t\tchild.node.stroke = color;\r\n\t\t\t\tchild.parentLink.stroke = color;\r\n\r\n\t\t\t\tthis.initNode(child);\r\n\r\n\t\t\t\tindex++;\r\n\t\t\t})\r\n\t\t}\r\n\t\tnode.isActive = true;\r\n\t\tnode.show();\r\n\t\tthis.updateNodeList();\r\n\t}\r\n\r\n\t/**\r\n\t * @ignore\r\n\t * @todo description\r\n\t */\r\n\tprotected processLinkWith(dataItem: ForceDirectedSeriesDataItem) {\r\n\r\n\t\tif (dataItem.linkWith) {\r\n\t\t\t$array.each(dataItem.linkWith, (id, index) => {\r\n\t\t\t\tlet dataItemToConnect = this.getDataItemById(this.dataItems, id);\r\n\r\n\t\t\t\tif (dataItemToConnect) {\r\n\t\t\t\t\tdataItem.node.linkWith(dataItemToConnect.node, this.linkWithStrength);\r\n\t\t\t\t}\r\n\t\t\t})\r\n\t\t}\r\n\r\n\t\tif (dataItem.children) {\r\n\t\t\tdataItem.children.each((child) => {\r\n\t\t\t\tthis.processLinkWith(child);\r\n\t\t\t})\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Returns a [[ForceDirectedSeriesDataItem]] related to node by specific id.\r\n\t *\r\n\t * @param dataItems List of data items to search in\r\n\t * @param id Id to search for\r\n\t * @return Data item\r\n\t */\r\n\tpublic getDataItemById(dataItems: OrderedListTemplate<ForceDirectedSeriesDataItem>, id: string): ForceDirectedSeriesDataItem {\r\n\t\tfor (let i = dataItems.length - 1; i >= 0; i--) {\r\n\t\t\tlet dataItem = dataItems.getIndex(i);\r\n\r\n\t\t\tif (dataItem.id == id) {\r\n\t\t\t\treturn dataItem;\r\n\t\t\t}\r\n\t\t\tif (dataItem.children) {\r\n\t\t\t\tlet di = this.getDataItemById(dataItem.children, id);\r\n\t\t\t\tif (di) {\r\n\t\t\t\t\treturn di;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Returns a new/empty DataItem of the type appropriate for this object.\r\n\t *\r\n\t * @see {@link DataItem}\r\n\t * @return Data Item\r\n\t */\r\n\tprotected createDataItem(): this[\"_dataItem\"] {\r\n\t\treturn new ForceDirectedSeriesDataItem();\r\n\t}\r\n\r\n\t/**\r\n\t * A list of nodes in series.\r\n\t * \r\n\t * @return Node list\r\n\t */\r\n\tpublic get nodes(): ListTemplate<this[\"_node\"]> {\r\n\t\tif (!this._nodes) {\r\n\t\t\tlet node = this.createNode();\r\n\r\n\t\t\tnode.applyOnClones = true;\r\n\t\t\tthis._disposers.push(node);\r\n\r\n\t\t\tthis._nodes = new ListTemplate(node);\r\n\t\t\tthis._disposers.push(new ListDisposer(this._nodes));\r\n\t\t}\r\n\t\treturn this._nodes;\r\n\t}\r\n\r\n\t/**\r\n\t * A list of links between nodes.\r\n\t * \r\n\t * @return Link list\r\n\t */\r\n\tpublic get links(): ListTemplate<this[\"_link\"]> {\r\n\t\tif (!this._links) {\r\n\t\t\tlet link = this.createLink();\r\n\t\t\tlink.applyOnClones = true;\r\n\t\t\tthis._disposers.push(link);\r\n\r\n\t\t\tthis._links = new ListTemplate(link);\r\n\t\t\tthis._disposers.push(new ListDisposer(this._links));\r\n\t\t}\r\n\t\treturn this._links;\r\n\t}\r\n\r\n\t/**\r\n\t * Creates a new node.\r\n\t */\r\n\tprotected createNode(): this[\"_node\"] {\r\n\t\treturn new ForceDirectedNode();\r\n\t}\r\n\r\n\t/**\r\n\t * Creates a new link.\r\n\t */\r\n\tprotected createLink(): this[\"_link\"] {\r\n\t\treturn new ForceDirectedLink();\r\n\t}\r\n\r\n\t/**\r\n\t * Smallest possible radius in pixels of the node circle.\r\n\t * \r\n\t * If set in percent, it radius will be calculated from average width and\r\n\t * height of series.\r\n\t * \r\n\t * @default Percent(1)\r\n\t * @param value Minimum radius (px or percent)\r\n\t */\r\n\tpublic set minRadius(value: number | Percent) {\r\n\t\tthis.setPropertyValue(\"minRadius\", value, true);\r\n\t}\r\n\r\n\t/**\r\n\t * @return Minimum radius (px or percent)\r\n\t */\r\n\tpublic get minRadius(): number | Percent {\r\n\t\treturn this.getPropertyValue(\"minRadius\");\r\n\t}\r\n\r\n\t/**\r\n\t * Biggest possible radius in pixels of the node circle.\r\n\t * \r\n\t * If set in percent, it radius will be calculated from average width and\r\n\t * height of series.\r\n\t *\r\n\t * @default Percent(8)\r\n\t * @param value Maximum radius (px or Percent)\r\n\t */\r\n\tpublic set maxRadius(value: number | Percent) {\r\n\t\tthis.setPropertyValue(\"maxRadius\", value, true);\r\n\t}\r\n\r\n\t/**\r\n\t * @return Maximum radius (px or Percent)\r\n\t */\r\n\tpublic get maxRadius(): number | Percent {\r\n\t\treturn this.getPropertyValue(\"maxRadius\");\r\n\t}\r\n\r\n\t/**\r\n\t * A color set to be used for nodes.\r\n\t *\r\n\t * iIt works like this:\r\n\t * \r\n\t * The first level with more than one node, assigns different colors to all\r\n\t * nodes in this list. Their child nodes inherit the color.\r\n\t *\r\n\t * For example, if the top level has one node with three children, the top\r\n\t * node will get first color, the first child will get second color, etc.\r\n\t *\r\n\t * If there are two top nodes, the first top node gets first color, the\r\n\t * second top node gets the second color. Their subsequent children inherit\r\n\t * colors.\r\n\t *\r\n\t * @param value Color set\r\n\t */\r\n\tpublic set colors(value: ColorSet) {\r\n\t\tthis.setPropertyValue(\"colors\", value, true);\r\n\t}\r\n\r\n\t/**\r\n\t * @return Color set\r\n\t */\r\n\tpublic get colors(): ColorSet {\r\n\t\treturn this.getPropertyValue(\"colors\");\r\n\t}\r\n\r\n\t/**\r\n\t * Number of levels to be displayed initially.\r\n\t * \r\n\t * @param value Number of levels\r\n\t */\r\n\tpublic set maxLevels(value: number) {\r\n\t\tthis.setPropertyValue(\"maxLevels\", value, true);\r\n\t}\r\n\r\n\t/**\r\n\t * @return Number of levels\r\n\t */\r\n\tpublic get maxLevels(): number {\r\n\t\treturn this.getPropertyValue(\"maxLevels\");\r\n\t}\r\n\r\n\t/**\r\n\t * Relative strength each node pushes (or attracts) other nodes (it is\r\n\t * multiplied by `node.circle.radius` for big nodes to push stronger).\r\n\t * \r\n\t * Positive value will make nodes attract each other, while negative will\r\n\t * push away each other. The bigger the negative number is, the more \r\n\t * scattered nodes will be.\r\n\t *\r\n\t * Available value range: `-XX` to `XX`.\r\n\t * \r\n\t * @default -15\r\n\t * @param value Body push/attrack strength\r\n\t */\r\n\tpublic set manyBodyStrength(value: number) {\r\n\t\tif (this.setPropertyValue(\"manyBodyStrength\", value)) {\r\n\t\t\tthis.restartSimulation();\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * @return Body push/attrack strength\r\n\t */\r\n\tpublic get manyBodyStrength(): number {\r\n\t\treturn this.getPropertyValue(\"manyBodyStrength\");\r\n\t}\r\n\r\n\t/**\r\n\t * Relative strength each child node is pushes (or attracted) to the center\r\n\t * of the chart.\r\n\t * \r\n\t * Positive value will make nodes to be attracted to center, while negative\r\n\t * will push them away.\r\n\t *\r\n\t * Available value range: `-50` to `50`.\r\n\t * \r\n\t * @default 0.8\r\n\t * @param value Stregth of attraction to center\r\n\t */\r\n\tpublic set centerStrength(value: number) {\r\n\t\tif (this.setPropertyValue(\"centerStrength\", value)) {\r\n\t\t\tthis.restartSimulation();\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * @return Stregth of attraction to center\r\n\t */\r\n\tpublic get centerStrength(): number {\r\n\t\treturn this.getPropertyValue(\"centerStrength\");\r\n\t}\r\n\r\n\t/**\r\n\t * Relative attraction strength between the nodes connected with `linkWith`.\r\n\t *\r\n\t * @since 4.4.8\r\n\t * @param value Strength\r\n\t * @default undefined\r\n\t */\r\n\tpublic set linkWithStrength(value: number) {\r\n\t\tif (this.setPropertyValue(\"linkWithStrength\", value)) {\r\n\t\t\tthis.restartSimulation();\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * @return Strength\r\n\t */\r\n\tpublic get linkWithStrength(): number {\r\n\t\treturn this.getPropertyValue(\"linkWithStrength\");\r\n\t}\r\n\r\n\r\n\t/**\r\n\t * Binds related legend data item's visual settings to this series' visual\r\n\t * settings.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @param marker Container\r\n\t * @param dataItem Data item\r\n\t */\r\n\tpublic createLegendMarker(marker: Container, dataItem?: this[\"_dataItem\"]): void {\r\n\t\tmarker.children.each((child) => {\r\n\t\t\tlet node = dataItem.node;\r\n\r\n\t\t\tif (child instanceof RoundedRectangle) {\r\n\t\t\t\tchild.cornerRadius(40, 40, 40, 40);\r\n\t\t\t}\r\n\r\n\r\n\t\t\tchild.defaultState.properties.fill = node.fill;\r\n\t\t\tchild.defaultState.properties.stroke = node.stroke;\r\n\t\t\tchild.defaultState.properties.fillOpacity = node.fillOpacity;\r\n\t\t\tchild.defaultState.properties.strokeOpacity = node.strokeOpacity;\r\n\r\n\t\t\tchild.fill = node.fill;\r\n\t\t\tchild.stroke = node.stroke;\r\n\t\t\tchild.fillOpacity = node.fillOpacity;\r\n\t\t\tchild.strokeOpacity = node.strokeOpacity;\r\n\r\n\t\t\tif (child.fill == undefined) {\r\n\t\t\t\tchild.__disabled = true;\r\n\t\t\t}\r\n\r\n\t\t\tlet legendDataItem = <LegendDataItem>marker.dataItem;\r\n\t\t\tlegendDataItem.color = node.fill;\r\n\t\t\tlegendDataItem.colorOrig = node.fill;\r\n\r\n\t\t\tnode.events.on(\"propertychanged\", (ev) => {\r\n\t\t\t\tif (ev.property == \"fill\") {\r\n\r\n\t\t\t\t\tchild.__disabled = false;\r\n\r\n\t\t\t\t\tif (!child.isActive) {\r\n\t\t\t\t\t\tchild.fill = node.fill;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tchild.defaultState.properties.fill = node.fill;\r\n\t\t\t\t\tlegendDataItem.color = node.fill;\r\n\t\t\t\t\tlegendDataItem.colorOrig = node.fill;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (ev.property == \"stroke\") {\r\n\t\t\t\t\tif (!child.isActive) {\r\n\t\t\t\t\t\tchild.stroke = node.stroke;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tchild.defaultState.properties.stroke = node.stroke;\r\n\t\t\t\t}\r\n\t\t\t}, undefined, false)\r\n\t\t});\r\n\t}\r\n}\r\n\r\n/**\r\n * Register class in system, so that it can be instantiated using its name from\r\n * anywhere.\r\n *\r\n * @ignore\r\n */\r\nregistry.registeredClasses[\"ForceDirectedSeries\"] = ForceDirectedSeries;\r\nregistry.registeredClasses[\"ForceDirectedSeriesDataItem\"] = ForceDirectedSeriesDataItem;\n\n\n// WEBPACK FOOTER //\n// ../../../../../src/.internal/plugins/forceDirected/ForceDirectedSeries.ts","/**\r\n * ForceDirectedTree chart module.\r\n */\r\n\r\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\r\nimport { SerialChart, ISerialChartProperties, ISerialChartDataFields, ISerialChartAdapters, ISerialChartEvents, SerialChartDataItem } from \"../../charts/types/SerialChart\";\r\nimport { ForceDirectedSeries, ForceDirectedSeriesDataItem } from \"./ForceDirectedSeries\";\r\nimport { Export } from \"../../core/export/Export\";\r\nimport { registry } from \"../../core/Registry\";\r\nimport * as $type from \"../../core/utils/Type\";\r\n\r\n/**\r\n * ============================================================================\r\n * DATA ITEM\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Defines a [[DataItem]] for [[ForceDirectedTree]].\r\n *\r\n * @since 4.3.8\r\n * @see {@link DataItem}\r\n */\r\nexport class ForceDirectedTreeDataItem extends SerialChartDataItem { }\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * REQUISITES\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Defines data fields for [[ForceDirectedTree]].\r\n *\r\n * @since 4.3.8\r\n */\r\nexport interface IForceDirectedTreeDataFields extends ISerialChartDataFields { }\r\n\r\n/**\r\n * Defines properties for [[ForceDirectedTree]].\r\n *\r\n * @since 4.3.8\r\n */\r\nexport interface IForceDirectedTreeProperties extends ISerialChartProperties { }\r\n\r\n/**\r\n * Defines events for [[ForceDirectedTree]].\r\n *\r\n * @since 4.3.8\r\n */\r\nexport interface IForceDirectedTreeEvents extends ISerialChartEvents { }\r\n\r\n/**\r\n * Defines adapters for [[ForceDirectedTree]].\r\n *\r\n * @since 4.3.8\r\n * @see {@link Adapter}\r\n */\r\nexport interface IForceDirectedTreeAdapters extends ISerialChartAdapters, IForceDirectedTreeProperties { }\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * A main class for [[ForceDirectedTree]] chart type.\r\n *\r\n * @see {@link IForceDirectedTreeEvents} for a list of available Events\r\n * @see {@link IForceDirectedTreeAdapters} for a list of available Adapters\r\n * @see {@link https://www.amcharts.com/docs/v4/chart-types/force-directed/} For more information\r\n * @since 4.3.8\r\n * @important\r\n */\r\nexport class ForceDirectedTree extends SerialChart {\r\n\r\n\t/**\r\n\t * Defines the type of data item.\r\n\t */\r\n\tpublic _dataItem: ForceDirectedTreeDataItem;\r\n\r\n\t/**\r\n\t * Defines available data fields.\r\n\t */\r\n\tpublic _dataFields: IForceDirectedTreeDataFields;\r\n\r\n\t/**\r\n\t * Defines available properties.\r\n\t */\r\n\tpublic _properties!: IForceDirectedTreeProperties;\r\n\r\n\t/**\r\n\t * Defines available adapters.\r\n\t */\r\n\tpublic _adapter!: IForceDirectedTreeAdapters;\r\n\r\n\t/**\r\n\t * Defines available events.\r\n\t */\r\n\tpublic _events!: IForceDirectedTreeEvents;\r\n\r\n\t/**\r\n\t * Defines a type of series that this chart uses.\r\n\t */\r\n\tpublic _seriesType: ForceDirectedSeries;\r\n\r\n\t/**\r\n\t * Constructor\r\n\t */\r\n\tconstructor() {\r\n\r\n\t\t// Init\r\n\t\tsuper();\r\n\t\tthis.className = \"ForceDirectedTree\";\r\n\r\n\t\tthis.seriesContainer.isMeasured = true;\r\n\t\tthis.seriesContainer.layout = \"absolute\";\r\n\r\n\r\n\t\t// Apply theme\r\n\t\tthis.applyTheme();\r\n\t}\r\n\r\n\t/**\r\n\t * Creates and returns a new series of the suitable type.\r\n\t *\r\n\t * @return New series\r\n\t */\r\n\tprotected createSeries(): this[\"_seriesType\"] {\r\n\t\treturn new ForceDirectedSeries();\r\n\t}\r\n\r\n\t/**\r\n\t * Returns a new/empty DataItem of the type appropriate for this object.\r\n\t *\r\n\t * @see {@link DataItem}\r\n\t * @return Data Item\r\n\t */\r\n\tprotected createDataItem(): this[\"_dataItem\"] {\r\n\t\treturn new ForceDirectedTreeDataItem();\r\n\t}\r\n\r\n\t/**\r\n\t * Setups the legend to use the chart's data.\r\n\t *\r\n\t * @ignore\r\n\t */\r\n\tpublic feedLegend(): void {\r\n\t\tlet legend = this.legend;\r\n\t\tif (legend) {\r\n\r\n\t\t\tlet legendData: any[] = [];\r\n\r\n\t\t\tthis.series.each((series) => {\r\n\t\t\t\tif (!series.hiddenInLegend) {\r\n\r\n\t\t\t\t\tlet dataItems = series.dataItems;\r\n\t\t\t\t\tif (dataItems.length == 1) {\r\n\t\t\t\t\t\tlet children = series.dataItems.getIndex(0).children;\r\n\t\t\t\t\t\tif (children.length > 0) {\r\n\t\t\t\t\t\t\tdataItems = children;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tdataItems.each((dataItem) => {\r\n\t\t\t\t\t\tif (!dataItem.hiddenInLegend) {\r\n\t\t\t\t\t\t\tlegendData.push(<ForceDirectedSeriesDataItem>dataItem);\r\n\r\n\t\t\t\t\t\t\tlet legendSettings = series.legendSettings;\r\n\t\t\t\t\t\t\tif (legendSettings) {\r\n\t\t\t\t\t\t\t\tif (legendSettings.labelText) {\r\n\t\t\t\t\t\t\t\t\tlegend.labels.template.text = legendSettings.labelText;\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\tif (legendSettings.itemLabelText) {\r\n\t\t\t\t\t\t\t\t\tlegend.labels.template.text = legendSettings.itemLabelText;\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\tif (legendSettings.valueText) {\r\n\t\t\t\t\t\t\t\t\tlegend.valueLabels.template.text = legendSettings.valueText;\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\tif (legendSettings.itemValueText) {\r\n\t\t\t\t\t\t\t\t\tlegend.valueLabels.template.text = legendSettings.itemValueText;\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t});\r\n\t\t\t\t}\r\n\t\t\t});\r\n\r\n\t\t\tlegend.data = legendData;\r\n\t\t\tlegend.dataFields.name = \"name\";\r\n\t\t}\r\n\t}\r\n\r\n\r\n\t/**\r\n\t * Sets defaults that instantiate some objects that rely on parent, so they\r\n\t * cannot be set in constructor.\r\n\t */\r\n\tprotected applyInternalDefaults(): void {\r\n\r\n\t\tsuper.applyInternalDefaults();\r\n\r\n\t\t// Add a default screen reader title for accessibility\r\n\t\t// This will be overridden in screen reader if there are any `titles` set\r\n\t\tif (!$type.hasValue(this.readerTitle)) {\r\n\t\t\tthis.readerTitle = this.language.translate(\"Force directed tree\");\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Since this chart uses hierarchical data, we need to remove childrent\r\n\t * dataField from export of non-hierarchical formats such as CSV and XSLX.\r\n\t *\r\n\t * @return Export\r\n\t */\r\n\tprotected getExporting(): Export {\r\n\t\tconst exporting = super.getExporting();\r\n\t\texporting.adapter.add(\"formatDataFields\", (info) => {\r\n\t\t\tif (info.format == \"csv\" || info.format == \"xlsx\") {\r\n\t\t\t\tthis.series.each((series) => {\r\n\t\t\t\t\tif($type.hasValue(series.dataFields.children)) {\r\n\t\t\t\t\t\tdelete info.dataFields[series.dataFields.children];\r\n\t\t\t\t\t}\r\n\t\t\t\t})\r\n\t\t\t}\r\n\t\t\treturn info;\r\n\t\t})\r\n\t\treturn exporting;\r\n\t}\r\n\r\n}\r\n\r\n/**\r\n * Register class in system, so that it can be instantiated using its name from\r\n * anywhere.\r\n *\r\n * @ignore\r\n */\r\nregistry.registeredClasses[\"ForceDirectedTree\"] = ForceDirectedTree;\r\nregistry.registeredClasses[\"ForceDirectedTreeDataItem\"] = ForceDirectedTreeDataItem;\r\n\n\n\n// WEBPACK FOOTER //\n// ../../../../../src/.internal/plugins/forceDirected/ForceDirectedTree.ts","import * as m from \"../../es2015/plugins/forceDirected\";\nwindow.am4plugins_forceDirected = m;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./plugins/forceDirected.js\n// module id = null\n// module chunks = "],"sourceRoot":""}