@servicemind.tis/tis-smart-table-viewer 1.0.0 → 1.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"file":"servicemind.tis-tis-smart-table-viewer.mjs","sources":["../../../projects/tis-smart-table-viewer/src/lib/tis-smart-table-viewer.service.ts","../../../projects/tis-smart-table-viewer/src/lib/datasources/api.datasource.ts","../../../projects/tis-smart-table-viewer/src/lib/services/api.service.ts","../../../projects/tis-smart-table-viewer/src/lib/helpers/storage-helper.ts","../../../projects/tis-smart-table-viewer/src/lib/directives/scrolling/scrolling.directive.ts","../../../projects/tis-smart-table-viewer/src/lib/services/user-customization.service.ts","../../../projects/tis-smart-table-viewer/src/lib/components/tis-smart-table-error-dialog/tis-smart-table-error-dialog.component.ts","../../../projects/tis-smart-table-viewer/src/lib/components/tis-smart-table-error-dialog/tis-smart-table-error-dialog.component.html","../../../projects/tis-smart-table-viewer/src/lib/services/tis-helper.service.ts","../../../projects/tis-smart-table-viewer/src/lib/components/tis-smart-table-confirmation-dialog/tis-smart-table-confirmation-dialog.component.ts","../../../projects/tis-smart-table-viewer/src/lib/components/tis-smart-table-confirmation-dialog/tis-smart-table-confirmation-dialog.component.html","../../../projects/tis-smart-table-viewer/src/lib/components/create-columns-template/create-columns-template.component.ts","../../../projects/tis-smart-table-viewer/src/lib/components/create-columns-template/create-columns-template.component.html","../../../projects/tis-smart-table-viewer/src/lib/components/tis-columns-btn/tis-columns-btn.component.ts","../../../projects/tis-smart-table-viewer/src/lib/components/tis-columns-btn/tis-columns-btn.component.html","../../../projects/tis-smart-table-viewer/src/lib/pipes/tis-date.pipe.ts","../../../projects/tis-smart-table-viewer/src/lib/pipes/tis-date-time.pipe.ts","../../../projects/tis-smart-table-viewer/src/lib/pipes/tis-date-time-with-seconds.pipe.ts","../../../projects/tis-smart-table-viewer/src/lib/components/tis-smart-table-viewer/tis-smart-table-viewer.component.ts","../../../projects/tis-smart-table-viewer/src/lib/components/tis-smart-table-viewer/tis-smart-table-viewer.component.html","../../../projects/tis-smart-table-viewer/src/lib/pipes/quantity.pipe.ts","../../../projects/tis-smart-table-viewer/src/lib/pipes/money.pipe.ts","../../../projects/tis-smart-table-viewer/src/lib/tis-smart-table-viewer.module.ts","../../../projects/tis-smart-table-viewer/src/public-api.ts","../../../projects/tis-smart-table-viewer/src/servicemind.tis-tis-smart-table-viewer.ts"],"sourcesContent":["import { Injectable } from '@angular/core';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class TisSmartTableViewerService {\n\n constructor() { }\n}\n","import { CollectionViewer, DataSource } from '@angular/cdk/collections';\nimport { BehaviorSubject, Observable, Subscription, of } from 'rxjs';\nimport { catchError, finalize } from 'rxjs/operators';\nimport { ApiService } from '../services/api.service';\n\nexport class ApiDataSource implements DataSource<any> {\n\n private apiSubs!: Subscription;\n\n apiSubject = new BehaviorSubject<any[]>([]);\n\n private loadingSubject = new BehaviorSubject<boolean>(false);\n public loading$ = this.loadingSubject.asObservable();\n\n public totalDataLength = new BehaviorSubject<number | null>(null);\n public totalDataLength$ = this.totalDataLength.asObservable();\n\n constructor(private apiService: ApiService) { \n console.log(' DataSource Initialized...')\n }\n\n connect(collectionViewer: CollectionViewer): Observable<any[]> {\n return this.apiSubject.asObservable();\n }\n\n disconnect(collectionViewer: CollectionViewer): void {\n this.apiSubject.complete();\n this.loadingSubject.complete();\n }\n\n load(url: string, pageIndex: number, pageSize: number, search: string, filter?: object, sortFilter?: object) {\n\n if(this.apiSubs) {\n this.apiSubs.unsubscribe();\n }\n\n this.loadingSubject.next(true);\n this.apiSubs = this.apiService.getList(url, (pageIndex + 1), pageSize, search, {filter}, {sortFilter}).pipe(\n catchError(() => of([])),\n finalize(() => this.loadingSubject.next(false))\n ).subscribe(r => {\n console.log(`DataSource: Url: ${url}, Reply:`, r);\n if (r?.data?.length > 0) {\n this.totalDataLength.next(r?.total);\n }\n else {\n this.totalDataLength.next(0);\n }\n this.apiSubject.next(r?.data);\n });\n }\n}\n","import { Injectable } from '@angular/core';\nimport { HttpClient } from '@angular/common/http';\nimport { Observable } from 'rxjs';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class ApiService {\n\n constructor(private http: HttpClient) {\n }\n\n getList(apiUrl: string, currentPage: number = 1, limit = 10, search = '', filters?: object, sortFilter?: object): Observable<any> {\n const body = { ...filters, ...sortFilter };\n return this.http.get(`${apiUrl}?current_page=${currentPage}&per_page=${limit}&search=${search}`)\n }\n}\n","\nexport const setToLocalStorageWithExpiry = (key: string, value: any, ttl = 9 * 1000 * 60 * 60) => {\n const now = new Date();\n // `item` is an object which contains the original value\n // as well as the time when it's supposed to expire\n const item = {\n value,\n expiry: now.getTime() + ttl\n };\n localStorage.setItem(key, JSON.stringify(item));\n};\n\n\nexport const getFromLocalStorageWithExpiry = (key: string) => {\n const itemStr = localStorage.getItem(key);\n // if the item doesn't exist, return null\n if (!itemStr) {\n return null;\n }\n const item = JSON.parse(itemStr);\n const now = new Date();\n\n if (!item.expiry) {\n localStorage.removeItem(key);\n return null;\n }\n\n // compare the expiry time of the item with the current time\n if (now.getTime() > item.expiry) {\n // If the item is expired, delete the item from storage\n // and return null\n localStorage.removeItem(key);\n return null;\n }\n return item.value;\n};\n\nexport const removeMultipleKeys = (keys: string[]) => {\n console.log('Storage Helper: Keys To Remove:', keys);\n keys.forEach(key => {\n localStorage.removeItem(key);\n });\n}","import { Directive, ElementRef, HostListener, Input } from '@angular/core';\n\n@Directive({\n selector: '[appScrolling]',\n standalone: false\n})\nexport class ScrollingDirective {\n constructor(private el: ElementRef) { }\n \n @Input() appScrolling: boolean = false;\n\n // @HostListener('mouseenter') onMouseEnter() {}\n\n @HostListener('mouseleave') onMouseLeave() {\n // console.log(\"==== appScrolling mouseleave ===\", this.el.nativeElement, this.appScrolling);\n this.el.nativeElement.classList.remove('more-scrollbar-width', 'more-scrollbar-height')\n }\n\n @HostListener('mousemove', ['$event']) onMousemove(event: MouseEvent) {\n // console.log(\"==== appScrolling mousemove clientX-clientY ===\", event.clientX, event.clientY);\n // console.log(\"==== appScrolling mousemove clientWidth-clientHeight ===\", this.el.nativeElement.clientWidth, this.el.nativeElement.clientHeight);\n // console.log(\"==== appScrolling mousemove offsetX-offsetY ===\", this.el.nativeElement.offsetX, this.el.nativeElement.offsetY);\n // console.log(\"==== appScrolling mousemove offsetWidth-offsetLeft ===\", this.el.nativeElement.offsetWidth, this.el.nativeElement.offsetLeft);\n // console.log(\"==== appScrolling mousemove json ===\", {\n // clientX: event.clientX,\n // clientY: event.clientY,\n // clientWidth: this.el.nativeElement.clientWidth,\n // clientHeight: this.el.nativeElement.clientHeight,\n // offsetX: this.el.nativeElement.offsetX,\n // offsetY: this.el.nativeElement.offsetY,\n // offsetWidth: this.el.nativeElement.offsetWidth,\n // offsetLeft: this.el.nativeElement.offsetLeft,\n // rect: this.el.nativeElement.getBoundingClientRect()\n // });\n\n const rect = this.el.nativeElement.getBoundingClientRect()\n\n let xDistance = rect.left + this.el.nativeElement.clientWidth + 10 - event.clientX;\n // console.log(\"=== appScrolling mousemove xDistance ===\", xDistance);\n xDistance < 15 && xDistance > -15 ? this.el.nativeElement.classList.add('more-scrollbar-width'): this.el.nativeElement.classList.remove('more-scrollbar-width');\n\n let yDistance = rect.top + this.el.nativeElement.clientHeight + 15 - event.clientY;\n // console.log(\"=== appScrolling mousemove yDistance ===\", yDistance);\n yDistance < 20 && yDistance > -20 ? this.el.nativeElement.classList.add('more-scrollbar-height'): this.el.nativeElement.classList.remove('more-scrollbar-height');\n // this.el.nativeElement.classList.remove('more-scrollbar-width', 'more-scrollbar-height')\n }\n\n}\n","import { Injectable } from '@angular/core';\nimport { HttpClient } from '@angular/common/http';\nimport { Observable } from 'rxjs';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class UserCustomizationService {\n\n constructor(private http: HttpClient) {}\n\n getColumnsTemplates(url: string, listComponent: string): Observable<any> {\n return this.http.get(`${url}?listComponent=${listComponent}`);\n }\n\n addColumnsTemplate(url: string, body: any): Observable<any> {\n return this.http.post(url, body);\n }\n\n updateColumnsTemplate(url: string, body: any): Observable<any> {\n return this.http.post(url, body);\n }\n\n deleteColumnsTemplate(url: string, body: any): Observable<any> {\n return this.http.put(url, body);\n }\n\n getSelectedColumnsTemplate(url: string, listComponent: string): Observable<any> {\n return this.http.get(`${url}?listComponent=${listComponent}`);\n }\n\n updateSelectedColumnsTemplate(url: string, body: any): Observable<any> {\n return this.http.post(url, body);\n }\n}\n","import { Component, Inject } from '@angular/core';\nimport { MAT_DIALOG_DATA, MatDialogRef } from '@angular/material/dialog';\n\n@Component({\n selector: 'tis-smart-table-error-dialog',\n standalone: false,\n templateUrl: './tis-smart-table-error-dialog.component.html',\n styleUrl: './tis-smart-table-error-dialog.component.css'\n})\nexport class TisSmartTableErrorDialogComponent {\n constructor(\n public dialogRef: MatDialogRef<TisSmartTableErrorDialogComponent>,\n @Inject(MAT_DIALOG_DATA) public data: any,\n ) {}\n\n onClose(): void {\n this.dialogRef.close();\n }\n}\n","<h1 mat-dialog-title>\n <mat-icon class=\"{{data?.iconClass}}\">{{data?.icon}}</mat-icon>\n {{data?.title}}\n</h1>\n<div mat-dialog-content>\n {{data?.message}}\n</div>\n<div mat-dialog-actions>\n <button mat-button class=\"tis-text-upper {{data?.buttonClass ?? 'tis-btn-primary'}}\" (click)=\"onClose()\" cdkFocusInitial *ngIf=\"data?.buttonText && data?.buttonText != ''\">{{data?.buttonText}}</button>\n</div>","import { HttpClient, HttpErrorResponse, HttpHeaders } from '@angular/common/http';\nimport { Injectable } from '@angular/core';\nimport { MatDialog, MatDialogRef } from '@angular/material/dialog';\nimport { MatSnackBar, MatSnackBarRef, TextOnlySnackBar } from '@angular/material/snack-bar';\nimport { TisSmartTableErrorDialogComponent } from '../components/tis-smart-table-error-dialog/tis-smart-table-error-dialog.component';\nimport { Observable } from 'rxjs';\n\n\n@Injectable({\n providedIn: 'root'\n})\nexport class TisHelperService {\n\n constructor(\n private snackBar: MatSnackBar,\n private dialog: MatDialog,\n private http: HttpClient\n ) { }\n\n showHttpErrorMsg(error: HttpErrorResponse, duration = 5000) {\n console.log('httpError: ', error);\n\n let errorMessage = 'Some Unknown Error Occurred.';\n let errorCode = 'Unknown Error';\n const httpError = error;\n\n if (httpError.status >= 400) {\n const errorFromServer = httpError.error;\n if (Array.isArray(errorFromServer) && errorFromServer.length > 0) {\n errorMessage = errorFromServer[0].message;\n errorCode = errorFromServer[0].code;\n }\n } else if (httpError.status < 100) {\n errorMessage = httpError.message;\n errorCode = httpError.statusText;\n }\n\n if (errorCode == \"VALIDATION_ERROR\" || errorCode == \"NOT_FOUND_ERROR\" || errorCode == \"THIRD_PARTY_API_ERROR\") {\n let confirmBoxData: any = {\n title: \"Error !\",\n message: errorMessage,\n icon: \"error\",\n iconClass: \"tis-text-danger\",\n buttonText: \"Ok\",\n buttonClass: \"tis-btn-primary\",\n };\n\n const dialogRef: MatDialogRef<TisSmartTableErrorDialogComponent> = this.dialog.open(TisSmartTableErrorDialogComponent, {\n width: \"550px\",\n panelClass: ['tis-simple-confirmation'],\n data: confirmBoxData,\n disableClose: false,\n });\n\n return dialogRef;\n\n } else {\n const snackbarRef: MatSnackBarRef<TextOnlySnackBar> = this.snackBar.open(errorMessage, 'Error', { duration: duration });\n return snackbarRef;\n }\n\n }\n\n showSuccessMsg(message: string, title: string, duration = 5000) {\n this.snackBar.open(message, title, {\n duration: duration\n })\n }\n\n showErrorMsg(message: string, title: string, duration = 5000) {\n this.snackBar.open(message, title, {\n duration: duration\n })\n }\n\n sortArrayByOrder(A: string[], B: string[]): string[] {\n const sortedA = [];\n for (const element of B) {\n const index = A.indexOf(element);\n if (index !== -1) {\n sortedA.push(A[index]);\n A.splice(index, 1);\n }\n }\n return [...sortedA, ...A]; // Combine sorted elements with remaining elements\n }\n\n}","import { Component, Inject } from '@angular/core';\nimport { MatDialogRef, MAT_DIALOG_DATA } from '@angular/material/dialog';\n\n@Component({\n selector: 'tis-smart-table-confirmation-dialog',\n standalone: false,\n templateUrl: './tis-smart-table-confirmation-dialog.component.html',\n styleUrl: './tis-smart-table-confirmation-dialog.component.css'\n})\nexport class TisSmartTableConfirmationDialogComponent {\n constructor(\n public dialogRef: MatDialogRef<TisSmartTableConfirmationDialogComponent>,\n @Inject(MAT_DIALOG_DATA) public data: any,\n ) {\n this.dialogRef.addPanelClass(['tis-smart-table-confirmation-dialog']);\n }\n\n onClose(status: boolean | null): void {\n this.dialogRef.close(status);\n }\n}\n","<h1 mat-dialog-title style=\"align-items: center; display: flex;\">\n <mat-icon class=\"{{data?.iconClass}}\" style=\"color: var(--tis-cancel, #bb333b)\">{{data?.icon}}</mat-icon>\n <span>{{data?.title}}</span>\n</h1>\n<div mat-dialog-content style=\"padding: 20px 24px; padding-top: 0px;\">\n @if(data?.html){\n <h5 class=\"title\">{{data?.message}}</h5>\n <div [innerHTML]=\"data.html\">\n </div>\n }\n @else {\n <span>{{data?.message}}</span>\n }\n</div>\n<div mat-dialog-actions>\n <button mat-button class=\"{{data?.cancelButtonClass}}\" style=\"color: var(--tis-primary, var(--mat-sys-primary))\" (click)=\"onClose(false)\" *ngIf=\"data?.cancelButtonText && data?.cancelButtonText != ''\">{{data?.cancelButtonText}}</button>\n <button mat-button class=\"{{data?.approveButtonClass}}\" style=\"color: var(--tis-cancel, #bb333b)\" (click)=\"onClose(true)\" cdkFocusInitial *ngIf=\"data?.approveButtonText && data?.approveButtonText != ''\">{{data?.approveButtonText}}</button>\n</div>","import { CdkDragDrop, moveItemInArray } from '@angular/cdk/drag-drop';\nimport { Component, Inject } from '@angular/core';\nimport { FormGroup, FormControl, Validators } from '@angular/forms';\nimport { MatDialogRef, MAT_DIALOG_DATA } from '@angular/material/dialog';\nimport { MatSnackBar } from '@angular/material/snack-bar';\nimport { TisHelperService } from '../../services/tis-helper.service';\nimport { UserCustomizationService } from '../../services/user-customization.service';\nimport type { ColumnCustomizationUrlConfig } from '../../interfaces/url-config.type';\n\n@Component({\n selector: 'app-create-columns-template',\n templateUrl: './create-columns-template.component.html',\n styleUrl: './create-columns-template.component.scss',\n standalone: false\n})\nexport class CreateColumnsTemplateComponent {\n loading: boolean = false;\n updatingTemplate: boolean = false;\n savingTemplate: boolean = false;\n columns: any = [];\n displayedColumns: any = [];\n listComponentColumns: any;\n listComponentColumnsTemplateDetail: any;\n form!: FormGroup;\n userId!: number;\n translationReadKey!: string\n customColumns: any;\n t: any;\n columnCustomizationUrlConfig!: ColumnCustomizationUrlConfig;\n\n constructor(\n public dialogRef: MatDialogRef<CreateColumnsTemplateComponent>,\n private helper: TisHelperService,\n private snackBar: MatSnackBar,\n private userCustomizationService: UserCustomizationService,\n @Inject(MAT_DIALOG_DATA) public data: any,\n // private translocoService: TranslocoService,\n ) {\n this.translationReadKey = this.data?.translationReadKey ?? '';\n \n if(this.data?.customColumns){\n this.customColumns = this.data?.customColumns ?? {};\n }\n\n if(this.data?.columnCustomizationUrlConfig){\n this.columnCustomizationUrlConfig = this.data.columnCustomizationUrlConfig;\n }\n \n // this.dialogRef.addPanelClass(['lg-w-45-per']);\n }\n\n ngOnInit(): void {\n this.t = this.data?.t || {};\n this.columns = JSON.parse(JSON.stringify(this.data.columns));\n this.displayedColumns = JSON.parse(JSON.stringify(this.data.displayColumns));\n this.displayedColumns = this.data.displayColumns;\n\n if(this.data?.defaultSelectedState == null || this.data?.defaultSelectedState == 'undefined') {\n this.data.defaultSelectedState = true;\n }\n\n if(this.data?.selectedTemplateId && this.displayedColumns?.length){\n this.columns = this.helper.sortArrayByOrder(JSON.parse(JSON.stringify(this.columns)), JSON.parse(JSON.stringify(this.displayedColumns)));\n }\n \n this.listComponentColumns = this.columns.map((col: any, ndx: number) => ({ id: ndx + 1, isSelected: this.data?.defaultSelectedState === true ? true : (this.displayedColumns?.indexOf(col) >= 0 ? true : false), column: col }));\n\n this.createForm();\n\n // this.store.select('auth').subscribe((authState: fromAuth.State) => {\n // console.log('Current AuthState:', authState);\n // if(authState?.user?.id){\n // this.userId = authState.user.id;\n // }\n // })\n }\n\n ngAfterViewInit(){\n // this.translocoService.selectTranslate('lang', {}, 'shared').subscribe((translation: string) => {\n // this.tl = this.translocoService.translateObject('createColumnsTemplateComponent', {}, 'shared');\n // });\n }\n\n createForm() {\n this.form = new FormGroup({\n name: new FormControl(this.data?.name ?? '', Validators.required),\n enableStickiness: new FormControl(true),\n fromStartColumnNumber: new FormControl(this.data?.fromStartColumnNumber ? Number(this.data?.fromStartColumnNumber) : 0, Validators.required),\n fromEndColumnNumber: new FormControl(this.data?.fromEndColumnNumber ? Number(this.data?.fromEndColumnNumber) : 0, Validators.required),\n });\n }\n\n get name(){\n return (this.form.get('name') as FormControl)\n }\n \n get listComponentColumnsTemplateName(){\n return this.name.value;\n }\n\n get orgDisplayColumns(){\n return this.displayedColumns;\n }\n\n drop(event: CdkDragDrop<string[]>) {\n moveItemInArray(this.listComponentColumns, event.previousIndex, event.currentIndex);\n }\n\n onSubmit() {\n const orgDisplayColumns = this.orgDisplayColumns;\n\n if(this.form.invalid){\n return ;\n }\n\n // Get selected columns (first filter on selected column and then get column array)\n this.displayedColumns = this.listComponentColumns.filter((r: any) => { if(r.isSelected) return r.column } ).map((r: any) => r.column);\n if(this.displayedColumns.length <= 0){\n this.snackBar.open(\"Please select at least one column\", \"ok\", {\n duration: 4000\n })\n return ;\n }\n console.log('new and org display columns: ', this.displayedColumns, orgDisplayColumns);\n\n this.acceptTemplateNameAndSave();\n\n }\n\n acceptTemplateNameAndSave() {\n let data = {\n listComponentName: this.data.listComponentName,\n name: this.name.getRawValue(),\n enableStickiness: this.form.getRawValue().enableStickiness,\n fromStartColumnNumber: this.form.getRawValue().fromStartColumnNumber,\n fromEndColumnNumber: this.form.getRawValue().fromEndColumnNumber,\n defaultColumns: this.columns.join(),\n displayColumns: this.displayedColumns.join()\n }\n\n console.log('save value: ', data);\n \n this.savingTemplate = true;\n this.loading = true;\n if(this.data?.selectedTemplateId){\n this.userCustomizationService.updateColumnsTemplate(this.columnCustomizationUrlConfig.update, {id: this.data?.selectedTemplateId, ...data}).subscribe(r => {\n console.log(\"add response: \", r);\n // this.loading = false;\n this.helper.showSuccessMsg(r.message, 'Success');\n let selectedTemplate = {\n ...r.data,\n ...data,\n isUpdated: true,\n }\n this.onClose(selectedTemplate);\n }, err => {\n this.loading = false;\n this.savingTemplate = false;\n this.helper.showHttpErrorMsg(err);\n })\n }\n else{\n this.userCustomizationService.addColumnsTemplate(this.columnCustomizationUrlConfig.add, data).subscribe(r => {\n console.log(\"add response: \", r);\n // this.loading = false;\n this.helper.showSuccessMsg(r.message, 'Success');\n let selectedTemplate = {\n ...r.data,\n ...data\n }\n this.onClose(selectedTemplate);\n }, err => {\n console.log(err);\n this.loading = false;\n this.savingTemplate = false;\n this.helper.showHttpErrorMsg(err);\n })\n }\n }\n\n onChangeColumnStatus(status: boolean, data: any){\n if(status == false){\n let leftColumn = data.id;\n let rightColumn = this.listComponentColumns?.length - (data.id - 1);\n let formValue = this.form.getRawValue();\n if(formValue?.fromStartColumnNumber == leftColumn){\n this.form.patchValue({\n fromStartColumnNumber: 0\n });\n }\n\n if(formValue?.fromEndColumnNumber == rightColumn){\n this.form.patchValue({\n fromEndColumnNumber: 0\n });\n }\n }\n }\n\n onClose(data: any = null){\n this.dialogRef.close(data);\n }\n}\n","\n<form [formGroup]=\"form\" (ngSubmit)=\"onSubmit()\">\n <h1 mat-dialog-title>\n {{t('createColumnsTemplate.title')}}\n <mat-icon (click)=\"onClose()\" class=\"tis-curser-pointer\">clear</mat-icon>\n </h1>\n <div class=\"px-6 pt-4\">\n <mat-form-field class=\"w-full tis-mat-form-field\" appearance=\"outline\">\n <mat-label>{{t('createColumnsTemplate.templateName')}}</mat-label>\n <input matInput formControlName=\"name\" placeholder=\"{{t('createColumnsTemplate.enterTemplateName')}}\" />\n </mat-form-field>\n </div>\n\n <mat-dialog-content [appScrolling]=\"true\" class=\"w-100 p-0 m-0\" style=\"max-height: 60vh !important;\">\n <div cdkDropList class=\"example-list\" (cdkDropListDropped)=\"drop($event)\">\n <div class=\"example-box\" *ngFor=\"let item of listComponentColumns, let ndx = index\" cdkDrag>\n <div class=\"w-full flex flex-row items-center justify-between\">\n <div class=\"flex flex-row items-center\">\n <mat-icon cdkDragHandle class=\"tis-curser-pointer\" style=\"color: rgba(0, 0, 0, 0.54); font-size: 19px; width: 19px; height: 19px;\">drag_indicator</mat-icon>\n <span *ngIf=\"!data?.skipTranslation\">{{t(item.column)}}</span>\n <span *ngIf=\"data?.skipTranslation\">{{customColumns[item.column]}}</span>\n </div>\n <mat-checkbox color=\"primary\" [(ngModel)]=\"item.isSelected\" (ngModelChange)=\"onChangeColumnStatus($event, item)\" [ngModelOptions]=\"{standalone: true}\"></mat-checkbox>\n </div>\n </div>\n </div>\n </mat-dialog-content>\n\n @if(form.value?.enableStickiness){\n <div class=\"px-6 pt-4\">\n <div class=\"grid grid-cols-2 gap-4\">\n <mat-form-field class=\"w-full tis-mat-form-field\" appearance=\"outline\">\n <mat-label>{{t('createColumnsTemplate.freezeColumnFromLeft')}}</mat-label>\n <mat-select formControlName=\"fromStartColumnNumber\">\n <mat-option [value]=\"0\">None</mat-option>\n @for (item of listComponentColumns; track item; let i = $index; let l = $last;) {\n @if(item?.isSelected){\n <mat-option [value]=\"(i+1)\">\n <span *ngIf=\"!data?.skipTranslation\">{{t(item.column)}}</span>\n <span *ngIf=\"data?.skipTranslation\">{{customColumns[item.column]}}</span>\n </mat-option>\n }\n }\n </mat-select>\n </mat-form-field>\n <mat-form-field class=\"w-full tis-mat-form-field\" appearance=\"outline\">\n <mat-label>{{t('createColumnsTemplate.freezeColumnFromRight')}}</mat-label>\n <mat-select formControlName=\"fromEndColumnNumber\">\n <mat-option [value]=\"0\">None</mat-option>\n @for (item of listComponentColumns; track item; let i = $index; let l = $last;) {\n @if(item?.isSelected){\n <mat-option [value]=\"(listComponentColumns?.length - i)\">\n <span *ngIf=\"!data?.skipTranslation\">{{t(item.column)}}</span>\n <span *ngIf=\"data?.skipTranslation\">{{customColumns[item.column]}}</span>\n </mat-option>\n }\n }\n </mat-select>\n </mat-form-field>\n </div>\n </div>\n }\n\n <div mat-dialog-actions>\n <button mat-button type=\"button\" class=\"tis-text-upper tis-btn-primary\" mat-dialog-close [disabled]=\"loading\">{{t?.cancel}}</button>\n <button mat-flat-button type=\"submit\" class=\"tis-text-upper tis-btn-filled-primary\" cdkFocusInitial [disabled]=\"savingTemplate\">\n {{data?.selectedTemplateId ? t('createColumnsTemplate.update') : t('createColumnsTemplate.save')}}\n @if(savingTemplate){\n <i class=\"fas fa-spinner fa-spin\"></i>\n }\n </button>\n </div>\n</form>","import { Component, EventEmitter, Input, Output } from '@angular/core';\nimport { MatDialog } from '@angular/material/dialog';\nimport { UserCustomizationService } from '../../services/user-customization.service';\nimport { TisHelperService } from '../../services/tis-helper.service';\nimport { TisSmartTableConfirmationDialogComponent } from '../tis-smart-table-confirmation-dialog/tis-smart-table-confirmation-dialog.component';\nimport { CreateColumnsTemplateComponent } from '../create-columns-template/create-columns-template.component';\nimport type { ColumnCustomizationUrlConfig } from '../../interfaces/url-config.type';\n\n@Component({\n selector: 'tis-columns-btn',\n templateUrl: './tis-columns-btn.component.html',\n styleUrl: './tis-columns-btn.component.css',\n standalone: false\n})\nexport class TisColumnsBtnComponent {\n static readonly COMPONENT_NAME = 'TisColumnsBtnComponent';\n\n @Input({ required: true }) columnCustomizationUrlConfig!: ColumnCustomizationUrlConfig;\n @Input() t: any = {};\n @Input({required: true}) componentName!: string;\n @Input({required: true}) defaultColumns!: string[];\n @Input({required: true}) columns!: string[];\n @Input() skipTranslation: boolean = false;\n @Input() customColumns?: object;\n\n @Output() displayedColumnsChange = new EventEmitter();\n @Output() fromStartColumnNumberChange = new EventEmitter();\n @Output() fromEndColumnNumberChange = new EventEmitter();\n\n selectedTemplate: any = {\n id: -1,\n name: 'Default'\n };\n displayedColumns: any[] = [];\n templates: any[] = [];\n isDeleteTemplate = false;\n isEditTemplate = false;\n\n constructor(\n private helper: TisHelperService,\n private userCustomizationService: UserCustomizationService,\n private dialog: MatDialog,\n ) { }\n\n ngOnInit(): void {\n this.getColumnsTemplates();\n // setTimeout(() => {\n // this.createNewTemplateDialog();\n // }, 2000);\n }\n\n public createNewTemplateDialog(stData: any = null) {\n if(!this.componentName) return;\n\n let data = {\n name: stData ? stData.name : null,\n enableStickiness: stData ? stData.enableStickiness : false,\n fromStartColumnNumber: stData ? stData.fromStartColumnNumber : 0,\n fromEndColumnNumber: stData ? stData.fromEndColumnNumber : 0,\n listComponentName: this.componentName,\n selectedTemplateId: stData ? stData?.id : null,\n defaultSelectedState: stData && stData?.id ? false : true,\n defaultColumns: this.defaultColumns,\n columns: this.columns,\n displayColumns: stData ? stData?.displayColumns?.split(',') : this.displayedColumns,\n t: this.t,\n skipTranslation: this.skipTranslation,\n customColumns: this.customColumns\n };\n\n const dialogRef = this.dialog.open(CreateColumnsTemplateComponent, {\n width: \"35%\",\n minWidth: '370px',\n data: data,\n panelClass: ['tis-create-new-columns-template'],\n disableClose: true,\n });\n\n dialogRef.afterClosed().subscribe((res) => {\n if (res) {\n console.log(\"=== createNewTemplateDialog ===\", res);\n \n if(res?.isUpdated){\n this.templates = this.templates?.map(t =>{\n if(t.id == res?.id){\n t = res;\n }\n return t;\n });\n }\n else{\n this.templates = [res, ...this.templates];\n }\n this.selectedTemplate = res;\n this.changeDisplayColumns();\n }\n });\n }\n\n getColumnsTemplates() {\n this.userCustomizationService.getColumnsTemplates(this.columnCustomizationUrlConfig.list, this.componentName).subscribe(r => {\n console.log(\"getColumnsTemplates:\", r.data);\n this.templates = r?.data ?? [];\n setTimeout(() => {\n this.getSelectedColumnsTemplate();\n }, 100);\n });\n }\n\n getSelectedColumnsTemplate() {\n this.userCustomizationService.getSelectedColumnsTemplate(this.columnCustomizationUrlConfig.getSelectedTemplate, this.componentName).subscribe((r) => {\n console.log(\"getSelectedColumnsTemplate:\", r.data);\n if (r?.data && Object.keys(r?.data).length != 0) {\n if(r.data?.listComponentColumnsTemplateId > 0){\n this.selectedTemplate = this.templates?.find((t: any) => t.id == r.data?.listComponentColumnsTemplateId);\n }\n console.log(\"getSelectedColumnsTemplate:\", this.templates, this.selectedTemplate);\n this.changeDisplayColumns();\n }\n });\n }\n\n onSelectedTemplate(templateId: number){\n setTimeout(() => {\n if(this.isDeleteTemplate){\n console.log(\"onSelectedTemplate:\", this.isDeleteTemplate);\n let confirmBoxData: any = {\n title: \"Delete template\",\n message: `Are you sure you want to delete this template?`,\n iconClass: \"tis-text-danger\",\n icon: \"delete\",\n approveButtonText: \"Yes, Confirm\",\n approveButtonClass: \"tis-btn-danger\",\n cancelButtonText: \"Cancel\",\n cancelButtonClass: \"tis-btn-primary\"\n };\n \n const dialogRef = this.dialog.open(TisSmartTableConfirmationDialogComponent, {\n width: \"30%\",\n minWidth: '370px',\n // panelClass: ['tis-simple-confirmation'],\n data: confirmBoxData,\n disableClose: true,\n });\n \n dialogRef.afterClosed().subscribe((result) => {\n console.log(\"The dialog was closed with result:\", result);\n if (result) {\n this.userCustomizationService.deleteColumnsTemplate(this.columnCustomizationUrlConfig.delete, {id: templateId, isSelectedTemplate: this.selectedTemplate?.id == templateId}).subscribe((r) => {\n this.helper.showSuccessMsg('Columns template has been deleted successfully', 'Done');\n this.templates.splice(this.templates.findIndex(ee => ee.id == templateId), 1);\n if(this.selectedTemplate?.id == templateId){\n this.selectedTemplate = {\n id: -1,\n name: 'Default',\n fromStartColumnNumber: 0,\n fromEndColumnNumber: 0,\n };\n this.changeDisplayColumns();\n }\n });\n }\n });\n }\n else if(this.isEditTemplate){\n console.log(\"onSelectedTemplate:\", this.isEditTemplate);\n let st = this.templates?.find((t: any) => t.id == templateId);\n this.createNewTemplateDialog(st);\n }\n else{\n if(this.selectedTemplate?.id != templateId){\n if(templateId > 0){\n this.selectedTemplate = this.templates?.find((t: any) => t.id == templateId);\n }\n else{\n this.selectedTemplate = {\n id: -1,\n name: 'Default'\n };\n }\n\n this.userCustomizationService.updateSelectedColumnsTemplate(this.columnCustomizationUrlConfig.updateSelectedTemplate, {id: this.selectedTemplate?.id, listComponentName: this.componentName}).subscribe((r) => {\n this.changeDisplayColumns();\n });\n }\n }\n\n this.isDeleteTemplate = false;\n this.isEditTemplate = false;\n }, 200); \n }\n\n changeDisplayColumns(){\n if(this.selectedTemplate?.id > 0){\n this.displayedColumns = this.selectedTemplate.displayColumns?.split(',')\n }\n else{\n this.displayedColumns = this.defaultColumns;\n }\n\n this.displayedColumnsChange.emit(this.displayedColumns);\n this.fromStartColumnNumberChange.emit(this.selectedTemplate?.fromStartColumnNumber ?? 0);\n this.fromEndColumnNumberChange.emit(this.selectedTemplate?.fromEndColumnNumber ?? 0);\n }\n}\n","<!-- shared.tisColumnsBtnComponent -->\n<button mat-flat-button class=\"tis-text-upper tis-bg-light\" [matMenuTriggerFor]=\"menu\">\n <mat-icon>view_week</mat-icon>\n <span class=\"flex flex-row align-center\">\n {{selectedTemplate?.name}}\n <mat-icon class=\"tis-expansion-icon\">arrow_drop_down</mat-icon>\n </span>\n</button>\n<mat-menu #menu=\"matMenu\" class=\"tis-mat-menu\">\n <button mat-menu-item (click)=\"selectedTemplate?.id != -1 ? onSelectedTemplate(-1) : null\">\n <mat-icon>{{selectedTemplate?.id == -1 ? 'done': ''}}</mat-icon>\n Default\n </button>\n <button mat-menu-item *ngFor=\"let template of templates\" (click)=\"onSelectedTemplate(template?.id)\">\n <mat-icon>{{template?.id == selectedTemplate?.id ? 'done': ''}}</mat-icon>\n <span class=\"pr-16\">{{template.name}}</span>\n <mat-icon class=\"absolute right-0 delete\" (click)=\"isDeleteTemplate = true\">delete</mat-icon>\n <mat-icon class=\"absolute right-8 edit\" (click)=\"isEditTemplate = true\">edit</mat-icon>\n </button>\n <mat-divider></mat-divider>\n <button mat-menu-item class=\"tis-text-upper active\" (click)=\"createNewTemplateDialog()\"><mat-icon>add</mat-icon> {{t('tisColumnsBtnComponent.createNewView')}}</button>\n</mat-menu>","import { Pipe, PipeTransform } from '@angular/core';\nimport { DateTime } from 'luxon';\n\n@Pipe({\n name: 'tisDate',\n standalone: false\n})\nexport class TisDatePipe implements PipeTransform {\n\n transform(value: unknown, ...args: unknown[]): string {\n if (typeof value == 'string' && value !== '') {\n return DateTime.fromMillis(+value).toFormat('dd MMM yyyy');\n } else if (typeof value == 'number') {\n return DateTime.fromMillis(value).toFormat('dd MMM yyyy');\n } else if (value instanceof Date) {\n return DateTime.fromJSDate(value).toFormat('dd MMM yyyy');\n } else {\n return 'Invalid Date';\n }\n }\n\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { DateTime } from 'luxon';\n\n\n@Pipe({\n name: 'tisDateTime',\n standalone: false\n})\nexport class TisDateTimePipe implements PipeTransform {\n\n transform(value: unknown, ...args: unknown[]): string {\n if (typeof value == 'string' && value !== '') {\n return DateTime.fromMillis(+value).toFormat('dd MMM yyyy hh:mm a');\n } else if (typeof value == 'number') {\n return DateTime.fromMillis(value).toFormat('dd MMM yyyy hh:mm a');\n } else {\n return 'Invalid Date';\n }\n }\n\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { DateTime } from 'luxon';\n\n\n@Pipe({\n name: 'tisDateTimeWithSeconds',\n standalone: false\n})\nexport class TisDateTimeWithSecondsPipe implements PipeTransform {\n\n transform(value: unknown, ...args: unknown[]): string {\n if (typeof value == 'string' && value !== '') {\n return DateTime.fromMillis(+value).toFormat('dd MMM yyyy hh:mm:ss a');\n } else if (typeof value == 'number') {\n return DateTime.fromMillis(value).toFormat('dd MMM yyyy hh:mm:ss a');\n } else {\n return 'Invalid Date';\n }\n }\n\n}\n","import { CdkColumnDef } from '@angular/cdk/table';\nimport { Component, EventEmitter, Input, Output, SimpleChanges, ViewChild } from '@angular/core';\nimport { FormGroup, FormControl } from '@angular/forms';\nimport { ActivatedRoute, Router } from '@angular/router';\nimport { Subscription, Subject, takeUntil, tap, Observable, map, shareReplay, distinctUntilChanged, debounceTime } from 'rxjs';\nimport type { SmartTableWrapperRowsConfig } from '../../interfaces';\nimport { AnyKeyValueObject, SelectedFilterDisplayValuesType, SelectedFilterDisplayValueType, SelectedFiltersGroupedValuesType, SmartTableWrapperColumnsConfig } from '../../interfaces';\nimport { SelectionModel } from '@angular/cdk/collections';\nimport { CdkDragDrop, moveItemInArray } from '@angular/cdk/drag-drop';\nimport { ApiDataSource } from '../../datasources/api.datasource';\nimport { ApiService } from '../../services/api.service';\nimport { MatCheckbox, MatCheckboxChange } from '@angular/material/checkbox';\nimport { MatDialog } from '@angular/material/dialog';\nimport { MatPaginator } from '@angular/material/paginator';\nimport { MatSort } from '@angular/material/sort';\nimport { BreakpointObserver, Breakpoints } from '@angular/cdk/layout';\nimport { DateTime } from \"luxon\";\nimport * as storageHelper from '../../helpers/storage-helper';\nimport { Location } from '@angular/common';\nimport type { DataNotFoundConfig } from '../../interfaces/data-not-found-config.type';\nimport type { ColumnCustomizationUrlConfig } from '../../interfaces/url-config.type';\n\n@Component({\n selector: 'tis-smart-table-viewer',\n standalone: false,\n templateUrl: './tis-smart-table-viewer.component.html',\n styleUrl: './tis-smart-table-viewer.component.css',\n providers: [CdkColumnDef],\n})\nexport class TisSmartTableViewerComponent {\n homeUrl = '';\n\n @Input({ required: true }) columnCustomizationUrlConfig!: ColumnCustomizationUrlConfig;\n @Input({ required: true }) t: any = {};\n @Input({ required: true }) componentName = '';\n @Input({ required: true }) mainTitle!: string;\n @Input() searchPlaceholder!: string;\n @Input() breadcrumbs: { url: string, name: string }[] = [];\n @Input() hideHeader = false;\n @Input() hideTableHeader = false;\n @Input() hidePaginator = false;\n @Input() keepFilterInUrl = true;\n @Input() displayColumnsSelectionButton = true;\n @Input() loadDataApiBaseUrl!: string;\n @Input() startStickyColumnCount!: number;\n @Input() endStickyColumnCount!: number;\n @Input() loaderPosition: 'top' | 'bottom' = 'top';\n @Input({ required: true }) dataNotFoundConfig: DataNotFoundConfig = {\n title: 'No Data Found',\n desc: 'There is no data. Please click on button to add',\n btnText: 'Add New',\n btnUrl: '',\n btnClick: null,\n secondBtnText: '',\n secondBtnUrl: '',\n secondBtnClick: null\n };\n @Input() showFilterButtonSection!: boolean;\n\n @Input({ required: true }) columnsCodeMapping!: SmartTableWrapperColumnsConfig[];\n autoRenderColumns!: SmartTableWrapperColumnsConfig[];\n templateRenderColumns!: SmartTableWrapperColumnsConfig[];\n\n @Input() defaultDisplayedColumns!: string[];\n displayedColumns!: string[];\n defaultColumns!: string[];\n columns!: string[];\n\n @Output() displayedColumnsChange = new EventEmitter<string[]>();\n usersColumnSelectionDetail: any;\n\n @Input() defaultSortObj: any = {};\n sortObj: any = {};\n @Output() sortObjChange = new EventEmitter<AnyKeyValueObject>();\n\n @Input() loadingSpinnerDiameter = 30;\n @Input() pageSizeOptions = [5, 10, 25, 100];\n\n @Input() pageSize = 10;\n @Output() pageSizeChange = new EventEmitter<number>();\n @Input() useGlobalPageSize = true;\n\n @Input() pageIndex = 0;\n @Output() pageIndexChange = new EventEmitter<number>();\n\n @Input() filterFormGroup: FormGroup = new FormGroup({});\n\n @Input() rowsConfig: SmartTableWrapperRowsConfig = {\n backgroundApplyFunction: () => null // Default blank function\n }; \n\n selectedFilterValues: SelectedFilterDisplayValuesType = [];\n finalSelectedFilterValuesToDisplay: SelectedFilterDisplayValuesType = [];\n selectedFilterGroupedValues: SelectedFiltersGroupedValuesType[] = [];\n isShowFilter = false;\n filterFormGroupSubscription!: Subscription;\n filterHasNonEmptyValue = false;\n\n filterApplied = false;\n resetFlag = false;\n initialLoading = true;\n\n filterFromQueryParams: any = {};\n sortFromQueryParams: any = {};\n\n search = '';\n searchCtrl = new FormControl();\n private _onDestroy = new Subject<void>();\n\n dataSource!: ApiDataSource;\n\n private _sort!: MatSort;\n private _sortSubscription!: Subscription;\n @ViewChild(MatSort) set sort(value: MatSort) {\n this._sort = value;\n if (this._sort) {\n\n if (this._sortSubscription) {\n this._sortSubscription.unsubscribe();\n }\n\n this._sortSubscription = this._sort.sortChange.pipe(\n takeUntil(this._onDestroy),\n ).subscribe((ch) => {\n this.handleSortingChanges(ch);\n });\n }\n }\n\n private _paginator!: MatPaginator;\n private _paginatorSubscription!: Subscription;\n @ViewChild(MatPaginator) set paginator(value: MatPaginator) {\n this._paginator = value;\n if (this._paginator) {\n\n if (this._paginatorSubscription) {\n this._paginatorSubscription.unsubscribe();\n }\n\n this._paginatorSubscription = this._paginator.page.pipe(\n takeUntil(this._onDestroy),\n tap(() => {\n this.onPaginationChanges();\n })\n ).subscribe();\n }\n }\n\n\n loadingSubscription!: Subscription;\n dataLengthSubscription!: Subscription;\n\n @Input() enableRowsSelection = false;\n @Input() enableAllRowsSelection = false;\n @Input() onlySingleSelection = false;\n @Input() selectedRows!: any[];\n @Output() selectedRowsChange = new EventEmitter<any>();\n\n selection = new SelectionModel<any>(true, []);\n selectedIds: Set<number | string> = new Set();\n isAllRowsSelected = false;\n\n\n @Input() enableDragNDrop = false;\n @Output() listDataSequenceChange = new EventEmitter<any>();\n\n isHandset$!: Observable<boolean>;\n isMobile: boolean = false;\n\n constructor(\n // private userCustomizationService: UserCustomizationService,\n private dialog: MatDialog,\n private apiService: ApiService,\n private route: ActivatedRoute,\n private router: Router,\n private location: Location,\n private breakpointObserver: BreakpointObserver\n ) {\n this.selection.changed.subscribe(change => {\n change.added.forEach(item => this.selectedIds.add(item['id']));\n change.removed.forEach(item => this.selectedIds.delete(item['id']));\n });\n\n }\n\n ngOnInit(): void {\n\n this.isHandset$ = this.breakpointObserver.observe([Breakpoints.Handset])\n .pipe(\n map(result => {\n console.log(\"== result ==\", result);\n return result.matches;\n }),\n shareReplay()\n );\n\n this.isHandset$.subscribe(r => {\n console.log('IS HANDSET:', r);\n this.isMobile = r;\n });\n\n this.setDefaultColumns();\n\n this.getHomeUrl();\n\n this.route.queryParams.subscribe(qp => {\n this.filterFromQueryParams = {};\n this.sortFromQueryParams = {};\n\n if (this.keepFilterInUrl) {\n for (const key in qp) {\n if (qp.hasOwnProperty(key) && qp[key] && qp[key] != '' && qp[key] != 'null' && qp[key] != 'undefined') {\n\n let fixedKeyMatched = false;\n\n if (key.toLowerCase() === 'pageIndex'.toLowerCase()) {\n this.pageIndex = Number(qp[key]);\n fixedKeyMatched = true;\n }\n\n if (key.toLowerCase() === 'pageSize'.toLowerCase()) {\n this.pageSize = Number(qp[key]);\n fixedKeyMatched = true;\n }\n\n if (key.toLowerCase() === 'sortBy'.toLowerCase()) {\n this.sortFromQueryParams.sortBy = qp[key];\n fixedKeyMatched = true;\n }\n\n if (key.toLowerCase() === 'sortOrder'.toLowerCase()) {\n this.sortFromQueryParams.sortOrder = qp[key];\n fixedKeyMatched = true;\n }\n\n if (key.toLowerCase() === 'search'.toLowerCase()) {\n this.search = qp[key];\n this.searchCtrl.patchValue(this.search);\n fixedKeyMatched = true;\n }\n\n\n if (key.toLowerCase().includes('date') && qp[key].length == 13) { // To Check if it is a date\n // this.filterFromQueryParams[key] = moment(Number(qp[key]));\n this.filterFromQueryParams[key] = DateTime.fromMillis(Number(qp[key]));\n fixedKeyMatched = true;\n }\n\n if (!fixedKeyMatched) {\n if ((qp[key]).includes(',')) {\n this.filterFromQueryParams[key] = (qp[key]).split(',');\n } else {\n this.filterFromQueryParams[key] = qp[key];\n }\n }\n\n // Transform Data, before patching in filter Form\n let mapping = this.columnsCodeMapping.find(ccm => ccm.filterFormKey == key);\n if (mapping?.transformQueryParamFn) {\n this.filterFromQueryParams[key] = mapping.transformQueryParamFn(this.filterFromQueryParams[key]);\n }\n\n }\n }\n this.filterFormGroup.patchValue(this.filterFromQueryParams);\n\n if (this.sortFromQueryParams && this.sortFromQueryParams.sortBy && this.sortFromQueryParams.sortOrder) {\n this.sortObj = this.sortFromQueryParams;\n console.log('[table-list-view-wrapper]: Emitting Sort Obj from QP to parent component:', this.sortFromQueryParams);\n this.sortObjChange.emit(this.sortObj);\n }\n }\n\n\n\n let filterHasNonEmptyValue = Object.values(this.filterFromQueryParams).some(value => value !== null && value !== undefined && value !== '');\n if (filterHasNonEmptyValue) {\n this.filterApplied = true;\n }\n\n this.getList();\n\n });\n\n this.searchCtrl.valueChanges\n .pipe(takeUntil(this._onDestroy), debounceTime(400), distinctUntilChanged())\n .subscribe((search) => {\n this.search = search;\n this.resetFlag = true; // B/c every time search is made, make sure we go to first page...\n this.getList(false);\n });\n }\n\n\n ngOnChanges(changes: SimpleChanges): void {\n console.log(`[table-list-view-wrapper]: ngOnChanges:`, changes);\n\n if (changes['defaultDisplayedColumns']) {\n console.log(`[table-list-view-wrapper]: changes['defaultDisplayedColumns']:`, changes['defaultDisplayedColumns']);\n this.handleDisplayedColumns();\n }\n\n if (changes['columnsCodeMapping']) {\n console.log(`[table-list-view-wrapper]: changes['columnsCodeMapping']:`, changes['columnsCodeMapping']);\n\n this.columnsCodeMapping = changes['columnsCodeMapping'].currentValue;\n this.handleDisplayedColumns();\n\n this.columns = this.columnsCodeMapping.map(c => c.name);\n this.autoRenderColumns = this.columnsCodeMapping.filter(c => c.hasOwnProperty('valueKey'));\n this.templateRenderColumns = this.columnsCodeMapping.filter(c => c.hasOwnProperty('template'));\n }\n\n if (changes['pageIndex']) {\n this.pageIndex = changes['pageIndex'].currentValue;\n }\n\n if (changes['pageSize']) {\n if (!changes['pageSize'].isFirstChange) {\n this.pageSize = changes['pageSize'].currentValue;\n } else {\n if (this.useGlobalPageSize) {\n let userDefaultPageSize = storageHelper.getFromLocalStorageWithExpiry('user_pagination_page_size');\n this.pageSize = userDefaultPageSize ? userDefaultPageSize : changes['pageSize'].currentValue;\n }\n }\n }\n\n\n if (changes['loadDataApiBaseUrl']) {\n if (changes['loadDataApiBaseUrl'].currentValue) {\n console.log(`[table-list-view-wrapper]: Datasource changes['loadDataApiBaseUrl'].currentValue:`, changes['loadDataApiBaseUrl'].currentValue);\n\n\n if (this.loadingSubscription) {\n this.loadingSubscription.unsubscribe();\n }\n\n if (this.dataLengthSubscription) {\n this.dataLengthSubscription.unsubscribe();\n }\n\n this.dataSource = new ApiDataSource(this.apiService);\n console.log('[table-list-view-wrapper]: Datasource Initialized:', this.dataSource);\n\n this.loadingSubscription = this.dataSource.loading$.subscribe(loading => {\n console.log('[table-list-view-wrapper]: dataSource loading:', loading);\n if (!loading && this._paginator) {\n this._paginator.pageIndex = this.pageIndex;\n this._paginator.pageSize = this.pageSize;\n this.checkAllRowsSelected();\n }\n });\n\n this.dataLengthSubscription = this.dataSource.totalDataLength$.subscribe((total: any) => {\n console.log('[table-list-view-wrapper]: dataSource total:', total);\n if (total !== null) {\n this.initialLoading = false;\n // console.log('[table-list-view-wrapper]: dataSource total total:', total);\n }\n });\n }\n }\n\n\n if (changes['filterFormGroup']) {\n if (this.filterFormGroupSubscription) {\n this.filterFormGroupSubscription.unsubscribe();\n }\n\n this.filterFormGroupSubscription = this.filterFormGroup.valueChanges\n .pipe(takeUntil(this._onDestroy), distinctUntilChanged()).subscribe(val => {\n this.filterHasNonEmptyValue = Object.values(val).some(value => value !== null && value !== undefined && value !== '');\n })\n }\n\n\n if (changes['selectedRows']) {\n this.selectedRows = changes['selectedRows'].currentValue;\n if (this.selectedRows && this.selectedRows.length) {\n // TODO:: Leave for now..... (Not able to decide whether in future we need to pass whole row or ids only)\n }\n }\n\n if (changes['defaultSortObj']?.currentValue) {\n this.defaultSortObj = changes['defaultSortObj'].currentValue;\n\n this.handleSortingChanges({\n direction: this.defaultSortObj.sortOrder,\n active: this.defaultSortObj.sortBy\n });\n }\n }\n\n\n ngOnDestroy(): void {\n this._sortSubscription?.unsubscribe();\n this._paginatorSubscription?.unsubscribe();\n this.loadingSubscription?.unsubscribe();\n this.dataLengthSubscription?.unsubscribe();\n this.filterFormGroupSubscription?.unsubscribe();\n }\n\n setDefaultColumns() {\n if (this.defaultDisplayedColumns && this.defaultDisplayedColumns.length) {\n this.defaultColumns = this.defaultDisplayedColumns;\n } else {\n this.defaultColumns = this.columnsCodeMapping.map(c => c.name);\n }\n }\n\n\n handleDisplayedColumns() {\n if (this.defaultDisplayedColumns && this.defaultDisplayedColumns.length) {\n\n const columnsSet = new Set<string>(this.columnsCodeMapping.map(ccm => ccm.name));\n this.displayedColumns = this.defaultDisplayedColumns.filter(c => columnsSet.has(c));\n\n } else {\n this.displayedColumns = this.columnsCodeMapping.map(c => c.name);\n }\n\n if (this.enableRowsSelection) {\n this.displayedColumns = ['Select', ...this.displayedColumns];\n }\n\n if (this.enableDragNDrop) {\n this.displayedColumns = ['drag', ...this.displayedColumns];\n }\n this.displayedColumnsChange.emit(this.displayedColumns);\n }\n\n\n handleSortingChanges(ch: any) {\n this.sortObj = { sortOrder: ch.direction, sortBy: this.columnsCodeMapping.find(c => c.name === ch.active)?.serverKeyCode };\n this.sortFromQueryParams.sortBy = this.sortObj.sortBy;\n this.sortFromQueryParams.sortOrder = this.sortObj.sortOrder;\n this.resetFlag = true;\n this.getList();\n }\n\n\n private getHomeUrl() {\n let pathname = window.location.pathname;\n // console.log(\"=== app-table-list-view-wrapper :: pathname ===\", pathname);\n this.homeUrl = `/${pathname.split('/')[1]}`;\n }\n\n\n getNestedValue(obj: any, path: string): any {\n if (!path) return null;\n // If there is no '.', just return the direct property\n if (!path.includes('.')) {\n return obj ? obj[path] : null;\n }\n // Otherwise, traverse the nested properties\n return path.split('.').reduce((acc, part) => acc && acc[part], obj);\n }\n\n\n\n private groupByFormControlAttributes(data: SelectedFilterDisplayValueType[]): SelectedFiltersGroupedValuesType[] {\n const groups: Record<string, SelectedFiltersGroupedValuesType> = {};\n\n data.forEach(item => {\n\n if (item.formControlType == 'input') {\n // Do Nothing...\n }\n if (item.formControlType == 'checkbox') {\n // Do Nothing...\n }\n if (item.formControlType == 'date') {\n item.valueKey = DateTime.fromJSDate(item.value).toFormat('dd-MM-yyyy');\n }\n if (item.formControlType == 'date-time') {\n item.valueKey = DateTime.fromJSDate(item.value).toFormat('dd-MM-yyyy HH:mm');\n }\n\n const key = `${item.formControlName}-${item.formControlType}`;\n if (!groups[key]) {\n groups[key] = {\n formControlName: item.formControlName,\n formControlType: item.formControlType,\n arrValues: []\n };\n }\n const isSingleValue = item.isSingleValue ?? ['input', 'radio', 'date', 'date-time', 'toggle'].includes(item.formControlType);\n // Check if only the last value should be kept due to isSingleValue or duplicated value/valueKey\n if (isSingleValue) {\n groups[key].arrValues = [item]; // Replace with the current item\n } else {\n // Check for duplicate value and valueKey in the current array\n const existingIndex = groups[key].arrValues.findIndex(x => x.value === item.value && x.valueKey === item.valueKey);\n if (existingIndex !== -1) {\n groups[key].arrValues[existingIndex] = item; // Replace the duplicate\n } else {\n groups[key].arrValues.push(item); // Add new item\n }\n }\n });\n\n return Object.values(groups);\n }\n\n updateSelectedFilterValues(values: SelectedFilterDisplayValueType | SelectedFilterDisplayValuesType) {\n let currentFormControlName: string;\n if (Array.isArray(values)) {\n this.selectedFilterGroupedValues = this.groupByFormControlAttributes(values);\n currentFormControlName = values[0]?.formControlName;\n } else {\n currentFormControlName = values?.formControlName;\n this.selectedFilterGroupedValues = this.groupByFormControlAttributes([values]);\n }\n\n this.selectedFilterValues = this.selectedFilterValues.filter(sfv => sfv.formControlName != currentFormControlName);\n\n this.selectedFilterGroupedValues.forEach(gv => {\n if (gv.formControlName = currentFormControlName) {\n gv.arrValues.forEach(v => {\n this.selectedFilterValues.push(v);\n })\n }\n })\n\n // this.filterFromQueryParams\n this.getFinalSelectedFilterValuesToDisplay();\n\n\n }\n\n getFinalSelectedFilterValuesToDisplay() {\n this.finalSelectedFilterValuesToDisplay = [];\n this.selectedFilterValues.forEach(sf => {\n if (Object.keys(this.filterFromQueryParams).includes(sf.formControlName)) {\n this.finalSelectedFilterValuesToDisplay.push(sf);\n }\n });\n }\n\n removeParticularFilter(f: SelectedFilterDisplayValueType) {\n\n let val = this.filterFormGroup.get(f.formControlName)?.value;\n \n if (Array.isArray(val)) {\n val = val.filter(v => v != f.value);\n this.filterFormGroup.get(f.formControlName)?.patchValue(val);\n } else {\n this.filterFormGroup.get(f.formControlName)?.reset();\n }\n this.selectedFilterValues = this.selectedFilterValues.filter(sfv => !(sfv.formControlName == f.formControlName && sfv.valueKey == f.valueKey));\n \n setTimeout(() => {\n this.filterRecords();\n }, 500);\n }\n\n\n filterRecords() {\n this.filterApplied = true;\n this.resetFlag = true;\n setTimeout(() => {\n this.getList(true);\n this.isShowFilter = false;\n }, 500);\n }\n\n public resetFilters() {\n this.filterApplied = false;\n setTimeout(() => {\n this.resetFlag = true;\n this.filterFromQueryParams = {};\n this.sortFromQueryParams = {};\n this.selectedFilterGroupedValues = [];\n this.selectedFilterValues = [];\n this.getList();\n }, 250);\n }\n\n public getList(forceFromObject = false) {\n const filterFormData = this.filterFormGroup?.value;\n\n let qs: any = new URLSearchParams();\n let filter: any = { ...filterFormData };\n\n if (filterFormData) {\n this.filterHasNonEmptyValue = Object.values(filterFormData).some(value => value !== null && value !== undefined && value !== '');\n } else {\n this.filterHasNonEmptyValue = false;\n }\n\n for (const key in filter) {\n if (typeof filter[key] === 'object' && (filter[key] instanceof Date || DateTime.isDateTime(filter[key]))) {\n if (filter[key] instanceof Date) {\n filter[key] = DateTime.fromJSDate(filter[key]).toMillis();\n }\n else if (DateTime.isDateTime(filter[key])) {\n filter[key] = filter[key].toMillis();\n }\n }\n }\n\n // Append All Filters from filter form\n Object.keys(filter).forEach(key => {\n if (filter[key] != null && filter[key] != '' && filter[key] != 'null' && filter[key] != 'undefined') {\n if (filter[key] === '*') {\n filter[key] = '';\n }\n qs.append(key, filter[key]);\n }\n });\n\n\n // Append sorting conditions...\n if (this.sortFromQueryParams) {\n Object.keys(this.sortFromQueryParams).forEach(key => {\n if (this.sortFromQueryParams[key] != null && this.sortFromQueryParams[key] != '' && this.sortFromQueryParams[key] != 'null' && this.sortFromQueryParams[key] != 'undefined') {\n qs.append(key, this.sortFromQueryParams[key]);\n }\n });\n }\n\n if (this.resetFlag) {\n this.pageIndex = 0;\n }\n\n if (this._paginator) {\n this._paginator.pageIndex = this.pageIndex;\n this._paginator.pageSize = this.pageSize;\n }\n\n qs.append(\"pageIndex\", this.pageIndex);\n qs.append(\"pageSize\", this.pageSize);\n\n if (this.search != '') {\n qs.append('search', this.search);\n }\n\n\n qs = qs.toString();\n let genUrl = this.router.url.split('?')[0] + '?' + qs;\n let currentUrl = window.location.pathname + window.location.search;\n\n if (currentUrl != genUrl) {\n if (this.keepFilterInUrl) {\n this.location.go(genUrl);\n this.filterFromQueryParams = this.getQueryParams(window.location.href);\n }\n } else {}\n\n this.dataSource.load(this.loadDataApiBaseUrl, this.pageIndex, this.pageSize, this.search, filter, this.sortObj);\n this.getFinalSelectedFilterValuesToDisplay();\n\n this.resetFlag = false;\n }\n\n\n onPaginationChanges() {\n if (this.pageIndex != this._paginator.pageIndex) {\n this.pageIndex = this._paginator.pageIndex;\n this.getList();\n this.pageIndexChange.emit(this.pageIndex);\n }\n\n if (this.pageSize != this._paginator.pageSize) {\n this.pageSize = this._paginator.pageSize;\n this.getList();\n this.pageSizeChange.emit(this.pageSize);\n storageHelper.setToLocalStorageWithExpiry('user_pagination_page_size', this.pageSize, 1000 * 60 * 60 * 24 * 15);\n }\n\n }\n\n onChangeDisplayColumns(columns: string[]) {\n this.defaultDisplayedColumns = columns;\n this.handleDisplayedColumns();\n }\n\n onChangeFromStartColumnNumber(columnNumber: number) {\n this.startStickyColumnCount = columnNumber;\n }\n\n onChangeFromEndColumnNumber(columnNumber: number) {\n this.endStickyColumnCount = columnNumber;\n }\n\n goToUrl(url: string) {\n if (url) {\n this.router.navigateByUrl(url);\n }\n }\n\n toggleSelection(status: MatCheckboxChange, row: any): void {\n if (this.onlySingleSelection && status.checked) {\n this.selection.clear();\n }\n this.selection.toggle(row);\n this.selectedRows = this.selection.selected;\n this.selectedRowsChange.emit(this.selectedRows);\n this.checkAllRowsSelected();\n }\n\n\n checkAllRowsSelected() {\n this.isAllRowsSelected = this.selection.selected.length === this.dataSource.apiSubject.value.length;\n }\n\n\n toggleAllRows(): void {\n if (this.isAllRowsSelected) {\n this.selection.clear();\n } else {\n this.dataSource.apiSubject.value.forEach(row => {\n this.selection.select(row);\n });\n }\n this.selectedRows = this.selection.selected;\n this.selectedRowsChange.emit(this.selectedRows);\n this.checkAllRowsSelected();\n }\n\n stopPropagation($event: any) {\n $event.stopPropagation();\n }\n\n isChecked(row: any): boolean {\n return this.selectedIds.has(row['id']);\n }\n\n getQueryParams(url: string): Record<string, string | string[]> {\n const urlObj = new URL(url);\n const params = new URLSearchParams(urlObj.search);\n const paramsObj: Record<string, string | string[]> = {};\n\n params.forEach((value, key) => {\n // Check if the parameter already exists (for handling multiple values)\n if (paramsObj.hasOwnProperty(key)) {\n // If it's not already an array, convert it to an array\n if (!Array.isArray(paramsObj[key])) {\n paramsObj[key] = [paramsObj[key] as string]; // Cast as string because we know it's not an array here\n }\n // Push the new value to the existing array\n (paramsObj[key] as string[]).push(value); // Cast as string[] to use array methods\n } else {\n // Assign the value to the key in the object\n paramsObj[key] = value;\n }\n });\n\n return paramsObj;\n }\n\n\n isStickyStart(columnName: string): boolean {\n const index = this.displayedColumns.indexOf(columnName);\n return index !== -1 && index < this.startStickyColumnCount;\n }\n\n isStickyEnd(columnName: string): boolean {\n const index = this.displayedColumns.indexOf(columnName);\n if (index === -1) return false;\n return index >= this.displayedColumns.length - this.endStickyColumnCount;\n }\n\n getColumnClasses(column: SmartTableWrapperColumnsConfig): { [key: string]: boolean } {\n // Check if alignment is explicitly specified\n if (column.align) {\n return {\n 'text-right': column.align === 'right',\n 'text-left': column.align === 'left',\n 'text-center': column.align === 'center'\n };\n } else {\n // Default alignment based on column type\n switch (column.type) {\n case 'money':\n case 'quantity':\n return { 'text-right': true };\n case 'number':\n return { 'text-center': true };\n default:\n return {};\n }\n }\n }\n\n\n getRowBackground(row: any): string | null {\n return this.rowsConfig.backgroundApplyFunction\n ? this.rowsConfig.backgroundApplyFunction(row)\n : null;\n }\n\n\n drop(event: CdkDragDrop<any[]>) {\n // Ignore if the item was dropped at the same index\n if (event.previousIndex === event.currentIndex) {\n return;\n }\n\n // Access current data from apiSubject\n const currentData = [...this.dataSource.apiSubject.value];\n\n if (!currentData || currentData.length === 0) {\n return;\n }\n\n // Rearrange items based on the drop event\n moveItemInArray(currentData, event.previousIndex, event.currentIndex);\n\n // Update the apiSubject with reordered data\n this.dataSource.apiSubject.next(currentData);\n\n // We need to emit this also\n this.listDataSequenceChange.emit(currentData);\n }\n\n handleButtonClick(config: any) {\n if (config?.btnClick) {\n config.btnClick();\n } else if (config?.btnUrl) {\n this.goToUrl(config.btnUrl);\n }\n }\n\n handleSecondButtonClick(config: any) {\n if (config?.secondBtnClick) {\n config.secondBtnClick();\n } else if (config?.secondBtnUrl) {\n this.goToUrl(config.secondBtnUrl);\n }\n }\n}\n","<section [class.tis-page]=\"!hideHeader\">\n <div class=\"tis-page-header\" *ngIf=\"!hideHeader\">\n <nav aria-label=\"tis-breadcrumb\">\n <ol class=\"tis-breadcrumb\">\n <li class=\"tis-breadcrumb-item\"><a href=\"javascript:;\" [routerLink]=\"homeUrl\">{{t('home')}}</a></li>\n @for(breadcrumb of breadcrumbs; track breadcrumb) {\n <li class=\"tis-breadcrumb-item\" *ngIf=\"breadcrumb?.url\">\n <a href=\"javascript:;\" (click)=\"goToUrl(breadcrumb.url)\">{{breadcrumb?.name}}</a>\n </li>\n }\n <li class=\"tis-breadcrumb-item active\">\n {{mainTitle}}\n </li>\n </ol>\n </nav>\n <ng-content select=\"[slot='top-buttons-section']\"></ng-content>\n </div>\n <h1 class=\"tis-page-title\" *ngIf=\"!hideHeader\">{{mainTitle}}</h1>\n <div class=\"tis-page-body\">\n <div class=\"tis-page-body-content\">\n\n @if(initialLoading){\n <div class=\"tis-d-flex tis-justify-content-center pb-2 pt-7\">\n <mat-progress-spinner color=\"primary\" mode=\"indeterminate\" [diameter]=\"60\"></mat-progress-spinner>\n </div>\n } @else {\n\n @if ((dataSource?.totalDataLength$ | async) || (dataSource?.loading$ | async) || search ||\n filterHasNonEmptyValue || showFilterButtonSection) {\n <div class=\"tis-table-container\">\n @if(!hideTableHeader){\n <div class=\"tis-table-container-header\">\n <ul class=\"tis-inline-group\">\n <li class=\"tis-inline-group-item\">\n <tis-columns-btn [columnCustomizationUrlConfig]=\"columnCustomizationUrlConfig\" [t]=\"t\"\n [componentName]=\"componentName\" [defaultColumns]=\"defaultColumns\" [columns]=\"columns\"\n (displayedColumnsChange)=\"onChangeDisplayColumns($event)\"\n (fromStartColumnNumberChange)=\"onChangeFromStartColumnNumber($event)\"\n (fromEndColumnNumberChange)=\"onChangeFromEndColumnNumber($event)\"></tis-columns-btn>\n </li>\n <ng-content select=\"[slot='filter-button-section']\"></ng-content>\n </ul>\n <div class=\"flex items-center\">\n <ul class=\"tis-inline-group\">\n <ng-content select=\"[slot='filter-right-button-section']\"></ng-content>\n </ul>\n @if(!isMobile && searchPlaceholder && searchPlaceholder != ''){\n <mat-form-field\n class=\"custom-mat-form-field-mb-0 search-mat-form-field ml-3 tis-table-search-field\"\n appearance=\"outline\">\n <span class=\"material-icons\" matPrefix>search</span>\n <input matInput [formControl]=\"searchCtrl\" [placeholder]=\"searchPlaceholder\">\n <span class=\"material-icons mr-2 tis-curser-pointer\" matSuffix\n (click)=\"searchCtrl.setValue('')\"\n *ngIf=\"searchCtrl.value && searchCtrl.value != ''\">close</span>\n </mat-form-field>\n }\n </div>\n </div>\n }\n\n @if (filterFormGroup) {\n\n <ng-content select=\"[slot='filter-form-section']\"></ng-content>\n\n @if(finalSelectedFilterValuesToDisplay.length && filterApplied) {\n <div class=\"flex gap-3 mb-3 filter-applied-section md-hide-scrollbar\">\n @for(v of finalSelectedFilterValuesToDisplay; track v) {\n @if (v) {\n <span class=\"tis-filter-badge\" style=\"white-space: nowrap;\">\n @if(v.labelKey && v.labelKey != '' && (v.valueKey || v.value)) {\n <span class=\"font-semibold\"> {{v.labelKey }} </span>\n }\n @if(v.valueKey) {\n {{v.valueKey }}\n } @else {\n {{v.value }}\n }\n <span class=\"material-icons tis-curser-pointer\"\n (click)=\"removeParticularFilter(v)\">cancel</span>\n </span>\n }\n }\n </div>\n }\n }\n\n @if(isMobile && searchPlaceholder && searchPlaceholder != ''){\n <mat-form-field\n class=\"custom-mat-form-field-mb-0 search-mat-form-field mb-3 tis-table-search-field\"\n appearance=\"outline\">\n <span class=\"material-icons\" matPrefix>search</span>\n <input matInput [formControl]=\"searchCtrl\" [placeholder]=\"searchPlaceholder\">\n <span class=\"material-icons mr-2 tis-curser-pointer\" matSuffix\n (click)=\"searchCtrl.setValue('')\"\n *ngIf=\"searchCtrl.value && searchCtrl.value != ''\">close</span>\n </mat-form-field>\n }\n\n \n @if(loaderPosition == 'top'){\n @if(dataSource?.loading$ | async){\n <div class=\"tis-d-flex tis-justify-content-center py-2\">\n <mat-progress-spinner color=\"primary\" mode=\"indeterminate\" [diameter]=\"loadingSpinnerDiameter\"></mat-progress-spinner>\n </div>\n }\n }\n <div class=\"tis-table-container-body\">\n <div class=\"tis-table-wrapper\" [appScrolling]=\"true\">\n\n <!--Table Here-->\n <table mat-table matSort [dataSource]=\"dataSource\" class=\"tis-table\" cdkDropList (cdkDropListDropped)=\"drop($event)\" [cdkDropListLockAxis]=\"'y'\">\n\n @if (enableRowsSelection) {\n <ng-container matColumnDef=\"Select\">\n <th mat-header-cell *matHeaderCellDef>\n @if (enableAllRowsSelection) {\n <mat-checkbox color=\"primary\" (change)=\"$event ? toggleAllRows() : null\"\n [checked]=\"isAllRowsSelected\"\n [indeterminate]=\"selection.hasValue() && !isAllRowsSelected\">\n </mat-checkbox>\n }\n </th>\n <td mat-cell *matCellDef=\"let row\">\n <mat-checkbox color=\"primary\" (click)=\"stopPropagation($event)\" (change)=\"$event ? toggleSelection($event, row) : null\" [checked]=\"isChecked(row)\"></mat-checkbox>\n </td>\n </ng-container>\n }\n\n @for(column of autoRenderColumns; track column.serverKeyCode; let i = $index; let l = $last){\n <!-- [sticky]=\"i < startStickyColumnCount\" [stickyEnd]=\"i > (autoRenderColumns?.length - endStickyColumnCount)\" -->\n <ng-container [matColumnDef]=\"column.name\" [sticky]=\"isStickyStart(column.name)\" [stickyEnd]=\"isStickyEnd(column.name)\">\n @if(column.sort) {\n <th mat-header-cell mat-sort-header *matHeaderCellDef [ngClass]=\"getColumnClasses(column)\">\n {{ t(column.name) }}\n </th>\n } @else {\n <th mat-header-cell *matHeaderCellDef [ngClass]=\"getColumnClasses(column)\">\n {{ t(column.name) }}\n </th>\n }\n \n\n @if(column.type == 'date'){\n <td mat-cell *matCellDef=\"let element\" class=\"1al-{{column.align}} 1ty-{{column.type}}\" >\n <p [class.tis-a]=\"column.clickFn\" (click)=\"column?.clickFn?.(element, $event)\">\n {{ (column.valueKey && element[column.valueKey]) ? (getNestedValue(element, column.valueKey) | tisDate) : ''}}\n </p>\n </td>\n } @else if(column.type == 'date-time'){\n <td mat-cell *matCellDef=\"let element\" class=\"2al-{{column.align}} 2ty-{{column.type}}\">\n <p [class.tis-a]=\"column.clickFn\" (click)=\"column?.clickFn?.(element, $event)\">\n {{ (column.valueKey && element[column.valueKey]) ? (getNestedValue(element, column.valueKey) | tisDateTime) : ''}}\n </p>\n </td>\n } @else if(column.type == 'date-time-with-seconds'){\n <td mat-cell *matCellDef=\"let element\" class=\"2al-{{column.align}} 2ty-{{column.type}}\">\n <p [class.tis-a]=\"column.clickFn\" (click)=\"column?.clickFn?.(element, $event)\">\n {{ (column.valueKey && element[column.valueKey]) ? (getNestedValue(element, column.valueKey) | tisDateTimeWithSeconds) : ''}}\n </p>\n </td>\n } @else {\n <td mat-cell *matCellDef=\"let element\" class=\"3al-{{column.align}} 3ty-{{column.type}}\" [ngClass]=\"getColumnClasses(column)\">\n <p [class.tis-a]=\"column.clickFn\" (click)=\"column?.clickFn?.(element, $event)\">\n @if (column.type == 'quantity') {\n {{ (column.valueKey && element[column.valueKey]) ? (getNestedValue(element, column.valueKey) | number : '1.4-4') : '-' }}\n } @else if (column.type == 'money') {\n {{ column.valueKey && (getNestedValue(element, column.valueKey)).toFixed(2) }}\n } @else {\n {{ column.valueKey && getNestedValue(element, column.valueKey) }}\n }\n </p>\n </td>\n }\n </ng-container>\n\n }\n\n\n @for(column of templateRenderColumns; track column.serverKeyCode; let i = $index; let l = $last){\n <!-- [sticky]=\"i < startStickyColumnCount\" [stickyEnd]=\"l\" -->\n <ng-container [matColumnDef]=\"column.name\" [sticky]=\"isStickyStart(column.name)\" [stickyEnd]=\"isStickyEnd(column.name)\">\n @if(column.sort) {\n <th mat-header-cell *matHeaderCellDef mat-sort-header [ngClass]=\"getColumnClasses(column)\">\n {{ t(column.name) }}\n </th>\n } @else {\n <th mat-header-cell *matHeaderCellDef [ngClass]=\"getColumnClasses(column)\">\n {{ t(column.name) }}\n </th>\n }\n <td mat-cell *matCellDef=\"let element\" class=\"4al-{{column.align}} 4ty-{{column.type}}\" [ngClass]=\"getColumnClasses(column)\">\n <ng-container *ngIf=\"column.template as template\">\n <ng-container *ngTemplateOutlet=\"template; context: { colDef: column, colData: element }\"></ng-container>\n </ng-container>\n </td>\n </ng-container>\n }\n\n <!--Drag Column Def Start-->\n <ng-container [matColumnDef]=\"'drag'\" >\n <th mat-header-cell *matHeaderCellDef>\n --\n </th>\n <td mat-cell *matCellDef=\"let element\" class=\"5al-drag 5ty-drag\">\n <mat-icon cdkDragHandle class=\"tis-curser-pointer\" style=\"color: rgba(0, 0, 0, 0.54); font-size: 19px; width: 19px; height: 19px;\">drag_indicator</mat-icon>\n </td>\n </ng-container>\n <!--Drag Column Def End-->\n\n\n <tr class=\"mat-row\" *matNoDataRow>\n <td class=\"mat-cell\" [attr.colspan]=\"displayedColumns.length\">\n <div class=\"tis-data-not-found\">\n <img src=\"/assets/icons/not-found.svg\" alt=\"not-found\" class=\"w-53\">\n <h5 class=\"tis-h5\">{{dataNotFoundConfig.title}}</h5>\n </div>\n </td>\n </tr>\n\n <!-- Apply Drag and Drop to tbody -->\n @if(enableDragNDrop) {\n <tr mat-row *matRowDef=\"let row; columns: displayedColumns\" [ngStyle]=\"{'background-color': getRowBackground(row) || 'inherit'}\" cdkDrag></tr>\n }\n\n @if(!enableDragNDrop) {\n <tr mat-row *matRowDef=\"let row; columns: displayedColumns\" [ngStyle]=\"{'background-color': getRowBackground(row) || 'inherit'}\"></tr>\n } \n <tr mat-header-row *matHeaderRowDef=\"displayedColumns\"></tr>\n </table>\n <!--Table End-->\n\n </div>\n @if(loaderPosition == 'bottom'){\n @if(dataSource?.loading$ | async){\n <div class=\"tis-d-flex tis-justify-content-center py-2\">\n <mat-progress-spinner color=\"primary\" mode=\"indeterminate\" [diameter]=\"loadingSpinnerDiameter\"></mat-progress-spinner>\n </div>\n }\n }\n @if (!hidePaginator) {\n <div class=\"tis-table-paginator\">\n <mat-paginator [length]=\"dataSource?.totalDataLength?.value\" [pageSize]=\"pageSize\"\n [pageSizeOptions]=\"pageSizeOptions\" showFirstLastButtons></mat-paginator>\n </div>\n }\n </div>\n </div>\n } @else {\n\n @if(dataNotFoundConfig) {\n <div class=\"tis-data-not-found\">\n <img src=\"/assets/icons/not-found.svg\" alt=\"not-found\" class=\"w-53\">\n <h5 class=\"tis-h5\">{{dataNotFoundConfig.title}}</h5>\n <p class=\"tis-p\">{{dataNotFoundConfig.desc}}</p>\n @if((dataNotFoundConfig.btnUrl || dataNotFoundConfig?.btnClick) && dataNotFoundConfig.btnText) {\n <button mat-flat-button color=\"primary\" class=\"tis-text-upper\"\n (click)=\"handleButtonClick(dataNotFoundConfig)\">\n <mat-icon>add</mat-icon>\n {{dataNotFoundConfig.btnText}}\n </button>\n }\n @if((dataNotFoundConfig.secondBtnUrl || dataNotFoundConfig?.secondBtnClick) && dataNotFoundConfig.secondBtnText) {\n <button mat-stroked-button color=\"primary\" class=\"tis-text-upper\"\n (click)=\"handleSecondButtonClick(dataNotFoundConfig)\">\n <mat-icon>add</mat-icon>\n {{dataNotFoundConfig.secondBtnText}}\n </button>\n }\n </div>\n }\n\n }\n\n }\n\n </div>\n </div>\n</section>","import { PipeTransform, Pipe } from '@angular/core';\n\n@Pipe({\n name: 'qty',\n standalone: false\n})\nexport class Quantity implements PipeTransform {\n decimalPoints = 4;\n\n transform(value: number | string): any {\n if(Number(value) > 0){\n let roundValue: any = this.roundNumber(Number(value), this.decimalPoints);\n let roundValueArr = String(roundValue)?.split('.');\n if(roundValueArr?.length > 1){\n let currentDesimal = roundValueArr[1];\n if(currentDesimal?.length < this.decimalPoints){\n roundValue = `${roundValue}`;\n for (let index = 0; index < (this.decimalPoints - currentDesimal?.length); index++) {\n roundValue = `${roundValue}0`;\n }\n }\n }\n else{\n roundValue = `${roundValueArr[0]}.0000`;\n }\n return roundValue;\n }\n else{\n return 0;\n }\n }\n\n roundNumber(number: number, decimals = 0) {\n const multiplier = Math.pow(10, decimals);\n return Math.round(number * multiplier) / multiplier;\n }\n\n\n}","import { PipeTransform, Pipe } from '@angular/core';\n\n@Pipe({\n name: 'money',\n standalone: false\n})\nexport class Money implements PipeTransform {\n decimalPoints = 4;\n\n transform(value: number | string): any {\n if(Number(value) > 0){\n let roundValue: any = this.roundNumber(Number(value), this.decimalPoints);\n let roundValueArr = String(roundValue)?.split('.');\n if(roundValueArr?.length > 1){\n let currentDesimal = roundValueArr[1];\n if(currentDesimal?.length < this.decimalPoints){\n roundValue = `${roundValue}`;\n for (let index = 0; index < (this.decimalPoints - currentDesimal?.length); index++) {\n roundValue = `${roundValue}0`;\n }\n }\n }\n else{\n roundValue = `${roundValueArr[0]}.0000`;\n }\n return roundValue;\n }\n else{\n return 0;\n }\n }\n\n roundNumber(number: number, decimals = 0) {\n const multiplier = Math.pow(10, decimals);\n return Math.round(number * multiplier) / multiplier;\n }\n\n\n}","import { NgModule } from '@angular/core';\nimport { TisSmartTableViewerComponent } from './components/tis-smart-table-viewer/tis-smart-table-viewer.component';\nimport { MatTooltipModule } from '@angular/material/tooltip';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatInputModule } from '@angular/material/input';\nimport { MatProgressSpinnerModule } from '@angular/material/progress-spinner';\nimport { MatSelectModule } from '@angular/material/select';\nimport { MatSnackBarModule } from '@angular/material/snack-bar';\nimport { CommonModule } from '@angular/common';\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\nimport { RouterLink, RouterOutlet } from '@angular/router';\nimport { LayoutModule } from '@angular/cdk/layout';\nimport { MatPaginatorModule } from '@angular/material/paginator';\nimport { TisColumnsBtnComponent } from './components/tis-columns-btn/tis-columns-btn.component';\nimport { TisSmartTableConfirmationDialogComponent } from './components/tis-smart-table-confirmation-dialog/tis-smart-table-confirmation-dialog.component';\nimport { TisSmartTableErrorDialogComponent } from './components/tis-smart-table-error-dialog/tis-smart-table-error-dialog.component';\nimport { CreateColumnsTemplateComponent } from './components/create-columns-template/create-columns-template.component';\nimport { MatDialogModule } from '@angular/material/dialog';\nimport { DragDropModule } from '@angular/cdk/drag-drop';\nimport { MatTableModule } from '@angular/material/table';\nimport { MatCheckboxModule } from '@angular/material/checkbox';\nimport { ScrollingDirective } from './directives/scrolling/scrolling.directive';\nimport { TisDatePipe } from './pipes/tis-date.pipe';\nimport { TisDateTimePipe } from './pipes/tis-date-time.pipe';\nimport { TisDateTimeWithSecondsPipe } from './pipes/tis-date-time-with-seconds.pipe';\nimport { Quantity } from './pipes/quantity.pipe';\nimport { Money } from './pipes/money.pipe';\nimport { MatMenuModule } from '@angular/material/menu';\nimport { MatDividerModule } from '@angular/material/divider';\n\n\nconst directives = [\n ScrollingDirective\n];\n\nconst pipes = [\n TisDatePipe,\n TisDateTimePipe,\n TisDateTimeWithSecondsPipe,\n Quantity,\n Money,\n];\n\nconst uiImports = [\n MatTooltipModule,\n MatIconModule,\n MatFormFieldModule,\n MatSelectModule,\n MatInputModule,\n MatSnackBarModule,\n MatProgressSpinnerModule,\n MatButtonModule,\n MatPaginatorModule,\n LayoutModule, // For Breakpoint Observer,\n MatDialogModule,\n MatTableModule,\n MatCheckboxModule,\n MatMenuModule,\n MatDividerModule\n];\n\n\n@NgModule({\n declarations: [\n ...directives,\n ...pipes,\n TisSmartTableViewerComponent,\n TisColumnsBtnComponent,\n CreateColumnsTemplateComponent,\n TisSmartTableViewerComponent,\n TisSmartTableErrorDialogComponent,\n TisSmartTableConfirmationDialogComponent\n ],\n imports: [\n CommonModule,\n FormsModule,\n ReactiveFormsModule,\n RouterLink,\n RouterOutlet,\n ...uiImports,\n DragDropModule\n ],\n exports: [\n TisSmartTableViewerComponent\n ]\n})\nexport class TisSmartTableViewerModule { }\n","/*\n * Public API Surface of tis-smart-table-viewer\n */\n\nexport * from './lib/tis-smart-table-viewer.service';\nexport * from './lib/tis-smart-table-viewer.module';\nexport * from './lib/components/tis-smart-table-viewer/tis-smart-table-viewer.component';\n\nexport * from './lib/interfaces';","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i2","i4","i1","i3","i5","i7","i11","i14.ScrollingDirective","i1.TisHelperService","i2.UserCustomizationService","i6","i8","storageHelper.getFromLocalStorageWithExpiry","storageHelper.setToLocalStorageWithExpiry","i2.ApiService","i9","i10","i12","i13","i14","i15","i16.ScrollingDirective","i17.TisColumnsBtnComponent","i18.TisDatePipe","i19.TisDateTimePipe","i20.TisDateTimeWithSecondsPipe"],"mappings":"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"}
1
+ {"version":3,"file":"servicemind.tis-tis-smart-table-viewer.mjs","sources":["../../../projects/tis-smart-table-viewer/src/lib/tis-smart-table-viewer.service.ts","../../../projects/tis-smart-table-viewer/src/lib/datasources/api.datasource.ts","../../../projects/tis-smart-table-viewer/src/lib/services/api.service.ts","../../../projects/tis-smart-table-viewer/src/lib/helpers/storage-helper.ts","../../../projects/tis-smart-table-viewer/src/lib/directives/scrolling/scrolling.directive.ts","../../../projects/tis-smart-table-viewer/src/lib/services/user-customization.service.ts","../../../projects/tis-smart-table-viewer/src/lib/components/tis-smart-table-error-dialog/tis-smart-table-error-dialog.component.ts","../../../projects/tis-smart-table-viewer/src/lib/components/tis-smart-table-error-dialog/tis-smart-table-error-dialog.component.html","../../../projects/tis-smart-table-viewer/src/lib/services/tis-helper.service.ts","../../../projects/tis-smart-table-viewer/src/lib/components/tis-smart-table-confirmation-dialog/tis-smart-table-confirmation-dialog.component.ts","../../../projects/tis-smart-table-viewer/src/lib/components/tis-smart-table-confirmation-dialog/tis-smart-table-confirmation-dialog.component.html","../../../projects/tis-smart-table-viewer/src/lib/components/create-columns-template/create-columns-template.component.ts","../../../projects/tis-smart-table-viewer/src/lib/components/create-columns-template/create-columns-template.component.html","../../../projects/tis-smart-table-viewer/src/lib/components/tis-columns-btn/tis-columns-btn.component.ts","../../../projects/tis-smart-table-viewer/src/lib/components/tis-columns-btn/tis-columns-btn.component.html","../../../projects/tis-smart-table-viewer/src/lib/pipes/tis-date.pipe.ts","../../../projects/tis-smart-table-viewer/src/lib/pipes/tis-date-time.pipe.ts","../../../projects/tis-smart-table-viewer/src/lib/pipes/tis-date-time-with-seconds.pipe.ts","../../../projects/tis-smart-table-viewer/src/lib/components/tis-smart-table-viewer/tis-smart-table-viewer.component.ts","../../../projects/tis-smart-table-viewer/src/lib/components/tis-smart-table-viewer/tis-smart-table-viewer.component.html","../../../projects/tis-smart-table-viewer/src/lib/pipes/quantity.pipe.ts","../../../projects/tis-smart-table-viewer/src/lib/pipes/money.pipe.ts","../../../projects/tis-smart-table-viewer/src/lib/tis-smart-table-viewer.module.ts","../../../projects/tis-smart-table-viewer/src/public-api.ts","../../../projects/tis-smart-table-viewer/src/servicemind.tis-tis-smart-table-viewer.ts"],"sourcesContent":["import { Injectable } from '@angular/core';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class TisSmartTableViewerService {\n\n constructor() { }\n}\n","import { CollectionViewer, DataSource } from '@angular/cdk/collections';\nimport { BehaviorSubject, Observable, Subscription, of } from 'rxjs';\nimport { catchError, finalize } from 'rxjs/operators';\nimport { ApiService } from '../services/api.service';\n\nexport class ApiDataSource implements DataSource<any> {\n\n private apiSubs!: Subscription;\n\n apiSubject = new BehaviorSubject<any[]>([]);\n\n private loadingSubject = new BehaviorSubject<boolean>(false);\n public loading$ = this.loadingSubject.asObservable();\n\n public totalDataLength = new BehaviorSubject<number | null>(null);\n public totalDataLength$ = this.totalDataLength.asObservable();\n\n constructor(private apiService: ApiService) { \n console.log(' DataSource Initialized...')\n }\n\n connect(collectionViewer: CollectionViewer): Observable<any[]> {\n return this.apiSubject.asObservable();\n }\n\n disconnect(collectionViewer: CollectionViewer): void {\n this.apiSubject.complete();\n this.loadingSubject.complete();\n }\n\n load(url: string, pageIndex: number, pageSize: number, search: string, filter?: object, sortFilter?: object) {\n\n if(this.apiSubs) {\n this.apiSubs.unsubscribe();\n }\n\n this.loadingSubject.next(true);\n this.apiSubs = this.apiService.getList(url, (pageIndex + 1), pageSize, search, {filter}, {sortFilter}).pipe(\n catchError(() => of([])),\n finalize(() => this.loadingSubject.next(false))\n ).subscribe(r => {\n console.log(`DataSource: Url: ${url}, Reply:`, r);\n if (r?.data?.length > 0) {\n this.totalDataLength.next(r?.total);\n }\n else {\n this.totalDataLength.next(0);\n }\n this.apiSubject.next(r?.data);\n });\n }\n}\n","import { Injectable } from '@angular/core';\nimport { HttpClient } from '@angular/common/http';\nimport { Observable } from 'rxjs';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class ApiService {\n\n constructor(private http: HttpClient) {\n }\n\n getList(apiUrl: string, currentPage: number = 1, limit = 10, search = '', filters?: object, sortFilter?: object): Observable<any> {\n const body = { ...filters, ...sortFilter };\n return this.http.get(`${apiUrl}?current_page=${currentPage}&per_page=${limit}&search=${search}`)\n }\n}\n","\nexport const setToLocalStorageWithExpiry = (key: string, value: any, ttl = 9 * 1000 * 60 * 60) => {\n const now = new Date();\n // `item` is an object which contains the original value\n // as well as the time when it's supposed to expire\n const item = {\n value,\n expiry: now.getTime() + ttl\n };\n localStorage.setItem(key, JSON.stringify(item));\n};\n\n\nexport const getFromLocalStorageWithExpiry = (key: string) => {\n const itemStr = localStorage.getItem(key);\n // if the item doesn't exist, return null\n if (!itemStr) {\n return null;\n }\n const item = JSON.parse(itemStr);\n const now = new Date();\n\n if (!item.expiry) {\n localStorage.removeItem(key);\n return null;\n }\n\n // compare the expiry time of the item with the current time\n if (now.getTime() > item.expiry) {\n // If the item is expired, delete the item from storage\n // and return null\n localStorage.removeItem(key);\n return null;\n }\n return item.value;\n};\n\nexport const removeMultipleKeys = (keys: string[]) => {\n console.log('Storage Helper: Keys To Remove:', keys);\n keys.forEach(key => {\n localStorage.removeItem(key);\n });\n}","import { Directive, ElementRef, HostListener, Input } from '@angular/core';\n\n@Directive({\n selector: '[appScrolling]',\n standalone: false\n})\nexport class ScrollingDirective {\n constructor(private el: ElementRef) { }\n \n @Input() appScrolling: boolean = false;\n\n // @HostListener('mouseenter') onMouseEnter() {}\n\n @HostListener('mouseleave') onMouseLeave() {\n // console.log(\"==== appScrolling mouseleave ===\", this.el.nativeElement, this.appScrolling);\n this.el.nativeElement.classList.remove('more-scrollbar-width', 'more-scrollbar-height')\n }\n\n @HostListener('mousemove', ['$event']) onMousemove(event: MouseEvent) {\n // console.log(\"==== appScrolling mousemove clientX-clientY ===\", event.clientX, event.clientY);\n // console.log(\"==== appScrolling mousemove clientWidth-clientHeight ===\", this.el.nativeElement.clientWidth, this.el.nativeElement.clientHeight);\n // console.log(\"==== appScrolling mousemove offsetX-offsetY ===\", this.el.nativeElement.offsetX, this.el.nativeElement.offsetY);\n // console.log(\"==== appScrolling mousemove offsetWidth-offsetLeft ===\", this.el.nativeElement.offsetWidth, this.el.nativeElement.offsetLeft);\n // console.log(\"==== appScrolling mousemove json ===\", {\n // clientX: event.clientX,\n // clientY: event.clientY,\n // clientWidth: this.el.nativeElement.clientWidth,\n // clientHeight: this.el.nativeElement.clientHeight,\n // offsetX: this.el.nativeElement.offsetX,\n // offsetY: this.el.nativeElement.offsetY,\n // offsetWidth: this.el.nativeElement.offsetWidth,\n // offsetLeft: this.el.nativeElement.offsetLeft,\n // rect: this.el.nativeElement.getBoundingClientRect()\n // });\n\n const rect = this.el.nativeElement.getBoundingClientRect()\n\n let xDistance = rect.left + this.el.nativeElement.clientWidth + 10 - event.clientX;\n // console.log(\"=== appScrolling mousemove xDistance ===\", xDistance);\n xDistance < 15 && xDistance > -15 ? this.el.nativeElement.classList.add('more-scrollbar-width'): this.el.nativeElement.classList.remove('more-scrollbar-width');\n\n let yDistance = rect.top + this.el.nativeElement.clientHeight + 15 - event.clientY;\n // console.log(\"=== appScrolling mousemove yDistance ===\", yDistance);\n yDistance < 20 && yDistance > -20 ? this.el.nativeElement.classList.add('more-scrollbar-height'): this.el.nativeElement.classList.remove('more-scrollbar-height');\n // this.el.nativeElement.classList.remove('more-scrollbar-width', 'more-scrollbar-height')\n }\n\n}\n","import { Injectable } from '@angular/core';\nimport { HttpClient } from '@angular/common/http';\nimport { Observable } from 'rxjs';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class UserCustomizationService {\n\n constructor(private http: HttpClient) {}\n\n getColumnsTemplates(url: string, listComponent: string): Observable<any> {\n return this.http.get(`${url}?listComponent=${listComponent}`);\n }\n\n addColumnsTemplate(url: string, body: any): Observable<any> {\n return this.http.post(url, body);\n }\n\n updateColumnsTemplate(url: string, body: any): Observable<any> {\n return this.http.post(url, body);\n }\n\n deleteColumnsTemplate(url: string, body: any): Observable<any> {\n return this.http.put(url, body);\n }\n\n getSelectedColumnsTemplate(url: string, listComponent: string): Observable<any> {\n return this.http.get(`${url}?listComponent=${listComponent}`);\n }\n\n updateSelectedColumnsTemplate(url: string, body: any): Observable<any> {\n return this.http.post(url, body);\n }\n}\n","import { Component, Inject } from '@angular/core';\nimport { MAT_DIALOG_DATA, MatDialogRef } from '@angular/material/dialog';\n\n@Component({\n selector: 'tis-smart-table-error-dialog',\n standalone: false,\n templateUrl: './tis-smart-table-error-dialog.component.html',\n styleUrl: './tis-smart-table-error-dialog.component.css'\n})\nexport class TisSmartTableErrorDialogComponent {\n constructor(\n public dialogRef: MatDialogRef<TisSmartTableErrorDialogComponent>,\n @Inject(MAT_DIALOG_DATA) public data: any,\n ) {\n this.dialogRef.addPanelClass(['tis-smart-table-error-dialog']);\n }\n\n onClose(): void {\n this.dialogRef.close();\n }\n}\n","<h1 mat-dialog-title>\n <mat-icon class=\"{{data?.iconClass}}\">{{data?.icon}}</mat-icon>\n {{data?.title}}\n</h1>\n<div mat-dialog-content>\n {{data?.message}}\n</div>\n<div mat-dialog-actions>\n <button mat-button class=\"tis-text-upper {{data?.buttonClass ?? 'tis-btn-primary'}}\" (click)=\"onClose()\" cdkFocusInitial *ngIf=\"data?.buttonText && data?.buttonText != ''\">{{data?.buttonText}}</button>\n</div>","import { HttpClient, HttpErrorResponse, HttpHeaders } from '@angular/common/http';\nimport { Injectable } from '@angular/core';\nimport { MatDialog, MatDialogRef } from '@angular/material/dialog';\nimport { MatSnackBar, MatSnackBarRef, TextOnlySnackBar } from '@angular/material/snack-bar';\nimport { TisSmartTableErrorDialogComponent } from '../components/tis-smart-table-error-dialog/tis-smart-table-error-dialog.component';\nimport { Observable } from 'rxjs';\n\n\n@Injectable({\n providedIn: 'root'\n})\nexport class TisHelperService {\n\n constructor(\n private snackBar: MatSnackBar,\n private dialog: MatDialog,\n private http: HttpClient\n ) { }\n\n showHttpErrorMsg(error: HttpErrorResponse, duration = 5000) {\n console.log('httpError: ', error);\n\n let errorMessage = 'Some Unknown Error Occurred.';\n let errorCode = 'Unknown Error';\n const httpError = error;\n\n if (httpError.status >= 400) {\n const errorFromServer = httpError.error;\n if (Array.isArray(errorFromServer) && errorFromServer.length > 0) {\n errorMessage = errorFromServer[0].message;\n errorCode = errorFromServer[0].code;\n }\n } else if (httpError.status < 100) {\n errorMessage = httpError.message;\n errorCode = httpError.statusText;\n }\n\n if (errorCode == \"VALIDATION_ERROR\" || errorCode == \"NOT_FOUND_ERROR\" || errorCode == \"THIRD_PARTY_API_ERROR\") {\n let confirmBoxData: any = {\n title: \"Error !\",\n message: errorMessage,\n icon: \"error\",\n iconClass: \"tis-text-danger\",\n buttonText: \"Ok\",\n buttonClass: \"tis-btn-primary\",\n };\n\n const dialogRef: MatDialogRef<TisSmartTableErrorDialogComponent> = this.dialog.open(TisSmartTableErrorDialogComponent, {\n width: \"550px\",\n panelClass: ['tis-simple-confirmation'],\n data: confirmBoxData,\n disableClose: false,\n });\n\n return dialogRef;\n\n } else {\n const snackbarRef: MatSnackBarRef<TextOnlySnackBar> = this.snackBar.open(errorMessage, 'Error', { duration: duration });\n return snackbarRef;\n }\n\n }\n\n showSuccessMsg(message: string, title: string, duration = 5000) {\n this.snackBar.open(message, title, {\n duration: duration\n })\n }\n\n showErrorMsg(message: string, title: string, duration = 5000) {\n this.snackBar.open(message, title, {\n duration: duration\n })\n }\n\n sortArrayByOrder(A: string[], B: string[]): string[] {\n const sortedA = [];\n for (const element of B) {\n const index = A.indexOf(element);\n if (index !== -1) {\n sortedA.push(A[index]);\n A.splice(index, 1);\n }\n }\n return [...sortedA, ...A]; // Combine sorted elements with remaining elements\n }\n\n}","import { Component, Inject } from '@angular/core';\nimport { MatDialogRef, MAT_DIALOG_DATA } from '@angular/material/dialog';\n\n@Component({\n selector: 'tis-smart-table-confirmation-dialog',\n standalone: false,\n templateUrl: './tis-smart-table-confirmation-dialog.component.html',\n styleUrl: './tis-smart-table-confirmation-dialog.component.css'\n})\nexport class TisSmartTableConfirmationDialogComponent {\n constructor(\n public dialogRef: MatDialogRef<TisSmartTableConfirmationDialogComponent>,\n @Inject(MAT_DIALOG_DATA) public data: any,\n ) {\n this.dialogRef.addPanelClass(['tis-smart-table-confirmation-dialog']);\n }\n\n onClose(status: boolean | null): void {\n this.dialogRef.close(status);\n }\n}\n","<h1 mat-dialog-title style=\"gap: 10px; justify-content: start; width: 100%; align-items: center; display: flex; padding: 8px 16px;\">\n <mat-icon class=\"{{data?.iconClass}}\" style=\"color: var(--tis-cancel, #bb333b)\">{{data?.icon}}</mat-icon>\n <span>{{data?.title}}</span>\n</h1>\n<div mat-dialog-content style=\"padding: 20px 24px; padding-top: 0px;\">\n @if(data?.html){\n <h5 class=\"title\">{{data?.message}}</h5>\n <div [innerHTML]=\"data.html\">\n </div>\n }\n @else {\n <span>{{data?.message}}</span>\n }\n</div>\n<div mat-dialog-actions style=\"border-top: 1px solid rgba(0, 0, 0, 0.12); justify-content: end;\">\n <button mat-button class=\"{{data?.cancelButtonClass}}\" style=\"color: var(--tis-primary, var(--mat-sys-primary))\" (click)=\"onClose(false)\" *ngIf=\"data?.cancelButtonText && data?.cancelButtonText != ''\">{{data?.cancelButtonText}}</button>\n <button mat-button class=\"{{data?.approveButtonClass}}\" style=\"color: var(--tis-cancel, #bb333b)\" (click)=\"onClose(true)\" cdkFocusInitial *ngIf=\"data?.approveButtonText && data?.approveButtonText != ''\">{{data?.approveButtonText}}</button>\n</div>","import { CdkDragDrop, moveItemInArray } from '@angular/cdk/drag-drop';\nimport { Component, Inject } from '@angular/core';\nimport { FormGroup, FormControl, Validators } from '@angular/forms';\nimport { MatDialogRef, MAT_DIALOG_DATA } from '@angular/material/dialog';\nimport { MatSnackBar } from '@angular/material/snack-bar';\nimport { TisHelperService } from '../../services/tis-helper.service';\nimport { UserCustomizationService } from '../../services/user-customization.service';\nimport type { ColumnCustomizationUrlConfig } from '../../interfaces/url-config.type';\n\n@Component({\n selector: 'tis-create-columns-template',\n templateUrl: './create-columns-template.component.html',\n styleUrl: './create-columns-template.component.css',\n standalone: false\n})\nexport class CreateColumnsTemplateComponent {\n loading: boolean = false;\n updatingTemplate: boolean = false;\n savingTemplate: boolean = false;\n columns: any = [];\n displayedColumns: any = [];\n listComponentColumns: any;\n listComponentColumnsTemplateDetail: any;\n form!: FormGroup;\n userId!: number;\n translationReadKey!: string\n customColumns: any;\n t: any;\n columnCustomizationUrlConfig!: ColumnCustomizationUrlConfig;\n\n constructor(\n public dialogRef: MatDialogRef<CreateColumnsTemplateComponent>,\n private helper: TisHelperService,\n private snackBar: MatSnackBar,\n private userCustomizationService: UserCustomizationService,\n @Inject(MAT_DIALOG_DATA) public data: any,\n // private translocoService: TranslocoService,\n ) {\n this.translationReadKey = this.data?.translationReadKey ?? '';\n \n if(this.data?.customColumns){\n this.customColumns = this.data?.customColumns ?? {};\n }\n\n if(this.data?.columnCustomizationUrlConfig){\n this.columnCustomizationUrlConfig = this.data.columnCustomizationUrlConfig;\n }\n \n this.dialogRef.addPanelClass(['tis-create-columns-template']);\n }\n\n ngOnInit(): void {\n this.t = this.data?.t || {};\n this.columns = JSON.parse(JSON.stringify(this.data.columns));\n this.displayedColumns = JSON.parse(JSON.stringify(this.data.displayColumns));\n this.displayedColumns = this.data.displayColumns;\n\n if(this.data?.defaultSelectedState == null || this.data?.defaultSelectedState == 'undefined') {\n this.data.defaultSelectedState = true;\n }\n\n if(this.data?.selectedTemplateId && this.displayedColumns?.length){\n this.columns = this.helper.sortArrayByOrder(JSON.parse(JSON.stringify(this.columns)), JSON.parse(JSON.stringify(this.displayedColumns)));\n }\n \n this.listComponentColumns = this.columns.map((col: any, ndx: number) => ({ id: ndx + 1, isSelected: this.data?.defaultSelectedState === true ? true : (this.displayedColumns?.indexOf(col) >= 0 ? true : false), column: col }));\n\n this.createForm();\n\n // this.store.select('auth').subscribe((authState: fromAuth.State) => {\n // console.log('Current AuthState:', authState);\n // if(authState?.user?.id){\n // this.userId = authState.user.id;\n // }\n // })\n }\n\n ngAfterViewInit(){\n // this.translocoService.selectTranslate('lang', {}, 'shared').subscribe((translation: string) => {\n // this.tl = this.translocoService.translateObject('createColumnsTemplateComponent', {}, 'shared');\n // });\n }\n\n createForm() {\n this.form = new FormGroup({\n name: new FormControl(this.data?.name ?? '', Validators.required),\n enableStickiness: new FormControl(true),\n fromStartColumnNumber: new FormControl(this.data?.fromStartColumnNumber ? Number(this.data?.fromStartColumnNumber) : 0, Validators.required),\n fromEndColumnNumber: new FormControl(this.data?.fromEndColumnNumber ? Number(this.data?.fromEndColumnNumber) : 0, Validators.required),\n });\n }\n\n get name(){\n return (this.form.get('name') as FormControl)\n }\n \n get listComponentColumnsTemplateName(){\n return this.name.value;\n }\n\n get orgDisplayColumns(){\n return this.displayedColumns;\n }\n\n drop(event: CdkDragDrop<string[]>) {\n moveItemInArray(this.listComponentColumns, event.previousIndex, event.currentIndex);\n }\n\n onSubmit() {\n const orgDisplayColumns = this.orgDisplayColumns;\n\n if(this.form.invalid){\n return ;\n }\n\n // Get selected columns (first filter on selected column and then get column array)\n this.displayedColumns = this.listComponentColumns.filter((r: any) => { if(r.isSelected) return r.column } ).map((r: any) => r.column);\n if(this.displayedColumns.length <= 0){\n this.snackBar.open(\"Please select at least one column\", \"ok\", {\n duration: 4000\n })\n return ;\n }\n console.log('new and org display columns: ', this.displayedColumns, orgDisplayColumns);\n\n this.acceptTemplateNameAndSave();\n\n }\n\n acceptTemplateNameAndSave() {\n let data = {\n listComponentName: this.data.listComponentName,\n name: this.name.getRawValue(),\n enableStickiness: this.form.getRawValue().enableStickiness,\n fromStartColumnNumber: this.form.getRawValue().fromStartColumnNumber,\n fromEndColumnNumber: this.form.getRawValue().fromEndColumnNumber,\n defaultColumns: this.columns.join(),\n displayColumns: this.displayedColumns.join()\n }\n\n console.log('save value: ', data);\n \n this.savingTemplate = true;\n this.loading = true;\n if(this.data?.selectedTemplateId){\n this.userCustomizationService.updateColumnsTemplate(this.columnCustomizationUrlConfig.update, {id: this.data?.selectedTemplateId, ...data}).subscribe(r => {\n console.log(\"add response: \", r);\n // this.loading = false;\n this.helper.showSuccessMsg(r.message, 'Success');\n let selectedTemplate = {\n ...r.data,\n ...data,\n isUpdated: true,\n }\n this.onClose(selectedTemplate);\n }, err => {\n this.loading = false;\n this.savingTemplate = false;\n this.helper.showHttpErrorMsg(err);\n })\n }\n else{\n this.userCustomizationService.addColumnsTemplate(this.columnCustomizationUrlConfig.add, data).subscribe(r => {\n console.log(\"add response: \", r);\n // this.loading = false;\n this.helper.showSuccessMsg(r.message, 'Success');\n let selectedTemplate = {\n ...r.data,\n ...data\n }\n this.onClose(selectedTemplate);\n }, err => {\n console.log(err);\n this.loading = false;\n this.savingTemplate = false;\n this.helper.showHttpErrorMsg(err);\n })\n }\n }\n\n onChangeColumnStatus(status: boolean, data: any){\n if(status == false){\n let leftColumn = data.id;\n let rightColumn = this.listComponentColumns?.length - (data.id - 1);\n let formValue = this.form.getRawValue();\n if(formValue?.fromStartColumnNumber == leftColumn){\n this.form.patchValue({\n fromStartColumnNumber: 0\n });\n }\n\n if(formValue?.fromEndColumnNumber == rightColumn){\n this.form.patchValue({\n fromEndColumnNumber: 0\n });\n }\n }\n }\n\n onClose(data: any = null){\n this.dialogRef.close(data);\n }\n}\n","\n<form [formGroup]=\"form\" (ngSubmit)=\"onSubmit()\">\n <h1 mat-dialog-title style=\"padding: 16px 24px; background-color: #e0e0e0; display: flex; justify-content: space-between; width: 100%; align-items: center;\">\n {{t?.createColumnsTemplate?.title}}\n <mat-icon (click)=\"onClose()\" style=\"cursor: pointer;\">clear</mat-icon>\n </h1>\n <div style=\"padding: 15px; padding-bottom: 0px;\">\n <mat-form-field class=\"width-100 tis-mat-form-field\" appearance=\"outline\">\n <mat-label>{{t?.createColumnsTemplate?.templateName}}</mat-label>\n <input matInput formControlName=\"name\" placeholder=\"{{t?.createColumnsTemplate?.enterTemplateName}}\" />\n </mat-form-field>\n </div>\n\n <mat-dialog-content [appScrolling]=\"true\" class=\"w-100 p-0 m-0\" style=\"max-height: 60vh !important;\">\n <div cdkDropList class=\"example-list\" (cdkDropListDropped)=\"drop($event)\">\n <div class=\"example-box\" *ngFor=\"let item of listComponentColumns, let ndx = index\" cdkDrag>\n <div class=\"width-100 example-div\">\n <div class=\"example-item flex flex-row items-center\">\n <mat-icon cdkDragHandle style=\"cursor: pointer; color: rgba(0, 0, 0, 0.54); font-size: 19px; width: 19px; height: 19px;\">drag_indicator</mat-icon>\n <span *ngIf=\"!data?.skipTranslation\">{{t[item.column]}}</span>\n <span *ngIf=\"data?.skipTranslation\">{{customColumns[item.column]}}</span>\n </div>\n <mat-checkbox color=\"primary\" [(ngModel)]=\"item.isSelected\" (ngModelChange)=\"onChangeColumnStatus($event, item)\" [ngModelOptions]=\"{standalone: true}\"></mat-checkbox>\n </div>\n </div>\n </div>\n </mat-dialog-content>\n\n @if(form.value?.enableStickiness){\n <div style=\"padding: 15px; padding-bottom: 0px;\">\n <div style=\"display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 1rem;\">\n <mat-form-field class=\"width-100 tis-mat-form-field\" appearance=\"outline\">\n <mat-label>{{t?.createColumnsTemplate?.freezeColumnFromLeft}}</mat-label>\n <mat-select formControlName=\"fromStartColumnNumber\">\n <mat-option [value]=\"0\">None</mat-option>\n @for (item of listComponentColumns; track item; let i = $index; let l = $last;) {\n @if(item?.isSelected){\n <mat-option [value]=\"(i+1)\">\n <span *ngIf=\"!data?.skipTranslation\">{{t[item.column]}}</span>\n <span *ngIf=\"data?.skipTranslation\">{{customColumns[item.column]}}</span>\n </mat-option>\n }\n }\n </mat-select>\n </mat-form-field>\n <mat-form-field class=\"width-100 tis-mat-form-field\" appearance=\"outline\">\n <mat-label>{{t?.createColumnsTemplate?.freezeColumnFromRight}}</mat-label>\n <mat-select formControlName=\"fromEndColumnNumber\">\n <mat-option [value]=\"0\">None</mat-option>\n @for (item of listComponentColumns; track item; let i = $index; let l = $last;) {\n @if(item?.isSelected){\n <mat-option [value]=\"(listComponentColumns?.length - i)\">\n <span *ngIf=\"!data?.skipTranslation\">{{t[item.column]}}</span>\n <span *ngIf=\"data?.skipTranslation\">{{customColumns[item.column]}}</span>\n </mat-option>\n }\n }\n </mat-select>\n </mat-form-field>\n </div>\n </div>\n }\n\n <div mat-dialog-actions>\n <button mat-button type=\"button\" class=\"tis-cancel-button\" mat-dialog-close [disabled]=\"loading\">{{t?.cancel}}</button>\n <button mat-flat-button type=\"submit\" class=\"tis-submit-button\" cdkFocusInitial [disabled]=\"savingTemplate\">\n {{data?.selectedTemplateId ? t?.createColumnsTemplate?.update : t?.createColumnsTemplate?.save}}\n @if(savingTemplate){\n <i class=\"fas fa-spinner fa-spin\"></i>\n }\n </button>\n </div>\n</form>","import { Component, EventEmitter, Input, Output } from '@angular/core';\nimport { MatDialog } from '@angular/material/dialog';\nimport { UserCustomizationService } from '../../services/user-customization.service';\nimport { TisHelperService } from '../../services/tis-helper.service';\nimport { TisSmartTableConfirmationDialogComponent } from '../tis-smart-table-confirmation-dialog/tis-smart-table-confirmation-dialog.component';\nimport { CreateColumnsTemplateComponent } from '../create-columns-template/create-columns-template.component';\nimport type { ColumnCustomizationUrlConfig } from '../../interfaces/url-config.type';\n\n@Component({\n selector: 'tis-columns-btn',\n templateUrl: './tis-columns-btn.component.html',\n styleUrl: './tis-columns-btn.component.css',\n standalone: false\n})\nexport class TisColumnsBtnComponent {\n static readonly COMPONENT_NAME = 'TisColumnsBtnComponent';\n\n @Input({ required: true }) columnCustomizationUrlConfig!: ColumnCustomizationUrlConfig;\n @Input() t: any = {};\n @Input({required: true}) componentName!: string;\n @Input({required: true}) defaultColumns!: string[];\n @Input({required: true}) columns!: string[];\n @Input() skipTranslation: boolean = false;\n @Input() customColumns?: object;\n\n @Output() displayedColumnsChange = new EventEmitter();\n @Output() fromStartColumnNumberChange = new EventEmitter();\n @Output() fromEndColumnNumberChange = new EventEmitter();\n\n selectedTemplate: any = {\n id: -1,\n name: 'Default'\n };\n displayedColumns: any[] = [];\n templates: any[] = [];\n isDeleteTemplate = false;\n isEditTemplate = false;\n\n constructor(\n private helper: TisHelperService,\n private userCustomizationService: UserCustomizationService,\n private dialog: MatDialog,\n ) { }\n\n ngOnInit(): void {\n this.getColumnsTemplates();\n // setTimeout(() => {\n // this.createNewTemplateDialog();\n // }, 2000);\n }\n\n public createNewTemplateDialog(stData: any = null) {\n if(!this.componentName) return;\n\n let data = {\n name: stData ? stData.name : null,\n enableStickiness: stData ? stData.enableStickiness : false,\n fromStartColumnNumber: stData ? stData.fromStartColumnNumber : 0,\n fromEndColumnNumber: stData ? stData.fromEndColumnNumber : 0,\n listComponentName: this.componentName,\n selectedTemplateId: stData ? stData?.id : null,\n defaultSelectedState: stData && stData?.id ? false : true,\n defaultColumns: this.defaultColumns,\n columns: this.columns,\n displayColumns: stData ? stData?.displayColumns?.split(',') : this.displayedColumns,\n t: this.t,\n skipTranslation: this.skipTranslation,\n customColumns: this.customColumns\n };\n\n const dialogRef = this.dialog.open(CreateColumnsTemplateComponent, {\n width: \"35%\",\n minWidth: '370px',\n data: data,\n panelClass: ['tis-create-new-columns-template'],\n disableClose: true,\n });\n\n dialogRef.afterClosed().subscribe((res) => {\n if (res) {\n console.log(\"=== createNewTemplateDialog ===\", res);\n \n if(res?.isUpdated){\n this.templates = this.templates?.map(t =>{\n if(t.id == res?.id){\n t = res;\n }\n return t;\n });\n }\n else{\n this.templates = [res, ...this.templates];\n }\n this.selectedTemplate = res;\n this.changeDisplayColumns();\n }\n });\n }\n\n getColumnsTemplates() {\n this.userCustomizationService.getColumnsTemplates(this.columnCustomizationUrlConfig.list, this.componentName).subscribe(r => {\n console.log(\"getColumnsTemplates:\", r.data);\n this.templates = r?.data ?? [];\n setTimeout(() => {\n this.getSelectedColumnsTemplate();\n }, 100);\n });\n }\n\n getSelectedColumnsTemplate() {\n this.userCustomizationService.getSelectedColumnsTemplate(this.columnCustomizationUrlConfig.getSelectedTemplate, this.componentName).subscribe((r) => {\n console.log(\"getSelectedColumnsTemplate:\", r.data);\n if (r?.data && Object.keys(r?.data).length != 0) {\n if(r.data?.listComponentColumnsTemplateId > 0){\n this.selectedTemplate = this.templates?.find((t: any) => t.id == r.data?.listComponentColumnsTemplateId);\n }\n console.log(\"getSelectedColumnsTemplate:\", this.templates, this.selectedTemplate);\n this.changeDisplayColumns();\n }\n });\n }\n\n onSelectedTemplate(templateId: number){\n setTimeout(() => {\n if(this.isDeleteTemplate){\n console.log(\"onSelectedTemplate:\", this.isDeleteTemplate);\n let confirmBoxData: any = {\n title: \"Delete template\",\n message: `Are you sure you want to delete this template?`,\n iconClass: \"tis-text-danger\",\n icon: \"delete\",\n approveButtonText: \"Yes, Confirm\",\n approveButtonClass: \"tis-btn-danger\",\n cancelButtonText: \"Cancel\",\n cancelButtonClass: \"tis-btn-primary\"\n };\n \n const dialogRef = this.dialog.open(TisSmartTableConfirmationDialogComponent, {\n width: \"30%\",\n minWidth: '370px',\n // panelClass: ['tis-simple-confirmation'],\n data: confirmBoxData,\n disableClose: true,\n });\n \n dialogRef.afterClosed().subscribe((result) => {\n console.log(\"The dialog was closed with result:\", result);\n if (result) {\n this.userCustomizationService.deleteColumnsTemplate(this.columnCustomizationUrlConfig.delete, {id: templateId, isSelectedTemplate: this.selectedTemplate?.id == templateId}).subscribe((r) => {\n this.helper.showSuccessMsg('Columns template has been deleted successfully', 'Done');\n this.templates.splice(this.templates.findIndex(ee => ee.id == templateId), 1);\n if(this.selectedTemplate?.id == templateId){\n this.selectedTemplate = {\n id: -1,\n name: 'Default',\n fromStartColumnNumber: 0,\n fromEndColumnNumber: 0,\n };\n this.changeDisplayColumns();\n }\n });\n }\n });\n }\n else if(this.isEditTemplate){\n console.log(\"onSelectedTemplate:\", this.isEditTemplate);\n let st = this.templates?.find((t: any) => t.id == templateId);\n this.createNewTemplateDialog(st);\n }\n else{\n if(this.selectedTemplate?.id != templateId){\n if(templateId > 0){\n this.selectedTemplate = this.templates?.find((t: any) => t.id == templateId);\n }\n else{\n this.selectedTemplate = {\n id: -1,\n name: 'Default'\n };\n }\n\n this.userCustomizationService.updateSelectedColumnsTemplate(this.columnCustomizationUrlConfig.updateSelectedTemplate, {id: this.selectedTemplate?.id, listComponentName: this.componentName}).subscribe((r) => {\n this.changeDisplayColumns();\n });\n }\n }\n\n this.isDeleteTemplate = false;\n this.isEditTemplate = false;\n }, 200); \n }\n\n changeDisplayColumns(){\n if(this.selectedTemplate?.id > 0){\n this.displayedColumns = this.selectedTemplate.displayColumns?.split(',')\n }\n else{\n this.displayedColumns = this.defaultColumns;\n }\n\n this.displayedColumnsChange.emit(this.displayedColumns);\n this.fromStartColumnNumberChange.emit(this.selectedTemplate?.fromStartColumnNumber ?? 0);\n this.fromEndColumnNumberChange.emit(this.selectedTemplate?.fromEndColumnNumber ?? 0);\n }\n\n onMouseOverOut(event: Event, color: string) {\n const target = event.target as HTMLElement;\n target.style.color = color;\n }\n \n onMouseOut(event: Event) {\n const target = event.target as HTMLElement;\n target.style.color = `color: var(--tis-primary, var(--mat-sys-primary, #3838a2)) !important;`;\n }\n}\n","<!-- shared.tisColumnsBtnComponent -->\n<button mat-flat-button class=\"tis-columns-btn\" style=\"background-color: var(--tis-light, #f5f5f5); color: black;\" [matMenuTriggerFor]=\"menu\">\n <mat-icon>view_week</mat-icon>\n <span style=\"display: flex; flex-direction: row;\">\n {{selectedTemplate?.name}}\n <mat-icon style=\"width: 15px; height: 15px; font-size: 20px; line-height: 16px;\">arrow_drop_down</mat-icon>\n </span>\n</button>\n<mat-menu #menu=\"matMenu\" class=\"tis-columns-btn-mat-menu\">\n <button mat-menu-item (click)=\"selectedTemplate?.id != -1 ? onSelectedTemplate(-1) : null\">\n <mat-icon>{{selectedTemplate?.id == -1 ? 'done': ''}}</mat-icon>\n Default\n </button>\n <button mat-menu-item *ngFor=\"let template of templates\" (click)=\"onSelectedTemplate(template?.id)\">\n <mat-icon>{{template?.id == selectedTemplate?.id ? 'done': ''}}</mat-icon>\n <span style=\"padding-right: 4rem;\">{{template.name}}</span>\n <mat-icon style=\"position: absolute; right: 0;\" class=\"delete-button\" (mouseover)=\"onMouseOverOut($event, `var(--tis-delete-icon, #bb333b)`)\" (mouseout)=\"onMouseOverOut($event, '')\" (click)=\"isDeleteTemplate = true\">delete</mat-icon>\n <mat-icon style=\"position: absolute; right: 2rem;\" class=\"edit-button\" (mouseover)=\"onMouseOverOut($event, `var(--tis-edit-icon, var(--mat-sys-primary, #3838a2))`)\" (mouseout)=\"onMouseOverOut($event, '')\" (click)=\"isEditTemplate = true\">edit</mat-icon>\n </button>\n <mat-divider class=\"tis-mat-divider\" style=\"margin: 0px;\"></mat-divider>\n <button mat-menu-item class=\"tis-create-columns-template-button\" style=\"color: var(--tis-primary, var(--mat-sys-primary, #3838a2));\" (click)=\"createNewTemplateDialog()\"><mat-icon style=\"color: var(--tis-primary, var(--mat-sys-primary, #3838a2));\">add</mat-icon> {{t?.tisColumnsBtnComponent?.createNewView}}</button>\n</mat-menu>","import { Pipe, PipeTransform } from '@angular/core';\nimport { DateTime } from 'luxon';\n\n@Pipe({\n name: 'tisDate',\n standalone: false\n})\nexport class TisDatePipe implements PipeTransform {\n\n transform(value: unknown, ...args: unknown[]): string {\n if (typeof value == 'string' && value !== '') {\n return DateTime.fromMillis(+value).toFormat('dd MMM yyyy');\n } else if (typeof value == 'number') {\n return DateTime.fromMillis(value).toFormat('dd MMM yyyy');\n } else if (value instanceof Date) {\n return DateTime.fromJSDate(value).toFormat('dd MMM yyyy');\n } else {\n return 'Invalid Date';\n }\n }\n\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { DateTime } from 'luxon';\n\n\n@Pipe({\n name: 'tisDateTime',\n standalone: false\n})\nexport class TisDateTimePipe implements PipeTransform {\n\n transform(value: unknown, ...args: unknown[]): string {\n if (typeof value == 'string' && value !== '') {\n return DateTime.fromMillis(+value).toFormat('dd MMM yyyy hh:mm a');\n } else if (typeof value == 'number') {\n return DateTime.fromMillis(value).toFormat('dd MMM yyyy hh:mm a');\n } else {\n return 'Invalid Date';\n }\n }\n\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { DateTime } from 'luxon';\n\n\n@Pipe({\n name: 'tisDateTimeWithSeconds',\n standalone: false\n})\nexport class TisDateTimeWithSecondsPipe implements PipeTransform {\n\n transform(value: unknown, ...args: unknown[]): string {\n if (typeof value == 'string' && value !== '') {\n return DateTime.fromMillis(+value).toFormat('dd MMM yyyy hh:mm:ss a');\n } else if (typeof value == 'number') {\n return DateTime.fromMillis(value).toFormat('dd MMM yyyy hh:mm:ss a');\n } else {\n return 'Invalid Date';\n }\n }\n\n}\n","import { CdkColumnDef } from '@angular/cdk/table';\nimport { Component, EventEmitter, Input, Output, SimpleChanges, ViewChild } from '@angular/core';\nimport { FormGroup, FormControl } from '@angular/forms';\nimport { ActivatedRoute, Router } from '@angular/router';\nimport { Subscription, Subject, takeUntil, tap, Observable, map, shareReplay, distinctUntilChanged, debounceTime } from 'rxjs';\nimport type { SmartTableWrapperRowsConfig } from '../../interfaces';\nimport { AnyKeyValueObject, SelectedFilterDisplayValuesType, SelectedFilterDisplayValueType, SelectedFiltersGroupedValuesType, SmartTableWrapperColumnsConfig } from '../../interfaces';\nimport { SelectionModel } from '@angular/cdk/collections';\nimport { CdkDragDrop, moveItemInArray } from '@angular/cdk/drag-drop';\nimport { ApiDataSource } from '../../datasources/api.datasource';\nimport { ApiService } from '../../services/api.service';\nimport { MatCheckbox, MatCheckboxChange } from '@angular/material/checkbox';\nimport { MatDialog } from '@angular/material/dialog';\nimport { MatPaginator } from '@angular/material/paginator';\nimport { MatSort } from '@angular/material/sort';\nimport { BreakpointObserver, Breakpoints } from '@angular/cdk/layout';\nimport { DateTime } from \"luxon\";\nimport * as storageHelper from '../../helpers/storage-helper';\nimport { Location } from '@angular/common';\nimport type { DataNotFoundConfig } from '../../interfaces/data-not-found-config.type';\nimport type { ColumnCustomizationUrlConfig } from '../../interfaces/url-config.type';\n\n@Component({\n selector: 'tis-smart-table-viewer',\n standalone: false,\n templateUrl: './tis-smart-table-viewer.component.html',\n styleUrl: './tis-smart-table-viewer.component.css',\n providers: [CdkColumnDef],\n})\nexport class TisSmartTableViewerComponent {\n homeUrl = '';\n\n @Input({ required: true }) columnCustomizationUrlConfig!: ColumnCustomizationUrlConfig;\n @Input({ required: true }) t: any = {};\n @Input({ required: true }) componentName = '';\n @Input({ required: true }) mainTitle!: string;\n @Input() searchPlaceholder!: string;\n @Input() breadcrumbs: { url: string, name: string }[] = [];\n @Input() hideHeader = false;\n @Input() hideTableHeader = false;\n @Input() hidePaginator = false;\n @Input() keepFilterInUrl = true;\n @Input() displayColumnsSelectionButton = true;\n @Input() loadDataApiBaseUrl!: string;\n @Input() startStickyColumnCount!: number;\n @Input() endStickyColumnCount!: number;\n @Input() loaderPosition: 'top' | 'bottom' = 'top';\n @Input({ required: true }) dataNotFoundConfig: DataNotFoundConfig = {\n title: 'No Data Found',\n desc: 'There is no data. Please click on button to add',\n btnText: 'Add New',\n btnUrl: '',\n btnClick: null,\n secondBtnText: '',\n secondBtnUrl: '',\n secondBtnClick: null\n };\n @Input() showFilterButtonSection!: boolean;\n\n @Input({ required: true }) columnsCodeMapping!: SmartTableWrapperColumnsConfig[];\n autoRenderColumns!: SmartTableWrapperColumnsConfig[];\n templateRenderColumns!: SmartTableWrapperColumnsConfig[];\n\n @Input() defaultDisplayedColumns!: string[];\n displayedColumns!: string[];\n defaultColumns!: string[];\n columns!: string[];\n\n @Output() displayedColumnsChange = new EventEmitter<string[]>();\n usersColumnSelectionDetail: any;\n\n @Input() defaultSortObj: any = {};\n sortObj: any = {};\n @Output() sortObjChange = new EventEmitter<AnyKeyValueObject>();\n\n @Input() loadingSpinnerDiameter = 30;\n @Input() pageSizeOptions = [5, 10, 25, 100];\n\n @Input() pageSize = 10;\n @Output() pageSizeChange = new EventEmitter<number>();\n @Input() useGlobalPageSize = true;\n\n @Input() pageIndex = 0;\n @Output() pageIndexChange = new EventEmitter<number>();\n\n @Input() filterFormGroup: FormGroup = new FormGroup({});\n\n @Input() rowsConfig: SmartTableWrapperRowsConfig = {\n backgroundApplyFunction: () => null // Default blank function\n }; \n\n selectedFilterValues: SelectedFilterDisplayValuesType = [];\n finalSelectedFilterValuesToDisplay: SelectedFilterDisplayValuesType = [];\n selectedFilterGroupedValues: SelectedFiltersGroupedValuesType[] = [];\n isShowFilter = false;\n filterFormGroupSubscription!: Subscription;\n filterHasNonEmptyValue = false;\n\n filterApplied = false;\n resetFlag = false;\n initialLoading = true;\n\n filterFromQueryParams: any = {};\n sortFromQueryParams: any = {};\n\n search = '';\n searchCtrl = new FormControl();\n private _onDestroy = new Subject<void>();\n\n dataSource!: ApiDataSource;\n\n private _sort!: MatSort;\n private _sortSubscription!: Subscription;\n @ViewChild(MatSort) set sort(value: MatSort) {\n this._sort = value;\n if (this._sort) {\n\n if (this._sortSubscription) {\n this._sortSubscription.unsubscribe();\n }\n\n this._sortSubscription = this._sort.sortChange.pipe(\n takeUntil(this._onDestroy),\n ).subscribe((ch) => {\n this.handleSortingChanges(ch);\n });\n }\n }\n\n private _paginator!: MatPaginator;\n private _paginatorSubscription!: Subscription;\n @ViewChild(MatPaginator) set paginator(value: MatPaginator) {\n this._paginator = value;\n if (this._paginator) {\n\n if (this._paginatorSubscription) {\n this._paginatorSubscription.unsubscribe();\n }\n\n this._paginatorSubscription = this._paginator.page.pipe(\n takeUntil(this._onDestroy),\n tap(() => {\n this.onPaginationChanges();\n })\n ).subscribe();\n }\n }\n\n\n loadingSubscription!: Subscription;\n dataLengthSubscription!: Subscription;\n\n @Input() enableRowsSelection = false;\n @Input() enableAllRowsSelection = false;\n @Input() onlySingleSelection = false;\n @Input() selectedRows!: any[];\n @Output() selectedRowsChange = new EventEmitter<any>();\n\n selection = new SelectionModel<any>(true, []);\n selectedIds: Set<number | string> = new Set();\n isAllRowsSelected = false;\n\n\n @Input() enableDragNDrop = false;\n @Output() listDataSequenceChange = new EventEmitter<any>();\n\n isHandset$!: Observable<boolean>;\n isMobile: boolean = false;\n\n constructor(\n // private userCustomizationService: UserCustomizationService,\n private dialog: MatDialog,\n private apiService: ApiService,\n private route: ActivatedRoute,\n private router: Router,\n private location: Location,\n private breakpointObserver: BreakpointObserver\n ) {\n this.selection.changed.subscribe(change => {\n change.added.forEach(item => this.selectedIds.add(item['id']));\n change.removed.forEach(item => this.selectedIds.delete(item['id']));\n });\n\n }\n\n ngOnInit(): void {\n\n this.isHandset$ = this.breakpointObserver.observe([Breakpoints.Handset])\n .pipe(\n map(result => {\n console.log(\"== result ==\", result);\n return result.matches;\n }),\n shareReplay()\n );\n\n this.isHandset$.subscribe(r => {\n console.log('IS HANDSET:', r);\n this.isMobile = r;\n });\n\n this.setDefaultColumns();\n\n this.getHomeUrl();\n\n this.route.queryParams.subscribe(qp => {\n this.filterFromQueryParams = {};\n this.sortFromQueryParams = {};\n\n if (this.keepFilterInUrl) {\n for (const key in qp) {\n if (qp.hasOwnProperty(key) && qp[key] && qp[key] != '' && qp[key] != 'null' && qp[key] != 'undefined') {\n\n let fixedKeyMatched = false;\n\n if (key.toLowerCase() === 'pageIndex'.toLowerCase()) {\n this.pageIndex = Number(qp[key]);\n fixedKeyMatched = true;\n }\n\n if (key.toLowerCase() === 'pageSize'.toLowerCase()) {\n this.pageSize = Number(qp[key]);\n fixedKeyMatched = true;\n }\n\n if (key.toLowerCase() === 'sortBy'.toLowerCase()) {\n this.sortFromQueryParams.sortBy = qp[key];\n fixedKeyMatched = true;\n }\n\n if (key.toLowerCase() === 'sortOrder'.toLowerCase()) {\n this.sortFromQueryParams.sortOrder = qp[key];\n fixedKeyMatched = true;\n }\n\n if (key.toLowerCase() === 'search'.toLowerCase()) {\n this.search = qp[key];\n this.searchCtrl.patchValue(this.search);\n fixedKeyMatched = true;\n }\n\n\n if (key.toLowerCase().includes('date') && qp[key].length == 13) { // To Check if it is a date\n // this.filterFromQueryParams[key] = moment(Number(qp[key]));\n this.filterFromQueryParams[key] = DateTime.fromMillis(Number(qp[key]));\n fixedKeyMatched = true;\n }\n\n if (!fixedKeyMatched) {\n if ((qp[key]).includes(',')) {\n this.filterFromQueryParams[key] = (qp[key]).split(',');\n } else {\n this.filterFromQueryParams[key] = qp[key];\n }\n }\n\n // Transform Data, before patching in filter Form\n let mapping = this.columnsCodeMapping.find(ccm => ccm.filterFormKey == key);\n if (mapping?.transformQueryParamFn) {\n this.filterFromQueryParams[key] = mapping.transformQueryParamFn(this.filterFromQueryParams[key]);\n }\n\n }\n }\n this.filterFormGroup.patchValue(this.filterFromQueryParams);\n\n if (this.sortFromQueryParams && this.sortFromQueryParams.sortBy && this.sortFromQueryParams.sortOrder) {\n this.sortObj = this.sortFromQueryParams;\n console.log('[table-list-view-wrapper]: Emitting Sort Obj from QP to parent component:', this.sortFromQueryParams);\n this.sortObjChange.emit(this.sortObj);\n }\n }\n\n\n\n let filterHasNonEmptyValue = Object.values(this.filterFromQueryParams).some(value => value !== null && value !== undefined && value !== '');\n if (filterHasNonEmptyValue) {\n this.filterApplied = true;\n }\n\n this.getList();\n\n });\n\n this.searchCtrl.valueChanges\n .pipe(takeUntil(this._onDestroy), debounceTime(400), distinctUntilChanged())\n .subscribe((search) => {\n this.search = search;\n this.resetFlag = true; // B/c every time search is made, make sure we go to first page...\n this.getList(false);\n });\n }\n\n\n ngOnChanges(changes: SimpleChanges): void {\n console.log(`[table-list-view-wrapper]: ngOnChanges:`, changes);\n\n if (changes['defaultDisplayedColumns']) {\n console.log(`[table-list-view-wrapper]: changes['defaultDisplayedColumns']:`, changes['defaultDisplayedColumns']);\n this.handleDisplayedColumns();\n }\n\n if (changes['columnsCodeMapping']) {\n console.log(`[table-list-view-wrapper]: changes['columnsCodeMapping']:`, changes['columnsCodeMapping']);\n\n this.columnsCodeMapping = changes['columnsCodeMapping'].currentValue;\n this.handleDisplayedColumns();\n\n this.columns = this.columnsCodeMapping.map(c => c.name);\n this.autoRenderColumns = this.columnsCodeMapping.filter(c => c.hasOwnProperty('valueKey'));\n this.templateRenderColumns = this.columnsCodeMapping.filter(c => c.hasOwnProperty('template'));\n }\n\n if (changes['pageIndex']) {\n this.pageIndex = changes['pageIndex'].currentValue;\n }\n\n if (changes['pageSize']) {\n if (!changes['pageSize'].isFirstChange) {\n this.pageSize = changes['pageSize'].currentValue;\n } else {\n if (this.useGlobalPageSize) {\n let userDefaultPageSize = storageHelper.getFromLocalStorageWithExpiry('user_pagination_page_size');\n this.pageSize = userDefaultPageSize ? userDefaultPageSize : changes['pageSize'].currentValue;\n }\n }\n }\n\n\n if (changes['loadDataApiBaseUrl']) {\n if (changes['loadDataApiBaseUrl'].currentValue) {\n console.log(`[table-list-view-wrapper]: Datasource changes['loadDataApiBaseUrl'].currentValue:`, changes['loadDataApiBaseUrl'].currentValue);\n\n\n if (this.loadingSubscription) {\n this.loadingSubscription.unsubscribe();\n }\n\n if (this.dataLengthSubscription) {\n this.dataLengthSubscription.unsubscribe();\n }\n\n this.dataSource = new ApiDataSource(this.apiService);\n console.log('[table-list-view-wrapper]: Datasource Initialized:', this.dataSource);\n\n this.loadingSubscription = this.dataSource.loading$.subscribe(loading => {\n console.log('[table-list-view-wrapper]: dataSource loading:', loading);\n if (!loading && this._paginator) {\n this._paginator.pageIndex = this.pageIndex;\n this._paginator.pageSize = this.pageSize;\n this.checkAllRowsSelected();\n }\n });\n\n this.dataLengthSubscription = this.dataSource.totalDataLength$.subscribe((total: any) => {\n console.log('[table-list-view-wrapper]: dataSource total:', total);\n if (total !== null) {\n this.initialLoading = false;\n // console.log('[table-list-view-wrapper]: dataSource total total:', total);\n }\n });\n }\n }\n\n\n if (changes['filterFormGroup']) {\n if (this.filterFormGroupSubscription) {\n this.filterFormGroupSubscription.unsubscribe();\n }\n\n this.filterFormGroupSubscription = this.filterFormGroup.valueChanges\n .pipe(takeUntil(this._onDestroy), distinctUntilChanged()).subscribe(val => {\n this.filterHasNonEmptyValue = Object.values(val).some(value => value !== null && value !== undefined && value !== '');\n })\n }\n\n\n if (changes['selectedRows']) {\n this.selectedRows = changes['selectedRows'].currentValue;\n if (this.selectedRows && this.selectedRows.length) {\n // TODO:: Leave for now..... (Not able to decide whether in future we need to pass whole row or ids only)\n }\n }\n\n if (changes['defaultSortObj']?.currentValue) {\n this.defaultSortObj = changes['defaultSortObj'].currentValue;\n\n this.handleSortingChanges({\n direction: this.defaultSortObj.sortOrder,\n active: this.defaultSortObj.sortBy\n });\n }\n }\n\n\n ngOnDestroy(): void {\n this._sortSubscription?.unsubscribe();\n this._paginatorSubscription?.unsubscribe();\n this.loadingSubscription?.unsubscribe();\n this.dataLengthSubscription?.unsubscribe();\n this.filterFormGroupSubscription?.unsubscribe();\n }\n\n setDefaultColumns() {\n if (this.defaultDisplayedColumns && this.defaultDisplayedColumns.length) {\n this.defaultColumns = this.defaultDisplayedColumns;\n } else {\n this.defaultColumns = this.columnsCodeMapping.map(c => c.name);\n }\n }\n\n\n handleDisplayedColumns() {\n if (this.defaultDisplayedColumns && this.defaultDisplayedColumns.length) {\n\n const columnsSet = new Set<string>(this.columnsCodeMapping.map(ccm => ccm.name));\n this.displayedColumns = this.defaultDisplayedColumns.filter(c => columnsSet.has(c));\n\n } else {\n this.displayedColumns = this.columnsCodeMapping.map(c => c.name);\n }\n\n if (this.enableRowsSelection) {\n this.displayedColumns = ['Select', ...this.displayedColumns];\n }\n\n if (this.enableDragNDrop) {\n this.displayedColumns = ['drag', ...this.displayedColumns];\n }\n this.displayedColumnsChange.emit(this.displayedColumns);\n }\n\n\n handleSortingChanges(ch: any) {\n this.sortObj = { sortOrder: ch.direction, sortBy: this.columnsCodeMapping.find(c => c.name === ch.active)?.serverKeyCode };\n this.sortFromQueryParams.sortBy = this.sortObj.sortBy;\n this.sortFromQueryParams.sortOrder = this.sortObj.sortOrder;\n this.resetFlag = true;\n this.getList();\n }\n\n\n private getHomeUrl() {\n let pathname = window.location.pathname;\n // console.log(\"=== app-table-list-view-wrapper :: pathname ===\", pathname);\n this.homeUrl = `/${pathname.split('/')[1]}`;\n }\n\n\n getNestedValue(obj: any, path: string): any {\n if (!path) return null;\n // If there is no '.', just return the direct property\n if (!path.includes('.')) {\n return obj ? obj[path] : null;\n }\n // Otherwise, traverse the nested properties\n return path.split('.').reduce((acc, part) => acc && acc[part], obj);\n }\n\n\n\n private groupByFormControlAttributes(data: SelectedFilterDisplayValueType[]): SelectedFiltersGroupedValuesType[] {\n const groups: Record<string, SelectedFiltersGroupedValuesType> = {};\n\n data.forEach(item => {\n\n if (item.formControlType == 'input') {\n // Do Nothing...\n }\n if (item.formControlType == 'checkbox') {\n // Do Nothing...\n }\n if (item.formControlType == 'date') {\n item.valueKey = DateTime.fromJSDate(item.value).toFormat('dd-MM-yyyy');\n }\n if (item.formControlType == 'date-time') {\n item.valueKey = DateTime.fromJSDate(item.value).toFormat('dd-MM-yyyy HH:mm');\n }\n\n const key = `${item.formControlName}-${item.formControlType}`;\n if (!groups[key]) {\n groups[key] = {\n formControlName: item.formControlName,\n formControlType: item.formControlType,\n arrValues: []\n };\n }\n const isSingleValue = item.isSingleValue ?? ['input', 'radio', 'date', 'date-time', 'toggle'].includes(item.formControlType);\n // Check if only the last value should be kept due to isSingleValue or duplicated value/valueKey\n if (isSingleValue) {\n groups[key].arrValues = [item]; // Replace with the current item\n } else {\n // Check for duplicate value and valueKey in the current array\n const existingIndex = groups[key].arrValues.findIndex(x => x.value === item.value && x.valueKey === item.valueKey);\n if (existingIndex !== -1) {\n groups[key].arrValues[existingIndex] = item; // Replace the duplicate\n } else {\n groups[key].arrValues.push(item); // Add new item\n }\n }\n });\n\n return Object.values(groups);\n }\n\n updateSelectedFilterValues(values: SelectedFilterDisplayValueType | SelectedFilterDisplayValuesType) {\n let currentFormControlName: string;\n if (Array.isArray(values)) {\n this.selectedFilterGroupedValues = this.groupByFormControlAttributes(values);\n currentFormControlName = values[0]?.formControlName;\n } else {\n currentFormControlName = values?.formControlName;\n this.selectedFilterGroupedValues = this.groupByFormControlAttributes([values]);\n }\n\n this.selectedFilterValues = this.selectedFilterValues.filter(sfv => sfv.formControlName != currentFormControlName);\n\n this.selectedFilterGroupedValues.forEach(gv => {\n if (gv.formControlName = currentFormControlName) {\n gv.arrValues.forEach(v => {\n this.selectedFilterValues.push(v);\n })\n }\n })\n\n // this.filterFromQueryParams\n this.getFinalSelectedFilterValuesToDisplay();\n\n\n }\n\n getFinalSelectedFilterValuesToDisplay() {\n this.finalSelectedFilterValuesToDisplay = [];\n this.selectedFilterValues.forEach(sf => {\n if (Object.keys(this.filterFromQueryParams).includes(sf.formControlName)) {\n this.finalSelectedFilterValuesToDisplay.push(sf);\n }\n });\n }\n\n removeParticularFilter(f: SelectedFilterDisplayValueType) {\n\n let val = this.filterFormGroup.get(f.formControlName)?.value;\n \n if (Array.isArray(val)) {\n val = val.filter(v => v != f.value);\n this.filterFormGroup.get(f.formControlName)?.patchValue(val);\n } else {\n this.filterFormGroup.get(f.formControlName)?.reset();\n }\n this.selectedFilterValues = this.selectedFilterValues.filter(sfv => !(sfv.formControlName == f.formControlName && sfv.valueKey == f.valueKey));\n \n setTimeout(() => {\n this.filterRecords();\n }, 500);\n }\n\n\n filterRecords() {\n this.filterApplied = true;\n this.resetFlag = true;\n setTimeout(() => {\n this.getList(true);\n this.isShowFilter = false;\n }, 500);\n }\n\n public resetFilters() {\n this.filterApplied = false;\n setTimeout(() => {\n this.resetFlag = true;\n this.filterFromQueryParams = {};\n this.sortFromQueryParams = {};\n this.selectedFilterGroupedValues = [];\n this.selectedFilterValues = [];\n this.getList();\n }, 250);\n }\n\n public getList(forceFromObject = false) {\n const filterFormData = this.filterFormGroup?.value;\n\n let qs: any = new URLSearchParams();\n let filter: any = { ...filterFormData };\n\n if (filterFormData) {\n this.filterHasNonEmptyValue = Object.values(filterFormData).some(value => value !== null && value !== undefined && value !== '');\n } else {\n this.filterHasNonEmptyValue = false;\n }\n\n for (const key in filter) {\n if (typeof filter[key] === 'object' && (filter[key] instanceof Date || DateTime.isDateTime(filter[key]))) {\n if (filter[key] instanceof Date) {\n filter[key] = DateTime.fromJSDate(filter[key]).toMillis();\n }\n else if (DateTime.isDateTime(filter[key])) {\n filter[key] = filter[key].toMillis();\n }\n }\n }\n\n // Append All Filters from filter form\n Object.keys(filter).forEach(key => {\n if (filter[key] != null && filter[key] != '' && filter[key] != 'null' && filter[key] != 'undefined') {\n if (filter[key] === '*') {\n filter[key] = '';\n }\n qs.append(key, filter[key]);\n }\n });\n\n\n // Append sorting conditions...\n if (this.sortFromQueryParams) {\n Object.keys(this.sortFromQueryParams).forEach(key => {\n if (this.sortFromQueryParams[key] != null && this.sortFromQueryParams[key] != '' && this.sortFromQueryParams[key] != 'null' && this.sortFromQueryParams[key] != 'undefined') {\n qs.append(key, this.sortFromQueryParams[key]);\n }\n });\n }\n\n if (this.resetFlag) {\n this.pageIndex = 0;\n }\n\n if (this._paginator) {\n this._paginator.pageIndex = this.pageIndex;\n this._paginator.pageSize = this.pageSize;\n }\n\n qs.append(\"pageIndex\", this.pageIndex);\n qs.append(\"pageSize\", this.pageSize);\n\n if (this.search != '') {\n qs.append('search', this.search);\n }\n\n\n qs = qs.toString();\n let genUrl = this.router.url.split('?')[0] + '?' + qs;\n let currentUrl = window.location.pathname + window.location.search;\n\n if (currentUrl != genUrl) {\n if (this.keepFilterInUrl) {\n this.location.go(genUrl);\n this.filterFromQueryParams = this.getQueryParams(window.location.href);\n }\n } else {}\n\n this.dataSource.load(this.loadDataApiBaseUrl, this.pageIndex, this.pageSize, this.search, filter, this.sortObj);\n this.getFinalSelectedFilterValuesToDisplay();\n\n this.resetFlag = false;\n }\n\n\n onPaginationChanges() {\n if (this.pageIndex != this._paginator.pageIndex) {\n this.pageIndex = this._paginator.pageIndex;\n this.getList();\n this.pageIndexChange.emit(this.pageIndex);\n }\n\n if (this.pageSize != this._paginator.pageSize) {\n this.pageSize = this._paginator.pageSize;\n this.getList();\n this.pageSizeChange.emit(this.pageSize);\n storageHelper.setToLocalStorageWithExpiry('user_pagination_page_size', this.pageSize, 1000 * 60 * 60 * 24 * 15);\n }\n\n }\n\n onChangeDisplayColumns(columns: string[]) {\n this.defaultDisplayedColumns = columns;\n this.handleDisplayedColumns();\n }\n\n onChangeFromStartColumnNumber(columnNumber: number) {\n this.startStickyColumnCount = columnNumber;\n }\n\n onChangeFromEndColumnNumber(columnNumber: number) {\n this.endStickyColumnCount = columnNumber;\n }\n\n goToUrl(url: string) {\n if (url) {\n this.router.navigateByUrl(url);\n }\n }\n\n toggleSelection(status: MatCheckboxChange, row: any): void {\n if (this.onlySingleSelection && status.checked) {\n this.selection.clear();\n }\n this.selection.toggle(row);\n this.selectedRows = this.selection.selected;\n this.selectedRowsChange.emit(this.selectedRows);\n this.checkAllRowsSelected();\n }\n\n\n checkAllRowsSelected() {\n this.isAllRowsSelected = this.selection.selected.length === this.dataSource.apiSubject.value.length;\n }\n\n\n toggleAllRows(): void {\n if (this.isAllRowsSelected) {\n this.selection.clear();\n } else {\n this.dataSource.apiSubject.value.forEach(row => {\n this.selection.select(row);\n });\n }\n this.selectedRows = this.selection.selected;\n this.selectedRowsChange.emit(this.selectedRows);\n this.checkAllRowsSelected();\n }\n\n stopPropagation($event: any) {\n $event.stopPropagation();\n }\n\n isChecked(row: any): boolean {\n return this.selectedIds.has(row['id']);\n }\n\n getQueryParams(url: string): Record<string, string | string[]> {\n const urlObj = new URL(url);\n const params = new URLSearchParams(urlObj.search);\n const paramsObj: Record<string, string | string[]> = {};\n\n params.forEach((value, key) => {\n // Check if the parameter already exists (for handling multiple values)\n if (paramsObj.hasOwnProperty(key)) {\n // If it's not already an array, convert it to an array\n if (!Array.isArray(paramsObj[key])) {\n paramsObj[key] = [paramsObj[key] as string]; // Cast as string because we know it's not an array here\n }\n // Push the new value to the existing array\n (paramsObj[key] as string[]).push(value); // Cast as string[] to use array methods\n } else {\n // Assign the value to the key in the object\n paramsObj[key] = value;\n }\n });\n\n return paramsObj;\n }\n\n\n isStickyStart(columnName: string): boolean {\n const index = this.displayedColumns.indexOf(columnName);\n return index !== -1 && index < this.startStickyColumnCount;\n }\n\n isStickyEnd(columnName: string): boolean {\n const index = this.displayedColumns.indexOf(columnName);\n if (index === -1) return false;\n return index >= this.displayedColumns.length - this.endStickyColumnCount;\n }\n\n getColumnClasses(column: SmartTableWrapperColumnsConfig): { [key: string]: boolean } {\n // Check if alignment is explicitly specified\n if (column.align) {\n return {\n 'text-right': column.align === 'right',\n 'text-left': column.align === 'left',\n 'text-center': column.align === 'center'\n };\n } else {\n // Default alignment based on column type\n switch (column.type) {\n case 'money':\n case 'quantity':\n return { 'text-right': true };\n case 'number':\n return { 'text-center': true };\n default:\n return {};\n }\n }\n }\n\n\n getRowBackground(row: any): string | null {\n return this.rowsConfig.backgroundApplyFunction\n ? this.rowsConfig.backgroundApplyFunction(row)\n : null;\n }\n\n\n drop(event: CdkDragDrop<any[]>) {\n // Ignore if the item was dropped at the same index\n if (event.previousIndex === event.currentIndex) {\n return;\n }\n\n // Access current data from apiSubject\n const currentData = [...this.dataSource.apiSubject.value];\n\n if (!currentData || currentData.length === 0) {\n return;\n }\n\n // Rearrange items based on the drop event\n moveItemInArray(currentData, event.previousIndex, event.currentIndex);\n\n // Update the apiSubject with reordered data\n this.dataSource.apiSubject.next(currentData);\n\n // We need to emit this also\n this.listDataSequenceChange.emit(currentData);\n }\n\n handleButtonClick(config: any) {\n if (config?.btnClick) {\n config.btnClick();\n } else if (config?.btnUrl) {\n this.goToUrl(config.btnUrl);\n }\n }\n\n handleSecondButtonClick(config: any) {\n if (config?.secondBtnClick) {\n config.secondBtnClick();\n } else if (config?.secondBtnUrl) {\n this.goToUrl(config.secondBtnUrl);\n }\n }\n}\n","<section [class.tis-page]=\"!hideHeader\">\n <div class=\"tis-page-header\" *ngIf=\"!hideHeader\">\n <nav aria-label=\"tis-breadcrumb\">\n <ol class=\"tis-breadcrumb\">\n <li class=\"tis-breadcrumb-item\"><a href=\"javascript:;\" [routerLink]=\"homeUrl\">{{t['home']}}</a></li>\n @for(breadcrumb of breadcrumbs; track breadcrumb) {\n <li class=\"tis-breadcrumb-item\" *ngIf=\"breadcrumb?.url\">\n <a href=\"javascript:;\" (click)=\"goToUrl(breadcrumb.url)\">{{breadcrumb?.name}}</a>\n </li>\n }\n <li class=\"tis-breadcrumb-item active\">\n {{mainTitle}}\n </li>\n </ol>\n </nav>\n <ng-content select=\"[slot='top-buttons-section']\"></ng-content>\n </div>\n <h1 class=\"tis-page-title\" *ngIf=\"!hideHeader\">{{mainTitle}}</h1>\n <div class=\"tis-page-body\">\n <div class=\"tis-page-body-content\">\n\n @if(initialLoading){\n <div class=\"tis-d-flex tis-justify-content-center pb-2 pt-7\">\n <mat-progress-spinner color=\"primary\" mode=\"indeterminate\" [diameter]=\"60\"></mat-progress-spinner>\n </div>\n } @else {\n\n @if ((dataSource?.totalDataLength$ | async) || (dataSource?.loading$ | async) || search ||\n filterHasNonEmptyValue || showFilterButtonSection) {\n <div class=\"tis-table-container\">\n @if(!hideTableHeader){\n <div class=\"tis-table-container-header\">\n <ul class=\"tis-inline-group\">\n <li class=\"tis-inline-group-item\">\n <tis-columns-btn [columnCustomizationUrlConfig]=\"columnCustomizationUrlConfig\" [t]=\"t\"\n [componentName]=\"componentName\" [defaultColumns]=\"defaultColumns\" [columns]=\"columns\"\n (displayedColumnsChange)=\"onChangeDisplayColumns($event)\"\n (fromStartColumnNumberChange)=\"onChangeFromStartColumnNumber($event)\"\n (fromEndColumnNumberChange)=\"onChangeFromEndColumnNumber($event)\"></tis-columns-btn>\n </li>\n <ng-content select=\"[slot='filter-button-section']\"></ng-content>\n </ul>\n <div class=\"flex items-center\">\n <ul class=\"tis-inline-group\">\n <ng-content select=\"[slot='filter-right-button-section']\"></ng-content>\n </ul>\n @if(!isMobile && searchPlaceholder && searchPlaceholder != ''){\n <mat-form-field\n class=\"custom-mat-form-field-mb-0 search-mat-form-field ml-3 tis-table-search-field\"\n appearance=\"outline\">\n <span class=\"material-icons\" matPrefix>search</span>\n <input matInput [formControl]=\"searchCtrl\" [placeholder]=\"searchPlaceholder\">\n <span class=\"material-icons mr-2 tis-curser-pointer\" matSuffix\n (click)=\"searchCtrl.setValue('')\"\n *ngIf=\"searchCtrl.value && searchCtrl.value != ''\">close</span>\n </mat-form-field>\n }\n </div>\n </div>\n }\n\n @if (filterFormGroup) {\n\n <ng-content select=\"[slot='filter-form-section']\"></ng-content>\n\n @if(finalSelectedFilterValuesToDisplay.length && filterApplied) {\n <div class=\"flex gap-3 mb-3 filter-applied-section md-hide-scrollbar\">\n @for(v of finalSelectedFilterValuesToDisplay; track v) {\n @if (v) {\n <span class=\"tis-filter-badge\" style=\"white-space: nowrap;\">\n @if(v.labelKey && v.labelKey != '' && (v.valueKey || v.value)) {\n <span class=\"font-semibold\"> {{v.labelKey }} </span>\n }\n @if(v.valueKey) {\n {{v.valueKey }}\n } @else {\n {{v.value }}\n }\n <span class=\"material-icons tis-curser-pointer\"\n (click)=\"removeParticularFilter(v)\">cancel</span>\n </span>\n }\n }\n </div>\n }\n }\n\n @if(isMobile && searchPlaceholder && searchPlaceholder != ''){\n <mat-form-field\n class=\"custom-mat-form-field-mb-0 search-mat-form-field mb-3 tis-table-search-field\"\n appearance=\"outline\">\n <span class=\"material-icons\" matPrefix>search</span>\n <input matInput [formControl]=\"searchCtrl\" [placeholder]=\"searchPlaceholder\">\n <span class=\"material-icons mr-2 tis-curser-pointer\" matSuffix\n (click)=\"searchCtrl.setValue('')\"\n *ngIf=\"searchCtrl.value && searchCtrl.value != ''\">close</span>\n </mat-form-field>\n }\n\n \n @if(loaderPosition == 'top'){\n @if(dataSource?.loading$ | async){\n <div class=\"tis-d-flex tis-justify-content-center py-2\">\n <mat-progress-spinner color=\"primary\" mode=\"indeterminate\" [diameter]=\"loadingSpinnerDiameter\"></mat-progress-spinner>\n </div>\n }\n }\n <div class=\"tis-table-container-body\">\n <div class=\"tis-table-wrapper\" [appScrolling]=\"true\">\n\n <!--Table Here-->\n <table mat-table matSort [dataSource]=\"dataSource\" class=\"tis-table\" cdkDropList (cdkDropListDropped)=\"drop($event)\" [cdkDropListLockAxis]=\"'y'\">\n\n @if (enableRowsSelection) {\n <ng-container matColumnDef=\"Select\">\n <th mat-header-cell *matHeaderCellDef>\n @if (enableAllRowsSelection) {\n <mat-checkbox color=\"primary\" (change)=\"$event ? toggleAllRows() : null\"\n [checked]=\"isAllRowsSelected\"\n [indeterminate]=\"selection.hasValue() && !isAllRowsSelected\">\n </mat-checkbox>\n }\n </th>\n <td mat-cell *matCellDef=\"let row\">\n <mat-checkbox color=\"primary\" (click)=\"stopPropagation($event)\" (change)=\"$event ? toggleSelection($event, row) : null\" [checked]=\"isChecked(row)\"></mat-checkbox>\n </td>\n </ng-container>\n }\n\n @for(column of autoRenderColumns; track column.serverKeyCode; let i = $index; let l = $last){\n <!-- [sticky]=\"i < startStickyColumnCount\" [stickyEnd]=\"i > (autoRenderColumns?.length - endStickyColumnCount)\" -->\n <ng-container [matColumnDef]=\"column.name\" [sticky]=\"isStickyStart(column.name)\" [stickyEnd]=\"isStickyEnd(column.name)\">\n @if(column.sort) {\n <th mat-header-cell mat-sort-header *matHeaderCellDef [ngClass]=\"getColumnClasses(column)\">\n {{ t[column.name] }}\n </th>\n } @else {\n <th mat-header-cell *matHeaderCellDef [ngClass]=\"getColumnClasses(column)\">\n {{ t[column.name] }}\n </th>\n }\n \n\n @if(column.type == 'date'){\n <td mat-cell *matCellDef=\"let element\" class=\"1al-{{column.align}} 1ty-{{column.type}}\" >\n <p [class.tis-a]=\"column.clickFn\" (click)=\"column?.clickFn?.(element, $event)\">\n {{ (column.valueKey && element[column.valueKey]) ? (getNestedValue(element, column.valueKey) | tisDate) : ''}}\n </p>\n </td>\n } @else if(column.type == 'date-time'){\n <td mat-cell *matCellDef=\"let element\" class=\"2al-{{column.align}} 2ty-{{column.type}}\">\n <p [class.tis-a]=\"column.clickFn\" (click)=\"column?.clickFn?.(element, $event)\">\n {{ (column.valueKey && element[column.valueKey]) ? (getNestedValue(element, column.valueKey) | tisDateTime) : ''}}\n </p>\n </td>\n } @else if(column.type == 'date-time-with-seconds'){\n <td mat-cell *matCellDef=\"let element\" class=\"2al-{{column.align}} 2ty-{{column.type}}\">\n <p [class.tis-a]=\"column.clickFn\" (click)=\"column?.clickFn?.(element, $event)\">\n {{ (column.valueKey && element[column.valueKey]) ? (getNestedValue(element, column.valueKey) | tisDateTimeWithSeconds) : ''}}\n </p>\n </td>\n } @else {\n <td mat-cell *matCellDef=\"let element\" class=\"3al-{{column.align}} 3ty-{{column.type}}\" [ngClass]=\"getColumnClasses(column)\">\n <p [class.tis-a]=\"column.clickFn\" (click)=\"column?.clickFn?.(element, $event)\">\n @if (column.type == 'quantity') {\n {{ (column.valueKey && element[column.valueKey]) ? (getNestedValue(element, column.valueKey) | number : '1.4-4') : '-' }}\n } @else if (column.type == 'money') {\n {{ column.valueKey && (getNestedValue(element, column.valueKey)).toFixed(2) }}\n } @else {\n {{ column.valueKey && getNestedValue(element, column.valueKey) }}\n }\n </p>\n </td>\n }\n </ng-container>\n\n }\n\n\n @for(column of templateRenderColumns; track column.serverKeyCode; let i = $index; let l = $last){\n <!-- [sticky]=\"i < startStickyColumnCount\" [stickyEnd]=\"l\" -->\n <ng-container [matColumnDef]=\"column.name\" [sticky]=\"isStickyStart(column.name)\" [stickyEnd]=\"isStickyEnd(column.name)\">\n @if(column.sort) {\n <th mat-header-cell *matHeaderCellDef mat-sort-header [ngClass]=\"getColumnClasses(column)\">\n {{ t[column.name] }}\n </th>\n } @else {\n <th mat-header-cell *matHeaderCellDef [ngClass]=\"getColumnClasses(column)\">\n {{ t[column.name] }}\n </th>\n }\n <td mat-cell *matCellDef=\"let element\" class=\"4al-{{column.align}} 4ty-{{column.type}}\" [ngClass]=\"getColumnClasses(column)\">\n <ng-container *ngIf=\"column.template as template\">\n <ng-container *ngTemplateOutlet=\"template; context: { colDef: column, colData: element }\"></ng-container>\n </ng-container>\n </td>\n </ng-container>\n }\n\n <!--Drag Column Def Start-->\n <ng-container [matColumnDef]=\"'drag'\" >\n <th mat-header-cell *matHeaderCellDef>\n --\n </th>\n <td mat-cell *matCellDef=\"let element\" class=\"5al-drag 5ty-drag\">\n <mat-icon cdkDragHandle class=\"tis-curser-pointer\" style=\"color: rgba(0, 0, 0, 0.54); font-size: 19px; width: 19px; height: 19px;\">drag_indicator</mat-icon>\n </td>\n </ng-container>\n <!--Drag Column Def End-->\n\n\n <tr class=\"mat-row\" *matNoDataRow>\n <td class=\"mat-cell\" [attr.colspan]=\"displayedColumns.length\">\n <div class=\"tis-data-not-found\">\n <img src=\"/assets/icons/not-found.svg\" alt=\"not-found\" class=\"w-53\">\n <h5 class=\"tis-h5\">{{dataNotFoundConfig.title}}</h5>\n </div>\n </td>\n </tr>\n\n <!-- Apply Drag and Drop to tbody -->\n @if(enableDragNDrop) {\n <tr mat-row *matRowDef=\"let row; columns: displayedColumns\" [ngStyle]=\"{'background-color': getRowBackground(row) || 'inherit'}\" cdkDrag></tr>\n }\n\n @if(!enableDragNDrop) {\n <tr mat-row *matRowDef=\"let row; columns: displayedColumns\" [ngStyle]=\"{'background-color': getRowBackground(row) || 'inherit'}\"></tr>\n } \n <tr mat-header-row *matHeaderRowDef=\"displayedColumns\"></tr>\n </table>\n <!--Table End-->\n\n </div>\n @if(loaderPosition == 'bottom'){\n @if(dataSource?.loading$ | async){\n <div class=\"tis-d-flex tis-justify-content-center py-2\">\n <mat-progress-spinner color=\"primary\" mode=\"indeterminate\" [diameter]=\"loadingSpinnerDiameter\"></mat-progress-spinner>\n </div>\n }\n }\n @if (!hidePaginator) {\n <div class=\"tis-table-paginator\">\n <mat-paginator [length]=\"dataSource?.totalDataLength?.value\" [pageSize]=\"pageSize\"\n [pageSizeOptions]=\"pageSizeOptions\" showFirstLastButtons></mat-paginator>\n </div>\n }\n </div>\n </div>\n } @else {\n\n @if(dataNotFoundConfig) {\n <div class=\"tis-data-not-found\">\n <img src=\"/assets/icons/not-found.svg\" alt=\"not-found\" class=\"w-53\">\n <h5 class=\"tis-h5\">{{dataNotFoundConfig.title}}</h5>\n <p class=\"tis-p\">{{dataNotFoundConfig.desc}}</p>\n @if((dataNotFoundConfig.btnUrl || dataNotFoundConfig?.btnClick) && dataNotFoundConfig.btnText) {\n <button mat-flat-button color=\"primary\" class=\"tis-text-upper\"\n (click)=\"handleButtonClick(dataNotFoundConfig)\">\n <mat-icon>add</mat-icon>\n {{dataNotFoundConfig.btnText}}\n </button>\n }\n @if((dataNotFoundConfig.secondBtnUrl || dataNotFoundConfig?.secondBtnClick) && dataNotFoundConfig.secondBtnText) {\n <button mat-stroked-button color=\"primary\" class=\"tis-text-upper\"\n (click)=\"handleSecondButtonClick(dataNotFoundConfig)\">\n <mat-icon>add</mat-icon>\n {{dataNotFoundConfig.secondBtnText}}\n </button>\n }\n </div>\n }\n\n }\n\n }\n\n </div>\n </div>\n</section>","import { PipeTransform, Pipe } from '@angular/core';\n\n@Pipe({\n name: 'qty',\n standalone: false\n})\nexport class Quantity implements PipeTransform {\n decimalPoints = 4;\n\n transform(value: number | string): any {\n if(Number(value) > 0){\n let roundValue: any = this.roundNumber(Number(value), this.decimalPoints);\n let roundValueArr = String(roundValue)?.split('.');\n if(roundValueArr?.length > 1){\n let currentDesimal = roundValueArr[1];\n if(currentDesimal?.length < this.decimalPoints){\n roundValue = `${roundValue}`;\n for (let index = 0; index < (this.decimalPoints - currentDesimal?.length); index++) {\n roundValue = `${roundValue}0`;\n }\n }\n }\n else{\n roundValue = `${roundValueArr[0]}.0000`;\n }\n return roundValue;\n }\n else{\n return 0;\n }\n }\n\n roundNumber(number: number, decimals = 0) {\n const multiplier = Math.pow(10, decimals);\n return Math.round(number * multiplier) / multiplier;\n }\n\n\n}","import { PipeTransform, Pipe } from '@angular/core';\n\n@Pipe({\n name: 'money',\n standalone: false\n})\nexport class Money implements PipeTransform {\n decimalPoints = 4;\n\n transform(value: number | string): any {\n if(Number(value) > 0){\n let roundValue: any = this.roundNumber(Number(value), this.decimalPoints);\n let roundValueArr = String(roundValue)?.split('.');\n if(roundValueArr?.length > 1){\n let currentDesimal = roundValueArr[1];\n if(currentDesimal?.length < this.decimalPoints){\n roundValue = `${roundValue}`;\n for (let index = 0; index < (this.decimalPoints - currentDesimal?.length); index++) {\n roundValue = `${roundValue}0`;\n }\n }\n }\n else{\n roundValue = `${roundValueArr[0]}.0000`;\n }\n return roundValue;\n }\n else{\n return 0;\n }\n }\n\n roundNumber(number: number, decimals = 0) {\n const multiplier = Math.pow(10, decimals);\n return Math.round(number * multiplier) / multiplier;\n }\n\n\n}","import { NgModule } from '@angular/core';\nimport { TisSmartTableViewerComponent } from './components/tis-smart-table-viewer/tis-smart-table-viewer.component';\nimport { MatTooltipModule } from '@angular/material/tooltip';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatInputModule } from '@angular/material/input';\nimport { MatProgressSpinnerModule } from '@angular/material/progress-spinner';\nimport { MatSelectModule } from '@angular/material/select';\nimport { MatSnackBarModule } from '@angular/material/snack-bar';\nimport { CommonModule } from '@angular/common';\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\nimport { RouterLink, RouterOutlet } from '@angular/router';\nimport { LayoutModule } from '@angular/cdk/layout';\nimport { MatPaginatorModule } from '@angular/material/paginator';\nimport { TisColumnsBtnComponent } from './components/tis-columns-btn/tis-columns-btn.component';\nimport { TisSmartTableConfirmationDialogComponent } from './components/tis-smart-table-confirmation-dialog/tis-smart-table-confirmation-dialog.component';\nimport { TisSmartTableErrorDialogComponent } from './components/tis-smart-table-error-dialog/tis-smart-table-error-dialog.component';\nimport { CreateColumnsTemplateComponent } from './components/create-columns-template/create-columns-template.component';\nimport { MatDialogModule } from '@angular/material/dialog';\nimport { DragDropModule } from '@angular/cdk/drag-drop';\nimport { MatTableModule } from '@angular/material/table';\nimport { MatCheckboxModule } from '@angular/material/checkbox';\nimport { ScrollingDirective } from './directives/scrolling/scrolling.directive';\nimport { TisDatePipe } from './pipes/tis-date.pipe';\nimport { TisDateTimePipe } from './pipes/tis-date-time.pipe';\nimport { TisDateTimeWithSecondsPipe } from './pipes/tis-date-time-with-seconds.pipe';\nimport { Quantity } from './pipes/quantity.pipe';\nimport { Money } from './pipes/money.pipe';\nimport { MatMenuModule } from '@angular/material/menu';\nimport { MatDividerModule } from '@angular/material/divider';\n\n\nconst directives = [\n ScrollingDirective\n];\n\nconst pipes = [\n TisDatePipe,\n TisDateTimePipe,\n TisDateTimeWithSecondsPipe,\n Quantity,\n Money,\n];\n\nconst uiImports = [\n MatTooltipModule,\n MatIconModule,\n MatFormFieldModule,\n MatSelectModule,\n MatInputModule,\n MatSnackBarModule,\n MatProgressSpinnerModule,\n MatButtonModule,\n MatPaginatorModule,\n LayoutModule, // For Breakpoint Observer,\n MatDialogModule,\n MatTableModule,\n MatCheckboxModule,\n MatMenuModule,\n MatDividerModule\n];\n\n\n@NgModule({\n declarations: [\n ...directives,\n ...pipes,\n TisSmartTableViewerComponent,\n TisColumnsBtnComponent,\n CreateColumnsTemplateComponent,\n TisSmartTableViewerComponent,\n TisSmartTableErrorDialogComponent,\n TisSmartTableConfirmationDialogComponent\n ],\n imports: [\n CommonModule,\n FormsModule,\n ReactiveFormsModule,\n RouterLink,\n RouterOutlet,\n ...uiImports,\n DragDropModule\n ],\n exports: [\n TisSmartTableViewerComponent\n ]\n})\nexport class TisSmartTableViewerModule { }\n","/*\n * Public API Surface of tis-smart-table-viewer\n */\n\nexport * from './lib/tis-smart-table-viewer.service';\nexport * from './lib/tis-smart-table-viewer.module';\nexport * from './lib/components/tis-smart-table-viewer/tis-smart-table-viewer.component';\n\nexport * from './lib/interfaces';","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i2","i4","i1","i3","i5","i7","i11","i14.ScrollingDirective","i1.TisHelperService","i2.UserCustomizationService","i6","i8","storageHelper.getFromLocalStorageWithExpiry","storageHelper.setToLocalStorageWithExpiry","i2.ApiService","i9","i10","i12","i13","i14","i15","i16.ScrollingDirective","i17.TisColumnsBtnComponent","i18.TisDatePipe","i19.TisDateTimePipe","i20.TisDateTimeWithSecondsPipe"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;MAKa,0BAA0B,CAAA;AAErC,IAAA,WAAA,GAAA;uGAFW,0BAA0B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA;AAA1B,IAAA,OAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,0BAA0B,cAFzB,MAAM,EAAA,CAAA;;2FAEP,0BAA0B,EAAA,UAAA,EAAA,CAAA;kBAHtC,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,UAAU,EAAE;AACb,iBAAA;;;MCCY,aAAa,CAAA;AAYF,IAAA,UAAA;AAVZ,IAAA,OAAO;AAEf,IAAA,UAAU,GAAG,IAAI,eAAe,CAAQ,EAAE,CAAC;AAEnC,IAAA,cAAc,GAAG,IAAI,eAAe,CAAU,KAAK,CAAC;AACrD,IAAA,QAAQ,GAAG,IAAI,CAAC,cAAc,CAAC,YAAY,EAAE;AAE7C,IAAA,eAAe,GAAG,IAAI,eAAe,CAAgB,IAAI,CAAC;AAC1D,IAAA,gBAAgB,GAAG,IAAI,CAAC,eAAe,CAAC,YAAY,EAAE;AAE7D,IAAA,WAAA,CAAoB,UAAsB,EAAA;QAAtB,IAAU,CAAA,UAAA,GAAV,UAAU;AAC1B,QAAA,OAAO,CAAC,GAAG,CAAC,4BAA4B,CAAC;;AAG7C,IAAA,OAAO,CAAC,gBAAkC,EAAA;AACtC,QAAA,OAAO,IAAI,CAAC,UAAU,CAAC,YAAY,EAAE;;AAGzC,IAAA,UAAU,CAAC,gBAAkC,EAAA;AACzC,QAAA,IAAI,CAAC,UAAU,CAAC,QAAQ,EAAE;AAC1B,QAAA,IAAI,CAAC,cAAc,CAAC,QAAQ,EAAE;;IAGlC,IAAI,CAAC,GAAW,EAAE,SAAiB,EAAE,QAAgB,EAAE,MAAc,EAAE,MAAe,EAAE,UAAmB,EAAA;AAEvG,QAAA,IAAG,IAAI,CAAC,OAAO,EAAE;AACb,YAAA,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE;;AAG9B,QAAA,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC;AAC9B,QAAA,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,GAAG,GAAG,SAAS,GAAG,CAAC,GAAG,QAAQ,EAAE,MAAM,EAAE,EAAC,MAAM,EAAC,EAAE,EAAC,UAAU,EAAC,CAAC,CAAC,IAAI,CACvG,UAAU,CAAC,MAAM,EAAE,CAAC,EAAE,CAAC,CAAC,EACxB,QAAQ,CAAC,MAAM,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAClD,CAAC,SAAS,CAAC,CAAC,IAAG;YACZ,OAAO,CAAC,GAAG,CAAC,CAAA,iBAAA,EAAoB,GAAG,CAAU,QAAA,CAAA,EAAE,CAAC,CAAC;YACjD,IAAI,CAAC,EAAE,IAAI,EAAE,MAAM,GAAG,CAAC,EAAE;gBACrB,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC,EAAE,KAAK,CAAC;;iBAElC;AACD,gBAAA,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC,CAAC;;YAEhC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC;AACjC,SAAC,CAAC;;AAET;;MC5CY,UAAU,CAAA;AAEC,IAAA,IAAA;AAApB,IAAA,WAAA,CAAoB,IAAgB,EAAA;QAAhB,IAAI,CAAA,IAAA,GAAJ,IAAI;;AAGxB,IAAA,OAAO,CAAC,MAAc,EAAE,WAAsB,GAAA,CAAC,EAAE,KAAK,GAAG,EAAE,EAAE,MAAM,GAAG,EAAE,EAAE,OAAgB,EAAE,UAAmB,EAAA;QAC3G,MAAM,IAAI,GAAG,EAAE,GAAG,OAAO,EAAE,GAAG,UAAU,EAAE;AAC1C,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAG,EAAA,MAAM,CAAiB,cAAA,EAAA,WAAW,aAAa,KAAK,CAAA,QAAA,EAAW,MAAM,CAAA,CAAE,CAAC;;uGAP3F,UAAU,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,UAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA;AAAV,IAAA,OAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAU,cAFP,MAAM,EAAA,CAAA;;2FAET,UAAU,EAAA,UAAA,EAAA,CAAA;kBAHtB,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACR,oBAAA,UAAU,EAAE;AACf,iBAAA;;;ACLM,MAAM,2BAA2B,GAAG,CAAC,GAAW,EAAE,KAAU,EAAE,GAAG,GAAG,CAAC,GAAG,IAAI,GAAG,EAAE,GAAG,EAAE,KAAI;AAC7F,IAAA,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE;;;AAGtB,IAAA,MAAM,IAAI,GAAG;QACT,KAAK;AACL,QAAA,MAAM,EAAE,GAAG,CAAC,OAAO,EAAE,GAAG;KAC3B;AACD,IAAA,YAAY,CAAC,OAAO,CAAC,GAAG,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;AACnD,CAAC;AAGM,MAAM,6BAA6B,GAAG,CAAC,GAAW,KAAI;IACzD,MAAM,OAAO,GAAG,YAAY,CAAC,OAAO,CAAC,GAAG,CAAC;;IAEzC,IAAI,CAAC,OAAO,EAAE;AACV,QAAA,OAAO,IAAI;;IAEf,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC;AAChC,IAAA,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE;AAEtB,IAAA,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE;AACd,QAAA,YAAY,CAAC,UAAU,CAAC,GAAG,CAAC;AAC5B,QAAA,OAAO,IAAI;;;IAIf,IAAI,GAAG,CAAC,OAAO,EAAE,GAAG,IAAI,CAAC,MAAM,EAAE;;;AAG7B,QAAA,YAAY,CAAC,UAAU,CAAC,GAAG,CAAC;AAC5B,QAAA,OAAO,IAAI;;IAEf,OAAO,IAAI,CAAC,KAAK;AACrB,CAAC;AAEM,MAAM,kBAAkB,GAAG,CAAC,IAAc,KAAI;AACjD,IAAA,OAAO,CAAC,GAAG,CAAC,iCAAiC,EAAE,IAAI,CAAC;AACpD,IAAA,IAAI,CAAC,OAAO,CAAC,GAAG,IAAG;AACf,QAAA,YAAY,CAAC,UAAU,CAAC,GAAG,CAAC;AAChC,KAAC,CAAC;AACN,CAAC;;MCpCY,kBAAkB,CAAA;AACT,IAAA,EAAA;AAApB,IAAA,WAAA,CAAoB,EAAc,EAAA;QAAd,IAAE,CAAA,EAAA,GAAF,EAAE;;IAEb,YAAY,GAAY,KAAK;;IAIV,YAAY,GAAA;;AAEtC,QAAA,IAAI,CAAC,EAAE,CAAC,aAAa,CAAC,SAAS,CAAC,MAAM,CAAC,sBAAsB,EAAE,uBAAuB,CAAC;;AAGlD,IAAA,WAAW,CAAC,KAAiB,EAAA;;;;;;;;;;;;;;;;QAiBlE,MAAM,IAAI,GAAG,IAAI,CAAC,EAAE,CAAC,aAAa,CAAC,qBAAqB,EAAE;AAE1D,QAAA,IAAI,SAAS,GAAG,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,EAAE,CAAC,aAAa,CAAC,WAAW,GAAG,EAAE,GAAG,KAAK,CAAC,OAAO;;AAElF,QAAA,SAAS,GAAG,EAAE,IAAI,SAAS,GAAG,CAAC,EAAE,GAAG,IAAI,CAAC,EAAE,CAAC,aAAa,CAAC,SAAS,CAAC,GAAG,CAAC,sBAAsB,CAAC,GAAE,IAAI,CAAC,EAAE,CAAC,aAAa,CAAC,SAAS,CAAC,MAAM,CAAC,sBAAsB,CAAC;AAE/J,QAAA,IAAI,SAAS,GAAG,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,EAAE,CAAC,aAAa,CAAC,YAAY,GAAG,EAAE,GAAG,KAAK,CAAC,OAAO;;AAElF,QAAA,SAAS,GAAG,EAAE,IAAI,SAAS,GAAG,CAAC,EAAE,GAAG,IAAI,CAAC,EAAE,CAAC,aAAa,CAAC,SAAS,CAAC,GAAG,CAAC,uBAAuB,CAAC,GAAE,IAAI,CAAC,EAAE,CAAC,aAAa,CAAC,SAAS,CAAC,MAAM,CAAC,uBAAuB,CAAC;;;uGArCxJ,kBAAkB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,UAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;2FAAlB,kBAAkB,EAAA,YAAA,EAAA,KAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,EAAA,YAAA,EAAA,cAAA,EAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,YAAA,EAAA,gBAAA,EAAA,WAAA,EAAA,qBAAA,EAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA;;2FAAlB,kBAAkB,EAAA,UAAA,EAAA,CAAA;kBAJ9B,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACP,oBAAA,QAAQ,EAAE,gBAAgB;AAC1B,oBAAA,UAAU,EAAE;AACf,iBAAA;+EAIU,YAAY,EAAA,CAAA;sBAApB;gBAI2B,YAAY,EAAA,CAAA;sBAAvC,YAAY;uBAAC,YAAY;gBAKa,WAAW,EAAA,CAAA;sBAAjD,YAAY;uBAAC,WAAW,EAAE,CAAC,QAAQ,CAAC;;;MCX1B,wBAAwB,CAAA;AAEb,IAAA,IAAA;AAApB,IAAA,WAAA,CAAoB,IAAgB,EAAA;QAAhB,IAAI,CAAA,IAAA,GAAJ,IAAI;;IAExB,mBAAmB,CAAC,GAAW,EAAE,aAAqB,EAAA;AAClD,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAG,EAAA,GAAG,CAAkB,eAAA,EAAA,aAAa,CAAE,CAAA,CAAC;;IAGjE,kBAAkB,CAAC,GAAW,EAAE,IAAS,EAAA;QACrC,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC;;IAGpC,qBAAqB,CAAC,GAAW,EAAE,IAAS,EAAA;QACxC,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC;;IAGpC,qBAAqB,CAAC,GAAW,EAAE,IAAS,EAAA;QACxC,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC;;IAGnC,0BAA0B,CAAC,GAAW,EAAE,aAAqB,EAAA;AACzD,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAG,EAAA,GAAG,CAAkB,eAAA,EAAA,aAAa,CAAE,CAAA,CAAC;;IAGjE,6BAA6B,CAAC,GAAW,EAAE,IAAS,EAAA;QAChD,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC;;uGAzB3B,wBAAwB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,UAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA;AAAxB,IAAA,OAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,wBAAwB,cAFrB,MAAM,EAAA,CAAA;;2FAET,wBAAwB,EAAA,UAAA,EAAA,CAAA;kBAHpC,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACR,oBAAA,UAAU,EAAE;AACf,iBAAA;;;MCGY,iCAAiC,CAAA;AAEnC,IAAA,SAAA;AACyB,IAAA,IAAA;IAFlC,WACS,CAAA,SAA0D,EACjC,IAAS,EAAA;QADlC,IAAS,CAAA,SAAA,GAAT,SAAS;QACgB,IAAI,CAAA,IAAA,GAAJ,IAAI;QAEpC,IAAI,CAAC,SAAS,CAAC,aAAa,CAAC,CAAC,8BAA8B,CAAC,CAAC;;IAGhE,OAAO,GAAA;AACL,QAAA,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE;;AATb,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,kBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,iCAAiC,gDAGlC,eAAe,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAHd,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,iCAAiC,yFCT9C,waASM,EAAA,MAAA,EAAA,CAAA,EAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,SAAA,EAAA,SAAA,EAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,IAAA,CAAA,SAAA,EAAA,QAAA,EAAA,6GAAA,EAAA,QAAA,EAAA,CAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,IAAA,CAAA,cAAA,EAAA,QAAA,EAAA,sCAAA,EAAA,MAAA,EAAA,CAAA,IAAA,CAAA,EAAA,QAAA,EAAA,CAAA,gBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,gBAAA,EAAA,QAAA,EAAA,8DAAA,EAAA,MAAA,EAAA,CAAA,OAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,gBAAA,EAAA,QAAA,EAAA,8DAAA,EAAA,CAAA,EAAA,CAAA;;2FDAO,iCAAiC,EAAA,UAAA,EAAA,CAAA;kBAN7C,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,8BAA8B,cAC5B,KAAK,EAAA,QAAA,EAAA,waAAA,EAAA;;0BAOd,MAAM;2BAAC,eAAe;;;MEDd,gBAAgB,CAAA;AAGjB,IAAA,QAAA;AACA,IAAA,MAAA;AACA,IAAA,IAAA;AAHV,IAAA,WAAA,CACU,QAAqB,EACrB,MAAiB,EACjB,IAAgB,EAAA;QAFhB,IAAQ,CAAA,QAAA,GAAR,QAAQ;QACR,IAAM,CAAA,MAAA,GAAN,MAAM;QACN,IAAI,CAAA,IAAA,GAAJ,IAAI;;AAGd,IAAA,gBAAgB,CAAC,KAAwB,EAAE,QAAQ,GAAG,IAAI,EAAA;AACxD,QAAA,OAAO,CAAC,GAAG,CAAC,aAAa,EAAE,KAAK,CAAC;QAEjC,IAAI,YAAY,GAAG,8BAA8B;QACjD,IAAI,SAAS,GAAG,eAAe;QAC/B,MAAM,SAAS,GAAG,KAAK;AAEvB,QAAA,IAAI,SAAS,CAAC,MAAM,IAAI,GAAG,EAAE;AAC3B,YAAA,MAAM,eAAe,GAAG,SAAS,CAAC,KAAK;AACvC,YAAA,IAAI,KAAK,CAAC,OAAO,CAAC,eAAe,CAAC,IAAI,eAAe,CAAC,MAAM,GAAG,CAAC,EAAE;AAChE,gBAAA,YAAY,GAAG,eAAe,CAAC,CAAC,CAAC,CAAC,OAAO;AACzC,gBAAA,SAAS,GAAG,eAAe,CAAC,CAAC,CAAC,CAAC,IAAI;;;AAEhC,aAAA,IAAI,SAAS,CAAC,MAAM,GAAG,GAAG,EAAE;AACjC,YAAA,YAAY,GAAG,SAAS,CAAC,OAAO;AAChC,YAAA,SAAS,GAAG,SAAS,CAAC,UAAU;;AAGlC,QAAA,IAAI,SAAS,IAAI,kBAAkB,IAAI,SAAS,IAAI,iBAAiB,IAAI,SAAS,IAAI,uBAAuB,EAAE;AAC7G,YAAA,IAAI,cAAc,GAAQ;AACxB,gBAAA,KAAK,EAAE,SAAS;AAChB,gBAAA,OAAO,EAAE,YAAY;AACrB,gBAAA,IAAI,EAAE,OAAO;AACb,gBAAA,SAAS,EAAE,iBAAiB;AAC5B,gBAAA,UAAU,EAAE,IAAI;AAChB,gBAAA,WAAW,EAAE,iBAAiB;aAC/B;YAED,MAAM,SAAS,GAAoD,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,iCAAiC,EAAE;AACrH,gBAAA,KAAK,EAAE,OAAO;gBACd,UAAU,EAAE,CAAC,yBAAyB,CAAC;AACvC,gBAAA,IAAI,EAAE,cAAc;AACpB,gBAAA,YAAY,EAAE,KAAK;AACpB,aAAA,CAAC;AAEF,YAAA,OAAO,SAAS;;aAEX;AACL,YAAA,MAAM,WAAW,GAAqC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,YAAY,EAAE,OAAO,EAAE,EAAE,QAAQ,EAAE,QAAQ,EAAE,CAAC;AACvH,YAAA,OAAO,WAAW;;;AAKtB,IAAA,cAAc,CAAC,OAAe,EAAE,KAAa,EAAE,QAAQ,GAAG,IAAI,EAAA;QAC5D,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,EAAE,KAAK,EAAE;AACjC,YAAA,QAAQ,EAAE;AACX,SAAA,CAAC;;AAGJ,IAAA,YAAY,CAAC,OAAe,EAAE,KAAa,EAAE,QAAQ,GAAG,IAAI,EAAA;QAC1D,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,EAAE,KAAK,EAAE;AACjC,YAAA,QAAQ,EAAE;AACX,SAAA,CAAC;;IAGJ,gBAAgB,CAAC,CAAW,EAAE,CAAW,EAAA;QACvC,MAAM,OAAO,GAAG,EAAE;AAClB,QAAA,KAAK,MAAM,OAAO,IAAI,CAAC,EAAE;YACvB,MAAM,KAAK,GAAG,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC;AAChC,YAAA,IAAI,KAAK,KAAK,CAAC,CAAC,EAAE;gBAChB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;AACtB,gBAAA,CAAC,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC;;;QAGtB,OAAO,CAAC,GAAG,OAAO,EAAE,GAAG,CAAC,CAAC,CAAC;;uGAzEjB,gBAAgB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAA,IAAA,CAAA,WAAA,EAAA,EAAA,EAAA,KAAA,EAAAF,IAAA,CAAA,SAAA,EAAA,EAAA,EAAA,KAAA,EAAAG,EAAA,CAAA,UAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA;AAAhB,IAAA,OAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,gBAAgB,cAFf,MAAM,EAAA,CAAA;;2FAEP,gBAAgB,EAAA,UAAA,EAAA,CAAA;kBAH5B,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,UAAU,EAAE;AACb,iBAAA;;;MCDY,wCAAwC,CAAA;AAE1C,IAAA,SAAA;AACyB,IAAA,IAAA;IAFlC,WACS,CAAA,SAAiE,EACxC,IAAS,EAAA;QADlC,IAAS,CAAA,SAAA,GAAT,SAAS;QACgB,IAAI,CAAA,IAAA,GAAJ,IAAI;QAEpC,IAAI,CAAC,SAAS,CAAC,aAAa,CAAC,CAAC,qCAAqC,CAAC,CAAC;;AAGvE,IAAA,OAAO,CAAC,MAAsB,EAAA;AAC5B,QAAA,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,MAAM,CAAC;;AATnB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,kBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,wCAAwC,gDAGzC,eAAe,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAHd,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,wCAAwC,gGCTrD,gqCAiBM,EAAA,MAAA,EAAA,CAAA,EAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAH,EAAA,CAAA,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,SAAA,EAAA,SAAA,EAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,IAAA,CAAA,SAAA,EAAA,QAAA,EAAA,6GAAA,EAAA,QAAA,EAAA,CAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,IAAA,CAAA,cAAA,EAAA,QAAA,EAAA,sCAAA,EAAA,MAAA,EAAA,CAAA,IAAA,CAAA,EAAA,QAAA,EAAA,CAAA,gBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,gBAAA,EAAA,QAAA,EAAA,8DAAA,EAAA,MAAA,EAAA,CAAA,OAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,gBAAA,EAAA,QAAA,EAAA,8DAAA,EAAA,CAAA,EAAA,CAAA;;2FDRO,wCAAwC,EAAA,UAAA,EAAA,CAAA;kBANpD,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,qCAAqC,cACnC,KAAK,EAAA,QAAA,EAAA,gqCAAA,EAAA;;0BAOd,MAAM;2BAAC,eAAe;;;MEGd,8BAA8B,CAAA;AAgBhC,IAAA,SAAA;AACC,IAAA,MAAA;AACA,IAAA,QAAA;AACA,IAAA,wBAAA;AACwB,IAAA,IAAA;IAnBlC,OAAO,GAAY,KAAK;IACxB,gBAAgB,GAAY,KAAK;IACjC,cAAc,GAAY,KAAK;IAC/B,OAAO,GAAQ,EAAE;IACjB,gBAAgB,GAAQ,EAAE;AAC1B,IAAA,oBAAoB;AACpB,IAAA,kCAAkC;AAClC,IAAA,IAAI;AACJ,IAAA,MAAM;AACN,IAAA,kBAAkB;AAClB,IAAA,aAAa;AACb,IAAA,CAAC;AACD,IAAA,4BAA4B;IAE5B,WACS,CAAA,SAAuD,EACtD,MAAwB,EACxB,QAAqB,EACrB,wBAAkD,EAC1B,IAAS,EAAA;QAJlC,IAAS,CAAA,SAAA,GAAT,SAAS;QACR,IAAM,CAAA,MAAA,GAAN,MAAM;QACN,IAAQ,CAAA,QAAA,GAAR,QAAQ;QACR,IAAwB,CAAA,wBAAA,GAAxB,wBAAwB;QACA,IAAI,CAAA,IAAA,GAAJ,IAAI;QAGpC,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC,IAAI,EAAE,kBAAkB,IAAI,EAAE;AAE7D,QAAA,IAAG,IAAI,CAAC,IAAI,EAAE,aAAa,EAAC;YAC1B,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,IAAI,EAAE,aAAa,IAAI,EAAE;;AAGrD,QAAA,IAAG,IAAI,CAAC,IAAI,EAAE,4BAA4B,EAAC;YACzC,IAAI,CAAC,4BAA4B,GAAG,IAAI,CAAC,IAAI,CAAC,4BAA4B;;QAG5E,IAAI,CAAC,SAAS,CAAC,aAAa,CAAC,CAAC,6BAA6B,CAAC,CAAC;;IAG/D,QAAQ,GAAA;QACN,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE;AAC3B,QAAA,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;AAC5D,QAAA,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;QAC5E,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,IAAI,CAAC,cAAc;AAEhD,QAAA,IAAG,IAAI,CAAC,IAAI,EAAE,oBAAoB,IAAI,IAAI,IAAI,IAAI,CAAC,IAAI,EAAE,oBAAoB,IAAI,WAAW,EAAE;AAC5F,YAAA,IAAI,CAAC,IAAI,CAAC,oBAAoB,GAAG,IAAI;;AAGvC,QAAA,IAAG,IAAI,CAAC,IAAI,EAAE,kBAAkB,IAAI,IAAI,CAAC,gBAAgB,EAAE,MAAM,EAAC;AAChE,YAAA,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,MAAM,CAAC,gBAAgB,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC,CAAC;;AAG1I,QAAA,IAAI,CAAC,oBAAoB,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,GAAQ,EAAE,GAAW,MAAM,EAAE,EAAE,EAAE,GAAG,GAAG,CAAC,EAAE,UAAU,EAAE,IAAI,CAAC,IAAI,EAAE,oBAAoB,KAAK,IAAI,GAAG,IAAI,IAAI,IAAI,CAAC,gBAAgB,EAAE,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,IAAI,GAAG,KAAK,CAAC,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,CAAC;QAEhO,IAAI,CAAC,UAAU,EAAE;;;;;;;;IAUnB,eAAe,GAAA;;;;;IAMf,UAAU,GAAA;AACR,QAAA,IAAI,CAAC,IAAI,GAAG,IAAI,SAAS,CAAC;AACxB,YAAA,IAAI,EAAE,IAAI,WAAW,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,IAAI,EAAE,EAAE,UAAU,CAAC,QAAQ,CAAC;AACjE,YAAA,gBAAgB,EAAE,IAAI,WAAW,CAAC,IAAI,CAAC;AACvC,YAAA,qBAAqB,EAAE,IAAI,WAAW,CAAC,IAAI,CAAC,IAAI,EAAE,qBAAqB,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,qBAAqB,CAAC,GAAG,CAAC,EAAE,UAAU,CAAC,QAAQ,CAAC;AAC5I,YAAA,mBAAmB,EAAE,IAAI,WAAW,CAAC,IAAI,CAAC,IAAI,EAAE,mBAAmB,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,mBAAmB,CAAC,GAAG,CAAC,EAAE,UAAU,CAAC,QAAQ,CAAC;AACvI,SAAA,CAAC;;AAGJ,IAAA,IAAI,IAAI,GAAA;QACN,OAAQ,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAiB;;AAG/C,IAAA,IAAI,gCAAgC,GAAA;AAClC,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,KAAK;;AAGxB,IAAA,IAAI,iBAAiB,GAAA;QACnB,OAAO,IAAI,CAAC,gBAAgB;;AAG9B,IAAA,IAAI,CAAC,KAA4B,EAAA;AAC/B,QAAA,eAAe,CAAC,IAAI,CAAC,oBAAoB,EAAE,KAAK,CAAC,aAAa,EAAE,KAAK,CAAC,YAAY,CAAC;;IAGrF,QAAQ,GAAA;AACN,QAAA,MAAM,iBAAiB,GAAG,IAAI,CAAC,iBAAiB;AAEhD,QAAA,IAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAC;YACnB;;;AAIF,QAAA,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,oBAAoB,CAAC,MAAM,CAAC,CAAC,CAAM,OAAO,IAAG,CAAC,CAAC,UAAU;AAAE,YAAA,OAAO,CAAC,CAAC,MAAM,CAAA,EAAE,CAAE,CAAC,GAAG,CAAC,CAAC,CAAM,KAAK,CAAC,CAAC,MAAM,CAAC;QACrI,IAAG,IAAI,CAAC,gBAAgB,CAAC,MAAM,IAAI,CAAC,EAAC;YACnC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,mCAAmC,EAAE,IAAI,EAAE;AAC5D,gBAAA,QAAQ,EAAE;AACX,aAAA,CAAC;YACF;;QAEF,OAAO,CAAC,GAAG,CAAC,+BAA+B,EAAE,IAAI,CAAC,gBAAgB,EAAE,iBAAiB,CAAC;QAEtF,IAAI,CAAC,yBAAyB,EAAE;;IAIlC,yBAAyB,GAAA;AACvB,QAAA,IAAI,IAAI,GAAG;AACT,YAAA,iBAAiB,EAAE,IAAI,CAAC,IAAI,CAAC,iBAAiB;AAC9C,YAAA,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE;YAC7B,gBAAgB,EAAE,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,gBAAgB;YAC1D,qBAAqB,EAAE,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,qBAAqB;YACpE,mBAAmB,EAAE,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,mBAAmB;AAChE,YAAA,cAAc,EAAE,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE;AACnC,YAAA,cAAc,EAAE,IAAI,CAAC,gBAAgB,CAAC,IAAI;SAC3C;AAED,QAAA,OAAO,CAAC,GAAG,CAAC,cAAc,EAAE,IAAI,CAAC;AAEjC,QAAA,IAAI,CAAC,cAAc,GAAG,IAAI;AAC1B,QAAA,IAAI,CAAC,OAAO,GAAG,IAAI;AACnB,QAAA,IAAG,IAAI,CAAC,IAAI,EAAE,kBAAkB,EAAC;AAC/B,YAAA,IAAI,CAAC,wBAAwB,CAAC,qBAAqB,CAAC,IAAI,CAAC,4BAA4B,CAAC,MAAM,EAAE,EAAC,EAAE,EAAE,IAAI,CAAC,IAAI,EAAE,kBAAkB,EAAE,GAAG,IAAI,EAAC,CAAC,CAAC,SAAS,CAAC,CAAC,IAAG;AACxJ,gBAAA,OAAO,CAAC,GAAG,CAAC,gBAAgB,EAAE,CAAC,CAAC;;gBAEhC,IAAI,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC,CAAC,OAAO,EAAE,SAAS,CAAC;AAChD,gBAAA,IAAI,gBAAgB,GAAG;oBACrB,GAAG,CAAC,CAAC,IAAI;AACT,oBAAA,GAAG,IAAI;AACP,oBAAA,SAAS,EAAE,IAAI;iBAChB;AACD,gBAAA,IAAI,CAAC,OAAO,CAAC,gBAAgB,CAAC;aAC/B,EAAE,GAAG,IAAG;AACP,gBAAA,IAAI,CAAC,OAAO,GAAG,KAAK;AACpB,gBAAA,IAAI,CAAC,cAAc,GAAG,KAAK;AAC3B,gBAAA,IAAI,CAAC,MAAM,CAAC,gBAAgB,CAAC,GAAG,CAAC;AACnC,aAAC,CAAC;;aAEA;AACF,YAAA,IAAI,CAAC,wBAAwB,CAAC,kBAAkB,CAAC,IAAI,CAAC,4BAA4B,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC,SAAS,CAAC,CAAC,IAAG;AAC1G,gBAAA,OAAO,CAAC,GAAG,CAAC,gBAAgB,EAAE,CAAC,CAAC;;gBAEhC,IAAI,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC,CAAC,OAAO,EAAE,SAAS,CAAC;AAChD,gBAAA,IAAI,gBAAgB,GAAG;oBACrB,GAAG,CAAC,CAAC,IAAI;AACT,oBAAA,GAAG;iBACJ;AACD,gBAAA,IAAI,CAAC,OAAO,CAAC,gBAAgB,CAAC;aAC/B,EAAE,GAAG,IAAG;AACP,gBAAA,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC;AAChB,gBAAA,IAAI,CAAC,OAAO,GAAG,KAAK;AACpB,gBAAA,IAAI,CAAC,cAAc,GAAG,KAAK;AAC3B,gBAAA,IAAI,CAAC,MAAM,CAAC,gBAAgB,CAAC,GAAG,CAAC;AACnC,aAAC,CAAC;;;IAIN,oBAAoB,CAAC,MAAe,EAAE,IAAS,EAAA;AAC7C,QAAA,IAAG,MAAM,IAAI,KAAK,EAAC;AACjB,YAAA,IAAI,UAAU,GAAG,IAAI,CAAC,EAAE;AACxB,YAAA,IAAI,WAAW,GAAG,IAAI,CAAC,oBAAoB,EAAE,MAAM,IAAI,IAAI,CAAC,EAAE,GAAG,CAAC,CAAC;YACnE,IAAI,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE;AACvC,YAAA,IAAG,SAAS,EAAE,qBAAqB,IAAI,UAAU,EAAC;AAChD,gBAAA,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC;AACnB,oBAAA,qBAAqB,EAAE;AACxB,iBAAA,CAAC;;AAGJ,YAAA,IAAG,SAAS,EAAE,mBAAmB,IAAI,WAAW,EAAC;AAC/C,gBAAA,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC;AACnB,oBAAA,mBAAmB,EAAE;AACtB,iBAAA,CAAC;;;;IAKR,OAAO,CAAC,OAAY,IAAI,EAAA;AACtB,QAAA,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC;;AAzLjB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,kBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,8BAA8B,+IAoB/B,eAAe,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AApBd,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,8BAA8B,wFCf3C,i/IAwEO,EAAA,MAAA,EAAA,CAAA,o0DAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAE,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,EAAAA,EAAA,CAAA,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,aAAA,EAAA,QAAA,EAAA,8CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,8MAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,eAAA,EAAA,QAAA,EAAA,2CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,0FAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,qDAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,SAAA,EAAA,gBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,kBAAA,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,CAAA,WAAA,CAAA,EAAA,OAAA,EAAA,CAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,eAAA,EAAA,QAAA,EAAA,mBAAA,EAAA,MAAA,EAAA,CAAA,iBAAA,EAAA,UAAA,EAAA,SAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,SAAA,EAAA,SAAA,EAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,YAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,CAAA,oBAAA,EAAA,OAAA,EAAA,YAAA,EAAA,YAAA,EAAA,iBAAA,EAAA,WAAA,CAAA,EAAA,QAAA,EAAA,CAAA,cAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,QAAA,EAAA,QAAA,EAAA,WAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,SAAA,EAAA,QAAA,EAAA,YAAA,EAAA,MAAA,EAAA,CAAA,kBAAA,EAAA,YAAA,EAAA,UAAA,EAAA,eAAA,EAAA,UAAA,EAAA,8BAAA,EAAA,aAAA,EAAA,UAAA,EAAA,UAAA,EAAA,wBAAA,EAAA,aAAA,EAAA,OAAA,EAAA,YAAA,EAAA,iBAAA,EAAA,mBAAA,EAAA,2BAAA,EAAA,gBAAA,EAAA,IAAA,EAAA,YAAA,EAAA,0BAAA,CAAA,EAAA,OAAA,EAAA,CAAA,cAAA,EAAA,QAAA,EAAA,QAAA,EAAA,iBAAA,EAAA,aAAA,CAAA,EAAA,QAAA,EAAA,CAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,SAAA,EAAA,QAAA,EAAA,YAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,IAAA,EAAA,UAAA,CAAA,EAAA,OAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,QAAA,EAAA,CAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,GAAA,CAAA,QAAA,EAAA,QAAA,EAAA,yHAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,IAAA,EAAA,aAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,EAAA,mBAAA,EAAA,kBAAA,EAAA,OAAA,EAAA,UAAA,EAAA,qBAAA,CAAA,EAAA,QAAA,EAAA,CAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,IAAA,CAAA,SAAA,EAAA,QAAA,EAAA,6GAAA,EAAA,QAAA,EAAA,CAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAJ,IAAA,CAAA,cAAA,EAAA,QAAA,EAAA,sCAAA,EAAA,MAAA,EAAA,CAAA,YAAA,EAAA,MAAA,EAAA,kBAAA,EAAA,gBAAA,CAAA,EAAA,QAAA,EAAA,CAAA,gBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,cAAA,EAAA,QAAA,EAAA,sCAAA,EAAA,MAAA,EAAA,CAAA,IAAA,CAAA,EAAA,QAAA,EAAA,CAAA,gBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,gBAAA,EAAA,QAAA,EAAA,8DAAA,EAAA,MAAA,EAAA,CAAA,OAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,gBAAA,EAAA,QAAA,EAAA,8DAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,GAAA,CAAA,WAAA,EAAA,QAAA,EAAA,cAAA,EAAA,MAAA,EAAA,CAAA,YAAA,EAAA,iBAAA,EAAA,kBAAA,EAAA,eAAA,EAAA,eAAA,EAAA,WAAA,EAAA,IAAA,EAAA,UAAA,EAAA,eAAA,EAAA,MAAA,EAAA,OAAA,EAAA,eAAA,EAAA,UAAA,EAAA,OAAA,EAAA,qBAAA,EAAA,SAAA,EAAA,UAAA,EAAA,eAAA,CAAA,EAAA,OAAA,EAAA,CAAA,QAAA,EAAA,qBAAA,CAAA,EAAA,QAAA,EAAA,CAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,GAAA,CAAA,WAAA,EAAA,QAAA,EAAA,8BAAA,EAAA,MAAA,EAAA,CAAA,wBAAA,EAAA,iBAAA,EAAA,wBAAA,EAAA,IAAA,EAAA,qBAAA,EAAA,qBAAA,EAAA,4BAAA,EAAA,2BAAA,EAAA,0BAAA,EAAA,+BAAA,EAAA,2BAAA,EAAA,6BAAA,CAAA,EAAA,OAAA,EAAA,CAAA,oBAAA,EAAA,oBAAA,EAAA,mBAAA,EAAA,mBAAA,CAAA,EAAA,QAAA,EAAA,CAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,GAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,aAAA,EAAA,iBAAA,EAAA,oBAAA,EAAA,iBAAA,EAAA,mBAAA,EAAA,yBAAA,EAAA,iBAAA,EAAA,0BAAA,EAAA,qBAAA,EAAA,yBAAA,EAAA,cAAA,CAAA,EAAA,OAAA,EAAA,CAAA,gBAAA,EAAA,iBAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,eAAA,EAAA,gBAAA,EAAA,cAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,GAAA,CAAA,aAAA,EAAA,QAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,CAAA,uBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAK,kBAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,CAAA,cAAA,CAAA,EAAA,CAAA,EAAA,CAAA;;2FDzDM,8BAA8B,EAAA,UAAA,EAAA,CAAA;kBAN1C,SAAS;AACI,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,6BAA6B,cAG3B,KAAK,EAAA,QAAA,EAAA,i/IAAA,EAAA,MAAA,EAAA,CAAA,o0DAAA,CAAA,EAAA;;0BAsBhB,MAAM;2BAAC,eAAe;;;MErBd,sBAAsB,CAAA;AAyBvB,IAAA,MAAA;AACA,IAAA,wBAAA;AACA,IAAA,MAAA;AA1BV,IAAA,OAAgB,cAAc,GAAG,wBAAwB;AAE9B,IAAA,4BAA4B;IAC9C,CAAC,GAAQ,EAAE;AACK,IAAA,aAAa;AACb,IAAA,cAAc;AACd,IAAA,OAAO;IACvB,eAAe,GAAY,KAAK;AAChC,IAAA,aAAa;AAEZ,IAAA,sBAAsB,GAAG,IAAI,YAAY,EAAE;AAC3C,IAAA,2BAA2B,GAAG,IAAI,YAAY,EAAE;AAChD,IAAA,yBAAyB,GAAG,IAAI,YAAY,EAAE;AAExD,IAAA,gBAAgB,GAAQ;QACtB,EAAE,EAAE,CAAC,CAAC;AACN,QAAA,IAAI,EAAE;KACP;IACD,gBAAgB,GAAU,EAAE;IAC5B,SAAS,GAAU,EAAE;IACrB,gBAAgB,GAAG,KAAK;IACxB,cAAc,GAAG,KAAK;AAEtB,IAAA,WAAA,CACU,MAAwB,EACxB,wBAAkD,EAClD,MAAiB,EAAA;QAFjB,IAAM,CAAA,MAAA,GAAN,MAAM;QACN,IAAwB,CAAA,wBAAA,GAAxB,wBAAwB;QACxB,IAAM,CAAA,MAAA,GAAN,MAAM;;IAGhB,QAAQ,GAAA;QACN,IAAI,CAAC,mBAAmB,EAAE;;;;;IAMrB,uBAAuB,CAAC,SAAc,IAAI,EAAA;QAC/C,IAAG,CAAC,IAAI,CAAC,aAAa;YAAE;AAExB,QAAA,IAAI,IAAI,GAAG;YACT,IAAI,EAAE,MAAM,GAAG,MAAM,CAAC,IAAI,GAAG,IAAI;YACjC,gBAAgB,EAAE,MAAM,GAAG,MAAM,CAAC,gBAAgB,GAAG,KAAK;YAC1D,qBAAqB,EAAE,MAAM,GAAG,MAAM,CAAC,qBAAqB,GAAG,CAAC;YAChE,mBAAmB,EAAE,MAAM,GAAG,MAAM,CAAC,mBAAmB,GAAG,CAAC;YAC5D,iBAAiB,EAAE,IAAI,CAAC,aAAa;YACrC,kBAAkB,EAAE,MAAM,GAAG,MAAM,EAAE,EAAE,GAAG,IAAI;AAC9C,YAAA,oBAAoB,EAAE,MAAM,IAAI,MAAM,EAAE,EAAE,GAAG,KAAK,GAAG,IAAI;YACzD,cAAc,EAAE,IAAI,CAAC,cAAc;YACnC,OAAO,EAAE,IAAI,CAAC,OAAO;AACrB,YAAA,cAAc,EAAE,MAAM,GAAG,MAAM,EAAE,cAAc,EAAE,KAAK,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,gBAAgB;YACnF,CAAC,EAAE,IAAI,CAAC,CAAC;YACT,eAAe,EAAE,IAAI,CAAC,eAAe;YACrC,aAAa,EAAE,IAAI,CAAC;SACrB;QAED,MAAM,SAAS,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,8BAA8B,EAAE;AACjE,YAAA,KAAK,EAAE,KAAK;AACZ,YAAA,QAAQ,EAAE,OAAO;AACjB,YAAA,IAAI,EAAE,IAAI;YACV,UAAU,EAAE,CAAC,iCAAiC,CAAC;AAC/C,YAAA,YAAY,EAAE,IAAI;AACnB,SAAA,CAAC;QAEF,SAAS,CAAC,WAAW,EAAE,CAAC,SAAS,CAAC,CAAC,GAAG,KAAI;YACxC,IAAI,GAAG,EAAE;AACP,gBAAA,OAAO,CAAC,GAAG,CAAC,iCAAiC,EAAE,GAAG,CAAC;AAEnD,gBAAA,IAAG,GAAG,EAAE,SAAS,EAAC;oBAChB,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS,EAAE,GAAG,CAAC,CAAC,IAAG;wBACvC,IAAG,CAAC,CAAC,EAAE,IAAI,GAAG,EAAE,EAAE,EAAC;4BACjB,CAAC,GAAG,GAAG;;AAET,wBAAA,OAAO,CAAC;AACV,qBAAC,CAAC;;qBAEA;oBACF,IAAI,CAAC,SAAS,GAAG,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC;;AAE3C,gBAAA,IAAI,CAAC,gBAAgB,GAAG,GAAG;gBAC3B,IAAI,CAAC,oBAAoB,EAAE;;AAE/B,SAAC,CAAC;;IAGJ,mBAAmB,GAAA;QACjB,IAAI,CAAC,wBAAwB,CAAC,mBAAmB,CAAC,IAAI,CAAC,4BAA4B,CAAC,IAAI,EAAE,IAAI,CAAC,aAAa,CAAC,CAAC,SAAS,CAAC,CAAC,IAAG;YAC1H,OAAO,CAAC,GAAG,CAAC,sBAAsB,EAAE,CAAC,CAAC,IAAI,CAAC;YAC3C,IAAI,CAAC,SAAS,GAAG,CAAC,EAAE,IAAI,IAAI,EAAE;YAC9B,UAAU,CAAC,MAAK;gBACd,IAAI,CAAC,0BAA0B,EAAE;aAClC,EAAE,GAAG,CAAC;AACT,SAAC,CAAC;;IAGJ,0BAA0B,GAAA;QACxB,IAAI,CAAC,wBAAwB,CAAC,0BAA0B,CAAC,IAAI,CAAC,4BAA4B,CAAC,mBAAmB,EAAE,IAAI,CAAC,aAAa,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,KAAI;YAClJ,OAAO,CAAC,GAAG,CAAC,6BAA6B,EAAE,CAAC,CAAC,IAAI,CAAC;AAClD,YAAA,IAAI,CAAC,EAAE,IAAI,IAAI,MAAM,CAAC,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,MAAM,IAAI,CAAC,EAAE;gBAC/C,IAAG,CAAC,CAAC,IAAI,EAAE,8BAA8B,GAAG,CAAC,EAAC;oBAC5C,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC,CAAM,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,IAAI,EAAE,8BAA8B,CAAC;;AAE1G,gBAAA,OAAO,CAAC,GAAG,CAAC,6BAA6B,EAAE,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,gBAAgB,CAAC;gBACjF,IAAI,CAAC,oBAAoB,EAAE;;AAE/B,SAAC,CAAC;;AAGJ,IAAA,kBAAkB,CAAC,UAAkB,EAAA;QACnC,UAAU,CAAC,MAAK;AACd,YAAA,IAAG,IAAI,CAAC,gBAAgB,EAAC;gBACvB,OAAO,CAAC,GAAG,CAAC,qBAAqB,EAAE,IAAI,CAAC,gBAAgB,CAAC;AACzD,gBAAA,IAAI,cAAc,GAAQ;AACxB,oBAAA,KAAK,EAAE,iBAAiB;AACxB,oBAAA,OAAO,EAAE,CAAgD,8CAAA,CAAA;AACzD,oBAAA,SAAS,EAAE,iBAAiB;AAC5B,oBAAA,IAAI,EAAE,QAAQ;AACd,oBAAA,iBAAiB,EAAE,cAAc;AACjC,oBAAA,kBAAkB,EAAE,gBAAgB;AACpC,oBAAA,gBAAgB,EAAE,QAAQ;AAC1B,oBAAA,iBAAiB,EAAE;iBACpB;gBAED,MAAM,SAAS,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,wCAAwC,EAAE;AAC3E,oBAAA,KAAK,EAAE,KAAK;AACZ,oBAAA,QAAQ,EAAE,OAAO;;AAEjB,oBAAA,IAAI,EAAE,cAAc;AACpB,oBAAA,YAAY,EAAE,IAAI;AACnB,iBAAA,CAAC;gBAEF,SAAS,CAAC,WAAW,EAAE,CAAC,SAAS,CAAC,CAAC,MAAM,KAAI;AAC3C,oBAAA,OAAO,CAAC,GAAG,CAAC,oCAAoC,EAAE,MAAM,CAAC;oBACzD,IAAI,MAAM,EAAE;AACV,wBAAA,IAAI,CAAC,wBAAwB,CAAC,qBAAqB,CAAC,IAAI,CAAC,4BAA4B,CAAC,MAAM,EAAE,EAAC,EAAE,EAAE,UAAU,EAAE,kBAAkB,EAAE,IAAI,CAAC,gBAAgB,EAAE,EAAE,IAAI,UAAU,EAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,KAAI;4BAC3L,IAAI,CAAC,MAAM,CAAC,cAAc,CAAC,gDAAgD,EAAE,MAAM,CAAC;4BACpF,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,IAAI,UAAU,CAAC,EAAE,CAAC,CAAC;4BAC7E,IAAG,IAAI,CAAC,gBAAgB,EAAE,EAAE,IAAI,UAAU,EAAC;gCACzC,IAAI,CAAC,gBAAgB,GAAG;oCACtB,EAAE,EAAE,CAAC,CAAC;AACN,oCAAA,IAAI,EAAE,SAAS;AACf,oCAAA,qBAAqB,EAAE,CAAC;AACxB,oCAAA,mBAAmB,EAAE,CAAC;iCACvB;gCACD,IAAI,CAAC,oBAAoB,EAAE;;AAE/B,yBAAC,CAAC;;AAEN,iBAAC,CAAC;;AAEC,iBAAA,IAAG,IAAI,CAAC,cAAc,EAAC;gBAC1B,OAAO,CAAC,GAAG,CAAC,qBAAqB,EAAE,IAAI,CAAC,cAAc,CAAC;AACvD,gBAAA,IAAI,EAAE,GAAG,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC,CAAM,KAAK,CAAC,CAAC,EAAE,IAAI,UAAU,CAAC;AAC7D,gBAAA,IAAI,CAAC,uBAAuB,CAAC,EAAE,CAAC;;iBAE9B;gBACF,IAAG,IAAI,CAAC,gBAAgB,EAAE,EAAE,IAAI,UAAU,EAAC;AACzC,oBAAA,IAAG,UAAU,GAAG,CAAC,EAAC;wBAChB,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC,CAAM,KAAK,CAAC,CAAC,EAAE,IAAI,UAAU,CAAC;;yBAE1E;wBACF,IAAI,CAAC,gBAAgB,GAAG;4BACtB,EAAE,EAAE,CAAC,CAAC;AACN,4BAAA,IAAI,EAAE;yBACP;;AAGH,oBAAA,IAAI,CAAC,wBAAwB,CAAC,6BAA6B,CAAC,IAAI,CAAC,4BAA4B,CAAC,sBAAsB,EAAE,EAAC,EAAE,EAAE,IAAI,CAAC,gBAAgB,EAAE,EAAE,EAAE,iBAAiB,EAAE,IAAI,CAAC,aAAa,EAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,KAAI;wBAC5M,IAAI,CAAC,oBAAoB,EAAE;AAC7B,qBAAC,CAAC;;;AAIN,YAAA,IAAI,CAAC,gBAAgB,GAAG,KAAK;AAC7B,YAAA,IAAI,CAAC,cAAc,GAAG,KAAK;SAC5B,EAAE,GAAG,CAAC;;IAGT,oBAAoB,GAAA;QAClB,IAAG,IAAI,CAAC,gBAAgB,EAAE,EAAE,GAAG,CAAC,EAAC;AAC/B,YAAA,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,gBAAgB,CAAC,cAAc,EAAE,KAAK,CAAC,GAAG,CAAC;;aAEtE;AACF,YAAA,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,cAAc;;QAG7C,IAAI,CAAC,sBAAsB,CAAC,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC;AACvD,QAAA,IAAI,CAAC,2BAA2B,CAAC,IAAI,CAAC,IAAI,CAAC,gBAAgB,EAAE,qBAAqB,IAAI,CAAC,CAAC;AACxF,QAAA,IAAI,CAAC,yBAAyB,CAAC,IAAI,CAAC,IAAI,CAAC,gBAAgB,EAAE,mBAAmB,IAAI,CAAC,CAAC;;IAGtF,cAAc,CAAC,KAAY,EAAE,KAAa,EAAA;AACxC,QAAA,MAAM,MAAM,GAAG,KAAK,CAAC,MAAqB;AAC1C,QAAA,MAAM,CAAC,KAAK,CAAC,KAAK,GAAG,KAAK;;AAG5B,IAAA,UAAU,CAAC,KAAY,EAAA;AACrB,QAAA,MAAM,MAAM,GAAG,KAAK,CAAC,MAAqB;AAC1C,QAAA,MAAM,CAAC,KAAK,CAAC,KAAK,GAAG,wEAAwE;;uGAtMpF,sBAAsB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAC,gBAAA,EAAA,EAAA,EAAA,KAAA,EAAAC,wBAAA,EAAA,EAAA,EAAA,KAAA,EAAAN,IAAA,CAAA,SAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAtB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,sBAAsB,2eCdnC,06DAqBW,EAAA,MAAA,EAAA,CAAA,EAAA,CAAA,EAAA,YAAA,EAAA,CAAA,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,EAAAC,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,SAAA,EAAA,SAAA,EAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAM,IAAA,CAAA,SAAA,EAAA,QAAA,EAAA,6GAAA,EAAA,QAAA,EAAA,CAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,eAAA,EAAA,YAAA,EAAA,iBAAA,EAAA,kBAAA,EAAA,WAAA,EAAA,WAAA,EAAA,gBAAA,EAAA,aAAA,EAAA,OAAA,EAAA,WAAA,CAAA,EAAA,OAAA,EAAA,CAAA,QAAA,EAAA,OAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,WAAA,EAAA,QAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,eAAA,CAAA,EAAA,QAAA,EAAA,CAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,cAAA,EAAA,QAAA,EAAA,6CAAA,EAAA,MAAA,EAAA,CAAA,sBAAA,EAAA,mBAAA,EAAA,oBAAA,EAAA,4BAAA,CAAA,EAAA,OAAA,EAAA,CAAA,YAAA,EAAA,YAAA,EAAA,YAAA,EAAA,aAAA,CAAA,EAAA,QAAA,EAAA,CAAA,gBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,IAAA,CAAA,UAAA,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,OAAA,CAAA,EAAA,CAAA,EAAA,CAAA;;2FDPE,sBAAsB,EAAA,UAAA,EAAA,CAAA;kBANlC,SAAS;AACI,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,iBAAiB,cAGf,KAAK,EAAA,QAAA,EAAA,06DAAA,EAAA;gJAKQ,4BAA4B,EAAA,CAAA;sBAAtD,KAAK;uBAAC,EAAE,QAAQ,EAAE,IAAI,EAAE;gBAChB,CAAC,EAAA,CAAA;sBAAT;gBACwB,aAAa,EAAA,CAAA;sBAArC,KAAK;uBAAC,EAAC,QAAQ,EAAE,IAAI,EAAC;gBACE,cAAc,EAAA,CAAA;sBAAtC,KAAK;uBAAC,EAAC,QAAQ,EAAE,IAAI,EAAC;gBACE,OAAO,EAAA,CAAA;sBAA/B,KAAK;uBAAC,EAAC,QAAQ,EAAE,IAAI,EAAC;gBACd,eAAe,EAAA,CAAA;sBAAvB;gBACQ,aAAa,EAAA,CAAA;sBAArB;gBAES,sBAAsB,EAAA,CAAA;sBAA/B;gBACS,2BAA2B,EAAA,CAAA;sBAApC;gBACS,yBAAyB,EAAA,CAAA;sBAAlC;;;MEpBU,WAAW,CAAA;AAEtB,IAAA,SAAS,CAAC,KAAc,EAAE,GAAG,IAAe,EAAA;QAC1C,IAAI,OAAO,KAAK,IAAI,QAAQ,IAAI,KAAK,KAAK,EAAE,EAAE;AAC5C,YAAA,OAAO,QAAQ,CAAC,UAAU,CAAC,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,aAAa,CAAC;;AACrD,aAAA,IAAI,OAAO,KAAK,IAAI,QAAQ,EAAE;YACnC,OAAO,QAAQ,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,aAAa,CAAC;;AACpD,aAAA,IAAI,KAAK,YAAY,IAAI,EAAE;YAChC,OAAO,QAAQ,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,aAAa,CAAC;;aACpD;AACL,YAAA,OAAO,cAAc;;;uGAVd,WAAW,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,IAAA,EAAA,CAAA;qGAAX,WAAW,EAAA,YAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA;;2FAAX,WAAW,EAAA,UAAA,EAAA,CAAA;kBAJvB,IAAI;AAAC,YAAA,IAAA,EAAA,CAAA;AACF,oBAAA,IAAI,EAAE,SAAS;AACf,oBAAA,UAAU,EAAE;AACf,iBAAA;;;MCEY,eAAe,CAAA;AAE1B,IAAA,SAAS,CAAC,KAAc,EAAE,GAAG,IAAe,EAAA;QAC1C,IAAI,OAAO,KAAK,IAAI,QAAQ,IAAI,KAAK,KAAK,EAAE,EAAE;AAC5C,YAAA,OAAO,QAAQ,CAAC,UAAU,CAAC,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,qBAAqB,CAAC;;AAC7D,aAAA,IAAI,OAAO,KAAK,IAAI,QAAQ,EAAE;YACnC,OAAO,QAAQ,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,qBAAqB,CAAC;;aAC5D;AACL,YAAA,OAAO,cAAc;;;uGARd,eAAe,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,IAAA,EAAA,CAAA;qGAAf,eAAe,EAAA,YAAA,EAAA,KAAA,EAAA,IAAA,EAAA,aAAA,EAAA,CAAA;;2FAAf,eAAe,EAAA,UAAA,EAAA,CAAA;kBAJ3B,IAAI;AAAC,YAAA,IAAA,EAAA,CAAA;AACF,oBAAA,IAAI,EAAE,aAAa;AACnB,oBAAA,UAAU,EAAE;AACf,iBAAA;;;MCCY,0BAA0B,CAAA;AAErC,IAAA,SAAS,CAAC,KAAc,EAAE,GAAG,IAAe,EAAA;QAC1C,IAAI,OAAO,KAAK,IAAI,QAAQ,IAAI,KAAK,KAAK,EAAE,EAAE;AAC5C,YAAA,OAAO,QAAQ,CAAC,UAAU,CAAC,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,wBAAwB,CAAC;;AAChE,aAAA,IAAI,OAAO,KAAK,IAAI,QAAQ,EAAE;YACnC,OAAO,QAAQ,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,wBAAwB,CAAC;;aAC/D;AACL,YAAA,OAAO,cAAc;;;uGARd,0BAA0B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,IAAA,EAAA,CAAA;qGAA1B,0BAA0B,EAAA,YAAA,EAAA,KAAA,EAAA,IAAA,EAAA,wBAAA,EAAA,CAAA;;2FAA1B,0BAA0B,EAAA,UAAA,EAAA,CAAA;kBAJtC,IAAI;AAAC,YAAA,IAAA,EAAA,CAAA;AACF,oBAAA,IAAI,EAAE,wBAAwB;AAC9B,oBAAA,UAAU,EAAE;AACf,iBAAA;;;MCsBY,4BAA4B,CAAA;AA8I7B,IAAA,MAAA;AACA,IAAA,UAAA;AACA,IAAA,KAAA;AACA,IAAA,MAAA;AACA,IAAA,QAAA;AACA,IAAA,kBAAA;IAlJV,OAAO,GAAG,EAAE;AAEe,IAAA,4BAA4B;IAC5B,CAAC,GAAQ,EAAE;IACX,aAAa,GAAG,EAAE;AAClB,IAAA,SAAS;AAC3B,IAAA,iBAAiB;IACjB,WAAW,GAAoC,EAAE;IACjD,UAAU,GAAG,KAAK;IAClB,eAAe,GAAG,KAAK;IACvB,aAAa,GAAG,KAAK;IACrB,eAAe,GAAG,IAAI;IACtB,6BAA6B,GAAG,IAAI;AACpC,IAAA,kBAAkB;AAClB,IAAA,sBAAsB;AACtB,IAAA,oBAAoB;IACpB,cAAc,GAAqB,KAAK;AACtB,IAAA,kBAAkB,GAAuB;AAClE,QAAA,KAAK,EAAE,eAAe;AACtB,QAAA,IAAI,EAAE,iDAAiD;AACvD,QAAA,OAAO,EAAE,SAAS;AAClB,QAAA,MAAM,EAAE,EAAE;AACV,QAAA,QAAQ,EAAE,IAAI;AACd,QAAA,aAAa,EAAE,EAAE;AACjB,QAAA,YAAY,EAAE,EAAE;AAChB,QAAA,cAAc,EAAE;KACjB;AACQ,IAAA,uBAAuB;AAEL,IAAA,kBAAkB;AAC7C,IAAA,iBAAiB;AACjB,IAAA,qBAAqB;AAEZ,IAAA,uBAAuB;AAChC,IAAA,gBAAgB;AAChB,IAAA,cAAc;AACd,IAAA,OAAO;AAEG,IAAA,sBAAsB,GAAG,IAAI,YAAY,EAAY;AAC/D,IAAA,0BAA0B;IAEjB,cAAc,GAAQ,EAAE;IACjC,OAAO,GAAQ,EAAE;AACP,IAAA,aAAa,GAAG,IAAI,YAAY,EAAqB;IAEtD,sBAAsB,GAAG,EAAE;IAC3B,eAAe,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;IAElC,QAAQ,GAAG,EAAE;AACZ,IAAA,cAAc,GAAG,IAAI,YAAY,EAAU;IAC5C,iBAAiB,GAAG,IAAI;IAExB,SAAS,GAAG,CAAC;AACZ,IAAA,eAAe,GAAG,IAAI,YAAY,EAAU;AAE7C,IAAA,eAAe,GAAc,IAAI,SAAS,CAAC,EAAE,CAAC;AAE9C,IAAA,UAAU,GAAgC;AACjD,QAAA,uBAAuB,EAAE,MAAM,IAAI;KACpC;IAED,oBAAoB,GAAoC,EAAE;IAC1D,kCAAkC,GAAoC,EAAE;IACxE,2BAA2B,GAAuC,EAAE;IACpE,YAAY,GAAG,KAAK;AACpB,IAAA,2BAA2B;IAC3B,sBAAsB,GAAG,KAAK;IAE9B,aAAa,GAAG,KAAK;IACrB,SAAS,GAAG,KAAK;IACjB,cAAc,GAAG,IAAI;IAErB,qBAAqB,GAAQ,EAAE;IAC/B,mBAAmB,GAAQ,EAAE;IAE7B,MAAM,GAAG,EAAE;AACX,IAAA,UAAU,GAAG,IAAI,WAAW,EAAE;AACtB,IAAA,UAAU,GAAG,IAAI,OAAO,EAAQ;AAExC,IAAA,UAAU;AAEF,IAAA,KAAK;AACL,IAAA,iBAAiB;IACzB,IAAwB,IAAI,CAAC,KAAc,EAAA;AACzC,QAAA,IAAI,CAAC,KAAK,GAAG,KAAK;AAClB,QAAA,IAAI,IAAI,CAAC,KAAK,EAAE;AAEd,YAAA,IAAI,IAAI,CAAC,iBAAiB,EAAE;AAC1B,gBAAA,IAAI,CAAC,iBAAiB,CAAC,WAAW,EAAE;;YAGtC,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,IAAI,CACjD,SAAS,CAAC,IAAI,CAAC,UAAU,CAAC,CAC3B,CAAC,SAAS,CAAC,CAAC,EAAE,KAAI;AACjB,gBAAA,IAAI,CAAC,oBAAoB,CAAC,EAAE,CAAC;AAC/B,aAAC,CAAC;;;AAIE,IAAA,UAAU;AACV,IAAA,sBAAsB;IAC9B,IAA6B,SAAS,CAAC,KAAmB,EAAA;AACxD,QAAA,IAAI,CAAC,UAAU,GAAG,KAAK;AACvB,QAAA,IAAI,IAAI,CAAC,UAAU,EAAE;AAEnB,YAAA,IAAI,IAAI,CAAC,sBAAsB,EAAE;AAC/B,gBAAA,IAAI,CAAC,sBAAsB,CAAC,WAAW,EAAE;;YAG3C,IAAI,CAAC,sBAAsB,GAAG,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CACrD,SAAS,CAAC,IAAI,CAAC,UAAU,CAAC,EAC1B,GAAG,CAAC,MAAK;gBACP,IAAI,CAAC,mBAAmB,EAAE;AAC5B,aAAC,CAAC,CACH,CAAC,SAAS,EAAE;;;AAKjB,IAAA,mBAAmB;AACnB,IAAA,sBAAsB;IAEb,mBAAmB,GAAG,KAAK;IAC3B,sBAAsB,GAAG,KAAK;IAC9B,mBAAmB,GAAG,KAAK;AAC3B,IAAA,YAAY;AACX,IAAA,kBAAkB,GAAG,IAAI,YAAY,EAAO;IAEtD,SAAS,GAAG,IAAI,cAAc,CAAM,IAAI,EAAE,EAAE,CAAC;AAC7C,IAAA,WAAW,GAAyB,IAAI,GAAG,EAAE;IAC7C,iBAAiB,GAAG,KAAK;IAGhB,eAAe,GAAG,KAAK;AACtB,IAAA,sBAAsB,GAAG,IAAI,YAAY,EAAO;AAE1D,IAAA,UAAU;IACV,QAAQ,GAAY,KAAK;AAEzB,IAAA,WAAA;;IAEU,MAAiB,EACjB,UAAsB,EACtB,KAAqB,EACrB,MAAc,EACd,QAAkB,EAClB,kBAAsC,EAAA;QALtC,IAAM,CAAA,MAAA,GAAN,MAAM;QACN,IAAU,CAAA,UAAA,GAAV,UAAU;QACV,IAAK,CAAA,KAAA,GAAL,KAAK;QACL,IAAM,CAAA,MAAA,GAAN,MAAM;QACN,IAAQ,CAAA,QAAA,GAAR,QAAQ;QACR,IAAkB,CAAA,kBAAA,GAAlB,kBAAkB;QAE1B,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,SAAS,CAAC,MAAM,IAAG;YACxC,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,IAAI,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;YAC9D,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,IAAI,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;AACrE,SAAC,CAAC;;IAIJ,QAAQ,GAAA;AAEN,QAAA,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,kBAAkB,CAAC,OAAO,CAAC,CAAC,WAAW,CAAC,OAAO,CAAC;AACtE,aAAA,IAAI,CACH,GAAG,CAAC,MAAM,IAAG;AACX,YAAA,OAAO,CAAC,GAAG,CAAC,cAAc,EAAE,MAAM,CAAC;YACnC,OAAO,MAAM,CAAC,OAAO;AACvB,SAAC,CAAC,EACF,WAAW,EAAE,CACd;AAED,QAAA,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC,IAAG;AAC5B,YAAA,OAAO,CAAC,GAAG,CAAC,aAAa,EAAE,CAAC,CAAC;AAC7B,YAAA,IAAI,CAAC,QAAQ,GAAG,CAAC;AACnB,SAAC,CAAC;QAEF,IAAI,CAAC,iBAAiB,EAAE;QAExB,IAAI,CAAC,UAAU,EAAE;QAEjB,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,SAAS,CAAC,EAAE,IAAG;AACpC,YAAA,IAAI,CAAC,qBAAqB,GAAG,EAAE;AAC/B,YAAA,IAAI,CAAC,mBAAmB,GAAG,EAAE;AAE7B,YAAA,IAAI,IAAI,CAAC,eAAe,EAAE;AACxB,gBAAA,KAAK,MAAM,GAAG,IAAI,EAAE,EAAE;AACpB,oBAAA,IAAI,EAAE,CAAC,cAAc,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,GAAG,CAAC,IAAI,MAAM,IAAI,EAAE,CAAC,GAAG,CAAC,IAAI,WAAW,EAAE;wBAErG,IAAI,eAAe,GAAG,KAAK;wBAE3B,IAAI,GAAG,CAAC,WAAW,EAAE,KAAK,WAAW,CAAC,WAAW,EAAE,EAAE;4BACnD,IAAI,CAAC,SAAS,GAAG,MAAM,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;4BAChC,eAAe,GAAG,IAAI;;wBAGxB,IAAI,GAAG,CAAC,WAAW,EAAE,KAAK,UAAU,CAAC,WAAW,EAAE,EAAE;4BAClD,IAAI,CAAC,QAAQ,GAAG,MAAM,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;4BAC/B,eAAe,GAAG,IAAI;;wBAGxB,IAAI,GAAG,CAAC,WAAW,EAAE,KAAK,QAAQ,CAAC,WAAW,EAAE,EAAE;4BAChD,IAAI,CAAC,mBAAmB,CAAC,MAAM,GAAG,EAAE,CAAC,GAAG,CAAC;4BACzC,eAAe,GAAG,IAAI;;wBAGxB,IAAI,GAAG,CAAC,WAAW,EAAE,KAAK,WAAW,CAAC,WAAW,EAAE,EAAE;4BACnD,IAAI,CAAC,mBAAmB,CAAC,SAAS,GAAG,EAAE,CAAC,GAAG,CAAC;4BAC5C,eAAe,GAAG,IAAI;;wBAGxB,IAAI,GAAG,CAAC,WAAW,EAAE,KAAK,QAAQ,CAAC,WAAW,EAAE,EAAE;AAChD,4BAAA,IAAI,CAAC,MAAM,GAAG,EAAE,CAAC,GAAG,CAAC;4BACrB,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC;4BACvC,eAAe,GAAG,IAAI;;wBAIxB,IAAI,GAAG,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,GAAG,CAAC,CAAC,MAAM,IAAI,EAAE,EAAE;;AAE9D,4BAAA,IAAI,CAAC,qBAAqB,CAAC,GAAG,CAAC,GAAG,QAAQ,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;4BACtE,eAAe,GAAG,IAAI;;wBAGxB,IAAI,CAAC,eAAe,EAAE;AACpB,4BAAA,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,QAAQ,CAAC,GAAG,CAAC,EAAE;AAC3B,gCAAA,IAAI,CAAC,qBAAqB,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC;;iCACjD;gCACL,IAAI,CAAC,qBAAqB,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC;;;;AAK7C,wBAAA,IAAI,OAAO,GAAG,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,GAAG,IAAI,GAAG,CAAC,aAAa,IAAI,GAAG,CAAC;AAC3E,wBAAA,IAAI,OAAO,EAAE,qBAAqB,EAAE;AAClC,4BAAA,IAAI,CAAC,qBAAqB,CAAC,GAAG,CAAC,GAAG,OAAO,CAAC,qBAAqB,CAAC,IAAI,CAAC,qBAAqB,CAAC,GAAG,CAAC,CAAC;;;;gBAKtG,IAAI,CAAC,eAAe,CAAC,UAAU,CAAC,IAAI,CAAC,qBAAqB,CAAC;AAE3D,gBAAA,IAAI,IAAI,CAAC,mBAAmB,IAAI,IAAI,CAAC,mBAAmB,CAAC,MAAM,IAAI,IAAI,CAAC,mBAAmB,CAAC,SAAS,EAAE;AACrG,oBAAA,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,mBAAmB;oBACvC,OAAO,CAAC,GAAG,CAAC,2EAA2E,EAAE,IAAI,CAAC,mBAAmB,CAAC;oBAClH,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC;;;AAMzC,YAAA,IAAI,sBAAsB,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,qBAAqB,CAAC,CAAC,IAAI,CAAC,KAAK,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,EAAE,CAAC;YAC3I,IAAI,sBAAsB,EAAE;AAC1B,gBAAA,IAAI,CAAC,aAAa,GAAG,IAAI;;YAG3B,IAAI,CAAC,OAAO,EAAE;AAEhB,SAAC,CAAC;QAEF,IAAI,CAAC,UAAU,CAAC;AACb,aAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,YAAY,CAAC,GAAG,CAAC,EAAE,oBAAoB,EAAE;AAC1E,aAAA,SAAS,CAAC,CAAC,MAAM,KAAI;AACpB,YAAA,IAAI,CAAC,MAAM,GAAG,MAAM;AACpB,YAAA,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;AACtB,YAAA,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC;AACrB,SAAC,CAAC;;AAIN,IAAA,WAAW,CAAC,OAAsB,EAAA;AAChC,QAAA,OAAO,CAAC,GAAG,CAAC,yCAAyC,EAAE,OAAO,CAAC;AAE/D,QAAA,IAAI,OAAO,CAAC,yBAAyB,CAAC,EAAE;YACtC,OAAO,CAAC,GAAG,CAAC,CAAgE,8DAAA,CAAA,EAAE,OAAO,CAAC,yBAAyB,CAAC,CAAC;YACjH,IAAI,CAAC,sBAAsB,EAAE;;AAG/B,QAAA,IAAI,OAAO,CAAC,oBAAoB,CAAC,EAAE;YACjC,OAAO,CAAC,GAAG,CAAC,CAA2D,yDAAA,CAAA,EAAE,OAAO,CAAC,oBAAoB,CAAC,CAAC;YAEvG,IAAI,CAAC,kBAAkB,GAAG,OAAO,CAAC,oBAAoB,CAAC,CAAC,YAAY;YACpE,IAAI,CAAC,sBAAsB,EAAE;AAE7B,YAAA,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC;YACvD,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC,kBAAkB,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,cAAc,CAAC,UAAU,CAAC,CAAC;YAC1F,IAAI,CAAC,qBAAqB,GAAG,IAAI,CAAC,kBAAkB,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,cAAc,CAAC,UAAU,CAAC,CAAC;;AAGhG,QAAA,IAAI,OAAO,CAAC,WAAW,CAAC,EAAE;YACxB,IAAI,CAAC,SAAS,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC,YAAY;;AAGpD,QAAA,IAAI,OAAO,CAAC,UAAU,CAAC,EAAE;YACvB,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,aAAa,EAAE;gBACtC,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC,YAAY;;iBAC3C;AACL,gBAAA,IAAI,IAAI,CAAC,iBAAiB,EAAE;oBAC1B,IAAI,mBAAmB,GAAGC,6BAA2C,CAAC,2BAA2B,CAAC;AAClG,oBAAA,IAAI,CAAC,QAAQ,GAAG,mBAAmB,GAAG,mBAAmB,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC,YAAY;;;;AAMlG,QAAA,IAAI,OAAO,CAAC,oBAAoB,CAAC,EAAE;AACjC,YAAA,IAAI,OAAO,CAAC,oBAAoB,CAAC,CAAC,YAAY,EAAE;AAC9C,gBAAA,OAAO,CAAC,GAAG,CAAC,CAAA,iFAAA,CAAmF,EAAE,OAAO,CAAC,oBAAoB,CAAC,CAAC,YAAY,CAAC;AAG5I,gBAAA,IAAI,IAAI,CAAC,mBAAmB,EAAE;AAC5B,oBAAA,IAAI,CAAC,mBAAmB,CAAC,WAAW,EAAE;;AAGxC,gBAAA,IAAI,IAAI,CAAC,sBAAsB,EAAE;AAC/B,oBAAA,IAAI,CAAC,sBAAsB,CAAC,WAAW,EAAE;;gBAG3C,IAAI,CAAC,UAAU,GAAG,IAAI,aAAa,CAAC,IAAI,CAAC,UAAU,CAAC;gBACpD,OAAO,CAAC,GAAG,CAAC,oDAAoD,EAAE,IAAI,CAAC,UAAU,CAAC;AAElF,gBAAA,IAAI,CAAC,mBAAmB,GAAG,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,SAAS,CAAC,OAAO,IAAG;AACtE,oBAAA,OAAO,CAAC,GAAG,CAAC,gDAAgD,EAAE,OAAO,CAAC;AACtE,oBAAA,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,UAAU,EAAE;wBAC/B,IAAI,CAAC,UAAU,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS;wBAC1C,IAAI,CAAC,UAAU,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ;wBACxC,IAAI,CAAC,oBAAoB,EAAE;;AAE/B,iBAAC,CAAC;AAEF,gBAAA,IAAI,CAAC,sBAAsB,GAAG,IAAI,CAAC,UAAU,CAAC,gBAAgB,CAAC,SAAS,CAAC,CAAC,KAAU,KAAI;AACtF,oBAAA,OAAO,CAAC,GAAG,CAAC,8CAA8C,EAAE,KAAK,CAAC;AAClE,oBAAA,IAAI,KAAK,KAAK,IAAI,EAAE;AAClB,wBAAA,IAAI,CAAC,cAAc,GAAG,KAAK;;;AAG/B,iBAAC,CAAC;;;AAKN,QAAA,IAAI,OAAO,CAAC,iBAAiB,CAAC,EAAE;AAC9B,YAAA,IAAI,IAAI,CAAC,2BAA2B,EAAE;AACpC,gBAAA,IAAI,CAAC,2BAA2B,CAAC,WAAW,EAAE;;AAGhD,YAAA,IAAI,CAAC,2BAA2B,GAAG,IAAI,CAAC,eAAe,CAAC;AACrD,iBAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,oBAAoB,EAAE,CAAC,CAAC,SAAS,CAAC,GAAG,IAAG;AACxE,gBAAA,IAAI,CAAC,sBAAsB,GAAG,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,KAAK,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,EAAE,CAAC;AACvH,aAAC,CAAC;;AAIN,QAAA,IAAI,OAAO,CAAC,cAAc,CAAC,EAAE;YAC3B,IAAI,CAAC,YAAY,GAAG,OAAO,CAAC,cAAc,CAAC,CAAC,YAAY;YACxD,IAAI,IAAI,CAAC,YAAY,IAAI,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE;;;;AAKrD,QAAA,IAAI,OAAO,CAAC,gBAAgB,CAAC,EAAE,YAAY,EAAE;YAC3C,IAAI,CAAC,cAAc,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAAC,YAAY;YAE5D,IAAI,CAAC,oBAAoB,CAAC;AACxB,gBAAA,SAAS,EAAE,IAAI,CAAC,cAAc,CAAC,SAAS;AACxC,gBAAA,MAAM,EAAE,IAAI,CAAC,cAAc,CAAC;AAC7B,aAAA,CAAC;;;IAKN,WAAW,GAAA;AACT,QAAA,IAAI,CAAC,iBAAiB,EAAE,WAAW,EAAE;AACrC,QAAA,IAAI,CAAC,sBAAsB,EAAE,WAAW,EAAE;AAC1C,QAAA,IAAI,CAAC,mBAAmB,EAAE,WAAW,EAAE;AACvC,QAAA,IAAI,CAAC,sBAAsB,EAAE,WAAW,EAAE;AAC1C,QAAA,IAAI,CAAC,2BAA2B,EAAE,WAAW,EAAE;;IAGjD,iBAAiB,GAAA;QACf,IAAI,IAAI,CAAC,uBAAuB,IAAI,IAAI,CAAC,uBAAuB,CAAC,MAAM,EAAE;AACvE,YAAA,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,uBAAuB;;aAC7C;AACL,YAAA,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC;;;IAKlE,sBAAsB,GAAA;QACpB,IAAI,IAAI,CAAC,uBAAuB,IAAI,IAAI,CAAC,uBAAuB,CAAC,MAAM,EAAE;YAEvE,MAAM,UAAU,GAAG,IAAI,GAAG,CAAS,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,CAAC;YAChF,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,uBAAuB,CAAC,MAAM,CAAC,CAAC,IAAI,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;;aAE9E;AACL,YAAA,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC;;AAGlE,QAAA,IAAI,IAAI,CAAC,mBAAmB,EAAE;YAC5B,IAAI,CAAC,gBAAgB,GAAG,CAAC,QAAQ,EAAE,GAAG,IAAI,CAAC,gBAAgB,CAAC;;AAG9D,QAAA,IAAI,IAAI,CAAC,eAAe,EAAE;YACxB,IAAI,CAAC,gBAAgB,GAAG,CAAC,MAAM,EAAE,GAAG,IAAI,CAAC,gBAAgB,CAAC;;QAE5D,IAAI,CAAC,sBAAsB,CAAC,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC;;AAIzD,IAAA,oBAAoB,CAAC,EAAO,EAAA;AAC1B,QAAA,IAAI,CAAC,OAAO,GAAG,EAAE,SAAS,EAAE,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,KAAK,EAAE,CAAC,MAAM,CAAC,EAAE,aAAa,EAAE;QAC1H,IAAI,CAAC,mBAAmB,CAAC,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM;QACrD,IAAI,CAAC,mBAAmB,CAAC,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,SAAS;AAC3D,QAAA,IAAI,CAAC,SAAS,GAAG,IAAI;QACrB,IAAI,CAAC,OAAO,EAAE;;IAIR,UAAU,GAAA;AAChB,QAAA,IAAI,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC,QAAQ;;AAEvC,QAAA,IAAI,CAAC,OAAO,GAAG,CAAA,CAAA,EAAI,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE;;IAI7C,cAAc,CAAC,GAAQ,EAAE,IAAY,EAAA;AACnC,QAAA,IAAI,CAAC,IAAI;AAAE,YAAA,OAAO,IAAI;;QAEtB,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE;AACvB,YAAA,OAAO,GAAG,GAAG,GAAG,CAAC,IAAI,CAAC,GAAG,IAAI;;;QAG/B,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,IAAI,KAAK,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,EAAE,GAAG,CAAC;;AAK7D,IAAA,4BAA4B,CAAC,IAAsC,EAAA;QACzE,MAAM,MAAM,GAAqD,EAAE;AAEnE,QAAA,IAAI,CAAC,OAAO,CAAC,IAAI,IAAG;AAElB,YAAA,IAAI,IAAI,CAAC,eAAe,IAAI,OAAO,EAAE;;;AAGrC,YAAA,IAAI,IAAI,CAAC,eAAe,IAAI,UAAU,EAAE;;;AAGxC,YAAA,IAAI,IAAI,CAAC,eAAe,IAAI,MAAM,EAAE;AAClC,gBAAA,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,YAAY,CAAC;;AAExE,YAAA,IAAI,IAAI,CAAC,eAAe,IAAI,WAAW,EAAE;AACvC,gBAAA,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,kBAAkB,CAAC;;YAG9E,MAAM,GAAG,GAAG,CAAA,EAAG,IAAI,CAAC,eAAe,CAAA,CAAA,EAAI,IAAI,CAAC,eAAe,CAAA,CAAE;AAC7D,YAAA,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE;gBAChB,MAAM,CAAC,GAAG,CAAC,GAAG;oBACZ,eAAe,EAAE,IAAI,CAAC,eAAe;oBACrC,eAAe,EAAE,IAAI,CAAC,eAAe;AACrC,oBAAA,SAAS,EAAE;iBACZ;;YAEH,MAAM,aAAa,GAAG,IAAI,CAAC,aAAa,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,QAAQ,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,eAAe,CAAC;;YAE5H,IAAI,aAAa,EAAE;gBACjB,MAAM,CAAC,GAAG,CAAC,CAAC,SAAS,GAAG,CAAC,IAAI,CAAC,CAAC;;iBAC1B;;AAEL,gBAAA,MAAM,aAAa,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,KAAK,IAAI,CAAC,KAAK,IAAI,CAAC,CAAC,QAAQ,KAAK,IAAI,CAAC,QAAQ,CAAC;AAClH,gBAAA,IAAI,aAAa,KAAK,CAAC,CAAC,EAAE;AACxB,oBAAA,MAAM,CAAC,GAAG,CAAC,CAAC,SAAS,CAAC,aAAa,CAAC,GAAG,IAAI,CAAC;;qBACvC;AACL,oBAAA,MAAM,CAAC,GAAG,CAAC,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;;;AAGvC,SAAC,CAAC;AAEF,QAAA,OAAO,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC;;AAG9B,IAAA,0BAA0B,CAAC,MAAwE,EAAA;AACjG,QAAA,IAAI,sBAA8B;AAClC,QAAA,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE;YACzB,IAAI,CAAC,2BAA2B,GAAG,IAAI,CAAC,4BAA4B,CAAC,MAAM,CAAC;AAC5E,YAAA,sBAAsB,GAAG,MAAM,CAAC,CAAC,CAAC,EAAE,eAAe;;aAC9C;AACL,YAAA,sBAAsB,GAAG,MAAM,EAAE,eAAe;YAChD,IAAI,CAAC,2BAA2B,GAAG,IAAI,CAAC,4BAA4B,CAAC,CAAC,MAAM,CAAC,CAAC;;AAGhF,QAAA,IAAI,CAAC,oBAAoB,GAAG,IAAI,CAAC,oBAAoB,CAAC,MAAM,CAAC,GAAG,IAAI,GAAG,CAAC,eAAe,IAAI,sBAAsB,CAAC;AAElH,QAAA,IAAI,CAAC,2BAA2B,CAAC,OAAO,CAAC,EAAE,IAAG;AAC5C,YAAA,IAAI,EAAE,CAAC,eAAe,GAAG,sBAAsB,EAAE;AAC/C,gBAAA,EAAE,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,IAAG;AACvB,oBAAA,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,CAAC,CAAC;AACnC,iBAAC,CAAC;;AAEN,SAAC,CAAC;;QAGF,IAAI,CAAC,qCAAqC,EAAE;;IAK9C,qCAAqC,GAAA;AACnC,QAAA,IAAI,CAAC,kCAAkC,GAAG,EAAE;AAC5C,QAAA,IAAI,CAAC,oBAAoB,CAAC,OAAO,CAAC,EAAE,IAAG;AACrC,YAAA,IAAI,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,qBAAqB,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,eAAe,CAAC,EAAE;AACxE,gBAAA,IAAI,CAAC,kCAAkC,CAAC,IAAI,CAAC,EAAE,CAAC;;AAEpD,SAAC,CAAC;;AAGJ,IAAA,sBAAsB,CAAC,CAAiC,EAAA;AAEtD,QAAA,IAAI,GAAG,GAAG,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC,CAAC,eAAe,CAAC,EAAE,KAAK;AAE5D,QAAA,IAAI,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE;AACtB,YAAA,GAAG,GAAG,GAAG,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC;AACnC,YAAA,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC,CAAC,eAAe,CAAC,EAAE,UAAU,CAAC,GAAG,CAAC;;aACvD;AACL,YAAA,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC,CAAC,eAAe,CAAC,EAAE,KAAK,EAAE;;AAEtD,QAAA,IAAI,CAAC,oBAAoB,GAAG,IAAI,CAAC,oBAAoB,CAAC,MAAM,CAAC,GAAG,IAAI,EAAE,GAAG,CAAC,eAAe,IAAI,CAAC,CAAC,eAAe,IAAI,GAAG,CAAC,QAAQ,IAAI,CAAC,CAAC,QAAQ,CAAC,CAAC;QAE9I,UAAU,CAAC,MAAK;YACd,IAAI,CAAC,aAAa,EAAE;SACrB,EAAE,GAAG,CAAC;;IAIT,aAAa,GAAA;AACX,QAAA,IAAI,CAAC,aAAa,GAAG,IAAI;AACzB,QAAA,IAAI,CAAC,SAAS,GAAG,IAAI;QACrB,UAAU,CAAC,MAAK;AACd,YAAA,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC;AAClB,YAAA,IAAI,CAAC,YAAY,GAAG,KAAK;SAC1B,EAAE,GAAG,CAAC;;IAGF,YAAY,GAAA;AACjB,QAAA,IAAI,CAAC,aAAa,GAAG,KAAK;QAC1B,UAAU,CAAC,MAAK;AACd,YAAA,IAAI,CAAC,SAAS,GAAG,IAAI;AACrB,YAAA,IAAI,CAAC,qBAAqB,GAAG,EAAE;AAC/B,YAAA,IAAI,CAAC,mBAAmB,GAAG,EAAE;AAC7B,YAAA,IAAI,CAAC,2BAA2B,GAAG,EAAE;AACrC,YAAA,IAAI,CAAC,oBAAoB,GAAG,EAAE;YAC9B,IAAI,CAAC,OAAO,EAAE;SACf,EAAE,GAAG,CAAC;;IAGF,OAAO,CAAC,eAAe,GAAG,KAAK,EAAA;AACpC,QAAA,MAAM,cAAc,GAAG,IAAI,CAAC,eAAe,EAAE,KAAK;AAElD,QAAA,IAAI,EAAE,GAAQ,IAAI,eAAe,EAAE;AACnC,QAAA,IAAI,MAAM,GAAQ,EAAE,GAAG,cAAc,EAAE;QAEvC,IAAI,cAAc,EAAE;AAClB,YAAA,IAAI,CAAC,sBAAsB,GAAG,MAAM,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC,IAAI,CAAC,KAAK,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,EAAE,CAAC;;aAC3H;AACL,YAAA,IAAI,CAAC,sBAAsB,GAAG,KAAK;;AAGrC,QAAA,KAAK,MAAM,GAAG,IAAI,MAAM,EAAE;YACxB,IAAI,OAAO,MAAM,CAAC,GAAG,CAAC,KAAK,QAAQ,KAAK,MAAM,CAAC,GAAG,CAAC,YAAY,IAAI,IAAI,QAAQ,CAAC,UAAU,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE;AACxG,gBAAA,IAAI,MAAM,CAAC,GAAG,CAAC,YAAY,IAAI,EAAE;AAC/B,oBAAA,MAAM,CAAC,GAAG,CAAC,GAAG,QAAQ,CAAC,UAAU,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,QAAQ,EAAE;;qBAEtD,IAAI,QAAQ,CAAC,UAAU,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,EAAE;oBACzC,MAAM,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE;;;;;QAM1C,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,GAAG,IAAG;AAChC,YAAA,IAAI,MAAM,CAAC,GAAG,CAAC,IAAI,IAAI,IAAI,MAAM,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,MAAM,CAAC,GAAG,CAAC,IAAI,MAAM,IAAI,MAAM,CAAC,GAAG,CAAC,IAAI,WAAW,EAAE;AACnG,gBAAA,IAAI,MAAM,CAAC,GAAG,CAAC,KAAK,GAAG,EAAE;AACvB,oBAAA,MAAM,CAAC,GAAG,CAAC,GAAG,EAAE;;gBAElB,EAAE,CAAC,MAAM,CAAC,GAAG,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC;;AAE/B,SAAC,CAAC;;AAIF,QAAA,IAAI,IAAI,CAAC,mBAAmB,EAAE;AAC5B,YAAA,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC,OAAO,CAAC,GAAG,IAAG;AAClD,gBAAA,IAAI,IAAI,CAAC,mBAAmB,CAAC,GAAG,CAAC,IAAI,IAAI,IAAI,IAAI,CAAC,mBAAmB,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,IAAI,CAAC,mBAAmB,CAAC,GAAG,CAAC,IAAI,MAAM,IAAI,IAAI,CAAC,mBAAmB,CAAC,GAAG,CAAC,IAAI,WAAW,EAAE;AAC3K,oBAAA,EAAE,CAAC,MAAM,CAAC,GAAG,EAAE,IAAI,CAAC,mBAAmB,CAAC,GAAG,CAAC,CAAC;;AAEjD,aAAC,CAAC;;AAGJ,QAAA,IAAI,IAAI,CAAC,SAAS,EAAE;AAClB,YAAA,IAAI,CAAC,SAAS,GAAG,CAAC;;AAGpB,QAAA,IAAI,IAAI,CAAC,UAAU,EAAE;YACnB,IAAI,CAAC,UAAU,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS;YAC1C,IAAI,CAAC,UAAU,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ;;QAG1C,EAAE,CAAC,MAAM,CAAC,WAAW,EAAE,IAAI,CAAC,SAAS,CAAC;QACtC,EAAE,CAAC,MAAM,CAAC,UAAU,EAAE,IAAI,CAAC,QAAQ,CAAC;AAEpC,QAAA,IAAI,IAAI,CAAC,MAAM,IAAI,EAAE,EAAE;YACrB,EAAE,CAAC,MAAM,CAAC,QAAQ,EAAE,IAAI,CAAC,MAAM,CAAC;;AAIlC,QAAA,EAAE,GAAG,EAAE,CAAC,QAAQ,EAAE;AAClB,QAAA,IAAI,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,GAAG,EAAE;AACrD,QAAA,IAAI,UAAU,GAAG,MAAM,CAAC,QAAQ,CAAC,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC,MAAM;AAElE,QAAA,IAAI,UAAU,IAAI,MAAM,EAAE;AACxB,YAAA,IAAI,IAAI,CAAC,eAAe,EAAE;AACxB,gBAAA,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,MAAM,CAAC;AACxB,gBAAA,IAAI,CAAC,qBAAqB,GAAG,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC;;;AAEnE,aAAA;QAEP,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,kBAAkB,EAAE,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC,OAAO,CAAC;QAC/G,IAAI,CAAC,qCAAqC,EAAE;AAE5C,QAAA,IAAI,CAAC,SAAS,GAAG,KAAK;;IAIxB,mBAAmB,GAAA;QACjB,IAAI,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,UAAU,CAAC,SAAS,EAAE;YAC/C,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,UAAU,CAAC,SAAS;YAC1C,IAAI,CAAC,OAAO,EAAE;YACd,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC;;QAG3C,IAAI,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,UAAU,CAAC,QAAQ,EAAE;YAC7C,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,UAAU,CAAC,QAAQ;YACxC,IAAI,CAAC,OAAO,EAAE;YACd,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC;AACvC,YAAAC,2BAAyC,CAAC,2BAA2B,EAAE,IAAI,CAAC,QAAQ,EAAE,IAAI,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC;;;AAKnH,IAAA,sBAAsB,CAAC,OAAiB,EAAA;AACtC,QAAA,IAAI,CAAC,uBAAuB,GAAG,OAAO;QACtC,IAAI,CAAC,sBAAsB,EAAE;;AAG/B,IAAA,6BAA6B,CAAC,YAAoB,EAAA;AAChD,QAAA,IAAI,CAAC,sBAAsB,GAAG,YAAY;;AAG5C,IAAA,2BAA2B,CAAC,YAAoB,EAAA;AAC9C,QAAA,IAAI,CAAC,oBAAoB,GAAG,YAAY;;AAG1C,IAAA,OAAO,CAAC,GAAW,EAAA;QACjB,IAAI,GAAG,EAAE;AACP,YAAA,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,GAAG,CAAC;;;IAIlC,eAAe,CAAC,MAAyB,EAAE,GAAQ,EAAA;QACjD,IAAI,IAAI,CAAC,mBAAmB,IAAI,MAAM,CAAC,OAAO,EAAE;AAC9C,YAAA,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE;;AAExB,QAAA,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,GAAG,CAAC;QAC1B,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,SAAS,CAAC,QAAQ;QAC3C,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC;QAC/C,IAAI,CAAC,oBAAoB,EAAE;;IAI7B,oBAAoB,GAAA;QAClB,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,MAAM,KAAK,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,KAAK,CAAC,MAAM;;IAIrG,aAAa,GAAA;AACX,QAAA,IAAI,IAAI,CAAC,iBAAiB,EAAE;AAC1B,YAAA,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE;;aACjB;YACL,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,IAAG;AAC7C,gBAAA,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,GAAG,CAAC;AAC5B,aAAC,CAAC;;QAEJ,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,SAAS,CAAC,QAAQ;QAC3C,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC;QAC/C,IAAI,CAAC,oBAAoB,EAAE;;AAG7B,IAAA,eAAe,CAAC,MAAW,EAAA;QACzB,MAAM,CAAC,eAAe,EAAE;;AAG1B,IAAA,SAAS,CAAC,GAAQ,EAAA;QAChB,OAAO,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;;AAGxC,IAAA,cAAc,CAAC,GAAW,EAAA;AACxB,QAAA,MAAM,MAAM,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC;QAC3B,MAAM,MAAM,GAAG,IAAI,eAAe,CAAC,MAAM,CAAC,MAAM,CAAC;QACjD,MAAM,SAAS,GAAsC,EAAE;QAEvD,MAAM,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,GAAG,KAAI;;AAE5B,YAAA,IAAI,SAAS,CAAC,cAAc,CAAC,GAAG,CAAC,EAAE;;gBAEjC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,EAAE;AAClC,oBAAA,SAAS,CAAC,GAAG,CAAC,GAAG,CAAC,SAAS,CAAC,GAAG,CAAW,CAAC,CAAC;;;gBAG7C,SAAS,CAAC,GAAG,CAAc,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;;iBACpC;;AAEL,gBAAA,SAAS,CAAC,GAAG,CAAC,GAAG,KAAK;;AAE1B,SAAC,CAAC;AAEF,QAAA,OAAO,SAAS;;AAIlB,IAAA,aAAa,CAAC,UAAkB,EAAA;QAC9B,MAAM,KAAK,GAAG,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,UAAU,CAAC;QACvD,OAAO,KAAK,KAAK,CAAC,CAAC,IAAI,KAAK,GAAG,IAAI,CAAC,sBAAsB;;AAG5D,IAAA,WAAW,CAAC,UAAkB,EAAA;QAC5B,MAAM,KAAK,GAAG,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,UAAU,CAAC;QACvD,IAAI,KAAK,KAAK,CAAC,CAAC;AAAE,YAAA,OAAO,KAAK;QAC9B,OAAO,KAAK,IAAI,IAAI,CAAC,gBAAgB,CAAC,MAAM,GAAG,IAAI,CAAC,oBAAoB;;AAG1E,IAAA,gBAAgB,CAAC,MAAsC,EAAA;;AAErD,QAAA,IAAI,MAAM,CAAC,KAAK,EAAE;YAChB,OAAO;AACL,gBAAA,YAAY,EAAE,MAAM,CAAC,KAAK,KAAK,OAAO;AACtC,gBAAA,WAAW,EAAE,MAAM,CAAC,KAAK,KAAK,MAAM;AACpC,gBAAA,aAAa,EAAE,MAAM,CAAC,KAAK,KAAK;aACjC;;aACI;;AAEL,YAAA,QAAQ,MAAM,CAAC,IAAI;AACjB,gBAAA,KAAK,OAAO;AACZ,gBAAA,KAAK,UAAU;AACb,oBAAA,OAAO,EAAE,YAAY,EAAE,IAAI,EAAE;AAC/B,gBAAA,KAAK,QAAQ;AACX,oBAAA,OAAO,EAAE,aAAa,EAAE,IAAI,EAAE;AAChC,gBAAA;AACE,oBAAA,OAAO,EAAE;;;;AAMjB,IAAA,gBAAgB,CAAC,GAAQ,EAAA;AACvB,QAAA,OAAO,IAAI,CAAC,UAAU,CAAC;cACnB,IAAI,CAAC,UAAU,CAAC,uBAAuB,CAAC,GAAG;cAC3C,IAAI;;AAIV,IAAA,IAAI,CAAC,KAAyB,EAAA;;QAE5B,IAAI,KAAK,CAAC,aAAa,KAAK,KAAK,CAAC,YAAY,EAAE;YAC9C;;;AAIF,QAAA,MAAM,WAAW,GAAG,CAAC,GAAG,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,KAAK,CAAC;QAEzD,IAAI,CAAC,WAAW,IAAI,WAAW,CAAC,MAAM,KAAK,CAAC,EAAE;YAC5C;;;QAIF,eAAe,CAAC,WAAW,EAAE,KAAK,CAAC,aAAa,EAAE,KAAK,CAAC,YAAY,CAAC;;QAGrE,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,IAAI,CAAC,WAAW,CAAC;;AAG5C,QAAA,IAAI,CAAC,sBAAsB,CAAC,IAAI,CAAC,WAAW,CAAC;;AAG/C,IAAA,iBAAiB,CAAC,MAAW,EAAA;AAC3B,QAAA,IAAI,MAAM,EAAE,QAAQ,EAAE;YACpB,MAAM,CAAC,QAAQ,EAAE;;AACZ,aAAA,IAAI,MAAM,EAAE,MAAM,EAAE;AACzB,YAAA,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC;;;AAI/B,IAAA,uBAAuB,CAAC,MAAW,EAAA;AACjC,QAAA,IAAI,MAAM,EAAE,cAAc,EAAE;YAC1B,MAAM,CAAC,cAAc,EAAE;;AAClB,aAAA,IAAI,MAAM,EAAE,YAAY,EAAE;AAC/B,YAAA,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,YAAY,CAAC;;;uGAhyB1B,4BAA4B,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAX,IAAA,CAAA,SAAA,EAAA,EAAA,EAAA,KAAA,EAAAY,UAAA,EAAA,EAAA,EAAA,KAAA,EAAAX,IAAA,CAAA,cAAA,EAAA,EAAA,EAAA,KAAA,EAAAA,IAAA,CAAA,MAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,QAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,kBAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;2FAA5B,4BAA4B,EAAA,YAAA,EAAA,KAAA,EAAA,QAAA,EAAA,wBAAA,EAAA,MAAA,EAAA,EAAA,4BAAA,EAAA,8BAAA,EAAA,CAAA,EAAA,GAAA,EAAA,aAAA,EAAA,eAAA,EAAA,SAAA,EAAA,WAAA,EAAA,iBAAA,EAAA,mBAAA,EAAA,WAAA,EAAA,aAAA,EAAA,UAAA,EAAA,YAAA,EAAA,eAAA,EAAA,iBAAA,EAAA,aAAA,EAAA,eAAA,EAAA,eAAA,EAAA,iBAAA,EAAA,6BAAA,EAAA,+BAAA,EAAA,kBAAA,EAAA,oBAAA,EAAA,sBAAA,EAAA,wBAAA,EAAA,oBAAA,EAAA,sBAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,kBAAA,EAAA,oBAAA,EAAA,uBAAA,EAAA,yBAAA,EAAA,kBAAA,EAAA,oBAAA,EAAA,uBAAA,EAAA,yBAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,sBAAA,EAAA,wBAAA,EAAA,eAAA,EAAA,iBAAA,EAAA,QAAA,EAAA,UAAA,EAAA,iBAAA,EAAA,mBAAA,EAAA,SAAA,EAAA,WAAA,EAAA,eAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,YAAA,EAAA,mBAAA,EAAA,qBAAA,EAAA,sBAAA,EAAA,wBAAA,EAAA,mBAAA,EAAA,qBAAA,EAAA,YAAA,EAAA,cAAA,EAAA,eAAA,EAAA,iBAAA,EAAA,EAAA,OAAA,EAAA,EAAA,sBAAA,EAAA,wBAAA,EAAA,aAAA,EAAA,eAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,eAAA,EAAA,iBAAA,EAAA,kBAAA,EAAA,oBAAA,EAAA,sBAAA,EAAA,wBAAA,EAAA,EAAA,SAAA,EAF5B,CAAC,YAAY,CAAC,gEAsFd,OAAO,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,WAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAkBP,YAAY,EAAA,WAAA,EAAA,IAAA,EAAA,CAAA,EAAA,aAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECnIzB,m+mBAsRU,EAAA,MAAA,EAAA,CAAA,stBAAA,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,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,gBAAA,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,CAAA,yBAAA,EAAA,kBAAA,EAAA,0BAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,8MAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,eAAA,EAAA,QAAA,EAAA,2CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,eAAA,EAAA,MAAA,EAAA,CAAA,aAAA,EAAA,UAAA,EAAA,SAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,QAAA,EAAA,CAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,UAAA,EAAA,QAAA,EAAA,cAAA,EAAA,MAAA,EAAA,CAAA,QAAA,EAAA,aAAA,EAAA,UAAA,EAAA,qBAAA,EAAA,OAAA,EAAA,MAAA,EAAA,YAAA,EAAA,kBAAA,EAAA,oBAAA,EAAA,YAAA,EAAA,YAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAE,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,SAAA,EAAA,SAAA,EAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,YAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,CAAA,oBAAA,EAAA,OAAA,EAAA,YAAA,EAAA,YAAA,EAAA,iBAAA,EAAA,WAAA,CAAA,EAAA,QAAA,EAAA,CAAA,cAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,SAAA,EAAA,QAAA,EAAA,+CAAA,EAAA,MAAA,EAAA,CAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,SAAA,EAAA,QAAA,EAAA,+CAAA,EAAA,MAAA,EAAA,CAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAU,GAAA,CAAA,QAAA,EAAA,QAAA,EAAA,yHAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,IAAA,EAAA,aAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,EAAA,mBAAA,EAAA,kBAAA,EAAA,OAAA,EAAA,UAAA,EAAA,qBAAA,CAAA,EAAA,QAAA,EAAA,CAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,KAAA,CAAA,kBAAA,EAAA,QAAA,EAAA,mCAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,MAAA,EAAA,OAAA,EAAA,UAAA,EAAA,aAAA,CAAA,EAAA,QAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAV,IAAA,CAAA,SAAA,EAAA,QAAA,EAAA,6GAAA,EAAA,QAAA,EAAA,CAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAW,KAAA,CAAA,YAAA,EAAA,QAAA,EAAA,eAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,WAAA,EAAA,QAAA,EAAA,UAAA,EAAA,iBAAA,EAAA,cAAA,EAAA,sBAAA,EAAA,cAAA,EAAA,UAAA,CAAA,EAAA,OAAA,EAAA,CAAA,MAAA,CAAA,EAAA,QAAA,EAAA,CAAA,cAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,KAAA,CAAA,QAAA,EAAA,QAAA,EAAA,6BAAA,EAAA,QAAA,EAAA,CAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,KAAA,CAAA,gBAAA,EAAA,QAAA,EAAA,oBAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,KAAA,CAAA,eAAA,EAAA,QAAA,EAAA,mBAAA,EAAA,MAAA,EAAA,CAAA,iBAAA,EAAA,uBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,KAAA,CAAA,YAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,CAAA,cAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,KAAA,CAAA,UAAA,EAAA,QAAA,EAAA,cAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,KAAA,CAAA,SAAA,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,CAAA,kBAAA,EAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,KAAA,CAAA,aAAA,EAAA,QAAA,EAAA,sCAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,KAAA,CAAA,OAAA,EAAA,QAAA,EAAA,wBAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,KAAA,CAAA,YAAA,EAAA,QAAA,EAAA,oCAAA,EAAA,QAAA,EAAA,CAAA,cAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,KAAA,CAAA,MAAA,EAAA,QAAA,EAAA,sBAAA,EAAA,QAAA,EAAA,CAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,KAAA,CAAA,YAAA,EAAA,QAAA,EAAA,2BAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,GAAA,CAAA,WAAA,EAAA,QAAA,EAAA,cAAA,EAAA,MAAA,EAAA,CAAA,YAAA,EAAA,iBAAA,EAAA,kBAAA,EAAA,eAAA,EAAA,eAAA,EAAA,WAAA,EAAA,IAAA,EAAA,UAAA,EAAA,eAAA,EAAA,MAAA,EAAA,OAAA,EAAA,eAAA,EAAA,UAAA,EAAA,OAAA,EAAA,qBAAA,EAAA,SAAA,EAAA,UAAA,EAAA,eAAA,CAAA,EAAA,OAAA,EAAA,CAAA,QAAA,EAAA,qBAAA,CAAA,EAAA,QAAA,EAAA,CAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,GAAA,CAAA,WAAA,EAAA,QAAA,EAAA,8BAAA,EAAA,MAAA,EAAA,CAAA,wBAAA,EAAA,iBAAA,EAAA,wBAAA,EAAA,IAAA,EAAA,qBAAA,EAAA,qBAAA,EAAA,4BAAA,EAAA,2BAAA,EAAA,0BAAA,EAAA,+BAAA,EAAA,2BAAA,EAAA,6BAAA,CAAA,EAAA,OAAA,EAAA,CAAA,oBAAA,EAAA,oBAAA,EAAA,mBAAA,EAAA,mBAAA,CAAA,EAAA,QAAA,EAAA,CAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,GAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,aAAA,EAAA,iBAAA,EAAA,oBAAA,EAAA,iBAAA,EAAA,mBAAA,EAAA,yBAAA,EAAA,iBAAA,EAAA,0BAAA,EAAA,qBAAA,EAAA,yBAAA,EAAA,cAAA,CAAA,EAAA,OAAA,EAAA,CAAA,gBAAA,EAAA,iBAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,eAAA,EAAA,gBAAA,EAAA,cAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,GAAA,CAAA,aAAA,EAAA,QAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,CAAA,uBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,kBAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,CAAA,cAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,sBAAA,EAAA,QAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,CAAA,8BAAA,EAAA,GAAA,EAAA,eAAA,EAAA,gBAAA,EAAA,SAAA,EAAA,iBAAA,EAAA,eAAA,CAAA,EAAA,OAAA,EAAA,CAAA,wBAAA,EAAA,6BAAA,EAAA,2BAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAA,EAAA,CAAA,SAAA,EAAA,IAAA,EAAA,OAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAA,EAAA,CAAA,WAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAAC,WAAA,EAAA,IAAA,EAAA,SAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAAC,eAAA,EAAA,IAAA,EAAA,aAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAAC,0BAAA,EAAA,IAAA,EAAA,wBAAA,EAAA,CAAA,EAAA,CAAA;;2FDzPG,4BAA4B,EAAA,UAAA,EAAA,CAAA;kBAPxC,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,wBAAwB,EACtB,UAAA,EAAA,KAAK,EAGN,SAAA,EAAA,CAAC,YAAY,CAAC,EAAA,QAAA,EAAA,m+mBAAA,EAAA,MAAA,EAAA,CAAA,stBAAA,CAAA,EAAA;oNAKE,4BAA4B,EAAA,CAAA;sBAAtD,KAAK;uBAAC,EAAE,QAAQ,EAAE,IAAI,EAAE;gBACE,CAAC,EAAA,CAAA;sBAA3B,KAAK;uBAAC,EAAE,QAAQ,EAAE,IAAI,EAAE;gBACE,aAAa,EAAA,CAAA;sBAAvC,KAAK;uBAAC,EAAE,QAAQ,EAAE,IAAI,EAAE;gBACE,SAAS,EAAA,CAAA;sBAAnC,KAAK;uBAAC,EAAE,QAAQ,EAAE,IAAI,EAAE;gBAChB,iBAAiB,EAAA,CAAA;sBAAzB;gBACQ,WAAW,EAAA,CAAA;sBAAnB;gBACQ,UAAU,EAAA,CAAA;sBAAlB;gBACQ,eAAe,EAAA,CAAA;sBAAvB;gBACQ,aAAa,EAAA,CAAA;sBAArB;gBACQ,eAAe,EAAA,CAAA;sBAAvB;gBACQ,6BAA6B,EAAA,CAAA;sBAArC;gBACQ,kBAAkB,EAAA,CAAA;sBAA1B;gBACQ,sBAAsB,EAAA,CAAA;sBAA9B;gBACQ,oBAAoB,EAAA,CAAA;sBAA5B;gBACQ,cAAc,EAAA,CAAA;sBAAtB;gBAC0B,kBAAkB,EAAA,CAAA;sBAA5C,KAAK;uBAAC,EAAE,QAAQ,EAAE,IAAI,EAAE;gBAUhB,uBAAuB,EAAA,CAAA;sBAA/B;gBAE0B,kBAAkB,EAAA,CAAA;sBAA5C,KAAK;uBAAC,EAAE,QAAQ,EAAE,IAAI,EAAE;gBAIhB,uBAAuB,EAAA,CAAA;sBAA/B;gBAKS,sBAAsB,EAAA,CAAA;sBAA/B;gBAGQ,cAAc,EAAA,CAAA;sBAAtB;gBAES,aAAa,EAAA,CAAA;sBAAtB;gBAEQ,sBAAsB,EAAA,CAAA;sBAA9B;gBACQ,eAAe,EAAA,CAAA;sBAAvB;gBAEQ,QAAQ,EAAA,CAAA;sBAAhB;gBACS,cAAc,EAAA,CAAA;sBAAvB;gBACQ,iBAAiB,EAAA,CAAA;sBAAzB;gBAEQ,SAAS,EAAA,CAAA;sBAAjB;gBACS,eAAe,EAAA,CAAA;sBAAxB;gBAEQ,eAAe,EAAA,CAAA;sBAAvB;gBAEQ,UAAU,EAAA,CAAA;sBAAlB;gBA0BuB,IAAI,EAAA,CAAA;sBAA3B,SAAS;uBAAC,OAAO;gBAkBW,SAAS,EAAA,CAAA;sBAArC,SAAS;uBAAC,YAAY;gBAqBd,mBAAmB,EAAA,CAAA;sBAA3B;gBACQ,sBAAsB,EAAA,CAAA;sBAA9B;gBACQ,mBAAmB,EAAA,CAAA;sBAA3B;gBACQ,YAAY,EAAA,CAAA;sBAApB;gBACS,kBAAkB,EAAA,CAAA;sBAA3B;gBAOQ,eAAe,EAAA,CAAA;sBAAvB;gBACS,sBAAsB,EAAA,CAAA;sBAA/B;;;ME9JU,QAAQ,CAAA;IACnB,aAAa,GAAG,CAAC;AAEjB,IAAA,SAAS,CAAC,KAAsB,EAAA;AAC9B,QAAA,IAAG,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,EAAC;AACnB,YAAA,IAAI,UAAU,GAAS,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,IAAI,CAAC,aAAa,CAAC;YAC1E,IAAI,aAAa,GAAG,MAAM,CAAC,UAAU,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC;AAClD,YAAA,IAAG,aAAa,EAAE,MAAM,GAAG,CAAC,EAAC;AAC3B,gBAAA,IAAI,cAAc,GAAG,aAAa,CAAC,CAAC,CAAC;gBACrC,IAAG,cAAc,EAAE,MAAM,GAAG,IAAI,CAAC,aAAa,EAAC;AAC7C,oBAAA,UAAU,GAAG,CAAA,EAAG,UAAU,CAAA,CAAE;oBAC5B,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,IAAI,IAAI,CAAC,aAAa,GAAG,cAAc,EAAE,MAAM,CAAC,EAAE,KAAK,EAAE,EAAE;AAClF,wBAAA,UAAU,GAAG,CAAA,EAAG,UAAU,CAAA,CAAA,CAAG;;;;iBAI/B;AACF,gBAAA,UAAU,GAAG,CAAG,EAAA,aAAa,CAAC,CAAC,CAAC,OAAO;;AAEzC,YAAA,OAAO,UAAU;;aAEf;AACF,YAAA,OAAO,CAAC;;;AAIZ,IAAA,WAAW,CAAC,MAAc,EAAE,QAAQ,GAAG,CAAC,EAAA;QACtC,MAAM,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,QAAQ,CAAC;QACzC,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,UAAU,CAAC,GAAG,UAAU;;uGA5B1C,QAAQ,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,IAAA,EAAA,CAAA;qGAAR,QAAQ,EAAA,YAAA,EAAA,KAAA,EAAA,IAAA,EAAA,KAAA,EAAA,CAAA;;2FAAR,QAAQ,EAAA,UAAA,EAAA,CAAA;kBAJpB,IAAI;AAAC,YAAA,IAAA,EAAA,CAAA;AACF,oBAAA,IAAI,EAAE,KAAK;AACX,oBAAA,UAAU,EAAE;AACf,iBAAA;;;MCCY,KAAK,CAAA;IAChB,aAAa,GAAG,CAAC;AAEjB,IAAA,SAAS,CAAC,KAAsB,EAAA;AAC9B,QAAA,IAAG,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,EAAC;AACnB,YAAA,IAAI,UAAU,GAAS,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,IAAI,CAAC,aAAa,CAAC;YAC1E,IAAI,aAAa,GAAG,MAAM,CAAC,UAAU,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC;AAClD,YAAA,IAAG,aAAa,EAAE,MAAM,GAAG,CAAC,EAAC;AAC3B,gBAAA,IAAI,cAAc,GAAG,aAAa,CAAC,CAAC,CAAC;gBACrC,IAAG,cAAc,EAAE,MAAM,GAAG,IAAI,CAAC,aAAa,EAAC;AAC7C,oBAAA,UAAU,GAAG,CAAA,EAAG,UAAU,CAAA,CAAE;oBAC5B,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,IAAI,IAAI,CAAC,aAAa,GAAG,cAAc,EAAE,MAAM,CAAC,EAAE,KAAK,EAAE,EAAE;AAClF,wBAAA,UAAU,GAAG,CAAA,EAAG,UAAU,CAAA,CAAA,CAAG;;;;iBAI/B;AACF,gBAAA,UAAU,GAAG,CAAG,EAAA,aAAa,CAAC,CAAC,CAAC,OAAO;;AAEzC,YAAA,OAAO,UAAU;;aAEf;AACF,YAAA,OAAO,CAAC;;;AAIZ,IAAA,WAAW,CAAC,MAAc,EAAE,QAAQ,GAAG,CAAC,EAAA;QACtC,MAAM,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,QAAQ,CAAC;QACzC,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,UAAU,CAAC,GAAG,UAAU;;uGA5B1C,KAAK,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,IAAA,EAAA,CAAA;qGAAL,KAAK,EAAA,YAAA,EAAA,KAAA,EAAA,IAAA,EAAA,OAAA,EAAA,CAAA;;2FAAL,KAAK,EAAA,UAAA,EAAA,CAAA;kBAJjB,IAAI;AAAC,YAAA,IAAA,EAAA,CAAA;AACF,oBAAA,IAAI,EAAE,OAAO;AACb,oBAAA,UAAU,EAAE;AACf,iBAAA;;;AC4BD,MAAM,UAAU,GAAG;IACjB;CACD;AAED,MAAM,KAAK,GAAG;IACZ,WAAW;IACX,eAAe;IACf,0BAA0B;IAC1B,QAAQ;IACR,KAAK;CACN;AAED,MAAM,SAAS,GAAG;IAChB,gBAAgB;IAChB,aAAa;IACb,kBAAkB;IAClB,eAAe;IACf,cAAc;IACd,iBAAiB;IACjB,wBAAwB;IACxB,eAAe;IACf,kBAAkB;AAClB,IAAA,YAAY;IACZ,eAAe;IACf,cAAc;IACd,iBAAiB;IACjB,aAAa;IACb;CACD;MA2BY,yBAAyB,CAAA;uGAAzB,yBAAyB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,QAAA,EAAA,CAAA;wGAAzB,yBAAyB,EAAA,YAAA,EAAA,CAtDpC,kBAAkB,EAIlB,WAAW;YACX,eAAe;YACf,0BAA0B;YAC1B,QAAQ;AACR,YAAA,KAAK,EA0BH,4BAA4B;YAC5B,sBAAsB;YACtB,8BAA8B;YAC9B,4BAA4B;YAC5B,iCAAiC;AACjC,YAAA,wCAAwC,aAGxC,YAAY;YACZ,WAAW;YACX,mBAAmB;YACnB,UAAU;AACV,YAAA,YAAY,EAlCd,gBAAgB;YAChB,aAAa;YACb,kBAAkB;YAClB,eAAe;YACf,cAAc;YACd,iBAAiB;YACjB,wBAAwB;YACxB,eAAe;YACf,kBAAkB;AAClB,YAAA,YAAY;YACZ,eAAe;YACf,cAAc;YACd,iBAAiB;YACjB,aAAa;YACb,gBAAgB,EAsBd,cAAc,CAAA,EAAA,OAAA,EAAA,CAGd,4BAA4B,CAAA,EAAA,CAAA;AAGnB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,yBAAyB,YAZlC,YAAY;YACZ,WAAW;YACX,mBAAmB,EAGhB,SAAS,EACZ,cAAc,CAAA,EAAA,CAAA;;2FAML,yBAAyB,EAAA,UAAA,EAAA,CAAA;kBAxBrC,QAAQ;AAAC,YAAA,IAAA,EAAA,CAAA;AACR,oBAAA,YAAY,EAAE;AACZ,wBAAA,GAAG,UAAU;AACb,wBAAA,GAAG,KAAK;wBACR,4BAA4B;wBAC5B,sBAAsB;wBACtB,8BAA8B;wBAC9B,4BAA4B;wBAC5B,iCAAiC;wBACjC;AACD,qBAAA;AACD,oBAAA,OAAO,EAAE;wBACP,YAAY;wBACZ,WAAW;wBACX,mBAAmB;wBACnB,UAAU;wBACV,YAAY;AACZ,wBAAA,GAAG,SAAS;wBACZ;AACD,qBAAA;AACD,oBAAA,OAAO,EAAE;wBACP;AACD;AACF,iBAAA;;;ACvFD;;AAEG;;ACFH;;AAEG;;;;"}