Your IP : 18.222.113.145
{"version":3,"sources":["webpack:///../../../../../src/.internal/plugins/sliceGrouper/SliceGrouper.ts","webpack:///./plugins/sliceGrouper.js"],"names":["SliceGrouper_SliceGrouper","_super","SliceGrouper","_this","call","this","smallSlices","List","bigSlices","groupName","groupProperties","syncLegend","_threshold","_clickDisposers","_clickBehavior","_ignoreDataUpdate","_closed","Object","tslib_es6","prototype","init","processSeries","series","target","chart","baseSprite","dataProvider","data","length","_disposers","push","events","on","ev","groupSlice","undefined","clear","groupSliceItem","groupValue","dataItems","each","item","value","values","percent","dataContext","sliceGrouperOther","threshold","hiddenInLegend","hide","hidden","label","slice","dataFields","validateRawData","groupData","category","addData","slices","dataItem","initSlices","utils_Object","key","val","clickBehavior","has","toggleGroupOn","once","toggleGroupOff","show","feedLegend","zoomOutButton","disableType","enableType","defineProperty","_zoomOutButton","tooltipContainer","createChild","ZoomOutButton","shouldClone","align","valign","zIndex","Number","MAX_SAFE_INTEGER","marginTop","marginRight","dispose","disposeClickEvents","a","shift","Plugin","Registry","registeredClasses","window","am4plugins_sliceGrouper","sliceGrouper_namespaceObject"],"mappings":";;;;;;;;;;;;;;;;;;;wPA4EAA,EAAA,SAAAC,GA4EC,SAAAC,IAAA,IAAAC,EAECF,EAAAG,KAAAC,OAAOA,YA/DDF,EAAAG,YAAkD,IAAIC,EAAA,EAKtDJ,EAAAK,UAAgD,IAAID,EAAA,EAOpDJ,EAAAM,UAAoB,QAQpBN,EAAAO,mBAQAP,EAAAQ,YAAsB,EAKnBR,EAAAS,WAAqB,EAWrBT,EAAAU,mBAKAV,EAAAW,eAA4C,OAE5CX,EAAAY,mBAA6B,EAK7BZ,EAAAa,SAAmB,IA8T9B,OArYkCC,OAAAC,EAAA,EAAAD,CAAAf,EAAAD,GAiF1BC,EAAAiB,UAAAC,KAAP,WACCnB,EAAAkB,UAAMC,KAAIhB,KAAAC,MACVA,KAAKgB,iBAOEnB,EAAAiB,UAAAE,cAAR,eAAAlB,EAAAE,KAEOiB,EAASjB,KAAKkB,OACdC,EAAsBF,EAAOG,WAC7BC,EAA0BJ,EAAOK,MAAQL,EAAOK,KAAKC,OAASN,EAASE,EAG7EnB,KAAKwB,WAAWC,KAAKJ,EAAaK,OAAOC,GAAG,gBAAiB,SAACC,GAE7D,GAAI9B,EAAKY,kBACRZ,EAAKY,mBAAoB,MAD1B,CAKAZ,EAAK+B,gBAAaC,EAClBhC,EAAKG,YAAY8B,QACjBjC,EAAKK,UAAU4B,QAGf,IACIC,EADAC,EAAa,EA6BjB,GA3BAhB,EAAOiB,UAAUC,KAAK,SAACC,GACtB,IAAIC,EAAQD,EAAKE,OAAOD,MAAME,QACpBH,EAAKI,YAAaC,kBAC3BT,EAAiBI,EAAKI,YAEdH,GAASvC,EAAK4C,WACtBT,GAAcG,EAAKC,MACnBD,EAAKO,gBAAiB,EACtBP,EAAKQ,OACLR,EAAKS,QAAS,EAIdT,EAAKU,MAAMpB,OAAOC,GAAG,kBAAmB,SAACC,GACpC9B,EAAKa,SACRyB,EAAKQ,SAIP9C,EAAKG,YAAYwB,KAAKW,EAAKW,QAG3BjD,EAAKK,UAAUsB,KAAKW,EAAKW,SAKvBd,EAAa,EAChB,GAAID,EACGA,EAAgBf,EAAO+B,WAAWX,OAASJ,EACjDnC,EAAKY,mBAAoB,EACzBW,EAAa4B,sBAET,CACJ,IAAIC,GACHT,mBAAmB,GAEpBS,EAAUjC,EAAO+B,WAAWG,UAAYrD,EAAKM,UAC7C8C,EAAUjC,EAAO+B,WAAWX,OAASJ,EACrCnC,EAAKY,mBAAoB,EACzBW,EAAa+B,QAAQF,QAKxBlD,KAAKwB,WAAWC,KAAKR,EAAOS,OAAOC,GAAG,YAAa,SAACC,GACnDX,EAAOoC,OAAOlB,KAAK,SAACY,GACTA,EAAMO,SAASd,YAAaC,oBAChC3C,EAAK+B,aACT/B,EAAK+B,WAAakB,EAClBjD,EAAKyD,qBAWF1D,EAAAiB,UAAAyC,WAAR,eAAAzD,EAAAE,KAEMA,KAAK6B,aAKV2B,EAAA,KAAaxD,KAAKK,gBAAiB,SAACoD,EAAKC,GAClC5D,EAAK+B,WAAY4B,GAAOC,IAIL,QAAtB1D,KAAK2D,gBAEH3D,KAAK6B,WAAWH,OAAOkC,IAAI,QAC/B5D,KAAKQ,gBAAgBiB,KAAKzB,KAAK6B,WAAWH,OAAOC,GAAG,MAAO,SAACC,GAC3D9B,EAAK+D,sBAUDhE,EAAAiB,UAAA+C,cAAR,eAAA/D,EAAAE,KAE2B,QAAtBA,KAAK2D,gBAIT3D,KAAKW,SAAU,EAGfX,KAAK6B,WAAWyB,SAASV,OACrB5C,KAAKM,aACFN,KAAK6B,WAAWyB,SAAUX,gBAAiB,GAGlD3C,KAAKQ,gBAAgBiB,KAAKzB,KAAK6B,WAAWH,OAAOoC,KAAK,QAAS,SAAClC,GAC/D9B,EAAKiE,oBAIN/D,KAAKC,YAAYkC,KAAK,SAACY,GACtBA,EAAMO,SAAST,QAAS,EACxBE,EAAMO,SAASU,OACXlE,EAAKQ,aACFyC,EAAMO,SAAUX,gBAAiB,KAMf,QAAtB3C,KAAK2D,eACR3D,KAAKG,UAAUgC,KAAK,SAACY,GACpBA,EAAMO,SAASV,OACX9C,EAAKQ,aACFyC,EAAMO,SAAUX,gBAAiB,KAKtC3C,KAAKM,YACFN,KAAKkB,OAAOE,WAAY6C,aAI/BjE,KAAKkE,cAAcF,SAMZnE,EAAAiB,UAAAiD,eAAR,eAAAjE,EAAAE,KAE2B,QAAtBA,KAAK2D,gBAIT3D,KAAKW,SAAU,EAGfX,KAAK6B,WAAWH,OAAOyC,YAAY,SACnCnE,KAAK6B,WAAWyB,SAASU,OACzBhE,KAAK6B,WAAWH,OAAO0C,WAAW,SAC9BpE,KAAKM,aACFN,KAAK6B,WAAWyB,SAAUX,gBAAiB,GAKxB,QAAtB3C,KAAK2D,eACR3D,KAAKG,UAAUgC,KAAK,SAACY,GACpBA,EAAMO,SAAST,QAAS,EACxBE,EAAMO,SAASU,OACXlE,EAAKQ,aACFyC,EAAMO,SAAUX,gBAAiB,KAM1C3C,KAAKC,YAAYkC,KAAK,SAACY,GACtBA,EAAMO,SAASV,OACX9C,EAAKQ,aACFyC,EAAMO,SAAUX,gBAAiB,KAIrC3C,KAAKM,YACFN,KAAKkB,OAAOE,WAAY6C,aAI/BjE,KAAKkE,cAActB,SAUpBhC,OAAAyD,eAAWxE,EAAAiB,UAAA,iBASX,WACC,OAAOd,KAAKO,gBAVb,SAAqB8B,GAChBrC,KAAKO,YAAc8B,IACtBrC,KAAKO,WAAa8B,oCAiBpBzB,OAAAyD,eAAWxE,EAAAiB,UAAA,qBAOX,eAAAhB,EAAAE,KACC,IAAKA,KAAKsE,eAAgB,CACzB,IACIJ,EADwBlE,KAAKkB,OAAOE,WACdmD,iBAAiBC,YAAYC,EAAA,GACvDP,EAAcQ,aAAc,EAC5BR,EAAcS,MAAQ,QACtBT,EAAcU,OAAS,MACvBV,EAAcW,OAASC,OAAOC,iBAC9Bb,EAAcc,UAAY,EAC1Bd,EAAce,YAAc,EAE5Bf,EAActB,KAAK,GACnB5C,KAAKkE,cAAgBA,EACrBlE,KAAKwB,WAAWC,KAAKzB,KAAKsE,gBAE1BJ,EAAcxC,OAAOC,GAAG,MAAO,WAC9B7B,EAAKiE,kBACH/D,MAEJ,OAAOA,KAAKsE,oBA1Bb,SAAyBjC,GACxBrC,KAAKsE,eAAiBjC,mCAqCvBzB,OAAAyD,eAAWxE,EAAAiB,UAAA,qBAUX,WACC,OAAOd,KAAKS,oBAXb,SAAyB4B,GACpBrC,KAAKS,gBAAkB4B,IAC1BrC,KAAKS,eAAiB4B,EACtBrC,KAAKuD,+CAcA1D,EAAAiB,UAAAoE,QAAP,WACClF,KAAKmF,qBACLnF,KAAK6B,gBAAaC,EAClB9B,KAAKC,YAAY8B,QACjB/B,KAAKG,UAAU4B,QACfnC,EAAAkB,UAAMoE,QAAOnF,KAAAC,OAGNH,EAAAiB,UAAAqE,mBAAR,WACC,IAAMC,EAAIpF,KAAKQ,gBAEf,IADAR,KAAKQ,gBAAuB,KACR,IAAb4E,EAAE7D,QAAc,CACL6D,EAAEC,QACVH,YAIZrF,EArYA,CAAkCyF,EAAA,GA6YlCC,EAAA,EAASC,kBAAgC,aAAI7F,ECxd7C8F,OAAAC,wBAAiCC","file":"./plugins/sliceGrouper.js","sourcesContent":["/**\r\n * Plugin for automatically grouping small chart slices into single group.\r\n */\r\n\r\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\r\nimport { Plugin } from \"../../core/utils/Plugin\";\r\nimport { PercentSeries } from \"../../charts/series/PercentSeries\";\r\nimport { FunnelSlice, IFunnelSliceProperties } from \"../../charts/elements/FunnelSlice\";\r\nimport { PercentChart } from \"../../charts/types/PercentChart\";\r\nimport { IDisposer } from \"../../core/utils/Disposer\";\r\nimport { List } from \"../../core/utils/List\";\r\nimport { Slice } from \"../../core/elements/Slice\";\r\nimport { Sprite } from \"../../core/Sprite\";\r\nimport { Optional } from \"../../core/utils/Type\";\r\nimport { registry } from \"../../core/Registry\";\r\nimport { ZoomOutButton } from \"../../core/elements/ZoomOutButton\";\r\nimport { Component } from \"../../core/Component\";\r\nimport * as $object from \"../../core/utils/Object\";\r\n\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * A plugin which automatically groups [[PercenSeries]] slices that are smaller\r\n * than certain percent into one \"Other\" slice.\r\n *\r\n * By pushing an instance of [[SliceGrouper]] into `plugin` list of\r\n * any [[PercentSeries]], it automatically applies the functionality.\r\n *\r\n * Example:\r\n *\r\n * ```TypeScript\r\n * let series = chart.series.push(new am4charts.PieSeries());\r\n * series.dataFields.valueY = \"value\";\r\n * series.dataFields.dateX = \"date\";\r\n *\r\n * let grouper = series.plugins.push(new am4plugins_sliceGrouper.SliceGrouper());\r\n * ```\r\n * ```JavaScript\r\n * var series = chart.series.push(new am4charts.PieSeries());\r\n * series.dataFields.valueY = \"value\";\r\n * series.dataFields.dateX = \"date\";\r\n *\r\n * var grouper = series.plugins.push(new am4plugins_sliceGrouper.SliceGrouper());\r\n * ```\r\n * ```JSON\r\n * {\r\n * // ...\r\n * \"series\": [{\r\n * // ...\r\n * }, {\r\n * \"type\": \"PieSeries\",\r\n * \"dataFields\": {\r\n * \"valueY\": \"value\",\r\n * \"dateX\": \"date\"\r\n * },\r\n * \"plugins\": [{\r\n * \"type\": \"SliceGrouper\"\r\n * }]\r\n * }]\r\n * }\r\n * ```\r\n *\r\n * @since 4.3.11\r\n */\r\nexport class SliceGrouper extends Plugin {\r\n\r\n\t/**\r\n\t * A series object that will need its slices grouped.\r\n\t */\r\n\tpublic target: Optional<PercentSeries>;\r\n\r\n\t/**\r\n\t * A reference to \"Other\" slice.\r\n\t */\r\n\tpublic groupSlice: Sprite;\r\n\r\n\t/**\r\n\t * A list of small slices that do not satisfy `threshold`.\r\n\t */\r\n\tpublic smallSlices: List<Sprite | Slice | FunnelSlice> = new List();\r\n\r\n\t/**\r\n\t * A list of big slices that do not satisfy `threshold`.\r\n\t */\r\n\tpublic bigSlices: List<Sprite | Slice | FunnelSlice> = new List();\r\n\r\n\t/**\r\n\t * A name to use for the \"Other\" slice.\r\n\t *\r\n\t * @default \"Other\"\r\n\t */\r\n\tpublic groupName: string = \"Other\";\r\n\r\n\t/**\r\n\t * Custom properties to apply to the \"Other\" slice.\r\n\t *\r\n\t * @since 4.5.3\r\n\t * @type {IFunnelSliceProperties}\r\n\t */\r\n\tpublic groupProperties: IFunnelSliceProperties = {};\r\n\r\n\t/**\r\n\t * If set to `true` the legend will be synced to show currently visible\r\n\t * slices only.\r\n\t *\r\n\t * @defaylt false\r\n\t */\r\n\tpublic syncLegend: boolean = false;\r\n\r\n\t/**\r\n\t * Threshold percent.\r\n\t */\r\n\tprotected _threshold: number = 5;\r\n\r\n\t/**\r\n\t * Zoom out button. Shown when \"Other\" slice is broken down to zoom back\r\n\t * out to \"Other\".\r\n\t */\r\n\tprotected _zoomOutButton: ZoomOutButton;\r\n\r\n\t/**\r\n\t * Disposer for click events.\r\n\t */\r\n\tprotected _clickDisposers: Array<IDisposer> = [];\r\n\r\n\t/**\r\n\t * What happens when \"Other\" slice is cicked.\r\n\t */\r\n\tprotected _clickBehavior: \"none\" | \"break\" | \"zoom\" = \"none\";\r\n\r\n\tprotected _ignoreDataUpdate: boolean = false;\r\n\r\n\t/**\r\n\t * Is group slice currently closed or expanded?\r\n\t */\r\n\tprotected _closed: boolean = true;\r\n\r\n\t/**\r\n\t * Constructor\r\n\t */\r\n\tconstructor() {\r\n\t\t// Nothing to do here\r\n\t\tsuper();\r\n\t}\r\n\r\n\tpublic init() {\r\n\t\tsuper.init();\r\n\t\tthis.processSeries();\r\n\t}\r\n\r\n\t/**\r\n\t * Decorates series with required events and adapters used to hijack its\r\n\t * data.\r\n\t */\r\n\tprivate processSeries(): void {\r\n\r\n\t\tconst series = this.target;\r\n\t\tconst chart = <PercentChart>series.baseSprite;\r\n\t\tconst dataProvider: Component = series.data && series.data.length ? series : chart;\r\n\r\n\t\t// Invalidate calculated data whenever data updates\r\n\t\tthis._disposers.push(dataProvider.events.on(\"datavalidated\", (ev) => {\r\n\r\n\t\t\tif (this._ignoreDataUpdate) {\r\n\t\t\t\tthis._ignoreDataUpdate = false;\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\r\n\t\t\tthis.groupSlice = undefined;\r\n\t\t\tthis.smallSlices.clear();\r\n\t\t\tthis.bigSlices.clear();\r\n\r\n\t\t\t// Collect and prepare small slices\r\n\t\t\tlet groupValue = 0;\r\n\t\t\tlet groupSliceItem;\r\n\t\t\tseries.dataItems.each((item) => {\r\n\t\t\t\tlet value = item.values.value.percent;\r\n\t\t\t\tif ((<any>item.dataContext).sliceGrouperOther) {\r\n\t\t\t\t\tgroupSliceItem = item.dataContext;\r\n\t\t\t\t}\r\n\t\t\t\telse if (value <= this.threshold) {\r\n\t\t\t\t\tgroupValue += item.value;\r\n\t\t\t\t\titem.hiddenInLegend = true;\r\n\t\t\t\t\titem.hide();\r\n\t\t\t\t\titem.hidden = true;\r\n\r\n\t\t\t\t\t// We need this in order to handle conflict with responsive\r\n\t\t\t\t\t// functionality\r\n\t\t\t\t\titem.label.events.on(\"transitionended\", (ev) => {\r\n\t\t\t\t\t\tif (this._closed) {\r\n\t\t\t\t\t\t\titem.hide();\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t});\r\n\r\n\t\t\t\t\tthis.smallSlices.push(item.slice);\r\n\t\t\t\t}\r\n\t\t\t\telse {\r\n\t\t\t\t\tthis.bigSlices.push(item.slice);\r\n\t\t\t\t}\r\n\t\t\t});\r\n\r\n\t\t\t// Create \"Other\" slice\r\n\t\t\tif (groupValue > 0) {\r\n\t\t\t\tif (groupSliceItem) {\r\n\t\t\t\t\t(<any>groupSliceItem)[series.dataFields.value] = groupValue;\r\n\t\t\t\t\tthis._ignoreDataUpdate = true;\r\n\t\t\t\t\tdataProvider.validateRawData();\r\n\t\t\t\t}\r\n\t\t\t\telse {\r\n\t\t\t\t\tlet groupData: any = {\r\n\t\t\t\t\t\tsliceGrouperOther: true\r\n\t\t\t\t\t};\r\n\t\t\t\t\tgroupData[series.dataFields.category] = this.groupName;\r\n\t\t\t\t\tgroupData[series.dataFields.value] = groupValue;\r\n\t\t\t\t\tthis._ignoreDataUpdate = true;\r\n\t\t\t\t\tdataProvider.addData(groupData);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}));\r\n\r\n\t\tthis._disposers.push(series.events.on(\"validated\", (ev) => {\r\n\t\t\tseries.slices.each((slice) => {\r\n\t\t\t\tif ((<any>slice.dataItem.dataContext).sliceGrouperOther) {\r\n\t\t\t\t\tif (!this.groupSlice) {\r\n\t\t\t\t\t\tthis.groupSlice = slice;\r\n\t\t\t\t\t\tthis.initSlices();\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t}));\r\n\r\n\t}\r\n\r\n\t/**\r\n\t * Initializes group slice.\r\n\t */\r\n\tprivate initSlices(): void {\r\n\r\n\t\tif (!this.groupSlice) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\t// Apply custom peroperties\r\n\t\t$object.each(this.groupProperties, (key, val) => {\r\n\t\t\t(<any>this.groupSlice)[key] = val;\r\n\t\t});\r\n\r\n\t\t// Set up click\r\n\t\tif (this.clickBehavior != \"none\") {\r\n\r\n\t\t\tif (!this.groupSlice.events.has(\"hit\")) {\r\n\t\t\t\tthis._clickDisposers.push(this.groupSlice.events.on(\"hit\", (ev) => {\r\n\t\t\t\t\tthis.toggleGroupOn();\r\n\t\t\t\t}));\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t}\r\n\r\n\t/**\r\n\t * Toggles group on.\r\n\t */\r\n\tprivate toggleGroupOn(): void {\r\n\r\n\t\tif (this.clickBehavior == \"none\") {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tthis._closed = false;\r\n\r\n\t\t// Hide \"Other\" slice\r\n\t\tthis.groupSlice.dataItem.hide();\r\n\t\tif (this.syncLegend) {\r\n\t\t\t(<any>this.groupSlice.dataItem).hiddenInLegend = true;\r\n\t\t}\r\n\r\n\t\tthis._clickDisposers.push(this.groupSlice.events.once(\"shown\", (ev) => {\r\n\t\t\tthis.toggleGroupOff();\r\n\t\t}));\r\n\r\n\t\t// Unhide hidden slices\r\n\t\tthis.smallSlices.each((slice) => {\r\n\t\t\tslice.dataItem.hidden = false;\r\n\t\t\tslice.dataItem.show();\r\n\t\t\tif (this.syncLegend) {\r\n\t\t\t\t(<any>slice.dataItem).hiddenInLegend = false;\r\n\t\t\t}\r\n\t\t});\r\n\r\n\r\n\t\t// Maybe hide big slices\r\n\t\tif (this.clickBehavior == \"zoom\") {\r\n\t\t\tthis.bigSlices.each((slice) => {\r\n\t\t\t\tslice.dataItem.hide();\r\n\t\t\t\tif (this.syncLegend) {\r\n\t\t\t\t\t(<any>slice.dataItem).hiddenInLegend = true;\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\tif (this.syncLegend) {\r\n\t\t\t(<any>this.target.baseSprite).feedLegend();\r\n\t\t}\r\n\r\n\t\t// Show zoomout button\r\n\t\tthis.zoomOutButton.show();\r\n\t}\r\n\r\n\t/**\r\n\t * Toggles group off.\r\n\t */\r\n\tprivate toggleGroupOff(): void {\r\n\r\n\t\tif (this.clickBehavior == \"none\") {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tthis._closed = true;\r\n\r\n\t\t// Toggle \"Other\" slice back on\r\n\t\tthis.groupSlice.events.disableType(\"shown\")\r\n\t\tthis.groupSlice.dataItem.show();\r\n\t\tthis.groupSlice.events.enableType(\"shown\");\r\n\t\tif (this.syncLegend) {\r\n\t\t\t(<any>this.groupSlice.dataItem).hiddenInLegend = false;\r\n\t\t}\r\n\r\n\r\n\t\t// Maybe unhide big slices\r\n\t\tif (this.clickBehavior == \"zoom\") {\r\n\t\t\tthis.bigSlices.each((slice) => {\r\n\t\t\t\tslice.dataItem.hidden = false;\r\n\t\t\t\tslice.dataItem.show();\r\n\t\t\t\tif (this.syncLegend) {\r\n\t\t\t\t\t(<any>slice.dataItem).hiddenInLegend = false;\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\t// Hide small slices\r\n\t\tthis.smallSlices.each((slice) => {\r\n\t\t\tslice.dataItem.hide();\r\n\t\t\tif (this.syncLegend) {\r\n\t\t\t\t(<any>slice.dataItem).hiddenInLegend = true;\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\tif (this.syncLegend) {\r\n\t\t\t(<any>this.target.baseSprite).feedLegend();\r\n\t\t}\r\n\r\n\t\t// Hide zoomout button\r\n\t\tthis.zoomOutButton.hide();\r\n\t}\r\n\r\n\t/**\r\n\t * Percent threshold which slices to group. If a slice is less than\r\n\t * `threshold` percent, it will be moved into \"Other\" group.\r\n\t *\r\n\t * @default 5\r\n\t * @param value Threshold\r\n\t */\r\n\tpublic set threshold(value: number) {\r\n\t\tif (this._threshold != value) {\r\n\t\t\tthis._threshold = value;\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * @return Threshold\r\n\t */\r\n\tpublic get threshold(): number {\r\n\t\treturn this._threshold;\r\n\t}\r\n\r\n\t/**\r\n\t * An instance of [[ZoomOutButton]] that is shown when \"Other\" slice is\r\n\t * broken down, to get back to grouped state.\r\n\t *\r\n\t * @param value Button\r\n\t */\r\n\tpublic set zoomOutButton(value: ZoomOutButton) {\r\n\t\tthis._zoomOutButton = value;\r\n\t}\r\n\r\n\t/**\r\n\t * @return Button\r\n\t */\r\n\tpublic get zoomOutButton(): ZoomOutButton {\r\n\t\tif (!this._zoomOutButton) {\r\n\t\t\tconst chart = <PercentChart>this.target.baseSprite;\r\n\t\t\tlet zoomOutButton = chart.tooltipContainer.createChild(ZoomOutButton);\r\n\t\t\tzoomOutButton.shouldClone = false;\r\n\t\t\tzoomOutButton.align = \"right\";\r\n\t\t\tzoomOutButton.valign = \"top\";\r\n\t\t\tzoomOutButton.zIndex = Number.MAX_SAFE_INTEGER;\r\n\t\t\tzoomOutButton.marginTop = 5;\r\n\t\t\tzoomOutButton.marginRight = 5;\r\n\r\n\t\t\tzoomOutButton.hide(0);\r\n\t\t\tthis.zoomOutButton = zoomOutButton;\r\n\t\t\tthis._disposers.push(this._zoomOutButton);\r\n\r\n\t\t\tzoomOutButton.events.on(\"hit\", () => {\r\n\t\t\t\tthis.toggleGroupOff();\r\n\t\t\t}, this);\r\n\t\t}\r\n\t\treturn this._zoomOutButton;\r\n\t}\r\n\r\n\t/**\r\n\t * What happens when \"Other\" slice is clicked/tapped:\r\n\t *\r\n\t * * \"none\": nothing (default)\r\n\t * * \"break\": the slice is broken down into actual slices it consists of\r\n\t * * \"zoom\": actual small slices are shown and the rest of the slices are hidden\r\n\t *\r\n\t * @param value Click behavior\r\n\t */\r\n\tpublic set clickBehavior(value: \"none\" | \"break\" | \"zoom\") {\r\n\t\tif (this._clickBehavior != value) {\r\n\t\t\tthis._clickBehavior = value;\r\n\t\t\tthis.initSlices();\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * @returns Click behavior\r\n\t */\r\n\tpublic get clickBehavior(): \"none\" | \"break\" | \"zoom\" {\r\n\t\treturn this._clickBehavior;\r\n\t}\r\n\r\n\t/**\r\n\t * Disposes the element\r\n\t */\r\n\tpublic dispose(): void {\r\n\t\tthis.disposeClickEvents();\r\n\t\tthis.groupSlice = undefined;\r\n\t\tthis.smallSlices.clear();\r\n\t\tthis.bigSlices.clear();\r\n\t\tsuper.dispose();\r\n\t}\r\n\r\n\tprivate disposeClickEvents(): void {\r\n\t\tconst a = this._clickDisposers;\r\n\t\tthis._clickDisposers = <any>null;\r\n\t\twhile (a.length !== 0) {\r\n\t\t\tconst disposer = a.shift();\r\n\t\t\tdisposer.dispose();\r\n\t\t}\r\n\t}\r\n\r\n}\r\n\r\n/**\r\n * Register class in system, so that it can be instantiated using its name from\r\n * anywhere.\r\n *\r\n * @ignore\r\n */\r\nregistry.registeredClasses[\"SliceGrouper\"] = SliceGrouper;\r\n\n\n\n// WEBPACK FOOTER //\n// ../../../../../src/.internal/plugins/sliceGrouper/SliceGrouper.ts","import * as m from \"../../es2015/plugins/sliceGrouper\";\nwindow.am4plugins_sliceGrouper = m;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./plugins/sliceGrouper.js\n// module id = null\n// module chunks = "],"sourceRoot":""}