balala-revogrid 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (760) hide show
  1. package/LICENSE +21 -0
  2. package/dist/cjs/app-globals-D67EXhgK.js +16 -0
  3. package/dist/cjs/app-globals-D67EXhgK.js.map +1 -0
  4. package/dist/cjs/cell-renderer-B87qecTb.js +57 -0
  5. package/dist/cjs/cell-renderer-B87qecTb.js.map +1 -0
  6. package/dist/cjs/debounce-CcpHiH2p.js +498 -0
  7. package/dist/cjs/debounce-CcpHiH2p.js.map +1 -0
  8. package/dist/cjs/dimension.helpers-DA9-xqPT.js +3606 -0
  9. package/dist/cjs/dimension.helpers-DA9-xqPT.js.map +1 -0
  10. package/dist/cjs/edit.utils-CKsIiHlD.js +113 -0
  11. package/dist/cjs/edit.utils-CKsIiHlD.js.map +1 -0
  12. package/dist/cjs/events-DeLDyZlb.js +46 -0
  13. package/dist/cjs/events-DeLDyZlb.js.map +1 -0
  14. package/dist/cjs/filter.button-DSsWNs23.js +49 -0
  15. package/dist/cjs/filter.button-DSsWNs23.js.map +1 -0
  16. package/dist/cjs/grouping.row.renderer-BqR0ytMi.js +64 -0
  17. package/dist/cjs/grouping.row.renderer-BqR0ytMi.js.map +1 -0
  18. package/dist/cjs/header-cell-renderer-D-RjAVfe.js +1766 -0
  19. package/dist/cjs/header-cell-renderer-D-RjAVfe.js.map +1 -0
  20. package/dist/cjs/index-BF1c1pO3.js +2549 -0
  21. package/dist/cjs/index-BF1c1pO3.js.map +1 -0
  22. package/dist/cjs/index.cjs.js +6426 -0
  23. package/dist/cjs/index.cjs.js.map +1 -0
  24. package/dist/cjs/loader.cjs.js +19 -0
  25. package/dist/cjs/loader.cjs.js.map +1 -0
  26. package/dist/cjs/revo-grid.cjs.entry.js +3215 -0
  27. package/dist/cjs/revo-grid.cjs.entry.js.map +1 -0
  28. package/dist/cjs/revo-grid.cjs.js +31 -0
  29. package/dist/cjs/revo-grid.cjs.js.map +1 -0
  30. package/dist/cjs/revo-grid.entry.cjs.js.map +1 -0
  31. package/dist/cjs/revogr-attribution.revogr-extra.revogr-focus.revogr-grouping-overlay.revogr-header-unified.revogr-overlay-selection.revogr-row-headers.revogr-scroll-virtual.revogr-temp-range.entry.cjs.js.map +1 -0
  32. package/dist/cjs/revogr-attribution_9.cjs.entry.js +2629 -0
  33. package/dist/cjs/revogr-attribution_9.cjs.entry.js.map +1 -0
  34. package/dist/cjs/revogr-clipboard.revogr-edit.revogr-order-editor.entry.cjs.js.map +1 -0
  35. package/dist/cjs/revogr-clipboard_3.cjs.entry.js +471 -0
  36. package/dist/cjs/revogr-clipboard_3.cjs.entry.js.map +1 -0
  37. package/dist/cjs/revogr-data.revogr-header.revogr-viewport-scroll.vnode-html.entry.cjs.js.map +1 -0
  38. package/dist/cjs/revogr-data_4.cjs.entry.js +1420 -0
  39. package/dist/cjs/revogr-data_4.cjs.entry.js.map +1 -0
  40. package/dist/cjs/revogr-filter-panel.cjs.entry.js +382 -0
  41. package/dist/cjs/revogr-filter-panel.cjs.entry.js.map +1 -0
  42. package/dist/cjs/revogr-filter-panel.entry.cjs.js.map +1 -0
  43. package/dist/cjs/row-renderer-BTE7VKD9.js +49 -0
  44. package/dist/cjs/row-renderer-BTE7VKD9.js.map +1 -0
  45. package/dist/cjs/text-editor-BdhmcrkS.js +81 -0
  46. package/dist/cjs/text-editor-BdhmcrkS.js.map +1 -0
  47. package/dist/cjs/throttle-2ZxfGjEI.js +533 -0
  48. package/dist/cjs/throttle-2ZxfGjEI.js.map +1 -0
  49. package/dist/cjs/tree-data.plugin-BRjwZtxI.js +5350 -0
  50. package/dist/cjs/tree-data.plugin-BRjwZtxI.js.map +1 -0
  51. package/dist/cjs/viewport.helpers-BAovztDd.js +61 -0
  52. package/dist/cjs/viewport.helpers-BAovztDd.js.map +1 -0
  53. package/dist/cjs/viewport.store-BTbPlyF-.js +525 -0
  54. package/dist/cjs/viewport.store-BTbPlyF-.js.map +1 -0
  55. package/dist/collection/collection-manifest.json +30 -0
  56. package/dist/collection/components/attribution/revogr-attribution.js +20 -0
  57. package/dist/collection/components/attribution/revogr-attribution.js.map +1 -0
  58. package/dist/collection/components/clipboard/revogr-clipboard.js +411 -0
  59. package/dist/collection/components/clipboard/revogr-clipboard.js.map +1 -0
  60. package/dist/collection/components/data/cell-renderer.js +44 -0
  61. package/dist/collection/components/data/cell-renderer.js.map +1 -0
  62. package/dist/collection/components/data/column.service.js +333 -0
  63. package/dist/collection/components/data/column.service.js.map +1 -0
  64. package/dist/collection/components/data/revogr-data-style.css +95 -0
  65. package/dist/collection/components/data/revogr-data.js +939 -0
  66. package/dist/collection/components/data/revogr-data.js.map +1 -0
  67. package/dist/collection/components/data/row-highlight.plugin.js +51 -0
  68. package/dist/collection/components/data/row-highlight.plugin.js.map +1 -0
  69. package/dist/collection/components/data/row-renderer.js +37 -0
  70. package/dist/collection/components/data/row-renderer.js.map +1 -0
  71. package/dist/collection/components/editors/edit.utils.js +13 -0
  72. package/dist/collection/components/editors/edit.utils.js.map +1 -0
  73. package/dist/collection/components/editors/revogr-edit-style.css +16 -0
  74. package/dist/collection/components/editors/revogr-edit.js +346 -0
  75. package/dist/collection/components/editors/revogr-edit.js.map +1 -0
  76. package/dist/collection/components/editors/text-editor.js +74 -0
  77. package/dist/collection/components/editors/text-editor.js.map +1 -0
  78. package/dist/collection/components/extra/revogr-extra.js +125 -0
  79. package/dist/collection/components/extra/revogr-extra.js.map +1 -0
  80. package/dist/collection/components/grouping-overlay/revogr-grouping-overlay.css +62 -0
  81. package/dist/collection/components/grouping-overlay/revogr-grouping-overlay.js +644 -0
  82. package/dist/collection/components/grouping-overlay/revogr-grouping-overlay.js.map +1 -0
  83. package/dist/collection/components/header/header-cell-renderer.js +49 -0
  84. package/dist/collection/components/header/header-cell-renderer.js.map +1 -0
  85. package/dist/collection/components/header/header-group-renderer.js +29 -0
  86. package/dist/collection/components/header/header-group-renderer.js.map +1 -0
  87. package/dist/collection/components/header/header-renderer.js +100 -0
  88. package/dist/collection/components/header/header-renderer.js.map +1 -0
  89. package/dist/collection/components/header/resizable.directive.js +274 -0
  90. package/dist/collection/components/header/resizable.directive.js.map +1 -0
  91. package/dist/collection/components/header/resizable.element.js +36 -0
  92. package/dist/collection/components/header/resizable.element.js.map +1 -0
  93. package/dist/collection/components/header/revogr-header-style.css +164 -0
  94. package/dist/collection/components/header/revogr-header-unified-style.css +205 -0
  95. package/dist/collection/components/header/revogr-header-unified.js +1013 -0
  96. package/dist/collection/components/header/revogr-header-unified.js.map +1 -0
  97. package/dist/collection/components/header/revogr-header.js +852 -0
  98. package/dist/collection/components/header/revogr-header.js.map +1 -0
  99. package/dist/collection/components/order/order-renderer.js +50 -0
  100. package/dist/collection/components/order/order-renderer.js.map +1 -0
  101. package/dist/collection/components/order/order-row.service.js +72 -0
  102. package/dist/collection/components/order/order-row.service.js.map +1 -0
  103. package/dist/collection/components/order/revogr-order-editor.js +461 -0
  104. package/dist/collection/components/order/revogr-order-editor.js.map +1 -0
  105. package/dist/collection/components/overlay/autofill.service.js +221 -0
  106. package/dist/collection/components/overlay/autofill.service.js.map +1 -0
  107. package/dist/collection/components/overlay/keyboard.service.js +178 -0
  108. package/dist/collection/components/overlay/keyboard.service.js.map +1 -0
  109. package/dist/collection/components/overlay/revogr-overlay-selection.js +1606 -0
  110. package/dist/collection/components/overlay/revogr-overlay-selection.js.map +1 -0
  111. package/dist/collection/components/overlay/revogr-overlay-style.css +95 -0
  112. package/dist/collection/components/overlay/selection.utils.js +136 -0
  113. package/dist/collection/components/overlay/selection.utils.js.map +1 -0
  114. package/dist/collection/components/revoGrid/grid.helpers.js +33 -0
  115. package/dist/collection/components/revoGrid/grid.helpers.js.map +1 -0
  116. package/dist/collection/components/revoGrid/plugin.service.js +81 -0
  117. package/dist/collection/components/revoGrid/plugin.service.js.map +1 -0
  118. package/dist/collection/components/revoGrid/revo-grid-style.css +897 -0
  119. package/dist/collection/components/revoGrid/revo-grid.js +4717 -0
  120. package/dist/collection/components/revoGrid/revo-grid.js.map +1 -0
  121. package/dist/collection/components/revoGrid/viewport.helpers.js +51 -0
  122. package/dist/collection/components/revoGrid/viewport.helpers.js.map +1 -0
  123. package/dist/collection/components/revoGrid/viewport.resize.service.js +55 -0
  124. package/dist/collection/components/revoGrid/viewport.resize.service.js.map +1 -0
  125. package/dist/collection/components/revoGrid/viewport.scrolling.service.js +139 -0
  126. package/dist/collection/components/revoGrid/viewport.scrolling.service.js.map +1 -0
  127. package/dist/collection/components/revoGrid/viewport.service.js +253 -0
  128. package/dist/collection/components/revoGrid/viewport.service.js.map +1 -0
  129. package/dist/collection/components/rowHeaders/revogr-row-headers.js +291 -0
  130. package/dist/collection/components/rowHeaders/revogr-row-headers.js.map +1 -0
  131. package/dist/collection/components/rowHeaders/row-header-render.js +5 -0
  132. package/dist/collection/components/rowHeaders/row-header-render.js.map +1 -0
  133. package/dist/collection/components/scroll/revogr-viewport-scroll-style.css +70 -0
  134. package/dist/collection/components/scroll/revogr-viewport-scroll.js +938 -0
  135. package/dist/collection/components/scroll/revogr-viewport-scroll.js.map +1 -0
  136. package/dist/collection/components/scrollable/autohide-scroll.plugin.js +44 -0
  137. package/dist/collection/components/scrollable/autohide-scroll.plugin.js.map +1 -0
  138. package/dist/collection/components/scrollable/revogr-scroll-style.css +34 -0
  139. package/dist/collection/components/scrollable/revogr-scroll-virtual.js +346 -0
  140. package/dist/collection/components/scrollable/revogr-scroll-virtual.js.map +1 -0
  141. package/dist/collection/components/selectionFocus/revogr-focus-style.css +7 -0
  142. package/dist/collection/components/selectionFocus/revogr-focus.js +429 -0
  143. package/dist/collection/components/selectionFocus/revogr-focus.js.map +1 -0
  144. package/dist/collection/components/selectionTempRange/revogr-temp-range-style.css +28 -0
  145. package/dist/collection/components/selectionTempRange/revogr-temp-range.js +171 -0
  146. package/dist/collection/components/selectionTempRange/revogr-temp-range.js.map +1 -0
  147. package/dist/collection/components/vnode/vnode-converter.js +84 -0
  148. package/dist/collection/components/vnode/vnode-converter.js.map +1 -0
  149. package/dist/collection/components/vnode/vnode.utils.js +18 -0
  150. package/dist/collection/components/vnode/vnode.utils.js.map +1 -0
  151. package/dist/collection/global/global.js +19 -0
  152. package/dist/collection/global/global.js.map +1 -0
  153. package/dist/collection/index.js +13 -0
  154. package/dist/collection/index.js.map +1 -0
  155. package/dist/collection/plugins/add-rows-on-paste.plugin.js +40 -0
  156. package/dist/collection/plugins/add-rows-on-paste.plugin.js.map +1 -0
  157. package/dist/collection/plugins/base.plugin.js +90 -0
  158. package/dist/collection/plugins/base.plugin.js.map +1 -0
  159. package/dist/collection/plugins/column-hide.plugin.js +532 -0
  160. package/dist/collection/plugins/column-hide.plugin.js.map +1 -0
  161. package/dist/collection/plugins/column-manage.plugin.js +1218 -0
  162. package/dist/collection/plugins/column-manage.plugin.js.map +1 -0
  163. package/dist/collection/plugins/column-stretch.plugin.js +921 -0
  164. package/dist/collection/plugins/column-stretch.plugin.js.map +1 -0
  165. package/dist/collection/plugins/column.auto-size.plugin.js +308 -0
  166. package/dist/collection/plugins/column.auto-size.plugin.js.map +1 -0
  167. package/dist/collection/plugins/column.stretch.plugin.js +96 -0
  168. package/dist/collection/plugins/column.stretch.plugin.js.map +1 -0
  169. package/dist/collection/plugins/customColumnDrag/column-move.helper.js +361 -0
  170. package/dist/collection/plugins/customColumnDrag/column-move.helper.js.map +1 -0
  171. package/dist/collection/plugins/customColumnDrag/custom-column-drag.plugin.js +145 -0
  172. package/dist/collection/plugins/customColumnDrag/custom-column-drag.plugin.js.map +1 -0
  173. package/dist/collection/plugins/customColumnDrag/drag.handler.js +726 -0
  174. package/dist/collection/plugins/customColumnDrag/drag.handler.js.map +1 -0
  175. package/dist/collection/plugins/customColumnDrag/example.js +282 -0
  176. package/dist/collection/plugins/customColumnDrag/example.js.map +1 -0
  177. package/dist/collection/plugins/customColumnDrag/index.js +8 -0
  178. package/dist/collection/plugins/customColumnDrag/index.js.map +1 -0
  179. package/dist/collection/plugins/customColumnDrag/types.js +2 -0
  180. package/dist/collection/plugins/customColumnDrag/types.js.map +1 -0
  181. package/dist/collection/plugins/dispatcher.js +40 -0
  182. package/dist/collection/plugins/dispatcher.js.map +1 -0
  183. package/dist/collection/plugins/enhanced-scrollbar.plugin.js +493 -0
  184. package/dist/collection/plugins/enhanced-scrollbar.plugin.js.map +1 -0
  185. package/dist/collection/plugins/export/csv.js +72 -0
  186. package/dist/collection/plugins/export/csv.js.map +1 -0
  187. package/dist/collection/plugins/export/export.plugin.js +157 -0
  188. package/dist/collection/plugins/export/export.plugin.js.map +1 -0
  189. package/dist/collection/plugins/export/types.js +2 -0
  190. package/dist/collection/plugins/export/types.js.map +1 -0
  191. package/dist/collection/plugins/filter/conditions/equal.js +21 -0
  192. package/dist/collection/plugins/filter/conditions/equal.js.map +1 -0
  193. package/dist/collection/plugins/filter/conditions/number/greaterThan.js +14 -0
  194. package/dist/collection/plugins/filter/conditions/number/greaterThan.js.map +1 -0
  195. package/dist/collection/plugins/filter/conditions/number/greaterThanOrEqual.js +11 -0
  196. package/dist/collection/plugins/filter/conditions/number/greaterThanOrEqual.js.map +1 -0
  197. package/dist/collection/plugins/filter/conditions/number/lessThan.js +16 -0
  198. package/dist/collection/plugins/filter/conditions/number/lessThan.js.map +1 -0
  199. package/dist/collection/plugins/filter/conditions/number/lessThanOrEqual.js +11 -0
  200. package/dist/collection/plugins/filter/conditions/number/lessThanOrEqual.js.map +1 -0
  201. package/dist/collection/plugins/filter/conditions/set.js +7 -0
  202. package/dist/collection/plugins/filter/conditions/set.js.map +1 -0
  203. package/dist/collection/plugins/filter/conditions/string/beginswith.js +21 -0
  204. package/dist/collection/plugins/filter/conditions/string/beginswith.js.map +1 -0
  205. package/dist/collection/plugins/filter/conditions/string/contains.js +25 -0
  206. package/dist/collection/plugins/filter/conditions/string/contains.js.map +1 -0
  207. package/dist/collection/plugins/filter/filter.button.js +28 -0
  208. package/dist/collection/plugins/filter/filter.button.js.map +1 -0
  209. package/dist/collection/plugins/filter/filter.indexed.js +49 -0
  210. package/dist/collection/plugins/filter/filter.indexed.js.map +1 -0
  211. package/dist/collection/plugins/filter/filter.panel.js +610 -0
  212. package/dist/collection/plugins/filter/filter.panel.js.map +1 -0
  213. package/dist/collection/plugins/filter/filter.plugin.js +388 -0
  214. package/dist/collection/plugins/filter/filter.plugin.js.map +1 -0
  215. package/dist/collection/plugins/filter/filter.style.css +165 -0
  216. package/dist/collection/plugins/filter/filter.types.js +9 -0
  217. package/dist/collection/plugins/filter/filter.types.js.map +1 -0
  218. package/dist/collection/plugins/grid-setup.js +131 -0
  219. package/dist/collection/plugins/grid-setup.js.map +1 -0
  220. package/dist/collection/plugins/groupingRow/grouping.const.js +18 -0
  221. package/dist/collection/plugins/groupingRow/grouping.const.js.map +1 -0
  222. package/dist/collection/plugins/groupingRow/grouping.row.expand.service.js +122 -0
  223. package/dist/collection/plugins/groupingRow/grouping.row.expand.service.js.map +1 -0
  224. package/dist/collection/plugins/groupingRow/grouping.row.plugin.js +252 -0
  225. package/dist/collection/plugins/groupingRow/grouping.row.plugin.js.map +1 -0
  226. package/dist/collection/plugins/groupingRow/grouping.row.renderer.js +49 -0
  227. package/dist/collection/plugins/groupingRow/grouping.row.renderer.js.map +1 -0
  228. package/dist/collection/plugins/groupingRow/grouping.row.types.js +2 -0
  229. package/dist/collection/plugins/groupingRow/grouping.row.types.js.map +1 -0
  230. package/dist/collection/plugins/groupingRow/grouping.service.js +215 -0
  231. package/dist/collection/plugins/groupingRow/grouping.service.js.map +1 -0
  232. package/dist/collection/plugins/groupingRow/grouping.trimmed.service.js +61 -0
  233. package/dist/collection/plugins/groupingRow/grouping.trimmed.service.js.map +1 -0
  234. package/dist/collection/plugins/index.js +26 -0
  235. package/dist/collection/plugins/index.js.map +1 -0
  236. package/dist/collection/plugins/manual-focus.plugin.js +353 -0
  237. package/dist/collection/plugins/manual-focus.plugin.js.map +1 -0
  238. package/dist/collection/plugins/moveColumn/column.drag.plugin.js +171 -0
  239. package/dist/collection/plugins/moveColumn/column.drag.plugin.js.map +1 -0
  240. package/dist/collection/plugins/moveColumn/order-column.handler.js +69 -0
  241. package/dist/collection/plugins/moveColumn/order-column.handler.js.map +1 -0
  242. package/dist/collection/plugins/pin-shadow.plugin.js +487 -0
  243. package/dist/collection/plugins/pin-shadow.plugin.js.map +1 -0
  244. package/dist/collection/plugins/resize-indicator.plugin.js +430 -0
  245. package/dist/collection/plugins/resize-indicator.plugin.js.map +1 -0
  246. package/dist/collection/plugins/row-select-plugin-2026228.js +1803 -0
  247. package/dist/collection/plugins/row-select-plugin-2026228.js.map +1 -0
  248. package/dist/collection/plugins/row-select.plugin.js +2096 -0
  249. package/dist/collection/plugins/row-select.plugin.js.map +1 -0
  250. package/dist/collection/plugins/rtl/rtl.plugin.js +110 -0
  251. package/dist/collection/plugins/rtl/rtl.plugin.js.map +1 -0
  252. package/dist/collection/plugins/sorting/sorting.func.js +82 -0
  253. package/dist/collection/plugins/sorting/sorting.func.js.map +1 -0
  254. package/dist/collection/plugins/sorting/sorting.plugin.js +224 -0
  255. package/dist/collection/plugins/sorting/sorting.plugin.js.map +1 -0
  256. package/dist/collection/plugins/sorting/sorting.sign.js +9 -0
  257. package/dist/collection/plugins/sorting/sorting.sign.js.map +1 -0
  258. package/dist/collection/plugins/sorting/sorting.types.js +2 -0
  259. package/dist/collection/plugins/sorting/sorting.types.js.map +1 -0
  260. package/dist/collection/plugins/tree-data.plugin.js +447 -0
  261. package/dist/collection/plugins/tree-data.plugin.js.map +1 -0
  262. package/dist/collection/plugins/wcag/index.js +84 -0
  263. package/dist/collection/plugins/wcag/index.js.map +1 -0
  264. package/dist/collection/serve/controller.js +344 -0
  265. package/dist/collection/serve/data.js +201 -0
  266. package/dist/collection/serve/realData.js +4148 -0
  267. package/dist/collection/services/cell.helpers.js +12 -0
  268. package/dist/collection/services/cell.helpers.js.map +1 -0
  269. package/dist/collection/services/column.data.provider.js +122 -0
  270. package/dist/collection/services/column.data.provider.js.map +1 -0
  271. package/dist/collection/services/data.provider.js +89 -0
  272. package/dist/collection/services/data.provider.js.map +1 -0
  273. package/dist/collection/services/dimension.provider.js +257 -0
  274. package/dist/collection/services/dimension.provider.js.map +1 -0
  275. package/dist/collection/services/local.scroll.service.js +136 -0
  276. package/dist/collection/services/local.scroll.service.js.map +1 -0
  277. package/dist/collection/services/local.scroll.timer.js +84 -0
  278. package/dist/collection/services/local.scroll.timer.js.map +1 -0
  279. package/dist/collection/services/selection.store.connector.js +274 -0
  280. package/dist/collection/services/selection.store.connector.js.map +1 -0
  281. package/dist/collection/services/viewport.provider.js +17 -0
  282. package/dist/collection/services/viewport.provider.js.map +1 -0
  283. package/dist/collection/store/dataSource/data.proxy.js +45 -0
  284. package/dist/collection/store/dataSource/data.proxy.js.map +1 -0
  285. package/dist/collection/store/dataSource/data.store.js +146 -0
  286. package/dist/collection/store/dataSource/data.store.js.map +1 -0
  287. package/dist/collection/store/dataSource/index.js +7 -0
  288. package/dist/collection/store/dataSource/index.js.map +1 -0
  289. package/dist/collection/store/dataSource/trimmed.plugin.js +34 -0
  290. package/dist/collection/store/dataSource/trimmed.plugin.js.map +1 -0
  291. package/dist/collection/store/dimension/dimension.helpers.js +101 -0
  292. package/dist/collection/store/dimension/dimension.helpers.js.map +1 -0
  293. package/dist/collection/store/dimension/dimension.recalculate.plugin.js +29 -0
  294. package/dist/collection/store/dimension/dimension.recalculate.plugin.js.map +1 -0
  295. package/dist/collection/store/dimension/dimension.store.js +124 -0
  296. package/dist/collection/store/dimension/dimension.store.js.map +1 -0
  297. package/dist/collection/store/dimension/dimension.trim.plugin.js +61 -0
  298. package/dist/collection/store/dimension/dimension.trim.plugin.js.map +1 -0
  299. package/dist/collection/store/dimension/index.js +6 -0
  300. package/dist/collection/store/dimension/index.js.map +1 -0
  301. package/dist/collection/store/index.js +17 -0
  302. package/dist/collection/store/index.js.map +1 -0
  303. package/dist/collection/store/selection/index.js +6 -0
  304. package/dist/collection/store/selection/index.js.map +1 -0
  305. package/dist/collection/store/selection/selection.helpers.js +49 -0
  306. package/dist/collection/store/selection/selection.helpers.js.map +1 -0
  307. package/dist/collection/store/selection/selection.store.js +85 -0
  308. package/dist/collection/store/selection/selection.store.js.map +1 -0
  309. package/dist/collection/store/vp/index.js +6 -0
  310. package/dist/collection/store/vp/index.js.map +1 -0
  311. package/dist/collection/store/vp/viewport.helpers.js +251 -0
  312. package/dist/collection/store/vp/viewport.helpers.js.map +1 -0
  313. package/dist/collection/store/vp/viewport.store.js +256 -0
  314. package/dist/collection/store/vp/viewport.store.js.map +1 -0
  315. package/dist/collection/themeManager/theme.compact.js +9 -0
  316. package/dist/collection/themeManager/theme.compact.js.map +1 -0
  317. package/dist/collection/themeManager/theme.default.js +9 -0
  318. package/dist/collection/themeManager/theme.default.js.map +1 -0
  319. package/dist/collection/themeManager/theme.material.js +9 -0
  320. package/dist/collection/themeManager/theme.material.js.map +1 -0
  321. package/dist/collection/themeManager/theme.service.js +53 -0
  322. package/dist/collection/themeManager/theme.service.js.map +1 -0
  323. package/dist/collection/types/dimension.js +2 -0
  324. package/dist/collection/types/dimension.js.map +1 -0
  325. package/dist/collection/types/events.js +124 -0
  326. package/dist/collection/types/events.js.map +1 -0
  327. package/dist/collection/types/index.js +12 -0
  328. package/dist/collection/types/index.js.map +1 -0
  329. package/dist/collection/types/interfaces.js +6 -0
  330. package/dist/collection/types/interfaces.js.map +1 -0
  331. package/dist/collection/types/plugin.js +2 -0
  332. package/dist/collection/types/plugin.js.map +1 -0
  333. package/dist/collection/types/plugin.types.js +2 -0
  334. package/dist/collection/types/plugin.types.js.map +1 -0
  335. package/dist/collection/types/selection.js +2 -0
  336. package/dist/collection/types/selection.js.map +1 -0
  337. package/dist/collection/types/theme.js +2 -0
  338. package/dist/collection/types/theme.js.map +1 -0
  339. package/dist/collection/types/viewport.interfaces.js +2 -0
  340. package/dist/collection/types/viewport.interfaces.js.map +1 -0
  341. package/dist/collection/utils/batchGroupCollapse.js +190 -0
  342. package/dist/collection/utils/batchGroupCollapse.js.map +1 -0
  343. package/dist/collection/utils/browser.js +7 -0
  344. package/dist/collection/utils/browser.js.map +1 -0
  345. package/dist/collection/utils/cell-template-helper.js +181 -0
  346. package/dist/collection/utils/cell-template-helper.js.map +1 -0
  347. package/dist/collection/utils/closest.polifill.js +22 -0
  348. package/dist/collection/utils/closest.polifill.js.map +1 -0
  349. package/dist/collection/utils/column.utils.js +448 -0
  350. package/dist/collection/utils/column.utils.js.map +1 -0
  351. package/dist/collection/utils/consts.js +26 -0
  352. package/dist/collection/utils/consts.js.map +1 -0
  353. package/dist/collection/utils/events.js +39 -0
  354. package/dist/collection/utils/events.js.map +1 -0
  355. package/dist/collection/utils/header.utils.js +24 -0
  356. package/dist/collection/utils/header.utils.js.map +1 -0
  357. package/dist/collection/utils/index.js +133 -0
  358. package/dist/collection/utils/index.js.map +1 -0
  359. package/dist/collection/utils/key.codes.js +80 -0
  360. package/dist/collection/utils/key.codes.js.map +1 -0
  361. package/dist/collection/utils/key.utils.js +86 -0
  362. package/dist/collection/utils/key.utils.js.map +1 -0
  363. package/dist/collection/utils/mobile.js +7 -0
  364. package/dist/collection/utils/mobile.js.map +1 -0
  365. package/dist/collection/utils/platform.js +9 -0
  366. package/dist/collection/utils/platform.js.map +1 -0
  367. package/dist/collection/utils/row-header-utils.js +9 -0
  368. package/dist/collection/utils/row-header-utils.js.map +1 -0
  369. package/dist/collection/utils/store.types.js +2 -0
  370. package/dist/collection/utils/store.types.js.map +1 -0
  371. package/dist/collection/utils/store.utils.js +15 -0
  372. package/dist/collection/utils/store.utils.js.map +1 -0
  373. package/dist/esm/app-globals-C3ZHKjnB.js +14 -0
  374. package/dist/esm/app-globals-C3ZHKjnB.js.map +1 -0
  375. package/dist/esm/cell-renderer-C2Td6LKY.js +54 -0
  376. package/dist/esm/cell-renderer-C2Td6LKY.js.map +1 -0
  377. package/dist/esm/debounce-BfO9dz9v.js +488 -0
  378. package/dist/esm/debounce-BfO9dz9v.js.map +1 -0
  379. package/dist/esm/dimension.helpers-DDil7Dg0.js +3546 -0
  380. package/dist/esm/dimension.helpers-DDil7Dg0.js.map +1 -0
  381. package/dist/esm/edit.utils-ClxXX_x9.js +99 -0
  382. package/dist/esm/edit.utils-ClxXX_x9.js.map +1 -0
  383. package/dist/esm/events-BvSmBueA.js +43 -0
  384. package/dist/esm/events-BvSmBueA.js.map +1 -0
  385. package/dist/esm/filter.button-DmOE7VCJ.js +39 -0
  386. package/dist/esm/filter.button-DmOE7VCJ.js.map +1 -0
  387. package/dist/esm/grouping.row.renderer-6NYszUJA.js +60 -0
  388. package/dist/esm/grouping.row.renderer-6NYszUJA.js.map +1 -0
  389. package/dist/esm/header-cell-renderer-BVHTuFGE.js +1715 -0
  390. package/dist/esm/header-cell-renderer-BVHTuFGE.js.map +1 -0
  391. package/dist/esm/index-Dyptvvxf.js +2519 -0
  392. package/dist/esm/index-Dyptvvxf.js.map +1 -0
  393. package/dist/esm/index.js +6232 -0
  394. package/dist/esm/index.js.map +1 -0
  395. package/dist/esm/loader.js +17 -0
  396. package/dist/esm/loader.js.map +1 -0
  397. package/dist/esm/revo-grid.entry.js +3213 -0
  398. package/dist/esm/revo-grid.entry.js.map +1 -0
  399. package/dist/esm/revo-grid.js +27 -0
  400. package/dist/esm/revo-grid.js.map +1 -0
  401. package/dist/esm/revogr-attribution.revogr-extra.revogr-focus.revogr-grouping-overlay.revogr-header-unified.revogr-overlay-selection.revogr-row-headers.revogr-scroll-virtual.revogr-temp-range.entry.js.map +1 -0
  402. package/dist/esm/revogr-attribution_9.entry.js +2619 -0
  403. package/dist/esm/revogr-attribution_9.entry.js.map +1 -0
  404. package/dist/esm/revogr-clipboard.revogr-edit.revogr-order-editor.entry.js.map +1 -0
  405. package/dist/esm/revogr-clipboard_3.entry.js +467 -0
  406. package/dist/esm/revogr-clipboard_3.entry.js.map +1 -0
  407. package/dist/esm/revogr-data.revogr-header.revogr-viewport-scroll.vnode-html.entry.js.map +1 -0
  408. package/dist/esm/revogr-data_4.entry.js +1415 -0
  409. package/dist/esm/revogr-data_4.entry.js.map +1 -0
  410. package/dist/esm/revogr-filter-panel.entry.js +380 -0
  411. package/dist/esm/revogr-filter-panel.entry.js.map +1 -0
  412. package/dist/esm/row-renderer-sb6QTqH-.js +46 -0
  413. package/dist/esm/row-renderer-sb6QTqH-.js.map +1 -0
  414. package/dist/esm/text-editor-CxXqoicM.js +79 -0
  415. package/dist/esm/text-editor-CxXqoicM.js.map +1 -0
  416. package/dist/esm/throttle-DXYrmEeb.js +525 -0
  417. package/dist/esm/throttle-DXYrmEeb.js.map +1 -0
  418. package/dist/esm/tree-data.plugin-C2eXkf9_.js +5319 -0
  419. package/dist/esm/tree-data.plugin-C2eXkf9_.js.map +1 -0
  420. package/dist/esm/viewport.helpers-VXhsJZtn.js +55 -0
  421. package/dist/esm/viewport.helpers-VXhsJZtn.js.map +1 -0
  422. package/dist/esm/viewport.store-C-GnV31k.js +512 -0
  423. package/dist/esm/viewport.store-C-GnV31k.js.map +1 -0
  424. package/dist/index.cjs.js +1 -0
  425. package/dist/index.js +1 -0
  426. package/dist/revo-grid/app-globals-C3ZHKjnB.js +14 -0
  427. package/dist/revo-grid/app-globals-C3ZHKjnB.js.map +1 -0
  428. package/dist/revo-grid/cell-renderer-C2Td6LKY.js +54 -0
  429. package/dist/revo-grid/cell-renderer-C2Td6LKY.js.map +1 -0
  430. package/dist/revo-grid/debounce-BfO9dz9v.js +488 -0
  431. package/dist/revo-grid/debounce-BfO9dz9v.js.map +1 -0
  432. package/dist/revo-grid/dimension.helpers-DDil7Dg0.js +3546 -0
  433. package/dist/revo-grid/dimension.helpers-DDil7Dg0.js.map +1 -0
  434. package/dist/revo-grid/edit.utils-ClxXX_x9.js +99 -0
  435. package/dist/revo-grid/edit.utils-ClxXX_x9.js.map +1 -0
  436. package/dist/revo-grid/events-BvSmBueA.js +43 -0
  437. package/dist/revo-grid/events-BvSmBueA.js.map +1 -0
  438. package/dist/revo-grid/filter.button-DmOE7VCJ.js +39 -0
  439. package/dist/revo-grid/filter.button-DmOE7VCJ.js.map +1 -0
  440. package/dist/revo-grid/grouping.row.renderer-6NYszUJA.js +60 -0
  441. package/dist/revo-grid/grouping.row.renderer-6NYszUJA.js.map +1 -0
  442. package/dist/revo-grid/header-cell-renderer-BVHTuFGE.js +1715 -0
  443. package/dist/revo-grid/header-cell-renderer-BVHTuFGE.js.map +1 -0
  444. package/dist/revo-grid/index-Dyptvvxf.js +2490 -0
  445. package/dist/revo-grid/index-Dyptvvxf.js.map +1 -0
  446. package/dist/revo-grid/index.esm.js +6232 -0
  447. package/dist/revo-grid/index.esm.js.map +1 -0
  448. package/dist/revo-grid/loader.esm.js.map +1 -0
  449. package/dist/revo-grid/revo-grid.entry.esm.js.map +1 -0
  450. package/dist/revo-grid/revo-grid.entry.js +3213 -0
  451. package/dist/revo-grid/revo-grid.entry.js.map +1 -0
  452. package/dist/revo-grid/revo-grid.esm.js +27 -0
  453. package/dist/revo-grid/revo-grid.esm.js.map +1 -0
  454. package/dist/revo-grid/revogr-attribution.revogr-extra.revogr-focus.revogr-grouping-overlay.revogr-header-unified.revogr-overlay-selection.revogr-row-headers.revogr-scroll-virtual.revogr-temp-range.entry.esm.js.map +1 -0
  455. package/dist/revo-grid/revogr-attribution_9.entry.js +2619 -0
  456. package/dist/revo-grid/revogr-attribution_9.entry.js.map +1 -0
  457. package/dist/revo-grid/revogr-clipboard.revogr-edit.revogr-order-editor.entry.esm.js.map +1 -0
  458. package/dist/revo-grid/revogr-clipboard_3.entry.js +467 -0
  459. package/dist/revo-grid/revogr-clipboard_3.entry.js.map +1 -0
  460. package/dist/revo-grid/revogr-data.revogr-header.revogr-viewport-scroll.vnode-html.entry.esm.js.map +1 -0
  461. package/dist/revo-grid/revogr-data_4.entry.js +1415 -0
  462. package/dist/revo-grid/revogr-data_4.entry.js.map +1 -0
  463. package/dist/revo-grid/revogr-filter-panel.entry.esm.js.map +1 -0
  464. package/dist/revo-grid/revogr-filter-panel.entry.js +380 -0
  465. package/dist/revo-grid/revogr-filter-panel.entry.js.map +1 -0
  466. package/dist/revo-grid/row-renderer-sb6QTqH-.js +46 -0
  467. package/dist/revo-grid/row-renderer-sb6QTqH-.js.map +1 -0
  468. package/dist/revo-grid/text-editor-CxXqoicM.js +79 -0
  469. package/dist/revo-grid/text-editor-CxXqoicM.js.map +1 -0
  470. package/dist/revo-grid/throttle-DXYrmEeb.js +525 -0
  471. package/dist/revo-grid/throttle-DXYrmEeb.js.map +1 -0
  472. package/dist/revo-grid/tree-data.plugin-C2eXkf9_.js +5319 -0
  473. package/dist/revo-grid/tree-data.plugin-C2eXkf9_.js.map +1 -0
  474. package/dist/revo-grid/viewport.helpers-VXhsJZtn.js +55 -0
  475. package/dist/revo-grid/viewport.helpers-VXhsJZtn.js.map +1 -0
  476. package/dist/revo-grid/viewport.store-C-GnV31k.js +512 -0
  477. package/dist/revo-grid/viewport.store-C-GnV31k.js.map +1 -0
  478. package/dist/types/components/attribution/revogr-attribution.d.ts +12 -0
  479. package/dist/types/components/clipboard/revogr-clipboard.d.ts +89 -0
  480. package/dist/types/components/data/cell-renderer.d.ts +12 -0
  481. package/dist/types/components/data/column.service.d.ts +65 -0
  482. package/dist/types/components/data/revogr-data.d.ts +132 -0
  483. package/dist/types/components/data/row-highlight.plugin.d.ts +10 -0
  484. package/dist/types/components/data/row-renderer.d.ts +13 -0
  485. package/dist/types/components/editors/edit.utils.d.ts +3 -0
  486. package/dist/types/components/editors/revogr-edit.d.ts +63 -0
  487. package/dist/types/components/editors/text-editor.d.ts +43 -0
  488. package/dist/types/components/extra/revogr-extra.d.ts +38 -0
  489. package/dist/types/components/grouping-overlay/revogr-grouping-overlay.d.ts +71 -0
  490. package/dist/types/components/header/header-cell-renderer.d.ts +10 -0
  491. package/dist/types/components/header/header-group-renderer.d.ts +17 -0
  492. package/dist/types/components/header/header-renderer.d.ts +24 -0
  493. package/dist/types/components/header/resizable.directive.d.ts +60 -0
  494. package/dist/types/components/header/resizable.element.d.ts +5 -0
  495. package/dist/types/components/header/revogr-header-unified.d.ts +168 -0
  496. package/dist/types/components/header/revogr-header.d.ts +131 -0
  497. package/dist/types/components/order/order-renderer.d.ts +29 -0
  498. package/dist/types/components/order/order-row.service.d.ts +27 -0
  499. package/dist/types/components/order/revogr-order-editor.d.ts +56 -0
  500. package/dist/types/components/overlay/autofill.service.d.ts +80 -0
  501. package/dist/types/components/overlay/keyboard.service.d.ts +29 -0
  502. package/dist/types/components/overlay/revogr-overlay-selection.d.ts +295 -0
  503. package/dist/types/components/overlay/selection.utils.d.ts +47 -0
  504. package/dist/types/components/revoGrid/grid.helpers.d.ts +17 -0
  505. package/dist/types/components/revoGrid/plugin.service.d.ts +37 -0
  506. package/dist/types/components/revoGrid/revo-grid.d.ts +801 -0
  507. package/dist/types/components/revoGrid/viewport.helpers.d.ts +42 -0
  508. package/dist/types/components/revoGrid/viewport.resize.service.d.ts +17 -0
  509. package/dist/types/components/revoGrid/viewport.scrolling.service.d.ts +24 -0
  510. package/dist/types/components/revoGrid/viewport.service.d.ts +59 -0
  511. package/dist/types/components/rowHeaders/revogr-row-headers.d.ts +51 -0
  512. package/dist/types/components/rowHeaders/row-header-render.d.ts +9 -0
  513. package/dist/types/components/scroll/revogr-viewport-scroll.d.ts +159 -0
  514. package/dist/types/components/scrollable/autohide-scroll.plugin.d.ts +22 -0
  515. package/dist/types/components/scrollable/revogr-scroll-virtual.d.ts +49 -0
  516. package/dist/types/components/selectionFocus/revogr-focus.d.ts +63 -0
  517. package/dist/types/components/selectionTempRange/revogr-temp-range.d.ts +28 -0
  518. package/dist/types/components/vnode/vnode-converter.d.ts +19 -0
  519. package/dist/types/components/vnode/vnode.utils.d.ts +9 -0
  520. package/dist/types/components.d.ts +2928 -0
  521. package/dist/types/global/global.d.ts +1 -0
  522. package/dist/types/index.d.ts +9 -0
  523. package/dist/types/plugins/add-rows-on-paste.plugin.d.ts +14 -0
  524. package/dist/types/plugins/base.plugin.d.ts +51 -0
  525. package/dist/types/plugins/column-hide.plugin.d.ts +110 -0
  526. package/dist/types/plugins/column-manage.plugin.d.ts +225 -0
  527. package/dist/types/plugins/column-stretch.plugin.d.ts +159 -0
  528. package/dist/types/plugins/column.auto-size.plugin.d.ts +69 -0
  529. package/dist/types/plugins/column.stretch.plugin.d.ts +20 -0
  530. package/dist/types/plugins/customColumnDrag/column-move.helper.d.ts +71 -0
  531. package/dist/types/plugins/customColumnDrag/custom-column-drag.plugin.d.ts +35 -0
  532. package/dist/types/plugins/customColumnDrag/drag.handler.d.ts +112 -0
  533. package/dist/types/plugins/customColumnDrag/example.d.ts +31 -0
  534. package/dist/types/plugins/customColumnDrag/index.d.ts +5 -0
  535. package/dist/types/plugins/customColumnDrag/types.d.ts +46 -0
  536. package/dist/types/plugins/dispatcher.d.ts +20 -0
  537. package/dist/types/plugins/enhanced-scrollbar.plugin.d.ts +76 -0
  538. package/dist/types/plugins/export/csv.d.ts +9 -0
  539. package/dist/types/plugins/export/export.plugin.d.ts +24 -0
  540. package/dist/types/plugins/export/types.d.ts +23 -0
  541. package/dist/types/plugins/filter/conditions/equal.d.ts +4 -0
  542. package/dist/types/plugins/filter/conditions/number/greaterThan.d.ts +3 -0
  543. package/dist/types/plugins/filter/conditions/number/greaterThanOrEqual.d.ts +3 -0
  544. package/dist/types/plugins/filter/conditions/number/lessThan.d.ts +3 -0
  545. package/dist/types/plugins/filter/conditions/number/lessThanOrEqual.d.ts +3 -0
  546. package/dist/types/plugins/filter/conditions/set.d.ts +4 -0
  547. package/dist/types/plugins/filter/conditions/string/beginswith.d.ts +3 -0
  548. package/dist/types/plugins/filter/conditions/string/contains.d.ts +4 -0
  549. package/dist/types/plugins/filter/filter.button.d.ts +14 -0
  550. package/dist/types/plugins/filter/filter.indexed.d.ts +20 -0
  551. package/dist/types/plugins/filter/filter.panel.d.ts +53 -0
  552. package/dist/types/plugins/filter/filter.plugin.d.ts +73 -0
  553. package/dist/types/plugins/filter/filter.types.d.ts +129 -0
  554. package/dist/types/plugins/grid-setup.d.ts +65 -0
  555. package/dist/types/plugins/groupingRow/grouping.const.d.ts +14 -0
  556. package/dist/types/plugins/groupingRow/grouping.row.expand.service.d.ts +15 -0
  557. package/dist/types/plugins/groupingRow/grouping.row.plugin.d.ts +39 -0
  558. package/dist/types/plugins/groupingRow/grouping.row.renderer.d.ts +6 -0
  559. package/dist/types/plugins/groupingRow/grouping.row.types.d.ts +144 -0
  560. package/dist/types/plugins/groupingRow/grouping.service.d.ts +36 -0
  561. package/dist/types/plugins/groupingRow/grouping.trimmed.service.d.ts +10 -0
  562. package/dist/types/plugins/index.d.ts +22 -0
  563. package/dist/types/plugins/manual-focus.plugin.d.ts +113 -0
  564. package/dist/types/plugins/moveColumn/column.drag.plugin.d.ts +50 -0
  565. package/dist/types/plugins/moveColumn/order-column.handler.d.ts +16 -0
  566. package/dist/types/plugins/pin-shadow.plugin.d.ts +73 -0
  567. package/dist/types/plugins/resize-indicator.plugin.d.ts +71 -0
  568. package/dist/types/plugins/row-select-plugin-2026228.d.ts +367 -0
  569. package/dist/types/plugins/row-select.plugin.d.ts +378 -0
  570. package/dist/types/plugins/rtl/rtl.plugin.d.ts +37 -0
  571. package/dist/types/plugins/sorting/sorting.func.d.ts +9 -0
  572. package/dist/types/plugins/sorting/sorting.plugin.d.ts +48 -0
  573. package/dist/types/plugins/sorting/sorting.sign.d.ts +6 -0
  574. package/dist/types/plugins/sorting/sorting.types.d.ts +14 -0
  575. package/dist/types/plugins/tree-data.plugin.d.ts +56 -0
  576. package/dist/types/plugins/wcag/index.d.ts +26 -0
  577. package/dist/types/services/cell.helpers.d.ts +2 -0
  578. package/dist/types/services/column.data.provider.d.ts +27 -0
  579. package/dist/types/services/data.provider.d.ts +36 -0
  580. package/dist/types/services/dimension.provider.d.ts +71 -0
  581. package/dist/types/services/local.scroll.service.d.ts +36 -0
  582. package/dist/types/services/local.scroll.timer.d.ts +32 -0
  583. package/dist/types/services/selection.store.connector.d.ts +74 -0
  584. package/dist/types/services/viewport.provider.d.ts +9 -0
  585. package/dist/types/stencil-public-runtime.d.ts +1709 -0
  586. package/dist/types/store/dataSource/data.proxy.d.ts +14 -0
  587. package/dist/types/store/dataSource/data.store.d.ts +77 -0
  588. package/dist/types/store/dataSource/index.d.ts +3 -0
  589. package/dist/types/store/dataSource/trimmed.plugin.d.ts +12 -0
  590. package/dist/types/store/dimension/dimension.helpers.d.ts +24 -0
  591. package/dist/types/store/dimension/dimension.recalculate.plugin.d.ts +15 -0
  592. package/dist/types/store/dimension/dimension.store.d.ts +34 -0
  593. package/dist/types/store/dimension/dimension.trim.plugin.d.ts +13 -0
  594. package/dist/types/store/dimension/index.d.ts +2 -0
  595. package/dist/types/store/index.d.ts +8 -0
  596. package/dist/types/store/selection/index.d.ts +2 -0
  597. package/dist/types/store/selection/selection.helpers.d.ts +5 -0
  598. package/dist/types/store/selection/selection.store.d.ts +22 -0
  599. package/dist/types/store/vp/index.d.ts +7 -0
  600. package/dist/types/store/vp/viewport.helpers.d.ts +54 -0
  601. package/dist/types/store/vp/viewport.store.d.ts +38 -0
  602. package/dist/types/themeManager/theme.compact.d.ts +4 -0
  603. package/dist/types/themeManager/theme.default.d.ts +4 -0
  604. package/dist/types/themeManager/theme.material.d.ts +4 -0
  605. package/dist/types/themeManager/theme.service.d.ts +13 -0
  606. package/dist/types/types/dimension.d.ts +8 -0
  607. package/dist/types/types/events.d.ts +2 -0
  608. package/dist/types/types/index.d.ts +8 -0
  609. package/dist/types/types/interfaces.d.ts +795 -0
  610. package/dist/types/types/plugin.d.ts +9 -0
  611. package/dist/types/types/plugin.types.d.ts +48 -0
  612. package/dist/types/types/selection.d.ts +178 -0
  613. package/dist/types/types/theme.d.ts +7 -0
  614. package/dist/types/types/viewport.interfaces.d.ts +45 -0
  615. package/dist/types/utils/batchGroupCollapse.d.ts +77 -0
  616. package/dist/types/utils/browser.d.ts +1 -0
  617. package/dist/types/utils/cell-template-helper.d.ts +74 -0
  618. package/dist/types/utils/closest.polifill.d.ts +0 -0
  619. package/dist/types/utils/column.utils.d.ts +110 -0
  620. package/dist/types/utils/consts.d.ts +22 -0
  621. package/dist/types/utils/events.d.ts +5 -0
  622. package/dist/types/utils/header.utils.d.ts +2 -0
  623. package/dist/types/utils/index.d.ts +32 -0
  624. package/dist/types/utils/key.codes.d.ts +73 -0
  625. package/dist/types/utils/key.utils.d.ts +12 -0
  626. package/dist/types/utils/mobile.d.ts +1 -0
  627. package/dist/types/utils/platform.d.ts +4 -0
  628. package/dist/types/utils/row-header-utils.d.ts +2 -0
  629. package/dist/types/utils/store.types.d.ts +97 -0
  630. package/dist/types/utils/store.utils.d.ts +10 -0
  631. package/hydrate/index.d.ts +273 -0
  632. package/hydrate/index.js +39851 -0
  633. package/hydrate/index.mjs +39843 -0
  634. package/hydrate/package.json +12 -0
  635. package/loader/cdn.js +4 -0
  636. package/loader/index.cjs.js +4 -0
  637. package/loader/index.d.ts +24 -0
  638. package/loader/index.es2017.js +4 -0
  639. package/loader/index.js +5 -0
  640. package/package.json +149 -0
  641. package/readme.md +303 -0
  642. package/standalone/column.service.js +1110 -0
  643. package/standalone/column.service.js.map +1 -0
  644. package/standalone/consts.js +30 -0
  645. package/standalone/consts.js.map +1 -0
  646. package/standalone/data.store.js +3101 -0
  647. package/standalone/data.store.js.map +1 -0
  648. package/standalone/debounce.js +215 -0
  649. package/standalone/debounce.js.map +1 -0
  650. package/standalone/dimension.helpers.js +229 -0
  651. package/standalone/dimension.helpers.js.map +1 -0
  652. package/standalone/filter.button.js +39 -0
  653. package/standalone/filter.button.js.map +1 -0
  654. package/standalone/grouping.service.js +234 -0
  655. package/standalone/grouping.service.js.map +1 -0
  656. package/standalone/header-group-renderer.js +634 -0
  657. package/standalone/header-group-renderer.js.map +1 -0
  658. package/standalone/index.d.ts +72 -0
  659. package/standalone/index.js +6272 -0
  660. package/standalone/index.js.map +1 -0
  661. package/standalone/index2.js +131 -0
  662. package/standalone/index2.js.map +1 -0
  663. package/standalone/local.scroll.timer.js +222 -0
  664. package/standalone/local.scroll.timer.js.map +1 -0
  665. package/standalone/platform.js +90 -0
  666. package/standalone/platform.js.map +1 -0
  667. package/standalone/revo-grid.d.ts +11 -0
  668. package/standalone/revo-grid.js +8734 -0
  669. package/standalone/revo-grid.js.map +1 -0
  670. package/standalone/revogr-attribution.d.ts +11 -0
  671. package/standalone/revogr-attribution.js +12 -0
  672. package/standalone/revogr-attribution.js.map +1 -0
  673. package/standalone/revogr-attribution2.js +32 -0
  674. package/standalone/revogr-attribution2.js.map +1 -0
  675. package/standalone/revogr-clipboard.d.ts +11 -0
  676. package/standalone/revogr-clipboard.js +12 -0
  677. package/standalone/revogr-clipboard.js.map +1 -0
  678. package/standalone/revogr-clipboard2.js +179 -0
  679. package/standalone/revogr-clipboard2.js.map +1 -0
  680. package/standalone/revogr-data.d.ts +11 -0
  681. package/standalone/revogr-data.js +12 -0
  682. package/standalone/revogr-data.js.map +1 -0
  683. package/standalone/revogr-data2.js +503 -0
  684. package/standalone/revogr-data2.js.map +1 -0
  685. package/standalone/revogr-edit.d.ts +11 -0
  686. package/standalone/revogr-edit.js +12 -0
  687. package/standalone/revogr-edit.js.map +1 -0
  688. package/standalone/revogr-edit2.js +330 -0
  689. package/standalone/revogr-edit2.js.map +1 -0
  690. package/standalone/revogr-extra.d.ts +11 -0
  691. package/standalone/revogr-extra.js +12 -0
  692. package/standalone/revogr-extra.js.map +1 -0
  693. package/standalone/revogr-extra2.js +73 -0
  694. package/standalone/revogr-extra2.js.map +1 -0
  695. package/standalone/revogr-filter-panel.d.ts +11 -0
  696. package/standalone/revogr-filter-panel.js +411 -0
  697. package/standalone/revogr-filter-panel.js.map +1 -0
  698. package/standalone/revogr-focus.d.ts +11 -0
  699. package/standalone/revogr-focus.js +12 -0
  700. package/standalone/revogr-focus.js.map +1 -0
  701. package/standalone/revogr-focus2.js +119 -0
  702. package/standalone/revogr-focus2.js.map +1 -0
  703. package/standalone/revogr-grouping-overlay.d.ts +11 -0
  704. package/standalone/revogr-grouping-overlay.js +12 -0
  705. package/standalone/revogr-grouping-overlay.js.map +1 -0
  706. package/standalone/revogr-grouping-overlay2.js +356 -0
  707. package/standalone/revogr-grouping-overlay2.js.map +1 -0
  708. package/standalone/revogr-header-unified.d.ts +11 -0
  709. package/standalone/revogr-header-unified.js +12 -0
  710. package/standalone/revogr-header-unified.js.map +1 -0
  711. package/standalone/revogr-header-unified2.js +781 -0
  712. package/standalone/revogr-header-unified2.js.map +1 -0
  713. package/standalone/revogr-header.d.ts +11 -0
  714. package/standalone/revogr-header.js +12 -0
  715. package/standalone/revogr-header.js.map +1 -0
  716. package/standalone/revogr-header2.js +343 -0
  717. package/standalone/revogr-header2.js.map +1 -0
  718. package/standalone/revogr-order-editor.d.ts +11 -0
  719. package/standalone/revogr-order-editor.js +12 -0
  720. package/standalone/revogr-order-editor.js.map +1 -0
  721. package/standalone/revogr-order-editor2.js +201 -0
  722. package/standalone/revogr-order-editor2.js.map +1 -0
  723. package/standalone/revogr-overlay-selection.d.ts +11 -0
  724. package/standalone/revogr-overlay-selection.js +12 -0
  725. package/standalone/revogr-overlay-selection.js.map +1 -0
  726. package/standalone/revogr-overlay-selection2.js +1068 -0
  727. package/standalone/revogr-overlay-selection2.js.map +1 -0
  728. package/standalone/revogr-row-headers.d.ts +11 -0
  729. package/standalone/revogr-row-headers.js +12 -0
  730. package/standalone/revogr-row-headers.js.map +1 -0
  731. package/standalone/revogr-row-headers2.js +625 -0
  732. package/standalone/revogr-row-headers2.js.map +1 -0
  733. package/standalone/revogr-scroll-virtual.d.ts +11 -0
  734. package/standalone/revogr-scroll-virtual.js +12 -0
  735. package/standalone/revogr-scroll-virtual.js.map +1 -0
  736. package/standalone/revogr-scroll-virtual2.js +235 -0
  737. package/standalone/revogr-scroll-virtual2.js.map +1 -0
  738. package/standalone/revogr-temp-range.d.ts +11 -0
  739. package/standalone/revogr-temp-range.js +12 -0
  740. package/standalone/revogr-temp-range.js.map +1 -0
  741. package/standalone/revogr-temp-range2.js +93 -0
  742. package/standalone/revogr-temp-range2.js.map +1 -0
  743. package/standalone/revogr-viewport-scroll.d.ts +11 -0
  744. package/standalone/revogr-viewport-scroll.js +12 -0
  745. package/standalone/revogr-viewport-scroll.js.map +1 -0
  746. package/standalone/revogr-viewport-scroll2.js +761 -0
  747. package/standalone/revogr-viewport-scroll2.js.map +1 -0
  748. package/standalone/row-renderer.js +41 -0
  749. package/standalone/row-renderer.js.map +1 -0
  750. package/standalone/selection.utils.js +179 -0
  751. package/standalone/selection.utils.js.map +1 -0
  752. package/standalone/throttle.js +75 -0
  753. package/standalone/throttle.js.map +1 -0
  754. package/standalone/toNumber.js +282 -0
  755. package/standalone/toNumber.js.map +1 -0
  756. package/standalone/vnode-converter.js +46 -0
  757. package/standalone/vnode-converter.js.map +1 -0
  758. package/standalone/vnode-html.d.ts +11 -0
  759. package/standalone/vnode-html.js +12 -0
  760. package/standalone/vnode-html.js.map +1 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"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","sources":["src/components/attribution/revogr-attribution.tsx","src/components/extra/revogr-extra.tsx","src/components/overlay/selection.utils.ts","src/components/selectionFocus/revogr-focus-style.scss?tag=revogr-focus","src/components/selectionFocus/revogr-focus.tsx","src/components/grouping-overlay/revogr-grouping-overlay.scss?tag=revogr-grouping-overlay","src/components/grouping-overlay/revogr-grouping-overlay.tsx","src/components/header/revogr-header-unified-style.scss?tag=revogr-header-unified","src/components/header/revogr-header-unified.tsx","src/components/overlay/keyboard.service.ts","src/components/overlay/autofill.service.tsx","src/components/overlay/revogr-overlay-style.scss?tag=revogr-overlay-selection","src/components/overlay/revogr-overlay-selection.tsx","src/components/rowHeaders/row-header-render.tsx","src/components/rowHeaders/revogr-row-headers.tsx","src/components/scrollable/autohide-scroll.plugin.ts","src/components/scrollable/revogr-scroll-style.scss?tag=revogr-scroll-virtual","src/components/scrollable/revogr-scroll-virtual.tsx","src/components/selectionTempRange/revogr-temp-range-style.scss?tag=revogr-temp-range","src/components/selectionTempRange/revogr-temp-range.tsx"],"sourcesContent":["import { Component, Host, h } from '@stencil/core';\n/**\n * If you’re thinking about removing the attribution, we’d like to share a few thoughts first:\n * If you’re using RevoGrid in your organization and it’s helping you make money, we depend on your support to keep improving and maintaining RevoGrid under an MIT License.\n * Before you remove the attribution, please consider how you can support RevoGrid to help keep it running smoothly.\n * Using RevoGrid for a personal project? Awesome! Feel free to remove the attribution. We appreciate your support.\n */\n/**\n * @internal\n */\n@Component({\n tag: 'revogr-attribution',\n})\nexport class Attribution {\n render() {\n return (\n <Host>\n <a\n href=\"https://rv-grid.com/guide/attribution\"\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n title=\"Made with ❤️ by Revolist OU Team\"\n class=\"value\"\n >\n RevoGrid\n </a>\n </Host>\n );\n }\n}\n","import { h, Component, Method, Prop, State, VNode } from '@stencil/core';\nimport type { ExtraNodeFuncConfig } from '@type';\n\n/**\n * Contains extra elements for stencil components.\n * Performs rendering and updates for external components.\n * \n * @example\n * In Plugins if you want to add extra elements to grid and use stenciljs vnodes reactivity:\n * function paginationPanel(this: PaginationPlugin, config: { refresh: () => void }) {\n * // use `config.refresh()` for component to re-render\n * return h('div')\n * }\n * \n * revogrid.registerVNode = [\n * ...existingNodes,\n * paginationPanel.bind(this)\n * ];\n\n\n/**\n * @internal\n */\n@Component({\n tag: 'revogr-extra',\n})\nexport class RevoGridExtra {\n /**\n * Nodes to render\n */\n @Prop() nodes: (\n | VNode\n | ((c: ExtraNodeFuncConfig) => VNode)\n )[] = [];\n /**\n * Force component to re-render\n */\n @State() update = 1;\n\n /**\n * Refreshes the extra component. Useful if you want to manually\n * force the component to re-render.\n */\n @Method() async refresh() {\n this.update *= -1;\n }\n\n render() {\n return this.nodes?.map(node => {\n // Check if node is a function or a stencil component\n // If function wrap it in a stencil component with the refresh function\n if (typeof node === 'function') {\n const config: Partial<ExtraNodeFuncConfig> = {};\n const getNodes = () => [node({ refresh: () => config.refresh?.() })];\n\n return (\n <revogr-extra\n nodes={getNodes()}\n ref={(el?: HTMLRevogrExtraElement) => {\n if (el) {\n // Update exclusively for current node\n config.refresh = () => {\n el.nodes = getNodes();\n };\n }\n }}\n />\n );\n }\n return node;\n });\n }\n}\n","import {\n DimensionIndexInput,\n DSourceState,\n getItemByIndex,\n getItemByPosition,\n getSourceItem,\n} from '@store';\nimport type {\n DimensionSettingsState,\n Cell,\n RangeArea,\n RangeAreaCss,\n DataLookup,\n DimensionRows,\n DataType,\n EditCellStore,\n} from '@type';\nimport { getPropertyFromEvent } from '../../utils/events';\nimport { Observable } from '../../utils';\n\nexport type EventData = {\n el: HTMLElement;\n rows: DimensionSettingsState;\n cols: DimensionSettingsState;\n lastCell: Cell;\n focus: Cell | null;\n range: RangeArea | null;\n edit: EditCellStore | null;\n};\n\nexport function collectModelsOfRange(\n data: DataLookup,\n store: Observable<DSourceState<DataType, DimensionRows>>,\n) {\n const models: Partial<DataLookup> = {};\n for (let i in data) {\n const rowIndex = parseInt(i, 10);\n models[rowIndex] = getSourceItem(store, rowIndex);\n }\n\n return models;\n}\n\nexport function getFocusCellBasedOnEvent(\n e: MouseEvent | TouchEvent,\n data: EventData,\n): Cell | null {\n // If event default is prevented, return\n if (e.defaultPrevented) {\n return null;\n }\n\n // Get coordinates from event object\n const x = getPropertyFromEvent(e, 'clientX');\n const y = getPropertyFromEvent(e, 'clientY');\n\n // If coordinates are not available, return\n if (x === null || y === null) {\n return null;\n }\n\n // Get current cell based on coordinates and data\n const focusCell = getCurrentCell({ x, y }, data);\n // If current cell is not available, return\n if (isAfterLast(focusCell, data.lastCell)) {\n return null;\n }\n\n return focusCell;\n}\n\n/**\n * Calculate cell based on x, y position\n */\nexport function getCurrentCell(\n { x, y }: Cell,\n { el, rows, cols }: Pick<EventData, 'el' | 'rows' | 'cols'>,\n): Cell {\n // Get the bounding rectangle of the element\n const { top, left, height, width } = el.getBoundingClientRect();\n\n // Calculate the cell position relative to the element\n let cellY = y - top;\n let cellX = x - left;\n\n // Limit the cell position to the element height\n if (cellY >= height) {\n cellY = height - 1;\n }\n\n // Limit the cell position to the element width\n if (cellX >= width) {\n cellX = width - 1;\n }\n\n // Get the row and column items based on the cell position\n const rgRow = getItemByPosition(rows, cellY);\n const rgCol = getItemByPosition(cols, cellX);\n\n // Set the row and column index to 0 if they are before the first item\n if (rgCol.itemIndex < 0) {\n rgCol.itemIndex = 0;\n }\n\n if (rgRow.itemIndex < 0) {\n rgRow.itemIndex = 0;\n }\n\n return { x: rgCol.itemIndex, y: rgRow.itemIndex };\n}\n\nexport function getCoordinate(\n range: RangeArea,\n focus: Cell,\n changes: Partial<Cell>,\n isMulti = false,\n) {\n const updateCoordinate = (c: keyof Cell, pos = 0) => {\n const start = { x: range.x, y: range.y };\n const end = isMulti ? { x: range.x1, y: range.y1 } : start;\n const point = end[c] > focus[c] ? end : start;\n point[c] += pos;\n return { start, end };\n };\n\n if (changes.x) {\n return updateCoordinate('x', changes['x']);\n }\n if (changes.y) {\n return updateCoordinate('y', changes['y']);\n }\n return null;\n}\n\n/**\n * Check if the x coordinate of the cell position is after or equal to the x coordinate of the last cell position\n * or if the y coordinate of the cell position is after or equal to the y coordinate of the last cell position\n */\nexport function isAfterLast({ x, y }: Cell, lastCell: Cell) {\n return x >= lastCell.x || y >= lastCell.y;\n}\n\n/** check if out of range */\nexport function isBeforeFirst({ x, y }: Cell) {\n return x < 0 || y < 0;\n}\n\n/** Compare cells, only 1 coordinate difference is possible */\n// export function getDirectionCoordinate(initial: Cell, last: Cell): Partial<Cell> | null {\n// const c: (keyof Cell)[] = ['x', 'y'];\n// for (let k of c) {\n// if (initial[k] !== last[k]) {\n// return { [k]: 1 };\n// }\n// }\n// return null;\n// }\n\n// export function getLargestAxis(initial: Cell, last: Cell): Partial<Cell> | null {\n// const cell: Partial<Cell> = {};\n// const c: (keyof Cell)[] = ['x', 'y'];\n// for (let k of c) {\n// cell[k] = Math.abs(initial[k] - last[k]);\n// }\n// if (cell.x > cell.y) {\n// return { x: 1 };\n// }\n// if (cell.y > cell.x) {\n// return { y: 1 };\n// }\n// return null;\n// }\n\nexport function styleByCellProps(styles: { [key: string]: number }): RangeAreaCss {\n return {\n left: `${styles.left}px`,\n top: `${styles.top}px`,\n width: `${styles.width}px`,\n height: `${styles.height}px`,\n };\n}\n\nexport function getCell(\n { x, y, x1, y1 }: RangeArea,\n dimensionRow: Pick<\n DimensionIndexInput,\n 'indexToItem' | 'indexes' | 'originItemSize'\n >,\n dimensionCol: Pick<\n DimensionIndexInput,\n 'indexToItem' | 'indexes' | 'originItemSize'\n >,\n) {\n const top = getItemByIndex(dimensionRow, y).start;\n const left = getItemByIndex(dimensionCol, x).start;\n const bottom = getItemByIndex(dimensionRow, y1).end;\n const right = getItemByIndex(dimensionCol, x1).end;\n\n return {\n left,\n right,\n top,\n bottom,\n width: right - left,\n height: bottom - top,\n };\n}\n","@use '../../global/_mixins.scss' as *;\n\nrevogr-focus.focused-cell {\n @include selection(1px);\n\n position: absolute;\n pointer-events: none;\n z-index: 9;\n display: block !important;\n}\n","import {\n Component,\n Prop,\n h,\n Host,\n Event,\n Element,\n EventEmitter,\n} from '@stencil/core';\nimport { FOCUS_CLASS } from '../../utils/consts';\nimport { getCell, styleByCellProps } from '../overlay/selection.utils';\nimport { DSourceState, getSourceItem } from '@store';\nimport type {\n Cell,\n SelectionStoreState,\n ColumnRegular,\n DataType,\n DimensionSettingsState,\n FocusRenderEvent,\n FocusTemplateFunc,\n DimensionCols,\n DimensionRows,\n FocusAfterRenderEvent,\n} from '@type';\nimport type { Observable } from '../../utils';\n\n/**\n * Focus component. Shows focus layer around the cell that is currently in focus.\n * @slot focus-${view.type}-${data.type}. @example focus-rgCol-rgRow\n */\n@Component({\n tag: 'revogr-focus',\n styleUrl: 'revogr-focus-style.scss',\n})\nexport class RevogrFocus {\n /**\n * Column type\n */\n @Prop({ reflect: true }) colType!: DimensionCols;\n /**\n * Row type\n */\n @Prop({ reflect: true }) rowType!: DimensionRows;\n\n /**\n * Auto scroll to focused cell. When true, the grid will automatically scroll to make the focused cell visible.\n * @default false\n */\n @Prop() autoScrollToFocus: boolean = false;\n\n /** Dynamic stores */\n /** Selection, range, focus for selection */\n @Prop() selectionStore!: Observable<SelectionStoreState>;\n /** Dimension settings Y */\n @Prop() dimensionRow!: Observable<DimensionSettingsState>;\n /** Dimension settings X */\n @Prop() dimensionCol!: Observable<DimensionSettingsState>;\n /**\n * Data rows source\n */\n @Prop() dataStore!: Observable<DSourceState<DataType, DimensionRows>>;\n /**\n * Column source\n */\n @Prop() colData!: Observable<DSourceState<ColumnRegular, DimensionCols>>;\n\n /**\n * Focus template custom function. Can be used to render custom focus layer.\n */\n @Prop() focusTemplate: FocusTemplateFunc | null = null;\n\n /**\n * Before focus render event.\n * Can be prevented by event.preventDefault().\n * If preventDefault used slot will be rendered.\n */\n @Event({ eventName: 'beforefocusrender' })\n beforeFocusRender: EventEmitter<FocusRenderEvent>;\n\n /**\n * Before focus changed verify if it's in view and scroll viewport into this view\n * Can be prevented by event.preventDefault()\n */\n @Event({ eventName: 'beforescrollintoview' })\n beforeScrollIntoView: EventEmitter<{ el: HTMLElement }>;\n /**\n * Used to setup properties after focus was rendered\n */\n @Event({ eventName: 'afterfocus' })\n afterFocus: EventEmitter<FocusAfterRenderEvent>;\n\n @Element() el: HTMLElement;\n private activeFocus: Cell | null = null;\n\n componentDidRender() {\n const currentFocus = this.selectionStore.get('focus');\n if (\n this.activeFocus?.x === currentFocus?.x &&\n this.activeFocus?.y === currentFocus?.y\n ) {\n return;\n }\n this.activeFocus = currentFocus;\n if (currentFocus && this.el) {\n const beforeScrollIn = this.beforeScrollIntoView.emit({ el: this.el });\n // 只有在 autoScrollToFocus 为 true 时才执行自动滚动\n if (this.autoScrollToFocus && !beforeScrollIn.defaultPrevented) {\n this.el.scrollIntoView({\n block: 'nearest',\n inline: 'nearest',\n });\n }\n const model = getSourceItem(this.dataStore, currentFocus.y);\n const column = getSourceItem(this.colData, currentFocus.x);\n this.afterFocus.emit({\n model,\n column,\n rowType: this.rowType,\n colType: this.colType,\n rowIndex: currentFocus.y,\n colIndex: currentFocus.x,\n });\n }\n }\n\n render() {\n const editCell = this.selectionStore.get('edit');\n if (editCell) {\n return;\n }\n const focusCell = this.selectionStore.get('focus');\n if (!focusCell) {\n return;\n }\n const event = this.beforeFocusRender.emit({\n range: {\n ...focusCell,\n x1: focusCell.x,\n y1: focusCell.y,\n },\n rowType: this.rowType,\n colType: this.colType,\n rowDimension: { ...this.dimensionRow.state },\n colDimension: { ...this.dimensionCol.state },\n });\n if (event.defaultPrevented) {\n return <slot />;\n }\n const { detail } = event;\n\n const cell = getCell(\n detail.range,\n event.detail.rowDimension,\n event.detail.colDimension,\n );\n const styles = styleByCellProps(cell);\n const extra = this.focusTemplate?.(h, detail);\n const props = {\n class: { [FOCUS_CLASS]: true },\n style: styles,\n };\n return (\n <Host {...props}>\n <slot />\n {extra}\n </Host>\n );\n }\n}\n",":host {\n position: absolute;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n pointer-events: none;\n overflow: hidden;\n}\n\n.grouping-overlay-viewport {\n .header-wrapper {\n > div {\n box-shadow: 0 -1px 0 var(--rg-cell-border-color, #e0e0e0) inset;\n }\n }\n}\n\n.grouping-rows-container {\n position: absolute;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n\n .groupingRow {\n position: absolute;\n pointer-events: auto;\n width: 100%;\n font-weight: 600;\n text-align: left;\n // 使用混合模式让下层的 hover 效果可以透过来\n mix-blend-mode: normal;\n // 分组行在 dataRow 上层,确保点击事件不被阻挡\n z-index: 1;\n // 使用 GPU 加速优化渲染性能,特别是在 Safari 中\n transform: translateZ(0);\n -webkit-backface-visibility: hidden;\n backface-visibility: hidden;\n\n .group-expand {\n width: 25px;\n height: 100%;\n max-height: 25px;\n margin-right: 2px;\n background-color: transparent;\n border-color: transparent;\n vertical-align: middle;\n padding-left: 5px;\n display: inline-flex;\n cursor: pointer;\n\n svg {\n width: 7px;\n }\n }\n }\n\n .rgRow {\n border-bottom: 1px solid var(--rg-cell-border-color, #e0e0e0);\n }\n\n .dataRow {\n position: absolute;\n width: 100%;\n box-sizing: border-box;\n // dataRow 是分组覆盖层里的占位行,不应覆盖真实单元格内容背景\n background-color: transparent !important;\n // 允许接收鼠标事件(用于 hover 效果)\n pointer-events: auto;\n // dataRow 在 groupingRow 下层\n z-index: 0;\n // 使用 GPU 加速优化渲染性能,特别是在 Safari 中\n transform: translateZ(0);\n -webkit-backface-visibility: hidden;\n backface-visibility: hidden;\n }\n}\n","import { Component, Host, Prop, h, Element, State, Watch, Method } from '@stencil/core';\nimport type { DimensionRows, DimensionCols, DataType, ColumnRegular, ViewportState, DimensionSettingsState, Providers } from '@type';\nimport type { Observable } from '../../utils';\nimport { type DSourceState, getSourceItem } from '@store';\nimport { isGrouping } from '../../plugins/groupingRow/grouping.service';\nimport GroupingRowRenderer from '../../plugins/groupingRow/grouping.row.renderer';\nimport type { RowGroupingProps, GetGroupSelectionFunc } from '../../plugins/groupingRow/grouping.row.types';\nimport type { VirtualPositionItem } from '@type';\nimport { PSEUDO_GROUP_ITEM } from '../../plugins/groupingRow/grouping.const';\n\ninterface DataRowInfo extends VirtualPositionItem {\n selected?: boolean;\n}\n\n@Component({\n tag: 'revogr-grouping-overlay',\n styleUrl: 'revogr-grouping-overlay.scss',\n})\nexport class RevogrGroupingOverlay {\n @Prop() dataStore!: Observable<DSourceState<DataType, DimensionRows>>;\n @Prop() colData!: Observable<DSourceState<ColumnRegular, DimensionCols>>;\n @Prop() viewportRow!: Observable<ViewportState>;\n @Prop() viewportCol!: Observable<ViewportState>;\n @Prop() dimensionRow!: Observable<DimensionSettingsState>;\n @Prop() type: DimensionRows = 'rgRow';\n @Prop() colType: DimensionCols = 'rgCol';\n @Prop() additionalData: any;\n @Prop() rowClass: string;\n /** 获取分组选中信息的函数 */\n @Prop() getGroupSelection?: GetGroupSelectionFunc;\n /** Padding depth for grouping rows (in pixels per depth level) */\n @Prop() paddingDepth?: number;\n\n @Element() element!: HTMLElement;\n @State() private groupRows: RowGroupingProps[] = [];\n @State() private dataRows: DataRowInfo[] = [];\n private unsubscribers: (() => void)[] = [];\n private providers: Providers;\n\n // ==================== 性能优化:缓存和节流 ====================\n \n /** 缓存的选中行索引 */\n private cachedSelectedIndices: Set<number> = new Set();\n /** 上次解析的选中行属性值 */\n private lastSelectedRowsAttr: string | null = null;\n /** 上次的 viewport items 引用(用于变化检测) */\n private lastRowItems: VirtualPositionItem[] | null = null;\n /** 上次的 col items 引用 */\n private lastColItems: VirtualPositionItem[] | null = null;\n /** RAF 节流标记 */\n private updateScheduled = false;\n /** MutationObserver 用于监听选中状态变化 */\n private selectionObserver: MutationObserver | null = null;\n \n // ==================== Resize 优化 ====================\n \n /** ResizeObserver 用于监听表格宽度变化 */\n private resizeObserver: ResizeObserver | null = null;\n\n @Watch('dataStore')\n @Watch('viewportRow')\n @Watch('viewportCol')\n onDataChange() {\n this.scheduleUpdate();\n }\n\n /**\n * 刷新分组行显示,用于选中状态变化后更新选中数量\n */\n @Method()\n async refresh() {\n // 强制刷新时清除缓存\n this.lastSelectedRowsAttr = null;\n this.updateGroupRowsImmediate(true);\n }\n\n connectedCallback() {\n this.providers = {\n type: this.type,\n colType: this.colType,\n readonly: true,\n data: this.dataStore,\n columns: this.colData,\n viewport: this.viewportCol,\n dimension: this.dimensionRow,\n selection: null as any,\n };\n \n // 数据变化时的处理函数\n const onDataUpdate = () => {\n this.scheduleUpdate();\n };\n \n if (this.viewportRow) {\n this.unsubscribers.push(this.viewportRow.onChange('items', onDataUpdate));\n }\n if (this.dataStore) {\n this.unsubscribers.push(this.dataStore.onChange('source', () => {\n // 数据源变化时清除缓存\n this.lastRowItems = null;\n this.scheduleUpdate();\n }));\n }\n if (this.viewportCol) {\n this.unsubscribers.push(this.viewportCol.onChange('items', onDataUpdate));\n }\n \n // 监听选中状态变化\n this.setupSelectionObserver();\n \n // 监听表格宽度变化\n this.setupResizeObserver();\n \n this.updateGroupRowsImmediate(false);\n }\n\n disconnectedCallback() {\n this.unsubscribers.forEach(unsub => unsub());\n this.selectionObserver?.disconnect();\n this.selectionObserver = null;\n this.resizeObserver?.disconnect();\n this.resizeObserver = null;\n }\n\n /**\n * 设置 ResizeObserver 监听表格宽度变化\n */\n private setupResizeObserver() {\n const revogrid = this.element.closest('revo-grid');\n if (!revogrid) return;\n\n this.resizeObserver = new ResizeObserver(() => {\n // 立即更新,不使用防抖\n this.scheduleUpdate();\n });\n\n this.resizeObserver.observe(revogrid);\n }\n\n /**\n * 设置 MutationObserver 监听选中状态变化\n */\n private setupSelectionObserver() {\n const revogrid = this.element.closest('revo-grid');\n if (!revogrid) return;\n\n this.selectionObserver = new MutationObserver((mutations) => {\n for (const mutation of mutations) {\n if (\n mutation.attributeName === 'data-selected-rows' ||\n mutation.attributeName === 'data-selected-rg-rows'\n ) {\n // 选中状态变化,更新缓存并刷新\n this.updateSelectedIndicesCache();\n this.scheduleUpdate();\n break;\n }\n }\n });\n\n this.selectionObserver.observe(revogrid, {\n attributes: true,\n attributeFilter: ['data-selected-rows', 'data-selected-rg-rows'],\n });\n }\n\n /**\n * 使用 RAF 节流的更新调度\n */\n private scheduleUpdate() {\n if (this.updateScheduled) return;\n this.updateScheduled = true;\n \n requestAnimationFrame(() => {\n this.updateScheduled = false;\n this.updateGroupRowsImmediate(false);\n });\n }\n\n /**\n * 更新选中行索引缓存\n */\n private updateSelectedIndicesCache(): void {\n const revogrid = this.element.closest('revo-grid');\n if (!revogrid) {\n this.cachedSelectedIndices.clear();\n this.lastSelectedRowsAttr = null;\n return;\n }\n\n const selectedRowsAttr =\n revogrid.getAttribute('data-selected-rg-rows') ||\n revogrid.getAttribute('data-selected-rows');\n \n // 如果属性值没变,直接返回\n if (selectedRowsAttr === this.lastSelectedRowsAttr) {\n return;\n }\n \n this.lastSelectedRowsAttr = selectedRowsAttr;\n this.cachedSelectedIndices.clear();\n \n if (selectedRowsAttr) {\n try {\n const indices = JSON.parse(selectedRowsAttr);\n if (Array.isArray(indices)) {\n for (let i = 0; i < indices.length; i++) {\n this.cachedSelectedIndices.add(indices[i]);\n }\n }\n } catch (e) {\n // 忽略解析错误\n }\n }\n }\n\n /**\n * 获取选中行索引(使用缓存)\n */\n private getSelectedRowIndices(): Set<number> {\n // 首次调用或缓存失效时更新\n if (this.lastSelectedRowsAttr === null) {\n this.updateSelectedIndicesCache();\n }\n return this.cachedSelectedIndices;\n }\n\n /**\n * 立即更新分组行(带变化检测)\n * @param forceUpdate 是否强制更新,忽略变化检测\n */\n @Method()\n async updateGroupRowsImmediate(forceUpdate = false) {\n if (!this.dataStore || !this.viewportRow || !this.viewportCol) {\n if (this.groupRows.length || this.dataRows.length) {\n this.groupRows = [];\n this.dataRows = [];\n }\n return;\n }\n\n const rows = this.viewportRow.get('items');\n const cols = this.viewportCol.get('items');\n\n // 变化检测:如果 items 引用没变且不是强制更新,跳过更新\n if (!forceUpdate && rows === this.lastRowItems && cols === this.lastColItems) {\n return;\n }\n this.lastRowItems = rows;\n this.lastColItems = cols;\n\n if (!rows.length) {\n if (this.groupRows.length || this.dataRows.length) {\n this.groupRows = [];\n this.dataRows = [];\n }\n return;\n }\n\n const groupingCustomRenderer = this.dataStore.get('groupingCustomRenderer');\n // 即使 cols 为空(所有列都冻结),也要渲染分组行\n const firstCol = cols[0] || { start: 0, end: 0, size: 0, itemIndex: 0 };\n\n // 使用缓存的选中行索引\n const selectedRowIndices = this.getSelectedRowIndices();\n \n // 获取当前可见的物理索引数组\n const dataItems = this.dataStore.get('items');\n\n const groupRowsData: RowGroupingProps[] = [];\n const dataRowsData: DataRowInfo[] = [];\n \n for (let i = 0; i < rows.length; i++) {\n const rgRow = rows[i];\n const dataItem = getSourceItem(this.dataStore, rgRow.itemIndex);\n \n if (!dataItem) {\n continue;\n }\n \n const physicalIndex = dataItems[rgRow.itemIndex];\n \n if (isGrouping(dataItem)) {\n const groupName = dataItem[PSEUDO_GROUP_ITEM];\n if (!groupName) {\n this.groupRows = [];\n this.dataRows = [];\n return;\n }\n \n groupRowsData.push({\n ...rgRow,\n index: rgRow.itemIndex,\n model: dataItem,\n groupingCustomRenderer,\n hasExpand: true,\n columnItems: [firstCol],\n providers: this.providers,\n getGroupSelection: this.getGroupSelection,\n paddingDepth: this.paddingDepth,\n });\n } else {\n const isSelected = physicalIndex !== undefined && selectedRowIndices.has(physicalIndex);\n dataRowsData.push({\n ...rgRow,\n selected: isSelected,\n });\n }\n }\n \n this.groupRows = groupRowsData;\n this.dataRows = dataRowsData;\n }\n\n render() {\n // 只有当既没有分组行也没有数据行时才不渲染\n if (!this.groupRows.length && !this.dataRows.length) {\n return null;\n }\n \n return (\n <Host>\n <div class=\"grouping-rows-container\">\n {this.groupRows.map(rowProps => (\n <GroupingRowRenderer {...rowProps} key={`group-${rowProps.itemIndex}`} />\n ))}\n {this.dataRows.map(row => {\n const attrs: any = {\n class: 'rgRow dataRow',\n key: `data-${row.itemIndex}`,\n style: {\n height: `${row.size}px`,\n transform: `translateY(${row.start}px)`,\n },\n 'data-rgRow': row.itemIndex,\n };\n if (row.selected) {\n attrs.selected = '';\n }\n return <div {...attrs} />;\n })}\n </div>\n </Host>\n );\n }\n}\n","@use '../../global/_mixins.scss' as *;\n\nrevogr-header-unified {\n display: flex;\n flex-direction: row;\n width: 100%;\n position: absolute;\n top: 0;\n left: 0;\n right: 0;\n z-index: 5; // 降低 z-index,与原表头一致,确保事件能正确冒泡\n pointer-events: none; // 让鼠标事件穿透到下层\n background: transparent;\n\n .header-area {\n position: relative; // 保持相对定位,在 flex 容器中排列\n display: block; // 改为 block,与原表头一致\n pointer-events: auto; // 恢复表头区域的鼠标事件\n background: var(--revo-grid-header-bg, #f8f9fa);\n z-index: 5; // 与原表头一致\n \n // 继承原有的表头边框样式\n $shadow-left: -1px 0 0 0 var(--revo-grid-header-border);\n $shadow-right: -1px 0 0 0 var(--revo-grid-header-border) inset;\n $shadow-bottom: 0 -1px 0 0 var(--revo-grid-header-border) inset;\n $shadow-top: 0 -1px 0 0 var(--revo-grid-header-border);\n \n box-shadow: $shadow-left, $shadow-right, $shadow-bottom, $shadow-top;\n \n // 继承原有的表头样式\n .group-rgRow,\n .header-rgRow {\n display: block; // 改为 block,与原表头一致\n position: relative;\n }\n\n .group-rgRow {\n z-index: 2;\n overflow: visible; // 允许合并单元格溢出\n \n // 合并单元格样式\n .rgHeaderCell.merged-header {\n z-index: 5;\n top: 0;\n align-items: center;\n }\n \n // 分组行边框\n &.header-rgRow.group {\n $shadow-bottom: 0 -1px 0 0 var(--revo-grid-header-border) inset;\n box-shadow: $shadow-bottom;\n }\n }\n\n .header-rgRow {\n &.group {\n z-index: 0;\n }\n \n // 非分组行边框\n &:not(.group) {\n $shadow-bottom: 0 -1px 0 0 var(--revo-grid-header-border) inset;\n $shadow-top: 0 -1px 0 0 var(--revo-grid-header-border);\n box-shadow: $shadow-top, $shadow-bottom;\n }\n }\n\n .header-rgRow.actual-rgRow {\n z-index: 1;\n }\n\n // 表头单元格必须是绝对定位,才能使用 transform: translateX() 定位\n .rgHeaderCell {\n position: absolute;\n box-sizing: border-box;\n height: 100%;\n z-index: 1;\n display: flex;\n user-select: text;\n \n // hover 到 resizable 时提升整个单元格的 z-index\n &:has(.resizable-r:hover),\n &:has(.resizable-l:hover) {\n z-index: 92;\n }\n\n &.group-header {\n text-align: center;\n }\n &.align-center {\n text-align: center;\n }\n &.align-left {\n text-align: left;\n }\n &.align-right {\n text-align: right;\n }\n &.sortable {\n cursor: pointer;\n }\n\n i {\n &.asc,\n &.desc {\n &:after {\n font-size: 13px;\n }\n }\n &.asc {\n &:after {\n content: '↑';\n }\n }\n &.desc {\n &:after {\n content: '↓';\n }\n }\n }\n &.active {\n z-index: 10;\n\n .resizable {\n background-color: deepskyblue;\n }\n }\n .header-content {\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n flex-grow: 1;\n }\n \n // 继承 resizable 样式\n .resizable {\n display: block;\n position: absolute;\n z-index: 90;\n touch-action: none;\n user-select: none;\n pointer-events: auto;\n }\n \n // 非列宽拖拽的 resizable 元素 hover 样式\n .resizable:not(.resizable-r):not(.resizable-l) {\n &:hover {\n background-color: deepskyblue;\n }\n }\n \n $size: 6px;\n $col-resize-size: 14px;\n $col-resize-line-width: 2px;\n \n > .resizable-r {\n cursor: col-resize;\n width: $col-resize-size;\n right: calc(-1 * $col-resize-size / 2);\n top: 0;\n height: 100%;\n background-color: transparent !important;\n \n &::after {\n content: '';\n position: absolute;\n left: 50%;\n transform: translateX(-50%);\n top: 0;\n width: $col-resize-line-width;\n min-width: $col-resize-line-width;\n max-width: $col-resize-line-width;\n height: 100%;\n background-color: transparent;\n z-index: 100;\n }\n }\n \n > .resizable-l {\n cursor: col-resize;\n width: $col-resize-size;\n left: calc(-1 * $col-resize-size / 2);\n height: 100%;\n top: 0;\n background-color: transparent !important;\n \n &::after {\n content: '';\n position: absolute;\n left: 50%;\n transform: translateX(-50%);\n top: 0;\n width: $col-resize-line-width;\n height: 100%;\n background-color: transparent;\n z-index: 100;\n }\n }\n \n > .resizable-rb {\n cursor: se-resize;\n width: $size;\n height: $size;\n right: 0;\n bottom: 0;\n }\n \n > .resizable-b {\n cursor: s-resize;\n height: $size;\n bottom: 0;\n width: 100%;\n left: 0;\n }\n \n > .resizable-lb {\n cursor: sw-resize;\n width: $size;\n height: $size;\n left: 0;\n bottom: 0;\n }\n \n > .resizable-lt {\n cursor: nw-resize;\n width: $size;\n height: $size;\n left: 0;\n top: 0;\n }\n \n > .resizable-t {\n cursor: n-resize;\n height: $size;\n top: 0;\n width: 100%;\n left: 0;\n }\n \n > .resizable-rt {\n cursor: ne-resize;\n width: $size;\n height: $size;\n right: 0;\n top: 0;\n }\n }\n \n .rv-filter {\n visibility: hidden;\n }\n }\n\n // 左冻结区域\n .header-area-colPinStart {\n flex: 0 0 auto;\n z-index: 13;\n }\n\n // 中间非冻结区域\n .header-area-rgCol {\n flex: 0 1 auto;\n min-width: 0;\n z-index: 12;\n overflow-x: hidden; // 隐藏横向滚动条,通过 JS 同步滚动位置\n overflow-y: visible;\n }\n\n // 右冻结区域\n .header-area-colPinEnd {\n flex: 0 0 auto;\n z-index: 13;\n }\n}\n","import {\n Component,\n Element,\n Event,\n EventEmitter,\n h,\n Host,\n Method,\n Prop,\n State,\n type VNode,\n} from '@stencil/core';\nimport keyBy from 'lodash/keyBy';\n\nimport { getItemByIndex, Groups } from '@store';\nimport { HEADER_ACTUAL_ROW_CLASS, HEADER_ROW_CLASS } from '../../utils/consts';\nimport HeaderRenderer, { HeaderRenderProps } from './header-renderer';\nimport { ResizeProps } from './resizable.directive';\nimport type {\n ColumnRegular,\n DimensionSettingsState,\n InitialHeaderClick,\n ViewportState,\n ViewSettingSizeProp,\n DimensionCols,\n SelectionStoreState,\n RangeArea,\n VirtualPositionItem,\n ProvidersColumns,\n ViewPortScrollEvent,\n} from '@type';\nimport type { Observable } from '../../utils';\nimport GroupHeaderRenderer, {\n HeaderGroupRendererProps,\n} from './header-group-renderer';\n\n/**\n * 单个区域的表头数据\n */\nexport interface HeaderAreaData {\n type: DimensionCols;\n viewportCol: Observable<ViewportState>;\n dimensionCol: Observable<DimensionSettingsState>;\n selectionStore: Observable<SelectionStoreState>;\n viewportItems: VirtualPositionItem[];\n dimensionState: DimensionSettingsState;\n selectionRange: RangeArea | null;\n groups: Groups;\n groupingDepth: number;\n readonly: boolean;\n canResize: boolean;\n resizeHandler: ResizeProps['active'];\n colData: ColumnRegular[];\n colVersion?: number;\n columnFilter: boolean;\n additionalData: any;\n hasColPinEnd: boolean;\n hasRgCol: boolean;\n disableVirtualX?: boolean;\n onHeaderresize?: (e: CustomEvent<ViewSettingSizeProp>) => void;\n}\n\n/**\n * 统一的表头组件\n * 渲染所有三个区域(colPinStart, rgCol, colPinEnd)的表头\n * 这样可以确保所有区域在同一个渲染周期内更新,避免异步渲染问题\n */\n@Component({\n tag: 'revogr-header-unified',\n styleUrl: 'revogr-header-unified-style.scss',\n})\nexport class RevogrHeaderUnifiedComponent {\n @Element() element!: HTMLElement;\n\n /**\n * 所有区域的数据\n */\n @Prop() areas!: HeaderAreaData[];\n\n /**\n * 强制刷新计数器,用于触发重新渲染\n */\n @State() refreshCounter = 0;\n\n private scrollHandler?: (e: Event) => void;\n private gridScrollHandler?: (e: Event) => void;\n private enhancedScrollHandler?: (e: Event) => void;\n private gridElement?: HTMLElement;\n private rafScrollSyncId: number | null = null;\n private pendingScrollLeft: number | null = null;\n private lastAppliedScrollLeft: number | null = null;\n private scrollEndTimer: number | null = null;\n private resizeTimer?: number;\n private mainViewportEl: HTMLElement | null = null;\n private mainViewportResizeObserver: ResizeObserver | null = null;\n private rgColHeaderAreaEl: HTMLElement | null = null;\n private rgColHeaderRows: HTMLElement[] = [];\n private headerRowsNeedRefresh = true;\n private hasCachedBaseHeaderRowHeight = false;\n private cachedBaseHeaderRowHeight: number | null = null;\n private windowResizeHandler: (() => void) | null = null;\n \n // 缓存扩展后的viewport items,用于在调整大小期间保持DOM稳定\n private cachedExpandedItems: Map<DimensionCols, VirtualPositionItem[]> = new Map();\n // 标记是否正在调整大小(不使用@State,避免触发重新渲染)\n private isResizingFlag = false;\n // 缓存调整大小期间的areas,避免使用新的areas导致跳动\n private cachedAreas: HeaderAreaData[] | null = null;\n private lastStableAreas: HeaderAreaData[] | null = null;\n \n // 定时器延迟时间(毫秒)\n private readonly RESIZE_DEBOUNCE_TIME = 300;\n\n private setHeaderResizingState(active: boolean) {\n const grid =\n this.gridElement || (this.element.closest('revo-grid') as HTMLElement | null);\n if (!grid) {\n return;\n }\n const isActive = grid.hasAttribute('data-header-resizing');\n if (active) {\n if (!isActive) {\n grid.setAttribute('data-header-resizing', '1');\n }\n return;\n }\n if (isActive) {\n grid.removeAttribute('data-header-resizing');\n grid.dispatchEvent(\n new CustomEvent('headerresizeend', {\n bubbles: true,\n }),\n );\n }\n }\n\n componentDidLoad() {\n this.windowResizeHandler = () => {\n this.hasCachedBaseHeaderRowHeight = false;\n this.cachedBaseHeaderRowHeight = null;\n this.scheduleHeaderScroll();\n };\n window.addEventListener('resize', this.windowResizeHandler, { passive: true });\n\n // 延迟设置滚动同步,确保 viewport 元素已经渲染\n setTimeout(() => {\n this.setupScrollSync();\n }, 100);\n }\n\n componentWillRender() {\n const grid = this.element?.closest('revo-grid');\n if (!grid || !grid.hasAttribute('data-columns-updating')) {\n return;\n }\n // console.log('[header] wait columns update', {\n // time: performance.now(),\n // });\n return new Promise<void>(resolve => {\n grid.addEventListener('columnsupdateend', () => {\n // console.log('[header] columns update end', {\n // time: performance.now(),\n // });\n resolve();\n }, { once: true });\n });\n }\n\n /**\n * 公开方法:开始调整大小(用于自动列宽)\n */\n @Method()\n async startResizingForAutoSize(type: DimensionCols) {\n if (type === 'rgCol') {\n const area = this.areas.find(area => area.type === type);\n if (area) {\n this.startResizing(area);\n }\n }\n }\n\n /**\n * 公开方法:结束调整大小(用于自动列宽)\n */\n @Method()\n async endResizingForAutoSize() {\n this.resetResizeTimer();\n }\n\n /**\n * 公开方法:强制刷新表头(用于跨区域列宽同步)\n * 当一个区域的列宽变化影响到另一个区域时调用\n */\n @Method()\n async forceRefresh() {\n // 通过修改 @State 变量触发组件重新渲染\n this.refreshCounter++;\n }\n\n disconnectedCallback() {\n // 清理滚动监听器\n if (this.gridElement && this.gridScrollHandler) {\n this.gridElement.removeEventListener(\n 'viewportscroll',\n this.gridScrollHandler as EventListener,\n );\n }\n if (this.gridElement && this.enhancedScrollHandler) {\n this.gridElement.removeEventListener(\n 'enhancedscrollsync',\n this.enhancedScrollHandler as EventListener,\n );\n }\n if (this.scrollHandler) {\n const viewports = document.querySelectorAll(\n 'revogr-viewport-scroll.rgCol',\n );\n viewports.forEach(viewport => {\n viewport.removeEventListener(\n 'scroll',\n this.scrollHandler as EventListener,\n );\n });\n }\n if (this.rafScrollSyncId !== null) {\n cancelAnimationFrame(this.rafScrollSyncId);\n this.rafScrollSyncId = null;\n }\n if (this.scrollEndTimer !== null) {\n clearTimeout(this.scrollEndTimer);\n this.scrollEndTimer = null;\n }\n if (this.resizeTimer) {\n clearTimeout(this.resizeTimer);\n this.resizeTimer = undefined;\n }\n if (this.windowResizeHandler) {\n window.removeEventListener('resize', this.windowResizeHandler);\n this.windowResizeHandler = null;\n }\n if (this.mainViewportResizeObserver) {\n this.mainViewportResizeObserver.disconnect();\n this.mainViewportResizeObserver = null;\n }\n this.setHeaderResizingState(false);\n }\n\n /**\n * 设置滚动同步\n */\n private setupScrollSync() {\n if (!this.gridElement) {\n this.gridElement =\n (this.element.closest('revo-grid') as HTMLElement | null) || undefined;\n }\n\n if (this.gridElement && !this.gridScrollHandler) {\n this.gridScrollHandler = (e: Event) => {\n const detail = (e as CustomEvent<ViewPortScrollEvent>).detail;\n if (!detail || detail.dimension !== 'rgCol') return;\n this.scheduleHeaderScroll();\n this.scheduleScrollEndSync();\n };\n this.gridElement.addEventListener(\n 'viewportscroll',\n this.gridScrollHandler as EventListener,\n );\n }\n\n if (this.gridElement && !this.enhancedScrollHandler) {\n this.enhancedScrollHandler = (e: Event) => {\n const detail = (e as CustomEvent<{ scrollLeft: number }>).detail;\n if (!detail) return;\n this.scheduleHeaderScroll(detail.scrollLeft);\n this.scheduleScrollEndSync();\n };\n this.gridElement.addEventListener(\n 'enhancedscrollsync',\n this.enhancedScrollHandler as EventListener,\n );\n }\n\n // 回退方案:直接监听 viewport 的 scroll 事件\n this.scrollHandler = this.onViewportScroll.bind(this);\n const viewports = document.querySelectorAll('revogr-viewport-scroll.rgCol');\n this.mainViewportEl = this.gridElement?.querySelector(\n 'revogr-viewport-scroll.rgCol:not(.grouping-overlay-viewport)',\n ) as HTMLElement | null;\n\n if (this.mainViewportResizeObserver) {\n this.mainViewportResizeObserver.disconnect();\n this.mainViewportResizeObserver = null;\n }\n if (this.mainViewportEl) {\n this.mainViewportResizeObserver = new ResizeObserver(() => {\n this.syncHeaderTransformNow();\n });\n this.mainViewportResizeObserver.observe(this.mainViewportEl);\n }\n\n if (viewports.length === 0) {\n // 如果还没找到,再延迟一次\n setTimeout(() => this.setupScrollSync(), 200);\n return;\n }\n\n viewports.forEach(viewport => {\n viewport.addEventListener('scroll', this.scrollHandler as EventListener);\n });\n\n // 初始化时同步一次,避免首次渲染有偏移\n this.scheduleHeaderScroll();\n }\n\n /**\n * Sync header translate with current rgCol scrollLeft immediately.\n * Used during live resize to avoid one-frame lag between width update and transform update.\n */\n private syncHeaderTransformNow() {\n const scrollLeft = this.getMainViewportScrollLeft();\n if (scrollLeft === null) {\n return;\n }\n this.applyHeaderScroll(scrollLeft);\n requestAnimationFrame(() => {\n const latest = this.getMainViewportScrollLeft();\n if (latest !== null) {\n this.applyHeaderScroll(latest);\n }\n });\n }\n\n /**\n * 处理 viewport 滚动事件\n */\n private onViewportScroll(e: Event) {\n const viewport = e.target as HTMLElement;\n this.scheduleHeaderScroll(viewport.scrollLeft);\n this.scheduleScrollEndSync();\n }\n\n private scheduleHeaderScroll(scrollLeft?: number) {\n if (typeof scrollLeft === 'number') {\n this.pendingScrollLeft = scrollLeft;\n // 立即同步,减少快速滚动时的可见延迟\n this.applyHeaderScroll(scrollLeft);\n return;\n }\n if (this.rafScrollSyncId !== null) {\n return;\n }\n this.rafScrollSyncId = requestAnimationFrame(() => {\n this.rafScrollSyncId = null;\n let nextScrollLeft: number | null =\n this.pendingScrollLeft ?? this.getMainViewportScrollLeft();\n if (nextScrollLeft === null) {\n nextScrollLeft = this.lastAppliedScrollLeft;\n }\n this.pendingScrollLeft = null;\n if (nextScrollLeft === null) {\n return;\n }\n this.applyHeaderScroll(nextScrollLeft);\n });\n }\n\n private scheduleScrollEndSync() {\n if (this.scrollEndTimer !== null) {\n clearTimeout(this.scrollEndTimer);\n }\n this.scrollEndTimer = window.setTimeout(() => {\n this.scrollEndTimer = null;\n // 滚动结束后再读取一次真实 scrollLeft,确保归位\n this.scheduleHeaderScroll();\n }, 80);\n }\n\n private getMainViewportScrollLeft(): number | null {\n if (this.mainViewportEl?.isConnected) {\n return this.mainViewportEl.scrollLeft;\n }\n const grid = this.gridElement || (this.element.closest('revo-grid') as HTMLElement | null);\n this.mainViewportEl = (grid?.querySelector(\n 'revogr-viewport-scroll.rgCol:not(.grouping-overlay-viewport)',\n ) as HTMLElement | null) ?? null;\n return this.mainViewportEl ? this.mainViewportEl.scrollLeft : null;\n }\n\n private ensureHeaderDomRefs(): boolean {\n if (\n !this.headerRowsNeedRefresh &&\n this.rgColHeaderAreaEl?.isConnected &&\n this.rgColHeaderRows.length\n ) {\n return false;\n }\n\n this.rgColHeaderAreaEl = this.element.querySelector(\n '.header-area-rgCol',\n ) as HTMLElement | null;\n this.rgColHeaderRows = this.rgColHeaderAreaEl\n ? Array.from(\n this.rgColHeaderAreaEl.querySelectorAll('.group-rgRow, .actual-rgRow'),\n ) as HTMLElement[]\n : [];\n this.headerRowsNeedRefresh = false;\n return true;\n }\n\n private applyHeaderScroll(scrollLeft: number) {\n const didRefreshRows = this.ensureHeaderDomRefs();\n if (!this.rgColHeaderAreaEl || this.rgColHeaderRows.length === 0) {\n return;\n }\n if (!didRefreshRows && this.lastAppliedScrollLeft === scrollLeft) {\n return;\n }\n\n // 使用 transform 来移动表头内容\n const transform = `translateX(${-scrollLeft}px)`;\n this.rgColHeaderRows.forEach(row => {\n if (row.style.transform !== transform) {\n row.style.transform = transform;\n }\n });\n this.lastAppliedScrollLeft = scrollLeft;\n }\n\n /**\n * On initial header click\n */\n @Event({\n eventName: 'beforeheaderclick',\n })\n initialHeaderClick: EventEmitter<InitialHeaderClick>;\n\n /**\n * On header resize\n */\n @Event({\n eventName: 'headerresize',\n })\n headerresize: EventEmitter<ViewSettingSizeProp>;\n\n /**\n * On before header resize\n */\n @Event({ eventName: 'beforeheaderresize', cancelable: true })\n beforeResize: EventEmitter<ColumnRegular[]>;\n\n /**\n * On header double click\n */\n @Event({\n eventName: 'headerdblclick',\n })\n headerdblClick: EventEmitter<InitialHeaderClick>;\n\n /**\n * Before each header cell render function\n */\n @Event({ eventName: 'beforeheaderrender' })\n beforeHeaderRender: EventEmitter<HeaderRenderProps>;\n\n /**\n * Before each group header cell render function\n */\n @Event({ eventName: 'beforegroupheaderrender' })\n beforeGroupHeaderRender: EventEmitter<HeaderGroupRendererProps>;\n\n /**\n * After all header cells rendered\n */\n @Event({ eventName: 'afterheaderrender' })\n afterHeaderRender: EventEmitter<ProvidersColumns>;\n\n componentDidRender() {\n this.headerRowsNeedRefresh = true;\n // 每次渲染后同步一次滚动位置,避免滚动后渲染导致的错位/消失\n this.scheduleHeaderScroll();\n // 触发每个区域的 afterHeaderRender 事件\n this.areas?.forEach(area => {\n this.afterHeaderRender.emit({\n type: area.type,\n readonly: area.readonly,\n data: area.colData,\n viewport: area.viewportCol,\n dimension: area.dimensionCol,\n selection: area.selectionStore,\n });\n });\n }\n\n /**\n * 处理表头区域的滚轮事件\n */\n private onHeaderWheel(e: WheelEvent) {\n const viewportScroll = this.element.closest('revogr-viewport-scroll');\n if (!viewportScroll) {\n return;\n }\n \n const scrollWidth = viewportScroll.scrollWidth || 0;\n const clientWidth = viewportScroll.clientWidth || 0;\n const maxScrollLeft = Math.max(0, scrollWidth - clientWidth);\n const SCROLL_THRESHOLD = 10;\n \n const absX = Math.abs(e.deltaX);\n const absY = Math.abs(e.deltaY);\n const isHorizontalScroll = (absX > absY && absX > 0) || (e.shiftKey && absY > 0);\n \n if (isHorizontalScroll && maxScrollLeft <= SCROLL_THRESHOLD) {\n e.preventDefault();\n e.stopPropagation();\n return;\n }\n \n if (isHorizontalScroll) {\n e.stopPropagation();\n \n const customEvent = new CustomEvent<{\n deltaX: number;\n deltaY: number;\n shiftKey?: boolean;\n preventDefault: () => void;\n }>('mousewheel-horizontal', {\n bubbles: true,\n detail: {\n deltaX: e.deltaX,\n deltaY: e.deltaY,\n shiftKey: e.shiftKey,\n preventDefault: () => e.preventDefault(),\n },\n });\n this.element.dispatchEvent(customEvent);\n }\n }\n\n render() {\n // 强制刷新:通过引用 refreshCounter 来触发重新渲染\n // 即使不使用这个值,只要它变化了,Stencil 就会重新渲染\n // @ts-ignore - 故意不使用这个变量,只是为了触发重新渲染\n const _ = this.refreshCounter;\n \n // 在调整大小期间使用缓存的areas,避免使用新的areas导致跳动\n let areasToRender = this.isResizingFlag && this.cachedAreas ? this.cachedAreas : this.areas;\n \n if (!areasToRender || areasToRender.length === 0) {\n return <Host></Host>;\n }\n\n const isSynced = areasToRender.every(area => {\n const viewportVersion = area.viewportCol?.get('version');\n const colVersion = area.colVersion;\n if (viewportVersion === undefined || colVersion === undefined) {\n return true;\n }\n return viewportVersion === colVersion;\n });\n if (!isSynced && this.lastStableAreas) {\n areasToRender = this.lastStableAreas;\n } else if (isSynced && !this.isResizingFlag) {\n this.lastStableAreas = areasToRender;\n }\n\n // 渲染所有区域的表头\n const areaHeaders = areasToRender.map(area => this.renderArea(area));\n\n return (\n <Host onWheel={(e: WheelEvent) => this.onHeaderWheel(e)}>\n {areaHeaders}\n </Host>\n );\n }\n\n /**\n * 创建包含所有列的扩展viewport items\n * 用于在调整大小期间防止虚拟滚动移除DOM\n */\n private createExpandedItems(area: HeaderAreaData) {\n const allCols = area.colData;\n const expandedCols: VirtualPositionItem[] = [];\n let currentStart = 0;\n \n for (let i = 0; i < allCols.length; i++) {\n const col = allCols[i];\n const size = col?.size || 100;\n expandedCols.push({\n itemIndex: i,\n start: currentStart,\n end: currentStart + size,\n size: size,\n });\n currentStart += size;\n }\n \n this.cachedExpandedItems.set(area.type, expandedCols);\n }\n\n private buildFullItems(\n area: HeaderAreaData,\n sizes: Record<number, number>,\n ): VirtualPositionItem[] {\n const total = area.colData.length;\n const defaultSize = area.dimensionCol?.state?.originItemSize || 100;\n const items: VirtualPositionItem[] = [];\n let currentStart = 0;\n for (let i = 0; i < total; i++) {\n const size = sizes[i] ?? area.colData[i]?.size ?? defaultSize;\n const end = currentStart + size;\n items.push({\n itemIndex: i,\n start: currentStart,\n end,\n size,\n });\n currentStart = end;\n }\n return items;\n }\n\n /**\n * 更新缓存中指定列的尺寸,并调整后续列的位置\n */\n private updateCachedItemSize(type: DimensionCols, index: number, newSize: number) {\n const cached = this.cachedExpandedItems.get(type);\n if (!cached) return;\n \n // 直接通过索引访问(假设itemIndex和数组索引一致)\n const item = cached[index];\n if (!item || item.itemIndex !== index) {\n // 如果索引不匹配,回退到查找\n const foundItem = cached.find(i => i.itemIndex === index);\n if (!foundItem) return;\n \n const oldSize = foundItem.size;\n const sizeDiff = newSize - oldSize;\n \n foundItem.size = newSize;\n foundItem.end = foundItem.start + newSize;\n \n // 更新后续所有列的位置\n for (const item of cached) {\n if (item.itemIndex > index) {\n item.start += sizeDiff;\n item.end += sizeDiff;\n }\n }\n return;\n }\n \n // 快速路径:直接通过索引更新\n const oldSize = item.size;\n const sizeDiff = newSize - oldSize;\n \n item.size = newSize;\n item.end = item.start + newSize;\n \n // 更新后续所有列的位置\n for (let i = index + 1; i < cached.length; i++) {\n cached[i].start += sizeDiff;\n cached[i].end += sizeDiff;\n }\n }\n\n private renderArea(area: HeaderAreaData): VNode {\n // 直接从 Observable 读取最新数据,而不是使用 prop 中的缓存数据\n // 这样即使 revo-grid 没有重新渲染,我们也能获取到最新的列宽度\n const viewportItems = area.viewportCol.get('items');\n const dimensionState = area.dimensionCol.state;\n \n let cols = viewportItems;\n \n // 无论是否在调整大小,都需要使用最新的 dimensionState.sizes 更新列宽度\n // 因为 viewportItems 中的 size 可能是旧的\n const sizes = dimensionState?.sizes || {};\n const viewportStart = viewportItems[0]?.start ?? 0;\n let currentStart = 0;\n // 统一表头不依赖虚拟列列表,避免滚动时列缺失导致空白\n // rgCol 类型始终使用完整列表,避免虚拟滚动导致的重新渲染\n const useFullColumns = area.type === 'rgCol';\n \n // 如果正在调整大小,使用缓存的扩展列(包含所有列)\n if (this.isResizingFlag) {\n const cached = this.cachedExpandedItems.get(area.type);\n if (cached) {\n currentStart = cached[0]?.start ?? 0;\n // 使用最新尺寸重新计算位置\n cols = cached.map(item => {\n const size = sizes[item.itemIndex] ?? item.size;\n const result = {\n ...item,\n size,\n start: currentStart,\n end: currentStart + size,\n };\n currentStart += size;\n return result;\n });\n }\n } else if (useFullColumns || viewportItems.length === 0) {\n // rgCol 类型始终构建完整列表,避免虚拟滚动导致列重新渲染\n cols = this.buildFullItems(area, sizes);\n currentStart = cols[0]?.start ?? 0;\n } else {\n // 不在调整大小时,也需要使用最新的 sizes 更新 viewportItems\n currentStart = viewportStart;\n cols = viewportItems.map(item => {\n const size = sizes[item.itemIndex] ?? item.size;\n const result = {\n ...item,\n size,\n start: currentStart,\n end: currentStart + size,\n };\n currentStart += size;\n return result;\n });\n }\n \n const range = area.selectionRange;\n\n const groupedIndexes = this.getGroupedColumnIndexes(area);\n const { groupedCells, ungroupedCells } = this.renderHeaderColumns(area, cols, range, groupedIndexes);\n const groupRow = this.renderGroupingColumns(area, cols);\n\n const multiRowHeight = this.getMultiHeaderRowHeight(area);\n const rowStyle = multiRowHeight !== undefined\n ? { height: `${multiRowHeight}px`, lineHeight: `${multiRowHeight}px` }\n : undefined;\n \n // 计算区域宽度\n // 非冻结区域(rgCol)应该始终使用 realSize(所有列的总宽度)\n // 冻结区域使用视口列的宽度\n let areaWidth = 0;\n if (area.type === 'rgCol') {\n // 非冻结区域:使用 dimensionState.realSize(所有列的总宽度)\n areaWidth = dimensionState?.realSize || 0;\n if (!areaWidth && cols.length > 0) {\n areaWidth = cols[cols.length - 1].end - cols[0].start;\n }\n } else if (cols.length > 0) {\n // 冻结区域:使用视口列的宽度\n areaWidth = cols[cols.length - 1].end - cols[0].start;\n }\n\n const areaStyle = {\n width: areaWidth > 0 ? `${areaWidth}px` : undefined,\n };\n\n // 统一使用分组结构:\n // - 如果没有分组(groupingDepth === 0),所有列都放在 group-rgRow 中,actual-rgRow 为空\n // - 如果有分组(groupingDepth > 0),未分组的列放在 group-rgRow 中,分组的子列放在 actual-rgRow 中\n return (\n <div class={`header-area header-area-${area.type}`} style={areaStyle} key={area.type}>\n <div class=\"group-rgRow\" style={rowStyle}>\n {groupRow}\n {area.groupingDepth === 0 ? groupedCells : ungroupedCells}\n </div>\n {area.groupingDepth > 0 && (\n <div class={`${HEADER_ROW_CLASS} ${HEADER_ACTUAL_ROW_CLASS}`} style={rowStyle}>\n {groupedCells}\n </div>\n )}\n </div>\n );\n }\n\n private getGroupedColumnIndexes(area: HeaderAreaData): Set<number> {\n const groupedIndexes = new Set<number>();\n if (area.groupingDepth > 0 && area.groups) {\n for (let i = 0; i < area.groupingDepth; i++) {\n if (area.groups[i]) {\n for (const group of area.groups[i]) {\n for (const idx of group.indexes) {\n groupedIndexes.add(idx);\n }\n }\n }\n }\n }\n return groupedIndexes;\n }\n\n private renderHeaderColumns(\n area: HeaderAreaData,\n cols: VirtualPositionItem[],\n range: RangeArea | null,\n groupedIndexes: Set<number>,\n ) {\n const groupedCells: VNode[] = [];\n const ungroupedCells: VNode[] = [];\n const lastColIndex = cols.length > 0 ? cols[cols.length - 1].itemIndex : -1;\n\n for (let i = 0; i < cols.length; i++) {\n const rgCol = cols[i];\n const colData = area.colData[rgCol.itemIndex];\n const isGrouped = area.groupingDepth > 0 && groupedIndexes.has(rgCol.itemIndex);\n const isLastColumn = rgCol.itemIndex === lastColIndex && (\n (area.hasColPinEnd && area.type === 'colPinEnd') ||\n (!area.hasColPinEnd && area.hasRgCol && area.type === 'rgCol') ||\n (!area.hasColPinEnd && !area.hasRgCol && area.type === 'colPinStart')\n );\n\n const props: HeaderRenderProps = {\n range,\n column: rgCol,\n data: {\n ...colData,\n index: rgCol.itemIndex,\n providers: {\n type: area.type,\n readonly: area.readonly,\n data: area.colData,\n viewport: area.viewportCol,\n dimension: area.dimensionCol,\n selection: area.selectionStore,\n },\n },\n canFilter: !!area.columnFilter,\n canResize: colData?.resizable !== false && area.canResize,\n active: area.resizeHandler || ['r'],\n additionalData: area.additionalData,\n onResize: e => this.onResize(area, e, rgCol.itemIndex),\n onDblClick: e => this.headerdblClick.emit(e),\n onClick: e => this.initialHeaderClick.emit(e),\n merged: area.groupingDepth > 0 && !isGrouped,\n groupingDepth: area.groupingDepth,\n isGrouped,\n isLastColumn,\n };\n\n const event = this.beforeHeaderRender.emit(props);\n if (!event.defaultPrevented) {\n const columnKey = colData?.prop\n ? `header-${area.type}-${colData.prop}`\n : `header-${area.type}-idx-${rgCol.itemIndex}`;\n\n const cell = <HeaderRenderer key={columnKey} {...event.detail as any} />;\n \n if (isGrouped) {\n groupedCells.push(cell);\n } else if (area.groupingDepth > 0) {\n ungroupedCells.push(cell);\n } else {\n groupedCells.push(cell);\n }\n }\n }\n return { groupedCells, ungroupedCells };\n }\n\n private renderGroupingColumns(area: HeaderAreaData, cols: VirtualPositionItem[]): VNode[] {\n const groupRow: VNode[] = [];\n const lastColIndex = cols.length > 0 ? cols[cols.length - 1].itemIndex : -1;\n const multiRowHeight = this.getMultiHeaderRowHeight(area);\n const groupDivStyle = multiRowHeight !== undefined ? { height: `${multiRowHeight}px` } : undefined;\n const dimensionState = area.dimensionCol?.state ?? area.dimensionState;\n\n for (let i = 0; i < area.groupingDepth; i++) {\n if (area.groups[i]) {\n for (let group of area.groups[i]) {\n const groupStartIndex = group.indexes[0] ?? -1;\n if (groupStartIndex > -1) {\n const groupEndIndex = groupStartIndex + group.indexes.length - 1;\n\n // 使用维度数据的绝对坐标计算分组区间,避免受 viewport 裁剪影响导致分组标题丢失\n const startItem = getItemByIndex(dimensionState, groupStartIndex);\n const endItem = getItemByIndex(dimensionState, groupEndIndex);\n\n const groupStart = startItem.start;\n const groupEnd = endItem.end;\n const isLastColumn = groupEndIndex === lastColIndex && (\n (area.hasColPinEnd && area.type === 'colPinEnd') ||\n (!area.hasColPinEnd && area.hasRgCol && area.type === 'rgCol') ||\n (!area.hasColPinEnd && !area.hasRgCol && area.type === 'colPinStart')\n );\n\n const props: HeaderGroupRendererProps = {\n providers: {\n type: area.type,\n readonly: area.readonly,\n data: area.colData,\n viewport: area.viewportCol,\n dimension: area.dimensionCol,\n selection: area.selectionStore,\n },\n start: groupStart,\n end: groupEnd,\n group,\n active: area.resizeHandler,\n canResize: false,\n additionalData: area.additionalData,\n onResize: e => this.onResizeGroup(area, e.changedX ?? 0, groupStartIndex, groupEndIndex),\n isLastColumn,\n };\n \n const event = this.beforeGroupHeaderRender.emit(props);\n if (!event.defaultPrevented) {\n const groupKey = `group-header-${area.type}-${i}-${groupStartIndex}`;\n groupRow.push(<GroupHeaderRenderer key={groupKey} {...event.detail as any} />);\n }\n }\n }\n }\n groupRow.push(<div class={`${HEADER_ROW_CLASS} group`} style={groupDivStyle} />);\n }\n return groupRow;\n }\n\n /**\n * 开始调整大小(第一次拖动时调用)\n */\n private startResizing(area: HeaderAreaData) {\n if (!this.isResizingFlag) {\n this.isResizingFlag = true;\n this.setHeaderResizingState(true);\n // 缓存当前的areas,避免在调整大小期间使用新的areas\n this.cachedAreas = this.areas;\n // 为所有区域创建扩展列缓存(包含所有列)\n this.createExpandedItems(area);\n }\n }\n\n /**\n * 重置调整大小的定时器\n */\n private resetResizeTimer() {\n if (this.resizeTimer) {\n clearTimeout(this.resizeTimer);\n }\n \n this.resizeTimer = window.setTimeout(() => {\n this.isResizingFlag = false;\n this.cachedExpandedItems.clear();\n this.cachedAreas = null;\n this.setHeaderResizingState(false);\n }, this.RESIZE_DEBOUNCE_TIME);\n }\n\n private onResize(area: HeaderAreaData, { width }: { width?: number }, index: number) {\n this.startResizing(area);\n \n const col = area.colData[index];\n const event = this.beforeResize.emit([\n {\n ...col,\n size: width || undefined,\n },\n ]);\n if (event.defaultPrevented) {\n return;\n }\n \n const sizes = { [index]: width || 0 };\n this.emitResize(area, sizes);\n this.syncHeaderTransformNow();\n \n // 更新缓存中的列尺寸\n if (area.type === 'rgCol' && this.cachedExpandedItems.has(area.type)) {\n this.updateCachedItemSize(area.type, index, width || 0);\n }\n \n this.resetResizeTimer();\n }\n\n private onResizeGroup(\n area: HeaderAreaData,\n changedX: number,\n startIndex: number,\n endIndex: number,\n ) {\n this.startResizing(area);\n \n const sizes: ViewSettingSizeProp = {};\n const items = area.viewportItems;\n const cols = keyBy(items, 'itemIndex');\n const change = changedX / (endIndex - startIndex + 1);\n \n for (let i = startIndex; i <= endIndex; i++) {\n const item = cols[i];\n if (item) {\n sizes[i] = item.size + change;\n }\n }\n \n this.emitResize(area, sizes);\n this.syncHeaderTransformNow();\n \n // 批量更新缓存中的列尺寸\n if (area.type === 'rgCol' && this.cachedExpandedItems.has(area.type)) {\n for (const [idx, size] of Object.entries(sizes)) {\n this.updateCachedItemSize(area.type, parseInt(idx), size);\n }\n }\n \n this.resetResizeTimer();\n }\n\n /**\n * 触发 resize 事件\n */\n private emitResize(area: HeaderAreaData, sizes: ViewSettingSizeProp) {\n this.headerresize.emit(sizes);\n // 调用区域的 onHeaderresize 回调\n if (area.onHeaderresize) {\n area.onHeaderresize(new CustomEvent<ViewSettingSizeProp>('headerresize', { detail: sizes }));\n }\n }\n\n private getMultiHeaderRowHeight(area: HeaderAreaData): number | undefined {\n if (!this.hasCachedBaseHeaderRowHeight) {\n const computedStyle = getComputedStyle(this.element);\n const cssHeight = computedStyle.getPropertyValue('--rg-header-row-height').trim();\n const heightValue = cssHeight ? parseFloat(cssHeight) : NaN;\n this.cachedBaseHeaderRowHeight = !isNaN(heightValue) ? heightValue : null;\n this.hasCachedBaseHeaderRowHeight = true;\n }\n\n const baseHeight = this.cachedBaseHeaderRowHeight;\n if (baseHeight !== null) {\n // 如果有分组,每行高度为总高度的一半\n // 如果没有分组,使用完整高度\n return area.groupingDepth > 0 ? baseHeight / 2 : baseHeight;\n }\n\n return undefined;\n }\n}\n","import { getRange } from '@store';\nimport {\n codesLetter,\n isAll,\n isClear,\n isCopy,\n isCut,\n isEnterKeyValue,\n isPaste,\n isTab,\n timeout,\n RESIZE_INTERVAL,\n type Observable,\n} from '../../utils';\nimport {\n EventData,\n getCoordinate,\n isAfterLast,\n isBeforeFirst,\n} from './selection.utils';\nimport { Cell, Nullable, RangeArea, SelectionStoreState } from '@type';\n\ntype Config = {\n selectionStore: Observable<SelectionStoreState>;\n\n // Apply changes from edit.\n change(val?: any): void;\n // Cancels edit. Escape changes.\n cancel(): void;\n\n clearCell(): void;\n focus(\n focus: Cell,\n changes: Partial<Cell>,\n focusNextViewport?: number,\n ): boolean;\n\n getData(): any;\n internalPaste(): void;\n range(range: RangeArea | null): boolean;\n selectAll(): void;\n};\n\nconst DIRECTION_CODES: string[] = [\n codesLetter.TAB,\n codesLetter.ARROW_UP,\n codesLetter.ARROW_DOWN,\n codesLetter.ARROW_LEFT,\n codesLetter.ARROW_RIGHT,\n];\nexport class KeyboardService {\n constructor(private sv: Config) {}\n\n async keyDown(\n e: KeyboardEvent,\n canRange: boolean,\n isEditMode: boolean,\n { range, focus }: Nullable<Pick<EventData, 'range' | 'focus'>>,\n ) {\n // IF EDIT MODE\n if (isEditMode) {\n switch (e.code) {\n case codesLetter.ESCAPE:\n this.sv.cancel();\n break;\n case codesLetter.TAB:\n this.keyChangeSelection(e, canRange);\n break;\n }\n return;\n }\n\n // IF NOT EDIT MODE\n if (this.isEventFromEditable(e)) {\n return;\n }\n\n // pressed clear key\n if (range && isClear(e.code)) {\n this.sv.clearCell();\n return;\n }\n\n // below works with focus only\n if (!focus) {\n return;\n }\n\n // tab key means same as arrow right\n if (isTab(e.code)) {\n this.keyChangeSelection(e, canRange);\n return;\n }\n\n // pressed enter\n if (isEnterKeyValue(e.key)) {\n this.sv.change();\n return;\n }\n\n // copy operation\n if (isCopy(e)) {\n return;\n }\n\n // cut operation\n if (isCut(e)) {\n return;\n }\n\n // paste operation\n if (isPaste(e)) {\n this.sv.internalPaste();\n return;\n }\n\n // select all\n if (isAll(e)) {\n if (canRange) {\n this.selectAll(e);\n }\n return;\n }\n\n // pressed letter key\n if (e.key.length === 1) {\n this.sv.change(e.key);\n return;\n }\n\n // pressed arrow, change selection position\n if (await this.keyChangeSelection(e, canRange)) {\n return;\n }\n }\n\n private selectAll(e: KeyboardEvent) {\n const range = this.sv.selectionStore.get('range');\n const focus = this.sv.selectionStore.get('focus');\n // if no range or focus - do nothing\n if (!range || !focus) {\n return;\n }\n e.preventDefault();\n this.sv.selectAll();\n }\n\n async keyChangeSelection(e: KeyboardEvent, canRange: boolean) {\n const data = this.changeDirectionKey(e, canRange);\n if (!data) {\n return false;\n }\n\n // this interval needed for several cases\n // grid could be resized before next click\n // at this case to avoid screen jump we use this interval\n await timeout(RESIZE_INTERVAL + 30);\n\n const range = this.sv.selectionStore.get('range');\n const focus = this.sv.selectionStore.get('focus');\n return this.keyPositionChange(data.changes, range, focus, data.isMulti);\n }\n\n keyPositionChange(\n changes: Partial<Cell>,\n range: RangeArea | null,\n focus: Cell | null,\n isMulti = false,\n ) {\n if (!range || !focus) {\n return false;\n }\n const data = getCoordinate(range, focus, changes, isMulti);\n if (!data) {\n return false;\n }\n const eData: EventData = this.sv.getData();\n if (isMulti) {\n if (isAfterLast(data.end, eData.lastCell) || isBeforeFirst(data.start)) {\n return false;\n }\n const range = getRange(data.start, data.end);\n return this.sv.range(range);\n }\n return this.sv.focus(\n data.start,\n changes,\n isAfterLast(data.start, eData.lastCell)\n ? 1\n : isBeforeFirst(data.start)\n ? -1\n : 0,\n );\n }\n\n /** Monitor key direction changes */\n changeDirectionKey(\n e: KeyboardEvent,\n canRange: boolean,\n ): { changes: Partial<Cell>; isMulti?: boolean } | void {\n const isMulti = canRange && e.shiftKey;\n\n // If event comes from editable element, do not hijack browser key behavior.\n if (this.isEventFromEditable(e) && DIRECTION_CODES.includes(e.code)) {\n return;\n }\n\n if (DIRECTION_CODES.includes(e.code)) {\n e.preventDefault();\n }\n\n if (e.shiftKey) {\n switch (e.code) {\n case codesLetter.TAB:\n return { changes: { x: -1 }, isMulti: false };\n }\n }\n\n switch (e.code) {\n case codesLetter.ARROW_UP:\n return { changes: { y: -1 }, isMulti };\n case codesLetter.ARROW_DOWN:\n return { changes: { y: 1 }, isMulti };\n case codesLetter.ARROW_LEFT:\n return { changes: { x: -1 }, isMulti };\n case codesLetter.TAB:\n case codesLetter.ARROW_RIGHT:\n return { changes: { x: 1 }, isMulti };\n }\n }\n\n private isEventFromEditable(e: KeyboardEvent) {\n const target = e.target as HTMLElement | null;\n if (target) {\n const tagName = target.tagName;\n if (\n tagName === 'INPUT' ||\n tagName === 'TEXTAREA' ||\n tagName === 'SELECT' ||\n target.isContentEditable\n ) {\n return true;\n }\n }\n\n const activeElement = document.activeElement as HTMLElement | null;\n if (!activeElement) {\n return false;\n }\n return (\n activeElement.tagName === 'INPUT' ||\n activeElement.tagName === 'TEXTAREA' ||\n activeElement.tagName === 'SELECT' ||\n activeElement.isContentEditable\n );\n }\n}\n","import debounce from 'lodash/debounce';\nimport { DebouncedFunc } from 'lodash';\n\nimport { h } from '@stencil/core';\nimport { CELL_HANDLER_CLASS, MOBILE_CLASS } from '../../utils/consts';\nimport {\n collectModelsOfRange,\n EventData,\n getCell,\n getCurrentCell,\n isAfterLast,\n} from './selection.utils';\nimport { DSourceState, getRange } from '@store';\nimport ColumnService from '../data/column.service';\nimport { getPropertyFromEvent } from '../../utils/events';\nimport {\n DataLookup,\n DataType,\n DimensionSettingsState,\n TempRange,\n ChangedRange,\n BeforeRangeSaveDataDetails,\n RangeArea,\n Cell,\n DimensionRows, Nullable,\n} from '@type';\nimport { Observable } from '../../utils';\n\ntype Config = {\n dimensionRow: Observable<DimensionSettingsState>;\n dimensionCol: Observable<DimensionSettingsState>;\n columnService: ColumnService;\n dataStore: Observable<DSourceState<DataType, DimensionRows>>;\n\n setTempRange(e: Nullable<TempRange> | null): Event | null;\n selectionChanged(e: ChangedRange): Event;\n rangeCopy(e: ChangedRange): Event;\n rangeDataApply(e: BeforeRangeSaveDataDetails): CustomEvent;\n setRange(e: RangeArea | null): boolean;\n clearRangeDataApply(e: { range: RangeArea }): CustomEvent<{\n range: RangeArea;\n }>;\n\n getData(): any;\n};\n\nconst enum AutoFillType {\n selection = 'Selection',\n autoFill = 'AutoFill',\n}\n\nexport class AutoFillService {\n private autoFillType: AutoFillType | null = null;\n private autoFillInitial: Cell | null = null;\n private autoFillStart: Cell | null = null;\n private autoFillLast: Cell | null = null;\n\n private onMouseMoveAutofill: DebouncedFunc<\n (e: MouseEvent | TouchEvent, data: EventData) => void\n >;\n\n constructor(private sv: Config) {}\n\n /**\n * Render autofill box\n * @param range\n * @param selectionFocus\n */\n renderAutofill(range: RangeArea | null, selectionFocus: Cell, isMobile = false) {\n let handlerStyle;\n if (range) {\n handlerStyle = getCell(\n range,\n this.sv.dimensionRow.state,\n this.sv.dimensionCol.state,\n );\n } else {\n handlerStyle = getCell(\n {\n ...selectionFocus,\n x1: selectionFocus.x,\n y1: selectionFocus.y,\n },\n this.sv.dimensionRow.state,\n this.sv.dimensionCol.state,\n );\n }\n return (\n <div\n class={{\n [CELL_HANDLER_CLASS]: true,\n [MOBILE_CLASS]: isMobile,\n }}\n style={{\n left: `${handlerStyle.right}px`,\n top: `${handlerStyle.bottom}px`,\n }}\n onMouseDown={(e: MouseEvent) => this.autoFillHandler(e)}\n onTouchStart={(e: TouchEvent) => this.autoFillHandler(e)}\n />\n );\n }\n\n private autoFillHandler(\n e: MouseEvent | TouchEvent,\n type = AutoFillType.autoFill,\n ) {\n let target: Element | null = null;\n if (e.target instanceof Element) {\n target = e.target;\n }\n if (!target) {\n return;\n }\n this.selectionStart(target, this.sv.getData(), type);\n e.preventDefault();\n }\n\n get isAutoFill() {\n return !!this.autoFillType;\n }\n\n /**\n * Process mouse move events\n */\n selectionMouseMove(e: MouseEvent | TouchEvent) {\n // initiate mouse move debounce if not present\n if (!this.onMouseMoveAutofill) {\n this.onMouseMoveAutofill = debounce(\n (e: MouseEvent | TouchEvent, data: EventData) =>\n this.doAutofillMouseMove(e, data),\n 5,\n );\n }\n if (this.isAutoFill) {\n this.onMouseMoveAutofill(e, this.sv.getData());\n }\n }\n\n private getFocus(focus: Cell | null, range: RangeArea | null) {\n // there was an issue that it was taking last cell from range but focus was out\n if (!focus && range) {\n focus = { x: range.x, y: range.y };\n }\n return focus || null;\n }\n\n /**\n * Autofill logic:\n * on mouse move apply based on previous direction (if present)\n */\n private doAutofillMouseMove(event: MouseEvent | TouchEvent, data: EventData) {\n // if no initial - not started\n if (!this.autoFillInitial) {\n return;\n }\n const x = getPropertyFromEvent(event, 'clientX', MOBILE_CLASS);\n const y = getPropertyFromEvent(event, 'clientY', MOBILE_CLASS);\n // skip touch\n if (x === null || y === null) {\n return;\n }\n const current = getCurrentCell({ x, y }, data);\n\n // first time or direction equal to start(same as first time)\n if (!this.autoFillLast) {\n if (!this.autoFillLast) {\n this.autoFillLast = this.autoFillStart;\n }\n }\n\n // check if not the latest, if latest - do nothing\n if (isAfterLast(current, data.lastCell)) {\n return;\n }\n this.autoFillLast = current;\n\n const isSame =\n current.x === this.autoFillInitial.x &&\n current.y === this.autoFillInitial.y;\n\n // if same as initial - clear\n if (isSame) {\n this.sv.setTempRange(null);\n } else {\n const area = getRange(this.autoFillInitial, this.autoFillLast);\n this.sv.setTempRange({\n area,\n type: this.autoFillType,\n });\n }\n }\n\n /**\n * Range selection started\n * Mode @param type:\n * Can be triggered from MouseDown selection on element\n * Or can be triggered on corner square drag\n */\n selectionStart(\n target: Element,\n data: EventData,\n type = AutoFillType.selection,\n ) {\n /** Get cell by autofill element */\n const { top, left } = target.getBoundingClientRect();\n this.autoFillInitial = this.getFocus(data.focus, data.range);\n this.autoFillType = type;\n this.autoFillStart = getCurrentCell({ x: left, y: top }, data);\n }\n\n /**\n * Clear current range selection on mouse up and mouse leave events\n */\n clearAutoFillSelection(focus: Cell | null, oldRange: RangeArea | null) {\n // If autofill was active, apply autofill values\n if (this.autoFillInitial) {\n // Fetch latest focus\n this.autoFillInitial = this.getFocus(focus, oldRange);\n\n // Apply range data if autofill mode is active\n if (this.autoFillType === AutoFillType.autoFill) {\n const range = getRange(this.autoFillInitial, this.autoFillLast);\n\n // If range is present, apply data\n if (range) {\n const {\n defaultPrevented: stopApply,\n detail: { range: newRange },\n } = this.sv.clearRangeDataApply({\n range,\n });\n\n // If data apply was not prevented, apply new range\n if (!stopApply && oldRange) {\n this.applyRangeWithData(newRange, oldRange);\n } else {\n // If data apply was prevented, clear temporary range\n this.sv.setTempRange(null);\n }\n }\n } else {\n // If not autofill mode, apply range only\n this.applyRangeOnly(this.autoFillInitial, this.autoFillLast);\n }\n }\n\n // Reset autofill state\n this.resetAutoFillState();\n }\n\n /**\n * Reset autofill state\n */\n private resetAutoFillState() {\n this.autoFillType = null;\n this.autoFillInitial = null;\n this.autoFillLast = null;\n this.autoFillStart = null;\n }\n\n /**\n * Trigger range apply events and handle responses\n */\n onRangeApply(newData: DataLookup, newRange: RangeArea | null, oldRange: RangeArea | null) {\n this.sv.rangeDataApply({\n data: newData,\n models: collectModelsOfRange(newData, this.sv.dataStore),\n type: this.sv.dataStore.get('type'),\n oldRange,\n newRange\n });\n\n this.sv.setRange(newRange);\n }\n\n /** Apply range and copy data during range application */\n private applyRangeWithData(newRange: RangeArea, rangeToCopy: RangeArea) {\n const rangeData: ChangedRange = {\n type: this.sv.dataStore.get('type'),\n colType: this.sv.columnService.type,\n newData: {},\n mapping: {},\n newRange,\n oldRange: rangeToCopy,\n };\n const { mapping, changed } = this.sv.columnService.getRangeData(\n rangeData,\n this.sv.columnService.columns,\n );\n rangeData.newData = changed;\n rangeData.mapping = mapping;\n let e = this.sv.selectionChanged(rangeData);\n\n // if default prevented - clear range\n if (e.defaultPrevented) {\n this.sv.setTempRange(null);\n return;\n }\n\n e = this.sv.rangeCopy(rangeData);\n if (e.defaultPrevented) {\n this.sv.setRange(newRange);\n return;\n }\n this.onRangeApply(rangeData.newData, newRange, rangeToCopy);\n }\n\n /**\n * Update range selection only,\n * no data change (mouse selection)\n */\n private applyRangeOnly(start?: Cell | null, end?: Cell | null) {\n // no changes to apply\n if (!start || !end) {\n return;\n }\n\n const newRange = getRange(start, end);\n this.sv.setRange(newRange);\n }\n}\n","@use '../../global/_mixins.scss' as *;\n@use '../../global/_colors.scss' as *;\n\n@mixin autofill-handle($handler-size: 14px, $icon-size: 10px) {\n .autofill-handle {\n position: absolute;\n width: $handler-size;\n height: $handler-size;\n margin-left: -$handler-size + 1;\n margin-top: -$handler-size + 1;\n z-index: 10;\n cursor: crosshair;\n\n &::before {\n content: '';\n position: absolute;\n right: 0;\n bottom: 0;\n width: $icon-size;\n height: $icon-size;\n background: $selection-border;\n border: 1px solid white;\n box-sizing: border-box;\n }\n }\n}\n\nrevogr-overlay-selection {\n display: block;\n position: relative;\n width: 100%;\n\n\n @include autofill-handle;\n\n &.mobile {\n @include autofill-handle(30px, 12px);\n }\n\n .selection-border-range {\n position: absolute;\n pointer-events: none;\n z-index: 9;\n\n .range-handlers {\n height: 100%;\n background-color: transparent;\n width: calc(50% + (50% / 2));\n max-width: 50px;\n min-width: 20px;\n left: 50%;\n transform: translateX(-50%);\n position: absolute;\n\n $btn-size: 20px;\n $handler-w: 15px;\n $handler-h: 5px;\n \n > span {\n pointer-events: auto;\n height: $btn-size;\n width: $btn-size;\n position: absolute;\n left: 50%;\n transform: translateX(-50%);\n\n\n &:before, &:after {\n position: absolute;\n border-radius: 5px;\n width: $handler-w;\n height: $handler-h;\n left: 50%;\n transform: translateX(-50%);\n background-color: rgba(black, 20%);\n }\n &:first-child {\n top: -($handler-h + 2px);\n &:before{\n content: '';\n top: 0;\n }\n }\n &:last-child {\n bottom: -($handler-h + 2px);\n &:after{\n content: '';\n bottom: 0;\n }\n }\n }\n }\n @include selection();\n }\n\n revogr-edit {\n z-index: 10;\n }\n}\n","import {\n Component,\n Event,\n EventEmitter,\n h,\n Host,\n Listen,\n Prop,\n type VNode,\n Element,\n Watch,\n} from '@stencil/core';\nimport ColumnService, { getCellEditor } from '../data/column.service';\nimport { codesLetter } from '../../utils/key.codes';\nimport { MOBILE_CLASS, SELECTION_BORDER_CLASS } from '../../utils/consts';\nimport { type DSourceState, getRange, isRangeSingleCell } from '@store';\nimport {\n collectModelsOfRange,\n EventData,\n getCell,\n getFocusCellBasedOnEvent,\n styleByCellProps,\n} from './selection.utils';\nimport { isEditInput } from '../editors/edit.utils';\nimport { KeyboardService } from './keyboard.service';\nimport { AutoFillService } from './autofill.service';\nimport { verifyTouchTarget } from '../../utils/events';\nimport { getCellData, type Observable } from '../../utils';\n\nimport type {\n SelectionStoreState,\n DimensionSettingsState,\n DataType,\n DimensionRows,\n ColumnRegular,\n DimensionCols,\n DragStartEvent,\n Cell,\n MultiDimensionType,\n Nullable,\n RangeClipboardCopyEventProps,\n RangeClipboardPasteEvent,\n FocusRenderEvent,\n ApplyFocusEvent,\n AllDimensionType,\n DataFormat,\n Editors,\n BeforeSaveDataDetails,\n BeforeEdit,\n RangeArea,\n TempRange,\n ChangedRange,\n BeforeRangeSaveDataDetails,\n SaveDataDetails,\n EditCellStore,\n} from '@type';\n\n/**\n * Component for overlaying the grid with the selection.\n */\n@Component({\n tag: 'revogr-overlay-selection',\n styleUrl: 'revogr-overlay-style.scss',\n})\nexport class OverlaySelection {\n // #region Properties\n /**\n * Readonly mode.\n */\n @Prop() readonly: boolean;\n /**\n * Range selection allowed.\n */\n @Prop() range: boolean;\n /**\n * Enable revogr-order-editor component (read more in revogr-order-editor component).\n * Allows D&D.\n */\n @Prop() canDrag: boolean;\n\n /**\n * Enable revogr-clipboard component (read more in revogr-clipboard component).\n * Allows copy/paste.\n */\n @Prop() useClipboard: boolean;\n\n /** Stores */\n /** Selection, range, focus. */\n @Prop() selectionStore!: Observable<SelectionStoreState>;\n /** Dimension settings Y. */\n @Prop() dimensionRow: Observable<DimensionSettingsState>;\n /** Dimension settings X. */\n @Prop() dimensionCol!: Observable<DimensionSettingsState>;\n\n // --------------------------------------------------------------------------\n //\n // Static stores, not expected to change during component lifetime\n //\n // --------------------------------------------------------------------------\n\n /**\n * Row data store.\n */\n @Prop() dataStore!: Observable<DSourceState<DataType, DimensionRows>>;\n\n /**\n * Column data store.\n */\n @Prop() colData!: Observable<DSourceState<ColumnRegular, DimensionCols>>;\n /**\n * Last real coordinates positions + 1.\n */\n @Prop() lastCell: Cell;\n /**\n * Custom editors register.\n */\n @Prop() editors: Editors;\n /**\n * If true applys changes when cell closes if not Escape.\n */\n @Prop() applyChangesOnClose = false;\n /**\n * Additional data to pass to renderer.\n */\n @Prop() additionalData: any;\n\n /**\n * Is mobile view mode.\n */\n @Prop() isMobileDevice: boolean;\n\n // #endregion\n\n // #region Events\n /**\n * Before clipboard copy happened. Validate data before copy.\n * To prevent the default behavior of editing data and use your own implementation, call `e.preventDefault()`.\n */\n @Event({ eventName: 'beforecopyregion', cancelable: true })\n beforeCopyRegion: EventEmitter;\n /**\n * Before region paste happened.\n */\n @Event({ eventName: 'beforepasteregion', cancelable: true })\n beforeRegionPaste: EventEmitter;\n\n /**\n * Cell edit apply to the data source.\n * Triggers datasource edit on the root level.\n */\n @Event({ eventName: 'celleditapply', cancelable: true })\n cellEditApply: EventEmitter<BeforeSaveDataDetails>;\n\n /**\n * Before cell focus.\n */\n @Event({ eventName: 'beforecellfocusinit', cancelable: true })\n beforeFocusCell: EventEmitter<BeforeSaveDataDetails>;\n\n /**\n * Cell click event.\n * Triggered when user clicks on a cell.\n */\n @Event({ eventName: 'cellclickinit' })\n cellClick: EventEmitter<BeforeSaveDataDetails & { originalEvent?: MouseEvent | TouchEvent }>;\n\n /**\n * Fired when change of viewport happens.\n * Usually when we switch between pinned regions.\n */\n @Event({ eventName: 'beforenextvpfocus', cancelable: true })\n beforeNextViewportFocus: EventEmitter<Cell>;\n\n /**\n * Set edit cell.\n */\n @Event({ eventName: 'setedit' }) setEdit: EventEmitter<BeforeEdit>;\n\n /**\n * Before range applied.\n * First step in triggerRangeEvent.\n */\n @Event({ eventName: 'beforeapplyrange' })\n beforeApplyRange: EventEmitter<FocusRenderEvent>;\n /**\n * Before range selection applied.\n * Second step in triggerRangeEvent.\n */\n @Event({ eventName: 'beforesetrange' }) beforeSetRange: EventEmitter;\n\n /**\n * Set range.\n * Third step in triggerRangeEvent.\n */\n @Event({ eventName: 'setrange' }) setRange: EventEmitter<\n RangeArea & { type: MultiDimensionType }\n >;\n\n /**\n * Before editor render.\n */\n @Event({ eventName: 'beforeeditrender' })\n beforeEditRender: EventEmitter<FocusRenderEvent>;\n\n\n /** Select all cells from keyboard. */\n @Event({ eventName: 'selectall' }) selectAll: EventEmitter;\n /**\n * Cancel edit. Used for editors support when editor close requested.\n */\n @Event({ eventName: 'canceledit' }) cancelEdit: EventEmitter;\n\n /**\n * Set temp range area during autofill.\n */\n @Event({ eventName: 'settemprange' })\n setTempRange: EventEmitter<Nullable<TempRange> | null>;\n\n /**\n * Before set temp range area during autofill.\n */\n @Event({ eventName: 'beforesettemprange' })\n beforeSetTempRange: EventEmitter<\n { tempRange: Nullable<TempRange> | null } & EventData & AllDimensionType\n >;\n\n /**\n * Before cell get focused.\n * To prevent the default behavior of applying the edit data, you can call `e.preventDefault()`.\n */\n @Event({ eventName: 'applyfocus' })\n applyFocus: EventEmitter<FocusRenderEvent>;\n\n /**\n * Cell get focused.\n * To prevent the default behavior of applying the edit data, you can call `e.preventDefault()`.\n */\n @Event({ eventName: 'focuscell' }) focusCell: EventEmitter<ApplyFocusEvent & FocusRenderEvent>;\n /** Range data apply. */\n @Event({ eventName: 'beforerangedataapply' })\n beforeRangeDataApply: EventEmitter<FocusRenderEvent>;\n /** Autofill data in range. First step in applyRangeWithData */\n @Event({ eventName: 'selectionchangeinit', cancelable: true })\n selectionChange: EventEmitter<ChangedRange>;\n /** Before range copy. */\n @Event({ eventName: 'beforerangecopyapply', cancelable: true, bubbles: true })\n beforeRangeCopyApply: EventEmitter<ChangedRange>;\n\n /** Range data apply.\n * Triggers datasource edit on the root level.\n */\n @Event({ eventName: 'rangeeditapply', cancelable: true })\n rangeEditApply: EventEmitter<BeforeRangeSaveDataDetails>;\n /** Range copy. */\n @Event({ eventName: 'clipboardrangecopy', cancelable: true })\n /**\n * Range copy event.\n * This event is triggered when data is ready to be copied to the clipboard.\n * If you want to prevent the default behavior of copying data, you can call `e.preventDefault()`.\n * If you want to modify the data that will be copied to the clipboard, modify the `data` property of the event object.\n */\n rangeClipboardCopy: EventEmitter<RangeClipboardCopyEventProps>;\n\n /**\n * Range paste event.\n */\n @Event({ eventName: 'clipboardrangepaste', cancelable: true })\n rangeClipboardPaste: EventEmitter<RangeClipboardPasteEvent>;\n\n /**\n * Before key up event proxy, used to prevent key up trigger.\n * If you have some custom behaviour event, use this event to check if it wasn't processed by internal logic.\n * Call preventDefault().\n */\n @Event({ eventName: 'beforekeydown' })\n beforeKeyDown: EventEmitter<{ original: KeyboardEvent } & EventData>;\n /**\n * Before key down event proxy, used to prevent key down trigger.\n * If you have some custom behaviour event, use this event to check if it wasn't processed by internal logic.\n * Call preventDefault().\n */\n @Event({ eventName: 'beforekeyup' }) beforeKeyUp: EventEmitter<\n { original: KeyboardEvent } & EventData\n >;\n /**\n * Runs before cell save.\n * Can be used to override or cancel original save.\n */\n @Event({ eventName: 'beforecellsave', cancelable: true })\n beforeCellSave: EventEmitter;\n\n /**\n * Runs when edit finished save started, first in chain event\n */\n @Event({ eventName: 'celledit' }) cellEditDone: EventEmitter<SaveDataDetails>;\n\n // #endregion\n\n // #region Private Properties\n @Element() element: HTMLElement;\n private clipboard?: HTMLRevogrClipboardElement;\n\n protected columnService: ColumnService;\n private keyboardService: KeyboardService | null = null;\n private autoFillService: AutoFillService | null = null;\n private orderEditor?: HTMLRevogrOrderEditorElement;\n private revogrEdit?: HTMLRevogrEditElement;\n private unsubscribeSelectionStore: { (): void }[] = [];\n \n /** Long press detection for cell click */\n private mouseDownTimestamp: number = 0;\n private mouseDownCell: Cell | null = null;\n /** Long press threshold in milliseconds */\n private readonly LONG_PRESS_THRESHOLD = 300;\n // #endregion\n\n // #region Listeners\n @Listen('touchmove', { target: 'document' })\n @Listen('mousemove', { target: 'document' })\n onMouseMove(e: MouseEvent | TouchEvent) {\n if (this.selectionStore.get('focus')) {\n this.autoFillService?.selectionMouseMove(e);\n }\n }\n\n /**\n * Action finished inside the document.\n * Pointer left document, clear any active operation.\n */\n @Listen('touchend', { target: 'document' })\n @Listen('mouseup', { target: 'document' })\n @Listen('mouseleave', { target: 'document' })\n onMouseUp() {\n // Clear autofill selection\n // when pointer left document,\n // clear any active operation.\n this.autoFillService?.clearAutoFillSelection(\n this.selectionStore.get('focus'),\n this.selectionStore.get('range'),\n );\n }\n\n /**\n * Row drag started.\n * This event is fired when drag action started on cell.\n */\n @Listen('dragstartcell') onCellDrag(e: CustomEvent<DragStartEvent>) {\n // Invoke drag start on order editor.\n this.orderEditor?.dragStart(e.detail);\n }\n\n /**\n * Get keyboard down from element.\n * This event is fired when keyboard key is released.\n */\n @Listen('keyup', { target: 'document' }) onKeyUp(e: KeyboardEvent) {\n // Emit before key up event.\n this.beforeKeyUp.emit({ original: e, ...this.getData() });\n }\n\n /**\n * Get keyboard down from element.\n * This event is fired when keyboard key is pressed.\n */\n @Listen('keydown', { target: 'document' }) onKeyDown(e: KeyboardEvent) {\n // Emit before key down event and check if default prevention is set.\n const proxy = this.beforeKeyDown.emit({ original: e, ...this.getData() });\n if (e.defaultPrevented || proxy.defaultPrevented) {\n return;\n }\n // Invoke key down on keyboard service.\n this.keyboardService?.keyDown(\n e,\n this.range,\n !!this.selectionStore.get('edit'),\n {\n focus: this.selectionStore.get('focus'),\n range: this.selectionStore.get('range'),\n },\n );\n }\n // #endregion\n\n /**\n * Selection & Keyboard\n */\n @Watch('selectionStore') selectionServiceSet(\n selectionStore: Observable<SelectionStoreState>,\n ) {\n // clear subscriptions\n this.unsubscribeSelectionStore.forEach(v => v());\n this.unsubscribeSelectionStore.length = 0;\n this.unsubscribeSelectionStore.push(\n selectionStore.onChange('nextFocus', v => v && this.doFocus(v, v)),\n );\n\n this.keyboardService = new KeyboardService({\n selectionStore,\n range: r => !!r && this.triggerRangeEvent(r),\n focus: (f, changes, focusNextViewport) => {\n if (focusNextViewport) {\n this.beforeNextViewportFocus.emit(f);\n return false;\n } else {\n return this.doFocus(f, f, changes);\n }\n },\n change: val => {\n if (this.readonly) {\n return;\n }\n this.doEdit(val);\n },\n cancel: async () => {\n await this.revogrEdit?.cancelChanges();\n this.closeEdit();\n },\n clearCell: () => !this.readonly && this.clearCell(),\n internalPaste: () => !this.readonly && this.beforeRegionPaste.emit(),\n getData: () => this.getData(),\n selectAll: () => this.selectAll.emit(),\n });\n this.createAutoFillService();\n }\n /** Autofill */\n @Watch('dimensionRow')\n @Watch('dimensionCol')\n createAutoFillService() {\n this.autoFillService = new AutoFillService({\n dimensionRow: this.dimensionRow,\n dimensionCol: this.dimensionCol,\n columnService: this.columnService,\n dataStore: this.dataStore,\n\n clearRangeDataApply: e =>\n this.beforeRangeDataApply.emit({\n ...e,\n ...this.types,\n rowDimension: { ...this.dimensionRow.state },\n colDimension: { ...this.dimensionCol.state },\n }),\n setTempRange: e => {\n const tempRangeEvent = this.beforeSetTempRange.emit({\n tempRange: e,\n ...this.getData(),\n ...this.types,\n });\n if (tempRangeEvent.defaultPrevented) {\n return null;\n }\n return this.setTempRange.emit(tempRangeEvent.detail.tempRange);\n },\n selectionChanged: e => this.selectionChange.emit(e),\n\n rangeCopy: e => this.beforeRangeCopyApply.emit(e),\n rangeDataApply: e => this.rangeEditApply.emit(e),\n\n setRange: e => !!e && this.triggerRangeEvent(e),\n getData: () => this.getData(),\n });\n }\n\n /** Columns */\n @Watch('dataStore')\n @Watch('colData')\n columnServiceSet() {\n this.columnService?.destroy();\n this.columnService = new ColumnService(this.dataStore, this.colData);\n this.createAutoFillService();\n }\n\n connectedCallback() {\n this.columnServiceSet();\n this.selectionServiceSet(this.selectionStore);\n }\n\n disconnectedCallback() {\n // clear subscriptions\n this.unsubscribeSelectionStore.forEach(v => v());\n this.unsubscribeSelectionStore.length = 0;\n this.columnService?.destroy();\n }\n\n async componentWillRender() {\n const editCell = this.selectionStore.get('edit');\n if (!editCell) {\n await this.revogrEdit?.beforeDisconnect?.();\n }\n }\n\n private renderRange(range: RangeArea) {\n const cell = getCell(\n range,\n this.dimensionRow.state,\n this.dimensionCol.state,\n );\n const styles = styleByCellProps(cell);\n return [\n <div class={SELECTION_BORDER_CLASS} style={styles}>\n {this.isMobileDevice && (\n <div class=\"range-handlers\">\n <span class={MOBILE_CLASS}></span>\n <span class={MOBILE_CLASS}></span>\n </div>\n )}\n </div>,\n ];\n }\n\n private renderEditor() {\n // Check if edit access\n const editCell = this.selectionStore.get('edit');\n // Readonly or Editor closed\n if (this.readonly || !editCell) {\n return null;\n }\n const enteredOrModelValue =\n editCell.val ||\n getCellData(\n this.columnService.rowDataModel(editCell.y, editCell.x).value\n );\n const editable = {\n ...editCell,\n ...this.columnService.getSaveData(\n editCell.y,\n editCell.x,\n enteredOrModelValue,\n ),\n };\n const renderEvent = this.beforeEditRender.emit({\n range: {\n ...editCell,\n x1: editCell.x,\n y1: editCell.y,\n },\n ...this.types,\n rowDimension: { ...this.dimensionRow.state },\n colDimension: { ...this.dimensionCol.state },\n });\n\n // Render prevented\n if (renderEvent.defaultPrevented) {\n return null;\n }\n\n const cell = getCell(\n renderEvent.detail.range,\n renderEvent.detail.rowDimension,\n renderEvent.detail.colDimension,\n );\n const styles = styleByCellProps(cell);\n return (\n <revogr-edit\n style={styles}\n ref={el => (this.revogrEdit = el)}\n additionalData={this.additionalData}\n editCell={editable}\n saveOnClose={this.applyChangesOnClose}\n onCelleditinit={(e) => {\n this.cellEditDone.emit(e.detail);\n }}\n column={this.columnService.rowDataModel(editCell.y, editCell.x)}\n editor={getCellEditor(\n this.columnService.columns[editCell.x],\n this.editors,\n )}\n />\n );\n }\n\n private onEditCell(e: CustomEvent<SaveDataDetails>) {\n if (e.defaultPrevented) {\n return;\n }\n const saveEv = this.beforeCellSave.emit(e.detail);\n if (!saveEv.defaultPrevented) {\n this.cellEdit(saveEv.detail);\n }\n\n // if not clear navigate to next cell after edit\n if (!saveEv.detail.preventFocus) {\n this.focusNext();\n }\n }\n\n render() {\n const nodes: VNode[] = [];\n const editCell = this.renderEditor();\n\n // Editor\n if (editCell) {\n nodes.push(editCell);\n } else {\n const range = this.selectionStore.get('range');\n const focus = this.selectionStore.get('focus');\n\n // Clipboard\n if ((range || focus) && this.useClipboard) {\n nodes.push(\n <revogr-clipboard\n readonly={this.readonly}\n onCopyregion={e => this.onCopy(e.detail)}\n onClearregion={() => !this.readonly && this.clearCell()}\n ref={e => (this.clipboard = e)}\n onPasteregion={e => this.onPaste(e.detail)}\n />,\n );\n }\n\n // Range\n if (range) {\n nodes.push(...this.renderRange(range));\n }\n // Autofill\n if (focus && !this.readonly && this.range) {\n nodes.push(this.autoFillService?.renderAutofill(range, focus, this.isMobileDevice));\n }\n\n // Order\n if (this.canDrag) {\n nodes.push(\n <revogr-order-editor\n ref={e => (this.orderEditor = e)}\n dataStore={this.dataStore}\n dimensionRow={this.dimensionRow}\n dimensionCol={this.dimensionCol}\n parent={this.element}\n rowType={this.types.rowType}\n onRowdragstartinit={e => this.rowDragStart(e)}\n />,\n );\n }\n }\n return (\n <Host\n class={{ mobile: this.isMobileDevice }}\n onClick={(e: MouseEvent) => this.onElementClick(e)}\n onDblClick={(e: MouseEvent) => this.onElementDblClick(e)}\n onMouseDown={(e: MouseEvent) => this.onElementMouseDown(e)}\n onTouchStart={(e: TouchEvent) => this.onElementMouseDown(e, true)}\n onCloseedit={(e: CustomEvent<boolean | undefined>) => this.closeEdit(e)}\n // it's done to be able to throw events from different levels, not just from editor\n onCelledit={(e: CustomEvent<SaveDataDetails>) => this.onEditCell(e)}\n >\n {nodes}\n <slot name=\"data\" />\n </Host>\n );\n }\n\n /**\n * Executes the focus operation on the specified range of cells.\n */\n private doFocus(focus: Cell, end: Cell, changes?: Partial<Cell>) {\n // 0. Check if column allows focus\n const cellData = this.columnService.getSaveData(focus.y, focus.x);\n if (cellData.column?.canFocus === false) {\n return false;\n }\n \n // 1. Trigger beforeFocus event\n const { defaultPrevented } = this.beforeFocusCell.emit(cellData);\n if (defaultPrevented) {\n return false;\n }\n const evData: FocusRenderEvent = {\n range: {\n ...focus,\n x1: end.x,\n y1: end.y,\n },\n next: changes,\n ...this.types,\n rowDimension: { ...this.dimensionRow.state },\n colDimension: { ...this.dimensionCol.state },\n };\n\n // 2. Trigger apply focus event\n const applyEvent = this.applyFocus.emit(evData);\n if (applyEvent.defaultPrevented) {\n return false;\n }\n const { range } = applyEvent.detail;\n\n // 3. Trigger focus event\n return !this.focusCell.emit({\n focus: {\n x: range.x,\n y: range.y,\n },\n end: {\n x: range.x1,\n y: range.y1,\n },\n ...applyEvent.detail,\n }).defaultPrevented;\n }\n\n private triggerRangeEvent(range: RangeArea) {\n const type = this.types.rowType;\n // 1. Apply range\n const applyEvent = this.beforeApplyRange.emit({\n range: { ...range },\n ...this.types,\n rowDimension: { ...this.dimensionRow.state },\n colDimension: { ...this.dimensionCol.state },\n });\n if (applyEvent.defaultPrevented) {\n return false;\n }\n const data = this.columnService.getRangeTransformedToProps(\n applyEvent.detail.range,\n this.dataStore,\n );\n // 2. Before set range\n let e = this.beforeSetRange.emit(data);\n if (e.defaultPrevented) {\n return false;\n }\n // 3. Set range\n e = this.setRange.emit({ ...applyEvent.detail.range, type });\n if (e.defaultPrevented) {\n return false;\n }\n return !e.defaultPrevented;\n }\n\n /**\n * Open Editor on DblClick\n */\n private onElementDblClick(e: MouseEvent) {\n // DblClick prevented outside - Editor will not open\n if (e.defaultPrevented) {\n return;\n }\n\n // Allow native text selection flow, do not open editor.\n if (this.hasNativeTextSelection()) {\n return;\n }\n\n // Get data from the component\n const data = this.getData();\n const focusCell = getFocusCellBasedOnEvent(e, data);\n if (!focusCell) {\n return;\n }\n this.doEdit();\n }\n\n /**\n * Handle mouse down event on Host element\n */\n private onElementMouseDown(e: MouseEvent | TouchEvent, touch = false) {\n // Get the target element from the event object\n const targetElement = e.target as HTMLElement | undefined;\n // Ignore focus if clicked input\n if (isEditInput(targetElement) || e.defaultPrevented) {\n return;\n }\n \n // Ignore focus if clicked checkbox\n const isCheckboxClick = targetElement?.closest('.rv-checkbox') || \n targetElement?.closest('.row-checkbox') ||\n targetElement?.classList.contains('rv-checkbox') ||\n targetElement?.classList.contains('row-checkbox');\n \n if (isCheckboxClick) {\n return;\n }\n\n // Ignore right click (button 2) and middle click (button 1)\n if (!touch && (e as MouseEvent).button !== 0) {\n return;\n }\n\n // Get data from the component\n const data = this.getData();\n const focusCell = getFocusCellBasedOnEvent(e, data);\n if (!focusCell) {\n return;\n }\n\n // Record mousedown timestamp and cell for long press detection\n this.mouseDownTimestamp = Date.now();\n this.mouseDownCell = focusCell;\n\n // Set focus on the current cell\n this.focus(focusCell, this.range && e.shiftKey);\n\n // Initiate autofill selection\n if (this.range) {\n targetElement &&\n this.autoFillService?.selectionStart(targetElement, this.getData());\n\n // Prevent default behavior for mouse events,\n // but only if target element is not a mobile input\n if (!touch) {\n e.preventDefault();\n } else if (\n verifyTouchTarget((e as TouchEvent).touches[0], MOBILE_CLASS)\n ) {\n // Prevent default behavior for touch events\n // if target element is a mobile input\n e.preventDefault();\n }\n }\n }\n\n /**\n * Handle click event on Host element\n * This is triggered by native click event, which naturally handles long press\n * (long press won't trigger click event)\n */\n private onElementClick(e: MouseEvent) {\n // Get the target element from the event object\n const targetElement = e.target as HTMLElement | undefined;\n // Ignore if clicked input or default prevented\n if (isEditInput(targetElement) || e.defaultPrevented) {\n return;\n }\n\n // Only handle left click\n if (e.button !== 0) {\n return;\n }\n\n // Get data from the component\n const data = this.getData();\n const focusCell = getFocusCellBasedOnEvent(e, data);\n if (!focusCell) {\n return;\n }\n\n const clickDuration = this.mouseDownTimestamp > 0\n ? Date.now() - this.mouseDownTimestamp\n : 0;\n\n // Allow native text selection flow, do not emit cell click.\n // But if this is a quick re-click on the same cell, keep cellclick behavior stable.\n if (this.hasNativeTextSelection()) {\n const sameCellQuickClick =\n !!this.mouseDownCell &&\n this.mouseDownCell.x === focusCell.x &&\n this.mouseDownCell.y === focusCell.y &&\n clickDuration < this.LONG_PRESS_THRESHOLD;\n\n if (!sameCellQuickClick) {\n this.mouseDownTimestamp = 0;\n this.mouseDownCell = null;\n return;\n }\n\n window.getSelection()?.removeAllRanges();\n }\n\n // Check if this is a long press\n if (this.mouseDownTimestamp > 0 && this.mouseDownCell) {\n if (clickDuration >= this.LONG_PRESS_THRESHOLD) {\n // This is a long press, don't emit cellclick\n this.mouseDownTimestamp = 0;\n this.mouseDownCell = null;\n return;\n }\n }\n\n // Reset long press detection\n this.mouseDownTimestamp = 0;\n this.mouseDownCell = null;\n\n // Emit cell click event\n const cellData = this.columnService.getSaveData(focusCell.y, focusCell.x);\n this.cellClick.emit({\n ...cellData,\n originalEvent: e,\n });\n }\n\n private hasNativeTextSelection() {\n const selection = window.getSelection();\n if (!selection || selection.type !== 'Range' || selection.toString().length === 0) {\n return false;\n }\n if (!selection.rangeCount) {\n return false;\n }\n\n const range = selection.getRangeAt(0);\n const container = range.commonAncestorContainer;\n const selectionRoot = container.nodeType === Node.TEXT_NODE ? container.parentNode : container;\n return !!selectionRoot && this.element.contains(selectionRoot);\n }\n\n /**\n * Start cell editing\n */\n protected doEdit(val = '') {\n if (this.canEdit()) {\n const focus = this.selectionStore.get('focus');\n if (!focus) {\n return;\n }\n const data = this.columnService.getSaveData(focus.y, focus.x);\n this.setEdit?.emit({\n ...data,\n val,\n });\n }\n }\n\n /**\n * Close editor event triggered\n * @param details - if it requires focus next\n */\n private async closeEdit(e?: CustomEvent<boolean | undefined>) {\n this.cancelEdit.emit();\n if (e?.detail) {\n await this.focusNext();\n }\n }\n\n /**\n * Edit finished.\n * Close Editor and save.\n */\n protected cellEdit(e: SaveDataDetails) {\n const dataToSave = this.columnService.getSaveData(e.rgRow, e.rgCol, e.val);\n this.cellEditApply.emit(dataToSave);\n }\n\n private getRegion() {\n const focus = this.selectionStore.get('focus');\n let range = this.selectionStore.get('range');\n if (!range) {\n range = getRange(focus, focus);\n }\n return range;\n }\n private onCopy(e: DataTransfer) {\n const range = this.getRegion();\n const canCopyEvent = this.beforeCopyRegion.emit(range);\n if (canCopyEvent.defaultPrevented) {\n return false;\n }\n let rangeData: DataFormat[][] | undefined;\n\n if (range) {\n const { data, mapping } = this.columnService.copyRangeArray(\n range,\n this.dataStore,\n );\n const event = this.rangeClipboardCopy.emit({\n range,\n data,\n mapping,\n ...this.types,\n });\n if (!event.defaultPrevented) {\n rangeData = event.detail.data;\n }\n }\n\n this.clipboard?.doCopy(e, rangeData);\n return true;\n }\n\n private onPaste(data: string[][]) {\n const focus = this.selectionStore.get('focus');\n const isEditing = this.selectionStore.get('edit') !== null;\n if (!focus || isEditing) {\n return;\n }\n let { changed, range } = this.columnService.getTransformedDataToApply(\n focus,\n data,\n );\n const { defaultPrevented: canPaste } = this.rangeClipboardPaste.emit({\n data: changed,\n models: collectModelsOfRange(changed, this.dataStore),\n range,\n ...this.types,\n });\n\n if (canPaste) {\n return;\n }\n this.autoFillService?.onRangeApply(changed, range, range);\n }\n\n private async focusNext() {\n const canFocus = await this.keyboardService?.keyChangeSelection(\n new KeyboardEvent('keydown', {\n code: codesLetter.ARROW_DOWN,\n }),\n this.range,\n );\n if (!canFocus) {\n this.closeEdit();\n }\n }\n\n protected clearCell() {\n const range = this.selectionStore.get('range');\n if (range && !isRangeSingleCell(range)) {\n const data = this.columnService.getRangeStaticData(range, '');\n this.autoFillService?.onRangeApply(data, range, range);\n } else if (this.canEdit()) {\n const focused = this.selectionStore.get('focus');\n if (!focused) {\n return;\n }\n const cell = this.columnService.getSaveData(focused.y, focused.x);\n this.cellEdit({\n rgRow: focused.y,\n rgCol: focused.x,\n val: '',\n type: cell.type,\n prop: cell.prop,\n });\n }\n }\n\n private rowDragStart({ detail }: CustomEvent<{ cell: Cell; text: string }>) {\n detail.text = getCellData(\n this.columnService.rowDataModel(detail.cell.y, detail.cell.x).value\n );\n }\n\n /**\n * Verify if edit allowed.\n */\n protected canEdit() {\n if (this.readonly) {\n return false;\n }\n const focus = this.selectionStore.get('focus');\n return focus && !this.columnService?.isReadOnly(focus.y, focus.x);\n }\n\n get edited(): EditCellStore | null {\n return this.selectionStore.get('edit');\n }\n\n /**\n * Sets the focus on a cell and optionally edits a range.\n */\n focus(cell?: Cell, isRangeEdit = false) {\n if (!cell) return false;\n\n const end = cell;\n const start = this.selectionStore.get('focus');\n\n if (isRangeEdit && start) {\n const range = getRange(start, end);\n if (range) {\n return this.triggerRangeEvent(range);\n }\n }\n\n return this.doFocus(cell, end);\n }\n\n get types(): AllDimensionType {\n return {\n rowType: this.dataStore.get('type'),\n colType: this.columnService.type,\n };\n }\n\n /**\n * Collect data\n */\n protected getData(): EventData {\n return {\n el: this.element,\n rows: this.dimensionRow.state,\n cols: this.dimensionCol.state,\n lastCell: this.lastCell,\n focus: this.selectionStore.get('focus'),\n range: this.selectionStore.get('range'),\n edit: this.selectionStore.get('edit'),\n };\n }\n}\n","import type { VNode } from '@stencil/core';\nimport type { HyperFunc } from '@type';\n\ntype HeaderRender = {\n (start: number): (h: HyperFunc<VNode>, e: { rowIndex: number }) => number;\n};\nexport const RowHeaderRender: HeaderRender = s => (__, { rowIndex: i }) => s + i;\n","import { h, Host, Component, Prop, Event, EventEmitter } from '@stencil/core';\nimport type { JSXBase } from '@stencil/core/internal';\n\nimport { ViewportStore, DataStore } from '@store';\nimport type {\n RowHeaders,\n ViewPortScrollEvent,\n DataType,\n ColumnRegular,\n ViewportData,\n ElementScroll,\n DimensionRows,\n DimensionCols,\n} from '@type';\n\nimport { ROW_HEADER_TYPE } from '../../utils/consts';\nimport { RowHeaderRender } from './row-header-render';\nimport { calculateRowHeaderSize } from '../../utils/row-header-utils';\nimport { HEADER_SLOT } from '../revoGrid/viewport.helpers';\nimport { type JSX } from '../../components';\n\n/**\n * Row headers component\n * Visible on the left side of the table\n */\n\n@Component({ tag: 'revogr-row-headers' })\nexport class RevogrRowHeaders {\n // #region Properties\n /**\n * Header height to setup row headers\n */\n @Prop() height: number;\n\n /**\n * Viewport data\n */\n @Prop() dataPorts: ViewportData[];\n /**\n * Header props\n */\n @Prop() headerProp: Record<string, any>;\n\n /**\n * Row class\n */\n @Prop() rowClass: string;\n\n /**\n * Enable resize\n */\n @Prop() resize: boolean;\n /**\n * Row header column\n */\n @Prop() rowHeaderColumn: RowHeaders;\n /**\n * Additional data to pass to renderer\n */\n @Prop() additionalData: any;\n /**\n * Prevent rendering until job is done.\n * Can be used for initial rendering performance improvement.\n * When several plugins require initial rendering this will prevent double initial rendering.\n */\n @Prop() jobsBeforeRender: Promise<any>[] = [];\n // #endregion\n\n /**\n * Scroll viewport\n */\n @Event({ eventName: 'scrollview', bubbles: false })\n scrollViewport: EventEmitter<ViewPortScrollEvent>;\n /**\n * Register element to scroll\n */\n @Event({ eventName: 'ref', bubbles: false })\n elementToScroll: EventEmitter<ElementScroll>;\n\n render() {\n const dataViews: HTMLElement[] = [];\n const viewport = new ViewportStore('colPinStart');\n\n /** render viewports rows */\n let totalLength = 1;\n // todo: this part could be optimized to avoid to often re-render dataPorts can be cached\n for (let data of this.dataPorts) {\n const itemCount = data.dataStore.get('items').length;\n\n // initiate row data\n const dataStore = new DataStore<DataType, DimensionRows>(data.type, {\n ...data.dataStore.state,\n });\n\n // initiate column data\n const colData = new DataStore<ColumnRegular, DimensionCols>(\n 'colPinStart',\n );\n const column: ColumnRegular = {\n cellTemplate: RowHeaderRender(totalLength),\n ...this.rowHeaderColumn,\n };\n colData.updateData([column]);\n dataViews.push(\n <revogr-data\n {...data}\n colType=\"rowHeaders\"\n jobsBeforeRender={this.jobsBeforeRender}\n rowClass={this.rowClass}\n dataStore={dataStore.store}\n colData={colData.store}\n viewportCol={viewport.store}\n readonly={true}\n range={false}\n />,\n );\n totalLength += itemCount;\n }\n\n const colSize = calculateRowHeaderSize(totalLength, this.rowHeaderColumn);\n viewport.setViewport({\n realCount: 1,\n virtualSize: 0,\n items: [\n {\n size: colSize,\n start: 0,\n end: colSize,\n itemIndex: 0,\n },\n ],\n });\n\n const viewportScroll: JSX.RevogrViewportScroll &\n JSXBase.HTMLAttributes<HTMLRevogrViewportScrollElement> = {\n contentHeight: this.height,\n contentWidth: 0,\n style: { minWidth: `${colSize}px` },\n colType: 'rowHeaders',\n ref: (el) => this.elementToScroll.emit(el),\n onScrollviewport: (e: CustomEvent) => this.scrollViewport.emit(e.detail),\n };\n const viewportHeader: JSX.RevogrHeader & { slot: string } = {\n ...this.headerProp,\n // groups not present on row headers\n groups: [],\n colData:\n typeof this.rowHeaderColumn === 'object' ? [this.rowHeaderColumn] : [],\n viewportCol: viewport.store,\n canResize: false,\n type: ROW_HEADER_TYPE,\n // parent,\n slot: HEADER_SLOT,\n };\n return (\n <Host class={{ [ROW_HEADER_TYPE]: true }} key={ROW_HEADER_TYPE}>\n <revogr-viewport-scroll {...viewportScroll} row-header={true}>\n <revogr-header {...viewportHeader} />\n {dataViews}\n </revogr-viewport-scroll>\n </Host>\n );\n }\n}\n","\n\n/**\n * Autohide scroll for MacOS when scroll is visible only for 1 sec\n */\nexport class AutohideScrollPlugin {\n private autohideScrollTimeout = 0;\n constructor(private element: HTMLElement) {\n }\n\n /**\n * When scroll size updates set it up for autohide\n */\n setScrollSize(s: number) {\n if (!s) {\n this.element.setAttribute('autohide', 'true');\n } else {\n this.element.removeAttribute('autohide');\n }\n }\n\n /**\n * On each scroll check if it's time to show\n */\n checkScroll({\n scrollSize,\n contentSize,\n virtualSize,\n }: {\n scrollSize: number;\n contentSize: number;\n virtualSize: number;\n }) {\n const hasScroll = contentSize > virtualSize;\n const isHidden = !scrollSize && hasScroll;\n if (isHidden) {\n this.element.setAttribute('visible', 'true');\n this.autohideScrollTimeout = this.show(\n this.element,\n this.autohideScrollTimeout,\n );\n }\n }\n\n private show(element?: HTMLElement, timeout?: number): number {\n clearTimeout(timeout);\n return Number(\n setTimeout(() => {\n element?.removeAttribute('visible');\n }, 1000),\n );\n }\n clear() {\n clearTimeout(this.autohideScrollTimeout);\n }\n}\n","revogr-scroll-virtual {\n $min-size: 20px;\n\n // show scroll only for 1 sec\n &[autohide] {\n position: absolute;\n z-index: 100 !important;\n\n &.vertical {\n top: 0;\n right: 0;\n\n &[visible] {\n min-width: $min-size !important;\n }\n }\n\n &.horizontal {\n bottom: 0;\n left: 0;\n\n &[visible] {\n min-height: $min-size !important;\n }\n }\n }\n\n &.vertical {\n overflow-y: auto;\n overflow-x: hidden;\n height: 100%;\n\n > div {\n width: 1px;\n }\n }\n\n &.horizontal {\n overflow-x: auto;\n overflow-y: hidden;\n width: 100%;\n\n > div {\n height: 1px;\n }\n }\n}\n","import {\n Component,\n Element as StencilElement,\n Event,\n EventEmitter,\n h,\n Host,\n Method,\n Prop,\n} from '@stencil/core';\nimport LocalScrollService, {\n getContentSize,\n} from '../../services/local.scroll.service';\nimport type {\n DimensionType,\n ViewPortScrollEvent,\n} from '@type';\nimport { AutohideScrollPlugin } from './autohide-scroll.plugin';\nimport { LocalScrollTimer } from '../../services/local.scroll.timer';\nimport { getScrollbarSize } from '../../utils';\n\n/**\n * Virtual scroll component\n */\n@Component({\n tag: 'revogr-scroll-virtual',\n styleUrl: 'revogr-scroll-style.scss',\n})\nexport class RevogrScrollVirtual {\n /**\n * Scroll dimension (`X` - `rgCol` or `Y` - `rgRow`)\n */\n @Prop() dimension: DimensionType = 'rgRow';\n\n /**\n * Dimensions\n */\n @Prop() realSize!: number;\n\n /**\n * Virtual size\n */\n @Prop() virtualSize!: number;\n\n /**\n * Client size\n */\n @Prop() clientSize!: number;\n\n /**\n * Scroll event\n */\n @Event({ eventName: 'scrollvirtual' })\n scrollVirtual: EventEmitter<ViewPortScrollEvent>;\n\n @StencilElement() element: HTMLElement;\n private autohideScrollPlugin: AutohideScrollPlugin;\n private scrollSize = 0;\n private localScrollService: LocalScrollService;\n private localScrollTimer: LocalScrollTimer;\n \n // 防抖定时器\n private scrollSizeUpdateTimer: ReturnType<typeof setTimeout> | null = null;\n // 防抖延迟时间\n private static readonly SCROLL_SIZE_UPDATE_DELAY = 200;\n\n @Method()\n async setScroll(e: ViewPortScrollEvent): Promise<void> {\n if (this.dimension !== e.dimension) {\n return;\n }\n this.localScrollTimer.latestScrollUpdate(e.dimension);\n this.localScrollService?.setScroll(e);\n if (e.coordinate) {\n this.autohideScrollPlugin.checkScroll({\n scrollSize: this.scrollSize,\n contentSize: this.realSize,\n virtualSize: this.virtualSize,\n });\n }\n }\n\n /**\n * Update if `delta` exists in case we don't know current position or if it's external change\n */\n @Method()\n async changeScroll(e: ViewPortScrollEvent): Promise<ViewPortScrollEvent> {\n if (e.delta) {\n // 滚动阈值:小于此值认为没有实际滚动空间\n const SCROLL_THRESHOLD = 10;\n const clientSize = this.dimension === 'rgRow' ? this.element.clientHeight : this.element.clientWidth;\n const diff = this.realSize - clientSize;\n \n // 如果没有滚动空间,不处理滚动\n if (diff <= SCROLL_THRESHOLD) {\n e.coordinate = 0;\n return e;\n }\n \n switch (e.dimension) {\n case 'rgCol':\n e.coordinate = this.element.scrollLeft + e.delta;\n break;\n case 'rgRow':\n e.coordinate = this.element.scrollTop + e.delta;\n break;\n }\n this.setScroll(e);\n }\n return e;\n }\n\n connectedCallback() {\n this.autohideScrollPlugin = new AutohideScrollPlugin(this.element);\n this.localScrollTimer = new LocalScrollTimer(\n 'ontouchstart' in document.documentElement ? 0 : 10,\n );\n this.localScrollService = new LocalScrollService({\n runScroll: e => this.scrollVirtual.emit(e),\n applyScroll: e => {\n this.localScrollTimer.setCoordinate(e);\n const type = e.dimension === 'rgRow' ? 'scrollTop' : 'scrollLeft';\n // this will trigger on scroll event\n this.element[type] = e.coordinate;\n },\n });\n }\n\n disconnectedCallback() {\n this.autohideScrollPlugin.clear();\n if (this.scrollSizeUpdateTimer) {\n clearTimeout(this.scrollSizeUpdateTimer);\n }\n }\n\n componentWillLoad() {\n this.scrollSize = getScrollbarSize(document);\n }\n\n componentDidRender() {\n // 使用防抖来更新滚动条尺寸,避免 resize 过程中的闪烁\n if (this.scrollSizeUpdateTimer) {\n clearTimeout(this.scrollSizeUpdateTimer);\n }\n \n this.scrollSizeUpdateTimer = setTimeout(() => {\n this.scrollSizeUpdateTimer = null;\n this.updateScrollSize();\n }, RevogrScrollVirtual.SCROLL_SIZE_UPDATE_DELAY);\n \n this.localScrollService.setParams(\n {\n contentSize: this.realSize,\n clientSize: this.dimension === 'rgRow' ? this.element.clientHeight : this.element.clientWidth,\n virtualSize: this.clientSize,\n },\n this.dimension,\n );\n }\n \n /**\n * 更新滚动条尺寸\n */\n private updateScrollSize() {\n // 滚动阈值:小于此值认为没有实际滚动空间\n const SCROLL_THRESHOLD = 10;\n let scrollSize = 0;\n \n if (this.dimension === 'rgRow') {\n // 使用 realSize(内容实际高度)和 clientHeight(可见区域高度)来判断\n const diff = this.realSize - this.element.clientHeight;\n scrollSize = diff > SCROLL_THRESHOLD ? this.scrollSize : 0;\n this.element.style.minWidth = `${scrollSize}px`;\n } else {\n // 使用 realSize(内容实际宽度)和 clientWidth(可见区域宽度)来判断\n const diff = this.realSize - this.element.clientWidth;\n scrollSize = diff > SCROLL_THRESHOLD ? this.scrollSize : 0;\n this.element.style.minHeight = `${scrollSize}px`;\n }\n this.autohideScrollPlugin.setScrollSize(scrollSize);\n }\n\n onScroll(e: MouseEvent) {\n if (!(e.target instanceof Element)) {\n return;\n }\n const target = e.target;\n let type: 'scrollLeft' | 'scrollTop' = 'scrollLeft';\n if (this.dimension === 'rgRow') {\n type = 'scrollTop';\n }\n\n // 滚动阈值:小于此值认为没有实际滚动空间\n const SCROLL_THRESHOLD = 10;\n const clientSize = this.dimension === 'rgRow' ? this.element.clientHeight : this.element.clientWidth;\n const diff = this.realSize - clientSize;\n \n // 如果没有滚动空间,不处理滚动事件\n if (diff <= SCROLL_THRESHOLD) {\n return;\n }\n\n const setScroll = () => {\n this.localScrollService?.scroll(target[type] || 0, this.dimension);\n };\n // apply after throttling\n if (this.localScrollTimer.isReady(this.dimension, target[type])) {\n setScroll();\n } else {\n this.localScrollTimer.throttleLastScrollUpdate(this.dimension, target[type] || 0, () => setScroll());\n }\n }\n\n render() {\n // 滚动阈值:小于此值认为没有实际滚动空间\n const SCROLL_THRESHOLD = 10;\n const clientSize = this.dimension === 'rgRow' ? this.element.clientHeight : this.element.clientWidth;\n const diff = this.realSize - clientSize;\n \n // 如果差值小于阈值,不显示滚动内容(避免闪烁)\n if (diff <= SCROLL_THRESHOLD) {\n return (\n <Host onScroll={(e: MouseEvent) => this.onScroll(e)}>\n <div style={{ [this.dimension === 'rgRow' ? 'height' : 'width']: '0px' }} />\n </Host>\n );\n }\n \n const size = getContentSize(\n this.realSize,\n clientSize,\n this.clientSize, // content viewport size\n );\n return (\n <Host onScroll={(e: MouseEvent) => this.onScroll(e)}>\n <div\n style={{\n [this.dimension === 'rgRow' ? 'height' : 'width']: `${size}px`,\n }}\n />\n </Host>\n );\n }\n}\n",".temp-bg-range {\n display: block !important;\n position: absolute;\n pointer-events: none;\n z-index: 9;\n border: 1px solid rgb(255, 94, 0);\n box-sizing: border-box;\n\n &.Selection {\n border: 1px dashed gray;\n }\n\n > div {\n width: 1px;\n height: 1px;\n position: absolute;\n\n &.top {\n top: -1px;\n }\n\n &.bottom {\n bottom: -1px;\n }\n\n &.left {\n left: -1px;\n }\n\n &.right {\n right: -1px;\n }\n }\n}\n","import { Component, Prop, h, Host } from '@stencil/core';\nimport throttle from 'lodash/throttle';\nimport { TMP_SELECTION_BG_CLASS } from '../../utils/consts';\nimport { getCell, styleByCellProps } from '../overlay/selection.utils';\nimport { DimensionSettingsState, SelectionStoreState, RangeArea } from '@type';\nimport type { Observable } from '../../utils';\n\n/**\n * Temporary range selection component. Shows temporary range selection.\n */\n@Component({\n tag: 'revogr-temp-range',\n styleUrl: 'revogr-temp-range-style.scss',\n})\nexport class RevogrFocus {\n /**\n * Dynamic stores\n */\n\n /**\n * Selection store, shows current selection and focus\n */\n @Prop() selectionStore: Observable<SelectionStoreState>;\n\n /**\n * Dimension row store\n */\n @Prop() dimensionRow: Observable<DimensionSettingsState>;\n /**\n * Dimension column store\n */\n @Prop() dimensionCol: Observable<DimensionSettingsState>;\n\n el?: HTMLElement;\n private readonly onChange = throttle((e: HTMLElement) => this.doChange(e), 300);\n\n private doChange(e: HTMLElement) {\n e?.scrollIntoView({\n block: 'nearest',\n inline: 'nearest',\n });\n }\n\n componentDidRender() {\n if (this.el) {\n this.onChange(this.el);\n }\n }\n\n render() {\n const data = this.selectionStore.get('tempRange');\n const type = this.selectionStore.get('tempRangeType');\n if (!data) {\n return;\n }\n let directionY = 'bottom';\n let derectionX = 'right';\n const range = this.getRange();\n if (!range) {\n return;\n }\n if (data.y < range.y) {\n directionY = 'top';\n }\n if (data.x < range.x) {\n derectionX = 'left';\n }\n const directionClass = `${derectionX} ${directionY}`;\n const cell = getCell(data,\n this.dimensionRow.state,\n this.dimensionCol.state\n );\n const styles = styleByCellProps(cell);\n const props = {\n class: {\n [TMP_SELECTION_BG_CLASS]: true,\n [type || '']: true,\n },\n style: styles,\n hidden: false\n };\n return (\n <Host {...props}>\n <div class={directionClass} ref={(e) => (this.el = e)} />\n </Host>\n );\n }\n\n private getRange(): RangeArea | null {\n const range = this.selectionStore.get('range');\n if (range) {\n return range;\n }\n const focus = this.selectionStore.get('focus');\n if (!focus) {\n return null;\n }\n return {\n ...focus,\n x1: focus.x,\n y1: focus.y,\n };\n }\n}\n"],"names":["h","Host","getSourceItem","getPropertyFromEvent","getItemByPosition","getItemByIndex","RevogrFocus","FOCUS_CLASS","isGrouping","PSEUDO_GROUP_ITEM","GroupingRowRenderer","HEADER_ROW_CLASS","HEADER_ACTUAL_ROW_CLASS","HeaderRenderer","GroupHeaderRenderer","keyBy","codesLetter","isClear","isTab","isEnterKeyValue","isCopy","isCut","isPaste","isAll","timeout","RESIZE_INTERVAL","getRange","CELL_HANDLER_CLASS","MOBILE_CLASS","debounce","ColumnService","SELECTION_BORDER_CLASS","getCellData","getCellEditor","isEditInput","verifyTouchTarget","isRangeSingleCell","ViewportStore","DataStore","calculateRowHeaderSize","ROW_HEADER_TYPE","HEADER_SLOT","LocalScrollTimer","LocalScrollService","getScrollbarSize","getContentSize","throttle","TMP_SELECTION_BG_CLASS"],"mappings":"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"}