@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.
- package/custom-element/columnService.js +1 -1
- package/custom-element/consts.js +2 -1
- package/custom-element/consts.js.map +1 -1
- package/custom-element/localScrollService.js +1 -1
- package/custom-element/localScrollService.js.map +1 -1
- package/custom-element/revo-grid.js +163 -97
- package/custom-element/revo-grid.js.map +1 -1
- package/custom-element/revogr-clipboard.js +24 -5
- package/custom-element/revogr-clipboard.js.map +1 -1
- package/custom-element/revogr-edit2.js +12 -6
- package/custom-element/revogr-edit2.js.map +1 -1
- package/custom-element/revogr-focus2.js +1 -1
- package/custom-element/revogr-focus2.js.map +1 -1
- package/custom-element/revogr-header2.js +25 -11
- package/custom-element/revogr-header2.js.map +1 -1
- package/custom-element/revogr-overlay-selection2.js +99 -32
- package/custom-element/revogr-overlay-selection2.js.map +1 -1
- package/custom-element/revogr-row-headers2.js +1 -2
- package/custom-element/revogr-row-headers2.js.map +1 -1
- package/custom-element/revogr-viewport-scroll2.js +39 -6
- package/custom-element/revogr-viewport-scroll2.js.map +1 -1
- package/dist/cjs/{debounce-525dd66c.js → debounce-f50730b6.js} +1 -38
- package/dist/cjs/debounce-f50730b6.js.map +1 -0
- package/dist/cjs/dispatcher-20520c70.js +21 -0
- package/dist/cjs/dispatcher-20520c70.js.map +1 -0
- package/dist/cjs/events-030618fc.js +459 -0
- package/dist/cjs/events-030618fc.js.map +1 -0
- package/dist/cjs/filter.button-6badec7a.js +44 -0
- package/dist/cjs/filter.button-6badec7a.js.map +1 -0
- package/dist/cjs/{index-aad39b7b.js → index-ee2ef5ae.js} +96 -36
- package/dist/cjs/index-ee2ef5ae.js.map +1 -0
- package/dist/cjs/index-effc94b9.js +3944 -0
- package/dist/cjs/index-effc94b9.js.map +1 -0
- package/dist/cjs/isString-3dde8d95.js +38 -0
- package/dist/cjs/isString-3dde8d95.js.map +1 -0
- package/dist/cjs/keyCodes.utils-d665ebed.js +271 -0
- package/dist/cjs/keyCodes.utils-d665ebed.js.map +1 -0
- package/dist/cjs/loader.cjs.js +3 -3
- package/dist/cjs/loader.cjs.js.map +1 -1
- package/dist/cjs/localScrollService-a81823c5.js +403 -0
- package/dist/cjs/localScrollService-a81823c5.js.map +1 -0
- package/dist/cjs/revo-grid.cjs.entry.js +3858 -0
- package/dist/cjs/revo-grid.cjs.entry.js.map +1 -0
- package/dist/cjs/revo-grid.cjs.js +3 -3
- package/dist/cjs/revo-grid.cjs.js.map +1 -1
- package/dist/cjs/revogr-clipboard.cjs.entry.js +24 -6
- package/dist/cjs/revogr-clipboard.cjs.entry.js.map +1 -1
- package/dist/cjs/revogr-data_3.cjs.entry.js +1138 -0
- package/dist/cjs/revogr-data_3.cjs.entry.js.map +1 -0
- package/dist/cjs/revogr-edit_2.cjs.entry.js +325 -0
- package/dist/cjs/revogr-edit_2.cjs.entry.js.map +1 -0
- package/dist/cjs/revogr-filter-panel.cjs.entry.js +6 -5
- package/dist/cjs/revogr-filter-panel.cjs.entry.js.map +1 -1
- package/dist/cjs/revogr-focus_5.cjs.entry.js +1231 -0
- package/dist/cjs/revogr-focus_5.cjs.entry.js.map +1 -0
- package/dist/cjs/{revo-grid_11.cjs.entry.js → viewport.helpers-70ccec8f.js} +13978 -25269
- package/dist/cjs/viewport.helpers-70ccec8f.js.map +1 -0
- package/dist/collection/collection-manifest.json +1 -1
- package/dist/collection/components/clipboard/revogr-clipboard.d.ts +6 -2
- package/dist/collection/components/clipboard/revogr-clipboard.js +46 -5
- package/dist/collection/components/clipboard/revogr-clipboard.js.map +1 -1
- package/dist/collection/components/header/headerCellRenderer.d.ts +2 -1
- package/dist/collection/components/header/headerCellRenderer.js +1 -1
- package/dist/collection/components/header/headerCellRenderer.js.map +1 -1
- package/dist/collection/components/header/headerRenderer.d.ts +2 -2
- package/dist/collection/components/header/headerRenderer.js +1 -1
- package/dist/collection/components/header/headerRenderer.js.map +1 -1
- package/dist/collection/components/header/revogr-header.d.ts +15 -1
- package/dist/collection/components/header/revogr-header.js +34 -8
- package/dist/collection/components/header/revogr-header.js.map +1 -1
- package/dist/collection/components/overlay/autofill.service.d.ts +7 -3
- package/dist/collection/components/overlay/autofill.service.js +32 -12
- package/dist/collection/components/overlay/autofill.service.js.map +1 -1
- package/dist/collection/components/overlay/clipboard.service.d.ts +1 -1
- package/dist/collection/components/overlay/clipboard.service.js +2 -2
- package/dist/collection/components/overlay/clipboard.service.js.map +1 -1
- package/dist/collection/components/overlay/keyboard.service.js +2 -6
- package/dist/collection/components/overlay/keyboard.service.js.map +1 -1
- package/dist/collection/components/overlay/revogr-edit.d.ts +8 -0
- package/dist/collection/components/overlay/revogr-edit.js +34 -9
- package/dist/collection/components/overlay/revogr-edit.js.map +1 -1
- package/dist/collection/components/overlay/revogr-overlay-selection.d.ts +32 -10
- package/dist/collection/components/overlay/revogr-overlay-selection.js +80 -12
- package/dist/collection/components/overlay/revogr-overlay-selection.js.map +1 -1
- package/dist/collection/components/overlay/revogr-overlay-style.css +71 -4
- package/dist/collection/components/revoGrid/revo-grid.d.ts +15 -4
- package/dist/collection/components/revoGrid/revo-grid.js +60 -19
- package/dist/collection/components/revoGrid/revo-grid.js.map +1 -1
- package/dist/collection/components/revoGrid/viewport.scrolling.service.d.ts +6 -2
- package/dist/collection/components/revoGrid/viewport.scrolling.service.js +26 -4
- package/dist/collection/components/revoGrid/viewport.scrolling.service.js.map +1 -1
- package/dist/collection/components/revoGrid/viewport.section.d.ts +3 -2
- package/dist/collection/components/revoGrid/viewport.section.js +8 -4
- package/dist/collection/components/revoGrid/viewport.section.js.map +1 -1
- package/dist/collection/components/revoGrid/viewport.service.d.ts +4 -0
- package/dist/collection/components/revoGrid/viewport.service.js +15 -3
- package/dist/collection/components/revoGrid/viewport.service.js.map +1 -1
- package/dist/collection/components/rowHeaders/revogr-row-headers.js.map +1 -1
- package/dist/collection/components/scroll/revogr-viewport-scroll-style.css +3 -0
- package/dist/collection/components/scroll/revogr-viewport-scroll.d.ts +16 -5
- package/dist/collection/components/scroll/revogr-viewport-scroll.js +64 -9
- package/dist/collection/components/scroll/revogr-viewport-scroll.js.map +1 -1
- package/dist/collection/components/selectionFocus/revogr-focus-style.css +1 -1
- package/dist/collection/components.d.ts +110 -6
- package/dist/collection/interfaces.d.ts +4 -1
- package/dist/collection/plugins/groupingColumn/columnGroupsRenderer.d.ts +3 -2
- package/dist/collection/plugins/groupingColumn/columnGroupsRenderer.js +2 -2
- package/dist/collection/plugins/groupingColumn/columnGroupsRenderer.js.map +1 -1
- package/dist/collection/plugins/groupingColumn/headerGroupRenderer.d.ts +2 -2
- package/dist/collection/plugins/groupingColumn/headerGroupRenderer.js +1 -1
- package/dist/collection/plugins/groupingColumn/headerGroupRenderer.js.map +1 -1
- package/dist/collection/plugins/sorting/sorting.plugin.d.ts +21 -13
- package/dist/collection/plugins/sorting/sorting.plugin.js +77 -70
- package/dist/collection/plugins/sorting/sorting.plugin.js.map +1 -1
- package/dist/collection/serve/controller.js +183 -0
- package/dist/collection/services/localScrollService.js +1 -1
- package/dist/collection/services/localScrollService.js.map +1 -1
- package/dist/collection/services/resizable.directive.d.ts +8 -7
- package/dist/collection/services/resizable.directive.js +13 -36
- package/dist/collection/services/resizable.directive.js.map +1 -1
- package/dist/collection/services/resizable.element.d.ts +4 -0
- package/dist/collection/services/resizable.element.js +39 -0
- package/dist/collection/services/resizable.element.js.map +1 -0
- package/dist/collection/stencil-public-runtime.d.ts +1 -0
- package/dist/collection/store/viewPort/viewport.store.js +0 -1
- package/dist/collection/store/viewPort/viewport.store.js.map +1 -1
- package/dist/collection/utils/consts.d.ts +1 -0
- package/dist/collection/utils/consts.js +1 -0
- package/dist/collection/utils/consts.js.map +1 -1
- package/dist/collection/utils/events.d.ts +2 -1
- package/dist/collection/utils/events.js +18 -2
- package/dist/collection/utils/events.js.map +1 -1
- package/dist/collection/utils/mobile.d.ts +1 -0
- package/dist/collection/utils/mobile.js +7 -0
- package/dist/collection/utils/mobile.js.map +1 -0
- package/dist/esm/{debounce-301fd4d2.js → debounce-820b5a8b.js} +2 -34
- package/dist/esm/debounce-820b5a8b.js.map +1 -0
- package/dist/esm/dispatcher-9e9c0233.js +19 -0
- package/dist/esm/dispatcher-9e9c0233.js.map +1 -0
- package/dist/esm/events-31272e5e.js +454 -0
- package/dist/esm/events-31272e5e.js.map +1 -0
- package/dist/esm/filter.button-21ce90ef.js +38 -0
- package/dist/esm/filter.button-21ce90ef.js.map +1 -0
- package/dist/esm/{index-5e90b19b.js → index-05947c5f.js} +97 -37
- package/dist/esm/index-05947c5f.js.map +1 -0
- package/dist/esm/index-728bf6e3.js +3889 -0
- package/dist/esm/index-728bf6e3.js.map +1 -0
- package/dist/esm/isString-d539060a.js +36 -0
- package/dist/esm/isString-d539060a.js.map +1 -0
- package/dist/esm/keyCodes.utils-c0064460.js +265 -0
- package/dist/esm/keyCodes.utils-c0064460.js.map +1 -0
- package/dist/esm/loader.js +4 -4
- package/dist/esm/loader.js.map +1 -1
- package/dist/esm/localScrollService-884d8952.js +400 -0
- package/dist/esm/localScrollService-884d8952.js.map +1 -0
- package/dist/esm/revo-grid.entry.js +3854 -0
- package/dist/esm/revo-grid.entry.js.map +1 -0
- package/dist/esm/revo-grid.js +4 -4
- package/dist/esm/revo-grid.js.map +1 -1
- package/dist/esm/revogr-clipboard.entry.js +24 -6
- package/dist/esm/revogr-clipboard.entry.js.map +1 -1
- package/dist/esm/revogr-data_3.entry.js +1132 -0
- package/dist/esm/revogr-data_3.entry.js.map +1 -0
- package/dist/esm/revogr-edit_2.entry.js +320 -0
- package/dist/esm/revogr-edit_2.entry.js.map +1 -0
- package/dist/esm/revogr-filter-panel.entry.js +3 -2
- package/dist/esm/revogr-filter-panel.entry.js.map +1 -1
- package/dist/esm/revogr-focus_5.entry.js +1223 -0
- package/dist/esm/revogr-focus_5.entry.js.map +1 -0
- package/dist/esm/{revo-grid_11.entry.js → viewport.helpers-c08e729e.js} +13790 -25093
- package/dist/esm/viewport.helpers-c08e729e.js.map +1 -0
- package/dist/revo-grid/debounce-820b5a8b.js +5 -0
- package/dist/revo-grid/debounce-820b5a8b.js.map +1 -0
- package/dist/revo-grid/dispatcher-9e9c0233.js +5 -0
- package/dist/revo-grid/dispatcher-9e9c0233.js.map +1 -0
- package/dist/revo-grid/events-31272e5e.js +5 -0
- package/dist/revo-grid/events-31272e5e.js.map +1 -0
- package/dist/revo-grid/filter.button-21ce90ef.js +5 -0
- package/dist/revo-grid/filter.button-21ce90ef.js.map +1 -0
- package/dist/revo-grid/index-05947c5f.js +6 -0
- package/dist/revo-grid/index-05947c5f.js.map +1 -0
- package/dist/revo-grid/index-728bf6e3.js +5 -0
- package/dist/revo-grid/index-728bf6e3.js.map +1 -0
- package/dist/revo-grid/isString-d539060a.js +5 -0
- package/dist/revo-grid/isString-d539060a.js.map +1 -0
- package/dist/revo-grid/keyCodes.utils-c0064460.js +5 -0
- package/dist/revo-grid/keyCodes.utils-c0064460.js.map +1 -0
- package/dist/revo-grid/localScrollService-884d8952.js +5 -0
- package/dist/revo-grid/localScrollService-884d8952.js.map +1 -0
- package/dist/revo-grid/revo-grid.entry.js +5 -0
- package/dist/revo-grid/revo-grid.entry.js.map +1 -0
- package/dist/revo-grid/revo-grid.esm.js +1 -1
- package/dist/revo-grid/revo-grid.esm.js.map +1 -1
- package/dist/revo-grid/revogr-clipboard.entry.js +1 -1
- package/dist/revo-grid/revogr-clipboard.entry.js.map +1 -1
- package/dist/revo-grid/revogr-data_3.entry.js +5 -0
- package/dist/revo-grid/revogr-data_3.entry.js.map +1 -0
- package/dist/revo-grid/revogr-edit_2.entry.js +5 -0
- package/dist/revo-grid/revogr-edit_2.entry.js.map +1 -0
- package/dist/revo-grid/revogr-filter-panel.entry.js +1 -1
- package/dist/revo-grid/revogr-filter-panel.entry.js.map +1 -1
- package/dist/revo-grid/revogr-focus_5.entry.js +5 -0
- package/dist/revo-grid/revogr-focus_5.entry.js.map +1 -0
- package/dist/revo-grid/viewport.helpers-c08e729e.js +5 -0
- package/dist/revo-grid/viewport.helpers-c08e729e.js.map +1 -0
- package/dist/types/components/clipboard/revogr-clipboard.d.ts +6 -2
- package/dist/types/components/header/headerCellRenderer.d.ts +2 -1
- package/dist/types/components/header/headerRenderer.d.ts +2 -2
- package/dist/types/components/header/revogr-header.d.ts +15 -1
- package/dist/types/components/overlay/autofill.service.d.ts +7 -3
- package/dist/types/components/overlay/clipboard.service.d.ts +1 -1
- package/dist/types/components/overlay/revogr-edit.d.ts +8 -0
- package/dist/types/components/overlay/revogr-overlay-selection.d.ts +32 -10
- package/dist/types/components/revoGrid/revo-grid.d.ts +15 -4
- package/dist/types/components/revoGrid/viewport.scrolling.service.d.ts +6 -2
- package/dist/types/components/revoGrid/viewport.section.d.ts +3 -2
- package/dist/types/components/revoGrid/viewport.service.d.ts +4 -0
- package/dist/types/components/scroll/revogr-viewport-scroll.d.ts +16 -5
- package/dist/types/components.d.ts +110 -6
- package/dist/types/interfaces.d.ts +4 -1
- package/dist/types/plugins/groupingColumn/columnGroupsRenderer.d.ts +3 -2
- package/dist/types/plugins/groupingColumn/headerGroupRenderer.d.ts +2 -2
- package/dist/types/plugins/sorting/sorting.plugin.d.ts +21 -13
- package/dist/types/services/resizable.directive.d.ts +8 -7
- package/dist/types/services/resizable.element.d.ts +4 -0
- package/dist/types/stencil-public-runtime.d.ts +1 -0
- package/dist/types/utils/consts.d.ts +1 -0
- package/dist/types/utils/events.d.ts +2 -1
- package/dist/types/utils/mobile.d.ts +1 -0
- package/package.json +4 -3
- package/dist/cjs/debounce-525dd66c.js.map +0 -1
- package/dist/cjs/index-aad39b7b.js.map +0 -1
- package/dist/cjs/revo-grid_11.cjs.entry.js.map +0 -1
- package/dist/esm/debounce-301fd4d2.js.map +0 -1
- package/dist/esm/index-5e90b19b.js.map +0 -1
- package/dist/esm/revo-grid_11.entry.js.map +0 -1
- package/dist/revo-grid/debounce-301fd4d2.js +0 -5
- package/dist/revo-grid/debounce-301fd4d2.js.map +0 -1
- package/dist/revo-grid/index-5e90b19b.js +0 -6
- package/dist/revo-grid/index-5e90b19b.js.map +0 -1
- package/dist/revo-grid/revo-grid_11.entry.js +0 -5
- package/dist/revo-grid/revo-grid_11.entry.js.map +0 -1
- /package/dist/collection/{utilsExternal/generate-data.js → serve/data.js} +0 -0
|
@@ -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;
|
|
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":"AACA,OAAO,EAAE,QAAQ,EAAE,MAAM,yCAAyC,CAAC;AAEnE,OAAO,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AACnD,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAC;AACzF,OAAO,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AACtC,OAAO,EAAa,aAAa,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AACzF,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAgBrD,MAAM,eAAe,GAAa;EAChC,WAAW,CAAC,GAAG;EACf,WAAW,CAAC,QAAQ;EACpB,WAAW,CAAC,UAAU;EACtB,WAAW,CAAC,UAAU;EACtB,WAAW,CAAC,WAAW;CACxB,CAAC;AACF,MAAM,OAAO,eAAe;EAG1B,YAAoB,EAAU;IAAV,OAAE,GAAF,EAAE,CAAQ;IAFtB,aAAQ,GAAG,KAAK,CAAC;EAEQ,CAAC;EAElC,KAAK,CAAC,OAAO,CAAC,CAAgB,EAAE,QAAiB;IAC/C,IAAI,SAAS,CAAC,CAAC,CAAC,OAAO,EAAE,SAAS,CAAC,QAAQ,CAAC,EAAE;MAC5C,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;KACtB;IAGD;;OAEG;IACH,IAAI,IAAI,CAAC,EAAE,CAAC,qBAAqB,CAAC,MAAM,EAAE;MACxC,QAAQ,CAAC,CAAC,IAAI,EAAE;QACd,KAAK,WAAW,CAAC,MAAM;UACrB,IAAI,CAAC,EAAE,CAAC,UAAU,EAAE,CAAC;UACrB,MAAM;OACT;MACD,OAAO;KACR;IAED;;OAEG;IAEH,oBAAoB;IACpB,IAAI,IAAI,CAAC,EAAE,CAAC,qBAAqB,CAAC,MAAM,IAAI,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE;MAC3D,IAAI,CAAC,EAAE,CAAC,SAAS,EAAE,CAAC;MACpB,OAAO;KACR;IAED,8BAA8B;IAC9B,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,qBAAqB,CAAC,OAAO,EAAE;MAC1C,OAAO;KACR;IAED,oCAAoC;IACpC,IAAI,WAAW,CAAC,GAAG,KAAK,CAAC,CAAC,IAAI,EAAE;MAC9B,IAAI,CAAC,kBAAkB,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC;MACrC,OAAO;KACR;IAED,gBAAgB;IAChB,IAAI,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE;MACtB,IAAI,CAAC,EAAE,CAAC,SAAS,EAAE,CAAC;MACpB,OAAO;KACR;IAED,iBAAiB;IACjB,IAAI,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE;MAClB,OAAO;KACR;IAED,gBAAgB;IAChB,IAAI,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE;MACjB,OAAO;KACR;IAED,kBAAkB;IAClB,IAAI,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE;MACnB,IAAI,CAAC,EAAE,CAAC,aAAa,EAAE,CAAC;MACxB,OAAO;KACR;IAED,aAAa;IACb,IAAI,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE;MACjB,IAAI,QAAQ,EAAE;QACZ,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;OACnB;MACD,OAAO;KACR;IAED,qBAAqB;IACrB,IAAI,WAAW,CAAC,CAAC,CAAC,OAAO,CAAC,EAAE;MAC1B,IAAI,CAAC,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;MACzB,OAAO;KACR;IAED,2CAA2C;IAC3C,IAAI,MAAM,IAAI,CAAC,kBAAkB,CAAC,CAAC,EAAE,QAAQ,CAAC,EAAE;MAC9C,OAAO;KACR;EACH,CAAC;EAEO,SAAS,CAAC,CAAgB;IAChC,MAAM,KAAK,GAAG,IAAI,CAAC,EAAE,CAAC,cAAc,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;IAClD,MAAM,KAAK,GAAG,IAAI,CAAC,EAAE,CAAC,cAAc,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;IAClD,oCAAoC;IACpC,IAAI,CAAC,KAAK,IAAI,CAAC,KAAK,EAAE;MACpB,OAAO;KACR;IACD,CAAC,CAAC,cAAc,EAAE,CAAC;IACnB,IAAI,CAAC,EAAE,CAAC,SAAS,EAAE,CAAC;EACtB,CAAC;EAED,KAAK,CAAC,kBAAkB,CAAC,CAAgB,EAAE,QAAiB;IAC1D,MAAM,IAAI,GAAG,IAAI,CAAC,kBAAkB,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC;IAClD,IAAI,CAAC,IAAI,EAAE;MACT,OAAO,KAAK,CAAC;KACd;IAED,yCAAyC;IACzC,0CAA0C;IAC1C,yDAAyD;IACzD,MAAM,OAAO,CAAC,eAAe,GAAG,EAAE,CAAC,CAAC;IAEpC,MAAM,KAAK,GAAG,IAAI,CAAC,EAAE,CAAC,cAAc,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;IAClD,MAAM,KAAK,GAAG,IAAI,CAAC,EAAE,CAAC,cAAc,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;IAClD,OAAO,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;EAC1E,CAAC;EAED,iBAAiB,CACf,OAAgC,EAChC,KAA2B,EAC3B,KAAsB,EACtB,OAAO,GAAG,KAAK;IAEf,IAAI,CAAC,KAAK,IAAI,CAAC,KAAK,EAAE;MACpB,OAAO,KAAK,CAAC;KACd;IACD,MAAM,IAAI,GAAG,aAAa,CAAC,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;IAC3D,IAAI,CAAC,IAAI,EAAE;MACT,OAAO,KAAK,CAAC;KACd;IACD,IAAI,OAAO,EAAE;MACX,MAAM,KAAK,GAAc,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC;MAC3C,IAAI,WAAW,CAAC,IAAI,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE;QAC7D,OAAO,KAAK,CAAC;OACd;MACD,MAAM,KAAK,GAAG,QAAQ,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC;MAC7C,OAAO,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;KAC7B;IACD,OAAO,IAAI,CAAC,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;EAChD,CAAC;EAED,KAAK,CAAC,CAAgB;IACpB,IAAI,SAAS,CAAC,CAAC,CAAC,OAAO,EAAE,SAAS,CAAC,QAAQ,CAAC,EAAE;MAC5C,IAAI,CAAC,QAAQ,GAAG,KAAK,CAAC;KACvB;EACH,CAAC;EACD,KAAK,CAAC,CAAgB;IACpB,OAAO,IAAI,CAAC,QAAQ,IAAI,CAAC,CAAC,IAAI,IAAI,WAAW,CAAC,CAAC,CAAC;EAClD,CAAC;EACD,MAAM,CAAC,CAAgB;IACrB,OAAO,IAAI,CAAC,QAAQ,IAAI,CAAC,CAAC,IAAI,IAAI,WAAW,CAAC,CAAC,CAAC;EAClD,CAAC;EACD,OAAO,CAAC,CAAgB;IACtB,OAAO,IAAI,CAAC,QAAQ,IAAI,CAAC,CAAC,IAAI,IAAI,WAAW,CAAC,CAAC,CAAC;EAClD,CAAC;EACD,KAAK,CAAC,CAAgB;IACpB,OAAO,IAAI,CAAC,QAAQ,IAAI,CAAC,CAAC,IAAI,IAAI,WAAW,CAAC,CAAC,CAAC;EAClD,CAAC;EACD,oCAAoC;EACpC,kBAAkB,CAAC,CAAgB,EAAE,QAAiB;IACpD,MAAM,OAAO,GAAG,QAAQ,IAAI,CAAC,CAAC,QAAQ,CAAC;IACvC,IAAI,eAAe,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE;MACpC,CAAC,CAAC,cAAc,EAAE,CAAC;KACpB;IACD,QAAQ,CAAC,CAAC,IAAI,EAAE;MACd,KAAK,WAAW,CAAC,QAAQ;QACvB,OAAO,EAAE,OAAO,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,OAAO,EAAE,CAAC;MACzC,KAAK,WAAW,CAAC,UAAU;QACzB,OAAO,EAAE,OAAO,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,OAAO,EAAE,CAAC;MACxC,KAAK,WAAW,CAAC,UAAU;QACzB,OAAO,EAAE,OAAO,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,OAAO,EAAE,CAAC;MACzC,KAAK,WAAW,CAAC,GAAG,CAAC;MACrB,KAAK,WAAW,CAAC,WAAW;QAC1B,OAAO,EAAE,OAAO,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,OAAO,EAAE,CAAC;KACzC;EACH,CAAC;CACF","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
|
-
//
|
|
54
|
-
//
|
|
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
|
|
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":
|
|
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":
|
|
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":"AAAA,OAAO,EAAE,SAAS,EAAE,KAAK,EAAgB,IAAI,EAAE,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,eAAe,CAAC;AAG/F,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;
|
|
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
|
-
/**
|
|
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
|
|
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 [
|
|
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, {
|
|
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
|
|
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.
|
|
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",
|