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,1803 @@
1
+ /*!
2
+ * Built by Revolist OU ❤️
3
+ */
4
+ /**
5
+ * RowSelectPlugin - 行选择插件
6
+ *
7
+ * 功能说明:
8
+ * 1. 单选/多选:支持点击复选框选择单行,支持 Shift 键范围多选
9
+ * 2. 全选/取消全选:列头复选框支持全选当前可见行,半选状态显示
10
+ * 3. 树形选择:与 TreeDataPlugin 配合,支持选择父节点时自动选择/取消子节点
11
+ * 4. 选中状态同步:行选中后会在行元素上添加 selected 属性,方便 CSS 样式控制
12
+ * 5. 事件通知:选中状态变化时触发 rowselected 事件,包含选中数量等信息
13
+ *
14
+ * 使用方式:
15
+ * 1. 在列配置中添加 rowSelect: true 启用该列的复选框
16
+ * 2. 或使用 columnType 指定自定义的 CheckboxCellType
17
+ * 3. rowSelect 也可以是函数,根据行数据动态决定是否显示复选框
18
+ */
19
+ import { BasePlugin } from "./base.plugin";
20
+ // ==================== 常量定义 ====================
21
+ /** 行数据类型数组 */
22
+ const ROW_TYPES = ['rowPinStart', 'rgRow', 'rowPinEnd'];
23
+ /** 视口类型数组 */
24
+ const VIEWPORT_TYPES = ['colPinStart', 'rgCol', 'colPinEnd'];
25
+ /** 选中属性名称 */
26
+ export const SELECTED_ATTRIBUTE = 'selected';
27
+ // ==================== 事件常量 ====================
28
+ /** 行选择点击事件 */
29
+ const ROW_SELECT_CLICK_EVENT = 'rowselectclick';
30
+ /** 全选事件 */
31
+ const ROW_ALL_SELECT_EVENT = 'rowallselect';
32
+ /** 列头渲染前事件 */
33
+ const BEFORE_HEADER_RENDER_EVENT = 'beforeheaderrender';
34
+ /** 单元格渲染前事件 */
35
+ const BEFORE_CELL_RENDER_EVENT = 'beforecellrender';
36
+ /** 行渲染前事件 */
37
+ const BEFORE_ROW_RENDER_EVENT = 'beforerowrender';
38
+ /** 树形行选择事件 */
39
+ const TREE_ROW_SELECT_EVENT = 'treerowselect';
40
+ /** 行选中状态变化事件 */
41
+ const ROW_SELECTED_EVENT = 'rowselected';
42
+ /** 滚动期间 wheel 选中态同步限频,避免每帧都触发属性写入 */
43
+ const WHEEL_SELECTION_SYNC_INTERVAL_ACTIVE = 64;
44
+ /** 视口滚动空闲判定 */
45
+ const VIEWPORT_SCROLL_IDLE_DELAY = 90;
46
+ /** hover 指针对齐限频,减少 mousemove 高频触发 RAF */
47
+ const HOVER_POINTER_SYNC_INTERVAL = 40;
48
+ /** 调试开关:临时停用 RowSelectPlugin 注入的所有样式逻辑 */
49
+ const ENABLE_ROW_SELECT_PLUGIN_STYLES = true;
50
+ const ROW_HOVER_ACTIVE_CLASS = 'row-hover-active';
51
+ const ROW_HOVER_SELECTED_ACTIVE_CLASS = 'row-hover-selected-active';
52
+ const EMPTY_ROW_STYLE_FLAGS = {
53
+ highlighted: false,
54
+ background: false,
55
+ focused: false,
56
+ };
57
+ // ==================== 工具函数 ====================
58
+ /**
59
+ * 触发自定义事件
60
+ */
61
+ function dispatchCustomEvent(originalEvent, eventName, detail) {
62
+ var _a;
63
+ const customEvent = new CustomEvent(eventName, {
64
+ detail,
65
+ bubbles: true,
66
+ cancelable: true,
67
+ });
68
+ (_a = originalEvent.target) === null || _a === void 0 ? void 0 : _a.dispatchEvent(customEvent);
69
+ }
70
+ /**
71
+ * 获取物理行索引
72
+ */
73
+ function getPhysicalRowIndex(store, virtualIndex) {
74
+ const items = store.get('items');
75
+ return items[virtualIndex];
76
+ }
77
+ /**
78
+ * 创建单元格模板(包装器模式)
79
+ */
80
+ function createCellTemplate(wrapper, ...templates) {
81
+ return (h, props, additionalData) => {
82
+ var _a;
83
+ wrapper(h, props, additionalData);
84
+ for (const template of templates) {
85
+ if (template) {
86
+ return template(h, props, additionalData);
87
+ }
88
+ }
89
+ return (_a = props.value) !== null && _a !== void 0 ? _a : '';
90
+ };
91
+ }
92
+ /**
93
+ * 获取默认单元格值模板
94
+ */
95
+ function getDefaultCellValue(template) {
96
+ return template !== null && template !== void 0 ? template : ((_, props) => { var _a; return (_a = props.value) !== null && _a !== void 0 ? _a : ''; });
97
+ }
98
+ // ==================== CheckboxCellType ====================
99
+ /**
100
+ * 复选框单元格类型
101
+ * 提供复选框的单元格和列头模板
102
+ */
103
+ export class CheckboxCellType {
104
+ constructor() {
105
+ this.readonly = true;
106
+ /**
107
+ * 单元格模板 - 渲染行复选框
108
+ */
109
+ this.cellTemplate = (h, props) => h('input', {
110
+ type: 'checkbox',
111
+ checked: !!props.selected,
112
+ onClick(event) {
113
+ event.preventDefault();
114
+ const detail = Object.assign(Object.assign({}, props), { originalEvent: event });
115
+ dispatchCustomEvent(event, ROW_SELECT_CLICK_EVENT, detail);
116
+ },
117
+ });
118
+ /**
119
+ * 单元格属性
120
+ */
121
+ this.cellProperties = () => ({
122
+ class: 'cell-checkbox',
123
+ });
124
+ /**
125
+ * 列属性
126
+ */
127
+ this.columnProperties = () => ({
128
+ class: 'cell-checkbox',
129
+ });
130
+ /**
131
+ * 列头模板 - 渲染全选复选框
132
+ */
133
+ this.columnTemplate = (h, props) => h('div', {
134
+ class: 'cell-header-checkbox-container',
135
+ }, h('input', {
136
+ ref(element) {
137
+ if (element) {
138
+ element.setAttribute('data-ref', 'ref');
139
+ }
140
+ },
141
+ type: 'checkbox',
142
+ checked: !!props.allSelected,
143
+ indeterminate: !props.allSelected && !!props.allIndeterminate,
144
+ onClick(event) {
145
+ event.preventDefault();
146
+ if (!(event.target instanceof HTMLInputElement))
147
+ return;
148
+ const detail = {
149
+ type: props.providers.type,
150
+ selected: !!event.target.checked,
151
+ };
152
+ dispatchCustomEvent(event, ROW_ALL_SELECT_EVENT, detail);
153
+ },
154
+ }));
155
+ }
156
+ }
157
+ // ==================== RowSelectPlugin ====================
158
+ /**
159
+ * 行选择插件
160
+ * 实现表格行的单选和多选功能
161
+ */
162
+ export class RowSelectPlugin extends BasePlugin {
163
+ constructor(revogrid, providers, config = {}) {
164
+ var _a;
165
+ super(revogrid, providers);
166
+ /** 高亮行的 ID 字段名 */
167
+ this.highlightIdField = 'id';
168
+ /** 行样式 ID 集合,按类型分组存储 */
169
+ this.rowStyleIds = new Map([
170
+ ['highlight', new Set()],
171
+ ['background', new Set()],
172
+ ['focused', new Set()],
173
+ ]);
174
+ /** Hover 同步状态 */
175
+ this.hoverSyncEnabled = false;
176
+ this.hoverRowType = null;
177
+ this.hoverPhysicalIndex = null;
178
+ this.hoverLastPointer = null;
179
+ this.hoverSyncProcessing = false;
180
+ this.hoverResyncTimer = null;
181
+ this.hoverResyncRaf = null;
182
+ this.hoverRenderBlocked = false;
183
+ this.hoverResyncPending = false;
184
+ this.hoverMouseDown = false;
185
+ this.hoverInteractionSuspended = false;
186
+ this.viewportScrollIdleTimer = null;
187
+ this.viewportScrolling = false;
188
+ this.pendingWheelSelectionSyncAfterScroll = false;
189
+ this.lastWheelSelectionSyncAt = 0;
190
+ this.lastHoverPointerSyncAt = 0;
191
+ this.cleanupHoverSync = null;
192
+ this.pendingSelectionAttributeSync = false;
193
+ this.selectionAttributeSyncRaf = null;
194
+ this.postRefreshSyncRaf = null;
195
+ this.wheelRowSelectionSyncRaf = null;
196
+ // 初始化选中集合
197
+ this.selected = (_a = config.initialSelected) !== null && _a !== void 0 ? _a : new Map();
198
+ ROW_TYPES.forEach((type) => {
199
+ if (!this.selected.has(type)) {
200
+ this.selected.set(type, new Set());
201
+ }
202
+ });
203
+ // 保存自定义模板和类型
204
+ this.customCheckboxTemplate = config.checkboxTemplate;
205
+ this.customHeaderCheckboxTemplate = config.headerCheckboxTemplate;
206
+ this.customCheckboxType = config.customCheckboxType;
207
+ this.treeConfig = config.tree;
208
+ this.selectedRowStyle = config.selectedRowStyle;
209
+ this.hoverRowStyle = config.hoverRowStyle;
210
+ this.highlightRowStyle = config.highlightRowStyle;
211
+ this.focusedRowStyle = config.focusedRowStyle;
212
+ this.highlightIdField = config.highlightIdField || 'id';
213
+ // 创建复选框单元格类型实例
214
+ this.checkboxCellType = new CheckboxCellType();
215
+ // 注入自定义样式
216
+ if (ENABLE_ROW_SELECT_PLUGIN_STYLES) {
217
+ this.injectCustomStyles();
218
+ }
219
+ // 监听过滤器应用事件,更新选中状态
220
+ this.addEventListener('afterfilterapply', () => {
221
+ this.blockHoverRender();
222
+ this.emitSelectionChange();
223
+ this.scheduleHoverResync();
224
+ });
225
+ // 渲染完成后兜底同步 hover,避免中间态闪烁
226
+ this.addEventListener('afterrender', () => {
227
+ const shouldResync = this.hoverResyncPending;
228
+ if (this.hoverRenderBlocked) {
229
+ this.hoverRenderBlocked = false;
230
+ }
231
+ if (this.pendingSelectionAttributeSync) {
232
+ this.queueSelectionAttributeSync();
233
+ }
234
+ else if (this.hasAnySelectedRows() || this.hasAnyRowStyles()) {
235
+ // 滚动虚拟渲染过程中,同步 wheel-capture-row 的 selected/行样式,避免“慢一拍”上色
236
+ this.queueWheelRowSelectionSync(true);
237
+ }
238
+ if (shouldResync && this.hoverSyncEnabled) {
239
+ if (this.hoverInteractionSuspended) {
240
+ this.hoverResyncPending = true;
241
+ }
242
+ else {
243
+ this.hoverResyncPending = false;
244
+ this.syncHoverFromPointer();
245
+ }
246
+ }
247
+ });
248
+ // 记录滚动活跃状态,用于限频 wheel-capture 的 selected 同步
249
+ this.addEventListener('scrollviewport', () => {
250
+ this.markViewportScrolling();
251
+ });
252
+ // 监听行选择点击事件
253
+ this.addEventListener(ROW_SELECT_CLICK_EVENT, (event) => {
254
+ if (event.defaultPrevented)
255
+ return;
256
+ const { detail } = event;
257
+ const selectedSet = this.selected.get(detail.type);
258
+ if (!selectedSet)
259
+ return;
260
+ const dataStore = providers.data.stores[detail.type];
261
+ const physicalIndex = getPhysicalRowIndex(dataStore.store, detail.rowIndex);
262
+ const isShiftKey = detail.originalEvent.shiftKey;
263
+ // 处理 Shift 键多选
264
+ if (isShiftKey && this.lastSelectedIndex !== undefined) {
265
+ const startIndex = this.lastSelectedIndex;
266
+ const minIndex = Math.min(startIndex, physicalIndex);
267
+ const maxIndex = Math.max(startIndex, physicalIndex);
268
+ // 选中范围内的所有行
269
+ for (let i = minIndex; i <= maxIndex; i++) {
270
+ selectedSet.add(i);
271
+ }
272
+ this.lastSelectedIndex = physicalIndex;
273
+ }
274
+ else {
275
+ // 单击切换选中状态
276
+ const willSelect = !selectedSet.has(physicalIndex);
277
+ if (willSelect) {
278
+ selectedSet.add(physicalIndex);
279
+ this.lastSelectedIndex = physicalIndex;
280
+ }
281
+ else {
282
+ selectedSet.delete(physicalIndex);
283
+ this.lastSelectedIndex = undefined;
284
+ }
285
+ // 如果配置了树形数据,处理父子节点联动
286
+ if (this.treeConfig) {
287
+ const source = dataStore.store.get('source');
288
+ const currentRow = source[physicalIndex];
289
+ if (currentRow) {
290
+ // 获取所有子节点
291
+ const childIndices = this.getChildrenIndices(source, currentRow);
292
+ console.log('🟢 复选框点击 - 树形联动:', {
293
+ parentIndex: physicalIndex,
294
+ parentRowKey: currentRow[this.treeConfig.idField],
295
+ willSelect,
296
+ childIndices,
297
+ childCount: childIndices.length,
298
+ });
299
+ // 同步子节点的选中状态
300
+ childIndices.forEach((childIndex) => {
301
+ if (willSelect) {
302
+ selectedSet.add(childIndex);
303
+ }
304
+ else {
305
+ selectedSet.delete(childIndex);
306
+ }
307
+ });
308
+ }
309
+ }
310
+ }
311
+ this.emitSelectionChange();
312
+ this.refreshViewports();
313
+ });
314
+ // 监听全选事件
315
+ this.addEventListener(ROW_ALL_SELECT_EVENT, (event) => {
316
+ const { detail } = event;
317
+ this.lastSelectedIndex = undefined;
318
+ ROW_TYPES.forEach((rowType) => {
319
+ const selectedSet = this.selected.get(rowType);
320
+ if (!selectedSet)
321
+ return;
322
+ const dataStore = providers.data.stores[rowType];
323
+ const source = dataStore.store.get('source');
324
+ const proxyItems = dataStore.store.get('proxyItems');
325
+ if (detail.selected) {
326
+ // 全选:批量添加所有非分组行的索引
327
+ const indicesToAdd = [];
328
+ proxyItems.forEach((itemIndex) => {
329
+ const rowData = source[itemIndex];
330
+ // 跳过分组行(分组行有 __rvgr-depth 标记)
331
+ if (rowData && rowData['__rvgr-depth'] !== undefined) {
332
+ return;
333
+ }
334
+ indicesToAdd.push(itemIndex);
335
+ });
336
+ // 批量添加到 Set(比逐个 add 快很多)
337
+ indicesToAdd.forEach(index => selectedSet.add(index));
338
+ }
339
+ else {
340
+ // 取消全选:直接清空 Set
341
+ selectedSet.clear();
342
+ }
343
+ });
344
+ this.emitSelectionChange();
345
+ this.refreshViewports();
346
+ });
347
+ // 监听列头渲染事件
348
+ this.addEventListener(BEFORE_HEADER_RENDER_EVENT, (event) => {
349
+ const columnData = event.detail.data;
350
+ if (this.isCheckboxColumn(columnData)) {
351
+ // 如果用户提供了自定义 columnType,使用自定义类型
352
+ const baseType = this.customCheckboxType || this.checkboxCellType;
353
+ event.detail.data = Object.assign(Object.assign(Object.assign({}, baseType), columnData), { columnTemplate: this.createHeaderTemplate(columnData) });
354
+ }
355
+ });
356
+ // 监听单元格渲染事件
357
+ this.addEventListener(BEFORE_CELL_RENDER_EVENT, (event) => {
358
+ const { detail } = event;
359
+ let column = detail.model.column;
360
+ if (this.isCheckboxColumn(column)) {
361
+ // 检查 rowSelect 是否为函数,如果是则调用判断是否显示
362
+ if (typeof column.rowSelect === 'function' && !column.rowSelect(detail.model)) {
363
+ // 不显示复选框
364
+ }
365
+ else {
366
+ // 如果用户提供了自定义 columnType,使用自定义类型
367
+ const baseType = this.customCheckboxType || this.checkboxCellType;
368
+ column = Object.assign(Object.assign(Object.assign({}, baseType), column), { cellTemplate: createCellTemplate(this.cellTemplateWrapper.bind(this), this.createCellCheckboxTemplate(), getDefaultCellValue(column.cellTemplate)) });
369
+ }
370
+ }
371
+ detail.model = Object.assign(Object.assign({}, detail.model), { column });
372
+ });
373
+ // 监听行渲染事件 - 设置行的选中属性(包括行号列)
374
+ this.addEventListener(BEFORE_ROW_RENDER_EVENT, (event) => {
375
+ var _a, _b, _c, _d, _e, _f;
376
+ const { detail } = event;
377
+ // detail.item.itemIndex 已经是物理索引,不需要再转换
378
+ const physicalIndex = detail.item.itemIndex;
379
+ const hasActiveHoverRow = this.hoverRowType !== null && this.hoverPhysicalIndex !== null;
380
+ const shouldProcessHoverClass = this.hoverSyncEnabled &&
381
+ !this.hoverInteractionSuspended &&
382
+ !!((_a = this.hoverRowStyle) === null || _a === void 0 ? void 0 : _a.backgroundColor) &&
383
+ hasActiveHoverRow;
384
+ const hasAnySelected = !!((_b = this.selected.get('rowPinStart')) === null || _b === void 0 ? void 0 : _b.size) ||
385
+ !!((_c = this.selected.get('rgRow')) === null || _c === void 0 ? void 0 : _c.size) ||
386
+ !!((_d = this.selected.get('rowPinEnd')) === null || _d === void 0 ? void 0 : _d.size);
387
+ const hasAnyRowStyle = this.hasAnyRowStyles();
388
+ if (!hasAnySelected && !shouldProcessHoverClass && !hasAnyRowStyle) {
389
+ return;
390
+ }
391
+ const rowType = detail.rowType;
392
+ const styleFlags = hasAnyRowStyle && ROW_TYPES.includes(rowType)
393
+ ? this.getRowStyleFlags(rowType, physicalIndex)
394
+ : EMPTY_ROW_STYLE_FLAGS;
395
+ const hoverType = this.hoverRowType;
396
+ const hoverPhysical = this.hoverPhysicalIndex;
397
+ const isSelectedRowForHover = ROW_TYPES.includes(rowType) && this.isRowSelected(rowType, physicalIndex);
398
+ const isHoverTarget = shouldProcessHoverClass &&
399
+ hoverType !== null &&
400
+ hoverPhysical !== null &&
401
+ hoverType === detail.rowType &&
402
+ hoverPhysical === physicalIndex;
403
+ const shouldHover = isHoverTarget && !isSelectedRowForHover;
404
+ const shouldSelectedHover = isHoverTarget && isSelectedRowForHover;
405
+ const syncHoverClass = (attrs) => {
406
+ if (!shouldProcessHoverClass) {
407
+ return;
408
+ }
409
+ const existingClass = attrs.class;
410
+ if (typeof existingClass === 'string') {
411
+ const hasHover = existingClass.includes(ROW_HOVER_ACTIVE_CLASS);
412
+ const hasSelectedHover = existingClass.includes(ROW_HOVER_SELECTED_ACTIVE_CLASS);
413
+ if (hasHover === shouldHover && hasSelectedHover === shouldSelectedHover) {
414
+ return;
415
+ }
416
+ let nextClass = existingClass;
417
+ nextClass = shouldHover
418
+ ? `${nextClass} ${ROW_HOVER_ACTIVE_CLASS}`
419
+ : nextClass.replace(/\brow-hover-active\b/g, '');
420
+ nextClass = shouldSelectedHover
421
+ ? `${nextClass} ${ROW_HOVER_SELECTED_ACTIVE_CLASS}`
422
+ : nextClass.replace(/\brow-hover-selected-active\b/g, '');
423
+ attrs.class = nextClass.replace(/\s+/g, ' ').trim();
424
+ return;
425
+ }
426
+ if (existingClass && typeof existingClass === 'object') {
427
+ if (existingClass[ROW_HOVER_ACTIVE_CLASS] === shouldHover &&
428
+ existingClass[ROW_HOVER_SELECTED_ACTIVE_CLASS] === shouldSelectedHover) {
429
+ return;
430
+ }
431
+ attrs.class = Object.assign(Object.assign({}, existingClass), { [ROW_HOVER_ACTIVE_CLASS]: shouldHover, [ROW_HOVER_SELECTED_ACTIVE_CLASS]: shouldSelectedHover });
432
+ return;
433
+ }
434
+ if (shouldHover || shouldSelectedHover) {
435
+ attrs.class = shouldSelectedHover ? ROW_HOVER_SELECTED_ACTIVE_CLASS : ROW_HOVER_ACTIVE_CLASS;
436
+ }
437
+ };
438
+ // 处理数据行
439
+ if (ROW_TYPES.includes(detail.rowType) && detail.colType !== 'rowHeaders') {
440
+ const isSelected = (_e = this.selected.get(detail.rowType)) === null || _e === void 0 ? void 0 : _e.has(physicalIndex);
441
+ const attrs = Object.assign(Object.assign({}, detail.node.$attrs$), { [SELECTED_ATTRIBUTE]: !!isSelected });
442
+ this.applyRowStyleFlagsToAttrs(attrs, styleFlags);
443
+ syncHoverClass(attrs);
444
+ detail.node.$attrs$ = attrs;
445
+ }
446
+ // 处理行号列(rowHeaders)
447
+ if (detail.colType === 'rowHeaders') {
448
+ // 行号列的行索引与数据行相同
449
+ const rowType = detail.rowType;
450
+ if (ROW_TYPES.includes(rowType)) {
451
+ const isSelected = (_f = this.selected.get(rowType)) === null || _f === void 0 ? void 0 : _f.has(physicalIndex);
452
+ const attrs = Object.assign(Object.assign({}, detail.node.$attrs$), { [SELECTED_ATTRIBUTE]: !!isSelected });
453
+ this.applyRowStyleFlagsToAttrs(attrs, styleFlags);
454
+ syncHoverClass(attrs);
455
+ detail.node.$attrs$ = attrs;
456
+ }
457
+ }
458
+ });
459
+ // 监听树形行选择事件
460
+ this.addEventListener(TREE_ROW_SELECT_EVENT, (event) => {
461
+ const { detail } = event;
462
+ const selectedSet = this.selected.get(detail.type);
463
+ if (!selectedSet)
464
+ return;
465
+ // 切换父节点和子节点的选中状态
466
+ if (!selectedSet.has(detail.parentIndex)) {
467
+ // 如果父节点未选中,则选中父节点和所有子节点
468
+ selectedSet.add(detail.parentIndex);
469
+ detail.childrenIndices.forEach((childIndex) => selectedSet.add(childIndex));
470
+ }
471
+ else {
472
+ // 如果父节点已选中,则取消选中父节点和所有子节点
473
+ detail.childrenIndices.forEach((childIndex) => selectedSet.delete(childIndex));
474
+ selectedSet.delete(detail.parentIndex);
475
+ }
476
+ this.emitSelectionChange();
477
+ this.refreshViewports();
478
+ });
479
+ // 监听分组展开/折叠事件,更新选中状态显示
480
+ this.addEventListener('groupexpandclick', () => {
481
+ this.blockHoverRender();
482
+ this.pendingSelectionAttributeSync = true;
483
+ });
484
+ // 监听树形节点展开/折叠事件,更新选中状态显示
485
+ this.addEventListener('treenodetoggle', () => {
486
+ this.blockHoverRender();
487
+ this.pendingSelectionAttributeSync = true;
488
+ });
489
+ }
490
+ // ==================== 公共方法 ====================
491
+ /**
492
+ * 获取所有选中行的索引
493
+ */
494
+ getSelectedIndexes() {
495
+ return this.selected;
496
+ }
497
+ /**
498
+ * 获取选中行的数据
499
+ */
500
+ getSelectedRows() {
501
+ const result = new Map();
502
+ this.selected.forEach((selectedSet, rowType) => {
503
+ const dataStore = this.providers.data.stores[rowType];
504
+ const source = dataStore.store.get('source');
505
+ const rows = [];
506
+ selectedSet.forEach((physicalIndex) => {
507
+ if (source[physicalIndex]) {
508
+ rows.push(source[physicalIndex]);
509
+ }
510
+ });
511
+ result.set(rowType, rows);
512
+ });
513
+ return result;
514
+ }
515
+ /**
516
+ * 清空所有选中
517
+ */
518
+ clearSelection() {
519
+ this.selected.forEach((selectedSet) => selectedSet.clear());
520
+ this.lastSelectedIndex = undefined;
521
+ this.emitSelectionChange();
522
+ this.refreshViewports();
523
+ }
524
+ /**
525
+ * 全选所有行(触发全选事件)
526
+ */
527
+ selectAll() {
528
+ // 触发全选事件
529
+ const event = new CustomEvent('rowallselect', {
530
+ detail: {
531
+ type: 'rgRow',
532
+ selected: true,
533
+ },
534
+ bubbles: true,
535
+ });
536
+ this.revogrid.dispatchEvent(event);
537
+ }
538
+ /**
539
+ * 取消全选(触发取消全选事件)
540
+ */
541
+ deselectAll() {
542
+ // 触发取消全选事件
543
+ const event = new CustomEvent('rowallselect', {
544
+ detail: {
545
+ type: 'rgRow',
546
+ selected: false,
547
+ },
548
+ bubbles: true,
549
+ });
550
+ this.revogrid.dispatchEvent(event);
551
+ }
552
+ /**
553
+ * 选中指定行(支持树形联动)
554
+ */
555
+ selectRows(rowType, indices) {
556
+ const selectedSet = this.selected.get(rowType);
557
+ if (!selectedSet)
558
+ return;
559
+ const indicesToSelect = [...indices];
560
+ // 如果配置了树形数据,处理父子节点联动
561
+ if (this.treeConfig) {
562
+ const dataStore = this.providers.data.stores[rowType];
563
+ const source = dataStore.store.get('source');
564
+ indices.forEach((index) => {
565
+ const row = source[index];
566
+ if (row) {
567
+ const { idField, parentIdField } = this.treeConfig;
568
+ const parentId = row[idField];
569
+ console.log('🔵 selectRows - 父节点信息:', {
570
+ parentIndex: index,
571
+ idField,
572
+ parentIdField,
573
+ parentId,
574
+ parentRowData: row,
575
+ });
576
+ // 获取所有子节点
577
+ const childIndices = this.getChildrenIndices(source, row);
578
+ // 打印找到的子节点
579
+ childIndices.forEach(childIdx => {
580
+ const childRow = source[childIdx];
581
+ console.log('🔵 找到子节点:', {
582
+ childIndex: childIdx,
583
+ childParentId: childRow === null || childRow === void 0 ? void 0 : childRow[parentIdField],
584
+ childRowKey: childRow === null || childRow === void 0 ? void 0 : childRow.rowKey,
585
+ });
586
+ });
587
+ console.log('🔵 selectRows - 树形联动结果:', {
588
+ parentIndex: index,
589
+ childIndices,
590
+ childCount: childIndices.length,
591
+ });
592
+ indicesToSelect.push(...childIndices);
593
+ }
594
+ });
595
+ }
596
+ console.log('🔵 selectRows - 最终选中索引:', indicesToSelect);
597
+ indicesToSelect.forEach((index) => selectedSet.add(index));
598
+ this.emitSelectionChange();
599
+ this.refreshViewports();
600
+ }
601
+ /**
602
+ * 取消选中指定行(支持树形联动)
603
+ */
604
+ deselectRows(rowType, indices) {
605
+ const selectedSet = this.selected.get(rowType);
606
+ if (!selectedSet)
607
+ return;
608
+ const indicesToDeselect = [...indices];
609
+ // 如果配置了树形数据,处理父子节点联动
610
+ if (this.treeConfig) {
611
+ const dataStore = this.providers.data.stores[rowType];
612
+ const source = dataStore.store.get('source');
613
+ indices.forEach((index) => {
614
+ const row = source[index];
615
+ if (row) {
616
+ // 获取所有子节点
617
+ const childIndices = this.getChildrenIndices(source, row);
618
+ indicesToDeselect.push(...childIndices);
619
+ }
620
+ });
621
+ }
622
+ indicesToDeselect.forEach((index) => selectedSet.delete(index));
623
+ this.emitSelectionChange();
624
+ this.refreshViewports();
625
+ }
626
+ /**
627
+ * 获取选中行的指定字段值列表
628
+ * @param field 字段名,如 'id'、'key' 等
629
+ * @param rowType 行类型,默认 'rgRow'
630
+ * @returns 字段值数组
631
+ */
632
+ getSelectedFieldValues(field, rowType = 'rgRow') {
633
+ const selectedSet = this.selected.get(rowType);
634
+ if (!selectedSet)
635
+ return [];
636
+ const dataStore = this.providers.data.stores[rowType];
637
+ const source = dataStore.store.get('source');
638
+ const values = [];
639
+ selectedSet.forEach((physicalIndex) => {
640
+ const row = source[physicalIndex];
641
+ if (row && row[field] !== undefined) {
642
+ values.push(row[field]);
643
+ }
644
+ });
645
+ return values;
646
+ }
647
+ /**
648
+ * 获取所有选中行的数据(扁平数组)
649
+ * @param rowType 行类型,默认 'rgRow'
650
+ * @returns 选中行数据数组
651
+ */
652
+ getSelectedData(rowType = 'rgRow') {
653
+ const selectedSet = this.selected.get(rowType);
654
+ if (!selectedSet)
655
+ return [];
656
+ const dataStore = this.providers.data.stores[rowType];
657
+ const source = dataStore.store.get('source');
658
+ const rows = [];
659
+ selectedSet.forEach((physicalIndex) => {
660
+ if (source[physicalIndex]) {
661
+ rows.push(source[physicalIndex]);
662
+ }
663
+ });
664
+ return rows;
665
+ }
666
+ /**
667
+ * 获取选中的根节点数据(过滤掉子节点)
668
+ * 用于树形数据场景,只返回顶层选中的节点
669
+ * @param rowType 行类型,默认 'rgRow'
670
+ * @returns 根节点数据数组
671
+ */
672
+ getSelectedRootData(rowType = 'rgRow') {
673
+ if (!this.treeConfig) {
674
+ // 没有配置树形,返回所有选中数据
675
+ return this.getSelectedData(rowType);
676
+ }
677
+ const { idField, parentIdField, rootParentId } = this.treeConfig;
678
+ const selectedData = this.getSelectedData(rowType);
679
+ // 构建选中 ID 集合
680
+ const selectedIds = new Set(selectedData.map(row => row[idField]));
681
+ // 过滤:只保留父节点不在选中集合中的行(即根节点)
682
+ return selectedData.filter(row => {
683
+ const parentId = row[parentIdField];
684
+ // 如果父 ID 是根节点值,或者父节点不在选中集合中,则为根节点
685
+ return parentId === rootParentId || parentId === null || parentId === undefined || !selectedIds.has(parentId);
686
+ });
687
+ }
688
+ /**
689
+ * 获取选中根节点的指定字段值列表(过滤掉子节点)
690
+ * @param field 字段名,如 'id'、'key' 等
691
+ * @param rowType 行类型,默认 'rgRow'
692
+ * @returns 字段值数组
693
+ */
694
+ getSelectedRootFieldValues(field, rowType = 'rgRow') {
695
+ const rootData = this.getSelectedRootData(rowType);
696
+ return rootData
697
+ .filter(row => row[field] !== undefined)
698
+ .map(row => row[field]);
699
+ }
700
+ /**
701
+ * 根据 ID 高亮某一行
702
+ * @param id 行的 ID 值
703
+ * @param idField 可选,ID 字段名,默认使用配置的 highlightIdField
704
+ * @deprecated 请使用 applyRowStyle('highlight', [id], idField) 代替
705
+ */
706
+ highlightRowById(id, idField) {
707
+ this.applyRowStyle('highlight', [id], idField);
708
+ }
709
+ /**
710
+ * 清除行高亮
711
+ * @deprecated 请使用 clearRowStyle('highlight') 代替
712
+ */
713
+ clearHighlight() {
714
+ this.clearRowStyle('highlight');
715
+ }
716
+ /**
717
+ * 获取当前高亮的行 ID
718
+ * @deprecated 请使用 getRowStyleIds('highlight') 代替
719
+ */
720
+ getHighlightedRowId() {
721
+ const ids = this.rowStyleIds.get('highlight');
722
+ return ids && ids.size > 0 ? Array.from(ids)[0] : null;
723
+ }
724
+ /**
725
+ * 获取当前高亮的行数据
726
+ * @param rowType 行类型,默认 'rgRow'
727
+ */
728
+ getHighlightedRowData(rowType = 'rgRow') {
729
+ const highlightedId = this.getHighlightedRowId();
730
+ if (highlightedId === null)
731
+ return null;
732
+ const dataStore = this.providers.data.stores[rowType];
733
+ const source = dataStore.store.get('source');
734
+ for (const row of source) {
735
+ if (row && row[this.highlightIdField] === highlightedId) {
736
+ return row;
737
+ }
738
+ }
739
+ return null;
740
+ }
741
+ /**
742
+ * 为指定行应用样式(高亮或背景色)
743
+ * @param type 样式类型:'highlight' 使用高亮色,'background' 使用 hover 背景色
744
+ * @param ids 行的 ID 值数组
745
+ * @param idField 可选,ID 字段名,默认使用配置的 highlightIdField
746
+ */
747
+ applyRowStyle(type, ids, idField) {
748
+ const styleSet = this.rowStyleIds.get(type);
749
+ if (!styleSet)
750
+ return;
751
+ ids.forEach((id) => styleSet.add(id));
752
+ this.updateRowStyleAttribute(type, idField || this.highlightIdField);
753
+ }
754
+ /**
755
+ * 移除指定行的样式
756
+ * @param type 样式类型:'highlight' 或 'background'
757
+ * @param ids 行的 ID 值数组,如果不传则移除该类型所有行的样式
758
+ * @param idField 可选,ID 字段名,默认使用配置的 highlightIdField
759
+ */
760
+ removeRowStyle(type, ids, idField) {
761
+ const styleSet = this.rowStyleIds.get(type);
762
+ if (!styleSet)
763
+ return;
764
+ if (ids) {
765
+ ids.forEach((id) => styleSet.delete(id));
766
+ }
767
+ else {
768
+ styleSet.clear();
769
+ }
770
+ this.updateRowStyleAttribute(type, idField || this.highlightIdField);
771
+ }
772
+ /**
773
+ * 清除指定类型的所有行样式
774
+ * @param type 样式类型:'highlight' 或 'background'
775
+ */
776
+ clearRowStyle(type) {
777
+ const styleSet = this.rowStyleIds.get(type);
778
+ if (!styleSet)
779
+ return;
780
+ styleSet.clear();
781
+ this.clearRowStyleAttribute(type);
782
+ this.refreshViewports();
783
+ }
784
+ /**
785
+ * 获取已应用样式的行 ID
786
+ * @param type 样式类型:'highlight' 或 'background'
787
+ */
788
+ getRowStyleIds(type) {
789
+ return this.rowStyleIds.get(type) || new Set();
790
+ }
791
+ /**
792
+ * 清除所有行样式(高亮和背景色)
793
+ */
794
+ clearAllRowStyles() {
795
+ this.rowStyleIds.forEach((styleSet, type) => {
796
+ styleSet.clear();
797
+ this.clearRowStyleAttribute(type);
798
+ });
799
+ this.refreshViewports();
800
+ }
801
+ // ==================== 私有方法 ====================
802
+ /**
803
+ * 注入自定义样式
804
+ */
805
+ injectCustomStyles() {
806
+ var _a, _b, _c, _d, _e, _f, _g, _j, _k, _l, _m;
807
+ if (!ENABLE_ROW_SELECT_PLUGIN_STYLES) {
808
+ return;
809
+ }
810
+ // 如果没有配置样式,则不注入
811
+ if (!this.selectedRowStyle && !this.hoverRowStyle && !this.highlightRowStyle && !this.focusedRowStyle) {
812
+ return;
813
+ }
814
+ // 创建 style 元素
815
+ this.styleElement = document.createElement('style');
816
+ this.styleElement.setAttribute('data-revogrid-row-select-styles', '');
817
+ // 设置 CSS 变量到 revo-grid 元素
818
+ if ((_a = this.selectedRowStyle) === null || _a === void 0 ? void 0 : _a.backgroundColor) {
819
+ this.revogrid.style.setProperty('--revo-row-selected-bg', this.selectedRowStyle.backgroundColor);
820
+ }
821
+ if ((_b = this.highlightRowStyle) === null || _b === void 0 ? void 0 : _b.backgroundColor) {
822
+ this.revogrid.style.setProperty('--revo-row-highlight-bg', this.highlightRowStyle.backgroundColor);
823
+ }
824
+ else if ((_c = this.selectedRowStyle) === null || _c === void 0 ? void 0 : _c.backgroundColor) {
825
+ // 默认使用选中行的颜色
826
+ this.revogrid.style.setProperty('--revo-row-highlight-bg', this.selectedRowStyle.backgroundColor);
827
+ }
828
+ if ((_d = this.focusedRowStyle) === null || _d === void 0 ? void 0 : _d.backgroundColor) {
829
+ this.revogrid.style.setProperty('--revo-row-focused-bg', this.focusedRowStyle.backgroundColor);
830
+ }
831
+ if ((_e = this.hoverRowStyle) === null || _e === void 0 ? void 0 : _e.backgroundColor) {
832
+ this.revogrid.style.setProperty('--revo-row-hover-bg', this.hoverRowStyle.backgroundColor);
833
+ }
834
+ let css = '';
835
+ // wheel-capture 行默认透明,避免滚动虚拟渲染时短暂覆盖底层单元格/行背景导致闪烁
836
+ css += `
837
+ revo-grid .wheel-capture-row {
838
+ background-color: transparent !important;
839
+ }
840
+ `;
841
+ // 选中行样式 - 作用在真实数据行,避免 overlay 层覆盖单元格内容导致闪烁
842
+ if ((_f = this.selectedRowStyle) === null || _f === void 0 ? void 0 : _f.backgroundColor) {
843
+ css += `
844
+ revo-grid revogr-data .rgRow:not(.groupingRow)[selected='true'],
845
+ revo-grid revogr-data .rgRow:not(.groupingRow)[selected=''],
846
+ revo-grid revogr-data .rgRow:not(.groupingRow)[selected] {
847
+ background-color: var(--revo-row-selected-bg) !important;
848
+ }
849
+ revo-grid .wheel-capture-row[selected] {
850
+ background-color: var(--revo-row-selected-bg) !important;
851
+ }
852
+ `;
853
+ }
854
+ // 高亮行样式 - 独立于选中状态
855
+ if (((_g = this.highlightRowStyle) === null || _g === void 0 ? void 0 : _g.backgroundColor) || ((_j = this.selectedRowStyle) === null || _j === void 0 ? void 0 : _j.backgroundColor)) {
856
+ css += `
857
+ revo-grid revogr-data .rgRow:not(.groupingRow)[data-highlighted='true'],
858
+ revo-grid .wheel-capture-row[data-highlighted='true'] {
859
+ background-color: var(--revo-row-highlight-bg) !important;
860
+ }
861
+ `;
862
+ }
863
+ // 聚焦行样式 - 独立样式,优先级最高
864
+ if ((_k = this.focusedRowStyle) === null || _k === void 0 ? void 0 : _k.backgroundColor) {
865
+ css += `
866
+ revo-grid revogr-data .rgRow:not(.groupingRow)[data-focused='true'],
867
+ revo-grid .wheel-capture-row[data-focused='true'] {
868
+ background-color: var(--revo-row-focused-bg) !important;
869
+ }
870
+ `;
871
+ }
872
+ // 未选中行 hover 样式 - 作用在真实数据行;分组行保留 overlay 路径
873
+ if ((_l = this.hoverRowStyle) === null || _l === void 0 ? void 0 : _l.backgroundColor) {
874
+ css += `
875
+ revo-grid revogr-data .rgRow:not(.groupingRow).row-hover-active:not([selected]):not([data-focused='true']) {
876
+ background-color: var(--revo-row-hover-bg) !important;
877
+ }
878
+ revo-grid revogr-grouping-overlay .rgRow.groupingRow.row-hover-active:not([selected]):not([data-focused='true']) {
879
+ background-color: var(--revo-row-hover-bg) !important;
880
+ }
881
+ revo-grid .wheel-capture-row.row-hover-active:not([selected]):not([data-focused='true']) {
882
+ background-color: var(--revo-row-hover-bg) !important;
883
+ }
884
+ /* 程序化应用背景色样式 - 沿用 hover 样式配置 */
885
+ revo-grid revogr-data .rgRow:not(.groupingRow)[data-row-bg='true']:not([selected]):not([data-focused='true']) {
886
+ background-color: var(--revo-row-hover-bg) !important;
887
+ }
888
+ revo-grid revogr-grouping-overlay .rgRow.groupingRow[data-row-bg='true']:not([selected]):not([data-focused='true']) {
889
+ background-color: var(--revo-row-hover-bg) !important;
890
+ }
891
+ revo-grid .wheel-capture-row[data-row-bg='true']:not([selected]):not([data-focused='true']) {
892
+ background-color: var(--revo-row-hover-bg) !important;
893
+ }
894
+ /* 滚动期间临时禁用行层 pointer events,减少 pointerover 带来的样式重算 */
895
+ revo-grid.row-hover-suspended revogr-grouping-overlay .rgRow,
896
+ revo-grid.row-hover-suspended revogr-data .rgRow,
897
+ revo-grid.row-hover-suspended .wheel-capture-row {
898
+ pointer-events: none !important;
899
+ }
900
+ `;
901
+ }
902
+ this.styleElement.textContent = css;
903
+ document.head.appendChild(this.styleElement);
904
+ // 仅在启用 hover 样式时添加跨视口 hover 同步监听,避免不必要的滚动计算
905
+ if ((_m = this.hoverRowStyle) === null || _m === void 0 ? void 0 : _m.backgroundColor) {
906
+ this.setupHoverSync();
907
+ }
908
+ }
909
+ /**
910
+ * 设置 hover 同步(跨视口)
911
+ * 通过添加/移除 row-hover-active 类实现跨视口的 hover 效果
912
+ */
913
+ getRowTypeFromElement(row) {
914
+ if (!row) {
915
+ return null;
916
+ }
917
+ const container = row.closest('revogr-data, revogr-grouping-overlay');
918
+ if (!container) {
919
+ return null;
920
+ }
921
+ if (container.tagName === 'REVOGR-GROUPING-OVERLAY') {
922
+ return 'rgRow';
923
+ }
924
+ const rawType = container.getAttribute('type') || container.type;
925
+ if (rawType === 'rowHeaders') {
926
+ return 'rgRow';
927
+ }
928
+ if (rawType && ROW_TYPES.includes(rawType)) {
929
+ return rawType;
930
+ }
931
+ return null;
932
+ }
933
+ getPhysicalIndexFromRow(row, rowType) {
934
+ const rowIndexAttr = row.getAttribute('data-rgRow');
935
+ if (!rowIndexAttr) {
936
+ return null;
937
+ }
938
+ const virtualIndex = Number(rowIndexAttr);
939
+ if (Number.isNaN(virtualIndex)) {
940
+ return null;
941
+ }
942
+ const store = this.providers.data.stores[rowType];
943
+ if (!store) {
944
+ return null;
945
+ }
946
+ const items = store.store.get('items');
947
+ const physicalIndex = items[virtualIndex];
948
+ return physicalIndex === undefined ? null : physicalIndex;
949
+ }
950
+ getVirtualIndexFromPhysical(rowType, physicalIndex) {
951
+ const store = this.providers.data.stores[rowType];
952
+ if (!store) {
953
+ return null;
954
+ }
955
+ const items = store.store.get('items');
956
+ const virtualIndex = items.indexOf(physicalIndex);
957
+ return virtualIndex === -1 ? null : virtualIndex;
958
+ }
959
+ getRowElementsByVirtualIndex(rowType, virtualIndex) {
960
+ const selectors = [
961
+ `revogr-data[type="${rowType}"] .rgRow[data-rgRow="${virtualIndex}"]`,
962
+ ];
963
+ if (rowType === 'rgRow') {
964
+ selectors.push(`revogr-grouping-overlay .rgRow[data-rgRow="${virtualIndex}"]`);
965
+ selectors.push(`revogr-data[type="rowHeaders"] .rgRow[data-rgRow="${virtualIndex}"]`);
966
+ }
967
+ const selector = selectors.join(', ');
968
+ return this.revogrid.querySelectorAll(selector);
969
+ }
970
+ isRowSelected(rowType, physicalIndex) {
971
+ var _a;
972
+ return !!((_a = this.selected.get(rowType)) === null || _a === void 0 ? void 0 : _a.has(physicalIndex));
973
+ }
974
+ applyHoverClass(rowType, physicalIndex) {
975
+ const virtualIndex = this.getVirtualIndexFromPhysical(rowType, physicalIndex);
976
+ if (virtualIndex === null) {
977
+ return false;
978
+ }
979
+ const isSelected = this.isRowSelected(rowType, physicalIndex);
980
+ const allRowsWithSameIndex = this.getRowElementsByVirtualIndex(rowType, virtualIndex);
981
+ allRowsWithSameIndex.forEach((row) => {
982
+ row.classList.remove(isSelected ? ROW_HOVER_ACTIVE_CLASS : ROW_HOVER_SELECTED_ACTIVE_CLASS);
983
+ row.classList.add(isSelected ? ROW_HOVER_SELECTED_ACTIVE_CLASS : ROW_HOVER_ACTIVE_CLASS);
984
+ });
985
+ return true;
986
+ }
987
+ clearHoverClass(rowType, physicalIndex) {
988
+ const allHoverRows = this.revogrid.querySelectorAll(`.rgRow.${ROW_HOVER_ACTIVE_CLASS}, .rgRow.${ROW_HOVER_SELECTED_ACTIVE_CLASS}`);
989
+ allHoverRows.forEach((row) => {
990
+ const type = this.getRowTypeFromElement(row);
991
+ if (!type || type !== rowType) {
992
+ return;
993
+ }
994
+ const rowPhysical = this.getPhysicalIndexFromRow(row, type);
995
+ if (rowPhysical === physicalIndex) {
996
+ row.classList.remove(ROW_HOVER_ACTIVE_CLASS);
997
+ row.classList.remove(ROW_HOVER_SELECTED_ACTIVE_CLASS);
998
+ }
999
+ });
1000
+ }
1001
+ clearAllHoverClass() {
1002
+ if (this.hoverRowType === null && this.hoverPhysicalIndex === null) {
1003
+ return;
1004
+ }
1005
+ const allHoverRows = this.revogrid.querySelectorAll(`.rgRow.${ROW_HOVER_ACTIVE_CLASS}, .rgRow.${ROW_HOVER_SELECTED_ACTIVE_CLASS}`);
1006
+ allHoverRows.forEach((row) => {
1007
+ row.classList.remove(ROW_HOVER_ACTIVE_CLASS);
1008
+ row.classList.remove(ROW_HOVER_SELECTED_ACTIVE_CLASS);
1009
+ });
1010
+ this.hoverRowType = null;
1011
+ this.hoverPhysicalIndex = null;
1012
+ }
1013
+ normalizeHoverClasses(expectedType, expectedPhysicalIndex) {
1014
+ const allHoverRows = this.revogrid.querySelectorAll(`.rgRow.${ROW_HOVER_ACTIVE_CLASS}, .rgRow.${ROW_HOVER_SELECTED_ACTIVE_CLASS}`);
1015
+ allHoverRows.forEach((row) => {
1016
+ const type = this.getRowTypeFromElement(row);
1017
+ const physicalIndex = type ? this.getPhysicalIndexFromRow(row, type) : null;
1018
+ if (!expectedType ||
1019
+ expectedPhysicalIndex === null ||
1020
+ type !== expectedType ||
1021
+ physicalIndex !== expectedPhysicalIndex) {
1022
+ row.classList.remove(ROW_HOVER_ACTIVE_CLASS);
1023
+ row.classList.remove(ROW_HOVER_SELECTED_ACTIVE_CLASS);
1024
+ }
1025
+ });
1026
+ if (expectedType && expectedPhysicalIndex !== null) {
1027
+ const applied = this.applyHoverClass(expectedType, expectedPhysicalIndex);
1028
+ if (applied) {
1029
+ this.hoverRowType = expectedType;
1030
+ this.hoverPhysicalIndex = expectedPhysicalIndex;
1031
+ }
1032
+ else {
1033
+ this.hoverRowType = null;
1034
+ this.hoverPhysicalIndex = null;
1035
+ }
1036
+ }
1037
+ else {
1038
+ this.hoverRowType = null;
1039
+ this.hoverPhysicalIndex = null;
1040
+ }
1041
+ }
1042
+ updateHoverFromRow(row) {
1043
+ if (!row) {
1044
+ if (this.hoverRowType && this.hoverPhysicalIndex !== null) {
1045
+ this.clearHoverClass(this.hoverRowType, this.hoverPhysicalIndex);
1046
+ }
1047
+ this.hoverRowType = null;
1048
+ this.hoverPhysicalIndex = null;
1049
+ return;
1050
+ }
1051
+ const rowType = this.getRowTypeFromElement(row);
1052
+ if (!rowType) {
1053
+ return;
1054
+ }
1055
+ const physicalIndex = this.getPhysicalIndexFromRow(row, rowType);
1056
+ if (physicalIndex === null) {
1057
+ return;
1058
+ }
1059
+ if (this.hoverRowType === rowType && this.hoverPhysicalIndex === physicalIndex) {
1060
+ return;
1061
+ }
1062
+ if (this.hoverRowType && this.hoverPhysicalIndex !== null) {
1063
+ this.clearHoverClass(this.hoverRowType, this.hoverPhysicalIndex);
1064
+ }
1065
+ this.hoverRowType = rowType;
1066
+ this.hoverPhysicalIndex = physicalIndex;
1067
+ const applied = this.applyHoverClass(rowType, physicalIndex);
1068
+ if (!applied) {
1069
+ this.hoverRowType = null;
1070
+ this.hoverPhysicalIndex = null;
1071
+ }
1072
+ }
1073
+ syncHoverFromPointer() {
1074
+ if (this.hoverInteractionSuspended) {
1075
+ this.hoverResyncPending = true;
1076
+ return;
1077
+ }
1078
+ if (this.hoverMouseDown && this.hoverRowType && this.hoverPhysicalIndex !== null) {
1079
+ this.normalizeHoverClasses(this.hoverRowType, this.hoverPhysicalIndex);
1080
+ return;
1081
+ }
1082
+ if (!this.hoverLastPointer) {
1083
+ this.normalizeHoverClasses(null, null);
1084
+ return;
1085
+ }
1086
+ const element = document.elementFromPoint(this.hoverLastPointer.x, this.hoverLastPointer.y);
1087
+ if (!element || !this.revogrid.contains(element)) {
1088
+ const rect = this.revogrid.getBoundingClientRect();
1089
+ const isPointerInsideGrid = this.hoverLastPointer.x >= rect.left &&
1090
+ this.hoverLastPointer.x <= rect.right &&
1091
+ this.hoverLastPointer.y >= rect.top &&
1092
+ this.hoverLastPointer.y <= rect.bottom;
1093
+ if (isPointerInsideGrid && this.hoverRowType && this.hoverPhysicalIndex !== null) {
1094
+ this.normalizeHoverClasses(this.hoverRowType, this.hoverPhysicalIndex);
1095
+ return;
1096
+ }
1097
+ this.normalizeHoverClasses(null, null);
1098
+ return;
1099
+ }
1100
+ const row = element.closest('.rgRow');
1101
+ const rowType = this.getRowTypeFromElement(row);
1102
+ const physicalIndex = row && rowType ? this.getPhysicalIndexFromRow(row, rowType) : null;
1103
+ this.normalizeHoverClasses(rowType, physicalIndex);
1104
+ }
1105
+ blockHoverRender() {
1106
+ if (this.hoverRenderBlocked) {
1107
+ this.hoverResyncPending = true;
1108
+ return;
1109
+ }
1110
+ this.hoverRenderBlocked = true;
1111
+ this.hoverResyncPending = true;
1112
+ }
1113
+ queueHoverResync() {
1114
+ if (!this.hoverSyncEnabled) {
1115
+ return;
1116
+ }
1117
+ if (this.hoverInteractionSuspended) {
1118
+ this.hoverResyncPending = true;
1119
+ return;
1120
+ }
1121
+ if (this.hoverResyncRaf !== null) {
1122
+ cancelAnimationFrame(this.hoverResyncRaf);
1123
+ }
1124
+ this.hoverResyncRaf = requestAnimationFrame(() => {
1125
+ this.hoverResyncRaf = null;
1126
+ if (this.hoverRenderBlocked) {
1127
+ this.hoverResyncPending = true;
1128
+ return;
1129
+ }
1130
+ this.hoverResyncPending = false;
1131
+ this.syncHoverFromPointer();
1132
+ });
1133
+ }
1134
+ scheduleHoverResync(delay = 0) {
1135
+ if (!this.hoverSyncEnabled) {
1136
+ return;
1137
+ }
1138
+ if (this.hoverInteractionSuspended) {
1139
+ this.hoverResyncPending = true;
1140
+ return;
1141
+ }
1142
+ if (this.hoverResyncTimer) {
1143
+ clearTimeout(this.hoverResyncTimer);
1144
+ }
1145
+ if (this.hoverRenderBlocked) {
1146
+ this.hoverResyncPending = true;
1147
+ return;
1148
+ }
1149
+ this.hoverResyncTimer = setTimeout(() => {
1150
+ this.queueHoverResync();
1151
+ }, delay);
1152
+ }
1153
+ queueSelectionAttributeSync() {
1154
+ if (this.selectionAttributeSyncRaf !== null) {
1155
+ return;
1156
+ }
1157
+ this.selectionAttributeSyncRaf = requestAnimationFrame(() => {
1158
+ this.selectionAttributeSyncRaf = null;
1159
+ if (!this.pendingSelectionAttributeSync) {
1160
+ return;
1161
+ }
1162
+ this.pendingSelectionAttributeSync = false;
1163
+ this.updateSelectedAttributes();
1164
+ this.scheduleHoverResync();
1165
+ });
1166
+ }
1167
+ setHoverSuspendedClass(active) {
1168
+ this.revogrid.classList.toggle('row-hover-suspended', active);
1169
+ }
1170
+ setupHoverSync() {
1171
+ var _a;
1172
+ (_a = this.cleanupHoverSync) === null || _a === void 0 ? void 0 : _a.call(this);
1173
+ this.hoverSyncEnabled = true;
1174
+ const handleMouseDown = (e) => {
1175
+ if (this.viewportScrolling) {
1176
+ return;
1177
+ }
1178
+ this.hoverMouseDown = true;
1179
+ this.hoverLastPointer = { x: e.clientX, y: e.clientY };
1180
+ const target = e.target;
1181
+ const row = (target === null || target === void 0 ? void 0 : target.closest) ? target.closest('.rgRow') : null;
1182
+ this.updateHoverFromRow(row);
1183
+ };
1184
+ const handleMouseUp = (e) => {
1185
+ if (this.viewportScrolling) {
1186
+ return;
1187
+ }
1188
+ this.hoverMouseDown = false;
1189
+ this.hoverLastPointer = { x: e.clientX, y: e.clientY };
1190
+ if (this.hoverInteractionSuspended) {
1191
+ this.hoverResyncPending = true;
1192
+ return;
1193
+ }
1194
+ this.syncHoverFromPointer();
1195
+ };
1196
+ const handleMouseMove = (e) => {
1197
+ if (this.viewportScrolling) {
1198
+ return;
1199
+ }
1200
+ if (this.hoverInteractionSuspended) {
1201
+ this.hoverLastPointer = { x: e.clientX, y: e.clientY };
1202
+ this.hoverResyncPending = true;
1203
+ return;
1204
+ }
1205
+ const now = performance.now();
1206
+ if (now - this.lastHoverPointerSyncAt < HOVER_POINTER_SYNC_INTERVAL) {
1207
+ this.hoverLastPointer = { x: e.clientX, y: e.clientY };
1208
+ return;
1209
+ }
1210
+ this.lastHoverPointerSyncAt = now;
1211
+ if (this.hoverSyncProcessing)
1212
+ return;
1213
+ this.hoverSyncProcessing = true;
1214
+ this.hoverLastPointer = { x: e.clientX, y: e.clientY };
1215
+ requestAnimationFrame(() => {
1216
+ if (this.hoverRenderBlocked) {
1217
+ this.hoverSyncProcessing = false;
1218
+ return;
1219
+ }
1220
+ const target = e.target;
1221
+ const row = (target === null || target === void 0 ? void 0 : target.closest) ? target.closest('.rgRow') : null;
1222
+ this.updateHoverFromRow(row);
1223
+ this.hoverSyncProcessing = false;
1224
+ });
1225
+ };
1226
+ const handleMouseLeave = (e) => {
1227
+ if (this.viewportScrolling) {
1228
+ return;
1229
+ }
1230
+ if (this.hoverInteractionSuspended) {
1231
+ return;
1232
+ }
1233
+ if (this.hoverMouseDown) {
1234
+ return;
1235
+ }
1236
+ const relatedTarget = e.relatedTarget;
1237
+ if (relatedTarget && this.revogrid.contains(relatedTarget)) {
1238
+ return;
1239
+ }
1240
+ const pointer = { x: e.clientX, y: e.clientY };
1241
+ this.hoverLastPointer = pointer;
1242
+ requestAnimationFrame(() => {
1243
+ const element = document.elementFromPoint(pointer.x, pointer.y);
1244
+ if (element && this.revogrid.contains(element)) {
1245
+ const row = element.closest('.rgRow');
1246
+ this.updateHoverFromRow(row);
1247
+ return;
1248
+ }
1249
+ this.clearAllHoverClass();
1250
+ this.hoverLastPointer = null;
1251
+ });
1252
+ };
1253
+ this.revogrid.addEventListener('mousedown', handleMouseDown);
1254
+ document.addEventListener('mouseup', handleMouseUp);
1255
+ this.revogrid.addEventListener('mousemove', handleMouseMove);
1256
+ this.revogrid.addEventListener('mouseleave', handleMouseLeave);
1257
+ this.cleanupHoverSync = () => {
1258
+ this.revogrid.removeEventListener('mousedown', handleMouseDown);
1259
+ document.removeEventListener('mouseup', handleMouseUp);
1260
+ this.revogrid.removeEventListener('mousemove', handleMouseMove);
1261
+ this.revogrid.removeEventListener('mouseleave', handleMouseLeave);
1262
+ this.hoverMouseDown = false;
1263
+ this.hoverSyncProcessing = false;
1264
+ this.hoverInteractionSuspended = false;
1265
+ this.setHoverSuspendedClass(false);
1266
+ this.lastHoverPointerSyncAt = 0;
1267
+ };
1268
+ }
1269
+ /**
1270
+ * 获取所有子节点的索引(递归)
1271
+ */
1272
+ getChildrenIndices(source, parentRow) {
1273
+ if (!this.treeConfig)
1274
+ return [];
1275
+ const { idField, parentIdField } = this.treeConfig;
1276
+ const parentId = parentRow[idField];
1277
+ const childIndices = [];
1278
+ // 遍历所有行,找到子节点
1279
+ source.forEach((row, index) => {
1280
+ if (row[parentIdField] === parentId) {
1281
+ childIndices.push(index);
1282
+ // 递归获取子节点的子节点
1283
+ const grandChildIndices = this.getChildrenIndices(source, row);
1284
+ childIndices.push(...grandChildIndices);
1285
+ }
1286
+ });
1287
+ return childIndices;
1288
+ }
1289
+ /**
1290
+ * 更新行样式属性
1291
+ */
1292
+ updateRowStyleAttribute(type, idField) {
1293
+ // 先清除该类型的所有样式
1294
+ this.clearRowStyleAttribute(type);
1295
+ const styleSet = this.rowStyleIds.get(type);
1296
+ if (!styleSet || styleSet.size === 0)
1297
+ return;
1298
+ const attrName = type === 'highlight' ? 'data-highlighted' : type === 'focused' ? 'data-focused' : 'data-row-bg';
1299
+ // 遍历所有行类型,找到匹配的行并设置样式属性
1300
+ ROW_TYPES.forEach((rowType) => {
1301
+ const dataStore = this.providers.data.stores[rowType];
1302
+ const source = dataStore.store.get('source');
1303
+ const items = dataStore.store.get('items');
1304
+ items.forEach((physicalIndex, virtualIndex) => {
1305
+ const row = source[physicalIndex];
1306
+ if (row && styleSet.has(row[idField])) {
1307
+ // 找到匹配的行,设置样式属性
1308
+ const rowElements = this.revogrid.querySelectorAll(`.rgRow[data-rgRow="${virtualIndex}"]`);
1309
+ rowElements.forEach((el) => {
1310
+ el.setAttribute(attrName, 'true');
1311
+ });
1312
+ // 同时设置 wheel-capture-row
1313
+ const wheelRows = this.revogrid.querySelectorAll(`.wheel-capture-row[data-rgRow="${virtualIndex}"]`);
1314
+ wheelRows.forEach((el) => {
1315
+ el.setAttribute(attrName, 'true');
1316
+ });
1317
+ }
1318
+ });
1319
+ });
1320
+ // 更新 revo-grid 元素的属性
1321
+ if (type === 'highlight') {
1322
+ this.revogrid.setAttribute('data-highlighted-rows', JSON.stringify(Array.from(styleSet)));
1323
+ }
1324
+ else if (type === 'focused') {
1325
+ this.revogrid.setAttribute('data-focused-rows', JSON.stringify(Array.from(styleSet)));
1326
+ }
1327
+ else {
1328
+ this.revogrid.setAttribute('data-row-bg-ids', JSON.stringify(Array.from(styleSet)));
1329
+ }
1330
+ }
1331
+ /**
1332
+ * 清除行样式属性
1333
+ */
1334
+ clearRowStyleAttribute(type) {
1335
+ const attrName = type === 'highlight' ? 'data-highlighted' : type === 'focused' ? 'data-focused' : 'data-row-bg';
1336
+ // 移除所有行的样式属性
1337
+ const styledRows = this.revogrid.querySelectorAll(`[${attrName}="true"]`);
1338
+ styledRows.forEach((el) => {
1339
+ el.removeAttribute(attrName);
1340
+ });
1341
+ // 移除 revo-grid 元素的属性
1342
+ if (type === 'highlight') {
1343
+ this.revogrid.removeAttribute('data-highlighted-rows');
1344
+ }
1345
+ else if (type === 'focused') {
1346
+ this.revogrid.removeAttribute('data-focused-rows');
1347
+ }
1348
+ else {
1349
+ this.revogrid.removeAttribute('data-row-bg-ids');
1350
+ }
1351
+ }
1352
+ hasAnySelectedRows() {
1353
+ var _a, _b, _c;
1354
+ return (!!((_a = this.selected.get('rowPinStart')) === null || _a === void 0 ? void 0 : _a.size) ||
1355
+ !!((_b = this.selected.get('rgRow')) === null || _b === void 0 ? void 0 : _b.size) ||
1356
+ !!((_c = this.selected.get('rowPinEnd')) === null || _c === void 0 ? void 0 : _c.size));
1357
+ }
1358
+ hasAnyRowStyles() {
1359
+ var _a, _b, _c;
1360
+ return (!!((_a = this.rowStyleIds.get('highlight')) === null || _a === void 0 ? void 0 : _a.size) ||
1361
+ !!((_b = this.rowStyleIds.get('background')) === null || _b === void 0 ? void 0 : _b.size) ||
1362
+ !!((_c = this.rowStyleIds.get('focused')) === null || _c === void 0 ? void 0 : _c.size));
1363
+ }
1364
+ getRowStyleFlags(rowType, physicalIndex) {
1365
+ var _a, _b, _c, _d;
1366
+ const source = (_a = this.providers.data.stores[rowType]) === null || _a === void 0 ? void 0 : _a.store.get('source');
1367
+ const rowData = source === null || source === void 0 ? void 0 : source[physicalIndex];
1368
+ if (!rowData) {
1369
+ return {
1370
+ highlighted: false,
1371
+ background: false,
1372
+ focused: false,
1373
+ };
1374
+ }
1375
+ const id = rowData[this.highlightIdField];
1376
+ if (id === undefined || id === null) {
1377
+ return {
1378
+ highlighted: false,
1379
+ background: false,
1380
+ focused: false,
1381
+ };
1382
+ }
1383
+ return {
1384
+ highlighted: !!((_b = this.rowStyleIds.get('highlight')) === null || _b === void 0 ? void 0 : _b.has(id)),
1385
+ background: !!((_c = this.rowStyleIds.get('background')) === null || _c === void 0 ? void 0 : _c.has(id)),
1386
+ focused: !!((_d = this.rowStyleIds.get('focused')) === null || _d === void 0 ? void 0 : _d.has(id)),
1387
+ };
1388
+ }
1389
+ applyRowStyleFlagsToAttrs(attrs, flags) {
1390
+ const setFlag = (attrName, enabled) => {
1391
+ if (enabled) {
1392
+ attrs[attrName] = 'true';
1393
+ return;
1394
+ }
1395
+ if (attrName in attrs) {
1396
+ delete attrs[attrName];
1397
+ }
1398
+ };
1399
+ setFlag('data-highlighted', flags.highlighted);
1400
+ setFlag('data-row-bg', flags.background);
1401
+ setFlag('data-focused', flags.focused);
1402
+ }
1403
+ /**
1404
+ * 判断是否为复选框列
1405
+ */
1406
+ isCheckboxColumn(column) {
1407
+ var _a;
1408
+ if (column.columnType && ((_a = this.revogrid.columnTypes) === null || _a === void 0 ? void 0 : _a[column.columnType]) instanceof CheckboxCellType) {
1409
+ return true;
1410
+ }
1411
+ return !!column.rowSelect;
1412
+ }
1413
+ /**
1414
+ * 获取选中状态统计
1415
+ */
1416
+ getSelectionStatus() {
1417
+ let isAllSelected = true;
1418
+ let hasAnySelected = false;
1419
+ let visibleSelectedCount = 0;
1420
+ let totalSelectedCount = 0;
1421
+ let totalRowCount = 0;
1422
+ this.selected.forEach((selectedSet, rowType) => {
1423
+ totalSelectedCount += selectedSet.size;
1424
+ const dataStore = this.providers.data.stores[rowType];
1425
+ const source = dataStore.store.get('source');
1426
+ // 使用 proxyItems(所有行,包括折叠的)来计算全选状态
1427
+ const proxyItems = dataStore.store.get('proxyItems');
1428
+ const items = dataStore.store.get('items');
1429
+ // 计算所有数据行(排除分组行)
1430
+ proxyItems.forEach((itemIndex) => {
1431
+ const rowData = source[itemIndex];
1432
+ // 跳过分组行(分组行有 __rvgr-depth 标记)
1433
+ if (rowData && rowData['__rvgr-depth'] !== undefined) {
1434
+ return;
1435
+ }
1436
+ totalRowCount++;
1437
+ if (selectedSet.has(itemIndex)) {
1438
+ hasAnySelected = true;
1439
+ }
1440
+ else {
1441
+ isAllSelected = false;
1442
+ }
1443
+ });
1444
+ // 计算可见的选中行数
1445
+ items.forEach((itemIndex) => {
1446
+ const rowData = source[itemIndex];
1447
+ if (rowData && rowData['__rvgr-depth'] !== undefined) {
1448
+ return;
1449
+ }
1450
+ if (selectedSet.has(itemIndex)) {
1451
+ visibleSelectedCount++;
1452
+ }
1453
+ });
1454
+ });
1455
+ // 如果没有数据行,则不应该显示为全选状态
1456
+ if (totalRowCount === 0) {
1457
+ isAllSelected = false;
1458
+ }
1459
+ return {
1460
+ isSelected: isAllSelected,
1461
+ anySelected: hasAnySelected,
1462
+ visibleSelectedItems: visibleSelectedCount,
1463
+ allSelectedItems: totalSelectedCount,
1464
+ hasData: totalRowCount > 0,
1465
+ };
1466
+ }
1467
+ /**
1468
+ * 发出选中状态变化事件
1469
+ */
1470
+ emitSelectionChange() {
1471
+ const status = this.getSelectionStatus();
1472
+ const detail = {
1473
+ selected: this.selected,
1474
+ count: status.allSelectedItems,
1475
+ allRowsCount: ROW_TYPES.reduce((total, type) => total + this.providers.data.stores[type].store.get('proxyItems').length, 0),
1476
+ visibleCount: status.visibleSelectedItems,
1477
+ visibleRowsCount: ROW_TYPES.reduce((total, type) => total + this.providers.data.stores[type].store.get('items').length, 0),
1478
+ };
1479
+ this.emit(ROW_SELECTED_EVENT, detail);
1480
+ }
1481
+ /**
1482
+ * 刷新视口以更新 UI
1483
+ */
1484
+ refreshViewports() {
1485
+ // 更新 revo-grid 元素的 data-selected-rows 属性
1486
+ const selectedIndices = [];
1487
+ this.selected.forEach((selectedSet) => {
1488
+ selectedSet.forEach((index) => selectedIndices.push(index));
1489
+ });
1490
+ this.revogrid.setAttribute('data-selected-rows', JSON.stringify(selectedIndices));
1491
+ // 刷新列视口
1492
+ VIEWPORT_TYPES.forEach((viewportType) => {
1493
+ const { store } = this.providers.viewport.stores[viewportType];
1494
+ store.set('items', [...store.get('items')]);
1495
+ });
1496
+ // 刷新 grouping-overlay 组件
1497
+ const groupingOverlays = this.revogrid.querySelectorAll('revogr-grouping-overlay');
1498
+ groupingOverlays.forEach((overlay) => {
1499
+ if (overlay.refresh) {
1500
+ overlay.refresh();
1501
+ }
1502
+ });
1503
+ // 刷新后在下一帧同步样式和选中状态,避免 setTimeout 带来的“慢一拍”视觉延迟
1504
+ if (this.postRefreshSyncRaf !== null) {
1505
+ cancelAnimationFrame(this.postRefreshSyncRaf);
1506
+ }
1507
+ this.postRefreshSyncRaf = requestAnimationFrame(() => {
1508
+ this.postRefreshSyncRaf = null;
1509
+ // 重新应用行样式
1510
+ this.rowStyleIds.forEach((styleSet, type) => {
1511
+ if (styleSet.size > 0) {
1512
+ this.updateRowStyleAttribute(type, this.highlightIdField);
1513
+ }
1514
+ });
1515
+ // 重新应用选中状态到DOM元素
1516
+ this.updateSelectedAttributes();
1517
+ });
1518
+ }
1519
+ markViewportScrolling() {
1520
+ this.viewportScrolling = true;
1521
+ this.hoverInteractionSuspended = true;
1522
+ this.setHoverSuspendedClass(true);
1523
+ this.hoverSyncProcessing = false;
1524
+ this.clearAllHoverClass();
1525
+ if (this.hoverResyncTimer) {
1526
+ clearTimeout(this.hoverResyncTimer);
1527
+ this.hoverResyncTimer = null;
1528
+ }
1529
+ if (this.hoverResyncRaf !== null) {
1530
+ cancelAnimationFrame(this.hoverResyncRaf);
1531
+ this.hoverResyncRaf = null;
1532
+ }
1533
+ if (this.viewportScrollIdleTimer) {
1534
+ clearTimeout(this.viewportScrollIdleTimer);
1535
+ }
1536
+ this.viewportScrollIdleTimer = setTimeout(() => {
1537
+ this.viewportScrollIdleTimer = null;
1538
+ this.viewportScrolling = false;
1539
+ this.hoverInteractionSuspended = false;
1540
+ this.setHoverSuspendedClass(false);
1541
+ if (this.pendingWheelSelectionSyncAfterScroll) {
1542
+ this.pendingWheelSelectionSyncAfterScroll = false;
1543
+ this.queueWheelRowSelectionSync(true);
1544
+ }
1545
+ if (this.hoverSyncEnabled && this.hoverLastPointer) {
1546
+ this.queueHoverResync();
1547
+ }
1548
+ }, VIEWPORT_SCROLL_IDLE_DELAY);
1549
+ }
1550
+ queueWheelRowSelectionSync(force = false) {
1551
+ const now = performance.now();
1552
+ if (!force &&
1553
+ this.viewportScrolling &&
1554
+ now - this.lastWheelSelectionSyncAt < WHEEL_SELECTION_SYNC_INTERVAL_ACTIVE) {
1555
+ this.pendingWheelSelectionSyncAfterScroll = true;
1556
+ return;
1557
+ }
1558
+ if (this.wheelRowSelectionSyncRaf !== null) {
1559
+ if (this.viewportScrolling) {
1560
+ this.pendingWheelSelectionSyncAfterScroll = true;
1561
+ }
1562
+ return;
1563
+ }
1564
+ this.wheelRowSelectionSyncRaf = requestAnimationFrame(() => {
1565
+ this.wheelRowSelectionSyncRaf = null;
1566
+ this.lastWheelSelectionSyncAt = performance.now();
1567
+ this.updateWheelCaptureSelectedAttributes();
1568
+ });
1569
+ }
1570
+ updateWheelCaptureSelectedAttributes() {
1571
+ const wheelRows = this.revogrid.querySelectorAll('.wheel-capture-row[data-rgRow]');
1572
+ if (!wheelRows.length) {
1573
+ return;
1574
+ }
1575
+ const hasSelectedRows = this.hasAnySelectedRows();
1576
+ const hasRowStyles = this.hasAnyRowStyles();
1577
+ if (!hasSelectedRows && !hasRowStyles) {
1578
+ wheelRows.forEach((el) => {
1579
+ if (el.hasAttribute(SELECTED_ATTRIBUTE)) {
1580
+ el.removeAttribute(SELECTED_ATTRIBUTE);
1581
+ }
1582
+ if (el.hasAttribute('data-highlighted')) {
1583
+ el.removeAttribute('data-highlighted');
1584
+ }
1585
+ if (el.hasAttribute('data-row-bg')) {
1586
+ el.removeAttribute('data-row-bg');
1587
+ }
1588
+ if (el.hasAttribute('data-focused')) {
1589
+ el.removeAttribute('data-focused');
1590
+ }
1591
+ });
1592
+ return;
1593
+ }
1594
+ const rgItems = this.providers.data.stores.rgRow.store.get('items');
1595
+ const rgSource = this.providers.data.stores.rgRow.store.get('source');
1596
+ const rgSelected = this.selected.get('rgRow');
1597
+ const highlightStyleSet = this.rowStyleIds.get('highlight');
1598
+ const backgroundStyleSet = this.rowStyleIds.get('background');
1599
+ const focusedStyleSet = this.rowStyleIds.get('focused');
1600
+ const hasHighlightRows = !!(highlightStyleSet === null || highlightStyleSet === void 0 ? void 0 : highlightStyleSet.size);
1601
+ const hasBackgroundRows = !!(backgroundStyleSet === null || backgroundStyleSet === void 0 ? void 0 : backgroundStyleSet.size);
1602
+ const hasFocusedRows = !!(focusedStyleSet === null || focusedStyleSet === void 0 ? void 0 : focusedStyleSet.size);
1603
+ const shouldResolveRowId = hasHighlightRows || hasBackgroundRows || hasFocusedRows;
1604
+ wheelRows.forEach((el) => {
1605
+ const virtualAttr = el.getAttribute('data-rgRow');
1606
+ if (virtualAttr === null) {
1607
+ return;
1608
+ }
1609
+ const virtualIndex = Number(virtualAttr);
1610
+ if (Number.isNaN(virtualIndex)) {
1611
+ return;
1612
+ }
1613
+ const physicalIndex = rgItems[virtualIndex];
1614
+ const isSelected = physicalIndex !== undefined && !!(rgSelected === null || rgSelected === void 0 ? void 0 : rgSelected.has(physicalIndex));
1615
+ const hasSelectedAttr = el.hasAttribute(SELECTED_ATTRIBUTE);
1616
+ let rowId = undefined;
1617
+ if (shouldResolveRowId && physicalIndex !== undefined) {
1618
+ const rowData = rgSource[physicalIndex];
1619
+ rowId = rowData ? rowData[this.highlightIdField] : undefined;
1620
+ }
1621
+ if (isSelected && !hasSelectedAttr) {
1622
+ el.setAttribute(SELECTED_ATTRIBUTE, 'true');
1623
+ }
1624
+ else if (!isSelected && hasSelectedAttr) {
1625
+ el.removeAttribute(SELECTED_ATTRIBUTE);
1626
+ }
1627
+ if (hasHighlightRows) {
1628
+ const highlighted = rowId !== undefined && rowId !== null && !!(highlightStyleSet === null || highlightStyleSet === void 0 ? void 0 : highlightStyleSet.has(rowId));
1629
+ if (highlighted) {
1630
+ el.setAttribute('data-highlighted', 'true');
1631
+ }
1632
+ else if (el.hasAttribute('data-highlighted')) {
1633
+ el.removeAttribute('data-highlighted');
1634
+ }
1635
+ }
1636
+ else if (el.hasAttribute('data-highlighted')) {
1637
+ el.removeAttribute('data-highlighted');
1638
+ }
1639
+ if (hasBackgroundRows) {
1640
+ const background = rowId !== undefined && rowId !== null && !!(backgroundStyleSet === null || backgroundStyleSet === void 0 ? void 0 : backgroundStyleSet.has(rowId));
1641
+ if (background) {
1642
+ el.setAttribute('data-row-bg', 'true');
1643
+ }
1644
+ else if (el.hasAttribute('data-row-bg')) {
1645
+ el.removeAttribute('data-row-bg');
1646
+ }
1647
+ }
1648
+ else if (el.hasAttribute('data-row-bg')) {
1649
+ el.removeAttribute('data-row-bg');
1650
+ }
1651
+ if (hasFocusedRows) {
1652
+ const focused = rowId !== undefined && rowId !== null && !!(focusedStyleSet === null || focusedStyleSet === void 0 ? void 0 : focusedStyleSet.has(rowId));
1653
+ if (focused) {
1654
+ el.setAttribute('data-focused', 'true');
1655
+ }
1656
+ else if (el.hasAttribute('data-focused')) {
1657
+ el.removeAttribute('data-focused');
1658
+ }
1659
+ }
1660
+ else if (el.hasAttribute('data-focused')) {
1661
+ el.removeAttribute('data-focused');
1662
+ }
1663
+ });
1664
+ }
1665
+ /**
1666
+ * 更新所有行的选中属性
1667
+ * 用于确保展开分组后,之前被折叠的行也能正确显示选中状态
1668
+ */
1669
+ updateSelectedAttributes() {
1670
+ const rowElements = this.revogrid.querySelectorAll('.rgRow[data-rgRow]');
1671
+ rowElements.forEach((el) => {
1672
+ var _a;
1673
+ const row = el;
1674
+ const rowType = this.getRowTypeFromElement(row);
1675
+ if (!rowType) {
1676
+ return;
1677
+ }
1678
+ const physicalIndex = this.getPhysicalIndexFromRow(row, rowType);
1679
+ if (physicalIndex === null) {
1680
+ return;
1681
+ }
1682
+ const isSelected = !!((_a = this.selected.get(rowType)) === null || _a === void 0 ? void 0 : _a.has(physicalIndex));
1683
+ if (isSelected) {
1684
+ row.setAttribute(SELECTED_ATTRIBUTE, 'true');
1685
+ }
1686
+ else {
1687
+ row.removeAttribute(SELECTED_ATTRIBUTE);
1688
+ }
1689
+ });
1690
+ this.updateWheelCaptureSelectedAttributes();
1691
+ }
1692
+ /**
1693
+ * 创建列头模板
1694
+ */
1695
+ createHeaderTemplate(columnData) {
1696
+ const originalTemplate = columnData.columnTemplate;
1697
+ const checkboxTemplate = this.checkboxCellType.columnTemplate;
1698
+ const customTemplate = this.customHeaderCheckboxTemplate;
1699
+ return (h, props, additionalData) => {
1700
+ const status = this.getSelectionStatus();
1701
+ // 如果有自定义模板,使用自定义模板
1702
+ if (customTemplate) {
1703
+ return customTemplate(h, {
1704
+ allSelected: status.isSelected,
1705
+ indeterminate: status.anySelected && !status.isSelected,
1706
+ onClick: (event) => {
1707
+ event.preventDefault();
1708
+ const detail = {
1709
+ type: props.providers.type,
1710
+ selected: !status.isSelected,
1711
+ };
1712
+ dispatchCustomEvent(event, ROW_ALL_SELECT_EVENT, detail);
1713
+ },
1714
+ // 传递完整的 props 和 additionalData,方便 Vue 组件使用
1715
+ props,
1716
+ additionalData,
1717
+ });
1718
+ }
1719
+ const extendedProps = Object.assign(Object.assign({}, props), { allSelected: status.isSelected, allIndeterminate: status.anySelected });
1720
+ if (originalTemplate) {
1721
+ return originalTemplate(h, extendedProps, additionalData);
1722
+ }
1723
+ return checkboxTemplate(h, extendedProps);
1724
+ };
1725
+ }
1726
+ /**
1727
+ * 创建单元格复选框模板
1728
+ */
1729
+ createCellCheckboxTemplate() {
1730
+ const defaultTemplate = this.checkboxCellType.cellTemplate;
1731
+ const customTemplate = this.customCheckboxTemplate;
1732
+ return (h, props, additionalData) => {
1733
+ // 如果有自定义模板,使用自定义模板
1734
+ if (customTemplate) {
1735
+ return customTemplate(h, {
1736
+ selected: !!props.selected,
1737
+ onClick: (event) => {
1738
+ event.preventDefault();
1739
+ const detail = Object.assign(Object.assign({}, props), { originalEvent: event });
1740
+ dispatchCustomEvent(event, ROW_SELECT_CLICK_EVENT, detail);
1741
+ },
1742
+ // 传递完整的 props 和 additionalData,方便 Vue 组件使用
1743
+ props,
1744
+ additionalData,
1745
+ });
1746
+ }
1747
+ return defaultTemplate(h, props, additionalData);
1748
+ };
1749
+ }
1750
+ /**
1751
+ * 单元格模板包装器 - 注入选中状态
1752
+ */
1753
+ cellTemplateWrapper(_h, props) {
1754
+ var _a;
1755
+ const dataStore = this.providers.data.stores[props.providers.type];
1756
+ const physicalIndex = getPhysicalRowIndex(dataStore.store, props.rowIndex);
1757
+ const isSelected = (_a = this.selected.get(props.type)) === null || _a === void 0 ? void 0 : _a.has(physicalIndex);
1758
+ props.selected = !!isSelected;
1759
+ return '';
1760
+ }
1761
+ destroy() {
1762
+ var _a, _b;
1763
+ (_a = this.cleanupHoverSync) === null || _a === void 0 ? void 0 : _a.call(this);
1764
+ this.cleanupHoverSync = null;
1765
+ if (this.hoverResyncTimer) {
1766
+ clearTimeout(this.hoverResyncTimer);
1767
+ this.hoverResyncTimer = null;
1768
+ }
1769
+ if (this.hoverResyncRaf !== null) {
1770
+ cancelAnimationFrame(this.hoverResyncRaf);
1771
+ this.hoverResyncRaf = null;
1772
+ }
1773
+ if (this.viewportScrollIdleTimer) {
1774
+ clearTimeout(this.viewportScrollIdleTimer);
1775
+ this.viewportScrollIdleTimer = null;
1776
+ }
1777
+ this.hoverInteractionSuspended = false;
1778
+ this.setHoverSuspendedClass(false);
1779
+ this.viewportScrolling = false;
1780
+ this.pendingWheelSelectionSyncAfterScroll = false;
1781
+ this.lastHoverPointerSyncAt = 0;
1782
+ if (this.selectionAttributeSyncRaf !== null) {
1783
+ cancelAnimationFrame(this.selectionAttributeSyncRaf);
1784
+ this.selectionAttributeSyncRaf = null;
1785
+ }
1786
+ if (this.postRefreshSyncRaf !== null) {
1787
+ cancelAnimationFrame(this.postRefreshSyncRaf);
1788
+ this.postRefreshSyncRaf = null;
1789
+ }
1790
+ if (this.wheelRowSelectionSyncRaf !== null) {
1791
+ cancelAnimationFrame(this.wheelRowSelectionSyncRaf);
1792
+ this.wheelRowSelectionSyncRaf = null;
1793
+ }
1794
+ this.pendingSelectionAttributeSync = false;
1795
+ if ((_b = this.styleElement) === null || _b === void 0 ? void 0 : _b.parentNode) {
1796
+ this.styleElement.parentNode.removeChild(this.styleElement);
1797
+ }
1798
+ this.styleElement = undefined;
1799
+ this.selected.clear();
1800
+ super.destroy();
1801
+ }
1802
+ }
1803
+ //# sourceMappingURL=row-select-plugin-2026228.js.map