@revolist/revogrid 4.4.0-next.2 → 4.4.0-next.21

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 (243) hide show
  1. package/custom-element/columnService.js +1 -1
  2. package/custom-element/consts.js +2 -1
  3. package/custom-element/consts.js.map +1 -1
  4. package/custom-element/localScrollService.js +1 -1
  5. package/custom-element/localScrollService.js.map +1 -1
  6. package/custom-element/revo-grid.js +163 -97
  7. package/custom-element/revo-grid.js.map +1 -1
  8. package/custom-element/revogr-clipboard.js +24 -5
  9. package/custom-element/revogr-clipboard.js.map +1 -1
  10. package/custom-element/revogr-edit2.js +12 -6
  11. package/custom-element/revogr-edit2.js.map +1 -1
  12. package/custom-element/revogr-focus2.js +1 -1
  13. package/custom-element/revogr-focus2.js.map +1 -1
  14. package/custom-element/revogr-header2.js +25 -11
  15. package/custom-element/revogr-header2.js.map +1 -1
  16. package/custom-element/revogr-overlay-selection2.js +99 -32
  17. package/custom-element/revogr-overlay-selection2.js.map +1 -1
  18. package/custom-element/revogr-row-headers2.js +1 -2
  19. package/custom-element/revogr-row-headers2.js.map +1 -1
  20. package/custom-element/revogr-viewport-scroll2.js +39 -6
  21. package/custom-element/revogr-viewport-scroll2.js.map +1 -1
  22. package/dist/cjs/{debounce-525dd66c.js → debounce-f50730b6.js} +1 -38
  23. package/dist/cjs/debounce-f50730b6.js.map +1 -0
  24. package/dist/cjs/dispatcher-20520c70.js +21 -0
  25. package/dist/cjs/dispatcher-20520c70.js.map +1 -0
  26. package/dist/cjs/events-030618fc.js +459 -0
  27. package/dist/cjs/events-030618fc.js.map +1 -0
  28. package/dist/cjs/filter.button-6badec7a.js +44 -0
  29. package/dist/cjs/filter.button-6badec7a.js.map +1 -0
  30. package/dist/cjs/{index-aad39b7b.js → index-ee2ef5ae.js} +96 -36
  31. package/dist/cjs/index-ee2ef5ae.js.map +1 -0
  32. package/dist/cjs/index-effc94b9.js +3944 -0
  33. package/dist/cjs/index-effc94b9.js.map +1 -0
  34. package/dist/cjs/isString-3dde8d95.js +38 -0
  35. package/dist/cjs/isString-3dde8d95.js.map +1 -0
  36. package/dist/cjs/keyCodes.utils-d665ebed.js +271 -0
  37. package/dist/cjs/keyCodes.utils-d665ebed.js.map +1 -0
  38. package/dist/cjs/loader.cjs.js +3 -3
  39. package/dist/cjs/loader.cjs.js.map +1 -1
  40. package/dist/cjs/localScrollService-a81823c5.js +403 -0
  41. package/dist/cjs/localScrollService-a81823c5.js.map +1 -0
  42. package/dist/cjs/revo-grid.cjs.entry.js +3858 -0
  43. package/dist/cjs/revo-grid.cjs.entry.js.map +1 -0
  44. package/dist/cjs/revo-grid.cjs.js +3 -3
  45. package/dist/cjs/revo-grid.cjs.js.map +1 -1
  46. package/dist/cjs/revogr-clipboard.cjs.entry.js +24 -6
  47. package/dist/cjs/revogr-clipboard.cjs.entry.js.map +1 -1
  48. package/dist/cjs/revogr-data_3.cjs.entry.js +1138 -0
  49. package/dist/cjs/revogr-data_3.cjs.entry.js.map +1 -0
  50. package/dist/cjs/revogr-edit_2.cjs.entry.js +325 -0
  51. package/dist/cjs/revogr-edit_2.cjs.entry.js.map +1 -0
  52. package/dist/cjs/revogr-filter-panel.cjs.entry.js +6 -5
  53. package/dist/cjs/revogr-filter-panel.cjs.entry.js.map +1 -1
  54. package/dist/cjs/revogr-focus_5.cjs.entry.js +1231 -0
  55. package/dist/cjs/revogr-focus_5.cjs.entry.js.map +1 -0
  56. package/dist/cjs/{revo-grid_11.cjs.entry.js → viewport.helpers-70ccec8f.js} +13978 -25269
  57. package/dist/cjs/viewport.helpers-70ccec8f.js.map +1 -0
  58. package/dist/collection/collection-manifest.json +1 -1
  59. package/dist/collection/components/clipboard/revogr-clipboard.d.ts +6 -2
  60. package/dist/collection/components/clipboard/revogr-clipboard.js +46 -5
  61. package/dist/collection/components/clipboard/revogr-clipboard.js.map +1 -1
  62. package/dist/collection/components/header/headerCellRenderer.d.ts +2 -1
  63. package/dist/collection/components/header/headerCellRenderer.js +1 -1
  64. package/dist/collection/components/header/headerCellRenderer.js.map +1 -1
  65. package/dist/collection/components/header/headerRenderer.d.ts +2 -2
  66. package/dist/collection/components/header/headerRenderer.js +1 -1
  67. package/dist/collection/components/header/headerRenderer.js.map +1 -1
  68. package/dist/collection/components/header/revogr-header.d.ts +15 -1
  69. package/dist/collection/components/header/revogr-header.js +34 -8
  70. package/dist/collection/components/header/revogr-header.js.map +1 -1
  71. package/dist/collection/components/overlay/autofill.service.d.ts +7 -3
  72. package/dist/collection/components/overlay/autofill.service.js +32 -12
  73. package/dist/collection/components/overlay/autofill.service.js.map +1 -1
  74. package/dist/collection/components/overlay/clipboard.service.d.ts +1 -1
  75. package/dist/collection/components/overlay/clipboard.service.js +2 -2
  76. package/dist/collection/components/overlay/clipboard.service.js.map +1 -1
  77. package/dist/collection/components/overlay/keyboard.service.js +2 -6
  78. package/dist/collection/components/overlay/keyboard.service.js.map +1 -1
  79. package/dist/collection/components/overlay/revogr-edit.d.ts +8 -0
  80. package/dist/collection/components/overlay/revogr-edit.js +34 -9
  81. package/dist/collection/components/overlay/revogr-edit.js.map +1 -1
  82. package/dist/collection/components/overlay/revogr-overlay-selection.d.ts +32 -10
  83. package/dist/collection/components/overlay/revogr-overlay-selection.js +80 -12
  84. package/dist/collection/components/overlay/revogr-overlay-selection.js.map +1 -1
  85. package/dist/collection/components/overlay/revogr-overlay-style.css +71 -4
  86. package/dist/collection/components/revoGrid/revo-grid.d.ts +15 -4
  87. package/dist/collection/components/revoGrid/revo-grid.js +60 -19
  88. package/dist/collection/components/revoGrid/revo-grid.js.map +1 -1
  89. package/dist/collection/components/revoGrid/viewport.scrolling.service.d.ts +6 -2
  90. package/dist/collection/components/revoGrid/viewport.scrolling.service.js +26 -4
  91. package/dist/collection/components/revoGrid/viewport.scrolling.service.js.map +1 -1
  92. package/dist/collection/components/revoGrid/viewport.section.d.ts +3 -2
  93. package/dist/collection/components/revoGrid/viewport.section.js +8 -4
  94. package/dist/collection/components/revoGrid/viewport.section.js.map +1 -1
  95. package/dist/collection/components/revoGrid/viewport.service.d.ts +4 -0
  96. package/dist/collection/components/revoGrid/viewport.service.js +15 -3
  97. package/dist/collection/components/revoGrid/viewport.service.js.map +1 -1
  98. package/dist/collection/components/rowHeaders/revogr-row-headers.js.map +1 -1
  99. package/dist/collection/components/scroll/revogr-viewport-scroll-style.css +3 -0
  100. package/dist/collection/components/scroll/revogr-viewport-scroll.d.ts +16 -5
  101. package/dist/collection/components/scroll/revogr-viewport-scroll.js +64 -9
  102. package/dist/collection/components/scroll/revogr-viewport-scroll.js.map +1 -1
  103. package/dist/collection/components/selectionFocus/revogr-focus-style.css +1 -1
  104. package/dist/collection/components.d.ts +110 -6
  105. package/dist/collection/interfaces.d.ts +4 -1
  106. package/dist/collection/plugins/groupingColumn/columnGroupsRenderer.d.ts +3 -2
  107. package/dist/collection/plugins/groupingColumn/columnGroupsRenderer.js +2 -2
  108. package/dist/collection/plugins/groupingColumn/columnGroupsRenderer.js.map +1 -1
  109. package/dist/collection/plugins/groupingColumn/headerGroupRenderer.d.ts +2 -2
  110. package/dist/collection/plugins/groupingColumn/headerGroupRenderer.js +1 -1
  111. package/dist/collection/plugins/groupingColumn/headerGroupRenderer.js.map +1 -1
  112. package/dist/collection/plugins/sorting/sorting.plugin.d.ts +21 -13
  113. package/dist/collection/plugins/sorting/sorting.plugin.js +77 -70
  114. package/dist/collection/plugins/sorting/sorting.plugin.js.map +1 -1
  115. package/dist/collection/serve/controller.js +183 -0
  116. package/dist/collection/services/localScrollService.js +1 -1
  117. package/dist/collection/services/localScrollService.js.map +1 -1
  118. package/dist/collection/services/resizable.directive.d.ts +8 -7
  119. package/dist/collection/services/resizable.directive.js +13 -36
  120. package/dist/collection/services/resizable.directive.js.map +1 -1
  121. package/dist/collection/services/resizable.element.d.ts +4 -0
  122. package/dist/collection/services/resizable.element.js +39 -0
  123. package/dist/collection/services/resizable.element.js.map +1 -0
  124. package/dist/collection/stencil-public-runtime.d.ts +1 -0
  125. package/dist/collection/store/viewPort/viewport.store.js +0 -1
  126. package/dist/collection/store/viewPort/viewport.store.js.map +1 -1
  127. package/dist/collection/utils/consts.d.ts +1 -0
  128. package/dist/collection/utils/consts.js +1 -0
  129. package/dist/collection/utils/consts.js.map +1 -1
  130. package/dist/collection/utils/events.d.ts +2 -1
  131. package/dist/collection/utils/events.js +18 -2
  132. package/dist/collection/utils/events.js.map +1 -1
  133. package/dist/collection/utils/mobile.d.ts +1 -0
  134. package/dist/collection/utils/mobile.js +7 -0
  135. package/dist/collection/utils/mobile.js.map +1 -0
  136. package/dist/esm/{debounce-301fd4d2.js → debounce-820b5a8b.js} +2 -34
  137. package/dist/esm/debounce-820b5a8b.js.map +1 -0
  138. package/dist/esm/dispatcher-9e9c0233.js +19 -0
  139. package/dist/esm/dispatcher-9e9c0233.js.map +1 -0
  140. package/dist/esm/events-31272e5e.js +454 -0
  141. package/dist/esm/events-31272e5e.js.map +1 -0
  142. package/dist/esm/filter.button-21ce90ef.js +38 -0
  143. package/dist/esm/filter.button-21ce90ef.js.map +1 -0
  144. package/dist/esm/{index-5e90b19b.js → index-05947c5f.js} +97 -37
  145. package/dist/esm/index-05947c5f.js.map +1 -0
  146. package/dist/esm/index-728bf6e3.js +3889 -0
  147. package/dist/esm/index-728bf6e3.js.map +1 -0
  148. package/dist/esm/isString-d539060a.js +36 -0
  149. package/dist/esm/isString-d539060a.js.map +1 -0
  150. package/dist/esm/keyCodes.utils-c0064460.js +265 -0
  151. package/dist/esm/keyCodes.utils-c0064460.js.map +1 -0
  152. package/dist/esm/loader.js +4 -4
  153. package/dist/esm/loader.js.map +1 -1
  154. package/dist/esm/localScrollService-884d8952.js +400 -0
  155. package/dist/esm/localScrollService-884d8952.js.map +1 -0
  156. package/dist/esm/revo-grid.entry.js +3854 -0
  157. package/dist/esm/revo-grid.entry.js.map +1 -0
  158. package/dist/esm/revo-grid.js +4 -4
  159. package/dist/esm/revo-grid.js.map +1 -1
  160. package/dist/esm/revogr-clipboard.entry.js +24 -6
  161. package/dist/esm/revogr-clipboard.entry.js.map +1 -1
  162. package/dist/esm/revogr-data_3.entry.js +1132 -0
  163. package/dist/esm/revogr-data_3.entry.js.map +1 -0
  164. package/dist/esm/revogr-edit_2.entry.js +320 -0
  165. package/dist/esm/revogr-edit_2.entry.js.map +1 -0
  166. package/dist/esm/revogr-filter-panel.entry.js +3 -2
  167. package/dist/esm/revogr-filter-panel.entry.js.map +1 -1
  168. package/dist/esm/revogr-focus_5.entry.js +1223 -0
  169. package/dist/esm/revogr-focus_5.entry.js.map +1 -0
  170. package/dist/esm/{revo-grid_11.entry.js → viewport.helpers-c08e729e.js} +13790 -25093
  171. package/dist/esm/viewport.helpers-c08e729e.js.map +1 -0
  172. package/dist/revo-grid/debounce-820b5a8b.js +5 -0
  173. package/dist/revo-grid/debounce-820b5a8b.js.map +1 -0
  174. package/dist/revo-grid/dispatcher-9e9c0233.js +5 -0
  175. package/dist/revo-grid/dispatcher-9e9c0233.js.map +1 -0
  176. package/dist/revo-grid/events-31272e5e.js +5 -0
  177. package/dist/revo-grid/events-31272e5e.js.map +1 -0
  178. package/dist/revo-grid/filter.button-21ce90ef.js +5 -0
  179. package/dist/revo-grid/filter.button-21ce90ef.js.map +1 -0
  180. package/dist/revo-grid/index-05947c5f.js +6 -0
  181. package/dist/revo-grid/index-05947c5f.js.map +1 -0
  182. package/dist/revo-grid/index-728bf6e3.js +5 -0
  183. package/dist/revo-grid/index-728bf6e3.js.map +1 -0
  184. package/dist/revo-grid/isString-d539060a.js +5 -0
  185. package/dist/revo-grid/isString-d539060a.js.map +1 -0
  186. package/dist/revo-grid/keyCodes.utils-c0064460.js +5 -0
  187. package/dist/revo-grid/keyCodes.utils-c0064460.js.map +1 -0
  188. package/dist/revo-grid/localScrollService-884d8952.js +5 -0
  189. package/dist/revo-grid/localScrollService-884d8952.js.map +1 -0
  190. package/dist/revo-grid/revo-grid.entry.js +5 -0
  191. package/dist/revo-grid/revo-grid.entry.js.map +1 -0
  192. package/dist/revo-grid/revo-grid.esm.js +1 -1
  193. package/dist/revo-grid/revo-grid.esm.js.map +1 -1
  194. package/dist/revo-grid/revogr-clipboard.entry.js +1 -1
  195. package/dist/revo-grid/revogr-clipboard.entry.js.map +1 -1
  196. package/dist/revo-grid/revogr-data_3.entry.js +5 -0
  197. package/dist/revo-grid/revogr-data_3.entry.js.map +1 -0
  198. package/dist/revo-grid/revogr-edit_2.entry.js +5 -0
  199. package/dist/revo-grid/revogr-edit_2.entry.js.map +1 -0
  200. package/dist/revo-grid/revogr-filter-panel.entry.js +1 -1
  201. package/dist/revo-grid/revogr-filter-panel.entry.js.map +1 -1
  202. package/dist/revo-grid/revogr-focus_5.entry.js +5 -0
  203. package/dist/revo-grid/revogr-focus_5.entry.js.map +1 -0
  204. package/dist/revo-grid/viewport.helpers-c08e729e.js +5 -0
  205. package/dist/revo-grid/viewport.helpers-c08e729e.js.map +1 -0
  206. package/dist/types/components/clipboard/revogr-clipboard.d.ts +6 -2
  207. package/dist/types/components/header/headerCellRenderer.d.ts +2 -1
  208. package/dist/types/components/header/headerRenderer.d.ts +2 -2
  209. package/dist/types/components/header/revogr-header.d.ts +15 -1
  210. package/dist/types/components/overlay/autofill.service.d.ts +7 -3
  211. package/dist/types/components/overlay/clipboard.service.d.ts +1 -1
  212. package/dist/types/components/overlay/revogr-edit.d.ts +8 -0
  213. package/dist/types/components/overlay/revogr-overlay-selection.d.ts +32 -10
  214. package/dist/types/components/revoGrid/revo-grid.d.ts +15 -4
  215. package/dist/types/components/revoGrid/viewport.scrolling.service.d.ts +6 -2
  216. package/dist/types/components/revoGrid/viewport.section.d.ts +3 -2
  217. package/dist/types/components/revoGrid/viewport.service.d.ts +4 -0
  218. package/dist/types/components/scroll/revogr-viewport-scroll.d.ts +16 -5
  219. package/dist/types/components.d.ts +110 -6
  220. package/dist/types/interfaces.d.ts +4 -1
  221. package/dist/types/plugins/groupingColumn/columnGroupsRenderer.d.ts +3 -2
  222. package/dist/types/plugins/groupingColumn/headerGroupRenderer.d.ts +2 -2
  223. package/dist/types/plugins/sorting/sorting.plugin.d.ts +21 -13
  224. package/dist/types/services/resizable.directive.d.ts +8 -7
  225. package/dist/types/services/resizable.element.d.ts +4 -0
  226. package/dist/types/stencil-public-runtime.d.ts +1 -0
  227. package/dist/types/utils/consts.d.ts +1 -0
  228. package/dist/types/utils/events.d.ts +2 -1
  229. package/dist/types/utils/mobile.d.ts +1 -0
  230. package/package.json +4 -3
  231. package/dist/cjs/debounce-525dd66c.js.map +0 -1
  232. package/dist/cjs/index-aad39b7b.js.map +0 -1
  233. package/dist/cjs/revo-grid_11.cjs.entry.js.map +0 -1
  234. package/dist/esm/debounce-301fd4d2.js.map +0 -1
  235. package/dist/esm/index-5e90b19b.js.map +0 -1
  236. package/dist/esm/revo-grid_11.entry.js.map +0 -1
  237. package/dist/revo-grid/debounce-301fd4d2.js +0 -5
  238. package/dist/revo-grid/debounce-301fd4d2.js.map +0 -1
  239. package/dist/revo-grid/index-5e90b19b.js +0 -6
  240. package/dist/revo-grid/index-5e90b19b.js.map +0 -1
  241. package/dist/revo-grid/revo-grid_11.entry.js +0 -5
  242. package/dist/revo-grid/revo-grid_11.entry.js.map +0 -1
  243. /package/dist/collection/{utilsExternal/generate-data.js → serve/data.js} +0 -0
@@ -16,7 +16,7 @@
16
16
  ],
17
17
  "compiler": {
18
18
  "name": "@stencil/core",
19
- "version": "3.2.1",
19
+ "version": "3.2.2",
20
20
  "typescriptVersion": "4.9.5"
21
21
  },
22
22
  "collections": [],
@@ -1,6 +1,10 @@
1
1
  import { EventEmitter } from '../../stencil-public-runtime';
2
2
  import { RevoGrid } from '../../interfaces';
3
3
  export declare class Clipboard {
4
+ /**
5
+ * If readonly mode enables no need for Paste event
6
+ */
7
+ readonly: boolean;
4
8
  /**
5
9
  * Fired when region pasted
6
10
  * @event pasteregion
@@ -71,8 +75,8 @@ export declare class Clipboard {
71
75
  */
72
76
  copyStarted(e: ClipboardEvent): void;
73
77
  /**
74
- * Listen to copy event and emit copy region event
75
- */
78
+ * Listen to copy event and emit copy region event
79
+ */
76
80
  cutStarted(e: ClipboardEvent): void;
77
81
  doCopy(e: DataTransfer, data?: RevoGrid.DataFormat[][]): Promise<void>;
78
82
  parserCopy(data: RevoGrid.DataFormat[][]): string;
@@ -1,18 +1,34 @@
1
1
  export class Clipboard {
2
+ constructor() {
3
+ this.readonly = undefined;
4
+ }
2
5
  onPaste(e) {
6
+ // if readonly do nothing
7
+ if (this.readonly) {
8
+ return;
9
+ }
3
10
  const clipboardData = this.getData(e);
4
11
  const isHTML = clipboardData.types.indexOf('text/html') > -1;
5
12
  const data = isHTML ? clipboardData.getData('text/html') : clipboardData.getData('text');
13
+ const dataText = clipboardData.getData('text');
6
14
  const beforePaste = this.beforePaste.emit({
7
15
  raw: data,
16
+ dataText,
8
17
  isHTML,
9
18
  event: e,
10
19
  });
11
20
  if (beforePaste.defaultPrevented) {
12
21
  return;
13
22
  }
14
- const parsedData = beforePaste.detail.isHTML ?
15
- this.htmlParse(beforePaste.detail.raw) : this.textParse(beforePaste.detail.raw);
23
+ let parsedData;
24
+ // if html, then search for table if no table fallback to regular text parsing
25
+ if (beforePaste.detail.isHTML) {
26
+ const table = this.htmlParse(beforePaste.detail.raw);
27
+ parsedData = table || this.textParse(dataText);
28
+ }
29
+ else {
30
+ parsedData = this.textParse(beforePaste.detail.raw);
31
+ }
16
32
  const beforePasteApply = this.beforePasteApply.emit({
17
33
  raw: data,
18
34
  parsed: parsedData,
@@ -49,8 +65,8 @@ export class Clipboard {
49
65
  e.preventDefault();
50
66
  }
51
67
  /**
52
- * Listen to copy event and emit copy region event
53
- */
68
+ * Listen to copy event and emit copy region event
69
+ */
54
70
  cutStarted(e) {
55
71
  const beforeCut = this.beforeCut.emit({
56
72
  event: e,
@@ -60,6 +76,10 @@ export class Clipboard {
60
76
  }
61
77
  const data = this.getData(beforeCut.detail.event);
62
78
  this.copyStarted(e);
79
+ // if readonly do nothing
80
+ if (this.readonly) {
81
+ return;
82
+ }
63
83
  this.clearRegion.emit(data);
64
84
  e.preventDefault();
65
85
  }
@@ -90,7 +110,7 @@ export class Clipboard {
90
110
  const fragment = document.createRange().createContextualFragment(data);
91
111
  const table = fragment.querySelector('table');
92
112
  if (!table) {
93
- return this.textParse(data);
113
+ return null;
94
114
  }
95
115
  for (const rgRow of Array.from(table.rows)) {
96
116
  result.push(Array.from(rgRow.cells).map(cell => cell.innerText));
@@ -101,6 +121,27 @@ export class Clipboard {
101
121
  return e.clipboardData || (window === null || window === void 0 ? void 0 : window.clipboardData);
102
122
  }
103
123
  static get is() { return "revogr-clipboard"; }
124
+ static get properties() {
125
+ return {
126
+ "readonly": {
127
+ "type": "boolean",
128
+ "mutable": false,
129
+ "complexType": {
130
+ "original": "boolean",
131
+ "resolved": "boolean",
132
+ "references": {}
133
+ },
134
+ "required": false,
135
+ "optional": false,
136
+ "docs": {
137
+ "tags": [],
138
+ "text": "If readonly mode enables no need for Paste event"
139
+ },
140
+ "attribute": "readonly",
141
+ "reflect": false
142
+ }
143
+ };
144
+ }
104
145
  static get events() {
105
146
  return [{
106
147
  "method": "pasteRegion",
@@ -1 +1 @@
1
- {"version":3,"file":"revogr-clipboard.js","sourceRoot":"","sources":["../../../src/components/clipboard/revogr-clipboard.tsx"],"names":[],"mappings":"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","sourcesContent":["import { Component, Listen, Method, Event, EventEmitter } from '@stencil/core';\nimport { RevoGrid } from '../../interfaces';\n\n@Component({ tag: 'revogr-clipboard' })\nexport class Clipboard {\n /**\n * Fired when region pasted\n * @event pasteregion\n * @property {string[][]} data - data to paste\n * @property {boolean} defaultPrevented - if true, paste will be canceled\n */\n @Event({ bubbles: false }) pasteRegion: EventEmitter<string[][]>;\n\n /**\n * Fired before paste applied to the grid\n * @event beforepaste\n * @property {string} raw - raw data from clipboard\n * @property {ClipboardEvent} event - original event\n * @property {boolean} defaultPrevented - if true, paste will be canceled\n */\n @Event({ eventName: 'beforepaste' }) beforePaste: EventEmitter;\n\n /**\n * Fired before paste applied to the grid and after data parsed\n * @event beforepasteapply\n * @property {string} raw - raw data from clipboard\n * @property {string[][]} parsed - parsed data\n */\n @Event({ eventName: 'beforepasteapply' }) beforePasteApply: EventEmitter;\n\n /**\n * Fired after paste applied to the grid\n * @event afterpasteapply\n * @property {string} raw - raw data from clipboard\n * @property {string[][]} parsed - parsed data\n * @property {ClipboardEvent} event - original event\n * @property {boolean} defaultPrevented - if true, paste will be canceled\n */\n @Event({ eventName: 'afterpasteapply' }) afterPasteApply: EventEmitter;\n\n /**\n * Fired before cut triggered\n * @event beforecopy\n * @property {ClipboardEvent} event - original event\n * @property {boolean} defaultPrevented - if true, cut will be canceled\n */\n @Event({ eventName: 'beforecut' }) beforeCut: EventEmitter;\n\n /**\n * Clears region when cut is done\n */\n @Event() clearRegion: EventEmitter<DataTransfer>;\n\n /**\n * Fired before copy triggered\n * @event beforecopy\n * @property {ClipboardEvent} event - original event\n * @property {boolean} defaultPrevented - if true, copy will be canceled\n */\n @Event({ eventName: 'beforecopy' }) beforeCopy: EventEmitter;\n\n /**\n * Fired before copy applied to the clipboard\n * @event beforecopyapply\n * @property {DataTransfer} event - original event\n * @property {string} data - data to copy\n * @property {boolean} defaultPrevented - if true, copy will be canceled\n */\n @Event({ eventName: 'beforecopyapply' }) beforeCopyApply: EventEmitter;\n\n /**\n * Fired when region copied\n * @event copyregion\n * @property {DataTransfer} data - data to copy\n * @property {boolean} defaultPrevented - if true, copy will be canceled\n */\n @Event({ bubbles: false }) copyRegion: EventEmitter<DataTransfer>;\n @Listen('paste', { target: 'document' }) onPaste(e: ClipboardEvent) {\n const clipboardData = this.getData(e);\n const isHTML = clipboardData.types.indexOf('text/html') > -1;\n const data = isHTML ? clipboardData.getData('text/html') : clipboardData.getData('text');\n const beforePaste = this.beforePaste.emit({\n raw: data,\n isHTML,\n event: e,\n });\n\n if (beforePaste.defaultPrevented) {\n return;\n }\n\n const parsedData = beforePaste.detail.isHTML ?\n this.htmlParse(beforePaste.detail.raw) : this.textParse(beforePaste.detail.raw);\n const beforePasteApply = this.beforePasteApply.emit({\n raw: data,\n parsed: parsedData,\n event: e,\n });\n if (beforePasteApply.defaultPrevented) {\n return;\n }\n this.pasteRegion.emit(beforePasteApply.detail.parsed);\n // post paste action\n const afterPasteApply = this.afterPasteApply.emit({\n raw: data,\n parsed: parsedData,\n event: e,\n });\n // keep default behavior if needed\n if (afterPasteApply.defaultPrevented) {\n return;\n }\n e.preventDefault();\n }\n\n /**\n * Listen to copy event and emit copy region event\n */\n @Listen('copy', { target: 'document' }) copyStarted(e: ClipboardEvent) {\n const beforeCopy = this.beforeCopy.emit({\n event: e,\n });\n if (beforeCopy.defaultPrevented) {\n return;\n }\n const data = this.getData(beforeCopy.detail.event);\n this.copyRegion.emit(data);\n e.preventDefault();\n }\n\n /**\n * Listen to copy event and emit copy region event\n */\n @Listen('cut', { target: 'document' }) cutStarted(e: ClipboardEvent) {\n const beforeCut = this.beforeCut.emit({\n event: e,\n });\n if (beforeCut.defaultPrevented) {\n return;\n }\n const data = this.getData(beforeCut.detail.event);\n this.copyStarted(e);\n this.clearRegion.emit(data);\n e.preventDefault();\n }\n\n @Method() async doCopy(e: DataTransfer, data?: RevoGrid.DataFormat[][]) {\n const beforeCopyApply = this.beforeCopyApply.emit({\n event: e,\n data,\n });\n if (beforeCopyApply.defaultPrevented) {\n return;\n }\n const parsed = data ? this.parserCopy(data) : '';\n e.setData('text/plain', parsed);\n }\n\n parserCopy(data: RevoGrid.DataFormat[][]) {\n return data.map(rgRow => rgRow.join('\\t')).join('\\n');\n }\n\n private textParse(data: string) {\n const result: string[][] = [];\n const rows = data.split(/\\r\\n|\\n|\\r/);\n for (let y in rows) {\n result.push(rows[y].split('\\t'));\n }\n return result;\n }\n\n private htmlParse(data: string) {\n const result: string[][] = [];\n const fragment = document.createRange().createContextualFragment(data);\n const table = fragment.querySelector('table');\n if (!table) {\n return this.textParse(data);\n }\n for (const rgRow of Array.from(table.rows)) {\n result.push(Array.from(rgRow.cells).map(cell => cell.innerText));\n }\n return result;\n }\n\n private getData(e: ClipboardEvent) {\n return e.clipboardData || ((window as unknown) as { clipboardData: DataTransfer | null })?.clipboardData;\n }\n}\n"]}
1
+ {"version":3,"file":"revogr-clipboard.js","sourceRoot":"","sources":["../../../src/components/clipboard/revogr-clipboard.tsx"],"names":[],"mappings":"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","sourcesContent":["import { Component, Listen, Method, Event, EventEmitter, Prop } from '@stencil/core';\nimport { RevoGrid } from '../../interfaces';\n\n@Component({ tag: 'revogr-clipboard' })\nexport class Clipboard {\n /**\n * If readonly mode enables no need for Paste event\n */\n @Prop() readonly: boolean;\n\n /**\n * Fired when region pasted\n * @event pasteregion\n * @property {string[][]} data - data to paste\n * @property {boolean} defaultPrevented - if true, paste will be canceled\n */\n @Event({ bubbles: false }) pasteRegion: EventEmitter<string[][]>;\n\n /**\n * Fired before paste applied to the grid\n * @event beforepaste\n * @property {string} raw - raw data from clipboard\n * @property {ClipboardEvent} event - original event\n * @property {boolean} defaultPrevented - if true, paste will be canceled\n */\n @Event({ eventName: 'beforepaste' }) beforePaste: EventEmitter;\n\n /**\n * Fired before paste applied to the grid and after data parsed\n * @event beforepasteapply\n * @property {string} raw - raw data from clipboard\n * @property {string[][]} parsed - parsed data\n */\n @Event({ eventName: 'beforepasteapply' }) beforePasteApply: EventEmitter;\n\n /**\n * Fired after paste applied to the grid\n * @event afterpasteapply\n * @property {string} raw - raw data from clipboard\n * @property {string[][]} parsed - parsed data\n * @property {ClipboardEvent} event - original event\n * @property {boolean} defaultPrevented - if true, paste will be canceled\n */\n @Event({ eventName: 'afterpasteapply' }) afterPasteApply: EventEmitter;\n\n /**\n * Fired before cut triggered\n * @event beforecopy\n * @property {ClipboardEvent} event - original event\n * @property {boolean} defaultPrevented - if true, cut will be canceled\n */\n @Event({ eventName: 'beforecut' }) beforeCut: EventEmitter;\n\n /**\n * Clears region when cut is done\n */\n @Event() clearRegion: EventEmitter<DataTransfer>;\n\n /**\n * Fired before copy triggered\n * @event beforecopy\n * @property {ClipboardEvent} event - original event\n * @property {boolean} defaultPrevented - if true, copy will be canceled\n */\n @Event({ eventName: 'beforecopy' }) beforeCopy: EventEmitter;\n\n /**\n * Fired before copy applied to the clipboard\n * @event beforecopyapply\n * @property {DataTransfer} event - original event\n * @property {string} data - data to copy\n * @property {boolean} defaultPrevented - if true, copy will be canceled\n */\n @Event({ eventName: 'beforecopyapply' }) beforeCopyApply: EventEmitter;\n\n /**\n * Fired when region copied\n * @event copyregion\n * @property {DataTransfer} data - data to copy\n * @property {boolean} defaultPrevented - if true, copy will be canceled\n */\n @Event({ bubbles: false }) copyRegion: EventEmitter<DataTransfer>;\n\n @Listen('paste', { target: 'document' }) onPaste(e: ClipboardEvent) {\n // if readonly do nothing\n if (this.readonly) {\n return;\n }\n const clipboardData = this.getData(e);\n const isHTML = clipboardData.types.indexOf('text/html') > -1;\n const data = isHTML ? clipboardData.getData('text/html') : clipboardData.getData('text');\n const dataText = clipboardData.getData('text');\n\n const beforePaste = this.beforePaste.emit({\n raw: data,\n dataText,\n isHTML,\n event: e,\n });\n\n if (beforePaste.defaultPrevented) {\n return;\n }\n\n let parsedData: string[][];\n // if html, then search for table if no table fallback to regular text parsing\n if (beforePaste.detail.isHTML) {\n const table = this.htmlParse(beforePaste.detail.raw);\n parsedData = table || this.textParse(dataText);\n } else {\n parsedData = this.textParse(beforePaste.detail.raw);\n }\n const beforePasteApply = this.beforePasteApply.emit({\n raw: data,\n parsed: parsedData,\n event: e,\n });\n if (beforePasteApply.defaultPrevented) {\n return;\n }\n this.pasteRegion.emit(beforePasteApply.detail.parsed);\n // post paste action\n const afterPasteApply = this.afterPasteApply.emit({\n raw: data,\n parsed: parsedData,\n event: e,\n });\n // keep default behavior if needed\n if (afterPasteApply.defaultPrevented) {\n return;\n }\n e.preventDefault();\n }\n\n /**\n * Listen to copy event and emit copy region event\n */\n @Listen('copy', { target: 'document' }) copyStarted(e: ClipboardEvent) {\n const beforeCopy = this.beforeCopy.emit({\n event: e,\n });\n if (beforeCopy.defaultPrevented) {\n return;\n }\n const data = this.getData(beforeCopy.detail.event);\n this.copyRegion.emit(data);\n e.preventDefault();\n }\n\n /**\n * Listen to copy event and emit copy region event\n */\n @Listen('cut', { target: 'document' }) cutStarted(e: ClipboardEvent) {\n const beforeCut = this.beforeCut.emit({\n event: e,\n });\n if (beforeCut.defaultPrevented) {\n return;\n }\n const data = this.getData(beforeCut.detail.event);\n this.copyStarted(e);\n\n // if readonly do nothing\n if (this.readonly) {\n return;\n }\n\n this.clearRegion.emit(data);\n e.preventDefault();\n }\n\n @Method() async doCopy(e: DataTransfer, data?: RevoGrid.DataFormat[][]) {\n const beforeCopyApply = this.beforeCopyApply.emit({\n event: e,\n data,\n });\n if (beforeCopyApply.defaultPrevented) {\n return;\n }\n const parsed = data ? this.parserCopy(data) : '';\n e.setData('text/plain', parsed);\n }\n\n parserCopy(data: RevoGrid.DataFormat[][]) {\n return data.map(rgRow => rgRow.join('\\t')).join('\\n');\n }\n\n private textParse(data: string) {\n const result: string[][] = [];\n const rows = data.split(/\\r\\n|\\n|\\r/);\n for (let y in rows) {\n result.push(rows[y].split('\\t'));\n }\n return result;\n }\n\n private htmlParse(data: string) {\n const result: string[][] = [];\n const fragment = document.createRange().createContextualFragment(data);\n const table = fragment.querySelector('table');\n if (!table) {\n return null;\n }\n for (const rgRow of Array.from(table.rows)) {\n result.push(Array.from(rgRow.cells).map(cell => cell.innerText));\n }\n return result;\n }\n\n private getData(e: ClipboardEvent) {\n return e.clipboardData || (window as unknown as { clipboardData: DataTransfer | null })?.clipboardData;\n }\n}\n"]}
@@ -1,7 +1,8 @@
1
1
  import { VNode } from '../../stencil-public-runtime';
2
2
  import { RevoGrid } from '../../interfaces';
3
+ import { ResizeProps } from '../../services/resizable.directive';
3
4
  type Props = {
4
- props: RevoGrid.CellProps;
5
+ props: RevoGrid.CellProps & Partial<ResizeProps>;
5
6
  additionalData: any;
6
7
  data?: RevoGrid.ColumnTemplateProp;
7
8
  };
@@ -3,8 +3,8 @@
3
3
  */
4
4
  import { h } from '@stencil/core';
5
5
  import { dispatch } from '../../plugins/dispatcher';
6
- import { ResizableElement } from '../../services/resizable.directive';
7
6
  import ColumnService from '../data/columnService';
7
+ import { ResizableElement } from '../../services/resizable.element';
8
8
  const ON_COLUMN_CLICK = 'column-click';
9
9
  export const HeaderCellRenderer = ({ data, props, additionalData }, children) => {
10
10
  let colTemplate = (data === null || data === void 0 ? void 0 : data.name) || '';
@@ -1 +1 @@
1
- {"version":3,"file":"headerCellRenderer.js","sourceRoot":"","sources":["../../../src/components/header/headerCellRenderer.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAS,MAAM,eAAe,CAAC;AAEzC,OAAO,EAAE,QAAQ,EAAE,MAAM,0BAA0B,CAAC;AACpD,OAAO,EAAE,gBAAgB,EAAE,MAAM,oCAAoC,CAAC;AACtE,OAAO,aAAa,MAAM,uBAAuB,CAAC;AAQlD,MAAM,eAAe,GAAG,cAAc,CAAC;AAEvC,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,cAAc,EAAS,EAAE,QAAiB,EAAS,EAAE;EACrG,IAAI,WAAW,GAA6B,CAAA,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,IAAI,KAAI,EAAE,CAAC;EAC7D,IAAI,SAAS,GAAG,KAAK,CAAC;EACtB,IAAI,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,cAAc,EAAE;IACxB,WAAW,GAAG,IAAI,CAAC,cAAc,CAAC,CAAC,EAAE,IAAI,EAAE,cAAc,CAAC,CAAC;GAC5D;EACD,IAAI,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,gBAAgB,EAAE;IAC1B,MAAM,KAAK,GAAG,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC;IAC1C,IAAI,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE;MACtC,SAAS,GAAG,aAAa,CAAC,OAAO,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;KACjD;GACF;EACD,OAAO,CACL,EAAC,gBAAgB,oBAAK,SAAS,IAAE,WAAW,EAAE,CAAC,CAAa,EAAE,EAAE;MAC9D,QAAQ,CAAC,CAAC,CAAC,aAA4B,EAAE,eAAe,EAAE;QACxD,IAAI;QACJ,KAAK,EAAE,CAAC;OACT,CAAC,CAAC;IACJ,CAAC;IACA,WAAK,KAAK,EAAC,gBAAgB,IAAE,WAAW,CAAO;IAC9C,QAAQ,CACQ,CACpB,CAAC;AACJ,CAAC,CAAC","sourcesContent":["import { h, VNode } from '@stencil/core';\nimport { RevoGrid } from '../../interfaces';\nimport { dispatch } from '../../plugins/dispatcher';\nimport { ResizableElement } from '../../services/resizable.directive';\nimport ColumnService from '../data/columnService';\n\ntype Props = {\n props: RevoGrid.CellProps;\n additionalData: any;\n data?: RevoGrid.ColumnTemplateProp;\n};\n\nconst ON_COLUMN_CLICK = 'column-click';\n\nexport const HeaderCellRenderer = ({ data, props, additionalData }: Props, children: VNode[]): VNode => {\n let colTemplate: VNode | VNode[] | string = data?.name || '';\n let cellProps = props;\n if (data?.columnTemplate) {\n colTemplate = data.columnTemplate(h, data, additionalData);\n }\n if (data?.columnProperties) {\n const extra = data.columnProperties(data);\n if (extra && typeof extra === 'object') {\n cellProps = ColumnService.doMerge(props, extra);\n }\n }\n return (\n <ResizableElement {...cellProps} onMouseDown={(e: MouseEvent) => {\n dispatch(e.currentTarget as HTMLElement, ON_COLUMN_CLICK, {\n data,\n event: e,\n });\n }}>\n <div class=\"header-content\">{colTemplate}</div>\n {children}\n </ResizableElement>\n );\n};\n"]}
1
+ {"version":3,"file":"headerCellRenderer.js","sourceRoot":"","sources":["../../../src/components/header/headerCellRenderer.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAS,MAAM,eAAe,CAAC;AAEzC,OAAO,EAAE,QAAQ,EAAE,MAAM,0BAA0B,CAAC;AACpD,OAAO,aAAa,MAAM,uBAAuB,CAAC;AAClD,OAAO,EAAE,gBAAgB,EAAE,MAAM,kCAAkC,CAAC;AASpE,MAAM,eAAe,GAAG,cAAc,CAAC;AAEvC,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,cAAc,EAAS,EAAE,QAAiB,EAAS,EAAE;EACrG,IAAI,WAAW,GAA6B,CAAA,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,IAAI,KAAI,EAAE,CAAC;EAC7D,IAAI,SAAS,GAAG,KAAK,CAAC;EACtB,IAAI,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,cAAc,EAAE;IACxB,WAAW,GAAG,IAAI,CAAC,cAAc,CAAC,CAAC,EAAE,IAAI,EAAE,cAAc,CAAC,CAAC;GAC5D;EACD,IAAI,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,gBAAgB,EAAE;IAC1B,MAAM,KAAK,GAAG,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC;IAC1C,IAAI,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE;MACtC,SAAS,GAAG,aAAa,CAAC,OAAO,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;KACjD;GACF;EACD,OAAO,CACL,EAAC,gBAAgB,oBAAK,SAAS,IAAE,WAAW,EAAE,CAAC,CAAa,EAAE,EAAE;MAC9D,QAAQ,CAAC,CAAC,CAAC,aAA4B,EAAE,eAAe,EAAE;QACxD,IAAI;QACJ,KAAK,EAAE,CAAC;OACT,CAAC,CAAC;IACJ,CAAC;IACA,WAAK,KAAK,EAAC,gBAAgB,IAAE,WAAW,CAAO;IAC9C,QAAQ,CACQ,CACpB,CAAC;AACJ,CAAC,CAAC","sourcesContent":["import { h, VNode } from '@stencil/core';\nimport { RevoGrid } from '../../interfaces';\nimport { dispatch } from '../../plugins/dispatcher';\nimport ColumnService from '../data/columnService';\nimport { ResizableElement } from '../../services/resizable.element';\nimport { ResizeProps } from '../../services/resizable.directive';\n\ntype Props = {\n props: RevoGrid.CellProps & Partial<ResizeProps>;\n additionalData: any;\n data?: RevoGrid.ColumnTemplateProp;\n};\n\nconst ON_COLUMN_CLICK = 'column-click';\n\nexport const HeaderCellRenderer = ({ data, props, additionalData }: Props, children: VNode[]): VNode => {\n let colTemplate: VNode | VNode[] | string = data?.name || '';\n let cellProps = props;\n if (data?.columnTemplate) {\n colTemplate = data.columnTemplate(h, data, additionalData);\n }\n if (data?.columnProperties) {\n const extra = data.columnProperties(data);\n if (extra && typeof extra === 'object') {\n cellProps = ColumnService.doMerge(props, extra);\n }\n }\n return (\n <ResizableElement {...cellProps} onMouseDown={(e: MouseEvent) => {\n dispatch(e.currentTarget as HTMLElement, ON_COLUMN_CLICK, {\n data,\n event: e,\n });\n }}>\n <div class=\"header-content\">{colTemplate}</div>\n {children}\n </ResizableElement>\n );\n};\n"]}
@@ -1,6 +1,6 @@
1
1
  import { VNode } from '../../stencil-public-runtime';
2
2
  import { RevoGrid, Selection } from '../../interfaces';
3
- import { ResizeEvent } from '../../services/resizable.directive';
3
+ import { ResizeEvent, ResizeProps } from '../../services/resizable.directive';
4
4
  type Props = {
5
5
  column: RevoGrid.VirtualPositionItem;
6
6
  additionalData: any;
@@ -11,6 +11,6 @@ type Props = {
11
11
  onResize?(e: ResizeEvent): void;
12
12
  onClick?(data: RevoGrid.InitialHeaderClick): void;
13
13
  onDoubleClick?(data: RevoGrid.InitialHeaderClick): void;
14
- };
14
+ } & Partial<Pick<ResizeProps, 'active'>>;
15
15
  declare const HeaderRenderer: (p: Props) => VNode;
16
16
  export default HeaderRenderer;
@@ -20,7 +20,7 @@ const HeaderRenderer = (p) => {
20
20
  canResize: p.canResize,
21
21
  minWidth: ((_c = p.data) === null || _c === void 0 ? void 0 : _c.minSize) || MIN_COL_SIZE,
22
22
  maxWidth: (_d = p.data) === null || _d === void 0 ? void 0 : _d.maxSize,
23
- active: ['r'],
23
+ active: p.active || ['r'],
24
24
  class: cellClass,
25
25
  style: { width: `${p.column.size}px`, transform: `translateX(${p.column.start}px)` },
26
26
  onResize: p.onResize,
@@ -1 +1 @@
1
- {"version":3,"file":"headerRenderer.js","sourceRoot":"","sources":["../../../src/components/header/headerRenderer.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAS,MAAM,eAAe,CAAC;AAEzC,OAAO,EAAE,YAAY,EAAE,MAAM,oCAAoC,CAAC;AAClE,OAAO,EAAE,WAAW,EAAE,MAAM,oCAAoC,CAAC;AAEjE,OAAO,EAAE,QAAQ,EAAE,WAAW,EAAE,YAAY,EAAE,qBAAqB,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAC9G,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAc1D,MAAM,cAAc,GAAG,CAAC,CAAQ,EAAS,EAAE;;EACzC,MAAM,SAAS,GAA+B;IAC5C,CAAC,YAAY,CAAC,EAAE,IAAI;IACpB,CAAC,qBAAqB,CAAC,EAAE,CAAC,CAAC,CAAA,MAAA,CAAC,CAAC,IAAI,0CAAE,QAAQ,CAAA;GAC5C,CAAC;EACF,IAAI,MAAA,CAAC,CAAC,IAAI,0CAAE,KAAK,EAAE;IACjB,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC;GAChC;EACD,MAAM,SAAS,GAAG;IAChB,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,MAAM,CAAC,SAAS;IAC9B,SAAS,EAAE,CAAC,CAAC,SAAS;IACtB,QAAQ,EAAE,CAAA,MAAA,CAAC,CAAC,IAAI,0CAAE,OAAO,KAAI,YAAY;IACzC,QAAQ,EAAE,MAAA,CAAC,CAAC,IAAI,0CAAE,OAAO;IACzB,MAAM,EAAE,CAAC,GAAG,CAAC;IACb,KAAK,EAAE,SAAS;IAChB,KAAK,EAAE,EAAE,KAAK,EAAE,GAAG,CAAC,CAAC,MAAM,CAAC,IAAI,IAAI,EAAE,SAAS,EAAE,cAAc,CAAC,CAAC,MAAM,CAAC,KAAK,KAAK,EAAE;IACpF,QAAQ,EAAE,CAAC,CAAC,QAAQ;IACpB,aAAa,CAAC,aAAyB;MACrC,CAAC,CAAC,aAAa,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC,MAAM,CAAC,SAAS,EAAE,aAAa,EAAE,CAAC,CAAC;IAChF,CAAC;IACD,OAAO,CAAC,aAAyB;MAC/B,IAAI,aAAa,CAAC,gBAAgB,IAAI,CAAC,CAAC,CAAC,OAAO,EAAE;QAChD,OAAO;OACR;MACD,CAAC,CAAC,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC,MAAM,CAAC,SAAS,EAAE,aAAa,EAAE,CAAC,CAAC;IAC1E,CAAC;GACF,CAAC;EACF,IAAI,CAAC,CAAC,KAAK,EAAE;IACX,IAAI,CAAC,CAAC,MAAM,CAAC,SAAS,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,SAAS,IAAI,CAAC,CAAC,KAAK,CAAC,EAAE,EAAE;MACvE,IAAI,OAAO,SAAS,CAAC,KAAK,KAAK,QAAQ,EAAE;QACvC,SAAS,CAAC,KAAK,CAAC,WAAW,CAAC,GAAG,IAAI,CAAC;OACrC;KACF;GACF;EACD,OAAO,CACL,EAAC,kBAAkB,IAAC,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,SAAS,EAAE,cAAc,EAAE,CAAC,CAAC,cAAc;IACjF,CAAA,MAAA,CAAC,CAAC,IAAI,0CAAE,KAAK,EAAC,CAAC,CAAC,EAAC,WAAW,IAAC,MAAM,EAAE,CAAC,CAAC,IAAI,GAAI,CAAC,CAAC,CAAC,EAAE;IACpD,CAAC,CAAC,SAAS,IAAI,CAAA,MAAA,CAAC,CAAC,IAAI,0CAAE,MAAM,MAAK,KAAK,CAAC,CAAC,CAAC,EAAC,YAAY,IAAC,MAAM,EAAE,CAAC,CAAC,IAAI,GAAI,CAAC,CAAC,CAAC,EAAE,CAC7D,CACtB,CAAC;AACJ,CAAC,CAAC;AAEF,eAAe,cAAc,CAAC","sourcesContent":["import { h, VNode } from '@stencil/core';\nimport { RevoGrid, Selection } from '../../interfaces';\nimport { FilterButton } from '../../plugins/filter/filter.button';\nimport { SortingSign } from '../../plugins/sorting/sorting.sign';\nimport { ResizeEvent } from '../../services/resizable.directive';\nimport { DATA_COL, FOCUS_CLASS, HEADER_CLASS, HEADER_SORTABLE_CLASS, MIN_COL_SIZE } from '../../utils/consts';\nimport { HeaderCellRenderer } from './headerCellRenderer';\n\ntype Props = {\n column: RevoGrid.VirtualPositionItem;\n additionalData: any;\n data?: RevoGrid.ColumnTemplateProp;\n range?: Selection.RangeArea;\n canResize?: boolean;\n canFilter?: boolean;\n onResize?(e: ResizeEvent): void;\n onClick?(data: RevoGrid.InitialHeaderClick): void;\n onDoubleClick?(data: RevoGrid.InitialHeaderClick): void;\n};\n\nconst HeaderRenderer = (p: Props): VNode => {\n const cellClass: { [key: string]: boolean } = {\n [HEADER_CLASS]: true,\n [HEADER_SORTABLE_CLASS]: !!p.data?.sortable,\n };\n if (p.data?.order) {\n cellClass[p.data.order] = true;\n }\n const dataProps = {\n [DATA_COL]: p.column.itemIndex,\n canResize: p.canResize,\n minWidth: p.data?.minSize || MIN_COL_SIZE,\n maxWidth: p.data?.maxSize,\n active: ['r'],\n class: cellClass,\n style: { width: `${p.column.size}px`, transform: `translateX(${p.column.start}px)` },\n onResize: p.onResize,\n onDoubleClick(originalEvent: MouseEvent) {\n p.onDoubleClick({ column: p.data, index: p.column.itemIndex, originalEvent });\n },\n onClick(originalEvent: MouseEvent) {\n if (originalEvent.defaultPrevented || !p.onClick) {\n return;\n }\n p.onClick({ column: p.data, index: p.column.itemIndex, originalEvent });\n },\n };\n if (p.range) {\n if (p.column.itemIndex >= p.range.x && p.column.itemIndex <= p.range.x1) {\n if (typeof dataProps.class === 'object') {\n dataProps.class[FOCUS_CLASS] = true;\n }\n }\n }\n return (\n <HeaderCellRenderer data={p.data} props={dataProps} additionalData={p.additionalData}>\n {p.data?.order ? <SortingSign column={p.data} /> : ''}\n {p.canFilter && p.data?.filter !== false ? <FilterButton column={p.data} /> : ''}\n </HeaderCellRenderer>\n );\n};\n\nexport default HeaderRenderer;\n"]}
1
+ {"version":3,"file":"headerRenderer.js","sourceRoot":"","sources":["../../../src/components/header/headerRenderer.tsx"],"names":[],"mappings":"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","sourcesContent":["import { h, VNode } from '@stencil/core';\nimport { RevoGrid, Selection } from '../../interfaces';\nimport { FilterButton } from '../../plugins/filter/filter.button';\nimport { SortingSign } from '../../plugins/sorting/sorting.sign';\nimport { ResizeEvent, ResizeProps } from '../../services/resizable.directive';\nimport { DATA_COL, FOCUS_CLASS, HEADER_CLASS, HEADER_SORTABLE_CLASS, MIN_COL_SIZE } from '../../utils/consts';\nimport { HeaderCellRenderer } from './headerCellRenderer';\n\ntype Props = {\n column: RevoGrid.VirtualPositionItem;\n additionalData: any;\n data?: RevoGrid.ColumnTemplateProp;\n range?: Selection.RangeArea;\n canResize?: boolean;\n canFilter?: boolean;\n onResize?(e: ResizeEvent): void;\n onClick?(data: RevoGrid.InitialHeaderClick): void;\n onDoubleClick?(data: RevoGrid.InitialHeaderClick): void;\n} & Partial<Pick<ResizeProps, 'active'>>;\n\nconst HeaderRenderer = (p: Props): VNode => {\n const cellClass: { [key: string]: boolean } = {\n [HEADER_CLASS]: true,\n [HEADER_SORTABLE_CLASS]: !!p.data?.sortable,\n };\n if (p.data?.order) {\n cellClass[p.data.order] = true;\n }\n const dataProps: RevoGrid.CellProps & Partial<ResizeProps> = {\n [DATA_COL]: p.column.itemIndex,\n canResize: p.canResize,\n minWidth: p.data?.minSize || MIN_COL_SIZE,\n maxWidth: p.data?.maxSize,\n active: p.active || ['r'],\n class: cellClass,\n style: { width: `${p.column.size}px`, transform: `translateX(${p.column.start}px)` },\n onResize: p.onResize,\n onDoubleClick(originalEvent: MouseEvent) {\n p.onDoubleClick({ column: p.data, index: p.column.itemIndex, originalEvent });\n },\n onClick(originalEvent: MouseEvent) {\n if (originalEvent.defaultPrevented || !p.onClick) {\n return;\n }\n p.onClick({ column: p.data, index: p.column.itemIndex, originalEvent });\n },\n };\n if (p.range) {\n if (p.column.itemIndex >= p.range.x && p.column.itemIndex <= p.range.x1) {\n if (typeof dataProps.class === 'object') {\n dataProps.class[FOCUS_CLASS] = true;\n }\n }\n }\n return (\n <HeaderCellRenderer data={p.data} props={dataProps} additionalData={p.additionalData}>\n {p.data?.order ? <SortingSign column={p.data} /> : ''}\n {p.canFilter && p.data?.filter !== false ? <FilterButton column={p.data} /> : ''}\n </HeaderCellRenderer>\n );\n};\n\nexport default HeaderRenderer;\n"]}
@@ -2,6 +2,7 @@ import { EventEmitter } from '../../stencil-public-runtime';
2
2
  import { HTMLStencilElement } from '../../stencil-public-runtime';
3
3
  import { Observable, RevoGrid, Selection } from '../../interfaces';
4
4
  import { Groups } from '../../store/dataSource/data.store';
5
+ import { ResizeProps } from '../../services/resizable.directive';
5
6
  export declare class RevogrHeaderComponent {
6
7
  element: HTMLStencilElement;
7
8
  viewportCol: Observable<RevoGrid.ViewportState>;
@@ -10,10 +11,23 @@ export declare class RevogrHeaderComponent {
10
11
  parent: string;
11
12
  groups: Groups;
12
13
  groupingDepth: number;
14
+ /**
15
+ * If columns can be resized
16
+ */
13
17
  canResize: boolean;
18
+ /**
19
+ * Define custom resize position
20
+ */
21
+ resizeHandler: ResizeProps['active'];
14
22
  colData: RevoGrid.ColumnRegular[];
15
23
  columnFilter: boolean;
16
- type: string;
24
+ /**
25
+ * Column type
26
+ */
27
+ type: RevoGrid.DimensionCols | 'rowHeaders';
28
+ /**
29
+ * Extra properties to pass into header renderer, such as vue or react components to handle parent
30
+ */
17
31
  additionalData: any;
18
32
  initialHeaderClick: EventEmitter<RevoGrid.InitialHeaderClick>;
19
33
  headerresize: EventEmitter<RevoGrid.ViewSettingSizeProp>;
@@ -15,6 +15,7 @@ export class RevogrHeaderComponent {
15
15
  this.groups = undefined;
16
16
  this.groupingDepth = 0;
17
17
  this.canResize = undefined;
18
+ this.resizeHandler = undefined;
18
19
  this.colData = undefined;
19
20
  this.columnFilter = undefined;
20
21
  this.type = undefined;
@@ -49,11 +50,11 @@ export class RevogrHeaderComponent {
49
50
  // render header columns
50
51
  for (let rgCol of cols) {
51
52
  const colData = this.colData[rgCol.itemIndex];
52
- cells.push(h(HeaderRenderer, { range: range, column: rgCol, data: Object.assign(Object.assign({}, colData), { index: rgCol.itemIndex, providers: this.providers }), canFilter: !!this.columnFilter, canResize: this.canResize, additionalData: this.additionalData, onResize: e => this.onResize(e, rgCol.itemIndex), onDoubleClick: e => this.headerdblClick.emit(e), onClick: e => this.initialHeaderClick.emit(e) }));
53
+ cells.push(h(HeaderRenderer, { range: range, column: rgCol, data: Object.assign(Object.assign({}, colData), { index: rgCol.itemIndex, providers: this.providers }), canFilter: !!this.columnFilter, canResize: this.canResize, active: this.resizeHandler, onResize: e => this.onResize(e, rgCol.itemIndex), onDoubleClick: e => this.headerdblClick.emit(e), onClick: e => this.initialHeaderClick.emit(e), additionalData: this.additionalData }));
53
54
  visibleProps[colData === null || colData === void 0 ? void 0 : colData.prop] = rgCol.itemIndex;
54
55
  }
55
56
  return [
56
- h("div", { class: "group-rgRow" }, h(ColumnGroupsRenderer, { additionalData: this.additionalData, canResize: this.canResize, visibleProps: visibleProps, providers: this.providers, groups: this.groups, dimensionCol: this.dimensionCol.state, depth: this.groupingDepth, onResize: (changedX, startIndex, endIndex) => this.onResizeGroup(changedX, startIndex, endIndex) })),
57
+ h("div", { class: "group-rgRow" }, h(ColumnGroupsRenderer, { canResize: this.canResize, active: this.resizeHandler, visibleProps: visibleProps, providers: this.providers, groups: this.groups, dimensionCol: this.dimensionCol.state, depth: this.groupingDepth, onResize: (changedX, startIndex, endIndex) => this.onResizeGroup(changedX, startIndex, endIndex), additionalData: this.additionalData })),
57
58
  h("div", { class: `${HEADER_ROW_CLASS} ${HEADER_ACTUAL_ROW_CLASS}` }, cells),
58
59
  ];
59
60
  }
@@ -219,11 +220,31 @@ export class RevogrHeaderComponent {
219
220
  "optional": false,
220
221
  "docs": {
221
222
  "tags": [],
222
- "text": ""
223
+ "text": "If columns can be resized"
223
224
  },
224
225
  "attribute": "can-resize",
225
226
  "reflect": false
226
227
  },
228
+ "resizeHandler": {
229
+ "type": "unknown",
230
+ "mutable": false,
231
+ "complexType": {
232
+ "original": "ResizeProps['active']",
233
+ "resolved": "(\"b\" | \"rt\" | \"lt\" | \"r\" | \"rb\" | \"lb\" | \"l\" | \"t\")[]",
234
+ "references": {
235
+ "ResizeProps": {
236
+ "location": "import",
237
+ "path": "../../services/resizable.directive"
238
+ }
239
+ }
240
+ },
241
+ "required": false,
242
+ "optional": false,
243
+ "docs": {
244
+ "tags": [],
245
+ "text": "Define custom resize position"
246
+ }
247
+ },
227
248
  "colData": {
228
249
  "type": "unknown",
229
250
  "mutable": false,
@@ -265,15 +286,20 @@ export class RevogrHeaderComponent {
265
286
  "type": "string",
266
287
  "mutable": false,
267
288
  "complexType": {
268
- "original": "string",
269
- "resolved": "string",
270
- "references": {}
289
+ "original": "RevoGrid.DimensionCols | 'rowHeaders'",
290
+ "resolved": "\"colPinEnd\" | \"colPinStart\" | \"rgCol\" | \"rowHeaders\"",
291
+ "references": {
292
+ "RevoGrid": {
293
+ "location": "import",
294
+ "path": "../../interfaces"
295
+ }
296
+ }
271
297
  },
272
298
  "required": true,
273
299
  "optional": false,
274
300
  "docs": {
275
301
  "tags": [],
276
- "text": ""
302
+ "text": "Column type"
277
303
  },
278
304
  "attribute": "type",
279
305
  "reflect": false
@@ -290,7 +316,7 @@ export class RevogrHeaderComponent {
290
316
  "optional": false,
291
317
  "docs": {
292
318
  "tags": [],
293
- "text": ""
319
+ "text": "Extra properties to pass into header renderer, such as vue or react components to handle parent"
294
320
  },
295
321
  "attribute": "additional-data",
296
322
  "reflect": false,
@@ -1 +1 @@
1
- {"version":3,"file":"revogr-header.js","sourceRoot":"","sources":["../../../src/components/header/revogr-header.tsx"],"names":[],"mappings":"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","sourcesContent":["import { Component, Element, Event, EventEmitter, h, Prop } from '@stencil/core';\nimport { HTMLStencilElement, VNode } from '@stencil/core/internal';\nimport keyBy from 'lodash/keyBy';\n\nimport { HEADER_ACTUAL_ROW_CLASS, HEADER_ROW_CLASS } from '../../utils/consts';\nimport { Observable, RevoGrid, Selection } from '../../interfaces';\nimport { Groups } from '../../store/dataSource/data.store';\nimport HeaderRenderer from './headerRenderer';\nimport ColumnGroupsRenderer from '../../plugins/groupingColumn/columnGroupsRenderer';\n\n@Component({\n tag: 'revogr-header',\n styleUrl: 'revogr-header-style.scss',\n})\nexport class RevogrHeaderComponent {\n @Element() element!: HTMLStencilElement;\n @Prop() viewportCol: Observable<RevoGrid.ViewportState>;\n @Prop() dimensionCol: Observable<RevoGrid.DimensionSettingsState>;\n @Prop() selectionStore: Observable<Selection.SelectionStoreState>;\n\n @Prop() parent: string = '';\n @Prop() groups: Groups;\n @Prop() groupingDepth: number = 0;\n @Prop() canResize: boolean;\n @Prop() colData: RevoGrid.ColumnRegular[];\n @Prop() columnFilter: boolean;\n @Prop() type!: string;\n\n @Prop() additionalData: any = {};\n\n @Event() initialHeaderClick: EventEmitter<RevoGrid.InitialHeaderClick>;\n @Event() headerresize: EventEmitter<RevoGrid.ViewSettingSizeProp>;\n @Event({ eventName: 'before-resize', cancelable: true }) beforeResize: EventEmitter<RevoGrid.ColumnRegular[]>;\n @Event() headerdblClick: EventEmitter<RevoGrid.InitialHeaderClick>;\n\n private onResize({ width }: { width?: number }, index: number): void {\n const col = this.colData[index];\n const event = this.beforeResize.emit([{\n ...col,\n size: width || undefined\n }]);\n if (event.defaultPrevented) {\n return;\n }\n this.headerresize.emit({ [index]: width || 0 });\n }\n\n private onResizeGroup(changedX: number, startIndex: number, endIndex: number): void {\n const sizes: RevoGrid.ViewSettingSizeProp = {};\n const cols = keyBy(this.viewportCol.get('items'), 'itemIndex');\n const change = changedX / (endIndex - startIndex + 1);\n for (let i = startIndex; i <= endIndex; i++) {\n const item = cols[i];\n if (item) {\n sizes[i] = item.size + change;\n }\n }\n this.headerresize.emit(sizes);\n }\n\n render() {\n const cols = this.viewportCol.get('items');\n const range = this.selectionStore?.get('range');\n const cells: VNode[] = [];\n const visibleProps: { [prop: string]: number } = {};\n\n // render header columns\n for (let rgCol of cols) {\n const colData = this.colData[rgCol.itemIndex];\n cells.push(\n <HeaderRenderer\n range={range}\n column={rgCol}\n data={{\n ...colData,\n index: rgCol.itemIndex,\n providers: this.providers,\n }}\n canFilter={!!this.columnFilter}\n canResize={this.canResize}\n additionalData={this.additionalData}\n onResize={e => this.onResize(e, rgCol.itemIndex)}\n onDoubleClick={e => this.headerdblClick.emit(e)}\n onClick={e => this.initialHeaderClick.emit(e)}\n />,\n );\n visibleProps[colData?.prop] = rgCol.itemIndex;\n }\n\n return [\n <div class=\"group-rgRow\">\n <ColumnGroupsRenderer\n additionalData={this.additionalData}\n canResize={this.canResize}\n visibleProps={visibleProps}\n providers={this.providers}\n groups={this.groups}\n dimensionCol={this.dimensionCol.state}\n depth={this.groupingDepth}\n onResize={(changedX, startIndex, endIndex) => this.onResizeGroup(changedX, startIndex, endIndex)}\n />\n </div>,\n <div class={`${HEADER_ROW_CLASS} ${HEADER_ACTUAL_ROW_CLASS}`}>{cells}</div>,\n ];\n }\n\n get providers(): RevoGrid.Providers {\n return {\n type: this.type,\n data: this.colData,\n viewport: this.viewportCol,\n dimension: this.dimensionCol,\n selection: this.selectionStore,\n };\n }\n}\n"]}
1
+ {"version":3,"file":"revogr-header.js","sourceRoot":"","sources":["../../../src/components/header/revogr-header.tsx"],"names":[],"mappings":"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","sourcesContent":["import { Component, Element, Event, EventEmitter, h, Prop } from '@stencil/core';\nimport { HTMLStencilElement, VNode } from '@stencil/core/internal';\nimport keyBy from 'lodash/keyBy';\n\nimport { HEADER_ACTUAL_ROW_CLASS, HEADER_ROW_CLASS } from '../../utils/consts';\nimport { Observable, RevoGrid, Selection } from '../../interfaces';\nimport { Groups } from '../../store/dataSource/data.store';\nimport HeaderRenderer from './headerRenderer';\nimport ColumnGroupsRenderer from '../../plugins/groupingColumn/columnGroupsRenderer';\nimport { ResizeProps } from '../../services/resizable.directive';\n\n@Component({\n tag: 'revogr-header',\n styleUrl: 'revogr-header-style.scss',\n})\nexport class RevogrHeaderComponent {\n @Element() element!: HTMLStencilElement;\n @Prop() viewportCol: Observable<RevoGrid.ViewportState>;\n @Prop() dimensionCol: Observable<RevoGrid.DimensionSettingsState>;\n @Prop() selectionStore: Observable<Selection.SelectionStoreState>;\n\n @Prop() parent: string = '';\n @Prop() groups: Groups;\n @Prop() groupingDepth: number = 0;\n\n /**\n * If columns can be resized\n */\n @Prop() canResize: boolean;\n /**\n * Define custom resize position\n */\n @Prop() resizeHandler: ResizeProps['active'];\n @Prop() colData: RevoGrid.ColumnRegular[];\n @Prop() columnFilter: boolean;\n\n /**\n * Column type\n */\n @Prop() type!: RevoGrid.DimensionCols | 'rowHeaders';\n\n /**\n * Extra properties to pass into header renderer, such as vue or react components to handle parent\n */\n @Prop() additionalData: any = {};\n\n @Event() initialHeaderClick: EventEmitter<RevoGrid.InitialHeaderClick>;\n @Event() headerresize: EventEmitter<RevoGrid.ViewSettingSizeProp>;\n @Event({ eventName: 'before-resize', cancelable: true }) beforeResize: EventEmitter<RevoGrid.ColumnRegular[]>;\n @Event() headerdblClick: EventEmitter<RevoGrid.InitialHeaderClick>;\n\n private onResize({ width }: { width?: number }, index: number): void {\n const col = this.colData[index];\n const event = this.beforeResize.emit([{\n ...col,\n size: width || undefined\n }]);\n if (event.defaultPrevented) {\n return;\n }\n this.headerresize.emit({ [index]: width || 0 });\n }\n\n private onResizeGroup(changedX: number, startIndex: number, endIndex: number): void {\n const sizes: RevoGrid.ViewSettingSizeProp = {};\n const cols = keyBy(this.viewportCol.get('items'), 'itemIndex');\n const change = changedX / (endIndex - startIndex + 1);\n for (let i = startIndex; i <= endIndex; i++) {\n const item = cols[i];\n if (item) {\n sizes[i] = item.size + change;\n }\n }\n this.headerresize.emit(sizes);\n }\n\n render() {\n const cols = this.viewportCol.get('items');\n const range = this.selectionStore?.get('range');\n const cells: VNode[] = [];\n const visibleProps: { [prop: string]: number } = {};\n\n // render header columns\n for (let rgCol of cols) {\n const colData = this.colData[rgCol.itemIndex];\n cells.push(\n <HeaderRenderer\n range={range}\n column={rgCol}\n data={{\n ...colData,\n index: rgCol.itemIndex,\n providers: this.providers,\n }}\n canFilter={!!this.columnFilter}\n canResize={this.canResize}\n active={this.resizeHandler}\n onResize={e => this.onResize(e, rgCol.itemIndex)}\n onDoubleClick={e => this.headerdblClick.emit(e)}\n onClick={e => this.initialHeaderClick.emit(e)}\n additionalData={this.additionalData}\n />,\n );\n visibleProps[colData?.prop] = rgCol.itemIndex;\n }\n\n return [\n <div class=\"group-rgRow\">\n <ColumnGroupsRenderer\n canResize={this.canResize}\n active={this.resizeHandler}\n visibleProps={visibleProps}\n providers={this.providers}\n groups={this.groups}\n dimensionCol={this.dimensionCol.state}\n depth={this.groupingDepth}\n onResize={(changedX, startIndex, endIndex) => this.onResizeGroup(changedX, startIndex, endIndex)}\n additionalData={this.additionalData}\n />\n </div>,\n <div class={`${HEADER_ROW_CLASS} ${HEADER_ACTUAL_ROW_CLASS}`}>{cells}</div>,\n ];\n }\n\n get providers(): RevoGrid.Providers {\n return {\n type: this.type,\n data: this.colData,\n viewport: this.viewportCol,\n dimension: this.dimensionCol,\n selection: this.selectionStore,\n };\n }\n}\n"]}
@@ -39,9 +39,10 @@ export declare class AutoFillService {
39
39
  * @param selectionFocus
40
40
  */
41
41
  renderAutofill(range: Selection.RangeArea, selectionFocus: Selection.Cell): any;
42
+ private autoFillHandler;
42
43
  get isAutoFill(): boolean;
43
44
  /** Process mouse move events */
44
- selectionMouseMove(e: MouseEvent & TouchEvent): void;
45
+ selectionMouseMove(e: MouseEvent | TouchEvent): void;
45
46
  private getFocus;
46
47
  /**
47
48
  * Autofill logic:
@@ -54,7 +55,7 @@ export declare class AutoFillService {
54
55
  * Can be triggered from MouseDown selection on element
55
56
  * Or can be triggered on corner square drag
56
57
  */
57
- selectionStart(e: MouseEvent, data: EventData, type?: AutoFillType): void;
58
+ selectionStart(target: Element, data: EventData, type?: AutoFillType): void;
58
59
  /**
59
60
  * Clear current range selection
60
61
  * on mouse up and mouse leave events
@@ -64,7 +65,10 @@ export declare class AutoFillService {
64
65
  onRangeApply(data: RevoGrid.DataLookup, range: Selection.RangeArea): void;
65
66
  /** Apply range and copy data during range application */
66
67
  private applyRangeWithData;
67
- /** Update range selection ony, no data change (mouse selection) */
68
+ /**
69
+ * Update range selection only,
70
+ * no data change (mouse selection)
71
+ */
68
72
  private applyRangeOnly;
69
73
  }
70
74
  export {};
@@ -3,7 +3,7 @@
3
3
  */
4
4
  import debounce from 'lodash/debounce';
5
5
  import { h } from '@stencil/core';
6
- import { CELL_HANDLER_CLASS } from '../../utils/consts';
6
+ import { CELL_HANDLER_CLASS, MOBILE_CLASS } from '../../utils/consts';
7
7
  import { getCell, getCurrentCell, isAfterLast } from './selection.utils';
8
8
  import { getRange } from '../../store/selection/selection.helpers';
9
9
  import { getSourceItem } from '../../store/dataSource/data.store';
@@ -34,7 +34,21 @@ export class AutoFillService {
34
34
  else {
35
35
  handlerStyle = getCell(Object.assign(Object.assign({}, selectionFocus), { x1: selectionFocus.x, y1: selectionFocus.y }), this.sv.dimensionRow.state, this.sv.dimensionCol.state);
36
36
  }
37
- return (h("div", { class: CELL_HANDLER_CLASS, style: { left: `${handlerStyle.right}px`, top: `${handlerStyle.bottom}px` }, onMouseDown: (e) => this.selectionStart(e, this.sv.getData(), AutoFillType.autoFill) }));
37
+ return (h("div", { class: {
38
+ [CELL_HANDLER_CLASS]: true,
39
+ [MOBILE_CLASS]: true,
40
+ }, style: { left: `${handlerStyle.right}px`, top: `${handlerStyle.bottom}px` }, onMouseDown: (e) => this.autoFillHandler(e), onTouchStart: (e) => this.autoFillHandler(e) }));
41
+ }
42
+ autoFillHandler(e, type = AutoFillType.autoFill) {
43
+ let target = null;
44
+ if (e.target instanceof Element) {
45
+ target = e.target;
46
+ }
47
+ if (!target) {
48
+ return;
49
+ }
50
+ this.selectionStart(target, this.sv.getData(), type);
51
+ e.preventDefault();
38
52
  }
39
53
  get isAutoFill() {
40
54
  return !!this.autoFillType;
@@ -52,13 +66,11 @@ export class AutoFillService {
52
66
  getFocus() {
53
67
  let focus = this.sv.selectionStoreService.focused;
54
68
  const range = this.sv.selectionStoreService.ranged;
55
- if (range) {
69
+ // there was an issue that it was taking last cell from range but focus was out
70
+ if (!focus && range) {
56
71
  focus = { x: range.x, y: range.y };
57
72
  }
58
- if (!focus && !range) {
59
- return null;
60
- }
61
- return focus;
73
+ return focus || null;
62
74
  }
63
75
  /**
64
76
  * Autofill logic:
@@ -69,7 +81,13 @@ export class AutoFillService {
69
81
  if (!this.autoFillInitial) {
70
82
  return;
71
83
  }
72
- const current = getCurrentCell({ x: getFromEvent(event, 'clientX'), y: getFromEvent(event, 'clientY') }, data);
84
+ const x = getFromEvent(event, 'clientX', MOBILE_CLASS);
85
+ const y = getFromEvent(event, 'clientY', MOBILE_CLASS);
86
+ // skip touch
87
+ if (x === null || y === null) {
88
+ return;
89
+ }
90
+ const current = getCurrentCell({ x, y }, data);
73
91
  // first time or direction equal to start(same as first time)
74
92
  if (!this.autoFillLast) {
75
93
  if (!this.autoFillLast) {
@@ -99,13 +117,12 @@ export class AutoFillService {
99
117
  * Can be triggered from MouseDown selection on element
100
118
  * Or can be triggered on corner square drag
101
119
  */
102
- selectionStart(e, data, type = AutoFillType.selection) {
120
+ selectionStart(target, data, type = AutoFillType.selection) {
103
121
  /** Get cell by autofill element */
104
- const { top, left } = e.target.getBoundingClientRect();
122
+ const { top, left } = target.getBoundingClientRect();
105
123
  this.autoFillInitial = this.getFocus();
106
124
  this.autoFillType = type;
107
125
  this.autoFillStart = getCurrentCell({ x: left, y: top }, data);
108
- e.preventDefault();
109
126
  }
110
127
  /**
111
128
  * Clear current range selection
@@ -183,7 +200,10 @@ export class AutoFillService {
183
200
  }
184
201
  this.onRangeApply(rangeData.newData, newRange);
185
202
  }
186
- /** Update range selection ony, no data change (mouse selection) */
203
+ /**
204
+ * Update range selection only,
205
+ * no data change (mouse selection)
206
+ */
187
207
  applyRangeOnly(start, end) {
188
208
  // no changes to apply
189
209
  if (!start || !end) {
@@ -1 +1 @@
1
- {"version":3,"file":"autofill.service.js","sourceRoot":"","sources":["../../../src/components/overlay/autofill.service.tsx"],"names":[],"mappings":"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","sourcesContent":["import debounce from 'lodash/debounce';\nimport { DebouncedFunc } from 'lodash';\n\nimport { h } from '@stencil/core';\nimport { CELL_HANDLER_CLASS } from '../../utils/consts';\nimport { Observable, Selection, RevoGrid, Edition } from '../../interfaces';\nimport { EventData, getCell, getCurrentCell, isAfterLast } from './selection.utils';\nimport { getRange } from '../../store/selection/selection.helpers';\nimport SelectionStoreService from '../../store/selection/selection.store.service';\nimport ColumnService from '../data/columnService';\nimport { DataSourceState, getSourceItem } from '../../store/dataSource/data.store';\nimport { getFromEvent } from '../../utils/events';\n\ntype Config = {\n selectionStoreService: SelectionStoreService;\n dimensionRow: Observable<RevoGrid.DimensionSettingsState>;\n dimensionCol: Observable<RevoGrid.DimensionSettingsState>;\n columnService: ColumnService;\n dataStore: Observable<DataSourceState<RevoGrid.DataType, RevoGrid.DimensionRows>>;\n\n setTempRange(e: Selection.TempRange | null): Event;\n selectionChanged(e: Selection.ChangedRange): Event;\n rangeCopy(e: Selection.ChangedRange): Event;\n rangeDataApply(e: Edition.BeforeRangeSaveDataDetails): CustomEvent;\n setRange(e: Selection.RangeArea): boolean;\n clearRangeDataApply(e: {\n range: Selection.RangeArea\n }): CustomEvent<{\n range: Selection.RangeArea\n }>;\n\n getData(): any;\n};\n\nenum AutoFillType {\n selection = 'Selection',\n autoFill = 'AutoFill',\n}\n\nexport class AutoFillService {\n private autoFillType: AutoFillType | null = null;\n private autoFillInitial: Selection.Cell | null = null;\n private autoFillStart: Selection.Cell | null = null;\n private autoFillLast: Selection.Cell | null = null;\n\n private onMouseMoveAutofill: DebouncedFunc<(e: MouseEvent & TouchEvent, data: EventData) => void>;\n\n constructor(private sv: Config) {}\n\n /**\n * Render autofill box\n * @param range\n * @param selectionFocus\n */\n renderAutofill(range: Selection.RangeArea, selectionFocus: Selection.Cell) {\n let handlerStyle;\n if (range) {\n handlerStyle = getCell(range, this.sv.dimensionRow.state, this.sv.dimensionCol.state);\n } else {\n handlerStyle = getCell(\n {\n ...selectionFocus,\n x1: selectionFocus.x,\n y1: selectionFocus.y,\n },\n this.sv.dimensionRow.state,\n this.sv.dimensionCol.state,\n );\n }\n return (\n <div\n class={CELL_HANDLER_CLASS}\n style={{ left: `${handlerStyle.right}px`, top: `${handlerStyle.bottom}px` }}\n onMouseDown={(e: MouseEvent) => this.selectionStart(e, this.sv.getData(), AutoFillType.autoFill)}\n />\n );\n }\n\n get isAutoFill() {\n return !!this.autoFillType;\n }\n\n /** Process mouse move events */\n selectionMouseMove(e: MouseEvent & TouchEvent) {\n // initiate mouse move debounce if not present\n if (!this.onMouseMoveAutofill) {\n this.onMouseMoveAutofill = debounce((e: MouseEvent & TouchEvent, data: EventData) => this.doAutofillMouseMove(e, data), 5);\n }\n if (this.isAutoFill) {\n this.onMouseMoveAutofill(e, this.sv.getData());\n }\n }\n\n private getFocus() {\n let focus = this.sv.selectionStoreService.focused;\n const range = this.sv.selectionStoreService.ranged;\n if (range) {\n focus = { x: range.x, y: range.y };\n }\n if (!focus && !range) {\n return null;\n }\n return focus;\n }\n\n /**\n * Autofill logic:\n * on mouse move apply based on previous direction (if present)\n */\n private doAutofillMouseMove(event: MouseEvent & TouchEvent, data: EventData) {\n // if no initial - not started\n if (!this.autoFillInitial) {\n return;\n }\n const current = getCurrentCell({ x: getFromEvent(event, 'clientX'), y: getFromEvent(event, 'clientY') }, data);\n\n // first time or direction equal to start(same as first time)\n if (!this.autoFillLast) {\n if (!this.autoFillLast) {\n this.autoFillLast = this.autoFillStart;\n }\n }\n\n // check if not the latest, if latest - do nothing\n if (isAfterLast(current, data)) {\n return;\n }\n this.autoFillLast = current;\n\n const isSame = current.x === this.autoFillInitial.x && current.y === this.autoFillInitial.y;\n // if same as initial - clear\n if (isSame) {\n this.sv.setTempRange(null);\n } else {\n this.sv.setTempRange({\n area: getRange(this.autoFillInitial, this.autoFillLast),\n type: this.autoFillType,\n });\n }\n }\n\n /**\n * Range selection started\n * Mode @param type:\n * Can be triggered from MouseDown selection on element\n * Or can be triggered on corner square drag\n */\n selectionStart(e: MouseEvent, data: EventData, type = AutoFillType.selection) {\n /** Get cell by autofill element */\n const { top, left } = (e.target as HTMLElement).getBoundingClientRect();\n this.autoFillInitial = this.getFocus();\n this.autoFillType = type;\n this.autoFillStart = getCurrentCell({ x: left, y: top }, data);\n e.preventDefault();\n }\n\n /**\n * Clear current range selection\n * on mouse up and mouse leave events\n */ \n clearAutoFillSelection() {\n // Apply autofill values on mouse up if present\n if (this.autoFillInitial) {\n // Get latest\n this.autoFillInitial = this.getFocus();\n\n // Apply range data if present\n if (this.autoFillType === AutoFillType.autoFill) {\n const range = getRange(this.autoFillInitial, this.autoFillLast);\n if (range) {\n const {\n defaultPrevented: stopApply,\n detail: { range: newRange }\n } = this.sv.clearRangeDataApply({\n range,\n });\n if (!stopApply) {\n this.applyRangeWithData(newRange);\n } else {\n // if prevented - clear temp range\n this.sv.setTempRange(null);\n }\n }\n } else {\n this.applyRangeOnly(this.autoFillInitial, this.autoFillLast);\n }\n }\n\n this.autoFillType = null;\n this.autoFillInitial = null;\n this.autoFillLast = null;\n this.autoFillStart = null;\n }\n\n /** Trigger range apply events and handle responses */\n onRangeApply(data: RevoGrid.DataLookup, range: Selection.RangeArea): void {\n const models: RevoGrid.DataLookup = {};\n for (let rowIndex in data) {\n models[rowIndex] = getSourceItem(this.sv.dataStore, parseInt(rowIndex, 10));\n }\n const {\n defaultPrevented: stopRange,\n detail,\n } = this.sv.rangeDataApply({\n data,\n models,\n type: this.sv.dataStore.get('type'),\n });\n if (!stopRange) {\n this.sv.columnService.applyRangeData(detail.data);\n }\n this.sv.setRange(range);\n }\n\n /** Apply range and copy data during range application */\n private applyRangeWithData(newRange: Selection.RangeArea) {\n const oldRange = this.sv.selectionStoreService.ranged;\n const rangeData: Selection.ChangedRange = {\n type: this.sv.dataStore.get('type'),\n newData: {},\n mapping: {},\n newRange,\n oldRange,\n };\n const { mapping, changed } = this.sv.columnService.getRangeData(rangeData, this.sv.columnService.columns);\n rangeData.newData = changed;\n rangeData.mapping = mapping;\n let e = this.sv.selectionChanged(rangeData);\n\n // if default prevented - clear range\n if (e.defaultPrevented) {\n this.sv.setTempRange(null);\n return;\n }\n\n e = this.sv.rangeCopy(rangeData);\n if (e.defaultPrevented) {\n this.sv.setRange(newRange);\n return;\n }\n this.onRangeApply(rangeData.newData, newRange);\n }\n\n /** Update range selection ony, no data change (mouse selection) */\n private applyRangeOnly(start?: Selection.Cell, end?: Selection.Cell) {\n // no changes to apply\n if (!start || !end) {\n return;\n }\n\n const newRange = getRange(start, end);\n this.sv.setRange(newRange);\n }\n}\n"]}
1
+ {"version":3,"file":"autofill.service.js","sourceRoot":"","sources":["../../../src/components/overlay/autofill.service.tsx"],"names":[],"mappings":"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","sourcesContent":["import debounce from 'lodash/debounce';\nimport { DebouncedFunc } from 'lodash';\n\nimport { h } from '@stencil/core';\nimport { CELL_HANDLER_CLASS, MOBILE_CLASS } from '../../utils/consts';\nimport { Observable, Selection, RevoGrid, Edition } from '../../interfaces';\nimport { EventData, getCell, getCurrentCell, isAfterLast } from './selection.utils';\nimport { getRange } from '../../store/selection/selection.helpers';\nimport SelectionStoreService from '../../store/selection/selection.store.service';\nimport ColumnService from '../data/columnService';\nimport { DataSourceState, getSourceItem } from '../../store/dataSource/data.store';\nimport { getFromEvent } from '../../utils/events';\n\ntype Config = {\n selectionStoreService: SelectionStoreService;\n dimensionRow: Observable<RevoGrid.DimensionSettingsState>;\n dimensionCol: Observable<RevoGrid.DimensionSettingsState>;\n columnService: ColumnService;\n dataStore: Observable<DataSourceState<RevoGrid.DataType, RevoGrid.DimensionRows>>;\n\n setTempRange(e: Selection.TempRange | null): Event;\n selectionChanged(e: Selection.ChangedRange): Event;\n rangeCopy(e: Selection.ChangedRange): Event;\n rangeDataApply(e: Edition.BeforeRangeSaveDataDetails): CustomEvent;\n setRange(e: Selection.RangeArea): boolean;\n clearRangeDataApply(e: {\n range: Selection.RangeArea\n }): CustomEvent<{\n range: Selection.RangeArea\n }>;\n\n getData(): any;\n};\n\nenum AutoFillType {\n selection = 'Selection',\n autoFill = 'AutoFill',\n}\n\nexport class AutoFillService {\n private autoFillType: AutoFillType | null = null;\n private autoFillInitial: Selection.Cell | null = null;\n private autoFillStart: Selection.Cell | null = null;\n private autoFillLast: Selection.Cell | null = null;\n\n private onMouseMoveAutofill: DebouncedFunc<(e: MouseEvent | TouchEvent, data: EventData) => void>;\n\n constructor(private sv: Config) {}\n\n /**\n * Render autofill box\n * @param range\n * @param selectionFocus\n */\n renderAutofill(range: Selection.RangeArea, selectionFocus: Selection.Cell) {\n let handlerStyle;\n if (range) {\n handlerStyle = getCell(range, this.sv.dimensionRow.state, this.sv.dimensionCol.state);\n } else {\n handlerStyle = getCell(\n {\n ...selectionFocus,\n x1: selectionFocus.x,\n y1: selectionFocus.y,\n },\n this.sv.dimensionRow.state,\n this.sv.dimensionCol.state,\n );\n }\n return (\n <div\n class={{\n [CELL_HANDLER_CLASS]: true,\n [MOBILE_CLASS]: true,\n }}\n style={{ left: `${handlerStyle.right}px`, top: `${handlerStyle.bottom}px` }}\n onMouseDown={(e: MouseEvent) => this.autoFillHandler(e)}\n onTouchStart={(e: TouchEvent) => this.autoFillHandler(e)}\n />\n );\n }\n\n private autoFillHandler(e: MouseEvent | TouchEvent, type = AutoFillType.autoFill) {\n let target: Element | null = null;\n if (e.target instanceof Element) {\n target = e.target;\n }\n if (!target) {\n return;\n }\n this.selectionStart(target, this.sv.getData(), type);\n e.preventDefault();\n }\n\n get isAutoFill() {\n return !!this.autoFillType;\n }\n\n /** Process mouse move events */\n selectionMouseMove(e: MouseEvent | TouchEvent) {\n // initiate mouse move debounce if not present\n if (!this.onMouseMoveAutofill) {\n this.onMouseMoveAutofill = debounce((e: MouseEvent | TouchEvent, data: EventData) => this.doAutofillMouseMove(e, data), 5);\n }\n if (this.isAutoFill) {\n this.onMouseMoveAutofill(e, this.sv.getData());\n }\n }\n\n private getFocus() {\n let focus = this.sv.selectionStoreService.focused;\n const range = this.sv.selectionStoreService.ranged;\n // there was an issue that it was taking last cell from range but focus was out\n if (!focus && range) {\n focus = { x: range.x, y: range.y };\n }\n return focus || null;\n }\n\n /**\n * Autofill logic:\n * on mouse move apply based on previous direction (if present)\n */\n private doAutofillMouseMove(event: MouseEvent | TouchEvent, data: EventData) {\n // if no initial - not started\n if (!this.autoFillInitial) {\n return;\n }\n const x = getFromEvent(event, 'clientX', MOBILE_CLASS);\n const y = getFromEvent(event, 'clientY', MOBILE_CLASS);\n // skip touch\n if (x === null || y === null) {\n return;\n }\n const current = getCurrentCell({ x, y }, data);\n\n // first time or direction equal to start(same as first time)\n if (!this.autoFillLast) {\n if (!this.autoFillLast) {\n this.autoFillLast = this.autoFillStart;\n }\n }\n\n // check if not the latest, if latest - do nothing\n if (isAfterLast(current, data)) {\n return;\n }\n this.autoFillLast = current;\n\n const isSame = current.x === this.autoFillInitial.x && current.y === this.autoFillInitial.y;\n // if same as initial - clear\n if (isSame) {\n this.sv.setTempRange(null);\n } else {\n this.sv.setTempRange({\n area: getRange(this.autoFillInitial, this.autoFillLast),\n type: this.autoFillType,\n });\n }\n }\n\n /**\n * Range selection started\n * Mode @param type:\n * Can be triggered from MouseDown selection on element\n * Or can be triggered on corner square drag\n */\n selectionStart(target: Element, data: EventData, type = AutoFillType.selection) {\n /** Get cell by autofill element */\n const { top, left } = target.getBoundingClientRect();\n this.autoFillInitial = this.getFocus();\n this.autoFillType = type;\n this.autoFillStart = getCurrentCell({ x: left, y: top }, data);\n }\n\n /**\n * Clear current range selection\n * on mouse up and mouse leave events\n */ \n clearAutoFillSelection() {\n // Apply autofill values on mouse up if present\n if (this.autoFillInitial) {\n // Get latest\n this.autoFillInitial = this.getFocus();\n\n // Apply range data if present\n if (this.autoFillType === AutoFillType.autoFill) {\n const range = getRange(this.autoFillInitial, this.autoFillLast);\n if (range) {\n const {\n defaultPrevented: stopApply,\n detail: { range: newRange }\n } = this.sv.clearRangeDataApply({\n range,\n });\n if (!stopApply) {\n this.applyRangeWithData(newRange);\n } else {\n // if prevented - clear temp range\n this.sv.setTempRange(null);\n }\n }\n } else {\n this.applyRangeOnly(this.autoFillInitial, this.autoFillLast);\n }\n }\n\n this.autoFillType = null;\n this.autoFillInitial = null;\n this.autoFillLast = null;\n this.autoFillStart = null;\n }\n\n /** Trigger range apply events and handle responses */\n onRangeApply(data: RevoGrid.DataLookup, range: Selection.RangeArea): void {\n const models: RevoGrid.DataLookup = {};\n for (let rowIndex in data) {\n models[rowIndex] = getSourceItem(this.sv.dataStore, parseInt(rowIndex, 10));\n }\n const {\n defaultPrevented: stopRange,\n detail,\n } = this.sv.rangeDataApply({\n data,\n models,\n type: this.sv.dataStore.get('type'),\n });\n if (!stopRange) {\n this.sv.columnService.applyRangeData(detail.data);\n }\n this.sv.setRange(range);\n }\n\n /** Apply range and copy data during range application */\n private applyRangeWithData(newRange: Selection.RangeArea) {\n const oldRange = this.sv.selectionStoreService.ranged;\n const rangeData: Selection.ChangedRange = {\n type: this.sv.dataStore.get('type'),\n newData: {},\n mapping: {},\n newRange,\n oldRange,\n };\n const { mapping, changed } = this.sv.columnService.getRangeData(rangeData, this.sv.columnService.columns);\n rangeData.newData = changed;\n rangeData.mapping = mapping;\n let e = this.sv.selectionChanged(rangeData);\n\n // if default prevented - clear range\n if (e.defaultPrevented) {\n this.sv.setTempRange(null);\n return;\n }\n\n e = this.sv.rangeCopy(rangeData);\n if (e.defaultPrevented) {\n this.sv.setRange(newRange);\n return;\n }\n this.onRangeApply(rangeData.newData, newRange);\n }\n\n /**\n * Update range selection only,\n * no data change (mouse selection)\n */\n private applyRangeOnly(start?: Selection.Cell, end?: Selection.Cell) {\n // no changes to apply\n if (!start || !end) {\n return;\n }\n\n const newRange = getRange(start, end);\n this.sv.setRange(newRange);\n }\n}\n"]}