balala-revogrid 1.0.0

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 (760) hide show
  1. package/LICENSE +21 -0
  2. package/dist/cjs/app-globals-D67EXhgK.js +16 -0
  3. package/dist/cjs/app-globals-D67EXhgK.js.map +1 -0
  4. package/dist/cjs/cell-renderer-B87qecTb.js +57 -0
  5. package/dist/cjs/cell-renderer-B87qecTb.js.map +1 -0
  6. package/dist/cjs/debounce-CcpHiH2p.js +498 -0
  7. package/dist/cjs/debounce-CcpHiH2p.js.map +1 -0
  8. package/dist/cjs/dimension.helpers-DA9-xqPT.js +3606 -0
  9. package/dist/cjs/dimension.helpers-DA9-xqPT.js.map +1 -0
  10. package/dist/cjs/edit.utils-CKsIiHlD.js +113 -0
  11. package/dist/cjs/edit.utils-CKsIiHlD.js.map +1 -0
  12. package/dist/cjs/events-DeLDyZlb.js +46 -0
  13. package/dist/cjs/events-DeLDyZlb.js.map +1 -0
  14. package/dist/cjs/filter.button-DSsWNs23.js +49 -0
  15. package/dist/cjs/filter.button-DSsWNs23.js.map +1 -0
  16. package/dist/cjs/grouping.row.renderer-BqR0ytMi.js +64 -0
  17. package/dist/cjs/grouping.row.renderer-BqR0ytMi.js.map +1 -0
  18. package/dist/cjs/header-cell-renderer-D-RjAVfe.js +1766 -0
  19. package/dist/cjs/header-cell-renderer-D-RjAVfe.js.map +1 -0
  20. package/dist/cjs/index-BF1c1pO3.js +2549 -0
  21. package/dist/cjs/index-BF1c1pO3.js.map +1 -0
  22. package/dist/cjs/index.cjs.js +6426 -0
  23. package/dist/cjs/index.cjs.js.map +1 -0
  24. package/dist/cjs/loader.cjs.js +19 -0
  25. package/dist/cjs/loader.cjs.js.map +1 -0
  26. package/dist/cjs/revo-grid.cjs.entry.js +3215 -0
  27. package/dist/cjs/revo-grid.cjs.entry.js.map +1 -0
  28. package/dist/cjs/revo-grid.cjs.js +31 -0
  29. package/dist/cjs/revo-grid.cjs.js.map +1 -0
  30. package/dist/cjs/revo-grid.entry.cjs.js.map +1 -0
  31. package/dist/cjs/revogr-attribution.revogr-extra.revogr-focus.revogr-grouping-overlay.revogr-header-unified.revogr-overlay-selection.revogr-row-headers.revogr-scroll-virtual.revogr-temp-range.entry.cjs.js.map +1 -0
  32. package/dist/cjs/revogr-attribution_9.cjs.entry.js +2629 -0
  33. package/dist/cjs/revogr-attribution_9.cjs.entry.js.map +1 -0
  34. package/dist/cjs/revogr-clipboard.revogr-edit.revogr-order-editor.entry.cjs.js.map +1 -0
  35. package/dist/cjs/revogr-clipboard_3.cjs.entry.js +471 -0
  36. package/dist/cjs/revogr-clipboard_3.cjs.entry.js.map +1 -0
  37. package/dist/cjs/revogr-data.revogr-header.revogr-viewport-scroll.vnode-html.entry.cjs.js.map +1 -0
  38. package/dist/cjs/revogr-data_4.cjs.entry.js +1420 -0
  39. package/dist/cjs/revogr-data_4.cjs.entry.js.map +1 -0
  40. package/dist/cjs/revogr-filter-panel.cjs.entry.js +382 -0
  41. package/dist/cjs/revogr-filter-panel.cjs.entry.js.map +1 -0
  42. package/dist/cjs/revogr-filter-panel.entry.cjs.js.map +1 -0
  43. package/dist/cjs/row-renderer-BTE7VKD9.js +49 -0
  44. package/dist/cjs/row-renderer-BTE7VKD9.js.map +1 -0
  45. package/dist/cjs/text-editor-BdhmcrkS.js +81 -0
  46. package/dist/cjs/text-editor-BdhmcrkS.js.map +1 -0
  47. package/dist/cjs/throttle-2ZxfGjEI.js +533 -0
  48. package/dist/cjs/throttle-2ZxfGjEI.js.map +1 -0
  49. package/dist/cjs/tree-data.plugin-BRjwZtxI.js +5350 -0
  50. package/dist/cjs/tree-data.plugin-BRjwZtxI.js.map +1 -0
  51. package/dist/cjs/viewport.helpers-BAovztDd.js +61 -0
  52. package/dist/cjs/viewport.helpers-BAovztDd.js.map +1 -0
  53. package/dist/cjs/viewport.store-BTbPlyF-.js +525 -0
  54. package/dist/cjs/viewport.store-BTbPlyF-.js.map +1 -0
  55. package/dist/collection/collection-manifest.json +30 -0
  56. package/dist/collection/components/attribution/revogr-attribution.js +20 -0
  57. package/dist/collection/components/attribution/revogr-attribution.js.map +1 -0
  58. package/dist/collection/components/clipboard/revogr-clipboard.js +411 -0
  59. package/dist/collection/components/clipboard/revogr-clipboard.js.map +1 -0
  60. package/dist/collection/components/data/cell-renderer.js +44 -0
  61. package/dist/collection/components/data/cell-renderer.js.map +1 -0
  62. package/dist/collection/components/data/column.service.js +333 -0
  63. package/dist/collection/components/data/column.service.js.map +1 -0
  64. package/dist/collection/components/data/revogr-data-style.css +95 -0
  65. package/dist/collection/components/data/revogr-data.js +939 -0
  66. package/dist/collection/components/data/revogr-data.js.map +1 -0
  67. package/dist/collection/components/data/row-highlight.plugin.js +51 -0
  68. package/dist/collection/components/data/row-highlight.plugin.js.map +1 -0
  69. package/dist/collection/components/data/row-renderer.js +37 -0
  70. package/dist/collection/components/data/row-renderer.js.map +1 -0
  71. package/dist/collection/components/editors/edit.utils.js +13 -0
  72. package/dist/collection/components/editors/edit.utils.js.map +1 -0
  73. package/dist/collection/components/editors/revogr-edit-style.css +16 -0
  74. package/dist/collection/components/editors/revogr-edit.js +346 -0
  75. package/dist/collection/components/editors/revogr-edit.js.map +1 -0
  76. package/dist/collection/components/editors/text-editor.js +74 -0
  77. package/dist/collection/components/editors/text-editor.js.map +1 -0
  78. package/dist/collection/components/extra/revogr-extra.js +125 -0
  79. package/dist/collection/components/extra/revogr-extra.js.map +1 -0
  80. package/dist/collection/components/grouping-overlay/revogr-grouping-overlay.css +62 -0
  81. package/dist/collection/components/grouping-overlay/revogr-grouping-overlay.js +644 -0
  82. package/dist/collection/components/grouping-overlay/revogr-grouping-overlay.js.map +1 -0
  83. package/dist/collection/components/header/header-cell-renderer.js +49 -0
  84. package/dist/collection/components/header/header-cell-renderer.js.map +1 -0
  85. package/dist/collection/components/header/header-group-renderer.js +29 -0
  86. package/dist/collection/components/header/header-group-renderer.js.map +1 -0
  87. package/dist/collection/components/header/header-renderer.js +100 -0
  88. package/dist/collection/components/header/header-renderer.js.map +1 -0
  89. package/dist/collection/components/header/resizable.directive.js +274 -0
  90. package/dist/collection/components/header/resizable.directive.js.map +1 -0
  91. package/dist/collection/components/header/resizable.element.js +36 -0
  92. package/dist/collection/components/header/resizable.element.js.map +1 -0
  93. package/dist/collection/components/header/revogr-header-style.css +164 -0
  94. package/dist/collection/components/header/revogr-header-unified-style.css +205 -0
  95. package/dist/collection/components/header/revogr-header-unified.js +1013 -0
  96. package/dist/collection/components/header/revogr-header-unified.js.map +1 -0
  97. package/dist/collection/components/header/revogr-header.js +852 -0
  98. package/dist/collection/components/header/revogr-header.js.map +1 -0
  99. package/dist/collection/components/order/order-renderer.js +50 -0
  100. package/dist/collection/components/order/order-renderer.js.map +1 -0
  101. package/dist/collection/components/order/order-row.service.js +72 -0
  102. package/dist/collection/components/order/order-row.service.js.map +1 -0
  103. package/dist/collection/components/order/revogr-order-editor.js +461 -0
  104. package/dist/collection/components/order/revogr-order-editor.js.map +1 -0
  105. package/dist/collection/components/overlay/autofill.service.js +221 -0
  106. package/dist/collection/components/overlay/autofill.service.js.map +1 -0
  107. package/dist/collection/components/overlay/keyboard.service.js +178 -0
  108. package/dist/collection/components/overlay/keyboard.service.js.map +1 -0
  109. package/dist/collection/components/overlay/revogr-overlay-selection.js +1606 -0
  110. package/dist/collection/components/overlay/revogr-overlay-selection.js.map +1 -0
  111. package/dist/collection/components/overlay/revogr-overlay-style.css +95 -0
  112. package/dist/collection/components/overlay/selection.utils.js +136 -0
  113. package/dist/collection/components/overlay/selection.utils.js.map +1 -0
  114. package/dist/collection/components/revoGrid/grid.helpers.js +33 -0
  115. package/dist/collection/components/revoGrid/grid.helpers.js.map +1 -0
  116. package/dist/collection/components/revoGrid/plugin.service.js +81 -0
  117. package/dist/collection/components/revoGrid/plugin.service.js.map +1 -0
  118. package/dist/collection/components/revoGrid/revo-grid-style.css +897 -0
  119. package/dist/collection/components/revoGrid/revo-grid.js +4717 -0
  120. package/dist/collection/components/revoGrid/revo-grid.js.map +1 -0
  121. package/dist/collection/components/revoGrid/viewport.helpers.js +51 -0
  122. package/dist/collection/components/revoGrid/viewport.helpers.js.map +1 -0
  123. package/dist/collection/components/revoGrid/viewport.resize.service.js +55 -0
  124. package/dist/collection/components/revoGrid/viewport.resize.service.js.map +1 -0
  125. package/dist/collection/components/revoGrid/viewport.scrolling.service.js +139 -0
  126. package/dist/collection/components/revoGrid/viewport.scrolling.service.js.map +1 -0
  127. package/dist/collection/components/revoGrid/viewport.service.js +253 -0
  128. package/dist/collection/components/revoGrid/viewport.service.js.map +1 -0
  129. package/dist/collection/components/rowHeaders/revogr-row-headers.js +291 -0
  130. package/dist/collection/components/rowHeaders/revogr-row-headers.js.map +1 -0
  131. package/dist/collection/components/rowHeaders/row-header-render.js +5 -0
  132. package/dist/collection/components/rowHeaders/row-header-render.js.map +1 -0
  133. package/dist/collection/components/scroll/revogr-viewport-scroll-style.css +70 -0
  134. package/dist/collection/components/scroll/revogr-viewport-scroll.js +938 -0
  135. package/dist/collection/components/scroll/revogr-viewport-scroll.js.map +1 -0
  136. package/dist/collection/components/scrollable/autohide-scroll.plugin.js +44 -0
  137. package/dist/collection/components/scrollable/autohide-scroll.plugin.js.map +1 -0
  138. package/dist/collection/components/scrollable/revogr-scroll-style.css +34 -0
  139. package/dist/collection/components/scrollable/revogr-scroll-virtual.js +346 -0
  140. package/dist/collection/components/scrollable/revogr-scroll-virtual.js.map +1 -0
  141. package/dist/collection/components/selectionFocus/revogr-focus-style.css +7 -0
  142. package/dist/collection/components/selectionFocus/revogr-focus.js +429 -0
  143. package/dist/collection/components/selectionFocus/revogr-focus.js.map +1 -0
  144. package/dist/collection/components/selectionTempRange/revogr-temp-range-style.css +28 -0
  145. package/dist/collection/components/selectionTempRange/revogr-temp-range.js +171 -0
  146. package/dist/collection/components/selectionTempRange/revogr-temp-range.js.map +1 -0
  147. package/dist/collection/components/vnode/vnode-converter.js +84 -0
  148. package/dist/collection/components/vnode/vnode-converter.js.map +1 -0
  149. package/dist/collection/components/vnode/vnode.utils.js +18 -0
  150. package/dist/collection/components/vnode/vnode.utils.js.map +1 -0
  151. package/dist/collection/global/global.js +19 -0
  152. package/dist/collection/global/global.js.map +1 -0
  153. package/dist/collection/index.js +13 -0
  154. package/dist/collection/index.js.map +1 -0
  155. package/dist/collection/plugins/add-rows-on-paste.plugin.js +40 -0
  156. package/dist/collection/plugins/add-rows-on-paste.plugin.js.map +1 -0
  157. package/dist/collection/plugins/base.plugin.js +90 -0
  158. package/dist/collection/plugins/base.plugin.js.map +1 -0
  159. package/dist/collection/plugins/column-hide.plugin.js +532 -0
  160. package/dist/collection/plugins/column-hide.plugin.js.map +1 -0
  161. package/dist/collection/plugins/column-manage.plugin.js +1218 -0
  162. package/dist/collection/plugins/column-manage.plugin.js.map +1 -0
  163. package/dist/collection/plugins/column-stretch.plugin.js +921 -0
  164. package/dist/collection/plugins/column-stretch.plugin.js.map +1 -0
  165. package/dist/collection/plugins/column.auto-size.plugin.js +308 -0
  166. package/dist/collection/plugins/column.auto-size.plugin.js.map +1 -0
  167. package/dist/collection/plugins/column.stretch.plugin.js +96 -0
  168. package/dist/collection/plugins/column.stretch.plugin.js.map +1 -0
  169. package/dist/collection/plugins/customColumnDrag/column-move.helper.js +361 -0
  170. package/dist/collection/plugins/customColumnDrag/column-move.helper.js.map +1 -0
  171. package/dist/collection/plugins/customColumnDrag/custom-column-drag.plugin.js +145 -0
  172. package/dist/collection/plugins/customColumnDrag/custom-column-drag.plugin.js.map +1 -0
  173. package/dist/collection/plugins/customColumnDrag/drag.handler.js +726 -0
  174. package/dist/collection/plugins/customColumnDrag/drag.handler.js.map +1 -0
  175. package/dist/collection/plugins/customColumnDrag/example.js +282 -0
  176. package/dist/collection/plugins/customColumnDrag/example.js.map +1 -0
  177. package/dist/collection/plugins/customColumnDrag/index.js +8 -0
  178. package/dist/collection/plugins/customColumnDrag/index.js.map +1 -0
  179. package/dist/collection/plugins/customColumnDrag/types.js +2 -0
  180. package/dist/collection/plugins/customColumnDrag/types.js.map +1 -0
  181. package/dist/collection/plugins/dispatcher.js +40 -0
  182. package/dist/collection/plugins/dispatcher.js.map +1 -0
  183. package/dist/collection/plugins/enhanced-scrollbar.plugin.js +493 -0
  184. package/dist/collection/plugins/enhanced-scrollbar.plugin.js.map +1 -0
  185. package/dist/collection/plugins/export/csv.js +72 -0
  186. package/dist/collection/plugins/export/csv.js.map +1 -0
  187. package/dist/collection/plugins/export/export.plugin.js +157 -0
  188. package/dist/collection/plugins/export/export.plugin.js.map +1 -0
  189. package/dist/collection/plugins/export/types.js +2 -0
  190. package/dist/collection/plugins/export/types.js.map +1 -0
  191. package/dist/collection/plugins/filter/conditions/equal.js +21 -0
  192. package/dist/collection/plugins/filter/conditions/equal.js.map +1 -0
  193. package/dist/collection/plugins/filter/conditions/number/greaterThan.js +14 -0
  194. package/dist/collection/plugins/filter/conditions/number/greaterThan.js.map +1 -0
  195. package/dist/collection/plugins/filter/conditions/number/greaterThanOrEqual.js +11 -0
  196. package/dist/collection/plugins/filter/conditions/number/greaterThanOrEqual.js.map +1 -0
  197. package/dist/collection/plugins/filter/conditions/number/lessThan.js +16 -0
  198. package/dist/collection/plugins/filter/conditions/number/lessThan.js.map +1 -0
  199. package/dist/collection/plugins/filter/conditions/number/lessThanOrEqual.js +11 -0
  200. package/dist/collection/plugins/filter/conditions/number/lessThanOrEqual.js.map +1 -0
  201. package/dist/collection/plugins/filter/conditions/set.js +7 -0
  202. package/dist/collection/plugins/filter/conditions/set.js.map +1 -0
  203. package/dist/collection/plugins/filter/conditions/string/beginswith.js +21 -0
  204. package/dist/collection/plugins/filter/conditions/string/beginswith.js.map +1 -0
  205. package/dist/collection/plugins/filter/conditions/string/contains.js +25 -0
  206. package/dist/collection/plugins/filter/conditions/string/contains.js.map +1 -0
  207. package/dist/collection/plugins/filter/filter.button.js +28 -0
  208. package/dist/collection/plugins/filter/filter.button.js.map +1 -0
  209. package/dist/collection/plugins/filter/filter.indexed.js +49 -0
  210. package/dist/collection/plugins/filter/filter.indexed.js.map +1 -0
  211. package/dist/collection/plugins/filter/filter.panel.js +610 -0
  212. package/dist/collection/plugins/filter/filter.panel.js.map +1 -0
  213. package/dist/collection/plugins/filter/filter.plugin.js +388 -0
  214. package/dist/collection/plugins/filter/filter.plugin.js.map +1 -0
  215. package/dist/collection/plugins/filter/filter.style.css +165 -0
  216. package/dist/collection/plugins/filter/filter.types.js +9 -0
  217. package/dist/collection/plugins/filter/filter.types.js.map +1 -0
  218. package/dist/collection/plugins/grid-setup.js +131 -0
  219. package/dist/collection/plugins/grid-setup.js.map +1 -0
  220. package/dist/collection/plugins/groupingRow/grouping.const.js +18 -0
  221. package/dist/collection/plugins/groupingRow/grouping.const.js.map +1 -0
  222. package/dist/collection/plugins/groupingRow/grouping.row.expand.service.js +122 -0
  223. package/dist/collection/plugins/groupingRow/grouping.row.expand.service.js.map +1 -0
  224. package/dist/collection/plugins/groupingRow/grouping.row.plugin.js +252 -0
  225. package/dist/collection/plugins/groupingRow/grouping.row.plugin.js.map +1 -0
  226. package/dist/collection/plugins/groupingRow/grouping.row.renderer.js +49 -0
  227. package/dist/collection/plugins/groupingRow/grouping.row.renderer.js.map +1 -0
  228. package/dist/collection/plugins/groupingRow/grouping.row.types.js +2 -0
  229. package/dist/collection/plugins/groupingRow/grouping.row.types.js.map +1 -0
  230. package/dist/collection/plugins/groupingRow/grouping.service.js +215 -0
  231. package/dist/collection/plugins/groupingRow/grouping.service.js.map +1 -0
  232. package/dist/collection/plugins/groupingRow/grouping.trimmed.service.js +61 -0
  233. package/dist/collection/plugins/groupingRow/grouping.trimmed.service.js.map +1 -0
  234. package/dist/collection/plugins/index.js +26 -0
  235. package/dist/collection/plugins/index.js.map +1 -0
  236. package/dist/collection/plugins/manual-focus.plugin.js +353 -0
  237. package/dist/collection/plugins/manual-focus.plugin.js.map +1 -0
  238. package/dist/collection/plugins/moveColumn/column.drag.plugin.js +171 -0
  239. package/dist/collection/plugins/moveColumn/column.drag.plugin.js.map +1 -0
  240. package/dist/collection/plugins/moveColumn/order-column.handler.js +69 -0
  241. package/dist/collection/plugins/moveColumn/order-column.handler.js.map +1 -0
  242. package/dist/collection/plugins/pin-shadow.plugin.js +487 -0
  243. package/dist/collection/plugins/pin-shadow.plugin.js.map +1 -0
  244. package/dist/collection/plugins/resize-indicator.plugin.js +430 -0
  245. package/dist/collection/plugins/resize-indicator.plugin.js.map +1 -0
  246. package/dist/collection/plugins/row-select-plugin-2026228.js +1803 -0
  247. package/dist/collection/plugins/row-select-plugin-2026228.js.map +1 -0
  248. package/dist/collection/plugins/row-select.plugin.js +2096 -0
  249. package/dist/collection/plugins/row-select.plugin.js.map +1 -0
  250. package/dist/collection/plugins/rtl/rtl.plugin.js +110 -0
  251. package/dist/collection/plugins/rtl/rtl.plugin.js.map +1 -0
  252. package/dist/collection/plugins/sorting/sorting.func.js +82 -0
  253. package/dist/collection/plugins/sorting/sorting.func.js.map +1 -0
  254. package/dist/collection/plugins/sorting/sorting.plugin.js +224 -0
  255. package/dist/collection/plugins/sorting/sorting.plugin.js.map +1 -0
  256. package/dist/collection/plugins/sorting/sorting.sign.js +9 -0
  257. package/dist/collection/plugins/sorting/sorting.sign.js.map +1 -0
  258. package/dist/collection/plugins/sorting/sorting.types.js +2 -0
  259. package/dist/collection/plugins/sorting/sorting.types.js.map +1 -0
  260. package/dist/collection/plugins/tree-data.plugin.js +447 -0
  261. package/dist/collection/plugins/tree-data.plugin.js.map +1 -0
  262. package/dist/collection/plugins/wcag/index.js +84 -0
  263. package/dist/collection/plugins/wcag/index.js.map +1 -0
  264. package/dist/collection/serve/controller.js +344 -0
  265. package/dist/collection/serve/data.js +201 -0
  266. package/dist/collection/serve/realData.js +4148 -0
  267. package/dist/collection/services/cell.helpers.js +12 -0
  268. package/dist/collection/services/cell.helpers.js.map +1 -0
  269. package/dist/collection/services/column.data.provider.js +122 -0
  270. package/dist/collection/services/column.data.provider.js.map +1 -0
  271. package/dist/collection/services/data.provider.js +89 -0
  272. package/dist/collection/services/data.provider.js.map +1 -0
  273. package/dist/collection/services/dimension.provider.js +257 -0
  274. package/dist/collection/services/dimension.provider.js.map +1 -0
  275. package/dist/collection/services/local.scroll.service.js +136 -0
  276. package/dist/collection/services/local.scroll.service.js.map +1 -0
  277. package/dist/collection/services/local.scroll.timer.js +84 -0
  278. package/dist/collection/services/local.scroll.timer.js.map +1 -0
  279. package/dist/collection/services/selection.store.connector.js +274 -0
  280. package/dist/collection/services/selection.store.connector.js.map +1 -0
  281. package/dist/collection/services/viewport.provider.js +17 -0
  282. package/dist/collection/services/viewport.provider.js.map +1 -0
  283. package/dist/collection/store/dataSource/data.proxy.js +45 -0
  284. package/dist/collection/store/dataSource/data.proxy.js.map +1 -0
  285. package/dist/collection/store/dataSource/data.store.js +146 -0
  286. package/dist/collection/store/dataSource/data.store.js.map +1 -0
  287. package/dist/collection/store/dataSource/index.js +7 -0
  288. package/dist/collection/store/dataSource/index.js.map +1 -0
  289. package/dist/collection/store/dataSource/trimmed.plugin.js +34 -0
  290. package/dist/collection/store/dataSource/trimmed.plugin.js.map +1 -0
  291. package/dist/collection/store/dimension/dimension.helpers.js +101 -0
  292. package/dist/collection/store/dimension/dimension.helpers.js.map +1 -0
  293. package/dist/collection/store/dimension/dimension.recalculate.plugin.js +29 -0
  294. package/dist/collection/store/dimension/dimension.recalculate.plugin.js.map +1 -0
  295. package/dist/collection/store/dimension/dimension.store.js +124 -0
  296. package/dist/collection/store/dimension/dimension.store.js.map +1 -0
  297. package/dist/collection/store/dimension/dimension.trim.plugin.js +61 -0
  298. package/dist/collection/store/dimension/dimension.trim.plugin.js.map +1 -0
  299. package/dist/collection/store/dimension/index.js +6 -0
  300. package/dist/collection/store/dimension/index.js.map +1 -0
  301. package/dist/collection/store/index.js +17 -0
  302. package/dist/collection/store/index.js.map +1 -0
  303. package/dist/collection/store/selection/index.js +6 -0
  304. package/dist/collection/store/selection/index.js.map +1 -0
  305. package/dist/collection/store/selection/selection.helpers.js +49 -0
  306. package/dist/collection/store/selection/selection.helpers.js.map +1 -0
  307. package/dist/collection/store/selection/selection.store.js +85 -0
  308. package/dist/collection/store/selection/selection.store.js.map +1 -0
  309. package/dist/collection/store/vp/index.js +6 -0
  310. package/dist/collection/store/vp/index.js.map +1 -0
  311. package/dist/collection/store/vp/viewport.helpers.js +251 -0
  312. package/dist/collection/store/vp/viewport.helpers.js.map +1 -0
  313. package/dist/collection/store/vp/viewport.store.js +256 -0
  314. package/dist/collection/store/vp/viewport.store.js.map +1 -0
  315. package/dist/collection/themeManager/theme.compact.js +9 -0
  316. package/dist/collection/themeManager/theme.compact.js.map +1 -0
  317. package/dist/collection/themeManager/theme.default.js +9 -0
  318. package/dist/collection/themeManager/theme.default.js.map +1 -0
  319. package/dist/collection/themeManager/theme.material.js +9 -0
  320. package/dist/collection/themeManager/theme.material.js.map +1 -0
  321. package/dist/collection/themeManager/theme.service.js +53 -0
  322. package/dist/collection/themeManager/theme.service.js.map +1 -0
  323. package/dist/collection/types/dimension.js +2 -0
  324. package/dist/collection/types/dimension.js.map +1 -0
  325. package/dist/collection/types/events.js +124 -0
  326. package/dist/collection/types/events.js.map +1 -0
  327. package/dist/collection/types/index.js +12 -0
  328. package/dist/collection/types/index.js.map +1 -0
  329. package/dist/collection/types/interfaces.js +6 -0
  330. package/dist/collection/types/interfaces.js.map +1 -0
  331. package/dist/collection/types/plugin.js +2 -0
  332. package/dist/collection/types/plugin.js.map +1 -0
  333. package/dist/collection/types/plugin.types.js +2 -0
  334. package/dist/collection/types/plugin.types.js.map +1 -0
  335. package/dist/collection/types/selection.js +2 -0
  336. package/dist/collection/types/selection.js.map +1 -0
  337. package/dist/collection/types/theme.js +2 -0
  338. package/dist/collection/types/theme.js.map +1 -0
  339. package/dist/collection/types/viewport.interfaces.js +2 -0
  340. package/dist/collection/types/viewport.interfaces.js.map +1 -0
  341. package/dist/collection/utils/batchGroupCollapse.js +190 -0
  342. package/dist/collection/utils/batchGroupCollapse.js.map +1 -0
  343. package/dist/collection/utils/browser.js +7 -0
  344. package/dist/collection/utils/browser.js.map +1 -0
  345. package/dist/collection/utils/cell-template-helper.js +181 -0
  346. package/dist/collection/utils/cell-template-helper.js.map +1 -0
  347. package/dist/collection/utils/closest.polifill.js +22 -0
  348. package/dist/collection/utils/closest.polifill.js.map +1 -0
  349. package/dist/collection/utils/column.utils.js +448 -0
  350. package/dist/collection/utils/column.utils.js.map +1 -0
  351. package/dist/collection/utils/consts.js +26 -0
  352. package/dist/collection/utils/consts.js.map +1 -0
  353. package/dist/collection/utils/events.js +39 -0
  354. package/dist/collection/utils/events.js.map +1 -0
  355. package/dist/collection/utils/header.utils.js +24 -0
  356. package/dist/collection/utils/header.utils.js.map +1 -0
  357. package/dist/collection/utils/index.js +133 -0
  358. package/dist/collection/utils/index.js.map +1 -0
  359. package/dist/collection/utils/key.codes.js +80 -0
  360. package/dist/collection/utils/key.codes.js.map +1 -0
  361. package/dist/collection/utils/key.utils.js +86 -0
  362. package/dist/collection/utils/key.utils.js.map +1 -0
  363. package/dist/collection/utils/mobile.js +7 -0
  364. package/dist/collection/utils/mobile.js.map +1 -0
  365. package/dist/collection/utils/platform.js +9 -0
  366. package/dist/collection/utils/platform.js.map +1 -0
  367. package/dist/collection/utils/row-header-utils.js +9 -0
  368. package/dist/collection/utils/row-header-utils.js.map +1 -0
  369. package/dist/collection/utils/store.types.js +2 -0
  370. package/dist/collection/utils/store.types.js.map +1 -0
  371. package/dist/collection/utils/store.utils.js +15 -0
  372. package/dist/collection/utils/store.utils.js.map +1 -0
  373. package/dist/esm/app-globals-C3ZHKjnB.js +14 -0
  374. package/dist/esm/app-globals-C3ZHKjnB.js.map +1 -0
  375. package/dist/esm/cell-renderer-C2Td6LKY.js +54 -0
  376. package/dist/esm/cell-renderer-C2Td6LKY.js.map +1 -0
  377. package/dist/esm/debounce-BfO9dz9v.js +488 -0
  378. package/dist/esm/debounce-BfO9dz9v.js.map +1 -0
  379. package/dist/esm/dimension.helpers-DDil7Dg0.js +3546 -0
  380. package/dist/esm/dimension.helpers-DDil7Dg0.js.map +1 -0
  381. package/dist/esm/edit.utils-ClxXX_x9.js +99 -0
  382. package/dist/esm/edit.utils-ClxXX_x9.js.map +1 -0
  383. package/dist/esm/events-BvSmBueA.js +43 -0
  384. package/dist/esm/events-BvSmBueA.js.map +1 -0
  385. package/dist/esm/filter.button-DmOE7VCJ.js +39 -0
  386. package/dist/esm/filter.button-DmOE7VCJ.js.map +1 -0
  387. package/dist/esm/grouping.row.renderer-6NYszUJA.js +60 -0
  388. package/dist/esm/grouping.row.renderer-6NYszUJA.js.map +1 -0
  389. package/dist/esm/header-cell-renderer-BVHTuFGE.js +1715 -0
  390. package/dist/esm/header-cell-renderer-BVHTuFGE.js.map +1 -0
  391. package/dist/esm/index-Dyptvvxf.js +2519 -0
  392. package/dist/esm/index-Dyptvvxf.js.map +1 -0
  393. package/dist/esm/index.js +6232 -0
  394. package/dist/esm/index.js.map +1 -0
  395. package/dist/esm/loader.js +17 -0
  396. package/dist/esm/loader.js.map +1 -0
  397. package/dist/esm/revo-grid.entry.js +3213 -0
  398. package/dist/esm/revo-grid.entry.js.map +1 -0
  399. package/dist/esm/revo-grid.js +27 -0
  400. package/dist/esm/revo-grid.js.map +1 -0
  401. package/dist/esm/revogr-attribution.revogr-extra.revogr-focus.revogr-grouping-overlay.revogr-header-unified.revogr-overlay-selection.revogr-row-headers.revogr-scroll-virtual.revogr-temp-range.entry.js.map +1 -0
  402. package/dist/esm/revogr-attribution_9.entry.js +2619 -0
  403. package/dist/esm/revogr-attribution_9.entry.js.map +1 -0
  404. package/dist/esm/revogr-clipboard.revogr-edit.revogr-order-editor.entry.js.map +1 -0
  405. package/dist/esm/revogr-clipboard_3.entry.js +467 -0
  406. package/dist/esm/revogr-clipboard_3.entry.js.map +1 -0
  407. package/dist/esm/revogr-data.revogr-header.revogr-viewport-scroll.vnode-html.entry.js.map +1 -0
  408. package/dist/esm/revogr-data_4.entry.js +1415 -0
  409. package/dist/esm/revogr-data_4.entry.js.map +1 -0
  410. package/dist/esm/revogr-filter-panel.entry.js +380 -0
  411. package/dist/esm/revogr-filter-panel.entry.js.map +1 -0
  412. package/dist/esm/row-renderer-sb6QTqH-.js +46 -0
  413. package/dist/esm/row-renderer-sb6QTqH-.js.map +1 -0
  414. package/dist/esm/text-editor-CxXqoicM.js +79 -0
  415. package/dist/esm/text-editor-CxXqoicM.js.map +1 -0
  416. package/dist/esm/throttle-DXYrmEeb.js +525 -0
  417. package/dist/esm/throttle-DXYrmEeb.js.map +1 -0
  418. package/dist/esm/tree-data.plugin-C2eXkf9_.js +5319 -0
  419. package/dist/esm/tree-data.plugin-C2eXkf9_.js.map +1 -0
  420. package/dist/esm/viewport.helpers-VXhsJZtn.js +55 -0
  421. package/dist/esm/viewport.helpers-VXhsJZtn.js.map +1 -0
  422. package/dist/esm/viewport.store-C-GnV31k.js +512 -0
  423. package/dist/esm/viewport.store-C-GnV31k.js.map +1 -0
  424. package/dist/index.cjs.js +1 -0
  425. package/dist/index.js +1 -0
  426. package/dist/revo-grid/app-globals-C3ZHKjnB.js +14 -0
  427. package/dist/revo-grid/app-globals-C3ZHKjnB.js.map +1 -0
  428. package/dist/revo-grid/cell-renderer-C2Td6LKY.js +54 -0
  429. package/dist/revo-grid/cell-renderer-C2Td6LKY.js.map +1 -0
  430. package/dist/revo-grid/debounce-BfO9dz9v.js +488 -0
  431. package/dist/revo-grid/debounce-BfO9dz9v.js.map +1 -0
  432. package/dist/revo-grid/dimension.helpers-DDil7Dg0.js +3546 -0
  433. package/dist/revo-grid/dimension.helpers-DDil7Dg0.js.map +1 -0
  434. package/dist/revo-grid/edit.utils-ClxXX_x9.js +99 -0
  435. package/dist/revo-grid/edit.utils-ClxXX_x9.js.map +1 -0
  436. package/dist/revo-grid/events-BvSmBueA.js +43 -0
  437. package/dist/revo-grid/events-BvSmBueA.js.map +1 -0
  438. package/dist/revo-grid/filter.button-DmOE7VCJ.js +39 -0
  439. package/dist/revo-grid/filter.button-DmOE7VCJ.js.map +1 -0
  440. package/dist/revo-grid/grouping.row.renderer-6NYszUJA.js +60 -0
  441. package/dist/revo-grid/grouping.row.renderer-6NYszUJA.js.map +1 -0
  442. package/dist/revo-grid/header-cell-renderer-BVHTuFGE.js +1715 -0
  443. package/dist/revo-grid/header-cell-renderer-BVHTuFGE.js.map +1 -0
  444. package/dist/revo-grid/index-Dyptvvxf.js +2490 -0
  445. package/dist/revo-grid/index-Dyptvvxf.js.map +1 -0
  446. package/dist/revo-grid/index.esm.js +6232 -0
  447. package/dist/revo-grid/index.esm.js.map +1 -0
  448. package/dist/revo-grid/loader.esm.js.map +1 -0
  449. package/dist/revo-grid/revo-grid.entry.esm.js.map +1 -0
  450. package/dist/revo-grid/revo-grid.entry.js +3213 -0
  451. package/dist/revo-grid/revo-grid.entry.js.map +1 -0
  452. package/dist/revo-grid/revo-grid.esm.js +27 -0
  453. package/dist/revo-grid/revo-grid.esm.js.map +1 -0
  454. package/dist/revo-grid/revogr-attribution.revogr-extra.revogr-focus.revogr-grouping-overlay.revogr-header-unified.revogr-overlay-selection.revogr-row-headers.revogr-scroll-virtual.revogr-temp-range.entry.esm.js.map +1 -0
  455. package/dist/revo-grid/revogr-attribution_9.entry.js +2619 -0
  456. package/dist/revo-grid/revogr-attribution_9.entry.js.map +1 -0
  457. package/dist/revo-grid/revogr-clipboard.revogr-edit.revogr-order-editor.entry.esm.js.map +1 -0
  458. package/dist/revo-grid/revogr-clipboard_3.entry.js +467 -0
  459. package/dist/revo-grid/revogr-clipboard_3.entry.js.map +1 -0
  460. package/dist/revo-grid/revogr-data.revogr-header.revogr-viewport-scroll.vnode-html.entry.esm.js.map +1 -0
  461. package/dist/revo-grid/revogr-data_4.entry.js +1415 -0
  462. package/dist/revo-grid/revogr-data_4.entry.js.map +1 -0
  463. package/dist/revo-grid/revogr-filter-panel.entry.esm.js.map +1 -0
  464. package/dist/revo-grid/revogr-filter-panel.entry.js +380 -0
  465. package/dist/revo-grid/revogr-filter-panel.entry.js.map +1 -0
  466. package/dist/revo-grid/row-renderer-sb6QTqH-.js +46 -0
  467. package/dist/revo-grid/row-renderer-sb6QTqH-.js.map +1 -0
  468. package/dist/revo-grid/text-editor-CxXqoicM.js +79 -0
  469. package/dist/revo-grid/text-editor-CxXqoicM.js.map +1 -0
  470. package/dist/revo-grid/throttle-DXYrmEeb.js +525 -0
  471. package/dist/revo-grid/throttle-DXYrmEeb.js.map +1 -0
  472. package/dist/revo-grid/tree-data.plugin-C2eXkf9_.js +5319 -0
  473. package/dist/revo-grid/tree-data.plugin-C2eXkf9_.js.map +1 -0
  474. package/dist/revo-grid/viewport.helpers-VXhsJZtn.js +55 -0
  475. package/dist/revo-grid/viewport.helpers-VXhsJZtn.js.map +1 -0
  476. package/dist/revo-grid/viewport.store-C-GnV31k.js +512 -0
  477. package/dist/revo-grid/viewport.store-C-GnV31k.js.map +1 -0
  478. package/dist/types/components/attribution/revogr-attribution.d.ts +12 -0
  479. package/dist/types/components/clipboard/revogr-clipboard.d.ts +89 -0
  480. package/dist/types/components/data/cell-renderer.d.ts +12 -0
  481. package/dist/types/components/data/column.service.d.ts +65 -0
  482. package/dist/types/components/data/revogr-data.d.ts +132 -0
  483. package/dist/types/components/data/row-highlight.plugin.d.ts +10 -0
  484. package/dist/types/components/data/row-renderer.d.ts +13 -0
  485. package/dist/types/components/editors/edit.utils.d.ts +3 -0
  486. package/dist/types/components/editors/revogr-edit.d.ts +63 -0
  487. package/dist/types/components/editors/text-editor.d.ts +43 -0
  488. package/dist/types/components/extra/revogr-extra.d.ts +38 -0
  489. package/dist/types/components/grouping-overlay/revogr-grouping-overlay.d.ts +71 -0
  490. package/dist/types/components/header/header-cell-renderer.d.ts +10 -0
  491. package/dist/types/components/header/header-group-renderer.d.ts +17 -0
  492. package/dist/types/components/header/header-renderer.d.ts +24 -0
  493. package/dist/types/components/header/resizable.directive.d.ts +60 -0
  494. package/dist/types/components/header/resizable.element.d.ts +5 -0
  495. package/dist/types/components/header/revogr-header-unified.d.ts +168 -0
  496. package/dist/types/components/header/revogr-header.d.ts +131 -0
  497. package/dist/types/components/order/order-renderer.d.ts +29 -0
  498. package/dist/types/components/order/order-row.service.d.ts +27 -0
  499. package/dist/types/components/order/revogr-order-editor.d.ts +56 -0
  500. package/dist/types/components/overlay/autofill.service.d.ts +80 -0
  501. package/dist/types/components/overlay/keyboard.service.d.ts +29 -0
  502. package/dist/types/components/overlay/revogr-overlay-selection.d.ts +295 -0
  503. package/dist/types/components/overlay/selection.utils.d.ts +47 -0
  504. package/dist/types/components/revoGrid/grid.helpers.d.ts +17 -0
  505. package/dist/types/components/revoGrid/plugin.service.d.ts +37 -0
  506. package/dist/types/components/revoGrid/revo-grid.d.ts +801 -0
  507. package/dist/types/components/revoGrid/viewport.helpers.d.ts +42 -0
  508. package/dist/types/components/revoGrid/viewport.resize.service.d.ts +17 -0
  509. package/dist/types/components/revoGrid/viewport.scrolling.service.d.ts +24 -0
  510. package/dist/types/components/revoGrid/viewport.service.d.ts +59 -0
  511. package/dist/types/components/rowHeaders/revogr-row-headers.d.ts +51 -0
  512. package/dist/types/components/rowHeaders/row-header-render.d.ts +9 -0
  513. package/dist/types/components/scroll/revogr-viewport-scroll.d.ts +159 -0
  514. package/dist/types/components/scrollable/autohide-scroll.plugin.d.ts +22 -0
  515. package/dist/types/components/scrollable/revogr-scroll-virtual.d.ts +49 -0
  516. package/dist/types/components/selectionFocus/revogr-focus.d.ts +63 -0
  517. package/dist/types/components/selectionTempRange/revogr-temp-range.d.ts +28 -0
  518. package/dist/types/components/vnode/vnode-converter.d.ts +19 -0
  519. package/dist/types/components/vnode/vnode.utils.d.ts +9 -0
  520. package/dist/types/components.d.ts +2928 -0
  521. package/dist/types/global/global.d.ts +1 -0
  522. package/dist/types/index.d.ts +9 -0
  523. package/dist/types/plugins/add-rows-on-paste.plugin.d.ts +14 -0
  524. package/dist/types/plugins/base.plugin.d.ts +51 -0
  525. package/dist/types/plugins/column-hide.plugin.d.ts +110 -0
  526. package/dist/types/plugins/column-manage.plugin.d.ts +225 -0
  527. package/dist/types/plugins/column-stretch.plugin.d.ts +159 -0
  528. package/dist/types/plugins/column.auto-size.plugin.d.ts +69 -0
  529. package/dist/types/plugins/column.stretch.plugin.d.ts +20 -0
  530. package/dist/types/plugins/customColumnDrag/column-move.helper.d.ts +71 -0
  531. package/dist/types/plugins/customColumnDrag/custom-column-drag.plugin.d.ts +35 -0
  532. package/dist/types/plugins/customColumnDrag/drag.handler.d.ts +112 -0
  533. package/dist/types/plugins/customColumnDrag/example.d.ts +31 -0
  534. package/dist/types/plugins/customColumnDrag/index.d.ts +5 -0
  535. package/dist/types/plugins/customColumnDrag/types.d.ts +46 -0
  536. package/dist/types/plugins/dispatcher.d.ts +20 -0
  537. package/dist/types/plugins/enhanced-scrollbar.plugin.d.ts +76 -0
  538. package/dist/types/plugins/export/csv.d.ts +9 -0
  539. package/dist/types/plugins/export/export.plugin.d.ts +24 -0
  540. package/dist/types/plugins/export/types.d.ts +23 -0
  541. package/dist/types/plugins/filter/conditions/equal.d.ts +4 -0
  542. package/dist/types/plugins/filter/conditions/number/greaterThan.d.ts +3 -0
  543. package/dist/types/plugins/filter/conditions/number/greaterThanOrEqual.d.ts +3 -0
  544. package/dist/types/plugins/filter/conditions/number/lessThan.d.ts +3 -0
  545. package/dist/types/plugins/filter/conditions/number/lessThanOrEqual.d.ts +3 -0
  546. package/dist/types/plugins/filter/conditions/set.d.ts +4 -0
  547. package/dist/types/plugins/filter/conditions/string/beginswith.d.ts +3 -0
  548. package/dist/types/plugins/filter/conditions/string/contains.d.ts +4 -0
  549. package/dist/types/plugins/filter/filter.button.d.ts +14 -0
  550. package/dist/types/plugins/filter/filter.indexed.d.ts +20 -0
  551. package/dist/types/plugins/filter/filter.panel.d.ts +53 -0
  552. package/dist/types/plugins/filter/filter.plugin.d.ts +73 -0
  553. package/dist/types/plugins/filter/filter.types.d.ts +129 -0
  554. package/dist/types/plugins/grid-setup.d.ts +65 -0
  555. package/dist/types/plugins/groupingRow/grouping.const.d.ts +14 -0
  556. package/dist/types/plugins/groupingRow/grouping.row.expand.service.d.ts +15 -0
  557. package/dist/types/plugins/groupingRow/grouping.row.plugin.d.ts +39 -0
  558. package/dist/types/plugins/groupingRow/grouping.row.renderer.d.ts +6 -0
  559. package/dist/types/plugins/groupingRow/grouping.row.types.d.ts +144 -0
  560. package/dist/types/plugins/groupingRow/grouping.service.d.ts +36 -0
  561. package/dist/types/plugins/groupingRow/grouping.trimmed.service.d.ts +10 -0
  562. package/dist/types/plugins/index.d.ts +22 -0
  563. package/dist/types/plugins/manual-focus.plugin.d.ts +113 -0
  564. package/dist/types/plugins/moveColumn/column.drag.plugin.d.ts +50 -0
  565. package/dist/types/plugins/moveColumn/order-column.handler.d.ts +16 -0
  566. package/dist/types/plugins/pin-shadow.plugin.d.ts +73 -0
  567. package/dist/types/plugins/resize-indicator.plugin.d.ts +71 -0
  568. package/dist/types/plugins/row-select-plugin-2026228.d.ts +367 -0
  569. package/dist/types/plugins/row-select.plugin.d.ts +378 -0
  570. package/dist/types/plugins/rtl/rtl.plugin.d.ts +37 -0
  571. package/dist/types/plugins/sorting/sorting.func.d.ts +9 -0
  572. package/dist/types/plugins/sorting/sorting.plugin.d.ts +48 -0
  573. package/dist/types/plugins/sorting/sorting.sign.d.ts +6 -0
  574. package/dist/types/plugins/sorting/sorting.types.d.ts +14 -0
  575. package/dist/types/plugins/tree-data.plugin.d.ts +56 -0
  576. package/dist/types/plugins/wcag/index.d.ts +26 -0
  577. package/dist/types/services/cell.helpers.d.ts +2 -0
  578. package/dist/types/services/column.data.provider.d.ts +27 -0
  579. package/dist/types/services/data.provider.d.ts +36 -0
  580. package/dist/types/services/dimension.provider.d.ts +71 -0
  581. package/dist/types/services/local.scroll.service.d.ts +36 -0
  582. package/dist/types/services/local.scroll.timer.d.ts +32 -0
  583. package/dist/types/services/selection.store.connector.d.ts +74 -0
  584. package/dist/types/services/viewport.provider.d.ts +9 -0
  585. package/dist/types/stencil-public-runtime.d.ts +1709 -0
  586. package/dist/types/store/dataSource/data.proxy.d.ts +14 -0
  587. package/dist/types/store/dataSource/data.store.d.ts +77 -0
  588. package/dist/types/store/dataSource/index.d.ts +3 -0
  589. package/dist/types/store/dataSource/trimmed.plugin.d.ts +12 -0
  590. package/dist/types/store/dimension/dimension.helpers.d.ts +24 -0
  591. package/dist/types/store/dimension/dimension.recalculate.plugin.d.ts +15 -0
  592. package/dist/types/store/dimension/dimension.store.d.ts +34 -0
  593. package/dist/types/store/dimension/dimension.trim.plugin.d.ts +13 -0
  594. package/dist/types/store/dimension/index.d.ts +2 -0
  595. package/dist/types/store/index.d.ts +8 -0
  596. package/dist/types/store/selection/index.d.ts +2 -0
  597. package/dist/types/store/selection/selection.helpers.d.ts +5 -0
  598. package/dist/types/store/selection/selection.store.d.ts +22 -0
  599. package/dist/types/store/vp/index.d.ts +7 -0
  600. package/dist/types/store/vp/viewport.helpers.d.ts +54 -0
  601. package/dist/types/store/vp/viewport.store.d.ts +38 -0
  602. package/dist/types/themeManager/theme.compact.d.ts +4 -0
  603. package/dist/types/themeManager/theme.default.d.ts +4 -0
  604. package/dist/types/themeManager/theme.material.d.ts +4 -0
  605. package/dist/types/themeManager/theme.service.d.ts +13 -0
  606. package/dist/types/types/dimension.d.ts +8 -0
  607. package/dist/types/types/events.d.ts +2 -0
  608. package/dist/types/types/index.d.ts +8 -0
  609. package/dist/types/types/interfaces.d.ts +795 -0
  610. package/dist/types/types/plugin.d.ts +9 -0
  611. package/dist/types/types/plugin.types.d.ts +48 -0
  612. package/dist/types/types/selection.d.ts +178 -0
  613. package/dist/types/types/theme.d.ts +7 -0
  614. package/dist/types/types/viewport.interfaces.d.ts +45 -0
  615. package/dist/types/utils/batchGroupCollapse.d.ts +77 -0
  616. package/dist/types/utils/browser.d.ts +1 -0
  617. package/dist/types/utils/cell-template-helper.d.ts +74 -0
  618. package/dist/types/utils/closest.polifill.d.ts +0 -0
  619. package/dist/types/utils/column.utils.d.ts +110 -0
  620. package/dist/types/utils/consts.d.ts +22 -0
  621. package/dist/types/utils/events.d.ts +5 -0
  622. package/dist/types/utils/header.utils.d.ts +2 -0
  623. package/dist/types/utils/index.d.ts +32 -0
  624. package/dist/types/utils/key.codes.d.ts +73 -0
  625. package/dist/types/utils/key.utils.d.ts +12 -0
  626. package/dist/types/utils/mobile.d.ts +1 -0
  627. package/dist/types/utils/platform.d.ts +4 -0
  628. package/dist/types/utils/row-header-utils.d.ts +2 -0
  629. package/dist/types/utils/store.types.d.ts +97 -0
  630. package/dist/types/utils/store.utils.d.ts +10 -0
  631. package/hydrate/index.d.ts +273 -0
  632. package/hydrate/index.js +39851 -0
  633. package/hydrate/index.mjs +39843 -0
  634. package/hydrate/package.json +12 -0
  635. package/loader/cdn.js +4 -0
  636. package/loader/index.cjs.js +4 -0
  637. package/loader/index.d.ts +24 -0
  638. package/loader/index.es2017.js +4 -0
  639. package/loader/index.js +5 -0
  640. package/package.json +149 -0
  641. package/readme.md +303 -0
  642. package/standalone/column.service.js +1110 -0
  643. package/standalone/column.service.js.map +1 -0
  644. package/standalone/consts.js +30 -0
  645. package/standalone/consts.js.map +1 -0
  646. package/standalone/data.store.js +3101 -0
  647. package/standalone/data.store.js.map +1 -0
  648. package/standalone/debounce.js +215 -0
  649. package/standalone/debounce.js.map +1 -0
  650. package/standalone/dimension.helpers.js +229 -0
  651. package/standalone/dimension.helpers.js.map +1 -0
  652. package/standalone/filter.button.js +39 -0
  653. package/standalone/filter.button.js.map +1 -0
  654. package/standalone/grouping.service.js +234 -0
  655. package/standalone/grouping.service.js.map +1 -0
  656. package/standalone/header-group-renderer.js +634 -0
  657. package/standalone/header-group-renderer.js.map +1 -0
  658. package/standalone/index.d.ts +72 -0
  659. package/standalone/index.js +6272 -0
  660. package/standalone/index.js.map +1 -0
  661. package/standalone/index2.js +131 -0
  662. package/standalone/index2.js.map +1 -0
  663. package/standalone/local.scroll.timer.js +222 -0
  664. package/standalone/local.scroll.timer.js.map +1 -0
  665. package/standalone/platform.js +90 -0
  666. package/standalone/platform.js.map +1 -0
  667. package/standalone/revo-grid.d.ts +11 -0
  668. package/standalone/revo-grid.js +8734 -0
  669. package/standalone/revo-grid.js.map +1 -0
  670. package/standalone/revogr-attribution.d.ts +11 -0
  671. package/standalone/revogr-attribution.js +12 -0
  672. package/standalone/revogr-attribution.js.map +1 -0
  673. package/standalone/revogr-attribution2.js +32 -0
  674. package/standalone/revogr-attribution2.js.map +1 -0
  675. package/standalone/revogr-clipboard.d.ts +11 -0
  676. package/standalone/revogr-clipboard.js +12 -0
  677. package/standalone/revogr-clipboard.js.map +1 -0
  678. package/standalone/revogr-clipboard2.js +179 -0
  679. package/standalone/revogr-clipboard2.js.map +1 -0
  680. package/standalone/revogr-data.d.ts +11 -0
  681. package/standalone/revogr-data.js +12 -0
  682. package/standalone/revogr-data.js.map +1 -0
  683. package/standalone/revogr-data2.js +503 -0
  684. package/standalone/revogr-data2.js.map +1 -0
  685. package/standalone/revogr-edit.d.ts +11 -0
  686. package/standalone/revogr-edit.js +12 -0
  687. package/standalone/revogr-edit.js.map +1 -0
  688. package/standalone/revogr-edit2.js +330 -0
  689. package/standalone/revogr-edit2.js.map +1 -0
  690. package/standalone/revogr-extra.d.ts +11 -0
  691. package/standalone/revogr-extra.js +12 -0
  692. package/standalone/revogr-extra.js.map +1 -0
  693. package/standalone/revogr-extra2.js +73 -0
  694. package/standalone/revogr-extra2.js.map +1 -0
  695. package/standalone/revogr-filter-panel.d.ts +11 -0
  696. package/standalone/revogr-filter-panel.js +411 -0
  697. package/standalone/revogr-filter-panel.js.map +1 -0
  698. package/standalone/revogr-focus.d.ts +11 -0
  699. package/standalone/revogr-focus.js +12 -0
  700. package/standalone/revogr-focus.js.map +1 -0
  701. package/standalone/revogr-focus2.js +119 -0
  702. package/standalone/revogr-focus2.js.map +1 -0
  703. package/standalone/revogr-grouping-overlay.d.ts +11 -0
  704. package/standalone/revogr-grouping-overlay.js +12 -0
  705. package/standalone/revogr-grouping-overlay.js.map +1 -0
  706. package/standalone/revogr-grouping-overlay2.js +356 -0
  707. package/standalone/revogr-grouping-overlay2.js.map +1 -0
  708. package/standalone/revogr-header-unified.d.ts +11 -0
  709. package/standalone/revogr-header-unified.js +12 -0
  710. package/standalone/revogr-header-unified.js.map +1 -0
  711. package/standalone/revogr-header-unified2.js +781 -0
  712. package/standalone/revogr-header-unified2.js.map +1 -0
  713. package/standalone/revogr-header.d.ts +11 -0
  714. package/standalone/revogr-header.js +12 -0
  715. package/standalone/revogr-header.js.map +1 -0
  716. package/standalone/revogr-header2.js +343 -0
  717. package/standalone/revogr-header2.js.map +1 -0
  718. package/standalone/revogr-order-editor.d.ts +11 -0
  719. package/standalone/revogr-order-editor.js +12 -0
  720. package/standalone/revogr-order-editor.js.map +1 -0
  721. package/standalone/revogr-order-editor2.js +201 -0
  722. package/standalone/revogr-order-editor2.js.map +1 -0
  723. package/standalone/revogr-overlay-selection.d.ts +11 -0
  724. package/standalone/revogr-overlay-selection.js +12 -0
  725. package/standalone/revogr-overlay-selection.js.map +1 -0
  726. package/standalone/revogr-overlay-selection2.js +1068 -0
  727. package/standalone/revogr-overlay-selection2.js.map +1 -0
  728. package/standalone/revogr-row-headers.d.ts +11 -0
  729. package/standalone/revogr-row-headers.js +12 -0
  730. package/standalone/revogr-row-headers.js.map +1 -0
  731. package/standalone/revogr-row-headers2.js +625 -0
  732. package/standalone/revogr-row-headers2.js.map +1 -0
  733. package/standalone/revogr-scroll-virtual.d.ts +11 -0
  734. package/standalone/revogr-scroll-virtual.js +12 -0
  735. package/standalone/revogr-scroll-virtual.js.map +1 -0
  736. package/standalone/revogr-scroll-virtual2.js +235 -0
  737. package/standalone/revogr-scroll-virtual2.js.map +1 -0
  738. package/standalone/revogr-temp-range.d.ts +11 -0
  739. package/standalone/revogr-temp-range.js +12 -0
  740. package/standalone/revogr-temp-range.js.map +1 -0
  741. package/standalone/revogr-temp-range2.js +93 -0
  742. package/standalone/revogr-temp-range2.js.map +1 -0
  743. package/standalone/revogr-viewport-scroll.d.ts +11 -0
  744. package/standalone/revogr-viewport-scroll.js +12 -0
  745. package/standalone/revogr-viewport-scroll.js.map +1 -0
  746. package/standalone/revogr-viewport-scroll2.js +761 -0
  747. package/standalone/revogr-viewport-scroll2.js.map +1 -0
  748. package/standalone/row-renderer.js +41 -0
  749. package/standalone/row-renderer.js.map +1 -0
  750. package/standalone/selection.utils.js +179 -0
  751. package/standalone/selection.utils.js.map +1 -0
  752. package/standalone/throttle.js +75 -0
  753. package/standalone/throttle.js.map +1 -0
  754. package/standalone/toNumber.js +282 -0
  755. package/standalone/toNumber.js.map +1 -0
  756. package/standalone/vnode-converter.js +46 -0
  757. package/standalone/vnode-converter.js.map +1 -0
  758. package/standalone/vnode-html.d.ts +11 -0
  759. package/standalone/vnode-html.js +12 -0
  760. package/standalone/vnode-html.js.map +1 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tree-data.plugin-C2eXkf9_.js","sources":["src/store/dimension/dimension.recalculate.plugin.ts","src/store/dimension/dimension.trim.plugin.ts","src/store/dimension/dimension.store.ts","src/store/selection/selection.store.ts","src/plugins/base.plugin.ts","node_modules/lodash/_arrayEach.js","node_modules/lodash/_castFunction.js","node_modules/lodash/forEach.js","src/plugins/column-stretch.plugin.ts","src/plugins/column.auto-size.plugin.ts","src/plugins/column.stretch.plugin.ts","node_modules/lodash/_baseClamp.js","node_modules/lodash/toLength.js","node_modules/lodash/_baseFill.js","node_modules/lodash/fill.js","src/plugins/export/csv.ts","src/plugins/export/export.plugin.ts","src/plugins/filter/conditions/equal.ts","src/plugins/filter/conditions/number/greaterThan.ts","src/plugins/filter/conditions/number/greaterThanOrEqual.ts","src/plugins/filter/conditions/number/lessThan.ts","src/plugins/filter/conditions/number/lessThanOrEqual.ts","src/plugins/filter/conditions/set.ts","src/plugins/filter/conditions/string/beginswith.ts","src/plugins/filter/conditions/string/contains.ts","src/plugins/filter/filter.indexed.ts","src/plugins/filter/filter.plugin.tsx","node_modules/lodash/isString.js","node_modules/lodash/_asciiSize.js","node_modules/lodash/_hasUnicode.js","node_modules/lodash/_unicodeSize.js","node_modules/lodash/_stringSize.js","node_modules/lodash/size.js","src/plugins/sorting/sorting.func.ts","src/plugins/sorting/sorting.plugin.ts","src/plugins/groupingRow/grouping.row.expand.service.ts","src/plugins/groupingRow/grouping.trimmed.service.ts","src/plugins/groupingRow/grouping.row.plugin.ts","src/plugins/moveColumn/order-column.handler.tsx","src/plugins/moveColumn/column.drag.plugin.ts","src/plugins/column-manage.plugin.ts","src/plugins/tree-data.plugin.ts"],"sourcesContent":["import { DimensionSettingsState, MultiDimensionType } from '@type';\nimport type { Observable, PluginSubscribe } from '../../utils';\n\n/**\n * Plugin which recalculates realSize on changes of sizes, originItemSize and count\n */\nexport const recalculateRealSizePlugin = (storeService: {\n store: Observable<DimensionSettingsState>;\n setStore: (k: Partial<DimensionSettingsState>) => void;\n type?: MultiDimensionType;\n // 获取其他列类型的 realSize(用于 rgCol 计算可用宽度)\n getOtherColumnRealSizes?: () => { colPinStart: number; colPinEnd: number };\n // 获取表格总宽度(用于 rgCol 计算可用宽度)\n getGridTotalWidth?: () => number;\n}): PluginSubscribe<DimensionSettingsState> => {\n return {\n set(k) {\n switch (k) {\n case 'count':\n case 'sizes':\n case 'originItemSize': {\n let realSize = 0;\n const count = storeService.store.get('count');\n const sizes = storeService.store.get('sizes');\n const originItemSize = storeService.store.get('originItemSize');\n \n // 默认:累加所有列宽度\n for (let i = 0; i < count; i++) {\n realSize += sizes[i] || originItemSize;\n }\n \n storeService.setStore({ realSize });\n break;\n }\n }\n },\n };\n};\n","import { DimensionSettingsState } from '@type';\nimport type { Observable, PluginSubscribe } from '../../utils';\n/**\n * Plugin for trimming\n *\n * 1.a. Retrieves the previous sizes value. Saves the resulting trimmed data as a new sizes value.\n * 1.b. Stores a reference to the trimmed data to prevent further changes.\n * 2. Removes multiple and shifts the data based on the trimmed value.\n */\nexport const trimmedPlugin = (storeService: {\n store: Observable<DimensionSettingsState>;\n setSizes: (k: DimensionSettingsState['sizes']) => void;\n}): PluginSubscribe<DimensionSettingsState> => {\n let trimmingObject: DimensionSettingsState['sizes'] | null = null;\n let trimmedPreviousSizes: DimensionSettingsState['sizes'] | null = null;\n\n return {\n set(key, val) {\n switch (key) {\n case 'sizes': {\n // prevent changes after trimming\n if (trimmingObject && trimmingObject === val) {\n trimmingObject = null;\n return;\n }\n trimmedPreviousSizes = null;\n break;\n }\n case 'trimmed': {\n const trim = val as DimensionSettingsState['trimmed'];\n if (!trimmedPreviousSizes) {\n trimmedPreviousSizes = storeService.store.get('sizes');\n }\n\n trimmingObject = removeMultipleAndShift(\n trimmedPreviousSizes,\n trim || {},\n );\n // save a reference to the trimmed object to prevent changes after trimming\n storeService.setSizes(trimmingObject);\n break;\n }\n }\n },\n };\n};\n\nfunction removeMultipleAndShift<T1, T2>(\n items: { [virtialIndex: number]: T1 },\n toRemove: { [virtialIndex: number]: T2 },\n): { [virtialIndex: number]: T1 } {\n const newItems: { [virtialIndex: number]: T1 } = {};\n const sortedIndexes = Object.keys(items || {})\n .map(Number)\n .sort((a, b) => a - b);\n const lastIndex = sortedIndexes[sortedIndexes.length - 1];\n let shift = 0;\n for (let i = 0; i <= lastIndex; i++) {\n if (toRemove[i] !== undefined) {\n shift++;\n\n // skip already removed\n if (items[i] !== undefined) {\n continue;\n }\n }\n if (items[i] !== undefined) {\n newItems[i - shift] = items[i];\n }\n }\n return newItems;\n}\n","/**\n * Storing pre-calculated\n * Dimension information and sizes\n */\nimport reduce from 'lodash/reduce';\nimport { createStore } from '@stencil/store';\n\nimport { setStore, Observable } from '../../utils';\nimport { calculateDimensionData } from './dimension.helpers';\nimport {\n DimensionCalc,\n DimensionSettingsState,\n ViewSettingSizeProp,\n MultiDimensionType,\n} from '@type';\nimport { recalculateRealSizePlugin } from './dimension.recalculate.plugin';\nimport { trimmedPlugin } from './dimension.trim.plugin';\n\nexport type DimensionStoreCollection = {\n [T in MultiDimensionType]: DimensionStore;\n};\n\ntype Item = keyof DimensionSettingsState;\n\nfunction initialBase(): DimensionCalc {\n return {\n indexes: [],\n count: 0,\n\n // hidden items\n trimmed: null,\n\n // virtual item index to size\n sizes: {},\n // order in indexes[] to coordinate\n positionIndexToItem: {},\n // initial element to coordinate ^\n indexToItem: {},\n positionIndexes: [],\n };\n}\n\nfunction initialState(): DimensionSettingsState {\n return {\n ...initialBase(),\n // size which all items can take\n realSize: 0,\n\n // initial item size if it wasn't changed\n originItemSize: 0,\n };\n}\n\nexport class DimensionStore {\n readonly store: Observable<DimensionSettingsState>;\n private otherColumnRealSizesGetter?: () => { colPinStart: number; colPinEnd: number };\n private gridTotalWidthGetter?: () => number;\n \n constructor(public readonly type: MultiDimensionType) {\n this.store = createStore(initialState());\n this.store.use(trimmedPlugin({\n store: this.store,\n setSizes: this.setDimensionSize.bind(this),\n }));\n this.store.use(recalculateRealSizePlugin({\n store: this.store,\n setStore: this.setStore.bind(this),\n type: this.type,\n getOtherColumnRealSizes: () => this.otherColumnRealSizesGetter?.() || { colPinStart: 0, colPinEnd: 0 },\n getGridTotalWidth: () => this.gridTotalWidthGetter?.() || 0,\n }));\n }\n\n /**\n * Set other column real sizes getter function (for rgCol to calculate available width)\n */\n setOtherColumnRealSizesGetter(getter: () => { colPinStart: number; colPinEnd: number }) {\n this.otherColumnRealSizesGetter = getter;\n }\n\n /**\n * Set grid total width getter function (for rgCol to calculate available width)\n */\n setGridTotalWidthGetter(getter: () => number) {\n this.gridTotalWidthGetter = getter;\n }\n\n getCurrentState(): DimensionSettingsState {\n const state = initialState();\n const keys = Object.keys(state);\n return reduce(\n keys,\n (r: DimensionSettingsState, k: Item) => {\n const data = this.store.get(k);\n r[k] = data as never;\n return r;\n },\n state,\n );\n }\n\n dispose() {\n setStore(this.store, initialState());\n }\n\n setStore<T extends Record<string, any>>(data: Partial<T>) {\n setStore(this.store, data);\n }\n\n drop() {\n setStore(this.store, initialBase());\n }\n\n /**\n * Set custom dimension sizes and overwrite old\n * Generates new indexes based on sizes\n * @param sizes - sizes to set\n */\n setDimensionSize(sizes: ViewSettingSizeProp = {}) {\n const dimensionData = calculateDimensionData(\n this.store.get('originItemSize'),\n sizes,\n );\n setStore(this.store, {\n ...dimensionData,\n sizes,\n });\n }\n\n updateSizesPositionByIndexes(newItemsOrder: number[], prevItemsOrder: number[] = []) {\n // Move custom sizes to new order\n const customSizes = {...this.store.get('sizes')};\n if (!Object.keys(customSizes).length) {\n return;\n }\n // Step 1: Create a map of original indices, but allow duplicates by storing arrays of indices\n const originalIndices: Record<number, number[]> = {};\n prevItemsOrder.forEach((physIndex, virtIndex) => {\n if (!originalIndices[physIndex]) {\n originalIndices[physIndex] = [];\n }\n originalIndices[physIndex].push(virtIndex); // Store all indices for each value\n });\n\n // Step 2: Create new sizes based on new item order\n const newSizes: Record<number, number> = {};\n\n newItemsOrder.forEach((physIndex, virtIndex) => {\n const indices = originalIndices[physIndex]; // Get all original indices for this value\n \n if (indices && indices.length > 0) {\n const originalIndex = indices.shift(); // Get the first available original index\n\n if (originalIndex !== undefined && originalIndex !== virtIndex && customSizes[originalIndex]) {\n newSizes[virtIndex] = customSizes[originalIndex];\n delete customSizes[originalIndex];\n }\n }\n });\n\n // Step 3: Set new sizes if there are changes\n if (Object.keys(newSizes).length) {\n this.setDimensionSize({\n ...customSizes,\n ...newSizes,\n });\n }\n }\n}\n","/**\n * Selection store\n */\n\nimport { setStore, Observable } from '../../utils';\nimport { getRange } from '@store';\nimport type { SelectionStoreState, Cell, TempRange, RangeArea, Nullable } from '@type';\nimport { createStore } from '@stencil/store';\n\nfunction defaultState(): SelectionStoreState {\n return {\n range: null,\n tempRange: null,\n tempRangeType: null,\n focus: null,\n edit: null,\n lastCell: null,\n nextFocus: null,\n };\n}\n\nexport class SelectionStore {\n readonly store: Observable<SelectionStoreState>;\n private unsubscribe: { (): void }[] = [];\n constructor() {\n this.store = createStore(defaultState());\n this.store.on('set', (key, newVal) => {\n if (key === 'tempRange' && !newVal) {\n this.store.set('tempRangeType', null);\n }\n });\n }\n\n onChange<Key extends keyof SelectionStoreState>(propName: Key, cb: (newValue: SelectionStoreState[Key]) => void) {\n this.unsubscribe.push(this.store.onChange(propName, cb));\n }\n\n clearFocus() {\n setStore(this.store, { focus: null, range: null, edit: null, tempRange: null });\n }\n\n setFocus(focus: Cell, end?: Cell) {\n if (!end) {\n setStore(this.store, { focus });\n } else {\n setStore(this.store, {\n focus,\n range: getRange(focus, end),\n edit: null,\n tempRange: null,\n });\n }\n }\n\n setNextFocus(focus: Cell) {\n setStore(this.store, { nextFocus: focus });\n }\n\n setTempArea(range: Nullable<TempRange> | null) {\n setStore(this.store, { tempRange: range?.area, tempRangeType: range?.type, edit: null });\n }\n\n clearTemp() {\n setStore(this.store, { tempRange: null });\n }\n\n /** Can be applied from selection change or from simple keyboard change clicks */\n setRangeArea(range: RangeArea | null) {\n setStore(this.store, { range, edit: null, tempRange: null });\n }\n setRange(start: Cell, end: Cell) {\n const range = getRange(start, end);\n this.setRangeArea(range);\n }\n\n setLastCell(lastCell: Cell) {\n setStore(this.store, { lastCell });\n }\n\n setEdit(val?: string | boolean) {\n const focus = this.store.get('focus');\n if (focus && typeof val === 'string') {\n setStore(this.store, {\n edit: { x: focus.x, y: focus.y, val },\n });\n return;\n }\n setStore(this.store, { edit: null });\n }\n\n dispose() {\n this.unsubscribe.forEach(f => f());\n this.store.dispose();\n }\n}\n","import { h } from '@stencil/core';\nimport type { PluginProviders, PluginBaseComponent } from '../types';\n\n\nexport type WatchConfig = { immediate: boolean };\n\n/**\n * Base layer for plugins\n * Provide minimal starting core for plugins to work\n * Extend this class to create plugin\n */\nexport class BasePlugin implements PluginBaseComponent {\n readonly h = h;\n readonly subscriptions: Record<string, (...args: any[]) => void> = {};\n constructor(public revogrid: HTMLRevoGridElement, public providers: PluginProviders) {}\n /**\n *\n * @param eventName - event name to subscribe to in revo-grid component (e.g. 'beforeheaderclick')\n * @param callback - callback function for event\n */\n addEventListener<K extends keyof HTMLRevoGridElementEventMap>(\n eventName: K,\n callback: (this: BasePlugin, e: CustomEvent<HTMLRevoGridElementEventMap[K]>) => void,\n ) {\n this.revogrid.addEventListener(eventName as string, callback);\n this.subscriptions[eventName as string] = callback;\n }\n\n /**\n * Subscribe to property change in revo-grid component\n * You can return false in callback to prevent default value set\n *\n * @param prop - property name\n * @param callback - callback function\n * @param immediate - trigger callback immediately with current value\n */\n watch<T extends any>(\n prop: string,\n callback: (arg: T) => boolean | void,\n { immediate }: Partial<WatchConfig> = { immediate: false },\n ) {\n const nativeValueDesc =\n Object.getOwnPropertyDescriptor(this.revogrid, prop) ||\n Object.getOwnPropertyDescriptor(this.revogrid.constructor.prototype, prop);\n\n // Overwrite property descriptor for this instance\n Object.defineProperty(this.revogrid, prop, {\n set(val: T) {\n const keepDefault = callback(val);\n if (keepDefault === false) {\n return;\n }\n // Continue with native behavior\n return nativeValueDesc?.set?.call(this, val);\n },\n get() {\n // Continue with native behavior\n return nativeValueDesc?.get?.call(this);\n },\n });\n if (immediate) {\n callback(nativeValueDesc?.value);\n }\n }\n\n /**\n * Remove event listener\n * @param eventName\n */\n removeEventListener(eventName: string) {\n this.revogrid.removeEventListener(eventName, this.subscriptions[eventName]);\n delete this.subscriptions[eventName];\n }\n\n /**\n * Emit event from revo-grid component\n * Event can be cancelled by calling event.preventDefault() in callback\n */\n emit<T = any>(eventName: string, detail?: T) {\n const event = new CustomEvent<T>(eventName, { detail, cancelable: true });\n this.revogrid.dispatchEvent(event);\n return event;\n }\n\n /**\n * Clear all subscriptions\n */\n clearSubscriptions() {\n for (let type in this.subscriptions) {\n this.removeEventListener(type);\n }\n }\n\n /**\n * Destroy plugin and clear all subscriptions\n */\n destroy() {\n this.clearSubscriptions();\n }\n}\n\nexport type GridPlugin = (typeof BasePlugin);\n","/**\n * A specialized version of `_.forEach` for arrays without support for\n * iteratee shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns `array`.\n */\nfunction arrayEach(array, iteratee) {\n var index = -1,\n length = array == null ? 0 : array.length;\n\n while (++index < length) {\n if (iteratee(array[index], index, array) === false) {\n break;\n }\n }\n return array;\n}\n\nexport default arrayEach;\n","import identity from './identity.js';\n\n/**\n * Casts `value` to `identity` if it's not a function.\n *\n * @private\n * @param {*} value The value to inspect.\n * @returns {Function} Returns cast function.\n */\nfunction castFunction(value) {\n return typeof value == 'function' ? value : identity;\n}\n\nexport default castFunction;\n","import arrayEach from './_arrayEach.js';\nimport baseEach from './_baseEach.js';\nimport castFunction from './_castFunction.js';\nimport isArray from './isArray.js';\n\n/**\n * Iterates over elements of `collection` and invokes `iteratee` for each element.\n * The iteratee is invoked with three arguments: (value, index|key, collection).\n * Iteratee functions may exit iteration early by explicitly returning `false`.\n *\n * **Note:** As with other \"Collections\" methods, objects with a \"length\"\n * property are iterated like arrays. To avoid this behavior use `_.forIn`\n * or `_.forOwn` for object iteration.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @alias each\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @returns {Array|Object} Returns `collection`.\n * @see _.forEachRight\n * @example\n *\n * _.forEach([1, 2], function(value) {\n * console.log(value);\n * });\n * // => Logs `1` then `2`.\n *\n * _.forEach({ 'a': 1, 'b': 2 }, function(value, key) {\n * console.log(key);\n * });\n * // => Logs 'a' then 'b' (iteration order is not guaranteed).\n */\nfunction forEach(collection, iteratee) {\n var func = isArray(collection) ? arrayEach : baseEach;\n return func(collection, castFunction(iteratee));\n}\n\nexport default forEach;\n","/**\n * ColumnStretchPlugin - 列自动撑满插件\n * 让指定列自动撑满表格剩余空间\n * \n * 参考自 src/components/readable/ColumnStretchPlugin.js\n */\nimport { BasePlugin } from './base.plugin';\nimport type { PluginProviders, ColumnRegular, DimensionCols, ViewSettingSizeProp } from '@type';\n\nexport interface ColumnStretchConfig {\n /** \n * 撑满模式:\n * - 'last': 拉伸最后一列\n * - 'all': 拉伸所有列\n * - number: 拉伸指定索引的列\n * - string: 拉伸指定 prop 的列\n */\n stretchColumn?: 'last' | 'all' | number | string;\n /** 最小宽度,默认 50 */\n minWidth?: number;\n /** 是否显示右侧空白区域的表头边框,默认 true */\n showHeaderBorder?: boolean;\n /** 是否显示右侧空白区域的行边框,默认 true */\n showRowBorder?: boolean;\n /** 右侧空白区域表头边框颜色,默认使用 --revo-grid-header-border */\n headerBorderColor?: string;\n /** 右侧空白区域行边框颜色,默认使用 --revo-grid-cell-border */\n rowBorderColor?: string;\n /** 分组行边框颜色,默认使用 --rg-cell-border-color */\n groupRowBorderColor?: string;\n}\n\nconst DEFAULT_CONFIG: ColumnStretchConfig = {\n stretchColumn: 'last',\n minWidth: 50,\n showHeaderBorder: true,\n showRowBorder: true,\n};\n\n\n\n/**\n * 获取滚动条宽度\n */\nlet cachedScrollbarWidth: number | null = null;\nfunction getScrollbarWidth(): number {\n if (cachedScrollbarWidth !== null) {\n return cachedScrollbarWidth;\n }\n \n const outer = document.createElement('div');\n outer.style.visibility = 'hidden';\n outer.style.overflow = 'scroll';\n (outer.style as any).msOverflowStyle = 'scrollbar';\n document.body.appendChild(outer);\n \n const inner = document.createElement('div');\n outer.appendChild(inner);\n \n cachedScrollbarWidth = outer.offsetWidth - inner.offsetWidth;\n outer.parentNode?.removeChild(outer);\n \n return cachedScrollbarWidth;\n}\n\n/**\n * 查找 DOM 元素\n */\nfunction findElementBySelector(element: Element, selector: string): Element | null {\n const selectors = selector.split(' > ').map(s => s.trim());\n let currentElement: Element | null = element;\n \n for (const sel of selectors) {\n if (!currentElement) return null;\n const isClassSelector = sel.startsWith('.');\n const selectorName = isClassSelector ? sel.slice(1) : sel;\n \n currentElement = Array.from(currentElement.children).find(child =>\n isClassSelector \n ? child.classList.contains(selectorName) \n : child.tagName.toLowerCase() === selectorName.toLowerCase()\n ) || null;\n }\n \n return currentElement;\n}\n\n// 列数据类型\ntype ColumnsData = {\n rgCol: ColumnRegular[];\n colPinStart: ColumnRegular[];\n colPinEnd: ColumnRegular[];\n};\n\nexport class ColumnStretchPlugin extends BasePlugin {\n private config: ColumnStretchConfig;\n private containerWidth = 0;\n private columnsData: ColumnsData | null = null;\n private manuallyResizedColumns = new Set<string>(); // 记录被手动调整过的列(不记录宽度)\n private resizeEndTimeout: ReturnType<typeof setTimeout> | null = null;\n private resizeObserver: ResizeObserver | null = null;\n private virtualGridContainer: HTMLDivElement | null = null; // 外层容器\n private virtualGridOverlay: HTMLDivElement | null = null; // 内层网格线\n private virtualHeaderOverlay: HTMLDivElement | null = null; // 表头覆盖层\n private wheelHandler: ((e: WheelEvent) => void) | null = null; // 滚轮事件处理器\n private isInitialRecorded = false; // 标记是否已记录初始状态\n private userResizedColumns = new Set<number>(); // 记录用户主动拖拽的列索引(临时标记)\n private isApplyingStretch = false; // 标记是否正在应用拉伸,防止递归调用\n\n\n constructor(\n revogrid: HTMLRevoGridElement,\n providers: PluginProviders | null,\n config?: ColumnStretchConfig,\n ) {\n super(revogrid, providers as PluginProviders);\n this.config = { ...DEFAULT_CONFIG, ...config };\n \n // 将插件实例保存到 revogrid 元素上,供其他插件访问\n (this.revogrid as any).__columnStretchPlugin = this;\n \n // 设置 CSS 变量控制边框显示和颜色\n if (this.config.showRowBorder === false) {\n this.revogrid.style.setProperty('--revo-grid-wheel-capture-row-border', 'none');\n } else if (this.config.rowBorderColor) {\n this.revogrid.style.setProperty('--revo-grid-wheel-capture-row-border-color', this.config.rowBorderColor);\n }\n \n if (this.config.headerBorderColor) {\n this.revogrid.style.setProperty('--revo-grid-wheel-capture-header-border-color', this.config.headerBorderColor);\n }\n \n if (this.config.groupRowBorderColor) {\n this.revogrid.style.setProperty('--revo-grid-group-row-border-color', this.config.groupRowBorderColor);\n }\n \n // 如果 providers 为 null,异步获取\n if (!providers) {\n this.revogrid.getProviders().then(p => {\n if (p) {\n (this as any).providers = p;\n this.init();\n }\n });\n } else {\n this.init();\n }\n }\n\n private init() {\n // 监听列设置前事件(在 applyNewColumns 之前)\n const onBeforeColumnsSet = (e: CustomEvent) => {\n const columns = e.detail?.columns;\n if (columns) {\n // 提前为自动宽度列设置初始宽度\n this.setInitialStretchColumnWidth(columns);\n }\n };\n this.revogrid.addEventListener('beforecolumnsset', onBeforeColumnsSet as EventListener);\n this.addEventListener('beforecolumnsset', onBeforeColumnsSet as any);\n\n // 监听列应用前事件\n const onBeforeColumnApplied = (e: CustomEvent) => {\n const columns = e.detail?.columns;\n if (columns) {\n this.columnsData = columns;\n \n // 只在第一次触发时记录初始状态\n if (!this.isInitialRecorded) {\n this.recordInitialSizedColumns();\n this.isInitialRecorded = true;\n }\n \n this.applyStretchImpl();\n }\n };\n this.revogrid.addEventListener('beforecolumnapplied', onBeforeColumnApplied as EventListener);\n this.addEventListener('beforecolumnapplied', onBeforeColumnApplied as any);\n\n // 监听 headerresize 事件,记录用户主动拖拽的列\n const onHeaderResize = (e: CustomEvent<ViewSettingSizeProp>) => {\n const detail = e.detail;\n if (!detail) return;\n \n // 记录用户主动拖拽的列索引\n for (const indexStr in detail) {\n this.userResizedColumns.add(parseInt(indexStr, 10));\n }\n };\n this.revogrid.addEventListener('headerresize', onHeaderResize as EventListener);\n this.addEventListener('headerresize', onHeaderResize as any);\n\n // 监听 aftercolumnresize 事件(包含完整的列信息,包括 pin 属性)\n // 在这里执行拉伸计算,确保 dimension store 已经更新\n const onAfterColumnResize = (e: CustomEvent<{ [index: number]: ColumnRegular }>) => {\n // 防止递归调用\n if (this.isApplyingStretch) {\n return;\n }\n \n const detail = e.detail;\n if (!detail || !this.columnsData) return;\n \n // 获取被拉伸列的 prop\n const stretchColumnProp = this.getStretchColumnProp();\n if (!stretchColumnProp) {\n this.userResizedColumns.clear();\n this.applyStretchImpl();\n return;\n }\n \n // 检查是否在调整被拉伸的列本身\n // 注意:detail 中的 column 包含 pin 属性,可以判断列类型\n let isResizingStretchColumn = false;\n for (const indexStr in detail) {\n const index = parseInt(indexStr, 10);\n const column = detail[index];\n \n if (column?.prop === stretchColumnProp && this.userResizedColumns.has(index)) {\n // 用户主动拖拽自动列宽列 → 转换为固定宽度\n this.manuallyResizedColumns.add(column.prop as string);\n isResizingStretchColumn = true;\n }\n // 否则是被动调整(其他列变化导致的) → 保持自动宽度,不标记\n }\n \n // 清空临时标记\n this.userResizedColumns.clear();\n \n // 立即同步执行拉伸计算,此时 dimension store 已经更新\n // 如果不是调整自适应列本身,则需要重新分配宽度\n if (!isResizingStretchColumn) {\n this.applyStretchImpl();\n }\n };\n this.revogrid.addEventListener('aftercolumnresize', onAfterColumnResize as EventListener);\n this.addEventListener('aftercolumnresize', onAfterColumnResize as any);\n\n // 监听滚动变化事件(不触发拉伸计算,只更新滚动条宽度)\n const onScrollChange = () => {\n this.containerWidth = getScrollbarWidth();\n };\n this.revogrid.addEventListener('scrollchange', onScrollChange as EventListener);\n this.addEventListener('scrollchange', onScrollChange as any);\n\n // 监听窗口大小变化\n const onResize = () => {\n this.containerWidth = getScrollbarWidth();\n if (this.columnsData) {\n this.applyStretchImpl();\n }\n };\n \n this.resizeObserver = new ResizeObserver(onResize);\n this.resizeObserver.observe(this.revogrid);\n\n // 初始化\n this.containerWidth = getScrollbarWidth();\n \n // 如果已有列数据,立即应用拉伸\n if (this.providers?.column) {\n const columnCollection = (this.providers.column as any).collection;\n if (this.revogrid.columns?.length && columnCollection) {\n this.columnsData = columnCollection.columns;\n // 延迟执行,确保 DOM 已渲染\n setTimeout(() => {\n this.applyStretchImpl();\n }, 100);\n }\n }\n }\n\n /**\n * 记录初始化时已设置 size 的列\n * 如果自动宽度列配置了 size,将其标记为手动调整过的列(固定宽度)\n */\n private recordInitialSizedColumns() {\n const columns = this.revogrid.columns as ColumnRegular[];\n if (!columns || columns.length === 0) return;\n \n const { stretchColumn } = this.config;\n if (!stretchColumn) return;\n \n let stretchColumnProp: string | null = null;\n \n // 根据配置类型获取 prop\n if (stretchColumn === 'last') {\n // 最后一列\n const lastCol = columns[columns.length - 1];\n stretchColumnProp = lastCol?.prop as string || null;\n } else if (typeof stretchColumn === 'string') {\n // 指定 prop\n stretchColumnProp = stretchColumn;\n } else if (typeof stretchColumn === 'number') {\n // 指定索引\n const col = columns[stretchColumn];\n stretchColumnProp = col?.prop as string || null;\n }\n \n if (!stretchColumnProp) return;\n \n // 递归查找列(支持分组列)\n const findColumn = (cols: any[]): ColumnRegular | null => {\n for (const col of cols) {\n if (col.children) {\n // 分组列,递归查找\n const found = findColumn(col.children);\n if (found) return found;\n } else if (col.prop === stretchColumnProp) {\n // 找到目标列\n return col;\n }\n }\n return null;\n };\n \n // 检查自动宽度列是否配置了 size\n const targetColumn = findColumn(columns);\n if (targetColumn && targetColumn.size) {\n // 如果配置了 size,标记为手动调整过的列(固定宽度)\n this.manuallyResizedColumns.add(stretchColumnProp);\n }\n }\n\n /**\n * 同步自动宽度列的 size 到 dimension store\n * 解决拖拽后 col.size 有值但 sizes[index] 为 undefined 的问题\n */\n private syncStretchColumnSize() {\n if (!this.columnsData) return;\n \n const { stretchColumn } = this.config;\n if (!stretchColumn) return;\n \n // 获取自动宽度列的 prop\n let stretchColumnProp: string | null = null;\n \n if (stretchColumn === 'last') {\n const columns = this.columnsData.rgCol;\n if (columns && columns.length > 0) {\n stretchColumnProp = columns[columns.length - 1]?.prop as string || null;\n }\n } else if (typeof stretchColumn === 'string') {\n stretchColumnProp = stretchColumn;\n } else if (typeof stretchColumn === 'number') {\n const allColumns = this.revogrid.columns as ColumnRegular[];\n if (allColumns && stretchColumn >= 0 && stretchColumn < allColumns.length) {\n stretchColumnProp = allColumns[stretchColumn]?.prop as string || null;\n }\n }\n \n if (!stretchColumnProp) return;\n \n // 在所有列类型中查找\n const dimensionTypes: DimensionCols[] = ['rgCol', 'colPinStart', 'colPinEnd'];\n for (const dimensionType of dimensionTypes) {\n const columns = this.columnsData[dimensionType];\n if (!columns) continue;\n \n const columnIndex = columns.findIndex(col => col.prop === stretchColumnProp);\n if (columnIndex === -1) continue;\n \n const targetColumn = columns[columnIndex];\n if (!targetColumn || !targetColumn.size) continue;\n \n // 检查 dimension store 中是否已有该列的宽度\n const dimensionStore = this.providers?.dimension?.stores[dimensionType]?.store;\n if (!dimensionStore) continue;\n \n const sizes = dimensionStore.get('sizes') || {};\n if (sizes[columnIndex] === undefined) {\n // 如果 dimension store 中没有该列的宽度,同步 col.size\n this.providers?.dimension?.setCustomSizes(\n dimensionType,\n { [columnIndex]: targetColumn.size },\n true\n );\n }\n \n break;\n }\n }\n\n /**\n * 在列应用前为自动宽度列设置初始宽度\n */\n private setInitialStretchColumnWidth(columnsData: ColumnsData) {\n const { stretchColumn } = this.config;\n if (!stretchColumn) return;\n\n // 查找自动宽度列\n const result = this.findStretchColumn(columnsData, stretchColumn);\n if (!result) return;\n\n const { column, dimensionType, index } = result;\n\n // 如果该列已经有 size,说明是手动设置的或已经计算过,不处理\n if (column.size) return;\n\n // 计算初始宽度\n const initialWidth = this.calculateInitialStretchWidth(columnsData, dimensionType, index);\n if (initialWidth <= 0) return;\n\n // 直接修改列对象的 size 属性\n column.size = initialWidth;\n }\n\n /**\n * 查找自动宽度列\n */\n private findStretchColumn(\n columnsData: ColumnsData,\n stretchColumn: 'last' | 'all' | number | string\n ): { column: ColumnRegular; dimensionType: DimensionCols; index: number } | null {\n // 获取自动宽度列的 prop\n let stretchColumnProp: string | null = null;\n \n if (stretchColumn === 'last') {\n const columns = columnsData.rgCol;\n if (columns && columns.length > 0) {\n stretchColumnProp = columns[columns.length - 1]?.prop as string || null;\n }\n } else if (typeof stretchColumn === 'string') {\n stretchColumnProp = stretchColumn;\n } else if (typeof stretchColumn === 'number') {\n const allColumns = this.revogrid.columns as ColumnRegular[];\n if (allColumns && stretchColumn >= 0 && stretchColumn < allColumns.length) {\n stretchColumnProp = allColumns[stretchColumn]?.prop as string || null;\n }\n }\n\n if (!stretchColumnProp) return null;\n\n // 在所有列类型中查找\n const dimensionTypes: DimensionCols[] = ['rgCol', 'colPinStart', 'colPinEnd'];\n for (const dimensionType of dimensionTypes) {\n const columns = columnsData[dimensionType];\n if (!columns) continue;\n \n const index = columns.findIndex(col => col.prop === stretchColumnProp);\n if (index !== -1) {\n return {\n column: columns[index],\n dimensionType,\n index,\n };\n }\n }\n\n return null;\n }\n\n /**\n * 计算自动宽度列的初始宽度\n */\n private calculateInitialStretchWidth(\n columnsData: ColumnsData,\n stretchColumnType: DimensionCols,\n stretchColumnIndex: number\n ): number {\n // 计算可用宽度\n const rowHeaderEl = findElementBySelector(this.revogrid, '.main-viewport > .viewports > .rowHeaders');\n const rowHeaderWidth = rowHeaderEl?.clientWidth || 0;\n const viewportEl = this.revogrid.querySelector('.main-viewport');\n const hasVerticalScroll = viewportEl ? viewportEl.scrollHeight > viewportEl.clientHeight : false;\n const scrollbarWidth = hasVerticalScroll ? this.containerWidth : 0;\n const availableWidth = this.revogrid.clientWidth - scrollbarWidth - rowHeaderWidth;\n\n // 计算其他列的总宽度(排除自动宽度列)\n let totalOtherColumnsWidth = 0;\n const dimensionTypes: DimensionCols[] = ['rgCol', 'colPinStart', 'colPinEnd'];\n \n dimensionTypes.forEach(dimensionType => {\n const columns = columnsData[dimensionType];\n if (!columns) return;\n \n columns.forEach((col, index) => {\n // 跳过自动宽度列\n if (dimensionType === stretchColumnType && index === stretchColumnIndex) {\n return;\n }\n \n // 计算其他列的宽度\n const colWidth = col.size || (col as any).minSize || 100;\n totalOtherColumnsWidth += colWidth;\n });\n });\n\n // 计算剩余宽度\n const remainingWidth = availableWidth - totalOtherColumnsWidth;\n const stretchColumn = columnsData[stretchColumnType][stretchColumnIndex];\n const minWidth = this.getColumnMinWidth(stretchColumn);\n \n return Math.max(minWidth, remainingWidth);\n }\n\n /**\n * 获取列的最小宽度\n */\n private getColumnMinWidth(column: ColumnRegular): number {\n return (column as any).minSize || column.size || this.config.minWidth || 50;\n }\n\n /**\n * 获取被拉伸列的 prop\n */\n private getStretchColumnProp(): string | null {\n if (!this.columnsData) return null;\n \n const { stretchColumn } = this.config;\n \n if (stretchColumn === 'last') {\n const columns = this.columnsData.rgCol;\n if (columns && columns.length > 0) {\n return columns[columns.length - 1]?.prop as string || null;\n }\n } else if (typeof stretchColumn === 'string') {\n return stretchColumn;\n } else if (typeof stretchColumn === 'number') {\n const columns = this.revogrid.columns as ColumnRegular[];\n if (columns && stretchColumn >= 0 && stretchColumn < columns.length) {\n return columns[stretchColumn]?.prop as string || null;\n }\n }\n \n return null;\n }\n\n /**\n * 应用列拉伸(实际实现)\n */\n private applyStretchImpl() {\n if (!this.columnsData) return;\n \n // 防止递归调用\n if (this.isApplyingStretch) {\n return;\n }\n \n this.isApplyingStretch = true;\n\n // 先同步自动宽度列的 size 到 dimension store\n this.syncStretchColumnSize();\n\n // 获取行头宽度\n const rowHeaderEl = findElementBySelector(this.revogrid, '.main-viewport > .viewports > .rowHeaders');\n const rowHeaderWidth = rowHeaderEl?.clientWidth || 0;\n\n // 计算可用宽度\n const availableWidth = this.revogrid.clientWidth - rowHeaderWidth;\n\n // 计算所有列的总宽度\n let totalColumnsWidth = 0;\n const dimensionTypes: DimensionCols[] = ['colPinStart', 'rgCol', 'colPinEnd'];\n \n dimensionTypes.forEach(dimensionType => {\n if (this.providers?.dimension?.stores[dimensionType]) {\n const dimensionStore = this.providers.dimension.stores[dimensionType].store;\n const realSize = dimensionStore.get('realSize') || 0;\n totalColumnsWidth += realSize;\n }\n });\n \n // 计算剩余空间\n const occupiedWidth = availableWidth - totalColumnsWidth;\n\n // 只有当有足够空间需要分配时才进行自动调整\n if (Math.abs(occupiedWidth) < 1) {\n this.isApplyingStretch = false;\n return;\n }\n\n const { stretchColumn } = this.config;\n\n if (stretchColumn === 'all') {\n this.stretchAllColumns(occupiedWidth);\n } else if (stretchColumn === 'last') {\n this.stretchLastColumn(occupiedWidth);\n } else if (typeof stretchColumn === 'number') {\n this.stretchColumnByIndex(stretchColumn, occupiedWidth);\n } else if (typeof stretchColumn === 'string') {\n this.stretchColumnByProp(stretchColumn, occupiedWidth);\n }\n \n this.isApplyingStretch = false;\n }\n\n\n \n /**\n * 创建模拟网格覆盖层\n */\n private createvirtualGridOverlay() {\n if (this.virtualGridContainer) return;\n \n // 查找 viewports 容器\n const viewportsContainer = this.revogrid.querySelector('.viewports') as HTMLElement;\n if (!viewportsContainer) return;\n \n // 查找 rgCol 视口\n const rgColViewport = this.revogrid.querySelector('revogr-viewport-scroll.rgCol') as HTMLElement;\n if (!rgColViewport) return;\n \n // 查找滚动元素\n const verticalInner = rgColViewport.querySelector('.vertical-inner') as HTMLElement;\n if (!verticalInner) return;\n \n // 获取表头高度\n const headerWrapper = rgColViewport.querySelector('.header-wrapper') as HTMLElement;\n const headerHeight = headerWrapper?.offsetHeight || 0;\n \n // 创建外层容器(覆盖整个表格区域)\n this.virtualGridContainer = document.createElement('div');\n this.virtualGridContainer.className = 'virtual-grid-container';\n this.virtualGridContainer.style.cssText = `\n position: absolute;\n top: ${headerHeight}px;\n left: 0;\n right: 0;\n bottom: 0;\n pointer-events: none;\n z-index: 10;\n display: none;\n overflow: hidden;\n `;\n \n // 创建内层网格线(覆盖整个宽度,但线通过 background-position 定位到右侧)\n this.virtualGridOverlay = document.createElement('div');\n this.virtualGridOverlay.className = 'virtual-grid-overlay';\n this.virtualGridOverlay.style.cssText = `\n position: absolute;\n top: 0;\n left: 0;\n right: 0;\n will-change: transform;\n pointer-events: none;\n `;\n \n this.virtualGridContainer.appendChild(this.virtualGridOverlay);\n viewportsContainer.appendChild(this.virtualGridContainer);\n \n // 创建表头覆盖层(白色背景 + 底边线)\n this.virtualHeaderOverlay = document.createElement('div');\n this.virtualHeaderOverlay.className = 'virtual-header-overlay';\n this.virtualHeaderOverlay.style.cssText = `\n position: absolute;\n top: 0;\n right: 0;\n height: ${headerHeight}px;\n pointer-events: none;\n z-index: 11;\n display: none;\n box-sizing: border-box;\n `;\n viewportsContainer.appendChild(this.virtualHeaderOverlay);\n \n // 监听滚动事件,同步内层位置\n const onScroll = () => {\n if (this.virtualGridOverlay) {\n const scrollTop = verticalInner.scrollTop;\n this.virtualGridOverlay.style.transform = `translateY(-${scrollTop}px)`;\n }\n };\n verticalInner.addEventListener('scroll', onScroll, { passive: true });\n \n // 只监听滚轮事件,其他事件穿透到表格\n this.wheelHandler = (e: WheelEvent) => {\n // 如果按下 shift 键,不拦截事件,让它传递给水平滚动处理器\n if (e.shiftKey) return;\n \n e.preventDefault();\n e.stopPropagation();\n verticalInner.scrollTop += e.deltaY;\n };\n this.virtualGridContainer.addEventListener('wheel', this.wheelHandler, { passive: false });\n \n // 其他事件穿透到下层\n const passThrough = (e: Event) => {\n // 获取鼠标位置下的元素(排除当前覆盖层)\n this.virtualGridContainer!.style.pointerEvents = 'none';\n const target = document.elementFromPoint(\n (e as MouseEvent).clientX,\n (e as MouseEvent).clientY\n );\n this.virtualGridContainer!.style.pointerEvents = 'auto';\n \n if (target && target !== this.virtualGridContainer) {\n // 创建并派发相同的事件到目标元素\n const newEvent = new (e.constructor as any)(e.type, e);\n target.dispatchEvent(newEvent);\n }\n };\n \n // 穿透点击、双击、右键等事件\n ['click', 'dblclick', 'mousedown', 'mouseup', 'contextmenu'].forEach(eventType => {\n this.virtualGridContainer!.addEventListener(eventType, passThrough);\n });\n }\n \n /**\n * 更新模拟网格覆盖层\n */\n // @ts-ignore 暂时禁用,保留代码\n private updatevirtualGridOverlay(gapWidth: number) {\n if (gapWidth <= 0) {\n // 隐藏覆盖层\n if (this.virtualGridContainer) {\n this.virtualGridContainer.style.display = 'none';\n }\n if (this.virtualHeaderOverlay) {\n this.virtualHeaderOverlay.style.display = 'none';\n }\n return;\n }\n \n // 确保覆盖层存在\n this.createvirtualGridOverlay();\n if (!this.virtualGridContainer || !this.virtualGridOverlay) return;\n \n // 获取行高\n const rowHeight = this.getRowHeight();\n \n // 获取内容高度\n const contentHeight = this.providers?.dimension?.stores?.rgRow?.store.get('realSize') || 0;\n \n // 获取表头高度\n const rgColViewport = this.revogrid.querySelector('revogr-viewport-scroll.rgCol') as HTMLElement;\n const headerWrapper = rgColViewport?.querySelector('.header-wrapper') as HTMLElement;\n const headerHeight = headerWrapper?.offsetHeight || 0;\n \n // 更新外层容器样式(覆盖整个表格区域)\n this.virtualGridContainer.style.display = 'block';\n this.virtualGridContainer.style.top = `${headerHeight}px`;\n this.virtualGridContainer.style.left = '0';\n this.virtualGridContainer.style.right = '0';\n \n // 更新内层网格线样式(宽度为整个容器,但线通过 background-position 定位到右侧)\n this.virtualGridOverlay.style.width = '100%';\n this.virtualGridOverlay.style.height = `${contentHeight}px`;\n this.virtualGridOverlay.style.backgroundImage = `linear-gradient(to bottom, transparent ${rowHeight - 1}px, #e0e0e0 ${rowHeight - 1}px, #e0e0e0 ${rowHeight}px)`;\n this.virtualGridOverlay.style.backgroundSize = `${gapWidth}px ${rowHeight}px`;\n this.virtualGridOverlay.style.backgroundRepeat = 'repeat-y';\n this.virtualGridOverlay.style.backgroundPosition = 'right top';\n \n // 同步当前滚动位置\n const verticalInner = rgColViewport?.querySelector('.vertical-inner') as HTMLElement;\n if (verticalInner) {\n const scrollTop = verticalInner.scrollTop;\n this.virtualGridOverlay.style.transform = `translateY(-${scrollTop}px)`;\n }\n \n // 更新表头覆盖层样式\n if (this.virtualHeaderOverlay) {\n this.virtualHeaderOverlay.style.display = 'block';\n this.virtualHeaderOverlay.style.width = `${gapWidth}px`;\n this.virtualHeaderOverlay.style.height = `${headerHeight}px`;\n }\n }\n \n /**\n * 获取行高\n */\n private getRowHeight(): number {\n // 优先从实际DOM获取行高\n const existingRow = this.revogrid.querySelector('.rgRow');\n if (existingRow) {\n const height = existingRow.clientHeight;\n return height || 32;\n }\n return 32; // 默认行高\n }\n \n /**\n * 移除模拟网格覆盖层\n */\n private removevirtualGridOverlay() {\n // 移除滚轮事件监听\n if (this.wheelHandler && this.virtualGridContainer) {\n this.virtualGridContainer.removeEventListener('wheel', this.wheelHandler);\n this.wheelHandler = null;\n }\n \n if (this.virtualGridContainer) {\n this.virtualGridContainer.remove();\n this.virtualGridContainer = null;\n this.virtualGridOverlay = null;\n }\n \n if (this.virtualHeaderOverlay) {\n this.virtualHeaderOverlay.remove();\n this.virtualHeaderOverlay = null;\n }\n }\n\n\n\n /**\n * 拉伸最后一列\n * @returns 剩余未分配的宽度\n */\n private stretchLastColumn(extraWidth: number): number {\n if (!this.columnsData) return extraWidth;\n \n const columnType: DimensionCols = 'rgCol';\n const columns = this.columnsData[columnType];\n if (!columns || columns.length === 0) return extraWidth;\n \n const columnIndex = columns.length - 1;\n const targetColumn = columns[columnIndex];\n \n if (!targetColumn || !this.isValidColumn(targetColumn)) return extraWidth;\n if ((targetColumn as any).autoSize) return extraWidth;\n \n // 如果拉伸列被手动调整过,不再自动拉伸\n if (targetColumn.prop && this.manuallyResizedColumns.has(targetColumn.prop as string)) {\n return extraWidth;\n }\n\n return this.applyColumnStretch(columnType, columnIndex, targetColumn, extraWidth);\n }\n\n /**\n * 按索引拉伸列\n * @returns 剩余未分配的宽度\n */\n private stretchColumnByIndex(index: number, extraWidth: number): number {\n const columns = this.revogrid.columns as ColumnRegular[];\n if (!columns || index < 0 || index >= columns.length) return extraWidth;\n \n const column = columns[index];\n if (!column || !this.isValidColumn(column)) return extraWidth;\n \n const columnType: DimensionCols = (column as any).pin || 'rgCol';\n const colsOfType = this.columnsData?.[columnType];\n if (!colsOfType) return extraWidth;\n \n const columnIndex = colsOfType.findIndex(col => col.prop === column.prop);\n if (columnIndex === -1) return extraWidth;\n \n const targetColumn = colsOfType[columnIndex];\n if ((targetColumn as any).autoSize) return extraWidth;\n if (targetColumn.prop && this.manuallyResizedColumns.has(targetColumn.prop as string)) return extraWidth;\n\n return this.applyColumnStretch(columnType, columnIndex, targetColumn, extraWidth);\n }\n\n /**\n * 按 prop 拉伸列\n * @returns 剩余未分配的宽度\n */\n private stretchColumnByProp(prop: string, extraWidth: number): number {\n if (!this.columnsData) return extraWidth;\n \n // 如果拉伸列被手动调整过,不再自动拉伸\n if (this.manuallyResizedColumns.has(prop)) {\n return extraWidth;\n }\n \n // 在所有列类型中查找\n const dimensionTypes: DimensionCols[] = ['rgCol', 'colPinStart', 'colPinEnd'];\n for (const columnType of dimensionTypes) {\n const columns = this.columnsData[columnType];\n if (!columns) continue;\n \n const columnIndex = columns.findIndex(col => col.prop === prop);\n if (columnIndex === -1) continue;\n \n const targetColumn = columns[columnIndex];\n if (!targetColumn || !this.isValidColumn(targetColumn)) continue;\n if ((targetColumn as any).autoSize) continue;\n\n return this.applyColumnStretch(columnType, columnIndex, targetColumn, extraWidth);\n }\n return extraWidth;\n }\n\n /**\n * 应用列拉伸\n * @returns 剩余未分配的宽度(当列达到最小宽度限制时)\n */\n private applyColumnStretch(\n columnType: DimensionCols,\n columnIndex: number,\n column: ColumnRegular,\n extraWidth: number\n ): number {\n // 获取当前列宽\n const currentColumnWidth = \n this.providers?.dimension?.stores[columnType]?.store.get('sizes')?.[columnIndex] || \n column.size || \n 100;\n\n // 获取列的最小宽度\n const minColumnWidth = this.getColumnMinWidth(column);\n\n // 计算新的列宽\n const targetWidth = currentColumnWidth + extraWidth;\n const newColumnWidth = Math.max(minColumnWidth, targetWidth);\n \n // 计算剩余宽度(如果达到最小宽度限制,剩余的空间需要分配给其他列)\n const actualChange = newColumnWidth - currentColumnWidth;\n const remainingWidth = extraWidth - actualChange;\n\n // 只有当宽度发生变化时才应用更改\n if (Math.abs(newColumnWidth - currentColumnWidth) > 1) {\n // 1. 更新 dimension store\n this.providers?.dimension?.setCustomSizes(\n columnType,\n { [columnIndex]: newColumnWidth },\n true\n );\n \n // 2. 更新列数据的 size 属性\n const columnData = this.columnsData?.[columnType]?.[columnIndex];\n if (columnData && this.columnsData) {\n columnData.size = newColumnWidth;\n \n // 3. 检查当前调整的列是否是自适应列\n const stretchColumnProp = this.getStretchColumnProp();\n const isStretchColumn = column.prop === stretchColumnProp;\n \n // 如果当前调整的是自适应列本身,需要检查它是否在 rgCol 区域\n // 如果在 rgCol 区域,说明可能是被冻结列调整触发的,需要强制刷新\n if (isStretchColumn && columnType === 'rgCol') {\n // 使用微任务延迟执行,确保 dimension store 更新完成\n Promise.resolve().then(() => {\n const headerUnified = this.revogrid.querySelector('revogr-header-unified') as any;\n if (headerUnified && typeof headerUnified.forceRefresh === 'function') {\n headerUnified.forceRefresh();\n }\n });\n }\n }\n }\n \n return Math.max(0, remainingWidth);\n }\n\n /**\n * 拉伸所有列\n */\n private stretchAllColumns(extraWidth: number) {\n if (!this.columnsData) return;\n \n const sizeMap = new Map<DimensionCols, number[]>();\n let columnCount = 0;\n\n // 遍历所有列类型\n const dimensionTypes: DimensionCols[] = ['rgCol', 'colPinStart', 'colPinEnd'];\n for (const columnType of dimensionTypes) {\n const columns = this.columnsData[columnType];\n if (!columns) continue;\n \n const columnIndices: number[] = [];\n \n columns.forEach((column, index) => {\n // 跳过已设置自动大小、固定大小或已被手动调整过的列\n if ((column as any).autoSize || column.size) return;\n if (column.prop && this.manuallyResizedColumns.has(column.prop as string)) return;\n \n columnCount++;\n columnIndices.push(index);\n });\n \n if (columnIndices.length > 0) {\n sizeMap.set(columnType, columnIndices);\n }\n }\n\n // 如果没有可拉伸的列,直接返回\n if (!columnCount) return;\n\n // 计算平均宽度变化量\n const avgChange = extraWidth / columnCount;\n\n // 应用新宽度到所有可拉伸列\n sizeMap.forEach((indices, columnType) => {\n const newSizes: { [key: number]: number } = {};\n const columns = this.columnsData![columnType];\n \n indices.forEach(index => {\n const column = columns[index];\n \n const currentWidth = \n this.providers?.dimension?.stores[columnType]?.store.get('sizes')?.[index] || \n column.size || \n 100;\n\n const minColumnWidth = this.getColumnMinWidth(column);\n const newWidth = Math.max(minColumnWidth, currentWidth + avgChange);\n\n if (Math.abs(newWidth - currentWidth) > 1) {\n newSizes[index] = newWidth;\n }\n });\n\n if (Object.keys(newSizes).length > 0) {\n this.providers?.dimension?.setCustomSizes(columnType, newSizes, true);\n }\n });\n }\n\n /**\n * 检查列是否有效\n */\n private isValidColumn(column: ColumnRegular): boolean {\n return !!column.prop || !(column as any).children;\n }\n\n /**\n * 公开的 applyStretch 方法\n */\n applyStretch() {\n this.applyStretchImpl();\n }\n\n /**\n * 立即同步执行拉伸计算(不使用防抖)\n * 用于需要立即响应的场景,如拖拽结束\n */\n applyStretchImmediate() {\n this.applyStretchImpl();\n }\n\n /**\n * 重置手动调整记录\n */\n resetManualResize() {\n this.manuallyResizedColumns.clear();\n this.applyStretchImpl();\n }\n\n /**\n * 检查列是否被手动调整过宽度\n */\n isManuallyResized(prop: string): boolean {\n return this.manuallyResizedColumns.has(prop);\n }\n\n /**\n * 标记列为手动调整过\n */\n markAsManuallyResized(prop: string) {\n this.manuallyResizedColumns.add(prop);\n }\n\n /**\n * 取消列的手动调整标记\n */\n unmarkAsManuallyResized(prop: string) {\n this.manuallyResizedColumns.delete(prop);\n }\n\n /**\n * 获取拉伸列配置\n */\n getStretchColumnConfig(): 'last' | 'all' | number | string | undefined {\n return this.config.stretchColumn;\n }\n\n /**\n * 更新配置\n */\n updateConfig(config: Partial<ColumnStretchConfig>) {\n this.config = { ...this.config, ...config };\n this.applyStretchImpl();\n }\n\n destroy() {\n if (this.resizeObserver) {\n this.resizeObserver.disconnect();\n this.resizeObserver = null;\n }\n if (this.resizeEndTimeout) {\n clearTimeout(this.resizeEndTimeout);\n }\n // 移除覆盖层\n this.removevirtualGridOverlay();\n super.destroy();\n }\n}\n","/**\n * Plugin module for revo-grid grid system\n * Add support for automatic column resize\n */\nimport each from 'lodash/each';\nimport reduce from 'lodash/reduce';\n\nimport { BasePlugin } from './base.plugin';\nimport { getSourceItem, columnTypes } from '@store';\nimport type {\n DimensionCols,\n DimensionRows,\n ColumnRegular,\n DataType,\n InitialHeaderClick,\n ViewSettingSizeProp,\n BeforeSaveDataDetails,\n BeforeRangeSaveDataDetails,\n PluginProviders,\n} from '@type';\nimport { ColumnCollection, getColumnType } from '../utils/column.utils';\nimport { ColumnStretchPlugin } from './column-stretch.plugin';\n\ninterface Column extends ColumnRegular {\n index: number;\n}\n\ntype AutoSizeColumns = Record<DimensionCols, ColumnRecords>;\ntype ColumnRecords = Record<any, Column>;\ntype SourceSetEvent = { type: DimensionRows; source: DataType[] };\ntype EditEvent = BeforeSaveDataDetails | BeforeRangeSaveDataDetails;\ntype Resolve = (cols: Partial<AutoSizeColumns>) => void;\ntype Reject = () => void;\n\nexport type AutoSizeColumnConfig = {\n // ui behavior mode\n mode?: ColumnAutoSizeMode;\n /**\n * autoSize for all columns\n * if allColumnes true all columns treated as autoSize, worse for performance\n * false by default\n */\n allColumns?: boolean;\n /**\n * assumption per characted size\n * by default defined as 8, can be changed in this config\n */\n letterBlockSize?: number;\n /** make size calculation exact\n * by default it based on assumption each character takes some space defined in letterBlockSize */\n preciseSize?: boolean;\n /**\n * reset column width to initial size on header double click\n * requires mode to be 'resetToInitialSize'\n */\n resetToInitialSize?: boolean;\n};\n\nconst LETTER_BLOCK_SIZE = 7;\n\nexport const enum ColumnAutoSizeMode {\n // increases column width on header click according the largest text value\n headerClickAutosize = 'headerClickAutoSize',\n // increases column width on data set and text edit, decreases performance\n autoSizeOnTextOverlap = 'autoSizeOnTextOverlap',\n // increases and decreases column width based on all items sizes, worst for performance\n autoSizeAll = 'autoSizeAll',\n // reset column width to initial size on header double click\n resetToInitialSize = 'resetToInitialSize',\n}\n\nexport class AutoSizeColumnPlugin extends BasePlugin {\n autoSizeColumns: Partial<AutoSizeColumns> | null = null;\n readonly letterBlockSize: number;\n\n /** for config option when preciseSize enabled */\n readonly precsizeCalculationArea: HTMLElement;\n\n /** for edge case when no columns defined before data */\n dataResolve: Resolve | null = null;\n dataReject: Reject | null = null;\n\n constructor(\n revogrid: HTMLRevoGridElement,\n public providers: PluginProviders,\n public config?: AutoSizeColumnConfig,\n ) {\n super(revogrid, providers);\n this.letterBlockSize = config?.letterBlockSize || LETTER_BLOCK_SIZE;\n\n // create test container to check text width\n if (config?.preciseSize) {\n this.precsizeCalculationArea = this.initiatePresizeElement();\n revogrid.appendChild(this.precsizeCalculationArea);\n }\n\n const aftersourceset = ({\n detail: { source },\n }: CustomEvent<SourceSetEvent>) => {\n this.setSource(source);\n };\n const beforecolumnsset = ({\n detail: { columns },\n }: CustomEvent<ColumnCollection>) => {\n this.columnSet(columns);\n };\n this.addEventListener('beforecolumnsset', beforecolumnsset);\n switch (config?.mode) {\n case ColumnAutoSizeMode.autoSizeOnTextOverlap:\n this.addEventListener('aftersourceset', aftersourceset);\n this.addEventListener('afteredit', ({ detail }: CustomEvent<EditEvent>) => {\n this.afteredit(detail);\n });\n break;\n case ColumnAutoSizeMode.autoSizeAll:\n this.addEventListener('aftersourceset', aftersourceset);\n this.addEventListener('afteredit', ({ detail }) => {\n this.afterEditAll(detail);\n });\n break;\n case ColumnAutoSizeMode.resetToInitialSize:\n this.addEventListener('headerdblclick', ({ detail }: CustomEvent<InitialHeaderClick>) => {\n this.resetColumnToInitialSize(detail);\n });\n break;\n default:\n this.addEventListener('headerdblclick', ({ detail }: CustomEvent<InitialHeaderClick>) => {\n const type = getColumnType(detail.column);\n const size = this.getColumnSize(detail.index, type);\n if (size) {\n // 获取 column-stretch 插件实例\n const stretchPlugin = this.providers.plugins?.getByClass?.(ColumnStretchPlugin);\n \n // 启用防跳动机制\n this.triggerAutoSizeWithAntiJitter(type, detail.index, detail.column, stretchPlugin);\n \n // 在防跳动期间设置列宽\n this.providers.dimension.setCustomSizes(\n type,\n {\n [detail.index]: size,\n },\n true,\n );\n }\n });\n break;\n }\n }\n\n async setSource(source: DataType[]): Promise<void> {\n let autoSize = this.autoSizeColumns;\n if (this.dataReject) {\n this.dataReject();\n this.clearPromise();\n }\n\n /** If data set first and no column provided await until get one */\n if (!autoSize) {\n const request = new Promise((resolve: Resolve, reject: Reject) => {\n this.dataResolve = resolve;\n this.dataReject = reject;\n });\n try {\n autoSize = await request;\n } catch {\n return;\n }\n }\n\n // calculate sizes\n if (autoSize) {\n each(autoSize, (_v, type: DimensionCols) => {\n const sizes: ViewSettingSizeProp = {};\n each(autoSize![type], rgCol => {\n // calculate size\n rgCol.size = sizes[rgCol.index] = source.reduce(\n (prev, rgRow) => Math.max(prev, this.getLength(rgRow[rgCol.prop])),\n this.getLength(rgCol.name || ''),\n );\n });\n this.providers.dimension.setCustomSizes(type, sizes, true);\n });\n }\n }\n\n getLength(len?: any): number {\n const padding = 15;\n if (!len) {\n return 0;\n }\n try {\n const str = len.toString();\n\n /**if exact calculation required proxy with html element, slow operation */\n if (this.config?.preciseSize) {\n this.precsizeCalculationArea.innerText = str;\n return this.precsizeCalculationArea.scrollWidth + padding * 2;\n }\n return str.length * this.letterBlockSize + padding * 2;\n } catch {\n return 0;\n }\n }\n\n afteredit(e: EditEvent) {\n let data: Record<string, DataType>;\n if (this.isRangeEdit(e)) {\n data = e.data;\n } else {\n data = { 0: { [e.prop]: e.val } };\n }\n each(this.autoSizeColumns, (columns, type: DimensionCols) => {\n const sizes: ViewSettingSizeProp = {};\n\n each(columns, rgCol => {\n // calculate size\n const size = reduce(\n data,\n (prev: number | undefined, rgRow) => {\n if (typeof rgRow[rgCol.prop] === 'undefined') {\n return prev;\n }\n return Math.max(prev || 0, this.getLength(rgRow[rgCol.prop]));\n },\n undefined,\n );\n\n if (size && (rgCol.size ?? 0) < size) {\n rgCol.size = sizes[rgCol.index] = size;\n }\n });\n\n this.providers.dimension.setCustomSizes(type, sizes, true);\n });\n }\n\n afterEditAll(e: EditEvent) {\n const props: Record<any, true> = {};\n if (this.isRangeEdit(e)) {\n each(e.data, r => each(r, (_v, p) => (props[p] = true)));\n } else {\n props[e.prop] = true;\n }\n each(this.autoSizeColumns, (columns, type: DimensionCols) => {\n const sizes: ViewSettingSizeProp = {};\n\n each(columns, rgCol => {\n if (props[rgCol.prop]) {\n const size = this.getColumnSize(rgCol.index, type);\n if (size) {\n sizes[rgCol.index] = size;\n }\n }\n });\n this.providers.dimension.setCustomSizes(type, sizes, true);\n });\n }\n\n getColumnSize(index: number, type: DimensionCols): number {\n const rgCol = this.autoSizeColumns?.[type]?.[index];\n if (!rgCol) {\n return 0;\n }\n return reduce(\n this.providers.data.stores,\n (r, s) => {\n const perStore = reduce(\n s.store.get('items'),\n (prev, _row, i) => {\n const item = getSourceItem(s.store, i);\n return Math.max(prev || 0, this.getLength(item?.[rgCol.prop]));\n },\n 0,\n );\n return Math.max(r, perStore);\n },\n rgCol.size || 0,\n );\n }\n\n columnSet(columns: Record<DimensionCols, ColumnRegular[]>) {\n for (let t of columnTypes) {\n const type = t as DimensionCols;\n const cols = columns[type];\n\n for (let i in cols) {\n if (cols[i].autoSize || this.config?.allColumns) {\n if (!this.autoSizeColumns) {\n this.autoSizeColumns = {};\n }\n if (!this.autoSizeColumns[type]) {\n this.autoSizeColumns[type] = {};\n }\n this.autoSizeColumns[type]![i] = {\n ...cols[i],\n index: parseInt(i, 10),\n };\n }\n }\n }\n\n if (this.dataResolve) {\n this.dataResolve(this.autoSizeColumns || {});\n this.clearPromise();\n }\n }\n\n /**\n * Reset column width to initial size\n */\n resetColumnToInitialSize(detail: InitialHeaderClick) {\n const { column, index } = detail;\n const type = getColumnType(column);\n \n // Get initial size from additionalData.allColumns\n const allColumns = this.revogrid.additionalData?.allColumns;\n \n if (!allColumns || !Array.isArray(allColumns)) {\n return;\n }\n \n const initialColumn = allColumns.find((col: any) => col.prop === column.prop);\n \n // 获取 column-stretch 插件实例\n const stretchPlugin = this.providers.plugins?.getByClass?.(ColumnStretchPlugin);\n \n // 如果列没有固定size(自动宽度列)\n if (!initialColumn?.size) {\n // 检查列是否被手动调整过\n const isManuallyResized = stretchPlugin && \n typeof stretchPlugin.isManuallyResized === 'function' && \n column.prop && \n stretchPlugin.isManuallyResized(column.prop as string);\n \n if (isManuallyResized) {\n // 触发防跳动机制\n this.triggerAutoSizeWithAntiJitter(type, index, column, stretchPlugin);\n }\n // 如果没有被手动调整过,说明已经是自动宽度状态,不做任何操作\n return;\n }\n \n // 如果有初始size,恢复到初始size\n const initialSize = initialColumn.size;\n if (initialSize) {\n this.providers.dimension.setCustomSizes(\n type,\n {\n [index]: initialSize,\n },\n true,\n );\n \n // 立即同步触发 column-stretch 插件重新计算覆盖层,避免抖动\n if (stretchPlugin && typeof stretchPlugin.applyStretchImmediate === 'function') {\n stretchPlugin.applyStretchImmediate();\n }\n }\n }\n\n /**\n * 触发自动列宽并应用防跳动机制\n */\n private triggerAutoSizeWithAntiJitter(\n type: DimensionCols,\n _index: number,\n column: ColumnRegular,\n stretchPlugin: any\n ) {\n // 直接调用 header 组件的防跳动方法(同步)\n const headers = this.revogrid.querySelectorAll('revogr-header-unified');\n headers.forEach((header: any) => {\n if (header && typeof header.startResizingForAutoSize === 'function') {\n header.startResizingForAutoSize(type);\n }\n });\n \n // 取消手动调整标记,恢复为自动宽度\n if (stretchPlugin && typeof stretchPlugin.unmarkAsManuallyResized === 'function' && column.prop) {\n stretchPlugin.unmarkAsManuallyResized(column.prop as string);\n }\n \n // 立即同步触发 column-stretch 插件重新计算\n if (stretchPlugin && typeof stretchPlugin.applyStretchImmediate === 'function') {\n stretchPlugin.applyStretchImmediate();\n }\n \n // 延迟结束调整大小状态(与拖动列宽的延迟时间一致)\n setTimeout(() => {\n headers.forEach((header: any) => {\n if (header && typeof header.endResizingForAutoSize === 'function') {\n header.endResizingForAutoSize();\n }\n });\n }, 300);\n }\n\n clearPromise() {\n this.dataResolve = null;\n this.dataReject = null;\n }\n\n isRangeEdit(e: EditEvent): e is BeforeRangeSaveDataDetails {\n return !!(e as BeforeRangeSaveDataDetails).data;\n }\n\n initiatePresizeElement(): HTMLElement {\n const styleForFontTest: Partial<CSSStyleDeclaration> = {\n position: 'absolute',\n fontSize: '14px',\n height: '0',\n width: '0',\n whiteSpace: 'nowrap',\n top: '0',\n overflowX: 'scroll',\n display: 'block',\n };\n\n const el = document.createElement('div');\n for (let s in styleForFontTest) {\n el.style[s] = styleForFontTest[s] ?? '';\n }\n el.classList.add('revo-test-container');\n return el;\n }\n\n destroy() {\n super.destroy();\n this.precsizeCalculationArea?.remove();\n }\n}\n","import each from 'lodash/each';\nimport { calculateRowHeaderSize } from '../utils/row-header-utils';\nimport { getScrollbarSize } from '../utils';\nimport { BasePlugin } from './base.plugin';\nimport { DimensionCols, DimensionType, PluginBaseComponent, PluginProviders, ColumnRegular } from '@type';\nimport { ColumnCollection } from '../utils/column.utils';\n\n/**\n * This plugin serves to recalculate columns initially\n * Base on empty space if there is any\n * Currently plugin supports only increasing last column\n */\ntype ScrollChange = {\n type: DimensionType;\n hasScroll: boolean;\n};\ntype StretchedData = {\n initialSize: number;\n size: number;\n index: number;\n};\n\nexport class StretchColumn extends BasePlugin {\n private stretchedColumn: StretchedData | null = null;\n private readonly scrollSize;\n constructor(\n revogrid: HTMLRevoGridElement,\n public providers: PluginProviders,\n ) {\n super(revogrid, providers);\n\n // calculate scroll bar size for current user session\n this.scrollSize = getScrollbarSize(document);\n\n // subscribe to column changes\n const beforecolumnapplied = ({\n detail: { columns },\n }: CustomEvent<ColumnCollection>) => this.applyStretch(columns);\n this.addEventListener('beforecolumnapplied', beforecolumnapplied);\n }\n\n private setScroll({ type, hasScroll }: ScrollChange) {\n if (\n type === 'rgRow' &&\n this.stretchedColumn &&\n this.stretchedColumn?.initialSize === this.stretchedColumn.size\n ) {\n if (hasScroll) {\n this.stretchedColumn.size -= this.scrollSize;\n this.apply();\n this.dropChanges();\n }\n }\n }\n\n private activateChanges() {\n const setScroll = ({ detail }: CustomEvent<ScrollChange>) =>\n this.setScroll(detail);\n this.addEventListener('scrollchange', setScroll);\n }\n\n private dropChanges() {\n this.stretchedColumn = null;\n this.removeEventListener('scrollchange');\n }\n\n private apply() {\n if (!this.stretchedColumn) {\n return;\n }\n const type: DimensionCols = 'rgCol';\n const sizes = this.providers.dimension.stores[type].store.get('sizes');\n this.providers.dimension.setCustomSizes(\n type,\n {\n ...sizes,\n [this.stretchedColumn.index]: this.stretchedColumn.size,\n },\n true,\n );\n }\n\n /**\n * Apply stretch changes\n */\n applyStretch(columns: Record<DimensionCols, ColumnRegular[]>) {\n // unsubscribe from all events\n this.dropChanges();\n // calculate grid size\n let sizeDifference = this.revogrid.clientWidth - 1;\n each(columns, (_, type: DimensionCols) => {\n const realSize =\n this.providers.dimension.stores[type].store.get('realSize');\n sizeDifference -= realSize;\n });\n if (this.revogrid.rowHeaders) {\n const itemsLength =\n this.providers.data.stores.rgRow.store.get('source').length;\n const header = this.revogrid.rowHeaders;\n const rowHeaderSize = calculateRowHeaderSize(\n itemsLength,\n typeof header === 'object' ? header : undefined,\n );\n if (rowHeaderSize) {\n sizeDifference -= rowHeaderSize;\n }\n }\n if (sizeDifference > 0) {\n // currently plugin accepts last column only\n const index = columns.rgCol.length - 1;\n const last = columns.rgCol[index];\n /**\n * has column\n * no auto size applied\n * size for column shouldn't be defined\n */\n const colSize = last?.size || this.revogrid.colSize || 0;\n const size = sizeDifference + colSize - 1;\n\n if (last && !last.autoSize && colSize < size) {\n this.stretchedColumn = {\n initialSize: size,\n index,\n size,\n };\n this.apply();\n this.activateChanges();\n }\n }\n }\n}\n\n/**\n * Check plugin type is Stretch\n */\nexport function isStretchPlugin(\n plugin: PluginBaseComponent | StretchColumn,\n): plugin is StretchColumn {\n return !!(plugin as StretchColumn).applyStretch;\n}\n","/**\n * The base implementation of `_.clamp` which doesn't coerce arguments.\n *\n * @private\n * @param {number} number The number to clamp.\n * @param {number} [lower] The lower bound.\n * @param {number} upper The upper bound.\n * @returns {number} Returns the clamped number.\n */\nfunction baseClamp(number, lower, upper) {\n if (number === number) {\n if (upper !== undefined) {\n number = number <= upper ? number : upper;\n }\n if (lower !== undefined) {\n number = number >= lower ? number : lower;\n }\n }\n return number;\n}\n\nexport default baseClamp;\n","import baseClamp from './_baseClamp.js';\nimport toInteger from './toInteger.js';\n\n/** Used as references for the maximum length and index of an array. */\nvar MAX_ARRAY_LENGTH = 4294967295;\n\n/**\n * Converts `value` to an integer suitable for use as the length of an\n * array-like object.\n *\n * **Note:** This method is based on\n * [`ToLength`](http://ecma-international.org/ecma-262/7.0/#sec-tolength).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to convert.\n * @returns {number} Returns the converted integer.\n * @example\n *\n * _.toLength(3.2);\n * // => 3\n *\n * _.toLength(Number.MIN_VALUE);\n * // => 0\n *\n * _.toLength(Infinity);\n * // => 4294967295\n *\n * _.toLength('3.2');\n * // => 3\n */\nfunction toLength(value) {\n return value ? baseClamp(toInteger(value), 0, MAX_ARRAY_LENGTH) : 0;\n}\n\nexport default toLength;\n","import toInteger from './toInteger.js';\nimport toLength from './toLength.js';\n\n/**\n * The base implementation of `_.fill` without an iteratee call guard.\n *\n * @private\n * @param {Array} array The array to fill.\n * @param {*} value The value to fill `array` with.\n * @param {number} [start=0] The start position.\n * @param {number} [end=array.length] The end position.\n * @returns {Array} Returns `array`.\n */\nfunction baseFill(array, value, start, end) {\n var length = array.length;\n\n start = toInteger(start);\n if (start < 0) {\n start = -start > length ? 0 : (length + start);\n }\n end = (end === undefined || end > length) ? length : toInteger(end);\n if (end < 0) {\n end += length;\n }\n end = start > end ? 0 : toLength(end);\n while (start < end) {\n array[start++] = value;\n }\n return array;\n}\n\nexport default baseFill;\n","import baseFill from './_baseFill.js';\nimport isIterateeCall from './_isIterateeCall.js';\n\n/**\n * Fills elements of `array` with `value` from `start` up to, but not\n * including, `end`.\n *\n * **Note:** This method mutates `array`.\n *\n * @static\n * @memberOf _\n * @since 3.2.0\n * @category Array\n * @param {Array} array The array to fill.\n * @param {*} value The value to fill `array` with.\n * @param {number} [start=0] The start position.\n * @param {number} [end=array.length] The end position.\n * @returns {Array} Returns `array`.\n * @example\n *\n * var array = [1, 2, 3];\n *\n * _.fill(array, 'a');\n * console.log(array);\n * // => ['a', 'a', 'a']\n *\n * _.fill(Array(3), 2);\n * // => [2, 2, 2]\n *\n * _.fill([4, 6, 8, 10], '*', 1, 3);\n * // => [4, '*', '*', 10]\n */\nfunction fill(array, value, start, end) {\n var length = array == null ? 0 : array.length;\n if (!length) {\n return [];\n }\n if (start && typeof start != 'number' && isIterateeCall(array, value, start)) {\n start = 0;\n end = length;\n }\n return baseFill(array, value, start, end);\n}\n\nexport default fill;\n","import { getGroupingName, isGrouping } from '../groupingRow/grouping.service';\nimport { CSVFormat, DataInput, Formatter } from './types';\n\nconst INITIAL: CSVFormat = {\n mime: 'text/csv',\n fileKind: 'csv',\n // BOM signature\n bom: true,\n columnDelimiter: ',',\n rowDelimiter: '\\r\\n',\n encoding: '',\n};\n\nexport type CSVFormatter = (options: Partial<CSVFormat>, data: DataInput) => string;\n\n// The ASCII character code 13 is called a Carriage Return or CR.\nconst CARRIAGE_RETURN = String.fromCharCode(13);\n// Chr(13) followed by a Chr(10) that compose a proper CRLF.\nconst LINE_FEED = String.fromCharCode(10);\nconst DOUBLE_QT = String.fromCharCode(34);\nconst NO_BREAK_SPACE = String.fromCharCode(0xfeff);\nconst escapeRegex = new RegExp('\"', 'g');\n\nexport class ExportCsv implements Formatter {\n readonly options: Readonly<CSVFormat>;\n constructor(options: Partial<CSVFormat> = {}) {\n this.options = { ...INITIAL, ...options };\n }\n\n doExport({ data, headers, props }: DataInput) {\n let result = this.options.bom ? NO_BREAK_SPACE : '';\n\n // any header\n if (headers?.length > 0) {\n headers.forEach(header => {\n // ignore empty\n if (!header.length) {\n return;\n }\n result += this.prepareHeader(header, this.options.columnDelimiter);\n result += this.options.rowDelimiter;\n });\n }\n\n data.forEach((rgRow, index) => {\n if (index > 0) {\n result += this.options.rowDelimiter;\n }\n // support grouping\n if (isGrouping(rgRow)) {\n result += this.parseCell(getGroupingName(rgRow), this.options.columnDelimiter);\n return;\n }\n result += props.map(p => this.parseCell(rgRow[p], this.options.columnDelimiter)).join(this.options.columnDelimiter);\n });\n\n return result;\n }\n\n private prepareHeader(columnHeaders: string[], columnDelimiter: string) {\n let result = '';\n const newColumnHeaders = columnHeaders.map(v => this.parseCell(v, columnDelimiter, true));\n result += newColumnHeaders.join(columnDelimiter);\n return result;\n }\n\n private parseCell(value: any, columnDelimiter: string, force = false) {\n let escape = value;\n if (typeof value !== 'string') {\n escape = JSON.stringify(value);\n }\n const toEscape = [CARRIAGE_RETURN, DOUBLE_QT, LINE_FEED, columnDelimiter];\n if (typeof escape === 'undefined') {\n return '';\n }\n if (escape !== '' && (force || toEscape.some(i => escape.indexOf(i) >= 0))) {\n return `\"${escape.replace(escapeRegex, '\"\"')}\"`;\n }\n\n return escape;\n }\n}\n","import fill from 'lodash/fill';\nimport { columnTypes, rowTypes, Group, Groups } from '@store';\n\nimport { timeout } from '../../utils';\nimport { BasePlugin } from '../base.plugin';\nimport { ExportCsv } from './csv';\nimport type { ColSource, CSVFormat, DataInput, Formatter } from './types';\nimport type { DimensionCols, ColumnProp, DataType } from '@type';\n\nexport * from './csv';\nexport * from './types';\n\nenum ExportTypes {\n csv = 'csv',\n}\n\nexport type ExportFormat = Partial<CSVFormat>;\n\nexport class ExportFilePlugin extends BasePlugin {\n /** Exports string */\n async exportString(options: ExportFormat = {}, t: ExportTypes = ExportTypes.csv) {\n const data = await this.beforeexport();\n if (!data) {\n return null;\n }\n return this.formatter(t, options).doExport(data);\n }\n\n /** Exports Blob */\n async exportBlob(options: ExportFormat = {}, t: ExportTypes = ExportTypes.csv) {\n return await this.getBlob(this.formatter(t, options));\n }\n\n /** Export file */\n async exportFile(options: ExportFormat = {}, t: ExportTypes = ExportTypes.csv) {\n const formatter = this.formatter(t, options);\n\n // url\n const URL = window.URL || window.webkitURL;\n\n const a = document.createElement('a');\n const { filename, fileKind } = formatter.options;\n const name = `${filename}.${fileKind}`;\n\n const blob = await this.getBlob(formatter);\n const url = blob ? URL.createObjectURL(blob) : '';\n\n a.style.display = 'none';\n a.setAttribute('href', url);\n a.setAttribute('download', name);\n this.revogrid.appendChild(a);\n a.dispatchEvent(new MouseEvent('click'));\n this.revogrid.removeChild(a);\n\n // delay for revoke, correct for some browsers\n await timeout(120);\n URL.revokeObjectURL(url);\n }\n\n /** Blob object */\n async getBlob(formatter: Formatter) {\n const type = `${formatter.options.mime};charset=${formatter.options.encoding}`;\n if (typeof Blob !== 'undefined') {\n const data = await this.beforeexport();\n if (!data) {\n return null;\n }\n return new Blob([formatter.doExport(data)], { type });\n }\n return null;\n }\n\n // before event\n private async beforeexport() {\n let data = await this.getData();\n const event: CustomEvent<{ data: DataInput }> = this.emit('beforeexport', { data });\n if (event.defaultPrevented) {\n return null;\n }\n return event.detail.data;\n }\n\n private async getData(): Promise<DataInput> {\n const data = await this.getSource();\n const colSource: ColSource[] = [];\n const colPromises: Promise<ColSource>[] = [];\n columnTypes.forEach((t, i) => {\n colPromises.push(this.getColPerSource(t).then(s => (colSource[i] = s)));\n });\n await Promise.all(colPromises);\n const columns: ColSource = {\n headers: [],\n props: [],\n };\n for (let source of colSource) {\n source.headers.forEach((h, i) => {\n if (!columns.headers[i]) {\n columns.headers[i] = [];\n }\n columns.headers[i].push(...h);\n });\n columns.props.push(...source.props);\n }\n return {\n data,\n ...columns,\n };\n }\n\n private async getColPerSource(t: DimensionCols) {\n const store = await this.revogrid.getColumnStore(t);\n const source = store.get('source');\n const virtualIndexes = store.get('items');\n const depth = store.get('groupingDepth');\n const groups = store.get('groups');\n const colNames: string[] = [];\n const colProps: ColumnProp[] = [];\n virtualIndexes.forEach((v: number) => {\n const prop = source[v].prop;\n colNames.push(source[v].name || '');\n colProps.push(prop);\n });\n const rows: string[][] = this.getGroupHeaders(depth, groups, virtualIndexes);\n rows.push(colNames);\n return {\n headers: rows,\n props: colProps,\n };\n }\n\n private getGroupHeaders(depth: number, groups: Groups, items: number[]) {\n const rows: string[][] = [];\n const template = fill(new Array(items.length), '');\n for (let d = 0; d < depth; d++) {\n const rgRow = [...template];\n rows.push(rgRow);\n if (!groups[d]) {\n continue;\n }\n const levelGroups = groups[d];\n\n // add names of groups\n levelGroups.forEach((group: Group) => {\n const minIndex = group.indexes[0];\n if (typeof minIndex === 'number') {\n rgRow[minIndex] = group.name;\n }\n });\n }\n return rows;\n }\n\n private async getSource() {\n const data: DataType[][] = [];\n const promisesData: Promise<number>[] = [];\n rowTypes.forEach(t => {\n const dataPart: DataType[] = [];\n data.push(dataPart);\n const promise = this.revogrid.getVisibleSource(t).then((d: DataType[]) => dataPart.push(...d));\n promisesData.push(promise);\n });\n await Promise.all(promisesData);\n return data.reduce((r, v) => {\n r.push(...v);\n return r;\n }, []);\n }\n\n // get correct class for future multiple types support\n private formatter(type: ExportTypes, options: ExportFormat = {}) {\n switch (type) {\n case ExportTypes.csv:\n return new ExportCsv(options);\n default:\n throw new Error('Unknown format');\n }\n }\n}\n","import { LogicFunction, LogicFunctionExtraParam, LogicFunctionParam, ExtraField } from '../filter.types';\n\nconst eq: LogicFunction = (value: LogicFunctionParam, extra?: LogicFunctionExtraParam) => {\n if (typeof value === 'undefined' || (value === null && !extra)) {\n return true;\n }\n if (typeof value !== 'string') {\n value = JSON.stringify(value);\n }\n\n const filterVal = extra?.toString().toLocaleLowerCase();\n if (filterVal?.length === 0) {\n return true;\n }\n \n return value.toLocaleLowerCase() === filterVal;\n};\n\nexport const notEq: LogicFunction = (value: LogicFunctionParam, extra?: LogicFunctionExtraParam) => !eq(value, extra);\nnotEq.extra = 'input' as ExtraField;\neq.extra = 'input' as ExtraField;\nexport default eq;\n","import { LogicFunction, LogicFunctionExtraParam, LogicFunctionParam } from '../../filter.types';\n\nconst gtThan: LogicFunction = function (value: LogicFunctionParam, extra?: LogicFunctionExtraParam) {\n let conditionValue: number;\n\n if (typeof value === 'number' && typeof extra !== 'undefined' && extra !== null) {\n conditionValue = parseFloat(extra?.toString());\n return value > conditionValue;\n }\n return false;\n};\n\ngtThan.extra = 'input';\nexport default gtThan;\n","import { LogicFunction, LogicFunctionExtraParam, LogicFunctionParam } from '../../filter.types';\nimport eq from '../equal';\nimport gt from './greaterThan';\n\nconst gtThanEq: LogicFunction = function (value: LogicFunctionParam, extra?: LogicFunctionExtraParam) {\n return eq(value, extra) || gt(value, extra);\n};\n\ngtThanEq.extra = 'input';\nexport default gtThanEq;\n","import { LogicFunction, LogicFunctionExtraParam, LogicFunctionParam } from '../../filter.types';\n\nconst lt: LogicFunction = function (value: LogicFunctionParam, extra?: LogicFunctionExtraParam) {\n let conditionValue: number;\n if (typeof value === 'number' && typeof extra !== 'undefined' && extra !== null) {\n conditionValue = parseFloat(extra.toString());\n return value < conditionValue;\n } else {\n return false;\n }\n};\n\nlt.extra = 'input';\nexport default lt;\n","import { LogicFunction, LogicFunctionExtraParam, LogicFunctionParam } from '../../filter.types';\nimport eq from '../equal';\nimport lt from './lessThan';\n\nconst lsEq: LogicFunction = function (value: LogicFunctionParam, extra?: LogicFunctionExtraParam) {\n return eq(value, extra) || lt(value, extra);\n};\n\nlsEq.extra = 'input';\nexport default lsEq;\n","import { LogicFunction, LogicFunctionParam } from '../filter.types';\n\nconst set: LogicFunction = (value: LogicFunctionParam) => !(value === '' || value === null || value === void 0);\nexport const notSet: LogicFunction = (value: LogicFunctionParam) => !set(value);\nexport default set;\n","import { LogicFunction, LogicFunctionExtraParam, LogicFunctionParam } from '../../filter.types';\n\nconst beginsWith: LogicFunction = (value: LogicFunctionParam, extra?: LogicFunctionExtraParam) => {\n if (!value) {\n return false;\n }\n if (!extra) {\n return true;\n }\n if (typeof value !== 'string') {\n value = JSON.stringify(value);\n }\n if (typeof extra !== 'string') {\n extra = JSON.stringify(extra);\n }\n return value.toLocaleLowerCase().indexOf(extra.toLocaleLowerCase()) === 0;\n};\n\nbeginsWith.extra = 'input';\nexport default beginsWith;\n","import { LogicFunction, LogicFunctionExtraParam, LogicFunctionParam } from '../../filter.types';\n\nconst contains: LogicFunction = (value: LogicFunctionParam, extra?: LogicFunctionExtraParam) => {\n if (!extra) {\n return true;\n }\n if (!value) {\n return false;\n }\n if (extra) {\n if (typeof value !== 'string') {\n value = JSON.stringify(value);\n }\n return value.toLocaleLowerCase().indexOf(extra.toString().toLowerCase()) > -1;\n }\n return true;\n};\n\nexport const notContains: LogicFunction = (value: LogicFunctionParam, extra?: LogicFunctionExtraParam) => {\n return !contains(value, extra);\n};\nnotContains.extra = 'input';\ncontains.extra = 'input';\nexport default contains;\n","// filter.indexed.ts\n\nimport eq, { notEq } from './conditions/equal';\nimport gtThan from './conditions/number/greaterThan';\nimport gtThanEq from './conditions/number/greaterThanOrEqual';\nimport lt from './conditions/number/lessThan';\nimport lsEq from './conditions/number/lessThanOrEqual';\nimport set, { notSet } from './conditions/set';\nimport beginsWith from './conditions/string/beginswith';\nimport contains, { notContains } from './conditions/string/contains';\nimport { LogicFunction } from './filter.types';\n\n\nexport const filterCoreFunctionsIndexedByType: Record<FilterType, LogicFunction> = {\n none: () => true,\n empty: notSet,\n notEmpty: set,\n eq: eq,\n notEq: notEq,\n begins: beginsWith,\n contains: contains,\n notContains: notContains,\n\n eqN: eq,\n neqN: notEq,\n gt: gtThan,\n gte: gtThanEq,\n lt: lt,\n lte: lsEq,\n};\n\nexport const filterTypes: Record<string, FilterType[]> = {\n string: ['notEmpty', 'empty', 'eq', 'notEq', 'begins', 'contains', 'notContains'],\n number: ['notEmpty', 'empty', 'eqN', 'neqN', 'gt', 'gte', 'lt', 'lte'],\n};\n\nexport const filterNames = {\n none: 'None',\n empty: 'Not set',\n notEmpty: 'Set',\n\n eq: 'Equal',\n notEq: 'Not equal',\n begins: 'Begins with',\n contains: 'Contains',\n notContains: 'Does not contain',\n\n eqN: '=',\n neqN: '!=',\n gt: '>',\n gte: '>=',\n lt: '<',\n lte: '<=',\n};\n\nexport type FilterType = keyof typeof filterNames;\n","// filter.plugin.tsx\nimport { h, type VNode } from '@stencil/core';\n\nimport type {\n ColumnProp,\n ColumnRegular,\n DataType,\n PluginProviders,\n} from '@type';\nimport { BasePlugin } from '../base.plugin';\nimport { FILTER_PROP, isFilterBtn } from './filter.button';\nimport {\n filterCoreFunctionsIndexedByType,\n filterNames,\n filterTypes,\n} from './filter.indexed';\n\nimport type {\n ColumnFilterConfig,\n FilterCollectionItem,\n FilterData,\n LogicFunction,\n MultiFilterItem,\n ShowData,\n} from './filter.types';\n\nimport { getCellDataParsed } from '../../utils';\nimport { TrimmedEntity } from '@store';\n\nexport * from './filter.types';\nexport * from './filter.indexed';\nexport * from './filter.button';\n\nexport const FILTER_TRIMMED_TYPE = 'filter';\nexport const FILTER_CONFIG_CHANGED_EVENT = 'filterconfigchanged';\nexport const FILTE_PANEL = 'revogr-filter-panel';\n\n/**\n * @typedef ColumnFilterConfig\n * @type {object}\n *\n * @property {MultiFilterItem|undefined} multiFilterItems - data for multi filtering with relation\n *\n * @property {Record<ColumnProp, FilterCollectionItem>|undefined} collection - preserved filter data, relation for filters will be applied as 'and'\n *\n * @property {string[]|undefined} include - filters to be included, if defined everything else out of scope will be ignored\n *\n * @property {Record<string, CustomFilter>|undefined} customFilters - hash map of {FilterType:CustomFilter}.\n *\n * @property {FilterLocalization|undefined} localization - translation for filter popup captions.\n *\n * @property {boolean|undefined} disableDynamicFiltering - disables dynamic filtering. A way to apply filters on Save only.\n */\n/**\n * @internal\n */\n\nexport class FilterPlugin extends BasePlugin {\n pop?: HTMLRevogrFilterPanelElement;\n filterCollection: Record<ColumnProp, FilterCollectionItem> = {};\n multiFilterItems: MultiFilterItem = {};\n\n /**\n * Filter types\n * @example\n * {\n * string: ['contains', 'beginswith'],\n * number: ['eqN', 'neqN', 'gt']\n * }\n */\n filterByType: Record<string, string[]> = { ...filterTypes };\n filterNameIndexByType: Record<string, string> = {\n ...filterNames,\n };\n filterFunctionsIndexedByType: Record<string, LogicFunction> = {\n ...filterCoreFunctionsIndexedByType,\n };\n\n filterProp = FILTER_PROP;\n\n extraHyperContent?: (data: ShowData) => VNode | VNode[];\n\n constructor(\n public revogrid: HTMLRevoGridElement,\n providers: PluginProviders,\n public config?: ColumnFilterConfig,\n ) {\n super(revogrid, providers);\n if (config) {\n this.initConfig(config);\n }\n\n const existingNodes = this.revogrid.registerVNode.filter(\n n => typeof n === 'object' && n.$tag$ !== FILTE_PANEL,\n );\n this.revogrid.registerVNode = [\n ...existingNodes,\n <revogr-filter-panel\n filterNames={this.filterNameIndexByType}\n filterEntities={this.filterFunctionsIndexedByType}\n filterCaptions={config?.localization?.captions}\n onFilterChange={e => this.onFilterChange(e.detail)}\n onResetChange={e => this.onFilterReset(e.detail)}\n disableDynamicFiltering={config?.disableDynamicFiltering}\n closeOnOutsideClick={config?.closeFilterPanelOnOutsideClick}\n ref={e => (this.pop = e)}\n >\n {' '}\n {this.extraContent()}\n </revogr-filter-panel>,\n ];\n\n const aftersourceset = async () => {\n const filterCollectionProps = Object.keys(this.filterCollection);\n if (filterCollectionProps.length > 0) {\n // handle old way of filtering by reworking FilterCollection to new MultiFilterItem\n filterCollectionProps.forEach((prop, index) => {\n if (!this.multiFilterItems[prop]) {\n this.multiFilterItems[prop] = [\n {\n id: index,\n type: this.filterCollection[prop].type,\n value: this.filterCollection[prop].value,\n relation: 'and',\n },\n ];\n }\n });\n }\n if (Object.keys(this.multiFilterItems).length === 0) {\n return;\n }\n await this.runFiltering(this.multiFilterItems);\n };\n this.addEventListener('headerclick', e => this.headerclick(e));\n this.addEventListener(\n FILTER_CONFIG_CHANGED_EVENT,\n ({ detail }: CustomEvent<ColumnFilterConfig | boolean>) => {\n if (\n !detail ||\n (typeof detail === 'object' &&\n (!detail.multiFilterItems ||\n !Object.keys(detail.multiFilterItems).length))\n ) {\n this.clearFiltering();\n return;\n }\n if (typeof detail === 'object') {\n this.initConfig(detail);\n }\n aftersourceset();\n },\n );\n this.addEventListener('aftersourceset', aftersourceset);\n this.addEventListener('filter', ({ detail }: CustomEvent) =>\n this.onFilterChange(detail),\n );\n }\n\n beforeshow(_: ShowData) {\n // used as hook for filter panel\n }\n\n extraContent(): any {\n return null;\n }\n\n initConfig(config: ColumnFilterConfig) {\n if (config.multiFilterItems) {\n this.multiFilterItems = { ...config.multiFilterItems };\n } else {\n this.multiFilterItems = {};\n }\n // Add custom filters\n if (config.customFilters) {\n for (let customFilterType in config.customFilters) {\n const cFilter = config.customFilters[customFilterType];\n if (!this.filterByType[cFilter.columnFilterType]) {\n this.filterByType[cFilter.columnFilterType] = [];\n }\n // add custom filter type\n this.filterByType[cFilter.columnFilterType].push(customFilterType);\n // add custom filter function\n this.filterFunctionsIndexedByType[customFilterType] = cFilter.func;\n // add custom filter name\n this.filterNameIndexByType[customFilterType] = cFilter.name;\n }\n }\n\n // Add filterProp if provided in config\n if (config.filterProp) {\n this.filterProp = config.filterProp;\n }\n\n /**\n * which filters has to be included/excluded\n * convenient way to exclude system filters\n */\n const cfgInlcude = config.include;\n if (cfgInlcude) {\n const filters: Record<string, string[]> = {};\n\n for (let t in this.filterByType) {\n // validate filters, if appropriate function present\n const newTypes = this.filterByType[t].filter(\n f => cfgInlcude.indexOf(f) > -1,\n );\n if (newTypes.length) {\n filters[t] = newTypes;\n }\n }\n // if any valid filters provided show them\n if (Object.keys(filters).length > 0) {\n this.filterByType = filters;\n }\n }\n\n if (config.collection) {\n const filtersWithFilterFunctionPresent = Object.entries(\n config.collection,\n ).filter(([, item]) => this.filterFunctionsIndexedByType[item.type]);\n this.filterCollection = Object.fromEntries(\n filtersWithFilterFunctionPresent,\n );\n } else {\n this.filterCollection = {};\n }\n\n if (config.localization) {\n if (config.localization.filterNames) {\n Object.entries(config.localization.filterNames).forEach(([k, v]) => {\n if (this.filterNameIndexByType[k] != void 0) {\n this.filterNameIndexByType[k] = v;\n }\n });\n }\n }\n }\n\n async headerclick(e: CustomEvent<ColumnRegular>) {\n const el = e.detail.originalEvent?.target as HTMLElement;\n if (!isFilterBtn(el)) {\n return;\n }\n e.preventDefault();\n if (!this.pop) {\n return;\n }\n\n // filter button clicked, open filter dialog\n const gridPos = this.revogrid.getBoundingClientRect();\n const buttonPos = el.getBoundingClientRect();\n const prop = e.detail.prop;\n\n const data: ShowData = {\n ...e.detail,\n ...this.filterCollection[prop],\n x: buttonPos.x - gridPos.x,\n y: buttonPos.y - gridPos.y + buttonPos.height,\n autoCorrect: true,\n filterTypes: this.getColumnFilter(e.detail.filter),\n filterItems: this.multiFilterItems,\n extraContent: this.extraHyperContent,\n };\n this.beforeshow?.(data);\n this.pop.show(data);\n }\n\n getColumnFilter(\n type?: boolean | string | string[],\n ): Record<string, string[]> {\n let filterType = 'string';\n if (!type) {\n return { [filterType]: this.filterByType[filterType] };\n }\n\n // if custom column filter\n if (this.isValidType(type)) {\n filterType = type;\n\n // if multiple filters applied\n } else if (typeof type === 'object' && type.length) {\n return type.reduce((r: Record<string, string[]>, multiType) => {\n if (this.isValidType(multiType)) {\n r[multiType] = this.filterByType[multiType];\n }\n return r;\n }, {});\n }\n return { [filterType]: this.filterByType[filterType] };\n }\n\n isValidType(type: any): type is string {\n return !!(typeof type === 'string' && this.filterByType[type]);\n }\n\n /**\n * Called on internal component change\n */\n async onFilterChange(filterItems: MultiFilterItem) {\n // store the filter items\n this.multiFilterItems = filterItems;\n\n // run the filtering when the items change\n this.runFiltering(this.multiFilterItems);\n }\n\n onFilterReset(prop?: ColumnProp) {\n delete this.multiFilterItems[prop ?? ''];\n this.onFilterChange(this.multiFilterItems);\n }\n\n /**\n * Triggers grid filtering\n */\n async doFiltering(\n collection: Record<ColumnProp, FilterCollectionItem>,\n source: DataType[],\n columns: ColumnRegular[],\n filterItems: MultiFilterItem,\n ) {\n const columnsToUpdate: ColumnRegular[] = [];\n\n /**\n * Loop through the columns and update the columns that need to be updated with the `hasFilter` property.\n */\n const columnByProp: Record<string, ColumnRegular> = {};\n columns.forEach(rgCol => {\n const column = { ...rgCol };\n const hasFilter = filterItems[column.prop];\n columnByProp[column.prop] = column;\n\n /**\n * If the column has a filter and it's not already marked as filtered, update the column.\n */\n if (column[this.filterProp] && !hasFilter) {\n delete column[this.filterProp];\n columnsToUpdate.push(column);\n }\n\n /**\n * If the column does not have a filter and it's marked as filtered, update the column.\n */\n\n if (!column[this.filterProp] && hasFilter) {\n columnsToUpdate.push(column);\n column[this.filterProp] = true;\n }\n });\n const itemsToTrim = this.getRowFilter(source, filterItems, columnByProp);\n // check is filter event prevented\n const { defaultPrevented, detail } = this.emit('beforefiltertrimmed', {\n collection,\n itemsToFilter: itemsToTrim,\n source,\n filterItems,\n });\n if (defaultPrevented) {\n return;\n }\n\n this.providers.data.setTrimmed({ [FILTER_TRIMMED_TYPE]: detail.itemsToFilter });\n\n // applies the hasFilter to the columns to show filter icon\n this.providers.column.updateColumns(columnsToUpdate);\n this.emit('afterfilterapply', {\n multiFilterItems: filterItems,\n source,\n collection,\n });\n }\n\n async clearFiltering() {\n this.multiFilterItems = {};\n await this.runFiltering(this.multiFilterItems);\n }\n\n async runFiltering(multiFilterItems: MultiFilterItem) {\n const collection: Record<ColumnProp, FilterCollectionItem> = {};\n\n // handle old filterCollection to return the first filter only (if any) from multiFilterItems\n const filterProps = Object.keys(multiFilterItems);\n\n for (const prop of filterProps) {\n // check if we have any filter for a column\n if (multiFilterItems[prop].length > 0) {\n const firstFilterItem = multiFilterItems[prop][0];\n collection[prop] = {\n type: firstFilterItem.type,\n value: firstFilterItem.value,\n };\n }\n }\n\n this.filterCollection = collection;\n const columns = this.providers.column.getColumns();\n // run the filtering on the main source only\n const source = this.providers.data.stores['rgRow'].store.get('source');\n\n const { defaultPrevented, detail } = this.emit('beforefilterapply', {\n collection: this.filterCollection,\n source,\n columns,\n filterItems: this.multiFilterItems,\n });\n if (defaultPrevented) {\n return;\n }\n this.doFiltering(\n detail.collection,\n detail.source,\n detail.columns,\n detail.filterItems,\n );\n }\n\n /**\n * Get trimmed rows based on filter\n */\n getRowFilter(\n rows: DataType[],\n filterItems: MultiFilterItem,\n columnByProp: Record<string, ColumnRegular>,\n ): TrimmedEntity {\n const propKeys = Object.keys(filterItems);\n\n const trimmed: TrimmedEntity = {};\n\n // each rows\n for (let rowIndex = 0; rowIndex < rows.length; rowIndex++) {\n // check filter by column properties\n for (const prop of propKeys) {\n // add to the list of removed/trimmed rows of filter condition is satisfied\n if (\n this.shouldTrimRow(\n filterItems[prop],\n prop,\n columnByProp[prop],\n rows[rowIndex],\n )\n ) {\n trimmed[rowIndex] = true;\n }\n } // end of for-of propKeys\n }\n return trimmed;\n }\n\n private shouldTrimRow(\n propFilters: FilterData[],\n prop: ColumnProp,\n column?: ColumnRegular,\n model: DataType = {},\n ) {\n // reset the count of satisfied filters\n let propFilterSatisfiedCount = 0;\n // reset the array of last filter results\n let lastFilterResults: boolean[] = [];\n\n // testing each filter for a prop\n for (const [filterIndex, filterData] of propFilters.entries()) {\n // the filter LogicFunction based on the type\n const filterFunc = this.filterFunctionsIndexedByType[filterData.type];\n\n // THE MAGIC OF FILTERING IS HERE\n // If there is no column but user wants to filter by a property\n const value = column ? getCellDataParsed(model, column) : model[prop];\n // OR relation\n if (filterData.relation === 'or') {\n // reset the array of last filter results\n lastFilterResults = [];\n // if the filter is satisfied, continue to the next filter\n if (filterFunc(value, filterData.value)) {\n continue;\n }\n // if the filter is not satisfied, count it\n propFilterSatisfiedCount++;\n\n // AND relation\n } else {\n // 'and' relation will need to know the next filter\n // so we save this current filter to include it in the next filter\n lastFilterResults.push(!filterFunc(value, filterData.value));\n\n if (isFinalAndFilter(filterIndex, propFilters)) {\n // let's just continue since for sure propFilterSatisfiedCount cannot be satisfied\n if (allAndConditionsSatisfied(lastFilterResults)) {\n // reset the array of last filter results\n lastFilterResults = [];\n continue;\n }\n\n // we need to add all of the lastFilterResults since we need to satisfy all\n propFilterSatisfiedCount += lastFilterResults.length;\n // reset the array of last filter results\n lastFilterResults = [];\n }\n }\n } // end of propFilters forEach\n return propFilterSatisfiedCount === propFilters.length;\n }\n}\n/**\n * Checks if the current filter is the final one in an AND sequence.\n * @param index - Current filter index in the list.\n * @param filters - Array of filters for the property.\n * @returns True if this is the last AND condition; false otherwise.\n */\nfunction isFinalAndFilter(index: number, filters: MultiFilterItem[string]): boolean {\n const nextFilter = filters[index + 1]; // Get the next filter in the list.\n // Return true if there's no next filter or if the next filter defined and is not part of the AND sequence.\n return !nextFilter || (!!nextFilter.relation && nextFilter.relation !== 'and');\n}\n\n/**\n * Determines if all conditions in an AND sequence are satisfied.\n * @param pendingResults - An array of results from the AND conditions.\n * @returns True if all conditions are satisfied; false otherwise.\n */\nfunction allAndConditionsSatisfied(pendingResults: boolean[]): boolean {\n // Check if there are any failed conditions in the pending results.\n return !pendingResults.includes(true);\n}\n","import baseGetTag from './_baseGetTag.js';\nimport isArray from './isArray.js';\nimport isObjectLike from './isObjectLike.js';\n\n/** `Object#toString` result references. */\nvar stringTag = '[object String]';\n\n/**\n * Checks if `value` is classified as a `String` primitive or object.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a string, else `false`.\n * @example\n *\n * _.isString('abc');\n * // => true\n *\n * _.isString(1);\n * // => false\n */\nfunction isString(value) {\n return typeof value == 'string' ||\n (!isArray(value) && isObjectLike(value) && baseGetTag(value) == stringTag);\n}\n\nexport default isString;\n","import baseProperty from './_baseProperty.js';\n\n/**\n * Gets the size of an ASCII `string`.\n *\n * @private\n * @param {string} string The string inspect.\n * @returns {number} Returns the string size.\n */\nvar asciiSize = baseProperty('length');\n\nexport default asciiSize;\n","/** Used to compose unicode character classes. */\nvar rsAstralRange = '\\\\ud800-\\\\udfff',\n rsComboMarksRange = '\\\\u0300-\\\\u036f',\n reComboHalfMarksRange = '\\\\ufe20-\\\\ufe2f',\n rsComboSymbolsRange = '\\\\u20d0-\\\\u20ff',\n rsComboRange = rsComboMarksRange + reComboHalfMarksRange + rsComboSymbolsRange,\n rsVarRange = '\\\\ufe0e\\\\ufe0f';\n\n/** Used to compose unicode capture groups. */\nvar rsZWJ = '\\\\u200d';\n\n/** Used to detect strings with [zero-width joiners or code points from the astral planes](http://eev.ee/blog/2015/09/12/dark-corners-of-unicode/). */\nvar reHasUnicode = RegExp('[' + rsZWJ + rsAstralRange + rsComboRange + rsVarRange + ']');\n\n/**\n * Checks if `string` contains Unicode symbols.\n *\n * @private\n * @param {string} string The string to inspect.\n * @returns {boolean} Returns `true` if a symbol is found, else `false`.\n */\nfunction hasUnicode(string) {\n return reHasUnicode.test(string);\n}\n\nexport default hasUnicode;\n","/** Used to compose unicode character classes. */\nvar rsAstralRange = '\\\\ud800-\\\\udfff',\n rsComboMarksRange = '\\\\u0300-\\\\u036f',\n reComboHalfMarksRange = '\\\\ufe20-\\\\ufe2f',\n rsComboSymbolsRange = '\\\\u20d0-\\\\u20ff',\n rsComboRange = rsComboMarksRange + reComboHalfMarksRange + rsComboSymbolsRange,\n rsVarRange = '\\\\ufe0e\\\\ufe0f';\n\n/** Used to compose unicode capture groups. */\nvar rsAstral = '[' + rsAstralRange + ']',\n rsCombo = '[' + rsComboRange + ']',\n rsFitz = '\\\\ud83c[\\\\udffb-\\\\udfff]',\n rsModifier = '(?:' + rsCombo + '|' + rsFitz + ')',\n rsNonAstral = '[^' + rsAstralRange + ']',\n rsRegional = '(?:\\\\ud83c[\\\\udde6-\\\\uddff]){2}',\n rsSurrPair = '[\\\\ud800-\\\\udbff][\\\\udc00-\\\\udfff]',\n rsZWJ = '\\\\u200d';\n\n/** Used to compose unicode regexes. */\nvar reOptMod = rsModifier + '?',\n rsOptVar = '[' + rsVarRange + ']?',\n rsOptJoin = '(?:' + rsZWJ + '(?:' + [rsNonAstral, rsRegional, rsSurrPair].join('|') + ')' + rsOptVar + reOptMod + ')*',\n rsSeq = rsOptVar + reOptMod + rsOptJoin,\n rsSymbol = '(?:' + [rsNonAstral + rsCombo + '?', rsCombo, rsRegional, rsSurrPair, rsAstral].join('|') + ')';\n\n/** Used to match [string symbols](https://mathiasbynens.be/notes/javascript-unicode). */\nvar reUnicode = RegExp(rsFitz + '(?=' + rsFitz + ')|' + rsSymbol + rsSeq, 'g');\n\n/**\n * Gets the size of a Unicode `string`.\n *\n * @private\n * @param {string} string The string inspect.\n * @returns {number} Returns the string size.\n */\nfunction unicodeSize(string) {\n var result = reUnicode.lastIndex = 0;\n while (reUnicode.test(string)) {\n ++result;\n }\n return result;\n}\n\nexport default unicodeSize;\n","import asciiSize from './_asciiSize.js';\nimport hasUnicode from './_hasUnicode.js';\nimport unicodeSize from './_unicodeSize.js';\n\n/**\n * Gets the number of symbols in `string`.\n *\n * @private\n * @param {string} string The string to inspect.\n * @returns {number} Returns the string size.\n */\nfunction stringSize(string) {\n return hasUnicode(string)\n ? unicodeSize(string)\n : asciiSize(string);\n}\n\nexport default stringSize;\n","import baseKeys from './_baseKeys.js';\nimport getTag from './_getTag.js';\nimport isArrayLike from './isArrayLike.js';\nimport isString from './isString.js';\nimport stringSize from './_stringSize.js';\n\n/** `Object#toString` result references. */\nvar mapTag = '[object Map]',\n setTag = '[object Set]';\n\n/**\n * Gets the size of `collection` by returning its length for array-like\n * values or the number of own enumerable string keyed properties for objects.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object|string} collection The collection to inspect.\n * @returns {number} Returns the collection size.\n * @example\n *\n * _.size([1, 2, 3]);\n * // => 3\n *\n * _.size({ 'a': 1, 'b': 2 });\n * // => 2\n *\n * _.size('pebbles');\n * // => 7\n */\nfunction size(collection) {\n if (collection == null) {\n return 0;\n }\n if (isArrayLike(collection)) {\n return isString(collection) ? stringSize(collection) : collection.length;\n }\n var tag = getTag(collection);\n if (tag == mapTag || tag == setTag) {\n return collection.size;\n }\n return baseKeys(collection).length;\n}\n\nexport default size;\n","import type { CellCompareFunc, ColumnProp, ColumnRegular, DataType, Order } from '@type';\nimport type { SortingOrderFunction } from './sorting.types';\nimport { isGrouping } from '../groupingRow/grouping.service';\nimport { getCellRaw } from '../../utils/column.utils';\n\nexport function sortIndexByItems(\n indexes: number[],\n source: DataType[],\n sortingFunc: SortingOrderFunction = {},\n): number[] {\n // if no sorting - return unsorted indexes\n if (Object.entries(sortingFunc).length === 0) {\n // Unsorted indexes\n return [...Array(indexes.length).keys()];\n }\n //\n /**\n * go through all indexes and align in new order\n * performs a multi-level sorting by applying multiple comparison functions to determine the order of the items based on different properties.\n */\n return indexes.sort((a, b) => {\n const itemA = source[a];\n const itemB = source[b];\n for (const [prop, cmp] of Object.entries(sortingFunc)) {\n if (isGrouping(itemA)) {\n if (itemA['__rvgr-prop'] !== prop) {\n return 0;\n }\n }\n if (isGrouping(itemB)) {\n if (itemB['__rvgr-prop'] !== prop) {\n return 0;\n }\n }\n /**\n * If the comparison function returns a non-zero value (sorted), it means that the items should be sorted based on the given property. In such a case, the function immediately returns the sorted value, indicating the order in which the items should be arranged.\n * If none of the comparison functions result in a non-zero value, indicating that the items are equal or should remain in the same order, the function eventually returns 0.\n */\n const sorted = cmp?.(prop, itemA, itemB);\n if (sorted) {\n return sorted;\n }\n }\n return 0;\n });\n}\n\nexport function defaultCellCompare(this: { column?: ColumnRegular }, prop: ColumnProp, a: DataType, b: DataType) {\n const aRaw = this.column ? getCellRaw(a, this.column) : a?.[prop];\n const bRaw = this.column ? getCellRaw(b, this.column) : b?.[prop];\n const av = typeof aRaw === 'number' ? aRaw : aRaw?.toString().toLowerCase();\n const bv = typeof bRaw === 'number' ? bRaw : bRaw?.toString().toLowerCase();\n\n if (av === bv) {\n return 0;\n }\n if (av > bv) {\n return 1;\n }\n return -1;\n}\n\nexport function descCellCompare(cmp: CellCompareFunc) {\n return (prop: ColumnProp, a: DataType, b: DataType): number => {\n return -1 * cmp(prop, a, b);\n };\n}\n\nexport function getNextOrder(currentOrder: Order): Order {\n switch (currentOrder) {\n case undefined:\n return 'asc';\n case 'asc':\n return 'desc';\n case 'desc':\n return undefined;\n }\n}\n\n\nexport function getComparer(column: Partial<ColumnRegular> | undefined, order: Order): CellCompareFunc | undefined {\n const cellCmp: CellCompareFunc =\n column?.cellCompare?.bind({ order }) || defaultCellCompare?.bind({ column, order });\n if (order == 'asc') {\n return cellCmp;\n }\n if (order == 'desc') {\n return descCellCompare(cellCmp);\n }\n return undefined;\n}\n","import size from 'lodash/size';\nimport debounce from 'lodash/debounce';\n\nimport { BasePlugin } from '../base.plugin';\nimport type {\n Order,\n ColumnRegular,\n DimensionRows,\n PluginProviders,\n} from '@type';\nimport type { SortingConfig, SortingOrder, SortingOrderFunction } from './sorting.types';\nimport { getColumnByProp } from '../../utils/column.utils';\nimport { columnTypes, rowTypes } from '@store';\nimport { getComparer, getNextOrder, sortIndexByItems } from './sorting.func';\n\nexport * from './sorting.types';\nexport * from './sorting.func';\nexport * from './sorting.sign';\n\n/**\n * Lifecycle\n * 1. @event `beforesorting` - Triggered when sorting just starts. Nothing has happened yet. This can be triggered from a column or from the source. If the type is from rows, the column will be undefined.\n * 2. @event `beforesourcesortingapply` - Triggered before the sorting data is applied to the data source. You can prevent this event, and the data will not be sorted.\n * 3. @event `beforesortingapply` - Triggered before the sorting data is applied to the data source. You can prevent this event, and the data will not be sorted. This event is only called from a column sorting click.\n * 4. @event `aftersortingapply` - Triggered after sorting has been applied and completed. This event occurs for both row and column sorting.\n *\n * Note: If you prevent an event, it will not proceed to the subsequent steps.\n */\n\nexport class SortingPlugin extends BasePlugin {\n // Current sorting order per column prop\n sorting?: SortingOrder;\n\n // Each column sorting function, multiple columns sorting supported\n sortingFunc?: SortingOrderFunction;\n /**\n * Delayed sorting promise\n */\n sortingPromise: (() => void) | null = null;\n\n /**\n * We need to sort only so often\n */\n postponeSort = debounce(\n (order?: SortingOrder, comparison?: SortingOrderFunction, ignoreViewportUpdate?: boolean) =>\n this.runSorting(order, comparison, ignoreViewportUpdate),\n 50,\n );\n\n constructor(\n public revogrid: HTMLRevoGridElement,\n providers: PluginProviders,\n config?: SortingConfig,\n ) {\n super(revogrid, providers);\n\n const setConfig = (cfg?: SortingConfig) => {\n if (cfg) {\n const sortingFunc: SortingOrderFunction = {};\n const order: SortingOrder = {};\n cfg.columns?.forEach(col => {\n sortingFunc[col.prop] = getComparer(col, col.order);\n order[col.prop] = col.order;\n });\n\n if (cfg.additive) {\n this.sorting = {\n ...this.sorting,\n ...order,\n };\n this.sortingFunc = {\n ...this.sortingFunc,\n ...sortingFunc,\n };\n } else {\n // // set sorting\n this.sorting = order;\n this.sortingFunc = sortingFunc;\n }\n }\n }\n\n setConfig(config);\n\n this.addEventListener('sortingconfigchanged', ({ detail }) => {\n config = detail;\n setConfig(detail);\n this.startSorting(this.sorting, this.sortingFunc);\n });\n\n this.addEventListener('beforeheaderrender', ({\n detail,\n }) => {\n const { data: column } = detail;\n if (column.sortable) {\n detail.data = {\n ...column,\n order: this.sorting?.[column.prop],\n };\n }\n });\n\n this.addEventListener('beforeanysource', ({\n detail: { type },\n }) => {\n // if sorting was provided - sort data\n if (!!this.sorting && this.sortingFunc) {\n const event = this.emit('beforesourcesortingapply', { type, sorting: this.sorting });\n if (event.defaultPrevented) {\n return;\n }\n this.startSorting(this.sorting, this.sortingFunc);\n }\n });\n this.addEventListener('aftercolumnsset', ({\n detail: { order },\n }) => {\n // if config provided - do nothing, read from config\n if (config) {\n return;\n }\n\n const columns = this.providers.column.getColumns();\n const sortingFunc: SortingOrderFunction = {};\n\n for (let prop in order) {\n const cmp = getComparer(\n getColumnByProp(columns, prop),\n order[prop],\n );\n sortingFunc[prop] = cmp;\n }\n\n // set sorting\n this.sorting = order;\n this.sortingFunc = order && sortingFunc;\n });\n this.addEventListener('beforeheaderclick', (e) => {\n if (e.defaultPrevented) {\n return;\n }\n\n if (!e.detail?.column?.sortable) {\n return;\n }\n\n this.headerclick(\n e.detail.column,\n e.detail?.originalEvent?.shiftKey,\n );\n });\n }\n\n /**\n * Entry point for sorting, waits for all delayes, registers jobs\n */\n startSorting(order?: SortingOrder, sortingFunc?: SortingOrderFunction, ignoreViewportUpdate?: boolean) {\n if (!this.sortingPromise) {\n // add job before render\n this.revogrid.jobsBeforeRender.push(\n new Promise<void>(resolve => {\n this.sortingPromise = resolve;\n }),\n );\n }\n this.postponeSort(order, sortingFunc, ignoreViewportUpdate);\n }\n\n\n /**\n * Apply sorting to data on header click\n * If additive - add to existing sorting, multiple columns can be sorted\n */\n headerclick(column: ColumnRegular, additive: boolean) {\n const columnProp = column.prop;\n let order: Order = getNextOrder(this.sorting?.[columnProp]);\n const beforeEvent = this.emit('beforesorting', { column, order, additive });\n if (beforeEvent.defaultPrevented) {\n return;\n }\n order = beforeEvent.detail.order;\n\n // apply sort data\n const beforeApplyEvent = this.emit('beforesortingapply', {\n column: beforeEvent.detail.column,\n order,\n additive,\n });\n if (beforeApplyEvent.defaultPrevented) {\n return;\n }\n const cmp = getComparer(beforeApplyEvent.detail.column, beforeApplyEvent.detail.order);\n\n if (beforeApplyEvent.detail.additive && this.sorting) {\n const sorting: SortingOrder = {};\n const sortingFunc: SortingOrderFunction = {};\n\n if (columnProp in sorting && size(sorting) > 1 && order === undefined) {\n delete sorting[columnProp];\n delete sortingFunc[columnProp];\n } else {\n sorting[columnProp] = order;\n sortingFunc[columnProp] = cmp;\n } \n\n this.sorting = {\n ...this.sorting,\n ...sorting,\n };\n \n // extend sorting function with new sorting for multiple columns sorting\n this.sortingFunc = {\n ...this.sortingFunc,\n ...sortingFunc,\n };\n } else {\n if (order) {\n // reset sorting\n this.sorting = { [columnProp]: order };\n this.sortingFunc = { [columnProp]: cmp };\n } else {\n delete this.sorting?.[columnProp];\n delete this.sortingFunc?.[columnProp];\n }\n }\n\n this.startSorting(this.sorting, this.sortingFunc);\n }\n\n runSorting(\n order?: SortingOrder,\n comparison?: SortingOrderFunction,\n ignoreViewportUpdate?: boolean\n ) {\n this.sort(order, comparison, undefined, ignoreViewportUpdate);\n this.sortingPromise?.();\n this.sortingPromise = null;\n }\n\n /**\n * Sort items by sorting function\n * @requires proxyItems applied to row store\n * @requires source applied to row store\n *\n * @param sorting - per column sorting\n * @param data - this.stores['rgRow'].store.get('source')\n */\n sort(\n sorting?: SortingOrder,\n sortingFunc?: SortingOrderFunction,\n types: DimensionRows[] = rowTypes,\n ignoreViewportUpdate = false\n ) {\n // if no sorting - reset\n if (!Object.keys(sorting || {}).length) {\n for (let type of types) {\n const storeService = this.providers.data.stores[type];\n // row data\n const source = storeService.store.get('source');\n // row indexes\n const proxyItems = storeService.store.get('proxyItems');\n // row indexes\n const newItemsOrder = Array.from({ length: source.length }, (_, i) => i); // recover indexes range(0, source.length)\n this.providers.dimension.updateSizesPositionByNewDataIndexes(type, newItemsOrder, proxyItems);\n storeService.setData({ proxyItems: newItemsOrder, source: [...source], });\n }\n } else {\n for (let type of types) {\n const storeService = this.providers.data.stores[type];\n // row data\n const source = storeService.store.get('source');\n // row indexes\n const proxyItems = storeService.store.get('proxyItems');\n\n const newItemsOrder = sortIndexByItems(\n [...proxyItems],\n source,\n sortingFunc,\n );\n \n // take row indexes before trim applied and proxy items\n const prevItems = storeService.store.get('items');\n storeService.setData({\n proxyItems: newItemsOrder,\n source: [...source],\n });\n // take currently visible row indexes\n const newItems = storeService.store.get('items');\n if (!ignoreViewportUpdate) {\n this.providers.dimension\n .updateSizesPositionByNewDataIndexes(type, newItems, prevItems);\n }\n }\n }\n // refresh columns to redraw column headers and show correct icon\n columnTypes.forEach((type) => {\n this.providers.column.dataSources[type].refresh();\n });\n this.emit('aftersortingapply');\n }\n}\n\n\n","import { DataType } from '@type';\nimport { PSEUDO_GROUP_ITEM_ID, PSEUDO_GROUP_ITEM_VALUE, GROUP_EXPANDED, GROUP_DEPTH } from './grouping.const';\nimport { isGrouping, getParsedGroup, isSameGroup } from './grouping.service';\n\n// provide collapse data\nexport function doCollapse(pIndex: number, source: DataType[]) {\n const model = source[pIndex];\n const collapseValue = model[PSEUDO_GROUP_ITEM_VALUE];\n const trimmed: Record<number, boolean> = {};\n let i = pIndex + 1;\n const total = source.length;\n while (i < total) {\n const currentModel = source[i];\n if (isGrouping(currentModel)) {\n const currentValue = currentModel[PSEUDO_GROUP_ITEM_VALUE];\n if (!currentValue.length || !currentValue.startsWith(collapseValue + ',')) {\n break;\n }\n // 不修改子分组的展开状态,保留它们原本的状态\n // currentModel[GROUP_EXPANDED] = false;\n }\n trimmed[i++] = true;\n }\n model[GROUP_EXPANDED] = false;\n return { trimmed };\n}\n\n/**\n *\n * @param pIndex - physical index\n * @param vIndex - virtual index, need to update item collection\n * @param source - data source\n * @param rowItemsIndexes - rgRow indexes\n */\nexport function doExpand(vIndex: number, source: DataType[], rowItemsIndexes: number[]) {\n const physicalIndex = rowItemsIndexes[vIndex];\n const model = source[physicalIndex];\n const currentGroup = getParsedGroup(model[PSEUDO_GROUP_ITEM_ID]);\n const trimmed: Record<number, boolean> = {};\n\n // no group found\n if (!currentGroup) {\n return { trimmed };\n }\n\n const groupItems: number[] = [];\n model[GROUP_EXPANDED] = true;\n let i = physicalIndex + 1;\n const total = source.length;\n let groupLevelOnly = 0;\n\n // go through all rows\n while (i < total) {\n const currentModel = source[i];\n const isGroup = isGrouping(currentModel);\n \n // group found\n if (isGroup) {\n if (!isSameGroup(currentGroup, model, currentModel)) {\n break;\n } else if (!groupLevelOnly) {\n // if get group first it's group only level\n groupLevelOnly = currentModel[GROUP_DEPTH];\n }\n }\n \n // level 0 or same depth (直接子分组)\n if (!groupLevelOnly || (isGroup && groupLevelOnly === currentModel[GROUP_DEPTH])) {\n trimmed[i] = false;\n groupItems.push(i);\n \n // 如果是子分组且已展开,递归展开其子项\n if (isGroup && currentModel[GROUP_EXPANDED]) {\n const subGroupValue = currentModel[PSEUDO_GROUP_ITEM_VALUE];\n let j = i + 1;\n \n // 展开这个子分组的所有内容\n while (j < total) {\n const subModel = source[j];\n const isSubGroup = isGrouping(subModel);\n \n if (isSubGroup) {\n const subValue = subModel[PSEUDO_GROUP_ITEM_VALUE];\n // 如果不再属于当前子分组,停止\n if (!subValue.startsWith(subGroupValue + ',')) {\n break;\n }\n // 子分组本身显示\n trimmed[j] = false;\n groupItems.push(j);\n \n // 如果这个嵌套子分组是折叠的,跳过它的子项\n if (!subModel[GROUP_EXPANDED]) {\n let k = j + 1;\n while (k < total) {\n const nestedModel = source[k];\n const nestedValue = isGrouping(nestedModel) ? nestedModel[PSEUDO_GROUP_ITEM_VALUE] : null;\n if (nestedValue && !nestedValue.startsWith(subValue + ',')) {\n break;\n }\n // 跳过这些项,不添加到 groupItems\n k++;\n }\n j = k - 1; // 调整索引\n }\n } else {\n // 数据行,显示\n trimmed[j] = false;\n groupItems.push(j);\n }\n j++;\n }\n \n // 跳过已处理的子项\n i = j - 1;\n }\n }\n \n i++;\n }\n \n const result: {\n trimmed: Record<number, boolean>;\n items?: number[];\n } = {\n trimmed,\n };\n if (groupItems.length) {\n const items = [...rowItemsIndexes];\n items.splice(vIndex + 1, 0, ...groupItems);\n result.items = items;\n }\n return result;\n}\n","import { gatherTrimmedItems, Trimmed, TrimmedEntity } from '@store';\n\nexport const TRIMMED_GROUPING = 'grouping';\n\n/**\n * Prepare trimming updated indexes for grouping\n * @param initiallyTrimed\n * @param firstLevelMap\n * @param secondLevelMap\n */\nexport function processDoubleConversionTrimmed(initiallyTrimed: Trimmed, firstLevelMap: Record<number, number>, secondLevelMap?: Record<number, number>) {\n const trimemedOptionsToUpgrade: Trimmed = {};\n /**\n * go through all groups except grouping\n */\n for (let type in initiallyTrimed) {\n if (type === TRIMMED_GROUPING) {\n continue;\n }\n const items = initiallyTrimed[type];\n const newItems: TrimmedEntity = {};\n\n for (let initialIndex in items) {\n /**\n * if item exists we find it in collection\n * we support 2 level of conversions\n */\n let newConversionIndex = firstLevelMap[initialIndex];\n if (secondLevelMap) {\n newConversionIndex = secondLevelMap[newConversionIndex];\n }\n\n /**\n * if item was trimmed previously\n * trimming makes sense to apply\n */\n if (items[initialIndex]) {\n newItems[newConversionIndex] = true;\n /**\n * If changes present apply changes to new source\n */\n if (newConversionIndex !== parseInt(initialIndex, 10)) {\n trimemedOptionsToUpgrade[type] = newItems;\n }\n }\n }\n }\n return trimemedOptionsToUpgrade;\n}\n\nexport function filterOutEmptyGroups(allTrimmedGroups: Trimmed, childrenByGroup: Record<number, number[]> = {}) {\n const trimmedGroup: TrimmedEntity = {};\n const allTrimmed = gatherTrimmedItems(allTrimmedGroups);\n // find is groups are filled\n for (let groupIndex in childrenByGroup) {\n const hasChidlren = childrenByGroup[groupIndex].filter(childIndex => !allTrimmed[childIndex]).length > 0;\n if (!hasChidlren) {\n trimmedGroup[groupIndex] = true;\n }\n }\n return trimmedGroup;\n}\n","import {\n getPhysical,\n setItems,\n columnTypes,\n type TrimmedEntity,\n type DSourceState,\n} from '@store';\nimport type {\n BeforeSaveDataDetails,\n ColumnRegular,\n DataType,\n DimensionRows,\n PluginProviders,\n} from '@type';\n\nimport { BasePlugin } from '../base.plugin';\nimport { FILTER_TRIMMED_TYPE } from '../filter/filter.plugin';\n\nimport type { Observable, ColumnCollection } from '../../utils';\nimport { SortingPlugin } from '../sorting/sorting.plugin';\n\nimport {\n GROUP_EXPAND_EVENT,\n GROUPING_ROW_TYPE,\n PSEUDO_GROUP_COLUMN,\n} from './grouping.const';\nimport { doExpand, doCollapse } from './grouping.row.expand.service';\nimport type {\n BeforeSourceSetEvent,\n ExpandedOptions,\n GroupingOptions,\n OnExpandEvent,\n} from './grouping.row.types';\nimport {\n gatherGrouping,\n getExpanded,\n getSource,\n isGrouping,\n isGroupingColumn,\n} from './grouping.service';\nimport {\n processDoubleConversionTrimmed,\n TRIMMED_GROUPING,\n} from './grouping.trimmed.service';\n\nexport * from './grouping.const';\nexport * from './grouping.row.expand.service';\nexport * from './grouping.row.types';\nexport * from './grouping.service';\nexport * from './grouping.row.renderer';\n\nexport class GroupingRowPlugin extends BasePlugin {\n private options: GroupingOptions | undefined;\n\n getStore(\n type: DimensionRows = GROUPING_ROW_TYPE,\n ): Observable<DSourceState<DataType, DimensionRows>> {\n return this.providers.data.stores[type].store;\n }\n\n constructor(\n revogrid: HTMLRevoGridElement,\n providers: PluginProviders,\n ) {\n super(revogrid, providers);\n }\n\n // befoce cell focus\n private onFocus(e: CustomEvent<BeforeSaveDataDetails>) {\n if (isGrouping(e.detail.model)) {\n e.preventDefault();\n }\n }\n\n // expand event triggered\n private async onExpand({ virtualIndex }: OnExpandEvent) {\n const { source } = getSource(\n this.getStore().get('source'),\n this.getStore().get('proxyItems'),\n );\n let newTrimmed = this.getStore().get('trimmed')[TRIMMED_GROUPING];\n\n let i = getPhysical(this.getStore(), virtualIndex);\n const isExpanded = getExpanded(source[i]);\n if (!isExpanded) {\n const { trimmed, items } = doExpand(\n virtualIndex,\n source,\n this.getStore().get('items'),\n );\n newTrimmed = { ...newTrimmed, ...trimmed };\n if (items) {\n setItems(this.getStore(), items);\n }\n } else {\n const { trimmed } = doCollapse(i, source);\n newTrimmed = { ...newTrimmed, ...trimmed };\n this.revogrid.clearFocus();\n }\n\n this.getStore().set('source', source);\n \n // 在调用 addTrimmed 之前,强制同步更新分组覆盖层,避免视觉延迟\n const groupingOverlay = this.revogrid.querySelector('revogr-grouping-overlay');\n if (groupingOverlay) {\n await (groupingOverlay as any).updateGroupRowsImmediate?.(true);\n }\n \n await this.revogrid.addTrimmed(newTrimmed, TRIMMED_GROUPING);\n }\n\n private setColumnGrouping(cols?: ColumnRegular[]) {\n // if 0 column as holder\n if (cols?.length) {\n cols[0][PSEUDO_GROUP_COLUMN] = true;\n return true;\n }\n return false;\n }\n\n private setColumns({ columns }: ColumnCollection) {\n for (let type of columnTypes) {\n if (this.setColumnGrouping(columns[type])) {\n break;\n }\n }\n }\n\n // evaluate drag between groups\n private onDrag(e: CustomEvent<{ from: number; to: number }>) {\n const { from, to } = e.detail;\n const isDown = to - from >= 0;\n const { source } = getSource(\n this.getStore().get('source'),\n this.getStore().get('proxyItems'),\n );\n const items = this.getStore().get('items');\n let i = isDown ? from : to;\n const end = isDown ? to : from;\n for (; i < end; i++) {\n const model = source[items[i]];\n const isGroup = isGrouping(model);\n if (isGroup) {\n e.preventDefault();\n return;\n }\n }\n }\n\n private beforeTrimmedApply(trimmed: Record<number, boolean>, type: string) {\n /** Before filter apply remove grouping filtering */\n if (type === FILTER_TRIMMED_TYPE) {\n const source = this.getStore().get('source');\n for (let index in trimmed) {\n if (trimmed[index] && isGrouping(source[index])) {\n trimmed[index] = false;\n }\n }\n }\n }\n\n private isSortingRunning() {\n const sortingPlugin = this.providers.plugins.getByClass(SortingPlugin);\n return !!sortingPlugin?.sortingPromise;\n }\n\n /**\n * Starts global source update with group clearing and applying new one\n * Initiated when need to reapply grouping\n */\n private doSourceUpdate(options?: ExpandedOptions) {\n /**\n * Get source without grouping\n * @param newOldIndexMap - provides us mapping with new indexes vs old indexes, we would use it for trimmed mapping\n */\n const store = this.getStore();\n const { source, prevExpanded, oldNewIndexes } = getSource(\n store.get('source'),\n store.get('proxyItems'),\n true,\n );\n const expanded: ExpandedOptions = {\n prevExpanded,\n ...options,\n };\n /**\n * Group again\n * @param oldNewIndexMap - provides us mapping with new indexes vs old indexes\n */\n const {\n sourceWithGroups,\n depth,\n trimmed,\n oldNewIndexMap,\n } = gatherGrouping(source, this.options?.props || [], expanded);\n\n const customRenderer = options?.groupLabelTemplate;\n\n // setup source\n this.providers.data.setData(\n sourceWithGroups,\n GROUPING_ROW_TYPE,\n this.revogrid.disableVirtualY,\n { depth, customRenderer },\n true,\n );\n this.updateTrimmed(\n trimmed,\n oldNewIndexes ?? {},\n oldNewIndexMap,\n );\n }\n\n /**\n * Apply grouping on data set\n * Clear grouping from source\n * If source came from other plugin\n */\n private onDataSet(data: BeforeSourceSetEvent) {\n let preservedExpanded: ExpandedOptions['prevExpanded'] = {};\n if (this.options?.preserveGroupingOnUpdate !== false) {\n let { prevExpanded } = getSource(\n this.getStore().get('source'),\n this.getStore().get('proxyItems'),\n true,\n );\n preservedExpanded = prevExpanded;\n }\n const source = data.source.filter(s => !isGrouping(s));\n const expanded: ExpandedOptions = {\n prevExpanded: preservedExpanded,\n ...(this.revogrid.grouping || {}),\n };\n const {\n sourceWithGroups,\n depth,\n trimmed,\n oldNewIndexMap,\n } = gatherGrouping(source, this.options?.props || [], expanded);\n \n const customRenderer = this.options?.groupLabelTemplate;\n \n data.source = sourceWithGroups;\n this.providers.data.setData(\n sourceWithGroups,\n GROUPING_ROW_TYPE,\n this.revogrid.disableVirtualY,\n { depth, customRenderer },\n true,\n );\n this.updateTrimmed(trimmed, oldNewIndexMap);\n }\n\n /**\n * External call to apply grouping. Called by revogrid when prop changed.\n */\n setGrouping(options: GroupingOptions) {\n // unsubscribe from all events when group applied\n this.clearSubscriptions();\n this.options = options;\n // clear props, no grouping exists\n if (!this.options?.props?.length) {\n this.clearGrouping();\n return;\n }\n // props exist and source initd\n const store = this.getStore();\n const { source } = getSource(\n store.get('source'),\n store.get('proxyItems'),\n );\n if (source.length) {\n this.doSourceUpdate({ ...options });\n }\n // props exist and columns initd\n for (let t of columnTypes) {\n if (this.setColumnGrouping(this.providers.column.getColumns(t))) {\n this.providers.column.refreshByType(t);\n break;\n }\n }\n\n // if has any grouping subscribe to events again\n /** if grouping present and new data source arrived */\n this.addEventListener('beforesourceset', ({ detail }) => {\n if (!(this.options?.props?.length && detail?.source?.length)) {\n return;\n }\n // if sorting is running don't apply grouping, wait for sorting, then it'll apply in @aftersortingapply\n if (this.isSortingRunning()) {\n return;\n }\n this.onDataSet(detail);\n });\n this.addEventListener('beforecolumnsset', ({ detail }) => {\n this.setColumns(detail);\n });\n\n /**\n * filter applied need to clear grouping and apply again\n * based on new results can be new grouping\n */\n this.addEventListener(\n 'beforetrimmed',\n ({ detail: { trimmed, trimmedType } }) =>\n this.beforeTrimmedApply(trimmed, trimmedType),\n );\n /**\n * sorting applied need to clear grouping and apply again\n * based on new results whole grouping order will changed\n */\n this.addEventListener('aftersortingapply', () => {\n if (!this.options?.props?.length) {\n return;\n }\n this.doSourceUpdate({ ...this.options });\n });\n\n /**\n * Apply logic for focus inside of grouping\n * We can't focus on grouping rows, navigation only inside of groups for now\n */\n this.addEventListener('beforecellfocus', e => this.onFocus(e));\n /**\n * Prevent rgRow drag outside the group\n */\n this.addEventListener('roworderchanged', e => this.onDrag(e));\n\n /**\n * When grouping expand icon was clicked\n */\n this.addEventListener(GROUP_EXPAND_EVENT, e => this.onExpand(e.detail));\n }\n\n // clear grouping\n clearGrouping() {\n // clear columns\n columnTypes.forEach(t => {\n const cols = this.providers.column.getColumns(t);\n let deleted = false;\n cols.forEach(c => {\n if (isGroupingColumn(c)) {\n delete c[PSEUDO_GROUP_COLUMN];\n deleted = true;\n }\n });\n // if column store had grouping clear and refresh\n if (deleted) {\n this.providers.column.refreshByType(t);\n }\n });\n // clear rows\n const { source, oldNewIndexes } = getSource(\n this.getStore().get('source'),\n this.getStore().get('proxyItems'),\n true,\n );\n this.providers.data.setData(\n source,\n GROUPING_ROW_TYPE,\n this.revogrid.disableVirtualY,\n undefined,\n true,\n );\n this.updateTrimmed(undefined, undefined, oldNewIndexes);\n }\n\n private updateTrimmed(\n trimmedGroup: TrimmedEntity = {},\n firstLevelMap: Record<number, number> = {},\n secondLevelMap?: Record<number, number>,\n ) {\n // map previously trimmed data\n const trimemedOptionsToUpgrade = processDoubleConversionTrimmed(\n this.getStore().get('trimmed'),\n firstLevelMap,\n secondLevelMap,\n );\n for (let type in trimemedOptionsToUpgrade) {\n this.revogrid.addTrimmed(trimemedOptionsToUpgrade[type], type);\n }\n\n // const emptyGroups = this.filterOutEmptyGroups(trimemedOptionsToUpgrade, childrenByGroup);\n\n // setup trimmed data for grouping\n this.revogrid.addTrimmed({ ...trimmedGroup }, TRIMMED_GROUPING);\n }\n}\n","const COLUMN_DRAG_CLASS = 'column-drag-start';\n\nexport class ColumnOrderHandler {\n private element?: HTMLDivElement;\n private autoscrollEl?: HTMLElement;\n private offset = 0;\n\n renderAutoscroll(_: MouseEvent, parent: HTMLElement | null) {\n if (!parent) {\n return;\n }\n this.autoscrollEl = document.createElement('div');\n this.autoscrollEl.classList.add('drag-auto-scroll-y');\n parent.appendChild(this.autoscrollEl);\n }\n\n autoscroll(pos: number, dataContainerSize: number, direction = 'translateX') {\n if (!this.autoscrollEl) {\n return;\n }\n const helperOffset = 10;\n // calculate current y position inside of the grid active holder\n // 3 - size of element + border\n const maxScroll = Math.min(pos + helperOffset, dataContainerSize - 3);\n\n this.autoscrollEl.style.transform = `${direction}(${maxScroll}px)`;\n this.autoscrollEl.scrollIntoView({\n block: 'nearest',\n inline: 'nearest',\n });\n }\n\n start(e: MouseEvent, { dataEl, gridRect, scrollEl, gridEl }: {\n dataEl: HTMLElement;\n gridRect: DOMRect;\n scrollEl: Element;\n gridEl: Element;\n }, dir: 'top' | 'left' = 'left') {\n gridEl.classList.add(COLUMN_DRAG_CLASS);\n const scrollContainerRect = scrollEl.getBoundingClientRect();\n if (scrollContainerRect) {\n this.offset = scrollContainerRect[dir] - gridRect[dir];\n }\n this.renderAutoscroll(e, dataEl);\n }\n\n stop(gridEl: Element) {\n gridEl.classList.remove(COLUMN_DRAG_CLASS);\n if (this.element) {\n this.element.hidden = true;\n }\n this.offset = 0;\n this.autoscrollEl?.remove();\n this.autoscrollEl = undefined;\n }\n\n showHandler(pos: number, size: number, direction = 'translateX') {\n if (!this.element) {\n return;\n }\n // do not allow overcross top of the scrollable area, header excluded\n if (this.offset) {\n pos = Math.max(pos, this.offset);\n }\n // can not be bigger then grid end\n pos = Math.min(pos, size);\n this.element.style.transform = `${direction}(${pos}px)`;\n this.element.hidden = false;\n }\n\n render() {\n const el = this.element = document.createElement('div');\n el.classList.add('drag-position-y');\n el.hidden = true;\n return el;\n }\n}\n","/**\n * Plugin for column manual move\n */\nimport debounce from 'lodash/debounce';\nimport each from 'lodash/each';\nimport { getItemByPosition } from '@store';\nimport { BasePlugin } from '../base.plugin';\nimport { ColumnOrderHandler } from './order-column.handler';\nimport { dispatch } from '../dispatcher';\nimport type { ColumnPropProp, DimensionSettingsState, PositionItem, DimensionCols, MultiDimensionType, PluginProviders, DimensionColPin } from '@type';\nimport { ON_COLUMN_CLICK } from '../../components/header/header-cell-renderer';\nimport { isColGrouping } from '../../utils/column.utils';\n\nconst COLUMN_CLICK = ON_COLUMN_CLICK;\nconst MOVE = 'columndragmousemove';\nconst DRAG_END = 'columndragend';\nconst BEFORE_DRAG_END = 'beforecolumndragend';\n\n// use this event subscription to drop D&D for particular columns\nconst DRAG_START = 'columndragstart';\n\nexport type DragStartEventDetails = {\n event: MouseEvent;\n data: ColumnPropProp;\n};\n\ntype StaticData = {\n startPos: number;\n startItem: PositionItem;\n pin?: DimensionColPin;\n dataEl: HTMLElement;\n scrollEl: Element;\n gridEl: HTMLElement;\n cols: DimensionSettingsState;\n};\n\ntype LocalSubscriptions = Record<string, LocalSubscription>;\ntype LocalSubscription = {\n target: Element | Document;\n callback(...params: any[]): void;\n};\nexport type ColumnDragEventData = {\n elRect: DOMRect;\n gridRect: DOMRect;\n scrollOffset: number;\n type: DimensionCols;\n};\nexport class ColumnMovePlugin extends BasePlugin {\n protected moveFunc = debounce((e: MouseEvent) => this.doMove(e), 5);\n protected staticDragData: StaticData | null = null;\n protected dragData: ColumnDragEventData | null = null;\n readonly orderUi: ColumnOrderHandler;\n readonly localSubscriptions: LocalSubscriptions = {};\n\n constructor(revogrid: HTMLRevoGridElement, providers: PluginProviders) {\n super(revogrid, providers);\n this.orderUi = new ColumnOrderHandler();\n revogrid.appendChild(this.orderUi.render());\n revogrid.classList.add('column-draggable');\n\n // Register events\n this.localSubscriptions['mouseleave'] = {\n target: document,\n callback: (e: MouseEvent) => this.onMouseOut(e),\n };\n this.localSubscriptions['mouseup'] = {\n target: document,\n callback: (e: MouseEvent) => this.onMouseUp(e),\n };\n\n this.localSubscriptions['mousemove'] = {\n target: document,\n callback: (e: MouseEvent) => this.move(e),\n };\n\n this.addEventListener(COLUMN_CLICK, ({ detail }) => this.dragStart(detail));\n }\n\n dragStart({ event, data }: DragStartEventDetails) {\n if (event.defaultPrevented) {\n return;\n }\n const { defaultPrevented } = dispatch(this.revogrid, DRAG_START, data);\n // check if allowed to drag particulat column\n if (defaultPrevented) {\n return;\n }\n this.clearOrder();\n const { mouseleave, mouseup, mousemove } = this.localSubscriptions;\n mouseleave.target.addEventListener('mouseleave', mouseleave.callback);\n mouseup.target.addEventListener('mouseup', mouseup.callback);\n\n const dataEl = (event.target as HTMLElement).closest('revogr-header');\n const scrollEl = (event.target as HTMLElement).closest('revogr-viewport-scroll');\n if (!dataEl || !scrollEl) {\n return;\n }\n\n // no grouping drag and no row header column drag\n if (isColGrouping(data) || data.providers.type === 'rowHeaders') {\n return;\n }\n\n const cols = this.getDimension(data.pin || 'rgCol');\n const gridRect = this.revogrid.getBoundingClientRect();\n const elRect = dataEl.getBoundingClientRect();\n const startItem = getItemByPosition(\n cols,\n getLeftRelative(event.x, gridRect.left, elRect.left - gridRect.left));\n \n this.staticDragData = {\n startPos: event.x,\n startItem,\n pin: data.pin,\n dataEl,\n scrollEl,\n gridEl: this.revogrid,\n cols,\n };\n this.dragData = this.getData(this.staticDragData);\n mousemove.target.addEventListener('mousemove', mousemove.callback);\n this.orderUi.start(event, {\n ...this.dragData,\n ...this.staticDragData,\n });\n }\n\n doMove(e: MouseEvent) {\n if (!this.staticDragData) {\n return;\n }\n\n const dragData = (this.dragData = this.getData(this.staticDragData));\n if (!dragData) {\n return;\n }\n const start = this.staticDragData.startPos;\n if (Math.abs(start - e.x) > 10) {\n const x = getLeftRelative(e.x, this.dragData.gridRect.left, this.dragData.scrollOffset);\n const rgCol = getItemByPosition(this.staticDragData.cols, x);\n this.orderUi.autoscroll(x, dragData.elRect.width);\n\n // prevent position change if out of bounds\n if (rgCol.itemIndex >= this.staticDragData.cols.count) {\n return;\n }\n this.orderUi.showHandler(\n rgCol.end + dragData.scrollOffset,\n dragData.gridRect.width\n );\n }\n }\n\n move(e: MouseEvent) {\n dispatch(this.revogrid, MOVE, e);\n // then do move\n this.moveFunc(e);\n }\n onMouseOut(_: MouseEvent) {\n this.clearOrder();\n }\n onMouseUp(e: MouseEvent) {\n // apply new positions\n if (this.dragData && this.staticDragData) {\n let relativePos = getLeftRelative(e.x, this.dragData.gridRect.left, this.dragData.scrollOffset);\n if (relativePos < 0) {\n relativePos = 0;\n }\n const newPosition = getItemByPosition(this.staticDragData.cols, relativePos);\n\n const store = this.providers.column.stores[this.dragData.type].store;\n const newItems = [...store.get('items')];\n\n // prevent position change if needed\n const { defaultPrevented: stopDrag } = dispatch(this.revogrid, BEFORE_DRAG_END, {\n ...this.staticDragData,\n startPosition: this.staticDragData.startItem,\n newPosition,\n newItem: store.get('source')[newItems[this.staticDragData.startItem.itemIndex]]\n });\n if (!stopDrag) {\n const prevItems = [...newItems];\n // todo: if move item out of group remove item from group\n const toMove = newItems.splice(this.staticDragData.startItem.itemIndex, 1);\n newItems.splice(newPosition.itemIndex, 0, ...toMove);\n store.set('items', newItems);\n this.providers.dimension.updateSizesPositionByNewDataIndexes(this.dragData.type, newItems, prevItems);\n }\n dispatch(this.revogrid, DRAG_END, this.dragData);\n }\n this.clearOrder();\n }\n\n protected clearLocalSubscriptions() {\n each(this.localSubscriptions, ({ target, callback }, key) => target.removeEventListener(key, callback));\n }\n\n clearOrder() {\n this.staticDragData = null;\n this.dragData = null;\n this.clearLocalSubscriptions();\n this.orderUi.stop(this.revogrid);\n }\n /**\n * Clearing subscription\n */\n clearSubscriptions() {\n super.clearSubscriptions();\n this.clearLocalSubscriptions();\n }\n\n protected getData({\n gridEl,\n dataEl,\n pin,\n }: StaticData): ColumnDragEventData {\n const gridRect = gridEl.getBoundingClientRect();\n const elRect = dataEl.getBoundingClientRect();\n const scrollOffset = elRect.left - gridRect.left;\n return {\n elRect,\n gridRect,\n type: pin || 'rgCol',\n scrollOffset,\n };\n }\n protected getDimension(type: MultiDimensionType) {\n return this.providers.dimension.stores[type].getCurrentState();\n }\n}\n\nexport function getLeftRelative(\n absoluteX: number,\n gridPos: number,\n offset: number\n): number {\n return absoluteX - gridPos - offset;\n}\n","/**\n * 列管理插件\n * 实现表格列的隐藏、显示、冻结、插入、删除等功能\n */\nimport { BasePlugin } from './base.plugin';\nimport type { PluginProviders, ColumnRegular, DimensionCols, ColumnGrouping } from '@type';\nimport { ColumnStretchPlugin } from './column-stretch.plugin';\nimport { convertCollectionToColumns, getStretchColumnOptions, mergeAdjacentGroups } from '../utils/column.utils';\n\n// 冻结类型\ntype PinType = 'colPinStart' | 'colPinEnd' | undefined;\n\n/**\n * 深拷贝列配置(保留函数属性)\n */\nfunction deepCloneColumns(cols: ColumnRegular[]): ColumnRegular[] {\n return cols.map(col => {\n const colAny = col as any;\n if (colAny.children) {\n return {\n ...col,\n children: deepCloneColumns(colAny.children),\n } as ColumnRegular;\n }\n return { ...col } as ColumnRegular;\n });\n}\n\nexport interface ColumnManageConfig {\n /** 初始隐藏的列 */\n hiddenColumns?: string | number | (string | number)[];\n /** 拉伸列的 prop(该列宽度不保留,让 ColumnStretchPlugin 重新计算) */\n stretchColumn?: string;\n /** 列隐藏变化回调 */\n onHiddenChange?: (hiddenProps: string[], changedProps?: string[]) => void;\n /** 列冻结变化回调 */\n onPinChange?: (prop: string, pin: PinType) => void;\n /** 导入列配置完成回调(渲染完成后触发) */\n onImportComplete?: (config: ColumnConfigExport) => void;\n}\n\n/** 单列配置导出项(精简版) */\nexport interface ColumnConfigItem {\n /** 列的 prop */\n prop: string;\n /** 列宽度 */\n size?: number;\n /** 冻结位置 */\n pin?: 'colPinStart' | 'colPinEnd';\n}\n\n/** 分组列配置 */\nexport interface ColumnGroupConfigItem {\n /** 分组名称 */\n name: string;\n /** 冻结位置 */\n pin?: 'colPinStart' | 'colPinEnd';\n /** 子列 */\n children: ColumnConfigItem[];\n}\n\n/** 列配置导出数据 */\nexport type ColumnConfigExport = (ColumnConfigItem | ColumnGroupConfigItem)[];\n\nexport class ColumnManagePlugin extends BasePlugin {\n private config: ColumnManageConfig;\n private hiddenProps: Set<string> = new Set();\n private originalColumns: ColumnRegular[] | null = null;\n private uniqueId: any = undefined;\n\n constructor(\n revogrid: HTMLRevoGridElement,\n providers: PluginProviders,\n config?: ColumnManageConfig,\n ) {\n super(revogrid, providers);\n \n // 优先使用传入的 config,否则从 additionalData 读取\n const additionalData = (revogrid as any).additionalData || {};\n this.config = config || additionalData.columnManage || {};\n\n this.autoDetectHiddenColumns(additionalData.allColumns);\n }\n\n /**\n * 获取当前保存的 uniqueId\n */\n getUniqueId(): any {\n return this.uniqueId;\n }\n\n /**\n * 自动检测隐藏的列(通过对比 allColumns 和当前 columns)\n */\n private autoDetectHiddenColumns(allColumns: ColumnRegular[]): void {\n // 获取当前可见列的 prop 集合\n const visibleProps = new Set<string | number>();\n const collectVisibleProps = (cols: ColumnRegular[]) => {\n cols.forEach(col => {\n const colAny = col as any;\n if (colAny.children) {\n collectVisibleProps(colAny.children);\n } else if (col.prop !== undefined) {\n visibleProps.add(col.prop);\n }\n });\n };\n collectVisibleProps(this.revogrid.columns as ColumnRegular[]);\n\n // 找出 allColumns 中不在 visibleProps 中的列\n allColumns.forEach(col => {\n if (col.prop !== undefined && !visibleProps.has(col.prop)) {\n this.hiddenProps.add(String(col.prop));\n }\n });\n\n }\n\n\n // ==================== 隐藏/显示列 ====================\n\n /**\n * 隐藏列\n * 逻辑:\n * 准备: 当前列配置\n * 1. 遍历要隐藏的列\n * 2. 查找列的位置\n * - 是分组下的列: 从分组中移除该列,如果分组为空则删除分组\n * - 是普通列: 从列数组中移除该列\n * 3. 标记列为隐藏\n */\n hideColumns(columns: string | number | (string | number)[]): void {\n const props = this.normalizeColumnConfig(columns);\n \n // 准备:获取当前列配置\n const stretchPlugin = this.providers.plugins.getByClass(ColumnStretchPlugin);\n const options = getStretchColumnOptions(this.providers, stretchPlugin);\n const currentColumns = convertCollectionToColumns(this.providers, options);\n\n // 遍历要隐藏的列\n props.forEach(prop => {\n // 查找列的位置和分组信息\n let found = false;\n \n for (let i = currentColumns.length - 1; i >= 0; i--) {\n const col = currentColumns[i] as any;\n \n if (col.children) {\n // 当前是分组\n const childIdx = col.children.findIndex((child: ColumnRegular) => child.prop === prop);\n if (childIdx !== -1) {\n // 从分组中移除该列\n col.children.splice(childIdx, 1);\n \n // 如果分组为空,删除分组\n if (col.children.length === 0) {\n currentColumns.splice(i, 1);\n }\n \n found = true;\n break;\n }\n } else if (col.prop === prop) {\n // 是普通列,从列数组中移除\n currentColumns.splice(i, 1);\n found = true;\n break;\n }\n }\n \n if (found) {\n // 标记列为隐藏\n this.hiddenProps.add(prop);\n }\n });\n\n // 更新列配置\n this.revogrid.columns = [...currentColumns];\n \n // 触发隐藏变化回调\n this.config.onHiddenChange?.(this.getHiddenColumns(), props);\n }\n\n /**\n * 获取当前隐藏的列\n */\n getHiddenColumns(): string[] {\n return Array.from(this.hiddenProps);\n }\n\n /**\n * 检查列是否隐藏\n */\n isColumnHidden(prop: string): boolean {\n return this.hiddenProps.has(prop);\n }\n\n // ==================== 冻结列 ====================\n\n /**\n * 设置列冻结\n * @param prop 列的 prop\n * @param pin 冻结类型:'colPinStart' 左冻结,'colPinEnd' 右冻结,undefined 取消冻结\n * 冻结逻辑:\n * pin值为:\n * - 'colPinStart': 列冻结到左侧,放到左侧冻结的最后一个\n * - 'colPinEnd': 列冻结到右侧,放到右侧冻结的第一个\n * - undefined: 取消冻结。如果之前是左侧冻结,那就放在未冻结的第一个;如果之前是右侧冻结,那就放在未冻结的最后一个\n */\n setColumnPin(prop: string, pin: PinType): boolean {\n // 准备:获取当前列配置\n const stretchPlugin = this.providers.plugins.getByClass(ColumnStretchPlugin);\n const options = getStretchColumnOptions(this.providers, stretchPlugin);\n const columns = convertCollectionToColumns(this.providers, options);\n\n // 查找列的位置和分组信息\n const { groupIndex: columnGroupIndex, childIndex: columnChildIndex, group: columnGroup, columnData } = this.findColumnInColumns(columns, prop);\n\n if (!columnData) {\n console.warn(`[ColumnManagePlugin] 找不到列 \"${prop}\"`);\n return false;\n }\n\n // 获取当前列的冻结状态(从 columns 中获取)\n const currentPin = (columnData as any).pin;\n \n // 如果冻结状态没有变化,直接返回\n if (currentPin === pin) {\n return true;\n }\n\n // 如果是分组中的子列,需要特殊处理\n if (columnGroup && columnChildIndex !== -1) {\n const groupName = columnGroup.name;\n \n // 从编组中移除该列\n const removed = columnGroup.children.splice(columnChildIndex, 1)[0];\n \n // 如果编组中没有列了,删除编组\n if (columnGroup.children.length === 0) {\n columns.splice(columnGroupIndex, 1);\n }\n \n // 设置列的 pin 状态\n if (pin) {\n (removed as any).pin = pin;\n } else {\n delete (removed as any).pin;\n }\n \n // 找到插入位置(传入 currentPin 用于判断取消冻结时的位置)\n const insertIndex = this.findInsertPositionForPinInColumns(columns, pin, currentPin);\n \n // 创建新编组,插入到目标位置\n const newGroup: any = {\n name: groupName,\n children: [removed],\n };\n if (pin) {\n newGroup.pin = pin;\n }\n columns.splice(insertIndex, 0, newGroup);\n } else {\n // 移除单个列\n const removed = columns.splice(columnGroupIndex, 1)[0];\n\n // 设置新的 pin 状态\n if (pin) {\n (removed as any).pin = pin;\n } else {\n delete (removed as any).pin;\n }\n\n // 找到插入位置(传入 currentPin 用于判断取消冻结时的位置)\n const insertIndex = this.findInsertPositionForPinInColumns(columns, pin, currentPin);\n \n // 插入到新位置\n columns.splice(insertIndex, 0, removed);\n }\n\n // 合并相邻的同名同pin编组\n mergeAdjacentGroups(columns);\n\n // 更新列配置\n this.revogrid.columns = [...columns];\n this.config.onPinChange?.(prop, pin);\n return true;\n }\n\n /**\n * 左冻结列\n */\n pinColumnLeft(prop: string): boolean {\n return this.setColumnPin(prop, 'colPinStart');\n }\n\n /**\n * 右冻结列\n */\n pinColumnRight(prop: string): boolean {\n return this.setColumnPin(prop, 'colPinEnd');\n }\n\n /**\n * 取消列冻结\n */\n unpinColumn(prop: string): boolean {\n return this.setColumnPin(prop, undefined);\n }\n\n /**\n * 获取列的冻结状态\n */\n getColumnPin(prop: string): PinType {\n const cols = this.originalColumns || (this.revogrid.columns as ColumnRegular[]);\n if (!cols) return undefined;\n\n const col = this.findColumnByProp(cols, prop);\n return col ? (col as any).pin : undefined;\n }\n\n /**\n * 检查列是否冻结\n */\n isColumnPinned(prop: string): boolean {\n return !!this.getColumnPin(prop);\n }\n\n\n // ==================== 位置调整 ====================\n\n /**\n * 将隐藏的列显示在指定列的左侧或右侧\n * 逻辑:\n * 准备: additionalData.allColumns、当前是否分组、当前列所属分组数据、目标列数据\n * 1. 是否分组下的列\n * - 是: 获取列在分组下的索引,根据 position 和索引插入目标列数据\n * - 否: 根据 column 获取索引,再根据 position 和索引插入目标列数据\n * 2. 目标列数据的pin继承当前列的pin\n */\n showColumnAt(\n column: string,\n target: string,\n position: 'before' | 'after' = 'after',\n ): boolean {\n // 验证列是否隐藏\n if (!this.hiddenProps.has(column)) {\n console.warn(`[ColumnManagePlugin] 列 \"${column}\" 未被隐藏`);\n return false;\n }\n\n // 准备:获取 allColumns\n const additionalData = (this.revogrid as any).additionalData || {};\n const allColumns = additionalData.allColumns;\n if (!allColumns || !Array.isArray(allColumns)) {\n console.warn('[ColumnManagePlugin] 找不到 allColumns');\n return false;\n }\n\n // 准备:获取目标列数据(要显示的列)\n const targetColumnData = allColumns.find((col: ColumnRegular) => col.prop === column);\n if (!targetColumnData) {\n console.warn(`[ColumnManagePlugin] 在 allColumns 中找不到列 \"${column}\"`);\n return false;\n }\n\n // 准备:获取当前列配置\n const stretchPlugin = this.providers.plugins.getByClass(ColumnStretchPlugin);\n const options = getStretchColumnOptions(this.providers, stretchPlugin);\n const columns = convertCollectionToColumns(this.providers, options);\n\n // 准备:查找当前列(target)的位置和分组信息\n const { groupIndex: targetGroupIndex, childIndex: targetChildIndex, group: targetGroup, columnData: currentColumn } = this.findColumnInColumns(columns, target);\n\n if (!currentColumn) {\n console.warn(`[ColumnManagePlugin] 找不到目标列 \"${target}\"`);\n return false;\n }\n\n // 创建要插入的列数据(继承当前列的 pin)\n const insertColumn = { ...targetColumnData };\n if (currentColumn.pin) {\n (insertColumn as any).pin = currentColumn.pin;\n } else {\n delete (insertColumn as any).pin;\n }\n\n // 1. 判断是否分组下的列\n if (targetGroup && targetChildIndex !== -1) {\n // 是:获取列在分组下的索引,根据 position 和索引插入目标列数据\n const insertChildIndex = position === 'before' ? targetChildIndex : targetChildIndex + 1;\n targetGroup.children.splice(insertChildIndex, 0, insertColumn);\n } else {\n // 否:根据 column 获取索引,再根据 position 和索引插入目标列数据\n const insertIndex = position === 'before' ? targetGroupIndex : targetGroupIndex + 1;\n columns.splice(insertIndex, 0, insertColumn);\n }\n\n // 更新列配置\n this.revogrid.columns = [...columns];\n this.hiddenProps.delete(column);\n \n // 触发隐藏变化回调\n this.config.onHiddenChange?.(this.getHiddenColumns(), [column]);\n\n return true;\n }\n\n /**\n * 批量将隐藏的列显示在指定列的左侧或右侧\n */\n showColumnsAt(\n columns: string[],\n target: string,\n position: 'before' | 'after' = 'after',\n ): boolean {\n const orderedColumns = position === 'after' ? [...columns].reverse() : columns;\n let success = true;\n for (const col of orderedColumns) {\n if (!this.showColumnAt(col, target, position)) {\n success = false;\n }\n }\n return success;\n }\n\n /**\n * 替换列:将可见列隐藏,同时将隐藏列显示在可见列的位置\n * @param hiddenColumn 当前隐藏的列(要显示)\n * @param visibleColumn 当前可见的列(要隐藏)\n * 逻辑:\n * 准备: additionalData.allColumns、当前列配置、可见列位置和分组信息、隐藏列数据\n * 1. 查找可见列的位置\n * - 是分组下的列: 获取分组和子列索引,替换该位置的列\n * - 是普通列: 获取列索引,替换该位置的列\n * 2. 替换列数据的pin和size继承可见列的pin和size\n * 3. 将可见列标记为隐藏\n */\n replaceColumn(hiddenColumn: string, visibleColumn: string): boolean {\n // 验证隐藏列状态\n if (!this.hiddenProps.has(hiddenColumn)) {\n console.warn(`[ColumnManagePlugin] 列 \"${hiddenColumn}\" 未被隐藏`);\n return false;\n }\n\n // 验证可见列状态\n if (this.hiddenProps.has(visibleColumn)) {\n console.warn(`[ColumnManagePlugin] 列 \"${visibleColumn}\" 已被隐藏`);\n return false;\n }\n\n // 准备:获取 allColumns\n const additionalData = (this.revogrid as any).additionalData || {};\n const allColumns = additionalData.allColumns;\n if (!allColumns || !Array.isArray(allColumns)) {\n console.warn('[ColumnManagePlugin] 找不到 allColumns');\n return false;\n }\n\n // 准备:获取隐藏列数据(要显示的列)\n const hiddenColumnData = allColumns.find((col: ColumnRegular) => col.prop === hiddenColumn);\n if (!hiddenColumnData) {\n console.warn(`[ColumnManagePlugin] 在 allColumns 中找不到列 \"${hiddenColumn}\"`);\n return false;\n }\n\n // 准备:获取当前列配置\n const stretchPlugin = this.providers.plugins.getByClass(ColumnStretchPlugin);\n const options = getStretchColumnOptions(this.providers, stretchPlugin);\n const columns = convertCollectionToColumns(this.providers, options);\n\n // 准备:查找可见列的位置和分组信息\n const { groupIndex: visibleGroupIndex, childIndex: visibleChildIndex, group: visibleGroup, columnData: visibleColumnData } = this.findColumnInColumns(columns, visibleColumn);\n\n if (!visibleColumnData) {\n console.warn(`[ColumnManagePlugin] 找不到可见列 \"${visibleColumn}\"`);\n return false;\n }\n\n // 创建替换列数据(继承可见列的 pin 和 size)\n const replaceColumn = { ...hiddenColumnData };\n if (visibleColumnData.pin) {\n (replaceColumn as any).pin = visibleColumnData.pin;\n } else {\n delete (replaceColumn as any).pin;\n }\n\n // 1. 判断是否分组下的列\n if (visibleGroup && visibleChildIndex !== -1) {\n // 是:替换分组中的列\n visibleGroup.children.splice(visibleChildIndex, 1, replaceColumn);\n } else {\n // 否:替换普通列\n columns.splice(visibleGroupIndex, 1, replaceColumn);\n }\n\n // 更新列配置\n this.revogrid.columns = [...columns];\n \n // 标记可见列为隐藏,移除隐藏列的隐藏标记\n this.hiddenProps.add(visibleColumn);\n this.hiddenProps.delete(hiddenColumn);\n \n // 触发隐藏变化回调\n this.config.onHiddenChange?.(this.getHiddenColumns(), [hiddenColumn, visibleColumn]);\n\n // 触发列替换事件\n this.emit('columnreplaced', {\n hiddenColumn,\n visibleColumn,\n hiddenColumns: this.getHiddenColumns(),\n });\n\n return true;\n }\n\n /**\n * 导出当前列配置(用于保存到接口)\n * 只导出可见列(从 grid.columns 获取,包含拖拽后的新顺序和实际宽度)\n * 返回列配置数组,包含列顺序、冻结状态、宽度等\n */\n exportColumnConfig(): ColumnConfigExport {\n // 1. 获取当前可见列(包含拖拽后的新顺序)\n const columns = this.revogrid.columns as ColumnRegular[];\n if (!columns || columns.length === 0) {\n return [];\n }\n\n // 2. 获取当前列宽度(从 DOM 中读取实际宽度)\n const sizeMap = this.buildSizeMap(columns);\n\n // 3. 获取 ColumnStretchPlugin 实例\n const stretchPlugin = this.providers.plugins.getByClass(ColumnStretchPlugin);\n\n // 4. 获取自动宽度列配置\n const stretchOptions = getStretchColumnOptions(this.providers, stretchPlugin);\n const stretchColumnProps = stretchOptions?.stretchColumnProps || new Set<string>();\n const manuallyResizedProps = stretchOptions?.manuallyResizedProps || new Set<string>();\n\n const result: ColumnConfigExport = [];\n\n // 构建单列配置\n const buildColumnItem = (col: ColumnRegular, parentPin?: PinType): ColumnConfigItem => {\n const prop = col.prop as string;\n const item: ColumnConfigItem = { prop };\n \n // 判断是否是自动宽度列\n const isStretchColumn = stretchColumnProps.has(prop);\n \n if (isStretchColumn) {\n // 自动宽度列:只有被手动调整过才导出 size\n if (manuallyResizedProps.has(prop)) {\n const size = sizeMap.get(prop) || col.size;\n if (size) {\n item.size = size;\n }\n }\n } else {\n // 普通列:直接导出 size\n const size = sizeMap.get(prop) || col.size;\n if (size) {\n item.size = size;\n }\n }\n \n // 优先使用子列自己的 pin,如果没有则继承父级的 pin\n const colAny = col as any;\n const pin = colAny.pin || parentPin;\n if (pin) {\n item.pin = pin;\n }\n return item;\n };\n\n // 导出可见列(只保留 prop、size、pin)\n for (const col of columns) {\n const colAny = col as any;\n\n if (colAny.children) {\n // 分组列\n const parentPin = colAny.pin;\n const groupChildren = colAny.children\n .filter((child: ColumnRegular) => child.prop)\n .map((child: ColumnRegular) => buildColumnItem(child, parentPin));\n\n if (groupChildren.length > 0) {\n const groupItem: ColumnGroupConfigItem = {\n name: colAny.name,\n children: groupChildren,\n };\n if (parentPin) {\n groupItem.pin = parentPin;\n }\n result.push(groupItem);\n }\n } else if (col.prop) {\n // 普通列\n result.push(buildColumnItem(col));\n }\n }\n\n return result;\n }\n\n /**\n * 导入列配置(从接口恢复)\n * @param config 列配置数据(与 exportColumnConfig 格式一致)\n * @param uniqueId 可选的唯一标识符,用于防抖\n * @returns Promise<boolean> 返回 Promise,在渲染完成后 resolve\n */\n async importColumnConfig(config: ColumnConfigExport, uniqueId?: any): Promise<boolean> {\n // 保存 uniqueId 到全局变量\n if (uniqueId !== undefined) {\n this.uniqueId = uniqueId;\n }\n // 从 additionalData.allColumns 获取基础列定义\n const additionalData = (this.revogrid as any).additionalData || {};\n const base = additionalData.allColumns;\n \n if (!base || !Array.isArray(base) || !config || config.length === 0) {\n console.warn('[ColumnManagePlugin] importColumnConfig 失败: 缺少 additionalData.allColumns 或 config');\n return false;\n }\n\n // 获取 ColumnStretchPlugin 实例和配置\n const stretchPlugin = this.providers.plugins.getByClass(ColumnStretchPlugin);\n const stretchColumnConfig = stretchPlugin?.getStretchColumnConfig();\n\n // 确定哪些列是自动宽度列\n const stretchColumnProps = new Set<string>();\n if (stretchColumnConfig && base) {\n if (stretchColumnConfig === 'last') {\n // 最后一列\n const lastCol = base[base.length - 1];\n if (lastCol?.prop) {\n stretchColumnProps.add(lastCol.prop as string);\n }\n } else if (stretchColumnConfig === 'all') {\n // 所有列\n base.forEach((col: ColumnRegular) => {\n if (col.prop) {\n stretchColumnProps.add(col.prop as string);\n }\n });\n } else if (typeof stretchColumnConfig === 'number') {\n // 指定索引的列\n const col = base[stretchColumnConfig];\n if (col?.prop) {\n stretchColumnProps.add(col.prop as string);\n }\n } else if (typeof stretchColumnConfig === 'string') {\n // 指定 prop 的列\n stretchColumnProps.add(stretchColumnConfig);\n }\n }\n\n // 构建 prop -> 基础列配置 的映射\n const baseColMap = new Map<string, ColumnRegular>();\n \n base.forEach((col: ColumnRegular) => {\n if (col.prop) {\n baseColMap.set(col.prop as string, col);\n }\n });\n\n const newColumns: ColumnRegular[] = [];\n this.hiddenProps.clear();\n\n // 收集配置中的所有 prop,用于标记隐藏列\n const visibleProps = new Set<string>();\n const collectVisibleProps = (items: ColumnConfigExport) => {\n for (const item of items) {\n const itemAny = item as any;\n if (itemAny.children) {\n itemAny.children.forEach((child: ColumnConfigItem) => {\n visibleProps.add(child.prop);\n });\n } else {\n visibleProps.add((item as ColumnConfigItem).prop);\n }\n }\n };\n collectVisibleProps(config);\n\n // 标记所有不在配置中的列为隐藏\n baseColMap.forEach((_, prop) => {\n if (!visibleProps.has(prop)) {\n this.hiddenProps.add(prop);\n }\n });\n\n // 处理列配置并更新 ColumnStretchPlugin 的 manuallyResizedColumns\n const processColumn = (colItem: ColumnConfigItem, baseCol: ColumnRegular): ColumnRegular => {\n const isStretchColumn = stretchColumnProps.has(colItem.prop);\n const newCol: ColumnRegular = { ...baseCol };\n \n if (isStretchColumn) {\n if (colItem.size) {\n newCol.size = colItem.size;\n stretchPlugin?.markAsManuallyResized(colItem.prop);\n } else {\n // 完全不设置 size,让 ColumnStretchPlugin 自动计算\n delete (newCol as any).size;\n stretchPlugin?.unmarkAsManuallyResized(colItem.prop);\n }\n } else {\n newCol.size = colItem.size || baseCol.size;\n }\n\n return newCol;\n };\n\n for (const item of config) {\n const itemAny = item as any;\n\n if (itemAny.children) {\n // 分组列\n const groupChildren: ColumnRegular[] = [];\n for (const child of itemAny.children) {\n const baseCol = baseColMap.get(child.prop);\n if (!baseCol) continue;\n\n const newCol = processColumn(child, baseCol);\n\n // 优先使用子列的 pin,如果没有则使用分组的 pin\n const pin = child.pin || itemAny.pin;\n if (pin) {\n (newCol as any).pin = pin;\n } else {\n delete (newCol as any).pin;\n }\n\n groupChildren.push(newCol);\n }\n\n if (groupChildren.length > 0) {\n const groupCol: any = {\n name: itemAny.name,\n children: groupChildren,\n };\n if (itemAny.pin) {\n groupCol.pin = itemAny.pin;\n }\n newColumns.push(groupCol);\n }\n } else {\n // 普通列\n const colItem = item as ColumnConfigItem;\n const baseCol = baseColMap.get(colItem.prop);\n if (!baseCol) continue;\n\n const newCol = processColumn(colItem, baseCol);\n\n if (colItem.pin) {\n (newCol as any).pin = colItem.pin;\n } else {\n delete (newCol as any).pin;\n }\n\n newColumns.push(newCol);\n }\n }\n\n // 更新 originalColumns\n this.originalColumns = deepCloneColumns(newColumns);\n\n // 如果提供了 uniqueId,按照优先级设置到列配置中\n // 优先级:非冻结列的第一个 > 冻结列的第一个\n if (uniqueId !== undefined && newColumns.length > 0) {\n let targetCol: any = null;\n \n // 1. 先查找非冻结列的第一个\n for (const col of newColumns) {\n const colAny = col as any;\n if (colAny.children) {\n // 分组列:查找第一个非冻结的子列\n const firstNonPinChild = colAny.children.find((child: any) => !child.pin);\n if (firstNonPinChild) {\n targetCol = firstNonPinChild;\n break;\n }\n } else if (!colAny.pin) {\n // 普通非冻结列\n targetCol = colAny;\n break;\n }\n }\n \n // 2. 如果没有非冻结列,使用第一个列(不管是否冻结)\n if (!targetCol) {\n const firstCol = newColumns[0] as any;\n if (firstCol.children && firstCol.children.length > 0) {\n targetCol = firstCol.children[0];\n } else {\n targetCol = firstCol;\n }\n }\n \n // 3. 设置 uniqueId\n if (targetCol) {\n targetCol.uniqueId = uniqueId;\n }\n }\n\n // 返回 Promise,在渲染完成后 resolve\n return new Promise<boolean>((resolve) => {\n // 监听 aftercolumnsset 事件,确保渲染完成\n const handleImportComplete = () => {\n // 触发配置回调\n this.config.onImportComplete?.(config);\n // resolve Promise\n resolve(true);\n };\n \n this.revogrid.addEventListener('aftercolumnsset', handleImportComplete, { once: true });\n\n // 应用配置\n this.revogrid.columns = [...newColumns]\n \n\n // 重置自动列宽列的宽度\n if (stretchPlugin && this.providers?.dimension) {\n // 监听下一次 beforecolumnapplied 事件,确保列数据已更新\n const handleColumnApplied = (e: CustomEvent<{ columns: Record<DimensionCols, ColumnRegular[]> }>) => {\n // 使用事件中的新列数据,而不是 columnCollection.columns(旧数据)\n const columnsData = e.detail?.columns;\n if (!columnsData) {\n stretchPlugin.applyStretch();\n return;\n }\n \n const dimensionTypes: DimensionCols[] = ['rgCol', 'colPinStart', 'colPinEnd'];\n dimensionTypes.forEach(type => {\n const columns = columnsData[type];\n if (!columns) return;\n \n const dimensionStore = this.providers?.dimension?.stores[type];\n if (!dimensionStore) return;\n \n const sizes = dimensionStore.store.get('sizes') || {};\n let hasChanges = false;\n \n columns.forEach((col: ColumnRegular, idx: number) => {\n const prop = col.prop as string;\n if (prop && stretchColumnProps.has(prop) && !stretchPlugin.isManuallyResized(prop) && sizes[idx]) {\n delete sizes[idx];\n hasChanges = true;\n }\n });\n \n if (hasChanges) {\n dimensionStore.store.set('sizes', { ...sizes });\n }\n });\n \n stretchPlugin.applyStretch();\n };\n \n // 监听一次 beforecolumnapplied 事件\n this.revogrid.addEventListener('beforecolumnapplied', handleColumnApplied as EventListener, { once: true });\n }\n });\n }\n\n\n // ==================== 编组管理 ====================\n\n /**\n * 设置列的编组(统一入口方法)\n * @param columnProp 列的 prop\n * @param groupName 编组名称,如果为空则移除编组\n * @returns 是否成功\n * \n * 使用示例:\n * - setColumnGroup('priority', '基础信息') // 将 priority 列设置到 \"基础信息\" 编组\n * - setColumnGroup('priority', '') // 移除 priority 列的编组\n */\n setColumnGroup(columnProp: string, groupName: string): boolean {\n \n const stretchPlugin = this.providers.plugins.getByClass(ColumnStretchPlugin);\n const options = getStretchColumnOptions(this.providers, stretchPlugin);\n const columns = convertCollectionToColumns(this.providers, options);\n\n const trimmedGroupName = groupName?.trim() || '';\n const currentGroup = this.getColumnGroup(columns, columnProp);\n\n // 如果目标编组和当前编组相同,无需操作\n if (currentGroup === trimmedGroupName || (!currentGroup && !trimmedGroupName)) {\n return true;\n }\n\n let result = false;\n\n /**\n * 无编组名称: 移除编组\n * 有编组名称:\n * 1. 当前有编组: 从编组中分离出来\n * 2. 是否有相邻编组且名称一样\n * - 有: 合并进去\n * - 无: 新建编组\n */\n if (!trimmedGroupName) {\n // 无编组名称: 移除编组\n result = currentGroup ? this.removeColumnFromGroup(columns, currentGroup, columnProp) : true;\n } else {\n // 当前有编组: 从编组中分离出来\n if (currentGroup) {\n this.removeColumnFromGroup(columns, currentGroup, columnProp);\n }\n\n // 是否有相邻编组且名称一样\n const adjacentGroup = this.findAdjacentGroup(columns, columnProp, trimmedGroupName);\n if (adjacentGroup) {\n // 合并到同名编组\n result = this.addColumnToGroup(columns, adjacentGroup);\n // 合并完成后,检查是否需要合并相邻的同名编组(处理前后都有同名编组的情况)\n mergeAdjacentGroups(columns);\n } else {\n // 创建新编组\n result = this.createColumnGroup(columns, trimmedGroupName, [columnProp]);\n }\n }\n\n // 触发编组变化事件\n if (result) {\n this.emit('columngroupchanged', {\n columnProp,\n groupName: trimmedGroupName || null,\n previousGroup: currentGroup || null,\n });\n }\n this.revogrid.columns = [...columns]\n return result;\n }\n\n /**\n * 查找列相邻的同名编组\n * @private\n */\n private findAdjacentGroup(\n columns: (ColumnRegular | ColumnGrouping<any>)[],\n columnProp: string,\n groupName: string,\n ): { position: 'start' | 'end'; groupIndex: number; columnIndex: number } | null {\n const columnIndex = columns.findIndex( (item:ColumnRegular) => item.prop === columnProp);\n if (columnIndex === -1) return null;\n\n const columnInfo = columns[columnIndex];\n const columnPin = (columnInfo as any).pin;\n\n let prevGroup: { position: 'start' | 'end'; groupIndex: number; columnIndex: number } | null = null;\n let nextGroup: { position: 'start' | 'end'; groupIndex: number; columnIndex: number } | null = null;\n\n // 检查前一个\n if (columnIndex > 0) {\n const prevColumn = columns[columnIndex - 1] as any;\n if (\n prevColumn.children &&\n prevColumn.name === groupName &&\n prevColumn.pin === columnPin\n ) {\n prevGroup = { \n position: 'end', \n groupIndex: columnIndex - 1,\n columnIndex: columnIndex\n }; // 添加到前一个编组的末尾\n }\n }\n\n // 检查后一个\n if (columnIndex < columns.length - 1) {\n const nextColumn = columns[columnIndex + 1] as any;\n if (\n nextColumn.children &&\n nextColumn.name === groupName &&\n nextColumn.pin === columnPin\n ) {\n nextGroup = { \n position: 'start', \n groupIndex: columnIndex + 1,\n columnIndex: columnIndex\n }; // 添加到后一个编组的开头\n }\n }\n\n // 如果前后都有同名编组,优先合并到前一个(添加到前一个编组的末尾)\n // 这样可以保持列的顺序更自然\n if (prevGroup) {\n return prevGroup;\n }\n\n return nextGroup;\n }\n\n /**\n * 创建列编组\n * @param columns 列数据源\n * @param groupName 编组名称\n * @param columnProps 要编组的列 prop 数组\n * @param pin 可选的冻结位置\n * @private\n */\n private createColumnGroup(\n columns: (ColumnRegular | ColumnGrouping<any>)[],\n groupName: string,\n columnProps: string[],\n pin?: PinType,\n ): boolean {\n\n if (columnProps.length === 0) {\n console.warn('[ColumnManagePlugin] 编组列不能为空');\n return false;\n }\n\n // 收集要编组的列及其索引\n const columnsData: Array<{ column: ColumnRegular; index: number }> = [];\n\n for (const prop of columnProps) {\n const index = columns.findIndex((item: any) => item.prop === prop)\n columnsData.push({\n column: columns[index] as ColumnRegular,\n index: index\n })\n }\n\n if (columnsData.length === 0) return false;\n\n // 按索引倒序删除列\n columnsData\n .sort((a, b) => b.index - a.index)\n .forEach(({ index }) => columns!.splice(index, 1));\n\n // 创建编组\n const groupColumn: any = {\n name: groupName,\n children: columnsData.map(({ column }) => {\n const newCol = { ...column };\n if (pin) (newCol as any).pin = pin;\n return newCol;\n }),\n };\n\n if (pin) groupColumn.pin = pin;\n\n // 插入到第一个被删除列的位置\n const insertIndex = Math.min(...columnsData.map(d => d.index));\n columns!.splice(insertIndex, 0, groupColumn);\n\n this.revogrid.columns = [...columns]\n return true;\n }\n\n\n\n /**\n * 向编组添加列\n * @param columns 列数据源\n * @param adjacentGroup 相邻编组信息(包含 groupIndex、columnIndex、position)\n * @private\n */\n private addColumnToGroup(\n columns: (ColumnRegular | ColumnGrouping<any>)[],\n adjacentGroup: { position: 'start' | 'end'; groupIndex: number; columnIndex: number },\n ): boolean {\n const { groupIndex, columnIndex, position } = adjacentGroup;\n\n // 1. 通过索引找到目标分组\n const group = columns[groupIndex] as any;\n if (!group || !group.children) {\n console.warn(`[ColumnManagePlugin] 索引 ${groupIndex} 处不是有效的编组`);\n return false;\n }\n\n // 获取原始列\n const column = columns[columnIndex] as ColumnRegular;\n if (!column) {\n console.warn(`[ColumnManagePlugin] 索引 ${columnIndex} 处找不到列`);\n return false;\n }\n\n // 2. 先删除原始列,再插入到编组\n // 注意:删除操作会影响后续索引,所以需要先删除\n columns.splice(columnIndex, 1);\n\n // 3. 重新计算编组索引(如果列在编组前面,删除后编组索引会减1)\n const adjustedGroupIndex = columnIndex < groupIndex ? groupIndex - 1 : groupIndex;\n const adjustedGroup = columns[adjustedGroupIndex] as any;\n\n // 4. 根据 position 插入到编组\n if (position === 'start') {\n adjustedGroup.children.unshift(column);\n } else {\n adjustedGroup.children.push(column);\n }\n\n this.revogrid.columns = [...columns];\n return true;\n }\n\n /**\n * 从编组移除列\n * @param columns 列数据源\n * @param groupName 编组名称\n * @param columnProp 要移除的列 prop\n * @private\n */\n private removeColumnFromGroup(columns: (ColumnRegular | ColumnGrouping<any>)[], groupName: string, columnProp: string): boolean {\n // 先从子级找到包含该列的编组\n let groupIndex = -1;\n let childIndex = -1;\n \n for (let i = 0; i < columns.length; i++) {\n const col = columns[i] as any;\n if (col.children) {\n const idx = col.children.findIndex((child: ColumnRegular) => child.prop === columnProp);\n if (idx !== -1) {\n // 找到了包含该列的编组,验证编组名称是否匹配\n if (col.name === groupName) {\n groupIndex = i;\n childIndex = idx;\n break;\n }\n }\n }\n }\n \n if (groupIndex === -1 || childIndex === -1) {\n console.warn(`[ColumnManagePlugin] 在编组 \"${groupName}\" 中找不到列 \"${columnProp}\"`);\n return false;\n }\n\n const group = columns[groupIndex] as any;\n\n // 拆分编组:移除列之前的、移除的列、移除列之后的\n const beforeColumns = group.children.slice(0, childIndex);\n const removedColumn = group.children[childIndex];\n const afterColumns = group.children.slice(childIndex + 1);\n\n // 删除原编组\n columns!.splice(groupIndex, 1);\n\n // 重建结构\n const newItems: any[] = [];\n\n if (beforeColumns.length > 0) {\n newItems.push(this.createGroupObject(group.name, beforeColumns, group.pin));\n }\n\n newItems.push(removedColumn);\n\n if (afterColumns.length > 0) {\n newItems.push(this.createGroupObject(group.name, afterColumns, group.pin));\n }\n\n // 插入新结构\n columns!.splice(groupIndex, 0, ...newItems);\n\n this.revogrid.columns = columns\n return true;\n }\n\n /**\n * 创建编组对象\n * @private\n */\n private createGroupObject(name: string, children: ColumnRegular[], pin?: PinType): any {\n const group: any = { name, children };\n if (pin) group.pin = pin;\n return group;\n }\n\n\n\n\n /**\n * 获取所有编组信息\n */\n getGroups(): Array<{ name: string; columns: string[]; pin?: PinType }> {\n const columns = this.originalColumns || (this.revogrid.columns as ColumnRegular[]);\n if (!columns) return [];\n\n return columns\n .filter((col: any) => col.children)\n .map((col: any) => ({\n name: col.name,\n columns: col.children.map((child: ColumnRegular) => child.prop as string),\n pin: col.pin,\n }));\n }\n\n /**\n * 检查列是否在编组中\n */\n isColumnInGroup(columnProp: string): boolean {\n const columns = this.originalColumns || (this.revogrid.columns as ColumnRegular[]);\n if (!columns) return false;\n\n for (const col of columns) {\n const colAny = col as any;\n if (colAny.children) {\n if (colAny.children.some((child: ColumnRegular) => child.prop === columnProp)) {\n return true;\n }\n }\n }\n return false;\n }\n\n /**\n * 获取列所在的编组名称\n */\n getColumnGroup(columns: (ColumnRegular | ColumnGrouping<any>)[], columnProp: string): string | null {\n if (!columns) return null;\n\n for (const col of columns) {\n const colAny = col as any;\n if (colAny.children) {\n if (colAny.children.some((child: ColumnRegular) => child.prop === columnProp)) {\n return colAny.name;\n }\n }\n }\n return null;\n }\n\n // ==================== 插入/删除列 ====================\n\n // ==================== 内部方法 ====================\n\n /**\n * 从 columns 数组中查找列的位置和分组信息\n * @param columns 列数组\n * @param prop 列的 prop\n * @returns 列信息对象,包含索引、分组信息和列数据\n */\n private findColumnInColumns(\n columns: (ColumnRegular | ColumnGrouping<any>)[],\n prop: string\n ): {\n groupIndex: number;\n childIndex: number;\n group: any | null;\n columnData: any | null;\n } {\n let groupIndex = -1;\n let childIndex = -1;\n let group: any = null;\n let columnData: any = null;\n\n // 遍历查找列\n for (let i = 0; i < columns.length; i++) {\n const col = columns[i] as any;\n \n if (col.children) {\n // 当前是分组\n const idx = col.children.findIndex((child: ColumnRegular) => child.prop === prop);\n if (idx !== -1) {\n groupIndex = i;\n childIndex = idx;\n group = col;\n columnData = col.children[idx];\n break;\n }\n } else if (col.prop === prop) {\n // 当前是普通列\n groupIndex = i;\n childIndex = -1;\n columnData = col;\n break;\n }\n }\n\n return { groupIndex, childIndex, group, columnData };\n }\n\n private buildSizeMap(columns: ColumnRegular[]): Map<string, number> {\n const propToWidth = new Map<string, number>();\n const headerCells = this.revogrid.querySelectorAll('.rgHeaderCell');\n const flatCols = this.flattenColumns(columns);\n\n headerCells.forEach(cell => {\n const width = cell.getBoundingClientRect().width;\n if (width <= 0) return;\n\n const colIndex = cell.getAttribute('data-rgcol');\n if (colIndex === null) return;\n\n const localIdx = parseInt(colIndex, 10);\n\n let viewportType: 'colPinStart' | 'rgCol' | 'colPinEnd' = 'rgCol';\n // 适配统一表头的新 DOM 结构\n if (cell.closest('.header-area-colPinStart')) {\n viewportType = 'colPinStart';\n } else if (cell.closest('.header-area-colPinEnd')) {\n viewportType = 'colPinEnd';\n } else if (cell.closest('.header-area-rgCol')) {\n viewportType = 'rgCol';\n }\n\n let currentIdx = 0;\n for (const col of flatCols) {\n const pin = (col as any).pin;\n const colViewport = pin === 'colPinStart' ? 'colPinStart'\n : pin === 'colPinEnd' ? 'colPinEnd'\n : 'rgCol';\n\n if (colViewport === viewportType) {\n if (currentIdx === localIdx && col.prop) {\n propToWidth.set(col.prop as string, width);\n break;\n }\n currentIdx++;\n }\n }\n });\n\n return propToWidth;\n }\n\n private normalizeColumnConfig(config: string | number | (string | number)[]): string[] {\n const items = Array.isArray(config) ? config : [config];\n const currentColumns = this.revogrid.columns as ColumnRegular[] || [];\n const flatColumns = this.flattenColumns(currentColumns);\n\n return items\n .map(item => {\n if (typeof item === 'string') {\n return item;\n }\n const col = flatColumns[item];\n return (col?.prop as string) || '';\n })\n .filter(Boolean);\n }\n\n private flattenColumns(cols: ColumnRegular[]): ColumnRegular[] {\n const result: ColumnRegular[] = [];\n for (const col of cols) {\n const colAny = col as any;\n if (colAny.children) {\n result.push(...colAny.children);\n } else {\n result.push(col);\n }\n }\n return result;\n }\n\n /**\n * 找到列应该插入的位置(基于传入的 columns 数组)\n * @param columns 列数组\n * @param newPin 新的冻结状态\n * @param previousPin 之前的冻结状态(用于取消冻结时判断插入位置)\n */\n private findInsertPositionForPinInColumns(columns: (ColumnRegular | ColumnGrouping<any>)[], newPin: PinType, previousPin?: PinType): number {\n if (!columns || columns.length === 0) return 0;\n\n if (newPin === 'colPinStart') {\n // 左冻结:插入到所有左冻结列的末尾\n let lastPinStartIndex = -1;\n for (let i = 0; i < columns.length; i++) {\n const col = columns[i] as any;\n if (col.pin === 'colPinStart') {\n lastPinStartIndex = i;\n } else {\n break; // 遇到非左冻结列就停止\n }\n }\n return lastPinStartIndex + 1;\n } else if (newPin === 'colPinEnd') {\n // 右冻结:插入到第一个右冻结列前面\n for (let i = 0; i < columns.length; i++) {\n const col = columns[i] as any;\n \n // 判断是否是右冻结列(检查自身或子列的 pin)\n let isColPinEnd = col.pin === 'colPinEnd';\n if (!isColPinEnd && col.children) {\n // 如果是编组,检查子列的 pin\n isColPinEnd = col.children.some((child: any) => child.pin === 'colPinEnd');\n }\n \n if (isColPinEnd) {\n return i;\n }\n }\n // 如果没有找到右冻结列,插入到末尾\n return columns.length;\n } else {\n // 取消冻结:根据之前的冻结状态决定插入位置\n if (previousPin === 'colPinEnd') {\n // 之前是右侧冻结,放在未冻结区域的最后一个\n // 找到第一个右冻结列的位置\n for (let i = 0; i < columns.length; i++) {\n const col = columns[i] as any;\n \n // 判断是否是右冻结列(检查自身或子列的 pin)\n let isColPinEnd = col.pin === 'colPinEnd';\n if (!isColPinEnd && col.children) {\n isColPinEnd = col.children.some((child: any) => child.pin === 'colPinEnd');\n }\n \n if (isColPinEnd) {\n return i; // 插入到第一个右冻结列之前\n }\n }\n // 如果没有右冻结列,插入到末尾\n return columns.length;\n } else {\n // 之前是左侧冻结或无冻结,放在未冻结区域的第一个\n let firstNonPinIndex = 0;\n for (let i = 0; i < columns.length; i++) {\n const col = columns[i] as any;\n if (col.pin === 'colPinStart') {\n firstNonPinIndex = i + 1;\n } else if (!col.pin) {\n break;\n }\n }\n return firstNonPinIndex;\n }\n }\n }\n\n\n private findColumnByProp(cols: ColumnRegular[], prop: string): ColumnRegular | null {\n for (const col of cols) {\n const colAny = col as any;\n if (colAny.children) {\n const found = this.findColumnByProp(colAny.children, prop);\n if (found) return found;\n } else if (col.prop === prop) {\n return col;\n }\n }\n return null;\n }\n\n\n\n\n\n destroy(): void {\n this.hiddenProps.clear();\n this.originalColumns = null;\n super.destroy();\n }\n}\n","/**\n * TreeDataPlugin - 独立版本\n * 所有依赖已整合到此文件中\n */\n\nimport type { VNode } from '@stencil/core';\nimport type {\n ColumnDataSchemaModel,\n ColumnRegular,\n DataType,\n HyperFunc,\n BeforeCellRenderEvent,\n BeforeRowRenderEvent,\n CellTemplate,\n} from '@type';\nimport type { PluginProviders } from '../types';\n\n// ==================== 类型定义 ====================\n\ninterface TreeConfig {\n idField?: string;\n parentIdField?: string;\n rootParentId?: any;\n expandedRowIds?: Set<any>;\n expandIconTemplate?: (h: HyperFunc<VNode>, expanded: boolean) => VNode;\n}\n\ninterface TreeMeta {\n level: number;\n expanded: boolean;\n hasChildren: boolean;\n visible: boolean;\n parentId: any;\n}\n\ninterface TreeRowItem {\n row: DataType;\n physIndex: number;\n}\n\ninterface TreeEventDetail {\n type: string;\n parentIndex: number;\n childrenIndices: number[];\n originalEvent: MouseEvent;\n}\n\ninterface RowDropDetail {\n from: number;\n to: number;\n type: string;\n items: Map<number, DataType>;\n dataItem: any;\n}\n\n// ==================== 常量定义 ====================\nconst TREE_COLLAPSED = 'tree-collapsed';\nconst EXPAND_ICON = '›';\n\n// ==================== 事件常量 ====================\nconst ADDITIONAL_DATA_EVENT = 'additionaldatachanged';\nconst BEFORE_ANYSOURCE_EVENT = 'beforeanysource';\nconst BEFORE_CELL_RENDER_EVENT = 'beforecellrender';\nconst ORDER_CHANGED_EVENT = 'rowdropped';\nconst TREE_BEFORE_PARENT_CHANGE_EVENT = 'before-parent-change';\nconst BEFORE_ROW_RENDER_EVENT = 'beforerowrender';\nconst TREE_ROW_SELECT_EVENT = 'treerowselect';\n\n// ==================== 工具函数 ====================\n\n\n// 获取单元格值\nfunction getCellValue(model: DataType, column: ColumnRegular): any {\n if (!column) return '';\n if (column.cellParser) {\n return column.cellParser(model, column);\n }\n return model[column.prop];\n}\n\n// 获取 store 中的数据项\nfunction getItemByIndex(store: any, index: number): DataType {\n const source = store.get('source');\n const items = store.get('items');\n return source[items[index]];\n}\n\n// 包装单元格模板\nfunction wrapCellTemplate(\n customTemplate: CellTemplate | undefined,\n defaultTemplate: CellTemplate,\n): CellTemplate {\n return customTemplate ?? defaultTemplate;\n}\n\n// 默认单元格渲染\nfunction defaultCellRender(\n _h: HyperFunc<VNode>,\n { model, column }: { model: DataType; column: ColumnRegular },\n): any {\n return getCellValue(model, column);\n}\n\n// 组合单元格模板\nfunction combineCellTemplates(...templates: CellTemplate[]): CellTemplate {\n return (...args: [HyperFunc<VNode>, any, any?]) => {\n const [h] = args;\n return h(\n 'div',\n {\n class: 'flex cell-wrapper',\n },\n templates.map((template) => template(...args)),\n );\n };\n}\n\n// ==================== 基础插件类 ====================\nclass BasePlugin {\n revogrid: HTMLRevoGridElement;\n providers: PluginProviders;\n subscriptions: Record<string, (...args: any[]) => void> = {};\n\n constructor(revogrid: HTMLRevoGridElement, providers: PluginProviders) {\n this.revogrid = revogrid;\n this.providers = providers;\n }\n\n addEventListener(event: string, handler: (...args: any[]) => void): void {\n this.revogrid.addEventListener(event, handler);\n this.subscriptions[event] = handler;\n }\n\n removeEventListener(event: string): void {\n this.revogrid.removeEventListener(event, this.subscriptions[event]);\n delete this.subscriptions[event];\n }\n\n emit<T = any>(event: string, detail?: T): CustomEvent<T> {\n const customEvent = new CustomEvent<T>(event, {\n detail: detail,\n cancelable: true,\n });\n this.revogrid.dispatchEvent(customEvent);\n return customEvent;\n }\n\n clearSubscriptions(): void {\n for (let event in this.subscriptions) {\n this.removeEventListener(event);\n }\n }\n\n destroy(): void {\n this.clearSubscriptions();\n }\n}\n\n// ==================== TreeDataPlugin 主类 ====================\nclass TreeDataPlugin extends BasePlugin {\n idField: string = 'id';\n parentIdField: string = 'parentId';\n rootParentId: any;\n expandedRowIds: Set<any> = new Set();\n metaData: Map<any, TreeMeta> = new Map();\n expandIconTemplate?: (h: HyperFunc<VNode>, expanded: boolean) => VNode;\n\n constructor(config: HTMLRevoGridElement, providers: PluginProviders) {\n super(config, providers);\n\n let treeConfig = config.additionalData?.tree;\n let needsUpdate = false;\n\n // 设置配置\n this.setConfig(treeConfig)\n\n // 监听配置变化\n this.addEventListener(ADDITIONAL_DATA_EVENT, ({ detail }: any) => {\n if (treeConfig !== detail.tree) {\n treeConfig = detail.tree;\n this.setConfig(treeConfig);\n needsUpdate = true;\n this.updateTree();\n }\n });\n\n // 监听数据源变化\n this.addEventListener(BEFORE_ANYSOURCE_EVENT, ({ detail }: any) => {\n if (detail.type === 'rgRow') {\n needsUpdate = true;\n this.updateTree();\n }\n });\n\n // 监听单元格渲染,添加树形展开/折叠按钮\n this.addEventListener(BEFORE_CELL_RENDER_EVENT, ({ detail }: CustomEvent<BeforeCellRenderEvent<ColumnDataSchemaModel>>) => {\n const column = detail.model.column;\n if ((column as any)?.tree) {\n detail.model = {\n ...detail.model,\n column: {\n ...column,\n cellTemplate: combineCellTemplates(\n this.createTreeToggleTemplate(\n (model: DataType) => this.toggleRowExpanded(model),\n (model: DataType) => this.getMeta(model),\n ),\n wrapCellTemplate(column.cellTemplate, defaultCellRender),\n ),\n },\n };\n }\n });\n\n // 监听排序\n this.addEventListener('aftersortingapply', () => {\n needsUpdate = true;\n this.updateTree();\n });\n\n // 监听过滤\n this.addEventListener('afterfilterapply', () => {\n needsUpdate = true;\n this.updateTree();\n });\n\n // 监听 trimmed 变化(分组展开/折叠会触发)\n // 但分组变化时不应该触发 TreeDataPlugin 的更新\n this.addEventListener('beforetrimmed', (e: any) => {\n // 跳过分组的 trimmed 变化,TreeDataPlugin 不处理分组\n if (e.detail.trimmedType === 'grouping') {\n return;\n }\n needsUpdate = true;\n this.updateTree();\n });\n\n // 监听行拖拽\n this.addEventListener(ORDER_CHANGED_EVENT, (e: any) => {\n if (!e.defaultPrevented) {\n this.handleRowDrop(e);\n }\n });\n\n // 监听行渲染,添加展开状态\n this.addEventListener(BEFORE_ROW_RENDER_EVENT, (e: CustomEvent<BeforeRowRenderEvent>) => {\n const { detail } = e;\n const { store } = this.providers.data.stores[detail.rowType];\n const source = store.get('source');\n const items = store.get('items');\n const dataIndex = items[detail.item.itemIndex];\n const rowData = source[dataIndex];\n\n if (rowData) {\n const id = rowData[this.idField];\n const meta = this.metaData.get(id);\n if (meta?.expanded && (detail.node as any).$attrs$) {\n (detail.node as any).$attrs$.expanded = true;\n }\n }\n });\n\n // 监听树形行选择\n this.addEventListener(TREE_ROW_SELECT_EVENT, (e: any) => {\n const { detail } = e;\n const dataStore = providers.data.stores[detail.type as 'rgRow'];\n const source = dataStore.store.get('source');\n const items = dataStore.store.get('items');\n const dataIndex = items[detail.rowIndex];\n const id = source[dataIndex][this.idField];\n const descendants = this.getAllDescendantPhysicalIndices(id);\n\n if (descendants.length > 0) {\n const eventDetail: TreeEventDetail = {\n type: detail.type,\n parentIndex: dataIndex,\n childrenIndices: descendants,\n originalEvent: detail.originalEvent,\n };\n this.emit(TREE_ROW_SELECT_EVENT, eventDetail);\n e.preventDefault();\n }\n });\n\n // 初始化树形结构\n setTimeout(() => {\n if (config.source.length && !needsUpdate) {\n needsUpdate = true;\n this.updateTree();\n }\n }, 0);\n }\n\n setConfig(config: TreeConfig = {}): void {\n this.idField = config.idField || 'id';\n this.parentIdField = config.parentIdField || 'parentId';\n this.rootParentId = config.rootParentId !== undefined ? config.rootParentId : '';\n this.expandedRowIds = config.expandedRowIds || new Set();\n this.expandIconTemplate = config.expandIconTemplate;\n }\n\n getMeta(model: DataType): TreeMeta {\n const id = model[this.idField];\n return (\n this.metaData.get(id) || {\n level: 0,\n expanded: false,\n hasChildren: false,\n visible: true,\n parentId: this.rootParentId,\n }\n );\n }\n\n createTreeToggleTemplate(\n toggleHandler: (model: DataType) => void,\n getMetaHandler: (model: DataType) => TreeMeta,\n ): CellTemplate {\n const expandIconTemplate = this.expandIconTemplate;\n \n return function (...args: [HyperFunc<VNode>, any, any?]) {\n const [h, props] = args;\n const { model } = props;\n const meta = getMetaHandler(model);\n const level = meta.level;\n const hasChildren = meta.hasChildren;\n const expanded = meta.expanded;\n\n let toggleButton: VNode;\n \n if (hasChildren) {\n const iconContent = expandIconTemplate \n ? expandIconTemplate(h, expanded) \n : h('span', {}, EXPAND_ICON);\n \n toggleButton = h(\n 'button',\n {\n onMouseDown: (e: MouseEvent) => {\n e.preventDefault();\n },\n onDblClick: (e: MouseEvent) => {\n e.preventDefault();\n },\n onClick: (e: MouseEvent) => {\n e.preventDefault();\n const target = e.currentTarget as HTMLElement;\n // 添加 transition 类\n target.classList.add('tree-toggle-animating');\n // 触发切换\n toggleHandler(model);\n // 动画结束后移除类\n setTimeout(() => {\n target.classList.remove('tree-toggle-animating');\n }, 200); // 根据你的动画时长调整\n },\n class: 'tree-toggle',\n expanded: expanded,\n style: {\n cursor: 'pointer',\n marginRight: '5px',\n userSelect: 'none',\n },\n },\n iconContent,\n );\n } else {\n toggleButton = h(\n 'span',\n {\n style: {\n marginRight: '15px',\n },\n },\n [],\n );\n }\n\n return h(\n 'div',\n {\n class: `overflow-hidden tree-toggle-wrapper level-${level}`,\n style: {\n display: 'flex',\n alignItems: 'center',\n },\n },\n toggleButton,\n );\n };\n }\n\n updateTree(): void {\n const { store } = this.providers.data.stores.rgRow;\n const source = store.get('source');\n const proxyItems = store.get('proxyItems');\n const allTrimmed = store.get('trimmed');\n \n // 只获取非树形、非分组的 trimmed 数据(如过滤器等)\n // 分组的 trimmed key 是 'grouping',树形的是 'tree-collapsed'\n const existingTrimmed: Record<number, boolean> = {};\n for (const [key, value] of Object.entries(allTrimmed)) {\n if (key !== TREE_COLLAPSED && key !== 'grouping') {\n Object.assign(existingTrimmed, value);\n }\n }\n\n // 构建父子关系映射\n const childrenByParent = new Map<any, any[]>();\n const rowById = new Map<any, TreeRowItem>();\n \n proxyItems.forEach((physIndex: number) => {\n const row = source[physIndex];\n // 跳过分组行(分组行有 __rvgr-depth 标记)\n if (!row || row['__rvgr-depth'] !== undefined) {\n return;\n }\n \n const id = row[this.idField];\n const parentId = row[this.parentIdField] ?? this.rootParentId;\n \n rowById.set(id, { row, physIndex });\n \n if (!childrenByParent.has(parentId)) {\n childrenByParent.set(parentId, []);\n }\n childrenByParent.get(parentId)!.push(id);\n });\n\n // 清空元数据\n this.metaData.clear();\n\n // 递归计算每个节点的元数据\n const calculateMeta = (id: any, level: number, parentVisible: boolean, parentExpanded: boolean): void => {\n const item = rowById.get(id);\n if (!item) return;\n \n const { row, physIndex } = item;\n const expanded = this.expandedRowIds.has(id);\n const children = childrenByParent.get(id) || [];\n const hasChildren = children.length > 0;\n const visible = parentVisible && parentExpanded && !existingTrimmed[physIndex];\n\n this.metaData.set(id, {\n level: level,\n expanded: expanded,\n hasChildren: hasChildren,\n visible: visible,\n parentId: row[this.parentIdField] ?? this.rootParentId,\n });\n\n // 递归处理子节点\n if (hasChildren) {\n children.forEach((childId: any) => {\n calculateMeta(childId, level + 1, visible, expanded);\n });\n }\n };\n\n // 从根节点开始计算\n const rootChildren = childrenByParent.get(this.rootParentId) || [];\n rootChildren.forEach((id: any) => {\n calculateMeta(id, 0, true, true);\n });\n\n // 处理孤立节点(没有父节点或父节点不存在的)\n rowById.forEach((_item, id) => {\n if (!this.metaData.has(id)) {\n const expanded = this.expandedRowIds.has(id);\n this.metaData.set(id, {\n level: 0,\n expanded: expanded,\n hasChildren: false,\n visible: true,\n parentId: this.rootParentId,\n });\n }\n });\n\n // 更新 trimmed 数据(隐藏折叠的行)\n const newTrimmed: Record<number, boolean> = {};\n proxyItems.forEach((physIndex: number) => {\n const row = source[physIndex];\n // 跳过分组行\n if (!row || row['__rvgr-depth'] !== undefined) {\n return;\n }\n \n const id = row[this.idField];\n const meta = this.metaData.get(id);\n if (meta && !meta.visible) {\n newTrimmed[physIndex] = true;\n }\n });\n\n // 在调用 setTrimmed 之前,强制同步更新分组覆盖层,避免视觉延迟\n const groupingOverlay = this.revogrid.querySelector('revogr-grouping-overlay');\n if (groupingOverlay) {\n (groupingOverlay as any).updateGroupRowsImmediate?.(true);\n }\n\n this.providers.data.setTrimmed(\n {\n [TREE_COLLAPSED]: newTrimmed,\n },\n 'rgRow',\n );\n }\n\n toggleRowExpanded(model: DataType): void {\n const id = model[this.idField];\n const isExpanded = this.expandedRowIds.has(id);\n \n if (isExpanded) {\n this.expandedRowIds.delete(id);\n } else {\n this.expandedRowIds.add(id);\n }\n\n this.emit('treenodetoggle', {\n id,\n expanded: !isExpanded,\n model,\n });\n\n this.updateTree();\n }\n\n async handleRowDrop(event: CustomEvent<RowDropDetail>): Promise<void> {\n const { from, to, type, items } = event.detail;\n const { store } = this.providers.data.stores[type as 'rgRow'];\n\n // 检查是否拖拽到自己的子节点\n const isDescendant = (targetId: any): boolean => {\n const checkDescendant = (childId: any, ancestorId: any): boolean => {\n if (childId === ancestorId) return true;\n const parentId = this.metaData.get(ancestorId)?.parentId;\n if (!parentId || parentId === this.rootParentId) return false;\n return checkDescendant(childId, parentId);\n };\n\n return [...items.values()].some((item: DataType) => checkDescendant(item[this.idField], targetId));\n };\n\n // 确定新的父节点\n const targetIndex = from < to ? to : to - 1;\n let newParentId = this.rootParentId;\n\n if (targetIndex >= 0) {\n const targetRow = getItemByIndex(store, targetIndex);\n if (targetRow) {\n const targetId = targetRow[this.idField];\n if (this.expandedRowIds.has(targetId)) {\n newParentId = targetId;\n } else if (targetRow[this.parentIdField]) {\n newParentId = targetRow[this.parentIdField];\n }\n\n // 检查是否拖拽到子节点\n if (isDescendant(newParentId)) {\n event.preventDefault();\n return;\n }\n }\n }\n\n // 更新每个拖拽项的父节点\n for (let i = 0; i < items.size; i++) {\n const item = items.get(i);\n const cellData = {\n ...event.detail.dataItem,\n rowIndex: from + i,\n model: item,\n prop: this.parentIdField,\n val: newParentId,\n };\n\n const changeEvent = this.emit(TREE_BEFORE_PARENT_CHANGE_EVENT, cellData);\n if (!changeEvent.defaultPrevented) {\n this.providers.data.setCellData(changeEvent.detail);\n }\n }\n\n setTimeout(() => {\n this.updateTree();\n }, 0);\n }\n\n getAllDescendantPhysicalIndices(id: any): number[] {\n const { store } = this.providers.data.stores.rgRow;\n const source = store.get('source');\n const descendants: number[] = [];\n\n const collectDescendants = (parentId: any): void => {\n source.forEach((row: DataType, physIndex: number) => {\n if (row[this.parentIdField] === parentId) {\n descendants.push(physIndex);\n collectDescendants(row[this.idField]);\n }\n });\n };\n\n collectDescendants(id);\n return descendants;\n }\n}\n\nexport { TreeDataPlugin };\n"],"names":["BasePlugin","each","gt","rsAstralRange","rsComboMarksRange","reComboHalfMarksRange","rsComboSymbolsRange","rsComboRange","rsVarRange","rsZWJ"],"mappings":"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","x_google_ignoreList":[5,6,7,11,12,13,14,27,28,29,30,31,32]}