@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 @@ export declare class ClipboardService {
16
16
  private sv;
17
17
  private clipboard;
18
18
  constructor(sv: Config);
19
- renderClipboard(): any;
19
+ renderClipboard(readonly?: boolean): any;
20
20
  private getRegion;
21
21
  private onCopy;
22
22
  private onPaste;
@@ -7,8 +7,8 @@ export class ClipboardService {
7
7
  constructor(sv) {
8
8
  this.sv = sv;
9
9
  }
10
- renderClipboard() {
11
- return h("revogr-clipboard", { onCopyRegion: e => this.onCopy(e.detail), onClearRegion: () => this.sv.rangeClear(), ref: e => (this.clipboard = e), onPasteRegion: e => this.onPaste(e.detail) });
10
+ renderClipboard(readonly = false) {
11
+ return h("revogr-clipboard", { readonly: readonly, onCopyRegion: e => this.onCopy(e.detail), onClearRegion: () => this.sv.rangeClear(), ref: e => (this.clipboard = e), onPasteRegion: e => this.onPaste(e.detail) });
12
12
  }
13
13
  getRegion() {
14
14
  const focus = this.sv.selectionStoreService.focused;
@@ -1 +1 @@
1
- {"version":3,"file":"clipboard.service.js","sourceRoot":"","sources":["../../../src/components/overlay/clipboard.service.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,eAAe,CAAC;AAGlC,OAAO,EAAE,QAAQ,EAAE,MAAM,yCAAyC,CAAC;AAenE,MAAM,OAAO,gBAAgB;EAE3B,YAAoB,EAAU;IAAV,OAAE,GAAF,EAAE,CAAQ;EAAG,CAAC;EAElC,eAAe;IACb,OAAO,wBACL,YAAY,EAAE,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,EACxC,aAAa,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,UAAU,EAAE,EACzC,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,SAAS,GAAG,CAAC,CAAC,EAC9B,aAAa,EAAE,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAI,CAAC;EACnD,CAAC;EACO,SAAS;IACf,MAAM,KAAK,GAAG,IAAI,CAAC,EAAE,CAAC,qBAAqB,CAAC,OAAO,CAAC;IACpD,IAAI,KAAK,GAAG,IAAI,CAAC,EAAE,CAAC,qBAAqB,CAAC,MAAM,CAAC;IACjD,IAAI,CAAC,KAAK,EAAE;MACV,KAAK,GAAG,QAAQ,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;KAChC;IACD,OAAO,KAAK,CAAC;EACf,CAAC;EACO,MAAM,CAAC,CAAe;IAC5B,MAAM,KAAK,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC;IAC/B,MAAM,YAAY,GAAG,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;IAC/C,IAAI,YAAY,CAAC,gBAAgB,EAAE;MACjC,OAAO,KAAK,CAAC;KACd;IACD,MAAM,IAAI,GAAG,IAAI,CAAC,EAAE,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;IACtC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;IAC/B,OAAO,IAAI,CAAC;EACd,CAAC;EAEO,OAAO,CAAC,IAAgB;IAC9B,MAAM,KAAK,GAAG,IAAI,CAAC,EAAE,CAAC,qBAAqB,CAAC,OAAO,CAAC;IACpD,MAAM,SAAS,GAAG,IAAI,CAAC,EAAE,CAAC,qBAAqB,CAAC,MAAM,KAAK,IAAI,CAAC;IAChE,IAAI,CAAC,KAAK,IAAI,SAAS,EAAE;MACvB,OAAO;KACR;IACD,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,GAAG,IAAI,CAAC,EAAE,CAAC,aAAa,CAAC,yBAAyB,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;IACtF,MAAM,EAAE,gBAAgB,EAAE,QAAQ,EAAE,GAAG,IAAI,CAAC,EAAE,CAAC,WAAW,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;IAC3E,IAAI,QAAQ,EAAE;MACZ,OAAO;KACR;IACD,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;EACrC,CAAC;CACF","sourcesContent":["import { h } from '@stencil/core';\nimport SelectionStoreService from '../../store/selection/selection.store.service';\nimport { Observable, RevoGrid, Selection } from '../../interfaces';\nimport { getRange } from '../../store/selection/selection.helpers';\nimport ColumnService from '../data/columnService';\nimport { DataSourceState } from '../../store/dataSource/data.store';\n\ntype Config = {\n selectionStoreService: SelectionStoreService;\n columnService: ColumnService;\n dataStore: Observable<DataSourceState<RevoGrid.DataType, RevoGrid.DimensionRows>>;\n rangeApply(data: RevoGrid.DataLookup, range: Selection.RangeArea): void;\n rangeCopy(range: Selection.RangeArea): any;\n rangeClear(): void;\n beforeCopy(range: Selection.RangeArea): CustomEvent;\n beforePaste(data: RevoGrid.DataLookup, range: Selection.RangeArea): CustomEvent;\n};\n\nexport class ClipboardService {\n private clipboard: HTMLRevogrClipboardElement;\n constructor(private sv: Config) {}\n\n renderClipboard() {\n return <revogr-clipboard\n onCopyRegion={e => this.onCopy(e.detail)}\n onClearRegion={() => this.sv.rangeClear()}\n ref={e => (this.clipboard = e)}\n onPasteRegion={e => this.onPaste(e.detail)} />;\n }\n private getRegion() {\n const focus = this.sv.selectionStoreService.focused;\n let range = this.sv.selectionStoreService.ranged;\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.sv.beforeCopy(range);\n if (canCopyEvent.defaultPrevented) {\n return false;\n }\n const data = this.sv.rangeCopy(range);\n this.clipboard.doCopy(e, data);\n return true;\n }\n\n private onPaste(data: string[][]) {\n const focus = this.sv.selectionStoreService.focused;\n const isEditing = this.sv.selectionStoreService.edited !== null;\n if (!focus || isEditing) {\n return;\n }\n let { changed, range } = this.sv.columnService.getTransformedDataToApply(focus, data);\n const { defaultPrevented: canPaste } = this.sv.beforePaste(changed, range);\n if (canPaste) {\n return;\n }\n this.sv.rangeApply(changed, range);\n }\n}\n"]}
1
+ {"version":3,"file":"clipboard.service.js","sourceRoot":"","sources":["../../../src/components/overlay/clipboard.service.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,eAAe,CAAC;AAGlC,OAAO,EAAE,QAAQ,EAAE,MAAM,yCAAyC,CAAC;AAenE,MAAM,OAAO,gBAAgB;EAE3B,YAAoB,EAAU;IAAV,OAAE,GAAF,EAAE,CAAQ;EAAG,CAAC;EAElC,eAAe,CAAC,QAAQ,GAAG,KAAK;IAC9B,OAAO,wBACL,QAAQ,EAAE,QAAQ,EAClB,YAAY,EAAE,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,EACxC,aAAa,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,UAAU,EAAE,EACzC,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,SAAS,GAAG,CAAC,CAAC,EAC9B,aAAa,EAAE,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAI,CAAC;EACnD,CAAC;EACO,SAAS;IACf,MAAM,KAAK,GAAG,IAAI,CAAC,EAAE,CAAC,qBAAqB,CAAC,OAAO,CAAC;IACpD,IAAI,KAAK,GAAG,IAAI,CAAC,EAAE,CAAC,qBAAqB,CAAC,MAAM,CAAC;IACjD,IAAI,CAAC,KAAK,EAAE;MACV,KAAK,GAAG,QAAQ,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;KAChC;IACD,OAAO,KAAK,CAAC;EACf,CAAC;EACO,MAAM,CAAC,CAAe;IAC5B,MAAM,KAAK,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC;IAC/B,MAAM,YAAY,GAAG,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;IAC/C,IAAI,YAAY,CAAC,gBAAgB,EAAE;MACjC,OAAO,KAAK,CAAC;KACd;IACD,MAAM,IAAI,GAAG,IAAI,CAAC,EAAE,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;IACtC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;IAC/B,OAAO,IAAI,CAAC;EACd,CAAC;EAEO,OAAO,CAAC,IAAgB;IAC9B,MAAM,KAAK,GAAG,IAAI,CAAC,EAAE,CAAC,qBAAqB,CAAC,OAAO,CAAC;IACpD,MAAM,SAAS,GAAG,IAAI,CAAC,EAAE,CAAC,qBAAqB,CAAC,MAAM,KAAK,IAAI,CAAC;IAChE,IAAI,CAAC,KAAK,IAAI,SAAS,EAAE;MACvB,OAAO;KACR;IACD,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,GAAG,IAAI,CAAC,EAAE,CAAC,aAAa,CAAC,yBAAyB,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;IACtF,MAAM,EAAE,gBAAgB,EAAE,QAAQ,EAAE,GAAG,IAAI,CAAC,EAAE,CAAC,WAAW,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;IAC3E,IAAI,QAAQ,EAAE;MACZ,OAAO;KACR;IACD,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;EACrC,CAAC;CACF","sourcesContent":["import { h } from '@stencil/core';\nimport SelectionStoreService from '../../store/selection/selection.store.service';\nimport { Observable, RevoGrid, Selection } from '../../interfaces';\nimport { getRange } from '../../store/selection/selection.helpers';\nimport ColumnService from '../data/columnService';\nimport { DataSourceState } from '../../store/dataSource/data.store';\n\ntype Config = {\n selectionStoreService: SelectionStoreService;\n columnService: ColumnService;\n dataStore: Observable<DataSourceState<RevoGrid.DataType, RevoGrid.DimensionRows>>;\n rangeApply(data: RevoGrid.DataLookup, range: Selection.RangeArea): void;\n rangeCopy(range: Selection.RangeArea): any;\n rangeClear(): void;\n beforeCopy(range: Selection.RangeArea): CustomEvent;\n beforePaste(data: RevoGrid.DataLookup, range: Selection.RangeArea): CustomEvent;\n};\n\nexport class ClipboardService {\n private clipboard: HTMLRevogrClipboardElement;\n constructor(private sv: Config) {}\n\n renderClipboard(readonly = false) {\n return <revogr-clipboard\n readonly={readonly}\n onCopyRegion={e => this.onCopy(e.detail)}\n onClearRegion={() => this.sv.rangeClear()}\n ref={e => (this.clipboard = e)}\n onPasteRegion={e => this.onPaste(e.detail)} />;\n }\n private getRegion() {\n const focus = this.sv.selectionStoreService.focused;\n let range = this.sv.selectionStoreService.ranged;\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.sv.beforeCopy(range);\n if (canCopyEvent.defaultPrevented) {\n return false;\n }\n const data = this.sv.rangeCopy(range);\n this.clipboard.doCopy(e, data);\n return true;\n }\n\n private onPaste(data: string[][]) {\n const focus = this.sv.selectionStoreService.focused;\n const isEditing = this.sv.selectionStoreService.edited !== null;\n if (!focus || isEditing) {\n return;\n }\n let { changed, range } = this.sv.columnService.getTransformedDataToApply(focus, data);\n const { defaultPrevented: canPaste } = this.sv.beforePaste(changed, range);\n if (canPaste) {\n return;\n }\n this.sv.rangeApply(changed, range);\n }\n}\n"]}
@@ -23,9 +23,7 @@ export class KeyboardService {
23
23
  if (isCtrlKey(e.keyCode, navigator.platform)) {
24
24
  this.ctrlDown = true;
25
25
  }
26
- /**
27
- * IF EDIT MODE
28
- */
26
+ // IF EDIT MODE
29
27
  if (this.sv.selectionStoreService.edited) {
30
28
  switch (e.code) {
31
29
  case codesLetter.ESCAPE:
@@ -34,9 +32,7 @@ export class KeyboardService {
34
32
  }
35
33
  return;
36
34
  }
37
- /**
38
- * IF NOT EDIT MODE
39
- */
35
+ // IF NOT EDIT MODE
40
36
  // pressed clear key
41
37
  if (this.sv.selectionStoreService.ranged && isClear(e.code)) {
42
38
  this.sv.clearCell();
@@ -1 +1 @@
1
- {"version":3,"file":"keyboard.service.js","sourceRoot":"","sources":["../../../src/components/overlay/keyboard.service.ts"],"names":[],"mappings":"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","sourcesContent":["import { Observable, Selection } from '../../interfaces';\nimport { getRange } from '../../store/selection/selection.helpers';\nimport SelectionStoreService from '../../store/selection/selection.store.service';\nimport { codesLetter } from '../../utils/keyCodes';\nimport { isClear, isCtrlKey, isEnterKey, isLetterKey } from '../../utils/keyCodes.utils';\nimport { timeout } from '../../utils';\nimport { EventData, getCoordinate, isAfterLast, isBeforeFirst } from './selection.utils';\nimport { RESIZE_INTERVAL } from '../../utils/consts';\n\ntype Config = {\n selectionStoreService: SelectionStoreService;\n selectionStore: Observable<Selection.SelectionStoreState>;\n\n applyEdit(val?: any): void;\n cancelEdit(): void;\n clearCell(): void;\n focusNext(focus: Selection.Cell, next: Partial<Selection.Cell>): boolean;\n getData(): any;\n internalPaste(): void;\n range(range: Selection.RangeArea): boolean;\n selectAll(): void;\n};\n\nconst DIRECTION_CODES: string[] = [\n codesLetter.TAB,\n codesLetter.ARROW_UP,\n codesLetter.ARROW_DOWN,\n codesLetter.ARROW_LEFT,\n codesLetter.ARROW_RIGHT,\n];\nexport class KeyboardService {\n private ctrlDown = false;\n\n constructor(private sv: Config) {}\n\n async keyDown(e: KeyboardEvent, canRange: boolean) {\n if (isCtrlKey(e.keyCode, navigator.platform)) {\n this.ctrlDown = true;\n }\n\n\n /**\n * IF EDIT MODE\n */\n if (this.sv.selectionStoreService.edited) {\n switch (e.code) {\n case codesLetter.ESCAPE:\n this.sv.cancelEdit();\n break;\n }\n return;\n }\n\n /**\n * IF NOT EDIT MODE\n */\n\n // pressed clear key\n if (this.sv.selectionStoreService.ranged && isClear(e.code)) {\n this.sv.clearCell();\n return;\n }\n\n // below works with focus only\n if (!this.sv.selectionStoreService.focused) {\n return;\n }\n\n // tab key means same as arrow right\n if (codesLetter.TAB === e.code) {\n this.keyChangeSelection(e, canRange);\n return;\n }\n\n // pressed enter\n if (isEnterKey(e.code)) {\n this.sv.applyEdit();\n return;\n }\n\n // copy operation\n if (this.isCopy(e)) {\n return;\n }\n\n // cut operation\n if (this.isCut(e)) {\n return;\n }\n\n // paste operation\n if (this.isPaste(e)) {\n this.sv.internalPaste();\n return;\n }\n\n // select all\n if (this.isAll(e)) {\n if (canRange) {\n this.selectAll(e);\n }\n return;\n }\n\n // pressed letter key\n if (isLetterKey(e.keyCode)) {\n this.sv.applyEdit(e.key);\n return;\n }\n\n // pressed arrow, change selection position\n if (await this.keyChangeSelection(e, canRange)) {\n return;\n }\n }\n\n private selectAll(e: KeyboardEvent) {\n const range = this.sv.selectionStore.get('range');\n const focus = this.sv.selectionStore.get('focus');\n // if no range or focus - do nothing\n if (!range || !focus) {\n return;\n }\n e.preventDefault();\n this.sv.selectAll();\n }\n\n async keyChangeSelection(e: KeyboardEvent, canRange: boolean) {\n const data = this.changeDirectionKey(e, canRange);\n if (!data) {\n return false;\n }\n\n // this interval needed for several cases\n // grid could be resized before next click\n // at this case to avoid screen jump we use this interval\n await timeout(RESIZE_INTERVAL + 30);\n\n const range = this.sv.selectionStore.get('range');\n const focus = this.sv.selectionStore.get('focus');\n return this.keyPositionChange(data.changes, range, focus, data.isMulti);\n }\n\n keyPositionChange(\n changes: Partial<Selection.Cell>,\n range?: Selection.RangeArea,\n focus?: Selection.Cell,\n isMulti = false\n ) {\n if (!range || !focus) {\n return false;\n }\n const data = getCoordinate(range, focus, changes, isMulti);\n if (!data) {\n return false;\n }\n if (isMulti) {\n const eData: EventData = this.sv.getData();\n if (isAfterLast(data.end, eData) || isBeforeFirst(data.start)) {\n return false;\n }\n const range = getRange(data.start, data.end);\n return this.sv.range(range);\n }\n return this.sv.focusNext(data.start, changes);\n }\n\n keyUp(e: KeyboardEvent): void {\n if (isCtrlKey(e.keyCode, navigator.platform)) {\n this.ctrlDown = false;\n }\n }\n isCut(e: KeyboardEvent): boolean {\n return this.ctrlDown && e.code == codesLetter.X;\n }\n isCopy(e: KeyboardEvent): boolean {\n return this.ctrlDown && e.code == codesLetter.C;\n }\n isPaste(e: KeyboardEvent): boolean {\n return this.ctrlDown && e.code == codesLetter.V;\n }\n isAll(e: KeyboardEvent): boolean {\n return this.ctrlDown && e.code == codesLetter.A;\n }\n /** Monitor key direction changes */\n changeDirectionKey(e: KeyboardEvent, canRange: boolean): { changes: Partial<Selection.Cell>; isMulti?: boolean } | void {\n const isMulti = canRange && e.shiftKey;\n if (DIRECTION_CODES.includes(e.code)) {\n e.preventDefault();\n }\n switch (e.code) {\n case codesLetter.ARROW_UP:\n return { changes: { y: -1 }, isMulti };\n case codesLetter.ARROW_DOWN:\n return { changes: { y: 1 }, isMulti };\n case codesLetter.ARROW_LEFT:\n return { changes: { x: -1 }, isMulti };\n case codesLetter.TAB:\n case codesLetter.ARROW_RIGHT:\n return { changes: { x: 1 }, isMulti };\n }\n }\n}\n"]}
1
+ {"version":3,"file":"keyboard.service.js","sourceRoot":"","sources":["../../../src/components/overlay/keyboard.service.ts"],"names":[],"mappings":"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","sourcesContent":["import { Observable, Selection } from '../../interfaces';\nimport { getRange } from '../../store/selection/selection.helpers';\nimport SelectionStoreService from '../../store/selection/selection.store.service';\nimport { codesLetter } from '../../utils/keyCodes';\nimport { isClear, isCtrlKey, isEnterKey, isLetterKey } from '../../utils/keyCodes.utils';\nimport { timeout } from '../../utils';\nimport { EventData, getCoordinate, isAfterLast, isBeforeFirst } from './selection.utils';\nimport { RESIZE_INTERVAL } from '../../utils/consts';\n\ntype Config = {\n selectionStoreService: SelectionStoreService;\n selectionStore: Observable<Selection.SelectionStoreState>;\n\n applyEdit(val?: any): void;\n cancelEdit(): void;\n clearCell(): void;\n focusNext(focus: Selection.Cell, next: Partial<Selection.Cell>): boolean;\n getData(): any;\n internalPaste(): void;\n range(range: Selection.RangeArea): boolean;\n selectAll(): void;\n};\n\nconst DIRECTION_CODES: string[] = [\n codesLetter.TAB,\n codesLetter.ARROW_UP,\n codesLetter.ARROW_DOWN,\n codesLetter.ARROW_LEFT,\n codesLetter.ARROW_RIGHT,\n];\nexport class KeyboardService {\n private ctrlDown = false;\n\n constructor(private sv: Config) {}\n\n async keyDown(e: KeyboardEvent, canRange: boolean) {\n if (isCtrlKey(e.keyCode, navigator.platform)) {\n this.ctrlDown = true;\n }\n\n\n // IF EDIT MODE\n if (this.sv.selectionStoreService.edited) {\n switch (e.code) {\n case codesLetter.ESCAPE:\n this.sv.cancelEdit();\n break;\n }\n return;\n }\n\n // IF NOT EDIT MODE\n\n // pressed clear key\n if (this.sv.selectionStoreService.ranged && isClear(e.code)) {\n this.sv.clearCell();\n return;\n }\n\n // below works with focus only\n if (!this.sv.selectionStoreService.focused) {\n return;\n }\n\n // tab key means same as arrow right\n if (codesLetter.TAB === e.code) {\n this.keyChangeSelection(e, canRange);\n return;\n }\n\n // pressed enter\n if (isEnterKey(e.code)) {\n this.sv.applyEdit();\n return;\n }\n\n // copy operation\n if (this.isCopy(e)) {\n return;\n }\n\n // cut operation\n if (this.isCut(e)) {\n return;\n }\n\n // paste operation\n if (this.isPaste(e)) {\n this.sv.internalPaste();\n return;\n }\n\n // select all\n if (this.isAll(e)) {\n if (canRange) {\n this.selectAll(e);\n }\n return;\n }\n\n // pressed letter key\n if (isLetterKey(e.keyCode)) {\n this.sv.applyEdit(e.key);\n return;\n }\n\n // pressed arrow, change selection position\n if (await this.keyChangeSelection(e, canRange)) {\n return;\n }\n }\n\n private selectAll(e: KeyboardEvent) {\n const range = this.sv.selectionStore.get('range');\n const focus = this.sv.selectionStore.get('focus');\n // if no range or focus - do nothing\n if (!range || !focus) {\n return;\n }\n e.preventDefault();\n this.sv.selectAll();\n }\n\n async keyChangeSelection(e: KeyboardEvent, canRange: boolean) {\n const data = this.changeDirectionKey(e, canRange);\n if (!data) {\n return false;\n }\n\n // this interval needed for several cases\n // grid could be resized before next click\n // at this case to avoid screen jump we use this interval\n await timeout(RESIZE_INTERVAL + 30);\n\n const range = this.sv.selectionStore.get('range');\n const focus = this.sv.selectionStore.get('focus');\n return this.keyPositionChange(data.changes, range, focus, data.isMulti);\n }\n\n keyPositionChange(\n changes: Partial<Selection.Cell>,\n range?: Selection.RangeArea,\n focus?: Selection.Cell,\n isMulti = false\n ) {\n if (!range || !focus) {\n return false;\n }\n const data = getCoordinate(range, focus, changes, isMulti);\n if (!data) {\n return false;\n }\n if (isMulti) {\n const eData: EventData = this.sv.getData();\n if (isAfterLast(data.end, eData) || isBeforeFirst(data.start)) {\n return false;\n }\n const range = getRange(data.start, data.end);\n return this.sv.range(range);\n }\n return this.sv.focusNext(data.start, changes);\n }\n\n keyUp(e: KeyboardEvent): void {\n if (isCtrlKey(e.keyCode, navigator.platform)) {\n this.ctrlDown = false;\n }\n }\n isCut(e: KeyboardEvent): boolean {\n return this.ctrlDown && e.code == codesLetter.X;\n }\n isCopy(e: KeyboardEvent): boolean {\n return this.ctrlDown && e.code == codesLetter.C;\n }\n isPaste(e: KeyboardEvent): boolean {\n return this.ctrlDown && e.code == codesLetter.V;\n }\n isAll(e: KeyboardEvent): boolean {\n return this.ctrlDown && e.code == codesLetter.A;\n }\n /** Monitor key direction changes */\n changeDirectionKey(e: KeyboardEvent, canRange: boolean): { changes: Partial<Selection.Cell>; isMulti?: boolean } | void {\n const isMulti = canRange && e.shiftKey;\n if (DIRECTION_CODES.includes(e.code)) {\n e.preventDefault();\n }\n switch (e.code) {\n case codesLetter.ARROW_UP:\n return { changes: { y: -1 }, isMulti };\n case codesLetter.ARROW_DOWN:\n return { changes: { y: 1 }, isMulti };\n case codesLetter.ARROW_LEFT:\n return { changes: { x: -1 }, isMulti };\n case codesLetter.TAB:\n case codesLetter.ARROW_RIGHT:\n return { changes: { x: 1 }, isMulti };\n }\n }\n}\n"]}
@@ -1,18 +1,26 @@
1
1
  import { EventEmitter } from '../../stencil-public-runtime';
2
2
  import { Edition, RevoGrid } from '../../interfaces';
3
+ /**
4
+ * Cell editor component
5
+ */
3
6
  export declare class RevoEdit {
4
7
  element: HTMLElement;
5
8
  editCell: Edition.EditCell;
6
9
  column: RevoGrid.ColumnRegular | null;
7
10
  /** Custom editors register */
8
11
  editor: Edition.EditorCtr | null;
12
+ /** Save on editor close */
9
13
  saveOnClose: boolean;
14
+ /** Additional data to pass to renderer */
15
+ additionalData: any;
16
+ /** Cell edit event */
10
17
  cellEdit: EventEmitter<Edition.SaveDataDetails>;
11
18
  /**
12
19
  * Close editor event
13
20
  * pass true if requires focus next
14
21
  */
15
22
  closeEdit: EventEmitter<boolean | undefined>;
23
+ /** Edit session editor */
16
24
  private currentEditor;
17
25
  private saveRunning;
18
26
  cancel(): Promise<void>;
@@ -4,14 +4,19 @@
4
4
  import { h, Host } from '@stencil/core';
5
5
  import { EDIT_INPUT_WR } from '../../utils/consts';
6
6
  import { TextEditor } from './editors/text';
7
+ /**
8
+ * Cell editor component
9
+ */
7
10
  export class RevoEdit {
8
11
  constructor() {
12
+ /** Edit session editor */
9
13
  this.currentEditor = null;
10
14
  this.saveRunning = false;
11
15
  this.editCell = undefined;
12
16
  this.column = undefined;
13
17
  this.editor = undefined;
14
18
  this.saveOnClose = false;
19
+ this.additionalData = undefined;
15
20
  }
16
21
  async cancel() {
17
22
  this.saveRunning = true;
@@ -39,6 +44,8 @@ export class RevoEdit {
39
44
  this.cellEdit.emit({
40
45
  rgCol: this.editCell.x,
41
46
  rgRow: this.editCell.y,
47
+ type: this.editCell.type,
48
+ prop: this.editCell.prop,
42
49
  val,
43
50
  preventFocus,
44
51
  });
@@ -50,8 +57,8 @@ export class RevoEdit {
50
57
  return;
51
58
  }
52
59
  this.saveRunning = false;
53
- // fresh run
54
- // editor defined for the column
60
+ // custom editor usage
61
+ // use TextEditor (editors/text.tsx) to create custom editor
55
62
  if (this.editor) {
56
63
  this.currentEditor = new this.editor(this.column,
57
64
  // save
@@ -69,11 +76,12 @@ export class RevoEdit {
69
76
  this.currentEditor = new TextEditor(this.column, (e, preventFocus) => this.onSave(e, preventFocus));
70
77
  }
71
78
  componentDidRender() {
79
+ var _a, _b;
72
80
  if (!this.currentEditor) {
73
81
  return;
74
82
  }
75
83
  this.currentEditor.element = this.element.firstElementChild;
76
- this.currentEditor.componentDidRender && this.currentEditor.componentDidRender();
84
+ (_b = (_a = this.currentEditor).componentDidRender) === null || _b === void 0 ? void 0 : _b.call(_a);
77
85
  }
78
86
  disconnectedCallback() {
79
87
  if (this.saveOnClose) {
@@ -96,7 +104,7 @@ export class RevoEdit {
96
104
  render() {
97
105
  if (this.currentEditor) {
98
106
  this.currentEditor.editCell = this.editCell;
99
- return h(Host, { class: EDIT_INPUT_WR }, this.currentEditor.render(h));
107
+ return h(Host, { class: EDIT_INPUT_WR }, this.currentEditor.render(h, this.additionalData));
100
108
  }
101
109
  return '';
102
110
  }
@@ -185,11 +193,28 @@ export class RevoEdit {
185
193
  "optional": false,
186
194
  "docs": {
187
195
  "tags": [],
188
- "text": ""
196
+ "text": "Save on editor close"
189
197
  },
190
198
  "attribute": "save-on-close",
191
199
  "reflect": false,
192
200
  "defaultValue": "false"
201
+ },
202
+ "additionalData": {
203
+ "type": "any",
204
+ "mutable": false,
205
+ "complexType": {
206
+ "original": "any",
207
+ "resolved": "any",
208
+ "references": {}
209
+ },
210
+ "required": false,
211
+ "optional": false,
212
+ "docs": {
213
+ "tags": [],
214
+ "text": "Additional data to pass to renderer"
215
+ },
216
+ "attribute": "additional-data",
217
+ "reflect": false
193
218
  }
194
219
  };
195
220
  }
@@ -197,16 +222,16 @@ export class RevoEdit {
197
222
  return [{
198
223
  "method": "cellEdit",
199
224
  "name": "cellEdit",
200
- "bubbles": false,
225
+ "bubbles": true,
201
226
  "cancelable": true,
202
227
  "composed": true,
203
228
  "docs": {
204
229
  "tags": [],
205
- "text": ""
230
+ "text": "Cell edit event"
206
231
  },
207
232
  "complexType": {
208
233
  "original": "Edition.SaveDataDetails",
209
- "resolved": "{ rgRow: number; rgCol: number; val: any; preventFocus?: boolean; }",
234
+ "resolved": "{ rgRow: number; rgCol: number; type: DimensionRows; prop: ColumnProp; val: any; preventFocus?: boolean; }",
210
235
  "references": {
211
236
  "Edition": {
212
237
  "location": "import",
@@ -217,7 +242,7 @@ export class RevoEdit {
217
242
  }, {
218
243
  "method": "closeEdit",
219
244
  "name": "closeEdit",
220
- "bubbles": false,
245
+ "bubbles": true,
221
246
  "cancelable": true,
222
247
  "composed": true,
223
248
  "docs": {
@@ -1 +1 @@
1
- {"version":3,"file":"revogr-edit.js","sourceRoot":"","sources":["../../../src/components/overlay/revogr-edit.tsx"],"names":[],"mappings":"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","sourcesContent":["import { Component, Event, EventEmitter, Prop, h, Element, Host, Method } from '@stencil/core';\n\nimport { Edition, RevoGrid } from '../../interfaces';\nimport { EDIT_INPUT_WR } from '../../utils/consts';\nimport { TextEditor } from './editors/text';\n\n@Component({\n tag: 'revogr-edit',\n styleUrl: 'revogr-edit-style.scss',\n})\nexport class RevoEdit {\n @Element() element: HTMLElement;\n @Prop() editCell: Edition.EditCell;\n\n @Prop() column: RevoGrid.ColumnRegular | null;\n /** Custom editors register */\n @Prop() editor: Edition.EditorCtr | null;\n\n @Prop() saveOnClose: boolean = false;\n\n @Event({ bubbles: false }) cellEdit: EventEmitter<Edition.SaveDataDetails>;\n\n /**\n * Close editor event\n * pass true if requires focus next\n */\n @Event({ bubbles: false }) closeEdit: EventEmitter<boolean | undefined>;\n\n private currentEditor: Edition.EditorBase | null = null;\n private saveRunning = false;\n\n @Method() async cancel() {\n this.saveRunning = true;\n }\n\n onAutoSave() {\n this.saveRunning = true;\n const val = this.currentEditor.getValue && this.currentEditor.getValue();\n // for editor plugin internal usage in case you want to stop save and use your own\n if (this.currentEditor.beforeAutoSave) {\n const canSave = this.currentEditor.beforeAutoSave(val);\n if (canSave === false) {\n return;\n }\n }\n this.onSave(val, true);\n }\n\n /**\n * Callback triggered on cell editor save\n * Closes editor when called\n * @param preventFocus - if true editor will not be closed and next cell will not be focused\n */\n onSave(val: Edition.SaveData, preventFocus?: boolean): void {\n this.saveRunning = true;\n if (this.editCell) {\n this.cellEdit.emit({\n rgCol: this.editCell.x,\n rgRow: this.editCell.y,\n val,\n preventFocus,\n });\n }\n }\n\n componentWillRender(): void {\n // we have active editor\n if (this.currentEditor) {\n return;\n }\n this.saveRunning = false;\n // fresh run\n // editor defined for the column\n if (this.editor) {\n this.currentEditor = new this.editor(\n this.column,\n // save\n (e, preventFocus) => {\n this.onSave(e, preventFocus);\n },\n // cancel\n focusNext => {\n this.saveRunning = true;\n this.closeEdit.emit(focusNext);\n },\n );\n return;\n }\n // default text editor usage\n this.currentEditor = new TextEditor(this.column, (e, preventFocus) => this.onSave(e, preventFocus));\n }\n\n componentDidRender(): void {\n if (!this.currentEditor) {\n return;\n }\n this.currentEditor.element = this.element.firstElementChild;\n this.currentEditor.componentDidRender && this.currentEditor.componentDidRender();\n }\n\n disconnectedCallback(): void {\n if (this.saveOnClose) {\n // shouldn't be cancelled by saveRunning\n // editor requires getValue to be able to save\n if (!this.saveRunning) {\n this.onAutoSave();\n }\n }\n\n this.saveRunning = false;\n if (!this.currentEditor) {\n return;\n }\n\n this.currentEditor.disconnectedCallback && this.currentEditor.disconnectedCallback();\n if (this.currentEditor.element) {\n this.currentEditor.element = null;\n }\n this.currentEditor = null;\n }\n\n render() {\n if (this.currentEditor) {\n this.currentEditor.editCell = this.editCell;\n return <Host class={EDIT_INPUT_WR}>{this.currentEditor.render(h)}</Host>;\n }\n return '';\n }\n}\n"]}
1
+ {"version":3,"file":"revogr-edit.js","sourceRoot":"","sources":["../../../src/components/overlay/revogr-edit.tsx"],"names":[],"mappings":"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","sourcesContent":["import { Component, Event, EventEmitter, Prop, h, Element, Host, Method } from '@stencil/core';\n\nimport { Edition, RevoGrid } from '../../interfaces';\nimport { EDIT_INPUT_WR } from '../../utils/consts';\nimport { TextEditor } from './editors/text';\n\n/**\n * Cell editor component\n */\n@Component({\n tag: 'revogr-edit',\n styleUrl: 'revogr-edit-style.scss',\n})\nexport class RevoEdit {\n @Element() element: HTMLElement;\n @Prop() editCell: Edition.EditCell;\n\n @Prop() column: RevoGrid.ColumnRegular | null;\n /** Custom editors register */\n @Prop() editor: Edition.EditorCtr | null;\n\n /** Save on editor close */\n @Prop() saveOnClose: boolean = false;\n /** Additional data to pass to renderer */\n @Prop() additionalData: any;\n\n /** Cell edit event */\n @Event() cellEdit: EventEmitter<Edition.SaveDataDetails>;\n\n /**\n * Close editor event\n * pass true if requires focus next\n */\n @Event() closeEdit: EventEmitter<boolean | undefined>;\n\n /** Edit session editor */\n private currentEditor: Edition.EditorBase | null = null;\n private saveRunning = false;\n\n @Method() async cancel() {\n this.saveRunning = true;\n }\n\n onAutoSave() {\n this.saveRunning = true;\n const val = this.currentEditor.getValue && this.currentEditor.getValue();\n // for editor plugin internal usage in case you want to stop save and use your own\n if (this.currentEditor.beforeAutoSave) {\n const canSave = this.currentEditor.beforeAutoSave(val);\n if (canSave === false) {\n return;\n }\n }\n this.onSave(val, true);\n }\n\n /**\n * Callback triggered on cell editor save\n * Closes editor when called\n * @param preventFocus - if true editor will not be closed and next cell will not be focused\n */\n onSave(val: Edition.SaveData, preventFocus?: boolean): void {\n this.saveRunning = true;\n if (this.editCell) {\n this.cellEdit.emit({\n rgCol: this.editCell.x,\n rgRow: this.editCell.y,\n type: this.editCell.type,\n prop: this.editCell.prop,\n val,\n preventFocus,\n });\n }\n }\n\n componentWillRender(): void {\n // we have active editor\n if (this.currentEditor) {\n return;\n }\n this.saveRunning = false;\n \n // custom editor usage\n // use TextEditor (editors/text.tsx) to create custom editor\n if (this.editor) {\n this.currentEditor = new this.editor(\n this.column,\n // save\n (e, preventFocus) => {\n this.onSave(e, preventFocus);\n },\n // cancel\n focusNext => {\n this.saveRunning = true;\n this.closeEdit.emit(focusNext);\n },\n );\n return;\n }\n // default text editor usage\n this.currentEditor = new TextEditor(this.column, (e, preventFocus) => this.onSave(e, preventFocus));\n }\n\n componentDidRender(): void {\n if (!this.currentEditor) {\n return;\n }\n this.currentEditor.element = this.element.firstElementChild;\n this.currentEditor.componentDidRender?.();\n }\n\n disconnectedCallback(): void {\n if (this.saveOnClose) {\n // shouldn't be cancelled by saveRunning\n // editor requires getValue to be able to save\n if (!this.saveRunning) {\n this.onAutoSave();\n }\n }\n\n this.saveRunning = false;\n if (!this.currentEditor) {\n return;\n }\n\n this.currentEditor.disconnectedCallback && this.currentEditor.disconnectedCallback();\n if (this.currentEditor.element) {\n this.currentEditor.element = null;\n }\n this.currentEditor = null;\n }\n\n render() {\n if (this.currentEditor) {\n this.currentEditor.editCell = this.editCell;\n return <Host class={EDIT_INPUT_WR}>{this.currentEditor.render(h, this.additionalData)}</Host>;\n }\n return '';\n }\n}\n"]}
@@ -4,13 +4,6 @@ import ColumnService from '../data/columnService';
4
4
  import SelectionStoreService from '../../store/selection/selection.store.service';
5
5
  import { DataSourceState } from '../../store/dataSource/data.store';
6
6
  export declare class OverlaySelection {
7
- protected columnService: ColumnService;
8
- protected selectionStoreService: SelectionStoreService;
9
- private keyboardService;
10
- private autoFillService;
11
- private clipboardService;
12
- private orderEditor;
13
- private revogrEdit;
14
7
  element: HTMLElement;
15
8
  /**
16
9
  * If readonly mode enables
@@ -49,12 +42,31 @@ export declare class OverlaySelection {
49
42
  * Custom editors register
50
43
  */
51
44
  editors: Edition.Editors;
52
- /** If true applys changes when cell closes if not Escape */
45
+ /**
46
+ * If true applys changes when cell closes if not Escape
47
+ */
53
48
  applyChangesOnClose: boolean;
49
+ /**
50
+ * Additional data to pass to renderer
51
+ */
52
+ additionalData: any;
53
+ /**
54
+ * Is mobile view mode
55
+ */
56
+ isMobileDevice: boolean;
57
+ /**
58
+ * Before clipboard copy happened
59
+ */
54
60
  internalCopy: EventEmitter;
61
+ /**
62
+ * Before paste happened
63
+ */
55
64
  internalPaste: EventEmitter;
56
65
  internalCellEdit: EventEmitter<Edition.BeforeSaveDataDetails>;
57
66
  beforeFocusCell: EventEmitter<Edition.BeforeSaveDataDetails>;
67
+ /**
68
+ * Set edit cell
69
+ */
58
70
  setEdit: EventEmitter<Edition.BeforeEdit>;
59
71
  beforeApplyRange: EventEmitter<FocusRenderEvent>;
60
72
  beforeSetRange: EventEmitter;
@@ -81,12 +93,19 @@ export declare class OverlaySelection {
81
93
  /** Range copy */
82
94
  rangeClipboardCopy: EventEmitter;
83
95
  rangeClipboardPaste: EventEmitter;
96
+ protected columnService: ColumnService;
97
+ protected selectionStoreService: SelectionStoreService;
98
+ private keyboardService;
99
+ private autoFillService;
100
+ private clipboardService;
101
+ private orderEditor;
102
+ private revogrEdit;
84
103
  /**
85
104
  * Runs before cell save
86
105
  * Can be used to override or cancel original save
87
106
  */
88
107
  beforeCellSave: EventEmitter;
89
- onMouseMove(e: MouseEvent & TouchEvent): void;
108
+ onMouseMove(e: MouseEvent | TouchEvent): void;
90
109
  /** Action finished inside of the document */
91
110
  /** Pointer left document, clear any active operation */
92
111
  onMouseUp(): void;
@@ -107,7 +126,10 @@ export declare class OverlaySelection {
107
126
  render(): any;
108
127
  private doFocus;
109
128
  private triggerRangeEvent;
110
- protected onElementMouseDown(e: MouseEvent): void;
129
+ protected onElementMouseDown(e: MouseEvent | TouchEvent, touch?: boolean): void;
130
+ /**
131
+ * Start cell editing
132
+ */
111
133
  protected doEdit(val?: string): void;
112
134
  /**
113
135
  * Close editor event triggered
@@ -5,13 +5,14 @@ import { h, Host } from '@stencil/core';
5
5
  import ColumnService from '../data/columnService';
6
6
  import SelectionStoreService from '../../store/selection/selection.store.service';
7
7
  import { codesLetter } from '../../utils/keyCodes';
8
- import { SELECTION_BORDER_CLASS } from '../../utils/consts';
8
+ import { MOBILE_CLASS, SELECTION_BORDER_CLASS } from '../../utils/consts';
9
9
  import { isRangeSingleCell } from '../../store/selection/selection.helpers';
10
10
  import { getCurrentCell, getElStyle } from './selection.utils';
11
11
  import { isEditInput } from './editors/edit.utils';
12
12
  import { KeyboardService } from './keyboard.service';
13
13
  import { AutoFillService } from './autofill.service';
14
14
  import { ClipboardService } from './clipboard.service';
15
+ import { getFromEvent, verifyTouchTarget } from '../../utils/events';
15
16
  export class OverlaySelection {
16
17
  constructor() {
17
18
  this.keyboardService = null;
@@ -30,6 +31,8 @@ export class OverlaySelection {
30
31
  this.lastCell = undefined;
31
32
  this.editors = undefined;
32
33
  this.applyChangesOnClose = false;
34
+ this.additionalData = undefined;
35
+ this.isMobileDevice = undefined;
33
36
  }
34
37
  // --------------------------------------------------------------------------
35
38
  //
@@ -156,7 +159,9 @@ export class OverlaySelection {
156
159
  }
157
160
  renderRange(range) {
158
161
  const style = getElStyle(range, this.dimensionRow.state, this.dimensionCol.state);
159
- return [h("div", { class: SELECTION_BORDER_CLASS, style: style })];
162
+ return [
163
+ h("div", { class: SELECTION_BORDER_CLASS, style: style }, this.isMobileDevice && h("div", { class: "range-handlers" }, h("span", { class: MOBILE_CLASS }), h("span", { class: MOBILE_CLASS })))
164
+ ];
160
165
  }
161
166
  renderEditCell() {
162
167
  // if can edit
@@ -183,7 +188,7 @@ export class OverlaySelection {
183
188
  if (!saveEv.detail.preventFocus) {
184
189
  this.focusNext();
185
190
  }
186
- }, onCloseEdit: e => this.closeEdit(e), editCell: editable, saveOnClose: this.applyChangesOnClose, column: this.columnService.columns[editCell.x], editor: this.columnService.getCellEditor(editCell.y, editCell.x, this.editors), style: style }));
191
+ }, onCloseEdit: e => this.closeEdit(e), editCell: editable, saveOnClose: this.applyChangesOnClose, column: this.columnService.columns[editCell.x], editor: this.columnService.getCellEditor(editCell.y, editCell.x, this.editors), additionalData: this.additionalData, style: style }));
187
192
  }
188
193
  render() {
189
194
  const els = [];
@@ -195,7 +200,7 @@ export class OverlaySelection {
195
200
  const range = this.selectionStoreService.ranged;
196
201
  const selectionFocus = this.selectionStoreService.focused;
197
202
  if ((range || selectionFocus) && this.useClipboard) {
198
- els.push(this.clipboardService.renderClipboard());
203
+ els.push(this.clipboardService.renderClipboard(this.readonly));
199
204
  }
200
205
  if (range) {
201
206
  els.push(...this.renderRange(range));
@@ -207,7 +212,14 @@ export class OverlaySelection {
207
212
  els.push(h("revogr-order-editor", { ref: e => (this.orderEditor = e), dataStore: this.dataStore, dimensionRow: this.dimensionRow, dimensionCol: this.dimensionCol, parent: this.element, onInternalRowDragStart: e => this.onRowDragStart(e) }));
208
213
  }
209
214
  }
210
- return (h(Host, { onDblClick: () => this.doEdit(), onMouseDown: (e) => this.onElementMouseDown(e) }, els, h("slot", { name: "data" })));
215
+ return (h(Host, { class: { mobile: this.isMobileDevice },
216
+ // run edit on dblclick
217
+ onDblClick: (e) => {
218
+ // if dblclick prevented outside edit will not start
219
+ if (!e.defaultPrevented) {
220
+ this.doEdit();
221
+ }
222
+ }, onMouseDown: (e) => this.onElementMouseDown(e), onTouchStart: (e) => this.onElementMouseDown(e, true) }, els, h("slot", { name: "data" })));
211
223
  }
212
224
  doFocus(focus, end, next) {
213
225
  const { defaultPrevented } = this.beforeFocusCell.emit(this.columnService.getSaveData(focus.y, focus.x));
@@ -242,7 +254,7 @@ export class OverlaySelection {
242
254
  }
243
255
  return !e.defaultPrevented;
244
256
  }
245
- onElementMouseDown(e) {
257
+ onElementMouseDown(e, touch = false) {
246
258
  // Ignore focus if clicked input
247
259
  if (isEditInput(e.target)) {
248
260
  return;
@@ -251,14 +263,29 @@ export class OverlaySelection {
251
263
  if (e.defaultPrevented) {
252
264
  return;
253
265
  }
266
+ const x = getFromEvent(e, 'clientX');
267
+ const y = getFromEvent(e, 'clientY');
268
+ // skip touch
269
+ if (x === null || y === null) {
270
+ return;
271
+ }
254
272
  // Regular cell click
255
- const focusCell = getCurrentCell({ x: e.x, y: e.y }, data);
273
+ const focusCell = getCurrentCell({ x, y }, data);
256
274
  this.selectionStoreService.focus(focusCell, this.range && e.shiftKey);
257
275
  // Initiate autofill selection
258
276
  if (this.range) {
259
- this.autoFillService.selectionStart(e, data);
277
+ this.autoFillService.selectionStart(e.target, data);
278
+ if (!touch) {
279
+ e.preventDefault();
280
+ }
281
+ else if (verifyTouchTarget(e.touches[0], MOBILE_CLASS)) {
282
+ e.preventDefault();
283
+ }
260
284
  }
261
285
  }
286
+ /**
287
+ * Start cell editing
288
+ */
262
289
  doEdit(val = '') {
263
290
  var _a;
264
291
  if (this.canEdit()) {
@@ -297,7 +324,14 @@ export class OverlaySelection {
297
324
  }
298
325
  else if (this.canEdit()) {
299
326
  const focused = this.selectionStoreService.focused;
300
- this.cellEdit({ rgRow: focused.y, rgCol: focused.x, val: '' });
327
+ const cell = this.columnService.getSaveData(focused.y, focused.x);
328
+ this.cellEdit({
329
+ rgRow: focused.y,
330
+ rgCol: focused.x,
331
+ val: '',
332
+ type: cell.type,
333
+ prop: cell.prop,
334
+ });
301
335
  }
302
336
  }
303
337
  onRowDragStart({ detail }) {
@@ -593,6 +627,40 @@ export class OverlaySelection {
593
627
  "attribute": "apply-changes-on-close",
594
628
  "reflect": false,
595
629
  "defaultValue": "false"
630
+ },
631
+ "additionalData": {
632
+ "type": "any",
633
+ "mutable": false,
634
+ "complexType": {
635
+ "original": "any",
636
+ "resolved": "any",
637
+ "references": {}
638
+ },
639
+ "required": false,
640
+ "optional": false,
641
+ "docs": {
642
+ "tags": [],
643
+ "text": "Additional data to pass to renderer"
644
+ },
645
+ "attribute": "additional-data",
646
+ "reflect": false
647
+ },
648
+ "isMobileDevice": {
649
+ "type": "boolean",
650
+ "mutable": false,
651
+ "complexType": {
652
+ "original": "boolean",
653
+ "resolved": "boolean",
654
+ "references": {}
655
+ },
656
+ "required": false,
657
+ "optional": false,
658
+ "docs": {
659
+ "tags": [],
660
+ "text": "Is mobile view mode"
661
+ },
662
+ "attribute": "is-mobile-device",
663
+ "reflect": false
596
664
  }
597
665
  };
598
666
  }
@@ -605,7 +673,7 @@ export class OverlaySelection {
605
673
  "composed": true,
606
674
  "docs": {
607
675
  "tags": [],
608
- "text": ""
676
+ "text": "Before clipboard copy happened"
609
677
  },
610
678
  "complexType": {
611
679
  "original": "any",
@@ -620,7 +688,7 @@ export class OverlaySelection {
620
688
  "composed": true,
621
689
  "docs": {
622
690
  "tags": [],
623
- "text": ""
691
+ "text": "Before paste happened"
624
692
  },
625
693
  "complexType": {
626
694
  "original": "any",
@@ -675,7 +743,7 @@ export class OverlaySelection {
675
743
  "composed": true,
676
744
  "docs": {
677
745
  "tags": [],
678
- "text": ""
746
+ "text": "Set edit cell"
679
747
  },
680
748
  "complexType": {
681
749
  "original": "Edition.BeforeEdit",