k-vtable 1.0.34 → 1.0.35

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.
Files changed (189) hide show
  1. package/cjs/ListTable.d.ts +1 -0
  2. package/cjs/ListTable.js +184 -25
  3. package/cjs/ListTable.js.map +1 -1
  4. package/cjs/PivotChart.js +3 -2
  5. package/cjs/PivotChart.js.map +1 -1
  6. package/cjs/PivotTable.d.ts +1 -0
  7. package/cjs/PivotTable.js +95 -15
  8. package/cjs/PivotTable.js.map +1 -1
  9. package/cjs/core/BaseTable.d.ts +14 -0
  10. package/cjs/core/BaseTable.js +149 -41
  11. package/cjs/core/BaseTable.js.map +1 -1
  12. package/cjs/core/TABLE_EVENT_TYPE.d.ts +2 -0
  13. package/cjs/core/TABLE_EVENT_TYPE.js +2 -0
  14. package/cjs/core/TABLE_EVENT_TYPE.js.map +1 -1
  15. package/cjs/core/record-helper.js +83 -13
  16. package/cjs/core/record-helper.js.map +1 -1
  17. package/cjs/core/tableHelper.js +5 -3
  18. package/cjs/core/tableHelper.js.map +1 -1
  19. package/cjs/core/utils/get-cell-position.js +23 -12
  20. package/cjs/core/utils/get-cell-position.js.map +1 -1
  21. package/cjs/data/DataSource.js +3 -2
  22. package/cjs/data/DataSource.js.map +1 -1
  23. package/cjs/dataset/dataset.js +5 -1
  24. package/cjs/dataset/dataset.js.map +1 -1
  25. package/cjs/edit/edit-manager.js +24 -16
  26. package/cjs/edit/edit-manager.js.map +1 -1
  27. package/cjs/event/EventTarget.js +3 -1
  28. package/cjs/event/EventTarget.js.map +1 -1
  29. package/cjs/event/helper.js +1 -1
  30. package/cjs/event/listener/container-dom.js +11 -6
  31. package/cjs/event/listener/container-dom.js.map +1 -1
  32. package/cjs/event/listener/scroll-bar.js +77 -6
  33. package/cjs/event/listener/scroll-bar.js.map +1 -1
  34. package/cjs/event/listener/table-group.js +53 -23
  35. package/cjs/event/listener/table-group.js.map +1 -1
  36. package/cjs/event/media-click.js +1 -1
  37. package/cjs/event/scroll.js +35 -12
  38. package/cjs/event/scroll.js.map +1 -1
  39. package/cjs/event/sparkline-event.js +1 -1
  40. package/cjs/event/util.d.ts +2 -0
  41. package/cjs/event/util.js +29 -4
  42. package/cjs/event/util.js.map +1 -1
  43. package/cjs/header-helper/header-helper.js +2 -2
  44. package/cjs/header-helper/header-helper.js.map +1 -1
  45. package/cjs/header-helper/style.js +2 -1
  46. package/cjs/index.d.ts +3 -3
  47. package/cjs/index.js +51 -12
  48. package/cjs/index.js.map +1 -1
  49. package/cjs/layout/cell-range/simple-cell-range.js +14 -5
  50. package/cjs/layout/cell-range/simple-cell-range.js.map +1 -1
  51. package/cjs/plugins/index.js +1 -1
  52. package/cjs/plugins/interface.js +1 -1
  53. package/cjs/plugins/invert-highlight.js +1 -1
  54. package/cjs/plugins/list-tree-stick-cell.js +1 -1
  55. package/cjs/plugins/plugin-manager.js +1 -1
  56. package/cjs/scenegraph/component/table-component.d.ts +6 -1
  57. package/cjs/scenegraph/component/table-component.js +143 -17
  58. package/cjs/scenegraph/component/table-component.js.map +1 -1
  59. package/cjs/scenegraph/component/util.js +5 -2
  60. package/cjs/scenegraph/component/util.js.map +1 -1
  61. package/cjs/scenegraph/graphic/contributions/group-contribution-render.js +29 -10
  62. package/cjs/scenegraph/graphic/contributions/group-contribution-render.js.map +1 -1
  63. package/cjs/scenegraph/group-creater/cell-helper.js +7 -4
  64. package/cjs/scenegraph/group-creater/cell-helper.js.map +1 -1
  65. package/cjs/scenegraph/group-creater/init-scenegraph.js +37 -7
  66. package/cjs/scenegraph/group-creater/init-scenegraph.js.map +1 -1
  67. package/cjs/scenegraph/group-creater/progress/proxy.js +4 -2
  68. package/cjs/scenegraph/group-creater/progress/proxy.js.map +1 -1
  69. package/cjs/scenegraph/scenegraph.d.ts +13 -0
  70. package/cjs/scenegraph/scenegraph.js +194 -23
  71. package/cjs/scenegraph/scenegraph.js.map +1 -1
  72. package/cjs/scenegraph/select/create-select-border.js +9 -10
  73. package/cjs/scenegraph/select/create-select-border.js.map +1 -1
  74. package/cjs/scenegraph/select/delete-select-border.js.map +1 -1
  75. package/cjs/scenegraph/select/move-select-border.js.map +1 -1
  76. package/cjs/scenegraph/select/update-custom-select-border.js +9 -9
  77. package/cjs/scenegraph/select/update-custom-select-border.js.map +1 -1
  78. package/cjs/scenegraph/select/update-select-border.js +27 -122
  79. package/cjs/scenegraph/select/update-select-border.js.map +1 -1
  80. package/cjs/scenegraph/select/update-select-style.js.map +1 -1
  81. package/cjs/state/select/update-position.js +2 -1
  82. package/cjs/state/select/update-position.js.map +1 -1
  83. package/cjs/state/state.d.ts +8 -1
  84. package/cjs/state/state.js +82 -40
  85. package/cjs/state/state.js.map +1 -1
  86. package/cjs/ts-types/base-table.d.ts +15 -0
  87. package/cjs/ts-types/base-table.js.map +1 -1
  88. package/cjs/ts-types/dataset/aggregation.js +94 -39
  89. package/cjs/ts-types/dataset/aggregation.js.map +1 -1
  90. package/cjs/ts-types/events.d.ts +16 -0
  91. package/cjs/ts-types/events.js.map +1 -1
  92. package/cjs/ts-types/table-engine.js.map +1 -1
  93. package/cjs/vrender.js.map +1 -1
  94. package/dist/vtable.js +2381 -733
  95. package/dist/vtable.min.js +1 -15
  96. package/es/ListTable.d.ts +1 -0
  97. package/es/ListTable.js +178 -25
  98. package/es/ListTable.js.map +1 -1
  99. package/es/PivotChart.js +2 -2
  100. package/es/PivotChart.js.map +1 -1
  101. package/es/PivotTable.d.ts +1 -0
  102. package/es/PivotTable.js +93 -15
  103. package/es/PivotTable.js.map +1 -1
  104. package/es/core/BaseTable.d.ts +14 -0
  105. package/es/core/BaseTable.js +148 -40
  106. package/es/core/BaseTable.js.map +1 -1
  107. package/es/core/TABLE_EVENT_TYPE.d.ts +2 -0
  108. package/es/core/TABLE_EVENT_TYPE.js +2 -0
  109. package/es/core/TABLE_EVENT_TYPE.js.map +1 -1
  110. package/es/core/record-helper.js +83 -12
  111. package/es/core/record-helper.js.map +1 -1
  112. package/es/core/tableHelper.js +5 -3
  113. package/es/core/tableHelper.js.map +1 -1
  114. package/es/core/utils/get-cell-position.js +23 -12
  115. package/es/core/utils/get-cell-position.js.map +1 -1
  116. package/es/data/DataSource.js +3 -2
  117. package/es/data/DataSource.js.map +1 -1
  118. package/es/dataset/dataset.js +5 -1
  119. package/es/dataset/dataset.js.map +1 -1
  120. package/es/edit/edit-manager.js +22 -16
  121. package/es/edit/edit-manager.js.map +1 -1
  122. package/es/event/EventTarget.js +3 -1
  123. package/es/event/EventTarget.js.map +1 -1
  124. package/es/event/helper.js +1 -1
  125. package/es/event/listener/container-dom.js +10 -5
  126. package/es/event/listener/container-dom.js.map +1 -1
  127. package/es/event/listener/scroll-bar.js +75 -6
  128. package/es/event/listener/scroll-bar.js.map +1 -1
  129. package/es/event/listener/table-group.js +53 -24
  130. package/es/event/listener/table-group.js.map +1 -1
  131. package/es/event/media-click.js +1 -1
  132. package/es/event/scroll.js +35 -12
  133. package/es/event/scroll.js.map +1 -1
  134. package/es/event/sparkline-event.js +1 -1
  135. package/es/event/util.d.ts +2 -0
  136. package/es/event/util.js +25 -1
  137. package/es/event/util.js.map +1 -1
  138. package/es/header-helper/header-helper.js +2 -2
  139. package/es/header-helper/header-helper.js.map +1 -1
  140. package/es/header-helper/style.js +2 -1
  141. package/es/index.d.ts +3 -3
  142. package/es/index.js +5 -3
  143. package/es/index.js.map +1 -1
  144. package/es/layout/cell-range/simple-cell-range.js +14 -5
  145. package/es/layout/cell-range/simple-cell-range.js.map +1 -1
  146. package/es/plugins/index.js +1 -1
  147. package/es/plugins/interface.js +1 -1
  148. package/es/plugins/invert-highlight.js +1 -1
  149. package/es/plugins/list-tree-stick-cell.js +1 -1
  150. package/es/plugins/plugin-manager.js +1 -1
  151. package/es/scenegraph/component/table-component.d.ts +6 -1
  152. package/es/scenegraph/component/table-component.js +141 -17
  153. package/es/scenegraph/component/table-component.js.map +1 -1
  154. package/es/scenegraph/component/util.js +5 -2
  155. package/es/scenegraph/component/util.js.map +1 -1
  156. package/es/scenegraph/graphic/contributions/group-contribution-render.js +29 -10
  157. package/es/scenegraph/graphic/contributions/group-contribution-render.js.map +1 -1
  158. package/es/scenegraph/group-creater/cell-helper.js +7 -4
  159. package/es/scenegraph/group-creater/cell-helper.js.map +1 -1
  160. package/es/scenegraph/group-creater/init-scenegraph.js +37 -7
  161. package/es/scenegraph/group-creater/init-scenegraph.js.map +1 -1
  162. package/es/scenegraph/group-creater/progress/proxy.js +4 -2
  163. package/es/scenegraph/group-creater/progress/proxy.js.map +1 -1
  164. package/es/scenegraph/scenegraph.d.ts +13 -0
  165. package/es/scenegraph/scenegraph.js +185 -18
  166. package/es/scenegraph/scenegraph.js.map +1 -1
  167. package/es/scenegraph/select/create-select-border.js +9 -10
  168. package/es/scenegraph/select/create-select-border.js.map +1 -1
  169. package/es/scenegraph/select/delete-select-border.js.map +1 -1
  170. package/es/scenegraph/select/move-select-border.js.map +1 -1
  171. package/es/scenegraph/select/update-custom-select-border.js +9 -9
  172. package/es/scenegraph/select/update-custom-select-border.js.map +1 -1
  173. package/es/scenegraph/select/update-select-border.js +25 -118
  174. package/es/scenegraph/select/update-select-border.js.map +1 -1
  175. package/es/scenegraph/select/update-select-style.js.map +1 -1
  176. package/es/state/select/update-position.js +3 -0
  177. package/es/state/select/update-position.js.map +1 -1
  178. package/es/state/state.d.ts +8 -1
  179. package/es/state/state.js +81 -40
  180. package/es/state/state.js.map +1 -1
  181. package/es/ts-types/base-table.d.ts +15 -0
  182. package/es/ts-types/base-table.js.map +1 -1
  183. package/es/ts-types/dataset/aggregation.js +68 -38
  184. package/es/ts-types/dataset/aggregation.js.map +1 -1
  185. package/es/ts-types/events.d.ts +16 -0
  186. package/es/ts-types/events.js.map +1 -1
  187. package/es/ts-types/table-engine.js.map +1 -1
  188. package/es/vrender.js.map +1 -1
  189. package/package.json +12 -11
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/ts-types/dataset/aggregation.ts"],"names":[],"mappings":"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","file":"aggregation.js","sourcesContent":["import { isValid } from '@visactor/vutils';\nimport type { SortOrder } from '..';\nimport { AggregationType, SortType } from '..';\nimport type { BaseTableAPI } from '../base-table';\n\nexport const registeredAggregators: {\n [key: string]: {\n new (args: {\n key?: string;\n field: string | string[];\n aggregationFun?: any;\n formatFun?: any;\n isRecord?: boolean;\n needSplitPositiveAndNegative?: boolean;\n calculateFun?: any;\n dependAggregators?: any;\n dependIndicatorKeys?: string[];\n }): Aggregator;\n };\n} = {};\n\nexport interface IAggregator {\n records: any[];\n value: () => any;\n push: (record: any) => void;\n deleteRecord: (record: any) => void;\n updateRecord: (oldRecord: any, newRecord: any) => void;\n recalculate: () => any;\n formatValue?: (col?: number, row?: number, table?: BaseTableAPI) => any;\n formatFun?: () => any;\n clearCacheValue: () => any;\n reset: () => void;\n}\nexport abstract class Aggregator implements IAggregator {\n isAggregator?: boolean = true;\n isRecord?: boolean = true; //是否需要维护records 将数据源都记录下来\n records: any[] = [];\n type?: string;\n key: string;\n field?: string | string[];\n formatFun?: any;\n changedValue?: any;\n children?: Aggregator[] = [];\n _formatedValue?: any;\n\n constructor(config: { key: string; field: string | string[]; formatFun?: any; isRecord?: boolean }) {\n this.key = config.key;\n this.field = config.field;\n this.formatFun = config.formatFun;\n this.isRecord = config.isRecord ?? this.isRecord;\n }\n abstract push(record: any): void;\n abstract deleteRecord(record: any): void;\n abstract updateRecord(oldRecord: any, newRecord: any): void;\n abstract value(): any;\n abstract recalculate(): any;\n clearCacheValue() {\n this._formatedValue = undefined;\n }\n formatValue(col?: number, row?: number, table?: BaseTableAPI) {\n if (!this._formatedValue) {\n if (this.formatFun) {\n this._formatedValue = this.formatFun(this.value(), col, row, table);\n } else {\n this._formatedValue = this.value();\n }\n }\n return this._formatedValue;\n }\n reset() {\n this.records = [];\n this.changedValue = undefined;\n this.children = [];\n this.clearCacheValue();\n }\n}\nexport class RecordAggregator extends Aggregator {\n type: string = AggregationType.RECORD;\n isRecord?: boolean = true;\n push(record: any): void {\n if (record && this.isRecord && this.records) {\n if (record.isAggregator) {\n this.records.push(...record.records);\n } else {\n this.records.push(record);\n }\n }\n\n if (record.isAggregator && this.children) {\n this.children.push(record);\n }\n this.clearCacheValue();\n }\n deleteRecord(record: any) {\n if (record) {\n if (this.isRecord && this.records) {\n this.records = this.records.filter(item => item !== record);\n }\n\n if (record.isAggregator && this.children) {\n this.children = this.children.filter(item => item !== record);\n }\n }\n this.clearCacheValue();\n }\n updateRecord(oldRecord: any, newRecord: any): void {\n if (oldRecord && newRecord) {\n if (this.isRecord && this.records) {\n this.records = this.records.map(item => {\n if (item === oldRecord) {\n return newRecord;\n }\n return item;\n });\n }\n\n if (oldRecord.isAggregator && newRecord.isAggregator && this.children) {\n this.children = this.children.map(item => {\n if (item === oldRecord) {\n return newRecord;\n }\n return item;\n });\n }\n this.clearCacheValue();\n }\n }\n value() {\n return this.changedValue ?? this.records;\n }\n reset() {\n this.children = [];\n this.changedValue = undefined;\n this.records = [];\n }\n recalculate() {\n // do nothing\n }\n}\n\nexport class NoneAggregator extends Aggregator {\n type: string = AggregationType.NONE; //仅获取其中一条数据(最新push的一条) 不做聚合 其fieldValue可以是number或者string类型\n isRecord?: boolean = true;\n declare field?: string;\n fieldValue?: any;\n push(record: any): void {\n if (record) {\n if (this.isRecord) {\n this.records = [record];\n }\n if (record.isAggregator && this.children) {\n this.children = [record];\n }\n if (this.field) {\n this.fieldValue = record[this.field];\n }\n }\n this.clearCacheValue();\n }\n deleteRecord(record: any) {\n if (record) {\n if (this.isRecord && this.records) {\n this.records = this.records.filter(item => item !== record);\n }\n\n if (record.isAggregator && this.children) {\n this.children = this.children.filter(item => item !== record);\n }\n if (this.field && this.records.length) {\n this.fieldValue = this.records[this.records.length - 1][this.field];\n }\n }\n this.clearCacheValue();\n }\n updateRecord(oldRecord: any, newRecord: any): void {\n if (oldRecord && newRecord) {\n if (this.isRecord && this.records) {\n this.records = this.records.map(item => {\n if (item === oldRecord) {\n return newRecord;\n }\n return item;\n });\n }\n if (oldRecord.isAggregator && newRecord.isAggregator && this.children) {\n this.children = this.children.map(item => {\n if (item === oldRecord) {\n return newRecord;\n }\n return item;\n });\n }\n if (this.field && this.records.length) {\n this.fieldValue = this.records[this.records.length - 1][this.field];\n }\n this.clearCacheValue();\n }\n }\n value() {\n return this.changedValue ?? this.fieldValue;\n }\n reset() {\n this.children = [];\n this.changedValue = undefined;\n this.records = [];\n this.fieldValue = undefined;\n }\n recalculate() {\n // do nothing\n }\n}\nexport class CustomAggregator extends Aggregator {\n type: string = AggregationType.CUSTOM;\n isRecord?: boolean = true;\n declare field?: string;\n aggregationFun?: Function;\n values: (string | number)[] = [];\n fieldValue?: any;\n constructor(config: { key: string; field: string; formatFun?: any; isRecord?: boolean; aggregationFun?: Function }) {\n super(config);\n this.aggregationFun = config.aggregationFun;\n }\n push(record: any): void {\n if (record) {\n if (this.isRecord && this.records) {\n if (record.isAggregator) {\n this.records.push(...record.records);\n } else {\n this.records.push(record);\n }\n }\n\n if (record.isAggregator && this.children) {\n this.children.push(record);\n }\n if (this.field) {\n this.values.push(record[this.field]);\n }\n }\n this.clearCacheValue();\n }\n updateRecord(oldRecord: any, newRecord: any): void {\n if (oldRecord && newRecord) {\n if (this.isRecord && this.records) {\n this.records = this.records.map(item => {\n if (item === oldRecord) {\n return newRecord;\n }\n return item;\n });\n }\n if (oldRecord.isAggregator && newRecord.isAggregator && this.children) {\n this.children = this.children.map(item => {\n if (item === oldRecord) {\n return newRecord;\n }\n return item;\n });\n }\n if (this.field && this.records.length) {\n this.values = this.records.map(item => item[this.field]);\n }\n this.clearCacheValue();\n }\n }\n deleteRecord(record: any): void {\n if (record) {\n if (this.isRecord && this.records) {\n this.records = this.records.filter(item => item !== record);\n }\n if (record.isAggregator && this.children) {\n this.children = this.children.filter(item => item !== record);\n }\n if (this.field && this.records.length) {\n this.values = this.records.map(item => item[this.field]);\n }\n }\n this.clearCacheValue();\n }\n value() {\n if (!this.fieldValue) {\n this.fieldValue = this.aggregationFun?.(this.values, this.records, this.field);\n }\n return this.changedValue ?? this.fieldValue;\n }\n reset() {\n this.records = [];\n this.children = [];\n this.changedValue = undefined;\n this.fieldValue = undefined;\n }\n recalculate() {\n this.fieldValue = undefined;\n this._formatedValue = undefined;\n // do nothing\n }\n}\n/** 透视表计算字段逻辑使用 */\nexport class RecalculateAggregator extends Aggregator {\n type: string = AggregationType.RECALCULATE;\n isRecord?: boolean = true;\n declare field?: string;\n calculateFun: Function;\n fieldValue?: any;\n dependAggregators: Aggregator[];\n dependIndicatorKeys: string[];\n constructor(config: {\n key: string;\n field: string;\n formatFun: any;\n isRecord: boolean;\n calculateFun: Function;\n dependAggregators: Aggregator[];\n dependIndicatorKeys: string[];\n }) {\n super(config);\n this.calculateFun = config.calculateFun;\n this.dependAggregators = config.dependAggregators;\n this.dependIndicatorKeys = config.dependIndicatorKeys;\n }\n push(record: any): void {\n if (record && this.isRecord && this.records) {\n if (record.isAggregator) {\n this.records.push(...record.records);\n } else {\n this.records.push(record);\n }\n }\n if (this.children && record.isAggregator) {\n this.children.push(record);\n }\n this.clearCacheValue();\n }\n deleteRecord(record: any): void {\n if (record) {\n if (this.isRecord && this.records) {\n this.records = this.records.filter(item => item !== record);\n }\n if (record.isAggregator && this.children) {\n this.children = this.children.filter(item => item !== record);\n }\n }\n this.clearCacheValue();\n }\n updateRecord(oldRecord: any, newRecord: any): void {\n if (oldRecord && newRecord) {\n if (this.isRecord && this.records) {\n this.records = this.records.map(item => {\n if (item === oldRecord) {\n return newRecord;\n }\n return item;\n });\n }\n if (oldRecord.isAggregator && newRecord.isAggregator && this.children) {\n this.children = this.children.map(item => {\n if (item === oldRecord) {\n return newRecord;\n }\n return item;\n });\n }\n this.clearCacheValue();\n }\n }\n value() {\n if (!this.fieldValue) {\n const aggregatorValue = _getDependAggregatorValues(this.dependAggregators, this.dependIndicatorKeys);\n this.fieldValue = this.calculateFun?.(aggregatorValue, this.records, this.field);\n }\n return this.changedValue ?? this.fieldValue;\n }\n reset() {\n this.records = [];\n this.children = [];\n this.changedValue = undefined;\n this.fieldValue = undefined;\n }\n recalculate() {\n // do nothing\n }\n}\nexport class SumAggregator extends Aggregator {\n type: string = AggregationType.SUM;\n sum = 0;\n positiveSum = 0;\n nagetiveSum = 0;\n declare field?: string;\n needSplitPositiveAndNegativeForSum?: boolean = false;\n constructor(config: {\n key: string;\n field: string;\n formatFun?: any;\n isRecord?: boolean;\n needSplitPositiveAndNegative?: boolean;\n }) {\n super(config);\n this.needSplitPositiveAndNegativeForSum = config.needSplitPositiveAndNegative ?? false;\n }\n push(record: any): void {\n if (record) {\n if (this.isRecord && this.records) {\n if (record.isAggregator) {\n this.records.push(...record.records);\n } else {\n this.records.push(record);\n }\n }\n if (record.isAggregator && this.children) {\n this.children.push(record);\n const value = record.value();\n this.sum += value ?? 0;\n if (this.needSplitPositiveAndNegativeForSum) {\n if (value > 0) {\n this.positiveSum += value;\n } else if (value < 0) {\n this.nagetiveSum += value;\n }\n }\n } else if (this.field && !isNaN(parseFloat(record[this.field]))) {\n const value = parseFloat(record[this.field]);\n this.sum += value;\n if (this.needSplitPositiveAndNegativeForSum) {\n if (value > 0) {\n this.positiveSum += value;\n } else if (value < 0) {\n this.nagetiveSum += value;\n }\n }\n }\n }\n this.clearCacheValue();\n }\n deleteRecord(record: any) {\n if (record) {\n if (this.isRecord && this.records) {\n this.records = this.records.filter(item => item !== record);\n }\n if (record.isAggregator && this.children) {\n this.children = this.children.filter(item => item !== record);\n const value = record.value();\n this.sum -= value ?? 0;\n if (this.needSplitPositiveAndNegativeForSum) {\n if (value > 0) {\n this.positiveSum -= value;\n } else if (value < 0) {\n this.nagetiveSum -= value;\n }\n }\n } else if (this.field && !isNaN(parseFloat(record[this.field]))) {\n const value = parseFloat(record[this.field]);\n this.sum -= value;\n if (this.needSplitPositiveAndNegativeForSum) {\n if (value > 0) {\n this.positiveSum -= value;\n } else if (value < 0) {\n this.nagetiveSum -= value;\n }\n }\n }\n }\n this.clearCacheValue();\n }\n updateRecord(oldRecord: any, newRecord: any): void {\n if (oldRecord && newRecord) {\n if (this.isRecord && this.records) {\n this.records = this.records.map(item => {\n if (item === oldRecord) {\n return newRecord;\n }\n return item;\n });\n }\n if (oldRecord.isAggregator && this.children) {\n const oldValue = oldRecord.value();\n this.children = this.children.filter(item => item !== oldRecord);\n const newValue = newRecord.value();\n this.children.push(newRecord);\n this.sum += newValue - oldValue;\n if (this.needSplitPositiveAndNegativeForSum) {\n if (oldValue > 0) {\n this.positiveSum -= oldValue;\n } else if (oldValue < 0) {\n this.nagetiveSum -= oldValue;\n }\n if (newValue > 0) {\n this.positiveSum += newValue;\n } else if (newValue < 0) {\n this.nagetiveSum += newValue;\n }\n }\n } else if (this.field && !isNaN(parseFloat(oldRecord[this.field]))) {\n const oldValue = parseFloat(oldRecord[this.field]);\n const newValue = parseFloat(newRecord[this.field]);\n this.sum += newValue - oldValue;\n if (this.needSplitPositiveAndNegativeForSum) {\n if (oldValue > 0) {\n this.positiveSum -= oldValue;\n } else if (oldValue < 0) {\n this.nagetiveSum -= oldValue;\n }\n if (newValue > 0) {\n this.positiveSum += newValue;\n } else if (newValue < 0) {\n this.nagetiveSum += newValue;\n }\n }\n }\n this.clearCacheValue();\n }\n }\n value() {\n return this.changedValue ?? (this.records?.length >= 1 ? this.sum : undefined);\n }\n positiveValue() {\n return this.positiveSum;\n }\n negativeValue() {\n return this.nagetiveSum;\n }\n reset() {\n super.reset();\n this.records = [];\n this.sum = 0;\n }\n recalculate() {\n this.sum = 0;\n this._formatedValue = undefined;\n if (this.children && this.children.length > 0) {\n for (let i = 0; i < this.children.length; i++) {\n const child = this.children[i];\n if (child.isAggregator) {\n const value = child.value();\n this.sum += value ?? 0;\n if (this.needSplitPositiveAndNegativeForSum) {\n if (value > 0) {\n this.positiveSum += value;\n } else if (value < 0) {\n this.nagetiveSum += value;\n }\n }\n }\n }\n } else if (this.records) {\n for (let i = 0; i < this.records.length; i++) {\n const record = this.records[i];\n if (record.isAggregator) {\n const value = record.value();\n this.sum += value ?? 0;\n if (this.needSplitPositiveAndNegativeForSum) {\n if (value > 0) {\n this.positiveSum += value;\n } else if (value < 0) {\n this.nagetiveSum += value;\n }\n }\n } else if (this.field && !isNaN(parseFloat(record[this.field]))) {\n const value = parseFloat(record[this.field]);\n this.sum += value;\n if (this.needSplitPositiveAndNegativeForSum) {\n if (value > 0) {\n this.positiveSum += value;\n } else if (value < 0) {\n this.nagetiveSum += value;\n }\n }\n }\n }\n }\n }\n}\n\nexport class CountAggregator extends Aggregator {\n type: string = AggregationType.COUNT;\n count = 0;\n declare field?: string;\n push(record: any): void {\n if (record) {\n if (this.isRecord && this.records) {\n if (record.isAggregator) {\n this.records.push(...record.records);\n } else {\n this.records.push(record);\n }\n }\n if (record.isAggregator) {\n if (this.children) {\n this.children.push(record);\n }\n this.count += record.value();\n } else {\n this.count++;\n }\n }\n this.clearCacheValue();\n }\n deleteRecord(record: any) {\n if (record) {\n if (this.isRecord && this.records) {\n this.records = this.records.filter(item => item !== record);\n }\n if (record.isAggregator) {\n if (this.children) {\n this.children = this.children.filter(item => item !== record);\n }\n this.count -= record.value();\n } else {\n this.count--;\n }\n }\n this.clearCacheValue();\n }\n updateRecord(oldRecord: any, newRecord: any): void {\n if (oldRecord && newRecord) {\n if (this.isRecord && this.records) {\n this.records = this.records.map(item => {\n if (item === oldRecord) {\n return newRecord;\n }\n return item;\n });\n }\n if (oldRecord.isAggregator) {\n this.count += newRecord.value() - oldRecord.value();\n } else {\n //this.count++;\n }\n if (oldRecord.isAggregator && newRecord.isAggregator && this.children) {\n this.children = this.children.map(item => {\n if (item === oldRecord) {\n return newRecord;\n }\n return item;\n });\n }\n }\n }\n value() {\n return this.changedValue ?? this.count;\n }\n reset() {\n this.changedValue = undefined;\n this.children = [];\n this.records = [];\n this.count = 0;\n }\n recalculate() {\n this.count = 0;\n this._formatedValue = undefined;\n if (this.children && this.children.length > 0) {\n for (let i = 0; i < this.children.length; i++) {\n const child = this.children[i];\n if (child.isAggregator) {\n const value = child.value();\n this.count += value ?? 0;\n } else {\n this.count++;\n }\n }\n } else if (this.records) {\n for (let i = 0; i < this.records.length; i++) {\n const record = this.records[i];\n if (record.isAggregator) {\n this.count += record.value();\n } else {\n this.count++;\n }\n }\n }\n }\n}\nexport class AvgAggregator extends Aggregator {\n type: string = AggregationType.AVG;\n sum = 0;\n count = 0;\n declare field?: string;\n push(record: any): void {\n if (record) {\n if (this.isRecord && this.records) {\n if (record.isAggregator) {\n this.records.push(...record.records);\n } else {\n this.records.push(record);\n }\n }\n if (record.isAggregator && record.type === AggregationType.AVG) {\n if (this.children) {\n this.children.push(record);\n }\n this.sum += record.sum;\n this.count += record.count;\n } else if (this.field && !isNaN(parseFloat(record[this.field]))) {\n this.sum += parseFloat(record[this.field]);\n this.count++;\n }\n }\n this.clearCacheValue();\n }\n deleteRecord(record: any) {\n if (record) {\n if (this.isRecord && this.records) {\n this.records = this.records.filter(item => item !== record);\n }\n if (record.isAggregator && record.type === AggregationType.AVG) {\n if (this.children) {\n this.children = this.children.filter(item => item !== record);\n }\n this.sum -= record.sum;\n this.count -= record.count;\n } else if (this.field && !isNaN(parseFloat(record[this.field]))) {\n this.sum -= parseFloat(record[this.field]);\n this.count--;\n }\n }\n this.clearCacheValue();\n }\n updateRecord(oldRecord: any, newRecord: any): void {\n if (oldRecord && newRecord) {\n if (this.isRecord && this.records) {\n this.records = this.records.map(item => {\n if (item === oldRecord) {\n return newRecord;\n }\n return item;\n });\n }\n if (oldRecord.isAggregator && oldRecord.type === AggregationType.AVG) {\n if (this.children && newRecord.isAggregator) {\n this.children = this.children.map(item => {\n if (item === oldRecord) {\n return newRecord;\n }\n return item;\n });\n }\n this.sum += newRecord.sum - oldRecord.sum;\n this.count += newRecord.count - oldRecord.count;\n } else if (this.field && !isNaN(parseFloat(oldRecord[this.field]))) {\n this.sum += parseFloat(newRecord[this.field]) - parseFloat(oldRecord[this.field]);\n // this.count++;\n }\n this.clearCacheValue();\n }\n }\n value() {\n return this.changedValue ?? (this.records?.length >= 1 ? this.sum / this.count : undefined);\n }\n reset() {\n this.changedValue = undefined;\n this.children = [];\n this.records = [];\n this.sum = 0;\n this.count = 0;\n }\n recalculate() {\n this.sum = 0;\n this.count = 0;\n this._formatedValue = undefined;\n if (this.children && this.children.length > 0) {\n for (let i = 0; i < this.children.length; i++) {\n const child = this.children[i];\n if (child.isAggregator && child.type === AggregationType.AVG) {\n const childValue = child.value();\n this.sum += childValue * (child as AvgAggregator).count;\n this.count += (child as AvgAggregator).count;\n }\n }\n } else if (this.records) {\n for (let i = 0; i < this.records.length; i++) {\n const record = this.records[i];\n if (record.isAggregator && record.type === AggregationType.AVG) {\n this.sum += record.sum;\n this.count += record.count;\n } else if (this.field && !isNaN(parseFloat(record[this.field]))) {\n this.sum += parseFloat(record[this.field]);\n this.count++;\n }\n }\n }\n }\n}\nexport class MaxAggregator extends Aggregator {\n type: string = AggregationType.MAX;\n max: number = Number.MIN_SAFE_INTEGER;\n declare field?: string;\n push(record: any): void {\n if (record) {\n if (this.isRecord && this.records) {\n if (record.isAggregator) {\n this.records.push(...record.records);\n } else {\n this.records.push(record);\n }\n }\n if (record.isAggregator) {\n if (this.children) {\n this.children.push(record);\n }\n this.max = record.max > this.max ? record.max : this.max;\n } else if (typeof record === 'number') {\n this.max = record > this.max ? record : this.max;\n } else if (this.field && typeof record[this.field] === 'number') {\n this.max = record[this.field] > this.max ? record[this.field] : this.max;\n } else if (this.field && !isNaN(record[this.field])) {\n this.max = parseFloat(record[this.field]) > this.max ? parseFloat(record[this.field]) : this.max;\n }\n }\n this.clearCacheValue();\n }\n deleteRecord(record: any) {\n if (record) {\n if (this.isRecord && this.records) {\n this.records = this.records.filter(item => item !== record);\n }\n if (record.isAggregator) {\n if (this.children) {\n this.children = this.children.filter(item => item !== record);\n }\n }\n this.recalculate();\n }\n }\n updateRecord(oldRecord: any, newRecord: any): void {\n if (oldRecord && newRecord) {\n if (this.isRecord && this.records) {\n this.records = this.records.map(item => {\n if (item === oldRecord) {\n return newRecord;\n }\n return item;\n });\n }\n if (oldRecord.isAggregator && newRecord.isAggregator) {\n if (this.children) {\n this.children = this.children.map(item => {\n if (item === oldRecord) {\n return newRecord;\n }\n return item;\n });\n }\n }\n this.recalculate();\n }\n }\n value() {\n return this.changedValue ?? (this.records?.length >= 1 ? this.max : undefined);\n }\n reset() {\n this.records = [];\n this.changedValue = undefined;\n this.children = [];\n this.max = Number.MIN_SAFE_INTEGER;\n }\n recalculate() {\n this.max = Number.MIN_SAFE_INTEGER;\n this._formatedValue = undefined;\n if (this.children && this.children.length > 0) {\n for (let i = 0; i < this.children.length; i++) {\n const child = this.children[i];\n if (child.isAggregator) {\n const childValue = child.value();\n this.max = Math.max(this.max, childValue);\n }\n }\n } else if (this.records) {\n for (let i = 0; i < this.records.length; i++) {\n const record = this.records[i];\n if (record.isAggregator) {\n this.max = record.max > this.max ? record.max : this.max;\n } else if (typeof record === 'number') {\n this.max = record > this.max ? record : this.max;\n } else if (this.field && typeof record[this.field] === 'number') {\n this.max = record[this.field] > this.max ? record[this.field] : this.max;\n } else if (this.field && !isNaN(record[this.field])) {\n this.max = parseFloat(record[this.field]) > this.max ? parseFloat(record[this.field]) : this.max;\n }\n }\n }\n }\n}\nexport class MinAggregator extends Aggregator {\n type: string = AggregationType.MIN;\n min: number = Number.MAX_SAFE_INTEGER;\n declare field?: string;\n push(record: any): void {\n if (record) {\n if (this.isRecord && this.records) {\n if (record.isAggregator) {\n this.records.push(...record.records);\n } else {\n this.records.push(record);\n }\n }\n if (record.isAggregator) {\n if (this.children) {\n this.children.push(record);\n }\n this.min = record.min < this.min ? record.min : this.min;\n } else if (typeof record === 'number') {\n this.min = record < this.min ? record : this.min;\n } else if (this.field && typeof record[this.field] === 'number') {\n this.min = record[this.field] < this.min ? record[this.field] : this.min;\n } else if (this.field && !isNaN(record[this.field])) {\n this.min = parseFloat(record[this.field]) < this.min ? parseFloat(record[this.field]) : this.min;\n }\n }\n this.clearCacheValue();\n }\n deleteRecord(record: any) {\n if (record) {\n if (this.isRecord && this.records) {\n this.records = this.records.filter(item => item !== record);\n }\n if (record.isAggregator) {\n if (this.children) {\n this.children = this.children.filter(item => item !== record);\n }\n }\n this.recalculate();\n }\n }\n updateRecord(oldRecord: any, newRecord: any): void {\n if (oldRecord && newRecord) {\n if (this.isRecord && this.records) {\n this.records = this.records.map(item => {\n if (item === oldRecord) {\n return newRecord;\n }\n return item;\n });\n }\n if (oldRecord.isAggregator && newRecord.isAggregator) {\n if (this.children) {\n this.children = this.children.map(item => {\n if (item === oldRecord) {\n return newRecord;\n }\n return item;\n });\n }\n }\n this.recalculate();\n }\n }\n value() {\n return this.changedValue ?? (this.records?.length >= 1 ? this.min : undefined);\n }\n reset() {\n this.records = [];\n this.changedValue = undefined;\n this.children = [];\n this.min = Number.MAX_SAFE_INTEGER;\n }\n recalculate() {\n this.min = Number.MAX_SAFE_INTEGER;\n this._formatedValue = undefined;\n if (this.children && this.children.length > 0) {\n for (let i = 0; i < this.children.length; i++) {\n const child = this.children[i];\n if (child.isAggregator) {\n const childValue = child.value();\n this.min = Math.min(this.min, childValue);\n }\n }\n } else if (this.records) {\n for (let i = 0; i < this.records.length; i++) {\n const record = this.records[i];\n if (record.isAggregator) {\n this.min = record.min < this.min ? record.min : this.min;\n } else if (typeof record === 'number') {\n this.min = record < this.min ? record : this.min;\n } else if (this.field && typeof record[this.field] === 'number') {\n this.min = record[this.field] < this.min ? record[this.field] : this.min;\n } else if (this.field && !isNaN(record[this.field])) {\n this.min = parseFloat(record[this.field]) < this.min ? parseFloat(record[this.field]) : this.min;\n }\n }\n }\n }\n}\nexport function indicatorSort(a: any, b: any) {\n if (a && b) {\n // 数据健全兼容,用户数据不全时,能够展示.\n return a.toString().localeCompare(b.toString(), 'zh');\n }\n if (a) {\n return 1;\n }\n return -1;\n}\nexport function typeSort(a: any, b: any, sortType: SortType) {\n if (sortType === SortType.NORMAL || sortType === SortType.normal) {\n return 0;\n }\n const factor = sortType === SortType.DESC || sortType === SortType.desc ? -1 : 1;\n if (a && b) {\n // 数据健全兼容,用户数据不全时,能够展示.\n return a.toString().localeCompare(b.toString(), 'zh') * factor;\n }\n if (a) {\n return 1 * factor;\n }\n return -1 * factor;\n}\nexport function naturalSort(as: any, bs: any, sortType: SortType) {\n if (sortType === SortType.NORMAL || sortType === SortType.normal) {\n return 0;\n }\n\n const rx = /(\\d+)|(\\D+)/g;\n const rd = /\\d/;\n const rz = /^0/;\n let a;\n let a1;\n let b;\n let b1;\n let nas = 0;\n let nbs = 0;\n const factor = sortType === SortType.DESC || sortType === SortType.desc ? -1 : 1;\n if (bs !== null && as === null) {\n return -1 * factor;\n }\n if (as !== null && bs === null) {\n return 1 * factor;\n }\n if (typeof as === 'number' && isNaN(as)) {\n return -1 * factor;\n }\n if (typeof bs === 'number' && isNaN(bs)) {\n return 1 * factor;\n }\n nas = +as;\n nbs = +bs;\n if (nas < nbs) {\n return -1 * factor;\n }\n if (nas > nbs) {\n return 1 * factor;\n }\n if (typeof as === 'number' && typeof bs !== 'number') {\n return -1 * factor;\n }\n if (typeof bs === 'number' && typeof as !== 'number') {\n return 1 * factor;\n }\n if (typeof as === 'number' && typeof bs === 'number') {\n return 0;\n }\n if (isNaN(nbs) && !isNaN(nas)) {\n return -1 * factor;\n }\n if (isNaN(nas) && !isNaN(nbs)) {\n return 1 * factor;\n }\n a = String(as);\n b = String(bs);\n if (a === b) {\n return 0;\n }\n if (!(rd.test(a) && rd.test(b))) {\n return (a > b ? 1 : -1) * factor;\n }\n a = a.match(rx);\n b = b.match(rx);\n while (a.length && b.length) {\n a1 = a.shift();\n b1 = b.shift();\n if (a1 !== b1) {\n if (rd.test(a1) && rd.test(b1)) {\n return (<any>a1.replace(rz, '.0') - <any>b1.replace(rz, '.0')) * factor;\n }\n return (a1 > b1 ? 1 : -1) * factor;\n }\n }\n return (a.length - b.length) * factor;\n}\nexport function sortBy(order: string[]) {\n let x;\n let i;\n const mapping: any = {};\n const lowercase_mapping: any = {};\n // for (i in order) {\n for (let i = 0; i < order.length; i++) {\n x = order[i];\n mapping[x] = i;\n if (typeof x === 'string') {\n lowercase_mapping[x.toLowerCase()] = i;\n }\n }\n return function (a: any, b: any, sortType: SortType) {\n if (sortType === SortType.NORMAL || sortType === SortType.normal) {\n return 0;\n }\n const factor = sortType === SortType.DESC || sortType === SortType.desc ? -1 : 1;\n let comparison;\n if (mapping[a] !== null && mapping[a] !== undefined && mapping[b] !== null && mapping[b] !== undefined) {\n comparison = mapping[a] - mapping[b];\n } else if (mapping[a] !== null && mapping[a] !== undefined) {\n comparison = -1;\n } else if (mapping[b] !== null && mapping[b] !== undefined) {\n comparison = 1;\n } else if (\n lowercase_mapping[a] !== null &&\n mapping[a] !== undefined &&\n lowercase_mapping[b] !== null &&\n mapping[b] !== undefined\n ) {\n comparison = lowercase_mapping[a] - lowercase_mapping[b];\n } else if (\n lowercase_mapping[a] === null ||\n mapping[a] === undefined ||\n lowercase_mapping[b] === null ||\n mapping[b] === undefined\n ) {\n comparison = 0;\n } else if (lowercase_mapping[a] !== null && mapping[a] !== undefined) {\n comparison = -1;\n } else if (lowercase_mapping[b] !== null && mapping[b] !== undefined) {\n comparison = 1;\n }\n if (isValid(comparison)) {\n return comparison * factor;\n }\n\n return naturalSort(a, b, sortType);\n };\n}\n\nfunction _getDependAggregatorValues(aggregators: Aggregator[], dependIndicatorKeys: string[]) {\n const dependAggregatorValues: any = {};\n for (let m = 0; m < dependIndicatorKeys?.length; m++) {\n const aggrator = aggregators.find(aggrator => aggrator?.key === dependIndicatorKeys[m]);\n if (aggrator) {\n dependAggregatorValues[aggrator.key] = aggrator?.value();\n }\n }\n return dependAggregatorValues;\n}\n"]}
1
+ {"version":3,"sources":["../src/ts-types/dataset/aggregation.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAEvE,OAAO,EAAE,eAAe,EAAE,QAAQ,EAAE,MAAM,IAAI,CAAC;AAG/C,MAAM,CAAC,MAAM,qBAAqB,GAc9B,EAAE,CAAC;AAcP,MAAM,OAAgB,UAAU;IAY9B,YAAY,MAAsF;;QAXlG,iBAAY,GAAa,IAAI,CAAC;QAC9B,aAAQ,GAAa,IAAI,CAAC;QAC1B,YAAO,GAAU,EAAE,CAAC;QAMpB,aAAQ,GAAkB,EAAE,CAAC;QAI3B,IAAI,CAAC,GAAG,GAAG,MAAM,CAAC,GAAG,CAAC;QACtB,IAAI,CAAC,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC;QAC1B,IAAI,CAAC,SAAS,GAAG,MAAM,CAAC,SAAS,CAAC;QAClC,IAAI,CAAC,QAAQ,GAAG,MAAA,MAAM,CAAC,QAAQ,mCAAI,IAAI,CAAC,QAAQ,CAAC;IACnD,CAAC;IAMD,eAAe;QACb,IAAI,CAAC,cAAc,GAAG,SAAS,CAAC;IAClC,CAAC;IACD,WAAW,CAAC,GAAY,EAAE,GAAY,EAAE,KAAoB;QAC1D,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE;YACxB,IAAI,IAAI,CAAC,SAAS,EAAE;gBAClB,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,CAAC,CAAC;aACrE;iBAAM;gBACL,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,KAAK,EAAE,CAAC;aACpC;SACF;QACD,OAAO,IAAI,CAAC,cAAc,CAAC;IAC7B,CAAC;IACD,KAAK;QACH,IAAI,CAAC,OAAO,GAAG,EAAE,CAAC;QAClB,IAAI,CAAC,YAAY,GAAG,SAAS,CAAC;QAC9B,IAAI,CAAC,QAAQ,GAAG,EAAE,CAAC;QACnB,IAAI,CAAC,eAAe,EAAE,CAAC;IACzB,CAAC;CACF;AACD,MAAM,OAAO,gBAAiB,SAAQ,UAAU;IAAhD;;QACE,SAAI,GAAW,eAAe,CAAC,MAAM,CAAC;QACtC,aAAQ,GAAa,IAAI,CAAC;IA4D5B,CAAC;IA3DC,IAAI,CAAC,MAAW;QACd,IAAI,MAAM,IAAI,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,OAAO,EAAE;YAC3C,IAAI,MAAM,CAAC,YAAY,EAAE;gBACvB,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,OAAO,CAAC,CAAC;aACtC;iBAAM;gBACL,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;aAC3B;SACF;QAED,IAAI,MAAM,CAAC,YAAY,IAAI,IAAI,CAAC,QAAQ,EAAE;YACxC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;SAC5B;QACD,IAAI,CAAC,eAAe,EAAE,CAAC;IACzB,CAAC;IACD,YAAY,CAAC,MAAW;QACtB,IAAI,MAAM,EAAE;YACV,IAAI,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,OAAO,EAAE;gBACjC,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,KAAK,MAAM,CAAC,CAAC;aAC7D;YAED,IAAI,MAAM,CAAC,YAAY,IAAI,IAAI,CAAC,QAAQ,EAAE;gBACxC,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,KAAK,MAAM,CAAC,CAAC;aAC/D;SACF;QACD,IAAI,CAAC,eAAe,EAAE,CAAC;IACzB,CAAC;IACD,YAAY,CAAC,SAAc,EAAE,SAAc;QACzC,IAAI,SAAS,IAAI,SAAS,EAAE;YAC1B,IAAI,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,OAAO,EAAE;gBACjC,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE;oBACrC,IAAI,IAAI,KAAK,SAAS,EAAE;wBACtB,OAAO,SAAS,CAAC;qBAClB;oBACD,OAAO,IAAI,CAAC;gBACd,CAAC,CAAC,CAAC;aACJ;YAED,IAAI,SAAS,CAAC,YAAY,IAAI,SAAS,CAAC,YAAY,IAAI,IAAI,CAAC,QAAQ,EAAE;gBACrE,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE;oBACvC,IAAI,IAAI,KAAK,SAAS,EAAE;wBACtB,OAAO,SAAS,CAAC;qBAClB;oBACD,OAAO,IAAI,CAAC;gBACd,CAAC,CAAC,CAAC;aACJ;YACD,IAAI,CAAC,eAAe,EAAE,CAAC;SACxB;IACH,CAAC;IACD,KAAK;;QACH,OAAO,MAAA,IAAI,CAAC,YAAY,mCAAI,IAAI,CAAC,OAAO,CAAC;IAC3C,CAAC;IACD,KAAK;QACH,IAAI,CAAC,QAAQ,GAAG,EAAE,CAAC;QACnB,IAAI,CAAC,YAAY,GAAG,SAAS,CAAC;QAC9B,IAAI,CAAC,OAAO,GAAG,EAAE,CAAC;IACpB,CAAC;IACD,WAAW;IAEX,CAAC;CACF;AAED,MAAM,OAAO,cAAe,SAAQ,UAAU;IAA9C;;QACE,SAAI,GAAW,eAAe,CAAC,IAAI,CAAC;QACpC,aAAQ,GAAa,IAAI,CAAC;IAoE5B,CAAC;IAjEC,IAAI,CAAC,MAAW;QACd,IAAI,MAAM,EAAE;YACV,IAAI,IAAI,CAAC,QAAQ,EAAE;gBACjB,IAAI,CAAC,OAAO,GAAG,CAAC,MAAM,CAAC,CAAC;aACzB;YACD,IAAI,MAAM,CAAC,YAAY,IAAI,IAAI,CAAC,QAAQ,EAAE;gBACxC,IAAI,CAAC,QAAQ,GAAG,CAAC,MAAM,CAAC,CAAC;aAC1B;YACD,IAAI,IAAI,CAAC,KAAK,EAAE;gBACd,IAAI,CAAC,UAAU,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;aACtC;SACF;QACD,IAAI,CAAC,eAAe,EAAE,CAAC;IACzB,CAAC;IACD,YAAY,CAAC,MAAW;QACtB,IAAI,MAAM,EAAE;YACV,IAAI,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,OAAO,EAAE;gBACjC,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,KAAK,MAAM,CAAC,CAAC;aAC7D;YAED,IAAI,MAAM,CAAC,YAAY,IAAI,IAAI,CAAC,QAAQ,EAAE;gBACxC,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,KAAK,MAAM,CAAC,CAAC;aAC/D;YACD,IAAI,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE;gBACrC,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;aACrE;SACF;QACD,IAAI,CAAC,eAAe,EAAE,CAAC;IACzB,CAAC;IACD,YAAY,CAAC,SAAc,EAAE,SAAc;QACzC,IAAI,SAAS,IAAI,SAAS,EAAE;YAC1B,IAAI,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,OAAO,EAAE;gBACjC,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE;oBACrC,IAAI,IAAI,KAAK,SAAS,EAAE;wBACtB,OAAO,SAAS,CAAC;qBAClB;oBACD,OAAO,IAAI,CAAC;gBACd,CAAC,CAAC,CAAC;aACJ;YACD,IAAI,SAAS,CAAC,YAAY,IAAI,SAAS,CAAC,YAAY,IAAI,IAAI,CAAC,QAAQ,EAAE;gBACrE,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE;oBACvC,IAAI,IAAI,KAAK,SAAS,EAAE;wBACtB,OAAO,SAAS,CAAC;qBAClB;oBACD,OAAO,IAAI,CAAC;gBACd,CAAC,CAAC,CAAC;aACJ;YACD,IAAI,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE;gBACrC,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;aACrE;YACD,IAAI,CAAC,eAAe,EAAE,CAAC;SACxB;IACH,CAAC;IACD,KAAK;;QACH,OAAO,MAAA,IAAI,CAAC,YAAY,mCAAI,IAAI,CAAC,UAAU,CAAC;IAC9C,CAAC;IACD,KAAK;QACH,IAAI,CAAC,QAAQ,GAAG,EAAE,CAAC;QACnB,IAAI,CAAC,YAAY,GAAG,SAAS,CAAC;QAC9B,IAAI,CAAC,OAAO,GAAG,EAAE,CAAC;QAClB,IAAI,CAAC,UAAU,GAAG,SAAS,CAAC;IAC9B,CAAC;IACD,WAAW;IAEX,CAAC;CACF;AACD,MAAM,OAAO,gBAAiB,SAAQ,UAAU;IAO9C,YAAY,MAAsG;QAChH,KAAK,CAAC,MAAM,CAAC,CAAC;QAPhB,SAAI,GAAW,eAAe,CAAC,MAAM,CAAC;QACtC,aAAQ,GAAa,IAAI,CAAC;QAG1B,WAAM,GAAwB,EAAE,CAAC;QAI/B,IAAI,CAAC,cAAc,GAAG,MAAM,CAAC,cAAc,CAAC;IAC9C,CAAC;IACD,IAAI,CAAC,MAAW;QACd,IAAI,MAAM,EAAE;YACV,IAAI,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,OAAO,EAAE;gBACjC,IAAI,MAAM,CAAC,YAAY,EAAE;oBACvB,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,OAAO,CAAC,CAAC;iBACtC;qBAAM;oBACL,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;iBAC3B;aACF;YAED,IAAI,MAAM,CAAC,YAAY,IAAI,IAAI,CAAC,QAAQ,EAAE;gBACxC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;aAC5B;YACD,IAAI,IAAI,CAAC,KAAK,EAAE;gBACd,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;aACtC;SACF;QACD,IAAI,CAAC,eAAe,EAAE,CAAC;IACzB,CAAC;IACD,YAAY,CAAC,SAAc,EAAE,SAAc;QACzC,IAAI,SAAS,IAAI,SAAS,EAAE;YAC1B,IAAI,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,OAAO,EAAE;gBACjC,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE;oBACrC,IAAI,IAAI,KAAK,SAAS,EAAE;wBACtB,OAAO,SAAS,CAAC;qBAClB;oBACD,OAAO,IAAI,CAAC;gBACd,CAAC,CAAC,CAAC;aACJ;YACD,IAAI,SAAS,CAAC,YAAY,IAAI,SAAS,CAAC,YAAY,IAAI,IAAI,CAAC,QAAQ,EAAE;gBACrE,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE;oBACvC,IAAI,IAAI,KAAK,SAAS,EAAE;wBACtB,OAAO,SAAS,CAAC;qBAClB;oBACD,OAAO,IAAI,CAAC;gBACd,CAAC,CAAC,CAAC;aACJ;YACD,IAAI,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE;gBACrC,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;aAC1D;YACD,IAAI,CAAC,eAAe,EAAE,CAAC;SACxB;IACH,CAAC;IACD,YAAY,CAAC,MAAW;QACtB,IAAI,MAAM,EAAE;YACV,IAAI,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,OAAO,EAAE;gBACjC,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,KAAK,MAAM,CAAC,CAAC;aAC7D;YACD,IAAI,MAAM,CAAC,YAAY,IAAI,IAAI,CAAC,QAAQ,EAAE;gBACxC,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,KAAK,MAAM,CAAC,CAAC;aAC/D;YACD,IAAI,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE;gBACrC,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;aAC1D;SACF;QACD,IAAI,CAAC,eAAe,EAAE,CAAC;IACzB,CAAC;IACD,KAAK;;QACH,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE;YACpB,IAAI,CAAC,UAAU,GAAG,MAAA,IAAI,CAAC,cAAc,qDAAG,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;SAChF;QACD,OAAO,MAAA,IAAI,CAAC,YAAY,mCAAI,IAAI,CAAC,UAAU,CAAC;IAC9C,CAAC;IACD,KAAK;QACH,IAAI,CAAC,OAAO,GAAG,EAAE,CAAC;QAClB,IAAI,CAAC,QAAQ,GAAG,EAAE,CAAC;QACnB,IAAI,CAAC,YAAY,GAAG,SAAS,CAAC;QAC9B,IAAI,CAAC,UAAU,GAAG,SAAS,CAAC;IAC9B,CAAC;IACD,WAAW;QACT,IAAI,CAAC,UAAU,GAAG,SAAS,CAAC;QAC5B,IAAI,CAAC,cAAc,GAAG,SAAS,CAAC;IAElC,CAAC;CACF;AAED,MAAM,OAAO,qBAAsB,SAAQ,UAAU;IAQnD,YAAY,MAQX;QACC,KAAK,CAAC,MAAM,CAAC,CAAC;QAhBhB,SAAI,GAAW,eAAe,CAAC,WAAW,CAAC;QAC3C,aAAQ,GAAa,IAAI,CAAC;QAgBxB,IAAI,CAAC,YAAY,GAAG,MAAM,CAAC,YAAY,CAAC;QACxC,IAAI,CAAC,iBAAiB,GAAG,MAAM,CAAC,iBAAiB,CAAC;QAClD,IAAI,CAAC,mBAAmB,GAAG,MAAM,CAAC,mBAAmB,CAAC;IACxD,CAAC;IACD,IAAI,CAAC,MAAW;QACd,IAAI,MAAM,IAAI,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,OAAO,EAAE;YAC3C,IAAI,MAAM,CAAC,YAAY,EAAE;gBACvB,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,OAAO,CAAC,CAAC;aACtC;iBAAM;gBACL,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;aAC3B;SACF;QACD,IAAI,IAAI,CAAC,QAAQ,IAAI,MAAM,CAAC,YAAY,EAAE;YACxC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;SAC5B;QACD,IAAI,CAAC,eAAe,EAAE,CAAC;IACzB,CAAC;IACD,YAAY,CAAC,MAAW;QACtB,IAAI,MAAM,EAAE;YACV,IAAI,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,OAAO,EAAE;gBACjC,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,KAAK,MAAM,CAAC,CAAC;aAC7D;YACD,IAAI,MAAM,CAAC,YAAY,IAAI,IAAI,CAAC,QAAQ,EAAE;gBACxC,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,KAAK,MAAM,CAAC,CAAC;aAC/D;SACF;QACD,IAAI,CAAC,eAAe,EAAE,CAAC;IACzB,CAAC;IACD,YAAY,CAAC,SAAc,EAAE,SAAc;QACzC,IAAI,SAAS,IAAI,SAAS,EAAE;YAC1B,IAAI,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,OAAO,EAAE;gBACjC,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE;oBACrC,IAAI,IAAI,KAAK,SAAS,EAAE;wBACtB,OAAO,SAAS,CAAC;qBAClB;oBACD,OAAO,IAAI,CAAC;gBACd,CAAC,CAAC,CAAC;aACJ;YACD,IAAI,SAAS,CAAC,YAAY,IAAI,SAAS,CAAC,YAAY,IAAI,IAAI,CAAC,QAAQ,EAAE;gBACrE,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE;oBACvC,IAAI,IAAI,KAAK,SAAS,EAAE;wBACtB,OAAO,SAAS,CAAC;qBAClB;oBACD,OAAO,IAAI,CAAC;gBACd,CAAC,CAAC,CAAC;aACJ;YACD,IAAI,CAAC,eAAe,EAAE,CAAC;SACxB;IACH,CAAC;IACD,KAAK;;QACH,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE;YACpB,MAAM,eAAe,GAAG,0BAA0B,CAAC,IAAI,CAAC,iBAAiB,EAAE,IAAI,CAAC,mBAAmB,CAAC,CAAC;YACrG,IAAI,CAAC,UAAU,GAAG,MAAA,IAAI,CAAC,YAAY,qDAAG,eAAe,EAAE,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;SAClF;QACD,OAAO,MAAA,IAAI,CAAC,YAAY,mCAAI,IAAI,CAAC,UAAU,CAAC;IAC9C,CAAC;IACD,KAAK;QACH,IAAI,CAAC,OAAO,GAAG,EAAE,CAAC;QAClB,IAAI,CAAC,QAAQ,GAAG,EAAE,CAAC;QACnB,IAAI,CAAC,YAAY,GAAG,SAAS,CAAC;QAC9B,IAAI,CAAC,UAAU,GAAG,SAAS,CAAC;IAC9B,CAAC;IACD,WAAW;IAEX,CAAC;CACF;AACD,MAAM,OAAO,aAAc,SAAQ,UAAU;IAO3C,YAAY,MAMX;;QACC,KAAK,CAAC,MAAM,CAAC,CAAC;QAbhB,SAAI,GAAW,eAAe,CAAC,GAAG,CAAC;QACnC,QAAG,GAAG,CAAC,CAAC;QACR,gBAAW,GAAG,CAAC,CAAC;QAChB,gBAAW,GAAG,CAAC,CAAC;QAEhB,uCAAkC,GAAa,KAAK,CAAC;QASnD,IAAI,CAAC,kCAAkC,GAAG,MAAA,MAAM,CAAC,4BAA4B,mCAAI,KAAK,CAAC;IACzF,CAAC;IACD,IAAI,CAAC,MAAW;QACd,IAAI,MAAM,EAAE;YACV,IAAI,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,OAAO,EAAE;gBACjC,IAAI,MAAM,CAAC,YAAY,EAAE;oBACvB,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,OAAO,CAAC,CAAC;iBACtC;qBAAM;oBACL,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;iBAC3B;aACF;YACD,IAAI,MAAM,CAAC,YAAY,IAAI,IAAI,CAAC,QAAQ,EAAE;gBACxC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;gBAC3B,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,EAAE,CAAC;gBAC7B,IAAI,CAAC,GAAG,GAAG,YAAY,CAAC,IAAI,CAAC,GAAG,EAAE,KAAK,aAAL,KAAK,cAAL,KAAK,GAAI,CAAC,CAAC,CAAC;gBAC9C,IAAI,IAAI,CAAC,kCAAkC,EAAE;oBAC3C,IAAI,KAAK,GAAG,CAAC,EAAE;wBACb,IAAI,CAAC,WAAW,GAAG,YAAY,CAAC,IAAI,CAAC,WAAW,EAAE,KAAK,CAAC,CAAC;qBAC1D;yBAAM,IAAI,KAAK,GAAG,CAAC,EAAE;wBACpB,IAAI,CAAC,WAAW,GAAG,YAAY,CAAC,IAAI,CAAC,WAAW,EAAE,KAAK,CAAC,CAAC;qBAC1D;iBACF;aACF;iBAAM,IAAI,IAAI,CAAC,KAAK,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE;gBAC/D,MAAM,KAAK,GAAG,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;gBAC7C,IAAI,CAAC,GAAG,GAAG,YAAY,CAAC,IAAI,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;gBACzC,IAAI,IAAI,CAAC,kCAAkC,EAAE;oBAC3C,IAAI,KAAK,GAAG,CAAC,EAAE;wBACb,IAAI,CAAC,WAAW,GAAG,YAAY,CAAC,IAAI,CAAC,WAAW,EAAE,KAAK,CAAC,CAAC;qBAC1D;yBAAM,IAAI,KAAK,GAAG,CAAC,EAAE;wBACpB,IAAI,CAAC,WAAW,GAAG,YAAY,CAAC,IAAI,CAAC,WAAW,EAAE,KAAK,CAAC,CAAC;qBAC1D;iBACF;aACF;SACF;QACD,IAAI,CAAC,eAAe,EAAE,CAAC;IACzB,CAAC;IACD,YAAY,CAAC,MAAW;QACtB,IAAI,MAAM,EAAE;YACV,IAAI,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,OAAO,EAAE;gBACjC,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;gBAC3C,IAAI,KAAK,KAAK,CAAC,CAAC,EAAE;oBAChB,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;iBAC/B;aACF;YACD,IAAI,MAAM,CAAC,YAAY,IAAI,IAAI,CAAC,QAAQ,EAAE;gBACxC,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;gBAC5C,IAAI,KAAK,KAAK,CAAC,CAAC,EAAE;oBAChB,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;iBAChC;gBACD,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,EAAE,CAAC;gBAC7B,IAAI,CAAC,GAAG,GAAG,YAAY,CAAC,IAAI,CAAC,GAAG,EAAE,KAAK,aAAL,KAAK,cAAL,KAAK,GAAI,CAAC,CAAC,CAAC;gBAC9C,IAAI,IAAI,CAAC,kCAAkC,EAAE;oBAC3C,IAAI,KAAK,GAAG,CAAC,EAAE;wBACb,IAAI,CAAC,WAAW,GAAG,YAAY,CAAC,IAAI,CAAC,WAAW,EAAE,KAAK,CAAC,CAAC;qBAC1D;yBAAM,IAAI,KAAK,GAAG,CAAC,EAAE;wBACpB,IAAI,CAAC,WAAW,GAAG,YAAY,CAAC,IAAI,CAAC,WAAW,EAAE,KAAK,CAAC,CAAC;qBAC1D;iBACF;aACF;iBAAM,IAAI,IAAI,CAAC,KAAK,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE;gBAC/D,MAAM,KAAK,GAAG,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;gBAC7C,IAAI,CAAC,GAAG,GAAG,YAAY,CAAC,IAAI,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;gBACzC,IAAI,IAAI,CAAC,kCAAkC,EAAE;oBAC3C,IAAI,KAAK,GAAG,CAAC,EAAE;wBACb,IAAI,CAAC,WAAW,GAAG,YAAY,CAAC,IAAI,CAAC,WAAW,EAAE,KAAK,CAAC,CAAC;qBAC1D;yBAAM,IAAI,KAAK,GAAG,CAAC,EAAE;wBACpB,IAAI,CAAC,WAAW,GAAG,YAAY,CAAC,IAAI,CAAC,WAAW,EAAE,KAAK,CAAC,CAAC;qBAC1D;iBACF;aACF;SACF;QACD,IAAI,CAAC,eAAe,EAAE,CAAC;IACzB,CAAC;IACD,YAAY,CAAC,SAAc,EAAE,SAAc;QACzC,IAAI,SAAS,IAAI,SAAS,EAAE;YAC1B,IAAI,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,OAAO,EAAE;gBACjC,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;gBAC9C,IAAI,KAAK,KAAK,CAAC,CAAC,EAAE;oBAChB,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,SAAS,CAAC;iBACjC;aACF;YACD,IAAI,SAAS,CAAC,YAAY,IAAI,IAAI,CAAC,QAAQ,EAAE;gBAC3C,MAAM,QAAQ,GAAG,SAAS,CAAC,KAAK,EAAE,CAAC;gBACnC,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;gBAC/C,IAAI,KAAK,KAAK,CAAC,CAAC,EAAE;oBAChB,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,GAAG,SAAS,CAAC;iBAClC;gBACD,MAAM,QAAQ,GAAG,SAAS,CAAC,KAAK,EAAE,CAAC;gBACnC,IAAI,CAAC,GAAG,GAAG,YAAY,CAAC,IAAI,CAAC,GAAG,EAAE,YAAY,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC,CAAC;gBACpE,IAAI,IAAI,CAAC,kCAAkC,EAAE;oBAC3C,IAAI,QAAQ,GAAG,CAAC,EAAE;wBAChB,IAAI,CAAC,WAAW,GAAG,YAAY,CAAC,IAAI,CAAC,WAAW,EAAE,QAAQ,CAAC,CAAC;qBAC7D;yBAAM,IAAI,QAAQ,GAAG,CAAC,EAAE;wBACvB,IAAI,CAAC,WAAW,GAAG,YAAY,CAAC,IAAI,CAAC,WAAW,EAAE,QAAQ,CAAC,CAAC;qBAC7D;oBACD,IAAI,QAAQ,GAAG,CAAC,EAAE;wBAChB,IAAI,CAAC,WAAW,GAAG,YAAY,CAAC,IAAI,CAAC,WAAW,EAAE,QAAQ,CAAC,CAAC;qBAC7D;yBAAM,IAAI,QAAQ,GAAG,CAAC,EAAE;wBACvB,IAAI,CAAC,WAAW,GAAG,YAAY,CAAC,IAAI,CAAC,WAAW,EAAE,QAAQ,CAAC,CAAC;qBAC7D;iBACF;aACF;iBAAM,IAAI,IAAI,CAAC,KAAK,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE;gBAClE,MAAM,QAAQ,GAAG,UAAU,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;gBACnD,MAAM,QAAQ,GAAG,UAAU,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;gBACnD,IAAI,CAAC,GAAG,GAAG,YAAY,CAAC,IAAI,CAAC,GAAG,EAAE,YAAY,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC,CAAC;gBACpE,IAAI,IAAI,CAAC,kCAAkC,EAAE;oBAC3C,IAAI,QAAQ,GAAG,CAAC,EAAE;wBAChB,IAAI,CAAC,WAAW,GAAG,YAAY,CAAC,IAAI,CAAC,WAAW,EAAE,QAAQ,CAAC,CAAC;qBAC7D;yBAAM,IAAI,QAAQ,GAAG,CAAC,EAAE;wBACvB,IAAI,CAAC,WAAW,GAAG,YAAY,CAAC,IAAI,CAAC,WAAW,EAAE,QAAQ,CAAC,CAAC;qBAC7D;oBACD,IAAI,QAAQ,GAAG,CAAC,EAAE;wBAChB,IAAI,CAAC,WAAW,GAAG,YAAY,CAAC,IAAI,CAAC,WAAW,EAAE,QAAQ,CAAC,CAAC;qBAC7D;yBAAM,IAAI,QAAQ,GAAG,CAAC,EAAE;wBACvB,IAAI,CAAC,WAAW,GAAG,YAAY,CAAC,IAAI,CAAC,WAAW,EAAE,QAAQ,CAAC,CAAC;qBAC7D;iBACF;aACF;YACD,IAAI,CAAC,eAAe,EAAE,CAAC;SACxB;IACH,CAAC;IACD,KAAK;;QACH,OAAO,CACL,MAAA,IAAI,CAAC,YAAY,mCACjB,CAAC,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,KAAK,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,SAAS,CAAC,CACvG,CAAC;IACJ,CAAC;IACD,aAAa;QACX,OAAO,IAAI,CAAC,WAAW,CAAC;IAC1B,CAAC;IACD,aAAa;QACX,OAAO,IAAI,CAAC,WAAW,CAAC;IAC1B,CAAC;IACD,KAAK;QACH,KAAK,CAAC,KAAK,EAAE,CAAC;QACd,IAAI,CAAC,OAAO,GAAG,EAAE,CAAC;QAClB,IAAI,CAAC,GAAG,GAAG,CAAC,CAAC;IACf,CAAC;IACD,WAAW;QACT,IAAI,CAAC,GAAG,GAAG,CAAC,CAAC;QACb,IAAI,CAAC,cAAc,GAAG,SAAS,CAAC;QAChC,IAAI,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE;YAC7C,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;gBAC7C,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;gBAC/B,IAAI,KAAK,CAAC,YAAY,EAAE;oBACtB,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,EAAE,CAAC;oBAC5B,IAAI,CAAC,GAAG,GAAG,YAAY,CAAC,IAAI,CAAC,GAAG,EAAE,KAAK,aAAL,KAAK,cAAL,KAAK,GAAI,CAAC,CAAC,CAAC;oBAC9C,IAAI,IAAI,CAAC,kCAAkC,EAAE;wBAC3C,IAAI,KAAK,GAAG,CAAC,EAAE;4BACb,IAAI,CAAC,WAAW,GAAG,YAAY,CAAC,IAAI,CAAC,WAAW,EAAE,KAAK,CAAC,CAAC;yBAC1D;6BAAM,IAAI,KAAK,GAAG,CAAC,EAAE;4BACpB,IAAI,CAAC,WAAW,GAAG,YAAY,CAAC,IAAI,CAAC,WAAW,EAAE,KAAK,CAAC,CAAC;yBAC1D;qBACF;iBACF;aACF;SACF;aAAM,IAAI,IAAI,CAAC,OAAO,EAAE;YACvB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;gBAC5C,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;gBAC/B,IAAI,MAAM,CAAC,YAAY,EAAE;oBACvB,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,EAAE,CAAC;oBAC7B,IAAI,CAAC,GAAG,GAAG,YAAY,CAAC,IAAI,CAAC,GAAG,EAAE,KAAK,aAAL,KAAK,cAAL,KAAK,GAAI,CAAC,CAAC,CAAC;oBAC9C,IAAI,IAAI,CAAC,kCAAkC,EAAE;wBAC3C,IAAI,KAAK,GAAG,CAAC,EAAE;4BACb,IAAI,CAAC,WAAW,GAAG,YAAY,CAAC,IAAI,CAAC,WAAW,EAAE,KAAK,CAAC,CAAC;yBAC1D;6BAAM,IAAI,KAAK,GAAG,CAAC,EAAE;4BACpB,IAAI,CAAC,WAAW,GAAG,YAAY,CAAC,IAAI,CAAC,WAAW,EAAE,KAAK,CAAC,CAAC;yBAC1D;qBACF;iBACF;qBAAM,IAAI,IAAI,CAAC,KAAK,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE;oBAC/D,MAAM,KAAK,GAAG,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;oBAC7C,IAAI,CAAC,GAAG,GAAG,YAAY,CAAC,IAAI,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;oBACzC,IAAI,IAAI,CAAC,kCAAkC,EAAE;wBAC3C,IAAI,KAAK,GAAG,CAAC,EAAE;4BACb,IAAI,CAAC,WAAW,GAAG,YAAY,CAAC,IAAI,CAAC,WAAW,EAAE,KAAK,CAAC,CAAC;yBAC1D;6BAAM,IAAI,KAAK,GAAG,CAAC,EAAE;4BACpB,IAAI,CAAC,WAAW,GAAG,YAAY,CAAC,IAAI,CAAC,WAAW,EAAE,KAAK,CAAC,CAAC;yBAC1D;qBACF;iBACF;aACF;SACF;IACH,CAAC;CACF;AAED,MAAM,OAAO,eAAgB,SAAQ,UAAU;IAA/C;;QACE,SAAI,GAAW,eAAe,CAAC,KAAK,CAAC;QACrC,UAAK,GAAG,CAAC,CAAC;IAgGZ,CAAC;IA9FC,IAAI,CAAC,MAAW;QACd,IAAI,MAAM,EAAE;YACV,IAAI,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,OAAO,EAAE;gBACjC,IAAI,MAAM,CAAC,YAAY,EAAE;oBACvB,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,OAAO,CAAC,CAAC;iBACtC;qBAAM;oBACL,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;iBAC3B;aACF;YACD,IAAI,MAAM,CAAC,YAAY,EAAE;gBACvB,IAAI,IAAI,CAAC,QAAQ,EAAE;oBACjB,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;iBAC5B;gBACD,IAAI,CAAC,KAAK,IAAI,MAAM,CAAC,KAAK,EAAE,CAAC;aAC9B;iBAAM;gBACL,IAAI,CAAC,KAAK,EAAE,CAAC;aACd;SACF;QACD,IAAI,CAAC,eAAe,EAAE,CAAC;IACzB,CAAC;IACD,YAAY,CAAC,MAAW;QACtB,IAAI,MAAM,EAAE;YACV,IAAI,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,OAAO,EAAE;gBACjC,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,KAAK,MAAM,CAAC,CAAC;aAC7D;YACD,IAAI,MAAM,CAAC,YAAY,EAAE;gBACvB,IAAI,IAAI,CAAC,QAAQ,EAAE;oBACjB,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,KAAK,MAAM,CAAC,CAAC;iBAC/D;gBACD,IAAI,CAAC,KAAK,IAAI,MAAM,CAAC,KAAK,EAAE,CAAC;aAC9B;iBAAM;gBACL,IAAI,CAAC,KAAK,EAAE,CAAC;aACd;SACF;QACD,IAAI,CAAC,eAAe,EAAE,CAAC;IACzB,CAAC;IACD,YAAY,CAAC,SAAc,EAAE,SAAc;QACzC,IAAI,SAAS,IAAI,SAAS,EAAE;YAC1B,IAAI,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,OAAO,EAAE;gBACjC,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE;oBACrC,IAAI,IAAI,KAAK,SAAS,EAAE;wBACtB,OAAO,SAAS,CAAC;qBAClB;oBACD,OAAO,IAAI,CAAC;gBACd,CAAC,CAAC,CAAC;aACJ;YACD,IAAI,SAAS,CAAC,YAAY,EAAE;gBAC1B,IAAI,CAAC,KAAK,IAAI,SAAS,CAAC,KAAK,EAAE,GAAG,SAAS,CAAC,KAAK,EAAE,CAAC;aACrD;iBAAM;aAEN;YACD,IAAI,SAAS,CAAC,YAAY,IAAI,SAAS,CAAC,YAAY,IAAI,IAAI,CAAC,QAAQ,EAAE;gBACrE,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE;oBACvC,IAAI,IAAI,KAAK,SAAS,EAAE;wBACtB,OAAO,SAAS,CAAC;qBAClB;oBACD,OAAO,IAAI,CAAC;gBACd,CAAC,CAAC,CAAC;aACJ;SACF;IACH,CAAC;IACD,KAAK;;QACH,OAAO,MAAA,IAAI,CAAC,YAAY,mCAAI,IAAI,CAAC,KAAK,CAAC;IACzC,CAAC;IACD,KAAK;QACH,IAAI,CAAC,YAAY,GAAG,SAAS,CAAC;QAC9B,IAAI,CAAC,QAAQ,GAAG,EAAE,CAAC;QACnB,IAAI,CAAC,OAAO,GAAG,EAAE,CAAC;QAClB,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC;IACjB,CAAC;IACD,WAAW;QACT,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC;QACf,IAAI,CAAC,cAAc,GAAG,SAAS,CAAC;QAChC,IAAI,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE;YAC7C,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;gBAC7C,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;gBAC/B,IAAI,KAAK,CAAC,YAAY,EAAE;oBACtB,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,EAAE,CAAC;oBAC5B,IAAI,CAAC,KAAK,IAAI,KAAK,aAAL,KAAK,cAAL,KAAK,GAAI,CAAC,CAAC;iBAC1B;qBAAM;oBACL,IAAI,CAAC,KAAK,EAAE,CAAC;iBACd;aACF;SACF;aAAM,IAAI,IAAI,CAAC,OAAO,EAAE;YACvB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;gBAC5C,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;gBAC/B,IAAI,MAAM,CAAC,YAAY,EAAE;oBACvB,IAAI,CAAC,KAAK,IAAI,MAAM,CAAC,KAAK,EAAE,CAAC;iBAC9B;qBAAM;oBACL,IAAI,CAAC,KAAK,EAAE,CAAC;iBACd;aACF;SACF;IACH,CAAC;CACF;AACD,MAAM,OAAO,aAAc,SAAQ,UAAU;IAA7C;;QACE,SAAI,GAAW,eAAe,CAAC,GAAG,CAAC;QACnC,QAAG,GAAG,CAAC,CAAC;QACR,UAAK,GAAG,CAAC,CAAC;IAsHZ,CAAC;IApHC,IAAI,CAAC,MAAW;QACd,IAAI,MAAM,EAAE;YACV,IAAI,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,OAAO,EAAE;gBACjC,IAAI,MAAM,CAAC,YAAY,EAAE;oBACvB,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,OAAO,CAAC,CAAC;iBACtC;qBAAM;oBACL,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;iBAC3B;aACF;YACD,IAAI,MAAM,CAAC,YAAY,IAAI,MAAM,CAAC,IAAI,KAAK,eAAe,CAAC,GAAG,EAAE;gBAC9D,IAAI,IAAI,CAAC,QAAQ,EAAE;oBACjB,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;iBAC5B;gBACD,IAAI,CAAC,GAAG,GAAG,YAAY,CAAC,IAAI,CAAC,GAAG,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC;gBAC9C,IAAI,CAAC,KAAK,IAAI,MAAM,CAAC,KAAK,CAAC;aAC5B;iBAAM,IAAI,IAAI,CAAC,KAAK,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE;gBAC/D,IAAI,CAAC,GAAG,GAAG,YAAY,CAAC,IAAI,CAAC,GAAG,EAAE,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;gBAClE,IAAI,CAAC,KAAK,EAAE,CAAC;aACd;SACF;QACD,IAAI,CAAC,eAAe,EAAE,CAAC;IACzB,CAAC;IACD,YAAY,CAAC,MAAW;QACtB,IAAI,MAAM,EAAE;YACV,IAAI,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,OAAO,EAAE;gBACjC,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;gBAC3C,IAAI,KAAK,KAAK,CAAC,CAAC,EAAE;oBAChB,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;iBAC/B;aACF;YACD,IAAI,MAAM,CAAC,YAAY,IAAI,MAAM,CAAC,IAAI,KAAK,eAAe,CAAC,GAAG,EAAE;gBAC9D,IAAI,IAAI,CAAC,QAAQ,EAAE;oBACjB,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;oBAC5C,IAAI,KAAK,KAAK,CAAC,CAAC,EAAE;wBAChB,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;qBAChC;iBACF;gBACD,IAAI,CAAC,GAAG,GAAG,YAAY,CAAC,IAAI,CAAC,GAAG,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC;gBAC9C,IAAI,CAAC,KAAK,IAAI,MAAM,CAAC,KAAK,CAAC;aAC5B;iBAAM,IAAI,IAAI,CAAC,KAAK,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE;gBAC/D,IAAI,CAAC,GAAG,GAAG,YAAY,CAAC,IAAI,CAAC,GAAG,EAAE,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;gBAClE,IAAI,CAAC,KAAK,EAAE,CAAC;aACd;SACF;QACD,IAAI,CAAC,eAAe,EAAE,CAAC;IACzB,CAAC;IACD,YAAY,CAAC,SAAc,EAAE,SAAc;QACzC,IAAI,SAAS,IAAI,SAAS,EAAE;YAC1B,IAAI,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,OAAO,EAAE;gBACjC,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;gBAC9C,IAAI,KAAK,KAAK,CAAC,CAAC,EAAE;oBAChB,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,SAAS,CAAC;iBACjC;aACF;YACD,IAAI,SAAS,CAAC,YAAY,IAAI,SAAS,CAAC,IAAI,KAAK,eAAe,CAAC,GAAG,EAAE;gBACpE,IAAI,IAAI,CAAC,QAAQ,IAAI,SAAS,CAAC,YAAY,EAAE;oBAC3C,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;oBAC/C,IAAI,KAAK,KAAK,CAAC,CAAC,EAAE;wBAChB,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,GAAG,SAAS,CAAC;qBAClC;iBACF;gBACD,IAAI,CAAC,GAAG,GAAG,YAAY,CAAC,IAAI,CAAC,GAAG,EAAE,YAAY,CAAC,SAAS,CAAC,GAAG,EAAE,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC;gBAC9E,IAAI,CAAC,KAAK,IAAI,SAAS,CAAC,KAAK,GAAG,SAAS,CAAC,KAAK,CAAC;aACjD;iBAAM,IAAI,IAAI,CAAC,KAAK,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE;gBAClE,IAAI,CAAC,GAAG,GAAG,YAAY,CACrB,IAAI,CAAC,GAAG,EACR,YAAY,CAAC,UAAU,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,UAAU,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CACnF,CAAC;aAEH;YACD,IAAI,CAAC,eAAe,EAAE,CAAC;SACxB;IACH,CAAC;IACD,KAAK;;QACH,OAAO,CACL,MAAA,IAAI,CAAC,YAAY,mCACjB,CAAC,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM,IAAI,CAAC;YACvC,CAAC,CAAC,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,KAAK;YACvB,CAAC,CAAC,IAAI,CAAC,QAAQ,KAAK,KAAK,IAAI,IAAI,CAAC,KAAK,GAAG,CAAC;gBAC3C,CAAC,CAAC,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,KAAK;gBACvB,CAAC,CAAC,SAAS,CAAC,CACf,CAAC;IACJ,CAAC;IACD,KAAK;QACH,IAAI,CAAC,YAAY,GAAG,SAAS,CAAC;QAC9B,IAAI,CAAC,QAAQ,GAAG,EAAE,CAAC;QACnB,IAAI,CAAC,OAAO,GAAG,EAAE,CAAC;QAClB,IAAI,CAAC,GAAG,GAAG,CAAC,CAAC;QACb,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC;IACjB,CAAC;IACD,WAAW;QACT,IAAI,CAAC,GAAG,GAAG,CAAC,CAAC;QACb,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC;QACf,IAAI,CAAC,cAAc,GAAG,SAAS,CAAC;QAChC,IAAI,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE;YAC7C,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;gBAC7C,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;gBAC/B,IAAI,KAAK,CAAC,YAAY,IAAI,KAAK,CAAC,IAAI,KAAK,eAAe,CAAC,GAAG,EAAE;oBAC5D,MAAM,UAAU,GAAG,KAAK,CAAC,KAAK,EAAE,CAAC;oBACjC,IAAI,CAAC,GAAG,GAAG,YAAY,CAAC,IAAI,CAAC,GAAG,EAAE,UAAU,GAAI,KAAuB,CAAC,KAAK,CAAC,CAAC;oBAC/E,IAAI,CAAC,KAAK,IAAK,KAAuB,CAAC,KAAK,CAAC;iBAC9C;aACF;SACF;aAAM,IAAI,IAAI,CAAC,OAAO,EAAE;YACvB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;gBAC5C,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;gBAC/B,IAAI,MAAM,CAAC,YAAY,IAAI,MAAM,CAAC,IAAI,KAAK,eAAe,CAAC,GAAG,EAAE;oBAC9D,IAAI,CAAC,GAAG,GAAG,YAAY,CAAC,IAAI,CAAC,GAAG,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC;oBAC9C,IAAI,CAAC,KAAK,IAAI,MAAM,CAAC,KAAK,CAAC;iBAC5B;qBAAM,IAAI,IAAI,CAAC,KAAK,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE;oBAC/D,IAAI,CAAC,GAAG,GAAG,YAAY,CAAC,IAAI,CAAC,GAAG,EAAE,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;oBAClE,IAAI,CAAC,KAAK,EAAE,CAAC;iBACd;aACF;SACF;IACH,CAAC;CACF;AACD,MAAM,OAAO,aAAc,SAAQ,UAAU;IAA7C;;QACE,SAAI,GAAW,eAAe,CAAC,GAAG,CAAC;QACnC,QAAG,GAAW,MAAM,CAAC,gBAAgB,CAAC;IAiGxC,CAAC;IA/FC,IAAI,CAAC,MAAW;QACd,IAAI,MAAM,EAAE;YACV,IAAI,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,OAAO,EAAE;gBACjC,IAAI,MAAM,CAAC,YAAY,EAAE;oBACvB,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,OAAO,CAAC,CAAC;iBACtC;qBAAM;oBACL,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;iBAC3B;aACF;YACD,IAAI,MAAM,CAAC,YAAY,EAAE;gBACvB,IAAI,IAAI,CAAC,QAAQ,EAAE;oBACjB,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;iBAC5B;gBACD,IAAI,CAAC,GAAG,GAAG,MAAM,CAAC,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC;aAC1D;iBAAM,IAAI,OAAO,MAAM,KAAK,QAAQ,EAAE;gBACrC,IAAI,CAAC,GAAG,GAAG,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC;aAClD;iBAAM,IAAI,IAAI,CAAC,KAAK,IAAI,OAAO,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,QAAQ,EAAE;gBAC/D,IAAI,CAAC,GAAG,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC;aAC1E;iBAAM,IAAI,IAAI,CAAC,KAAK,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE;gBACnD,IAAI,CAAC,GAAG,GAAG,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC;aAClG;SACF;QACD,IAAI,CAAC,eAAe,EAAE,CAAC;IACzB,CAAC;IACD,YAAY,CAAC,MAAW;QACtB,IAAI,MAAM,EAAE;YACV,IAAI,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,OAAO,EAAE;gBACjC,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,KAAK,MAAM,CAAC,CAAC;aAC7D;YACD,IAAI,MAAM,CAAC,YAAY,EAAE;gBACvB,IAAI,IAAI,CAAC,QAAQ,EAAE;oBACjB,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,KAAK,MAAM,CAAC,CAAC;iBAC/D;aACF;YACD,IAAI,CAAC,WAAW,EAAE,CAAC;SACpB;IACH,CAAC;IACD,YAAY,CAAC,SAAc,EAAE,SAAc;QACzC,IAAI,SAAS,IAAI,SAAS,EAAE;YAC1B,IAAI,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,OAAO,EAAE;gBACjC,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE;oBACrC,IAAI,IAAI,KAAK,SAAS,EAAE;wBACtB,OAAO,SAAS,CAAC;qBAClB;oBACD,OAAO,IAAI,CAAC;gBACd,CAAC,CAAC,CAAC;aACJ;YACD,IAAI,SAAS,CAAC,YAAY,IAAI,SAAS,CAAC,YAAY,EAAE;gBACpD,IAAI,IAAI,CAAC,QAAQ,EAAE;oBACjB,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE;wBACvC,IAAI,IAAI,KAAK,SAAS,EAAE;4BACtB,OAAO,SAAS,CAAC;yBAClB;wBACD,OAAO,IAAI,CAAC;oBACd,CAAC,CAAC,CAAC;iBACJ;aACF;YACD,IAAI,CAAC,WAAW,EAAE,CAAC;SACpB;IACH,CAAC;IACD,KAAK;;QACH,OAAO,MAAA,IAAI,CAAC,YAAY,mCAAI,CAAC,CAAA,MAAA,IAAI,CAAC,OAAO,0CAAE,MAAM,KAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;IACjF,CAAC;IACD,KAAK;QACH,IAAI,CAAC,OAAO,GAAG,EAAE,CAAC;QAClB,IAAI,CAAC,YAAY,GAAG,SAAS,CAAC;QAC9B,IAAI,CAAC,QAAQ,GAAG,EAAE,CAAC;QACnB,IAAI,CAAC,GAAG,GAAG,MAAM,CAAC,gBAAgB,CAAC;IACrC,CAAC;IACD,WAAW;QACT,IAAI,CAAC,GAAG,GAAG,MAAM,CAAC,gBAAgB,CAAC;QACnC,IAAI,CAAC,cAAc,GAAG,SAAS,CAAC;QAChC,IAAI,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE;YAC7C,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;gBAC7C,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;gBAC/B,IAAI,KAAK,CAAC,YAAY,EAAE;oBACtB,MAAM,UAAU,GAAG,KAAK,CAAC,KAAK,EAAE,CAAC;oBACjC,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,EAAE,UAAU,CAAC,CAAC;iBAC3C;aACF;SACF;aAAM,IAAI,IAAI,CAAC,OAAO,EAAE;YACvB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;gBAC5C,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;gBAC/B,IAAI,MAAM,CAAC,YAAY,EAAE;oBACvB,IAAI,CAAC,GAAG,GAAG,MAAM,CAAC,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC;iBAC1D;qBAAM,IAAI,OAAO,MAAM,KAAK,QAAQ,EAAE;oBACrC,IAAI,CAAC,GAAG,GAAG,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC;iBAClD;qBAAM,IAAI,IAAI,CAAC,KAAK,IAAI,OAAO,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,QAAQ,EAAE;oBAC/D,IAAI,CAAC,GAAG,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC;iBAC1E;qBAAM,IAAI,IAAI,CAAC,KAAK,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE;oBACnD,IAAI,CAAC,GAAG,GAAG,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC;iBAClG;aACF;SACF;IACH,CAAC;CACF;AACD,MAAM,OAAO,aAAc,SAAQ,UAAU;IAA7C;;QACE,SAAI,GAAW,eAAe,CAAC,GAAG,CAAC;QACnC,QAAG,GAAW,MAAM,CAAC,gBAAgB,CAAC;IAiGxC,CAAC;IA/FC,IAAI,CAAC,MAAW;QACd,IAAI,MAAM,EAAE;YACV,IAAI,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,OAAO,EAAE;gBACjC,IAAI,MAAM,CAAC,YAAY,EAAE;oBACvB,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,OAAO,CAAC,CAAC;iBACtC;qBAAM;oBACL,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;iBAC3B;aACF;YACD,IAAI,MAAM,CAAC,YAAY,EAAE;gBACvB,IAAI,IAAI,CAAC,QAAQ,EAAE;oBACjB,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;iBAC5B;gBACD,IAAI,CAAC,GAAG,GAAG,MAAM,CAAC,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC;aAC1D;iBAAM,IAAI,OAAO,MAAM,KAAK,QAAQ,EAAE;gBACrC,IAAI,CAAC,GAAG,GAAG,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC;aAClD;iBAAM,IAAI,IAAI,CAAC,KAAK,IAAI,OAAO,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,QAAQ,EAAE;gBAC/D,IAAI,CAAC,GAAG,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC;aAC1E;iBAAM,IAAI,IAAI,CAAC,KAAK,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE;gBACnD,IAAI,CAAC,GAAG,GAAG,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC;aAClG;SACF;QACD,IAAI,CAAC,eAAe,EAAE,CAAC;IACzB,CAAC;IACD,YAAY,CAAC,MAAW;QACtB,IAAI,MAAM,EAAE;YACV,IAAI,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,OAAO,EAAE;gBACjC,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,KAAK,MAAM,CAAC,CAAC;aAC7D;YACD,IAAI,MAAM,CAAC,YAAY,EAAE;gBACvB,IAAI,IAAI,CAAC,QAAQ,EAAE;oBACjB,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,KAAK,MAAM,CAAC,CAAC;iBAC/D;aACF;YACD,IAAI,CAAC,WAAW,EAAE,CAAC;SACpB;IACH,CAAC;IACD,YAAY,CAAC,SAAc,EAAE,SAAc;QACzC,IAAI,SAAS,IAAI,SAAS,EAAE;YAC1B,IAAI,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,OAAO,EAAE;gBACjC,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE;oBACrC,IAAI,IAAI,KAAK,SAAS,EAAE;wBACtB,OAAO,SAAS,CAAC;qBAClB;oBACD,OAAO,IAAI,CAAC;gBACd,CAAC,CAAC,CAAC;aACJ;YACD,IAAI,SAAS,CAAC,YAAY,IAAI,SAAS,CAAC,YAAY,EAAE;gBACpD,IAAI,IAAI,CAAC,QAAQ,EAAE;oBACjB,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE;wBACvC,IAAI,IAAI,KAAK,SAAS,EAAE;4BACtB,OAAO,SAAS,CAAC;yBAClB;wBACD,OAAO,IAAI,CAAC;oBACd,CAAC,CAAC,CAAC;iBACJ;aACF;YACD,IAAI,CAAC,WAAW,EAAE,CAAC;SACpB;IACH,CAAC;IACD,KAAK;;QACH,OAAO,MAAA,IAAI,CAAC,YAAY,mCAAI,CAAC,CAAA,MAAA,IAAI,CAAC,OAAO,0CAAE,MAAM,KAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;IACjF,CAAC;IACD,KAAK;QACH,IAAI,CAAC,OAAO,GAAG,EAAE,CAAC;QAClB,IAAI,CAAC,YAAY,GAAG,SAAS,CAAC;QAC9B,IAAI,CAAC,QAAQ,GAAG,EAAE,CAAC;QACnB,IAAI,CAAC,GAAG,GAAG,MAAM,CAAC,gBAAgB,CAAC;IACrC,CAAC;IACD,WAAW;QACT,IAAI,CAAC,GAAG,GAAG,MAAM,CAAC,gBAAgB,CAAC;QACnC,IAAI,CAAC,cAAc,GAAG,SAAS,CAAC;QAChC,IAAI,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE;YAC7C,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;gBAC7C,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;gBAC/B,IAAI,KAAK,CAAC,YAAY,EAAE;oBACtB,MAAM,UAAU,GAAG,KAAK,CAAC,KAAK,EAAE,CAAC;oBACjC,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,EAAE,UAAU,CAAC,CAAC;iBAC3C;aACF;SACF;aAAM,IAAI,IAAI,CAAC,OAAO,EAAE;YACvB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;gBAC5C,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;gBAC/B,IAAI,MAAM,CAAC,YAAY,EAAE;oBACvB,IAAI,CAAC,GAAG,GAAG,MAAM,CAAC,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC;iBAC1D;qBAAM,IAAI,OAAO,MAAM,KAAK,QAAQ,EAAE;oBACrC,IAAI,CAAC,GAAG,GAAG,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC;iBAClD;qBAAM,IAAI,IAAI,CAAC,KAAK,IAAI,OAAO,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,QAAQ,EAAE;oBAC/D,IAAI,CAAC,GAAG,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC;iBAC1E;qBAAM,IAAI,IAAI,CAAC,KAAK,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE;oBACnD,IAAI,CAAC,GAAG,GAAG,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC;iBAClG;aACF;SACF;IACH,CAAC;CACF;AACD,MAAM,UAAU,aAAa,CAAC,CAAM,EAAE,CAAM;IAC1C,IAAI,CAAC,IAAI,CAAC,EAAE;QAEV,OAAO,CAAC,CAAC,QAAQ,EAAE,CAAC,aAAa,CAAC,CAAC,CAAC,QAAQ,EAAE,EAAE,IAAI,CAAC,CAAC;KACvD;IACD,IAAI,CAAC,EAAE;QACL,OAAO,CAAC,CAAC;KACV;IACD,OAAO,CAAC,CAAC,CAAC;AACZ,CAAC;AACD,MAAM,UAAU,QAAQ,CAAC,CAAM,EAAE,CAAM,EAAE,QAAkB;IACzD,IAAI,QAAQ,KAAK,QAAQ,CAAC,MAAM,IAAI,QAAQ,KAAK,QAAQ,CAAC,MAAM,EAAE;QAChE,OAAO,CAAC,CAAC;KACV;IACD,MAAM,MAAM,GAAG,QAAQ,KAAK,QAAQ,CAAC,IAAI,IAAI,QAAQ,KAAK,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACjF,IAAI,CAAC,IAAI,CAAC,EAAE;QAEV,OAAO,CAAC,CAAC,QAAQ,EAAE,CAAC,aAAa,CAAC,CAAC,CAAC,QAAQ,EAAE,EAAE,IAAI,CAAC,GAAG,MAAM,CAAC;KAChE;IACD,IAAI,CAAC,EAAE;QACL,OAAO,CAAC,GAAG,MAAM,CAAC;KACnB;IACD,OAAO,CAAC,CAAC,GAAG,MAAM,CAAC;AACrB,CAAC;AACD,MAAM,UAAU,WAAW,CAAC,EAAO,EAAE,EAAO,EAAE,QAAkB;IAC9D,IAAI,QAAQ,KAAK,QAAQ,CAAC,MAAM,IAAI,QAAQ,KAAK,QAAQ,CAAC,MAAM,EAAE;QAChE,OAAO,CAAC,CAAC;KACV;IAED,MAAM,EAAE,GAAG,cAAc,CAAC;IAC1B,MAAM,EAAE,GAAG,IAAI,CAAC;IAChB,MAAM,EAAE,GAAG,IAAI,CAAC;IAChB,IAAI,CAAC,CAAC;IACN,IAAI,EAAE,CAAC;IACP,IAAI,CAAC,CAAC;IACN,IAAI,EAAE,CAAC;IACP,IAAI,GAAG,GAAG,CAAC,CAAC;IACZ,IAAI,GAAG,GAAG,CAAC,CAAC;IACZ,MAAM,MAAM,GAAG,QAAQ,KAAK,QAAQ,CAAC,IAAI,IAAI,QAAQ,KAAK,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACjF,IAAI,EAAE,KAAK,IAAI,IAAI,EAAE,KAAK,IAAI,EAAE;QAC9B,OAAO,CAAC,CAAC,GAAG,MAAM,CAAC;KACpB;IACD,IAAI,EAAE,KAAK,IAAI,IAAI,EAAE,KAAK,IAAI,EAAE;QAC9B,OAAO,CAAC,GAAG,MAAM,CAAC;KACnB;IACD,IAAI,OAAO,EAAE,KAAK,QAAQ,IAAI,KAAK,CAAC,EAAE,CAAC,EAAE;QACvC,OAAO,CAAC,CAAC,GAAG,MAAM,CAAC;KACpB;IACD,IAAI,OAAO,EAAE,KAAK,QAAQ,IAAI,KAAK,CAAC,EAAE,CAAC,EAAE;QACvC,OAAO,CAAC,GAAG,MAAM,CAAC;KACnB;IACD,GAAG,GAAG,CAAC,EAAE,CAAC;IACV,GAAG,GAAG,CAAC,EAAE,CAAC;IACV,IAAI,GAAG,GAAG,GAAG,EAAE;QACb,OAAO,CAAC,CAAC,GAAG,MAAM,CAAC;KACpB;IACD,IAAI,GAAG,GAAG,GAAG,EAAE;QACb,OAAO,CAAC,GAAG,MAAM,CAAC;KACnB;IACD,IAAI,OAAO,EAAE,KAAK,QAAQ,IAAI,OAAO,EAAE,KAAK,QAAQ,EAAE;QACpD,OAAO,CAAC,CAAC,GAAG,MAAM,CAAC;KACpB;IACD,IAAI,OAAO,EAAE,KAAK,QAAQ,IAAI,OAAO,EAAE,KAAK,QAAQ,EAAE;QACpD,OAAO,CAAC,GAAG,MAAM,CAAC;KACnB;IACD,IAAI,OAAO,EAAE,KAAK,QAAQ,IAAI,OAAO,EAAE,KAAK,QAAQ,EAAE;QACpD,OAAO,CAAC,CAAC;KACV;IACD,IAAI,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE;QAC7B,OAAO,CAAC,CAAC,GAAG,MAAM,CAAC;KACpB;IACD,IAAI,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE;QAC7B,OAAO,CAAC,GAAG,MAAM,CAAC;KACnB;IACD,CAAC,GAAG,MAAM,CAAC,EAAE,CAAC,CAAC;IACf,CAAC,GAAG,MAAM,CAAC,EAAE,CAAC,CAAC;IACf,IAAI,CAAC,KAAK,CAAC,EAAE;QACX,OAAO,CAAC,CAAC;KACV;IACD,IAAI,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE;QAC/B,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC;KAClC;IACD,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;IAChB,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;IAChB,OAAO,CAAC,CAAC,MAAM,IAAI,CAAC,CAAC,MAAM,EAAE;QAC3B,EAAE,GAAG,CAAC,CAAC,KAAK,EAAE,CAAC;QACf,EAAE,GAAG,CAAC,CAAC,KAAK,EAAE,CAAC;QACf,IAAI,EAAE,KAAK,EAAE,EAAE;YACb,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE;gBAC9B,OAAO,CAAM,EAAE,CAAC,OAAO,CAAC,EAAE,EAAE,IAAI,CAAC,GAAQ,EAAE,CAAC,OAAO,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC,GAAG,MAAM,CAAC;aACzE;YACD,OAAO,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC;SACpC;KACF;IACD,OAAO,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,MAAM,CAAC,GAAG,MAAM,CAAC;AACxC,CAAC;AACD,MAAM,UAAU,MAAM,CAAC,KAAe;IACpC,IAAI,CAAC,CAAC;IACN,IAAI,CAAC,CAAC;IACN,MAAM,OAAO,GAAQ,EAAE,CAAC;IACxB,MAAM,iBAAiB,GAAQ,EAAE,CAAC;IAElC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;QACrC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;QACb,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;QACf,IAAI,OAAO,CAAC,KAAK,QAAQ,EAAE;YACzB,iBAAiB,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,GAAG,CAAC,CAAC;SACxC;KACF;IACD,OAAO,UAAU,CAAM,EAAE,CAAM,EAAE,QAAkB;QACjD,IAAI,QAAQ,KAAK,QAAQ,CAAC,MAAM,IAAI,QAAQ,KAAK,QAAQ,CAAC,MAAM,EAAE;YAChE,OAAO,CAAC,CAAC;SACV;QACD,MAAM,MAAM,GAAG,QAAQ,KAAK,QAAQ,CAAC,IAAI,IAAI,QAAQ,KAAK,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACjF,IAAI,UAAU,CAAC;QACf,IAAI,OAAO,CAAC,CAAC,CAAC,KAAK,IAAI,IAAI,OAAO,CAAC,CAAC,CAAC,KAAK,SAAS,IAAI,OAAO,CAAC,CAAC,CAAC,KAAK,IAAI,IAAI,OAAO,CAAC,CAAC,CAAC,KAAK,SAAS,EAAE;YACtG,UAAU,GAAG,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;SACtC;aAAM,IAAI,OAAO,CAAC,CAAC,CAAC,KAAK,IAAI,IAAI,OAAO,CAAC,CAAC,CAAC,KAAK,SAAS,EAAE;YAC1D,UAAU,GAAG,CAAC,CAAC,CAAC;SACjB;aAAM,IAAI,OAAO,CAAC,CAAC,CAAC,KAAK,IAAI,IAAI,OAAO,CAAC,CAAC,CAAC,KAAK,SAAS,EAAE;YAC1D,UAAU,GAAG,CAAC,CAAC;SAChB;aAAM,IACL,iBAAiB,CAAC,CAAC,CAAC,KAAK,IAAI;YAC7B,OAAO,CAAC,CAAC,CAAC,KAAK,SAAS;YACxB,iBAAiB,CAAC,CAAC,CAAC,KAAK,IAAI;YAC7B,OAAO,CAAC,CAAC,CAAC,KAAK,SAAS,EACxB;YACA,UAAU,GAAG,iBAAiB,CAAC,CAAC,CAAC,GAAG,iBAAiB,CAAC,CAAC,CAAC,CAAC;SAC1D;aAAM,IACL,iBAAiB,CAAC,CAAC,CAAC,KAAK,IAAI;YAC7B,OAAO,CAAC,CAAC,CAAC,KAAK,SAAS;YACxB,iBAAiB,CAAC,CAAC,CAAC,KAAK,IAAI;YAC7B,OAAO,CAAC,CAAC,CAAC,KAAK,SAAS,EACxB;YACA,UAAU,GAAG,CAAC,CAAC;SAChB;aAAM,IAAI,iBAAiB,CAAC,CAAC,CAAC,KAAK,IAAI,IAAI,OAAO,CAAC,CAAC,CAAC,KAAK,SAAS,EAAE;YACpE,UAAU,GAAG,CAAC,CAAC,CAAC;SACjB;aAAM,IAAI,iBAAiB,CAAC,CAAC,CAAC,KAAK,IAAI,IAAI,OAAO,CAAC,CAAC,CAAC,KAAK,SAAS,EAAE;YACpE,UAAU,GAAG,CAAC,CAAC;SAChB;QACD,IAAI,OAAO,CAAC,UAAU,CAAC,EAAE;YACvB,OAAO,UAAU,GAAG,MAAM,CAAC;SAC5B;QAED,OAAO,WAAW,CAAC,CAAC,EAAE,CAAC,EAAE,QAAQ,CAAC,CAAC;IACrC,CAAC,CAAC;AACJ,CAAC;AAED,SAAS,0BAA0B,CAAC,WAAyB,EAAE,mBAA6B;IAC1F,MAAM,sBAAsB,GAAQ,EAAE,CAAC;IACvC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,IAAG,mBAAmB,aAAnB,mBAAmB,uBAAnB,mBAAmB,CAAE,MAAM,CAAA,EAAE,CAAC,EAAE,EAAE;QACpD,MAAM,QAAQ,GAAG,WAAW,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAA,QAAQ,aAAR,QAAQ,uBAAR,QAAQ,CAAE,GAAG,MAAK,mBAAmB,CAAC,CAAC,CAAC,CAAC,CAAC;QACxF,IAAI,QAAQ,EAAE;YACZ,sBAAsB,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,QAAQ,aAAR,QAAQ,uBAAR,QAAQ,CAAE,KAAK,EAAE,CAAC;SAC1D;KACF;IACD,OAAO,sBAAsB,CAAC;AAChC,CAAC","file":"aggregation.js","sourcesContent":["import { isValid, precisionAdd, precisionSub } from '@visactor/vutils';\nimport type { SortOrder } from '..';\nimport { AggregationType, SortType } from '..';\nimport type { BaseTableAPI } from '../base-table';\n\nexport const registeredAggregators: {\n [key: string]: {\n new (args: {\n key?: string;\n field: string | string[];\n aggregationFun?: any;\n formatFun?: any;\n isRecord?: boolean;\n needSplitPositiveAndNegative?: boolean;\n calculateFun?: any;\n dependAggregators?: any;\n dependIndicatorKeys?: string[];\n }): Aggregator;\n };\n} = {};\n\nexport interface IAggregator {\n records: any[];\n value: () => any;\n push: (record: any) => void;\n deleteRecord: (record: any) => void;\n updateRecord: (oldRecord: any, newRecord: any) => void;\n recalculate: () => any;\n formatValue?: (col?: number, row?: number, table?: BaseTableAPI) => any;\n formatFun?: () => any;\n clearCacheValue: () => any;\n reset: () => void;\n}\nexport abstract class Aggregator implements IAggregator {\n isAggregator?: boolean = true;\n isRecord?: boolean = true; //是否需要维护records 将数据源都记录下来\n records: any[] = [];\n type?: string;\n key: string;\n field?: string | string[];\n formatFun?: any;\n changedValue?: any;\n children?: Aggregator[] = [];\n _formatedValue?: any;\n\n constructor(config: { key: string; field: string | string[]; formatFun?: any; isRecord?: boolean }) {\n this.key = config.key;\n this.field = config.field;\n this.formatFun = config.formatFun;\n this.isRecord = config.isRecord ?? this.isRecord;\n }\n abstract push(record: any): void;\n abstract deleteRecord(record: any): void;\n abstract updateRecord(oldRecord: any, newRecord: any): void;\n abstract value(): any;\n abstract recalculate(): any;\n clearCacheValue() {\n this._formatedValue = undefined;\n }\n formatValue(col?: number, row?: number, table?: BaseTableAPI) {\n if (!this._formatedValue) {\n if (this.formatFun) {\n this._formatedValue = this.formatFun(this.value(), col, row, table);\n } else {\n this._formatedValue = this.value();\n }\n }\n return this._formatedValue;\n }\n reset() {\n this.records = [];\n this.changedValue = undefined;\n this.children = [];\n this.clearCacheValue();\n }\n}\nexport class RecordAggregator extends Aggregator {\n type: string = AggregationType.RECORD;\n isRecord?: boolean = true;\n push(record: any): void {\n if (record && this.isRecord && this.records) {\n if (record.isAggregator) {\n this.records.push(...record.records);\n } else {\n this.records.push(record);\n }\n }\n\n if (record.isAggregator && this.children) {\n this.children.push(record);\n }\n this.clearCacheValue();\n }\n deleteRecord(record: any) {\n if (record) {\n if (this.isRecord && this.records) {\n this.records = this.records.filter(item => item !== record);\n }\n\n if (record.isAggregator && this.children) {\n this.children = this.children.filter(item => item !== record);\n }\n }\n this.clearCacheValue();\n }\n updateRecord(oldRecord: any, newRecord: any): void {\n if (oldRecord && newRecord) {\n if (this.isRecord && this.records) {\n this.records = this.records.map(item => {\n if (item === oldRecord) {\n return newRecord;\n }\n return item;\n });\n }\n\n if (oldRecord.isAggregator && newRecord.isAggregator && this.children) {\n this.children = this.children.map(item => {\n if (item === oldRecord) {\n return newRecord;\n }\n return item;\n });\n }\n this.clearCacheValue();\n }\n }\n value() {\n return this.changedValue ?? this.records;\n }\n reset() {\n this.children = [];\n this.changedValue = undefined;\n this.records = [];\n }\n recalculate() {\n // do nothing\n }\n}\n\nexport class NoneAggregator extends Aggregator {\n type: string = AggregationType.NONE; //仅获取其中一条数据(最新push的一条) 不做聚合 其fieldValue可以是number或者string类型\n isRecord?: boolean = true;\n declare field?: string;\n fieldValue?: any;\n push(record: any): void {\n if (record) {\n if (this.isRecord) {\n this.records = [record];\n }\n if (record.isAggregator && this.children) {\n this.children = [record];\n }\n if (this.field) {\n this.fieldValue = record[this.field];\n }\n }\n this.clearCacheValue();\n }\n deleteRecord(record: any) {\n if (record) {\n if (this.isRecord && this.records) {\n this.records = this.records.filter(item => item !== record);\n }\n\n if (record.isAggregator && this.children) {\n this.children = this.children.filter(item => item !== record);\n }\n if (this.field && this.records.length) {\n this.fieldValue = this.records[this.records.length - 1][this.field];\n }\n }\n this.clearCacheValue();\n }\n updateRecord(oldRecord: any, newRecord: any): void {\n if (oldRecord && newRecord) {\n if (this.isRecord && this.records) {\n this.records = this.records.map(item => {\n if (item === oldRecord) {\n return newRecord;\n }\n return item;\n });\n }\n if (oldRecord.isAggregator && newRecord.isAggregator && this.children) {\n this.children = this.children.map(item => {\n if (item === oldRecord) {\n return newRecord;\n }\n return item;\n });\n }\n if (this.field && this.records.length) {\n this.fieldValue = this.records[this.records.length - 1][this.field];\n }\n this.clearCacheValue();\n }\n }\n value() {\n return this.changedValue ?? this.fieldValue;\n }\n reset() {\n this.children = [];\n this.changedValue = undefined;\n this.records = [];\n this.fieldValue = undefined;\n }\n recalculate() {\n // do nothing\n }\n}\nexport class CustomAggregator extends Aggregator {\n type: string = AggregationType.CUSTOM;\n isRecord?: boolean = true;\n declare field?: string;\n aggregationFun?: Function;\n values: (string | number)[] = [];\n fieldValue?: any;\n constructor(config: { key: string; field: string; formatFun?: any; isRecord?: boolean; aggregationFun?: Function }) {\n super(config);\n this.aggregationFun = config.aggregationFun;\n }\n push(record: any): void {\n if (record) {\n if (this.isRecord && this.records) {\n if (record.isAggregator) {\n this.records.push(...record.records);\n } else {\n this.records.push(record);\n }\n }\n\n if (record.isAggregator && this.children) {\n this.children.push(record);\n }\n if (this.field) {\n this.values.push(record[this.field]);\n }\n }\n this.clearCacheValue();\n }\n updateRecord(oldRecord: any, newRecord: any): void {\n if (oldRecord && newRecord) {\n if (this.isRecord && this.records) {\n this.records = this.records.map(item => {\n if (item === oldRecord) {\n return newRecord;\n }\n return item;\n });\n }\n if (oldRecord.isAggregator && newRecord.isAggregator && this.children) {\n this.children = this.children.map(item => {\n if (item === oldRecord) {\n return newRecord;\n }\n return item;\n });\n }\n if (this.field && this.records.length) {\n this.values = this.records.map(item => item[this.field]);\n }\n this.clearCacheValue();\n }\n }\n deleteRecord(record: any): void {\n if (record) {\n if (this.isRecord && this.records) {\n this.records = this.records.filter(item => item !== record);\n }\n if (record.isAggregator && this.children) {\n this.children = this.children.filter(item => item !== record);\n }\n if (this.field && this.records.length) {\n this.values = this.records.map(item => item[this.field]);\n }\n }\n this.clearCacheValue();\n }\n value() {\n if (!this.fieldValue) {\n this.fieldValue = this.aggregationFun?.(this.values, this.records, this.field);\n }\n return this.changedValue ?? this.fieldValue;\n }\n reset() {\n this.records = [];\n this.children = [];\n this.changedValue = undefined;\n this.fieldValue = undefined;\n }\n recalculate() {\n this.fieldValue = undefined;\n this._formatedValue = undefined;\n // do nothing\n }\n}\n/** 透视表计算字段逻辑使用 */\nexport class RecalculateAggregator extends Aggregator {\n type: string = AggregationType.RECALCULATE;\n isRecord?: boolean = true;\n declare field?: string;\n calculateFun: Function;\n fieldValue?: any;\n dependAggregators: Aggregator[];\n dependIndicatorKeys: string[];\n constructor(config: {\n key: string;\n field: string;\n formatFun: any;\n isRecord: boolean;\n calculateFun: Function;\n dependAggregators: Aggregator[];\n dependIndicatorKeys: string[];\n }) {\n super(config);\n this.calculateFun = config.calculateFun;\n this.dependAggregators = config.dependAggregators;\n this.dependIndicatorKeys = config.dependIndicatorKeys;\n }\n push(record: any): void {\n if (record && this.isRecord && this.records) {\n if (record.isAggregator) {\n this.records.push(...record.records);\n } else {\n this.records.push(record);\n }\n }\n if (this.children && record.isAggregator) {\n this.children.push(record);\n }\n this.clearCacheValue();\n }\n deleteRecord(record: any): void {\n if (record) {\n if (this.isRecord && this.records) {\n this.records = this.records.filter(item => item !== record);\n }\n if (record.isAggregator && this.children) {\n this.children = this.children.filter(item => item !== record);\n }\n }\n this.clearCacheValue();\n }\n updateRecord(oldRecord: any, newRecord: any): void {\n if (oldRecord && newRecord) {\n if (this.isRecord && this.records) {\n this.records = this.records.map(item => {\n if (item === oldRecord) {\n return newRecord;\n }\n return item;\n });\n }\n if (oldRecord.isAggregator && newRecord.isAggregator && this.children) {\n this.children = this.children.map(item => {\n if (item === oldRecord) {\n return newRecord;\n }\n return item;\n });\n }\n this.clearCacheValue();\n }\n }\n value() {\n if (!this.fieldValue) {\n const aggregatorValue = _getDependAggregatorValues(this.dependAggregators, this.dependIndicatorKeys);\n this.fieldValue = this.calculateFun?.(aggregatorValue, this.records, this.field);\n }\n return this.changedValue ?? this.fieldValue;\n }\n reset() {\n this.records = [];\n this.children = [];\n this.changedValue = undefined;\n this.fieldValue = undefined;\n }\n recalculate() {\n // do nothing\n }\n}\nexport class SumAggregator extends Aggregator {\n type: string = AggregationType.SUM;\n sum = 0;\n positiveSum = 0;\n nagetiveSum = 0;\n declare field?: string;\n needSplitPositiveAndNegativeForSum?: boolean = false;\n constructor(config: {\n key: string;\n field: string;\n formatFun?: any;\n isRecord?: boolean;\n needSplitPositiveAndNegative?: boolean;\n }) {\n super(config);\n this.needSplitPositiveAndNegativeForSum = config.needSplitPositiveAndNegative ?? false;\n }\n push(record: any): void {\n if (record) {\n if (this.isRecord && this.records) {\n if (record.isAggregator) {\n this.records.push(...record.records);\n } else {\n this.records.push(record);\n }\n }\n if (record.isAggregator && this.children) {\n this.children.push(record);\n const value = record.value();\n this.sum = precisionAdd(this.sum, value ?? 0);\n if (this.needSplitPositiveAndNegativeForSum) {\n if (value > 0) {\n this.positiveSum = precisionAdd(this.positiveSum, value);\n } else if (value < 0) {\n this.nagetiveSum = precisionAdd(this.nagetiveSum, value);\n }\n }\n } else if (this.field && !isNaN(parseFloat(record[this.field]))) {\n const value = parseFloat(record[this.field]);\n this.sum = precisionAdd(this.sum, value);\n if (this.needSplitPositiveAndNegativeForSum) {\n if (value > 0) {\n this.positiveSum = precisionAdd(this.positiveSum, value);\n } else if (value < 0) {\n this.nagetiveSum = precisionAdd(this.nagetiveSum, value);\n }\n }\n }\n }\n this.clearCacheValue();\n }\n deleteRecord(record: any) {\n if (record) {\n if (this.isRecord && this.records) {\n const index = this.records.indexOf(record);\n if (index !== -1) {\n this.records.splice(index, 1);\n }\n }\n if (record.isAggregator && this.children) {\n const index = this.children.indexOf(record);\n if (index !== -1) {\n this.children.splice(index, 1);\n }\n const value = record.value();\n this.sum = precisionSub(this.sum, value ?? 0);\n if (this.needSplitPositiveAndNegativeForSum) {\n if (value > 0) {\n this.positiveSum = precisionSub(this.positiveSum, value);\n } else if (value < 0) {\n this.nagetiveSum = precisionSub(this.nagetiveSum, value);\n }\n }\n } else if (this.field && !isNaN(parseFloat(record[this.field]))) {\n const value = parseFloat(record[this.field]);\n this.sum = precisionSub(this.sum, value);\n if (this.needSplitPositiveAndNegativeForSum) {\n if (value > 0) {\n this.positiveSum = precisionSub(this.positiveSum, value);\n } else if (value < 0) {\n this.nagetiveSum = precisionSub(this.nagetiveSum, value);\n }\n }\n }\n }\n this.clearCacheValue();\n }\n updateRecord(oldRecord: any, newRecord: any): void {\n if (oldRecord && newRecord) {\n if (this.isRecord && this.records) {\n const index = this.records.indexOf(oldRecord);\n if (index !== -1) {\n this.records[index] = newRecord;\n }\n }\n if (oldRecord.isAggregator && this.children) {\n const oldValue = oldRecord.value();\n const index = this.children.indexOf(oldRecord);\n if (index !== -1) {\n this.children[index] = newRecord;\n }\n const newValue = newRecord.value();\n this.sum = precisionAdd(this.sum, precisionSub(newValue, oldValue));\n if (this.needSplitPositiveAndNegativeForSum) {\n if (oldValue > 0) {\n this.positiveSum = precisionSub(this.positiveSum, oldValue);\n } else if (oldValue < 0) {\n this.nagetiveSum = precisionSub(this.nagetiveSum, oldValue);\n }\n if (newValue > 0) {\n this.positiveSum = precisionAdd(this.positiveSum, newValue);\n } else if (newValue < 0) {\n this.nagetiveSum = precisionAdd(this.nagetiveSum, newValue);\n }\n }\n } else if (this.field && !isNaN(parseFloat(oldRecord[this.field]))) {\n const oldValue = parseFloat(oldRecord[this.field]);\n const newValue = parseFloat(newRecord[this.field]);\n this.sum = precisionAdd(this.sum, precisionSub(newValue, oldValue));\n if (this.needSplitPositiveAndNegativeForSum) {\n if (oldValue > 0) {\n this.positiveSum = precisionSub(this.positiveSum, oldValue);\n } else if (oldValue < 0) {\n this.nagetiveSum = precisionSub(this.nagetiveSum, oldValue);\n }\n if (newValue > 0) {\n this.positiveSum = precisionAdd(this.positiveSum, newValue);\n } else if (newValue < 0) {\n this.nagetiveSum = precisionAdd(this.nagetiveSum, newValue);\n }\n }\n }\n this.clearCacheValue();\n }\n }\n value() {\n return (\n this.changedValue ??\n (this.records && this.records.length >= 1 ? this.sum : this.isRecord === false ? this.sum : undefined)\n );\n }\n positiveValue() {\n return this.positiveSum;\n }\n negativeValue() {\n return this.nagetiveSum;\n }\n reset() {\n super.reset();\n this.records = [];\n this.sum = 0;\n }\n recalculate() {\n this.sum = 0;\n this._formatedValue = undefined;\n if (this.children && this.children.length > 0) {\n for (let i = 0; i < this.children.length; i++) {\n const child = this.children[i];\n if (child.isAggregator) {\n const value = child.value();\n this.sum = precisionAdd(this.sum, value ?? 0);\n if (this.needSplitPositiveAndNegativeForSum) {\n if (value > 0) {\n this.positiveSum = precisionAdd(this.positiveSum, value);\n } else if (value < 0) {\n this.nagetiveSum = precisionAdd(this.nagetiveSum, value);\n }\n }\n }\n }\n } else if (this.records) {\n for (let i = 0; i < this.records.length; i++) {\n const record = this.records[i];\n if (record.isAggregator) {\n const value = record.value();\n this.sum = precisionAdd(this.sum, value ?? 0);\n if (this.needSplitPositiveAndNegativeForSum) {\n if (value > 0) {\n this.positiveSum = precisionAdd(this.positiveSum, value);\n } else if (value < 0) {\n this.nagetiveSum = precisionAdd(this.nagetiveSum, value);\n }\n }\n } else if (this.field && !isNaN(parseFloat(record[this.field]))) {\n const value = parseFloat(record[this.field]);\n this.sum = precisionAdd(this.sum, value);\n if (this.needSplitPositiveAndNegativeForSum) {\n if (value > 0) {\n this.positiveSum = precisionAdd(this.positiveSum, value);\n } else if (value < 0) {\n this.nagetiveSum = precisionAdd(this.nagetiveSum, value);\n }\n }\n }\n }\n }\n }\n}\n\nexport class CountAggregator extends Aggregator {\n type: string = AggregationType.COUNT;\n count = 0;\n declare field?: string;\n push(record: any): void {\n if (record) {\n if (this.isRecord && this.records) {\n if (record.isAggregator) {\n this.records.push(...record.records);\n } else {\n this.records.push(record);\n }\n }\n if (record.isAggregator) {\n if (this.children) {\n this.children.push(record);\n }\n this.count += record.value();\n } else {\n this.count++;\n }\n }\n this.clearCacheValue();\n }\n deleteRecord(record: any) {\n if (record) {\n if (this.isRecord && this.records) {\n this.records = this.records.filter(item => item !== record);\n }\n if (record.isAggregator) {\n if (this.children) {\n this.children = this.children.filter(item => item !== record);\n }\n this.count -= record.value();\n } else {\n this.count--;\n }\n }\n this.clearCacheValue();\n }\n updateRecord(oldRecord: any, newRecord: any): void {\n if (oldRecord && newRecord) {\n if (this.isRecord && this.records) {\n this.records = this.records.map(item => {\n if (item === oldRecord) {\n return newRecord;\n }\n return item;\n });\n }\n if (oldRecord.isAggregator) {\n this.count += newRecord.value() - oldRecord.value();\n } else {\n //this.count++;\n }\n if (oldRecord.isAggregator && newRecord.isAggregator && this.children) {\n this.children = this.children.map(item => {\n if (item === oldRecord) {\n return newRecord;\n }\n return item;\n });\n }\n }\n }\n value() {\n return this.changedValue ?? this.count;\n }\n reset() {\n this.changedValue = undefined;\n this.children = [];\n this.records = [];\n this.count = 0;\n }\n recalculate() {\n this.count = 0;\n this._formatedValue = undefined;\n if (this.children && this.children.length > 0) {\n for (let i = 0; i < this.children.length; i++) {\n const child = this.children[i];\n if (child.isAggregator) {\n const value = child.value();\n this.count += value ?? 0;\n } else {\n this.count++;\n }\n }\n } else if (this.records) {\n for (let i = 0; i < this.records.length; i++) {\n const record = this.records[i];\n if (record.isAggregator) {\n this.count += record.value();\n } else {\n this.count++;\n }\n }\n }\n }\n}\nexport class AvgAggregator extends Aggregator {\n type: string = AggregationType.AVG;\n sum = 0;\n count = 0;\n declare field?: string;\n push(record: any): void {\n if (record) {\n if (this.isRecord && this.records) {\n if (record.isAggregator) {\n this.records.push(...record.records);\n } else {\n this.records.push(record);\n }\n }\n if (record.isAggregator && record.type === AggregationType.AVG) {\n if (this.children) {\n this.children.push(record);\n }\n this.sum = precisionAdd(this.sum, record.sum);\n this.count += record.count;\n } else if (this.field && !isNaN(parseFloat(record[this.field]))) {\n this.sum = precisionAdd(this.sum, parseFloat(record[this.field]));\n this.count++;\n }\n }\n this.clearCacheValue();\n }\n deleteRecord(record: any) {\n if (record) {\n if (this.isRecord && this.records) {\n const index = this.records.indexOf(record);\n if (index !== -1) {\n this.records.splice(index, 1);\n }\n }\n if (record.isAggregator && record.type === AggregationType.AVG) {\n if (this.children) {\n const index = this.children.indexOf(record);\n if (index !== -1) {\n this.children.splice(index, 1);\n }\n }\n this.sum = precisionSub(this.sum, record.sum);\n this.count -= record.count;\n } else if (this.field && !isNaN(parseFloat(record[this.field]))) {\n this.sum = precisionSub(this.sum, parseFloat(record[this.field]));\n this.count--;\n }\n }\n this.clearCacheValue();\n }\n updateRecord(oldRecord: any, newRecord: any): void {\n if (oldRecord && newRecord) {\n if (this.isRecord && this.records) {\n const index = this.records.indexOf(oldRecord);\n if (index !== -1) {\n this.records[index] = newRecord;\n }\n }\n if (oldRecord.isAggregator && oldRecord.type === AggregationType.AVG) {\n if (this.children && newRecord.isAggregator) {\n const index = this.children.indexOf(oldRecord);\n if (index !== -1) {\n this.children[index] = newRecord;\n }\n }\n this.sum = precisionAdd(this.sum, precisionSub(newRecord.sum, oldRecord.sum));\n this.count += newRecord.count - oldRecord.count;\n } else if (this.field && !isNaN(parseFloat(oldRecord[this.field]))) {\n this.sum = precisionAdd(\n this.sum,\n precisionSub(parseFloat(newRecord[this.field]), parseFloat(oldRecord[this.field]))\n );\n // this.count++;\n }\n this.clearCacheValue();\n }\n }\n value() {\n return (\n this.changedValue ??\n (this.records && this.records.length >= 1\n ? this.sum / this.count\n : this.isRecord === false && this.count > 0\n ? this.sum / this.count\n : undefined)\n );\n }\n reset() {\n this.changedValue = undefined;\n this.children = [];\n this.records = [];\n this.sum = 0;\n this.count = 0;\n }\n recalculate() {\n this.sum = 0;\n this.count = 0;\n this._formatedValue = undefined;\n if (this.children && this.children.length > 0) {\n for (let i = 0; i < this.children.length; i++) {\n const child = this.children[i];\n if (child.isAggregator && child.type === AggregationType.AVG) {\n const childValue = child.value();\n this.sum = precisionAdd(this.sum, childValue * (child as AvgAggregator).count);\n this.count += (child as AvgAggregator).count;\n }\n }\n } else if (this.records) {\n for (let i = 0; i < this.records.length; i++) {\n const record = this.records[i];\n if (record.isAggregator && record.type === AggregationType.AVG) {\n this.sum = precisionAdd(this.sum, record.sum);\n this.count += record.count;\n } else if (this.field && !isNaN(parseFloat(record[this.field]))) {\n this.sum = precisionAdd(this.sum, parseFloat(record[this.field]));\n this.count++;\n }\n }\n }\n }\n}\nexport class MaxAggregator extends Aggregator {\n type: string = AggregationType.MAX;\n max: number = Number.MIN_SAFE_INTEGER;\n declare field?: string;\n push(record: any): void {\n if (record) {\n if (this.isRecord && this.records) {\n if (record.isAggregator) {\n this.records.push(...record.records);\n } else {\n this.records.push(record);\n }\n }\n if (record.isAggregator) {\n if (this.children) {\n this.children.push(record);\n }\n this.max = record.max > this.max ? record.max : this.max;\n } else if (typeof record === 'number') {\n this.max = record > this.max ? record : this.max;\n } else if (this.field && typeof record[this.field] === 'number') {\n this.max = record[this.field] > this.max ? record[this.field] : this.max;\n } else if (this.field && !isNaN(record[this.field])) {\n this.max = parseFloat(record[this.field]) > this.max ? parseFloat(record[this.field]) : this.max;\n }\n }\n this.clearCacheValue();\n }\n deleteRecord(record: any) {\n if (record) {\n if (this.isRecord && this.records) {\n this.records = this.records.filter(item => item !== record);\n }\n if (record.isAggregator) {\n if (this.children) {\n this.children = this.children.filter(item => item !== record);\n }\n }\n this.recalculate();\n }\n }\n updateRecord(oldRecord: any, newRecord: any): void {\n if (oldRecord && newRecord) {\n if (this.isRecord && this.records) {\n this.records = this.records.map(item => {\n if (item === oldRecord) {\n return newRecord;\n }\n return item;\n });\n }\n if (oldRecord.isAggregator && newRecord.isAggregator) {\n if (this.children) {\n this.children = this.children.map(item => {\n if (item === oldRecord) {\n return newRecord;\n }\n return item;\n });\n }\n }\n this.recalculate();\n }\n }\n value() {\n return this.changedValue ?? (this.records?.length >= 1 ? this.max : undefined);\n }\n reset() {\n this.records = [];\n this.changedValue = undefined;\n this.children = [];\n this.max = Number.MIN_SAFE_INTEGER;\n }\n recalculate() {\n this.max = Number.MIN_SAFE_INTEGER;\n this._formatedValue = undefined;\n if (this.children && this.children.length > 0) {\n for (let i = 0; i < this.children.length; i++) {\n const child = this.children[i];\n if (child.isAggregator) {\n const childValue = child.value();\n this.max = Math.max(this.max, childValue);\n }\n }\n } else if (this.records) {\n for (let i = 0; i < this.records.length; i++) {\n const record = this.records[i];\n if (record.isAggregator) {\n this.max = record.max > this.max ? record.max : this.max;\n } else if (typeof record === 'number') {\n this.max = record > this.max ? record : this.max;\n } else if (this.field && typeof record[this.field] === 'number') {\n this.max = record[this.field] > this.max ? record[this.field] : this.max;\n } else if (this.field && !isNaN(record[this.field])) {\n this.max = parseFloat(record[this.field]) > this.max ? parseFloat(record[this.field]) : this.max;\n }\n }\n }\n }\n}\nexport class MinAggregator extends Aggregator {\n type: string = AggregationType.MIN;\n min: number = Number.MAX_SAFE_INTEGER;\n declare field?: string;\n push(record: any): void {\n if (record) {\n if (this.isRecord && this.records) {\n if (record.isAggregator) {\n this.records.push(...record.records);\n } else {\n this.records.push(record);\n }\n }\n if (record.isAggregator) {\n if (this.children) {\n this.children.push(record);\n }\n this.min = record.min < this.min ? record.min : this.min;\n } else if (typeof record === 'number') {\n this.min = record < this.min ? record : this.min;\n } else if (this.field && typeof record[this.field] === 'number') {\n this.min = record[this.field] < this.min ? record[this.field] : this.min;\n } else if (this.field && !isNaN(record[this.field])) {\n this.min = parseFloat(record[this.field]) < this.min ? parseFloat(record[this.field]) : this.min;\n }\n }\n this.clearCacheValue();\n }\n deleteRecord(record: any) {\n if (record) {\n if (this.isRecord && this.records) {\n this.records = this.records.filter(item => item !== record);\n }\n if (record.isAggregator) {\n if (this.children) {\n this.children = this.children.filter(item => item !== record);\n }\n }\n this.recalculate();\n }\n }\n updateRecord(oldRecord: any, newRecord: any): void {\n if (oldRecord && newRecord) {\n if (this.isRecord && this.records) {\n this.records = this.records.map(item => {\n if (item === oldRecord) {\n return newRecord;\n }\n return item;\n });\n }\n if (oldRecord.isAggregator && newRecord.isAggregator) {\n if (this.children) {\n this.children = this.children.map(item => {\n if (item === oldRecord) {\n return newRecord;\n }\n return item;\n });\n }\n }\n this.recalculate();\n }\n }\n value() {\n return this.changedValue ?? (this.records?.length >= 1 ? this.min : undefined);\n }\n reset() {\n this.records = [];\n this.changedValue = undefined;\n this.children = [];\n this.min = Number.MAX_SAFE_INTEGER;\n }\n recalculate() {\n this.min = Number.MAX_SAFE_INTEGER;\n this._formatedValue = undefined;\n if (this.children && this.children.length > 0) {\n for (let i = 0; i < this.children.length; i++) {\n const child = this.children[i];\n if (child.isAggregator) {\n const childValue = child.value();\n this.min = Math.min(this.min, childValue);\n }\n }\n } else if (this.records) {\n for (let i = 0; i < this.records.length; i++) {\n const record = this.records[i];\n if (record.isAggregator) {\n this.min = record.min < this.min ? record.min : this.min;\n } else if (typeof record === 'number') {\n this.min = record < this.min ? record : this.min;\n } else if (this.field && typeof record[this.field] === 'number') {\n this.min = record[this.field] < this.min ? record[this.field] : this.min;\n } else if (this.field && !isNaN(record[this.field])) {\n this.min = parseFloat(record[this.field]) < this.min ? parseFloat(record[this.field]) : this.min;\n }\n }\n }\n }\n}\nexport function indicatorSort(a: any, b: any) {\n if (a && b) {\n // 数据健全兼容,用户数据不全时,能够展示.\n return a.toString().localeCompare(b.toString(), 'zh');\n }\n if (a) {\n return 1;\n }\n return -1;\n}\nexport function typeSort(a: any, b: any, sortType: SortType) {\n if (sortType === SortType.NORMAL || sortType === SortType.normal) {\n return 0;\n }\n const factor = sortType === SortType.DESC || sortType === SortType.desc ? -1 : 1;\n if (a && b) {\n // 数据健全兼容,用户数据不全时,能够展示.\n return a.toString().localeCompare(b.toString(), 'zh') * factor;\n }\n if (a) {\n return 1 * factor;\n }\n return -1 * factor;\n}\nexport function naturalSort(as: any, bs: any, sortType: SortType) {\n if (sortType === SortType.NORMAL || sortType === SortType.normal) {\n return 0;\n }\n\n const rx = /(\\d+)|(\\D+)/g;\n const rd = /\\d/;\n const rz = /^0/;\n let a;\n let a1;\n let b;\n let b1;\n let nas = 0;\n let nbs = 0;\n const factor = sortType === SortType.DESC || sortType === SortType.desc ? -1 : 1;\n if (bs !== null && as === null) {\n return -1 * factor;\n }\n if (as !== null && bs === null) {\n return 1 * factor;\n }\n if (typeof as === 'number' && isNaN(as)) {\n return -1 * factor;\n }\n if (typeof bs === 'number' && isNaN(bs)) {\n return 1 * factor;\n }\n nas = +as;\n nbs = +bs;\n if (nas < nbs) {\n return -1 * factor;\n }\n if (nas > nbs) {\n return 1 * factor;\n }\n if (typeof as === 'number' && typeof bs !== 'number') {\n return -1 * factor;\n }\n if (typeof bs === 'number' && typeof as !== 'number') {\n return 1 * factor;\n }\n if (typeof as === 'number' && typeof bs === 'number') {\n return 0;\n }\n if (isNaN(nbs) && !isNaN(nas)) {\n return -1 * factor;\n }\n if (isNaN(nas) && !isNaN(nbs)) {\n return 1 * factor;\n }\n a = String(as);\n b = String(bs);\n if (a === b) {\n return 0;\n }\n if (!(rd.test(a) && rd.test(b))) {\n return (a > b ? 1 : -1) * factor;\n }\n a = a.match(rx);\n b = b.match(rx);\n while (a.length && b.length) {\n a1 = a.shift();\n b1 = b.shift();\n if (a1 !== b1) {\n if (rd.test(a1) && rd.test(b1)) {\n return (<any>a1.replace(rz, '.0') - <any>b1.replace(rz, '.0')) * factor;\n }\n return (a1 > b1 ? 1 : -1) * factor;\n }\n }\n return (a.length - b.length) * factor;\n}\nexport function sortBy(order: string[]) {\n let x;\n let i;\n const mapping: any = {};\n const lowercase_mapping: any = {};\n // for (i in order) {\n for (let i = 0; i < order.length; i++) {\n x = order[i];\n mapping[x] = i;\n if (typeof x === 'string') {\n lowercase_mapping[x.toLowerCase()] = i;\n }\n }\n return function (a: any, b: any, sortType: SortType) {\n if (sortType === SortType.NORMAL || sortType === SortType.normal) {\n return 0;\n }\n const factor = sortType === SortType.DESC || sortType === SortType.desc ? -1 : 1;\n let comparison;\n if (mapping[a] !== null && mapping[a] !== undefined && mapping[b] !== null && mapping[b] !== undefined) {\n comparison = mapping[a] - mapping[b];\n } else if (mapping[a] !== null && mapping[a] !== undefined) {\n comparison = -1;\n } else if (mapping[b] !== null && mapping[b] !== undefined) {\n comparison = 1;\n } else if (\n lowercase_mapping[a] !== null &&\n mapping[a] !== undefined &&\n lowercase_mapping[b] !== null &&\n mapping[b] !== undefined\n ) {\n comparison = lowercase_mapping[a] - lowercase_mapping[b];\n } else if (\n lowercase_mapping[a] === null ||\n mapping[a] === undefined ||\n lowercase_mapping[b] === null ||\n mapping[b] === undefined\n ) {\n comparison = 0;\n } else if (lowercase_mapping[a] !== null && mapping[a] !== undefined) {\n comparison = -1;\n } else if (lowercase_mapping[b] !== null && mapping[b] !== undefined) {\n comparison = 1;\n }\n if (isValid(comparison)) {\n return comparison * factor;\n }\n\n return naturalSort(a, b, sortType);\n };\n}\n\nfunction _getDependAggregatorValues(aggregators: Aggregator[], dependIndicatorKeys: string[]) {\n const dependAggregatorValues: any = {};\n for (let m = 0; m < dependIndicatorKeys?.length; m++) {\n const aggrator = aggregators.find(aggrator => aggrator?.key === dependIndicatorKeys[m]);\n if (aggrator) {\n dependAggregatorValues[aggrator.key] = aggrator?.value();\n }\n }\n return dependAggregatorValues;\n}\n"]}
@@ -380,6 +380,20 @@ export interface TableEventHandlersEventArgumentMap {
380
380
  delete_column: {
381
381
  deleteColIndexs: number[];
382
382
  columns: ColumnsDefine;
383
+ deletedColumns?: ColumnsDefine;
384
+ deletedRecordValues?: any[][];
385
+ };
386
+ merge_cells: {
387
+ startCol: number;
388
+ startRow: number;
389
+ endCol: number;
390
+ endRow: number;
391
+ };
392
+ unmerge_cells: {
393
+ startCol: number;
394
+ startRow: number;
395
+ endCol: number;
396
+ endRow: number;
383
397
  };
384
398
  }
385
399
  export interface DrillMenuEventInfo {
@@ -476,6 +490,8 @@ export interface TableEventHandlersReturnMap {
476
490
  update_record: void;
477
491
  add_column: void;
478
492
  delete_column: void;
493
+ merge_cells: void;
494
+ unmerge_cells: void;
479
495
  filter_menu_show: {
480
496
  col: number;
481
497
  row: number;
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/ts-types/events.ts"],"names":[],"mappings":"","file":"events.js","sourcesContent":["import type {\n CellAddress,\n CellRange,\n CellLocation,\n FieldDef,\n CellAddressWithBound,\n ListTableConstructorOptions,\n PivotTableConstructorOptions\n} from './table-engine';\nimport type { DropDownMenuEventArgs, MenuListItem, PivotInfo } from './menu';\n\nimport type { IDimensionInfo, MergeCellInfo, RectProps, SortOrder } from './common';\nimport type { IconFuncTypeEnum, CellInfo, HierarchyState, ColumnsDefine } from '.';\nimport type { Icon } from '../scenegraph/graphic/icon';\nimport type { FederatedPointerEvent, Group, IEventTarget } from './../vrender';\nimport type { BaseTableConstructorOptions, BaseTableAPI } from './base-table';\n\nexport type KeyboardEventListener = (e: KeyboardEvent) => void;\nexport type TableEventListener<TYPE extends keyof TableEventHandlersEventArgumentMap> = (\n args: TableEventHandlersEventArgumentMap[TYPE]\n) => TableEventHandlersReturnMap[TYPE]; //AnyFunction;\nexport type EventListenerId = number;\n\nexport type SelectedCellEvent = CellAddress & {\n ranges: CellRange[];\n};\n\n// export type MouseCellEvent = CellAddress & {\n// event: MouseEvent | PointerEvent | TouchEvent;\n// };\n\nexport type MenuEvent = CellAddress & {\n dropDownMenu: MenuListItem[];\n pivotInfo: PivotInfo;\n};\n\nexport type TouchCellEvent = CellAddress & {\n event: TouchEvent;\n};\n\nexport type KeydownEvent = {\n keyCode: number;\n code: string;\n event: KeyboardEvent;\n stopCellMoving?: () => void;\n scaleRatio?: number;\n};\n\nexport type MousePointerCellEvent = CellAddressWithBound &\n CellInfo & {\n scaleRatio?: number;\n targetIcon?: { name: string; position: RectProps; funcType: string };\n event?: MouseEvent | PointerEvent | TouchEvent;\n federatedEvent?: FederatedPointerEvent;\n target: IEventTarget | undefined;\n\n mergeCellInfo?: MergeCellInfo;\n };\n// 多单元格的事件传出参数 需要将当前鼠标处的单元格的信息FocusedCellInfo也带着\nexport type MousePointerMultiCellEvent = MousePointerCellEvent & {\n cells: CellInfo[][];\n // menuKey?: string;\n};\n\nexport type MousePointerSparklineEvent = MousePointerCellEvent & {\n sparkline: {\n pointData: any;\n };\n};\n\nexport interface TableEventHandlersEventArgumentMap {\n selected_cell: SelectedCellEvent;\n selected_clear: {};\n click_cell: MousePointerCellEvent;\n dblclick_cell: MousePointerCellEvent;\n mouseenter_table: { event?: MouseEvent | PointerEvent | TouchEvent };\n mouseleave_table: { event?: MouseEvent | PointerEvent | TouchEvent };\n mousedown_table: { event?: MouseEvent | PointerEvent | TouchEvent };\n mousemove_table: MousePointerCellEvent;\n mouseenter_cell: MousePointerCellEvent;\n mouseleave_cell: MousePointerCellEvent;\n mousemove_cell: MousePointerCellEvent;\n mousedown_cell: MousePointerCellEvent;\n mouseup_cell: MousePointerCellEvent;\n contextmenu_cell: MousePointerMultiCellEvent;\n contextmenu_canvas: MousePointerCellEvent;\n before_keydown: KeydownEvent;\n keydown: KeydownEvent;\n scroll: {\n event: WheelEvent;\n scrollLeft: number;\n scrollTop: number;\n scrollWidth: number;\n scrollHeight: number;\n viewWidth: number;\n viewHeight: number;\n scrollDirection: 'horizontal' | 'vertical';\n scrollRatioX?: number;\n scrollRatioY?: number;\n dx?: number;\n dy?: number;\n };\n can_scroll: {\n event: WheelEvent;\n scrollLeft: number;\n scrollTop: number;\n scrollWidth: number;\n scrollHeight: number;\n viewWidth: number;\n viewHeight: number;\n scrollDirection: 'horizontal' | 'vertical';\n scrollRatioX?: number;\n scrollRatioY?: number;\n dx?: number;\n dy?: number;\n };\n scroll_vertical_end: {\n scrollLeft: number;\n scrollTop: number;\n scrollWidth: number;\n scrollHeight: number;\n viewWidth: number;\n viewHeight: number;\n };\n scroll_horizontal_end: {\n scrollLeft: number;\n scrollTop: number;\n scrollWidth: number;\n scrollHeight: number;\n viewWidth: number;\n viewHeight: number;\n };\n resize_column: { col: number; colWidth: number };\n resize_column_end: { col: number; colWidths: number[] };\n resize_row: { row: number; rowHeight: number };\n resize_row_end: { row: number; rowHeight: number };\n change_header_position: {\n source: CellAddress;\n target: CellAddress;\n movingColumnOrRow?: 'column' | 'row';\n event: Event;\n };\n change_header_position_start: {\n col: number;\n row: number;\n x: number;\n y: number;\n backX: number;\n lineX: number;\n backY: number;\n lineY: number;\n event: Event;\n movingColumnOrRow?: 'column' | 'row';\n };\n changing_header_position: {\n col: number;\n row: number;\n x: number;\n y: number;\n backX: number;\n lineX: number;\n backY: number;\n lineY: number;\n event: Event;\n movingColumnOrRow?: 'column' | 'row';\n };\n change_header_position_fail: {\n source: CellAddress;\n target: CellAddress;\n movingColumnOrRow?: 'column' | 'row';\n event: Event;\n };\n sort_click: {\n field: FieldDef;\n order: SortOrder;\n event: Event;\n };\n after_sort: {\n field: FieldDef;\n order: SortOrder;\n event: Event;\n };\n freeze_click: { col: number; row: number; fields: FieldDef[]; colCount: number };\n dropdown_menu_click: DropDownMenuEventArgs;\n\n mouseover_chart_symbol: MousePointerSparklineEvent;\n\n drag_select_end: MousePointerMultiCellEvent;\n selected_changed: {\n col: number;\n row: number;\n ranges: CellRange[];\n };\n copy_data: { cellRange: CellRange[]; copyData: string; isCut: boolean };\n drillmenu_click: DrillMenuEventInfo;\n\n dropdown_icon_click: CellAddress & { event: Event };\n dropdown_menu_clear: CellAddress;\n\n show_menu: {\n x: number;\n y: number;\n col: number;\n row: number;\n type: 'dropDown' | 'contextmenu' | 'custom';\n };\n hide_menu: [];\n icon_click: {\n name: string;\n col: number;\n row: number;\n x: number;\n y: number;\n funcType?: IconFuncTypeEnum | string;\n icon: Icon;\n event: Event;\n };\n\n pivot_sort_click: {\n col: number;\n row: number;\n order: SortOrder;\n dimensionInfo: IDimensionInfo[];\n cellLocation: CellLocation;\n event: Event;\n };\n tree_hierarchy_state_change: {\n col: number;\n row: number;\n changeAll?: boolean;\n hierarchyState: HierarchyState;\n dimensionInfo?: IDimensionInfo[];\n /**整条数据-原始数据 */\n originData?: any;\n cellLocation?: CellLocation;\n };\n vchart_event_type: {\n eventName: string;\n col: number;\n row: number;\n chartEventArguments: any;\n };\n //datasource部分的事件\n change_order: [];\n source_length_update: number;\n\n legend_item_click: { model: any; value: any; event: PointerEvent };\n legend_item_hover: { model: any; value: any; event: PointerEvent };\n legend_item_unHover: { model: any; value: any; event: PointerEvent };\n legend_change: { model: any; value: any; event: PointerEvent };\n\n mouseenter_axis: MousePointerCellEvent & { axisPosition: 'left' | 'right' | 'top' | 'bottom' };\n mouseleave_axis: MousePointerCellEvent & { axisPosition: 'left' | 'right' | 'top' | 'bottom' };\n\n checkbox_state_change: MousePointerCellEvent & { checked: boolean };\n radio_state_change: MousePointerCellEvent & { radioIndexInCell: number | undefined };\n switch_state_change: MousePointerCellEvent & { checked: boolean };\n before_init: { options: BaseTableConstructorOptions; container: HTMLElement | null };\n before_update_option: { options: BaseTableConstructorOptions; container: HTMLElement | null };\n before_set_size: { width: number; height: number };\n after_render: null;\n initialized: null;\n updated: null;\n after_update_cell_content_width: {\n col: number;\n row: number;\n cellHeight: number;\n cellGroup: Group;\n padding: [number, number, number, number];\n textBaseline: CanvasTextBaseline;\n };\n\n after_update_select_border_height: {\n startRow: number;\n endRow: number;\n currentHeight: number;\n selectComp: { rect: any; fillhandle?: any; role: string };\n };\n\n change_cell_value: {\n col: number;\n row: number;\n recordIndex?: number | number[];\n field?: FieldDef;\n rawValue: string | number;\n currentValue: string | number;\n changedValue: string | number;\n };\n change_cell_values: {\n values: {\n col: number;\n row: number;\n recordIndex?: number | number[];\n field?: FieldDef;\n rawValue: string | number;\n currentValue: string | number;\n changedValue: string | number;\n }[];\n };\n\n mousedown_fill_handle: {};\n drag_fill_handle_end: { direction?: 'top' | 'bottom' | 'left' | 'right' };\n dblclick_fill_handle: {};\n\n empty_tip_click: {};\n empty_tip_dblclick: {};\n\n button_click: {\n col: number;\n row: number;\n event: Event;\n };\n before_cache_chart_image: { chartInstance: any };\n pasted_data: {\n col: number;\n row: number;\n pasteData: (string | number)[][];\n changedCellResults: boolean[][];\n };\n plugin_event: {\n event: any;\n plugin: any;\n pluginEventInfo: any;\n };\n\n add_record: {\n records: any[];\n recordIndex?: number | number[];\n recordCount: number;\n };\n\n delete_record: {\n recordIndexs: number[] | number[][];\n records: any[];\n rowIndexs: number[];\n deletedCount: number;\n };\n\n update_record: {\n records: any[];\n recordIndexs: (number | number[])[];\n updateCount: number;\n };\n add_column: {\n columnIndex: number;\n columnCount: number;\n columns: ColumnsDefine;\n };\n delete_column: {\n // deleteBeforeColumns: ColumnsDefine;\n deleteColIndexs: number[];\n columns: ColumnsDefine;\n };\n}\nexport interface DrillMenuEventInfo {\n dimensionKey: string | number;\n title: string;\n drillDown: boolean;\n drillUp: boolean;\n col: number;\n row: number;\n event: Event;\n}\nexport interface TableEventHandlersReturnMap {\n selected_cell: void;\n selected_clear: void;\n click_cell: void;\n dblclick_cell: void;\n mouseenter_table: void;\n mouseleave_table: void;\n mousedown_table: void;\n mousemove_table: void;\n mouseenter_cell: void;\n mouseleave_cell: void;\n // mouseover_cell: void;\n mouseout_cell: void;\n mousemove_cell: void;\n mousedown_cell: void;\n mouseup_cell: void;\n contextmenu_cell: void;\n contextmenu_canvas: void;\n before_keydown: void;\n keydown: void;\n scroll: void;\n can_scroll: void | boolean;\n focus_table: void;\n blur_table: void;\n resize_column: void;\n resize_column_end: void;\n resize_row: void;\n resize_row_end: void;\n change_header_position: void;\n change_header_position_start: void;\n changing_header_position: void;\n change_header_position_fail: void;\n sort_click: boolean;\n after_sort: void;\n freeze_click: void;\n dropdown_menu_click: void;\n\n mouseover_chart_symbol: void;\n drag_select_end: void;\n selected_changed: void;\n copy_data: void;\n drillmenu_click: void;\n\n dropdown_icon_click: void;\n dropdown_menu_clear: void;\n\n show_menu: void;\n hide_menu: void;\n icon_click: void;\n\n pivot_sort_click: void;\n\n tree_hierarchy_state_change: void;\n\n vchart_event_type: void;\n //datasource部分的事件\n change_order: void;\n source_length_update: void;\n legend_item_click: void;\n legend_item_hover: void;\n legend_item_unHover: void;\n legend_change: void;\n\n mouseenter_axis: void;\n mouseleave_axis: void;\n\n checkbox_state_change: void;\n radio_state_change: void;\n switch_state_change: void;\n before_init: void;\n before_update_option: void;\n before_set_size: void;\n after_render: void;\n initialized: void;\n updated: void;\n after_update_cell_content_width: void;\n\n after_update_select_border_height: void;\n change_cell_value: void;\n change_cell_values: void;\n mousedown_fill_handle: void;\n drag_fill_handle_end: void;\n dblclick_fill_handle: void;\n\n scroll_vertical_end: void;\n\n scroll_horizontal_end: void;\n\n empty_tip_click: void;\n empty_tip_dblclick: void;\n\n button_click: void;\n before_cache_chart_image: void;\n pasted_data: void;\n plugin_event: void;\n\n add_record: void;\n delete_record: void;\n update_record: void;\n add_column: void;\n delete_column: void;\n\n filter_menu_show: { col: number; row: number };\n filter_menu_hide: { col: number; row: number };\n}\n"]}
1
+ {"version":3,"sources":["../src/ts-types/events.ts"],"names":[],"mappings":"","file":"events.js","sourcesContent":["import type {\n CellAddress,\n CellRange,\n CellLocation,\n FieldDef,\n CellAddressWithBound,\n ListTableConstructorOptions,\n PivotTableConstructorOptions\n} from './table-engine';\nimport type { DropDownMenuEventArgs, MenuListItem, PivotInfo } from './menu';\n\nimport type { IDimensionInfo, MergeCellInfo, RectProps, SortOrder } from './common';\nimport type { IconFuncTypeEnum, CellInfo, HierarchyState, ColumnsDefine } from '.';\nimport type { Icon } from '../scenegraph/graphic/icon';\nimport type { FederatedPointerEvent, Group, IEventTarget } from './../vrender';\nimport type { BaseTableConstructorOptions, BaseTableAPI } from './base-table';\n\nexport type KeyboardEventListener = (e: KeyboardEvent) => void;\nexport type TableEventListener<TYPE extends keyof TableEventHandlersEventArgumentMap> = (\n args: TableEventHandlersEventArgumentMap[TYPE]\n) => TableEventHandlersReturnMap[TYPE]; //AnyFunction;\nexport type EventListenerId = number;\n\nexport type SelectedCellEvent = CellAddress & {\n ranges: CellRange[];\n};\n\n// export type MouseCellEvent = CellAddress & {\n// event: MouseEvent | PointerEvent | TouchEvent;\n// };\n\nexport type MenuEvent = CellAddress & {\n dropDownMenu: MenuListItem[];\n pivotInfo: PivotInfo;\n};\n\nexport type TouchCellEvent = CellAddress & {\n event: TouchEvent;\n};\n\nexport type KeydownEvent = {\n keyCode: number;\n code: string;\n event: KeyboardEvent;\n stopCellMoving?: () => void;\n scaleRatio?: number;\n};\n\nexport type MousePointerCellEvent = CellAddressWithBound &\n CellInfo & {\n scaleRatio?: number;\n targetIcon?: { name: string; position: RectProps; funcType: string };\n event?: MouseEvent | PointerEvent | TouchEvent;\n federatedEvent?: FederatedPointerEvent;\n target: IEventTarget | undefined;\n\n mergeCellInfo?: MergeCellInfo;\n };\n// 多单元格的事件传出参数 需要将当前鼠标处的单元格的信息FocusedCellInfo也带着\nexport type MousePointerMultiCellEvent = MousePointerCellEvent & {\n cells: CellInfo[][];\n // menuKey?: string;\n};\n\nexport type MousePointerSparklineEvent = MousePointerCellEvent & {\n sparkline: {\n pointData: any;\n };\n};\n\nexport interface TableEventHandlersEventArgumentMap {\n selected_cell: SelectedCellEvent;\n selected_clear: {};\n click_cell: MousePointerCellEvent;\n dblclick_cell: MousePointerCellEvent;\n mouseenter_table: { event?: MouseEvent | PointerEvent | TouchEvent };\n mouseleave_table: { event?: MouseEvent | PointerEvent | TouchEvent };\n mousedown_table: { event?: MouseEvent | PointerEvent | TouchEvent };\n mousemove_table: MousePointerCellEvent;\n mouseenter_cell: MousePointerCellEvent;\n mouseleave_cell: MousePointerCellEvent;\n mousemove_cell: MousePointerCellEvent;\n mousedown_cell: MousePointerCellEvent;\n mouseup_cell: MousePointerCellEvent;\n contextmenu_cell: MousePointerMultiCellEvent;\n contextmenu_canvas: MousePointerCellEvent;\n before_keydown: KeydownEvent;\n keydown: KeydownEvent;\n scroll: {\n event: WheelEvent;\n scrollLeft: number;\n scrollTop: number;\n scrollWidth: number;\n scrollHeight: number;\n viewWidth: number;\n viewHeight: number;\n scrollDirection: 'horizontal' | 'vertical';\n scrollRatioX?: number;\n scrollRatioY?: number;\n dx?: number;\n dy?: number;\n };\n can_scroll: {\n event: WheelEvent;\n scrollLeft: number;\n scrollTop: number;\n scrollWidth: number;\n scrollHeight: number;\n viewWidth: number;\n viewHeight: number;\n scrollDirection: 'horizontal' | 'vertical';\n scrollRatioX?: number;\n scrollRatioY?: number;\n dx?: number;\n dy?: number;\n };\n scroll_vertical_end: {\n scrollLeft: number;\n scrollTop: number;\n scrollWidth: number;\n scrollHeight: number;\n viewWidth: number;\n viewHeight: number;\n };\n scroll_horizontal_end: {\n scrollLeft: number;\n scrollTop: number;\n scrollWidth: number;\n scrollHeight: number;\n viewWidth: number;\n viewHeight: number;\n };\n resize_column: { col: number; colWidth: number };\n resize_column_end: { col: number; colWidths: number[] };\n resize_row: { row: number; rowHeight: number };\n resize_row_end: { row: number; rowHeight: number };\n change_header_position: {\n source: CellAddress;\n target: CellAddress;\n movingColumnOrRow?: 'column' | 'row';\n event: Event;\n };\n change_header_position_start: {\n col: number;\n row: number;\n x: number;\n y: number;\n backX: number;\n lineX: number;\n backY: number;\n lineY: number;\n event: Event;\n movingColumnOrRow?: 'column' | 'row';\n };\n changing_header_position: {\n col: number;\n row: number;\n x: number;\n y: number;\n backX: number;\n lineX: number;\n backY: number;\n lineY: number;\n event: Event;\n movingColumnOrRow?: 'column' | 'row';\n };\n change_header_position_fail: {\n source: CellAddress;\n target: CellAddress;\n movingColumnOrRow?: 'column' | 'row';\n event: Event;\n };\n sort_click: {\n field: FieldDef;\n order: SortOrder;\n event: Event;\n };\n after_sort: {\n field: FieldDef;\n order: SortOrder;\n event: Event;\n };\n freeze_click: { col: number; row: number; fields: FieldDef[]; colCount: number };\n dropdown_menu_click: DropDownMenuEventArgs;\n\n mouseover_chart_symbol: MousePointerSparklineEvent;\n\n drag_select_end: MousePointerMultiCellEvent;\n selected_changed: {\n col: number;\n row: number;\n ranges: CellRange[];\n };\n copy_data: { cellRange: CellRange[]; copyData: string; isCut: boolean };\n drillmenu_click: DrillMenuEventInfo;\n\n dropdown_icon_click: CellAddress & { event: Event };\n dropdown_menu_clear: CellAddress;\n\n show_menu: {\n x: number;\n y: number;\n col: number;\n row: number;\n type: 'dropDown' | 'contextmenu' | 'custom';\n };\n hide_menu: [];\n icon_click: {\n name: string;\n col: number;\n row: number;\n x: number;\n y: number;\n funcType?: IconFuncTypeEnum | string;\n icon: Icon;\n event: Event;\n };\n\n pivot_sort_click: {\n col: number;\n row: number;\n order: SortOrder;\n dimensionInfo: IDimensionInfo[];\n cellLocation: CellLocation;\n event: Event;\n };\n tree_hierarchy_state_change: {\n col: number;\n row: number;\n changeAll?: boolean;\n hierarchyState: HierarchyState;\n dimensionInfo?: IDimensionInfo[];\n /**整条数据-原始数据 */\n originData?: any;\n cellLocation?: CellLocation;\n };\n vchart_event_type: {\n eventName: string;\n col: number;\n row: number;\n chartEventArguments: any;\n };\n //datasource部分的事件\n change_order: [];\n source_length_update: number;\n\n legend_item_click: { model: any; value: any; event: PointerEvent };\n legend_item_hover: { model: any; value: any; event: PointerEvent };\n legend_item_unHover: { model: any; value: any; event: PointerEvent };\n legend_change: { model: any; value: any; event: PointerEvent };\n\n mouseenter_axis: MousePointerCellEvent & { axisPosition: 'left' | 'right' | 'top' | 'bottom' };\n mouseleave_axis: MousePointerCellEvent & { axisPosition: 'left' | 'right' | 'top' | 'bottom' };\n\n checkbox_state_change: MousePointerCellEvent & { checked: boolean };\n radio_state_change: MousePointerCellEvent & { radioIndexInCell: number | undefined };\n switch_state_change: MousePointerCellEvent & { checked: boolean };\n before_init: { options: BaseTableConstructorOptions; container: HTMLElement | null };\n before_update_option: { options: BaseTableConstructorOptions; container: HTMLElement | null };\n before_set_size: { width: number; height: number };\n after_render: null;\n initialized: null;\n updated: null;\n after_update_cell_content_width: {\n col: number;\n row: number;\n cellHeight: number;\n cellGroup: Group;\n padding: [number, number, number, number];\n textBaseline: CanvasTextBaseline;\n };\n\n after_update_select_border_height: {\n startRow: number;\n endRow: number;\n currentHeight: number;\n selectComp: { rect: any; fillhandle?: any; role: string };\n };\n\n change_cell_value: {\n col: number;\n row: number;\n recordIndex?: number | number[];\n field?: FieldDef;\n rawValue: string | number;\n currentValue: string | number;\n changedValue: string | number;\n };\n change_cell_values: {\n values: {\n col: number;\n row: number;\n recordIndex?: number | number[];\n field?: FieldDef;\n rawValue: string | number;\n currentValue: string | number;\n changedValue: string | number;\n }[];\n };\n\n mousedown_fill_handle: {};\n drag_fill_handle_end: { direction?: 'top' | 'bottom' | 'left' | 'right' };\n dblclick_fill_handle: {};\n\n empty_tip_click: {};\n empty_tip_dblclick: {};\n\n button_click: {\n col: number;\n row: number;\n event: Event;\n };\n before_cache_chart_image: { chartInstance: any };\n pasted_data: {\n col: number;\n row: number;\n pasteData: (string | number)[][];\n changedCellResults: boolean[][];\n };\n plugin_event: {\n event: any;\n plugin: any;\n pluginEventInfo: any;\n };\n\n add_record: {\n records: any[];\n recordIndex?: number | number[];\n recordCount: number;\n };\n\n delete_record: {\n recordIndexs: number[] | number[][];\n records: any[];\n rowIndexs: number[];\n deletedCount: number;\n };\n\n update_record: {\n records: any[];\n recordIndexs: (number | number[])[];\n updateCount: number;\n };\n add_column: {\n columnIndex: number;\n columnCount: number;\n columns: ColumnsDefine;\n };\n delete_column: {\n // deleteBeforeColumns: ColumnsDefine;\n deleteColIndexs: number[];\n columns: ColumnsDefine;\n deletedColumns?: ColumnsDefine;\n deletedRecordValues?: any[][];\n };\n\n merge_cells: {\n startCol: number;\n startRow: number;\n endCol: number;\n endRow: number;\n };\n\n unmerge_cells: {\n startCol: number;\n startRow: number;\n endCol: number;\n endRow: number;\n };\n}\nexport interface DrillMenuEventInfo {\n dimensionKey: string | number;\n title: string;\n drillDown: boolean;\n drillUp: boolean;\n col: number;\n row: number;\n event: Event;\n}\nexport interface TableEventHandlersReturnMap {\n selected_cell: void;\n selected_clear: void;\n click_cell: void;\n dblclick_cell: void;\n mouseenter_table: void;\n mouseleave_table: void;\n mousedown_table: void;\n mousemove_table: void;\n mouseenter_cell: void;\n mouseleave_cell: void;\n // mouseover_cell: void;\n mouseout_cell: void;\n mousemove_cell: void;\n mousedown_cell: void;\n mouseup_cell: void;\n contextmenu_cell: void;\n contextmenu_canvas: void;\n before_keydown: void;\n keydown: void;\n scroll: void;\n can_scroll: void | boolean;\n focus_table: void;\n blur_table: void;\n resize_column: void;\n resize_column_end: void;\n resize_row: void;\n resize_row_end: void;\n change_header_position: void;\n change_header_position_start: void;\n changing_header_position: void;\n change_header_position_fail: void;\n sort_click: boolean;\n after_sort: void;\n freeze_click: void;\n dropdown_menu_click: void;\n\n mouseover_chart_symbol: void;\n drag_select_end: void;\n selected_changed: void;\n copy_data: void;\n drillmenu_click: void;\n\n dropdown_icon_click: void;\n dropdown_menu_clear: void;\n\n show_menu: void;\n hide_menu: void;\n icon_click: void;\n\n pivot_sort_click: void;\n\n tree_hierarchy_state_change: void;\n\n vchart_event_type: void;\n //datasource部分的事件\n change_order: void;\n source_length_update: void;\n legend_item_click: void;\n legend_item_hover: void;\n legend_item_unHover: void;\n legend_change: void;\n\n mouseenter_axis: void;\n mouseleave_axis: void;\n\n checkbox_state_change: void;\n radio_state_change: void;\n switch_state_change: void;\n before_init: void;\n before_update_option: void;\n before_set_size: void;\n after_render: void;\n initialized: void;\n updated: void;\n after_update_cell_content_width: void;\n\n after_update_select_border_height: void;\n change_cell_value: void;\n change_cell_values: void;\n mousedown_fill_handle: void;\n drag_fill_handle_end: void;\n dblclick_fill_handle: void;\n\n scroll_vertical_end: void;\n\n scroll_horizontal_end: void;\n\n empty_tip_click: void;\n empty_tip_dblclick: void;\n\n button_click: void;\n before_cache_chart_image: void;\n pasted_data: void;\n plugin_event: void;\n\n add_record: void;\n delete_record: void;\n update_record: void;\n add_column: void;\n delete_column: void;\n merge_cells: void;\n unmerge_cells: void;\n\n filter_menu_show: { col: number; row: number };\n filter_menu_hide: { col: number; row: number };\n}\n"]}