ngx-step
Version:
A simple library module to generate the different stages for activity to track multiple stages.
1 lines • 23.2 kB
Source Map (JSON)
{"version":3,"file":"ngx-step.mjs","sources":["../../../projects/ngx-step/src/lib/stageformatter.pipe.ts","../../../projects/ngx-step/src/lib/customTimeConverter.pipe.ts","../../../projects/ngx-step/src/lib/customTimeCalculator.pipe.ts","../../../projects/ngx-step/src/lib/ngx-step.component.ts","../../../projects/ngx-step/src/lib/ngx-step.html","../../../projects/ngx-step/src/lib/ngx-step.module.ts","../../../projects/ngx-step/src/public-api.ts","../../../projects/ngx-step/src/ngx-step.ts"],"sourcesContent":["import { Pipe, PipeTransform } from '@angular/core';\r\n\r\n@Pipe({\r\n name: 'formatText'\r\n})\r\nexport class StageFormatterPipe implements PipeTransform {\r\n\r\n transform(data: string, seprator: string): string {\r\n if (data) {\r\n var res = data.split(seprator);\r\n var displayData = \"\";\r\n res.forEach(element=>{\r\n displayData = displayData + ' ' + element;\r\n });\r\n return displayData;\r\n }else{\r\n return '';\r\n }\r\n }\r\n\r\n}\r\n","import { Pipe, PipeTransform } from '@angular/core';\r\nimport * as moment from 'moment';\r\n\r\nlet utc_time;\r\n\r\n@Pipe({\r\n name: 'customTimeConverter'\r\n})\r\nexport class CustomTimeConverterPipe implements PipeTransform {\r\n transform(value: any, ...args: any[]): any {\r\n if(value !=Number){\r\n return moment.utc(value).local().format(\"MMM DD, YYYY hh:mm:ss a\");\r\n }\r\n else{\r\n utc_time = moment(value*1000).utc().format('MMM DD, YYYY hh:mm:ss a');\r\n return moment.utc(utc_time).local().format(\"MMM DD, YYYY hh:mm:ss a\");\r\n }\r\n \r\n }\r\n\r\n}\r\n\r\n","import { Pipe, PipeTransform } from '@angular/core';\r\nimport * as moment from 'moment';\r\nimport { CustomTimeConverterPipe } from './customTimeConverter.pipe';\r\n\r\n@Pipe({\r\n name: 'customTimeCalculator'\r\n})\r\nexport class CustomTimeCalculatorPipe extends CustomTimeConverterPipe implements PipeTransform {\r\n transform(value: any, ...args: any[]): any {\r\n let startTime = value;\r\n let endTime = args[0];\r\n\r\n // Check if startTime is less than endTime, if not then swap them\r\n if (Date.parse(super.transform(startTime)) > Date.parse(super.transform(endTime))) {\r\n [startTime, endTime] = [endTime, startTime];\r\n }\r\n\r\n return moment.utc(Date.parse(super.transform(endTime)) - Date.parse(super.transform(startTime))).format('HH:mm:ss');\r\n }\r\n}\r\n","import { Component, OnInit, Input, OnChanges,ViewChild, SimpleChanges } from '@angular/core';\r\n\r\n\r\n@Component({\r\n selector: 'ngx-step',\r\n templateUrl: 'ngx-step.html',\r\n styleUrls: ['ngx-step.css']\r\n})\r\nexport class NgxStepComponent implements OnChanges {\r\n @Input() updateProgressLogs: any = [] ;\r\n @Input() stages :any = [1,2,3,4,5];\r\n @Input() jobOverallStatus :any = 'NOT_STARTED'; // Possible Values- NOT_STARTED , ACTIVE, COMPLETED, FAILED\r\n @Input() options:any = {\r\n type: 'BASIC',//CUSTOM - you need to generate stages and its\r\n excludeFirstEntry: false,\r\n finalStageName: 'FINISH',\r\n isMultiWordStageName : false,\r\n textSeparator: '_'\r\n };\r\n @Input() logsTableData: any = [];\r\n @Input() showLogs: Boolean = false;\r\n\r\n @Input() logTableOptions:any = {\r\n tableTitle: 'Events & Logs',\r\n tableHeader:['Date/Time','Events/Stages','Description','Status','Time Taken'],\r\n excludeFirstEntry: false,\r\n showTimeDiffColumn: false,\r\n manualCalculationForDuration: false,\r\n ascSortOrder:true,\r\n dateFormat: 'full'\r\n };\r\n\r\n\r\n states: any = [];\r\n logs: any = [];\r\n constructor() { }\r\n ngOnChanges(changes: SimpleChanges): void {\r\n this.ngOnInit();\r\n }\r\n\r\n ngOnInit(): void {\r\n this.generateStages();\r\n if(this.showLogs){\r\n this.logs = this.logsTableData;\r\n }\r\n }\r\n\r\n generateStages(){\r\n if(this.options.type === 'CUSTOM'){\r\n let result = this.groupBy(this.updateProgressLogs.updateInfo, (obj:any) => obj.stage);\r\n if(this.states.length > 0){\r\n this.states = []; //reset previous states data \r\n }\r\n this.stages.forEach((item:any, index:any) => {\r\n var element = item.name ? item.name : item ;\r\n if(element in result){\r\n let stageStatus = result[element][result[element].length-1].status;\r\n this.states.push({'name':element,'status':stageStatus});\r\n }else{\r\n // Then take the value from the updateInfo object\r\n if(index <= 0){\r\n this.states.push({'name':element,'status':'NOT_STARTED'});\r\n }else{\r\n // Check if previous stage of not found element is completed then make the not found stage at position 'index' status as IN_PROGRESS else 'NOT_STARTED'.\r\n var previousStateStatus = this.states[index-1].status;\r\n var newStatusForNotFoundStage = (previousStateStatus === 'COMPLETED' || previousStateStatus === 'SKIPPED') ? 'IN_PROGRESS' : 'NOT_STARTED'; \r\n this.states.push({'name':element,'status':newStatusForNotFoundStage});\r\n }\r\n }\r\n });\r\n }\r\n }\r\n\r\n groupBy(array:any, key:any) {\r\n const keyFn = key instanceof Function ? key : (obj:any) => obj[key];\r\n return array.reduce((objectsByKeyValue:any, obj:any) => {\r\n const value = keyFn(obj);\r\n objectsByKeyValue[value] = (objectsByKeyValue[value] || []).concat(obj);\r\n return objectsByKeyValue;\r\n }, {});\r\n }\r\n\r\n}\r\n","<div class=\"row mt-2\" style=\"overflow: hidden !important;\" *ngIf=\"options.type === 'BASIC'\">\r\n <div class=\"col-md-12 col-sm-12 job-progress-bar p-0 bg-white\">\r\n <div class=\"track\" *ngIf=\"stages.length >0\">\r\n <div class=\"step\" [ngClass]=\"state.status\" *ngFor=\"let state of stages; let i = index\">\r\n <span class=\"icon\"> <em class=\"fas\" [ngClass]=\"{\r\n 'fa-check': state.status === 'COMPLETED',\r\n 'fa-sync fa-spin': state.status === 'IN_PROGRESS',\r\n 'fa-times': state.status === 'FAILED',\r\n 'fa-circle': state.status === 'NOT_STARTED'\r\n }\"></em> </span>\r\n <span class=\"text\" *ngIf=\"options.isMultiWordStageName\">{{state.name | formatText :\r\n options.textSeparator}}</span>\r\n <span class=\"text\" *ngIf=\"!options.isMultiWordStageName\">{{state.name}}</span>\r\n\r\n </div>\r\n <div class=\"step\">\r\n <span class=\"icon\" [ngClass]=\"{\r\n 'job-success': (jobOverallStatus === 'COMPLETED' && states[this.states.length - 1].status === 'COMPLETED' ), \r\n 'text-white': (jobOverallStatus === 'ACTIVE'),\r\n 'job-failed': (jobOverallStatus === 'FAILED')\r\n }\">\r\n <em class=\"fa fa-clipboard-check\" *ngIf=\"jobOverallStatus === 'COMPLETED'\"></em>\r\n <em class=\"fa fa-times\" *ngIf=\"jobOverallStatus === 'FAILED'\"></em>\r\n <em class=\"fa fa-clipboard-check\"\r\n *ngIf=\"jobOverallStatus === 'ACTIVE' && states[this.states.length - 1].status != 'COMPLETED' \"></em>\r\n <em class=\"fa fa-cog fa-spin text-muted\"\r\n *ngIf=\"jobOverallStatus === 'ACTIVE' && states[this.states.length - 1].status === 'COMPLETED' \"></em>\r\n </span>\r\n <span class=\"text\">\r\n {{options.finalStageName}}\r\n </span>\r\n </div>\r\n </div>\r\n </div>\r\n</div>\r\n\r\n<div class=\"row mt-2\" style=\"overflow: hidden !important;\" *ngIf=\"options.type === 'CUSTOM'\">\r\n <div class=\"col-md-12 col-sm-12 job-progress-bar p-0 bg-white\">\r\n <div class=\"track\" *ngIf=\"states.length >0\">\r\n <div class=\"step\" [ngClass]=\"state.status\" *ngFor=\"let state of states; let i = index\">\r\n <span class=\"icon\"> <em class=\"fas\" [ngClass]=\"{\r\n 'fa-check': state.status === 'COMPLETED',\r\n 'fa-sync fa-spin': state.status === 'IN_PROGRESS',\r\n 'fa-times': state.status === 'FAILED',\r\n 'fa-circle': state.status === 'NOT_STARTED',\r\n 'fa-forward': state.status === 'SKIPPED'\r\n }\"></em> </span>\r\n <span class=\"text\" *ngIf=\"options.isMultiWordStageName\">{{state.name | formatText :\r\n options.textSeparator}}</span>\r\n <span class=\"text\" *ngIf=\"!options.isMultiWordStageName\">{{state.name}}</span>\r\n </div>\r\n <div class=\"step\">\r\n <span class=\"icon\" [ngClass]=\"{\r\n 'job-success': (jobOverallStatus === 'COMPLETED'), \r\n 'text-white': (jobOverallStatus === 'ACTIVE'),\r\n 'job-failed': (jobOverallStatus === 'FAILED')\r\n }\">\r\n <em class=\"fa fa-clipboard-check\" *ngIf=\"jobOverallStatus === 'COMPLETED'\"></em>\r\n <em class=\"fa fa-times\" *ngIf=\"jobOverallStatus === 'FAILED'\"></em>\r\n <em class=\"fa fa-cog fa-spin text-muted\" *ngIf=\"jobOverallStatus === 'ACTIVE'\"></em>\r\n </span>\r\n <span class=\"text\">\r\n {{options.finalStageName}}\r\n </span>\r\n </div>\r\n </div>\r\n </div>\r\n</div>\r\n<!-- If user wants Logs to display -->\r\n<div class=\"row mt-2\" *ngIf=\"showLogs\">\r\n <div class=\"col-md-12\">\r\n <div class=\"shadow-none\">\r\n <div class=\"card\">\r\n <div class=\"card-header ngxHeader\">\r\n <h3 class=\"card-title ngxHeaderTitle\">{{logTableOptions.tableTitle}}</h3>\r\n </div>\r\n\r\n <div class=\"card-body p-0 ngxTable\">\r\n <table class=\"table table-striped\" *ngIf=\"logs.length > 0\">\r\n <!-- <thead>\r\n <tr>\r\n <th *ngFor=\"let heads of tableHeader; let i = index\">{{heads.display_name}}</th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n <tr *ngFor=\"let element of jobDetailsData.updateInfo; let i = index\">\r\n <td *ngFor=\"let heads of tableHeader; let i = index\">\r\n {{element[heads.feild_name]}}\r\n </td>\r\n </tr>\r\n </tbody> -->\r\n <thead>\r\n <tr>\r\n <th>Date/Time</th>\r\n <th>Stages</th>\r\n <th>Description</th>\r\n <th>Status</th>\r\n <th *ngIf=\"logTableOptions.showTimeDiffColumn\">Time Taken (HH:MM:SS)</th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n <tr *ngFor=\"let element of logs; let i = index\">\r\n <td *ngIf=\"(logTableOptions?.dateFormat) && (logTableOptions?.dateFormat !='')\">{{(element.time_stamp | customTimeConverter)| date: logTableOptions.dateFormat }}</td>\r\n <td *ngIf=\"(!logTableOptions?.dateFormat) || (logTableOptions?.dateFormat ==='')\">{{(element.time_stamp | customTimeConverter)}}</td>\r\n <td>{{element.stage | formatText : options.textSeparator}}</td>\r\n <td>\r\n {{element.message}}\r\n <p *ngIf=\"element.status == 'FAILED'\">\r\n <strong>Reason : </strong>\r\n <span class=\"text-danger\">{{element.error_message}}</span>\r\n </p>\r\n </td>\r\n <td [ngClass]=\"{\r\n 'stage_failed': element.status == 'FAILED',\r\n 'stage_completed': element.status == 'COMPLETED',\r\n 'stage_progress': element.status == 'IN_PROGRESS',\r\n 'stage_not_started': element.status == 'NOT_STARTED'}\">\r\n <em class=\"fas mr-1\" [ngClass]=\"{\r\n 'fa-check': element.status === 'COMPLETED',\r\n 'fa-sync fa-spin': element.status === 'IN_PROGRESS',\r\n 'fa-times': element.status === 'FAILED',\r\n 'fa-circle': element.status === 'NOT_STARTED',\r\n 'fa-forward': element.status === 'SKIPPED'}\">\r\n </em>\r\n {{element.status | formatText : options.textSeparator}}\r\n </td>\r\n <td *ngIf=\"logTableOptions.showTimeDiffColumn\">\r\n <ng-container *ngIf=\"!logTableOptions.manualCalculationForDuration\">\r\n <span *ngIf=\"logs[i] && logs[i+1]\">\r\n {{(logs[i].time_stamp)|customTimeCalculator:logs[i+1].time_stamp}}\r\n </span>\r\n </ng-container>\r\n <ng-container *ngIf=\"logTableOptions.manualCalculationForDuration\">\r\n {{(logs[i]?.time_taken)}}\r\n </ng-container>\r\n \r\n </td>\r\n <!-- <td *ngIf=\"logTableOptions.showTimeDiffColumn && !logTableOptions.autoCalulateDuration\">\r\n {{(logs[i]?.time_taken)}}\r\n </td> -->\r\n </tr>\r\n </tbody>\r\n </table>\r\n <div class=\"row\" *ngIf=\"logs.length == 0\">\r\n <div class=\"error-page\" *ngIf=\"dataSource && dataSource.data.length === 0\">\r\n <div class=\"error-content\">\r\n <h3><em class=\"fas fa-exclamation-triangle\"></em> No Data Found.</h3>\r\n <p> Looks like there is no logs available.</p>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n </div>\r\n </div>\r\n </div>\r\n</div>","import { CommonModule } from '@angular/common';\r\nimport { NgModule } from '@angular/core';\r\nimport { NgxStepComponent } from './ngx-step.component';\r\nimport { StageFormatterPipe } from './stageformatter.pipe';\r\nimport { CustomTimeCalculatorPipe } from './customTimeCalculator.pipe';\r\nimport { CustomTimeConverterPipe } from './customTimeConverter.pipe';\r\n\r\n@NgModule({\r\n declarations: [\r\n NgxStepComponent,\r\n StageFormatterPipe,\r\n CustomTimeConverterPipe,\r\n CustomTimeCalculatorPipe\r\n ],\r\n imports: [\r\n CommonModule \r\n ],\r\n exports: [\r\n NgxStepComponent\r\n ]\r\n})\r\nexport class NgxStepModule { }\r\n","/*\r\n * Public API Surface of ngx-step\r\n */\r\n\r\nexport * from './lib/ngx-step.component';\r\nexport * from './lib/ngx-step.module';\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i2.StageFormatterPipe","i3.CustomTimeConverterPipe","i4.CustomTimeCalculatorPipe"],"mappings":";;;;;;MAKa,kBAAkB,CAAA;IAE7B,SAAS,CAAC,IAAY,EAAE,QAAgB,EAAA;AACtC,QAAA,IAAI,IAAI,EAAE;YACR,IAAI,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;YAC/B,IAAI,WAAW,GAAG,EAAE,CAAC;AACrB,YAAA,GAAG,CAAC,OAAO,CAAC,OAAO,IAAE;AACnB,gBAAA,WAAW,GAAG,WAAW,GAAG,GAAG,GAAG,OAAO,CAAC;AAC5C,aAAC,CAAC,CAAC;AACH,YAAA,OAAO,WAAW,CAAC;AACpB,SAAA;AAAI,aAAA;AACH,YAAA,OAAO,EAAE,CAAC;AACX,SAAA;KACF;;+GAbU,kBAAkB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,IAAA,EAAA,CAAA,CAAA;6GAAlB,kBAAkB,EAAA,IAAA,EAAA,YAAA,EAAA,CAAA,CAAA;2FAAlB,kBAAkB,EAAA,UAAA,EAAA,CAAA;kBAH9B,IAAI;AAAC,YAAA,IAAA,EAAA,CAAA;AACJ,oBAAA,IAAI,EAAE,YAAY;AACnB,iBAAA,CAAA;;;ACDD,IAAI,QAAQ,CAAC;MAKA,uBAAuB,CAAA;AAClC,IAAA,SAAS,CAAC,KAAU,EAAE,GAAG,IAAW,EAAA;QAClC,IAAG,KAAK,IAAG,MAAM,EAAC;AAChB,YAAA,OAAO,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,CAAC,MAAM,CAAC,yBAAyB,CAAC,CAAC;AACpE,SAAA;AACG,aAAA;AACF,YAAA,QAAQ,GAAG,MAAM,CAAC,KAAK,GAAC,IAAI,CAAC,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,yBAAyB,CAAC,CAAC;AACtE,YAAA,OAAO,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,KAAK,EAAE,CAAC,MAAM,CAAC,yBAAyB,CAAC,CAAC;AACvE,SAAA;KAEF;;oHAVU,uBAAuB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,IAAA,EAAA,CAAA,CAAA;kHAAvB,uBAAuB,EAAA,IAAA,EAAA,qBAAA,EAAA,CAAA,CAAA;2FAAvB,uBAAuB,EAAA,UAAA,EAAA,CAAA;kBAHnC,IAAI;AAAC,YAAA,IAAA,EAAA,CAAA;AACJ,oBAAA,IAAI,EAAE,qBAAqB;AAC5B,iBAAA,CAAA;;;ACAK,MAAO,wBAAyB,SAAQ,uBAAuB,CAAA;AACnE,IAAA,SAAS,CAAC,KAAU,EAAE,GAAG,IAAW,EAAA;QAClC,IAAI,SAAS,GAAG,KAAK,CAAC;AACtB,QAAA,IAAI,OAAO,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;;QAGtB,IAAI,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,EAAE;YACjF,CAAC,SAAS,EAAE,OAAO,CAAC,GAAG,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC;AAC7C,SAAA;AAED,QAAA,OAAO,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;KACrH;;qHAXU,wBAAwB,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,IAAA,EAAA,CAAA,CAAA;mHAAxB,wBAAwB,EAAA,IAAA,EAAA,sBAAA,EAAA,CAAA,CAAA;2FAAxB,wBAAwB,EAAA,UAAA,EAAA,CAAA;kBAHpC,IAAI;AAAC,YAAA,IAAA,EAAA,CAAA;AACJ,oBAAA,IAAI,EAAE,sBAAsB;AAC7B,iBAAA,CAAA;;;MCEY,gBAAgB,CAAA;AA2B3B,IAAA,WAAA,GAAA;QA1BS,IAAkB,CAAA,kBAAA,GAAQ,EAAE,CAAE;AAC9B,QAAA,IAAA,CAAA,MAAM,GAAQ,CAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,CAAC,CAAC;AAC1B,QAAA,IAAA,CAAA,gBAAgB,GAAQ,aAAa,CAAC;AACtC,QAAA,IAAA,CAAA,OAAO,GAAO;AACrB,YAAA,IAAI,EAAE,OAAO;AACb,YAAA,iBAAiB,EAAE,KAAK;AACxB,YAAA,cAAc,EAAE,QAAQ;AACxB,YAAA,oBAAoB,EAAG,KAAK;AAC5B,YAAA,aAAa,EAAE,GAAG;SACnB,CAAC;QACO,IAAa,CAAA,aAAA,GAAQ,EAAE,CAAC;QACxB,IAAQ,CAAA,QAAA,GAAY,KAAK,CAAC;AAE1B,QAAA,IAAA,CAAA,eAAe,GAAO;AAC7B,YAAA,UAAU,EAAE,eAAe;YAC3B,WAAW,EAAC,CAAC,WAAW,EAAC,eAAe,EAAC,aAAa,EAAC,QAAQ,EAAC,YAAY,CAAC;AAC7E,YAAA,iBAAiB,EAAE,KAAK;AACxB,YAAA,kBAAkB,EAAE,KAAK;AACzB,YAAA,4BAA4B,EAAE,KAAK;AACnC,YAAA,YAAY,EAAC,IAAI;AACjB,YAAA,UAAU,EAAE,MAAM;SACnB,CAAC;QAGF,IAAM,CAAA,MAAA,GAAQ,EAAE,CAAC;QACjB,IAAI,CAAA,IAAA,GAAQ,EAAE,CAAC;KACE;AACjB,IAAA,WAAW,CAAC,OAAsB,EAAA;QAChC,IAAI,CAAC,QAAQ,EAAE,CAAC;KACjB;IAED,QAAQ,GAAA;QACN,IAAI,CAAC,cAAc,EAAE,CAAC;QACtB,IAAG,IAAI,CAAC,QAAQ,EAAC;AACb,YAAA,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,aAAa,CAAC;AAClC,SAAA;KACF;IAED,cAAc,GAAA;AACZ,QAAA,IAAG,IAAI,CAAC,OAAO,CAAC,IAAI,KAAK,QAAQ,EAAC;YAChC,IAAI,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,kBAAkB,CAAC,UAAU,EAAE,CAAC,GAAO,KAAK,GAAG,CAAC,KAAK,CAAC,CAAC;AACtF,YAAA,IAAG,IAAI,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,EAAC;AACxB,gBAAA,IAAI,CAAC,MAAM,GAAG,EAAE,CAAC;AAClB,aAAA;YACD,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAQ,EAAE,KAAS,KAAI;AAC1C,gBAAA,IAAI,OAAO,GAAG,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,GAAG,IAAI,CAAE;gBAC5C,IAAG,OAAO,IAAI,MAAM,EAAC;AACnB,oBAAA,IAAI,WAAW,GAAI,MAAM,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,MAAM,GAAC,CAAC,CAAC,CAAC,MAAM,CAAC;AACpE,oBAAA,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,EAAC,MAAM,EAAC,OAAO,EAAC,QAAQ,EAAC,WAAW,EAAC,CAAC,CAAC;AACzD,iBAAA;AAAI,qBAAA;;oBAEH,IAAG,KAAK,IAAI,CAAC,EAAC;AACZ,wBAAA,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,EAAC,MAAM,EAAC,OAAO,EAAC,QAAQ,EAAC,aAAa,EAAC,CAAC,CAAC;AAC3D,qBAAA;AAAI,yBAAA;;AAEF,wBAAA,IAAI,mBAAmB,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,GAAC,CAAC,CAAC,CAAC,MAAM,CAAC;AACtD,wBAAA,IAAI,yBAAyB,GAAG,CAAC,mBAAmB,KAAK,WAAW,IAAK,mBAAmB,KAAK,SAAS,IAAI,aAAa,GAAG,aAAa,CAAC;AAC5I,wBAAA,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,EAAC,MAAM,EAAC,OAAO,EAAC,QAAQ,EAAC,yBAAyB,EAAC,CAAC,CAAC;AACtE,qBAAA;AACJ,iBAAA;AACH,aAAC,CAAC,CAAC;AACJ,SAAA;KACF;IAED,OAAO,CAAC,KAAS,EAAE,GAAO,EAAA;QACxB,MAAM,KAAK,GAAG,GAAG,YAAY,QAAQ,GAAG,GAAG,GAAG,CAAC,GAAO,KAAK,GAAG,CAAC,GAAG,CAAC,CAAC;QACpE,OAAO,KAAK,CAAC,MAAM,CAAC,CAAC,iBAAqB,EAAE,GAAO,KAAI;AACrD,YAAA,MAAM,KAAK,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC;AACzB,YAAA,iBAAiB,CAAC,KAAK,CAAC,GAAG,CAAC,iBAAiB,CAAC,KAAK,CAAC,IAAI,EAAE,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC;AACxE,YAAA,OAAO,iBAAiB,CAAC;SAC1B,EAAE,EAAE,CAAC,CAAC;KACR;;6GAxEU,gBAAgB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAhB,gBAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,gBAAgB,iSCR7B,2hTA4JM,EAAA,MAAA,EAAA,CAAA,g3KAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,cAAA,EAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAA,EAAA,CAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAAA,kBAAA,EAAA,IAAA,EAAA,YAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAAC,uBAAA,EAAA,IAAA,EAAA,qBAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAAC,wBAAA,EAAA,IAAA,EAAA,sBAAA,EAAA,CAAA,EAAA,CAAA,CAAA;2FDpJO,gBAAgB,EAAA,UAAA,EAAA,CAAA;kBAL5B,SAAS;+BACE,UAAU,EAAA,QAAA,EAAA,2hTAAA,EAAA,MAAA,EAAA,CAAA,g3KAAA,CAAA,EAAA,CAAA;0EAKX,kBAAkB,EAAA,CAAA;sBAA1B,KAAK;gBACG,MAAM,EAAA,CAAA;sBAAd,KAAK;gBACG,gBAAgB,EAAA,CAAA;sBAAxB,KAAK;gBACG,OAAO,EAAA,CAAA;sBAAf,KAAK;gBAOG,aAAa,EAAA,CAAA;sBAArB,KAAK;gBACG,QAAQ,EAAA,CAAA;sBAAhB,KAAK;gBAEG,eAAe,EAAA,CAAA;sBAAvB,KAAK;;;MEDK,aAAa,CAAA;;0GAAb,aAAa,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,QAAA,EAAA,CAAA,CAAA;AAAb,aAAA,CAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,aAAa,iBAZtB,gBAAgB;QAChB,kBAAkB;QAClB,uBAAuB;QACvB,wBAAwB,CAAA,EAAA,OAAA,EAAA,CAGxB,YAAY,CAAA,EAAA,OAAA,EAAA,CAGZ,gBAAgB,CAAA,EAAA,CAAA,CAAA;AAGP,aAAA,CAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,aAAa,YANtB,YAAY,CAAA,EAAA,CAAA,CAAA;2FAMH,aAAa,EAAA,UAAA,EAAA,CAAA;kBAdzB,QAAQ;AAAC,YAAA,IAAA,EAAA,CAAA;AACR,oBAAA,YAAY,EAAE;wBACZ,gBAAgB;wBAChB,kBAAkB;wBAClB,uBAAuB;wBACvB,wBAAwB;AACzB,qBAAA;AACD,oBAAA,OAAO,EAAE;wBACP,YAAY;AACb,qBAAA;AACD,oBAAA,OAAO,EAAE;wBACP,gBAAgB;AACjB,qBAAA;AACF,iBAAA,CAAA;;;ACpBD;;AAEG;;ACFH;;AAEG;;;;"}