@revolist/revogrid 4.23.6 → 4.23.8

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 (29) hide show
  1. package/dist/cjs/{column.drag.plugin-yUSx3qoN.js → column.drag.plugin-CHyc9aCK.js} +32 -3
  2. package/dist/cjs/index.cjs.js +2 -1
  3. package/dist/cjs/revo-grid.cjs.entry.js +1 -1
  4. package/dist/cjs/revogr-data_4.cjs.entry.js +10 -2
  5. package/dist/cjs/revogr-filter-panel.cjs.entry.js +2 -2
  6. package/dist/collection/components/scroll/revogr-viewport-scroll.js +10 -2
  7. package/dist/collection/plugins/filter/filter.panel.js +2 -2
  8. package/dist/collection/plugins/filter/filter.plugin.js +1 -1
  9. package/dist/collection/plugins/moveColumn/column.drag.plugin.js +30 -2
  10. package/dist/esm/{column.drag.plugin-Cg2U-91C.js → column.drag.plugin-DEKk4rrp.js} +32 -4
  11. package/dist/esm/index.js +2 -2
  12. package/dist/esm/revo-grid.entry.js +1 -1
  13. package/dist/esm/revogr-data_4.entry.js +10 -2
  14. package/dist/esm/revogr-filter-panel.entry.js +2 -2
  15. package/dist/revo-grid/{column.drag.plugin-Cg2U-91C.js → column.drag.plugin-DEKk4rrp.js} +32 -4
  16. package/dist/revo-grid/index.esm.js +2 -2
  17. package/dist/revo-grid/revo-grid.entry.js +1 -1
  18. package/dist/revo-grid/revogr-data_4.entry.js +10 -2
  19. package/dist/revo-grid/revogr-filter-panel.entry.js +2 -2
  20. package/dist/types/plugins/filter/filter.plugin.d.ts +1 -0
  21. package/dist/types/plugins/filter/filter.types.d.ts +1 -0
  22. package/dist/types/plugins/moveColumn/column.drag.plugin.d.ts +4 -0
  23. package/hydrate/index.js +43 -7
  24. package/hydrate/index.mjs +43 -7
  25. package/package.json +1 -1
  26. package/standalone/index.js +1 -1
  27. package/standalone/revo-grid.js +1 -1
  28. package/standalone/revogr-filter-panel.js +1 -1
  29. package/standalone/revogr-viewport-scroll2.js +1 -1
@@ -1418,7 +1418,7 @@ class FilterPlugin extends BasePlugin {
1418
1418
  // filter button clicked, open filter dialog
1419
1419
  const gridPos = this.revogrid.getBoundingClientRect();
1420
1420
  const buttonPos = el.getBoundingClientRect();
1421
- const data = Object.assign(Object.assign(Object.assign({}, e.detail), this.filterCollection[prop]), { x: buttonPos.x - gridPos.x, y: buttonPos.y - gridPos.y + buttonPos.height, autoCorrect: true, filterTypes: this.getColumnFilter(e.detail.filter), filterItems: this.multiFilterItems, extraContent: this.extraHyperContent });
1421
+ const data = Object.assign(Object.assign(Object.assign({}, e.detail), this.filterCollection[prop]), { x: buttonPos.x - gridPos.x, y: buttonPos.y - gridPos.y + buttonPos.height, autoCorrect: true, filterTypes: this.getColumnFilter(e.detail.filter), filterItems: this.multiFilterItems, extraContent: this.extraHyperContent, extraBottomContent: this.extraBottomHyperContent });
1422
1422
  (_b = this.beforeshow) === null || _b === void 0 ? void 0 : _b.call(this, data);
1423
1423
  this.pop.show(data);
1424
1424
  }
@@ -2672,8 +2672,17 @@ class ColumnMovePlugin extends BasePlugin {
2672
2672
  constructor(revogrid, providers) {
2673
2673
  super(revogrid, providers);
2674
2674
  this.moveFunc = debounce.debounce((e) => this.doMove(e), 5);
2675
+ this.preventHeaderClickAfterDrag = (event) => {
2676
+ if (!this.preventNextHeaderClick) {
2677
+ return;
2678
+ }
2679
+ this.preventNextHeaderClick = false;
2680
+ event.preventDefault();
2681
+ };
2675
2682
  this.staticDragData = null;
2676
2683
  this.dragData = null;
2684
+ this.columnDragMoved = false;
2685
+ this.preventNextHeaderClick = false;
2677
2686
  this.localSubscriptions = {};
2678
2687
  this.orderUi = new ColumnOrderHandler();
2679
2688
  revogrid.appendChild(this.orderUi.render());
@@ -2692,11 +2701,13 @@ class ColumnMovePlugin extends BasePlugin {
2692
2701
  callback: (e) => this.move(e),
2693
2702
  };
2694
2703
  this.addEventListener(COLUMN_CLICK, ({ detail }) => this.dragStart(detail));
2704
+ this.revogrid.addEventListener('beforeheaderclick', this.preventHeaderClickAfterDrag, { capture: true });
2695
2705
  }
2696
2706
  dragStart({ event, data }) {
2697
2707
  if (event.defaultPrevented) {
2698
2708
  return;
2699
2709
  }
2710
+ this.preventNextHeaderClick = false;
2700
2711
  const { defaultPrevented } = headerCellRenderer.dispatch(this.revogrid, COLUMN_DRAG_START_EVENT, data);
2701
2712
  // check if allowed to drag particulat column
2702
2713
  if (defaultPrevented) {
@@ -2718,7 +2729,8 @@ class ColumnMovePlugin extends BasePlugin {
2718
2729
  const cols = this.getDimension(data.pin || 'rgCol');
2719
2730
  const gridRect = this.revogrid.getBoundingClientRect();
2720
2731
  const elRect = dataEl.getBoundingClientRect();
2721
- const startItem = dimension_helpers.getItemByPosition(cols, getLeftRelative(event.x, gridRect.left, elRect.left - gridRect.left) + (cols.renderOffset || 0));
2732
+ const startItem = dimension_helpers.getItemByPosition(cols, getLeftRelative(event.x, gridRect.left, elRect.left - gridRect.left) +
2733
+ (cols.renderOffset || 0));
2722
2734
  this.staticDragData = {
2723
2735
  startPos: event.x,
2724
2736
  startItem,
@@ -2749,10 +2761,14 @@ class ColumnMovePlugin extends BasePlugin {
2749
2761
  if (rgCol.itemIndex >= this.staticDragData.cols.count) {
2750
2762
  return;
2751
2763
  }
2752
- this.orderUi.showHandler(rgCol.end - (this.staticDragData.cols.renderOffset || 0) + dragData.scrollOffset, dragData.gridRect.width);
2764
+ this.orderUi.showHandler(getColumnDragPosition(rgCol, this.staticDragData.startItem, this.staticDragData.cols.renderOffset || 0, dragData.scrollOffset), dragData.gridRect.width);
2753
2765
  }
2754
2766
  }
2755
2767
  move(e) {
2768
+ if (this.staticDragData &&
2769
+ Math.abs(this.staticDragData.startPos - e.x) > 10) {
2770
+ this.columnDragMoved = true;
2771
+ }
2756
2772
  headerCellRenderer.dispatch(this.revogrid, COLUMN_DRAG_MOVE_EVENT, e);
2757
2773
  // then do move
2758
2774
  this.moveFunc(e);
@@ -2761,6 +2777,7 @@ class ColumnMovePlugin extends BasePlugin {
2761
2777
  this.clearOrder();
2762
2778
  }
2763
2779
  onMouseUp(e) {
2780
+ const suppressClick = this.columnDragMoved;
2764
2781
  // apply new positions
2765
2782
  if (this.dragData && this.staticDragData) {
2766
2783
  let relativePos = getLeftRelative(e.x, this.dragData.gridRect.left, this.dragData.scrollOffset);
@@ -2783,6 +2800,9 @@ class ColumnMovePlugin extends BasePlugin {
2783
2800
  }
2784
2801
  headerCellRenderer.dispatch(this.revogrid, COLUMN_DRAG_END_EVENT, this.getData(this.staticDragData, newItems, source));
2785
2802
  }
2803
+ if (suppressClick) {
2804
+ this.preventNextHeaderClick = !!e.target.closest('revogr-header');
2805
+ }
2786
2806
  this.clearOrder();
2787
2807
  }
2788
2808
  clearLocalSubscriptions() {
@@ -2791,6 +2811,7 @@ class ColumnMovePlugin extends BasePlugin {
2791
2811
  clearOrder() {
2792
2812
  this.staticDragData = null;
2793
2813
  this.dragData = null;
2814
+ this.columnDragMoved = false;
2794
2815
  this.clearLocalSubscriptions();
2795
2816
  this.orderUi.stop(this.revogrid);
2796
2817
  }
@@ -2800,6 +2821,7 @@ class ColumnMovePlugin extends BasePlugin {
2800
2821
  clearSubscriptions() {
2801
2822
  super.clearSubscriptions();
2802
2823
  this.clearLocalSubscriptions();
2824
+ this.revogrid.removeEventListener('beforeheaderclick', this.preventHeaderClickAfterDrag, { capture: true });
2803
2825
  }
2804
2826
  getData({ gridEl, dataEl, pin }, order, source = []) {
2805
2827
  const gridRect = gridEl.getBoundingClientRect();
@@ -2821,6 +2843,12 @@ class ColumnMovePlugin extends BasePlugin {
2821
2843
  function getLeftRelative(absoluteX, gridPos, offset) {
2822
2844
  return absoluteX - gridPos - offset;
2823
2845
  }
2846
+ function getColumnDragPosition(targetItem, startItem, renderOffset, scrollOffset) {
2847
+ const insertionEdge = startItem.itemIndex > targetItem.itemIndex
2848
+ ? targetItem.start
2849
+ : targetItem.end;
2850
+ return insertionEdge - renderOffset + scrollOffset;
2851
+ }
2824
2852
 
2825
2853
  exports.AutoSizeColumnPlugin = AutoSizeColumnPlugin;
2826
2854
  exports.BEFORE_COLUMN_DRAG_END_EVENT = BEFORE_COLUMN_DRAG_END_EVENT;
@@ -2847,6 +2875,7 @@ exports.doExpand = doExpand;
2847
2875
  exports.filterCoreFunctionsIndexedByType = filterCoreFunctionsIndexedByType;
2848
2876
  exports.filterNames = filterNames;
2849
2877
  exports.filterTypes = filterTypes;
2878
+ exports.getColumnDragPosition = getColumnDragPosition;
2850
2879
  exports.getComparer = getComparer;
2851
2880
  exports.getLeftRelative = getLeftRelative;
2852
2881
  exports.getNextOrder = getNextOrder;
@@ -4,7 +4,7 @@
4
4
  'use strict';
5
5
 
6
6
  var column_service = require('./column.service-C1Qvcf5l.js');
7
- var column_drag_plugin = require('./column.drag.plugin-yUSx3qoN.js');
7
+ var column_drag_plugin = require('./column.drag.plugin-CHyc9aCK.js');
8
8
  var headerCellRenderer = require('./header-cell-renderer-vVr4IWNV.js');
9
9
  var cellRenderer = require('./cell-renderer-Dcz022q7.js');
10
10
  var index$1 = require('./index-DxaSE5uZ.js');
@@ -233,6 +233,7 @@ exports.doExpand = column_drag_plugin.doExpand;
233
233
  exports.filterCoreFunctionsIndexedByType = column_drag_plugin.filterCoreFunctionsIndexedByType;
234
234
  exports.filterNames = column_drag_plugin.filterNames;
235
235
  exports.filterTypes = column_drag_plugin.filterTypes;
236
+ exports.getColumnDragPosition = column_drag_plugin.getColumnDragPosition;
236
237
  exports.getComparer = column_drag_plugin.getComparer;
237
238
  exports.getLeftRelative = column_drag_plugin.getLeftRelative;
238
239
  exports.getNextOrder = column_drag_plugin.getNextOrder;
@@ -8,7 +8,7 @@ var column_service = require('./column.service-C1Qvcf5l.js');
8
8
  var dimension_helpers = require('./dimension.helpers-B9HgANnM.js');
9
9
  var debounce = require('./debounce-CcpHiH2p.js');
10
10
  var viewport_helpers = require('./viewport.helpers-BND76K2j.js');
11
- var column_drag_plugin = require('./column.drag.plugin-yUSx3qoN.js');
11
+ var column_drag_plugin = require('./column.drag.plugin-CHyc9aCK.js');
12
12
  var viewport_store = require('./viewport.store-BscUCiUk.js');
13
13
  var theme_service = require('./theme.service-BgnxGIjK.js');
14
14
  var index$1 = require('./index-DxaSE5uZ.js');
@@ -830,9 +830,17 @@ const RevogrViewportScroll = class {
830
830
  }
831
831
  render() {
832
832
  var _a, _b;
833
- const physicalContentHeight = throttle.getContentSize(this.contentHeight, (_b = (_a = this.verticalScroll) === null || _a === void 0 ? void 0 : _a.clientHeight) !== null && _b !== void 0 ? _b : 0);
833
+ const clientHeight = (_b = (_a = this.verticalScroll) === null || _a === void 0 ? void 0 : _a.clientHeight) !== null && _b !== void 0 ? _b : 0;
834
+ // When content fits in the viewport (no scroll needed), don't inflate content-wrapper
835
+ // to clientHeight — that would prevent inner-content-table from shrinking and push
836
+ // rowPinEnd (footer) to the bottom instead of letting it follow the data rows.
837
+ // For large/compressed grids (content > clientHeight), physicalContentHeight handles
838
+ // the browser scroll-size compression correctly.
839
+ const physicalContentHeight = this.contentHeight < clientHeight
840
+ ? Math.max(this.contentHeight, 0)
841
+ : throttle.getContentSize(this.contentHeight, clientHeight);
834
842
  const physicalContentWidth = throttle.getContentSize(this.contentWidth, 0);
835
- return (index.h(index.Host, { key: 'ec8d907976c1d50f7aab3c263be3f0249a274df6', onWheel: this.horizontalMouseWheel, onScroll: (e) => this.applyScroll('rgCol', e) }, index.h("div", { key: 'e35696a7993ac94261426b45c28d488cdc42b7f0', class: "inner-content-table", style: { width: `${physicalContentWidth}px` } }, index.h("div", { key: 'a6997451e01eacda1d27d4efa1d74e1748626218', class: "header-wrapper", ref: e => (this.header = e) }, index.h("slot", { key: '1d401e87d32d5b1531c2211723b552bbc894f22c', name: viewport_helpers.HEADER_SLOT })), index.h("div", { key: 'ceab6f9e812d6ca9a0aa376afcd2562a17f505e0', class: "vertical-inner", ref: el => (this.verticalScroll = el), onWheel: this.verticalMouseWheel, onScroll: (e) => this.applyScroll('rgRow', e) }, index.h("div", { key: 'a9556578a23d6efddec2e982e863aec064042154', class: "content-wrapper", style: { height: `${physicalContentHeight}px` } }, index.h("slot", { key: '0ae01f9736b9740612e75261f6e3abebda533377', name: viewport_helpers.CONTENT_SLOT }))), index.h("div", { key: '09c2565d4ed449a43820f92d97b6558fca3758e7', class: "footer-wrapper", ref: e => (this.footer = e) }, index.h("slot", { key: '1ffb08ff8138a560cc09d82e3fe22a53e502aafe', name: viewport_helpers.FOOTER_SLOT })))));
843
+ return (index.h(index.Host, { key: '3dd9d29cf26743d7aa4995f51180d56008526e54', onWheel: this.horizontalMouseWheel, onScroll: (e) => this.applyScroll('rgCol', e) }, index.h("div", { key: 'af75428e845044c33eba2fecd1ec04a9177b9b5c', class: "inner-content-table", style: { width: `${physicalContentWidth}px` } }, index.h("div", { key: 'a0149f597588371e1fafe69efc3bd4411379a017', class: "header-wrapper", ref: e => (this.header = e) }, index.h("slot", { key: 'e5d2570bf93897cd97ef702141c83bb8c0e13ee2', name: viewport_helpers.HEADER_SLOT })), index.h("div", { key: 'd1388ff0d721dd8ce925b934bb2128fddc1ac17b', class: "vertical-inner", ref: el => (this.verticalScroll = el), onWheel: this.verticalMouseWheel, onScroll: (e) => this.applyScroll('rgRow', e) }, index.h("div", { key: 'a306ff56f62279402e2a881a081e3224341d5bdf', class: "content-wrapper", style: { height: `${physicalContentHeight}px` } }, index.h("slot", { key: '898bda8e9429da06c9ff2bd41626ac27f3cde3cc', name: viewport_helpers.CONTENT_SLOT }))), index.h("div", { key: '5e9eba1edd5fca07a964971054a7900e4dd84099', class: "footer-wrapper", ref: e => (this.footer = e) }, index.h("slot", { key: 'f233ad1c23b3f692c45e1db235cfef4704a80726', name: viewport_helpers.FOOTER_SLOT })))));
836
844
  }
837
845
  /**
838
846
  * Extra layer for scroll event monitoring, where MouseWheel event is not passing
@@ -348,7 +348,7 @@ const FilterPanel = class {
348
348
  } }));
349
349
  }
350
350
  render() {
351
- var _a, _b, _c;
351
+ var _a, _b, _c, _d, _e;
352
352
  if (!this.changes) {
353
353
  return index.h(index.Host, { style: { display: 'none' } });
354
354
  }
@@ -365,7 +365,7 @@ const FilterPanel = class {
365
365
  index.h("label", null, capts.title),
366
366
  index.h("div", { class: "filter-holder" }, this.getFilterItemsList()),
367
367
  index.h("div", { class: "add-filter" }, index.h("select", { id: FILTER_ID, class: "select-css", onChange: e => this.onAddNewFilter(e) }, this.renderSelectOptions(this.currentFilterType)))
368
- ]), index.h("slot", null), index.h("div", { class: "filter-actions" }, this.disableDynamicFiltering && [
368
+ ]), index.h("slot", null), ((_e = (_d = this.changes).extraBottomContent) === null || _e === void 0 ? void 0 : _e.call(_d, this.changes)) || '', index.h("div", { class: "filter-actions" }, this.disableDynamicFiltering && [
369
369
  index.h("button", { id: "revo-button-save", "aria-label": "save", class: "revo-button green", onClick: () => this.onSave() }, capts.save),
370
370
  index.h("button", { id: "revo-button-ok", "aria-label": "ok", class: "revo-button green", onClick: () => this.onCancel() }, capts.cancel),
371
371
  ], !this.disableDynamicFiltering && [
@@ -219,9 +219,17 @@ export class RevogrViewportScroll {
219
219
  }
220
220
  render() {
221
221
  var _a, _b;
222
- const physicalContentHeight = getContentSize(this.contentHeight, (_b = (_a = this.verticalScroll) === null || _a === void 0 ? void 0 : _a.clientHeight) !== null && _b !== void 0 ? _b : 0);
222
+ const clientHeight = (_b = (_a = this.verticalScroll) === null || _a === void 0 ? void 0 : _a.clientHeight) !== null && _b !== void 0 ? _b : 0;
223
+ // When content fits in the viewport (no scroll needed), don't inflate content-wrapper
224
+ // to clientHeight — that would prevent inner-content-table from shrinking and push
225
+ // rowPinEnd (footer) to the bottom instead of letting it follow the data rows.
226
+ // For large/compressed grids (content > clientHeight), physicalContentHeight handles
227
+ // the browser scroll-size compression correctly.
228
+ const physicalContentHeight = this.contentHeight < clientHeight
229
+ ? Math.max(this.contentHeight, 0)
230
+ : getContentSize(this.contentHeight, clientHeight);
223
231
  const physicalContentWidth = getContentSize(this.contentWidth, 0);
224
- return (h(Host, { key: 'ec8d907976c1d50f7aab3c263be3f0249a274df6', onWheel: this.horizontalMouseWheel, onScroll: (e) => this.applyScroll('rgCol', e) }, h("div", { key: 'e35696a7993ac94261426b45c28d488cdc42b7f0', class: "inner-content-table", style: { width: `${physicalContentWidth}px` } }, h("div", { key: 'a6997451e01eacda1d27d4efa1d74e1748626218', class: "header-wrapper", ref: e => (this.header = e) }, h("slot", { key: '1d401e87d32d5b1531c2211723b552bbc894f22c', name: HEADER_SLOT })), h("div", { key: 'ceab6f9e812d6ca9a0aa376afcd2562a17f505e0', class: "vertical-inner", ref: el => (this.verticalScroll = el), onWheel: this.verticalMouseWheel, onScroll: (e) => this.applyScroll('rgRow', e) }, h("div", { key: 'a9556578a23d6efddec2e982e863aec064042154', class: "content-wrapper", style: { height: `${physicalContentHeight}px` } }, h("slot", { key: '0ae01f9736b9740612e75261f6e3abebda533377', name: CONTENT_SLOT }))), h("div", { key: '09c2565d4ed449a43820f92d97b6558fca3758e7', class: "footer-wrapper", ref: e => (this.footer = e) }, h("slot", { key: '1ffb08ff8138a560cc09d82e3fe22a53e502aafe', name: FOOTER_SLOT })))));
232
+ return (h(Host, { key: '3dd9d29cf26743d7aa4995f51180d56008526e54', onWheel: this.horizontalMouseWheel, onScroll: (e) => this.applyScroll('rgCol', e) }, h("div", { key: 'af75428e845044c33eba2fecd1ec04a9177b9b5c', class: "inner-content-table", style: { width: `${physicalContentWidth}px` } }, h("div", { key: 'a0149f597588371e1fafe69efc3bd4411379a017', class: "header-wrapper", ref: e => (this.header = e) }, h("slot", { key: 'e5d2570bf93897cd97ef702141c83bb8c0e13ee2', name: HEADER_SLOT })), h("div", { key: 'd1388ff0d721dd8ce925b934bb2128fddc1ac17b', class: "vertical-inner", ref: el => (this.verticalScroll = el), onWheel: this.verticalMouseWheel, onScroll: (e) => this.applyScroll('rgRow', e) }, h("div", { key: 'a306ff56f62279402e2a881a081e3224341d5bdf', class: "content-wrapper", style: { height: `${physicalContentHeight}px` } }, h("slot", { key: '898bda8e9429da06c9ff2bd41626ac27f3cde3cc', name: CONTENT_SLOT }))), h("div", { key: '5e9eba1edd5fca07a964971054a7900e4dd84099', class: "footer-wrapper", ref: e => (this.footer = e) }, h("slot", { key: 'f233ad1c23b3f692c45e1db235cfef4704a80726', name: FOOTER_SLOT })))));
225
233
  }
226
234
  /**
227
235
  * Extra layer for scroll event monitoring, where MouseWheel event is not passing
@@ -329,7 +329,7 @@ export class FilterPanel {
329
329
  } }));
330
330
  }
331
331
  render() {
332
- var _a, _b, _c;
332
+ var _a, _b, _c, _d, _e;
333
333
  if (!this.changes) {
334
334
  return h(Host, { style: { display: 'none' } });
335
335
  }
@@ -346,7 +346,7 @@ export class FilterPanel {
346
346
  h("label", null, capts.title),
347
347
  h("div", { class: "filter-holder" }, this.getFilterItemsList()),
348
348
  h("div", { class: "add-filter" }, h("select", { id: FILTER_ID, class: "select-css", onChange: e => this.onAddNewFilter(e) }, this.renderSelectOptions(this.currentFilterType)))
349
- ]), h("slot", null), h("div", { class: "filter-actions" }, this.disableDynamicFiltering && [
349
+ ]), h("slot", null), ((_e = (_d = this.changes).extraBottomContent) === null || _e === void 0 ? void 0 : _e.call(_d, this.changes)) || '', h("div", { class: "filter-actions" }, this.disableDynamicFiltering && [
350
350
  h("button", { id: "revo-button-save", "aria-label": "save", class: "revo-button green", onClick: () => this.onSave() }, capts.save),
351
351
  h("button", { id: "revo-button-ok", "aria-label": "ok", class: "revo-button green", onClick: () => this.onCancel() }, capts.cancel),
352
352
  ], !this.disableDynamicFiltering && [
@@ -194,7 +194,7 @@ export class FilterPlugin extends BasePlugin {
194
194
  // filter button clicked, open filter dialog
195
195
  const gridPos = this.revogrid.getBoundingClientRect();
196
196
  const buttonPos = el.getBoundingClientRect();
197
- const data = Object.assign(Object.assign(Object.assign({}, e.detail), this.filterCollection[prop]), { x: buttonPos.x - gridPos.x, y: buttonPos.y - gridPos.y + buttonPos.height, autoCorrect: true, filterTypes: this.getColumnFilter(e.detail.filter), filterItems: this.multiFilterItems, extraContent: this.extraHyperContent });
197
+ const data = Object.assign(Object.assign(Object.assign({}, e.detail), this.filterCollection[prop]), { x: buttonPos.x - gridPos.x, y: buttonPos.y - gridPos.y + buttonPos.height, autoCorrect: true, filterTypes: this.getColumnFilter(e.detail.filter), filterItems: this.multiFilterItems, extraContent: this.extraHyperContent, extraBottomContent: this.extraBottomHyperContent });
198
198
  (_b = this.beforeshow) === null || _b === void 0 ? void 0 : _b.call(this, data);
199
199
  this.pop.show(data);
200
200
  }
@@ -22,8 +22,17 @@ export class ColumnMovePlugin extends BasePlugin {
22
22
  constructor(revogrid, providers) {
23
23
  super(revogrid, providers);
24
24
  this.moveFunc = debounce((e) => this.doMove(e), 5);
25
+ this.preventHeaderClickAfterDrag = (event) => {
26
+ if (!this.preventNextHeaderClick) {
27
+ return;
28
+ }
29
+ this.preventNextHeaderClick = false;
30
+ event.preventDefault();
31
+ };
25
32
  this.staticDragData = null;
26
33
  this.dragData = null;
34
+ this.columnDragMoved = false;
35
+ this.preventNextHeaderClick = false;
27
36
  this.localSubscriptions = {};
28
37
  this.orderUi = new ColumnOrderHandler();
29
38
  revogrid.appendChild(this.orderUi.render());
@@ -42,11 +51,13 @@ export class ColumnMovePlugin extends BasePlugin {
42
51
  callback: (e) => this.move(e),
43
52
  };
44
53
  this.addEventListener(COLUMN_CLICK, ({ detail }) => this.dragStart(detail));
54
+ this.revogrid.addEventListener('beforeheaderclick', this.preventHeaderClickAfterDrag, { capture: true });
45
55
  }
46
56
  dragStart({ event, data }) {
47
57
  if (event.defaultPrevented) {
48
58
  return;
49
59
  }
60
+ this.preventNextHeaderClick = false;
50
61
  const { defaultPrevented } = dispatch(this.revogrid, COLUMN_DRAG_START_EVENT, data);
51
62
  // check if allowed to drag particulat column
52
63
  if (defaultPrevented) {
@@ -68,7 +79,8 @@ export class ColumnMovePlugin extends BasePlugin {
68
79
  const cols = this.getDimension(data.pin || 'rgCol');
69
80
  const gridRect = this.revogrid.getBoundingClientRect();
70
81
  const elRect = dataEl.getBoundingClientRect();
71
- const startItem = getItemByPosition(cols, getLeftRelative(event.x, gridRect.left, elRect.left - gridRect.left) + (cols.renderOffset || 0));
82
+ const startItem = getItemByPosition(cols, getLeftRelative(event.x, gridRect.left, elRect.left - gridRect.left) +
83
+ (cols.renderOffset || 0));
72
84
  this.staticDragData = {
73
85
  startPos: event.x,
74
86
  startItem,
@@ -99,10 +111,14 @@ export class ColumnMovePlugin extends BasePlugin {
99
111
  if (rgCol.itemIndex >= this.staticDragData.cols.count) {
100
112
  return;
101
113
  }
102
- this.orderUi.showHandler(rgCol.end - (this.staticDragData.cols.renderOffset || 0) + dragData.scrollOffset, dragData.gridRect.width);
114
+ this.orderUi.showHandler(getColumnDragPosition(rgCol, this.staticDragData.startItem, this.staticDragData.cols.renderOffset || 0, dragData.scrollOffset), dragData.gridRect.width);
103
115
  }
104
116
  }
105
117
  move(e) {
118
+ if (this.staticDragData &&
119
+ Math.abs(this.staticDragData.startPos - e.x) > 10) {
120
+ this.columnDragMoved = true;
121
+ }
106
122
  dispatch(this.revogrid, COLUMN_DRAG_MOVE_EVENT, e);
107
123
  // then do move
108
124
  this.moveFunc(e);
@@ -111,6 +127,7 @@ export class ColumnMovePlugin extends BasePlugin {
111
127
  this.clearOrder();
112
128
  }
113
129
  onMouseUp(e) {
130
+ const suppressClick = this.columnDragMoved;
114
131
  // apply new positions
115
132
  if (this.dragData && this.staticDragData) {
116
133
  let relativePos = getLeftRelative(e.x, this.dragData.gridRect.left, this.dragData.scrollOffset);
@@ -133,6 +150,9 @@ export class ColumnMovePlugin extends BasePlugin {
133
150
  }
134
151
  dispatch(this.revogrid, COLUMN_DRAG_END_EVENT, this.getData(this.staticDragData, newItems, source));
135
152
  }
153
+ if (suppressClick) {
154
+ this.preventNextHeaderClick = !!e.target.closest('revogr-header');
155
+ }
136
156
  this.clearOrder();
137
157
  }
138
158
  clearLocalSubscriptions() {
@@ -141,6 +161,7 @@ export class ColumnMovePlugin extends BasePlugin {
141
161
  clearOrder() {
142
162
  this.staticDragData = null;
143
163
  this.dragData = null;
164
+ this.columnDragMoved = false;
144
165
  this.clearLocalSubscriptions();
145
166
  this.orderUi.stop(this.revogrid);
146
167
  }
@@ -150,6 +171,7 @@ export class ColumnMovePlugin extends BasePlugin {
150
171
  clearSubscriptions() {
151
172
  super.clearSubscriptions();
152
173
  this.clearLocalSubscriptions();
174
+ this.revogrid.removeEventListener('beforeheaderclick', this.preventHeaderClickAfterDrag, { capture: true });
153
175
  }
154
176
  getData({ gridEl, dataEl, pin }, order, source = []) {
155
177
  const gridRect = gridEl.getBoundingClientRect();
@@ -171,3 +193,9 @@ export class ColumnMovePlugin extends BasePlugin {
171
193
  export function getLeftRelative(absoluteX, gridPos, offset) {
172
194
  return absoluteX - gridPos - offset;
173
195
  }
196
+ export function getColumnDragPosition(targetItem, startItem, renderOffset, scrollOffset) {
197
+ const insertionEdge = startItem.itemIndex > targetItem.itemIndex
198
+ ? targetItem.start
199
+ : targetItem.end;
200
+ return insertionEdge - renderOffset + scrollOffset;
201
+ }
@@ -1416,7 +1416,7 @@ class FilterPlugin extends BasePlugin {
1416
1416
  // filter button clicked, open filter dialog
1417
1417
  const gridPos = this.revogrid.getBoundingClientRect();
1418
1418
  const buttonPos = el.getBoundingClientRect();
1419
- const data = Object.assign(Object.assign(Object.assign({}, e.detail), this.filterCollection[prop]), { x: buttonPos.x - gridPos.x, y: buttonPos.y - gridPos.y + buttonPos.height, autoCorrect: true, filterTypes: this.getColumnFilter(e.detail.filter), filterItems: this.multiFilterItems, extraContent: this.extraHyperContent });
1419
+ const data = Object.assign(Object.assign(Object.assign({}, e.detail), this.filterCollection[prop]), { x: buttonPos.x - gridPos.x, y: buttonPos.y - gridPos.y + buttonPos.height, autoCorrect: true, filterTypes: this.getColumnFilter(e.detail.filter), filterItems: this.multiFilterItems, extraContent: this.extraHyperContent, extraBottomContent: this.extraBottomHyperContent });
1420
1420
  (_b = this.beforeshow) === null || _b === void 0 ? void 0 : _b.call(this, data);
1421
1421
  this.pop.show(data);
1422
1422
  }
@@ -2670,8 +2670,17 @@ class ColumnMovePlugin extends BasePlugin {
2670
2670
  constructor(revogrid, providers) {
2671
2671
  super(revogrid, providers);
2672
2672
  this.moveFunc = debounce((e) => this.doMove(e), 5);
2673
+ this.preventHeaderClickAfterDrag = (event) => {
2674
+ if (!this.preventNextHeaderClick) {
2675
+ return;
2676
+ }
2677
+ this.preventNextHeaderClick = false;
2678
+ event.preventDefault();
2679
+ };
2673
2680
  this.staticDragData = null;
2674
2681
  this.dragData = null;
2682
+ this.columnDragMoved = false;
2683
+ this.preventNextHeaderClick = false;
2675
2684
  this.localSubscriptions = {};
2676
2685
  this.orderUi = new ColumnOrderHandler();
2677
2686
  revogrid.appendChild(this.orderUi.render());
@@ -2690,11 +2699,13 @@ class ColumnMovePlugin extends BasePlugin {
2690
2699
  callback: (e) => this.move(e),
2691
2700
  };
2692
2701
  this.addEventListener(COLUMN_CLICK, ({ detail }) => this.dragStart(detail));
2702
+ this.revogrid.addEventListener('beforeheaderclick', this.preventHeaderClickAfterDrag, { capture: true });
2693
2703
  }
2694
2704
  dragStart({ event, data }) {
2695
2705
  if (event.defaultPrevented) {
2696
2706
  return;
2697
2707
  }
2708
+ this.preventNextHeaderClick = false;
2698
2709
  const { defaultPrevented } = dispatch(this.revogrid, COLUMN_DRAG_START_EVENT, data);
2699
2710
  // check if allowed to drag particulat column
2700
2711
  if (defaultPrevented) {
@@ -2716,7 +2727,8 @@ class ColumnMovePlugin extends BasePlugin {
2716
2727
  const cols = this.getDimension(data.pin || 'rgCol');
2717
2728
  const gridRect = this.revogrid.getBoundingClientRect();
2718
2729
  const elRect = dataEl.getBoundingClientRect();
2719
- const startItem = getItemByPosition(cols, getLeftRelative(event.x, gridRect.left, elRect.left - gridRect.left) + (cols.renderOffset || 0));
2730
+ const startItem = getItemByPosition(cols, getLeftRelative(event.x, gridRect.left, elRect.left - gridRect.left) +
2731
+ (cols.renderOffset || 0));
2720
2732
  this.staticDragData = {
2721
2733
  startPos: event.x,
2722
2734
  startItem,
@@ -2747,10 +2759,14 @@ class ColumnMovePlugin extends BasePlugin {
2747
2759
  if (rgCol.itemIndex >= this.staticDragData.cols.count) {
2748
2760
  return;
2749
2761
  }
2750
- this.orderUi.showHandler(rgCol.end - (this.staticDragData.cols.renderOffset || 0) + dragData.scrollOffset, dragData.gridRect.width);
2762
+ this.orderUi.showHandler(getColumnDragPosition(rgCol, this.staticDragData.startItem, this.staticDragData.cols.renderOffset || 0, dragData.scrollOffset), dragData.gridRect.width);
2751
2763
  }
2752
2764
  }
2753
2765
  move(e) {
2766
+ if (this.staticDragData &&
2767
+ Math.abs(this.staticDragData.startPos - e.x) > 10) {
2768
+ this.columnDragMoved = true;
2769
+ }
2754
2770
  dispatch(this.revogrid, COLUMN_DRAG_MOVE_EVENT, e);
2755
2771
  // then do move
2756
2772
  this.moveFunc(e);
@@ -2759,6 +2775,7 @@ class ColumnMovePlugin extends BasePlugin {
2759
2775
  this.clearOrder();
2760
2776
  }
2761
2777
  onMouseUp(e) {
2778
+ const suppressClick = this.columnDragMoved;
2762
2779
  // apply new positions
2763
2780
  if (this.dragData && this.staticDragData) {
2764
2781
  let relativePos = getLeftRelative(e.x, this.dragData.gridRect.left, this.dragData.scrollOffset);
@@ -2781,6 +2798,9 @@ class ColumnMovePlugin extends BasePlugin {
2781
2798
  }
2782
2799
  dispatch(this.revogrid, COLUMN_DRAG_END_EVENT, this.getData(this.staticDragData, newItems, source));
2783
2800
  }
2801
+ if (suppressClick) {
2802
+ this.preventNextHeaderClick = !!e.target.closest('revogr-header');
2803
+ }
2784
2804
  this.clearOrder();
2785
2805
  }
2786
2806
  clearLocalSubscriptions() {
@@ -2789,6 +2809,7 @@ class ColumnMovePlugin extends BasePlugin {
2789
2809
  clearOrder() {
2790
2810
  this.staticDragData = null;
2791
2811
  this.dragData = null;
2812
+ this.columnDragMoved = false;
2792
2813
  this.clearLocalSubscriptions();
2793
2814
  this.orderUi.stop(this.revogrid);
2794
2815
  }
@@ -2798,6 +2819,7 @@ class ColumnMovePlugin extends BasePlugin {
2798
2819
  clearSubscriptions() {
2799
2820
  super.clearSubscriptions();
2800
2821
  this.clearLocalSubscriptions();
2822
+ this.revogrid.removeEventListener('beforeheaderclick', this.preventHeaderClickAfterDrag, { capture: true });
2801
2823
  }
2802
2824
  getData({ gridEl, dataEl, pin }, order, source = []) {
2803
2825
  const gridRect = gridEl.getBoundingClientRect();
@@ -2819,5 +2841,11 @@ class ColumnMovePlugin extends BasePlugin {
2819
2841
  function getLeftRelative(absoluteX, gridPos, offset) {
2820
2842
  return absoluteX - gridPos - offset;
2821
2843
  }
2844
+ function getColumnDragPosition(targetItem, startItem, renderOffset, scrollOffset) {
2845
+ const insertionEdge = startItem.itemIndex > targetItem.itemIndex
2846
+ ? targetItem.start
2847
+ : targetItem.end;
2848
+ return insertionEdge - renderOffset + scrollOffset;
2849
+ }
2822
2850
 
2823
- export { AutoSizeColumnPlugin as A, BasePlugin as B, ColumnAutoSizeMode as C, DimensionStore as D, ExportFilePlugin as E, FILTER_TRIMMED_TYPE as F, GroupingRowPlugin as G, SelectionStore as S, StretchColumn as a, ExportCsv as b, FILTER_CONFIG_CHANGED_EVENT as c, FILTE_PANEL as d, FilterPlugin as e, filterCoreFunctionsIndexedByType as f, filterTypes as g, filterNames as h, isStretchPlugin as i, doCollapse as j, doExpand as k, COLUMN_DRAG_MOVE_EVENT as l, COLUMN_DRAG_END_EVENT as m, BEFORE_COLUMN_DRAG_END_EVENT as n, COLUMN_DRAG_START_EVENT as o, ColumnMovePlugin as p, getLeftRelative as q, SortingPlugin as r, hasActiveSorting as s, getSortingIndex as t, sortIndexByItems as u, defaultCellCompare as v, descCellCompare as w, getNextOrder as x, getComparer as y };
2851
+ export { AutoSizeColumnPlugin as A, BasePlugin as B, ColumnAutoSizeMode as C, DimensionStore as D, ExportFilePlugin as E, FILTER_TRIMMED_TYPE as F, GroupingRowPlugin as G, SelectionStore as S, StretchColumn as a, ExportCsv as b, FILTER_CONFIG_CHANGED_EVENT as c, FILTE_PANEL as d, FilterPlugin as e, filterCoreFunctionsIndexedByType as f, filterTypes as g, filterNames as h, isStretchPlugin as i, doCollapse as j, doExpand as k, COLUMN_DRAG_MOVE_EVENT as l, COLUMN_DRAG_END_EVENT as m, BEFORE_COLUMN_DRAG_END_EVENT as n, COLUMN_DRAG_START_EVENT as o, ColumnMovePlugin as p, getLeftRelative as q, getColumnDragPosition as r, SortingPlugin as s, hasActiveSorting as t, getSortingIndex as u, sortIndexByItems as v, defaultCellCompare as w, descCellCompare as x, getNextOrder as y, getComparer as z };
package/dist/esm/index.js CHANGED
@@ -2,8 +2,8 @@
2
2
  * Built by Revolist OU ❤️
3
3
  */
4
4
  export { o as GROUPING_ROW_TYPE, j as GROUP_COLUMN_PROP, G as GROUP_DEPTH, h as GROUP_EXPANDED, l as GROUP_EXPAND_BTN, m as GROUP_EXPAND_EVENT, k as GROUP_ORIGINAL_INDEX, f as PSEUDO_GROUP_COLUMN, P as PSEUDO_GROUP_ITEM, d as PSEUDO_GROUP_ITEM_ID, e as PSEUDO_GROUP_ITEM_VALUE, c as columnTypes, a as cropCellToMax, H as gatherGroup, s as gatherGrouping, z as getCellData, B as getCellDataParsed, A as getCellRaw, I as getColumnByProp, D as getColumnSizes, C as getColumnType, F as getColumns, q as getExpanded, t as getGroupingName, x as getParsedGroup, g as getRange, p as getSource, E as isColGrouping, u as isGrouping, v as isGroupingColumn, b as isRangeSingleCell, i as isRowType, y as isSameGroup, w as measureEqualDepth, n as nextCell, r as rowTypes } from './column.service-CC_SD8W3.js';
5
- import { B as BasePlugin } from './column.drag.plugin-Cg2U-91C.js';
6
- export { A as AutoSizeColumnPlugin, n as BEFORE_COLUMN_DRAG_END_EVENT, m as COLUMN_DRAG_END_EVENT, l as COLUMN_DRAG_MOVE_EVENT, o as COLUMN_DRAG_START_EVENT, C as ColumnAutoSizeMode, p as ColumnMovePlugin, D as DimensionStore, b as ExportCsv, E as ExportFilePlugin, c as FILTER_CONFIG_CHANGED_EVENT, F as FILTER_TRIMMED_TYPE, d as FILTE_PANEL, e as FilterPlugin, G as GroupingRowPlugin, S as SelectionStore, r as SortingPlugin, a as StretchColumn, v as defaultCellCompare, w as descCellCompare, j as doCollapse, k as doExpand, f as filterCoreFunctionsIndexedByType, h as filterNames, g as filterTypes, y as getComparer, q as getLeftRelative, x as getNextOrder, t as getSortingIndex, s as hasActiveSorting, i as isStretchPlugin, u as sortIndexByItems } from './column.drag.plugin-Cg2U-91C.js';
5
+ import { B as BasePlugin } from './column.drag.plugin-DEKk4rrp.js';
6
+ export { A as AutoSizeColumnPlugin, n as BEFORE_COLUMN_DRAG_END_EVENT, m as COLUMN_DRAG_END_EVENT, l as COLUMN_DRAG_MOVE_EVENT, o as COLUMN_DRAG_START_EVENT, C as ColumnAutoSizeMode, p as ColumnMovePlugin, D as DimensionStore, b as ExportCsv, E as ExportFilePlugin, c as FILTER_CONFIG_CHANGED_EVENT, F as FILTER_TRIMMED_TYPE, d as FILTE_PANEL, e as FilterPlugin, G as GroupingRowPlugin, S as SelectionStore, s as SortingPlugin, a as StretchColumn, w as defaultCellCompare, x as descCellCompare, j as doCollapse, k as doExpand, f as filterCoreFunctionsIndexedByType, h as filterNames, g as filterTypes, r as getColumnDragPosition, z as getComparer, q as getLeftRelative, y as getNextOrder, u as getSortingIndex, t as hasActiveSorting, i as isStretchPlugin, v as sortIndexByItems } from './column.drag.plugin-DEKk4rrp.js';
7
7
  export { d as dispatch, a as dispatchByEvent } from './header-cell-renderer-B-LX2sgu.js';
8
8
  export { C as CellRenderer, G as GroupingRowRenderer, S as SortingSign, e as expandEvent, a as expandSvgIconVNode } from './cell-renderer-BtN-NGCk.js';
9
9
  export { a as applyMixins, f as findPositionInArray, g as getScrollbarSize, m as mergeSortedArray, p as pushSorted, r as range, s as scaleValue, t as timeout } from './index-Db3qZoW5.js';
@@ -6,7 +6,7 @@ import { c as columnTypes, J as reduce, C as getColumnType, r as rowTypes, i as
6
6
  import { D as DataStore, b as getSourceItem, f as getSourceItemVirtualIndexByProp, d as setSourceByPhysicalIndex, s as setSourceByVirtualIndex, a as getVisibleSourceItem, h as gatherTrimmedItems, k as getItemByIndex, R as RESIZE_INTERVAL } from './dimension.helpers-CGKwSvw6.js';
7
7
  import { d as debounce } from './debounce-PCRWZliA.js';
8
8
  import { g as getScrollDimension, v as viewportDataPartition, F as FOOTER_SLOT, C as CONTENT_SLOT, H as HEADER_SLOT, D as DATA_SLOT } from './viewport.helpers-CoCAvmZs.js';
9
- import { D as DimensionStore, S as SelectionStore, B as BasePlugin, G as GroupingRowPlugin, a as StretchColumn, i as isStretchPlugin, A as AutoSizeColumnPlugin, e as FilterPlugin, E as ExportFilePlugin, r as SortingPlugin, p as ColumnMovePlugin } from './column.drag.plugin-Cg2U-91C.js';
9
+ import { D as DimensionStore, S as SelectionStore, B as BasePlugin, G as GroupingRowPlugin, a as StretchColumn, i as isStretchPlugin, A as AutoSizeColumnPlugin, e as FilterPlugin, E as ExportFilePlugin, s as SortingPlugin, p as ColumnMovePlugin } from './column.drag.plugin-DEKk4rrp.js';
10
10
  import { V as ViewportStore } from './viewport.store-_c579YyM.js';
11
11
  import { T as ThemeService } from './theme.service-BmnDvr6P.js';
12
12
  import { t as timeout } from './index-Db3qZoW5.js';
@@ -828,9 +828,17 @@ const RevogrViewportScroll = class {
828
828
  }
829
829
  render() {
830
830
  var _a, _b;
831
- const physicalContentHeight = getContentSize(this.contentHeight, (_b = (_a = this.verticalScroll) === null || _a === void 0 ? void 0 : _a.clientHeight) !== null && _b !== void 0 ? _b : 0);
831
+ const clientHeight = (_b = (_a = this.verticalScroll) === null || _a === void 0 ? void 0 : _a.clientHeight) !== null && _b !== void 0 ? _b : 0;
832
+ // When content fits in the viewport (no scroll needed), don't inflate content-wrapper
833
+ // to clientHeight — that would prevent inner-content-table from shrinking and push
834
+ // rowPinEnd (footer) to the bottom instead of letting it follow the data rows.
835
+ // For large/compressed grids (content > clientHeight), physicalContentHeight handles
836
+ // the browser scroll-size compression correctly.
837
+ const physicalContentHeight = this.contentHeight < clientHeight
838
+ ? Math.max(this.contentHeight, 0)
839
+ : getContentSize(this.contentHeight, clientHeight);
832
840
  const physicalContentWidth = getContentSize(this.contentWidth, 0);
833
- return (h(Host, { key: 'ec8d907976c1d50f7aab3c263be3f0249a274df6', onWheel: this.horizontalMouseWheel, onScroll: (e) => this.applyScroll('rgCol', e) }, h("div", { key: 'e35696a7993ac94261426b45c28d488cdc42b7f0', class: "inner-content-table", style: { width: `${physicalContentWidth}px` } }, h("div", { key: 'a6997451e01eacda1d27d4efa1d74e1748626218', class: "header-wrapper", ref: e => (this.header = e) }, h("slot", { key: '1d401e87d32d5b1531c2211723b552bbc894f22c', name: HEADER_SLOT })), h("div", { key: 'ceab6f9e812d6ca9a0aa376afcd2562a17f505e0', class: "vertical-inner", ref: el => (this.verticalScroll = el), onWheel: this.verticalMouseWheel, onScroll: (e) => this.applyScroll('rgRow', e) }, h("div", { key: 'a9556578a23d6efddec2e982e863aec064042154', class: "content-wrapper", style: { height: `${physicalContentHeight}px` } }, h("slot", { key: '0ae01f9736b9740612e75261f6e3abebda533377', name: CONTENT_SLOT }))), h("div", { key: '09c2565d4ed449a43820f92d97b6558fca3758e7', class: "footer-wrapper", ref: e => (this.footer = e) }, h("slot", { key: '1ffb08ff8138a560cc09d82e3fe22a53e502aafe', name: FOOTER_SLOT })))));
841
+ return (h(Host, { key: '3dd9d29cf26743d7aa4995f51180d56008526e54', onWheel: this.horizontalMouseWheel, onScroll: (e) => this.applyScroll('rgCol', e) }, h("div", { key: 'af75428e845044c33eba2fecd1ec04a9177b9b5c', class: "inner-content-table", style: { width: `${physicalContentWidth}px` } }, h("div", { key: 'a0149f597588371e1fafe69efc3bd4411379a017', class: "header-wrapper", ref: e => (this.header = e) }, h("slot", { key: 'e5d2570bf93897cd97ef702141c83bb8c0e13ee2', name: HEADER_SLOT })), h("div", { key: 'd1388ff0d721dd8ce925b934bb2128fddc1ac17b', class: "vertical-inner", ref: el => (this.verticalScroll = el), onWheel: this.verticalMouseWheel, onScroll: (e) => this.applyScroll('rgRow', e) }, h("div", { key: 'a306ff56f62279402e2a881a081e3224341d5bdf', class: "content-wrapper", style: { height: `${physicalContentHeight}px` } }, h("slot", { key: '898bda8e9429da06c9ff2bd41626ac27f3cde3cc', name: CONTENT_SLOT }))), h("div", { key: '5e9eba1edd5fca07a964971054a7900e4dd84099', class: "footer-wrapper", ref: e => (this.footer = e) }, h("slot", { key: 'f233ad1c23b3f692c45e1db235cfef4704a80726', name: FOOTER_SLOT })))));
834
842
  }
835
843
  /**
836
844
  * Extra layer for scroll event monitoring, where MouseWheel event is not passing
@@ -346,7 +346,7 @@ const FilterPanel = class {
346
346
  } }));
347
347
  }
348
348
  render() {
349
- var _a, _b, _c;
349
+ var _a, _b, _c, _d, _e;
350
350
  if (!this.changes) {
351
351
  return h(Host, { style: { display: 'none' } });
352
352
  }
@@ -363,7 +363,7 @@ const FilterPanel = class {
363
363
  h("label", null, capts.title),
364
364
  h("div", { class: "filter-holder" }, this.getFilterItemsList()),
365
365
  h("div", { class: "add-filter" }, h("select", { id: FILTER_ID, class: "select-css", onChange: e => this.onAddNewFilter(e) }, this.renderSelectOptions(this.currentFilterType)))
366
- ]), h("slot", null), h("div", { class: "filter-actions" }, this.disableDynamicFiltering && [
366
+ ]), h("slot", null), ((_e = (_d = this.changes).extraBottomContent) === null || _e === void 0 ? void 0 : _e.call(_d, this.changes)) || '', h("div", { class: "filter-actions" }, this.disableDynamicFiltering && [
367
367
  h("button", { id: "revo-button-save", "aria-label": "save", class: "revo-button green", onClick: () => this.onSave() }, capts.save),
368
368
  h("button", { id: "revo-button-ok", "aria-label": "ok", class: "revo-button green", onClick: () => this.onCancel() }, capts.cancel),
369
369
  ], !this.disableDynamicFiltering && [