@revolist/revogrid 4.9.41 → 4.9.42

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 (403) hide show
  1. package/dist/cjs/app-globals-c0b20747.js.map +1 -1
  2. package/dist/cjs/{column.drag.plugin-fcd892ec.js → column.drag.plugin-a6ef25bf.js} +1034 -149
  3. package/dist/cjs/column.drag.plugin-a6ef25bf.js.map +1 -0
  4. package/dist/cjs/column.service-831e1c92.js +1321 -0
  5. package/dist/cjs/column.service-831e1c92.js.map +1 -0
  6. package/dist/cjs/{column.service-26c61ed6.js → dimension.helpers-1927ad24.js} +490 -1273
  7. package/dist/cjs/dimension.helpers-1927ad24.js.map +1 -0
  8. package/dist/cjs/{edit.utils-179c0800.js → edit.utils-e51411f6.js} +3 -3
  9. package/dist/cjs/{edit.utils-179c0800.js.map → edit.utils-e51411f6.js.map} +1 -1
  10. package/dist/cjs/{header-cell-renderer-d879d95e.js → header-cell-renderer-53ecdcdb.js} +2 -2
  11. package/dist/cjs/{header-cell-renderer-d879d95e.js.map → header-cell-renderer-53ecdcdb.js.map} +1 -1
  12. package/dist/cjs/index.cjs.js +127 -69
  13. package/dist/cjs/index.cjs.js.map +1 -1
  14. package/dist/cjs/key.utils-96d0bc42.js +101 -0
  15. package/dist/cjs/key.utils-96d0bc42.js.map +1 -0
  16. package/dist/cjs/loader.cjs.js +1 -1
  17. package/dist/cjs/revo-grid.cjs.entry.js +310 -941
  18. package/dist/cjs/revo-grid.cjs.entry.js.map +1 -1
  19. package/dist/cjs/revo-grid.cjs.js +1 -1
  20. package/dist/cjs/revogr-attribution_7.cjs.entry.js +100 -70
  21. package/dist/cjs/revogr-attribution_7.cjs.entry.js.map +1 -1
  22. package/dist/cjs/revogr-clipboard_3.cjs.entry.js +11 -10
  23. package/dist/cjs/revogr-clipboard_3.cjs.entry.js.map +1 -1
  24. package/dist/cjs/revogr-data_4.cjs.entry.js +88 -78
  25. package/dist/cjs/revogr-data_4.cjs.entry.js.map +1 -1
  26. package/dist/cjs/revogr-filter-panel.cjs.entry.js +33 -13
  27. package/dist/cjs/revogr-filter-panel.cjs.entry.js.map +1 -1
  28. package/dist/cjs/{text-editor-b756d6b3.js → text-editor-1afffaf1.js} +6 -6
  29. package/dist/cjs/text-editor-1afffaf1.js.map +1 -0
  30. package/dist/cjs/{throttle-a57f51f9.js → throttle-bb713c73.js} +4 -4
  31. package/dist/cjs/{throttle-a57f51f9.js.map → throttle-bb713c73.js.map} +1 -1
  32. package/dist/cjs/{row-header-utils-c37f76e4.js → viewport.store-69b45f22.js} +15 -14
  33. package/dist/cjs/viewport.store-69b45f22.js.map +1 -0
  34. package/dist/collection/components/attribution/revogr-attribution.js +1 -1
  35. package/dist/collection/components/attribution/revogr-attribution.js.map +1 -1
  36. package/dist/collection/components/data/cell-renderer.js +11 -9
  37. package/dist/collection/components/data/cell-renderer.js.map +1 -1
  38. package/dist/collection/components/data/column.service.js +7 -19
  39. package/dist/collection/components/data/column.service.js.map +1 -1
  40. package/dist/collection/components/data/revogr-data-style.css +10 -5
  41. package/dist/collection/components/data/revogr-data.js +50 -28
  42. package/dist/collection/components/data/revogr-data.js.map +1 -1
  43. package/dist/collection/components/data/row-highlight.plugin.js.map +1 -1
  44. package/dist/collection/components/data/row-renderer.js.map +1 -1
  45. package/dist/collection/components/editors/revogr-edit-style.css +8 -5
  46. package/dist/collection/components/editors/revogr-edit.js +2 -2
  47. package/dist/collection/components/editors/revogr-edit.js.map +1 -1
  48. package/dist/collection/components/editors/text-editor.js +2 -2
  49. package/dist/collection/components/editors/text-editor.js.map +1 -1
  50. package/dist/collection/components/extra/revogr-extra.js +44 -6
  51. package/dist/collection/components/extra/revogr-extra.js.map +1 -1
  52. package/dist/collection/components/header/header-cell-renderer.js.map +1 -1
  53. package/dist/collection/components/header/header-renderer.js.map +1 -1
  54. package/dist/collection/components/header/resizable.element.js.map +1 -1
  55. package/dist/collection/components/header/revogr-header-style.css +8 -5
  56. package/dist/collection/components/header/revogr-header.js +9 -9
  57. package/dist/collection/components/header/revogr-header.js.map +1 -1
  58. package/dist/collection/components/order/order-renderer.js.map +1 -1
  59. package/dist/collection/components/order/revogr-order-editor.js +12 -24
  60. package/dist/collection/components/order/revogr-order-editor.js.map +1 -1
  61. package/dist/collection/components/overlay/autofill.service.js +7 -5
  62. package/dist/collection/components/overlay/autofill.service.js.map +1 -1
  63. package/dist/collection/components/overlay/keyboard.service.js +1 -4
  64. package/dist/collection/components/overlay/keyboard.service.js.map +1 -1
  65. package/dist/collection/components/overlay/revogr-overlay-selection.js +88 -72
  66. package/dist/collection/components/overlay/revogr-overlay-selection.js.map +1 -1
  67. package/dist/collection/components/overlay/revogr-overlay-style.css +8 -5
  68. package/dist/collection/components/overlay/selection.utils.js.map +1 -1
  69. package/dist/collection/components/revoGrid/plugin.service.js +81 -0
  70. package/dist/collection/components/revoGrid/plugin.service.js.map +1 -0
  71. package/dist/collection/components/revoGrid/revo-grid-style.css +18 -11
  72. package/dist/collection/components/revoGrid/revo-grid.js +289 -140
  73. package/dist/collection/components/revoGrid/revo-grid.js.map +1 -1
  74. package/dist/collection/components/revoGrid/viewport.service.js +9 -9
  75. package/dist/collection/components/revoGrid/viewport.service.js.map +1 -1
  76. package/dist/collection/components/rowHeaders/revogr-row-headers.js +1 -1
  77. package/dist/collection/components/rowHeaders/revogr-row-headers.js.map +1 -1
  78. package/dist/collection/components/rowHeaders/row-header-render.js.map +1 -1
  79. package/dist/collection/components/scroll/revogr-viewport-scroll-style.css +8 -5
  80. package/dist/collection/components/scroll/revogr-viewport-scroll.js +26 -20
  81. package/dist/collection/components/scroll/revogr-viewport-scroll.js.map +1 -1
  82. package/dist/collection/components/scrollable/revogr-scroll-style.css +10 -7
  83. package/dist/collection/components/scrollable/revogr-scroll-virtual.js +10 -8
  84. package/dist/collection/components/scrollable/revogr-scroll-virtual.js.map +1 -1
  85. package/dist/collection/components/selectionFocus/revogr-focus-style.css +8 -5
  86. package/dist/collection/components/selectionFocus/revogr-focus.js +10 -10
  87. package/dist/collection/components/selectionFocus/revogr-focus.js.map +1 -1
  88. package/dist/collection/components/selectionTempRange/revogr-temp-range-style.css +8 -5
  89. package/dist/collection/components/selectionTempRange/revogr-temp-range.js +6 -6
  90. package/dist/collection/components/selectionTempRange/revogr-temp-range.js.map +1 -1
  91. package/dist/collection/components/vnode/vnode-converter.js +1 -1
  92. package/dist/collection/components/vnode/vnode-converter.js.map +1 -1
  93. package/dist/collection/components/vnode/vnode.utils.js.map +1 -1
  94. package/dist/collection/index.js.map +1 -1
  95. package/dist/collection/plugins/add-rows-on-paste.plugin.js +40 -0
  96. package/dist/collection/plugins/add-rows-on-paste.plugin.js.map +1 -0
  97. package/dist/collection/plugins/base.plugin.js.map +1 -1
  98. package/dist/collection/plugins/column.auto-size.plugin.js +1 -1
  99. package/dist/collection/plugins/column.auto-size.plugin.js.map +1 -1
  100. package/dist/collection/plugins/column.stretch.plugin.js +1 -1
  101. package/dist/collection/plugins/column.stretch.plugin.js.map +1 -1
  102. package/dist/collection/plugins/export/csv.js +1 -1
  103. package/dist/collection/plugins/export/csv.js.map +1 -1
  104. package/dist/collection/plugins/export/export.plugin.js +4 -2
  105. package/dist/collection/plugins/export/export.plugin.js.map +1 -1
  106. package/dist/collection/plugins/filter/filter.indexed.js +1 -0
  107. package/dist/collection/plugins/filter/filter.indexed.js.map +1 -1
  108. package/dist/collection/plugins/filter/filter.panel.js +35 -35
  109. package/dist/collection/plugins/filter/filter.panel.js.map +1 -1
  110. package/dist/collection/plugins/filter/filter.plugin.js +117 -77
  111. package/dist/collection/plugins/filter/filter.plugin.js.map +1 -1
  112. package/dist/collection/plugins/filter/filter.style.css +19 -5
  113. package/dist/collection/plugins/filter/filter.types.js.map +1 -1
  114. package/dist/collection/plugins/groupingColumn/columnGroupsRenderer.js.map +1 -1
  115. package/dist/collection/plugins/groupingColumn/headerGroupRenderer.js.map +1 -1
  116. package/dist/collection/plugins/groupingRow/grouping.const.js +1 -0
  117. package/dist/collection/plugins/groupingRow/grouping.const.js.map +1 -1
  118. package/dist/collection/plugins/groupingRow/grouping.row.plugin.js +64 -79
  119. package/dist/collection/plugins/groupingRow/grouping.row.plugin.js.map +1 -1
  120. package/dist/collection/plugins/groupingRow/grouping.row.renderer.js +3 -3
  121. package/dist/collection/plugins/groupingRow/grouping.row.renderer.js.map +1 -1
  122. package/dist/collection/plugins/groupingRow/grouping.row.types.js.map +1 -1
  123. package/dist/collection/plugins/groupingRow/grouping.service.js +40 -6
  124. package/dist/collection/plugins/groupingRow/grouping.service.js.map +1 -1
  125. package/dist/collection/plugins/index.js +2 -0
  126. package/dist/collection/plugins/index.js.map +1 -1
  127. package/dist/collection/plugins/moveColumn/column.drag.plugin.js +12 -6
  128. package/dist/collection/plugins/moveColumn/column.drag.plugin.js.map +1 -1
  129. package/dist/collection/plugins/sorting/sorting.func.js +42 -0
  130. package/dist/collection/plugins/sorting/sorting.func.js.map +1 -0
  131. package/dist/collection/plugins/sorting/sorting.plugin.js +71 -69
  132. package/dist/collection/plugins/sorting/sorting.plugin.js.map +1 -1
  133. package/dist/collection/plugins/sorting/sorting.types.js +2 -0
  134. package/dist/collection/plugins/sorting/sorting.types.js.map +1 -0
  135. package/dist/collection/serve/controller.js +32 -15
  136. package/dist/collection/serve/data.js +18 -11
  137. package/dist/collection/services/column.data.provider.js +5 -2
  138. package/dist/collection/services/column.data.provider.js.map +1 -1
  139. package/dist/collection/services/data.provider.js +18 -7
  140. package/dist/collection/services/data.provider.js.map +1 -1
  141. package/dist/collection/services/dimension.provider.js +32 -33
  142. package/dist/collection/services/dimension.provider.js.map +1 -1
  143. package/dist/collection/services/selection.store.connector.js +1 -1
  144. package/dist/collection/services/selection.store.connector.js.map +1 -1
  145. package/dist/collection/store/dataSource/data.proxy.js +9 -15
  146. package/dist/collection/store/dataSource/data.proxy.js.map +1 -1
  147. package/dist/collection/store/dataSource/data.store.js +1 -1
  148. package/dist/collection/store/dataSource/data.store.js.map +1 -1
  149. package/dist/collection/store/dataSource/trimmed.plugin.js +5 -8
  150. package/dist/collection/store/dataSource/trimmed.plugin.js.map +1 -1
  151. package/dist/collection/store/dimension/dimension.helpers.js +7 -9
  152. package/dist/collection/store/dimension/dimension.helpers.js.map +1 -1
  153. package/dist/collection/store/dimension/dimension.recalculate.plugin.js +35 -0
  154. package/dist/collection/store/dimension/dimension.recalculate.plugin.js.map +1 -0
  155. package/dist/collection/store/dimension/dimension.store.js +47 -67
  156. package/dist/collection/store/dimension/dimension.store.js.map +1 -1
  157. package/dist/collection/store/dimension/dimension.trim.plugin.js +61 -0
  158. package/dist/collection/store/dimension/dimension.trim.plugin.js.map +1 -0
  159. package/dist/collection/store/selection/selection.store.js +1 -1
  160. package/dist/collection/store/selection/selection.store.js.map +1 -1
  161. package/dist/collection/store/vp/viewport.store.js +4 -2
  162. package/dist/collection/store/vp/viewport.store.js.map +1 -1
  163. package/dist/collection/types/events.js +6 -2
  164. package/dist/collection/types/events.js.map +1 -1
  165. package/dist/collection/types/interfaces.js +4 -0
  166. package/dist/collection/types/interfaces.js.map +1 -1
  167. package/dist/collection/types/plugin.types.js.map +1 -1
  168. package/dist/collection/types/selection.js.map +1 -1
  169. package/dist/collection/types/viewport.interfaces.js.map +1 -1
  170. package/dist/collection/utils/column.utils.js +13 -3
  171. package/dist/collection/utils/column.utils.js.map +1 -1
  172. package/dist/esm/app-globals-3a760941.js.map +1 -1
  173. package/dist/esm/{column.drag.plugin-3cc77986.js → column.drag.plugin-50f49fa9.js} +1012 -130
  174. package/dist/esm/column.drag.plugin-50f49fa9.js.map +1 -0
  175. package/dist/esm/column.service-a6a7c415.js +1281 -0
  176. package/dist/esm/column.service-a6a7c415.js.map +1 -0
  177. package/dist/esm/{debounce-72878ced.js → debounce-b3166f78.js} +2 -2
  178. package/dist/esm/{debounce-72878ced.js.map → debounce-b3166f78.js.map} +1 -1
  179. package/dist/esm/{column.service-751345b2.js → dimension.helpers-d0d709c4.js} +450 -1234
  180. package/dist/esm/dimension.helpers-d0d709c4.js.map +1 -0
  181. package/dist/esm/{edit.utils-6fc686b9.js → edit.utils-0ae0db50.js} +2 -2
  182. package/dist/esm/{edit.utils-6fc686b9.js.map → edit.utils-0ae0db50.js.map} +1 -1
  183. package/dist/esm/{header-cell-renderer-32d2ed96.js → header-cell-renderer-36ecbdef.js} +2 -2
  184. package/dist/esm/{header-cell-renderer-32d2ed96.js.map → header-cell-renderer-36ecbdef.js.map} +1 -1
  185. package/dist/esm/index.js +52 -11
  186. package/dist/esm/index.js.map +1 -1
  187. package/dist/esm/{key.utils-17273f42.js → key.utils-7c3218d4.js} +2 -2
  188. package/dist/esm/{key.utils-17273f42.js.map → key.utils-7c3218d4.js.map} +1 -1
  189. package/dist/esm/loader.js +1 -1
  190. package/dist/esm/revo-grid.entry.js +246 -877
  191. package/dist/esm/revo-grid.entry.js.map +1 -1
  192. package/dist/esm/revo-grid.js +1 -1
  193. package/dist/esm/revogr-attribution_7.entry.js +63 -33
  194. package/dist/esm/revogr-attribution_7.entry.js.map +1 -1
  195. package/dist/esm/revogr-clipboard_3.entry.js +7 -6
  196. package/dist/esm/revogr-clipboard_3.entry.js.map +1 -1
  197. package/dist/esm/revogr-data_4.entry.js +60 -50
  198. package/dist/esm/revogr-data_4.entry.js.map +1 -1
  199. package/dist/esm/revogr-filter-panel.entry.js +34 -14
  200. package/dist/esm/revogr-filter-panel.entry.js.map +1 -1
  201. package/dist/esm/{text-editor-901c3eb8.js → text-editor-148a17c1.js} +5 -5
  202. package/dist/esm/text-editor-148a17c1.js.map +1 -0
  203. package/dist/esm/{throttle-138d69c3.js → throttle-394e489c.js} +3 -3
  204. package/dist/esm/{throttle-138d69c3.js.map → throttle-394e489c.js.map} +1 -1
  205. package/dist/esm/{row-header-utils-3dfbb81f.js → viewport.store-afa8c4fe.js} +11 -10
  206. package/dist/esm/viewport.store-afa8c4fe.js.map +1 -0
  207. package/dist/revo-grid/app-globals-3a760941.js +8 -1
  208. package/dist/revo-grid/app-globals-3a760941.js.map +1 -1
  209. package/dist/revo-grid/column.drag.plugin-50f49fa9.js +2541 -0
  210. package/dist/revo-grid/column.drag.plugin-50f49fa9.js.map +1 -0
  211. package/dist/revo-grid/column.service-a6a7c415.js +1281 -0
  212. package/dist/revo-grid/column.service-a6a7c415.js.map +1 -0
  213. package/dist/revo-grid/debounce-b3166f78.js +495 -0
  214. package/dist/revo-grid/debounce-b3166f78.js.map +1 -0
  215. package/dist/revo-grid/dimension.helpers-d0d709c4.js +3611 -0
  216. package/dist/revo-grid/dimension.helpers-d0d709c4.js.map +1 -0
  217. package/dist/revo-grid/edit.utils-0ae0db50.js +17 -0
  218. package/dist/revo-grid/edit.utils-0ae0db50.js.map +1 -0
  219. package/dist/revo-grid/events-cf0893a3.js +38 -1
  220. package/dist/revo-grid/events-cf0893a3.js.map +1 -1
  221. package/dist/revo-grid/filter.button-d40ab17b.js +34 -1
  222. package/dist/revo-grid/filter.button-d40ab17b.js.map +1 -1
  223. package/dist/revo-grid/header-cell-renderer-36ecbdef.js +339 -0
  224. package/dist/revo-grid/header-cell-renderer-36ecbdef.js.map +1 -0
  225. package/dist/revo-grid/index-a61f225b.js +1845 -2
  226. package/dist/revo-grid/index-a61f225b.js.map +1 -1
  227. package/dist/revo-grid/index.esm.js +160 -1
  228. package/dist/revo-grid/index.esm.js.map +1 -1
  229. package/dist/revo-grid/key.utils-7c3218d4.js +89 -0
  230. package/dist/revo-grid/key.utils-7c3218d4.js.map +1 -0
  231. package/dist/revo-grid/resize-observer-83c9e167.js +501 -1
  232. package/dist/revo-grid/resize-observer-83c9e167.js.map +1 -1
  233. package/dist/revo-grid/revo-grid.entry.js +1934 -1
  234. package/dist/revo-grid/revo-grid.entry.js.map +1 -1
  235. package/dist/revo-grid/revo-grid.esm.js +21 -1
  236. package/dist/revo-grid/revo-grid.esm.js.map +1 -1
  237. package/dist/revo-grid/revogr-attribution_7.entry.js +1431 -1
  238. package/dist/revo-grid/revogr-attribution_7.entry.js.map +1 -1
  239. package/dist/revo-grid/revogr-clipboard_3.entry.js +455 -1
  240. package/dist/revo-grid/revogr-clipboard_3.entry.js.map +1 -1
  241. package/dist/revo-grid/revogr-data_4.entry.js +974 -1
  242. package/dist/revo-grid/revogr-data_4.entry.js.map +1 -1
  243. package/dist/revo-grid/revogr-filter-panel.entry.js +340 -1
  244. package/dist/revo-grid/revogr-filter-panel.entry.js.map +1 -1
  245. package/dist/revo-grid/sorting.sign-1a675bf7.js +9 -1
  246. package/dist/revo-grid/sorting.sign-1a675bf7.js.map +1 -1
  247. package/dist/revo-grid/text-editor-148a17c1.js +80 -0
  248. package/dist/revo-grid/text-editor-148a17c1.js.map +1 -0
  249. package/dist/revo-grid/throttle-394e489c.js +230 -0
  250. package/dist/revo-grid/throttle-394e489c.js.map +1 -0
  251. package/dist/revo-grid/viewport.helpers-7e7f9dad.js +48 -1
  252. package/dist/revo-grid/viewport.helpers-7e7f9dad.js.map +1 -1
  253. package/dist/revo-grid/viewport.store-afa8c4fe.js +406 -0
  254. package/dist/revo-grid/viewport.store-afa8c4fe.js.map +1 -0
  255. package/dist/types/components/data/cell-renderer.d.ts +3 -5
  256. package/dist/types/components/data/column.service.d.ts +2 -3
  257. package/dist/types/components/data/revogr-data.d.ts +10 -6
  258. package/dist/types/components/data/row-highlight.plugin.d.ts +1 -1
  259. package/dist/types/components/data/row-renderer.d.ts +1 -1
  260. package/dist/types/components/editors/revogr-edit.d.ts +2 -2
  261. package/dist/types/components/editors/text-editor.d.ts +5 -6
  262. package/dist/types/components/extra/revogr-extra.d.ts +17 -3
  263. package/dist/types/components/header/header-cell-renderer.d.ts +1 -1
  264. package/dist/types/components/header/header-renderer.d.ts +2 -2
  265. package/dist/types/components/header/resizable.element.d.ts +1 -1
  266. package/dist/types/components/header/revogr-header.d.ts +2 -3
  267. package/dist/types/components/order/order-renderer.d.ts +1 -1
  268. package/dist/types/components/order/revogr-order-editor.d.ts +4 -10
  269. package/dist/types/components/overlay/autofill.service.d.ts +2 -2
  270. package/dist/types/components/overlay/keyboard.service.d.ts +1 -1
  271. package/dist/types/components/overlay/revogr-overlay-selection.d.ts +16 -13
  272. package/dist/types/components/overlay/selection.utils.d.ts +1 -1
  273. package/dist/types/components/revoGrid/plugin.service.d.ts +37 -0
  274. package/dist/types/components/revoGrid/revo-grid.d.ts +105 -61
  275. package/dist/types/components/revoGrid/viewport.service.d.ts +2 -2
  276. package/dist/types/components/rowHeaders/row-header-render.d.ts +2 -2
  277. package/dist/types/components/scroll/revogr-viewport-scroll.d.ts +2 -5
  278. package/dist/types/components/scrollable/revogr-scroll-virtual.d.ts +2 -3
  279. package/dist/types/components/selectionFocus/revogr-focus.d.ts +2 -2
  280. package/dist/types/components/selectionTempRange/revogr-temp-range.d.ts +2 -3
  281. package/dist/types/components/vnode/vnode-converter.d.ts +1 -1
  282. package/dist/types/components/vnode/vnode.utils.d.ts +2 -2
  283. package/dist/types/components.d.ts +191 -108
  284. package/dist/types/index.d.ts +1 -1
  285. package/dist/types/plugins/add-rows-on-paste.plugin.d.ts +14 -0
  286. package/dist/types/plugins/base.plugin.d.ts +3 -4
  287. package/dist/types/plugins/column.auto-size.plugin.d.ts +1 -1
  288. package/dist/types/plugins/column.stretch.plugin.d.ts +1 -1
  289. package/dist/types/plugins/export/csv.d.ts +1 -1
  290. package/dist/types/plugins/export/export.plugin.d.ts +4 -3
  291. package/dist/types/plugins/filter/filter.panel.d.ts +2 -2
  292. package/dist/types/plugins/filter/filter.plugin.d.ts +25 -7
  293. package/dist/types/plugins/filter/filter.types.d.ts +32 -10
  294. package/dist/types/plugins/groupingColumn/columnGroupsRenderer.d.ts +2 -2
  295. package/dist/types/plugins/groupingColumn/headerGroupRenderer.d.ts +3 -4
  296. package/dist/types/plugins/groupingRow/grouping.const.d.ts +3 -1
  297. package/dist/types/plugins/groupingRow/grouping.row.plugin.d.ts +15 -10
  298. package/dist/types/plugins/groupingRow/grouping.row.types.d.ts +38 -4
  299. package/dist/types/plugins/groupingRow/grouping.service.d.ts +9 -12
  300. package/dist/types/plugins/index.d.ts +2 -0
  301. package/dist/types/plugins/moveColumn/column.drag.plugin.d.ts +2 -2
  302. package/dist/types/plugins/sorting/sorting.func.d.ts +3 -0
  303. package/dist/types/plugins/sorting/sorting.plugin.d.ts +14 -13
  304. package/dist/types/plugins/sorting/sorting.types.d.ts +13 -0
  305. package/dist/types/services/column.data.provider.d.ts +5 -2
  306. package/dist/types/services/data.provider.d.ts +3 -1
  307. package/dist/types/services/dimension.provider.d.ts +9 -4
  308. package/dist/types/services/selection.store.connector.d.ts +4 -4
  309. package/dist/types/store/dataSource/data.proxy.d.ts +7 -9
  310. package/dist/types/store/dataSource/data.store.d.ts +2 -3
  311. package/dist/types/store/dataSource/trimmed.plugin.d.ts +1 -1
  312. package/dist/types/store/dimension/dimension.helpers.d.ts +1 -4
  313. package/dist/types/store/dimension/dimension.recalculate.plugin.d.ts +9 -0
  314. package/dist/types/store/dimension/dimension.store.d.ts +3 -2
  315. package/dist/types/store/dimension/dimension.trim.plugin.d.ts +13 -0
  316. package/dist/types/store/selection/selection.store.d.ts +1 -1
  317. package/dist/types/store/vp/viewport.store.d.ts +1 -1
  318. package/dist/types/types/events.d.ts +1 -1
  319. package/dist/types/types/interfaces.d.ts +36 -12
  320. package/dist/types/types/plugin.types.d.ts +17 -1
  321. package/dist/types/types/selection.d.ts +23 -17
  322. package/dist/types/types/viewport.interfaces.d.ts +1 -3
  323. package/dist/types/utils/column.utils.d.ts +1 -0
  324. package/hydrate/index.js +2490 -2135
  325. package/hydrate/index.mjs +2490 -2135
  326. package/package.json +20 -19
  327. package/readme.md +15 -17
  328. package/standalone/column.service.js +192 -160
  329. package/standalone/column.service.js.map +1 -1
  330. package/standalone/data.store.js +36 -25
  331. package/standalone/data.store.js.map +1 -1
  332. package/standalone/dimension.helpers.js +8 -10
  333. package/standalone/dimension.helpers.js.map +1 -1
  334. package/standalone/index.js +46 -6
  335. package/standalone/index.js.map +1 -1
  336. package/standalone/revo-grid.js +1275 -1022
  337. package/standalone/revo-grid.js.map +1 -1
  338. package/standalone/revogr-attribution2.js +1 -1
  339. package/standalone/revogr-attribution2.js.map +1 -1
  340. package/standalone/revogr-data2.js +26 -22
  341. package/standalone/revogr-data2.js.map +1 -1
  342. package/standalone/revogr-edit2.js +3 -3
  343. package/standalone/revogr-edit2.js.map +1 -1
  344. package/standalone/revogr-extra2.js +25 -4
  345. package/standalone/revogr-extra2.js.map +1 -1
  346. package/standalone/revogr-filter-panel.js +34 -14
  347. package/standalone/revogr-filter-panel.js.map +1 -1
  348. package/standalone/revogr-focus2.js +2 -1
  349. package/standalone/revogr-focus2.js.map +1 -1
  350. package/standalone/revogr-header2.js +6 -5
  351. package/standalone/revogr-header2.js.map +1 -1
  352. package/standalone/revogr-order-editor2.js +3 -0
  353. package/standalone/revogr-order-editor2.js.map +1 -1
  354. package/standalone/revogr-overlay-selection2.js +29 -17
  355. package/standalone/revogr-overlay-selection2.js.map +1 -1
  356. package/standalone/revogr-row-headers2.js +12 -9
  357. package/standalone/revogr-row-headers2.js.map +1 -1
  358. package/standalone/revogr-scroll-virtual2.js +6 -4
  359. package/standalone/revogr-scroll-virtual2.js.map +1 -1
  360. package/standalone/revogr-temp-range2.js +1 -1
  361. package/standalone/revogr-temp-range2.js.map +1 -1
  362. package/standalone/revogr-viewport-scroll2.js +27 -21
  363. package/standalone/revogr-viewport-scroll2.js.map +1 -1
  364. package/standalone/selection.utils.js +1 -0
  365. package/standalone/selection.utils.js.map +1 -1
  366. package/standalone/vnode-converter.js +1 -1
  367. package/standalone/vnode-converter.js.map +1 -1
  368. package/dist/cjs/column.drag.plugin-fcd892ec.js.map +0 -1
  369. package/dist/cjs/column.service-26c61ed6.js.map +0 -1
  370. package/dist/cjs/index-3ab26ab9.js +0 -513
  371. package/dist/cjs/index-3ab26ab9.js.map +0 -1
  372. package/dist/cjs/key.utils-f49d7bee.js +0 -101
  373. package/dist/cjs/key.utils-f49d7bee.js.map +0 -1
  374. package/dist/cjs/row-header-utils-c37f76e4.js.map +0 -1
  375. package/dist/cjs/text-editor-b756d6b3.js.map +0 -1
  376. package/dist/esm/column.drag.plugin-3cc77986.js.map +0 -1
  377. package/dist/esm/column.service-751345b2.js.map +0 -1
  378. package/dist/esm/index-1dcad6ef.js +0 -476
  379. package/dist/esm/index-1dcad6ef.js.map +0 -1
  380. package/dist/esm/row-header-utils-3dfbb81f.js.map +0 -1
  381. package/dist/esm/text-editor-901c3eb8.js.map +0 -1
  382. package/dist/revo-grid/column.drag.plugin-3cc77986.js +0 -5
  383. package/dist/revo-grid/column.drag.plugin-3cc77986.js.map +0 -1
  384. package/dist/revo-grid/column.service-751345b2.js +0 -5
  385. package/dist/revo-grid/column.service-751345b2.js.map +0 -1
  386. package/dist/revo-grid/debounce-72878ced.js +0 -5
  387. package/dist/revo-grid/debounce-72878ced.js.map +0 -1
  388. package/dist/revo-grid/edit.utils-6fc686b9.js +0 -5
  389. package/dist/revo-grid/edit.utils-6fc686b9.js.map +0 -1
  390. package/dist/revo-grid/header-cell-renderer-32d2ed96.js +0 -5
  391. package/dist/revo-grid/header-cell-renderer-32d2ed96.js.map +0 -1
  392. package/dist/revo-grid/index-1dcad6ef.js +0 -5
  393. package/dist/revo-grid/index-1dcad6ef.js.map +0 -1
  394. package/dist/revo-grid/key.utils-17273f42.js +0 -5
  395. package/dist/revo-grid/key.utils-17273f42.js.map +0 -1
  396. package/dist/revo-grid/row-header-utils-3dfbb81f.js +0 -5
  397. package/dist/revo-grid/row-header-utils-3dfbb81f.js.map +0 -1
  398. package/dist/revo-grid/text-editor-901c3eb8.js +0 -5
  399. package/dist/revo-grid/text-editor-901c3eb8.js.map +0 -1
  400. package/dist/revo-grid/throttle-138d69c3.js +0 -5
  401. package/dist/revo-grid/throttle-138d69c3.js.map +0 -1
  402. package/standalone/identity.js +0 -26
  403. package/standalone/identity.js.map +0 -1
@@ -5,16 +5,16 @@
5
5
 
6
6
  Object.defineProperty(exports, '__esModule', { value: true });
7
7
 
8
- const index$1 = require('./index-10d10c55.js');
9
- const column_service = require('./column.service-26c61ed6.js');
10
- const column_drag_plugin = require('./column.drag.plugin-fcd892ec.js');
8
+ const index = require('./index-10d10c55.js');
9
+ const column_service = require('./column.service-831e1c92.js');
10
+ const column_drag_plugin = require('./column.drag.plugin-a6ef25bf.js');
11
+ const dimension_helpers = require('./dimension.helpers-1927ad24.js');
11
12
  const debounce = require('./debounce-ec7a04b4.js');
12
- const index = require('./index-3ab26ab9.js');
13
- const rowHeaderUtils = require('./row-header-utils-c37f76e4.js');
13
+ const viewport_store = require('./viewport.store-69b45f22.js');
14
14
  const viewport_helpers = require('./viewport.helpers-e59a544e.js');
15
15
  const events = require('./events-af8f6914.js');
16
16
  require('./filter.button-b8debe72.js');
17
- require('./header-cell-renderer-d879d95e.js');
17
+ require('./header-cell-renderer-53ecdcdb.js');
18
18
 
19
19
  class ThemeCompact {
20
20
  constructor() {
@@ -81,750 +81,6 @@ function getTheme(theme) {
81
81
  return DEFAULT_THEME;
82
82
  }
83
83
 
84
- // provide collapse data
85
- function doCollapse(pIndex, source) {
86
- const model = source[pIndex];
87
- const collapseValue = model[column_service.PSEUDO_GROUP_ITEM_VALUE];
88
- const trimmed = {};
89
- let i = pIndex + 1;
90
- const total = source.length;
91
- while (i < total) {
92
- const currentModel = source[i];
93
- if (column_service.isGrouping(currentModel)) {
94
- const currentValue = currentModel[column_service.PSEUDO_GROUP_ITEM_VALUE];
95
- if (!currentValue.length || !currentValue.startsWith(collapseValue + ',')) {
96
- break;
97
- }
98
- currentModel[column_service.GROUP_EXPANDED] = false;
99
- }
100
- trimmed[i++] = true;
101
- }
102
- model[column_service.GROUP_EXPANDED] = false;
103
- return { trimmed };
104
- }
105
- /**
106
- *
107
- * @param pIndex - physical index
108
- * @param vIndex - virtual index, need to update item collection
109
- * @param source - data source
110
- * @param rowItemsIndexes - rgRow indexes
111
- */
112
- function doExpand(vIndex, source, rowItemsIndexes) {
113
- const physicalIndex = rowItemsIndexes[vIndex];
114
- const model = source[physicalIndex];
115
- const currentGroup = column_service.getParsedGroup(model[column_service.PSEUDO_GROUP_ITEM_ID]);
116
- const trimmed = {};
117
- // no group found
118
- if (!currentGroup) {
119
- return { trimmed };
120
- }
121
- const groupItems = [];
122
- model[column_service.GROUP_EXPANDED] = true;
123
- let i = physicalIndex + 1;
124
- const total = source.length;
125
- let groupLevelOnly = 0;
126
- // go through all rows
127
- while (i < total) {
128
- const currentModel = source[i];
129
- const isGroup = column_service.isGrouping(currentModel);
130
- // group found
131
- if (isGroup) {
132
- if (!column_service.isSameGroup(currentGroup, model, currentModel)) {
133
- break;
134
- }
135
- else if (!groupLevelOnly) {
136
- // if get group first it's group only level
137
- groupLevelOnly = currentModel[column_service.GROUP_DEPTH];
138
- }
139
- }
140
- // level 0 or same depth
141
- if (!groupLevelOnly || (isGroup && groupLevelOnly === currentModel[column_service.GROUP_DEPTH])) {
142
- trimmed[i] = false;
143
- groupItems.push(i);
144
- }
145
- i++;
146
- }
147
- const result = {
148
- trimmed,
149
- };
150
- if (groupItems.length) {
151
- const items = [...rowItemsIndexes];
152
- items.splice(vIndex + 1, 0, ...groupItems);
153
- result.items = items;
154
- }
155
- return result;
156
- }
157
-
158
- const TRIMMED_GROUPING = 'grouping';
159
- /**
160
- * Prepare trimming updated indexes for grouping
161
- * @param initiallyTrimed
162
- * @param firstLevelMap
163
- * @param secondLevelMap
164
- */
165
- function processDoubleConversionTrimmed(initiallyTrimed, firstLevelMap, secondLevelMap) {
166
- const trimemedOptionsToUpgrade = {};
167
- /**
168
- * go through all groups except grouping
169
- */
170
- for (let type in initiallyTrimed) {
171
- if (type === TRIMMED_GROUPING) {
172
- continue;
173
- }
174
- const items = initiallyTrimed[type];
175
- const newItems = {};
176
- for (let initialIndex in items) {
177
- /**
178
- * if item exists we find it in collection
179
- * we support 2 level of conversions
180
- */
181
- let newConversionIndex = firstLevelMap[initialIndex];
182
- if (secondLevelMap) {
183
- newConversionIndex = secondLevelMap[newConversionIndex];
184
- }
185
- /**
186
- * if item was trimmed previously
187
- * trimming makes sense to apply
188
- */
189
- if (items[initialIndex]) {
190
- newItems[newConversionIndex] = true;
191
- /**
192
- * If changes present apply changes to new source
193
- */
194
- if (newConversionIndex !== parseInt(initialIndex, 10)) {
195
- trimemedOptionsToUpgrade[type] = newItems;
196
- }
197
- }
198
- }
199
- }
200
- return trimemedOptionsToUpgrade;
201
- }
202
-
203
- class GroupingRowPlugin extends column_drag_plugin.BasePlugin {
204
- get hasProps() {
205
- var _a, _b, _c;
206
- return ((_a = this.options) === null || _a === void 0 ? void 0 : _a.props) && ((_c = (_b = this.options) === null || _b === void 0 ? void 0 : _b.props) === null || _c === void 0 ? void 0 : _c.length);
207
- }
208
- get store() {
209
- return this.providers.data.stores[column_service.GROUPING_ROW_TYPE].store;
210
- }
211
- // proxy for items get
212
- get rowItems() {
213
- return this.store.get('items');
214
- }
215
- get trimmed() {
216
- return this.store.get('trimmed');
217
- }
218
- constructor(revogrid, providers) {
219
- super(revogrid, providers);
220
- this.revogrid = revogrid;
221
- this.providers = providers;
222
- }
223
- // befoce cell focus
224
- onFocus(e) {
225
- if (column_service.isGrouping(e.detail.model)) {
226
- e.preventDefault();
227
- }
228
- }
229
- // expand event triggered
230
- onExpand({ virtualIndex }) {
231
- const { source } = this.getSource();
232
- let newTrimmed = this.trimmed[TRIMMED_GROUPING];
233
- let i = column_service.getPhysical(this.store, virtualIndex);
234
- const model = source[i];
235
- const prevExpanded = model[column_service.GROUP_EXPANDED];
236
- if (!prevExpanded) {
237
- const { trimmed, items } = doExpand(virtualIndex, source, this.rowItems);
238
- newTrimmed = Object.assign(Object.assign({}, newTrimmed), trimmed);
239
- if (items) {
240
- column_service.setItems(this.store, items);
241
- }
242
- }
243
- else {
244
- const { trimmed } = doCollapse(i, source);
245
- newTrimmed = Object.assign(Object.assign({}, newTrimmed), trimmed);
246
- this.revogrid.clearFocus();
247
- }
248
- this.store.set('source', source);
249
- this.revogrid.addTrimmed(newTrimmed, TRIMMED_GROUPING);
250
- }
251
- // get source based on proxy item collection to preserve rgRow order
252
- getSource(withoutGrouping = false) {
253
- const source = this.store.get('source');
254
- const items = this.store.get('proxyItems');
255
- let index = 0;
256
- // order important here, expected parent is first, then others
257
- return items.reduce((result, i) => {
258
- const model = source[i];
259
- if (!withoutGrouping) {
260
- result.source.push(model);
261
- return result;
262
- }
263
- // grouping filter
264
- if (column_service.isGrouping(model)) {
265
- if (model[column_service.GROUP_EXPANDED]) {
266
- result.prevExpanded[model[column_service.PSEUDO_GROUP_ITEM_VALUE]] = true;
267
- }
268
- }
269
- else {
270
- result.source.push(model);
271
- result.oldNewIndexes[i] = index;
272
- index++;
273
- }
274
- return result;
275
- }, {
276
- source: [],
277
- prevExpanded: {},
278
- oldNewIndexes: {},
279
- });
280
- }
281
- setColumnGrouping(cols) {
282
- // if 0 column as holder
283
- if (cols === null || cols === void 0 ? void 0 : cols.length) {
284
- cols[0][column_service.PSEUDO_GROUP_COLUMN] = true;
285
- return true;
286
- }
287
- return false;
288
- }
289
- setColumns({ columns }) {
290
- for (let type of column_drag_plugin.columnTypes) {
291
- if (this.setColumnGrouping(columns[type])) {
292
- break;
293
- }
294
- }
295
- }
296
- // evaluate drag between groups
297
- onDrag(e) {
298
- const { from, to } = e.detail;
299
- const isDown = to - from >= 0;
300
- const { source } = this.getSource();
301
- const items = this.rowItems;
302
- let i = isDown ? from : to;
303
- const end = isDown ? to : from;
304
- for (; i < end; i++) {
305
- const model = source[items[i]];
306
- const isGroup = column_service.isGrouping(model);
307
- if (isGroup) {
308
- e.preventDefault();
309
- return;
310
- }
311
- }
312
- }
313
- beforeTrimmedApply(trimmed, type) {
314
- /** Before filter apply remove grouping filtering */
315
- if (type === column_drag_plugin.FILTER_TRIMMED_TYPE) {
316
- const source = this.store.get('source');
317
- for (let index in trimmed) {
318
- if (trimmed[index] && column_service.isGrouping(source[index])) {
319
- trimmed[index] = false;
320
- }
321
- }
322
- }
323
- }
324
- // subscribe to grid events to process them accordingly
325
- subscribe() {
326
- /** if grouping present and new data source arrived */
327
- this.addEventListener('beforesourceset', ({ detail }) => this.onDataSet(detail));
328
- this.addEventListener('beforecolumnsset', ({ detail }) => this.setColumns(detail));
329
- /**
330
- * filter applied need to clear grouping and apply again
331
- * based on new results can be new grouping
332
- */
333
- this.addEventListener('beforetrimmed', ({ detail: { trimmed, trimmedType } }) => this.beforeTrimmedApply(trimmed, trimmedType));
334
- /**
335
- * sorting applied need to clear grouping and apply again
336
- * based on new results whole grouping order will changed
337
- */
338
- this.addEventListener('aftersortingapply', () => this.doSourceUpdate(Object.assign({}, this.options)));
339
- /**
340
- * Apply logic for focus inside of grouping
341
- * We can't focus on grouping rows, navigation only inside of groups for now
342
- */
343
- this.addEventListener('beforecellfocus', e => this.onFocus(e));
344
- /**
345
- * Prevent rgRow drag outside the group
346
- */
347
- this.addEventListener('roworderchanged', e => this.onDrag(e));
348
- /**
349
- * When grouping expand icon was clicked
350
- */
351
- this.addEventListener(column_service.GROUP_EXPAND_EVENT, ({ detail }) => this.onExpand(detail));
352
- }
353
- /**
354
- * Starts global source update with group clearing and applying new one
355
- * Initiated when need to reapply grouping
356
- */
357
- doSourceUpdate(options) {
358
- var _a;
359
- if (!this.hasProps) {
360
- return;
361
- }
362
- /**
363
- * Get source without grouping
364
- * @param newOldIndexMap - provides us mapping with new indexes vs old indexes, we would use it for trimmed mapping
365
- */
366
- const { source, prevExpanded, oldNewIndexes } = this.getSource(true);
367
- /**
368
- * Group again
369
- * @param oldNewIndexMap - provides us mapping with new indexes vs old indexes
370
- */
371
- const { sourceWithGroups, depth, trimmed, oldNewIndexMap, childrenByGroup, } = column_service.gatherGrouping(source, ((_a = this.options) === null || _a === void 0 ? void 0 : _a.props) || [], Object.assign({ prevExpanded }, options));
372
- // setup source
373
- this.providers.data.setData(sourceWithGroups, column_service.GROUPING_ROW_TYPE, this.revogrid.disableVirtualY, { depth, customRenderer: options === null || options === void 0 ? void 0 : options.groupLabelTemplate }, true);
374
- this.updateTrimmed(trimmed, childrenByGroup, oldNewIndexes !== null && oldNewIndexes !== void 0 ? oldNewIndexes : {}, oldNewIndexMap);
375
- }
376
- /**
377
- * Apply grouping on data set
378
- * Clear grouping from source
379
- * If source came from other plugin
380
- */
381
- onDataSet(data) {
382
- var _a;
383
- if (!this.hasProps || !(data === null || data === void 0 ? void 0 : data.source) || !data.source.length) {
384
- return;
385
- }
386
- const source = data.source.filter(s => !column_service.isGrouping(s));
387
- const expanded = this.revogrid.grouping || {};
388
- const { sourceWithGroups, depth, trimmed, oldNewIndexMap, childrenByGroup, } = column_service.gatherGrouping(source, ((_a = this.options) === null || _a === void 0 ? void 0 : _a.props) || [], Object.assign({}, (expanded || {})));
389
- data.source = sourceWithGroups;
390
- this.providers.data.setGrouping({ depth });
391
- this.updateTrimmed(trimmed, childrenByGroup, oldNewIndexMap);
392
- }
393
- // apply grouping
394
- setGrouping(options) {
395
- // unsubscribe from all events when group applied
396
- this.clearSubscriptions();
397
- this.options = options;
398
- // clear props, no grouping exists
399
- if (!options.props || !Object.keys(options.props).length) {
400
- this.clearGrouping();
401
- return;
402
- }
403
- // props exist and source inited
404
- const { source } = this.getSource();
405
- if (source.length) {
406
- this.doSourceUpdate(Object.assign({}, options));
407
- }
408
- // props exist and columns inited
409
- for (let t of column_drag_plugin.columnTypes) {
410
- if (this.setColumnGrouping(this.providers.column.getColumns(t))) {
411
- this.providers.column.refreshByType(t);
412
- break;
413
- }
414
- }
415
- // if has any grouping subscribe to events again
416
- this.subscribe();
417
- }
418
- // clear grouping
419
- clearGrouping() {
420
- // clear columns
421
- column_drag_plugin.columnTypes.forEach(t => {
422
- const cols = this.providers.column.getColumns(t);
423
- let deleted = false;
424
- cols.forEach(c => {
425
- if (column_service.isGroupingColumn(c)) {
426
- delete c[column_service.PSEUDO_GROUP_COLUMN];
427
- deleted = true;
428
- }
429
- });
430
- // if column store had grouping clear and refresh
431
- if (deleted) {
432
- this.providers.column.refreshByType(t);
433
- }
434
- });
435
- // clear rows
436
- const { source, oldNewIndexes } = this.getSource(true);
437
- this.providers.data.setData(source, column_service.GROUPING_ROW_TYPE, this.revogrid.disableVirtualY, undefined, true);
438
- this.updateTrimmed(undefined, undefined, oldNewIndexes);
439
- }
440
- updateTrimmed(trimmedGroup = {}, _childrenByGroup = {}, firstLevelMap = {}, secondLevelMap) {
441
- // map previously trimmed data
442
- const trimemedOptionsToUpgrade = processDoubleConversionTrimmed(this.trimmed, firstLevelMap, secondLevelMap);
443
- for (let type in trimemedOptionsToUpgrade) {
444
- this.revogrid.addTrimmed(trimemedOptionsToUpgrade[type], type);
445
- }
446
- // const emptyGroups = this.filterOutEmptyGroups(trimemedOptionsToUpgrade, childrenByGroup);
447
- // setup trimmed data for grouping
448
- this.revogrid.addTrimmed(Object.assign({}, trimmedGroup), TRIMMED_GROUPING);
449
- }
450
- }
451
-
452
- /** `Object#toString` result references. */
453
- var stringTag = '[object String]';
454
-
455
- /**
456
- * Checks if `value` is classified as a `String` primitive or object.
457
- *
458
- * @static
459
- * @since 0.1.0
460
- * @memberOf _
461
- * @category Lang
462
- * @param {*} value The value to check.
463
- * @returns {boolean} Returns `true` if `value` is a string, else `false`.
464
- * @example
465
- *
466
- * _.isString('abc');
467
- * // => true
468
- *
469
- * _.isString(1);
470
- * // => false
471
- */
472
- function isString(value) {
473
- return typeof value == 'string' ||
474
- (!column_service.isArray(value) && debounce.isObjectLike(value) && debounce.baseGetTag(value) == stringTag);
475
- }
476
-
477
- /**
478
- * Gets the size of an ASCII `string`.
479
- *
480
- * @private
481
- * @param {string} string The string inspect.
482
- * @returns {number} Returns the string size.
483
- */
484
- var asciiSize = column_service.baseProperty('length');
485
-
486
- const asciiSize$1 = asciiSize;
487
-
488
- /** Used to compose unicode character classes. */
489
- var rsAstralRange$1 = '\\ud800-\\udfff',
490
- rsComboMarksRange$1 = '\\u0300-\\u036f',
491
- reComboHalfMarksRange$1 = '\\ufe20-\\ufe2f',
492
- rsComboSymbolsRange$1 = '\\u20d0-\\u20ff',
493
- rsComboRange$1 = rsComboMarksRange$1 + reComboHalfMarksRange$1 + rsComboSymbolsRange$1,
494
- rsVarRange$1 = '\\ufe0e\\ufe0f';
495
-
496
- /** Used to compose unicode capture groups. */
497
- var rsZWJ$1 = '\\u200d';
498
-
499
- /** Used to detect strings with [zero-width joiners or code points from the astral planes](http://eev.ee/blog/2015/09/12/dark-corners-of-unicode/). */
500
- var reHasUnicode = RegExp('[' + rsZWJ$1 + rsAstralRange$1 + rsComboRange$1 + rsVarRange$1 + ']');
501
-
502
- /**
503
- * Checks if `string` contains Unicode symbols.
504
- *
505
- * @private
506
- * @param {string} string The string to inspect.
507
- * @returns {boolean} Returns `true` if a symbol is found, else `false`.
508
- */
509
- function hasUnicode(string) {
510
- return reHasUnicode.test(string);
511
- }
512
-
513
- /** Used to compose unicode character classes. */
514
- var rsAstralRange = '\\ud800-\\udfff',
515
- rsComboMarksRange = '\\u0300-\\u036f',
516
- reComboHalfMarksRange = '\\ufe20-\\ufe2f',
517
- rsComboSymbolsRange = '\\u20d0-\\u20ff',
518
- rsComboRange = rsComboMarksRange + reComboHalfMarksRange + rsComboSymbolsRange,
519
- rsVarRange = '\\ufe0e\\ufe0f';
520
-
521
- /** Used to compose unicode capture groups. */
522
- var rsAstral = '[' + rsAstralRange + ']',
523
- rsCombo = '[' + rsComboRange + ']',
524
- rsFitz = '\\ud83c[\\udffb-\\udfff]',
525
- rsModifier = '(?:' + rsCombo + '|' + rsFitz + ')',
526
- rsNonAstral = '[^' + rsAstralRange + ']',
527
- rsRegional = '(?:\\ud83c[\\udde6-\\uddff]){2}',
528
- rsSurrPair = '[\\ud800-\\udbff][\\udc00-\\udfff]',
529
- rsZWJ = '\\u200d';
530
-
531
- /** Used to compose unicode regexes. */
532
- var reOptMod = rsModifier + '?',
533
- rsOptVar = '[' + rsVarRange + ']?',
534
- rsOptJoin = '(?:' + rsZWJ + '(?:' + [rsNonAstral, rsRegional, rsSurrPair].join('|') + ')' + rsOptVar + reOptMod + ')*',
535
- rsSeq = rsOptVar + reOptMod + rsOptJoin,
536
- rsSymbol = '(?:' + [rsNonAstral + rsCombo + '?', rsCombo, rsRegional, rsSurrPair, rsAstral].join('|') + ')';
537
-
538
- /** Used to match [string symbols](https://mathiasbynens.be/notes/javascript-unicode). */
539
- var reUnicode = RegExp(rsFitz + '(?=' + rsFitz + ')|' + rsSymbol + rsSeq, 'g');
540
-
541
- /**
542
- * Gets the size of a Unicode `string`.
543
- *
544
- * @private
545
- * @param {string} string The string inspect.
546
- * @returns {number} Returns the string size.
547
- */
548
- function unicodeSize(string) {
549
- var result = reUnicode.lastIndex = 0;
550
- while (reUnicode.test(string)) {
551
- ++result;
552
- }
553
- return result;
554
- }
555
-
556
- /**
557
- * Gets the number of symbols in `string`.
558
- *
559
- * @private
560
- * @param {string} string The string to inspect.
561
- * @returns {number} Returns the string size.
562
- */
563
- function stringSize(string) {
564
- return hasUnicode(string)
565
- ? unicodeSize(string)
566
- : asciiSize$1(string);
567
- }
568
-
569
- /** `Object#toString` result references. */
570
- var mapTag = '[object Map]',
571
- setTag = '[object Set]';
572
-
573
- /**
574
- * Gets the size of `collection` by returning its length for array-like
575
- * values or the number of own enumerable string keyed properties for objects.
576
- *
577
- * @static
578
- * @memberOf _
579
- * @since 0.1.0
580
- * @category Collection
581
- * @param {Array|Object|string} collection The collection to inspect.
582
- * @returns {number} Returns the collection size.
583
- * @example
584
- *
585
- * _.size([1, 2, 3]);
586
- * // => 3
587
- *
588
- * _.size({ 'a': 1, 'b': 2 });
589
- * // => 2
590
- *
591
- * _.size('pebbles');
592
- * // => 7
593
- */
594
- function size(collection) {
595
- if (collection == null) {
596
- return 0;
597
- }
598
- if (column_service.isArrayLike(collection)) {
599
- return isString(collection) ? stringSize(collection) : collection.length;
600
- }
601
- var tag = column_service.getTag(collection);
602
- if (tag == mapTag || tag == setTag) {
603
- return collection.size;
604
- }
605
- return column_service.baseKeys(collection).length;
606
- }
607
-
608
- /**
609
- * Lifecycle
610
- * 1. @event `beforesorting` - Triggered when sorting just starts. Nothing has happened yet. This can be triggered from a column or from the source. If the type is from rows, the column will be undefined.
611
- * 2. @method `updateColumnSorting` - Updates the column sorting icon on the grid and the column itself, but the data remains untouched.
612
- * 3. @event `beforesortingapply` - Triggered before the sorting data is applied to the data source. You can prevent this event, and the data will not be sorted. This event is only called from a column sorting click.
613
- * 4. @event `aftersortingapply` - Triggered after sorting has been applied and completed. This event occurs for both row and column sorting.
614
- *
615
- * Note: If you prevent an event, it will not proceed to the subsequent steps.
616
- */
617
- class SortingPlugin extends column_drag_plugin.BasePlugin {
618
- runSorting(order, comparison) {
619
- var _a;
620
- this.sort(order, comparison);
621
- (_a = this.sortingPromise) === null || _a === void 0 ? void 0 : _a.call(this);
622
- this.sortingPromise = null;
623
- }
624
- constructor(revogrid, providers) {
625
- super(revogrid, providers);
626
- this.revogrid = revogrid;
627
- this.sortingPromise = null;
628
- this.postponeSort = debounce.debounce((order, comparison) => this.runSorting(order, comparison), 50);
629
- const beforeanysource = ({ detail: { type }, }) => {
630
- // if sorting was provided - sort data
631
- if (!!this.sorting && this.sortingFunc) {
632
- const beforeEvent = this.emit('beforesorting', { type });
633
- if (beforeEvent.defaultPrevented) {
634
- return;
635
- }
636
- this.startSorting(this.sorting, this.sortingFunc);
637
- }
638
- };
639
- const aftercolumnsset = ({ detail: { order }, }) => {
640
- const columns = this.providers.column.getColumns();
641
- const sortingFunc = {};
642
- for (let prop in order) {
643
- const cmp = this.getComparer(column_service.getColumnByProp(columns, prop), order[prop]);
644
- sortingFunc[prop] = cmp;
645
- }
646
- this.runSorting(order, sortingFunc);
647
- };
648
- const headerclick = (e) => {
649
- var _a, _b;
650
- if (e.defaultPrevented) {
651
- return;
652
- }
653
- if (!e.detail.column.sortable) {
654
- return;
655
- }
656
- this.headerclick(e.detail.column, e.detail.index, (_b = (_a = e.detail) === null || _a === void 0 ? void 0 : _a.originalEvent) === null || _b === void 0 ? void 0 : _b.shiftKey);
657
- };
658
- this.addEventListener('beforeanysource', beforeanysource);
659
- this.addEventListener('aftercolumnsset', aftercolumnsset);
660
- this.addEventListener('beforeheaderclick', headerclick);
661
- }
662
- startSorting(order, sortingFunc) {
663
- if (!this.sortingPromise) {
664
- this.revogrid.jobsBeforeRender.push(new Promise(resolve => {
665
- this.sortingPromise = resolve;
666
- }));
667
- }
668
- this.postponeSort(order, sortingFunc);
669
- }
670
- getComparer(column, order) {
671
- var _a;
672
- const cellCmp = ((_a = column === null || column === void 0 ? void 0 : column.cellCompare) === null || _a === void 0 ? void 0 : _a.bind({ order })) || this.defaultCellCompare;
673
- if (order == 'asc') {
674
- return cellCmp;
675
- }
676
- if (order == 'desc') {
677
- return this.descCellCompare(cellCmp);
678
- }
679
- return undefined;
680
- }
681
- /**
682
- * Apply sorting to data on header click
683
- * If additive - add to existing sorting, multiple columns can be sorted
684
- */
685
- headerclick(column, index, additive) {
686
- var _a, _b;
687
- let order = this.getNextOrder(column.order);
688
- const beforeEvent = this.emit('beforesorting', { column, order, additive });
689
- if (beforeEvent.defaultPrevented) {
690
- return;
691
- }
692
- order = beforeEvent.detail.order;
693
- const newCol = this.providers.column.updateColumnSorting(beforeEvent.detail.column, index, order, additive);
694
- // apply sort data
695
- const beforeApplyEvent = this.emit('beforesortingapply', {
696
- column: newCol,
697
- order,
698
- additive,
699
- });
700
- if (beforeApplyEvent.defaultPrevented) {
701
- return;
702
- }
703
- order = beforeApplyEvent.detail.order;
704
- const cmp = this.getComparer(column, order);
705
- if (additive && this.sorting) {
706
- const sorting = {};
707
- const sortingFunc = {};
708
- this.sorting = Object.assign(Object.assign({}, this.sorting), sorting);
709
- // extend sorting function with new sorting for multiple columns sorting
710
- this.sortingFunc = Object.assign(Object.assign({}, this.sortingFunc), sortingFunc);
711
- if (column.prop in sorting && size(sorting) > 1 && order === undefined) {
712
- delete sorting[column.prop];
713
- delete sortingFunc[column.prop];
714
- }
715
- else {
716
- sorting[column.prop] = order;
717
- sortingFunc[column.prop] = cmp;
718
- }
719
- }
720
- else {
721
- if (order) {
722
- // reset sorting
723
- this.sorting = { [column.prop]: order };
724
- this.sortingFunc = { [column.prop]: cmp };
725
- }
726
- else {
727
- (_a = this.sorting) === null || _a === void 0 ? true : delete _a[column.prop];
728
- (_b = this.sortingFunc) === null || _b === void 0 ? true : delete _b[column.prop];
729
- }
730
- }
731
- this.startSorting(this.sorting, this.sortingFunc);
732
- }
733
- /**
734
- * Sort items by sorting function
735
- * @requires proxyItems applied to row store
736
- * @requires source applied to row store
737
- *
738
- * @param sorting - per column sorting
739
- * @param data - this.stores['rgRow'].store.get('source')
740
- */
741
- sort(sorting, sortingFunc, types = column_drag_plugin.rowTypes) {
742
- // if no sorting - reset
743
- if (!size(sorting)) {
744
- this.sorting = undefined;
745
- this.sortingFunc = undefined;
746
- for (let type of types) {
747
- const storeService = this.providers.data.stores[type];
748
- // row data
749
- const source = storeService.store.get('source');
750
- // row indexes
751
- const proxyItems = storeService.store.get('proxyItems');
752
- // row indexes
753
- const newItemsOrder = storeService.store.get('items'); // recover indexes range(0, source.length)
754
- this.providers.dimension.updateSizesPositionByNewDataIndexes(type, newItemsOrder, proxyItems);
755
- storeService.setData({ proxyItems: newItemsOrder, source: [...source] });
756
- }
757
- }
758
- else {
759
- // set sorting
760
- this.sorting = sorting;
761
- this.sortingFunc = sortingFunc;
762
- for (let type of types) {
763
- const storeService = this.providers.data.stores[type];
764
- // row data
765
- const source = storeService.store.get('source');
766
- // row indexes
767
- const proxyItems = storeService.store.get('proxyItems');
768
- const newItemsOrder = this.sortIndexByItems([...proxyItems], source, sortingFunc);
769
- this.providers.dimension.updateSizesPositionByNewDataIndexes(type, newItemsOrder, proxyItems);
770
- storeService.setData({
771
- proxyItems: newItemsOrder,
772
- source: [...source],
773
- });
774
- }
775
- }
776
- this.emit('aftersortingapply');
777
- }
778
- defaultCellCompare(prop, a, b) {
779
- var _a, _b;
780
- const av = (_a = a === null || a === void 0 ? void 0 : a[prop]) === null || _a === void 0 ? void 0 : _a.toString().toLowerCase();
781
- const bv = (_b = b === null || b === void 0 ? void 0 : b[prop]) === null || _b === void 0 ? void 0 : _b.toString().toLowerCase();
782
- return av == bv ? 0 : av > bv ? 1 : -1;
783
- }
784
- descCellCompare(cmp) {
785
- return (prop, a, b) => {
786
- return -1 * cmp(prop, a, b);
787
- };
788
- }
789
- sortIndexByItems(indexes, source, sortingFunc = {}) {
790
- // if no sorting - return unsorted indexes
791
- if (Object.entries(sortingFunc).length === 0) {
792
- // Unsorted indexes
793
- return [...Array(indexes.length).keys()];
794
- }
795
- //
796
- /**
797
- * go through all indexes and align in new order
798
- * performs a multi-level sorting by applying multiple comparison functions to determine the order of the items based on different properties.
799
- */
800
- return indexes.sort((a, b) => {
801
- for (const [prop, cmp] of Object.entries(sortingFunc)) {
802
- const itemA = source[a];
803
- const itemB = source[b];
804
- /**
805
- * If the comparison function returns a non-zero value (sorted), it means that the items should be sorted based on the given property. In such a case, the function immediately returns the sorted value, indicating the order in which the items should be arranged.
806
- * If none of the comparison functions result in a non-zero value, indicating that the items are equal or should remain in the same order, the function eventually returns 0.
807
- */
808
- const sorted = cmp === null || cmp === void 0 ? void 0 : cmp(prop, itemA, itemB);
809
- if (sorted) {
810
- return sorted;
811
- }
812
- }
813
- return 0;
814
- });
815
- }
816
- getNextOrder(currentOrder) {
817
- switch (currentOrder) {
818
- case undefined:
819
- return 'asc';
820
- case 'asc':
821
- return 'desc';
822
- case 'desc':
823
- return undefined;
824
- }
825
- }
826
- }
827
-
828
84
  class ColumnDataProvider {
829
85
  get order() {
830
86
  const order = {};
@@ -843,15 +99,15 @@ class ColumnDataProvider {
843
99
  this.sorting = null;
844
100
  this.collection = null;
845
101
  this.dataSources = column_drag_plugin.columnTypes.reduce((sources, k) => {
846
- sources[k] = new column_service.DataStore(k);
102
+ sources[k] = new dimension_helpers.DataStore(k);
847
103
  return sources;
848
104
  }, {});
849
105
  }
850
- column(c, pin) {
851
- return this.getColumn(c, pin || 'rgCol');
106
+ column(c, type = 'rgCol') {
107
+ return this.getColumn(c, type);
852
108
  }
853
109
  getColumn(virtualIndex, type) {
854
- return column_service.getSourceItem(this.dataSources[type].store, virtualIndex);
110
+ return dimension_helpers.getSourceItem(this.dataSources[type].store, virtualIndex);
855
111
  }
856
112
  getRawColumns() {
857
113
  return column_service.reduce(this.dataSources, (result, item, type) => {
@@ -871,7 +127,7 @@ class ColumnDataProvider {
871
127
  return column_drag_plugin.columnTypes.reduce((r, t) => [...r, ...columnsByType[t]], []);
872
128
  }
873
129
  getColumnIndexByProp(prop, type) {
874
- return column_service.getSourceItemVirtualIndexByProp(this.dataSources[type].store, prop);
130
+ return dimension_helpers.getSourceItemVirtualIndexByProp(this.dataSources[type].store, prop);
875
131
  }
876
132
  getColumnByProp(prop) {
877
133
  var _a;
@@ -880,6 +136,9 @@ class ColumnDataProvider {
880
136
  refreshByType(type) {
881
137
  this.dataSources[type].refresh();
882
138
  }
139
+ /**
140
+ * Main method to set columns
141
+ */
883
142
  setColumns(data) {
884
143
  column_drag_plugin.columnTypes.forEach(k => {
885
144
  // set columns data
@@ -938,12 +197,12 @@ class ColumnDataProvider {
938
197
  continue;
939
198
  }
940
199
  const type = t;
941
- column_service.setSourceByPhysicalIndex(this.dataSources[type].store, colByIndex[type] || {});
200
+ dimension_helpers.setSourceByPhysicalIndex(this.dataSources[type].store, colByIndex[type] || {});
942
201
  }
943
202
  }
944
203
  updateColumn(column, index) {
945
204
  const type = column_service.getColumnType(column);
946
- column_service.setSourceByVirtualIndex(this.dataSources[type].store, { [index]: column });
205
+ dimension_helpers.setSourceByVirtualIndex(this.dataSources[type].store, { [index]: column });
947
206
  }
948
207
  updateColumnSorting(column, index, sorting, additive) {
949
208
  if (!additive) {
@@ -974,12 +233,14 @@ class ColumnDataProvider {
974
233
 
975
234
  /**
976
235
  * Data source provider
236
+ *
237
+ * @dependsOn DimensionProvider
977
238
  */
978
239
  class DataProvider {
979
240
  constructor(dimensionProvider) {
980
241
  this.dimensionProvider = dimensionProvider;
981
242
  this.stores = column_service.reduce(column_drag_plugin.rowTypes, (sources, k) => {
982
- sources[k] = new column_service.DataStore(k);
243
+ sources[k] = new dimension_helpers.DataStore(k);
983
244
  return sources;
984
245
  }, {});
985
246
  }
@@ -993,16 +254,25 @@ class DataProvider {
993
254
  }
994
255
  getModel(virtualIndex, type = 'rgRow') {
995
256
  const store = this.stores[type].store;
996
- return column_service.getSourceItem(store, virtualIndex);
257
+ return dimension_helpers.getSourceItem(store, virtualIndex);
997
258
  }
998
259
  changeOrder({ rowType = 'rgRow', from, to }) {
999
- const service = this.stores[rowType];
1000
- const items = [...service.store.get('items')];
1001
- const prevItems = [...items];
1002
- const toMove = items.splice(from, 1);
1003
- items.splice(to, 0, ...toMove);
1004
- this.dimensionProvider.updateSizesPositionByNewDataIndexes(rowType, items, prevItems);
1005
- service.setData({ items });
260
+ const storeService = this.stores[rowType];
261
+ // take currently visible row indexes
262
+ const newItemsOrder = [...storeService.store.get('proxyItems')];
263
+ const prevItems = storeService.store.get('items');
264
+ // take out
265
+ const toMove = newItemsOrder.splice(newItemsOrder.indexOf(prevItems[from]), // get index in proxy
266
+ 1);
267
+ // insert before
268
+ newItemsOrder.splice(newItemsOrder.indexOf(prevItems[to]), // get index in proxy
269
+ 0, ...toMove);
270
+ storeService.setData({
271
+ proxyItems: newItemsOrder,
272
+ });
273
+ // take currently visible row indexes
274
+ const newItems = storeService.store.get('items');
275
+ this.dimensionProvider.updateSizesPositionByNewDataIndexes(rowType, newItems, prevItems);
1006
276
  }
1007
277
  setCellData({ type, rowIndex, prop, val }, mutate = true) {
1008
278
  const model = this.getModel(rowIndex, type);
@@ -1012,7 +282,7 @@ class DataProvider {
1012
282
  setRangeData(data, type) {
1013
283
  const items = {};
1014
284
  for (let rowIndex in data) {
1015
- const oldModel = (items[rowIndex] = column_service.getSourceItem(this.stores[type].store, parseInt(rowIndex, 10)));
285
+ const oldModel = (items[rowIndex] = dimension_helpers.getSourceItem(this.stores[type].store, parseInt(rowIndex, 10)));
1016
286
  if (!oldModel) {
1017
287
  continue;
1018
288
  }
@@ -1040,7 +310,7 @@ class DataProvider {
1040
310
  store.addTrimmed(trimmed);
1041
311
  this.dimensionProvider.setTrimmed(trimmed, type);
1042
312
  if (type === 'rgRow') {
1043
- this.dimensionProvider.setData(column_service.getVisibleSourceItem(store.store).length, type);
313
+ this.dimensionProvider.setData(dimension_helpers.getVisibleSourceItem(store.store).length, type);
1044
314
  }
1045
315
  }
1046
316
  }
@@ -1048,11 +318,13 @@ class DataProvider {
1048
318
  /**
1049
319
  * Dimension provider
1050
320
  * Stores dimension information and custom sizes
321
+ *
322
+ * @dependsOn ViewportProvider
1051
323
  */
1052
324
  class DimensionProvider {
1053
325
  constructor(viewports, config) {
1054
326
  this.viewports = viewports;
1055
- const sizeChanged = debounce.debounce((k) => config.realSizeChanged(k), index.RESIZE_INTERVAL);
327
+ const sizeChanged = debounce.debounce((k) => config.realSizeChanged(k), dimension_helpers.RESIZE_INTERVAL);
1056
328
  this.stores = column_service.reduce([...column_drag_plugin.rowTypes, ...column_drag_plugin.columnTypes], (sources, t) => {
1057
329
  sources[t] = new column_drag_plugin.DimensionStore(t);
1058
330
  sources[t].store.onChange('realSize', () => sizeChanged(t));
@@ -1083,7 +355,11 @@ class DimensionProvider {
1083
355
  newSizes = Object.assign(Object.assign({}, oldSizes), sizes);
1084
356
  }
1085
357
  this.stores[type].setDimensionSize(newSizes);
1086
- this.updateViewport(type, true);
358
+ this.setViewPortCoordinate({
359
+ coordinate: this.viewports.stores[type].lastCoordinate,
360
+ type,
361
+ force: true,
362
+ });
1087
363
  }
1088
364
  setItemCount(realCount, type) {
1089
365
  this.viewports.stores[type].setViewport({ realCount });
@@ -1095,13 +371,17 @@ class DimensionProvider {
1095
371
  * @param type
1096
372
  */
1097
373
  setTrimmed(trimmed, type) {
1098
- const allTrimmed = column_service.gatherTrimmedItems(trimmed);
374
+ const allTrimmed = dimension_helpers.gatherTrimmedItems(trimmed);
1099
375
  const dimStoreType = this.stores[type];
1100
376
  dimStoreType.setStore({ trimmed: allTrimmed });
1101
- this.updateViewport(type, true);
377
+ this.setViewPortCoordinate({
378
+ coordinate: this.viewports.stores[type].lastCoordinate,
379
+ type,
380
+ force: true,
381
+ });
1102
382
  }
1103
383
  /**
1104
- * Sets dimension data and view port coordinate
384
+ * Sets dimension data and viewport coordinate
1105
385
  * @param itemCount
1106
386
  * @param type - dimension type
1107
387
  * @param noVirtual - disable virtual data
@@ -1115,18 +395,23 @@ class DimensionProvider {
1115
395
  virtualSize: dimension.realSize,
1116
396
  });
1117
397
  }
1118
- this.updateViewport(type);
398
+ this.setViewPortCoordinate({
399
+ coordinate: this.viewports.stores[type].lastCoordinate,
400
+ type,
401
+ });
1119
402
  }
1120
403
  /**
1121
404
  * Applies new columns to the dimension provider
1122
405
  * @param columns - new columns data
1123
406
  * @param disableVirtualX - disable virtual data for X axis
1124
407
  */
1125
- applyNewColumns(columns, disableVirtualX) {
408
+ applyNewColumns(columns, disableVirtualX, keepOld = false) {
1126
409
  // Apply new columns to dimension provider
1127
410
  for (let type of column_drag_plugin.columnTypes) {
1128
- // Clear existing data in the dimension provider
1129
- this.stores[type].drop();
411
+ if (!keepOld) {
412
+ // Clear existing data in the dimension provider
413
+ this.stores[type].drop();
414
+ }
1130
415
  // Get the new columns for the current type
1131
416
  const items = columns[type];
1132
417
  // Determine if virtual data should be disabled for the current type
@@ -1153,6 +438,10 @@ class DimensionProvider {
1153
438
  });
1154
439
  }
1155
440
  }
441
+ /**
442
+ * Gets the full size of the grid by summing up the sizes of all dimensions
443
+ * Goes through all dimensions columnTypes (x) and rowTypes (y) and sums up their sizes
444
+ */
1156
445
  getFullSize() {
1157
446
  var _a, _b;
1158
447
  let x = 0;
@@ -1165,20 +454,13 @@ class DimensionProvider {
1165
454
  }
1166
455
  return { y, x };
1167
456
  }
1168
- updateViewport(type, force = false) {
1169
- this.setViewPortCoordinate({
1170
- coordinate: this.viewports.stores[type].lastCoordinate,
1171
- type,
1172
- force,
1173
- });
1174
- }
1175
457
  setViewPortCoordinate({ coordinate, type, force = false, }) {
1176
458
  const dimension = this.stores[type].getCurrentState();
1177
459
  this.viewports.stores[type].setViewPortCoordinate(coordinate, dimension, force);
1178
460
  }
1179
461
  getViewPortPos(e) {
1180
462
  const dimension = this.stores[e.dimension].getCurrentState();
1181
- const item = index.getItemByIndex(dimension, e.coordinate);
463
+ const item = dimension_helpers.getItemByIndex(dimension, e.coordinate);
1182
464
  return item.start;
1183
465
  }
1184
466
  setSettings(data, dimensionType) {
@@ -1197,32 +479,19 @@ class DimensionProvider {
1197
479
  }
1198
480
  updateSizesPositionByNewDataIndexes(type, newItemsOrder, prevItemsOrder = []) {
1199
481
  // Move custom sizes to new order
1200
- const dimService = this.stores[type];
1201
- const customSizes = Object.assign({}, dimService.store.get('sizes'));
1202
- if (Object.keys(customSizes).length) {
1203
- const originalIndices = new Map();
1204
- prevItemsOrder.forEach((value, index) => {
1205
- originalIndices.set(value, index);
1206
- });
1207
- const newSizes = {};
1208
- newItemsOrder.forEach((value, newIndex) => {
1209
- const originalIndex = originalIndices.get(value);
1210
- if (originalIndex !== newIndex && customSizes[originalIndex]) {
1211
- newSizes[newIndex] = customSizes[originalIndex];
1212
- delete customSizes[originalIndex];
1213
- }
1214
- });
1215
- if (Object.keys(newSizes).length) {
1216
- this.setCustomSizes(type, Object.assign(Object.assign({}, customSizes), newSizes));
1217
- }
1218
- }
482
+ this.stores[type].updateSizesPositionByIndexes(newItemsOrder, prevItemsOrder);
483
+ this.setViewPortCoordinate({
484
+ coordinate: this.viewports.stores[type].lastCoordinate,
485
+ type,
486
+ force: true,
487
+ });
1219
488
  }
1220
489
  }
1221
490
 
1222
491
  class ViewportProvider {
1223
492
  constructor() {
1224
493
  this.stores = column_service.reduce([...column_drag_plugin.rowTypes, ...column_drag_plugin.columnTypes], (sources, k) => {
1225
- sources[k] = new rowHeaderUtils.ViewportStore(k);
494
+ sources[k] = new viewport_store.ViewportStore(k);
1226
495
  return sources;
1227
496
  }, {});
1228
497
  }
@@ -1246,7 +515,7 @@ function gatherColumnData(data) {
1246
515
  style: data.fixWidth ? { minWidth: `${realWidth}px` } : undefined,
1247
516
  };
1248
517
  const headerProp = {
1249
- colData: column_service.getVisibleSourceItem(data.colStore),
518
+ colData: dimension_helpers.getVisibleSourceItem(data.colStore),
1250
519
  dimensionCol: colDimension,
1251
520
  type: data.colType,
1252
521
  groups: data.colStore.get('groups'),
@@ -1292,15 +561,15 @@ class ViewportService {
1292
561
  if (val === 'rgCol') {
1293
562
  column.onResizeviewport = (e) => {
1294
563
  var _a;
1295
- if (config.disableVirtualY && e.detail.dimension === 'rgRow') {
1296
- return;
1297
- }
1298
- else if (config.disableVirtualX && e.detail.dimension === 'rgCol') {
1299
- return;
564
+ const vpState = {
565
+ clientSize: e.detail.size,
566
+ };
567
+ // virtual size will be handled by dimension provider if disabled
568
+ if ((e.detail.dimension === 'rgRow' && !config.disableVirtualY)
569
+ || (e.detail.dimension === 'rgCol' && !config.disableVirtualX)) {
570
+ vpState.virtualSize = e.detail.size;
1300
571
  }
1301
- (_a = config.viewportProvider) === null || _a === void 0 ? void 0 : _a.setViewport(e.detail.dimension, {
1302
- virtualSize: e.detail.size,
1303
- });
572
+ (_a = config.viewportProvider) === null || _a === void 0 ? void 0 : _a.setViewport(e.detail.dimension, vpState);
1304
573
  };
1305
574
  }
1306
575
  const colData = gatherColumnData(column);
@@ -1312,7 +581,7 @@ class ViewportService {
1312
581
  segmentSelection.setLastCell(rgRow.lastCell);
1313
582
  // register selection store for Row
1314
583
  const rowSelectionStore = this.registerRow(rgRow.position.y, rgRow.type);
1315
- const rowDef = Object.assign(Object.assign({ colType: val }, rgRow), { rowSelectionStore, segmentSelectionStore: segmentSelection.store, ref: (e) => config.selectionStoreConnector.registerSection(e), onSetrange: e => {
584
+ const rowDef = Object.assign(Object.assign({ colType: val }, rgRow), { rowSelectionStore, selectionStore: segmentSelection.store, ref: (e) => config.selectionStoreConnector.registerSection(e), onSetrange: e => {
1316
585
  segmentSelection.setRangeArea(e.detail);
1317
586
  }, onSettemprange: e => segmentSelection.setTempArea(e.detail), onFocuscell: e => {
1318
587
  // todo: multi focus
@@ -1338,7 +607,7 @@ class ViewportService {
1338
607
  const changedItems = {};
1339
608
  for (const [i, size] of Object.entries(detail || {})) {
1340
609
  const virtualIndex = parseInt(i, 10);
1341
- const item = column_service.getSourceItem(store, virtualIndex);
610
+ const item = dimension_helpers.getSourceItem(store, virtualIndex);
1342
611
  if (item) {
1343
612
  changedItems[virtualIndex] = Object.assign(Object.assign({}, item), { size });
1344
613
  }
@@ -1577,11 +846,11 @@ class OrdererService {
1577
846
  const OrderRenderer = ({ ref }) => {
1578
847
  const service = new OrdererService();
1579
848
  ref(service);
1580
- return (index$1.h("div", { class: "draggable-wrapper hidden", ref: e => (service.el = e) },
1581
- index$1.h("div", { class: "draggable", ref: el => (service.draggable = el) },
1582
- index$1.h("span", { class: "revo-alt-icon" }),
1583
- index$1.h("span", { ref: e => (service.text = e) })),
1584
- index$1.h("div", { class: "drag-position", ref: e => (service.rgRow = e) })));
849
+ return (index.h("div", { class: "draggable-wrapper hidden", ref: e => (service.el = e) },
850
+ index.h("div", { class: "draggable", ref: el => (service.draggable = el) },
851
+ index.h("span", { class: "revo-alt-icon" }),
852
+ index.h("span", { ref: e => (service.text = e) })),
853
+ index.h("div", { class: "drag-position", ref: e => (service.rgRow = e) })));
1585
854
  };
1586
855
 
1587
856
  const rowDefinitionByType = (newVal = []) => {
@@ -1699,57 +968,134 @@ class WCAGPlugin extends column_drag_plugin.BasePlugin {
1699
968
  }
1700
969
  }
1701
970
 
1702
- const revoGridStyleCss = ".revo-drag-icon{width:11px;opacity:0.8}.revo-drag-icon::before{content:\"::\"}.revo-alt-icon{-webkit-mask-image:url(\"data:image/svg+xml,%3C%3Fxml version='1.0' encoding='UTF-8'%3F%3E%3Csvg viewBox='0 0 384 383' xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink'%3E%3Cg%3E%3Cpath d='M192.4375,383 C197.424479,383 201.663411,381.254557 205.154297,377.763672 L205.154297,377.763672 L264.25,318.667969 C270.234375,312.683594 271.605794,306.075846 268.364258,298.844727 C265.122721,291.613607 259.51237,287.998047 251.533203,287.998047 L251.533203,287.998047 L213.382812,287.998047 L213.382812,212.445312 L288.935547,212.445312 L288.935547,250.595703 C288.935547,258.57487 292.551107,264.185221 299.782227,267.426758 C307.013346,270.668294 313.621094,269.296875 319.605469,263.3125 L319.605469,263.3125 L378.701172,204.216797 C382.192057,200.725911 383.9375,196.486979 383.9375,191.5 C383.9375,186.513021 382.192057,182.274089 378.701172,178.783203 L378.701172,178.783203 L319.605469,119.6875 C313.621094,114.201823 307.013346,112.955078 299.782227,115.947266 C292.551107,118.939453 288.935547,124.42513 288.935547,132.404297 L288.935547,132.404297 L288.935547,170.554688 L213.382812,170.554688 L213.382812,95.0019531 L251.533203,95.0019531 C259.51237,95.0019531 264.998047,91.3863932 267.990234,84.1552734 C270.982422,76.9241536 269.735677,70.3164062 264.25,64.3320312 L264.25,64.3320312 L205.154297,5.23632812 C201.663411,1.74544271 197.424479,0 192.4375,0 C187.450521,0 183.211589,1.74544271 179.720703,5.23632812 L179.720703,5.23632812 L120.625,64.3320312 C114.640625,70.3164062 113.269206,76.9241536 116.510742,84.1552734 C119.752279,91.3863932 125.36263,95.0019531 133.341797,95.0019531 L133.341797,95.0019531 L171.492188,95.0019531 L171.492188,170.554688 L95.9394531,170.554688 L95.9394531,132.404297 C95.9394531,124.42513 92.3238932,118.814779 85.0927734,115.573242 C77.8616536,112.331706 71.2539062,113.703125 65.2695312,119.6875 L65.2695312,119.6875 L6.17382812,178.783203 C2.68294271,182.274089 0.9375,186.513021 0.9375,191.5 C0.9375,196.486979 2.68294271,200.725911 6.17382812,204.216797 L6.17382812,204.216797 L65.2695312,263.3125 C71.2539062,268.798177 77.8616536,270.044922 85.0927734,267.052734 C92.3238932,264.060547 95.9394531,258.57487 95.9394531,250.595703 L95.9394531,250.595703 L95.9394531,212.445312 L171.492188,212.445312 L171.492188,287.998047 L133.341797,287.998047 C125.36263,287.998047 119.876953,291.613607 116.884766,298.844727 C113.892578,306.075846 115.139323,312.683594 120.625,318.667969 L120.625,318.667969 L179.720703,377.763672 C183.211589,381.254557 187.450521,383 192.4375,383 Z'%3E%3C/path%3E%3C/g%3E%3C/svg%3E\");mask-image:url(\"data:image/svg+xml,%3C%3Fxml version='1.0' encoding='UTF-8'%3F%3E%3Csvg viewBox='0 0 384 383' xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink'%3E%3Cg%3E%3Cpath d='M192.4375,383 C197.424479,383 201.663411,381.254557 205.154297,377.763672 L205.154297,377.763672 L264.25,318.667969 C270.234375,312.683594 271.605794,306.075846 268.364258,298.844727 C265.122721,291.613607 259.51237,287.998047 251.533203,287.998047 L251.533203,287.998047 L213.382812,287.998047 L213.382812,212.445312 L288.935547,212.445312 L288.935547,250.595703 C288.935547,258.57487 292.551107,264.185221 299.782227,267.426758 C307.013346,270.668294 313.621094,269.296875 319.605469,263.3125 L319.605469,263.3125 L378.701172,204.216797 C382.192057,200.725911 383.9375,196.486979 383.9375,191.5 C383.9375,186.513021 382.192057,182.274089 378.701172,178.783203 L378.701172,178.783203 L319.605469,119.6875 C313.621094,114.201823 307.013346,112.955078 299.782227,115.947266 C292.551107,118.939453 288.935547,124.42513 288.935547,132.404297 L288.935547,132.404297 L288.935547,170.554688 L213.382812,170.554688 L213.382812,95.0019531 L251.533203,95.0019531 C259.51237,95.0019531 264.998047,91.3863932 267.990234,84.1552734 C270.982422,76.9241536 269.735677,70.3164062 264.25,64.3320312 L264.25,64.3320312 L205.154297,5.23632812 C201.663411,1.74544271 197.424479,0 192.4375,0 C187.450521,0 183.211589,1.74544271 179.720703,5.23632812 L179.720703,5.23632812 L120.625,64.3320312 C114.640625,70.3164062 113.269206,76.9241536 116.510742,84.1552734 C119.752279,91.3863932 125.36263,95.0019531 133.341797,95.0019531 L133.341797,95.0019531 L171.492188,95.0019531 L171.492188,170.554688 L95.9394531,170.554688 L95.9394531,132.404297 C95.9394531,124.42513 92.3238932,118.814779 85.0927734,115.573242 C77.8616536,112.331706 71.2539062,113.703125 65.2695312,119.6875 L65.2695312,119.6875 L6.17382812,178.783203 C2.68294271,182.274089 0.9375,186.513021 0.9375,191.5 C0.9375,196.486979 2.68294271,200.725911 6.17382812,204.216797 L6.17382812,204.216797 L65.2695312,263.3125 C71.2539062,268.798177 77.8616536,270.044922 85.0927734,267.052734 C92.3238932,264.060547 95.9394531,258.57487 95.9394531,250.595703 L95.9394531,250.595703 L95.9394531,212.445312 L171.492188,212.445312 L171.492188,287.998047 L133.341797,287.998047 C125.36263,287.998047 119.876953,291.613607 116.884766,298.844727 C113.892578,306.075846 115.139323,312.683594 120.625,318.667969 L120.625,318.667969 L179.720703,377.763672 C183.211589,381.254557 187.450521,383 192.4375,383 Z'%3E%3C/path%3E%3C/g%3E%3C/svg%3E\");width:11px;height:11px;background-size:cover;background-repeat:no-repeat}.arrow-down{position:absolute;right:5px;top:0}.arrow-down svg{width:8px;margin-top:5px;margin-left:5px;opacity:0.4}.cell-value-wrapper{margin-right:10px;overflow:hidden;text-overflow:ellipsis}.revo-button{position:relative;overflow:hidden;color:#fff;background-color:#6200ee;height:32px;line-height:32px;padding:0 15px;outline:0;border:0;border-radius:7px;box-sizing:border-box;cursor:pointer}.revo-button.green{background-color:#009037;border:1px solid #00772d}.revo-button.red{background-color:#E0662E;border:1px solid #d55920}.revo-button:disabled,.revo-button[disabled]{cursor:not-allowed !important;filter:opacity(0.35) !important}.revo-button.light{border:1px solid #cedefa;line-height:30px;background:none;color:#000;box-shadow:none}revo-grid[theme=default],revo-grid:not([theme]){border:1px solid #cecece;font-size:12px}revo-grid[theme=default] revogr-header,revo-grid:not([theme]) revogr-header{text-align:center;line-height:30px;background-color:#f8f9fa}revo-grid[theme=default] revogr-header .group-rgRow,revo-grid:not([theme]) revogr-header .group-rgRow{box-shadow:none}revo-grid[theme=default] revogr-header .header-rgRow,revo-grid[theme=default] revogr-header .group-rgRow,revo-grid:not([theme]) revogr-header .header-rgRow,revo-grid:not([theme]) revogr-header .group-rgRow{text-transform:uppercase;font-size:12px;color:#000}revo-grid[theme=default] revogr-header .header-rgRow,revo-grid:not([theme]) revogr-header .header-rgRow{height:30px;box-shadow:0 -1px 0 0 #cecece inset}revo-grid[theme=default] revogr-header .rgHeaderCell,revo-grid:not([theme]) revogr-header .rgHeaderCell{box-shadow:-1px 0 0 0 #cecece inset, 0 -1px 0 0 #cecece, 0 -1px 0 0 #cecece inset}revo-grid[theme=default] revogr-header .rgHeaderCell.focused-cell,revo-grid:not([theme]) revogr-header .rgHeaderCell.focused-cell{background:rgba(233, 234, 237, 0.5)}revo-grid[theme=default] .rowHeaders,revo-grid:not([theme]) .rowHeaders{background-color:#f8f9fa}revo-grid[theme=default] .rowHeaders revogr-data .rgCell,revo-grid:not([theme]) .rowHeaders revogr-data .rgCell{color:#000}revo-grid[theme=default] .rowHeaders revogr-data .rgCell:first-child,revo-grid:not([theme]) .rowHeaders revogr-data .rgCell:first-child{box-shadow:0 -1px 0 0 #cecece inset}revo-grid[theme=default] .rowHeaders revogr-data .rgCell:not(:first-child),revo-grid:not([theme]) .rowHeaders revogr-data .rgCell:not(:first-child){box-shadow:0 -1px 0 0 #cecece inset, 1px 0 0 0 #cecece inset}revo-grid[theme=default] .rowHeaders revogr-data .rgCell:last-child,revo-grid:not([theme]) .rowHeaders revogr-data .rgCell:last-child{border-right:1px solid #cecece}revo-grid[theme=default] .rowHeaders revogr-data revogr-header,revo-grid:not([theme]) .rowHeaders revogr-data revogr-header{box-shadow:0 -1px 0 0 #cecece inset}revo-grid[theme=default] revogr-viewport-scroll.colPinStart revogr-data .rgRow .rgCell:last-child,revo-grid:not([theme]) revogr-viewport-scroll.colPinStart revogr-data .rgRow .rgCell:last-child{box-shadow:0 -1px 0 0 #e2e3e3 inset, -1px 0 0 0 #cecece inset}revo-grid[theme=default] revogr-viewport-scroll.colPinStart .footer-wrapper revogr-data .rgRow:first-child .rgCell,revo-grid:not([theme]) revogr-viewport-scroll.colPinStart .footer-wrapper revogr-data .rgRow:first-child .rgCell{box-shadow:0 1px 0 0 #cecece inset, -1px 0 0 0 #cecece inset}revo-grid[theme=default] revogr-viewport-scroll.colPinEnd,revo-grid[theme=default] revogr-viewport-scroll.colPinEnd revogr-header,revo-grid:not([theme]) revogr-viewport-scroll.colPinEnd,revo-grid:not([theme]) revogr-viewport-scroll.colPinEnd revogr-header{box-shadow:1px 0 0 #cecece inset}revo-grid[theme=default] .footer-wrapper revogr-data .rgRow:first-child .rgCell,revo-grid:not([theme]) .footer-wrapper revogr-data .rgRow:first-child .rgCell{box-shadow:0 1px 0 0 #e2e3e3 inset, -1px 0 0 0 #e2e3e3 inset, 0 -1px 0 0 #e2e3e3 inset}revo-grid[theme=default] revogr-data,revo-grid:not([theme]) revogr-data{text-align:center}revo-grid[theme=default] revogr-data .revo-draggable,revo-grid:not([theme]) revogr-data .revo-draggable{float:left}revo-grid[theme=default] revogr-data .rgRow,revo-grid:not([theme]) revogr-data .rgRow{line-height:27px}revo-grid[theme=default] revogr-data .rgRow.focused-rgRow,revo-grid:not([theme]) revogr-data .rgRow.focused-rgRow{background-color:rgba(233, 234, 237, 0.5)}revo-grid[theme=default] revogr-data .rgCell,revo-grid:not([theme]) revogr-data .rgCell{box-shadow:0 -1px 0 0 #e2e3e3 inset, -1px 0 0 0 #e2e3e3 inset}revo-grid[theme=default] revogr-data .rgCell.disabled,revo-grid:not([theme]) revogr-data .rgCell.disabled{background-color:0 -1px 0 0 #e2e3e3 inset, -1px 0 0 0 #e2e3e3 inset}revo-grid[theme=material]{font-family:Nunito, -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, \"Helvetica Neue\", Arial, sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\"}revo-grid[theme=material] revogr-header{line-height:50px;font-weight:600;text-align:left}revo-grid[theme=material] revogr-header .rgHeaderCell{padding:0 15px;text-overflow:ellipsis}revo-grid[theme=material] revogr-header .header-rgRow{height:50px}revo-grid[theme=material] revogr-data{text-align:left}revo-grid[theme=material] revogr-data .rgRow{line-height:42px}revo-grid[theme=material] revogr-data .rgCell{padding:0 15px}revo-grid[theme=material] .rowHeaders{background-color:#f7faff}revo-grid[theme=material] .rowHeaders revogr-data .rgCell{color:#757a82}revo-grid[theme=material] revogr-header .header-rgRow.group{box-shadow:0 -1px 0 0 #f1f1f1 inset}revo-grid[theme=material] revogr-header .header-rgRow:not(.group){box-shadow:0 -1px 0 0 #f1f1f1, 0 -1px 0 0 #f1f1f1 inset}revo-grid[theme=material] revogr-header .rgHeaderCell.sortable:hover{background-color:#f1f1f1}revo-grid[theme=material] revogr-header .rgHeaderCell.focused-cell{background:rgba(233, 234, 237, 0.5)}revo-grid[theme=material] .footer-wrapper revogr-data{box-shadow:0 -1px 0 #f1f1f1}revo-grid[theme=material] revogr-viewport-scroll.colPinStart{box-shadow:-1px 0 0 #f1f1f1 inset}revo-grid[theme=material] revogr-viewport-scroll.colPinEnd{box-shadow:-1px 0 0 #f1f1f1}revo-grid[theme=material] revogr-data .rgRow{box-shadow:0 -1px 0 0 #f1f1f1 inset}revo-grid[theme=material] revogr-data .rgRow.focused-rgRow{background-color:rgba(233, 234, 237, 0.5)}revo-grid[theme=material] revogr-data .rgCell{color:rgba(0, 0, 0, 0.87)}revo-grid[theme=material] revogr-data .rgCell.disabled{background-color:#f7f7f7}revo-grid[theme=darkMaterial]{font-family:Nunito, -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, \"Helvetica Neue\", Arial, sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\";color:#d8d8d8}revo-grid[theme=darkMaterial] revogr-header{line-height:50px;font-weight:600;text-align:left}revo-grid[theme=darkMaterial] revogr-header .rgHeaderCell{padding:0 15px;text-overflow:ellipsis}revo-grid[theme=darkMaterial] revogr-header .header-rgRow{height:50px}revo-grid[theme=darkMaterial] revogr-data{text-align:left}revo-grid[theme=darkMaterial] revogr-data .rgRow{line-height:42px}revo-grid[theme=darkMaterial] revogr-data .rgCell{padding:0 15px}revo-grid[theme=darkMaterial] .rowHeaders{background-color:rgba(40, 39, 43, 0.8)}revo-grid[theme=darkMaterial] .rowHeaders revogr-data .rgCell{color:rgba(216, 216, 216, 0.8)}revo-grid[theme=darkMaterial] revogr-edit{background-color:#28272b}revo-grid[theme=darkMaterial] revogr-header .header-rgRow.group{box-shadow:0 -1px 0 0 #404040 inset}revo-grid[theme=darkMaterial] revogr-header .header-rgRow:not(.group){box-shadow:0 -1px 0 0 #404040, 0 -1px 0 0 #404040 inset}revo-grid[theme=darkMaterial] revogr-header .rgHeaderCell.sortable:hover{background-color:rgba(64, 64, 64, 0.5)}revo-grid[theme=darkMaterial] revogr-header .rgHeaderCell.focused-cell{background:rgba(115, 148, 160, 0.15)}revo-grid[theme=darkMaterial] .footer-wrapper revogr-data{box-shadow:0 -1px 0 #404040}revo-grid[theme=darkMaterial] revogr-data .rgCell{color:rgba(216, 216, 216, 0.9)}revo-grid[theme=darkMaterial] revogr-data .rgRow{box-shadow:0 -1px 0 0 #404040 inset}revo-grid[theme=darkMaterial] revogr-data .rgRow.focused-rgRow{background-color:rgba(115, 148, 160, 0.15)}revo-grid[theme=darkMaterial] revogr-viewport-scroll.colPinStart{box-shadow:-1px 0 0 #404040 inset}revo-grid[theme=darkMaterial] revogr-viewport-scroll.colPinEnd{box-shadow:-1px 0 0 #404040}revo-grid[theme=darkCompact]{font-family:Nunito, -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, \"Helvetica Neue\", Arial, sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\";color:#d8d8d8}revo-grid[theme=darkCompact] revogr-header{line-height:45px;font-weight:600;text-align:left}revo-grid[theme=darkCompact] revogr-header .rgHeaderCell{padding:0 15px;text-overflow:ellipsis}revo-grid[theme=darkCompact] revogr-header .header-rgRow{height:45px}revo-grid[theme=darkCompact] revogr-data{text-align:left}revo-grid[theme=darkCompact] revogr-data .rgRow{line-height:32px}revo-grid[theme=darkCompact] revogr-data .rgCell{padding:0 15px}revo-grid[theme=darkCompact] .rowHeaders{background-color:rgba(40, 39, 43, 0.8)}revo-grid[theme=darkCompact] .rowHeaders revogr-data .rgCell{color:rgba(216, 216, 216, 0.8)}revo-grid[theme=darkCompact] revogr-edit{background-color:#28272b}revo-grid[theme=darkCompact] revogr-header .header-rgRow.group{box-shadow:0 -1px 0 0 #404040 inset}revo-grid[theme=darkCompact] revogr-header .header-rgRow:not(.group){box-shadow:0 -1px 0 0 #404040, 0 -1px 0 0 #404040 inset}revo-grid[theme=darkCompact] revogr-header .rgHeaderCell.sortable:hover{background-color:rgba(64, 64, 64, 0.5)}revo-grid[theme=darkCompact] revogr-header .rgHeaderCell.focused-cell{background:rgba(115, 148, 160, 0.15)}revo-grid[theme=darkCompact] .footer-wrapper revogr-data{box-shadow:0 -1px 0 #404040}revo-grid[theme=darkCompact] revogr-data .rgCell{color:rgba(216, 216, 216, 0.9)}revo-grid[theme=darkCompact] revogr-data .rgRow{box-shadow:0 -1px 0 0 #404040 inset}revo-grid[theme=darkCompact] revogr-data .rgRow.focused-rgRow{background-color:rgba(115, 148, 160, 0.15)}revo-grid[theme=darkCompact] revogr-viewport-scroll.colPinStart{box-shadow:-1px 0 0 #404040 inset}revo-grid[theme=darkCompact] revogr-viewport-scroll.colPinEnd{box-shadow:-1px 0 0 #404040}revo-grid[theme=compact]{font-family:Nunito, -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, \"Helvetica Neue\", Arial, sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\"}revo-grid[theme=compact] revogr-header{line-height:45px;font-weight:600;text-align:left}revo-grid[theme=compact] revogr-header .rgHeaderCell{padding:0 15px;text-overflow:ellipsis}revo-grid[theme=compact] revogr-header .header-rgRow{height:45px}revo-grid[theme=compact] revogr-data{text-align:left}revo-grid[theme=compact] revogr-data .rgRow{line-height:32px}revo-grid[theme=compact] revogr-data .rgCell{padding:0 15px}revo-grid[theme=compact] .rowHeaders{background-color:#f7faff}revo-grid[theme=compact] .rowHeaders revogr-data .rgCell{color:#757a82}revo-grid[theme=compact] revogr-header .header-rgRow.group{box-shadow:0 -1px 0 0 #f1f1f1 inset}revo-grid[theme=compact] revogr-header .header-rgRow:not(.group){box-shadow:0 -1px 0 0 #f1f1f1, 0 -1px 0 0 #f1f1f1 inset}revo-grid[theme=compact] revogr-header .rgHeaderCell.sortable:hover{background-color:#f1f1f1}revo-grid[theme=compact] revogr-header .rgHeaderCell.focused-cell{background:rgba(233, 234, 237, 0.5)}revo-grid[theme=compact] .footer-wrapper revogr-data{box-shadow:0 -1px 0 #f1f1f1}revo-grid[theme=compact] revogr-viewport-scroll.colPinStart{box-shadow:-1px 0 0 #f1f1f1 inset}revo-grid[theme=compact] revogr-viewport-scroll.colPinEnd{box-shadow:-1px 0 0 #f1f1f1}revo-grid[theme=compact] revogr-data .rgRow{box-shadow:0 -1px 0 0 #f1f1f1 inset}revo-grid[theme=compact] revogr-data .rgRow.focused-rgRow{background-color:rgba(233, 234, 237, 0.5)}revo-grid[theme=compact] revogr-data .rgCell{color:rgba(0, 0, 0, 0.87)}revo-grid[theme=compact] revogr-data .rgCell.disabled{background-color:#f7f7f7}revo-grid[theme=compact] revo-dropdown .rv-dr-root{padding:0px 9px}revo-grid{display:block;height:100%;min-height:300px;font-family:Helvetica, Arial, Sans-Serif, serif;font-size:14px;position:relative;-webkit-touch-callout:none;-webkit-user-select:none;-khtml-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;display:flex;flex-direction:column;width:100%;height:100%}revo-grid .attribution{position:absolute;top:0;left:0;right:0;z-index:100;width:0;height:0;border-left:4px solid rgba(38, 106, 232, 0.6);border-top:4px solid rgba(38, 106, 232, 0.6);border-bottom:4px solid transparent;border-right:4px solid transparent;cursor:pointer}revo-grid .attribution .value{position:absolute;top:0;left:0;background-color:rgba(255, 255, 255, 0.9);padding:4px;border-radius:4px;box-shadow:0 1px 10px rgba(0, 0, 0, 0.2);white-space:nowrap;text-decoration:none;color:black;letter-spacing:0.3px;font-size:11px;opacity:0;width:4px;overflow:hidden;transition:opacity 0.5s ease-in-out, width 0.3s ease-in-out}revo-grid .attribution:hover .value{width:63px;opacity:1}revo-grid.column-draggable.column-drag-start:hover,revo-grid.column-draggable.column-drag-start *:hover{cursor:grabbing}revo-grid .footer-wrapper,revo-grid .header-wrapper{width:100%}revo-grid .footer-wrapper revogr-data,revo-grid .header-wrapper revogr-data{z-index:3}revo-grid revo-dropdown{width:100%}revo-grid revo-dropdown .rv-dr-root{max-height:100%}revo-grid revo-dropdown.shrink label{opacity:0}revo-grid .viewports{max-width:100%;display:flex;flex-direction:row;align-items:flex-start;flex-grow:1}revo-grid .main-viewport{flex-grow:1;height:0;display:flex;justify-content:space-between;flex-direction:row}revo-grid .draggable{position:fixed;height:30px;line-height:30px;background:#fff;border-radius:3px;display:block;z-index:100;margin-top:5px;margin-right:-20px;box-shadow:0 4px 20px 0 rgba(0, 0, 0, 0.15);padding-left:20px;padding-right:5px}revo-grid .draggable.hidden{display:none}revo-grid .draggable .revo-alt-icon{background-color:black;position:absolute;left:5px;top:10px}revo-grid .draggable-wrapper.hidden{display:none}revo-grid .drag-position{position:absolute;left:0;right:0;height:1px;z-index:2;background:gray;pointer-events:none}revo-grid .drag-position-y{position:absolute;top:0;left:0;bottom:0;width:1px;z-index:2;background:gray;pointer-events:none}revo-grid .drag-auto-scroll-y{pointer-events:none;position:absolute;left:0;top:0;height:50px;width:1px}revo-grid .clipboard{position:absolute;left:0;top:0}revo-grid revogr-scroll-virtual{position:relative}revo-grid revogr-scroll-virtual.vertical,revo-grid revogr-scroll-virtual.horizontal{z-index:3}";
971
+ /**
972
+ * Plugin service
973
+ * Manages plugins
974
+ */
975
+ class PluginService {
976
+ constructor() {
977
+ /**
978
+ * Plugins
979
+ * Define plugins collection
980
+ */
981
+ this.internalPlugins = [];
982
+ }
983
+ /**
984
+ * Get all plugins
985
+ */
986
+ get() {
987
+ return [...this.internalPlugins];
988
+ }
989
+ /**
990
+ * Add plugin to collection
991
+ */
992
+ add(plugin) {
993
+ this.internalPlugins.push(plugin);
994
+ }
995
+ /**
996
+ * Add user plugins and create
997
+ */
998
+ addUserPluginsAndCreate(element, plugins = [], prevPlugins, pluginData) {
999
+ if (!pluginData) {
1000
+ return;
1001
+ }
1002
+ // Step 1: Identify plugins to remove, compare new and old plugins
1003
+ const pluginsToRemove = (prevPlugins === null || prevPlugins === void 0 ? void 0 : prevPlugins.filter(prevPlugin => !plugins.some(userPlugin => userPlugin === prevPlugin))) || [];
1004
+ // Step 2: Remove old plugins
1005
+ pluginsToRemove.forEach(plugin => {
1006
+ var _a, _b;
1007
+ const index = this.internalPlugins.findIndex(createdPlugin => createdPlugin instanceof plugin);
1008
+ if (index !== -1) {
1009
+ (_b = (_a = this.internalPlugins[index]).destroy) === null || _b === void 0 ? void 0 : _b.call(_a);
1010
+ this.internalPlugins.splice(index, 1); // Remove the plugin
1011
+ }
1012
+ });
1013
+ // Step 3: Register user plugins
1014
+ plugins === null || plugins === void 0 ? void 0 : plugins.forEach(userPlugin => {
1015
+ // check if plugin already exists, if so, skip
1016
+ const existingPlugin = this.internalPlugins.find(createdPlugin => createdPlugin instanceof userPlugin);
1017
+ if (existingPlugin) {
1018
+ return;
1019
+ }
1020
+ this.add(new userPlugin(element, pluginData));
1021
+ });
1022
+ }
1023
+ /**
1024
+ * Get plugin by class
1025
+ */
1026
+ getByClass(pluginClass) {
1027
+ return this.internalPlugins.find(p => p instanceof pluginClass);
1028
+ }
1029
+ /**
1030
+ * Remove plugin
1031
+ */
1032
+ remove(plugin) {
1033
+ var _a, _b;
1034
+ const index = this.internalPlugins.indexOf(plugin);
1035
+ if (index > -1) {
1036
+ (_b = (_a = this.internalPlugins[index]).destroy) === null || _b === void 0 ? void 0 : _b.call(_a);
1037
+ this.internalPlugins.splice(index, 1);
1038
+ }
1039
+ }
1040
+ /**
1041
+ * Remove all plugins
1042
+ */
1043
+ destroy() {
1044
+ this.internalPlugins.forEach(p => { var _a; return (_a = p.destroy) === null || _a === void 0 ? void 0 : _a.call(p); });
1045
+ this.internalPlugins = [];
1046
+ }
1047
+ }
1048
+
1049
+ const revoGridStyleCss = ".revo-drag-icon{width:11px;opacity:0.8}.revo-drag-icon::before{content:\"::\"}.revo-alt-icon{-webkit-mask-image:url(\"data:image/svg+xml,%3C%3Fxml version='1.0' encoding='UTF-8'%3F%3E%3Csvg viewBox='0 0 384 383' xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink'%3E%3Cg%3E%3Cpath d='M192.4375,383 C197.424479,383 201.663411,381.254557 205.154297,377.763672 L205.154297,377.763672 L264.25,318.667969 C270.234375,312.683594 271.605794,306.075846 268.364258,298.844727 C265.122721,291.613607 259.51237,287.998047 251.533203,287.998047 L251.533203,287.998047 L213.382812,287.998047 L213.382812,212.445312 L288.935547,212.445312 L288.935547,250.595703 C288.935547,258.57487 292.551107,264.185221 299.782227,267.426758 C307.013346,270.668294 313.621094,269.296875 319.605469,263.3125 L319.605469,263.3125 L378.701172,204.216797 C382.192057,200.725911 383.9375,196.486979 383.9375,191.5 C383.9375,186.513021 382.192057,182.274089 378.701172,178.783203 L378.701172,178.783203 L319.605469,119.6875 C313.621094,114.201823 307.013346,112.955078 299.782227,115.947266 C292.551107,118.939453 288.935547,124.42513 288.935547,132.404297 L288.935547,132.404297 L288.935547,170.554688 L213.382812,170.554688 L213.382812,95.0019531 L251.533203,95.0019531 C259.51237,95.0019531 264.998047,91.3863932 267.990234,84.1552734 C270.982422,76.9241536 269.735677,70.3164062 264.25,64.3320312 L264.25,64.3320312 L205.154297,5.23632812 C201.663411,1.74544271 197.424479,0 192.4375,0 C187.450521,0 183.211589,1.74544271 179.720703,5.23632812 L179.720703,5.23632812 L120.625,64.3320312 C114.640625,70.3164062 113.269206,76.9241536 116.510742,84.1552734 C119.752279,91.3863932 125.36263,95.0019531 133.341797,95.0019531 L133.341797,95.0019531 L171.492188,95.0019531 L171.492188,170.554688 L95.9394531,170.554688 L95.9394531,132.404297 C95.9394531,124.42513 92.3238932,118.814779 85.0927734,115.573242 C77.8616536,112.331706 71.2539062,113.703125 65.2695312,119.6875 L65.2695312,119.6875 L6.17382812,178.783203 C2.68294271,182.274089 0.9375,186.513021 0.9375,191.5 C0.9375,196.486979 2.68294271,200.725911 6.17382812,204.216797 L6.17382812,204.216797 L65.2695312,263.3125 C71.2539062,268.798177 77.8616536,270.044922 85.0927734,267.052734 C92.3238932,264.060547 95.9394531,258.57487 95.9394531,250.595703 L95.9394531,250.595703 L95.9394531,212.445312 L171.492188,212.445312 L171.492188,287.998047 L133.341797,287.998047 C125.36263,287.998047 119.876953,291.613607 116.884766,298.844727 C113.892578,306.075846 115.139323,312.683594 120.625,318.667969 L120.625,318.667969 L179.720703,377.763672 C183.211589,381.254557 187.450521,383 192.4375,383 Z'%3E%3C/path%3E%3C/g%3E%3C/svg%3E\");mask-image:url(\"data:image/svg+xml,%3C%3Fxml version='1.0' encoding='UTF-8'%3F%3E%3Csvg viewBox='0 0 384 383' xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink'%3E%3Cg%3E%3Cpath d='M192.4375,383 C197.424479,383 201.663411,381.254557 205.154297,377.763672 L205.154297,377.763672 L264.25,318.667969 C270.234375,312.683594 271.605794,306.075846 268.364258,298.844727 C265.122721,291.613607 259.51237,287.998047 251.533203,287.998047 L251.533203,287.998047 L213.382812,287.998047 L213.382812,212.445312 L288.935547,212.445312 L288.935547,250.595703 C288.935547,258.57487 292.551107,264.185221 299.782227,267.426758 C307.013346,270.668294 313.621094,269.296875 319.605469,263.3125 L319.605469,263.3125 L378.701172,204.216797 C382.192057,200.725911 383.9375,196.486979 383.9375,191.5 C383.9375,186.513021 382.192057,182.274089 378.701172,178.783203 L378.701172,178.783203 L319.605469,119.6875 C313.621094,114.201823 307.013346,112.955078 299.782227,115.947266 C292.551107,118.939453 288.935547,124.42513 288.935547,132.404297 L288.935547,132.404297 L288.935547,170.554688 L213.382812,170.554688 L213.382812,95.0019531 L251.533203,95.0019531 C259.51237,95.0019531 264.998047,91.3863932 267.990234,84.1552734 C270.982422,76.9241536 269.735677,70.3164062 264.25,64.3320312 L264.25,64.3320312 L205.154297,5.23632812 C201.663411,1.74544271 197.424479,0 192.4375,0 C187.450521,0 183.211589,1.74544271 179.720703,5.23632812 L179.720703,5.23632812 L120.625,64.3320312 C114.640625,70.3164062 113.269206,76.9241536 116.510742,84.1552734 C119.752279,91.3863932 125.36263,95.0019531 133.341797,95.0019531 L133.341797,95.0019531 L171.492188,95.0019531 L171.492188,170.554688 L95.9394531,170.554688 L95.9394531,132.404297 C95.9394531,124.42513 92.3238932,118.814779 85.0927734,115.573242 C77.8616536,112.331706 71.2539062,113.703125 65.2695312,119.6875 L65.2695312,119.6875 L6.17382812,178.783203 C2.68294271,182.274089 0.9375,186.513021 0.9375,191.5 C0.9375,196.486979 2.68294271,200.725911 6.17382812,204.216797 L6.17382812,204.216797 L65.2695312,263.3125 C71.2539062,268.798177 77.8616536,270.044922 85.0927734,267.052734 C92.3238932,264.060547 95.9394531,258.57487 95.9394531,250.595703 L95.9394531,250.595703 L95.9394531,212.445312 L171.492188,212.445312 L171.492188,287.998047 L133.341797,287.998047 C125.36263,287.998047 119.876953,291.613607 116.884766,298.844727 C113.892578,306.075846 115.139323,312.683594 120.625,318.667969 L120.625,318.667969 L179.720703,377.763672 C183.211589,381.254557 187.450521,383 192.4375,383 Z'%3E%3C/path%3E%3C/g%3E%3C/svg%3E\");width:11px;height:11px;background-size:cover;background-repeat:no-repeat}.arrow-down{position:absolute;right:5px;top:0}.arrow-down svg{width:8px;margin-top:5px;margin-left:5px;opacity:0.4}.cell-value-wrapper{margin-right:10px;overflow:hidden;text-overflow:ellipsis}.revo-button{position:relative;overflow:hidden;color:#fff;background-color:#4545ff;height:32px;line-height:32px;padding:0 15px;outline:0;border:0;border-radius:7px;box-sizing:border-box;cursor:pointer}.revo-button.green{background-color:#009037}.revo-button.red{background-color:#E0662E}.revo-button:disabled,.revo-button[disabled]{cursor:not-allowed !important;filter:opacity(0.35) !important}.revo-button.outline{border:1px solid #dbdbdb;line-height:30px;background:none;color:#000;box-shadow:none}revo-grid[theme^=dark] .revo-button.outline{border:1px solid #404040;color:#d8d8d8}revo-grid[theme=default],revo-grid:not([theme]){border:1px solid #cecece;font-size:12px}revo-grid[theme=default] .rowHeaders revogr-header,revo-grid:not([theme]) .rowHeaders revogr-header{box-shadow:-1px 0 0 0 #cecece inset}revo-grid[theme=default] revogr-header,revo-grid:not([theme]) revogr-header{text-align:center;line-height:30px;background-color:#f8f9fa}revo-grid[theme=default] revogr-header .group-rgRow,revo-grid:not([theme]) revogr-header .group-rgRow{box-shadow:none}revo-grid[theme=default] revogr-header .header-rgRow,revo-grid[theme=default] revogr-header .group-rgRow,revo-grid:not([theme]) revogr-header .header-rgRow,revo-grid:not([theme]) revogr-header .group-rgRow{text-transform:uppercase;font-size:12px;color:#000}revo-grid[theme=default] revogr-header .header-rgRow,revo-grid:not([theme]) revogr-header .header-rgRow{height:30px;box-shadow:0 -1px 0 0 #cecece inset}revo-grid[theme=default] revogr-header .rgHeaderCell,revo-grid:not([theme]) revogr-header .rgHeaderCell{box-shadow:-1px 0 0 0 #cecece inset, 0 -1px 0 0 #cecece, 0 -1px 0 0 #cecece inset}revo-grid[theme=default] revogr-header .rgHeaderCell.focused-cell,revo-grid:not([theme]) revogr-header .rgHeaderCell.focused-cell{background:rgba(233, 234, 237, 0.5)}revo-grid[theme=default] .rowHeaders,revo-grid:not([theme]) .rowHeaders{background-color:#f8f9fa}revo-grid[theme=default] .rowHeaders revogr-data .rgCell,revo-grid:not([theme]) .rowHeaders revogr-data .rgCell{color:#000}revo-grid[theme=default] .rowHeaders revogr-data .rgCell:first-child,revo-grid:not([theme]) .rowHeaders revogr-data .rgCell:first-child{box-shadow:0 -1px 0 0 #cecece inset}revo-grid[theme=default] .rowHeaders revogr-data .rgCell:not(:first-child),revo-grid:not([theme]) .rowHeaders revogr-data .rgCell:not(:first-child){box-shadow:0 -1px 0 0 #cecece inset, 1px 0 0 0 #cecece inset}revo-grid[theme=default] .rowHeaders revogr-data .rgCell:last-child,revo-grid:not([theme]) .rowHeaders revogr-data .rgCell:last-child{border-right:1px solid #cecece}revo-grid[theme=default] .rowHeaders revogr-data revogr-header,revo-grid:not([theme]) .rowHeaders revogr-data revogr-header{box-shadow:0 -1px 0 0 #cecece inset}revo-grid[theme=default] revogr-viewport-scroll.colPinStart revogr-data .rgRow .rgCell:last-child,revo-grid:not([theme]) revogr-viewport-scroll.colPinStart revogr-data .rgRow .rgCell:last-child{box-shadow:0 -1px 0 0 #e2e3e3 inset, -1px 0 0 0 #cecece inset}revo-grid[theme=default] revogr-viewport-scroll.colPinStart .footer-wrapper revogr-data .rgRow:first-child .rgCell,revo-grid:not([theme]) revogr-viewport-scroll.colPinStart .footer-wrapper revogr-data .rgRow:first-child .rgCell{box-shadow:0 1px 0 0 #cecece inset, -1px 0 0 0 #cecece inset}revo-grid[theme=default] revogr-viewport-scroll.colPinEnd,revo-grid[theme=default] revogr-viewport-scroll.colPinEnd revogr-header,revo-grid:not([theme]) revogr-viewport-scroll.colPinEnd,revo-grid:not([theme]) revogr-viewport-scroll.colPinEnd revogr-header{box-shadow:1px 0 0 #cecece inset}revo-grid[theme=default] .footer-wrapper revogr-data .rgRow:first-child .rgCell,revo-grid:not([theme]) .footer-wrapper revogr-data .rgRow:first-child .rgCell{box-shadow:0 1px 0 0 #e2e3e3 inset, -1px 0 0 0 #e2e3e3 inset, 0 -1px 0 0 #e2e3e3 inset}revo-grid[theme=default] revogr-data,revo-grid:not([theme]) revogr-data{text-align:center}revo-grid[theme=default] revogr-data .revo-draggable,revo-grid:not([theme]) revogr-data .revo-draggable{float:left}revo-grid[theme=default] revogr-data .rgRow,revo-grid:not([theme]) revogr-data .rgRow{line-height:27px}revo-grid[theme=default] revogr-data .rgRow.focused-rgRow,revo-grid:not([theme]) revogr-data .rgRow.focused-rgRow{background-color:rgba(233, 234, 237, 0.5)}revo-grid[theme=default] revogr-data .rgCell,revo-grid:not([theme]) revogr-data .rgCell{box-shadow:0 -1px 0 0 #e2e3e3 inset, -1px 0 0 0 #e2e3e3 inset}revo-grid[theme=default] revogr-data .rgCell.disabled,revo-grid:not([theme]) revogr-data .rgCell.disabled{background-color:0 -1px 0 0 #e2e3e3 inset, -1px 0 0 0 #e2e3e3 inset}revo-grid[theme=material]{font-family:Nunito, -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, \"Helvetica Neue\", Arial, sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\"}revo-grid[theme=material] revogr-header{line-height:50px;font-weight:600;text-align:left}revo-grid[theme=material] revogr-header .rgHeaderCell{padding:0 15px;text-overflow:ellipsis}revo-grid[theme=material] revogr-header .header-rgRow{height:50px}revo-grid[theme=material] revogr-data{text-align:left}revo-grid[theme=material] revogr-data .rgRow{line-height:42px}revo-grid[theme=material] revogr-data .rgCell{padding:0 15px}revo-grid[theme=material] .rowHeaders{background-color:#f7faff}revo-grid[theme=material] .rowHeaders revogr-data .rgCell{color:#757a82}revo-grid[theme=material] revogr-header .header-rgRow.group{box-shadow:0 -1px 0 0 #f1f1f1 inset}revo-grid[theme=material] revogr-header .header-rgRow:not(.group){box-shadow:0 -1px 0 0 #f1f1f1, 0 -1px 0 0 #f1f1f1 inset}revo-grid[theme=material] revogr-header .rgHeaderCell.sortable:hover{background-color:#f1f1f1}revo-grid[theme=material] revogr-header .rgHeaderCell.focused-cell{background:rgba(233, 234, 237, 0.5)}revo-grid[theme=material] .footer-wrapper revogr-data{box-shadow:0 -1px 0 #f1f1f1}revo-grid[theme=material] revogr-viewport-scroll.colPinStart{box-shadow:-1px 0 0 #f1f1f1 inset}revo-grid[theme=material] revogr-viewport-scroll.colPinEnd{box-shadow:-1px 0 0 #f1f1f1}revo-grid[theme=material] revogr-data .rgRow{box-shadow:0 -1px 0 0 #f1f1f1 inset}revo-grid[theme=material] revogr-data .rgRow.focused-rgRow{background-color:rgba(233, 234, 237, 0.5)}revo-grid[theme=material] revogr-data .rgCell{color:rgba(0, 0, 0, 0.87)}revo-grid[theme=material] revogr-data .rgCell.disabled{background-color:#f7f7f7}revo-grid[theme=darkMaterial]{font-family:Nunito, -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, \"Helvetica Neue\", Arial, sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\";color:#d8d8d8}revo-grid[theme=darkMaterial] revogr-header{line-height:50px;font-weight:600;text-align:left}revo-grid[theme=darkMaterial] revogr-header .rgHeaderCell{padding:0 15px;text-overflow:ellipsis}revo-grid[theme=darkMaterial] revogr-header .header-rgRow{height:50px}revo-grid[theme=darkMaterial] revogr-data{text-align:left}revo-grid[theme=darkMaterial] revogr-data .rgRow{line-height:42px}revo-grid[theme=darkMaterial] revogr-data .rgCell{padding:0 15px}revo-grid[theme=darkMaterial] .rowHeaders{background-color:rgba(40, 39, 43, 0.8)}revo-grid[theme=darkMaterial] .rowHeaders revogr-data .rgCell{color:rgba(216, 216, 216, 0.8)}revo-grid[theme=darkMaterial] revogr-edit{background-color:#28272b}revo-grid[theme=darkMaterial] revogr-header .header-rgRow.group{box-shadow:0 -1px 0 0 #404040 inset}revo-grid[theme=darkMaterial] revogr-header .header-rgRow:not(.group){box-shadow:0 -1px 0 0 #404040, 0 -1px 0 0 #404040 inset}revo-grid[theme=darkMaterial] revogr-header .rgHeaderCell.sortable:hover{background-color:rgba(64, 64, 64, 0.5)}revo-grid[theme=darkMaterial] revogr-header .rgHeaderCell.focused-cell{background:rgba(115, 148, 160, 0.15)}revo-grid[theme=darkMaterial] .footer-wrapper revogr-data{box-shadow:0 -1px 0 #404040}revo-grid[theme=darkMaterial] revogr-data .rgCell{color:rgba(216, 216, 216, 0.9)}revo-grid[theme=darkMaterial] revogr-data .rgRow{box-shadow:0 -1px 0 0 #404040 inset}revo-grid[theme=darkMaterial] revogr-data .rgRow.focused-rgRow{background-color:rgba(115, 148, 160, 0.15)}revo-grid[theme=darkMaterial] revogr-viewport-scroll.colPinStart{box-shadow:-1px 0 0 #404040 inset}revo-grid[theme=darkMaterial] revogr-viewport-scroll.colPinEnd{box-shadow:-1px 0 0 #404040}revo-grid[theme=darkCompact]{font-family:Nunito, -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, \"Helvetica Neue\", Arial, sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\";color:#d8d8d8}revo-grid[theme=darkCompact] revogr-header{line-height:45px;font-weight:600;text-align:left}revo-grid[theme=darkCompact] revogr-header .rgHeaderCell{padding:0 15px;text-overflow:ellipsis}revo-grid[theme=darkCompact] revogr-header .header-rgRow{height:45px}revo-grid[theme=darkCompact] revogr-data{text-align:left}revo-grid[theme=darkCompact] revogr-data .rgRow{line-height:32px}revo-grid[theme=darkCompact] revogr-data .rgCell{padding:0 15px}revo-grid[theme=darkCompact] .rowHeaders{background-color:rgba(40, 39, 43, 0.8)}revo-grid[theme=darkCompact] .rowHeaders revogr-data .rgCell{color:rgba(216, 216, 216, 0.8)}revo-grid[theme=darkCompact] revogr-edit{background-color:#28272b}revo-grid[theme=darkCompact] revogr-header .header-rgRow.group{box-shadow:0 -1px 0 0 #404040 inset}revo-grid[theme=darkCompact] revogr-header .header-rgRow:not(.group){box-shadow:0 -1px 0 0 #404040, 0 -1px 0 0 #404040 inset}revo-grid[theme=darkCompact] revogr-header .rgHeaderCell.sortable:hover{background-color:rgba(64, 64, 64, 0.5)}revo-grid[theme=darkCompact] revogr-header .rgHeaderCell.focused-cell{background:rgba(115, 148, 160, 0.15)}revo-grid[theme=darkCompact] .footer-wrapper revogr-data{box-shadow:0 -1px 0 #404040}revo-grid[theme=darkCompact] revogr-data .rgCell{color:rgba(216, 216, 216, 0.9)}revo-grid[theme=darkCompact] revogr-data .rgRow{box-shadow:0 -1px 0 0 #404040 inset}revo-grid[theme=darkCompact] revogr-data .rgRow.focused-rgRow{background-color:rgba(115, 148, 160, 0.15)}revo-grid[theme=darkCompact] revogr-viewport-scroll.colPinStart{box-shadow:-1px 0 0 #404040 inset}revo-grid[theme=darkCompact] revogr-viewport-scroll.colPinEnd{box-shadow:-1px 0 0 #404040}revo-grid[theme=compact]{font-family:Nunito, -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, \"Helvetica Neue\", Arial, sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\"}revo-grid[theme=compact] revogr-header{line-height:45px;font-weight:600;text-align:left}revo-grid[theme=compact] revogr-header .rgHeaderCell{padding:0 15px;text-overflow:ellipsis}revo-grid[theme=compact] revogr-header .header-rgRow{height:45px}revo-grid[theme=compact] revogr-data{text-align:left}revo-grid[theme=compact] revogr-data .rgRow{line-height:32px}revo-grid[theme=compact] revogr-data .rgCell{padding:0 15px}revo-grid[theme=compact] .rowHeaders{background-color:#f7faff}revo-grid[theme=compact] .rowHeaders revogr-data .rgCell{color:#757a82}revo-grid[theme=compact] revogr-header .header-rgRow.group{box-shadow:0 -1px 0 0 #f1f1f1 inset}revo-grid[theme=compact] revogr-header .header-rgRow:not(.group){box-shadow:0 -1px 0 0 #f1f1f1, 0 -1px 0 0 #f1f1f1 inset}revo-grid[theme=compact] revogr-header .rgHeaderCell.sortable:hover{background-color:#f1f1f1}revo-grid[theme=compact] revogr-header .rgHeaderCell.focused-cell{background:rgba(233, 234, 237, 0.5)}revo-grid[theme=compact] .footer-wrapper revogr-data{box-shadow:0 -1px 0 #f1f1f1}revo-grid[theme=compact] revogr-viewport-scroll.colPinStart{box-shadow:-1px 0 0 #f1f1f1 inset}revo-grid[theme=compact] revogr-viewport-scroll.colPinEnd{box-shadow:-1px 0 0 #f1f1f1}revo-grid[theme=compact] revogr-data .rgRow{box-shadow:0 -1px 0 0 #f1f1f1 inset}revo-grid[theme=compact] revogr-data .rgRow.focused-rgRow{background-color:rgba(233, 234, 237, 0.5)}revo-grid[theme=compact] revogr-data .rgCell{color:rgba(0, 0, 0, 0.87)}revo-grid[theme=compact] revogr-data .rgCell.disabled{background-color:#f7f7f7}revo-grid[theme=compact] revo-dropdown .rv-dr-root{padding:0px 9px}revo-grid{display:block;height:100%;min-height:300px;font-family:Helvetica, Arial, Sans-Serif, serif;font-size:14px;position:relative;-webkit-touch-callout:none;-webkit-user-select:none;-khtml-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;display:flex;flex-direction:column;width:100%;height:100%}revo-grid .attribution{position:absolute;bottom:0;left:0;right:0;z-index:1000;width:0;height:0;border-left:4px solid rgba(38, 106, 232, 0.9);border-bottom:4px solid rgba(38, 106, 232, 0.9);border-top:4px solid transparent;border-right:4px solid transparent;cursor:pointer}revo-grid .attribution .value{position:absolute;bottom:0;left:0;background-color:rgba(255, 255, 255, 0.9);padding:4px;border-radius:4px;box-shadow:0 1px 10px rgba(0, 0, 0, 0.2);white-space:nowrap;text-decoration:none;color:black;letter-spacing:0.3px;font-size:11px;opacity:0;width:4px;overflow:hidden;transition:opacity 0.5s ease-in-out, width 0.3s ease-in-out}revo-grid .attribution:hover .value{width:63px;opacity:1}revo-grid.column-draggable.column-drag-start:hover,revo-grid.column-draggable.column-drag-start *:hover{cursor:grabbing}revo-grid .footer-wrapper,revo-grid .header-wrapper{width:100%}revo-grid .footer-wrapper revogr-data,revo-grid .header-wrapper revogr-data{z-index:3}revo-grid revo-dropdown{width:100%}revo-grid revo-dropdown .rv-dr-root{max-height:100%}revo-grid revo-dropdown.shrink label{opacity:0}revo-grid .viewports{max-width:100%;display:flex;flex-direction:row;align-items:flex-start;flex-grow:1}revo-grid .main-viewport{flex-grow:1;height:0;display:flex;justify-content:space-between;flex-direction:row}revo-grid .draggable{position:fixed;height:30px;line-height:30px;background:#fff;border-radius:3px;display:block;z-index:100;margin-top:5px;margin-right:-20px;box-shadow:0 4px 20px 0 rgba(0, 0, 0, 0.15);padding-left:20px;padding-right:5px}revo-grid .draggable.hidden{display:none}revo-grid .draggable .revo-alt-icon{background-color:black;position:absolute;left:5px;top:10px}revo-grid .draggable-wrapper.hidden{display:none}revo-grid .drag-position{position:absolute;left:0;right:0;height:1px;z-index:2;background:gray;pointer-events:none}revo-grid .drag-position-y{position:absolute;top:0;left:0;bottom:0;width:1px;z-index:2;background:gray;pointer-events:none}revo-grid .drag-auto-scroll-y{pointer-events:none;position:absolute;left:0;top:0;height:50px;width:1px}revo-grid .clipboard{position:absolute;left:0;top:0}revo-grid revogr-scroll-virtual{position:relative}revo-grid revogr-scroll-virtual.vertical,revo-grid revogr-scroll-virtual.horizontal{z-index:3}";
1703
1050
  const RevoGridStyle0 = revoGridStyleCss;
1704
1051
 
1705
1052
  const RevoGridComponent = class {
1706
1053
  constructor(hostRef) {
1707
- index$1.registerInstance(this, hostRef);
1708
- this.contentsizechanged = index$1.createEvent(this, "contentsizechanged", 7);
1709
- this.beforeedit = index$1.createEvent(this, "beforeedit", 7);
1710
- this.beforerangeedit = index$1.createEvent(this, "beforerangeedit", 7);
1711
- this.afteredit = index$1.createEvent(this, "afteredit", 7);
1712
- this.beforeautofill = index$1.createEvent(this, "beforeautofill", 7);
1713
- this.beforerange = index$1.createEvent(this, "beforerange", 7);
1714
- this.afterfocus = index$1.createEvent(this, "afterfocus", 7);
1715
- this.roworderchanged = index$1.createEvent(this, "roworderchanged", 7);
1716
- this.beforesortingapply = index$1.createEvent(this, "beforesortingapply", 7);
1717
- this.beforesorting = index$1.createEvent(this, "beforesorting", 7);
1718
- this.rowdragstart = index$1.createEvent(this, "rowdragstart", 7);
1719
- this.headerclick = index$1.createEvent(this, "headerclick", 7);
1720
- this.beforecellfocus = index$1.createEvent(this, "beforecellfocus", 7);
1721
- this.beforefocuslost = index$1.createEvent(this, "beforefocuslost", 7);
1722
- this.beforesourceset = index$1.createEvent(this, "beforesourceset", 7);
1723
- this.beforeanysource = index$1.createEvent(this, "beforeanysource", 7);
1724
- this.aftersourceset = index$1.createEvent(this, "aftersourceset", 7);
1725
- this.afteranysource = index$1.createEvent(this, "afteranysource", 7);
1726
- this.beforecolumnsset = index$1.createEvent(this, "beforecolumnsset", 7);
1727
- this.beforecolumnapplied = index$1.createEvent(this, "beforecolumnapplied", 7);
1728
- this.aftercolumnsset = index$1.createEvent(this, "aftercolumnsset", 7);
1729
- this.beforefilterapply = index$1.createEvent(this, "beforefilterapply", 7);
1730
- this.beforefiltertrimmed = index$1.createEvent(this, "beforefiltertrimmed", 7);
1731
- this.beforetrimmed = index$1.createEvent(this, "beforetrimmed", 7);
1732
- this.aftertrimmed = index$1.createEvent(this, "aftertrimmed", 7);
1733
- this.viewportscroll = index$1.createEvent(this, "viewportscroll", 7);
1734
- this.beforeexport = index$1.createEvent(this, "beforeexport", 7);
1735
- this.beforeeditstart = index$1.createEvent(this, "beforeeditstart", 7);
1736
- this.aftercolumnresize = index$1.createEvent(this, "aftercolumnresize", 7);
1737
- this.beforerowdefinition = index$1.createEvent(this, "beforerowdefinition", 7);
1738
- this.filterconfigchanged = index$1.createEvent(this, "filterconfigchanged", 7);
1739
- this.rowheaderschanged = index$1.createEvent(this, "rowheaderschanged", 7);
1740
- this.beforegridrender = index$1.createEvent(this, "beforegridrender", 7);
1741
- this.aftergridrender = index$1.createEvent(this, "aftergridrender", 7);
1742
- this.aftergridinit = index$1.createEvent(this, "aftergridinit", 7);
1743
- this.additionaldatachanged = index$1.createEvent(this, "additionaldatachanged", 7);
1744
- this.afterthemechanged = index$1.createEvent(this, "afterthemechanged", 7);
1054
+ index.registerInstance(this, hostRef);
1055
+ this.contentsizechanged = index.createEvent(this, "contentsizechanged", 7);
1056
+ this.beforeedit = index.createEvent(this, "beforeedit", 7);
1057
+ this.beforerangeedit = index.createEvent(this, "beforerangeedit", 7);
1058
+ this.afteredit = index.createEvent(this, "afteredit", 7);
1059
+ this.beforeautofill = index.createEvent(this, "beforeautofill", 7);
1060
+ this.beforerange = index.createEvent(this, "beforerange", 7);
1061
+ this.afterfocus = index.createEvent(this, "afterfocus", 7);
1062
+ this.roworderchanged = index.createEvent(this, "roworderchanged", 7);
1063
+ this.beforesorting = index.createEvent(this, "beforesorting", 7);
1064
+ this.beforesourcesortingapply = index.createEvent(this, "beforesourcesortingapply", 7);
1065
+ this.beforesortingapply = index.createEvent(this, "beforesortingapply", 7);
1066
+ this.rowdragstart = index.createEvent(this, "rowdragstart", 7);
1067
+ this.headerclick = index.createEvent(this, "headerclick", 7);
1068
+ this.beforecellfocus = index.createEvent(this, "beforecellfocus", 7);
1069
+ this.beforefocuslost = index.createEvent(this, "beforefocuslost", 7);
1070
+ this.beforesourceset = index.createEvent(this, "beforesourceset", 7);
1071
+ this.beforeanysource = index.createEvent(this, "beforeanysource", 7);
1072
+ this.aftersourceset = index.createEvent(this, "aftersourceset", 7);
1073
+ this.afteranysource = index.createEvent(this, "afteranysource", 7);
1074
+ this.beforecolumnsset = index.createEvent(this, "beforecolumnsset", 7);
1075
+ this.beforecolumnapplied = index.createEvent(this, "beforecolumnapplied", 7);
1076
+ this.aftercolumnsset = index.createEvent(this, "aftercolumnsset", 7);
1077
+ this.beforefilterapply = index.createEvent(this, "beforefilterapply", 7);
1078
+ this.beforefiltertrimmed = index.createEvent(this, "beforefiltertrimmed", 7);
1079
+ this.beforetrimmed = index.createEvent(this, "beforetrimmed", 7);
1080
+ this.aftertrimmed = index.createEvent(this, "aftertrimmed", 7);
1081
+ this.viewportscroll = index.createEvent(this, "viewportscroll", 7);
1082
+ this.beforeexport = index.createEvent(this, "beforeexport", 7);
1083
+ this.beforeeditstart = index.createEvent(this, "beforeeditstart", 7);
1084
+ this.aftercolumnresize = index.createEvent(this, "aftercolumnresize", 7);
1085
+ this.beforerowdefinition = index.createEvent(this, "beforerowdefinition", 7);
1086
+ this.filterconfigchanged = index.createEvent(this, "filterconfigchanged", 7);
1087
+ this.sortingconfigchanged = index.createEvent(this, "sortingconfigchanged", 7);
1088
+ this.rowheaderschanged = index.createEvent(this, "rowheaderschanged", 7);
1089
+ this.beforegridrender = index.createEvent(this, "beforegridrender", 7);
1090
+ this.aftergridrender = index.createEvent(this, "aftergridrender", 7);
1091
+ this.aftergridinit = index.createEvent(this, "aftergridinit", 7);
1092
+ this.additionaldatachanged = index.createEvent(this, "additionaldatachanged", 7);
1093
+ this.afterthemechanged = index.createEvent(this, "afterthemechanged", 7);
1094
+ this.created = index.createEvent(this, "created", 7);
1745
1095
  this.extraElements = [];
1096
+ this.pluginService = new PluginService();
1746
1097
  this.viewport = null;
1747
1098
  this.isInited = false;
1748
- /**
1749
- * Plugins
1750
- * Define plugins collection
1751
- */
1752
- this.internalPlugins = [];
1753
1099
  this.rowHeaders = undefined;
1754
1100
  this.frameSize = 1;
1755
1101
  this.rowSize = 0;
@@ -1772,6 +1118,7 @@ const RevoGridComponent = class {
1772
1118
  this.rowClass = '';
1773
1119
  this.autoSizeColumn = false;
1774
1120
  this.filter = false;
1121
+ this.sorting = undefined;
1775
1122
  this.focusTemplate = undefined;
1776
1123
  this.canMoveColumns = false;
1777
1124
  this.trimmedRows = {};
@@ -1799,15 +1146,31 @@ const RevoGridComponent = class {
1799
1146
  this.dataProvider.refresh(type);
1800
1147
  }
1801
1148
  /**
1802
- * Sets data at specified cell.
1149
+ * Refreshes data at specified cell.
1803
1150
  * Useful for performance optimization.
1804
1151
  * No viewport update will be triggered.
1152
+ *
1153
+ * @example
1154
+ * const grid = document.querySelector('revo-grid');
1155
+ * grid.setDataAt({ row: 0, col: 0, val: 'test' }); // refresh
1805
1156
  */
1806
- async setDataAt(data) {
1807
- const dataElement = this.element.querySelector(`revogr-data[type="${data.rowType}"][col-type="${data.colType}"]`);
1157
+ async setDataAt({ row, col, colType = 'rgCol', rowType = 'rgRow', val, skipDataUpdate = false }) {
1158
+ var _a;
1159
+ if (this.dataProvider && this.columnProvider && !skipDataUpdate) {
1160
+ const columnProp = (_a = this.columnProvider.getColumn(col, colType)) === null || _a === void 0 ? void 0 : _a.prop;
1161
+ if (typeof columnProp !== 'undefined') {
1162
+ this.dataProvider.setCellData({
1163
+ type: rowType,
1164
+ rowIndex: row,
1165
+ prop: columnProp,
1166
+ val,
1167
+ }, false);
1168
+ }
1169
+ }
1170
+ const dataElement = this.element.querySelector(`revogr-data[type="${rowType}"][col-type="${colType}"]`);
1808
1171
  return dataElement === null || dataElement === void 0 ? void 0 : dataElement.updateCell({
1809
- row: data.row,
1810
- col: data.col,
1172
+ row,
1173
+ col,
1811
1174
  });
1812
1175
  }
1813
1176
  /**
@@ -1888,7 +1251,7 @@ const RevoGridComponent = class {
1888
1251
  if (!rgCol) {
1889
1252
  return;
1890
1253
  }
1891
- await index.timeout();
1254
+ await dimension_helpers.timeout();
1892
1255
  const colGroup = rgCol.pin || 'rgCol';
1893
1256
  if (!this.columnProvider) {
1894
1257
  throw new Error('Not connected');
@@ -1916,7 +1279,7 @@ const RevoGridComponent = class {
1916
1279
  if (!this.dataProvider) {
1917
1280
  throw new Error('Not connected');
1918
1281
  }
1919
- return column_service.getVisibleSourceItem(this.dataProvider.stores[type].store);
1282
+ return dimension_helpers.getVisibleSourceItem(this.dataProvider.stores[type].store);
1920
1283
  }
1921
1284
  /**
1922
1285
  * Provides access to rows internal store observer
@@ -1975,19 +1338,19 @@ const RevoGridComponent = class {
1975
1338
  * Clear current grid focus. Grid has no longer focus on it.
1976
1339
  */
1977
1340
  async clearFocus() {
1978
- var _a;
1341
+ var _a, _b;
1979
1342
  const focused = (_a = this.viewport) === null || _a === void 0 ? void 0 : _a.getFocused();
1980
1343
  const event = this.beforefocuslost.emit(focused);
1981
1344
  if (event.defaultPrevented) {
1982
1345
  return;
1983
1346
  }
1984
- this.selectionStoreConnector.clearAll();
1347
+ (_b = this.selectionStoreConnector) === null || _b === void 0 ? void 0 : _b.clearAll();
1985
1348
  }
1986
1349
  /**
1987
1350
  * Get all active plugins instances
1988
1351
  */
1989
1352
  async getPlugins() {
1990
- return [...this.internalPlugins];
1353
+ return this.pluginService.get();
1991
1354
  }
1992
1355
  /**
1993
1356
  * Get the currently focused cell.
@@ -2014,6 +1377,15 @@ const RevoGridComponent = class {
2014
1377
  var _a, _b;
2015
1378
  return (_b = (_a = this.viewport) === null || _a === void 0 ? void 0 : _a.getSelectedRange()) !== null && _b !== void 0 ? _b : null;
2016
1379
  }
1380
+ /**
1381
+ * Refresh extra elements. Triggers re-rendering of extra elements and functions.
1382
+ * Part of extraElements and registerVNode methods.
1383
+ * Useful for plugins.
1384
+ */
1385
+ async refreshExtraElements() {
1386
+ var _a;
1387
+ (_a = this.extraService) === null || _a === void 0 ? void 0 : _a.refresh();
1388
+ }
2017
1389
  mousedownHandle(event) {
2018
1390
  const screenX = events.getPropertyFromEvent(event, 'screenX');
2019
1391
  const screenY = events.getPropertyFromEvent(event, 'screenY');
@@ -2080,7 +1452,7 @@ const RevoGridComponent = class {
2080
1452
  async onCellEdit(e) {
2081
1453
  var _a;
2082
1454
  const { defaultPrevented, detail } = this.beforeedit.emit(e.detail);
2083
- await index.timeout();
1455
+ await dimension_helpers.timeout();
2084
1456
  // apply data
2085
1457
  if (!defaultPrevented) {
2086
1458
  (_a = this.dataProvider) === null || _a === void 0 ? void 0 : _a.setCellData(detail);
@@ -2142,7 +1514,7 @@ const RevoGridComponent = class {
2142
1514
  // Column format change will trigger column structure update
2143
1515
  this.columnChanged(this.columns);
2144
1516
  }
2145
- columnChanged(newVal = []) {
1517
+ columnChanged(newVal = [], _prevVal = undefined, __watchName = 'columns', init = false) {
2146
1518
  if (!this.dimensionProvider || !this.columnProvider) {
2147
1519
  return;
2148
1520
  }
@@ -2151,7 +1523,7 @@ const RevoGridComponent = class {
2151
1523
  if (beforeSetEvent.defaultPrevented) {
2152
1524
  return;
2153
1525
  }
2154
- this.dimensionProvider.applyNewColumns(beforeSetEvent.detail.columns, this.disableVirtualX);
1526
+ this.dimensionProvider.applyNewColumns(beforeSetEvent.detail.columns, this.disableVirtualX, init);
2155
1527
  const beforeApplyEvent = this.beforecolumnapplied.emit(columnGather);
2156
1528
  if (beforeApplyEvent.defaultPrevented) {
2157
1529
  return;
@@ -2207,7 +1579,9 @@ const RevoGridComponent = class {
2207
1579
  break;
2208
1580
  case 'source':
2209
1581
  type = 'rgRow';
2210
- /** applied for source only for cross compatability between plugins */
1582
+ /**
1583
+ * Applied for source only for cross compatability between plugins
1584
+ */
2211
1585
  const beforesourceset = this.beforesourceset.emit({
2212
1586
  type,
2213
1587
  source: newVal,
@@ -2221,7 +1595,9 @@ const RevoGridComponent = class {
2221
1595
  });
2222
1596
  const newSource = [...beforesourceset.detail.source];
2223
1597
  this.dataProvider.setData(newSource, type, this.disableVirtualY);
2224
- /** applied for source only for cross compatability between plugins */
1598
+ /**
1599
+ * Applied for source only for cross compatability between plugins
1600
+ */
2225
1601
  if (watchName === 'source') {
2226
1602
  this.aftersourceset.emit({
2227
1603
  type,
@@ -2280,15 +1656,8 @@ const RevoGridComponent = class {
2280
1656
  * Grouping
2281
1657
  */
2282
1658
  groupingChanged(newVal = {}) {
2283
- let grPlugin;
2284
- for (let p of this.internalPlugins) {
2285
- const isGrouping = p;
2286
- if (!!isGrouping.setGrouping) {
2287
- grPlugin = isGrouping;
2288
- break;
2289
- }
2290
- }
2291
- grPlugin === null || grPlugin === void 0 ? void 0 : grPlugin.setGrouping(newVal || {});
1659
+ var _a;
1660
+ (_a = this.pluginService.getByClass(column_drag_plugin.GroupingRowPlugin)) === null || _a === void 0 ? void 0 : _a.setGrouping(newVal || {});
2292
1661
  }
2293
1662
  /**
2294
1663
  * Stretch Plugin Apply
@@ -2300,30 +1669,29 @@ const RevoGridComponent = class {
2300
1669
  if (isStretch === 'false') {
2301
1670
  isStretch = false;
2302
1671
  }
2303
- let stretch = this.internalPlugins.filter(p => column_drag_plugin.isStretchPlugin(p))[0];
1672
+ const pluginData = this.getPluginData();
1673
+ if (!pluginData) {
1674
+ return;
1675
+ }
1676
+ const stretch = this.pluginService.getByClass(column_drag_plugin.StretchColumn);
2304
1677
  if ((typeof isStretch === 'boolean' && isStretch) || isStretch === 'true') {
2305
1678
  if (!stretch) {
2306
- const pluginData = {
2307
- data: this.dataProvider,
2308
- column: this.columnProvider,
2309
- dimension: this.dimensionProvider,
2310
- viewport: this.viewportProvider,
2311
- selection: this.selectionStoreConnector,
2312
- };
2313
- this.internalPlugins.push(new column_drag_plugin.StretchColumn(this.element, pluginData));
1679
+ this.pluginService.add(new column_drag_plugin.StretchColumn(this.element, pluginData));
2314
1680
  }
2315
1681
  else if (column_drag_plugin.isStretchPlugin(stretch)) {
2316
1682
  stretch.applyStretch(this.columnProvider.getRawColumns());
2317
1683
  }
2318
1684
  }
2319
1685
  else if (stretch) {
2320
- const index = this.internalPlugins.indexOf(stretch);
2321
- this.internalPlugins.splice(index, 1);
1686
+ this.pluginService.remove(stretch);
2322
1687
  }
2323
1688
  }
2324
1689
  applyFilter(cfg) {
2325
1690
  this.filterconfigchanged.emit(cfg);
2326
1691
  }
1692
+ applySorting(cfg) {
1693
+ this.sortingconfigchanged.emit(cfg);
1694
+ }
2327
1695
  rowHeadersChange(rowHeaders) {
2328
1696
  this.rowheaderschanged.emit(rowHeaders);
2329
1697
  }
@@ -2331,26 +1699,16 @@ const RevoGridComponent = class {
2331
1699
  * Register external VNodes
2332
1700
  */
2333
1701
  registerOutsideVNodes(elements = []) {
2334
- this.extraElements = [...this.extraElements, ...elements];
1702
+ this.extraElements = elements;
2335
1703
  }
2336
1704
  additionalDataChanged(data) {
2337
1705
  this.additionaldatachanged.emit(data);
2338
1706
  }
2339
- pluginsChanged(plugins = [], _prevPlugins) {
2340
- // pass data provider to plugins
2341
- const pluginData = this.getPluginData();
2342
- if (!pluginData) {
2343
- return;
2344
- }
2345
- // todo: remove old plugins if any was removed based on _prevPlugins
2346
- // register user plugins
2347
- plugins === null || plugins === void 0 ? void 0 : plugins.forEach(userPlugin => {
2348
- const existingPlugin = this.internalPlugins.find(createdPlugin => createdPlugin instanceof userPlugin);
2349
- if (existingPlugin) {
2350
- return;
2351
- }
2352
- this.internalPlugins.push(new userPlugin(this.element, pluginData));
2353
- });
1707
+ /**
1708
+ * User can add plugins via plugins property
1709
+ */
1710
+ pluginsChanged(plugins = [], prevPlugins) {
1711
+ this.pluginService.addUserPluginsAndCreate(this.element, plugins, prevPlugins, this.getPluginData());
2354
1712
  }
2355
1713
  // #endregion
2356
1714
  // #region Plugins
@@ -2362,35 +1720,39 @@ const RevoGridComponent = class {
2362
1720
  if (!pluginData) {
2363
1721
  return;
2364
1722
  }
1723
+ // register system plugins
1724
+ this.setCorePlugins(pluginData);
1725
+ // register user plugins
1726
+ this.pluginsChanged(this.plugins);
1727
+ }
1728
+ setCorePlugins(pluginData) {
2365
1729
  if (this.accessible) {
2366
- this.internalPlugins.push(new WCAGPlugin(this.element, pluginData));
1730
+ this.pluginService.add(new WCAGPlugin(this.element, pluginData));
2367
1731
  }
2368
1732
  // register auto size plugin
2369
1733
  if (this.autoSizeColumn) {
2370
- this.internalPlugins.push(new column_drag_plugin.AutoSizeColumnPlugin(this.element, pluginData, typeof this.autoSizeColumn === 'object'
1734
+ this.pluginService.add(new column_drag_plugin.AutoSizeColumnPlugin(this.element, pluginData, typeof this.autoSizeColumn === 'object'
2371
1735
  ? this.autoSizeColumn
2372
1736
  : undefined));
2373
1737
  }
2374
1738
  // register filter plugin
2375
1739
  if (this.filter) {
2376
- this.internalPlugins.push(new column_drag_plugin.FilterPlugin(this.element, pluginData, typeof this.filter === 'object' ? this.filter : undefined));
1740
+ this.pluginService.add(new column_drag_plugin.FilterPlugin(this.element, pluginData, typeof this.filter === 'object' ? this.filter : undefined));
2377
1741
  }
2378
1742
  // register export plugin
2379
1743
  if (this.exporting) {
2380
- this.internalPlugins.push(new column_drag_plugin.ExportFilePlugin(this.element, pluginData));
1744
+ this.pluginService.add(new column_drag_plugin.ExportFilePlugin(this.element, pluginData));
2381
1745
  }
2382
1746
  // register sorting plugin
2383
- this.internalPlugins.push(new SortingPlugin(this.element, pluginData));
1747
+ this.pluginService.add(new column_drag_plugin.SortingPlugin(this.element, pluginData));
2384
1748
  // register grouping plugin
2385
- this.internalPlugins.push(new GroupingRowPlugin(this.element, pluginData));
1749
+ this.pluginService.add(new column_drag_plugin.GroupingRowPlugin(this.element, pluginData));
2386
1750
  if (this.canMoveColumns) {
2387
- this.internalPlugins.push(new column_drag_plugin.ColumnPlugin(this.element, pluginData));
1751
+ this.pluginService.add(new column_drag_plugin.ColumnMovePlugin(this.element, pluginData));
2388
1752
  }
2389
- // register user plugins
2390
- this.pluginsChanged(this.plugins);
2391
1753
  }
2392
1754
  getPluginData() {
2393
- if (!this.dimensionProvider || !this.dataProvider || !this.columnProvider || !this.viewportProvider) {
1755
+ if (!this.dimensionProvider || !this.dataProvider || !this.columnProvider || !this.viewportProvider || !this.selectionStoreConnector) {
2394
1756
  return;
2395
1757
  }
2396
1758
  // pass data provider to plugins
@@ -2400,12 +1762,12 @@ const RevoGridComponent = class {
2400
1762
  dimension: this.dimensionProvider,
2401
1763
  viewport: this.viewportProvider,
2402
1764
  selection: this.selectionStoreConnector,
1765
+ plugins: this.pluginService,
2403
1766
  };
2404
1767
  return pluginData;
2405
1768
  }
2406
1769
  removePlugins() {
2407
- this.internalPlugins.forEach(p => { var _a; return (_a = p.destroy) === null || _a === void 0 ? void 0 : _a.call(p); });
2408
- this.internalPlugins = [];
1770
+ this.pluginService.destroy();
2409
1771
  }
2410
1772
  // #endregion
2411
1773
  // if reconnect to dom we need to set up plugins
@@ -2413,6 +1775,7 @@ const RevoGridComponent = class {
2413
1775
  if (this.isInited) {
2414
1776
  this.setPlugins();
2415
1777
  }
1778
+ this.created.emit();
2416
1779
  }
2417
1780
  /**
2418
1781
  * Called once just after the component is first connected to the DOM.
@@ -2440,7 +1803,7 @@ const RevoGridComponent = class {
2440
1803
  // set data
2441
1804
  this.applyStretch(this.stretch);
2442
1805
  this.themeChanged(this.theme, undefined, undefined, true);
2443
- this.columnChanged(this.columns);
1806
+ this.columnChanged(this.columns, undefined, undefined, true);
2444
1807
  this.dataSourceChanged(this.source, undefined, 'source');
2445
1808
  this.dataSourceChanged(this.pinnedTopSource, undefined, 'pinnedTopSource');
2446
1809
  this.dataSourceChanged(this.pinnedBottomSource, undefined, 'pinnedBottomSource');
@@ -2448,7 +1811,10 @@ const RevoGridComponent = class {
2448
1811
  this.trimmedRowsChanged(this.trimmedRows);
2449
1812
  }
2450
1813
  this.rowDefChanged(this.rowDefinitions);
2451
- this.groupingChanged(this.grouping);
1814
+ // init grouping
1815
+ if (this.grouping && Object.keys(this.grouping).length > 0) {
1816
+ this.groupingChanged(this.grouping);
1817
+ }
2452
1818
  // init scrolling service
2453
1819
  this.scrollingService = new GridScrollingService((e) => {
2454
1820
  var _a;
@@ -2473,7 +1839,7 @@ const RevoGridComponent = class {
2473
1839
  this.aftergridrender.emit();
2474
1840
  }
2475
1841
  render() {
2476
- if (!this.dimensionProvider || !this.dataProvider || !this.columnProvider || !this.viewportProvider) {
1842
+ if (!this.dimensionProvider || !this.dataProvider || !this.columnProvider || !this.viewportProvider || !this.selectionStoreConnector) {
2477
1843
  return;
2478
1844
  }
2479
1845
  const contentHeight = this.dimensionProvider.stores['rgRow'].store.get('realSize');
@@ -2501,7 +1867,7 @@ const RevoGridComponent = class {
2501
1867
  // Row headers setting
2502
1868
  if (this.rowHeaders && this.viewport.columns.length) {
2503
1869
  const anyView = this.viewport.columns[0];
2504
- viewportSections.push(index$1.h("revogr-row-headers", { additionalData: this.additionalData, height: contentHeight, rowClass: this.rowClass, resize: this.resize, dataPorts: anyView.dataPorts, headerProp: anyView.headerProp, jobsBeforeRender: this.jobsBeforeRender, rowHeaderColumn: typeof this.rowHeaders === 'object' ? this.rowHeaders : undefined, onScrollview: ({ detail: e }) => this.scrollingService.proxyScroll(e, 'headerRow'), onRef: ({ detail: e }) => this.scrollingService.registerElement(e, 'headerRow') }));
1870
+ viewportSections.push(index.h("revogr-row-headers", { additionalData: this.additionalData, height: contentHeight, rowClass: this.rowClass, resize: this.resize, dataPorts: anyView.dataPorts, headerProp: anyView.headerProp, jobsBeforeRender: this.jobsBeforeRender, rowHeaderColumn: typeof this.rowHeaders === 'object' ? this.rowHeaders : undefined, onScrollview: ({ detail: e }) => this.scrollingService.proxyScroll(e, 'headerRow'), onRef: ({ detail: e }) => this.scrollingService.registerElement(e, 'headerRow') }));
2505
1871
  }
2506
1872
  // Viewport section render
2507
1873
  const isMobile = isMobileDevice();
@@ -2511,21 +1877,22 @@ const RevoGridComponent = class {
2511
1877
  const headerProperties = Object.assign(Object.assign({}, view.headerProp), { type: view.type, additionalData: this.additionalData, viewportCol: view.viewportCol, selectionStore: view.columnSelectionStore, canResize: this.resize, readonly: this.readonly, columnFilter: !!this.filter });
2512
1878
  // Column headers
2513
1879
  const dataViews = [
2514
- index$1.h("revogr-header", Object.assign({}, headerProperties, { slot: viewport_helpers.HEADER_SLOT })),
1880
+ index.h("revogr-header", Object.assign({}, headerProperties, { slot: viewport_helpers.HEADER_SLOT })),
2515
1881
  ];
2516
1882
  // Render viewport data (vertical sections)
2517
1883
  view.dataPorts.forEach(data => {
2518
1884
  const key = `${data.type}_${view.type}`;
2519
- const dataView = (index$1.h("revogr-overlay-selection", Object.assign({}, data, { isMobileDevice: isMobile, selectionStore: data.segmentSelectionStore, onSelectall: () => this.selectionStoreConnector.selectAll(), editors: this.editors, readonly: this.readonly, range: this.range, useClipboard: this.useClipboard, applyChangesOnClose: this.applyOnClose, additionalData: this.additionalData, slot: data.slot, onBeforenextvpfocus: (e) => this.selectionStoreConnector.beforeNextFocusCell(e.detail), onCanceledit: () => this.selectionStoreConnector.setEdit(false), onSetedit: ({ detail }) => {
1885
+ const dataView = (index.h("revogr-overlay-selection", Object.assign({}, data, { isMobileDevice: isMobile, onSelectall: () => { var _a; return (_a = this.selectionStoreConnector) === null || _a === void 0 ? void 0 : _a.selectAll(); }, editors: this.editors, readonly: this.readonly, range: this.range, useClipboard: this.useClipboard, applyChangesOnClose: this.applyOnClose, additionalData: this.additionalData, slot: data.slot, onBeforenextvpfocus: (e) => { var _a; return (_a = this.selectionStoreConnector) === null || _a === void 0 ? void 0 : _a.beforeNextFocusCell(e.detail); }, onCanceledit: () => { var _a; return (_a = this.selectionStoreConnector) === null || _a === void 0 ? void 0 : _a.setEdit(false); }, onSetedit: ({ detail }) => {
1886
+ var _a;
2520
1887
  const event = this.beforeeditstart.emit(detail);
2521
1888
  if (!event.defaultPrevented) {
2522
- this.selectionStoreConnector.setEdit(detail.val);
1889
+ (_a = this.selectionStoreConnector) === null || _a === void 0 ? void 0 : _a.setEdit(detail.val);
2523
1890
  }
2524
- } }), index$1.h("revogr-data", Object.assign({}, data, { colType: view.type, key: key, readonly: this.readonly, range: this.range, rowClass: this.rowClass, rowSelectionStore: data.rowSelectionStore, additionalData: this.additionalData, jobsBeforeRender: this.jobsBeforeRender, slot: viewport_helpers.DATA_SLOT }), index$1.h("slot", { name: `data-${view.type}-${data.type}` })), index$1.h("revogr-temp-range", { selectionStore: data.segmentSelectionStore, dimensionRow: data.dimensionRow, dimensionCol: data.dimensionCol }), index$1.h("revogr-focus", { colData: data.colData, dataStore: data.dataStore, focusTemplate: this.focusTemplate, rowType: data.type, colType: view.type, selectionStore: data.segmentSelectionStore, dimensionRow: data.dimensionRow, dimensionCol: data.dimensionCol }, index$1.h("slot", { name: `focus-${view.type}-${data.type}` }))));
1891
+ } }), index.h("revogr-data", Object.assign({}, data, { colType: view.type, key: key, readonly: this.readonly, range: this.range, rowClass: this.rowClass, rowSelectionStore: data.rowSelectionStore, additionalData: this.additionalData, jobsBeforeRender: this.jobsBeforeRender, slot: viewport_helpers.DATA_SLOT }), index.h("slot", { name: `data-${view.type}-${data.type}` })), index.h("revogr-temp-range", { selectionStore: data.selectionStore, dimensionRow: data.dimensionRow, dimensionCol: data.dimensionCol }), index.h("revogr-focus", { colData: data.colData, dataStore: data.dataStore, focusTemplate: this.focusTemplate, rowType: data.type, colType: view.type, selectionStore: data.selectionStore, dimensionRow: data.dimensionRow, dimensionCol: data.dimensionCol }, index.h("slot", { name: `focus-${view.type}-${data.type}` }))));
2525
1892
  dataViews.push(dataView);
2526
1893
  });
2527
1894
  // Add viewport scroll in the end
2528
- viewPortHtml.push(index$1.h("revogr-viewport-scroll", Object.assign({}, view.prop, { ref: el => this.scrollingService.registerElement(el, `${view.prop.key}`), onScrollviewport: e => this.scrollingService.proxyScroll(e.detail, `${view.prop.key}`), onScrollviewportsilent: e => this.scrollingService.scrollSilentService(e.detail, `${view.prop.key}`) }), dataViews));
1895
+ viewPortHtml.push(index.h("revogr-viewport-scroll", Object.assign({}, view.prop, { ref: el => this.scrollingService.registerElement(el, `${view.prop.key}`), onScrollviewport: e => this.scrollingService.proxyScroll(e.detail, `${view.prop.key}`), onScrollviewportsilent: e => this.scrollingService.scrollSilentService(e.detail, `${view.prop.key}`) }), dataViews));
2529
1896
  }
2530
1897
  viewportSections.push(viewPortHtml);
2531
1898
  // #endregion
@@ -2533,18 +1900,19 @@ const RevoGridComponent = class {
2533
1900
  const typeCol = 'rgCol';
2534
1901
  const viewports = this.viewportProvider.stores;
2535
1902
  const dimensions = this.dimensionProvider.stores;
2536
- return (index$1.h(index$1.Host, null, this.hideAttribution ? null : (index$1.h("revogr-attribution", { class: "attribution" })), index$1.h("div", { class: "main-viewport", onClick: (e) => {
1903
+ return (index.h(index.Host, null, this.hideAttribution ? null : (index.h("revogr-attribution", { class: "attribution" })), index.h("slot", { name: "header" }), index.h("div", { class: "main-viewport", onClick: (e) => {
2537
1904
  var _a;
2538
1905
  if (e.currentTarget === e.target) {
2539
1906
  (_a = this.viewport) === null || _a === void 0 ? void 0 : _a.clearEdit();
2540
1907
  }
2541
- } }, index$1.h("div", { class: "viewports" }, index$1.h("slot", { name: "viewport" }), viewportSections, index$1.h("revogr-scroll-virtual", { class: "vertical", dimension: typeRow, viewportStore: viewports[typeRow].store, dimensionStore: dimensions[typeRow].store, ref: el => this.scrollingService.registerElement(el, 'rowScroll'), onScrollvirtual: e => this.scrollingService.proxyScroll(e.detail) }), index$1.h(OrderRenderer, { ref: e => (this.orderService = e) }))), index$1.h("revogr-scroll-virtual", { class: "horizontal", dimension: typeCol, viewportStore: viewports[typeCol].store, dimensionStore: dimensions[typeCol].store, ref: el => this.scrollingService.registerElement(el, 'colScroll'), onScrollvirtual: e => this.scrollingService.proxyScroll(e.detail) }), index$1.h("revogr-extra", { nodes: this.extraElements })));
1908
+ } }, index.h("div", { class: "viewports" }, index.h("slot", { name: "viewport" }), viewportSections, index.h("revogr-scroll-virtual", { class: "vertical", dimension: typeRow, viewportStore: viewports[typeRow].store, dimensionStore: dimensions[typeRow].store, ref: el => this.scrollingService.registerElement(el, 'rowScroll'), onScrollvirtual: e => this.scrollingService.proxyScroll(e.detail) }), index.h(OrderRenderer, { ref: e => (this.orderService = e) }))), index.h("revogr-scroll-virtual", { class: "horizontal", dimension: typeCol, viewportStore: viewports[typeCol].store, dimensionStore: dimensions[typeCol].store, ref: el => this.scrollingService.registerElement(el, 'colScroll'), onScrollvirtual: e => this.scrollingService.proxyScroll(e.detail) }), index.h("revogr-extra", { ref: el => (this.extraService = el), nodes: this.extraElements }), index.h("slot", { name: "footer" })));
2542
1909
  }
2543
1910
  disconnectedCallback() {
2544
- // Remove all plugins, to avoid memory leaks and unexpected behaviour when the component is removed
1911
+ // Remove all plugins, to avoid memory leaks
1912
+ // and unexpected behaviour when the component is removed
2545
1913
  this.removePlugins();
2546
1914
  }
2547
- get element() { return index$1.getElement(this); }
1915
+ get element() { return index.getElement(this); }
2548
1916
  static get watchers() { return {
2549
1917
  "columnTypes": ["columnTypesChanged"],
2550
1918
  "columns": ["columnChanged"],
@@ -2560,6 +1928,7 @@ const RevoGridComponent = class {
2560
1928
  "grouping": ["groupingChanged"],
2561
1929
  "stretch": ["applyStretch"],
2562
1930
  "filter": ["applyFilter"],
1931
+ "sorting": ["applySorting"],
2563
1932
  "rowHeaders": ["rowHeadersChange"],
2564
1933
  "registerVNode": ["registerOutsideVNodes"],
2565
1934
  "additionalData": ["additionalDataChanged"],