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,27 @@
1
+ /*!
2
+ * Built by Revolist OU ❤️
3
+ */
4
+ import { p as promiseResolve, b as bootstrapLazy } from './index-Dyptvvxf.js';
5
+ export { s as setNonce } from './index-Dyptvvxf.js';
6
+ import { g as globalScripts } from './app-globals-C3ZHKjnB.js';
7
+
8
+ /*
9
+ Stencil Client Patch Browser v4.36.3 | MIT Licensed | https://stenciljs.com
10
+ */
11
+
12
+ var patchBrowser = () => {
13
+ const importMeta = import.meta.url;
14
+ const opts = {};
15
+ if (importMeta !== "") {
16
+ opts.resourcesUrl = new URL(".", importMeta).href;
17
+ }
18
+ return promiseResolve(opts);
19
+ };
20
+
21
+ patchBrowser().then(async (options) => {
22
+ await globalScripts();
23
+ return bootstrapLazy([["revo-grid",[[260,"revo-grid",{"rowHeaders":[4,"row-headers"],"frameSize":[2,"frame-size"],"rowSize":[2,"row-size"],"colSize":[2,"col-size"],"range":[4],"readonly":[4],"resize":[4],"canFocus":[4,"can-focus"],"useClipboard":[4,"use-clipboard"],"columns":[16],"source":[16],"pinnedTopSource":[16,"pinned-top-source"],"pinnedBottomSource":[16,"pinned-bottom-source"],"rowDefinitions":[16,"row-definitions"],"editors":[16],"applyOnClose":[4,"apply-on-close"],"plugins":[16],"columnTypes":[16,"column-types"],"theme":[1537],"rowClass":[513,"row-class"],"autoSizeColumn":[4,"auto-size-column"],"filter":[4],"sorting":[16],"focusTemplate":[16,"focus-template"],"canMoveColumns":[4,"can-move-columns"],"trimmedRows":[16,"trimmed-rows"],"exporting":[4],"grouping":[16],"stretch":[8],"additionalData":[16,"additional-data"],"disableVirtualX":[4,"disable-virtual-x"],"disableVirtualY":[4,"disable-virtual-y"],"hideAttribution":[4,"hide-attribution"],"jobsBeforeRender":[16,"jobs-before-render"],"registerVNode":[16,"register-v-node"],"accessible":[4],"rtl":[4],"canDrag":[4,"can-drag"],"showScrollbar":[4,"show-scrollbar"],"emptyTemplate":[16,"empty-template"],"hideEmpty":[4,"hide-empty"],"disableScroll":[4,"disable-scroll"],"autoScrollToFocus":[4,"auto-scroll-to-focus"],"isSourceEmpty":[32],"columnsUpdateNonce":[32],"refresh":[64],"setDataAt":[64],"scrollToRow":[64],"scrollToColumnIndex":[64],"scrollToColumnProp":[64],"scrollToRowByProp":[64],"updateColumns":[64],"addTrimmed":[64],"scrollToCoordinate":[64],"setCellEdit":[64],"setCellsFocus":[64],"getSource":[64],"getVisibleSource":[64],"getSourceStore":[64],"getColumnStore":[64],"updateColumnSorting":[64],"clearSorting":[64],"getColumns":[64],"clearFocus":[64],"getPlugins":[64],"getFocused":[64],"getContentSize":[64],"getSelectedRange":[64],"refreshExtraElements":[64],"getProviders":[64],"lockScroll":[64],"unlockScroll":[64],"isScrollLocked":[64],"hideRowsById":[64],"showRowsById":[64],"deleteRowsById":[64],"deleteRowsByIndexes":[64]},[[5,"touchstart","mousedownHandle"],[5,"mousedown","mousedownHandle"],[5,"touchend","mouseupHandle"],[5,"mouseup","mouseupHandle"],[0,"rowdragstartinit","onRowDragStarted"],[0,"rowdragendinit","onRowDragEnd"],[0,"roworderchange","onRowOrderChange"],[0,"rowdragmoveinit","onRowDrag"],[0,"rowdragmousemove","onRowMouseMove"],[0,"celleditapply","onCellEdit"],[0,"rangeeditapply","onRangeEdit"],[0,"selectionchangeinit","onRangeChanged"],[0,"rowdropinit","onRowDropped"],[0,"beforeheaderclick","onHeaderClick"],[0,"beforecellfocusinit","onCellFocus"],[0,"cellclickinit","onCellClick"]],{"columnTypes":["columnTypesChanged"],"columns":["columnChanged"],"disableVirtualX":["disableVirtualXChanged"],"rowSize":["rowSizeChanged"],"theme":["themeChanged"],"source":["dataSourceChanged"],"pinnedBottomSource":["dataSourceChanged"],"pinnedTopSource":["dataSourceChanged"],"disableVirtualY":["disableVirtualYChanged"],"rowDefinitions":["rowDefChanged"],"trimmedRows":["trimmedRowsChanged"],"grouping":["groupingChanged"],"stretch":["applyStretch"],"filter":["applyFilter"],"sorting":["applySorting"],"rowHeaders":["rowHeadersChange"],"registerVNode":["registerOutsideVNodes"],"additionalData":["additionalDataChanged"],"rtl":["rtlChanged"],"plugins":["pluginsChanged"]}]]],["revogr-filter-panel",[[260,"revogr-filter-panel",{"filterNames":[16,"filter-names"],"filterEntities":[16,"filter-entities"],"filterCaptions":[16,"filter-captions"],"disableDynamicFiltering":[4,"disable-dynamic-filtering"],"closeOnOutsideClick":[4,"close-on-outside-click"],"isFilterIdSet":[32],"filterId":[32],"currentFilterId":[32],"currentFilterType":[32],"changes":[32],"filterItems":[32],"show":[64],"getChanges":[64]},[[5,"mousedown","onMouseDown"]]]]],["revogr-clipboard_3",[[0,"revogr-clipboard",{"readonly":[4],"doCopy":[64]},[[4,"paste","onPaste"],[4,"copy","copyStarted"],[4,"cut","cutStarted"]]],[256,"revogr-edit",{"editCell":[16,"edit-cell"],"column":[16],"editor":[16],"saveOnClose":[4,"save-on-close"],"additionalData":[8,"additional-data"],"cancelChanges":[64],"beforeDisconnect":[64]}],[0,"revogr-order-editor",{"parent":[16],"dimensionRow":[16,"dimension-row"],"dimensionCol":[16,"dimension-col"],"dataStore":[16,"data-store"],"rowType":[1,"row-type"],"dragStart":[64],"endOrder":[64],"clearOrder":[64]}]]],["revogr-data_4",[[260,"revogr-data",{"readonly":[4],"range":[4],"rowClass":[1,"row-class"],"additionalData":[8,"additional-data"],"paddingDepth":[2,"padding-depth"],"rowSelectionStore":[16,"row-selection-store"],"viewportRow":[16,"viewport-row"],"viewportCol":[16,"viewport-col"],"dimensionRow":[16,"dimension-row"],"colData":[16,"col-data"],"dataStore":[16,"data-store"],"type":[513],"colType":[513,"col-type"],"jobsBeforeRender":[16,"jobs-before-render"],"uniqueId":[8,"unique-id"],"hasColPinEnd":[4,"has-col-pin-end"],"hasRgCol":[4,"has-rg-col"],"providers":[32],"updateCell":[64]},null,{"dataStore":["onDataStoreChange"],"colData":["onColDataChange"]}],[256,"revogr-header",{"viewportCol":[16,"viewport-col"],"dimensionCol":[16,"dimension-col"],"selectionStore":[16,"selection-store"],"viewportItems":[16,"viewport-items"],"dimensionState":[16,"dimension-state"],"selectionRange":[16,"selection-range"],"groups":[16],"groupingDepth":[2,"grouping-depth"],"readonly":[4],"canResize":[4,"can-resize"],"resizeHandler":[16,"resize-handler"],"colData":[16,"col-data"],"columnFilter":[4,"column-filter"],"type":[1],"additionalData":[8,"additional-data"],"hasColPinEnd":[4,"has-col-pin-end"],"hasRgCol":[4,"has-rg-col"]}],[260,"revogr-viewport-scroll",{"rowHeader":[4,"row-header"],"contentWidth":[2,"content-width"],"contentHeight":[2,"content-height"],"colType":[1,"col-type"],"setScroll":[64],"changeScroll":[64],"applyScroll":[64]},[[0,"mousewheel-vertical","mousewheelVertical"],[0,"mousewheel-horizontal","mousewheelHorizontal"],[0,"scroll-coordinate","scrollApply"]],{"contentWidth":["contentWidthChanged"],"contentHeight":["contentHeightChanged"]}],[256,"vnode-html",{"redraw":[16]}]]],["revogr-attribution_9",[[256,"revogr-row-headers",{"height":[2],"dataPorts":[16,"data-ports"],"headerProp":[16,"header-prop"],"rowClass":[1,"row-class"],"resize":[4],"rowHeaderColumn":[16,"row-header-column"],"additionalData":[8,"additional-data"],"jobsBeforeRender":[16,"jobs-before-render"]}],[260,"revogr-overlay-selection",{"readonly":[4],"range":[4],"canDrag":[4,"can-drag"],"useClipboard":[4,"use-clipboard"],"selectionStore":[16,"selection-store"],"dimensionRow":[16,"dimension-row"],"dimensionCol":[16,"dimension-col"],"dataStore":[16,"data-store"],"colData":[16,"col-data"],"lastCell":[16,"last-cell"],"editors":[16],"applyChangesOnClose":[4,"apply-changes-on-close"],"additionalData":[8,"additional-data"],"isMobileDevice":[4,"is-mobile-device"]},[[5,"touchmove","onMouseMove"],[5,"mousemove","onMouseMove"],[5,"touchend","onMouseUp"],[5,"mouseup","onMouseUp"],[5,"mouseleave","onMouseUp"],[0,"dragstartcell","onCellDrag"],[4,"keyup","onKeyUp"],[4,"keydown","onKeyDown"]],{"selectionStore":["selectionServiceSet"],"dimensionRow":["createAutoFillService"],"dimensionCol":["createAutoFillService"],"dataStore":["columnServiceSet"],"colData":["columnServiceSet"]}],[256,"revogr-attribution"],[260,"revogr-focus",{"colType":[513,"col-type"],"rowType":[513,"row-type"],"autoScrollToFocus":[4,"auto-scroll-to-focus"],"selectionStore":[16,"selection-store"],"dimensionRow":[16,"dimension-row"],"dimensionCol":[16,"dimension-col"],"dataStore":[16,"data-store"],"colData":[16,"col-data"],"focusTemplate":[16,"focus-template"]}],[256,"revogr-grouping-overlay",{"dataStore":[16,"data-store"],"colData":[16,"col-data"],"viewportRow":[16,"viewport-row"],"viewportCol":[16,"viewport-col"],"dimensionRow":[16,"dimension-row"],"type":[1],"colType":[1,"col-type"],"additionalData":[8,"additional-data"],"rowClass":[1,"row-class"],"getGroupSelection":[16,"get-group-selection"],"paddingDepth":[2,"padding-depth"],"groupRows":[32],"dataRows":[32],"refresh":[64],"updateGroupRowsImmediate":[64]},null,{"dataStore":["onDataChange"],"viewportRow":["onDataChange"],"viewportCol":["onDataChange"]}],[256,"revogr-header-unified",{"areas":[16],"refreshCounter":[32],"startResizingForAutoSize":[64],"endResizingForAutoSize":[64],"forceRefresh":[64]}],[256,"revogr-scroll-virtual",{"dimension":[1],"realSize":[2,"real-size"],"virtualSize":[2,"virtual-size"],"clientSize":[2,"client-size"],"setScroll":[64],"changeScroll":[64]}],[256,"revogr-temp-range",{"selectionStore":[16,"selection-store"],"dimensionRow":[16,"dimension-row"],"dimensionCol":[16,"dimension-col"]}],[256,"revogr-extra",{"nodes":[16],"update":[32],"refresh":[64]}]]]], options);
24
+ });
25
+ //# sourceMappingURL=revo-grid.js.map
26
+
27
+ //# sourceMappingURL=revo-grid.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"revo-grid.js","sources":["node_modules/@stencil/core/internal/client/patch-browser.js","@lazy-browser-entrypoint?app-data=conditional"],"sourcesContent":["/*\n Stencil Client Patch Browser v4.36.3 | MIT Licensed | https://stenciljs.com\n */\n\n// src/client/client-patch-browser.ts\nimport { BUILD, NAMESPACE } from \"@stencil/core/internal/app-data\";\nimport { consoleDevInfo, H, promiseResolve, win } from \"@stencil/core\";\nvar patchBrowser = () => {\n if (BUILD.isDev && !BUILD.isTesting) {\n consoleDevInfo(\"Running in development mode.\");\n }\n if (BUILD.cloneNodeFix) {\n patchCloneNodeFix(H.prototype);\n }\n const scriptElm = BUILD.scriptDataOpts ? win.document && Array.from(win.document.querySelectorAll(\"script\")).find(\n (s) => new RegExp(`/${NAMESPACE}(\\\\.esm)?\\\\.js($|\\\\?|#)`).test(s.src) || s.getAttribute(\"data-stencil-namespace\") === NAMESPACE\n ) : null;\n const importMeta = import.meta.url;\n const opts = BUILD.scriptDataOpts ? (scriptElm || {})[\"data-opts\"] || {} : {};\n if (importMeta !== \"\") {\n opts.resourcesUrl = new URL(\".\", importMeta).href;\n }\n return promiseResolve(opts);\n};\nvar patchCloneNodeFix = (HTMLElementPrototype) => {\n const nativeCloneNodeFn = HTMLElementPrototype.cloneNode;\n HTMLElementPrototype.cloneNode = function(deep) {\n if (this.nodeName === \"TEMPLATE\") {\n return nativeCloneNodeFn.call(this, deep);\n }\n const clonedNode = nativeCloneNodeFn.call(this, false);\n const srcChildNodes = this.childNodes;\n if (deep) {\n for (let i = 0; i < srcChildNodes.length; i++) {\n if (srcChildNodes[i].nodeType !== 2) {\n clonedNode.appendChild(srcChildNodes[i].cloneNode(true));\n }\n }\n }\n return clonedNode;\n };\n};\nexport {\n patchBrowser\n};\n","export { setNonce } from '@stencil/core';\nimport { bootstrapLazy } from '@stencil/core';\nimport { patchBrowser } from '@stencil/core/internal/client/patch-browser';\nimport { globalScripts } from '@stencil/core/internal/app-globals';\npatchBrowser().then(async (options) => {\n await globalScripts();\n return bootstrapLazy([/*!__STENCIL_LAZY_DATA__*/], options);\n});\n"],"names":[],"mappings":";;;;;;;AAAA;AACA;AACA;;AAKA,IAAI,YAAY,GAAG,MAAM;AAUzB,EAAE,MAAM,UAAU,GAAG,MAAM,CAAC,IAAI,CAAC,GAAG;AACpC,EAAE,MAAM,IAAI,GAAiE,EAAE;AAC/E,EAAE,IAAI,UAAU,KAAK,EAAE,EAAE;AACzB,IAAI,IAAI,CAAC,YAAY,GAAG,IAAI,GAAG,CAAC,GAAG,EAAE,UAAU,CAAC,CAAC,IAAI;AACrD;AACA,EAAE,OAAO,cAAc,CAAC,IAAI,CAAC;AAC7B,CAAC;;ACnBD,YAAY,EAAE,CAAC,IAAI,CAAC,OAAO,OAAO,KAAK;AACvC,EAAE,MAAM,aAAa,EAAE;AACvB,EAAE,OAAO,aAAa,CAAC,4BAA4B,EAAE,OAAO,CAAC;AAC7D,CAAC,CAAC","x_google_ignoreList":[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.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":["RevogrFocus","GroupHeaderRenderer"],"mappings":"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"}