@obliczeniowo/elementary
Version:
Library made in Angular version 19
1 lines • 21.8 kB
Source Map (JSON)
{"version":3,"file":"obliczeniowo-elementary-array-to-table.mjs","sources":["../../../../projects/components/array-to-table/components/editable-cell/editable-cell.component.ts","../../../../projects/components/array-to-table/components/editable-cell/editable-cell.component.html","../../../../projects/components/array-to-table/components/pipe/is.pipe.ts","../../../../projects/components/array-to-table/components/pipe/is-template.pipe.ts","../../../../projects/components/array-to-table/components/array-to-table/array-to-table.component.ts","../../../../projects/components/array-to-table/components/array-to-table/array-to-table.component.html","../../../../projects/components/array-to-table/array-to-table.module.ts","../../../../projects/components/array-to-table/obliczeniowo-elementary-array-to-table.ts"],"sourcesContent":["import { ElementaryMath } from '@obliczeniowo/elementary/math';\r\nimport {\r\n Component,\r\n HostListener,\r\n ElementRef,\r\n HostBinding,\r\n input,\r\n model,\r\n effect,\r\n} from '@angular/core';\r\n\r\n@Component({\r\n selector: 'td[obl-editable-cell]',\r\n templateUrl: './editable-cell.component.html',\r\n styleUrls: ['./editable-cell.component.scss'],\r\n standalone: false\r\n})\r\nexport class EditableCellComponent {\r\n value = model.required<string | number | { [key: string]: number | string }>();\r\n\r\n editable = input<boolean>(true);\r\n\r\n type: 'string' | 'number' | 'json' | 'none' = 'none';\r\n\r\n inputValue: string | number | undefined;\r\n\r\n @HostBinding('class.focus')\r\n focus: boolean = false;\r\n\r\n @HostBinding('class.number') get isNumber(): boolean {\r\n return this.type === 'number';\r\n }\r\n\r\n @HostBinding('class.string') get isText(): boolean {\r\n return this.type === 'string';\r\n }\r\n\r\n @HostListener('click') clicked() {\r\n if (this.editable()) {\r\n this.focus = true;\r\n }\r\n }\r\n\r\n blur(event: any) {\r\n console.log(event.target.value)\r\n this.value.set(event.target.value);\r\n this.focus = false;\r\n }\r\n\r\n constructor(protected elementRef: ElementRef<HTMLElement>) {\r\n effect(() => {\r\n this.value();\r\n this.changed();\r\n }, {\r\n allowSignalWrites: true\r\n });\r\n }\r\n\r\n ngAfterViewChecked(): void {\r\n if (this.focus) {\r\n const input = this.elementRef.nativeElement.querySelector('input');\r\n\r\n if (input) {\r\n input.focus();\r\n }\r\n }\r\n }\r\n\r\n changed() {\r\n const value = this.value();\r\n const isString = typeof value === 'string';\r\n if (isString || typeof value === 'number') {\r\n if (isString && ElementaryMath.isNumeric(value as string, true)) {\r\n this.value.set(parseFloat(value as string));\r\n }\r\n this.type = typeof value as any;\r\n this.inputValue = value as any;\r\n } else if (value === undefined) {\r\n this.type = 'none';\r\n this.inputValue = '';\r\n } else {\r\n this.type = 'json';\r\n this.inputValue = 'object';\r\n }\r\n }\r\n}\r\n","@if (editable() && focus && (type === 'string' || type === 'number')) {\r\n <obl-input-wrapper\r\n display=\"none\"\r\n >\r\n <input oblInput type=\"text\" [value]=\"inputValue\" (blur)=\"blur($event)\" />\r\n </obl-input-wrapper>\r\n} @else {\r\n {{ inputValue }}\r\n}\r\n","import { Pipe, PipeTransform } from '@angular/core';\r\n\r\n@Pipe({\r\n name: 'is',\r\n standalone: false\r\n})\r\nexport class IsPipe implements PipeTransform {\r\n transform(value: any, ...args: ['string' | 'number']): boolean {\r\n // eslint-disable-next-line valid-typeof\r\n return typeof value === args[0];\r\n }\r\n}\r\n","import { Pipe, PipeTransform, TemplateRef } from '@angular/core';\r\n\r\n@Pipe({\r\n name: 'isTemplate',\r\n standalone: false\r\n})\r\nexport class IsTemplatePipe implements PipeTransform {\r\n transform(value: any, ...args: unknown[]): TemplateRef<any> | undefined {\r\n return value instanceof TemplateRef && value || undefined;\r\n }\r\n}\r\n","import { PageControllerRecordAdapter } from '@obliczeniowo/elementary/scroller-nav';\r\nimport { ElementaryMath } from '@obliczeniowo/elementary/math';\r\nimport { OblFileService, Csv } from '@obliczeniowo/elementary/files';\r\nimport {\r\n Component,\r\n ElementRef,\r\n Input,\r\n SimpleChanges,\r\n ChangeDetectorRef,\r\n Output,\r\n EventEmitter,\r\n TemplateRef,\r\n input,\r\n} from '@angular/core';\r\n\r\ninterface Record {\r\n x: number;\r\n y: number;\r\n value: string | number;\r\n}\r\n\r\n/**\r\n * Component prepared to display raw data like text/numbers as a quick formatted table\r\n */\r\n@Component({\r\n selector: 'obl-array-to-table',\r\n templateUrl: './array-to-table.component.html',\r\n styleUrls: ['./array-to-table.component.scss'],\r\n standalone: false\r\n})\r\nexport class ArrayToTableComponent {\r\n /**\r\n * Array of elements to display number/string/table of number/string\r\n */\r\n @Input() array: (string | number)[] | (string | number)[][] = [];\r\n /** */\r\n headers = input<string[] | undefined>([]);\r\n /**\r\n * Caption text of table to display\r\n */\r\n caption = input<string | TemplateRef<any> | undefined>();\r\n /**\r\n * Maximum number of columns in one line, if number of columns is greater then this value\r\n * then it will split data in new record line\r\n */\r\n maxLength = input<number | undefined>();\r\n /** */\r\n editable = input<boolean>(false);\r\n /** */\r\n display = input<{ index?: boolean; download?: 'json' | 'csv' }>({\r\n index: true,\r\n download: 'csv',\r\n });\r\n\r\n @Output() arrayChanged: EventEmitter<(string | number)[][]> =\r\n new EventEmitter<(string | number)[][]>();\r\n\r\n /**\r\n * Prepared to display data\r\n */\r\n records: Record[][] = [];\r\n /**\r\n * body of table reference for scroller\r\n */\r\n tbody: HTMLElement | null = null;\r\n /**\r\n * y table wrapper reference for scroller\r\n */\r\n yWrapper: HTMLElement | null = null;\r\n\r\n pageAdapter: PageControllerRecordAdapter = new PageControllerRecordAdapter(\r\n this.records.length\r\n );\r\n\r\n constructor(\r\n protected elementRef: ElementRef<HTMLElement>,\r\n protected change: ChangeDetectorRef,\r\n protected file: OblFileService\r\n ) {}\r\n\r\n ngOnChanges(changes: SimpleChanges): void {\r\n if (changes.array || changes.maxLength) {\r\n this.array = this.array.map((v) => {\r\n if (v instanceof Array) {\r\n return v;\r\n }\r\n return [v];\r\n });\r\n\r\n this.records =\r\n this.convert().reduce((p, c) => {\r\n const copy = [...c];\r\n while (this.maxLength() && copy.length > (this.maxLength() || 0)) {\r\n p.push(copy.splice(0, this.maxLength()));\r\n }\r\n if (copy.length) {\r\n p.push(copy);\r\n }\r\n return p;\r\n }, [] as Record[][]) || [];\r\n\r\n this.pageAdapter.setMax(this.records.length);\r\n }\r\n }\r\n\r\n ngAfterViewInit() {\r\n setTimeout(() => {\r\n this.tbody = this.elementRef.nativeElement.querySelector('tbody');\r\n this.yWrapper = this.elementRef.nativeElement.querySelector('.y-wrapper');\r\n });\r\n }\r\n\r\n downloadCsv(name: string = 'Table') {\r\n if (this.array.length) {\r\n const converted = this.convert();\r\n const csv = Csv.fromArray(\r\n converted.map((v) => v.map((v) => v.value)),\r\n this.headers()\r\n );\r\n\r\n this.file.saveTextFile(csv.prepare(), name, 'text/csv');\r\n }\r\n }\r\n\r\n downloadJson(name: string = 'Table') {\r\n if (this.array.length) {\r\n const converted = this.convert();\r\n const csv = Csv.fromArray(\r\n converted.map((v) => v.map((v) => v.value)),\r\n this.headers()\r\n );\r\n\r\n this.file.saveTextFile(\r\n JSON.stringify(csv.toJson(), undefined, ' '),\r\n name,\r\n 'text/json'\r\n );\r\n }\r\n }\r\n\r\n changed(value: any, record: number, index: number) {\r\n if (ElementaryMath.isNumeric(value, true)) {\r\n value = parseFloat(value);\r\n this.records[record][index].value = value;\r\n (this.array as (string | number)[][])[this.records[record][index].y][\r\n this.records[record][index].x\r\n ] = value;\r\n } else {\r\n this.records[record][index].value = value;\r\n (this.array as (string | number)[][])[this.records[record][index].y][\r\n this.records[record][index].x\r\n ] = value;\r\n }\r\n\r\n this.arrayChanged.emit(this.array as (string | number)[][]);\r\n }\r\n\r\n protected convert(): Record[][] {\r\n return (this.array as (string | number)[][]).map((v, y) =>\r\n v.map((value, x) => ({ x, y, value }))\r\n );\r\n }\r\n}\r\n","<div class=\"table-wrapper\">\r\n <div class=\"y-wrapper\">\r\n <table>\r\n @if (caption()) {\r\n <caption>\r\n @if (caption() | is: 'string') {\r\n {{ caption() }}\r\n } @else {\r\n <ng-container *ngTemplateOutlet=\"(caption() | isTemplate) || captionRef\"></ng-container>\r\n }\r\n </caption>\r\n }\r\n\r\n <tbody>\r\n @if (!maxLength() && headers()?.length) {\r\n @if (!maxLength() && headers()?.length) {\r\n <tr>\r\n @if (display().index) {\r\n <th class=\"index\"></th>\r\n }\r\n @for ( header of headers(); track header) {\r\n <th>{{ header }}</th>\r\n }\r\n </tr>\r\n }\r\n }\r\n @for(record of records; track $index; let vIndex = $index) { \r\n @if (\r\n vIndex >= pageAdapter.position &&\r\n vIndex < pageAdapter.page.jump + pageAdapter.position\r\n ) {\r\n <tr>\r\n @if (display().index) {\r\n <td class=\"index\">{{ vIndex + 1 }}</td>\r\n }\r\n @for (value of record; track value) {\r\n <td\r\n obl-editable-cell\r\n [value]=\"value.value\"\r\n [editable]=\"editable()\"\r\n (valueChanged)=\"changed($event, vIndex, $index)\"\r\n ></td>\r\n }\r\n </tr>\r\n }\r\n }\r\n </tbody>\r\n </table>\r\n </div>\r\n <div class=\"buttons-vertical\">\r\n @if (pageAdapter.getMax() > pageAdapter.page.jump) {\r\n <obl-scroller-nav\r\n [horizontal]=\"false\"\r\n [pageController]=\"pageAdapter\"\r\n [element]=\"tbody\"\r\n ></obl-scroller-nav>\r\n }\r\n\r\n @if (display().download === 'csv') {\r\n <button oblButton (click)=\"downloadCsv()\">\r\n <obl-icon [name]=\"'csv-file'\"></obl-icon>\r\n </button>\r\n }\r\n\r\n @if (display().download === 'json') {\r\n <button oblButton (click)=\"downloadJson()\">\r\n <obl-icon [name]=\"'json-file'\"></obl-icon>\r\n </button>\r\n }\r\n\r\n <ng-content></ng-content>\r\n </div>\r\n</div>\r\n\r\n<obl-scroller-nav [element]=\"yWrapper\"></obl-scroller-nav>\r\n\r\n<ng-template #captionRef></ng-template>","import { NgModule } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\n\r\nimport { ButtonsModule } from '@obliczeniowo/elementary/buttons';\r\nimport { ScrollerNavModule } from '@obliczeniowo/elementary/scroller-nav';\r\nimport { IconsModule } from '@obliczeniowo/elementary/icons';\r\nimport { InputModule } from '@obliczeniowo/elementary/input';\r\n\r\nimport { ArrayToTableComponent } from './components/array-to-table/array-to-table.component';\r\nimport { EditableCellComponent } from './components/editable-cell/editable-cell.component';\r\nimport { FormsModule } from '@angular/forms';\r\nimport { IsPipe } from './components/pipe/is.pipe';\r\nimport { IsTemplatePipe } from './components/pipe/is-template.pipe';\r\n\r\n@NgModule({\r\n declarations: [\r\n ArrayToTableComponent,\r\n EditableCellComponent,\r\n IsPipe,\r\n IsTemplatePipe,\r\n ],\r\n imports: [\r\n CommonModule,\r\n FormsModule,\r\n IconsModule,\r\n ButtonsModule,\r\n ScrollerNavModule,\r\n InputModule,\r\n ],\r\n exports: [\r\n ArrayToTableComponent\r\n ]\r\n})\r\nexport class ArrayToTableModule { }\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1","i6.EditableCellComponent","i7.IsPipe","i8.IsTemplatePipe"],"mappings":";;;;;;;;;;;;;;;;;MAiBa,qBAAqB,CAAA;AAgCV,IAAA,UAAA;AA/BtB,IAAA,KAAK,GAAG,KAAK,CAAC,QAAQ,EAAwD;AAE9E,IAAA,QAAQ,GAAG,KAAK,CAAU,IAAI,CAAC;IAE/B,IAAI,GAA0C,MAAM;AAEpD,IAAA,UAAU;IAGV,KAAK,GAAY,KAAK;AAEtB,IAAA,IAAiC,QAAQ,GAAA;AACvC,QAAA,OAAO,IAAI,CAAC,IAAI,KAAK,QAAQ;;AAG/B,IAAA,IAAiC,MAAM,GAAA;AACrC,QAAA,OAAO,IAAI,CAAC,IAAI,KAAK,QAAQ;;IAGR,OAAO,GAAA;AAC5B,QAAA,IAAI,IAAI,CAAC,QAAQ,EAAE,EAAE;AACnB,YAAA,IAAI,CAAC,KAAK,GAAG,IAAI;;;AAIrB,IAAA,IAAI,CAAC,KAAU,EAAA;QACb,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC;QAC/B,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC;AAClC,QAAA,IAAI,CAAC,KAAK,GAAG,KAAK;;AAGpB,IAAA,WAAA,CAAsB,UAAmC,EAAA;QAAnC,IAAU,CAAA,UAAA,GAAV,UAAU;QAC9B,MAAM,CAAC,MAAK;YACV,IAAI,CAAC,KAAK,EAAE;YACZ,IAAI,CAAC,OAAO,EAAE;AAChB,SAAC,EAAE;AACD,YAAA,iBAAiB,EAAE;AACpB,SAAA,CAAC;;IAGJ,kBAAkB,GAAA;AAChB,QAAA,IAAI,IAAI,CAAC,KAAK,EAAE;AACd,YAAA,MAAM,KAAK,GAAG,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,aAAa,CAAC,OAAO,CAAC;YAElE,IAAI,KAAK,EAAE;gBACT,KAAK,CAAC,KAAK,EAAE;;;;IAKnB,OAAO,GAAA;AACL,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,EAAE;AAC1B,QAAA,MAAM,QAAQ,GAAG,OAAO,KAAK,KAAK,QAAQ;AAC1C,QAAA,IAAI,QAAQ,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE;YACzC,IAAI,QAAQ,IAAI,cAAc,CAAC,SAAS,CAAC,KAAe,EAAE,IAAI,CAAC,EAAE;gBAC/D,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,UAAU,CAAC,KAAe,CAAC,CAAC;;AAE7C,YAAA,IAAI,CAAC,IAAI,GAAG,OAAO,KAAY;AAC/B,YAAA,IAAI,CAAC,UAAU,GAAG,KAAY;;AACzB,aAAA,IAAI,KAAK,KAAK,SAAS,EAAE;AAC9B,YAAA,IAAI,CAAC,IAAI,GAAG,MAAM;AAClB,YAAA,IAAI,CAAC,UAAU,GAAG,EAAE;;aACf;AACL,YAAA,IAAI,CAAC,IAAI,GAAG,MAAM;AAClB,YAAA,IAAI,CAAC,UAAU,GAAG,QAAQ;;;uGAjEnB,qBAAqB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,UAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAArB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,qBAAqB,qhBCjBlC,6RASA,EAAA,MAAA,EAAA,CAAA,mMAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,cAAA,EAAA,QAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,CAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,qBAAA,EAAA,QAAA,EAAA,mBAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,SAAA,EAAA,aAAA,EAAA,MAAA,EAAA,QAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,OAAA,CAAA,EAAA,OAAA,EAAA,CAAA,QAAA,CAAA,EAAA,CAAA,EAAA,CAAA;;2FDQa,qBAAqB,EAAA,UAAA,EAAA,CAAA;kBANjC,SAAS;AACI,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,uBAAuB,cAGrB,KAAK,EAAA,QAAA,EAAA,6RAAA,EAAA,MAAA,EAAA,CAAA,mMAAA,CAAA,EAAA;+EAYnB,KAAK,EAAA,CAAA;sBADJ,WAAW;uBAAC,aAAa;gBAGO,QAAQ,EAAA,CAAA;sBAAxC,WAAW;uBAAC,cAAc;gBAIM,MAAM,EAAA,CAAA;sBAAtC,WAAW;uBAAC,cAAc;gBAIJ,OAAO,EAAA,CAAA;sBAA7B,YAAY;uBAAC,OAAO;;;ME/BV,MAAM,CAAA;AACjB,IAAA,SAAS,CAAC,KAAU,EAAE,GAAG,IAA2B,EAAA;;AAElD,QAAA,OAAO,OAAO,KAAK,KAAK,IAAI,CAAC,CAAC,CAAC;;uGAHtB,MAAM,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,IAAA,EAAA,CAAA;qGAAN,MAAM,EAAA,YAAA,EAAA,KAAA,EAAA,IAAA,EAAA,IAAA,EAAA,CAAA;;2FAAN,MAAM,EAAA,UAAA,EAAA,CAAA;kBAJlB,IAAI;AAAC,YAAA,IAAA,EAAA,CAAA;AACF,oBAAA,IAAI,EAAE,IAAI;AACV,oBAAA,UAAU,EAAE;AACf,iBAAA;;;MCCY,cAAc,CAAA;AACzB,IAAA,SAAS,CAAC,KAAU,EAAE,GAAG,IAAe,EAAA;AACtC,QAAA,OAAO,KAAK,YAAY,WAAW,IAAI,KAAK,IAAI,SAAS;;uGAFhD,cAAc,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,IAAA,EAAA,CAAA;qGAAd,cAAc,EAAA,YAAA,EAAA,KAAA,EAAA,IAAA,EAAA,YAAA,EAAA,CAAA;;2FAAd,cAAc,EAAA,UAAA,EAAA,CAAA;kBAJ1B,IAAI;AAAC,YAAA,IAAA,EAAA,CAAA;AACF,oBAAA,IAAI,EAAE,YAAY;AAClB,oBAAA,UAAU,EAAE;AACf,iBAAA;;;ACgBD;;AAEG;MAOU,qBAAqB,CAAA;AA6CpB,IAAA,UAAA;AACA,IAAA,MAAA;AACA,IAAA,IAAA;AA9CZ;;AAEG;IACM,KAAK,GAAgD,EAAE;;AAEhE,IAAA,OAAO,GAAG,KAAK,CAAuB,EAAE,CAAC;AACzC;;AAEG;IACH,OAAO,GAAG,KAAK,EAAyC;AACxD;;;AAGG;IACH,SAAS,GAAG,KAAK,EAAsB;;AAEvC,IAAA,QAAQ,GAAG,KAAK,CAAU,KAAK,CAAC;;IAEhC,OAAO,GAAG,KAAK,CAAiD;AAC9D,QAAA,KAAK,EAAE,IAAI;AACX,QAAA,QAAQ,EAAE,KAAK;AAChB,KAAA,CAAC;AAEQ,IAAA,YAAY,GACpB,IAAI,YAAY,EAAyB;AAE3C;;AAEG;IACH,OAAO,GAAe,EAAE;AACxB;;AAEG;IACH,KAAK,GAAuB,IAAI;AAChC;;AAEG;IACH,QAAQ,GAAuB,IAAI;IAEnC,WAAW,GAAgC,IAAI,2BAA2B,CACxE,IAAI,CAAC,OAAO,CAAC,MAAM,CACpB;AAED,IAAA,WAAA,CACY,UAAmC,EACnC,MAAyB,EACzB,IAAoB,EAAA;QAFpB,IAAU,CAAA,UAAA,GAAV,UAAU;QACV,IAAM,CAAA,MAAA,GAAN,MAAM;QACN,IAAI,CAAA,IAAA,GAAJ,IAAI;;AAGhB,IAAA,WAAW,CAAC,OAAsB,EAAA;QAChC,IAAI,OAAO,CAAC,KAAK,IAAI,OAAO,CAAC,SAAS,EAAE;AACtC,YAAA,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,KAAI;AAChC,gBAAA,IAAI,CAAC,YAAY,KAAK,EAAE;AACtB,oBAAA,OAAO,CAAC;;gBAEV,OAAO,CAAC,CAAC,CAAC;AACZ,aAAC,CAAC;AAEF,YAAA,IAAI,CAAC,OAAO;gBACV,IAAI,CAAC,OAAO,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,KAAI;AAC7B,oBAAA,MAAM,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC;AACnB,oBAAA,OAAO,IAAI,CAAC,SAAS,EAAE,IAAI,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC,EAAE;AAChE,wBAAA,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,EAAE,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC;;AAE1C,oBAAA,IAAI,IAAI,CAAC,MAAM,EAAE;AACf,wBAAA,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;;AAEd,oBAAA,OAAO,CAAC;AACV,iBAAC,EAAE,EAAgB,CAAC,IAAI,EAAE;YAE5B,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC;;;IAIhD,eAAe,GAAA;QACb,UAAU,CAAC,MAAK;AACd,YAAA,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,aAAa,CAAC,OAAO,CAAC;AACjE,YAAA,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,aAAa,CAAC,YAAY,CAAC;AAC3E,SAAC,CAAC;;IAGJ,WAAW,CAAC,OAAe,OAAO,EAAA;AAChC,QAAA,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE;AACrB,YAAA,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,EAAE;AAChC,YAAA,MAAM,GAAG,GAAG,GAAG,CAAC,SAAS,CACvB,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC,EAC3C,IAAI,CAAC,OAAO,EAAE,CACf;AAED,YAAA,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,OAAO,EAAE,EAAE,IAAI,EAAE,UAAU,CAAC;;;IAI3D,YAAY,CAAC,OAAe,OAAO,EAAA;AACjC,QAAA,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE;AACrB,YAAA,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,EAAE;AAChC,YAAA,MAAM,GAAG,GAAG,GAAG,CAAC,SAAS,CACvB,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC,EAC3C,IAAI,CAAC,OAAO,EAAE,CACf;YAED,IAAI,CAAC,IAAI,CAAC,YAAY,CACpB,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,MAAM,EAAE,EAAE,SAAS,EAAE,IAAI,CAAC,EAC7C,IAAI,EACJ,WAAW,CACZ;;;AAIL,IAAA,OAAO,CAAC,KAAU,EAAE,MAAc,EAAE,KAAa,EAAA;QAC/C,IAAI,cAAc,CAAC,SAAS,CAAC,KAAK,EAAE,IAAI,CAAC,EAAE;AACzC,YAAA,KAAK,GAAG,UAAU,CAAC,KAAK,CAAC;AACzB,YAAA,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,KAAK,CAAC,CAAC,KAAK,GAAG,KAAK;AACxC,YAAA,IAAI,CAAC,KAA+B,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAClE,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAC9B,GAAG,KAAK;;aACJ;AACL,YAAA,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,KAAK,CAAC,CAAC,KAAK,GAAG,KAAK;AACxC,YAAA,IAAI,CAAC,KAA+B,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAClE,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAC9B,GAAG,KAAK;;QAGX,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,KAA8B,CAAC;;IAGnD,OAAO,GAAA;AACf,QAAA,OAAQ,IAAI,CAAC,KAA+B,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,KACpD,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,CAAC,MAAM,EAAE,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,CACvC;;uGAlIQ,qBAAqB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,UAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,iBAAA,EAAA,EAAA,EAAA,KAAA,EAAAA,IAAA,CAAA,cAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAArB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,qBAAqB,m5BC9BlC,42EA4EuC,EAAA,MAAA,EAAA,CAAA,ykBAAA,CAAA,EAAA,YAAA,EAAA,CAAA,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,aAAA,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,OAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,eAAA,EAAA,QAAA,EAAA,wBAAA,EAAA,MAAA,EAAA,CAAA,WAAA,EAAA,MAAA,EAAA,kBAAA,EAAA,SAAA,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,QAAA,CAAA,EAAA,QAAA,EAAA,CAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,MAAA,EAAA,YAAA,EAAA,gBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,qBAAA,EAAA,QAAA,EAAA,uBAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,UAAA,CAAA,EAAA,OAAA,EAAA,CAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAAC,MAAA,EAAA,IAAA,EAAA,IAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAAC,cAAA,EAAA,IAAA,EAAA,YAAA,EAAA,CAAA,EAAA,CAAA;;2FD9C1B,qBAAqB,EAAA,UAAA,EAAA,CAAA;kBANjC,SAAS;AACI,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,oBAAoB,cAGlB,KAAK,EAAA,QAAA,EAAA,42EAAA,EAAA,MAAA,EAAA,CAAA,ykBAAA,CAAA,EAAA;8IAMV,KAAK,EAAA,CAAA;sBAAb;gBAoBS,YAAY,EAAA,CAAA;sBAArB;;;MErBU,kBAAkB,CAAA;uGAAlB,kBAAkB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,QAAA,EAAA,CAAA;AAAlB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,kBAAkB,iBAjB3B,qBAAqB;YACrB,qBAAqB;YACrB,MAAM;AACN,YAAA,cAAc,aAGd,YAAY;YACZ,WAAW;YACX,WAAW;YACX,aAAa;YACb,iBAAiB;AACjB,YAAA,WAAW,aAGX,qBAAqB,CAAA,EAAA,CAAA;AAGZ,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,kBAAkB,YAX3B,YAAY;YACZ,WAAW;YACX,WAAW;YACX,aAAa;YACb,iBAAiB;YACjB,WAAW,CAAA,EAAA,CAAA;;2FAMF,kBAAkB,EAAA,UAAA,EAAA,CAAA;kBAnB9B,QAAQ;AAAC,YAAA,IAAA,EAAA,CAAA;AACR,oBAAA,YAAY,EAAE;wBACZ,qBAAqB;wBACrB,qBAAqB;wBACrB,MAAM;wBACN,cAAc;AACf,qBAAA;AACD,oBAAA,OAAO,EAAE;wBACP,YAAY;wBACZ,WAAW;wBACX,WAAW;wBACX,aAAa;wBACb,iBAAiB;wBACjB,WAAW;AACZ,qBAAA;AACD,oBAAA,OAAO,EAAE;wBACP;AACD;AACF,iBAAA;;;AChCD;;AAEG;;;;"}