{"version":3,"sources":["webpack://@amcharts/amcharts5/./src/.internal/charts/percent/PercentDefaultTheme.ts","webpack://@amcharts/amcharts5/./src/.internal/charts/percent/PercentChart.ts","webpack://@amcharts/amcharts5/./src/.internal/charts/percent/PercentSeries.ts","webpack://@amcharts/amcharts5/./src/.internal/charts/pie/PieChart.ts","webpack://@amcharts/amcharts5/./src/.internal/charts/pie/PieSeries.ts","webpack://@amcharts/amcharts5/./src/.internal/charts/funnel/FunnelSlice.ts","webpack://@amcharts/amcharts5/./src/.internal/charts/funnel/FunnelSeries.ts","webpack://@amcharts/amcharts5/./src/.internal/charts/funnel/PyramidSeries.ts","webpack://@amcharts/amcharts5/./src/.internal/charts/funnel/PictorialStackedSeries.ts","webpack://@amcharts/amcharts5/./src/.internal/charts/funnel/SlicedChart.ts","webpack://@amcharts/amcharts5/./tmp/webpack/percent.js"],"names":["setupDefaultRules","ic","this","_root","interfaceColors","r","rule","bind","setAll","legendLabelText","legendValueText","colors","ColorSet","width","height","radius","startAngle","endAngle","alignLabels","states","create","opacity","position","isMeasured","x","y","toggleKey","tooltipText","strokeWidth","strokeOpacity","role","shiftRadius","scale","textType","text","paddingTop","paddingBottom","populateText","location","paddingLeft","paddingRight","startLocation","endLocation","orientation","sequencedInterpolation","interactive","expandDistance","centerY","centerX","rotation","fillOpacity","valueIs","Theme","_defaultThemes","push","PercentDefaultTheme","new","_afterNew","chartContainer","children","seriesContainer","bulletsContainer","SerialChart","PercentChart","className","Container","_makeSlices","_makeLabels","_makeTicks","dataItem","slice","slicesContainer","slices","make","on","updateLegendMarker","_setDataItem","set","label","labelsContainer","labels","get","tick","ticksContainer","ticks","fields","reset","_prepareChildren","_lLabels","_rLabels","_hLabels","_valuesDirty","Infinity","_dataItems","valueWorking","Math","abs","value","percentTotal","setRaw","setPrivateRaw","duration","promises","show","_sequencedShowHide","Promise","all","hide","_updateChildren","markDirtyText","_arrange","_arrangeDown","_arrangeUp","_arrangeLeft","_arrangeRight","dataItems","_updateTick","_afterChanged","processDataItem","next","showDataItem","easing","animation","animate","key","to","waitForStop","hideDataItem","hiddenState","hideTooltip","disposeDataItem","removeValue","dispose","isHidden","hover","unhover","legendDataItem","setting","_getNextDown","sort","a","b","l","bounds","adjustedLocalBounds","labelTop","top","bottom","maxHeight","_getNextUp","labelBottom","labelLeft","left","right","maxWidth","labelRight","_updateSize","markDirty","_dataItem","_dispose","chart","series","Series","PercentSeries","w","innerWidth","h","innerHeight","innerRadius","wr","hr","innerBounds","Percent","mr","min","max","prevRadius","_maxRadius","dy","dx","isDirty","each","_markDirtyKey","index","indexOf","length","seriesRadius","seriesInnerRadius","classNames","concat","PieChart","List","Template","Slice","themeTags","template","RadialLabel","Tick","makeSlice","events","makeLabel","makeTick","labelsTemplate","markDirtyBounds","getPrivate","updateLegendValue","currentArc","color","_setDefault","middleAngle","setPrivate","labelRadius","isHiding","labelAngle","cos","sin","pl","pr","PieSeries","display","moveTo","_tlx","_tly","lineTo","_trx","_try","quadraticCurveTo","_cprx","_cpry","_brx","_bry","_blx","_bly","_cplx","_cply","locationX","locationY","tlx","trx","mlx","tw","bw","_clear","ed","_changed","Graphics","FunnelSlice","_makeLinks","_tag","Label","links","link","onPrivate","markDirtySize","horizontalLayout","verticalLayout","makeLink","_opposite","total","count","_total","_count","_fixLayout","_sizeDirty","_nextCoord","decorateSlice","isLast","nextValue","nextItem","getNextValue","i","maxSize","workingValue","bottomRatio","valueHigh","d","topWidth","bottomWidth","linkHeight","labelY","labelX","tickLocation","lcw","lch","pt","pb","p0","p1","p2","getPoint","FunnelSeries","_nextSize","undefined","sum","sliceHeight","sliceBottomWidth","pyramidHeight","pyramidWidth","linkWidth","center","sliceTopWidth","angle","atan2","c","tan","PI","square","s","sqrt","labelCoord","sliceX","sliceY","linkX","linkY","PyramidSeries","seriesMask","seriesGraphics","localBounds","mw","mh","NaN","svgPath","_updateScale","PictorialStackedSeries","layout","SlicedChart","am5percent"],"mappings":"kkBASA,2B,+CAmPA,OAnPyC,a,uGACxC,WACC,YAAMA,kBAAiB,WAEvB,IAAMC,EAAKC,KAAKC,MAAMC,gBAChBC,EAAIH,KAAKI,KAAKC,KAAKL,MAQzBG,EAAE,iBAAiBG,OAAO,CACzBC,gBAAiB,aACjBC,gBAAiB,4CACjBC,OAAQC,EAAA,MAAaV,KAAKC,MAAO,IACjCU,MAAO,KACPC,OAAQ,OASTT,EAAE,YAAYG,OAAO,CACpBO,QAAQ,QAAQ,IAChBC,YAAa,GACbC,SAAU,MAGXZ,EAAE,aAAaG,OAAO,CACrBU,aAAa,EACbF,YAAa,GACbC,SAAU,MAGXZ,EAAE,aAAac,OAAOC,OAAO,SAAU,CAAEH,UAAW,GAAII,QAAS,IAEjEhB,EAAE,QAAS,CAAC,QAAQG,OAAO,CAC1Bc,SAAU,WACVC,YAAY,EACZC,EAAG,EACHC,EAAG,EACHC,UAAW,SACXC,YAAa,wDACbC,YAAa,EACbC,cAAe,EACfC,KAAM,WAGPzB,EAAE,QAAS,CAAC,QAAQc,OAAOC,OAAO,SAAU,CAAEW,YAAa,KAC3D1B,EAAE,QAAS,CAAC,QAAQc,OAAOC,OAAO,QAAS,CAAEY,MAAO,OAEpD3B,EAAE,cAAe,CAAC,QAAQG,OAAO,CAChCyB,SAAU,UACVlB,OAAQ,GACRmB,KAAM,wDACNC,WAAY,EACZC,cAAe,EACfC,cAAc,IAGfhC,EAAE,OAAQ,CAAC,QAAQG,OAAO,CACzB8B,SAAU,IAUXjC,EAAE,eAAeG,OAAO,CACvB+B,YAAa,GACbC,aAAc,GACdL,WAAY,GACZC,cAAe,KAShB/B,EAAE,gBAAgBG,OAAO,CACxBiC,cAAe,EACfC,YAAa,EACbC,YAAa,WACbzB,aAAa,EACb0B,wBAAwB,IAGzBvC,EAAE,eAAeG,OAAO,CACvBqC,aAAa,EACbC,eAAgB,IAIjBzC,EAAE,eAAec,OAAOC,OAAO,QAAS,CAAE0B,eAAgB,MAE1DzC,EAAE,QAAS,CAAC,WAAWG,OAAO,CAC7B6B,cAAc,EACdH,KAAM,wDACNa,QAAS,OAGV1C,EAAE,QAAS,CAAC,SAAU,eAAeG,OAAO,CAC3CwC,QAAS,EACTD,QAAS,KACTE,UAAW,KAIZ5C,EAAE,QAAS,CAAC,SAAU,aAAaG,OAAO,CACzCuC,QAAS,KACTC,QAAS,IAGV3C,EAAE,OAAQ,CAAC,WAAWG,OAAO,CAC5B8B,SAAU,IAGXjC,EAAE,cAAe,CAAC,SAAU,SAASG,OAAO,CAC3C0C,YAAa,GACbrB,cAAe,EACfiB,gBAAiB,KAGlBzC,EAAE,cAAe,CAAC,SAAU,OAAQ,aAAaG,OAAO,CACvDM,OAAQ,KAGTT,EAAE,cAAe,CAAC,SAAU,OAAQ,eAAeG,OAAO,CACzDK,MAAO,KAURR,EAAE,iBAAiBG,OAAO,CACzB2C,QAAS,SAGV9C,EAAE,cAAe,CAAC,UAAW,SAASG,OAAO,CAC5C0C,YAAa,KAGd7C,EAAE,cAAe,CAAC,UAAW,OAAQ,aAAaG,OAAO,CACxDM,OAAQ,IAGTT,EAAE,cAAe,CAAC,UAAW,OAAQ,eAAeG,OAAO,CAC1DK,MAAO,IAGRR,EAAE,cAAe,CAAC,YAAYG,OAAO,CACpCqC,aAAa,EACbC,eAAgB,IAGjBzC,EAAE,cAAe,CAAC,YAAYc,OAAOC,OAAO,QAAS,CAAE0B,eAAgB,MAEvEzC,EAAE,QAAS,CAAC,YAAYG,OAAO,CAC9B6B,cAAc,EACdH,KAAM,wDACNa,QAAS,OAGV1C,EAAE,QAAS,CAAC,UAAW,eAAeG,OAAO,CAC5CwC,QAAS,EACTD,QAAS,KACTE,UAAW,KAGZ5C,EAAE,QAAS,CAAC,UAAW,aAAaG,OAAO,CAC1CuC,QAAS,KACTC,QAAS,IAGV3C,EAAE,OAAQ,CAAC,YAAYG,OAAO,CAC7B8B,SAAU,IAWXjC,EAAE,cAAe,CAAC,cAAcG,OAAO,CACtCqC,aAAa,EACblB,YAAa,0DAGdtB,EAAE,QAAS,CAAC,cAAcG,OAAO,CAChC6B,cAAc,EACdH,KAAM,wDACNa,QAAS,OAGV1C,EAAE,QAAS,CAAC,YAAa,eAAeG,OAAO,CAC9CwC,QAAS,EACTD,QAAS,KACTE,UAAW,KAGZ5C,EAAE,QAAS,CAAC,YAAa,aAAaG,OAAO,CAC5CuC,QAAS,KACTC,QAAS,IAGV3C,EAAE,cAAe,CAAC,YAAa,SAASG,OAAO,CAC9C0C,YAAa,GACbrC,MAAO,EACPC,OAAQ,IAGTT,EAAE,OAAQ,CAAC,cAAcG,OAAO,CAC/B8B,SAAU,KAIV,IAAMhC,EAAOD,EAAE,WAAY,CAAC,YAAa,eAEzCC,EAAKE,OAAO,CACX0C,YAAa,MAGd,OAAS5C,EAAM,OAAQL,EAAI,4BAI9B,EAnPA,CAAyCmD,EAAA,GCQzC,2B,+CAgBA,OAhB2C,a,+FAQ1C,WACClD,KAAKmD,eAAeC,KAAKC,EAAoBC,IAAItD,KAAKC,QAEtD,YAAMsD,UAAS,WAEfvD,KAAKwD,eAAeC,SAASL,KAAKpD,KAAK0D,iBACvC1D,KAAK0D,gBAAgBD,SAASL,KAAKpD,KAAK2D,qBAbzC,qC,gDAAkC,iBAClC,sC,gDAA0CC,EAAA,oBAA8B,CAACC,EAAaC,cAcvF,EAhBA,CAA2CF,EAAA,G,kDC6E3C,yE,OAYC,2C,gDAAkC,EAAKH,SAASL,KAAKW,EAAA,MAAc,EAAK9D,MAAO,CAAEmB,SAAU,WAAYC,YAAY,OACnH,2C,gDAAkC,EAAKoC,SAASL,KAAKW,EAAA,MAAc,EAAK9D,MAAO,CAAEmB,SAAU,WAAYC,YAAY,OACnH,0C,gDAAiC,EAAKoC,SAASL,KAAKW,EAAA,MAAc,EAAK9D,MAAO,CAAEmB,SAAU,WAAYC,YAAY,OAElH,oC,gDAAyD,KACzD,oC,gDAAyD,KACzD,oC,gDAAyD,KAOzD,kC,gDAA2D,EAAK2C,gBAgChE,kC,gDAA2D,EAAKC,gBAoBhE,iC,gDAAyD,EAAKC,e,EAkc/D,OA/gB4C,a,+FAkC3C,SAAiBC,GAAjB,WACOC,EAAQpE,KAAKqE,gBAAgBZ,SAASL,KAAKpD,KAAKsE,OAAOC,QAc7D,OAZAH,EAAMI,GAAG,QAAQ,WAChB,EAAKC,mBAAmBN,MAGzBC,EAAMI,GAAG,UAAU,WAClB,EAAKC,mBAAmBN,MAGzBC,EAAMM,aAAaP,GACnBA,EAASQ,IAAI,QAASP,GACtBpE,KAAKsE,OAAOlB,KAAKgB,GAEVA,K,+FAeR,SAAiBD,GAChB,IAAMS,EAAQ5E,KAAK6E,gBAAgBpB,SAASL,KAAKpD,KAAK8E,OAAOP,QAI7D,OAHAK,EAAMF,aAAaP,GACnBA,EAASQ,IAAI,QAASC,GACtB5E,KAAK8E,OAAO1B,KAAKwB,GACVA,K,uGAaR,SAA4BT,GAC3B,OAA6B,MAAzBA,EAASY,IAAI,Y,8FASlB,SAAgBZ,GACf,IAAMa,EAAOhF,KAAKiF,eAAexB,SAASL,KAAKpD,KAAKkF,MAAMX,QAI1D,OAHAS,EAAKN,aAAaP,GAClBA,EAASQ,IAAI,OAAQK,GACrBhF,KAAKkF,MAAM9B,KAAK4B,GACTA,K,+FAGR,WACChF,KAAKmF,OAAO/B,KAAK,WAAY,QAC7B,YAAMG,UAAS,c,kGAGhB,WACC,IAAM9C,EAAST,KAAK+E,IAAI,UACpBtE,GACHA,EAAO2E,W,sGAIT,WAOC,GANA,YAAMC,iBAAgB,WAEtBrF,KAAKsF,SAAW,GAChBtF,KAAKuF,SAAW,GAChBvF,KAAKwF,SAAW,GAEZxF,KAAKyF,aAAc,CACtB,IAAI,EAAM,EACN,EAAS,EACT,EAAY,EACZ,EAAWC,IACX,EAAQ,EACZ,OAAY1F,KAAK2F,YAAY,SAACxB,GAC7B,IAAIyB,EAAezB,EAASY,IAAI,eAAgB,GAChD,GAAOa,EACP,GAAUC,KAAKC,IAAIF,MAGpB,OAAY5F,KAAK2F,YAAY,SAACxB,GAC7B,IAAI4B,EAAQ5B,EAASY,IAAI,eAAgB,GACrCgB,GAAS,IACZ,EAAM5B,EAASY,IAAI,QAAS,IAGzBgB,EAAQ,IACX,EAAYA,GAGTA,EAAQ,IACX,EAAWA,GAGZ,IAEA,IAAIC,EAAeD,EAAQ,EAEb,GAAV,IACHC,EAAe,GAGhB7B,EAAS8B,OAAO,oBAAoC,IAAfD,MAGtChG,KAAKkG,cAAc,WAAY,GAC/BlG,KAAKkG,cAAc,YAAa,GAChClG,KAAKkG,cAAc,WAAY,GAC/BlG,KAAKkG,cAAc,eAAgB,EAAM,GACzClG,KAAKkG,cAAc,mBAAoB,O,0FAUzC,SAAkBC,G,4GAKjB,OAJIC,EAAgC,IAC3BhD,KAAK,YAAMiD,KAAI,UAACF,IAEzBC,EAAShD,KAAKpD,KAAKsG,oBAAmB,EAAMH,IAC5C,GAAMI,QAAQC,IAAIJ,I,cAAlB,S,wGASD,SAAkBD,G,4GAKjB,OAJIC,EAAgC,IAC3BhD,KAAK,YAAMqD,KAAI,UAACN,IAEzBC,EAAShD,KAAKpD,KAAKsG,oBAAmB,EAAOH,IAC7C,GAAMI,QAAQC,IAAIJ,I,cAAlB,S,mHAMD,WACC,YAAMM,gBAAe,WACjB1G,KAAKyF,cACR,OAAYzF,KAAK2F,YAAY,SAACxB,GAC7BA,EAASY,IAAI,SAAS/C,KAAK2E,mBAG7B3G,KAAK4G,c,8FAGN,sBACC5G,KAAK6G,aAAa7G,KAAKsF,UACvBtF,KAAK8G,WAAW9G,KAAKsF,UAErBtF,KAAK6G,aAAa7G,KAAKuF,UACvBvF,KAAK8G,WAAW9G,KAAKuF,UAErBvF,KAAK+G,aAAa/G,KAAKwF,UACvBxF,KAAKgH,cAAchH,KAAKwF,UAExB,OAAYxF,KAAKiH,WAAW,SAAC9C,GAC5B,EAAK+C,YAAY/C,S,mGAKnB,WACC,YAAMgD,cAAa,WACnBnH,KAAK4G,c,qGAGN,SAA0BzC,GAGzB,GAFA,YAAMiD,gBAAe,UAACjD,GAEM,MAAxBA,EAASY,IAAI,QAAiB,CACjC,IAAItE,EAAST,KAAK+E,IAAI,UAClBtE,GACH0D,EAAS8B,OAAO,OAAQxF,EAAO4G,Y,kGAYlC,SAA0BlD,EAA+CgC,G,wHA6BxE,OA5BMC,EAAW,CAAC,YAAMkB,aAAY,UAACnD,EAAUgC,IAC1C,WAAeA,KACnBA,EAAWnG,KAAK+E,IAAI,yBAA0B,IAGzCwC,EAASvH,KAAK+E,IAAI,wBAEpBgB,EAAQ5B,EAASY,IAAI,UAEnByC,EAAYrD,EAASsD,QAAQ,CAAEC,IAAK,eAAgBC,GAAI5B,EAAOI,SAAUA,EAAUoB,OAAQA,MAEhGnB,EAAShD,KAAKoE,EAAUI,gBAGnB5C,EAAOb,EAASY,IAAI,UAEzBqB,EAAShD,KAAK4B,EAAKqB,KAAKF,KAEnBvB,EAAQT,EAASY,IAAI,WAE1BqB,EAAShD,KAAKwB,EAAMyB,KAAKF,KAGpB/B,EAAQD,EAASY,IAAI,WAE1BqB,EAAShD,KAAKgB,EAAMiC,KAAKF,IAG1B,GAAMI,QAAQC,IAAIJ,I,cAAlB,S,gHAUD,SAA0BjC,EAA+CgC,G,wHA+BxE,OA9BMC,EAAW,CAAC,YAAMyB,aAAY,UAAC1D,EAAUgC,IACzC2B,EAAc9H,KAAKiB,OAAOC,OAAO,SAAU,IAE5C,WAAeiF,KACnBA,EAAW2B,EAAY/C,IAAI,yBAA0B/E,KAAK+E,IAAI,yBAA0B,KAGnFwC,EAASO,EAAY/C,IAAI,uBAAwB/E,KAAK+E,IAAI,0BAE1DyC,EAAYrD,EAASsD,QAAQ,CAAEC,IAAK,eAAgBC,GAAI,EAAGxB,SAAUA,EAAUoB,OAAQA,MAE5FnB,EAAShD,KAAKoE,EAAUI,gBAGnB5C,EAAOb,EAASY,IAAI,UAEzBqB,EAAShD,KAAK4B,EAAKyB,KAAKN,KAEnBvB,EAAQT,EAASY,IAAI,WAE1BqB,EAAShD,KAAKwB,EAAM6B,KAAKN,KAGpB/B,EAAQD,EAASY,IAAI,UACrBgD,cAEF3D,GACHgC,EAAShD,KAAKgB,EAAMqC,KAAKN,IAG1B,GAAMI,QAAQC,IAAIJ,I,cAAlB,S,mHAMD,SAAuBjC,GACtB,YAAM6D,gBAAe,UAAC7D,GACtB,IAAIS,EAAQT,EAASY,IAAI,SACrBH,IACH5E,KAAK8E,OAAOmD,YAAYrD,GACxBA,EAAMsD,WAEP,IAAIlD,EAAOb,EAASY,IAAI,QACpBC,IACHhF,KAAKkF,MAAM+C,YAAYjD,GACvBA,EAAKkD,WAEN,IAAI9D,EAAQD,EAASY,IAAI,SACrBX,IACHpE,KAAKsE,OAAO2D,YAAY7D,GACxBA,EAAM8D,c,mGAUR,SAAqB/D,GACpB,IAAMC,EAAQD,EAASY,IAAI,SACvBX,IAAUA,EAAM+D,YACnB/D,EAAMgE,W,qGAUR,SAAuBjE,GACtB,IAAMC,EAAQD,EAASY,IAAI,SACvBX,GACHA,EAAMiE,a,wGAOR,SAA0BlE,GACzB,IAAMC,EAAQD,EAASY,IAAI,SAE3B,GAAIX,EAAO,CACV,IAAMkE,EAAiBnE,EAASY,IAAI,kBACpC,GAAIuD,EAAgB,CACnB,IAAM,EAAkBA,EAAevD,IAAI,mBAC3C,OAAY,KAAgB,SAACwD,GACF,MAAtBnE,EAAMW,IAAIwD,IACb,EAAgB5D,IAAI4D,EAASnE,EAAMW,IAAIwD,Y,kGAO5C,SAAuBzD,GACtB,GAAIA,EAAQ,CAEX,IAAI,EAAO9E,KAAKwI,eAEhB1D,EAAO2D,MAAK,SAACC,EAAGC,GACf,OAAID,EAAEnH,EAAIoH,EAAEpH,EACJ,EAECmH,EAAEnH,EAAIoH,EAAEpH,GACR,EAGD,KAIT,OAAYuD,GAAQ,SAAC8D,GACpB,IAAMC,EAASD,EAAEhE,MAAMkE,sBACnBC,EAAWF,EAAOG,IAClBJ,EAAErH,EAAIwH,EAAW,IACpBH,EAAErH,EAAI,EAAOwH,GAEdH,EAAEhE,MAAMD,IAAI,IAAKiE,EAAErH,GAEnB,EAAOqH,EAAErH,EAAIsH,EAAOI,c,gGAKvB,WACC,OAAOjJ,KAAK6E,gBAAgBqE,e,kGAG7B,WACC,OAAO,K,gGAGR,SAAqBpE,GACpB,GAAIA,EAAQ,CACX,IAAI,EAAO9E,KAAKmJ,aAEhBrE,EAAO2D,MAAK,SAACC,EAAGC,GACf,OAAID,EAAEnH,EAAIoH,EAAEpH,EACJ,EAECmH,EAAEnH,EAAIoH,EAAEpH,GACR,EAGD,KAIT,OAAYuD,GAAQ,SAAC8D,GACpB,IAAMC,EAASD,EAAEhE,MAAMkE,sBACnBM,EAAcP,EAAOI,OACrBL,EAAErH,EAAI6H,EAAc,IACvBR,EAAErH,EAAI,EAAO6H,GAEdR,EAAEhE,MAAMD,IAAI,IAAKiE,EAAErH,GACnB,EAAOqH,EAAErH,EAAIsH,EAAOG,W,mGAKvB,SAAwBlE,GACvB,GAAIA,EAAQ,CAEX,IAAI,EAAO,EAEXA,EAAO2D,MAAK,SAACC,EAAGC,GACf,OAAID,EAAEnH,EAAIoH,EAAEpH,EACJ,EAECmH,EAAEnH,EAAIoH,EAAEpH,GACR,EAGD,KAIT,OAAYuD,GAAQ,SAAC8D,GACpB,IAAMC,EAASD,EAAEhE,MAAMkE,sBACnBO,EAAYR,EAAOS,KACnBV,EAAErH,EAAI8H,EAAY,IACrBT,EAAErH,EAAI,EAAO8H,GAEdT,EAAEhE,MAAMD,IAAI,IAAKiE,EAAErH,GAEnB,EAAOqH,EAAErH,EAAIsH,EAAOU,a,kGAKvB,SAAuBzE,GACtB,GAAIA,EAAQ,CACX,IAAI,EAAO9E,KAAK6E,gBAAgB2E,WAEhC1E,EAAO2D,MAAK,SAACC,EAAGC,GACf,OAAID,EAAEnH,EAAIoH,EAAEpH,EACJ,EAECmH,EAAEnH,EAAIoH,EAAEpH,GACR,EAGD,KAIT,OAAYuD,GAAQ,SAAC8D,GACpB,IAAMC,EAASD,EAAEhE,MAAMkE,sBACnBW,EAAaZ,EAAOU,MACpBX,EAAErH,EAAIkI,EAAa,IACtBb,EAAErH,EAAI,EAAOkI,GAEdb,EAAEhE,MAAMD,IAAI,IAAKiE,EAAErH,GACnB,EAAOqH,EAAErH,EAAIsH,EAAOS,Y,iGAKvB,WACC,YAAMI,YAAW,WACjB1J,KAAK2J,e,iGAGN,SAAsBC,O,8FAItB,WACC,YAAMC,SAAQ,WAEd,IAAMC,EAAQ9J,KAAK8J,MACfA,GACHA,EAAMC,OAAO9B,YAAYjI,SAzgB3B,qC,gDAAkC,kBAClC,sC,gDAA0CgK,EAAA,oBAAyB,CAACC,EAAcnG,cA6gBnF,EA/gBA,CAA4CkG,EAAA,G,mBCzB5C,yE,OASC,sC,gDAA+B,I,EA+GhC,OAxH8B,a,+FAW7B,WACC,YAAMzG,UAAS,WACfvD,KAAK0D,gBAAgBpD,OAAO,CAAEgB,EAAG,KAAKC,EAAG,U,sGAG1C,WACC,YAAM8D,iBAAgB,WAEtB,IAAM7B,EAAiBxD,KAAKwD,eACtB0G,EAAI1G,EAAe2G,aACnBC,EAAI5G,EAAe6G,cAEnBvJ,EAAad,KAAK+E,IAAI,aAAc,GACpChE,EAAWf,KAAK+E,IAAI,WAAY,GAChCuF,EAActK,KAAK+E,IAAI,eAGzB8D,EAAS,eAAmB,EAAG,EAAG/H,EAAYC,EAAU,GAEtDwJ,EAAKL,GAAKrB,EAAOU,MAAQV,EAAOS,MAChCkB,EAAKJ,GAAKvB,EAAOI,OAASJ,EAAOG,KAEnCyB,EAAc,CAAEnB,KAAM,EAAGC,MAAO,EAAGP,IAAK,EAAGC,OAAQ,GAEvD,GAAIqB,aAAuBI,EAAA,GAAS,CACnC,IAAI3E,EAAQuE,EAAYvE,MACpB4E,EAAK9E,KAAK+E,IAAIL,EAAIC,GACtBzE,EAAQF,KAAKgF,IAAIF,EAAK5E,EAAO4E,EAAK9E,KAAK+E,IAAIR,EAAGF,IAAMS,EACpDF,EAAc,eAAmB,EAAG,EAAG3J,EAAYC,EAAUgF,GAC7D/F,KAAKkG,cAAc,aAAcH,EAAQuE,EAAYvE,OAGtD8C,EAAS,cAAkB,CAACA,EAAQ4B,IAEpC,IAAMK,EAAa9K,KAAK+K,WACxB/K,KAAK+K,WAAalF,KAAK+E,IAAIL,EAAIC,GAE/B,IAAM3J,EAAS,kBAAuBb,KAAK+E,IAAI,SAAU,GAAI/E,KAAK+K,YAClE/K,KAAK0D,gBAAgBpD,OAAO,CAC3B0K,IAAKnK,GAAUgI,EAAOI,OAASJ,EAAOG,KAAO,EAAGiC,IAAKpK,GAAUgI,EAAOU,MAAQV,EAAOS,MAAQ,KAG1FtJ,KAAKkL,QAAQ,eAAiBlL,KAAKkL,QAAQ,aAAeJ,GAAc9K,KAAK+K,aAChF/K,KAAK+J,OAAOoB,MAAK,SAACpB,GACjBA,EAAOqB,cAAc,oB,4FAcxB,SAAcrB,GAEb,IAAIlJ,EAAS,kBAAuBb,KAAK+E,IAAI,SAAU,GAAI/E,KAAK+K,YAC5DT,EAAc,kBAAuBtK,KAAK+E,IAAI,cAAe,GAAIlE,GAErE,GAAIkJ,EAAQ,CACX,IAAIsB,EAAQrL,KAAK+J,OAAOuB,QAAQvB,GAC5B,EAAS/J,KAAK+J,OAAOwB,OAErBC,EAAezB,EAAOhF,IAAI,UAC9B,OAAoB,MAAhByG,EACIlB,EAAc,kBAAuBkB,EAAc3K,EAASyJ,GAG5DA,GAAezJ,EAASyJ,GAAe,GAAUe,EAAQ,GAGlE,OAAOxK,K,iGAYR,SAAmBkJ,GAClB,IAAMlJ,EAASb,KAAKa,SAChByJ,EAAc,kBAAuBtK,KAAK+E,IAAI,cAAe,GAAIlE,GAMrE,GAJIyJ,EAAc,IACjBA,EAAczJ,EAASyJ,GAGpBP,EAAQ,CACX,IAAIsB,EAAQrL,KAAK+J,OAAOuB,QAAQvB,GAC5B,EAAS/J,KAAK+J,OAAOwB,OAErBE,EAAoB1B,EAAOhF,IAAI,eACnC,OAAyB,MAArB0G,EACInB,EAAc,kBAAuBmB,EAAmB5K,EAASyJ,GAGjEA,GAAezJ,EAASyJ,GAAe,EAASe,EAGzD,OAAOf,KApHR,qC,gDAAkC,aAClC,sC,gDAA0CzG,EAAa6H,WAAWC,OAAO,CAACC,EAAS9H,cAqHpF,EAxHA,CAA8BD,G,iDCT9B,2B,+CA8MA,OA9M+B,a,iGAc9B,sBACC,OAAO,IAAIgI,EAAA,EACVC,EAAA,OAAa,KACb,WAAM,OAAAC,EAAA,OAAW,EAAK9L,MAAO,CAC5B+L,UAAW,YAAiB,EAAK1H,OAAO2H,SAASlH,IAAI,YAAa,IAAK,CAAC,MAAO,YAC7E,CAAC,EAAKT,OAAO2H,iB,iGAIlB,sBACC,OAAO,IAAIJ,EAAA,EACVC,EAAA,OAAa,KACb,WAAM,OAAAI,EAAA,OAAiB,EAAKjM,MAAO,CAClC+L,UAAW,YAAiB,EAAKlH,OAAOmH,SAASlH,IAAI,YAAa,IAAK,CAAC,MAAO,YAC7E,CAAC,EAAKD,OAAOmH,iB,gGAIlB,sBACC,OAAO,IAAIJ,EAAA,EACVC,EAAA,OAAa,KACb,WAAM,OAAAK,EAAA,OAAU,EAAKlM,MAAO,CAC3B+L,UAAW,YAAiB,EAAK9G,MAAM+G,SAASlH,IAAI,YAAa,IAAK,CAAC,MAAO,YAC5E,CAAC,EAAKG,MAAM+G,iB,qGAIjB,SAA0B9H,GAA1B,WACC,YAAMiD,gBAAe,UAACjD,GAEtB,IAAMC,EAAQpE,KAAKoM,UAAUjI,GAE7BC,EAAMI,GAAG,SAAS,WACjB,EAAK0C,YAAY/C,MAElBC,EAAMI,GAAG,eAAe,WACvB,EAAK0C,YAAY/C,MAElBC,EAAMiI,OAAO7H,GAAG,mBAAmB,WAClC,EAAK0C,YAAY/C,MAGlB,IAAMS,EAAQ5E,KAAKsM,UAAUnI,GAE7BS,EAAMyH,OAAO7H,GAAG,mBAAmB,WAClC,EAAK0C,YAAY/C,MAGlBnE,KAAKuM,SAASpI,GAEdC,EAAMiI,OAAO7H,GAAG,mBAAmB,WAClCI,EAAM+E,kB,gGAIR,WACC,OAAO3J,KAAK6E,gBAAgBqE,YAAc,K,kGAG3C,WACC,OAAQlJ,KAAK6E,gBAAgBqE,YAAc,K,sGAG5C,sBACC,YAAM7D,iBAAgB,WACtB,IAAMyE,EAAQ9J,KAAK8J,MACnB,GAAIA,EAAO,CAEV,GAAI9J,KAAKkL,QAAQ,eAAgB,CAChC,IAAIsB,EAAiBxM,KAAK8E,OAAOmH,SAC7BjM,KAAK+E,IAAI,eACZyH,EAAe7H,IAAI,WAAY,WAGO,MAAlC6H,EAAezH,IAAI,aACtByH,EAAe7H,IAAI,WAAY,YAMlC,GAAI3E,KAAKyF,cAAgBzF,KAAKkL,QAAQ,WAAalL,KAAKkL,QAAQ,gBAAkBlL,KAAKkL,QAAQ,eAAiBlL,KAAKkL,QAAQ,YAAa,CACzIlL,KAAKyM,kBACL,IAAM3L,EAAad,KAAK+E,IAAI,aAAc+E,EAAM/E,IAAI,cAAe,KAE7D,EADW/E,KAAK+E,IAAI,WAAY+E,EAAM/E,IAAI,WAAY,MACrCjE,EACnB,EAAeA,EAEb,EAASgJ,EAAMjJ,OAAOb,MAC5BA,KAAKkG,cAAc,SAAU,GAC7B,IAAI,EAAc4D,EAAMQ,YAAYtK,MAAQ8J,EAAM4C,WAAW,aAAc,GAEvE,EAAc,IACjB,EAAc,EAAS,GAGpB,EAAS,GACZ,OAAY1M,KAAK2F,YAAY,SAACxB,GAE7B,EAAKwI,kBAAkBxI,GAEvB,IAAIyI,EAAa,EAAMzI,EAASY,IAAI,qBAAuB,IACrDX,EAAQD,EAASY,IAAI,SAC3B,GAAIX,EAAO,CACVA,EAAMO,IAAI,SAAU,GACpBP,EAAMO,IAAI,cAAe,GACzBP,EAAMO,IAAI,aAAc,GAExBP,EAAMO,IAAI,MAAOiI,GAEjB,IAAMC,EAAQ1I,EAASY,IAAI,QAC3BX,EAAM0I,YAAY,OAAQD,GAC1BzI,EAAM0I,YAAY,SAAUD,GAG7B,IAAIE,EAAc,iBAAqB,EAAeH,EAAa,GAE7DhI,EAAQT,EAASY,IAAI,SAC3B,GAAIH,IACHA,EAAMoI,WAAW,SAAU,GAC3BpI,EAAMoI,WAAW,cAAe,GAChCpI,EAAMD,IAAI,aAAcoI,GAEK,WAAzBnI,EAAMG,IAAI,aAA0B,CACvC,IAAIkI,EAAc,EAASrI,EAAMG,IAAI,SAAU,GAC3CxD,EAAI,EAAS,MAAUwL,GAEvBA,EAAc,IAAMA,GAAe,KACjCnI,EAAMuD,YAAevD,EAAMsI,YAC/B,EAAK5H,SAASlC,KAAK,CAAEwB,MAAOA,EAAOrD,EAAGA,IAEvC0L,IAAgB,EAChBA,GAAe,EAAKpI,gBAAgBE,IAAI,cAAe,GACvDH,EAAMD,IAAI,UAAW,MACrBC,EAAMsB,cAAc,QAAQ,KAGvBtB,EAAMuD,YAAevD,EAAMsI,YAC/B,EAAK3H,SAASnC,KAAK,CAAEwB,MAAOA,EAAOrD,EAAGA,IAEvC0L,GAAe,EAAKpI,gBAAgBE,IAAI,eAAgB,GACxDH,EAAMD,IAAI,UAAW,GACrBC,EAAMsB,cAAc,QAAQ,IAE7BtB,EAAMD,IAAI,IAAKsI,GACfrI,EAAMD,IAAI,IAAK,EAAS,MAAUoI,IAGpC,GAAgBH,EAChB,EAAK1F,YAAY/C,W,iGAOtB,SAAsBA,GACrB,IAAMa,EAAOb,EAASY,IAAI,QACpBH,EAAQT,EAASY,IAAI,SACrBX,EAAQD,EAASY,IAAI,SACrB3C,EAAW4C,EAAKD,IAAI,WAAY,GACtC,GAAIC,GAAQJ,GAASR,EAAO,CAC3B,IAAMvD,GAAUuD,EAAMW,IAAI,cAAe,GAAKX,EAAMW,IAAI,SAAU,IAAMX,EAAMW,IAAI,QAAS,GAAK3C,EAC1F+K,EAAavI,EAAMG,IAAI,aAAc,GACrCqI,EAAM,MAAUD,GAChBE,EAAM,MAAUF,GAEhBtI,EAAkB7E,KAAK6E,gBACvByI,EAAKzI,EAAgBE,IAAI,cAAe,GACxCwI,EAAK1I,EAAgBE,IAAI,eAAgB,GAE3CzD,EAAI,EACJC,EAAI,EAKR,GAHAD,EAAIsD,EAAMtD,IACVC,EAAIqD,EAAMrD,IAEmB,YAAzBqD,EAAMG,IAAI,YAA2B,CACxC,IAAMkI,EAAcrI,EAAM/D,SAAW+D,EAAMG,IAAI,gBAAiB,GAC1D,EAAaH,EAAMG,IAAI,aAAc,GAC3CzD,EAAI2L,EAAc,MAAU,GAC5B1L,EAAI0L,EAAc,MAAU,GAG7B,IAAIhC,GAAMsC,EACN3I,EAAM8H,WAAW,UACpBzB,EAAKqC,GAGNtI,EAAKL,IAAI,SAAU,CAAC,CAAErD,EAAG8C,EAAM9C,IAAMT,EAASuM,EAAK7L,EAAG6C,EAAM7C,IAAMV,EAASwM,GAAO,CAAE/L,EAAGA,EAAI2J,EAAI1J,EAAGA,GAAK,CAAED,EAAGA,EAAGC,EAAGA,SAvMpH,qC,gDAAkC,cAClC,sC,gDAA0C0I,EAAcyB,WAAWC,OAAO,CAAC6B,EAAU1J,cAyMtF,EA9MA,CAA+BmG,GCzB/B,yE,OAMC,4C,iDAAsC,IAEtC,gC,gDAAyB,IACzB,gC,gDAAyB,IAEzB,gC,gDAAyB,IACzB,gC,gDAAyB,IAEzB,gC,gDAAyB,IACzB,gC,gDAAyB,IAEzB,gC,gDAAyB,IACzB,gC,gDAAyB,IAEzB,iC,gDAA0B,IAC1B,iC,gDAA0B,IAC1B,iC,gDAA0B,IAC1B,iC,gDAA0B,I,EAmG3B,OA1HiC,a,+FAyBhC,sBACC,YAAM1G,UAAS,WACfvD,KAAK2E,IAAI,QAAQ,SAAC8I,GACjBA,EAAQC,OAAO,EAAKC,KAAM,EAAKC,MAC/BH,EAAQI,OAAO,EAAKC,KAAM,EAAKC,MAC/BN,EAAQO,iBAAiB,EAAKC,MAAO,EAAKC,MAAO,EAAKC,KAAM,EAAKC,MACjEX,EAAQI,OAAO,EAAKQ,KAAM,EAAKC,MAC/Bb,EAAQO,iBAAiB,EAAKO,MAAO,EAAKC,MAAO,EAAKb,KAAM,EAAKC,Y,8FAInE,SAAgBa,EAAmBC,GAClC,IAmBKC,EACAC,EAKAC,EAzBD3E,EAAIlK,KAAKW,QACTyJ,EAAIpK,KAAKY,SAEPkO,EAAK9O,KAAK+E,IAAI,WAAY,GAC1BgK,EAAK/O,KAAK+E,IAAI,cAAe,GAEnC,MAA+B,YAA3B/E,KAAK+E,IAAI,eAUL,CAAEzD,GAHLuN,GANAF,GAAOG,EAAK,KAIJC,EAAK,EAEMJ,GAAOD,KAL1BE,EAAME,EAAK,IAELC,EAAK,EAIQH,GAAOF,EAELG,GAAOJ,EAAWlN,EAAG6I,EAAIsE,GAY3C,CAAEpN,EAAG4I,EAAIuE,EAAWlN,GAHvBsN,GANAF,GAAOG,EAAK,KAIJC,EAAK,EAEMJ,GAAOF,KAL1BG,EAAME,EAAK,IAELC,EAAK,EAIQH,GAAOH,EAEaI,GAAOH,M,8FAKpD,WAEC,GAAI1O,KAAKkL,QAAQ,aAAelL,KAAKkL,QAAQ,gBAAkBlL,KAAKkL,QAAQ,mBAAqBlL,KAAKkL,QAAQ,gBAAkBlL,KAAKkL,QAAQ,UAAYlL,KAAKkL,QAAQ,UAAW,CAChL,IAAMhB,EAAIlK,KAAKW,QACTyJ,EAAIpK,KAAKY,SACTkO,EAAK9O,KAAK+E,IAAI,WAAY,GAC1BgK,EAAK/O,KAAK+E,IAAI,cAAe,GACnC/E,KAAKgP,QAAS,EAEd,IAAIC,EAAKjP,KAAK+E,IAAI,iBAAkB,GAEL,YAA3B/E,KAAK+E,IAAI,gBACZ/E,KAAK2N,MAAQmB,EAAK,EAClB9O,KAAK4N,KAAO,EAEZ5N,KAAK8N,KAAOgB,EAAK,EACjB9O,KAAK+N,KAAO,EAEZ/N,KAAKmO,KAAOY,EAAK,EACjB/O,KAAKoO,KAAOhE,EAEZpK,KAAKqO,MAAQU,EAAK,EAClB/O,KAAKsO,KAAOlE,EAEZpK,KAAKiO,MAAQjO,KAAK8N,MAAQ9N,KAAKmO,KAAOnO,KAAK8N,MAAQ,EAAImB,EAAK7E,EAC5DpK,KAAKkO,MAAQlO,KAAK+N,KAAO,GAAM3D,EAE/BpK,KAAKuO,MAAQvO,KAAK2N,MAAQ3N,KAAKqO,KAAOrO,KAAK2N,MAAQ,EAAIsB,EAAK7E,EAC5DpK,KAAKwO,MAAQxO,KAAK4N,KAAO,GAAMxD,IAG/BpK,KAAK4N,MAAQkB,EAAK,EAClB9O,KAAK2N,KAAO,EAEZ3N,KAAK+N,KAAOe,EAAK,EACjB9O,KAAK8N,KAAO,EAEZ9N,KAAKoO,KAAOW,EAAK,EACjB/O,KAAKmO,KAAOjE,EAEZlK,KAAKsO,MAAQS,EAAK,EAClB/O,KAAKqO,KAAOnE,EAEZlK,KAAKkO,MAAQlO,KAAK+N,MAAQ/N,KAAKoO,KAAOpO,KAAK+N,MAAQ,EAAIkB,EAAK/E,EAC5DlK,KAAKiO,MAAQjO,KAAK8N,KAAO,GAAM5D,EAE/BlK,KAAKwO,MAAQxO,KAAK4N,MAAQ5N,KAAKsO,KAAOtO,KAAK4N,MAAQ,EAAIqB,EAAK/E,EAC5DlK,KAAKuO,MAAQvO,KAAK2N,KAAO,GAAMzD,GAGjC,YAAMgF,SAAQ,cApHf,qC,gDAAkC,gBAClC,sC,gDAA0CC,EAAA,oBAA2B,CAACC,EAAYtL,cAqHnF,EA1HA,CAAiCqL,EAAA,G,SCqDjC,yE,OAOC,gC,gDAAiB,WAwCjB,iC,gDAA0D,EAAKE,eA6B/D,kC,gDAA2B,IAC3B,kC,gDAA2B,IAC3B,sC,gDAA+B,IAE/B,qC,iDAA+B,I,EAyZhC,OAzekC,a,iGAajC,sBACC,OAAO,IAAIxD,EAAA,EACVC,EAAA,OAAa,KACb,WAAM,OAAAsD,EAAA,KAAiB,EAAKnP,MAAO,CAClC+L,UAAW,YAAiB,EAAK1H,OAAO2H,SAASlH,IAAI,YAAa,IAAK,CAAC,EAAKuK,KAAM,SAAU,QAAS,EAAKvK,IAAI,kBAC7G,CAAC,EAAKT,OAAO2H,iB,iGAIlB,sBACC,OAAO,IAAIJ,EAAA,EACVC,EAAA,OAAa,KACb,WAAM,OAAAyD,EAAA,OAAW,EAAKtP,MAAO,CAC5B+L,UAAW,YAAiB,EAAKlH,OAAOmH,SAASlH,IAAI,YAAa,IAAK,CAAC,EAAKuK,KAAM,SAAU,QAAS,EAAKvK,IAAI,kBAC7G,CAAC,EAAKD,OAAOmH,iB,gGAIlB,sBACC,OAAO,IAAIJ,EAAA,EACVC,EAAA,OAAa,KACb,WAAM,OAAAK,EAAA,OAAU,EAAKlM,MAAO,CAC3B+L,UAAW,YAAiB,EAAK9G,MAAM+G,SAASlH,IAAI,YAAa,IAAK,CAAC,EAAKuK,KAAM,SAAU,OAAQ,EAAKvK,IAAI,kBAC3G,CAAC,EAAKG,MAAM+G,iB,gGAajB,sBACC,OAAO,IAAIJ,EAAA,EACVC,EAAA,OAAa,KACb,WAAM,OAAAsD,EAAA,KAAiB,EAAKnP,MAAO,CAClC+L,UAAW,YAAiB,EAAKwD,MAAMvD,SAASlH,IAAI,YAAa,IAAK,CAAC,EAAKuK,KAAM,SAAU,OAAQ,EAAKvK,IAAI,kBAC3G,CAAC,EAAKyK,MAAMvD,iB,8FAOjB,SAAgB9H,GACf,IAAMsL,EAAOzP,KAAKqE,gBAAgBZ,SAASL,KAAKpD,KAAKwP,MAAMjL,QAI3D,OAHAkL,EAAK/K,aAAaP,GAClBA,EAASQ,IAAI,OAAQ8K,GACrBzP,KAAKwP,MAAMpM,KAAKqM,GACTA,K,+FAgBR,sBACC,YAAMlM,UAAS,WACf,IAAMc,EAAkBrE,KAAKqE,gBAC7BA,EAAgB/D,OAAO,CAAEe,YAAY,EAAMD,SAAU,WAAYT,OAAO,QAAQ,KAAMC,QAAQ,QAAQ,OACtGyD,EAAgBqL,UAAU,SAAS,WAClC,EAAKC,mBAGNtL,EAAgBqL,UAAU,UAAU,WACnC,EAAKC,mBAGyB,YAA3B3P,KAAK+E,IAAI,eACZ/E,KAAK2E,IAAI,SAAU3E,KAAKC,MAAM2P,kBAG9B5P,KAAK2E,IAAI,SAAU3E,KAAKC,MAAM4P,mB,qGAIhC,SAA0B1L,GAA1B,WACC,YAAMiD,gBAAe,UAACjD,GAEtB,IAAMC,EAAQpE,KAAKoM,UAAUjI,GAE7BC,EAAMM,aAAaP,GAEnBA,EAASQ,IAAI,QAASP,GAEtBpE,KAAK8P,SAAS3L,GACd,IAAMS,EAAQ5E,KAAKsM,UAAUnI,GAE7BS,EAAMJ,GAAG,KAAK,WACb,EAAK0C,YAAY/C,MAGlBS,EAAMJ,GAAG,KAAK,WACb,EAAK0C,YAAY/C,MAGlBnE,KAAKuM,SAASpI,GAEdC,EAAMiI,OAAO7H,GAAG,mBAAmB,WAClCI,EAAM+E,eAGPvF,EAAMiI,OAAO7H,GAAG,iBAAiB,WAChC,IAAML,EAAWC,EAAMD,SACnBA,GACH,EAAK+C,YAAY/C,S,qGAMpB,sBACCnE,KAAK+P,WAAY,EACkC,GAA/C/P,KAAKyD,SAAS6H,QAAQtL,KAAK6E,mBAC9B7E,KAAK+P,WAAY,GAGlB,IAAIC,EAAQ,EACRC,EAAQ,EAgCZ,GA9BA,OAAYjQ,KAAKiH,WAAW,SAAC9C,GAC5B,IAAM4B,EAAQ5B,EAASY,IAAI,SACvB,WAAegB,KAClBkK,IACIlK,EAAQ,EACXiK,GAASnK,KAAKC,IAAI3B,EAASY,IAAI,eAAgBgB,GAASA,GAGpD,EAAKhB,IAAI,oBAAoB,IAI5BZ,EAASgE,WAHb8H,IAOCD,GAAS,MAOdhQ,KAAKkQ,OAAS,EAAID,EAAQD,EAC1BhQ,KAAKmQ,OAASF,EAEVjQ,KAAKkL,QAAQ,gBAChBlL,KAAKoQ,aAGFpQ,KAAKkQ,OAAS,IAAMlQ,KAAKyF,cAAgBzF,KAAKqQ,YAAa,CAE9D,IAEIjG,EAFE/F,EAAkBrE,KAAKqE,gBAI5B+F,EAD8B,YAA3BpK,KAAK+E,IAAI,eACRV,EAAgBgG,cAGhBhG,EAAgB8F,aAGrBnK,KAAKsQ,WAAatQ,KAAK+E,IAAI,gBAAiB,GAAKqF,EAEjDpK,KAAKyM,kBAEL,IAAI,EAAI,EACR,OAAYzM,KAAK2F,YAAY,SAACxB,GAC7B,EAAKwI,kBAAkBxI,GAEvBA,EAASQ,IAAI,QAAS,GACtB,IAEA,IAAMP,EAAQD,EAASY,IAAI,SACrBC,EAAOb,EAASY,IAAI,QACpBH,EAAQT,EAASY,IAAI,SACrB0K,EAAOtL,EAASY,IAAI,QACpB8H,EAAQ1I,EAASY,IAAI,QAE3BX,EAAM0I,YAAY,OAAQD,GAC1BzI,EAAM0I,YAAY,SAAUD,GAC5B4C,EAAK3C,YAAY,OAAQD,GACzB4C,EAAK3C,YAAY,SAAUD,GAE3B,IAAM9G,EAAQ5B,EAASY,IAAI,SACvB,WAAegB,KACL,GAATA,GAAc,EAAKhB,IAAI,qBAC1BX,EAAM4I,WAAW,WAAW,GAC5BhI,EAAKgI,WAAW,WAAW,GAC3BpI,EAAMoI,WAAW,WAAW,KAG5B5I,EAAM4I,WAAW,WAAW,GAC5BhI,EAAKgI,WAAW,WAAW,GAC3BpI,EAAMoI,WAAW,WAAW,GAE5B,EAAKuD,cAAcpM,GAEf,EAAKqM,OAAOrM,GACfsL,EAAKzC,WAAW,WAAW,GAElB7I,EAASgE,YAClBsH,EAAKzC,WAAW,WAAW,QAMhC,YAAMtG,gBAAe,c,gGAGtB,WAEC,IAAMjE,EAAczC,KAAK+E,IAAI,eACvBF,EAAkB7E,KAAK6E,gBACvB2H,EAAiBxM,KAAK8E,OAAOmH,SAE/BjM,KAAK+E,IAAI,gBACZF,EAAgBF,IAAI,WAAY,YAChCE,EAAgBvE,OAAO,CAAEe,YAAY,IAClB,YAAfoB,GACHzC,KAAK2E,IAAI,SAAU3E,KAAKC,MAAM2P,kBAC9BpD,EAAelM,OAAO,CAAEwC,QAAS,KAAMxB,EAAG,SAG1CtB,KAAK2E,IAAI,SAAU3E,KAAKC,MAAM4P,gBAC9BrD,EAAelM,OAAO,CAAEwC,QAAS,EAAGxB,EAAG,OAIxCuD,EAAgBvE,OAAO,CAAEe,YAAY,EAAOD,SAAU,aACnC,YAAfqB,GACHoC,EAAgBvE,OAAO,CAAEgB,EAAG,OAC5BkL,EAAelM,OAAO,CAAEwC,QAAS,KAAKxB,EAAG,MAGzCuD,EAAgBvE,OAAO,CAAEiB,EAAG,OAC5BiL,EAAelM,OAAO,CAAEwC,QAAS,KAAKvB,EAAG,MAG3CvB,KAAK2P,mB,kGAGN,SAAuBxL,GACtB,IAAIkH,EAAQlH,EAASY,IAAI,SACrB0L,EAAYtM,EAASY,IAAI,eAAgB,GAC7C,GAAIsG,EAAQrL,KAAKiH,UAAUsE,OAAS,EAAG,CACtC,IAAImF,EAAW1Q,KAAKiH,UAAUoE,EAAQ,GAGtC,GAFAoF,EAAYC,EAAS3L,IAAI,eAAgB,GAErC2L,EAASvI,YAAwC,GAAzBuI,EAAS3L,IAAI,UAAiB/E,KAAK+E,IAAI,oBAClE,OAAO/E,KAAK2Q,aAAaD,GAG3B,OAAOD,K,4FAGR,SAAiBtM,GAChB,IAAIkH,EAAQlH,EAASY,IAAI,SACzB,GAAIsG,GAASrL,KAAKiH,UAAUsE,OAAS,EACpC,OAAO,EAGP,IAAK,IAAIqF,EAAIvF,EAAQ,EAAGuF,EAAI5Q,KAAKiH,UAAUsE,OAAQqF,IAClD,IAAK5Q,KAAKiH,UAAU2J,GAAGzI,WACtB,OAAO,EAIV,OAAO,K,mGAGR,SAAwBhE,GACvB,IAAM1B,EAAczC,KAAK+E,IAAI,eAEvBX,EAAQD,EAASY,IAAI,SACrBH,EAAQT,EAASY,IAAI,SACrB0K,EAAOtL,EAASY,IAAI,QAEpBV,EAAkBrE,KAAKqE,gBAEzBmF,EAAWnF,EAAgB8F,aAC3BjB,EAAY7E,EAAgBgG,cAE5BwG,EAAUrH,EACK,cAAf/G,IACHoO,EAAU3H,GAGX,IAAMuH,EAAYzQ,KAAK2Q,aAAaxM,GAC9B4B,EAAQ5B,EAASY,IAAI,QAAS,GAC9B+L,EAAejL,KAAKC,IAAI3B,EAASY,IAAI,eAAgBgB,IACrDgL,EAAc/Q,KAAK+E,IAAI,cAAe,GACtCiM,EAAYhR,KAAK0M,WAAW,YAAa,GAG3CuE,EAAI,EACK,GAATlL,EACHkL,EAAIH,EAAejL,KAAKC,IAAIC,GAGxB5B,EAASgE,aACZ8I,EAAI,MAIFjR,KAAKsQ,YAAc5K,MACtB1F,KAAKsQ,WAAa,GAGnB,IAAIY,EAAWJ,EAAeE,EAAYH,EACtCM,GAAeL,GAAgBA,EAAeL,GAAaM,GAAeC,EAAYH,EAE1FzM,EAAM9D,OAAO,CAAE4Q,SAAQ,EAAEC,YAAW,EAAE1O,YAAW,IACjDgN,EAAKnP,OAAO,CAAE4Q,SAAUC,EAAaA,aAAcL,GAAgBA,EAAeL,IAAcO,EAAYH,EAASpO,YAAW,IAEhI,IAAMF,EAAgBvC,KAAK+E,IAAI,gBAAiB,GAC1CvC,EAAcxC,KAAK+E,IAAI,cAAe,GAE5C,GAAmB,YAAftC,EAA2B,CAI9ByG,EAAYA,GAAa1G,EAAcD,IAFnC6O,EAAa3B,EAAK7O,SAAWqQ,GAIjC7M,EAAMO,IAAI,IAAK3E,KAAKsQ,YAEpB,IAAI1P,EAASiF,KAAK+E,IAAI,IAAQ/E,KAAKgF,IAAI,EAAG3B,EAAYlJ,KAAKmQ,OAASc,EAAIjR,KAAKkQ,OAASkB,IAEtFhN,EAAM9D,OAAO,CAAEM,OAAM,EAAEU,EAAGkI,EAAW,IACrC,IAAI6H,EAASrR,KAAKsQ,WAAa1P,EAAS,EACxCgE,EAAMD,IAAI,IAAK0M,GAEfrR,KAAKsQ,YAAc1P,EAASwQ,EAC5B3B,EAAKnP,OAAO,CAAEiB,EAAGvB,KAAKsQ,WAAac,EAAY9P,EAAGkI,EAAW,QAEzD,CACJ,IAAI4H,EAEJ5H,EAAWA,GAAYhH,EAAcD,IAFjC6O,EAAa3B,EAAK9O,QAAUsQ,GAIhC7M,EAAMO,IAAI,IAAK3E,KAAKsQ,YAEpB,IAAI3P,EAAQkF,KAAK+E,IAAI,IAAQ/E,KAAKgF,IAAI,EAAGrB,EAAWxJ,KAAKmQ,OAASc,EAAIjR,KAAKkQ,OAASkB,IAEpFhN,EAAM9D,OAAO,CAAEK,MAAK,EAAEY,EAAG2H,EAAY,IACrC,IAAMoI,EAAStR,KAAKsQ,WAAa3P,EAAQ,EACzCiE,EAAMD,IAAI,IAAK2M,GAEftR,KAAKsQ,YAAc3P,EAAQyQ,EAC3B3B,EAAKnP,OAAO,CAAEgB,EAAGtB,KAAKsQ,WAAac,EAAY7P,EAAG2H,EAAY,Q,kGAWhE,SAA0B/E,EAA+CgC,G,+EAExE,OADAhC,EAASY,IAAI,QAAQ0B,KAAKN,GACnB,CAAP,EAAO,YAAM0B,aAAY,UAAC1D,EAAUgC,a,kGAUrC,SAA0BhC,EAA+CgC,G,+EAExE,OADAhC,EAASY,IAAI,QAAQsB,KAAKF,GACnB,CAAP,EAAO,YAAMmB,aAAY,UAACnD,EAAUgC,a,iGAGrC,SAAsBhC,GACrB,GAAInE,KAAK+E,IAAI,eAAgB,CAC5B,IAAMC,EAAOb,EAASY,IAAI,QACpBH,EAAQT,EAASY,IAAI,SACrBX,EAAQD,EAASY,IAAI,SAE3B,GAAIC,GAAQZ,GAASQ,EAAO,CAE3B,IAAMC,EAAkB7E,KAAK6E,gBACvBR,EAAkBrE,KAAKqE,gBACzBkN,EAAevM,EAAKD,IAAI,WAAY,IAElCyM,EAAM3M,EAAgBlE,QACtB8Q,EAAM5M,EAAgBjE,SAEtB0M,EAAKzI,EAAgBE,IAAI,cAAe,GACxCwI,EAAK1I,EAAgBE,IAAI,eAAgB,GACzC2M,EAAK7M,EAAgBE,IAAI,aAAc,GACvC4M,EAAK9M,EAAgBE,IAAI,gBAAiB,GAE5C6M,EAAK,CAAEtQ,EAAG,EAAGC,EAAG,GAChBsQ,EAAK,CAAEvQ,EAAG,EAAGC,EAAG,GAChBuQ,EAAK,CAAExQ,EAAG,EAAGC,EAAG,GAEhBvB,KAAK+P,YACRwB,EAAe,EAAIA,GAGW,YAA3BvR,KAAK+E,IAAI,iBACZ6M,EAAKxN,EAAM2N,SAASR,EAAc,KAC/BjQ,GAAK8C,EAAM9C,IAAM+C,EAAgB/C,IACpCsQ,EAAGrQ,GAAK6C,EAAM7C,IAAM8C,EAAgB9C,IAEhCvB,KAAK+P,WACR8B,EAAGvQ,EAAIkQ,EACPK,EAAGtQ,EAAIqD,EAAMrD,IAEbuQ,EAAGxQ,EAAIkQ,EAAMlE,EACbwE,EAAGvQ,EAAIsQ,EAAGtQ,IAGVsQ,EAAGvQ,EAAI+C,EAAgB/C,IAAM+C,EAAgB1D,QAC7CkR,EAAGtQ,EAAIqD,EAAMrD,IAEbuQ,EAAGxQ,EAAIuQ,EAAGvQ,EAAIkQ,EAAM5M,EAAMjE,QAAU4M,EACpCuE,EAAGvQ,EAAIsQ,EAAGtQ,MAIXqQ,EAAKxN,EAAM2N,SAAS,GAAKR,IACtBjQ,GAAK8C,EAAM9C,IAAM+C,EAAgB/C,IACpCsQ,EAAGrQ,GAAK6C,EAAM7C,IAAM8C,EAAgB9C,IAEhCvB,KAAK+P,WACR8B,EAAGtQ,EAAIkQ,EACPI,EAAGvQ,EAAIsD,EAAMtD,IAEbwQ,EAAGvQ,EAAIkQ,EAAMC,EACbI,EAAGxQ,EAAIuQ,EAAGvQ,IAGVuQ,EAAGtQ,EAAI8C,EAAgB9C,IAAM8C,EAAgBzD,SAC7CiR,EAAGvQ,EAAIsD,EAAMtD,IAEbwQ,EAAGvQ,EAAIsQ,EAAGtQ,EAAIkQ,EAAM7M,EAAMhE,SAAW+Q,EACrCG,EAAGxQ,EAAIuQ,EAAGvQ,IAIZ0D,EAAKL,IAAI,SAAU,CAACiN,EAAIC,EAAIC,S,qGAQ/B,SAAuB3N,GACtB,YAAM6D,gBAAe,UAAC7D,GACtB,IAAIsL,EAAOtL,EAASY,IAAI,QACpB0K,IACHzP,KAAKwP,MAAMvH,YAAYwH,GACvBA,EAAKvH,cAjaP,qC,gDAAkC,iBAClC,sC,gDAA0C+B,EAAcyB,WAAWC,OAAO,CAACqG,EAAalO,cAmazF,EAzeA,CAAkCmG,GCnClC,yE,OACC,gC,gDAAiB,YASjB,qC,2DA8HD,OAxImC,a,sGAYlC,WACC,YAAM5E,iBAAgB,WACtBrF,KAAKiS,eAAYC,K,mGAGlB,SAAwB/N,G,YACjB1B,EAAczC,KAAK+E,IAAI,eACvBV,EAAkBrE,KAAKqE,gBAEvBD,EAAQD,EAASY,IAAI,SACrBH,EAAQT,EAASY,IAAI,SACrB0K,EAAOtL,EAASY,IAAI,QACpB9B,EAAUjD,KAAK+E,IAAI,UAAW,QAE9BoN,EAAMnS,KAAK0M,WAAW,mBAAoB,GAEhD,GAAW,GAAPyF,EAAJ,CAIA,IASIC,EACAC,EAVE9P,EAAgBvC,KAAK+E,IAAI,gBAAiB,GAC1CvC,EAAcxC,KAAK+E,IAAI,cAAe,GAEtC+J,EAAK9O,KAAK+E,IAAI,WAAY,GAC1BgK,EAAK/O,KAAK+E,IAAI,cAAe,MAE7B+L,EAAejL,KAAKC,IAAI3B,EAASY,IAAI,eAAgB,IACrDgB,EAAQ5B,EAASY,IAAI,QAAS,GAKhCuN,EAAgBjO,EAAgBgG,cAChCkI,EAAelO,EAAgB8F,aAC/BqI,EAAY/C,EAAK9O,QACjByQ,EAAa3B,EAAK7O,SAEH,cAAf6B,IACF8P,GAAD,WAAgC,CAACD,EAAeC,GAAa,IAAhD,GAAED,EAAa,KAC3BE,GAAD,WAA0B,CAACpB,EAAYoB,GAAU,IAAvC,GAAEpB,EAAU,MAGvB,IAAMqB,EAASF,EAAe,EAE1BtB,EAAI,EACK,GAATlL,EACHkL,EAAIH,EAAejL,KAAKC,IAAIC,GAGxB5B,EAASgE,aACZ8I,EAAI,MAMNqB,EAAgBA,GAAiB9P,EAAcD,IAF/C6O,GAAcH,IAEgEjR,KAAKmQ,OAASnQ,KAAKkQ,OAAS,GAE1G,IAAIgB,EAAW,kBAAuBpC,EAAIyD,GAErC,WAAevS,KAAKiS,aACxBjS,KAAKiS,UAAYf,GAGlB,IAAIC,EAAc,kBAAuBpC,EAAIwD,GACzCG,EAAgB1S,KAAKiS,UAErBU,EAAQ9M,KAAK+M,MAAMN,EAAepB,EAAWC,GAC7C0B,EAAIhN,KAAKiN,IAAIjN,KAAKkN,GAAK,EAAIJ,GAK/B,GAJS,GAALE,IACHA,EAAI,MAGU,QAAX5P,EAAmB,CACtB,IACI+P,GADe9B,EAAWC,GAAe,EAAImB,EACtBxB,EAAeqB,EAEtCc,EAAIpN,KAAKC,IAAI4M,EAAgBA,EAAgB,EAAIM,EAASH,GAK7DR,GAHDD,GAAeM,EAAgB7M,KAAKqN,KAAKD,IAAMJ,GAE7B,GACG,EAAIG,EAASZ,EAAcM,GAAiBN,EAG7CM,OAKpBL,EAAmBK,GADnBN,EAAcE,EAAgBxB,EAAeqB,GACIU,EAGlD,IAAIM,EAAanT,KAAKsQ,WAAa8B,EAAc,EAC7CgB,EAASX,EACTY,EAASrT,KAAKsQ,WAEdgD,EAAQb,EACRc,EAAQF,EAASjB,EAEF,YAAf3P,GACHmC,EAAMD,IAAI,IAAKwO,GACXvO,EAAMG,IAAI,WAAa,GAC1B/E,KAAKuF,SAASnC,KAAK,CAAEwB,MAAOA,EAAOrD,EAAG4R,IAEvC/O,EAAMO,IAAI,SAAUyN,KAGpBxN,EAAMD,IAAI,IAAKwO,GACXvO,EAAMG,IAAI,WAAa,GAC1B/E,KAAKwF,SAASpC,KAAK,CAAEwB,MAAOA,EAAOrD,EAAG4R,IAEtCC,GAAD,WAAmB,CAACC,EAAQD,GAAO,IAA5B,GAAEC,EAAM,KACdC,GAAD,WAAiB,CAACC,EAAOD,GAAM,IAAzB,GAAEC,EAAK,KAEbnP,EAAMO,IAAI,QAASyN,IAGpBhO,EAAM9D,OAAO,CAAEmC,YAAW,EAAE0O,YAAakB,EAAkBnB,SAAUwB,EAAepR,EAAG8R,EAAQ7R,EAAG8R,IAClG5D,EAAKnP,OAAO,CAAEmC,YAAW,EAAEnB,EAAGgS,EAAO/R,EAAGgS,EAAOrC,SAAUmB,EAAkBlB,YAAakB,IAExFrS,KAAKiS,UAAYI,EACjBrS,KAAKsQ,YAAc8B,EAAchB,MAnIlC,qC,gDAAkC,kBAClC,sC,gDAA0CY,EAAatG,WAAWC,OAAO,CAAC6H,EAAc1P,cAoIzF,EAxIA,CAAmCkO,GCxBnC,yE,OACC,gC,gDAAiB,cAcjB,sC,gDAAuC7C,EAAA,MAAa,EAAKlP,MAAO,CAAEmB,SAAU,WAAYE,EAAG,KAAKC,EAAG,KAAKuB,QAAS,KAAKD,QAAS,SAE/H,0C,gDAA2C,EAAKwB,gBAAgBZ,SAASL,KAAK+L,EAAA,MAAa,EAAKlP,MAAO,CAAE+L,UAAW,CAAC,YAAa,cAAe5K,SAAU,WAAYE,EAAG,KAAKC,EAAG,KAAKuB,QAAS,KAAKD,QAAS,U,EAoD/M,OArE4C,a,+FAmB3C,WACC,YAAMU,UAAS,WACfvD,KAAK2E,IAAI,WAAY,MACrB3E,KAAK2E,IAAI,cAAe,MACxB3E,KAAK2E,IAAI,UAAW,UACpB3E,KAAKqE,gBAAgBM,IAAI,OAAQ3E,KAAKyT,e,kGAGvC,WACC,IAAIpP,EAAkBrE,KAAKqE,gBAEvB6F,EAAI7F,EAAgB8F,aACpBC,EAAI/F,EAAgBgG,cAEpBoJ,EAAazT,KAAKyT,WAClBC,EAAiB1T,KAAK0T,eACtB5R,EAAQ2R,EAAW1O,IAAI,QAAS,GAE9B8D,EAAS4K,EAAWE,cAEtBC,EAAK/K,EAAOU,MAAQV,EAAOS,KAC3BuK,EAAKhL,EAAOI,OAASJ,EAAOG,KAE/BlH,EAD8B,cAA3B9B,KAAK+E,IAAI,eACJmF,EAAI0J,EAGJxJ,EAAIyJ,IAEAnO,KAAqBoO,KAAThS,IACxB2R,EAAW9O,IAAI,QAAS7C,GACxB2R,EAAW9O,IAAI,IAAKuF,EAAI,GACxBuJ,EAAW9O,IAAI,IAAKyF,EAAI,GAExBsJ,EAAe/O,IAAI,QAAS7C,GAC5B4R,EAAe/O,IAAI,IAAKuF,EAAI,GAC5BwJ,EAAe/O,IAAI,IAAKyF,EAAI,O,sGAI9B,WAEC,GADA,YAAM/E,iBAAgB,WAClBrF,KAAKkL,QAAQ,WAAY,CAC5B,IAAM6I,EAAU/T,KAAK+E,IAAI,WACzB/E,KAAKyT,WAAW9O,IAAI,UAAWoP,GAC/B/T,KAAK0T,eAAe/O,IAAI,UAAWoP,GAGpC/T,KAAKgU,kBA/DN,qC,gDAAkC,2BAClC,sC,gDAA0CR,EAAc9H,WAAWC,OAAO,CAACsI,EAAuBnQ,cAiEnG,EArEA,CAA4C0P,GCb5C,2B,+CAaA,OAbiC,a,+FAChC,WACC,YAAMjQ,UAAS,WAEfvD,KAAK0D,gBAAgBpD,OAAO,CAAEe,YAAW,EAAM6S,OAAQlU,KAAKC,MAAM2P,sBAGnE,qC,gDAAkC,gBAClC,sC,gDAA0C/L,EAAa6H,WAAWC,OAAO,CAACwI,EAAYrQ,cAKvF,EAbA,CAAiCD,GCf1B,MAAMuQ,EAAa,I","file":"percent.js","sourcesContent":["import { Theme } from \"../../core/Theme\";\r\nimport { percent, p50, p100 } from \"../../core/util/Percent\";\r\nimport { ColorSet } from \"../../core/util/ColorSet\";\r\nimport { setColor } from \"../../themes/DefaultTheme\";\r\n\r\n\r\n/**\r\n * @ignore\r\n */\r\nexport class PercentDefaultTheme extends Theme {\r\n\tprotected setupDefaultRules() {\r\n\t\tsuper.setupDefaultRules();\r\n\r\n\t\tconst ic = this._root.interfaceColors;\r\n\t\tconst r = this.rule.bind(this);\r\n\r\n\t\t/**\r\n\t\t * ========================================================================\r\n\t\t * charts/percent\r\n\t\t * ========================================================================\r\n\t\t */\r\n\r\n\t\tr(\"PercentSeries\").setAll({\r\n\t\t\tlegendLabelText: \"{category}\",\r\n\t\t\tlegendValueText: \"{valuePercentTotal.formatNumber('0.00')}%\",\r\n\t\t\tcolors: ColorSet.new(this._root, {}),\r\n\t\t\twidth: p100,\r\n\t\t\theight: p100\r\n\t\t});\r\n\r\n\t\t/**\r\n\t\t * ========================================================================\r\n\t\t * charts/pie\r\n\t\t * ========================================================================\r\n\t\t */\r\n\r\n\t\tr(\"PieChart\").setAll({\r\n\t\t\tradius: percent(80),\r\n\t\t\tstartAngle: -90,\r\n\t\t\tendAngle: 270\r\n\t\t})\r\n\r\n\t\tr(\"PieSeries\").setAll({\r\n\t\t\talignLabels: true,\r\n\t\t\tstartAngle: -90,\r\n\t\t\tendAngle: 270\r\n\t\t});\r\n\r\n\t\tr(\"PieSeries\").states.create(\"hidden\", { endAngle: -90, opacity: 0 });\r\n\r\n\t\tr(\"Slice\", [\"pie\"]).setAll({\r\n\t\t\tposition: \"absolute\",\r\n\t\t\tisMeasured: false,\r\n\t\t\tx: 0,\r\n\t\t\ty: 0,\r\n\t\t\ttoggleKey: \"active\",\r\n\t\t\ttooltipText: \"{category}: {valuePercentTotal.formatNumber('0.00')}%\",\r\n\t\t\tstrokeWidth: 1,\r\n\t\t\tstrokeOpacity: 1,\r\n\t\t\trole: \"figure\"\r\n\t\t});\r\n\r\n\t\tr(\"Slice\", [\"pie\"]).states.create(\"active\", { shiftRadius: 20 });\r\n\t\tr(\"Slice\", [\"pie\"]).states.create(\"hover\", { scale: 1.04 });\r\n\r\n\t\tr(\"RadialLabel\", [\"pie\"]).setAll({\r\n\t\t\ttextType: \"aligned\",\r\n\t\t\tradius: 10,\r\n\t\t\ttext: \"{category}: {valuePercentTotal.formatNumber('0.00')}%\",\r\n\t\t\tpaddingTop: 5,\r\n\t\t\tpaddingBottom: 5,\r\n\t\t\tpopulateText: true\r\n\t\t});\r\n\r\n\t\tr(\"Tick\", [\"pie\"]).setAll({\r\n\t\t\tlocation: 1\r\n\t\t});\r\n\r\n\r\n\t\t/**\r\n\t\t * ========================================================================\r\n\t\t * charts/funnel\r\n\t\t * ========================================================================\r\n\t\t */\r\n\r\n\t\tr(\"SlicedChart\").setAll({\r\n\t\t\tpaddingLeft: 10,\r\n\t\t\tpaddingRight: 10,\r\n\t\t\tpaddingTop: 10,\r\n\t\t\tpaddingBottom: 10\r\n\t\t});\r\n\r\n\t\t/**\r\n\t\t * ------------------------------------------------------------------------\r\n\t\t * charts/funnel: Funnel\r\n\t\t * ------------------------------------------------------------------------\r\n\t\t */\r\n\r\n\t\tr(\"FunnelSeries\").setAll({\r\n\t\t\tstartLocation: 0,\r\n\t\t\tendLocation: 1,\r\n\t\t\torientation: \"vertical\",\r\n\t\t\talignLabels: true,\r\n\t\t\tsequencedInterpolation: true\r\n\t\t});\r\n\r\n\t\tr(\"FunnelSlice\").setAll({\r\n\t\t\tinteractive: true,\r\n\t\t\texpandDistance: 0,\r\n\t\t\t//tooltipText: \"{category}: {valuePercentTotal.formatNumber('0.00')}%\"\r\n\t\t});\r\n\r\n\t\tr(\"FunnelSlice\").states.create(\"hover\", { expandDistance: 0.15 })\r\n\r\n\t\tr(\"Label\", [\"funnel\"]).setAll({\r\n\t\t\tpopulateText: true,\r\n\t\t\ttext: \"{category}: {valuePercentTotal.formatNumber('0.00')}%\",\r\n\t\t\tcenterY: p50\r\n\t\t});\r\n\r\n\t\tr(\"Label\", [\"funnel\", \"horizontal\"]).setAll({\r\n\t\t\tcenterX: 0,\r\n\t\t\tcenterY: p50,\r\n\t\t\trotation: -90\r\n\t\t});\r\n\r\n\t\t// Class: Label\r\n\t\tr(\"Label\", [\"funnel\", \"vertical\"]).setAll({\r\n\t\t\tcenterY: p50,\r\n\t\t\tcenterX: 0\r\n\t\t});\r\n\r\n\t\tr(\"Tick\", [\"funnel\"]).setAll({\r\n\t\t\tlocation: 1\r\n\t\t});\r\n\r\n\t\tr(\"FunnelSlice\", [\"funnel\", \"link\"]).setAll({\r\n\t\t\tfillOpacity: 0.5,\r\n\t\t\tstrokeOpacity: 0,\r\n\t\t\texpandDistance: -0.1\r\n\t\t});\r\n\r\n\t\tr(\"FunnelSlice\", [\"funnel\", \"link\", \"vertical\"]).setAll({\r\n\t\t\theight: 10,\r\n\t\t});\r\n\r\n\t\tr(\"FunnelSlice\", [\"funnel\", \"link\", \"horizontal\"]).setAll({\r\n\t\t\twidth: 10\r\n\t\t});\r\n\r\n\r\n\t\t/**\r\n\t\t * ------------------------------------------------------------------------\r\n\t\t * charts/funnel: Pyramid\r\n\t\t * ------------------------------------------------------------------------\r\n\t\t */\r\n\r\n\t\tr(\"PyramidSeries\").setAll({\r\n\t\t\tvalueIs: \"area\"\r\n\t\t});\r\n\r\n\t\tr(\"FunnelSlice\", [\"pyramid\", \"link\"]).setAll({\r\n\t\t\tfillOpacity: 0.5\r\n\t\t});\r\n\r\n\t\tr(\"FunnelSlice\", [\"pyramid\", \"link\", \"vertical\"]).setAll({\r\n\t\t\theight: 0\r\n\t\t});\r\n\r\n\t\tr(\"FunnelSlice\", [\"pyramid\", \"link\", \"horizontal\"]).setAll({\r\n\t\t\twidth: 0\r\n\t\t});\r\n\r\n\t\tr(\"FunnelSlice\", [\"pyramid\"]).setAll({\r\n\t\t\tinteractive: true,\r\n\t\t\texpandDistance: 0\r\n\t\t});\r\n\r\n\t\tr(\"FunnelSlice\", [\"pyramid\"]).states.create(\"hover\", { expandDistance: 0.15 });\r\n\r\n\t\tr(\"Label\", [\"pyramid\"]).setAll({\r\n\t\t\tpopulateText: true,\r\n\t\t\ttext: \"{category}: {valuePercentTotal.formatNumber('0.00')}%\",\r\n\t\t\tcenterY: p50\r\n\t\t});\r\n\r\n\t\tr(\"Label\", [\"pyramid\", \"horizontal\"]).setAll({\r\n\t\t\tcenterX: 0,\r\n\t\t\tcenterY: p50,\r\n\t\t\trotation: -90\r\n\t\t});\r\n\r\n\t\tr(\"Label\", [\"pyramid\", \"vertical\"]).setAll({\r\n\t\t\tcenterY: p50,\r\n\t\t\tcenterX: 0\r\n\t\t});\r\n\r\n\t\tr(\"Tick\", [\"pyramid\"]).setAll({\r\n\t\t\tlocation: 1\r\n\t\t});\r\n\r\n\r\n\t\t/**\r\n\t\t * ------------------------------------------------------------------------\r\n\t\t * charts/funnel: Pictorial\r\n\t\t * ------------------------------------------------------------------------\r\n\t\t */\r\n\r\n\t\t// Class: FunnelSlice\r\n\t\tr(\"FunnelSlice\", [\"pictorial\"]).setAll({\r\n\t\t\tinteractive: true,\r\n\t\t\ttooltipText: \"{category}: {valuePercentTotal.formatNumber('0.00')}%\"\r\n\t\t});\r\n\r\n\t\tr(\"Label\", [\"pictorial\"]).setAll({\r\n\t\t\tpopulateText: true,\r\n\t\t\ttext: \"{category}: {valuePercentTotal.formatNumber('0.00')}%\",\r\n\t\t\tcenterY: p50\r\n\t\t});\r\n\r\n\t\tr(\"Label\", [\"pictorial\", \"horizontal\"]).setAll({\r\n\t\t\tcenterX: 0,\r\n\t\t\tcenterY: p50,\r\n\t\t\trotation: -90\r\n\t\t});\r\n\r\n\t\tr(\"Label\", [\"pictorial\", \"vertical\"]).setAll({\r\n\t\t\tcenterY: p50,\r\n\t\t\tcenterX: 0\r\n\t\t});\r\n\r\n\t\tr(\"FunnelSlice\", [\"pictorial\", \"link\"]).setAll({\r\n\t\t\tfillOpacity: 0.5,\r\n\t\t\twidth: 0,\r\n\t\t\theight: 0\r\n\t\t});\r\n\r\n\t\tr(\"Tick\", [\"pictorial\"]).setAll({\r\n\t\t\tlocation: 0.5\r\n\t\t});\r\n\r\n\t\t{\r\n\t\t\tconst rule = r(\"Graphics\", [\"pictorial\", \"background\"]);\r\n\r\n\t\t\trule.setAll({\r\n\t\t\t\tfillOpacity: 0.2\r\n\t\t\t});\r\n\r\n\t\t\tsetColor(rule, \"fill\", ic, \"alternativeBackground\");\r\n\t\t}\r\n\r\n\t}\r\n}\r\n","import type { PercentSeries } from \"./PercentSeries\";\nimport { SerialChart, ISerialChartPrivate, ISerialChartSettings } from \"../../core/render/SerialChart\";\nimport { PercentDefaultTheme } from \"./PercentDefaultTheme\";\n\nexport interface IPercentChartSettings extends ISerialChartSettings {\n}\n\nexport interface IPercentChartPrivate extends ISerialChartPrivate {\n}\n\n/**\n * Base class for [[PieChart]].\n *\n * Also used for percent-based series, like [[FunnelSeries]], [[PyramidSeries]], etc.\n *\n * @important\n */\nexport abstract class PercentChart extends SerialChart {\n\tpublic static className: string = \"PercentChart\";\n\tpublic static classNames: Array = SerialChart.classNames.concat([PercentChart.className]);\n\n\tdeclare public _settings: IPercentChartSettings;\n\tdeclare public _privateSettings: IPercentChartPrivate;\n\tdeclare public _seriesType: PercentSeries;\n\n\tprotected _afterNew() {\n\t\tthis._defaultThemes.push(PercentDefaultTheme.new(this._root));\n\n\t\tsuper._afterNew();\n\n\t\tthis.chartContainer.children.push(this.seriesContainer);\n\t\tthis.seriesContainer.children.push(this.bulletsContainer);\n\t}\n}\n","import type { DataItem } from \"../../core/render/Component\";\nimport type { Graphics } from \"../../core/render/Graphics\";\nimport type { Label } from \"../../core/render/Label\";\nimport type { Tick } from \"../../core/render/Tick\";\nimport type { ListTemplate } from \"../../core/util/List\";\nimport type { ColorSet } from \"../../core/util/ColorSet\";\nimport type { ILegendDataItem } from \"../../core/render/Legend\";\nimport type { Color } from \"../../core/util/Color\";\nimport type { PercentChart } from \"./PercentChart\";\n\nimport { Series, ISeriesSettings, ISeriesDataItem, ISeriesPrivate } from \"../../core/render/Series\";\nimport { Container } from \"../../core/render/Container\";\nimport { visualSettings } from \"../../core/render/Graphics\";\n\nimport * as $array from \"../../core/util/Array\";\nimport * as $type from \"../../core/util/Type\";\n\nexport interface IPercentSeriesDataItem extends ISeriesDataItem {\n\n\t/**\n\t * Percent of the series value total.\n\t */\n\tvaluePercentTotal: number;\n\n\t/**\n\t * Category.\n\t */\n\tcategory: string;\n\n\t/**\n\t * Slice visual element.\n\t */\n\tslice: Graphics;\n\n\t/**\n\t * Slice label.\n\t */\n\tlabel: Label;\n\n\t/**\n\t * Slice tick.\n\t */\n\ttick: Tick;\n\n\t/**\n\t * A related legend data item.\n\t */\n\tlegendDataItem: DataItem;\n\n\t/**\n\t * Fill color used for the slice and related elements, e.g. legend marker.\n\t */\n\tfill: Color;\n\n}\n\n//type IPercentSeriesDataItemSettings = { [K in keyof IPercentSeriesDataItem]?: string; };\n\nexport interface IPercentSeriesSettings extends ISeriesSettings {\n\n\t/**\n\t * A [[ColorSet]] to use when asigning colors for slices.\n\t */\n\tcolors?: ColorSet;\n\n\t/**\n\t * A field in data that holds category names.\n\t */\n\tcategoryField?: string;\n\n\t/**\n\t * Should slice labelsbe aligned in columns/rows?\n\t */\n\talignLabels?: boolean;\n\n\t/**\n\t * A field that holds color for slice fill.\n\t */\n\tfillField?: string;\n\n}\n\nexport interface IPercentSeriesPrivate extends ISeriesPrivate {\n\tvalueAverage?: number;\n\tvalueCount?: number;\n\tvalueSum?: number;\n\tvalueAbsoluteSum?: number;\n\tvalueLow?: number;\n\tvalueHigh?: number;\n}\n\n/**\n * A base class for any percent chart series.\n */\nexport abstract class PercentSeries extends Series {\n\tpublic static className: string = \"PercentSeries\";\n\tpublic static classNames: Array = Series.classNames.concat([PercentSeries.className]);\n\n\tdeclare public _settings: IPercentSeriesSettings;\n\tdeclare public _privateSettings: IPercentSeriesPrivate;\n\tdeclare public _dataItemSettings: IPercentSeriesDataItem;\n\n\tdeclare public _sliceType: Graphics;\n\tdeclare public _labelType: Label;\n\tdeclare public _tickType: Tick;\n\n\tpublic readonly slicesContainer = this.children.push(Container.new(this._root, { position: \"absolute\", isMeasured: false }));\n\tpublic readonly labelsContainer = this.children.push(Container.new(this._root, { position: \"absolute\", isMeasured: false }));\n\tpublic readonly ticksContainer = this.children.push(Container.new(this._root, { position: \"absolute\", isMeasured: false }));\n\n\tprotected _lLabels: Array<{ label: Label, y: number }> = [];\n\tprotected _rLabels: Array<{ label: Label, y: number }> = [];\n\tprotected _hLabels: Array<{ label: Label, y: number }> = [];\n\n\t/**\n\t * A [[ListTemplate]] of all slices in series.\n\t *\n\t * `slices.template` can also be used to configure slices.\n\t */\n\tpublic readonly slices: ListTemplate = this._makeSlices();\n\n\tprotected abstract _makeSlices(): ListTemplate;\n\n\tpublic abstract chart: PercentChart | undefined;\n\n\t/**\n\t * @ignore\n\t */\n\tpublic makeSlice(dataItem: DataItem): this[\"_sliceType\"] {\n\t\tconst slice = this.slicesContainer.children.push(this.slices.make());\n\n\t\tslice.on(\"fill\", () => {\n\t\t\tthis.updateLegendMarker(dataItem);\n\t\t})\n\n\t\tslice.on(\"stroke\", () => {\n\t\t\tthis.updateLegendMarker(dataItem);\n\t\t})\n\n\t\tslice._setDataItem(dataItem);\n\t\tdataItem.set(\"slice\", slice);\n\t\tthis.slices.push(slice);\n\n\t\treturn slice;\n\t}\n\n\t/**\n\t * A [[ListTemplate]] of all slice labels in series.\n\t *\n\t * `labels.template` can also be used to configure slice labels.\n\t */\n\tpublic readonly labels: ListTemplate = this._makeLabels();\n\n\tprotected abstract _makeLabels(): ListTemplate;\n\n\t/**\n\t * @ignore\n\t */\n\tpublic makeLabel(dataItem: DataItem): this[\"_labelType\"] {\n\t\tconst label = this.labelsContainer.children.push(this.labels.make());\n\t\tlabel._setDataItem(dataItem);\n\t\tdataItem.set(\"label\", label);\n\t\tthis.labels.push(label);\n\t\treturn label;\n\t}\n\n\t/**\n\t * A [[ListTemplate]] of all slice ticks in series.\n\t *\n\t * `ticks.template` can also be used to configure slice ticks.\n\t */\n\tpublic readonly ticks: ListTemplate = this._makeTicks();\n\n\tprotected abstract _makeTicks(): ListTemplate;\n\n\n\tprotected _shouldMakeBullet(dataItem: DataItem): boolean {\n\t\tif (dataItem.get(\"value\") != null) {\n\t\t\treturn true;\n\t\t}\n\t\treturn false;\n\t}\n\n\t/**\n\t * @ignore\n\t */\n\tpublic makeTick(dataItem: DataItem): this[\"_tickType\"] {\n\t\tconst tick = this.ticksContainer.children.push(this.ticks.make());\n\t\ttick._setDataItem(dataItem);\n\t\tdataItem.set(\"tick\", tick);\n\t\tthis.ticks.push(tick);\n\t\treturn tick;\n\t}\n\n\tprotected _afterNew() {\n\t\tthis.fields.push(\"category\", \"fill\");\n\t\tsuper._afterNew();\n\t}\n\n\tprotected _onDataClear() {\n\t\tconst colors = this.get(\"colors\");\n\t\tif (colors) {\n\t\t\tcolors.reset();\n\t\t}\n\t}\n\n\tpublic _prepareChildren() {\n\t\tsuper._prepareChildren();\n\n\t\tthis._lLabels = [];\n\t\tthis._rLabels = [];\n\t\tthis._hLabels = [];\n\n\t\tif (this._valuesDirty) {\n\t\t\tlet sum = 0;\n\t\t\tlet absSum = 0;\n\t\t\tlet valueHigh = 0;\n\t\t\tlet valueLow = Infinity;\n\t\t\tlet count = 0;\n\t\t\t$array.each(this._dataItems, (dataItem) => {\n\t\t\t\tlet valueWorking = dataItem.get(\"valueWorking\", 0);\n\t\t\t\tsum += valueWorking;\n\t\t\t\tabsSum += Math.abs(valueWorking);\n\t\t\t});\n\n\t\t\t$array.each(this._dataItems, (dataItem) => {\n\t\t\t\tlet value = dataItem.get(\"valueWorking\", 0);\n\t\t\t\tif (value >= absSum) {\n\t\t\t\t\tsum = dataItem.get(\"value\", 0);\n\t\t\t\t}\n\n\t\t\t\tif (value > valueHigh) {\n\t\t\t\t\tvalueHigh = value;\n\t\t\t\t}\n\n\t\t\t\tif (value < valueLow) {\n\t\t\t\t\tvalueLow = value;\n\t\t\t\t}\n\n\t\t\t\tcount++;\n\n\t\t\t\tlet percentTotal = value / absSum;\n\n\t\t\t\tif (absSum == 0) {\n\t\t\t\t\tpercentTotal = 0;\n\t\t\t\t}\n\n\t\t\t\tdataItem.setRaw(\"valuePercentTotal\", percentTotal * 100);\n\t\t\t});\n\n\t\t\tthis.setPrivateRaw(\"valueLow\", valueLow);\n\t\t\tthis.setPrivateRaw(\"valueHigh\", valueHigh);\n\t\t\tthis.setPrivateRaw(\"valueSum\", sum);\n\t\t\tthis.setPrivateRaw(\"valueAverage\", sum / count);\n\t\t\tthis.setPrivateRaw(\"valueAbsoluteSum\", absSum);\n\t\t}\n\t}\n\n\t/**\n\t * Shows hidden series.\n\t *\n\t * @param duration Animation duration in milliseconds\n\t * @return Animation promise\n\t */\n\tpublic async show(duration?: number): Promise {\n\t\tlet promises: Array> = [];\n\t\tpromises.push(super.show(duration))\n\n\t\tpromises.push(this._sequencedShowHide(true, duration));\n\t\tawait Promise.all(promises);\n\t}\n\n\t/**\n\t * Hide whole series.\n\t *\n\t * @param duration Animation duration in milliseconds\n\t * @return Animation promise\n\t */\n\tpublic async hide(duration?: number): Promise {\n\t\tlet promises: Array> = [];\n\t\tpromises.push(super.hide(duration))\n\n\t\tpromises.push(this._sequencedShowHide(false, duration));\n\t\tawait Promise.all(promises);\n\t}\n\n\t/**\n\t * @ignore\n\t */\n\tpublic _updateChildren() {\n\t\tsuper._updateChildren();\n\t\tif (this._valuesDirty) {\n\t\t\t$array.each(this._dataItems, (dataItem) => {\n\t\t\t\tdataItem.get(\"label\").text.markDirtyText();\n\t\t\t});\n\t\t}\n\t\tthis._arrange();\n\t}\n\n\tprotected _arrange() {\n\t\tthis._arrangeDown(this._lLabels);\n\t\tthis._arrangeUp(this._lLabels);\n\n\t\tthis._arrangeDown(this._rLabels);\n\t\tthis._arrangeUp(this._rLabels);\n\n\t\tthis._arrangeLeft(this._hLabels);\n\t\tthis._arrangeRight(this._hLabels);\n\n\t\t$array.each(this.dataItems, (dataItem) => {\n\t\t\tthis._updateTick(dataItem);\n\t\t})\n\t}\n\n\n\tpublic _afterChanged() {\n\t\tsuper._afterChanged();\n\t\tthis._arrange();\n\t}\n\n\tprotected processDataItem(dataItem: DataItem) {\n\t\tsuper.processDataItem(dataItem);\n\n\t\tif (dataItem.get(\"fill\") == null) {\n\t\t\tlet colors = this.get(\"colors\");\n\t\t\tif (colors) {\n\t\t\t\tdataItem.setRaw(\"fill\", colors.next());\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * Shows series's data item.\n\t *\n\t * @param dataItem Data item\n\t * @param duration Animation duration in milliseconds\n\t * @return Promise\n\t */\n\tpublic async showDataItem(dataItem: DataItem, duration?: number): Promise {\n\t\tconst promises = [super.showDataItem(dataItem, duration)];\n\t\tif (!$type.isNumber(duration)) {\n\t\t\tduration = this.get(\"stateAnimationDuration\", 0);\n\t\t}\n\n\t\tconst easing = this.get(\"stateAnimationEasing\");\n\n\t\tlet value = dataItem.get(\"value\");\n\n\t\tconst animation = dataItem.animate({ key: \"valueWorking\", to: value, duration: duration, easing: easing });\n\t\tif (animation) {\n\t\t\tpromises.push(animation.waitForStop());\n\t\t}\n\n\t\tconst tick = dataItem.get(\"tick\");\n\t\tif (tick) {\n\t\t\tpromises.push(tick.show(duration));\n\t\t}\n\t\tconst label = dataItem.get(\"label\");\n\t\tif (label) {\n\t\t\tpromises.push(label.show(duration));\n\t\t}\n\n\t\tconst slice = dataItem.get(\"slice\");\n\t\tif (slice) {\n\t\t\tpromises.push(slice.show(duration));\n\t\t}\n\n\t\tawait Promise.all(promises);\n\t}\n\n\t/**\n\t * Hides series's data item.\n\t *\n\t * @param dataItem Data item\n\t * @param duration Animation duration in milliseconds\n\t * @return Promise\n\t */\n\tpublic async hideDataItem(dataItem: DataItem, duration?: number): Promise {\n\t\tconst promises = [super.hideDataItem(dataItem, duration)];\n\t\tconst hiddenState = this.states.create(\"hidden\", {})\n\n\t\tif (!$type.isNumber(duration)) {\n\t\t\tduration = hiddenState.get(\"stateAnimationDuration\", this.get(\"stateAnimationDuration\", 0));\n\t\t}\n\n\t\tconst easing = hiddenState.get(\"stateAnimationEasing\", this.get(\"stateAnimationEasing\"));\n\n\t\tconst animation = dataItem.animate({ key: \"valueWorking\", to: 0, duration: duration, easing: easing });\n\t\tif (animation) {\n\t\t\tpromises.push(animation.waitForStop());\n\t\t}\n\n\t\tconst tick = dataItem.get(\"tick\");\n\t\tif (tick) {\n\t\t\tpromises.push(tick.hide(duration));\n\t\t}\n\t\tconst label = dataItem.get(\"label\");\n\t\tif (label) {\n\t\t\tpromises.push(label.hide(duration));\n\t\t}\n\n\t\tconst slice = dataItem.get(\"slice\");\n\t\tslice.hideTooltip();\n\n\t\tif (slice) {\n\t\t\tpromises.push(slice.hide(duration));\n\t\t}\n\n\t\tawait Promise.all(promises);\n\t}\n\n\t/**\n\t * @ignore\n\t */\n\tpublic disposeDataItem(dataItem: DataItem) {\n\t\tsuper.disposeDataItem(dataItem);\n\t\tlet label = dataItem.get(\"label\");\n\t\tif (label) {\n\t\t\tthis.labels.removeValue(label);\n\t\t\tlabel.dispose();\n\t\t}\n\t\tlet tick = dataItem.get(\"tick\");\n\t\tif (tick) {\n\t\t\tthis.ticks.removeValue(tick);\n\t\t\ttick.dispose();\n\t\t}\n\t\tlet slice = dataItem.get(\"slice\");\n\t\tif (slice) {\n\t\t\tthis.slices.removeValue(slice);\n\t\t\tslice.dispose();\n\t\t}\n\t}\n\n\t/**\n\t * Triggers hover on a series data item.\n\t *\n\t * @since 5.0.7\n\t * @param dataItem Target data item\n\t */\n\tpublic hoverDataItem(dataItem: DataItem) {\n\t\tconst slice = dataItem.get(\"slice\");\n\t\tif (slice && !slice.isHidden()) {\n\t\t\tslice.hover();\n\t\t}\n\t}\n\n\t/**\n\t * Triggers un-hover on a series data item.\n\t *\n\t * @since 5.0.7\n\t * @param dataItem Target data item\n\t */\n\tpublic unhoverDataItem(dataItem: DataItem) {\n\t\tconst slice = dataItem.get(\"slice\");\n\t\tif (slice) {\n\t\t\tslice.unhover();\n\t\t}\n\t}\n\n\t/**\n\t * @ignore\n\t */\n\tpublic updateLegendMarker(dataItem: DataItem) {\n\t\tconst slice = dataItem.get(\"slice\");\n\n\t\tif (slice) {\n\t\t\tconst legendDataItem = dataItem.get(\"legendDataItem\");\n\t\t\tif (legendDataItem) {\n\t\t\t\tconst markerRectangle = legendDataItem.get(\"markerRectangle\");\n\t\t\t\t$array.each(visualSettings, (setting: any) => {\n\t\t\t\t\tif (slice.get(setting) != null) {\n\t\t\t\t\t\tmarkerRectangle.set(setting, slice.get(setting));\n\t\t\t\t\t}\n\t\t\t\t})\n\t\t\t}\n\t\t}\n\t}\n\n\tprotected _arrangeDown(labels?: Array<{ label: Label, y: number }>) {\n\t\tif (labels) {\n\n\t\t\tlet next = this._getNextDown();\n\n\t\t\tlabels.sort((a, b) => {\n\t\t\t\tif (a.y > b.y) {\n\t\t\t\t\treturn 1;\n\t\t\t\t}\n\t\t\t\telse if (a.y < b.y) {\n\t\t\t\t\treturn -1;\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\treturn 0;\n\t\t\t\t}\n\t\t\t})\n\n\t\t\t$array.each(labels, (l) => {\n\t\t\t\tconst bounds = l.label.adjustedLocalBounds();\n\t\t\t\tlet labelTop = bounds.top;\n\t\t\t\tif (l.y + labelTop < next) {\n\t\t\t\t\tl.y = next - labelTop;\n\t\t\t\t}\n\t\t\t\tl.label.set(\"y\", l.y);\n\n\t\t\t\tnext = l.y + bounds.bottom;\n\t\t\t})\n\t\t}\n\t}\n\n\tprotected _getNextUp() {\n\t\treturn this.labelsContainer.maxHeight();\n\t}\n\n\tprotected _getNextDown() {\n\t\treturn 0;\n\t}\n\n\tprotected _arrangeUp(labels?: Array<{ label: Label, y: number }>) {\n\t\tif (labels) {\n\t\t\tlet next = this._getNextUp();\n\n\t\t\tlabels.sort((a, b) => {\n\t\t\t\tif (a.y < b.y) {\n\t\t\t\t\treturn 1;\n\t\t\t\t}\n\t\t\t\telse if (a.y > b.y) {\n\t\t\t\t\treturn -1;\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\treturn 0;\n\t\t\t\t}\n\t\t\t})\n\n\t\t\t$array.each(labels, (l) => {\n\t\t\t\tconst bounds = l.label.adjustedLocalBounds();\n\t\t\t\tlet labelBottom = bounds.bottom;\n\t\t\t\tif (l.y + labelBottom > next) {\n\t\t\t\t\tl.y = next - labelBottom;\n\t\t\t\t}\n\t\t\t\tl.label.set(\"y\", l.y);\n\t\t\t\tnext = l.y + bounds.top;\n\t\t\t})\n\t\t}\n\t}\n\n\tprotected _arrangeRight(labels?: Array<{ label: Label, y: number }>) {\n\t\tif (labels) {\n\n\t\t\tlet next = 0;\n\n\t\t\tlabels.sort((a, b) => {\n\t\t\t\tif (a.y > b.y) {\n\t\t\t\t\treturn 1;\n\t\t\t\t}\n\t\t\t\telse if (a.y < b.y) {\n\t\t\t\t\treturn -1;\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\treturn 0;\n\t\t\t\t}\n\t\t\t})\n\n\t\t\t$array.each(labels, (l) => {\n\t\t\t\tconst bounds = l.label.adjustedLocalBounds();\n\t\t\t\tlet labelLeft = bounds.left;\n\t\t\t\tif (l.y + labelLeft < next) {\n\t\t\t\t\tl.y = next - labelLeft;\n\t\t\t\t}\n\t\t\t\tl.label.set(\"x\", l.y);\n\n\t\t\t\tnext = l.y + bounds.right;\n\t\t\t})\n\t\t}\n\t}\n\n\tprotected _arrangeLeft(labels?: Array<{ label: Label, y: number }>) {\n\t\tif (labels) {\n\t\t\tlet next = this.labelsContainer.maxWidth();\n\n\t\t\tlabels.sort((a, b) => {\n\t\t\t\tif (a.y < b.y) {\n\t\t\t\t\treturn 1;\n\t\t\t\t}\n\t\t\t\telse if (a.y > b.y) {\n\t\t\t\t\treturn -1;\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\treturn 0;\n\t\t\t\t}\n\t\t\t})\n\n\t\t\t$array.each(labels, (l) => {\n\t\t\t\tconst bounds = l.label.adjustedLocalBounds();\n\t\t\t\tlet labelRight = bounds.right;\n\t\t\t\tif (l.y + labelRight > next) {\n\t\t\t\t\tl.y = next - labelRight;\n\t\t\t\t}\n\t\t\t\tl.label.set(\"x\", l.y);\n\t\t\t\tnext = l.y + bounds.left;\n\t\t\t})\n\t\t}\n\t}\n\n\tpublic _updateSize() {\n\t\tsuper._updateSize();\n\t\tthis.markDirty();\n\t}\n\n\tprotected _updateTick(_dataItem: DataItem) {\n\n\t}\n\n\tprotected _dispose() {\n\t\tsuper._dispose();\n\n\t\tconst chart = this.chart;\n\t\tif (chart) {\n\t\t\tchart.series.removeValue(this);\n\t\t}\n\t}\n\n\n}\n","import type { PieSeries } from \"./PieSeries\";\n\nimport { Percent } from \"../../core/util/Percent\";\nimport { PercentChart, IPercentChartPrivate, IPercentChartSettings } from \"../percent/PercentChart\";\nimport { p50 } from \"../../core/util/Percent\";\n\nimport * as $utils from \"../../core/util/Utils\";\nimport * as $math from \"../../core/util/Math\";\n\n\nexport interface IPieChartSettings extends IPercentChartSettings {\n\n\t/**\n\t * Outer radius of the pie chart.\n\t *\n\t * Can be set in fixed pixel value, or relative to chart container size in\n\t * percent.\n\t *\n\t * @see {@link https://www.amcharts.com/docs/v5/charts/percent-charts/pie-chart/#Pie_radius} for more info\n\t * @default 80%\n\t */\n\tradius?: number | Percent;\n\n\t/**\n\t * Inner radius of the pie chart. Setting to any non-zero value will result\n\t * in a donut chart.\n\t *\n\t * Can be set in fixed pixel value, or relative to chart container size in\n\t * percent.\n\t *\n\t * Setting to negative number will mean pixels from outer radius.\n\t *\n\t * @see {@link https://www.amcharts.com/docs/v5/charts/percent-charts/pie-chart/#Pie_radius} for more info\n\t */\n\tinnerRadius?: number | Percent;\n\n\t/**\n\t * A start angle of the chart in degrees.\n\t *\n\t * @see {@link https://www.amcharts.com/docs/v5/charts/percent-charts/pie-chart/#Start_end_angles} for more info\n\t * @default -90\n\t */\n\tstartAngle?: number;\n\n\t/**\n\t * An end angle of the chart in degrees.\n\t *\n\t * @see {@link https://www.amcharts.com/docs/v5/charts/percent-charts/pie-chart/#Start_end_angles} for more info\n\t * @default 270\n\t */\n\tendAngle?: number;\n\n}\n\nexport interface IPieChartPrivate extends IPercentChartPrivate {\n\n\t/**\n\t * @ignore\n\t */\n\tirModifyer?: number;\n\n}\n\n/**\n * Creates a pie chart.\n *\n * @see {@link https://www.amcharts.com/docs/v5/charts/percent-charts/pie-chart/} for more info\n * @important\n */\nexport class PieChart extends PercentChart {\n\n\tpublic static className: string = \"PieChart\";\n\tpublic static classNames: Array = PercentChart.classNames.concat([PieChart.className]);\n\n\tdeclare public _settings: IPieChartSettings;\n\tdeclare public _privateSettings: IPieChartPrivate;\n\tdeclare public _seriesType: PieSeries;\n\n\tprotected _maxRadius: number = 1;\n\n\tprotected _afterNew() {\n\t\tsuper._afterNew();\n\t\tthis.seriesContainer.setAll({ x: p50, y: p50 });\n\t}\n\n\tpublic _prepareChildren() {\n\t\tsuper._prepareChildren();\n\n\t\tconst chartContainer = this.chartContainer;\n\t\tconst w = chartContainer.innerWidth();\n\t\tconst h = chartContainer.innerHeight();\n\n\t\tconst startAngle = this.get(\"startAngle\", 0);\n\t\tconst endAngle = this.get(\"endAngle\", 0);\n\t\tconst innerRadius = this.get(\"innerRadius\");\n\n\n\t\tlet bounds = $math.getArcBounds(0, 0, startAngle, endAngle, 1);\n\n\t\tconst wr = w / (bounds.right - bounds.left);\n\t\tconst hr = h / (bounds.bottom - bounds.top);\n\n\t\tlet innerBounds = { left: 0, right: 0, top: 0, bottom: 0 };\n\n\t\tif (innerRadius instanceof Percent) {\n\t\t\tlet value = innerRadius.value;\n\t\t\tlet mr = Math.min(wr, hr);\n\t\t\tvalue = Math.max(mr * value, mr - Math.min(h, w)) / mr;\n\t\t\tinnerBounds = $math.getArcBounds(0, 0, startAngle, endAngle, value);\n\t\t\tthis.setPrivateRaw(\"irModifyer\", value / innerRadius.value);\n\t\t}\n\n\t\tbounds = $math.mergeBounds([bounds, innerBounds]);\n\n\t\tconst prevRadius = this._maxRadius;\n\t\tthis._maxRadius = Math.min(wr, hr);\n\n\t\tconst radius = $utils.relativeToValue(this.get(\"radius\", 0), this._maxRadius);\n\t\tthis.seriesContainer.setAll({\n\t\t\tdy: -radius * (bounds.bottom + bounds.top) / 2, dx: -radius * (bounds.right + bounds.left) / 2\n\t\t})\n\n\t\tif (this.isDirty(\"startAngle\") || this.isDirty(\"endAngle\") || prevRadius != this._maxRadius) {\n\t\t\tthis.series.each((series) => {\n\t\t\t\tseries._markDirtyKey(\"startAngle\");\n\t\t\t})\n\t\t}\n\t}\n\n\t/**\n\t * Returns outer radius in pixels.\n\t *\n\t * If optional series parameter is passed in, it will return outer radius\n\t * of that particular series.\n\t *\n\t * @param series Series\n\t * @return Radius in pixels\n\t */\n\tpublic radius(series?: PieSeries): number {\n\n\t\tlet radius = $utils.relativeToValue(this.get(\"radius\", 0), this._maxRadius);\n\t\tlet innerRadius = $utils.relativeToValue(this.get(\"innerRadius\", 0), radius);\n\n\t\tif (series) {\n\t\t\tlet index = this.series.indexOf(series);\n\t\t\tlet length = this.series.length;\n\n\t\t\tlet seriesRadius = series.get(\"radius\");\n\t\t\tif (seriesRadius != null) {\n\t\t\t\treturn innerRadius + $utils.relativeToValue(seriesRadius, radius - innerRadius);\n\t\t\t}\n\t\t\telse {\n\t\t\t\treturn innerRadius + (radius - innerRadius) / length * (index + 1);\n\t\t\t}\n\t\t}\n\t\treturn radius;\n\t}\n\n\t/**\n\t * Returns inner radius in pixels.\n\t *\n\t * If optional series parameter is passed in, it will return inner radius\n\t * of that particular series.\n\t *\n\t * @param series Series\n\t * @return Radius in pixels\n\t */\n\tpublic innerRadius(series?: PieSeries): number {\n\t\tconst radius = this.radius();\n\t\tlet innerRadius = $utils.relativeToValue(this.get(\"innerRadius\", 0), radius);\n\n\t\tif (innerRadius < 0) {\n\t\t\tinnerRadius = radius + innerRadius;\n\t\t}\n\n\t\tif (series) {\n\t\t\tlet index = this.series.indexOf(series);\n\t\t\tlet length = this.series.length;\n\n\t\t\tlet seriesInnerRadius = series.get(\"innerRadius\");\n\t\t\tif (seriesInnerRadius != null) {\n\t\t\t\treturn innerRadius + $utils.relativeToValue(seriesInnerRadius, radius - innerRadius);\n\t\t\t}\n\t\t\telse {\n\t\t\t\treturn innerRadius + (radius - innerRadius) / length * index;\n\t\t\t}\n\t\t}\n\t\treturn innerRadius;\n\t}\n}\n","import type { DataItem } from \"../../core/render/Component\";\nimport type { PieChart } from \"./PieChart\";\n\nimport { PercentSeries, IPercentSeriesSettings, IPercentSeriesDataItem, IPercentSeriesPrivate } from \"../percent/PercentSeries\";\nimport { Template } from \"../../core/util/Template\";\nimport { Slice } from \"../../core/render/Slice\";\nimport { Tick } from \"../../core/render/Tick\";\nimport { RadialLabel } from \"../../core/render/RadialLabel\";\nimport { ListTemplate } from \"../../core/util/List\";\nimport { p100, Percent } from \"../../core/util/Percent\";\n\nimport * as $array from \"../../core/util/Array\";\nimport * as $math from \"../../core/util/Math\";\nimport * as $utils from \"../../core/util/Utils\";\n\nexport interface IPieSeriesDataItem extends IPercentSeriesDataItem {\n\tslice: Slice;\n\tlabel: RadialLabel;\n}\n\nexport interface IPieSeriesSettings extends IPercentSeriesSettings {\n\n\t/**\n\t * Radius of the series in pixels or percent.\n\t */\n\tradius?: Percent | number;\n\n\t/**\n\t * Radius of the series in pixels or percent.\n\t *\n\t * Setting to negative number will mean pixels from outer radius.\n\t */\n\tinnerRadius?: Percent | number;\n\n\t/**\n\t * Start angle of the series in degrees.\n\t *\n\t * @default -90\n\t */\n\tstartAngle?: number;\n\n\t/**\n\t * End angle of the series in degrees.\n\t *\n\t * @default 270\n\t */\n\tendAngle?: number;\n\n}\n\nexport interface IPieSeriesPrivate extends IPercentSeriesPrivate {\n\tradius?: number;\n}\n\n/**\n * Creates a series for a [[PieChart]].\n *\n * @see {@link https://www.amcharts.com/docs/v5/charts/percent-charts/pie-chart/} for more info\n * @important\n */\nexport class PieSeries extends PercentSeries {\n\n\tdeclare public chart: PieChart | undefined;\n\n\tpublic static className: string = \"PieSeries\";\n\tpublic static classNames: Array = PercentSeries.classNames.concat([PieSeries.className]);\n\n\tdeclare public _settings: IPieSeriesSettings;\n\tdeclare public _privateSettings: IPieSeriesPrivate;\n\tdeclare public _dataItemSettings: IPieSeriesDataItem;\n\n\tdeclare public _sliceType: Slice;\n\tdeclare public _labelType: RadialLabel;\n\n\tprotected _makeSlices(): ListTemplate {\n\t\treturn new ListTemplate(\n\t\t\tTemplate.new({}),\n\t\t\t() => Slice._new(this._root, {\n\t\t\t\tthemeTags: $utils.mergeTags(this.slices.template.get(\"themeTags\", []), [\"pie\", \"series\"])\n\t\t\t}, [this.slices.template]),\n\t\t);\n\t}\n\n\tprotected _makeLabels(): ListTemplate {\n\t\treturn new ListTemplate(\n\t\t\tTemplate.new({}),\n\t\t\t() => RadialLabel._new(this._root, {\n\t\t\t\tthemeTags: $utils.mergeTags(this.labels.template.get(\"themeTags\", []), [\"pie\", \"series\"])\n\t\t\t}, [this.labels.template]),\n\t\t);\n\t}\n\n\tprotected _makeTicks(): ListTemplate {\n\t\treturn new ListTemplate(\n\t\t\tTemplate.new({}),\n\t\t\t() => Tick._new(this._root, {\n\t\t\t\tthemeTags: $utils.mergeTags(this.ticks.template.get(\"themeTags\", []), [\"pie\", \"series\"])\n\t\t\t}, [this.ticks.template]),\n\t\t);\n\t}\n\n\tprotected processDataItem(dataItem: DataItem) {\n\t\tsuper.processDataItem(dataItem);\n\n\t\tconst slice = this.makeSlice(dataItem);\n\n\t\tslice.on(\"scale\", () => {\n\t\t\tthis._updateTick(dataItem);\n\t\t})\n\t\tslice.on(\"shiftRadius\", () => {\n\t\t\tthis._updateTick(dataItem);\n\t\t})\n\t\tslice.events.on(\"positionchanged\", () => {\n\t\t\tthis._updateTick(dataItem);\n\t\t})\n\n\t\tconst label = this.makeLabel(dataItem);\n\n\t\tlabel.events.on(\"positionchanged\", () => {\n\t\t\tthis._updateTick(dataItem);\n\t\t})\n\n\t\tthis.makeTick(dataItem);\n\n\t\tslice.events.on(\"positionchanged\", () => {\n\t\t\tlabel.markDirty();\n\t\t})\n\t}\n\n\tprotected _getNextUp() {\n\t\treturn this.labelsContainer.maxHeight() / 2;\n\t}\n\n\tprotected _getNextDown() {\n\t\treturn -this.labelsContainer.maxHeight() / 2;\n\t}\n\n\tpublic _prepareChildren() {\n\t\tsuper._prepareChildren();\n\t\tconst chart = this.chart;\n\t\tif (chart) {\n\n\t\t\tif (this.isDirty(\"alignLabels\")) {\n\t\t\t\tlet labelsTemplate = this.labels.template;\n\t\t\t\tif (this.get(\"alignLabels\")) {\n\t\t\t\t\tlabelsTemplate.set(\"textType\", \"aligned\");\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tif (labelsTemplate.get(\"textType\") == null) {\n\t\t\t\t\t\tlabelsTemplate.set(\"textType\", \"adjusted\");\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\n\t\t\tif (this._valuesDirty || this.isDirty(\"radius\") || this.isDirty(\"innerRadius\") || this.isDirty(\"startAngle\") || this.isDirty(\"endAngle\")) {\n\t\t\t\tthis.markDirtyBounds();\n\t\t\t\tconst startAngle = this.get(\"startAngle\", chart.get(\"startAngle\", -90));\n\t\t\t\tconst endAngle = this.get(\"endAngle\", chart.get(\"endAngle\", 270));\n\t\t\t\tconst arc = endAngle - startAngle;\n\t\t\t\tlet currentAngle = startAngle;\n\n\t\t\t\tconst radius = chart.radius(this);\n\t\t\t\tthis.setPrivateRaw(\"radius\", radius);\n\t\t\t\tlet innerRadius = chart.innerRadius(this) * chart.getPrivate(\"irModifyer\", 1);\n\n\t\t\t\tif (innerRadius < 0) {\n\t\t\t\t\tinnerRadius = radius + innerRadius;\n\t\t\t\t}\n\n\t\t\t\tif (radius > 0) {\n\t\t\t\t\t$array.each(this._dataItems, (dataItem) => {\n\n\t\t\t\t\t\tthis.updateLegendValue(dataItem);\n\n\t\t\t\t\t\tlet currentArc = arc * dataItem.get(\"valuePercentTotal\") / 100;\n\t\t\t\t\t\tconst slice = dataItem.get(\"slice\");\n\t\t\t\t\t\tif (slice) {\n\t\t\t\t\t\t\tslice.set(\"radius\", radius);\n\t\t\t\t\t\t\tslice.set(\"innerRadius\", innerRadius);\n\t\t\t\t\t\t\tslice.set(\"startAngle\", currentAngle);\n\n\t\t\t\t\t\t\tslice.set(\"arc\", currentArc);\n\n\t\t\t\t\t\t\tconst color = dataItem.get(\"fill\");\n\t\t\t\t\t\t\tslice._setDefault(\"fill\", color);\n\t\t\t\t\t\t\tslice._setDefault(\"stroke\", color);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tlet middleAngle = $math.normalizeAngle(currentAngle + currentArc / 2);\n\n\t\t\t\t\t\tconst label = dataItem.get(\"label\");\n\t\t\t\t\t\tif (label) {\n\t\t\t\t\t\t\tlabel.setPrivate(\"radius\", radius);\n\t\t\t\t\t\t\tlabel.setPrivate(\"innerRadius\", innerRadius);\n\t\t\t\t\t\t\tlabel.set(\"labelAngle\", middleAngle);\n\n\t\t\t\t\t\t\tif (label.get(\"textType\") == \"aligned\") {\n\t\t\t\t\t\t\t\tlet labelRadius = radius + label.get(\"radius\", 0);\n\t\t\t\t\t\t\t\tlet y = radius * $math.sin(middleAngle);\n\n\t\t\t\t\t\t\t\tif (middleAngle > 90 && middleAngle <= 270) {\n\t\t\t\t\t\t\t\t\tif (!label.isHidden() && !label.isHiding()) {\n\t\t\t\t\t\t\t\t\t\tthis._lLabels.push({ label: label, y: y });\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tlabelRadius *= -1;\n\t\t\t\t\t\t\t\t\tlabelRadius -= this.labelsContainer.get(\"paddingLeft\", 0);\n\t\t\t\t\t\t\t\t\tlabel.set(\"centerX\", p100);\n\t\t\t\t\t\t\t\t\tlabel.setPrivateRaw(\"left\", true);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\telse {\n\t\t\t\t\t\t\t\t\tif (!label.isHidden() && !label.isHiding()) {\n\t\t\t\t\t\t\t\t\t\tthis._rLabels.push({ label: label, y: y });\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tlabelRadius += this.labelsContainer.get(\"paddingRight\", 0);\n\t\t\t\t\t\t\t\t\tlabel.set(\"centerX\", 0);\n\t\t\t\t\t\t\t\t\tlabel.setPrivateRaw(\"left\", false);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tlabel.set(\"x\", labelRadius);\n\t\t\t\t\t\t\t\tlabel.set(\"y\", radius * $math.sin(middleAngle));\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tcurrentAngle += currentArc;\n\t\t\t\t\t\tthis._updateTick(dataItem);\n\t\t\t\t\t})\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\tprotected _updateTick(dataItem: DataItem) {\n\t\tconst tick = dataItem.get(\"tick\");\n\t\tconst label = dataItem.get(\"label\");\n\t\tconst slice = dataItem.get(\"slice\");\n\t\tconst location = tick.get(\"location\", 1);\n\t\tif (tick && label && slice) {\n\t\t\tconst radius = (slice.get(\"shiftRadius\", 0) + slice.get(\"radius\", 0)) * slice.get(\"scale\", 1) * location;\n\t\t\tconst labelAngle = label.get(\"labelAngle\", 0);\n\t\t\tconst cos = $math.cos(labelAngle);\n\t\t\tconst sin = $math.sin(labelAngle);\n\n\t\t\tconst labelsContainer = this.labelsContainer;\n\t\t\tconst pl = labelsContainer.get(\"paddingLeft\", 0);\n\t\t\tconst pr = labelsContainer.get(\"paddingRight\", 0);\n\n\t\t\tlet x = 0;\n\t\t\tlet y = 0;\n\n\t\t\tx = label.x();\n\t\t\ty = label.y();\n\n\t\t\tif (label.get(\"textType\") == \"circular\") {\n\t\t\t\tconst labelRadius = label.radius() - label.get(\"paddingBottom\", 0);\n\t\t\t\tconst labelAngle = label.get(\"labelAngle\", 0);\n\t\t\t\tx = labelRadius * $math.cos(labelAngle);\n\t\t\t\ty = labelRadius * $math.sin(labelAngle);\n\t\t\t}\n\n\t\t\tlet dx = -pr;\n\t\t\tif (label.getPrivate(\"left\")) {\n\t\t\t\tdx = pl;\n\t\t\t}\n\n\t\t\ttick.set(\"points\", [{ x: slice.x() + radius * cos, y: slice.y() + radius * sin }, { x: x + dx, y: y }, { x: x, y: y }]);\n\t\t}\n\t}\n}\n","import { Graphics, IGraphicsSettings, IGraphicsPrivate } from \"../../core/render/Graphics\";\nimport type { IPoint } from \"../../core/util/IPoint\";\n\nexport interface IMapLineSettings extends IGraphicsSettings {\n\n\t/**\n\t * Top width in pixels.\n\t */\n\ttopWidth?: number;\n\n\t/**\n\t * Bottom width in pixels.\n\t */\n\tbottomWidth?: number;\n\n\t/**\n\t * Orientation.\n\t */\n\torientation?: \"vertical\" | \"horizontal\";\n\n\t/**\n\t * A distance in pixels the slice should \"puff up\".\n\t *\n\t * Any non-zero value will make sides of the slide curved.\n\t */\n\texpandDistance?: number;\n\n}\n\nexport interface IMapLinePrivate extends IGraphicsPrivate {\n}\n\n/**\n * Draws a slice for [[FunnelSeries]].\n */\nexport class FunnelSlice extends Graphics {\n\tdeclare public _settings: IMapLineSettings;\n\tdeclare public _privateSettings: IMapLinePrivate;\n\n\tpublic static className: string = \"FunnelSlice\";\n\tpublic static classNames: Array = Graphics.classNames.concat([FunnelSlice.className]);\n\tprotected _projectionDirty: boolean = false;\n\n\tprotected _tlx: number = 0;\n\tprotected _tly: number = 0;\n\n\tprotected _trx: number = 0;\n\tprotected _try: number = 0;\n\n\tprotected _blx: number = 0;\n\tprotected _bly: number = 0;\n\n\tprotected _brx: number = 0;\n\tprotected _bry: number = 0;\n\n\tprotected _cprx: number = 0;\n\tprotected _cplx: number = 0;\n\tprotected _cpry: number = 0;\n\tprotected _cply: number = 0;\n\n\tprotected _afterNew() {\n\t\tsuper._afterNew();\n\t\tthis.set(\"draw\", (display) => {\n\t\t\tdisplay.moveTo(this._tlx, this._tly);\n\t\t\tdisplay.lineTo(this._trx, this._try);\n\t\t\tdisplay.quadraticCurveTo(this._cprx, this._cpry, this._brx, this._bry);\n\t\t\tdisplay.lineTo(this._blx, this._bly);\n\t\t\tdisplay.quadraticCurveTo(this._cplx, this._cply, this._tlx, this._tly);\n\t\t})\n\t}\n\n\tpublic getPoint(locationX: number, locationY: number): IPoint {\n\t\tlet w = this.width();\n\t\tlet h = this.height();\n\n\t\tconst tw = this.get(\"topWidth\", 0);\n\t\tconst bw = this.get(\"bottomWidth\", 0);\n\n\t\tif (this.get(\"orientation\") == \"vertical\") {\n\t\t\tlet tlx = -tw / 2;\n\t\t\tlet trx = tw / 2;\n\n\t\t\tlet brx = bw / 2;\n\t\t\tlet blx = - bw / 2;\n\n\t\t\tlet mlx = tlx + (blx - tlx) * locationY;\n\t\t\tlet mrx = trx + (brx - trx) * locationY;\n\n\t\t\treturn { x: mlx + (mrx - mlx) * locationX, y: h * locationY };\n\t\t}\n\t\telse {\n\t\t\tlet tlx = -tw / 2;\n\t\t\tlet trx = tw / 2;\n\n\t\t\tlet brx = bw / 2;\n\t\t\tlet blx = - bw / 2;\n\n\t\t\tlet mlx = tlx + (blx - tlx) * locationX;\n\t\t\tlet mrx = trx + (brx - trx) * locationX;\n\n\t\t\treturn { x: w * locationX, y: mlx + (mrx - mlx) * locationY};\n\t\t}\n\n\t}\n\n\tpublic _changed() {\n\n\t\tif (this.isDirty(\"topWidth\") || this.isDirty(\"bottomWidth\") || this.isDirty(\"expandDistance\") || this.isDirty(\"orientation\") || this.isDirty(\"width\") || this.isDirty(\"height\")) {\n\t\t\tconst w = this.width();\n\t\t\tconst h = this.height();\n\t\t\tconst tw = this.get(\"topWidth\", 0);\n\t\t\tconst bw = this.get(\"bottomWidth\", 0);\n\t\t\tthis._clear = true;\n\n\t\t\tlet ed = this.get(\"expandDistance\", 0);\n\n\t\t\tif (this.get(\"orientation\") == \"vertical\") {\n\t\t\t\tthis._tlx = -tw / 2;\n\t\t\t\tthis._tly = 0;\n\n\t\t\t\tthis._trx = tw / 2;\n\t\t\t\tthis._try = 0;\n\n\t\t\t\tthis._brx = bw / 2;\n\t\t\t\tthis._bry = h;\n\n\t\t\t\tthis._blx = -bw / 2;\n\t\t\t\tthis._bly = h;\n\n\t\t\t\tthis._cprx = this._trx + (this._brx - this._trx) / 2 + ed * h,\n\t\t\t\tthis._cpry = this._try + 0.5 * h;\n\n\t\t\t\tthis._cplx = this._tlx + (this._blx - this._tlx) / 2 - ed * h;\n\t\t\t\tthis._cply = this._tly + 0.5 * h;\n\t\t\t}\n\t\t\telse {\n\t\t\t\tthis._tly = -tw / 2;\n\t\t\t\tthis._tlx = 0;\n\n\t\t\t\tthis._try = tw / 2;\n\t\t\t\tthis._trx = 0;\n\n\t\t\t\tthis._bry = bw / 2;\n\t\t\t\tthis._brx = w;\n\n\t\t\t\tthis._bly = -bw / 2;\n\t\t\t\tthis._blx = w;\n\n\t\t\t\tthis._cpry = this._try + (this._bry - this._try) / 2 + ed * w,\n\t\t\t\tthis._cprx = this._trx + 0.5 * w;\n\n\t\t\t\tthis._cply = this._tly + (this._bly - this._tly) / 2 - ed * w;\n\t\t\t\tthis._cplx = this._tlx + 0.5 * w;\n\t\t\t}\n\t\t}\n\t\tsuper._changed();\n\t}\n}\n","import type { DataItem } from \"../../core/render/Component\";\nimport type { SlicedChart } from \"./SlicedChart\";\n\nimport { PercentSeries, IPercentSeriesSettings, IPercentSeriesDataItem, IPercentSeriesPrivate } from \"../percent/PercentSeries\";\nimport { Template } from \"../../core/util/Template\";\nimport { ListTemplate } from \"../../core/util/List\";\nimport { FunnelSlice } from \"./FunnelSlice\";\nimport { Tick } from \"../../core/render/Tick\";\nimport { Label } from \"../../core/render/Label\";\nimport { percent, p50, p100 } from \"../../core/util/Percent\";\n\nimport * as $array from \"../../core/util/Array\";\nimport * as $type from \"../../core/util/Type\";\nimport * as $utils from \"../../core/util/Utils\";\n\n\nexport interface IFunnelSeriesDataItem extends IPercentSeriesDataItem {\n\tslice: FunnelSlice;\n\tlink: FunnelSlice;\n\tindex: number;\n}\n\nexport interface IFunnelSeriesSettings extends IPercentSeriesSettings {\n\n\t/**\n\t * Width of the bottom edge of the slice relative to the top edge of the next\n\t * slice.\n\t *\n\t * `1` - means the full width of the slice, resulting in a rectangle.\n\t * `0` - means using width of the next slice, resulting in a trapezoid.\n\t *\n\t * @see {@link https://www.amcharts.com/docs/v5/charts/percent-charts/sliced-chart/funnel-series/#Slice_bottom_width} for more info\n\t * @default 1\n\t */\n\tbottomRatio?: number;\n\n\t/**\n\t * Orientation of the series.\n\t *\n\t * @see {@link https://www.amcharts.com/docs/v5/charts/percent-charts/sliced-chart/#Series_orientation} for more info\n\t * @default \"vertical\"\n\t */\n\torientation: \"horizontal\" | \"vertical\";\n\n\t/**\n\t * If set to `true`, series will not create slices for data items with zero\n\t * value.\n\t */\n\tignoreZeroValues?: boolean;\n\n\t/**\n\t * Should labels be aligned into columns/rows?\n\t *\n\t * @default false\n\t */\n\talignLabels?: boolean;\n\n\t/**\n\t * Relative location within area available to series where it should start.\n\t *\n\t * `0` - beginning, `1` - end, or any intermediate value.\n\t *\n\t * @see {@link https://www.amcharts.com/docs/v5/charts/percent-charts/sliced-chart/funnel-series/#Start_end_locations} for more info\n\t * @default 0\n\t */\n\tstartLocation?: number;\n\n\t/**\n\t * Relative location within area available to series where it should start.\n\t *\n\t * `0` - beginning, `1` - end, or any intermediate value.\n\t *\n\t * @see {@link https://www.amcharts.com/docs/v5/charts/percent-charts/sliced-chart/funnel-series/#Start_end_locations} for more info\n\t * @default 0\n\t */\n\tendLocation?: number;\n\n}\n\nexport interface IFunnelSeriesPrivate extends IPercentSeriesPrivate {\n}\n\n/**\n * Creates a funnel series for use in a [[SlicedChart]].\n *\n * @see {@link https://www.amcharts.com/docs/v5/charts/percent-charts/sliced-chart/funnel-series/} for more info\n * @important\n */\nexport class FunnelSeries extends PercentSeries {\n\n\t/**\n\t * A chart series is attached to.\n\t */\n\tdeclare public chart: SlicedChart | undefined;\n\n\tprotected _tag = \"funnel\";\n\n\tdeclare public _sliceType: FunnelSlice;\n\tdeclare public _labelType: Label;\n\tdeclare public _tickType: Tick;\n\n\tprotected _makeSlices(): ListTemplate {\n\t\treturn new ListTemplate(\n\t\t\tTemplate.new({}),\n\t\t\t() => FunnelSlice._new(this._root, {\n\t\t\t\tthemeTags: $utils.mergeTags(this.slices.template.get(\"themeTags\", []), [this._tag, \"series\", \"slice\", this.get(\"orientation\")])\n\t\t\t}, [this.slices.template])\n\t\t);\n\t}\n\n\tprotected _makeLabels(): ListTemplate {\n\t\treturn new ListTemplate(\n\t\t\tTemplate.new({}),\n\t\t\t() => Label._new(this._root, {\n\t\t\t\tthemeTags: $utils.mergeTags(this.labels.template.get(\"themeTags\", []), [this._tag, \"series\", \"label\", this.get(\"orientation\")])\n\t\t\t}, [this.labels.template])\n\t\t);\n\t}\n\n\tprotected _makeTicks(): ListTemplate {\n\t\treturn new ListTemplate(\n\t\t\tTemplate.new({}),\n\t\t\t() => Tick._new(this._root, {\n\t\t\t\tthemeTags: $utils.mergeTags(this.ticks.template.get(\"themeTags\", []), [this._tag, \"series\", \"tick\", this.get(\"orientation\")])\n\t\t\t}, [this.ticks.template])\n\t\t);\n\t}\n\n\t/**\n\t * A [[ListTemplate]] of all slice links in series.\n\t *\n\t * `links.template` can also be used to configure slice links.\n\t *\n\t * @see {@link https://www.amcharts.com/docs/v5/charts/percent-charts/sliced-chart/funnel-series/#Slice_links} for more info\n\t */\n\tpublic readonly links: ListTemplate = this._makeLinks();\n\n\tprotected _makeLinks(): ListTemplate {\n\t\treturn new ListTemplate(\n\t\t\tTemplate.new({}),\n\t\t\t() => FunnelSlice._new(this._root, {\n\t\t\t\tthemeTags: $utils.mergeTags(this.links.template.get(\"themeTags\", []), [this._tag, \"series\", \"link\", this.get(\"orientation\")])\n\t\t\t}, [this.links.template]),\n\t\t);\n\t}\n\n\t/**\n\t * @ignore\n\t */\n\tpublic makeLink(dataItem: DataItem): this[\"_sliceType\"] {\n\t\tconst link = this.slicesContainer.children.push(this.links.make());\n\t\tlink._setDataItem(dataItem);\n\t\tdataItem.set(\"link\", link);\n\t\tthis.links.push(link);\n\t\treturn link;\n\t}\n\n\tpublic static className: string = \"FunnelSeries\";\n\tpublic static classNames: Array = PercentSeries.classNames.concat([FunnelSeries.className]);\n\n\tdeclare public _settings: IFunnelSeriesSettings;\n\tdeclare public _privateSettings: IFunnelSeriesPrivate;\n\tdeclare public _dataItemSettings: IFunnelSeriesDataItem;\n\n\tprotected _total: number = 0;\n\tprotected _count: number = 0;\n\tprotected _nextCoord: number = 0;\n\n\tprotected _opposite: boolean = false;\n\n\tprotected _afterNew() {\n\t\tsuper._afterNew();\n\t\tconst slicesContainer = this.slicesContainer;\n\t\tslicesContainer.setAll({ isMeasured: true, position: \"relative\", width: percent(100), height: percent(100) });\n\t\tslicesContainer.onPrivate(\"width\", () => {\n\t\t\tthis.markDirtySize();\n\t\t})\n\n\t\tslicesContainer.onPrivate(\"height\", () => {\n\t\t\tthis.markDirtySize();\n\t\t})\n\n\t\tif (this.get(\"orientation\") == \"vertical\") {\n\t\t\tthis.set(\"layout\", this._root.horizontalLayout);\n\t\t}\n\t\telse {\n\t\t\tthis.set(\"layout\", this._root.verticalLayout);\n\t\t}\n\t}\n\n\tprotected processDataItem(dataItem: DataItem) {\n\t\tsuper.processDataItem(dataItem);\n\n\t\tconst slice = this.makeSlice(dataItem);\n\n\t\tslice._setDataItem(dataItem);\n\n\t\tdataItem.set(\"slice\", slice);\n\n\t\tthis.makeLink(dataItem);\n\t\tconst label = this.makeLabel(dataItem);\n\n\t\tlabel.on(\"x\", () => {\n\t\t\tthis._updateTick(dataItem);\n\t\t})\n\n\t\tlabel.on(\"y\", () => {\n\t\t\tthis._updateTick(dataItem);\n\t\t})\n\n\t\tthis.makeTick(dataItem);\n\n\t\tslice.events.on(\"positionchanged\", () => {\n\t\t\tlabel.markDirty();\n\t\t})\n\n\t\tslice.events.on(\"boundschanged\", () => {\n\t\t\tconst dataItem = slice.dataItem;\n\t\t\tif (dataItem) {\n\t\t\t\tthis._updateTick(dataItem as any);\n\t\t\t}\n\t\t})\n\t}\n\n\n\tpublic _updateChildren() {\n\t\tthis._opposite = false;\n\t\tif (this.children.indexOf(this.labelsContainer) == 0) {\n\t\t\tthis._opposite = true;\n\t\t}\n\n\t\tlet total = 0;\n\t\tlet count = 0;\n\n\t\t$array.each(this.dataItems, (dataItem) => {\n\t\t\tconst value = dataItem.get(\"value\");\n\t\t\tif ($type.isNumber(value)) {\n\t\t\t\tcount++;\n\t\t\t\tif (value > 0) {\n\t\t\t\t\ttotal += Math.abs(dataItem.get(\"valueWorking\", value) / value);\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tif (this.get(\"ignoreZeroValues\", false)) {\n\t\t\t\t\t\tcount--;\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\tif (dataItem.isHidden()) {\n\t\t\t\t\t\t\tcount--;\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse {\n\t\t\t\t\t\t\ttotal += 1;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t})\n\n\t\tthis._total = 1 / count * total;\n\t\tthis._count = count;\n\n\t\tif (this.isDirty(\"alignLabels\")) {\n\t\t\tthis._fixLayout();\n\t\t}\n\n\t\tif (this._total > 0 && (this._valuesDirty || this._sizeDirty)) {\n\n\t\t\tconst slicesContainer = this.slicesContainer;\n\n\t\t\tlet h: number;\n\t\t\tif (this.get(\"orientation\") == \"vertical\") {\n\t\t\t\th = slicesContainer.innerHeight();\n\t\t\t}\n\t\t\telse {\n\t\t\t\th = slicesContainer.innerWidth();\n\t\t\t}\n\n\t\t\tthis._nextCoord = this.get(\"startLocation\", 0) * h;\n\n\t\t\tthis.markDirtyBounds();\n\n\t\t\tlet i = 0;\n\t\t\t$array.each(this._dataItems, (dataItem) => {\n\t\t\t\tthis.updateLegendValue(dataItem);\n\n\t\t\t\tdataItem.set(\"index\", i);\n\t\t\t\ti++;\n\n\t\t\t\tconst slice = dataItem.get(\"slice\");\n\t\t\t\tconst tick = dataItem.get(\"tick\");\n\t\t\t\tconst label = dataItem.get(\"label\");\n\t\t\t\tconst link = dataItem.get(\"link\");\n\t\t\t\tconst color = dataItem.get(\"fill\");\n\n\t\t\t\tslice._setDefault(\"fill\", color);\n\t\t\t\tslice._setDefault(\"stroke\", color);\n\t\t\t\tlink._setDefault(\"fill\", color);\n\t\t\t\tlink._setDefault(\"stroke\", color);\n\n\t\t\t\tconst value = dataItem.get(\"value\");\n\t\t\t\tif ($type.isNumber(value)) {\n\t\t\t\t\tif (value == 0 && this.get(\"ignoreZeroValues\")) {\n\t\t\t\t\t\tslice.setPrivate(\"visible\", false);\n\t\t\t\t\t\ttick.setPrivate(\"visible\", false);\n\t\t\t\t\t\tlabel.setPrivate(\"visible\", false);\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\tslice.setPrivate(\"visible\", true);\n\t\t\t\t\t\ttick.setPrivate(\"visible\", true);\n\t\t\t\t\t\tlabel.setPrivate(\"visible\", true);\n\n\t\t\t\t\t\tthis.decorateSlice(dataItem);\n\n\t\t\t\t\t\tif (this.isLast(dataItem)) {\n\t\t\t\t\t\t\tlink.setPrivate(\"visible\", false);\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse if (!dataItem.isHidden()) {\n\t\t\t\t\t\t\tlink.setPrivate(\"visible\", true);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t})\n\t\t}\n\t\tsuper._updateChildren();\n\t}\n\n\tprotected _fixLayout() {\n\n\t\tconst orientation = this.get(\"orientation\");\n\t\tconst labelsContainer = this.labelsContainer;\n\t\tconst labelsTemplate = this.labels.template;\n\n\t\tif (this.get(\"alignLabels\")) {\n\t\t\tlabelsContainer.set(\"position\", \"relative\");\n\t\t\tlabelsContainer.setAll({ isMeasured: true });\n\t\t\tif (orientation == \"vertical\") {\n\t\t\t\tthis.set(\"layout\", this._root.horizontalLayout);\n\t\t\t\tlabelsTemplate.setAll({ centerX: p100, x: p100 });\n\t\t\t}\n\t\t\telse {\n\t\t\t\tthis.set(\"layout\", this._root.verticalLayout);\n\t\t\t\tlabelsTemplate.setAll({ centerX: 0, x: 0 });\n\t\t\t}\n\t\t}\n\t\telse {\n\t\t\tlabelsContainer.setAll({ isMeasured: false, position: \"absolute\" });\n\t\t\tif (orientation == \"vertical\") {\n\t\t\t\tlabelsContainer.setAll({ x: p50 });\n\t\t\t\tlabelsTemplate.setAll({ centerX: p50, x: 0 });\n\t\t\t}\n\t\t\telse {\n\t\t\t\tlabelsContainer.setAll({ y: p50 });\n\t\t\t\tlabelsTemplate.setAll({ centerX: p50, y: 0 });\n\t\t\t}\n\t\t}\n\t\tthis.markDirtySize();\n\t}\n\n\tprotected getNextValue(dataItem: DataItem): number {\n\t\tlet index = dataItem.get(\"index\");\n\t\tlet nextValue = dataItem.get(\"valueWorking\", 0);\n\t\tif (index < this.dataItems.length - 1) {\n\t\t\tlet nextItem = this.dataItems[index + 1];\n\t\t\tnextValue = nextItem.get(\"valueWorking\", 0);\n\n\t\t\tif (nextItem.isHidden() || (nextItem.get(\"value\") == 0 && this.get(\"ignoreZeroValues\"))) {\n\t\t\t\treturn this.getNextValue(nextItem);\n\t\t\t}\n\t\t}\n\t\treturn nextValue;\n\t}\n\n\tprotected isLast(dataItem: DataItem): boolean {\n\t\tlet index = dataItem.get(\"index\");\n\t\tif (index == this.dataItems.length - 1) {\n\t\t\treturn true;\n\t\t}\n\t\telse {\n\t\t\tfor (let i = index + 1; i < this.dataItems.length; i++) {\n\t\t\t\tif (!this.dataItems[i].isHidden()) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn true;\n\t}\n\n\tprotected decorateSlice(dataItem: DataItem) {\n\t\tconst orientation = this.get(\"orientation\");\n\n\t\tconst slice = dataItem.get(\"slice\");\n\t\tconst label = dataItem.get(\"label\");\n\t\tconst link = dataItem.get(\"link\");\n\n\t\tconst slicesContainer = this.slicesContainer;\n\n\t\tlet maxWidth = slicesContainer.innerWidth();\n\t\tlet maxHeight = slicesContainer.innerHeight();\n\n\t\tlet maxSize = maxWidth;\n\t\tif (orientation == \"horizontal\") {\n\t\t\tmaxSize = maxHeight;\n\t\t}\n\n\t\tconst nextValue = this.getNextValue(dataItem);\n\t\tconst value = dataItem.get(\"value\", 0);\n\t\tconst workingValue = Math.abs(dataItem.get(\"valueWorking\", value));\n\t\tconst bottomRatio = this.get(\"bottomRatio\", 0);\n\t\tconst valueHigh = this.getPrivate(\"valueHigh\", 0);\n\n\n\t\tlet d = 1;\n\t\tif (value != 0) {\n\t\t\td = workingValue / Math.abs(value);\n\t\t}\n\t\telse {\n\t\t\tif (dataItem.isHidden()) {\n\t\t\t\td = 0.000001;\n\t\t\t}\n\t\t}\n\n\t\tif (this._nextCoord == Infinity) {\n\t\t\tthis._nextCoord = 0;\n\t\t}\n\n\t\tlet topWidth = workingValue / valueHigh * maxSize;\n\t\tlet bottomWidth = (workingValue - (workingValue - nextValue) * bottomRatio) / valueHigh * maxSize;\n\n\t\tslice.setAll({ topWidth, bottomWidth, orientation });\n\t\tlink.setAll({ topWidth: bottomWidth, bottomWidth: (workingValue - (workingValue - nextValue)) / valueHigh * maxSize, orientation });\n\n\t\tconst startLocation = this.get(\"startLocation\", 0);\n\t\tconst endLocation = this.get(\"endLocation\", 1);\n\n\t\tif (orientation == \"vertical\") {\n\n\t\t\tlet linkHeight = link.height() * d;\n\n\t\t\tmaxHeight = maxHeight * (endLocation - startLocation) + linkHeight;\n\n\t\t\tslice.set(\"y\", this._nextCoord);\n\n\t\t\tlet height = Math.min(100000, Math.max(0, maxHeight / this._count * d / this._total - linkHeight));\n\n\t\t\tslice.setAll({ height, x: maxWidth / 2 });\n\t\t\tlet labelY = this._nextCoord + height / 2;\n\t\t\tlabel.set(\"y\", labelY);\n\n\t\t\tthis._nextCoord += height + linkHeight;\n\t\t\tlink.setAll({ y: this._nextCoord - linkHeight, x: maxWidth / 2 });\n\t\t}\n\t\telse {\n\t\t\tlet linkHeight = link.width() * d;\n\n\t\t\tmaxWidth = maxWidth * (endLocation - startLocation) + linkHeight;\n\n\t\t\tslice.set(\"x\", this._nextCoord);\n\n\t\t\tlet width = Math.min(100000, Math.max(0, maxWidth / this._count * d / this._total - linkHeight));\n\n\t\t\tslice.setAll({ width, y: maxHeight / 2 });\n\t\t\tconst labelX = this._nextCoord + width / 2;\n\t\t\tlabel.set(\"x\", labelX);\n\n\t\t\tthis._nextCoord += width + linkHeight;\n\t\t\tlink.setAll({ x: this._nextCoord - linkHeight, y: maxHeight / 2 });\n\t\t}\n\t}\n\n\t/**\n\t * Hides series's data item.\n\t *\n\t * @param dataItem Data item\n\t * @param duration Animation duration in milliseconds\n\t * @return Promise\n\t */\n\tpublic async hideDataItem(dataItem: DataItem, duration?: number): Promise {\n\t\tdataItem.get(\"link\").hide(duration);\n\t\treturn super.hideDataItem(dataItem, duration)\n\t}\n\n\t/**\n\t * Shows series's data item.\n\t *\n\t * @param dataItem Data item\n\t * @param duration Animation duration in milliseconds\n\t * @return Promise\n\t */\n\tpublic async showDataItem(dataItem: DataItem, duration?: number): Promise {\n\t\tdataItem.get(\"link\").show(duration);\n\t\treturn super.showDataItem(dataItem, duration)\n\t}\n\n\tprotected _updateTick(dataItem: DataItem) {\n\t\tif (this.get(\"alignLabels\")) {\n\t\t\tconst tick = dataItem.get(\"tick\");\n\t\t\tconst label = dataItem.get(\"label\");\n\t\t\tconst slice = dataItem.get(\"slice\");\n\n\t\t\tif (tick && slice && label) {\n\n\t\t\t\tconst labelsContainer = this.labelsContainer;\n\t\t\t\tconst slicesContainer = this.slicesContainer;\n\t\t\t\tlet tickLocation = tick.get(\"location\", 0.5);\n\n\t\t\t\tconst lcw = labelsContainer.width();\n\t\t\t\tconst lch = labelsContainer.height();\n\n\t\t\t\tconst pl = labelsContainer.get(\"paddingLeft\", 0);\n\t\t\t\tconst pr = labelsContainer.get(\"paddingRight\", 0);\n\t\t\t\tconst pt = labelsContainer.get(\"paddingTop\", 0);\n\t\t\t\tconst pb = labelsContainer.get(\"paddingBottom\", 0);\n\n\t\t\t\tlet p0 = { x: 0, y: 0 };\n\t\t\t\tlet p1 = { x: 0, y: 0 };\n\t\t\t\tlet p2 = { x: 0, y: 0 };\n\n\t\t\t\tif (this._opposite) {\n\t\t\t\t\ttickLocation = 1 - tickLocation;\n\t\t\t\t}\n\n\t\t\t\tif (this.get(\"orientation\") == \"vertical\") {\n\t\t\t\t\tp0 = slice.getPoint(tickLocation, 0.5);\n\t\t\t\t\tp0.x += slice.x() + slicesContainer.x();\n\t\t\t\t\tp0.y += slice.y() + slicesContainer.y();\n\n\t\t\t\t\tif (this._opposite) {\n\t\t\t\t\t\tp1.x = lcw;\n\t\t\t\t\t\tp1.y = label.y();\n\n\t\t\t\t\t\tp2.x = lcw - pl;\n\t\t\t\t\t\tp2.y = p1.y;\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\tp1.x = slicesContainer.x() + slicesContainer.width();\n\t\t\t\t\t\tp1.y = label.y();\n\n\t\t\t\t\t\tp2.x = p1.x + lcw - label.width() - pr;\n\t\t\t\t\t\tp2.y = p1.y;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tp0 = slice.getPoint(0.5, tickLocation);\n\t\t\t\t\tp0.x += slice.x() + slicesContainer.x();\n\t\t\t\t\tp0.y += slice.y() + slicesContainer.y();\n\n\t\t\t\t\tif (this._opposite) {\n\t\t\t\t\t\tp1.y = lch;\n\t\t\t\t\t\tp1.x = label.x();\n\n\t\t\t\t\t\tp2.y = lch - pt;\n\t\t\t\t\t\tp2.x = p1.x;\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\tp1.y = slicesContainer.y() + slicesContainer.height();\n\t\t\t\t\t\tp1.x = label.x();\n\n\t\t\t\t\t\tp2.y = p1.y + lch - label.height() - pb;\n\t\t\t\t\t\tp2.x = p1.x;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\ttick.set(\"points\", [p0, p1, p2]);\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * @ignore\n\t */\n\tpublic disposeDataItem(dataItem: DataItem) {\n\t\tsuper.disposeDataItem(dataItem);\n\t\tlet link = dataItem.get(\"link\");\n\t\tif (link) {\n\t\t\tthis.links.removeValue(link);\n\t\t\tlink.dispose();\n\t\t}\n\t}\n}\n","import type { DataItem } from \"../../core/render/Component\";\nimport { FunnelSeries, IFunnelSeriesSettings, IFunnelSeriesDataItem, IFunnelSeriesPrivate } from \"./FunnelSeries\";\nimport { Percent, p100 } from \"../../core/util/Percent\";\nimport * as $utils from \"../../core/util/Utils\";\nimport * as $type from \"../../core/util/Type\";\n\nexport interface IPyramidSeriesDataItem extends IFunnelSeriesDataItem {\n\n}\n\nexport interface IPyramidSeriesSettings extends IFunnelSeriesSettings {\n\n\t/**\n\t * The width of the tip of the pyramid.\n\t *\n\t * Can either be a fixed pixel value or percent relative to the space\n\t * available to the series.\n\t *\n\t * @see {@link https://www.amcharts.com/docs/v5/charts/percent-charts/sliced-chart/pyramid-series/#Tip_and_base} for more info\n\t * @default 0\n\t */\n\ttopWidth?: number | Percent;\n\n\t/**\n\t * The width of the base of the pyramid.\n\t *\n\t * Can either be a fixed pixel value or percent relative to the space\n\t * available to the series.\n\t *\n\t * @see {@link https://www.amcharts.com/docs/v5/charts/percent-charts/sliced-chart/pyramid-series/#Tip_and_base} for more info\n\t * @default 0\n\t */\n\tbottomWidth?: number | Percent;\n\n\t/**\n\t * Determines calculation mechanism for the slice area based on value.\n\t *\n\t * @see {@link https://www.amcharts.com/docs/v5/charts/percent-charts/sliced-chart/pyramid-series/#Slice_size} for more info\n\t * @default \"area\"\n\t */\n\tvalueIs?: \"area\" | \"height\";\n\n}\n\nexport interface IPyramidSeriesPrivate extends IFunnelSeriesPrivate {\n}\n\n/**\n * Creates a pyramid series for use in a [[SlicedChart]].\n *\n * @see {@link https://www.amcharts.com/docs/v5/charts/percent-charts/sliced-chart/pyramid-series/} for more info\n * @important\n */\nexport class PyramidSeries extends FunnelSeries {\n\tprotected _tag = \"pyramid\";\n\n\tpublic static className: string = \"PyramidSeries\";\n\tpublic static classNames: Array = FunnelSeries.classNames.concat([PyramidSeries.className]);\n\n\tdeclare public _settings: IPyramidSeriesSettings;\n\tdeclare public _privateSettings: IPyramidSeriesPrivate;\n\tdeclare public _dataItemSettings: IPyramidSeriesDataItem;\n\n\tprotected _nextSize: number | undefined;\n\n\tpublic _prepareChildren() {\n\t\tsuper._prepareChildren();\n\t\tthis._nextSize = undefined;\n\t}\n\n\tprotected decorateSlice(dataItem: DataItem) {\n\t\tconst orientation = this.get(\"orientation\");\n\t\tconst slicesContainer = this.slicesContainer;\n\n\t\tconst slice = dataItem.get(\"slice\");\n\t\tconst label = dataItem.get(\"label\");\n\t\tconst link = dataItem.get(\"link\");\n\t\tconst valueIs = this.get(\"valueIs\", \"area\");\n\n\t\tconst sum = this.getPrivate(\"valueAbsoluteSum\", 0);\n\n\t\tif (sum == 0) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst startLocation = this.get(\"startLocation\", 0);\n\t\tconst endLocation = this.get(\"endLocation\", 1);\n\n\t\tconst tw = this.get(\"topWidth\", 0);\n\t\tconst bw = this.get(\"bottomWidth\", p100);\n\n\t\tconst workingValue = Math.abs(dataItem.get(\"valueWorking\", 0));\n\t\tconst value = dataItem.get(\"value\", 0);\n\n\t\tlet sliceHeight: number;\n\t\tlet sliceBottomWidth: number;\n\n\t\tlet pyramidHeight = slicesContainer.innerHeight();\n\t\tlet pyramidWidth = slicesContainer.innerWidth();\n\t\tlet linkWidth = link.width();\n\t\tlet linkHeight = link.height();\n\n\t\tif (orientation == \"horizontal\") {\n\t\t\t[pyramidWidth, pyramidHeight] = [pyramidHeight, pyramidWidth];\n\t\t\t[linkWidth, linkHeight] = [linkHeight, linkWidth];\n\t\t}\n\n\t\tconst center = pyramidWidth / 2;\n\n\t\tlet d = 1;\n\t\tif (value != 0) {\n\t\t\td = workingValue / Math.abs(value);\n\t\t}\n\t\telse {\n\t\t\tif (dataItem.isHidden()) {\n\t\t\t\td = 0.000001;\n\t\t\t}\n\t\t}\n\n\t\tlinkHeight *= d;\n\n\t\tpyramidHeight = pyramidHeight * (endLocation - startLocation) - linkHeight * (this._count * this._total - 1);\n\n\t\tlet topWidth = $utils.relativeToValue(tw, pyramidWidth);\n\n\t\tif (!$type.isNumber(this._nextSize)) {\n\t\t\tthis._nextSize = topWidth;\n\t\t}\n\n\t\tlet bottomWidth = $utils.relativeToValue(bw, pyramidWidth);\n\t\tlet sliceTopWidth = this._nextSize;\n\n\t\tlet angle = Math.atan2(pyramidHeight, topWidth - bottomWidth);\n\t\tlet c = Math.tan(Math.PI / 2 - angle);\n\t\tif (c == 0) {\n\t\t\tc = 0.00000001;\n\t\t}\n\n\t\tif (valueIs == \"area\") {\n\t\t\tlet totalSquare = (topWidth + bottomWidth) / 2 * pyramidHeight;\n\t\t\tlet square = totalSquare * workingValue / sum;\n\n\t\t\tlet s = Math.abs(sliceTopWidth * sliceTopWidth - 2 * square * c);\n\n\t\t\tsliceHeight = (sliceTopWidth - Math.sqrt(s)) / c;\n\n\t\t\tif (sliceHeight > 0) {\n\t\t\t\tsliceBottomWidth = (2 * square - sliceHeight * sliceTopWidth) / sliceHeight;\n\t\t\t}\n\t\t\telse {\n\t\t\t\tsliceBottomWidth = sliceTopWidth;\n\t\t\t}\n\t\t}\n\t\telse {\n\t\t\tsliceHeight = pyramidHeight * workingValue / sum;\n\t\t\tsliceBottomWidth = sliceTopWidth - sliceHeight * c;\n\t\t}\n\n\t\tlet labelCoord = this._nextCoord + sliceHeight / 2;\n\t\tlet sliceX = center;\n\t\tlet sliceY = this._nextCoord;\n\n\t\tlet linkX = center;\n\t\tlet linkY = sliceY + sliceHeight;\n\n\t\tif (orientation == \"vertical\") {\n\t\t\tlabel.set(\"y\", labelCoord);\n\t\t\tif (label.get(\"opacity\") > 0) {\n\t\t\t\tthis._rLabels.push({ label: label, y: labelCoord });\n\t\t\t}\n\t\t\tslice.set(\"height\", sliceHeight);\n\t\t}\n\t\telse {\n\t\t\tlabel.set(\"x\", labelCoord);\n\t\t\tif (label.get(\"opacity\") > 0) {\n\t\t\t\tthis._hLabels.push({ label: label, y: labelCoord });\n\t\t\t}\n\t\t\t[sliceX, sliceY] = [sliceY, sliceX];\n\t\t\t[linkX, linkY] = [linkY, linkX];\n\n\t\t\tslice.set(\"width\", sliceHeight);\n\t\t}\n\n\t\tslice.setAll({ orientation, bottomWidth: sliceBottomWidth, topWidth: sliceTopWidth, x: sliceX, y: sliceY });\n\t\tlink.setAll({ orientation, x: linkX, y: linkY, topWidth: sliceBottomWidth, bottomWidth: sliceBottomWidth });\n\n\t\tthis._nextSize = sliceBottomWidth;\n\t\tthis._nextCoord += sliceHeight + linkHeight;\n\t}\n}\n","import { PyramidSeries, IPyramidSeriesSettings, IPyramidSeriesDataItem, IPyramidSeriesPrivate } from \"./PyramidSeries\";\nimport { Graphics } from \"../../core/render/Graphics\";\nimport { p100, p50 } from \"../../core/util/Percent\"\n\n\nexport interface IPictorialStackedSeriesDataItem extends IPyramidSeriesDataItem {\n\n}\n\nexport interface IPictorialStackedSeriesSettings extends IPyramidSeriesSettings {\n\n\t/**\n\t * An SVG path that will define the shape of the pictorial series.\n\t *\n\t * @see {@link https://www.amcharts.com/docs/v5/charts/percent-charts/sliced-chart/pictorial-stacked-series/#Shape_of_the_series} for more info\n\t */\n\tsvgPath?: string;\n\n}\n\nexport interface IPictorialStackedSeriesPrivate extends IPyramidSeriesPrivate {\n}\n\n/**\n * Creates a pictorial series for use in a [[SlicedChart]].\n *\n * @see {@link https://www.amcharts.com/docs/v5/charts/percent-charts/sliced-chart/pictorial-stacked-series/} for more info\n * @important\n */\nexport class PictorialStackedSeries extends PyramidSeries {\n\tprotected _tag = \"pictorial\";\n\n\tpublic static className: string = \"PictorialStackedSeries\";\n\tpublic static classNames: Array = PyramidSeries.classNames.concat([PictorialStackedSeries.className]);\n\n\tdeclare public _settings: IPictorialStackedSeriesSettings;\n\tdeclare public _privateSettings: IPictorialStackedSeriesPrivate;\n\tdeclare public _dataItemSettings: IPictorialStackedSeriesDataItem;\n\n\t/**\n\t * A [[Graphics]] element to used as a mask (shape) for the series.\n\t *\n\t * This element is read-only. To modify the mask/shape, use the `svgPath` setting.\n\t */\n\tpublic readonly seriesMask: Graphics = Graphics.new(this._root, { position: \"absolute\", x: p50, y: p50, centerX: p50, centerY: p50 });\n\n\tpublic readonly seriesGraphics: Graphics = this.slicesContainer.children.push(Graphics.new(this._root, { themeTags: [\"pictorial\", \"background\"], position: \"absolute\", x: p50, y: p50, centerX: p50, centerY: p50 }));\n\n\tprotected _afterNew() {\n\t\tsuper._afterNew();\n\t\tthis.set(\"topWidth\", p100);\n\t\tthis.set(\"bottomWidth\", p100);\n\t\tthis.set(\"valueIs\", \"height\");\n\t\tthis.slicesContainer.set(\"mask\", this.seriesMask);\n\t}\n\n\tprotected _updateScale() {\n\t\tlet slicesContainer = this.slicesContainer;\n\n\t\tlet w = slicesContainer.innerWidth();\n\t\tlet h = slicesContainer.innerHeight();\n\n\t\tlet seriesMask = this.seriesMask;\n\t\tlet seriesGraphics = this.seriesGraphics;\n\t\tlet scale = seriesMask.get(\"scale\", 1);\n\n\t\tconst bounds = seriesMask.localBounds();\n\n\t\tlet mw = bounds.right - bounds.left;\n\t\tlet mh = bounds.bottom - bounds.top;\n\t\tif (this.get(\"orientation\") == \"horizontal\") {\n\t\t\tscale = w / mw;\n\t\t}\n\t\telse {\n\t\t\tscale = h / mh;\n\t\t}\n\t\tif (scale != Infinity && scale != NaN) {\n\t\t\tseriesMask.set(\"scale\", scale);\n\t\t\tseriesMask.set(\"x\", w / 2);\n\t\t\tseriesMask.set(\"y\", h / 2);\n\n\t\t\tseriesGraphics.set(\"scale\", scale);\n\t\t\tseriesGraphics.set(\"x\", w / 2);\n\t\t\tseriesGraphics.set(\"y\", h / 2);\n\t\t}\n\t}\n\n\tpublic _prepareChildren() {\n\t\tsuper._prepareChildren();\n\t\tif (this.isDirty(\"svgPath\")) {\n\t\t\tconst svgPath = this.get(\"svgPath\");\n\t\t\tthis.seriesMask.set(\"svgPath\", svgPath);\n\t\t\tthis.seriesGraphics.set(\"svgPath\", svgPath);\n\t\t}\n\n\t\tthis._updateScale();\n\t}\n\n}\n","import { PercentChart, IPercentChartPrivate, IPercentChartSettings } from \"../percent/PercentChart\";\nimport type { PercentSeries } from \"../percent/PercentSeries\";\n\n\nexport interface ISlicedChartSettings extends IPercentChartSettings {\n}\n\nexport interface ISlicedChartPrivate extends IPercentChartPrivate {\n}\n\n/**\n * Creates a sliced chart for use with [[FunnelSeries]], [[PyramidSeries]], or [[PictorialStackedSeries]].\n *\n * @see {@link https://www.amcharts.com/docs/v5/charts/percent-charts/pie-chart/} for more info\n * @important\n */\nexport class SlicedChart extends PercentChart {\n\tprotected _afterNew() {\n\t\tsuper._afterNew();\n\n\t\tthis.seriesContainer.setAll({ isMeasured:true, layout: this._root.horizontalLayout });\n\t}\n\n\tpublic static className: string = \"SlicedChart\";\n\tpublic static classNames: Array = PercentChart.classNames.concat([SlicedChart.className]);\n\n\tdeclare public _settings: ISlicedChartSettings;\n\tdeclare public _privateSettings: ISlicedChartPrivate;\n\tdeclare public _seriesType: PercentSeries;\n}\n","import * as m from \"./../../dist/es2015/percent.js\";\nexport const am5percent = m;"],"sourceRoot":""}