@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
@@ -6,7 +6,7 @@ import ColumnService from "../data/column.service";
6
6
  import { codesLetter } from "../../utils/key.codes";
7
7
  import { MOBILE_CLASS, SELECTION_BORDER_CLASS } from "../../utils/consts";
8
8
  import { getRange, isRangeSingleCell, } from "../../store/index";
9
- import { getElStyle, getFocusCellBasedOnEvent, } from "./selection.utils";
9
+ import { collectModelsOfRange, getElStyle, getFocusCellBasedOnEvent, } from "./selection.utils";
10
10
  import { isEditInput } from "../editors/edit.utils";
11
11
  import { KeyboardService } from "./keyboard.service";
12
12
  import { AutoFillService } from "./autofill.service";
@@ -18,7 +18,6 @@ export class OverlaySelection {
18
18
  constructor() {
19
19
  this.keyboardService = null;
20
20
  this.autoFillService = null;
21
- this.revogrEdit = null;
22
21
  this.unsubscribeSelectionStore = [];
23
22
  this.readonly = undefined;
24
23
  this.range = undefined;
@@ -38,19 +37,21 @@ export class OverlaySelection {
38
37
  // #endregion
39
38
  // #region Listeners
40
39
  onMouseMove(e) {
40
+ var _a;
41
41
  if (this.selectionStore.get('focus')) {
42
- this.autoFillService.selectionMouseMove(e);
42
+ (_a = this.autoFillService) === null || _a === void 0 ? void 0 : _a.selectionMouseMove(e);
43
43
  }
44
44
  }
45
45
  /**
46
- * Action finished inside of the document.
46
+ * Action finished inside the document.
47
47
  * Pointer left document, clear any active operation.
48
48
  */
49
49
  onMouseUp() {
50
- // Clear auto fill selection
50
+ var _a;
51
+ // Clear autofill selection
51
52
  // when pointer left document,
52
53
  // clear any active operation.
53
- this.autoFillService.clearAutoFillSelection(this.selectionStore.get('focus'), this.selectionStore.get('range'));
54
+ (_a = this.autoFillService) === null || _a === void 0 ? void 0 : _a.clearAutoFillSelection(this.selectionStore.get('focus'), this.selectionStore.get('range'));
54
55
  }
55
56
  /**
56
57
  * Row drag started.
@@ -94,10 +95,10 @@ export class OverlaySelection {
94
95
  // clear subscriptions
95
96
  this.unsubscribeSelectionStore.forEach(v => v());
96
97
  this.unsubscribeSelectionStore.length = 0;
97
- this.unsubscribeSelectionStore.push(s.onChange('nextFocus', (v) => this.doFocus(v, v)));
98
+ this.unsubscribeSelectionStore.push(s.onChange('nextFocus', (v) => v && this.doFocus(v, v)));
98
99
  this.keyboardService = new KeyboardService({
99
100
  selectionStore: s,
100
- range: r => this.triggerRangeEvent(r),
101
+ range: r => !!r && this.triggerRangeEvent(r),
101
102
  focus: (f, changes, focusNextViewport) => {
102
103
  if (focusNextViewport) {
103
104
  this.beforeNextViewportFocus.emit(f);
@@ -114,7 +115,8 @@ export class OverlaySelection {
114
115
  this.doEdit(val);
115
116
  },
116
117
  cancel: async () => {
117
- await this.revogrEdit.cancelChanges();
118
+ var _a;
119
+ await ((_a = this.revogrEdit) === null || _a === void 0 ? void 0 : _a.cancelChanges());
118
120
  this.closeEdit();
119
121
  },
120
122
  clearCell: () => !this.readonly && this.clearCell(),
@@ -136,7 +138,7 @@ export class OverlaySelection {
136
138
  selectionChanged: e => this.selectionChange.emit(e),
137
139
  rangeCopy: e => this.beforeRangeCopyApply.emit(e),
138
140
  rangeDataApply: e => this.rangeEditApply.emit(e),
139
- setRange: e => this.triggerRangeEvent(e),
141
+ setRange: e => !!e && this.triggerRangeEvent(e),
140
142
  getData: () => this.getData(),
141
143
  });
142
144
  }
@@ -198,6 +200,7 @@ export class OverlaySelection {
198
200
  } }));
199
201
  }
200
202
  render() {
203
+ var _a;
201
204
  const nodes = [];
202
205
  const editCell = this.renderEditor();
203
206
  // Editor
@@ -217,14 +220,14 @@ export class OverlaySelection {
217
220
  }
218
221
  // Autofill
219
222
  if (focus && !this.readonly && this.range) {
220
- nodes.push(this.autoFillService.renderAutofill(range, focus));
223
+ nodes.push((_a = this.autoFillService) === null || _a === void 0 ? void 0 : _a.renderAutofill(range, focus));
221
224
  }
222
225
  // Order
223
226
  if (this.canDrag) {
224
227
  nodes.push(h("revogr-order-editor", { ref: e => (this.orderEditor = e), dataStore: this.dataStore, dimensionRow: this.dimensionRow, dimensionCol: this.dimensionCol, parent: this.element, onRowdragstartinit: e => this.rowDragStart(e) }));
225
228
  }
226
229
  }
227
- return (h(Host, { key: '81dee4cfcce410cefb2bd9ff2661261472fc3a75', class: { mobile: this.isMobileDevice }, onDblClick: (e) => this.onElementDblClick(e), onMouseDown: (e) => this.onElementMouseDown(e), onTouchStart: (e) => this.onElementMouseDown(e, true) }, nodes, h("slot", { key: '6ac75c388ae3fbc5539a27c3acd58178dd53d1af', name: "data" })));
230
+ return (h(Host, { key: '0767a5d015d0c8fe99444ef26b136a3a11792724', class: { mobile: this.isMobileDevice }, onDblClick: (e) => this.onElementDblClick(e), onMouseDown: (e) => this.onElementMouseDown(e), onTouchStart: (e) => this.onElementMouseDown(e, true) }, nodes, h("slot", { key: '8551244579316e0d4ab61defa1c1c9bc1011f446', name: "data" })));
228
231
  }
229
232
  /**
230
233
  * Executes the focus operation on the specified range of cells.
@@ -279,6 +282,7 @@ export class OverlaySelection {
279
282
  * Handle mouse down event on Host element
280
283
  */
281
284
  onElementMouseDown(e, touch = false) {
285
+ var _a;
282
286
  // Get the target element from the event object
283
287
  const targetElement = e.target;
284
288
  // Ignore focus if clicked input
@@ -295,7 +299,7 @@ export class OverlaySelection {
295
299
  this.focus(focusCell, this.range && e.shiftKey);
296
300
  // Initiate autofill selection
297
301
  if (this.range) {
298
- this.autoFillService.selectionStart(targetElement, this.getData());
302
+ targetElement && ((_a = this.autoFillService) === null || _a === void 0 ? void 0 : _a.selectionStart(targetElement, this.getData()));
299
303
  // Prevent default behavior for mouse events,
300
304
  // but only if target element is not a mobile input
301
305
  if (!touch) {
@@ -315,18 +319,21 @@ export class OverlaySelection {
315
319
  var _a;
316
320
  if (this.canEdit()) {
317
321
  const focus = this.selectionStore.get('focus');
322
+ if (!focus) {
323
+ return;
324
+ }
318
325
  const data = this.columnService.getSaveData(focus.y, focus.x);
319
326
  (_a = this.setEdit) === null || _a === void 0 ? void 0 : _a.emit(Object.assign(Object.assign({}, data), { val }));
320
327
  }
321
328
  }
322
329
  /**
323
330
  * Close editor event triggered
324
- * @param details - if requires focus next
331
+ * @param details - if it requires focus next
325
332
  */
326
- closeEdit(e) {
333
+ async closeEdit(e) {
327
334
  this.cancelEdit.emit();
328
335
  if (e === null || e === void 0 ? void 0 : e.detail) {
329
- this.focusNext();
336
+ await this.focusNext();
330
337
  }
331
338
  }
332
339
  /**
@@ -346,6 +353,7 @@ export class OverlaySelection {
346
353
  return range;
347
354
  }
348
355
  onCopy(e) {
356
+ var _a;
349
357
  const range = this.getRegion();
350
358
  const canCopyEvent = this.beforeCopyRegion.emit(range);
351
359
  if (canCopyEvent.defaultPrevented) {
@@ -361,38 +369,45 @@ export class OverlaySelection {
361
369
  rangeData = event.detail.data;
362
370
  }
363
371
  }
364
- this.clipboard.doCopy(e, rangeData);
372
+ (_a = this.clipboard) === null || _a === void 0 ? void 0 : _a.doCopy(e, rangeData);
365
373
  return true;
366
374
  }
367
375
  onPaste(data) {
376
+ var _a;
368
377
  const focus = this.selectionStore.get('focus');
369
378
  const isEditing = this.selectionStore.get('edit') !== null;
370
379
  if (!focus || isEditing) {
371
380
  return;
372
381
  }
373
382
  let { changed, range } = this.columnService.getTransformedDataToApply(focus, data);
374
- const { defaultPrevented: canPaste } = this.rangeClipboardPaste.emit(Object.assign({ data: changed, range }, this.types));
383
+ const { defaultPrevented: canPaste } = this.rangeClipboardPaste.emit(Object.assign({ data: changed, models: collectModelsOfRange(changed, this.dataStore), range }, this.types));
375
384
  if (canPaste) {
376
385
  return;
377
386
  }
378
- this.autoFillService.onRangeApply(changed, range);
387
+ (_a = this.autoFillService) === null || _a === void 0 ? void 0 : _a.onRangeApply(changed, range);
379
388
  }
380
389
  async focusNext() {
381
- const canFocus = await this.keyboardService.keyChangeSelection(new KeyboardEvent('keydown', {
390
+ var _a;
391
+ const canFocus = await ((_a = this.keyboardService) === null || _a === void 0 ? void 0 : _a.keyChangeSelection(new KeyboardEvent('keydown', {
382
392
  code: codesLetter.ARROW_DOWN,
383
- }), this.range);
393
+ }), this.range));
384
394
  if (!canFocus) {
385
395
  this.closeEdit();
386
396
  }
387
397
  }
388
398
  clearCell() {
389
- if (this.selectionStore.get('range') &&
390
- !isRangeSingleCell(this.selectionStore.get('range'))) {
391
- const data = this.columnService.getRangeStaticData(this.selectionStore.get('range'), '');
392
- this.autoFillService.onRangeApply(data, this.selectionStore.get('range'));
399
+ var _a;
400
+ const range = this.selectionStore.get('range');
401
+ if (range &&
402
+ !isRangeSingleCell(range)) {
403
+ const data = this.columnService.getRangeStaticData(range, '');
404
+ (_a = this.autoFillService) === null || _a === void 0 ? void 0 : _a.onRangeApply(data, range);
393
405
  }
394
406
  else if (this.canEdit()) {
395
407
  const focused = this.selectionStore.get('focus');
408
+ if (!focused) {
409
+ return;
410
+ }
396
411
  const cell = this.columnService.getSaveData(focused.y, focused.x);
397
412
  this.cellEdit({
398
413
  rgRow: focused.y,
@@ -429,7 +444,10 @@ export class OverlaySelection {
429
444
  const end = cell;
430
445
  const start = this.selectionStore.get('focus');
431
446
  if (isRangeEdit && start) {
432
- return this.triggerRangeEvent(getRange(start, end));
447
+ const range = getRange(start, end);
448
+ if (range) {
449
+ return this.triggerRangeEvent(range);
450
+ }
433
451
  }
434
452
  return this.doFocus(cell, end);
435
453
  }
@@ -604,7 +622,7 @@ export class OverlaySelection {
604
622
  }
605
623
  }
606
624
  },
607
- "required": false,
625
+ "required": true,
608
626
  "optional": false,
609
627
  "docs": {
610
628
  "tags": [],
@@ -822,7 +840,7 @@ export class OverlaySelection {
822
840
  },
823
841
  "complexType": {
824
842
  "original": "BeforeSaveDataDetails",
825
- "resolved": "{ prop: ColumnProp; model: DataType; val?: string; rowIndex: number; colIndex: number; colType: DimensionCols; type: DimensionRows; }",
843
+ "resolved": "{ prop: ColumnProp; model: DataType; val?: string | undefined; rowIndex: number; colIndex: number; colType: DimensionCols; type: DimensionRows; }",
826
844
  "references": {
827
845
  "BeforeSaveDataDetails": {
828
846
  "location": "import",
@@ -843,7 +861,7 @@ export class OverlaySelection {
843
861
  },
844
862
  "complexType": {
845
863
  "original": "BeforeSaveDataDetails",
846
- "resolved": "{ prop: ColumnProp; model: DataType; val?: string; rowIndex: number; colIndex: number; colType: DimensionCols; type: DimensionRows; }",
864
+ "resolved": "{ prop: ColumnProp; model: DataType; val?: string | undefined; rowIndex: number; colIndex: number; colType: DimensionCols; type: DimensionRows; }",
847
865
  "references": {
848
866
  "BeforeSaveDataDetails": {
849
867
  "location": "import",
@@ -885,7 +903,7 @@ export class OverlaySelection {
885
903
  },
886
904
  "complexType": {
887
905
  "original": "BeforeEdit",
888
- "resolved": "{ prop: ColumnProp; model: DataType; val?: string; rowIndex: number; colIndex: number; colType: DimensionCols; type: DimensionRows; }",
906
+ "resolved": "{ prop: ColumnProp; model: DataType; val?: string | undefined; rowIndex: number; colIndex: number; colType: DimensionCols; type: DimensionRows; }",
889
907
  "references": {
890
908
  "BeforeEdit": {
891
909
  "location": "import",
@@ -1018,9 +1036,14 @@ export class OverlaySelection {
1018
1036
  "text": "Set temp range area during autofill."
1019
1037
  },
1020
1038
  "complexType": {
1021
- "original": "TempRange | null",
1022
- "resolved": "{ type: string; area: RangeArea; }",
1039
+ "original": "Nullable<TempRange> | null",
1040
+ "resolved": "null | { type: string | null; area: RangeArea | null; }",
1023
1041
  "references": {
1042
+ "Nullable": {
1043
+ "location": "import",
1044
+ "path": "@type",
1045
+ "id": "src/types/index.ts::Nullable"
1046
+ },
1024
1047
  "TempRange": {
1025
1048
  "location": "import",
1026
1049
  "path": "@type",
@@ -1165,9 +1188,15 @@ export class OverlaySelection {
1165
1188
  "text": "Range copy."
1166
1189
  },
1167
1190
  "complexType": {
1168
- "original": "any",
1169
- "resolved": "any",
1170
- "references": {}
1191
+ "original": "RangeClipboardCopyEventProps",
1192
+ "resolved": "{ data: any[][]; range: RangeArea; mapping: OldNewRangeMapping; } & AllDimensionType",
1193
+ "references": {
1194
+ "RangeClipboardCopyEventProps": {
1195
+ "location": "import",
1196
+ "path": "@type",
1197
+ "id": "src/types/index.ts::RangeClipboardCopyEventProps"
1198
+ }
1199
+ }
1171
1200
  }
1172
1201
  }, {
1173
1202
  "method": "rangeClipboardPaste",
@@ -1177,12 +1206,18 @@ export class OverlaySelection {
1177
1206
  "composed": true,
1178
1207
  "docs": {
1179
1208
  "tags": [],
1180
- "text": ""
1209
+ "text": "Range paste event."
1181
1210
  },
1182
1211
  "complexType": {
1183
- "original": "any",
1184
- "resolved": "any",
1185
- "references": {}
1212
+ "original": "RangeClipboardPasteEvent",
1213
+ "resolved": "{ data: DataLookup; models: { [rowIndex: number]: DataType; }; range: RangeArea | null; } & AllDimensionType",
1214
+ "references": {
1215
+ "RangeClipboardPasteEvent": {
1216
+ "location": "import",
1217
+ "path": "@type",
1218
+ "id": "src/types/index.ts::RangeClipboardPasteEvent"
1219
+ }
1220
+ }
1186
1221
  }
1187
1222
  }, {
1188
1223
  "method": "beforeKeyDown",
@@ -1 +1 @@
1
- {"version":3,"file":"revogr-overlay-selection.js","sourceRoot":"","sources":["../../../src/components/overlay/revogr-overlay-selection.tsx"],"names":[],"mappings":"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;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CACF","sourcesContent":["import {\n Component,\n Event,\n EventEmitter,\n h,\n Host,\n Listen,\n Prop,\n VNode,\n Element,\n Watch,\n} from '@stencil/core';\nimport ColumnService from '../data/column.service';\nimport { codesLetter } from '../../utils/key.codes';\nimport { MOBILE_CLASS, SELECTION_BORDER_CLASS } from '../../utils/consts';\nimport { DSourceState } from '@store';\nimport {\n getRange,\n isRangeSingleCell,\n} from '@store';\nimport {\n EventData,\n getElStyle,\n getFocusCellBasedOnEvent,\n} from './selection.utils';\nimport { isEditInput } from '../editors/edit.utils';\nimport { KeyboardService } from './keyboard.service';\nimport { AutoFillService } from './autofill.service';\nimport { verifyTouchTarget } from '../../utils/events';\nimport {\n Observable,\n SelectionStoreState,\n DimensionSettingsState,\n DataType,\n DimensionRows,\n ColumnRegular,\n DimensionCols,\n Cell,\n DragStartEvent,\n} from '../../components';\nimport { EditCellStore, MultiDimensionType } from '@type';\nimport {\n FocusRenderEvent,\n ApplyFocusEvent,\n AllDimensionType,\n DataFormat,\n} from '@type';\nimport {\n Editors,\n BeforeSaveDataDetails,\n BeforeEdit,\n RangeArea,\n TempRange,\n ChangedRange,\n BeforeRangeSaveDataDetails,\n SaveDataDetails,\n} from '@type';\n\n/**\n * Component for overlaying the grid with the selection.\n */\n@Component({\n tag: 'revogr-overlay-selection',\n styleUrl: 'revogr-overlay-style.scss',\n})\nexport class OverlaySelection {\n // #region Properties\n /**\n * Readonly mode.\n */\n @Prop() readonly: boolean;\n /**\n * Range selection allowed.\n */\n @Prop() range: boolean;\n /**\n * Enable revogr-order-editor component (read more in revogr-order-editor component).\n * Allows D&D.\n */\n @Prop() canDrag: boolean;\n\n /**\n * Enable revogr-clipboard component (read more in revogr-clipboard component).\n * Allows copy/paste.\n */\n @Prop() useClipboard: boolean;\n\n /** Stores */\n /** Selection, range, focus. */\n @Prop() selectionStore: Observable<SelectionStoreState>;\n /** Dimension settings Y. */\n @Prop() dimensionRow: Observable<DimensionSettingsState>;\n /** Dimension settings X. */\n @Prop() dimensionCol: Observable<DimensionSettingsState>;\n\n // --------------------------------------------------------------------------\n //\n // Static stores, not expected to change during component lifetime\n //\n // --------------------------------------------------------------------------\n\n /**\n * Row data store.\n */\n @Prop() dataStore: Observable<DSourceState<DataType, DimensionRows>>;\n\n /**\n * Column data store.\n */\n @Prop() colData: Observable<DSourceState<ColumnRegular, DimensionCols>>;\n /**\n * Last real coordinates positions + 1.\n */\n @Prop() lastCell: Cell;\n /**\n * Custom editors register.\n */\n @Prop() editors: Editors;\n /**\n * If true applys changes when cell closes if not Escape.\n */\n @Prop() applyChangesOnClose = false;\n /**\n * Additional data to pass to renderer.\n */\n @Prop() additionalData: any;\n\n /**\n * Is mobile view mode.\n */\n @Prop() isMobileDevice: boolean;\n\n // #endregion\n\n // #region Events\n /**\n * Before clipboard copy happened. Validate data before copy.\n * To prevent the default behavior of editing data and use your own implementation, call `e.preventDefault()`.\n */\n @Event({ eventName: 'beforecopyregion', cancelable: true })\n beforeCopyRegion: EventEmitter;\n /**\n * Before region paste happened.\n */\n @Event({ eventName: 'beforepasteregion', cancelable: true })\n beforeRegionPaste: EventEmitter;\n\n /**\n * Cell edit apply to the data source.\n * Triggers datasource edit on the root level.\n */\n @Event({ eventName: 'celleditapply', cancelable: true })\n cellEditApply: EventEmitter<BeforeSaveDataDetails>;\n\n /**\n * Before cell focus.\n */\n @Event({ eventName: 'beforecellfocusinit', cancelable: true })\n beforeFocusCell: EventEmitter<BeforeSaveDataDetails>;\n\n\n /**\n * Fired when change of viewport happens.\n * Usually when we switch between pinned regions.\n */\n @Event({ eventName: 'beforenextvpfocus', cancelable: true })\n beforeNextViewportFocus: EventEmitter<Cell>;\n\n /**\n * Set edit cell.\n */\n @Event({ eventName: 'setedit' }) setEdit: EventEmitter<BeforeEdit>;\n\n /**\n * Before range applied.\n */\n @Event({ eventName: 'beforeapplyrange' })\n beforeApplyRange: EventEmitter<FocusRenderEvent>;\n /**\n * Before range selection applied.\n */\n @Event({ eventName: 'beforesetrange' }) beforeSetRange: EventEmitter;\n\n /**\n * Before editor render.\n */\n @Event({ eventName: 'beforeeditrender' })\n beforeEditRender: EventEmitter<FocusRenderEvent>;\n\n /**\n * Set range.\n */\n @Event({ eventName: 'setrange' }) setRange: EventEmitter<\n RangeArea & { type: MultiDimensionType }\n >;\n\n /** Select all. */\n @Event({ eventName: 'selectall' }) selectAll: EventEmitter;\n /**\n * Used for editors support when editor close requested.\n */\n @Event({ eventName: 'canceledit' }) cancelEdit: EventEmitter;\n\n /**\n * Set temp range area during autofill.\n */\n @Event({ eventName: 'settemprange' })\n setTempRange: EventEmitter<TempRange | null>;\n\n /**\n * Before cell get focused.\n * To prevent the default behavior of applying the edit data, you can call `e.preventDefault()`.\n */\n @Event({ eventName: 'applyfocus' })\n applyFocus: EventEmitter<FocusRenderEvent>;\n\n /**\n * Cell get focused.\n * To prevent the default behavior of applying the edit data, you can call `e.preventDefault()`.\n */\n @Event({ eventName: 'focuscell' }) focusCell: EventEmitter<ApplyFocusEvent>;\n /** Range data apply. */\n @Event({ eventName: 'beforerangedataapply' })\n beforeRangeDataApply: EventEmitter<FocusRenderEvent>;\n /** Selection range changed. */\n @Event({ eventName: 'selectionchangeinit', cancelable: true })\n selectionChange: EventEmitter<ChangedRange>;\n /** Before range copy. */\n @Event({ eventName: 'beforerangecopyapply', cancelable: true, bubbles: true })\n beforeRangeCopyApply: EventEmitter<ChangedRange>;\n\n /** Range data apply.\n * Triggers datasource edit on the root level.\n */\n @Event({ eventName: 'rangeeditapply', cancelable: true })\n rangeEditApply: EventEmitter<BeforeRangeSaveDataDetails>;\n /** Range copy. */\n @Event({ eventName: 'clipboardrangecopy', cancelable: true })\n rangeClipboardCopy: EventEmitter;\n @Event({ eventName: 'clipboardrangepaste', cancelable: true })\n rangeClipboardPaste: EventEmitter;\n\n /**\n * Before key up event proxy, used to prevent key up trigger.\n * If you have some custom behaviour event, use this event to check if it wasn't processed by internal logic.\n * Call preventDefault().\n */\n @Event({ eventName: 'beforekeydown' })\n beforeKeyDown: EventEmitter<KeyboardEvent>;\n /**\n * Before key down event proxy, used to prevent key down trigger.\n * If you have some custom behaviour event, use this event to check if it wasn't processed by internal logic.\n * Call preventDefault().\n */\n @Event({ eventName: 'beforekeyup' }) beforeKeyUp: EventEmitter<KeyboardEvent>;\n /**\n * Runs before cell save.\n * Can be used to override or cancel original save.\n */\n @Event({ eventName: 'beforecellsave', cancelable: true })\n beforeCellSave: EventEmitter;\n\n // #endregion\n\n // #region Private Properties\n @Element() element: HTMLElement;\n private clipboard: HTMLRevogrClipboardElement;\n\n protected columnService: ColumnService;\n private keyboardService: KeyboardService | null = null;\n private autoFillService: AutoFillService | null = null;\n private orderEditor: HTMLRevogrOrderEditorElement;\n private revogrEdit: HTMLRevogrEditElement | null = null;\n private unsubscribeSelectionStore: { (): void }[] = [];\n // #endregion\n\n // #region Listeners\n @Listen('touchmove', { target: 'document' })\n @Listen('mousemove', { target: 'document' })\n onMouseMove(e: MouseEvent | TouchEvent) {\n if (this.selectionStore.get('focus')) {\n this.autoFillService.selectionMouseMove(e);\n }\n }\n\n /**\n * Action finished inside of the document.\n * Pointer left document, clear any active operation.\n */\n @Listen('touchend', { target: 'document' })\n @Listen('mouseup', { target: 'document' })\n @Listen('mouseleave', { target: 'document' })\n onMouseUp() {\n // Clear auto fill selection\n // when pointer left document,\n // clear any active operation.\n this.autoFillService.clearAutoFillSelection(\n this.selectionStore.get('focus'),\n this.selectionStore.get('range'),\n );\n }\n\n /**\n * Row drag started.\n * This event is fired when drag action started on cell.\n */\n @Listen('dragstartcell') onCellDrag(e: CustomEvent<DragStartEvent>) {\n // Invoke drag start on order editor.\n this.orderEditor?.dragStart(e.detail);\n }\n\n /**\n * Get keyboard down from element.\n * This event is fired when keyboard key is released.\n */\n @Listen('keyup', { target: 'document' }) onKeyUp(e: KeyboardEvent) {\n // Emit before key up event.\n this.beforeKeyUp.emit(e);\n }\n\n /**\n * Get keyboard down from element.\n * This event is fired when keyboard key is pressed.\n */\n @Listen('keydown', { target: 'document' }) onKeyDown(e: KeyboardEvent) {\n // Emit before key down event and check if default prevention is set.\n const proxy = this.beforeKeyDown.emit(e);\n if (e.defaultPrevented || proxy.defaultPrevented) {\n return;\n }\n // Invoke key down on keyboard service.\n this.keyboardService?.keyDown(\n e,\n this.range,\n !!this.selectionStore.get('edit'),\n {\n focus: this.selectionStore.get('focus'),\n range: this.selectionStore.get('range'),\n },\n );\n }\n // #endregion\n\n /**\n * Selection & Keyboard\n */\n @Watch('selectionStore') selectionServiceSet(\n s: Observable<SelectionStoreState>,\n ) {\n // clear subscriptions\n this.unsubscribeSelectionStore.forEach(v => v());\n this.unsubscribeSelectionStore.length = 0;\n this.unsubscribeSelectionStore.push(s.onChange('nextFocus', (v) => this.doFocus(v, v)));\n\n this.keyboardService = new KeyboardService({\n selectionStore: s,\n range: r => this.triggerRangeEvent(r),\n focus: (f, changes, focusNextViewport) => {\n if (focusNextViewport) {\n this.beforeNextViewportFocus.emit(f);\n return false;\n } else {\n return this.doFocus(f, f, changes);\n }\n },\n change: val => {\n if (this.readonly) {\n return;\n }\n this.doEdit(val);\n },\n cancel: async () => {\n await this.revogrEdit.cancelChanges();\n this.closeEdit();\n },\n clearCell: () => !this.readonly && this.clearCell(),\n internalPaste: () => !this.readonly && this.beforeRegionPaste.emit(),\n getData: () => this.getData(),\n selectAll: () => this.selectAll.emit(),\n });\n this.createAutoFillService();\n }\n /** Autofill */\n @Watch('dimensionRow')\n @Watch('dimensionCol')\n createAutoFillService() {\n this.autoFillService = new AutoFillService({\n dimensionRow: this.dimensionRow,\n dimensionCol: this.dimensionCol,\n columnService: this.columnService,\n dataStore: this.dataStore,\n\n clearRangeDataApply: e =>\n this.beforeRangeDataApply.emit({\n ...e,\n ...this.types,\n }),\n setTempRange: e => this.setTempRange.emit(e),\n selectionChanged: e => this.selectionChange.emit(e),\n\n rangeCopy: e => this.beforeRangeCopyApply.emit(e),\n rangeDataApply: e => this.rangeEditApply.emit(e),\n\n setRange: e => this.triggerRangeEvent(e),\n getData: () => this.getData(),\n });\n }\n\n /** Columns */\n @Watch('dataStore')\n @Watch('colData')\n columnServiceSet() {\n this.columnService?.destroy();\n this.columnService = new ColumnService(this.dataStore, this.colData);\n this.createAutoFillService();\n }\n\n connectedCallback() {\n this.columnServiceSet();\n this.selectionServiceSet(this.selectionStore);\n }\n\n disconnectedCallback() {\n // clear subscriptions\n this.unsubscribeSelectionStore.forEach(v => v());\n this.unsubscribeSelectionStore.length = 0;\n this.columnService?.destroy();\n }\n\n async componentWillRender() {\n const editCell = this.selectionStore.get('edit');\n if (!editCell) {\n await this.revogrEdit?.beforeDisconnect?.();\n }\n }\n\n private renderRange(range: RangeArea) {\n const style = getElStyle(\n range,\n this.dimensionRow.state,\n this.dimensionCol.state,\n );\n return [\n <div class={SELECTION_BORDER_CLASS} style={style}>\n {this.isMobileDevice && (\n <div class=\"range-handlers\">\n <span class={MOBILE_CLASS}></span>\n <span class={MOBILE_CLASS}></span>\n </div>\n )}\n </div>,\n ];\n }\n\n private renderEditor() {\n // Check if edit access\n const editCell = this.selectionStore.get('edit');\n // Readonly or Editor closed\n if (this.readonly || !editCell) {\n return null;\n }\n const val =\n editCell.val || this.columnService.getCellData(editCell.y, editCell.x);\n const editable = {\n ...editCell,\n ...this.columnService.getSaveData(editCell.y, editCell.x, val),\n };\n const renderEvent = this.beforeEditRender.emit({\n range: {\n ...editCell,\n x1: editCell.x,\n y1: editCell.y,\n },\n ...this.types,\n });\n\n // Render prevented\n if (renderEvent.defaultPrevented) {\n return null;\n }\n\n const style = getElStyle(\n renderEvent.detail.range,\n this.dimensionRow.state,\n this.dimensionCol.state,\n );\n return (\n <revogr-edit\n style={style}\n ref={el => (this.revogrEdit = el)}\n additionalData={this.additionalData}\n editCell={editable}\n saveOnClose={this.applyChangesOnClose}\n column={this.columnService.rowDataModel(editCell.y, editCell.x)}\n editor={this.columnService.getCellEditor(\n editCell.y,\n editCell.x,\n this.editors,\n )}\n onCloseedit={e => this.closeEdit(e)}\n onCelledit={e => {\n const saveEv = this.beforeCellSave.emit(e.detail);\n if (!saveEv.defaultPrevented) {\n this.cellEdit(saveEv.detail);\n }\n\n // if not clear navigate to next cell after edit\n if (!saveEv.detail.preventFocus) {\n this.focusNext();\n }\n }}\n />\n );\n }\n\n render() {\n const nodes: VNode[] = [];\n const editCell = this.renderEditor();\n\n // Editor\n if (editCell) {\n nodes.push(editCell);\n } else {\n const range = this.selectionStore.get('range');\n const focus = this.selectionStore.get('focus');\n\n // Clipboard\n if ((range || focus) && this.useClipboard) {\n nodes.push(\n <revogr-clipboard\n readonly={this.readonly}\n onCopyregion={e => this.onCopy(e.detail)}\n onClearregion={() => !this.readonly && this.clearCell()}\n ref={e => (this.clipboard = e)}\n onPasteregion={e => this.onPaste(e.detail)}\n />,\n );\n }\n\n // Range\n if (range) {\n nodes.push(...this.renderRange(range));\n }\n // Autofill\n if (focus && !this.readonly && this.range) {\n nodes.push(this.autoFillService.renderAutofill(range, focus));\n }\n\n // Order\n if (this.canDrag) {\n nodes.push(\n <revogr-order-editor\n ref={e => (this.orderEditor = e)}\n dataStore={this.dataStore}\n dimensionRow={this.dimensionRow}\n dimensionCol={this.dimensionCol}\n parent={this.element}\n onRowdragstartinit={e => this.rowDragStart(e)}\n />,\n );\n }\n }\n return (\n <Host\n class={{ mobile: this.isMobileDevice }}\n onDblClick={(e: MouseEvent) => this.onElementDblClick(e)}\n onMouseDown={(e: MouseEvent) => this.onElementMouseDown(e)}\n onTouchStart={(e: TouchEvent) => this.onElementMouseDown(e, true)}\n >\n {nodes}\n <slot name=\"data\" />\n </Host>\n );\n }\n\n /**\n * Executes the focus operation on the specified range of cells.\n */\n private doFocus(focus: Cell, end: Cell, changes?: Partial<Cell>) {\n const { defaultPrevented } = this.beforeFocusCell.emit(\n this.columnService.getSaveData(focus.y, focus.x),\n );\n if (defaultPrevented) {\n return false;\n }\n const evData: FocusRenderEvent = {\n range: {\n ...focus,\n x1: end.x,\n y1: end.y,\n },\n next: changes,\n ...this.types,\n };\n const applyEvent = this.applyFocus.emit(evData);\n if (applyEvent.defaultPrevented) {\n return false;\n }\n const { range } = applyEvent.detail;\n return !this.focusCell.emit({\n focus: {\n x: range.x,\n y: range.y,\n },\n end: {\n x: range.x1,\n y: range.y1,\n },\n ...applyEvent.detail,\n }).defaultPrevented;\n }\n\n private triggerRangeEvent(range: RangeArea) {\n const type = this.types.rowType;\n const applyEvent = this.beforeApplyRange.emit({\n range: { ...range },\n ...this.types,\n });\n if (applyEvent.defaultPrevented) {\n return false;\n }\n const data = this.columnService.getRangeTransformedToProps(\n applyEvent.detail.range,\n this.dataStore,\n );\n let e = this.beforeSetRange.emit(data);\n e = this.setRange.emit({ ...applyEvent.detail.range, type });\n if (e.defaultPrevented) {\n return false;\n }\n return !e.defaultPrevented;\n }\n\n /**\n * Open Editor on DblClick\n */\n private onElementDblClick(e: MouseEvent) {\n // DblClick prevented outside - Editor will not open\n \n // Get data from the component\n const data = this.getData();\n const focusCell = getFocusCellBasedOnEvent(e, data);\n if (!focusCell) {\n return;\n }\n this.doEdit();\n }\n\n /**\n * Handle mouse down event on Host element\n */\n private onElementMouseDown(e: MouseEvent | TouchEvent, touch = false) {\n // Get the target element from the event object\n const targetElement = e.target as HTMLElement | undefined;\n // Ignore focus if clicked input\n if (isEditInput(targetElement)) {\n return;\n }\n\n // Get data from the component\n const data = this.getData();\n const focusCell = getFocusCellBasedOnEvent(e, data);\n if (!focusCell) {\n return;\n }\n\n // Set focus on the current cell\n this.focus(focusCell, this.range && e.shiftKey);\n\n // Initiate autofill selection\n if (this.range) {\n this.autoFillService.selectionStart(targetElement, this.getData());\n\n // Prevent default behavior for mouse events,\n // but only if target element is not a mobile input\n if (!touch) {\n e.preventDefault();\n } else if (\n verifyTouchTarget((e as TouchEvent).touches[0], MOBILE_CLASS)\n ) {\n // Prevent default behavior for touch events\n // if target element is a mobile input\n e.preventDefault();\n }\n }\n }\n\n /**\n * Start cell editing\n */\n protected doEdit(val = '') {\n if (this.canEdit()) {\n const focus = this.selectionStore.get('focus');\n\n const data = this.columnService.getSaveData(focus.y, focus.x);\n this.setEdit?.emit({\n ...data,\n val,\n });\n }\n }\n\n /**\n * Close editor event triggered\n * @param details - if requires focus next\n */\n private closeEdit(e?: CustomEvent<boolean>) {\n this.cancelEdit.emit();\n if (e?.detail) {\n this.focusNext();\n }\n }\n\n /**\n * Edit finished.\n * Close Editor and save.\n */\n protected cellEdit(e: SaveDataDetails) {\n const dataToSave = this.columnService.getSaveData(e.rgRow, e.rgCol, e.val);\n this.cellEditApply.emit(dataToSave);\n }\n\n private getRegion() {\n const focus = this.selectionStore.get('focus');\n let range = this.selectionStore.get('range');\n if (!range) {\n range = getRange(focus, focus);\n }\n return range;\n }\n private onCopy(e: DataTransfer) {\n const range = this.getRegion();\n const canCopyEvent = this.beforeCopyRegion.emit(range);\n if (canCopyEvent.defaultPrevented) {\n return false;\n }\n let rangeData: DataFormat[][] | undefined;\n\n if (range) {\n const { data, mapping } = this.columnService.copyRangeArray(\n range,\n this.dataStore,\n );\n const event = this.rangeClipboardCopy.emit({\n range,\n data,\n mapping,\n ...this.types,\n });\n if (!event.defaultPrevented) {\n rangeData = event.detail.data;\n }\n }\n\n this.clipboard.doCopy(e, rangeData);\n return true;\n }\n\n private onPaste(data: string[][]) {\n const focus = this.selectionStore.get('focus');\n const isEditing = this.selectionStore.get('edit') !== null;\n if (!focus || isEditing) {\n return;\n }\n let { changed, range } = this.columnService.getTransformedDataToApply(\n focus,\n data,\n );\n const { defaultPrevented: canPaste } = this.rangeClipboardPaste.emit({\n data: changed,\n range,\n ...this.types,\n });\n if (canPaste) {\n return;\n }\n this.autoFillService.onRangeApply(changed, range);\n }\n\n private async focusNext() {\n const canFocus = await this.keyboardService.keyChangeSelection(\n new KeyboardEvent('keydown', {\n code: codesLetter.ARROW_DOWN,\n }),\n this.range,\n );\n if (!canFocus) {\n this.closeEdit();\n }\n }\n\n protected clearCell() {\n if (\n this.selectionStore.get('range') &&\n !isRangeSingleCell(this.selectionStore.get('range'))\n ) {\n const data = this.columnService.getRangeStaticData(\n this.selectionStore.get('range'),\n '',\n );\n this.autoFillService.onRangeApply(data, this.selectionStore.get('range'));\n } else if (this.canEdit()) {\n const focused = this.selectionStore.get('focus');\n const cell = this.columnService.getSaveData(focused.y, focused.x);\n this.cellEdit({\n rgRow: focused.y,\n rgCol: focused.x,\n val: '',\n type: cell.type,\n prop: cell.prop,\n });\n }\n }\n\n private rowDragStart({ detail }: CustomEvent<{ cell: Cell; text: string }>) {\n detail.text = this.columnService.getCellData(detail.cell.y, detail.cell.x);\n }\n\n /**\n * Verify if edit allowed.\n */\n protected canEdit() {\n if (this.readonly) {\n return false;\n }\n const focus = this.selectionStore.get('focus');\n return focus && !this.columnService?.isReadOnly(focus.y, focus.x);\n }\n\n get edited(): EditCellStore {\n return this.selectionStore.get('edit');\n }\n\n /**\n * Sets the focus on a cell and optionally edits a range.\n */\n focus(cell?: Cell, isRangeEdit = false) {\n if (!cell) return false;\n\n const end = cell;\n const start = this.selectionStore.get('focus');\n\n if (isRangeEdit && start) {\n return this.triggerRangeEvent(getRange(start, end));\n }\n\n return this.doFocus(cell, end);\n }\n\n get types(): AllDimensionType {\n return {\n rowType: this.dataStore.get('type'),\n colType: this.columnService.type,\n };\n }\n\n /**\n * Collect data\n */\n protected getData(): EventData {\n return {\n el: this.element,\n rows: this.dimensionRow.state,\n cols: this.dimensionCol.state,\n lastCell: this.lastCell,\n focus: this.selectionStore.get('focus'),\n range: this.selectionStore.get('range'),\n };\n }\n}\n"]}
1
+ {"version":3,"file":"revogr-overlay-selection.js","sourceRoot":"","sources":["../../../src/components/overlay/revogr-overlay-selection.tsx"],"names":[],"mappings":"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","sourcesContent":["import {\n Component,\n Event,\n EventEmitter,\n h,\n Host,\n Listen,\n Prop,\n VNode,\n Element,\n Watch,\n} from '@stencil/core';\nimport ColumnService from '../data/column.service';\nimport { codesLetter } from '../../utils/key.codes';\nimport { MOBILE_CLASS, SELECTION_BORDER_CLASS } from '../../utils/consts';\nimport { DSourceState } from '@store';\nimport {\n getRange,\n isRangeSingleCell,\n} from '@store';\nimport {\n collectModelsOfRange,\n EventData,\n getElStyle,\n getFocusCellBasedOnEvent,\n} from './selection.utils';\nimport { isEditInput } from '../editors/edit.utils';\nimport { KeyboardService } from './keyboard.service';\nimport { AutoFillService } from './autofill.service';\nimport { verifyTouchTarget } from '../../utils/events';\nimport {\n Observable,\n SelectionStoreState,\n DimensionSettingsState,\n DataType,\n DimensionRows,\n ColumnRegular,\n DimensionCols,\n Cell,\n DragStartEvent,\n} from '../../components';\nimport {\n MultiDimensionType,\n Nullable,\n RangeClipboardCopyEventProps,\n RangeClipboardPasteEvent\n} from '@type';\nimport {\n FocusRenderEvent,\n ApplyFocusEvent,\n AllDimensionType,\n DataFormat,\n} from '@type';\nimport {\n Editors,\n BeforeSaveDataDetails,\n BeforeEdit,\n RangeArea,\n TempRange,\n ChangedRange,\n BeforeRangeSaveDataDetails,\n SaveDataDetails,\n} from '@type';\n\n/**\n * Component for overlaying the grid with the selection.\n */\n@Component({\n tag: 'revogr-overlay-selection',\n styleUrl: 'revogr-overlay-style.scss',\n})\nexport class OverlaySelection {\n // #region Properties\n /**\n * Readonly mode.\n */\n @Prop() readonly: boolean;\n /**\n * Range selection allowed.\n */\n @Prop() range: boolean;\n /**\n * Enable revogr-order-editor component (read more in revogr-order-editor component).\n * Allows D&D.\n */\n @Prop() canDrag: boolean;\n\n /**\n * Enable revogr-clipboard component (read more in revogr-clipboard component).\n * Allows copy/paste.\n */\n @Prop() useClipboard: boolean;\n\n /** Stores */\n /** Selection, range, focus. */\n @Prop() selectionStore: Observable<SelectionStoreState>;\n /** Dimension settings Y. */\n @Prop() dimensionRow: Observable<DimensionSettingsState>;\n /** Dimension settings X. */\n @Prop() dimensionCol!: Observable<DimensionSettingsState>;\n\n // --------------------------------------------------------------------------\n //\n // Static stores, not expected to change during component lifetime\n //\n // --------------------------------------------------------------------------\n\n /**\n * Row data store.\n */\n @Prop() dataStore: Observable<DSourceState<DataType, DimensionRows>>;\n\n /**\n * Column data store.\n */\n @Prop() colData: Observable<DSourceState<ColumnRegular, DimensionCols>>;\n /**\n * Last real coordinates positions + 1.\n */\n @Prop() lastCell: Cell;\n /**\n * Custom editors register.\n */\n @Prop() editors: Editors;\n /**\n * If true applys changes when cell closes if not Escape.\n */\n @Prop() applyChangesOnClose = false;\n /**\n * Additional data to pass to renderer.\n */\n @Prop() additionalData: any;\n\n /**\n * Is mobile view mode.\n */\n @Prop() isMobileDevice: boolean;\n\n // #endregion\n\n // #region Events\n /**\n * Before clipboard copy happened. Validate data before copy.\n * To prevent the default behavior of editing data and use your own implementation, call `e.preventDefault()`.\n */\n @Event({ eventName: 'beforecopyregion', cancelable: true })\n beforeCopyRegion: EventEmitter;\n /**\n * Before region paste happened.\n */\n @Event({ eventName: 'beforepasteregion', cancelable: true })\n beforeRegionPaste: EventEmitter;\n\n /**\n * Cell edit apply to the data source.\n * Triggers datasource edit on the root level.\n */\n @Event({ eventName: 'celleditapply', cancelable: true })\n cellEditApply: EventEmitter<BeforeSaveDataDetails>;\n\n /**\n * Before cell focus.\n */\n @Event({ eventName: 'beforecellfocusinit', cancelable: true })\n beforeFocusCell: EventEmitter<BeforeSaveDataDetails>;\n\n\n /**\n * Fired when change of viewport happens.\n * Usually when we switch between pinned regions.\n */\n @Event({ eventName: 'beforenextvpfocus', cancelable: true })\n beforeNextViewportFocus: EventEmitter<Cell>;\n\n /**\n * Set edit cell.\n */\n @Event({ eventName: 'setedit' }) setEdit: EventEmitter<BeforeEdit>;\n\n /**\n * Before range applied.\n */\n @Event({ eventName: 'beforeapplyrange' })\n beforeApplyRange: EventEmitter<FocusRenderEvent>;\n /**\n * Before range selection applied.\n */\n @Event({ eventName: 'beforesetrange' }) beforeSetRange: EventEmitter;\n\n /**\n * Before editor render.\n */\n @Event({ eventName: 'beforeeditrender' })\n beforeEditRender: EventEmitter<FocusRenderEvent>;\n\n /**\n * Set range.\n */\n @Event({ eventName: 'setrange' }) setRange: EventEmitter<\n RangeArea & { type: MultiDimensionType }\n >;\n\n /** Select all. */\n @Event({ eventName: 'selectall' }) selectAll: EventEmitter;\n /**\n * Used for editors support when editor close requested.\n */\n @Event({ eventName: 'canceledit' }) cancelEdit: EventEmitter;\n\n /**\n * Set temp range area during autofill.\n */\n @Event({ eventName: 'settemprange' })\n setTempRange: EventEmitter<Nullable<TempRange> | null>;\n\n /**\n * Before cell get focused.\n * To prevent the default behavior of applying the edit data, you can call `e.preventDefault()`.\n */\n @Event({ eventName: 'applyfocus' })\n applyFocus: EventEmitter<FocusRenderEvent>;\n\n /**\n * Cell get focused.\n * To prevent the default behavior of applying the edit data, you can call `e.preventDefault()`.\n */\n @Event({ eventName: 'focuscell' }) focusCell: EventEmitter<ApplyFocusEvent>;\n /** Range data apply. */\n @Event({ eventName: 'beforerangedataapply' })\n beforeRangeDataApply: EventEmitter<FocusRenderEvent>;\n /** Selection range changed. */\n @Event({ eventName: 'selectionchangeinit', cancelable: true })\n selectionChange: EventEmitter<ChangedRange>;\n /** Before range copy. */\n @Event({ eventName: 'beforerangecopyapply', cancelable: true, bubbles: true })\n beforeRangeCopyApply: EventEmitter<ChangedRange>;\n\n /** Range data apply.\n * Triggers datasource edit on the root level.\n */\n @Event({ eventName: 'rangeeditapply', cancelable: true })\n rangeEditApply: EventEmitter<BeforeRangeSaveDataDetails>;\n /** Range copy. */\n @Event({ eventName: 'clipboardrangecopy', cancelable: true })\n /**\n * Range copy event.\n * This event is triggered when data is ready to be copied to the clipboard.\n * If you want to prevent the default behavior of copying data, you can call `e.preventDefault()`.\n * If you want to modify the data that will be copied to the clipboard, modify the `data` property of the event object.\n */\n rangeClipboardCopy: EventEmitter<RangeClipboardCopyEventProps>;\n\n /**\n * Range paste event.\n */\n @Event({ eventName: 'clipboardrangepaste', cancelable: true })\n rangeClipboardPaste: EventEmitter<RangeClipboardPasteEvent>;\n\n /**\n * Before key up event proxy, used to prevent key up trigger.\n * If you have some custom behaviour event, use this event to check if it wasn't processed by internal logic.\n * Call preventDefault().\n */\n @Event({ eventName: 'beforekeydown' })\n beforeKeyDown: EventEmitter<KeyboardEvent>;\n /**\n * Before key down event proxy, used to prevent key down trigger.\n * If you have some custom behaviour event, use this event to check if it wasn't processed by internal logic.\n * Call preventDefault().\n */\n @Event({ eventName: 'beforekeyup' }) beforeKeyUp: EventEmitter<KeyboardEvent>;\n /**\n * Runs before cell save.\n * Can be used to override or cancel original save.\n */\n @Event({ eventName: 'beforecellsave', cancelable: true })\n beforeCellSave: EventEmitter;\n\n // #endregion\n\n // #region Private Properties\n @Element() element: HTMLElement;\n private clipboard?: HTMLRevogrClipboardElement;\n\n protected columnService: ColumnService;\n private keyboardService: KeyboardService | null = null;\n private autoFillService: AutoFillService | null = null;\n private orderEditor?: HTMLRevogrOrderEditorElement;\n private revogrEdit?: HTMLRevogrEditElement;\n private unsubscribeSelectionStore: { (): void }[] = [];\n // #endregion\n\n // #region Listeners\n @Listen('touchmove', { target: 'document' })\n @Listen('mousemove', { target: 'document' })\n onMouseMove(e: MouseEvent | TouchEvent) {\n if (this.selectionStore.get('focus')) {\n this.autoFillService?.selectionMouseMove(e);\n }\n }\n\n /**\n * Action finished inside the document.\n * Pointer left document, clear any active operation.\n */\n @Listen('touchend', { target: 'document' })\n @Listen('mouseup', { target: 'document' })\n @Listen('mouseleave', { target: 'document' })\n onMouseUp() {\n // Clear autofill selection\n // when pointer left document,\n // clear any active operation.\n this.autoFillService?.clearAutoFillSelection(\n this.selectionStore.get('focus'),\n this.selectionStore.get('range'),\n );\n }\n\n /**\n * Row drag started.\n * This event is fired when drag action started on cell.\n */\n @Listen('dragstartcell') onCellDrag(e: CustomEvent<DragStartEvent>) {\n // Invoke drag start on order editor.\n this.orderEditor?.dragStart(e.detail);\n }\n\n /**\n * Get keyboard down from element.\n * This event is fired when keyboard key is released.\n */\n @Listen('keyup', { target: 'document' }) onKeyUp(e: KeyboardEvent) {\n // Emit before key up event.\n this.beforeKeyUp.emit(e);\n }\n\n /**\n * Get keyboard down from element.\n * This event is fired when keyboard key is pressed.\n */\n @Listen('keydown', { target: 'document' }) onKeyDown(e: KeyboardEvent) {\n // Emit before key down event and check if default prevention is set.\n const proxy = this.beforeKeyDown.emit(e);\n if (e.defaultPrevented || proxy.defaultPrevented) {\n return;\n }\n // Invoke key down on keyboard service.\n this.keyboardService?.keyDown(\n e,\n this.range,\n !!this.selectionStore.get('edit'),\n {\n focus: this.selectionStore.get('focus'),\n range: this.selectionStore.get('range'),\n },\n );\n }\n // #endregion\n\n /**\n * Selection & Keyboard\n */\n @Watch('selectionStore') selectionServiceSet(\n s: Observable<SelectionStoreState>,\n ) {\n // clear subscriptions\n this.unsubscribeSelectionStore.forEach(v => v());\n this.unsubscribeSelectionStore.length = 0;\n this.unsubscribeSelectionStore.push(s.onChange('nextFocus', (v) => v && this.doFocus(v, v)));\n\n this.keyboardService = new KeyboardService({\n selectionStore: s,\n range: r => !!r && this.triggerRangeEvent(r),\n focus: (f, changes, focusNextViewport) => {\n if (focusNextViewport) {\n this.beforeNextViewportFocus.emit(f);\n return false;\n } else {\n return this.doFocus(f, f, changes);\n }\n },\n change: val => {\n if (this.readonly) {\n return;\n }\n this.doEdit(val);\n },\n cancel: async () => {\n await this.revogrEdit?.cancelChanges();\n this.closeEdit();\n },\n clearCell: () => !this.readonly && this.clearCell(),\n internalPaste: () => !this.readonly && this.beforeRegionPaste.emit(),\n getData: () => this.getData(),\n selectAll: () => this.selectAll.emit(),\n });\n this.createAutoFillService();\n }\n /** Autofill */\n @Watch('dimensionRow')\n @Watch('dimensionCol')\n createAutoFillService() {\n this.autoFillService = new AutoFillService({\n dimensionRow: this.dimensionRow,\n dimensionCol: this.dimensionCol,\n columnService: this.columnService,\n dataStore: this.dataStore,\n\n clearRangeDataApply: e =>\n this.beforeRangeDataApply.emit({\n ...e,\n ...this.types,\n }),\n setTempRange: e => this.setTempRange.emit(e),\n selectionChanged: e => this.selectionChange.emit(e),\n\n rangeCopy: e => this.beforeRangeCopyApply.emit(e),\n rangeDataApply: e => this.rangeEditApply.emit(e),\n\n setRange: e => !!e && this.triggerRangeEvent(e),\n getData: () => this.getData(),\n });\n }\n\n /** Columns */\n @Watch('dataStore')\n @Watch('colData')\n columnServiceSet() {\n this.columnService?.destroy();\n this.columnService = new ColumnService(this.dataStore, this.colData);\n this.createAutoFillService();\n }\n\n connectedCallback() {\n this.columnServiceSet();\n this.selectionServiceSet(this.selectionStore);\n }\n\n disconnectedCallback() {\n // clear subscriptions\n this.unsubscribeSelectionStore.forEach(v => v());\n this.unsubscribeSelectionStore.length = 0;\n this.columnService?.destroy();\n }\n\n async componentWillRender() {\n const editCell = this.selectionStore.get('edit');\n if (!editCell) {\n await this.revogrEdit?.beforeDisconnect?.();\n }\n }\n\n private renderRange(range: RangeArea) {\n const style = getElStyle(\n range,\n this.dimensionRow.state,\n this.dimensionCol.state,\n );\n return [\n <div class={SELECTION_BORDER_CLASS} style={style}>\n {this.isMobileDevice && (\n <div class=\"range-handlers\">\n <span class={MOBILE_CLASS}></span>\n <span class={MOBILE_CLASS}></span>\n </div>\n )}\n </div>,\n ];\n }\n\n private renderEditor() {\n // Check if edit access\n const editCell = this.selectionStore.get('edit');\n // Readonly or Editor closed\n if (this.readonly || !editCell) {\n return null;\n }\n const val =\n editCell.val || this.columnService.getCellData(editCell.y, editCell.x);\n const editable = {\n ...editCell,\n ...this.columnService.getSaveData(editCell.y, editCell.x, val),\n };\n const renderEvent = this.beforeEditRender.emit({\n range: {\n ...editCell,\n x1: editCell.x,\n y1: editCell.y,\n },\n ...this.types,\n });\n\n // Render prevented\n if (renderEvent.defaultPrevented) {\n return null;\n }\n\n const style = getElStyle(\n renderEvent.detail.range,\n this.dimensionRow.state,\n this.dimensionCol.state,\n );\n return (\n <revogr-edit\n style={style}\n ref={el => (this.revogrEdit = el)}\n additionalData={this.additionalData}\n editCell={editable}\n saveOnClose={this.applyChangesOnClose}\n column={this.columnService.rowDataModel(editCell.y, editCell.x)}\n editor={this.columnService.getCellEditor(\n editCell.y,\n editCell.x,\n this.editors,\n )}\n onCloseedit={e => this.closeEdit(e)}\n onCelledit={e => {\n const saveEv = this.beforeCellSave.emit(e.detail);\n if (!saveEv.defaultPrevented) {\n this.cellEdit(saveEv.detail);\n }\n\n // if not clear navigate to next cell after edit\n if (!saveEv.detail.preventFocus) {\n this.focusNext();\n }\n }}\n />\n );\n }\n\n render() {\n const nodes: VNode[] = [];\n const editCell = this.renderEditor();\n\n // Editor\n if (editCell) {\n nodes.push(editCell);\n } else {\n const range = this.selectionStore.get('range');\n const focus = this.selectionStore.get('focus');\n\n // Clipboard\n if ((range || focus) && this.useClipboard) {\n nodes.push(\n <revogr-clipboard\n readonly={this.readonly}\n onCopyregion={e => this.onCopy(e.detail)}\n onClearregion={() => !this.readonly && this.clearCell()}\n ref={e => (this.clipboard = e)}\n onPasteregion={e => this.onPaste(e.detail)}\n />,\n );\n }\n\n // Range\n if (range) {\n nodes.push(...this.renderRange(range));\n }\n // Autofill\n if (focus && !this.readonly && this.range) {\n nodes.push(this.autoFillService?.renderAutofill(range, focus));\n }\n\n // Order\n if (this.canDrag) {\n nodes.push(\n <revogr-order-editor\n ref={e => (this.orderEditor = e)}\n dataStore={this.dataStore}\n dimensionRow={this.dimensionRow}\n dimensionCol={this.dimensionCol}\n parent={this.element}\n onRowdragstartinit={e => this.rowDragStart(e)}\n />,\n );\n }\n }\n return (\n <Host\n class={{ mobile: this.isMobileDevice }}\n onDblClick={(e: MouseEvent) => this.onElementDblClick(e)}\n onMouseDown={(e: MouseEvent) => this.onElementMouseDown(e)}\n onTouchStart={(e: TouchEvent) => this.onElementMouseDown(e, true)}\n >\n {nodes}\n <slot name=\"data\" />\n </Host>\n );\n }\n\n /**\n * Executes the focus operation on the specified range of cells.\n */\n private doFocus(focus: Cell, end: Cell, changes?: Partial<Cell>) {\n const { defaultPrevented } = this.beforeFocusCell.emit(\n this.columnService.getSaveData(focus.y, focus.x),\n );\n if (defaultPrevented) {\n return false;\n }\n const evData: FocusRenderEvent = {\n range: {\n ...focus,\n x1: end.x,\n y1: end.y,\n },\n next: changes,\n ...this.types,\n };\n const applyEvent = this.applyFocus.emit(evData);\n if (applyEvent.defaultPrevented) {\n return false;\n }\n const { range } = applyEvent.detail;\n return !this.focusCell.emit({\n focus: {\n x: range.x,\n y: range.y,\n },\n end: {\n x: range.x1,\n y: range.y1,\n },\n ...applyEvent.detail,\n }).defaultPrevented;\n }\n\n private triggerRangeEvent(range: RangeArea) {\n const type = this.types.rowType;\n const applyEvent = this.beforeApplyRange.emit({\n range: { ...range },\n ...this.types,\n });\n if (applyEvent.defaultPrevented) {\n return false;\n }\n const data = this.columnService.getRangeTransformedToProps(\n applyEvent.detail.range,\n this.dataStore,\n );\n let e = this.beforeSetRange.emit(data);\n e = this.setRange.emit({ ...applyEvent.detail.range, type });\n if (e.defaultPrevented) {\n return false;\n }\n return !e.defaultPrevented;\n }\n\n /**\n * Open Editor on DblClick\n */\n private onElementDblClick(e: MouseEvent) {\n // DblClick prevented outside - Editor will not open\n \n // Get data from the component\n const data = this.getData();\n const focusCell = getFocusCellBasedOnEvent(e, data);\n if (!focusCell) {\n return;\n }\n this.doEdit();\n }\n\n /**\n * Handle mouse down event on Host element\n */\n private onElementMouseDown(e: MouseEvent | TouchEvent, touch = false) {\n // Get the target element from the event object\n const targetElement = e.target as HTMLElement | undefined;\n // Ignore focus if clicked input\n if (isEditInput(targetElement)) {\n return;\n }\n\n // Get data from the component\n const data = this.getData();\n const focusCell = getFocusCellBasedOnEvent(e, data);\n if (!focusCell) {\n return;\n }\n\n // Set focus on the current cell\n this.focus(focusCell, this.range && e.shiftKey);\n\n // Initiate autofill selection\n if (this.range) {\n targetElement && this.autoFillService?.selectionStart(targetElement, this.getData());\n\n // Prevent default behavior for mouse events,\n // but only if target element is not a mobile input\n if (!touch) {\n e.preventDefault();\n } else if (\n verifyTouchTarget((e as TouchEvent).touches[0], MOBILE_CLASS)\n ) {\n // Prevent default behavior for touch events\n // if target element is a mobile input\n e.preventDefault();\n }\n }\n }\n\n /**\n * Start cell editing\n */\n protected doEdit(val = '') {\n if (this.canEdit()) {\n const focus = this.selectionStore.get('focus');\n if (!focus) {\n return;\n }\n const data = this.columnService.getSaveData(focus.y, focus.x);\n this.setEdit?.emit({\n ...data,\n val,\n });\n }\n }\n\n /**\n * Close editor event triggered\n * @param details - if it requires focus next\n */\n private async closeEdit(e?: CustomEvent<boolean | undefined>) {\n this.cancelEdit.emit();\n if (e?.detail) {\n await this.focusNext();\n }\n }\n\n /**\n * Edit finished.\n * Close Editor and save.\n */\n protected cellEdit(e: SaveDataDetails) {\n const dataToSave = this.columnService.getSaveData(e.rgRow, e.rgCol, e.val);\n this.cellEditApply.emit(dataToSave);\n }\n\n private getRegion() {\n const focus = this.selectionStore.get('focus');\n let range = this.selectionStore.get('range');\n if (!range) {\n range = getRange(focus, focus);\n }\n return range;\n }\n private onCopy(e: DataTransfer) {\n const range = this.getRegion();\n const canCopyEvent = this.beforeCopyRegion.emit(range);\n if (canCopyEvent.defaultPrevented) {\n return false;\n }\n let rangeData: DataFormat[][] | undefined;\n\n if (range) {\n const { data, mapping } = this.columnService.copyRangeArray(\n range,\n this.dataStore,\n );\n const event = this.rangeClipboardCopy.emit({\n range,\n data,\n mapping,\n ...this.types,\n });\n if (!event.defaultPrevented) {\n rangeData = event.detail.data;\n }\n }\n\n this.clipboard?.doCopy(e, rangeData);\n return true;\n }\n\n private onPaste(data: string[][]) {\n const focus = this.selectionStore.get('focus');\n const isEditing = this.selectionStore.get('edit') !== null;\n if (!focus || isEditing) {\n return;\n }\n let { changed, range } = this.columnService.getTransformedDataToApply(\n focus,\n data,\n );\n const { defaultPrevented: canPaste } = this.rangeClipboardPaste.emit({\n data: changed,\n models: collectModelsOfRange(changed, this.dataStore),\n range,\n ...this.types,\n });\n if (canPaste) {\n return;\n }\n this.autoFillService?.onRangeApply(changed, range);\n }\n\n private async focusNext() {\n const canFocus = await this.keyboardService?.keyChangeSelection(\n new KeyboardEvent('keydown', {\n code: codesLetter.ARROW_DOWN,\n }),\n this.range,\n );\n if (!canFocus) {\n this.closeEdit();\n }\n }\n\n protected clearCell() {\n const range = this.selectionStore.get('range');\n if (\n range &&\n !isRangeSingleCell(range)\n ) {\n const data = this.columnService.getRangeStaticData(\n range,\n '',\n );\n this.autoFillService?.onRangeApply(data, range);\n } else if (this.canEdit()) {\n const focused = this.selectionStore.get('focus');\n if (!focused) {\n return;\n }\n const cell = this.columnService.getSaveData(focused.y, focused.x);\n this.cellEdit({\n rgRow: focused.y,\n rgCol: focused.x,\n val: '',\n type: cell.type,\n prop: cell.prop,\n });\n }\n }\n\n private rowDragStart({ detail }: CustomEvent<{ cell: Cell; text: string }>) {\n detail.text = this.columnService.getCellData(detail.cell.y, detail.cell.x);\n }\n\n /**\n * Verify if edit allowed.\n */\n protected canEdit() {\n if (this.readonly) {\n return false;\n }\n const focus = this.selectionStore.get('focus');\n return focus && !this.columnService?.isReadOnly(focus.y, focus.x);\n }\n\n get edited() {\n return this.selectionStore.get('edit');\n }\n\n /**\n * Sets the focus on a cell and optionally edits a range.\n */\n focus(cell?: Cell, isRangeEdit = false) {\n if (!cell) return false;\n\n const end = cell;\n const start = this.selectionStore.get('focus');\n\n if (isRangeEdit && start) {\n const range = getRange(start, end);\n if (range) {\n return this.triggerRangeEvent(range);\n }\n }\n\n return this.doFocus(cell, end);\n }\n\n get types(): AllDimensionType {\n return {\n rowType: this.dataStore.get('type'),\n colType: this.columnService.type,\n };\n }\n\n /**\n * Collect data\n */\n protected getData(): EventData {\n return {\n el: this.element,\n rows: this.dimensionRow.state,\n cols: this.dimensionCol.state,\n lastCell: this.lastCell,\n focus: this.selectionStore.get('focus'),\n range: this.selectionStore.get('range'),\n };\n }\n}\n"]}
@@ -1,8 +1,16 @@
1
1
  /*!
2
2
  * Built by Revolist OU ❤️
3
3
  */
4
- import { getItemByIndex, getItemByPosition, } from "../../store/index";
4
+ import { getItemByIndex, getItemByPosition, getSourceItem, } from "../../store/index";
5
5
  import { getPropertyFromEvent } from "../../utils/events";
6
+ export function collectModelsOfRange(data, store) {
7
+ const models = {};
8
+ for (let i in data) {
9
+ const rowIndex = parseInt(i, 10);
10
+ models[rowIndex] = getSourceItem(store, rowIndex);
11
+ }
12
+ return models;
13
+ }
6
14
  export function getFocusCellBasedOnEvent(e, data) {
7
15
  // If event default is prevented, return
8
16
  if (e.defaultPrevented) {
@@ -53,18 +61,18 @@ export function getCurrentCell({ x, y }, { el, rows, cols }) {
53
61
  return { x: rgCol.itemIndex, y: rgRow.itemIndex };
54
62
  }
55
63
  export function getCoordinate(range, focus, changes, isMulti = false) {
56
- const updateCoordinate = (c) => {
64
+ const updateCoordinate = (c, pos = 0) => {
57
65
  const start = { x: range.x, y: range.y };
58
66
  const end = isMulti ? { x: range.x1, y: range.y1 } : start;
59
67
  const point = end[c] > focus[c] ? end : start;
60
- point[c] += changes[c];
68
+ point[c] += pos;
61
69
  return { start, end };
62
70
  };
63
71
  if (changes.x) {
64
- return updateCoordinate('x');
72
+ return updateCoordinate('x', changes['x']);
65
73
  }
66
74
  if (changes.y) {
67
- return updateCoordinate('y');
75
+ return updateCoordinate('y', changes['y']);
68
76
  }
69
77
  return null;
70
78
  }
@@ -1 +1 @@
1
- {"version":3,"file":"selection.utils.js","sourceRoot":"","sources":["../../../src/components/overlay/selection.utils.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n getItemByIndex,\n getItemByPosition,\n} from '@store';\nimport { DimensionSettingsState, Cell, RangeArea, RangeAreaCss } from '@type';\nimport { getPropertyFromEvent } from '../../utils/events';\n\nexport type EventData = {\n el: HTMLElement;\n rows: DimensionSettingsState;\n cols: DimensionSettingsState;\n lastCell: Cell;\n focus: Cell;\n range: RangeArea;\n};\n\nexport function getFocusCellBasedOnEvent(\n e: MouseEvent | TouchEvent,\n data: EventData,\n): Cell | null {\n // If event default is prevented, return\n if (e.defaultPrevented) {\n return null;\n }\n\n // Get coordinates from event object\n const x = getPropertyFromEvent(e, 'clientX');\n const y = getPropertyFromEvent(e, 'clientY');\n\n // If coordinates are not available, return\n if (x === null || y === null) {\n return null;\n }\n\n // Get current cell based on coordinates and data\n const focusCell = getCurrentCell({ x, y }, data);\n // If current cell is not available, return\n if (isAfterLast(focusCell, data.lastCell)) {\n return null;\n }\n\n return focusCell;\n}\n\n/**\n * Calculate cell based on x, y position\n */\nexport function getCurrentCell(\n { x, y }: Cell,\n { el, rows, cols }: Pick<EventData, 'el' | 'rows' | 'cols'>,\n): Cell {\n // Get the bounding rectangle of the element\n const { top, left, height, width } = el.getBoundingClientRect();\n\n // Calculate the cell position relative to the element\n let cellY = y - top;\n let cellX = x - left;\n\n // Limit the cell position to the element height\n if (cellY >= height) {\n cellY = height - 1;\n }\n\n // Limit the cell position to the element width\n if (cellX >= width) {\n cellX = width - 1;\n }\n\n // Get the row and column items based on the cell position\n const rgRow = getItemByPosition(rows, cellY);\n const rgCol = getItemByPosition(cols, cellX);\n\n // Set the row and column index to 0 if they are before the first item\n if (rgCol.itemIndex < 0) {\n rgCol.itemIndex = 0;\n }\n\n if (rgRow.itemIndex < 0) {\n rgRow.itemIndex = 0;\n }\n\n return { x: rgCol.itemIndex, y: rgRow.itemIndex };\n}\n\nexport function getCoordinate(\n range: RangeArea,\n focus: Cell,\n changes: Partial<Cell>,\n isMulti = false,\n) {\n const updateCoordinate = (c: keyof Cell) => {\n const start = { x: range.x, y: range.y };\n const end = isMulti ? { x: range.x1, y: range.y1 } : start;\n const point = end[c] > focus[c] ? end : start;\n point[c] += changes[c];\n return { start, end };\n };\n\n if (changes.x) {\n return updateCoordinate('x');\n }\n if (changes.y) {\n return updateCoordinate('y');\n }\n return null;\n}\n\n/**\n * Check if the x coordinate of the cell position is after or equal to the x coordinate of the last cell position\n * or if the y coordinate of the cell position is after or equal to the y coordinate of the last cell position\n */\nexport function isAfterLast({ x, y }: Cell, lastCell: Cell) {\n return x >= lastCell.x || y >= lastCell.y;\n}\n\n/** check if out of range */\nexport function isBeforeFirst({ x, y }: Cell) {\n return x < 0 || y < 0;\n}\n\n/** Compare cells, only 1 coordinate difference is possible */\n// export function getDirectionCoordinate(initial: Cell, last: Cell): Partial<Cell> | null {\n// const c: (keyof Cell)[] = ['x', 'y'];\n// for (let k of c) {\n// if (initial[k] !== last[k]) {\n// return { [k]: 1 };\n// }\n// }\n// return null;\n// }\n\n// export function getLargestAxis(initial: Cell, last: Cell): Partial<Cell> | null {\n// const cell: Partial<Cell> = {};\n// const c: (keyof Cell)[] = ['x', 'y'];\n// for (let k of c) {\n// cell[k] = Math.abs(initial[k] - last[k]);\n// }\n// if (cell.x > cell.y) {\n// return { x: 1 };\n// }\n// if (cell.y > cell.x) {\n// return { y: 1 };\n// }\n// return null;\n// }\n\nfunction styleByCellProps(styles: { [key: string]: number }): RangeAreaCss {\n return {\n left: `${styles.left}px`,\n top: `${styles.top}px`,\n width: `${styles.width}px`,\n height: `${styles.height}px`,\n };\n}\n\nexport function getCell(\n { x, y, x1, y1 }: RangeArea,\n dimensionRow: DimensionSettingsState,\n dimensionCol: DimensionSettingsState,\n) {\n const top = getItemByIndex(dimensionRow, y).start;\n const left = getItemByIndex(dimensionCol, x).start;\n const bottom = getItemByIndex(dimensionRow, y1).end;\n const right = getItemByIndex(dimensionCol, x1).end;\n\n return {\n left,\n right,\n top,\n bottom,\n width: right - left,\n height: bottom - top,\n };\n}\n\nexport function getElStyle(\n range: RangeArea,\n dimensionRow: DimensionSettingsState,\n dimensionCol: DimensionSettingsState,\n): RangeAreaCss {\n const styles = getCell(range, dimensionRow, dimensionCol);\n return styleByCellProps(styles);\n}\n"]}
1
+ {"version":3,"file":"selection.utils.js","sourceRoot":"","sources":["../../../src/components/overlay/selection.utils.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n DSourceState,\n getItemByIndex,\n getItemByPosition,\n getSourceItem,\n} from '@store';\nimport { DimensionSettingsState, Cell, RangeArea, RangeAreaCss, DataLookup, DimensionRows, DataType } from '@type';\nimport { getPropertyFromEvent } from '../../utils/events';\nimport { Observable } from '../../utils/store.utils';\n\nexport type EventData = {\n el: HTMLElement;\n rows: DimensionSettingsState;\n cols: DimensionSettingsState;\n lastCell: Cell;\n focus: Cell | null;\n range: RangeArea | null;\n};\n\nexport function collectModelsOfRange(data: DataLookup, store: Observable<DSourceState<DataType, DimensionRows>>) {\n const models: DataLookup = {};\n for (let i in data) {\n const rowIndex = parseInt(i, 10);\n models[rowIndex] = getSourceItem(\n store,\n rowIndex,\n );\n }\n\n return models;\n}\n\nexport function getFocusCellBasedOnEvent(\n e: MouseEvent | TouchEvent,\n data: EventData,\n): Cell | null {\n // If event default is prevented, return\n if (e.defaultPrevented) {\n return null;\n }\n\n // Get coordinates from event object\n const x = getPropertyFromEvent(e, 'clientX');\n const y = getPropertyFromEvent(e, 'clientY');\n\n // If coordinates are not available, return\n if (x === null || y === null) {\n return null;\n }\n\n // Get current cell based on coordinates and data\n const focusCell = getCurrentCell({ x, y }, data);\n // If current cell is not available, return\n if (isAfterLast(focusCell, data.lastCell)) {\n return null;\n }\n\n return focusCell;\n}\n\n/**\n * Calculate cell based on x, y position\n */\nexport function getCurrentCell(\n { x, y }: Cell,\n { el, rows, cols }: Pick<EventData, 'el' | 'rows' | 'cols'>,\n): Cell {\n // Get the bounding rectangle of the element\n const { top, left, height, width } = el.getBoundingClientRect();\n\n // Calculate the cell position relative to the element\n let cellY = y - top;\n let cellX = x - left;\n\n // Limit the cell position to the element height\n if (cellY >= height) {\n cellY = height - 1;\n }\n\n // Limit the cell position to the element width\n if (cellX >= width) {\n cellX = width - 1;\n }\n\n // Get the row and column items based on the cell position\n const rgRow = getItemByPosition(rows, cellY);\n const rgCol = getItemByPosition(cols, cellX);\n\n // Set the row and column index to 0 if they are before the first item\n if (rgCol.itemIndex < 0) {\n rgCol.itemIndex = 0;\n }\n\n if (rgRow.itemIndex < 0) {\n rgRow.itemIndex = 0;\n }\n\n return { x: rgCol.itemIndex, y: rgRow.itemIndex };\n}\n\nexport function getCoordinate(\n range: RangeArea,\n focus: Cell,\n changes: Partial<Cell>,\n isMulti = false,\n) {\n const updateCoordinate = (c: keyof Cell, pos = 0) => {\n const start = { x: range.x, y: range.y };\n const end = isMulti ? { x: range.x1, y: range.y1 } : start;\n const point = end[c] > focus[c] ? end : start;\n point[c] += pos;\n return { start, end };\n };\n\n if (changes.x) {\n return updateCoordinate('x', changes['x']);\n }\n if (changes.y) {\n return updateCoordinate('y', changes['y']);\n }\n return null;\n}\n\n/**\n * Check if the x coordinate of the cell position is after or equal to the x coordinate of the last cell position\n * or if the y coordinate of the cell position is after or equal to the y coordinate of the last cell position\n */\nexport function isAfterLast({ x, y }: Cell, lastCell: Cell) {\n return x >= lastCell.x || y >= lastCell.y;\n}\n\n/** check if out of range */\nexport function isBeforeFirst({ x, y }: Cell) {\n return x < 0 || y < 0;\n}\n\n/** Compare cells, only 1 coordinate difference is possible */\n// export function getDirectionCoordinate(initial: Cell, last: Cell): Partial<Cell> | null {\n// const c: (keyof Cell)[] = ['x', 'y'];\n// for (let k of c) {\n// if (initial[k] !== last[k]) {\n// return { [k]: 1 };\n// }\n// }\n// return null;\n// }\n\n// export function getLargestAxis(initial: Cell, last: Cell): Partial<Cell> | null {\n// const cell: Partial<Cell> = {};\n// const c: (keyof Cell)[] = ['x', 'y'];\n// for (let k of c) {\n// cell[k] = Math.abs(initial[k] - last[k]);\n// }\n// if (cell.x > cell.y) {\n// return { x: 1 };\n// }\n// if (cell.y > cell.x) {\n// return { y: 1 };\n// }\n// return null;\n// }\n\nfunction styleByCellProps(styles: { [key: string]: number }): RangeAreaCss {\n return {\n left: `${styles.left}px`,\n top: `${styles.top}px`,\n width: `${styles.width}px`,\n height: `${styles.height}px`,\n };\n}\n\nexport function getCell(\n { x, y, x1, y1 }: RangeArea,\n dimensionRow: DimensionSettingsState,\n dimensionCol: DimensionSettingsState,\n) {\n const top = getItemByIndex(dimensionRow, y).start;\n const left = getItemByIndex(dimensionCol, x).start;\n const bottom = getItemByIndex(dimensionRow, y1).end;\n const right = getItemByIndex(dimensionCol, x1).end;\n\n return {\n left,\n right,\n top,\n bottom,\n width: right - left,\n height: bottom - top,\n };\n}\n\nexport function getElStyle(\n range: RangeArea,\n dimensionRow: DimensionSettingsState,\n dimensionCol: DimensionSettingsState,\n): RangeAreaCss {\n const styles = getCell(range, dimensionRow, dimensionCol);\n return styleByCellProps(styles);\n}\n"]}