@revolist/revogrid 4.2.0-next.6 → 4.2.0-next.7

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 (32) hide show
  1. package/custom-element/localScrollService.js +2 -1
  2. package/custom-element/revo-grid.js +21 -20
  3. package/custom-element/revogr-focus2.js +14 -2
  4. package/custom-element/revogr-viewport-scroll2.js +6 -3
  5. package/dist/cjs/loader.cjs.js +1 -1
  6. package/dist/cjs/revo-grid.cjs.js +1 -1
  7. package/dist/cjs/revo-grid_11.cjs.entry.js +39 -25
  8. package/dist/collection/components/revoGrid/revo-grid.d.ts +11 -3
  9. package/dist/collection/components/revoGrid/revo-grid.js +51 -19
  10. package/dist/collection/components/revoGrid/viewport.section.js +1 -1
  11. package/dist/collection/components/rowHeaders/revogr-row-headers.js +1 -1
  12. package/dist/collection/components/scroll/revogr-viewport-scroll.d.ts +3 -0
  13. package/dist/collection/components/scroll/revogr-viewport-scroll.js +7 -4
  14. package/dist/collection/components/scrollable/revogr-scroll-virtual.js +1 -1
  15. package/dist/collection/components/selectionFocus/revogr-focus.d.ts +10 -0
  16. package/dist/collection/components/selectionFocus/revogr-focus.js +80 -8
  17. package/dist/collection/components.d.ts +20 -5
  18. package/dist/collection/interfaces.d.ts +1 -0
  19. package/dist/collection/services/localScrollService.d.ts +1 -1
  20. package/dist/collection/services/localScrollService.js +2 -1
  21. package/dist/esm/loader.js +1 -1
  22. package/dist/esm/revo-grid.js +1 -1
  23. package/dist/esm/revo-grid_11.entry.js +39 -25
  24. package/dist/revo-grid/revo-grid.esm.js +1 -1
  25. package/dist/revo-grid/revo-grid_11.entry.js +1 -1
  26. package/dist/types/components/revoGrid/revo-grid.d.ts +11 -3
  27. package/dist/types/components/scroll/revogr-viewport-scroll.d.ts +3 -0
  28. package/dist/types/components/selectionFocus/revogr-focus.d.ts +10 -0
  29. package/dist/types/components.d.ts +20 -5
  30. package/dist/types/interfaces.d.ts +1 -0
  31. package/dist/types/services/localScrollService.d.ts +1 -1
  32. package/package.json +2 -2
@@ -47,7 +47,7 @@ class LocalScrollService {
47
47
  }
48
48
  }
49
49
  // initiate scrolling event
50
- scroll(coordinate, dimension, force = false, delta) {
50
+ scroll(coordinate, dimension, force = false, delta, outside = false) {
51
51
  this.cancelScroll(dimension);
52
52
  if (!force && this.previousScroll[dimension] === coordinate) {
53
53
  this.previousScroll[dimension] = NO_COORDINATE;
@@ -58,6 +58,7 @@ class LocalScrollService {
58
58
  dimension: dimension,
59
59
  coordinate: param.virtualSize ? this.convert(coordinate, param) : coordinate,
60
60
  delta,
61
+ outside
61
62
  });
62
63
  }
63
64
  getParams(dimension) {
@@ -2744,7 +2744,7 @@ const ViewPortSections = ({ resize, editors, rowClass, readonly, range, columns,
2744
2744
  const dataView = (h("revogr-overlay-selection", Object.assign({}, data, { slot: data.slot, selectionStore: data.segmentSelectionStore, editors: editors, readonly: readonly, range: range, useClipboard: useClipboard, applyChangesOnClose: applyEditorChangesOnClose, onSetEdit: ({ detail }) => onEdit(detail) }),
2745
2745
  h("revogr-data", Object.assign({}, data, { [UUID]: data.uuid }, { key: key, readonly: readonly, range: range, rowClass: rowClass, rowSelectionStore: data.rowSelectionStore, slot: DATA_SLOT })),
2746
2746
  h("revogr-temp-range", { selectionStore: data.segmentSelectionStore, dimensionRow: data.dimensionRow, dimensionCol: data.dimensionCol }),
2747
- h("revogr-focus", { focusTemplate: focusTemplate, rowType: data.type, colType: view.type, selectionStore: data.segmentSelectionStore, dimensionRow: data.dimensionRow, dimensionCol: data.dimensionCol })));
2747
+ h("revogr-focus", { colData: data.colData, dataStore: data.dataStore, focusTemplate: focusTemplate, rowType: data.type, colType: view.type, selectionStore: data.segmentSelectionStore, dimensionRow: data.dimensionRow, dimensionCol: data.dimensionCol })));
2748
2748
  dataViews.push(dataView);
2749
2749
  });
2750
2750
  viewPortHtml.push(h("revogr-viewport-scroll", Object.assign({}, view.prop, { ref: el => registerElement(el, view.prop.key), onScrollViewport: e => onScroll(e.detail, view.prop.key) }), dataViews));
@@ -3152,6 +3152,7 @@ const RevoGridComponent = /*@__PURE__*/ proxyCustomElement(class extends HTMLEle
3152
3152
  this.afteredit = createEvent(this, "afteredit", 7);
3153
3153
  this.beforeautofill = createEvent(this, "beforeautofill", 7);
3154
3154
  this.beforeange = createEvent(this, "beforeange", 7);
3155
+ this.afterfocus = createEvent(this, "afterfocus", 7);
3155
3156
  this.roworderchanged = createEvent(this, "roworderchanged", 7);
3156
3157
  this.beforesourcesortingapply = createEvent(this, "beforesourcesortingapply", 7);
3157
3158
  this.beforesortingapply = createEvent(this, "beforesortingapply", 7);
@@ -3273,6 +3274,12 @@ const RevoGridComponent = /*@__PURE__*/ proxyCustomElement(class extends HTMLEle
3273
3274
  this.stretch = true;
3274
3275
  // --------------------------------------------------------------------------
3275
3276
  //
3277
+ // Listeners outside scope
3278
+ //
3279
+ // --------------------------------------------------------------------------
3280
+ this.clickTrackForFocusClear = null;
3281
+ // --------------------------------------------------------------------------
3282
+ //
3276
3283
  // Private Properties
3277
3284
  //
3278
3285
  // --------------------------------------------------------------------------
@@ -3285,7 +3292,6 @@ const RevoGridComponent = /*@__PURE__*/ proxyCustomElement(class extends HTMLEle
3285
3292
  * Define plugins collection
3286
3293
  */
3287
3294
  this.internalPlugins = [];
3288
- this.subscribers = {};
3289
3295
  }
3290
3296
  // --------------------------------------------------------------------------
3291
3297
  //
@@ -3462,15 +3468,19 @@ const RevoGridComponent = /*@__PURE__*/ proxyCustomElement(class extends HTMLEle
3462
3468
  var _a;
3463
3469
  return (_a = this.viewport) === null || _a === void 0 ? void 0 : _a.getSelectedRange();
3464
3470
  }
3465
- // --------------------------------------------------------------------------
3466
- //
3467
- // Listeners outside scope
3468
- //
3469
- // --------------------------------------------------------------------------
3470
- /** Clear data which is outside of grid container */
3471
- handleOutsideClick(e) {
3471
+ mousedownHandle(e) {
3472
+ this.clickTrackForFocusClear = e.screenX + e.screenY;
3473
+ }
3474
+ mouseupHandle(e) {
3472
3475
  const target = e.target;
3473
- // if event prevented or it is a table where we click at
3476
+ const pos = e.screenX + e.screenY;
3477
+ // detect if mousemove then do nothing
3478
+ if (Math.abs(this.clickTrackForFocusClear - pos) > 10) {
3479
+ return;
3480
+ }
3481
+ // check if action finished inside of the document
3482
+ // clear data which is outside of grid
3483
+ // if event prevented or it is current table don't clear focus
3474
3484
  if (e.defaultPrevented || (target === null || target === void 0 ? void 0 : target.closest(`[${UUID}="${this.uuid}"]`))) {
3475
3485
  return;
3476
3486
  }
@@ -3745,20 +3755,11 @@ const RevoGridComponent = /*@__PURE__*/ proxyCustomElement(class extends HTMLEle
3745
3755
  });
3746
3756
  this.viewportscroll.emit(e);
3747
3757
  });
3748
- this.subscribers = { mouseup: this.handleOutsideClick.bind(this) };
3749
- for (let type in this.subscribers) {
3750
- document.addEventListener(type, this.subscribers[type]);
3751
- }
3752
3758
  }
3753
3759
  disconnectedCallback() {
3754
3760
  // destroy plugins on element disconnect
3755
3761
  each(this.internalPlugins, p => p.destroy());
3756
3762
  this.internalPlugins = [];
3757
- // clear events
3758
- for (let type in this.subscribers) {
3759
- document.removeEventListener(type, this.subscribers[type]);
3760
- delete this.subscribers[type];
3761
- }
3762
3763
  }
3763
3764
  render() {
3764
3765
  const contentHeight = this.dimensionProvider.stores['rgRow'].store.get('realSize');
@@ -3853,7 +3854,7 @@ const RevoGridComponent = /*@__PURE__*/ proxyCustomElement(class extends HTMLEle
3853
3854
  "getFocused": [64],
3854
3855
  "getContentSize": [64],
3855
3856
  "getSelectedRange": [64]
3856
- }, [[0, "internalRowDragStart", "onRowDragStarted"], [0, "internalRowDragEnd", "onRowDragEnd"], [0, "internalRowDrag", "onRowDrag"], [0, "internalRowMouseMove", "onRowMouseMove"], [0, "internalCellEdit", "onBeforeEdit"], [0, "internalRangeDataApply", "onBeforeRangeEdit"], [0, "internalSelectionChanged", "onRangeChanged"], [0, "initialRowDropped", "onRowDropped"], [0, "initialHeaderClick", "onHeaderClick"], [0, "beforeFocusCell", "onCellFocus"]]]);
3857
+ }, [[5, "mousedown", "mousedownHandle"], [5, "mouseup", "mouseupHandle"], [0, "internalRowDragStart", "onRowDragStarted"], [0, "internalRowDragEnd", "onRowDragEnd"], [0, "internalRowDrag", "onRowDrag"], [0, "internalRowMouseMove", "onRowMouseMove"], [0, "internalCellEdit", "onBeforeEdit"], [0, "internalRangeDataApply", "onBeforeRangeEdit"], [0, "internalSelectionChanged", "onRangeChanged"], [0, "initialRowDropped", "onRowDropped"], [0, "initialHeaderClick", "onHeaderClick"], [0, "beforeFocusCell", "onCellFocus"]]]);
3857
3858
  function defineCustomElement$1() {
3858
3859
  if (typeof customElements === "undefined") {
3859
3860
  return;
@@ -4,6 +4,7 @@
4
4
  import { proxyCustomElement, HTMLElement, createEvent, h, Host } from '@stencil/core/internal/client';
5
5
  import { F as FOCUS_CLASS } from './consts.js';
6
6
  import { g as getElStyle } from './selection.utils.js';
7
+ import { g as getSourceItem } from './data.store.js';
7
8
 
8
9
  const revogrFocusStyleCss = ".revo-drag-icon{-webkit-mask-image:url(\"data:image/svg+xml,%3C%3Fxml version='1.0' encoding='UTF-8'%3F%3E%3Csvg viewBox='0 0 438 383' xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink'%3E%3Cg%3E%3Cpath d='M421.875,70.40625 C426.432292,70.40625 430.175781,68.9414062 433.105469,66.0117188 C436.035156,63.0820312 437.5,59.3385417 437.5,54.78125 L437.5,54.78125 L437.5,15.71875 C437.5,11.1614583 436.035156,7.41796875 433.105469,4.48828125 C430.175781,1.55859375 426.432292,0.09375 421.875,0.09375 L421.875,0.09375 L15.625,0.09375 C11.0677083,0.09375 7.32421875,1.55859375 4.39453125,4.48828125 C1.46484375,7.41796875 0,11.1614583 0,15.71875 L0,15.71875 L0,54.78125 C0,59.3385417 1.46484375,63.0820312 4.39453125,66.0117188 C7.32421875,68.9414062 11.0677083,70.40625 15.625,70.40625 L15.625,70.40625 L421.875,70.40625 Z M421.875,226.65625 C426.432292,226.65625 430.175781,225.191406 433.105469,222.261719 C436.035156,219.332031 437.5,215.588542 437.5,211.03125 L437.5,211.03125 L437.5,171.96875 C437.5,167.411458 436.035156,163.667969 433.105469,160.738281 C430.175781,157.808594 426.432292,156.34375 421.875,156.34375 L421.875,156.34375 L15.625,156.34375 C11.0677083,156.34375 7.32421875,157.808594 4.39453125,160.738281 C1.46484375,163.667969 0,167.411458 0,171.96875 L0,171.96875 L0,211.03125 C0,215.588542 1.46484375,219.332031 4.39453125,222.261719 C7.32421875,225.191406 11.0677083,226.65625 15.625,226.65625 L15.625,226.65625 L421.875,226.65625 Z M421.875,382.90625 C426.432292,382.90625 430.175781,381.441406 433.105469,378.511719 C436.035156,375.582031 437.5,371.838542 437.5,367.28125 L437.5,367.28125 L437.5,328.21875 C437.5,323.661458 436.035156,319.917969 433.105469,316.988281 C430.175781,314.058594 426.432292,312.59375 421.875,312.59375 L421.875,312.59375 L15.625,312.59375 C11.0677083,312.59375 7.32421875,314.058594 4.39453125,316.988281 C1.46484375,319.917969 0,323.661458 0,328.21875 L0,328.21875 L0,367.28125 C0,371.838542 1.46484375,375.582031 4.39453125,378.511719 C7.32421875,381.441406 11.0677083,382.90625 15.625,382.90625 L15.625,382.90625 L421.875,382.90625 Z'%3E%3C/path%3E%3C/g%3E%3C/svg%3E\");mask-image:url(\"data:image/svg+xml,%3C%3Fxml version='1.0' encoding='UTF-8'%3F%3E%3Csvg viewBox='0 0 438 383' xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink'%3E%3Cg%3E%3Cpath d='M421.875,70.40625 C426.432292,70.40625 430.175781,68.9414062 433.105469,66.0117188 C436.035156,63.0820312 437.5,59.3385417 437.5,54.78125 L437.5,54.78125 L437.5,15.71875 C437.5,11.1614583 436.035156,7.41796875 433.105469,4.48828125 C430.175781,1.55859375 426.432292,0.09375 421.875,0.09375 L421.875,0.09375 L15.625,0.09375 C11.0677083,0.09375 7.32421875,1.55859375 4.39453125,4.48828125 C1.46484375,7.41796875 0,11.1614583 0,15.71875 L0,15.71875 L0,54.78125 C0,59.3385417 1.46484375,63.0820312 4.39453125,66.0117188 C7.32421875,68.9414062 11.0677083,70.40625 15.625,70.40625 L15.625,70.40625 L421.875,70.40625 Z M421.875,226.65625 C426.432292,226.65625 430.175781,225.191406 433.105469,222.261719 C436.035156,219.332031 437.5,215.588542 437.5,211.03125 L437.5,211.03125 L437.5,171.96875 C437.5,167.411458 436.035156,163.667969 433.105469,160.738281 C430.175781,157.808594 426.432292,156.34375 421.875,156.34375 L421.875,156.34375 L15.625,156.34375 C11.0677083,156.34375 7.32421875,157.808594 4.39453125,160.738281 C1.46484375,163.667969 0,167.411458 0,171.96875 L0,171.96875 L0,211.03125 C0,215.588542 1.46484375,219.332031 4.39453125,222.261719 C7.32421875,225.191406 11.0677083,226.65625 15.625,226.65625 L15.625,226.65625 L421.875,226.65625 Z M421.875,382.90625 C426.432292,382.90625 430.175781,381.441406 433.105469,378.511719 C436.035156,375.582031 437.5,371.838542 437.5,367.28125 L437.5,367.28125 L437.5,328.21875 C437.5,323.661458 436.035156,319.917969 433.105469,316.988281 C430.175781,314.058594 426.432292,312.59375 421.875,312.59375 L421.875,312.59375 L15.625,312.59375 C11.0677083,312.59375 7.32421875,314.058594 4.39453125,316.988281 C1.46484375,319.917969 0,323.661458 0,328.21875 L0,328.21875 L0,367.28125 C0,371.838542 1.46484375,375.582031 4.39453125,378.511719 C7.32421875,381.441406 11.0677083,382.90625 15.625,382.90625 L15.625,382.90625 L421.875,382.90625 Z'%3E%3C/path%3E%3C/g%3E%3C/svg%3E\");width:11px;height:7px;background-size:cover;background-repeat:no-repeat}.revo-alt-icon{-webkit-mask-image:url(\"data:image/svg+xml,%3C%3Fxml version='1.0' encoding='UTF-8'%3F%3E%3Csvg viewBox='0 0 384 383' xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink'%3E%3Cg%3E%3Cpath d='M192.4375,383 C197.424479,383 201.663411,381.254557 205.154297,377.763672 L205.154297,377.763672 L264.25,318.667969 C270.234375,312.683594 271.605794,306.075846 268.364258,298.844727 C265.122721,291.613607 259.51237,287.998047 251.533203,287.998047 L251.533203,287.998047 L213.382812,287.998047 L213.382812,212.445312 L288.935547,212.445312 L288.935547,250.595703 C288.935547,258.57487 292.551107,264.185221 299.782227,267.426758 C307.013346,270.668294 313.621094,269.296875 319.605469,263.3125 L319.605469,263.3125 L378.701172,204.216797 C382.192057,200.725911 383.9375,196.486979 383.9375,191.5 C383.9375,186.513021 382.192057,182.274089 378.701172,178.783203 L378.701172,178.783203 L319.605469,119.6875 C313.621094,114.201823 307.013346,112.955078 299.782227,115.947266 C292.551107,118.939453 288.935547,124.42513 288.935547,132.404297 L288.935547,132.404297 L288.935547,170.554688 L213.382812,170.554688 L213.382812,95.0019531 L251.533203,95.0019531 C259.51237,95.0019531 264.998047,91.3863932 267.990234,84.1552734 C270.982422,76.9241536 269.735677,70.3164062 264.25,64.3320312 L264.25,64.3320312 L205.154297,5.23632812 C201.663411,1.74544271 197.424479,0 192.4375,0 C187.450521,0 183.211589,1.74544271 179.720703,5.23632812 L179.720703,5.23632812 L120.625,64.3320312 C114.640625,70.3164062 113.269206,76.9241536 116.510742,84.1552734 C119.752279,91.3863932 125.36263,95.0019531 133.341797,95.0019531 L133.341797,95.0019531 L171.492188,95.0019531 L171.492188,170.554688 L95.9394531,170.554688 L95.9394531,132.404297 C95.9394531,124.42513 92.3238932,118.814779 85.0927734,115.573242 C77.8616536,112.331706 71.2539062,113.703125 65.2695312,119.6875 L65.2695312,119.6875 L6.17382812,178.783203 C2.68294271,182.274089 0.9375,186.513021 0.9375,191.5 C0.9375,196.486979 2.68294271,200.725911 6.17382812,204.216797 L6.17382812,204.216797 L65.2695312,263.3125 C71.2539062,268.798177 77.8616536,270.044922 85.0927734,267.052734 C92.3238932,264.060547 95.9394531,258.57487 95.9394531,250.595703 L95.9394531,250.595703 L95.9394531,212.445312 L171.492188,212.445312 L171.492188,287.998047 L133.341797,287.998047 C125.36263,287.998047 119.876953,291.613607 116.884766,298.844727 C113.892578,306.075846 115.139323,312.683594 120.625,318.667969 L120.625,318.667969 L179.720703,377.763672 C183.211589,381.254557 187.450521,383 192.4375,383 Z'%3E%3C/path%3E%3C/g%3E%3C/svg%3E\");mask-image:url(\"data:image/svg+xml,%3C%3Fxml version='1.0' encoding='UTF-8'%3F%3E%3Csvg viewBox='0 0 384 383' xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink'%3E%3Cg%3E%3Cpath d='M192.4375,383 C197.424479,383 201.663411,381.254557 205.154297,377.763672 L205.154297,377.763672 L264.25,318.667969 C270.234375,312.683594 271.605794,306.075846 268.364258,298.844727 C265.122721,291.613607 259.51237,287.998047 251.533203,287.998047 L251.533203,287.998047 L213.382812,287.998047 L213.382812,212.445312 L288.935547,212.445312 L288.935547,250.595703 C288.935547,258.57487 292.551107,264.185221 299.782227,267.426758 C307.013346,270.668294 313.621094,269.296875 319.605469,263.3125 L319.605469,263.3125 L378.701172,204.216797 C382.192057,200.725911 383.9375,196.486979 383.9375,191.5 C383.9375,186.513021 382.192057,182.274089 378.701172,178.783203 L378.701172,178.783203 L319.605469,119.6875 C313.621094,114.201823 307.013346,112.955078 299.782227,115.947266 C292.551107,118.939453 288.935547,124.42513 288.935547,132.404297 L288.935547,132.404297 L288.935547,170.554688 L213.382812,170.554688 L213.382812,95.0019531 L251.533203,95.0019531 C259.51237,95.0019531 264.998047,91.3863932 267.990234,84.1552734 C270.982422,76.9241536 269.735677,70.3164062 264.25,64.3320312 L264.25,64.3320312 L205.154297,5.23632812 C201.663411,1.74544271 197.424479,0 192.4375,0 C187.450521,0 183.211589,1.74544271 179.720703,5.23632812 L179.720703,5.23632812 L120.625,64.3320312 C114.640625,70.3164062 113.269206,76.9241536 116.510742,84.1552734 C119.752279,91.3863932 125.36263,95.0019531 133.341797,95.0019531 L133.341797,95.0019531 L171.492188,95.0019531 L171.492188,170.554688 L95.9394531,170.554688 L95.9394531,132.404297 C95.9394531,124.42513 92.3238932,118.814779 85.0927734,115.573242 C77.8616536,112.331706 71.2539062,113.703125 65.2695312,119.6875 L65.2695312,119.6875 L6.17382812,178.783203 C2.68294271,182.274089 0.9375,186.513021 0.9375,191.5 C0.9375,196.486979 2.68294271,200.725911 6.17382812,204.216797 L6.17382812,204.216797 L65.2695312,263.3125 C71.2539062,268.798177 77.8616536,270.044922 85.0927734,267.052734 C92.3238932,264.060547 95.9394531,258.57487 95.9394531,250.595703 L95.9394531,250.595703 L95.9394531,212.445312 L171.492188,212.445312 L171.492188,287.998047 L133.341797,287.998047 C125.36263,287.998047 119.876953,291.613607 116.884766,298.844727 C113.892578,306.075846 115.139323,312.683594 120.625,318.667969 L120.625,318.667969 L179.720703,377.763672 C183.211589,381.254557 187.450521,383 192.4375,383 Z'%3E%3C/path%3E%3C/g%3E%3C/svg%3E\");width:11px;height:11px;background-size:cover;background-repeat:no-repeat}.arrow-down{position:absolute;right:5px;top:0}.arrow-down svg{width:8px;margin-top:5px;margin-left:5px;opacity:0.4}.cell-value-wrapper{margin-right:10px;overflow:hidden;text-overflow:ellipsis}.revo-button{position:relative;overflow:hidden;color:#fff;background-color:#6200ee;height:34px;line-height:34px;padding:0 15px;outline:0;border:0;border-radius:7px;box-sizing:border-box;cursor:pointer}.revo-button.green{background-color:#2ee072;border:1px solid #20d565}.revo-button.red{background-color:#E0662E;border:1px solid #d55920}.revo-button:disabled,.revo-button[disabled]{cursor:not-allowed !important;filter:opacity(0.35) !important}.revo-button.light{border:2px solid #cedefa;line-height:32px;background:none;color:#4876ca;box-shadow:none}revogr-focus.focused-cell{box-shadow:-1px 0 0 #0d63e8 inset, 1px 0 0 #0d63e8 inset, 0 -1px 0 #0d63e8 inset, 0 1px 0 #0d63e8 inset;position:absolute;pointer-events:none;z-index:9;display:block}";
9
10
 
@@ -12,15 +13,24 @@ const RevogrFocus = /*@__PURE__*/ proxyCustomElement(class extends HTMLElement {
12
13
  super();
13
14
  this.__registerHost();
14
15
  this.beforeFocusRender = createEvent(this, "before-focus-render", 7);
16
+ this.afterFocus = createEvent(this, "afterfocus", 7);
17
+ this.focusTemplate = null;
15
18
  }
16
- changed(e) {
19
+ changed(e, focus) {
17
20
  e === null || e === void 0 ? void 0 : e.scrollIntoView({
18
21
  block: 'nearest',
19
22
  inline: 'nearest',
20
23
  });
24
+ const model = getSourceItem(this.dataStore, focus.y);
25
+ const column = getSourceItem(this.colData, focus.x);
26
+ this.afterFocus.emit({
27
+ model,
28
+ column
29
+ });
21
30
  }
22
31
  componentDidRender() {
23
- this.el && this.changed(this.el);
32
+ const currentFocus = this.selectionStore.get('focus');
33
+ currentFocus && this.el && this.changed(this.el, currentFocus);
24
34
  }
25
35
  render() {
26
36
  const editCell = this.selectionStore.get('edit');
@@ -49,6 +59,8 @@ const RevogrFocus = /*@__PURE__*/ proxyCustomElement(class extends HTMLElement {
49
59
  "selectionStore": [16],
50
60
  "dimensionRow": [16],
51
61
  "dimensionCol": [16],
62
+ "dataStore": [16],
63
+ "colData": [16],
52
64
  "colType": [1, "col-type"],
53
65
  "rowType": [1, "row-type"],
54
66
  "focusTemplate": [16]
@@ -168,8 +168,11 @@ const RevogrViewportScroll = /*@__PURE__*/ proxyCustomElement(class extends HTML
168
168
  mousewheelHorizontal({ detail: e }) {
169
169
  this.horizontalMouseWheel(e);
170
170
  }
171
+ /**
172
+ * Allows to use outside listener
173
+ */
171
174
  scrollApply({ detail: { type, coordinate } }) {
172
- this.applyOnScroll(type, coordinate);
175
+ this.applyOnScroll(type, coordinate, true);
173
176
  }
174
177
  connectedCallback() {
175
178
  /**
@@ -307,12 +310,12 @@ const RevogrViewportScroll = /*@__PURE__*/ proxyCustomElement(class extends HTML
307
310
  }
308
311
  this.applyOnScroll(type, scroll);
309
312
  }
310
- applyOnScroll(type, coordinate) {
313
+ applyOnScroll(type, coordinate, outside = false) {
311
314
  var _a;
312
315
  const change = new Date().getTime() - this.mouseWheelScroll[type];
313
316
  // apply after throttling
314
317
  if (change > this.scrollThrottling) {
315
- (_a = this.scrollService) === null || _a === void 0 ? void 0 : _a.scroll(coordinate, type);
318
+ (_a = this.scrollService) === null || _a === void 0 ? void 0 : _a.scroll(coordinate, type, undefined, undefined, outside);
316
319
  }
317
320
  }
318
321
  /** remember last mw event time */
@@ -31,7 +31,7 @@ const patchEsm = () => {
31
31
  const defineCustomElements = (win, options) => {
32
32
  if (typeof window === 'undefined') return Promise.resolve();
33
33
  return patchEsm().then(() => {
34
- return index.bootstrapLazy([["revogr-clipboard.cjs",[[0,"revogr-clipboard",{"doCopy":[64]},[[4,"paste","onPaste"],[4,"copy","copyStarted"]]]]],["revogr-filter-panel.cjs",[[0,"revogr-filter-panel",{"uuid":[1537],"filterItems":[16],"filterTypes":[16],"filterNames":[16],"filterEntities":[16],"filterCaptions":[16],"disableDynamicFiltering":[4,"disable-dynamic-filtering"],"isFilterIdSet":[32],"filterId":[32],"currentFilterId":[32],"currentFilterType":[32],"changes":[32],"show":[64],"getChanges":[64]},[[5,"mousedown","onMouseDown"]]]]],["revo-grid_11.cjs",[[0,"revo-grid",{"rowHeaders":[4,"row-headers"],"frameSize":[2,"frame-size"],"rowSize":[2,"row-size"],"colSize":[2,"col-size"],"range":[4],"readonly":[4],"resize":[4],"canFocus":[4,"can-focus"],"useClipboard":[4,"use-clipboard"],"columns":[16],"source":[16],"pinnedTopSource":[16],"pinnedBottomSource":[16],"rowDefinitions":[16],"editors":[16],"applyEditorChangesOnClose":[4,"apply-editor-changes-on-close"],"plugins":[16],"columnTypes":[16],"theme":[1537],"rowClass":[513,"row-class"],"autoSizeColumn":[4,"auto-size-column"],"filter":[4],"focusTemplate":[16],"canMoveColumns":[4,"can-move-columns"],"trimmedRows":[16],"exporting":[4],"grouping":[16],"stretch":[8],"extraElements":[32],"refresh":[64],"scrollToRow":[64],"scrollToColumnIndex":[64],"scrollToColumnProp":[64],"updateColumns":[64],"addTrimmed":[64],"scrollToCoordinate":[64],"setCellEdit":[64],"setCellsFocus":[64],"registerVNode":[64],"getSource":[64],"getVisibleSource":[64],"getSourceStore":[64],"getColumnStore":[64],"updateColumnSorting":[64],"clearSorting":[64],"getColumns":[64],"clearFocus":[64],"getPlugins":[64],"getFocused":[64],"getContentSize":[64],"getSelectedRange":[64]},[[0,"internalRowDragStart","onRowDragStarted"],[0,"internalRowDragEnd","onRowDragEnd"],[0,"internalRowDrag","onRowDrag"],[0,"internalRowMouseMove","onRowMouseMove"],[0,"internalCellEdit","onBeforeEdit"],[0,"internalRangeDataApply","onBeforeRangeEdit"],[0,"internalSelectionChanged","onRangeChanged"],[0,"initialRowDropped","onRowDropped"],[0,"initialHeaderClick","onHeaderClick"],[0,"beforeFocusCell","onCellFocus"]]],[0,"revogr-row-headers",{"height":[2],"dataPorts":[16],"headerProp":[16],"uiid":[1],"rowClass":[1,"row-class"],"resize":[4],"rowHeaderColumn":[16]}],[4,"revogr-overlay-selection",{"readonly":[4],"range":[4],"canDrag":[4,"can-drag"],"useClipboard":[4,"use-clipboard"],"selectionStore":[16],"dimensionRow":[16],"dimensionCol":[16],"dataStore":[16],"colData":[16],"lastCell":[16],"editors":[16],"applyChangesOnClose":[4,"apply-changes-on-close"]},[[5,"mousemove","onMouseMove"],[5,"mouseleave","onMouseOut"],[5,"mouseup","onMouseUp"],[0,"dragStartCell","onCellDrag"],[4,"keyup","onKeyUp"],[4,"keydown","onKeyDown"]]],[0,"revogr-focus",{"selectionStore":[16],"dimensionRow":[16],"dimensionCol":[16],"colType":[1,"col-type"],"rowType":[1,"row-type"],"focusTemplate":[16]}],[0,"revogr-scroll-virtual",{"dimension":[1],"viewportStore":[16],"dimensionStore":[16],"setScroll":[64],"changeScroll":[64]}],[0,"revogr-temp-range",{"selectionStore":[16],"dimensionRow":[16],"dimensionCol":[16]}],[0,"revogr-data",{"readonly":[4],"range":[4],"rowClass":[1,"row-class"],"rowSelectionStore":[16],"viewportRow":[16],"viewportCol":[16],"dimensionRow":[16],"colData":[16],"dataStore":[16],"type":[1]}],[0,"revogr-edit",{"editCell":[16],"column":[16],"editor":[16],"saveOnClose":[4,"save-on-close"],"cancel":[64]}],[0,"revogr-header",{"viewportCol":[16],"dimensionCol":[16],"selectionStore":[16],"parent":[1],"groups":[16],"groupingDepth":[2,"grouping-depth"],"canResize":[4,"can-resize"],"colData":[16],"columnFilter":[4,"column-filter"],"type":[1]}],[0,"revogr-order-editor",{"parent":[16],"dimensionRow":[16],"dimensionCol":[16],"dataStore":[16],"dragStart":[64],"endOrder":[64],"clearOrder":[64]},[[5,"mouseleave","onMouseOut"],[5,"mouseup","onMouseUp"]]],[4,"revogr-viewport-scroll",{"contentWidth":[2,"content-width"],"contentHeight":[2,"content-height"],"setScroll":[64],"changeScroll":[64]},[[0,"mousewheel-vertical","mousewheelVertical"],[0,"mousewheel-horizontal","mousewheelHorizontal"],[0,"scroll-coordinate","scrollApply"]]]]]], options);
34
+ return index.bootstrapLazy([["revogr-clipboard.cjs",[[0,"revogr-clipboard",{"doCopy":[64]},[[4,"paste","onPaste"],[4,"copy","copyStarted"]]]]],["revogr-filter-panel.cjs",[[0,"revogr-filter-panel",{"uuid":[1537],"filterItems":[16],"filterTypes":[16],"filterNames":[16],"filterEntities":[16],"filterCaptions":[16],"disableDynamicFiltering":[4,"disable-dynamic-filtering"],"isFilterIdSet":[32],"filterId":[32],"currentFilterId":[32],"currentFilterType":[32],"changes":[32],"show":[64],"getChanges":[64]},[[5,"mousedown","onMouseDown"]]]]],["revo-grid_11.cjs",[[0,"revo-grid",{"rowHeaders":[4,"row-headers"],"frameSize":[2,"frame-size"],"rowSize":[2,"row-size"],"colSize":[2,"col-size"],"range":[4],"readonly":[4],"resize":[4],"canFocus":[4,"can-focus"],"useClipboard":[4,"use-clipboard"],"columns":[16],"source":[16],"pinnedTopSource":[16],"pinnedBottomSource":[16],"rowDefinitions":[16],"editors":[16],"applyEditorChangesOnClose":[4,"apply-editor-changes-on-close"],"plugins":[16],"columnTypes":[16],"theme":[1537],"rowClass":[513,"row-class"],"autoSizeColumn":[4,"auto-size-column"],"filter":[4],"focusTemplate":[16],"canMoveColumns":[4,"can-move-columns"],"trimmedRows":[16],"exporting":[4],"grouping":[16],"stretch":[8],"extraElements":[32],"refresh":[64],"scrollToRow":[64],"scrollToColumnIndex":[64],"scrollToColumnProp":[64],"updateColumns":[64],"addTrimmed":[64],"scrollToCoordinate":[64],"setCellEdit":[64],"setCellsFocus":[64],"registerVNode":[64],"getSource":[64],"getVisibleSource":[64],"getSourceStore":[64],"getColumnStore":[64],"updateColumnSorting":[64],"clearSorting":[64],"getColumns":[64],"clearFocus":[64],"getPlugins":[64],"getFocused":[64],"getContentSize":[64],"getSelectedRange":[64]},[[5,"mousedown","mousedownHandle"],[5,"mouseup","mouseupHandle"],[0,"internalRowDragStart","onRowDragStarted"],[0,"internalRowDragEnd","onRowDragEnd"],[0,"internalRowDrag","onRowDrag"],[0,"internalRowMouseMove","onRowMouseMove"],[0,"internalCellEdit","onBeforeEdit"],[0,"internalRangeDataApply","onBeforeRangeEdit"],[0,"internalSelectionChanged","onRangeChanged"],[0,"initialRowDropped","onRowDropped"],[0,"initialHeaderClick","onHeaderClick"],[0,"beforeFocusCell","onCellFocus"]]],[0,"revogr-row-headers",{"height":[2],"dataPorts":[16],"headerProp":[16],"uiid":[1],"rowClass":[1,"row-class"],"resize":[4],"rowHeaderColumn":[16]}],[4,"revogr-overlay-selection",{"readonly":[4],"range":[4],"canDrag":[4,"can-drag"],"useClipboard":[4,"use-clipboard"],"selectionStore":[16],"dimensionRow":[16],"dimensionCol":[16],"dataStore":[16],"colData":[16],"lastCell":[16],"editors":[16],"applyChangesOnClose":[4,"apply-changes-on-close"]},[[5,"mousemove","onMouseMove"],[5,"mouseleave","onMouseOut"],[5,"mouseup","onMouseUp"],[0,"dragStartCell","onCellDrag"],[4,"keyup","onKeyUp"],[4,"keydown","onKeyDown"]]],[0,"revogr-focus",{"selectionStore":[16],"dimensionRow":[16],"dimensionCol":[16],"dataStore":[16],"colData":[16],"colType":[1,"col-type"],"rowType":[1,"row-type"],"focusTemplate":[16]}],[0,"revogr-scroll-virtual",{"dimension":[1],"viewportStore":[16],"dimensionStore":[16],"setScroll":[64],"changeScroll":[64]}],[0,"revogr-temp-range",{"selectionStore":[16],"dimensionRow":[16],"dimensionCol":[16]}],[0,"revogr-data",{"readonly":[4],"range":[4],"rowClass":[1,"row-class"],"rowSelectionStore":[16],"viewportRow":[16],"viewportCol":[16],"dimensionRow":[16],"colData":[16],"dataStore":[16],"type":[1]}],[0,"revogr-edit",{"editCell":[16],"column":[16],"editor":[16],"saveOnClose":[4,"save-on-close"],"cancel":[64]}],[0,"revogr-header",{"viewportCol":[16],"dimensionCol":[16],"selectionStore":[16],"parent":[1],"groups":[16],"groupingDepth":[2,"grouping-depth"],"canResize":[4,"can-resize"],"colData":[16],"columnFilter":[4,"column-filter"],"type":[1]}],[0,"revogr-order-editor",{"parent":[16],"dimensionRow":[16],"dimensionCol":[16],"dataStore":[16],"dragStart":[64],"endOrder":[64],"clearOrder":[64]},[[5,"mouseleave","onMouseOut"],[5,"mouseup","onMouseUp"]]],[4,"revogr-viewport-scroll",{"contentWidth":[2,"content-width"],"contentHeight":[2,"content-height"],"setScroll":[64],"changeScroll":[64]},[[0,"mousewheel-vertical","mousewheelVertical"],[0,"mousewheel-horizontal","mousewheelHorizontal"],[0,"scroll-coordinate","scrollApply"]]]]]], options);
35
35
  });
36
36
  };
37
37
 
@@ -75,5 +75,5 @@ const patchDynamicImport = (base, orgScriptElm) => {
75
75
  };
76
76
 
77
77
  patchBrowser().then(options => {
78
- return index.bootstrapLazy([["revogr-clipboard.cjs",[[0,"revogr-clipboard",{"doCopy":[64]},[[4,"paste","onPaste"],[4,"copy","copyStarted"]]]]],["revogr-filter-panel.cjs",[[0,"revogr-filter-panel",{"uuid":[1537],"filterItems":[16],"filterTypes":[16],"filterNames":[16],"filterEntities":[16],"filterCaptions":[16],"disableDynamicFiltering":[4,"disable-dynamic-filtering"],"isFilterIdSet":[32],"filterId":[32],"currentFilterId":[32],"currentFilterType":[32],"changes":[32],"show":[64],"getChanges":[64]},[[5,"mousedown","onMouseDown"]]]]],["revo-grid_11.cjs",[[0,"revo-grid",{"rowHeaders":[4,"row-headers"],"frameSize":[2,"frame-size"],"rowSize":[2,"row-size"],"colSize":[2,"col-size"],"range":[4],"readonly":[4],"resize":[4],"canFocus":[4,"can-focus"],"useClipboard":[4,"use-clipboard"],"columns":[16],"source":[16],"pinnedTopSource":[16],"pinnedBottomSource":[16],"rowDefinitions":[16],"editors":[16],"applyEditorChangesOnClose":[4,"apply-editor-changes-on-close"],"plugins":[16],"columnTypes":[16],"theme":[1537],"rowClass":[513,"row-class"],"autoSizeColumn":[4,"auto-size-column"],"filter":[4],"focusTemplate":[16],"canMoveColumns":[4,"can-move-columns"],"trimmedRows":[16],"exporting":[4],"grouping":[16],"stretch":[8],"extraElements":[32],"refresh":[64],"scrollToRow":[64],"scrollToColumnIndex":[64],"scrollToColumnProp":[64],"updateColumns":[64],"addTrimmed":[64],"scrollToCoordinate":[64],"setCellEdit":[64],"setCellsFocus":[64],"registerVNode":[64],"getSource":[64],"getVisibleSource":[64],"getSourceStore":[64],"getColumnStore":[64],"updateColumnSorting":[64],"clearSorting":[64],"getColumns":[64],"clearFocus":[64],"getPlugins":[64],"getFocused":[64],"getContentSize":[64],"getSelectedRange":[64]},[[0,"internalRowDragStart","onRowDragStarted"],[0,"internalRowDragEnd","onRowDragEnd"],[0,"internalRowDrag","onRowDrag"],[0,"internalRowMouseMove","onRowMouseMove"],[0,"internalCellEdit","onBeforeEdit"],[0,"internalRangeDataApply","onBeforeRangeEdit"],[0,"internalSelectionChanged","onRangeChanged"],[0,"initialRowDropped","onRowDropped"],[0,"initialHeaderClick","onHeaderClick"],[0,"beforeFocusCell","onCellFocus"]]],[0,"revogr-row-headers",{"height":[2],"dataPorts":[16],"headerProp":[16],"uiid":[1],"rowClass":[1,"row-class"],"resize":[4],"rowHeaderColumn":[16]}],[4,"revogr-overlay-selection",{"readonly":[4],"range":[4],"canDrag":[4,"can-drag"],"useClipboard":[4,"use-clipboard"],"selectionStore":[16],"dimensionRow":[16],"dimensionCol":[16],"dataStore":[16],"colData":[16],"lastCell":[16],"editors":[16],"applyChangesOnClose":[4,"apply-changes-on-close"]},[[5,"mousemove","onMouseMove"],[5,"mouseleave","onMouseOut"],[5,"mouseup","onMouseUp"],[0,"dragStartCell","onCellDrag"],[4,"keyup","onKeyUp"],[4,"keydown","onKeyDown"]]],[0,"revogr-focus",{"selectionStore":[16],"dimensionRow":[16],"dimensionCol":[16],"colType":[1,"col-type"],"rowType":[1,"row-type"],"focusTemplate":[16]}],[0,"revogr-scroll-virtual",{"dimension":[1],"viewportStore":[16],"dimensionStore":[16],"setScroll":[64],"changeScroll":[64]}],[0,"revogr-temp-range",{"selectionStore":[16],"dimensionRow":[16],"dimensionCol":[16]}],[0,"revogr-data",{"readonly":[4],"range":[4],"rowClass":[1,"row-class"],"rowSelectionStore":[16],"viewportRow":[16],"viewportCol":[16],"dimensionRow":[16],"colData":[16],"dataStore":[16],"type":[1]}],[0,"revogr-edit",{"editCell":[16],"column":[16],"editor":[16],"saveOnClose":[4,"save-on-close"],"cancel":[64]}],[0,"revogr-header",{"viewportCol":[16],"dimensionCol":[16],"selectionStore":[16],"parent":[1],"groups":[16],"groupingDepth":[2,"grouping-depth"],"canResize":[4,"can-resize"],"colData":[16],"columnFilter":[4,"column-filter"],"type":[1]}],[0,"revogr-order-editor",{"parent":[16],"dimensionRow":[16],"dimensionCol":[16],"dataStore":[16],"dragStart":[64],"endOrder":[64],"clearOrder":[64]},[[5,"mouseleave","onMouseOut"],[5,"mouseup","onMouseUp"]]],[4,"revogr-viewport-scroll",{"contentWidth":[2,"content-width"],"contentHeight":[2,"content-height"],"setScroll":[64],"changeScroll":[64]},[[0,"mousewheel-vertical","mousewheelVertical"],[0,"mousewheel-horizontal","mousewheelHorizontal"],[0,"scroll-coordinate","scrollApply"]]]]]], options);
78
+ return index.bootstrapLazy([["revogr-clipboard.cjs",[[0,"revogr-clipboard",{"doCopy":[64]},[[4,"paste","onPaste"],[4,"copy","copyStarted"]]]]],["revogr-filter-panel.cjs",[[0,"revogr-filter-panel",{"uuid":[1537],"filterItems":[16],"filterTypes":[16],"filterNames":[16],"filterEntities":[16],"filterCaptions":[16],"disableDynamicFiltering":[4,"disable-dynamic-filtering"],"isFilterIdSet":[32],"filterId":[32],"currentFilterId":[32],"currentFilterType":[32],"changes":[32],"show":[64],"getChanges":[64]},[[5,"mousedown","onMouseDown"]]]]],["revo-grid_11.cjs",[[0,"revo-grid",{"rowHeaders":[4,"row-headers"],"frameSize":[2,"frame-size"],"rowSize":[2,"row-size"],"colSize":[2,"col-size"],"range":[4],"readonly":[4],"resize":[4],"canFocus":[4,"can-focus"],"useClipboard":[4,"use-clipboard"],"columns":[16],"source":[16],"pinnedTopSource":[16],"pinnedBottomSource":[16],"rowDefinitions":[16],"editors":[16],"applyEditorChangesOnClose":[4,"apply-editor-changes-on-close"],"plugins":[16],"columnTypes":[16],"theme":[1537],"rowClass":[513,"row-class"],"autoSizeColumn":[4,"auto-size-column"],"filter":[4],"focusTemplate":[16],"canMoveColumns":[4,"can-move-columns"],"trimmedRows":[16],"exporting":[4],"grouping":[16],"stretch":[8],"extraElements":[32],"refresh":[64],"scrollToRow":[64],"scrollToColumnIndex":[64],"scrollToColumnProp":[64],"updateColumns":[64],"addTrimmed":[64],"scrollToCoordinate":[64],"setCellEdit":[64],"setCellsFocus":[64],"registerVNode":[64],"getSource":[64],"getVisibleSource":[64],"getSourceStore":[64],"getColumnStore":[64],"updateColumnSorting":[64],"clearSorting":[64],"getColumns":[64],"clearFocus":[64],"getPlugins":[64],"getFocused":[64],"getContentSize":[64],"getSelectedRange":[64]},[[5,"mousedown","mousedownHandle"],[5,"mouseup","mouseupHandle"],[0,"internalRowDragStart","onRowDragStarted"],[0,"internalRowDragEnd","onRowDragEnd"],[0,"internalRowDrag","onRowDrag"],[0,"internalRowMouseMove","onRowMouseMove"],[0,"internalCellEdit","onBeforeEdit"],[0,"internalRangeDataApply","onBeforeRangeEdit"],[0,"internalSelectionChanged","onRangeChanged"],[0,"initialRowDropped","onRowDropped"],[0,"initialHeaderClick","onHeaderClick"],[0,"beforeFocusCell","onCellFocus"]]],[0,"revogr-row-headers",{"height":[2],"dataPorts":[16],"headerProp":[16],"uiid":[1],"rowClass":[1,"row-class"],"resize":[4],"rowHeaderColumn":[16]}],[4,"revogr-overlay-selection",{"readonly":[4],"range":[4],"canDrag":[4,"can-drag"],"useClipboard":[4,"use-clipboard"],"selectionStore":[16],"dimensionRow":[16],"dimensionCol":[16],"dataStore":[16],"colData":[16],"lastCell":[16],"editors":[16],"applyChangesOnClose":[4,"apply-changes-on-close"]},[[5,"mousemove","onMouseMove"],[5,"mouseleave","onMouseOut"],[5,"mouseup","onMouseUp"],[0,"dragStartCell","onCellDrag"],[4,"keyup","onKeyUp"],[4,"keydown","onKeyDown"]]],[0,"revogr-focus",{"selectionStore":[16],"dimensionRow":[16],"dimensionCol":[16],"dataStore":[16],"colData":[16],"colType":[1,"col-type"],"rowType":[1,"row-type"],"focusTemplate":[16]}],[0,"revogr-scroll-virtual",{"dimension":[1],"viewportStore":[16],"dimensionStore":[16],"setScroll":[64],"changeScroll":[64]}],[0,"revogr-temp-range",{"selectionStore":[16],"dimensionRow":[16],"dimensionCol":[16]}],[0,"revogr-data",{"readonly":[4],"range":[4],"rowClass":[1,"row-class"],"rowSelectionStore":[16],"viewportRow":[16],"viewportCol":[16],"dimensionRow":[16],"colData":[16],"dataStore":[16],"type":[1]}],[0,"revogr-edit",{"editCell":[16],"column":[16],"editor":[16],"saveOnClose":[4,"save-on-close"],"cancel":[64]}],[0,"revogr-header",{"viewportCol":[16],"dimensionCol":[16],"selectionStore":[16],"parent":[1],"groups":[16],"groupingDepth":[2,"grouping-depth"],"canResize":[4,"can-resize"],"colData":[16],"columnFilter":[4,"column-filter"],"type":[1]}],[0,"revogr-order-editor",{"parent":[16],"dimensionRow":[16],"dimensionCol":[16],"dataStore":[16],"dragStart":[64],"endOrder":[64],"clearOrder":[64]},[[5,"mouseleave","onMouseOut"],[5,"mouseup","onMouseUp"]]],[4,"revogr-viewport-scroll",{"contentWidth":[2,"content-width"],"contentHeight":[2,"content-height"],"setScroll":[64],"changeScroll":[64]},[[0,"mousewheel-vertical","mousewheelVertical"],[0,"mousewheel-horizontal","mousewheelHorizontal"],[0,"scroll-coordinate","scrollApply"]]]]]], options);
79
79
  });
@@ -24686,7 +24686,7 @@ const ViewPortSections = ({ resize, editors, rowClass, readonly, range, columns,
24686
24686
  const dataView = (index.h("revogr-overlay-selection", Object.assign({}, data, { slot: data.slot, selectionStore: data.segmentSelectionStore, editors: editors, readonly: readonly, range: range, useClipboard: useClipboard, applyChangesOnClose: applyEditorChangesOnClose, onSetEdit: ({ detail }) => onEdit(detail) }),
24687
24687
  index.h("revogr-data", Object.assign({}, data, { [UUID]: data.uuid }, { key: key, readonly: readonly, range: range, rowClass: rowClass, rowSelectionStore: data.rowSelectionStore, slot: DATA_SLOT })),
24688
24688
  index.h("revogr-temp-range", { selectionStore: data.segmentSelectionStore, dimensionRow: data.dimensionRow, dimensionCol: data.dimensionCol }),
24689
- index.h("revogr-focus", { focusTemplate: focusTemplate, rowType: data.type, colType: view.type, selectionStore: data.segmentSelectionStore, dimensionRow: data.dimensionRow, dimensionCol: data.dimensionCol })));
24689
+ index.h("revogr-focus", { colData: data.colData, dataStore: data.dataStore, focusTemplate: focusTemplate, rowType: data.type, colType: view.type, selectionStore: data.segmentSelectionStore, dimensionRow: data.dimensionRow, dimensionCol: data.dimensionCol })));
24690
24690
  dataViews.push(dataView);
24691
24691
  });
24692
24692
  viewPortHtml.push(index.h("revogr-viewport-scroll", Object.assign({}, view.prop, { ref: el => registerElement(el, view.prop.key), onScrollViewport: e => onScroll(e.detail, view.prop.key) }), dataViews));
@@ -25111,6 +25111,7 @@ const RevoGridComponent = class {
25111
25111
  this.afteredit = index.createEvent(this, "afteredit", 7);
25112
25112
  this.beforeautofill = index.createEvent(this, "beforeautofill", 7);
25113
25113
  this.beforeange = index.createEvent(this, "beforeange", 7);
25114
+ this.afterfocus = index.createEvent(this, "afterfocus", 7);
25114
25115
  this.roworderchanged = index.createEvent(this, "roworderchanged", 7);
25115
25116
  this.beforesourcesortingapply = index.createEvent(this, "beforesourcesortingapply", 7);
25116
25117
  this.beforesortingapply = index.createEvent(this, "beforesortingapply", 7);
@@ -25232,6 +25233,12 @@ const RevoGridComponent = class {
25232
25233
  this.stretch = true;
25233
25234
  // --------------------------------------------------------------------------
25234
25235
  //
25236
+ // Listeners outside scope
25237
+ //
25238
+ // --------------------------------------------------------------------------
25239
+ this.clickTrackForFocusClear = null;
25240
+ // --------------------------------------------------------------------------
25241
+ //
25235
25242
  // Private Properties
25236
25243
  //
25237
25244
  // --------------------------------------------------------------------------
@@ -25244,7 +25251,6 @@ const RevoGridComponent = class {
25244
25251
  * Define plugins collection
25245
25252
  */
25246
25253
  this.internalPlugins = [];
25247
- this.subscribers = {};
25248
25254
  }
25249
25255
  // --------------------------------------------------------------------------
25250
25256
  //
@@ -25421,15 +25427,19 @@ const RevoGridComponent = class {
25421
25427
  var _a;
25422
25428
  return (_a = this.viewport) === null || _a === void 0 ? void 0 : _a.getSelectedRange();
25423
25429
  }
25424
- // --------------------------------------------------------------------------
25425
- //
25426
- // Listeners outside scope
25427
- //
25428
- // --------------------------------------------------------------------------
25429
- /** Clear data which is outside of grid container */
25430
- handleOutsideClick(e) {
25430
+ mousedownHandle(e) {
25431
+ this.clickTrackForFocusClear = e.screenX + e.screenY;
25432
+ }
25433
+ mouseupHandle(e) {
25431
25434
  const target = e.target;
25432
- // if event prevented or it is a table where we click at
25435
+ const pos = e.screenX + e.screenY;
25436
+ // detect if mousemove then do nothing
25437
+ if (Math.abs(this.clickTrackForFocusClear - pos) > 10) {
25438
+ return;
25439
+ }
25440
+ // check if action finished inside of the document
25441
+ // clear data which is outside of grid
25442
+ // if event prevented or it is current table don't clear focus
25433
25443
  if (e.defaultPrevented || (target === null || target === void 0 ? void 0 : target.closest(`[${UUID}="${this.uuid}"]`))) {
25434
25444
  return;
25435
25445
  }
@@ -25704,20 +25714,11 @@ const RevoGridComponent = class {
25704
25714
  });
25705
25715
  this.viewportscroll.emit(e);
25706
25716
  });
25707
- this.subscribers = { mouseup: this.handleOutsideClick.bind(this) };
25708
- for (let type in this.subscribers) {
25709
- document.addEventListener(type, this.subscribers[type]);
25710
- }
25711
25717
  }
25712
25718
  disconnectedCallback() {
25713
25719
  // destroy plugins on element disconnect
25714
25720
  each(this.internalPlugins, p => p.destroy());
25715
25721
  this.internalPlugins = [];
25716
- // clear events
25717
- for (let type in this.subscribers) {
25718
- document.removeEventListener(type, this.subscribers[type]);
25719
- delete this.subscribers[type];
25720
- }
25721
25722
  }
25722
25723
  render() {
25723
25724
  const contentHeight = this.dimensionProvider.stores['rgRow'].store.get('realSize');
@@ -26701,15 +26702,24 @@ const RevogrFocus$1 = class {
26701
26702
  constructor(hostRef) {
26702
26703
  index.registerInstance(this, hostRef);
26703
26704
  this.beforeFocusRender = index.createEvent(this, "before-focus-render", 7);
26705
+ this.afterFocus = index.createEvent(this, "afterfocus", 7);
26706
+ this.focusTemplate = null;
26704
26707
  }
26705
- changed(e) {
26708
+ changed(e, focus) {
26706
26709
  e === null || e === void 0 ? void 0 : e.scrollIntoView({
26707
26710
  block: 'nearest',
26708
26711
  inline: 'nearest',
26709
26712
  });
26713
+ const model = getSourceItem(this.dataStore, focus.y);
26714
+ const column = getSourceItem(this.colData, focus.x);
26715
+ this.afterFocus.emit({
26716
+ model,
26717
+ column
26718
+ });
26710
26719
  }
26711
26720
  componentDidRender() {
26712
- this.el && this.changed(this.el);
26721
+ const currentFocus = this.selectionStore.get('focus');
26722
+ currentFocus && this.el && this.changed(this.el, currentFocus);
26713
26723
  }
26714
26724
  render() {
26715
26725
  const editCell = this.selectionStore.get('edit');
@@ -28267,7 +28277,7 @@ class LocalScrollService {
28267
28277
  }
28268
28278
  }
28269
28279
  // initiate scrolling event
28270
- scroll(coordinate, dimension, force = false, delta) {
28280
+ scroll(coordinate, dimension, force = false, delta, outside = false) {
28271
28281
  this.cancelScroll(dimension);
28272
28282
  if (!force && this.previousScroll[dimension] === coordinate) {
28273
28283
  this.previousScroll[dimension] = NO_COORDINATE;
@@ -28278,6 +28288,7 @@ class LocalScrollService {
28278
28288
  dimension: dimension,
28279
28289
  coordinate: param.virtualSize ? this.convert(coordinate, param) : coordinate,
28280
28290
  delta,
28291
+ outside
28281
28292
  });
28282
28293
  }
28283
28294
  getParams(dimension) {
@@ -28624,8 +28635,11 @@ const RevogrViewportScroll = class {
28624
28635
  mousewheelHorizontal({ detail: e }) {
28625
28636
  this.horizontalMouseWheel(e);
28626
28637
  }
28638
+ /**
28639
+ * Allows to use outside listener
28640
+ */
28627
28641
  scrollApply({ detail: { type, coordinate } }) {
28628
- this.applyOnScroll(type, coordinate);
28642
+ this.applyOnScroll(type, coordinate, true);
28629
28643
  }
28630
28644
  connectedCallback() {
28631
28645
  /**
@@ -28763,12 +28777,12 @@ const RevogrViewportScroll = class {
28763
28777
  }
28764
28778
  this.applyOnScroll(type, scroll);
28765
28779
  }
28766
- applyOnScroll(type, coordinate) {
28780
+ applyOnScroll(type, coordinate, outside = false) {
28767
28781
  var _a;
28768
28782
  const change = new Date().getTime() - this.mouseWheelScroll[type];
28769
28783
  // apply after throttling
28770
28784
  if (change > this.scrollThrottling) {
28771
- (_a = this.scrollService) === null || _a === void 0 ? void 0 : _a.scroll(coordinate, type);
28785
+ (_a = this.scrollService) === null || _a === void 0 ? void 0 : _a.scroll(coordinate, type, undefined, undefined, outside);
28772
28786
  }
28773
28787
  }
28774
28788
  /** remember last mw event time */
@@ -164,6 +164,14 @@ export declare class RevoGridComponent {
164
164
  * Use e.preventDefault() to prevent range.
165
165
  */
166
166
  beforeange: EventEmitter<Selection.ChangedRange>;
167
+ /**
168
+ * Triggered after focus render finished.
169
+ * Can be used to access a focus element through @event.target
170
+ */
171
+ afterfocus: EventEmitter<{
172
+ model: any;
173
+ column: RevoGrid.ColumnRegular;
174
+ }>;
167
175
  /**
168
176
  * Before rgRow order apply.
169
177
  * Use e.preventDefault() to prevent rgRow order change.
@@ -397,8 +405,9 @@ export declare class RevoGridComponent {
397
405
  * Get the currently selected Range.
398
406
  */
399
407
  getSelectedRange(): Promise<Selection.RangeArea | null>;
400
- /** Clear data which is outside of grid container */
401
- private handleOutsideClick;
408
+ private clickTrackForFocusClear;
409
+ mousedownHandle(e: MouseEvent): void;
410
+ mouseupHandle(e: MouseEvent): void;
402
411
  /** DRAG AND DROP */
403
412
  onRowDragStarted(e: CustomEvent<{
404
413
  pos: RevoGrid.PositionItem;
@@ -433,7 +442,6 @@ export declare class RevoGridComponent {
433
442
  * Define plugins collection
434
443
  */
435
444
  private internalPlugins;
436
- private subscribers;
437
445
  element: HTMLRevoGridElement;
438
446
  columnChanged(newVal?: RevoGrid.ColumnDataSchema[]): void;
439
447
  themeChanged(t: ThemeSpace.Theme): void;
@@ -123,6 +123,12 @@ export class RevoGridComponent {
123
123
  this.stretch = true;
124
124
  // --------------------------------------------------------------------------
125
125
  //
126
+ // Listeners outside scope
127
+ //
128
+ // --------------------------------------------------------------------------
129
+ this.clickTrackForFocusClear = null;
130
+ // --------------------------------------------------------------------------
131
+ //
126
132
  // Private Properties
127
133
  //
128
134
  // --------------------------------------------------------------------------
@@ -135,7 +141,6 @@ export class RevoGridComponent {
135
141
  * Define plugins collection
136
142
  */
137
143
  this.internalPlugins = [];
138
- this.subscribers = {};
139
144
  }
140
145
  // --------------------------------------------------------------------------
141
146
  //
@@ -312,15 +317,19 @@ export class RevoGridComponent {
312
317
  var _a;
313
318
  return (_a = this.viewport) === null || _a === void 0 ? void 0 : _a.getSelectedRange();
314
319
  }
315
- // --------------------------------------------------------------------------
316
- //
317
- // Listeners outside scope
318
- //
319
- // --------------------------------------------------------------------------
320
- /** Clear data which is outside of grid container */
321
- handleOutsideClick(e) {
320
+ mousedownHandle(e) {
321
+ this.clickTrackForFocusClear = e.screenX + e.screenY;
322
+ }
323
+ mouseupHandle(e) {
322
324
  const target = e.target;
323
- // if event prevented or it is a table where we click at
325
+ const pos = e.screenX + e.screenY;
326
+ // detect if mousemove then do nothing
327
+ if (Math.abs(this.clickTrackForFocusClear - pos) > 10) {
328
+ return;
329
+ }
330
+ // check if action finished inside of the document
331
+ // clear data which is outside of grid
332
+ // if event prevented or it is current table don't clear focus
324
333
  if (e.defaultPrevented || (target === null || target === void 0 ? void 0 : target.closest(`[${UUID}="${this.uuid}"]`))) {
325
334
  return;
326
335
  }
@@ -595,20 +604,11 @@ export class RevoGridComponent {
595
604
  });
596
605
  this.viewportscroll.emit(e);
597
606
  });
598
- this.subscribers = { mouseup: this.handleOutsideClick.bind(this) };
599
- for (let type in this.subscribers) {
600
- document.addEventListener(type, this.subscribers[type]);
601
- }
602
607
  }
603
608
  disconnectedCallback() {
604
609
  // destroy plugins on element disconnect
605
610
  each(this.internalPlugins, p => p.destroy());
606
611
  this.internalPlugins = [];
607
- // clear events
608
- for (let type in this.subscribers) {
609
- document.removeEventListener(type, this.subscribers[type]);
610
- delete this.subscribers[type];
611
- }
612
612
  }
613
613
  render() {
614
614
  const contentHeight = this.dimensionProvider.stores['rgRow'].store.get('realSize');
@@ -1325,6 +1325,26 @@ export class RevoGridComponent {
1325
1325
  }
1326
1326
  }
1327
1327
  }
1328
+ }, {
1329
+ "method": "afterfocus",
1330
+ "name": "afterfocus",
1331
+ "bubbles": true,
1332
+ "cancelable": true,
1333
+ "composed": true,
1334
+ "docs": {
1335
+ "tags": [],
1336
+ "text": "Triggered after focus render finished.\nCan be used to access a focus element through @event.target"
1337
+ },
1338
+ "complexType": {
1339
+ "original": "{ model: any; column: RevoGrid.ColumnRegular; }",
1340
+ "resolved": "{ model: any; column: ColumnRegular; }",
1341
+ "references": {
1342
+ "RevoGrid": {
1343
+ "location": "import",
1344
+ "path": "../../interfaces"
1345
+ }
1346
+ }
1347
+ }
1328
1348
  }, {
1329
1349
  "method": "roworderchanged",
1330
1350
  "name": "roworderchanged",
@@ -1691,7 +1711,7 @@ export class RevoGridComponent {
1691
1711
  },
1692
1712
  "complexType": {
1693
1713
  "original": "RevoGrid.ViewPortScrollEvent",
1694
- "resolved": "{ dimension: DimensionType; coordinate: number; delta?: number; }",
1714
+ "resolved": "{ dimension: DimensionType; coordinate: number; delta?: number; outside?: boolean; }",
1695
1715
  "references": {
1696
1716
  "RevoGrid": {
1697
1717
  "location": "import",
@@ -2395,6 +2415,18 @@ export class RevoGridComponent {
2395
2415
  "methodName": "rowHeadersChange"
2396
2416
  }]; }
2397
2417
  static get listeners() { return [{
2418
+ "name": "mousedown",
2419
+ "method": "mousedownHandle",
2420
+ "target": "document",
2421
+ "capture": false,
2422
+ "passive": true
2423
+ }, {
2424
+ "name": "mouseup",
2425
+ "method": "mouseupHandle",
2426
+ "target": "document",
2427
+ "capture": false,
2428
+ "passive": true
2429
+ }, {
2398
2430
  "name": "internalRowDragStart",
2399
2431
  "method": "onRowDragStarted",
2400
2432
  "target": undefined,
@@ -21,7 +21,7 @@ export const ViewPortSections = ({ resize, editors, rowClass, readonly, range, c
21
21
  const dataView = (h("revogr-overlay-selection", Object.assign({}, data, { slot: data.slot, selectionStore: data.segmentSelectionStore, editors: editors, readonly: readonly, range: range, useClipboard: useClipboard, applyChangesOnClose: applyEditorChangesOnClose, onSetEdit: ({ detail }) => onEdit(detail) }),
22
22
  h("revogr-data", Object.assign({}, data, { [UUID]: data.uuid }, { key: key, readonly: readonly, range: range, rowClass: rowClass, rowSelectionStore: data.rowSelectionStore, slot: DATA_SLOT })),
23
23
  h("revogr-temp-range", { selectionStore: data.segmentSelectionStore, dimensionRow: data.dimensionRow, dimensionCol: data.dimensionCol }),
24
- h("revogr-focus", { focusTemplate: focusTemplate, rowType: data.type, colType: view.type, selectionStore: data.segmentSelectionStore, dimensionRow: data.dimensionRow, dimensionCol: data.dimensionCol })));
24
+ h("revogr-focus", { colData: data.colData, dataStore: data.dataStore, focusTemplate: focusTemplate, rowType: data.type, colType: view.type, selectionStore: data.segmentSelectionStore, dimensionRow: data.dimensionRow, dimensionCol: data.dimensionCol })));
25
25
  dataViews.push(dataView);
26
26
  });
27
27
  viewPortHtml.push(h("revogr-viewport-scroll", Object.assign({}, view.prop, { ref: el => registerElement(el, view.prop.key), onScrollViewport: e => onScroll(e.detail, view.prop.key) }), dataViews));
@@ -202,7 +202,7 @@ export class RevogrRowHeaders {
202
202
  },
203
203
  "complexType": {
204
204
  "original": "RevoGrid.ViewPortScrollEvent",
205
- "resolved": "{ dimension: DimensionType; coordinate: number; delta?: number; }",
205
+ "resolved": "{ dimension: DimensionType; coordinate: number; delta?: number; outside?: boolean; }",
206
206
  "references": {
207
207
  "RevoGrid": {
208
208
  "location": "import",
@@ -51,6 +51,9 @@ export declare class RevogrViewportScroll {
51
51
  changeScroll(e: RevoGrid.ViewPortScrollEvent): Promise<RevoGrid.ViewPortScrollEvent>;
52
52
  mousewheelVertical({ detail: e }: CustomEvent<ScrollEvent>): void;
53
53
  mousewheelHorizontal({ detail: e }: CustomEvent<ScrollEvent>): void;
54
+ /**
55
+ * Allows to use outside listener
56
+ */
54
57
  scrollApply({ detail: { type, coordinate } }: CustomEvent<ScrollCoordinateEvent>): void;
55
58
  connectedCallback(): void;
56
59
  componentDidLoad(): void;