{"version":3,"file":"asoftwareworld-charts-semi-circle-donut.mjs","sources":["../../src/app/component/semi-circle-donut/component/semi-circle-donut.ts","../../src/app/component/semi-circle-donut/component/semi-circle-donut.html","../../src/app/component/semi-circle-donut/semi-circle-donut.module.ts","../../src/app/component/semi-circle-donut/public_api.ts","../../src/app/component/semi-circle-donut/asoftwareworld-charts-semi-circle-donut.ts"],"sourcesContent":["/**\r\n * @license\r\n * Copyright ASW (A Software World) All Rights Reserved.\r\n *\r\n * Use of this source code is governed by an MIT-style license that can be\r\n * found in the LICENSE file\r\n */\r\n\r\nimport { CurrencyPipe, PercentPipe } from '@angular/common';\r\nimport { AfterViewInit, Component, ElementRef, EventEmitter, Input, OnChanges, Output, ViewChild } from '@angular/core';\r\nimport { AswChartConstants, CurrencyCodeEnum, GridOptionsEnum } from '@asoftwareworld/charts/core';\r\nimport * as Highcharts from 'highcharts';\r\nimport HighchartsMore from 'highcharts/highcharts-more';\r\nHighchartsMore(Highcharts);\r\nimport HighchartsSolidGauge from 'highcharts/modules/solid-gauge.src';\r\nHighchartsSolidGauge(Highcharts);\r\n\r\nimport {\r\n    AlignValue,\r\n    Options,\r\n    PointClickEventObject,\r\n    PointOptionsObject,\r\n    Point,\r\n    Series,\r\n    SeriesPieOptions,\r\n    VerticalAlignValue\r\n} from 'highcharts';\r\nimport { ObjectUtils } from '@asoftwareworld/charts/utils';\r\n\r\n@Component({\r\n    selector: 'asw-semi-circle-donut',\r\n    templateUrl: './semi-circle-donut.html',\r\n    styleUrls: ['./semi-circle-donut.scss']\r\n})\r\nexport class AswSemiCircleDonut implements OnChanges, AfterViewInit {\r\n\r\n    private cloneConfiguration!: Options;\r\n    public deviceSize: GridOptionsEnum = GridOptionsEnum.Large;\r\n    private viewInitialized = false;\r\n    @Input() config!: Options;\r\n    @Input() isLegendSort = true;\r\n    @Input() isMute = false;\r\n    @Input() isLegendDisplay = true;\r\n    @Input() icon!: string;\r\n    @Input() label: string | undefined;\r\n    @Input() amount: number | null | undefined;\r\n    @Input() target!: string;\r\n    // @Input() chartType: ChartTypeEnum = ChartTypeEnum.Donut;\r\n    @Input() currencyCode: CurrencyCodeEnum = CurrencyCodeEnum.INR;\r\n    // @Input() legendPosition: LegendPositionEnum = LegendPositionEnum.Right;\r\n    // @Input() legendType: LegendTypeEnum = LegendTypeEnum.Both;\r\n    @Input() legendWidthPx = 250;\r\n\r\n    @Output() donutSliceClick: EventEmitter<any> = new EventEmitter<any>();\r\n\r\n    @ViewChild('semiCircleDonutChart', { static: true }) semiCircleDonutChart!: ElementRef;\r\n    @ViewChild('chartId', { static: true }) chartId!: ElementRef;\r\n    constructor(\r\n        private percentPipe: PercentPipe,\r\n        private currencyPipe: CurrencyPipe) { }\r\n\r\n    ngOnChanges(): void {\r\n        if (!this.viewInitialized) {\r\n            return;\r\n        }\r\n        this.initializeChart();\r\n    }\r\n\r\n    ngAfterViewInit(): void {\r\n        this.viewInitialized = true;\r\n        this.initializeChart();\r\n    }\r\n\r\n    initializeChart(): void {\r\n        if (this.config) {\r\n            this.cloneConfiguration = this.config;\r\n            const containerWidth = this.semiCircleDonutChart.nativeElement.clientWidth;\r\n            this.deviceSize = ObjectUtils.findDeviceSize(containerWidth);\r\n            this.findDeviceSize();\r\n            this.removeChartCredit();\r\n            this.setSemiDonutChartTooltip();\r\n            // const series: SeriesPieOptions[] = this.cloneConfiguration.series as SeriesPieOptions[];\r\n            // this.setDonutChartSeriesOptions(series);\r\n            // this.setDonutChartLegendOption(this.legendWidthPx);\r\n            // // if (this.chartType === ChartTypeEnum.Donut) {\r\n            // //     this.setDonutChartInnerText();\r\n            // // }\r\n            this.semiDonutChartSliceClick();\r\n            this.setSemiDonutChartShape();\r\n            Highcharts.chart(this.semiCircleDonutChart.nativeElement, this.cloneConfiguration);\r\n        }\r\n    }\r\n\r\n    private removeChartCredit(): void {\r\n        this.cloneConfiguration.credits = {\r\n            enabled: false\r\n        };\r\n    }\r\n\r\n    private setSemiDonutChartTooltip(): void {\r\n        const this$: this = this;\r\n        this.cloneConfiguration.tooltip = {\r\n            useHTML: true,\r\n            split: false,\r\n            backgroundColor: AswChartConstants.blackColor,\r\n            borderColor: AswChartConstants.blackColor,\r\n            style: {\r\n                color: AswChartConstants.whiteColor,\r\n                fontWeight: AswChartConstants.fontWeight\r\n            },\r\n            borderRadius: 0,\r\n            enabled: this.isMute ? false : true,\r\n            formatter(): string {\r\n                const percentage: number = this.point.percentage as number;\r\n                return `\r\n                    <div class=\"row\">\r\n                        ${ this.point.name ?\r\n                        `<div class=\"col-md-12 text-end\">\r\n                            <span style=\"color: ${this.point.color}\">\\u25A0</span>\r\n                            <strong>${this.point.name}</strong>\r\n                        </div>` : ``\r\n                        }\r\n                        <div class=\"col-md-12 text-end\">\r\n                            ${percentage ? this$.percentPipe.transform(percentage / 100, '.2') : this.point.options.y + '%'}\r\n                        </div>\r\n                    </div>\r\n                 `;\r\n            }\r\n        };\r\n    }\r\n\r\n    private semiDonutChartSliceClick(): void {\r\n        if (this.isMute) { return; }\r\n        this.cloneConfiguration.plotOptions = {\r\n            pie: {\r\n                dataLabels: {\r\n                    enabled: false,\r\n                },\r\n                states: {\r\n                    hover: {\r\n                        enabled: false\r\n                    }\r\n                },\r\n                startAngle: -90,\r\n                endAngle: 90,\r\n                center: ['50%', '75%'],\r\n                size: '110%'\r\n            },\r\n            series: {\r\n                point: {\r\n                    events: {\r\n                        click: ((event: PointClickEventObject) => {\r\n                            // const pointClickEvent: PointClickEvent = {\r\n                            //     name: event.point.name,\r\n                            //     id: event.point.options.id,\r\n                            //     percentage: event.point.percentage,\r\n                            //     value: event.point.options.value,\r\n                            //     target: event.point.options.target\r\n                            // };\r\n                            // this.donutSliceClick.emit(pointClickEvent);\r\n                        })\r\n                    }\r\n                }\r\n            }\r\n        };\r\n    }\r\n\r\n    private setSemiDonutChartShape(): void {\r\n        this.cloneConfiguration.pane = {\r\n            center: ['50%', '70%'],\r\n            size: '70%',\r\n            startAngle: -90,\r\n            endAngle: 90,\r\n            background: [{\r\n                borderWidth: 0,\r\n                backgroundColor: 'none',\r\n                shape: 'arc',\r\n            }],\r\n        };\r\n    }\r\n\r\n    private setDonutChartSeriesOptions(series: SeriesPieOptions[]): void {\r\n        series.forEach((seriesOption: SeriesPieOptions) => {\r\n            seriesOption.allowPointSelect = true;\r\n            seriesOption.showInLegend = true;\r\n            // if (this.chartType === ChartTypeEnum.Donut) {\r\n            //     seriesOption.innerSize = AswChartConstants.innerSize;\r\n            // }\r\n            if (this.isMute) {\r\n                seriesOption.opacity = 0.35;\r\n                seriesOption.states = {\r\n                    hover: {\r\n                        enabled: false\r\n                    },\r\n                    inactive: {\r\n                        enabled: false\r\n                    }\r\n                };\r\n                seriesOption.slicedOffset = 0;\r\n            }\r\n            seriesOption.cursor = AswChartConstants.pointer;\r\n            const data: PointOptionsObject[] = seriesOption.data as PointOptionsObject[];\r\n            this.handleNegativeSeriesData(data);\r\n            const sortedSeriesOptionData: PointOptionsObject[] = this.isLegendSort ? this.sortSeriesData(data) : data;\r\n            seriesOption.data = sortedSeriesOptionData;\r\n        });\r\n    }\r\n\r\n    private sortSeriesData(data: PointOptionsObject[]): PointOptionsObject[] {\r\n        // if (this.legendType === LegendTypeEnum.Default) {\r\n        //     data.sort((a: any, b: any) => {\r\n        //         return ('' + a.name).localeCompare(b.name);\r\n        //     });\r\n        //     return data;\r\n        // } else {\r\n            data.sort((a: any, b: any) => {\r\n                if (a.y && b.y) {\r\n                    return a.value - b.value;\r\n                } else {\r\n                    return 0;\r\n                }\r\n            });\r\n            data.reverse();\r\n            return data;\r\n        // }\r\n    }\r\n\r\n    private handleNegativeSeriesData(data: PointOptionsObject[]): void {\r\n        data.forEach((element: PointOptionsObject) => {\r\n            element.value = element.y;\r\n            element.y = element.y ? Math.abs(element.y) : 0.001;\r\n        });\r\n    }\r\n\r\n    private setDonutChartLegendOption(legendWidthPx: number): void {\r\n        const this$: this = this;\r\n        this.cloneConfiguration.legend = {\r\n            useHTML: true,\r\n            enabled: this.isMute ? false : this.isLegendDisplay,\r\n            floating: false,\r\n            // navigation: {\r\n            //     arrowSize: 12\r\n            // },\r\n            align: this.setLegendAlignment(),\r\n            layout: 'vertical',\r\n            verticalAlign: this.setLegendVerticalAlignment(),\r\n            symbolHeight: 10,\r\n            symbolWidth: 10,\r\n            symbolRadius: 0,\r\n            itemMarginTop: 3, // Space between each category in the legend\r\n            itemMarginBottom: 3,\r\n            itemStyle: {\r\n                fontSize: this.deviceSize === GridOptionsEnum.ExtraSmall ? '12px' : '14px',\r\n                fontWeight: AswChartConstants.fontWeight\r\n            },\r\n            width: legendWidthPx + 15,\r\n            title: {\r\n                text: this$.setDonutChartLegendWithHeader(legendWidthPx + 15),\r\n                style: {\r\n                    fontSize: this.deviceSize === GridOptionsEnum.ExtraSmall\r\n                        ? AswChartConstants.fontSize12 : AswChartConstants.fontSize14,\r\n                    color: '#6c757d',\r\n                    fontWeight: AswChartConstants.fontWeight,\r\n                    fontFamily: '500 14px/20px Google Sans Text,Arial,Helvetica,sans-serif'\r\n                }\r\n            },\r\n            labelFormatter(): string {\r\n                const point: Point = this as Point;\r\n                return this$.setDonutChartLegendWithHeader(\r\n                    legendWidthPx,\r\n                    point.name,\r\n                    point.percentage,\r\n                    point.options.value);\r\n            }\r\n        };\r\n    }\r\n\r\n    private setFontSize(): string {\r\n        return this.deviceSize === GridOptionsEnum.ExtraSmall ? AswChartConstants.fontSize14 : AswChartConstants.fontSize16;\r\n    }\r\n\r\n    private setLegendAlignment(): AlignValue {\r\n        if (this.deviceSize === GridOptionsEnum.ExtraSmall) {\r\n            return 'center';\r\n        }\r\n        // else if (this.legendPosition === LegendPositionEnum.Right) {\r\n        //     return LegendPositionEnum.Right;\r\n        // } else if (this.legendPosition === LegendPositionEnum.Left) {\r\n        //     return LegendPositionEnum.Left;\r\n        // }\r\n        else {\r\n            return 'center';\r\n        }\r\n    }\r\n\r\n    private setLegendVerticalAlignment(): VerticalAlignValue {\r\n        // if (this.deviceSize === GridOptionsEnum.ExtraSmall) {\r\n        //     return LegendPositionEnum.Bottom;\r\n        // } else if (this.legendPosition === LegendPositionEnum.Right) {\r\n        //     return 'middle';\r\n        // } else if (this.legendPosition === LegendPositionEnum.Left) {\r\n        //     return 'middle';\r\n        // } else {\r\n        //     return LegendPositionEnum.Bottom;\r\n        // }\r\n        return 'bottom';\r\n    }\r\n\r\n    private setDonutChartLegendWithHeader(\r\n        legendWidthPx: number,\r\n        name?: string | null,\r\n        percentage?: number | undefined,\r\n        value?: number | null | undefined): string {\r\n        // let legendCategoryWidthPx: number;\r\n        // let legendValueWidthPx: number;\r\n        // let legendPercentageWidthPx: number;\r\n        // switch (this.legendType) {\r\n        //     case LegendTypeEnum.Default:\r\n        //         return `\r\n        //          <div style=\"width:${legendWidthPx}px\">\r\n        //              <div class=\"row\">\r\n        //                  <div class=\"col-md-12 col-sm-12 col-12\">\r\n        //                      ${name ? name : 'Category'}\r\n        //                  </div>\r\n        //              </div>\r\n        //          </div>\r\n        //          `;\r\n        //     case LegendTypeEnum.Percentage:\r\n        //         legendCategoryWidthPx = legendWidthPx * 0.9;\r\n        //         legendPercentageWidthPx = legendWidthPx * 0.1;\r\n        //         return `\r\n        //          <div style=\"width:${legendCategoryWidthPx + legendPercentageWidthPx}px\">\r\n        //              <div class=\"row\">\r\n        //                  <div class=\"col-md-8 col-sm-8 col-8\">\r\n        //                      ${name ? name : 'Category'}\r\n        //                  </div>\r\n        //                  <div class=\"col-md-4 col-sm-4 col-4 text-end\">\r\n        //                      ${percentage ? this.percentPipe.transform(percentage / 100, '.0') : '%'}\r\n        //                  </div>\r\n        //              </div>\r\n        //          </div>\r\n        //          `;\r\n        //     case LegendTypeEnum.Value:\r\n        //         legendCategoryWidthPx = legendWidthPx * 0.5;\r\n        //         legendValueWidthPx = legendWidthPx * 0.5;\r\n        //         return `\r\n        //          <div style=\"width:${legendCategoryWidthPx + legendValueWidthPx}px\">\r\n        //              <div class=\"row\">\r\n        //                  <div class=\"col-md-6 col-sm-6 col-6\">\r\n        //                      ${name ? name : 'Category'}\r\n        //                  </div>\r\n        //                  <div class=\"col-md-6 col-sm-6 col-6 text-end\">\r\n        //                      ${value ? this.currencyPipe.transform(value, 'INR') : 'Total'}\r\n        //                  </div>\r\n        //              </div>\r\n        //          </div>\r\n        //          `;\r\n        //     default:\r\n        //         legendCategoryWidthPx = legendWidthPx * 0.5;\r\n        //         legendPercentageWidthPx = legendWidthPx * 0.1;\r\n        //         legendValueWidthPx = legendWidthPx * 0.4;\r\n        //         return `\r\n        //          <div style=\"width:${legendCategoryWidthPx + legendPercentageWidthPx + legendValueWidthPx}px\">\r\n        //              <div class=\"row\">\r\n        //                  <div class=\"col-md-5 col-sm-5 col-5\">\r\n        //                      ${name ? name : 'Category'}\r\n        //                  </div>\r\n        //                  <div class=\"col-md-2 col-xs-2 col-2 text-end\">\r\n        //                      ${percentage ? this.percentPipe.transform(percentage / 100) : '%'}\r\n        //                  </div>\r\n        //                  <div class=\"col-md-5 col-sm-5 col-5 text-end\">\r\n        //                      ${value ? this.currencyPipe.transform(value, this.currencyCode) : 'Total'}\r\n        //                  </div>\r\n        //              </div>\r\n        //          </div>\r\n        //          `;\r\n        // }\r\n        return '';\r\n    }\r\n\r\n    private findDeviceSize(): void {\r\n        const containerWidth = this.semiCircleDonutChart.nativeElement.clientWidth;\r\n        if (containerWidth >= 1400) {\r\n            this.deviceSize = GridOptionsEnum.ExtraExtraLarge;\r\n        } else if (containerWidth >= 1200) {\r\n            this.deviceSize = GridOptionsEnum.ExtraLarge;\r\n        } else if (containerWidth >= 992) {\r\n            this.deviceSize = GridOptionsEnum.Large;\r\n        } else if (containerWidth >= 768) {\r\n            this.deviceSize = GridOptionsEnum.Medium;\r\n        } else if (containerWidth >= 576) {\r\n            this.deviceSize = GridOptionsEnum.Small;\r\n        } else if (containerWidth < 576) {\r\n            this.deviceSize = GridOptionsEnum.ExtraSmall;\r\n        }\r\n    }\r\n\r\n    private setDonutChartInnerText(): void {\r\n        const this$: this = this;\r\n        this.cloneConfiguration.chart = {\r\n            events: {\r\n                load(): void {\r\n                    let centerX: number;\r\n                    let centerY: number;\r\n                    let itemWidth: number;\r\n                    this.series.forEach((element: Series) => {\r\n                        const points: Point[] = element.points.slice(0, 1);\r\n                        points.forEach((point: any) => {\r\n                            centerX = this.plotLeft + (point.shapeArgs.x - point.shapeArgs.innerR) + 8;\r\n                            centerY = this.plotTop + point.shapeArgs.y - 14;\r\n                            itemWidth = (point.shapeArgs.innerR * 2) - 20;\r\n                        });\r\n                        if (this$.icon) {\r\n                            this.renderer.label(this$.setInnerTextIcon(itemWidth),\r\n                                centerX, this$.deviceSize === GridOptionsEnum.ExtraSmall ? centerY - 20 : centerY - 25,\r\n                                undefined, 30, 30, true).css({\r\n                                    fontSize: this$.setFontSize(),\r\n                                    textAlign: AswChartConstants.centerAlign,\r\n                                    fontWeight: AswChartConstants.fontWeight\r\n                                }).add();\r\n                            this.renderer.label(this$.setInnerTextLabel(itemWidth),\r\n                                centerX, centerY, undefined, 30, 30, true).css({\r\n                                    fontSize: this$.setFontSize(),\r\n                                    textAlign: AswChartConstants.centerAlign,\r\n                                    fontWeight: AswChartConstants.fontWeight\r\n                                }).add();\r\n                            this.renderer.label(this$.setInnerTextValue(itemWidth),\r\n                                centerX, this$.deviceSize === GridOptionsEnum.ExtraSmall ? centerY + 20 : centerY + 25,\r\n                                undefined, 30, 30, true).css({\r\n                                    fontSize: this$.setFontSize(),\r\n                                    textAlign: AswChartConstants.centerAlign,\r\n                                    fontWeight: AswChartConstants.fontWeight\r\n                                }).add();\r\n                        } else {\r\n                            this.renderer.label(this$.setInnerTextLabel(itemWidth),\r\n                                centerX, this$.deviceSize === GridOptionsEnum.ExtraSmall ? centerY - 20 : centerY - 25,\r\n                                undefined, 30, 30, true).css({\r\n                                    fontSize: this$.setFontSize(),\r\n                                    textAlign: AswChartConstants.centerAlign,\r\n                                    fontWeight: AswChartConstants.fontWeight\r\n                                }).add();\r\n                            this.renderer.label(this$.setInnerTextValue(itemWidth),\r\n                                centerX, centerY, undefined, 30, 30, true).css({\r\n                                    fontSize: this$.setFontSize(),\r\n                                    textAlign: AswChartConstants.centerAlign,\r\n                                    fontWeight: AswChartConstants.fontWeight\r\n                                }).add();\r\n                            this.renderer.label(this$.setInnerTextTarget(itemWidth),\r\n                                centerX, this$.deviceSize === GridOptionsEnum.ExtraSmall ? centerY + 20 : centerY + 25,\r\n                                undefined, 30, 30, true).css({\r\n                                    fontSize: this$.setFontSize(),\r\n                                    textAlign: AswChartConstants.centerAlign,\r\n                                    fontWeight: AswChartConstants.fontWeight\r\n                                }).add();\r\n                        }\r\n                    });\r\n                }\r\n            }\r\n        };\r\n    }\r\n\r\n    private setInnerTextLabel(width: number): string {\r\n        return `\r\n         <div style=\"width: ${width}px; opacity: ${this.isMute ? 0.35 : 1}\">\r\n             <div class=\"row\">\r\n                 <div class=\"col-md-12 text-truncate\">\r\n                     ${this.label}\r\n                 </div>\r\n             </div>\r\n         </div>\r\n         `;\r\n    }\r\n\r\n    private setInnerTextIcon(width: number): string {\r\n        return `\r\n         <div style=\"width: ${width}px; opacity: ${this.isMute ? 0.35 : 1}\">\r\n             <div class=\"row\">\r\n                 <div class=\"col-md-12 text-truncate\">\r\n                     ${this.icon}\r\n                 </div>\r\n             </div>\r\n         </div>\r\n         `;\r\n    }\r\n\r\n    private setInnerTextValue(width: number): string {\r\n        return `\r\n         <div style=\"width: ${width}px; opacity: ${this.isMute ? 0.35 : 1}\">\r\n             <div class=\"row\">\r\n                 <div class=\"col-md-12 text-truncate\">\r\n                     <strong>${this.currencyPipe.transform(this.amount, this.currencyCode)}</strong>\r\n                 </div>\r\n             </div>\r\n         </div>\r\n         `;\r\n    }\r\n\r\n    private setInnerTextTarget(width: number): string {\r\n        return `\r\n         <div style=\"width: ${width}px; opacity: ${this.isMute ? 0.35 : 1}\">\r\n             <div class=\"row\">\r\n                 <div class=\"col-md-12 text-truncate\">\r\n                     ${this.target ? this.target : ''}\r\n                 </div>\r\n             </div>\r\n         </div>\r\n         `;\r\n    }\r\n}\r\n","<div #semiCircleDonutChart></div>","/**\r\n * @license\r\n * Copyright ASW (A Software World) All Rights Reserved.\r\n *\r\n * Use of this source code is governed by an MIT-style license that can be\r\n * found in the LICENSE file\r\n */\r\n\r\nimport { NgModule } from '@angular/core';\r\nimport { CommonModule, CurrencyPipe, PercentPipe } from '@angular/common';\r\nimport { AswSemiCircleDonut } from './component/semi-circle-donut';\r\n\r\n@NgModule({\r\n    declarations: [\r\n        AswSemiCircleDonut\r\n    ],\r\n    imports: [\r\n        CommonModule,\r\n    ],\r\n    exports: [\r\n        AswSemiCircleDonut\r\n    ],\r\n    providers: [\r\n        PercentPipe,\r\n        CurrencyPipe,\r\n        Document\r\n    ]\r\n})\r\nexport class AswSemiCircleDonutModule { }\r\n","/**\r\n * @license\r\n * Copyright ASW (A Software World) All Rights Reserved.\r\n *\r\n * Use of this source code is governed by an MIT-style license that can be\r\n * found in the LICENSE file\r\n */\r\n\r\nexport * from './component/semi-circle-donut';\r\nexport * from './semi-circle-donut.module';\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":[],"mappings":"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"}