{"version":3,"file":"asoftwareworld-charts-sankey-chart.mjs","sources":["../../src/app/component/sankey-chart/component/sankey-chart.ts","../../src/app/component/sankey-chart/component/sankey-chart.html","../../src/app/component/sankey-chart/interface/sankey-pointer-event.ts","../../src/app/component/sankey-chart/sankey-chart.module.ts","../../src/app/component/sankey-chart/public_api.ts","../../src/app/component/sankey-chart/asoftwareworld-charts-sankey-chart.ts"],"sourcesContent":["import { CurrencyPipe, PercentPipe } from '@angular/common';\nimport {\n    AfterViewInit,\n    Component,\n    ElementRef,\n    EventEmitter,\n    HostListener,\n    Input,\n    OnChanges,\n    Output,\n    ViewChild\n} from '@angular/core';\nimport {\n    AswChartConstants,\n    ChartLegendTypeEnum,\n    ChartPointerEvent,\n    CurrencyCodeEnum,\n    GridOptionsEnum,\n    LegendLayoutEnum,\n    LegendPositionEnum,\n} from '@asoftwareworld/charts/core';\nimport { ObjectUtils } from '@asoftwareworld/charts/utils';\nimport * as Highcharts from 'highcharts';\nimport HighchartsSankey from 'highcharts/modules/sankey';\nimport {\n    AlignValue,\n    Options,\n    PointClickEventObject,\n    PointOptionsObject,\n    Point,\n    Series,\n    SeriesPieOptions,\n    VerticalAlignValue\n} from 'highcharts';\nimport { SankeyChartPointerEvent } from './../interface/sankey-pointer-event';\nHighchartsSankey(Highcharts);\n\n@Component({\n    selector: 'asw-sankey-chart',\n    templateUrl: './sankey-chart.html',\n    styleUrls: ['./sankey-chart.scss']\n})\nexport class AswSankeyChart implements OnChanges, AfterViewInit {\n\n    private cloneConfiguration!: Options;\n    public deviceSize: GridOptionsEnum = GridOptionsEnum.Large;\n    private viewInitialized = false;\n    @Input() config!: Options;\n    @Input() isLegendSort = true;\n    @Input() icon!: string;\n    @Input() label: string | undefined;\n    @Input() amount: number | null | undefined;\n    @Input() target!: string;\n    @Input() currencyCode: CurrencyCodeEnum = CurrencyCodeEnum.Blank;\n    @Input() legendPosition: LegendPositionEnum = LegendPositionEnum.Right;\n    @Input() legendType: ChartLegendTypeEnum = ChartLegendTypeEnum.Both;\n    @Input() legendWidthPx = 250;\n    @Input() legendLayout: LegendLayoutEnum = LegendLayoutEnum.Vertical;\n\n    @Output() sankeyClick: EventEmitter<any> = new EventEmitter<any>();\n\n    @ViewChild('sankeyChart', { static: true }) sankeyChart!: ElementRef;\n    constructor(\n        private currencyPipe: CurrencyPipe) { }\n\n    ngOnChanges(): void {\n        if (!this.viewInitialized) {\n            return;\n        }\n        this.initializeChart();\n    }\n\n    ngAfterViewInit(): void {\n        this.viewInitialized = true;\n        this.initializeChart();\n    }\n\n    initializeChart(): void {\n        if (this.config) {\n            this.cloneConfiguration = this.config;\n            const containerWidth = this.sankeyChart.nativeElement.clientWidth;\n            this.deviceSize = ObjectUtils.findDeviceSize(containerWidth);\n            this.removeChartCredit();\n            this.setSankeyChartTooltip();\n            const series: SeriesPieOptions[] = this.cloneConfiguration.series as SeriesPieOptions[];\n            if (this.legendLayout === LegendLayoutEnum.Vertical) {\n               // this.setSankeyChartLegendOption(this.legendWidthPx);\n            }\n            this.clickOnSankey();\n            Highcharts.chart(this.sankeyChart.nativeElement, this.cloneConfiguration);\n        }\n    }\n\n    @HostListener('window:resize')\n    onResize(): void {\n        this.initializeChart();\n    }\n\n    private removeChartCredit(): void {\n        this.cloneConfiguration.credits = {\n            enabled: false\n        };\n    }\n\n    private setSankeyChartTooltip(): void {\n        const this$: this = this;\n        this.cloneConfiguration.tooltip = {\n            useHTML: true,\n            split: false,\n            backgroundColor: AswChartConstants.blackColor,\n            borderColor: AswChartConstants.blackColor,\n            style: {\n                color: AswChartConstants.whiteColor,\n                fontWeight: AswChartConstants.fontWeight\n            },\n            borderRadius: 0,\n            enabled: true,\n            formatter(): string {\n                const point: any = this.point;\n                return `\n                    <div class=\"row\">\n                        <div class=\"col-md-12 text-end text-right\">\n                            <span style=\"color: ${point.color}\">\\u25A0</span>\n                            <strong>${point.series.name}</strong>\n                        </div>\n                        <div class=\"col-md-12 text-end text-right\">\n                            ${point.options.weight\n                                ? point.options.from + ' → ' + point.options.to + ': ' + point.options.weight\n                                : point.options.id + ': ' + point.sum\n                            }\n                        </div>\n                    </div>\n                `;\n            }\n        };\n    }\n\n    private clickOnSankey(): void {\n        if (this.cloneConfiguration.plotOptions) {\n            // tslint:disable-next-line:no-non-null-assertion\n            this.cloneConfiguration.plotOptions!.sankey!.point = {\n                events: {\n                    click: ((event: any) => {\n                        const pointClickEvent: SankeyChartPointerEvent = {\n                            name: event.point.series.name,\n                            from: event.point.options.from ?? event.point.id,\n                            to: event.point.options.to,\n                            weight: event.point.options.weight,\n                            sum: event.point.sum\n                        };\n                        this.sankeyClick.emit(pointClickEvent);\n                    })\n                }\n            };\n        } else {\n            this.cloneConfiguration.plotOptions = {\n                sankey: {\n                    point: {\n                        events: {\n                            click: ((event: any) => {\n                                const pointClickEvent: SankeyChartPointerEvent = {\n                                    name: event.point.series.name,\n                                    from: event.point.options.from ?? event.point.id,\n                                    to: event.point.options.to,\n                                    weight: event.point.options.weight,\n                                    sum: event.point.sum\n                                };\n                                this.sankeyClick.emit(pointClickEvent);\n                            })\n                        }\n                    }\n                }\n            };\n        }\n    }\n\n    private setDonutChartSeriesOptions(series: SeriesPieOptions[]): void {\n        series.forEach((seriesOption: SeriesPieOptions) => {\n            seriesOption.allowPointSelect = true;\n            seriesOption.showInLegend = true;\n            // if (this.chartType === ChartTypeEnum.Donut) {\n            //     seriesOption.innerSize = AswChartConstants.innerSize;\n            // }\n            // if (this.isMute) {\n            //     seriesOption.opacity = 0.35;\n            //     seriesOption.states = {\n            //         hover: {\n            //             enabled: false\n            //         },\n            //         inactive: {\n            //             enabled: false\n            //         }\n            //     };\n            //     seriesOption.slicedOffset = 0;\n            // }\n            seriesOption.cursor = AswChartConstants.pointer;\n            const data: PointOptionsObject[] = seriesOption.data as PointOptionsObject[];\n            this.handleNegativeSeriesData(data);\n            const sortedSeriesOptionData: PointOptionsObject[] = this.isLegendSort ? this.sortSeriesData(data) : data;\n            seriesOption.data = sortedSeriesOptionData;\n        });\n    }\n\n    private sortSeriesData(data: PointOptionsObject[]): PointOptionsObject[] {\n        if (this.legendType === ChartLegendTypeEnum.Default) {\n            data.sort((a: any, b: any) => {\n                return ('' + a.name).localeCompare(b.name);\n            });\n            return data;\n        } else {\n            data.sort((a: any, b: any) => {\n                if (a.y && b.y) {\n                    return a.value - b.value;\n                } else {\n                    return 0;\n                }\n            });\n            data.reverse();\n            return data;\n        }\n    }\n\n    private handleNegativeSeriesData(data: PointOptionsObject[]): void {\n        data.forEach((element: PointOptionsObject) => {\n            element.value = element.y;\n            element.y = element.y ? Math.abs(element.y) : 0.001;\n        });\n    }\n\n    private setFontSize(): string {\n        return this.deviceSize === GridOptionsEnum.ExtraSmall ? AswChartConstants.fontSize14 : AswChartConstants.fontSize16;\n    }\n\n    private setSankeyChartLegendOption(legendWidthPx: number): void {\n        const this$: this = this;\n        this.cloneConfiguration.legend = {\n            useHTML: true,\n            enabled: true,\n            floating: false,\n            align: this.setLegendAlignment(),\n            layout: 'vertical',\n            verticalAlign: this.setLegendVerticalAlignment(),\n            symbolHeight: 10,\n            symbolWidth: 10,\n            symbolRadius: 0,\n            itemMarginTop: 3, // Space between each category in the legend\n            itemMarginBottom: 3,\n            itemStyle: {\n                fontSize: this.deviceSize === GridOptionsEnum.ExtraSmall ? '12px' : '14px',\n                fontWeight: AswChartConstants.fontWeight\n            },\n            width: legendWidthPx + 15,\n            title: {\n                text: this$.setLineChartLegendWithHeader(legendWidthPx + 15),\n                style: {\n                    fontSize: this.deviceSize === GridOptionsEnum.ExtraSmall\n                        ? AswChartConstants.fontSize12 : AswChartConstants.fontSize14,\n                    color: '#6c757d',\n                    fontWeight: AswChartConstants.fontWeight,\n                    fontFamily: '500 14px/20px Google Sans Text,Arial,Helvetica,sans-serif'\n                }\n            },\n            labelFormatter(): string {\n                const point: any = this as Point;\n                const value = point.yData.reduce((acc: any, cur: any) => acc + cur, 0);\n                return this$.setLineChartLegendWithHeader(\n                    legendWidthPx,\n                    point.name,\n                    value);\n            }\n        };\n    }\n\n    private setLegendAlignment(): AlignValue {\n        if (this.deviceSize === GridOptionsEnum.ExtraSmall) {\n            return 'center';\n        } else if (this.legendPosition === LegendPositionEnum.Right) {\n            return LegendPositionEnum.Right;\n        } else if (this.legendPosition === LegendPositionEnum.Left) {\n            return LegendPositionEnum.Left;\n        } else {\n            return 'center';\n        }\n    }\n\n    private setLegendVerticalAlignment(): VerticalAlignValue {\n        if (this.deviceSize === GridOptionsEnum.ExtraSmall) {\n            return LegendPositionEnum.Bottom;\n        } else if (this.legendPosition === LegendPositionEnum.Right) {\n            return 'middle';\n        } else if (this.legendPosition === LegendPositionEnum.Left) {\n            return 'middle';\n        } else {\n            return LegendPositionEnum.Bottom;\n        }\n    }\n\n    private setLineChartLegendWithHeader(\n        legendWidthPx: number,\n        name?: string | null,\n        value?: number | null | undefined): string {\n        let legendCategoryWidthPx: number;\n        let legendValueWidthPx: number;\n        if (this.legendType === ChartLegendTypeEnum.Default) {\n            return `\n                <div style=\"width:${legendWidthPx}px\">\n                    <div class=\"row\">\n                        <div class=\"col-md-12 col-sm-12 col-12\">\n                            ${name ? name : 'Category'}\n                        </div>\n                    </div>\n                </div>`;\n        } else {\n            legendCategoryWidthPx = legendWidthPx * 0.5;\n            legendValueWidthPx = legendWidthPx * 0.5;\n            return `\n                <div style=\"width:${legendCategoryWidthPx + legendValueWidthPx}px\">\n                    <div class=\"row\">\n                        <div class=\"col-md-6 col-sm-6 col-6\">\n                            ${name ? name : 'Category'}\n                        </div>\n                        <div class=\"col-md-6 col-sm-6 col-6 text-end text-right\">\n                            ${value ? this.currencyPipe.transform(value, this.currencyCode, 'symbol', '.2') : 'Total'}\n                        </div>\n                    </div>\n                </div>`;\n        }\n    }\n}\n","<div #sankeyChart></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\nexport interface SankeyChartPointerEvent {\r\n    name: string | undefined;\r\n    from: string | undefined;\r\n    to: string | undefined;\r\n    weight: number | null | undefined;\r\n    sum: number | null | undefined;\r\n}\r\n","import { NgModule } from '@angular/core';\r\nimport { CommonModule, CurrencyPipe, PercentPipe } from '@angular/common';\r\nimport { AswSankeyChart } from './component/sankey-chart';\r\nimport { AswCurrencyPipe } from '@asoftwareworld/charts/core';\r\n\r\n@NgModule({\r\n    declarations: [\r\n        AswSankeyChart\r\n    ],\r\n    imports: [\r\n        CommonModule\r\n    ],\r\n    exports: [\r\n        AswSankeyChart\r\n    ],\r\n    providers: [\r\n        PercentPipe,\r\n        AswCurrencyPipe,\r\n        CurrencyPipe\r\n    ]\r\n})\r\nexport class AswSankeyChartModule { }\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/sankey-chart';\r\nexport * from './interface/sankey-pointer-event';\r\nexport * from './sankey-chart.module';\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":[],"mappings":";;;;;;;;;AAmCA,gBAAgB,CAAC,UAAU,CAAC,CAAC;MAOhB,cAAc;IAoBvB,YACY,YAA0B;QAA1B,iBAAY,GAAZ,YAAY,CAAc;QAlB/B,eAAU,GAAoB,eAAe,CAAC,KAAK,CAAC;QACnD,oBAAe,GAAG,KAAK,CAAC;QAEvB,iBAAY,GAAG,IAAI,CAAC;QAKpB,iBAAY,GAAqB,gBAAgB,CAAC,KAAK,CAAC;QACxD,mBAAc,GAAuB,kBAAkB,CAAC,KAAK,CAAC;QAC9D,eAAU,GAAwB,mBAAmB,CAAC,IAAI,CAAC;QAC3D,kBAAa,GAAG,GAAG,CAAC;QACpB,iBAAY,GAAqB,gBAAgB,CAAC,QAAQ,CAAC;QAE1D,gBAAW,GAAsB,IAAI,YAAY,EAAO,CAAC;KAIxB;IAE3C,WAAW;QACP,IAAI,CAAC,IAAI,CAAC,eAAe,EAAE;YACvB,OAAO;SACV;QACD,IAAI,CAAC,eAAe,EAAE,CAAC;KAC1B;IAED,eAAe;QACX,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC;QAC5B,IAAI,CAAC,eAAe,EAAE,CAAC;KAC1B;IAED,eAAe;QACX,IAAI,IAAI,CAAC,MAAM,EAAE;YACb,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC,MAAM,CAAC;YACtC,MAAM,cAAc,GAAG,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC,WAAW,CAAC;YAClE,IAAI,CAAC,UAAU,GAAG,WAAW,CAAC,cAAc,CAAC,cAAc,CAAC,CAAC;YAC7D,IAAI,CAAC,iBAAiB,EAAE,CAAC;YACzB,IAAI,CAAC,qBAAqB,EAAE,CAAC;YAC7B,MAAM,MAAM,GAAuB,IAAI,CAAC,kBAAkB,CAAC,MAA4B,CAAC;YACxF,IAAI,IAAI,CAAC,YAAY,KAAK,gBAAgB,CAAC,QAAQ,EAAE;;aAEpD;YACD,IAAI,CAAC,aAAa,EAAE,CAAC;YACrB,UAAU,CAAC,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,aAAa,EAAE,IAAI,CAAC,kBAAkB,CAAC,CAAC;SAC7E;KACJ;IAGD,QAAQ;QACJ,IAAI,CAAC,eAAe,EAAE,CAAC;KAC1B;IAEO,iBAAiB;QACrB,IAAI,CAAC,kBAAkB,CAAC,OAAO,GAAG;YAC9B,OAAO,EAAE,KAAK;SACjB,CAAC;KACL;IAEO,qBAAqB;QACzB,MAAM,KAAK,GAAS,IAAI,CAAC;QACzB,IAAI,CAAC,kBAAkB,CAAC,OAAO,GAAG;YAC9B,OAAO,EAAE,IAAI;YACb,KAAK,EAAE,KAAK;YACZ,eAAe,EAAE,iBAAiB,CAAC,UAAU;YAC7C,WAAW,EAAE,iBAAiB,CAAC,UAAU;YACzC,KAAK,EAAE;gBACH,KAAK,EAAE,iBAAiB,CAAC,UAAU;gBACnC,UAAU,EAAE,iBAAiB,CAAC,UAAU;aAC3C;YACD,YAAY,EAAE,CAAC;YACf,OAAO,EAAE,IAAI;YACb,SAAS;gBACL,MAAM,KAAK,GAAQ,IAAI,CAAC,KAAK,CAAC;gBAC9B,OAAO;;;kDAG2B,KAAK,CAAC,KAAK;sCACvB,KAAK,CAAC,MAAM,CAAC,IAAI;;;8BAGzB,KAAK,CAAC,OAAO,CAAC,MAAM;sBAChB,KAAK,CAAC,OAAO,CAAC,IAAI,GAAG,KAAK,GAAG,KAAK,CAAC,OAAO,CAAC,EAAE,GAAG,IAAI,GAAG,KAAK,CAAC,OAAO,CAAC,MAAM;sBAC3E,KAAK,CAAC,OAAO,CAAC,EAAE,GAAG,IAAI,GAAG,KAAK,CAAC,GACtC;;;iBAGX,CAAC;aACL;SACJ,CAAC;KACL;IAEO,aAAa;QACjB,IAAI,IAAI,CAAC,kBAAkB,CAAC,WAAW,EAAE;;YAErC,IAAI,CAAC,kBAAkB,CAAC,WAAY,CAAC,MAAO,CAAC,KAAK,GAAG;gBACjD,MAAM,EAAE;oBACJ,KAAK,GAAG,CAAC,KAAU;wBACf,MAAM,eAAe,GAA4B;4BAC7C,IAAI,EAAE,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI;4BAC7B,IAAI,EAAE,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,IAAI,KAAK,CAAC,KAAK,CAAC,EAAE;4BAChD,EAAE,EAAE,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE;4BAC1B,MAAM,EAAE,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM;4BAClC,GAAG,EAAE,KAAK,CAAC,KAAK,CAAC,GAAG;yBACvB,CAAC;wBACF,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;qBAC1C,CAAC;iBACL;aACJ,CAAC;SACL;aAAM;YACH,IAAI,CAAC,kBAAkB,CAAC,WAAW,GAAG;gBAClC,MAAM,EAAE;oBACJ,KAAK,EAAE;wBACH,MAAM,EAAE;4BACJ,KAAK,GAAG,CAAC,KAAU;gCACf,MAAM,eAAe,GAA4B;oCAC7C,IAAI,EAAE,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI;oCAC7B,IAAI,EAAE,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,IAAI,KAAK,CAAC,KAAK,CAAC,EAAE;oCAChD,EAAE,EAAE,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE;oCAC1B,MAAM,EAAE,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM;oCAClC,GAAG,EAAE,KAAK,CAAC,KAAK,CAAC,GAAG;iCACvB,CAAC;gCACF,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;6BAC1C,CAAC;yBACL;qBACJ;iBACJ;aACJ,CAAC;SACL;KACJ;IAEO,0BAA0B,CAAC,MAA0B;QACzD,MAAM,CAAC,OAAO,CAAC,CAAC,YAA8B;YAC1C,YAAY,CAAC,gBAAgB,GAAG,IAAI,CAAC;YACrC,YAAY,CAAC,YAAY,GAAG,IAAI,CAAC;;;;;;;;;;;;;;;;YAgBjC,YAAY,CAAC,MAAM,GAAG,iBAAiB,CAAC,OAAO,CAAC;YAChD,MAAM,IAAI,GAAyB,YAAY,CAAC,IAA4B,CAAC;YAC7E,IAAI,CAAC,wBAAwB,CAAC,IAAI,CAAC,CAAC;YACpC,MAAM,sBAAsB,GAAyB,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;YAC1G,YAAY,CAAC,IAAI,GAAG,sBAAsB,CAAC;SAC9C,CAAC,CAAC;KACN;IAEO,cAAc,CAAC,IAA0B;QAC7C,IAAI,IAAI,CAAC,UAAU,KAAK,mBAAmB,CAAC,OAAO,EAAE;YACjD,IAAI,CAAC,IAAI,CAAC,CAAC,CAAM,EAAE,CAAM;gBACrB,OAAO,CAAC,EAAE,GAAG,CAAC,CAAC,IAAI,EAAE,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;aAC9C,CAAC,CAAC;YACH,OAAO,IAAI,CAAC;SACf;aAAM;YACH,IAAI,CAAC,IAAI,CAAC,CAAC,CAAM,EAAE,CAAM;gBACrB,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE;oBACZ,OAAO,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,KAAK,CAAC;iBAC5B;qBAAM;oBACH,OAAO,CAAC,CAAC;iBACZ;aACJ,CAAC,CAAC;YACH,IAAI,CAAC,OAAO,EAAE,CAAC;YACf,OAAO,IAAI,CAAC;SACf;KACJ;IAEO,wBAAwB,CAAC,IAA0B;QACvD,IAAI,CAAC,OAAO,CAAC,CAAC,OAA2B;YACrC,OAAO,CAAC,KAAK,GAAG,OAAO,CAAC,CAAC,CAAC;YAC1B,OAAO,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC;SACvD,CAAC,CAAC;KACN;IAEO,WAAW;QACf,OAAO,IAAI,CAAC,UAAU,KAAK,eAAe,CAAC,UAAU,GAAG,iBAAiB,CAAC,UAAU,GAAG,iBAAiB,CAAC,UAAU,CAAC;KACvH;IAEO,0BAA0B,CAAC,aAAqB;QACpD,MAAM,KAAK,GAAS,IAAI,CAAC;QACzB,IAAI,CAAC,kBAAkB,CAAC,MAAM,GAAG;YAC7B,OAAO,EAAE,IAAI;YACb,OAAO,EAAE,IAAI;YACb,QAAQ,EAAE,KAAK;YACf,KAAK,EAAE,IAAI,CAAC,kBAAkB,EAAE;YAChC,MAAM,EAAE,UAAU;YAClB,aAAa,EAAE,IAAI,CAAC,0BAA0B,EAAE;YAChD,YAAY,EAAE,EAAE;YAChB,WAAW,EAAE,EAAE;YACf,YAAY,EAAE,CAAC;YACf,aAAa,EAAE,CAAC;YAChB,gBAAgB,EAAE,CAAC;YACnB,SAAS,EAAE;gBACP,QAAQ,EAAE,IAAI,CAAC,UAAU,KAAK,eAAe,CAAC,UAAU,GAAG,MAAM,GAAG,MAAM;gBAC1E,UAAU,EAAE,iBAAiB,CAAC,UAAU;aAC3C;YACD,KAAK,EAAE,aAAa,GAAG,EAAE;YACzB,KAAK,EAAE;gBACH,IAAI,EAAE,KAAK,CAAC,4BAA4B,CAAC,aAAa,GAAG,EAAE,CAAC;gBAC5D,KAAK,EAAE;oBACH,QAAQ,EAAE,IAAI,CAAC,UAAU,KAAK,eAAe,CAAC,UAAU;0BAClD,iBAAiB,CAAC,UAAU,GAAG,iBAAiB,CAAC,UAAU;oBACjE,KAAK,EAAE,SAAS;oBAChB,UAAU,EAAE,iBAAiB,CAAC,UAAU;oBACxC,UAAU,EAAE,2DAA2D;iBAC1E;aACJ;YACD,cAAc;gBACV,MAAM,KAAK,GAAQ,IAAa,CAAC;gBACjC,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,GAAQ,EAAE,GAAQ,KAAK,GAAG,GAAG,GAAG,EAAE,CAAC,CAAC,CAAC;gBACvE,OAAO,KAAK,CAAC,4BAA4B,CACrC,aAAa,EACb,KAAK,CAAC,IAAI,EACV,KAAK,CAAC,CAAC;aACd;SACJ,CAAC;KACL;IAEO,kBAAkB;QACtB,IAAI,IAAI,CAAC,UAAU,KAAK,eAAe,CAAC,UAAU,EAAE;YAChD,OAAO,QAAQ,CAAC;SACnB;aAAM,IAAI,IAAI,CAAC,cAAc,KAAK,kBAAkB,CAAC,KAAK,EAAE;YACzD,OAAO,kBAAkB,CAAC,KAAK,CAAC;SACnC;aAAM,IAAI,IAAI,CAAC,cAAc,KAAK,kBAAkB,CAAC,IAAI,EAAE;YACxD,OAAO,kBAAkB,CAAC,IAAI,CAAC;SAClC;aAAM;YACH,OAAO,QAAQ,CAAC;SACnB;KACJ;IAEO,0BAA0B;QAC9B,IAAI,IAAI,CAAC,UAAU,KAAK,eAAe,CAAC,UAAU,EAAE;YAChD,OAAO,kBAAkB,CAAC,MAAM,CAAC;SACpC;aAAM,IAAI,IAAI,CAAC,cAAc,KAAK,kBAAkB,CAAC,KAAK,EAAE;YACzD,OAAO,QAAQ,CAAC;SACnB;aAAM,IAAI,IAAI,CAAC,cAAc,KAAK,kBAAkB,CAAC,IAAI,EAAE;YACxD,OAAO,QAAQ,CAAC;SACnB;aAAM;YACH,OAAO,kBAAkB,CAAC,MAAM,CAAC;SACpC;KACJ;IAEO,4BAA4B,CAChC,aAAqB,EACrB,IAAoB,EACpB,KAAiC;QACjC,IAAI,qBAA6B,CAAC;QAClC,IAAI,kBAA0B,CAAC;QAC/B,IAAI,IAAI,CAAC,UAAU,KAAK,mBAAmB,CAAC,OAAO,EAAE;YACjD,OAAO;oCACiB,aAAa;;;8BAGnB,IAAI,GAAG,IAAI,GAAG,UAAU;;;uBAG/B,CAAC;SACf;aAAM;YACH,qBAAqB,GAAG,aAAa,GAAG,GAAG,CAAC;YAC5C,kBAAkB,GAAG,aAAa,GAAG,GAAG,CAAC;YACzC,OAAO;oCACiB,qBAAqB,GAAG,kBAAkB;;;8BAGhD,IAAI,GAAG,IAAI,GAAG,UAAU;;;8BAGxB,KAAK,GAAG,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,KAAK,EAAE,IAAI,CAAC,YAAY,EAAE,QAAQ,EAAE,IAAI,CAAC,GAAG,OAAO;;;uBAG9F,CAAC;SACf;KACJ;;2GA7RQ,cAAc;+FAAd,cAAc,8jBC1C3B,0BAAwB;2FD0CX,cAAc;kBAL1B,SAAS;+BACI,kBAAkB;mGASnB,MAAM;sBAAd,KAAK;gBACG,YAAY;sBAApB,KAAK;gBACG,IAAI;sBAAZ,KAAK;gBACG,KAAK;sBAAb,KAAK;gBACG,MAAM;sBAAd,KAAK;gBACG,MAAM;sBAAd,KAAK;gBACG,YAAY;sBAApB,KAAK;gBACG,cAAc;sBAAtB,KAAK;gBACG,UAAU;sBAAlB,KAAK;gBACG,aAAa;sBAArB,KAAK;gBACG,YAAY;sBAApB,KAAK;gBAEI,WAAW;sBAApB,MAAM;gBAEqC,WAAW;sBAAtD,SAAS;uBAAC,aAAa,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE;gBAiC1C,QAAQ;sBADP,YAAY;uBAAC,eAAe;;;AE7FjC;;;;;;;;MCqBa,oBAAoB;;iHAApB,oBAAoB;kHAApB,oBAAoB,iBAdzB,cAAc,aAGd,YAAY,aAGZ,cAAc;kHAQT,oBAAoB,aANlB;QACP,WAAW;QACX,eAAe;QACf,YAAY;KACf,YAVQ;YACL,YAAY;SACf;2FAUQ,oBAAoB;kBAhBhC,QAAQ;mBAAC;oBACN,YAAY,EAAE;wBACV,cAAc;qBACjB;oBACD,OAAO,EAAE;wBACL,YAAY;qBACf;oBACD,OAAO,EAAE;wBACL,cAAc;qBACjB;oBACD,SAAS,EAAE;wBACP,WAAW;wBACX,eAAe;wBACf,YAAY;qBACf;iBACJ;;;ACpBD;;;;;;;;ACAA;;;;;;"}