@yibozhang/pro-table 16.0.3 → 16.0.4

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":"yibozhang-pro-table.mjs","sources":["../../../pro-table/src/lib/constants.ts","../../../pro-table/src/lib/tokens.ts","../../../pro-table/src/lib/page-container/page-container.component.ts","../../../pro-table/src/lib/page-container/page-container.component.html","../../../pro-table/src/lib/table-search-bar/table-search-bar.component.ts","../../../pro-table/src/lib/table-search-bar/table-search-bar.component.html","../../../pro-table/src/lib/directives/trim-input.directive.ts","../../../pro-table/src/lib/plate-input/plate-input.component.ts","../../../pro-table/src/lib/plate-input/plate-input.component.html","../../../pro-table/src/lib/components/colmuns-setting/colmuns-setting.component.ts","../../../pro-table/src/lib/components/colmuns-setting/colmuns-setting.component.html","../../../pro-table/src/lib/components/dynamic-search-field/dynamic-search-field.component.ts","../../../pro-table/src/lib/pro-table.component.ts","../../../pro-table/src/lib/pro-table.component.html","../../../pro-table/src/lib/page-container/page-container.module.ts","../../../pro-table/src/lib/directives/trim-input.module.ts","../../../pro-table/src/lib/plate-input/plate-input.module.ts","../../../pro-table/src/lib/table-search-bar/table-search-bar-module.ts","../../../pro-table/src/lib/pro-table.module.ts","../../../pro-table/src/lib/plate-input/plate-prefix-load.service.ts","../../../pro-table/src/lib/page-public/antd-form.ts","../../../pro-table/src/lib/page-public/array-form.ts","../../../pro-table/src/lib/utils/modal-width-detector.ts","../../../pro-table/src/lib/utils/select-width-detector.ts","../../../pro-table/src/public-api.ts","../../../pro-table/src/yibozhang-pro-table.ts"],"sourcesContent":["import {\r\n InputFieldProps,\r\n InputPlateFieldProps,\r\n SelectFieldProps,\r\n SelectMultipleFieldProps,\r\n DateFieldProps,\r\n CheckboxFieldProps,\r\n AutoCompleteFieldProps,\r\n CustomFieldProps,\r\n InputNumberFieldProps,\r\n} from \"./type\";\r\n\r\nexport const PRO_TABLE_DEFAULT_PROPS: {\r\n input: InputFieldProps;\r\n inputPlate: InputPlateFieldProps;\r\n select: SelectFieldProps;\r\n selectMultiple: SelectMultipleFieldProps;\r\n date: DateFieldProps;\r\n checkbox: CheckboxFieldProps;\r\n autoComplete: AutoCompleteFieldProps;\r\n custom: CustomFieldProps;\r\n inputNumber: InputNumberFieldProps;\r\n} = {\r\n input: {\r\n name: \"\",\r\n placeHolder: \"请输入\",\r\n disabled: false,\r\n label: \"\",\r\n value: \"\",\r\n },\r\n select: {\r\n name: \"\",\r\n options: [],\r\n disabled: false,\r\n label: \"\",\r\n value: \"\",\r\n allowClear: true,\r\n placeHolder: \"请选择\",\r\n },\r\n selectMultiple: {\r\n name: \"\",\r\n options: [],\r\n disabled: false,\r\n label: \"\",\r\n value: [],\r\n allowClear: true,\r\n placeHolder: \"请选择\",\r\n },\r\n inputPlate: {\r\n name: \"\",\r\n label: \"\",\r\n value: \"\",\r\n },\r\n checkbox: {\r\n name: \"\",\r\n options: [],\r\n disabled: false,\r\n label: \"\",\r\n value: [],\r\n noStyle: false,\r\n },\r\n date: {\r\n name: \"\",\r\n disabled: false,\r\n label: \"\",\r\n value: \"\",\r\n allowClear: true,\r\n placeHolder: \"请选择\",\r\n showTime: false,\r\n format: \"yyyy-MM-dd\",\r\n mode: \"date\",\r\n },\r\n autoComplete: {\r\n name: \"\",\r\n disabled: false,\r\n placeHolder: \"请输入\",\r\n label: \"\",\r\n value: \"\",\r\n dataSource: () => [],\r\n backFill: false,\r\n defaultActiveFirstOption: false,\r\n returnFullData: false,\r\n },\r\n inputNumber: {\r\n name: \"\",\r\n disabled: false,\r\n label: \"\",\r\n value: \"\",\r\n placeHolder: \"请输入\",\r\n min: 0,\r\n max: 100,\r\n precision: 0,\r\n formatterPercent: (value: number) => `${value}`,\r\n parserPercent: (value: string) => value,\r\n },\r\n custom: {\r\n name: \"\",\r\n value: null,\r\n label: \"\",\r\n },\r\n};\r\n\r\nexport const PRO_TABLE_DEFAULT_COLUMN = {\r\n width: \"\",\r\n align: \"left\",\r\n fixedLeft: false,\r\n fixedRight: false,\r\n auxiliaryColumn: false,\r\n ellipsis:false\r\n};\r\n","import { InjectionToken } from \"@angular/core\";\r\nimport { Observable } from \"rxjs\";\r\n\r\nexport interface ProTableRemoteColumnService {\r\n /**\r\n * 查询当前表的列配置\r\n */\r\n getCol: (tableName: string, multiRow?: boolean) => Promise<any>;\r\n /**\r\n * 写入列配置\r\n */\r\n setCol?: (\r\n tableName: string,\r\n columns: Array<{\r\n field: string;\r\n isShow: boolean;\r\n header: string;\r\n sortName?: string | null;\r\n }>,\r\n multiRow?: boolean\r\n ) => Promise<any> | Observable<any>;\r\n}\r\n\r\nexport const PRO_TABLE_COLUMN_REMOTE = new InjectionToken<ProTableRemoteColumnService | null>(\r\n \"PRO_TABLE_COLUMN_REMOTE\"\r\n);\r\n\r\n/**\r\n * 车牌前缀选项接口\r\n */\r\nexport interface PlatePrefixOption {\r\n label: string;\r\n value: string;\r\n}\r\n\r\n/**\r\n * 车牌前缀加载服务接口\r\n */\r\nexport interface PlatePrefixLoadService {\r\n /**\r\n * 加载车牌前缀选项列表\r\n */\r\n loadPrefixOptions(): Promise<PlatePrefixOption[]>;\r\n}\r\n\r\nexport const PLATE_PREFIX_LOAD_SERVICE = new InjectionToken<PlatePrefixLoadService>(\r\n \"PLATE_PREFIX_LOAD_SERVICE\"\r\n);\r\n\r\n","import { Component, ContentChild, Input, OnInit, TemplateRef } from \"@angular/core\";\r\n\r\n@Component({\r\n selector: \"app-page-container\",\r\n templateUrl: \"./page-container.component.html\",\r\n styleUrls: [\"./page-container.component.less\"],\r\n})\r\nexport class PageContainerComponent implements OnInit {\r\n @Input() title: string = \"\";\r\n @Input() showHeader: boolean = true;\r\n @ContentChild(\"header\") headerTpl!: TemplateRef<any>;\r\n @ContentChild(\"body\") bodyTpl!: TemplateRef<any>;\r\n\r\n constructor() {}\r\n\r\n ngOnInit(): void {}\r\n}\r\n","<nz-card\r\n [nzBorderless]=\"true\"\r\n [nzBodyStyle]=\"{ padding: '8px', width: '100%' }\"\r\n>\r\n <div class=\"page-container-title\" *ngIf=\"title\">{{ title }}</div>\r\n <div class=\"page-container-header\" *ngIf=\"showHeader\">\r\n <ng-container *ngTemplateOutlet=\"headerTpl\"></ng-container>\r\n </div>\r\n <div class=\"page-container-body\">\r\n <ng-container *ngTemplateOutlet=\"bodyTpl\"></ng-container>\r\n </div>\r\n</nz-card>\r\n","import {\r\n AfterViewInit,\r\n Component,\r\n ContentChild,\r\n Input,\r\n OnInit,\r\n TemplateRef,\r\n} from \"@angular/core\";\r\n\r\n@Component({\r\n selector: \"app-table-search-bar\",\r\n templateUrl: \"./table-search-bar.component.html\",\r\n styleUrls: [\"./table-search-bar.component.less\"],\r\n})\r\nexport class TableSearchBarComponent implements OnInit, AfterViewInit {\r\n @Input() leftColSpan: number = 21;\r\n @Input() rightColSpan: number = 3;\r\n @Input() labelWidth: string = \"90px\";\r\n @Input() labelAlign: string = \"right\";\r\n @Input() formItemWidth: string = \"270px\";\r\n @ContentChild(\"leftContent\") leftContentTpl!: TemplateRef<any>;\r\n @ContentChild(\"actionTextBtn\") actionTextBtnTpl!: TemplateRef<any>;\r\n @ContentChild(\"actionImgBtn\") actionImgBtnTpl!: TemplateRef<any>;\r\n\r\n constructor() {}\r\n\r\n ngOnInit(): void {}\r\n\r\n ngAfterViewInit(): void {}\r\n}\r\n","<div class=\"table-search-bar\">\r\n <div\r\n class=\"table-search-bar-left\"\r\n style=\"--label-width: {{ labelWidth }}; --label-align: {{ labelAlign }}; --form-item-width: {{ formItemWidth }};\"\r\n >\r\n <ng-container *ngTemplateOutlet=\"leftContentTpl\"></ng-container>\r\n </div>\r\n <div class=\"table-search-bar-right\">\r\n <nz-space nzDirection=\"vertical\" nzAlign=\"end\">\r\n <ng-template nzSpaceItem>\r\n <ng-container *ngTemplateOutlet=\"actionTextBtnTpl\"></ng-container>\r\n </ng-template>\r\n <ng-template nzSpaceItem>\r\n <ng-container *ngTemplateOutlet=\"actionImgBtnTpl\"></ng-container>\r\n </ng-template>\r\n </nz-space>\r\n <!-- <ng-container *ngTemplateOutlet=\"rightContentTpl\"></ng-container> -->\r\n </div>\r\n</div>\r\n","import { Directive, ElementRef, HostListener, Optional } from \"@angular/core\";\r\nimport { NgControl } from \"@angular/forms\";\r\n\r\n@Directive({\r\n selector: \"input[nz-input]\",\r\n})\r\nexport class TrimInputDirective {\r\n constructor(\r\n private el: ElementRef,\r\n @Optional() private ngControl: NgControl,\r\n ) {}\r\n\r\n private shouldProcess(): boolean {\r\n if (this.el.nativeElement.hasAttribute(\"allow-trim\")) {\r\n return false;\r\n }\r\n if (this.el.nativeElement.hasAttribute(\"not-allow-trim\")) {\r\n return true;\r\n }\r\n\r\n let element = this.el.nativeElement;\r\n while (element) {\r\n const className = element.className;\r\n if (\r\n typeof className === \"string\" &&\r\n className.includes(\"ant-form-custom\")\r\n ) {\r\n return true;\r\n }\r\n element = element.parentElement;\r\n }\r\n return false;\r\n }\r\n\r\n @HostListener(\"blur\")\r\n onBlur() {\r\n if (!this.shouldProcess()) {\r\n return;\r\n }\r\n\r\n const value = this.el.nativeElement.value;\r\n if (typeof value === \"string\") {\r\n const trimmedValue = value.trim();\r\n\r\n this.el.nativeElement.value = trimmedValue;\r\n\r\n if (this.ngControl && this.ngControl.control) {\r\n this.ngControl.control.setValue(trimmedValue, { emitEvent: false });\r\n }\r\n }\r\n }\r\n\r\n @HostListener(\"input\")\r\n onInput() {\r\n if (!this.shouldProcess()) {\r\n return;\r\n }\r\n\r\n const value = this.el.nativeElement.value;\r\n\r\n if (typeof value === \"string\" && /\\s/.test(value)) {\r\n const noSpaceValue = value.replace(/\\s/g, \"\");\r\n this.el.nativeElement.value = noSpaceValue;\r\n\r\n if (this.ngControl && this.ngControl.control) {\r\n this.ngControl.control.setValue(noSpaceValue, { emitEvent: false });\r\n }\r\n }\r\n }\r\n}\r\n","import { Component, OnInit, OnDestroy, forwardRef, ChangeDetectorRef, ElementRef, Inject, Optional } from \"@angular/core\";\r\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from \"@angular/forms\";\r\nimport { PLATE_PREFIX_LOAD_SERVICE, PlatePrefixLoadService, PlatePrefixOption } from \"../tokens\";\r\n\r\n@Component({\r\n selector: \"app-plate-input\",\r\n templateUrl: \"./plate-input.component.html\",\r\n styleUrls: [\"./plate-input.component.less\"],\r\n providers: [\r\n {\r\n provide: NG_VALUE_ACCESSOR,\r\n useExisting: forwardRef(() => PlateInputComponent),\r\n multi: true,\r\n },\r\n ],\r\n})\r\nexport class PlateInputComponent implements OnInit, OnDestroy, ControlValueAccessor {\r\n nzPopoverVisible: boolean = false;\r\n platePrefix: string = \"\";\r\n plateSuffix: string = \"\";\r\n platePrefixOptions: Array<PlatePrefixOption> = [];\r\n disabled: boolean = false;\r\n private onChange = (value: string) => {};\r\n private onTouched = () => {};\r\n\r\n private clickOutsideHandler?: (event: MouseEvent) => void;\r\n\r\n constructor(\r\n private cdr: ChangeDetectorRef,\r\n private elementRef: ElementRef,\r\n @Optional() @Inject(PLATE_PREFIX_LOAD_SERVICE) private platePrefixLoadService?: PlatePrefixLoadService\r\n ) {}\r\n\r\n ngOnInit(): void {\r\n if (this.platePrefixLoadService) {\r\n // 使用注入的全局服务加载车牌前缀选项\r\n this.platePrefixLoadService\r\n .loadPrefixOptions()\r\n .then((data: Array<PlatePrefixOption>) => {\r\n this.platePrefixOptions = data;\r\n })\r\n .catch(() => {\r\n this.platePrefixOptions = [];\r\n });\r\n } else {\r\n // 如果没有注入服务,则保持空数组\r\n this.platePrefixOptions = [];\r\n }\r\n }\r\n\r\n handlePlatePrefix(value: string): void {\r\n this.platePrefix = value;\r\n this.emitValue();\r\n this.nzPopoverVisible = false;\r\n this.removeClickOutsideListener();\r\n }\r\n\r\n writeValue(value: string): void {\r\n if (value) {\r\n this.platePrefix = value.split(\"\")[0];\r\n this.plateSuffix = value\r\n .split(\"\")\r\n .filter((item, index) => index > 0)\r\n .join(\"\");\r\n } else {\r\n this.platePrefix = \"\";\r\n this.plateSuffix = \"\";\r\n }\r\n }\r\n\r\n registerOnChange(fn: (value: string) => void): void {\r\n this.onChange = fn;\r\n }\r\n\r\n registerOnTouched(fn: () => void): void {\r\n this.onTouched = fn;\r\n }\r\n\r\n setDisabledState(isDisabled: boolean): void {\r\n const previousDisabled = this.disabled;\r\n this.disabled = isDisabled;\r\n \r\n // 如果禁用状态改变,关闭 popover 并移除监听器\r\n if (previousDisabled !== isDisabled) {\r\n this.nzPopoverVisible = false;\r\n this.removeClickOutsideListener();\r\n // 强制变更检测\r\n this.cdr.detectChanges();\r\n }\r\n }\r\n\r\n handlePrefixClick(event: Event): void {\r\n if (this.disabled) {\r\n event.preventDefault();\r\n event.stopPropagation();\r\n this.nzPopoverVisible = false;\r\n return;\r\n }\r\n // 手动切换 popover 的显示/隐藏状态\r\n this.nzPopoverVisible = !this.nzPopoverVisible;\r\n \r\n // 如果打开了 popover,添加文档点击监听器\r\n if (this.nzPopoverVisible) {\r\n setTimeout(() => {\r\n this.attachClickOutsideListener();\r\n }, 0);\r\n } else {\r\n this.removeClickOutsideListener();\r\n }\r\n \r\n event.stopPropagation(); // 阻止事件冒泡\r\n }\r\n\r\n private attachClickOutsideListener(): void {\r\n if (this.clickOutsideHandler) {\r\n return;\r\n }\r\n \r\n this.clickOutsideHandler = (event: MouseEvent) => {\r\n const nativeElement = this.elementRef.nativeElement;\r\n const target = event.target as HTMLElement;\r\n \r\n // 检查是否点击在 popover 内容区域内\r\n const popoverContent = document.querySelector('.plate-input-popover');\r\n const clickedInPopover = popoverContent && popoverContent.contains(target);\r\n \r\n // 检查是否点击在组件内部(前缀按钮)\r\n const clickedInComponent = nativeElement.contains(target);\r\n \r\n // 如果点击既不在组件内部,也不在 popover 内容区域,则关闭 popover\r\n if (!clickedInComponent && !clickedInPopover) {\r\n this.nzPopoverVisible = false;\r\n this.removeClickOutsideListener();\r\n this.cdr.detectChanges();\r\n }\r\n };\r\n \r\n // 使用捕获阶段,确保在其他事件处理之前执行\r\n document.addEventListener('click', this.clickOutsideHandler, true);\r\n }\r\n\r\n private removeClickOutsideListener(): void {\r\n if (this.clickOutsideHandler) {\r\n document.removeEventListener('click', this.clickOutsideHandler, true);\r\n this.clickOutsideHandler = undefined;\r\n }\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this.removeClickOutsideListener();\r\n }\r\n\r\n private emitValue(): void {\r\n const fullPlate = this.platePrefix + this.plateSuffix;\r\n this.onChange(fullPlate);\r\n }\r\n\r\n onBlur(): void {\r\n this.onTouched();\r\n }\r\n\r\n handleAntdPlateSuffixBlur(event: any): void {\r\n if (this.disabled) return;\r\n const value = event.target.value.toUpperCase();\r\n this.plateSuffix = value;\r\n this.emitValue();\r\n }\r\n}\r\n","<div\r\n class=\"plate-antd-input-container\"\r\n [class.plate-antd-input-disabled]=\"disabled\"\r\n>\r\n <div\r\n class=\"plate-input-prefix\"\r\n [class.plate-input-prefix-disabled]=\"disabled\"\r\n nz-popover\r\n nzPopoverPlacement=\"bottom\"\r\n nzPopoverOverlayClassName=\"plate-input-popover\"\r\n [(nzPopoverVisible)]=\"nzPopoverVisible\"\r\n [nzPopoverTrigger]=\"'manual'\"\r\n [nzPopoverContent]=\"contentTemplate\"\r\n (click)=\"handlePrefixClick($event)\"\r\n >\r\n {{ platePrefix | uppercase }}\r\n <i\r\n class=\"plate-input-icon-down\"\r\n [nzRotate]=\"nzPopoverVisible ? 180 : 0\"\r\n nz-icon\r\n nzType=\"down\"\r\n nzTheme=\"outline\"\r\n ></i>\r\n </div>\r\n <ng-template #contentTemplate>\r\n <div nz-row style=\"height: 100%\">\r\n <div\r\n nz-col\r\n nzSpan=\"4\"\r\n *ngFor=\"let item of platePrefixOptions\"\r\n class=\"plate-input-popover-item\"\r\n (click)=\"!disabled && handlePlatePrefix(item.value)\"\r\n [ngClass]=\"{\r\n 'plate-input-popover-item-active': item.value === platePrefix,\r\n 'plate-input-popover-item-default': item.value !== platePrefix\r\n }\"\r\n >\r\n <div class=\"plate-input-popover-item-label\">\r\n {{ item.label }}\r\n </div>\r\n </div>\r\n </div>\r\n </ng-template>\r\n <input\r\n class=\"plate-input-suffix\"\r\n type=\"text\"\r\n nz-input\r\n allow-trim\r\n style=\"width: 75%\"\r\n [value]=\"plateSuffix | uppercase\"\r\n [disabled]=\"disabled\"\r\n (blur)=\"!disabled && handleAntdPlateSuffixBlur($event)\"\r\n placeholder=\"请输入\"\r\n maxlength=\"7\"\r\n />\r\n</div>\r\n","import {\r\n AfterViewInit,\r\n Component,\r\n ElementRef,\r\n EventEmitter,\r\n Input,\r\n OnDestroy,\r\n OnInit,\r\n Output,\r\n ViewChild,\r\n} from \"@angular/core\";\r\nimport Sortable from \"sortablejs\";\r\nimport { ProTableColumn } from \"../../type\";\r\nimport { PRO_TABLE_COLUMN_REMOTE, ProTableRemoteColumnService } from \"../../tokens\";\r\nimport { Inject, Optional } from \"@angular/core\";\r\nimport { isObservable } from \"rxjs\";\r\n\r\n@Component({\r\n selector: \"app-colmuns-setting\",\r\n templateUrl: \"./colmuns-setting.component.html\",\r\n styleUrls: [\"./colmuns-setting.component.less\"],\r\n})\r\nexport class ColmunsSettingComponent\r\n implements OnInit, AfterViewInit, OnDestroy\r\n{\r\n @Input() columns: ProTableColumn[] = [];\r\n\r\n @Input() selectedColumns: ProTableColumn[] = [];\r\n\r\n @Input() tableName: string;\r\n\r\n @Output() afterConfirm = new EventEmitter<ProTableColumn[]>();\r\n\r\n @ViewChild(\"sortableContainer\", { static: false })\r\n sortableContainer!: ElementRef;\r\n\r\n modalVisible: boolean = false;\r\n\r\n options: Array<{ label: string; value: string; checked: boolean }> = [];\r\n\r\n private sortableInstance: Sortable | null = null;\r\n\r\n constructor(\r\n @Optional()\r\n @Inject(PRO_TABLE_COLUMN_REMOTE)\r\n private columnRemote: ProTableRemoteColumnService | null\r\n ) {}\r\n\r\n ngOnInit(): void {}\r\n\r\n ngAfterViewInit(): void {\r\n this.initSortable();\r\n }\r\n\r\n ngOnDestroy(): void {\r\n if (this.sortableInstance) {\r\n this.sortableInstance.destroy();\r\n }\r\n }\r\n\r\n initSortable(): void {\r\n // 先销毁已存在的实例\r\n if (this.sortableInstance) {\r\n this.sortableInstance.destroy();\r\n this.sortableInstance = null;\r\n }\r\n\r\n if (this.sortableContainer && this.sortableContainer.nativeElement) {\r\n this.sortableInstance = new Sortable(\r\n this.sortableContainer.nativeElement,\r\n {\r\n animation: 150,\r\n ghostClass: \"sortable-ghost\",\r\n chosenClass: \"sortable-chosen\",\r\n dragClass: \"sortable-drag\",\r\n handle: \".sort-list-item\", // 指定拖拽句柄\r\n onEnd: (evt) => {\r\n this.onSortEnd(evt);\r\n },\r\n }\r\n );\r\n }\r\n }\r\n\r\n onSortEnd(evt: any): void {\r\n const { oldIndex, newIndex } = evt;\r\n if (oldIndex !== newIndex) {\r\n // 创建新的数组来避免直接修改输入属性\r\n const newSelectedColumns = [...this.selectedColumns];\r\n const movedItem = newSelectedColumns.splice(oldIndex, 1)[0];\r\n newSelectedColumns.splice(newIndex, 0, movedItem);\r\n\r\n // 更新 selectedColumns\r\n this.selectedColumns = newSelectedColumns;\r\n }\r\n }\r\n\r\n trackByColumn(index: number, item: ProTableColumn): string {\r\n return item.prop || index.toString();\r\n }\r\n\r\n /**\r\n * 同步 options 数组的 checked 状态与 selectedColumns\r\n */\r\n private syncOptionsWithSelectedColumns(): void {\r\n const selectedProps = this.selectedColumns.map((col) => col.prop);\r\n this.options.forEach((option) => {\r\n option.checked = selectedProps.includes(option.value);\r\n });\r\n }\r\n\r\n handleModalVisible() {\r\n this.options = this.columns\r\n .filter((item) => !item.auxiliaryColumn)\r\n .map((item) => {\r\n return {\r\n label: item.title,\r\n value: item.prop,\r\n checked: item.hideInTable ? false : true,\r\n sortName: item.sortName || null,\r\n };\r\n });\r\n\r\n // 同步 options 的 checked 状态与当前 selectedColumns\r\n this.syncOptionsWithSelectedColumns();\r\n\r\n this.modalVisible = true;\r\n\r\n // 模态框打开后重新初始化排序\r\n setTimeout(() => {\r\n this.initSortable();\r\n }, 100);\r\n }\r\n\r\n handleModalClose() {\r\n this.modalVisible = false;\r\n if (this.sortableInstance) {\r\n this.sortableInstance.destroy();\r\n this.sortableInstance = null;\r\n }\r\n }\r\n\r\n handleSelectRemove(key: string) {\r\n this.selectedColumns = this.selectedColumns.filter(\r\n (item) => item.prop !== key\r\n );\r\n\r\n // 使用同步方法确保所有状态一致\r\n this.syncOptionsWithSelectedColumns();\r\n }\r\n\r\n handleCheckBoxChange(value, record) {\r\n if (!value) {\r\n this.handleSelectRemove(record.value);\r\n } else {\r\n this.selectedColumns.push({\r\n title: record.label,\r\n prop: record.value,\r\n sortName: record.sortName,\r\n hideInTable: false,\r\n });\r\n // 添加项目后同步状态\r\n this.syncOptionsWithSelectedColumns();\r\n }\r\n }\r\n handleConfirm() {\r\n if (!this.columnRemote?.setCol || !this.tableName) {\r\n this.modalVisible = false;\r\n this.afterConfirm.emit();\r\n return;\r\n }\r\n const payload = this.selectedColumns.map((column) => {\r\n return {\r\n field: column.prop,\r\n isShow: column.hideInTable ? false : true,\r\n header: column.title,\r\n sortName: column.sortName || null,\r\n };\r\n });\r\n const result = this.columnRemote.setCol(this.tableName, payload);\r\n const done = (res) => {\r\n this.modalVisible = false;\r\n this.afterConfirm.emit();\r\n };\r\n if (result && isObservable(result)) {\r\n result.subscribe(done, () => done(null));\r\n } else {\r\n Promise.resolve(result).finally(() => done(null));\r\n }\r\n }\r\n}\r\n","<div class=\"action-pic-btn\" (click)=\"handleModalVisible()\" title=\"列设置\">\r\n <i nz-icon nzType=\"setting\" nzTheme=\"outline\"></i>\r\n</div>\r\n\r\n<nz-modal\r\n [(nzVisible)]=\"modalVisible\"\r\n [nzWidth]=\"820\"\r\n [nzTitle]=\"modalTitle\"\r\n (nzOnCancel)=\"handleModalClose()\"\r\n [nzContent]=\"modalBody\"\r\n [nzBodyStyle]=\"{ padding: '12px' }\"\r\n (nzOnOk)=\"handleConfirm()\"\r\n [nzWrapClassName]=\"'draggable-modal'\"\r\n>\r\n <ng-template #modalTitle>\r\n <div\r\n class=\"modal-drag-handle\"\r\n cdkDrag\r\n [cdkDragRootElement]=\"'.draggable-modal .ant-modal'\"\r\n cdkDragHandle\r\n [cdkDragBoundary]=\"'.draggable-modal'\"\r\n >\r\n <span>设置显示字段</span>\r\n </div>\r\n </ng-template>\r\n <ng-template #modalBody>\r\n <div class=\"modal-body\">\r\n <div class=\"check-box-list\">\r\n <div class=\"mb-12\">可选字段</div>\r\n <nz-checkbox-wrapper style=\"width: 100%\">\r\n <div nz-row [nzGutter]=\"[24, 24]\">\r\n <div nz-col nzSpan=\"6\" *ngFor=\"let item of options\">\r\n <label\r\n nz-checkbox\r\n nzValue=\"item.value\"\r\n [ngModel]=\"item.checked\"\r\n (ngModelChange)=\"handleCheckBoxChange($event, item)\"\r\n >{{ item.label }}</label\r\n >\r\n </div>\r\n </div>\r\n </nz-checkbox-wrapper>\r\n </div>\r\n <div class=\"sort-list\">\r\n <div nz-typography class=\"mb-4\">当前已经选定的字段</div>\r\n <div\r\n nz-typography\r\n nzType=\"secondary\"\r\n class=\"mb-4\"\r\n [style.fontSize]=\"'12px'\"\r\n >\r\n 提示:可拖动排序\r\n </div>\r\n <div #sortableContainer class=\"sortable-container\">\r\n <div\r\n class=\"sort-list-item mb-12\"\r\n *ngFor=\"let item of selectedColumns; trackBy: trackByColumn\"\r\n >\r\n {{ item.title }}\r\n <a\r\n href=\"javascript:void(0)\"\r\n class=\"fieldd-remove\"\r\n title=\"删除\"\r\n (click)=\"handleSelectRemove(item.prop)\"\r\n >×</a\r\n >\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </ng-template>\r\n</nz-modal>\r\n","import { Component, ComponentFactoryResolver, EventEmitter, Input, OnChanges, OnDestroy, OnInit, Output, SimpleChanges, Type, ViewChild, ViewContainerRef } from '@angular/core';\r\n\r\n@Component({\r\n selector: 'app-dynamic-search-field',\r\n template: `<ng-template #vc></ng-template>`\r\n})\r\nexport class DynamicSearchFieldComponent implements OnInit, OnChanges, OnDestroy {\r\n @Input() component: Type<any> | null = null;\r\n @Input() value: any;\r\n @Input() props: { [key: string]: any } | null = null;\r\n @Output() valueChange = new EventEmitter<any>();\r\n\r\n @ViewChild('vc', { read: ViewContainerRef, static: true }) vc!: ViewContainerRef;\r\n\r\n private cmpRef: any = null;\r\n private isCva = false;\r\n private cvaOnChange: ((val: any) => void) | null = null;\r\n\r\n constructor(private cfr: ComponentFactoryResolver) {}\r\n\r\n ngOnInit(): void {\r\n this.render();\r\n }\r\n\r\n ngOnChanges(changes: SimpleChanges): void {\r\n if (changes.component && !changes.component.firstChange) {\r\n this.destroy();\r\n this.render();\r\n return;\r\n }\r\n if (this.cmpRef) {\r\n if (changes.value && !changes.value.firstChange) {\r\n if (this.isCva) {\r\n if (typeof this.cmpRef.instance.writeValue === 'function') {\r\n this.cmpRef.instance.writeValue(this.value);\r\n }\r\n } else if ('value' in this.cmpRef.instance) {\r\n this.cmpRef.instance.value = this.value;\r\n }\r\n }\r\n if (changes.props && !changes.props.firstChange) {\r\n this.applyProps();\r\n }\r\n }\r\n }\r\n\r\n private render() {\r\n if (!this.component) return;\r\n const factory = this.cfr.resolveComponentFactory(this.component);\r\n this.vc.clear();\r\n this.cmpRef = this.vc.createComponent(factory);\r\n\r\n this.isCva = typeof this.cmpRef.instance.registerOnChange === 'function' && typeof this.cmpRef.instance.writeValue === 'function';\r\n\r\n if (this.isCva) {\r\n this.cmpRef.instance.writeValue(this.value);\r\n this.cmpRef.instance.registerOnChange((v: any) => {\r\n this.valueChange.emit(v);\r\n });\r\n } else {\r\n if ('value' in this.cmpRef.instance) {\r\n this.cmpRef.instance.value = this.value;\r\n }\r\n if ('valueChange' in this.cmpRef.instance && this.cmpRef.instance.valueChange && typeof this.cmpRef.instance.valueChange.subscribe === 'function') {\r\n this.cmpRef.instance.valueChange.subscribe((v: any) => {\r\n this.valueChange.emit(v);\r\n });\r\n }\r\n }\r\n\r\n this.applyProps();\r\n }\r\n\r\n private applyProps() {\r\n const p = this.props || {};\r\n const extra = p.componentProps || {};\r\n Object.keys(extra).forEach((k) => {\r\n try {\r\n this.cmpRef.instance[k] = extra[k];\r\n } catch {}\r\n });\r\n }\r\n\r\n private destroy() {\r\n if (this.cmpRef) {\r\n try { this.cmpRef.destroy(); } catch {}\r\n this.cmpRef = null;\r\n }\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this.destroy();\r\n }\r\n}\r\n","import {\r\n AfterContentInit,\r\n Component,\r\n ContentChild,\r\n ContentChildren,\r\n EventEmitter,\r\n HostListener,\r\n Inject,\r\n Input,\r\n OnInit,\r\n Optional,\r\n Output,\r\n QueryList,\r\n TemplateRef,\r\n} from \"@angular/core\";\r\nimport { cloneDeep, hasIn, isNil, debounce, isEqual } from \"lodash-es\";\r\nimport { PRO_TABLE_DEFAULT_COLUMN, PRO_TABLE_DEFAULT_PROPS } from \"./constants\";\r\nimport {\r\n AutoCompleteFieldProps,\r\n CheckboxFieldProps,\r\n OptionsType,\r\n ProTableColumn,\r\n ProTablePageInfo,\r\n ProTableRequestResult,\r\n ProTableValuesChange,\r\n SelectFieldProps,\r\n} from \"./type\";\r\nimport { PRO_TABLE_COLUMN_REMOTE, ProTableRemoteColumnService } from \"./tokens\";\r\nimport { isObservable, lastValueFrom } from 'rxjs';\r\n\r\n@Component({\r\n selector: \"app-pro-table\",\r\n templateUrl: \"./pro-table.component.html\",\r\n styleUrls: [\"./pro-table.component.less\"],\r\n})\r\nexport class ProTableComponent implements OnInit, AfterContentInit {\r\n @Input() showSearchBtn: boolean = true;\r\n\r\n @Input() showClearBtn: boolean = true;\r\n\r\n @Input() title: string | null = null;\r\n\r\n @Input() tableName: string = \"\";\r\n\r\n @Input() multiRow: boolean = false;\r\n\r\n @Input() columns: ProTableColumn[] = [];\r\n\r\n @Input() showSearchBar: boolean = true;\r\n\r\n @Input() showActionBar: boolean = true;\r\n\r\n @Input() confirmBtnText: string = \"查询\";\r\n\r\n @Input() clearBtnText: string = \"清空\";\r\n\r\n @Input() labelWidth: string = \"90px\";\r\n\r\n @Input() labelAlign: string = \"right\";\r\n\r\n @Input() formItemWidth: string = \"330px\";\r\n\r\n @Input() dataSource: any[] = [];\r\n\r\n @Input() bordered: boolean = true;\r\n\r\n @Input() outerBordered: boolean = true;\r\n\r\n @Input() showPagination: boolean = true;\r\n\r\n @Input() frontPagination: boolean = false;\r\n\r\n @Input() scroll: { x?: string | number; y?: string | number } | null = null;\r\n\r\n @Input() request: (params: any) => Promise<ProTableRequestResult>;\r\n\r\n @Input() summaryData: Record<string, any> | null = null;\r\n\r\n // 排序模式:local 本地排序;server 在线排序(提交给接口)\r\n @Input() sortMode: \"local\" | \"server\" = \"local\";\r\n\r\n @Input() showColumnSetting: boolean = false;\r\n\r\n // 是否开启多列排序(默认单列)\r\n @Input() multipleSort: boolean = false;\r\n\r\n @Input() showCheckbox: boolean = false;\r\n\r\n // 判断行是否禁用的函数\r\n @Input() rowDisabled: (data: any) => boolean = () => false;\r\n\r\n @Input() rerenderOnResize: boolean = true;\r\n\r\n // 是否自动触发请求\r\n @Input() autoTriggerRequest: boolean = true;\r\n\r\n @Input() customTableRender?: TemplateRef<any>;\r\n\r\n @Output() onRowClick = new EventEmitter<any>();\r\n\r\n @Output() onRowDbClick = new EventEmitter<any>();\r\n\r\n @Output() onValuesChange = new EventEmitter<ProTableValuesChange>();\r\n\r\n @Output() onResetFormBeforeReload = new EventEmitter<any>();\r\n\r\n @ContentChild(\"actionBar\") actionBarTpl!: TemplateRef<any>;\r\n\r\n @ContentChild(\"ImgActionBar\") imgActionBarTpl!: TemplateRef<any>;\r\n\r\n @ContentChildren(TemplateRef) allTemplates!: QueryList<TemplateRef<any>>;\r\n\r\n private _savedSearchParams: any = {};\r\n\r\n // 存储所有自定义模板的引用\r\n private customTemplates = new Map<string, TemplateRef<any>>();\r\n\r\n // 记录各列排序状态:'ascend' | 'descend' | null\r\n\r\n private _sortMap: Record<string, \"ascend\" | \"descend\" | null> = {};\r\n\r\n // 记录多列排序的优先级(后设置的优先)\r\n private _sortPriority: string[] = [];\r\n\r\n // 存储每个 autoComplete 字段的防抖函数\r\n private _autoCompleteDebounceMap: Map<string, (event: Event) => void> =\r\n new Map();\r\n\r\n // 仅在初始化时运行列配置预检查,避免后续调用重复触发\r\n private _preCheckDone: boolean = false;\r\n\r\n _columns: ProTableColumn[] = [];\r\n\r\n // 筛选表单数据存储\r\n _searchParams: any = {};\r\n\r\n // 筛选表单list渲染数据\r\n _searchFiledColumns: ProTableColumn[] = [];\r\n\r\n _pageInfo: ProTablePageInfo = {\r\n pageIndex: 1,\r\n pageSize: 15,\r\n total: 100,\r\n pageSizeOptions: [10, 15, 20, 50, 100, 500, 1000],\r\n };\r\n\r\n _loading: boolean = false;\r\n\r\n _selectedTableRow: any = null;\r\n\r\n // 选中的行数据(用于复选框选择)- 保留用于兼容性\r\n _selectedRows: any[] = [];\r\n\r\n // 使用 Set 存储选中项的 ID,支持跨页选中\r\n private _selectedRowIds = new Set<string | number>();\r\n\r\n // 全选状态\r\n _checkedAll: boolean = false;\r\n\r\n // 半选状态(部分选中)\r\n _indeterminate: boolean = false;\r\n\r\n // 远程columns\r\n _serverColumns: ProTableColumn[] = [];\r\n\r\n // 存储 autoComplete 字段的数据源\r\n _autoCompleteDataSources: Record<string, any[]> = {};\r\n\r\n // 控制表格显示状态,用于重新挂载\r\n _showTable: boolean = true;\r\n\r\n // 防抖定时器,用于窗口大小调整\r\n private resizeDebounce: any;\r\n \r\n @HostListener('window:resize')\r\n onWindowResize() {\r\n if (!this.rerenderOnResize) return;\r\n \r\n if (this.resizeDebounce) {\r\n clearTimeout(this.resizeDebounce);\r\n }\r\n \r\n this.resizeDebounce = setTimeout(() => {\r\n // 通过 ngIf 重新挂载表格\r\n this._showTable = false;\r\n setTimeout(() => {\r\n this._showTable = true;\r\n }, 0);\r\n }, 150);\r\n }\r\n constructor(\r\n @Optional()\r\n @Inject(PRO_TABLE_COLUMN_REMOTE)\r\n private columnRemote: ProTableRemoteColumnService | null\r\n ) {}\r\n\r\n private async fetchRemoteColumns() {\r\n if (!this.columnRemote?.getCol || !this.tableName) {\r\n return null;\r\n }\r\n try {\r\n const res = await this.columnRemote.getCol(this.tableName, this.multiRow);\r\n return res;\r\n } catch (error) {\r\n return null;\r\n }\r\n }\r\n\r\n private async persistRemoteColumns(columns: any[]) {\r\n if (!this.columnRemote?.setCol || !this.tableName) {\r\n return null;\r\n }\r\n try {\r\n const result = this.columnRemote.setCol(\r\n this.tableName,\r\n columns,\r\n this.multiRow\r\n );\r\n if (result && isObservable(result)) {\r\n return await lastValueFrom(result);\r\n }\r\n return result;\r\n } catch (error) {\r\n return null;\r\n }\r\n }\r\n\r\n async ngOnInit(): Promise<void> {\r\n this._searchParams = {};\r\n this.formateInnerColumns(this.columns);\r\n await this.setSearchParams(this.columns);\r\n\r\n // 使用 Proxy 包装 _searchParams,拦截表单项值变化并向外发出事件\r\n this._searchParams = this.createSearchParamsProxy(this._searchParams);\r\n if (this.autoTriggerRequest) {\r\n this.handleQuery();\r\n }\r\n this.queryDynamicColumns();\r\n }\r\n\r\n ngAfterContentInit() {\r\n // 自动注册所有自定义模板\r\n // 注意:此时所有 ContentChild 和 ContentChildren 都已初始化完成\r\n this.autoRegisterTemplates();\r\n }\r\n\r\n private async preCheckServerColumns(): Promise<boolean> {\r\n const res = await this.fetchRemoteColumns();\r\n if (!res) return false;\r\n const initColumns = this.columns\r\n .filter((col) => !col.auxiliaryColumn)\r\n .map((column) => {\r\n return {\r\n field: column.prop,\r\n isShow: !column.hideInTable, // 默认全部显示\r\n header: column.title,\r\n sortName: column.sortName || null,\r\n };\r\n });\r\n if (res.code === 0) {\r\n if (!isEqual(res.data.tabColumn, initColumns)) {\r\n const initRes = await this.persistRemoteColumns(initColumns);\r\n if (initRes) {\r\n this.queryDynamicColumns();\r\n }\r\n\r\n return false;\r\n } else {\r\n console.log(\"一致\");\r\n return true;\r\n }\r\n } else if (res.code === 10) {\r\n // code === 10 表示未初始化,需要继续执行后续逻辑\r\n return true;\r\n } else {\r\n return false;\r\n }\r\n }\r\n\r\n private async queryDynamicColumns() {\r\n if (!this.tableName || !this.columnRemote) return;\r\n if (!this._preCheckDone) {\r\n const checkResult = await this.preCheckServerColumns();\r\n this._preCheckDone = true;\r\n if (!checkResult) return;\r\n }\r\n const res = await this.fetchRemoteColumns();\r\n if (!res) return;\r\n if (res.code === 0) {\r\n const _tabColumn = res.data.tabColumn.map((item) => {\r\n return {\r\n title: item.header,\r\n prop: item.field,\r\n sortName: item.sortName,\r\n hideInTable: !item.isShow,\r\n };\r\n });\r\n this._serverColumns = _tabColumn;\r\n this.updateTableColumns(_tabColumn);\r\n } else if (res.code === 10) {\r\n // 如果未设置接口返回,需要默认调用一次修改函数初始化数据\r\n const initColumns = this.columns\r\n .filter((col) => !col.auxiliaryColumn)\r\n .map((column) => {\r\n return {\r\n field: column.prop,\r\n isShow: true, // 默认全部显示\r\n header: column.title,\r\n sortName: column.sortName || null,\r\n };\r\n });\r\n\r\n // 调用修改接口初始化数据\r\n const initRes = await this.persistRemoteColumns(initColumns);\r\n if (initRes) {\r\n this.queryDynamicColumns();\r\n }\r\n }\r\n }\r\n\r\n private formateInnerColumns(columns: ProTableColumn[]) {\r\n this._columns = columns\r\n .filter((item) => !item.hideInTable)\r\n .map((item) => {\r\n return { ...PRO_TABLE_DEFAULT_COLUMN, ...item } as ProTableColumn;\r\n });\r\n }\r\n\r\n // 自动注册模板的方法\r\n private autoRegisterTemplates() {\r\n // 获取所有模板\r\n const allTemplatesArray = this.allTemplates.toArray();\r\n\r\n // 获取所有需要自定义模板的列\r\n const columnsWithCustomRender = this._columns.filter(\r\n (col) => col.customRender\r\n );\r\n\r\n // 获取所有需要自定义label模板的列(使用原始columns,确保顺序正确)\r\n const columnsWithCustomLabel = this.columns.filter(\r\n (col) => col.customLabelRender\r\n );\r\n\r\n // 计算需要的模板总数\r\n const customRenderCount = columnsWithCustomRender.length;\r\n const totalNeededTemplates = customRenderCount + columnsWithCustomLabel.length;\r\n\r\n // 识别并排除特殊模板(actionBar 和 imgActionBar)\r\n const specialTemplateIndices = new Set<number>();\r\n \r\n // 尝试找到 actionBarTpl 在 allTemplatesArray 中的位置\r\n if (this.actionBarTpl) {\r\n const actionBarIndex = this.findTemplateIndex(allTemplatesArray, this.actionBarTpl);\r\n if (actionBarIndex !== -1) {\r\n specialTemplateIndices.add(actionBarIndex);\r\n }\r\n }\r\n \r\n // 尝试找到 imgActionBarTpl 在 allTemplatesArray 中的位置\r\n if (this.imgActionBarTpl) {\r\n const imgActionBarIndex = this.findTemplateIndex(allTemplatesArray, this.imgActionBarTpl);\r\n if (imgActionBarIndex !== -1) {\r\n specialTemplateIndices.add(imgActionBarIndex);\r\n }\r\n }\r\n\r\n // 如果无法通过引用找到特殊模板,使用备用策略\r\n // 备用策略:假设最后的模板是特殊模板\r\n const specialTemplateCount = (this.actionBarTpl ? 1 : 0) + (this.imgActionBarTpl ? 1 : 0);\r\n if (specialTemplateIndices.size === 0 && specialTemplateCount > 0) {\r\n for (let i = allTemplatesArray.length - specialTemplateCount; i < allTemplatesArray.length; i++) {\r\n specialTemplateIndices.add(i);\r\n }\r\n }\r\n\r\n // 提取列模板(排除特殊模板)\r\n const columnTemplates: TemplateRef<any>[] = [];\r\n allTemplatesArray.forEach((tpl, index) => {\r\n if (!specialTemplateIndices.has(index)) {\r\n columnTemplates.push(tpl);\r\n }\r\n });\r\n\r\n // 验证模板数量\r\n if (columnTemplates.length !== totalNeededTemplates) {\r\n console.warn(\r\n `ProTable: 模板数量不匹配!需要 ${totalNeededTemplates} 个列模板,实际有 ${columnTemplates.length} 个。请检查 customRender 和 customLabelRender 配置。`\r\n );\r\n }\r\n\r\n // 注册自定义渲染模板\r\n columnsWithCustomRender.forEach((column, index) => {\r\n const templateName = column.customRender!;\r\n if (index < columnTemplates.length) {\r\n this.customTemplates.set(templateName, columnTemplates[index]);\r\n } else {\r\n console.error(`ProTable: 未找到模板 \"${templateName}\",索引 ${index} 超出范围`);\r\n }\r\n });\r\n\r\n // 注册自定义label模板(从 customRenderCount 之后开始)\r\n columnsWithCustomLabel.forEach((column, index) => {\r\n const templateName = column.customLabelRender!;\r\n const templateIndex = customRenderCount + index;\r\n if (templateIndex < columnTemplates.length) {\r\n this.customTemplates.set(templateName, columnTemplates[templateIndex]);\r\n } else {\r\n console.error(`ProTable: 未找到label模板 \"${templateName}\",索引 ${templateIndex} 超出范围`);\r\n }\r\n });\r\n }\r\n\r\n // 尝试在数组中找到模板的索引(使用多种比较方式)\r\n private findTemplateIndex(templates: TemplateRef<any>[], target: TemplateRef<any>): number {\r\n // 方法1:引用相等性\r\n let index = templates.indexOf(target);\r\n if (index !== -1) return index;\r\n\r\n // 方法2:通过 elementRef 比较\r\n try {\r\n const targetElementRef = (target as any).elementRef;\r\n if (targetElementRef) {\r\n for (let i = 0; i < templates.length; i++) {\r\n const tplElementRef = (templates[i] as any).elementRef;\r\n if (tplElementRef === targetElementRef) {\r\n return i;\r\n }\r\n }\r\n }\r\n } catch (e) {\r\n // 忽略错误\r\n }\r\n\r\n // 方法3:通过 Angular 内部属性比较\r\n try {\r\n const targetContainer = (target as any)._declarationTContainer;\r\n if (targetContainer) {\r\n for (let i = 0; i < templates.length; i++) {\r\n const tplContainer = (templates[i] as any)._declarationTContainer;\r\n if (tplContainer === targetContainer) {\r\n return i;\r\n }\r\n }\r\n }\r\n } catch (e) {\r\n // 忽略错误\r\n }\r\n\r\n return -1;\r\n }\r\n\r\n // 设置筛选表单默认属性\r\n private setSearchFormDefaultProp(columns: ProTableColumn[]) {\r\n columns.forEach((item) => {\r\n if (item.valueType) {\r\n if (item.fieldProps) {\r\n item.fieldProps = {\r\n ...PRO_TABLE_DEFAULT_PROPS[item.valueType],\r\n ...item.fieldProps,\r\n };\r\n } else {\r\n item.fieldProps = { ...PRO_TABLE_DEFAULT_PROPS[item.valueType] };\r\n }\r\n }\r\n });\r\n }\r\n\r\n // 动态设置Options\r\n private setSelectRequest(columns: ProTableColumn[]) {\r\n columns.map(async (item) => {\r\n if (item.fieldProps && hasIn(item.fieldProps, \"request\")) {\r\n try {\r\n const options = await (\r\n item.fieldProps as SelectFieldProps\r\n ).request?.();\r\n (item.fieldProps as SelectFieldProps).options = options;\r\n } catch (error) {\r\n (item.fieldProps as SelectFieldProps).options = [];\r\n }\r\n }\r\n });\r\n }\r\n\r\n private async setSearchParams(columns: ProTableColumn[]) {\r\n this._searchFiledColumns = [];\r\n columns\r\n .filter((item) => {\r\n const flag = !item.hideInSearch && item.valueType;\r\n if (flag) {\r\n this._searchFiledColumns.push(cloneDeep(item));\r\n }\r\n return flag;\r\n })\r\n .forEach((column) => {\r\n const key = column.fieldProps?.name || column.prop;\r\n let defaultValue = PRO_TABLE_DEFAULT_PROPS[column.valueType].value;\r\n\r\n // 对于checkbox类型,从options中找出checked为true的项作为默认值\r\n if (column.valueType === \"checkbox\") {\r\n const checkedValues = (column.fieldProps?.options || [])\r\n .filter((opt: OptionsType) => opt.checked)\r\n .map((opt: OptionsType) => opt.value);\r\n this._searchParams[key] =\r\n checkedValues.length > 0 ? checkedValues : defaultValue;\r\n } else {\r\n this._searchParams[key] = column.fieldProps?.value || defaultValue;\r\n }\r\n\r\n // 初始化 autoComplete 数据源\r\n if (column.valueType === \"autoComplete\") {\r\n this._autoCompleteDataSources[key] = [];\r\n }\r\n });\r\n\r\n // 根据列的 order 字段进行排序,未设置 order 的放在最后\r\n this._searchFiledColumns.sort((a: any, b: any) => {\r\n const aOrder = isNil(a?.order) ? Number.MAX_SAFE_INTEGER : a.order;\r\n const bOrder = isNil(b?.order) ? Number.MAX_SAFE_INTEGER : b.order;\r\n if (aOrder === bOrder) return 0;\r\n return aOrder - bOrder;\r\n });\r\n\r\n this.setSearchFormDefaultProp(this._searchFiledColumns);\r\n\r\n // 并发加载所有需要异步获取的选项\r\n this.setSelectRequest(this._searchFiledColumns);\r\n }\r\n\r\n private updateTableColumns(injectColumns: ProTableColumn[]) {\r\n // 1. 使用最原始的columns作为数据源,确保辅助列完全不受影响\r\n const originalColumns = cloneDeep(this.columns);\r\n\r\n // 2. 处理字段映射(如果提供了fields参数)\r\n let processedInjectColumns = injectColumns;\r\n\r\n // 3. 分离辅助列和非辅助列(使用原始数据)\r\n const nonAuxiliaryColumns = originalColumns.filter(\r\n (col) => !col.auxiliaryColumn\r\n );\r\n\r\n // 4. 按照injectColumns的顺序重新排列非辅助列\r\n const reorderedNonAuxiliaryColumns: ProTableColumn[] = [];\r\n const remainingNonAuxiliaryColumns = [...nonAuxiliaryColumns]; // 复制一份用于查找和移除\r\n\r\n processedInjectColumns.forEach((injectCol) => {\r\n // 查找非辅助列中对应的下标\r\n const existingColIndex = remainingNonAuxiliaryColumns.findIndex(\r\n (col) => col.prop === injectCol.prop\r\n );\r\n if (existingColIndex !== -1) {\r\n // 如果找到相同列,用injectColumns中的属性覆盖原始columns中的属性\r\n const existingCol = remainingNonAuxiliaryColumns[existingColIndex];\r\n\r\n const updatedCol = { ...existingCol, ...injectCol };\r\n reorderedNonAuxiliaryColumns.push(updatedCol);\r\n // 从剩余数组中移除,避免重复\r\n remainingNonAuxiliaryColumns.splice(existingColIndex, 1);\r\n } else {\r\n // 如果没找到对应的列,直接添加injectColumns中的列\r\n reorderedNonAuxiliaryColumns.push(injectCol);\r\n }\r\n });\r\n\r\n // 5. 处理剩余的原始columns中的非辅助列(在injectColumns中未出现的列)\r\n // 这些列应该被隐藏(设置hideInTable为true)\r\n remainingNonAuxiliaryColumns.forEach((remainingCol) => {\r\n const hiddenCol = { ...remainingCol, hideInTable: true };\r\n reorderedNonAuxiliaryColumns.push(hiddenCol);\r\n });\r\n\r\n // 6. 按照原始columns的顺序重新组合:保持辅助列的原始位置和属性\r\n const finalColumns: ProTableColumn[] = [];\r\n let nonAuxiliaryIndex = 0;\r\n let auxiliaryIndex = 0;\r\n\r\n originalColumns.forEach((originalCol) => {\r\n if (originalCol.auxiliaryColumn) {\r\n // 如果是辅助列,使用原始列数据,完全不进行任何修改\r\n finalColumns.push(originalCol);\r\n auxiliaryIndex++;\r\n } else {\r\n // 如果是非辅助列,使用重新排序后的列,但保留原始列的所有属性\r\n const reorderedCol = reorderedNonAuxiliaryColumns[nonAuxiliaryIndex];\r\n if (reorderedCol) {\r\n // 合并原始列和重新排序后的列,确保保留所有原始属性\r\n const mergedCol = { ...originalCol, ...reorderedCol };\r\n finalColumns.push(mergedCol);\r\n } else {\r\n // 如果重新排序后的列不存在,使用原始列\r\n finalColumns.push(originalCol);\r\n }\r\n nonAuxiliaryIndex++;\r\n }\r\n });\r\n this.formateInnerColumns(finalColumns);\r\n }\r\n\r\n // 通过 Proxy 监听 _searchParams 的属性变更\r\n private createSearchParamsProxy(target: any) {\r\n const self = this;\r\n const handler: ProxyHandler<any> = {\r\n set(obj: any, prop: string | symbol, value: any) {\r\n const key = String(prop);\r\n const oldVal = obj[key];\r\n if (oldVal === value) {\r\n obj[key] = value;\r\n return true;\r\n }\r\n obj[key] = value;\r\n try {\r\n self.onValuesChange.emit({\r\n key,\r\n value,\r\n params: self.getSearchParams(),\r\n });\r\n } catch (e) {}\r\n return true;\r\n },\r\n };\r\n return new Proxy(target, handler);\r\n }\r\n\r\n private clearEmptySearchParams() {\r\n const cloneSearchParams = cloneDeep(this._searchParams);\r\n return cloneSearchParams;\r\n }\r\n\r\n private buildServerSortPayload() {\r\n // 构建激活排序集合(按优先级从低到高,末尾优先)\r\n const activeKeys = this._sortPriority.filter((k) => !!this._sortMap[k]);\r\n if (activeKeys.length === 0) return null;\r\n const sorts = activeKeys.map((field) => {\r\n // 查找对应的列配置,优先使用sortName字段\r\n const column = this._columns.find((col) => col.prop === field);\r\n const sortField = column?.sortName || field;\r\n return {\r\n field: sortField,\r\n order: this._sortMap[field]!,\r\n };\r\n });\r\n if (this.multipleSort) {\r\n return sorts; // 以数组形式提交多列排序\r\n }\r\n const [first] = sorts;\r\n return first; // 兼容单列结构 { field, order }\r\n }\r\n\r\n private sortDataSourceInPlace() {\r\n if (!Array.isArray(this.dataSource) || this.dataSource.length === 0) return;\r\n const activeKeys = this._sortPriority.filter((k) => !!this._sortMap[k]);\r\n if (activeKeys.length === 0) return;\r\n\r\n // 复制一份优先级,从前到后优先级从低到高(最后设置的字段优先)\r\n const keysInPriority = [...activeKeys];\r\n this.dataSource.sort((a: any, b: any) => {\r\n for (let i = keysInPriority.length - 1; i >= 0; i--) {\r\n const field = keysInPriority[i];\r\n const order = this._sortMap[field]!;\r\n const av = a?.[field];\r\n const bv = b?.[field];\r\n const cmp = this.compareValues(av, bv);\r\n if (cmp !== 0) return order === \"ascend\" ? cmp : -cmp;\r\n }\r\n return 0;\r\n });\r\n }\r\n\r\n private compareValues(aVal: any, bVal: any): number {\r\n if (aVal == null && bVal == null) return 0;\r\n if (aVal == null) return -1;\r\n if (bVal == null) return 1;\r\n if (aVal instanceof Date && bVal instanceof Date) {\r\n return aVal.getTime() - bVal.getTime();\r\n }\r\n if (typeof aVal === \"boolean\" && typeof bVal === \"boolean\") {\r\n return aVal === bVal ? 0 : aVal ? 1 : -1;\r\n }\r\n if (typeof aVal === \"number\" && typeof bVal === \"number\") {\r\n return aVal - bVal;\r\n }\r\n if (typeof aVal === \"string\" && typeof bVal === \"string\") {\r\n return aVal.localeCompare(bVal);\r\n }\r\n const aNum = Number(aVal);\r\n const bNum = Number(bVal);\r\n if (!isNaN(aNum) && !isNaN(bNum)) return aNum - bNum;\r\n return String(aVal).localeCompare(String(bVal));\r\n }\r\n\r\n // 执行 autoComplete 数据源查询(实际执行逻辑)\r\n private executeAutoCompleteDataSource(event: Event, column: ProTableColumn) {\r\n const fieldKey = column.fieldProps?.name || column.prop;\r\n\r\n if (\r\n (column.fieldProps as AutoCompleteFieldProps).dataSource &&\r\n typeof (column.fieldProps as AutoCompleteFieldProps).dataSource ===\r\n \"function\"\r\n ) {\r\n try {\r\n const result = (column.fieldProps as AutoCompleteFieldProps).dataSource(\r\n event\r\n );\r\n // 如果返回的是 Promise,处理异步结果\r\n if (result instanceof Promise) {\r\n result\r\n .then((data) => {\r\n this._autoCompleteDataSources[fieldKey] = data || [];\r\n })\r\n .catch((error) => {\r\n console.error(\"AutoComplete dataSource error:\", error);\r\n this._autoCompleteDataSources[fieldKey] = [];\r\n });\r\n } else {\r\n // 同步返回结果\r\n this._autoCompleteDataSources[fieldKey] = result || [];\r\n }\r\n } catch (error) {\r\n console.error(\"AutoComplete dataSource error:\", error);\r\n this._autoCompleteDataSources[fieldKey] = [];\r\n }\r\n }\r\n }\r\n\r\n public getSearchParams(options?: {\r\n useSaved?: boolean; // 使用最近一次查询提交的参数,默认为 false;false 为当前表单值\r\n }): any {\r\n const { useSaved = false } = options || {};\r\n const rawParams = useSaved ? this._savedSearchParams : this._searchParams;\r\n const params = cloneDeep(rawParams || {});\r\n\r\n return {\r\n params,\r\n pageInfo: {\r\n pageIndex: this._pageInfo.pageIndex,\r\n pageSize: this._pageInfo.pageSize,\r\n },\r\n // 在线排序模式:把排序对象提交给接口\r\n ...(this.sortMode === \"server\"\r\n ? { sort: this.buildServerSortPayload() }\r\n : {}),\r\n };\r\n }\r\n\r\n public reload(afterDelete?: boolean) {\r\n this.handleQuery(afterDelete);\r\n }\r\n\r\n public setFieldsValue(fields: Record<string, any>) {\r\n Object.keys(fields).forEach((k) => {\r\n this._searchParams[k] = fields[k]; // 保留 Proxy,逐项赋值触发拦截\r\n });\r\n }\r\n\r\n public setFieldValue(key: string, value: any) {\r\n this._searchParams[key] = value;\r\n }\r\n\r\n public clearSelectedRow() {\r\n this._selectedTableRow = null;\r\n }\r\n\r\n public async setColumns(\r\n columns: ProTableColumn[],\r\n options?: {\r\n reload?: boolean; // 是否重新加载数据,默认为 false\r\n }\r\n ): Promise<void> {\r\n // 更新 columns 输入属性\r\n this.columns = cloneDeep(columns);\r\n\r\n // 重新格式化内部列\r\n this.formateInnerColumns(this.columns);\r\n\r\n // 重新设置搜索参数(异步操作)\r\n // 先清空旧的搜索参数,避免旧数据残留\r\n this._searchParams = {};\r\n await this.setSearchParams(this.columns);\r\n\r\n // 重新创建 Proxy,确保表单项值变化能正常触发事件\r\n this._searchParams = this.createSearchParamsProxy(this._searchParams);\r\n\r\n // 重新注册模板(如果组件已经初始化完成)\r\n if (this.allTemplates) {\r\n this.autoRegisterTemplates();\r\n }\r\n\r\n // 如果设置了 reload 选项为 true,则重新查询数据\r\n if (options?.reload === true) {\r\n this.handleQuery();\r\n }\r\n }\r\n\r\n public getSelectedRowData<T = any>(): T {\r\n return this._selectedTableRow;\r\n }\r\n\r\n public getCheckedRows<T = any>(): T[] {\r\n if (!this.showCheckbox) {\r\n return [];\r\n }\r\n // 返回当前数据源中所有 checked 为 true 的项\r\n // 注意:如果需要获取所有页的选中项,需要遍历所有数据源或使用 _selectedRowIds\r\n return this.dataSource.filter((row) => row.checked === true) as T[];\r\n }\r\n\r\n // 获取指定名称的模板\r\n getTemplate(name: string | undefined): TemplateRef<any> | null {\r\n if (!name) return null;\r\n return this.customTemplates.get(name) || null;\r\n }\r\n\r\n getToolTipTextValue(column: ProTableColumn, data: any): string {\r\n const key =\r\n column.customRender && this.getTemplate(column.customRender)\r\n ? \"\"\r\n : column.ellipsis\r\n ? column.prop\r\n : \"\";\r\n return !key ? \"\" : data[key];\r\n }\r\n\r\n getTableRowChecked(data: any) {\r\n // 启用复选框时:行高亮应与复选框选中状态一致(支持多选)\r\n if (this.showCheckbox) {\r\n return this.isRowChecked(data);\r\n }\r\n // 未启用复选框时:仍然使用单选行高亮\r\n if (!this._selectedTableRow) return false;\r\n return JSON.stringify(this._selectedTableRow) === JSON.stringify(data);\r\n }\r\n\r\n // 检查行是否被禁用\r\n isRowDisabled(data: any): boolean {\r\n if (!this.showCheckbox) return false;\r\n return this.rowDisabled ? this.rowDisabled(data) : false;\r\n }\r\n\r\n // 检查行是否被复选框选中(数据驱动模式)\r\n isRowChecked(data: any): boolean {\r\n if (!this.showCheckbox) return false;\r\n // 直接读取数据对象的 checked 属性\r\n return data.checked === true;\r\n }\r\n\r\n // 切换行的选中状态(数据驱动模式,保留用于兼容)\r\n toggleRowChecked(data: any, checked: boolean, event?: Event) {\r\n if (event) {\r\n event.stopPropagation(); // 阻止事件冒泡,避免触发行点击\r\n }\r\n // 如果行被禁用,不允许切换选中状态\r\n if (this.isRowDisabled(data)) {\r\n return;\r\n }\r\n\r\n // 直接设置数据对象的 checked 属性\r\n data.checked = checked;\r\n\r\n // 同步更新 _selectedRowIds(用于跨页选中)\r\n const id = this.getRowId(data);\r\n if (id !== undefined) {\r\n if (checked) {\r\n this._selectedRowIds.add(id);\r\n } else {\r\n this._selectedRowIds.delete(id);\r\n }\r\n }\r\n\r\n // 同步更新 _selectedRows(用于兼容性)\r\n const index = this._selectedRows.findIndex((row) =>\r\n this.isSameRow(row, data)\r\n );\r\n if (checked) {\r\n if (index === -1) {\r\n this._selectedRows.push(data);\r\n }\r\n // 勾选复选框时同步设置高亮选中行\r\n this._selectedTableRow = data;\r\n } else {\r\n if (index > -1) {\r\n this._selectedRows.splice(index, 1);\r\n }\r\n // 若当前高亮行为该行,则取消高亮\r\n if (\r\n this._selectedTableRow &&\r\n this.isSameRow(this._selectedTableRow, data)\r\n ) {\r\n this._selectedTableRow = null;\r\n }\r\n }\r\n\r\n this.updateCheckAllStatus();\r\n }\r\n\r\n // 更新全选状态(数据驱动模式)\r\n updateCheckAllStatus() {\r\n if (!this.showCheckbox || !Array.isArray(this.dataSource)) {\r\n this._checkedAll = false;\r\n this._indeterminate = false;\r\n return;\r\n }\r\n // 只计算可用的行(未禁用的行)\r\n const availableRows = this.dataSource.filter(\r\n (row) => !this.isRowDisabled(row)\r\n );\r\n // 基于数据对象的 checked 属性计算\r\n const checkedCount = availableRows.filter(\r\n (row) => row.checked === true\r\n ).length;\r\n const totalCount = availableRows.length;\r\n this._checkedAll =\r\n totalCount > 0 && checkedCount > 0 && checkedCount === totalCount;\r\n this._indeterminate = checkedCount > 0 && checkedCount < totalCount;\r\n }\r\n\r\n // 全选/取消全选(数据驱动模式)\r\n toggleCheckAll(checked: boolean, event?: Event) {\r\n if (event) {\r\n event.stopPropagation();\r\n }\r\n\r\n // 只处理可用的行(未禁用的行)\r\n const availableRows = this.dataSource.filter(\r\n (row) => !this.isRowDisabled(row)\r\n );\r\n\r\n // 批量设置 checked 属性\r\n availableRows.forEach((row) => {\r\n row.checked = checked;\r\n\r\n // 同步更新 _selectedRowIds(用于跨页选中)\r\n const id = this.getRowId(row);\r\n if (id !== undefined) {\r\n if (checked) {\r\n this._selectedRowIds.add(id);\r\n } else {\r\n this._selectedRowIds.delete(id);\r\n }\r\n }\r\n });\r\n\r\n // 同步更新 _selectedRows(用于兼容性)\r\n if (checked) {\r\n this._selectedRows = [...availableRows];\r\n // 同步设置高亮选中行为第一条可选数据\r\n this._selectedTableRow =\r\n availableRows.length > 0 ? availableRows[0] : null;\r\n } else {\r\n this._selectedRows = [];\r\n // 取消高亮\r\n this._selectedTableRow = null;\r\n }\r\n\r\n this.updateCheckAllStatus();\r\n }\r\n\r\n // 获取选中的行数据(保留用于兼容性)\r\n getSelectedRows(): any[] {\r\n return this.getCheckedRows();\r\n }\r\n\r\n // 处理行 checkbox 变化事件(数据驱动模式)\r\n handleRowCheckedChange(data: any, checked: boolean): void {\r\n if (this.isRowDisabled(data)) {\r\n return;\r\n }\r\n\r\n // 数据对象的 checked 属性已经通过双向绑定自动更新\r\n // 这里只需要同步更新 _selectedRowIds 和 _selectedRows\r\n\r\n // 同步更新 _selectedRowIds(用于跨页选中)\r\n const id = this.getRowId(data);\r\n if (id !== undefined) {\r\n if (checked) {\r\n this._selectedRowIds.add(id);\r\n } else {\r\n this._selectedRowIds.delete(id);\r\n }\r\n }\r\n\r\n // 同步更新 _selectedRows(用于兼容性)\r\n const index = this._selectedRows.findIndex((row) =>\r\n this.isSameRow(row, data)\r\n );\r\n if (checked) {\r\n if (index === -1) {\r\n this._selectedRows.push(data);\r\n }\r\n // 勾选复选框时同步设置高亮选中行\r\n this._selectedTableRow = data;\r\n } else {\r\n if (index > -1) {\r\n this._selectedRows.splice(index, 1);\r\n }\r\n // 若当前高亮行为该行,则取消高亮\r\n if (\r\n this._selectedTableRow &&\r\n this.isSameRow(this._selectedTableRow, data)\r\n ) {\r\n this._selectedTableRow = null;\r\n }\r\n }\r\n\r\n // 更新全选状态\r\n this.updateCheckAllStatus();\r\n }\r\n\r\n // 刷新全选状态(用于其他场景)\r\n refreshCheckAllStatus(): void {\r\n this.updateCheckAllStatus();\r\n }\r\n\r\n // 获取行的唯一标识(用于跨页选中)\r\n private getRowId(data: any): string | number | undefined {\r\n return data.id ?? data.key ?? undefined;\r\n }\r\n\r\n // 判断两行是否为同一行\r\n private isSameRow(row1: any, row2: any): boolean {\r\n const id1 = this.getRowId(row1);\r\n const id2 = this.getRowId(row2);\r\n\r\n if (id1 !== undefined && id2 !== undefined) {\r\n return id1 === id2;\r\n }\r\n\r\n // fallback 到 JSON 比较\r\n return JSON.stringify(row1) === JSON.stringify(row2);\r\n }\r\n\r\n // 清空选中的行(数据驱动模式)\r\n clearSelectedRows() {\r\n // 清空当前数据源中所有项的 checked 状态\r\n if (Array.isArray(this.dataSource)) {\r\n this.dataSource.forEach((row) => {\r\n row.checked = false;\r\n });\r\n }\r\n\r\n // 清空选中集合\r\n this._selectedRowIds.clear();\r\n this._selectedRows = [];\r\n this._checkedAll = false;\r\n this._indeterminate = false;\r\n this._selectedTableRow = null;\r\n }\r\n\r\n handleFieldCheckBoxChange(checkBoxOptions: OptionsType[], key: string) {\r\n this.setFieldsValue({\r\n [key]: checkBoxOptions\r\n .filter((item) => item.checked)\r\n .map((item) => item.value),\r\n });\r\n }\r\n\r\n handleSearch() {\r\n this._savedSearchParams = this.clearEmptySearchParams();\r\n this._pageInfo.pageIndex = 1;\r\n this.handleQuery();\r\n }\r\n\r\n handleResetForm() {\r\n Object.keys(this._searchParams).forEach((key) => {\r\n const targetColumn = this._searchFiledColumns.find((item) => {\r\n return (item.fieldProps?.name || item.prop) === key;\r\n });\r\n\r\n // 对于checkbox类型,需要特殊处理默认值\r\n if (targetColumn?.valueType === \"checkbox\") {\r\n // 从原始columns配置中获取初始配置,以确保使用正确的默认值\r\n const originalColumn = this.columns.find((item) => {\r\n return (item.fieldProps?.name || item.prop) === key;\r\n });\r\n\r\n // 从原始options中找出checked为true的项作为默认值\r\n const originalFieldProps = originalColumn?.fieldProps as\r\n | CheckboxFieldProps\r\n | undefined;\r\n const checkedValues = (originalFieldProps?.options || [])\r\n .filter((opt: OptionsType) => opt.checked)\r\n .map((opt: OptionsType) => opt.value);\r\n const defaultValue =\r\n checkedValues.length > 0\r\n ? checkedValues\r\n : PRO_TABLE_DEFAULT_PROPS[targetColumn.valueType].value;\r\n\r\n this._searchParams[key] = defaultValue;\r\n\r\n // 根据默认值恢复options的checked状态,使用原始options的结构\r\n const defaultValues = Array.isArray(defaultValue) ? defaultValue : [];\r\n const originalOptions = originalFieldProps?.options || [];\r\n const targetFieldProps = targetColumn.fieldProps as CheckboxFieldProps;\r\n targetFieldProps.options = originalOptions.map((item: OptionsType) => {\r\n return {\r\n ...item,\r\n checked: defaultValues.includes(item.value),\r\n };\r\n });\r\n } else {\r\n this._searchParams[key] = targetColumn?.fieldProps\r\n ? targetColumn?.fieldProps.value ||\r\n PRO_TABLE_DEFAULT_PROPS[targetColumn.valueType].value\r\n : PRO_TABLE_DEFAULT_PROPS[targetColumn.valueType].value;\r\n }\r\n });\r\n\r\n this._savedSearchParams = {};\r\n this._pageInfo.pageIndex = 1;\r\n this.onResetFormBeforeReload.emit();\r\n this.handleQuery();\r\n }\r\n\r\n handlePageIndexChange(pageIndex: number) {\r\n this._pageInfo.pageIndex = pageIndex;\r\n this.handleQuery();\r\n }\r\n\r\n handlePageSizeChange(pageSize: any) {\r\n this._pageInfo.pageSize = pageSize;\r\n this._pageInfo.pageIndex = 1;\r\n this.handleQuery();\r\n }\r\n\r\n async handleQuery(afterDelete?: boolean) {\r\n // 删除后刷新且当前页仅剩一条记录时,若不在第一页则先回退一页\r\n if (\r\n afterDelete &&\r\n Array.isArray(this.dataSource) &&\r\n this.dataSource.length === 1 &&\r\n this._pageInfo.pageIndex > 1\r\n ) {\r\n this._pageInfo.pageIndex = this._pageInfo.pageIndex - 1;\r\n }\r\n\r\n // 保存删除前的数据源(用于删除后查询时移除被删除项的选中状态)\r\n const previousDataSource =\r\n afterDelete && this.showCheckbox ? [...this.dataSource] : [];\r\n\r\n this._loading = true;\r\n if (this.request) {\r\n try {\r\n const result = await this.request({\r\n params: this.clearEmptySearchParams(),\r\n pageInfo: {\r\n pageIndex: this._pageInfo.pageIndex,\r\n pageSize: this._pageInfo.pageSize,\r\n },\r\n // 在线排序模式:把排序对象提交给接口\r\n ...(this.sortMode === \"server\"\r\n ? { sort: this.buildServerSortPayload() }\r\n : {}),\r\n });\r\n\r\n // 自动注入 checked 字段,支持跨页选中\r\n if (this.showCheckbox) {\r\n this.dataSource = (result.data || []).map((item) => {\r\n const id = this.getRowId(item);\r\n // 如果数据已有 checked 属性,保留;否则根据 _selectedRowIds 判断\r\n const checked =\r\n item.checked !== undefined\r\n ? item.checked\r\n : id !== undefined\r\n ? this._selectedRowIds.has(id)\r\n : false;\r\n return {\r\n ...item,\r\n checked: checked,\r\n };\r\n });\r\n\r\n // 删除后查询:移除被删除项的选中状态\r\n if (afterDelete && previousDataSource.length > 0) {\r\n const newDataIds = new Set(\r\n this.dataSource.map((item) => this.getRowId(item))\r\n );\r\n\r\n // 遍历之前的数据源,如果不在新数据源中,说明被删除了,需要清除其选中状态\r\n previousDataSource.forEach((oldItem) => {\r\n const oldId = this.getRowId(oldItem);\r\n if (oldId !== undefined && !newDataIds.has(oldId)) {\r\n // 被删除的项,从选中集合中移除\r\n this._selectedRowIds.delete(oldId);\r\n // 如果数据对象还在其他地方引用,清除其选中状态\r\n if (oldItem.checked !== undefined) {\r\n oldItem.checked = false;\r\n }\r\n }\r\n });\r\n }\r\n } else {\r\n this.dataSource = result.data || [];\r\n }\r\n\r\n this.summaryData = result.summaryData || null;\r\n // 本地排序模式:拿到数据后在前端排序\r\n if (this.sortMode === \"local\") {\r\n this.sortDataSourceInPlace();\r\n }\r\n this._pageInfo.total = result.total || 0;\r\n // 更新全选状态\r\n if (this.showCheckbox) {\r\n this.updateCheckAllStatus();\r\n }\r\n } catch (error) {\r\n console.error(\"查询失败:\", error);\r\n this.dataSource = [];\r\n this._pageInfo.total = 0;\r\n this.summaryData = null;\r\n } finally {\r\n this._loading = false;\r\n this._selectedTableRow = null;\r\n }\r\n } else {\r\n console.warn(\"未提供 _request 回调函数\");\r\n this._loading = false;\r\n }\r\n // 不再调用 clearSelectedRows(),保留跨页选中状态\r\n }\r\n\r\n // 触发列排序变更\r\n onSortChange(sortKey: string, sortOrder: \"ascend\" | \"descend\" | null) {\r\n // 单列排序:重置其它列;多列排序:保留其它列\r\n if (!this.multipleSort) {\r\n Object.keys(this._sortMap).forEach((key) => {\r\n if (key !== sortKey) this._sortMap[key] = null;\r\n });\r\n }\r\n this._sortMap[sortKey] = sortOrder;\r\n\r\n // 维护优先级队列:有序列且非空 -> 置于末尾;为空 -> 移除\r\n this._sortPriority = this._sortPriority.filter((k) => k !== sortKey);\r\n if (sortOrder) {\r\n this._sortPriority.push(sortKey);\r\n }\r\n\r\n if (this.sortMode === \"local\") {\r\n this.sortDataSourceInPlace();\r\n } else {\r\n // 在线排序:重新请求\r\n this.handleQuery();\r\n }\r\n }\r\n\r\n getSortOrder(sortKey: string): \"ascend\" | \"descend\" | null {\r\n return this._sortMap[sortKey] || null;\r\n }\r\n\r\n handleTableRowClick(data: any) {\r\n this._selectedTableRow = data;\r\n // 如果开启了复选框,点击行时只选中点击行(如果行未被禁用)\r\n if (this.showCheckbox && !this.isRowDisabled(data)) {\r\n // 先清空所有选中行\r\n this._selectedRows = [];\r\n // 只选中当前点击的行\r\n this.toggleRowChecked(data, true);\r\n }\r\n this.onRowClick.emit(this._selectedTableRow);\r\n }\r\n\r\n handleTableRowDbClick(data: any) {\r\n this._selectedTableRow = data;\r\n this.onRowDbClick.emit(this._selectedTableRow);\r\n }\r\n\r\n handleColumnsSettingConfirm() {\r\n this.queryDynamicColumns();\r\n }\r\n\r\n // 处理 autoComplete 输入事件(带防抖)\r\n handleAutoCompleteInput(event: Event, column: ProTableColumn) {\r\n const fieldKey = column.fieldProps?.name || column.prop;\r\n\r\n // 如果该字段还没有防抖函数,创建一个\r\n if (!this._autoCompleteDebounceMap.has(fieldKey)) {\r\n const debouncedFn = debounce((evt: Event) => {\r\n // 重新查找对应的 column,确保使用最新的配置\r\n const currentColumn = this._searchFiledColumns.find(\r\n (col) => (col.fieldProps?.name || col.prop) === fieldKey\r\n );\r\n if (currentColumn) {\r\n this.executeAutoCompleteDataSource(evt, currentColumn);\r\n }\r\n }, 300); // 300ms 防抖延迟\r\n this._autoCompleteDebounceMap.set(fieldKey, debouncedFn);\r\n }\r\n\r\n // 调用防抖函数\r\n const debouncedFn = this._autoCompleteDebounceMap.get(fieldKey);\r\n if (debouncedFn) {\r\n debouncedFn(event);\r\n }\r\n }\r\n\r\n // 获取 autoComplete 的数据源\r\n getAutoCompleteDataSource(column: ProTableColumn): any[] {\r\n const fieldKey = column.fieldProps?.name || column.prop;\r\n return this._autoCompleteDataSources[fieldKey] || [];\r\n }\r\n\r\n getFieldProps(column: ProTableColumn): any {\r\n return column.fieldProps;\r\n }\r\n\r\n // 获取指定名称的label模板\r\n getLabelTemplate(name: string | undefined): TemplateRef<any> | null {\r\n if (!name) return null;\r\n return this.customTemplates.get(name) || null;\r\n }\r\n\r\n // 获取 form-item 的动态类名\r\n getFormItemClassName(column: ProTableColumn): string {\r\n const fieldName = this.getFieldProps(column).name || column.prop;\r\n return `pro-table-${fieldName}-form-item`;\r\n }\r\n}\r\n","<app-page-container\r\n [title]=\"title\"\r\n [showHeader]=\"showSearchBar\"\r\n ngClass=\"pro-table-container\"\r\n>\r\n <ng-template #header>\r\n <app-table-search-bar\r\n *ngIf=\"showSearchBar\"\r\n [labelWidth]=\"labelWidth\"\r\n [labelAlign]=\"labelAlign\"\r\n [formItemWidth]=\"formItemWidth\"\r\n >\r\n <ng-template #leftContent>\r\n <nz-form-item\r\n *ngFor=\"let column of _searchFiledColumns\"\r\n [ngClass]=\"getFormItemClassName(column)\"\r\n >\r\n <nz-form-label *ngIf=\"!getFieldProps(column).hideLabel\" nzNoColon>\r\n <!-- 检查是否有自定义label模板 -->\r\n <ng-container\r\n *ngIf=\"\r\n column.customLabelRender &&\r\n getLabelTemplate(column.customLabelRender);\r\n else defaultLabel\r\n \"\r\n >\r\n <ng-container\r\n [ngTemplateOutlet]=\"getLabelTemplate(column.customLabelRender)\"\r\n [ngTemplateOutletContext]=\"{\r\n $implicit: column,\r\n column: column,\r\n fieldProps: getFieldProps(column)\r\n }\"\r\n >\r\n </ng-container>\r\n </ng-container>\r\n <ng-template #defaultLabel>\r\n {{ getFieldProps(column).label || column.title }}\r\n </ng-template>\r\n </nz-form-label>\r\n <nz-form-control *ngIf=\"column.valueType === 'input'\">\r\n <input\r\n nz-input\r\n [name]=\"getFieldProps(column).name || column.prop\"\r\n [placeholder]=\"getFieldProps(column).placeHolder\"\r\n [disabled]=\"getFieldProps(column).disabled\"\r\n [(ngModel)]=\"\r\n _searchParams[getFieldProps(column).name || column.prop]\r\n \"\r\n />\r\n </nz-form-control>\r\n <nz-form-control *ngIf=\"column.valueType === 'inputPlate'\">\r\n <app-plate-input\r\n [name]=\"getFieldProps(column).name || column.prop\"\r\n [(ngModel)]=\"\r\n _searchParams[getFieldProps(column).name || column.prop]\r\n \"\r\n ></app-plate-input>\r\n </nz-form-control>\r\n <nz-form-control *ngIf=\"column.valueType === 'select'\">\r\n <nz-select\r\n [(ngModel)]=\"\r\n _searchParams[getFieldProps(column).name || column.prop]\r\n \"\r\n [nzAllowClear]=\"getFieldProps(column).allowClear\"\r\n [nzPlaceHolder]=\"getFieldProps(column).placeHolder\"\r\n [name]=\"getFieldProps(column).name || column.prop\"\r\n [nzOptions]=\"getFieldProps(column).options\"\r\n [nzDisabled]=\"getFieldProps(column).disabled\"\r\n >\r\n </nz-select>\r\n </nz-form-control>\r\n <nz-form-control *ngIf=\"column.valueType === 'selectMultiple'\">\r\n <nz-select\r\n [(ngModel)]=\"\r\n _searchParams[getFieldProps(column).name || column.prop]\r\n \"\r\n [nzAllowClear]=\"getFieldProps(column).allowClear\"\r\n [nzPlaceHolder]=\"getFieldProps(column).placeHolder\"\r\n [name]=\"getFieldProps(column).name || column.prop\"\r\n [nzOptions]=\"getFieldProps(column).options\"\r\n [nzDisabled]=\"getFieldProps(column).disabled\"\r\n nzMode=\"multiple\"\r\n [nzMaxTagCount]=\"2\"\r\n [nzMaxTagPlaceholder]=\"nzMaxTagPlaceholder\"\r\n [nzCustomTemplate]=\"defaultTemplate\"\r\n >\r\n <ng-template #nzMaxTagPlaceholder>\r\n +\r\n {{\r\n _searchParams[getFieldProps(column).name || column.prop]\r\n ?.length\r\n }}\r\n </ng-template>\r\n <ng-template #defaultTemplate let-selected>\r\n {{ selected.nzLabel.length > 4 ? selected.nzLabel.substring(0, 4) + '...' : selected.nzLabel }}\r\n </ng-template>\r\n </nz-select>\r\n </nz-form-control>\r\n <nz-form-control *ngIf=\"column.valueType === 'date'\">\r\n <nz-date-picker\r\n [nzShowTime]=\"getFieldProps(column).showTime\"\r\n [nzFormat]=\"getFieldProps(column).format\"\r\n [nzPlaceHolder]=\"getFieldProps(column).placeHolder\"\r\n [nzAllowClear]=\"getFieldProps(column).allowClear\"\r\n [nzDisabled]=\"getFieldProps(column).disabled\"\r\n [(ngModel)]=\"\r\n _searchParams[getFieldProps(column).name || column.prop]\r\n \"\r\n [nzMode]=\"getFieldProps(column).mode\"\r\n ></nz-date-picker>\r\n </nz-form-control>\r\n <nz-form-control *ngIf=\"column.valueType === 'checkbox'\">\r\n <nz-checkbox-group\r\n [class]=\"\r\n getFieldProps(column).noStyle\r\n ? 'pro-table-checkboxgroup-nostyle'\r\n : ''\r\n \"\r\n [(ngModel)]=\"getFieldProps(column).options\"\r\n [nzDisabled]=\"getFieldProps(column).disabled\"\r\n (ngModelChange)=\"\r\n handleFieldCheckBoxChange(\r\n $event,\r\n getFieldProps(column).name || column.prop\r\n )\r\n \"\r\n ></nz-checkbox-group>\r\n </nz-form-control>\r\n <nz-form-control *ngIf=\"column.valueType === 'autoComplete'\">\r\n <input\r\n nz-input\r\n [(ngModel)]=\"\r\n _searchParams[getFieldProps(column)?.name || column.prop]\r\n \"\r\n (input)=\"handleAutoCompleteInput($event, column)\"\r\n [nzAutocomplete]=\"auto\"\r\n [disabled]=\"getFieldProps(column)?.disabled\"\r\n [placeholder]=\"getFieldProps(column)?.placeHolder\"\r\n />\r\n <nz-autocomplete\r\n [nzBackfill]=\"getFieldProps(column).backFill\"\r\n [nzDefaultActiveFirstOption]=\"\r\n getFieldProps(column).defaultActiveFirstOption\r\n \"\r\n [nzWidth]=\"getFieldProps(column).width\"\r\n #auto\r\n >\r\n <nz-auto-option\r\n *ngFor=\"let option of getAutoCompleteDataSource(column)\"\r\n [nzValue]=\"\r\n getFieldProps(column).returnFullData ? option : option.value\r\n \"\r\n [nzLabel]=\"option.label\"\r\n [nzDisabled]=\"option.disabled\"\r\n >\r\n {{ option.label }}\r\n </nz-auto-option>\r\n </nz-autocomplete>\r\n </nz-form-control>\r\n <nz-form-control *ngIf=\"column.valueType === 'custom'\">\r\n <app-dynamic-search-field\r\n [component]=\"getFieldProps(column).component\"\r\n [value]=\"_searchParams[getFieldProps(column).name || column.prop]\"\r\n [props]=\"getFieldProps(column)\"\r\n (valueChange)=\"\r\n setFieldValue(getFieldProps(column).name || column.prop, $event)\r\n \"\r\n ></app-dynamic-search-field>\r\n </nz-form-control>\r\n <nz-form-control *ngIf=\"column.valueType === 'inputNumber'\">\r\n <nz-input-number\r\n [style.width]=\"'100%'\"\r\n [(ngModel)]=\"\r\n _searchParams[getFieldProps(column).name || column.prop]\r\n \"\r\n [nzPlaceHolder]=\"getFieldProps(column).placeHolder\"\r\n [nzDisabled]=\"getFieldProps(column).disabled\"\r\n [nzFormatter]=\"getFieldProps(column).formatterPercent\"\r\n [nzParser]=\"getFieldProps(column).parserPercent\"\r\n ></nz-input-number>\r\n </nz-form-control>\r\n </nz-form-item>\r\n </ng-template>\r\n <ng-template #actionTextBtn>\r\n <nz-space [nzSize]=\"4\">\r\n <ng-template nzSpaceItem *ngIf=\"showSearchBtn\">\r\n <button nz-button nzType=\"primary\" (click)=\"handleSearch()\">\r\n {{ confirmBtnText }}\r\n </button>\r\n </ng-template>\r\n <ng-template nzSpaceItem *ngIf=\"showClearBtn\">\r\n <button nz-button (click)=\"handleResetForm()\">\r\n {{ clearBtnText }}\r\n </button>\r\n </ng-template>\r\n </nz-space>\r\n </ng-template>\r\n <ng-template #actionImgBtn>\r\n <nz-space>\r\n <ng-container *ngTemplateOutlet=\"imgActionBarTpl\"></ng-container>\r\n <ng-template nzSpaceItem class=\"setting-space-item\" *ngIf=\"showColumnSetting\">\r\n <span nz-tooltip nzTooltipTitle=\"设置字段\">\r\n <app-colmuns-setting\r\n [columns]=\"columns\"\r\n [selectedColumns]=\"_serverColumns\"\r\n [tableName]=\"tableName\"\r\n (afterConfirm)=\"handleColumnsSettingConfirm()\"\r\n ></app-colmuns-setting>\r\n </span>\r\n </ng-template>\r\n </nz-space>\r\n </ng-template>\r\n </app-table-search-bar>\r\n </ng-template>\r\n\r\n <ng-template #body>\r\n <div class=\"mb-4\">\r\n <ng-container *ngIf=\"showActionBar\">\r\n <ng-container *ngTemplateOutlet=\"actionBarTpl\"></ng-container>\r\n </ng-container>\r\n </div>\r\n <ng-container *ngIf=\"customTableRender\">\r\n <ng-container *ngTemplateOutlet=\"customTableRender\"></ng-container>\r\n </ng-container>\r\n <nz-table\r\n *ngIf=\"!customTableRender && _showTable\"\r\n #dynamicTable\r\n nzSize=\"small\"\r\n nzShowSizeChanger\r\n [nzBordered]=\"bordered\"\r\n [nzOuterBordered]=\"outerBordered\"\r\n [nzData]=\"dataSource\"\r\n [nzPageIndex]=\"_pageInfo.pageIndex\"\r\n [nzPageSize]=\"_pageInfo.pageSize\"\r\n [nzTotal]=\"_pageInfo.total\"\r\n [nzPageSizeOptions]=\"_pageInfo.pageSizeOptions\"\r\n [nzShowPagination]=\"showPagination\"\r\n [nzShowTotal]=\"totalTemplate\"\r\n [nzLoading]=\"_loading\"\r\n [nzFrontPagination]=\"frontPagination\"\r\n [nzScroll]=\"scroll\"\r\n (nzPageIndexChange)=\"handlePageIndexChange($event)\"\r\n (nzPageSizeChange)=\"handlePageSizeChange($event)\"\r\n >\r\n <thead>\r\n <tr>\r\n <!-- 复选框列(当 showCheckbox=true 时显示) -->\r\n <th\r\n *ngIf=\"showCheckbox\"\r\n [nzWidth]=\"'50px'\"\r\n [nzAlign]=\"'center'\"\r\n style=\"text-align: center\"\r\n [(nzChecked)]=\"_checkedAll\"\r\n [nzIndeterminate]=\"_indeterminate\"\r\n (nzCheckedChange)=\"toggleCheckAll($event)\"\r\n (click)=\"$event.stopPropagation()\"\r\n ></th>\r\n <th\r\n *ngFor=\"let column of _columns\"\r\n [nzWidth]=\"column.width\"\r\n [nzAlign]=\"column.align\"\r\n [nzLeft]=\"column.fixedLeft\"\r\n [nzRight]=\"column.fixedRight\"\r\n [nzShowSort]=\"!!column.sorter\"\r\n [nzSortOrder]=\"getSortOrder(column.prop)\"\r\n (nzSortOrderChange)=\"onSortChange(column.prop, $event)\"\r\n >\r\n {{ column.title }}\r\n </th>\r\n </tr>\r\n </thead>\r\n\r\n <tbody>\r\n <tr\r\n style=\"cursor: pointer\"\r\n *ngFor=\"let data; let i = index; of: dynamicTable.data\"\r\n [ngClass]=\"{\r\n 'ant-table-custom-row-selected': !!getTableRowChecked(data),\r\n 'ant-table-custom-row-even': i % 2 === 0,\r\n 'ant-table-custom-row-odd': i % 2 !== 0\r\n }\"\r\n (click)=\"handleTableRowClick(data)\"\r\n (dblclick)=\"handleTableRowDbClick(data)\"\r\n >\r\n <!-- 复选框列(当 showCheckbox=true 时显示) -->\r\n <td\r\n *ngIf=\"showCheckbox\"\r\n [nzAlign]=\"'center'\"\r\n style=\"text-align: center; width: 50px\"\r\n [(nzChecked)]=\"data.checked\"\r\n [nzDisabled]=\"isRowDisabled(data)\"\r\n (nzCheckedChange)=\"handleRowCheckedChange(data, $event)\"\r\n (click)=\"$event.stopPropagation()\"\r\n ></td>\r\n <td\r\n *ngFor=\"let column of _columns\"\r\n [nzLeft]=\"column.fixedLeft\"\r\n [nzRight]=\"column.fixedRight\"\r\n [nzAlign]=\"column.align\"\r\n [ngClass]=\"{\r\n 'pro-nowrap': true\r\n }\"\r\n >\r\n <!-- 检查是否有自定义模板 -->\r\n <ng-container\r\n *ngIf=\"\r\n column.customRender && getTemplate(column.customRender);\r\n let template\r\n \"\r\n >\r\n <ng-template\r\n [ngTemplateOutlet]=\"template\"\r\n [ngTemplateOutletContext]=\"{\r\n $implicit: data,\r\n data: data,\r\n column: column,\r\n index: i,\r\n pageInfo: _pageInfo\r\n }\"\r\n >\r\n </ng-template>\r\n </ng-container>\r\n\r\n <!-- 默认渲染逻辑 -->\r\n <ng-container\r\n *ngIf=\"!column.customRender || !getTemplate(column.customRender)\"\r\n >\r\n <ng-container *ngIf=\"column.ellipsis\">\r\n <div\r\n class=\"pro-ellipsis\"\r\n [title]=\"data[column.prop]\"\r\n [ngStyle]=\"{\r\n width: 'calc(' + column.width + ' - 25px)'\r\n }\"\r\n >\r\n {{ data[column.prop] }}\r\n </div>\r\n </ng-container>\r\n <ng-container *ngIf=\"!column.ellipsis\">\r\n {{ data[column.prop] }}\r\n </ng-container>\r\n </ng-container>\r\n </td>\r\n </tr>\r\n <tr *ngIf=\"summaryData && _pageInfo.total > 0\">\r\n <!-- 汇总行的复选框列(当 showCheckbox=true 时显示,但为空) -->\r\n <td\r\n *ngIf=\"showCheckbox\"\r\n style=\"font-weight: bold; border-right: 1px solid #e8e8e8\"\r\n ></td>\r\n <td\r\n *ngFor=\"let column; let i = index; of: _columns\"\r\n [nzLeft]=\"column.fixedLeft\"\r\n [nzRight]=\"column.fixedRight\"\r\n style=\"font-weight: bold; border-right: 1px solid #e8e8e8\"\r\n [nzAlign]=\"column.align\"\r\n >\r\n <span *ngIf=\"i === 0\">总计</span>\r\n <ng-container *ngIf=\"i !== 0 && column.summary\">\r\n {{\r\n column.summary?.format\r\n ? column.summary?.format(\r\n summaryData[column.summary?.name || column.prop]\r\n )\r\n : summaryData[column.summary?.name || column.prop]\r\n }}\r\n </ng-container>\r\n </td>\r\n </tr>\r\n </tbody>\r\n <ng-template #totalTemplate let-total\r\n >共 {{ _pageInfo.total }} 条记录</ng-template\r\n >\r\n </nz-table>\r\n </ng-template>\r\n</app-page-container>\r\n","import { CommonModule } from \"@angular/common\";\r\nimport { HttpClientModule } from \"@angular/common/http\";\r\nimport { NgModule } from \"@angular/core\";\r\nimport { FormsModule, ReactiveFormsModule } from \"@angular/forms\";\r\nimport { RouterModule } from \"@angular/router\";\r\nimport { NzCardModule } from \"ng-zorro-antd/card\";\r\nimport { PageContainerComponent } from \"./page-container.component\";\r\n\r\n@NgModule({\r\n imports: [\r\n CommonModule,\r\n FormsModule,\r\n HttpClientModule,\r\n RouterModule,\r\n NzCardModule,\r\n ReactiveFormsModule,\r\n ],\r\n declarations: [PageContainerComponent],\r\n providers: [],\r\n exports: [PageContainerComponent],\r\n})\r\nexport class PageContainerModule {}\r\n","import { NgModule } from \"@angular/core\";\r\nimport { TrimInputDirective } from \"./trim-input.directive\";\r\n\r\n@NgModule({\r\n declarations: [TrimInputDirective],\r\n exports: [TrimInputDirective],\r\n})\r\nexport class TrimInputModule {}\r\n","import { CommonModule } from \"@angular/common\";\r\nimport { NgModule } from \"@angular/core\";\r\nimport { FormsModule } from \"@angular/forms\";\r\nimport { NzGridModule } from \"ng-zorro-antd/grid\";\r\nimport { NzIconModule } from \"ng-zorro-antd/icon\";\r\nimport { NzInputModule } from \"ng-zorro-antd/input\";\r\nimport { NzPopoverModule } from \"ng-zorro-antd/popover\";\r\nimport { PlateInputComponent } from \"./plate-input.component\";\r\nimport { TrimInputModule } from \"../directives/trim-input.module\";\r\n\r\n@NgModule({\r\n imports: [\r\n CommonModule,\r\n FormsModule,\r\n NzGridModule,\r\n NzInputModule,\r\n NzPopoverModule,\r\n NzIconModule,\r\n TrimInputModule,\r\n ],\r\n declarations: [PlateInputComponent],\r\n providers: [],\r\n exports: [PlateInputComponent],\r\n})\r\nexport class PlateInputModule {}\r\n","import { CommonModule } from \"@angular/common\";\r\nimport { HttpClientModule } from \"@angular/common/http\";\r\nimport { NgModule } from \"@angular/core\";\r\nimport { FormsModule, ReactiveFormsModule } from \"@angular/forms\";\r\nimport { RouterModule } from \"@angular/router\";\r\nimport { NzGridModule } from \"ng-zorro-antd/grid\";\r\nimport { TableSearchBarComponent } from \"./table-search-bar.component\";\r\nimport { NzSpaceModule } from \"ng-zorro-antd/space\";\r\n\r\n@NgModule({\r\n imports: [\r\n CommonModule,\r\n FormsModule,\r\n HttpClientModule,\r\n RouterModule,\r\n NzGridModule,\r\n ReactiveFormsModule,\r\n NzSpaceModule,\r\n ],\r\n declarations: [TableSearchBarComponent],\r\n providers: [],\r\n exports: [TableSearchBarComponent],\r\n})\r\nexport class TableSearchBarModule {}\r\n","import { DragDropModule } from \"@angular/cdk/drag-drop\";\r\nimport { CommonModule } from \"@angular/common\";\r\nimport { HttpClientModule } from \"@angular/common/http\";\r\nimport { NgModule } from \"@angular/core\";\r\nimport { FormsModule, ReactiveFormsModule } from \"@angular/forms\";\r\nimport { RouterModule } from \"@angular/router\";\r\nimport { NzButtonModule } from \"ng-zorro-antd/button\";\r\nimport { NzCheckboxModule } from \"ng-zorro-antd/checkbox\";\r\nimport { NzDatePickerModule } from \"ng-zorro-antd/date-picker\";\r\nimport { NzFormModule } from \"ng-zorro-antd/form\";\r\nimport { NzGridModule } from \"ng-zorro-antd/grid\";\r\nimport { NzIconModule } from \"ng-zorro-antd/icon\";\r\nimport { NzInputModule } from \"ng-zorro-antd/input\";\r\nimport { NzModalModule } from \"ng-zorro-antd/modal\";\r\nimport { NzPopoverModule } from \"ng-zorro-antd/popover\";\r\nimport { NzSelectModule } from \"ng-zorro-antd/select\";\r\nimport { NzSpaceModule } from \"ng-zorro-antd/space\";\r\nimport { NzTableModule } from \"ng-zorro-antd/table\";\r\nimport { NzTypographyModule } from \"ng-zorro-antd/typography\";\r\nimport { PageContainerModule } from \"./page-container/page-container.module\";\r\nimport { PlateInputModule } from \"./plate-input/plate-input.module\";\r\nimport { TableSearchBarModule } from \"./table-search-bar/table-search-bar-module\";\r\nimport { ColmunsSettingComponent } from \"./components/colmuns-setting/colmuns-setting.component\";\r\nimport { ProTableComponent } from \"./pro-table.component\";\r\nimport { DynamicSearchFieldComponent } from \"./components/dynamic-search-field/dynamic-search-field.component\";\r\nimport { NzAutocompleteModule } from 'ng-zorro-antd/auto-complete';\r\nimport { NzInputNumberModule } from 'ng-zorro-antd/input-number';\r\nimport { NzToolTipModule } from \"ng-zorro-antd/tooltip\";\r\nimport { PRO_TABLE_COLUMN_REMOTE } from \"./tokens\";\r\n\r\n@NgModule({\r\n imports: [\r\n CommonModule,\r\n FormsModule,\r\n HttpClientModule,\r\n RouterModule,\r\n NzFormModule,\r\n NzSelectModule,\r\n NzSpaceModule,\r\n NzGridModule,\r\n NzInputModule,\r\n ReactiveFormsModule,\r\n NzPopoverModule,\r\n NzIconModule,\r\n NzButtonModule,\r\n PageContainerModule,\r\n TableSearchBarModule,\r\n NzTableModule,\r\n PlateInputModule,\r\n NzDatePickerModule,\r\n NzModalModule,\r\n NzCheckboxModule,\r\n NzTypographyModule,\r\n DragDropModule,\r\n NzCheckboxModule,\r\n NzAutocompleteModule,\r\n NzInputNumberModule,\r\n NzToolTipModule,\r\n ],\r\n declarations: [ProTableComponent, ColmunsSettingComponent, DynamicSearchFieldComponent],\r\n providers: [\r\n {\r\n // 默认不提供远程列服务,宿主可覆盖注入\r\n provide: PRO_TABLE_COLUMN_REMOTE,\r\n useValue: null,\r\n },\r\n ],\r\n exports: [ProTableComponent],\r\n})\r\nexport class ProTableModule {}\r\n","import { lastValueFrom } from 'rxjs';\r\nimport { Injectable } from \"@angular/core\";\r\nimport { HttpClient } from \"@angular/common/http\";\r\nimport { PlatePrefixLoadService, PlatePrefixOption } from \"../tokens\";\r\n\r\n/**\r\n * 默认的车牌前缀加载服务实现\r\n * 使用 HttpClient 调用 API 获取车牌前缀选项\r\n */\r\n@Injectable()\r\nexport class DefaultPlatePrefixLoadService implements PlatePrefixLoadService {\r\n private readonly defaultApiUrl = \"/PlateFirstWord/GetPlateFirstWord\";\r\n\r\n constructor(private http: HttpClient) {}\r\n\r\n loadPrefixOptions(): Promise<PlatePrefixOption[]> {\r\n return lastValueFrom(this.http\r\n .post<string[]>(this.defaultApiUrl, { dictCode: \"PlateFirstWord\" }))\r\n .then((list: string[]) => {\r\n const options: PlatePrefixOption[] = [];\r\n // 添加空选项(与旧版保持一致)\r\n options.push({ label: \"\", value: \"\" });\r\n // 转换数据格式\r\n for (let i = 0; i < list.length; i++) {\r\n options.push({\r\n label: list[i],\r\n value: list[i],\r\n });\r\n }\r\n return options;\r\n })\r\n .catch(() => {\r\n // 发生错误时返回空数组\r\n return [];\r\n });\r\n }\r\n}\r\n\r\n","import { Injectable } from \"@angular/core\";\r\nimport {\r\n AbstractControl,\r\n AbstractControlOptions,\r\n UntypedFormBuilder,\r\n UntypedFormGroup,\r\n ValidatorFn,\r\n} from \"@angular/forms\";\r\nimport { Subscription } from \"rxjs\";\r\nimport { debounceTime, distinctUntilChanged } from \"rxjs/operators\";\r\n\r\n// ==================== 类型定义 ====================\r\n\r\n// 字段错误消息类型(字符串或函数)\r\nexport type FieldErrorMessage =\r\n | string\r\n | ((context: { control: AbstractControl; controlName: string }) => string);\r\n\r\n// 字段错误消息集合\r\nexport type FieldErrorMessages = Record<string, FieldErrorMessage>;\r\n\r\n// 字段配置\r\nexport type FieldConfig = {\r\n value: any;\r\n disabled?: boolean;\r\n validators?: () => ValidatorFn[];\r\n errorMessages?: FieldErrorMessages;\r\n};\r\n\r\n// 嵌套 FormGroup 配置\r\nexport type FormGroupConfig = {\r\n type: \"group\";\r\n fields: FormConfig;\r\n disabled?: boolean;\r\n validators?: () => ValidatorFn[];\r\n errorMessages?: FieldErrorMessages;\r\n};\r\n\r\n// 表单修改类型\r\nexport type FormModifyType = \"create\" | \"update\";\r\n\r\n// 表单配置(支持普通字段和嵌套 FormGroup)\r\nexport type FormConfig = Record<string, FieldConfig | FormGroupConfig>;\r\n\r\n// 监听选项\r\nexport type WatchOptions = {\r\n debounce?: number;\r\n distinctUntilChanged?: boolean;\r\n emitInitial?: boolean;\r\n};\r\n\r\n// 批量添加字段配置选项\r\nexport type AddFieldsConfigOptions = {\r\n emitEvent?: boolean;\r\n updateValueAndValidity?: boolean;\r\n onFieldAdded?: (fieldName: string, success: boolean, error?: string) => void; // 每个字段添加的回调\r\n targetPath?: string; // 目标路径,用于在嵌套 FormGroup 内部添加字段,例如: \"cardBaseInfo\" 或 \"userInfo.addressInfo\"\r\n};\r\n\r\n// 批量添加字段配置结果\r\nexport type AddFieldsConfigResult = {\r\n success: boolean;\r\n added: string[]; // 成功添加的字段名列表\r\n failed: Array<{ fieldName: string; error: string }>; // 失败的字段及错误信息\r\n};\r\n\r\n// 批量删除字段配置选项\r\nexport type RemoveFieldsConfigOptions = {\r\n emitEvent?: boolean;\r\n onFieldRemoved?: (\r\n fieldName: string,\r\n success: boolean,\r\n error?: string\r\n ) => void; // 每个字段删除的回调\r\n};\r\n\r\n// 批量删除字段配置结果\r\nexport type RemoveFieldsConfigResult = {\r\n success: boolean;\r\n removed: string[]; // 成功删除的字段名列表\r\n failed: Array<{ fieldName: string; error: string }>; // 失败的字段及错误信息\r\n};\r\n\r\n// ==================== 服务类 ====================\r\n\r\n@Injectable({ providedIn: \"root\" })\r\nexport class AntdFormService {\r\n // ==================== 公共属性 ====================\r\n formStore: Record<string, UntypedFormGroup> = {};\r\n formModifyType: FormModifyType = \"create\";\r\n\r\n // ==================== 私有属性 ====================\r\n private formRegisterStore: Record<string, boolean> = {};\r\n private labelWidth: string = \"120px\";\r\n private labelAlign: string = \"right\";\r\n private labelObservers: Record<string, MutationObserver> = {};\r\n private errorMessageStore: Record<\r\n string,\r\n Record<string, FieldErrorMessages>\r\n > = {};\r\n private classPrefix = \"ant-form-\";\r\n private readonly defaultErrorMessages: FieldErrorMessages = {\r\n required: \"该字段为必填项\",\r\n minlength: \"输入长度不足\",\r\n maxlength: \"输入长度超限\",\r\n email: \"请输入合法的邮箱地址\",\r\n pattern: \"输入格式不正确\",\r\n };\r\n\r\n // ==================== 构造函数 ====================\r\n constructor(private fb: UntypedFormBuilder) {}\r\n\r\n // ==================== 表单创建和初始化 ====================\r\n\r\n // 判断是否为嵌套 FormGroup 配置\r\n private isFormGroupConfig(\r\n config: FieldConfig | FormGroupConfig\r\n ): config is FormGroupConfig {\r\n return (\r\n typeof config === \"object\" &&\r\n config !== null &&\r\n \"type\" in config &&\r\n config.type === \"group\"\r\n );\r\n }\r\n\r\n // 递归创建嵌套 FormGroup\r\n private createNestedFormGroup(\r\n fields: FormConfig,\r\n disabled?: boolean\r\n ): UntypedFormGroup {\r\n const groupConfig: Record<string, any> = {};\r\n\r\n Object.entries(fields).forEach(([key, fieldConfig]) => {\r\n if (this.isFormGroupConfig(fieldConfig)) {\r\n // 递归创建嵌套的 FormGroup\r\n groupConfig[key] = this.createNestedFormGroup(\r\n fieldConfig.fields,\r\n fieldConfig.disabled ?? disabled\r\n );\r\n } else {\r\n // 创建普通 FormControl\r\n groupConfig[key] = [\r\n {\r\n value: fieldConfig.value,\r\n disabled: fieldConfig.disabled ?? disabled ?? false,\r\n },\r\n fieldConfig.validators?.() ?? [],\r\n ];\r\n }\r\n });\r\n\r\n return this.fb.group(groupConfig);\r\n }\r\n\r\n // 初始化表单\r\n createFormGroup(\r\n name: string,\r\n config: FormConfig,\r\n options?: { labelWidth?: string; labelAlign?: string }\r\n ): UntypedFormGroup {\r\n const groupConfig: Record<string, any> = {};\r\n this.errorMessageStore[name] = {};\r\n\r\n Object.entries(config).forEach(([key, fieldConfig]) => {\r\n if (this.isFormGroupConfig(fieldConfig)) {\r\n // 处理嵌套 FormGroup\r\n const nestedGroup = this.createNestedFormGroup(\r\n fieldConfig.fields,\r\n fieldConfig.disabled\r\n );\r\n groupConfig[key] = nestedGroup;\r\n\r\n // 存储嵌套 FormGroup 的错误消息(如果需要)\r\n if (fieldConfig.errorMessages) {\r\n this.errorMessageStore[name][key] = fieldConfig.errorMessages;\r\n }\r\n } else {\r\n // 处理普通字段\r\n groupConfig[key] = [\r\n {\r\n value: fieldConfig.value,\r\n disabled: fieldConfig.disabled ?? false,\r\n },\r\n fieldConfig.validators?.() ?? [],\r\n ];\r\n if (fieldConfig.errorMessages) {\r\n this.errorMessageStore[name][key] = fieldConfig.errorMessages;\r\n }\r\n }\r\n });\r\n\r\n if (options?.labelWidth) {\r\n this.labelWidth = options.labelWidth;\r\n }\r\n if (options?.labelAlign) {\r\n this.labelAlign = options.labelAlign;\r\n }\r\n this.formStore[name] = this.fb.group(groupConfig);\r\n this.formRegisterStore[name] = true;\r\n this.setCSSVariablesToTarget(name);\r\n return this.formStore[name];\r\n }\r\n\r\n // ==================== 表单操作 ====================\r\n\r\n // 重置表单\r\n resetFormGroup(name: string, value?: any): void {\r\n this.formStore[name]?.reset(value);\r\n }\r\n\r\n // 检测表单是否完成注册\r\n isFormRegistered(name: string): boolean {\r\n return this.formRegisterStore[name] ?? false;\r\n }\r\n\r\n // 销毁对应的表单\r\n destory(names: string[]): void {\r\n names.forEach((name) => {\r\n // 2. 清理错误消息存储\r\n if (this.errorMessageStore[name]) {\r\n delete this.errorMessageStore[name];\r\n }\r\n\r\n // 3. 清理表单注册标记\r\n if (this.formRegisterStore[name]) {\r\n delete this.formRegisterStore[name];\r\n }\r\n\r\n // 4. 清理表单组(Angular 会自动处理 FormGroup 的清理)\r\n if (this.formStore[name]) {\r\n delete this.formStore[name];\r\n }\r\n });\r\n }\r\n\r\n // 根据路径获取嵌套的 FormGroup\r\n private getNestedFormGroup(\r\n formGroup: UntypedFormGroup,\r\n path: string\r\n ): UntypedFormGroup | null {\r\n if (!path || path.trim() === \"\") {\r\n return formGroup;\r\n }\r\n\r\n const pathParts = path.split(\".\").filter((p) => p.trim() !== \"\");\r\n let currentGroup: AbstractControl | null = formGroup;\r\n\r\n for (const part of pathParts) {\r\n if (!currentGroup || !(currentGroup instanceof UntypedFormGroup)) {\r\n return null;\r\n }\r\n currentGroup = currentGroup.get(part);\r\n if (!currentGroup || !(currentGroup instanceof UntypedFormGroup)) {\r\n return null;\r\n }\r\n }\r\n\r\n return currentGroup instanceof UntypedFormGroup ? currentGroup : null;\r\n }\r\n\r\n // 批量添加字段配置\r\n addFieldsConfig(\r\n formName: string,\r\n fieldsConfig: FormConfig,\r\n options?: AddFieldsConfigOptions\r\n ): AddFieldsConfigResult {\r\n const result: AddFieldsConfigResult = {\r\n success: true,\r\n added: [],\r\n failed: [],\r\n };\r\n\r\n // 1. 验证表单是否存在\r\n const rootFormGroup = this.formStore[formName];\r\n if (!rootFormGroup) {\r\n // 如果表单不存在,所有字段都失败\r\n Object.keys(fieldsConfig).forEach((fieldName) => {\r\n const error = `Form \"${formName}\" not found`;\r\n result.failed.push({\r\n fieldName,\r\n error,\r\n });\r\n options?.onFieldAdded?.(fieldName, false, error);\r\n });\r\n result.success = false;\r\n return result;\r\n }\r\n\r\n // 2. 获取目标 FormGroup(支持嵌套路径)\r\n const targetPath = options?.targetPath;\r\n const targetFormGroup = targetPath\r\n ? this.getNestedFormGroup(rootFormGroup, targetPath)\r\n : rootFormGroup;\r\n\r\n if (!targetFormGroup) {\r\n // 如果目标 FormGroup 不存在,所有字段都失败\r\n Object.keys(fieldsConfig).forEach((fieldName) => {\r\n const error = targetPath\r\n ? `Target FormGroup at path \"${targetPath}\" not found`\r\n : `FormGroup not found`;\r\n result.failed.push({\r\n fieldName,\r\n error,\r\n });\r\n options?.onFieldAdded?.(fieldName, false, error);\r\n });\r\n result.success = false;\r\n return result;\r\n }\r\n\r\n // 3. 初始化 errorMessageStore(如果不存在)\r\n if (!this.errorMessageStore[formName]) {\r\n this.errorMessageStore[formName] = {};\r\n }\r\n\r\n // 4. 批量构建控件配置\r\n const controlsToAdd: Record<string, AbstractControl> = {};\r\n const errorMessagesToAdd: Record<string, FieldErrorMessages> = {};\r\n\r\n // 5. 遍历所有字段配置,进行验证和构建\r\n Object.entries(fieldsConfig).forEach(([fieldName, fieldConfig]) => {\r\n try {\r\n // 5.1 检查字段是否已存在\r\n if (targetFormGroup.get(fieldName)) {\r\n const error = `Field \"${fieldName}\" already exists${\r\n targetPath ? ` in \"${targetPath}\"` : \"\"\r\n }`;\r\n result.failed.push({\r\n fieldName,\r\n error,\r\n });\r\n options?.onFieldAdded?.(fieldName, false, error);\r\n return;\r\n }\r\n\r\n // 5.2 创建控件\r\n let control: AbstractControl;\r\n\r\n if (this.isFormGroupConfig(fieldConfig)) {\r\n // 创建嵌套 FormGroup\r\n control = this.createNestedFormGroup(\r\n fieldConfig.fields,\r\n fieldConfig.disabled\r\n );\r\n // 存储嵌套 FormGroup 的错误消息(如果需要)\r\n if (fieldConfig.errorMessages) {\r\n const errorMessageKey = targetPath\r\n ? `${targetPath}.${fieldName}`\r\n : fieldName;\r\n errorMessagesToAdd[errorMessageKey] = fieldConfig.errorMessages;\r\n }\r\n } else {\r\n // 创建普通 FormControl\r\n const controlOptions: AbstractControlOptions = {\r\n validators: fieldConfig.validators?.() ?? [],\r\n };\r\n control = this.fb.control(fieldConfig.value, controlOptions);\r\n // 设置 disabled 状态\r\n if (fieldConfig.disabled) {\r\n control.disable();\r\n }\r\n // 存储错误消息\r\n if (fieldConfig.errorMessages) {\r\n const errorMessageKey = targetPath\r\n ? `${targetPath}.${fieldName}`\r\n : fieldName;\r\n errorMessagesToAdd[errorMessageKey] = fieldConfig.errorMessages;\r\n }\r\n }\r\n\r\n controlsToAdd[fieldName] = control;\r\n\r\n result.added.push(fieldName);\r\n options?.onFieldAdded?.(fieldName, true);\r\n } catch (error: any) {\r\n const errorMessage =\r\n error?.message || error?.toString() || \"Unknown error\";\r\n result.failed.push({\r\n fieldName,\r\n error: errorMessage,\r\n });\r\n options?.onFieldAdded?.(fieldName, false, errorMessage);\r\n }\r\n });\r\n\r\n // 6. 批量添加到目标 FormGroup\r\n if (Object.keys(controlsToAdd).length > 0) {\r\n Object.entries(controlsToAdd).forEach(([fieldName, control]) => {\r\n targetFormGroup.addControl(fieldName, control);\r\n });\r\n\r\n // 7. 批量存储错误消息\r\n Object.entries(errorMessagesToAdd).forEach(([key, messages]) => {\r\n this.errorMessageStore[formName][key] = messages;\r\n });\r\n\r\n // 8. 更新表单验证状态\r\n if (options?.updateValueAndValidity) {\r\n targetFormGroup.updateValueAndValidity({\r\n emitEvent: options?.emitEvent ?? true,\r\n });\r\n }\r\n }\r\n\r\n // 9. 判断整体是否成功\r\n result.success = result.failed.length === 0;\r\n\r\n return result;\r\n }\r\n\r\n // 批量删除字段配置\r\n removeFieldsConfig(\r\n formName: string,\r\n fieldNames: string[],\r\n options?: RemoveFieldsConfigOptions\r\n ): RemoveFieldsConfigResult {\r\n const result: RemoveFieldsConfigResult = {\r\n success: true,\r\n removed: [],\r\n failed: [],\r\n };\r\n\r\n // 1. 验证表单是否存在\r\n const formGroup = this.formStore[formName];\r\n if (!formGroup) {\r\n fieldNames.forEach((fieldName) => {\r\n const error = `Form \"${formName}\" not found`;\r\n result.failed.push({\r\n fieldName,\r\n error,\r\n });\r\n options?.onFieldRemoved?.(fieldName, false, error);\r\n });\r\n result.success = false;\r\n return result;\r\n }\r\n\r\n // 2. 批量收集需要清理的信息\r\n const fieldsToRemove: string[] = [];\r\n const errorMessageKeysToRemove: string[] = [];\r\n\r\n // 3. 验证每个字段并收集信息\r\n fieldNames.forEach((fieldName) => {\r\n const control = formGroup.get(fieldName);\r\n\r\n if (!control) {\r\n const error = `Field \"${fieldName}\" not found`;\r\n result.failed.push({\r\n fieldName,\r\n error,\r\n });\r\n options?.onFieldRemoved?.(fieldName, false, error);\r\n return;\r\n }\r\n\r\n // 收集错误消息键\r\n errorMessageKeysToRemove.push(fieldName);\r\n fieldsToRemove.push(fieldName);\r\n });\r\n\r\n // 4. 批量执行删除操作\r\n try {\r\n // 4.1 从 FormGroup 中移除控件\r\n fieldsToRemove.forEach((fieldName) => {\r\n formGroup.removeControl(fieldName);\r\n result.removed.push(fieldName);\r\n options?.onFieldRemoved?.(fieldName, true);\r\n });\r\n\r\n // 4.2 批量删除错误消息\r\n if (this.errorMessageStore[formName]) {\r\n errorMessageKeysToRemove.forEach((key) => {\r\n delete this.errorMessageStore[formName][key];\r\n });\r\n }\r\n } catch (error: any) {\r\n // 如果批量删除过程中出错,标记为失败\r\n fieldsToRemove.forEach((fieldName) => {\r\n if (!result.removed.includes(fieldName)) {\r\n const errorMessage =\r\n error?.message || error?.toString() || \"Failed to remove field\";\r\n result.failed.push({\r\n fieldName,\r\n error: errorMessage,\r\n });\r\n options?.onFieldRemoved?.(fieldName, false, errorMessage);\r\n }\r\n });\r\n }\r\n\r\n // 5. 判断整体是否成功\r\n result.success = result.failed.length === 0;\r\n\r\n return result;\r\n }\r\n\r\n // 局部赋值\r\n patchFormValues(\r\n name: string,\r\n values: Record<string, any>,\r\n options?: { emitEvent?: boolean }\r\n ): void {\r\n const formGroup = this.formStore[name];\r\n if (!formGroup) {\r\n console.warn(\r\n `[AntdFormService] patchFormValues: form \"${name}\" not found.`\r\n );\r\n return;\r\n }\r\n\r\n formGroup.patchValue(values, {\r\n emitEvent: options?.emitEvent ?? true,\r\n });\r\n }\r\n\r\n // 表单校验(自动过滤内部字段)\r\n validateForm(\r\n name: string,\r\n options?: { emitEvent?: boolean; onlySelf?: boolean }\r\n ): boolean | Record<string, any> {\r\n if (this.formStore[name].valid) {\r\n const rawValue = this.formStore[name].getRawValue();\r\n return this.excludeInternalFields(rawValue);\r\n } else {\r\n // 递归校验所有控件\r\n this.markAllControlsAsDirty(\r\n this.formStore[name],\r\n options?.emitEvent ?? true,\r\n options?.onlySelf ?? false\r\n );\r\n return false;\r\n }\r\n }\r\n\r\n // 递归标记所有无效控件为 dirty\r\n private markAllControlsAsDirty(\r\n control: AbstractControl,\r\n emitEvent: boolean,\r\n onlySelf: boolean\r\n ): void {\r\n if (control.invalid) {\r\n control.markAsDirty();\r\n control.updateValueAndValidity({\r\n emitEvent,\r\n onlySelf,\r\n });\r\n }\r\n\r\n // 如果是 FormGroup,递归处理所有子控件\r\n if (control instanceof UntypedFormGroup) {\r\n Object.values(control.controls).forEach((childControl) => {\r\n this.markAllControlsAsDirty(childControl, emitEvent, onlySelf);\r\n });\r\n }\r\n }\r\n\r\n // ==================== 错误消息相关 ====================\r\n\r\n // 获取字段首条错误提示\r\n getFieldErrorMessage(name: string, controlName: string): string {\r\n const formGroup = this.formStore[name];\r\n if (!formGroup) {\r\n console.warn(\r\n `[AntdFormService] getFieldErrorMessage: form \"${name}\" not found.`\r\n );\r\n return \"\";\r\n }\r\n const control = formGroup.get(controlName);\r\n if (!control) {\r\n console.warn(\r\n `[AntdFormService] getFieldErrorMessage: control \"${controlName}\" not found in form \"${name}\".`\r\n );\r\n return \"\";\r\n }\r\n if (!control.errors) {\r\n return \"\";\r\n }\r\n\r\n // 从 errorMessageStore 获取错误消息配置\r\n const errorMessages = this.errorMessageStore[name]?.[controlName];\r\n const mergedMessages = {\r\n ...this.defaultErrorMessages,\r\n ...(errorMessages ?? {}),\r\n };\r\n\r\n for (const errorKey of Object.keys(control.errors)) {\r\n const message = mergedMessages[errorKey];\r\n if (message) {\r\n // 不再支持函数形式,只返回字符串\r\n return typeof message === \"string\" ? message : \"\";\r\n }\r\n }\r\n return \"\";\r\n }\r\n\r\n // ==================== 监听相关 ====================\r\n\r\n // 监听表单所有字段变更\r\n watchFormChanges<T = any>(\r\n name: string,\r\n handler: (value: T) => void,\r\n options?: WatchOptions\r\n ): Subscription | undefined {\r\n const formGroup = this.formStore[name];\r\n if (!formGroup) {\r\n console.warn(\r\n `[AntdFormService] watchFormChanges: form \"${name}\" not found.`\r\n );\r\n return undefined;\r\n }\r\n\r\n return this.setupValueChangeSubscription(formGroup, handler, options);\r\n }\r\n\r\n // 监听指定字段变更\r\n watchFieldChanges<T = any>(\r\n name: string,\r\n controlName: string,\r\n handler: (value: T) => void,\r\n options?: WatchOptions\r\n ): Subscription | undefined {\r\n const formGroup = this.formStore[name];\r\n if (!formGroup) {\r\n console.warn(\r\n `[AntdFormService] watchFieldChanges: form \"${name}\" not found.`\r\n );\r\n return undefined;\r\n }\r\n\r\n const control = formGroup.get(controlName);\r\n if (!control) {\r\n console.warn(\r\n `[AntdFormService] watchFieldChanges: control \"${controlName}\" not found in form \"${name}\".`\r\n );\r\n return undefined;\r\n }\r\n\r\n return this.setupValueChangeSubscription(control, handler, options);\r\n }\r\n\r\n // ==================== 工具方法 ====================\r\n\r\n // 获取表单类名\r\n getFormClassName(name: string): string {\r\n return `${this.classPrefix}custom-${name} `;\r\n }\r\n\r\n // 设置 CSS 变量到目标元素(支持持久化监听动态添加的元素)\r\n setCSSVariablesToTarget(name: string): void {\r\n const formContainerSelector = `.${this.getFormClassName(name)}`;\r\n const formContainer = document.querySelector(\r\n formContainerSelector\r\n ) as HTMLElement;\r\n\r\n // 如果容器还不存在,可以用 MutationObserver 等待它出现\r\n if (!formContainer) {\r\n const observer = new MutationObserver(() => {\r\n const container = document.querySelector(\r\n formContainerSelector\r\n ) as HTMLElement;\r\n if (container) {\r\n container.style.setProperty(\"--label-width\", this.labelWidth);\r\n container.style.setProperty(\"--label-align\", this.labelAlign);\r\n observer.disconnect();\r\n }\r\n });\r\n\r\n observer.observe(document.body, {\r\n childList: true,\r\n subtree: true,\r\n });\r\n\r\n // 10秒后自动断开,避免内存泄漏\r\n setTimeout(() => observer.disconnect(), 10000);\r\n return;\r\n }\r\n\r\n // 在容器上设置 CSS 变量\r\n formContainer.style.setProperty(\"--label-width\", this.labelWidth);\r\n formContainer.style.setProperty(\"--label-align\", this.labelAlign);\r\n }\r\n\r\n // ==================== 私有方法 ====================\r\n\r\n // 过滤内部字段(递归处理对象和数组)\r\n private excludeInternalFields(value: any): any {\r\n if (value === null || value === undefined) {\r\n return value;\r\n }\r\n\r\n // 特殊处理 Date 对象,直接返回不做转换\r\n if (value instanceof Date) {\r\n return value;\r\n }\r\n\r\n if (Array.isArray(value)) {\r\n return value.map((item) => this.excludeInternalFields(item));\r\n }\r\n\r\n if (typeof value !== \"object\") {\r\n return value;\r\n }\r\n\r\n const filtered: any = {};\r\n Object.entries(value).forEach(([key, val]) => {\r\n // 过滤以 __ 开头的内部字段\r\n if (!key.startsWith(\"__\")) {\r\n filtered[key] = this.excludeInternalFields(val);\r\n }\r\n });\r\n return filtered;\r\n }\r\n\r\n // 设置值变更订阅\r\n private setupValueChangeSubscription<T>(\r\n target: { valueChanges: any; value: any },\r\n handler: (value: T) => void,\r\n options?: WatchOptions\r\n ): Subscription {\r\n let valueChanges$ = target.valueChanges;\r\n\r\n if (options?.debounce != null) {\r\n valueChanges$ = valueChanges$.pipe(debounceTime(options.debounce));\r\n }\r\n\r\n if (options?.distinctUntilChanged !== false) {\r\n valueChanges$ = valueChanges$.pipe(distinctUntilChanged());\r\n }\r\n\r\n if (options?.emitInitial) {\r\n handler(target.value);\r\n }\r\n\r\n return valueChanges$.subscribe(handler);\r\n }\r\n}\r\n","import { Injectable } from \"@angular/core\";\r\nimport { v4 as uuidv4 } from \"uuid\";\r\n\r\n/** 字段校验结果类型 */\r\nexport type ValidationResult = string;\r\n\r\n/** 字段校验方法类型 */\r\nexport type FieldValidator = (\r\n value: any,\r\n row: ArrayFormRow,\r\n fieldName: string\r\n) => ValidationResult;\r\n\r\n/** 字段配置接口 */\r\nexport interface FieldConfig {\r\n name: string;\r\n validator?: FieldValidator;\r\n}\r\n\r\n/** 数组表单行数据接口 */\r\nexport interface ArrayFormRow {\r\n uid?: string;\r\n isEdit?: boolean;\r\n isAdd?: boolean;\r\n disabled?: boolean;\r\n [key: string]: any;\r\n}\r\n\r\n/** 数组表单配置接口 */\r\nexport interface ArrayFormConfig {\r\n fields: FieldConfig[];\r\n defaultValues?: Record<string, any>;\r\n // 自动更新目标对象和属性名,用于触发 Angular 变化检测\r\n targetObject?: Record<string, any>;\r\n arrayPropertyName?: string;\r\n}\r\n\r\n/** 表单存储项接口 */\r\nexport interface ArrayFormStoreItem {\r\n data: ArrayFormRow[];\r\n config: ArrayFormConfig;\r\n validationResults?: Record<string, Record<string, ValidationResult>>;\r\n /** 初始值快照,用于自动检测字段是否被修改 */\r\n initialSnapshot: Record<string, Record<string, any>>;\r\n /** 编辑时快照,用于取消编辑时恢复数据 */\r\n editingSnapshot: Record<string, Record<string, any>>;\r\n /** 是否标记所有字段为已触碰(整个表单提交时设为 true) */\r\n allTouched: boolean;\r\n /** 每行的 touched 状态(单行保存时设为 true) */\r\n rowTouched: Record<string, boolean>;\r\n}\r\n\r\n/** 表单存储接口 */\r\nexport interface ArrayFormStore {\r\n [formName: string]: ArrayFormStoreItem;\r\n}\r\n\r\n/** 数组型数据收集基础服务 */\r\n@Injectable({\r\n providedIn: \"root\",\r\n})\r\nexport class ArrayFormService {\r\n private formStore: ArrayFormStore = {};\r\n\r\n constructor() {}\r\n\r\n /** 深度克隆值 */\r\n private cloneValue(value: any): any {\r\n if (value === null || value === undefined) {\r\n return value;\r\n }\r\n if (Array.isArray(value)) {\r\n return value.map((item) => this.cloneValue(item));\r\n }\r\n if (typeof value === \"object\") {\r\n const cloned: Record<string, any> = {};\r\n for (const key of Object.keys(value)) {\r\n cloned[key] = this.cloneValue(value[key]);\r\n }\r\n return cloned;\r\n }\r\n return value;\r\n }\r\n\r\n /** 比较两个值是否相等 */\r\n private isEqual(a: any, b: any): boolean {\r\n if (a === b) return true;\r\n if (a === null || b === null) return a === b;\r\n if (a === undefined || b === undefined) return a === b;\r\n if (typeof a !== typeof b) return false;\r\n\r\n if (Array.isArray(a) && Array.isArray(b)) {\r\n if (a.length !== b.length) return false;\r\n return a.every((item, index) => this.isEqual(item, b[index]));\r\n }\r\n\r\n if (typeof a === \"object\" && typeof b === \"object\") {\r\n const keysA = Object.keys(a);\r\n const keysB = Object.keys(b);\r\n if (keysA.length !== keysB.length) return false;\r\n return keysA.every((key) => this.isEqual(a[key], b[key]));\r\n }\r\n\r\n return false;\r\n }\r\n\r\n /** 创建行的初始值快照 */\r\n private createRowSnapshot(\r\n row: ArrayFormRow,\r\n fields: FieldConfig[]\r\n ): Record<string, any> {\r\n const snapshot: Record<string, any> = {};\r\n fields.forEach((field) => {\r\n snapshot[field.name] = this.cloneValue(row[field.name]);\r\n });\r\n return snapshot;\r\n }\r\n\r\n /** 初始化数组数据,添加 uid 和 isEdit 字段 */\r\n private initializeData(data: any[]): ArrayFormRow[] {\r\n return data.map((item) => this.enrichRow(item));\r\n }\r\n\r\n /** 为单行数据添加 uid 和 isEdit 字段 */\r\n private enrichRow(row: any): ArrayFormRow {\r\n return {\r\n ...row,\r\n uid: row.uid || uuidv4(),\r\n isEdit: row.isEdit !== undefined ? row.isEdit : false,\r\n disabled: row.disabled !== undefined ? row.disabled : false,\r\n };\r\n }\r\n\r\n /** 新增一行数据 */\r\n private addRow(\r\n data: ArrayFormRow[],\r\n defaultValues?: Record<string, any>\r\n ): ArrayFormRow {\r\n const newRow: ArrayFormRow = {\r\n ...defaultValues,\r\n uid: uuidv4(),\r\n isEdit: true,\r\n isAdd: true,\r\n disabled: false,\r\n };\r\n data.push(newRow);\r\n return newRow;\r\n }\r\n\r\n /** 校验单个字段 */\r\n private validateField(\r\n row: ArrayFormRow,\r\n fieldName: string,\r\n config: ArrayFormConfig\r\n ): ValidationResult {\r\n const fieldConfig = config.fields.find((f) => f.name === fieldName);\r\n\r\n if (!fieldConfig) {\r\n return \"\";\r\n }\r\n\r\n if (fieldConfig.validator) {\r\n return fieldConfig.validator(row[fieldName], row, fieldName);\r\n }\r\n\r\n return \"\";\r\n }\r\n\r\n /** 校验整行数据 */\r\n private validateRow(\r\n row: ArrayFormRow,\r\n config: ArrayFormConfig\r\n ): Record<string, ValidationResult> {\r\n const results: Record<string, ValidationResult> = {};\r\n\r\n config.fields.forEach((fieldConfig) => {\r\n results[fieldConfig.name] = this.validateField(\r\n row,\r\n fieldConfig.name,\r\n config\r\n );\r\n });\r\n\r\n return results;\r\n }\r\n\r\n /** 校验整个数组 */\r\n private validateData(\r\n data: ArrayFormRow[],\r\n config: ArrayFormConfig\r\n ): Record<string, Record<string, ValidationResult>> {\r\n const results: Record<string, Record<string, ValidationResult>> = {};\r\n\r\n data.forEach((row) => {\r\n results[row.uid] = this.validateRow(row, config);\r\n });\r\n\r\n return results;\r\n }\r\n\r\n /** 注册表单到存储 */\r\n registerForm(\r\n formName: string,\r\n data: ArrayFormRow[],\r\n config: ArrayFormConfig\r\n ): void {\r\n const initializedData = this.initializeData(data);\r\n\r\n // 记录初始值快照\r\n const initialSnapshot: Record<string, Record<string, any>> = {};\r\n initializedData.forEach((row) => {\r\n initialSnapshot[row.uid!] = this.createRowSnapshot(row, config.fields);\r\n });\r\n\r\n this.formStore[formName] = {\r\n data: initializedData,\r\n config,\r\n validationResults: {},\r\n initialSnapshot,\r\n editingSnapshot: {},\r\n allTouched: false,\r\n rowTouched: {},\r\n };\r\n // 如果配置了自动更新,立即更新一次\r\n this.autoUpdateArrayReference(formName);\r\n }\r\n\r\n /** 从存储中获取表单 */\r\n getForm(formName: string): ArrayFormStoreItem | undefined {\r\n return this.formStore[formName];\r\n }\r\n\r\n /** 从存储中获取表单数据 */\r\n getFormData(\r\n formName: string\r\n ):\r\n | Array<Pick<ArrayFormRow, \"uid\" | \"isEdit\" | \"isAdd\" | keyof ArrayFormRow>>\r\n | undefined {\r\n const form = this.formStore[formName];\r\n if (!form) {\r\n return undefined;\r\n }\r\n return form.data.map((item) => {\r\n delete item.isEdit;\r\n delete item.isAdd;\r\n delete item.uid;\r\n delete item.disabled;\r\n return item;\r\n });\r\n }\r\n\r\n /** 向表单添加行 */\r\n addRowToForm(\r\n formName: string,\r\n defaultValues?: Record<string, any>\r\n ): ArrayFormRow | undefined {\r\n const form = this.formStore[formName];\r\n if (!form) {\r\n return undefined;\r\n }\r\n const newRow = this.addRow(form.data, defaultValues);\r\n // 为新行记录初始值快照\r\n form.initialSnapshot[newRow.uid!] = this.createRowSnapshot(\r\n newRow,\r\n form.config.fields\r\n );\r\n // 自动更新外部数组引用\r\n this.autoUpdateArrayReference(formName);\r\n return newRow;\r\n }\r\n\r\n /** 校验表单,自动标记所有字段为已触碰 */\r\n validateForm(formName: string): boolean {\r\n const form = this.formStore[formName];\r\n if (!form) {\r\n return true;\r\n }\r\n // 标记所有字段为已触碰\r\n form.allTouched = true;\r\n const results = this.validateData(form.data, form.config);\r\n form.validationResults = results;\r\n\r\n // 检查是否有任何错误\r\n for (const uid of Object.keys(results)) {\r\n for (const fieldName of Object.keys(results[uid])) {\r\n if (results[uid][fieldName]) {\r\n return false;\r\n }\r\n }\r\n }\r\n return true;\r\n }\r\n\r\n /** 开启编辑模式,保存快照用于取消恢复 */\r\n enableEdit(formName: string, row: ArrayFormRow): void {\r\n const form = this.formStore[formName];\r\n if (form && row.uid) {\r\n // 保存编辑前的快照\r\n form.editingSnapshot[row.uid] = this.createRowSnapshot(\r\n row,\r\n form.config.fields\r\n );\r\n }\r\n row.isEdit = true;\r\n }\r\n\r\n /** 取消编辑,恢复到编辑前的数据 */\r\n disableEdit(formName: string, row: ArrayFormRow): void {\r\n const form = this.formStore[formName];\r\n if (form && row.uid && form.editingSnapshot[row.uid]) {\r\n // 恢复编辑前的数据\r\n const snapshot = form.editingSnapshot[row.uid];\r\n form.config.fields.forEach((field) => {\r\n row[field.name] = this.cloneValue(snapshot[field.name]);\r\n });\r\n // 更新初始快照为恢复后的值,消除 touched 状态\r\n form.initialSnapshot[row.uid] = this.cloneValue(snapshot);\r\n // 清理编辑快照和 touched 状态\r\n delete form.editingSnapshot[row.uid];\r\n delete form.rowTouched[row.uid];\r\n // 清理该行的校验结果\r\n if (form.validationResults) {\r\n delete form.validationResults[row.uid];\r\n }\r\n }\r\n row.isEdit = false;\r\n }\r\n\r\n /** 确认编辑,保留修改后的数据 */\r\n confirmEdit(formName: string, row: ArrayFormRow): void {\r\n const form = this.formStore[formName];\r\n if (form && row.uid) {\r\n // 清理编辑快照(保留当前数据)\r\n if (form.editingSnapshot[row.uid]) {\r\n delete form.editingSnapshot[row.uid];\r\n }\r\n // 更新初始快照为当前值(用于后续 touched 检测)\r\n form.initialSnapshot[row.uid] = this.createRowSnapshot(\r\n row,\r\n form.config.fields\r\n );\r\n // 清除 touched 状态,基于新的 initialSnapshot 重新判断\r\n delete form.rowTouched[row.uid];\r\n }\r\n row.isEdit = false;\r\n row.isAdd = false;\r\n }\r\n\r\n /** 从表单中删除指定行 */\r\n deleteRowFromForm(formName: string, row: ArrayFormRow): boolean {\r\n const form = this.formStore[formName];\r\n if (!form || !row.uid) {\r\n return false;\r\n }\r\n const index = form.data.findIndex((item) => item.uid === row.uid);\r\n if (index === -1) {\r\n return false;\r\n }\r\n form.data.splice(index, 1);\r\n // 清理该行的所有快照、touched 状态和校验结果\r\n delete form.initialSnapshot[row.uid];\r\n delete form.editingSnapshot[row.uid];\r\n delete form.rowTouched[row.uid];\r\n if (form.validationResults) {\r\n delete form.validationResults[row.uid];\r\n }\r\n // 自动更新外部数组引用\r\n this.autoUpdateArrayReference(formName);\r\n return true;\r\n }\r\n\r\n /** 检测字段是否已被触碰 */\r\n private isFieldTouched(\r\n form: ArrayFormStoreItem,\r\n row: ArrayFormRow,\r\n fieldName: string\r\n ): boolean {\r\n // 整个表单已 touched(整个表单提交时)\r\n if (form.allTouched) {\r\n return true;\r\n }\r\n // 当前行已 touched(单行保存时)\r\n if (form.rowTouched[row.uid!]) {\r\n return true;\r\n }\r\n // 检测当前值与初始值是否不同\r\n const initialValue = form.initialSnapshot[row.uid!]?.[fieldName];\r\n const currentValue = row[fieldName];\r\n return !this.isEqual(initialValue, currentValue);\r\n }\r\n\r\n /** 校验指定行的指定字段,未修改时不显示校验状态 */\r\n validateFieldInRow(\r\n formName: string,\r\n row: ArrayFormRow,\r\n fieldName: string\r\n ): \"success\" | \"error\" | \"\" {\r\n const form = this.formStore[formName];\r\n if (!form) {\r\n return \"\";\r\n }\r\n\r\n const fieldConfig = form.config.fields.find((f) => f.name === fieldName);\r\n if (!fieldConfig) {\r\n return \"\";\r\n }\r\n\r\n // 执行校验\r\n let result: ValidationResult = \"\";\r\n if (fieldConfig.validator) {\r\n result = fieldConfig.validator(row[fieldName], row, fieldName);\r\n }\r\n\r\n // 更新校验结果存储\r\n if (!form.validationResults) {\r\n form.validationResults = {};\r\n }\r\n if (!form.validationResults[row.uid!]) {\r\n form.validationResults[row.uid!] = {};\r\n }\r\n form.validationResults[row.uid!][fieldName] = result;\r\n\r\n // 如果字段未被触碰,不显示校验状态\r\n if (!this.isFieldTouched(form, row, fieldName)) {\r\n return \"\";\r\n }\r\n\r\n return result ? \"error\" : \"success\";\r\n }\r\n\r\n /** 获取指定行指定字段的校验错误信息 */\r\n getFieldErrorMessage(\r\n formName: string,\r\n row: ArrayFormRow,\r\n fieldName: string\r\n ): string {\r\n const form = this.formStore[formName];\r\n if (!form || !row.uid) {\r\n return \"\";\r\n }\r\n // 如果字段未被触碰,不显示错误信息\r\n if (!this.isFieldTouched(form, row, fieldName)) {\r\n return \"\";\r\n }\r\n return form.validationResults?.[row.uid]?.[fieldName] || \"\";\r\n }\r\n\r\n /** 校验指定行的所有字段 */\r\n validateRowAllFields(formName: string, row: ArrayFormRow): boolean {\r\n const form = this.formStore[formName];\r\n if (!form || !row.uid) {\r\n return true;\r\n }\r\n\r\n // 更新初始快照为当前值\r\n form.initialSnapshot[row.uid] = this.createRowSnapshot(\r\n row,\r\n form.config.fields\r\n );\r\n // 标记当前行为 touched(只影响当前行,不影响其他行)\r\n form.rowTouched[row.uid] = true;\r\n\r\n let hasError = false;\r\n\r\n form.config.fields.forEach((fieldConfig) => {\r\n const result = this.validateFieldInRow(formName, row, fieldConfig.name);\r\n if (result === \"error\") {\r\n hasError = true;\r\n }\r\n });\r\n\r\n return !hasError;\r\n }\r\n\r\n /** 自动更新外部数组引用 */\r\n private autoUpdateArrayReference(formName: string): void {\r\n const form = this.formStore[formName];\r\n if (!form || !form.config.targetObject || !form.config.arrayPropertyName) {\r\n return;\r\n }\r\n const newArray = form.data ? [...form.data] : [];\r\n // 更新目标对象的数组属性为新数组引用\r\n (form.config.targetObject as any)[form.config.arrayPropertyName] = newArray;\r\n }\r\n\r\n /** 是否有正在编辑的行 */\r\n hasEditingRow(formName: string): boolean {\r\n const form = this.formStore[formName];\r\n if (!form) {\r\n return false;\r\n }\r\n return form.data.some((item) => item.isEdit);\r\n }\r\n\r\n // 销毁对应的表单\r\n destory(names: string[]): void {\r\n names.forEach((name) => {\r\n if (this.formStore[name]) {\r\n // 清理表单数据\r\n delete this.formStore[name];\r\n }\r\n });\r\n }\r\n\r\n // 重置表单数组\r\n resetFormArray(name: string): void {\r\n const form = this.formStore[name];\r\n if (!form) {\r\n return;\r\n }\r\n\r\n // 1. 清空数据数组\r\n form.data = [];\r\n\r\n // 2. 清理所有快照\r\n form.initialSnapshot = {};\r\n form.editingSnapshot = {};\r\n\r\n // 3. 清理校验结果\r\n form.validationResults = {};\r\n\r\n // 4. 重置 touched 状态\r\n form.allTouched = false;\r\n form.rowTouched = {};\r\n\r\n // 5. 如果配置了自动更新,更新外部数组引用\r\n this.autoUpdateArrayReference(name);\r\n }\r\n\r\n /** 批量设置表单数据(用于回填数据) */\r\n setFormData(formName: string, data: any[]): void {\r\n const form = this.formStore[formName];\r\n if (!form) {\r\n return;\r\n }\r\n\r\n // 1. 初始化数据(添加 uid、isEdit 等字段)\r\n const initializedData = this.initializeData(data);\r\n\r\n // 2. 更新表单数据\r\n form.data = initializedData;\r\n\r\n // 3. 重新创建初始值快照\r\n form.initialSnapshot = {};\r\n initializedData.forEach((row) => {\r\n form.initialSnapshot[row.uid!] = this.createRowSnapshot(\r\n row,\r\n form.config.fields\r\n );\r\n });\r\n\r\n // 4. 清理编辑快照和校验结果\r\n form.editingSnapshot = {};\r\n form.validationResults = {};\r\n\r\n // 5. 重置 touched 状态\r\n form.allTouched = false;\r\n form.rowTouched = {};\r\n\r\n // 6. 如果配置了自动更新,更新外部数组引用\r\n this.autoUpdateArrayReference(formName);\r\n }\r\n}\r\n","/**\r\n * 自动检测 ant-modal-body 的宽度,并添加 narrow-width 类名\r\n * 当宽度小于 500px 时添加类名,否则移除\r\n */\r\nexport function initModalWidthDetector() {\r\n if (typeof window === 'undefined' || typeof document === 'undefined') {\r\n return;\r\n }\r\n\r\n // 检查单个元素的宽度\r\n function checkElementWidth(element: HTMLElement) {\r\n const width = element.offsetWidth;\r\n if (width < 500) {\r\n element.classList.add('narrow-width');\r\n } else {\r\n element.classList.remove('narrow-width');\r\n }\r\n }\r\n\r\n // 使用 MutationObserver 监听 DOM 变化\r\n const observer = new MutationObserver((mutations) => {\r\n mutations.forEach((mutation) => {\r\n mutation.addedNodes.forEach((node) => {\r\n if (node.nodeType === Node.ELEMENT_NODE) {\r\n const element = node as HTMLElement;\r\n \r\n // 检查是否是 modal body\r\n if (element.classList?.contains('ant-modal-body')) {\r\n checkElementWidth(element);\r\n observeResize(element);\r\n }\r\n \r\n // 检查子元素中是否有 modal body\r\n const modalBodies = element.querySelectorAll?.('.ant-modal-body');\r\n modalBodies?.forEach((modalBody) => {\r\n checkElementWidth(modalBody as HTMLElement);\r\n observeResize(modalBody as HTMLElement);\r\n });\r\n }\r\n });\r\n });\r\n });\r\n\r\n // 使用 ResizeObserver 监听元素尺寸变化\r\n const resizeObserverMap = new WeakMap<HTMLElement, any>();\r\n \r\n function observeResize(element: HTMLElement) {\r\n if (resizeObserverMap.has(element)) {\r\n return;\r\n }\r\n\r\n if (typeof (window as any).ResizeObserver !== 'undefined') {\r\n const resizeObserver = new (window as any).ResizeObserver(() => {\r\n checkElementWidth(element);\r\n });\r\n resizeObserver.observe(element);\r\n resizeObserverMap.set(element, resizeObserver);\r\n }\r\n }\r\n\r\n // 开始监听 DOM 变化\r\n observer.observe(document.body, {\r\n childList: true,\r\n subtree: true,\r\n });\r\n\r\n // 检查已存在的 modal body\r\n document.querySelectorAll('.ant-modal-body').forEach((element) => {\r\n checkElementWidth(element as HTMLElement);\r\n observeResize(element as HTMLElement);\r\n });\r\n}\r\n","/**\r\n * 自动检测 nz-select 最近的父元素宽度,并设置给 nz-select\r\n * 当父元素宽度变化时,自动更新 nz-select 的宽度\r\n */\r\nexport function initSelectWidthDetector() {\r\n if (typeof window === 'undefined' || typeof document === 'undefined') {\r\n return;\r\n }\r\n\r\n // 获取最近的父元素(排除自身)\r\n function getClosestParent(element: HTMLElement): HTMLElement | null {\r\n let parent = element.parentElement;\r\n while (parent && parent !== document.body) {\r\n // 如果父元素有明确的宽度(非 auto),则返回该父元素\r\n const computedStyle = window.getComputedStyle(parent);\r\n const width = computedStyle.width;\r\n if (width && width !== 'auto' && width !== '0px') {\r\n return parent;\r\n }\r\n parent = parent.parentElement;\r\n }\r\n // 如果没找到有明确宽度的父元素,返回直接父元素\r\n return element.parentElement;\r\n }\r\n\r\n // 找到实际的 select 元素(nz-select 组件渲染后的 DOM 元素)\r\n function findActualSelectElement(element: HTMLElement): HTMLElement | null {\r\n // 如果已经是 ant-select 元素,直接返回\r\n if (element.classList?.contains('ant-select')) {\r\n return element;\r\n }\r\n \r\n // 如果是 nz-select 组件标签,查找其渲染后的 ant-select 元素\r\n if (element.tagName === 'NZ-SELECT') {\r\n const actualSelect = element.querySelector('.ant-select') as HTMLElement;\r\n return actualSelect || element;\r\n }\r\n \r\n // 在子元素中查找 ant-select\r\n const actualSelect = element.querySelector('.ant-select') as HTMLElement;\r\n return actualSelect || element;\r\n }\r\n\r\n // 获取原始的 nz-select 组件元素(用于读取 custom-maxWidth 属性)\r\n function getOriginalSelectElement(element: HTMLElement): HTMLElement | null {\r\n // 如果已经是 nz-select 组件标签,直接返回\r\n if (element.tagName === 'NZ-SELECT') {\r\n return element;\r\n }\r\n \r\n // 向上查找 nz-select 组件标签\r\n let parent = element.parentElement;\r\n while (parent && parent !== document.body) {\r\n if (parent.tagName === 'NZ-SELECT') {\r\n return parent;\r\n }\r\n parent = parent.parentElement;\r\n }\r\n \r\n return null;\r\n }\r\n\r\n // 检查并设置 nz-select 的宽度\r\n function setSelectWidth(selectElement: HTMLElement) {\r\n const actualSelect = findActualSelectElement(selectElement);\r\n if (!actualSelect) {\r\n return;\r\n }\r\n\r\n // 检查是否有自定义最大宽度属性\r\n const originalSelect = getOriginalSelectElement(selectElement);\r\n if (originalSelect) {\r\n const customMaxWidth = originalSelect.getAttribute('custom-maxWidth');\r\n if (customMaxWidth) {\r\n // 使用自定义最大宽度\r\n actualSelect.style.maxWidth = customMaxWidth;\r\n return;\r\n }\r\n }\r\n\r\n // 如果没有自定义宽度,使用计算出的父元素宽度\r\n const parent = getClosestParent(actualSelect);\r\n if (parent) {\r\n const parentWidth = parent.offsetWidth;\r\n if (parentWidth > 0) {\r\n // 设置宽度,可以减去一些 padding/margin 来避免溢出\r\n // 这里直接使用父元素宽度,如果需要可以调整\r\n actualSelect.style.maxWidth = `${parentWidth}px`;\r\n }\r\n }\r\n }\r\n\r\n // 使用 MutationObserver 监听 DOM 变化\r\n const observer = new MutationObserver((mutations) => {\r\n mutations.forEach((mutation) => {\r\n mutation.addedNodes.forEach((node) => {\r\n if (node.nodeType === Node.ELEMENT_NODE) {\r\n const element = node as HTMLElement;\r\n \r\n // 检查是否是 nz-select 组件标签\r\n if (element.tagName === 'NZ-SELECT') {\r\n // 等待 Angular 组件渲染完成\r\n setTimeout(() => {\r\n setSelectWidth(element);\r\n observeResize(element);\r\n }, 100);\r\n }\r\n \r\n // 检查是否是 ant-select 元素(nz-select 渲染后的实际元素)\r\n if (element.classList?.contains('ant-select')) {\r\n setTimeout(() => {\r\n setSelectWidth(element);\r\n observeResize(element);\r\n }, 0);\r\n }\r\n \r\n // 检查子元素中是否有 nz-select 或 ant-select\r\n const nzSelects = element.querySelectorAll?.('nz-select');\r\n nzSelects?.forEach((select) => {\r\n setTimeout(() => {\r\n setSelectWidth(select as HTMLElement);\r\n observeResize(select as HTMLElement);\r\n }, 100);\r\n });\r\n \r\n const antSelects = element.querySelectorAll?.('.ant-select');\r\n antSelects?.forEach((select) => {\r\n setTimeout(() => {\r\n setSelectWidth(select as HTMLElement);\r\n observeResize(select as HTMLElement);\r\n }, 0);\r\n });\r\n }\r\n });\r\n });\r\n });\r\n\r\n // 使用 ResizeObserver 监听父元素尺寸变化\r\n const resizeObserverMap = new WeakMap<HTMLElement, any>();\r\n \r\n function observeResize(selectElement: HTMLElement) {\r\n if (resizeObserverMap.has(selectElement)) {\r\n return;\r\n }\r\n\r\n if (typeof (window as any).ResizeObserver !== 'undefined') {\r\n const actualSelect = findActualSelectElement(selectElement);\r\n if (!actualSelect) {\r\n return;\r\n }\r\n\r\n const parent = getClosestParent(actualSelect);\r\n if (!parent) {\r\n return;\r\n }\r\n\r\n const resizeObserver = new (window as any).ResizeObserver(() => {\r\n setSelectWidth(selectElement);\r\n });\r\n resizeObserver.observe(parent);\r\n resizeObserverMap.set(selectElement, resizeObserver);\r\n }\r\n }\r\n\r\n // 开始监听 DOM 变化\r\n observer.observe(document.body, {\r\n childList: true,\r\n subtree: true,\r\n });\r\n\r\n // 检查已存在的 nz-select 和 ant-select\r\n const checkExistingSelects = () => {\r\n // 检查 nz-select 组件标签\r\n document.querySelectorAll('nz-select').forEach((element) => {\r\n setTimeout(() => {\r\n setSelectWidth(element as HTMLElement);\r\n observeResize(element as HTMLElement);\r\n }, 100);\r\n });\r\n \r\n // 检查 ant-select 元素\r\n document.querySelectorAll('.ant-select').forEach((element) => {\r\n setTimeout(() => {\r\n setSelectWidth(element as HTMLElement);\r\n observeResize(element as HTMLElement);\r\n }, 0);\r\n });\r\n };\r\n\r\n // 延迟执行,确保 DOM 已完全加载\r\n if (document.readyState === 'loading') {\r\n document.addEventListener('DOMContentLoaded', checkExistingSelects);\r\n } else {\r\n checkExistingSelects();\r\n }\r\n}\r\n","/*\r\n * Public API Surface of pro-table\r\n */\r\n\r\nexport * from \"./lib/pro-table.component\";\r\nexport * from \"./lib/pro-table.module\";\r\nexport * from \"./lib/constants\";\r\nexport * from \"./lib/type\";\r\nexport * from \"./lib/tokens\";\r\nexport * from \"./lib/plate-input/plate-prefix-load.service\";\r\nexport * from \"./lib/plate-input/plate-input.component\";\r\nexport * from \"./lib/plate-input/plate-input.module\";\r\nexport * from \"./lib/page-container/page-container.component\";\r\nexport * from \"./lib/page-container/page-container.module\";\r\nexport * from \"./lib/table-search-bar/table-search-bar.component\";\r\nexport * from \"./lib/table-search-bar/table-search-bar-module\";\r\nexport * from \"./lib/directives/trim-input.directive\";\r\nexport * from \"./lib/directives/trim-input.module\";\r\n\r\n// Export antd-form service and types\r\nexport { AntdFormService } from \"./lib/page-public/antd-form\";\r\nexport type {\r\n FieldErrorMessage,\r\n FieldErrorMessages,\r\n FieldConfig,\r\n FormModifyType,\r\n FormConfig,\r\n WatchOptions,\r\n AddFieldsConfigOptions,\r\n AddFieldsConfigResult,\r\n RemoveFieldsConfigOptions,\r\n RemoveFieldsConfigResult,\r\n} from \"./lib/page-public/antd-form\";\r\n\r\n// Export array-form service and types\r\nexport { ArrayFormService } from \"./lib/page-public/array-form\";\r\nexport type {\r\n ValidationResult,\r\n FieldValidator,\r\n FieldConfig as ArrayFieldConfig,\r\n ArrayFormRow,\r\n ArrayFormConfig,\r\n ArrayFormStoreItem,\r\n ArrayFormStore,\r\n} from \"./lib/page-public/array-form\";\r\n\r\n// Export modal width detector\r\nexport { initModalWidthDetector } from \"./lib/utils/modal-width-detector\";\r\nexport { initSelectWidthDetector } from \"./lib/utils/select-width-detector\";\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i2","i1","i3","i6.TrimInputDirective","i4","i5","i6","i7","i8","i9","i11.PageContainerComponent","i12.TableSearchBarComponent","i14.PlateInputComponent","i16","i20.ColmunsSettingComponent","i21.DynamicSearchFieldComponent","uuidv4"],"mappings":"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"}
1
+ {"version":3,"file":"yibozhang-pro-table.mjs","sources":["../../../pro-table/src/lib/constants.ts","../../../pro-table/src/lib/tokens.ts","../../../pro-table/src/lib/page-container/page-container.component.ts","../../../pro-table/src/lib/page-container/page-container.component.html","../../../pro-table/src/lib/table-search-bar/table-search-bar.component.ts","../../../pro-table/src/lib/table-search-bar/table-search-bar.component.html","../../../pro-table/src/lib/directives/trim-input.directive.ts","../../../pro-table/src/lib/plate-input/plate-input.component.ts","../../../pro-table/src/lib/plate-input/plate-input.component.html","../../../pro-table/src/lib/components/colmuns-setting/colmuns-setting.component.ts","../../../pro-table/src/lib/components/colmuns-setting/colmuns-setting.component.html","../../../pro-table/src/lib/components/dynamic-search-field/dynamic-search-field.component.ts","../../../pro-table/src/lib/pro-table.component.ts","../../../pro-table/src/lib/pro-table.component.html","../../../pro-table/src/lib/page-container/page-container.module.ts","../../../pro-table/src/lib/directives/trim-input.module.ts","../../../pro-table/src/lib/plate-input/plate-input.module.ts","../../../pro-table/src/lib/table-search-bar/table-search-bar-module.ts","../../../pro-table/src/lib/pro-table.module.ts","../../../pro-table/src/lib/plate-input/plate-prefix-load.service.ts","../../../pro-table/src/lib/page-public/antd-form.ts","../../../pro-table/src/lib/page-public/array-form.ts","../../../pro-table/src/lib/utils/modal-width-detector.ts","../../../pro-table/src/lib/utils/select-width-detector.ts","../../../pro-table/src/public-api.ts","../../../pro-table/src/yibozhang-pro-table.ts"],"sourcesContent":["import {\r\n InputFieldProps,\r\n InputPlateFieldProps,\r\n SelectFieldProps,\r\n SelectMultipleFieldProps,\r\n DateFieldProps,\r\n CheckboxFieldProps,\r\n AutoCompleteFieldProps,\r\n CustomFieldProps,\r\n InputNumberFieldProps,\r\n} from \"./type\";\r\n\r\nexport const PRO_TABLE_DEFAULT_PROPS: {\r\n input: InputFieldProps;\r\n inputPlate: InputPlateFieldProps;\r\n select: SelectFieldProps;\r\n selectMultiple: SelectMultipleFieldProps;\r\n date: DateFieldProps;\r\n checkbox: CheckboxFieldProps;\r\n autoComplete: AutoCompleteFieldProps;\r\n custom: CustomFieldProps;\r\n inputNumber: InputNumberFieldProps;\r\n} = {\r\n input: {\r\n name: \"\",\r\n placeHolder: \"请输入\",\r\n disabled: false,\r\n label: \"\",\r\n value: \"\",\r\n },\r\n select: {\r\n name: \"\",\r\n options: [],\r\n disabled: false,\r\n label: \"\",\r\n value: \"\",\r\n allowClear: true,\r\n placeHolder: \"请选择\",\r\n },\r\n selectMultiple: {\r\n name: \"\",\r\n options: [],\r\n disabled: false,\r\n label: \"\",\r\n value: [],\r\n allowClear: true,\r\n placeHolder: \"请选择\",\r\n },\r\n inputPlate: {\r\n name: \"\",\r\n label: \"\",\r\n value: \"\",\r\n },\r\n checkbox: {\r\n name: \"\",\r\n options: [],\r\n disabled: false,\r\n label: \"\",\r\n value: [],\r\n noStyle: false,\r\n },\r\n date: {\r\n name: \"\",\r\n disabled: false,\r\n label: \"\",\r\n value: \"\",\r\n allowClear: true,\r\n placeHolder: \"请选择\",\r\n showTime: false,\r\n format: \"yyyy-MM-dd\",\r\n mode: \"date\",\r\n },\r\n autoComplete: {\r\n name: \"\",\r\n disabled: false,\r\n placeHolder: \"请输入\",\r\n label: \"\",\r\n value: \"\",\r\n dataSource: () => [],\r\n backFill: false,\r\n defaultActiveFirstOption: false,\r\n returnFullData: false,\r\n },\r\n inputNumber: {\r\n name: \"\",\r\n disabled: false,\r\n label: \"\",\r\n value: \"\",\r\n placeHolder: \"请输入\",\r\n min: 0,\r\n max: 100,\r\n precision: 0,\r\n formatterPercent: (value: number) => `${value}`,\r\n parserPercent: (value: string) => value,\r\n },\r\n custom: {\r\n name: \"\",\r\n value: null,\r\n label: \"\",\r\n },\r\n};\r\n\r\nexport const PRO_TABLE_DEFAULT_COLUMN = {\r\n width: \"\",\r\n align: \"left\",\r\n fixedLeft: false,\r\n fixedRight: false,\r\n auxiliaryColumn: false,\r\n ellipsis:false\r\n};\r\n","import { InjectionToken } from \"@angular/core\";\r\nimport { Observable } from \"rxjs\";\r\n\r\nexport interface ProTableRemoteColumnService {\r\n /**\r\n * 查询当前表的列配置\r\n */\r\n getCol: (tableName: string, multiRow?: boolean) => Promise<any>;\r\n /**\r\n * 写入列配置\r\n */\r\n setCol?: (\r\n tableName: string,\r\n columns: Array<{\r\n field: string;\r\n isShow: boolean;\r\n header: string;\r\n sortName?: string | null;\r\n }>,\r\n multiRow?: boolean\r\n ) => Promise<any> | Observable<any>;\r\n}\r\n\r\nexport const PRO_TABLE_COLUMN_REMOTE = new InjectionToken<ProTableRemoteColumnService | null>(\r\n \"PRO_TABLE_COLUMN_REMOTE\"\r\n);\r\n\r\n/**\r\n * 车牌前缀选项接口\r\n */\r\nexport interface PlatePrefixOption {\r\n label: string;\r\n value: string;\r\n}\r\n\r\n/**\r\n * 车牌前缀加载服务接口\r\n */\r\nexport interface PlatePrefixLoadService {\r\n /**\r\n * 加载车牌前缀选项列表\r\n */\r\n loadPrefixOptions(): Promise<PlatePrefixOption[]>;\r\n}\r\n\r\nexport const PLATE_PREFIX_LOAD_SERVICE = new InjectionToken<PlatePrefixLoadService>(\r\n \"PLATE_PREFIX_LOAD_SERVICE\"\r\n);\r\n\r\n","import { Component, ContentChild, Input, OnInit, TemplateRef } from \"@angular/core\";\r\n\r\n@Component({\r\n selector: \"app-page-container\",\r\n templateUrl: \"./page-container.component.html\",\r\n styleUrls: [\"./page-container.component.less\"],\r\n})\r\nexport class PageContainerComponent implements OnInit {\r\n @Input() title: string = \"\";\r\n @Input() showHeader: boolean = true;\r\n @ContentChild(\"header\") headerTpl!: TemplateRef<any>;\r\n @ContentChild(\"body\") bodyTpl!: TemplateRef<any>;\r\n\r\n constructor() {}\r\n\r\n ngOnInit(): void {}\r\n}\r\n","<nz-card\r\n [nzBorderless]=\"true\"\r\n [nzBodyStyle]=\"{ padding: '8px', width: '100%' }\"\r\n>\r\n <div class=\"page-container-title\" *ngIf=\"title\">{{ title }}</div>\r\n <div class=\"page-container-header\" *ngIf=\"showHeader\">\r\n <ng-container *ngTemplateOutlet=\"headerTpl\"></ng-container>\r\n </div>\r\n <div class=\"page-container-body\">\r\n <ng-container *ngTemplateOutlet=\"bodyTpl\"></ng-container>\r\n </div>\r\n</nz-card>\r\n","import {\r\n AfterViewInit,\r\n Component,\r\n ContentChild,\r\n Input,\r\n OnInit,\r\n TemplateRef,\r\n} from \"@angular/core\";\r\n\r\n@Component({\r\n selector: \"app-table-search-bar\",\r\n templateUrl: \"./table-search-bar.component.html\",\r\n styleUrls: [\"./table-search-bar.component.less\"],\r\n})\r\nexport class TableSearchBarComponent implements OnInit, AfterViewInit {\r\n @Input() leftColSpan: number = 21;\r\n @Input() rightColSpan: number = 3;\r\n @Input() labelWidth: string = \"90px\";\r\n @Input() labelAlign: string = \"right\";\r\n @Input() formItemWidth: string = \"270px\";\r\n @ContentChild(\"leftContent\") leftContentTpl!: TemplateRef<any>;\r\n @ContentChild(\"actionTextBtn\") actionTextBtnTpl!: TemplateRef<any>;\r\n @ContentChild(\"actionImgBtn\") actionImgBtnTpl!: TemplateRef<any>;\r\n\r\n constructor() {}\r\n\r\n ngOnInit(): void {}\r\n\r\n ngAfterViewInit(): void {}\r\n}\r\n","<div class=\"table-search-bar\">\r\n <div\r\n class=\"table-search-bar-left\"\r\n style=\"--label-width: {{ labelWidth }}; --label-align: {{ labelAlign }}; --form-item-width: {{ formItemWidth }};\"\r\n >\r\n <ng-container *ngTemplateOutlet=\"leftContentTpl\"></ng-container>\r\n </div>\r\n <div class=\"table-search-bar-right\">\r\n <nz-space nzDirection=\"vertical\" nzAlign=\"end\">\r\n <ng-template nzSpaceItem>\r\n <ng-container *ngTemplateOutlet=\"actionTextBtnTpl\"></ng-container>\r\n </ng-template>\r\n <ng-template nzSpaceItem>\r\n <ng-container *ngTemplateOutlet=\"actionImgBtnTpl\"></ng-container>\r\n </ng-template>\r\n </nz-space>\r\n <!-- <ng-container *ngTemplateOutlet=\"rightContentTpl\"></ng-container> -->\r\n </div>\r\n</div>\r\n","import { Directive, ElementRef, HostListener, Optional } from \"@angular/core\";\r\nimport { NgControl } from \"@angular/forms\";\r\n\r\n@Directive({\r\n selector: \"input[nz-input]\",\r\n})\r\nexport class TrimInputDirective {\r\n constructor(\r\n private el: ElementRef,\r\n @Optional() private ngControl: NgControl,\r\n ) {}\r\n\r\n private shouldProcess(): boolean {\r\n if (this.el.nativeElement.hasAttribute(\"allow-trim\")) {\r\n return false;\r\n }\r\n if (this.el.nativeElement.hasAttribute(\"not-allow-trim\")) {\r\n return true;\r\n }\r\n\r\n let element = this.el.nativeElement;\r\n while (element) {\r\n const className = element.className;\r\n if (\r\n typeof className === \"string\" &&\r\n className.includes(\"ant-form-custom\")\r\n ) {\r\n return true;\r\n }\r\n element = element.parentElement;\r\n }\r\n return false;\r\n }\r\n\r\n @HostListener(\"blur\")\r\n onBlur() {\r\n if (!this.shouldProcess()) {\r\n return;\r\n }\r\n\r\n const value = this.el.nativeElement.value;\r\n if (typeof value === \"string\") {\r\n const trimmedValue = value.trim();\r\n\r\n this.el.nativeElement.value = trimmedValue;\r\n\r\n if (this.ngControl && this.ngControl.control) {\r\n this.ngControl.control.setValue(trimmedValue, { emitEvent: false });\r\n }\r\n }\r\n }\r\n\r\n @HostListener(\"input\")\r\n onInput() {\r\n if (!this.shouldProcess()) {\r\n return;\r\n }\r\n\r\n const value = this.el.nativeElement.value;\r\n\r\n if (typeof value === \"string\" && /\\s/.test(value)) {\r\n const noSpaceValue = value.replace(/\\s/g, \"\");\r\n this.el.nativeElement.value = noSpaceValue;\r\n\r\n if (this.ngControl && this.ngControl.control) {\r\n this.ngControl.control.setValue(noSpaceValue, { emitEvent: false });\r\n }\r\n }\r\n }\r\n}\r\n","import { Component, OnInit, OnDestroy, forwardRef, ChangeDetectorRef, ElementRef, Inject, Optional } from \"@angular/core\";\r\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from \"@angular/forms\";\r\nimport { PLATE_PREFIX_LOAD_SERVICE, PlatePrefixLoadService, PlatePrefixOption } from \"../tokens\";\r\n\r\n@Component({\r\n selector: \"app-plate-input\",\r\n templateUrl: \"./plate-input.component.html\",\r\n styleUrls: [\"./plate-input.component.less\"],\r\n providers: [\r\n {\r\n provide: NG_VALUE_ACCESSOR,\r\n useExisting: forwardRef(() => PlateInputComponent),\r\n multi: true,\r\n },\r\n ],\r\n})\r\nexport class PlateInputComponent implements OnInit, OnDestroy, ControlValueAccessor {\r\n nzPopoverVisible: boolean = false;\r\n platePrefix: string = \"\";\r\n plateSuffix: string = \"\";\r\n platePrefixOptions: Array<PlatePrefixOption> = [];\r\n disabled: boolean = false;\r\n private onChange = (value: string) => {};\r\n private onTouched = () => {};\r\n\r\n private clickOutsideHandler?: (event: MouseEvent) => void;\r\n\r\n constructor(\r\n private cdr: ChangeDetectorRef,\r\n private elementRef: ElementRef,\r\n @Optional() @Inject(PLATE_PREFIX_LOAD_SERVICE) private platePrefixLoadService?: PlatePrefixLoadService\r\n ) {}\r\n\r\n ngOnInit(): void {\r\n if (this.platePrefixLoadService) {\r\n // 使用注入的全局服务加载车牌前缀选项\r\n this.platePrefixLoadService\r\n .loadPrefixOptions()\r\n .then((data: Array<PlatePrefixOption>) => {\r\n this.platePrefixOptions = data;\r\n })\r\n .catch(() => {\r\n this.platePrefixOptions = [];\r\n });\r\n } else {\r\n // 如果没有注入服务,则保持空数组\r\n this.platePrefixOptions = [];\r\n }\r\n }\r\n\r\n handlePlatePrefix(value: string): void {\r\n this.platePrefix = value;\r\n this.emitValue();\r\n this.nzPopoverVisible = false;\r\n this.removeClickOutsideListener();\r\n }\r\n\r\n writeValue(value: string): void {\r\n if (value) {\r\n this.platePrefix = value.split(\"\")[0];\r\n this.plateSuffix = value\r\n .split(\"\")\r\n .filter((item, index) => index > 0)\r\n .join(\"\");\r\n } else {\r\n this.platePrefix = \"\";\r\n this.plateSuffix = \"\";\r\n }\r\n }\r\n\r\n registerOnChange(fn: (value: string) => void): void {\r\n this.onChange = fn;\r\n }\r\n\r\n registerOnTouched(fn: () => void): void {\r\n this.onTouched = fn;\r\n }\r\n\r\n setDisabledState(isDisabled: boolean): void {\r\n const previousDisabled = this.disabled;\r\n this.disabled = isDisabled;\r\n \r\n // 如果禁用状态改变,关闭 popover 并移除监听器\r\n if (previousDisabled !== isDisabled) {\r\n this.nzPopoverVisible = false;\r\n this.removeClickOutsideListener();\r\n // 强制变更检测\r\n this.cdr.detectChanges();\r\n }\r\n }\r\n\r\n handlePrefixClick(event: Event): void {\r\n if (this.disabled) {\r\n event.preventDefault();\r\n event.stopPropagation();\r\n this.nzPopoverVisible = false;\r\n return;\r\n }\r\n // 手动切换 popover 的显示/隐藏状态\r\n this.nzPopoverVisible = !this.nzPopoverVisible;\r\n \r\n // 如果打开了 popover,添加文档点击监听器\r\n if (this.nzPopoverVisible) {\r\n setTimeout(() => {\r\n this.attachClickOutsideListener();\r\n }, 0);\r\n } else {\r\n this.removeClickOutsideListener();\r\n }\r\n \r\n event.stopPropagation(); // 阻止事件冒泡\r\n }\r\n\r\n private attachClickOutsideListener(): void {\r\n if (this.clickOutsideHandler) {\r\n return;\r\n }\r\n \r\n this.clickOutsideHandler = (event: MouseEvent) => {\r\n const nativeElement = this.elementRef.nativeElement;\r\n const target = event.target as HTMLElement;\r\n \r\n // 检查是否点击在 popover 内容区域内\r\n const popoverContent = document.querySelector('.plate-input-popover');\r\n const clickedInPopover = popoverContent && popoverContent.contains(target);\r\n \r\n // 检查是否点击在组件内部(前缀按钮)\r\n const clickedInComponent = nativeElement.contains(target);\r\n \r\n // 如果点击既不在组件内部,也不在 popover 内容区域,则关闭 popover\r\n if (!clickedInComponent && !clickedInPopover) {\r\n this.nzPopoverVisible = false;\r\n this.removeClickOutsideListener();\r\n this.cdr.detectChanges();\r\n }\r\n };\r\n \r\n // 使用捕获阶段,确保在其他事件处理之前执行\r\n document.addEventListener('click', this.clickOutsideHandler, true);\r\n }\r\n\r\n private removeClickOutsideListener(): void {\r\n if (this.clickOutsideHandler) {\r\n document.removeEventListener('click', this.clickOutsideHandler, true);\r\n this.clickOutsideHandler = undefined;\r\n }\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this.removeClickOutsideListener();\r\n }\r\n\r\n private emitValue(): void {\r\n const fullPlate = this.platePrefix + this.plateSuffix;\r\n this.onChange(fullPlate);\r\n }\r\n\r\n onBlur(): void {\r\n this.onTouched();\r\n }\r\n\r\n handleAntdPlateSuffixBlur(event: any): void {\r\n if (this.disabled) return;\r\n const value = event.target.value.toUpperCase();\r\n this.plateSuffix = value;\r\n this.emitValue();\r\n }\r\n}\r\n","<div\r\n class=\"plate-antd-input-container\"\r\n [class.plate-antd-input-disabled]=\"disabled\"\r\n>\r\n <div\r\n class=\"plate-input-prefix\"\r\n [class.plate-input-prefix-disabled]=\"disabled\"\r\n nz-popover\r\n nzPopoverPlacement=\"bottom\"\r\n nzPopoverOverlayClassName=\"plate-input-popover\"\r\n [(nzPopoverVisible)]=\"nzPopoverVisible\"\r\n [nzPopoverTrigger]=\"'manual'\"\r\n [nzPopoverContent]=\"contentTemplate\"\r\n (click)=\"handlePrefixClick($event)\"\r\n >\r\n {{ platePrefix | uppercase }}\r\n <i\r\n class=\"plate-input-icon-down\"\r\n [nzRotate]=\"nzPopoverVisible ? 180 : 0\"\r\n nz-icon\r\n nzType=\"down\"\r\n nzTheme=\"outline\"\r\n ></i>\r\n </div>\r\n <ng-template #contentTemplate>\r\n <div nz-row style=\"height: 100%\">\r\n <div\r\n nz-col\r\n nzSpan=\"4\"\r\n *ngFor=\"let item of platePrefixOptions\"\r\n class=\"plate-input-popover-item\"\r\n (click)=\"!disabled && handlePlatePrefix(item.value)\"\r\n [ngClass]=\"{\r\n 'plate-input-popover-item-active': item.value === platePrefix,\r\n 'plate-input-popover-item-default': item.value !== platePrefix\r\n }\"\r\n >\r\n <div class=\"plate-input-popover-item-label\">\r\n {{ item.label }}\r\n </div>\r\n </div>\r\n </div>\r\n </ng-template>\r\n <input\r\n class=\"plate-input-suffix\"\r\n type=\"text\"\r\n nz-input\r\n allow-trim\r\n style=\"width: 75%\"\r\n [value]=\"plateSuffix | uppercase\"\r\n [disabled]=\"disabled\"\r\n (blur)=\"!disabled && handleAntdPlateSuffixBlur($event)\"\r\n placeholder=\"请输入\"\r\n maxlength=\"7\"\r\n />\r\n</div>\r\n","import {\r\n AfterViewInit,\r\n Component,\r\n ElementRef,\r\n EventEmitter,\r\n Input,\r\n OnDestroy,\r\n OnInit,\r\n Output,\r\n ViewChild,\r\n} from \"@angular/core\";\r\nimport Sortable from \"sortablejs\";\r\nimport { ProTableColumn } from \"../../type\";\r\nimport { PRO_TABLE_COLUMN_REMOTE, ProTableRemoteColumnService } from \"../../tokens\";\r\nimport { Inject, Optional } from \"@angular/core\";\r\nimport { isObservable } from \"rxjs\";\r\n\r\n@Component({\r\n selector: \"app-colmuns-setting\",\r\n templateUrl: \"./colmuns-setting.component.html\",\r\n styleUrls: [\"./colmuns-setting.component.less\"],\r\n})\r\nexport class ColmunsSettingComponent\r\n implements OnInit, AfterViewInit, OnDestroy\r\n{\r\n @Input() columns: ProTableColumn[] = [];\r\n\r\n @Input() selectedColumns: ProTableColumn[] = [];\r\n\r\n @Input() tableName: string;\r\n\r\n @Output() afterConfirm = new EventEmitter<ProTableColumn[]>();\r\n\r\n @ViewChild(\"sortableContainer\", { static: false })\r\n sortableContainer!: ElementRef;\r\n\r\n modalVisible: boolean = false;\r\n\r\n options: Array<{ label: string; value: string; checked: boolean }> = [];\r\n\r\n private sortableInstance: Sortable | null = null;\r\n\r\n constructor(\r\n @Optional()\r\n @Inject(PRO_TABLE_COLUMN_REMOTE)\r\n private columnRemote: ProTableRemoteColumnService | null\r\n ) {}\r\n\r\n ngOnInit(): void {}\r\n\r\n ngAfterViewInit(): void {\r\n this.initSortable();\r\n }\r\n\r\n ngOnDestroy(): void {\r\n if (this.sortableInstance) {\r\n this.sortableInstance.destroy();\r\n }\r\n }\r\n\r\n initSortable(): void {\r\n // 先销毁已存在的实例\r\n if (this.sortableInstance) {\r\n this.sortableInstance.destroy();\r\n this.sortableInstance = null;\r\n }\r\n\r\n if (this.sortableContainer && this.sortableContainer.nativeElement) {\r\n this.sortableInstance = new Sortable(\r\n this.sortableContainer.nativeElement,\r\n {\r\n animation: 150,\r\n ghostClass: \"sortable-ghost\",\r\n chosenClass: \"sortable-chosen\",\r\n dragClass: \"sortable-drag\",\r\n handle: \".sort-list-item\", // 指定拖拽句柄\r\n onEnd: (evt) => {\r\n this.onSortEnd(evt);\r\n },\r\n }\r\n );\r\n }\r\n }\r\n\r\n onSortEnd(evt: any): void {\r\n const { oldIndex, newIndex } = evt;\r\n if (oldIndex !== newIndex) {\r\n // 创建新的数组来避免直接修改输入属性\r\n const newSelectedColumns = [...this.selectedColumns];\r\n const movedItem = newSelectedColumns.splice(oldIndex, 1)[0];\r\n newSelectedColumns.splice(newIndex, 0, movedItem);\r\n\r\n // 更新 selectedColumns\r\n this.selectedColumns = newSelectedColumns;\r\n }\r\n }\r\n\r\n trackByColumn(index: number, item: ProTableColumn): string {\r\n return item.prop || index.toString();\r\n }\r\n\r\n /**\r\n * 同步 options 数组的 checked 状态与 selectedColumns\r\n */\r\n private syncOptionsWithSelectedColumns(): void {\r\n const selectedProps = this.selectedColumns.map((col) => col.prop);\r\n this.options.forEach((option) => {\r\n option.checked = selectedProps.includes(option.value);\r\n });\r\n }\r\n\r\n handleModalVisible() {\r\n this.options = this.columns\r\n .filter((item) => !item.auxiliaryColumn)\r\n .map((item) => {\r\n return {\r\n label: item.title,\r\n value: item.prop,\r\n checked: item.hideInTable ? false : true,\r\n sortName: item.sortName || null,\r\n };\r\n });\r\n\r\n // 同步 options 的 checked 状态与当前 selectedColumns\r\n this.syncOptionsWithSelectedColumns();\r\n\r\n this.modalVisible = true;\r\n\r\n // 模态框打开后重新初始化排序\r\n setTimeout(() => {\r\n this.initSortable();\r\n }, 100);\r\n }\r\n\r\n handleModalClose() {\r\n this.modalVisible = false;\r\n if (this.sortableInstance) {\r\n this.sortableInstance.destroy();\r\n this.sortableInstance = null;\r\n }\r\n }\r\n\r\n handleSelectRemove(key: string) {\r\n this.selectedColumns = this.selectedColumns.filter(\r\n (item) => item.prop !== key\r\n );\r\n\r\n // 使用同步方法确保所有状态一致\r\n this.syncOptionsWithSelectedColumns();\r\n }\r\n\r\n handleCheckBoxChange(value, record) {\r\n if (!value) {\r\n this.handleSelectRemove(record.value);\r\n } else {\r\n this.selectedColumns.push({\r\n title: record.label,\r\n prop: record.value,\r\n sortName: record.sortName,\r\n hideInTable: false,\r\n });\r\n // 添加项目后同步状态\r\n this.syncOptionsWithSelectedColumns();\r\n }\r\n }\r\n handleConfirm() {\r\n if (!this.columnRemote?.setCol || !this.tableName) {\r\n this.modalVisible = false;\r\n this.afterConfirm.emit();\r\n return;\r\n }\r\n const payload = this.selectedColumns.map((column) => {\r\n return {\r\n field: column.prop,\r\n isShow: column.hideInTable ? false : true,\r\n header: column.title,\r\n sortName: column.sortName || null,\r\n };\r\n });\r\n const result = this.columnRemote.setCol(this.tableName, payload);\r\n const done = (res) => {\r\n this.modalVisible = false;\r\n this.afterConfirm.emit();\r\n };\r\n if (result && isObservable(result)) {\r\n result.subscribe(done, () => done(null));\r\n } else {\r\n Promise.resolve(result).finally(() => done(null));\r\n }\r\n }\r\n}\r\n","<div class=\"action-pic-btn\" (click)=\"handleModalVisible()\" title=\"列设置\">\r\n <i nz-icon nzType=\"setting\" nzTheme=\"outline\"></i>\r\n</div>\r\n\r\n<nz-modal\r\n [(nzVisible)]=\"modalVisible\"\r\n [nzWidth]=\"820\"\r\n [nzTitle]=\"modalTitle\"\r\n (nzOnCancel)=\"handleModalClose()\"\r\n [nzContent]=\"modalBody\"\r\n [nzBodyStyle]=\"{ padding: '12px' }\"\r\n (nzOnOk)=\"handleConfirm()\"\r\n [nzWrapClassName]=\"'draggable-modal'\"\r\n>\r\n <ng-template #modalTitle>\r\n <div\r\n class=\"modal-drag-handle\"\r\n cdkDrag\r\n [cdkDragRootElement]=\"'.draggable-modal .ant-modal'\"\r\n cdkDragHandle\r\n [cdkDragBoundary]=\"'.draggable-modal'\"\r\n >\r\n <span>设置显示字段</span>\r\n </div>\r\n </ng-template>\r\n <ng-template #modalBody>\r\n <div class=\"modal-body\">\r\n <div class=\"check-box-list\">\r\n <div class=\"mb-12\">可选字段</div>\r\n <nz-checkbox-wrapper style=\"width: 100%\">\r\n <div nz-row [nzGutter]=\"[24, 24]\">\r\n <div nz-col nzSpan=\"6\" *ngFor=\"let item of options\">\r\n <label\r\n nz-checkbox\r\n nzValue=\"item.value\"\r\n [ngModel]=\"item.checked\"\r\n (ngModelChange)=\"handleCheckBoxChange($event, item)\"\r\n >{{ item.label }}</label\r\n >\r\n </div>\r\n </div>\r\n </nz-checkbox-wrapper>\r\n </div>\r\n <div class=\"sort-list\">\r\n <div nz-typography class=\"mb-4\">当前已经选定的字段</div>\r\n <div\r\n nz-typography\r\n nzType=\"secondary\"\r\n class=\"mb-4\"\r\n [style.fontSize]=\"'12px'\"\r\n >\r\n 提示:可拖动排序\r\n </div>\r\n <div #sortableContainer class=\"sortable-container\">\r\n <div\r\n class=\"sort-list-item mb-12\"\r\n *ngFor=\"let item of selectedColumns; trackBy: trackByColumn\"\r\n >\r\n {{ item.title }}\r\n <a\r\n href=\"javascript:void(0)\"\r\n class=\"fieldd-remove\"\r\n title=\"删除\"\r\n (click)=\"handleSelectRemove(item.prop)\"\r\n >×</a\r\n >\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </ng-template>\r\n</nz-modal>\r\n","import { Component, ComponentFactoryResolver, EventEmitter, Input, OnChanges, OnDestroy, OnInit, Output, SimpleChanges, Type, ViewChild, ViewContainerRef } from '@angular/core';\r\n\r\n@Component({\r\n selector: 'app-dynamic-search-field',\r\n template: `<ng-template #vc></ng-template>`\r\n})\r\nexport class DynamicSearchFieldComponent implements OnInit, OnChanges, OnDestroy {\r\n @Input() component: Type<any> | null = null;\r\n @Input() value: any;\r\n @Input() props: { [key: string]: any } | null = null;\r\n @Output() valueChange = new EventEmitter<any>();\r\n\r\n @ViewChild('vc', { read: ViewContainerRef, static: true }) vc!: ViewContainerRef;\r\n\r\n private cmpRef: any = null;\r\n private isCva = false;\r\n private cvaOnChange: ((val: any) => void) | null = null;\r\n\r\n constructor(private cfr: ComponentFactoryResolver) {}\r\n\r\n ngOnInit(): void {\r\n this.render();\r\n }\r\n\r\n ngOnChanges(changes: SimpleChanges): void {\r\n if (changes.component && !changes.component.firstChange) {\r\n this.destroy();\r\n this.render();\r\n return;\r\n }\r\n if (this.cmpRef) {\r\n if (changes.value && !changes.value.firstChange) {\r\n if (this.isCva) {\r\n if (typeof this.cmpRef.instance.writeValue === 'function') {\r\n this.cmpRef.instance.writeValue(this.value);\r\n }\r\n } else if ('value' in this.cmpRef.instance) {\r\n this.cmpRef.instance.value = this.value;\r\n }\r\n }\r\n if (changes.props && !changes.props.firstChange) {\r\n this.applyProps();\r\n }\r\n }\r\n }\r\n\r\n private render() {\r\n if (!this.component) return;\r\n const factory = this.cfr.resolveComponentFactory(this.component);\r\n this.vc.clear();\r\n this.cmpRef = this.vc.createComponent(factory);\r\n\r\n this.isCva = typeof this.cmpRef.instance.registerOnChange === 'function' && typeof this.cmpRef.instance.writeValue === 'function';\r\n\r\n if (this.isCva) {\r\n this.cmpRef.instance.writeValue(this.value);\r\n this.cmpRef.instance.registerOnChange((v: any) => {\r\n this.valueChange.emit(v);\r\n });\r\n } else {\r\n if ('value' in this.cmpRef.instance) {\r\n this.cmpRef.instance.value = this.value;\r\n }\r\n if ('valueChange' in this.cmpRef.instance && this.cmpRef.instance.valueChange && typeof this.cmpRef.instance.valueChange.subscribe === 'function') {\r\n this.cmpRef.instance.valueChange.subscribe((v: any) => {\r\n this.valueChange.emit(v);\r\n });\r\n }\r\n }\r\n\r\n this.applyProps();\r\n }\r\n\r\n private applyProps() {\r\n const p = this.props || {};\r\n const extra = p.componentProps || {};\r\n Object.keys(extra).forEach((k) => {\r\n try {\r\n this.cmpRef.instance[k] = extra[k];\r\n } catch {}\r\n });\r\n }\r\n\r\n private destroy() {\r\n if (this.cmpRef) {\r\n try { this.cmpRef.destroy(); } catch {}\r\n this.cmpRef = null;\r\n }\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this.destroy();\r\n }\r\n}\r\n","import {\r\n AfterContentInit,\r\n Component,\r\n ContentChild,\r\n ContentChildren,\r\n EventEmitter,\r\n HostListener,\r\n Inject,\r\n Input,\r\n OnInit,\r\n Optional,\r\n Output,\r\n QueryList,\r\n TemplateRef,\r\n} from \"@angular/core\";\r\nimport { cloneDeep, hasIn, isNil, debounce, isEqual } from \"lodash-es\";\r\nimport { PRO_TABLE_DEFAULT_COLUMN, PRO_TABLE_DEFAULT_PROPS } from \"./constants\";\r\nimport {\r\n AutoCompleteFieldProps,\r\n CheckboxFieldProps,\r\n OptionsType,\r\n ProTableColumn,\r\n ProTablePageInfo,\r\n ProTableRequestResult,\r\n ProTableValuesChange,\r\n SelectFieldProps,\r\n} from \"./type\";\r\nimport { PRO_TABLE_COLUMN_REMOTE, ProTableRemoteColumnService } from \"./tokens\";\r\nimport { isObservable, lastValueFrom } from 'rxjs';\r\n\r\n@Component({\r\n selector: \"app-pro-table\",\r\n templateUrl: \"./pro-table.component.html\",\r\n styleUrls: [\"./pro-table.component.less\"],\r\n})\r\nexport class ProTableComponent implements OnInit, AfterContentInit {\r\n @Input() showSearchBtn: boolean = true;\r\n\r\n @Input() showClearBtn: boolean = true;\r\n\r\n @Input() title: string | null = null;\r\n\r\n @Input() tableName: string = \"\";\r\n\r\n @Input() multiRow: boolean = false;\r\n\r\n @Input() columns: ProTableColumn[] = [];\r\n\r\n @Input() showSearchBar: boolean = true;\r\n\r\n @Input() showActionBar: boolean = true;\r\n\r\n @Input() confirmBtnText: string = \"查询\";\r\n\r\n @Input() clearBtnText: string = \"清空\";\r\n\r\n @Input() labelWidth: string = \"90px\";\r\n\r\n @Input() labelAlign: string = \"right\";\r\n\r\n @Input() formItemWidth: string = \"330px\";\r\n\r\n @Input() dataSource: any[] = [];\r\n\r\n @Input() bordered: boolean = true;\r\n\r\n @Input() outerBordered: boolean = true;\r\n\r\n @Input() showPagination: boolean = true;\r\n\r\n @Input() frontPagination: boolean = false;\r\n\r\n @Input() scroll: { x?: string | number; y?: string | number } | null = null;\r\n\r\n @Input() request: (params: any) => Promise<ProTableRequestResult>;\r\n\r\n @Input() summaryData: Record<string, any> | null = null;\r\n\r\n // 排序模式:local 本地排序;server 在线排序(提交给接口)\r\n @Input() sortMode: \"local\" | \"server\" = \"local\";\r\n\r\n @Input() showColumnSetting: boolean = false;\r\n\r\n // 是否开启多列排序(默认单列)\r\n @Input() multipleSort: boolean = false;\r\n\r\n @Input() showCheckbox: boolean = false;\r\n\r\n // 判断行是否禁用的函数\r\n @Input() rowDisabled: (data: any) => boolean = () => false;\r\n\r\n @Input() rerenderOnResize: boolean = true;\r\n\r\n // 是否自动触发请求\r\n @Input() autoTriggerRequest: boolean = true;\r\n\r\n @Input() customTableRender?: TemplateRef<any>;\r\n\r\n @Output() onRowClick = new EventEmitter<any>();\r\n\r\n @Output() onRowDbClick = new EventEmitter<any>();\r\n\r\n @Output() onValuesChange = new EventEmitter<ProTableValuesChange>();\r\n\r\n @Output() onResetFormBeforeReload = new EventEmitter<any>();\r\n\r\n @ContentChild(\"actionBar\") actionBarTpl!: TemplateRef<any>;\r\n\r\n @ContentChild(\"ImgActionBar\") imgActionBarTpl!: TemplateRef<any>;\r\n\r\n @ContentChildren(TemplateRef) allTemplates!: QueryList<TemplateRef<any>>;\r\n\r\n private _savedSearchParams: any = {};\r\n\r\n // 存储所有自定义模板的引用\r\n private customTemplates = new Map<string, TemplateRef<any>>();\r\n\r\n // 记录各列排序状态:'ascend' | 'descend' | null\r\n\r\n private _sortMap: Record<string, \"ascend\" | \"descend\" | null> = {};\r\n\r\n // 记录多列排序的优先级(后设置的优先)\r\n private _sortPriority: string[] = [];\r\n\r\n // 存储每个 autoComplete 字段的防抖函数\r\n private _autoCompleteDebounceMap: Map<string, (event: Event) => void> =\r\n new Map();\r\n\r\n // 仅在初始化时运行列配置预检查,避免后续调用重复触发\r\n private _preCheckDone: boolean = false;\r\n\r\n _columns: ProTableColumn[] = [];\r\n\r\n // 筛选表单数据存储\r\n _searchParams: any = {};\r\n\r\n // 筛选表单list渲染数据\r\n _searchFiledColumns: ProTableColumn[] = [];\r\n\r\n _pageInfo: ProTablePageInfo = {\r\n pageIndex: 1,\r\n pageSize: 15,\r\n total: 100,\r\n pageSizeOptions: [10, 15, 20, 50, 100, 500, 1000],\r\n };\r\n\r\n _loading: boolean = false;\r\n\r\n _selectedTableRow: any = null;\r\n\r\n // 选中的行数据(用于复选框选择)- 保留用于兼容性\r\n _selectedRows: any[] = [];\r\n\r\n // 全选状态\r\n _checkedAll: boolean = false;\r\n\r\n // 半选状态(部分选中)\r\n _indeterminate: boolean = false;\r\n\r\n // 远程columns\r\n _serverColumns: ProTableColumn[] = [];\r\n\r\n // 存储 autoComplete 字段的数据源\r\n _autoCompleteDataSources: Record<string, any[]> = {};\r\n\r\n // 控制表格显示状态,用于重新挂载\r\n _showTable: boolean = true;\r\n\r\n // 防抖定时器,用于窗口大小调整\r\n private resizeDebounce: any;\r\n\r\n @HostListener(\"window:resize\")\r\n onWindowResize() {\r\n if (!this.rerenderOnResize) return;\r\n\r\n if (this.resizeDebounce) {\r\n clearTimeout(this.resizeDebounce);\r\n }\r\n\r\n this.resizeDebounce = setTimeout(() => {\r\n // 通过 ngIf 重新挂载表格\r\n this._showTable = false;\r\n setTimeout(() => {\r\n this._showTable = true;\r\n }, 0);\r\n }, 150);\r\n }\r\n constructor(\r\n @Optional()\r\n @Inject(PRO_TABLE_COLUMN_REMOTE)\r\n private columnRemote: ProTableRemoteColumnService | null\r\n ) {}\r\n\r\n private async fetchRemoteColumns() {\r\n if (!this.columnRemote?.getCol || !this.tableName) {\r\n return null;\r\n }\r\n try {\r\n const res = await this.columnRemote.getCol(this.tableName, this.multiRow);\r\n return res;\r\n } catch (error) {\r\n return null;\r\n }\r\n }\r\n\r\n private async persistRemoteColumns(columns: any[]) {\r\n if (!this.columnRemote?.setCol || !this.tableName) {\r\n return null;\r\n }\r\n try {\r\n const result = this.columnRemote.setCol(\r\n this.tableName,\r\n columns,\r\n this.multiRow\r\n );\r\n if (result && isObservable(result)) {\r\n return await lastValueFrom(result);\r\n }\r\n return result;\r\n } catch (error) {\r\n return null;\r\n }\r\n }\r\n\r\n async ngOnInit(): Promise<void> {\r\n this._searchParams = {};\r\n this.formateInnerColumns(this.columns);\r\n await this.setSearchParams(this.columns);\r\n\r\n // 使用 Proxy 包装 _searchParams,拦截表单项值变化并向外发出事件\r\n this._searchParams = this.createSearchParamsProxy(this._searchParams);\r\n if (this.autoTriggerRequest) {\r\n this.handleQuery();\r\n }\r\n this.queryDynamicColumns();\r\n }\r\n\r\n ngAfterContentInit() {\r\n // 自动注册所有自定义模板\r\n // 注意:此时所有 ContentChild 和 ContentChildren 都已初始化完成\r\n this.autoRegisterTemplates();\r\n }\r\n\r\n private async preCheckServerColumns(): Promise<boolean> {\r\n const res = await this.fetchRemoteColumns();\r\n if (!res) return false;\r\n const initColumns = this.columns\r\n .filter((col) => !col.auxiliaryColumn)\r\n .map((column) => {\r\n return {\r\n field: column.prop,\r\n isShow: !column.hideInTable, // 默认全部显示\r\n header: column.title,\r\n sortName: column.sortName || null,\r\n };\r\n });\r\n if (res.code === 0) {\r\n if (!isEqual(res.data.tabColumn, initColumns)) {\r\n const initRes = await this.persistRemoteColumns(initColumns);\r\n if (initRes) {\r\n this.queryDynamicColumns();\r\n }\r\n\r\n return false;\r\n } else {\r\n console.log(\"一致\");\r\n return true;\r\n }\r\n } else if (res.code === 10) {\r\n // code === 10 表示未初始化,需要继续执行后续逻辑\r\n return true;\r\n } else {\r\n return false;\r\n }\r\n }\r\n\r\n private async queryDynamicColumns() {\r\n if (!this.tableName || !this.columnRemote) return;\r\n if (!this._preCheckDone) {\r\n const checkResult = await this.preCheckServerColumns();\r\n this._preCheckDone = true;\r\n if (!checkResult) return;\r\n }\r\n const res = await this.fetchRemoteColumns();\r\n if (!res) return;\r\n if (res.code === 0) {\r\n const _tabColumn = res.data.tabColumn.map((item) => {\r\n return {\r\n title: item.header,\r\n prop: item.field,\r\n sortName: item.sortName,\r\n hideInTable: !item.isShow,\r\n };\r\n });\r\n this._serverColumns = _tabColumn;\r\n this.updateTableColumns(_tabColumn);\r\n } else if (res.code === 10) {\r\n // 如果未设置接口返回,需要默认调用一次修改函数初始化数据\r\n const initColumns = this.columns\r\n .filter((col) => !col.auxiliaryColumn)\r\n .map((column) => {\r\n return {\r\n field: column.prop,\r\n isShow: true, // 默认全部显示\r\n header: column.title,\r\n sortName: column.sortName || null,\r\n };\r\n });\r\n\r\n // 调用修改接口初始化数据\r\n const initRes = await this.persistRemoteColumns(initColumns);\r\n if (initRes) {\r\n this.queryDynamicColumns();\r\n }\r\n }\r\n }\r\n\r\n private formateInnerColumns(columns: ProTableColumn[]) {\r\n this._columns = columns\r\n .filter((item) => !item.hideInTable)\r\n .map((item) => {\r\n return { ...PRO_TABLE_DEFAULT_COLUMN, ...item } as ProTableColumn;\r\n });\r\n }\r\n\r\n // 自动注册模板的方法\r\n private autoRegisterTemplates() {\r\n // 获取所有模板\r\n const allTemplatesArray = this.allTemplates.toArray();\r\n\r\n // 获取所有需要自定义模板的列\r\n const columnsWithCustomRender = this._columns.filter(\r\n (col) => col.customRender\r\n );\r\n\r\n // 获取所有需要自定义label模板的列(使用原始columns,确保顺序正确)\r\n const columnsWithCustomLabel = this.columns.filter(\r\n (col) => col.customLabelRender\r\n );\r\n\r\n // 计算需要的模板总数\r\n const customRenderCount = columnsWithCustomRender.length;\r\n const totalNeededTemplates = customRenderCount + columnsWithCustomLabel.length;\r\n\r\n // 识别并排除特殊模板(actionBar 和 imgActionBar)\r\n const specialTemplateIndices = new Set<number>();\r\n \r\n // 尝试找到 actionBarTpl 在 allTemplatesArray 中的位置\r\n if (this.actionBarTpl) {\r\n const actionBarIndex = this.findTemplateIndex(allTemplatesArray, this.actionBarTpl);\r\n if (actionBarIndex !== -1) {\r\n specialTemplateIndices.add(actionBarIndex);\r\n }\r\n }\r\n \r\n // 尝试找到 imgActionBarTpl 在 allTemplatesArray 中的位置\r\n if (this.imgActionBarTpl) {\r\n const imgActionBarIndex = this.findTemplateIndex(allTemplatesArray, this.imgActionBarTpl);\r\n if (imgActionBarIndex !== -1) {\r\n specialTemplateIndices.add(imgActionBarIndex);\r\n }\r\n }\r\n\r\n // 如果无法通过引用找到特殊模板,使用备用策略\r\n // 备用策略:假设最后的模板是特殊模板\r\n const specialTemplateCount = (this.actionBarTpl ? 1 : 0) + (this.imgActionBarTpl ? 1 : 0);\r\n if (specialTemplateIndices.size === 0 && specialTemplateCount > 0) {\r\n for (let i = allTemplatesArray.length - specialTemplateCount; i < allTemplatesArray.length; i++) {\r\n specialTemplateIndices.add(i);\r\n }\r\n }\r\n\r\n // 提取列模板(排除特殊模板)\r\n const columnTemplates: TemplateRef<any>[] = [];\r\n allTemplatesArray.forEach((tpl, index) => {\r\n if (!specialTemplateIndices.has(index)) {\r\n columnTemplates.push(tpl);\r\n }\r\n });\r\n\r\n // 验证模板数量\r\n if (columnTemplates.length !== totalNeededTemplates) {\r\n console.warn(\r\n `ProTable: 模板数量不匹配!需要 ${totalNeededTemplates} 个列模板,实际有 ${columnTemplates.length} 个。请检查 customRender 和 customLabelRender 配置。`\r\n );\r\n }\r\n\r\n // 注册自定义渲染模板\r\n columnsWithCustomRender.forEach((column, index) => {\r\n const templateName = column.customRender!;\r\n if (index < columnTemplates.length) {\r\n this.customTemplates.set(templateName, columnTemplates[index]);\r\n } else {\r\n console.error(`ProTable: 未找到模板 \"${templateName}\",索引 ${index} 超出范围`);\r\n }\r\n });\r\n\r\n // 注册自定义label模板(从 customRenderCount 之后开始)\r\n columnsWithCustomLabel.forEach((column, index) => {\r\n const templateName = column.customLabelRender!;\r\n const templateIndex = customRenderCount + index;\r\n if (templateIndex < columnTemplates.length) {\r\n this.customTemplates.set(templateName, columnTemplates[templateIndex]);\r\n } else {\r\n console.error(`ProTable: 未找到label模板 \"${templateName}\",索引 ${templateIndex} 超出范围`);\r\n }\r\n });\r\n }\r\n\r\n // 尝试在数组中找到模板的索引(使用多种比较方式)\r\n private findTemplateIndex(templates: TemplateRef<any>[], target: TemplateRef<any>): number {\r\n // 方法1:引用相等性\r\n let index = templates.indexOf(target);\r\n if (index !== -1) return index;\r\n\r\n // 方法2:通过 elementRef 比较\r\n try {\r\n const targetElementRef = (target as any).elementRef;\r\n if (targetElementRef) {\r\n for (let i = 0; i < templates.length; i++) {\r\n const tplElementRef = (templates[i] as any).elementRef;\r\n if (tplElementRef === targetElementRef) {\r\n return i;\r\n }\r\n }\r\n }\r\n } catch (e) {\r\n // 忽略错误\r\n }\r\n\r\n // 方法3:通过 Angular 内部属性比较\r\n try {\r\n const targetContainer = (target as any)._declarationTContainer;\r\n if (targetContainer) {\r\n for (let i = 0; i < templates.length; i++) {\r\n const tplContainer = (templates[i] as any)._declarationTContainer;\r\n if (tplContainer === targetContainer) {\r\n return i;\r\n }\r\n }\r\n }\r\n } catch (e) {\r\n // 忽略错误\r\n }\r\n\r\n return -1;\r\n }\r\n\r\n // 设置筛选表单默认属性\r\n private setSearchFormDefaultProp(columns: ProTableColumn[]) {\r\n columns.forEach((item) => {\r\n if (item.valueType) {\r\n if (item.fieldProps) {\r\n item.fieldProps = {\r\n ...PRO_TABLE_DEFAULT_PROPS[item.valueType],\r\n ...item.fieldProps,\r\n };\r\n } else {\r\n item.fieldProps = { ...PRO_TABLE_DEFAULT_PROPS[item.valueType] };\r\n }\r\n }\r\n });\r\n }\r\n\r\n // 动态设置Options\r\n private setSelectRequest(columns: ProTableColumn[]) {\r\n columns.map(async (item) => {\r\n if (item.fieldProps && hasIn(item.fieldProps, \"request\")) {\r\n try {\r\n const options = await (\r\n item.fieldProps as SelectFieldProps\r\n ).request?.();\r\n (item.fieldProps as SelectFieldProps).options = options;\r\n } catch (error) {\r\n (item.fieldProps as SelectFieldProps).options = [];\r\n }\r\n }\r\n });\r\n }\r\n\r\n private async setSearchParams(columns: ProTableColumn[]) {\r\n this._searchFiledColumns = [];\r\n columns\r\n .filter((item) => {\r\n const flag = !item.hideInSearch && item.valueType;\r\n if (flag) {\r\n this._searchFiledColumns.push(cloneDeep(item));\r\n }\r\n return flag;\r\n })\r\n .forEach((column) => {\r\n const key = column.fieldProps?.name || column.prop;\r\n let defaultValue = PRO_TABLE_DEFAULT_PROPS[column.valueType].value;\r\n\r\n // 对于checkbox类型,从options中找出checked为true的项作为默认值\r\n if (column.valueType === \"checkbox\") {\r\n const checkedValues = (column.fieldProps?.options || [])\r\n .filter((opt: OptionsType) => opt.checked)\r\n .map((opt: OptionsType) => opt.value);\r\n this._searchParams[key] =\r\n checkedValues.length > 0 ? checkedValues : defaultValue;\r\n } else {\r\n this._searchParams[key] = column.fieldProps?.value || defaultValue;\r\n }\r\n\r\n // 初始化 autoComplete 数据源\r\n if (column.valueType === \"autoComplete\") {\r\n this._autoCompleteDataSources[key] = [];\r\n }\r\n });\r\n\r\n // 根据列的 order 字段进行排序,未设置 order 的放在最后\r\n this._searchFiledColumns.sort((a: any, b: any) => {\r\n const aOrder = isNil(a?.order) ? Number.MAX_SAFE_INTEGER : a.order;\r\n const bOrder = isNil(b?.order) ? Number.MAX_SAFE_INTEGER : b.order;\r\n if (aOrder === bOrder) return 0;\r\n return aOrder - bOrder;\r\n });\r\n\r\n this.setSearchFormDefaultProp(this._searchFiledColumns);\r\n\r\n // 并发加载所有需要异步获取的选项\r\n this.setSelectRequest(this._searchFiledColumns);\r\n }\r\n\r\n private updateTableColumns(injectColumns: ProTableColumn[]) {\r\n // 1. 使用最原始的columns作为数据源,确保辅助列完全不受影响\r\n const originalColumns = cloneDeep(this.columns);\r\n\r\n // 2. 处理字段映射(如果提供了fields参数)\r\n let processedInjectColumns = injectColumns;\r\n\r\n // 3. 分离辅助列和非辅助列(使用原始数据)\r\n const nonAuxiliaryColumns = originalColumns.filter(\r\n (col) => !col.auxiliaryColumn\r\n );\r\n\r\n // 4. 按照injectColumns的顺序重新排列非辅助列\r\n const reorderedNonAuxiliaryColumns: ProTableColumn[] = [];\r\n const remainingNonAuxiliaryColumns = [...nonAuxiliaryColumns]; // 复制一份用于查找和移除\r\n\r\n processedInjectColumns.forEach((injectCol) => {\r\n // 查找非辅助列中对应的下标\r\n const existingColIndex = remainingNonAuxiliaryColumns.findIndex(\r\n (col) => col.prop === injectCol.prop\r\n );\r\n if (existingColIndex !== -1) {\r\n // 如果找到相同列,用injectColumns中的属性覆盖原始columns中的属性\r\n const existingCol = remainingNonAuxiliaryColumns[existingColIndex];\r\n\r\n const updatedCol = { ...existingCol, ...injectCol };\r\n reorderedNonAuxiliaryColumns.push(updatedCol);\r\n // 从剩余数组中移除,避免重复\r\n remainingNonAuxiliaryColumns.splice(existingColIndex, 1);\r\n } else {\r\n // 如果没找到对应的列,直接添加injectColumns中的列\r\n reorderedNonAuxiliaryColumns.push(injectCol);\r\n }\r\n });\r\n\r\n // 5. 处理剩余的原始columns中的非辅助列(在injectColumns中未出现的列)\r\n // 这些列应该被隐藏(设置hideInTable为true)\r\n remainingNonAuxiliaryColumns.forEach((remainingCol) => {\r\n const hiddenCol = { ...remainingCol, hideInTable: true };\r\n reorderedNonAuxiliaryColumns.push(hiddenCol);\r\n });\r\n\r\n // 6. 按照原始columns的顺序重新组合:保持辅助列的原始位置和属性\r\n const finalColumns: ProTableColumn[] = [];\r\n let nonAuxiliaryIndex = 0;\r\n let auxiliaryIndex = 0;\r\n\r\n originalColumns.forEach((originalCol) => {\r\n if (originalCol.auxiliaryColumn) {\r\n // 如果是辅助列,使用原始列数据,完全不进行任何修改\r\n finalColumns.push(originalCol);\r\n auxiliaryIndex++;\r\n } else {\r\n // 如果是非辅助列,使用重新排序后的列,但保留原始列的所有属性\r\n const reorderedCol = reorderedNonAuxiliaryColumns[nonAuxiliaryIndex];\r\n if (reorderedCol) {\r\n // 合并原始列和重新排序后的列,确保保留所有原始属性\r\n const mergedCol = { ...originalCol, ...reorderedCol };\r\n finalColumns.push(mergedCol);\r\n } else {\r\n // 如果重新排序后的列不存在,使用原始列\r\n finalColumns.push(originalCol);\r\n }\r\n nonAuxiliaryIndex++;\r\n }\r\n });\r\n this.formateInnerColumns(finalColumns);\r\n }\r\n\r\n // 通过 Proxy 监听 _searchParams 的属性变更\r\n private createSearchParamsProxy(target: any) {\r\n const self = this;\r\n const handler: ProxyHandler<any> = {\r\n set(obj: any, prop: string | symbol, value: any) {\r\n const key = String(prop);\r\n const oldVal = obj[key];\r\n if (oldVal === value) {\r\n obj[key] = value;\r\n return true;\r\n }\r\n obj[key] = value;\r\n try {\r\n self.onValuesChange.emit({\r\n key,\r\n value,\r\n params: self.getSearchParams(),\r\n });\r\n } catch (e) {}\r\n return true;\r\n },\r\n };\r\n return new Proxy(target, handler);\r\n }\r\n\r\n private clearEmptySearchParams() {\r\n const cloneSearchParams = cloneDeep(this._searchParams);\r\n return cloneSearchParams;\r\n }\r\n\r\n private buildServerSortPayload() {\r\n // 构建激活排序集合(按优先级从低到高,末尾优先)\r\n const activeKeys = this._sortPriority.filter((k) => !!this._sortMap[k]);\r\n if (activeKeys.length === 0) return null;\r\n const sorts = activeKeys.map((field) => {\r\n // 查找对应的列配置,优先使用sortName字段\r\n const column = this._columns.find((col) => col.prop === field);\r\n const sortField = column?.sortName || field;\r\n return {\r\n field: sortField,\r\n order: this._sortMap[field]!,\r\n };\r\n });\r\n if (this.multipleSort) {\r\n return sorts; // 以数组形式提交多列排序\r\n }\r\n const [first] = sorts;\r\n return first; // 兼容单列结构 { field, order }\r\n }\r\n\r\n private sortDataSourceInPlace() {\r\n if (!Array.isArray(this.dataSource) || this.dataSource.length === 0) return;\r\n const activeKeys = this._sortPriority.filter((k) => !!this._sortMap[k]);\r\n if (activeKeys.length === 0) return;\r\n\r\n // 复制一份优先级,从前到后优先级从低到高(最后设置的字段优先)\r\n const keysInPriority = [...activeKeys];\r\n this.dataSource.sort((a: any, b: any) => {\r\n for (let i = keysInPriority.length - 1; i >= 0; i--) {\r\n const field = keysInPriority[i];\r\n const order = this._sortMap[field]!;\r\n const av = a?.[field];\r\n const bv = b?.[field];\r\n const cmp = this.compareValues(av, bv);\r\n if (cmp !== 0) return order === \"ascend\" ? cmp : -cmp;\r\n }\r\n return 0;\r\n });\r\n }\r\n\r\n private compareValues(aVal: any, bVal: any): number {\r\n if (aVal == null && bVal == null) return 0;\r\n if (aVal == null) return -1;\r\n if (bVal == null) return 1;\r\n if (aVal instanceof Date && bVal instanceof Date) {\r\n return aVal.getTime() - bVal.getTime();\r\n }\r\n if (typeof aVal === \"boolean\" && typeof bVal === \"boolean\") {\r\n return aVal === bVal ? 0 : aVal ? 1 : -1;\r\n }\r\n if (typeof aVal === \"number\" && typeof bVal === \"number\") {\r\n return aVal - bVal;\r\n }\r\n if (typeof aVal === \"string\" && typeof bVal === \"string\") {\r\n return aVal.localeCompare(bVal);\r\n }\r\n const aNum = Number(aVal);\r\n const bNum = Number(bVal);\r\n if (!isNaN(aNum) && !isNaN(bNum)) return aNum - bNum;\r\n return String(aVal).localeCompare(String(bVal));\r\n }\r\n\r\n // 执行 autoComplete 数据源查询(实际执行逻辑)\r\n private executeAutoCompleteDataSource(event: Event, column: ProTableColumn) {\r\n const fieldKey = column.fieldProps?.name || column.prop;\r\n\r\n if (\r\n (column.fieldProps as AutoCompleteFieldProps).dataSource &&\r\n typeof (column.fieldProps as AutoCompleteFieldProps).dataSource ===\r\n \"function\"\r\n ) {\r\n try {\r\n const result = (column.fieldProps as AutoCompleteFieldProps).dataSource(\r\n event\r\n );\r\n // 如果返回的是 Promise,处理异步结果\r\n if (result instanceof Promise) {\r\n result\r\n .then((data) => {\r\n this._autoCompleteDataSources[fieldKey] = data || [];\r\n })\r\n .catch((error) => {\r\n console.error(\"AutoComplete dataSource error:\", error);\r\n this._autoCompleteDataSources[fieldKey] = [];\r\n });\r\n } else {\r\n // 同步返回结果\r\n this._autoCompleteDataSources[fieldKey] = result || [];\r\n }\r\n } catch (error) {\r\n console.error(\"AutoComplete dataSource error:\", error);\r\n this._autoCompleteDataSources[fieldKey] = [];\r\n }\r\n }\r\n }\r\n\r\n public getSearchParams(options?: {\r\n useSaved?: boolean; // 使用最近一次查询提交的参数,默认为 false;false 为当前表单值\r\n }): any {\r\n const { useSaved = false } = options || {};\r\n const rawParams = useSaved ? this._savedSearchParams : this._searchParams;\r\n const params = cloneDeep(rawParams || {});\r\n\r\n return {\r\n params,\r\n pageInfo: {\r\n pageIndex: this._pageInfo.pageIndex,\r\n pageSize: this._pageInfo.pageSize,\r\n },\r\n // 在线排序模式:把排序对象提交给接口\r\n ...(this.sortMode === \"server\"\r\n ? { sort: this.buildServerSortPayload() }\r\n : {}),\r\n };\r\n }\r\n\r\n public reload(afterDelete?: boolean) {\r\n this.handleQuery(afterDelete);\r\n }\r\n\r\n public setFieldsValue(fields: Record<string, any>) {\r\n Object.keys(fields).forEach((k) => {\r\n this._searchParams[k] = fields[k]; // 保留 Proxy,逐项赋值触发拦截\r\n });\r\n }\r\n\r\n public setFieldValue(key: string, value: any) {\r\n this._searchParams[key] = value;\r\n }\r\n\r\n public clearSelectedRow() {\r\n this._selectedTableRow = null;\r\n }\r\n\r\n public async setColumns(\r\n columns: ProTableColumn[],\r\n options?: {\r\n reload?: boolean; // 是否重新加载数据,默认为 false\r\n }\r\n ): Promise<void> {\r\n // 更新 columns 输入属性\r\n this.columns = cloneDeep(columns);\r\n\r\n // 重新格式化内部列\r\n this.formateInnerColumns(this.columns);\r\n\r\n // 重新设置搜索参数(异步操作)\r\n // 先清空旧的搜索参数,避免旧数据残留\r\n this._searchParams = {};\r\n await this.setSearchParams(this.columns);\r\n\r\n // 重新创建 Proxy,确保表单项值变化能正常触发事件\r\n this._searchParams = this.createSearchParamsProxy(this._searchParams);\r\n\r\n // 重新注册模板(如果组件已经初始化完成)\r\n if (this.allTemplates) {\r\n this.autoRegisterTemplates();\r\n }\r\n\r\n // 如果设置了 reload 选项为 true,则重新查询数据\r\n if (options?.reload === true) {\r\n this.handleQuery();\r\n }\r\n }\r\n\r\n public getSelectedRowData<T = any>(): T {\r\n return this._selectedTableRow;\r\n }\r\n\r\n public getCheckedRows<T = any>(): T[] {\r\n if (!this.showCheckbox) {\r\n return [];\r\n }\r\n // 返回当前数据源中所有 checked 为 true 的项\r\n // 注意:如果需要获取所有页的选中项,需要遍历所有数据源或使用 _selectedRowIds\r\n return this.dataSource.filter((row) => row.checked === true) as T[];\r\n }\r\n\r\n // 获取指定名称的模板\r\n getTemplate(name: string | undefined): TemplateRef<any> | null {\r\n if (!name) return null;\r\n return this.customTemplates.get(name) || null;\r\n }\r\n\r\n getToolTipTextValue(column: ProTableColumn, data: any): string {\r\n const key =\r\n column.customRender && this.getTemplate(column.customRender)\r\n ? \"\"\r\n : column.ellipsis\r\n ? column.prop\r\n : \"\";\r\n return !key ? \"\" : data[key];\r\n }\r\n\r\n getTableRowChecked(data: any) {\r\n // 启用复选框时:行高亮应与复选框选中状态一致(支持多选)\r\n if (this.showCheckbox) {\r\n return this.isRowChecked(data);\r\n }\r\n // 未启用复选框时:仍然使用单选行高亮\r\n if (!this._selectedTableRow) return false;\r\n return JSON.stringify(this._selectedTableRow) === JSON.stringify(data);\r\n }\r\n\r\n // 检查行是否被禁用\r\n isRowDisabled(data: any): boolean {\r\n if (!this.showCheckbox) return false;\r\n return this.rowDisabled ? this.rowDisabled(data) : false;\r\n }\r\n\r\n // 检查行是否被复选框选中(数据驱动模式)\r\n isRowChecked(data: any): boolean {\r\n if (!this.showCheckbox) return false;\r\n // 直接读取数据对象的 checked 属性\r\n return data.checked === true;\r\n }\r\n\r\n // 切换行的选中状态(数据驱动模式,保留用于兼容)\r\n toggleRowChecked(data: any, checked: boolean, event?: Event) {\r\n if (event) {\r\n event.stopPropagation(); // 阻止事件冒泡,避免触发行点击\r\n }\r\n // 如果行被禁用,不允许切换选中状态\r\n if (this.isRowDisabled(data)) {\r\n return;\r\n }\r\n\r\n // 直接设置数据对象的 checked 属性\r\n data.checked = checked;\r\n\r\n // 同步更新 _selectedRows(用于兼容性)\r\n const index = this._selectedRows.findIndex((row) =>\r\n this.isSameRow(row, data)\r\n );\r\n if (checked) {\r\n if (index === -1) {\r\n this._selectedRows.push(data);\r\n }\r\n // 勾选复选框时同步设置高亮选中行\r\n this._selectedTableRow = data;\r\n } else {\r\n if (index > -1) {\r\n this._selectedRows.splice(index, 1);\r\n }\r\n // 若当前高亮行为该行,则取消高亮\r\n if (\r\n this._selectedTableRow &&\r\n this.isSameRow(this._selectedTableRow, data)\r\n ) {\r\n this._selectedTableRow = null;\r\n }\r\n }\r\n\r\n this.updateCheckAllStatus();\r\n }\r\n\r\n // 更新全选状态(数据驱动模式)\r\n updateCheckAllStatus() {\r\n if (!this.showCheckbox || !Array.isArray(this.dataSource)) {\r\n this._checkedAll = false;\r\n this._indeterminate = false;\r\n return;\r\n }\r\n // 只计算可用的行(未禁用的行)\r\n const availableRows = this.dataSource.filter(\r\n (row) => !this.isRowDisabled(row)\r\n );\r\n // 基于数据对象的 checked 属性计算\r\n const checkedCount = availableRows.filter(\r\n (row) => row.checked === true\r\n ).length;\r\n const totalCount = availableRows.length;\r\n this._checkedAll =\r\n totalCount > 0 && checkedCount > 0 && checkedCount === totalCount;\r\n this._indeterminate = checkedCount > 0 && checkedCount < totalCount;\r\n }\r\n\r\n // 全选/取消全选(数据驱动模式)\r\n toggleCheckAll(checked: boolean, event?: Event) {\r\n if (event) {\r\n event.stopPropagation();\r\n }\r\n\r\n // 只处理可用的行(未禁用的行)\r\n const availableRows = this.dataSource.filter(\r\n (row) => !this.isRowDisabled(row)\r\n );\r\n\r\n // 批量设置 checked 属性\r\n availableRows.forEach((row) => {\r\n row.checked = checked;\r\n });\r\n\r\n // 同步更新 _selectedRows(用于兼容性)\r\n if (checked) {\r\n this._selectedRows = [...availableRows];\r\n // 同步设置高亮选中行为第一条可选数据\r\n this._selectedTableRow =\r\n availableRows.length > 0 ? availableRows[0] : null;\r\n } else {\r\n this._selectedRows = [];\r\n // 取消高亮\r\n this._selectedTableRow = null;\r\n }\r\n\r\n this.updateCheckAllStatus();\r\n }\r\n\r\n // 获取选中的行数据(保留用于兼容性)\r\n getSelectedRows(): any[] {\r\n return this.getCheckedRows();\r\n }\r\n\r\n // 处理行 checkbox 变化事件(数据驱动模式)\r\n handleRowCheckedChange(data: any, checked: boolean): void {\r\n if (this.isRowDisabled(data)) {\r\n return;\r\n }\r\n\r\n // 数据对象的 checked 属性已经通过双向绑定自动更新\r\n // 这里只需要同步更新 _selectedRows\r\n\r\n // 同步更新 _selectedRows(用于兼容性)\r\n const index = this._selectedRows.findIndex((row) =>\r\n this.isSameRow(row, data)\r\n );\r\n if (checked) {\r\n if (index === -1) {\r\n this._selectedRows.push(data);\r\n }\r\n // 勾选复选框时同步设置高亮选中行\r\n this._selectedTableRow = data;\r\n } else {\r\n if (index > -1) {\r\n this._selectedRows.splice(index, 1);\r\n }\r\n // 若当前高亮行为该行,则取消高亮\r\n if (\r\n this._selectedTableRow &&\r\n this.isSameRow(this._selectedTableRow, data)\r\n ) {\r\n this._selectedTableRow = null;\r\n }\r\n }\r\n\r\n // 更新全选状态\r\n this.updateCheckAllStatus();\r\n }\r\n\r\n // 刷新全选状态(用于其他场景)\r\n refreshCheckAllStatus(): void {\r\n this.updateCheckAllStatus();\r\n }\r\n\r\n // 获取行的唯一标识(用于跨页选中)\r\n private getRowId(data: any): string | number | undefined {\r\n return data.id ?? data.key ?? undefined;\r\n }\r\n\r\n // 判断两行是否为同一行\r\n private isSameRow(row1: any, row2: any): boolean {\r\n const id1 = this.getRowId(row1);\r\n const id2 = this.getRowId(row2);\r\n\r\n if (id1 !== undefined && id2 !== undefined) {\r\n return id1 === id2;\r\n }\r\n\r\n // fallback 到 JSON 比较\r\n return JSON.stringify(row1) === JSON.stringify(row2);\r\n }\r\n\r\n // 清空选中的行(数据驱动模式)\r\n clearSelectedRows() {\r\n // 清空当前数据源中所有项的 checked 状态\r\n if (Array.isArray(this.dataSource)) {\r\n this.dataSource.forEach((row) => {\r\n row.checked = false;\r\n });\r\n }\r\n\r\n this._selectedRows = [];\r\n this._checkedAll = false;\r\n this._indeterminate = false;\r\n this._selectedTableRow = null;\r\n }\r\n\r\n handleFieldCheckBoxChange(checkBoxOptions: OptionsType[], key: string) {\r\n this.setFieldsValue({\r\n [key]: checkBoxOptions\r\n .filter((item) => item.checked)\r\n .map((item) => item.value),\r\n });\r\n }\r\n\r\n handleSearch() {\r\n this._savedSearchParams = this.clearEmptySearchParams();\r\n this._pageInfo.pageIndex = 1;\r\n this.handleQuery();\r\n }\r\n\r\n handleResetForm() {\r\n Object.keys(this._searchParams).forEach((key) => {\r\n const targetColumn = this._searchFiledColumns.find((item) => {\r\n return (item.fieldProps?.name || item.prop) === key;\r\n });\r\n\r\n // 对于checkbox类型,需要特殊处理默认值\r\n if (targetColumn?.valueType === \"checkbox\") {\r\n // 从原始columns配置中获取初始配置,以确保使用正确的默认值\r\n const originalColumn = this.columns.find((item) => {\r\n return (item.fieldProps?.name || item.prop) === key;\r\n });\r\n\r\n // 从原始options中找出checked为true的项作为默认值\r\n const originalFieldProps = originalColumn?.fieldProps as\r\n | CheckboxFieldProps\r\n | undefined;\r\n const checkedValues = (originalFieldProps?.options || [])\r\n .filter((opt: OptionsType) => opt.checked)\r\n .map((opt: OptionsType) => opt.value);\r\n const defaultValue =\r\n checkedValues.length > 0\r\n ? checkedValues\r\n : PRO_TABLE_DEFAULT_PROPS[targetColumn.valueType].value;\r\n\r\n this._searchParams[key] = defaultValue;\r\n\r\n // 根据默认值恢复options的checked状态,使用原始options的结构\r\n const defaultValues = Array.isArray(defaultValue) ? defaultValue : [];\r\n const originalOptions = originalFieldProps?.options || [];\r\n const targetFieldProps = targetColumn.fieldProps as CheckboxFieldProps;\r\n targetFieldProps.options = originalOptions.map((item: OptionsType) => {\r\n return {\r\n ...item,\r\n checked: defaultValues.includes(item.value),\r\n };\r\n });\r\n } else {\r\n this._searchParams[key] = targetColumn?.fieldProps\r\n ? targetColumn?.fieldProps.value ||\r\n PRO_TABLE_DEFAULT_PROPS[targetColumn.valueType].value\r\n : PRO_TABLE_DEFAULT_PROPS[targetColumn.valueType].value;\r\n }\r\n });\r\n\r\n this._savedSearchParams = {};\r\n this._pageInfo.pageIndex = 1;\r\n this.onResetFormBeforeReload.emit();\r\n this.handleQuery();\r\n }\r\n\r\n handlePageIndexChange(pageIndex: number) {\r\n this._pageInfo.pageIndex = pageIndex;\r\n this.handleQuery();\r\n }\r\n\r\n handlePageSizeChange(pageSize: any) {\r\n this._pageInfo.pageSize = pageSize;\r\n this._pageInfo.pageIndex = 1;\r\n this.handleQuery();\r\n }\r\n\r\n async handleQuery(afterDelete?: boolean) {\r\n // 删除后刷新且当前页仅剩一条记录时,若不在第一页则先回退一页\r\n if (\r\n afterDelete &&\r\n Array.isArray(this.dataSource) &&\r\n this.dataSource.length === 1 &&\r\n this._pageInfo.pageIndex > 1\r\n ) {\r\n this._pageInfo.pageIndex = this._pageInfo.pageIndex - 1;\r\n }\r\n\r\n this._loading = true;\r\n if (this.request) {\r\n try {\r\n const result = await this.request({\r\n params: this.clearEmptySearchParams(),\r\n pageInfo: {\r\n pageIndex: this._pageInfo.pageIndex,\r\n pageSize: this._pageInfo.pageSize,\r\n },\r\n // 在线排序模式:把排序对象提交给接口\r\n ...(this.sortMode === \"server\"\r\n ? { sort: this.buildServerSortPayload() }\r\n : {}),\r\n });\r\n\r\n // 查询后默认不保留跨页选中状态:每次返回的数据均初始化为未选中\r\n if (this.showCheckbox) {\r\n this.dataSource = (result.data || []).map((item) => {\r\n return {\r\n ...item,\r\n checked: false,\r\n };\r\n });\r\n } else {\r\n this.dataSource = result.data || [];\r\n }\r\n\r\n this.summaryData = result.summaryData || null;\r\n // 本地排序模式:拿到数据后在前端排序\r\n if (this.sortMode === \"local\") {\r\n this.sortDataSourceInPlace();\r\n }\r\n this._pageInfo.total = result.total || 0;\r\n // 取消跨页多选:查询后清空选中状态\r\n if (this.showCheckbox) {\r\n this.clearSelectedRows();\r\n }\r\n } catch (error) {\r\n console.error(\"查询失败:\", error);\r\n this.dataSource = [];\r\n this._pageInfo.total = 0;\r\n this.summaryData = null;\r\n } finally {\r\n this._loading = false;\r\n this._selectedTableRow = null;\r\n }\r\n } else {\r\n console.warn(\"未提供 _request 回调函数\");\r\n this._loading = false;\r\n }\r\n }\r\n\r\n // 触发列排序变更\r\n onSortChange(sortKey: string, sortOrder: \"ascend\" | \"descend\" | null) {\r\n // 单列排序:重置其它列;多列排序:保留其它列\r\n if (!this.multipleSort) {\r\n Object.keys(this._sortMap).forEach((key) => {\r\n if (key !== sortKey) this._sortMap[key] = null;\r\n });\r\n }\r\n this._sortMap[sortKey] = sortOrder;\r\n\r\n // 维护优先级队列:有序列且非空 -> 置于末尾;为空 -> 移除\r\n this._sortPriority = this._sortPriority.filter((k) => k !== sortKey);\r\n if (sortOrder) {\r\n this._sortPriority.push(sortKey);\r\n }\r\n\r\n if (this.sortMode === \"local\") {\r\n this.sortDataSourceInPlace();\r\n } else {\r\n // 在线排序:重新请求\r\n this.handleQuery();\r\n }\r\n }\r\n\r\n getSortOrder(sortKey: string): \"ascend\" | \"descend\" | null {\r\n return this._sortMap[sortKey] || null;\r\n }\r\n\r\n handleTableRowClick(data: any) {\r\n this._selectedTableRow = data;\r\n if (this.showCheckbox && !this.isRowDisabled(data)) {\r\n // 先清空所有选中行\r\n this._selectedRows = [];\r\n const nextChecked = !this.isRowChecked(data);\r\n this.toggleRowChecked(data, nextChecked);\r\n }\r\n this.onRowClick.emit(this._selectedTableRow);\r\n }\r\n\r\n handleTableRowDbClick(data: any) {\r\n this._selectedTableRow = data;\r\n this.onRowDbClick.emit(this._selectedTableRow);\r\n }\r\n\r\n handleColumnsSettingConfirm() {\r\n this.queryDynamicColumns();\r\n }\r\n\r\n // 处理 autoComplete 输入事件(带防抖)\r\n handleAutoCompleteInput(event: Event, column: ProTableColumn) {\r\n const fieldKey = column.fieldProps?.name || column.prop;\r\n\r\n // 如果该字段还没有防抖函数,创建一个\r\n if (!this._autoCompleteDebounceMap.has(fieldKey)) {\r\n const debouncedFn = debounce((evt: Event) => {\r\n // 重新查找对应的 column,确保使用最新的配置\r\n const currentColumn = this._searchFiledColumns.find(\r\n (col) => (col.fieldProps?.name || col.prop) === fieldKey\r\n );\r\n if (currentColumn) {\r\n this.executeAutoCompleteDataSource(evt, currentColumn);\r\n }\r\n }, 300); // 300ms 防抖延迟\r\n this._autoCompleteDebounceMap.set(fieldKey, debouncedFn);\r\n }\r\n\r\n // 调用防抖函数\r\n const debouncedFn = this._autoCompleteDebounceMap.get(fieldKey);\r\n if (debouncedFn) {\r\n debouncedFn(event);\r\n }\r\n }\r\n\r\n // 获取 autoComplete 的数据源\r\n getAutoCompleteDataSource(column: ProTableColumn): any[] {\r\n const fieldKey = column.fieldProps?.name || column.prop;\r\n return this._autoCompleteDataSources[fieldKey] || [];\r\n }\r\n\r\n getFieldProps(column: ProTableColumn): any {\r\n return column.fieldProps;\r\n }\r\n\r\n // 获取指定名称的label模板\r\n getLabelTemplate(name: string | undefined): TemplateRef<any> | null {\r\n if (!name) return null;\r\n return this.customTemplates.get(name) || null;\r\n }\r\n\r\n // 获取 form-item 的动态类名\r\n getFormItemClassName(column: ProTableColumn): string {\r\n const fieldName = this.getFieldProps(column).name || column.prop;\r\n return `pro-table-${fieldName}-form-item`;\r\n }\r\n}\r\n","<app-page-container\r\n [title]=\"title\"\r\n [showHeader]=\"showSearchBar\"\r\n ngClass=\"pro-table-container\"\r\n>\r\n <ng-template #header>\r\n <app-table-search-bar\r\n *ngIf=\"showSearchBar\"\r\n [labelWidth]=\"labelWidth\"\r\n [labelAlign]=\"labelAlign\"\r\n [formItemWidth]=\"formItemWidth\"\r\n >\r\n <ng-template #leftContent>\r\n <nz-form-item\r\n *ngFor=\"let column of _searchFiledColumns\"\r\n [ngClass]=\"getFormItemClassName(column)\"\r\n >\r\n <nz-form-label *ngIf=\"!getFieldProps(column).hideLabel\" nzNoColon>\r\n <!-- 检查是否有自定义label模板 -->\r\n <ng-container\r\n *ngIf=\"\r\n column.customLabelRender &&\r\n getLabelTemplate(column.customLabelRender);\r\n else defaultLabel\r\n \"\r\n >\r\n <ng-container\r\n [ngTemplateOutlet]=\"getLabelTemplate(column.customLabelRender)\"\r\n [ngTemplateOutletContext]=\"{\r\n $implicit: column,\r\n column: column,\r\n fieldProps: getFieldProps(column)\r\n }\"\r\n >\r\n </ng-container>\r\n </ng-container>\r\n <ng-template #defaultLabel>\r\n {{ getFieldProps(column).label || column.title }}\r\n </ng-template>\r\n </nz-form-label>\r\n <nz-form-control *ngIf=\"column.valueType === 'input'\">\r\n <input\r\n nz-input\r\n [name]=\"getFieldProps(column).name || column.prop\"\r\n [placeholder]=\"getFieldProps(column).placeHolder\"\r\n [disabled]=\"getFieldProps(column).disabled\"\r\n [(ngModel)]=\"\r\n _searchParams[getFieldProps(column).name || column.prop]\r\n \"\r\n />\r\n </nz-form-control>\r\n <nz-form-control *ngIf=\"column.valueType === 'inputPlate'\">\r\n <app-plate-input\r\n [name]=\"getFieldProps(column).name || column.prop\"\r\n [(ngModel)]=\"\r\n _searchParams[getFieldProps(column).name || column.prop]\r\n \"\r\n ></app-plate-input>\r\n </nz-form-control>\r\n <nz-form-control *ngIf=\"column.valueType === 'select'\">\r\n <nz-select\r\n [(ngModel)]=\"\r\n _searchParams[getFieldProps(column).name || column.prop]\r\n \"\r\n [nzAllowClear]=\"getFieldProps(column).allowClear\"\r\n [nzPlaceHolder]=\"getFieldProps(column).placeHolder\"\r\n [name]=\"getFieldProps(column).name || column.prop\"\r\n [nzOptions]=\"getFieldProps(column).options\"\r\n [nzDisabled]=\"getFieldProps(column).disabled\"\r\n >\r\n </nz-select>\r\n </nz-form-control>\r\n <nz-form-control *ngIf=\"column.valueType === 'selectMultiple'\">\r\n <nz-select\r\n [(ngModel)]=\"\r\n _searchParams[getFieldProps(column).name || column.prop]\r\n \"\r\n [nzAllowClear]=\"getFieldProps(column).allowClear\"\r\n [nzPlaceHolder]=\"getFieldProps(column).placeHolder\"\r\n [name]=\"getFieldProps(column).name || column.prop\"\r\n [nzOptions]=\"getFieldProps(column).options\"\r\n [nzDisabled]=\"getFieldProps(column).disabled\"\r\n nzMode=\"multiple\"\r\n [nzMaxTagCount]=\"2\"\r\n [nzMaxTagPlaceholder]=\"nzMaxTagPlaceholder\"\r\n [nzCustomTemplate]=\"defaultTemplate\"\r\n >\r\n <ng-template #nzMaxTagPlaceholder>\r\n +\r\n {{\r\n _searchParams[getFieldProps(column).name || column.prop]\r\n ?.length\r\n }}\r\n </ng-template>\r\n <ng-template #defaultTemplate let-selected>\r\n {{ selected.nzLabel.length > 4 ? selected.nzLabel.substring(0, 4) + '...' : selected.nzLabel }}\r\n </ng-template>\r\n </nz-select>\r\n </nz-form-control>\r\n <nz-form-control *ngIf=\"column.valueType === 'date'\">\r\n <nz-date-picker\r\n [nzShowTime]=\"getFieldProps(column).showTime\"\r\n [nzFormat]=\"getFieldProps(column).format\"\r\n [nzPlaceHolder]=\"getFieldProps(column).placeHolder\"\r\n [nzAllowClear]=\"getFieldProps(column).allowClear\"\r\n [nzDisabled]=\"getFieldProps(column).disabled\"\r\n [(ngModel)]=\"\r\n _searchParams[getFieldProps(column).name || column.prop]\r\n \"\r\n [nzMode]=\"getFieldProps(column).mode\"\r\n ></nz-date-picker>\r\n </nz-form-control>\r\n <nz-form-control *ngIf=\"column.valueType === 'checkbox'\">\r\n <nz-checkbox-group\r\n [class]=\"\r\n getFieldProps(column).noStyle\r\n ? 'pro-table-checkboxgroup-nostyle'\r\n : ''\r\n \"\r\n [(ngModel)]=\"getFieldProps(column).options\"\r\n [nzDisabled]=\"getFieldProps(column).disabled\"\r\n (ngModelChange)=\"\r\n handleFieldCheckBoxChange(\r\n $event,\r\n getFieldProps(column).name || column.prop\r\n )\r\n \"\r\n ></nz-checkbox-group>\r\n </nz-form-control>\r\n <nz-form-control *ngIf=\"column.valueType === 'autoComplete'\">\r\n <input\r\n nz-input\r\n [(ngModel)]=\"\r\n _searchParams[getFieldProps(column)?.name || column.prop]\r\n \"\r\n (input)=\"handleAutoCompleteInput($event, column)\"\r\n [nzAutocomplete]=\"auto\"\r\n [disabled]=\"getFieldProps(column)?.disabled\"\r\n [placeholder]=\"getFieldProps(column)?.placeHolder\"\r\n />\r\n <nz-autocomplete\r\n [nzBackfill]=\"getFieldProps(column).backFill\"\r\n [nzDefaultActiveFirstOption]=\"\r\n getFieldProps(column).defaultActiveFirstOption\r\n \"\r\n [nzWidth]=\"getFieldProps(column).width\"\r\n #auto\r\n >\r\n <nz-auto-option\r\n *ngFor=\"let option of getAutoCompleteDataSource(column)\"\r\n [nzValue]=\"\r\n getFieldProps(column).returnFullData ? option : option.value\r\n \"\r\n [nzLabel]=\"option.label\"\r\n [nzDisabled]=\"option.disabled\"\r\n >\r\n {{ option.label }}\r\n </nz-auto-option>\r\n </nz-autocomplete>\r\n </nz-form-control>\r\n <nz-form-control *ngIf=\"column.valueType === 'custom'\">\r\n <app-dynamic-search-field\r\n [component]=\"getFieldProps(column).component\"\r\n [value]=\"_searchParams[getFieldProps(column).name || column.prop]\"\r\n [props]=\"getFieldProps(column)\"\r\n (valueChange)=\"\r\n setFieldValue(getFieldProps(column).name || column.prop, $event)\r\n \"\r\n ></app-dynamic-search-field>\r\n </nz-form-control>\r\n <nz-form-control *ngIf=\"column.valueType === 'inputNumber'\">\r\n <nz-input-number\r\n [style.width]=\"'100%'\"\r\n [(ngModel)]=\"\r\n _searchParams[getFieldProps(column).name || column.prop]\r\n \"\r\n [nzPlaceHolder]=\"getFieldProps(column).placeHolder\"\r\n [nzDisabled]=\"getFieldProps(column).disabled\"\r\n [nzFormatter]=\"getFieldProps(column).formatterPercent\"\r\n [nzParser]=\"getFieldProps(column).parserPercent\"\r\n ></nz-input-number>\r\n </nz-form-control>\r\n </nz-form-item>\r\n </ng-template>\r\n <ng-template #actionTextBtn>\r\n <nz-space [nzSize]=\"4\">\r\n <ng-template nzSpaceItem *ngIf=\"showSearchBtn\">\r\n <button nz-button nzType=\"primary\" (click)=\"handleSearch()\">\r\n {{ confirmBtnText }}\r\n </button>\r\n </ng-template>\r\n <ng-template nzSpaceItem *ngIf=\"showClearBtn\">\r\n <button nz-button (click)=\"handleResetForm()\">\r\n {{ clearBtnText }}\r\n </button>\r\n </ng-template>\r\n </nz-space>\r\n </ng-template>\r\n <ng-template #actionImgBtn>\r\n <nz-space>\r\n <ng-container *ngTemplateOutlet=\"imgActionBarTpl\"></ng-container>\r\n <ng-template nzSpaceItem class=\"setting-space-item\" *ngIf=\"showColumnSetting\">\r\n <span nz-tooltip nzTooltipTitle=\"设置字段\">\r\n <app-colmuns-setting\r\n [columns]=\"columns\"\r\n [selectedColumns]=\"_serverColumns\"\r\n [tableName]=\"tableName\"\r\n (afterConfirm)=\"handleColumnsSettingConfirm()\"\r\n ></app-colmuns-setting>\r\n </span>\r\n </ng-template>\r\n </nz-space>\r\n </ng-template>\r\n </app-table-search-bar>\r\n </ng-template>\r\n\r\n <ng-template #body>\r\n <div class=\"mb-4\">\r\n <ng-container *ngIf=\"showActionBar\">\r\n <ng-container *ngTemplateOutlet=\"actionBarTpl\"></ng-container>\r\n </ng-container>\r\n </div>\r\n <ng-container *ngIf=\"customTableRender\">\r\n <ng-container *ngTemplateOutlet=\"customTableRender\"></ng-container>\r\n </ng-container>\r\n <nz-table\r\n *ngIf=\"!customTableRender && _showTable\"\r\n #dynamicTable\r\n nzSize=\"small\"\r\n nzShowSizeChanger\r\n [nzBordered]=\"bordered\"\r\n [nzOuterBordered]=\"outerBordered\"\r\n [nzData]=\"dataSource\"\r\n [nzPageIndex]=\"_pageInfo.pageIndex\"\r\n [nzPageSize]=\"_pageInfo.pageSize\"\r\n [nzTotal]=\"_pageInfo.total\"\r\n [nzPageSizeOptions]=\"_pageInfo.pageSizeOptions\"\r\n [nzShowPagination]=\"showPagination\"\r\n [nzShowTotal]=\"totalTemplate\"\r\n [nzLoading]=\"_loading\"\r\n [nzFrontPagination]=\"frontPagination\"\r\n [nzScroll]=\"scroll\"\r\n (nzPageIndexChange)=\"handlePageIndexChange($event)\"\r\n (nzPageSizeChange)=\"handlePageSizeChange($event)\"\r\n >\r\n <thead>\r\n <tr>\r\n <!-- 复选框列(当 showCheckbox=true 时显示) -->\r\n <th\r\n *ngIf=\"showCheckbox\"\r\n [nzWidth]=\"'50px'\"\r\n [nzAlign]=\"'center'\"\r\n style=\"text-align: center\"\r\n [(nzChecked)]=\"_checkedAll\"\r\n [nzIndeterminate]=\"_indeterminate\"\r\n (nzCheckedChange)=\"toggleCheckAll($event)\"\r\n (click)=\"$event.stopPropagation()\"\r\n ></th>\r\n <th\r\n *ngFor=\"let column of _columns\"\r\n [nzWidth]=\"column.width\"\r\n [nzAlign]=\"column.align\"\r\n [nzLeft]=\"column.fixedLeft\"\r\n [nzRight]=\"column.fixedRight\"\r\n [nzShowSort]=\"!!column.sorter\"\r\n [nzSortOrder]=\"getSortOrder(column.prop)\"\r\n (nzSortOrderChange)=\"onSortChange(column.prop, $event)\"\r\n >\r\n {{ column.title }}\r\n </th>\r\n </tr>\r\n </thead>\r\n\r\n <tbody>\r\n <tr\r\n style=\"cursor: pointer\"\r\n *ngFor=\"let data; let i = index; of: dynamicTable.data\"\r\n [ngClass]=\"{\r\n 'ant-table-custom-row-selected': !!getTableRowChecked(data),\r\n 'ant-table-custom-row-even': i % 2 === 0,\r\n 'ant-table-custom-row-odd': i % 2 !== 0\r\n }\"\r\n (click)=\"handleTableRowClick(data)\"\r\n (dblclick)=\"handleTableRowDbClick(data)\"\r\n >\r\n <!-- 复选框列(当 showCheckbox=true 时显示) -->\r\n <td\r\n *ngIf=\"showCheckbox\"\r\n [nzAlign]=\"'center'\"\r\n style=\"text-align: center; width: 50px\"\r\n [(nzChecked)]=\"data.checked\"\r\n [nzDisabled]=\"isRowDisabled(data)\"\r\n (nzCheckedChange)=\"handleRowCheckedChange(data, $event)\"\r\n (click)=\"$event.stopPropagation()\"\r\n ></td>\r\n <td\r\n *ngFor=\"let column of _columns\"\r\n [nzLeft]=\"column.fixedLeft\"\r\n [nzRight]=\"column.fixedRight\"\r\n [nzAlign]=\"column.align\"\r\n [ngClass]=\"{\r\n 'pro-nowrap': true\r\n }\"\r\n >\r\n <!-- 检查是否有自定义模板 -->\r\n <ng-container\r\n *ngIf=\"\r\n column.customRender && getTemplate(column.customRender);\r\n let template\r\n \"\r\n >\r\n <ng-template\r\n [ngTemplateOutlet]=\"template\"\r\n [ngTemplateOutletContext]=\"{\r\n $implicit: data,\r\n data: data,\r\n column: column,\r\n index: i,\r\n pageInfo: _pageInfo\r\n }\"\r\n >\r\n </ng-template>\r\n </ng-container>\r\n\r\n <!-- 默认渲染逻辑 -->\r\n <ng-container\r\n *ngIf=\"!column.customRender || !getTemplate(column.customRender)\"\r\n >\r\n <ng-container *ngIf=\"column.ellipsis\">\r\n <div\r\n class=\"pro-ellipsis\"\r\n [title]=\"data[column.prop]\"\r\n [ngStyle]=\"{\r\n width: 'calc(' + column.width + ' - 25px)'\r\n }\"\r\n >\r\n {{ data[column.prop] }}\r\n </div>\r\n </ng-container>\r\n <ng-container *ngIf=\"!column.ellipsis\">\r\n {{ data[column.prop] }}\r\n </ng-container>\r\n </ng-container>\r\n </td>\r\n </tr>\r\n <tr *ngIf=\"summaryData && _pageInfo.total > 0\">\r\n <!-- 汇总行的复选框列(当 showCheckbox=true 时显示,但为空) -->\r\n <td\r\n *ngIf=\"showCheckbox\"\r\n style=\"font-weight: bold; border-right: 1px solid #e8e8e8\"\r\n ></td>\r\n <td\r\n *ngFor=\"let column; let i = index; of: _columns\"\r\n [nzLeft]=\"column.fixedLeft\"\r\n [nzRight]=\"column.fixedRight\"\r\n style=\"font-weight: bold; border-right: 1px solid #e8e8e8\"\r\n [nzAlign]=\"column.align\"\r\n >\r\n <span *ngIf=\"i === 0\">总计</span>\r\n <ng-container *ngIf=\"i !== 0 && column.summary\">\r\n {{\r\n column.summary?.format\r\n ? column.summary?.format(\r\n summaryData[column.summary?.name || column.prop]\r\n )\r\n : summaryData[column.summary?.name || column.prop]\r\n }}\r\n </ng-container>\r\n </td>\r\n </tr>\r\n </tbody>\r\n <ng-template #totalTemplate let-total\r\n >共 {{ _pageInfo.total }} 条记录</ng-template\r\n >\r\n </nz-table>\r\n </ng-template>\r\n</app-page-container>\r\n","import { CommonModule } from \"@angular/common\";\r\nimport { HttpClientModule } from \"@angular/common/http\";\r\nimport { NgModule } from \"@angular/core\";\r\nimport { FormsModule, ReactiveFormsModule } from \"@angular/forms\";\r\nimport { RouterModule } from \"@angular/router\";\r\nimport { NzCardModule } from \"ng-zorro-antd/card\";\r\nimport { PageContainerComponent } from \"./page-container.component\";\r\n\r\n@NgModule({\r\n imports: [\r\n CommonModule,\r\n FormsModule,\r\n HttpClientModule,\r\n RouterModule,\r\n NzCardModule,\r\n ReactiveFormsModule,\r\n ],\r\n declarations: [PageContainerComponent],\r\n providers: [],\r\n exports: [PageContainerComponent],\r\n})\r\nexport class PageContainerModule {}\r\n","import { NgModule } from \"@angular/core\";\r\nimport { TrimInputDirective } from \"./trim-input.directive\";\r\n\r\n@NgModule({\r\n declarations: [TrimInputDirective],\r\n exports: [TrimInputDirective],\r\n})\r\nexport class TrimInputModule {}\r\n","import { CommonModule } from \"@angular/common\";\r\nimport { NgModule } from \"@angular/core\";\r\nimport { FormsModule } from \"@angular/forms\";\r\nimport { NzGridModule } from \"ng-zorro-antd/grid\";\r\nimport { NzIconModule } from \"ng-zorro-antd/icon\";\r\nimport { NzInputModule } from \"ng-zorro-antd/input\";\r\nimport { NzPopoverModule } from \"ng-zorro-antd/popover\";\r\nimport { PlateInputComponent } from \"./plate-input.component\";\r\nimport { TrimInputModule } from \"../directives/trim-input.module\";\r\n\r\n@NgModule({\r\n imports: [\r\n CommonModule,\r\n FormsModule,\r\n NzGridModule,\r\n NzInputModule,\r\n NzPopoverModule,\r\n NzIconModule,\r\n TrimInputModule,\r\n ],\r\n declarations: [PlateInputComponent],\r\n providers: [],\r\n exports: [PlateInputComponent],\r\n})\r\nexport class PlateInputModule {}\r\n","import { CommonModule } from \"@angular/common\";\r\nimport { HttpClientModule } from \"@angular/common/http\";\r\nimport { NgModule } from \"@angular/core\";\r\nimport { FormsModule, ReactiveFormsModule } from \"@angular/forms\";\r\nimport { RouterModule } from \"@angular/router\";\r\nimport { NzGridModule } from \"ng-zorro-antd/grid\";\r\nimport { TableSearchBarComponent } from \"./table-search-bar.component\";\r\nimport { NzSpaceModule } from \"ng-zorro-antd/space\";\r\n\r\n@NgModule({\r\n imports: [\r\n CommonModule,\r\n FormsModule,\r\n HttpClientModule,\r\n RouterModule,\r\n NzGridModule,\r\n ReactiveFormsModule,\r\n NzSpaceModule,\r\n ],\r\n declarations: [TableSearchBarComponent],\r\n providers: [],\r\n exports: [TableSearchBarComponent],\r\n})\r\nexport class TableSearchBarModule {}\r\n","import { DragDropModule } from \"@angular/cdk/drag-drop\";\r\nimport { CommonModule } from \"@angular/common\";\r\nimport { HttpClientModule } from \"@angular/common/http\";\r\nimport { NgModule } from \"@angular/core\";\r\nimport { FormsModule, ReactiveFormsModule } from \"@angular/forms\";\r\nimport { RouterModule } from \"@angular/router\";\r\nimport { NzButtonModule } from \"ng-zorro-antd/button\";\r\nimport { NzCheckboxModule } from \"ng-zorro-antd/checkbox\";\r\nimport { NzDatePickerModule } from \"ng-zorro-antd/date-picker\";\r\nimport { NzFormModule } from \"ng-zorro-antd/form\";\r\nimport { NzGridModule } from \"ng-zorro-antd/grid\";\r\nimport { NzIconModule } from \"ng-zorro-antd/icon\";\r\nimport { NzInputModule } from \"ng-zorro-antd/input\";\r\nimport { NzModalModule } from \"ng-zorro-antd/modal\";\r\nimport { NzPopoverModule } from \"ng-zorro-antd/popover\";\r\nimport { NzSelectModule } from \"ng-zorro-antd/select\";\r\nimport { NzSpaceModule } from \"ng-zorro-antd/space\";\r\nimport { NzTableModule } from \"ng-zorro-antd/table\";\r\nimport { NzTypographyModule } from \"ng-zorro-antd/typography\";\r\nimport { PageContainerModule } from \"./page-container/page-container.module\";\r\nimport { PlateInputModule } from \"./plate-input/plate-input.module\";\r\nimport { TableSearchBarModule } from \"./table-search-bar/table-search-bar-module\";\r\nimport { ColmunsSettingComponent } from \"./components/colmuns-setting/colmuns-setting.component\";\r\nimport { ProTableComponent } from \"./pro-table.component\";\r\nimport { DynamicSearchFieldComponent } from \"./components/dynamic-search-field/dynamic-search-field.component\";\r\nimport { NzAutocompleteModule } from 'ng-zorro-antd/auto-complete';\r\nimport { NzInputNumberModule } from 'ng-zorro-antd/input-number';\r\nimport { NzToolTipModule } from \"ng-zorro-antd/tooltip\";\r\nimport { PRO_TABLE_COLUMN_REMOTE } from \"./tokens\";\r\n\r\n@NgModule({\r\n imports: [\r\n CommonModule,\r\n FormsModule,\r\n HttpClientModule,\r\n RouterModule,\r\n NzFormModule,\r\n NzSelectModule,\r\n NzSpaceModule,\r\n NzGridModule,\r\n NzInputModule,\r\n ReactiveFormsModule,\r\n NzPopoverModule,\r\n NzIconModule,\r\n NzButtonModule,\r\n PageContainerModule,\r\n TableSearchBarModule,\r\n NzTableModule,\r\n PlateInputModule,\r\n NzDatePickerModule,\r\n NzModalModule,\r\n NzCheckboxModule,\r\n NzTypographyModule,\r\n DragDropModule,\r\n NzCheckboxModule,\r\n NzAutocompleteModule,\r\n NzInputNumberModule,\r\n NzToolTipModule,\r\n ],\r\n declarations: [ProTableComponent, ColmunsSettingComponent, DynamicSearchFieldComponent],\r\n providers: [\r\n {\r\n // 默认不提供远程列服务,宿主可覆盖注入\r\n provide: PRO_TABLE_COLUMN_REMOTE,\r\n useValue: null,\r\n },\r\n ],\r\n exports: [ProTableComponent],\r\n})\r\nexport class ProTableModule {}\r\n","import { lastValueFrom } from 'rxjs';\r\nimport { Injectable } from \"@angular/core\";\r\nimport { HttpClient } from \"@angular/common/http\";\r\nimport { PlatePrefixLoadService, PlatePrefixOption } from \"../tokens\";\r\n\r\n/**\r\n * 默认的车牌前缀加载服务实现\r\n * 使用 HttpClient 调用 API 获取车牌前缀选项\r\n */\r\n@Injectable()\r\nexport class DefaultPlatePrefixLoadService implements PlatePrefixLoadService {\r\n private readonly defaultApiUrl = \"/PlateFirstWord/GetPlateFirstWord\";\r\n\r\n constructor(private http: HttpClient) {}\r\n\r\n loadPrefixOptions(): Promise<PlatePrefixOption[]> {\r\n return lastValueFrom(this.http\r\n .post<string[]>(this.defaultApiUrl, { dictCode: \"PlateFirstWord\" }))\r\n .then((list: string[]) => {\r\n const options: PlatePrefixOption[] = [];\r\n // 添加空选项(与旧版保持一致)\r\n options.push({ label: \"\", value: \"\" });\r\n // 转换数据格式\r\n for (let i = 0; i < list.length; i++) {\r\n options.push({\r\n label: list[i],\r\n value: list[i],\r\n });\r\n }\r\n return options;\r\n })\r\n .catch(() => {\r\n // 发生错误时返回空数组\r\n return [];\r\n });\r\n }\r\n}\r\n\r\n","import { Injectable } from \"@angular/core\";\r\nimport {\r\n AbstractControl,\r\n AbstractControlOptions,\r\n UntypedFormBuilder,\r\n UntypedFormGroup,\r\n ValidatorFn,\r\n} from \"@angular/forms\";\r\nimport { Subscription } from \"rxjs\";\r\nimport { debounceTime, distinctUntilChanged } from \"rxjs/operators\";\r\n\r\n// ==================== 类型定义 ====================\r\n\r\n// 字段错误消息类型(字符串或函数)\r\nexport type FieldErrorMessage =\r\n | string\r\n | ((context: { control: AbstractControl; controlName: string }) => string);\r\n\r\n// 字段错误消息集合\r\nexport type FieldErrorMessages = Record<string, FieldErrorMessage>;\r\n\r\n// 字段配置\r\nexport type FieldConfig = {\r\n value: any;\r\n disabled?: boolean;\r\n validators?: () => ValidatorFn[];\r\n errorMessages?: FieldErrorMessages;\r\n};\r\n\r\n// 嵌套 FormGroup 配置\r\nexport type FormGroupConfig = {\r\n type: \"group\";\r\n fields: FormConfig;\r\n disabled?: boolean;\r\n validators?: () => ValidatorFn[];\r\n errorMessages?: FieldErrorMessages;\r\n};\r\n\r\n// 表单修改类型\r\nexport type FormModifyType = \"create\" | \"update\";\r\n\r\n// 表单配置(支持普通字段和嵌套 FormGroup)\r\nexport type FormConfig = Record<string, FieldConfig | FormGroupConfig>;\r\n\r\n// 监听选项\r\nexport type WatchOptions = {\r\n debounce?: number;\r\n distinctUntilChanged?: boolean;\r\n emitInitial?: boolean;\r\n};\r\n\r\n// 批量添加字段配置选项\r\nexport type AddFieldsConfigOptions = {\r\n emitEvent?: boolean;\r\n updateValueAndValidity?: boolean;\r\n onFieldAdded?: (fieldName: string, success: boolean, error?: string) => void; // 每个字段添加的回调\r\n targetPath?: string; // 目标路径,用于在嵌套 FormGroup 内部添加字段,例如: \"cardBaseInfo\" 或 \"userInfo.addressInfo\"\r\n};\r\n\r\n// 批量添加字段配置结果\r\nexport type AddFieldsConfigResult = {\r\n success: boolean;\r\n added: string[]; // 成功添加的字段名列表\r\n failed: Array<{ fieldName: string; error: string }>; // 失败的字段及错误信息\r\n};\r\n\r\n// 批量删除字段配置选项\r\nexport type RemoveFieldsConfigOptions = {\r\n emitEvent?: boolean;\r\n onFieldRemoved?: (\r\n fieldName: string,\r\n success: boolean,\r\n error?: string\r\n ) => void; // 每个字段删除的回调\r\n};\r\n\r\n// 批量删除字段配置结果\r\nexport type RemoveFieldsConfigResult = {\r\n success: boolean;\r\n removed: string[]; // 成功删除的字段名列表\r\n failed: Array<{ fieldName: string; error: string }>; // 失败的字段及错误信息\r\n};\r\n\r\n// ==================== 服务类 ====================\r\n\r\n@Injectable({ providedIn: \"root\" })\r\nexport class AntdFormService {\r\n // ==================== 公共属性 ====================\r\n formStore: Record<string, UntypedFormGroup> = {};\r\n formModifyType: FormModifyType = \"create\";\r\n\r\n // ==================== 私有属性 ====================\r\n private formRegisterStore: Record<string, boolean> = {};\r\n private labelWidth: string = \"120px\";\r\n private labelAlign: string = \"right\";\r\n private labelObservers: Record<string, MutationObserver> = {};\r\n private errorMessageStore: Record<\r\n string,\r\n Record<string, FieldErrorMessages>\r\n > = {};\r\n private classPrefix = \"ant-form-\";\r\n private readonly defaultErrorMessages: FieldErrorMessages = {\r\n required: \"该字段为必填项\",\r\n minlength: \"输入长度不足\",\r\n maxlength: \"输入长度超限\",\r\n email: \"请输入合法的邮箱地址\",\r\n pattern: \"输入格式不正确\",\r\n };\r\n\r\n // ==================== 构造函数 ====================\r\n constructor(private fb: UntypedFormBuilder) {}\r\n\r\n // ==================== 表单创建和初始化 ====================\r\n\r\n // 判断是否为嵌套 FormGroup 配置\r\n private isFormGroupConfig(\r\n config: FieldConfig | FormGroupConfig\r\n ): config is FormGroupConfig {\r\n return (\r\n typeof config === \"object\" &&\r\n config !== null &&\r\n \"type\" in config &&\r\n config.type === \"group\"\r\n );\r\n }\r\n\r\n // 递归创建嵌套 FormGroup\r\n private createNestedFormGroup(\r\n fields: FormConfig,\r\n disabled?: boolean\r\n ): UntypedFormGroup {\r\n const groupConfig: Record<string, any> = {};\r\n\r\n Object.entries(fields).forEach(([key, fieldConfig]) => {\r\n if (this.isFormGroupConfig(fieldConfig)) {\r\n // 递归创建嵌套的 FormGroup\r\n groupConfig[key] = this.createNestedFormGroup(\r\n fieldConfig.fields,\r\n fieldConfig.disabled ?? disabled\r\n );\r\n } else {\r\n // 创建普通 FormControl\r\n groupConfig[key] = [\r\n {\r\n value: fieldConfig.value,\r\n disabled: fieldConfig.disabled ?? disabled ?? false,\r\n },\r\n fieldConfig.validators?.() ?? [],\r\n ];\r\n }\r\n });\r\n\r\n return this.fb.group(groupConfig);\r\n }\r\n\r\n // 初始化表单\r\n createFormGroup(\r\n name: string,\r\n config: FormConfig,\r\n options?: { labelWidth?: string; labelAlign?: string }\r\n ): UntypedFormGroup {\r\n const groupConfig: Record<string, any> = {};\r\n this.errorMessageStore[name] = {};\r\n\r\n Object.entries(config).forEach(([key, fieldConfig]) => {\r\n if (this.isFormGroupConfig(fieldConfig)) {\r\n // 处理嵌套 FormGroup\r\n const nestedGroup = this.createNestedFormGroup(\r\n fieldConfig.fields,\r\n fieldConfig.disabled\r\n );\r\n groupConfig[key] = nestedGroup;\r\n\r\n // 存储嵌套 FormGroup 的错误消息(如果需要)\r\n if (fieldConfig.errorMessages) {\r\n this.errorMessageStore[name][key] = fieldConfig.errorMessages;\r\n }\r\n } else {\r\n // 处理普通字段\r\n groupConfig[key] = [\r\n {\r\n value: fieldConfig.value,\r\n disabled: fieldConfig.disabled ?? false,\r\n },\r\n fieldConfig.validators?.() ?? [],\r\n ];\r\n if (fieldConfig.errorMessages) {\r\n this.errorMessageStore[name][key] = fieldConfig.errorMessages;\r\n }\r\n }\r\n });\r\n\r\n if (options?.labelWidth) {\r\n this.labelWidth = options.labelWidth;\r\n }\r\n if (options?.labelAlign) {\r\n this.labelAlign = options.labelAlign;\r\n }\r\n this.formStore[name] = this.fb.group(groupConfig);\r\n this.formRegisterStore[name] = true;\r\n this.setCSSVariablesToTarget(name);\r\n return this.formStore[name];\r\n }\r\n\r\n // ==================== 表单操作 ====================\r\n\r\n // 重置表单\r\n resetFormGroup(name: string, value?: any): void {\r\n this.formStore[name]?.reset(value);\r\n }\r\n\r\n // 检测表单是否完成注册\r\n isFormRegistered(name: string): boolean {\r\n return this.formRegisterStore[name] ?? false;\r\n }\r\n\r\n // 销毁对应的表单\r\n destory(names: string[]): void {\r\n names.forEach((name) => {\r\n // 2. 清理错误消息存储\r\n if (this.errorMessageStore[name]) {\r\n delete this.errorMessageStore[name];\r\n }\r\n\r\n // 3. 清理表单注册标记\r\n if (this.formRegisterStore[name]) {\r\n delete this.formRegisterStore[name];\r\n }\r\n\r\n // 4. 清理表单组(Angular 会自动处理 FormGroup 的清理)\r\n if (this.formStore[name]) {\r\n delete this.formStore[name];\r\n }\r\n });\r\n }\r\n\r\n // 根据路径获取嵌套的 FormGroup\r\n private getNestedFormGroup(\r\n formGroup: UntypedFormGroup,\r\n path: string\r\n ): UntypedFormGroup | null {\r\n if (!path || path.trim() === \"\") {\r\n return formGroup;\r\n }\r\n\r\n const pathParts = path.split(\".\").filter((p) => p.trim() !== \"\");\r\n let currentGroup: AbstractControl | null = formGroup;\r\n\r\n for (const part of pathParts) {\r\n if (!currentGroup || !(currentGroup instanceof UntypedFormGroup)) {\r\n return null;\r\n }\r\n currentGroup = currentGroup.get(part);\r\n if (!currentGroup || !(currentGroup instanceof UntypedFormGroup)) {\r\n return null;\r\n }\r\n }\r\n\r\n return currentGroup instanceof UntypedFormGroup ? currentGroup : null;\r\n }\r\n\r\n // 批量添加字段配置\r\n addFieldsConfig(\r\n formName: string,\r\n fieldsConfig: FormConfig,\r\n options?: AddFieldsConfigOptions\r\n ): AddFieldsConfigResult {\r\n const result: AddFieldsConfigResult = {\r\n success: true,\r\n added: [],\r\n failed: [],\r\n };\r\n\r\n // 1. 验证表单是否存在\r\n const rootFormGroup = this.formStore[formName];\r\n if (!rootFormGroup) {\r\n // 如果表单不存在,所有字段都失败\r\n Object.keys(fieldsConfig).forEach((fieldName) => {\r\n const error = `Form \"${formName}\" not found`;\r\n result.failed.push({\r\n fieldName,\r\n error,\r\n });\r\n options?.onFieldAdded?.(fieldName, false, error);\r\n });\r\n result.success = false;\r\n return result;\r\n }\r\n\r\n // 2. 获取目标 FormGroup(支持嵌套路径)\r\n const targetPath = options?.targetPath;\r\n const targetFormGroup = targetPath\r\n ? this.getNestedFormGroup(rootFormGroup, targetPath)\r\n : rootFormGroup;\r\n\r\n if (!targetFormGroup) {\r\n // 如果目标 FormGroup 不存在,所有字段都失败\r\n Object.keys(fieldsConfig).forEach((fieldName) => {\r\n const error = targetPath\r\n ? `Target FormGroup at path \"${targetPath}\" not found`\r\n : `FormGroup not found`;\r\n result.failed.push({\r\n fieldName,\r\n error,\r\n });\r\n options?.onFieldAdded?.(fieldName, false, error);\r\n });\r\n result.success = false;\r\n return result;\r\n }\r\n\r\n // 3. 初始化 errorMessageStore(如果不存在)\r\n if (!this.errorMessageStore[formName]) {\r\n this.errorMessageStore[formName] = {};\r\n }\r\n\r\n // 4. 批量构建控件配置\r\n const controlsToAdd: Record<string, AbstractControl> = {};\r\n const errorMessagesToAdd: Record<string, FieldErrorMessages> = {};\r\n\r\n // 5. 遍历所有字段配置,进行验证和构建\r\n Object.entries(fieldsConfig).forEach(([fieldName, fieldConfig]) => {\r\n try {\r\n // 5.1 检查字段是否已存在\r\n if (targetFormGroup.get(fieldName)) {\r\n const error = `Field \"${fieldName}\" already exists${\r\n targetPath ? ` in \"${targetPath}\"` : \"\"\r\n }`;\r\n result.failed.push({\r\n fieldName,\r\n error,\r\n });\r\n options?.onFieldAdded?.(fieldName, false, error);\r\n return;\r\n }\r\n\r\n // 5.2 创建控件\r\n let control: AbstractControl;\r\n\r\n if (this.isFormGroupConfig(fieldConfig)) {\r\n // 创建嵌套 FormGroup\r\n control = this.createNestedFormGroup(\r\n fieldConfig.fields,\r\n fieldConfig.disabled\r\n );\r\n // 存储嵌套 FormGroup 的错误消息(如果需要)\r\n if (fieldConfig.errorMessages) {\r\n const errorMessageKey = targetPath\r\n ? `${targetPath}.${fieldName}`\r\n : fieldName;\r\n errorMessagesToAdd[errorMessageKey] = fieldConfig.errorMessages;\r\n }\r\n } else {\r\n // 创建普通 FormControl\r\n const controlOptions: AbstractControlOptions = {\r\n validators: fieldConfig.validators?.() ?? [],\r\n };\r\n control = this.fb.control(fieldConfig.value, controlOptions);\r\n // 设置 disabled 状态\r\n if (fieldConfig.disabled) {\r\n control.disable();\r\n }\r\n // 存储错误消息\r\n if (fieldConfig.errorMessages) {\r\n const errorMessageKey = targetPath\r\n ? `${targetPath}.${fieldName}`\r\n : fieldName;\r\n errorMessagesToAdd[errorMessageKey] = fieldConfig.errorMessages;\r\n }\r\n }\r\n\r\n controlsToAdd[fieldName] = control;\r\n\r\n result.added.push(fieldName);\r\n options?.onFieldAdded?.(fieldName, true);\r\n } catch (error: any) {\r\n const errorMessage =\r\n error?.message || error?.toString() || \"Unknown error\";\r\n result.failed.push({\r\n fieldName,\r\n error: errorMessage,\r\n });\r\n options?.onFieldAdded?.(fieldName, false, errorMessage);\r\n }\r\n });\r\n\r\n // 6. 批量添加到目标 FormGroup\r\n if (Object.keys(controlsToAdd).length > 0) {\r\n Object.entries(controlsToAdd).forEach(([fieldName, control]) => {\r\n targetFormGroup.addControl(fieldName, control);\r\n });\r\n\r\n // 7. 批量存储错误消息\r\n Object.entries(errorMessagesToAdd).forEach(([key, messages]) => {\r\n this.errorMessageStore[formName][key] = messages;\r\n });\r\n\r\n // 8. 更新表单验证状态\r\n if (options?.updateValueAndValidity) {\r\n targetFormGroup.updateValueAndValidity({\r\n emitEvent: options?.emitEvent ?? true,\r\n });\r\n }\r\n }\r\n\r\n // 9. 判断整体是否成功\r\n result.success = result.failed.length === 0;\r\n\r\n return result;\r\n }\r\n\r\n // 批量删除字段配置\r\n removeFieldsConfig(\r\n formName: string,\r\n fieldNames: string[],\r\n options?: RemoveFieldsConfigOptions\r\n ): RemoveFieldsConfigResult {\r\n const result: RemoveFieldsConfigResult = {\r\n success: true,\r\n removed: [],\r\n failed: [],\r\n };\r\n\r\n // 1. 验证表单是否存在\r\n const formGroup = this.formStore[formName];\r\n if (!formGroup) {\r\n fieldNames.forEach((fieldName) => {\r\n const error = `Form \"${formName}\" not found`;\r\n result.failed.push({\r\n fieldName,\r\n error,\r\n });\r\n options?.onFieldRemoved?.(fieldName, false, error);\r\n });\r\n result.success = false;\r\n return result;\r\n }\r\n\r\n // 2. 批量收集需要清理的信息\r\n const fieldsToRemove: string[] = [];\r\n const errorMessageKeysToRemove: string[] = [];\r\n\r\n // 3. 验证每个字段并收集信息\r\n fieldNames.forEach((fieldName) => {\r\n const control = formGroup.get(fieldName);\r\n\r\n if (!control) {\r\n const error = `Field \"${fieldName}\" not found`;\r\n result.failed.push({\r\n fieldName,\r\n error,\r\n });\r\n options?.onFieldRemoved?.(fieldName, false, error);\r\n return;\r\n }\r\n\r\n // 收集错误消息键\r\n errorMessageKeysToRemove.push(fieldName);\r\n fieldsToRemove.push(fieldName);\r\n });\r\n\r\n // 4. 批量执行删除操作\r\n try {\r\n // 4.1 从 FormGroup 中移除控件\r\n fieldsToRemove.forEach((fieldName) => {\r\n formGroup.removeControl(fieldName);\r\n result.removed.push(fieldName);\r\n options?.onFieldRemoved?.(fieldName, true);\r\n });\r\n\r\n // 4.2 批量删除错误消息\r\n if (this.errorMessageStore[formName]) {\r\n errorMessageKeysToRemove.forEach((key) => {\r\n delete this.errorMessageStore[formName][key];\r\n });\r\n }\r\n } catch (error: any) {\r\n // 如果批量删除过程中出错,标记为失败\r\n fieldsToRemove.forEach((fieldName) => {\r\n if (!result.removed.includes(fieldName)) {\r\n const errorMessage =\r\n error?.message || error?.toString() || \"Failed to remove field\";\r\n result.failed.push({\r\n fieldName,\r\n error: errorMessage,\r\n });\r\n options?.onFieldRemoved?.(fieldName, false, errorMessage);\r\n }\r\n });\r\n }\r\n\r\n // 5. 判断整体是否成功\r\n result.success = result.failed.length === 0;\r\n\r\n return result;\r\n }\r\n\r\n // 局部赋值\r\n patchFormValues(\r\n name: string,\r\n values: Record<string, any>,\r\n options?: { emitEvent?: boolean }\r\n ): void {\r\n const formGroup = this.formStore[name];\r\n if (!formGroup) {\r\n console.warn(\r\n `[AntdFormService] patchFormValues: form \"${name}\" not found.`\r\n );\r\n return;\r\n }\r\n\r\n formGroup.patchValue(values, {\r\n emitEvent: options?.emitEvent ?? true,\r\n });\r\n }\r\n\r\n // 表单校验(自动过滤内部字段)\r\n validateForm(\r\n name: string,\r\n options?: { emitEvent?: boolean; onlySelf?: boolean }\r\n ): boolean | Record<string, any> {\r\n if (this.formStore[name].valid) {\r\n const rawValue = this.formStore[name].getRawValue();\r\n return this.excludeInternalFields(rawValue);\r\n } else {\r\n // 递归校验所有控件\r\n this.markAllControlsAsDirty(\r\n this.formStore[name],\r\n options?.emitEvent ?? true,\r\n options?.onlySelf ?? false\r\n );\r\n return false;\r\n }\r\n }\r\n\r\n // 递归标记所有无效控件为 dirty\r\n private markAllControlsAsDirty(\r\n control: AbstractControl,\r\n emitEvent: boolean,\r\n onlySelf: boolean\r\n ): void {\r\n if (control.invalid) {\r\n control.markAsDirty();\r\n control.updateValueAndValidity({\r\n emitEvent,\r\n onlySelf,\r\n });\r\n }\r\n\r\n // 如果是 FormGroup,递归处理所有子控件\r\n if (control instanceof UntypedFormGroup) {\r\n Object.values(control.controls).forEach((childControl) => {\r\n this.markAllControlsAsDirty(childControl, emitEvent, onlySelf);\r\n });\r\n }\r\n }\r\n\r\n // ==================== 错误消息相关 ====================\r\n\r\n // 获取字段首条错误提示\r\n getFieldErrorMessage(name: string, controlName: string): string {\r\n const formGroup = this.formStore[name];\r\n if (!formGroup) {\r\n console.warn(\r\n `[AntdFormService] getFieldErrorMessage: form \"${name}\" not found.`\r\n );\r\n return \"\";\r\n }\r\n const control = formGroup.get(controlName);\r\n if (!control) {\r\n console.warn(\r\n `[AntdFormService] getFieldErrorMessage: control \"${controlName}\" not found in form \"${name}\".`\r\n );\r\n return \"\";\r\n }\r\n if (!control.errors) {\r\n return \"\";\r\n }\r\n\r\n // 从 errorMessageStore 获取错误消息配置\r\n const errorMessages = this.errorMessageStore[name]?.[controlName];\r\n const mergedMessages = {\r\n ...this.defaultErrorMessages,\r\n ...(errorMessages ?? {}),\r\n };\r\n\r\n for (const errorKey of Object.keys(control.errors)) {\r\n const message = mergedMessages[errorKey];\r\n if (message) {\r\n // 不再支持函数形式,只返回字符串\r\n return typeof message === \"string\" ? message : \"\";\r\n }\r\n }\r\n return \"\";\r\n }\r\n\r\n // ==================== 监听相关 ====================\r\n\r\n // 监听表单所有字段变更\r\n watchFormChanges<T = any>(\r\n name: string,\r\n handler: (value: T) => void,\r\n options?: WatchOptions\r\n ): Subscription | undefined {\r\n const formGroup = this.formStore[name];\r\n if (!formGroup) {\r\n console.warn(\r\n `[AntdFormService] watchFormChanges: form \"${name}\" not found.`\r\n );\r\n return undefined;\r\n }\r\n\r\n return this.setupValueChangeSubscription(formGroup, handler, options);\r\n }\r\n\r\n // 监听指定字段变更\r\n watchFieldChanges<T = any>(\r\n name: string,\r\n controlName: string,\r\n handler: (value: T) => void,\r\n options?: WatchOptions\r\n ): Subscription | undefined {\r\n const formGroup = this.formStore[name];\r\n if (!formGroup) {\r\n console.warn(\r\n `[AntdFormService] watchFieldChanges: form \"${name}\" not found.`\r\n );\r\n return undefined;\r\n }\r\n\r\n const control = formGroup.get(controlName);\r\n if (!control) {\r\n console.warn(\r\n `[AntdFormService] watchFieldChanges: control \"${controlName}\" not found in form \"${name}\".`\r\n );\r\n return undefined;\r\n }\r\n\r\n return this.setupValueChangeSubscription(control, handler, options);\r\n }\r\n\r\n // ==================== 工具方法 ====================\r\n\r\n // 获取表单类名\r\n getFormClassName(name: string): string {\r\n return `${this.classPrefix}custom-${name} `;\r\n }\r\n\r\n // 设置 CSS 变量到目标元素(支持持久化监听动态添加的元素)\r\n setCSSVariablesToTarget(name: string): void {\r\n const formContainerSelector = `.${this.getFormClassName(name)}`;\r\n const formContainer = document.querySelector(\r\n formContainerSelector\r\n ) as HTMLElement;\r\n\r\n // 如果容器还不存在,可以用 MutationObserver 等待它出现\r\n if (!formContainer) {\r\n const observer = new MutationObserver(() => {\r\n const container = document.querySelector(\r\n formContainerSelector\r\n ) as HTMLElement;\r\n if (container) {\r\n container.style.setProperty(\"--label-width\", this.labelWidth);\r\n container.style.setProperty(\"--label-align\", this.labelAlign);\r\n observer.disconnect();\r\n }\r\n });\r\n\r\n observer.observe(document.body, {\r\n childList: true,\r\n subtree: true,\r\n });\r\n\r\n // 10秒后自动断开,避免内存泄漏\r\n setTimeout(() => observer.disconnect(), 10000);\r\n return;\r\n }\r\n\r\n // 在容器上设置 CSS 变量\r\n formContainer.style.setProperty(\"--label-width\", this.labelWidth);\r\n formContainer.style.setProperty(\"--label-align\", this.labelAlign);\r\n }\r\n\r\n // ==================== 私有方法 ====================\r\n\r\n // 过滤内部字段(递归处理对象和数组)\r\n private excludeInternalFields(value: any): any {\r\n if (value === null || value === undefined) {\r\n return value;\r\n }\r\n\r\n // 特殊处理 Date 对象,直接返回不做转换\r\n if (value instanceof Date) {\r\n return value;\r\n }\r\n\r\n if (Array.isArray(value)) {\r\n return value.map((item) => this.excludeInternalFields(item));\r\n }\r\n\r\n if (typeof value !== \"object\") {\r\n return value;\r\n }\r\n\r\n const filtered: any = {};\r\n Object.entries(value).forEach(([key, val]) => {\r\n // 过滤以 __ 开头的内部字段\r\n if (!key.startsWith(\"__\")) {\r\n filtered[key] = this.excludeInternalFields(val);\r\n }\r\n });\r\n return filtered;\r\n }\r\n\r\n // 设置值变更订阅\r\n private setupValueChangeSubscription<T>(\r\n target: { valueChanges: any; value: any },\r\n handler: (value: T) => void,\r\n options?: WatchOptions\r\n ): Subscription {\r\n let valueChanges$ = target.valueChanges;\r\n\r\n if (options?.debounce != null) {\r\n valueChanges$ = valueChanges$.pipe(debounceTime(options.debounce));\r\n }\r\n\r\n if (options?.distinctUntilChanged !== false) {\r\n valueChanges$ = valueChanges$.pipe(distinctUntilChanged());\r\n }\r\n\r\n if (options?.emitInitial) {\r\n handler(target.value);\r\n }\r\n\r\n return valueChanges$.subscribe(handler);\r\n }\r\n}\r\n","import { Injectable } from \"@angular/core\";\r\nimport { v4 as uuidv4 } from \"uuid\";\r\n\r\n/** 字段校验结果类型 */\r\nexport type ValidationResult = string;\r\n\r\n/** 字段校验方法类型 */\r\nexport type FieldValidator = (\r\n value: any,\r\n row: ArrayFormRow,\r\n fieldName: string\r\n) => ValidationResult;\r\n\r\n/** 字段配置接口 */\r\nexport interface FieldConfig {\r\n name: string;\r\n validator?: FieldValidator;\r\n}\r\n\r\n/** 数组表单行数据接口 */\r\nexport interface ArrayFormRow {\r\n uid?: string;\r\n isEdit?: boolean;\r\n isAdd?: boolean;\r\n disabled?: boolean;\r\n [key: string]: any;\r\n}\r\n\r\n/** 数组表单配置接口 */\r\nexport interface ArrayFormConfig {\r\n fields: FieldConfig[];\r\n defaultValues?: Record<string, any>;\r\n // 自动更新目标对象和属性名,用于触发 Angular 变化检测\r\n targetObject?: Record<string, any>;\r\n arrayPropertyName?: string;\r\n}\r\n\r\n/** 表单存储项接口 */\r\nexport interface ArrayFormStoreItem {\r\n data: ArrayFormRow[];\r\n config: ArrayFormConfig;\r\n validationResults?: Record<string, Record<string, ValidationResult>>;\r\n /** 初始值快照,用于自动检测字段是否被修改 */\r\n initialSnapshot: Record<string, Record<string, any>>;\r\n /** 编辑时快照,用于取消编辑时恢复数据 */\r\n editingSnapshot: Record<string, Record<string, any>>;\r\n /** 是否标记所有字段为已触碰(整个表单提交时设为 true) */\r\n allTouched: boolean;\r\n /** 每行的 touched 状态(单行保存时设为 true) */\r\n rowTouched: Record<string, boolean>;\r\n}\r\n\r\n/** 表单存储接口 */\r\nexport interface ArrayFormStore {\r\n [formName: string]: ArrayFormStoreItem;\r\n}\r\n\r\n/** 数组型数据收集基础服务 */\r\n@Injectable({\r\n providedIn: \"root\",\r\n})\r\nexport class ArrayFormService {\r\n private formStore: ArrayFormStore = {};\r\n\r\n constructor() {}\r\n\r\n /** 深度克隆值 */\r\n private cloneValue(value: any): any {\r\n if (value === null || value === undefined) {\r\n return value;\r\n }\r\n if (Array.isArray(value)) {\r\n return value.map((item) => this.cloneValue(item));\r\n }\r\n if (typeof value === \"object\") {\r\n const cloned: Record<string, any> = {};\r\n for (const key of Object.keys(value)) {\r\n cloned[key] = this.cloneValue(value[key]);\r\n }\r\n return cloned;\r\n }\r\n return value;\r\n }\r\n\r\n /** 比较两个值是否相等 */\r\n private isEqual(a: any, b: any): boolean {\r\n if (a === b) return true;\r\n if (a === null || b === null) return a === b;\r\n if (a === undefined || b === undefined) return a === b;\r\n if (typeof a !== typeof b) return false;\r\n\r\n if (Array.isArray(a) && Array.isArray(b)) {\r\n if (a.length !== b.length) return false;\r\n return a.every((item, index) => this.isEqual(item, b[index]));\r\n }\r\n\r\n if (typeof a === \"object\" && typeof b === \"object\") {\r\n const keysA = Object.keys(a);\r\n const keysB = Object.keys(b);\r\n if (keysA.length !== keysB.length) return false;\r\n return keysA.every((key) => this.isEqual(a[key], b[key]));\r\n }\r\n\r\n return false;\r\n }\r\n\r\n /** 创建行的初始值快照 */\r\n private createRowSnapshot(\r\n row: ArrayFormRow,\r\n fields: FieldConfig[]\r\n ): Record<string, any> {\r\n const snapshot: Record<string, any> = {};\r\n fields.forEach((field) => {\r\n snapshot[field.name] = this.cloneValue(row[field.name]);\r\n });\r\n return snapshot;\r\n }\r\n\r\n /** 初始化数组数据,添加 uid 和 isEdit 字段 */\r\n private initializeData(data: any[]): ArrayFormRow[] {\r\n return data.map((item) => this.enrichRow(item));\r\n }\r\n\r\n /** 为单行数据添加 uid 和 isEdit 字段 */\r\n private enrichRow(row: any): ArrayFormRow {\r\n return {\r\n ...row,\r\n uid: row.uid || uuidv4(),\r\n isEdit: row.isEdit !== undefined ? row.isEdit : false,\r\n disabled: row.disabled !== undefined ? row.disabled : false,\r\n };\r\n }\r\n\r\n /** 新增一行数据 */\r\n private addRow(\r\n data: ArrayFormRow[],\r\n defaultValues?: Record<string, any>\r\n ): ArrayFormRow {\r\n const newRow: ArrayFormRow = {\r\n ...defaultValues,\r\n uid: uuidv4(),\r\n isEdit: true,\r\n isAdd: true,\r\n disabled: false,\r\n };\r\n data.push(newRow);\r\n return newRow;\r\n }\r\n\r\n /** 校验单个字段 */\r\n private validateField(\r\n row: ArrayFormRow,\r\n fieldName: string,\r\n config: ArrayFormConfig\r\n ): ValidationResult {\r\n const fieldConfig = config.fields.find((f) => f.name === fieldName);\r\n\r\n if (!fieldConfig) {\r\n return \"\";\r\n }\r\n\r\n if (fieldConfig.validator) {\r\n return fieldConfig.validator(row[fieldName], row, fieldName);\r\n }\r\n\r\n return \"\";\r\n }\r\n\r\n /** 校验整行数据 */\r\n private validateRow(\r\n row: ArrayFormRow,\r\n config: ArrayFormConfig\r\n ): Record<string, ValidationResult> {\r\n const results: Record<string, ValidationResult> = {};\r\n\r\n config.fields.forEach((fieldConfig) => {\r\n results[fieldConfig.name] = this.validateField(\r\n row,\r\n fieldConfig.name,\r\n config\r\n );\r\n });\r\n\r\n return results;\r\n }\r\n\r\n /** 校验整个数组 */\r\n private validateData(\r\n data: ArrayFormRow[],\r\n config: ArrayFormConfig\r\n ): Record<string, Record<string, ValidationResult>> {\r\n const results: Record<string, Record<string, ValidationResult>> = {};\r\n\r\n data.forEach((row) => {\r\n results[row.uid] = this.validateRow(row, config);\r\n });\r\n\r\n return results;\r\n }\r\n\r\n /** 注册表单到存储 */\r\n registerForm(\r\n formName: string,\r\n data: ArrayFormRow[],\r\n config: ArrayFormConfig\r\n ): void {\r\n const initializedData = this.initializeData(data);\r\n\r\n // 记录初始值快照\r\n const initialSnapshot: Record<string, Record<string, any>> = {};\r\n initializedData.forEach((row) => {\r\n initialSnapshot[row.uid!] = this.createRowSnapshot(row, config.fields);\r\n });\r\n\r\n this.formStore[formName] = {\r\n data: initializedData,\r\n config,\r\n validationResults: {},\r\n initialSnapshot,\r\n editingSnapshot: {},\r\n allTouched: false,\r\n rowTouched: {},\r\n };\r\n // 如果配置了自动更新,立即更新一次\r\n this.autoUpdateArrayReference(formName);\r\n }\r\n\r\n /** 从存储中获取表单 */\r\n getForm(formName: string): ArrayFormStoreItem | undefined {\r\n return this.formStore[formName];\r\n }\r\n\r\n /** 从存储中获取表单数据 */\r\n getFormData(\r\n formName: string\r\n ):\r\n | Array<Pick<ArrayFormRow, \"uid\" | \"isEdit\" | \"isAdd\" | keyof ArrayFormRow>>\r\n | undefined {\r\n const form = this.formStore[formName];\r\n if (!form) {\r\n return undefined;\r\n }\r\n return form.data.map((item) => {\r\n delete item.isEdit;\r\n delete item.isAdd;\r\n delete item.uid;\r\n delete item.disabled;\r\n return item;\r\n });\r\n }\r\n\r\n /** 向表单添加行 */\r\n addRowToForm(\r\n formName: string,\r\n defaultValues?: Record<string, any>\r\n ): ArrayFormRow | undefined {\r\n const form = this.formStore[formName];\r\n if (!form) {\r\n return undefined;\r\n }\r\n const newRow = this.addRow(form.data, defaultValues);\r\n // 为新行记录初始值快照\r\n form.initialSnapshot[newRow.uid!] = this.createRowSnapshot(\r\n newRow,\r\n form.config.fields\r\n );\r\n // 自动更新外部数组引用\r\n this.autoUpdateArrayReference(formName);\r\n return newRow;\r\n }\r\n\r\n /** 校验表单,自动标记所有字段为已触碰 */\r\n validateForm(formName: string): boolean {\r\n const form = this.formStore[formName];\r\n if (!form) {\r\n return true;\r\n }\r\n // 标记所有字段为已触碰\r\n form.allTouched = true;\r\n const results = this.validateData(form.data, form.config);\r\n form.validationResults = results;\r\n\r\n // 检查是否有任何错误\r\n for (const uid of Object.keys(results)) {\r\n for (const fieldName of Object.keys(results[uid])) {\r\n if (results[uid][fieldName]) {\r\n return false;\r\n }\r\n }\r\n }\r\n return true;\r\n }\r\n\r\n /** 开启编辑模式,保存快照用于取消恢复 */\r\n enableEdit(formName: string, row: ArrayFormRow): void {\r\n const form = this.formStore[formName];\r\n if (form && row.uid) {\r\n // 保存编辑前的快照\r\n form.editingSnapshot[row.uid] = this.createRowSnapshot(\r\n row,\r\n form.config.fields\r\n );\r\n }\r\n row.isEdit = true;\r\n }\r\n\r\n /** 取消编辑,恢复到编辑前的数据 */\r\n disableEdit(formName: string, row: ArrayFormRow): void {\r\n const form = this.formStore[formName];\r\n if (form && row.uid && form.editingSnapshot[row.uid]) {\r\n // 恢复编辑前的数据\r\n const snapshot = form.editingSnapshot[row.uid];\r\n form.config.fields.forEach((field) => {\r\n row[field.name] = this.cloneValue(snapshot[field.name]);\r\n });\r\n // 更新初始快照为恢复后的值,消除 touched 状态\r\n form.initialSnapshot[row.uid] = this.cloneValue(snapshot);\r\n // 清理编辑快照和 touched 状态\r\n delete form.editingSnapshot[row.uid];\r\n delete form.rowTouched[row.uid];\r\n // 清理该行的校验结果\r\n if (form.validationResults) {\r\n delete form.validationResults[row.uid];\r\n }\r\n }\r\n row.isEdit = false;\r\n }\r\n\r\n /** 确认编辑,保留修改后的数据 */\r\n confirmEdit(formName: string, row: ArrayFormRow): void {\r\n const form = this.formStore[formName];\r\n if (form && row.uid) {\r\n // 清理编辑快照(保留当前数据)\r\n if (form.editingSnapshot[row.uid]) {\r\n delete form.editingSnapshot[row.uid];\r\n }\r\n // 更新初始快照为当前值(用于后续 touched 检测)\r\n form.initialSnapshot[row.uid] = this.createRowSnapshot(\r\n row,\r\n form.config.fields\r\n );\r\n // 清除 touched 状态,基于新的 initialSnapshot 重新判断\r\n delete form.rowTouched[row.uid];\r\n }\r\n row.isEdit = false;\r\n row.isAdd = false;\r\n }\r\n\r\n /** 从表单中删除指定行 */\r\n deleteRowFromForm(formName: string, row: ArrayFormRow): boolean {\r\n const form = this.formStore[formName];\r\n if (!form || !row.uid) {\r\n return false;\r\n }\r\n const index = form.data.findIndex((item) => item.uid === row.uid);\r\n if (index === -1) {\r\n return false;\r\n }\r\n form.data.splice(index, 1);\r\n // 清理该行的所有快照、touched 状态和校验结果\r\n delete form.initialSnapshot[row.uid];\r\n delete form.editingSnapshot[row.uid];\r\n delete form.rowTouched[row.uid];\r\n if (form.validationResults) {\r\n delete form.validationResults[row.uid];\r\n }\r\n // 自动更新外部数组引用\r\n this.autoUpdateArrayReference(formName);\r\n return true;\r\n }\r\n\r\n /** 检测字段是否已被触碰 */\r\n private isFieldTouched(\r\n form: ArrayFormStoreItem,\r\n row: ArrayFormRow,\r\n fieldName: string\r\n ): boolean {\r\n // 整个表单已 touched(整个表单提交时)\r\n if (form.allTouched) {\r\n return true;\r\n }\r\n // 当前行已 touched(单行保存时)\r\n if (form.rowTouched[row.uid!]) {\r\n return true;\r\n }\r\n // 检测当前值与初始值是否不同\r\n const initialValue = form.initialSnapshot[row.uid!]?.[fieldName];\r\n const currentValue = row[fieldName];\r\n return !this.isEqual(initialValue, currentValue);\r\n }\r\n\r\n /** 校验指定行的指定字段,未修改时不显示校验状态 */\r\n validateFieldInRow(\r\n formName: string,\r\n row: ArrayFormRow,\r\n fieldName: string\r\n ): \"success\" | \"error\" | \"\" {\r\n const form = this.formStore[formName];\r\n if (!form) {\r\n return \"\";\r\n }\r\n\r\n const fieldConfig = form.config.fields.find((f) => f.name === fieldName);\r\n if (!fieldConfig) {\r\n return \"\";\r\n }\r\n\r\n // 执行校验\r\n let result: ValidationResult = \"\";\r\n if (fieldConfig.validator) {\r\n result = fieldConfig.validator(row[fieldName], row, fieldName);\r\n }\r\n\r\n // 更新校验结果存储\r\n if (!form.validationResults) {\r\n form.validationResults = {};\r\n }\r\n if (!form.validationResults[row.uid!]) {\r\n form.validationResults[row.uid!] = {};\r\n }\r\n form.validationResults[row.uid!][fieldName] = result;\r\n\r\n // 如果字段未被触碰,不显示校验状态\r\n if (!this.isFieldTouched(form, row, fieldName)) {\r\n return \"\";\r\n }\r\n\r\n return result ? \"error\" : \"success\";\r\n }\r\n\r\n /** 获取指定行指定字段的校验错误信息 */\r\n getFieldErrorMessage(\r\n formName: string,\r\n row: ArrayFormRow,\r\n fieldName: string\r\n ): string {\r\n const form = this.formStore[formName];\r\n if (!form || !row.uid) {\r\n return \"\";\r\n }\r\n // 如果字段未被触碰,不显示错误信息\r\n if (!this.isFieldTouched(form, row, fieldName)) {\r\n return \"\";\r\n }\r\n return form.validationResults?.[row.uid]?.[fieldName] || \"\";\r\n }\r\n\r\n /** 校验指定行的所有字段 */\r\n validateRowAllFields(formName: string, row: ArrayFormRow): boolean {\r\n const form = this.formStore[formName];\r\n if (!form || !row.uid) {\r\n return true;\r\n }\r\n\r\n // 更新初始快照为当前值\r\n form.initialSnapshot[row.uid] = this.createRowSnapshot(\r\n row,\r\n form.config.fields\r\n );\r\n // 标记当前行为 touched(只影响当前行,不影响其他行)\r\n form.rowTouched[row.uid] = true;\r\n\r\n let hasError = false;\r\n\r\n form.config.fields.forEach((fieldConfig) => {\r\n const result = this.validateFieldInRow(formName, row, fieldConfig.name);\r\n if (result === \"error\") {\r\n hasError = true;\r\n }\r\n });\r\n\r\n return !hasError;\r\n }\r\n\r\n /** 自动更新外部数组引用 */\r\n private autoUpdateArrayReference(formName: string): void {\r\n const form = this.formStore[formName];\r\n if (!form || !form.config.targetObject || !form.config.arrayPropertyName) {\r\n return;\r\n }\r\n const newArray = form.data ? [...form.data] : [];\r\n // 更新目标对象的数组属性为新数组引用\r\n (form.config.targetObject as any)[form.config.arrayPropertyName] = newArray;\r\n }\r\n\r\n /** 是否有正在编辑的行 */\r\n hasEditingRow(formName: string): boolean {\r\n const form = this.formStore[formName];\r\n if (!form) {\r\n return false;\r\n }\r\n return form.data.some((item) => item.isEdit);\r\n }\r\n\r\n // 销毁对应的表单\r\n destory(names: string[]): void {\r\n names.forEach((name) => {\r\n if (this.formStore[name]) {\r\n // 清理表单数据\r\n delete this.formStore[name];\r\n }\r\n });\r\n }\r\n\r\n // 重置表单数组\r\n resetFormArray(name: string): void {\r\n const form = this.formStore[name];\r\n if (!form) {\r\n return;\r\n }\r\n\r\n // 1. 清空数据数组\r\n form.data = [];\r\n\r\n // 2. 清理所有快照\r\n form.initialSnapshot = {};\r\n form.editingSnapshot = {};\r\n\r\n // 3. 清理校验结果\r\n form.validationResults = {};\r\n\r\n // 4. 重置 touched 状态\r\n form.allTouched = false;\r\n form.rowTouched = {};\r\n\r\n // 5. 如果配置了自动更新,更新外部数组引用\r\n this.autoUpdateArrayReference(name);\r\n }\r\n\r\n /** 批量设置表单数据(用于回填数据) */\r\n setFormData(formName: string, data: any[]): void {\r\n const form = this.formStore[formName];\r\n if (!form) {\r\n return;\r\n }\r\n\r\n // 1. 初始化数据(添加 uid、isEdit 等字段)\r\n const initializedData = this.initializeData(data);\r\n\r\n // 2. 更新表单数据\r\n form.data = initializedData;\r\n\r\n // 3. 重新创建初始值快照\r\n form.initialSnapshot = {};\r\n initializedData.forEach((row) => {\r\n form.initialSnapshot[row.uid!] = this.createRowSnapshot(\r\n row,\r\n form.config.fields\r\n );\r\n });\r\n\r\n // 4. 清理编辑快照和校验结果\r\n form.editingSnapshot = {};\r\n form.validationResults = {};\r\n\r\n // 5. 重置 touched 状态\r\n form.allTouched = false;\r\n form.rowTouched = {};\r\n\r\n // 6. 如果配置了自动更新,更新外部数组引用\r\n this.autoUpdateArrayReference(formName);\r\n }\r\n}\r\n","/**\r\n * 自动检测 ant-modal-body 的宽度,并添加 narrow-width 类名\r\n * 当宽度小于 500px 时添加类名,否则移除\r\n */\r\nexport function initModalWidthDetector() {\r\n if (typeof window === 'undefined' || typeof document === 'undefined') {\r\n return;\r\n }\r\n\r\n // 检查单个元素的宽度\r\n function checkElementWidth(element: HTMLElement) {\r\n const width = element.offsetWidth;\r\n if (width < 500) {\r\n element.classList.add('narrow-width');\r\n } else {\r\n element.classList.remove('narrow-width');\r\n }\r\n }\r\n\r\n // 使用 MutationObserver 监听 DOM 变化\r\n const observer = new MutationObserver((mutations) => {\r\n mutations.forEach((mutation) => {\r\n mutation.addedNodes.forEach((node) => {\r\n if (node.nodeType === Node.ELEMENT_NODE) {\r\n const element = node as HTMLElement;\r\n \r\n // 检查是否是 modal body\r\n if (element.classList?.contains('ant-modal-body')) {\r\n checkElementWidth(element);\r\n observeResize(element);\r\n }\r\n \r\n // 检查子元素中是否有 modal body\r\n const modalBodies = element.querySelectorAll?.('.ant-modal-body');\r\n modalBodies?.forEach((modalBody) => {\r\n checkElementWidth(modalBody as HTMLElement);\r\n observeResize(modalBody as HTMLElement);\r\n });\r\n }\r\n });\r\n });\r\n });\r\n\r\n // 使用 ResizeObserver 监听元素尺寸变化\r\n const resizeObserverMap = new WeakMap<HTMLElement, any>();\r\n \r\n function observeResize(element: HTMLElement) {\r\n if (resizeObserverMap.has(element)) {\r\n return;\r\n }\r\n\r\n if (typeof (window as any).ResizeObserver !== 'undefined') {\r\n const resizeObserver = new (window as any).ResizeObserver(() => {\r\n checkElementWidth(element);\r\n });\r\n resizeObserver.observe(element);\r\n resizeObserverMap.set(element, resizeObserver);\r\n }\r\n }\r\n\r\n // 开始监听 DOM 变化\r\n observer.observe(document.body, {\r\n childList: true,\r\n subtree: true,\r\n });\r\n\r\n // 检查已存在的 modal body\r\n document.querySelectorAll('.ant-modal-body').forEach((element) => {\r\n checkElementWidth(element as HTMLElement);\r\n observeResize(element as HTMLElement);\r\n });\r\n}\r\n","/**\r\n * 自动检测 nz-select 最近的父元素宽度,并设置给 nz-select\r\n * 当父元素宽度变化时,自动更新 nz-select 的宽度\r\n */\r\nexport function initSelectWidthDetector() {\r\n if (typeof window === 'undefined' || typeof document === 'undefined') {\r\n return;\r\n }\r\n\r\n // 获取最近的父元素(排除自身)\r\n function getClosestParent(element: HTMLElement): HTMLElement | null {\r\n let parent = element.parentElement;\r\n while (parent && parent !== document.body) {\r\n // 如果父元素有明确的宽度(非 auto),则返回该父元素\r\n const computedStyle = window.getComputedStyle(parent);\r\n const width = computedStyle.width;\r\n if (width && width !== 'auto' && width !== '0px') {\r\n return parent;\r\n }\r\n parent = parent.parentElement;\r\n }\r\n // 如果没找到有明确宽度的父元素,返回直接父元素\r\n return element.parentElement;\r\n }\r\n\r\n // 找到实际的 select 元素(nz-select 组件渲染后的 DOM 元素)\r\n function findActualSelectElement(element: HTMLElement): HTMLElement | null {\r\n // 如果已经是 ant-select 元素,直接返回\r\n if (element.classList?.contains('ant-select')) {\r\n return element;\r\n }\r\n \r\n // 如果是 nz-select 组件标签,查找其渲染后的 ant-select 元素\r\n if (element.tagName === 'NZ-SELECT') {\r\n const actualSelect = element.querySelector('.ant-select') as HTMLElement;\r\n return actualSelect || element;\r\n }\r\n \r\n // 在子元素中查找 ant-select\r\n const actualSelect = element.querySelector('.ant-select') as HTMLElement;\r\n return actualSelect || element;\r\n }\r\n\r\n // 获取原始的 nz-select 组件元素(用于读取 custom-maxWidth 属性)\r\n function getOriginalSelectElement(element: HTMLElement): HTMLElement | null {\r\n // 如果已经是 nz-select 组件标签,直接返回\r\n if (element.tagName === 'NZ-SELECT') {\r\n return element;\r\n }\r\n \r\n // 向上查找 nz-select 组件标签\r\n let parent = element.parentElement;\r\n while (parent && parent !== document.body) {\r\n if (parent.tagName === 'NZ-SELECT') {\r\n return parent;\r\n }\r\n parent = parent.parentElement;\r\n }\r\n \r\n return null;\r\n }\r\n\r\n // 检查并设置 nz-select 的宽度\r\n function setSelectWidth(selectElement: HTMLElement) {\r\n const actualSelect = findActualSelectElement(selectElement);\r\n if (!actualSelect) {\r\n return;\r\n }\r\n\r\n // 检查是否有自定义最大宽度属性\r\n const originalSelect = getOriginalSelectElement(selectElement);\r\n if (originalSelect) {\r\n const customMaxWidth = originalSelect.getAttribute('custom-maxWidth');\r\n if (customMaxWidth) {\r\n // 使用自定义最大宽度\r\n actualSelect.style.maxWidth = customMaxWidth;\r\n return;\r\n }\r\n }\r\n\r\n // 如果没有自定义宽度,使用计算出的父元素宽度\r\n const parent = getClosestParent(actualSelect);\r\n if (parent) {\r\n const parentWidth = parent.offsetWidth;\r\n if (parentWidth > 0) {\r\n // 设置宽度,可以减去一些 padding/margin 来避免溢出\r\n // 这里直接使用父元素宽度,如果需要可以调整\r\n actualSelect.style.maxWidth = `${parentWidth}px`;\r\n }\r\n }\r\n }\r\n\r\n // 使用 MutationObserver 监听 DOM 变化\r\n const observer = new MutationObserver((mutations) => {\r\n mutations.forEach((mutation) => {\r\n mutation.addedNodes.forEach((node) => {\r\n if (node.nodeType === Node.ELEMENT_NODE) {\r\n const element = node as HTMLElement;\r\n \r\n // 检查是否是 nz-select 组件标签\r\n if (element.tagName === 'NZ-SELECT') {\r\n // 等待 Angular 组件渲染完成\r\n setTimeout(() => {\r\n setSelectWidth(element);\r\n observeResize(element);\r\n }, 100);\r\n }\r\n \r\n // 检查是否是 ant-select 元素(nz-select 渲染后的实际元素)\r\n if (element.classList?.contains('ant-select')) {\r\n setTimeout(() => {\r\n setSelectWidth(element);\r\n observeResize(element);\r\n }, 0);\r\n }\r\n \r\n // 检查子元素中是否有 nz-select 或 ant-select\r\n const nzSelects = element.querySelectorAll?.('nz-select');\r\n nzSelects?.forEach((select) => {\r\n setTimeout(() => {\r\n setSelectWidth(select as HTMLElement);\r\n observeResize(select as HTMLElement);\r\n }, 100);\r\n });\r\n \r\n const antSelects = element.querySelectorAll?.('.ant-select');\r\n antSelects?.forEach((select) => {\r\n setTimeout(() => {\r\n setSelectWidth(select as HTMLElement);\r\n observeResize(select as HTMLElement);\r\n }, 0);\r\n });\r\n }\r\n });\r\n });\r\n });\r\n\r\n // 使用 ResizeObserver 监听父元素尺寸变化\r\n const resizeObserverMap = new WeakMap<HTMLElement, any>();\r\n \r\n function observeResize(selectElement: HTMLElement) {\r\n if (resizeObserverMap.has(selectElement)) {\r\n return;\r\n }\r\n\r\n if (typeof (window as any).ResizeObserver !== 'undefined') {\r\n const actualSelect = findActualSelectElement(selectElement);\r\n if (!actualSelect) {\r\n return;\r\n }\r\n\r\n const parent = getClosestParent(actualSelect);\r\n if (!parent) {\r\n return;\r\n }\r\n\r\n const resizeObserver = new (window as any).ResizeObserver(() => {\r\n setSelectWidth(selectElement);\r\n });\r\n resizeObserver.observe(parent);\r\n resizeObserverMap.set(selectElement, resizeObserver);\r\n }\r\n }\r\n\r\n // 开始监听 DOM 变化\r\n observer.observe(document.body, {\r\n childList: true,\r\n subtree: true,\r\n });\r\n\r\n // 检查已存在的 nz-select 和 ant-select\r\n const checkExistingSelects = () => {\r\n // 检查 nz-select 组件标签\r\n document.querySelectorAll('nz-select').forEach((element) => {\r\n setTimeout(() => {\r\n setSelectWidth(element as HTMLElement);\r\n observeResize(element as HTMLElement);\r\n }, 100);\r\n });\r\n \r\n // 检查 ant-select 元素\r\n document.querySelectorAll('.ant-select').forEach((element) => {\r\n setTimeout(() => {\r\n setSelectWidth(element as HTMLElement);\r\n observeResize(element as HTMLElement);\r\n }, 0);\r\n });\r\n };\r\n\r\n // 延迟执行,确保 DOM 已完全加载\r\n if (document.readyState === 'loading') {\r\n document.addEventListener('DOMContentLoaded', checkExistingSelects);\r\n } else {\r\n checkExistingSelects();\r\n }\r\n}\r\n","/*\r\n * Public API Surface of pro-table\r\n */\r\n\r\nexport * from \"./lib/pro-table.component\";\r\nexport * from \"./lib/pro-table.module\";\r\nexport * from \"./lib/constants\";\r\nexport * from \"./lib/type\";\r\nexport * from \"./lib/tokens\";\r\nexport * from \"./lib/plate-input/plate-prefix-load.service\";\r\nexport * from \"./lib/plate-input/plate-input.component\";\r\nexport * from \"./lib/plate-input/plate-input.module\";\r\nexport * from \"./lib/page-container/page-container.component\";\r\nexport * from \"./lib/page-container/page-container.module\";\r\nexport * from \"./lib/table-search-bar/table-search-bar.component\";\r\nexport * from \"./lib/table-search-bar/table-search-bar-module\";\r\nexport * from \"./lib/directives/trim-input.directive\";\r\nexport * from \"./lib/directives/trim-input.module\";\r\n\r\n// Export antd-form service and types\r\nexport { AntdFormService } from \"./lib/page-public/antd-form\";\r\nexport type {\r\n FieldErrorMessage,\r\n FieldErrorMessages,\r\n FieldConfig,\r\n FormModifyType,\r\n FormConfig,\r\n WatchOptions,\r\n AddFieldsConfigOptions,\r\n AddFieldsConfigResult,\r\n RemoveFieldsConfigOptions,\r\n RemoveFieldsConfigResult,\r\n} from \"./lib/page-public/antd-form\";\r\n\r\n// Export array-form service and types\r\nexport { ArrayFormService } from \"./lib/page-public/array-form\";\r\nexport type {\r\n ValidationResult,\r\n FieldValidator,\r\n FieldConfig as ArrayFieldConfig,\r\n ArrayFormRow,\r\n ArrayFormConfig,\r\n ArrayFormStoreItem,\r\n ArrayFormStore,\r\n} from \"./lib/page-public/array-form\";\r\n\r\n// Export modal width detector\r\nexport { initModalWidthDetector } from \"./lib/utils/modal-width-detector\";\r\nexport { initSelectWidthDetector } from \"./lib/utils/select-width-detector\";\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i2","i1","i3","i6.TrimInputDirective","i4","i5","i6","i7","i8","i9","i11.PageContainerComponent","i12.TableSearchBarComponent","i14.PlateInputComponent","i16","i20.ColmunsSettingComponent","i21.DynamicSearchFieldComponent","uuidv4"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAYa,MAAA,uBAAuB,GAUhC;AACF,IAAA,KAAK,EAAE;AACL,QAAA,IAAI,EAAE,EAAE;AACR,QAAA,WAAW,EAAE,KAAK;AAClB,QAAA,QAAQ,EAAE,KAAK;AACf,QAAA,KAAK,EAAE,EAAE;AACT,QAAA,KAAK,EAAE,EAAE;AACV,KAAA;AACD,IAAA,MAAM,EAAE;AACN,QAAA,IAAI,EAAE,EAAE;AACR,QAAA,OAAO,EAAE,EAAE;AACX,QAAA,QAAQ,EAAE,KAAK;AACf,QAAA,KAAK,EAAE,EAAE;AACT,QAAA,KAAK,EAAE,EAAE;AACT,QAAA,UAAU,EAAE,IAAI;AAChB,QAAA,WAAW,EAAE,KAAK;AACnB,KAAA;AACD,IAAA,cAAc,EAAE;AACd,QAAA,IAAI,EAAE,EAAE;AACR,QAAA,OAAO,EAAE,EAAE;AACX,QAAA,QAAQ,EAAE,KAAK;AACf,QAAA,KAAK,EAAE,EAAE;AACT,QAAA,KAAK,EAAE,EAAE;AACT,QAAA,UAAU,EAAE,IAAI;AAChB,QAAA,WAAW,EAAE,KAAK;AACnB,KAAA;AACD,IAAA,UAAU,EAAE;AACV,QAAA,IAAI,EAAE,EAAE;AACR,QAAA,KAAK,EAAE,EAAE;AACT,QAAA,KAAK,EAAE,EAAE;AACV,KAAA;AACD,IAAA,QAAQ,EAAE;AACR,QAAA,IAAI,EAAE,EAAE;AACR,QAAA,OAAO,EAAE,EAAE;AACX,QAAA,QAAQ,EAAE,KAAK;AACf,QAAA,KAAK,EAAE,EAAE;AACT,QAAA,KAAK,EAAE,EAAE;AACT,QAAA,OAAO,EAAE,KAAK;AACf,KAAA;AACD,IAAA,IAAI,EAAE;AACJ,QAAA,IAAI,EAAE,EAAE;AACR,QAAA,QAAQ,EAAE,KAAK;AACf,QAAA,KAAK,EAAE,EAAE;AACT,QAAA,KAAK,EAAE,EAAE;AACT,QAAA,UAAU,EAAE,IAAI;AAChB,QAAA,WAAW,EAAE,KAAK;AAClB,QAAA,QAAQ,EAAE,KAAK;AACf,QAAA,MAAM,EAAE,YAAY;AACpB,QAAA,IAAI,EAAE,MAAM;AACb,KAAA;AACD,IAAA,YAAY,EAAE;AACZ,QAAA,IAAI,EAAE,EAAE;AACR,QAAA,QAAQ,EAAE,KAAK;AACf,QAAA,WAAW,EAAE,KAAK;AAClB,QAAA,KAAK,EAAE,EAAE;AACT,QAAA,KAAK,EAAE,EAAE;AACT,QAAA,UAAU,EAAE,MAAM,EAAE;AACpB,QAAA,QAAQ,EAAE,KAAK;AACf,QAAA,wBAAwB,EAAE,KAAK;AAC/B,QAAA,cAAc,EAAE,KAAK;AACtB,KAAA;AACD,IAAA,WAAW,EAAE;AACX,QAAA,IAAI,EAAE,EAAE;AACR,QAAA,QAAQ,EAAE,KAAK;AACf,QAAA,KAAK,EAAE,EAAE;AACT,QAAA,KAAK,EAAE,EAAE;AACT,QAAA,WAAW,EAAE,KAAK;AAClB,QAAA,GAAG,EAAE,CAAC;AACN,QAAA,GAAG,EAAE,GAAG;AACR,QAAA,SAAS,EAAE,CAAC;QACZ,gBAAgB,EAAE,CAAC,KAAa,KAAK,CAAA,EAAG,KAAK,CAAE,CAAA;AAC/C,QAAA,aAAa,EAAE,CAAC,KAAa,KAAK,KAAK;AACxC,KAAA;AACD,IAAA,MAAM,EAAE;AACN,QAAA,IAAI,EAAE,EAAE;AACR,QAAA,KAAK,EAAE,IAAI;AACX,QAAA,KAAK,EAAE,EAAE;AACV,KAAA;EACD;AAEW,MAAA,wBAAwB,GAAG;AACtC,IAAA,KAAK,EAAE,EAAE;AACT,IAAA,KAAK,EAAE,MAAM;AACb,IAAA,SAAS,EAAE,KAAK;AAChB,IAAA,UAAU,EAAE,KAAK;AACjB,IAAA,eAAe,EAAE,KAAK;AACtB,IAAA,QAAQ,EAAC,KAAK;;;MCrFH,uBAAuB,GAAG,IAAI,cAAc,CACvD,yBAAyB,EACzB;MAoBW,yBAAyB,GAAG,IAAI,cAAc,CACzD,2BAA2B;;MCvChB,sBAAsB,CAAA;IACxB,KAAK,GAAW,EAAE,CAAC;IACnB,UAAU,GAAY,IAAI,CAAC;AACZ,IAAA,SAAS,CAAoB;AAC/B,IAAA,OAAO,CAAoB;AAEjD,IAAA,WAAA,GAAA,GAAgB;AAEhB,IAAA,QAAQ,MAAW;wGARR,sBAAsB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAtB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,sBAAsB,mSCPnC,2cAYA,EAAA,MAAA,EAAA,CAAA,qXAAA,CAAA,EAAA,YAAA,EAAA,CAAA,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,eAAA,EAAA,QAAA,EAAA,SAAA,EAAA,MAAA,EAAA,CAAA,YAAA,EAAA,cAAA,EAAA,WAAA,EAAA,aAAA,EAAA,aAAA,EAAA,SAAA,EAAA,WAAA,EAAA,QAAA,EAAA,QAAA,EAAA,SAAA,EAAA,SAAA,CAAA,EAAA,QAAA,EAAA,CAAA,QAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA;;4FDLa,sBAAsB,EAAA,UAAA,EAAA,CAAA;kBALlC,SAAS;+BACE,oBAAoB,EAAA,QAAA,EAAA,2cAAA,EAAA,MAAA,EAAA,CAAA,qXAAA,CAAA,EAAA,CAAA;0EAKrB,KAAK,EAAA,CAAA;sBAAb,KAAK;gBACG,UAAU,EAAA,CAAA;sBAAlB,KAAK;gBACkB,SAAS,EAAA,CAAA;sBAAhC,YAAY;uBAAC,QAAQ,CAAA;gBACA,OAAO,EAAA,CAAA;sBAA5B,YAAY;uBAAC,MAAM,CAAA;;;MEGT,uBAAuB,CAAA;IACzB,WAAW,GAAW,EAAE,CAAC;IACzB,YAAY,GAAW,CAAC,CAAC;IACzB,UAAU,GAAW,MAAM,CAAC;IAC5B,UAAU,GAAW,OAAO,CAAC;IAC7B,aAAa,GAAW,OAAO,CAAC;AACZ,IAAA,cAAc,CAAoB;AAChC,IAAA,gBAAgB,CAAoB;AACrC,IAAA,eAAe,CAAoB;AAEjE,IAAA,WAAA,GAAA,GAAgB;AAEhB,IAAA,QAAQ,MAAW;AAEnB,IAAA,eAAe,MAAW;wGAdf,uBAAuB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAvB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,uBAAuB,ugBCdpC,wyBAmBA,EAAA,MAAA,EAAA,CAAA,i2BAAA,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,EAAAA,IAAA,CAAA,gBAAA,EAAA,QAAA,EAAA,sBAAA,EAAA,MAAA,EAAA,CAAA,aAAA,EAAA,SAAA,EAAA,SAAA,EAAA,QAAA,EAAA,QAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,eAAA,EAAA,CAAA,EAAA,CAAA,CAAA;;4FDLa,uBAAuB,EAAA,UAAA,EAAA,CAAA;kBALnC,SAAS;+BACE,sBAAsB,EAAA,QAAA,EAAA,wyBAAA,EAAA,MAAA,EAAA,CAAA,i2BAAA,CAAA,EAAA,CAAA;0EAKvB,WAAW,EAAA,CAAA;sBAAnB,KAAK;gBACG,YAAY,EAAA,CAAA;sBAApB,KAAK;gBACG,UAAU,EAAA,CAAA;sBAAlB,KAAK;gBACG,UAAU,EAAA,CAAA;sBAAlB,KAAK;gBACG,aAAa,EAAA,CAAA;sBAArB,KAAK;gBACuB,cAAc,EAAA,CAAA;sBAA1C,YAAY;uBAAC,aAAa,CAAA;gBACI,gBAAgB,EAAA,CAAA;sBAA9C,YAAY;uBAAC,eAAe,CAAA;gBACC,eAAe,EAAA,CAAA;sBAA5C,YAAY;uBAAC,cAAc,CAAA;;;MEhBjB,kBAAkB,CAAA;AAEnB,IAAA,EAAA,CAAA;AACY,IAAA,SAAA,CAAA;IAFtB,WACU,CAAA,EAAc,EACF,SAAoB,EAAA;QADhC,IAAE,CAAA,EAAA,GAAF,EAAE,CAAY;QACF,IAAS,CAAA,SAAA,GAAT,SAAS,CAAW;KACtC;IAEI,aAAa,GAAA;QACnB,IAAI,IAAI,CAAC,EAAE,CAAC,aAAa,CAAC,YAAY,CAAC,YAAY,CAAC,EAAE;AACpD,YAAA,OAAO,KAAK,CAAC;AACd,SAAA;QACD,IAAI,IAAI,CAAC,EAAE,CAAC,aAAa,CAAC,YAAY,CAAC,gBAAgB,CAAC,EAAE;AACxD,YAAA,OAAO,IAAI,CAAC;AACb,SAAA;AAED,QAAA,IAAI,OAAO,GAAG,IAAI,CAAC,EAAE,CAAC,aAAa,CAAC;AACpC,QAAA,OAAO,OAAO,EAAE;AACd,YAAA,MAAM,SAAS,GAAG,OAAO,CAAC,SAAS,CAAC;YACpC,IACE,OAAO,SAAS,KAAK,QAAQ;AAC7B,gBAAA,SAAS,CAAC,QAAQ,CAAC,iBAAiB,CAAC,EACrC;AACA,gBAAA,OAAO,IAAI,CAAC;AACb,aAAA;AACD,YAAA,OAAO,GAAG,OAAO,CAAC,aAAa,CAAC;AACjC,SAAA;AACD,QAAA,OAAO,KAAK,CAAC;KACd;IAGD,MAAM,GAAA;AACJ,QAAA,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,EAAE;YACzB,OAAO;AACR,SAAA;QAED,MAAM,KAAK,GAAG,IAAI,CAAC,EAAE,CAAC,aAAa,CAAC,KAAK,CAAC;AAC1C,QAAA,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE;AAC7B,YAAA,MAAM,YAAY,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC;YAElC,IAAI,CAAC,EAAE,CAAC,aAAa,CAAC,KAAK,GAAG,YAAY,CAAC;YAE3C,IAAI,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE;AAC5C,gBAAA,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,QAAQ,CAAC,YAAY,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC,CAAC;AACrE,aAAA;AACF,SAAA;KACF;IAGD,OAAO,GAAA;AACL,QAAA,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,EAAE;YACzB,OAAO;AACR,SAAA;QAED,MAAM,KAAK,GAAG,IAAI,CAAC,EAAE,CAAC,aAAa,CAAC,KAAK,CAAC;QAE1C,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE;YACjD,MAAM,YAAY,GAAG,KAAK,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;YAC9C,IAAI,CAAC,EAAE,CAAC,aAAa,CAAC,KAAK,GAAG,YAAY,CAAC;YAE3C,IAAI,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE;AAC5C,gBAAA,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,QAAQ,CAAC,YAAY,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC,CAAC;AACrE,aAAA;AACF,SAAA;KACF;wGA9DU,kBAAkB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,UAAA,EAAA,EAAA,EAAA,KAAA,EAAAC,IAAA,CAAA,SAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;4FAAlB,kBAAkB,EAAA,QAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,MAAA,EAAA,UAAA,EAAA,OAAA,EAAA,WAAA,EAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA,CAAA;;4FAAlB,kBAAkB,EAAA,UAAA,EAAA,CAAA;kBAH9B,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,iBAAiB;AAC5B,iBAAA,CAAA;;0BAII,QAAQ;4CA0BX,MAAM,EAAA,CAAA;sBADL,YAAY;uBAAC,MAAM,CAAA;gBAmBpB,OAAO,EAAA,CAAA;sBADN,YAAY;uBAAC,OAAO,CAAA;;;MCpCV,mBAAmB,CAAA;AAYpB,IAAA,GAAA,CAAA;AACA,IAAA,UAAA,CAAA;AAC+C,IAAA,sBAAA,CAAA;IAbzD,gBAAgB,GAAY,KAAK,CAAC;IAClC,WAAW,GAAW,EAAE,CAAC;IACzB,WAAW,GAAW,EAAE,CAAC;IACzB,kBAAkB,GAA6B,EAAE,CAAC;IAClD,QAAQ,GAAY,KAAK,CAAC;AAClB,IAAA,QAAQ,GAAG,CAAC,KAAa,KAAI,GAAG,CAAC;AACjC,IAAA,SAAS,GAAG,MAAK,GAAG,CAAC;AAErB,IAAA,mBAAmB,CAA+B;AAE1D,IAAA,WAAA,CACU,GAAsB,EACtB,UAAsB,EACyB,sBAA+C,EAAA;QAF9F,IAAG,CAAA,GAAA,GAAH,GAAG,CAAmB;QACtB,IAAU,CAAA,UAAA,GAAV,UAAU,CAAY;QACyB,IAAsB,CAAA,sBAAA,GAAtB,sBAAsB,CAAyB;KACpG;IAEJ,QAAQ,GAAA;QACN,IAAI,IAAI,CAAC,sBAAsB,EAAE;;AAE/B,YAAA,IAAI,CAAC,sBAAsB;AACxB,iBAAA,iBAAiB,EAAE;AACnB,iBAAA,IAAI,CAAC,CAAC,IAA8B,KAAI;AACvC,gBAAA,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC;AACjC,aAAC,CAAC;iBACD,KAAK,CAAC,MAAK;AACV,gBAAA,IAAI,CAAC,kBAAkB,GAAG,EAAE,CAAC;AAC/B,aAAC,CAAC,CAAC;AACN,SAAA;AAAM,aAAA;;AAEL,YAAA,IAAI,CAAC,kBAAkB,GAAG,EAAE,CAAC;AAC9B,SAAA;KACF;AAED,IAAA,iBAAiB,CAAC,KAAa,EAAA;AAC7B,QAAA,IAAI,CAAC,WAAW,GAAG,KAAK,CAAC;QACzB,IAAI,CAAC,SAAS,EAAE,CAAC;AACjB,QAAA,IAAI,CAAC,gBAAgB,GAAG,KAAK,CAAC;QAC9B,IAAI,CAAC,0BAA0B,EAAE,CAAC;KACnC;AAED,IAAA,UAAU,CAAC,KAAa,EAAA;AACtB,QAAA,IAAI,KAAK,EAAE;AACT,YAAA,IAAI,CAAC,WAAW,GAAG,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;YACtC,IAAI,CAAC,WAAW,GAAG,KAAK;iBACrB,KAAK,CAAC,EAAE,CAAC;iBACT,MAAM,CAAC,CAAC,IAAI,EAAE,KAAK,KAAK,KAAK,GAAG,CAAC,CAAC;iBAClC,IAAI,CAAC,EAAE,CAAC,CAAC;AACb,SAAA;AAAM,aAAA;AACL,YAAA,IAAI,CAAC,WAAW,GAAG,EAAE,CAAC;AACtB,YAAA,IAAI,CAAC,WAAW,GAAG,EAAE,CAAC;AACvB,SAAA;KACF;AAED,IAAA,gBAAgB,CAAC,EAA2B,EAAA;AAC1C,QAAA,IAAI,CAAC,QAAQ,GAAG,EAAE,CAAC;KACpB;AAED,IAAA,iBAAiB,CAAC,EAAc,EAAA;AAC9B,QAAA,IAAI,CAAC,SAAS,GAAG,EAAE,CAAC;KACrB;AAED,IAAA,gBAAgB,CAAC,UAAmB,EAAA;AAClC,QAAA,MAAM,gBAAgB,GAAG,IAAI,CAAC,QAAQ,CAAC;AACvC,QAAA,IAAI,CAAC,QAAQ,GAAG,UAAU,CAAC;;QAG3B,IAAI,gBAAgB,KAAK,UAAU,EAAE;AACnC,YAAA,IAAI,CAAC,gBAAgB,GAAG,KAAK,CAAC;YAC9B,IAAI,CAAC,0BAA0B,EAAE,CAAC;;AAElC,YAAA,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE,CAAC;AAC1B,SAAA;KACF;AAED,IAAA,iBAAiB,CAAC,KAAY,EAAA;QAC5B,IAAI,IAAI,CAAC,QAAQ,EAAE;YACjB,KAAK,CAAC,cAAc,EAAE,CAAC;YACvB,KAAK,CAAC,eAAe,EAAE,CAAC;AACxB,YAAA,IAAI,CAAC,gBAAgB,GAAG,KAAK,CAAC;YAC9B,OAAO;AACR,SAAA;;AAED,QAAA,IAAI,CAAC,gBAAgB,GAAG,CAAC,IAAI,CAAC,gBAAgB,CAAC;;QAG/C,IAAI,IAAI,CAAC,gBAAgB,EAAE;YACzB,UAAU,CAAC,MAAK;gBACd,IAAI,CAAC,0BAA0B,EAAE,CAAC;aACnC,EAAE,CAAC,CAAC,CAAC;AACP,SAAA;AAAM,aAAA;YACL,IAAI,CAAC,0BAA0B,EAAE,CAAC;AACnC,SAAA;AAED,QAAA,KAAK,CAAC,eAAe,EAAE,CAAC;KACzB;IAEO,0BAA0B,GAAA;QAChC,IAAI,IAAI,CAAC,mBAAmB,EAAE;YAC5B,OAAO;AACR,SAAA;AAED,QAAA,IAAI,CAAC,mBAAmB,GAAG,CAAC,KAAiB,KAAI;AAC/C,YAAA,MAAM,aAAa,GAAG,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC;AACpD,YAAA,MAAM,MAAM,GAAG,KAAK,CAAC,MAAqB,CAAC;;YAG3C,MAAM,cAAc,GAAG,QAAQ,CAAC,aAAa,CAAC,sBAAsB,CAAC,CAAC;YACtE,MAAM,gBAAgB,GAAG,cAAc,IAAI,cAAc,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;;YAG3E,MAAM,kBAAkB,GAAG,aAAa,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;;AAG1D,YAAA,IAAI,CAAC,kBAAkB,IAAI,CAAC,gBAAgB,EAAE;AAC5C,gBAAA,IAAI,CAAC,gBAAgB,GAAG,KAAK,CAAC;gBAC9B,IAAI,CAAC,0BAA0B,EAAE,CAAC;AAClC,gBAAA,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE,CAAC;AAC1B,aAAA;AACH,SAAC,CAAC;;QAGF,QAAQ,CAAC,gBAAgB,CAAC,OAAO,EAAE,IAAI,CAAC,mBAAmB,EAAE,IAAI,CAAC,CAAC;KACpE;IAEO,0BAA0B,GAAA;QAChC,IAAI,IAAI,CAAC,mBAAmB,EAAE;YAC5B,QAAQ,CAAC,mBAAmB,CAAC,OAAO,EAAE,IAAI,CAAC,mBAAmB,EAAE,IAAI,CAAC,CAAC;AACtE,YAAA,IAAI,CAAC,mBAAmB,GAAG,SAAS,CAAC;AACtC,SAAA;KACF;IAED,WAAW,GAAA;QACT,IAAI,CAAC,0BAA0B,EAAE,CAAC;KACnC;IAEO,SAAS,GAAA;QACf,MAAM,SAAS,GAAG,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,WAAW,CAAC;AACtD,QAAA,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;KAC1B;IAED,MAAM,GAAA;QACJ,IAAI,CAAC,SAAS,EAAE,CAAC;KAClB;AAED,IAAA,yBAAyB,CAAC,KAAU,EAAA;QAClC,IAAI,IAAI,CAAC,QAAQ;YAAE,OAAO;QAC1B,MAAM,KAAK,GAAG,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC;AAC/C,QAAA,IAAI,CAAC,WAAW,GAAG,KAAK,CAAC;QACzB,IAAI,CAAC,SAAS,EAAE,CAAC;KAClB;AAtJU,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,kBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,mBAAmB,6EAcR,yBAAyB,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAdpC,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,mBAAmB,EARnB,QAAA,EAAA,iBAAA,EAAA,SAAA,EAAA;AACT,YAAA;AACE,gBAAA,OAAO,EAAE,iBAAiB;AAC1B,gBAAA,WAAW,EAAE,UAAU,CAAC,MAAM,mBAAmB,CAAC;AAClD,gBAAA,KAAK,EAAE,IAAI;AACZ,aAAA;AACF,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECdH,4tDAwDA,EAAA,MAAA,EAAA,CAAA,yuDAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,cAAA,EAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAD,EAAA,CAAA,cAAA,EAAA,QAAA,EAAA,+CAAA,EAAA,MAAA,EAAA,CAAA,QAAA,EAAA,QAAA,EAAA,SAAA,EAAA,UAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,MAAA,EAAA,MAAA,EAAA,MAAA,EAAA,MAAA,EAAA,OAAA,CAAA,EAAA,QAAA,EAAA,CAAA,OAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,cAAA,EAAA,QAAA,EAAA,8BAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,WAAA,EAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,OAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAE,IAAA,CAAA,gBAAA,EAAA,QAAA,EAAA,oCAAA,EAAA,MAAA,EAAA,CAAA,cAAA,EAAA,QAAA,EAAA,eAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,kBAAA,EAAA,QAAA,EAAA,cAAA,EAAA,MAAA,EAAA,CAAA,6BAAA,EAAA,gBAAA,EAAA,kBAAA,EAAA,YAAA,EAAA,kBAAA,EAAA,oBAAA,EAAA,iBAAA,EAAA,kBAAA,EAAA,0BAAA,EAAA,0BAAA,EAAA,2BAAA,EAAA,uBAAA,EAAA,mBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,wBAAA,CAAA,EAAA,QAAA,EAAA,CAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,eAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,QAAA,EAAA,UAAA,EAAA,QAAA,EAAA,SAAA,EAAA,gBAAA,EAAA,YAAA,CAAA,EAAA,QAAA,EAAA,CAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,kBAAA,EAAA,QAAA,EAAA,iBAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAA,EAAA,CAAA,aAAA,EAAA,IAAA,EAAA,WAAA,EAAA,CAAA,EAAA,CAAA,CAAA;;4FDxCa,mBAAmB,EAAA,UAAA,EAAA,CAAA;kBAZ/B,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,iBAAiB,EAGhB,SAAA,EAAA;AACT,wBAAA;AACE,4BAAA,OAAO,EAAE,iBAAiB;AAC1B,4BAAA,WAAW,EAAE,UAAU,CAAC,yBAAyB,CAAC;AAClD,4BAAA,KAAK,EAAE,IAAI;AACZ,yBAAA;AACF,qBAAA,EAAA,QAAA,EAAA,4tDAAA,EAAA,MAAA,EAAA,CAAA,yuDAAA,CAAA,EAAA,CAAA;;0BAgBE,QAAQ;;0BAAI,MAAM;2BAAC,yBAAyB,CAAA;;;MERpC,uBAAuB,CAAA;AAuBxB,IAAA,YAAA,CAAA;IApBD,OAAO,GAAqB,EAAE,CAAC;IAE/B,eAAe,GAAqB,EAAE,CAAC;AAEvC,IAAA,SAAS,CAAS;AAEjB,IAAA,YAAY,GAAG,IAAI,YAAY,EAAoB,CAAC;AAG9D,IAAA,iBAAiB,CAAc;IAE/B,YAAY,GAAY,KAAK,CAAC;IAE9B,OAAO,GAA8D,EAAE,CAAC;IAEhE,gBAAgB,GAAoB,IAAI,CAAC;AAEjD,IAAA,WAAA,CAGU,YAAgD,EAAA;QAAhD,IAAY,CAAA,YAAA,GAAZ,YAAY,CAAoC;KACtD;AAEJ,IAAA,QAAQ,MAAW;IAEnB,eAAe,GAAA;QACb,IAAI,CAAC,YAAY,EAAE,CAAC;KACrB;IAED,WAAW,GAAA;QACT,IAAI,IAAI,CAAC,gBAAgB,EAAE;AACzB,YAAA,IAAI,CAAC,gBAAgB,CAAC,OAAO,EAAE,CAAC;AACjC,SAAA;KACF;IAED,YAAY,GAAA;;QAEV,IAAI,IAAI,CAAC,gBAAgB,EAAE;AACzB,YAAA,IAAI,CAAC,gBAAgB,CAAC,OAAO,EAAE,CAAC;AAChC,YAAA,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC;AAC9B,SAAA;QAED,IAAI,IAAI,CAAC,iBAAiB,IAAI,IAAI,CAAC,iBAAiB,CAAC,aAAa,EAAE;YAClE,IAAI,CAAC,gBAAgB,GAAG,IAAI,QAAQ,CAClC,IAAI,CAAC,iBAAiB,CAAC,aAAa,EACpC;AACE,gBAAA,SAAS,EAAE,GAAG;AACd,gBAAA,UAAU,EAAE,gBAAgB;AAC5B,gBAAA,WAAW,EAAE,iBAAiB;AAC9B,gBAAA,SAAS,EAAE,eAAe;AAC1B,gBAAA,MAAM,EAAE,iBAAiB;AACzB,gBAAA,KAAK,EAAE,CAAC,GAAG,KAAI;AACb,oBAAA,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;iBACrB;AACF,aAAA,CACF,CAAC;AACH,SAAA;KACF;AAED,IAAA,SAAS,CAAC,GAAQ,EAAA;AAChB,QAAA,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE,GAAG,GAAG,CAAC;QACnC,IAAI,QAAQ,KAAK,QAAQ,EAAE;;YAEzB,MAAM,kBAAkB,GAAG,CAAC,GAAG,IAAI,CAAC,eAAe,CAAC,CAAC;AACrD,YAAA,MAAM,SAAS,GAAG,kBAAkB,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YAC5D,kBAAkB,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC,EAAE,SAAS,CAAC,CAAC;;AAGlD,YAAA,IAAI,CAAC,eAAe,GAAG,kBAAkB,CAAC;AAC3C,SAAA;KACF;IAED,aAAa,CAAC,KAAa,EAAE,IAAoB,EAAA;QAC/C,OAAO,IAAI,CAAC,IAAI,IAAI,KAAK,CAAC,QAAQ,EAAE,CAAC;KACtC;AAED;;AAEG;IACK,8BAA8B,GAAA;AACpC,QAAA,MAAM,aAAa,GAAG,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC,GAAG,KAAK,GAAG,CAAC,IAAI,CAAC,CAAC;QAClE,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,MAAM,KAAI;YAC9B,MAAM,CAAC,OAAO,GAAG,aAAa,CAAC,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AACxD,SAAC,CAAC,CAAC;KACJ;IAED,kBAAkB,GAAA;AAChB,QAAA,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO;aACxB,MAAM,CAAC,CAAC,IAAI,KAAK,CAAC,IAAI,CAAC,eAAe,CAAC;AACvC,aAAA,GAAG,CAAC,CAAC,IAAI,KAAI;YACZ,OAAO;gBACL,KAAK,EAAE,IAAI,CAAC,KAAK;gBACjB,KAAK,EAAE,IAAI,CAAC,IAAI;gBAChB,OAAO,EAAE,IAAI,CAAC,WAAW,GAAG,KAAK,GAAG,IAAI;AACxC,gBAAA,QAAQ,EAAE,IAAI,CAAC,QAAQ,IAAI,IAAI;aAChC,CAAC;AACJ,SAAC,CAAC,CAAC;;QAGL,IAAI,CAAC,8BAA8B,EAAE,CAAC;AAEtC,QAAA,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC;;QAGzB,UAAU,CAAC,MAAK;YACd,IAAI,CAAC,YAAY,EAAE,CAAC;SACrB,EAAE,GAAG,CAAC,CAAC;KACT;IAED,gBAAgB,GAAA;AACd,QAAA,IAAI,CAAC,YAAY,GAAG,KAAK,CAAC;QAC1B,IAAI,IAAI,CAAC,gBAAgB,EAAE;AACzB,YAAA,IAAI,CAAC,gBAAgB,CAAC,OAAO,EAAE,CAAC;AAChC,YAAA,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC;AAC9B,SAAA;KACF;AAED,IAAA,kBAAkB,CAAC,GAAW,EAAA;QAC5B,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,eAAe,CAAC,MAAM,CAChD,CAAC,IAAI,KAAK,IAAI,CAAC,IAAI,KAAK,GAAG,CAC5B,CAAC;;QAGF,IAAI,CAAC,8BAA8B,EAAE,CAAC;KACvC;IAED,oBAAoB,CAAC,KAAK,EAAE,MAAM,EAAA;QAChC,IAAI,CAAC,KAAK,EAAE;AACV,YAAA,IAAI,CAAC,kBAAkB,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AACvC,SAAA;AAAM,aAAA;AACL,YAAA,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC;gBACxB,KAAK,EAAE,MAAM,CAAC,KAAK;gBACnB,IAAI,EAAE,MAAM,CAAC,KAAK;gBAClB,QAAQ,EAAE,MAAM,CAAC,QAAQ;AACzB,gBAAA,WAAW,EAAE,KAAK;AACnB,aAAA,CAAC,CAAC;;YAEH,IAAI,CAAC,8BAA8B,EAAE,CAAC;AACvC,SAAA;KACF;IACD,aAAa,GAAA;QACX,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,MAAM,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE;AACjD,YAAA,IAAI,CAAC,YAAY,GAAG,KAAK,CAAC;AAC1B,YAAA,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE,CAAC;YACzB,OAAO;AACR,SAAA;QACD,MAAM,OAAO,GAAG,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC,MAAM,KAAI;YAClD,OAAO;gBACL,KAAK,EAAE,MAAM,CAAC,IAAI;gBAClB,MAAM,EAAE,MAAM,CAAC,WAAW,GAAG,KAAK,GAAG,IAAI;gBACzC,MAAM,EAAE,MAAM,CAAC,KAAK;AACpB,gBAAA,QAAQ,EAAE,MAAM,CAAC,QAAQ,IAAI,IAAI;aAClC,CAAC;AACJ,SAAC,CAAC,CAAC;AACH,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;AACjE,QAAA,MAAM,IAAI,GAAG,CAAC,GAAG,KAAI;AACnB,YAAA,IAAI,CAAC,YAAY,GAAG,KAAK,CAAC;AAC1B,YAAA,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE,CAAC;AAC3B,SAAC,CAAC;AACF,QAAA,IAAI,MAAM,IAAI,YAAY,CAAC,MAAM,CAAC,EAAE;AAClC,YAAA,MAAM,CAAC,SAAS,CAAC,IAAI,EAAE,MAAM,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;AAC1C,SAAA;AAAM,aAAA;AACL,YAAA,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,MAAM,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;AACnD,SAAA;KACF;AAvKU,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,kBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,uBAAuB,kBAsBxB,uBAAuB,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAtBtB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,uBAAuB,0TCtBpC,88EAwEA,EAAA,MAAA,EAAA,CAAA,0vBAAA,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,EAAAH,IAAA,CAAA,eAAA,EAAA,QAAA,EAAA,2CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,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,cAAA,EAAA,QAAA,EAAA,+CAAA,EAAA,MAAA,EAAA,CAAA,QAAA,EAAA,QAAA,EAAA,SAAA,EAAA,UAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,MAAA,EAAA,MAAA,EAAA,MAAA,EAAA,MAAA,EAAA,OAAA,CAAA,EAAA,QAAA,EAAA,CAAA,OAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,cAAA,EAAA,QAAA,EAAA,8BAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,WAAA,EAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,OAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAI,EAAA,CAAA,eAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,QAAA,EAAA,UAAA,EAAA,QAAA,EAAA,SAAA,EAAA,gBAAA,EAAA,YAAA,CAAA,EAAA,QAAA,EAAA,CAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,IAAA,CAAA,2BAAA,EAAA,QAAA,EAAA,qIAAA,EAAA,MAAA,EAAA,CAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,gBAAA,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,QAAA,EAAA,gBAAA,EAAA,qBAAA,EAAA,WAAA,EAAA,YAAA,EAAA,aAAA,EAAA,cAAA,EAAA,kBAAA,EAAA,iBAAA,EAAA,YAAA,EAAA,eAAA,EAAA,YAAA,EAAA,WAAA,EAAA,UAAA,EAAA,UAAA,EAAA,SAAA,EAAA,iBAAA,EAAA,aAAA,EAAA,SAAA,EAAA,SAAA,EAAA,aAAA,EAAA,aAAA,EAAA,aAAA,EAAA,UAAA,EAAA,cAAA,EAAA,UAAA,EAAA,YAAA,EAAA,YAAA,EAAA,aAAA,EAAA,aAAA,EAAA,QAAA,EAAA,YAAA,CAAA,EAAA,OAAA,EAAA,CAAA,QAAA,EAAA,YAAA,EAAA,aAAA,EAAA,cAAA,EAAA,iBAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,mBAAA,EAAA,QAAA,EAAA,eAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,aAAA,EAAA,YAAA,EAAA,iBAAA,EAAA,WAAA,EAAA,MAAA,CAAA,EAAA,OAAA,EAAA,CAAA,iBAAA,CAAA,EAAA,QAAA,EAAA,CAAA,YAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,0BAAA,EAAA,QAAA,EAAA,qBAAA,EAAA,OAAA,EAAA,CAAA,YAAA,CAAA,EAAA,QAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,qBAAA,EAAA,QAAA,EAAA,gIAAA,EAAA,MAAA,EAAA,CAAA,YAAA,EAAA,YAAA,EAAA,YAAA,EAAA,cAAA,EAAA,YAAA,EAAA,gBAAA,EAAA,aAAA,EAAA,eAAA,EAAA,YAAA,EAAA,WAAA,EAAA,gBAAA,EAAA,QAAA,EAAA,YAAA,EAAA,UAAA,CAAA,EAAA,OAAA,EAAA,CAAA,iBAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,cAAA,CAAA,EAAA,QAAA,EAAA,CAAA,cAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,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,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,EAAA,CAAA,aAAA,EAAA,QAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,CAAA,uBAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA;;4FDlDa,uBAAuB,EAAA,UAAA,EAAA,CAAA;kBALnC,SAAS;+BACE,qBAAqB,EAAA,QAAA,EAAA,88EAAA,EAAA,MAAA,EAAA,CAAA,0vBAAA,CAAA,EAAA,CAAA;;0BAyB5B,QAAQ;;0BACR,MAAM;2BAAC,uBAAuB,CAAA;4CAnBxB,OAAO,EAAA,CAAA;sBAAf,KAAK;gBAEG,eAAe,EAAA,CAAA;sBAAvB,KAAK;gBAEG,SAAS,EAAA,CAAA;sBAAjB,KAAK;gBAEI,YAAY,EAAA,CAAA;sBAArB,MAAM;gBAGP,iBAAiB,EAAA,CAAA;sBADhB,SAAS;AAAC,gBAAA,IAAA,EAAA,CAAA,mBAAmB,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,CAAA;;;ME3BtC,2BAA2B,CAAA;AAYlB,IAAA,GAAA,CAAA;IAXX,SAAS,GAAqB,IAAI,CAAC;AACnC,IAAA,KAAK,CAAM;IACX,KAAK,GAAkC,IAAI,CAAC;AAC3C,IAAA,WAAW,GAAG,IAAI,YAAY,EAAO,CAAC;AAEW,IAAA,EAAE,CAAoB;IAEzE,MAAM,GAAQ,IAAI,CAAC;IACnB,KAAK,GAAG,KAAK,CAAC;IACd,WAAW,GAAgC,IAAI,CAAC;AAExD,IAAA,WAAA,CAAoB,GAA6B,EAAA;QAA7B,IAAG,CAAA,GAAA,GAAH,GAAG,CAA0B;KAAI;IAErD,QAAQ,GAAA;QACN,IAAI,CAAC,MAAM,EAAE,CAAC;KACf;AAED,IAAA,WAAW,CAAC,OAAsB,EAAA;QAChC,IAAI,OAAO,CAAC,SAAS,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,WAAW,EAAE;YACvD,IAAI,CAAC,OAAO,EAAE,CAAC;YACf,IAAI,CAAC,MAAM,EAAE,CAAC;YACd,OAAO;AACR,SAAA;QACD,IAAI,IAAI,CAAC,MAAM,EAAE;YACf,IAAI,OAAO,CAAC,KAAK,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,WAAW,EAAE;gBAC/C,IAAI,IAAI,CAAC,KAAK,EAAE;oBACd,IAAI,OAAO,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,UAAU,KAAK,UAAU,EAAE;wBACzD,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AAC7C,qBAAA;AACF,iBAAA;AAAM,qBAAA,IAAI,OAAO,IAAI,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE;oBAC1C,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC;AACzC,iBAAA;AACF,aAAA;YACD,IAAI,OAAO,CAAC,KAAK,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,WAAW,EAAE;gBAC/C,IAAI,CAAC,UAAU,EAAE,CAAC;AACnB,aAAA;AACF,SAAA;KACF;IAEO,MAAM,GAAA;QACZ,IAAI,CAAC,IAAI,CAAC,SAAS;YAAE,OAAO;AAC5B,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,uBAAuB,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;AACjE,QAAA,IAAI,CAAC,EAAE,CAAC,KAAK,EAAE,CAAC;QAChB,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,EAAE,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC;QAE/C,IAAI,CAAC,KAAK,GAAG,OAAO,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,gBAAgB,KAAK,UAAU,IAAI,OAAO,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,UAAU,KAAK,UAAU,CAAC;QAElI,IAAI,IAAI,CAAC,KAAK,EAAE;YACd,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YAC5C,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,gBAAgB,CAAC,CAAC,CAAM,KAAI;AAC/C,gBAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAC3B,aAAC,CAAC,CAAC;AACJ,SAAA;AAAM,aAAA;AACL,YAAA,IAAI,OAAO,IAAI,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE;gBACnC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC;AACzC,aAAA;AACD,YAAA,IAAI,aAAa,IAAI,IAAI,CAAC,MAAM,CAAC,QAAQ,IAAI,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,WAAW,IAAI,OAAO,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,WAAW,CAAC,SAAS,KAAK,UAAU,EAAE;AACjJ,gBAAA,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC,CAAM,KAAI;AACpD,oBAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAC3B,iBAAC,CAAC,CAAC;AACJ,aAAA;AACF,SAAA;QAED,IAAI,CAAC,UAAU,EAAE,CAAC;KACnB;IAEO,UAAU,GAAA;AAChB,QAAA,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,IAAI,EAAE,CAAC;AAC3B,QAAA,MAAM,KAAK,GAAG,CAAC,CAAC,cAAc,IAAI,EAAE,CAAC;QACrC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,KAAI;YAC/B,IAAI;AACF,gBAAA,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;AACpC,aAAA;AAAC,YAAA,MAAM,GAAE;AACZ,SAAC,CAAC,CAAC;KACJ;IAEO,OAAO,GAAA;QACb,IAAI,IAAI,CAAC,MAAM,EAAE;YACf,IAAI;AAAE,gBAAA,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;AAAE,aAAA;AAAC,YAAA,MAAM,GAAE;AACvC,YAAA,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC;AACpB,SAAA;KACF;IAED,WAAW,GAAA;QACT,IAAI,CAAC,OAAO,EAAE,CAAC;KAChB;wGAtFU,2BAA2B,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,wBAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;4FAA3B,2BAA2B,EAAA,QAAA,EAAA,0BAAA,EAAA,MAAA,EAAA,EAAA,SAAA,EAAA,WAAA,EAAA,KAAA,EAAA,OAAA,EAAA,KAAA,EAAA,OAAA,EAAA,EAAA,OAAA,EAAA,EAAA,WAAA,EAAA,aAAA,EAAA,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,IAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,IAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,IAAA,EAMb,gBAAgB,EAAA,MAAA,EAAA,IAAA,EAAA,CAAA,EAAA,aAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAR/B,CAAiC,+BAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,CAAA;;4FAEhC,2BAA2B,EAAA,UAAA,EAAA,CAAA;kBAJvC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,0BAA0B;AACpC,oBAAA,QAAQ,EAAE,CAAiC,+BAAA,CAAA;AAC5C,iBAAA,CAAA;+GAEU,SAAS,EAAA,CAAA;sBAAjB,KAAK;gBACG,KAAK,EAAA,CAAA;sBAAb,KAAK;gBACG,KAAK,EAAA,CAAA;sBAAb,KAAK;gBACI,WAAW,EAAA,CAAA;sBAApB,MAAM;gBAEoD,EAAE,EAAA,CAAA;sBAA5D,SAAS;uBAAC,IAAI,EAAE,EAAE,IAAI,EAAE,gBAAgB,EAAE,MAAM,EAAE,IAAI,EAAE,CAAA;;;MCuB9C,iBAAiB,CAAA;AA2JlB,IAAA,YAAA,CAAA;IA1JD,aAAa,GAAY,IAAI,CAAC;IAE9B,YAAY,GAAY,IAAI,CAAC;IAE7B,KAAK,GAAkB,IAAI,CAAC;IAE5B,SAAS,GAAW,EAAE,CAAC;IAEvB,QAAQ,GAAY,KAAK,CAAC;IAE1B,OAAO,GAAqB,EAAE,CAAC;IAE/B,aAAa,GAAY,IAAI,CAAC;IAE9B,aAAa,GAAY,IAAI,CAAC;IAE9B,cAAc,GAAW,IAAI,CAAC;IAE9B,YAAY,GAAW,IAAI,CAAC;IAE5B,UAAU,GAAW,MAAM,CAAC;IAE5B,UAAU,GAAW,OAAO,CAAC;IAE7B,aAAa,GAAW,OAAO,CAAC;IAEhC,UAAU,GAAU,EAAE,CAAC;IAEvB,QAAQ,GAAY,IAAI,CAAC;IAEzB,aAAa,GAAY,IAAI,CAAC;IAE9B,cAAc,GAAY,IAAI,CAAC;IAE/B,eAAe,GAAY,KAAK,CAAC;IAEjC,MAAM,GAAwD,IAAI,CAAC;AAEnE,IAAA,OAAO,CAAkD;IAEzD,WAAW,GAA+B,IAAI,CAAC;;IAG/C,QAAQ,GAAuB,OAAO,CAAC;IAEvC,iBAAiB,GAAY,KAAK,CAAC;;IAGnC,YAAY,GAAY,KAAK,CAAC;IAE9B,YAAY,GAAY,KAAK,CAAC;;AAG9B,IAAA,WAAW,GAA2B,MAAM,KAAK,CAAC;IAElD,gBAAgB,GAAY,IAAI,CAAC;;IAGjC,kBAAkB,GAAY,IAAI,CAAC;AAEnC,IAAA,iBAAiB,CAAoB;AAEpC,IAAA,UAAU,GAAG,IAAI,YAAY,EAAO,CAAC;AAErC,IAAA,YAAY,GAAG,IAAI,YAAY,EAAO,CAAC;AAEvC,IAAA,cAAc,GAAG,IAAI,YAAY,EAAwB,CAAC;AAE1D,IAAA,uBAAuB,GAAG,IAAI,YAAY,EAAO,CAAC;AAEjC,IAAA,YAAY,CAAoB;AAE7B,IAAA,eAAe,CAAoB;AAEnC,IAAA,YAAY,CAA+B;IAEjE,kBAAkB,GAAQ,EAAE,CAAC;;AAG7B,IAAA,eAAe,GAAG,IAAI,GAAG,EAA4B,CAAC;;IAItD,QAAQ,GAAgD,EAAE,CAAC;;IAG3D,aAAa,GAAa,EAAE,CAAC;;AAG7B,IAAA,wBAAwB,GAC9B,IAAI,GAAG,EAAE,CAAC;;IAGJ,aAAa,GAAY,KAAK,CAAC;IAEvC,QAAQ,GAAqB,EAAE,CAAC;;IAGhC,aAAa,GAAQ,EAAE,CAAC;;IAGxB,mBAAmB,GAAqB,EAAE,CAAC;AAE3C,IAAA,SAAS,GAAqB;AAC5B,QAAA,SAAS,EAAE,CAAC;AACZ,QAAA,QAAQ,EAAE,EAAE;AACZ,QAAA,KAAK,EAAE,GAAG;AACV,QAAA,eAAe,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,CAAC;KAClD,CAAC;IAEF,QAAQ,GAAY,KAAK,CAAC;IAE1B,iBAAiB,GAAQ,IAAI,CAAC;;IAG9B,aAAa,GAAU,EAAE,CAAC;;IAG1B,WAAW,GAAY,KAAK,CAAC;;IAG7B,cAAc,GAAY,KAAK,CAAC;;IAGhC,cAAc,GAAqB,EAAE,CAAC;;IAGtC,wBAAwB,GAA0B,EAAE,CAAC;;IAGrD,UAAU,GAAY,IAAI,CAAC;;AAGnB,IAAA,cAAc,CAAM;IAG5B,cAAc,GAAA;QACZ,IAAI,CAAC,IAAI,CAAC,gBAAgB;YAAE,OAAO;QAEnC,IAAI,IAAI,CAAC,cAAc,EAAE;AACvB,YAAA,YAAY,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;AACnC,SAAA;AAED,QAAA,IAAI,CAAC,cAAc,GAAG,UAAU,CAAC,MAAK;;AAEpC,YAAA,IAAI,CAAC,UAAU,GAAG,KAAK,CAAC;YACxB,UAAU,CAAC,MAAK;AACd,gBAAA,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC;aACxB,EAAE,CAAC,CAAC,CAAC;SACP,EAAE,GAAG,CAAC,CAAC;KACT;AACD,IAAA,WAAA,CAGU,YAAgD,EAAA;QAAhD,IAAY,CAAA,YAAA,GAAZ,YAAY,CAAoC;KACtD;AAEI,IAAA,MAAM,kBAAkB,GAAA;QAC9B,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,MAAM,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE;AACjD,YAAA,OAAO,IAAI,CAAC;AACb,SAAA;QACD,IAAI;AACF,YAAA,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;AAC1E,YAAA,OAAO,GAAG,CAAC;AACZ,SAAA;AAAC,QAAA,OAAO,KAAK,EAAE;AACd,YAAA,OAAO,IAAI,CAAC;AACb,SAAA;KACF;IAEO,MAAM,oBAAoB,CAAC,OAAc,EAAA;QAC/C,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,MAAM,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE;AACjD,YAAA,OAAO,IAAI,CAAC;AACb,SAAA;QACD,IAAI;AACF,YAAA,MAAM,MAAM,GAAG,IAAI,CAAC,YAAY,CAAC,MAAM,CACrC,IAAI,CAAC,SAAS,EACd,OAAO,EACP,IAAI,CAAC,QAAQ,CACd,CAAC;AACF,YAAA,IAAI,MAAM,IAAI,YAAY,CAAC,MAAM,CAAC,EAAE;AAClC,gBAAA,OAAO,MAAM,aAAa,CAAC,MAAM,CAAC,CAAC;AACpC,aAAA;AACD,YAAA,OAAO,MAAM,CAAC;AACf,SAAA;AAAC,QAAA,OAAO,KAAK,EAAE;AACd,YAAA,OAAO,IAAI,CAAC;AACb,SAAA;KACF;AAED,IAAA,MAAM,QAAQ,GAAA;AACZ,QAAA,IAAI,CAAC,aAAa,GAAG,EAAE,CAAC;AACxB,QAAA,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACvC,MAAM,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;;QAGzC,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,uBAAuB,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;QACtE,IAAI,IAAI,CAAC,kBAAkB,EAAE;YAC3B,IAAI,CAAC,WAAW,EAAE,CAAC;AACpB,SAAA;QACD,IAAI,CAAC,mBAAmB,EAAE,CAAC;KAC5B;IAED,kBAAkB,GAAA;;;QAGhB,IAAI,CAAC,qBAAqB,EAAE,CAAC;KAC9B;AAEO,IAAA,MAAM,qBAAqB,GAAA;AACjC,QAAA,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,kBAAkB,EAAE,CAAC;AAC5C,QAAA,IAAI,CAAC,GAAG;AAAE,YAAA,OAAO,KAAK,CAAC;AACvB,QAAA,MAAM,WAAW,GAAG,IAAI,CAAC,OAAO;aAC7B,MAAM,CAAC,CAAC,GAAG,KAAK,CAAC,GAAG,CAAC,eAAe,CAAC;AACrC,aAAA,GAAG,CAAC,CAAC,MAAM,KAAI;YACd,OAAO;gBACL,KAAK,EAAE,MAAM,CAAC,IAAI;AAClB,gBAAA,MAAM,EAAE,CAAC,MAAM,CAAC,WAAW;gBAC3B,MAAM,EAAE,MAAM,CAAC,KAAK;AACpB,gBAAA,QAAQ,EAAE,MAAM,CAAC,QAAQ,IAAI,IAAI;aAClC,CAAC;AACJ,SAAC,CAAC,CAAC;AACL,QAAA,IAAI,GAAG,CAAC,IAAI,KAAK,CAAC,EAAE;YAClB,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,EAAE,WAAW,CAAC,EAAE;gBAC7C,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,oBAAoB,CAAC,WAAW,CAAC,CAAC;AAC7D,gBAAA,IAAI,OAAO,EAAE;oBACX,IAAI,CAAC,mBAAmB,EAAE,CAAC;AAC5B,iBAAA;AAED,gBAAA,OAAO,KAAK,CAAC;AACd,aAAA;AAAM,iBAAA;AACL,gBAAA,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;AAClB,gBAAA,OAAO,IAAI,CAAC;AACb,aAAA;AACF,SAAA;AAAM,aAAA,IAAI,GAAG,CAAC,IAAI,KAAK,EAAE,EAAE;;AAE1B,YAAA,OAAO,IAAI,CAAC;AACb,SAAA;AAAM,aAAA;AACL,YAAA,OAAO,KAAK,CAAC;AACd,SAAA;KACF;AAEO,IAAA,MAAM,mBAAmB,GAAA;QAC/B,IAAI,CAAC,IAAI,CAAC,SAAS,IAAI,CAAC,IAAI,CAAC,YAAY;YAAE,OAAO;AAClD,QAAA,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE;AACvB,YAAA,MAAM,WAAW,GAAG,MAAM,IAAI,CAAC,qBAAqB,EAAE,CAAC;AACvD,YAAA,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC;AAC1B,YAAA,IAAI,CAAC,WAAW;gBAAE,OAAO;AAC1B,SAAA;AACD,QAAA,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,kBAAkB,EAAE,CAAC;AAC5C,QAAA,IAAI,CAAC,GAAG;YAAE,OAAO;AACjB,QAAA,IAAI,GAAG,CAAC,IAAI,KAAK,CAAC,EAAE;AAClB,YAAA,MAAM,UAAU,GAAG,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,IAAI,KAAI;gBACjD,OAAO;oBACL,KAAK,EAAE,IAAI,CAAC,MAAM;oBAClB,IAAI,EAAE,IAAI,CAAC,KAAK;oBAChB,QAAQ,EAAE,IAAI,CAAC,QAAQ;AACvB,oBAAA,WAAW,EAAE,CAAC,IAAI,CAAC,MAAM;iBAC1B,CAAC;AACJ,aAAC,CAAC,CAAC;AACH,YAAA,IAAI,CAAC,cAAc,GAAG,UAAU,CAAC;AACjC,YAAA,IAAI,CAAC,kBAAkB,CAAC,UAAU,CAAC,CAAC;AACrC,SAAA;AAAM,aAAA,IAAI,GAAG,CAAC,IAAI,KAAK,EAAE,EAAE;;AAE1B,YAAA,MAAM,WAAW,GAAG,IAAI,CAAC,OAAO;iBAC7B,MAAM,CAAC,CAAC,GAAG,KAAK,CAAC,GAAG,CAAC,eAAe,CAAC;AACrC,iBAAA,GAAG,CAAC,CAAC,MAAM,KAAI;gBACd,OAAO;oBACL,KAAK,EAAE,MAAM,CAAC,IAAI;AAClB,oBAAA,MAAM,EAAE,IAAI;oBACZ,MAAM,EAAE,MAAM,CAAC,KAAK;AACpB,oBAAA,QAAQ,EAAE,MAAM,CAAC,QAAQ,IAAI,IAAI;iBAClC,CAAC;AACJ,aAAC,CAAC,CAAC;;YAGL,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,oBAAoB,CAAC,WAAW,CAAC,CAAC;AAC7D,YAAA,IAAI,OAAO,EAAE;gBACX,IAAI,CAAC,mBAAmB,EAAE,CAAC;AAC5B,aAAA;AACF,SAAA;KACF;AAEO,IAAA,mBAAmB,CAAC,OAAyB,EAAA;QACnD,IAAI,CAAC,QAAQ,GAAG,OAAO;aACpB,MAAM,CAAC,CAAC,IAAI,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC;AACnC,aAAA,GAAG,CAAC,CAAC,IAAI,KAAI;AACZ,YAAA,OAAO,EAAE,GAAG,wBAAwB,EAAE,GAAG,IAAI,EAAoB,CAAC;AACpE,SAAC,CAAC,CAAC;KACN;;IAGO,qBAAqB,GAAA;;QAE3B,MAAM,iBAAiB,GAAG,IAAI,CAAC,YAAY,CAAC,OAAO,EAAE,CAAC;;AAGtD,QAAA,MAAM,uBAAuB,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,CAClD,CAAC,GAAG,KAAK,GAAG,CAAC,YAAY,CAC1B,CAAC;;AAGF,QAAA,MAAM,sBAAsB,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAChD,CAAC,GAAG,KAAK,GAAG,CAAC,iBAAiB,CAC/B,CAAC;;AAGF,QAAA,MAAM,iBAAiB,GAAG,uBAAuB,CAAC,MAAM,CAAC;AACzD,QAAA,MAAM,oBAAoB,GAAG,iBAAiB,GAAG,sBAAsB,CAAC,MAAM,CAAC;;AAG/E,QAAA,MAAM,sBAAsB,GAAG,IAAI,GAAG,EAAU,CAAC;;QAGjD,IAAI,IAAI,CAAC,YAAY,EAAE;AACrB,YAAA,MAAM,cAAc,GAAG,IAAI,CAAC,iBAAiB,CAAC,iBAAiB,EAAE,IAAI,CAAC,YAAY,CAAC,CAAC;AACpF,YAAA,IAAI,cAAc,KAAK,CAAC,CAAC,EAAE;AACzB,gBAAA,sBAAsB,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;AAC5C,aAAA;AACF,SAAA;;QAGD,IAAI,IAAI,CAAC,eAAe,EAAE;AACxB,YAAA,MAAM,iBAAiB,GAAG,IAAI,CAAC,iBAAiB,CAAC,iBAAiB,EAAE,IAAI,CAAC,eAAe,CAAC,CAAC;AAC1F,YAAA,IAAI,iBAAiB,KAAK,CAAC,CAAC,EAAE;AAC5B,gBAAA,sBAAsB,CAAC,GAAG,CAAC,iBAAiB,CAAC,CAAC;AAC/C,aAAA;AACF,SAAA;;;AAID,QAAA,MAAM,oBAAoB,GAAG,CAAC,IAAI,CAAC,YAAY,GAAG,CAAC,GAAG,CAAC,KAAK,IAAI,CAAC,eAAe,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;QAC1F,IAAI,sBAAsB,CAAC,IAAI,KAAK,CAAC,IAAI,oBAAoB,GAAG,CAAC,EAAE;AACjE,YAAA,KAAK,IAAI,CAAC,GAAG,iBAAiB,CAAC,MAAM,GAAG,oBAAoB,EAAE,CAAC,GAAG,iBAAiB,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;AAC/F,gBAAA,sBAAsB,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;AAC/B,aAAA;AACF,SAAA;;QAGD,MAAM,eAAe,GAAuB,EAAE,CAAC;QAC/C,iBAAiB,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,KAAK,KAAI;AACvC,YAAA,IAAI,CAAC,sBAAsB,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE;AACtC,gBAAA,eAAe,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAC3B,aAAA;AACH,SAAC,CAAC,CAAC;;AAGH,QAAA,IAAI,eAAe,CAAC,MAAM,KAAK,oBAAoB,EAAE;YACnD,OAAO,CAAC,IAAI,CACV,CAAwB,qBAAA,EAAA,oBAAoB,CAAa,UAAA,EAAA,eAAe,CAAC,MAAM,CAA6C,2CAAA,CAAA,CAC7H,CAAC;AACH,SAAA;;QAGD,uBAAuB,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE,KAAK,KAAI;AAChD,YAAA,MAAM,YAAY,GAAG,MAAM,CAAC,YAAa,CAAC;AAC1C,YAAA,IAAI,KAAK,GAAG,eAAe,CAAC,MAAM,EAAE;AAClC,gBAAA,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,YAAY,EAAE,eAAe,CAAC,KAAK,CAAC,CAAC,CAAC;AAChE,aAAA;AAAM,iBAAA;gBACL,OAAO,CAAC,KAAK,CAAC,CAAA,iBAAA,EAAoB,YAAY,CAAQ,KAAA,EAAA,KAAK,CAAO,KAAA,CAAA,CAAC,CAAC;AACrE,aAAA;AACH,SAAC,CAAC,CAAC;;QAGH,sBAAsB,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE,KAAK,KAAI;AAC/C,YAAA,MAAM,YAAY,GAAG,MAAM,CAAC,iBAAkB,CAAC;AAC/C,YAAA,MAAM,aAAa,GAAG,iBAAiB,GAAG,KAAK,CAAC;AAChD,YAAA,IAAI,aAAa,GAAG,eAAe,CAAC,MAAM,EAAE;AAC1C,gBAAA,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,YAAY,EAAE,eAAe,CAAC,aAAa,CAAC,CAAC,CAAC;AACxE,aAAA;AAAM,iBAAA;gBACL,OAAO,CAAC,KAAK,CAAC,CAAA,sBAAA,EAAyB,YAAY,CAAQ,KAAA,EAAA,aAAa,CAAO,KAAA,CAAA,CAAC,CAAC;AAClF,aAAA;AACH,SAAC,CAAC,CAAC;KACJ;;IAGO,iBAAiB,CAAC,SAA6B,EAAE,MAAwB,EAAA;;QAE/E,IAAI,KAAK,GAAG,SAAS,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;QACtC,IAAI,KAAK,KAAK,CAAC,CAAC;AAAE,YAAA,OAAO,KAAK,CAAC;;QAG/B,IAAI;AACF,YAAA,MAAM,gBAAgB,GAAI,MAAc,CAAC,UAAU,CAAC;AACpD,YAAA,IAAI,gBAAgB,EAAE;AACpB,gBAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,SAAS,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;oBACzC,MAAM,aAAa,GAAI,SAAS,CAAC,CAAC,CAAS,CAAC,UAAU,CAAC;oBACvD,IAAI,aAAa,KAAK,gBAAgB,EAAE;AACtC,wBAAA,OAAO,CAAC,CAAC;AACV,qBAAA;AACF,iBAAA;AACF,aAAA;AACF,SAAA;AAAC,QAAA,OAAO,CAAC,EAAE;;AAEX,SAAA;;QAGD,IAAI;AACF,YAAA,MAAM,eAAe,GAAI,MAAc,CAAC,sBAAsB,CAAC;AAC/D,YAAA,IAAI,eAAe,EAAE;AACnB,gBAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,SAAS,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;oBACzC,MAAM,YAAY,GAAI,SAAS,CAAC,CAAC,CAAS,CAAC,sBAAsB,CAAC;oBAClE,IAAI,YAAY,KAAK,eAAe,EAAE;AACpC,wBAAA,OAAO,CAAC,CAAC;AACV,qBAAA;AACF,iBAAA;AACF,aAAA;AACF,SAAA;AAAC,QAAA,OAAO,CAAC,EAAE;;AAEX,SAAA;QAED,OAAO,CAAC,CAAC,CAAC;KACX;;AAGO,IAAA,wBAAwB,CAAC,OAAyB,EAAA;AACxD,QAAA,OAAO,CAAC,OAAO,CAAC,CAAC,IAAI,KAAI;YACvB,IAAI,IAAI,CAAC,SAAS,EAAE;gBAClB,IAAI,IAAI,CAAC,UAAU,EAAE;oBACnB,IAAI,CAAC,UAAU,GAAG;AAChB,wBAAA,GAAG,uBAAuB,CAAC,IAAI,CAAC,SAAS,CAAC;wBAC1C,GAAG,IAAI,CAAC,UAAU;qBACnB,CAAC;AACH,iBAAA;AAAM,qBAAA;AACL,oBAAA,IAAI,CAAC,UAAU,GAAG,EAAE,GAAG,uBAAuB,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC;AAClE,iBAAA;AACF,aAAA;AACH,SAAC,CAAC,CAAC;KACJ;;AAGO,IAAA,gBAAgB,CAAC,OAAyB,EAAA;AAChD,QAAA,OAAO,CAAC,GAAG,CAAC,OAAO,IAAI,KAAI;AACzB,YAAA,IAAI,IAAI,CAAC,UAAU,IAAI,KAAK,CAAC,IAAI,CAAC,UAAU,EAAE,SAAS,CAAC,EAAE;gBACxD,IAAI;oBACF,MAAM,OAAO,GAAG,MACd,IAAI,CAAC,UACN,CAAC,OAAO,IAAI,CAAC;AACb,oBAAA,IAAI,CAAC,UAA+B,CAAC,OAAO,GAAG,OAAO,CAAC;AACzD,iBAAA;AAAC,gBAAA,OAAO,KAAK,EAAE;AACb,oBAAA,IAAI,CAAC,UAA+B,CAAC,OAAO,GAAG,EAAE,CAAC;AACpD,iBAAA;AACF,aAAA;AACH,SAAC,CAAC,CAAC;KACJ;IAEO,MAAM,eAAe,CAAC,OAAyB,EAAA;AACrD,QAAA,IAAI,CAAC,mBAAmB,GAAG,EAAE,CAAC;QAC9B,OAAO;AACJ,aAAA,MAAM,CAAC,CAAC,IAAI,KAAI;YACf,MAAM,IAAI,GAAG,CAAC,IAAI,CAAC,YAAY,IAAI,IAAI,CAAC,SAAS,CAAC;AAClD,YAAA,IAAI,IAAI,EAAE;gBACR,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC;AAChD,aAAA;AACD,YAAA,OAAO,IAAI,CAAC;AACd,SAAC,CAAC;AACD,aAAA,OAAO,CAAC,CAAC,MAAM,KAAI;YAClB,MAAM,GAAG,GAAG,MAAM,CAAC,UAAU,EAAE,IAAI,IAAI,MAAM,CAAC,IAAI,CAAC;YACnD,IAAI,YAAY,GAAG,uBAAuB,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,KAAK,CAAC;;AAGnE,YAAA,IAAI,MAAM,CAAC,SAAS,KAAK,UAAU,EAAE;gBACnC,MAAM,aAAa,GAAG,CAAC,MAAM,CAAC,UAAU,EAAE,OAAO,IAAI,EAAE;qBACpD,MAAM,CAAC,CAAC,GAAgB,KAAK,GAAG,CAAC,OAAO,CAAC;qBACzC,GAAG,CAAC,CAAC,GAAgB,KAAK,GAAG,CAAC,KAAK,CAAC,CAAC;AACxC,gBAAA,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC;AACrB,oBAAA,aAAa,CAAC,MAAM,GAAG,CAAC,GAAG,aAAa,GAAG,YAAY,CAAC;AAC3D,aAAA;AAAM,iBAAA;AACL,gBAAA,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,UAAU,EAAE,KAAK,IAAI,YAAY,CAAC;AACpE,aAAA;;AAGD,YAAA,IAAI,MAAM,CAAC,SAAS,KAAK,cAAc,EAAE;AACvC,gBAAA,IAAI,CAAC,wBAAwB,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC;AACzC,aAAA;AACH,SAAC,CAAC,CAAC;;QAGL,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,CAAC,CAAM,EAAE,CAAM,KAAI;YAC/C,MAAM,MAAM,GAAG,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,GAAG,MAAM,CAAC,gBAAgB,GAAG,CAAC,CAAC,KAAK,CAAC;YACnE,MAAM,MAAM,GAAG,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,GAAG,MAAM,CAAC,gBAAgB,GAAG,CAAC,CAAC,KAAK,CAAC;YACnE,IAAI,MAAM,KAAK,MAAM;AAAE,gBAAA,OAAO,CAAC,CAAC;YAChC,OAAO,MAAM,GAAG,MAAM,CAAC;AACzB,SAAC,CAAC,CAAC;AAEH,QAAA,IAAI,CAAC,wBAAwB,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC;;AAGxD,QAAA,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC;KACjD;AAEO,IAAA,kBAAkB,CAAC,aAA+B,EAAA;;QAExD,MAAM,eAAe,GAAG,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;;QAGhD,IAAI,sBAAsB,GAAG,aAAa,CAAC;;AAG3C,QAAA,MAAM,mBAAmB,GAAG,eAAe,CAAC,MAAM,CAChD,CAAC,GAAG,KAAK,CAAC,GAAG,CAAC,eAAe,CAC9B,CAAC;;QAGF,MAAM,4BAA4B,GAAqB,EAAE,CAAC;QAC1D,MAAM,4BAA4B,GAAG,CAAC,GAAG,mBAAmB,CAAC,CAAC;AAE9D,QAAA,sBAAsB,CAAC,OAAO,CAAC,CAAC,SAAS,KAAI;;AAE3C,YAAA,MAAM,gBAAgB,GAAG,4BAA4B,CAAC,SAAS,CAC7D,CAAC,GAAG,KAAK,GAAG,CAAC,IAAI,KAAK,SAAS,CAAC,IAAI,CACrC,CAAC;AACF,YAAA,IAAI,gBAAgB,KAAK,CAAC,CAAC,EAAE;;AAE3B,gBAAA,MAAM,WAAW,GAAG,4BAA4B,CAAC,gBAAgB,CAAC,CAAC;gBAEnE,MAAM,UAAU,GAAG,EAAE,GAAG,WAAW,EAAE,GAAG,SAAS,EAAE,CAAC;AACpD,gBAAA,4BAA4B,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;;AAE9C,gBAAA,4BAA4B,CAAC,MAAM,CAAC,gBAAgB,EAAE,CAAC,CAAC,CAAC;AAC1D,aAAA;AAAM,iBAAA;;AAEL,gBAAA,4BAA4B,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;AAC9C,aAAA;AACH,SAAC,CAAC,CAAC;;;AAIH,QAAA,4BAA4B,CAAC,OAAO,CAAC,CAAC,YAAY,KAAI;YACpD,MAAM,SAAS,GAAG,EAAE,GAAG,YAAY,EAAE,WAAW,EAAE,IAAI,EAAE,CAAC;AACzD,YAAA,4BAA4B,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;AAC/C,SAAC,CAAC,CAAC;;QAGH,MAAM,YAAY,GAAqB,EAAE,CAAC;QAC1C,IAAI,iBAAiB,GAAG,CAAC,CAAC;QAC1B,IAAI,cAAc,GAAG,CAAC,CAAC;AAEvB,QAAA,eAAe,CAAC,OAAO,CAAC,CAAC,WAAW,KAAI;YACtC,IAAI,WAAW,CAAC,eAAe,EAAE;;AAE/B,gBAAA,YAAY,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;AAC/B,gBAAA,cAAc,EAAE,CAAC;AAClB,aAAA;AAAM,iBAAA;;AAEL,gBAAA,MAAM,YAAY,GAAG,4BAA4B,CAAC,iBAAiB,CAAC,CAAC;AACrE,gBAAA,IAAI,YAAY,EAAE;;oBAEhB,MAAM,SAAS,GAAG,EAAE,GAAG,WAAW,EAAE,GAAG,YAAY,EAAE,CAAC;AACtD,oBAAA,YAAY,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;AAC9B,iBAAA;AAAM,qBAAA;;AAEL,oBAAA,YAAY,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;AAChC,iBAAA;AACD,gBAAA,iBAAiB,EAAE,CAAC;AACrB,aAAA;AACH,SAAC,CAAC,CAAC;AACH,QAAA,IAAI,CAAC,mBAAmB,CAAC,YAAY,CAAC,CAAC;KACxC;;AAGO,IAAA,uBAAuB,CAAC,MAAW,EAAA;QACzC,MAAM,IAAI,GAAG,IAAI,CAAC;AAClB,QAAA,MAAM,OAAO,GAAsB;AACjC,YAAA,GAAG,CAAC,GAAQ,EAAE,IAAqB,EAAE,KAAU,EAAA;AAC7C,gBAAA,MAAM,GAAG,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC;AACzB,gBAAA,MAAM,MAAM,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC;gBACxB,IAAI,MAAM,KAAK,KAAK,EAAE;AACpB,oBAAA,GAAG,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;AACjB,oBAAA,OAAO,IAAI,CAAC;AACb,iBAAA;AACD,gBAAA,GAAG,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;gBACjB,IAAI;AACF,oBAAA,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC;wBACvB,GAAG;wBACH,KAAK;AACL,wBAAA,MAAM,EAAE,IAAI,CAAC,eAAe,EAAE;AAC/B,qBAAA,CAAC,CAAC;AACJ,iBAAA;gBAAC,OAAO,CAAC,EAAE,GAAE;AACd,gBAAA,OAAO,IAAI,CAAC;aACb;SACF,CAAC;AACF,QAAA,OAAO,IAAI,KAAK,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;KACnC;IAEO,sBAAsB,GAAA;QAC5B,MAAM,iBAAiB,GAAG,SAAS,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;AACxD,QAAA,OAAO,iBAAiB,CAAC;KAC1B;IAEO,sBAAsB,GAAA;;QAE5B,MAAM,UAAU,GAAG,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;AACxE,QAAA,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC;AAAE,YAAA,OAAO,IAAI,CAAC;QACzC,MAAM,KAAK,GAAG,UAAU,CAAC,GAAG,CAAC,CAAC,KAAK,KAAI;;AAErC,YAAA,MAAM,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,GAAG,KAAK,GAAG,CAAC,IAAI,KAAK,KAAK,CAAC,CAAC;AAC/D,YAAA,MAAM,SAAS,GAAG,MAAM,EAAE,QAAQ,IAAI,KAAK,CAAC;YAC5C,OAAO;AACL,gBAAA,KAAK,EAAE,SAAS;AAChB,gBAAA,KAAK,EAAE,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAE;aAC7B,CAAC;AACJ,SAAC,CAAC,CAAC;QACH,IAAI,IAAI,CAAC,YAAY,EAAE;YACrB,OAAO,KAAK,CAAC;AACd,SAAA;AACD,QAAA,MAAM,CAAC,KAAK,CAAC,GAAG,KAAK,CAAC;QACtB,OAAO,KAAK,CAAC;KACd;IAEO,qBAAqB,GAAA;AAC3B,QAAA,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,IAAI,CAAC,UAAU,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO;QAC5E,MAAM,UAAU,GAAG,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;AACxE,QAAA,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO;;AAGpC,QAAA,MAAM,cAAc,GAAG,CAAC,GAAG,UAAU,CAAC,CAAC;QACvC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAM,EAAE,CAAM,KAAI;AACtC,YAAA,KAAK,IAAI,CAAC,GAAG,cAAc,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE;AACnD,gBAAA,MAAM,KAAK,GAAG,cAAc,CAAC,CAAC,CAAC,CAAC;gBAChC,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAE,CAAC;AACpC,gBAAA,MAAM,EAAE,GAAG,CAAC,GAAG,KAAK,CAAC,CAAC;AACtB,gBAAA,MAAM,EAAE,GAAG,CAAC,GAAG,KAAK,CAAC,CAAC;gBACtB,MAAM,GAAG,GAAG,IAAI,CAAC,aAAa,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;gBACvC,IAAI,GAAG,KAAK,CAAC;AAAE,oBAAA,OAAO,KAAK,KAAK,QAAQ,GAAG,GAAG,GAAG,CAAC,GAAG,CAAC;AACvD,aAAA;AACD,YAAA,OAAO,CAAC,CAAC;AACX,SAAC,CAAC,CAAC;KACJ;IAEO,aAAa,CAAC,IAAS,EAAE,IAAS,EAAA;AACxC,QAAA,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI;AAAE,YAAA,OAAO,CAAC,CAAC;QAC3C,IAAI,IAAI,IAAI,IAAI;YAAE,OAAO,CAAC,CAAC,CAAC;QAC5B,IAAI,IAAI,IAAI,IAAI;AAAE,YAAA,OAAO,CAAC,CAAC;AAC3B,QAAA,IAAI,IAAI,YAAY,IAAI,IAAI,IAAI,YAAY,IAAI,EAAE;YAChD,OAAO,IAAI,CAAC,OAAO,EAAE,GAAG,IAAI,CAAC,OAAO,EAAE,CAAC;AACxC,SAAA;QACD,IAAI,OAAO,IAAI,KAAK,SAAS,IAAI,OAAO,IAAI,KAAK,SAAS,EAAE;YAC1D,OAAO,IAAI,KAAK,IAAI,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;AAC1C,SAAA;QACD,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE;YACxD,OAAO,IAAI,GAAG,IAAI,CAAC;AACpB,SAAA;QACD,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE;AACxD,YAAA,OAAO,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;AACjC,SAAA;AACD,QAAA,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC;AAC1B,QAAA,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC;QAC1B,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC;YAAE,OAAO,IAAI,GAAG,IAAI,CAAC;AACrD,QAAA,OAAO,MAAM,CAAC,IAAI,CAAC,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC;KACjD;;IAGO,6BAA6B,CAAC,KAAY,EAAE,MAAsB,EAAA;QACxE,MAAM,QAAQ,GAAG,MAAM,CAAC,UAAU,EAAE,IAAI,IAAI,MAAM,CAAC,IAAI,CAAC;AAExD,QAAA,IACG,MAAM,CAAC,UAAqC,CAAC,UAAU;AACxD,YAAA,OAAQ,MAAM,CAAC,UAAqC,CAAC,UAAU;AAC7D,gBAAA,UAAU,EACZ;YACA,IAAI;gBACF,MAAM,MAAM,GAAI,MAAM,CAAC,UAAqC,CAAC,UAAU,CACrE,KAAK,CACN,CAAC;;gBAEF,IAAI,MAAM,YAAY,OAAO,EAAE;oBAC7B,MAAM;AACH,yBAAA,IAAI,CAAC,CAAC,IAAI,KAAI;wBACb,IAAI,CAAC,wBAAwB,CAAC,QAAQ,CAAC,GAAG,IAAI,IAAI,EAAE,CAAC;AACvD,qBAAC,CAAC;AACD,yBAAA,KAAK,CAAC,CAAC,KAAK,KAAI;AACf,wBAAA,OAAO,CAAC,KAAK,CAAC,gCAAgC,EAAE,KAAK,CAAC,CAAC;AACvD,wBAAA,IAAI,CAAC,wBAAwB,CAAC,QAAQ,CAAC,GAAG,EAAE,CAAC;AAC/C,qBAAC,CAAC,CAAC;AACN,iBAAA;AAAM,qBAAA;;oBAEL,IAAI,CAAC,wBAAwB,CAAC,QAAQ,CAAC,GAAG,MAAM,IAAI,EAAE,CAAC;AACxD,iBAAA;AACF,aAAA;AAAC,YAAA,OAAO,KAAK,EAAE;AACd,gBAAA,OAAO,CAAC,KAAK,CAAC,gCAAgC,EAAE,KAAK,CAAC,CAAC;AACvD,gBAAA,IAAI,CAAC,wBAAwB,CAAC,QAAQ,CAAC,GAAG,EAAE,CAAC;AAC9C,aAAA;AACF,SAAA;KACF;AAEM,IAAA,eAAe,CAAC,OAEtB,EAAA;QACC,MAAM,EAAE,QAAQ,GAAG,KAAK,EAAE,GAAG,OAAO,IAAI,EAAE,CAAC;AAC3C,QAAA,MAAM,SAAS,GAAG,QAAQ,GAAG,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC,aAAa,CAAC;QAC1E,MAAM,MAAM,GAAG,SAAS,CAAC,SAAS,IAAI,EAAE,CAAC,CAAC;QAE1C,OAAO;YACL,MAAM;AACN,YAAA,QAAQ,EAAE;AACR,gBAAA,SAAS,EAAE,IAAI,CAAC,SAAS,CAAC,SAAS;AACnC,gBAAA,QAAQ,EAAE,IAAI,CAAC,SAAS,CAAC,QAAQ;AAClC,aAAA;;AAED,YAAA,IAAI,IAAI,CAAC,QAAQ,KAAK,QAAQ;kBAC1B,EAAE,IAAI,EAAE,IAAI,CAAC,sBAAsB,EAAE,EAAE;kBACvC,EAAE,CAAC;SACR,CAAC;KACH;AAEM,IAAA,MAAM,CAAC,WAAqB,EAAA;AACjC,QAAA,IAAI,CAAC,WAAW,CAAC,WAAW,CAAC,CAAC;KAC/B;AAEM,IAAA,cAAc,CAAC,MAA2B,EAAA;QAC/C,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,KAAI;AAChC,YAAA,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;AACpC,SAAC,CAAC,CAAC;KACJ;IAEM,aAAa,CAAC,GAAW,EAAE,KAAU,EAAA;AAC1C,QAAA,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;KACjC;IAEM,gBAAgB,GAAA;AACrB,QAAA,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC;KAC/B;AAEM,IAAA,MAAM,UAAU,CACrB,OAAyB,EACzB,OAEC,EAAA;;AAGD,QAAA,IAAI,CAAC,OAAO,GAAG,SAAS,CAAC,OAAO,CAAC,CAAC;;AAGlC,QAAA,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;;;AAIvC,QAAA,IAAI,CAAC,aAAa,GAAG,EAAE,CAAC;QACxB,MAAM,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;;QAGzC,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,uBAAuB,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;;QAGtE,IAAI,IAAI,CAAC,YAAY,EAAE;YACrB,IAAI,CAAC,qBAAqB,EAAE,CAAC;AAC9B,SAAA;;AAGD,QAAA,IAAI,OAAO,EAAE,MAAM,KAAK,IAAI,EAAE;YAC5B,IAAI,CAAC,WAAW,EAAE,CAAC;AACpB,SAAA;KACF;IAEM,kBAAkB,GAAA;QACvB,OAAO,IAAI,CAAC,iBAAiB,CAAC;KAC/B;IAEM,cAAc,GAAA;AACnB,QAAA,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE;AACtB,YAAA,OAAO,EAAE,CAAC;AACX,SAAA;;;AAGD,QAAA,OAAO,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,GAAG,KAAK,GAAG,CAAC,OAAO,KAAK,IAAI,CAAQ,CAAC;KACrE;;AAGD,IAAA,WAAW,CAAC,IAAwB,EAAA;AAClC,QAAA,IAAI,CAAC,IAAI;AAAE,YAAA,OAAO,IAAI,CAAC;QACvB,OAAO,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC;KAC/C;IAED,mBAAmB,CAAC,MAAsB,EAAE,IAAS,EAAA;AACnD,QAAA,MAAM,GAAG,GACP,MAAM,CAAC,YAAY,IAAI,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,YAAY,CAAC;AAC1D,cAAE,EAAE;cACF,MAAM,CAAC,QAAQ;kBACf,MAAM,CAAC,IAAI;kBACX,EAAE,CAAC;AACT,QAAA,OAAO,CAAC,GAAG,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC;KAC9B;AAED,IAAA,kBAAkB,CAAC,IAAS,EAAA;;QAE1B,IAAI,IAAI,CAAC,YAAY,EAAE;AACrB,YAAA,OAAO,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;AAChC,SAAA;;QAED,IAAI,CAAC,IAAI,CAAC,iBAAiB;AAAE,YAAA,OAAO,KAAK,CAAC;AAC1C,QAAA,OAAO,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,iBAAiB,CAAC,KAAK,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;KACxE;;AAGD,IAAA,aAAa,CAAC,IAAS,EAAA;QACrB,IAAI,CAAC,IAAI,CAAC,YAAY;AAAE,YAAA,OAAO,KAAK,CAAC;AACrC,QAAA,OAAO,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC;KAC1D;;AAGD,IAAA,YAAY,CAAC,IAAS,EAAA;QACpB,IAAI,CAAC,IAAI,CAAC,YAAY;AAAE,YAAA,OAAO,KAAK,CAAC;;AAErC,QAAA,OAAO,IAAI,CAAC,OAAO,KAAK,IAAI,CAAC;KAC9B;;AAGD,IAAA,gBAAgB,CAAC,IAAS,EAAE,OAAgB,EAAE,KAAa,EAAA;AACzD,QAAA,IAAI,KAAK,EAAE;AACT,YAAA,KAAK,CAAC,eAAe,EAAE,CAAC;AACzB,SAAA;;AAED,QAAA,IAAI,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,EAAE;YAC5B,OAAO;AACR,SAAA;;AAGD,QAAA,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;;QAGvB,MAAM,KAAK,GAAG,IAAI,CAAC,aAAa,CAAC,SAAS,CAAC,CAAC,GAAG,KAC7C,IAAI,CAAC,SAAS,CAAC,GAAG,EAAE,IAAI,CAAC,CAC1B,CAAC;AACF,QAAA,IAAI,OAAO,EAAE;AACX,YAAA,IAAI,KAAK,KAAK,CAAC,CAAC,EAAE;AAChB,gBAAA,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC/B,aAAA;;AAED,YAAA,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC;AAC/B,SAAA;AAAM,aAAA;AACL,YAAA,IAAI,KAAK,GAAG,CAAC,CAAC,EAAE;gBACd,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;AACrC,aAAA;;YAED,IACE,IAAI,CAAC,iBAAiB;gBACtB,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,iBAAiB,EAAE,IAAI,CAAC,EAC5C;AACA,gBAAA,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC;AAC/B,aAAA;AACF,SAAA;QAED,IAAI,CAAC,oBAAoB,EAAE,CAAC;KAC7B;;IAGD,oBAAoB,GAAA;AAClB,QAAA,IAAI,CAAC,IAAI,CAAC,YAAY,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE;AACzD,YAAA,IAAI,CAAC,WAAW,GAAG,KAAK,CAAC;AACzB,YAAA,IAAI,CAAC,cAAc,GAAG,KAAK,CAAC;YAC5B,OAAO;AACR,SAAA;;QAED,MAAM,aAAa,GAAG,IAAI,CAAC,UAAU,CAAC,MAAM,CAC1C,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,CAClC,CAAC;;AAEF,QAAA,MAAM,YAAY,GAAG,aAAa,CAAC,MAAM,CACvC,CAAC,GAAG,KAAK,GAAG,CAAC,OAAO,KAAK,IAAI,CAC9B,CAAC,MAAM,CAAC;AACT,QAAA,MAAM,UAAU,GAAG,aAAa,CAAC,MAAM,CAAC;AACxC,QAAA,IAAI,CAAC,WAAW;YACd,UAAU,GAAG,CAAC,IAAI,YAAY,GAAG,CAAC,IAAI,YAAY,KAAK,UAAU,CAAC;QACpE,IAAI,CAAC,cAAc,GAAG,YAAY,GAAG,CAAC,IAAI,YAAY,GAAG,UAAU,CAAC;KACrE;;IAGD,cAAc,CAAC,OAAgB,EAAE,KAAa,EAAA;AAC5C,QAAA,IAAI,KAAK,EAAE;YACT,KAAK,CAAC,eAAe,EAAE,CAAC;AACzB,SAAA;;QAGD,MAAM,aAAa,GAAG,IAAI,CAAC,UAAU,CAAC,MAAM,CAC1C,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,CAClC,CAAC;;AAGF,QAAA,aAAa,CAAC,OAAO,CAAC,CAAC,GAAG,KAAI;AAC5B,YAAA,GAAG,CAAC,OAAO,GAAG,OAAO,CAAC;AACxB,SAAC,CAAC,CAAC;;AAGH,QAAA,IAAI,OAAO,EAAE;AACX,YAAA,IAAI,CAAC,aAAa,GAAG,CAAC,GAAG,aAAa,CAAC,CAAC;;AAExC,YAAA,IAAI,CAAC,iBAAiB;AACpB,gBAAA,aAAa,CAAC,MAAM,GAAG,CAAC,GAAG,aAAa,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC;AACtD,SAAA;AAAM,aAAA;AACL,YAAA,IAAI,CAAC,aAAa,GAAG,EAAE,CAAC;;AAExB,YAAA,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC;AAC/B,SAAA;QAED,IAAI,CAAC,oBAAoB,EAAE,CAAC;KAC7B;;IAGD,eAAe,GAAA;AACb,QAAA,OAAO,IAAI,CAAC,cAAc,EAAE,CAAC;KAC9B;;IAGD,sBAAsB,CAAC,IAAS,EAAE,OAAgB,EAAA;AAChD,QAAA,IAAI,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,EAAE;YAC5B,OAAO;AACR,SAAA;;;;QAMD,MAAM,KAAK,GAAG,IAAI,CAAC,aAAa,CAAC,SAAS,CAAC,CAAC,GAAG,KAC7C,IAAI,CAAC,SAAS,CAAC,GAAG,EAAE,IAAI,CAAC,CAC1B,CAAC;AACF,QAAA,IAAI,OAAO,EAAE;AACX,YAAA,IAAI,KAAK,KAAK,CAAC,CAAC,EAAE;AAChB,gBAAA,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC/B,aAAA;;AAED,YAAA,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC;AAC/B,SAAA;AAAM,aAAA;AACL,YAAA,IAAI,KAAK,GAAG,CAAC,CAAC,EAAE;gBACd,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;AACrC,aAAA;;YAED,IACE,IAAI,CAAC,iBAAiB;gBACtB,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,iBAAiB,EAAE,IAAI,CAAC,EAC5C;AACA,gBAAA,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC;AAC/B,aAAA;AACF,SAAA;;QAGD,IAAI,CAAC,oBAAoB,EAAE,CAAC;KAC7B;;IAGD,qBAAqB,GAAA;QACnB,IAAI,CAAC,oBAAoB,EAAE,CAAC;KAC7B;;AAGO,IAAA,QAAQ,CAAC,IAAS,EAAA;QACxB,OAAO,IAAI,CAAC,EAAE,IAAI,IAAI,CAAC,GAAG,IAAI,SAAS,CAAC;KACzC;;IAGO,SAAS,CAAC,IAAS,EAAE,IAAS,EAAA;QACpC,MAAM,GAAG,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;QAChC,MAAM,GAAG,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;AAEhC,QAAA,IAAI,GAAG,KAAK,SAAS,IAAI,GAAG,KAAK,SAAS,EAAE;YAC1C,OAAO,GAAG,KAAK,GAAG,CAAC;AACpB,SAAA;;AAGD,QAAA,OAAO,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;KACtD;;IAGD,iBAAiB,GAAA;;QAEf,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE;YAClC,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,GAAG,KAAI;AAC9B,gBAAA,GAAG,CAAC,OAAO,GAAG,KAAK,CAAC;AACtB,aAAC,CAAC,CAAC;AACJ,SAAA;AAED,QAAA,IAAI,CAAC,aAAa,GAAG,EAAE,CAAC;AACxB,QAAA,IAAI,CAAC,WAAW,GAAG,KAAK,CAAC;AACzB,QAAA,IAAI,CAAC,cAAc,GAAG,KAAK,CAAC;AAC5B,QAAA,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC;KAC/B;IAED,yBAAyB,CAAC,eAA8B,EAAE,GAAW,EAAA;QACnE,IAAI,CAAC,cAAc,CAAC;YAClB,CAAC,GAAG,GAAG,eAAe;iBACnB,MAAM,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,OAAO,CAAC;iBAC9B,GAAG,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,KAAK,CAAC;AAC7B,SAAA,CAAC,CAAC;KACJ;IAED,YAAY,GAAA;AACV,QAAA,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC,sBAAsB,EAAE,CAAC;AACxD,QAAA,IAAI,CAAC,SAAS,CAAC,SAAS,GAAG,CAAC,CAAC;QAC7B,IAAI,CAAC,WAAW,EAAE,CAAC;KACpB;IAED,eAAe,GAAA;AACb,QAAA,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,OAAO,CAAC,CAAC,GAAG,KAAI;YAC9C,MAAM,YAAY,GAAG,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,CAAC,IAAI,KAAI;AAC1D,gBAAA,OAAO,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,IAAI,IAAI,CAAC,IAAI,MAAM,GAAG,CAAC;AACtD,aAAC,CAAC,CAAC;;AAGH,YAAA,IAAI,YAAY,EAAE,SAAS,KAAK,UAAU,EAAE;;gBAE1C,MAAM,cAAc,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,IAAI,KAAI;AAChD,oBAAA,OAAO,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,IAAI,IAAI,CAAC,IAAI,MAAM,GAAG,CAAC;AACtD,iBAAC,CAAC,CAAC;;AAGH,gBAAA,MAAM,kBAAkB,GAAG,cAAc,EAAE,UAE9B,CAAC;gBACd,MAAM,aAAa,GAAG,CAAC,kBAAkB,EAAE,OAAO,IAAI,EAAE;qBACrD,MAAM,CAAC,CAAC,GAAgB,KAAK,GAAG,CAAC,OAAO,CAAC;qBACzC,GAAG,CAAC,CAAC,GAAgB,KAAK,GAAG,CAAC,KAAK,CAAC,CAAC;AACxC,gBAAA,MAAM,YAAY,GAChB,aAAa,CAAC,MAAM,GAAG,CAAC;AACtB,sBAAE,aAAa;sBACb,uBAAuB,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC,KAAK,CAAC;AAE5D,gBAAA,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,GAAG,YAAY,CAAC;;AAGvC,gBAAA,MAAM,aAAa,GAAG,KAAK,CAAC,OAAO,CAAC,YAAY,CAAC,GAAG,YAAY,GAAG,EAAE,CAAC;AACtE,gBAAA,MAAM,eAAe,GAAG,kBAAkB,EAAE,OAAO,IAAI,EAAE,CAAC;AAC1D,gBAAA,MAAM,gBAAgB,GAAG,YAAY,CAAC,UAAgC,CAAC;gBACvE,gBAAgB,CAAC,OAAO,GAAG,eAAe,CAAC,GAAG,CAAC,CAAC,IAAiB,KAAI;oBACnE,OAAO;AACL,wBAAA,GAAG,IAAI;wBACP,OAAO,EAAE,aAAa,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC;qBAC5C,CAAC;AACJ,iBAAC,CAAC,CAAC;AACJ,aAAA;AAAM,iBAAA;gBACL,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,GAAG,YAAY,EAAE,UAAU;AAChD,sBAAE,YAAY,EAAE,UAAU,CAAC,KAAK;AAC9B,wBAAA,uBAAuB,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC,KAAK;sBACrD,uBAAuB,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC,KAAK,CAAC;AAC3D,aAAA;AACH,SAAC,CAAC,CAAC;AAEH,QAAA,IAAI,CAAC,kBAAkB,GAAG,EAAE,CAAC;AAC7B,QAAA,IAAI,CAAC,SAAS,CAAC,SAAS,GAAG,CAAC,CAAC;AAC7B,QAAA,IAAI,CAAC,uBAAuB,CAAC,IAAI,EAAE,CAAC;QACpC,IAAI,CAAC,WAAW,EAAE,CAAC;KACpB;AAED,IAAA,qBAAqB,CAAC,SAAiB,EAAA;AACrC,QAAA,IAAI,CAAC,SAAS,CAAC,SAAS,GAAG,SAAS,CAAC;QACrC,IAAI,CAAC,WAAW,EAAE,CAAC;KACpB;AAED,IAAA,oBAAoB,CAAC,QAAa,EAAA;AAChC,QAAA,IAAI,CAAC,SAAS,CAAC,QAAQ,GAAG,QAAQ,CAAC;AACnC,QAAA,IAAI,CAAC,SAAS,CAAC,SAAS,GAAG,CAAC,CAAC;QAC7B,IAAI,CAAC,WAAW,EAAE,CAAC;KACpB;IAED,MAAM,WAAW,CAAC,WAAqB,EAAA;;AAErC,QAAA,IACE,WAAW;AACX,YAAA,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC;AAC9B,YAAA,IAAI,CAAC,UAAU,CAAC,MAAM,KAAK,CAAC;AAC5B,YAAA,IAAI,CAAC,SAAS,CAAC,SAAS,GAAG,CAAC,EAC5B;AACA,YAAA,IAAI,CAAC,SAAS,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC,SAAS,GAAG,CAAC,CAAC;AACzD,SAAA;AAED,QAAA,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;QACrB,IAAI,IAAI,CAAC,OAAO,EAAE;YAChB,IAAI;AACF,gBAAA,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC;AAChC,oBAAA,MAAM,EAAE,IAAI,CAAC,sBAAsB,EAAE;AACrC,oBAAA,QAAQ,EAAE;AACR,wBAAA,SAAS,EAAE,IAAI,CAAC,SAAS,CAAC,SAAS;AACnC,wBAAA,QAAQ,EAAE,IAAI,CAAC,SAAS,CAAC,QAAQ;AAClC,qBAAA;;AAED,oBAAA,IAAI,IAAI,CAAC,QAAQ,KAAK,QAAQ;0BAC1B,EAAE,IAAI,EAAE,IAAI,CAAC,sBAAsB,EAAE,EAAE;0BACvC,EAAE,CAAC;AACR,iBAAA,CAAC,CAAC;;gBAGH,IAAI,IAAI,CAAC,YAAY,EAAE;AACrB,oBAAA,IAAI,CAAC,UAAU,GAAG,CAAC,MAAM,CAAC,IAAI,IAAI,EAAE,EAAE,GAAG,CAAC,CAAC,IAAI,KAAI;wBACjD,OAAO;AACL,4BAAA,GAAG,IAAI;AACP,4BAAA,OAAO,EAAE,KAAK;yBACf,CAAC;AACJ,qBAAC,CAAC,CAAC;AACJ,iBAAA;AAAM,qBAAA;oBACL,IAAI,CAAC,UAAU,GAAG,MAAM,CAAC,IAAI,IAAI,EAAE,CAAC;AACrC,iBAAA;gBAED,IAAI,CAAC,WAAW,GAAG,MAAM,CAAC,WAAW,IAAI,IAAI,CAAC;;AAE9C,gBAAA,IAAI,IAAI,CAAC,QAAQ,KAAK,OAAO,EAAE;oBAC7B,IAAI,CAAC,qBAAqB,EAAE,CAAC;AAC9B,iBAAA;gBACD,IAAI,CAAC,SAAS,CAAC,KAAK,GAAG,MAAM,CAAC,KAAK,IAAI,CAAC,CAAC;;gBAEzC,IAAI,IAAI,CAAC,YAAY,EAAE;oBACrB,IAAI,CAAC,iBAAiB,EAAE,CAAC;AAC1B,iBAAA;AACF,aAAA;AAAC,YAAA,OAAO,KAAK,EAAE;AACd,gBAAA,OAAO,CAAC,KAAK,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;AAC9B,gBAAA,IAAI,CAAC,UAAU,GAAG,EAAE,CAAC;AACrB,gBAAA,IAAI,CAAC,SAAS,CAAC,KAAK,GAAG,CAAC,CAAC;AACzB,gBAAA,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;AACzB,aAAA;AAAS,oBAAA;AACR,gBAAA,IAAI,CAAC,QAAQ,GAAG,KAAK,CAAC;AACtB,gBAAA,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC;AAC/B,aAAA;AACF,SAAA;AAAM,aAAA;AACL,YAAA,OAAO,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC;AAClC,YAAA,IAAI,CAAC,QAAQ,GAAG,KAAK,CAAC;AACvB,SAAA;KACF;;IAGD,YAAY,CAAC,OAAe,EAAE,SAAsC,EAAA;;AAElE,QAAA,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE;AACtB,YAAA,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,CAAC,GAAG,KAAI;gBACzC,IAAI,GAAG,KAAK,OAAO;AAAE,oBAAA,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC;AACjD,aAAC,CAAC,CAAC;AACJ,SAAA;AACD,QAAA,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,GAAG,SAAS,CAAC;;AAGnC,QAAA,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,OAAO,CAAC,CAAC;AACrE,QAAA,IAAI,SAAS,EAAE;AACb,YAAA,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;AAClC,SAAA;AAED,QAAA,IAAI,IAAI,CAAC,QAAQ,KAAK,OAAO,EAAE;YAC7B,IAAI,CAAC,qBAAqB,EAAE,CAAC;AAC9B,SAAA;AAAM,aAAA;;YAEL,IAAI,CAAC,WAAW,EAAE,CAAC;AACpB,SAAA;KACF;AAED,IAAA,YAAY,CAAC,OAAe,EAAA;QAC1B,OAAO,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,IAAI,CAAC;KACvC;AAED,IAAA,mBAAmB,CAAC,IAAS,EAAA;AAC3B,QAAA,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC;QAC9B,IAAI,IAAI,CAAC,YAAY,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,EAAE;;AAElD,YAAA,IAAI,CAAC,aAAa,GAAG,EAAE,CAAC;YACxB,MAAM,WAAW,GAAG,CAAC,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;AAC7C,YAAA,IAAI,CAAC,gBAAgB,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC;AAC1C,SAAA;QACD,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;KAC9C;AAED,IAAA,qBAAqB,CAAC,IAAS,EAAA;AAC7B,QAAA,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC;QAC9B,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;KAChD;IAED,2BAA2B,GAAA;QACzB,IAAI,CAAC,mBAAmB,EAAE,CAAC;KAC5B;;IAGD,uBAAuB,CAAC,KAAY,EAAE,MAAsB,EAAA;QAC1D,MAAM,QAAQ,GAAG,MAAM,CAAC,UAAU,EAAE,IAAI,IAAI,MAAM,CAAC,IAAI,CAAC;;QAGxD,IAAI,CAAC,IAAI,CAAC,wBAAwB,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE;AAChD,YAAA,MAAM,WAAW,GAAG,QAAQ,CAAC,CAAC,GAAU,KAAI;;gBAE1C,MAAM,aAAa,GAAG,IAAI,CAAC,mBAAmB,CAAC,IAAI,CACjD,CAAC,GAAG,KAAK,CAAC,GAAG,CAAC,UAAU,EAAE,IAAI,IAAI,GAAG,CAAC,IAAI,MAAM,QAAQ,CACzD,CAAC;AACF,gBAAA,IAAI,aAAa,EAAE;AACjB,oBAAA,IAAI,CAAC,6BAA6B,CAAC,GAAG,EAAE,aAAa,CAAC,CAAC;AACxD,iBAAA;AACH,aAAC,EAAE,GAAG,CAAC,CAAC;YACR,IAAI,CAAC,wBAAwB,CAAC,GAAG,CAAC,QAAQ,EAAE,WAAW,CAAC,CAAC;AAC1D,SAAA;;QAGD,MAAM,WAAW,GAAG,IAAI,CAAC,wBAAwB,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;AAChE,QAAA,IAAI,WAAW,EAAE;YACf,WAAW,CAAC,KAAK,CAAC,CAAC;AACpB,SAAA;KACF;;AAGD,IAAA,yBAAyB,CAAC,MAAsB,EAAA;QAC9C,MAAM,QAAQ,GAAG,MAAM,CAAC,UAAU,EAAE,IAAI,IAAI,MAAM,CAAC,IAAI,CAAC;QACxD,OAAO,IAAI,CAAC,wBAAwB,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC;KACtD;AAED,IAAA,aAAa,CAAC,MAAsB,EAAA;QAClC,OAAO,MAAM,CAAC,UAAU,CAAC;KAC1B;;AAGD,IAAA,gBAAgB,CAAC,IAAwB,EAAA;AACvC,QAAA,IAAI,CAAC,IAAI;AAAE,YAAA,OAAO,IAAI,CAAC;QACvB,OAAO,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC;KAC/C;;AAGD,IAAA,oBAAoB,CAAC,MAAsB,EAAA;AACzC,QAAA,MAAM,SAAS,GAAG,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC,IAAI,IAAI,MAAM,CAAC,IAAI,CAAC;QACjE,OAAO,CAAA,UAAA,EAAa,SAAS,CAAA,UAAA,CAAY,CAAC;KAC3C;AAxrCU,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,kBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,iBAAiB,kBA0JlB,uBAAuB,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;4FA1JtB,iBAAiB,EAAA,QAAA,EAAA,eAAA,EAAA,MAAA,EAAA,EAAA,aAAA,EAAA,eAAA,EAAA,YAAA,EAAA,cAAA,EAAA,KAAA,EAAA,OAAA,EAAA,SAAA,EAAA,WAAA,EAAA,QAAA,EAAA,UAAA,EAAA,OAAA,EAAA,SAAA,EAAA,aAAA,EAAA,eAAA,EAAA,aAAA,EAAA,eAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,YAAA,EAAA,cAAA,EAAA,UAAA,EAAA,YAAA,EAAA,UAAA,EAAA,YAAA,EAAA,aAAA,EAAA,eAAA,EAAA,UAAA,EAAA,YAAA,EAAA,QAAA,EAAA,UAAA,EAAA,aAAA,EAAA,eAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,eAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,WAAA,EAAA,aAAA,EAAA,QAAA,EAAA,UAAA,EAAA,iBAAA,EAAA,mBAAA,EAAA,YAAA,EAAA,cAAA,EAAA,YAAA,EAAA,cAAA,EAAA,WAAA,EAAA,aAAA,EAAA,gBAAA,EAAA,kBAAA,EAAA,kBAAA,EAAA,oBAAA,EAAA,iBAAA,EAAA,mBAAA,EAAA,EAAA,OAAA,EAAA,EAAA,UAAA,EAAA,YAAA,EAAA,YAAA,EAAA,cAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,uBAAA,EAAA,yBAAA,EAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,eAAA,EAAA,kBAAA,EAAA,EAAA,EAAA,OAAA,EAAA,CAAA,EAAA,YAAA,EAAA,cAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,WAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,iBAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,cAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,cAAA,EAAA,SAAA,EA2EX,WAAW,EAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EC9G9B,mofAyXA,EAAA,MAAA,EAAA,CAAA,44EAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,cAAA,EAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,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,EAAAL,IAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,8MAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,eAAA,EAAA,QAAA,EAAA,2CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,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,cAAA,EAAA,QAAA,EAAA,+CAAA,EAAA,MAAA,EAAA,CAAA,QAAA,EAAA,QAAA,EAAA,SAAA,EAAA,UAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,MAAA,EAAA,MAAA,EAAA,MAAA,EAAA,MAAA,EAAA,OAAA,CAAA,EAAA,QAAA,EAAA,CAAA,OAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,cAAA,EAAA,QAAA,EAAA,8BAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,WAAA,EAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,OAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAI,IAAA,CAAA,mBAAA,EAAA,QAAA,EAAA,cAAA,EAAA,QAAA,EAAA,CAAA,YAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,eAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,YAAA,EAAA,WAAA,EAAA,gBAAA,EAAA,eAAA,EAAA,cAAA,EAAA,aAAA,CAAA,EAAA,QAAA,EAAA,CAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,sBAAA,EAAA,QAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,CAAA,cAAA,EAAA,cAAA,EAAA,YAAA,EAAA,iBAAA,EAAA,SAAA,EAAA,YAAA,EAAA,mBAAA,EAAA,eAAA,EAAA,kBAAA,CAAA,EAAA,QAAA,EAAA,CAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,IAAA,CAAA,iBAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,QAAA,EAAA,UAAA,EAAA,kBAAA,EAAA,sBAAA,EAAA,qBAAA,EAAA,4BAAA,EAAA,iBAAA,EAAA,mBAAA,EAAA,eAAA,EAAA,aAAA,EAAA,eAAA,EAAA,kBAAA,EAAA,kBAAA,EAAA,cAAA,EAAA,aAAA,EAAA,cAAA,EAAA,wBAAA,EAAA,mBAAA,EAAA,qBAAA,EAAA,oBAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,aAAA,EAAA,cAAA,EAAA,cAAA,EAAA,cAAA,EAAA,WAAA,EAAA,aAAA,EAAA,wBAAA,EAAA,gBAAA,EAAA,YAAA,EAAA,QAAA,EAAA,eAAA,EAAA,YAAA,EAAA,WAAA,EAAA,aAAA,CAAA,EAAA,OAAA,EAAA,CAAA,YAAA,EAAA,kBAAA,EAAA,cAAA,EAAA,QAAA,EAAA,SAAA,CAAA,EAAA,QAAA,EAAA,CAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,IAAA,CAAA,gBAAA,EAAA,QAAA,EAAA,sBAAA,EAAA,MAAA,EAAA,CAAA,aAAA,EAAA,SAAA,EAAA,SAAA,EAAA,QAAA,EAAA,QAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,eAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,IAAA,CAAA,gBAAA,EAAA,QAAA,EAAA,oCAAA,EAAA,MAAA,EAAA,CAAA,cAAA,EAAA,QAAA,EAAA,eAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,IAAA,CAAA,iBAAA,EAAA,QAAA,EAAA,iCAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,SAAA,EAAA,UAAA,EAAA,WAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,SAAA,EAAA,QAAA,CAAA,EAAA,QAAA,EAAA,CAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,IAAA,CAAA,2BAAA,EAAA,QAAA,EAAA,qIAAA,EAAA,MAAA,EAAA,CAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,GAAA,CAAA,eAAA,EAAA,QAAA,EAAA,2EAAA,EAAA,MAAA,EAAA,CAAA,iBAAA,CAAA,EAAA,QAAA,EAAA,CAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,sBAAA,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,YAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,uBAAA,EAAA,QAAA,EAAA,sBAAA,EAAA,MAAA,EAAA,CAAA,aAAA,EAAA,cAAA,EAAA,YAAA,EAAA,YAAA,EAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,GAAA,CAAA,gBAAA,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,eAAA,EAAA,aAAA,EAAA,cAAA,EAAA,SAAA,EAAA,UAAA,EAAA,YAAA,EAAA,mBAAA,EAAA,mBAAA,EAAA,sBAAA,EAAA,sBAAA,EAAA,qBAAA,EAAA,gBAAA,EAAA,aAAA,EAAA,YAAA,EAAA,SAAA,EAAA,eAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,sBAAA,EAAA,UAAA,EAAA,kBAAA,EAAA,mBAAA,EAAA,gBAAA,EAAA,kBAAA,EAAA,WAAA,EAAA,iBAAA,EAAA,oBAAA,EAAA,YAAA,EAAA,QAAA,EAAA,mBAAA,EAAA,oBAAA,EAAA,mBAAA,EAAA,UAAA,CAAA,EAAA,OAAA,EAAA,CAAA,kBAAA,EAAA,mBAAA,EAAA,eAAA,EAAA,yBAAA,EAAA,sBAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,GAAA,CAAA,kBAAA,EAAA,QAAA,EAAA,qHAAA,EAAA,MAAA,EAAA,CAAA,aAAA,EAAA,kBAAA,EAAA,aAAA,EAAA,gBAAA,EAAA,kBAAA,EAAA,WAAA,EAAA,UAAA,EAAA,YAAA,EAAA,YAAA,EAAA,cAAA,EAAA,gBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,iBAAA,EAAA,mBAAA,EAAA,gBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,GAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,gFAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,GAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,SAAA,EAAA,SAAA,EAAA,SAAA,EAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,GAAA,CAAA,kBAAA,EAAA,QAAA,EAAA,0HAAA,EAAA,MAAA,EAAA,CAAA,WAAA,EAAA,YAAA,EAAA,iBAAA,EAAA,cAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,UAAA,CAAA,EAAA,OAAA,EAAA,CAAA,iBAAA,EAAA,gBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,GAAA,CAAA,gBAAA,EAAA,QAAA,EAAA,6BAAA,EAAA,OAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,GAAA,CAAA,gBAAA,EAAA,QAAA,EAAA,OAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,GAAA,CAAA,aAAA,EAAA,QAAA,EAAA,+GAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,GAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,+CAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,QAAA,EAAA,SAAA,EAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,GAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,yBAAA,EAAA,MAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,GAAA,CAAA,sBAAA,EAAA,QAAA,EAAA,0EAAA,EAAA,MAAA,EAAA,CAAA,cAAA,EAAA,WAAA,EAAA,YAAA,EAAA,iBAAA,EAAA,gBAAA,EAAA,oBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,iBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,mBAAA,EAAA,QAAA,EAAA,iBAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,GAAA,CAAA,qBAAA,EAAA,QAAA,EAAA,8EAAA,EAAA,MAAA,EAAA,CAAA,cAAA,EAAA,aAAA,EAAA,YAAA,EAAA,cAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,UAAA,EAAA,eAAA,EAAA,cAAA,EAAA,qBAAA,EAAA,QAAA,EAAA,UAAA,EAAA,UAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,qBAAA,EAAA,aAAA,EAAA,QAAA,EAAA,WAAA,EAAA,UAAA,EAAA,sBAAA,EAAA,aAAA,EAAA,cAAA,EAAA,YAAA,EAAA,MAAA,EAAA,aAAA,EAAA,kBAAA,EAAA,YAAA,CAAA,EAAA,OAAA,EAAA,CAAA,iBAAA,EAAA,oBAAA,EAAA,QAAA,EAAA,gBAAA,CAAA,EAAA,QAAA,EAAA,CAAA,cAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,EAAA,CAAA,wBAAA,EAAA,QAAA,EAAA,mBAAA,EAAA,MAAA,EAAA,CAAA,YAAA,CAAA,EAAA,QAAA,EAAA,CAAA,iBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,GAAA,CAAA,uBAAA,EAAA,QAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,oBAAA,EAAA,gBAAA,EAAA,4BAAA,EAAA,YAAA,EAAA,aAAA,EAAA,cAAA,CAAA,EAAA,OAAA,EAAA,CAAA,iBAAA,CAAA,EAAA,QAAA,EAAA,CAAA,gBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,GAAA,CAAA,6BAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,SAAA,EAAA,YAAA,CAAA,EAAA,OAAA,EAAA,CAAA,iBAAA,EAAA,cAAA,CAAA,EAAA,QAAA,EAAA,CAAA,cAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,GAAA,CAAA,8BAAA,EAAA,QAAA,EAAA,iDAAA,EAAA,MAAA,EAAA,CAAA,gBAAA,CAAA,EAAA,QAAA,EAAA,CAAA,uBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,GAAA,CAAA,sBAAA,EAAA,QAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,CAAA,QAAA,EAAA,OAAA,EAAA,OAAA,EAAA,UAAA,EAAA,aAAA,EAAA,iBAAA,EAAA,eAAA,EAAA,UAAA,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,YAAA,EAAA,YAAA,EAAA,aAAA,EAAA,cAAA,EAAA,aAAA,CAAA,EAAA,OAAA,EAAA,CAAA,QAAA,EAAA,SAAA,CAAA,EAAA,QAAA,EAAA,CAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,GAAA,CAAA,kBAAA,EAAA,QAAA,EAAA,cAAA,EAAA,MAAA,EAAA,CAAA,gBAAA,EAAA,uBAAA,EAAA,YAAA,EAAA,kBAAA,EAAA,oBAAA,EAAA,iBAAA,EAAA,kBAAA,EAAA,0BAAA,EAAA,0BAAA,EAAA,2BAAA,EAAA,uBAAA,EAAA,6BAAA,EAAA,gBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,wBAAA,CAAA,EAAA,QAAA,EAAA,CAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,uBAAA,EAAA,QAAA,EAAA,qBAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,iBAAA,EAAA,WAAA,CAAA,EAAA,OAAA,EAAA,CAAA,cAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,2BAAA,EAAA,QAAA,EAAA,0BAAA,EAAA,MAAA,EAAA,CAAA,WAAA,EAAA,OAAA,EAAA,OAAA,CAAA,EAAA,OAAA,EAAA,CAAA,aAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA;;4FDtVa,iBAAiB,EAAA,UAAA,EAAA,CAAA;kBAL7B,SAAS;+BACE,eAAe,EAAA,QAAA,EAAA,mofAAA,EAAA,MAAA,EAAA,CAAA,44EAAA,CAAA,EAAA,CAAA;;0BA6JtB,QAAQ;;0BACR,MAAM;2BAAC,uBAAuB,CAAA;4CAzJxB,aAAa,EAAA,CAAA;sBAArB,KAAK;gBAEG,YAAY,EAAA,CAAA;sBAApB,KAAK;gBAEG,KAAK,EAAA,CAAA;sBAAb,KAAK;gBAEG,SAAS,EAAA,CAAA;sBAAjB,KAAK;gBAEG,QAAQ,EAAA,CAAA;sBAAhB,KAAK;gBAEG,OAAO,EAAA,CAAA;sBAAf,KAAK;gBAEG,aAAa,EAAA,CAAA;sBAArB,KAAK;gBAEG,aAAa,EAAA,CAAA;sBAArB,KAAK;gBAEG,cAAc,EAAA,CAAA;sBAAtB,KAAK;gBAEG,YAAY,EAAA,CAAA;sBAApB,KAAK;gBAEG,UAAU,EAAA,CAAA;sBAAlB,KAAK;gBAEG,UAAU,EAAA,CAAA;sBAAlB,KAAK;gBAEG,aAAa,EAAA,CAAA;sBAArB,KAAK;gBAEG,UAAU,EAAA,CAAA;sBAAlB,KAAK;gBAEG,QAAQ,EAAA,CAAA;sBAAhB,KAAK;gBAEG,aAAa,EAAA,CAAA;sBAArB,KAAK;gBAEG,cAAc,EAAA,CAAA;sBAAtB,KAAK;gBAEG,eAAe,EAAA,CAAA;sBAAvB,KAAK;gBAEG,MAAM,EAAA,CAAA;sBAAd,KAAK;gBAEG,OAAO,EAAA,CAAA;sBAAf,KAAK;gBAEG,WAAW,EAAA,CAAA;sBAAnB,KAAK;gBAGG,QAAQ,EAAA,CAAA;sBAAhB,KAAK;gBAEG,iBAAiB,EAAA,CAAA;sBAAzB,KAAK;gBAGG,YAAY,EAAA,CAAA;sBAApB,KAAK;gBAEG,YAAY,EAAA,CAAA;sBAApB,KAAK;gBAGG,WAAW,EAAA,CAAA;sBAAnB,KAAK;gBAEG,gBAAgB,EAAA,CAAA;sBAAxB,KAAK;gBAGG,kBAAkB,EAAA,CAAA;sBAA1B,KAAK;gBAEG,iBAAiB,EAAA,CAAA;sBAAzB,KAAK;gBAEI,UAAU,EAAA,CAAA;sBAAnB,MAAM;gBAEG,YAAY,EAAA,CAAA;sBAArB,MAAM;gBAEG,cAAc,EAAA,CAAA;sBAAvB,MAAM;gBAEG,uBAAuB,EAAA,CAAA;sBAAhC,MAAM;gBAEoB,YAAY,EAAA,CAAA;sBAAtC,YAAY;uBAAC,WAAW,CAAA;gBAEK,eAAe,EAAA,CAAA;sBAA5C,YAAY;uBAAC,cAAc,CAAA;gBAEE,YAAY,EAAA,CAAA;sBAAzC,eAAe;uBAAC,WAAW,CAAA;gBA8D5B,cAAc,EAAA,CAAA;sBADb,YAAY;uBAAC,eAAe,CAAA;;;MEtJlB,mBAAmB,CAAA;wGAAnB,mBAAmB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,QAAA,EAAA,CAAA,CAAA;yGAAnB,mBAAmB,EAAA,YAAA,EAAA,CAJf,sBAAsB,CAAA,EAAA,OAAA,EAAA,CAPnC,YAAY;YACZ,WAAW;YACX,gBAAgB;YAChB,YAAY;YACZ,YAAY;AACZ,YAAA,mBAAmB,aAIX,sBAAsB,CAAA,EAAA,CAAA,CAAA;AAErB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,mBAAmB,YAX5B,YAAY;YACZ,WAAW;YACX,gBAAgB;YAChB,YAAY;YACZ,YAAY;YACZ,mBAAmB,CAAA,EAAA,CAAA,CAAA;;4FAMV,mBAAmB,EAAA,UAAA,EAAA,CAAA;kBAb/B,QAAQ;AAAC,YAAA,IAAA,EAAA,CAAA;AACR,oBAAA,OAAO,EAAE;wBACP,YAAY;wBACZ,WAAW;wBACX,gBAAgB;wBAChB,YAAY;wBACZ,YAAY;wBACZ,mBAAmB;AACpB,qBAAA;oBACD,YAAY,EAAE,CAAC,sBAAsB,CAAC;AACtC,oBAAA,SAAS,EAAE,EAAE;oBACb,OAAO,EAAE,CAAC,sBAAsB,CAAC;AAClC,iBAAA,CAAA;;;MCbY,eAAe,CAAA;wGAAf,eAAe,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,QAAA,EAAA,CAAA,CAAA;yGAAf,eAAe,EAAA,YAAA,EAAA,CAHX,kBAAkB,CAAA,EAAA,OAAA,EAAA,CACvB,kBAAkB,CAAA,EAAA,CAAA,CAAA;yGAEjB,eAAe,EAAA,CAAA,CAAA;;4FAAf,eAAe,EAAA,UAAA,EAAA,CAAA;kBAJ3B,QAAQ;AAAC,YAAA,IAAA,EAAA,CAAA;oBACR,YAAY,EAAE,CAAC,kBAAkB,CAAC;oBAClC,OAAO,EAAE,CAAC,kBAAkB,CAAC;AAC9B,iBAAA,CAAA;;;MCkBY,gBAAgB,CAAA;wGAAhB,gBAAgB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,QAAA,EAAA,CAAA,CAAA;yGAAhB,gBAAgB,EAAA,YAAA,EAAA,CAJZ,mBAAmB,CAAA,EAAA,OAAA,EAAA,CARhC,YAAY;YACZ,WAAW;YACX,YAAY;YACZ,aAAa;YACb,eAAe;YACf,YAAY;AACZ,YAAA,eAAe,aAIP,mBAAmB,CAAA,EAAA,CAAA,CAAA;AAElB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,gBAAgB,YAZzB,YAAY;YACZ,WAAW;YACX,YAAY;YACZ,aAAa;YACb,eAAe;YACf,YAAY;YACZ,eAAe,CAAA,EAAA,CAAA,CAAA;;4FAMN,gBAAgB,EAAA,UAAA,EAAA,CAAA;kBAd5B,QAAQ;AAAC,YAAA,IAAA,EAAA,CAAA;AACR,oBAAA,OAAO,EAAE;wBACP,YAAY;wBACZ,WAAW;wBACX,YAAY;wBACZ,aAAa;wBACb,eAAe;wBACf,YAAY;wBACZ,eAAe;AAChB,qBAAA;oBACD,YAAY,EAAE,CAAC,mBAAmB,CAAC;AACnC,oBAAA,SAAS,EAAE,EAAE;oBACb,OAAO,EAAE,CAAC,mBAAmB,CAAC;AAC/B,iBAAA,CAAA;;;MCAY,oBAAoB,CAAA;wGAApB,oBAAoB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,QAAA,EAAA,CAAA,CAAA;yGAApB,oBAAoB,EAAA,YAAA,EAAA,CAJhB,uBAAuB,CAAA,EAAA,OAAA,EAAA,CARpC,YAAY;YACZ,WAAW;YACX,gBAAgB;YAChB,YAAY;YACZ,YAAY;YACZ,mBAAmB;AACnB,YAAA,aAAa,aAIL,uBAAuB,CAAA,EAAA,CAAA,CAAA;AAEtB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,oBAAoB,YAZ7B,YAAY;YACZ,WAAW;YACX,gBAAgB;YAChB,YAAY;YACZ,YAAY;YACZ,mBAAmB;YACnB,aAAa,CAAA,EAAA,CAAA,CAAA;;4FAMJ,oBAAoB,EAAA,UAAA,EAAA,CAAA;kBAdhC,QAAQ;AAAC,YAAA,IAAA,EAAA,CAAA;AACR,oBAAA,OAAO,EAAE;wBACP,YAAY;wBACZ,WAAW;wBACX,gBAAgB;wBAChB,YAAY;wBACZ,YAAY;wBACZ,mBAAmB;wBACnB,aAAa;AACd,qBAAA;oBACD,YAAY,EAAE,CAAC,uBAAuB,CAAC;AACvC,oBAAA,SAAS,EAAE,EAAE;oBACb,OAAO,EAAE,CAAC,uBAAuB,CAAC;AACnC,iBAAA,CAAA;;;MC+CY,cAAc,CAAA;wGAAd,cAAc,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,QAAA,EAAA,CAAA,CAAA;AAAd,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,cAAc,iBAVV,iBAAiB,EAAE,uBAAuB,EAAE,2BAA2B,aA3BpF,YAAY;YACZ,WAAW;YACX,gBAAgB;YAChB,YAAY;YACZ,YAAY;YACZ,cAAc;YACd,aAAa;YACb,YAAY;YACZ,aAAa;YACb,mBAAmB;YACnB,eAAe;YACf,YAAY;YACZ,cAAc;YACd,mBAAmB;YACnB,oBAAoB;YACpB,aAAa;YACb,gBAAgB;YAChB,kBAAkB;YAClB,aAAa;YACb,gBAAgB;YAChB,kBAAkB;YAClB,cAAc;YACd,gBAAgB;YAChB,oBAAoB;YACpB,mBAAmB;AACnB,YAAA,eAAe,aAUP,iBAAiB,CAAA,EAAA,CAAA,CAAA;AAEhB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,cAAc,EATd,SAAA,EAAA;AACT,YAAA;;AAEE,gBAAA,OAAO,EAAE,uBAAuB;AAChC,gBAAA,QAAQ,EAAE,IAAI;AACf,aAAA;AACF,SAAA,EAAA,OAAA,EAAA,CAlCC,YAAY;YACZ,WAAW;YACX,gBAAgB;YAChB,YAAY;YACZ,YAAY;YACZ,cAAc;YACd,aAAa;YACb,YAAY;YACZ,aAAa;YACb,mBAAmB;YACnB,eAAe;YACf,YAAY;YACZ,cAAc;YACd,mBAAmB;YACnB,oBAAoB;YACpB,aAAa;YACb,gBAAgB;YAChB,kBAAkB;YAClB,aAAa;YACb,gBAAgB;YAChB,kBAAkB;YAClB,cAAc;YACd,gBAAgB;YAChB,oBAAoB;YACpB,mBAAmB;YACnB,eAAe,CAAA,EAAA,CAAA,CAAA;;4FAYN,cAAc,EAAA,UAAA,EAAA,CAAA;kBAvC1B,QAAQ;AAAC,YAAA,IAAA,EAAA,CAAA;AACR,oBAAA,OAAO,EAAE;wBACP,YAAY;wBACZ,WAAW;wBACX,gBAAgB;wBAChB,YAAY;wBACZ,YAAY;wBACZ,cAAc;wBACd,aAAa;wBACb,YAAY;wBACZ,aAAa;wBACb,mBAAmB;wBACnB,eAAe;wBACf,YAAY;wBACZ,cAAc;wBACd,mBAAmB;wBACnB,oBAAoB;wBACpB,aAAa;wBACb,gBAAgB;wBAChB,kBAAkB;wBAClB,aAAa;wBACb,gBAAgB;wBAChB,kBAAkB;wBAClB,cAAc;wBACd,gBAAgB;wBAChB,oBAAoB;wBACpB,mBAAmB;wBACnB,eAAe;AAChB,qBAAA;AACD,oBAAA,YAAY,EAAE,CAAC,iBAAiB,EAAE,uBAAuB,EAAE,2BAA2B,CAAC;AACvF,oBAAA,SAAS,EAAE;AACT,wBAAA;;AAEE,4BAAA,OAAO,EAAE,uBAAuB;AAChC,4BAAA,QAAQ,EAAE,IAAI;AACf,yBAAA;AACF,qBAAA;oBACD,OAAO,EAAE,CAAC,iBAAiB,CAAC;AAC7B,iBAAA,CAAA;;;AC/DD;;;AAGG;MAEU,6BAA6B,CAAA;AAGpB,IAAA,IAAA,CAAA;IAFH,aAAa,GAAG,mCAAmC,CAAC;AAErE,IAAA,WAAA,CAAoB,IAAgB,EAAA;QAAhB,IAAI,CAAA,IAAA,GAAJ,IAAI,CAAY;KAAI;IAExC,iBAAiB,GAAA;AACf,QAAA,OAAO,aAAa,CAAC,IAAI,CAAC,IAAI;aAC3B,IAAI,CAAW,IAAI,CAAC,aAAa,EAAE,EAAE,QAAQ,EAAE,gBAAgB,EAAE,CAAC,CAAC;AACnE,aAAA,IAAI,CAAC,CAAC,IAAc,KAAI;YACvB,MAAM,OAAO,GAAwB,EAAE,CAAC;;AAExC,YAAA,OAAO,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,CAAC;;AAEvC,YAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;gBACpC,OAAO,CAAC,IAAI,CAAC;AACX,oBAAA,KAAK,EAAE,IAAI,CAAC,CAAC,CAAC;AACd,oBAAA,KAAK,EAAE,IAAI,CAAC,CAAC,CAAC;AACf,iBAAA,CAAC,CAAC;AACJ,aAAA;AACD,YAAA,OAAO,OAAO,CAAC;AACjB,SAAC,CAAC;aACD,KAAK,CAAC,MAAK;;AAEV,YAAA,OAAO,EAAE,CAAC;AACZ,SAAC,CAAC,CAAC;KACN;wGAzBU,6BAA6B,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAd,IAAA,CAAA,UAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;4GAA7B,6BAA6B,EAAA,CAAA,CAAA;;4FAA7B,6BAA6B,EAAA,UAAA,EAAA,CAAA;kBADzC,UAAU;;;AC0EX;MAGa,eAAe,CAAA;AAwBN,IAAA,EAAA,CAAA;;IAtBpB,SAAS,GAAqC,EAAE,CAAC;IACjD,cAAc,GAAmB,QAAQ,CAAC;;IAGlC,iBAAiB,GAA4B,EAAE,CAAC;IAChD,UAAU,GAAW,OAAO,CAAC;IAC7B,UAAU,GAAW,OAAO,CAAC;IAC7B,cAAc,GAAqC,EAAE,CAAC;IACtD,iBAAiB,GAGrB,EAAE,CAAC;IACC,WAAW,GAAG,WAAW,CAAC;AACjB,IAAA,oBAAoB,GAAuB;AAC1D,QAAA,QAAQ,EAAE,SAAS;AACnB,QAAA,SAAS,EAAE,QAAQ;AACnB,QAAA,SAAS,EAAE,QAAQ;AACnB,QAAA,KAAK,EAAE,YAAY;AACnB,QAAA,OAAO,EAAE,SAAS;KACnB,CAAC;;AAGF,IAAA,WAAA,CAAoB,EAAsB,EAAA;QAAtB,IAAE,CAAA,EAAA,GAAF,EAAE,CAAoB;KAAI;;;AAKtC,IAAA,iBAAiB,CACvB,MAAqC,EAAA;AAErC,QAAA,QACE,OAAO,MAAM,KAAK,QAAQ;AAC1B,YAAA,MAAM,KAAK,IAAI;AACf,YAAA,MAAM,IAAI,MAAM;AAChB,YAAA,MAAM,CAAC,IAAI,KAAK,OAAO,EACvB;KACH;;IAGO,qBAAqB,CAC3B,MAAkB,EAClB,QAAkB,EAAA;QAElB,MAAM,WAAW,GAAwB,EAAE,CAAC;AAE5C,QAAA,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,EAAE,WAAW,CAAC,KAAI;AACpD,YAAA,IAAI,IAAI,CAAC,iBAAiB,CAAC,WAAW,CAAC,EAAE;;AAEvC,gBAAA,WAAW,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,qBAAqB,CAC3C,WAAW,CAAC,MAAM,EAClB,WAAW,CAAC,QAAQ,IAAI,QAAQ,CACjC,CAAC;AACH,aAAA;AAAM,iBAAA;;gBAEL,WAAW,CAAC,GAAG,CAAC,GAAG;AACjB,oBAAA;wBACE,KAAK,EAAE,WAAW,CAAC,KAAK;AACxB,wBAAA,QAAQ,EAAE,WAAW,CAAC,QAAQ,IAAI,QAAQ,IAAI,KAAK;AACpD,qBAAA;AACD,oBAAA,WAAW,CAAC,UAAU,IAAI,IAAI,EAAE;iBACjC,CAAC;AACH,aAAA;AACH,SAAC,CAAC,CAAC;QAEH,OAAO,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;KACnC;;AAGD,IAAA,eAAe,CACb,IAAY,EACZ,MAAkB,EAClB,OAAsD,EAAA;QAEtD,MAAM,WAAW,GAAwB,EAAE,CAAC;AAC5C,QAAA,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC;AAElC,QAAA,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,EAAE,WAAW,CAAC,KAAI;AACpD,YAAA,IAAI,IAAI,CAAC,iBAAiB,CAAC,WAAW,CAAC,EAAE;;AAEvC,gBAAA,MAAM,WAAW,GAAG,IAAI,CAAC,qBAAqB,CAC5C,WAAW,CAAC,MAAM,EAClB,WAAW,CAAC,QAAQ,CACrB,CAAC;AACF,gBAAA,WAAW,CAAC,GAAG,CAAC,GAAG,WAAW,CAAC;;gBAG/B,IAAI,WAAW,CAAC,aAAa,EAAE;AAC7B,oBAAA,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,GAAG,WAAW,CAAC,aAAa,CAAC;AAC/D,iBAAA;AACF,aAAA;AAAM,iBAAA;;gBAEL,WAAW,CAAC,GAAG,CAAC,GAAG;AACjB,oBAAA;wBACE,KAAK,EAAE,WAAW,CAAC,KAAK;AACxB,wBAAA,QAAQ,EAAE,WAAW,CAAC,QAAQ,IAAI,KAAK;AACxC,qBAAA;AACD,oBAAA,WAAW,CAAC,UAAU,IAAI,IAAI,EAAE;iBACjC,CAAC;gBACF,IAAI,WAAW,CAAC,aAAa,EAAE;AAC7B,oBAAA,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,GAAG,WAAW,CAAC,aAAa,CAAC;AAC/D,iBAAA;AACF,aAAA;AACH,SAAC,CAAC,CAAC;QAEH,IAAI,OAAO,EAAE,UAAU,EAAE;AACvB,YAAA,IAAI,CAAC,UAAU,GAAG,OAAO,CAAC,UAAU,CAAC;AACtC,SAAA;QACD,IAAI,OAAO,EAAE,UAAU,EAAE;AACvB,YAAA,IAAI,CAAC,UAAU,GAAG,OAAO,CAAC,UAAU,CAAC;AACtC,SAAA;AACD,QAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;AAClD,QAAA,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;AACpC,QAAA,IAAI,CAAC,uBAAuB,CAAC,IAAI,CAAC,CAAC;AACnC,QAAA,OAAO,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;KAC7B;;;IAKD,cAAc,CAAC,IAAY,EAAE,KAAW,EAAA;QACtC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC;KACpC;;AAGD,IAAA,gBAAgB,CAAC,IAAY,EAAA;QAC3B,OAAO,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,IAAI,KAAK,CAAC;KAC9C;;AAGD,IAAA,OAAO,CAAC,KAAe,EAAA;AACrB,QAAA,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,KAAI;;AAErB,YAAA,IAAI,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,EAAE;AAChC,gBAAA,OAAO,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC;AACrC,aAAA;;AAGD,YAAA,IAAI,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,EAAE;AAChC,gBAAA,OAAO,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC;AACrC,aAAA;;AAGD,YAAA,IAAI,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE;AACxB,gBAAA,OAAO,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;AAC7B,aAAA;AACH,SAAC,CAAC,CAAC;KACJ;;IAGO,kBAAkB,CACxB,SAA2B,EAC3B,IAAY,EAAA;QAEZ,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE;AAC/B,YAAA,OAAO,SAAS,CAAC;AAClB,SAAA;QAED,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;QACjE,IAAI,YAAY,GAA2B,SAAS,CAAC;AAErD,QAAA,KAAK,MAAM,IAAI,IAAI,SAAS,EAAE;YAC5B,IAAI,CAAC,YAAY,IAAI,EAAE,YAAY,YAAY,gBAAgB,CAAC,EAAE;AAChE,gBAAA,OAAO,IAAI,CAAC;AACb,aAAA;AACD,YAAA,YAAY,GAAG,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;YACtC,IAAI,CAAC,YAAY,IAAI,EAAE,YAAY,YAAY,gBAAgB,CAAC,EAAE;AAChE,gBAAA,OAAO,IAAI,CAAC;AACb,aAAA;AACF,SAAA;QAED,OAAO,YAAY,YAAY,gBAAgB,GAAG,YAAY,GAAG,IAAI,CAAC;KACvE;;AAGD,IAAA,eAAe,CACb,QAAgB,EAChB,YAAwB,EACxB,OAAgC,EAAA;AAEhC,QAAA,MAAM,MAAM,GAA0B;AACpC,YAAA,OAAO,EAAE,IAAI;AACb,YAAA,KAAK,EAAE,EAAE;AACT,YAAA,MAAM,EAAE,EAAE;SACX,CAAC;;QAGF,MAAM,aAAa,GAAG,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;QAC/C,IAAI,CAAC,aAAa,EAAE;;YAElB,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,OAAO,CAAC,CAAC,SAAS,KAAI;AAC9C,gBAAA,MAAM,KAAK,GAAG,CAAS,MAAA,EAAA,QAAQ,aAAa,CAAC;AAC7C,gBAAA,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC;oBACjB,SAAS;oBACT,KAAK;AACN,iBAAA,CAAC,CAAC;gBACH,OAAO,EAAE,YAAY,GAAG,SAAS,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC;AACnD,aAAC,CAAC,CAAC;AACH,YAAA,MAAM,CAAC,OAAO,GAAG,KAAK,CAAC;AACvB,YAAA,OAAO,MAAM,CAAC;AACf,SAAA;;AAGD,QAAA,MAAM,UAAU,GAAG,OAAO,EAAE,UAAU,CAAC;QACvC,MAAM,eAAe,GAAG,UAAU;cAC9B,IAAI,CAAC,kBAAkB,CAAC,aAAa,EAAE,UAAU,CAAC;cAClD,aAAa,CAAC;QAElB,IAAI,CAAC,eAAe,EAAE;;YAEpB,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,OAAO,CAAC,CAAC,SAAS,KAAI;gBAC9C,MAAM,KAAK,GAAG,UAAU;sBACpB,CAA6B,0BAAA,EAAA,UAAU,CAAa,WAAA,CAAA;sBACpD,qBAAqB,CAAC;AAC1B,gBAAA,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC;oBACjB,SAAS;oBACT,KAAK;AACN,iBAAA,CAAC,CAAC;gBACH,OAAO,EAAE,YAAY,GAAG,SAAS,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC;AACnD,aAAC,CAAC,CAAC;AACH,YAAA,MAAM,CAAC,OAAO,GAAG,KAAK,CAAC;AACvB,YAAA,OAAO,MAAM,CAAC;AACf,SAAA;;AAGD,QAAA,IAAI,CAAC,IAAI,CAAC,iBAAiB,CAAC,QAAQ,CAAC,EAAE;AACrC,YAAA,IAAI,CAAC,iBAAiB,CAAC,QAAQ,CAAC,GAAG,EAAE,CAAC;AACvC,SAAA;;QAGD,MAAM,aAAa,GAAoC,EAAE,CAAC;QAC1D,MAAM,kBAAkB,GAAuC,EAAE,CAAC;;AAGlE,QAAA,MAAM,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,EAAE,WAAW,CAAC,KAAI;YAChE,IAAI;;AAEF,gBAAA,IAAI,eAAe,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE;AAClC,oBAAA,MAAM,KAAK,GAAG,CAAA,OAAA,EAAU,SAAS,CAAA,gBAAA,EAC/B,UAAU,GAAG,CAAA,KAAA,EAAQ,UAAU,CAAG,CAAA,CAAA,GAAG,EACvC,EAAE,CAAC;AACH,oBAAA,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC;wBACjB,SAAS;wBACT,KAAK;AACN,qBAAA,CAAC,CAAC;oBACH,OAAO,EAAE,YAAY,GAAG,SAAS,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC;oBACjD,OAAO;AACR,iBAAA;;AAGD,gBAAA,IAAI,OAAwB,CAAC;AAE7B,gBAAA,IAAI,IAAI,CAAC,iBAAiB,CAAC,WAAW,CAAC,EAAE;;AAEvC,oBAAA,OAAO,GAAG,IAAI,CAAC,qBAAqB,CAClC,WAAW,CAAC,MAAM,EAClB,WAAW,CAAC,QAAQ,CACrB,CAAC;;oBAEF,IAAI,WAAW,CAAC,aAAa,EAAE;wBAC7B,MAAM,eAAe,GAAG,UAAU;AAChC,8BAAE,CAAA,EAAG,UAAU,CAAA,CAAA,EAAI,SAAS,CAAE,CAAA;8BAC5B,SAAS,CAAC;AACd,wBAAA,kBAAkB,CAAC,eAAe,CAAC,GAAG,WAAW,CAAC,aAAa,CAAC;AACjE,qBAAA;AACF,iBAAA;AAAM,qBAAA;;AAEL,oBAAA,MAAM,cAAc,GAA2B;AAC7C,wBAAA,UAAU,EAAE,WAAW,CAAC,UAAU,IAAI,IAAI,EAAE;qBAC7C,CAAC;AACF,oBAAA,OAAO,GAAG,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,WAAW,CAAC,KAAK,EAAE,cAAc,CAAC,CAAC;;oBAE7D,IAAI,WAAW,CAAC,QAAQ,EAAE;wBACxB,OAAO,CAAC,OAAO,EAAE,CAAC;AACnB,qBAAA;;oBAED,IAAI,WAAW,CAAC,aAAa,EAAE;wBAC7B,MAAM,eAAe,GAAG,UAAU;AAChC,8BAAE,CAAA,EAAG,UAAU,CAAA,CAAA,EAAI,SAAS,CAAE,CAAA;8BAC5B,SAAS,CAAC;AACd,wBAAA,kBAAkB,CAAC,eAAe,CAAC,GAAG,WAAW,CAAC,aAAa,CAAC;AACjE,qBAAA;AACF,iBAAA;AAED,gBAAA,aAAa,CAAC,SAAS,CAAC,GAAG,OAAO,CAAC;AAEnC,gBAAA,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;gBAC7B,OAAO,EAAE,YAAY,GAAG,SAAS,EAAE,IAAI,CAAC,CAAC;AAC1C,aAAA;AAAC,YAAA,OAAO,KAAU,EAAE;AACnB,gBAAA,MAAM,YAAY,GAChB,KAAK,EAAE,OAAO,IAAI,KAAK,EAAE,QAAQ,EAAE,IAAI,eAAe,CAAC;AACzD,gBAAA,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC;oBACjB,SAAS;AACT,oBAAA,KAAK,EAAE,YAAY;AACpB,iBAAA,CAAC,CAAC;gBACH,OAAO,EAAE,YAAY,GAAG,SAAS,EAAE,KAAK,EAAE,YAAY,CAAC,CAAC;AACzD,aAAA;AACH,SAAC,CAAC,CAAC;;QAGH,IAAI,MAAM,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE;AACzC,YAAA,MAAM,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,EAAE,OAAO,CAAC,KAAI;AAC7D,gBAAA,eAAe,CAAC,UAAU,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;AACjD,aAAC,CAAC,CAAC;;AAGH,YAAA,MAAM,CAAC,OAAO,CAAC,kBAAkB,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,EAAE,QAAQ,CAAC,KAAI;gBAC7D,IAAI,CAAC,iBAAiB,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,GAAG,QAAQ,CAAC;AACnD,aAAC,CAAC,CAAC;;YAGH,IAAI,OAAO,EAAE,sBAAsB,EAAE;gBACnC,eAAe,CAAC,sBAAsB,CAAC;AACrC,oBAAA,SAAS,EAAE,OAAO,EAAE,SAAS,IAAI,IAAI;AACtC,iBAAA,CAAC,CAAC;AACJ,aAAA;AACF,SAAA;;QAGD,MAAM,CAAC,OAAO,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,KAAK,CAAC,CAAC;AAE5C,QAAA,OAAO,MAAM,CAAC;KACf;;AAGD,IAAA,kBAAkB,CAChB,QAAgB,EAChB,UAAoB,EACpB,OAAmC,EAAA;AAEnC,QAAA,MAAM,MAAM,GAA6B;AACvC,YAAA,OAAO,EAAE,IAAI;AACb,YAAA,OAAO,EAAE,EAAE;AACX,YAAA,MAAM,EAAE,EAAE;SACX,CAAC;;QAGF,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;QAC3C,IAAI,CAAC,SAAS,EAAE;AACd,YAAA,UAAU,CAAC,OAAO,CAAC,CAAC,SAAS,KAAI;AAC/B,gBAAA,MAAM,KAAK,GAAG,CAAS,MAAA,EAAA,QAAQ,aAAa,CAAC;AAC7C,gBAAA,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC;oBACjB,SAAS;oBACT,KAAK;AACN,iBAAA,CAAC,CAAC;gBACH,OAAO,EAAE,cAAc,GAAG,SAAS,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC;AACrD,aAAC,CAAC,CAAC;AACH,YAAA,MAAM,CAAC,OAAO,GAAG,KAAK,CAAC;AACvB,YAAA,OAAO,MAAM,CAAC;AACf,SAAA;;QAGD,MAAM,cAAc,GAAa,EAAE,CAAC;QACpC,MAAM,wBAAwB,GAAa,EAAE,CAAC;;AAG9C,QAAA,UAAU,CAAC,OAAO,CAAC,CAAC,SAAS,KAAI;YAC/B,MAAM,OAAO,GAAG,SAAS,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;YAEzC,IAAI,CAAC,OAAO,EAAE;AACZ,gBAAA,MAAM,KAAK,GAAG,CAAU,OAAA,EAAA,SAAS,aAAa,CAAC;AAC/C,gBAAA,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC;oBACjB,SAAS;oBACT,KAAK;AACN,iBAAA,CAAC,CAAC;gBACH,OAAO,EAAE,cAAc,GAAG,SAAS,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC;gBACnD,OAAO;AACR,aAAA;;AAGD,YAAA,wBAAwB,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;AACzC,YAAA,cAAc,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;AACjC,SAAC,CAAC,CAAC;;QAGH,IAAI;;AAEF,YAAA,cAAc,CAAC,OAAO,CAAC,CAAC,SAAS,KAAI;AACnC,gBAAA,SAAS,CAAC,aAAa,CAAC,SAAS,CAAC,CAAC;AACnC,gBAAA,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;gBAC/B,OAAO,EAAE,cAAc,GAAG,SAAS,EAAE,IAAI,CAAC,CAAC;AAC7C,aAAC,CAAC,CAAC;;AAGH,YAAA,IAAI,IAAI,CAAC,iBAAiB,CAAC,QAAQ,CAAC,EAAE;AACpC,gBAAA,wBAAwB,CAAC,OAAO,CAAC,CAAC,GAAG,KAAI;oBACvC,OAAO,IAAI,CAAC,iBAAiB,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,CAAC;AAC/C,iBAAC,CAAC,CAAC;AACJ,aAAA;AACF,SAAA;AAAC,QAAA,OAAO,KAAU,EAAE;;AAEnB,YAAA,cAAc,CAAC,OAAO,CAAC,CAAC,SAAS,KAAI;gBACnC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE;AACvC,oBAAA,MAAM,YAAY,GAChB,KAAK,EAAE,OAAO,IAAI,KAAK,EAAE,QAAQ,EAAE,IAAI,wBAAwB,CAAC;AAClE,oBAAA,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC;wBACjB,SAAS;AACT,wBAAA,KAAK,EAAE,YAAY;AACpB,qBAAA,CAAC,CAAC;oBACH,OAAO,EAAE,cAAc,GAAG,SAAS,EAAE,KAAK,EAAE,YAAY,CAAC,CAAC;AAC3D,iBAAA;AACH,aAAC,CAAC,CAAC;AACJ,SAAA;;QAGD,MAAM,CAAC,OAAO,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,KAAK,CAAC,CAAC;AAE5C,QAAA,OAAO,MAAM,CAAC;KACf;;AAGD,IAAA,eAAe,CACb,IAAY,EACZ,MAA2B,EAC3B,OAAiC,EAAA;QAEjC,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;QACvC,IAAI,CAAC,SAAS,EAAE;AACd,YAAA,OAAO,CAAC,IAAI,CACV,4CAA4C,IAAI,CAAA,YAAA,CAAc,CAC/D,CAAC;YACF,OAAO;AACR,SAAA;AAED,QAAA,SAAS,CAAC,UAAU,CAAC,MAAM,EAAE;AAC3B,YAAA,SAAS,EAAE,OAAO,EAAE,SAAS,IAAI,IAAI;AACtC,SAAA,CAAC,CAAC;KACJ;;IAGD,YAAY,CACV,IAAY,EACZ,OAAqD,EAAA;QAErD,IAAI,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE;YAC9B,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,WAAW,EAAE,CAAC;AACpD,YAAA,OAAO,IAAI,CAAC,qBAAqB,CAAC,QAAQ,CAAC,CAAC;AAC7C,SAAA;AAAM,aAAA;;YAEL,IAAI,CAAC,sBAAsB,CACzB,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,EACpB,OAAO,EAAE,SAAS,IAAI,IAAI,EAC1B,OAAO,EAAE,QAAQ,IAAI,KAAK,CAC3B,CAAC;AACF,YAAA,OAAO,KAAK,CAAC;AACd,SAAA;KACF;;AAGO,IAAA,sBAAsB,CAC5B,OAAwB,EACxB,SAAkB,EAClB,QAAiB,EAAA;QAEjB,IAAI,OAAO,CAAC,OAAO,EAAE;YACnB,OAAO,CAAC,WAAW,EAAE,CAAC;YACtB,OAAO,CAAC,sBAAsB,CAAC;gBAC7B,SAAS;gBACT,QAAQ;AACT,aAAA,CAAC,CAAC;AACJ,SAAA;;QAGD,IAAI,OAAO,YAAY,gBAAgB,EAAE;AACvC,YAAA,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,CAAC,YAAY,KAAI;gBACvD,IAAI,CAAC,sBAAsB,CAAC,YAAY,EAAE,SAAS,EAAE,QAAQ,CAAC,CAAC;AACjE,aAAC,CAAC,CAAC;AACJ,SAAA;KACF;;;IAKD,oBAAoB,CAAC,IAAY,EAAE,WAAmB,EAAA;QACpD,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;QACvC,IAAI,CAAC,SAAS,EAAE;AACd,YAAA,OAAO,CAAC,IAAI,CACV,iDAAiD,IAAI,CAAA,YAAA,CAAc,CACpE,CAAC;AACF,YAAA,OAAO,EAAE,CAAC;AACX,SAAA;QACD,MAAM,OAAO,GAAG,SAAS,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;QAC3C,IAAI,CAAC,OAAO,EAAE;YACZ,OAAO,CAAC,IAAI,CACV,CAAA,iDAAA,EAAoD,WAAW,CAAwB,qBAAA,EAAA,IAAI,CAAI,EAAA,CAAA,CAChG,CAAC;AACF,YAAA,OAAO,EAAE,CAAC;AACX,SAAA;AACD,QAAA,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE;AACnB,YAAA,OAAO,EAAE,CAAC;AACX,SAAA;;AAGD,QAAA,MAAM,aAAa,GAAG,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,GAAG,WAAW,CAAC,CAAC;AAClE,QAAA,MAAM,cAAc,GAAG;YACrB,GAAG,IAAI,CAAC,oBAAoB;AAC5B,YAAA,IAAI,aAAa,IAAI,EAAE,CAAC;SACzB,CAAC;QAEF,KAAK,MAAM,QAAQ,IAAI,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE;AAClD,YAAA,MAAM,OAAO,GAAG,cAAc,CAAC,QAAQ,CAAC,CAAC;AACzC,YAAA,IAAI,OAAO,EAAE;;AAEX,gBAAA,OAAO,OAAO,OAAO,KAAK,QAAQ,GAAG,OAAO,GAAG,EAAE,CAAC;AACnD,aAAA;AACF,SAAA;AACD,QAAA,OAAO,EAAE,CAAC;KACX;;;AAKD,IAAA,gBAAgB,CACd,IAAY,EACZ,OAA2B,EAC3B,OAAsB,EAAA;QAEtB,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;QACvC,IAAI,CAAC,SAAS,EAAE;AACd,YAAA,OAAO,CAAC,IAAI,CACV,6CAA6C,IAAI,CAAA,YAAA,CAAc,CAChE,CAAC;AACF,YAAA,OAAO,SAAS,CAAC;AAClB,SAAA;QAED,OAAO,IAAI,CAAC,4BAA4B,CAAC,SAAS,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;KACvE;;AAGD,IAAA,iBAAiB,CACf,IAAY,EACZ,WAAmB,EACnB,OAA2B,EAC3B,OAAsB,EAAA;QAEtB,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;QACvC,IAAI,CAAC,SAAS,EAAE;AACd,YAAA,OAAO,CAAC,IAAI,CACV,8CAA8C,IAAI,CAAA,YAAA,CAAc,CACjE,CAAC;AACF,YAAA,OAAO,SAAS,CAAC;AAClB,SAAA;QAED,MAAM,OAAO,GAAG,SAAS,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;QAC3C,IAAI,CAAC,OAAO,EAAE;YACZ,OAAO,CAAC,IAAI,CACV,CAAA,8CAAA,EAAiD,WAAW,CAAwB,qBAAA,EAAA,IAAI,CAAI,EAAA,CAAA,CAC7F,CAAC;AACF,YAAA,OAAO,SAAS,CAAC;AAClB,SAAA;QAED,OAAO,IAAI,CAAC,4BAA4B,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;KACrE;;;AAKD,IAAA,gBAAgB,CAAC,IAAY,EAAA;AAC3B,QAAA,OAAO,GAAG,IAAI,CAAC,WAAW,CAAU,OAAA,EAAA,IAAI,GAAG,CAAC;KAC7C;;AAGD,IAAA,uBAAuB,CAAC,IAAY,EAAA;QAClC,MAAM,qBAAqB,GAAG,CAAA,CAAA,EAAI,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAA,CAAE,CAAC;QAChE,MAAM,aAAa,GAAG,QAAQ,CAAC,aAAa,CAC1C,qBAAqB,CACP,CAAC;;QAGjB,IAAI,CAAC,aAAa,EAAE;AAClB,YAAA,MAAM,QAAQ,GAAG,IAAI,gBAAgB,CAAC,MAAK;gBACzC,MAAM,SAAS,GAAG,QAAQ,CAAC,aAAa,CACtC,qBAAqB,CACP,CAAC;AACjB,gBAAA,IAAI,SAAS,EAAE;oBACb,SAAS,CAAC,KAAK,CAAC,WAAW,CAAC,eAAe,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC;oBAC9D,SAAS,CAAC,KAAK,CAAC,WAAW,CAAC,eAAe,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC;oBAC9D,QAAQ,CAAC,UAAU,EAAE,CAAC;AACvB,iBAAA;AACH,aAAC,CAAC,CAAC;AAEH,YAAA,QAAQ,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,EAAE;AAC9B,gBAAA,SAAS,EAAE,IAAI;AACf,gBAAA,OAAO,EAAE,IAAI;AACd,aAAA,CAAC,CAAC;;YAGH,UAAU,CAAC,MAAM,QAAQ,CAAC,UAAU,EAAE,EAAE,KAAK,CAAC,CAAC;YAC/C,OAAO;AACR,SAAA;;QAGD,aAAa,CAAC,KAAK,CAAC,WAAW,CAAC,eAAe,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC;QAClE,aAAa,CAAC,KAAK,CAAC,WAAW,CAAC,eAAe,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC;KACnE;;;AAKO,IAAA,qBAAqB,CAAC,KAAU,EAAA;AACtC,QAAA,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,SAAS,EAAE;AACzC,YAAA,OAAO,KAAK,CAAC;AACd,SAAA;;QAGD,IAAI,KAAK,YAAY,IAAI,EAAE;AACzB,YAAA,OAAO,KAAK,CAAC;AACd,SAAA;AAED,QAAA,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;AACxB,YAAA,OAAO,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,CAAC,CAAC;AAC9D,SAAA;AAED,QAAA,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE;AAC7B,YAAA,OAAO,KAAK,CAAC;AACd,SAAA;QAED,MAAM,QAAQ,GAAQ,EAAE,CAAC;AACzB,QAAA,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,EAAE,GAAG,CAAC,KAAI;;AAE3C,YAAA,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE;gBACzB,QAAQ,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,qBAAqB,CAAC,GAAG,CAAC,CAAC;AACjD,aAAA;AACH,SAAC,CAAC,CAAC;AACH,QAAA,OAAO,QAAQ,CAAC;KACjB;;AAGO,IAAA,4BAA4B,CAClC,MAAyC,EACzC,OAA2B,EAC3B,OAAsB,EAAA;AAEtB,QAAA,IAAI,aAAa,GAAG,MAAM,CAAC,YAAY,CAAC;AAExC,QAAA,IAAI,OAAO,EAAE,QAAQ,IAAI,IAAI,EAAE;AAC7B,YAAA,aAAa,GAAG,aAAa,CAAC,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC;AACpE,SAAA;AAED,QAAA,IAAI,OAAO,EAAE,oBAAoB,KAAK,KAAK,EAAE;YAC3C,aAAa,GAAG,aAAa,CAAC,IAAI,CAAC,oBAAoB,EAAE,CAAC,CAAC;AAC5D,SAAA;QAED,IAAI,OAAO,EAAE,WAAW,EAAE;AACxB,YAAA,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AACvB,SAAA;AAED,QAAA,OAAO,aAAa,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;KACzC;wGAzoBU,eAAe,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAA,IAAA,CAAA,kBAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAAf,IAAA,OAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,eAAe,cADF,MAAM,EAAA,CAAA,CAAA;;4FACnB,eAAe,EAAA,UAAA,EAAA,CAAA;kBAD3B,UAAU;mBAAC,EAAE,UAAU,EAAE,MAAM,EAAE,CAAA;;;AC5BlC;MAIa,gBAAgB,CAAA;IACnB,SAAS,GAAmB,EAAE,CAAC;AAEvC,IAAA,WAAA,GAAA,GAAgB;;AAGR,IAAA,UAAU,CAAC,KAAU,EAAA;AAC3B,QAAA,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,SAAS,EAAE;AACzC,YAAA,OAAO,KAAK,CAAC;AACd,SAAA;AACD,QAAA,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;AACxB,YAAA,OAAO,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC;AACnD,SAAA;AACD,QAAA,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE;YAC7B,MAAM,MAAM,GAAwB,EAAE,CAAC;YACvC,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE;AACpC,gBAAA,MAAM,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC;AAC3C,aAAA;AACD,YAAA,OAAO,MAAM,CAAC;AACf,SAAA;AACD,QAAA,OAAO,KAAK,CAAC;KACd;;IAGO,OAAO,CAAC,CAAM,EAAE,CAAM,EAAA;QAC5B,IAAI,CAAC,KAAK,CAAC;AAAE,YAAA,OAAO,IAAI,CAAC;AACzB,QAAA,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,IAAI;YAAE,OAAO,CAAC,KAAK,CAAC,CAAC;AAC7C,QAAA,IAAI,CAAC,KAAK,SAAS,IAAI,CAAC,KAAK,SAAS;YAAE,OAAO,CAAC,KAAK,CAAC,CAAC;AACvD,QAAA,IAAI,OAAO,CAAC,KAAK,OAAO,CAAC;AAAE,YAAA,OAAO,KAAK,CAAC;AAExC,QAAA,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE;AACxC,YAAA,IAAI,CAAC,CAAC,MAAM,KAAK,CAAC,CAAC,MAAM;AAAE,gBAAA,OAAO,KAAK,CAAC;YACxC,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,EAAE,KAAK,KAAK,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AAC/D,SAAA;QAED,IAAI,OAAO,CAAC,KAAK,QAAQ,IAAI,OAAO,CAAC,KAAK,QAAQ,EAAE;YAClD,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAC7B,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAC7B,YAAA,IAAI,KAAK,CAAC,MAAM,KAAK,KAAK,CAAC,MAAM;AAAE,gBAAA,OAAO,KAAK,CAAC;YAChD,OAAO,KAAK,CAAC,KAAK,CAAC,CAAC,GAAG,KAAK,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;AAC3D,SAAA;AAED,QAAA,OAAO,KAAK,CAAC;KACd;;IAGO,iBAAiB,CACvB,GAAiB,EACjB,MAAqB,EAAA;QAErB,MAAM,QAAQ,GAAwB,EAAE,CAAC;AACzC,QAAA,MAAM,CAAC,OAAO,CAAC,CAAC,KAAK,KAAI;AACvB,YAAA,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC;AAC1D,SAAC,CAAC,CAAC;AACH,QAAA,OAAO,QAAQ,CAAC;KACjB;;AAGO,IAAA,cAAc,CAAC,IAAW,EAAA;AAChC,QAAA,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC;KACjD;;AAGO,IAAA,SAAS,CAAC,GAAQ,EAAA;QACxB,OAAO;AACL,YAAA,GAAG,GAAG;AACN,YAAA,GAAG,EAAE,GAAG,CAAC,GAAG,IAAIe,EAAM,EAAE;AACxB,YAAA,MAAM,EAAE,GAAG,CAAC,MAAM,KAAK,SAAS,GAAG,GAAG,CAAC,MAAM,GAAG,KAAK;AACrD,YAAA,QAAQ,EAAE,GAAG,CAAC,QAAQ,KAAK,SAAS,GAAG,GAAG,CAAC,QAAQ,GAAG,KAAK;SAC5D,CAAC;KACH;;IAGO,MAAM,CACZ,IAAoB,EACpB,aAAmC,EAAA;AAEnC,QAAA,MAAM,MAAM,GAAiB;AAC3B,YAAA,GAAG,aAAa;YAChB,GAAG,EAAEA,EAAM,EAAE;AACb,YAAA,MAAM,EAAE,IAAI;AACZ,YAAA,KAAK,EAAE,IAAI;AACX,YAAA,QAAQ,EAAE,KAAK;SAChB,CAAC;AACF,QAAA,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;AAClB,QAAA,OAAO,MAAM,CAAC;KACf;;AAGO,IAAA,aAAa,CACnB,GAAiB,EACjB,SAAiB,EACjB,MAAuB,EAAA;AAEvB,QAAA,MAAM,WAAW,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC;QAEpE,IAAI,CAAC,WAAW,EAAE;AAChB,YAAA,OAAO,EAAE,CAAC;AACX,SAAA;QAED,IAAI,WAAW,CAAC,SAAS,EAAE;AACzB,YAAA,OAAO,WAAW,CAAC,SAAS,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,GAAG,EAAE,SAAS,CAAC,CAAC;AAC9D,SAAA;AAED,QAAA,OAAO,EAAE,CAAC;KACX;;IAGO,WAAW,CACjB,GAAiB,EACjB,MAAuB,EAAA;QAEvB,MAAM,OAAO,GAAqC,EAAE,CAAC;QAErD,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,WAAW,KAAI;AACpC,YAAA,OAAO,CAAC,WAAW,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,aAAa,CAC5C,GAAG,EACH,WAAW,CAAC,IAAI,EAChB,MAAM,CACP,CAAC;AACJ,SAAC,CAAC,CAAC;AAEH,QAAA,OAAO,OAAO,CAAC;KAChB;;IAGO,YAAY,CAClB,IAAoB,EACpB,MAAuB,EAAA;QAEvB,MAAM,OAAO,GAAqD,EAAE,CAAC;AAErE,QAAA,IAAI,CAAC,OAAO,CAAC,CAAC,GAAG,KAAI;AACnB,YAAA,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,WAAW,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;AACnD,SAAC,CAAC,CAAC;AAEH,QAAA,OAAO,OAAO,CAAC;KAChB;;AAGD,IAAA,YAAY,CACV,QAAgB,EAChB,IAAoB,EACpB,MAAuB,EAAA;QAEvB,MAAM,eAAe,GAAG,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC;;QAGlD,MAAM,eAAe,GAAwC,EAAE,CAAC;AAChE,QAAA,eAAe,CAAC,OAAO,CAAC,CAAC,GAAG,KAAI;AAC9B,YAAA,eAAe,CAAC,GAAG,CAAC,GAAI,CAAC,GAAG,IAAI,CAAC,iBAAiB,CAAC,GAAG,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC;AACzE,SAAC,CAAC,CAAC;AAEH,QAAA,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,GAAG;AACzB,YAAA,IAAI,EAAE,eAAe;YACrB,MAAM;AACN,YAAA,iBAAiB,EAAE,EAAE;YACrB,eAAe;AACf,YAAA,eAAe,EAAE,EAAE;AACnB,YAAA,UAAU,EAAE,KAAK;AACjB,YAAA,UAAU,EAAE,EAAE;SACf,CAAC;;AAEF,QAAA,IAAI,CAAC,wBAAwB,CAAC,QAAQ,CAAC,CAAC;KACzC;;AAGD,IAAA,OAAO,CAAC,QAAgB,EAAA;AACtB,QAAA,OAAO,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;KACjC;;AAGD,IAAA,WAAW,CACT,QAAgB,EAAA;QAIhB,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;QACtC,IAAI,CAAC,IAAI,EAAE;AACT,YAAA,OAAO,SAAS,CAAC;AAClB,SAAA;QACD,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,KAAI;YAC5B,OAAO,IAAI,CAAC,MAAM,CAAC;YACnB,OAAO,IAAI,CAAC,KAAK,CAAC;YAClB,OAAO,IAAI,CAAC,GAAG,CAAC;YAChB,OAAO,IAAI,CAAC,QAAQ,CAAC;AACrB,YAAA,OAAO,IAAI,CAAC;AACd,SAAC,CAAC,CAAC;KACJ;;IAGD,YAAY,CACV,QAAgB,EAChB,aAAmC,EAAA;QAEnC,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;QACtC,IAAI,CAAC,IAAI,EAAE;AACT,YAAA,OAAO,SAAS,CAAC;AAClB,SAAA;AACD,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,aAAa,CAAC,CAAC;;QAErD,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,GAAI,CAAC,GAAG,IAAI,CAAC,iBAAiB,CACxD,MAAM,EACN,IAAI,CAAC,MAAM,CAAC,MAAM,CACnB,CAAC;;AAEF,QAAA,IAAI,CAAC,wBAAwB,CAAC,QAAQ,CAAC,CAAC;AACxC,QAAA,OAAO,MAAM,CAAC;KACf;;AAGD,IAAA,YAAY,CAAC,QAAgB,EAAA;QAC3B,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;QACtC,IAAI,CAAC,IAAI,EAAE;AACT,YAAA,OAAO,IAAI,CAAC;AACb,SAAA;;AAED,QAAA,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC;AACvB,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;AAC1D,QAAA,IAAI,CAAC,iBAAiB,GAAG,OAAO,CAAC;;QAGjC,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE;AACtC,YAAA,KAAK,MAAM,SAAS,IAAI,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,EAAE;AACjD,gBAAA,IAAI,OAAO,CAAC,GAAG,CAAC,CAAC,SAAS,CAAC,EAAE;AAC3B,oBAAA,OAAO,KAAK,CAAC;AACd,iBAAA;AACF,aAAA;AACF,SAAA;AACD,QAAA,OAAO,IAAI,CAAC;KACb;;IAGD,UAAU,CAAC,QAAgB,EAAE,GAAiB,EAAA;QAC5C,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;AACtC,QAAA,IAAI,IAAI,IAAI,GAAG,CAAC,GAAG,EAAE;;YAEnB,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,iBAAiB,CACpD,GAAG,EACH,IAAI,CAAC,MAAM,CAAC,MAAM,CACnB,CAAC;AACH,SAAA;AACD,QAAA,GAAG,CAAC,MAAM,GAAG,IAAI,CAAC;KACnB;;IAGD,WAAW,CAAC,QAAgB,EAAE,GAAiB,EAAA;QAC7C,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;AACtC,QAAA,IAAI,IAAI,IAAI,GAAG,CAAC,GAAG,IAAI,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE;;YAEpD,MAAM,QAAQ,GAAG,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;YAC/C,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,KAAK,KAAI;AACnC,gBAAA,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC;AAC1D,aAAC,CAAC,CAAC;;AAEH,YAAA,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;;YAE1D,OAAO,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;YACrC,OAAO,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;;YAEhC,IAAI,IAAI,CAAC,iBAAiB,EAAE;gBAC1B,OAAO,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;AACxC,aAAA;AACF,SAAA;AACD,QAAA,GAAG,CAAC,MAAM,GAAG,KAAK,CAAC;KACpB;;IAGD,WAAW,CAAC,QAAgB,EAAE,GAAiB,EAAA;QAC7C,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;AACtC,QAAA,IAAI,IAAI,IAAI,GAAG,CAAC,GAAG,EAAE;;YAEnB,IAAI,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE;gBACjC,OAAO,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;AACtC,aAAA;;YAED,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,iBAAiB,CACpD,GAAG,EACH,IAAI,CAAC,MAAM,CAAC,MAAM,CACnB,CAAC;;YAEF,OAAO,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;AACjC,SAAA;AACD,QAAA,GAAG,CAAC,MAAM,GAAG,KAAK,CAAC;AACnB,QAAA,GAAG,CAAC,KAAK,GAAG,KAAK,CAAC;KACnB;;IAGD,iBAAiB,CAAC,QAAgB,EAAE,GAAiB,EAAA;QACnD,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;AACtC,QAAA,IAAI,CAAC,IAAI,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE;AACrB,YAAA,OAAO,KAAK,CAAC;AACd,SAAA;QACD,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,GAAG,KAAK,GAAG,CAAC,GAAG,CAAC,CAAC;AAClE,QAAA,IAAI,KAAK,KAAK,CAAC,CAAC,EAAE;AAChB,YAAA,OAAO,KAAK,CAAC;AACd,SAAA;QACD,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;;QAE3B,OAAO,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QACrC,OAAO,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QACrC,OAAO,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QAChC,IAAI,IAAI,CAAC,iBAAiB,EAAE;YAC1B,OAAO,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;AACxC,SAAA;;AAED,QAAA,IAAI,CAAC,wBAAwB,CAAC,QAAQ,CAAC,CAAC;AACxC,QAAA,OAAO,IAAI,CAAC;KACb;;AAGO,IAAA,cAAc,CACpB,IAAwB,EACxB,GAAiB,EACjB,SAAiB,EAAA;;QAGjB,IAAI,IAAI,CAAC,UAAU,EAAE;AACnB,YAAA,OAAO,IAAI,CAAC;AACb,SAAA;;QAED,IAAI,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,GAAI,CAAC,EAAE;AAC7B,YAAA,OAAO,IAAI,CAAC;AACb,SAAA;;AAED,QAAA,MAAM,YAAY,GAAG,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,GAAI,CAAC,GAAG,SAAS,CAAC,CAAC;AACjE,QAAA,MAAM,YAAY,GAAG,GAAG,CAAC,SAAS,CAAC,CAAC;QACpC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,YAAY,EAAE,YAAY,CAAC,CAAC;KAClD;;AAGD,IAAA,kBAAkB,CAChB,QAAgB,EAChB,GAAiB,EACjB,SAAiB,EAAA;QAEjB,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;QACtC,IAAI,CAAC,IAAI,EAAE;AACT,YAAA,OAAO,EAAE,CAAC;AACX,SAAA;QAED,MAAM,WAAW,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC;QACzE,IAAI,CAAC,WAAW,EAAE;AAChB,YAAA,OAAO,EAAE,CAAC;AACX,SAAA;;QAGD,IAAI,MAAM,GAAqB,EAAE,CAAC;QAClC,IAAI,WAAW,CAAC,SAAS,EAAE;AACzB,YAAA,MAAM,GAAG,WAAW,CAAC,SAAS,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,GAAG,EAAE,SAAS,CAAC,CAAC;AAChE,SAAA;;AAGD,QAAA,IAAI,CAAC,IAAI,CAAC,iBAAiB,EAAE;AAC3B,YAAA,IAAI,CAAC,iBAAiB,GAAG,EAAE,CAAC;AAC7B,SAAA;QACD,IAAI,CAAC,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,GAAI,CAAC,EAAE;YACrC,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,GAAI,CAAC,GAAG,EAAE,CAAC;AACvC,SAAA;AACD,QAAA,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,GAAI,CAAC,CAAC,SAAS,CAAC,GAAG,MAAM,CAAC;;QAGrD,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,IAAI,EAAE,GAAG,EAAE,SAAS,CAAC,EAAE;AAC9C,YAAA,OAAO,EAAE,CAAC;AACX,SAAA;QAED,OAAO,MAAM,GAAG,OAAO,GAAG,SAAS,CAAC;KACrC;;AAGD,IAAA,oBAAoB,CAClB,QAAgB,EAChB,GAAiB,EACjB,SAAiB,EAAA;QAEjB,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;AACtC,QAAA,IAAI,CAAC,IAAI,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE;AACrB,YAAA,OAAO,EAAE,CAAC;AACX,SAAA;;QAED,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,IAAI,EAAE,GAAG,EAAE,SAAS,CAAC,EAAE;AAC9C,YAAA,OAAO,EAAE,CAAC;AACX,SAAA;AACD,QAAA,OAAO,IAAI,CAAC,iBAAiB,GAAG,GAAG,CAAC,GAAG,CAAC,GAAG,SAAS,CAAC,IAAI,EAAE,CAAC;KAC7D;;IAGD,oBAAoB,CAAC,QAAgB,EAAE,GAAiB,EAAA;QACtD,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;AACtC,QAAA,IAAI,CAAC,IAAI,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE;AACrB,YAAA,OAAO,IAAI,CAAC;AACb,SAAA;;QAGD,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,iBAAiB,CACpD,GAAG,EACH,IAAI,CAAC,MAAM,CAAC,MAAM,CACnB,CAAC;;QAEF,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC;QAEhC,IAAI,QAAQ,GAAG,KAAK,CAAC;QAErB,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,WAAW,KAAI;AACzC,YAAA,MAAM,MAAM,GAAG,IAAI,CAAC,kBAAkB,CAAC,QAAQ,EAAE,GAAG,EAAE,WAAW,CAAC,IAAI,CAAC,CAAC;YACxE,IAAI,MAAM,KAAK,OAAO,EAAE;gBACtB,QAAQ,GAAG,IAAI,CAAC;AACjB,aAAA;AACH,SAAC,CAAC,CAAC;QAEH,OAAO,CAAC,QAAQ,CAAC;KAClB;;AAGO,IAAA,wBAAwB,CAAC,QAAgB,EAAA;QAC/C,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;AACtC,QAAA,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,YAAY,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,iBAAiB,EAAE;YACxE,OAAO;AACR,SAAA;AACD,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,GAAG,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC;;AAEhD,QAAA,IAAI,CAAC,MAAM,CAAC,YAAoB,CAAC,IAAI,CAAC,MAAM,CAAC,iBAAiB,CAAC,GAAG,QAAQ,CAAC;KAC7E;;AAGD,IAAA,aAAa,CAAC,QAAgB,EAAA;QAC5B,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;QACtC,IAAI,CAAC,IAAI,EAAE;AACT,YAAA,OAAO,KAAK,CAAC;AACd,SAAA;AACD,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,MAAM,CAAC,CAAC;KAC9C;;AAGD,IAAA,OAAO,CAAC,KAAe,EAAA;AACrB,QAAA,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,KAAI;AACrB,YAAA,IAAI,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE;;AAExB,gBAAA,OAAO,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;AAC7B,aAAA;AACH,SAAC,CAAC,CAAC;KACJ;;AAGD,IAAA,cAAc,CAAC,IAAY,EAAA;QACzB,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;QAClC,IAAI,CAAC,IAAI,EAAE;YACT,OAAO;AACR,SAAA;;AAGD,QAAA,IAAI,CAAC,IAAI,GAAG,EAAE,CAAC;;AAGf,QAAA,IAAI,CAAC,eAAe,GAAG,EAAE,CAAC;AAC1B,QAAA,IAAI,CAAC,eAAe,GAAG,EAAE,CAAC;;AAG1B,QAAA,IAAI,CAAC,iBAAiB,GAAG,EAAE,CAAC;;AAG5B,QAAA,IAAI,CAAC,UAAU,GAAG,KAAK,CAAC;AACxB,QAAA,IAAI,CAAC,UAAU,GAAG,EAAE,CAAC;;AAGrB,QAAA,IAAI,CAAC,wBAAwB,CAAC,IAAI,CAAC,CAAC;KACrC;;IAGD,WAAW,CAAC,QAAgB,EAAE,IAAW,EAAA;QACvC,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;QACtC,IAAI,CAAC,IAAI,EAAE;YACT,OAAO;AACR,SAAA;;QAGD,MAAM,eAAe,GAAG,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC;;AAGlD,QAAA,IAAI,CAAC,IAAI,GAAG,eAAe,CAAC;;AAG5B,QAAA,IAAI,CAAC,eAAe,GAAG,EAAE,CAAC;AAC1B,QAAA,eAAe,CAAC,OAAO,CAAC,CAAC,GAAG,KAAI;YAC9B,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,GAAI,CAAC,GAAG,IAAI,CAAC,iBAAiB,CACrD,GAAG,EACH,IAAI,CAAC,MAAM,CAAC,MAAM,CACnB,CAAC;AACJ,SAAC,CAAC,CAAC;;AAGH,QAAA,IAAI,CAAC,eAAe,GAAG,EAAE,CAAC;AAC1B,QAAA,IAAI,CAAC,iBAAiB,GAAG,EAAE,CAAC;;AAG5B,QAAA,IAAI,CAAC,UAAU,GAAG,KAAK,CAAC;AACxB,QAAA,IAAI,CAAC,UAAU,GAAG,EAAE,CAAC;;AAGrB,QAAA,IAAI,CAAC,wBAAwB,CAAC,QAAQ,CAAC,CAAC;KACzC;wGApfU,gBAAgB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAAhB,IAAA,OAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,gBAAgB,cAFf,MAAM,EAAA,CAAA,CAAA;;4FAEP,gBAAgB,EAAA,UAAA,EAAA,CAAA;kBAH5B,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,UAAU,EAAE,MAAM;AACnB,iBAAA,CAAA;;;AC5DD;;;AAGG;SACa,sBAAsB,GAAA;IACpC,IAAI,OAAO,MAAM,KAAK,WAAW,IAAI,OAAO,QAAQ,KAAK,WAAW,EAAE;QACpE,OAAO;AACR,KAAA;;IAGD,SAAS,iBAAiB,CAAC,OAAoB,EAAA;AAC7C,QAAA,MAAM,KAAK,GAAG,OAAO,CAAC,WAAW,CAAC;QAClC,IAAI,KAAK,GAAG,GAAG,EAAE;AACf,YAAA,OAAO,CAAC,SAAS,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;AACvC,SAAA;AAAM,aAAA;AACL,YAAA,OAAO,CAAC,SAAS,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC;AAC1C,SAAA;KACF;;IAGD,MAAM,QAAQ,GAAG,IAAI,gBAAgB,CAAC,CAAC,SAAS,KAAI;AAClD,QAAA,SAAS,CAAC,OAAO,CAAC,CAAC,QAAQ,KAAI;YAC7B,QAAQ,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,IAAI,KAAI;AACnC,gBAAA,IAAI,IAAI,CAAC,QAAQ,KAAK,IAAI,CAAC,YAAY,EAAE;oBACvC,MAAM,OAAO,GAAG,IAAmB,CAAC;;oBAGpC,IAAI,OAAO,CAAC,SAAS,EAAE,QAAQ,CAAC,gBAAgB,CAAC,EAAE;wBACjD,iBAAiB,CAAC,OAAO,CAAC,CAAC;wBAC3B,aAAa,CAAC,OAAO,CAAC,CAAC;AACxB,qBAAA;;oBAGD,MAAM,WAAW,GAAG,OAAO,CAAC,gBAAgB,GAAG,iBAAiB,CAAC,CAAC;AAClE,oBAAA,WAAW,EAAE,OAAO,CAAC,CAAC,SAAS,KAAI;wBACjC,iBAAiB,CAAC,SAAwB,CAAC,CAAC;wBAC5C,aAAa,CAAC,SAAwB,CAAC,CAAC;AAC1C,qBAAC,CAAC,CAAC;AACJ,iBAAA;AACH,aAAC,CAAC,CAAC;AACL,SAAC,CAAC,CAAC;AACL,KAAC,CAAC,CAAC;;AAGH,IAAA,MAAM,iBAAiB,GAAG,IAAI,OAAO,EAAoB,CAAC;IAE1D,SAAS,aAAa,CAAC,OAAoB,EAAA;AACzC,QAAA,IAAI,iBAAiB,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE;YAClC,OAAO;AACR,SAAA;AAED,QAAA,IAAI,OAAQ,MAAc,CAAC,cAAc,KAAK,WAAW,EAAE;YACzD,MAAM,cAAc,GAAG,IAAK,MAAc,CAAC,cAAc,CAAC,MAAK;gBAC7D,iBAAiB,CAAC,OAAO,CAAC,CAAC;AAC7B,aAAC,CAAC,CAAC;AACH,YAAA,cAAc,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;AAChC,YAAA,iBAAiB,CAAC,GAAG,CAAC,OAAO,EAAE,cAAc,CAAC,CAAC;AAChD,SAAA;KACF;;AAGD,IAAA,QAAQ,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,EAAE;AAC9B,QAAA,SAAS,EAAE,IAAI;AACf,QAAA,OAAO,EAAE,IAAI;AACd,KAAA,CAAC,CAAC;;IAGH,QAAQ,CAAC,gBAAgB,CAAC,iBAAiB,CAAC,CAAC,OAAO,CAAC,CAAC,OAAO,KAAI;QAC/D,iBAAiB,CAAC,OAAsB,CAAC,CAAC;QAC1C,aAAa,CAAC,OAAsB,CAAC,CAAC;AACxC,KAAC,CAAC,CAAC;AACL;;ACvEA;;;AAGG;SACa,uBAAuB,GAAA;IACrC,IAAI,OAAO,MAAM,KAAK,WAAW,IAAI,OAAO,QAAQ,KAAK,WAAW,EAAE;QACpE,OAAO;AACR,KAAA;;IAGD,SAAS,gBAAgB,CAAC,OAAoB,EAAA;AAC5C,QAAA,IAAI,MAAM,GAAG,OAAO,CAAC,aAAa,CAAC;AACnC,QAAA,OAAO,MAAM,IAAI,MAAM,KAAK,QAAQ,CAAC,IAAI,EAAE;;YAEzC,MAAM,aAAa,GAAG,MAAM,CAAC,gBAAgB,CAAC,MAAM,CAAC,CAAC;AACtD,YAAA,MAAM,KAAK,GAAG,aAAa,CAAC,KAAK,CAAC;YAClC,IAAI,KAAK,IAAI,KAAK,KAAK,MAAM,IAAI,KAAK,KAAK,KAAK,EAAE;AAChD,gBAAA,OAAO,MAAM,CAAC;AACf,aAAA;AACD,YAAA,MAAM,GAAG,MAAM,CAAC,aAAa,CAAC;AAC/B,SAAA;;QAED,OAAO,OAAO,CAAC,aAAa,CAAC;KAC9B;;IAGD,SAAS,uBAAuB,CAAC,OAAoB,EAAA;;QAEnD,IAAI,OAAO,CAAC,SAAS,EAAE,QAAQ,CAAC,YAAY,CAAC,EAAE;AAC7C,YAAA,OAAO,OAAO,CAAC;AAChB,SAAA;;AAGD,QAAA,IAAI,OAAO,CAAC,OAAO,KAAK,WAAW,EAAE;YACnC,MAAM,YAAY,GAAG,OAAO,CAAC,aAAa,CAAC,aAAa,CAAgB,CAAC;YACzE,OAAO,YAAY,IAAI,OAAO,CAAC;AAChC,SAAA;;QAGD,MAAM,YAAY,GAAG,OAAO,CAAC,aAAa,CAAC,aAAa,CAAgB,CAAC;QACzE,OAAO,YAAY,IAAI,OAAO,CAAC;KAChC;;IAGD,SAAS,wBAAwB,CAAC,OAAoB,EAAA;;AAEpD,QAAA,IAAI,OAAO,CAAC,OAAO,KAAK,WAAW,EAAE;AACnC,YAAA,OAAO,OAAO,CAAC;AAChB,SAAA;;AAGD,QAAA,IAAI,MAAM,GAAG,OAAO,CAAC,aAAa,CAAC;AACnC,QAAA,OAAO,MAAM,IAAI,MAAM,KAAK,QAAQ,CAAC,IAAI,EAAE;AACzC,YAAA,IAAI,MAAM,CAAC,OAAO,KAAK,WAAW,EAAE;AAClC,gBAAA,OAAO,MAAM,CAAC;AACf,aAAA;AACD,YAAA,MAAM,GAAG,MAAM,CAAC,aAAa,CAAC;AAC/B,SAAA;AAED,QAAA,OAAO,IAAI,CAAC;KACb;;IAGD,SAAS,cAAc,CAAC,aAA0B,EAAA;AAChD,QAAA,MAAM,YAAY,GAAG,uBAAuB,CAAC,aAAa,CAAC,CAAC;QAC5D,IAAI,CAAC,YAAY,EAAE;YACjB,OAAO;AACR,SAAA;;AAGD,QAAA,MAAM,cAAc,GAAG,wBAAwB,CAAC,aAAa,CAAC,CAAC;AAC/D,QAAA,IAAI,cAAc,EAAE;YAClB,MAAM,cAAc,GAAG,cAAc,CAAC,YAAY,CAAC,iBAAiB,CAAC,CAAC;AACtE,YAAA,IAAI,cAAc,EAAE;;AAElB,gBAAA,YAAY,CAAC,KAAK,CAAC,QAAQ,GAAG,cAAc,CAAC;gBAC7C,OAAO;AACR,aAAA;AACF,SAAA;;AAGD,QAAA,MAAM,MAAM,GAAG,gBAAgB,CAAC,YAAY,CAAC,CAAC;AAC9C,QAAA,IAAI,MAAM,EAAE;AACV,YAAA,MAAM,WAAW,GAAG,MAAM,CAAC,WAAW,CAAC;YACvC,IAAI,WAAW,GAAG,CAAC,EAAE;;;gBAGnB,YAAY,CAAC,KAAK,CAAC,QAAQ,GAAG,CAAG,EAAA,WAAW,IAAI,CAAC;AAClD,aAAA;AACF,SAAA;KACF;;IAGD,MAAM,QAAQ,GAAG,IAAI,gBAAgB,CAAC,CAAC,SAAS,KAAI;AAClD,QAAA,SAAS,CAAC,OAAO,CAAC,CAAC,QAAQ,KAAI;YAC7B,QAAQ,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,IAAI,KAAI;AACnC,gBAAA,IAAI,IAAI,CAAC,QAAQ,KAAK,IAAI,CAAC,YAAY,EAAE;oBACvC,MAAM,OAAO,GAAG,IAAmB,CAAC;;AAGpC,oBAAA,IAAI,OAAO,CAAC,OAAO,KAAK,WAAW,EAAE;;wBAEnC,UAAU,CAAC,MAAK;4BACd,cAAc,CAAC,OAAO,CAAC,CAAC;4BACxB,aAAa,CAAC,OAAO,CAAC,CAAC;yBACxB,EAAE,GAAG,CAAC,CAAC;AACT,qBAAA;;oBAGD,IAAI,OAAO,CAAC,SAAS,EAAE,QAAQ,CAAC,YAAY,CAAC,EAAE;wBAC7C,UAAU,CAAC,MAAK;4BACd,cAAc,CAAC,OAAO,CAAC,CAAC;4BACxB,aAAa,CAAC,OAAO,CAAC,CAAC;yBACxB,EAAE,CAAC,CAAC,CAAC;AACP,qBAAA;;oBAGD,MAAM,SAAS,GAAG,OAAO,CAAC,gBAAgB,GAAG,WAAW,CAAC,CAAC;AAC1D,oBAAA,SAAS,EAAE,OAAO,CAAC,CAAC,MAAM,KAAI;wBAC5B,UAAU,CAAC,MAAK;4BACd,cAAc,CAAC,MAAqB,CAAC,CAAC;4BACtC,aAAa,CAAC,MAAqB,CAAC,CAAC;yBACtC,EAAE,GAAG,CAAC,CAAC;AACV,qBAAC,CAAC,CAAC;oBAEH,MAAM,UAAU,GAAG,OAAO,CAAC,gBAAgB,GAAG,aAAa,CAAC,CAAC;AAC7D,oBAAA,UAAU,EAAE,OAAO,CAAC,CAAC,MAAM,KAAI;wBAC7B,UAAU,CAAC,MAAK;4BACd,cAAc,CAAC,MAAqB,CAAC,CAAC;4BACtC,aAAa,CAAC,MAAqB,CAAC,CAAC;yBACtC,EAAE,CAAC,CAAC,CAAC;AACR,qBAAC,CAAC,CAAC;AACJ,iBAAA;AACH,aAAC,CAAC,CAAC;AACL,SAAC,CAAC,CAAC;AACL,KAAC,CAAC,CAAC;;AAGH,IAAA,MAAM,iBAAiB,GAAG,IAAI,OAAO,EAAoB,CAAC;IAE1D,SAAS,aAAa,CAAC,aAA0B,EAAA;AAC/C,QAAA,IAAI,iBAAiB,CAAC,GAAG,CAAC,aAAa,CAAC,EAAE;YACxC,OAAO;AACR,SAAA;AAED,QAAA,IAAI,OAAQ,MAAc,CAAC,cAAc,KAAK,WAAW,EAAE;AACzD,YAAA,MAAM,YAAY,GAAG,uBAAuB,CAAC,aAAa,CAAC,CAAC;YAC5D,IAAI,CAAC,YAAY,EAAE;gBACjB,OAAO;AACR,aAAA;AAED,YAAA,MAAM,MAAM,GAAG,gBAAgB,CAAC,YAAY,CAAC,CAAC;YAC9C,IAAI,CAAC,MAAM,EAAE;gBACX,OAAO;AACR,aAAA;YAED,MAAM,cAAc,GAAG,IAAK,MAAc,CAAC,cAAc,CAAC,MAAK;gBAC7D,cAAc,CAAC,aAAa,CAAC,CAAC;AAChC,aAAC,CAAC,CAAC;AACH,YAAA,cAAc,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;AAC/B,YAAA,iBAAiB,CAAC,GAAG,CAAC,aAAa,EAAE,cAAc,CAAC,CAAC;AACtD,SAAA;KACF;;AAGD,IAAA,QAAQ,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,EAAE;AAC9B,QAAA,SAAS,EAAE,IAAI;AACf,QAAA,OAAO,EAAE,IAAI;AACd,KAAA,CAAC,CAAC;;IAGH,MAAM,oBAAoB,GAAG,MAAK;;QAEhC,QAAQ,CAAC,gBAAgB,CAAC,WAAW,CAAC,CAAC,OAAO,CAAC,CAAC,OAAO,KAAI;YACzD,UAAU,CAAC,MAAK;gBACd,cAAc,CAAC,OAAsB,CAAC,CAAC;gBACvC,aAAa,CAAC,OAAsB,CAAC,CAAC;aACvC,EAAE,GAAG,CAAC,CAAC;AACV,SAAC,CAAC,CAAC;;QAGH,QAAQ,CAAC,gBAAgB,CAAC,aAAa,CAAC,CAAC,OAAO,CAAC,CAAC,OAAO,KAAI;YAC3D,UAAU,CAAC,MAAK;gBACd,cAAc,CAAC,OAAsB,CAAC,CAAC;gBACvC,aAAa,CAAC,OAAsB,CAAC,CAAC;aACvC,EAAE,CAAC,CAAC,CAAC;AACR,SAAC,CAAC,CAAC;AACL,KAAC,CAAC;;AAGF,IAAA,IAAI,QAAQ,CAAC,UAAU,KAAK,SAAS,EAAE;AACrC,QAAA,QAAQ,CAAC,gBAAgB,CAAC,kBAAkB,EAAE,oBAAoB,CAAC,CAAC;AACrE,KAAA;AAAM,SAAA;AACL,QAAA,oBAAoB,EAAE,CAAC;AACxB,KAAA;AACH;;ACnMA;;AAEG;;ACFH;;AAEG;;;;"}