@visactor/vtable 1.22.11-alpha.5 → 1.22.11-alpha.7
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.
- package/cjs/core/BaseTable.js +1 -1
- package/cjs/core/BaseTable.js.map +1 -1
- package/cjs/core/record-helper.js +39 -23
- package/cjs/core/record-helper.js.map +1 -1
- package/cjs/data/DataSource.d.ts +9 -4
- package/cjs/data/DataSource.js +131 -54
- package/cjs/data/DataSource.js.map +1 -1
- package/cjs/index.d.ts +1 -1
- package/cjs/index.js +1 -1
- package/cjs/index.js.map +1 -1
- package/cjs/themes/theme-define.js +6 -0
- package/cjs/themes/theme-define.js.map +1 -1
- package/cjs/ts-types/table-engine.d.ts +1 -0
- package/cjs/ts-types/table-engine.js.map +1 -1
- package/cjs/vrender.js.map +1 -1
- package/dist/vtable.js +311 -104
- package/dist/vtable.min.js +2 -2
- package/es/core/BaseTable.js +1 -1
- package/es/core/BaseTable.js.map +1 -1
- package/es/core/record-helper.js +39 -23
- package/es/core/record-helper.js.map +1 -1
- package/es/data/DataSource.d.ts +9 -4
- package/es/data/DataSource.js +130 -53
- package/es/data/DataSource.js.map +1 -1
- package/es/index.d.ts +1 -1
- package/es/index.js +1 -1
- package/es/index.js.map +1 -1
- package/es/themes/theme-define.js +6 -0
- package/es/themes/theme-define.js.map +1 -1
- package/es/ts-types/table-engine.d.ts +1 -0
- package/es/ts-types/table-engine.js.map +1 -1
- package/es/vrender.js.map +1 -1
- package/package.json +4 -4
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/data/DataSource.ts"],"names":[],"mappings":"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","file":"DataSource.js","sourcesContent":["import * as sort from '../tools/sort';\nimport type {\n CustomAggregation,\n DataSourceAPI,\n FieldAssessor,\n FieldData,\n FieldDef,\n FieldFormat,\n FilterRules,\n IListTableDataConfig,\n IPagination,\n MaybePromiseOrCallOrUndefined,\n MaybePromiseOrUndefined,\n SortOrder,\n SortState\n} from '../ts-types';\nimport { AggregationType, HierarchyState } from '../ts-types';\nimport { applyChainSafe, getOrApply, obj, isPromise, emptyFn } from '../tools/helper';\nimport { EventTarget } from '../event/EventTarget';\nimport { computeChildrenNodeLength, getValueByPath, isAllDigits } from '../tools/util';\nimport { calculateArrayDiff } from '../tools/diff-cell';\nimport { arrayEqual, cloneDeep, isArray, isNumber, isObject, isValid } from '@visactor/vutils';\nimport type { BaseTableAPI } from '../ts-types/base-table';\nimport {\n RecordAggregator,\n type Aggregator,\n SumAggregator,\n CountAggregator,\n MaxAggregator,\n MinAggregator,\n AvgAggregator,\n NoneAggregator,\n CustomAggregator\n} from '../ts-types/dataset/aggregation';\nimport type { ColumnDefine, ColumnsDefine } from '../ts-types/list-table/layout-map/api';\n\n/**\n * 判断字段数据是否为访问器的格式\n * @param field\n * @returns boolean\n */\nfunction isFieldAssessor(field: FieldDef | FieldFormat | number): field is FieldAssessor {\n if (obj.isObject(field)) {\n const a = field as FieldAssessor;\n if (isValid(a.get) && isValid(a.set)) {\n return true;\n }\n }\n return false;\n}\nconst EVENT_TYPE = {\n SOURCE_LENGTH_UPDATE: 'source_length_update',\n CHANGE_ORDER: 'change_order'\n} as const;\ntype PromiseBack = (value: MaybePromiseOrUndefined) => void;\n\n/**\n * 获取到的某个filed的值 处理可能为promise的情况\n * @param value\n * @param promiseCallBack\n * @returns\n */\nexport function getValue(value: MaybePromiseOrCallOrUndefined, promiseCallBack: PromiseBack): MaybePromiseOrUndefined {\n const maybePromiseOrValue = getOrApply(value);\n if (isPromise(maybePromiseOrValue)) {\n const promiseValue = maybePromiseOrValue.then((r: any) => {\n promiseCallBack(r);\n return r;\n });\n\n promiseCallBack(promiseValue);\n return promiseValue;\n }\n return maybePromiseOrValue;\n}\n/**\n * 根据field获取数据源record对应的值 获取到的可能是个异步Promise 需要设置回调处理逻辑\n * @param record\n * @param field\n * @param promiseCallBack\n * @returns\n */\nexport function getField(\n record: MaybePromiseOrUndefined,\n field: FieldDef | FieldFormat | number,\n col: number,\n row: number,\n table: BaseTableAPI,\n promiseCallBack: PromiseBack\n): FieldData {\n if (record === null || record === undefined) {\n return undefined;\n }\n if (isPromise(record)) {\n return record.then((r: any) => getField(r, field, col, row, table, promiseCallBack));\n }\n const fieldGet: any = isFieldAssessor(field) ? field.get : field;\n // 如果fieldGet为undefined或'' 并且record是数组 则取值逻辑按照colIndex取数组值 返回record[col - table.leftRowSeriesNumberCount]\n if ((fieldGet === undefined || fieldGet === '') && Array.isArray(record)) {\n const colIndex = col - table.leftRowSeriesNumberCount;\n return record[colIndex];\n }\n if (isObject(record) && fieldGet in (record as any)) {\n const fieldResult = (record as any)[fieldGet];\n\n return getValue(fieldResult, promiseCallBack);\n }\n if (typeof fieldGet === 'function') {\n const fieldResult = fieldGet(record, col, row, table);\n return getValue(fieldResult, promiseCallBack);\n }\n if (Array.isArray(fieldGet)) {\n const fieldResult = getValueByPath(record, [...fieldGet]);\n return getValue(fieldResult, promiseCallBack);\n }\n const fieldArray = `${fieldGet}`.split('.');\n if (fieldArray.length <= 1) {\n const fieldResult = (record as any)[fieldGet];\n return getValue(fieldResult, promiseCallBack);\n }\n const fieldResult = applyChainSafe(\n record,\n (val, name) => getField(val, name, col, row, table, emptyFn as any),\n ...fieldArray\n );\n return getValue(fieldResult, promiseCallBack);\n}\n\nfunction _getIndex(sortedIndexMap: null | (number | number[])[], index: number): number | number[] {\n if (!sortedIndexMap) {\n return index;\n }\n const mapIndex = sortedIndexMap[index];\n return isValid(mapIndex) ? mapIndex : index;\n}\n\nexport interface DataSourceParam {\n get?: (index: number) => any;\n length?: number;\n /** 需要异步加载的情况 请不要设置records 请提供get接口 */\n records?: any;\n added?: (index: number, count: number) => any;\n deleted?: (index: number[]) => any;\n canChangeOrder?: (sourceIndex: number, targetIndex: number) => boolean;\n changeOrder?: (sourceIndex: number, targetIndex: number) => void;\n}\nexport interface ISortedMapItem {\n asc?: (number | number[])[];\n desc?: (number | number[])[];\n normal?: (number | number[])[];\n}\n\nexport class DataSource extends EventTarget implements DataSourceAPI {\n addRecordRule: 'Array' | 'Object' = 'Object';\n dataConfig: IListTableDataConfig;\n dataSourceObj: DataSourceParam | DataSource;\n private _get: (index: number | number[]) => any;\n /** 数据条目数 如果是树形结构的数据 则是第一层父节点的数量 */\n private _sourceLength: number;\n\n private _source: any[] | DataSourceParam | DataSource;\n /**\n * 缓存按字段进行排序的结果\n */\n protected sortedIndexMap: Map<FieldDef, ISortedMapItem>;\n /**\n * 记录最近一次排序规则 当展开树形结构的节点时需要用到\n */\n // private lastOrder: SortOrder;\n // private lastOrderFn: (a: any, b: any, order: string) => number;\n // private lastOrderField: FieldDef;\n private lastSortStates: Array<SortState>;\n\n /** 每一行对应源数据的索引 */\n currentIndexedData: (number | number[])[] | null = [];\n protected userPagination: IPagination;\n protected pagination: IPagination;\n /** 当前页每一行对应源数据的索引 */\n _currentPagerIndexedData: (number | number[])[];\n // 当前是否为层级的树形结构 排序时判断该值确实是否继续进行子节点排序\n hierarchyExpandLevel: number = 0;\n static get EVENT_TYPE(): typeof EVENT_TYPE {\n return EVENT_TYPE;\n }\n hasHierarchyStateExpand: boolean = false;\n // treeDataHierarchyState: Map<number | string, HierarchyState> = new Map();\n // beforeChangedRecordsMap: Record<number | string, any> = {}; // TODO过滤后 或者排序后的对应关系\n beforeChangedRecordsMap: Map<string, any> = new Map(); // TODO过滤后 或者排序后的对应关系\n /**\n * 注册聚合类型\n */\n\n // 注册聚合类型\n registedAggregators: {\n [key: string]: {\n new (config: {\n field: string | string[];\n formatFun?: any;\n isRecord?: boolean;\n aggregationFun?: Function;\n }): Aggregator;\n };\n } = {};\n rowHierarchyType: 'grid' | 'tree' | 'grid-tree' = 'grid';\n // columns对应各个字段的聚合类对象\n fieldAggregators: Aggregator[] = [];\n columns: ColumnsDefine;\n lastFilterRules: FilterRules;\n constructor(\n dataSourceObj?: DataSourceParam,\n dataConfig?: IListTableDataConfig,\n pagination?: IPagination,\n columns?: ColumnsDefine,\n rowHierarchyType?: 'grid' | 'tree',\n hierarchyExpandLevel?: number\n ) {\n super();\n this.addRecordRule = dataConfig?.addRecordRule || 'Object';\n this.registerAggregators();\n this.dataSourceObj = dataSourceObj;\n this.dataConfig = dataConfig;\n this._get = dataSourceObj?.get;\n this.columns = columns;\n this._source = dataSourceObj?.records ? this.processRecords(dataSourceObj?.records) : dataSourceObj;\n this._sourceLength = this._source?.length || 0;\n this.sortedIndexMap = new Map<string, ISortedMapItem>();\n\n this._currentPagerIndexedData = [];\n this.userPagination = pagination;\n this.pagination = pagination || {\n totalCount: this._sourceLength,\n perPageCount: this._sourceLength,\n currentPage: 0\n };\n if (hierarchyExpandLevel >= 1) {\n this.hierarchyExpandLevel = hierarchyExpandLevel;\n }\n this.currentIndexedData = Array.from({ length: this._sourceLength }, (_, i) => i);\n // 初始化currentIndexedData 正常未排序。设置其状态\n if (rowHierarchyType === 'tree') {\n this.initTreeHierarchyState();\n }\n this.rowHierarchyType = rowHierarchyType;\n this.updatePagerData();\n }\n initTreeHierarchyState() {\n // if (this.hierarchyExpandLevel) {\n this._sourceLength = this._source?.length || 0;\n this.currentIndexedData = Array.from({ length: this._sourceLength }, (_, i) => i);\n // if (this.hierarchyExpandLevel > 1) {\n let nodeLength = this._sourceLength;\n for (let i = 0; i < nodeLength; i++) {\n const indexKey = this.currentIndexedData[i];\n const nodeData = this.getOriginalRecord(indexKey);\n if (!nodeData) {\n continue;\n }\n const children = (nodeData as any).filteredChildren ?? (nodeData as any).children;\n if (children?.length > 0) {\n if (this.hierarchyExpandLevel > 1) {\n !nodeData.hierarchyState && (nodeData.hierarchyState = HierarchyState.expand);\n } else {\n !nodeData.hierarchyState && (nodeData.hierarchyState = HierarchyState.collapse);\n }\n this.hasHierarchyStateExpand = true;\n if (nodeData.hierarchyState === HierarchyState.collapse) {\n continue;\n }\n const childrenLength = this.initChildrenNodeHierarchy(indexKey, this.hierarchyExpandLevel, 2, nodeData);\n i += childrenLength;\n nodeLength += childrenLength;\n } else if ((nodeData as any).children === true) {\n !nodeData.hierarchyState && (nodeData.hierarchyState = HierarchyState.collapse);\n }\n }\n // }\n // }\n }\n\n supplementConfig(\n pagination?: IPagination,\n columns?: ColumnsDefine,\n rowHierarchyType?: 'grid' | 'tree' | 'grid-tree',\n hierarchyExpandLevel?: number\n ) {\n this.columns = columns;\n this._sourceLength = this._source?.length || 0;\n this.sortedIndexMap = new Map<string, ISortedMapItem>();\n\n this._currentPagerIndexedData = [];\n this.userPagination = pagination;\n this.pagination = pagination || {\n totalCount: this._sourceLength,\n perPageCount: this._sourceLength,\n currentPage: 0\n };\n if (hierarchyExpandLevel >= 1) {\n this.hierarchyExpandLevel = hierarchyExpandLevel;\n }\n this.currentIndexedData = Array.from({ length: this._sourceLength }, (_, i) => i);\n // 初始化currentIndexedData 正常未排序。设置其状态\n if (rowHierarchyType === 'tree') {\n this.initTreeHierarchyState();\n }\n this.rowHierarchyType = rowHierarchyType;\n this.updatePagerData();\n }\n\n //将聚合类型注册 收集到aggregators\n registerAggregator(type: string, aggregator: any) {\n this.registedAggregators[type] = aggregator;\n }\n //将聚合类型注册\n registerAggregators() {\n this.registerAggregator(AggregationType.RECORD, RecordAggregator);\n this.registerAggregator(AggregationType.SUM, SumAggregator);\n this.registerAggregator(AggregationType.COUNT, CountAggregator);\n this.registerAggregator(AggregationType.MAX, MaxAggregator);\n this.registerAggregator(AggregationType.MIN, MinAggregator);\n this.registerAggregator(AggregationType.AVG, AvgAggregator);\n this.registerAggregator(AggregationType.NONE, NoneAggregator);\n this.registerAggregator(AggregationType.CUSTOM, CustomAggregator);\n }\n updateColumns(columns: ColumnsDefine) {\n this.columns = columns;\n }\n _generateFieldAggragations() {\n const columnObjs = this.columns;\n\n this.fieldAggregators = [];\n\n const processColumn: (columns: ColumnDefine) => void = column => {\n // 重置聚合器\n delete (column as any).vtable_aggregator;\n\n const field = column.field;\n const aggregation = column.aggregation;\n if (!aggregation) {\n return; // 当前列无聚合逻辑,跳过\n }\n\n if (Array.isArray(aggregation)) {\n for (const item of aggregation) {\n const aggregator = new this.registedAggregators[item.aggregationType]({\n field: field as string,\n formatFun: item.formatFun,\n isRecord: true,\n aggregationFun: (item as CustomAggregation).aggregationFun\n });\n\n this.fieldAggregators.push(aggregator);\n\n if (!(column as any).vtable_aggregator) {\n (column as any).vtable_aggregator = [];\n }\n (column as any).vtable_aggregator.push(aggregator);\n }\n } else {\n const aggregator = new this.registedAggregators[aggregation.aggregationType]({\n field: field as string,\n formatFun: aggregation.formatFun,\n isRecord: true,\n aggregationFun: (aggregation as CustomAggregation).aggregationFun\n });\n\n this.fieldAggregators.push(aggregator);\n (column as any).vtable_aggregator = aggregator;\n }\n };\n\n const traverseColumns: (columns: ColumnsDefine) => void = columns => {\n if (!columns || columns.length === 0) {\n return;\n }\n\n for (const column of columns) {\n processColumn(column); // 处理当前列\n if (column.columns) {\n traverseColumns(column.columns); // 递归处理子列\n }\n }\n };\n\n traverseColumns(columnObjs); // 从根列开始处理\n }\n processRecords(records: any[]) {\n this._generateFieldAggragations();\n const filteredRecords = [];\n const isHasAggregation = this.fieldAggregators.length >= 1;\n const isHasFilterRule = this.dataConfig?.filterRules?.length >= 1 || this.lastFilterRules?.length >= 1;\n if (isHasFilterRule || isHasAggregation) {\n for (let i = 0, len = records.length; i < len; i++) {\n const record = records[i];\n // 跳过空白行\n if (record === undefined || record === null) {\n continue;\n }\n if (this.dataConfig?.filterRules?.length >= 1) {\n if (this.filterRecord(record)) {\n filteredRecords.push(record);\n if (this.rowHierarchyType === 'tree' && record.children) {\n record.filteredChildren = this.filteredChildren(record.children);\n }\n isHasAggregation && this.processRecord(record);\n }\n } else if (this.lastFilterRules?.length >= 1) {\n //上次做了过滤 本次做清除过滤规则的情况\n this.clearFilteredChildren(record);\n isHasAggregation && this.processRecord(record);\n } else if (isHasAggregation) {\n this.processRecord(record);\n }\n }\n if (this.dataConfig?.filterRules?.length >= 1) {\n return filteredRecords;\n }\n }\n return records;\n }\n\n filteredChildren(records: any[]) {\n const filteredRecords = [];\n for (let i = 0, len = records.length; i < len; i++) {\n const record = records[i];\n if (this.filterRecord(record)) {\n filteredRecords.push(record);\n if (record.children) {\n record.filteredChildren = this.filteredChildren(record.children);\n }\n }\n }\n return filteredRecords;\n }\n\n processRecord(record: any) {\n for (let i = 0; i < this.fieldAggregators.length; i++) {\n const aggregator = this.fieldAggregators[i];\n aggregator.push(record);\n }\n }\n /**\n * 初始化子节点的层次信息\n * @param indexKey 父节点的indexKey 即currentLevel-1的节点\n * @param hierarchyExpandLevel 需要展开层级数\n * @param currentLevel 当前要展开的是第几层\n * @param nodeData 父节点数据 即currentLevel-1的节点\n * @returns\n */\n initChildrenNodeHierarchy(\n indexKey: number | number[],\n // subNodeIndex:number,\n hierarchyExpandLevel: number,\n currentLevel: number,\n nodeData: any\n ): number {\n // if (currentLevel > hierarchyExpandLevel) {\n // return 0;\n // }\n let childTotalLength = 0;\n const nodeLength = nodeData.filteredChildren ? nodeData.filteredChildren.length : nodeData.children?.length ?? 0;\n for (let j = 0; j < nodeLength; j++) {\n if (currentLevel <= hierarchyExpandLevel || nodeData.hierarchyState === HierarchyState.expand) {\n childTotalLength += 1;\n }\n const childNodeData = nodeData.filteredChildren ? nodeData.filteredChildren[j] : nodeData.children[j];\n const childIndexKey = Array.isArray(indexKey) ? indexKey.concat(j) : [indexKey, j];\n if (currentLevel <= hierarchyExpandLevel || nodeData.hierarchyState === HierarchyState.expand) {\n this.currentIndexedData.splice(\n this.currentIndexedData.indexOf(indexKey) + childTotalLength,\n // childTotalLength,\n 0,\n childIndexKey\n );\n }\n if (\n childNodeData.filteredChildren ? childNodeData.filteredChildren.length > 0 : childNodeData.children?.length > 0\n ) {\n if (currentLevel < hierarchyExpandLevel || childNodeData.hierarchyState === HierarchyState.expand) {\n // this.treeDataHierarchyState.set(\n // Array.isArray(childIndexKey) ? childIndexKey.join(',') : childIndexKey,\n // HierarchyState.expand\n // );\n !childNodeData.hierarchyState && (childNodeData.hierarchyState = HierarchyState.expand);\n this.hasHierarchyStateExpand = true;\n } else {\n // this.treeDataHierarchyState.set(\n // Array.isArray(childIndexKey) ? childIndexKey.join(',') : childIndexKey,\n // HierarchyState.collapse\n // );\n !childNodeData.hierarchyState && (childNodeData.hierarchyState = HierarchyState.collapse);\n }\n }\n if (childNodeData.hierarchyState === HierarchyState.expand) {\n childTotalLength += this.initChildrenNodeHierarchy(\n childIndexKey,\n hierarchyExpandLevel,\n currentLevel + 1,\n childNodeData\n );\n }\n if ((childNodeData as any).children === true) {\n !childNodeData.hierarchyState && (childNodeData.hierarchyState = HierarchyState.collapse);\n }\n }\n return childTotalLength;\n }\n updatePagination(pagination?: IPagination): void {\n this.pagination = pagination || {\n totalCount: this._sourceLength,\n perPageCount: this._sourceLength,\n currentPage: 0\n };\n this.updatePagerData();\n }\n protected updatePagerData(): void {\n const { currentIndexedData } = this;\n const { perPageCount, currentPage } = this.pagination;\n const startIndex = perPageCount * (currentPage || 0);\n const endIndex = startIndex + perPageCount;\n this._currentPagerIndexedData.length = 0;\n if (currentIndexedData && currentIndexedData.length > 0) {\n // this._currentPagerIndexedData = currentIndexedData.slice(startIndex, endIndex);\n let firstLevelIndex = -1;\n for (let i = 0; i < currentIndexedData.length; i++) {\n //计算第一层父级节点数量\n if (\n (Array.isArray(currentIndexedData[i]) && (currentIndexedData[i] as Array<number>).length === 1) ||\n !Array.isArray(currentIndexedData[i])\n ) {\n firstLevelIndex++;\n }\n if (firstLevelIndex >= startIndex && firstLevelIndex < endIndex) {\n this._currentPagerIndexedData.push(currentIndexedData[i]);\n } else if (firstLevelIndex >= endIndex) {\n break;\n }\n }\n } else if (this._sourceLength > 0) {\n throw new Error(`currentIndexedData should has values!`);\n }\n }\n\n getRecordIndexPaths(bodyShowIndex: number): number | number[] {\n return this._currentPagerIndexedData[bodyShowIndex];\n }\n\n get records(): any[] {\n return Array.isArray(this._source) ? this._source : [];\n }\n\n get source(): any[] | DataSourceParam | DataSource {\n return this._source;\n }\n get(index: number): MaybePromiseOrUndefined {\n return this.getOriginalRecord(_getIndex(this.currentPagerIndexedData, index));\n }\n getRaw(index: number): MaybePromiseOrUndefined {\n return this.getRawRecord(_getIndex(this.currentPagerIndexedData, index) as number);\n }\n getIndexKey(index: number): number | number[] {\n return _getIndex(this.currentPagerIndexedData, index);\n }\n getTableIndex(colOrRow: number | number[]): number {\n if (Array.isArray(colOrRow)) {\n if (this.rowHierarchyType === 'tree') {\n return this.currentPagerIndexedData.findIndex(value => arrayEqual(value, colOrRow));\n }\n return this.currentPagerIndexedData.findIndex(value => value === colOrRow[0]);\n }\n return this.currentPagerIndexedData.findIndex(value => value === colOrRow);\n }\n /** 获取数据源中第index位置的field字段数据。传入col row是因为后面的format函数参数使用*/\n getField(\n index: number,\n field: FieldDef | FieldFormat | number,\n col: number,\n row: number,\n table: BaseTableAPI\n ): FieldData {\n return this.getOriginalField(_getIndex(this.currentPagerIndexedData, index), field, col, row, table);\n }\n\n getRawField(\n index: number,\n field: FieldDef | FieldFormat | number,\n col: number,\n row: number,\n table: BaseTableAPI\n ): FieldData {\n return this.getRawFieldData(_getIndex(this.currentPagerIndexedData, index) as number, field, col, row, table);\n }\n\n hasField(index: number, field: FieldDef): boolean {\n return this.hasOriginalField(_getIndex(this.currentPagerIndexedData, index), field);\n }\n /**\n * 获取第index条数据的展示收起状态\n * @param index\n * @returns\n */\n getHierarchyState(index: number): HierarchyState {\n // const indexed = this.getIndexKey(index);\n const record = this.getOriginalRecord(this.currentPagerIndexedData[index]);\n if (record?.hierarchyState) {\n const hierarchyState = record.hierarchyState;\n if (record.children?.length > 0 || record.children === true) {\n return hierarchyState;\n }\n }\n return null;\n // return this.treeDataHierarchyState.get(Array.isArray(indexed) ? indexed.join(',') : indexed) ?? null;\n }\n /**\n * 展开或者收起数据index\n * @param index\n */\n toggleHierarchyState(index: number, bodyStartIndex: number, bodyEndIndex: number) {\n const oldIndexedData = this.currentIndexedData.slice(0);\n const indexed = this.getIndexKey(index);\n const state = this.getHierarchyState(index);\n const data = this.getOriginalRecord(indexed);\n\n this.clearSortedIndexMap();\n if (state === HierarchyState.collapse) {\n // 将节点状态置为expand\n // this.treeDataHierarchyState.set(Array.isArray(indexed) ? indexed.join(',') : indexed, HierarchyState.expand);\n data.hierarchyState = HierarchyState.expand;\n this.pushChildrenNode(indexed, HierarchyState.expand, data);\n this.hasHierarchyStateExpand = true;\n } else if (state === HierarchyState.expand) {\n const childrenLength = computeChildrenNodeLength(indexed, state, data);\n this.currentIndexedData.splice(this.currentIndexedData.indexOf(indexed) + 1, childrenLength);\n // this.treeDataHierarchyState.set(Array.isArray(indexed) ? indexed.join(',') : indexed, HierarchyState.collapse);\n data.hierarchyState = HierarchyState.collapse;\n }\n // 变更了pagerConfig所以需要更新分页数据 TODO待定 因为只关注根节点的数量的话 可能不会影响到\n this.updatePagerData();\n const add = [];\n const remove = [];\n if (state === HierarchyState.collapse) {\n const addLength = this.currentIndexedData.length - oldIndexedData.length;\n for (let i = 0; i < addLength; i++) {\n add.push(index + i + 1);\n }\n } else if (state === HierarchyState.expand) {\n const removeLength = oldIndexedData.length - this.currentIndexedData.length;\n for (let i = 0; i < removeLength; i++) {\n remove.push(index + i + 1);\n }\n }\n // const newDiff = calculateArrayDiff(\n // oldIndexedData.slice(bodyStartIndex, bodyEndIndex + 1),\n // this.currentIndexedData.slice(bodyStartIndex, bodyEndIndex + 1),\n // bodyStartIndex\n // );\n // // const oldDiff = diffCellIndices(oldIndexedData, this.currentIndexedData);\n\n // // return oldDiff;\n // return newDiff;\n return { add, remove };\n }\n /**\n * 某个节点状态由折叠变为展开,往this.currentIndexedData中插入展开后的新增节点,注意需要递归,因为展开节点下面的子节点也能是展开状态\n * @param recordRowIndex 要计算节点的行号(从body部分开始计算)\n * @param indexKey 需要判断节点的index\n * @param hierarchyState 当前节点状态\n * @param nodeData 当前节点数据 取children时用\n * @returns\n */\n pushChildrenNode(indexKey: number | number[], hierarchyState: HierarchyState, nodeData: any): number {\n if (!hierarchyState || hierarchyState === HierarchyState.collapse || hierarchyState === HierarchyState.none) {\n return 0;\n }\n let childrenLength = 0;\n const children = nodeData.filteredChildren ? nodeData.filteredChildren : nodeData.children;\n if (children) {\n const subNodeSortedIndexArray: Array<number> = Array.from({ length: children.length }, (_, i) => i);\n this.lastSortStates?.forEach(state => {\n if (state.order !== 'normal') {\n sort.sort(\n index =>\n isValid(subNodeSortedIndexArray[index])\n ? subNodeSortedIndexArray[index]\n : (subNodeSortedIndexArray[index] = index),\n (index, rel) => {\n subNodeSortedIndexArray[index] = rel;\n },\n children.length,\n state.orderFn,\n state.order,\n index =>\n this.getOriginalField(Array.isArray(indexKey) ? indexKey.concat([index]) : [indexKey, index], state.field)\n );\n }\n });\n for (let i = 0; i < subNodeSortedIndexArray.length; i++) {\n childrenLength += 1;\n const childIndex = Array.isArray(indexKey)\n ? indexKey.concat([subNodeSortedIndexArray[i]])\n : [indexKey, subNodeSortedIndexArray[i]];\n this.currentIndexedData.splice(\n this.currentIndexedData.indexOf(indexKey) + childrenLength,\n // this.pagination.currentPage * this.pagination.perPageCount +\n // recordRowIndex +\n // childrenLength,\n 0,\n childIndex\n );\n\n // const preChildState = this.treeDataHierarchyState.get(childIndex.join(','));\n const childData = this.getOriginalRecord(childIndex);\n if (!childData.hierarchyState && (childData.filteredChildren ?? childData.children)) {\n // this.treeDataHierarchyState.set(childIndex.join(','), HierarchyState.collapse);\n childData.hierarchyState = HierarchyState.collapse;\n }\n childrenLength += this.pushChildrenNode(\n childIndex,\n // this.treeDataHierarchyState.get(childIndex.join(',')),\n childData.hierarchyState,\n children[subNodeSortedIndexArray[i]]\n );\n }\n }\n return childrenLength;\n }\n\n changeFieldValue(\n value: FieldData,\n index: number,\n field: FieldDef,\n col?: number,\n row?: number,\n table?: BaseTableAPI\n ): FieldData {\n if (field === null) {\n return undefined;\n }\n if (index >= 0) {\n const dataIndex = this.getIndexKey(index);\n\n this.cacheBeforeChangedRecord(dataIndex, table);\n // 如果field为undefined或'' 按照colIndex取数组值\n if (field === undefined || field === '') {\n field = col - table.leftRowSeriesNumberCount;\n }\n if (typeof field === 'string' || typeof field === 'number') {\n const beforeChangedValue = this.beforeChangedRecordsMap.get(dataIndex.toString())?.[field as any]; // this.getOriginalField(index, field, col, row, table);\n const record = this.getOriginalRecord(dataIndex);\n let formatValue = value;\n if (typeof beforeChangedValue === 'number' && isAllDigits(value)) {\n formatValue = parseFloat(value);\n }\n if (isPromise(record)) {\n record\n .then(record => {\n record[field as string | number] = formatValue;\n })\n .catch((err: Error) => {\n console.error('VTable Error:', err);\n });\n } else {\n if (record) {\n record[field] = formatValue;\n } else {\n this.records[dataIndex as number] = this.addRecordRule === 'Array' ? [] : {};\n this.records[dataIndex as number][field] = formatValue;\n }\n }\n }\n }\n // return getField(record, field);\n }\n\n changeFieldValueByRecordIndex(\n value: FieldData,\n recordIndex: number | number[],\n field: FieldDef,\n table?: BaseTableAPI\n ): FieldData {\n if (field === null) {\n return undefined;\n }\n if (recordIndex === undefined || recordIndex === null) {\n return;\n }\n\n const rawKey = recordIndex.toString();\n if (!this.beforeChangedRecordsMap.has(rawKey)) {\n const rawRecords = Array.isArray((this.dataSourceObj as any)?.records)\n ? (this.dataSourceObj as any).records\n : null;\n const originRecord = rawRecords\n ? Array.isArray(recordIndex)\n ? getValueFromDeepArray(rawRecords, recordIndex)\n : rawRecords[recordIndex]\n : undefined;\n this.beforeChangedRecordsMap.set(\n rawKey,\n cloneDeep(originRecord, undefined, ['vtable_gantt_linkedFrom', 'vtable_gantt_linkedTo']) ?? {}\n );\n }\n\n if (typeof field === 'string' || typeof field === 'number') {\n const beforeChangedValue = this.beforeChangedRecordsMap.get(rawKey)?.[field as any];\n const rawRecords = Array.isArray((this.dataSourceObj as any)?.records)\n ? (this.dataSourceObj as any).records\n : null;\n const record = rawRecords\n ? Array.isArray(recordIndex)\n ? getValueFromDeepArray(rawRecords, recordIndex)\n : rawRecords[recordIndex]\n : undefined;\n let formatValue = value;\n if (typeof beforeChangedValue === 'number' && isAllDigits(value)) {\n formatValue = parseFloat(value);\n }\n if (record) {\n record[field] = formatValue;\n } else if (rawRecords && typeof recordIndex === 'number') {\n rawRecords[recordIndex] = this.addRecordRule === 'Array' ? [] : {};\n rawRecords[recordIndex][field] = formatValue;\n }\n }\n }\n\n cacheBeforeChangedRecord(dataIndex: number | number[], table?: BaseTableAPI) {\n if (!this.beforeChangedRecordsMap.has(dataIndex.toString())) {\n const originRecord = this.getOriginalRecord(dataIndex);\n this.beforeChangedRecordsMap.set(\n dataIndex.toString(),\n cloneDeep(originRecord, undefined, ['vtable_gantt_linkedFrom', 'vtable_gantt_linkedTo']) ?? {}\n );\n }\n }\n\n /**\n * 将数据record 替换到index位置处\n * @param record\n * @param index\n */\n setRecord(record: any, index: number) {\n let isAdd = true;\n if (this.dataConfig?.filterRules?.length >= 1) {\n if (this.filterRecord(record)) {\n if (this.rowHierarchyType === 'tree' && record.children) {\n record.filteredChildren = this.filteredChildren(record.children);\n }\n } else {\n isAdd = false;\n }\n }\n if (isAdd && Array.isArray(this.records)) {\n const indexed = this.getIndexKey(index);\n if (!Array.isArray(indexed)) {\n this.records.splice(indexed, 1, record);\n } else {\n // const c_node_index = (indexed as Array<any>)[indexed.length - 1];\n // const p_node = this.getOriginalRecord(indexed.slice(0, indexed.length - 1));\n // (p_node as any).children.splice(c_node_index, 1, record);\n }\n }\n }\n /**\n * 将单条数据record 添加到index位置处\n * @param record 被添加的单条数据\n * @param index 代表的数据源中的index\n */\n addRecord(record: any, index: number) {\n if (Array.isArray(this.records)) {\n this.records.splice(index, 0, record);\n this.adjustBeforeChangedRecordsMap(index, 1);\n this.currentIndexedData.push(this.currentIndexedData.length);\n this._sourceLength += 1;\n for (let i = 0; i < this.fieldAggregators.length; i++) {\n this.fieldAggregators[i].push(record);\n }\n if (this.rowHierarchyType === 'tree') {\n this.initTreeHierarchyState();\n }\n if (this.userPagination) {\n //如果用户配置了分页\n this.pagination.totalCount = this._sourceLength;\n const { perPageCount, currentPage } = this.pagination;\n const startIndex = perPageCount * (currentPage || 0);\n const endIndex = startIndex + perPageCount;\n if (index < endIndex) {\n this.updatePagerData();\n }\n } else {\n this.pagination.perPageCount = this._sourceLength;\n this.pagination.totalCount = this._sourceLength;\n this.updatePagerData();\n }\n\n if ((this.dataSourceObj as DataSourceParam)?.added) {\n (this.dataSourceObj as DataSourceParam).added(index, 1);\n }\n }\n }\n /**\n * 将多条数据recordArr 依次添加到index位置处\n * @param recordArr\n * @param index 代表的数据源中的index\n */\n addRecords(recordArr: any, index: number) {\n if (Array.isArray(this.records)) {\n if (Array.isArray(recordArr)) {\n this.records.splice(index, 0, ...recordArr);\n this.adjustBeforeChangedRecordsMap(index, recordArr.length);\n for (let i = 0; i < recordArr.length; i++) {\n this.currentIndexedData.push(this.currentIndexedData.length);\n }\n this._sourceLength += recordArr.length;\n\n for (let i = 0; i < this.fieldAggregators.length; i++) {\n for (let j = 0; j < recordArr.length; j++) {\n this.fieldAggregators[i].push(recordArr[j]);\n }\n }\n }\n\n if (this.userPagination) {\n //如果用户配置了分页\n this.pagination.totalCount = this._sourceLength;\n const { perPageCount, currentPage } = this.pagination;\n const startIndex = perPageCount * (currentPage || 0);\n const endIndex = startIndex + perPageCount;\n if (index < endIndex) {\n this.updatePagerData();\n }\n } else {\n this.pagination.perPageCount = this._sourceLength;\n this.pagination.totalCount = this._sourceLength;\n this.updatePagerData();\n }\n\n if ((this.dataSourceObj as DataSourceParam)?.added) {\n (this.dataSourceObj as DataSourceParam).added(index, recordArr.length);\n }\n }\n }\n\n /**\n * 将单条数据record 添加到index位置处\n * @param record 被添加的单条数据\n * @param index 代表的数据源中的index\n */\n addRecordForSorted(record: any) {\n if (Array.isArray(this.records)) {\n this.beforeChangedRecordsMap.clear(); // 排序情况下插入数据,很难将原index和插入新增再次排序后的新index做对应,所以这里之前先清除掉beforeChangedRecordsMap 不做维护\n this.records.push(record);\n this.currentIndexedData.push(this.currentIndexedData.length);\n this._sourceLength += 1;\n this.sortedIndexMap.clear();\n if (!this.userPagination) {\n this.pagination.perPageCount = this._sourceLength;\n this.pagination.totalCount = this._sourceLength;\n }\n }\n }\n /**\n * 将多条数据recordArr 依次添加到index位置处\n * @param recordArr\n * @param index 代表的数据源中的index\n */\n addRecordsForSorted(recordArr: any) {\n if (Array.isArray(this.records)) {\n this.beforeChangedRecordsMap.clear(); // 排序情况下插入数据,很难将原index和插入新增再次排序后的新index做对应,所以这里之前先清除掉beforeChangedRecordsMap 不做维护\n if (Array.isArray(recordArr)) {\n this.records.push(...recordArr);\n for (let i = 0; i < recordArr.length; i++) {\n this.currentIndexedData.push(this.currentIndexedData.length);\n }\n this._sourceLength += recordArr.length;\n this.sortedIndexMap.clear();\n }\n if (!this.userPagination) {\n this.pagination.perPageCount = this._sourceLength;\n this.pagination.totalCount = this._sourceLength;\n }\n }\n }\n\n adjustBeforeChangedRecordsMap(insertIndex: number, insertCount: number, type: 'add' | 'delete' = 'add') {\n const delta = type === 'add' ? insertCount : -insertCount;\n\n const numericKeys: number[] = [];\n this.beforeChangedRecordsMap.forEach((_, key) => {\n const numKey = Number(key);\n if (Number.isInteger(numKey) && numKey.toString() === key && numKey >= insertIndex) {\n numericKeys.push(numKey);\n }\n });\n\n numericKeys.sort((a, b) => (type === 'add' ? b - a : a - b));\n\n for (let i = 0; i < numericKeys.length; i++) {\n const key = numericKeys[i];\n const record = this.beforeChangedRecordsMap.get(key.toString());\n this.beforeChangedRecordsMap.delete(key.toString());\n this.beforeChangedRecordsMap.set((key + delta).toString(), record);\n }\n }\n /**\n * 删除多条数据recordIndexs\n */\n deleteRecords(recordIndexs: number[]) {\n if (Array.isArray(this.records)) {\n const realDeletedRecordIndexs = [];\n const recordIndexsMaxToMin = recordIndexs.sort((a, b) => b - a);\n for (let index = 0; index < recordIndexsMaxToMin.length; index++) {\n const recordIndex = recordIndexsMaxToMin[index];\n if (recordIndex >= this._sourceLength || recordIndex < 0) {\n continue;\n }\n // this.beforeChangedRecordsMap.delete(recordIndex.toString());\n this.adjustBeforeChangedRecordsMap(recordIndex, 1, 'delete');\n realDeletedRecordIndexs.push(recordIndex);\n const deletedRecord = this.records[recordIndex];\n for (let i = 0; i < this.fieldAggregators.length; i++) {\n this.fieldAggregators[i].deleteRecord(deletedRecord);\n }\n this.records.splice(recordIndex, 1);\n this.currentIndexedData.pop();\n this._sourceLength -= 1;\n }\n if (this.userPagination) {\n // 如果用户配置了分页\n this.updatePagerData();\n } else {\n this.pagination.perPageCount = this._sourceLength;\n this.pagination.totalCount = this._sourceLength;\n this.updatePagerData();\n }\n if ((this.dataSourceObj as DataSourceParam)?.deleted) {\n (this.dataSourceObj as DataSourceParam).deleted(realDeletedRecordIndexs);\n }\n return realDeletedRecordIndexs;\n }\n return [];\n }\n /**\n * 删除多条数据recordIndexs\n */\n deleteRecordsForSorted(recordIndexs: number[]) {\n if (Array.isArray(this.records)) {\n const recordIndexsMaxToMin = recordIndexs.sort((a, b) => b - a);\n for (let index = 0; index < recordIndexsMaxToMin.length; index++) {\n const recordIndex = recordIndexsMaxToMin[index];\n if (recordIndex >= this._sourceLength || recordIndex < 0) {\n continue;\n }\n const rawIndex = this.currentIndexedData[recordIndex] as number;\n this.records.splice(rawIndex, 1);\n this._sourceLength -= 1;\n }\n this.sortedIndexMap.clear();\n if (!this.userPagination) {\n this.pagination.perPageCount = this._sourceLength;\n this.pagination.totalCount = this._sourceLength;\n }\n this.beforeChangedRecordsMap.clear();\n }\n }\n\n /**\n * 修改多条数据recordIndexs\n */\n updateRecords(records: any[], recordIndexs: (number | number[])[]) {\n const realDeletedRecordIndexs = [];\n for (let index = 0; index < recordIndexs.length; index++) {\n const recordIndex = recordIndexs[index];\n if (Array.isArray(recordIndex)) {\n this.beforeChangedRecordsMap.delete(recordIndex.toString());\n realDeletedRecordIndexs.push(recordIndex);\n // for (let i = 0; i < this.fieldAggregators.length; i++) {\n // this.fieldAggregators[i].updateRecord(this.records[recordIndex], records[index]);\n // }\n\n // this.records[recordIndex[0]][recordIndex[1]][recordIndex[2]] = records[index];\n recordIndex.slice(0, -1).reduce((acc, key) => {\n if (acc[key] === undefined) {\n acc[key] = {};\n }\n return acc[key].children;\n }, this.records)[recordIndex[recordIndex.length - 1]] = records[index];\n } else {\n if (recordIndex >= this._sourceLength || recordIndex < 0) {\n continue;\n }\n this.beforeChangedRecordsMap.delete(recordIndex.toString());\n realDeletedRecordIndexs.push(recordIndex);\n for (let i = 0; i < this.fieldAggregators.length; i++) {\n this.fieldAggregators[i].updateRecord(this.records[recordIndex], records[index]);\n }\n this.records[recordIndex] = records[index];\n }\n }\n if (this.userPagination) {\n // 如果用户配置了分页\n this.updatePagerData();\n }\n return realDeletedRecordIndexs;\n }\n\n /**\n * 删除多条数据recordIndexs\n */\n updateRecordsForSorted(records: any[], recordIndexs: number[]) {\n const realDeletedRecordIndexs: number[] = [];\n for (let index = 0; index < recordIndexs.length; index++) {\n const recordIndex = recordIndexs[index];\n if (recordIndex >= this._sourceLength || recordIndex < 0) {\n continue;\n }\n const rawIndex = this.currentIndexedData[recordIndex];\n if (typeof rawIndex !== 'number') {\n return;\n }\n this.beforeChangedRecordsMap.delete(rawIndex.toString());\n realDeletedRecordIndexs.push(recordIndex);\n this.records[rawIndex] = records[index];\n }\n this.sortedIndexMap.clear();\n }\n\n sort(states: Array<SortState>): void {\n // Convert states into an array and filter out unnecessary ones\n states = (Array.isArray(states) ? states : [states]).filter(state => {\n const column = this.columns.find(obj => obj.field === state.field);\n return column?.sort !== false && state.order !== 'normal';\n });\n\n // Save the sorting states\n this.lastSortStates = states;\n\n // Get an array of sorting objects for each state\n let filedMapArray: Array<ISortedMapItem> = states.map(\n state => this.sortedIndexMap.get(state?.field) || { asc: [], desc: [], normal: [] }\n );\n\n let orderedData: number[] | null = null;\n\n // If there is already sorted data in the caches, take it\n if (filedMapArray.length > 0) {\n orderedData = states.reduce((data, state, index) => {\n const currentData = (filedMapArray[index] as any)?.[state.order];\n return currentData && currentData.length > 0 ? currentData : data;\n }, null);\n\n if (orderedData && orderedData.length > 0) {\n this.currentIndexedData = orderedData;\n this.updatePagerData();\n this.fireListeners(EVENT_TYPE.CHANGE_ORDER, null);\n return;\n }\n }\n\n // If there is no cache, we start sorting\n const sortedIndexArray: number[] = Array.from({ length: this._sourceLength }, (_, i) => i);\n\n // Perform sorting on each state\n sortedIndexArray.sort((indexA, indexB) => {\n // 获取两个索引对应的记录\n const recordA = this.getOriginalRecord(indexA);\n const recordB = this.getOriginalRecord(indexB);\n\n // 检查记录是否为空(null、undefined 或空对象)\n const isEmptyA =\n recordA === null || recordA === undefined || (typeof recordA === 'object' && Object.keys(recordA).length === 0);\n const isEmptyB =\n recordB === null || recordB === undefined || (typeof recordB === 'object' && Object.keys(recordB).length === 0);\n\n return states.reduce((result: number, state: SortState) => {\n if (result !== 0) {\n return result;\n }\n\n // 如果有排序状态(非normal状态),则空数据排在后面\n if (state.order === 'asc' || state.order === 'desc') {\n // 如果一个是空记录而另一个不是,则空记录排在后面\n if (isEmptyA && !isEmptyB) {\n return 1; // A是空的,B不是,A排后面\n }\n if (!isEmptyA && isEmptyB) {\n return -1; // A不是空的,B是,B排后面\n }\n // 如果两者都是空记录,保持原有顺序\n if (isEmptyA && isEmptyB) {\n return indexA - indexB; // 保持原有顺序\n }\n } else {\n // normal状态,保持原始顺序\n if (isEmptyA || isEmptyB) {\n return indexA - indexB;\n }\n }\n\n const orderFn =\n state.orderFn ||\n (state.order !== 'desc'\n ? (v1: any, v2: any): -1 | 0 | 1 => (v1 === v2 ? 0 : v1 > v2 ? 1 : -1)\n : (v1: any, v2: any): -1 | 0 | 1 => (v1 === v2 ? 0 : v1 < v2 ? 1 : -1));\n\n return orderFn(\n this.getOriginalField(indexA, state.field),\n this.getOriginalField(indexB, state.field),\n state.order\n );\n }, 0);\n });\n\n this.currentIndexedData = sortedIndexArray;\n\n // Process the hierarchy, if any\n if (this.hierarchyExpandLevel && this.rowHierarchyType === 'tree') {\n let nodeLength = sortedIndexArray.length;\n for (let i = 0; i < nodeLength; i++) {\n const record = this.getOriginalRecord(sortedIndexArray[i]);\n const subNodeLength = this.pushChildrenNode(\n sortedIndexArray[i],\n record.hierarchyState,\n this.getOriginalRecord(sortedIndexArray[i])\n );\n nodeLength += subNodeLength;\n i += subNodeLength;\n }\n }\n\n // If there were no caches, initialize them\n if (!filedMapArray.length) {\n filedMapArray = states.map(\n (): ISortedMapItem => ({\n asc: [] as (number | number[])[],\n desc: [] as (number | number[])[],\n normal: [] as (number | number[])[]\n })\n );\n for (let index = 0; index < states.length; index++) {\n this.sortedIndexMap.set(states[index].field, filedMapArray[index]);\n }\n }\n\n // Save the sorted indexes for each state to the cache\n states.forEach((state, index) => {\n const mapItem = filedMapArray[index] as ISortedMapItem;\n (mapItem as any)[state.order] = sortedIndexArray.slice(); // Save a copy of the array\n });\n\n this.updatePagerData();\n this.fireListeners(EVENT_TYPE.CHANGE_ORDER, null);\n }\n\n setSortedIndexMap(field: FieldDef, filedMap: ISortedMapItem) {\n this.sortedIndexMap.set(field, filedMap);\n }\n\n private clearFilteredChildren(record: any) {\n record.filteredChildren = undefined;\n for (let i = 0; i < (record.children?.length ?? 0); i++) {\n this.clearFilteredChildren(record.children[i]);\n }\n }\n private filterRecord(record: any) {\n let isReserved = true;\n for (let i = 0; i < this.dataConfig.filterRules?.length; i++) {\n const filterRule = this.dataConfig?.filterRules[i];\n if (filterRule.filterKey) {\n const filterValue = record[filterRule.filterKey];\n if (filterRule.filteredValues.indexOf(filterValue) === -1) {\n isReserved = false;\n break;\n }\n } else if (!filterRule.filterFunc?.(record)) {\n isReserved = false;\n break;\n }\n }\n return isReserved;\n }\n\n updateFilterRulesForSorted(filterRules?: FilterRules): void {\n this.lastFilterRules = this.dataConfig.filterRules;\n this.dataConfig.filterRules = filterRules;\n this._source = this.processRecords(this.dataSourceObj?.records ?? this.dataSourceObj);\n this._sourceLength = this._source?.length || 0;\n this.sortedIndexMap.clear();\n this.currentIndexedData = Array.from({ length: this._sourceLength }, (_, i) => i);\n if (this.rowHierarchyType === 'tree') {\n this.initTreeHierarchyState();\n }\n if (!this.userPagination) {\n this.pagination.perPageCount = this._sourceLength;\n this.pagination.totalCount = this._sourceLength;\n }\n }\n\n updateFilterRules(filterRules?: FilterRules, onFilterRecordsEnd?: (records: any[]) => any[]): void {\n this.lastFilterRules = this.dataConfig.filterRules;\n this.dataConfig.filterRules = filterRules;\n this._source = this.processRecords(this.dataSourceObj?.records ?? this.dataSourceObj);\n // 如果配置了筛选回调, 则用户可自定义处理筛选后的数据\n if (onFilterRecordsEnd) {\n onFilterRecordsEnd(this._source as any[]);\n }\n this._sourceLength = this._source?.length || 0;\n // 初始化currentIndexedData 正常未排序。设置其状态\n this.currentIndexedData = Array.from({ length: this._sourceLength }, (_, i) => i);\n if (this.userPagination) {\n // 如果用户配置了分页\n this.updatePagerData();\n } else {\n this.pagination.perPageCount = this._sourceLength;\n this.pagination.totalCount = this._sourceLength;\n if (this.rowHierarchyType === 'tree') {\n this.initTreeHierarchyState();\n }\n this.updatePagerData();\n }\n }\n /**\n * 当节点折叠或者展开时 将排序缓存清空(非当前排序规则的缓存)\n */\n clearSortedIndexMap() {\n if (this.lastSortStates && this.lastSortStates.length > 0) {\n this.sortedIndexMap.forEach((sortMap, key) => {\n const isFieldInRules = this.lastSortStates.some(state => state.field === key);\n if (!isFieldInRules) {\n this.sortedIndexMap.delete(key);\n } else {\n this.lastSortStates.forEach(state => {\n if (state.order === 'asc') {\n sortMap.desc = [];\n sortMap.normal = [];\n } else if (state.order === 'desc') {\n sortMap.asc = [];\n sortMap.normal = [];\n } else {\n sortMap.asc = [];\n sortMap.desc = [];\n }\n });\n }\n });\n }\n }\n get sourceLength(): number {\n return this._sourceLength;\n }\n set sourceLength(sourceLen: number) {\n if (this._sourceLength === sourceLen) {\n return;\n }\n this._sourceLength = sourceLen;\n this.fireListeners(EVENT_TYPE.SOURCE_LENGTH_UPDATE, this._sourceLength);\n }\n get length(): number {\n return this.currentPagerIndexedData.length;\n }\n get dataSource(): DataSource {\n return this;\n }\n get currentPagerIndexedData(): (number | number[])[] {\n if (this._currentPagerIndexedData.length > 0) {\n return this._currentPagerIndexedData;\n }\n return []; //this.currentIndexedData || [];\n }\n release(): void {\n super.release?.();\n this.lastFilterRules = null;\n this.clearSortedMap();\n this.clearCurrentIndexedData();\n this.currentPagerIndexedData.length = 0;\n }\n clearSortedMap() {\n this.currentIndexedData && (this.currentIndexedData.length = 0);\n this.currentIndexedData = null;\n this.sortedIndexMap.forEach(item => {\n item.asc && (item.asc.length = 0);\n item.desc && (item.desc.length = 0);\n });\n this.sortedIndexMap.clear();\n }\n clearCurrentIndexedData(): void {\n this.currentIndexedData = null;\n this.currentPagerIndexedData.length = 0;\n }\n protected getOriginalRecord(dataIndex: number | number[]): MaybePromiseOrUndefined {\n // if (this.dataConfig?.filterRules) {\n // return (this.records as Array<any>)[dataIndex as number];\n // }\n let data;\n if (!this.dataSourceObj.records) {\n data = this._get(dataIndex);\n } else {\n if (Array.isArray(dataIndex)) {\n data = getValueFromDeepArray(this.records, dataIndex);\n } else {\n data = this.records[dataIndex];\n }\n }\n return getValue(data, (val: MaybePromiseOrUndefined) => {\n this.recordPromiseCallBack(dataIndex, val);\n });\n }\n protected getRawRecord(dataIndex: number | number[]): MaybePromiseOrUndefined {\n if (this.beforeChangedRecordsMap?.has(dataIndex.toString())) {\n return this.beforeChangedRecordsMap?.get(dataIndex.toString());\n }\n let data;\n if (!this.dataSourceObj.records) {\n data = this._get(dataIndex);\n } else {\n if (Array.isArray(dataIndex)) {\n data = getValueFromDeepArray(this.records, dataIndex);\n } else {\n data = this.records[dataIndex];\n }\n }\n return getValue(data, (val: MaybePromiseOrUndefined) => {\n this.recordPromiseCallBack(dataIndex, val);\n });\n }\n protected getOriginalField(\n index: number | number[],\n field: FieldDef | FieldFormat | number,\n col?: number,\n row?: number,\n table?: BaseTableAPI\n ): FieldData {\n if (field === null) {\n return undefined;\n }\n const record = this.getOriginalRecord(index);\n // return getField(record, field);\n return getField(record, field, col, row, table, (val: any) => {\n this.fieldPromiseCallBack(index, field, val);\n });\n }\n protected getRawFieldData(\n index: number,\n field: FieldDef | FieldFormat | number,\n col?: number,\n row?: number,\n table?: BaseTableAPI\n ): FieldData {\n if (field === null) {\n return undefined;\n }\n const record = this.getRawRecord(index);\n // return getField(record, field);\n return getField(record, field, col, row, table, (val: any) => {\n this.fieldPromiseCallBack(index, field, val);\n });\n }\n protected hasOriginalField(index: number | number[], field: FieldDef): boolean {\n if (field === null) {\n return false;\n }\n if (typeof field === 'function') {\n return true;\n }\n const record = this.getOriginalRecord(index);\n return Boolean(record && (field as any) in (record as any));\n }\n\n protected fieldPromiseCallBack(\n _index: number | number[],\n _field: FieldDef | FieldFormat | number,\n _value: MaybePromiseOrUndefined\n ): void {\n //\n }\n protected recordPromiseCallBack(_index: number | number[], _record: MaybePromiseOrUndefined): void {\n //\n }\n /** 静态变量 代表数据为空 */\n static EMPTY = new DataSource({\n get() {\n /* noop */\n },\n length: 0\n });\n /**\n * 判断原位置sourceIndex处的数据是否可以移动到targetIndex目标位置处\n * @param sourceIndex 被移动数据在body中的index\n * @param targetIndex 数据要放置在body中的index\n * @returns 根据参数判断是否可以交换位置\n */\n canChangeOrder(sourceIndex: number, targetIndex: number): boolean {\n if ((this, this.dataSourceObj?.canChangeOrder)) {\n return this.dataSourceObj.canChangeOrder(sourceIndex, targetIndex);\n }\n\n if (this.hasHierarchyStateExpand) {\n let sourceIndexs = this.currentPagerIndexedData[sourceIndex] as number[];\n let targetIndexs = this.currentPagerIndexedData[targetIndex] as number[];\n if (Array.isArray(sourceIndexs)) {\n sourceIndexs = [...sourceIndexs];\n } else {\n sourceIndexs = [sourceIndexs];\n }\n\n if (Array.isArray(targetIndexs)) {\n targetIndexs = [...targetIndexs];\n } else {\n targetIndexs = [targetIndexs];\n }\n // //实现可以跨父级拖拽节点位置,约束条件只需要禁止父级拖到自己的字节节点即可\n // if (true) {\n // if (sourceIndexs.every((item, index) => targetIndexs[index] === item)) {\n // return false;\n // }\n // return true;\n // }\n if (targetIndex > sourceIndex) {\n if (targetIndexs.length > sourceIndexs.length) {\n let targetNextIndexs = this.currentPagerIndexedData[targetIndex + 1] as number[];\n if (Array.isArray(targetNextIndexs)) {\n targetNextIndexs = [...targetNextIndexs];\n } else {\n targetNextIndexs = [targetNextIndexs];\n }\n\n if (targetNextIndexs.length < targetIndexs.length) {\n targetIndexs.splice(targetIndexs.length - 1, 1);\n }\n }\n }\n if (sourceIndexs.length === targetIndexs.length) {\n for (let i = 0; i <= sourceIndexs.length - 2; i++) {\n if (sourceIndexs[i] !== targetIndexs[i]) {\n return false;\n }\n }\n return true;\n }\n\n return false;\n }\n return true;\n }\n // 拖拽调整数据位置 目前对排序过的数据不过处理,因为自动排序和手动排序融合问题目前没有找到好的解决方式\n changeOrder(sourceIndex: number, targetIndex: number) {\n if ((this, this.dataSourceObj?.changeOrder)) {\n this.dataSourceObj.changeOrder(sourceIndex, targetIndex);\n return;\n }\n if (this.lastSortStates?.some(state => state.order === 'asc' || state.order === 'desc')) {\n // const sourceIds = this._currentPagerIndexedData.splice(sourceIndex, 1);\n // sourceIds.unshift(targetIndex, 0);\n // Array.prototype.splice.apply(this._currentPagerIndexedData, sourceIds);\n return;\n } else if (this.canChangeOrder(sourceIndex, targetIndex)) {\n // if (this.treeDataHierarchyState?.size > 0) {\n if (this.hasHierarchyStateExpand) {\n let sourceIndexs = this.currentPagerIndexedData[sourceIndex];\n let targetIndexs = this.currentPagerIndexedData[targetIndex];\n if (Array.isArray(sourceIndexs)) {\n sourceIndexs = [...sourceIndexs];\n } else {\n sourceIndexs = [sourceIndexs];\n }\n\n if (Array.isArray(targetIndexs)) {\n targetIndexs = [...targetIndexs];\n } else {\n targetIndexs = [targetIndexs];\n }\n\n let sourceI;\n let targetI;\n if (sourceIndexs.length > 1 || targetIndexs.length > 1) {\n if (targetIndex > sourceIndex) {\n if (targetIndexs.length > sourceIndexs.length) {\n let targetNextIndexs = this.currentPagerIndexedData[targetIndex + 1] as number[];\n if (Array.isArray(targetNextIndexs)) {\n targetNextIndexs = [...targetNextIndexs];\n } else {\n targetNextIndexs = [targetNextIndexs];\n }\n\n if (targetNextIndexs.length < targetIndexs.length) {\n targetIndexs.splice(targetIndexs.length - 1, 1);\n }\n }\n }\n sourceI = (<number[]>sourceIndexs).splice(sourceIndexs.length - 1, 1)[0];\n targetI = (<number[]>targetIndexs).splice(targetIndexs.length - 1, 1)[0];\n if (sourceIndexs.length >= 1) {\n const parent = this.getOriginalRecord(sourceIndexs);\n if (parent) {\n const sourceIds = parent.filteredChildren\n ? parent.filteredChildren.splice(sourceI, 1)\n : parent.children.splice(sourceI, 1);\n sourceIds.unshift(targetI, 0);\n Array.prototype.splice.apply(parent.filteredChildren ?? parent.children, sourceIds);\n }\n } else {\n const sourceIds = this.records.splice(sourceI, 1);\n // 将records插入到目标地址targetIndex处\n // 把records变成一个适合splice的数组(包含splice前2个参数的数组) 以通过splice来插入到source数组\n sourceIds.unshift(targetI, 0);\n Array.prototype.splice.apply(this.records, sourceIds);\n }\n } else {\n this.exchangeRecordData(sourceIndex, targetIndex);\n }\n this.restoreTreeHierarchyState();\n this.updatePagerData();\n } else {\n this.exchangeRecordData(sourceIndex, targetIndex);\n }\n }\n }\n\n /**\n * @description: 交换源数据\n * @param {number} sourceIndex 源索引\n * @param {number} targetIndex 目标索引\n */\n exchangeRecordData(sourceIndex: number, targetIndex: number) {\n const sourceI = this.getRecordIndexPaths(sourceIndex) as number;\n const targetI = this.getRecordIndexPaths(targetIndex) as number;\n // 从source的二维数组中取出需要操作的records\n const records = this.records.splice(sourceI, 1);\n // 将records插入到目标地址targetIndex处\n // 把records变成一个适合splice的数组(包含splice前2个参数的数组) 以通过splice来插入到source数组\n records.unshift(targetI, 0);\n Array.prototype.splice.apply(this.records, records);\n }\n\n restoreTreeHierarchyState() {\n if (this.hierarchyExpandLevel) {\n for (let i = 0; i < this._sourceLength; i++) {\n //expandLevel为有效值即需要按tree分析展示数据\n const nodeData = this.getOriginalRecord(i);\n if (!nodeData) {\n continue;\n }\n const children = (nodeData as any).filteredChildren ?? (nodeData as any).children;\n children && !nodeData.hierarchyState && (nodeData.hierarchyState = HierarchyState.collapse);\n }\n\n this.currentIndexedData = Array.from({ length: this._sourceLength }, (_, i) => i);\n let nodeLength = this._sourceLength;\n for (let i = 0; i < nodeLength; i++) {\n const indexKey = this.currentIndexedData[i];\n const nodeData = this.getOriginalRecord(indexKey);\n if (!nodeData) {\n continue;\n }\n const children = (nodeData as any).filteredChildren ?? (nodeData as any).children;\n if (children?.length > 0 && nodeData.hierarchyState === HierarchyState.expand) {\n this.hasHierarchyStateExpand = true;\n const childrenLength = this.restoreChildrenNodeHierarchy(indexKey, nodeData);\n i += childrenLength;\n nodeLength += childrenLength;\n } else if ((nodeData as any).children === true) {\n !nodeData.hierarchyState && (nodeData.hierarchyState = HierarchyState.collapse);\n }\n }\n }\n }\n restoreChildrenNodeHierarchy(\n indexKey: number | number[],\n\n nodeData: any\n ): number {\n let childTotalLength = 0;\n const children = (nodeData as any).filteredChildren ?? (nodeData as any).children;\n const nodeLength = children?.length ?? 0;\n for (let j = 0; j < nodeLength; j++) {\n if (nodeData.hierarchyState === HierarchyState.expand) {\n childTotalLength += 1;\n }\n const childNodeData = children[j];\n const childIndexKey = Array.isArray(indexKey) ? indexKey.concat(j) : [indexKey, j];\n if (nodeData.hierarchyState === HierarchyState.expand) {\n this.currentIndexedData.splice(\n this.currentIndexedData.indexOf(indexKey) + childTotalLength,\n // childTotalLength,\n 0,\n childIndexKey\n );\n }\n childTotalLength += this.restoreChildrenNodeHierarchy(\n childIndexKey,\n\n childNodeData\n );\n }\n return childTotalLength;\n }\n\n private _setNodeStateRecursive(node: any, targetState: HierarchyState): void {\n if (!node) {\n return;\n }\n const children = (node as any).filteredChildren ?? (node as any).children;\n // 仅为具有子节点(即可以展开/折叠)的节点设置状态\n if (children && (Array.isArray(children) ? children.length > 0 : children === true)) {\n (node as any).hierarchyState = targetState;\n }\n\n // 如果子节点作为数组存在,则递归应用于子节点\n if (children && Array.isArray(children)) {\n for (const child of children) {\n this._setNodeStateRecursive(child, targetState);\n }\n }\n }\n\n expandAllNodes(): void {\n if (Array.isArray(this._source)) {\n for (const rootNode of this._source) {\n this._setNodeStateRecursive(rootNode, HierarchyState.expand);\n }\n this.hasHierarchyStateExpand = true;\n this.clearSortedIndexMap();\n this.restoreTreeHierarchyState();\n\n if (this.lastSortStates && this.lastSortStates.length > 0) {\n this.sort(this.lastSortStates); // sort 方法内部会调用 updatePagerData\n } else {\n this.updatePagerData();\n }\n } else {\n console.warn('DataSource._source is not an array, cannot expand all nodes.');\n }\n }\n\n collapseAllNodes(): void {\n if (Array.isArray(this._source)) {\n for (const rootNode of this._source) {\n this._setNodeStateRecursive(rootNode, HierarchyState.collapse);\n }\n // hasHierarchyStateExpand 将由 restoreTreeHierarchyState 正确更新\n this.clearSortedIndexMap();\n this.restoreTreeHierarchyState();\n\n if (this.lastSortStates && this.lastSortStates.length > 0) {\n this.sort(this.lastSortStates); // sort 方法内部会调用 updatePagerData\n } else {\n this.updatePagerData();\n }\n } else {\n console.warn('DataSource._source is not an array, cannot collapse all nodes.');\n }\n }\n}\n\n/**\n * 从数组array中获取index的值\n * 如:给index=[0,0] 则返回 array[0].children[0];如果给index=[2] 则返回array[2]; 如果给index=[3,0,4] 则返回array[3].children[0].children[4]\n * @param array\n * @param index\n * @returns\n */\nexport function getValueFromDeepArray(array: any, index: number[]) {\n let result = array;\n for (let i = 0; i < index.length; i++) {\n const currentIdx = index[i];\n if (result[currentIdx]) {\n result = result[currentIdx];\n } else {\n return undefined;\n }\n const children = result.filteredChildren ?? result?.children;\n if (children && i + 1 < index.length) {\n result = children;\n }\n }\n return result;\n}\n\nexport function sortRecordIndexs(recordIndexs: (number | number[])[], sort: -1 | 1) {\n const result = recordIndexs.sort((a: number | number[], b: number | number[]) => {\n if (isNumber(a)) {\n a = [a];\n }\n if (isNumber(b)) {\n b = [b];\n }\n\n const length = Math.max(a.length, b.length);\n for (let i = 0; i < length; i++) {\n const aa = a[i] ?? -1;\n const bb = b[i] ?? -1;\n if (aa !== bb) {\n return sort === 1 ? aa - bb : bb - aa;\n }\n }\n return 0;\n });\n return result;\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/data/DataSource.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,IAAI,MAAM,eAAe,CAAC;AAgBtC,OAAO,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAC9D,OAAO,EAAE,cAAc,EAAE,UAAU,EAAE,GAAG,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAC;AACtF,OAAO,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AACnD,OAAO,EAAE,yBAAyB,EAAE,cAAc,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAEvF,OAAO,EAAE,UAAU,EAAE,SAAS,EAAW,QAAQ,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAE/F,OAAO,EACL,gBAAgB,EAEhB,aAAa,EACb,eAAe,EACf,aAAa,EACb,aAAa,EACb,aAAa,EACb,cAAc,EACd,gBAAgB,EACjB,MAAM,iCAAiC,CAAC;AAQzC,SAAS,eAAe,CAAC,KAAsC;IAC7D,IAAI,GAAG,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE;QACvB,MAAM,CAAC,GAAG,KAAsB,CAAC;QACjC,IAAI,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE;YACpC,OAAO,IAAI,CAAC;SACb;KACF;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AACD,MAAM,UAAU,GAAG;IACjB,oBAAoB,EAAE,sBAAsB;IAC5C,YAAY,EAAE,cAAc;CACpB,CAAC;AASX,MAAM,UAAU,QAAQ,CAAC,KAAoC,EAAE,eAA4B;IACzF,MAAM,mBAAmB,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC;IAC9C,IAAI,SAAS,CAAC,mBAAmB,CAAC,EAAE;QAClC,MAAM,YAAY,GAAG,mBAAmB,CAAC,IAAI,CAAC,CAAC,CAAM,EAAE,EAAE;YACvD,eAAe,CAAC,CAAC,CAAC,CAAC;YACnB,OAAO,CAAC,CAAC;QACX,CAAC,CAAC,CAAC;QAEH,eAAe,CAAC,YAAY,CAAC,CAAC;QAC9B,OAAO,YAAY,CAAC;KACrB;IACD,OAAO,mBAAmB,CAAC;AAC7B,CAAC;AAQD,MAAM,UAAU,QAAQ,CACtB,MAA+B,EAC/B,KAAsC,EACtC,GAAW,EACX,GAAW,EACX,KAAmB,EACnB,eAA4B;IAE5B,IAAI,MAAM,KAAK,IAAI,IAAI,MAAM,KAAK,SAAS,EAAE;QAC3C,OAAO,SAAS,CAAC;KAClB;IACD,IAAI,SAAS,CAAC,MAAM,CAAC,EAAE;QACrB,OAAO,MAAM,CAAC,IAAI,CAAC,CAAC,CAAM,EAAE,EAAE,CAAC,QAAQ,CAAC,CAAC,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,eAAe,CAAC,CAAC,CAAC;KACtF;IACD,MAAM,QAAQ,GAAQ,eAAe,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC;IAEjE,IAAI,CAAC,QAAQ,KAAK,SAAS,IAAI,QAAQ,KAAK,EAAE,CAAC,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE;QACxE,MAAM,QAAQ,GAAG,GAAG,GAAG,KAAK,CAAC,wBAAwB,CAAC;QACtD,OAAO,MAAM,CAAC,QAAQ,CAAC,CAAC;KACzB;IACD,IAAI,QAAQ,CAAC,MAAM,CAAC,IAAI,QAAQ,IAAK,MAAc,EAAE;QACnD,MAAM,WAAW,GAAI,MAAc,CAAC,QAAQ,CAAC,CAAC;QAE9C,OAAO,QAAQ,CAAC,WAAW,EAAE,eAAe,CAAC,CAAC;KAC/C;IACD,IAAI,OAAO,QAAQ,KAAK,UAAU,EAAE;QAClC,MAAM,WAAW,GAAG,QAAQ,CAAC,MAAM,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,CAAC,CAAC;QACtD,OAAO,QAAQ,CAAC,WAAW,EAAE,eAAe,CAAC,CAAC;KAC/C;IACD,IAAI,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE;QAC3B,MAAM,WAAW,GAAG,cAAc,CAAC,MAAM,EAAE,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC;QAC1D,OAAO,QAAQ,CAAC,WAAW,EAAE,eAAe,CAAC,CAAC;KAC/C;IACD,MAAM,UAAU,GAAG,GAAG,QAAQ,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAC5C,IAAI,UAAU,CAAC,MAAM,IAAI,CAAC,EAAE;QAC1B,MAAM,WAAW,GAAI,MAAc,CAAC,QAAQ,CAAC,CAAC;QAC9C,OAAO,QAAQ,CAAC,WAAW,EAAE,eAAe,CAAC,CAAC;KAC/C;IACD,MAAM,WAAW,GAAG,cAAc,CAChC,MAAM,EACN,CAAC,GAAG,EAAE,IAAI,EAAE,EAAE,CAAC,QAAQ,CAAC,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,OAAc,CAAC,EACnE,GAAG,UAAU,CACd,CAAC;IACF,OAAO,QAAQ,CAAC,WAAW,EAAE,eAAe,CAAC,CAAC;AAChD,CAAC;AAED,SAAS,SAAS,CAAC,cAA4C,EAAE,KAAa;IAC5E,IAAI,CAAC,cAAc,EAAE;QACnB,OAAO,KAAK,CAAC;KACd;IACD,MAAM,QAAQ,GAAG,cAAc,CAAC,KAAK,CAAC,CAAC;IACvC,OAAO,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC;AAC9C,CAAC;AAkBD,MAAM,OAAO,UAAW,SAAQ,WAAW;IA6BzC,MAAM,KAAK,UAAU;QACnB,OAAO,UAAU,CAAC;IACpB,CAAC;IAyBD,YACE,aAA+B,EAC/B,UAAiC,EACjC,UAAwB,EACxB,OAAuB,EACvB,gBAAkC,EAClC,oBAA6B;;QAE7B,KAAK,EAAE,CAAC;QA/DV,kBAAa,GAAuB,QAAQ,CAAC;QAqB7C,uBAAkB,GAAiC,EAAE,CAAC;QAMtD,yBAAoB,GAAW,CAAC,CAAC;QAIjC,4BAAuB,GAAY,KAAK,CAAC;QAGzC,4BAAuB,GAAqB,IAAI,GAAG,EAAE,CAAC;QAMtD,wBAAmB,GASf,EAAE,CAAC;QACP,qBAAgB,GAAkC,MAAM,CAAC;QAEzD,qBAAgB,GAAiB,EAAE,CAAC;QAYlC,IAAI,CAAC,aAAa,GAAG,CAAA,UAAU,aAAV,UAAU,uBAAV,UAAU,CAAE,aAAa,KAAI,QAAQ,CAAC;QAC3D,IAAI,CAAC,mBAAmB,EAAE,CAAC;QAC3B,IAAI,CAAC,aAAa,GAAG,aAAa,CAAC;QACnC,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC;QAC7B,IAAI,CAAC,IAAI,GAAG,aAAa,aAAb,aAAa,uBAAb,aAAa,CAAE,GAAG,CAAC;QAC/B,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;QACvB,IAAI,CAAC,OAAO,GAAG,CAAA,aAAa,aAAb,aAAa,uBAAb,aAAa,CAAE,OAAO,EAAC,CAAC,CAAC,IAAI,CAAC,cAAc,CAAC,aAAa,aAAb,aAAa,uBAAb,aAAa,CAAE,OAAO,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC;QACpG,IAAI,CAAC,aAAa,GAAG,CAAA,MAAA,IAAI,CAAC,OAAO,0CAAE,MAAM,KAAI,CAAC,CAAC;QAC/C,IAAI,CAAC,cAAc,GAAG,IAAI,GAAG,EAA0B,CAAC;QAExD,IAAI,CAAC,wBAAwB,GAAG,EAAE,CAAC;QACnC,IAAI,CAAC,cAAc,GAAG,UAAU,CAAC;QACjC,IAAI,CAAC,UAAU,GAAG,UAAU,IAAI;YAC9B,UAAU,EAAE,IAAI,CAAC,aAAa;YAC9B,YAAY,EAAE,IAAI,CAAC,aAAa;YAChC,WAAW,EAAE,CAAC;SACf,CAAC;QACF,IAAI,oBAAoB,IAAI,CAAC,EAAE;YAC7B,IAAI,CAAC,oBAAoB,GAAG,oBAAoB,CAAC;SAClD;QACD,IAAI,CAAC,kBAAkB,GAAG,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,aAAa,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC;QAElF,IAAI,gBAAgB,KAAK,MAAM,EAAE;YAC/B,IAAI,CAAC,sBAAsB,EAAE,CAAC;SAC/B;QACD,IAAI,CAAC,gBAAgB,GAAG,gBAAgB,CAAC;QACzC,IAAI,CAAC,eAAe,EAAE,CAAC;IACzB,CAAC;IACD,sBAAsB;;QAEpB,IAAI,CAAC,aAAa,GAAG,CAAA,MAAA,IAAI,CAAC,OAAO,0CAAE,MAAM,KAAI,CAAC,CAAC;QAC/C,IAAI,CAAC,kBAAkB,GAAG,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,aAAa,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC;QAElF,IAAI,UAAU,GAAG,IAAI,CAAC,aAAa,CAAC;QACpC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,UAAU,EAAE,CAAC,EAAE,EAAE;YACnC,MAAM,QAAQ,GAAG,IAAI,CAAC,kBAAkB,CAAC,CAAC,CAAC,CAAC;YAC5C,MAAM,QAAQ,GAAG,IAAI,CAAC,iBAAiB,CAAC,QAAQ,CAAC,CAAC;YAClD,IAAI,CAAC,QAAQ,EAAE;gBACb,SAAS;aACV;YACD,MAAM,QAAQ,GAAG,MAAC,QAAgB,CAAC,gBAAgB,mCAAK,QAAgB,CAAC,QAAQ,CAAC;YAClF,IAAI,CAAA,QAAQ,aAAR,QAAQ,uBAAR,QAAQ,CAAE,MAAM,IAAG,CAAC,EAAE;gBACxB,IAAI,IAAI,CAAC,oBAAoB,GAAG,CAAC,EAAE;oBACjC,CAAC,QAAQ,CAAC,cAAc,IAAI,CAAC,QAAQ,CAAC,cAAc,GAAG,cAAc,CAAC,MAAM,CAAC,CAAC;iBAC/E;qBAAM;oBACL,CAAC,QAAQ,CAAC,cAAc,IAAI,CAAC,QAAQ,CAAC,cAAc,GAAG,cAAc,CAAC,QAAQ,CAAC,CAAC;iBACjF;gBACD,IAAI,CAAC,uBAAuB,GAAG,IAAI,CAAC;gBACpC,IAAI,QAAQ,CAAC,cAAc,KAAK,cAAc,CAAC,QAAQ,EAAE;oBACvD,SAAS;iBACV;gBACD,MAAM,cAAc,GAAG,IAAI,CAAC,yBAAyB,CAAC,QAAQ,EAAE,IAAI,CAAC,oBAAoB,EAAE,CAAC,EAAE,QAAQ,CAAC,CAAC;gBACxG,CAAC,IAAI,cAAc,CAAC;gBACpB,UAAU,IAAI,cAAc,CAAC;aAC9B;iBAAM,IAAK,QAAgB,CAAC,QAAQ,KAAK,IAAI,EAAE;gBAC9C,CAAC,QAAQ,CAAC,cAAc,IAAI,CAAC,QAAQ,CAAC,cAAc,GAAG,cAAc,CAAC,QAAQ,CAAC,CAAC;aACjF;SACF;IAGH,CAAC;IAED,gBAAgB,CACd,UAAwB,EACxB,OAAuB,EACvB,gBAAgD,EAChD,oBAA6B;;QAE7B,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;QACvB,IAAI,CAAC,aAAa,GAAG,CAAA,MAAA,IAAI,CAAC,OAAO,0CAAE,MAAM,KAAI,CAAC,CAAC;QAC/C,IAAI,CAAC,cAAc,GAAG,IAAI,GAAG,EAA0B,CAAC;QAExD,IAAI,CAAC,wBAAwB,GAAG,EAAE,CAAC;QACnC,IAAI,CAAC,cAAc,GAAG,UAAU,CAAC;QACjC,IAAI,CAAC,UAAU,GAAG,UAAU,IAAI;YAC9B,UAAU,EAAE,IAAI,CAAC,aAAa;YAC9B,YAAY,EAAE,IAAI,CAAC,aAAa;YAChC,WAAW,EAAE,CAAC;SACf,CAAC;QACF,IAAI,oBAAoB,IAAI,CAAC,EAAE;YAC7B,IAAI,CAAC,oBAAoB,GAAG,oBAAoB,CAAC;SAClD;QACD,IAAI,CAAC,kBAAkB,GAAG,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,aAAa,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC;QAElF,IAAI,gBAAgB,KAAK,MAAM,EAAE;YAC/B,IAAI,CAAC,sBAAsB,EAAE,CAAC;SAC/B;QACD,IAAI,CAAC,gBAAgB,GAAG,gBAAgB,CAAC;QACzC,IAAI,CAAC,eAAe,EAAE,CAAC;IACzB,CAAC;IAGD,kBAAkB,CAAC,IAAY,EAAE,UAAe;QAC9C,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,GAAG,UAAU,CAAC;IAC9C,CAAC;IAED,mBAAmB;QACjB,IAAI,CAAC,kBAAkB,CAAC,eAAe,CAAC,MAAM,EAAE,gBAAgB,CAAC,CAAC;QAClE,IAAI,CAAC,kBAAkB,CAAC,eAAe,CAAC,GAAG,EAAE,aAAa,CAAC,CAAC;QAC5D,IAAI,CAAC,kBAAkB,CAAC,eAAe,CAAC,KAAK,EAAE,eAAe,CAAC,CAAC;QAChE,IAAI,CAAC,kBAAkB,CAAC,eAAe,CAAC,GAAG,EAAE,aAAa,CAAC,CAAC;QAC5D,IAAI,CAAC,kBAAkB,CAAC,eAAe,CAAC,GAAG,EAAE,aAAa,CAAC,CAAC;QAC5D,IAAI,CAAC,kBAAkB,CAAC,eAAe,CAAC,GAAG,EAAE,aAAa,CAAC,CAAC;QAC5D,IAAI,CAAC,kBAAkB,CAAC,eAAe,CAAC,IAAI,EAAE,cAAc,CAAC,CAAC;QAC9D,IAAI,CAAC,kBAAkB,CAAC,eAAe,CAAC,MAAM,EAAE,gBAAgB,CAAC,CAAC;IACpE,CAAC;IACD,aAAa,CAAC,OAAsB;QAClC,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;IACzB,CAAC;IACD,0BAA0B;QACxB,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC;QAEhC,IAAI,CAAC,gBAAgB,GAAG,EAAE,CAAC;QAE3B,MAAM,aAAa,GAAoC,MAAM,CAAC,EAAE;YAE9D,OAAQ,MAAc,CAAC,iBAAiB,CAAC;YAEzC,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC;YAC3B,MAAM,WAAW,GAAG,MAAM,CAAC,WAAW,CAAC;YACvC,IAAI,CAAC,WAAW,EAAE;gBAChB,OAAO;aACR;YAED,IAAI,KAAK,CAAC,OAAO,CAAC,WAAW,CAAC,EAAE;gBAC9B,KAAK,MAAM,IAAI,IAAI,WAAW,EAAE;oBAC9B,MAAM,UAAU,GAAG,IAAI,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;wBACpE,KAAK,EAAE,KAAe;wBACtB,SAAS,EAAE,IAAI,CAAC,SAAS;wBACzB,QAAQ,EAAE,IAAI;wBACd,cAAc,EAAG,IAA0B,CAAC,cAAc;qBAC3D,CAAC,CAAC;oBAEH,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;oBAEvC,IAAI,CAAE,MAAc,CAAC,iBAAiB,EAAE;wBACrC,MAAc,CAAC,iBAAiB,GAAG,EAAE,CAAC;qBACxC;oBACA,MAAc,CAAC,iBAAiB,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;iBACpD;aACF;iBAAM;gBACL,MAAM,UAAU,GAAG,IAAI,IAAI,CAAC,mBAAmB,CAAC,WAAW,CAAC,eAAe,CAAC,CAAC;oBAC3E,KAAK,EAAE,KAAe;oBACtB,SAAS,EAAE,WAAW,CAAC,SAAS;oBAChC,QAAQ,EAAE,IAAI;oBACd,cAAc,EAAG,WAAiC,CAAC,cAAc;iBAClE,CAAC,CAAC;gBAEH,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;gBACtC,MAAc,CAAC,iBAAiB,GAAG,UAAU,CAAC;aAChD;QACH,CAAC,CAAC;QAEF,MAAM,eAAe,GAAqC,OAAO,CAAC,EAAE;YAClE,IAAI,CAAC,OAAO,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE;gBACpC,OAAO;aACR;YAED,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE;gBAC5B,aAAa,CAAC,MAAM,CAAC,CAAC;gBACtB,IAAI,MAAM,CAAC,OAAO,EAAE;oBAClB,eAAe,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;iBACjC;aACF;QACH,CAAC,CAAC;QAEF,eAAe,CAAC,UAAU,CAAC,CAAC;IAC9B,CAAC;IACD,cAAc,CAAC,OAAc;;QAC3B,IAAI,CAAC,0BAA0B,EAAE,CAAC;QAClC,MAAM,eAAe,GAAG,EAAE,CAAC;QAC3B,MAAM,gBAAgB,GAAG,IAAI,CAAC,gBAAgB,CAAC,MAAM,IAAI,CAAC,CAAC;QAC3D,MAAM,eAAe,GAAG,CAAA,MAAA,MAAA,IAAI,CAAC,UAAU,0CAAE,WAAW,0CAAE,MAAM,KAAI,CAAC,IAAI,CAAA,MAAA,IAAI,CAAC,eAAe,0CAAE,MAAM,KAAI,CAAC,CAAC;QACvG,IAAI,eAAe,IAAI,gBAAgB,EAAE;YACvC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,GAAG,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,EAAE,EAAE;gBAClD,MAAM,MAAM,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;gBAE1B,IAAI,MAAM,KAAK,SAAS,IAAI,MAAM,KAAK,IAAI,EAAE;oBAC3C,SAAS;iBACV;gBACD,IAAI,CAAA,MAAA,MAAA,IAAI,CAAC,UAAU,0CAAE,WAAW,0CAAE,MAAM,KAAI,CAAC,EAAE;oBAC7C,IAAI,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,EAAE;wBAC7B,eAAe,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;wBAC7B,IAAI,IAAI,CAAC,gBAAgB,KAAK,MAAM,IAAI,MAAM,CAAC,QAAQ,EAAE;4BACvD,MAAM,CAAC,gBAAgB,GAAG,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;yBAClE;wBACD,gBAAgB,IAAI,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC;qBAChD;iBACF;qBAAM,IAAI,CAAA,MAAA,IAAI,CAAC,eAAe,0CAAE,MAAM,KAAI,CAAC,EAAE;oBAE5C,IAAI,CAAC,qBAAqB,CAAC,MAAM,CAAC,CAAC;oBACnC,gBAAgB,IAAI,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC;iBAChD;qBAAM,IAAI,gBAAgB,EAAE;oBAC3B,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC;iBAC5B;aACF;YACD,IAAI,CAAA,MAAA,MAAA,IAAI,CAAC,UAAU,0CAAE,WAAW,0CAAE,MAAM,KAAI,CAAC,EAAE;gBAC7C,OAAO,eAAe,CAAC;aACxB;SACF;QACD,OAAO,OAAO,CAAC;IACjB,CAAC;IAED,gBAAgB,CAAC,OAAc;QAC7B,MAAM,eAAe,GAAG,EAAE,CAAC;QAC3B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,GAAG,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,EAAE,EAAE;YAClD,MAAM,MAAM,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;YAC1B,IAAI,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,EAAE;gBAC7B,eAAe,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;gBAC7B,IAAI,MAAM,CAAC,QAAQ,EAAE;oBACnB,MAAM,CAAC,gBAAgB,GAAG,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;iBAClE;aACF;SACF;QACD,OAAO,eAAe,CAAC;IACzB,CAAC;IAED,aAAa,CAAC,MAAW;QACvB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,gBAAgB,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;YACrD,MAAM,UAAU,GAAG,IAAI,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC;YAC5C,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;SACzB;IACH,CAAC;IASD,yBAAyB,CACvB,QAA2B,EAE3B,oBAA4B,EAC5B,YAAoB,EACpB,QAAa;;QAKb,IAAI,gBAAgB,GAAG,CAAC,CAAC;QACzB,MAAM,UAAU,GAAG,QAAQ,CAAC,gBAAgB,CAAC,CAAC,CAAC,QAAQ,CAAC,gBAAgB,CAAC,MAAM,CAAC,CAAC,CAAC,MAAA,MAAA,QAAQ,CAAC,QAAQ,0CAAE,MAAM,mCAAI,CAAC,CAAC;QACjH,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,UAAU,EAAE,CAAC,EAAE,EAAE;YACnC,IAAI,YAAY,IAAI,oBAAoB,IAAI,QAAQ,CAAC,cAAc,KAAK,cAAc,CAAC,MAAM,EAAE;gBAC7F,gBAAgB,IAAI,CAAC,CAAC;aACvB;YACD,MAAM,aAAa,GAAG,QAAQ,CAAC,gBAAgB,CAAC,CAAC,CAAC,QAAQ,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;YACtG,MAAM,aAAa,GAAG,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC;YACnF,IAAI,YAAY,IAAI,oBAAoB,IAAI,QAAQ,CAAC,cAAc,KAAK,cAAc,CAAC,MAAM,EAAE;gBAC7F,IAAI,CAAC,kBAAkB,CAAC,MAAM,CAC5B,IAAI,CAAC,kBAAkB,CAAC,OAAO,CAAC,QAAQ,CAAC,GAAG,gBAAgB,EAE5D,CAAC,EACD,aAAa,CACd,CAAC;aACH;YACD,IACE,aAAa,CAAC,gBAAgB,CAAC,CAAC,CAAC,aAAa,CAAC,gBAAgB,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,CAAA,MAAA,aAAa,CAAC,QAAQ,0CAAE,MAAM,IAAG,CAAC,EAC/G;gBACA,IAAI,YAAY,GAAG,oBAAoB,IAAI,aAAa,CAAC,cAAc,KAAK,cAAc,CAAC,MAAM,EAAE;oBAKjG,CAAC,aAAa,CAAC,cAAc,IAAI,CAAC,aAAa,CAAC,cAAc,GAAG,cAAc,CAAC,MAAM,CAAC,CAAC;oBACxF,IAAI,CAAC,uBAAuB,GAAG,IAAI,CAAC;iBACrC;qBAAM;oBAKL,CAAC,aAAa,CAAC,cAAc,IAAI,CAAC,aAAa,CAAC,cAAc,GAAG,cAAc,CAAC,QAAQ,CAAC,CAAC;iBAC3F;aACF;YACD,IAAI,aAAa,CAAC,cAAc,KAAK,cAAc,CAAC,MAAM,EAAE;gBAC1D,gBAAgB,IAAI,IAAI,CAAC,yBAAyB,CAChD,aAAa,EACb,oBAAoB,EACpB,YAAY,GAAG,CAAC,EAChB,aAAa,CACd,CAAC;aACH;YACD,IAAK,aAAqB,CAAC,QAAQ,KAAK,IAAI,EAAE;gBAC5C,CAAC,aAAa,CAAC,cAAc,IAAI,CAAC,aAAa,CAAC,cAAc,GAAG,cAAc,CAAC,QAAQ,CAAC,CAAC;aAC3F;SACF;QACD,OAAO,gBAAgB,CAAC;IAC1B,CAAC;IACD,gBAAgB,CAAC,UAAwB;QACvC,IAAI,CAAC,UAAU,GAAG,UAAU,IAAI;YAC9B,UAAU,EAAE,IAAI,CAAC,aAAa;YAC9B,YAAY,EAAE,IAAI,CAAC,aAAa;YAChC,WAAW,EAAE,CAAC;SACf,CAAC;QACF,IAAI,CAAC,eAAe,EAAE,CAAC;IACzB,CAAC;IACS,eAAe;QACvB,MAAM,EAAE,kBAAkB,EAAE,GAAG,IAAI,CAAC;QACpC,MAAM,EAAE,YAAY,EAAE,WAAW,EAAE,GAAG,IAAI,CAAC,UAAU,CAAC;QACtD,MAAM,UAAU,GAAG,YAAY,GAAG,CAAC,WAAW,IAAI,CAAC,CAAC,CAAC;QACrD,MAAM,QAAQ,GAAG,UAAU,GAAG,YAAY,CAAC;QAC3C,IAAI,CAAC,wBAAwB,CAAC,MAAM,GAAG,CAAC,CAAC;QACzC,IAAI,kBAAkB,IAAI,kBAAkB,CAAC,MAAM,GAAG,CAAC,EAAE;YAEvD,IAAI,eAAe,GAAG,CAAC,CAAC,CAAC;YACzB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,kBAAkB,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;gBAElD,IACE,CAAC,KAAK,CAAC,OAAO,CAAC,kBAAkB,CAAC,CAAC,CAAC,CAAC,IAAK,kBAAkB,CAAC,CAAC,CAAmB,CAAC,MAAM,KAAK,CAAC,CAAC;oBAC/F,CAAC,KAAK,CAAC,OAAO,CAAC,kBAAkB,CAAC,CAAC,CAAC,CAAC,EACrC;oBACA,eAAe,EAAE,CAAC;iBACnB;gBACD,IAAI,eAAe,IAAI,UAAU,IAAI,eAAe,GAAG,QAAQ,EAAE;oBAC/D,IAAI,CAAC,wBAAwB,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC,CAAC,CAAC,CAAC;iBAC3D;qBAAM,IAAI,eAAe,IAAI,QAAQ,EAAE;oBACtC,MAAM;iBACP;aACF;SACF;aAAM,IAAI,IAAI,CAAC,aAAa,GAAG,CAAC,EAAE;YACjC,MAAM,IAAI,KAAK,CAAC,uCAAuC,CAAC,CAAC;SAC1D;IACH,CAAC;IAED,mBAAmB,CAAC,aAAqB;QACvC,OAAO,IAAI,CAAC,wBAAwB,CAAC,aAAa,CAAC,CAAC;IACtD,CAAC;IAED,IAAI,OAAO;QACT,OAAO,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC;IACzD,CAAC;IAED,IAAI,MAAM;QACR,OAAO,IAAI,CAAC,OAAO,CAAC;IACtB,CAAC;IACD,GAAG,CAAC,KAAa;QACf,OAAO,IAAI,CAAC,iBAAiB,CAAC,SAAS,CAAC,IAAI,CAAC,uBAAuB,EAAE,KAAK,CAAC,CAAC,CAAC;IAChF,CAAC;IACD,MAAM,CAAC,KAAa;QAClB,OAAO,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,IAAI,CAAC,uBAAuB,EAAE,KAAK,CAAW,CAAC,CAAC;IACrF,CAAC;IACD,WAAW,CAAC,KAAa;QACvB,OAAO,SAAS,CAAC,IAAI,CAAC,uBAAuB,EAAE,KAAK,CAAC,CAAC;IACxD,CAAC;IACD,aAAa,CAAC,QAA2B;QACvC,IAAI,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE;YAC3B,IAAI,IAAI,CAAC,gBAAgB,KAAK,MAAM,EAAE;gBACpC,OAAO,IAAI,CAAC,uBAAuB,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE,CAAC,UAAU,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC,CAAC;aACrF;YACD,OAAO,IAAI,CAAC,uBAAuB,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;SAC/E;QACD,OAAO,IAAI,CAAC,uBAAuB,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,KAAK,QAAQ,CAAC,CAAC;IAC7E,CAAC;IAED,QAAQ,CACN,KAAa,EACb,KAAsC,EACtC,GAAW,EACX,GAAW,EACX,KAAmB;QAEnB,OAAO,IAAI,CAAC,gBAAgB,CAAC,SAAS,CAAC,IAAI,CAAC,uBAAuB,EAAE,KAAK,CAAC,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,CAAC,CAAC;IACvG,CAAC;IAED,WAAW,CACT,KAAa,EACb,KAAsC,EACtC,GAAW,EACX,GAAW,EACX,KAAmB;QAEnB,OAAO,IAAI,CAAC,eAAe,CAAC,SAAS,CAAC,IAAI,CAAC,uBAAuB,EAAE,KAAK,CAAW,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,CAAC,CAAC;IAChH,CAAC;IAED,QAAQ,CAAC,KAAa,EAAE,KAAe;QACrC,OAAO,IAAI,CAAC,gBAAgB,CAAC,SAAS,CAAC,IAAI,CAAC,uBAAuB,EAAE,KAAK,CAAC,EAAE,KAAK,CAAC,CAAC;IACtF,CAAC;IAMD,iBAAiB,CAAC,KAAa;;QAE7B,MAAM,MAAM,GAAG,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,uBAAuB,CAAC,KAAK,CAAC,CAAC,CAAC;QAC3E,IAAI,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,cAAc,EAAE;YAC1B,MAAM,cAAc,GAAG,MAAM,CAAC,cAAc,CAAC;YAC7C,IAAI,CAAA,MAAA,MAAM,CAAC,QAAQ,0CAAE,MAAM,IAAG,CAAC,IAAI,MAAM,CAAC,QAAQ,KAAK,IAAI,EAAE;gBAC3D,OAAO,cAAc,CAAC;aACvB;SACF;QACD,OAAO,IAAI,CAAC;IAEd,CAAC;IAKD,oBAAoB,CAAC,KAAa,EAAE,cAAsB,EAAE,YAAoB;QAC9E,MAAM,cAAc,GAAG,IAAI,CAAC,kBAAkB,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QACxD,MAAM,OAAO,GAAG,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;QACxC,MAAM,KAAK,GAAG,IAAI,CAAC,iBAAiB,CAAC,KAAK,CAAC,CAAC;QAC5C,MAAM,IAAI,GAAG,IAAI,CAAC,iBAAiB,CAAC,OAAO,CAAC,CAAC;QAE7C,IAAI,CAAC,mBAAmB,EAAE,CAAC;QAC3B,IAAI,KAAK,KAAK,cAAc,CAAC,QAAQ,EAAE;YAGrC,IAAI,CAAC,cAAc,GAAG,cAAc,CAAC,MAAM,CAAC;YAC5C,IAAI,CAAC,gBAAgB,CAAC,OAAO,EAAE,cAAc,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;YAC5D,IAAI,CAAC,uBAAuB,GAAG,IAAI,CAAC;SACrC;aAAM,IAAI,KAAK,KAAK,cAAc,CAAC,MAAM,EAAE;YAC1C,MAAM,cAAc,GAAG,yBAAyB,CAAC,OAAO,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC;YACvE,IAAI,CAAC,kBAAkB,CAAC,MAAM,CAAC,IAAI,CAAC,kBAAkB,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,cAAc,CAAC,CAAC;YAE7F,IAAI,CAAC,cAAc,GAAG,cAAc,CAAC,QAAQ,CAAC;SAC/C;QAED,IAAI,CAAC,eAAe,EAAE,CAAC;QACvB,MAAM,GAAG,GAAG,EAAE,CAAC;QACf,MAAM,MAAM,GAAG,EAAE,CAAC;QAClB,IAAI,KAAK,KAAK,cAAc,CAAC,QAAQ,EAAE;YACrC,MAAM,SAAS,GAAG,IAAI,CAAC,kBAAkB,CAAC,MAAM,GAAG,cAAc,CAAC,MAAM,CAAC;YACzE,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,SAAS,EAAE,CAAC,EAAE,EAAE;gBAClC,GAAG,CAAC,IAAI,CAAC,KAAK,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;aACzB;SACF;aAAM,IAAI,KAAK,KAAK,cAAc,CAAC,MAAM,EAAE;YAC1C,MAAM,YAAY,GAAG,cAAc,CAAC,MAAM,GAAG,IAAI,CAAC,kBAAkB,CAAC,MAAM,CAAC;YAC5E,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,YAAY,EAAE,CAAC,EAAE,EAAE;gBACrC,MAAM,CAAC,IAAI,CAAC,KAAK,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;aAC5B;SACF;QAUD,OAAO,EAAE,GAAG,EAAE,MAAM,EAAE,CAAC;IACzB,CAAC;IASD,gBAAgB,CAAC,QAA2B,EAAE,cAA8B,EAAE,QAAa;;QACzF,IAAI,CAAC,cAAc,IAAI,cAAc,KAAK,cAAc,CAAC,QAAQ,IAAI,cAAc,KAAK,cAAc,CAAC,IAAI,EAAE;YAC3G,OAAO,CAAC,CAAC;SACV;QACD,IAAI,cAAc,GAAG,CAAC,CAAC;QACvB,MAAM,QAAQ,GAAG,QAAQ,CAAC,gBAAgB,CAAC,CAAC,CAAC,QAAQ,CAAC,gBAAgB,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC;QAC3F,IAAI,QAAQ,EAAE;YACZ,MAAM,uBAAuB,GAAkB,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,QAAQ,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC;YACpG,MAAA,IAAI,CAAC,cAAc,0CAAE,OAAO,CAAC,KAAK,CAAC,EAAE;gBACnC,IAAI,KAAK,CAAC,KAAK,KAAK,QAAQ,EAAE;oBAC5B,IAAI,CAAC,IAAI,CACP,KAAK,CAAC,EAAE,CACN,OAAO,CAAC,uBAAuB,CAAC,KAAK,CAAC,CAAC;wBACrC,CAAC,CAAC,uBAAuB,CAAC,KAAK,CAAC;wBAChC,CAAC,CAAC,CAAC,uBAAuB,CAAC,KAAK,CAAC,GAAG,KAAK,CAAC,EAC9C,CAAC,KAAK,EAAE,GAAG,EAAE,EAAE;wBACb,uBAAuB,CAAC,KAAK,CAAC,GAAG,GAAG,CAAC;oBACvC,CAAC,EACD,QAAQ,CAAC,MAAM,EACf,KAAK,CAAC,OAAO,EACb,KAAK,CAAC,KAAK,EACX,KAAK,CAAC,EAAE,CACN,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE,KAAK,CAAC,EAAE,KAAK,CAAC,KAAK,CAAC,CAC7G,CAAC;iBACH;YACH,CAAC,CAAC,CAAC;YACH,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,uBAAuB,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;gBACvD,cAAc,IAAI,CAAC,CAAC;gBACpB,MAAM,UAAU,GAAG,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC;oBACxC,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,uBAAuB,CAAC,CAAC,CAAC,CAAC,CAAC;oBAC/C,CAAC,CAAC,CAAC,QAAQ,EAAE,uBAAuB,CAAC,CAAC,CAAC,CAAC,CAAC;gBAC3C,IAAI,CAAC,kBAAkB,CAAC,MAAM,CAC5B,IAAI,CAAC,kBAAkB,CAAC,OAAO,CAAC,QAAQ,CAAC,GAAG,cAAc,EAI1D,CAAC,EACD,UAAU,CACX,CAAC;gBAGF,MAAM,SAAS,GAAG,IAAI,CAAC,iBAAiB,CAAC,UAAU,CAAC,CAAC;gBACrD,IAAI,CAAC,SAAS,CAAC,cAAc,IAAI,CAAC,MAAA,SAAS,CAAC,gBAAgB,mCAAI,SAAS,CAAC,QAAQ,CAAC,EAAE;oBAEnF,SAAS,CAAC,cAAc,GAAG,cAAc,CAAC,QAAQ,CAAC;iBACpD;gBACD,cAAc,IAAI,IAAI,CAAC,gBAAgB,CACrC,UAAU,EAEV,SAAS,CAAC,cAAc,EACxB,QAAQ,CAAC,uBAAuB,CAAC,CAAC,CAAC,CAAC,CACrC,CAAC;aACH;SACF;QACD,OAAO,cAAc,CAAC;IACxB,CAAC;IAED,gBAAgB,CACd,KAAgB,EAChB,KAAa,EACb,KAAe,EACf,GAAY,EACZ,GAAY,EACZ,KAAoB;;QAEpB,IAAI,KAAK,KAAK,IAAI,EAAE;YAClB,OAAO,SAAS,CAAC;SAClB;QACD,IAAI,KAAK,IAAI,CAAC,EAAE;YACd,MAAM,SAAS,GAAG,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;YAE1C,IAAI,CAAC,wBAAwB,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;YAEhD,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,EAAE,EAAE;gBACvC,KAAK,GAAG,GAAG,GAAG,KAAK,CAAC,wBAAwB,CAAC;aAC9C;YACD,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE;gBAC1D,MAAM,kBAAkB,GAAG,MAAA,IAAI,CAAC,uBAAuB,CAAC,GAAG,CAAC,SAAS,CAAC,QAAQ,EAAE,CAAC,0CAAG,KAAY,CAAC,CAAC;gBAClG,MAAM,MAAM,GAAG,IAAI,CAAC,iBAAiB,CAAC,SAAS,CAAC,CAAC;gBACjD,IAAI,WAAW,GAAG,KAAK,CAAC;gBACxB,IAAI,OAAO,kBAAkB,KAAK,QAAQ,IAAI,WAAW,CAAC,KAAK,CAAC,EAAE;oBAChE,WAAW,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC;iBACjC;gBACD,IAAI,SAAS,CAAC,MAAM,CAAC,EAAE;oBACrB,MAAM;yBACH,IAAI,CAAC,MAAM,CAAC,EAAE;wBACb,MAAM,CAAC,KAAwB,CAAC,GAAG,WAAW,CAAC;oBACjD,CAAC,CAAC;yBACD,KAAK,CAAC,CAAC,GAAU,EAAE,EAAE;wBACpB,OAAO,CAAC,KAAK,CAAC,eAAe,EAAE,GAAG,CAAC,CAAC;oBACtC,CAAC,CAAC,CAAC;iBACN;qBAAM;oBACL,IAAI,MAAM,EAAE;wBACV,MAAM,CAAC,KAAK,CAAC,GAAG,WAAW,CAAC;qBAC7B;yBAAM;wBACL,IAAI,CAAC,OAAO,CAAC,SAAmB,CAAC,GAAG,IAAI,CAAC,aAAa,KAAK,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;wBAC7E,IAAI,CAAC,OAAO,CAAC,SAAmB,CAAC,CAAC,KAAK,CAAC,GAAG,WAAW,CAAC;qBACxD;iBACF;aACF;SACF;IAEH,CAAC;IAED,6BAA6B,CAC3B,KAAgB,EAChB,WAA8B,EAC9B,KAAe,EACf,KAAoB;;QAEpB,IAAI,KAAK,KAAK,IAAI,EAAE;YAClB,OAAO,SAAS,CAAC;SAClB;QACD,IAAI,WAAW,KAAK,SAAS,IAAI,WAAW,KAAK,IAAI,EAAE;YACrD,OAAO;SACR;QAED,MAAM,MAAM,GAAG,WAAW,CAAC,QAAQ,EAAE,CAAC;QACtC,IAAI,CAAC,IAAI,CAAC,uBAAuB,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE;YAC7C,MAAM,UAAU,GAAG,KAAK,CAAC,OAAO,CAAC,MAAC,IAAI,CAAC,aAAqB,0CAAE,OAAO,CAAC;gBACpE,CAAC,CAAE,IAAI,CAAC,aAAqB,CAAC,OAAO;gBACrC,CAAC,CAAC,IAAI,CAAC;YACT,MAAM,YAAY,GAAG,UAAU;gBAC7B,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,WAAW,CAAC;oBAC1B,CAAC,CAAC,qBAAqB,CAAC,UAAU,EAAE,WAAW,CAAC;oBAChD,CAAC,CAAC,UAAU,CAAC,WAAW,CAAC;gBAC3B,CAAC,CAAC,SAAS,CAAC;YACd,IAAI,CAAC,uBAAuB,CAAC,GAAG,CAC9B,MAAM,EACN,MAAA,SAAS,CAAC,YAAY,EAAE,SAAS,EAAE,CAAC,yBAAyB,EAAE,uBAAuB,CAAC,CAAC,mCAAI,EAAE,CAC/F,CAAC;SACH;QAED,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE;YAC1D,MAAM,kBAAkB,GAAG,MAAA,IAAI,CAAC,uBAAuB,CAAC,GAAG,CAAC,MAAM,CAAC,0CAAG,KAAY,CAAC,CAAC;YACpF,MAAM,UAAU,GAAG,KAAK,CAAC,OAAO,CAAC,MAAC,IAAI,CAAC,aAAqB,0CAAE,OAAO,CAAC;gBACpE,CAAC,CAAE,IAAI,CAAC,aAAqB,CAAC,OAAO;gBACrC,CAAC,CAAC,IAAI,CAAC;YACT,MAAM,MAAM,GAAG,UAAU;gBACvB,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,WAAW,CAAC;oBAC1B,CAAC,CAAC,qBAAqB,CAAC,UAAU,EAAE,WAAW,CAAC;oBAChD,CAAC,CAAC,UAAU,CAAC,WAAW,CAAC;gBAC3B,CAAC,CAAC,SAAS,CAAC;YACd,IAAI,WAAW,GAAG,KAAK,CAAC;YACxB,IAAI,OAAO,kBAAkB,KAAK,QAAQ,IAAI,WAAW,CAAC,KAAK,CAAC,EAAE;gBAChE,WAAW,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC;aACjC;YACD,IAAI,MAAM,EAAE;gBACV,MAAM,CAAC,KAAK,CAAC,GAAG,WAAW,CAAC;aAC7B;iBAAM,IAAI,UAAU,IAAI,OAAO,WAAW,KAAK,QAAQ,EAAE;gBACxD,UAAU,CAAC,WAAW,CAAC,GAAG,IAAI,CAAC,aAAa,KAAK,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBACnE,UAAU,CAAC,WAAW,CAAC,CAAC,KAAK,CAAC,GAAG,WAAW,CAAC;aAC9C;SACF;IACH,CAAC;IAED,wBAAwB,CAAC,SAA4B,EAAE,KAAoB;;QACzE,IAAI,CAAC,IAAI,CAAC,uBAAuB,CAAC,GAAG,CAAC,SAAS,CAAC,QAAQ,EAAE,CAAC,EAAE;YAC3D,MAAM,YAAY,GAAG,IAAI,CAAC,iBAAiB,CAAC,SAAS,CAAC,CAAC;YACvD,IAAI,CAAC,uBAAuB,CAAC,GAAG,CAC9B,SAAS,CAAC,QAAQ,EAAE,EACpB,MAAA,SAAS,CAAC,YAAY,EAAE,SAAS,EAAE,CAAC,yBAAyB,EAAE,uBAAuB,CAAC,CAAC,mCAAI,EAAE,CAC/F,CAAC;SACH;IACH,CAAC;IAOD,SAAS,CAAC,MAAW,EAAE,KAAa;;QAClC,IAAI,KAAK,GAAG,IAAI,CAAC;QACjB,IAAI,CAAA,MAAA,MAAA,IAAI,CAAC,UAAU,0CAAE,WAAW,0CAAE,MAAM,KAAI,CAAC,EAAE;YAC7C,IAAI,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,EAAE;gBAC7B,IAAI,IAAI,CAAC,gBAAgB,KAAK,MAAM,IAAI,MAAM,CAAC,QAAQ,EAAE;oBACvD,MAAM,CAAC,gBAAgB,GAAG,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;iBAClE;aACF;iBAAM;gBACL,KAAK,GAAG,KAAK,CAAC;aACf;SACF;QACD,IAAI,KAAK,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE;YACxC,MAAM,OAAO,GAAG,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;YACxC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE;gBAC3B,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC,EAAE,MAAM,CAAC,CAAC;aACzC;iBAAM;aAIN;SACF;IACH,CAAC;IAMO,mBAAmB;;QACzB,MAAM,UAAU,GAAG,MAAC,IAAI,CAAC,aAAiC,0CAAE,OAAO,CAAC;QACpE,OAAO,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC;IACvD,CAAC;IACO,kBAAkB;;QACxB,OAAO,CAAC,MAAA,MAAA,MAAA,IAAI,CAAC,UAAU,0CAAE,WAAW,0CAAE,MAAM,mCAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,MAAA,MAAA,IAAI,CAAC,eAAe,0CAAE,MAAM,mCAAI,CAAC,CAAC,IAAI,CAAC,CAAC;IACtG,CAAC;IACO,qBAAqB,CAAC,KAAa,EAAE,MAAc;QACzD,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,IAAI,EAAE;YACzC,OAAO,MAAM,CAAC;SACf;QACD,IAAI,KAAK,GAAG,MAAM,EAAE;YAClB,OAAO,MAAM,CAAC;SACf;QACD,IAAI,KAAK,GAAG,CAAC,EAAE;YACb,OAAO,CAAC,CAAC;SACV;QACD,OAAO,KAAK,CAAC;IACf,CAAC;IACO,mCAAmC,CAAC,UAAiB,EAAE,SAAiB;QAC9E,IAAI,SAAS,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE;YACpC,OAAO,UAAU,CAAC,MAAM,CAAC;SAC1B;QACD,IAAI,SAAS,IAAI,CAAC,EAAE;YAClB,OAAO,CAAC,CAAC;SACV;QACD,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC,SAAS,GAAG,CAAC,CAAC,CAAC;QAC/C,MAAM,QAAQ,GAAG,UAAU,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;QAChD,OAAO,QAAQ,IAAI,CAAC,CAAC,CAAC,CAAC,QAAQ,GAAG,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,MAAM,CAAC;IAC1D,CAAC;IACO,6BAA6B;QACnC,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC;QACzC,IAAI,CAAC,kBAAkB,GAAG,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,aAAa,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC;QAClF,IAAI,IAAI,CAAC,gBAAgB,KAAK,MAAM,EAAE;YACpC,IAAI,CAAC,sBAAsB,EAAE,CAAC;SAC/B;QACD,IAAI,IAAI,CAAC,cAAc,EAAE;YACvB,IAAI,CAAC,UAAU,CAAC,UAAU,GAAG,IAAI,CAAC,aAAa,CAAC;YAChD,IAAI,CAAC,eAAe,EAAE,CAAC;YACvB,OAAO;SACR;QACD,IAAI,CAAC,UAAU,CAAC,YAAY,GAAG,IAAI,CAAC,aAAa,CAAC;QAClD,IAAI,CAAC,UAAU,CAAC,UAAU,GAAG,IAAI,CAAC,aAAa,CAAC;QAChD,IAAI,CAAC,eAAe,EAAE,CAAC;IACzB,CAAC;IAED,SAAS,CAAC,MAAW,EAAE,KAAa,EAAE,wBAAiC,KAAK;;QAC1E,IAAI,CAAC,qBAAqB,EAAE;YAC1B,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE;gBAC/B,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,EAAE,MAAM,CAAC,CAAC;gBACtC,IAAI,CAAC,6BAA6B,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;gBAC7C,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,IAAI,CAAC,kBAAkB,CAAC,MAAM,CAAC,CAAC;gBAC7D,IAAI,CAAC,aAAa,IAAI,CAAC,CAAC;gBACxB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,gBAAgB,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;oBACrD,IAAI,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;iBACvC;gBACD,IAAI,IAAI,CAAC,gBAAgB,KAAK,MAAM,EAAE;oBACpC,IAAI,CAAC,sBAAsB,EAAE,CAAC;iBAC/B;gBACD,IAAI,IAAI,CAAC,cAAc,EAAE;oBACvB,IAAI,CAAC,UAAU,CAAC,UAAU,GAAG,IAAI,CAAC,aAAa,CAAC;oBAChD,MAAM,EAAE,YAAY,EAAE,WAAW,EAAE,GAAG,IAAI,CAAC,UAAU,CAAC;oBACtD,MAAM,UAAU,GAAG,YAAY,GAAG,CAAC,WAAW,IAAI,CAAC,CAAC,CAAC;oBACrD,MAAM,QAAQ,GAAG,UAAU,GAAG,YAAY,CAAC;oBAC3C,IAAI,KAAK,GAAG,QAAQ,EAAE;wBACpB,IAAI,CAAC,eAAe,EAAE,CAAC;qBACxB;iBACF;qBAAM;oBACL,IAAI,CAAC,UAAU,CAAC,YAAY,GAAG,IAAI,CAAC,aAAa,CAAC;oBAClD,IAAI,CAAC,UAAU,CAAC,UAAU,GAAG,IAAI,CAAC,aAAa,CAAC;oBAChD,IAAI,CAAC,eAAe,EAAE,CAAC;iBACxB;gBAED,IAAI,MAAC,IAAI,CAAC,aAAiC,0CAAE,KAAK,EAAE;oBACjD,IAAI,CAAC,aAAiC,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;iBACzD;aACF;YACD,OAAO;SACR;QAED,MAAM,UAAU,GAAG,IAAI,CAAC,mBAAmB,EAAE,CAAC;QAC9C,IAAI,CAAC,UAAU,EAAE;YACf,OAAO;SACR;QAED,MAAM,eAAe,GAAG,IAAI,CAAC,qBAAqB,CAAC,KAAK,EAAE,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;QAC/E,MAAM,cAAc,GAAG,IAAI,CAAC,kBAAkB,EAAE;YAC9C,CAAC,CAAC,IAAI,CAAC,mCAAmC,CAAC,UAAU,EAAE,eAAe,CAAC;YACvE,CAAC,CAAC,IAAI,CAAC,qBAAqB,CAAC,eAAe,EAAE,UAAU,CAAC,MAAM,CAAC,CAAC;QAEnE,UAAU,CAAC,MAAM,CAAC,cAAc,EAAE,CAAC,EAAE,MAAM,CAAC,CAAC;QAC7C,IAAI,CAAC,uBAAuB,CAAC,KAAK,EAAE,CAAC;QACrC,IAAI,CAAC,cAAc,CAAC,KAAK,EAAE,CAAC;QAC5B,IAAI,CAAC,iBAAiB,CAAC,MAAA,IAAI,CAAC,UAAU,0CAAE,WAAW,CAAC,CAAC;QAErD,IAAI,MAAC,IAAI,CAAC,aAAiC,0CAAE,KAAK,EAAE;YACjD,IAAI,CAAC,aAAiC,CAAC,KAAK,CAAC,cAAc,EAAE,CAAC,CAAC,CAAC;SAClE;IACH,CAAC;IAMD,UAAU,CAAC,SAAc,EAAE,KAAa,EAAE,wBAAiC,KAAK;;QAC9E,IAAI,CAAC,qBAAqB,EAAE;YAC1B,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE;gBAC/B,IAAI,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE;oBAC5B,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,EAAE,GAAG,SAAS,CAAC,CAAC;oBAC5C,IAAI,CAAC,6BAA6B,CAAC,KAAK,EAAE,SAAS,CAAC,MAAM,CAAC,CAAC;oBAC5D,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,SAAS,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;wBACzC,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,IAAI,CAAC,kBAAkB,CAAC,MAAM,CAAC,CAAC;qBAC9D;oBACD,IAAI,CAAC,aAAa,IAAI,SAAS,CAAC,MAAM,CAAC;oBAEvC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,gBAAgB,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;wBACrD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,SAAS,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;4BACzC,IAAI,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC;yBAC7C;qBACF;iBACF;gBAED,IAAI,IAAI,CAAC,cAAc,EAAE;oBACvB,IAAI,CAAC,UAAU,CAAC,UAAU,GAAG,IAAI,CAAC,aAAa,CAAC;oBAChD,MAAM,EAAE,YAAY,EAAE,WAAW,EAAE,GAAG,IAAI,CAAC,UAAU,CAAC;oBACtD,MAAM,UAAU,GAAG,YAAY,GAAG,CAAC,WAAW,IAAI,CAAC,CAAC,CAAC;oBACrD,MAAM,QAAQ,GAAG,UAAU,GAAG,YAAY,CAAC;oBAC3C,IAAI,KAAK,GAAG,QAAQ,EAAE;wBACpB,IAAI,CAAC,eAAe,EAAE,CAAC;qBACxB;iBACF;qBAAM;oBACL,IAAI,CAAC,UAAU,CAAC,YAAY,GAAG,IAAI,CAAC,aAAa,CAAC;oBAClD,IAAI,CAAC,UAAU,CAAC,UAAU,GAAG,IAAI,CAAC,aAAa,CAAC;oBAChD,IAAI,CAAC,eAAe,EAAE,CAAC;iBACxB;gBAED,IAAI,MAAC,IAAI,CAAC,aAAiC,0CAAE,KAAK,EAAE;oBACjD,IAAI,CAAC,aAAiC,CAAC,KAAK,CAAC,KAAK,EAAE,SAAS,CAAC,MAAM,CAAC,CAAC;iBACxE;aACF;YACD,OAAO;SACR;QAED,MAAM,UAAU,GAAG,IAAI,CAAC,mBAAmB,EAAE,CAAC;QAC9C,IAAI,CAAC,UAAU,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC,EAAE;YACtE,OAAO;SACR;QAED,MAAM,eAAe,GAAG,IAAI,CAAC,qBAAqB,CAAC,KAAK,EAAE,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;QAC/E,MAAM,cAAc,GAAG,IAAI,CAAC,kBAAkB,EAAE;YAC9C,CAAC,CAAC,IAAI,CAAC,mCAAmC,CAAC,UAAU,EAAE,eAAe,CAAC;YACvE,CAAC,CAAC,IAAI,CAAC,qBAAqB,CAAC,eAAe,EAAE,UAAU,CAAC,MAAM,CAAC,CAAC;QAEnE,UAAU,CAAC,MAAM,CAAC,cAAc,EAAE,CAAC,EAAE,GAAG,SAAS,CAAC,CAAC;QACnD,IAAI,CAAC,uBAAuB,CAAC,KAAK,EAAE,CAAC;QACrC,IAAI,CAAC,cAAc,CAAC,KAAK,EAAE,CAAC;QAC5B,IAAI,CAAC,iBAAiB,CAAC,MAAA,IAAI,CAAC,UAAU,0CAAE,WAAW,CAAC,CAAC;QAErD,IAAI,MAAC,IAAI,CAAC,aAAiC,0CAAE,KAAK,EAAE;YACjD,IAAI,CAAC,aAAiC,CAAC,KAAK,CAAC,cAAc,EAAE,SAAS,CAAC,MAAM,CAAC,CAAC;SACjF;IACH,CAAC;IAOD,kBAAkB,CAAC,MAAW;QAC5B,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE;YAC/B,IAAI,CAAC,uBAAuB,CAAC,KAAK,EAAE,CAAC;YACrC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YAC1B,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,IAAI,CAAC,kBAAkB,CAAC,MAAM,CAAC,CAAC;YAC7D,IAAI,CAAC,aAAa,IAAI,CAAC,CAAC;YACxB,IAAI,CAAC,cAAc,CAAC,KAAK,EAAE,CAAC;YAC5B,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE;gBACxB,IAAI,CAAC,UAAU,CAAC,YAAY,GAAG,IAAI,CAAC,aAAa,CAAC;gBAClD,IAAI,CAAC,UAAU,CAAC,UAAU,GAAG,IAAI,CAAC,aAAa,CAAC;aACjD;SACF;IACH,CAAC;IAMD,mBAAmB,CAAC,SAAc;QAChC,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE;YAC/B,IAAI,CAAC,uBAAuB,CAAC,KAAK,EAAE,CAAC;YACrC,IAAI,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE;gBAC5B,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,SAAS,CAAC,CAAC;gBAChC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,SAAS,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;oBACzC,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,IAAI,CAAC,kBAAkB,CAAC,MAAM,CAAC,CAAC;iBAC9D;gBACD,IAAI,CAAC,aAAa,IAAI,SAAS,CAAC,MAAM,CAAC;gBACvC,IAAI,CAAC,cAAc,CAAC,KAAK,EAAE,CAAC;aAC7B;YACD,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE;gBACxB,IAAI,CAAC,UAAU,CAAC,YAAY,GAAG,IAAI,CAAC,aAAa,CAAC;gBAClD,IAAI,CAAC,UAAU,CAAC,UAAU,GAAG,IAAI,CAAC,aAAa,CAAC;aACjD;SACF;IACH,CAAC;IAED,6BAA6B,CAAC,WAAmB,EAAE,WAAmB,EAAE,OAAyB,KAAK;QACpG,MAAM,KAAK,GAAG,IAAI,KAAK,KAAK,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC;QAE1D,MAAM,WAAW,GAAa,EAAE,CAAC;QACjC,IAAI,CAAC,uBAAuB,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,EAAE;YAC9C,MAAM,MAAM,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC;YAC3B,IAAI,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,MAAM,CAAC,QAAQ,EAAE,KAAK,GAAG,IAAI,MAAM,IAAI,WAAW,EAAE;gBAClF,WAAW,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;aAC1B;QACH,CAAC,CAAC,CAAC;QAEH,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,IAAI,KAAK,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;QAE7D,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,WAAW,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;YAC3C,MAAM,GAAG,GAAG,WAAW,CAAC,CAAC,CAAC,CAAC;YAC3B,MAAM,MAAM,GAAG,IAAI,CAAC,uBAAuB,CAAC,GAAG,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC,CAAC;YAChE,IAAI,CAAC,uBAAuB,CAAC,MAAM,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC,CAAC;YACpD,IAAI,CAAC,uBAAuB,CAAC,GAAG,CAAC,CAAC,GAAG,GAAG,KAAK,CAAC,CAAC,QAAQ,EAAE,EAAE,MAAM,CAAC,CAAC;SACpE;IACH,CAAC;IAID,aAAa,CAAC,YAAsB,EAAE,wBAAiC,KAAK;;QAC1E,IAAI,CAAC,qBAAqB,EAAE;YAC1B,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE;gBAC/B,MAAM,uBAAuB,GAAG,EAAE,CAAC;gBACnC,MAAM,oBAAoB,GAAG,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;gBAChE,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,oBAAoB,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE;oBAChE,MAAM,WAAW,GAAG,oBAAoB,CAAC,KAAK,CAAC,CAAC;oBAChD,IAAI,WAAW,IAAI,IAAI,CAAC,aAAa,IAAI,WAAW,GAAG,CAAC,EAAE;wBACxD,SAAS;qBACV;oBACD,IAAI,CAAC,6BAA6B,CAAC,WAAW,EAAE,CAAC,EAAE,QAAQ,CAAC,CAAC;oBAC7D,uBAAuB,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;oBAC1C,MAAM,aAAa,GAAG,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;oBAChD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,gBAAgB,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;wBACrD,IAAI,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,aAAa,CAAC,CAAC;qBACtD;oBACD,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC;oBACpC,IAAI,CAAC,kBAAkB,CAAC,GAAG,EAAE,CAAC;oBAC9B,IAAI,CAAC,aAAa,IAAI,CAAC,CAAC;iBACzB;gBACD,IAAI,IAAI,CAAC,cAAc,EAAE;oBACvB,IAAI,CAAC,eAAe,EAAE,CAAC;iBACxB;qBAAM;oBACL,IAAI,CAAC,UAAU,CAAC,YAAY,GAAG,IAAI,CAAC,aAAa,CAAC;oBAClD,IAAI,CAAC,UAAU,CAAC,UAAU,GAAG,IAAI,CAAC,aAAa,CAAC;oBAChD,IAAI,CAAC,eAAe,EAAE,CAAC;iBACxB;gBACD,IAAI,MAAC,IAAI,CAAC,aAAiC,0CAAE,OAAO,EAAE;oBACnD,IAAI,CAAC,aAAiC,CAAC,OAAO,CAAC,uBAAuB,CAAC,CAAC;iBAC1E;gBACD,OAAO,uBAAuB,CAAC;aAChC;YACD,OAAO,EAAE,CAAC;SACX;QAED,MAAM,UAAU,GAAG,IAAI,CAAC,mBAAmB,EAAE,CAAC;QAC9C,IAAI,CAAC,UAAU,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE;YAC/C,OAAO,EAAE,CAAC;SACX;QAED,MAAM,uBAAuB,GAAa,EAAE,CAAC;QAC7C,MAAM,oBAAoB,GAAG,YAAY,CAAC,KAAK,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;QACxE,MAAM,gBAAgB,GAAa,EAAE,CAAC;QACtC,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,oBAAoB,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE;YAChE,MAAM,SAAS,GAAG,oBAAoB,CAAC,KAAK,CAAC,CAAC;YAC9C,IAAI,SAAS,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM,IAAI,SAAS,GAAG,CAAC,EAAE;gBACrD,SAAS;aACV;YACD,MAAM,aAAa,GAAG,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;YAC9C,MAAM,QAAQ,GAAG,UAAU,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC;YACnD,IAAI,QAAQ,IAAI,CAAC,EAAE;gBACjB,UAAU,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC;gBAC/B,gBAAgB,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;aACjC;YACD,uBAAuB,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;SACzC;QAED,IAAI,CAAC,uBAAuB,CAAC,KAAK,EAAE,CAAC;QACrC,IAAI,CAAC,cAAc,CAAC,KAAK,EAAE,CAAC;QAC5B,IAAI,CAAC,iBAAiB,CAAC,MAAA,IAAI,CAAC,UAAU,0CAAE,WAAW,CAAC,CAAC;QAErD,IAAI,MAAC,IAAI,CAAC,aAAiC,0CAAE,OAAO,EAAE;YACnD,IAAI,CAAC,aAAiC,CAAC,OAAO,CAAC,gBAAgB,CAAC,CAAC;SACnE;QACD,OAAO,uBAAuB,CAAC;IACjC,CAAC;IAID,sBAAsB,CAAC,YAAsB;QAC3C,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE;YAC/B,MAAM,oBAAoB,GAAG,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;YAChE,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,oBAAoB,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE;gBAChE,MAAM,WAAW,GAAG,oBAAoB,CAAC,KAAK,CAAC,CAAC;gBAChD,IAAI,WAAW,IAAI,IAAI,CAAC,aAAa,IAAI,WAAW,GAAG,CAAC,EAAE;oBACxD,SAAS;iBACV;gBACD,MAAM,QAAQ,GAAG,IAAI,CAAC,kBAAkB,CAAC,WAAW,CAAW,CAAC;gBAChE,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC;gBACjC,IAAI,CAAC,aAAa,IAAI,CAAC,CAAC;aACzB;YACD,IAAI,CAAC,cAAc,CAAC,KAAK,EAAE,CAAC;YAC5B,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE;gBACxB,IAAI,CAAC,UAAU,CAAC,YAAY,GAAG,IAAI,CAAC,aAAa,CAAC;gBAClD,IAAI,CAAC,UAAU,CAAC,UAAU,GAAG,IAAI,CAAC,aAAa,CAAC;aACjD;YACD,IAAI,CAAC,uBAAuB,CAAC,KAAK,EAAE,CAAC;SACtC;IACH,CAAC;IAKD,aAAa,CAAC,OAAc,EAAE,YAAmC,EAAE,wBAAiC,KAAK;;QACvG,IAAI,CAAC,qBAAqB,EAAE;YAC1B,MAAM,uBAAuB,GAAG,EAAE,CAAC;YACnC,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,YAAY,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE;gBACxD,MAAM,WAAW,GAAG,YAAY,CAAC,KAAK,CAAC,CAAC;gBACxC,IAAI,KAAK,CAAC,OAAO,CAAC,WAAW,CAAC,EAAE;oBAC9B,IAAI,CAAC,uBAAuB,CAAC,MAAM,CAAC,WAAW,CAAC,QAAQ,EAAE,CAAC,CAAC;oBAC5D,uBAAuB,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;oBAC1C,WAAW,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE;wBAC3C,IAAI,GAAG,CAAC,GAAG,CAAC,KAAK,SAAS,EAAE;4BAC1B,GAAG,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC;yBACf;wBACD,OAAO,GAAG,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC;oBAC3B,CAAC,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC,WAAW,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC;iBACxE;qBAAM;oBACL,IAAI,WAAW,IAAI,IAAI,CAAC,aAAa,IAAI,WAAW,GAAG,CAAC,EAAE;wBACxD,SAAS;qBACV;oBACD,IAAI,CAAC,uBAAuB,CAAC,MAAM,CAAC,WAAW,CAAC,QAAQ,EAAE,CAAC,CAAC;oBAC5D,uBAAuB,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;oBAC1C,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,gBAAgB,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;wBACrD,IAAI,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC;qBAClF;oBACD,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC;iBAC5C;aACF;YACD,IAAI,IAAI,CAAC,cAAc,EAAE;gBACvB,IAAI,CAAC,eAAe,EAAE,CAAC;aACxB;YACD,OAAO,uBAAuB,CAAC;SAChC;QAED,MAAM,UAAU,GAAG,IAAI,CAAC,mBAAmB,EAAE,CAAC;QAC9C,IAAI,CAAC,UAAU,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE;YAC/C,OAAO,EAAE,CAAC;SACX;QAED,MAAM,iBAAiB,GAA0B,EAAE,CAAC;QACpD,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,YAAY,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE;YACxD,MAAM,WAAW,GAAG,YAAY,CAAC,KAAK,CAAC,CAAC;YACxC,IAAI,KAAK,CAAC,OAAO,CAAC,WAAW,CAAC,EAAE;gBAC9B,IAAI,CAAC,uBAAuB,CAAC,MAAM,CAAC,WAAW,CAAC,QAAQ,EAAE,CAAC,CAAC;gBAC5D,iBAAiB,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;gBACpC,WAAW,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE;oBAC3C,IAAI,GAAG,CAAC,GAAG,CAAC,KAAK,SAAS,EAAE;wBAC1B,GAAG,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC;qBACf;oBACD,OAAO,GAAG,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC;gBAC3B,CAAC,EAAE,UAAU,CAAC,CAAC,WAAW,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC;aACtE;iBAAM;gBACL,IAAI,WAAW,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM,IAAI,WAAW,GAAG,CAAC,EAAE;oBACzD,SAAS;iBACV;gBACD,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;gBAC5C,MAAM,QAAQ,GAAG,UAAU,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;gBAC/C,IAAI,QAAQ,IAAI,CAAC,EAAE;oBACjB,UAAU,CAAC,QAAQ,CAAC,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC;iBACvC;gBACD,iBAAiB,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;aACrC;SACF;QACD,IAAI,CAAC,uBAAuB,CAAC,KAAK,EAAE,CAAC;QACrC,IAAI,CAAC,cAAc,CAAC,KAAK,EAAE,CAAC;QAC5B,IAAI,CAAC,iBAAiB,CAAC,MAAA,IAAI,CAAC,UAAU,0CAAE,WAAW,CAAC,CAAC;QACrD,OAAO,iBAAiB,CAAC;IAC3B,CAAC;IAKD,sBAAsB,CAAC,OAAc,EAAE,YAAsB;QAC3D,MAAM,uBAAuB,GAAa,EAAE,CAAC;QAC7C,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,YAAY,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE;YACxD,MAAM,WAAW,GAAG,YAAY,CAAC,KAAK,CAAC,CAAC;YACxC,IAAI,WAAW,IAAI,IAAI,CAAC,aAAa,IAAI,WAAW,GAAG,CAAC,EAAE;gBACxD,SAAS;aACV;YACD,MAAM,QAAQ,GAAG,IAAI,CAAC,kBAAkB,CAAC,WAAW,CAAC,CAAC;YACtD,IAAI,OAAO,QAAQ,KAAK,QAAQ,EAAE;gBAChC,OAAO;aACR;YACD,IAAI,CAAC,uBAAuB,CAAC,MAAM,CAAC,QAAQ,CAAC,QAAQ,EAAE,CAAC,CAAC;YACzD,uBAAuB,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;YAC1C,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC;SACzC;QACD,IAAI,CAAC,cAAc,CAAC,KAAK,EAAE,CAAC;IAC9B,CAAC;IAED,IAAI,CAAC,MAAwB;QAE3B,MAAM,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE;YAClE,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,KAAK,KAAK,KAAK,CAAC,KAAK,CAAC,CAAC;YACnE,OAAO,CAAA,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,IAAI,MAAK,KAAK,IAAI,KAAK,CAAC,KAAK,KAAK,QAAQ,CAAC;QAC5D,CAAC,CAAC,CAAC;QAGH,IAAI,CAAC,cAAc,GAAG,MAAM,CAAC;QAG7B,IAAI,aAAa,GAA0B,MAAM,CAAC,GAAG,CACnD,KAAK,CAAC,EAAE,CAAC,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,KAAK,CAAC,IAAI,EAAE,GAAG,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,CACpF,CAAC;QAEF,IAAI,WAAW,GAAoB,IAAI,CAAC;QAGxC,IAAI,aAAa,CAAC,MAAM,GAAG,CAAC,EAAE;YAC5B,WAAW,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE;;gBACjD,MAAM,WAAW,GAAG,MAAC,aAAa,CAAC,KAAK,CAAS,0CAAG,KAAK,CAAC,KAAK,CAAC,CAAC;gBACjE,OAAO,WAAW,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,IAAI,CAAC;YACpE,CAAC,EAAE,IAAI,CAAC,CAAC;YAET,IAAI,WAAW,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE;gBACzC,IAAI,CAAC,kBAAkB,GAAG,WAAW,CAAC;gBACtC,IAAI,CAAC,eAAe,EAAE,CAAC;gBACvB,IAAI,CAAC,aAAa,CAAC,UAAU,CAAC,YAAY,EAAE,IAAI,CAAC,CAAC;gBAClD,OAAO;aACR;SACF;QAGD,MAAM,gBAAgB,GAAa,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,aAAa,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC;QAG3F,gBAAgB,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,MAAM,EAAE,EAAE;YAEvC,MAAM,OAAO,GAAG,IAAI,CAAC,iBAAiB,CAAC,MAAM,CAAC,CAAC;YAC/C,MAAM,OAAO,GAAG,IAAI,CAAC,iBAAiB,CAAC,MAAM,CAAC,CAAC;YAG/C,MAAM,QAAQ,GACZ,OAAO,KAAK,IAAI,IAAI,OAAO,KAAK,SAAS,IAAI,CAAC,OAAO,OAAO,KAAK,QAAQ,IAAI,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC;YAClH,MAAM,QAAQ,GACZ,OAAO,KAAK,IAAI,IAAI,OAAO,KAAK,SAAS,IAAI,CAAC,OAAO,OAAO,KAAK,QAAQ,IAAI,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC;YAElH,OAAO,MAAM,CAAC,MAAM,CAAC,CAAC,MAAc,EAAE,KAAgB,EAAE,EAAE;gBACxD,IAAI,MAAM,KAAK,CAAC,EAAE;oBAChB,OAAO,MAAM,CAAC;iBACf;gBAGD,IAAI,KAAK,CAAC,KAAK,KAAK,KAAK,IAAI,KAAK,CAAC,KAAK,KAAK,MAAM,EAAE;oBAEnD,IAAI,QAAQ,IAAI,CAAC,QAAQ,EAAE;wBACzB,OAAO,CAAC,CAAC;qBACV;oBACD,IAAI,CAAC,QAAQ,IAAI,QAAQ,EAAE;wBACzB,OAAO,CAAC,CAAC,CAAC;qBACX;oBAED,IAAI,QAAQ,IAAI,QAAQ,EAAE;wBACxB,OAAO,MAAM,GAAG,MAAM,CAAC;qBACxB;iBACF;qBAAM;oBAEL,IAAI,QAAQ,IAAI,QAAQ,EAAE;wBACxB,OAAO,MAAM,GAAG,MAAM,CAAC;qBACxB;iBACF;gBAED,MAAM,OAAO,GACX,KAAK,CAAC,OAAO;oBACb,CAAC,KAAK,CAAC,KAAK,KAAK,MAAM;wBACrB,CAAC,CAAC,CAAC,EAAO,EAAE,EAAO,EAAc,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;wBACtE,CAAC,CAAC,CAAC,EAAO,EAAE,EAAO,EAAc,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;gBAE5E,OAAO,OAAO,CACZ,IAAI,CAAC,gBAAgB,CAAC,MAAM,EAAE,KAAK,CAAC,KAAK,CAAC,EAC1C,IAAI,CAAC,gBAAgB,CAAC,MAAM,EAAE,KAAK,CAAC,KAAK,CAAC,EAC1C,KAAK,CAAC,KAAK,CACZ,CAAC;YACJ,CAAC,EAAE,CAAC,CAAC,CAAC;QACR,CAAC,CAAC,CAAC;QAEH,IAAI,CAAC,kBAAkB,GAAG,gBAAgB,CAAC;QAG3C,IAAI,IAAI,CAAC,oBAAoB,IAAI,IAAI,CAAC,gBAAgB,KAAK,MAAM,EAAE;YACjE,IAAI,UAAU,GAAG,gBAAgB,CAAC,MAAM,CAAC;YACzC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,UAAU,EAAE,CAAC,EAAE,EAAE;gBACnC,MAAM,MAAM,GAAG,IAAI,CAAC,iBAAiB,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC,CAAC;gBAC3D,MAAM,aAAa,GAAG,IAAI,CAAC,gBAAgB,CACzC,gBAAgB,CAAC,CAAC,CAAC,EACnB,MAAM,CAAC,cAAc,EACrB,IAAI,CAAC,iBAAiB,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC,CAC5C,CAAC;gBACF,UAAU,IAAI,aAAa,CAAC;gBAC5B,CAAC,IAAI,aAAa,CAAC;aACpB;SACF;QAGD,IAAI,CAAC,aAAa,CAAC,MAAM,EAAE;YACzB,aAAa,GAAG,MAAM,CAAC,GAAG,CACxB,GAAmB,EAAE,CAAC,CAAC;gBACrB,GAAG,EAAE,EAA2B;gBAChC,IAAI,EAAE,EAA2B;gBACjC,MAAM,EAAE,EAA2B;aACpC,CAAC,CACH,CAAC;YACF,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,MAAM,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE;gBAClD,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,aAAa,CAAC,KAAK,CAAC,CAAC,CAAC;aACpE;SACF;QAGD,MAAM,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE;YAC9B,MAAM,OAAO,GAAG,aAAa,CAAC,KAAK,CAAmB,CAAC;YACtD,OAAe,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,gBAAgB,CAAC,KAAK,EAAE,CAAC;QAC3D,CAAC,CAAC,CAAC;QAEH,IAAI,CAAC,eAAe,EAAE,CAAC;QACvB,IAAI,CAAC,aAAa,CAAC,UAAU,CAAC,YAAY,EAAE,IAAI,CAAC,CAAC;IACpD,CAAC;IAED,iBAAiB,CAAC,KAAe,EAAE,QAAwB;QACzD,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;IAC3C,CAAC;IAEO,qBAAqB,CAAC,MAAW;;QACvC,MAAM,CAAC,gBAAgB,GAAG,SAAS,CAAC;QACpC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,MAAA,MAAA,MAAM,CAAC,QAAQ,0CAAE,MAAM,mCAAI,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;YACvD,IAAI,CAAC,qBAAqB,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;SAChD;IACH,CAAC;IACO,YAAY,CAAC,MAAW;;QAC9B,IAAI,UAAU,GAAG,IAAI,CAAC;QACtB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,IAAG,MAAA,IAAI,CAAC,UAAU,CAAC,WAAW,0CAAE,MAAM,CAAA,EAAE,CAAC,EAAE,EAAE;YAC5D,MAAM,UAAU,GAAG,MAAA,IAAI,CAAC,UAAU,0CAAE,WAAW,CAAC,CAAC,CAAC,CAAC;YACnD,IAAI,UAAU,CAAC,SAAS,EAAE;gBACxB,MAAM,WAAW,GAAG,MAAM,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC;gBACjD,IAAI,UAAU,CAAC,cAAc,CAAC,OAAO,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,EAAE;oBACzD,UAAU,GAAG,KAAK,CAAC;oBACnB,MAAM;iBACP;aACF;iBAAM,IAAI,CAAC,CAAA,MAAA,UAAU,CAAC,UAAU,2DAAG,MAAM,CAAC,CAAA,EAAE;gBAC3C,UAAU,GAAG,KAAK,CAAC;gBACnB,MAAM;aACP;SACF;QACD,OAAO,UAAU,CAAC;IACpB,CAAC;IAED,0BAA0B,CAAC,WAAyB;;QAClD,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC;QACnD,IAAI,CAAC,UAAU,CAAC,WAAW,GAAG,WAAW,CAAC;QAC1C,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,cAAc,CAAC,MAAA,MAAA,IAAI,CAAC,aAAa,0CAAE,OAAO,mCAAI,IAAI,CAAC,aAAa,CAAC,CAAC;QACtF,IAAI,CAAC,aAAa,GAAG,CAAA,MAAA,IAAI,CAAC,OAAO,0CAAE,MAAM,KAAI,CAAC,CAAC;QAC/C,IAAI,CAAC,cAAc,CAAC,KAAK,EAAE,CAAC;QAC5B,IAAI,CAAC,kBAAkB,GAAG,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,aAAa,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC;QAClF,IAAI,IAAI,CAAC,gBAAgB,KAAK,MAAM,EAAE;YACpC,IAAI,CAAC,sBAAsB,EAAE,CAAC;SAC/B;QACD,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE;YACxB,IAAI,CAAC,UAAU,CAAC,YAAY,GAAG,IAAI,CAAC,aAAa,CAAC;YAClD,IAAI,CAAC,UAAU,CAAC,UAAU,GAAG,IAAI,CAAC,aAAa,CAAC;SACjD;IACH,CAAC;IAED,iBAAiB,CAAC,WAAyB,EAAE,kBAA8C;;QACzF,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC;QACnD,IAAI,CAAC,UAAU,CAAC,WAAW,GAAG,WAAW,CAAC;QAC1C,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,cAAc,CAAC,MAAA,MAAA,IAAI,CAAC,aAAa,0CAAE,OAAO,mCAAI,IAAI,CAAC,aAAa,CAAC,CAAC;QAEtF,IAAI,kBAAkB,EAAE;YACtB,kBAAkB,CAAC,IAAI,CAAC,OAAgB,CAAC,CAAC;SAC3C;QACD,IAAI,CAAC,aAAa,GAAG,CAAA,MAAA,IAAI,CAAC,OAAO,0CAAE,MAAM,KAAI,CAAC,CAAC;QAE/C,IAAI,CAAC,kBAAkB,GAAG,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,aAAa,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC;QAClF,IAAI,IAAI,CAAC,cAAc,EAAE;YAEvB,IAAI,CAAC,eAAe,EAAE,CAAC;SACxB;aAAM;YACL,IAAI,CAAC,UAAU,CAAC,YAAY,GAAG,IAAI,CAAC,aAAa,CAAC;YAClD,IAAI,CAAC,UAAU,CAAC,UAAU,GAAG,IAAI,CAAC,aAAa,CAAC;YAChD,IAAI,IAAI,CAAC,gBAAgB,KAAK,MAAM,EAAE;gBACpC,IAAI,CAAC,sBAAsB,EAAE,CAAC;aAC/B;YACD,IAAI,CAAC,eAAe,EAAE,CAAC;SACxB;IACH,CAAC;IAID,mBAAmB;QACjB,IAAI,IAAI,CAAC,cAAc,IAAI,IAAI,CAAC,cAAc,CAAC,MAAM,GAAG,CAAC,EAAE;YACzD,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC,OAAO,EAAE,GAAG,EAAE,EAAE;gBAC3C,MAAM,cAAc,GAAG,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,KAAK,KAAK,GAAG,CAAC,CAAC;gBAC9E,IAAI,CAAC,cAAc,EAAE;oBACnB,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;iBACjC;qBAAM;oBACL,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;wBAClC,IAAI,KAAK,CAAC,KAAK,KAAK,KAAK,EAAE;4BACzB,OAAO,CAAC,IAAI,GAAG,EAAE,CAAC;4BAClB,OAAO,CAAC,MAAM,GAAG,EAAE,CAAC;yBACrB;6BAAM,IAAI,KAAK,CAAC,KAAK,KAAK,MAAM,EAAE;4BACjC,OAAO,CAAC,GAAG,GAAG,EAAE,CAAC;4BACjB,OAAO,CAAC,MAAM,GAAG,EAAE,CAAC;yBACrB;6BAAM;4BACL,OAAO,CAAC,GAAG,GAAG,EAAE,CAAC;4BACjB,OAAO,CAAC,IAAI,GAAG,EAAE,CAAC;yBACnB;oBACH,CAAC,CAAC,CAAC;iBACJ;YACH,CAAC,CAAC,CAAC;SACJ;IACH,CAAC;IACD,IAAI,YAAY;QACd,OAAO,IAAI,CAAC,aAAa,CAAC;IAC5B,CAAC;IACD,IAAI,YAAY,CAAC,SAAiB;QAChC,IAAI,IAAI,CAAC,aAAa,KAAK,SAAS,EAAE;YACpC,OAAO;SACR;QACD,IAAI,CAAC,aAAa,GAAG,SAAS,CAAC;QAC/B,IAAI,CAAC,aAAa,CAAC,UAAU,CAAC,oBAAoB,EAAE,IAAI,CAAC,aAAa,CAAC,CAAC;IAC1E,CAAC;IACD,IAAI,MAAM;QACR,OAAO,IAAI,CAAC,uBAAuB,CAAC,MAAM,CAAC;IAC7C,CAAC;IACD,IAAI,UAAU;QACZ,OAAO,IAAI,CAAC;IACd,CAAC;IACD,IAAI,uBAAuB;QACzB,IAAI,IAAI,CAAC,wBAAwB,CAAC,MAAM,GAAG,CAAC,EAAE;YAC5C,OAAO,IAAI,CAAC,wBAAwB,CAAC;SACtC;QACD,OAAO,EAAE,CAAC;IACZ,CAAC;IACD,OAAO;;QACL,MAAA,KAAK,CAAC,OAAO,oDAAI,CAAC;QAClB,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC;QAC5B,IAAI,CAAC,cAAc,EAAE,CAAC;QACtB,IAAI,CAAC,uBAAuB,EAAE,CAAC;QAC/B,IAAI,CAAC,uBAAuB,CAAC,MAAM,GAAG,CAAC,CAAC;IAC1C,CAAC;IACD,cAAc;QACZ,IAAI,CAAC,kBAAkB,IAAI,CAAC,IAAI,CAAC,kBAAkB,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;QAChE,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC;QAC/B,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE;YACjC,IAAI,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;YAClC,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;QACtC,CAAC,CAAC,CAAC;QACH,IAAI,CAAC,cAAc,CAAC,KAAK,EAAE,CAAC;IAC9B,CAAC;IACD,uBAAuB;QACrB,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC;QAC/B,IAAI,CAAC,uBAAuB,CAAC,MAAM,GAAG,CAAC,CAAC;IAC1C,CAAC;IACS,iBAAiB,CAAC,SAA4B;QAItD,IAAI,IAAI,CAAC;QACT,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,OAAO,EAAE;YAC/B,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;SAC7B;aAAM;YACL,IAAI,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE;gBAC5B,IAAI,GAAG,qBAAqB,CAAC,IAAI,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC;aACvD;iBAAM;gBACL,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;aAChC;SACF;QACD,OAAO,QAAQ,CAAC,IAAI,EAAE,CAAC,GAA4B,EAAE,EAAE;YACrD,IAAI,CAAC,qBAAqB,CAAC,SAAS,EAAE,GAAG,CAAC,CAAC;QAC7C,CAAC,CAAC,CAAC;IACL,CAAC;IACS,YAAY,CAAC,SAA4B;;QACjD,IAAI,MAAA,IAAI,CAAC,uBAAuB,0CAAE,GAAG,CAAC,SAAS,CAAC,QAAQ,EAAE,CAAC,EAAE;YAC3D,OAAO,MAAA,IAAI,CAAC,uBAAuB,0CAAE,GAAG,CAAC,SAAS,CAAC,QAAQ,EAAE,CAAC,CAAC;SAChE;QACD,IAAI,IAAI,CAAC;QACT,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,OAAO,EAAE;YAC/B,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;SAC7B;aAAM;YACL,IAAI,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE;gBAC5B,IAAI,GAAG,qBAAqB,CAAC,IAAI,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC;aACvD;iBAAM;gBACL,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;aAChC;SACF;QACD,OAAO,QAAQ,CAAC,IAAI,EAAE,CAAC,GAA4B,EAAE,EAAE;YACrD,IAAI,CAAC,qBAAqB,CAAC,SAAS,EAAE,GAAG,CAAC,CAAC;QAC7C,CAAC,CAAC,CAAC;IACL,CAAC;IACS,gBAAgB,CACxB,KAAwB,EACxB,KAAsC,EACtC,GAAY,EACZ,GAAY,EACZ,KAAoB;QAEpB,IAAI,KAAK,KAAK,IAAI,EAAE;YAClB,OAAO,SAAS,CAAC;SAClB;QACD,MAAM,MAAM,GAAG,IAAI,CAAC,iBAAiB,CAAC,KAAK,CAAC,CAAC;QAE7C,OAAO,QAAQ,CAAC,MAAM,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,CAAC,GAAQ,EAAE,EAAE;YAC3D,IAAI,CAAC,oBAAoB,CAAC,KAAK,EAAE,KAAK,EAAE,GAAG,CAAC,CAAC;QAC/C,CAAC,CAAC,CAAC;IACL,CAAC;IACS,eAAe,CACvB,KAAa,EACb,KAAsC,EACtC,GAAY,EACZ,GAAY,EACZ,KAAoB;QAEpB,IAAI,KAAK,KAAK,IAAI,EAAE;YAClB,OAAO,SAAS,CAAC;SAClB;QACD,MAAM,MAAM,GAAG,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;QAExC,OAAO,QAAQ,CAAC,MAAM,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,CAAC,GAAQ,EAAE,EAAE;YAC3D,IAAI,CAAC,oBAAoB,CAAC,KAAK,EAAE,KAAK,EAAE,GAAG,CAAC,CAAC;QAC/C,CAAC,CAAC,CAAC;IACL,CAAC;IACS,gBAAgB,CAAC,KAAwB,EAAE,KAAe;QAClE,IAAI,KAAK,KAAK,IAAI,EAAE;YAClB,OAAO,KAAK,CAAC;SACd;QACD,IAAI,OAAO,KAAK,KAAK,UAAU,EAAE;YAC/B,OAAO,IAAI,CAAC;SACb;QACD,MAAM,MAAM,GAAG,IAAI,CAAC,iBAAiB,CAAC,KAAK,CAAC,CAAC;QAC7C,OAAO,OAAO,CAAC,MAAM,IAAK,KAAa,IAAK,MAAc,CAAC,CAAC;IAC9D,CAAC;IAES,oBAAoB,CAC5B,MAAyB,EACzB,MAAuC,EACvC,MAA+B;IAGjC,CAAC;IACS,qBAAqB,CAAC,MAAyB,EAAE,OAAgC;IAE3F,CAAC;IAcD,cAAc,CAAC,WAAmB,EAAE,WAAmB;;QACrD,IAAI,CAAC,IAAI,EAAE,MAAA,IAAI,CAAC,aAAa,0CAAE,cAAc,CAAC,EAAE;YAC9C,OAAO,IAAI,CAAC,aAAa,CAAC,cAAc,CAAC,WAAW,EAAE,WAAW,CAAC,CAAC;SACpE;QAED,IAAI,IAAI,CAAC,uBAAuB,EAAE;YAChC,IAAI,YAAY,GAAG,IAAI,CAAC,uBAAuB,CAAC,WAAW,CAAa,CAAC;YACzE,IAAI,YAAY,GAAG,IAAI,CAAC,uBAAuB,CAAC,WAAW,CAAa,CAAC;YACzE,IAAI,KAAK,CAAC,OAAO,CAAC,YAAY,CAAC,EAAE;gBAC/B,YAAY,GAAG,CAAC,GAAG,YAAY,CAAC,CAAC;aAClC;iBAAM;gBACL,YAAY,GAAG,CAAC,YAAY,CAAC,CAAC;aAC/B;YAED,IAAI,KAAK,CAAC,OAAO,CAAC,YAAY,CAAC,EAAE;gBAC/B,YAAY,GAAG,CAAC,GAAG,YAAY,CAAC,CAAC;aAClC;iBAAM;gBACL,YAAY,GAAG,CAAC,YAAY,CAAC,CAAC;aAC/B;YAQD,IAAI,WAAW,GAAG,WAAW,EAAE;gBAC7B,IAAI,YAAY,CAAC,MAAM,GAAG,YAAY,CAAC,MAAM,EAAE;oBAC7C,IAAI,gBAAgB,GAAG,IAAI,CAAC,uBAAuB,CAAC,WAAW,GAAG,CAAC,CAAa,CAAC;oBACjF,IAAI,KAAK,CAAC,OAAO,CAAC,gBAAgB,CAAC,EAAE;wBACnC,gBAAgB,GAAG,CAAC,GAAG,gBAAgB,CAAC,CAAC;qBAC1C;yBAAM;wBACL,gBAAgB,GAAG,CAAC,gBAAgB,CAAC,CAAC;qBACvC;oBAED,IAAI,gBAAgB,CAAC,MAAM,GAAG,YAAY,CAAC,MAAM,EAAE;wBACjD,YAAY,CAAC,MAAM,CAAC,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;qBACjD;iBACF;aACF;YACD,IAAI,YAAY,CAAC,MAAM,KAAK,YAAY,CAAC,MAAM,EAAE;gBAC/C,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE;oBACjD,IAAI,YAAY,CAAC,CAAC,CAAC,KAAK,YAAY,CAAC,CAAC,CAAC,EAAE;wBACvC,OAAO,KAAK,CAAC;qBACd;iBACF;gBACD,OAAO,IAAI,CAAC;aACb;YAED,OAAO,KAAK,CAAC;SACd;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IAED,WAAW,CAAC,WAAmB,EAAE,WAAmB;;QAClD,IAAI,CAAC,IAAI,EAAE,MAAA,IAAI,CAAC,aAAa,0CAAE,WAAW,CAAC,EAAE;YAC3C,IAAI,CAAC,aAAa,CAAC,WAAW,CAAC,WAAW,EAAE,WAAW,CAAC,CAAC;YACzD,OAAO;SACR;QACD,IAAI,MAAA,IAAI,CAAC,cAAc,0CAAE,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,KAAK,KAAK,KAAK,IAAI,KAAK,CAAC,KAAK,KAAK,MAAM,CAAC,EAAE;YAIvF,OAAO;SACR;aAAM,IAAI,IAAI,CAAC,cAAc,CAAC,WAAW,EAAE,WAAW,CAAC,EAAE;YAExD,IAAI,IAAI,CAAC,uBAAuB,EAAE;gBAChC,IAAI,YAAY,GAAG,IAAI,CAAC,uBAAuB,CAAC,WAAW,CAAC,CAAC;gBAC7D,IAAI,YAAY,GAAG,IAAI,CAAC,uBAAuB,CAAC,WAAW,CAAC,CAAC;gBAC7D,IAAI,KAAK,CAAC,OAAO,CAAC,YAAY,CAAC,EAAE;oBAC/B,YAAY,GAAG,CAAC,GAAG,YAAY,CAAC,CAAC;iBAClC;qBAAM;oBACL,YAAY,GAAG,CAAC,YAAY,CAAC,CAAC;iBAC/B;gBAED,IAAI,KAAK,CAAC,OAAO,CAAC,YAAY,CAAC,EAAE;oBAC/B,YAAY,GAAG,CAAC,GAAG,YAAY,CAAC,CAAC;iBAClC;qBAAM;oBACL,YAAY,GAAG,CAAC,YAAY,CAAC,CAAC;iBAC/B;gBAED,IAAI,OAAO,CAAC;gBACZ,IAAI,OAAO,CAAC;gBACZ,IAAI,YAAY,CAAC,MAAM,GAAG,CAAC,IAAI,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE;oBACtD,IAAI,WAAW,GAAG,WAAW,EAAE;wBAC7B,IAAI,YAAY,CAAC,MAAM,GAAG,YAAY,CAAC,MAAM,EAAE;4BAC7C,IAAI,gBAAgB,GAAG,IAAI,CAAC,uBAAuB,CAAC,WAAW,GAAG,CAAC,CAAa,CAAC;4BACjF,IAAI,KAAK,CAAC,OAAO,CAAC,gBAAgB,CAAC,EAAE;gCACnC,gBAAgB,GAAG,CAAC,GAAG,gBAAgB,CAAC,CAAC;6BAC1C;iCAAM;gCACL,gBAAgB,GAAG,CAAC,gBAAgB,CAAC,CAAC;6BACvC;4BAED,IAAI,gBAAgB,CAAC,MAAM,GAAG,YAAY,CAAC,MAAM,EAAE;gCACjD,YAAY,CAAC,MAAM,CAAC,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;6BACjD;yBACF;qBACF;oBACD,OAAO,GAAc,YAAa,CAAC,MAAM,CAAC,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;oBACzE,OAAO,GAAc,YAAa,CAAC,MAAM,CAAC,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;oBACzE,IAAI,YAAY,CAAC,MAAM,IAAI,CAAC,EAAE;wBAC5B,MAAM,MAAM,GAAG,IAAI,CAAC,iBAAiB,CAAC,YAAY,CAAC,CAAC;wBACpD,IAAI,MAAM,EAAE;4BACV,MAAM,SAAS,GAAG,MAAM,CAAC,gBAAgB;gCACvC,CAAC,CAAC,MAAM,CAAC,gBAAgB,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC,CAAC;gCAC5C,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;4BACvC,SAAS,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;4BAC9B,KAAK,CAAC,SAAS,CAAC,MAAM,CAAC,KAAK,CAAC,MAAA,MAAM,CAAC,gBAAgB,mCAAI,MAAM,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC;yBACrF;qBACF;yBAAM;wBACL,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;wBAGlD,SAAS,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;wBAC9B,KAAK,CAAC,SAAS,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC;qBACvD;iBACF;qBAAM;oBACL,IAAI,CAAC,kBAAkB,CAAC,WAAW,EAAE,WAAW,CAAC,CAAC;iBACnD;gBACD,IAAI,CAAC,yBAAyB,EAAE,CAAC;gBACjC,IAAI,CAAC,eAAe,EAAE,CAAC;aACxB;iBAAM;gBACL,IAAI,CAAC,kBAAkB,CAAC,WAAW,EAAE,WAAW,CAAC,CAAC;aACnD;SACF;IACH,CAAC;IAOD,kBAAkB,CAAC,WAAmB,EAAE,WAAmB;QACzD,MAAM,OAAO,GAAG,IAAI,CAAC,mBAAmB,CAAC,WAAW,CAAW,CAAC;QAChE,MAAM,OAAO,GAAG,IAAI,CAAC,mBAAmB,CAAC,WAAW,CAAW,CAAC;QAEhE,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;QAGhD,OAAO,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;QAC5B,KAAK,CAAC,SAAS,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;IACtD,CAAC;IAED,yBAAyB;;QACvB,IAAI,IAAI,CAAC,oBAAoB,EAAE;YAC7B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,aAAa,EAAE,CAAC,EAAE,EAAE;gBAE3C,MAAM,QAAQ,GAAG,IAAI,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC;gBAC3C,IAAI,CAAC,QAAQ,EAAE;oBACb,SAAS;iBACV;gBACD,MAAM,QAAQ,GAAG,MAAC,QAAgB,CAAC,gBAAgB,mCAAK,QAAgB,CAAC,QAAQ,CAAC;gBAClF,QAAQ,IAAI,CAAC,QAAQ,CAAC,cAAc,IAAI,CAAC,QAAQ,CAAC,cAAc,GAAG,cAAc,CAAC,QAAQ,CAAC,CAAC;aAC7F;YAED,IAAI,CAAC,kBAAkB,GAAG,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,aAAa,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC;YAClF,IAAI,UAAU,GAAG,IAAI,CAAC,aAAa,CAAC;YACpC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,UAAU,EAAE,CAAC,EAAE,EAAE;gBACnC,MAAM,QAAQ,GAAG,IAAI,CAAC,kBAAkB,CAAC,CAAC,CAAC,CAAC;gBAC5C,MAAM,QAAQ,GAAG,IAAI,CAAC,iBAAiB,CAAC,QAAQ,CAAC,CAAC;gBAClD,IAAI,CAAC,QAAQ,EAAE;oBACb,SAAS;iBACV;gBACD,MAAM,QAAQ,GAAG,MAAC,QAAgB,CAAC,gBAAgB,mCAAK,QAAgB,CAAC,QAAQ,CAAC;gBAClF,IAAI,CAAA,QAAQ,aAAR,QAAQ,uBAAR,QAAQ,CAAE,MAAM,IAAG,CAAC,IAAI,QAAQ,CAAC,cAAc,KAAK,cAAc,CAAC,MAAM,EAAE;oBAC7E,IAAI,CAAC,uBAAuB,GAAG,IAAI,CAAC;oBACpC,MAAM,cAAc,GAAG,IAAI,CAAC,4BAA4B,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;oBAC7E,CAAC,IAAI,cAAc,CAAC;oBACpB,UAAU,IAAI,cAAc,CAAC;iBAC9B;qBAAM,IAAK,QAAgB,CAAC,QAAQ,KAAK,IAAI,EAAE;oBAC9C,CAAC,QAAQ,CAAC,cAAc,IAAI,CAAC,QAAQ,CAAC,cAAc,GAAG,cAAc,CAAC,QAAQ,CAAC,CAAC;iBACjF;aACF;SACF;IACH,CAAC;IACD,4BAA4B,CAC1B,QAA2B,EAE3B,QAAa;;QAEb,IAAI,gBAAgB,GAAG,CAAC,CAAC;QACzB,MAAM,QAAQ,GAAG,MAAC,QAAgB,CAAC,gBAAgB,mCAAK,QAAgB,CAAC,QAAQ,CAAC;QAClF,MAAM,UAAU,GAAG,MAAA,QAAQ,aAAR,QAAQ,uBAAR,QAAQ,CAAE,MAAM,mCAAI,CAAC,CAAC;QACzC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,UAAU,EAAE,CAAC,EAAE,EAAE;YACnC,IAAI,QAAQ,CAAC,cAAc,KAAK,cAAc,CAAC,MAAM,EAAE;gBACrD,gBAAgB,IAAI,CAAC,CAAC;aACvB;YACD,MAAM,aAAa,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;YAClC,MAAM,aAAa,GAAG,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC;YACnF,IAAI,QAAQ,CAAC,cAAc,KAAK,cAAc,CAAC,MAAM,EAAE;gBACrD,IAAI,CAAC,kBAAkB,CAAC,MAAM,CAC5B,IAAI,CAAC,kBAAkB,CAAC,OAAO,CAAC,QAAQ,CAAC,GAAG,gBAAgB,EAE5D,CAAC,EACD,aAAa,CACd,CAAC;aACH;YACD,gBAAgB,IAAI,IAAI,CAAC,4BAA4B,CACnD,aAAa,EAEb,aAAa,CACd,CAAC;SACH;QACD,OAAO,gBAAgB,CAAC;IAC1B,CAAC;IAEO,sBAAsB,CAAC,IAAS,EAAE,WAA2B;;QACnE,IAAI,CAAC,IAAI,EAAE;YACT,OAAO;SACR;QACD,MAAM,QAAQ,GAAG,MAAC,IAAY,CAAC,gBAAgB,mCAAK,IAAY,CAAC,QAAQ,CAAC;QAE1E,IAAI,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,KAAK,IAAI,CAAC,EAAE;YAClF,IAAY,CAAC,cAAc,GAAG,WAAW,CAAC;SAC5C;QAGD,IAAI,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE;YACvC,KAAK,MAAM,KAAK,IAAI,QAAQ,EAAE;gBAC5B,IAAI,CAAC,sBAAsB,CAAC,KAAK,EAAE,WAAW,CAAC,CAAC;aACjD;SACF;IACH,CAAC;IAED,cAAc;QACZ,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE;YAC/B,KAAK,MAAM,QAAQ,IAAI,IAAI,CAAC,OAAO,EAAE;gBACnC,IAAI,CAAC,sBAAsB,CAAC,QAAQ,EAAE,cAAc,CAAC,MAAM,CAAC,CAAC;aAC9D;YACD,IAAI,CAAC,uBAAuB,GAAG,IAAI,CAAC;YACpC,IAAI,CAAC,mBAAmB,EAAE,CAAC;YAC3B,IAAI,CAAC,yBAAyB,EAAE,CAAC;YAEjC,IAAI,IAAI,CAAC,cAAc,IAAI,IAAI,CAAC,cAAc,CAAC,MAAM,GAAG,CAAC,EAAE;gBACzD,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;aAChC;iBAAM;gBACL,IAAI,CAAC,eAAe,EAAE,CAAC;aACxB;SACF;aAAM;YACL,OAAO,CAAC,IAAI,CAAC,8DAA8D,CAAC,CAAC;SAC9E;IACH,CAAC;IAED,gBAAgB;QACd,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE;YAC/B,KAAK,MAAM,QAAQ,IAAI,IAAI,CAAC,OAAO,EAAE;gBACnC,IAAI,CAAC,sBAAsB,CAAC,QAAQ,EAAE,cAAc,CAAC,QAAQ,CAAC,CAAC;aAChE;YAED,IAAI,CAAC,mBAAmB,EAAE,CAAC;YAC3B,IAAI,CAAC,yBAAyB,EAAE,CAAC;YAEjC,IAAI,IAAI,CAAC,cAAc,IAAI,IAAI,CAAC,cAAc,CAAC,MAAM,GAAG,CAAC,EAAE;gBACzD,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;aAChC;iBAAM;gBACL,IAAI,CAAC,eAAe,EAAE,CAAC;aACxB;SACF;aAAM;YACL,OAAO,CAAC,IAAI,CAAC,gEAAgE,CAAC,CAAC;SAChF;IACH,CAAC;;AAhRM,gBAAK,GAAG,IAAI,UAAU,CAAC;IAC5B,GAAG;IAEH,CAAC;IACD,MAAM,EAAE,CAAC;CACV,CAAC,CAAC;AAqRL,MAAM,UAAU,qBAAqB,CAAC,KAAU,EAAE,KAAe;;IAC/D,IAAI,MAAM,GAAG,KAAK,CAAC;IACnB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;QACrC,MAAM,UAAU,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;QAC5B,IAAI,MAAM,CAAC,UAAU,CAAC,EAAE;YACtB,MAAM,GAAG,MAAM,CAAC,UAAU,CAAC,CAAC;SAC7B;aAAM;YACL,OAAO,SAAS,CAAC;SAClB;QACD,MAAM,QAAQ,GAAG,MAAA,MAAM,CAAC,gBAAgB,mCAAI,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,QAAQ,CAAC;QAC7D,IAAI,QAAQ,IAAI,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE;YACpC,MAAM,GAAG,QAAQ,CAAC;SACnB;KACF;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,YAAmC,EAAE,IAAY;IAChF,MAAM,MAAM,GAAG,YAAY,CAAC,IAAI,CAAC,CAAC,CAAoB,EAAE,CAAoB,EAAE,EAAE;;QAC9E,IAAI,QAAQ,CAAC,CAAC,CAAC,EAAE;YACf,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;SACT;QACD,IAAI,QAAQ,CAAC,CAAC,CAAC,EAAE;YACf,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;SACT;QAED,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC;QAC5C,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,EAAE,CAAC,EAAE,EAAE;YAC/B,MAAM,EAAE,GAAG,MAAA,CAAC,CAAC,CAAC,CAAC,mCAAI,CAAC,CAAC,CAAC;YACtB,MAAM,EAAE,GAAG,MAAA,CAAC,CAAC,CAAC,CAAC,mCAAI,CAAC,CAAC,CAAC;YACtB,IAAI,EAAE,KAAK,EAAE,EAAE;gBACb,OAAO,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC;aACvC;SACF;QACD,OAAO,CAAC,CAAC;IACX,CAAC,CAAC,CAAC;IACH,OAAO,MAAM,CAAC;AAChB,CAAC","file":"DataSource.js","sourcesContent":["import * as sort from '../tools/sort';\nimport type {\n CustomAggregation,\n DataSourceAPI,\n FieldAssessor,\n FieldData,\n FieldDef,\n FieldFormat,\n FilterRules,\n IListTableDataConfig,\n IPagination,\n MaybePromiseOrCallOrUndefined,\n MaybePromiseOrUndefined,\n SortOrder,\n SortState\n} from '../ts-types';\nimport { AggregationType, HierarchyState } from '../ts-types';\nimport { applyChainSafe, getOrApply, obj, isPromise, emptyFn } from '../tools/helper';\nimport { EventTarget } from '../event/EventTarget';\nimport { computeChildrenNodeLength, getValueByPath, isAllDigits } from '../tools/util';\nimport { calculateArrayDiff } from '../tools/diff-cell';\nimport { arrayEqual, cloneDeep, isArray, isNumber, isObject, isValid } from '@visactor/vutils';\nimport type { BaseTableAPI } from '../ts-types/base-table';\nimport {\n RecordAggregator,\n type Aggregator,\n SumAggregator,\n CountAggregator,\n MaxAggregator,\n MinAggregator,\n AvgAggregator,\n NoneAggregator,\n CustomAggregator\n} from '../ts-types/dataset/aggregation';\nimport type { ColumnDefine, ColumnsDefine } from '../ts-types/list-table/layout-map/api';\n\n/**\n * 判断字段数据是否为访问器的格式\n * @param field\n * @returns boolean\n */\nfunction isFieldAssessor(field: FieldDef | FieldFormat | number): field is FieldAssessor {\n if (obj.isObject(field)) {\n const a = field as FieldAssessor;\n if (isValid(a.get) && isValid(a.set)) {\n return true;\n }\n }\n return false;\n}\nconst EVENT_TYPE = {\n SOURCE_LENGTH_UPDATE: 'source_length_update',\n CHANGE_ORDER: 'change_order'\n} as const;\ntype PromiseBack = (value: MaybePromiseOrUndefined) => void;\n\n/**\n * 获取到的某个filed的值 处理可能为promise的情况\n * @param value\n * @param promiseCallBack\n * @returns\n */\nexport function getValue(value: MaybePromiseOrCallOrUndefined, promiseCallBack: PromiseBack): MaybePromiseOrUndefined {\n const maybePromiseOrValue = getOrApply(value);\n if (isPromise(maybePromiseOrValue)) {\n const promiseValue = maybePromiseOrValue.then((r: any) => {\n promiseCallBack(r);\n return r;\n });\n\n promiseCallBack(promiseValue);\n return promiseValue;\n }\n return maybePromiseOrValue;\n}\n/**\n * 根据field获取数据源record对应的值 获取到的可能是个异步Promise 需要设置回调处理逻辑\n * @param record\n * @param field\n * @param promiseCallBack\n * @returns\n */\nexport function getField(\n record: MaybePromiseOrUndefined,\n field: FieldDef | FieldFormat | number,\n col: number,\n row: number,\n table: BaseTableAPI,\n promiseCallBack: PromiseBack\n): FieldData {\n if (record === null || record === undefined) {\n return undefined;\n }\n if (isPromise(record)) {\n return record.then((r: any) => getField(r, field, col, row, table, promiseCallBack));\n }\n const fieldGet: any = isFieldAssessor(field) ? field.get : field;\n // 如果fieldGet为undefined或'' 并且record是数组 则取值逻辑按照colIndex取数组值 返回record[col - table.leftRowSeriesNumberCount]\n if ((fieldGet === undefined || fieldGet === '') && Array.isArray(record)) {\n const colIndex = col - table.leftRowSeriesNumberCount;\n return record[colIndex];\n }\n if (isObject(record) && fieldGet in (record as any)) {\n const fieldResult = (record as any)[fieldGet];\n\n return getValue(fieldResult, promiseCallBack);\n }\n if (typeof fieldGet === 'function') {\n const fieldResult = fieldGet(record, col, row, table);\n return getValue(fieldResult, promiseCallBack);\n }\n if (Array.isArray(fieldGet)) {\n const fieldResult = getValueByPath(record, [...fieldGet]);\n return getValue(fieldResult, promiseCallBack);\n }\n const fieldArray = `${fieldGet}`.split('.');\n if (fieldArray.length <= 1) {\n const fieldResult = (record as any)[fieldGet];\n return getValue(fieldResult, promiseCallBack);\n }\n const fieldResult = applyChainSafe(\n record,\n (val, name) => getField(val, name, col, row, table, emptyFn as any),\n ...fieldArray\n );\n return getValue(fieldResult, promiseCallBack);\n}\n\nfunction _getIndex(sortedIndexMap: null | (number | number[])[], index: number): number | number[] {\n if (!sortedIndexMap) {\n return index;\n }\n const mapIndex = sortedIndexMap[index];\n return isValid(mapIndex) ? mapIndex : index;\n}\n\nexport interface DataSourceParam {\n get?: (index: number) => any;\n length?: number;\n /** 需要异步加载的情况 请不要设置records 请提供get接口 */\n records?: any;\n added?: (index: number, count: number) => any;\n deleted?: (index: number[]) => any;\n canChangeOrder?: (sourceIndex: number, targetIndex: number) => boolean;\n changeOrder?: (sourceIndex: number, targetIndex: number) => void;\n}\nexport interface ISortedMapItem {\n asc?: (number | number[])[];\n desc?: (number | number[])[];\n normal?: (number | number[])[];\n}\n\nexport class DataSource extends EventTarget implements DataSourceAPI {\n addRecordRule: 'Array' | 'Object' = 'Object';\n dataConfig: IListTableDataConfig;\n dataSourceObj: DataSourceParam | DataSource;\n private _get: (index: number | number[]) => any;\n /** 数据条目数 如果是树形结构的数据 则是第一层父节点的数量 */\n private _sourceLength: number;\n\n private _source: any[] | DataSourceParam | DataSource;\n /**\n * 缓存按字段进行排序的结果\n */\n protected sortedIndexMap: Map<FieldDef, ISortedMapItem>;\n /**\n * 记录最近一次排序规则 当展开树形结构的节点时需要用到\n */\n // private lastOrder: SortOrder;\n // private lastOrderFn: (a: any, b: any, order: string) => number;\n // private lastOrderField: FieldDef;\n private lastSortStates: Array<SortState>;\n\n /** 每一行对应源数据的索引 */\n currentIndexedData: (number | number[])[] | null = [];\n protected userPagination: IPagination;\n protected pagination: IPagination;\n /** 当前页每一行对应源数据的索引 */\n _currentPagerIndexedData: (number | number[])[];\n // 当前是否为层级的树形结构 排序时判断该值确实是否继续进行子节点排序\n hierarchyExpandLevel: number = 0;\n static get EVENT_TYPE(): typeof EVENT_TYPE {\n return EVENT_TYPE;\n }\n hasHierarchyStateExpand: boolean = false;\n // treeDataHierarchyState: Map<number | string, HierarchyState> = new Map();\n // beforeChangedRecordsMap: Record<number | string, any> = {}; // TODO过滤后 或者排序后的对应关系\n beforeChangedRecordsMap: Map<string, any> = new Map(); // TODO过滤后 或者排序后的对应关系\n /**\n * 注册聚合类型\n */\n\n // 注册聚合类型\n registedAggregators: {\n [key: string]: {\n new (config: {\n field: string | string[];\n formatFun?: any;\n isRecord?: boolean;\n aggregationFun?: Function;\n }): Aggregator;\n };\n } = {};\n rowHierarchyType: 'grid' | 'tree' | 'grid-tree' = 'grid';\n // columns对应各个字段的聚合类对象\n fieldAggregators: Aggregator[] = [];\n columns: ColumnsDefine;\n lastFilterRules: FilterRules;\n constructor(\n dataSourceObj?: DataSourceParam,\n dataConfig?: IListTableDataConfig,\n pagination?: IPagination,\n columns?: ColumnsDefine,\n rowHierarchyType?: 'grid' | 'tree',\n hierarchyExpandLevel?: number\n ) {\n super();\n this.addRecordRule = dataConfig?.addRecordRule || 'Object';\n this.registerAggregators();\n this.dataSourceObj = dataSourceObj;\n this.dataConfig = dataConfig;\n this._get = dataSourceObj?.get;\n this.columns = columns;\n this._source = dataSourceObj?.records ? this.processRecords(dataSourceObj?.records) : dataSourceObj;\n this._sourceLength = this._source?.length || 0;\n this.sortedIndexMap = new Map<string, ISortedMapItem>();\n\n this._currentPagerIndexedData = [];\n this.userPagination = pagination;\n this.pagination = pagination || {\n totalCount: this._sourceLength,\n perPageCount: this._sourceLength,\n currentPage: 0\n };\n if (hierarchyExpandLevel >= 1) {\n this.hierarchyExpandLevel = hierarchyExpandLevel;\n }\n this.currentIndexedData = Array.from({ length: this._sourceLength }, (_, i) => i);\n // 初始化currentIndexedData 正常未排序。设置其状态\n if (rowHierarchyType === 'tree') {\n this.initTreeHierarchyState();\n }\n this.rowHierarchyType = rowHierarchyType;\n this.updatePagerData();\n }\n initTreeHierarchyState() {\n // if (this.hierarchyExpandLevel) {\n this._sourceLength = this._source?.length || 0;\n this.currentIndexedData = Array.from({ length: this._sourceLength }, (_, i) => i);\n // if (this.hierarchyExpandLevel > 1) {\n let nodeLength = this._sourceLength;\n for (let i = 0; i < nodeLength; i++) {\n const indexKey = this.currentIndexedData[i];\n const nodeData = this.getOriginalRecord(indexKey);\n if (!nodeData) {\n continue;\n }\n const children = (nodeData as any).filteredChildren ?? (nodeData as any).children;\n if (children?.length > 0) {\n if (this.hierarchyExpandLevel > 1) {\n !nodeData.hierarchyState && (nodeData.hierarchyState = HierarchyState.expand);\n } else {\n !nodeData.hierarchyState && (nodeData.hierarchyState = HierarchyState.collapse);\n }\n this.hasHierarchyStateExpand = true;\n if (nodeData.hierarchyState === HierarchyState.collapse) {\n continue;\n }\n const childrenLength = this.initChildrenNodeHierarchy(indexKey, this.hierarchyExpandLevel, 2, nodeData);\n i += childrenLength;\n nodeLength += childrenLength;\n } else if ((nodeData as any).children === true) {\n !nodeData.hierarchyState && (nodeData.hierarchyState = HierarchyState.collapse);\n }\n }\n // }\n // }\n }\n\n supplementConfig(\n pagination?: IPagination,\n columns?: ColumnsDefine,\n rowHierarchyType?: 'grid' | 'tree' | 'grid-tree',\n hierarchyExpandLevel?: number\n ) {\n this.columns = columns;\n this._sourceLength = this._source?.length || 0;\n this.sortedIndexMap = new Map<string, ISortedMapItem>();\n\n this._currentPagerIndexedData = [];\n this.userPagination = pagination;\n this.pagination = pagination || {\n totalCount: this._sourceLength,\n perPageCount: this._sourceLength,\n currentPage: 0\n };\n if (hierarchyExpandLevel >= 1) {\n this.hierarchyExpandLevel = hierarchyExpandLevel;\n }\n this.currentIndexedData = Array.from({ length: this._sourceLength }, (_, i) => i);\n // 初始化currentIndexedData 正常未排序。设置其状态\n if (rowHierarchyType === 'tree') {\n this.initTreeHierarchyState();\n }\n this.rowHierarchyType = rowHierarchyType;\n this.updatePagerData();\n }\n\n //将聚合类型注册 收集到aggregators\n registerAggregator(type: string, aggregator: any) {\n this.registedAggregators[type] = aggregator;\n }\n //将聚合类型注册\n registerAggregators() {\n this.registerAggregator(AggregationType.RECORD, RecordAggregator);\n this.registerAggregator(AggregationType.SUM, SumAggregator);\n this.registerAggregator(AggregationType.COUNT, CountAggregator);\n this.registerAggregator(AggregationType.MAX, MaxAggregator);\n this.registerAggregator(AggregationType.MIN, MinAggregator);\n this.registerAggregator(AggregationType.AVG, AvgAggregator);\n this.registerAggregator(AggregationType.NONE, NoneAggregator);\n this.registerAggregator(AggregationType.CUSTOM, CustomAggregator);\n }\n updateColumns(columns: ColumnsDefine) {\n this.columns = columns;\n }\n _generateFieldAggragations() {\n const columnObjs = this.columns;\n\n this.fieldAggregators = [];\n\n const processColumn: (columns: ColumnDefine) => void = column => {\n // 重置聚合器\n delete (column as any).vtable_aggregator;\n\n const field = column.field;\n const aggregation = column.aggregation;\n if (!aggregation) {\n return; // 当前列无聚合逻辑,跳过\n }\n\n if (Array.isArray(aggregation)) {\n for (const item of aggregation) {\n const aggregator = new this.registedAggregators[item.aggregationType]({\n field: field as string,\n formatFun: item.formatFun,\n isRecord: true,\n aggregationFun: (item as CustomAggregation).aggregationFun\n });\n\n this.fieldAggregators.push(aggregator);\n\n if (!(column as any).vtable_aggregator) {\n (column as any).vtable_aggregator = [];\n }\n (column as any).vtable_aggregator.push(aggregator);\n }\n } else {\n const aggregator = new this.registedAggregators[aggregation.aggregationType]({\n field: field as string,\n formatFun: aggregation.formatFun,\n isRecord: true,\n aggregationFun: (aggregation as CustomAggregation).aggregationFun\n });\n\n this.fieldAggregators.push(aggregator);\n (column as any).vtable_aggregator = aggregator;\n }\n };\n\n const traverseColumns: (columns: ColumnsDefine) => void = columns => {\n if (!columns || columns.length === 0) {\n return;\n }\n\n for (const column of columns) {\n processColumn(column); // 处理当前列\n if (column.columns) {\n traverseColumns(column.columns); // 递归处理子列\n }\n }\n };\n\n traverseColumns(columnObjs); // 从根列开始处理\n }\n processRecords(records: any[]) {\n this._generateFieldAggragations();\n const filteredRecords = [];\n const isHasAggregation = this.fieldAggregators.length >= 1;\n const isHasFilterRule = this.dataConfig?.filterRules?.length >= 1 || this.lastFilterRules?.length >= 1;\n if (isHasFilterRule || isHasAggregation) {\n for (let i = 0, len = records.length; i < len; i++) {\n const record = records[i];\n // 跳过空白行\n if (record === undefined || record === null) {\n continue;\n }\n if (this.dataConfig?.filterRules?.length >= 1) {\n if (this.filterRecord(record)) {\n filteredRecords.push(record);\n if (this.rowHierarchyType === 'tree' && record.children) {\n record.filteredChildren = this.filteredChildren(record.children);\n }\n isHasAggregation && this.processRecord(record);\n }\n } else if (this.lastFilterRules?.length >= 1) {\n //上次做了过滤 本次做清除过滤规则的情况\n this.clearFilteredChildren(record);\n isHasAggregation && this.processRecord(record);\n } else if (isHasAggregation) {\n this.processRecord(record);\n }\n }\n if (this.dataConfig?.filterRules?.length >= 1) {\n return filteredRecords;\n }\n }\n return records;\n }\n\n filteredChildren(records: any[]) {\n const filteredRecords = [];\n for (let i = 0, len = records.length; i < len; i++) {\n const record = records[i];\n if (this.filterRecord(record)) {\n filteredRecords.push(record);\n if (record.children) {\n record.filteredChildren = this.filteredChildren(record.children);\n }\n }\n }\n return filteredRecords;\n }\n\n processRecord(record: any) {\n for (let i = 0; i < this.fieldAggregators.length; i++) {\n const aggregator = this.fieldAggregators[i];\n aggregator.push(record);\n }\n }\n /**\n * 初始化子节点的层次信息\n * @param indexKey 父节点的indexKey 即currentLevel-1的节点\n * @param hierarchyExpandLevel 需要展开层级数\n * @param currentLevel 当前要展开的是第几层\n * @param nodeData 父节点数据 即currentLevel-1的节点\n * @returns\n */\n initChildrenNodeHierarchy(\n indexKey: number | number[],\n // subNodeIndex:number,\n hierarchyExpandLevel: number,\n currentLevel: number,\n nodeData: any\n ): number {\n // if (currentLevel > hierarchyExpandLevel) {\n // return 0;\n // }\n let childTotalLength = 0;\n const nodeLength = nodeData.filteredChildren ? nodeData.filteredChildren.length : nodeData.children?.length ?? 0;\n for (let j = 0; j < nodeLength; j++) {\n if (currentLevel <= hierarchyExpandLevel || nodeData.hierarchyState === HierarchyState.expand) {\n childTotalLength += 1;\n }\n const childNodeData = nodeData.filteredChildren ? nodeData.filteredChildren[j] : nodeData.children[j];\n const childIndexKey = Array.isArray(indexKey) ? indexKey.concat(j) : [indexKey, j];\n if (currentLevel <= hierarchyExpandLevel || nodeData.hierarchyState === HierarchyState.expand) {\n this.currentIndexedData.splice(\n this.currentIndexedData.indexOf(indexKey) + childTotalLength,\n // childTotalLength,\n 0,\n childIndexKey\n );\n }\n if (\n childNodeData.filteredChildren ? childNodeData.filteredChildren.length > 0 : childNodeData.children?.length > 0\n ) {\n if (currentLevel < hierarchyExpandLevel || childNodeData.hierarchyState === HierarchyState.expand) {\n // this.treeDataHierarchyState.set(\n // Array.isArray(childIndexKey) ? childIndexKey.join(',') : childIndexKey,\n // HierarchyState.expand\n // );\n !childNodeData.hierarchyState && (childNodeData.hierarchyState = HierarchyState.expand);\n this.hasHierarchyStateExpand = true;\n } else {\n // this.treeDataHierarchyState.set(\n // Array.isArray(childIndexKey) ? childIndexKey.join(',') : childIndexKey,\n // HierarchyState.collapse\n // );\n !childNodeData.hierarchyState && (childNodeData.hierarchyState = HierarchyState.collapse);\n }\n }\n if (childNodeData.hierarchyState === HierarchyState.expand) {\n childTotalLength += this.initChildrenNodeHierarchy(\n childIndexKey,\n hierarchyExpandLevel,\n currentLevel + 1,\n childNodeData\n );\n }\n if ((childNodeData as any).children === true) {\n !childNodeData.hierarchyState && (childNodeData.hierarchyState = HierarchyState.collapse);\n }\n }\n return childTotalLength;\n }\n updatePagination(pagination?: IPagination): void {\n this.pagination = pagination || {\n totalCount: this._sourceLength,\n perPageCount: this._sourceLength,\n currentPage: 0\n };\n this.updatePagerData();\n }\n protected updatePagerData(): void {\n const { currentIndexedData } = this;\n const { perPageCount, currentPage } = this.pagination;\n const startIndex = perPageCount * (currentPage || 0);\n const endIndex = startIndex + perPageCount;\n this._currentPagerIndexedData.length = 0;\n if (currentIndexedData && currentIndexedData.length > 0) {\n // this._currentPagerIndexedData = currentIndexedData.slice(startIndex, endIndex);\n let firstLevelIndex = -1;\n for (let i = 0; i < currentIndexedData.length; i++) {\n //计算第一层父级节点数量\n if (\n (Array.isArray(currentIndexedData[i]) && (currentIndexedData[i] as Array<number>).length === 1) ||\n !Array.isArray(currentIndexedData[i])\n ) {\n firstLevelIndex++;\n }\n if (firstLevelIndex >= startIndex && firstLevelIndex < endIndex) {\n this._currentPagerIndexedData.push(currentIndexedData[i]);\n } else if (firstLevelIndex >= endIndex) {\n break;\n }\n }\n } else if (this._sourceLength > 0) {\n throw new Error(`currentIndexedData should has values!`);\n }\n }\n\n getRecordIndexPaths(bodyShowIndex: number): number | number[] {\n return this._currentPagerIndexedData[bodyShowIndex];\n }\n\n get records(): any[] {\n return Array.isArray(this._source) ? this._source : [];\n }\n\n get source(): any[] | DataSourceParam | DataSource {\n return this._source;\n }\n get(index: number): MaybePromiseOrUndefined {\n return this.getOriginalRecord(_getIndex(this.currentPagerIndexedData, index));\n }\n getRaw(index: number): MaybePromiseOrUndefined {\n return this.getRawRecord(_getIndex(this.currentPagerIndexedData, index) as number);\n }\n getIndexKey(index: number): number | number[] {\n return _getIndex(this.currentPagerIndexedData, index);\n }\n getTableIndex(colOrRow: number | number[]): number {\n if (Array.isArray(colOrRow)) {\n if (this.rowHierarchyType === 'tree') {\n return this.currentPagerIndexedData.findIndex(value => arrayEqual(value, colOrRow));\n }\n return this.currentPagerIndexedData.findIndex(value => value === colOrRow[0]);\n }\n return this.currentPagerIndexedData.findIndex(value => value === colOrRow);\n }\n /** 获取数据源中第index位置的field字段数据。传入col row是因为后面的format函数参数使用*/\n getField(\n index: number,\n field: FieldDef | FieldFormat | number,\n col: number,\n row: number,\n table: BaseTableAPI\n ): FieldData {\n return this.getOriginalField(_getIndex(this.currentPagerIndexedData, index), field, col, row, table);\n }\n\n getRawField(\n index: number,\n field: FieldDef | FieldFormat | number,\n col: number,\n row: number,\n table: BaseTableAPI\n ): FieldData {\n return this.getRawFieldData(_getIndex(this.currentPagerIndexedData, index) as number, field, col, row, table);\n }\n\n hasField(index: number, field: FieldDef): boolean {\n return this.hasOriginalField(_getIndex(this.currentPagerIndexedData, index), field);\n }\n /**\n * 获取第index条数据的展示收起状态\n * @param index\n * @returns\n */\n getHierarchyState(index: number): HierarchyState {\n // const indexed = this.getIndexKey(index);\n const record = this.getOriginalRecord(this.currentPagerIndexedData[index]);\n if (record?.hierarchyState) {\n const hierarchyState = record.hierarchyState;\n if (record.children?.length > 0 || record.children === true) {\n return hierarchyState;\n }\n }\n return null;\n // return this.treeDataHierarchyState.get(Array.isArray(indexed) ? indexed.join(',') : indexed) ?? null;\n }\n /**\n * 展开或者收起数据index\n * @param index\n */\n toggleHierarchyState(index: number, bodyStartIndex: number, bodyEndIndex: number) {\n const oldIndexedData = this.currentIndexedData.slice(0);\n const indexed = this.getIndexKey(index);\n const state = this.getHierarchyState(index);\n const data = this.getOriginalRecord(indexed);\n\n this.clearSortedIndexMap();\n if (state === HierarchyState.collapse) {\n // 将节点状态置为expand\n // this.treeDataHierarchyState.set(Array.isArray(indexed) ? indexed.join(',') : indexed, HierarchyState.expand);\n data.hierarchyState = HierarchyState.expand;\n this.pushChildrenNode(indexed, HierarchyState.expand, data);\n this.hasHierarchyStateExpand = true;\n } else if (state === HierarchyState.expand) {\n const childrenLength = computeChildrenNodeLength(indexed, state, data);\n this.currentIndexedData.splice(this.currentIndexedData.indexOf(indexed) + 1, childrenLength);\n // this.treeDataHierarchyState.set(Array.isArray(indexed) ? indexed.join(',') : indexed, HierarchyState.collapse);\n data.hierarchyState = HierarchyState.collapse;\n }\n // 变更了pagerConfig所以需要更新分页数据 TODO待定 因为只关注根节点的数量的话 可能不会影响到\n this.updatePagerData();\n const add = [];\n const remove = [];\n if (state === HierarchyState.collapse) {\n const addLength = this.currentIndexedData.length - oldIndexedData.length;\n for (let i = 0; i < addLength; i++) {\n add.push(index + i + 1);\n }\n } else if (state === HierarchyState.expand) {\n const removeLength = oldIndexedData.length - this.currentIndexedData.length;\n for (let i = 0; i < removeLength; i++) {\n remove.push(index + i + 1);\n }\n }\n // const newDiff = calculateArrayDiff(\n // oldIndexedData.slice(bodyStartIndex, bodyEndIndex + 1),\n // this.currentIndexedData.slice(bodyStartIndex, bodyEndIndex + 1),\n // bodyStartIndex\n // );\n // // const oldDiff = diffCellIndices(oldIndexedData, this.currentIndexedData);\n\n // // return oldDiff;\n // return newDiff;\n return { add, remove };\n }\n /**\n * 某个节点状态由折叠变为展开,往this.currentIndexedData中插入展开后的新增节点,注意需要递归,因为展开节点下面的子节点也能是展开状态\n * @param recordRowIndex 要计算节点的行号(从body部分开始计算)\n * @param indexKey 需要判断节点的index\n * @param hierarchyState 当前节点状态\n * @param nodeData 当前节点数据 取children时用\n * @returns\n */\n pushChildrenNode(indexKey: number | number[], hierarchyState: HierarchyState, nodeData: any): number {\n if (!hierarchyState || hierarchyState === HierarchyState.collapse || hierarchyState === HierarchyState.none) {\n return 0;\n }\n let childrenLength = 0;\n const children = nodeData.filteredChildren ? nodeData.filteredChildren : nodeData.children;\n if (children) {\n const subNodeSortedIndexArray: Array<number> = Array.from({ length: children.length }, (_, i) => i);\n this.lastSortStates?.forEach(state => {\n if (state.order !== 'normal') {\n sort.sort(\n index =>\n isValid(subNodeSortedIndexArray[index])\n ? subNodeSortedIndexArray[index]\n : (subNodeSortedIndexArray[index] = index),\n (index, rel) => {\n subNodeSortedIndexArray[index] = rel;\n },\n children.length,\n state.orderFn,\n state.order,\n index =>\n this.getOriginalField(Array.isArray(indexKey) ? indexKey.concat([index]) : [indexKey, index], state.field)\n );\n }\n });\n for (let i = 0; i < subNodeSortedIndexArray.length; i++) {\n childrenLength += 1;\n const childIndex = Array.isArray(indexKey)\n ? indexKey.concat([subNodeSortedIndexArray[i]])\n : [indexKey, subNodeSortedIndexArray[i]];\n this.currentIndexedData.splice(\n this.currentIndexedData.indexOf(indexKey) + childrenLength,\n // this.pagination.currentPage * this.pagination.perPageCount +\n // recordRowIndex +\n // childrenLength,\n 0,\n childIndex\n );\n\n // const preChildState = this.treeDataHierarchyState.get(childIndex.join(','));\n const childData = this.getOriginalRecord(childIndex);\n if (!childData.hierarchyState && (childData.filteredChildren ?? childData.children)) {\n // this.treeDataHierarchyState.set(childIndex.join(','), HierarchyState.collapse);\n childData.hierarchyState = HierarchyState.collapse;\n }\n childrenLength += this.pushChildrenNode(\n childIndex,\n // this.treeDataHierarchyState.get(childIndex.join(',')),\n childData.hierarchyState,\n children[subNodeSortedIndexArray[i]]\n );\n }\n }\n return childrenLength;\n }\n\n changeFieldValue(\n value: FieldData,\n index: number,\n field: FieldDef,\n col?: number,\n row?: number,\n table?: BaseTableAPI\n ): FieldData {\n if (field === null) {\n return undefined;\n }\n if (index >= 0) {\n const dataIndex = this.getIndexKey(index);\n\n this.cacheBeforeChangedRecord(dataIndex, table);\n // 如果field为undefined或'' 按照colIndex取数组值\n if (field === undefined || field === '') {\n field = col - table.leftRowSeriesNumberCount;\n }\n if (typeof field === 'string' || typeof field === 'number') {\n const beforeChangedValue = this.beforeChangedRecordsMap.get(dataIndex.toString())?.[field as any]; // this.getOriginalField(index, field, col, row, table);\n const record = this.getOriginalRecord(dataIndex);\n let formatValue = value;\n if (typeof beforeChangedValue === 'number' && isAllDigits(value)) {\n formatValue = parseFloat(value);\n }\n if (isPromise(record)) {\n record\n .then(record => {\n record[field as string | number] = formatValue;\n })\n .catch((err: Error) => {\n console.error('VTable Error:', err);\n });\n } else {\n if (record) {\n record[field] = formatValue;\n } else {\n this.records[dataIndex as number] = this.addRecordRule === 'Array' ? [] : {};\n this.records[dataIndex as number][field] = formatValue;\n }\n }\n }\n }\n // return getField(record, field);\n }\n\n changeFieldValueByRecordIndex(\n value: FieldData,\n recordIndex: number | number[],\n field: FieldDef,\n table?: BaseTableAPI\n ): FieldData {\n if (field === null) {\n return undefined;\n }\n if (recordIndex === undefined || recordIndex === null) {\n return;\n }\n\n const rawKey = recordIndex.toString();\n if (!this.beforeChangedRecordsMap.has(rawKey)) {\n const rawRecords = Array.isArray((this.dataSourceObj as any)?.records)\n ? (this.dataSourceObj as any).records\n : null;\n const originRecord = rawRecords\n ? Array.isArray(recordIndex)\n ? getValueFromDeepArray(rawRecords, recordIndex)\n : rawRecords[recordIndex]\n : undefined;\n this.beforeChangedRecordsMap.set(\n rawKey,\n cloneDeep(originRecord, undefined, ['vtable_gantt_linkedFrom', 'vtable_gantt_linkedTo']) ?? {}\n );\n }\n\n if (typeof field === 'string' || typeof field === 'number') {\n const beforeChangedValue = this.beforeChangedRecordsMap.get(rawKey)?.[field as any];\n const rawRecords = Array.isArray((this.dataSourceObj as any)?.records)\n ? (this.dataSourceObj as any).records\n : null;\n const record = rawRecords\n ? Array.isArray(recordIndex)\n ? getValueFromDeepArray(rawRecords, recordIndex)\n : rawRecords[recordIndex]\n : undefined;\n let formatValue = value;\n if (typeof beforeChangedValue === 'number' && isAllDigits(value)) {\n formatValue = parseFloat(value);\n }\n if (record) {\n record[field] = formatValue;\n } else if (rawRecords && typeof recordIndex === 'number') {\n rawRecords[recordIndex] = this.addRecordRule === 'Array' ? [] : {};\n rawRecords[recordIndex][field] = formatValue;\n }\n }\n }\n\n cacheBeforeChangedRecord(dataIndex: number | number[], table?: BaseTableAPI) {\n if (!this.beforeChangedRecordsMap.has(dataIndex.toString())) {\n const originRecord = this.getOriginalRecord(dataIndex);\n this.beforeChangedRecordsMap.set(\n dataIndex.toString(),\n cloneDeep(originRecord, undefined, ['vtable_gantt_linkedFrom', 'vtable_gantt_linkedTo']) ?? {}\n );\n }\n }\n\n /**\n * 将数据record 替换到index位置处\n * @param record\n * @param index\n */\n setRecord(record: any, index: number) {\n let isAdd = true;\n if (this.dataConfig?.filterRules?.length >= 1) {\n if (this.filterRecord(record)) {\n if (this.rowHierarchyType === 'tree' && record.children) {\n record.filteredChildren = this.filteredChildren(record.children);\n }\n } else {\n isAdd = false;\n }\n }\n if (isAdd && Array.isArray(this.records)) {\n const indexed = this.getIndexKey(index);\n if (!Array.isArray(indexed)) {\n this.records.splice(indexed, 1, record);\n } else {\n // const c_node_index = (indexed as Array<any>)[indexed.length - 1];\n // const p_node = this.getOriginalRecord(indexed.slice(0, indexed.length - 1));\n // (p_node as any).children.splice(c_node_index, 1, record);\n }\n }\n }\n /**\n * 将单条数据record 添加到index位置处\n * @param record 被添加的单条数据\n * @param index 代表的数据源中的index\n */\n private _getRawRecordsArray(): any[] | null {\n const rawRecords = (this.dataSourceObj as DataSourceParam)?.records;\n return Array.isArray(rawRecords) ? rawRecords : null;\n }\n private _hasFilterInEffect(): boolean {\n return (this.dataConfig?.filterRules?.length ?? 0) >= 1 || (this.lastFilterRules?.length ?? 0) >= 1;\n }\n private _normalizeInsertIndex(index: number, length: number): number {\n if (index === undefined || index === null) {\n return length;\n }\n if (index > length) {\n return length;\n }\n if (index < 0) {\n return 0;\n }\n return index;\n }\n private _mapViewInsertIndexToRawInsertIndex(rawRecords: any[], viewIndex: number): number {\n if (viewIndex >= this.records.length) {\n return rawRecords.length;\n }\n if (viewIndex <= 0) {\n return 0;\n }\n const prevRecord = this.records[viewIndex - 1];\n const rawIndex = rawRecords.indexOf(prevRecord);\n return rawIndex >= 0 ? rawIndex + 1 : rawRecords.length;\n }\n private _resetIndexingFromViewRecords(): void {\n this._sourceLength = this.records.length;\n this.currentIndexedData = Array.from({ length: this._sourceLength }, (_, i) => i);\n if (this.rowHierarchyType === 'tree') {\n this.initTreeHierarchyState();\n }\n if (this.userPagination) {\n this.pagination.totalCount = this._sourceLength;\n this.updatePagerData();\n return;\n }\n this.pagination.perPageCount = this._sourceLength;\n this.pagination.totalCount = this._sourceLength;\n this.updatePagerData();\n }\n\n addRecord(record: any, index: number, syncToOriginalRecords: boolean = false) {\n if (!syncToOriginalRecords) {\n if (Array.isArray(this.records)) {\n this.records.splice(index, 0, record);\n this.adjustBeforeChangedRecordsMap(index, 1);\n this.currentIndexedData.push(this.currentIndexedData.length);\n this._sourceLength += 1;\n for (let i = 0; i < this.fieldAggregators.length; i++) {\n this.fieldAggregators[i].push(record);\n }\n if (this.rowHierarchyType === 'tree') {\n this.initTreeHierarchyState();\n }\n if (this.userPagination) {\n this.pagination.totalCount = this._sourceLength;\n const { perPageCount, currentPage } = this.pagination;\n const startIndex = perPageCount * (currentPage || 0);\n const endIndex = startIndex + perPageCount;\n if (index < endIndex) {\n this.updatePagerData();\n }\n } else {\n this.pagination.perPageCount = this._sourceLength;\n this.pagination.totalCount = this._sourceLength;\n this.updatePagerData();\n }\n\n if ((this.dataSourceObj as DataSourceParam)?.added) {\n (this.dataSourceObj as DataSourceParam).added(index, 1);\n }\n }\n return;\n }\n\n const rawRecords = this._getRawRecordsArray();\n if (!rawRecords) {\n return;\n }\n\n const viewInsertIndex = this._normalizeInsertIndex(index, this.records.length);\n const rawInsertIndex = this._hasFilterInEffect()\n ? this._mapViewInsertIndexToRawInsertIndex(rawRecords, viewInsertIndex)\n : this._normalizeInsertIndex(viewInsertIndex, rawRecords.length);\n\n rawRecords.splice(rawInsertIndex, 0, record);\n this.beforeChangedRecordsMap.clear();\n this.sortedIndexMap.clear();\n this.updateFilterRules(this.dataConfig?.filterRules);\n\n if ((this.dataSourceObj as DataSourceParam)?.added) {\n (this.dataSourceObj as DataSourceParam).added(rawInsertIndex, 1);\n }\n }\n /**\n * 将多条数据recordArr 依次添加到index位置处\n * @param recordArr\n * @param index 代表的数据源中的index\n */\n addRecords(recordArr: any, index: number, syncToOriginalRecords: boolean = false) {\n if (!syncToOriginalRecords) {\n if (Array.isArray(this.records)) {\n if (Array.isArray(recordArr)) {\n this.records.splice(index, 0, ...recordArr);\n this.adjustBeforeChangedRecordsMap(index, recordArr.length);\n for (let i = 0; i < recordArr.length; i++) {\n this.currentIndexedData.push(this.currentIndexedData.length);\n }\n this._sourceLength += recordArr.length;\n\n for (let i = 0; i < this.fieldAggregators.length; i++) {\n for (let j = 0; j < recordArr.length; j++) {\n this.fieldAggregators[i].push(recordArr[j]);\n }\n }\n }\n\n if (this.userPagination) {\n this.pagination.totalCount = this._sourceLength;\n const { perPageCount, currentPage } = this.pagination;\n const startIndex = perPageCount * (currentPage || 0);\n const endIndex = startIndex + perPageCount;\n if (index < endIndex) {\n this.updatePagerData();\n }\n } else {\n this.pagination.perPageCount = this._sourceLength;\n this.pagination.totalCount = this._sourceLength;\n this.updatePagerData();\n }\n\n if ((this.dataSourceObj as DataSourceParam)?.added) {\n (this.dataSourceObj as DataSourceParam).added(index, recordArr.length);\n }\n }\n return;\n }\n\n const rawRecords = this._getRawRecordsArray();\n if (!rawRecords || !Array.isArray(recordArr) || recordArr.length === 0) {\n return;\n }\n\n const viewInsertIndex = this._normalizeInsertIndex(index, this.records.length);\n const rawInsertIndex = this._hasFilterInEffect()\n ? this._mapViewInsertIndexToRawInsertIndex(rawRecords, viewInsertIndex)\n : this._normalizeInsertIndex(viewInsertIndex, rawRecords.length);\n\n rawRecords.splice(rawInsertIndex, 0, ...recordArr);\n this.beforeChangedRecordsMap.clear();\n this.sortedIndexMap.clear();\n this.updateFilterRules(this.dataConfig?.filterRules);\n\n if ((this.dataSourceObj as DataSourceParam)?.added) {\n (this.dataSourceObj as DataSourceParam).added(rawInsertIndex, recordArr.length);\n }\n }\n\n /**\n * 将单条数据record 添加到index位置处\n * @param record 被添加的单条数据\n * @param index 代表的数据源中的index\n */\n addRecordForSorted(record: any) {\n if (Array.isArray(this.records)) {\n this.beforeChangedRecordsMap.clear(); // 排序情况下插入数据,很难将原index和插入新增再次排序后的新index做对应,所以这里之前先清除掉beforeChangedRecordsMap 不做维护\n this.records.push(record);\n this.currentIndexedData.push(this.currentIndexedData.length);\n this._sourceLength += 1;\n this.sortedIndexMap.clear();\n if (!this.userPagination) {\n this.pagination.perPageCount = this._sourceLength;\n this.pagination.totalCount = this._sourceLength;\n }\n }\n }\n /**\n * 将多条数据recordArr 依次添加到index位置处\n * @param recordArr\n * @param index 代表的数据源中的index\n */\n addRecordsForSorted(recordArr: any) {\n if (Array.isArray(this.records)) {\n this.beforeChangedRecordsMap.clear(); // 排序情况下插入数据,很难将原index和插入新增再次排序后的新index做对应,所以这里之前先清除掉beforeChangedRecordsMap 不做维护\n if (Array.isArray(recordArr)) {\n this.records.push(...recordArr);\n for (let i = 0; i < recordArr.length; i++) {\n this.currentIndexedData.push(this.currentIndexedData.length);\n }\n this._sourceLength += recordArr.length;\n this.sortedIndexMap.clear();\n }\n if (!this.userPagination) {\n this.pagination.perPageCount = this._sourceLength;\n this.pagination.totalCount = this._sourceLength;\n }\n }\n }\n\n adjustBeforeChangedRecordsMap(insertIndex: number, insertCount: number, type: 'add' | 'delete' = 'add') {\n const delta = type === 'add' ? insertCount : -insertCount;\n\n const numericKeys: number[] = [];\n this.beforeChangedRecordsMap.forEach((_, key) => {\n const numKey = Number(key);\n if (Number.isInteger(numKey) && numKey.toString() === key && numKey >= insertIndex) {\n numericKeys.push(numKey);\n }\n });\n\n numericKeys.sort((a, b) => (type === 'add' ? b - a : a - b));\n\n for (let i = 0; i < numericKeys.length; i++) {\n const key = numericKeys[i];\n const record = this.beforeChangedRecordsMap.get(key.toString());\n this.beforeChangedRecordsMap.delete(key.toString());\n this.beforeChangedRecordsMap.set((key + delta).toString(), record);\n }\n }\n /**\n * 删除多条数据recordIndexs\n */\n deleteRecords(recordIndexs: number[], syncToOriginalRecords: boolean = false) {\n if (!syncToOriginalRecords) {\n if (Array.isArray(this.records)) {\n const realDeletedRecordIndexs = [];\n const recordIndexsMaxToMin = recordIndexs.sort((a, b) => b - a);\n for (let index = 0; index < recordIndexsMaxToMin.length; index++) {\n const recordIndex = recordIndexsMaxToMin[index];\n if (recordIndex >= this._sourceLength || recordIndex < 0) {\n continue;\n }\n this.adjustBeforeChangedRecordsMap(recordIndex, 1, 'delete');\n realDeletedRecordIndexs.push(recordIndex);\n const deletedRecord = this.records[recordIndex];\n for (let i = 0; i < this.fieldAggregators.length; i++) {\n this.fieldAggregators[i].deleteRecord(deletedRecord);\n }\n this.records.splice(recordIndex, 1);\n this.currentIndexedData.pop();\n this._sourceLength -= 1;\n }\n if (this.userPagination) {\n this.updatePagerData();\n } else {\n this.pagination.perPageCount = this._sourceLength;\n this.pagination.totalCount = this._sourceLength;\n this.updatePagerData();\n }\n if ((this.dataSourceObj as DataSourceParam)?.deleted) {\n (this.dataSourceObj as DataSourceParam).deleted(realDeletedRecordIndexs);\n }\n return realDeletedRecordIndexs;\n }\n return [];\n }\n\n const rawRecords = this._getRawRecordsArray();\n if (!rawRecords || !Array.isArray(this.records)) {\n return [];\n }\n\n const realDeletedRecordIndexs: number[] = [];\n const recordIndexsMaxToMin = recordIndexs.slice().sort((a, b) => b - a);\n const rawDeletedIndexs: number[] = [];\n for (let index = 0; index < recordIndexsMaxToMin.length; index++) {\n const viewIndex = recordIndexsMaxToMin[index];\n if (viewIndex >= this.records.length || viewIndex < 0) {\n continue;\n }\n const deletedRecord = this.records[viewIndex];\n const rawIndex = rawRecords.indexOf(deletedRecord);\n if (rawIndex >= 0) {\n rawRecords.splice(rawIndex, 1);\n rawDeletedIndexs.push(rawIndex);\n }\n realDeletedRecordIndexs.push(viewIndex);\n }\n\n this.beforeChangedRecordsMap.clear();\n this.sortedIndexMap.clear();\n this.updateFilterRules(this.dataConfig?.filterRules);\n\n if ((this.dataSourceObj as DataSourceParam)?.deleted) {\n (this.dataSourceObj as DataSourceParam).deleted(rawDeletedIndexs);\n }\n return realDeletedRecordIndexs;\n }\n /**\n * 删除多条数据recordIndexs\n */\n deleteRecordsForSorted(recordIndexs: number[]) {\n if (Array.isArray(this.records)) {\n const recordIndexsMaxToMin = recordIndexs.sort((a, b) => b - a);\n for (let index = 0; index < recordIndexsMaxToMin.length; index++) {\n const recordIndex = recordIndexsMaxToMin[index];\n if (recordIndex >= this._sourceLength || recordIndex < 0) {\n continue;\n }\n const rawIndex = this.currentIndexedData[recordIndex] as number;\n this.records.splice(rawIndex, 1);\n this._sourceLength -= 1;\n }\n this.sortedIndexMap.clear();\n if (!this.userPagination) {\n this.pagination.perPageCount = this._sourceLength;\n this.pagination.totalCount = this._sourceLength;\n }\n this.beforeChangedRecordsMap.clear();\n }\n }\n\n /**\n * 修改多条数据recordIndexs\n */\n updateRecords(records: any[], recordIndexs: (number | number[])[], syncToOriginalRecords: boolean = false) {\n if (!syncToOriginalRecords) {\n const realDeletedRecordIndexs = [];\n for (let index = 0; index < recordIndexs.length; index++) {\n const recordIndex = recordIndexs[index];\n if (Array.isArray(recordIndex)) {\n this.beforeChangedRecordsMap.delete(recordIndex.toString());\n realDeletedRecordIndexs.push(recordIndex);\n recordIndex.slice(0, -1).reduce((acc, key) => {\n if (acc[key] === undefined) {\n acc[key] = {};\n }\n return acc[key].children;\n }, this.records)[recordIndex[recordIndex.length - 1]] = records[index];\n } else {\n if (recordIndex >= this._sourceLength || recordIndex < 0) {\n continue;\n }\n this.beforeChangedRecordsMap.delete(recordIndex.toString());\n realDeletedRecordIndexs.push(recordIndex);\n for (let i = 0; i < this.fieldAggregators.length; i++) {\n this.fieldAggregators[i].updateRecord(this.records[recordIndex], records[index]);\n }\n this.records[recordIndex] = records[index];\n }\n }\n if (this.userPagination) {\n this.updatePagerData();\n }\n return realDeletedRecordIndexs;\n }\n\n const rawRecords = this._getRawRecordsArray();\n if (!rawRecords || !Array.isArray(this.records)) {\n return [];\n }\n\n const realUpdatedIndexs: (number | number[])[] = [];\n for (let index = 0; index < recordIndexs.length; index++) {\n const recordIndex = recordIndexs[index];\n if (Array.isArray(recordIndex)) {\n this.beforeChangedRecordsMap.delete(recordIndex.toString());\n realUpdatedIndexs.push(recordIndex);\n recordIndex.slice(0, -1).reduce((acc, key) => {\n if (acc[key] === undefined) {\n acc[key] = {};\n }\n return acc[key].children;\n }, rawRecords)[recordIndex[recordIndex.length - 1]] = records[index];\n } else {\n if (recordIndex >= this.records.length || recordIndex < 0) {\n continue;\n }\n const oldRecord = this.records[recordIndex];\n const rawIndex = rawRecords.indexOf(oldRecord);\n if (rawIndex >= 0) {\n rawRecords[rawIndex] = records[index];\n }\n realUpdatedIndexs.push(recordIndex);\n }\n }\n this.beforeChangedRecordsMap.clear();\n this.sortedIndexMap.clear();\n this.updateFilterRules(this.dataConfig?.filterRules);\n return realUpdatedIndexs;\n }\n\n /**\n * 删除多条数据recordIndexs\n */\n updateRecordsForSorted(records: any[], recordIndexs: number[]) {\n const realDeletedRecordIndexs: number[] = [];\n for (let index = 0; index < recordIndexs.length; index++) {\n const recordIndex = recordIndexs[index];\n if (recordIndex >= this._sourceLength || recordIndex < 0) {\n continue;\n }\n const rawIndex = this.currentIndexedData[recordIndex];\n if (typeof rawIndex !== 'number') {\n return;\n }\n this.beforeChangedRecordsMap.delete(rawIndex.toString());\n realDeletedRecordIndexs.push(recordIndex);\n this.records[rawIndex] = records[index];\n }\n this.sortedIndexMap.clear();\n }\n\n sort(states: Array<SortState>): void {\n // Convert states into an array and filter out unnecessary ones\n states = (Array.isArray(states) ? states : [states]).filter(state => {\n const column = this.columns.find(obj => obj.field === state.field);\n return column?.sort !== false && state.order !== 'normal';\n });\n\n // Save the sorting states\n this.lastSortStates = states;\n\n // Get an array of sorting objects for each state\n let filedMapArray: Array<ISortedMapItem> = states.map(\n state => this.sortedIndexMap.get(state?.field) || { asc: [], desc: [], normal: [] }\n );\n\n let orderedData: number[] | null = null;\n\n // If there is already sorted data in the caches, take it\n if (filedMapArray.length > 0) {\n orderedData = states.reduce((data, state, index) => {\n const currentData = (filedMapArray[index] as any)?.[state.order];\n return currentData && currentData.length > 0 ? currentData : data;\n }, null);\n\n if (orderedData && orderedData.length > 0) {\n this.currentIndexedData = orderedData;\n this.updatePagerData();\n this.fireListeners(EVENT_TYPE.CHANGE_ORDER, null);\n return;\n }\n }\n\n // If there is no cache, we start sorting\n const sortedIndexArray: number[] = Array.from({ length: this._sourceLength }, (_, i) => i);\n\n // Perform sorting on each state\n sortedIndexArray.sort((indexA, indexB) => {\n // 获取两个索引对应的记录\n const recordA = this.getOriginalRecord(indexA);\n const recordB = this.getOriginalRecord(indexB);\n\n // 检查记录是否为空(null、undefined 或空对象)\n const isEmptyA =\n recordA === null || recordA === undefined || (typeof recordA === 'object' && Object.keys(recordA).length === 0);\n const isEmptyB =\n recordB === null || recordB === undefined || (typeof recordB === 'object' && Object.keys(recordB).length === 0);\n\n return states.reduce((result: number, state: SortState) => {\n if (result !== 0) {\n return result;\n }\n\n // 如果有排序状态(非normal状态),则空数据排在后面\n if (state.order === 'asc' || state.order === 'desc') {\n // 如果一个是空记录而另一个不是,则空记录排在后面\n if (isEmptyA && !isEmptyB) {\n return 1; // A是空的,B不是,A排后面\n }\n if (!isEmptyA && isEmptyB) {\n return -1; // A不是空的,B是,B排后面\n }\n // 如果两者都是空记录,保持原有顺序\n if (isEmptyA && isEmptyB) {\n return indexA - indexB; // 保持原有顺序\n }\n } else {\n // normal状态,保持原始顺序\n if (isEmptyA || isEmptyB) {\n return indexA - indexB;\n }\n }\n\n const orderFn =\n state.orderFn ||\n (state.order !== 'desc'\n ? (v1: any, v2: any): -1 | 0 | 1 => (v1 === v2 ? 0 : v1 > v2 ? 1 : -1)\n : (v1: any, v2: any): -1 | 0 | 1 => (v1 === v2 ? 0 : v1 < v2 ? 1 : -1));\n\n return orderFn(\n this.getOriginalField(indexA, state.field),\n this.getOriginalField(indexB, state.field),\n state.order\n );\n }, 0);\n });\n\n this.currentIndexedData = sortedIndexArray;\n\n // Process the hierarchy, if any\n if (this.hierarchyExpandLevel && this.rowHierarchyType === 'tree') {\n let nodeLength = sortedIndexArray.length;\n for (let i = 0; i < nodeLength; i++) {\n const record = this.getOriginalRecord(sortedIndexArray[i]);\n const subNodeLength = this.pushChildrenNode(\n sortedIndexArray[i],\n record.hierarchyState,\n this.getOriginalRecord(sortedIndexArray[i])\n );\n nodeLength += subNodeLength;\n i += subNodeLength;\n }\n }\n\n // If there were no caches, initialize them\n if (!filedMapArray.length) {\n filedMapArray = states.map(\n (): ISortedMapItem => ({\n asc: [] as (number | number[])[],\n desc: [] as (number | number[])[],\n normal: [] as (number | number[])[]\n })\n );\n for (let index = 0; index < states.length; index++) {\n this.sortedIndexMap.set(states[index].field, filedMapArray[index]);\n }\n }\n\n // Save the sorted indexes for each state to the cache\n states.forEach((state, index) => {\n const mapItem = filedMapArray[index] as ISortedMapItem;\n (mapItem as any)[state.order] = sortedIndexArray.slice(); // Save a copy of the array\n });\n\n this.updatePagerData();\n this.fireListeners(EVENT_TYPE.CHANGE_ORDER, null);\n }\n\n setSortedIndexMap(field: FieldDef, filedMap: ISortedMapItem) {\n this.sortedIndexMap.set(field, filedMap);\n }\n\n private clearFilteredChildren(record: any) {\n record.filteredChildren = undefined;\n for (let i = 0; i < (record.children?.length ?? 0); i++) {\n this.clearFilteredChildren(record.children[i]);\n }\n }\n private filterRecord(record: any) {\n let isReserved = true;\n for (let i = 0; i < this.dataConfig.filterRules?.length; i++) {\n const filterRule = this.dataConfig?.filterRules[i];\n if (filterRule.filterKey) {\n const filterValue = record[filterRule.filterKey];\n if (filterRule.filteredValues.indexOf(filterValue) === -1) {\n isReserved = false;\n break;\n }\n } else if (!filterRule.filterFunc?.(record)) {\n isReserved = false;\n break;\n }\n }\n return isReserved;\n }\n\n updateFilterRulesForSorted(filterRules?: FilterRules): void {\n this.lastFilterRules = this.dataConfig.filterRules;\n this.dataConfig.filterRules = filterRules;\n this._source = this.processRecords(this.dataSourceObj?.records ?? this.dataSourceObj);\n this._sourceLength = this._source?.length || 0;\n this.sortedIndexMap.clear();\n this.currentIndexedData = Array.from({ length: this._sourceLength }, (_, i) => i);\n if (this.rowHierarchyType === 'tree') {\n this.initTreeHierarchyState();\n }\n if (!this.userPagination) {\n this.pagination.perPageCount = this._sourceLength;\n this.pagination.totalCount = this._sourceLength;\n }\n }\n\n updateFilterRules(filterRules?: FilterRules, onFilterRecordsEnd?: (records: any[]) => any[]): void {\n this.lastFilterRules = this.dataConfig.filterRules;\n this.dataConfig.filterRules = filterRules;\n this._source = this.processRecords(this.dataSourceObj?.records ?? this.dataSourceObj);\n // 如果配置了筛选回调, 则用户可自定义处理筛选后的数据\n if (onFilterRecordsEnd) {\n onFilterRecordsEnd(this._source as any[]);\n }\n this._sourceLength = this._source?.length || 0;\n // 初始化currentIndexedData 正常未排序。设置其状态\n this.currentIndexedData = Array.from({ length: this._sourceLength }, (_, i) => i);\n if (this.userPagination) {\n // 如果用户配置了分页\n this.updatePagerData();\n } else {\n this.pagination.perPageCount = this._sourceLength;\n this.pagination.totalCount = this._sourceLength;\n if (this.rowHierarchyType === 'tree') {\n this.initTreeHierarchyState();\n }\n this.updatePagerData();\n }\n }\n /**\n * 当节点折叠或者展开时 将排序缓存清空(非当前排序规则的缓存)\n */\n clearSortedIndexMap() {\n if (this.lastSortStates && this.lastSortStates.length > 0) {\n this.sortedIndexMap.forEach((sortMap, key) => {\n const isFieldInRules = this.lastSortStates.some(state => state.field === key);\n if (!isFieldInRules) {\n this.sortedIndexMap.delete(key);\n } else {\n this.lastSortStates.forEach(state => {\n if (state.order === 'asc') {\n sortMap.desc = [];\n sortMap.normal = [];\n } else if (state.order === 'desc') {\n sortMap.asc = [];\n sortMap.normal = [];\n } else {\n sortMap.asc = [];\n sortMap.desc = [];\n }\n });\n }\n });\n }\n }\n get sourceLength(): number {\n return this._sourceLength;\n }\n set sourceLength(sourceLen: number) {\n if (this._sourceLength === sourceLen) {\n return;\n }\n this._sourceLength = sourceLen;\n this.fireListeners(EVENT_TYPE.SOURCE_LENGTH_UPDATE, this._sourceLength);\n }\n get length(): number {\n return this.currentPagerIndexedData.length;\n }\n get dataSource(): DataSource {\n return this;\n }\n get currentPagerIndexedData(): (number | number[])[] {\n if (this._currentPagerIndexedData.length > 0) {\n return this._currentPagerIndexedData;\n }\n return []; //this.currentIndexedData || [];\n }\n release(): void {\n super.release?.();\n this.lastFilterRules = null;\n this.clearSortedMap();\n this.clearCurrentIndexedData();\n this.currentPagerIndexedData.length = 0;\n }\n clearSortedMap() {\n this.currentIndexedData && (this.currentIndexedData.length = 0);\n this.currentIndexedData = null;\n this.sortedIndexMap.forEach(item => {\n item.asc && (item.asc.length = 0);\n item.desc && (item.desc.length = 0);\n });\n this.sortedIndexMap.clear();\n }\n clearCurrentIndexedData(): void {\n this.currentIndexedData = null;\n this.currentPagerIndexedData.length = 0;\n }\n protected getOriginalRecord(dataIndex: number | number[]): MaybePromiseOrUndefined {\n // if (this.dataConfig?.filterRules) {\n // return (this.records as Array<any>)[dataIndex as number];\n // }\n let data;\n if (!this.dataSourceObj.records) {\n data = this._get(dataIndex);\n } else {\n if (Array.isArray(dataIndex)) {\n data = getValueFromDeepArray(this.records, dataIndex);\n } else {\n data = this.records[dataIndex];\n }\n }\n return getValue(data, (val: MaybePromiseOrUndefined) => {\n this.recordPromiseCallBack(dataIndex, val);\n });\n }\n protected getRawRecord(dataIndex: number | number[]): MaybePromiseOrUndefined {\n if (this.beforeChangedRecordsMap?.has(dataIndex.toString())) {\n return this.beforeChangedRecordsMap?.get(dataIndex.toString());\n }\n let data;\n if (!this.dataSourceObj.records) {\n data = this._get(dataIndex);\n } else {\n if (Array.isArray(dataIndex)) {\n data = getValueFromDeepArray(this.records, dataIndex);\n } else {\n data = this.records[dataIndex];\n }\n }\n return getValue(data, (val: MaybePromiseOrUndefined) => {\n this.recordPromiseCallBack(dataIndex, val);\n });\n }\n protected getOriginalField(\n index: number | number[],\n field: FieldDef | FieldFormat | number,\n col?: number,\n row?: number,\n table?: BaseTableAPI\n ): FieldData {\n if (field === null) {\n return undefined;\n }\n const record = this.getOriginalRecord(index);\n // return getField(record, field);\n return getField(record, field, col, row, table, (val: any) => {\n this.fieldPromiseCallBack(index, field, val);\n });\n }\n protected getRawFieldData(\n index: number,\n field: FieldDef | FieldFormat | number,\n col?: number,\n row?: number,\n table?: BaseTableAPI\n ): FieldData {\n if (field === null) {\n return undefined;\n }\n const record = this.getRawRecord(index);\n // return getField(record, field);\n return getField(record, field, col, row, table, (val: any) => {\n this.fieldPromiseCallBack(index, field, val);\n });\n }\n protected hasOriginalField(index: number | number[], field: FieldDef): boolean {\n if (field === null) {\n return false;\n }\n if (typeof field === 'function') {\n return true;\n }\n const record = this.getOriginalRecord(index);\n return Boolean(record && (field as any) in (record as any));\n }\n\n protected fieldPromiseCallBack(\n _index: number | number[],\n _field: FieldDef | FieldFormat | number,\n _value: MaybePromiseOrUndefined\n ): void {\n //\n }\n protected recordPromiseCallBack(_index: number | number[], _record: MaybePromiseOrUndefined): void {\n //\n }\n /** 静态变量 代表数据为空 */\n static EMPTY = new DataSource({\n get() {\n /* noop */\n },\n length: 0\n });\n /**\n * 判断原位置sourceIndex处的数据是否可以移动到targetIndex目标位置处\n * @param sourceIndex 被移动数据在body中的index\n * @param targetIndex 数据要放置在body中的index\n * @returns 根据参数判断是否可以交换位置\n */\n canChangeOrder(sourceIndex: number, targetIndex: number): boolean {\n if ((this, this.dataSourceObj?.canChangeOrder)) {\n return this.dataSourceObj.canChangeOrder(sourceIndex, targetIndex);\n }\n\n if (this.hasHierarchyStateExpand) {\n let sourceIndexs = this.currentPagerIndexedData[sourceIndex] as number[];\n let targetIndexs = this.currentPagerIndexedData[targetIndex] as number[];\n if (Array.isArray(sourceIndexs)) {\n sourceIndexs = [...sourceIndexs];\n } else {\n sourceIndexs = [sourceIndexs];\n }\n\n if (Array.isArray(targetIndexs)) {\n targetIndexs = [...targetIndexs];\n } else {\n targetIndexs = [targetIndexs];\n }\n // //实现可以跨父级拖拽节点位置,约束条件只需要禁止父级拖到自己的字节节点即可\n // if (true) {\n // if (sourceIndexs.every((item, index) => targetIndexs[index] === item)) {\n // return false;\n // }\n // return true;\n // }\n if (targetIndex > sourceIndex) {\n if (targetIndexs.length > sourceIndexs.length) {\n let targetNextIndexs = this.currentPagerIndexedData[targetIndex + 1] as number[];\n if (Array.isArray(targetNextIndexs)) {\n targetNextIndexs = [...targetNextIndexs];\n } else {\n targetNextIndexs = [targetNextIndexs];\n }\n\n if (targetNextIndexs.length < targetIndexs.length) {\n targetIndexs.splice(targetIndexs.length - 1, 1);\n }\n }\n }\n if (sourceIndexs.length === targetIndexs.length) {\n for (let i = 0; i <= sourceIndexs.length - 2; i++) {\n if (sourceIndexs[i] !== targetIndexs[i]) {\n return false;\n }\n }\n return true;\n }\n\n return false;\n }\n return true;\n }\n // 拖拽调整数据位置 目前对排序过的数据不过处理,因为自动排序和手动排序融合问题目前没有找到好的解决方式\n changeOrder(sourceIndex: number, targetIndex: number) {\n if ((this, this.dataSourceObj?.changeOrder)) {\n this.dataSourceObj.changeOrder(sourceIndex, targetIndex);\n return;\n }\n if (this.lastSortStates?.some(state => state.order === 'asc' || state.order === 'desc')) {\n // const sourceIds = this._currentPagerIndexedData.splice(sourceIndex, 1);\n // sourceIds.unshift(targetIndex, 0);\n // Array.prototype.splice.apply(this._currentPagerIndexedData, sourceIds);\n return;\n } else if (this.canChangeOrder(sourceIndex, targetIndex)) {\n // if (this.treeDataHierarchyState?.size > 0) {\n if (this.hasHierarchyStateExpand) {\n let sourceIndexs = this.currentPagerIndexedData[sourceIndex];\n let targetIndexs = this.currentPagerIndexedData[targetIndex];\n if (Array.isArray(sourceIndexs)) {\n sourceIndexs = [...sourceIndexs];\n } else {\n sourceIndexs = [sourceIndexs];\n }\n\n if (Array.isArray(targetIndexs)) {\n targetIndexs = [...targetIndexs];\n } else {\n targetIndexs = [targetIndexs];\n }\n\n let sourceI;\n let targetI;\n if (sourceIndexs.length > 1 || targetIndexs.length > 1) {\n if (targetIndex > sourceIndex) {\n if (targetIndexs.length > sourceIndexs.length) {\n let targetNextIndexs = this.currentPagerIndexedData[targetIndex + 1] as number[];\n if (Array.isArray(targetNextIndexs)) {\n targetNextIndexs = [...targetNextIndexs];\n } else {\n targetNextIndexs = [targetNextIndexs];\n }\n\n if (targetNextIndexs.length < targetIndexs.length) {\n targetIndexs.splice(targetIndexs.length - 1, 1);\n }\n }\n }\n sourceI = (<number[]>sourceIndexs).splice(sourceIndexs.length - 1, 1)[0];\n targetI = (<number[]>targetIndexs).splice(targetIndexs.length - 1, 1)[0];\n if (sourceIndexs.length >= 1) {\n const parent = this.getOriginalRecord(sourceIndexs);\n if (parent) {\n const sourceIds = parent.filteredChildren\n ? parent.filteredChildren.splice(sourceI, 1)\n : parent.children.splice(sourceI, 1);\n sourceIds.unshift(targetI, 0);\n Array.prototype.splice.apply(parent.filteredChildren ?? parent.children, sourceIds);\n }\n } else {\n const sourceIds = this.records.splice(sourceI, 1);\n // 将records插入到目标地址targetIndex处\n // 把records变成一个适合splice的数组(包含splice前2个参数的数组) 以通过splice来插入到source数组\n sourceIds.unshift(targetI, 0);\n Array.prototype.splice.apply(this.records, sourceIds);\n }\n } else {\n this.exchangeRecordData(sourceIndex, targetIndex);\n }\n this.restoreTreeHierarchyState();\n this.updatePagerData();\n } else {\n this.exchangeRecordData(sourceIndex, targetIndex);\n }\n }\n }\n\n /**\n * @description: 交换源数据\n * @param {number} sourceIndex 源索引\n * @param {number} targetIndex 目标索引\n */\n exchangeRecordData(sourceIndex: number, targetIndex: number) {\n const sourceI = this.getRecordIndexPaths(sourceIndex) as number;\n const targetI = this.getRecordIndexPaths(targetIndex) as number;\n // 从source的二维数组中取出需要操作的records\n const records = this.records.splice(sourceI, 1);\n // 将records插入到目标地址targetIndex处\n // 把records变成一个适合splice的数组(包含splice前2个参数的数组) 以通过splice来插入到source数组\n records.unshift(targetI, 0);\n Array.prototype.splice.apply(this.records, records);\n }\n\n restoreTreeHierarchyState() {\n if (this.hierarchyExpandLevel) {\n for (let i = 0; i < this._sourceLength; i++) {\n //expandLevel为有效值即需要按tree分析展示数据\n const nodeData = this.getOriginalRecord(i);\n if (!nodeData) {\n continue;\n }\n const children = (nodeData as any).filteredChildren ?? (nodeData as any).children;\n children && !nodeData.hierarchyState && (nodeData.hierarchyState = HierarchyState.collapse);\n }\n\n this.currentIndexedData = Array.from({ length: this._sourceLength }, (_, i) => i);\n let nodeLength = this._sourceLength;\n for (let i = 0; i < nodeLength; i++) {\n const indexKey = this.currentIndexedData[i];\n const nodeData = this.getOriginalRecord(indexKey);\n if (!nodeData) {\n continue;\n }\n const children = (nodeData as any).filteredChildren ?? (nodeData as any).children;\n if (children?.length > 0 && nodeData.hierarchyState === HierarchyState.expand) {\n this.hasHierarchyStateExpand = true;\n const childrenLength = this.restoreChildrenNodeHierarchy(indexKey, nodeData);\n i += childrenLength;\n nodeLength += childrenLength;\n } else if ((nodeData as any).children === true) {\n !nodeData.hierarchyState && (nodeData.hierarchyState = HierarchyState.collapse);\n }\n }\n }\n }\n restoreChildrenNodeHierarchy(\n indexKey: number | number[],\n\n nodeData: any\n ): number {\n let childTotalLength = 0;\n const children = (nodeData as any).filteredChildren ?? (nodeData as any).children;\n const nodeLength = children?.length ?? 0;\n for (let j = 0; j < nodeLength; j++) {\n if (nodeData.hierarchyState === HierarchyState.expand) {\n childTotalLength += 1;\n }\n const childNodeData = children[j];\n const childIndexKey = Array.isArray(indexKey) ? indexKey.concat(j) : [indexKey, j];\n if (nodeData.hierarchyState === HierarchyState.expand) {\n this.currentIndexedData.splice(\n this.currentIndexedData.indexOf(indexKey) + childTotalLength,\n // childTotalLength,\n 0,\n childIndexKey\n );\n }\n childTotalLength += this.restoreChildrenNodeHierarchy(\n childIndexKey,\n\n childNodeData\n );\n }\n return childTotalLength;\n }\n\n private _setNodeStateRecursive(node: any, targetState: HierarchyState): void {\n if (!node) {\n return;\n }\n const children = (node as any).filteredChildren ?? (node as any).children;\n // 仅为具有子节点(即可以展开/折叠)的节点设置状态\n if (children && (Array.isArray(children) ? children.length > 0 : children === true)) {\n (node as any).hierarchyState = targetState;\n }\n\n // 如果子节点作为数组存在,则递归应用于子节点\n if (children && Array.isArray(children)) {\n for (const child of children) {\n this._setNodeStateRecursive(child, targetState);\n }\n }\n }\n\n expandAllNodes(): void {\n if (Array.isArray(this._source)) {\n for (const rootNode of this._source) {\n this._setNodeStateRecursive(rootNode, HierarchyState.expand);\n }\n this.hasHierarchyStateExpand = true;\n this.clearSortedIndexMap();\n this.restoreTreeHierarchyState();\n\n if (this.lastSortStates && this.lastSortStates.length > 0) {\n this.sort(this.lastSortStates); // sort 方法内部会调用 updatePagerData\n } else {\n this.updatePagerData();\n }\n } else {\n console.warn('DataSource._source is not an array, cannot expand all nodes.');\n }\n }\n\n collapseAllNodes(): void {\n if (Array.isArray(this._source)) {\n for (const rootNode of this._source) {\n this._setNodeStateRecursive(rootNode, HierarchyState.collapse);\n }\n // hasHierarchyStateExpand 将由 restoreTreeHierarchyState 正确更新\n this.clearSortedIndexMap();\n this.restoreTreeHierarchyState();\n\n if (this.lastSortStates && this.lastSortStates.length > 0) {\n this.sort(this.lastSortStates); // sort 方法内部会调用 updatePagerData\n } else {\n this.updatePagerData();\n }\n } else {\n console.warn('DataSource._source is not an array, cannot collapse all nodes.');\n }\n }\n}\n\n/**\n * 从数组array中获取index的值\n * 如:给index=[0,0] 则返回 array[0].children[0];如果给index=[2] 则返回array[2]; 如果给index=[3,0,4] 则返回array[3].children[0].children[4]\n * @param array\n * @param index\n * @returns\n */\nexport function getValueFromDeepArray(array: any, index: number[]) {\n let result = array;\n for (let i = 0; i < index.length; i++) {\n const currentIdx = index[i];\n if (result[currentIdx]) {\n result = result[currentIdx];\n } else {\n return undefined;\n }\n const children = result.filteredChildren ?? result?.children;\n if (children && i + 1 < index.length) {\n result = children;\n }\n }\n return result;\n}\n\nexport function sortRecordIndexs(recordIndexs: (number | number[])[], sort: -1 | 1) {\n const result = recordIndexs.sort((a: number | number[], b: number | number[]) => {\n if (isNumber(a)) {\n a = [a];\n }\n if (isNumber(b)) {\n b = [b];\n }\n\n const length = Math.max(a.length, b.length);\n for (let i = 0; i < length; i++) {\n const aa = a[i] ?? -1;\n const bb = b[i] ?? -1;\n if (aa !== bb) {\n return sort === 1 ? aa - bb : bb - aa;\n }\n }\n return 0;\n });\n return result;\n}\n"]}
|