@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
@@ -2,15 +2,15 @@
2
2
  * Built by Revolist OU ❤️
3
3
  */
4
4
  import { h, r as registerInstance, c as createEvent, H as Host, a as getElement } from './index-a61f225b.js';
5
- import { G as isGrouping, J as GROUP_EXPANDED, K as getParsedGroup, L as isSameGroup, M as GROUP_DEPTH, P as PSEUDO_GROUP_ITEM_VALUE, N as PSEUDO_GROUP_ITEM_ID, O as GROUPING_ROW_TYPE, g as getPhysical, e as setItems, Q as PSEUDO_GROUP_COLUMN, R as GROUP_EXPAND_EVENT, T as gatherGrouping, U as isGroupingColumn, B as isArray, V as baseProperty, W as isArrayLike, X as getTag, Y as baseKeys, y as getColumnByProp, D as DataStore, b as getSourceItem, A as reduce, f as getSourceItemVirtualIndexByProp, d as setSourceByPhysicalIndex, s as setSourceByVirtualIndex, r as getColumnType, a as getVisibleSourceItem, h as gatherTrimmedItems, u as getColumnSizes, Z as EMPTY_INDEX, w as getColumns, _ as SelectionStoreConnector } from './column.service-751345b2.js';
6
- import { B as BasePlugin, c as columnTypes, F as FILTER_TRIMMED_TYPE, r as rowTypes, k as forEach, i as isRowType, D as DimensionStore, a as isStretchPlugin, S as StretchColumn, A as AutoSizeColumnPlugin, e as FilterPlugin, E as ExportFilePlugin, C as ColumnPlugin } from './column.drag.plugin-3cc77986.js';
7
- import { c as isObjectLike, b as baseGetTag, d as debounce } from './debounce-72878ced.js';
8
- import { a as getItemByIndex, R as RESIZE_INTERVAL, t as timeout } from './index-1dcad6ef.js';
9
- import { V as ViewportStore } from './row-header-utils-3dfbb81f.js';
5
+ import { x as reduce, r as getColumnType, s as getColumnSizes, E as EMPTY_INDEX, w as getColumnByProp, u as getColumns, F as SelectionStoreConnector } from './column.service-a6a7c415.js';
6
+ import { c as columnTypes, m as forEach, r as rowTypes, i as isRowType, D as DimensionStore, B as BasePlugin, G as GroupingRowPlugin, S as StretchColumn, a as isStretchPlugin, A as AutoSizeColumnPlugin, f as FilterPlugin, E as ExportFilePlugin, l as SortingPlugin, C as ColumnMovePlugin } from './column.drag.plugin-50f49fa9.js';
7
+ import { D as DataStore, b as getSourceItem, f as getSourceItemVirtualIndexByProp, d as setSourceByPhysicalIndex, s as setSourceByVirtualIndex, a as getVisibleSourceItem, h as gatherTrimmedItems, k as getItemByIndex, R as RESIZE_INTERVAL, u as timeout } from './dimension.helpers-d0d709c4.js';
8
+ import { d as debounce } from './debounce-b3166f78.js';
9
+ import { V as ViewportStore } from './viewport.store-afa8c4fe.js';
10
10
  import { v as viewportDataPartition, H as HEADER_SLOT, C as CONTENT_SLOT, F as FOOTER_SLOT, D as DATA_SLOT } from './viewport.helpers-7e7f9dad.js';
11
11
  import { g as getPropertyFromEvent } from './events-cf0893a3.js';
12
12
  import './filter.button-d40ab17b.js';
13
- import './header-cell-renderer-32d2ed96.js';
13
+ import './header-cell-renderer-36ecbdef.js';
14
14
 
15
15
  class ThemeCompact {
16
16
  constructor() {
@@ -77,750 +77,6 @@ function getTheme(theme) {
77
77
  return DEFAULT_THEME;
78
78
  }
79
79
 
80
- // provide collapse data
81
- function doCollapse(pIndex, source) {
82
- const model = source[pIndex];
83
- const collapseValue = model[PSEUDO_GROUP_ITEM_VALUE];
84
- const trimmed = {};
85
- let i = pIndex + 1;
86
- const total = source.length;
87
- while (i < total) {
88
- const currentModel = source[i];
89
- if (isGrouping(currentModel)) {
90
- const currentValue = currentModel[PSEUDO_GROUP_ITEM_VALUE];
91
- if (!currentValue.length || !currentValue.startsWith(collapseValue + ',')) {
92
- break;
93
- }
94
- currentModel[GROUP_EXPANDED] = false;
95
- }
96
- trimmed[i++] = true;
97
- }
98
- model[GROUP_EXPANDED] = false;
99
- return { trimmed };
100
- }
101
- /**
102
- *
103
- * @param pIndex - physical index
104
- * @param vIndex - virtual index, need to update item collection
105
- * @param source - data source
106
- * @param rowItemsIndexes - rgRow indexes
107
- */
108
- function doExpand(vIndex, source, rowItemsIndexes) {
109
- const physicalIndex = rowItemsIndexes[vIndex];
110
- const model = source[physicalIndex];
111
- const currentGroup = getParsedGroup(model[PSEUDO_GROUP_ITEM_ID]);
112
- const trimmed = {};
113
- // no group found
114
- if (!currentGroup) {
115
- return { trimmed };
116
- }
117
- const groupItems = [];
118
- model[GROUP_EXPANDED] = true;
119
- let i = physicalIndex + 1;
120
- const total = source.length;
121
- let groupLevelOnly = 0;
122
- // go through all rows
123
- while (i < total) {
124
- const currentModel = source[i];
125
- const isGroup = isGrouping(currentModel);
126
- // group found
127
- if (isGroup) {
128
- if (!isSameGroup(currentGroup, model, currentModel)) {
129
- break;
130
- }
131
- else if (!groupLevelOnly) {
132
- // if get group first it's group only level
133
- groupLevelOnly = currentModel[GROUP_DEPTH];
134
- }
135
- }
136
- // level 0 or same depth
137
- if (!groupLevelOnly || (isGroup && groupLevelOnly === currentModel[GROUP_DEPTH])) {
138
- trimmed[i] = false;
139
- groupItems.push(i);
140
- }
141
- i++;
142
- }
143
- const result = {
144
- trimmed,
145
- };
146
- if (groupItems.length) {
147
- const items = [...rowItemsIndexes];
148
- items.splice(vIndex + 1, 0, ...groupItems);
149
- result.items = items;
150
- }
151
- return result;
152
- }
153
-
154
- const TRIMMED_GROUPING = 'grouping';
155
- /**
156
- * Prepare trimming updated indexes for grouping
157
- * @param initiallyTrimed
158
- * @param firstLevelMap
159
- * @param secondLevelMap
160
- */
161
- function processDoubleConversionTrimmed(initiallyTrimed, firstLevelMap, secondLevelMap) {
162
- const trimemedOptionsToUpgrade = {};
163
- /**
164
- * go through all groups except grouping
165
- */
166
- for (let type in initiallyTrimed) {
167
- if (type === TRIMMED_GROUPING) {
168
- continue;
169
- }
170
- const items = initiallyTrimed[type];
171
- const newItems = {};
172
- for (let initialIndex in items) {
173
- /**
174
- * if item exists we find it in collection
175
- * we support 2 level of conversions
176
- */
177
- let newConversionIndex = firstLevelMap[initialIndex];
178
- if (secondLevelMap) {
179
- newConversionIndex = secondLevelMap[newConversionIndex];
180
- }
181
- /**
182
- * if item was trimmed previously
183
- * trimming makes sense to apply
184
- */
185
- if (items[initialIndex]) {
186
- newItems[newConversionIndex] = true;
187
- /**
188
- * If changes present apply changes to new source
189
- */
190
- if (newConversionIndex !== parseInt(initialIndex, 10)) {
191
- trimemedOptionsToUpgrade[type] = newItems;
192
- }
193
- }
194
- }
195
- }
196
- return trimemedOptionsToUpgrade;
197
- }
198
-
199
- class GroupingRowPlugin extends BasePlugin {
200
- get hasProps() {
201
- var _a, _b, _c;
202
- 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);
203
- }
204
- get store() {
205
- return this.providers.data.stores[GROUPING_ROW_TYPE].store;
206
- }
207
- // proxy for items get
208
- get rowItems() {
209
- return this.store.get('items');
210
- }
211
- get trimmed() {
212
- return this.store.get('trimmed');
213
- }
214
- constructor(revogrid, providers) {
215
- super(revogrid, providers);
216
- this.revogrid = revogrid;
217
- this.providers = providers;
218
- }
219
- // befoce cell focus
220
- onFocus(e) {
221
- if (isGrouping(e.detail.model)) {
222
- e.preventDefault();
223
- }
224
- }
225
- // expand event triggered
226
- onExpand({ virtualIndex }) {
227
- const { source } = this.getSource();
228
- let newTrimmed = this.trimmed[TRIMMED_GROUPING];
229
- let i = getPhysical(this.store, virtualIndex);
230
- const model = source[i];
231
- const prevExpanded = model[GROUP_EXPANDED];
232
- if (!prevExpanded) {
233
- const { trimmed, items } = doExpand(virtualIndex, source, this.rowItems);
234
- newTrimmed = Object.assign(Object.assign({}, newTrimmed), trimmed);
235
- if (items) {
236
- setItems(this.store, items);
237
- }
238
- }
239
- else {
240
- const { trimmed } = doCollapse(i, source);
241
- newTrimmed = Object.assign(Object.assign({}, newTrimmed), trimmed);
242
- this.revogrid.clearFocus();
243
- }
244
- this.store.set('source', source);
245
- this.revogrid.addTrimmed(newTrimmed, TRIMMED_GROUPING);
246
- }
247
- // get source based on proxy item collection to preserve rgRow order
248
- getSource(withoutGrouping = false) {
249
- const source = this.store.get('source');
250
- const items = this.store.get('proxyItems');
251
- let index = 0;
252
- // order important here, expected parent is first, then others
253
- return items.reduce((result, i) => {
254
- const model = source[i];
255
- if (!withoutGrouping) {
256
- result.source.push(model);
257
- return result;
258
- }
259
- // grouping filter
260
- if (isGrouping(model)) {
261
- if (model[GROUP_EXPANDED]) {
262
- result.prevExpanded[model[PSEUDO_GROUP_ITEM_VALUE]] = true;
263
- }
264
- }
265
- else {
266
- result.source.push(model);
267
- result.oldNewIndexes[i] = index;
268
- index++;
269
- }
270
- return result;
271
- }, {
272
- source: [],
273
- prevExpanded: {},
274
- oldNewIndexes: {},
275
- });
276
- }
277
- setColumnGrouping(cols) {
278
- // if 0 column as holder
279
- if (cols === null || cols === void 0 ? void 0 : cols.length) {
280
- cols[0][PSEUDO_GROUP_COLUMN] = true;
281
- return true;
282
- }
283
- return false;
284
- }
285
- setColumns({ columns }) {
286
- for (let type of columnTypes) {
287
- if (this.setColumnGrouping(columns[type])) {
288
- break;
289
- }
290
- }
291
- }
292
- // evaluate drag between groups
293
- onDrag(e) {
294
- const { from, to } = e.detail;
295
- const isDown = to - from >= 0;
296
- const { source } = this.getSource();
297
- const items = this.rowItems;
298
- let i = isDown ? from : to;
299
- const end = isDown ? to : from;
300
- for (; i < end; i++) {
301
- const model = source[items[i]];
302
- const isGroup = isGrouping(model);
303
- if (isGroup) {
304
- e.preventDefault();
305
- return;
306
- }
307
- }
308
- }
309
- beforeTrimmedApply(trimmed, type) {
310
- /** Before filter apply remove grouping filtering */
311
- if (type === FILTER_TRIMMED_TYPE) {
312
- const source = this.store.get('source');
313
- for (let index in trimmed) {
314
- if (trimmed[index] && isGrouping(source[index])) {
315
- trimmed[index] = false;
316
- }
317
- }
318
- }
319
- }
320
- // subscribe to grid events to process them accordingly
321
- subscribe() {
322
- /** if grouping present and new data source arrived */
323
- this.addEventListener('beforesourceset', ({ detail }) => this.onDataSet(detail));
324
- this.addEventListener('beforecolumnsset', ({ detail }) => this.setColumns(detail));
325
- /**
326
- * filter applied need to clear grouping and apply again
327
- * based on new results can be new grouping
328
- */
329
- this.addEventListener('beforetrimmed', ({ detail: { trimmed, trimmedType } }) => this.beforeTrimmedApply(trimmed, trimmedType));
330
- /**
331
- * sorting applied need to clear grouping and apply again
332
- * based on new results whole grouping order will changed
333
- */
334
- this.addEventListener('aftersortingapply', () => this.doSourceUpdate(Object.assign({}, this.options)));
335
- /**
336
- * Apply logic for focus inside of grouping
337
- * We can't focus on grouping rows, navigation only inside of groups for now
338
- */
339
- this.addEventListener('beforecellfocus', e => this.onFocus(e));
340
- /**
341
- * Prevent rgRow drag outside the group
342
- */
343
- this.addEventListener('roworderchanged', e => this.onDrag(e));
344
- /**
345
- * When grouping expand icon was clicked
346
- */
347
- this.addEventListener(GROUP_EXPAND_EVENT, ({ detail }) => this.onExpand(detail));
348
- }
349
- /**
350
- * Starts global source update with group clearing and applying new one
351
- * Initiated when need to reapply grouping
352
- */
353
- doSourceUpdate(options) {
354
- var _a;
355
- if (!this.hasProps) {
356
- return;
357
- }
358
- /**
359
- * Get source without grouping
360
- * @param newOldIndexMap - provides us mapping with new indexes vs old indexes, we would use it for trimmed mapping
361
- */
362
- const { source, prevExpanded, oldNewIndexes } = this.getSource(true);
363
- /**
364
- * Group again
365
- * @param oldNewIndexMap - provides us mapping with new indexes vs old indexes
366
- */
367
- const { sourceWithGroups, depth, trimmed, oldNewIndexMap, childrenByGroup, } = gatherGrouping(source, ((_a = this.options) === null || _a === void 0 ? void 0 : _a.props) || [], Object.assign({ prevExpanded }, options));
368
- // setup source
369
- this.providers.data.setData(sourceWithGroups, GROUPING_ROW_TYPE, this.revogrid.disableVirtualY, { depth, customRenderer: options === null || options === void 0 ? void 0 : options.groupLabelTemplate }, true);
370
- this.updateTrimmed(trimmed, childrenByGroup, oldNewIndexes !== null && oldNewIndexes !== void 0 ? oldNewIndexes : {}, oldNewIndexMap);
371
- }
372
- /**
373
- * Apply grouping on data set
374
- * Clear grouping from source
375
- * If source came from other plugin
376
- */
377
- onDataSet(data) {
378
- var _a;
379
- if (!this.hasProps || !(data === null || data === void 0 ? void 0 : data.source) || !data.source.length) {
380
- return;
381
- }
382
- const source = data.source.filter(s => !isGrouping(s));
383
- const expanded = this.revogrid.grouping || {};
384
- const { sourceWithGroups, depth, trimmed, oldNewIndexMap, childrenByGroup, } = gatherGrouping(source, ((_a = this.options) === null || _a === void 0 ? void 0 : _a.props) || [], Object.assign({}, (expanded || {})));
385
- data.source = sourceWithGroups;
386
- this.providers.data.setGrouping({ depth });
387
- this.updateTrimmed(trimmed, childrenByGroup, oldNewIndexMap);
388
- }
389
- // apply grouping
390
- setGrouping(options) {
391
- // unsubscribe from all events when group applied
392
- this.clearSubscriptions();
393
- this.options = options;
394
- // clear props, no grouping exists
395
- if (!options.props || !Object.keys(options.props).length) {
396
- this.clearGrouping();
397
- return;
398
- }
399
- // props exist and source inited
400
- const { source } = this.getSource();
401
- if (source.length) {
402
- this.doSourceUpdate(Object.assign({}, options));
403
- }
404
- // props exist and columns inited
405
- for (let t of columnTypes) {
406
- if (this.setColumnGrouping(this.providers.column.getColumns(t))) {
407
- this.providers.column.refreshByType(t);
408
- break;
409
- }
410
- }
411
- // if has any grouping subscribe to events again
412
- this.subscribe();
413
- }
414
- // clear grouping
415
- clearGrouping() {
416
- // clear columns
417
- columnTypes.forEach(t => {
418
- const cols = this.providers.column.getColumns(t);
419
- let deleted = false;
420
- cols.forEach(c => {
421
- if (isGroupingColumn(c)) {
422
- delete c[PSEUDO_GROUP_COLUMN];
423
- deleted = true;
424
- }
425
- });
426
- // if column store had grouping clear and refresh
427
- if (deleted) {
428
- this.providers.column.refreshByType(t);
429
- }
430
- });
431
- // clear rows
432
- const { source, oldNewIndexes } = this.getSource(true);
433
- this.providers.data.setData(source, GROUPING_ROW_TYPE, this.revogrid.disableVirtualY, undefined, true);
434
- this.updateTrimmed(undefined, undefined, oldNewIndexes);
435
- }
436
- updateTrimmed(trimmedGroup = {}, _childrenByGroup = {}, firstLevelMap = {}, secondLevelMap) {
437
- // map previously trimmed data
438
- const trimemedOptionsToUpgrade = processDoubleConversionTrimmed(this.trimmed, firstLevelMap, secondLevelMap);
439
- for (let type in trimemedOptionsToUpgrade) {
440
- this.revogrid.addTrimmed(trimemedOptionsToUpgrade[type], type);
441
- }
442
- // const emptyGroups = this.filterOutEmptyGroups(trimemedOptionsToUpgrade, childrenByGroup);
443
- // setup trimmed data for grouping
444
- this.revogrid.addTrimmed(Object.assign({}, trimmedGroup), TRIMMED_GROUPING);
445
- }
446
- }
447
-
448
- /** `Object#toString` result references. */
449
- var stringTag = '[object String]';
450
-
451
- /**
452
- * Checks if `value` is classified as a `String` primitive or object.
453
- *
454
- * @static
455
- * @since 0.1.0
456
- * @memberOf _
457
- * @category Lang
458
- * @param {*} value The value to check.
459
- * @returns {boolean} Returns `true` if `value` is a string, else `false`.
460
- * @example
461
- *
462
- * _.isString('abc');
463
- * // => true
464
- *
465
- * _.isString(1);
466
- * // => false
467
- */
468
- function isString(value) {
469
- return typeof value == 'string' ||
470
- (!isArray(value) && isObjectLike(value) && baseGetTag(value) == stringTag);
471
- }
472
-
473
- /**
474
- * Gets the size of an ASCII `string`.
475
- *
476
- * @private
477
- * @param {string} string The string inspect.
478
- * @returns {number} Returns the string size.
479
- */
480
- var asciiSize = baseProperty('length');
481
-
482
- const asciiSize$1 = asciiSize;
483
-
484
- /** Used to compose unicode character classes. */
485
- var rsAstralRange$1 = '\\ud800-\\udfff',
486
- rsComboMarksRange$1 = '\\u0300-\\u036f',
487
- reComboHalfMarksRange$1 = '\\ufe20-\\ufe2f',
488
- rsComboSymbolsRange$1 = '\\u20d0-\\u20ff',
489
- rsComboRange$1 = rsComboMarksRange$1 + reComboHalfMarksRange$1 + rsComboSymbolsRange$1,
490
- rsVarRange$1 = '\\ufe0e\\ufe0f';
491
-
492
- /** Used to compose unicode capture groups. */
493
- var rsZWJ$1 = '\\u200d';
494
-
495
- /** 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/). */
496
- var reHasUnicode = RegExp('[' + rsZWJ$1 + rsAstralRange$1 + rsComboRange$1 + rsVarRange$1 + ']');
497
-
498
- /**
499
- * Checks if `string` contains Unicode symbols.
500
- *
501
- * @private
502
- * @param {string} string The string to inspect.
503
- * @returns {boolean} Returns `true` if a symbol is found, else `false`.
504
- */
505
- function hasUnicode(string) {
506
- return reHasUnicode.test(string);
507
- }
508
-
509
- /** Used to compose unicode character classes. */
510
- var rsAstralRange = '\\ud800-\\udfff',
511
- rsComboMarksRange = '\\u0300-\\u036f',
512
- reComboHalfMarksRange = '\\ufe20-\\ufe2f',
513
- rsComboSymbolsRange = '\\u20d0-\\u20ff',
514
- rsComboRange = rsComboMarksRange + reComboHalfMarksRange + rsComboSymbolsRange,
515
- rsVarRange = '\\ufe0e\\ufe0f';
516
-
517
- /** Used to compose unicode capture groups. */
518
- var rsAstral = '[' + rsAstralRange + ']',
519
- rsCombo = '[' + rsComboRange + ']',
520
- rsFitz = '\\ud83c[\\udffb-\\udfff]',
521
- rsModifier = '(?:' + rsCombo + '|' + rsFitz + ')',
522
- rsNonAstral = '[^' + rsAstralRange + ']',
523
- rsRegional = '(?:\\ud83c[\\udde6-\\uddff]){2}',
524
- rsSurrPair = '[\\ud800-\\udbff][\\udc00-\\udfff]',
525
- rsZWJ = '\\u200d';
526
-
527
- /** Used to compose unicode regexes. */
528
- var reOptMod = rsModifier + '?',
529
- rsOptVar = '[' + rsVarRange + ']?',
530
- rsOptJoin = '(?:' + rsZWJ + '(?:' + [rsNonAstral, rsRegional, rsSurrPair].join('|') + ')' + rsOptVar + reOptMod + ')*',
531
- rsSeq = rsOptVar + reOptMod + rsOptJoin,
532
- rsSymbol = '(?:' + [rsNonAstral + rsCombo + '?', rsCombo, rsRegional, rsSurrPair, rsAstral].join('|') + ')';
533
-
534
- /** Used to match [string symbols](https://mathiasbynens.be/notes/javascript-unicode). */
535
- var reUnicode = RegExp(rsFitz + '(?=' + rsFitz + ')|' + rsSymbol + rsSeq, 'g');
536
-
537
- /**
538
- * Gets the size of a Unicode `string`.
539
- *
540
- * @private
541
- * @param {string} string The string inspect.
542
- * @returns {number} Returns the string size.
543
- */
544
- function unicodeSize(string) {
545
- var result = reUnicode.lastIndex = 0;
546
- while (reUnicode.test(string)) {
547
- ++result;
548
- }
549
- return result;
550
- }
551
-
552
- /**
553
- * Gets the number of symbols in `string`.
554
- *
555
- * @private
556
- * @param {string} string The string to inspect.
557
- * @returns {number} Returns the string size.
558
- */
559
- function stringSize(string) {
560
- return hasUnicode(string)
561
- ? unicodeSize(string)
562
- : asciiSize$1(string);
563
- }
564
-
565
- /** `Object#toString` result references. */
566
- var mapTag = '[object Map]',
567
- setTag = '[object Set]';
568
-
569
- /**
570
- * Gets the size of `collection` by returning its length for array-like
571
- * values or the number of own enumerable string keyed properties for objects.
572
- *
573
- * @static
574
- * @memberOf _
575
- * @since 0.1.0
576
- * @category Collection
577
- * @param {Array|Object|string} collection The collection to inspect.
578
- * @returns {number} Returns the collection size.
579
- * @example
580
- *
581
- * _.size([1, 2, 3]);
582
- * // => 3
583
- *
584
- * _.size({ 'a': 1, 'b': 2 });
585
- * // => 2
586
- *
587
- * _.size('pebbles');
588
- * // => 7
589
- */
590
- function size(collection) {
591
- if (collection == null) {
592
- return 0;
593
- }
594
- if (isArrayLike(collection)) {
595
- return isString(collection) ? stringSize(collection) : collection.length;
596
- }
597
- var tag = getTag(collection);
598
- if (tag == mapTag || tag == setTag) {
599
- return collection.size;
600
- }
601
- return baseKeys(collection).length;
602
- }
603
-
604
- /**
605
- * Lifecycle
606
- * 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.
607
- * 2. @method `updateColumnSorting` - Updates the column sorting icon on the grid and the column itself, but the data remains untouched.
608
- * 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.
609
- * 4. @event `aftersortingapply` - Triggered after sorting has been applied and completed. This event occurs for both row and column sorting.
610
- *
611
- * Note: If you prevent an event, it will not proceed to the subsequent steps.
612
- */
613
- class SortingPlugin extends BasePlugin {
614
- runSorting(order, comparison) {
615
- var _a;
616
- this.sort(order, comparison);
617
- (_a = this.sortingPromise) === null || _a === void 0 ? void 0 : _a.call(this);
618
- this.sortingPromise = null;
619
- }
620
- constructor(revogrid, providers) {
621
- super(revogrid, providers);
622
- this.revogrid = revogrid;
623
- this.sortingPromise = null;
624
- this.postponeSort = debounce((order, comparison) => this.runSorting(order, comparison), 50);
625
- const beforeanysource = ({ detail: { type }, }) => {
626
- // if sorting was provided - sort data
627
- if (!!this.sorting && this.sortingFunc) {
628
- const beforeEvent = this.emit('beforesorting', { type });
629
- if (beforeEvent.defaultPrevented) {
630
- return;
631
- }
632
- this.startSorting(this.sorting, this.sortingFunc);
633
- }
634
- };
635
- const aftercolumnsset = ({ detail: { order }, }) => {
636
- const columns = this.providers.column.getColumns();
637
- const sortingFunc = {};
638
- for (let prop in order) {
639
- const cmp = this.getComparer(getColumnByProp(columns, prop), order[prop]);
640
- sortingFunc[prop] = cmp;
641
- }
642
- this.runSorting(order, sortingFunc);
643
- };
644
- const headerclick = (e) => {
645
- var _a, _b;
646
- if (e.defaultPrevented) {
647
- return;
648
- }
649
- if (!e.detail.column.sortable) {
650
- return;
651
- }
652
- 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);
653
- };
654
- this.addEventListener('beforeanysource', beforeanysource);
655
- this.addEventListener('aftercolumnsset', aftercolumnsset);
656
- this.addEventListener('beforeheaderclick', headerclick);
657
- }
658
- startSorting(order, sortingFunc) {
659
- if (!this.sortingPromise) {
660
- this.revogrid.jobsBeforeRender.push(new Promise(resolve => {
661
- this.sortingPromise = resolve;
662
- }));
663
- }
664
- this.postponeSort(order, sortingFunc);
665
- }
666
- getComparer(column, order) {
667
- var _a;
668
- const cellCmp = ((_a = column === null || column === void 0 ? void 0 : column.cellCompare) === null || _a === void 0 ? void 0 : _a.bind({ order })) || this.defaultCellCompare;
669
- if (order == 'asc') {
670
- return cellCmp;
671
- }
672
- if (order == 'desc') {
673
- return this.descCellCompare(cellCmp);
674
- }
675
- return undefined;
676
- }
677
- /**
678
- * Apply sorting to data on header click
679
- * If additive - add to existing sorting, multiple columns can be sorted
680
- */
681
- headerclick(column, index, additive) {
682
- var _a, _b;
683
- let order = this.getNextOrder(column.order);
684
- const beforeEvent = this.emit('beforesorting', { column, order, additive });
685
- if (beforeEvent.defaultPrevented) {
686
- return;
687
- }
688
- order = beforeEvent.detail.order;
689
- const newCol = this.providers.column.updateColumnSorting(beforeEvent.detail.column, index, order, additive);
690
- // apply sort data
691
- const beforeApplyEvent = this.emit('beforesortingapply', {
692
- column: newCol,
693
- order,
694
- additive,
695
- });
696
- if (beforeApplyEvent.defaultPrevented) {
697
- return;
698
- }
699
- order = beforeApplyEvent.detail.order;
700
- const cmp = this.getComparer(column, order);
701
- if (additive && this.sorting) {
702
- const sorting = {};
703
- const sortingFunc = {};
704
- this.sorting = Object.assign(Object.assign({}, this.sorting), sorting);
705
- // extend sorting function with new sorting for multiple columns sorting
706
- this.sortingFunc = Object.assign(Object.assign({}, this.sortingFunc), sortingFunc);
707
- if (column.prop in sorting && size(sorting) > 1 && order === undefined) {
708
- delete sorting[column.prop];
709
- delete sortingFunc[column.prop];
710
- }
711
- else {
712
- sorting[column.prop] = order;
713
- sortingFunc[column.prop] = cmp;
714
- }
715
- }
716
- else {
717
- if (order) {
718
- // reset sorting
719
- this.sorting = { [column.prop]: order };
720
- this.sortingFunc = { [column.prop]: cmp };
721
- }
722
- else {
723
- (_a = this.sorting) === null || _a === void 0 ? true : delete _a[column.prop];
724
- (_b = this.sortingFunc) === null || _b === void 0 ? true : delete _b[column.prop];
725
- }
726
- }
727
- this.startSorting(this.sorting, this.sortingFunc);
728
- }
729
- /**
730
- * Sort items by sorting function
731
- * @requires proxyItems applied to row store
732
- * @requires source applied to row store
733
- *
734
- * @param sorting - per column sorting
735
- * @param data - this.stores['rgRow'].store.get('source')
736
- */
737
- sort(sorting, sortingFunc, types = rowTypes) {
738
- // if no sorting - reset
739
- if (!size(sorting)) {
740
- this.sorting = undefined;
741
- this.sortingFunc = undefined;
742
- for (let type of types) {
743
- const storeService = this.providers.data.stores[type];
744
- // row data
745
- const source = storeService.store.get('source');
746
- // row indexes
747
- const proxyItems = storeService.store.get('proxyItems');
748
- // row indexes
749
- const newItemsOrder = storeService.store.get('items'); // recover indexes range(0, source.length)
750
- this.providers.dimension.updateSizesPositionByNewDataIndexes(type, newItemsOrder, proxyItems);
751
- storeService.setData({ proxyItems: newItemsOrder, source: [...source] });
752
- }
753
- }
754
- else {
755
- // set sorting
756
- this.sorting = sorting;
757
- this.sortingFunc = sortingFunc;
758
- for (let type of types) {
759
- const storeService = this.providers.data.stores[type];
760
- // row data
761
- const source = storeService.store.get('source');
762
- // row indexes
763
- const proxyItems = storeService.store.get('proxyItems');
764
- const newItemsOrder = this.sortIndexByItems([...proxyItems], source, sortingFunc);
765
- this.providers.dimension.updateSizesPositionByNewDataIndexes(type, newItemsOrder, proxyItems);
766
- storeService.setData({
767
- proxyItems: newItemsOrder,
768
- source: [...source],
769
- });
770
- }
771
- }
772
- this.emit('aftersortingapply');
773
- }
774
- defaultCellCompare(prop, a, b) {
775
- var _a, _b;
776
- const av = (_a = a === null || a === void 0 ? void 0 : a[prop]) === null || _a === void 0 ? void 0 : _a.toString().toLowerCase();
777
- const bv = (_b = b === null || b === void 0 ? void 0 : b[prop]) === null || _b === void 0 ? void 0 : _b.toString().toLowerCase();
778
- return av == bv ? 0 : av > bv ? 1 : -1;
779
- }
780
- descCellCompare(cmp) {
781
- return (prop, a, b) => {
782
- return -1 * cmp(prop, a, b);
783
- };
784
- }
785
- sortIndexByItems(indexes, source, sortingFunc = {}) {
786
- // if no sorting - return unsorted indexes
787
- if (Object.entries(sortingFunc).length === 0) {
788
- // Unsorted indexes
789
- return [...Array(indexes.length).keys()];
790
- }
791
- //
792
- /**
793
- * go through all indexes and align in new order
794
- * performs a multi-level sorting by applying multiple comparison functions to determine the order of the items based on different properties.
795
- */
796
- return indexes.sort((a, b) => {
797
- for (const [prop, cmp] of Object.entries(sortingFunc)) {
798
- const itemA = source[a];
799
- const itemB = source[b];
800
- /**
801
- * 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.
802
- * 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.
803
- */
804
- const sorted = cmp === null || cmp === void 0 ? void 0 : cmp(prop, itemA, itemB);
805
- if (sorted) {
806
- return sorted;
807
- }
808
- }
809
- return 0;
810
- });
811
- }
812
- getNextOrder(currentOrder) {
813
- switch (currentOrder) {
814
- case undefined:
815
- return 'asc';
816
- case 'asc':
817
- return 'desc';
818
- case 'desc':
819
- return undefined;
820
- }
821
- }
822
- }
823
-
824
80
  class ColumnDataProvider {
825
81
  get order() {
826
82
  const order = {};
@@ -843,8 +99,8 @@ class ColumnDataProvider {
843
99
  return sources;
844
100
  }, {});
845
101
  }
846
- column(c, pin) {
847
- return this.getColumn(c, pin || 'rgCol');
102
+ column(c, type = 'rgCol') {
103
+ return this.getColumn(c, type);
848
104
  }
849
105
  getColumn(virtualIndex, type) {
850
106
  return getSourceItem(this.dataSources[type].store, virtualIndex);
@@ -876,6 +132,9 @@ class ColumnDataProvider {
876
132
  refreshByType(type) {
877
133
  this.dataSources[type].refresh();
878
134
  }
135
+ /**
136
+ * Main method to set columns
137
+ */
879
138
  setColumns(data) {
880
139
  columnTypes.forEach(k => {
881
140
  // set columns data
@@ -970,6 +229,8 @@ class ColumnDataProvider {
970
229
 
971
230
  /**
972
231
  * Data source provider
232
+ *
233
+ * @dependsOn DimensionProvider
973
234
  */
974
235
  class DataProvider {
975
236
  constructor(dimensionProvider) {
@@ -992,13 +253,22 @@ class DataProvider {
992
253
  return getSourceItem(store, virtualIndex);
993
254
  }
994
255
  changeOrder({ rowType = 'rgRow', from, to }) {
995
- const service = this.stores[rowType];
996
- const items = [...service.store.get('items')];
997
- const prevItems = [...items];
998
- const toMove = items.splice(from, 1);
999
- items.splice(to, 0, ...toMove);
1000
- this.dimensionProvider.updateSizesPositionByNewDataIndexes(rowType, items, prevItems);
1001
- service.setData({ items });
256
+ const storeService = this.stores[rowType];
257
+ // take currently visible row indexes
258
+ const newItemsOrder = [...storeService.store.get('proxyItems')];
259
+ const prevItems = storeService.store.get('items');
260
+ // take out
261
+ const toMove = newItemsOrder.splice(newItemsOrder.indexOf(prevItems[from]), // get index in proxy
262
+ 1);
263
+ // insert before
264
+ newItemsOrder.splice(newItemsOrder.indexOf(prevItems[to]), // get index in proxy
265
+ 0, ...toMove);
266
+ storeService.setData({
267
+ proxyItems: newItemsOrder,
268
+ });
269
+ // take currently visible row indexes
270
+ const newItems = storeService.store.get('items');
271
+ this.dimensionProvider.updateSizesPositionByNewDataIndexes(rowType, newItems, prevItems);
1002
272
  }
1003
273
  setCellData({ type, rowIndex, prop, val }, mutate = true) {
1004
274
  const model = this.getModel(rowIndex, type);
@@ -1044,6 +314,8 @@ class DataProvider {
1044
314
  /**
1045
315
  * Dimension provider
1046
316
  * Stores dimension information and custom sizes
317
+ *
318
+ * @dependsOn ViewportProvider
1047
319
  */
1048
320
  class DimensionProvider {
1049
321
  constructor(viewports, config) {
@@ -1079,7 +351,11 @@ class DimensionProvider {
1079
351
  newSizes = Object.assign(Object.assign({}, oldSizes), sizes);
1080
352
  }
1081
353
  this.stores[type].setDimensionSize(newSizes);
1082
- this.updateViewport(type, true);
354
+ this.setViewPortCoordinate({
355
+ coordinate: this.viewports.stores[type].lastCoordinate,
356
+ type,
357
+ force: true,
358
+ });
1083
359
  }
1084
360
  setItemCount(realCount, type) {
1085
361
  this.viewports.stores[type].setViewport({ realCount });
@@ -1094,10 +370,14 @@ class DimensionProvider {
1094
370
  const allTrimmed = gatherTrimmedItems(trimmed);
1095
371
  const dimStoreType = this.stores[type];
1096
372
  dimStoreType.setStore({ trimmed: allTrimmed });
1097
- this.updateViewport(type, true);
373
+ this.setViewPortCoordinate({
374
+ coordinate: this.viewports.stores[type].lastCoordinate,
375
+ type,
376
+ force: true,
377
+ });
1098
378
  }
1099
379
  /**
1100
- * Sets dimension data and view port coordinate
380
+ * Sets dimension data and viewport coordinate
1101
381
  * @param itemCount
1102
382
  * @param type - dimension type
1103
383
  * @param noVirtual - disable virtual data
@@ -1111,18 +391,23 @@ class DimensionProvider {
1111
391
  virtualSize: dimension.realSize,
1112
392
  });
1113
393
  }
1114
- this.updateViewport(type);
394
+ this.setViewPortCoordinate({
395
+ coordinate: this.viewports.stores[type].lastCoordinate,
396
+ type,
397
+ });
1115
398
  }
1116
399
  /**
1117
400
  * Applies new columns to the dimension provider
1118
401
  * @param columns - new columns data
1119
402
  * @param disableVirtualX - disable virtual data for X axis
1120
403
  */
1121
- applyNewColumns(columns, disableVirtualX) {
404
+ applyNewColumns(columns, disableVirtualX, keepOld = false) {
1122
405
  // Apply new columns to dimension provider
1123
406
  for (let type of columnTypes) {
1124
- // Clear existing data in the dimension provider
1125
- this.stores[type].drop();
407
+ if (!keepOld) {
408
+ // Clear existing data in the dimension provider
409
+ this.stores[type].drop();
410
+ }
1126
411
  // Get the new columns for the current type
1127
412
  const items = columns[type];
1128
413
  // Determine if virtual data should be disabled for the current type
@@ -1149,6 +434,10 @@ class DimensionProvider {
1149
434
  });
1150
435
  }
1151
436
  }
437
+ /**
438
+ * Gets the full size of the grid by summing up the sizes of all dimensions
439
+ * Goes through all dimensions columnTypes (x) and rowTypes (y) and sums up their sizes
440
+ */
1152
441
  getFullSize() {
1153
442
  var _a, _b;
1154
443
  let x = 0;
@@ -1161,13 +450,6 @@ class DimensionProvider {
1161
450
  }
1162
451
  return { y, x };
1163
452
  }
1164
- updateViewport(type, force = false) {
1165
- this.setViewPortCoordinate({
1166
- coordinate: this.viewports.stores[type].lastCoordinate,
1167
- type,
1168
- force,
1169
- });
1170
- }
1171
453
  setViewPortCoordinate({ coordinate, type, force = false, }) {
1172
454
  const dimension = this.stores[type].getCurrentState();
1173
455
  this.viewports.stores[type].setViewPortCoordinate(coordinate, dimension, force);
@@ -1193,25 +475,12 @@ class DimensionProvider {
1193
475
  }
1194
476
  updateSizesPositionByNewDataIndexes(type, newItemsOrder, prevItemsOrder = []) {
1195
477
  // Move custom sizes to new order
1196
- const dimService = this.stores[type];
1197
- const customSizes = Object.assign({}, dimService.store.get('sizes'));
1198
- if (Object.keys(customSizes).length) {
1199
- const originalIndices = new Map();
1200
- prevItemsOrder.forEach((value, index) => {
1201
- originalIndices.set(value, index);
1202
- });
1203
- const newSizes = {};
1204
- newItemsOrder.forEach((value, newIndex) => {
1205
- const originalIndex = originalIndices.get(value);
1206
- if (originalIndex !== newIndex && customSizes[originalIndex]) {
1207
- newSizes[newIndex] = customSizes[originalIndex];
1208
- delete customSizes[originalIndex];
1209
- }
1210
- });
1211
- if (Object.keys(newSizes).length) {
1212
- this.setCustomSizes(type, Object.assign(Object.assign({}, customSizes), newSizes));
1213
- }
1214
- }
478
+ this.stores[type].updateSizesPositionByIndexes(newItemsOrder, prevItemsOrder);
479
+ this.setViewPortCoordinate({
480
+ coordinate: this.viewports.stores[type].lastCoordinate,
481
+ type,
482
+ force: true,
483
+ });
1215
484
  }
1216
485
  }
1217
486
 
@@ -1288,15 +557,15 @@ class ViewportService {
1288
557
  if (val === 'rgCol') {
1289
558
  column.onResizeviewport = (e) => {
1290
559
  var _a;
1291
- if (config.disableVirtualY && e.detail.dimension === 'rgRow') {
1292
- return;
1293
- }
1294
- else if (config.disableVirtualX && e.detail.dimension === 'rgCol') {
1295
- return;
560
+ const vpState = {
561
+ clientSize: e.detail.size,
562
+ };
563
+ // virtual size will be handled by dimension provider if disabled
564
+ if ((e.detail.dimension === 'rgRow' && !config.disableVirtualY)
565
+ || (e.detail.dimension === 'rgCol' && !config.disableVirtualX)) {
566
+ vpState.virtualSize = e.detail.size;
1296
567
  }
1297
- (_a = config.viewportProvider) === null || _a === void 0 ? void 0 : _a.setViewport(e.detail.dimension, {
1298
- virtualSize: e.detail.size,
1299
- });
568
+ (_a = config.viewportProvider) === null || _a === void 0 ? void 0 : _a.setViewport(e.detail.dimension, vpState);
1300
569
  };
1301
570
  }
1302
571
  const colData = gatherColumnData(column);
@@ -1308,7 +577,7 @@ class ViewportService {
1308
577
  segmentSelection.setLastCell(rgRow.lastCell);
1309
578
  // register selection store for Row
1310
579
  const rowSelectionStore = this.registerRow(rgRow.position.y, rgRow.type);
1311
- const rowDef = Object.assign(Object.assign({ colType: val }, rgRow), { rowSelectionStore, segmentSelectionStore: segmentSelection.store, ref: (e) => config.selectionStoreConnector.registerSection(e), onSetrange: e => {
580
+ const rowDef = Object.assign(Object.assign({ colType: val }, rgRow), { rowSelectionStore, selectionStore: segmentSelection.store, ref: (e) => config.selectionStoreConnector.registerSection(e), onSetrange: e => {
1312
581
  segmentSelection.setRangeArea(e.detail);
1313
582
  }, onSettemprange: e => segmentSelection.setTempArea(e.detail), onFocuscell: e => {
1314
583
  // todo: multi focus
@@ -1695,7 +964,85 @@ class WCAGPlugin extends BasePlugin {
1695
964
  }
1696
965
  }
1697
966
 
1698
- 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}";
967
+ /**
968
+ * Plugin service
969
+ * Manages plugins
970
+ */
971
+ class PluginService {
972
+ constructor() {
973
+ /**
974
+ * Plugins
975
+ * Define plugins collection
976
+ */
977
+ this.internalPlugins = [];
978
+ }
979
+ /**
980
+ * Get all plugins
981
+ */
982
+ get() {
983
+ return [...this.internalPlugins];
984
+ }
985
+ /**
986
+ * Add plugin to collection
987
+ */
988
+ add(plugin) {
989
+ this.internalPlugins.push(plugin);
990
+ }
991
+ /**
992
+ * Add user plugins and create
993
+ */
994
+ addUserPluginsAndCreate(element, plugins = [], prevPlugins, pluginData) {
995
+ if (!pluginData) {
996
+ return;
997
+ }
998
+ // Step 1: Identify plugins to remove, compare new and old plugins
999
+ const pluginsToRemove = (prevPlugins === null || prevPlugins === void 0 ? void 0 : prevPlugins.filter(prevPlugin => !plugins.some(userPlugin => userPlugin === prevPlugin))) || [];
1000
+ // Step 2: Remove old plugins
1001
+ pluginsToRemove.forEach(plugin => {
1002
+ var _a, _b;
1003
+ const index = this.internalPlugins.findIndex(createdPlugin => createdPlugin instanceof plugin);
1004
+ if (index !== -1) {
1005
+ (_b = (_a = this.internalPlugins[index]).destroy) === null || _b === void 0 ? void 0 : _b.call(_a);
1006
+ this.internalPlugins.splice(index, 1); // Remove the plugin
1007
+ }
1008
+ });
1009
+ // Step 3: Register user plugins
1010
+ plugins === null || plugins === void 0 ? void 0 : plugins.forEach(userPlugin => {
1011
+ // check if plugin already exists, if so, skip
1012
+ const existingPlugin = this.internalPlugins.find(createdPlugin => createdPlugin instanceof userPlugin);
1013
+ if (existingPlugin) {
1014
+ return;
1015
+ }
1016
+ this.add(new userPlugin(element, pluginData));
1017
+ });
1018
+ }
1019
+ /**
1020
+ * Get plugin by class
1021
+ */
1022
+ getByClass(pluginClass) {
1023
+ return this.internalPlugins.find(p => p instanceof pluginClass);
1024
+ }
1025
+ /**
1026
+ * Remove plugin
1027
+ */
1028
+ remove(plugin) {
1029
+ var _a, _b;
1030
+ const index = this.internalPlugins.indexOf(plugin);
1031
+ if (index > -1) {
1032
+ (_b = (_a = this.internalPlugins[index]).destroy) === null || _b === void 0 ? void 0 : _b.call(_a);
1033
+ this.internalPlugins.splice(index, 1);
1034
+ }
1035
+ }
1036
+ /**
1037
+ * Remove all plugins
1038
+ */
1039
+ destroy() {
1040
+ this.internalPlugins.forEach(p => { var _a; return (_a = p.destroy) === null || _a === void 0 ? void 0 : _a.call(p); });
1041
+ this.internalPlugins = [];
1042
+ }
1043
+ }
1044
+
1045
+ 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}";
1699
1046
  const RevoGridStyle0 = revoGridStyleCss;
1700
1047
 
1701
1048
  const RevoGridComponent = class {
@@ -1709,8 +1056,9 @@ const RevoGridComponent = class {
1709
1056
  this.beforerange = createEvent(this, "beforerange", 7);
1710
1057
  this.afterfocus = createEvent(this, "afterfocus", 7);
1711
1058
  this.roworderchanged = createEvent(this, "roworderchanged", 7);
1712
- this.beforesortingapply = createEvent(this, "beforesortingapply", 7);
1713
1059
  this.beforesorting = createEvent(this, "beforesorting", 7);
1060
+ this.beforesourcesortingapply = createEvent(this, "beforesourcesortingapply", 7);
1061
+ this.beforesortingapply = createEvent(this, "beforesortingapply", 7);
1714
1062
  this.rowdragstart = createEvent(this, "rowdragstart", 7);
1715
1063
  this.headerclick = createEvent(this, "headerclick", 7);
1716
1064
  this.beforecellfocus = createEvent(this, "beforecellfocus", 7);
@@ -1732,20 +1080,18 @@ const RevoGridComponent = class {
1732
1080
  this.aftercolumnresize = createEvent(this, "aftercolumnresize", 7);
1733
1081
  this.beforerowdefinition = createEvent(this, "beforerowdefinition", 7);
1734
1082
  this.filterconfigchanged = createEvent(this, "filterconfigchanged", 7);
1083
+ this.sortingconfigchanged = createEvent(this, "sortingconfigchanged", 7);
1735
1084
  this.rowheaderschanged = createEvent(this, "rowheaderschanged", 7);
1736
1085
  this.beforegridrender = createEvent(this, "beforegridrender", 7);
1737
1086
  this.aftergridrender = createEvent(this, "aftergridrender", 7);
1738
1087
  this.aftergridinit = createEvent(this, "aftergridinit", 7);
1739
1088
  this.additionaldatachanged = createEvent(this, "additionaldatachanged", 7);
1740
1089
  this.afterthemechanged = createEvent(this, "afterthemechanged", 7);
1090
+ this.created = createEvent(this, "created", 7);
1741
1091
  this.extraElements = [];
1092
+ this.pluginService = new PluginService();
1742
1093
  this.viewport = null;
1743
1094
  this.isInited = false;
1744
- /**
1745
- * Plugins
1746
- * Define plugins collection
1747
- */
1748
- this.internalPlugins = [];
1749
1095
  this.rowHeaders = undefined;
1750
1096
  this.frameSize = 1;
1751
1097
  this.rowSize = 0;
@@ -1768,6 +1114,7 @@ const RevoGridComponent = class {
1768
1114
  this.rowClass = '';
1769
1115
  this.autoSizeColumn = false;
1770
1116
  this.filter = false;
1117
+ this.sorting = undefined;
1771
1118
  this.focusTemplate = undefined;
1772
1119
  this.canMoveColumns = false;
1773
1120
  this.trimmedRows = {};
@@ -1795,15 +1142,31 @@ const RevoGridComponent = class {
1795
1142
  this.dataProvider.refresh(type);
1796
1143
  }
1797
1144
  /**
1798
- * Sets data at specified cell.
1145
+ * Refreshes data at specified cell.
1799
1146
  * Useful for performance optimization.
1800
1147
  * No viewport update will be triggered.
1148
+ *
1149
+ * @example
1150
+ * const grid = document.querySelector('revo-grid');
1151
+ * grid.setDataAt({ row: 0, col: 0, val: 'test' }); // refresh
1801
1152
  */
1802
- async setDataAt(data) {
1803
- const dataElement = this.element.querySelector(`revogr-data[type="${data.rowType}"][col-type="${data.colType}"]`);
1153
+ async setDataAt({ row, col, colType = 'rgCol', rowType = 'rgRow', val, skipDataUpdate = false }) {
1154
+ var _a;
1155
+ if (this.dataProvider && this.columnProvider && !skipDataUpdate) {
1156
+ const columnProp = (_a = this.columnProvider.getColumn(col, colType)) === null || _a === void 0 ? void 0 : _a.prop;
1157
+ if (typeof columnProp !== 'undefined') {
1158
+ this.dataProvider.setCellData({
1159
+ type: rowType,
1160
+ rowIndex: row,
1161
+ prop: columnProp,
1162
+ val,
1163
+ }, false);
1164
+ }
1165
+ }
1166
+ const dataElement = this.element.querySelector(`revogr-data[type="${rowType}"][col-type="${colType}"]`);
1804
1167
  return dataElement === null || dataElement === void 0 ? void 0 : dataElement.updateCell({
1805
- row: data.row,
1806
- col: data.col,
1168
+ row,
1169
+ col,
1807
1170
  });
1808
1171
  }
1809
1172
  /**
@@ -1971,19 +1334,19 @@ const RevoGridComponent = class {
1971
1334
  * Clear current grid focus. Grid has no longer focus on it.
1972
1335
  */
1973
1336
  async clearFocus() {
1974
- var _a;
1337
+ var _a, _b;
1975
1338
  const focused = (_a = this.viewport) === null || _a === void 0 ? void 0 : _a.getFocused();
1976
1339
  const event = this.beforefocuslost.emit(focused);
1977
1340
  if (event.defaultPrevented) {
1978
1341
  return;
1979
1342
  }
1980
- this.selectionStoreConnector.clearAll();
1343
+ (_b = this.selectionStoreConnector) === null || _b === void 0 ? void 0 : _b.clearAll();
1981
1344
  }
1982
1345
  /**
1983
1346
  * Get all active plugins instances
1984
1347
  */
1985
1348
  async getPlugins() {
1986
- return [...this.internalPlugins];
1349
+ return this.pluginService.get();
1987
1350
  }
1988
1351
  /**
1989
1352
  * Get the currently focused cell.
@@ -2010,6 +1373,15 @@ const RevoGridComponent = class {
2010
1373
  var _a, _b;
2011
1374
  return (_b = (_a = this.viewport) === null || _a === void 0 ? void 0 : _a.getSelectedRange()) !== null && _b !== void 0 ? _b : null;
2012
1375
  }
1376
+ /**
1377
+ * Refresh extra elements. Triggers re-rendering of extra elements and functions.
1378
+ * Part of extraElements and registerVNode methods.
1379
+ * Useful for plugins.
1380
+ */
1381
+ async refreshExtraElements() {
1382
+ var _a;
1383
+ (_a = this.extraService) === null || _a === void 0 ? void 0 : _a.refresh();
1384
+ }
2013
1385
  mousedownHandle(event) {
2014
1386
  const screenX = getPropertyFromEvent(event, 'screenX');
2015
1387
  const screenY = getPropertyFromEvent(event, 'screenY');
@@ -2138,7 +1510,7 @@ const RevoGridComponent = class {
2138
1510
  // Column format change will trigger column structure update
2139
1511
  this.columnChanged(this.columns);
2140
1512
  }
2141
- columnChanged(newVal = []) {
1513
+ columnChanged(newVal = [], _prevVal = undefined, __watchName = 'columns', init = false) {
2142
1514
  if (!this.dimensionProvider || !this.columnProvider) {
2143
1515
  return;
2144
1516
  }
@@ -2147,7 +1519,7 @@ const RevoGridComponent = class {
2147
1519
  if (beforeSetEvent.defaultPrevented) {
2148
1520
  return;
2149
1521
  }
2150
- this.dimensionProvider.applyNewColumns(beforeSetEvent.detail.columns, this.disableVirtualX);
1522
+ this.dimensionProvider.applyNewColumns(beforeSetEvent.detail.columns, this.disableVirtualX, init);
2151
1523
  const beforeApplyEvent = this.beforecolumnapplied.emit(columnGather);
2152
1524
  if (beforeApplyEvent.defaultPrevented) {
2153
1525
  return;
@@ -2203,7 +1575,9 @@ const RevoGridComponent = class {
2203
1575
  break;
2204
1576
  case 'source':
2205
1577
  type = 'rgRow';
2206
- /** applied for source only for cross compatability between plugins */
1578
+ /**
1579
+ * Applied for source only for cross compatability between plugins
1580
+ */
2207
1581
  const beforesourceset = this.beforesourceset.emit({
2208
1582
  type,
2209
1583
  source: newVal,
@@ -2217,7 +1591,9 @@ const RevoGridComponent = class {
2217
1591
  });
2218
1592
  const newSource = [...beforesourceset.detail.source];
2219
1593
  this.dataProvider.setData(newSource, type, this.disableVirtualY);
2220
- /** applied for source only for cross compatability between plugins */
1594
+ /**
1595
+ * Applied for source only for cross compatability between plugins
1596
+ */
2221
1597
  if (watchName === 'source') {
2222
1598
  this.aftersourceset.emit({
2223
1599
  type,
@@ -2276,15 +1652,8 @@ const RevoGridComponent = class {
2276
1652
  * Grouping
2277
1653
  */
2278
1654
  groupingChanged(newVal = {}) {
2279
- let grPlugin;
2280
- for (let p of this.internalPlugins) {
2281
- const isGrouping = p;
2282
- if (!!isGrouping.setGrouping) {
2283
- grPlugin = isGrouping;
2284
- break;
2285
- }
2286
- }
2287
- grPlugin === null || grPlugin === void 0 ? void 0 : grPlugin.setGrouping(newVal || {});
1655
+ var _a;
1656
+ (_a = this.pluginService.getByClass(GroupingRowPlugin)) === null || _a === void 0 ? void 0 : _a.setGrouping(newVal || {});
2288
1657
  }
2289
1658
  /**
2290
1659
  * Stretch Plugin Apply
@@ -2296,30 +1665,29 @@ const RevoGridComponent = class {
2296
1665
  if (isStretch === 'false') {
2297
1666
  isStretch = false;
2298
1667
  }
2299
- let stretch = this.internalPlugins.filter(p => isStretchPlugin(p))[0];
1668
+ const pluginData = this.getPluginData();
1669
+ if (!pluginData) {
1670
+ return;
1671
+ }
1672
+ const stretch = this.pluginService.getByClass(StretchColumn);
2300
1673
  if ((typeof isStretch === 'boolean' && isStretch) || isStretch === 'true') {
2301
1674
  if (!stretch) {
2302
- const pluginData = {
2303
- data: this.dataProvider,
2304
- column: this.columnProvider,
2305
- dimension: this.dimensionProvider,
2306
- viewport: this.viewportProvider,
2307
- selection: this.selectionStoreConnector,
2308
- };
2309
- this.internalPlugins.push(new StretchColumn(this.element, pluginData));
1675
+ this.pluginService.add(new StretchColumn(this.element, pluginData));
2310
1676
  }
2311
1677
  else if (isStretchPlugin(stretch)) {
2312
1678
  stretch.applyStretch(this.columnProvider.getRawColumns());
2313
1679
  }
2314
1680
  }
2315
1681
  else if (stretch) {
2316
- const index = this.internalPlugins.indexOf(stretch);
2317
- this.internalPlugins.splice(index, 1);
1682
+ this.pluginService.remove(stretch);
2318
1683
  }
2319
1684
  }
2320
1685
  applyFilter(cfg) {
2321
1686
  this.filterconfigchanged.emit(cfg);
2322
1687
  }
1688
+ applySorting(cfg) {
1689
+ this.sortingconfigchanged.emit(cfg);
1690
+ }
2323
1691
  rowHeadersChange(rowHeaders) {
2324
1692
  this.rowheaderschanged.emit(rowHeaders);
2325
1693
  }
@@ -2327,26 +1695,16 @@ const RevoGridComponent = class {
2327
1695
  * Register external VNodes
2328
1696
  */
2329
1697
  registerOutsideVNodes(elements = []) {
2330
- this.extraElements = [...this.extraElements, ...elements];
1698
+ this.extraElements = elements;
2331
1699
  }
2332
1700
  additionalDataChanged(data) {
2333
1701
  this.additionaldatachanged.emit(data);
2334
1702
  }
2335
- pluginsChanged(plugins = [], _prevPlugins) {
2336
- // pass data provider to plugins
2337
- const pluginData = this.getPluginData();
2338
- if (!pluginData) {
2339
- return;
2340
- }
2341
- // todo: remove old plugins if any was removed based on _prevPlugins
2342
- // register user plugins
2343
- plugins === null || plugins === void 0 ? void 0 : plugins.forEach(userPlugin => {
2344
- const existingPlugin = this.internalPlugins.find(createdPlugin => createdPlugin instanceof userPlugin);
2345
- if (existingPlugin) {
2346
- return;
2347
- }
2348
- this.internalPlugins.push(new userPlugin(this.element, pluginData));
2349
- });
1703
+ /**
1704
+ * User can add plugins via plugins property
1705
+ */
1706
+ pluginsChanged(plugins = [], prevPlugins) {
1707
+ this.pluginService.addUserPluginsAndCreate(this.element, plugins, prevPlugins, this.getPluginData());
2350
1708
  }
2351
1709
  // #endregion
2352
1710
  // #region Plugins
@@ -2358,35 +1716,39 @@ const RevoGridComponent = class {
2358
1716
  if (!pluginData) {
2359
1717
  return;
2360
1718
  }
1719
+ // register system plugins
1720
+ this.setCorePlugins(pluginData);
1721
+ // register user plugins
1722
+ this.pluginsChanged(this.plugins);
1723
+ }
1724
+ setCorePlugins(pluginData) {
2361
1725
  if (this.accessible) {
2362
- this.internalPlugins.push(new WCAGPlugin(this.element, pluginData));
1726
+ this.pluginService.add(new WCAGPlugin(this.element, pluginData));
2363
1727
  }
2364
1728
  // register auto size plugin
2365
1729
  if (this.autoSizeColumn) {
2366
- this.internalPlugins.push(new AutoSizeColumnPlugin(this.element, pluginData, typeof this.autoSizeColumn === 'object'
1730
+ this.pluginService.add(new AutoSizeColumnPlugin(this.element, pluginData, typeof this.autoSizeColumn === 'object'
2367
1731
  ? this.autoSizeColumn
2368
1732
  : undefined));
2369
1733
  }
2370
1734
  // register filter plugin
2371
1735
  if (this.filter) {
2372
- this.internalPlugins.push(new FilterPlugin(this.element, pluginData, typeof this.filter === 'object' ? this.filter : undefined));
1736
+ this.pluginService.add(new FilterPlugin(this.element, pluginData, typeof this.filter === 'object' ? this.filter : undefined));
2373
1737
  }
2374
1738
  // register export plugin
2375
1739
  if (this.exporting) {
2376
- this.internalPlugins.push(new ExportFilePlugin(this.element, pluginData));
1740
+ this.pluginService.add(new ExportFilePlugin(this.element, pluginData));
2377
1741
  }
2378
1742
  // register sorting plugin
2379
- this.internalPlugins.push(new SortingPlugin(this.element, pluginData));
1743
+ this.pluginService.add(new SortingPlugin(this.element, pluginData));
2380
1744
  // register grouping plugin
2381
- this.internalPlugins.push(new GroupingRowPlugin(this.element, pluginData));
1745
+ this.pluginService.add(new GroupingRowPlugin(this.element, pluginData));
2382
1746
  if (this.canMoveColumns) {
2383
- this.internalPlugins.push(new ColumnPlugin(this.element, pluginData));
1747
+ this.pluginService.add(new ColumnMovePlugin(this.element, pluginData));
2384
1748
  }
2385
- // register user plugins
2386
- this.pluginsChanged(this.plugins);
2387
1749
  }
2388
1750
  getPluginData() {
2389
- if (!this.dimensionProvider || !this.dataProvider || !this.columnProvider || !this.viewportProvider) {
1751
+ if (!this.dimensionProvider || !this.dataProvider || !this.columnProvider || !this.viewportProvider || !this.selectionStoreConnector) {
2390
1752
  return;
2391
1753
  }
2392
1754
  // pass data provider to plugins
@@ -2396,12 +1758,12 @@ const RevoGridComponent = class {
2396
1758
  dimension: this.dimensionProvider,
2397
1759
  viewport: this.viewportProvider,
2398
1760
  selection: this.selectionStoreConnector,
1761
+ plugins: this.pluginService,
2399
1762
  };
2400
1763
  return pluginData;
2401
1764
  }
2402
1765
  removePlugins() {
2403
- this.internalPlugins.forEach(p => { var _a; return (_a = p.destroy) === null || _a === void 0 ? void 0 : _a.call(p); });
2404
- this.internalPlugins = [];
1766
+ this.pluginService.destroy();
2405
1767
  }
2406
1768
  // #endregion
2407
1769
  // if reconnect to dom we need to set up plugins
@@ -2409,6 +1771,7 @@ const RevoGridComponent = class {
2409
1771
  if (this.isInited) {
2410
1772
  this.setPlugins();
2411
1773
  }
1774
+ this.created.emit();
2412
1775
  }
2413
1776
  /**
2414
1777
  * Called once just after the component is first connected to the DOM.
@@ -2436,7 +1799,7 @@ const RevoGridComponent = class {
2436
1799
  // set data
2437
1800
  this.applyStretch(this.stretch);
2438
1801
  this.themeChanged(this.theme, undefined, undefined, true);
2439
- this.columnChanged(this.columns);
1802
+ this.columnChanged(this.columns, undefined, undefined, true);
2440
1803
  this.dataSourceChanged(this.source, undefined, 'source');
2441
1804
  this.dataSourceChanged(this.pinnedTopSource, undefined, 'pinnedTopSource');
2442
1805
  this.dataSourceChanged(this.pinnedBottomSource, undefined, 'pinnedBottomSource');
@@ -2444,7 +1807,10 @@ const RevoGridComponent = class {
2444
1807
  this.trimmedRowsChanged(this.trimmedRows);
2445
1808
  }
2446
1809
  this.rowDefChanged(this.rowDefinitions);
2447
- this.groupingChanged(this.grouping);
1810
+ // init grouping
1811
+ if (this.grouping && Object.keys(this.grouping).length > 0) {
1812
+ this.groupingChanged(this.grouping);
1813
+ }
2448
1814
  // init scrolling service
2449
1815
  this.scrollingService = new GridScrollingService((e) => {
2450
1816
  var _a;
@@ -2469,7 +1835,7 @@ const RevoGridComponent = class {
2469
1835
  this.aftergridrender.emit();
2470
1836
  }
2471
1837
  render() {
2472
- if (!this.dimensionProvider || !this.dataProvider || !this.columnProvider || !this.viewportProvider) {
1838
+ if (!this.dimensionProvider || !this.dataProvider || !this.columnProvider || !this.viewportProvider || !this.selectionStoreConnector) {
2473
1839
  return;
2474
1840
  }
2475
1841
  const contentHeight = this.dimensionProvider.stores['rgRow'].store.get('realSize');
@@ -2512,12 +1878,13 @@ const RevoGridComponent = class {
2512
1878
  // Render viewport data (vertical sections)
2513
1879
  view.dataPorts.forEach(data => {
2514
1880
  const key = `${data.type}_${view.type}`;
2515
- const dataView = (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 }) => {
1881
+ const dataView = (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 }) => {
1882
+ var _a;
2516
1883
  const event = this.beforeeditstart.emit(detail);
2517
1884
  if (!event.defaultPrevented) {
2518
- this.selectionStoreConnector.setEdit(detail.val);
1885
+ (_a = this.selectionStoreConnector) === null || _a === void 0 ? void 0 : _a.setEdit(detail.val);
2519
1886
  }
2520
- } }), 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: DATA_SLOT }), h("slot", { name: `data-${view.type}-${data.type}` })), h("revogr-temp-range", { selectionStore: data.segmentSelectionStore, dimensionRow: data.dimensionRow, dimensionCol: data.dimensionCol }), 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 }, h("slot", { name: `focus-${view.type}-${data.type}` }))));
1887
+ } }), 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: DATA_SLOT }), h("slot", { name: `data-${view.type}-${data.type}` })), h("revogr-temp-range", { selectionStore: data.selectionStore, dimensionRow: data.dimensionRow, dimensionCol: data.dimensionCol }), 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 }, h("slot", { name: `focus-${view.type}-${data.type}` }))));
2521
1888
  dataViews.push(dataView);
2522
1889
  });
2523
1890
  // Add viewport scroll in the end
@@ -2529,15 +1896,16 @@ const RevoGridComponent = class {
2529
1896
  const typeCol = 'rgCol';
2530
1897
  const viewports = this.viewportProvider.stores;
2531
1898
  const dimensions = this.dimensionProvider.stores;
2532
- return (h(Host, null, this.hideAttribution ? null : (h("revogr-attribution", { class: "attribution" })), h("div", { class: "main-viewport", onClick: (e) => {
1899
+ return (h(Host, null, this.hideAttribution ? null : (h("revogr-attribution", { class: "attribution" })), h("slot", { name: "header" }), h("div", { class: "main-viewport", onClick: (e) => {
2533
1900
  var _a;
2534
1901
  if (e.currentTarget === e.target) {
2535
1902
  (_a = this.viewport) === null || _a === void 0 ? void 0 : _a.clearEdit();
2536
1903
  }
2537
- } }, h("div", { class: "viewports" }, h("slot", { name: "viewport" }), viewportSections, 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) }), h(OrderRenderer, { ref: e => (this.orderService = e) }))), 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) }), h("revogr-extra", { nodes: this.extraElements })));
1904
+ } }, h("div", { class: "viewports" }, h("slot", { name: "viewport" }), viewportSections, 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) }), h(OrderRenderer, { ref: e => (this.orderService = e) }))), 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) }), h("revogr-extra", { ref: el => (this.extraService = el), nodes: this.extraElements }), h("slot", { name: "footer" })));
2538
1905
  }
2539
1906
  disconnectedCallback() {
2540
- // Remove all plugins, to avoid memory leaks and unexpected behaviour when the component is removed
1907
+ // Remove all plugins, to avoid memory leaks
1908
+ // and unexpected behaviour when the component is removed
2541
1909
  this.removePlugins();
2542
1910
  }
2543
1911
  get element() { return getElement(this); }
@@ -2556,6 +1924,7 @@ const RevoGridComponent = class {
2556
1924
  "grouping": ["groupingChanged"],
2557
1925
  "stretch": ["applyStretch"],
2558
1926
  "filter": ["applyFilter"],
1927
+ "sorting": ["applySorting"],
2559
1928
  "rowHeaders": ["rowHeadersChange"],
2560
1929
  "registerVNode": ["registerOutsideVNodes"],
2561
1930
  "additionalData": ["additionalDataChanged"],