@revolist/revogrid 4.0.2-next → 4.0.2

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 (805) hide show
  1. package/LICENSE +1 -1
  2. package/dist/cjs/app-globals-53fde1aa.js +14 -0
  3. package/dist/cjs/app-globals-53fde1aa.js.map +1 -0
  4. package/dist/cjs/column.service-2066d651.js +545 -0
  5. package/dist/cjs/column.service-2066d651.js.map +1 -0
  6. package/dist/cjs/debounce-e2b7c6fb.js +226 -0
  7. package/dist/cjs/debounce-e2b7c6fb.js.map +1 -0
  8. package/dist/cjs/dimension.helpers-ee39d6c4.js +4218 -0
  9. package/dist/cjs/dimension.helpers-ee39d6c4.js.map +1 -0
  10. package/dist/cjs/dispatcher-a58fa91a.js +34 -0
  11. package/dist/cjs/dispatcher-a58fa91a.js.map +1 -0
  12. package/dist/cjs/events-7ccd6894.js +233 -0
  13. package/dist/cjs/events-7ccd6894.js.map +1 -0
  14. package/dist/cjs/filter.button-db6cbd2e.js +44 -0
  15. package/dist/cjs/filter.button-db6cbd2e.js.map +1 -0
  16. package/dist/cjs/header-cell-renderer-3df76829.js +304 -0
  17. package/dist/cjs/header-cell-renderer-3df76829.js.map +1 -0
  18. package/dist/cjs/index-73c149e3.js +106 -0
  19. package/dist/cjs/index-73c149e3.js.map +1 -0
  20. package/dist/cjs/index-84e32c2a.js +1868 -0
  21. package/dist/cjs/index-84e32c2a.js.map +1 -0
  22. package/dist/cjs/index.cjs.js +53 -0
  23. package/dist/cjs/index.cjs.js.map +1 -0
  24. package/dist/cjs/key.utils-dc4ac217.js +129 -0
  25. package/dist/cjs/key.utils-dc4ac217.js.map +1 -0
  26. package/dist/cjs/loader.cjs.js +12 -27
  27. package/dist/cjs/loader.cjs.js.map +1 -0
  28. package/dist/cjs/{resize-observer-8dc80084.js → resize-observer-d009a220.js} +30 -13
  29. package/dist/cjs/resize-observer-d009a220.js.map +1 -0
  30. package/dist/cjs/revo-grid.cjs.entry.js +3992 -0
  31. package/dist/cjs/revo-grid.cjs.entry.js.map +1 -0
  32. package/dist/cjs/revo-grid.cjs.js +22 -65
  33. package/dist/cjs/revo-grid.cjs.js.map +1 -0
  34. package/dist/cjs/revogr-attribution_6.cjs.entry.js +1270 -0
  35. package/dist/cjs/revogr-attribution_6.cjs.entry.js.map +1 -0
  36. package/dist/cjs/revogr-clipboard_3.cjs.entry.js +508 -0
  37. package/dist/cjs/revogr-clipboard_3.cjs.entry.js.map +1 -0
  38. package/dist/cjs/revogr-data_4.cjs.entry.js +958 -0
  39. package/dist/cjs/revogr-data_4.cjs.entry.js.map +1 -0
  40. package/dist/cjs/revogr-filter-panel.cjs.entry.js +268 -115
  41. package/dist/cjs/revogr-filter-panel.cjs.entry.js.map +1 -0
  42. package/dist/cjs/selection.store-2e110a67.js +400 -0
  43. package/dist/cjs/selection.store-2e110a67.js.map +1 -0
  44. package/dist/cjs/storeTypes-b3f924b2.js +106 -0
  45. package/dist/cjs/storeTypes-b3f924b2.js.map +1 -0
  46. package/dist/cjs/throttle-f7aee21b.js +240 -0
  47. package/dist/cjs/throttle-f7aee21b.js.map +1 -0
  48. package/dist/cjs/toNumber-838e6ff5.js +340 -0
  49. package/dist/cjs/toNumber-838e6ff5.js.map +1 -0
  50. package/dist/cjs/viewport.helpers-6670177c.js +262 -0
  51. package/dist/cjs/viewport.helpers-6670177c.js.map +1 -0
  52. package/dist/collection/collection-manifest.json +18 -16
  53. package/dist/collection/components/attribution/revogr-attribution.js +20 -0
  54. package/dist/collection/components/attribution/revogr-attribution.js.map +1 -0
  55. package/dist/collection/components/clipboard/revogr-clipboard.js +410 -115
  56. package/dist/collection/components/clipboard/revogr-clipboard.js.map +1 -0
  57. package/dist/collection/components/data/cell-renderer.js +39 -0
  58. package/dist/collection/components/data/cell-renderer.js.map +1 -0
  59. package/dist/collection/components/data/column.service.js +302 -0
  60. package/dist/collection/components/data/column.service.js.map +1 -0
  61. package/dist/collection/components/data/revogr-data-style.css +18 -11
  62. package/dist/collection/components/data/revogr-data.js +626 -301
  63. package/dist/collection/components/data/revogr-data.js.map +1 -0
  64. package/dist/collection/components/data/row-highlight.plugin.js +51 -0
  65. package/dist/collection/components/data/row-highlight.plugin.js.map +1 -0
  66. package/dist/collection/components/data/row-renderer.js +16 -0
  67. package/dist/collection/components/data/row-renderer.js.map +1 -0
  68. package/dist/collection/components/editors/edit.utils.js +9 -0
  69. package/dist/collection/components/editors/edit.utils.js.map +1 -0
  70. package/dist/collection/components/{overlay → editors}/revogr-edit-style.css +15 -9
  71. package/dist/collection/components/editors/revogr-edit.js +316 -0
  72. package/dist/collection/components/editors/revogr-edit.js.map +1 -0
  73. package/dist/collection/components/editors/text-editor.js +73 -0
  74. package/dist/collection/components/editors/text-editor.js.map +1 -0
  75. package/dist/collection/components/header/header-cell-renderer.js +28 -0
  76. package/dist/collection/components/header/header-cell-renderer.js.map +1 -0
  77. package/dist/collection/components/header/header-renderer.js +47 -0
  78. package/dist/collection/components/header/header-renderer.js.map +1 -0
  79. package/dist/collection/components/header/revogr-header-style.css +15 -9
  80. package/dist/collection/components/header/revogr-header.js +421 -297
  81. package/dist/collection/components/header/revogr-header.js.map +1 -0
  82. package/dist/collection/components/order/order-renderer.js +50 -0
  83. package/dist/collection/components/order/order-renderer.js.map +1 -0
  84. package/dist/collection/components/order/order-row.service.js +72 -0
  85. package/dist/collection/components/order/order-row.service.js.map +1 -0
  86. package/dist/collection/components/order/revogr-order-editor.js +381 -350
  87. package/dist/collection/components/order/revogr-order-editor.js.map +1 -0
  88. package/dist/collection/components/overlay/autofill.service.js +206 -179
  89. package/dist/collection/components/overlay/autofill.service.js.map +1 -0
  90. package/dist/collection/components/overlay/keyboard.service.js +137 -124
  91. package/dist/collection/components/overlay/keyboard.service.js.map +1 -0
  92. package/dist/collection/components/overlay/revogr-overlay-selection.js +1208 -703
  93. package/dist/collection/components/overlay/revogr-overlay-selection.js.map +1 -0
  94. package/dist/collection/components/overlay/revogr-overlay-style.css +86 -13
  95. package/dist/collection/components/overlay/selection.utils.js +86 -82
  96. package/dist/collection/components/overlay/selection.utils.js.map +1 -0
  97. package/dist/collection/components/revoGrid/grid.helpers.js +28 -13
  98. package/dist/collection/components/revoGrid/grid.helpers.js.map +1 -0
  99. package/dist/collection/components/revoGrid/revo-grid-style.css +143 -51
  100. package/dist/collection/components/revoGrid/revo-grid.js +2834 -2181
  101. package/dist/collection/components/revoGrid/revo-grid.js.map +1 -0
  102. package/dist/collection/components/revoGrid/viewport.helpers.js +9 -4
  103. package/dist/collection/components/revoGrid/viewport.helpers.js.map +1 -0
  104. package/dist/collection/components/revoGrid/viewport.resize.service.js +23 -19
  105. package/dist/collection/components/revoGrid/viewport.resize.service.js.map +1 -0
  106. package/dist/collection/components/revoGrid/viewport.scrolling.service.js +78 -50
  107. package/dist/collection/components/revoGrid/viewport.scrolling.service.js.map +1 -0
  108. package/dist/collection/components/revoGrid/viewport.service.js +224 -204
  109. package/dist/collection/components/revoGrid/viewport.service.js.map +1 -0
  110. package/dist/collection/components/rowHeaders/revogr-row-headers.js +262 -204
  111. package/dist/collection/components/rowHeaders/revogr-row-headers.js.map +1 -0
  112. package/dist/collection/components/rowHeaders/row-header-render.js +4 -0
  113. package/dist/collection/components/rowHeaders/row-header-render.js.map +1 -0
  114. package/dist/collection/components/scroll/revogr-viewport-scroll-style.css +20 -13
  115. package/dist/collection/components/scroll/revogr-viewport-scroll.js +535 -369
  116. package/dist/collection/components/scroll/revogr-viewport-scroll.js.map +1 -0
  117. package/dist/collection/components/scrollable/autohide-scroll.plugin.js +44 -0
  118. package/dist/collection/components/scrollable/autohide-scroll.plugin.js.map +1 -0
  119. package/dist/collection/components/scrollable/revogr-scroll-style.css +24 -18
  120. package/dist/collection/components/scrollable/revogr-scroll-virtual.js +286 -247
  121. package/dist/collection/components/scrollable/revogr-scroll-virtual.js.map +1 -0
  122. package/dist/collection/components/selectionFocus/revogr-focus-style.css +16 -10
  123. package/dist/collection/components/selectionFocus/revogr-focus.js +366 -96
  124. package/dist/collection/components/selectionFocus/revogr-focus.js.map +1 -0
  125. package/dist/collection/components/selectionTempRange/revogr-temp-range-style.css +16 -10
  126. package/dist/collection/components/selectionTempRange/revogr-temp-range.js +149 -128
  127. package/dist/collection/components/selectionTempRange/revogr-temp-range.js.map +1 -0
  128. package/dist/collection/components/vnode/vnode-converter.js +81 -0
  129. package/dist/collection/components/vnode/vnode-converter.js.map +1 -0
  130. package/dist/collection/components/vnode/vnode.utils.js +18 -0
  131. package/dist/collection/components/vnode/vnode.utils.js.map +1 -0
  132. package/dist/collection/global/global.js +15 -11
  133. package/dist/collection/global/global.js.map +1 -0
  134. package/dist/collection/index.js +18 -0
  135. package/dist/collection/index.js.map +1 -0
  136. package/dist/collection/plugins/base.plugin.js +88 -0
  137. package/dist/collection/plugins/base.plugin.js.map +1 -0
  138. package/dist/collection/plugins/column.auto-size.plugin.js +234 -0
  139. package/dist/collection/plugins/column.auto-size.plugin.js.map +1 -0
  140. package/dist/collection/plugins/column.stretch.plugin.js +96 -0
  141. package/dist/collection/plugins/column.stretch.plugin.js.map +1 -0
  142. package/dist/collection/plugins/dispatcher.js +27 -0
  143. package/dist/collection/plugins/dispatcher.js.map +1 -0
  144. package/dist/collection/plugins/export/csv.js +57 -53
  145. package/dist/collection/plugins/export/csv.js.map +1 -0
  146. package/dist/collection/plugins/export/export.plugin.js +154 -150
  147. package/dist/collection/plugins/export/export.plugin.js.map +1 -0
  148. package/dist/collection/plugins/export/types.js +1 -0
  149. package/dist/collection/plugins/export/types.js.map +1 -0
  150. package/dist/collection/plugins/filter/conditions/equal.js +15 -7
  151. package/dist/collection/plugins/filter/conditions/equal.js.map +1 -0
  152. package/dist/collection/plugins/filter/conditions/number/greaterThan.js +10 -6
  153. package/dist/collection/plugins/filter/conditions/number/greaterThan.js.map +1 -0
  154. package/dist/collection/plugins/filter/conditions/number/greaterThanOrEqual.js +7 -3
  155. package/dist/collection/plugins/filter/conditions/number/greaterThanOrEqual.js.map +1 -0
  156. package/dist/collection/plugins/filter/conditions/number/lessThan.js +12 -8
  157. package/dist/collection/plugins/filter/conditions/number/lessThan.js.map +1 -0
  158. package/dist/collection/plugins/filter/conditions/number/lessThanOrEqual.js +7 -3
  159. package/dist/collection/plugins/filter/conditions/number/lessThanOrEqual.js.map +1 -0
  160. package/dist/collection/plugins/filter/conditions/set.js +4 -0
  161. package/dist/collection/plugins/filter/conditions/set.js.map +1 -0
  162. package/dist/collection/plugins/filter/conditions/string/beginswith.js +17 -13
  163. package/dist/collection/plugins/filter/conditions/string/beginswith.js.map +1 -0
  164. package/dist/collection/plugins/filter/conditions/string/contains.js +17 -10
  165. package/dist/collection/plugins/filter/conditions/string/contains.js.map +1 -0
  166. package/dist/collection/plugins/filter/filter.button.js +21 -13
  167. package/dist/collection/plugins/filter/filter.button.js.map +1 -0
  168. package/dist/collection/plugins/filter/filter.plugin.js +280 -185
  169. package/dist/collection/plugins/filter/filter.plugin.js.map +1 -0
  170. package/dist/collection/plugins/filter/filter.pop.js +492 -246
  171. package/dist/collection/plugins/filter/filter.pop.js.map +1 -0
  172. package/dist/collection/plugins/filter/filter.service.js +42 -38
  173. package/dist/collection/plugins/filter/filter.service.js.map +1 -0
  174. package/dist/collection/plugins/filter/filter.style.css +68 -15
  175. package/dist/collection/plugins/filter/filter.types.js +1 -0
  176. package/dist/collection/plugins/filter/filter.types.js.map +1 -0
  177. package/dist/collection/plugins/groupingColumn/columnGroupsRenderer.js +30 -26
  178. package/dist/collection/plugins/groupingColumn/columnGroupsRenderer.js.map +1 -0
  179. package/dist/collection/plugins/groupingColumn/grouping.col.plugin.js +38 -30
  180. package/dist/collection/plugins/groupingColumn/grouping.col.plugin.js.map +1 -0
  181. package/dist/collection/plugins/groupingColumn/headerGroupRenderer.js +22 -18
  182. package/dist/collection/plugins/groupingColumn/headerGroupRenderer.js.map +1 -0
  183. package/dist/collection/plugins/groupingRow/grouping.const.js +7 -2
  184. package/dist/collection/plugins/groupingRow/grouping.const.js.map +1 -0
  185. package/dist/collection/plugins/groupingRow/grouping.row.expand.service.js +64 -61
  186. package/dist/collection/plugins/groupingRow/grouping.row.expand.service.js.map +1 -0
  187. package/dist/collection/plugins/groupingRow/grouping.row.plugin.js +239 -237
  188. package/dist/collection/plugins/groupingRow/grouping.row.plugin.js.map +1 -0
  189. package/dist/collection/plugins/groupingRow/grouping.row.renderer.js +27 -24
  190. package/dist/collection/plugins/groupingRow/grouping.row.renderer.js.map +1 -0
  191. package/dist/collection/plugins/groupingRow/grouping.row.types.js +1 -0
  192. package/dist/collection/plugins/groupingRow/grouping.row.types.js.map +1 -0
  193. package/dist/collection/plugins/groupingRow/grouping.service.js +101 -131
  194. package/dist/collection/plugins/groupingRow/grouping.service.js.map +1 -0
  195. package/dist/collection/plugins/groupingRow/grouping.trimmed.service.js +47 -43
  196. package/dist/collection/plugins/groupingRow/grouping.trimmed.service.js.map +1 -0
  197. package/dist/collection/plugins/moveColumn/column.drag.plugin.js +167 -0
  198. package/dist/collection/plugins/moveColumn/column.drag.plugin.js.map +1 -0
  199. package/dist/collection/plugins/moveColumn/order-column.handler.js +69 -0
  200. package/dist/collection/plugins/moveColumn/order-column.handler.js.map +1 -0
  201. package/dist/collection/plugins/sorting/sorting.plugin.js +218 -163
  202. package/dist/collection/plugins/sorting/sorting.plugin.js.map +1 -0
  203. package/dist/collection/plugins/sorting/sorting.sign.js +6 -2
  204. package/dist/collection/plugins/sorting/sorting.sign.js.map +1 -0
  205. package/dist/collection/serve/controller.js +233 -0
  206. package/dist/collection/{utilsExternal/generate-data.js → serve/data.js} +72 -32
  207. package/dist/collection/services/cell.helpers.js +9 -5
  208. package/dist/collection/services/cell.helpers.js.map +1 -0
  209. package/dist/collection/services/column.data.provider.js +201 -185
  210. package/dist/collection/services/column.data.provider.js.map +1 -0
  211. package/dist/collection/services/data.provider.js +70 -45
  212. package/dist/collection/services/data.provider.js.map +1 -0
  213. package/dist/collection/services/dimension.provider.js +143 -84
  214. package/dist/collection/services/dimension.provider.js.map +1 -0
  215. package/dist/collection/services/local.scroll.service.js +120 -0
  216. package/dist/collection/services/local.scroll.service.js.map +1 -0
  217. package/dist/collection/services/local.scroll.timer.js +42 -0
  218. package/dist/collection/services/local.scroll.timer.js.map +1 -0
  219. package/dist/collection/services/resizable.directive.js +211 -226
  220. package/dist/collection/services/resizable.directive.js.map +1 -0
  221. package/dist/collection/services/resizable.element.js +39 -0
  222. package/dist/collection/services/resizable.element.js.map +1 -0
  223. package/dist/collection/services/selection.store.connector.js +257 -208
  224. package/dist/collection/services/selection.store.connector.js.map +1 -0
  225. package/dist/collection/services/viewport.provider.js +16 -12
  226. package/dist/collection/services/viewport.provider.js.map +1 -0
  227. package/dist/collection/store/dataSource/data.proxy.js +29 -25
  228. package/dist/collection/store/dataSource/data.proxy.js.map +1 -0
  229. package/dist/collection/store/dataSource/data.store.js +100 -93
  230. package/dist/collection/store/dataSource/data.store.js.map +1 -0
  231. package/dist/collection/store/dataSource/index.js +7 -0
  232. package/dist/collection/store/dataSource/index.js.map +1 -0
  233. package/dist/collection/store/dataSource/trimmed.plugin.js +36 -0
  234. package/dist/collection/store/dataSource/trimmed.plugin.js.map +1 -0
  235. package/dist/collection/store/dimension/dimension.helpers.js +97 -95
  236. package/dist/collection/store/dimension/dimension.helpers.js.map +1 -0
  237. package/dist/collection/store/dimension/dimension.store.js +106 -48
  238. package/dist/collection/store/dimension/dimension.store.js.map +1 -0
  239. package/dist/collection/store/dimension/index.js +6 -0
  240. package/dist/collection/store/dimension/index.js.map +1 -0
  241. package/dist/collection/store/selection/index.js +7 -0
  242. package/dist/collection/store/selection/index.js.map +1 -0
  243. package/dist/collection/store/selection/selection.helpers.js +43 -39
  244. package/dist/collection/store/selection/selection.helpers.js.map +1 -0
  245. package/dist/collection/store/selection/selection.store.js +75 -63
  246. package/dist/collection/store/selection/selection.store.js.map +1 -0
  247. package/dist/collection/store/selection/selection.store.service.js +35 -31
  248. package/dist/collection/store/selection/selection.store.service.js.map +1 -0
  249. package/dist/collection/store/storeTypes.js +10 -2
  250. package/dist/collection/store/storeTypes.js.map +1 -0
  251. package/dist/collection/store/viewport/index.js +6 -0
  252. package/dist/collection/store/viewport/index.js.map +1 -0
  253. package/dist/collection/store/viewport/viewport.helpers.js +247 -0
  254. package/dist/collection/store/viewport/viewport.helpers.js.map +1 -0
  255. package/dist/collection/store/viewport/viewport.store.js +193 -0
  256. package/dist/collection/store/viewport/viewport.store.js.map +1 -0
  257. package/dist/collection/themeManager/theme.compact.js +7 -3
  258. package/dist/collection/themeManager/theme.compact.js.map +1 -0
  259. package/dist/collection/themeManager/theme.default.js +7 -3
  260. package/dist/collection/themeManager/theme.default.js.map +1 -0
  261. package/dist/collection/themeManager/theme.material.js +7 -3
  262. package/dist/collection/themeManager/theme.material.js.map +1 -0
  263. package/dist/collection/themeManager/theme.service.js +53 -0
  264. package/dist/collection/themeManager/theme.service.js.map +1 -0
  265. package/dist/collection/types/dimension.js +2 -0
  266. package/dist/collection/types/dimension.js.map +1 -0
  267. package/dist/collection/types/interfaces.js +2 -0
  268. package/dist/collection/types/interfaces.js.map +1 -0
  269. package/dist/collection/types/plugin.js +2 -0
  270. package/dist/collection/types/plugin.js.map +1 -0
  271. package/dist/collection/types/plugin.types.js +2 -0
  272. package/dist/collection/types/plugin.types.js.map +1 -0
  273. package/dist/collection/types/selection.js +2 -0
  274. package/dist/collection/types/selection.js.map +1 -0
  275. package/dist/collection/types/theme.js +2 -0
  276. package/dist/collection/types/theme.js.map +1 -0
  277. package/dist/collection/types/viewport.interfaces.js +2 -0
  278. package/dist/collection/types/viewport.interfaces.js.map +1 -0
  279. package/dist/collection/utils/browser.js +7 -0
  280. package/dist/collection/utils/browser.js.map +1 -0
  281. package/dist/collection/utils/closest.polifill.js +22 -0
  282. package/dist/collection/utils/closest.polifill.js.map +1 -0
  283. package/dist/collection/utils/consts.js +8 -0
  284. package/dist/collection/utils/consts.js.map +1 -0
  285. package/dist/collection/utils/events.js +29 -0
  286. package/dist/collection/utils/events.js.map +1 -0
  287. package/dist/collection/utils/header.utils.js +24 -0
  288. package/dist/collection/utils/header.utils.js.map +1 -0
  289. package/dist/collection/utils/index.js +125 -0
  290. package/dist/collection/utils/index.js.map +1 -0
  291. package/dist/collection/utils/key.codes.js +76 -0
  292. package/dist/collection/utils/key.codes.js.map +1 -0
  293. package/dist/collection/utils/key.utils.js +84 -0
  294. package/dist/collection/utils/key.utils.js.map +1 -0
  295. package/dist/collection/utils/mobile.js +7 -0
  296. package/dist/collection/utils/mobile.js.map +1 -0
  297. package/dist/collection/utils/platform.js +5 -1
  298. package/dist/collection/utils/platform.js.map +1 -0
  299. package/dist/collection/utils/resize-observer.polifill.js +10 -0
  300. package/dist/collection/utils/resize-observer.polifill.js.map +1 -0
  301. package/dist/collection/utils/row-header-utils.js +9 -0
  302. package/dist/collection/utils/row-header-utils.js.map +1 -0
  303. package/dist/collection/utils/store.utils.js +7 -3
  304. package/dist/collection/utils/store.utils.js.map +1 -0
  305. package/dist/esm/app-globals-ef1fca59.js +12 -0
  306. package/dist/esm/app-globals-ef1fca59.js.map +1 -0
  307. package/dist/esm/column.service-21a3af74.js +520 -0
  308. package/dist/esm/column.service-21a3af74.js.map +1 -0
  309. package/dist/esm/debounce-7781346d.js +224 -0
  310. package/dist/esm/debounce-7781346d.js.map +1 -0
  311. package/dist/esm/dimension.helpers-a3065cb1.js +4185 -0
  312. package/dist/esm/dimension.helpers-a3065cb1.js.map +1 -0
  313. package/dist/esm/dispatcher-8ea9187d.js +30 -0
  314. package/dist/esm/dispatcher-8ea9187d.js.map +1 -0
  315. package/dist/esm/events-3dd8ee7c.js +228 -0
  316. package/dist/esm/events-3dd8ee7c.js.map +1 -0
  317. package/dist/esm/filter.button-46ce4f80.js +38 -0
  318. package/dist/esm/filter.button-46ce4f80.js.map +1 -0
  319. package/dist/esm/header-cell-renderer-1ca84d5f.js +301 -0
  320. package/dist/esm/header-cell-renderer-1ca84d5f.js.map +1 -0
  321. package/dist/esm/index-21436631.js +1837 -0
  322. package/dist/esm/index-21436631.js.map +1 -0
  323. package/dist/esm/index-98fd0168.js +79 -0
  324. package/dist/esm/index-98fd0168.js.map +1 -0
  325. package/dist/esm/index.js +11 -0
  326. package/dist/esm/index.js.map +1 -0
  327. package/dist/esm/key.utils-4586a3d6.js +120 -0
  328. package/dist/esm/key.utils-4586a3d6.js.map +1 -0
  329. package/dist/esm/loader.js +11 -26
  330. package/dist/esm/loader.js.map +1 -0
  331. package/dist/esm/{resize-observer-56b7b34f.js → resize-observer-83c9e167.js} +30 -14
  332. package/dist/esm/resize-observer-83c9e167.js.map +1 -0
  333. package/dist/esm/revo-grid.entry.js +3988 -0
  334. package/dist/esm/revo-grid.entry.js.map +1 -0
  335. package/dist/esm/revo-grid.js +19 -65
  336. package/dist/esm/revo-grid.js.map +1 -0
  337. package/dist/esm/revogr-attribution_6.entry.js +1261 -0
  338. package/dist/esm/revogr-attribution_6.entry.js.map +1 -0
  339. package/dist/esm/revogr-clipboard_3.entry.js +502 -0
  340. package/dist/esm/revogr-clipboard_3.entry.js.map +1 -0
  341. package/dist/esm/revogr-data_4.entry.js +951 -0
  342. package/dist/esm/revogr-data_4.entry.js.map +1 -0
  343. package/dist/esm/revogr-filter-panel.entry.js +268 -115
  344. package/dist/esm/revogr-filter-panel.entry.js.map +1 -0
  345. package/dist/esm/selection.store-2577ddf9.js +391 -0
  346. package/dist/esm/selection.store-2577ddf9.js.map +1 -0
  347. package/dist/esm/storeTypes-f2647985.js +101 -0
  348. package/dist/esm/storeTypes-f2647985.js.map +1 -0
  349. package/dist/esm/throttle-cfd527d6.js +235 -0
  350. package/dist/esm/throttle-cfd527d6.js.map +1 -0
  351. package/dist/esm/toNumber-8de324a7.js +331 -0
  352. package/dist/esm/toNumber-8de324a7.js.map +1 -0
  353. package/dist/esm/viewport.helpers-6591d423.js +251 -0
  354. package/dist/esm/viewport.helpers-6591d423.js.map +1 -0
  355. package/dist/index.js +1 -1
  356. package/dist/loader/cdn.js +4 -0
  357. package/dist/loader/index.cjs.js +4 -0
  358. package/{loader → dist/loader}/index.d.ts +11 -3
  359. package/dist/loader/index.es2017.js +4 -0
  360. package/dist/{esm/polyfills/es5-html-element.js → loader/index.js} +5 -1
  361. package/{loader → dist/loader}/package.json +1 -0
  362. package/dist/revo-grid/app-globals-ef1fca59.js +5 -0
  363. package/dist/revo-grid/app-globals-ef1fca59.js.map +1 -0
  364. package/dist/revo-grid/column.service-21a3af74.js +5 -0
  365. package/dist/revo-grid/column.service-21a3af74.js.map +1 -0
  366. package/dist/revo-grid/debounce-7781346d.js +5 -0
  367. package/dist/revo-grid/debounce-7781346d.js.map +1 -0
  368. package/dist/revo-grid/dimension.helpers-a3065cb1.js +5 -0
  369. package/dist/revo-grid/dimension.helpers-a3065cb1.js.map +1 -0
  370. package/dist/revo-grid/dispatcher-8ea9187d.js +5 -0
  371. package/dist/revo-grid/dispatcher-8ea9187d.js.map +1 -0
  372. package/dist/revo-grid/events-3dd8ee7c.js +5 -0
  373. package/dist/revo-grid/events-3dd8ee7c.js.map +1 -0
  374. package/dist/revo-grid/filter.button-46ce4f80.js +5 -0
  375. package/dist/revo-grid/filter.button-46ce4f80.js.map +1 -0
  376. package/dist/revo-grid/header-cell-renderer-1ca84d5f.js +5 -0
  377. package/dist/revo-grid/header-cell-renderer-1ca84d5f.js.map +1 -0
  378. package/dist/revo-grid/index-21436631.js +6 -0
  379. package/dist/revo-grid/index-21436631.js.map +1 -0
  380. package/dist/revo-grid/index-98fd0168.js +5 -0
  381. package/dist/revo-grid/index-98fd0168.js.map +1 -0
  382. package/dist/revo-grid/index.esm.js +5 -0
  383. package/dist/revo-grid/index.esm.js.map +1 -0
  384. package/dist/revo-grid/key.utils-4586a3d6.js +5 -0
  385. package/dist/revo-grid/key.utils-4586a3d6.js.map +1 -0
  386. package/dist/revo-grid/resize-observer-83c9e167.js +5 -0
  387. package/dist/revo-grid/resize-observer-83c9e167.js.map +1 -0
  388. package/dist/revo-grid/revo-grid.entry.js +5 -0
  389. package/dist/revo-grid/revo-grid.entry.js.map +1 -0
  390. package/dist/revo-grid/revo-grid.esm.js +5 -1
  391. package/dist/revo-grid/revo-grid.esm.js.map +1 -0
  392. package/dist/revo-grid/revogr-attribution_6.entry.js +5 -0
  393. package/dist/revo-grid/revogr-attribution_6.entry.js.map +1 -0
  394. package/dist/revo-grid/revogr-clipboard_3.entry.js +5 -0
  395. package/dist/revo-grid/revogr-clipboard_3.entry.js.map +1 -0
  396. package/dist/revo-grid/revogr-data_4.entry.js +5 -0
  397. package/dist/revo-grid/revogr-data_4.entry.js.map +1 -0
  398. package/dist/revo-grid/revogr-filter-panel.entry.js +5 -1
  399. package/dist/revo-grid/revogr-filter-panel.entry.js.map +1 -0
  400. package/dist/revo-grid/selection.store-2577ddf9.js +5 -0
  401. package/dist/revo-grid/selection.store-2577ddf9.js.map +1 -0
  402. package/dist/revo-grid/storeTypes-f2647985.js +5 -0
  403. package/dist/revo-grid/storeTypes-f2647985.js.map +1 -0
  404. package/dist/revo-grid/throttle-cfd527d6.js +5 -0
  405. package/dist/revo-grid/throttle-cfd527d6.js.map +1 -0
  406. package/dist/revo-grid/toNumber-8de324a7.js +5 -0
  407. package/dist/revo-grid/toNumber-8de324a7.js.map +1 -0
  408. package/dist/revo-grid/viewport.helpers-6591d423.js +5 -0
  409. package/dist/revo-grid/viewport.helpers-6591d423.js.map +1 -0
  410. package/dist/types/components/attribution/revogr-attribution.d.ts +12 -0
  411. package/dist/types/components/clipboard/revogr-clipboard.d.ts +78 -10
  412. package/dist/types/components/data/cell-renderer.d.ts +14 -0
  413. package/dist/types/components/data/column.service.d.ts +60 -0
  414. package/dist/types/components/data/revogr-data.d.ts +101 -27
  415. package/dist/types/components/data/row-highlight.plugin.d.ts +10 -0
  416. package/dist/types/components/data/{rowRenderer.d.ts → row-renderer.d.ts} +6 -5
  417. package/dist/types/components/editors/revogr-edit.d.ts +63 -0
  418. package/dist/types/components/editors/text-editor.d.ts +46 -0
  419. package/dist/types/components/header/header-cell-renderer.d.ts +11 -0
  420. package/dist/types/components/header/header-renderer.d.ts +17 -0
  421. package/dist/types/components/header/revogr-header.d.ts +70 -22
  422. package/dist/types/components/order/order-renderer.d.ts +29 -0
  423. package/dist/types/components/order/order-row.service.d.ts +28 -0
  424. package/dist/types/components/order/revogr-order-editor.d.ts +43 -41
  425. package/dist/types/components/overlay/autofill.service.d.ts +69 -54
  426. package/dist/types/components/overlay/keyboard.service.d.ts +24 -23
  427. package/dist/types/components/overlay/revogr-overlay-selection.d.ts +216 -75
  428. package/dist/types/components/overlay/selection.utils.d.ts +24 -27
  429. package/dist/types/components/revoGrid/grid.helpers.d.ts +16 -11
  430. package/dist/types/components/revoGrid/revo-grid.d.ts +555 -403
  431. package/dist/types/components/revoGrid/viewport.helpers.d.ts +4 -3
  432. package/dist/types/components/revoGrid/viewport.resize.service.d.ts +7 -7
  433. package/dist/types/components/revoGrid/viewport.scrolling.service.d.ts +20 -21
  434. package/dist/types/components/revoGrid/viewport.service.d.ts +54 -56
  435. package/dist/types/components/rowHeaders/revogr-row-headers.d.ts +45 -12
  436. package/dist/types/components/rowHeaders/row-header-render.d.ts +5 -5
  437. package/dist/types/components/scroll/revogr-viewport-scroll.d.ts +115 -76
  438. package/dist/types/components/scrollable/autohide-scroll.plugin.d.ts +22 -0
  439. package/dist/types/components/scrollable/revogr-scroll-virtual.d.ts +39 -22
  440. package/dist/types/components/selectionFocus/revogr-focus.d.ts +61 -9
  441. package/dist/types/components/selectionTempRange/revogr-temp-range.d.ts +26 -11
  442. package/dist/types/components/vnode/vnode-converter.d.ts +19 -0
  443. package/dist/types/components/vnode/vnode.utils.d.ts +8 -0
  444. package/dist/types/components.d.ts +1595 -274
  445. package/dist/types/index.d.ts +14 -0
  446. package/dist/types/plugins/base.plugin.d.ts +49 -0
  447. package/dist/types/plugins/column.auto-size.plugin.d.ts +47 -0
  448. package/dist/types/plugins/column.stretch.plugin.d.ts +22 -0
  449. package/dist/types/plugins/dispatcher.d.ts +16 -0
  450. package/dist/types/plugins/export/csv.d.ts +6 -6
  451. package/dist/types/plugins/export/export.plugin.d.ts +18 -18
  452. package/dist/types/plugins/export/types.d.ts +15 -15
  453. package/dist/types/plugins/filter/filter.button.d.ts +7 -3
  454. package/dist/types/plugins/filter/filter.plugin.d.ts +61 -43
  455. package/dist/types/plugins/filter/filter.pop.d.ts +60 -35
  456. package/dist/types/plugins/filter/filter.service.d.ts +15 -15
  457. package/dist/types/plugins/filter/filter.types.d.ts +7 -7
  458. package/dist/types/plugins/groupingColumn/columnGroupsRenderer.d.ts +16 -13
  459. package/dist/types/plugins/groupingColumn/grouping.col.plugin.d.ts +10 -6
  460. package/dist/types/plugins/groupingColumn/headerGroupRenderer.d.ts +12 -10
  461. package/dist/types/plugins/groupingRow/grouping.const.d.ts +8 -7
  462. package/dist/types/plugins/groupingRow/grouping.row.expand.service.d.ts +6 -6
  463. package/dist/types/plugins/groupingRow/grouping.row.plugin.d.ts +32 -37
  464. package/dist/types/plugins/groupingRow/grouping.row.renderer.d.ts +7 -5
  465. package/dist/types/plugins/groupingRow/grouping.row.types.d.ts +23 -15
  466. package/dist/types/plugins/groupingRow/grouping.service.d.ts +18 -16
  467. package/dist/types/plugins/groupingRow/grouping.trimmed.service.d.ts +1 -1
  468. package/dist/types/plugins/moveColumn/column.drag.plugin.d.ts +56 -0
  469. package/dist/types/plugins/moveColumn/order-column.handler.d.ts +16 -0
  470. package/dist/types/plugins/sorting/sorting.plugin.d.ts +40 -27
  471. package/dist/types/plugins/sorting/sorting.sign.d.ts +3 -3
  472. package/dist/types/services/cell.helpers.d.ts +2 -2
  473. package/dist/types/services/column.data.provider.d.ts +33 -35
  474. package/dist/types/services/data.provider.d.ts +27 -21
  475. package/dist/types/services/dimension.provider.d.ts +52 -32
  476. package/dist/types/services/local.scroll.service.d.ts +37 -0
  477. package/dist/types/services/local.scroll.timer.d.ts +26 -0
  478. package/dist/types/services/resizable.directive.d.ts +52 -51
  479. package/dist/types/services/resizable.element.d.ts +4 -0
  480. package/dist/types/services/selection.store.connector.d.ts +54 -36
  481. package/dist/types/services/viewport.provider.d.ts +6 -8
  482. package/dist/types/stencil-public-runtime.d.ts +331 -217
  483. package/dist/types/store/dataSource/data.proxy.d.ts +3 -3
  484. package/dist/types/store/dataSource/data.store.d.ts +45 -46
  485. package/dist/types/store/dataSource/index.d.ts +3 -0
  486. package/dist/types/store/dataSource/trimmed.plugin.d.ts +10 -0
  487. package/dist/types/store/dimension/dimension.helpers.d.ts +24 -9
  488. package/dist/types/store/dimension/dimension.store.d.ts +29 -11
  489. package/dist/types/store/dimension/index.d.ts +2 -0
  490. package/dist/types/store/selection/index.d.ts +3 -0
  491. package/dist/types/store/selection/selection.helpers.d.ts +1 -3
  492. package/dist/types/store/selection/selection.store.d.ts +19 -17
  493. package/dist/types/store/selection/selection.store.service.d.ts +12 -13
  494. package/dist/types/store/storeTypes.d.ts +4 -4
  495. package/dist/types/store/viewport/index.d.ts +2 -0
  496. package/dist/types/store/viewport/viewport.helpers.d.ts +54 -0
  497. package/dist/types/store/viewport/viewport.store.d.ts +36 -0
  498. package/dist/types/themeManager/theme.compact.d.ts +3 -3
  499. package/dist/types/themeManager/theme.default.d.ts +3 -3
  500. package/dist/types/themeManager/theme.material.d.ts +3 -3
  501. package/dist/types/themeManager/theme.service.d.ts +13 -0
  502. package/dist/types/types/dimension.d.ts +8 -0
  503. package/dist/types/types/interfaces.d.ts +243 -0
  504. package/dist/types/types/plugin.d.ts +9 -0
  505. package/dist/types/types/plugin.types.d.ts +12 -0
  506. package/dist/types/types/selection.d.ts +115 -0
  507. package/dist/types/types/theme.d.ts +7 -0
  508. package/dist/types/types/viewport.interfaces.d.ts +51 -0
  509. package/dist/types/utils/browser.d.ts +1 -0
  510. package/dist/types/utils/consts.d.ts +5 -1
  511. package/dist/types/utils/events.d.ts +2 -0
  512. package/dist/types/utils/{utils.d.ts → index.d.ts} +17 -1
  513. package/dist/types/utils/key.codes.d.ts +70 -0
  514. package/dist/types/utils/{keyCodes.utils.d.ts → key.utils.d.ts} +5 -1
  515. package/dist/types/utils/mobile.d.ts +1 -0
  516. package/dist/types/utils/platform.d.ts +1 -1
  517. package/dist/types/utils/row-header-utils.d.ts +2 -0
  518. package/dist/types/utils/store.utils.d.ts +2 -2
  519. package/hydrate/index.d.ts +218 -0
  520. package/hydrate/index.js +32381 -0
  521. package/hydrate/package.json +6 -0
  522. package/package.json +94 -52
  523. package/readme.md +135 -98
  524. package/standalone/_baseIteratee.js +1237 -0
  525. package/standalone/_baseIteratee.js.map +1 -0
  526. package/standalone/_stringToPath.js +1389 -0
  527. package/standalone/_stringToPath.js.map +1 -0
  528. package/standalone/column.service.js +889 -0
  529. package/standalone/column.service.js.map +1 -0
  530. package/standalone/consts.js +30 -0
  531. package/standalone/consts.js.map +1 -0
  532. package/standalone/data.store.js +705 -0
  533. package/standalone/data.store.js.map +1 -0
  534. package/standalone/debounce.js +225 -0
  535. package/standalone/debounce.js.map +1 -0
  536. package/standalone/dimension.helpers.js +355 -0
  537. package/standalone/dimension.helpers.js.map +1 -0
  538. package/standalone/each.js +200 -0
  539. package/standalone/each.js.map +1 -0
  540. package/standalone/filter.button.js +38 -0
  541. package/standalone/filter.button.js.map +1 -0
  542. package/standalone/identity.js +349 -0
  543. package/standalone/identity.js.map +1 -0
  544. package/standalone/index.d.ts +66 -0
  545. package/standalone/index.js +42 -0
  546. package/standalone/index.js.map +1 -0
  547. package/standalone/index2.js +55 -0
  548. package/standalone/index2.js.map +1 -0
  549. package/standalone/isObjectLike.js +195 -0
  550. package/standalone/isObjectLike.js.map +1 -0
  551. package/standalone/local.scroll.timer.js +163 -0
  552. package/standalone/local.scroll.timer.js.map +1 -0
  553. package/{custom-element → standalone}/resize-observer.js +30 -14
  554. package/standalone/resize-observer.js.map +1 -0
  555. package/standalone/revo-grid.d.ts +11 -0
  556. package/standalone/revo-grid.js +4252 -0
  557. package/standalone/revo-grid.js.map +1 -0
  558. package/standalone/revogr-attribution.d.ts +11 -0
  559. package/standalone/revogr-attribution.js +11 -0
  560. package/standalone/revogr-attribution.js.map +1 -0
  561. package/standalone/revogr-attribution2.js +31 -0
  562. package/standalone/revogr-attribution2.js.map +1 -0
  563. package/standalone/revogr-clipboard.d.ts +11 -0
  564. package/standalone/revogr-clipboard.js +11 -0
  565. package/standalone/revogr-clipboard.js.map +1 -0
  566. package/standalone/revogr-clipboard2.js +159 -0
  567. package/standalone/revogr-clipboard2.js.map +1 -0
  568. package/standalone/revogr-data.d.ts +11 -0
  569. package/standalone/revogr-data.js +11 -0
  570. package/standalone/revogr-data.js.map +1 -0
  571. package/standalone/revogr-data2.js +368 -0
  572. package/standalone/revogr-data2.js.map +1 -0
  573. package/standalone/revogr-edit.d.ts +11 -0
  574. package/standalone/revogr-edit.js +11 -0
  575. package/standalone/revogr-edit.js.map +1 -0
  576. package/standalone/revogr-edit2.js +335 -0
  577. package/standalone/revogr-edit2.js.map +1 -0
  578. package/standalone/revogr-filter-panel.d.ts +11 -0
  579. package/standalone/revogr-filter-panel.js +310 -0
  580. package/standalone/revogr-filter-panel.js.map +1 -0
  581. package/standalone/revogr-focus.d.ts +11 -0
  582. package/standalone/revogr-focus.js +11 -0
  583. package/standalone/revogr-focus.js.map +1 -0
  584. package/standalone/revogr-focus2.js +106 -0
  585. package/standalone/revogr-focus2.js.map +1 -0
  586. package/standalone/revogr-header.d.ts +11 -0
  587. package/standalone/revogr-header.js +11 -0
  588. package/standalone/revogr-header.js.map +1 -0
  589. package/standalone/revogr-header2.js +667 -0
  590. package/standalone/revogr-header2.js.map +1 -0
  591. package/standalone/revogr-order-editor.d.ts +11 -0
  592. package/standalone/revogr-order-editor.js +11 -0
  593. package/standalone/revogr-order-editor.js.map +1 -0
  594. package/standalone/revogr-order-editor2.js +199 -0
  595. package/standalone/revogr-order-editor2.js.map +1 -0
  596. package/standalone/revogr-overlay-selection.d.ts +11 -0
  597. package/standalone/revogr-overlay-selection.js +11 -0
  598. package/standalone/revogr-overlay-selection.js.map +1 -0
  599. package/standalone/revogr-overlay-selection2.js +876 -0
  600. package/standalone/revogr-overlay-selection2.js.map +1 -0
  601. package/standalone/revogr-row-headers.d.ts +11 -0
  602. package/standalone/revogr-row-headers.js +11 -0
  603. package/standalone/revogr-row-headers.js.map +1 -0
  604. package/standalone/revogr-row-headers2.js +555 -0
  605. package/standalone/revogr-row-headers2.js.map +1 -0
  606. package/standalone/revogr-scroll-virtual.d.ts +11 -0
  607. package/standalone/revogr-scroll-virtual.js +11 -0
  608. package/standalone/revogr-scroll-virtual.js.map +1 -0
  609. package/standalone/revogr-scroll-virtual2.js +187 -0
  610. package/standalone/revogr-scroll-virtual2.js.map +1 -0
  611. package/standalone/revogr-temp-range.d.ts +11 -0
  612. package/standalone/revogr-temp-range.js +11 -0
  613. package/standalone/revogr-temp-range.js.map +1 -0
  614. package/standalone/revogr-temp-range2.js +90 -0
  615. package/standalone/revogr-temp-range2.js.map +1 -0
  616. package/standalone/revogr-viewport-scroll.d.ts +11 -0
  617. package/standalone/revogr-viewport-scroll.js +11 -0
  618. package/standalone/revogr-viewport-scroll.js.map +1 -0
  619. package/standalone/revogr-viewport-scroll2.js +336 -0
  620. package/standalone/revogr-viewport-scroll2.js.map +1 -0
  621. package/standalone/selection.utils.js +108 -0
  622. package/standalone/selection.utils.js.map +1 -0
  623. package/standalone/throttle.js +79 -0
  624. package/standalone/throttle.js.map +1 -0
  625. package/standalone/toNumber.js +144 -0
  626. package/standalone/toNumber.js.map +1 -0
  627. package/standalone/vnode-converter.js +45 -0
  628. package/standalone/vnode-converter.js.map +1 -0
  629. package/standalone/vnode-html.d.ts +11 -0
  630. package/standalone/vnode-html.js +11 -0
  631. package/standalone/vnode-html.js.map +1 -0
  632. package/custom-element/index.d.ts +0 -117
  633. package/custom-element/index.js +0 -28857
  634. package/dist/cjs/css-shim-e33df79c.js +0 -6
  635. package/dist/cjs/dom-c8b6d1a7.js +0 -75
  636. package/dist/cjs/filter.button-2396a488.js +0 -27
  637. package/dist/cjs/index-d3f67f2e.js +0 -1729
  638. package/dist/cjs/revo-grid_11.cjs.entry.js +0 -28621
  639. package/dist/cjs/revogr-clipboard.cjs.entry.js +0 -53
  640. package/dist/collection/components/button/button.js +0 -4
  641. package/dist/collection/components/data/cellRenderer.js +0 -19
  642. package/dist/collection/components/data/columnService.js +0 -243
  643. package/dist/collection/components/data/rowRenderer.js +0 -6
  644. package/dist/collection/components/header/headerCellRenderer.js +0 -19
  645. package/dist/collection/components/header/headerRenderer.js +0 -45
  646. package/dist/collection/components/order/orderRenderer.js +0 -50
  647. package/dist/collection/components/order/rowOrderService.js +0 -68
  648. package/dist/collection/components/overlay/clipboard.service.js +0 -39
  649. package/dist/collection/components/overlay/editors/edit.utils.js +0 -5
  650. package/dist/collection/components/overlay/editors/text.js +0 -35
  651. package/dist/collection/components/overlay/revogr-edit.js +0 -163
  652. package/dist/collection/components/revoGrid/viewport.interfaces.js +0 -1
  653. package/dist/collection/components/revoGrid/viewport.js +0 -18
  654. package/dist/collection/components/revoGrid/viewport.section.js +0 -28
  655. package/dist/collection/components/rowHeaders/row-header-utils.js +0 -4
  656. package/dist/collection/plugins/autoSizeColumn.d.ts +0 -54
  657. package/dist/collection/plugins/autoSizeColumn.js +0 -230
  658. package/dist/collection/plugins/basePlugin.d.ts +0 -37
  659. package/dist/collection/plugins/basePlugin.js +0 -53
  660. package/dist/collection/plugins/export/csv.d.ts +0 -9
  661. package/dist/collection/plugins/export/export.plugin.d.ts +0 -24
  662. package/dist/collection/plugins/export/types.d.ts +0 -23
  663. package/dist/collection/plugins/filter/conditions/equal.d.ts +0 -4
  664. package/dist/collection/plugins/filter/conditions/number/greaterThan.d.ts +0 -3
  665. package/dist/collection/plugins/filter/conditions/number/greaterThanOrEqual.d.ts +0 -3
  666. package/dist/collection/plugins/filter/conditions/number/lessThan.d.ts +0 -3
  667. package/dist/collection/plugins/filter/conditions/number/lessThanOrEqual.d.ts +0 -3
  668. package/dist/collection/plugins/filter/conditions/set.d.ts +0 -4
  669. package/dist/collection/plugins/filter/conditions/string/beginswith.d.ts +0 -3
  670. package/dist/collection/plugins/filter/conditions/string/contains.d.ts +0 -4
  671. package/dist/collection/plugins/filter/filter.button.d.ts +0 -10
  672. package/dist/collection/plugins/filter/filter.plugin.d.ts +0 -59
  673. package/dist/collection/plugins/filter/filter.pop.d.ts +0 -42
  674. package/dist/collection/plugins/filter/filter.service.d.ts +0 -20
  675. package/dist/collection/plugins/filter/filter.types.d.ts +0 -8
  676. package/dist/collection/plugins/groupingColumn/columnGroupsRenderer.d.ts +0 -16
  677. package/dist/collection/plugins/groupingColumn/grouping.col.plugin.d.ts +0 -13
  678. package/dist/collection/plugins/groupingColumn/headerGroupRenderer.d.ts +0 -14
  679. package/dist/collection/plugins/groupingRow/grouping.const.d.ts +0 -9
  680. package/dist/collection/plugins/groupingRow/grouping.row.expand.service.d.ts +0 -15
  681. package/dist/collection/plugins/groupingRow/grouping.row.plugin.d.ts +0 -40
  682. package/dist/collection/plugins/groupingRow/grouping.row.renderer.d.ts +0 -9
  683. package/dist/collection/plugins/groupingRow/grouping.row.types.d.ts +0 -19
  684. package/dist/collection/plugins/groupingRow/grouping.service.d.ts +0 -25
  685. package/dist/collection/plugins/groupingRow/grouping.trimmed.service.d.ts +0 -10
  686. package/dist/collection/plugins/sorting/sorting.plugin.d.ts +0 -32
  687. package/dist/collection/plugins/sorting/sorting.sign.d.ts +0 -8
  688. package/dist/collection/plugins/stretchPlugin.d.ts +0 -29
  689. package/dist/collection/plugins/stretchPlugin.js +0 -90
  690. package/dist/collection/plugins/trimmed/trimmed.plugin.d.ts +0 -10
  691. package/dist/collection/plugins/trimmed/trimmed.plugin.js +0 -32
  692. package/dist/collection/services/localScrollService.js +0 -80
  693. package/dist/collection/store/viewPort/viewport.helpers.js +0 -180
  694. package/dist/collection/store/viewPort/viewport.store.js +0 -121
  695. package/dist/collection/themeManager/themeService.js +0 -43
  696. package/dist/collection/utils/closestPolifill.js +0 -18
  697. package/dist/collection/utils/generateAlphabetHeader.js +0 -20
  698. package/dist/collection/utils/keyCodes.js +0 -70
  699. package/dist/collection/utils/keyCodes.utils.js +0 -64
  700. package/dist/collection/utils/resizeObserver.js +0 -6
  701. package/dist/collection/utils/utils.js +0 -104
  702. package/dist/esm/css-shim-8d75038b.js +0 -4
  703. package/dist/esm/dom-1b195079.js +0 -73
  704. package/dist/esm/filter.button-53ebca66.js +0 -23
  705. package/dist/esm/index-42c84e7c.js +0 -1694
  706. package/dist/esm/polyfills/core-js.js +0 -11
  707. package/dist/esm/polyfills/css-shim.js +0 -1
  708. package/dist/esm/polyfills/dom.js +0 -79
  709. package/dist/esm/polyfills/index.js +0 -34
  710. package/dist/esm/polyfills/system.js +0 -6
  711. package/dist/esm/revo-grid_11.entry.js +0 -28607
  712. package/dist/esm/revogr-clipboard.entry.js +0 -49
  713. package/dist/esm-es5/css-shim-8d75038b.js +0 -1
  714. package/dist/esm-es5/dom-1b195079.js +0 -21
  715. package/dist/esm-es5/filter.button-53ebca66.js +0 -1
  716. package/dist/esm-es5/index-42c84e7c.js +0 -1
  717. package/dist/esm-es5/loader.js +0 -1
  718. package/dist/esm-es5/resize-observer-56b7b34f.js +0 -1
  719. package/dist/esm-es5/revo-grid.js +0 -1
  720. package/dist/esm-es5/revo-grid_11.entry.js +0 -1
  721. package/dist/esm-es5/revogr-clipboard.entry.js +0 -1
  722. package/dist/esm-es5/revogr-filter-panel.entry.js +0 -1
  723. package/dist/revo-grid/css-shim-88bfb262.system.js +0 -1
  724. package/dist/revo-grid/css-shim-8d75038b.js +0 -1
  725. package/dist/revo-grid/dom-1b195079.js +0 -19
  726. package/dist/revo-grid/dom-ee2dd1b3.system.js +0 -21
  727. package/dist/revo-grid/filter.button-1509c206.js +0 -1
  728. package/dist/revo-grid/filter.button-4bd87101.system.js +0 -1
  729. package/dist/revo-grid/index-a15e7527.system.js +0 -1
  730. package/dist/revo-grid/index-a7f99799.js +0 -1
  731. package/dist/revo-grid/index.system.js +0 -1
  732. package/dist/revo-grid/plugins/autoSizeColumn.d.ts +0 -54
  733. package/dist/revo-grid/plugins/basePlugin.d.ts +0 -37
  734. package/dist/revo-grid/plugins/export/csv.d.ts +0 -9
  735. package/dist/revo-grid/plugins/export/export.plugin.d.ts +0 -24
  736. package/dist/revo-grid/plugins/export/types.d.ts +0 -23
  737. package/dist/revo-grid/plugins/filter/conditions/equal.d.ts +0 -4
  738. package/dist/revo-grid/plugins/filter/conditions/number/greaterThan.d.ts +0 -3
  739. package/dist/revo-grid/plugins/filter/conditions/number/greaterThanOrEqual.d.ts +0 -3
  740. package/dist/revo-grid/plugins/filter/conditions/number/lessThan.d.ts +0 -3
  741. package/dist/revo-grid/plugins/filter/conditions/number/lessThanOrEqual.d.ts +0 -3
  742. package/dist/revo-grid/plugins/filter/conditions/set.d.ts +0 -4
  743. package/dist/revo-grid/plugins/filter/conditions/string/beginswith.d.ts +0 -3
  744. package/dist/revo-grid/plugins/filter/conditions/string/contains.d.ts +0 -4
  745. package/dist/revo-grid/plugins/filter/filter.button.d.ts +0 -10
  746. package/dist/revo-grid/plugins/filter/filter.plugin.d.ts +0 -59
  747. package/dist/revo-grid/plugins/filter/filter.pop.d.ts +0 -42
  748. package/dist/revo-grid/plugins/filter/filter.service.d.ts +0 -20
  749. package/dist/revo-grid/plugins/filter/filter.types.d.ts +0 -8
  750. package/dist/revo-grid/plugins/groupingColumn/columnGroupsRenderer.d.ts +0 -16
  751. package/dist/revo-grid/plugins/groupingColumn/grouping.col.plugin.d.ts +0 -13
  752. package/dist/revo-grid/plugins/groupingColumn/headerGroupRenderer.d.ts +0 -14
  753. package/dist/revo-grid/plugins/groupingRow/grouping.const.d.ts +0 -9
  754. package/dist/revo-grid/plugins/groupingRow/grouping.row.expand.service.d.ts +0 -15
  755. package/dist/revo-grid/plugins/groupingRow/grouping.row.plugin.d.ts +0 -40
  756. package/dist/revo-grid/plugins/groupingRow/grouping.row.renderer.d.ts +0 -9
  757. package/dist/revo-grid/plugins/groupingRow/grouping.row.types.d.ts +0 -19
  758. package/dist/revo-grid/plugins/groupingRow/grouping.service.d.ts +0 -25
  759. package/dist/revo-grid/plugins/groupingRow/grouping.trimmed.service.d.ts +0 -10
  760. package/dist/revo-grid/plugins/sorting/sorting.plugin.d.ts +0 -32
  761. package/dist/revo-grid/plugins/sorting/sorting.sign.d.ts +0 -8
  762. package/dist/revo-grid/plugins/stretchPlugin.d.ts +0 -29
  763. package/dist/revo-grid/plugins/trimmed/trimmed.plugin.d.ts +0 -10
  764. package/dist/revo-grid/resize-observer-56b7b34f.js +0 -1
  765. package/dist/revo-grid/resize-observer-7a7b9757.system.js +0 -1
  766. package/dist/revo-grid/revo-grid.js +0 -132
  767. package/dist/revo-grid/revo-grid.system.js +0 -1
  768. package/dist/revo-grid/revo-grid_11.entry.js +0 -1
  769. package/dist/revo-grid/revo-grid_11.system.entry.js +0 -1
  770. package/dist/revo-grid/revogr-clipboard.entry.js +0 -1
  771. package/dist/revo-grid/revogr-clipboard.system.entry.js +0 -1
  772. package/dist/revo-grid/revogr-filter-panel.system.entry.js +0 -1
  773. package/dist/types/components/button/button.d.ts +0 -5
  774. package/dist/types/components/data/cellRenderer.d.ts +0 -8
  775. package/dist/types/components/data/columnService.d.ts +0 -42
  776. package/dist/types/components/header/headerCellRenderer.d.ts +0 -8
  777. package/dist/types/components/header/headerRenderer.d.ts +0 -15
  778. package/dist/types/components/order/orderRenderer.d.ts +0 -28
  779. package/dist/types/components/order/rowOrderService.d.ts +0 -27
  780. package/dist/types/components/overlay/clipboard.service.d.ts +0 -20
  781. package/dist/types/components/overlay/editors/text.d.ts +0 -13
  782. package/dist/types/components/overlay/revogr-edit.d.ts +0 -19
  783. package/dist/types/components/revoGrid/viewport.d.ts +0 -19
  784. package/dist/types/components/revoGrid/viewport.interfaces.d.ts +0 -66
  785. package/dist/types/components/revoGrid/viewport.section.d.ts +0 -24
  786. package/dist/types/components/rowHeaders/row-header-utils.d.ts +0 -2
  787. package/dist/types/interfaces.d.ts +0 -437
  788. package/dist/types/plugins/autoSizeColumn.d.ts +0 -54
  789. package/dist/types/plugins/basePlugin.d.ts +0 -37
  790. package/dist/types/plugins/stretchPlugin.d.ts +0 -29
  791. package/dist/types/plugins/trimmed/trimmed.plugin.d.ts +0 -10
  792. package/dist/types/services/localScrollService.d.ts +0 -28
  793. package/dist/types/store/viewPort/viewport.helpers.d.ts +0 -30
  794. package/dist/types/store/viewPort/viewport.store.d.ts +0 -18
  795. package/dist/types/themeManager/themeService.d.ts +0 -13
  796. package/dist/types/utils/closestPolifill.d.ts +0 -0
  797. package/dist/types/utils/keyCodes.d.ts +0 -68
  798. package/loader/cdn.js +0 -3
  799. package/loader/index.cjs.js +0 -3
  800. package/loader/index.es2017.js +0 -3
  801. package/loader/index.js +0 -4
  802. /package/dist/types/components/{overlay/editors → editors}/edit.utils.d.ts +0 -0
  803. /package/dist/{esm-es5/index.js → types/utils/closest.polifill.d.ts} +0 -0
  804. /package/dist/types/utils/{generateAlphabetHeader.d.ts → header.utils.d.ts} +0 -0
  805. /package/dist/types/utils/{resizeObserver.d.ts → resize-observer.polifill.d.ts} +0 -0
@@ -0,0 +1,3992 @@
1
+ /*!
2
+ * Built by Revolist OU ❤️
3
+ */
4
+ 'use strict';
5
+
6
+ Object.defineProperty(exports, '__esModule', { value: true });
7
+
8
+ const index$1 = require('./index-84e32c2a.js');
9
+ const dimension_helpers = require('./dimension.helpers-ee39d6c4.js');
10
+ const storeTypes = require('./storeTypes-b3f924b2.js');
11
+ const debounce = require('./debounce-e2b7c6fb.js');
12
+ const index = require('./index-73c149e3.js');
13
+ const events = require('./events-7ccd6894.js');
14
+ const filter_button = require('./filter.button-db6cbd2e.js');
15
+ const toNumber = require('./toNumber-838e6ff5.js');
16
+ const column_service = require('./column.service-2066d651.js');
17
+ const selection_store = require('./selection.store-2e110a67.js');
18
+ const dispatcher = require('./dispatcher-a58fa91a.js');
19
+ const headerCellRenderer = require('./header-cell-renderer-3df76829.js');
20
+ require('./viewport.helpers-6670177c.js');
21
+
22
+ class ThemeCompact {
23
+ constructor() {
24
+ this.defaultRowSize = 32;
25
+ }
26
+ }
27
+
28
+ class ThemeDefault {
29
+ constructor() {
30
+ this.defaultRowSize = 27;
31
+ }
32
+ }
33
+
34
+ class ThemeMaterial {
35
+ constructor() {
36
+ this.defaultRowSize = 42;
37
+ }
38
+ }
39
+
40
+ const DEFAULT_THEME = 'default';
41
+ const allowedThemes = [
42
+ DEFAULT_THEME,
43
+ 'material',
44
+ 'compact',
45
+ 'darkMaterial',
46
+ 'darkCompact',
47
+ ];
48
+ class ThemeService {
49
+ get theme() {
50
+ return this.currentTheme;
51
+ }
52
+ get rowSize() {
53
+ return this.customRowSize || this.currentTheme.defaultRowSize;
54
+ }
55
+ set rowSize(size) {
56
+ this.customRowSize = size;
57
+ }
58
+ constructor(cfg) {
59
+ this.customRowSize = 0;
60
+ this.customRowSize = cfg.rowSize;
61
+ this.register('default');
62
+ }
63
+ register(theme) {
64
+ const parsedTheme = ThemeService.getTheme(theme);
65
+ switch (parsedTheme) {
66
+ case 'material':
67
+ case 'darkMaterial':
68
+ this.currentTheme = new ThemeMaterial();
69
+ break;
70
+ case 'compact':
71
+ case 'darkCompact':
72
+ this.currentTheme = new ThemeCompact();
73
+ break;
74
+ default:
75
+ this.currentTheme = new ThemeDefault();
76
+ break;
77
+ }
78
+ }
79
+ static getTheme(theme) {
80
+ if (allowedThemes.indexOf(theme) > -1) {
81
+ return theme;
82
+ }
83
+ return DEFAULT_THEME;
84
+ }
85
+ }
86
+
87
+ /**
88
+ * Storing pre-calculated
89
+ * Dimension information and sizes
90
+ */
91
+ const trimmedPlugin = (store) => {
92
+ let trimmedSize = {};
93
+ const setTrimmed = (sizes, trimmed) => {
94
+ const newSize = Object.assign({}, sizes);
95
+ trimmedSize = {};
96
+ dimension_helpers.each(trimmed, (v, index) => {
97
+ if (v && newSize[index]) {
98
+ trimmedSize[index] = newSize[index];
99
+ delete newSize[index];
100
+ }
101
+ });
102
+ store.setDimensionSize(newSize);
103
+ };
104
+ return {
105
+ set(key, val) {
106
+ switch (key) {
107
+ case 'trimmed':
108
+ const trim = val;
109
+ const sizes = store.store.get('sizes');
110
+ // recover trimmed, apply new trim
111
+ setTrimmed(Object.assign(Object.assign({}, sizes), trimmedSize), trim);
112
+ break;
113
+ }
114
+ },
115
+ };
116
+ };
117
+ const realSizePlugin = (store) => {
118
+ return {
119
+ set(k) {
120
+ switch (k) {
121
+ case 'count':
122
+ case 'sizes':
123
+ case 'originItemSize':
124
+ let realSize = 0;
125
+ const count = store.store.get('count');
126
+ for (let i = 0; i < count; i++) {
127
+ realSize +=
128
+ store.store.get('sizes')[i] || store.store.get('originItemSize');
129
+ }
130
+ store.setStore({ realSize });
131
+ }
132
+ },
133
+ };
134
+ };
135
+ function initialBase() {
136
+ return {
137
+ indexes: [],
138
+ count: 0,
139
+ // plugin support
140
+ trimmed: {},
141
+ // size operations, this provider stores only changed sizes, not all of them
142
+ // same as indexes but for sizes and positions
143
+ // item index to size
144
+ sizes: {},
145
+ // order in indexes[] to coordinate
146
+ positionIndexToItem: {},
147
+ // initial element to coordinate ^
148
+ indexToItem: {},
149
+ positionIndexes: [],
150
+ };
151
+ }
152
+ function initialState() {
153
+ return Object.assign(Object.assign({}, initialBase()), {
154
+ // size which all items can take
155
+ realSize: 0,
156
+ // initial item size if it wasn't changed
157
+ originItemSize: 0 });
158
+ }
159
+ class DimensionStore {
160
+ constructor() {
161
+ this.store = dimension_helpers.createStore(initialState());
162
+ this.store.use(trimmedPlugin(this));
163
+ this.store.use(realSizePlugin(this));
164
+ }
165
+ getCurrentState() {
166
+ const state = initialState();
167
+ const keys = Object.keys(state);
168
+ return dimension_helpers.reduce_1(keys, (r, k) => {
169
+ const data = this.store.get(k);
170
+ r[k] = data;
171
+ return r;
172
+ }, state);
173
+ }
174
+ dispose() {
175
+ dimension_helpers.setStore(this.store, initialState());
176
+ }
177
+ setStore(data) {
178
+ dimension_helpers.setStore(this.store, data);
179
+ }
180
+ drop() {
181
+ dimension_helpers.setStore(this.store, initialBase());
182
+ }
183
+ /**
184
+ * Set custom dimension sizes and overwrite old
185
+ * Generates new indexes based on sizes
186
+ * @param sizes - sizes to set
187
+ */
188
+ setDimensionSize(sizes) {
189
+ const dimensionData = dimension_helpers.calculateDimensionData(this.store.get('originItemSize'), sizes);
190
+ dimension_helpers.setStore(this.store, dimensionData);
191
+ return dimensionData;
192
+ }
193
+ }
194
+
195
+ var baseIteratee$1 = dimension_helpers._baseIteratee,
196
+ isArrayLike$2 = dimension_helpers.isArrayLike_1,
197
+ keys = dimension_helpers.keys_1;
198
+
199
+ /**
200
+ * Creates a `_.find` or `_.findLast` function.
201
+ *
202
+ * @private
203
+ * @param {Function} findIndexFunc The function to find the collection index.
204
+ * @returns {Function} Returns the new find function.
205
+ */
206
+ function createFind$1(findIndexFunc) {
207
+ return function(collection, predicate, fromIndex) {
208
+ var iterable = Object(collection);
209
+ if (!isArrayLike$2(collection)) {
210
+ var iteratee = baseIteratee$1(predicate);
211
+ collection = keys(collection);
212
+ predicate = function(key) { return iteratee(iterable[key], key, iterable); };
213
+ }
214
+ var index = findIndexFunc(collection, predicate, fromIndex);
215
+ return index > -1 ? iterable[iteratee ? collection[index] : index] : undefined;
216
+ };
217
+ }
218
+
219
+ var _createFind = createFind$1;
220
+
221
+ var createFind = _createFind,
222
+ findIndex = dimension_helpers.findIndex_1;
223
+
224
+ /**
225
+ * Iterates over elements of `collection`, returning the first element
226
+ * `predicate` returns truthy for. The predicate is invoked with three
227
+ * arguments: (value, index|key, collection).
228
+ *
229
+ * @static
230
+ * @memberOf _
231
+ * @since 0.1.0
232
+ * @category Collection
233
+ * @param {Array|Object} collection The collection to inspect.
234
+ * @param {Function} [predicate=_.identity] The function invoked per iteration.
235
+ * @param {number} [fromIndex=0] The index to search from.
236
+ * @returns {*} Returns the matched element, else `undefined`.
237
+ * @example
238
+ *
239
+ * var users = [
240
+ * { 'user': 'barney', 'age': 36, 'active': true },
241
+ * { 'user': 'fred', 'age': 40, 'active': false },
242
+ * { 'user': 'pebbles', 'age': 1, 'active': true }
243
+ * ];
244
+ *
245
+ * _.find(users, function(o) { return o.age < 40; });
246
+ * // => object for 'barney'
247
+ *
248
+ * // The `_.matches` iteratee shorthand.
249
+ * _.find(users, { 'age': 1, 'active': true });
250
+ * // => object for 'pebbles'
251
+ *
252
+ * // The `_.matchesProperty` iteratee shorthand.
253
+ * _.find(users, ['active', false]);
254
+ * // => object for 'fred'
255
+ *
256
+ * // The `_.property` iteratee shorthand.
257
+ * _.find(users, 'active');
258
+ * // => object for 'barney'
259
+ */
260
+ var find = createFind(findIndex);
261
+
262
+ var find_1 = find;
263
+
264
+ var baseEach = dimension_helpers._baseEach,
265
+ isArrayLike$1 = dimension_helpers.isArrayLike_1;
266
+
267
+ /**
268
+ * The base implementation of `_.map` without support for iteratee shorthands.
269
+ *
270
+ * @private
271
+ * @param {Array|Object} collection The collection to iterate over.
272
+ * @param {Function} iteratee The function invoked per iteration.
273
+ * @returns {Array} Returns the new mapped array.
274
+ */
275
+ function baseMap$1(collection, iteratee) {
276
+ var index = -1,
277
+ result = isArrayLike$1(collection) ? Array(collection.length) : [];
278
+
279
+ baseEach(collection, function(value, key, collection) {
280
+ result[++index] = iteratee(value, key, collection);
281
+ });
282
+ return result;
283
+ }
284
+
285
+ var _baseMap = baseMap$1;
286
+
287
+ var arrayMap = dimension_helpers._arrayMap,
288
+ baseIteratee = dimension_helpers._baseIteratee,
289
+ baseMap = _baseMap,
290
+ isArray$1 = dimension_helpers.isArray_1;
291
+
292
+ /**
293
+ * Creates an array of values by running each element in `collection` thru
294
+ * `iteratee`. The iteratee is invoked with three arguments:
295
+ * (value, index|key, collection).
296
+ *
297
+ * Many lodash methods are guarded to work as iteratees for methods like
298
+ * `_.every`, `_.filter`, `_.map`, `_.mapValues`, `_.reject`, and `_.some`.
299
+ *
300
+ * The guarded methods are:
301
+ * `ary`, `chunk`, `curry`, `curryRight`, `drop`, `dropRight`, `every`,
302
+ * `fill`, `invert`, `parseInt`, `random`, `range`, `rangeRight`, `repeat`,
303
+ * `sampleSize`, `slice`, `some`, `sortBy`, `split`, `take`, `takeRight`,
304
+ * `template`, `trim`, `trimEnd`, `trimStart`, and `words`
305
+ *
306
+ * @static
307
+ * @memberOf _
308
+ * @since 0.1.0
309
+ * @category Collection
310
+ * @param {Array|Object} collection The collection to iterate over.
311
+ * @param {Function} [iteratee=_.identity] The function invoked per iteration.
312
+ * @returns {Array} Returns the new mapped array.
313
+ * @example
314
+ *
315
+ * function square(n) {
316
+ * return n * n;
317
+ * }
318
+ *
319
+ * _.map([4, 8], square);
320
+ * // => [16, 64]
321
+ *
322
+ * _.map({ 'a': 4, 'b': 8 }, square);
323
+ * // => [16, 64] (iteration order is not guaranteed)
324
+ *
325
+ * var users = [
326
+ * { 'user': 'barney' },
327
+ * { 'user': 'fred' }
328
+ * ];
329
+ *
330
+ * // The `_.property` iteratee shorthand.
331
+ * _.map(users, 'user');
332
+ * // => ['barney', 'fred']
333
+ */
334
+ function map(collection, iteratee) {
335
+ var func = isArray$1(collection) ? arrayMap : baseMap;
336
+ return func(collection, baseIteratee(iteratee));
337
+ }
338
+
339
+ var map_1 = map;
340
+
341
+ class GroupingColumnPlugin extends storeTypes.BasePlugin {
342
+ static gatherGroup(res, colData, collection, level = 0) {
343
+ // group template
344
+ const group = Object.assign(Object.assign({}, colData), { level, ids: [] });
345
+ // check columns for update
346
+ for (let k in collection.columns) {
347
+ const key = k;
348
+ const resultItem = res.columns[key];
349
+ const collectionItem = collection.columns[key];
350
+ // if column data
351
+ if (dimension_helpers.isArray_1(resultItem) && dimension_helpers.isArray_1(collectionItem)) {
352
+ // fill columns
353
+ resultItem.push(...collectionItem);
354
+ // fill grouping
355
+ if (collectionItem.length) {
356
+ res.columnGrouping[key].push(Object.assign(Object.assign({}, group), { ids: map_1(collectionItem, 'prop') }));
357
+ }
358
+ }
359
+ }
360
+ // merge column groupings
361
+ for (let k in collection.columnGrouping) {
362
+ const key = k;
363
+ const collectionItem = collection.columnGrouping[key];
364
+ res.columnGrouping[key].push(...collectionItem);
365
+ }
366
+ res.maxLevel = Math.max(res.maxLevel, collection.maxLevel);
367
+ res.sort = Object.assign(Object.assign({}, res.sort), collection.sort);
368
+ return res;
369
+ }
370
+ }
371
+ /**
372
+ * Check if column is grouping column
373
+ */
374
+ function isColGrouping(colData) {
375
+ return !!colData.children;
376
+ }
377
+
378
+ class ColumnDataProvider {
379
+ get order() {
380
+ return dimension_helpers.reduce_1(this.sorting, (r, c, prop) => {
381
+ r[prop] = c.order;
382
+ return r;
383
+ }, {});
384
+ }
385
+ get stores() {
386
+ return this.dataSources;
387
+ }
388
+ constructor() {
389
+ this.sorting = null;
390
+ this.dataSources = dimension_helpers.reduce_1(storeTypes.columnTypes, (sources, k) => {
391
+ sources[k] = new dimension_helpers.DataStore(k);
392
+ return sources;
393
+ }, {});
394
+ }
395
+ column(c, pin) {
396
+ return this.getColumn(c, pin || 'rgCol');
397
+ }
398
+ getColumn(virtualIndex, type) {
399
+ return dimension_helpers.getSourceItem(this.dataSources[type].store, virtualIndex);
400
+ }
401
+ getRawColumns() {
402
+ return dimension_helpers.reduce_1(this.dataSources, (result, item, type) => {
403
+ result[type] = item.store.get('source');
404
+ return result;
405
+ }, {
406
+ rgCol: [],
407
+ colPinStart: [],
408
+ colPinEnd: [],
409
+ });
410
+ }
411
+ getColumns(type = 'all') {
412
+ if (type !== 'all') {
413
+ return this.dataSources[type].store.get('source');
414
+ }
415
+ return storeTypes.columnTypes.reduce((r, t) => {
416
+ r.push(...this.dataSources[t].store.get('source'));
417
+ return r;
418
+ }, []);
419
+ }
420
+ getColumnIndexByProp(prop, type) {
421
+ return dimension_helpers.getSourceItemVirtualIndexByProp(this.dataSources[type].store, prop);
422
+ }
423
+ getColumnByProp(prop, type) {
424
+ const items = this.dataSources[type].store.get('source');
425
+ return find_1(items, { prop });
426
+ }
427
+ refreshByType(type) {
428
+ this.dataSources[type].refresh();
429
+ }
430
+ setColumns(data) {
431
+ storeTypes.columnTypes.forEach(k => {
432
+ // set columns data
433
+ this.dataSources[k].updateData(data.columns[k], {
434
+ // max depth level
435
+ depth: data.maxLevel,
436
+ // groups
437
+ groups: data.columnGrouping[k].reduce((res, g) => {
438
+ if (!res[g.level]) {
439
+ res[g.level] = [];
440
+ }
441
+ res[g.level].push(g);
442
+ return res;
443
+ }, {}),
444
+ });
445
+ });
446
+ this.sorting = data.sort;
447
+ return data;
448
+ }
449
+ updateColumns(cols) {
450
+ // collect column by type and propert
451
+ const columnByKey = cols.reduce((res, c) => {
452
+ const type = ColumnDataProvider.getColumnType(c);
453
+ if (!res[type]) {
454
+ res[type] = {};
455
+ }
456
+ res[type][c.prop] = c;
457
+ return res;
458
+ }, {});
459
+ // find indexes in source
460
+ const colByIndex = {};
461
+ dimension_helpers.each(columnByKey, (colsToUpdate, type) => {
462
+ const items = this.dataSources[type].store.get('source');
463
+ colByIndex[type] = items.reduce((result, rgCol, index) => {
464
+ const colToUpdateIfExists = colsToUpdate[rgCol.prop];
465
+ if (colToUpdateIfExists) {
466
+ result[index] = colToUpdateIfExists;
467
+ }
468
+ return result;
469
+ }, {});
470
+ });
471
+ dimension_helpers.each(colByIndex, (colsToUpdate, type) => dimension_helpers.setSourceByVirtualIndex(this.dataSources[type].store, colsToUpdate));
472
+ }
473
+ updateColumn(column, index) {
474
+ const type = ColumnDataProvider.getColumnType(column);
475
+ dimension_helpers.setSourceByVirtualIndex(this.dataSources[type].store, { [index]: column });
476
+ }
477
+ updateColumnSorting(column, index, sorting, additive) {
478
+ if (!additive) {
479
+ this.clearSorting();
480
+ }
481
+ column.order = sorting;
482
+ this.sorting[column.prop] = column;
483
+ this.updateColumn(column, index);
484
+ return column;
485
+ }
486
+ clearSorting() {
487
+ const types = dimension_helpers.reduce_1(this.sorting, (r, c) => {
488
+ const k = ColumnDataProvider.getColumnType(c);
489
+ r[k] = true;
490
+ return r;
491
+ }, {});
492
+ dimension_helpers.each(types, (_, type) => {
493
+ const cols = this.dataSources[type].store.get('source');
494
+ dimension_helpers.each(cols, (c) => (c.order = undefined));
495
+ this.dataSources[type].setData({ source: [...cols] });
496
+ });
497
+ this.sorting = {};
498
+ }
499
+ static getSizes(cols) {
500
+ return dimension_helpers.reduce_1(cols, (res, c, i) => {
501
+ if (c.size) {
502
+ res[i] = c.size;
503
+ }
504
+ return res;
505
+ }, {});
506
+ }
507
+ static getColumnByProp(columns, prop) {
508
+ return find_1(columns, c => {
509
+ if (isColGrouping(c)) {
510
+ return ColumnDataProvider.getColumnByProp(c.children, prop);
511
+ }
512
+ return c.prop === prop;
513
+ });
514
+ }
515
+ // columns processing
516
+ static getColumns(columns, level = 0, types) {
517
+ const collection = {
518
+ // columns as they are in stores per type
519
+ columns: {
520
+ rgCol: [],
521
+ colPinStart: [],
522
+ colPinEnd: [],
523
+ },
524
+ // columns grouped by prop for quick access
525
+ columnByProp: {},
526
+ // column grouping
527
+ columnGrouping: {
528
+ rgCol: [],
529
+ colPinStart: [],
530
+ colPinEnd: [],
531
+ },
532
+ // max depth level for column grouping
533
+ maxLevel: level,
534
+ // sorting
535
+ sort: {},
536
+ };
537
+ return dimension_helpers.reduce_1(columns, (res, colData) => {
538
+ // Grouped column
539
+ if (isColGrouping(colData)) {
540
+ return GroupingColumnPlugin.gatherGroup(res, colData, ColumnDataProvider.getColumns(colData.children, level + 1, types), level);
541
+ }
542
+ // Regular column
543
+ const regularColumn = Object.assign(Object.assign({}, (colData.columnType && types && types[colData.columnType])), colData);
544
+ // Regular column, no Pin
545
+ if (!regularColumn.pin) {
546
+ res.columns.rgCol.push(regularColumn);
547
+ // Pin
548
+ }
549
+ else {
550
+ res.columns[regularColumn.pin].push(regularColumn);
551
+ }
552
+ if (regularColumn.order) {
553
+ res.sort[regularColumn.prop] = regularColumn;
554
+ }
555
+ // technically it's possible that some columns have same prop, but better to avoid it
556
+ if (!res.columnByProp[regularColumn.prop]) {
557
+ res.columnByProp[regularColumn.prop] = [];
558
+ }
559
+ res.columnByProp[regularColumn.prop].push(regularColumn);
560
+ // trigger setup hook if present
561
+ regularColumn.beforeSetup && regularColumn.beforeSetup(regularColumn);
562
+ return res;
563
+ }, collection);
564
+ }
565
+ static getColumnType(rgCol) {
566
+ if (rgCol.pin) {
567
+ return rgCol.pin;
568
+ }
569
+ return 'rgCol';
570
+ }
571
+ }
572
+
573
+ /**
574
+ * Data source provider
575
+ */
576
+ class DataProvider {
577
+ constructor(dimensionProvider) {
578
+ this.dimensionProvider = dimensionProvider;
579
+ this.stores = dimension_helpers.reduce_1(storeTypes.rowTypes, (sources, k) => {
580
+ sources[k] = new dimension_helpers.DataStore(k);
581
+ return sources;
582
+ }, {});
583
+ }
584
+ setData(data, type = 'rgRow', disableVirtualRows = false, grouping, silent = false) {
585
+ // set rgRow data
586
+ this.stores[type].updateData([...data], grouping, silent);
587
+ // for pinned row no need virtual data
588
+ const noVirtual = type !== 'rgRow' || disableVirtualRows;
589
+ this.dimensionProvider.setData(data.length, type, noVirtual);
590
+ return data;
591
+ }
592
+ getModel(virtualIndex, type = 'rgRow') {
593
+ const store = this.stores[type].store;
594
+ return dimension_helpers.getSourceItem(store, virtualIndex);
595
+ }
596
+ setCellData({ type, rowIndex, prop, val }, mutate = true) {
597
+ const model = this.getModel(rowIndex, type);
598
+ model[prop] = val;
599
+ // apply data to source
600
+ dimension_helpers.setSourceByVirtualIndex(this.stores[type].store, { [rowIndex]: model }, mutate);
601
+ }
602
+ setRangeData(data, type) {
603
+ const items = {};
604
+ for (let rowIndex in data) {
605
+ const oldModel = (items[rowIndex] = dimension_helpers.getSourceItem(this.stores[type].store, parseInt(rowIndex, 10)));
606
+ if (!oldModel) {
607
+ continue;
608
+ }
609
+ for (let prop in data[rowIndex]) {
610
+ oldModel[prop] = data[rowIndex][prop];
611
+ }
612
+ }
613
+ // apply data to source
614
+ dimension_helpers.setSourceByVirtualIndex(this.stores[type].store, items);
615
+ }
616
+ refresh(type = 'all') {
617
+ if (storeTypes.isRowType(type)) {
618
+ this.refreshItems(type);
619
+ }
620
+ storeTypes.rowTypes.forEach((t) => this.refreshItems(t));
621
+ }
622
+ refreshItems(type = 'rgRow') {
623
+ const items = this.stores[type].store.get('items');
624
+ this.stores[type].setData({ items: [...items] });
625
+ }
626
+ setGrouping({ depth }, type = 'rgRow') {
627
+ this.stores[type].setData({ groupingDepth: depth });
628
+ }
629
+ setTrimmed(trimmed, type = 'rgRow') {
630
+ const store = this.stores[type];
631
+ store.addTrimmed(trimmed);
632
+ this.dimensionProvider.setTrimmed(trimmed, type);
633
+ if (type === 'rgRow') {
634
+ this.dimensionProvider.setData(dimension_helpers.getVisibleSourceItem(store.store).length, type);
635
+ }
636
+ }
637
+ }
638
+
639
+ /**
640
+ * Dimension provider
641
+ * Stores dimension information and custom sizes
642
+ */
643
+ class DimensionProvider {
644
+ constructor(viewports, config) {
645
+ this.viewports = viewports;
646
+ const sizeChanged = debounce.debounce_1((k) => config.realSizeChanged(k), index.RESIZE_INTERVAL);
647
+ this.stores = dimension_helpers.reduce_1([...storeTypes.rowTypes, ...storeTypes.columnTypes], (sources, k) => {
648
+ sources[k] = new DimensionStore();
649
+ sources[k].store.onChange('realSize', () => sizeChanged(k));
650
+ return sources;
651
+ }, {});
652
+ }
653
+ /**
654
+ * Clear old sizes from dimension and viewports
655
+ * @param type - dimension type
656
+ * @param count - count of items
657
+ */
658
+ clearSize(t, count) {
659
+ this.stores[t].drop();
660
+ // after we done with drop trigger viewport recalculaction
661
+ this.viewports.stores[t].setOriginalSizes(this.stores[t].store.get('originItemSize'));
662
+ this.setItemCount(count, t);
663
+ }
664
+ /**
665
+ * Apply new custom sizes to dimension and view port
666
+ * @param type - dimension type
667
+ * @param sizes - new custom sizes
668
+ * @param keepOld - keep old sizes merge new with old
669
+ */
670
+ setCustomSizes(type, sizes, keepOld = false) {
671
+ let newSizes = sizes;
672
+ if (keepOld) {
673
+ const oldSizes = this.stores[type].store.get('sizes');
674
+ newSizes = Object.assign(Object.assign({}, oldSizes), sizes);
675
+ }
676
+ this.stores[type].setDimensionSize(newSizes);
677
+ this.viewports.stores[type].setViewPortDimensionSizes(newSizes, !keepOld ? this.stores[type].store.get('originItemSize') : undefined);
678
+ }
679
+ setItemCount(realCount, type) {
680
+ this.viewports.stores[type].setViewport({ realCount });
681
+ this.stores[type].setStore({ count: realCount });
682
+ }
683
+ /**
684
+ * Apply trimmed items
685
+ * @param trimmed - trimmed items
686
+ * @param type
687
+ */
688
+ setTrimmed(trimmed, type) {
689
+ const allTrimmed = dimension_helpers.gatherTrimmedItems(trimmed);
690
+ const dimStoreType = this.stores[type];
691
+ dimStoreType.setStore({ trimmed: allTrimmed });
692
+ this.viewports.stores[type].setViewPortDimensionSizes(dimStoreType.store.get('sizes'));
693
+ }
694
+ /**
695
+ * Sets dimension data and view port coordinate
696
+ * @param items - data/column items
697
+ * @param type - dimension type
698
+ */
699
+ setData(itemCount, type, noVirtual = false) {
700
+ this.setItemCount(itemCount, type);
701
+ // Virtualization will get disabled
702
+ if (noVirtual) {
703
+ const dimension = this.stores[type].getCurrentState();
704
+ this.viewports.stores[type].setViewport({
705
+ virtualSize: dimension.realSize,
706
+ });
707
+ }
708
+ this.updateViewport(type);
709
+ }
710
+ applyNewColumns(columns, disableVirtualX) {
711
+ for (let type of storeTypes.columnTypes) {
712
+ // clear existing data
713
+ this.stores[type].drop();
714
+ const items = columns[type];
715
+ // for pinned col no need virtual data
716
+ const noVirtual = type !== 'rgCol' || disableVirtualX;
717
+ // setItemCount
718
+ this.stores[type].setStore({ count: items.length });
719
+ // setCustomSizes
720
+ const newSizes = ColumnDataProvider.getSizes(items);
721
+ this.stores[type].setDimensionSize(newSizes);
722
+ const vpUpdate = {
723
+ // this triggers drop on realCount change
724
+ realCount: items.length,
725
+ };
726
+ // Virtualization will get disabled
727
+ if (noVirtual) {
728
+ vpUpdate.virtualSize = this.stores[type].getCurrentState().realSize;
729
+ }
730
+ this.viewports.stores[type].setViewport(vpUpdate);
731
+ this.setViewPortCoordinate({
732
+ coordinate: this.viewports.stores[type].lastCoordinate,
733
+ type,
734
+ });
735
+ }
736
+ }
737
+ getFullSize() {
738
+ var _a, _b;
739
+ let x = 0;
740
+ let y = 0;
741
+ for (let type of storeTypes.columnTypes) {
742
+ x += ((_a = this.stores[type]) === null || _a === void 0 ? void 0 : _a.store.get('realSize')) || 0;
743
+ }
744
+ for (let type of storeTypes.rowTypes) {
745
+ y += ((_b = this.stores[type]) === null || _b === void 0 ? void 0 : _b.store.get('realSize')) || 0;
746
+ }
747
+ return { y, x };
748
+ }
749
+ updateViewport(type) {
750
+ this.setViewPortCoordinate({
751
+ coordinate: this.viewports.stores[type].lastCoordinate,
752
+ type,
753
+ });
754
+ }
755
+ setViewPortCoordinate({ coordinate, type, }) {
756
+ const dimension = this.stores[type].getCurrentState();
757
+ this.viewports.stores[type].setViewPortCoordinate(coordinate, dimension);
758
+ }
759
+ getViewPortPos(e) {
760
+ const dimension = this.stores[e.dimension].getCurrentState();
761
+ const item = dimension_helpers.getItemByIndex(dimension, e.coordinate);
762
+ return item.start;
763
+ }
764
+ setSettings(data, dimensionType) {
765
+ let stores = [];
766
+ switch (dimensionType) {
767
+ case 'rgCol':
768
+ stores = storeTypes.columnTypes;
769
+ break;
770
+ case 'rgRow':
771
+ stores = storeTypes.rowTypes;
772
+ break;
773
+ }
774
+ for (let s of stores) {
775
+ this.stores[s].setStore(data);
776
+ }
777
+ }
778
+ }
779
+
780
+ class ViewportProvider {
781
+ constructor() {
782
+ this.stores = dimension_helpers.reduce_1([...storeTypes.rowTypes, ...storeTypes.columnTypes], (sources, k) => {
783
+ sources[k] = new events.ViewportStore(k);
784
+ return sources;
785
+ }, {});
786
+ }
787
+ setViewport(type, data) {
788
+ this.stores[type].setViewport(data);
789
+ }
790
+ }
791
+
792
+ /**
793
+ * Plugin module for revo-grid grid system
794
+ * Add support for automatic column resize
795
+ */
796
+ const LETTER_BLOCK_SIZE = 7;
797
+ var ColumnAutoSizeMode;
798
+ (function (ColumnAutoSizeMode) {
799
+ // increases column width on header click according the largest text value
800
+ ColumnAutoSizeMode["headerClickAutosize"] = "headerClickAutoSize";
801
+ // increases column width on data set and text edit, decreases performance
802
+ ColumnAutoSizeMode["autoSizeOnTextOverlap"] = "autoSizeOnTextOverlap";
803
+ // increases and decreases column width based on all items sizes, worst for performance
804
+ ColumnAutoSizeMode["autoSizeAll"] = "autoSizeAll";
805
+ })(ColumnAutoSizeMode || (ColumnAutoSizeMode = {}));
806
+ class AutoSizeColumnPlugin extends storeTypes.BasePlugin {
807
+ constructor(revogrid, providers, config) {
808
+ super(revogrid, providers);
809
+ this.providers = providers;
810
+ this.config = config;
811
+ this.autoSizeColumns = null;
812
+ /** for edge case when no columns defined before data */
813
+ this.dataResolve = null;
814
+ this.dataReject = null;
815
+ this.letterBlockSize = (config === null || config === void 0 ? void 0 : config.letterBlockSize) || LETTER_BLOCK_SIZE;
816
+ // create test container to check text width
817
+ if (config === null || config === void 0 ? void 0 : config.preciseSize) {
818
+ this.precsizeCalculationArea = this.initiatePresizeElement();
819
+ revogrid.appendChild(this.precsizeCalculationArea);
820
+ }
821
+ const aftersourceset = ({ detail: { source } }) => {
822
+ this.setSource(source);
823
+ };
824
+ const afteredit = ({ detail }) => {
825
+ this.afteredit(detail);
826
+ };
827
+ const afterEditAll = ({ detail }) => {
828
+ this.afterEditAll(detail);
829
+ };
830
+ const beforecolumnsset = ({ detail: { columns } }) => {
831
+ this.columnSet(columns);
832
+ };
833
+ const headerDblClick = ({ detail }) => {
834
+ const type = ColumnDataProvider.getColumnType(detail.column);
835
+ const size = this.getColumnSize(detail.index, type);
836
+ if (size) {
837
+ this.providers.dimension.setCustomSizes(type, {
838
+ [detail.index]: size,
839
+ }, true);
840
+ }
841
+ };
842
+ this.addEventListener('beforecolumnsset', beforecolumnsset);
843
+ switch (config === null || config === void 0 ? void 0 : config.mode) {
844
+ case ColumnAutoSizeMode.autoSizeOnTextOverlap:
845
+ this.addEventListener('aftersourceset', aftersourceset);
846
+ this.addEventListener('afteredit', afteredit);
847
+ break;
848
+ case ColumnAutoSizeMode.autoSizeAll:
849
+ this.addEventListener('aftersourceset', aftersourceset);
850
+ this.addEventListener('afteredit', afterEditAll);
851
+ break;
852
+ default:
853
+ this.addEventListener('headerdblclick', headerDblClick);
854
+ break;
855
+ }
856
+ }
857
+ async setSource(source) {
858
+ let autoSize = this.autoSizeColumns;
859
+ if (this.dataReject) {
860
+ this.dataReject();
861
+ this.clearPromise();
862
+ }
863
+ /** If data set first and no column provided await until get one */
864
+ if (!autoSize) {
865
+ const request = new Promise((resolve, reject) => {
866
+ this.dataResolve = resolve;
867
+ this.dataReject = reject;
868
+ });
869
+ try {
870
+ autoSize = await request;
871
+ }
872
+ catch (e) {
873
+ return;
874
+ }
875
+ }
876
+ // calculate sizes
877
+ dimension_helpers.each(autoSize, (_v, type) => {
878
+ const sizes = {};
879
+ dimension_helpers.each(autoSize[type], rgCol => {
880
+ // calculate size
881
+ rgCol.size = sizes[rgCol.index] = source.reduce((prev, rgRow) => Math.max(prev, this.getLength(rgRow[rgCol.prop])), this.getLength(rgCol.name || ''));
882
+ });
883
+ this.providers.dimension.setCustomSizes(type, sizes, true);
884
+ });
885
+ }
886
+ getLength(len) {
887
+ var _a;
888
+ const padding = 15;
889
+ if (!len) {
890
+ return 0;
891
+ }
892
+ try {
893
+ const str = len.toString();
894
+ /**if exact calculation required proxy with html element, slow operation */
895
+ if ((_a = this.config) === null || _a === void 0 ? void 0 : _a.preciseSize) {
896
+ this.precsizeCalculationArea.innerText = str;
897
+ return this.precsizeCalculationArea.scrollWidth + padding * 2;
898
+ }
899
+ return str.length * this.letterBlockSize + padding * 2;
900
+ }
901
+ catch (e) {
902
+ return 0;
903
+ }
904
+ }
905
+ afteredit(e) {
906
+ let data;
907
+ if (this.isRangeEdit(e)) {
908
+ data = e.data;
909
+ }
910
+ else {
911
+ data = { 0: { [e.prop]: e.val } };
912
+ }
913
+ dimension_helpers.each(this.autoSizeColumns, (columns, type) => {
914
+ const sizes = {};
915
+ dimension_helpers.each(columns, rgCol => {
916
+ // calculate size
917
+ const size = dimension_helpers.reduce_1(data, (prev, rgRow) => {
918
+ if (typeof rgRow[rgCol.prop] === 'undefined') {
919
+ return prev;
920
+ }
921
+ return Math.max(prev || 0, this.getLength(rgRow[rgCol.prop]));
922
+ }, undefined);
923
+ if (size && rgCol.size < size) {
924
+ rgCol.size = sizes[rgCol.index] = size;
925
+ }
926
+ });
927
+ this.providers.dimension.setCustomSizes(type, sizes, true);
928
+ });
929
+ }
930
+ afterEditAll(e) {
931
+ const props = {};
932
+ if (this.isRangeEdit(e)) {
933
+ dimension_helpers.each(e.data, r => dimension_helpers.each(r, (_v, p) => (props[p] = true)));
934
+ }
935
+ else {
936
+ props[e.prop] = true;
937
+ }
938
+ dimension_helpers.each(this.autoSizeColumns, (columns, type) => {
939
+ const sizes = {};
940
+ dimension_helpers.each(columns, rgCol => {
941
+ if (props[rgCol.prop]) {
942
+ const size = this.getColumnSize(rgCol.index, type);
943
+ if (size) {
944
+ sizes[rgCol.index] = size;
945
+ }
946
+ }
947
+ });
948
+ this.providers.dimension.setCustomSizes(type, sizes, true);
949
+ });
950
+ }
951
+ getColumnSize(index, type) {
952
+ const rgCol = this.autoSizeColumns[type][index];
953
+ if (!rgCol) {
954
+ return 0;
955
+ }
956
+ return dimension_helpers.reduce_1(this.providers.data.stores, (r, s) => {
957
+ const perStore = dimension_helpers.reduce_1(s.store.get('items'), (prev, _row, i) => {
958
+ const item = dimension_helpers.getSourceItem(s.store, i);
959
+ return Math.max(prev || 0, this.getLength(item[rgCol.prop]));
960
+ }, 0);
961
+ return Math.max(r, perStore);
962
+ }, rgCol.size || 0);
963
+ }
964
+ columnSet(columns) {
965
+ var _a;
966
+ for (let t of storeTypes.columnTypes) {
967
+ const type = t;
968
+ const cols = columns[type];
969
+ for (let i in cols) {
970
+ if (cols[i].autoSize || ((_a = this.config) === null || _a === void 0 ? void 0 : _a.allColumns)) {
971
+ if (!this.autoSizeColumns) {
972
+ this.autoSizeColumns = {};
973
+ }
974
+ if (!this.autoSizeColumns[type]) {
975
+ this.autoSizeColumns[type] = {};
976
+ }
977
+ this.autoSizeColumns[type][i] = Object.assign(Object.assign({}, cols[i]), { index: parseInt(i, 10) });
978
+ }
979
+ }
980
+ }
981
+ if (this.dataResolve) {
982
+ this.dataResolve(this.autoSizeColumns);
983
+ this.clearPromise();
984
+ }
985
+ }
986
+ clearPromise() {
987
+ this.dataResolve = null;
988
+ this.dataReject = null;
989
+ }
990
+ isRangeEdit(e) {
991
+ return !!e.data;
992
+ }
993
+ initiatePresizeElement() {
994
+ const styleForFontTest = {
995
+ position: 'absolute',
996
+ fontSize: '14px',
997
+ height: '0',
998
+ width: '0',
999
+ whiteSpace: 'nowrap',
1000
+ top: '0',
1001
+ overflowX: 'scroll',
1002
+ };
1003
+ const el = document.createElement('div');
1004
+ for (let s in styleForFontTest) {
1005
+ el.style[s] = styleForFontTest[s];
1006
+ }
1007
+ el.classList.add('revo-test-container');
1008
+ return el;
1009
+ }
1010
+ destroy() {
1011
+ var _a;
1012
+ super.destroy();
1013
+ (_a = this.precsizeCalculationArea) === null || _a === void 0 ? void 0 : _a.remove();
1014
+ }
1015
+ }
1016
+
1017
+ const eq = (value, extra) => {
1018
+ if (typeof value === 'undefined' || (value === null && !extra)) {
1019
+ return true;
1020
+ }
1021
+ if (typeof value !== 'string') {
1022
+ value = JSON.stringify(value);
1023
+ }
1024
+ const filterVal = extra.toString().toLocaleLowerCase();
1025
+ if (filterVal.length === 0) {
1026
+ return true;
1027
+ }
1028
+ return value.toLocaleLowerCase() === filterVal;
1029
+ };
1030
+ const notEq = (value, extra) => !eq(value, extra);
1031
+ notEq.extra = 'input';
1032
+ eq.extra = 'input';
1033
+
1034
+ const gtThan = function (value, extra) {
1035
+ let conditionValue;
1036
+ if (typeof value === 'number') {
1037
+ conditionValue = parseFloat(extra === null || extra === void 0 ? void 0 : extra.toString());
1038
+ return value > conditionValue;
1039
+ }
1040
+ return false;
1041
+ };
1042
+ gtThan.extra = 'input';
1043
+
1044
+ const gtThanEq = function (value, extra) {
1045
+ return eq(value, extra) || gtThan(value, extra);
1046
+ };
1047
+ gtThanEq.extra = 'input';
1048
+
1049
+ const lt = function (value, extra) {
1050
+ let conditionValue;
1051
+ if (typeof value === 'number') {
1052
+ conditionValue = parseFloat(extra === null || extra === void 0 ? void 0 : extra.toString());
1053
+ return value < conditionValue;
1054
+ }
1055
+ else {
1056
+ return false;
1057
+ }
1058
+ };
1059
+ lt.extra = 'input';
1060
+
1061
+ const lsEq = function (value, extra) {
1062
+ return eq(value, extra) || lt(value, extra);
1063
+ };
1064
+ lsEq.extra = 'input';
1065
+
1066
+ const set = (value) => !(value === '' || value === null || value === void 0);
1067
+ const notSet = (value) => !set(value);
1068
+
1069
+ const beginsWith = (value, extra) => {
1070
+ if (!value) {
1071
+ return false;
1072
+ }
1073
+ if (!extra) {
1074
+ return true;
1075
+ }
1076
+ if (typeof value !== 'string') {
1077
+ value = JSON.stringify(value);
1078
+ }
1079
+ if (typeof extra !== 'string') {
1080
+ extra = JSON.stringify(extra);
1081
+ }
1082
+ return value.toLocaleLowerCase().indexOf(extra.toLocaleLowerCase()) === 0;
1083
+ };
1084
+ beginsWith.extra = 'input';
1085
+
1086
+ const contains = (value, extra) => {
1087
+ if (!extra) {
1088
+ return true;
1089
+ }
1090
+ if (!value) {
1091
+ return false;
1092
+ }
1093
+ if (extra) {
1094
+ if (typeof value !== 'string') {
1095
+ value = JSON.stringify(value);
1096
+ }
1097
+ return value.toLocaleLowerCase().indexOf(extra.toString().toLowerCase()) > -1;
1098
+ }
1099
+ return true;
1100
+ };
1101
+ const notContains = (value, extra) => {
1102
+ return !contains(value, extra);
1103
+ };
1104
+ notContains.extra = 'input';
1105
+ contains.extra = 'input';
1106
+
1107
+ const filterNames = {
1108
+ none: 'None',
1109
+ empty: 'Not set',
1110
+ notEmpty: 'Set',
1111
+ eq: 'Equal',
1112
+ notEq: 'Not equal',
1113
+ begins: 'Begins with',
1114
+ contains: 'Contains',
1115
+ notContains: 'Does not contain',
1116
+ eqN: '=',
1117
+ neqN: '!=',
1118
+ gt: '>',
1119
+ gte: '>=',
1120
+ lt: '<',
1121
+ lte: '<=',
1122
+ };
1123
+ const filterEntities = {
1124
+ none: () => true,
1125
+ empty: notSet,
1126
+ notEmpty: set,
1127
+ eq: eq,
1128
+ notEq: notEq,
1129
+ begins: beginsWith,
1130
+ contains: contains,
1131
+ notContains: notContains,
1132
+ eqN: eq,
1133
+ neqN: notEq,
1134
+ gt: gtThan,
1135
+ gte: gtThanEq,
1136
+ lt: lt,
1137
+ lte: lsEq,
1138
+ };
1139
+ const filterTypes = {
1140
+ string: ['notEmpty', 'empty', 'eq', 'notEq', 'begins', 'contains', 'notContains'],
1141
+ number: ['notEmpty', 'empty', 'eqN', 'neqN', 'gt', 'gte', 'lt', 'lte'],
1142
+ };
1143
+
1144
+ const FILTER_TRIMMED_TYPE = 'filter';
1145
+ const FILTER_CONFIG_CHANGED_EVENT = 'filterconfigchanged';
1146
+ class FilterPlugin extends storeTypes.BasePlugin {
1147
+ constructor(revogrid, providers, uiid, config) {
1148
+ var _a;
1149
+ super(revogrid, providers);
1150
+ this.revogrid = revogrid;
1151
+ this.filterCollection = {};
1152
+ this.multiFilterItems = {};
1153
+ this.possibleFilters = Object.assign({}, filterTypes);
1154
+ this.possibleFilterNames = Object.assign({}, filterNames);
1155
+ this.possibleFilterEntities = Object.assign({}, filterEntities);
1156
+ this.filterProp = filter_button.FILTER_PROP;
1157
+ if (config) {
1158
+ this.initConfig(config);
1159
+ }
1160
+ const headerclick = (e) => this.headerclick(e);
1161
+ const aftersourceset = async () => {
1162
+ const filterCollectionProps = Object.keys(this.filterCollection);
1163
+ if (filterCollectionProps.length > 0) {
1164
+ // handle old way of filtering by reworking FilterCollection to new MultiFilterItem
1165
+ filterCollectionProps.forEach((prop, index) => {
1166
+ if (!this.multiFilterItems[prop]) {
1167
+ this.multiFilterItems[prop] = [
1168
+ {
1169
+ id: index,
1170
+ type: this.filterCollection[prop].type,
1171
+ value: this.filterCollection[prop].value,
1172
+ relation: 'and',
1173
+ },
1174
+ ];
1175
+ }
1176
+ });
1177
+ }
1178
+ await this.runFiltering();
1179
+ };
1180
+ this.addEventListener('headerclick', headerclick);
1181
+ this.addEventListener(FILTER_CONFIG_CHANGED_EVENT, ({ detail }) => {
1182
+ if (!detail) {
1183
+ this.clearFiltering();
1184
+ return;
1185
+ }
1186
+ if (typeof detail === 'object') {
1187
+ this.initConfig(detail);
1188
+ }
1189
+ aftersourceset();
1190
+ });
1191
+ this.addEventListener('aftersourceset', aftersourceset);
1192
+ this.addEventListener('filter', ({ detail }) => this.onFilterChange(detail));
1193
+ const existingNodes = this.revogrid.registerVNode.filter((n) => n.$tag$ !== 'revogr-filter-panel');
1194
+ this.revogrid.registerVNode = [
1195
+ ...existingNodes,
1196
+ index$1.h("revogr-filter-panel", { uuid: `filter-${uiid}`, filterItems: this.multiFilterItems, filterNames: this.possibleFilterNames, filterEntities: this.possibleFilterEntities, filterCaptions: (_a = config === null || config === void 0 ? void 0 : config.localization) === null || _a === void 0 ? void 0 : _a.captions, onFilterChange: e => this.onFilterChange(e.detail), disableDynamicFiltering: config === null || config === void 0 ? void 0 : config.disableDynamicFiltering, ref: e => (this.pop = e) }),
1197
+ ];
1198
+ }
1199
+ initConfig(config) {
1200
+ if (config.multiFilterItems) {
1201
+ this.multiFilterItems = Object.assign({}, config.multiFilterItems);
1202
+ }
1203
+ if (config.customFilters) {
1204
+ for (let cType in config.customFilters) {
1205
+ const cFilter = config.customFilters[cType];
1206
+ if (!this.possibleFilters[cFilter.columnFilterType]) {
1207
+ this.possibleFilters[cFilter.columnFilterType] = [];
1208
+ }
1209
+ this.possibleFilters[cFilter.columnFilterType].push(cType);
1210
+ this.possibleFilterEntities[cType] = cFilter.func;
1211
+ this.possibleFilterNames[cType] = cFilter.name;
1212
+ }
1213
+ }
1214
+ if (config.filterProp) {
1215
+ this.filterProp = config.filterProp;
1216
+ }
1217
+ /**
1218
+ * which filters has to be included/excluded
1219
+ * convinient way to exclude system filters
1220
+ */
1221
+ if (config.include) {
1222
+ const filters = {};
1223
+ for (let t in this.possibleFilters) {
1224
+ // validate filters, if appropriate function present
1225
+ const newTypes = this.possibleFilters[t].filter(f => config.include.indexOf(f) > -1);
1226
+ if (newTypes.length) {
1227
+ filters[t] = newTypes;
1228
+ }
1229
+ }
1230
+ // if any valid filters provided show them
1231
+ if (Object.keys(filters).length > 0) {
1232
+ this.possibleFilters = filters;
1233
+ }
1234
+ }
1235
+ if (config.collection) {
1236
+ this.filterCollection = dimension_helpers.reduce_1(config.collection, (result, item, prop) => {
1237
+ if (this.possibleFilterEntities[item.type]) {
1238
+ result[prop] = item;
1239
+ }
1240
+ else {
1241
+ console.warn(`${item.type} type is not found.`);
1242
+ }
1243
+ return result;
1244
+ }, {});
1245
+ }
1246
+ if (config.localization) {
1247
+ if (config.localization.filterNames) {
1248
+ Object.entries(config.localization.filterNames).forEach(([k, v]) => {
1249
+ if (this.possibleFilterNames[k] != void 0) {
1250
+ this.possibleFilterNames[k] = v;
1251
+ }
1252
+ });
1253
+ }
1254
+ }
1255
+ }
1256
+ async headerclick(e) {
1257
+ var _a;
1258
+ const el = (_a = e.detail.originalEvent) === null || _a === void 0 ? void 0 : _a.target;
1259
+ if (!filter_button.isFilterBtn(el)) {
1260
+ return;
1261
+ }
1262
+ e.preventDefault();
1263
+ // close if same
1264
+ const changes = await this.pop.getChanges();
1265
+ if (changes && (changes === null || changes === void 0 ? void 0 : changes.prop) === e.detail.prop) {
1266
+ this.pop.show();
1267
+ return;
1268
+ }
1269
+ // filter button clicked, open filter dialog
1270
+ const gridPos = this.revogrid.getBoundingClientRect();
1271
+ const buttonPos = el.getBoundingClientRect();
1272
+ const prop = e.detail.prop;
1273
+ this.pop.filterTypes = this.getColumnFilter(e.detail.filter);
1274
+ this.pop.show(Object.assign(Object.assign({}, this.filterCollection[prop]), { x: buttonPos.x - gridPos.x, y: buttonPos.y - gridPos.y + buttonPos.height, prop }));
1275
+ }
1276
+ getColumnFilter(type) {
1277
+ let filterType = 'string';
1278
+ if (!type) {
1279
+ return { [filterType]: this.possibleFilters[filterType] };
1280
+ }
1281
+ // if custom column filter
1282
+ if (this.isValidType(type)) {
1283
+ filterType = type;
1284
+ // if multiple filters applied
1285
+ }
1286
+ else if (typeof type === 'object' && type.length) {
1287
+ return type.reduce((r, multiType) => {
1288
+ if (this.isValidType(multiType)) {
1289
+ r[multiType] = this.possibleFilters[multiType];
1290
+ }
1291
+ return r;
1292
+ }, {});
1293
+ }
1294
+ return { [filterType]: this.possibleFilters[filterType] };
1295
+ }
1296
+ isValidType(type) {
1297
+ return !!(typeof type === 'string' && this.possibleFilters[type]);
1298
+ }
1299
+ // called on internal component change
1300
+ async onFilterChange(filterItems) {
1301
+ this.multiFilterItems = filterItems;
1302
+ this.runFiltering();
1303
+ }
1304
+ /**
1305
+ * Triggers grid filtering
1306
+ */
1307
+ async doFiltering(collection, items, columns, filterItems) {
1308
+ const columnsToUpdate = [];
1309
+ columns.forEach(rgCol => {
1310
+ const column = Object.assign({}, rgCol);
1311
+ const hasFilter = filterItems[column.prop];
1312
+ if (column[this.filterProp] && !hasFilter) {
1313
+ delete column[this.filterProp];
1314
+ columnsToUpdate.push(column);
1315
+ }
1316
+ if (!column[this.filterProp] && hasFilter) {
1317
+ columnsToUpdate.push(column);
1318
+ column[this.filterProp] = true;
1319
+ }
1320
+ });
1321
+ const itemsToFilter = this.getRowFilter(items, filterItems);
1322
+ // check is filter event prevented
1323
+ const { defaultPrevented, detail } = this.emit('beforefiltertrimmed', {
1324
+ collection,
1325
+ itemsToFilter,
1326
+ source: items,
1327
+ filterItems,
1328
+ });
1329
+ if (defaultPrevented) {
1330
+ return;
1331
+ }
1332
+ // check is trimmed event prevented
1333
+ const isAddedEvent = await this.revogrid.addTrimmed(detail.itemsToFilter, FILTER_TRIMMED_TYPE);
1334
+ if (isAddedEvent.defaultPrevented) {
1335
+ return;
1336
+ }
1337
+ // applies the hasFilter to the columns to show filter icon
1338
+ await this.revogrid.updateColumns(columnsToUpdate);
1339
+ this.emit('afterFilterApply');
1340
+ }
1341
+ async clearFiltering() {
1342
+ this.multiFilterItems = {};
1343
+ await this.runFiltering();
1344
+ }
1345
+ async runFiltering() {
1346
+ const collection = {};
1347
+ // handle old filterCollection to return the first filter only (if any) from multiFilterItems
1348
+ const filterProps = Object.keys(this.multiFilterItems);
1349
+ for (const prop of filterProps) {
1350
+ // check if we have any filter for a column
1351
+ if (this.multiFilterItems[prop].length > 0) {
1352
+ const firstFilterItem = this.multiFilterItems[prop][0];
1353
+ collection[prop] = {
1354
+ filter: filterEntities[firstFilterItem.type],
1355
+ type: firstFilterItem.type,
1356
+ value: firstFilterItem.value,
1357
+ };
1358
+ }
1359
+ }
1360
+ this.filterCollection = collection;
1361
+ const { source, columns } = await this.getData();
1362
+ const { defaultPrevented, detail } = this.emit('beforefilterapply', {
1363
+ collection: this.filterCollection,
1364
+ source,
1365
+ columns,
1366
+ filterItems: this.multiFilterItems,
1367
+ });
1368
+ if (defaultPrevented) {
1369
+ return;
1370
+ }
1371
+ this.doFiltering(detail.collection, detail.source, detail.columns, detail.filterItems);
1372
+ }
1373
+ async getData() {
1374
+ return {
1375
+ source: await this.revogrid.getSource(),
1376
+ columns: await this.revogrid.getColumns(),
1377
+ };
1378
+ }
1379
+ getRowFilter(rows, filterItems) {
1380
+ const propKeys = Object.keys(filterItems);
1381
+ const trimmed = {};
1382
+ let propFilterSatisfiedCount = 0;
1383
+ let lastFilterResults = [];
1384
+ // each rows
1385
+ rows.forEach((model, rowIndex) => {
1386
+ // working on all props
1387
+ for (const prop of propKeys) {
1388
+ const propFilters = filterItems[prop];
1389
+ propFilterSatisfiedCount = 0;
1390
+ lastFilterResults = [];
1391
+ // testing each filter for a prop
1392
+ for (const [filterIndex, filterData] of propFilters.entries()) {
1393
+ // the filter LogicFunction based on the type
1394
+ const filter = this.possibleFilterEntities[filterData.type];
1395
+ // THE MAGIC OF FILTERING IS HERE
1396
+ if (filterData.relation === 'or') {
1397
+ lastFilterResults = [];
1398
+ if (filter(model[prop], filterData.value)) {
1399
+ continue;
1400
+ }
1401
+ propFilterSatisfiedCount++;
1402
+ }
1403
+ else {
1404
+ // 'and' relation will need to know the next filter
1405
+ // so we save this current filter to include it in the next filter
1406
+ lastFilterResults.push(!filter(model[prop], filterData.value));
1407
+ // check first if we have a filter on the next index to pair it with this current filter
1408
+ const nextFilterData = propFilters[filterIndex + 1];
1409
+ // stop the sequence if there is no next filter or if the next filter is not an 'and' relation
1410
+ if (!nextFilterData || nextFilterData.relation !== 'and') {
1411
+ // let's just continue since for sure propFilterSatisfiedCount cannot be satisfied
1412
+ if (lastFilterResults.indexOf(true) === -1) {
1413
+ lastFilterResults = [];
1414
+ continue;
1415
+ }
1416
+ // we need to add all of the lastFilterResults since we need to satisfy all
1417
+ propFilterSatisfiedCount += lastFilterResults.length;
1418
+ lastFilterResults = [];
1419
+ }
1420
+ }
1421
+ } // end of propFilters forEach
1422
+ // add to the list of removed/trimmed rows of filter condition is satisfied
1423
+ if (propFilterSatisfiedCount === propFilters.length)
1424
+ trimmed[rowIndex] = true;
1425
+ } // end of for-of propKeys
1426
+ });
1427
+ return trimmed;
1428
+ }
1429
+ }
1430
+
1431
+ var baseGetTag = toNumber._baseGetTag,
1432
+ isArray = dimension_helpers.isArray_1,
1433
+ isObjectLike = toNumber.isObjectLike_1;
1434
+
1435
+ /** `Object#toString` result references. */
1436
+ var stringTag = '[object String]';
1437
+
1438
+ /**
1439
+ * Checks if `value` is classified as a `String` primitive or object.
1440
+ *
1441
+ * @static
1442
+ * @since 0.1.0
1443
+ * @memberOf _
1444
+ * @category Lang
1445
+ * @param {*} value The value to check.
1446
+ * @returns {boolean} Returns `true` if `value` is a string, else `false`.
1447
+ * @example
1448
+ *
1449
+ * _.isString('abc');
1450
+ * // => true
1451
+ *
1452
+ * _.isString(1);
1453
+ * // => false
1454
+ */
1455
+ function isString$1(value) {
1456
+ return typeof value == 'string' ||
1457
+ (!isArray(value) && isObjectLike(value) && baseGetTag(value) == stringTag);
1458
+ }
1459
+
1460
+ var isString_1 = isString$1;
1461
+
1462
+ var baseProperty = dimension_helpers._baseProperty;
1463
+
1464
+ /**
1465
+ * Gets the size of an ASCII `string`.
1466
+ *
1467
+ * @private
1468
+ * @param {string} string The string inspect.
1469
+ * @returns {number} Returns the string size.
1470
+ */
1471
+ var asciiSize$1 = baseProperty('length');
1472
+
1473
+ var _asciiSize = asciiSize$1;
1474
+
1475
+ /** Used to compose unicode character classes. */
1476
+
1477
+ var rsAstralRange$1 = '\\ud800-\\udfff',
1478
+ rsComboMarksRange$1 = '\\u0300-\\u036f',
1479
+ reComboHalfMarksRange$1 = '\\ufe20-\\ufe2f',
1480
+ rsComboSymbolsRange$1 = '\\u20d0-\\u20ff',
1481
+ rsComboRange$1 = rsComboMarksRange$1 + reComboHalfMarksRange$1 + rsComboSymbolsRange$1,
1482
+ rsVarRange$1 = '\\ufe0e\\ufe0f';
1483
+
1484
+ /** Used to compose unicode capture groups. */
1485
+ var rsZWJ$1 = '\\u200d';
1486
+
1487
+ /** 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/). */
1488
+ var reHasUnicode = RegExp('[' + rsZWJ$1 + rsAstralRange$1 + rsComboRange$1 + rsVarRange$1 + ']');
1489
+
1490
+ /**
1491
+ * Checks if `string` contains Unicode symbols.
1492
+ *
1493
+ * @private
1494
+ * @param {string} string The string to inspect.
1495
+ * @returns {boolean} Returns `true` if a symbol is found, else `false`.
1496
+ */
1497
+ function hasUnicode$1(string) {
1498
+ return reHasUnicode.test(string);
1499
+ }
1500
+
1501
+ var _hasUnicode = hasUnicode$1;
1502
+
1503
+ /** Used to compose unicode character classes. */
1504
+
1505
+ var rsAstralRange = '\\ud800-\\udfff',
1506
+ rsComboMarksRange = '\\u0300-\\u036f',
1507
+ reComboHalfMarksRange = '\\ufe20-\\ufe2f',
1508
+ rsComboSymbolsRange = '\\u20d0-\\u20ff',
1509
+ rsComboRange = rsComboMarksRange + reComboHalfMarksRange + rsComboSymbolsRange,
1510
+ rsVarRange = '\\ufe0e\\ufe0f';
1511
+
1512
+ /** Used to compose unicode capture groups. */
1513
+ var rsAstral = '[' + rsAstralRange + ']',
1514
+ rsCombo = '[' + rsComboRange + ']',
1515
+ rsFitz = '\\ud83c[\\udffb-\\udfff]',
1516
+ rsModifier = '(?:' + rsCombo + '|' + rsFitz + ')',
1517
+ rsNonAstral = '[^' + rsAstralRange + ']',
1518
+ rsRegional = '(?:\\ud83c[\\udde6-\\uddff]){2}',
1519
+ rsSurrPair = '[\\ud800-\\udbff][\\udc00-\\udfff]',
1520
+ rsZWJ = '\\u200d';
1521
+
1522
+ /** Used to compose unicode regexes. */
1523
+ var reOptMod = rsModifier + '?',
1524
+ rsOptVar = '[' + rsVarRange + ']?',
1525
+ rsOptJoin = '(?:' + rsZWJ + '(?:' + [rsNonAstral, rsRegional, rsSurrPair].join('|') + ')' + rsOptVar + reOptMod + ')*',
1526
+ rsSeq = rsOptVar + reOptMod + rsOptJoin,
1527
+ rsSymbol = '(?:' + [rsNonAstral + rsCombo + '?', rsCombo, rsRegional, rsSurrPair, rsAstral].join('|') + ')';
1528
+
1529
+ /** Used to match [string symbols](https://mathiasbynens.be/notes/javascript-unicode). */
1530
+ var reUnicode = RegExp(rsFitz + '(?=' + rsFitz + ')|' + rsSymbol + rsSeq, 'g');
1531
+
1532
+ /**
1533
+ * Gets the size of a Unicode `string`.
1534
+ *
1535
+ * @private
1536
+ * @param {string} string The string inspect.
1537
+ * @returns {number} Returns the string size.
1538
+ */
1539
+ function unicodeSize$1(string) {
1540
+ var result = reUnicode.lastIndex = 0;
1541
+ while (reUnicode.test(string)) {
1542
+ ++result;
1543
+ }
1544
+ return result;
1545
+ }
1546
+
1547
+ var _unicodeSize = unicodeSize$1;
1548
+
1549
+ var asciiSize = _asciiSize,
1550
+ hasUnicode = _hasUnicode,
1551
+ unicodeSize = _unicodeSize;
1552
+
1553
+ /**
1554
+ * Gets the number of symbols in `string`.
1555
+ *
1556
+ * @private
1557
+ * @param {string} string The string to inspect.
1558
+ * @returns {number} Returns the string size.
1559
+ */
1560
+ function stringSize$1(string) {
1561
+ return hasUnicode(string)
1562
+ ? unicodeSize(string)
1563
+ : asciiSize(string);
1564
+ }
1565
+
1566
+ var _stringSize = stringSize$1;
1567
+
1568
+ var baseKeys = dimension_helpers._baseKeys,
1569
+ getTag = dimension_helpers._getTag,
1570
+ isArrayLike = dimension_helpers.isArrayLike_1,
1571
+ isString = isString_1,
1572
+ stringSize = _stringSize;
1573
+
1574
+ /** `Object#toString` result references. */
1575
+ var mapTag = '[object Map]',
1576
+ setTag = '[object Set]';
1577
+
1578
+ /**
1579
+ * Gets the size of `collection` by returning its length for array-like
1580
+ * values or the number of own enumerable string keyed properties for objects.
1581
+ *
1582
+ * @static
1583
+ * @memberOf _
1584
+ * @since 0.1.0
1585
+ * @category Collection
1586
+ * @param {Array|Object|string} collection The collection to inspect.
1587
+ * @returns {number} Returns the collection size.
1588
+ * @example
1589
+ *
1590
+ * _.size([1, 2, 3]);
1591
+ * // => 3
1592
+ *
1593
+ * _.size({ 'a': 1, 'b': 2 });
1594
+ * // => 2
1595
+ *
1596
+ * _.size('pebbles');
1597
+ * // => 7
1598
+ */
1599
+ function size(collection) {
1600
+ if (collection == null) {
1601
+ return 0;
1602
+ }
1603
+ if (isArrayLike(collection)) {
1604
+ return isString(collection) ? stringSize(collection) : collection.length;
1605
+ }
1606
+ var tag = getTag(collection);
1607
+ if (tag == mapTag || tag == setTag) {
1608
+ return collection.size;
1609
+ }
1610
+ return baseKeys(collection).length;
1611
+ }
1612
+
1613
+ var size_1 = size;
1614
+
1615
+ /**
1616
+ * Lifecycle
1617
+ * 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.
1618
+ * 2. @method `updateColumnSorting` - Updates the column sorting icon on the grid and the column itself, but the data remains untouched.
1619
+ * 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.
1620
+ * 4. @event `aftersortingapply` - Triggered after sorting has been applied and completed. This event occurs for both row and column sorting.
1621
+ *
1622
+ * Note: If you prevent an event, it will not proceed to the subsequent steps.
1623
+ */
1624
+ class SortingPlugin extends storeTypes.BasePlugin {
1625
+ async runSorting(order, comparison) {
1626
+ var _a;
1627
+ await this.sort(order, comparison);
1628
+ (_a = this.sortingPromise) === null || _a === void 0 ? void 0 : _a.call(this);
1629
+ this.sortingPromise = null;
1630
+ }
1631
+ constructor(revogrid, providers) {
1632
+ super(revogrid, providers);
1633
+ this.revogrid = revogrid;
1634
+ // sorting order per column
1635
+ this.sorting = null;
1636
+ // sorting function per column, multiple columns sorting supported
1637
+ this.sortingFunc = null;
1638
+ this.sortingPromise = null;
1639
+ this.postponeSort = debounce.debounce_1(async (order, comparison) => this.runSorting(order, comparison), 50);
1640
+ const beforeanysource = async ({ detail: { type, }, }) => {
1641
+ // if sorting was provided - sort data
1642
+ if (!!this.sorting && this.sortingFunc) {
1643
+ const beforeEvent = this.emit('beforesorting', { type });
1644
+ if (beforeEvent.defaultPrevented) {
1645
+ return;
1646
+ }
1647
+ this.startSorting(this.sorting, this.sortingFunc);
1648
+ }
1649
+ };
1650
+ const aftercolumnsset = async ({ detail: { order }, }) => {
1651
+ const columns = await this.revogrid.getColumns();
1652
+ const sortingFunc = {};
1653
+ for (let prop in order) {
1654
+ const cmp = this.getComparer(ColumnDataProvider.getColumnByProp(columns, prop), order[prop]);
1655
+ sortingFunc[prop] = cmp;
1656
+ }
1657
+ this.runSorting(order, sortingFunc);
1658
+ };
1659
+ const headerclick = async (e) => {
1660
+ var _a, _b;
1661
+ if (e.defaultPrevented) {
1662
+ return;
1663
+ }
1664
+ if (!e.detail.column.sortable) {
1665
+ return;
1666
+ }
1667
+ 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);
1668
+ };
1669
+ this.addEventListener('beforeanysource', beforeanysource);
1670
+ this.addEventListener('aftercolumnsset', aftercolumnsset);
1671
+ this.addEventListener('beforeheaderclick', headerclick);
1672
+ }
1673
+ startSorting(order, sortingFunc) {
1674
+ if (!this.sortingPromise) {
1675
+ this.revogrid.jobsBeforeRender.push(new Promise((resolve) => {
1676
+ this.sortingPromise = resolve;
1677
+ }));
1678
+ }
1679
+ this.postponeSort(order, sortingFunc);
1680
+ }
1681
+ getComparer(column, order) {
1682
+ var _a;
1683
+ const cellCmp = ((_a = column === null || column === void 0 ? void 0 : column.cellCompare) === null || _a === void 0 ? void 0 : _a.bind({ order })) || this.defaultCellCompare;
1684
+ if (order == 'asc') {
1685
+ return cellCmp;
1686
+ }
1687
+ if (order == 'desc') {
1688
+ return this.descCellCompare(cellCmp);
1689
+ }
1690
+ return undefined;
1691
+ }
1692
+ /**
1693
+ * Apply sorting to data on header click
1694
+ * If additive - add to existing sorting, multiple columns can be sorted
1695
+ */
1696
+ async headerclick(column, index, additive) {
1697
+ let order = this.getNextOrder(column.order);
1698
+ const beforeEvent = this.emit('beforesorting', { column, order, additive });
1699
+ if (beforeEvent.defaultPrevented) {
1700
+ return;
1701
+ }
1702
+ order = beforeEvent.detail.order;
1703
+ const newCol = await this.revogrid.updateColumnSorting(beforeEvent.detail.column, index, order, additive);
1704
+ // apply sort data
1705
+ const beforeApplyEvent = this.emit('beforesortingapply', {
1706
+ column: newCol,
1707
+ order,
1708
+ additive,
1709
+ });
1710
+ if (beforeApplyEvent.defaultPrevented) {
1711
+ return;
1712
+ }
1713
+ order = beforeApplyEvent.detail.order;
1714
+ const cmp = this.getComparer(column, order);
1715
+ if (additive && this.sorting) {
1716
+ const sorting = {};
1717
+ const sortingFunc = {};
1718
+ this.sorting = Object.assign(Object.assign({}, this.sorting), sorting);
1719
+ // extend sorting function with new sorting for multiple columns sorting
1720
+ this.sortingFunc = Object.assign(Object.assign({}, this.sortingFunc), sortingFunc);
1721
+ if (column.prop in sorting && size_1(sorting) > 1 && order === undefined) {
1722
+ delete sorting[column.prop];
1723
+ delete sortingFunc[column.prop];
1724
+ }
1725
+ else {
1726
+ sorting[column.prop] = order;
1727
+ sortingFunc[column.prop] = cmp;
1728
+ }
1729
+ }
1730
+ else {
1731
+ if (order) {
1732
+ // reset sorting
1733
+ this.sorting = { [column.prop]: order };
1734
+ this.sortingFunc = { [column.prop]: cmp };
1735
+ }
1736
+ else {
1737
+ delete this.sorting[column.prop];
1738
+ delete this.sortingFunc[column.prop];
1739
+ }
1740
+ }
1741
+ this.startSorting(this.sorting, this.sortingFunc);
1742
+ }
1743
+ /**
1744
+ * Sort items by sorting function
1745
+ * @requires proxyItems applied to row store
1746
+ * @requires source applied to row store
1747
+ *
1748
+ * @param sorting - per column sorting
1749
+ * @param data - this.stores['rgRow'].store.get('source')
1750
+ */
1751
+ async sort(sorting, sortingFunc, types = ['rgRow', 'rowPinStart', 'rowPinEnd']) {
1752
+ // if no sorting - reset
1753
+ if (!size_1(sorting)) {
1754
+ this.sorting = null;
1755
+ this.sortingFunc = null;
1756
+ for (let type of types) {
1757
+ const store = await this.revogrid.getSourceStore(type);
1758
+ // row data
1759
+ const source = store.get('source');
1760
+ // row indexes
1761
+ const proxyItems = dimension_helpers.range_1(0, source.length);
1762
+ dimension_helpers.setStore(store, {
1763
+ proxyItems,
1764
+ source: [...source],
1765
+ });
1766
+ }
1767
+ }
1768
+ else {
1769
+ // set sorting
1770
+ this.sorting = sorting;
1771
+ this.sortingFunc = sortingFunc;
1772
+ // by default it'll sort by rgRow store
1773
+ // todo: support multiple stores
1774
+ for (let type of types) {
1775
+ const store = await this.revogrid.getSourceStore(type);
1776
+ // row data
1777
+ const source = store.get('source');
1778
+ // row indexes
1779
+ const proxyItems = store.get('proxyItems');
1780
+ const data = this.sortIndexByItems([...proxyItems], source, sortingFunc);
1781
+ dimension_helpers.setStore(store, {
1782
+ proxyItems: data,
1783
+ source: [...source],
1784
+ });
1785
+ }
1786
+ }
1787
+ this.emit('aftersortingapply');
1788
+ }
1789
+ defaultCellCompare(prop, a, b) {
1790
+ var _a, _b;
1791
+ const av = (_a = a[prop]) === null || _a === void 0 ? void 0 : _a.toString().toLowerCase();
1792
+ const bv = (_b = b[prop]) === null || _b === void 0 ? void 0 : _b.toString().toLowerCase();
1793
+ return av == bv ? 0 : av > bv ? 1 : -1;
1794
+ }
1795
+ descCellCompare(cmp) {
1796
+ return (prop, a, b) => {
1797
+ return -1 * cmp(prop, a, b);
1798
+ };
1799
+ }
1800
+ sortIndexByItems(indexes, source, sortingFunc) {
1801
+ // if no sorting - return unsorted indexes
1802
+ if (Object.entries(sortingFunc).length === 0) {
1803
+ // Unsort indexes
1804
+ return [...Array(indexes.length).keys()];
1805
+ }
1806
+ //
1807
+ /**
1808
+ * go through all indexes and align in new order
1809
+ * performs a multi-level sorting by applying multiple comparison functions to determine the order of the items based on different properties.
1810
+ */
1811
+ return indexes.sort((a, b) => {
1812
+ for (const [prop, cmp] of Object.entries(sortingFunc)) {
1813
+ const itemA = source[a];
1814
+ const itemB = source[b];
1815
+ /**
1816
+ * 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.
1817
+ * 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.
1818
+ */
1819
+ const sorted = cmp(prop, itemA, itemB);
1820
+ if (sorted) {
1821
+ return sorted;
1822
+ }
1823
+ }
1824
+ return 0;
1825
+ });
1826
+ }
1827
+ getNextOrder(currentOrder) {
1828
+ switch (currentOrder) {
1829
+ case undefined:
1830
+ return 'asc';
1831
+ case 'asc':
1832
+ return 'desc';
1833
+ case 'desc':
1834
+ return undefined;
1835
+ }
1836
+ }
1837
+ }
1838
+
1839
+ /**
1840
+ * The base implementation of `_.clamp` which doesn't coerce arguments.
1841
+ *
1842
+ * @private
1843
+ * @param {number} number The number to clamp.
1844
+ * @param {number} [lower] The lower bound.
1845
+ * @param {number} upper The upper bound.
1846
+ * @returns {number} Returns the clamped number.
1847
+ */
1848
+
1849
+ function baseClamp$1(number, lower, upper) {
1850
+ if (number === number) {
1851
+ if (upper !== undefined) {
1852
+ number = number <= upper ? number : upper;
1853
+ }
1854
+ if (lower !== undefined) {
1855
+ number = number >= lower ? number : lower;
1856
+ }
1857
+ }
1858
+ return number;
1859
+ }
1860
+
1861
+ var _baseClamp = baseClamp$1;
1862
+
1863
+ var baseClamp = _baseClamp,
1864
+ toInteger$1 = dimension_helpers.toInteger_1;
1865
+
1866
+ /** Used as references for the maximum length and index of an array. */
1867
+ var MAX_ARRAY_LENGTH = 4294967295;
1868
+
1869
+ /**
1870
+ * Converts `value` to an integer suitable for use as the length of an
1871
+ * array-like object.
1872
+ *
1873
+ * **Note:** This method is based on
1874
+ * [`ToLength`](http://ecma-international.org/ecma-262/7.0/#sec-tolength).
1875
+ *
1876
+ * @static
1877
+ * @memberOf _
1878
+ * @since 4.0.0
1879
+ * @category Lang
1880
+ * @param {*} value The value to convert.
1881
+ * @returns {number} Returns the converted integer.
1882
+ * @example
1883
+ *
1884
+ * _.toLength(3.2);
1885
+ * // => 3
1886
+ *
1887
+ * _.toLength(Number.MIN_VALUE);
1888
+ * // => 0
1889
+ *
1890
+ * _.toLength(Infinity);
1891
+ * // => 4294967295
1892
+ *
1893
+ * _.toLength('3.2');
1894
+ * // => 3
1895
+ */
1896
+ function toLength$1(value) {
1897
+ return value ? baseClamp(toInteger$1(value), 0, MAX_ARRAY_LENGTH) : 0;
1898
+ }
1899
+
1900
+ var toLength_1 = toLength$1;
1901
+
1902
+ var toInteger = dimension_helpers.toInteger_1,
1903
+ toLength = toLength_1;
1904
+
1905
+ /**
1906
+ * The base implementation of `_.fill` without an iteratee call guard.
1907
+ *
1908
+ * @private
1909
+ * @param {Array} array The array to fill.
1910
+ * @param {*} value The value to fill `array` with.
1911
+ * @param {number} [start=0] The start position.
1912
+ * @param {number} [end=array.length] The end position.
1913
+ * @returns {Array} Returns `array`.
1914
+ */
1915
+ function baseFill$1(array, value, start, end) {
1916
+ var length = array.length;
1917
+
1918
+ start = toInteger(start);
1919
+ if (start < 0) {
1920
+ start = -start > length ? 0 : (length + start);
1921
+ }
1922
+ end = (end === undefined || end > length) ? length : toInteger(end);
1923
+ if (end < 0) {
1924
+ end += length;
1925
+ }
1926
+ end = start > end ? 0 : toLength(end);
1927
+ while (start < end) {
1928
+ array[start++] = value;
1929
+ }
1930
+ return array;
1931
+ }
1932
+
1933
+ var _baseFill = baseFill$1;
1934
+
1935
+ var baseFill = _baseFill,
1936
+ isIterateeCall = dimension_helpers._isIterateeCall;
1937
+
1938
+ /**
1939
+ * Fills elements of `array` with `value` from `start` up to, but not
1940
+ * including, `end`.
1941
+ *
1942
+ * **Note:** This method mutates `array`.
1943
+ *
1944
+ * @static
1945
+ * @memberOf _
1946
+ * @since 3.2.0
1947
+ * @category Array
1948
+ * @param {Array} array The array to fill.
1949
+ * @param {*} value The value to fill `array` with.
1950
+ * @param {number} [start=0] The start position.
1951
+ * @param {number} [end=array.length] The end position.
1952
+ * @returns {Array} Returns `array`.
1953
+ * @example
1954
+ *
1955
+ * var array = [1, 2, 3];
1956
+ *
1957
+ * _.fill(array, 'a');
1958
+ * console.log(array);
1959
+ * // => ['a', 'a', 'a']
1960
+ *
1961
+ * _.fill(Array(3), 2);
1962
+ * // => [2, 2, 2]
1963
+ *
1964
+ * _.fill([4, 6, 8, 10], '*', 1, 3);
1965
+ * // => [4, '*', '*', 10]
1966
+ */
1967
+ function fill(array, value, start, end) {
1968
+ var length = array == null ? 0 : array.length;
1969
+ if (!length) {
1970
+ return [];
1971
+ }
1972
+ if (start && typeof start != 'number' && isIterateeCall(array, value, start)) {
1973
+ start = 0;
1974
+ end = length;
1975
+ }
1976
+ return baseFill(array, value, start, end);
1977
+ }
1978
+
1979
+ var fill_1 = fill;
1980
+
1981
+ const INITIAL = {
1982
+ mime: 'text/csv',
1983
+ fileKind: 'csv',
1984
+ // BOM signature
1985
+ bom: true,
1986
+ columnDelimiter: ',',
1987
+ rowDelimiter: '\r\n',
1988
+ encoding: '',
1989
+ };
1990
+ // The ASCII character code 13 is called a Carriage Return or CR.
1991
+ const CARRIAGE_RETURN = String.fromCharCode(13);
1992
+ // Chr(13) followed by a Chr(10) that compose a proper CRLF.
1993
+ const LINE_FEED = String.fromCharCode(10);
1994
+ const DOUBLE_QT = String.fromCharCode(34);
1995
+ const NO_BREAK_SPACE = String.fromCharCode(0xfeff);
1996
+ const escapeRegex = new RegExp('"', 'g');
1997
+ class ExportCsv {
1998
+ constructor(options = {}) {
1999
+ this.options = Object.assign(Object.assign({}, INITIAL), options);
2000
+ }
2001
+ doExport({ data, headers, props }) {
2002
+ let result = this.options.bom ? NO_BREAK_SPACE : '';
2003
+ // any header
2004
+ if ((headers === null || headers === void 0 ? void 0 : headers.length) > 0) {
2005
+ headers.forEach(header => {
2006
+ // ignore empty
2007
+ if (!header.length) {
2008
+ return;
2009
+ }
2010
+ result += this.prepareHeader(header, this.options.columnDelimiter);
2011
+ result += this.options.rowDelimiter;
2012
+ });
2013
+ }
2014
+ data.forEach((rgRow, index) => {
2015
+ if (index > 0) {
2016
+ result += this.options.rowDelimiter;
2017
+ }
2018
+ // support grouping
2019
+ if (column_service.isGrouping(rgRow)) {
2020
+ result += this.parseCell(column_service.getGroupingName(rgRow), this.options.columnDelimiter);
2021
+ return;
2022
+ }
2023
+ result += props.map(p => this.parseCell(rgRow[p], this.options.columnDelimiter)).join(this.options.columnDelimiter);
2024
+ });
2025
+ return result;
2026
+ }
2027
+ prepareHeader(columnHeaders, columnDelimiter) {
2028
+ let result = '';
2029
+ const newColumnHeaders = columnHeaders.map(v => this.parseCell(v, columnDelimiter, true));
2030
+ result += newColumnHeaders.join(columnDelimiter);
2031
+ return result;
2032
+ }
2033
+ parseCell(value, columnDelimiter, force = false) {
2034
+ let escape = value;
2035
+ if (typeof value !== 'string') {
2036
+ escape = JSON.stringify(value);
2037
+ }
2038
+ const toEscape = [CARRIAGE_RETURN, DOUBLE_QT, LINE_FEED, columnDelimiter];
2039
+ if (typeof escape === 'undefined') {
2040
+ return '';
2041
+ }
2042
+ if (escape !== '' && (force || toEscape.some(i => escape.indexOf(i) >= 0))) {
2043
+ return `"${escape.replace(escapeRegex, '""')}"`;
2044
+ }
2045
+ return escape;
2046
+ }
2047
+ }
2048
+
2049
+ var ExportTypes;
2050
+ (function (ExportTypes) {
2051
+ ExportTypes["csv"] = "csv";
2052
+ })(ExportTypes || (ExportTypes = {}));
2053
+ class ExportFilePlugin extends storeTypes.BasePlugin {
2054
+ /** Exports string */
2055
+ async exportString(options = {}, t = ExportTypes.csv) {
2056
+ const data = await this.beforeexport();
2057
+ if (!data) {
2058
+ return null;
2059
+ }
2060
+ return this.formatter(t, options).doExport(data);
2061
+ }
2062
+ /** Exports Blob */
2063
+ async exportBlob(options = {}, t = ExportTypes.csv) {
2064
+ return await this.getBlob(this.formatter(t, options));
2065
+ }
2066
+ /** Export file */
2067
+ async exportFile(options = {}, t = ExportTypes.csv) {
2068
+ const formatter = this.formatter(t, options);
2069
+ const blob = await this.getBlob(formatter);
2070
+ // url
2071
+ const URL = window.URL || window.webkitURL;
2072
+ const a = document.createElement('a');
2073
+ const { filename, fileKind } = formatter.options;
2074
+ const name = `${filename}.${fileKind}`;
2075
+ const url = URL.createObjectURL(blob);
2076
+ a.style.display = 'none';
2077
+ a.setAttribute('href', url);
2078
+ a.setAttribute('download', name);
2079
+ this.revogrid.appendChild(a);
2080
+ a.dispatchEvent(new MouseEvent('click'));
2081
+ this.revogrid.removeChild(a);
2082
+ // delay for revoke, correct for some browsers
2083
+ await index.timeout(120);
2084
+ URL.revokeObjectURL(url);
2085
+ }
2086
+ /** Blob object */
2087
+ async getBlob(formatter) {
2088
+ const type = `${formatter.options.mime};charset=${formatter.options.encoding}`;
2089
+ if (typeof Blob !== 'undefined') {
2090
+ const data = await this.beforeexport();
2091
+ if (!data) {
2092
+ return null;
2093
+ }
2094
+ return new Blob([formatter.doExport(data)], { type });
2095
+ }
2096
+ return null;
2097
+ }
2098
+ // before event
2099
+ async beforeexport() {
2100
+ let data = await this.getData();
2101
+ const event = this.emit('beforeexport', { data });
2102
+ if (event.defaultPrevented) {
2103
+ return null;
2104
+ }
2105
+ return event.detail.data;
2106
+ }
2107
+ async getData() {
2108
+ const data = await this.getSource();
2109
+ const colSource = [];
2110
+ const colPromises = [];
2111
+ storeTypes.columnTypes.forEach((t, i) => {
2112
+ colPromises.push(this.getColPerSource(t).then(s => (colSource[i] = s)));
2113
+ });
2114
+ await Promise.all(colPromises);
2115
+ const columns = {
2116
+ headers: [],
2117
+ props: [],
2118
+ };
2119
+ for (let source of colSource) {
2120
+ source.headers.forEach((h, i) => {
2121
+ if (!columns.headers[i]) {
2122
+ columns.headers[i] = [];
2123
+ }
2124
+ columns.headers[i].push(...h);
2125
+ });
2126
+ columns.props.push(...source.props);
2127
+ }
2128
+ return Object.assign({ data }, columns);
2129
+ }
2130
+ async getColPerSource(t) {
2131
+ const store = await this.revogrid.getColumnStore(t);
2132
+ const source = store.get('source');
2133
+ const virtualIndexes = store.get('items');
2134
+ const depth = store.get('groupingDepth');
2135
+ const groups = store.get('groups');
2136
+ const colNames = [];
2137
+ const colProps = [];
2138
+ const visibleItems = virtualIndexes.reduce((r, v, virtualIndex) => {
2139
+ const prop = source[v].prop;
2140
+ colNames.push(source[v].name || '');
2141
+ colProps.push(prop);
2142
+ r[prop] = virtualIndex;
2143
+ return r;
2144
+ }, {});
2145
+ const rows = this.getGroupHeaders(depth, groups, virtualIndexes, visibleItems);
2146
+ rows.push(colNames);
2147
+ return {
2148
+ headers: rows,
2149
+ props: colProps,
2150
+ };
2151
+ }
2152
+ getGroupHeaders(depth, groups, items, visibleItems) {
2153
+ const rows = [];
2154
+ const template = fill_1(new Array(items.length), '');
2155
+ for (let d = 0; d < depth; d++) {
2156
+ const rgRow = [...template];
2157
+ rows.push(rgRow);
2158
+ if (!groups[d]) {
2159
+ continue;
2160
+ }
2161
+ const levelGroups = groups[d];
2162
+ // add names of groups
2163
+ levelGroups.forEach((group) => {
2164
+ const minIndex = this.findGroupStartIndex(group.ids, visibleItems);
2165
+ if (typeof minIndex === 'number') {
2166
+ rgRow[minIndex] = group.name;
2167
+ }
2168
+ });
2169
+ }
2170
+ return rows;
2171
+ }
2172
+ findGroupStartIndex(ids, visibleItems) {
2173
+ let min;
2174
+ ids.forEach(id => {
2175
+ const current = visibleItems[id];
2176
+ if (typeof current === 'number') {
2177
+ if (typeof min !== 'number' || min > current) {
2178
+ min = current;
2179
+ }
2180
+ }
2181
+ });
2182
+ return min;
2183
+ }
2184
+ async getSource() {
2185
+ const data = [];
2186
+ const promisesData = [];
2187
+ storeTypes.rowTypes.forEach(t => {
2188
+ const dataPart = [];
2189
+ data.push(dataPart);
2190
+ const promise = this.revogrid.getVisibleSource(t).then((d) => dataPart.push(...d));
2191
+ promisesData.push(promise);
2192
+ });
2193
+ await Promise.all(promisesData);
2194
+ return data.reduce((r, v) => {
2195
+ r.push(...v);
2196
+ return r;
2197
+ }, []);
2198
+ }
2199
+ // get correct class for future multiple types support
2200
+ formatter(type, options = {}) {
2201
+ switch (type) {
2202
+ case ExportTypes.csv:
2203
+ return new ExportCsv(options);
2204
+ default:
2205
+ throw new Error('Unknown format');
2206
+ }
2207
+ }
2208
+ }
2209
+
2210
+ // provide collapse data
2211
+ function doCollapse(pIndex, source) {
2212
+ const model = source[pIndex];
2213
+ const collapseValue = model[column_service.PSEUDO_GROUP_ITEM_VALUE];
2214
+ const trimmed = {};
2215
+ let i = pIndex + 1;
2216
+ const total = source.length;
2217
+ while (i < total) {
2218
+ const currentModel = source[i];
2219
+ if (column_service.isGrouping(currentModel)) {
2220
+ const currentValue = currentModel[column_service.PSEUDO_GROUP_ITEM_VALUE];
2221
+ if (!currentValue.length || !currentValue.startsWith(collapseValue + ',')) {
2222
+ break;
2223
+ }
2224
+ currentModel[column_service.GROUP_EXPANDED] = false;
2225
+ }
2226
+ trimmed[i++] = true;
2227
+ }
2228
+ model[column_service.GROUP_EXPANDED] = false;
2229
+ return { trimmed };
2230
+ }
2231
+ /**
2232
+ *
2233
+ * @param pIndex - physical index
2234
+ * @param vIndex - virtual index, need to update item collection
2235
+ * @param source - data source
2236
+ * @param rowItemsIndexes - rgRow indexes
2237
+ */
2238
+ function doExpand(vIndex, source, rowItemsIndexes) {
2239
+ const physicalIndex = rowItemsIndexes[vIndex];
2240
+ const model = source[physicalIndex];
2241
+ const currentGroup = column_service.getParsedGroup(model[column_service.PSEUDO_GROUP_ITEM_ID]);
2242
+ const trimmed = {};
2243
+ // no group found
2244
+ if (!currentGroup) {
2245
+ return { trimmed };
2246
+ }
2247
+ const groupItems = [];
2248
+ model[column_service.GROUP_EXPANDED] = true;
2249
+ let i = physicalIndex + 1;
2250
+ const total = source.length;
2251
+ let groupLevelOnly = 0;
2252
+ // go through all rows
2253
+ while (i < total) {
2254
+ const currentModel = source[i];
2255
+ const isGroup = column_service.isGrouping(currentModel);
2256
+ // group found
2257
+ if (isGroup) {
2258
+ if (!column_service.isSameGroup(currentGroup, model, currentModel)) {
2259
+ break;
2260
+ }
2261
+ else if (!groupLevelOnly) {
2262
+ // if get group first it's group only level
2263
+ groupLevelOnly = currentModel[column_service.GROUP_DEPTH];
2264
+ }
2265
+ }
2266
+ // level 0 or same depth
2267
+ if (!groupLevelOnly || (isGroup && groupLevelOnly === currentModel[column_service.GROUP_DEPTH])) {
2268
+ trimmed[i] = false;
2269
+ groupItems.push(i);
2270
+ }
2271
+ i++;
2272
+ }
2273
+ const result = {
2274
+ trimmed,
2275
+ };
2276
+ if (groupItems.length) {
2277
+ const items = [...rowItemsIndexes];
2278
+ items.splice(vIndex + 1, 0, ...groupItems);
2279
+ result.items = items;
2280
+ }
2281
+ return result;
2282
+ }
2283
+
2284
+ const TRIMMED_GROUPING = 'grouping';
2285
+ /**
2286
+ * Prepare trimming updated indexes for grouping
2287
+ * @param initiallyTrimed
2288
+ * @param firstLevelMap
2289
+ * @param secondLevelMap
2290
+ */
2291
+ function processDoubleConversionTrimmed(initiallyTrimed, firstLevelMap, secondLevelMap) {
2292
+ const trimemedOptionsToUpgrade = {};
2293
+ /**
2294
+ * go through all groups except grouping
2295
+ */
2296
+ for (let type in initiallyTrimed) {
2297
+ if (type === TRIMMED_GROUPING) {
2298
+ continue;
2299
+ }
2300
+ const items = initiallyTrimed[type];
2301
+ const newItems = {};
2302
+ for (let initialIndex in items) {
2303
+ /**
2304
+ * if item exists we find it in collection
2305
+ * we support 2 level of conversions
2306
+ */
2307
+ let newConversionIndex = firstLevelMap[initialIndex];
2308
+ if (secondLevelMap) {
2309
+ newConversionIndex = secondLevelMap[newConversionIndex];
2310
+ }
2311
+ /**
2312
+ * if item was trimmed previously
2313
+ * trimming makes sense to apply
2314
+ */
2315
+ if (items[initialIndex]) {
2316
+ newItems[newConversionIndex] = true;
2317
+ /**
2318
+ * If changes present apply changes to new source
2319
+ */
2320
+ if (newConversionIndex !== parseInt(initialIndex, 10)) {
2321
+ trimemedOptionsToUpgrade[type] = newItems;
2322
+ }
2323
+ }
2324
+ }
2325
+ }
2326
+ return trimemedOptionsToUpgrade;
2327
+ }
2328
+
2329
+ class GroupingRowPlugin extends storeTypes.BasePlugin {
2330
+ get hasProps() {
2331
+ var _a, _b, _c;
2332
+ 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);
2333
+ }
2334
+ get store() {
2335
+ return this.providers.data.stores[column_service.GROUPING_ROW_TYPE].store;
2336
+ }
2337
+ // proxy for items get
2338
+ get rowItems() {
2339
+ return this.store.get('items');
2340
+ }
2341
+ get trimmed() {
2342
+ return this.store.get('trimmed');
2343
+ }
2344
+ constructor(revogrid, providers) {
2345
+ super(revogrid, providers);
2346
+ this.revogrid = revogrid;
2347
+ this.providers = providers;
2348
+ }
2349
+ // befoce cell focus
2350
+ onFocus(e) {
2351
+ if (column_service.isGrouping(e.detail.model)) {
2352
+ e.preventDefault();
2353
+ }
2354
+ }
2355
+ // expand event triggered
2356
+ onExpand({ virtualIndex }) {
2357
+ const { source } = this.getSource();
2358
+ let newTrimmed = this.trimmed[TRIMMED_GROUPING];
2359
+ let i = dimension_helpers.getPhysical(this.store, virtualIndex);
2360
+ const model = source[i];
2361
+ const prevExpanded = model[column_service.GROUP_EXPANDED];
2362
+ if (!prevExpanded) {
2363
+ const { trimmed, items } = doExpand(virtualIndex, source, this.rowItems);
2364
+ newTrimmed = Object.assign(Object.assign({}, newTrimmed), trimmed);
2365
+ if (items) {
2366
+ dimension_helpers.setItems(this.store, items);
2367
+ }
2368
+ }
2369
+ else {
2370
+ const { trimmed } = doCollapse(i, source);
2371
+ newTrimmed = Object.assign(Object.assign({}, newTrimmed), trimmed);
2372
+ this.revogrid.clearFocus();
2373
+ }
2374
+ this.store.set('source', source);
2375
+ this.revogrid.addTrimmed(newTrimmed, TRIMMED_GROUPING);
2376
+ }
2377
+ // get source based on proxy item collection to preserve rgRow order
2378
+ getSource(withoutGrouping = false) {
2379
+ const source = this.store.get('source');
2380
+ const items = this.store.get('proxyItems');
2381
+ let index = 0;
2382
+ // order important here, expected parent is first, then others
2383
+ return items.reduce((result, i) => {
2384
+ const model = source[i];
2385
+ if (!withoutGrouping) {
2386
+ result.source.push(model);
2387
+ return result;
2388
+ }
2389
+ // grouping filter
2390
+ if (!column_service.isGrouping(model)) {
2391
+ result.source.push(model);
2392
+ result.oldNewIndexes[i] = index;
2393
+ index++;
2394
+ }
2395
+ else {
2396
+ if (model[column_service.GROUP_EXPANDED]) {
2397
+ result.prevExpanded[model[column_service.PSEUDO_GROUP_ITEM_VALUE]] = true;
2398
+ }
2399
+ }
2400
+ return result;
2401
+ }, {
2402
+ source: [],
2403
+ prevExpanded: {},
2404
+ oldNewIndexes: {},
2405
+ });
2406
+ }
2407
+ setColumnGrouping(cols) {
2408
+ // if 0 column as holder
2409
+ if (cols === null || cols === void 0 ? void 0 : cols.length) {
2410
+ cols[0][column_service.PSEUDO_GROUP_COLUMN] = true;
2411
+ return true;
2412
+ }
2413
+ return false;
2414
+ }
2415
+ setColumns({ columns }) {
2416
+ for (let type of storeTypes.columnTypes) {
2417
+ if (this.setColumnGrouping(columns[type])) {
2418
+ break;
2419
+ }
2420
+ }
2421
+ }
2422
+ // evaluate drag between groups
2423
+ onDrag(e) {
2424
+ const { from, to } = e.detail;
2425
+ const isDown = to - from >= 0;
2426
+ const { source } = this.getSource();
2427
+ const items = this.rowItems;
2428
+ let i = isDown ? from : to;
2429
+ const end = isDown ? to : from;
2430
+ for (; i < end; i++) {
2431
+ const model = source[items[i]];
2432
+ const isGroup = column_service.isGrouping(model);
2433
+ if (isGroup) {
2434
+ e.preventDefault();
2435
+ return;
2436
+ }
2437
+ }
2438
+ }
2439
+ beforeTrimmedApply(trimmed, type) {
2440
+ /** Before filter apply remove grouping filtering */
2441
+ if (type === FILTER_TRIMMED_TYPE) {
2442
+ const source = this.store.get('source');
2443
+ for (let index in trimmed) {
2444
+ if (trimmed[index] && column_service.isGrouping(source[index])) {
2445
+ trimmed[index] = false;
2446
+ }
2447
+ }
2448
+ }
2449
+ }
2450
+ // subscribe to grid events to process them accordingly
2451
+ subscribe() {
2452
+ /** if grouping present and new data source arrived */
2453
+ this.addEventListener('beforesourceset', ({ detail }) => this.onDataSet(detail));
2454
+ this.addEventListener('beforecolumnsset', ({ detail }) => this.setColumns(detail));
2455
+ /**
2456
+ * filter applied need to clear grouping and apply again
2457
+ * based on new results can be new grouping
2458
+ */
2459
+ this.addEventListener('beforetrimmed', ({ detail: { trimmed, trimmedType } }) => this.beforeTrimmedApply(trimmed, trimmedType));
2460
+ /**
2461
+ * sorting applied need to clear grouping and apply again
2462
+ * based on new results whole grouping order will changed
2463
+ */
2464
+ this.addEventListener('aftersortingapply', () => this.doSourceUpdate(Object.assign({}, this.options)));
2465
+ /**
2466
+ * Apply logic for focus inside of grouping
2467
+ * We can't focus on grouping rows, navigation only inside of groups for now
2468
+ */
2469
+ this.addEventListener('beforecellfocus', e => this.onFocus(e));
2470
+ /**
2471
+ * Prevent rgRow drag outside the group
2472
+ */
2473
+ this.addEventListener('roworderchanged', e => this.onDrag(e));
2474
+ /**
2475
+ * When grouping expand icon was clicked
2476
+ */
2477
+ this.addEventListener(column_service.GROUP_EXPAND_EVENT, ({ detail }) => this.onExpand(detail));
2478
+ }
2479
+ /**
2480
+ * Starts global source update with group clearing and applying new one
2481
+ * Initiated when need to reapply grouping
2482
+ */
2483
+ doSourceUpdate(options) {
2484
+ var _a;
2485
+ if (!this.hasProps) {
2486
+ return;
2487
+ }
2488
+ /**
2489
+ * Get source without grouping
2490
+ * @param newOldIndexMap - provides us mapping with new indexes vs old indexes, we would use it for trimmed mapping
2491
+ */
2492
+ const { source, prevExpanded, oldNewIndexes } = this.getSource(true);
2493
+ /**
2494
+ * Group again
2495
+ * @param oldNewIndexMap - provides us mapping with new indexes vs old indexes
2496
+ */
2497
+ const { sourceWithGroups, depth, trimmed, oldNewIndexMap, childrenByGroup, } = column_service.gatherGrouping(source, ((_a = this.options) === null || _a === void 0 ? void 0 : _a.props) || [], Object.assign({ prevExpanded }, options));
2498
+ // setup source
2499
+ this.providers.data.setData(sourceWithGroups, column_service.GROUPING_ROW_TYPE, this.revogrid.disableVirtualY, { depth, customRenderer: options === null || options === void 0 ? void 0 : options.groupLabelTemplate }, true);
2500
+ this.updateTrimmed(trimmed, childrenByGroup, oldNewIndexes, oldNewIndexMap);
2501
+ }
2502
+ /**
2503
+ * Apply grouping on data set
2504
+ * Clear grouping from source
2505
+ * If source came from other plugin
2506
+ */
2507
+ onDataSet(data) {
2508
+ var _a;
2509
+ if (!this.hasProps || !(data === null || data === void 0 ? void 0 : data.source) || !data.source.length) {
2510
+ return;
2511
+ }
2512
+ const source = data.source.filter(s => !column_service.isGrouping(s));
2513
+ const expanded = this.revogrid.grouping || {};
2514
+ const { sourceWithGroups, depth, trimmed, oldNewIndexMap, childrenByGroup, } = column_service.gatherGrouping(source, ((_a = this.options) === null || _a === void 0 ? void 0 : _a.props) || [], Object.assign({}, (expanded || {})));
2515
+ data.source = sourceWithGroups;
2516
+ this.providers.data.setGrouping({ depth });
2517
+ this.updateTrimmed(trimmed, childrenByGroup, oldNewIndexMap);
2518
+ }
2519
+ // apply grouping
2520
+ setGrouping(options) {
2521
+ // unsubscribe from all events when group applied
2522
+ this.clearSubscriptions();
2523
+ this.options = options;
2524
+ // clear props, no grouping exists
2525
+ if (!options.props || !Object.keys(options.props).length) {
2526
+ this.clearGrouping();
2527
+ return;
2528
+ }
2529
+ // props exist and source inited
2530
+ const { source } = this.getSource();
2531
+ if (source.length) {
2532
+ this.doSourceUpdate(Object.assign({}, options));
2533
+ }
2534
+ // props exist and columns inited
2535
+ for (let t of storeTypes.columnTypes) {
2536
+ if (this.setColumnGrouping(this.providers.column.getColumns(t))) {
2537
+ this.providers.column.refreshByType(t);
2538
+ break;
2539
+ }
2540
+ }
2541
+ // if has any grouping subscribe to events again
2542
+ this.subscribe();
2543
+ }
2544
+ // clear grouping
2545
+ clearGrouping() {
2546
+ // clear columns
2547
+ storeTypes.columnTypes.forEach(t => {
2548
+ const cols = this.providers.column.getColumns(t);
2549
+ let deleted = false;
2550
+ cols.forEach(c => {
2551
+ if (column_service.isGroupingColumn(c)) {
2552
+ delete c[column_service.PSEUDO_GROUP_COLUMN];
2553
+ deleted = true;
2554
+ }
2555
+ });
2556
+ // if column store had grouping clear and refresh
2557
+ if (deleted) {
2558
+ this.providers.column.refreshByType(t);
2559
+ }
2560
+ });
2561
+ // clear rows
2562
+ const { source, oldNewIndexes } = this.getSource(true);
2563
+ this.providers.data.setData(source, column_service.GROUPING_ROW_TYPE, this.revogrid.disableVirtualY, undefined, true);
2564
+ this.updateTrimmed(undefined, undefined, oldNewIndexes);
2565
+ }
2566
+ updateTrimmed(trimmedGroup = {}, _childrenByGroup = {}, firstLevelMap, secondLevelMap) {
2567
+ // map previously trimmed data
2568
+ const trimemedOptionsToUpgrade = processDoubleConversionTrimmed(this.trimmed, firstLevelMap, secondLevelMap);
2569
+ for (let type in trimemedOptionsToUpgrade) {
2570
+ this.revogrid.addTrimmed(trimemedOptionsToUpgrade[type], type);
2571
+ }
2572
+ // const emptyGroups = this.filterOutEmptyGroups(trimemedOptionsToUpgrade, childrenByGroup);
2573
+ // setup trimmed data for grouping
2574
+ this.revogrid.addTrimmed(Object.assign({}, trimmedGroup), TRIMMED_GROUPING);
2575
+ }
2576
+ }
2577
+
2578
+ /** Collect Column data */
2579
+ function gatherColumnData(data) {
2580
+ const colDimension = data.dimensions[data.colType].store;
2581
+ const realWidth = colDimension.get('realSize');
2582
+ const prop = {
2583
+ contentWidth: realWidth,
2584
+ class: data.colType,
2585
+ contentHeight: data.contentHeight,
2586
+ key: data.colType,
2587
+ colType: data.colType,
2588
+ onResizeviewport: data.onResizeviewport,
2589
+ // set viewport size to real size
2590
+ style: data.fixWidth ? { minWidth: `${realWidth}px` } : undefined,
2591
+ };
2592
+ const headerProp = {
2593
+ colData: dimension_helpers.getVisibleSourceItem(data.colStore),
2594
+ dimensionCol: colDimension,
2595
+ type: data.colType,
2596
+ groups: data.colStore.get('groups'),
2597
+ groupingDepth: data.colStore.get('groupingDepth'),
2598
+ resizeHandler: data.colType === 'colPinEnd' ? ['l'] : undefined,
2599
+ onHeaderresize: data.onHeaderresize,
2600
+ };
2601
+ return {
2602
+ prop,
2603
+ type: data.colType,
2604
+ position: data.position,
2605
+ headerProp,
2606
+ viewportCol: data.viewports[data.colType].store,
2607
+ };
2608
+ }
2609
+ class ViewportService {
2610
+ constructor(config, contentHeight) {
2611
+ var _a, _b;
2612
+ this.config = config;
2613
+ (_a = this.config.selectionStoreConnector) === null || _a === void 0 ? void 0 : _a.beforeUpdate();
2614
+ // ----------- Handle columns ----------- //
2615
+ // Transform data from stores and apply it to different components
2616
+ const columns = [];
2617
+ let x = 0; // we increase x only if column present
2618
+ storeTypes.columnTypes.forEach(val => {
2619
+ const colStore = config.columnProvider.stores[val].store;
2620
+ // only columns that have data show
2621
+ if (!colStore.get('items').length) {
2622
+ return;
2623
+ }
2624
+ const column = {
2625
+ colType: val,
2626
+ position: { x, y: 1 },
2627
+ contentHeight,
2628
+ // only central column has dynamic width
2629
+ fixWidth: val !== 'rgCol',
2630
+ viewports: config.viewportProvider.stores,
2631
+ dimensions: config.dimensionProvider.stores,
2632
+ rowStores: config.dataProvider.stores,
2633
+ colStore,
2634
+ onHeaderresize: e => this.onColumnResize(val, e, colStore),
2635
+ };
2636
+ if (val === 'rgCol') {
2637
+ column.onResizeviewport = (e) => {
2638
+ var _a;
2639
+ if (config.disableVirtualY && e.detail.dimension === 'rgRow') {
2640
+ return;
2641
+ }
2642
+ else if (config.disableVirtualX && e.detail.dimension === 'rgCol') {
2643
+ return;
2644
+ }
2645
+ (_a = config.viewportProvider) === null || _a === void 0 ? void 0 : _a.setViewport(e.detail.dimension, {
2646
+ virtualSize: e.detail.size,
2647
+ });
2648
+ };
2649
+ }
2650
+ const colData = gatherColumnData(column);
2651
+ const columnSelectionStore = this.registerCol(colData.position.x, val);
2652
+ // render per each column data collections vertically
2653
+ const dataPorts = this.dataViewPort(column).reduce((r, rgRow) => {
2654
+ // register selection store for Segment
2655
+ const segmentSelection = this.registerSegment(rgRow.position);
2656
+ segmentSelection.setLastCell(rgRow.lastCell);
2657
+ // register selection store for Row
2658
+ const rowSelectionStore = this.registerRow(rgRow.position.y, rgRow.type);
2659
+ const rowDef = Object.assign(Object.assign({}, rgRow), { rowSelectionStore, segmentSelectionStore: segmentSelection.store, ref: (e) => config.selectionStoreConnector.registerSection(e), onSetrange: e => {
2660
+ segmentSelection.setRangeArea(e.detail);
2661
+ }, onSettemprange: e => {
2662
+ segmentSelection.setTempArea(e.detail);
2663
+ }, onFocuscell: e => {
2664
+ // todo: multi focus
2665
+ segmentSelection.clearFocus();
2666
+ config.selectionStoreConnector.focus(segmentSelection, e.detail);
2667
+ } });
2668
+ r.push(rowDef);
2669
+ return r;
2670
+ }, []);
2671
+ columns.push(Object.assign(Object.assign({}, colData), { columnSelectionStore,
2672
+ dataPorts }));
2673
+ x++;
2674
+ });
2675
+ this.columns = columns;
2676
+ // ----------- Handle columns end ----------- //
2677
+ (_b = this.config.scrollingService) === null || _b === void 0 ? void 0 : _b.unregister();
2678
+ }
2679
+ onColumnResize(type, { detail }, store) {
2680
+ var _a;
2681
+ (_a = this.config.dimensionProvider) === null || _a === void 0 ? void 0 : _a.setCustomSizes(type, detail, true);
2682
+ const changedItems = dimension_helpers.reduce_1(detail || {}, (r, size, i) => {
2683
+ const index = parseInt(i, 10);
2684
+ const item = dimension_helpers.getSourceItem(store, index);
2685
+ if (item) {
2686
+ r[index] = Object.assign(Object.assign({}, item), { size });
2687
+ }
2688
+ return r;
2689
+ }, {});
2690
+ this.config.resize(changedItems);
2691
+ }
2692
+ /** register selection store for Segment */
2693
+ registerSegment(position) {
2694
+ return this.config.selectionStoreConnector.register(position);
2695
+ }
2696
+ /** register selection store for Row */
2697
+ registerRow(y, type) {
2698
+ return this.config.selectionStoreConnector.registerRow(y, type).store;
2699
+ }
2700
+ /** register selection store for Column */
2701
+ registerCol(x, type) {
2702
+ return this.config.selectionStoreConnector.registerColumn(x, type).store;
2703
+ }
2704
+ /** Collect Row data */
2705
+ dataViewPort(data) {
2706
+ const slots = {
2707
+ rowPinStart: column_service.HEADER_SLOT,
2708
+ rgRow: column_service.CONTENT_SLOT,
2709
+ rowPinEnd: column_service.FOOTER_SLOT,
2710
+ };
2711
+ // y position for selection
2712
+ let y = 0;
2713
+ return storeTypes.rowTypes.reduce((r, type) => {
2714
+ // filter out empty sources, we still need to return source to keep slot working
2715
+ const isPresent = data.viewports[type].store.get('realCount') || type === 'rgRow';
2716
+ const rgCol = Object.assign(Object.assign({}, data), { position: Object.assign(Object.assign({}, data.position), { y: isPresent ? y : selection_store.EMPTY_INDEX }) });
2717
+ r.push(this.dataPartition(rgCol, type, slots[type], type !== 'rgRow'));
2718
+ if (isPresent) {
2719
+ y++;
2720
+ }
2721
+ return r;
2722
+ }, []);
2723
+ }
2724
+ dataPartition(data, type, slot, fixed) {
2725
+ return {
2726
+ colData: data.colStore,
2727
+ viewportCol: data.viewports[data.colType].store,
2728
+ viewportRow: data.viewports[type].store,
2729
+ lastCell: column_service.getLastCell(data, type),
2730
+ slot,
2731
+ type,
2732
+ canDrag: !fixed,
2733
+ position: data.position,
2734
+ dataStore: data.rowStores[type].store,
2735
+ dimensionCol: data.dimensions[data.colType].store,
2736
+ dimensionRow: data.dimensions[type].store,
2737
+ style: fixed
2738
+ ? { height: `${data.dimensions[type].store.get('realSize')}px` }
2739
+ : undefined,
2740
+ };
2741
+ }
2742
+ scrollToCell(cell) {
2743
+ for (let key in cell) {
2744
+ const coordinate = cell[key];
2745
+ this.config.scrollingService.proxyScroll({
2746
+ dimension: key === 'x' ? 'rgCol' : 'rgRow',
2747
+ coordinate,
2748
+ });
2749
+ }
2750
+ }
2751
+ /**
2752
+ * Clear current grid focus
2753
+ */
2754
+ clearFocused() {
2755
+ this.config.selectionStoreConnector.clearAll();
2756
+ }
2757
+ clearEdit() {
2758
+ this.config.selectionStoreConnector.setEdit(false);
2759
+ }
2760
+ /**
2761
+ * Collect focused element data
2762
+ */
2763
+ getFocused() {
2764
+ const focused = this.config.selectionStoreConnector.focusedStore;
2765
+ if (!focused) {
2766
+ return null;
2767
+ }
2768
+ // get column data
2769
+ const colType = this.config.selectionStoreConnector.storesXToType[focused.position.x];
2770
+ const column = this.config.columnProvider.getColumn(focused.cell.x, colType);
2771
+ // get row data
2772
+ const rowType = this.config.selectionStoreConnector.storesYToType[focused.position.y];
2773
+ const model = this.config.dataProvider.getModel(focused.cell.y, rowType);
2774
+ return {
2775
+ column,
2776
+ model,
2777
+ cell: focused.cell,
2778
+ colType,
2779
+ rowType,
2780
+ };
2781
+ }
2782
+ getStoreCoordinateByType(colType, rowType) {
2783
+ const stores = this.config.selectionStoreConnector.storesByType;
2784
+ const storeCoordinate = {
2785
+ x: stores[colType],
2786
+ y: stores[rowType],
2787
+ };
2788
+ return storeCoordinate;
2789
+ }
2790
+ setFocus(colType, rowType, start, end) {
2791
+ var _a;
2792
+ (_a = this.config.selectionStoreConnector) === null || _a === void 0 ? void 0 : _a.focusByCell(this.getStoreCoordinateByType(colType, rowType), start, end);
2793
+ }
2794
+ getSelectedRange() {
2795
+ return this.config.selectionStoreConnector.selectedRange;
2796
+ }
2797
+ setEdit(rowIndex, colIndex, colType, rowType) {
2798
+ var _a;
2799
+ (_a = this.config.selectionStoreConnector) === null || _a === void 0 ? void 0 : _a.setEditByCell(this.getStoreCoordinateByType(colType, rowType), { x: colIndex, y: rowIndex });
2800
+ }
2801
+ }
2802
+
2803
+ class GridScrollingService {
2804
+ constructor(setViewport) {
2805
+ this.setViewport = setViewport;
2806
+ this.elements = {};
2807
+ }
2808
+ async proxyScroll(e, key) {
2809
+ var _a;
2810
+ let newEvent;
2811
+ let event = e;
2812
+ for (let elKey in this.elements) {
2813
+ // skip
2814
+ if (e.dimension === 'rgCol' && elKey === 'headerRow') {
2815
+ continue;
2816
+ // pinned column only
2817
+ }
2818
+ else if (this.isPinnedColumn(key) && e.dimension === 'rgCol') {
2819
+ if (elKey === key || !e.delta) {
2820
+ continue;
2821
+ }
2822
+ for (let el of this.elements[elKey]) {
2823
+ if (el.changeScroll) {
2824
+ newEvent = el.changeScroll(e);
2825
+ }
2826
+ }
2827
+ }
2828
+ else {
2829
+ for (let el of this.elements[elKey]) {
2830
+ await ((_a = el.setScroll) === null || _a === void 0 ? void 0 : _a.call(el, e));
2831
+ }
2832
+ }
2833
+ }
2834
+ if (newEvent) {
2835
+ event = await newEvent;
2836
+ }
2837
+ this.setViewport(event);
2838
+ }
2839
+ /**
2840
+ * Silent scroll update for mobile devices when we have negative scroll top
2841
+ */
2842
+ async scrollSilentService(e, key) {
2843
+ var _a;
2844
+ for (let elKey in this.elements) {
2845
+ // skip same element update
2846
+ if (elKey === key) {
2847
+ continue;
2848
+ }
2849
+ if (storeTypes.columnTypes.includes(key) && (elKey === 'headerRow' || storeTypes.columnTypes.includes(elKey))) {
2850
+ for (let el of this.elements[elKey]) {
2851
+ await ((_a = el.changeScroll) === null || _a === void 0 ? void 0 : _a.call(el, e, true));
2852
+ }
2853
+ continue;
2854
+ }
2855
+ }
2856
+ }
2857
+ isPinnedColumn(key) {
2858
+ return ['colPinStart', 'colPinEnd'].indexOf(key) > -1;
2859
+ }
2860
+ registerElements(els) {
2861
+ this.elements = els;
2862
+ }
2863
+ /**
2864
+ * Register new element for farther scroll support
2865
+ * @param el - can be null if holder removed
2866
+ * @param key - element key
2867
+ */
2868
+ registerElement(el, key) {
2869
+ if (!this.elements[key]) {
2870
+ this.elements[key] = [];
2871
+ }
2872
+ // new element added
2873
+ if (el) {
2874
+ this.elements[key].push(el);
2875
+ }
2876
+ else if (this.elements[key]) {
2877
+ // element removed
2878
+ delete this.elements[key];
2879
+ }
2880
+ }
2881
+ unregister() {
2882
+ delete this.elements;
2883
+ this.elements = {};
2884
+ }
2885
+ }
2886
+
2887
+ /**
2888
+ * Draw drag
2889
+ */
2890
+ class OrdererService {
2891
+ constructor() {
2892
+ this.parentY = 0;
2893
+ }
2894
+ start(parent, { pos, text, event }) {
2895
+ var _a;
2896
+ const { top } = parent.getBoundingClientRect();
2897
+ this.parentY = top;
2898
+ if (this.text) {
2899
+ this.text.innerText = text;
2900
+ }
2901
+ this.move(pos);
2902
+ this.moveTip({ x: event.x, y: event.y });
2903
+ (_a = this.el) === null || _a === void 0 ? void 0 : _a.classList.remove('hidden');
2904
+ }
2905
+ end() {
2906
+ var _a;
2907
+ (_a = this.el) === null || _a === void 0 ? void 0 : _a.classList.add('hidden');
2908
+ }
2909
+ move(pos) {
2910
+ this.moveElement(pos.end - this.parentY);
2911
+ }
2912
+ moveTip({ x, y }) {
2913
+ if (!this.draggable) {
2914
+ return;
2915
+ }
2916
+ this.draggable.style.left = `${x}px`;
2917
+ this.draggable.style.top = `${y}px`;
2918
+ }
2919
+ moveElement(y) {
2920
+ if (!this.rgRow) {
2921
+ return;
2922
+ }
2923
+ this.rgRow.style.transform = `translateY(${y}px)`;
2924
+ }
2925
+ }
2926
+ const OrderRenderer = ({ ref }) => {
2927
+ const service = new OrdererService();
2928
+ ref(service);
2929
+ return (index$1.h("div", { class: "draggable-wrapper hidden", ref: e => (service.el = e) },
2930
+ index$1.h("div", { class: "draggable", ref: el => (service.draggable = el) },
2931
+ index$1.h("span", { class: "revo-alt-icon" }),
2932
+ index$1.h("span", { ref: e => (service.text = e) })),
2933
+ index$1.h("div", { class: "drag-position", ref: e => (service.rgRow = e) })));
2934
+ };
2935
+
2936
+ class StretchColumn extends storeTypes.BasePlugin {
2937
+ constructor(revogrid, providers) {
2938
+ super(revogrid, providers);
2939
+ this.providers = providers;
2940
+ this.stretchedColumn = null;
2941
+ // calculate scroll bar size for current user session
2942
+ this.scrollSize = index.getScrollbarSize(document);
2943
+ // subscribe to column changes
2944
+ const beforecolumnapplied = ({ detail: { columns }, }) => this.applyStretch(columns);
2945
+ this.addEventListener('beforecolumnapplied', beforecolumnapplied);
2946
+ }
2947
+ setScroll({ type, hasScroll }) {
2948
+ var _a;
2949
+ if (type === 'rgRow' &&
2950
+ this.stretchedColumn &&
2951
+ ((_a = this.stretchedColumn) === null || _a === void 0 ? void 0 : _a.initialSize) === this.stretchedColumn.size) {
2952
+ if (hasScroll) {
2953
+ this.stretchedColumn.size -= this.scrollSize;
2954
+ this.apply();
2955
+ this.dropChanges();
2956
+ }
2957
+ }
2958
+ }
2959
+ activateChanges() {
2960
+ const setScroll = ({ detail }) => this.setScroll(detail);
2961
+ this.addEventListener('scrollchange', setScroll);
2962
+ }
2963
+ dropChanges() {
2964
+ this.stretchedColumn = null;
2965
+ this.removeEventListener('scrollchange');
2966
+ }
2967
+ apply() {
2968
+ if (!this.stretchedColumn) {
2969
+ return;
2970
+ }
2971
+ const type = 'rgCol';
2972
+ const sizes = this.providers.dimension.stores[type].store.get('sizes');
2973
+ this.providers.dimension.setCustomSizes(type, Object.assign(Object.assign({}, sizes), { [this.stretchedColumn.index]: this.stretchedColumn.size }), true);
2974
+ }
2975
+ /**
2976
+ * Apply stretch changes
2977
+ */
2978
+ applyStretch(columns) {
2979
+ // unsubscribe from all events
2980
+ this.dropChanges();
2981
+ // calculate grid size
2982
+ let sizeDifference = this.revogrid.clientWidth - 1;
2983
+ dimension_helpers.each(columns, (_, type) => {
2984
+ const realSize = this.providers.dimension.stores[type].store.get('realSize');
2985
+ sizeDifference -= realSize;
2986
+ });
2987
+ if (this.revogrid.rowHeaders) {
2988
+ const itemsLength = this.providers.data.stores.rgRow.store.get('source').length;
2989
+ const header = this.revogrid.rowHeaders;
2990
+ const rowHeaderSize = events.calculateRowHeaderSize(itemsLength, typeof header === 'object' ? header : undefined);
2991
+ if (rowHeaderSize) {
2992
+ sizeDifference -= rowHeaderSize;
2993
+ }
2994
+ }
2995
+ if (sizeDifference > 0) {
2996
+ // currently plugin accepts last column only
2997
+ const index = columns.rgCol.length - 1;
2998
+ const last = columns.rgCol[index];
2999
+ /**
3000
+ * has column
3001
+ * no auto size applied
3002
+ * size for column shouldn't be defined
3003
+ */
3004
+ const colSize = (last === null || last === void 0 ? void 0 : last.size) || this.revogrid.colSize || 0;
3005
+ const size = sizeDifference + colSize - 1;
3006
+ if (last && !last.autoSize && colSize < size) {
3007
+ this.stretchedColumn = {
3008
+ initialSize: size,
3009
+ index,
3010
+ size,
3011
+ };
3012
+ this.apply();
3013
+ this.activateChanges();
3014
+ }
3015
+ }
3016
+ }
3017
+ }
3018
+ /**
3019
+ * Check plugin type is Stretch
3020
+ */
3021
+ function isStretchPlugin(plugin) {
3022
+ return !!plugin.applyStretch;
3023
+ }
3024
+
3025
+ const rowDefinitionByType = (newVal = []) => {
3026
+ return dimension_helpers.reduce_1(newVal, (r, v) => {
3027
+ if (!r[v.type]) {
3028
+ r[v.type] = {};
3029
+ }
3030
+ if (v.size) {
3031
+ if (!r[v.type].sizes) {
3032
+ r[v.type].sizes = {};
3033
+ }
3034
+ r[v.type].sizes[v.index] = v.size;
3035
+ }
3036
+ return r;
3037
+ }, {});
3038
+ };
3039
+ const rowDefinitionRemoveByType = (oldVal = []) => {
3040
+ return dimension_helpers.reduce_1(oldVal, (r, v) => {
3041
+ if (!r[v.type]) {
3042
+ r[v.type] = [];
3043
+ }
3044
+ if (v.size) {
3045
+ r[v.type].push(v.index);
3046
+ }
3047
+ return r;
3048
+ }, {});
3049
+ };
3050
+
3051
+ const COLUMN_DRAG_CLASS = 'column-drag-start';
3052
+ class ColumnOrderHandler {
3053
+ constructor() {
3054
+ this.offset = 0;
3055
+ }
3056
+ renderAutoscroll(_, parent) {
3057
+ if (!parent) {
3058
+ return;
3059
+ }
3060
+ this.autoscrollEl = document.createElement('div');
3061
+ this.autoscrollEl.classList.add('drag-auto-scroll-y');
3062
+ parent.appendChild(this.autoscrollEl);
3063
+ }
3064
+ autoscroll(pos, dataContainerSize, direction = 'translateX') {
3065
+ if (!this.autoscrollEl) {
3066
+ return;
3067
+ }
3068
+ const helperOffset = 10;
3069
+ // calculate current y position inside of the grid active holder
3070
+ // 3 - size of element + border
3071
+ const maxScroll = Math.min(pos + helperOffset, dataContainerSize - 3);
3072
+ this.autoscrollEl.style.transform = `${direction}(${maxScroll}px)`;
3073
+ this.autoscrollEl.scrollIntoView({
3074
+ block: 'nearest',
3075
+ inline: 'nearest',
3076
+ });
3077
+ }
3078
+ start(e, { dataEl, gridRect, scrollEl, gridEl }, dir = 'left') {
3079
+ gridEl.classList.add(COLUMN_DRAG_CLASS);
3080
+ const scrollContainerRect = scrollEl.getBoundingClientRect();
3081
+ if (scrollContainerRect) {
3082
+ this.offset = scrollContainerRect[dir] - gridRect[dir];
3083
+ }
3084
+ this.renderAutoscroll(e, dataEl);
3085
+ }
3086
+ stop(gridEl) {
3087
+ var _a;
3088
+ gridEl.classList.remove(COLUMN_DRAG_CLASS);
3089
+ if (this.element) {
3090
+ this.element.hidden = true;
3091
+ }
3092
+ this.offset = 0;
3093
+ (_a = this.autoscrollEl) === null || _a === void 0 ? void 0 : _a.remove();
3094
+ this.autoscrollEl = undefined;
3095
+ }
3096
+ showHandler(pos, size, direction = 'translateX') {
3097
+ if (!this.element) {
3098
+ return;
3099
+ }
3100
+ // do not allow overcross top of the scrollable area, header excluded
3101
+ if (this.offset) {
3102
+ pos = Math.max(pos, this.offset);
3103
+ }
3104
+ // can not be bigger then grid end
3105
+ pos = Math.min(pos, size);
3106
+ this.element.style.transform = `${direction}(${pos}px)`;
3107
+ this.element.hidden = false;
3108
+ }
3109
+ render() {
3110
+ const el = this.element = document.createElement('div');
3111
+ el.classList.add('drag-position-y');
3112
+ el.hidden = true;
3113
+ return el;
3114
+ }
3115
+ }
3116
+
3117
+ /**
3118
+ * Plugin for column manual move
3119
+ */
3120
+ const COLUMN_CLICK = headerCellRenderer.ON_COLUMN_CLICK;
3121
+ const MOVE = 'columndragmousemove';
3122
+ const DRAG_END = 'columndragend';
3123
+ const BEFORE_DRAG_END = 'beforecolumndragend';
3124
+ // use this event subscription to drop D&D for particular columns
3125
+ const DRAG_START = 'columndragstart';
3126
+ class ColumnPlugin extends storeTypes.BasePlugin {
3127
+ constructor(revogrid, providers) {
3128
+ super(revogrid, providers);
3129
+ this.revogrid = revogrid;
3130
+ this.providers = providers;
3131
+ this.moveFunc = debounce.debounce_1((e) => this.doMove(e), 5);
3132
+ this.staticDragData = null;
3133
+ this.dragData = null;
3134
+ this.localSubscriptions = {};
3135
+ this.orderUi = new ColumnOrderHandler();
3136
+ revogrid.appendChild(this.orderUi.render());
3137
+ revogrid.classList.add('column-draggable');
3138
+ // Register events
3139
+ this.localSubscriptions['mouseleave'] = {
3140
+ target: document,
3141
+ callback: (e) => this.onMouseOut(e),
3142
+ };
3143
+ this.localSubscriptions['mouseup'] = {
3144
+ target: document,
3145
+ callback: (e) => this.onMouseUp(e),
3146
+ };
3147
+ this.localSubscriptions['mousemove'] = {
3148
+ target: document,
3149
+ callback: (e) => this.move(e),
3150
+ };
3151
+ this.addEventListener(COLUMN_CLICK, ({ detail }) => this.dragStart(detail));
3152
+ }
3153
+ dragStart({ event, data }) {
3154
+ if (event.defaultPrevented) {
3155
+ return;
3156
+ }
3157
+ const { defaultPrevented } = dispatcher.dispatch(this.revogrid, DRAG_START, data);
3158
+ // check if allowed to drag particulat column
3159
+ if (defaultPrevented) {
3160
+ return;
3161
+ }
3162
+ this.clearOrder();
3163
+ const { mouseleave, mouseup, mousemove } = this.localSubscriptions;
3164
+ mouseleave.target.addEventListener('mouseleave', mouseleave.callback);
3165
+ mouseup.target.addEventListener('mouseup', mouseup.callback);
3166
+ const dataEl = event.target.closest('revogr-header');
3167
+ const scrollEl = event.target.closest('revogr-viewport-scroll');
3168
+ if (!dataEl || !scrollEl) {
3169
+ return;
3170
+ }
3171
+ // no grouping drag and no row header column drag
3172
+ if (isColGrouping(data) || data.providers.type === 'rowHeaders') {
3173
+ return;
3174
+ }
3175
+ const cols = this.getDimension(data.pin || 'rgCol');
3176
+ const gridRect = this.revogrid.getBoundingClientRect();
3177
+ const elRect = dataEl.getBoundingClientRect();
3178
+ const startItem = dimension_helpers.getItemByPosition(cols, getLeftRelative(event.x, gridRect.left, elRect.left - gridRect.left));
3179
+ this.staticDragData = {
3180
+ startPos: event.x,
3181
+ startItem,
3182
+ data,
3183
+ dataEl,
3184
+ scrollEl,
3185
+ gridEl: this.revogrid,
3186
+ cols,
3187
+ };
3188
+ this.dragData = this.getData(this.staticDragData);
3189
+ mousemove.target.addEventListener('mousemove', mousemove.callback);
3190
+ this.orderUi.start(event, Object.assign(Object.assign({}, this.dragData), this.staticDragData));
3191
+ }
3192
+ doMove(e) {
3193
+ if (!this.staticDragData) {
3194
+ return;
3195
+ }
3196
+ const dragData = (this.dragData = this.getData(this.staticDragData));
3197
+ if (!dragData) {
3198
+ return;
3199
+ }
3200
+ const start = this.staticDragData.startPos;
3201
+ if (Math.abs(start - e.x) > 10) {
3202
+ const x = getLeftRelative(e.x, this.dragData.gridRect.left, this.dragData.scrollOffset);
3203
+ const rgCol = dimension_helpers.getItemByPosition(this.staticDragData.cols, x);
3204
+ this.orderUi.autoscroll(x, dragData.elRect.width);
3205
+ this.orderUi.showHandler(rgCol.end + dragData.scrollOffset, dragData.gridRect.width);
3206
+ }
3207
+ }
3208
+ move(e) {
3209
+ dispatcher.dispatch(this.revogrid, MOVE, e);
3210
+ // then do move
3211
+ this.moveFunc(e);
3212
+ }
3213
+ onMouseOut(_) {
3214
+ this.clearOrder();
3215
+ }
3216
+ onMouseUp(e) {
3217
+ // apply new positions
3218
+ if (this.dragData) {
3219
+ let relativePos = getLeftRelative(e.x, this.dragData.gridRect.left, this.dragData.scrollOffset);
3220
+ if (relativePos < 0) {
3221
+ relativePos = 0;
3222
+ }
3223
+ const newPosition = dimension_helpers.getItemByPosition(this.staticDragData.cols, relativePos);
3224
+ const store = this.providers.column.stores[this.dragData.type].store;
3225
+ const items = [...store.get('items')];
3226
+ // prevent position change if needed
3227
+ const { defaultPrevented: stopDrag } = dispatcher.dispatch(this.revogrid, BEFORE_DRAG_END, Object.assign(Object.assign({}, this.staticDragData), { startPosition: this.staticDragData.startItem, newPosition, newItem: store.get('source')[items[this.staticDragData.startItem.itemIndex]] }));
3228
+ if (!stopDrag) {
3229
+ // todo: if move item out of group remove item from group
3230
+ const toMove = items.splice(this.staticDragData.startItem.itemIndex, 1);
3231
+ items.splice(newPosition.itemIndex, 0, ...toMove);
3232
+ store.set('items', items);
3233
+ }
3234
+ dispatcher.dispatch(this.revogrid, DRAG_END, this.dragData);
3235
+ }
3236
+ this.clearOrder();
3237
+ }
3238
+ clearLocalSubscriptions() {
3239
+ dimension_helpers.each(this.localSubscriptions, ({ target, callback }, key) => target.removeEventListener(key, callback));
3240
+ }
3241
+ clearOrder() {
3242
+ this.staticDragData = null;
3243
+ this.dragData = null;
3244
+ this.clearLocalSubscriptions();
3245
+ this.orderUi.stop(this.revogrid);
3246
+ }
3247
+ /**
3248
+ * Clearing subscription
3249
+ */
3250
+ clearSubscriptions() {
3251
+ super.clearSubscriptions();
3252
+ this.clearLocalSubscriptions();
3253
+ }
3254
+ getData({ gridEl, dataEl, data, }) {
3255
+ const gridRect = gridEl.getBoundingClientRect();
3256
+ const elRect = dataEl.getBoundingClientRect();
3257
+ const scrollOffset = elRect.left - gridRect.left;
3258
+ return {
3259
+ elRect,
3260
+ gridRect,
3261
+ type: data.pin || 'rgCol',
3262
+ scrollOffset,
3263
+ };
3264
+ }
3265
+ getDimension(type) {
3266
+ return this.providers.dimension.stores[type].getCurrentState();
3267
+ }
3268
+ }
3269
+ function getLeftRelative(absoluteX, gridPos, offset) {
3270
+ return absoluteX - gridPos - offset;
3271
+ }
3272
+
3273
+ function isMobileDevice() {
3274
+ return /Mobi/i.test(navigator.userAgent) || /Android/i.test(navigator.userAgent) || navigator.maxTouchPoints > 0;
3275
+ }
3276
+
3277
+ const revoGridStyleCss = ".revo-drag-icon{width:11px}.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:34px;line-height:34px;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:32px;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-header,revo-grid:not([theme]) .rowHeaders 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;box-shadow:0 -1px 0 0 #e2e3e3 inset, -1px 0 0 0 #e2e3e3 inset}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] .viewports{width:100%}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=material] revogr-data .revo-draggable>.revo-drag-icon{background-color:#d4d4d4}revo-grid[theme=material] revogr-data .revo-draggable:hover>.revo-drag-icon{background-color:black}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] .viewports{width:100%}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-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-data .revo-draggable>.revo-drag-icon{background-color:rgba(216, 216, 216, 0.5)}revo-grid[theme=darkMaterial] revogr-data .revo-draggable:hover>.revo-drag-icon{background-color:rgba(216, 216, 216, 0.7)}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] .viewports{width:100%}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-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-data .revo-draggable>.revo-drag-icon{background-color:rgba(216, 216, 216, 0.5)}revo-grid[theme=darkCompact] revogr-data .revo-draggable:hover>.revo-drag-icon{background-color:rgba(216, 216, 216, 0.7)}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] .viewports{width:100%}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] revogr-data .revo-draggable>.revo-drag-icon{background-color:#d4d4d4}revo-grid[theme=compact] revogr-data .revo-draggable:hover>.revo-drag-icon{background-color:black}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:6px solid #0049cf;border-top:6px solid #0049cf;border-bottom:6px solid transparent;border-right:6px 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:6px;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-height:100%;display:flex;flex-direction:row;align-items:flex-start;max-width:100%}revo-grid .main-viewport{flex-grow:1;height:0;display:flex;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}";
3278
+ const RevoGridStyle0 = revoGridStyleCss;
3279
+
3280
+ const RevoGridComponent = class {
3281
+ constructor(hostRef) {
3282
+ index$1.registerInstance(this, hostRef);
3283
+ this.contentsizechanged = index$1.createEvent(this, "contentsizechanged", 7);
3284
+ this.beforeedit = index$1.createEvent(this, "beforeedit", 7);
3285
+ this.beforerangeedit = index$1.createEvent(this, "beforerangeedit", 7);
3286
+ this.afteredit = index$1.createEvent(this, "afteredit", 7);
3287
+ this.beforeautofill = index$1.createEvent(this, "beforeautofill", 7);
3288
+ this.beforeange = index$1.createEvent(this, "beforeange", 7);
3289
+ this.afterfocus = index$1.createEvent(this, "afterfocus", 7);
3290
+ this.roworderchanged = index$1.createEvent(this, "roworderchanged", 7);
3291
+ this.beforesortingapply = index$1.createEvent(this, "beforesortingapply", 7);
3292
+ this.beforesorting = index$1.createEvent(this, "beforesorting", 7);
3293
+ this.rowdragstart = index$1.createEvent(this, "rowdragstart", 7);
3294
+ this.headerclick = index$1.createEvent(this, "headerclick", 7);
3295
+ this.beforecellfocus = index$1.createEvent(this, "beforecellfocus", 7);
3296
+ this.beforefocuslost = index$1.createEvent(this, "beforefocuslost", 7);
3297
+ this.beforesourceset = index$1.createEvent(this, "beforesourceset", 7);
3298
+ this.beforeanysource = index$1.createEvent(this, "beforeanysource", 7);
3299
+ this.aftersourceset = index$1.createEvent(this, "aftersourceset", 7);
3300
+ this.afteranysource = index$1.createEvent(this, "afteranysource", 7);
3301
+ this.beforecolumnsset = index$1.createEvent(this, "beforecolumnsset", 7);
3302
+ this.beforecolumnapplied = index$1.createEvent(this, "beforecolumnapplied", 7);
3303
+ this.aftercolumnsset = index$1.createEvent(this, "aftercolumnsset", 7);
3304
+ this.beforefilterapply = index$1.createEvent(this, "beforefilterapply", 7);
3305
+ this.beforefiltertrimmed = index$1.createEvent(this, "beforefiltertrimmed", 7);
3306
+ this.beforetrimmed = index$1.createEvent(this, "beforetrimmed", 7);
3307
+ this.aftertrimmed = index$1.createEvent(this, "aftertrimmed", 7);
3308
+ this.viewportscroll = index$1.createEvent(this, "viewportscroll", 7);
3309
+ this.beforeexport = index$1.createEvent(this, "beforeexport", 7);
3310
+ this.beforeeditstart = index$1.createEvent(this, "beforeeditstart", 7);
3311
+ this.aftercolumnresize = index$1.createEvent(this, "aftercolumnresize", 7);
3312
+ this.beforerowdefinition = index$1.createEvent(this, "beforerowdefinition", 7);
3313
+ this.filterconfigchanged = index$1.createEvent(this, "filterconfigchanged", 7);
3314
+ this.rowheaderschanged = index$1.createEvent(this, "rowheaderschanged", 7);
3315
+ this.beforegridrender = index$1.createEvent(this, "beforegridrender", 7);
3316
+ this.aftergridinit = index$1.createEvent(this, "aftergridinit", 7);
3317
+ // #endregion
3318
+ // #region Listeners outside scope
3319
+ this.clickTrackForFocusClear = null;
3320
+ this.extraElements = [];
3321
+ // UUID required to support multiple grids in one page and avoid collision
3322
+ this.uuid = null;
3323
+ this.viewport = null;
3324
+ /**
3325
+ * Plugins
3326
+ * Define plugins collection
3327
+ */
3328
+ this.internalPlugins = [];
3329
+ this.rowHeaders = undefined;
3330
+ this.frameSize = 1;
3331
+ this.rowSize = 0;
3332
+ this.colSize = 100;
3333
+ this.range = false;
3334
+ this.readonly = false;
3335
+ this.resize = false;
3336
+ this.canFocus = true;
3337
+ this.useClipboard = true;
3338
+ this.columns = [];
3339
+ this.source = [];
3340
+ this.pinnedTopSource = [];
3341
+ this.pinnedBottomSource = [];
3342
+ this.rowDefinitions = [];
3343
+ this.editors = {};
3344
+ this.applyOnClose = false;
3345
+ this.plugins = undefined;
3346
+ this.columnTypes = {};
3347
+ this.theme = 'default';
3348
+ this.rowClass = '';
3349
+ this.autoSizeColumn = false;
3350
+ this.filter = false;
3351
+ this.focusTemplate = undefined;
3352
+ this.canMoveColumns = false;
3353
+ this.trimmedRows = {};
3354
+ this.exporting = false;
3355
+ this.grouping = undefined;
3356
+ this.stretch = true;
3357
+ this.additionalData = {};
3358
+ this.disableVirtualX = false;
3359
+ this.disableVirtualY = false;
3360
+ this.hideAttribution = false;
3361
+ this.jobsBeforeRender = [];
3362
+ this.registerVNode = [];
3363
+ }
3364
+ // #endregion
3365
+ // #region Methods
3366
+ /**
3367
+ * Refreshes data viewport.
3368
+ * Can be specific part as rgRow or pinned rgRow or 'all' by default.
3369
+ */
3370
+ async refresh(type = 'all') {
3371
+ this.dataProvider.refresh(type);
3372
+ }
3373
+ /**
3374
+ * Sets data at specified cell.
3375
+ * Useful for performance optimization.
3376
+ * No viewport update will be triggered.
3377
+ */
3378
+ async setDataAt(data) {
3379
+ const dataElement = this.element.querySelector(`revogr-data[type="${data.rowType}"][col-type="${data.colType}"]`);
3380
+ return dataElement === null || dataElement === void 0 ? void 0 : dataElement.updateCell({
3381
+ row: data.row,
3382
+ col: data.col,
3383
+ });
3384
+ }
3385
+ /**
3386
+ * Scrolls viewport to specified row by index.
3387
+ */
3388
+ async scrollToRow(coordinate = 0) {
3389
+ const y = this.dimensionProvider.getViewPortPos({
3390
+ coordinate,
3391
+ dimension: 'rgRow',
3392
+ });
3393
+ await this.scrollToCoordinate({ y });
3394
+ }
3395
+ /**
3396
+ * Scrolls viewport to specified column by index.
3397
+ */
3398
+ async scrollToColumnIndex(coordinate = 0) {
3399
+ const x = this.dimensionProvider.getViewPortPos({
3400
+ coordinate,
3401
+ dimension: 'rgCol',
3402
+ });
3403
+ await this.scrollToCoordinate({ x });
3404
+ }
3405
+ /**
3406
+ * Scrolls viewport to specified column by prop
3407
+ */
3408
+ async scrollToColumnProp(prop, dimension = 'rgCol') {
3409
+ const coordinate = this.columnProvider.getColumnIndexByProp(prop, dimension);
3410
+ if (coordinate < 0) {
3411
+ // already on the screen
3412
+ return;
3413
+ }
3414
+ const x = this.dimensionProvider.getViewPortPos({
3415
+ coordinate,
3416
+ dimension,
3417
+ });
3418
+ await this.scrollToCoordinate({ x });
3419
+ }
3420
+ /** Update columns */
3421
+ async updateColumns(cols) {
3422
+ this.columnProvider.updateColumns(cols);
3423
+ }
3424
+ /** Add trimmed by type */
3425
+ async addTrimmed(trimmed, trimmedType = 'external', type = 'rgRow') {
3426
+ const event = this.beforetrimmed.emit({
3427
+ trimmed,
3428
+ trimmedType,
3429
+ type,
3430
+ });
3431
+ if (event.defaultPrevented) {
3432
+ return event;
3433
+ }
3434
+ this.dataProvider.setTrimmed({ [trimmedType]: event.detail.trimmed }, type);
3435
+ this.aftertrimmed.emit();
3436
+ return event;
3437
+ }
3438
+ /** Scrolls view port to coordinate */
3439
+ async scrollToCoordinate(cell) {
3440
+ var _a;
3441
+ (_a = this.viewport) === null || _a === void 0 ? void 0 : _a.scrollToCell(cell);
3442
+ }
3443
+ /** Open editor for cell. */
3444
+ async setCellEdit(rgRow, prop, rowSource = 'rgRow') {
3445
+ var _a;
3446
+ const rgCol = ColumnDataProvider.getColumnByProp(this.columns, prop);
3447
+ if (!rgCol) {
3448
+ return;
3449
+ }
3450
+ await index.timeout();
3451
+ const colGroup = rgCol.pin || 'rgCol';
3452
+ (_a = this.viewport) === null || _a === void 0 ? void 0 : _a.setEdit(rgRow, this.columnProvider.getColumnIndexByProp(prop, colGroup), colGroup, rowSource);
3453
+ }
3454
+ /** Set focus range. */
3455
+ async setCellsFocus(cellStart = { x: 0, y: 0 }, cellEnd = { x: 0, y: 0 }, colType = 'rgCol', rowType = 'rgRow') {
3456
+ var _a;
3457
+ (_a = this.viewport) === null || _a === void 0 ? void 0 : _a.setFocus(colType, rowType, cellStart, cellEnd);
3458
+ }
3459
+ /** Get data from source */
3460
+ async getSource(type = 'rgRow') {
3461
+ return this.dataProvider.stores[type].store.get('source');
3462
+ }
3463
+ /**
3464
+ * Get data from visible part of source
3465
+ * Trimmed/filtered rows will be excluded
3466
+ * @param type - type of source
3467
+ */
3468
+ async getVisibleSource(type = 'rgRow') {
3469
+ return dimension_helpers.getVisibleSourceItem(this.dataProvider.stores[type].store);
3470
+ }
3471
+ /**
3472
+ * Provides access to rows internal store observer
3473
+ * Can be used for plugin support
3474
+ * @param type - type of source
3475
+ */
3476
+ async getSourceStore(type = 'rgRow') {
3477
+ return this.dataProvider.stores[type].store;
3478
+ }
3479
+ /**
3480
+ * Provides access to column internal store observer
3481
+ * Can be used for plugin support
3482
+ * @param type - type of column
3483
+ */
3484
+ async getColumnStore(type = 'rgCol') {
3485
+ return this.columnProvider.stores[type].store;
3486
+ }
3487
+ /**
3488
+ * Update column sorting
3489
+ * @param column - full column details to update
3490
+ * @param index - virtual column index
3491
+ * @param order - order to apply
3492
+ */
3493
+ async updateColumnSorting(column, index, order, additive) {
3494
+ return this.columnProvider.updateColumnSorting(column, index, order, additive);
3495
+ }
3496
+ /**
3497
+ * Clears column sorting
3498
+ */
3499
+ async clearSorting() {
3500
+ this.columnProvider.clearSorting();
3501
+ }
3502
+ /**
3503
+ * Receive all columns in data source
3504
+ */
3505
+ async getColumns() {
3506
+ return this.columnProvider.getColumns();
3507
+ }
3508
+ /**
3509
+ * Clear current grid focus. Grid has no longer focus on it.
3510
+ */
3511
+ async clearFocus() {
3512
+ var _a;
3513
+ const focused = (_a = this.viewport) === null || _a === void 0 ? void 0 : _a.getFocused();
3514
+ const event = this.beforefocuslost.emit(focused);
3515
+ if (event.defaultPrevented) {
3516
+ return;
3517
+ }
3518
+ this.selectionStoreConnector.clearAll();
3519
+ }
3520
+ /**
3521
+ * Get all active plugins instances
3522
+ */
3523
+ async getPlugins() {
3524
+ return [...this.internalPlugins];
3525
+ }
3526
+ /**
3527
+ * Get the currently focused cell.
3528
+ */
3529
+ async getFocused() {
3530
+ var _a;
3531
+ return (_a = this.viewport) === null || _a === void 0 ? void 0 : _a.getFocused();
3532
+ }
3533
+ /**
3534
+ * Get size of content
3535
+ * Including all pinned data
3536
+ */
3537
+ async getContentSize() {
3538
+ var _a;
3539
+ return (_a = this.dimensionProvider) === null || _a === void 0 ? void 0 : _a.getFullSize();
3540
+ }
3541
+ /**
3542
+ * Get the currently selected Range.
3543
+ */
3544
+ async getSelectedRange() {
3545
+ var _a;
3546
+ return (_a = this.viewport) === null || _a === void 0 ? void 0 : _a.getSelectedRange();
3547
+ }
3548
+ mousedownHandle(event) {
3549
+ const screenX = events.getFromEvent(event, 'screenX');
3550
+ const screenY = events.getFromEvent(event, 'screenY');
3551
+ if (screenX === null || screenY === null) {
3552
+ return;
3553
+ }
3554
+ this.clickTrackForFocusClear = screenX + screenY;
3555
+ }
3556
+ mouseupHandle(event) {
3557
+ const screenX = events.getFromEvent(event, 'screenX');
3558
+ const screenY = events.getFromEvent(event, 'screenY');
3559
+ if (screenX === null || screenY === null) {
3560
+ return;
3561
+ }
3562
+ if (event.defaultPrevented) {
3563
+ return;
3564
+ }
3565
+ const target = event.target;
3566
+ const pos = screenX + screenY;
3567
+ // detect if mousemove then do nothing
3568
+ if (Math.abs(this.clickTrackForFocusClear - pos) > 10) {
3569
+ return;
3570
+ }
3571
+ // check if action finished inside of the document
3572
+ // clear data which is outside of grid
3573
+ // if event prevented or it is current table don't clear focus
3574
+ if (target === null || target === void 0 ? void 0 : target.closest(`[${index.UUID}="${this.uuid}"]`)) {
3575
+ return;
3576
+ }
3577
+ this.clearFocus();
3578
+ }
3579
+ // #endregion
3580
+ // #region Listeners
3581
+ /** Drag events */
3582
+ onRowDragStarted(e) {
3583
+ var _a;
3584
+ const dragStart = this.rowdragstart.emit(e.detail);
3585
+ if (dragStart.defaultPrevented) {
3586
+ e.preventDefault();
3587
+ return;
3588
+ }
3589
+ (_a = this.orderService) === null || _a === void 0 ? void 0 : _a.start(this.element, Object.assign(Object.assign({}, e.detail), dragStart.detail));
3590
+ }
3591
+ onRowDragEnd() {
3592
+ var _a;
3593
+ (_a = this.orderService) === null || _a === void 0 ? void 0 : _a.end();
3594
+ }
3595
+ onRowDrag({ detail }) {
3596
+ var _a;
3597
+ (_a = this.orderService) === null || _a === void 0 ? void 0 : _a.move(detail);
3598
+ }
3599
+ onRowMouseMove(e) {
3600
+ var _a;
3601
+ (_a = this.orderService) === null || _a === void 0 ? void 0 : _a.moveTip(e.detail);
3602
+ }
3603
+ async onCellEdit(e) {
3604
+ const { defaultPrevented, detail } = this.beforeedit.emit(e.detail);
3605
+ await index.timeout();
3606
+ // apply data
3607
+ if (!defaultPrevented) {
3608
+ this.dataProvider.setCellData(detail);
3609
+ // @feature: incrimental update for cells
3610
+ // this.dataProvider.setCellData(detail, false);
3611
+ // await this.setDataAt({
3612
+ // row: detail.rowIndex,
3613
+ // col: detail.colIndex,
3614
+ // rowType: detail.type,
3615
+ // colType: detail.colType,
3616
+ // });
3617
+ this.afteredit.emit(detail);
3618
+ }
3619
+ }
3620
+ onRangeEdit(e) {
3621
+ const { defaultPrevented, detail } = this.beforerangeedit.emit(e.detail);
3622
+ if (defaultPrevented) {
3623
+ e.preventDefault();
3624
+ return;
3625
+ }
3626
+ this.dataProvider.setRangeData(detail.data, detail.type);
3627
+ this.afteredit.emit(detail);
3628
+ }
3629
+ onRangeChanged(e) {
3630
+ const beforeange = this.beforeange.emit(e.detail);
3631
+ if (beforeange.defaultPrevented) {
3632
+ e.preventDefault();
3633
+ }
3634
+ const beforeFill = this.beforeautofill.emit(beforeange.detail);
3635
+ if (beforeFill.defaultPrevented) {
3636
+ e.preventDefault();
3637
+ }
3638
+ }
3639
+ onRowDropped(e) {
3640
+ // e.cancelBubble = true;
3641
+ const { defaultPrevented } = this.roworderchanged.emit(e.detail);
3642
+ if (defaultPrevented) {
3643
+ e.preventDefault();
3644
+ }
3645
+ }
3646
+ onHeaderClick(e) {
3647
+ const { defaultPrevented } = this.headerclick.emit(Object.assign(Object.assign({}, e.detail.column), { originalEvent: e.detail.originalEvent }));
3648
+ if (defaultPrevented) {
3649
+ e.preventDefault();
3650
+ }
3651
+ }
3652
+ onCellFocus(e) {
3653
+ const { defaultPrevented } = this.beforecellfocus.emit(e.detail);
3654
+ if (!this.canFocus || defaultPrevented) {
3655
+ e.preventDefault();
3656
+ }
3657
+ }
3658
+ // #endregion
3659
+ // #region Watchers
3660
+ columnTypesChanged() {
3661
+ // Column format change will trigger column structure update
3662
+ this.columnChanged(this.columns);
3663
+ }
3664
+ columnChanged(newVal = []) {
3665
+ const columnGather = ColumnDataProvider.getColumns(newVal, 0, this.columnTypes);
3666
+ this.beforecolumnsset.emit(columnGather);
3667
+ this.dimensionProvider.applyNewColumns(columnGather.columns, this.disableVirtualX);
3668
+ this.beforecolumnapplied.emit(columnGather);
3669
+ const columns = this.columnProvider.setColumns(columnGather);
3670
+ this.aftercolumnsset.emit({
3671
+ columns,
3672
+ order: this.columnProvider.order,
3673
+ });
3674
+ }
3675
+ disableVirtualXChanged(newVal = false, prevVal = false) {
3676
+ if (newVal === prevVal) {
3677
+ return;
3678
+ }
3679
+ this.columnChanged(this.columns);
3680
+ }
3681
+ rowSizeChanged(s) {
3682
+ // clear existing data
3683
+ this.dimensionProvider.setSettings({ originItemSize: s }, 'rgRow');
3684
+ this.rowDefChanged(this.rowDefinitions, this.rowDefinitions);
3685
+ }
3686
+ themeChanged(t, _, __ = 'theme', init = false) {
3687
+ this.themeService.register(t);
3688
+ this.dimensionProvider.setSettings({ originItemSize: this.themeService.rowSize }, 'rgRow');
3689
+ this.dimensionProvider.setSettings({ originItemSize: this.colSize }, 'rgCol');
3690
+ // if theme change we need to reapply row size and reset viewport
3691
+ if (!init) {
3692
+ this.rowSizeChanged(this.themeService.rowSize);
3693
+ }
3694
+ }
3695
+ dataSourceChanged(newVal = [], _, watchName) {
3696
+ let type = 'rgRow';
3697
+ switch (watchName) {
3698
+ case 'pinnedBottomSource':
3699
+ type = 'rowPinEnd';
3700
+ break;
3701
+ case 'pinnedTopSource':
3702
+ type = 'rowPinStart';
3703
+ break;
3704
+ case 'source':
3705
+ type = 'rgRow';
3706
+ /** applied for source only for cross compatability between plugins */
3707
+ const beforesourceset = this.beforesourceset.emit({
3708
+ type,
3709
+ source: newVal,
3710
+ });
3711
+ newVal = beforesourceset.detail.source;
3712
+ break;
3713
+ }
3714
+ const beforesourceset = this.beforeanysource.emit({
3715
+ type,
3716
+ source: newVal,
3717
+ });
3718
+ const newSource = [...beforesourceset.detail.source];
3719
+ this.dataProvider.setData(newSource, type, this.disableVirtualY);
3720
+ /** applied for source only for cross compatability between plugins */
3721
+ if (watchName === 'source') {
3722
+ this.aftersourceset.emit({
3723
+ type,
3724
+ source: newVal,
3725
+ });
3726
+ }
3727
+ this.afteranysource.emit({
3728
+ type,
3729
+ source: newVal,
3730
+ });
3731
+ }
3732
+ disableVirtualYChanged(newVal = false, prevVal = false) {
3733
+ if (newVal === prevVal) {
3734
+ return;
3735
+ }
3736
+ this.dataSourceChanged(this.source, this.source, 'source');
3737
+ }
3738
+ rowDefChanged(after, before) {
3739
+ const { detail: { vals: newVal, oldVals: oldVal }, } = this.beforerowdefinition.emit({
3740
+ vals: after,
3741
+ oldVals: before,
3742
+ });
3743
+ // apply new vals
3744
+ const newRows = rowDefinitionByType(newVal);
3745
+ // clear current defs
3746
+ if (oldVal) {
3747
+ const remove = rowDefinitionRemoveByType(oldVal);
3748
+ // clear all old data and drop sizes
3749
+ dimension_helpers.each(remove, (_, t) => {
3750
+ this.dimensionProvider.clearSize(t, this.dataProvider.stores[t].store.get('source').length);
3751
+ });
3752
+ }
3753
+ if (!newVal.length) {
3754
+ return;
3755
+ }
3756
+ dimension_helpers.each(newRows, (r, k) => this.dimensionProvider.setCustomSizes(k, r.sizes || {}));
3757
+ }
3758
+ trimmedRowsChanged(newVal = {}) {
3759
+ this.addTrimmed(newVal);
3760
+ }
3761
+ /**
3762
+ * Grouping
3763
+ */
3764
+ groupingChanged(newVal = {}) {
3765
+ let grPlugin;
3766
+ for (let p of this.internalPlugins) {
3767
+ const isGrouping = p;
3768
+ if (isGrouping.setGrouping) {
3769
+ grPlugin = isGrouping;
3770
+ break;
3771
+ }
3772
+ }
3773
+ if (!grPlugin) {
3774
+ return;
3775
+ }
3776
+ grPlugin.setGrouping(newVal || {});
3777
+ }
3778
+ /**
3779
+ * Stretch Plugin Apply
3780
+ */
3781
+ applyStretch(isStretch) {
3782
+ if (isStretch === 'false') {
3783
+ isStretch = false;
3784
+ }
3785
+ let stretch = this.internalPlugins.filter(p => isStretchPlugin(p))[0];
3786
+ if ((typeof isStretch === 'boolean' && isStretch) || isStretch === 'true') {
3787
+ if (!stretch) {
3788
+ const pluginData = {
3789
+ data: this.dataProvider,
3790
+ column: this.columnProvider,
3791
+ dimension: this.dimensionProvider,
3792
+ viewport: this.viewportProvider,
3793
+ selection: this.selectionStoreConnector,
3794
+ };
3795
+ this.internalPlugins.push(new StretchColumn(this.element, pluginData));
3796
+ }
3797
+ else if (isStretchPlugin(stretch)) {
3798
+ stretch.applyStretch(this.columnProvider.getRawColumns());
3799
+ }
3800
+ }
3801
+ else if (stretch) {
3802
+ const index = this.internalPlugins.indexOf(stretch);
3803
+ this.internalPlugins.splice(index, 1);
3804
+ }
3805
+ }
3806
+ applyFilter(cfg) {
3807
+ this.filterconfigchanged.emit(cfg);
3808
+ }
3809
+ rowHeadersChange(rowHeaders) {
3810
+ this.rowheaderschanged.emit(rowHeaders);
3811
+ }
3812
+ /**
3813
+ * Register external VNodes
3814
+ */
3815
+ registerOutsideVNodes(elements = []) {
3816
+ this.extraElements = [...this.extraElements, ...elements];
3817
+ }
3818
+ // #endregion
3819
+ componentWillRender() {
3820
+ const event = this.beforegridrender.emit();
3821
+ if (event.defaultPrevented) {
3822
+ return false;
3823
+ }
3824
+ return Promise.all(this.jobsBeforeRender);
3825
+ }
3826
+ connectedCallback() {
3827
+ // #region Setup Providers
3828
+ this.viewportProvider = new ViewportProvider();
3829
+ this.themeService = new ThemeService({
3830
+ rowSize: this.rowSize,
3831
+ });
3832
+ this.dimensionProvider = new DimensionProvider(this.viewportProvider, {
3833
+ realSizeChanged: (k) => this.contentsizechanged.emit(k),
3834
+ });
3835
+ this.columnProvider = new ColumnDataProvider();
3836
+ this.selectionStoreConnector = new selection_store.SelectionStoreConnector();
3837
+ this.dataProvider = new DataProvider(this.dimensionProvider);
3838
+ // #endregion
3839
+ // generate uuid for this grid
3840
+ this.uuid = `${new Date().getTime()}-rvgrid`;
3841
+ this.registerOutsideVNodes(this.registerVNode);
3842
+ // #region Plugins
3843
+ // pass data provider to plugins
3844
+ const pluginData = {
3845
+ data: this.dataProvider,
3846
+ column: this.columnProvider,
3847
+ dimension: this.dimensionProvider,
3848
+ viewport: this.viewportProvider,
3849
+ selection: this.selectionStoreConnector,
3850
+ };
3851
+ // register auto size plugin
3852
+ if (this.autoSizeColumn) {
3853
+ this.internalPlugins.push(new AutoSizeColumnPlugin(this.element, pluginData, typeof this.autoSizeColumn === 'object'
3854
+ ? this.autoSizeColumn
3855
+ : undefined));
3856
+ }
3857
+ // register filter plugin
3858
+ if (this.filter) {
3859
+ this.internalPlugins.push(new FilterPlugin(this.element, pluginData, this.uuid, typeof this.filter === 'object' ? this.filter : undefined));
3860
+ }
3861
+ // register export plugin
3862
+ if (this.exporting) {
3863
+ this.internalPlugins.push(new ExportFilePlugin(this.element, pluginData));
3864
+ }
3865
+ // register sorting plugin
3866
+ this.internalPlugins.push(new SortingPlugin(this.element, pluginData));
3867
+ // register grouping plugin
3868
+ this.internalPlugins.push(new GroupingRowPlugin(this.element, pluginData));
3869
+ if (this.canMoveColumns) {
3870
+ this.internalPlugins.push(new ColumnPlugin(this.element, pluginData));
3871
+ }
3872
+ // register user plugins
3873
+ if (this.plugins) {
3874
+ this.plugins.forEach(p => {
3875
+ this.internalPlugins.push(new p(this.element, pluginData));
3876
+ });
3877
+ }
3878
+ // #endregion
3879
+ // set data
3880
+ this.applyStretch(this.stretch);
3881
+ this.themeChanged(this.theme, undefined, undefined, true);
3882
+ this.columnChanged(this.columns);
3883
+ this.dataSourceChanged(this.source, undefined, 'source');
3884
+ this.dataSourceChanged(this.pinnedTopSource, undefined, 'pinnedTopSource');
3885
+ this.dataSourceChanged(this.pinnedBottomSource, undefined, 'pinnedBottomSource');
3886
+ this.trimmedRowsChanged(this.trimmedRows);
3887
+ this.rowDefChanged(this.rowDefinitions);
3888
+ this.groupingChanged(this.grouping);
3889
+ // init scrolling service
3890
+ this.scrollingService = new GridScrollingService((e) => {
3891
+ this.dimensionProvider.setViewPortCoordinate({
3892
+ coordinate: e.coordinate,
3893
+ type: e.dimension,
3894
+ });
3895
+ this.viewportscroll.emit(e);
3896
+ });
3897
+ this.aftergridinit.emit();
3898
+ }
3899
+ disconnectedCallback() {
3900
+ // destroy plugins on element disconnect
3901
+ this.internalPlugins.forEach(p => p.destroy());
3902
+ this.internalPlugins = [];
3903
+ }
3904
+ render() {
3905
+ const contentHeight = this.dimensionProvider.stores['rgRow'].store.get('realSize');
3906
+ // init viewport service helpers
3907
+ this.viewport = new ViewportService({
3908
+ columnProvider: this.columnProvider,
3909
+ dataProvider: this.dataProvider,
3910
+ dimensionProvider: this.dimensionProvider,
3911
+ viewportProvider: this.viewportProvider,
3912
+ scrollingService: this.scrollingService,
3913
+ orderService: this.orderService,
3914
+ selectionStoreConnector: this.selectionStoreConnector,
3915
+ disableVirtualX: this.disableVirtualX,
3916
+ disableVirtualY: this.disableVirtualY,
3917
+ resize: c => this.aftercolumnresize.emit(c),
3918
+ }, contentHeight);
3919
+ // #region ViewportSections
3920
+ /**
3921
+ * The code renders a viewport divided into sections.
3922
+ * It starts by rendering the pinned start, data, and pinned end sections.
3923
+ * Within each section, it renders columns along with their headers, pinned top, center data, and pinned bottom.
3924
+ * The code iterates over the columns and their data to generate the view port's HTML structure.
3925
+ */
3926
+ const viewportSections = [];
3927
+ // Row headers setting
3928
+ if (this.rowHeaders && this.viewport.columns.length) {
3929
+ const anyView = this.viewport.columns[0];
3930
+ viewportSections.push(index$1.h("revogr-row-headers", { additionalData: this.additionalData, height: contentHeight, rowClass: this.rowClass, resize: this.resize, dataPorts: anyView.dataPorts, headerProp: anyView.headerProp, jobsBeforeRender: this.jobsBeforeRender, rowHeaderColumn: typeof this.rowHeaders === 'object' ? this.rowHeaders : undefined, onScrollview: ({ detail: e }) => this.scrollingService.proxyScroll(e, 'headerRow'), onRef: ({ detail: e }) => this.scrollingService.registerElement(e, 'headerRow') }));
3931
+ }
3932
+ // Viewport section render
3933
+ const isMobile = isMobileDevice();
3934
+ const viewPortHtml = [];
3935
+ // Render viewports column(horizontal sections)
3936
+ for (let view of this.viewport.columns) {
3937
+ const headerProperties = Object.assign(Object.assign({}, view.headerProp), { type: view.type, additionalData: this.additionalData, viewportCol: view.viewportCol, selectionStore: view.columnSelectionStore, canResize: this.resize, readonly: this.readonly, columnFilter: !!this.filter });
3938
+ // Column headers
3939
+ const dataViews = [
3940
+ index$1.h("revogr-header", Object.assign({ key: '419c5eb752e8d8b9f84ad39db7192bf452ec26fd' }, headerProperties, { slot: column_service.HEADER_SLOT })),
3941
+ ];
3942
+ // Render viewport data (vertical sections)
3943
+ view.dataPorts.forEach((data) => {
3944
+ const key = `${data.type}_${view.type}`;
3945
+ const dataView = (index$1.h("revogr-overlay-selection", Object.assign({}, data, { isMobileDevice: isMobile, selectionStore: data.segmentSelectionStore, onSelectall: () => this.selectionStoreConnector.selectAll(), editors: this.editors, readonly: this.readonly, range: this.range, useClipboard: this.useClipboard, applyChangesOnClose: this.applyOnClose, additionalData: this.additionalData, slot: data.slot, onCanceledit: () => this.selectionStoreConnector.setEdit(false), onSetedit: ({ detail }) => {
3946
+ const event = this.beforeeditstart.emit(detail);
3947
+ if (!event.defaultPrevented) {
3948
+ this.selectionStoreConnector.setEdit(detail.val);
3949
+ }
3950
+ } }), index$1.h("revogr-data", Object.assign({}, data, { colType: view.type, key: key, readonly: this.readonly, range: this.range, rowClass: this.rowClass, rowSelectionStore: data.rowSelectionStore, additionalData: this.additionalData, jobsBeforeRender: this.jobsBeforeRender, slot: column_service.DATA_SLOT }), index$1.h("slot", { name: `data-${view.type}-${data.type}` })), index$1.h("revogr-temp-range", { selectionStore: data.segmentSelectionStore, dimensionRow: data.dimensionRow, dimensionCol: data.dimensionCol }), index$1.h("revogr-focus", { colData: data.colData, dataStore: data.dataStore, focusTemplate: this.focusTemplate, rowType: data.type, colType: view.type, selectionStore: data.segmentSelectionStore, dimensionRow: data.dimensionRow, dimensionCol: data.dimensionCol }, index$1.h("slot", { name: `focus-${view.type}-${data.type}` }))));
3951
+ dataViews.push(dataView);
3952
+ });
3953
+ // Add viewport scroll in the end
3954
+ viewPortHtml.push(index$1.h("revogr-viewport-scroll", Object.assign({}, view.prop, { ref: el => this.scrollingService.registerElement(el, `${view.prop.key}`), onScrollviewport: e => this.scrollingService.proxyScroll(e.detail, `${view.prop.key}`), onScrollviewportsilent: e => this.scrollingService.scrollSilentService(e.detail, `${view.prop.key}`) }), dataViews));
3955
+ }
3956
+ viewportSections.push(viewPortHtml);
3957
+ // #endregion
3958
+ const typeRow = 'rgRow';
3959
+ const typeCol = 'rgCol';
3960
+ const viewports = this.viewportProvider.stores;
3961
+ const dimensions = this.dimensionProvider.stores;
3962
+ return (index$1.h(index$1.Host, { key: '71caea92f25bd3afdf30783c0bfc469a4a20beda', [`${index.UUID}`]: this.uuid }, this.hideAttribution ? null : index$1.h("revogr-attribution", { class: "attribution" }), index$1.h("div", { key: '6ea98110dd76dfcadfac32705b84706b0b2b81b8', class: "main-viewport", onClick: (e) => {
3963
+ if (e.currentTarget === e.target) {
3964
+ this.viewport.clearEdit();
3965
+ }
3966
+ } }, index$1.h("div", { key: '4c633ee30609833648c6e2362bae615e854b93ff', class: "viewports" }, index$1.h("slot", { key: '93000f290acfa202d8074b5794a5a6d4e040d624', name: "viewport" }), viewportSections, index$1.h("revogr-scroll-virtual", { key: '554d3026c130dedf73778e4e21cb861befd4b981', class: "vertical", dimension: typeRow, viewportStore: viewports[typeRow].store, dimensionStore: dimensions[typeRow].store, ref: el => this.scrollingService.registerElement(el, 'rowScroll'), onScrollvirtual: e => this.scrollingService.proxyScroll(e.detail) }), index$1.h(OrderRenderer, { key: '79e6383066cc86910f783b03f7f97ec69ad736b7', ref: e => (this.orderService = e) }))), index$1.h("revogr-scroll-virtual", { key: '906847181f0b5d2a9466be95104911ad08be185f', 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) }), this.extraElements));
3967
+ }
3968
+ get element() { return index$1.getElement(this); }
3969
+ static get watchers() { return {
3970
+ "columnTypes": ["columnTypesChanged"],
3971
+ "columns": ["columnChanged"],
3972
+ "disableVirtualX": ["disableVirtualXChanged"],
3973
+ "rowSize": ["rowSizeChanged"],
3974
+ "theme": ["themeChanged"],
3975
+ "source": ["dataSourceChanged"],
3976
+ "pinnedBottomSource": ["dataSourceChanged"],
3977
+ "pinnedTopSource": ["dataSourceChanged"],
3978
+ "disableVirtualY": ["disableVirtualYChanged"],
3979
+ "rowDefinitions": ["rowDefChanged"],
3980
+ "trimmedRows": ["trimmedRowsChanged"],
3981
+ "grouping": ["groupingChanged"],
3982
+ "stretch": ["applyStretch"],
3983
+ "filter": ["applyFilter"],
3984
+ "rowHeaders": ["rowHeadersChange"],
3985
+ "registerVNode": ["registerOutsideVNodes"]
3986
+ }; }
3987
+ };
3988
+ RevoGridComponent.style = RevoGridStyle0;
3989
+
3990
+ exports.revo_grid = RevoGridComponent;
3991
+
3992
+ //# sourceMappingURL=revo-grid.cjs.entry.js.map