@revolist/revogrid 4.23.12 → 4.23.14

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 (61) hide show
  1. package/dist/cjs/{cell-renderer-DfUCisis.js → cell-renderer-Dcz022q7.js} +5 -23
  2. package/dist/cjs/{column.drag.plugin-BRraLvz3.js → column.drag.plugin-BGLbi1zS.js} +8 -37
  3. package/dist/cjs/{column.service-BNWNiJW3.js → column.service-C1Qvcf5l.js} +23 -62
  4. package/dist/cjs/{header-cell-renderer-DyjOxArm.js → header-cell-renderer-vVr4IWNV.js} +1 -1
  5. package/dist/cjs/index.cjs.js +4 -5
  6. package/dist/cjs/revo-grid.cjs.entry.js +5 -5
  7. package/dist/cjs/revogr-attribution_7.cjs.entry.js +4 -40
  8. package/dist/cjs/revogr-data_4.cjs.entry.js +5 -13
  9. package/dist/cjs/revogr-filter-panel.cjs.entry.js +67 -32
  10. package/dist/collection/components/data/column.service.js +23 -62
  11. package/dist/collection/components/data/row-renderer.js +2 -15
  12. package/dist/collection/components/overlay/revogr-overlay-selection.js +7 -27
  13. package/dist/collection/components/revoGrid/revo-grid.js +7 -14
  14. package/dist/collection/components/scroll/revogr-viewport-scroll.js +2 -10
  15. package/dist/collection/plugins/filter/filter.panel.js +66 -31
  16. package/dist/collection/plugins/filter/filter.plugin.js +4 -4
  17. package/dist/collection/plugins/filter/filter.style.css +18 -34
  18. package/dist/collection/plugins/groupingRow/grouping.row.renderer.js +2 -7
  19. package/dist/collection/plugins/moveColumn/column.drag.plugin.js +2 -30
  20. package/dist/collection/serve/controller.js +0 -1
  21. package/dist/esm/{cell-renderer-CLTRlCa5.js → cell-renderer-BtN-NGCk.js} +5 -23
  22. package/dist/esm/{column.drag.plugin-V9DDE3mU.js → column.drag.plugin-4Ixr4ijU.js} +9 -37
  23. package/dist/esm/{column.service-C6hByxPy.js → column.service-CC_SD8W3.js} +23 -62
  24. package/dist/esm/{header-cell-renderer-BMmXRsd_.js → header-cell-renderer-B-LX2sgu.js} +1 -1
  25. package/dist/esm/index.js +5 -5
  26. package/dist/esm/revo-grid.entry.js +5 -5
  27. package/dist/esm/revogr-attribution_7.entry.js +4 -40
  28. package/dist/esm/revogr-data_4.entry.js +5 -13
  29. package/dist/esm/revogr-filter-panel.entry.js +67 -32
  30. package/dist/revo-grid/{cell-renderer-CLTRlCa5.js → cell-renderer-BtN-NGCk.js} +5 -23
  31. package/dist/revo-grid/{column.drag.plugin-V9DDE3mU.js → column.drag.plugin-4Ixr4ijU.js} +9 -37
  32. package/dist/revo-grid/{column.service-C6hByxPy.js → column.service-CC_SD8W3.js} +23 -62
  33. package/dist/revo-grid/{header-cell-renderer-BMmXRsd_.js → header-cell-renderer-B-LX2sgu.js} +1 -1
  34. package/dist/revo-grid/index.esm.js +5 -5
  35. package/dist/revo-grid/revo-grid.entry.js +5 -5
  36. package/dist/revo-grid/revogr-attribution_7.entry.js +4 -40
  37. package/dist/revo-grid/revogr-data_4.entry.js +5 -13
  38. package/dist/revo-grid/revogr-filter-panel.entry.js +67 -32
  39. package/dist/types/components/data/column.service.d.ts +1 -10
  40. package/dist/types/components/data/row-renderer.d.ts +1 -1
  41. package/dist/types/components/overlay/revogr-overlay-selection.d.ts +3 -4
  42. package/dist/types/components/revoGrid/revo-grid.d.ts +4 -4
  43. package/dist/types/components.d.ts +14 -14
  44. package/dist/types/plugins/filter/filter.panel.d.ts +4 -0
  45. package/dist/types/plugins/filter/filter.plugin.d.ts +0 -1
  46. package/dist/types/plugins/filter/filter.types.d.ts +0 -1
  47. package/dist/types/plugins/moveColumn/column.drag.plugin.d.ts +0 -4
  48. package/dist/types/types/interfaces.d.ts +0 -8
  49. package/hydrate/index.js +107 -201
  50. package/hydrate/index.mjs +107 -201
  51. package/package.json +1 -1
  52. package/readme.md +1 -20
  53. package/standalone/column.service.js +1 -1
  54. package/standalone/index.js +1 -1
  55. package/standalone/revo-grid.js +1 -1
  56. package/standalone/revogr-data2.js +1 -1
  57. package/standalone/revogr-filter-panel.js +1 -1
  58. package/standalone/revogr-overlay-selection2.js +1 -1
  59. package/standalone/revogr-viewport-scroll2.js +1 -1
  60. package/dist/collection/components/overlay/clipboard.utils.js +0 -26
  61. package/dist/types/components/overlay/clipboard.utils.d.ts +0 -3
package/hydrate/index.mjs CHANGED
@@ -7395,7 +7395,7 @@ function isFilterBtn(e) {
7395
7395
  }
7396
7396
  })();
7397
7397
 
7398
- const filterStyleCss = () => `.revo-button{position:relative;overflow:hidden;color:#fff;background-color:#4545ff;height:32px;line-height:32px;padding:0 15px;outline:0;border:0;border-radius:7px;box-sizing:border-box;cursor:pointer}.revo-button.green{background-color:#009037}.revo-button.red{background-color:#E0662E}.revo-button:disabled,.revo-button[disabled]{cursor:not-allowed !important;filter:opacity(0.35) !important}.revo-button.outline{border:1px solid #dbdbdb;line-height:30px;background:none;color:#000;box-shadow:none}revo-grid[theme^=dark] .revo-button.outline{border:1px solid #404040;color:#d8d8d8}revogr-filter-panel{position:absolute;display:block;top:0;left:0;z-index:100;max-height:calc(100% - 80px);overflow:auto;opacity:1;transform:none;background-color:var(--revo-grid-filter-panel-bg, #fff);border:1px solid var(--revo-grid-filter-panel-border, #cecece);transform-origin:62px 0px;box-shadow:0 5px 18px -2px var(--revo-grid-filter-panel-shadow, rgba(0, 0, 0, 0.15));padding:10px;border-radius:8px;min-width:220px;text-align:left;animation:revogr-filter-panel-open 140ms cubic-bezier(0.2, 0, 0, 1)}revogr-filter-panel .filter-holder>div{display:flex;flex-direction:column}revogr-filter-panel label{font-size:13px;display:block;padding:8px 0}revogr-filter-panel select{width:100%}revogr-filter-panel input[type=text]{border:0;min-height:34px;margin:5px 0;background:var(--revo-grid-filter-panel-input-bg, #f3f3f3);border-radius:5px;padding:0 10px;box-sizing:border-box;width:100%}revogr-filter-panel .filter-actions{text-align:right;margin-right:-5px}revogr-filter-panel .filter-actions button{margin-top:10px;margin-right:5px}@keyframes revogr-filter-panel-open{from{opacity:0;transform:translateY(-4px) scale(0.98)}to{opacity:1;transform:none}}@media (prefers-reduced-motion: reduce){revogr-filter-panel{animation:none}}.rgHeaderCell:hover .rv-filter{transition:opacity 267ms cubic-bezier(0.4, 0, 0.2, 1) 0ms, transform 178ms cubic-bezier(0.4, 0, 0.2, 1) 0ms}.rgHeaderCell:hover .rv-filter,.rgHeaderCell .rv-filter.active{opacity:1}.rgHeaderCell .rv-filter{height:24px;width:24px;background:none;border:0;opacity:0;visibility:visible;cursor:pointer;border-radius:4px}.rgHeaderCell .rv-filter.active{color:#10224a}.rgHeaderCell .rv-filter .filter-img{color:gray;width:11px}.select-css{display:block;font-family:sans-serif;line-height:1.3;padding:0.6em 1.4em 0.5em 0.8em;width:100%;max-width:100%;box-sizing:border-box;margin:0;border:1px solid var(--revo-grid-filter-panel-select-border, #d9d9d9);box-shadow:transparent;border-radius:0.5em;appearance:none;background-color:var(--revo-grid-filter-panel-input-bg, #f3f3f3);background-image:url("data:image/svg+xml;charset=US-ASCII,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%22292.4%22%20height%3D%22292.4%22%3E%3Cpath%20fill%3D%22%23007CB2%22%20d%3D%22M287%2069.4a17.6%2017.6%200%200%200-13-5.4H18.4c-5%200-9.3%201.8-12.9%205.4A17.6%2017.6%200%200%200%200%2082.2c0%205%201.8%209.3%205.4%2012.9l128%20127.9c3.6%203.6%207.8%205.4%2012.8%205.4s9.2-1.8%2012.8-5.4L287%2095c3.5-3.5%205.4-7.8%205.4-12.8%200-5-1.9-9.2-5.5-12.8z%22%2F%3E%3C%2Fsvg%3E");background-repeat:no-repeat, repeat;background-position:right 0.7em top 50%, 0 0;background-size:0.65em auto, 100%;}.select-css::-ms-expand{display:none}.select-css:hover{border-color:var(--revo-grid-filter-panel-select-border, #d9d9d9)}.select-css:focus{border-color:var(--revo-grid-filter-panel-select-border-hover, #d9d9d9);box-shadow:0 0 1px 3px rgba(59, 153, 252, 0.7);box-shadow:0 0 0 3px -moz-mac-focusring;outline:none}.select-css option{font-weight:normal}.select-css:disabled,.select-css[aria-disabled=true]{color:gray;background-image:url("data:image/svg+xml;charset=US-ASCII,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%22292.4%22%20height%3D%22292.4%22%3E%3Cpath%20fill%3D%22graytext%22%20d%3D%22M287%2069.4a17.6%2017.6%200%200%200-13-5.4H18.4c-5%200-9.3%201.8-12.9%205.4A17.6%2017.6%200%200%200%200%2082.2c0%205%201.8%209.3%205.4%2012.9l128%20127.9c3.6%203.6%207.8%205.4%2012.8%205.4s9.2-1.8%2012.8-5.4L287%2095c3.5-3.5%205.4-7.8%205.4-12.8%200-5-1.9-9.2-5.5-12.8z%22%2F%3E%3C%2Fsvg%3E"), linear-gradient(to bottom, #ffffff 0%, #ffffff 100%)}.select-css:disabled:hover,.select-css[aria-disabled=true]{border-color:var(--revo-grid-filter-panel-select-border, #d9d9d9)}.multi-filter-list{margin-top:5px;margin-bottom:5px}.multi-filter-list div{white-space:nowrap}.multi-filter-list .multi-filter-list-row{display:flex;align-items:center;gap:6px}.multi-filter-list .multi-filter-list-action{display:flex;flex:0 0 auto;justify-content:flex-end;align-items:center}.multi-filter-list .and-or-button{margin:0 0 0 10px;min-width:58px;cursor:pointer}.multi-filter-list .trash-button{margin:0 0 -2px 6px;cursor:pointer;width:22px;height:100%;font-size:16px}.multi-filter-list .trash-button .trash-img{width:1em}.add-filter-divider{display:block;margin:0 -10px 10px -10px;border-bottom:1px solid var(--revo-grid-filter-panel-divider, #d9d9d9);height:10px}.select-input{display:flex;align-items:center;flex:1 1 auto;gap:6px;min-width:0}.select-input .select-filter,.select-input .filter-extra{flex:1 1 0;min-width:0}.select-input .filter-extra{display:flex}.select-input .filter-extra>*{width:100%}.select-input input[type=text],.select-input input[type=date]{margin:0}`;
7398
+ const filterStyleCss = () => `.revo-button{position:relative;overflow:hidden;color:#fff;background-color:#4545ff;height:32px;line-height:32px;padding:0 15px;outline:0;border:0;border-radius:7px;box-sizing:border-box;cursor:pointer}.revo-button.green{background-color:#009037}.revo-button.red{background-color:#E0662E}.revo-button:disabled,.revo-button[disabled]{cursor:not-allowed !important;filter:opacity(0.35) !important}.revo-button.outline{border:1px solid #dbdbdb;line-height:30px;background:none;color:#000;box-shadow:none}revo-grid[theme^=dark] .revo-button.outline{border:1px solid #404040;color:#d8d8d8}revogr-filter-panel{display:block}revogr-filter-panel .filter-panel-dialog{position:fixed;top:0;left:0;z-index:100;max-height:calc(100vh - 16px);overflow:auto;opacity:1;transform:none;background-color:var(--revo-grid-filter-panel-bg, #fff);border:1px solid var(--revo-grid-filter-panel-border, #cecece);transform-origin:62px 0px;box-shadow:0 5px 18px -2px var(--revo-grid-filter-panel-shadow, rgba(0, 0, 0, 0.15));padding:10px;border-radius:8px;margin:0;min-width:220px;text-align:left;animation:revogr-filter-panel-open 140ms cubic-bezier(0.2, 0, 0, 1)}revogr-filter-panel .filter-panel-dialog::backdrop{background:transparent}revogr-filter-panel .filter-panel-dialog .filter-holder>div{display:flex;flex-direction:column}revogr-filter-panel .filter-panel-dialog label{font-size:13px;display:block;padding:8px 0}revogr-filter-panel .filter-panel-dialog select{width:100%}revogr-filter-panel .filter-panel-dialog input[type=text]{border:0;min-height:34px;margin:5px 0;background:var(--revo-grid-filter-panel-input-bg, #f3f3f3);border-radius:5px;padding:0 10px;box-sizing:border-box;width:100%}revogr-filter-panel .filter-panel-dialog .filter-actions{text-align:right;margin-right:-5px}revogr-filter-panel .filter-panel-dialog .filter-actions button{margin-top:10px;margin-right:5px}@keyframes revogr-filter-panel-open{from{opacity:0;transform:translateY(-4px) scale(0.98)}to{opacity:1;transform:none}}@media (prefers-reduced-motion: reduce){revogr-filter-panel .filter-panel-dialog{animation:none}}.rgHeaderCell:hover .rv-filter{transition:opacity 267ms cubic-bezier(0.4, 0, 0.2, 1) 0ms, transform 178ms cubic-bezier(0.4, 0, 0.2, 1) 0ms}.rgHeaderCell:hover .rv-filter,.rgHeaderCell .rv-filter.active{opacity:1}.rgHeaderCell .rv-filter{height:24px;width:24px;background:none;border:0;opacity:0;visibility:visible;cursor:pointer;border-radius:4px}.rgHeaderCell .rv-filter.active{color:#10224a}.rgHeaderCell .rv-filter .filter-img{color:gray;width:11px}.select-css{display:block;font-family:sans-serif;line-height:1.3;padding:0.6em 1.4em 0.5em 0.8em;width:100%;max-width:100%;box-sizing:border-box;margin:0;border:1px solid var(--revo-grid-filter-panel-select-border, #d9d9d9);box-shadow:transparent;border-radius:0.5em;appearance:none;background-color:var(--revo-grid-filter-panel-input-bg, #f3f3f3);background-image:url("data:image/svg+xml;charset=US-ASCII,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%22292.4%22%20height%3D%22292.4%22%3E%3Cpath%20fill%3D%22%23007CB2%22%20d%3D%22M287%2069.4a17.6%2017.6%200%200%200-13-5.4H18.4c-5%200-9.3%201.8-12.9%205.4A17.6%2017.6%200%200%200%200%2082.2c0%205%201.8%209.3%205.4%2012.9l128%20127.9c3.6%203.6%207.8%205.4%2012.8%205.4s9.2-1.8%2012.8-5.4L287%2095c3.5-3.5%205.4-7.8%205.4-12.8%200-5-1.9-9.2-5.5-12.8z%22%2F%3E%3C%2Fsvg%3E");background-repeat:no-repeat, repeat;background-position:right 0.7em top 50%, 0 0;background-size:0.65em auto, 100%;}.select-css::-ms-expand{display:none}.select-css:hover{border-color:var(--revo-grid-filter-panel-select-border, #d9d9d9)}.select-css:focus{border-color:var(--revo-grid-filter-panel-select-border-hover, #d9d9d9);box-shadow:0 0 1px 3px rgba(59, 153, 252, 0.7);box-shadow:0 0 0 3px -moz-mac-focusring;outline:none}.select-css option{font-weight:normal}.select-css:disabled,.select-css[aria-disabled=true]{color:gray;background-image:url("data:image/svg+xml;charset=US-ASCII,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%22292.4%22%20height%3D%22292.4%22%3E%3Cpath%20fill%3D%22graytext%22%20d%3D%22M287%2069.4a17.6%2017.6%200%200%200-13-5.4H18.4c-5%200-9.3%201.8-12.9%205.4A17.6%2017.6%200%200%200%200%2082.2c0%205%201.8%209.3%205.4%2012.9l128%20127.9c3.6%203.6%207.8%205.4%2012.8%205.4s9.2-1.8%2012.8-5.4L287%2095c3.5-3.5%205.4-7.8%205.4-12.8%200-5-1.9-9.2-5.5-12.8z%22%2F%3E%3C%2Fsvg%3E"), linear-gradient(to bottom, #ffffff 0%, #ffffff 100%)}.select-css:disabled:hover,.select-css[aria-disabled=true]{border-color:var(--revo-grid-filter-panel-select-border, #d9d9d9)}.multi-filter-list{margin-top:5px;margin-bottom:5px}.multi-filter-list div{white-space:nowrap}.multi-filter-list .multi-filter-list-action{display:flex;justify-content:space-between;align-items:center}.multi-filter-list .and-or-button{margin:0 0 0 10px;min-width:58px;cursor:pointer}.multi-filter-list .trash-button{margin:0 0 -2px 6px;cursor:pointer;width:22px;height:100%;font-size:16px}.multi-filter-list .trash-button .trash-img{width:1em}.add-filter-divider{display:block;margin:0 -10px 10px -10px;border-bottom:1px solid var(--revo-grid-filter-panel-divider, #d9d9d9);height:10px}.select-input{display:flex;justify-content:space-between;align-items:center}`;
7399
7399
 
7400
7400
  const defaultType = 'none';
7401
7401
  const FILTER_LIST_CLASS = 'multi-filter-list';
@@ -7506,24 +7506,56 @@ class FilterPanel {
7506
7506
  if (index !== this.filterItems[prop].length - 1) {
7507
7507
  andOrButton = (hAsync("div", { onClick: () => this.toggleFilterAndOr(filter.id) }, hAsync(AndOrButton, { text: filter.relation === 'and' ? capts.and : capts.or })));
7508
7508
  }
7509
- const extra = this.renderExtra(prop, index);
7510
- return (hAsync("div", { key: filter.id, class: FILTER_LIST_CLASS }, hAsync("div", { class: "multi-filter-list-row" }, hAsync("div", { class: { 'select-input': true } }, hAsync("select", { class: "select-css select-filter", onChange: e => this.onFilterTypeChange(e, prop, index) }, this.renderSelectOptions(this.filterItems[prop][index].type, true)), extra ? hAsync("div", { class: "filter-extra" }, extra) : ''), hAsync("div", { class: FILTER_LIST_CLASS_ACTION }, andOrButton, hAsync("div", { onClick: () => this.onRemoveFilter(filter.id) }, hAsync(TrashButton, null))))));
7509
+ return (hAsync("div", { key: filter.id, class: FILTER_LIST_CLASS }, hAsync("div", { class: { 'select-input': true } }, hAsync("select", { class: "select-css select-filter", onChange: e => this.onFilterTypeChange(e, prop, index) }, this.renderSelectOptions(this.filterItems[prop][index].type, true)), hAsync("div", { class: FILTER_LIST_CLASS_ACTION }, andOrButton), hAsync("div", { onClick: () => this.onRemoveFilter(filter.id) }, hAsync(TrashButton, null))), hAsync("div", null, this.renderExtra(prop, index))));
7511
7510
  }), propFilters.filter(f => !f.hidden).length > 0 ? hAsync("div", { class: "add-filter-divider" }) : ''));
7512
7511
  }
7512
+ componentDidRender() {
7513
+ this.syncDialog();
7514
+ }
7515
+ syncDialog() {
7516
+ if (!this.dialog) {
7517
+ return;
7518
+ }
7519
+ if (!this.changes) {
7520
+ if (this.dialog.open) {
7521
+ this.dialog.close();
7522
+ }
7523
+ return;
7524
+ }
7525
+ if (!this.dialog.open) {
7526
+ this.dialog.show();
7527
+ }
7528
+ if (this.changes.autoCorrect !== false) {
7529
+ requestAnimationFrame(() => this.autoCorrect(this.dialog));
7530
+ }
7531
+ }
7513
7532
  autoCorrect(el) {
7514
- var _a, _b;
7515
7533
  if (!el) {
7516
7534
  return;
7517
7535
  }
7518
- const revoGrid = el.closest('revo-grid');
7519
- if (!revoGrid) {
7536
+ const pos = el.getBoundingClientRect();
7537
+ const maxLeft = Math.max(0, window.innerWidth - pos.width);
7538
+ const maxTop = Math.max(0, window.innerHeight - pos.height);
7539
+ if (pos.left > maxLeft) {
7540
+ el.style.left = `${maxLeft}px`;
7541
+ }
7542
+ if (pos.top > maxTop) {
7543
+ el.style.top = `${maxTop}px`;
7544
+ }
7545
+ }
7546
+ onDialogMouseDown(e) {
7547
+ if (!this.closeOnOutsideClick ||
7548
+ e.target !== this.dialog ||
7549
+ !this.dialog) {
7520
7550
  return;
7521
7551
  }
7522
- const pos = el.getBoundingClientRect();
7523
- const gridPos = revoGrid.getBoundingClientRect();
7524
- const maxLeft = gridPos.right - pos.width;
7525
- if (pos.left > maxLeft && el.offsetLeft) {
7526
- el.style.left = `${maxLeft - ((_b = (_a = el.parentElement) === null || _a === void 0 ? void 0 : _a.getBoundingClientRect().left) !== null && _b !== void 0 ? _b : 0)}px`;
7552
+ const rect = this.dialog.getBoundingClientRect();
7553
+ const isInside = e.clientX >= rect.left &&
7554
+ e.clientX <= rect.right &&
7555
+ e.clientY >= rect.top &&
7556
+ e.clientY <= rect.bottom;
7557
+ if (!isInside) {
7558
+ this.onCancel();
7527
7559
  }
7528
7560
  }
7529
7561
  onFilterTypeChange(e, prop, index) {
@@ -7724,30 +7756,33 @@ class FilterPanel {
7724
7756
  } }));
7725
7757
  }
7726
7758
  render() {
7727
- var _a, _b, _c, _d, _e;
7728
- if (!this.changes) {
7729
- return hAsync(Host, { style: { display: 'none' } });
7730
- }
7759
+ var _a, _b, _c, _d, _e, _f, _g;
7731
7760
  const style = {
7732
- display: 'block',
7733
- left: `${this.changes.x}px`,
7734
- top: `${this.changes.y}px`,
7761
+ left: `${(_b = (_a = this.changes) === null || _a === void 0 ? void 0 : _a.x) !== null && _b !== void 0 ? _b : 0}px`,
7762
+ top: `${(_d = (_c = this.changes) === null || _c === void 0 ? void 0 : _c.y) !== null && _d !== void 0 ? _d : 0}px`,
7735
7763
  };
7736
7764
  const capts = Object.assign(this.filterCaptionsInternal, this.filterCaptions);
7737
- return (hAsync(Host, { style: style, ref: el => {
7738
- var _a;
7739
- ((_a = this.changes) === null || _a === void 0 ? void 0 : _a.autoCorrect) !== false && this.autoCorrect(el);
7740
- } }, hAsync("slot", { slot: "header" }), ((_b = (_a = this.changes).extraContent) === null || _b === void 0 ? void 0 : _b.call(_a, this.changes)) || '', ((_c = this.changes) === null || _c === void 0 ? void 0 : _c.hideDefaultFilters) !== true && ([
7741
- hAsync("label", null, capts.title),
7742
- hAsync("div", { class: "filter-holder" }, this.getFilterItemsList()),
7743
- hAsync("div", { class: "add-filter" }, hAsync("select", { id: FILTER_ID, class: "select-css", onChange: e => this.onAddNewFilter(e) }, this.renderSelectOptions(this.currentFilterType)))
7744
- ]), hAsync("slot", null), ((_e = (_d = this.changes).extraBottomContent) === null || _e === void 0 ? void 0 : _e.call(_d, this.changes)) || '', hAsync("div", { class: "filter-actions" }, this.disableDynamicFiltering && [
7745
- hAsync("button", { id: "revo-button-save", "aria-label": "save", class: "revo-button green", onClick: () => this.onSave() }, capts.save),
7746
- hAsync("button", { id: "revo-button-ok", "aria-label": "ok", class: "revo-button green", onClick: () => this.onCancel() }, capts.cancel),
7747
- ], !this.disableDynamicFiltering && [
7748
- hAsync("button", { id: "revo-button-ok", "aria-label": "ok", class: "revo-button green", onClick: () => this.onCancel() }, capts.ok),
7749
- hAsync("button", { id: "revo-button-reset", "aria-label": "reset", class: "revo-button outline", onClick: () => this.onReset() }, capts.reset),
7750
- ]), hAsync("slot", { slot: "footer" })));
7765
+ return (hAsync(Host, { key: '9fb424017d080876ff7796237917b4f41f617fe0' }, hAsync("dialog", { key: '37b9f870b95f6fe1bd7be359dd7b77ef196e896e', class: "filter-panel-dialog", style: style, ref: el => (this.dialog = el), onCancel: e => {
7766
+ e.preventDefault();
7767
+ this.onCancel();
7768
+ }, onMouseDown: e => this.onDialogMouseDown(e) }, this.changes && [
7769
+ hAsync("slot", { key: '76ec505a92d0a7c1ae0bbb5f4cac63555f3416be', slot: "header" }),
7770
+ ((_f = (_e = this.changes).extraContent) === null || _f === void 0 ? void 0 : _f.call(_e, this.changes)) || '',
7771
+ ((_g = this.changes) === null || _g === void 0 ? void 0 : _g.hideDefaultFilters) !== true && [
7772
+ hAsync("label", { key: 'c6fd82c95f6005f286c7bc90de34956128a83246' }, capts.title),
7773
+ hAsync("div", { key: '5e7dac36ad79ba1b6072a0053b30aa384ade0dde', class: "filter-holder" }, this.getFilterItemsList()),
7774
+ hAsync("div", { key: 'd9b6103edbd138d4db845745686ee4c847310a66', class: "add-filter" }, hAsync("select", { key: 'c1b321f2d19458f95ab3f9188d83d94bebdb688e', id: FILTER_ID, class: "select-css", onChange: e => this.onAddNewFilter(e) }, this.renderSelectOptions(this.currentFilterType))),
7775
+ ],
7776
+ hAsync("slot", { key: '1571dcbc5c57651deb42a4046272ff60fa74f5a7' }),
7777
+ hAsync("div", { key: '4aa7dee532336b084542df0209291b4c60378b49', class: "filter-actions" }, this.disableDynamicFiltering && [
7778
+ hAsync("button", { key: '4c1b3054cd1bb7f46877592f00f6634d0f7ecafa', id: "revo-button-save", "aria-label": "save", class: "revo-button green", onClick: () => this.onSave() }, capts.save),
7779
+ hAsync("button", { key: 'f31a568c89be18b1a854cdd7d4726e01db24e338', id: "revo-button-ok", "aria-label": "ok", class: "revo-button green", onClick: () => this.onCancel() }, capts.cancel),
7780
+ ], !this.disableDynamicFiltering && [
7781
+ hAsync("button", { key: '5d40e8b1f13f94cff4f5a2e2aefeee8861104a9d', id: "revo-button-ok", "aria-label": "ok", class: "revo-button green", onClick: () => this.onCancel() }, capts.ok),
7782
+ hAsync("button", { key: '67eac3abd16f6f6e2ed7089dcfb0d05524ddb7df', id: "revo-button-reset", "aria-label": "reset", class: "revo-button outline", onClick: () => this.onReset() }, capts.reset),
7783
+ ]),
7784
+ hAsync("slot", { key: 'b27a9bb3ef814e1e09dca14eda3e332ff34c654c', slot: "footer" }),
7785
+ ])));
7751
7786
  }
7752
7787
  get element() { return getElement(this); }
7753
7788
  static get style() { return filterStyleCss(); }
@@ -13047,82 +13082,43 @@ class ColumnService {
13047
13082
  mapping,
13048
13083
  };
13049
13084
  }
13050
- getTransformedDataToApply({ start, data, targetRange, }) {
13085
+ getTransformedDataToApply(start, data) {
13051
13086
  const changed = {};
13052
13087
  const copyRowLength = data.length;
13053
- if (!copyRowLength) {
13054
- return {
13055
- changed,
13056
- range: null,
13057
- };
13058
- }
13059
13088
  const colLength = this.columns.length;
13060
13089
  const rowLength = this.dataStore.get('items').length;
13061
- const bounds = this.getDataApplyBounds(start, targetRange, copyRowLength, rowLength, colLength);
13062
- if (!bounds) {
13063
- return {
13064
- changed,
13065
- range: null,
13066
- };
13067
- }
13068
- const { startRow, startCol, endRow } = bounds;
13069
- let maxCol = startCol - 1;
13070
- let lastRow = startRow - 1;
13071
13090
  // rows
13072
- for (let rowIndex = startRow, i = 0; rowIndex <= endRow; rowIndex++, i++) {
13091
+ let rowIndex = start.y;
13092
+ let maxCol = 0;
13093
+ for (let i = 0; rowIndex < rowLength && i < copyRowLength; rowIndex++, i++) {
13073
13094
  // copy original data link
13074
13095
  const copyRow = data[i % copyRowLength];
13075
13096
  const copyColLength = (copyRow === null || copyRow === void 0 ? void 0 : copyRow.length) || 0;
13076
- if (!copyColLength) {
13077
- continue;
13097
+ // columns
13098
+ let colIndex = start.x;
13099
+ for (let j = 0; colIndex < colLength && j < copyColLength; colIndex++, j++) {
13100
+ const p = this.columns[colIndex].prop;
13101
+ const currentCol = j % colLength;
13102
+ /** if can write */
13103
+ if (!this.isReadOnly(rowIndex, colIndex)) {
13104
+ /** to show before save */
13105
+ if (!changed[rowIndex]) {
13106
+ changed[rowIndex] = {};
13107
+ }
13108
+ changed[rowIndex][p] = copyRow[currentCol];
13109
+ }
13078
13110
  }
13079
- maxCol = Math.max(maxCol, this.applyClipboardRow(changed, {
13080
- bounds,
13081
- copyColLength,
13082
- copyRow,
13083
- rowIndex,
13084
- start,
13085
- targetRange,
13086
- }));
13087
- lastRow = rowIndex;
13111
+ maxCol = Math.max(maxCol, colIndex - 1);
13088
13112
  }
13113
+ const range = getRange(start, {
13114
+ y: rowIndex - 1,
13115
+ x: maxCol,
13116
+ });
13089
13117
  return {
13090
13118
  changed,
13091
- range: this.getAppliedRange(bounds, lastRow, maxCol),
13119
+ range,
13092
13120
  };
13093
13121
  }
13094
- getDataApplyBounds(start, targetRange, copyRowLength, rowLength, colLength) {
13095
- var _a, _b, _c;
13096
- const startRow = (_a = targetRange === null || targetRange === void 0 ? void 0 : targetRange.y) !== null && _a !== void 0 ? _a : start.y;
13097
- const startCol = (_b = targetRange === null || targetRange === void 0 ? void 0 : targetRange.x) !== null && _b !== void 0 ? _b : start.x;
13098
- const endRow = Math.min(rowLength - 1, (_c = targetRange === null || targetRange === void 0 ? void 0 : targetRange.y1) !== null && _c !== void 0 ? _c : start.y + copyRowLength - 1);
13099
- if (endRow < startRow || startCol >= colLength) {
13100
- return null;
13101
- }
13102
- return { startRow, startCol, endRow, colLength };
13103
- }
13104
- applyClipboardRow(changed, { bounds, copyColLength, copyRow, rowIndex, start, targetRange, }) {
13105
- var _a;
13106
- const endCol = Math.min(bounds.colLength - 1, (_a = targetRange === null || targetRange === void 0 ? void 0 : targetRange.x1) !== null && _a !== void 0 ? _a : start.x + copyColLength - 1);
13107
- for (let colIndex = bounds.startCol, j = 0; colIndex <= endCol; colIndex++, j++) {
13108
- if (this.isReadOnly(rowIndex, colIndex)) {
13109
- continue;
13110
- }
13111
- const prop = this.columns[colIndex].prop;
13112
- changed[rowIndex] = changed[rowIndex] || {};
13113
- changed[rowIndex][prop] = copyRow[j % copyColLength];
13114
- }
13115
- return endCol;
13116
- }
13117
- getAppliedRange({ startRow, startCol }, lastRow, maxCol) {
13118
- if (lastRow < startRow || maxCol < startCol) {
13119
- return null;
13120
- }
13121
- return getRange({ x: startCol, y: startRow }, {
13122
- y: lastRow,
13123
- x: maxCol,
13124
- });
13125
- }
13126
13122
  getRangeStaticData(d, value) {
13127
13123
  const changed = {};
13128
13124
  // rows
@@ -13789,30 +13785,6 @@ class AutoFillService {
13789
13785
  }
13790
13786
  }
13791
13787
 
13792
- function getRangeFillClipboardData(data, useClipboard) {
13793
- var _a;
13794
- if (!isClipboardRangeFillEnabled(useClipboard)) {
13795
- return null;
13796
- }
13797
- const normalized = trimTrailingEmptyClipboardRows(data);
13798
- return normalized.length === 1 && ((_a = normalized[0]) === null || _a === void 0 ? void 0 : _a.length) === 1
13799
- ? normalized
13800
- : null;
13801
- }
13802
- function isClipboardRangeFillEnabled(useClipboard) {
13803
- return (typeof useClipboard === 'object' && useClipboard.rangeFill === true);
13804
- }
13805
- function trimTrailingEmptyClipboardRows(data) {
13806
- const rows = [...data];
13807
- while (rows.length > 1 && isEmptyClipboardRow(rows[rows.length - 1])) {
13808
- rows.pop();
13809
- }
13810
- return rows;
13811
- }
13812
- function isEmptyClipboardRow(row) {
13813
- return !row || row.every(cell => cell === '');
13814
- }
13815
-
13816
13788
  const revogrOverlayStyleCss = () => `revogr-overlay-selection{display:block;position:relative;width:100%}revogr-overlay-selection .autofill-handle{position:absolute;width:14px;height:14px;margin-left:-13px;margin-top:-13px;z-index:10;cursor:crosshair}revogr-overlay-selection .autofill-handle::before{content:"";position:absolute;right:0;bottom:0;width:10px;height:10px;background:#0d63e8;border:1px solid white;box-sizing:border-box}revogr-overlay-selection.mobile .autofill-handle{position:absolute;width:30px;height:30px;margin-left:-29px;margin-top:-29px;z-index:10;cursor:crosshair}revogr-overlay-selection.mobile .autofill-handle::before{content:"";position:absolute;right:0;bottom:0;width:12px;height:12px;background:#0d63e8;border:1px solid white;box-sizing:border-box}revogr-overlay-selection .selection-border-range{position:absolute;pointer-events:none;z-index:9;box-shadow:-1px 0 0 #0d63e8 inset, 1px 0 0 #0d63e8 inset, 0 -1px 0 #0d63e8 inset, 0 1px 0 #0d63e8 inset}revogr-overlay-selection .selection-border-range .range-handlers{height:100%;background-color:transparent;width:75%;max-width:50px;min-width:20px;left:50%;transform:translateX(-50%);position:absolute}revogr-overlay-selection .selection-border-range .range-handlers>span{pointer-events:auto;height:20px;width:20px;position:absolute;left:50%;transform:translateX(-50%)}revogr-overlay-selection .selection-border-range .range-handlers>span:before,revogr-overlay-selection .selection-border-range .range-handlers>span:after{position:absolute;border-radius:5px;width:15px;height:5px;left:50%;transform:translateX(-50%);background-color:rgba(0, 0, 0, 0.2)}revogr-overlay-selection .selection-border-range .range-handlers>span:first-child{top:-7px}revogr-overlay-selection .selection-border-range .range-handlers>span:first-child:before{content:"";top:0}revogr-overlay-selection .selection-border-range .range-handlers>span:last-child{bottom:-7px}revogr-overlay-selection .selection-border-range .range-handlers>span:last-child:after{content:"";bottom:0}revogr-overlay-selection revogr-edit{z-index:10}`;
13817
13789
 
13818
13790
  /**
@@ -14063,9 +14035,9 @@ class OverlaySelection {
14063
14035
  nodes.push(hAsync("revogr-order-editor", { ref: e => (this.orderEditor = e), dataStore: this.dataStore, dimensionRow: this.dimensionRow, dimensionCol: this.dimensionCol, parent: this.element, rowType: this.types.rowType, onRowdragstartinit: e => this.rowDragStart(e) }));
14064
14036
  }
14065
14037
  }
14066
- return (hAsync(Host, { key: 'ff303c39d59e4ef217421fa11b9a80de07311b07', class: { mobile: this.isMobileDevice }, onDblClick: (e) => this.onElementDblClick(e), onMouseDown: (e) => this.onElementMouseDown(e), onTouchStart: (e) => this.onElementMouseDown(e, true), onCloseedit: (e) => this.closeEdit(e),
14038
+ return (hAsync(Host, { key: 'd936e8452e84c7a25ecd6502e929f1a5af69467f', class: { mobile: this.isMobileDevice }, onDblClick: (e) => this.onElementDblClick(e), onMouseDown: (e) => this.onElementMouseDown(e), onTouchStart: (e) => this.onElementMouseDown(e, true), onCloseedit: (e) => this.closeEdit(e),
14067
14039
  // it's done to be able to throw events from different levels, not just from editor
14068
- onCelledit: (e) => this.onEditCell(e) }, nodes, hAsync("slot", { key: '3cbe4c3ad7d447f779e9e20f73eec2e3107275e0', name: "data" })));
14040
+ onCelledit: (e) => this.onEditCell(e) }, nodes, hAsync("slot", { key: 'cd3525d404aa44fd8d06e7fc459777acb8a9d585', name: "data" })));
14069
14041
  }
14070
14042
  /**
14071
14043
  * Executes the focus operation on the specified range of cells.
@@ -14230,25 +14202,13 @@ class OverlaySelection {
14230
14202
  if (!focus || isEditing) {
14231
14203
  return;
14232
14204
  }
14233
- const rangeFillData = getRangeFillClipboardData(data, this.useClipboard);
14234
- const targetRange = rangeFillData
14235
- ? this.getClipboardPasteTargetRange()
14236
- : null;
14237
- let { changed, range } = this.columnService.getTransformedDataToApply({
14238
- start: focus,
14239
- data: rangeFillData || data,
14240
- targetRange,
14241
- });
14205
+ let { changed, range } = this.columnService.getTransformedDataToApply(focus, data);
14242
14206
  const { defaultPrevented: canPaste } = this.rangeClipboardPaste.emit(Object.assign({ data: changed, models: collectModelsOfRange(changed, this.dataStore), range }, this.types));
14243
14207
  if (canPaste) {
14244
14208
  return;
14245
14209
  }
14246
14210
  (_a = this.autoFillService) === null || _a === void 0 ? void 0 : _a.onRangeApply(changed, range, range);
14247
14211
  }
14248
- getClipboardPasteTargetRange() {
14249
- const range = this.selectionStore.get('range');
14250
- return range && !isRangeSingleCell(range) ? range : null;
14251
- }
14252
14212
  async focusNext() {
14253
14213
  var _a;
14254
14214
  const canFocus = await ((_a = this.keyboardService) === null || _a === void 0 ? void 0 : _a.keyChangeSelection(new KeyboardEvent('keydown', {
@@ -15780,7 +15740,8 @@ class FilterPlugin extends BasePlugin {
15780
15740
  async headerclick(e) {
15781
15741
  var _a, _b;
15782
15742
  const el = (_a = e.detail.originalEvent) === null || _a === void 0 ? void 0 : _a.target;
15783
- if (!isFilterBtn(el)) {
15743
+ const filterButton = isFilterBtn(el);
15744
+ if (!filterButton) {
15784
15745
  return;
15785
15746
  }
15786
15747
  e.preventDefault();
@@ -15794,9 +15755,8 @@ class FilterPlugin extends BasePlugin {
15794
15755
  return;
15795
15756
  }
15796
15757
  // filter button clicked, open filter dialog
15797
- const gridPos = this.revogrid.getBoundingClientRect();
15798
- const buttonPos = el.getBoundingClientRect();
15799
- 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 });
15758
+ const buttonPos = (filterButton instanceof HTMLElement ? filterButton : el).getBoundingClientRect();
15759
+ const data = Object.assign(Object.assign(Object.assign({}, e.detail), this.filterCollection[prop]), { x: buttonPos.x, y: buttonPos.y + buttonPos.height, autoCorrect: true, filterTypes: this.getColumnFilter(e.detail.filter), filterItems: this.multiFilterItems, extraContent: this.extraHyperContent });
15800
15760
  (_b = this.beforeshow) === null || _b === void 0 ? void 0 : _b.call(this, data);
15801
15761
  this.pop.show(data);
15802
15762
  }
@@ -17054,22 +17014,9 @@ function filterOutEmptyGroupRows(source, filterTrimmed) {
17054
17014
  return trimmed;
17055
17015
  }
17056
17016
 
17057
- var __rest$1 = (undefined && undefined.__rest) || function (s, e) {
17058
- var t = {};
17059
- for (var p in s)
17060
- if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
17061
- t[p] = s[p];
17062
- if (s != null && typeof Object.getOwnPropertySymbols === "function")
17063
- for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
17064
- if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
17065
- t[p[i]] = s[p[i]];
17066
- }
17067
- return t;
17068
- };
17069
17017
  const PADDING_DEPTH = 10;
17070
- const RowRenderer = (_a, cells) => {
17071
- var { rowClass, index, size, start, depth, groupingLevel } = _a, attrs = __rest$1(_a, ["rowClass", "index", "size", "start", "depth", "groupingLevel"]);
17072
- const props = Object.assign(Object.assign(Object.assign({}, attrs), { [DATA_ROW]: index }), (typeof groupingLevel === 'number'
17018
+ const RowRenderer = ({ rowClass, index, size, start, depth, groupingLevel }, cells) => {
17019
+ const props = Object.assign({ [DATA_ROW]: index }, (typeof groupingLevel === 'number'
17073
17020
  ? { 'data-level': groupingLevel }
17074
17021
  : {}));
17075
17022
  return (hAsync("div", Object.assign({}, props, { class: `rgRow ${rowClass || ''}`, style: {
@@ -17096,17 +17043,12 @@ const GroupingRowRenderer = (props) => {
17096
17043
  const name = model[PSEUDO_GROUP_ITEM];
17097
17044
  const expanded = model[GROUP_EXPANDED];
17098
17045
  const depth = parseInt(model[GROUP_DEPTH], 10) || 0;
17099
- const groupRowAttrs = {
17100
- rowClass: 'groupingRow',
17101
- depth,
17102
- expanded,
17103
- };
17104
17046
  if (groupingCustomRenderer) {
17105
- return (hAsync(RowRenderer, Object.assign({}, props, groupRowAttrs), hAsync("div", { onClick: e => expandEvent(e, model, itemIndex) }, groupingCustomRenderer(hAsync, Object.assign(Object.assign({}, props), { colType: props.providers.colType, name,
17047
+ return (hAsync(RowRenderer, Object.assign({}, props, { rowClass: "groupingRow", depth: depth }), hAsync("div", { onClick: e => expandEvent(e, model, itemIndex) }, groupingCustomRenderer(hAsync, Object.assign(Object.assign({}, props), { colType: props.providers.colType, name,
17106
17048
  expanded,
17107
17049
  depth })))));
17108
17050
  }
17109
- return (hAsync(RowRenderer, Object.assign({}, props, groupRowAttrs), hasExpand && [
17051
+ return (hAsync(RowRenderer, Object.assign({}, props, { rowClass: "groupingRow", depth: depth }), hasExpand && [
17110
17052
  hAsync("button", { class: { [GROUP_EXPAND_BTN]: true }, onClick: e => expandEvent(e, model, itemIndex) }, expandSvgIconVNode(expanded)),
17111
17053
  name,
17112
17054
  ]));
@@ -18579,17 +18521,8 @@ class ColumnMovePlugin extends BasePlugin {
18579
18521
  constructor(revogrid, providers) {
18580
18522
  super(revogrid, providers);
18581
18523
  this.moveFunc = debounce$1((e) => this.doMove(e), 5);
18582
- this.preventHeaderClickAfterDrag = (event) => {
18583
- if (!this.preventNextHeaderClick) {
18584
- return;
18585
- }
18586
- this.preventNextHeaderClick = false;
18587
- event.preventDefault();
18588
- };
18589
18524
  this.staticDragData = null;
18590
18525
  this.dragData = null;
18591
- this.columnDragMoved = false;
18592
- this.preventNextHeaderClick = false;
18593
18526
  this.localSubscriptions = {};
18594
18527
  this.orderUi = new ColumnOrderHandler();
18595
18528
  revogrid.appendChild(this.orderUi.render());
@@ -18608,13 +18541,11 @@ class ColumnMovePlugin extends BasePlugin {
18608
18541
  callback: (e) => this.move(e),
18609
18542
  };
18610
18543
  this.addEventListener(COLUMN_CLICK, ({ detail }) => this.dragStart(detail));
18611
- this.revogrid.addEventListener('beforeheaderclick', this.preventHeaderClickAfterDrag, { capture: true });
18612
18544
  }
18613
18545
  dragStart({ event, data }) {
18614
18546
  if (event.defaultPrevented) {
18615
18547
  return;
18616
18548
  }
18617
- this.preventNextHeaderClick = false;
18618
18549
  const { defaultPrevented } = dispatch(this.revogrid, COLUMN_DRAG_START_EVENT, data);
18619
18550
  // check if allowed to drag particulat column
18620
18551
  if (defaultPrevented) {
@@ -18636,8 +18567,7 @@ class ColumnMovePlugin extends BasePlugin {
18636
18567
  const cols = this.getDimension(data.pin || 'rgCol');
18637
18568
  const gridRect = this.revogrid.getBoundingClientRect();
18638
18569
  const elRect = dataEl.getBoundingClientRect();
18639
- const startItem = getItemByPosition(cols, getLeftRelative(event.x, gridRect.left, elRect.left - gridRect.left) +
18640
- (cols.renderOffset || 0));
18570
+ const startItem = getItemByPosition(cols, getLeftRelative(event.x, gridRect.left, elRect.left - gridRect.left) + (cols.renderOffset || 0));
18641
18571
  this.staticDragData = {
18642
18572
  startPos: event.x,
18643
18573
  startItem,
@@ -18668,14 +18598,10 @@ class ColumnMovePlugin extends BasePlugin {
18668
18598
  if (rgCol.itemIndex >= this.staticDragData.cols.count) {
18669
18599
  return;
18670
18600
  }
18671
- this.orderUi.showHandler(getColumnDragPosition(rgCol, this.staticDragData.startItem, this.staticDragData.cols.renderOffset || 0, dragData.scrollOffset), dragData.gridRect.width);
18601
+ this.orderUi.showHandler(rgCol.end - (this.staticDragData.cols.renderOffset || 0) + dragData.scrollOffset, dragData.gridRect.width);
18672
18602
  }
18673
18603
  }
18674
18604
  move(e) {
18675
- if (this.staticDragData &&
18676
- Math.abs(this.staticDragData.startPos - e.x) > 10) {
18677
- this.columnDragMoved = true;
18678
- }
18679
18605
  dispatch(this.revogrid, COLUMN_DRAG_MOVE_EVENT, e);
18680
18606
  // then do move
18681
18607
  this.moveFunc(e);
@@ -18684,7 +18610,6 @@ class ColumnMovePlugin extends BasePlugin {
18684
18610
  this.clearOrder();
18685
18611
  }
18686
18612
  onMouseUp(e) {
18687
- const suppressClick = this.columnDragMoved;
18688
18613
  // apply new positions
18689
18614
  if (this.dragData && this.staticDragData) {
18690
18615
  let relativePos = getLeftRelative(e.x, this.dragData.gridRect.left, this.dragData.scrollOffset);
@@ -18707,9 +18632,6 @@ class ColumnMovePlugin extends BasePlugin {
18707
18632
  }
18708
18633
  dispatch(this.revogrid, COLUMN_DRAG_END_EVENT, this.getData(this.staticDragData, newItems, source));
18709
18634
  }
18710
- if (suppressClick) {
18711
- this.preventNextHeaderClick = !!e.target.closest('revogr-header');
18712
- }
18713
18635
  this.clearOrder();
18714
18636
  }
18715
18637
  clearLocalSubscriptions() {
@@ -18718,7 +18640,6 @@ class ColumnMovePlugin extends BasePlugin {
18718
18640
  clearOrder() {
18719
18641
  this.staticDragData = null;
18720
18642
  this.dragData = null;
18721
- this.columnDragMoved = false;
18722
18643
  this.clearLocalSubscriptions();
18723
18644
  this.orderUi.stop(this.revogrid);
18724
18645
  }
@@ -18728,7 +18649,6 @@ class ColumnMovePlugin extends BasePlugin {
18728
18649
  clearSubscriptions() {
18729
18650
  super.clearSubscriptions();
18730
18651
  this.clearLocalSubscriptions();
18731
- this.revogrid.removeEventListener('beforeheaderclick', this.preventHeaderClickAfterDrag, { capture: true });
18732
18652
  }
18733
18653
  getData({ gridEl, dataEl, pin }, order, source = []) {
18734
18654
  const gridRect = gridEl.getBoundingClientRect();
@@ -18750,12 +18670,6 @@ class ColumnMovePlugin extends BasePlugin {
18750
18670
  function getLeftRelative(absoluteX, gridPos, offset) {
18751
18671
  return absoluteX - gridPos - offset;
18752
18672
  }
18753
- function getColumnDragPosition(targetItem, startItem, renderOffset, scrollOffset) {
18754
- const insertionEdge = startItem.itemIndex > targetItem.itemIndex
18755
- ? targetItem.start
18756
- : targetItem.end;
18757
- return insertionEdge - renderOffset + scrollOffset;
18758
- }
18759
18673
 
18760
18674
  function isMobileDevice() {
18761
18675
  return /Mobi/i.test(navigator.userAgent) || /Android/i.test(navigator.userAgent) || navigator.maxTouchPoints > 0;
@@ -19105,7 +19019,7 @@ class RevoGridComponent {
19105
19019
  this.rowSize = 0;
19106
19020
  /** Indicates default column size. */
19107
19021
  this.colSize = 100;
19108
- /** When true, user can select a cell range. Required for range-based clipboard fill. */
19022
+ /** When true, user can range selection. */
19109
19023
  this.range = false;
19110
19024
  /** When true, grid in read only mode. */
19111
19025
  this.readonly = false;
@@ -19117,7 +19031,7 @@ class RevoGridComponent {
19117
19031
  this.noHorizontalScrollTransfer = false;
19118
19032
  /** When true cell focus appear. */
19119
19033
  this.canFocus = true;
19120
- /** When true enable clipboard. Can be boolean or clipboard config. */
19034
+ /** When true enable clipboard. */
19121
19035
  this.useClipboard = true;
19122
19036
  /**
19123
19037
  * Columns - defines an array of grid columns.
@@ -21973,17 +21887,9 @@ class RevogrViewportScroll {
21973
21887
  }
21974
21888
  render() {
21975
21889
  var _a, _b;
21976
- const clientHeight = (_b = (_a = this.verticalScroll) === null || _a === void 0 ? void 0 : _a.clientHeight) !== null && _b !== void 0 ? _b : 0;
21977
- // When content fits in the viewport (no scroll needed), don't inflate content-wrapper
21978
- // to clientHeight — that would prevent inner-content-table from shrinking and push
21979
- // rowPinEnd (footer) to the bottom instead of letting it follow the data rows.
21980
- // For large/compressed grids (content > clientHeight), physicalContentHeight handles
21981
- // the browser scroll-size compression correctly.
21982
- const physicalContentHeight = this.contentHeight < clientHeight
21983
- ? Math.max(this.contentHeight, 0)
21984
- : getContentSize(this.contentHeight, clientHeight);
21890
+ const physicalContentHeight = getContentSize(this.contentHeight, (_b = (_a = this.verticalScroll) === null || _a === void 0 ? void 0 : _a.clientHeight) !== null && _b !== void 0 ? _b : 0);
21985
21891
  const physicalContentWidth = getContentSize(this.contentWidth, 0);
21986
- return (hAsync(Host, { key: '3dd9d29cf26743d7aa4995f51180d56008526e54', onWheel: this.horizontalMouseWheel, onScroll: (e) => this.applyScroll('rgCol', e) }, hAsync("div", { key: 'af75428e845044c33eba2fecd1ec04a9177b9b5c', class: "inner-content-table", style: { width: `${physicalContentWidth}px` } }, hAsync("div", { key: 'a0149f597588371e1fafe69efc3bd4411379a017', class: "header-wrapper", ref: e => (this.header = e) }, hAsync("slot", { key: 'e5d2570bf93897cd97ef702141c83bb8c0e13ee2', name: HEADER_SLOT })), hAsync("div", { key: 'd1388ff0d721dd8ce925b934bb2128fddc1ac17b', class: "vertical-inner", ref: el => (this.verticalScroll = el), onWheel: this.verticalMouseWheel, onScroll: (e) => this.applyScroll('rgRow', e) }, hAsync("div", { key: 'a306ff56f62279402e2a881a081e3224341d5bdf', class: "content-wrapper", style: { height: `${physicalContentHeight}px` } }, hAsync("slot", { key: '898bda8e9429da06c9ff2bd41626ac27f3cde3cc', name: CONTENT_SLOT }))), hAsync("div", { key: '5e9eba1edd5fca07a964971054a7900e4dd84099', class: "footer-wrapper", ref: e => (this.footer = e) }, hAsync("slot", { key: 'f233ad1c23b3f692c45e1db235cfef4704a80726', name: FOOTER_SLOT })))));
21892
+ return (hAsync(Host, { key: 'ec8d907976c1d50f7aab3c263be3f0249a274df6', onWheel: this.horizontalMouseWheel, onScroll: (e) => this.applyScroll('rgCol', e) }, hAsync("div", { key: 'e35696a7993ac94261426b45c28d488cdc42b7f0', class: "inner-content-table", style: { width: `${physicalContentWidth}px` } }, hAsync("div", { key: 'a6997451e01eacda1d27d4efa1d74e1748626218', class: "header-wrapper", ref: e => (this.header = e) }, hAsync("slot", { key: '1d401e87d32d5b1531c2211723b552bbc894f22c', name: HEADER_SLOT })), hAsync("div", { key: 'ceab6f9e812d6ca9a0aa376afcd2562a17f505e0', class: "vertical-inner", ref: el => (this.verticalScroll = el), onWheel: this.verticalMouseWheel, onScroll: (e) => this.applyScroll('rgRow', e) }, hAsync("div", { key: 'a9556578a23d6efddec2e982e863aec064042154', class: "content-wrapper", style: { height: `${physicalContentHeight}px` } }, hAsync("slot", { key: '0ae01f9736b9740612e75261f6e3abebda533377', name: CONTENT_SLOT }))), hAsync("div", { key: '09c2565d4ed449a43820f92d97b6558fca3758e7', class: "footer-wrapper", ref: e => (this.footer = e) }, hAsync("slot", { key: '1ffb08ff8138a560cc09d82e3fe22a53e502aafe', name: FOOTER_SLOT })))));
21987
21893
  }
21988
21894
  /**
21989
21895
  * Extra layer for scroll event monitoring, where MouseWheel event is not passing
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@revolist/revogrid",
3
- "version": "4.23.12",
3
+ "version": "4.23.14",
4
4
  "type": "module",
5
5
  "description": "Virtual reactive data grid spreadsheet component - RevoGrid.",
6
6
  "license": "MIT",
package/readme.md CHANGED
@@ -76,10 +76,7 @@ Used by some of the largest companies in Europe and the United States.
76
76
  - Header filtering.
77
77
  - Custom filters to extend system filters with your own set.
78
78
 
79
- - **[Export](https://rv-grid.com/guide/export.plugin)**:
80
- - **[CSV](https://rv-grid.com/guide/export.plugin)**: Built-in file export for core RevoGrid data workflows.
81
- - **[PDF](https://rv-grid.com/guide/pdf-export)**: Browser-side PDF export with the lightweight [`@revolist/revogrid-pdf-export`](https://www.npmjs.com/package/@revolist/revogrid-pdf-export) plugin.
82
- - **[Excel (Pro)](https://rv-grid.com/guide/data-grid-export-excel)**: Workbook export for RevoGrid Pro with layout, styles, frozen panes, merged cells, and formulas.
79
+ - **[Export](https://rv-grid.com/guide/export.plugin)**: Export data to file.
83
80
 
84
81
  - **Custom Sizes**: Define custom sizes for [columns](https://rv-grid.com/guide/column/#Column-Size) and [rows](https://rv-grid.com/guide/row/height). Automatic sizing based on content.
85
82
 
@@ -431,22 +428,6 @@ npm run test:e2e
431
428
 
432
429
  Test files live in `e2e/` and share helpers from `e2e/helpers.ts`:
433
430
 
434
- ### Local startup troubleshooting
435
-
436
- For targeted local work, confirm a new or changed test is discoverable before starting the dev server:
437
-
438
- ```bash
439
- ./node_modules/.bin/playwright test e2e/pinning.spec.ts --grep "test name" --list
440
- ```
441
-
442
- Then run a non-watch Stencil build to catch compile errors without invoking the Playwright web-server lifecycle:
443
-
444
- ```bash
445
- ./node_modules/.bin/stencil build --dev --serve --no-open
446
- ```
447
-
448
- If Playwright fails before any tests run with a Stencil dev-server startup error such as `ERR_SOCKET_BAD_PORT` and port `65536`, treat it as an environment/startup issue rather than an e2e assertion failure. Check `node -v` and whether another local server is already using `localhost:3333`, then retry only after changing that environment state.
449
-
450
431
 
451
432
  ## Contributing
452
433