@revolist/revogrid 4.9.1 → 4.9.3

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 (262) hide show
  1. package/dist/cjs/{base.plugin-d48d867d.js → base.plugin-bf5f43a0.js} +2 -2
  2. package/dist/cjs/{base.plugin-d48d867d.js.map → base.plugin-bf5f43a0.js.map} +1 -1
  3. package/dist/cjs/{column.service-6f691f50.js → column.service-01f4a6c7.js} +25 -6
  4. package/dist/cjs/column.service-01f4a6c7.js.map +1 -0
  5. package/dist/cjs/{dimension.helpers-e9d22516.js → dimension.helpers-a6788214.js} +10 -5
  6. package/dist/cjs/dimension.helpers-a6788214.js.map +1 -0
  7. package/dist/cjs/{header-cell-renderer-81a22b00.js → header-cell-renderer-3bc70679.js} +10 -8
  8. package/dist/cjs/header-cell-renderer-3bc70679.js.map +1 -0
  9. package/dist/cjs/index.cjs.js +4 -4
  10. package/dist/cjs/revo-grid.cjs.entry.js +81 -93
  11. package/dist/cjs/revo-grid.cjs.entry.js.map +1 -1
  12. package/dist/cjs/revogr-attribution_6.cjs.entry.js +71 -46
  13. package/dist/cjs/revogr-attribution_6.cjs.entry.js.map +1 -1
  14. package/dist/cjs/revogr-clipboard_3.cjs.entry.js +12 -7
  15. package/dist/cjs/revogr-clipboard_3.cjs.entry.js.map +1 -1
  16. package/dist/cjs/revogr-data_4.cjs.entry.js +45 -36
  17. package/dist/cjs/revogr-data_4.cjs.entry.js.map +1 -1
  18. package/dist/cjs/revogr-filter-panel.cjs.entry.js.map +1 -1
  19. package/dist/cjs/{selection.helpers-8fa19c04.js → selection.helpers-1a8c8d49.js} +32 -31
  20. package/dist/cjs/selection.helpers-1a8c8d49.js.map +1 -0
  21. package/dist/cjs/{throttle-bcc4740d.js → throttle-52be9e67.js} +4 -3
  22. package/dist/cjs/throttle-52be9e67.js.map +1 -0
  23. package/dist/cjs/{viewport.store-9cf01c71.js → viewport.store-35a3e7ee.js} +13 -9
  24. package/dist/cjs/viewport.store-35a3e7ee.js.map +1 -0
  25. package/dist/collection/components/clipboard/revogr-clipboard.js +68 -89
  26. package/dist/collection/components/clipboard/revogr-clipboard.js.map +1 -1
  27. package/dist/collection/components/data/cell-renderer.js +7 -4
  28. package/dist/collection/components/data/cell-renderer.js.map +1 -1
  29. package/dist/collection/components/data/column.service.js +1 -1
  30. package/dist/collection/components/data/column.service.js.map +1 -1
  31. package/dist/collection/components/data/revogr-data.js +1 -1
  32. package/dist/collection/components/data/revogr-data.js.map +1 -1
  33. package/dist/collection/components/editors/revogr-edit.js +6 -6
  34. package/dist/collection/components/editors/revogr-edit.js.map +1 -1
  35. package/dist/collection/components/editors/text-editor.js +3 -1
  36. package/dist/collection/components/editors/text-editor.js.map +1 -1
  37. package/dist/collection/components/header/header-renderer.js +2 -1
  38. package/dist/collection/components/header/header-renderer.js.map +1 -1
  39. package/dist/collection/components/header/resizable.directive.js +7 -5
  40. package/dist/collection/components/header/resizable.directive.js.map +1 -1
  41. package/dist/collection/components/header/resizable.element.js +1 -1
  42. package/dist/collection/components/header/resizable.element.js.map +1 -1
  43. package/dist/collection/components/overlay/autofill.service.js +11 -12
  44. package/dist/collection/components/overlay/autofill.service.js.map +1 -1
  45. package/dist/collection/components/overlay/keyboard.service.js.map +1 -1
  46. package/dist/collection/components/overlay/revogr-overlay-selection.js +74 -39
  47. package/dist/collection/components/overlay/revogr-overlay-selection.js.map +1 -1
  48. package/dist/collection/components/overlay/selection.utils.js +13 -5
  49. package/dist/collection/components/overlay/selection.utils.js.map +1 -1
  50. package/dist/collection/components/revoGrid/grid.helpers.js +10 -8
  51. package/dist/collection/components/revoGrid/grid.helpers.js.map +1 -1
  52. package/dist/collection/components/revoGrid/revo-grid.js +42 -42
  53. package/dist/collection/components/revoGrid/revo-grid.js.map +1 -1
  54. package/dist/collection/components/revoGrid/viewport.helpers.js +19 -0
  55. package/dist/collection/components/revoGrid/viewport.helpers.js.map +1 -1
  56. package/dist/collection/components/revoGrid/viewport.scrolling.service.js +4 -3
  57. package/dist/collection/components/revoGrid/viewport.scrolling.service.js.map +1 -1
  58. package/dist/collection/components/revoGrid/viewport.service.js +27 -37
  59. package/dist/collection/components/revoGrid/viewport.service.js.map +1 -1
  60. package/dist/collection/components/rowHeaders/revogr-row-headers.js +2 -2
  61. package/dist/collection/components/rowHeaders/revogr-row-headers.js.map +1 -1
  62. package/dist/collection/components/scroll/revogr-viewport-scroll.js +34 -29
  63. package/dist/collection/components/scroll/revogr-viewport-scroll.js.map +1 -1
  64. package/dist/collection/components/scrollable/autohide-scroll.plugin.js +1 -1
  65. package/dist/collection/components/scrollable/autohide-scroll.plugin.js.map +1 -1
  66. package/dist/collection/components/scrollable/revogr-scroll-virtual.js +3 -3
  67. package/dist/collection/components/selectionFocus/revogr-focus.js +1 -1
  68. package/dist/collection/components/selectionFocus/revogr-focus.js.map +1 -1
  69. package/dist/collection/components/selectionTempRange/revogr-temp-range.js.map +1 -1
  70. package/dist/collection/components/vnode/vnode-converter.js +6 -6
  71. package/dist/collection/components/vnode/vnode-converter.js.map +1 -1
  72. package/dist/collection/components/vnode/vnode.utils.js.map +1 -1
  73. package/dist/collection/global/global.js.map +1 -1
  74. package/dist/collection/plugins/export/export.plugin.js +2 -2
  75. package/dist/collection/plugins/export/export.plugin.js.map +1 -1
  76. package/dist/collection/plugins/filter/filter.panel.js +4 -4
  77. package/dist/collection/plugins/groupingColumn/columnGroupsRenderer.js +1 -1
  78. package/dist/collection/plugins/groupingColumn/columnGroupsRenderer.js.map +1 -1
  79. package/dist/collection/plugins/groupingRow/grouping.row.plugin.js +2 -2
  80. package/dist/collection/plugins/groupingRow/grouping.row.plugin.js.map +1 -1
  81. package/dist/collection/plugins/groupingRow/grouping.service.js +1 -1
  82. package/dist/collection/plugins/groupingRow/grouping.service.js.map +1 -1
  83. package/dist/collection/plugins/moveColumn/column.drag.plugin.js +1 -1
  84. package/dist/collection/plugins/moveColumn/column.drag.plugin.js.map +1 -1
  85. package/dist/collection/plugins/sorting/sorting.plugin.js +9 -12
  86. package/dist/collection/plugins/sorting/sorting.plugin.js.map +1 -1
  87. package/dist/collection/services/cell.helpers.js +3 -2
  88. package/dist/collection/services/cell.helpers.js.map +1 -1
  89. package/dist/collection/services/column.data.provider.js.map +1 -1
  90. package/dist/collection/services/data.provider.js.map +1 -1
  91. package/dist/collection/services/dimension.provider.js +2 -1
  92. package/dist/collection/services/dimension.provider.js.map +1 -1
  93. package/dist/collection/services/local.scroll.service.js +3 -2
  94. package/dist/collection/services/local.scroll.service.js.map +1 -1
  95. package/dist/collection/services/selection.store.connector.js +20 -16
  96. package/dist/collection/services/selection.store.connector.js.map +1 -1
  97. package/dist/collection/store/selection/selection.helpers.js +8 -12
  98. package/dist/collection/store/selection/selection.helpers.js.map +1 -1
  99. package/dist/collection/store/selection/selection.store.js +2 -1
  100. package/dist/collection/store/selection/selection.store.js.map +1 -1
  101. package/dist/collection/store/vp/viewport.helpers.js +10 -6
  102. package/dist/collection/store/vp/viewport.helpers.js.map +1 -1
  103. package/dist/collection/store/vp/viewport.store.js +1 -1
  104. package/dist/collection/store/vp/viewport.store.js.map +1 -1
  105. package/dist/collection/themeManager/theme.service.js +1 -1
  106. package/dist/collection/themeManager/theme.service.js.map +1 -1
  107. package/dist/collection/types/interfaces.js.map +1 -1
  108. package/dist/collection/types/selection.js.map +1 -1
  109. package/dist/collection/types/viewport.interfaces.js.map +1 -1
  110. package/dist/collection/utils/closest.polifill.js.map +1 -1
  111. package/dist/collection/utils/store.utils.js +9 -4
  112. package/dist/collection/utils/store.utils.js.map +1 -1
  113. package/dist/esm/{base.plugin-78393655.js → base.plugin-5e7a3c51.js} +2 -2
  114. package/dist/esm/{base.plugin-78393655.js.map → base.plugin-5e7a3c51.js.map} +1 -1
  115. package/dist/esm/{column.service-0e41057a.js → column.service-5d14e7e9.js} +25 -6
  116. package/dist/esm/column.service-5d14e7e9.js.map +1 -0
  117. package/dist/esm/{dimension.helpers-91398565.js → dimension.helpers-56298828.js} +10 -5
  118. package/dist/esm/dimension.helpers-56298828.js.map +1 -0
  119. package/dist/esm/{header-cell-renderer-6d8ac25d.js → header-cell-renderer-fc999784.js} +10 -8
  120. package/dist/esm/header-cell-renderer-fc999784.js.map +1 -0
  121. package/dist/esm/index.js +4 -4
  122. package/dist/esm/revo-grid.entry.js +81 -93
  123. package/dist/esm/revo-grid.entry.js.map +1 -1
  124. package/dist/esm/revogr-attribution_6.entry.js +71 -46
  125. package/dist/esm/revogr-attribution_6.entry.js.map +1 -1
  126. package/dist/esm/revogr-clipboard_3.entry.js +12 -7
  127. package/dist/esm/revogr-clipboard_3.entry.js.map +1 -1
  128. package/dist/esm/revogr-data_4.entry.js +45 -36
  129. package/dist/esm/revogr-data_4.entry.js.map +1 -1
  130. package/dist/esm/revogr-filter-panel.entry.js.map +1 -1
  131. package/dist/esm/{selection.helpers-50e9f09d.js → selection.helpers-accaad4a.js} +32 -31
  132. package/dist/esm/selection.helpers-accaad4a.js.map +1 -0
  133. package/dist/esm/{throttle-1b1dd9d2.js → throttle-7283692c.js} +4 -3
  134. package/dist/esm/throttle-7283692c.js.map +1 -0
  135. package/dist/esm/{viewport.store-bfd0b036.js → viewport.store-d8e03528.js} +13 -9
  136. package/dist/esm/viewport.store-d8e03528.js.map +1 -0
  137. package/dist/revo-grid/{base.plugin-78393655.js → base.plugin-5e7a3c51.js} +2 -2
  138. package/dist/revo-grid/column.service-5d14e7e9.js +5 -0
  139. package/dist/revo-grid/column.service-5d14e7e9.js.map +1 -0
  140. package/dist/revo-grid/{dimension.helpers-91398565.js → dimension.helpers-56298828.js} +2 -2
  141. package/dist/revo-grid/{dimension.helpers-91398565.js.map → dimension.helpers-56298828.js.map} +1 -1
  142. package/dist/revo-grid/header-cell-renderer-fc999784.js +5 -0
  143. package/dist/revo-grid/header-cell-renderer-fc999784.js.map +1 -0
  144. package/dist/revo-grid/index.esm.js +1 -1
  145. package/dist/revo-grid/revo-grid.entry.js +1 -1
  146. package/dist/revo-grid/revo-grid.entry.js.map +1 -1
  147. package/dist/revo-grid/revogr-attribution_6.entry.js +1 -1
  148. package/dist/revo-grid/revogr-attribution_6.entry.js.map +1 -1
  149. package/dist/revo-grid/revogr-clipboard_3.entry.js +1 -1
  150. package/dist/revo-grid/revogr-clipboard_3.entry.js.map +1 -1
  151. package/dist/revo-grid/revogr-data_4.entry.js +1 -1
  152. package/dist/revo-grid/revogr-data_4.entry.js.map +1 -1
  153. package/dist/revo-grid/revogr-filter-panel.entry.js.map +1 -1
  154. package/dist/revo-grid/selection.helpers-accaad4a.js +5 -0
  155. package/dist/revo-grid/selection.helpers-accaad4a.js.map +1 -0
  156. package/dist/revo-grid/{throttle-1b1dd9d2.js → throttle-7283692c.js} +2 -2
  157. package/dist/revo-grid/throttle-7283692c.js.map +1 -0
  158. package/dist/revo-grid/viewport.store-d8e03528.js +5 -0
  159. package/dist/revo-grid/viewport.store-d8e03528.js.map +1 -0
  160. package/dist/types/components/clipboard/revogr-clipboard.d.ts +32 -24
  161. package/dist/types/components/data/column.service.d.ts +1 -1
  162. package/dist/types/components/data/row-highlight.plugin.d.ts +1 -1
  163. package/dist/types/components/editors/revogr-edit.d.ts +1 -1
  164. package/dist/types/components/editors/text-editor.d.ts +3 -3
  165. package/dist/types/components/header/header-renderer.d.ts +2 -2
  166. package/dist/types/components/header/resizable.directive.d.ts +2 -2
  167. package/dist/types/components/overlay/autofill.service.d.ts +9 -7
  168. package/dist/types/components/overlay/keyboard.service.d.ts +4 -4
  169. package/dist/types/components/overlay/revogr-overlay-selection.d.ts +20 -11
  170. package/dist/types/components/overlay/selection.utils.d.ts +7 -4
  171. package/dist/types/components/revoGrid/revo-grid.d.ts +7 -6
  172. package/dist/types/components/revoGrid/viewport.helpers.d.ts +18 -3
  173. package/dist/types/components/revoGrid/viewport.scrolling.service.d.ts +1 -1
  174. package/dist/types/components/revoGrid/viewport.service.d.ts +2 -6
  175. package/dist/types/components/scroll/revogr-viewport-scroll.d.ts +6 -6
  176. package/dist/types/components/selectionTempRange/revogr-temp-range.d.ts +1 -1
  177. package/dist/types/components/vnode/vnode-converter.d.ts +1 -1
  178. package/dist/types/components/vnode/vnode.utils.d.ts +1 -1
  179. package/dist/types/components.d.ts +80 -54
  180. package/dist/types/plugins/column.auto-size.plugin.d.ts +2 -2
  181. package/dist/types/plugins/export/export.plugin.d.ts +3 -3
  182. package/dist/types/plugins/filter/filter.button.d.ts +1 -1
  183. package/dist/types/plugins/filter/filter.panel.d.ts +1 -1
  184. package/dist/types/plugins/groupingRow/grouping.row.plugin.d.ts +1 -1
  185. package/dist/types/plugins/groupingRow/grouping.service.d.ts +3 -3
  186. package/dist/types/plugins/sorting/sorting.plugin.d.ts +8 -8
  187. package/dist/types/services/column.data.provider.d.ts +1 -1
  188. package/dist/types/services/data.provider.d.ts +1 -1
  189. package/dist/types/services/dimension.provider.d.ts +3 -2
  190. package/dist/types/services/selection.store.connector.d.ts +9 -9
  191. package/dist/types/store/selection/selection.helpers.d.ts +1 -1
  192. package/dist/types/store/selection/selection.store.d.ts +4 -4
  193. package/dist/types/store/vp/viewport.helpers.d.ts +2 -2
  194. package/dist/types/themeManager/theme.service.d.ts +1 -1
  195. package/dist/types/types/interfaces.d.ts +18 -1
  196. package/dist/types/types/viewport.interfaces.d.ts +2 -2
  197. package/dist/types/utils/store.utils.d.ts +7 -4
  198. package/hydrate/index.js +274 -215
  199. package/hydrate/index.mjs +274 -215
  200. package/package.json +1 -1
  201. package/standalone/column.service.js +33 -33
  202. package/standalone/column.service.js.map +1 -1
  203. package/standalone/data.store.js +2959 -7
  204. package/standalone/data.store.js.map +1 -1
  205. package/standalone/debounce.js +1 -1
  206. package/standalone/dimension.helpers.js +2 -2
  207. package/standalone/index.js.map +1 -1
  208. package/standalone/local.scroll.timer.js +3 -2
  209. package/standalone/local.scroll.timer.js.map +1 -1
  210. package/standalone/revo-grid.js +77 -90
  211. package/standalone/revo-grid.js.map +1 -1
  212. package/standalone/revogr-clipboard2.js +6 -3
  213. package/standalone/revogr-clipboard2.js.map +1 -1
  214. package/standalone/revogr-data2.js +7 -5
  215. package/standalone/revogr-data2.js.map +1 -1
  216. package/standalone/revogr-edit2.js +5 -3
  217. package/standalone/revogr-edit2.js.map +1 -1
  218. package/standalone/revogr-filter-panel.js.map +1 -1
  219. package/standalone/revogr-focus2.js +0 -1
  220. package/standalone/revogr-focus2.js.map +1 -1
  221. package/standalone/revogr-header2.js +12 -10
  222. package/standalone/revogr-header2.js.map +1 -1
  223. package/standalone/revogr-order-editor2.js +0 -1
  224. package/standalone/revogr-order-editor2.js.map +1 -1
  225. package/standalone/revogr-overlay-selection2.js +54 -38
  226. package/standalone/revogr-overlay-selection2.js.map +1 -1
  227. package/standalone/revogr-row-headers2.js +12 -9
  228. package/standalone/revogr-row-headers2.js.map +1 -1
  229. package/standalone/revogr-scroll-virtual2.js +1 -1
  230. package/standalone/revogr-scroll-virtual2.js.map +1 -1
  231. package/standalone/revogr-temp-range2.js.map +1 -1
  232. package/standalone/revogr-viewport-scroll2.js +47 -23
  233. package/standalone/revogr-viewport-scroll2.js.map +1 -1
  234. package/standalone/selection.utils.js +14 -6
  235. package/standalone/selection.utils.js.map +1 -1
  236. package/standalone/toNumber.js +1 -1
  237. package/standalone/vnode-converter.js +3 -3
  238. package/standalone/vnode-converter.js.map +1 -1
  239. package/dist/cjs/column.service-6f691f50.js.map +0 -1
  240. package/dist/cjs/dimension.helpers-e9d22516.js.map +0 -1
  241. package/dist/cjs/header-cell-renderer-81a22b00.js.map +0 -1
  242. package/dist/cjs/selection.helpers-8fa19c04.js.map +0 -1
  243. package/dist/cjs/throttle-bcc4740d.js.map +0 -1
  244. package/dist/cjs/viewport.store-9cf01c71.js.map +0 -1
  245. package/dist/esm/column.service-0e41057a.js.map +0 -1
  246. package/dist/esm/dimension.helpers-91398565.js.map +0 -1
  247. package/dist/esm/header-cell-renderer-6d8ac25d.js.map +0 -1
  248. package/dist/esm/selection.helpers-50e9f09d.js.map +0 -1
  249. package/dist/esm/throttle-1b1dd9d2.js.map +0 -1
  250. package/dist/esm/viewport.store-bfd0b036.js.map +0 -1
  251. package/dist/revo-grid/column.service-0e41057a.js +0 -5
  252. package/dist/revo-grid/column.service-0e41057a.js.map +0 -1
  253. package/dist/revo-grid/header-cell-renderer-6d8ac25d.js +0 -5
  254. package/dist/revo-grid/header-cell-renderer-6d8ac25d.js.map +0 -1
  255. package/dist/revo-grid/selection.helpers-50e9f09d.js +0 -5
  256. package/dist/revo-grid/selection.helpers-50e9f09d.js.map +0 -1
  257. package/dist/revo-grid/throttle-1b1dd9d2.js.map +0 -1
  258. package/dist/revo-grid/viewport.store-bfd0b036.js +0 -5
  259. package/dist/revo-grid/viewport.store-bfd0b036.js.map +0 -1
  260. package/standalone/_baseIteratee.js +0 -2956
  261. package/standalone/_baseIteratee.js.map +0 -1
  262. /package/dist/revo-grid/{base.plugin-78393655.js.map → base.plugin-5e7a3c51.js.map} +0 -0
@@ -0,0 +1 @@
1
+ {"version":3,"names":["defaultState","range","tempRange","tempRangeType","focus","edit","lastCell","nextFocus","SelectionStore","constructor","this","unsubscribe","store","createStore","on","key","newVal","set","onChange","propName","cb","push","clearFocus","setStore","setFocus","end","getRange","setNextFocus","setTempArea","area","type","clearTemp","setRangeArea","setRange","start","setLastCell","setEdit","val","get","x","y","dispose","forEach","f","EMPTY_INDEX","SelectionStoreConnector","dirty","stores","columnStores","rowStores","storesByType","storesXToType","storesYToType","sections","focusedStore","focused","_a","entity","cell","position","parseInt","selectedRange","registerSection","e","length","indexOf","beforeUpdate","registerColumn","isHiddenStore","registerRow","register","c","_b","destroy","Object","keys","setEditByCell","storePos","editCell","focusByCell","beforeNextFocusCell","next","getNextStore","assign","item","currentStorePointer","getCurrentStorePointer","cropCellToMax","s","nextItem","nextCell","nextStore","entries","nextItemCoord","getXStores","getYStores","nextLastCell","clearAll","selectAll","i","pos","types","t","croppedCell","cellCoordinates","coordinate","Math","min","x1","max","y1","isRangeSingleCell","a"],"sources":["src/store/selection/selection.store.ts","src/services/selection.store.connector.ts","src/store/selection/selection.helpers.ts"],"sourcesContent":["/**\n * Selection store\n */\n\nimport { setStore, Observable } from '../../utils/store.utils';\nimport { getRange } from '@store';\nimport { SelectionStoreState, Cell, TempRange, RangeArea, Nullable } from '@type';\nimport { createStore } from '@stencil/store';\n\nfunction defaultState(): SelectionStoreState {\n return {\n range: null,\n tempRange: null,\n tempRangeType: null,\n focus: null,\n edit: null,\n lastCell: null,\n nextFocus: null,\n };\n}\n\nexport class SelectionStore {\n readonly store: Observable<SelectionStoreState>;\n private unsubscribe: { (): void }[] = [];\n constructor() {\n this.store = createStore(defaultState());\n this.store.on('set', (key, newVal) => {\n if (key === 'tempRange' && !newVal) {\n this.store.set('tempRangeType', null);\n }\n });\n }\n\n onChange<Key extends keyof SelectionStoreState>(propName: Key, cb: (newValue: SelectionStoreState[Key]) => void) {\n this.unsubscribe.push(this.store.onChange(propName, cb));\n }\n\n clearFocus() {\n setStore(this.store, { focus: null, range: null, edit: null, tempRange: null });\n }\n\n setFocus(focus: Cell, end?: Cell) {\n if (!end) {\n setStore(this.store, { focus });\n } else {\n setStore(this.store, {\n focus,\n range: getRange(focus, end),\n edit: null,\n tempRange: null,\n });\n }\n }\n\n setNextFocus(focus: Cell) {\n setStore(this.store, { nextFocus: focus });\n }\n\n setTempArea(range: Nullable<TempRange> | null) {\n setStore(this.store, { tempRange: range?.area, tempRangeType: range?.type, edit: null });\n }\n\n clearTemp() {\n setStore(this.store, { tempRange: null });\n }\n\n /** Can be applied from selection change or from simple keyboard change clicks */\n setRangeArea(range: RangeArea | null) {\n setStore(this.store, { range, edit: null, tempRange: null });\n }\n setRange(start: Cell, end: Cell) {\n const range = getRange(start, end);\n this.setRangeArea(range);\n }\n\n setLastCell(lastCell: Cell) {\n setStore(this.store, { lastCell });\n }\n\n setEdit(val?: string | boolean) {\n const focus = this.store.get('focus');\n if (focus && typeof val === 'string') {\n setStore(this.store, {\n edit: { x: focus.x, y: focus.y, val },\n });\n return;\n }\n setStore(this.store, { edit: null });\n }\n\n dispose() {\n this.unsubscribe.forEach(f => f());\n this.store.dispose();\n }\n}\n","import { cropCellToMax, isHiddenStore, nextCell, SelectionStore } from '@store';\nimport type {\n MultiDimensionType,\n DimensionCols,\n DimensionRows,\n Cell,\n} from '@type';\n\ntype StoreByDimension = Record<number, SelectionStore>;\ntype FocusedStore = {\n entity: SelectionStore;\n cell: Cell;\n position: Cell;\n};\n\ntype StoresMapping<T> = { [xOrY: number]: Partial<T> };\n\nexport const EMPTY_INDEX = -1;\n\nexport default class SelectionStoreConnector {\n // dirty flag required to cleanup whole store in case visibility of panels changed\n private dirty = false;\n readonly stores: { [y: number]: { [x: number]: SelectionStore } } = {};\n\n readonly columnStores: StoreByDimension = {};\n readonly rowStores: { [y: number]: SelectionStore } = {};\n\n /**\n * Helpers for data conversion\n */\n readonly storesByType: Partial<Record<MultiDimensionType, number>> = {};\n readonly storesXToType: StoresMapping<DimensionCols> = {};\n readonly storesYToType: StoresMapping<DimensionRows> = {};\n\n get focusedStore(): FocusedStore | null {\n for (let y in this.stores) {\n for (let x in this.stores[y]) {\n const focused = this.stores[y][x]?.store.get('focus');\n if (focused) {\n return {\n entity: this.stores[y][x],\n cell: focused,\n position: {\n x: parseInt(x, 10),\n y: parseInt(y, 10),\n },\n };\n }\n }\n }\n return null;\n }\n\n get edit() {\n return this.focusedStore?.entity.store.get('edit');\n }\n\n get focused() {\n return this.focusedStore?.entity.store.get('focus');\n }\n\n get selectedRange() {\n return this.focusedStore?.entity.store.get('range');\n }\n\n private readonly sections: Element[] = [];\n\n registerSection(e?: Element) {\n if (!e) {\n this.sections.length = 0;\n // some elements removed, rebuild stores\n this.dirty = true;\n return;\n }\n if (this.sections.indexOf(e) === -1) {\n this.sections.push(e);\n }\n }\n\n // check if require to cleanup all stores\n beforeUpdate() {\n if (this.dirty) {\n for (let y in this.stores) {\n for (let x in this.stores[y]) {\n this.stores[y][x].dispose();\n }\n }\n this.dirty = false;\n }\n }\n\n registerColumn(x: number, type: DimensionCols): SelectionStore {\n // if hidden just create store but no operations needed\n if (isHiddenStore(x)) {\n return new SelectionStore();\n }\n if (this.columnStores[x]) {\n return this.columnStores[x];\n }\n this.columnStores[x] = new SelectionStore();\n // build cross-linking type to position\n this.storesByType[type] = x;\n this.storesXToType[x] = type;\n return this.columnStores[x];\n }\n\n registerRow(y: number, type: DimensionRows): SelectionStore {\n // if hidden just create store\n if (isHiddenStore(y)) {\n return new SelectionStore();\n }\n if (this.rowStores[y]) {\n return this.rowStores[y];\n }\n this.rowStores[y] = new SelectionStore();\n // build cross linking type to position\n this.storesByType[type] = y;\n this.storesYToType[y] = type;\n return this.rowStores[y];\n }\n\n /**\n * Cross store proxy, based on multiple dimensions\n */\n register({ x, y }: Cell): SelectionStore {\n // if hidden just create store\n if (isHiddenStore(x) || isHiddenStore(y)) {\n return new SelectionStore();\n }\n if (!this.stores[y]) {\n this.stores[y] = {};\n }\n if (this.stores[y][x]) {\n // Store already registered. Do not register twice\n return this.stores[y][x];\n }\n this.stores[y][x] = new SelectionStore();\n // proxy update, column store trigger only range area\n this.stores[y][x]?.onChange('range', c => {\n this.columnStores[x].setRangeArea(c);\n this.rowStores[y].setRangeArea(c);\n });\n // clean up on remove\n this.stores[y][x]?.store.on('dispose', () => this.destroy(x, y));\n return this.stores[y][x];\n }\n\n private destroy(x: number, y: number) {\n this.columnStores[x]?.dispose();\n this.rowStores[y]?.dispose();\n\n delete this.rowStores[y];\n delete this.columnStores[x];\n // clear x cross-link\n if (this.storesXToType[x]) {\n const type = this.storesXToType[x];\n delete this.storesXToType[x];\n delete this.storesByType[type];\n }\n // clear y cross-link\n if (this.storesYToType[y]) {\n const type = this.storesYToType[y];\n delete this.storesYToType[y];\n delete this.storesByType[type];\n }\n if (this.stores[y]) {\n delete this.stores[y][x];\n }\n // clear empty rows\n if (!Object.keys(this.stores[y] || {}).length) {\n delete this.stores[y];\n }\n }\n\n setEditByCell<T extends Cell>(storePos: T, editCell: T) {\n this.focusByCell(storePos, editCell, editCell);\n this.setEdit('');\n }\n\n /**\n * Sets the next focus cell before the current one.\n * \n * @param focus - The cell to set as the next focus.\n */\n beforeNextFocusCell(focus: Cell) {\n // If there is no focused store, return early.\n if (!this.focusedStore) {\n return;\n }\n\n // Get the next store based on the current focus and the last cell.\n const lastCell = this.focusedStore.entity.store.get('lastCell');\n const next = lastCell && this.getNextStore(focus, this.focusedStore.position, lastCell);\n\n // Set the next focus cell in the store.\n next?.store?.setNextFocus({ ...focus, ...next.item });\n }\n\n focusByCell<T extends Cell>(storePos: T, start: T, end: T) {\n const store = this.stores[storePos.y][storePos.x];\n this.focus(store, { focus: start, end });\n }\n\n focus(store: SelectionStore, { focus, end }: { focus: Cell; end: Cell }) {\n const currentStorePointer = this.getCurrentStorePointer(store);\n if (!currentStorePointer) {\n return null;\n }\n\n // check for the focus in nearby store/viewport\n const lastCell = store.store.get('lastCell');\n const next = lastCell && this.getNextStore(focus, currentStorePointer, lastCell);\n\n // if next store present - update\n if (next?.store) {\n const item = { ...focus, ...next.item };\n this.focus(next.store, { focus: item, end: item });\n return null;\n }\n\n if (lastCell) {\n focus = cropCellToMax(focus, lastCell);\n end = cropCellToMax(end, lastCell); \n }\n store.setFocus(focus, end);\n return focus;\n }\n\n /**\n * Retrieves the current store pointer based on the active store.\n * Clears focus from all stores except the active one.\n */\n getCurrentStorePointer(store: SelectionStore) {\n let currentStorePointer: Cell | undefined;\n\n // Iterate through all stores\n for (let y in this.stores) {\n for (let x in this.stores[y]) {\n const s = this.stores[y][x];\n\n // Clear focus from stores other than the active one\n if (s !== store) {\n s.clearFocus();\n } else {\n // Update the current store pointer with the active store coordinates\n currentStorePointer = { \n x: parseInt(x, 10), \n y: parseInt(y, 10) \n };\n }\n }\n }\n\n return currentStorePointer;\n }\n\n /**\n * Retrieves the next store based on the focus cell and current store pointer.\n * If the next store exists, returns an object with the next store and the item in the new store.\n * If the next store does not exist, returns null.\n */\n getNextStore(\n focus: Cell,\n currentStorePointer: Cell,\n lastCell: Cell,\n ) {\n // item in new store\n const nextItem: Partial<Cell> | null = nextCell(focus, lastCell);\n\n let nextStore: SelectionStore | undefined;\n if (nextItem) {\n Object.entries(nextItem).forEach(([type, nextItemCoord]: [keyof Cell, number]) => {\n let stores;\n switch (type) {\n case 'x':\n // Get the X stores for the current Y coordinate of the current store pointer\n stores = this.getXStores(currentStorePointer.y);\n break;\n case 'y':\n // Get the Y stores for the current X coordinate of the current store pointer\n stores = this.getYStores(currentStorePointer.x);\n break;\n }\n\n // Get the next store based on the item in the new store\n if (nextItemCoord >= 0) {\n nextStore = stores[++currentStorePointer[type]];\n } else {\n nextStore = stores[--currentStorePointer[type]];\n const nextLastCell = nextStore?.store.get('lastCell');\n if (nextLastCell) {\n nextItem[type] = nextLastCell[type] + nextItemCoord;\n }\n }\n });\n }\n return {\n store: nextStore,\n item: nextItem,\n };\n }\n\n clearAll() {\n for (let y in this.stores) {\n for (let x in this.stores[y]) {\n this.stores[y][x]?.clearFocus();\n }\n }\n }\n\n setEdit(val?: string | boolean) {\n if (!this.focusedStore) {\n return;\n }\n this.focusedStore.entity.setEdit(val);\n }\n\n /**\n * Select all cells across all stores\n */\n selectAll() {\n for (let y in this.stores) {\n for (let x in this.stores[y]) {\n const store = this.stores[y][x];\n if (!store) {\n continue;\n }\n const lastCell = store.store.get('lastCell');\n if (lastCell) {\n store.setRange(\n { x: 0, y: 0 },\n { x: lastCell.x - 1, y: lastCell.y - 1 },\n );\n }\n }\n }\n }\n\n private getXStores(y: number) {\n return this.stores[y];\n }\n\n private getYStores(x: number) {\n const stores: { [p: number]: SelectionStore } = {};\n for (let i in this.stores) {\n stores[i] = this.stores[i][x];\n }\n return stores;\n }\n}\n","import { EMPTY_INDEX } from '../../services/selection.store.connector';\nimport { Cell, RangeArea } from '@type';\n\nexport function isHiddenStore(pos: number) {\n return pos === EMPTY_INDEX;\n}\n\nexport function nextCell(cell: Cell, lastCell: Cell): Partial<Cell> | null {\n const nextItem: Partial<Cell> = {};\n let types: (keyof Cell)[] = ['x', 'y'];\n\n // previous item check\n for (let t of types) {\n if (cell[t] < 0) {\n nextItem[t] = cell[t];\n return nextItem;\n }\n }\n // next item check\n for (let t of types) {\n if (cell[t] >= lastCell[t]) {\n nextItem[t] = cell[t] - lastCell[t];\n return nextItem;\n }\n }\n return null;\n}\n\nexport function cropCellToMax(cell: Cell, lastCell: Cell): Cell {\n const croppedCell: Cell = { ...cell };\n const cellCoordinates: (keyof Cell)[] = ['x', 'y'];\n\n for (const coordinate of cellCoordinates) {\n if (cell[coordinate] < 0) {\n croppedCell[coordinate] = 0;\n } else if (cell[coordinate] >= lastCell[coordinate]) {\n croppedCell[coordinate] = lastCell[coordinate] - 1;\n }\n }\n\n return croppedCell;\n}\n\nexport function getRange(start?: Cell | null, end?: Cell | null): RangeArea | null {\n return start && end\n ? {\n x: Math.min(start.x, end.x),\n y: Math.min(start.y, end.y),\n x1: Math.max(start.x, end.x),\n y1: Math.max(start.y, end.y),\n }\n : null;\n}\n\nexport function isRangeSingleCell(a: RangeArea): boolean {\n return a.x === a.x1 && a.y === a.y1;\n}\n"],"mappings":"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","ignoreList":[]}
@@ -1,5 +1,5 @@
1
1
  /*!
2
2
  * Built by Revolist OU ❤️
3
3
  */
4
- import{s as t}from"./index-4e881436.js";import{d as i}from"./debounce-7781346d.js";import{i as r}from"./toNumber-8de324a7.js";const s={contentSize:0,clientSize:0,virtualSize:0,maxSize:0};const e=-1;function n(t,i,r=0){return t+(r?i-r:0)}class o{constructor(t){this.cfg=t;this.preventArtificialScroll={rgRow:null,rgCol:null};this.previousScroll={rgRow:e,rgCol:e};this.params={rgRow:Object.assign({},s),rgCol:Object.assign({},s)}}setParams(t,i){const r=n(t.contentSize,t.clientSize,t.virtualSize);this.params[i]=Object.assign(Object.assign({},t),{maxSize:r-t.clientSize,virtualContentSize:r})}async setScroll(t){this.cancelScroll(t.dimension);const i=new Promise(((i,r)=>{if(this.cfg.skipAnimationFrame){return i()}const s=window.requestAnimationFrame((()=>{i()}));this.preventArtificialScroll[t.dimension]=r.bind(null,s)}));try{await i;const r=this.getParams(t.dimension);t.coordinate=Math.ceil(t.coordinate);this.previousScroll[t.dimension]=this.wrapCoordinate(t.coordinate,r);this.preventArtificialScroll[t.dimension]=null;this.cfg.applyScroll(Object.assign(Object.assign({},t),{coordinate:r.virtualSize?this.convert(t.coordinate,r,false):t.coordinate}))}catch(t){window.cancelAnimationFrame(t)}}scroll(t,i,r=false,s,n=false){this.cancelScroll(i);if(!r&&this.previousScroll[i]===t){this.previousScroll[i]=e;return}const o=this.getParams(i);this.cfg.runScroll({dimension:i,coordinate:o.virtualSize?this.convert(t,o):t,delta:s,outside:n})}getParams(t){return this.params[t]}wrapCoordinate(t,i){if(t<0){return e}if(t>i.maxSize){return i.maxSize}return t}cancelScroll(t){var i,r;(r=(i=this.preventArtificialScroll)[t])===null||r===void 0?void 0:r.call(i);this.preventArtificialScroll[t]=null}convert(i,r,s=true){const e=r.clientSize;const n=[0,r.virtualContentSize-e];const o=[0,r.contentSize-r.virtualSize];if(s){return t(i,n,o)}return t(i,o,n)}}class a{constructor(t=10){this.scrollThrottling=t;this.mouseWheelScrollTimestamp={rgCol:0,rgRow:0};this.lastKnownScrollCoordinate={rgCol:0,rgRow:0}}setCoordinate(t){this.lastKnownScrollCoordinate[t.dimension]=t.coordinate}latestScrollUpdate(t){this.mouseWheelScrollTimestamp[t]=(new Date).getTime()}isReady(t,i){const r=(new Date).getTime()-this.mouseWheelScrollTimestamp[t];return r>this.scrollThrottling&&i!==this.lastKnownScrollCoordinate[t]}}var c=i,l=r;var h="Expected a function";function u(t,i,r){var s=true,e=true;if(typeof t!="function"){throw new TypeError(h)}if(l(r)){s="leading"in r?!!r.leading:s;e="trailing"in r?!!r.trailing:e}return c(t,i,{leading:s,maxWait:i,trailing:e})}var d=u;export{a as L,o as a,n as g,d as t};
5
- //# sourceMappingURL=throttle-1b1dd9d2.js.map
4
+ import{s as t}from"./index-4e881436.js";import{d as i}from"./debounce-7781346d.js";import{i as r}from"./toNumber-8de324a7.js";const s={contentSize:0,clientSize:0,virtualSize:0,maxSize:0};const e=-1;function n(t,i,r=0){return t+(r?i-r:0)}class o{constructor(t){this.cfg=t;this.preventArtificialScroll={rgRow:null,rgCol:null};this.previousScroll={rgRow:e,rgCol:e};this.params={rgRow:Object.assign({},s),rgCol:Object.assign({},s)}}setParams(t,i){const r=n(t.contentSize,t.clientSize,t.virtualSize);this.params[i]=Object.assign(Object.assign({},t),{maxSize:r-t.clientSize,virtualContentSize:r})}async setScroll(t){this.cancelScroll(t.dimension);const i=new Promise(((i,r)=>{if(this.cfg.skipAnimationFrame){return i()}const s=window.requestAnimationFrame((()=>{i()}));this.preventArtificialScroll[t.dimension]=r.bind(null,s)}));try{await i;const r=this.getParams(t.dimension);t.coordinate=Math.ceil(t.coordinate);this.previousScroll[t.dimension]=this.wrapCoordinate(t.coordinate,r);this.preventArtificialScroll[t.dimension]=null;this.cfg.applyScroll(Object.assign(Object.assign({},t),{coordinate:r.virtualSize?this.convert(t.coordinate,r,false):t.coordinate}))}catch(t){window.cancelAnimationFrame(t)}}scroll(t,i,r=false,s,n=false){this.cancelScroll(i);if(!r&&this.previousScroll[i]===t){this.previousScroll[i]=e;return}const o=this.getParams(i);this.cfg.runScroll({dimension:i,coordinate:o.virtualSize?this.convert(t,o):t,delta:s,outside:n})}getParams(t){return this.params[t]}wrapCoordinate(t,i){if(t<0){return e}if(typeof i.maxSize==="number"&&t>i.maxSize){return i.maxSize}return t}cancelScroll(t){var i,r;(r=(i=this.preventArtificialScroll)[t])===null||r===void 0?void 0:r.call(i);this.preventArtificialScroll[t]=null}convert(i,r,s=true){var e;const n=r.clientSize;const o=[0,((e=r.virtualContentSize)!==null&&e!==void 0?e:n)-n];const a=[0,r.contentSize-r.virtualSize];if(s){return t(i,o,a)}return t(i,a,o)}}class a{constructor(t=10){this.scrollThrottling=t;this.mouseWheelScrollTimestamp={rgCol:0,rgRow:0};this.lastKnownScrollCoordinate={rgCol:0,rgRow:0}}setCoordinate(t){this.lastKnownScrollCoordinate[t.dimension]=t.coordinate}latestScrollUpdate(t){this.mouseWheelScrollTimestamp[t]=(new Date).getTime()}isReady(t,i){const r=(new Date).getTime()-this.mouseWheelScrollTimestamp[t];return r>this.scrollThrottling&&i!==this.lastKnownScrollCoordinate[t]}}var c=i,l=r;var h="Expected a function";function u(t,i,r){var s=true,e=true;if(typeof t!="function"){throw new TypeError(h)}if(l(r)){s="leading"in r?!!r.leading:s;e="trailing"in r?!!r.trailing:e}return c(t,i,{leading:s,maxWait:i,trailing:e})}var d=u;export{a as L,o as a,n as g,d as t};
5
+ //# sourceMappingURL=throttle-7283692c.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["initialParams","contentSize","clientSize","virtualSize","maxSize","NO_COORDINATE","getContentSize","LocalScrollService","constructor","cfg","this","preventArtificialScroll","rgRow","rgCol","previousScroll","params","Object","assign","setParams","dimension","virtualContentSize","setScroll","e","cancelScroll","frameAnimation","Promise","resolve","reject","skipAnimationFrame","animationId","window","requestAnimationFrame","bind","getParams","coordinate","Math","ceil","wrapCoordinate","applyScroll","convert","id","cancelAnimationFrame","scroll","force","delta","outside","param","runScroll","c","_b","_a","call","pos","toReal","minRange","from","to","scaleValue","LocalScrollTimer","scrollThrottling","mouseWheelScrollTimestamp","lastKnownScrollCoordinate","setCoordinate","latestScrollUpdate","Date","getTime","isReady","type","change","debounce","require$$0","isObject","require$$1","FUNC_ERROR_TEXT","throttle","func","wait","options","leading","trailing","TypeError","maxWait","throttle_1"],"sources":["src/services/local.scroll.service.ts","src/services/local.scroll.timer.ts","node_modules/lodash/throttle.js"],"sourcesContent":["import type { DimensionType, ViewPortScrollEvent } from '@type';\nimport { scaleValue } from '../utils';\n\ninterface Config {\n skipAnimationFrame?: boolean;\n // scroll event inited and direction cached\n // scrollingService.proxyScroll get tiggered\n // setScroll event called from scrollingService\n runScroll(e: ViewPortScrollEvent): void;\n // all operation finished, apply scroll values\n applyScroll(e: ViewPortScrollEvent): void;\n}\n\ntype Params = {\n contentSize: number;\n virtualContentSize?: number;\n clientSize: number;\n virtualSize: number;\n maxSize?: number;\n};\n\nconst initialParams: Params = {\n contentSize: 0,\n clientSize: 0,\n virtualSize: 0,\n maxSize: 0,\n};\nconst NO_COORDINATE = -1;\n\n/**\n * Based on content size, client size and virtual size\n * return full size\n */\nexport function getContentSize(\n contentSize: number,\n clientSize: number,\n virtualSize = 0,\n): number {\n return contentSize + (virtualSize ? clientSize - virtualSize : 0);\n}\n\nexport default class LocalScrollService {\n private preventArtificialScroll: Record<DimensionType, (() => void) | null> = {\n rgRow: null,\n rgCol: null,\n };\n // to check if scroll changed\n private previousScroll: Record<DimensionType, number> = {\n rgRow: NO_COORDINATE,\n rgCol: NO_COORDINATE,\n };\n private params: Record<DimensionType, Params> = {\n rgRow: { ...initialParams },\n rgCol: { ...initialParams },\n };\n\n constructor(private cfg: Config) {}\n\n setParams(params: Params, dimension: DimensionType) {\n const virtualContentSize = getContentSize(\n params.contentSize,\n params.clientSize,\n params.virtualSize,\n );\n this.params[dimension] = {\n ...params,\n maxSize: virtualContentSize - params.clientSize,\n virtualContentSize,\n };\n }\n\n // apply scroll values after scroll done\n async setScroll(e: ViewPortScrollEvent) {\n this.cancelScroll(e.dimension);\n\n // start frame animation\n const frameAnimation = new Promise<void>((resolve, reject) => {\n // for example safari desktop has issues with animation frame\n if (this.cfg.skipAnimationFrame) {\n return resolve();\n }\n const animationId = window.requestAnimationFrame(() => {\n resolve();\n });\n this.preventArtificialScroll[e.dimension] = reject.bind(\n null,\n animationId,\n );\n });\n\n try {\n await frameAnimation;\n const params = this.getParams(e.dimension);\n e.coordinate = Math.ceil(e.coordinate);\n this.previousScroll[e.dimension] = this.wrapCoordinate(\n e.coordinate,\n params,\n );\n this.preventArtificialScroll[e.dimension] = null;\n this.cfg.applyScroll({\n ...e,\n coordinate: params.virtualSize\n ? this.convert(e.coordinate, params, false)\n : e.coordinate,\n });\n } catch (id) {\n window.cancelAnimationFrame(id);\n }\n }\n\n /**\n * On scroll event started\n */\n scroll(\n coordinate: number,\n dimension: DimensionType,\n force = false,\n delta?: number,\n outside = false,\n ) {\n // cancel all previous scrolls for same dimension\n this.cancelScroll(dimension);\n\n // drop if no change\n if (!force && this.previousScroll[dimension] === coordinate) {\n this.previousScroll[dimension] = NO_COORDINATE;\n return;\n }\n\n const param = this.getParams(dimension);\n // let component know about scroll event started\n this.cfg.runScroll({\n dimension: dimension,\n coordinate: param.virtualSize\n ? this.convert(coordinate, param)\n : coordinate,\n delta,\n outside,\n });\n }\n\n private getParams(dimension: DimensionType): Params {\n return this.params[dimension];\n }\n\n // check if scroll outside of region to avoid looping\n private wrapCoordinate(c: number, param: Params): number {\n if (c < 0) {\n return NO_COORDINATE;\n }\n\n if (typeof param.maxSize === 'number' && c > param.maxSize) {\n return param.maxSize;\n }\n return c;\n }\n\n // prevent already started scroll, performance optimization\n private cancelScroll(dimension: DimensionType) {\n this.preventArtificialScroll[dimension]?.();\n this.preventArtificialScroll[dimension] = null;\n }\n\n /* convert virtual to real and back, scale range */\n private convert(pos: number, param: Params, toReal = true): number {\n const minRange = param.clientSize;\n const from: [number, number] = [0, (param.virtualContentSize ?? minRange) - minRange];\n const to: [number, number] = [0, param.contentSize - param.virtualSize];\n if (toReal) {\n return scaleValue(pos, from, to);\n }\n return scaleValue(pos, to, from);\n }\n}\n","import type { DimensionType } from '@type';\n/**\n * Apply changes only if mousewheel event happened some time ago (scrollThrottling)\n */\nexport class LocalScrollTimer {\n /**\n * Last mw event time for trigger scroll function below\n * If mousewheel function was ignored we still need to trigger render\n */\n private mouseWheelScrollTimestamp: Record<DimensionType, number> = {\n rgCol: 0,\n rgRow: 0,\n };\n private lastKnownScrollCoordinate: Record<DimensionType, number> = {\n rgCol: 0,\n rgRow: 0,\n };\n\n constructor(private scrollThrottling = 10) {}\n\n setCoordinate(e: { dimension: DimensionType; coordinate: number }) {\n this.lastKnownScrollCoordinate[e.dimension] = e.coordinate;\n }\n\n /**\n * Remember last mw event time\n */\n latestScrollUpdate(dimension: DimensionType) {\n this.mouseWheelScrollTimestamp[dimension] = new Date().getTime();\n }\n\n /**\n * Check if scroll is ready to accept new value\n */\n isReady(type: DimensionType, coordinate: number) {\n const change = new Date().getTime() - this.mouseWheelScrollTimestamp[type];\n // apply after throttling\n return (\n change > this.scrollThrottling &&\n coordinate !== this.lastKnownScrollCoordinate[type]\n );\n }\n}\n","var debounce = require('./debounce'),\n isObject = require('./isObject');\n\n/** Error message constants. */\nvar FUNC_ERROR_TEXT = 'Expected a function';\n\n/**\n * Creates a throttled function that only invokes `func` at most once per\n * every `wait` milliseconds. The throttled function comes with a `cancel`\n * method to cancel delayed `func` invocations and a `flush` method to\n * immediately invoke them. Provide `options` to indicate whether `func`\n * should be invoked on the leading and/or trailing edge of the `wait`\n * timeout. The `func` is invoked with the last arguments provided to the\n * throttled function. Subsequent calls to the throttled function return the\n * result of the last `func` invocation.\n *\n * **Note:** If `leading` and `trailing` options are `true`, `func` is\n * invoked on the trailing edge of the timeout only if the throttled function\n * is invoked more than once during the `wait` timeout.\n *\n * If `wait` is `0` and `leading` is `false`, `func` invocation is deferred\n * until to the next tick, similar to `setTimeout` with a timeout of `0`.\n *\n * See [David Corbacho's article](https://css-tricks.com/debouncing-throttling-explained-examples/)\n * for details over the differences between `_.throttle` and `_.debounce`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to throttle.\n * @param {number} [wait=0] The number of milliseconds to throttle invocations to.\n * @param {Object} [options={}] The options object.\n * @param {boolean} [options.leading=true]\n * Specify invoking on the leading edge of the timeout.\n * @param {boolean} [options.trailing=true]\n * Specify invoking on the trailing edge of the timeout.\n * @returns {Function} Returns the new throttled function.\n * @example\n *\n * // Avoid excessively updating the position while scrolling.\n * jQuery(window).on('scroll', _.throttle(updatePosition, 100));\n *\n * // Invoke `renewToken` when the click event is fired, but not more than once every 5 minutes.\n * var throttled = _.throttle(renewToken, 300000, { 'trailing': false });\n * jQuery(element).on('click', throttled);\n *\n * // Cancel the trailing throttled invocation.\n * jQuery(window).on('popstate', throttled.cancel);\n */\nfunction throttle(func, wait, options) {\n var leading = true,\n trailing = true;\n\n if (typeof func != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n if (isObject(options)) {\n leading = 'leading' in options ? !!options.leading : leading;\n trailing = 'trailing' in options ? !!options.trailing : trailing;\n }\n return debounce(func, wait, {\n 'leading': leading,\n 'maxWait': wait,\n 'trailing': trailing\n });\n}\n\nmodule.exports = throttle;\n"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,5 @@
1
+ /*!
2
+ * Built by Revolist OU ❤️
3
+ */
4
+ import{i as t,l as e,k as i}from"./dimension.helpers-56298828.js";function s(e,i,s,l,u){const f=t(u,e);const h=d(i);let m;if(h){let t=f.itemIndex-(h.itemIndex||0);if(t){m=a(Math.abs(t),Object.assign(Object.assign({positiveDirection:t>-1},u),i))}}const v=n(l,u.realSize,f);if(m){const t=o(f,s,v,m,u);if(t.length){r(m.items,t,m)}}if(!m){const t=c({firstItemStart:f.start,firstItemIndex:f.itemIndex,origSize:u.originItemSize,maxSize:v,maxCount:s,sizes:u.sizes});m={items:t,start:0,end:t.length-1}}return m}function n(t,e,i){return Math.min(t+(i.end-i.start),e)}function r(t,e,i){t.splice(i.end+1,0,...e);if(i.start>=i.end&&!(i.start===i.end&&i.start===0)){i.start+=e.length}i.end+=e.length}function o(t,e,i,s,n){const r=h(s);const o=c({sizes:n.sizes,firstItemStart:r.end,firstItemIndex:r.itemIndex+1,origSize:n.originItemSize,maxSize:i-(r.end-t.start),maxCount:e});return o}function c(t,e=0){const i=[];let s=t.firstItemIndex;let n=e;while(n<=t.maxSize&&s<t.maxCount){const e=l(s,t.sizes,t.origSize);i.push({start:t.firstItemStart+n,end:t.firstItemStart+n+e,itemIndex:s,size:e});n+=e;s++}return i}function a(t,e){var i,s;const n=[...e.items];const r=n.length;let o={start:e.start,end:e.end};if(t>r){return undefined}if(e.positiveDirection){let i=h(e);let s=o.start;const c=s+t;for(;s<c;s++){const t=i.itemIndex+1;const c=l(t,e.sizes,e.originItemSize);if(i.end+c>e.realSize){break}let a=s%r;if(!n[a]){throw new Error("incorrect index")}n[a]=i={start:i.end,end:i.end+c,itemIndex:t,size:c};o.start++;o.end=a}}else{let c=d(e);const a=o.end;for(let u=0;u<t;u++){const t=((i=c===null||c===void 0?void 0:c.itemIndex)!==null&&i!==void 0?i:0)-1;const f=l(t,e.sizes,e.originItemSize);let d=a-u;d=(d<0?r+d:d)%r;if(!n[d]){console.error("incorrect index");break}const h=(s=c===null||c===void 0?void 0:c.start)!==null&&s!==void 0?s:0;n[d]=c={start:h-f,end:h,itemIndex:t,size:f};o.start=d;o.end--}}const c={start:(o.start<0?r+o.start:o.start)%r,end:(o.end<0?r+o.end:o.end)%r};return Object.assign({items:n},c)}function l(t,e,i=0){if(e&&e[t]){return e[t]}return i}function u(t,e,i,s){if(!i||!s){return false}return t>=i.start&&t<=i.end||t>i.end&&s.end===e}function f(t,e,i,s){var n;if(!i){return false}return e+t>((n=s===null||s===void 0?void 0:s.end)!==null&&n!==void 0?n:0)}function d(t){return t.items[t.start]}function h(t){return t.items[t.end]}function m(t,e,i,s){const n=[...t];const r=n.length;let o=s;let c=0;let a=e;if(!r){return[]}while(c<r){const t=n[a];t.start=o;t.size=i;t.end=t.start+i;o=t.end;a++;c++;if(a===r){a=0}}return n}function v(){return{items:[],start:0,end:0,virtualSize:0,realCount:0}}class z{get lastCoordinate(){return this.lastKnownScroll}set lastCoordinate(t){this.lastKnownScroll=t}constructor(t){this.type=t;this.lastKnownScroll=0;this.store=e(v());this.store.onChange("realCount",(()=>this.clearItems()));this.store.onChange("virtualSize",(()=>this.clearItems()))}setViewPortCoordinate(t,e,i=false){const n=this.store.get("virtualSize");if(!n){return}const c=1;const a=e.originItemSize*c;const l=a*2;const m=n+l;let v=0;if(e.realSize>n){v=e.realSize-n-a}let z=t;if(z<0){z=0}else if(z>v){z=v}this.lastCoordinate=z;z-=a;z=z<0?0:z<v?z:v;let b;if(i){b={items:[],start:0,end:0}}else{b=this.getItems()}const x=d(b);const I=h(b);let j={};if(!u(z,e.realSize,x,I)){j=Object.assign(Object.assign({},j),s(z,b,this.store.get("realCount"),m,e));this.setViewport(Object.assign({},j))}else if(f(z,m,x,I)){const t=[...b.items];const i=o(x,this.store.get("realCount"),m+z-x.start,b,{sizes:e.sizes,originItemSize:e.originItemSize});if(i.length){const e={start:this.store.get("start"),end:this.store.get("end")};r(t,i,e);j=Object.assign(Object.assign(Object.assign({},j),{items:[...t]}),e);this.setViewport(Object.assign({},j))}}}setOriginalSizes(t){const e=this.store.get("items");const s=e.length;if(!s){return}i(this.store,{items:m(e,this.store.get("start"),t,this.lastCoordinate)})}getItems(){return{items:this.store.get("items"),start:this.store.get("start"),end:this.store.get("end")}}setViewport(t){i(this.store,t)}clearItems(){this.store.set("items",[])}}export{z as V,o as a,c as b,f as c,d,h as e,s as g,u as i,a as r,m as s,r as u};
5
+ //# sourceMappingURL=viewport.store-d8e03528.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["getUpdatedItemsByPosition","pos","items","realCount","virtualSize","dimension","activeItem","getItemByPosition","firstItem","getFirstItem","toUpdate","changedOffsetStart","itemIndex","recombineByOffset","Math","abs","Object","assign","positiveDirection","maxSizeVirtualSize","getMaxVirtualSize","realSize","extra","addMissingItems","length","updateMissingAndRange","getItems","firstItemStart","start","firstItemIndex","origSize","originItemSize","maxSize","maxCount","sizes","end","min","missing","range","splice","existingCollection","lastItem","getLastItem","opt","currentSize","index","size","newSize","getItemSize","push","offset","data","newItems","itemsCount","newRange","undefined","i","newIndex","newEnd","Error","_a","newStart","console","error","_b","isActiveRange","first","last","isActiveRangeOutsideLastItem","s","setItemSizes","vpItems","initialIndex","lastCoordinate","count","item","initialState","ViewportStore","this","lastKnownScroll","value","constructor","type","store","createStore","onChange","clearItems","setViewPortCoordinate","position","force","viewportSize","get","frameOffset","singleOffsetInPx","outsize","maxCoordinate","allItems","setViewport","setOriginalSizes","setStore","set"],"sources":["src/store/vp/viewport.helpers.ts","src/store/vp/viewport.store.ts"],"sourcesContent":["import {\n DimensionSettingsState,\n PositionItem,\n ViewSettingSizeProp,\n ViewportStateItems,\n VirtualPositionItem,\n Range,\n} from '@type';\n\nimport { getItemByPosition } from '../dimension/dimension.helpers';\n\nexport type DimensionDataViewport = Pick<\n DimensionSettingsState,\n | 'indexes'\n | 'positionIndexes'\n | 'positionIndexToItem'\n | 'sizes'\n | 'originItemSize'\n | 'realSize'\n>;\n\nexport type ItemsToUpdate = Pick<ViewportStateItems, 'items' | 'start' | 'end'>;\n/**\n * Update items based on new scroll position\n * If viewport wasn't changed fully simple recombination of positions\n * Otherwise rebuild viewport items\n */\nexport function getUpdatedItemsByPosition<T extends ItemsToUpdate>(\n pos: number, // coordinate\n items: T,\n realCount: number,\n virtualSize: number,\n dimension: DimensionDataViewport,\n): ItemsToUpdate {\n const activeItem: PositionItem = getItemByPosition(dimension, pos);\n const firstItem = getFirstItem(items);\n let toUpdate: ItemsToUpdate | undefined;\n // do simple position recombination if items already present in viewport\n if (firstItem) {\n let changedOffsetStart = activeItem.itemIndex - (firstItem.itemIndex || 0);\n // if item changed\n if (changedOffsetStart) {\n // simple recombination\n toUpdate = recombineByOffset(Math.abs(changedOffsetStart), {\n positiveDirection: changedOffsetStart > -1,\n ...dimension,\n ...items,\n });\n }\n }\n\n const maxSizeVirtualSize = getMaxVirtualSize(\n virtualSize,\n dimension.realSize,\n activeItem,\n );\n // if partial recombination add items if revo-viewport has some space left\n if (toUpdate) {\n const extra = addMissingItems(\n activeItem,\n realCount,\n maxSizeVirtualSize,\n toUpdate,\n dimension,\n );\n if (extra.length) {\n updateMissingAndRange(toUpdate.items, extra, toUpdate);\n }\n }\n\n // new collection if no items after replacement full replacement\n if (!toUpdate) {\n const items = getItems({\n firstItemStart: activeItem.start,\n firstItemIndex: activeItem.itemIndex,\n origSize: dimension.originItemSize,\n maxSize: maxSizeVirtualSize,\n maxCount: realCount,\n sizes: dimension.sizes,\n });\n\n // range now comes from 0 to length - 1\n toUpdate = {\n items,\n start: 0,\n end: items.length - 1,\n };\n }\n return toUpdate;\n}\n\n// virtual size can differ based on scroll position if some big items are present\n// scroll can be in the middle of item and virtual size will be larger\n// so we need to exclude this part from virtual size hence it's already passed\nfunction getMaxVirtualSize(\n virtualSize: number,\n realSize: number,\n activeItem: PositionItem,\n) {\n return Math.min(virtualSize + (activeItem.end - activeItem.start), realSize);\n}\n\nexport function updateMissingAndRange(\n items: VirtualPositionItem[],\n missing: VirtualPositionItem[],\n range: Range,\n) {\n items.splice(range.end + 1, 0, ...missing);\n // update range if start larger after recombination\n if (\n range.start >= range.end &&\n !(range.start === range.end && range.start === 0)\n ) {\n range.start += missing.length;\n }\n range.end += missing.length;\n}\n\n/**\n * If partial replacement\n * this function adds items if viewport has some space left\n */\nexport function addMissingItems<T extends ItemsToUpdate>(\n firstItem: PositionItem,\n realCount: number,\n virtualSize: number,\n existingCollection: T,\n dimension: Pick<DimensionSettingsState, 'sizes' | 'originItemSize'>,\n): VirtualPositionItem[] {\n const lastItem: VirtualPositionItem = getLastItem(existingCollection);\n const items = getItems({\n sizes: dimension.sizes,\n firstItemStart: lastItem.end,\n firstItemIndex: lastItem.itemIndex + 1,\n origSize: dimension.originItemSize,\n maxSize: virtualSize - (lastItem.end - firstItem.start),\n maxCount: realCount,\n });\n return items;\n}\n\n/**\n * Get wiewport items parameters\n * caching position and calculating items count in viewport\n */\nexport function getItems(\n opt: {\n firstItemIndex: number;\n firstItemStart: number;\n origSize: number;\n maxSize: number; // virtual size\n maxCount: number; // real item count, where the last item\n sizes?: ViewSettingSizeProp;\n },\n currentSize = 0,\n) {\n const items: VirtualPositionItem[] = [];\n\n let index = opt.firstItemIndex;\n let size = currentSize;\n\n // max size or max count\n while (size <= opt.maxSize && index < opt.maxCount) {\n const newSize = getItemSize(index, opt.sizes, opt.origSize);\n items.push({\n start: opt.firstItemStart + size,\n end: opt.firstItemStart + size + newSize,\n itemIndex: index,\n size: newSize,\n });\n size += newSize;\n index++;\n }\n return items;\n}\n\n/**\n * Do batch items recombination\n * If items not overlapped with existing viewport returns null\n */\ntype RecombindDimensionData = Pick<\n DimensionSettingsState,\n 'sizes' | 'realSize' | 'originItemSize'\n>;\ntype RecombineOffsetData = {\n positiveDirection: boolean;\n} & ItemsToUpdate &\n RecombindDimensionData;\nexport function recombineByOffset(\n offset: number,\n data: RecombineOffsetData,\n): ItemsToUpdate | undefined {\n const newItems = [...data.items];\n const itemsCount = newItems.length;\n let newRange = {\n start: data.start,\n end: data.end,\n };\n\n // if offset out of revo-viewport, makes sense whole redraw\n if (offset > itemsCount) {\n return undefined;\n }\n\n // is direction of scroll positive\n if (data.positiveDirection) {\n // push item to the end\n let lastItem: VirtualPositionItem = getLastItem(data);\n\n let i = newRange.start;\n const length = i + offset;\n for (; i < length; i++) {\n const newIndex = lastItem.itemIndex + 1;\n const size = getItemSize(\n newIndex,\n data.sizes,\n data.originItemSize,\n );\n\n // if item overlapped limit break a loop\n if (lastItem.end + size > data.realSize) {\n break;\n }\n\n // new item index to recombine\n let newEnd = i % itemsCount;\n\n // item should always present, we do not create new item, we recombine them\n if (!newItems[newEnd]) {\n throw new Error('incorrect index');\n }\n\n // do recombination\n newItems[newEnd] = lastItem = {\n start: lastItem.end,\n end: lastItem.end + size,\n itemIndex: newIndex,\n size: size,\n };\n // update range\n newRange.start++;\n newRange.end = newEnd;\n }\n\n // direction is negative\n } else {\n // push item to the start\n let firstItem = getFirstItem(data);\n\n const end = newRange.end;\n for (let i = 0; i < offset; i++) {\n const newIndex = (firstItem?.itemIndex ?? 0) - 1;\n const size = getItemSize(\n newIndex,\n data.sizes,\n data.originItemSize,\n );\n\n // new item index to recombine\n let newStart = end - i;\n newStart = (newStart < 0 ? itemsCount + newStart : newStart) % itemsCount;\n\n // item should always present, we do not create new item, we recombine them\n if (!newItems[newStart]) {\n console.error('incorrect index');\n break;\n }\n\n // do recombination\n const firstItemStart = firstItem?.start ?? 0;\n newItems[newStart] = firstItem = {\n start: firstItemStart - size,\n end: firstItemStart,\n itemIndex: newIndex,\n size: size,\n };\n // update range\n newRange.start = newStart;\n newRange.end--;\n }\n }\n const range = {\n start:\n (newRange.start < 0 ? itemsCount + newRange.start : newRange.start) %\n itemsCount,\n end:\n (newRange.end < 0 ? itemsCount + newRange.end : newRange.end) %\n itemsCount,\n };\n return {\n items: newItems,\n ...range,\n };\n}\n\nfunction getItemSize(\n index: number,\n sizes?: ViewSettingSizeProp,\n origSize = 0,\n): number {\n if (sizes && sizes[index]) {\n return sizes[index];\n }\n return origSize;\n}\n\n/**\n * Verify if position is in range of the PositionItem, start and end are included\n */\nexport function isActiveRange(\n pos: number,\n realSize: number,\n first?: PositionItem,\n last?: PositionItem,\n): boolean {\n if (!first || !last) {\n return false;\n }\n // if position is in range of first item\n // or position is after first item and last item is the last item in real size\n return (\n (pos >= first.start && pos <= first.end) ||\n (pos > first.end && last.end === realSize)\n );\n}\n\nexport function isActiveRangeOutsideLastItem(\n pos: number,\n virtualSize: number,\n firstItem?: PositionItem,\n lastItem?: PositionItem,\n) {\n // if no first item, means no items in viewport\n if (!firstItem) {\n return false;\n }\n return virtualSize + pos > (lastItem?.end ?? 0);\n}\n\nexport function getFirstItem(\n s: ItemsToUpdate,\n) {\n return s.items[s.start];\n}\n\nexport function getLastItem(s: ItemsToUpdate): VirtualPositionItem {\n return s.items[s.end];\n}\n\n/**\n * Set items sizes from start index to end\n * @param vpItems\n * @param start\n * @param size\n * @param lastCoordinate\n * @returns\n */\nexport function setItemSizes(\n vpItems: VirtualPositionItem[],\n initialIndex: number,\n size: number,\n lastCoordinate: number,\n) {\n const items = [...vpItems];\n const count = items.length;\n\n let pos = lastCoordinate;\n let i = 0;\n let start = initialIndex;\n\n // viewport not inited\n if (!count) {\n return [];\n }\n // loop through array from initial item after recombination\n while (i < count) {\n const item = items[start];\n item.start = pos;\n item.size = size;\n item.end = item.start + size;\n pos = item.end;\n // loop by start index\n start++;\n i++;\n\n // if start index out of array, reset it\n if (start === count) {\n start = 0;\n }\n }\n return items;\n}\n","import {\n DimensionDataViewport,\n addMissingItems,\n getFirstItem,\n getLastItem,\n getUpdatedItemsByPosition,\n isActiveRange,\n setItemSizes,\n updateMissingAndRange,\n isActiveRangeOutsideLastItem,\n ItemsToUpdate,\n} from './viewport.helpers';\nimport { createStore } from '@stencil/store';\nimport { type Observable, setStore } from '../../utils/store.utils';\nimport type {\n VirtualPositionItem,\n ViewportState,\n MultiDimensionType,\n} from '@type';\n\n/**\n * Viewport store\n * Used for virtualization (process of rendering only visible part of data)\n * Redraws viewport based on position and dimension\n */\nfunction initialState(): ViewportState {\n return {\n // virtual item information per rendered item\n items: [],\n // virtual dom item order to render\n start: 0,\n end: 0,\n\n // size of viewport in px\n virtualSize: 0,\n\n // total number of items\n realCount: 0,\n };\n}\n\n/**\n * Viewport store class\n */\nexport class ViewportStore {\n readonly store: Observable<ViewportState>;\n\n // last coordinate for store position restore\n private lastKnownScroll = 0;\n\n get lastCoordinate() {\n return this.lastKnownScroll;\n }\n set lastCoordinate(value: number) {\n this.lastKnownScroll = value;\n }\n constructor(readonly type: MultiDimensionType) {\n this.store = createStore(initialState());\n // drop items on real size change, require a new item set\n this.store.onChange('realCount', () => this.clearItems());\n // drop items on virtual size change, require a new item set\n this.store.onChange('virtualSize', () => this.clearItems());\n }\n\n /**\n * Render viewport based on coordinate\n * It's the main method for draw\n * Use force if you want to re-render viewport\n */\n setViewPortCoordinate(position: number, dimension: DimensionDataViewport, force = false) {\n const viewportSize = this.store.get('virtualSize');\n // no visible data to calculate\n if (!viewportSize) {\n return;\n }\n\n const frameOffset = 1;\n const singleOffsetInPx = dimension.originItemSize * frameOffset;\n // add offset to virtual size from both sides\n const outsize = singleOffsetInPx * 2;\n // math virtual size is based on visible area + 2 items outside of visible area\n const virtualSize = viewportSize + outsize;\n\n // expected no scroll if real size less than virtual size, position is 0\n let maxCoordinate = 0;\n // if there is nodes outside of viewport, max coordinate has to be adjusted\n if (dimension.realSize > viewportSize) {\n // max coordinate is real size minus virtual/rendered space\n maxCoordinate = dimension.realSize - viewportSize - singleOffsetInPx;\n }\n\n let pos = position;\n // limit position to max and min coordinates\n if (pos < 0) {\n pos = 0;\n } else if (pos > maxCoordinate) {\n pos = maxCoordinate;\n }\n\n // store last coordinate for further restore on redraw\n this.lastCoordinate = pos;\n\n // actual position is less than first item start based on offset\n pos -= singleOffsetInPx;\n pos = pos < 0 ? 0 : pos < maxCoordinate ? pos : maxCoordinate;\n\n let allItems: ItemsToUpdate;\n // if force clear all items and start from 0\n if (force) {\n allItems = {\n items: [],\n start: 0,\n end: 0,\n };\n } else {\n allItems = this.getItems()\n }\n\n const firstItem: VirtualPositionItem | undefined = getFirstItem(allItems);\n const lastItem: VirtualPositionItem | undefined = getLastItem(allItems);\n\n let toUpdate: Partial<ViewportState> = {};\n\n // left position changed\n // verify if new position is in range of previously rendered first item\n if (!isActiveRange(pos, dimension.realSize, firstItem, lastItem)) {\n toUpdate = {\n ...toUpdate,\n ...getUpdatedItemsByPosition(\n pos,\n allItems,\n this.store.get('realCount'),\n virtualSize,\n dimension,\n ),\n };\n this.setViewport({ ...toUpdate });\n // verify is render area is outside of last item\n } else if (\n isActiveRangeOutsideLastItem(pos, virtualSize, firstItem, lastItem)\n ) {\n const items = [...allItems.items];\n // check is any item missing for fulfill content\n const missing = addMissingItems(\n firstItem,\n this.store.get('realCount'),\n virtualSize + pos - firstItem.start,\n allItems,\n {\n sizes: dimension.sizes,\n originItemSize: dimension.originItemSize,\n },\n );\n\n // update missing items\n if (missing.length) {\n const range = {\n start: this.store.get('start'),\n end: this.store.get('end'),\n };\n updateMissingAndRange(items, missing, range);\n toUpdate = {\n ...toUpdate,\n items: [...items],\n ...range,\n };\n this.setViewport({ ...toUpdate });\n }\n }\n }\n\n /**\n * Set sizes for existing items\n */\n setOriginalSizes(size: number) {\n const items = this.store.get('items');\n const count = items.length;\n // viewport not inited\n if (!count) {\n return;\n }\n\n setStore(this.store, {\n items: setItemSizes(\n items,\n this.store.get('start'),\n size,\n this.lastCoordinate,\n ),\n });\n }\n\n getItems(): ItemsToUpdate {\n return {\n items: this.store.get('items'),\n start: this.store.get('start'),\n end: this.store.get('end'),\n };\n }\n\n setViewport(data: Partial<ViewportState>) {\n setStore(this.store, data);\n }\n\n clearItems() {\n this.store.set('items', []);\n }\n}\n"],"mappings":"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","ignoreList":[]}
@@ -10,17 +10,22 @@ export declare class Clipboard {
10
10
  readonly: boolean;
11
11
  /**
12
12
  * Paste 1. Fired before paste applied to the grid
13
- * @property {string} raw - raw data from clipboard
14
- * @property {ClipboardEvent} event - original event
15
- * @property {boolean} defaultPrevented - if true, paste will be canceled
13
+ * defaultPrevented - if true, paste will be canceled
16
14
  */
17
- beforePaste: EventEmitter;
15
+ beforePaste: EventEmitter<{
16
+ raw: string;
17
+ isHTML: boolean;
18
+ event: ClipboardEvent;
19
+ dataText: string;
20
+ }>;
18
21
  /**
19
22
  * Paste 2. Fired before paste applied to the grid and after data parsed
20
- * @property {string} raw - raw data from clipboard
21
- * @property {string[][]} parsed - parsed data
22
23
  */
23
- beforePasteApply: EventEmitter;
24
+ beforePasteApply: EventEmitter<{
25
+ raw: string;
26
+ parsed: string[][];
27
+ event: ClipboardEvent;
28
+ }>;
24
29
  /**
25
30
  * Paste 3. Internal method. When data region is ready pass it to the top.
26
31
  * @property {string[][]} data - data to paste
@@ -29,39 +34,42 @@ export declare class Clipboard {
29
34
  pasteRegion: EventEmitter<string[][]>;
30
35
  /**
31
36
  * Paste 4. Fired after paste applied to the grid
32
- * @property {string} raw - raw data from clipboard
33
- * @property {string[][]} parsed - parsed data
34
- * @property {ClipboardEvent} event - original event
35
- * @property {boolean} defaultPrevented - if true, paste will be canceled
37
+ * defaultPrevented - if true, paste will be canceled
36
38
  */
37
- afterPasteApply: EventEmitter;
39
+ afterPasteApply: EventEmitter<{
40
+ raw: string;
41
+ parsed: string[][];
42
+ event: ClipboardEvent;
43
+ }>;
38
44
  /**
39
45
  * Cut 1. Fired before cut triggered
40
- * @property {ClipboardEvent} event - original event
41
- * @property {boolean} defaultPrevented - if true, cut will be canceled
46
+ * defaultPrevented - if true, cut will be canceled
42
47
  */
43
- beforeCut: EventEmitter;
48
+ beforeCut: EventEmitter<{
49
+ event: ClipboardEvent;
50
+ }>;
44
51
  /**
45
52
  * Cut 2. Clears region when cut is done
46
53
  */
47
54
  clearRegion: EventEmitter<DataTransfer>;
48
55
  /**
49
56
  * Copy 1. Fired before copy triggered
50
- * @property {ClipboardEvent} event - original event
51
- * @property {boolean} defaultPrevented - if true, copy will be canceled
57
+ * defaultPrevented - if true, copy will be canceled
52
58
  */
53
- beforeCopy: EventEmitter;
59
+ beforeCopy: EventEmitter<{
60
+ event: ClipboardEvent;
61
+ }>;
54
62
  /**
55
63
  * Copy Method 1. Fired before copy applied to the clipboard from outside.
56
- * @property {DataTransfer} event - original event
57
- * @property {string} data - data to copy
58
- * @property {boolean} defaultPrevented - if true, copy will be canceled
64
+ * defaultPrevented - if true, copy will be canceled
59
65
  */
60
- beforeCopyApply: EventEmitter;
66
+ beforeCopyApply: EventEmitter<{
67
+ event: DataTransfer;
68
+ data?: string[][];
69
+ }>;
61
70
  /**
62
71
  * Copy 2. Fired when region copied
63
- * @property {DataTransfer} data - data to copy
64
- * @property {boolean} defaultPrevented - if true, copy will be canceled
72
+ * defaultPrevented - if true, copy will be canceled
65
73
  */
66
74
  copyRegion: EventEmitter<DataTransfer>;
67
75
  onPaste(e: ClipboardEvent): void;
@@ -33,7 +33,7 @@ export default class ColumnService {
33
33
  };
34
34
  getTransformedDataToApply(start: Cell, data: DataFormat[][]): {
35
35
  changed: DataLookup;
36
- range: RangeArea;
36
+ range: RangeArea | null;
37
37
  };
38
38
  getRangeStaticData(d: RangeArea, value: DataFormat): DataLookup;
39
39
  getRangeTransformedToProps(d: RangeArea, store: Observable<DSourceState<DataType, DimensionRows>>): {
@@ -6,5 +6,5 @@ import { RangeArea } from "../../types/index";
6
6
  export declare class RowHighlightPlugin {
7
7
  private currentRange;
8
8
  selectionChange(e: RangeArea, renderedRows: Map<number, VNode>): void;
9
- isRowFocused(y: number): boolean;
9
+ isRowFocused(y: number): boolean | null;
10
10
  }
@@ -55,7 +55,7 @@ export declare class RevoEdit {
55
55
  * Closes editor when called.
56
56
  * @param preventFocus - if true, editor will not be closed & next cell will not be focused.
57
57
  */
58
- onSave(val: SaveData, preventFocus?: boolean): void;
58
+ onSave(val?: SaveData, preventFocus?: boolean): void;
59
59
  componentWillRender(): void;
60
60
  componentDidRender(): void;
61
61
  disconnectedCallback(): void;
@@ -12,14 +12,14 @@ import { EditCell, EditorBase, SaveData } from "../../types/index";
12
12
  * Closes editor when called
13
13
  * @param preventFocus - if true editor will not be closed and next cell will not be focused
14
14
  */
15
- export type SaveCallback = (value: SaveData, preventFocus: boolean) => void;
15
+ export type SaveCallback = (value: SaveData | undefined, preventFocus: boolean) => void;
16
16
  export declare class TextEditor implements EditorBase {
17
17
  column: ColumnRegular;
18
18
  private saveCallback?;
19
19
  private editInput;
20
20
  element: Element | null;
21
21
  editCell?: EditCell;
22
- constructor(column: ColumnRegular, saveCallback?: SaveCallback);
22
+ constructor(column: ColumnRegular, saveCallback?: SaveCallback | undefined);
23
23
  /**
24
24
  * Callback triggered on cell editor render
25
25
  */
@@ -32,7 +32,7 @@ export declare class TextEditor implements EditorBase {
32
32
  /**
33
33
  * Get value from input
34
34
  */
35
- getValue(): string;
35
+ getValue(): string | undefined;
36
36
  /**
37
37
  * Render method for Editor plugin.
38
38
  * Renders input element with passed data from cell.
@@ -5,8 +5,8 @@ import { RangeArea } from "../../types/index";
5
5
  type Props = {
6
6
  column: VirtualPositionItem;
7
7
  additionalData: any;
8
- data?: ColumnTemplateProp;
9
- range?: RangeArea;
8
+ data: ColumnTemplateProp;
9
+ range?: RangeArea | null;
10
10
  canResize?: boolean;
11
11
  canFilter?: boolean;
12
12
  onResize?(e: ResizeEvent): void;
@@ -38,11 +38,11 @@ export declare class ResizeDirective {
38
38
  private changeY;
39
39
  private parent;
40
40
  private resizeState;
41
- private activeResizer;
41
+ private activeResizer?;
42
42
  private disableCalcMap;
43
43
  private mouseMoveFunc;
44
44
  private mouseUpFunc;
45
- constructor(initialProps: Partial<ResizeProps>, $event?: (e: ResizeEvent) => void);
45
+ constructor(initialProps: Partial<ResizeProps>, $event?: ((e: ResizeEvent) => void) | undefined);
46
46
  set($el: HTMLElement): void;
47
47
  emitEvent(eventName: string, additionalOptions?: any): void;
48
48
  private static isTouchEvent;
@@ -1,18 +1,18 @@
1
1
  import { EventData } from './selection.utils';
2
2
  import { DSourceState } from "../../store/index";
3
3
  import ColumnService from '../data/column.service';
4
- import { DataLookup, DataType, DimensionSettingsState, TempRange, ChangedRange, BeforeRangeSaveDataDetails, RangeArea, Cell, DimensionRows } from "../../types/index";
4
+ import { DataLookup, DataType, DimensionSettingsState, TempRange, ChangedRange, BeforeRangeSaveDataDetails, RangeArea, Cell, DimensionRows, Nullable } from "../../types/index";
5
5
  import { Observable } from '../../utils/store.utils';
6
6
  type Config = {
7
7
  dimensionRow: Observable<DimensionSettingsState>;
8
8
  dimensionCol: Observable<DimensionSettingsState>;
9
9
  columnService: ColumnService;
10
10
  dataStore: Observable<DSourceState<DataType, DimensionRows>>;
11
- setTempRange(e: TempRange | null): Event;
11
+ setTempRange(e: Nullable<TempRange> | null): Event;
12
12
  selectionChanged(e: ChangedRange): Event;
13
13
  rangeCopy(e: ChangedRange): Event;
14
14
  rangeDataApply(e: BeforeRangeSaveDataDetails): CustomEvent;
15
- setRange(e: RangeArea): boolean;
15
+ setRange(e: RangeArea | null): boolean;
16
16
  clearRangeDataApply(e: {
17
17
  range: RangeArea;
18
18
  }): CustomEvent<{
@@ -37,7 +37,7 @@ export declare class AutoFillService {
37
37
  * @param range
38
38
  * @param selectionFocus
39
39
  */
40
- renderAutofill(range: RangeArea, selectionFocus: Cell): any;
40
+ renderAutofill(range: RangeArea | null, selectionFocus: Cell): any;
41
41
  private autoFillHandler;
42
42
  get isAutoFill(): boolean;
43
43
  /**
@@ -60,13 +60,15 @@ export declare class AutoFillService {
60
60
  /**
61
61
  * Clear current range selection on mouse up and mouse leave events
62
62
  */
63
- clearAutoFillSelection(focus: Cell, oldRange: RangeArea): void;
63
+ clearAutoFillSelection(focus: Cell | null, oldRange: RangeArea | null): void;
64
64
  /**
65
65
  * Reset autofill state
66
66
  */
67
67
  private resetAutoFillState;
68
- /** Trigger range apply events and handle responses */
69
- onRangeApply(data: DataLookup, range: RangeArea): void;
68
+ /**
69
+ * Trigger range apply events and handle responses
70
+ */
71
+ onRangeApply(data: DataLookup, range: RangeArea | null): void;
70
72
  /** Apply range and copy data during range application */
71
73
  private applyRangeWithData;
72
74
  /**
@@ -1,5 +1,5 @@
1
1
  import { EventData } from './selection.utils';
2
- import { Cell, RangeArea, SelectionStoreState } from "../../types/index";
2
+ import { Cell, Nullable, RangeArea, SelectionStoreState } from "../../types/index";
3
3
  import { Observable } from '../../utils/store.utils';
4
4
  type Config = {
5
5
  selectionStore: Observable<SelectionStoreState>;
@@ -9,16 +9,16 @@ type Config = {
9
9
  focus(focus: Cell, changes: Partial<Cell>, focusNextViewport?: number): boolean;
10
10
  getData(): any;
11
11
  internalPaste(): void;
12
- range(range: RangeArea): boolean;
12
+ range(range: RangeArea | null): boolean;
13
13
  selectAll(): void;
14
14
  };
15
15
  export declare class KeyboardService {
16
16
  private sv;
17
17
  constructor(sv: Config);
18
- keyDown(e: KeyboardEvent, canRange: boolean, isEditMode: boolean, { range, focus }: Pick<EventData, 'range' | 'focus'>): Promise<void>;
18
+ keyDown(e: KeyboardEvent, canRange: boolean, isEditMode: boolean, { range, focus }: Nullable<Pick<EventData, 'range' | 'focus'>>): Promise<void>;
19
19
  private selectAll;
20
20
  keyChangeSelection(e: KeyboardEvent, canRange: boolean): Promise<boolean>;
21
- keyPositionChange(changes: Partial<Cell>, range?: RangeArea, focus?: Cell, isMulti?: boolean): boolean;
21
+ keyPositionChange(changes: Partial<Cell>, range: RangeArea | null, focus: Cell | null, isMulti?: boolean): boolean;
22
22
  /** Monitor key direction changes */
23
23
  changeDirectionKey(e: KeyboardEvent, canRange: boolean): {
24
24
  changes: Partial<Cell>;
@@ -3,7 +3,7 @@ import ColumnService from '../data/column.service';
3
3
  import { DSourceState } from "../../store/index";
4
4
  import { EventData } from './selection.utils';
5
5
  import { Observable, SelectionStoreState, DimensionSettingsState, DataType, DimensionRows, ColumnRegular, DimensionCols, Cell, DragStartEvent } from '../../components';
6
- import { EditCellStore, MultiDimensionType } from "../../types/index";
6
+ import { MultiDimensionType, Nullable, RangeClipboardCopyEventProps, RangeClipboardPasteEvent } from "../../types/index";
7
7
  import { FocusRenderEvent, ApplyFocusEvent, AllDimensionType } from "../../types/index";
8
8
  import { Editors, BeforeSaveDataDetails, BeforeEdit, RangeArea, TempRange, ChangedRange, BeforeRangeSaveDataDetails, SaveDataDetails } from "../../types/index";
9
9
  /**
@@ -117,7 +117,7 @@ export declare class OverlaySelection {
117
117
  /**
118
118
  * Set temp range area during autofill.
119
119
  */
120
- setTempRange: EventEmitter<TempRange | null>;
120
+ setTempRange: EventEmitter<Nullable<TempRange> | null>;
121
121
  /**
122
122
  * Before cell get focused.
123
123
  * To prevent the default behavior of applying the edit data, you can call `e.preventDefault()`.
@@ -139,8 +139,17 @@ export declare class OverlaySelection {
139
139
  */
140
140
  rangeEditApply: EventEmitter<BeforeRangeSaveDataDetails>;
141
141
  /** Range copy. */
142
- rangeClipboardCopy: EventEmitter;
143
- rangeClipboardPaste: EventEmitter;
142
+ /**
143
+ * Range copy event.
144
+ * This event is triggered when data is ready to be copied to the clipboard.
145
+ * If you want to prevent the default behavior of copying data, you can call `e.preventDefault()`.
146
+ * If you want to modify the data that will be copied to the clipboard, modify the `data` property of the event object.
147
+ */
148
+ rangeClipboardCopy: EventEmitter<RangeClipboardCopyEventProps>;
149
+ /**
150
+ * Range paste event.
151
+ */
152
+ rangeClipboardPaste: EventEmitter<RangeClipboardPasteEvent>;
144
153
  /**
145
154
  * Before key up event proxy, used to prevent key up trigger.
146
155
  * If you have some custom behaviour event, use this event to check if it wasn't processed by internal logic.
@@ -159,16 +168,16 @@ export declare class OverlaySelection {
159
168
  */
160
169
  beforeCellSave: EventEmitter;
161
170
  element: HTMLElement;
162
- private clipboard;
171
+ private clipboard?;
163
172
  protected columnService: ColumnService;
164
173
  private keyboardService;
165
174
  private autoFillService;
166
- private orderEditor;
167
- private revogrEdit;
175
+ private orderEditor?;
176
+ private revogrEdit?;
168
177
  private unsubscribeSelectionStore;
169
178
  onMouseMove(e: MouseEvent | TouchEvent): void;
170
179
  /**
171
- * Action finished inside of the document.
180
+ * Action finished inside the document.
172
181
  * Pointer left document, clear any active operation.
173
182
  */
174
183
  onMouseUp(): void;
@@ -220,7 +229,7 @@ export declare class OverlaySelection {
220
229
  protected doEdit(val?: string): void;
221
230
  /**
222
231
  * Close editor event triggered
223
- * @param details - if requires focus next
232
+ * @param details - if it requires focus next
224
233
  */
225
234
  private closeEdit;
226
235
  /**
@@ -237,8 +246,8 @@ export declare class OverlaySelection {
237
246
  /**
238
247
  * Verify if edit allowed.
239
248
  */
240
- protected canEdit(): boolean;
241
- get edited(): EditCellStore;
249
+ protected canEdit(): boolean | null;
250
+ get edited(): import("@type").EditCellStore | null;
242
251
  /**
243
252
  * Sets the focus on a cell and optionally edits a range.
244
253
  */
@@ -1,12 +1,15 @@
1
- import { DimensionSettingsState, Cell, RangeArea, RangeAreaCss } from "../../types/index";
1
+ import { DSourceState } from "../../store/index";
2
+ import { DimensionSettingsState, Cell, RangeArea, RangeAreaCss, DataLookup, DimensionRows, DataType } from "../../types/index";
3
+ import { Observable } from '../../utils/store.utils';
2
4
  export type EventData = {
3
5
  el: HTMLElement;
4
6
  rows: DimensionSettingsState;
5
7
  cols: DimensionSettingsState;
6
8
  lastCell: Cell;
7
- focus: Cell;
8
- range: RangeArea;
9
+ focus: Cell | null;
10
+ range: RangeArea | null;
9
11
  };
12
+ export declare function collectModelsOfRange(data: DataLookup, store: Observable<DSourceState<DataType, DimensionRows>>): DataLookup;
10
13
  export declare function getFocusCellBasedOnEvent(e: MouseEvent | TouchEvent, data: EventData): Cell | null;
11
14
  /**
12
15
  * Calculate cell based on x, y position
@@ -21,7 +24,7 @@ export declare function getCoordinate(range: RangeArea, focus: Cell, changes: Pa
21
24
  x: number;
22
25
  y: number;
23
26
  };
24
- };
27
+ } | null;
25
28
  /**
26
29
  * Check if the x coordinate of the cell position is after or equal to the x coordinate of the last cell position
27
30
  * or if the y coordinate of the cell position is after or equal to the y coordinate of the last cell position
@@ -318,7 +318,7 @@ export declare class RevoGridComponent {
318
318
  /** Column updated */
319
319
  aftercolumnsset: EventEmitter<{
320
320
  columns: ColumnCollection;
321
- order: Record<ColumnProp, 'asc' | 'desc'>;
321
+ order: Record<ColumnProp, 'asc' | 'desc' | undefined>;
322
322
  }>;
323
323
  /**
324
324
  * Emitted before applying a filter to the data source.
@@ -421,7 +421,7 @@ export declare class RevoGridComponent {
421
421
  setDataAt(data: {
422
422
  row: number;
423
423
  col: number;
424
- } & AllDimensionType): Promise<void>;
424
+ } & AllDimensionType): Promise<void | undefined>;
425
425
  /**
426
426
  * Scrolls viewport to specified row by index.
427
427
  */
@@ -473,8 +473,9 @@ export declare class RevoGridComponent {
473
473
  * @param column - full column details to update
474
474
  * @param index - virtual column index
475
475
  * @param order - order to apply
476
+ * @param additive - if false will replace current order
476
477
  */
477
- updateColumnSorting(column: ColumnRegular, index: number, order: 'asc' | 'desc', additive: boolean): Promise<ColumnRegular>;
478
+ updateColumnSorting(column: ColumnRegular, index: number, order: 'asc' | 'desc' | undefined, additive: boolean): Promise<ColumnRegular>;
478
479
  /**
479
480
  * Clears column sorting
480
481
  */
@@ -504,12 +505,12 @@ export declare class RevoGridComponent {
504
505
  * Get the currently selected Range.
505
506
  */
506
507
  getSelectedRange(): Promise<RangeArea | null>;
507
- private clickTrackForFocusClear;
508
+ private clickTrackForFocusClear?;
508
509
  mousedownHandle(event: MouseEvent | TouchEvent): void;
509
510
  /**
510
511
  * To keep your elements from losing focus use mouseup/touchend e.preventDefault();
511
512
  */
512
- mouseupHandle(event: MouseEvent | TouchEvent): void;
513
+ mouseupHandle(event: MouseEvent | TouchEvent): Promise<void>;
513
514
  /** Drag events */
514
515
  onRowDragStarted(e: CustomEvent<{
515
516
  pos: PositionItem;
@@ -550,7 +551,7 @@ export declare class RevoGridComponent {
550
551
  disableVirtualXChanged(newVal?: boolean, prevVal?: boolean): void;
551
552
  rowSizeChanged(s: number): void;
552
553
  themeChanged(t: Theme, _?: Theme, __?: string, init?: boolean): void;
553
- dataSourceChanged<T extends DataType>(newVal: T[], _: T[] | undefined, watchName: string): void;
554
+ dataSourceChanged<T extends DataType>(newVal: T[] | undefined, _: T[] | undefined, watchName: string): void;
554
555
  disableVirtualYChanged(newVal?: boolean, prevVal?: boolean): void;
555
556
  rowDefChanged(after: RowDefinition[], before?: RowDefinition[], _watchName?: string, forceUpdate?: boolean): void;
556
557
  trimmedRowsChanged(newVal?: Record<number, boolean>): void;