@revolist/revogrid 4.23.14 → 4.23.16

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 (81) hide show
  1. package/dist/cjs/{cell-renderer-Dcz022q7.js → cell-renderer-DfUCisis.js} +23 -5
  2. package/dist/cjs/{column.drag.plugin-BGLbi1zS.js → column.drag.plugin-ByDJ7Rk3.js} +35 -6
  3. package/dist/cjs/{column.service-C1Qvcf5l.js → column.service-BNWNiJW3.js} +62 -23
  4. package/dist/cjs/{filter.button-w6LWnyhi.js → filter.button-C4xpvyyE.js} +14 -4
  5. package/dist/cjs/{header-cell-renderer-vVr4IWNV.js → header-cell-renderer-DyjOxArm.js} +1 -1
  6. package/dist/cjs/index.cjs.js +8 -5
  7. package/dist/cjs/loader.cjs.js +1 -1
  8. package/dist/cjs/revo-grid.cjs.entry.js +6 -6
  9. package/dist/cjs/revo-grid.cjs.js +1 -1
  10. package/dist/cjs/revogr-attribution_7.cjs.entry.js +40 -4
  11. package/dist/cjs/revogr-clipboard_3.cjs.entry.js +1 -1
  12. package/dist/cjs/revogr-data_4.cjs.entry.js +14 -6
  13. package/dist/cjs/revogr-filter-panel.cjs.entry.js +177 -48
  14. package/dist/collection/components/clipboard/revogr-clipboard.js +1 -1
  15. package/dist/collection/components/data/column.service.js +62 -23
  16. package/dist/collection/components/data/row-renderer.js +15 -2
  17. package/dist/collection/components/overlay/clipboard.utils.js +26 -0
  18. package/dist/collection/components/overlay/revogr-overlay-selection.js +27 -7
  19. package/dist/collection/components/revoGrid/revo-grid.js +14 -7
  20. package/dist/collection/components/scroll/revogr-viewport-scroll.js +10 -2
  21. package/dist/collection/plugins/filter/filter.button.js +12 -4
  22. package/dist/collection/plugins/filter/filter.panel.js +138 -48
  23. package/dist/collection/plugins/filter/filter.plugin.js +1 -1
  24. package/dist/collection/plugins/filter/filter.reorder.js +44 -0
  25. package/dist/collection/plugins/filter/filter.style.css +96 -6
  26. package/dist/collection/plugins/groupingRow/grouping.row.renderer.js +7 -2
  27. package/dist/collection/plugins/moveColumn/column.drag.plugin.js +30 -2
  28. package/dist/collection/serve/controller.js +1 -0
  29. package/dist/esm/{cell-renderer-BtN-NGCk.js → cell-renderer-CLTRlCa5.js} +23 -5
  30. package/dist/esm/{column.drag.plugin-4Ixr4ijU.js → column.drag.plugin-BZacA8n_.js} +35 -7
  31. package/dist/esm/{column.service-CC_SD8W3.js → column.service-C6hByxPy.js} +62 -23
  32. package/dist/esm/filter.button-B-RBiF67.js +38 -0
  33. package/dist/esm/{header-cell-renderer-B-LX2sgu.js → header-cell-renderer-BMmXRsd_.js} +1 -1
  34. package/dist/esm/index.js +6 -6
  35. package/dist/esm/loader.js +1 -1
  36. package/dist/esm/revo-grid.entry.js +6 -6
  37. package/dist/esm/revo-grid.js +1 -1
  38. package/dist/esm/revogr-attribution_7.entry.js +40 -4
  39. package/dist/esm/revogr-clipboard_3.entry.js +1 -1
  40. package/dist/esm/revogr-data_4.entry.js +14 -6
  41. package/dist/esm/revogr-filter-panel.entry.js +177 -48
  42. package/dist/revo-grid/{cell-renderer-BtN-NGCk.js → cell-renderer-CLTRlCa5.js} +23 -5
  43. package/dist/revo-grid/{column.drag.plugin-4Ixr4ijU.js → column.drag.plugin-BZacA8n_.js} +35 -7
  44. package/dist/revo-grid/{column.service-CC_SD8W3.js → column.service-C6hByxPy.js} +62 -23
  45. package/dist/revo-grid/filter.button-B-RBiF67.js +38 -0
  46. package/dist/revo-grid/{header-cell-renderer-B-LX2sgu.js → header-cell-renderer-BMmXRsd_.js} +1 -1
  47. package/dist/revo-grid/index.esm.js +6 -6
  48. package/dist/revo-grid/revo-grid.entry.js +6 -6
  49. package/dist/revo-grid/revo-grid.esm.js +1 -1
  50. package/dist/revo-grid/revogr-attribution_7.entry.js +40 -4
  51. package/dist/revo-grid/revogr-clipboard_3.entry.js +1 -1
  52. package/dist/revo-grid/revogr-data_4.entry.js +14 -6
  53. package/dist/revo-grid/revogr-filter-panel.entry.js +177 -48
  54. package/dist/types/components/data/column.service.d.ts +10 -1
  55. package/dist/types/components/data/row-renderer.d.ts +1 -1
  56. package/dist/types/components/overlay/clipboard.utils.d.ts +3 -0
  57. package/dist/types/components/overlay/revogr-overlay-selection.d.ts +4 -3
  58. package/dist/types/components/revoGrid/revo-grid.d.ts +4 -4
  59. package/dist/types/components.d.ts +14 -14
  60. package/dist/types/plugins/filter/filter.button.d.ts +23 -2
  61. package/dist/types/plugins/filter/filter.panel.d.ts +8 -1
  62. package/dist/types/plugins/filter/filter.plugin.d.ts +1 -0
  63. package/dist/types/plugins/filter/filter.reorder.d.ts +4 -0
  64. package/dist/types/plugins/filter/filter.types.d.ts +8 -0
  65. package/dist/types/plugins/moveColumn/column.drag.plugin.d.ts +4 -0
  66. package/dist/types/types/interfaces.d.ts +8 -0
  67. package/hydrate/index.js +358 -90
  68. package/hydrate/index.mjs +358 -90
  69. package/package.json +1 -1
  70. package/readme.md +20 -1
  71. package/standalone/column.service.js +1 -1
  72. package/standalone/filter.button.js +1 -1
  73. package/standalone/index.js +1 -1
  74. package/standalone/revo-grid.js +1 -1
  75. package/standalone/revogr-clipboard2.js +1 -1
  76. package/standalone/revogr-data2.js +1 -1
  77. package/standalone/revogr-filter-panel.js +1 -1
  78. package/standalone/revogr-overlay-selection2.js +1 -1
  79. package/standalone/revogr-viewport-scroll2.js +1 -1
  80. package/dist/esm/filter.button-C8XTWPU2.js +0 -30
  81. package/dist/revo-grid/filter.button-C8XTWPU2.js +0 -30
package/hydrate/index.js CHANGED
@@ -6858,7 +6858,7 @@ class Clipboard {
6858
6858
  }
6859
6859
  getData(e) {
6860
6860
  return (e.clipboardData ||
6861
- (window === null || window === void 0 ? void 0 : window.clipboardData));
6861
+ (globalThis === null || globalThis === void 0 ? void 0 : globalThis.clipboardData));
6862
6862
  }
6863
6863
  static get cmpMeta() { return {
6864
6864
  "$flags$": 0,
@@ -7359,17 +7359,25 @@ const FILTER_BUTTON_ACTIVE = 'active';
7359
7359
  const FILTER_PROP = 'hasFilter';
7360
7360
  const AND_OR_BUTTON = 'and-or-button';
7361
7361
  const TRASH_BUTTON = 'trash-button';
7362
+ const REORDER_BUTTON = 'reorder-button';
7362
7363
  const FilterButton = ({ column }) => {
7363
7364
  return (hAsync("span", null, hAsync("button", { class: {
7364
7365
  [FILTER_BUTTON_CLASS]: true,
7365
7366
  [FILTER_BUTTON_ACTIVE]: column && !!column[FILTER_PROP],
7366
7367
  } }, hAsync("svg", { class: "filter-img", viewBox: "0 0 64 64" }, hAsync("g", { stroke: "none", "stroke-width": "1", fill: "none", "fill-rule": "evenodd" }, hAsync("path", { d: "M43,48 L43,56 L21,56 L21,48 L43,48 Z M53,28 L53,36 L12,36 L12,28 L53,28 Z M64,8 L64,16 L0,16 L0,8 L64,8 Z", fill: "currentColor" }))))));
7367
7368
  };
7368
- const TrashButton = () => {
7369
- return (hAsync("div", { class: { [TRASH_BUTTON]: true } }, hAsync("svg", { class: "trash-img", viewBox: "0 0 24 24" }, hAsync("path", { fill: "currentColor", d: "M9,3V4H4V6H5V19A2,2 0 0,0 7,21H17A2,2 0 0,0 19,19V6H20V4H15V3H9M7,6H17V19H7V6M9,8V17H11V8H9M13,8V17H15V8H13Z" }))));
7369
+ const TrashButton = ({ ariaLabel, onClick }) => {
7370
+ return (hAsync("button", { type: "button", class: { [TRASH_BUTTON]: true }, "aria-label": ariaLabel, onClick: onClick }, hAsync("svg", { class: "trash-img", viewBox: "0 0 24 24" }, hAsync("path", { fill: "currentColor", d: "M9,3V4H4V6H5V19A2,2 0 0,0 7,21H17A2,2 0 0,0 19,19V6H20V4H15V3H9M7,6H17V19H7V6M9,8V17H11V8H9M13,8V17H15V8H13Z" }))));
7370
7371
  };
7371
- const AndOrButton = ({ text }) => {
7372
- return hAsync("button", { class: { [AND_OR_BUTTON]: true, 'light revo-button': true } }, text);
7372
+ const AndOrButton = ({ text, onClick }) => {
7373
+ return hAsync("button", { type: "button", class: { [AND_OR_BUTTON]: true, 'light revo-button': true }, onClick: onClick }, text);
7374
+ };
7375
+ const ReorderButton = ({ ariaLabel, dragging, dragOver, onDragStart, onDragEnd, onDragOver, onDragLeave, onDrop, onKeyDown, }) => {
7376
+ return (hAsync("button", { type: "button", class: {
7377
+ [REORDER_BUTTON]: true,
7378
+ 'filter-row-dragging': !!dragging,
7379
+ 'filter-row-drag-over': !!dragOver,
7380
+ }, draggable: true, title: ariaLabel, "aria-label": ariaLabel, onDragStart: onDragStart, onDragEnd: onDragEnd, onDragOver: onDragOver, onDragLeave: onDragLeave, onDrop: onDrop, onKeyDown: onKeyDown }, "::"));
7373
7381
  };
7374
7382
  function isFilterBtn(e) {
7375
7383
  if (e.classList.contains(FILTER_BUTTON_CLASS)) {
@@ -7397,12 +7405,55 @@ function isFilterBtn(e) {
7397
7405
  }
7398
7406
  })();
7399
7407
 
7400
- 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}`;
7408
+ const FILTER_REORDER_MIME = 'text/revogrid-filter-id';
7409
+ function setFilterReorderData(dataTransfer, id) {
7410
+ if (!dataTransfer) {
7411
+ return;
7412
+ }
7413
+ dataTransfer.effectAllowed = 'move';
7414
+ dataTransfer.setData(FILTER_REORDER_MIME, String(id));
7415
+ dataTransfer.setData('text/plain', String(id));
7416
+ }
7417
+ function getFilterReorderId(dataTransfer) {
7418
+ if (!dataTransfer) {
7419
+ return;
7420
+ }
7421
+ const rawId = dataTransfer.getData(FILTER_REORDER_MIME) || dataTransfer.getData('text/plain');
7422
+ const normalizedId = rawId.trim();
7423
+ if (!normalizedId) {
7424
+ return;
7425
+ }
7426
+ const id = Number(normalizedId);
7427
+ return Number.isFinite(id) ? id : undefined;
7428
+ }
7429
+ function moveFilterItem(items, sourceId, targetId) {
7430
+ if (sourceId === targetId) {
7431
+ return false;
7432
+ }
7433
+ const sourceIndex = items.findIndex(item => item.id === sourceId);
7434
+ const targetIndex = items.findIndex(item => item.id === targetId);
7435
+ if (sourceIndex === -1 || targetIndex === -1 || sourceIndex === targetIndex) {
7436
+ return false;
7437
+ }
7438
+ const relationsByPosition = items.map(item => { var _a; return (_a = item.relation) !== null && _a !== void 0 ? _a : 'and'; });
7439
+ const [movedItem] = items.splice(sourceIndex, 1);
7440
+ items.splice(targetIndex, 0, movedItem);
7441
+ items.forEach((item, index) => {
7442
+ var _a;
7443
+ item.relation = index === items.length - 1
7444
+ ? 'and'
7445
+ : (_a = relationsByPosition[index]) !== null && _a !== void 0 ? _a : 'and';
7446
+ });
7447
+ return true;
7448
+ }
7449
+
7450
+ 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));box-sizing:border-box;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 .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{position:sticky;right:0;bottom:-10px;left:0;z-index:1;text-align:right;margin:10px -10px -10px;padding:0 5px 10px 10px;background:var(--revo-grid-filter-panel-bg, #fff);border-top:1px solid var(--revo-grid-filter-panel-divider, #d9d9d9)}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-row{display:flex;align-items:center;gap:6px;position:relative}.multi-filter-list .multi-filter-list-row.filter-row-dragging{opacity:0.65}.multi-filter-list .multi-filter-list-row.filter-row-drag-over::before{content:"";position:absolute;top:-4px;right:0;left:0;z-index:2;height:2px;background:var(--revo-grid-filter-panel-reorder-accent, #007cb2);border-radius:999px;box-shadow:0 0 0 2px var(--revo-grid-filter-panel-bg, #fff)}.multi-filter-list .multi-filter-list-row.filter-row-drop-active .filter-row-drop-target{pointer-events:auto}.multi-filter-list .filter-row-drop-target{position:absolute;inset:0;z-index:1;padding:0;pointer-events:none;background:transparent;border:0}.multi-filter-list .multi-filter-list-action{display:flex;align-self:stretch;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;padding:0;border:0;background:transparent;color:inherit;cursor:pointer;width:22px;height:100%;font-size:16px}.multi-filter-list .trash-button .trash-img{width:1em}.multi-filter-list .reorder-button{border:0;background:transparent;color:var(--revo-grid-filter-panel-reorder-color, #6b7280);cursor:grab;font-family:monospace;font-size:12px;letter-spacing:0;line-height:1;padding:6px 2px;transform:scaleX(0.8);width:16px}.multi-filter-list .reorder-button.filter-row-drag-over{color:var(--revo-grid-filter-panel-reorder-accent, #007cb2)}.multi-filter-list .reorder-button:active{cursor:grabbing}.multi-filter-list-container{padding:0;margin:0;list-style:none}.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 .select-filter{width:auto}.select-input .filter-extra{display:flex}.select-input .filter-extra>*{width:100%}.select-input input[type=text],.select-input input[type=date]{margin:0}`;
7401
7451
 
7402
7452
  const defaultType = 'none';
7403
7453
  const FILTER_LIST_CLASS = 'multi-filter-list';
7404
7454
  const FILTER_LIST_CLASS_ACTION = 'multi-filter-list-action';
7405
7455
  const FILTER_ID = 'add-filter';
7456
+ const VIEWPORT_PADDING = 8;
7406
7457
  /**
7407
7458
  * Filter panel for editing filters
7408
7459
  */
@@ -7425,6 +7476,9 @@ class FilterPanel {
7425
7476
  placeholder: 'Enter value...',
7426
7477
  and: 'and',
7427
7478
  or: 'or',
7479
+ filterCondition: 'Filter condition',
7480
+ removeFilter: 'Remove filter',
7481
+ reorderFilter: 'Reorder filter',
7428
7482
  };
7429
7483
  this.isFilterIdSet = false;
7430
7484
  this.filterId = 0;
@@ -7498,18 +7552,28 @@ class FilterPanel {
7498
7552
  if (typeof prop === 'undefined')
7499
7553
  return '';
7500
7554
  const propFilters = (_b = this.filterItems[prop]) !== null && _b !== void 0 ? _b : [];
7501
- const capts = Object.assign(this.filterCaptionsInternal, this.filterCaptions);
7502
- return (hAsync("div", { key: this.filterId }, propFilters.map((filter, index) => {
7555
+ const visibleFilterCount = propFilters.filter(filter => !filter.hidden).length;
7556
+ const capts = Object.assign(Object.assign({}, this.filterCaptionsInternal), this.filterCaptions);
7557
+ return (hAsync("div", { key: this.filterId }, hAsync("ul", { class: "multi-filter-list-container" }, propFilters.map((filter, index) => {
7503
7558
  let andOrButton;
7504
7559
  if (filter.hidden) {
7505
7560
  return;
7506
7561
  }
7507
7562
  // hide toggle button if there is only one filter and the last one
7508
7563
  if (index !== this.filterItems[prop].length - 1) {
7509
- andOrButton = (hAsync("div", { onClick: () => this.toggleFilterAndOr(filter.id) }, hAsync(AndOrButton, { text: filter.relation === 'and' ? capts.and : capts.or })));
7510
- }
7511
- 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))));
7512
- }), propFilters.filter(f => !f.hidden).length > 0 ? hAsync("div", { class: "add-filter-divider" }) : ''));
7564
+ andOrButton = (hAsync(AndOrButton, { text: filter.relation === 'and' ? capts.and : capts.or, onClick: () => this.toggleFilterAndOr(filter.id) }));
7565
+ }
7566
+ const extra = this.renderExtra(prop, index);
7567
+ const isDragging = this.draggedFilterId === filter.id;
7568
+ const isDragOver = this.dragOverFilterId === filter.id && !isDragging;
7569
+ const canReorder = visibleFilterCount > 1;
7570
+ return (hAsync("li", { key: filter.id, class: FILTER_LIST_CLASS, "aria-label": `${capts.filterCondition} ${index + 1}` }, hAsync("div", { class: {
7571
+ 'multi-filter-list-row': true,
7572
+ 'filter-row-drop-active': this.draggedFilterId !== undefined && !isDragging,
7573
+ 'filter-row-dragging': isDragging,
7574
+ 'filter-row-drag-over': isDragOver,
7575
+ } }, canReorder ? (hAsync("button", { type: "button", class: "filter-row-drop-target", tabIndex: -1, "aria-label": `${capts.filterCondition} ${index + 1}`, onDragOver: e => this.onFilterDragOver(e, filter.id), onDragLeave: () => this.onFilterDragLeave(filter.id), onDrop: e => this.onFilterDrop(e, prop, filter.id) })) : '', canReorder ? (hAsync(ReorderButton, { ariaLabel: capts.reorderFilter, dragging: isDragging, dragOver: isDragOver, onDragStart: e => this.onFilterDragStart(e, filter.id), onDragEnd: () => this.onFilterDragEnd(), onKeyDown: e => this.onFilterReorderKeyDown(e, prop, filter.id) })) : '', 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(TrashButton, { ariaLabel: capts.removeFilter, onClick: () => this.onRemoveFilter(filter.id) })))));
7576
+ })), propFilters.filter(f => !f.hidden).length > 0 ? hAsync("div", { class: "add-filter-divider" }) : ''));
7513
7577
  }
7514
7578
  componentDidRender() {
7515
7579
  this.syncDialog();
@@ -7528,37 +7592,35 @@ class FilterPanel {
7528
7592
  this.dialog.show();
7529
7593
  }
7530
7594
  if (this.changes.autoCorrect !== false) {
7595
+ this.autoCorrect(this.dialog);
7531
7596
  requestAnimationFrame(() => this.autoCorrect(this.dialog));
7532
7597
  }
7533
7598
  }
7534
7599
  autoCorrect(el) {
7535
- if (!el) {
7600
+ var _a;
7601
+ if (!el || !this.changes) {
7536
7602
  return;
7537
7603
  }
7604
+ el.style.maxHeight = '';
7605
+ el.style.left = `${this.changes.x}px`;
7606
+ el.style.top = `${this.changes.y}px`;
7538
7607
  const pos = el.getBoundingClientRect();
7539
- const maxLeft = Math.max(0, window.innerWidth - pos.width);
7540
- const maxTop = Math.max(0, window.innerHeight - pos.height);
7541
- if (pos.left > maxLeft) {
7542
- el.style.left = `${maxLeft}px`;
7543
- }
7544
- if (pos.top > maxTop) {
7545
- el.style.top = `${maxTop}px`;
7546
- }
7547
- }
7548
- onDialogMouseDown(e) {
7549
- if (!this.closeOnOutsideClick ||
7550
- e.target !== this.dialog ||
7551
- !this.dialog) {
7552
- return;
7553
- }
7554
- const rect = this.dialog.getBoundingClientRect();
7555
- const isInside = e.clientX >= rect.left &&
7556
- e.clientX <= rect.right &&
7557
- e.clientY >= rect.top &&
7558
- e.clientY <= rect.bottom;
7559
- if (!isInside) {
7560
- this.onCancel();
7561
- }
7608
+ const anchorTop = (_a = this.changes.anchorY) !== null && _a !== void 0 ? _a : this.changes.y;
7609
+ const anchorBottom = this.changes.y;
7610
+ const spaceAbove = Math.max(0, anchorTop - VIEWPORT_PADDING);
7611
+ const spaceBelow = Math.max(0, window.innerHeight - anchorBottom - VIEWPORT_PADDING);
7612
+ const openAbove = pos.height > spaceBelow && spaceAbove > spaceBelow;
7613
+ const availableHeight = Math.max(VIEWPORT_PADDING, openAbove ? spaceAbove : spaceBelow);
7614
+ el.style.maxHeight = `${availableHeight}px`;
7615
+ const adjustedPos = el.getBoundingClientRect();
7616
+ const maxLeft = Math.max(VIEWPORT_PADDING, window.innerWidth - adjustedPos.width - VIEWPORT_PADDING);
7617
+ const maxTop = Math.max(VIEWPORT_PADDING, window.innerHeight - adjustedPos.height - VIEWPORT_PADDING);
7618
+ const left = Math.min(Math.max(VIEWPORT_PADDING, this.changes.x), maxLeft);
7619
+ const top = openAbove
7620
+ ? Math.min(Math.max(VIEWPORT_PADDING, anchorTop - adjustedPos.height), maxTop)
7621
+ : Math.min(Math.max(VIEWPORT_PADDING, anchorBottom), maxTop);
7622
+ el.style.left = `${left}px`;
7623
+ el.style.top = `${top}px`;
7562
7624
  }
7563
7625
  onFilterTypeChange(e, prop, index) {
7564
7626
  if (!(e.target instanceof HTMLSelectElement)) {
@@ -7650,6 +7712,80 @@ class FilterPanel {
7650
7712
  this.debouncedApplyFilter();
7651
7713
  }
7652
7714
  }
7715
+ onFilterDragStart(e, id) {
7716
+ this.draggedFilterId = id;
7717
+ setFilterReorderData(e.dataTransfer, id);
7718
+ }
7719
+ onFilterDragOver(e, id) {
7720
+ if (this.draggedFilterId === undefined || this.draggedFilterId === id) {
7721
+ return;
7722
+ }
7723
+ e.preventDefault();
7724
+ if (e.dataTransfer) {
7725
+ e.dataTransfer.dropEffect = 'move';
7726
+ }
7727
+ this.dragOverFilterId = id;
7728
+ }
7729
+ onFilterDragLeave(id) {
7730
+ if (this.dragOverFilterId === id) {
7731
+ this.dragOverFilterId = undefined;
7732
+ }
7733
+ }
7734
+ onFilterDrop(e, prop, targetId) {
7735
+ var _a;
7736
+ e.preventDefault();
7737
+ const sourceId = (_a = this.draggedFilterId) !== null && _a !== void 0 ? _a : getFilterReorderId(e.dataTransfer);
7738
+ this.onFilterDragEnd();
7739
+ if (sourceId === undefined) {
7740
+ return;
7741
+ }
7742
+ const items = this.filterItems[prop];
7743
+ if (!items) {
7744
+ return;
7745
+ }
7746
+ if (!moveFilterItem(items, sourceId, targetId)) {
7747
+ return;
7748
+ }
7749
+ this.filterId++;
7750
+ if (!this.disableDynamicFiltering) {
7751
+ this.debouncedApplyFilter();
7752
+ }
7753
+ }
7754
+ onFilterDragEnd() {
7755
+ this.draggedFilterId = undefined;
7756
+ this.dragOverFilterId = undefined;
7757
+ }
7758
+ onFilterReorderKeyDown(e, prop, sourceId) {
7759
+ let direction = 0;
7760
+ if (e.key === 'ArrowUp') {
7761
+ direction = -1;
7762
+ }
7763
+ else if (e.key === 'ArrowDown') {
7764
+ direction = 1;
7765
+ }
7766
+ else {
7767
+ return;
7768
+ }
7769
+ const items = this.filterItems[prop];
7770
+ if (!items) {
7771
+ return;
7772
+ }
7773
+ const visibleItems = items.filter(item => !item.hidden);
7774
+ const sourceIndex = visibleItems.findIndex(item => item.id === sourceId);
7775
+ if (sourceIndex === -1) {
7776
+ return;
7777
+ }
7778
+ e.preventDefault();
7779
+ e.stopPropagation();
7780
+ const target = visibleItems[sourceIndex + direction];
7781
+ if (!target || !moveFilterItem(items, sourceId, target.id)) {
7782
+ return;
7783
+ }
7784
+ this.filterId++;
7785
+ if (!this.disableDynamicFiltering) {
7786
+ this.debouncedApplyFilter();
7787
+ }
7788
+ }
7653
7789
  toggleFilterAndOr(id) {
7654
7790
  var _a;
7655
7791
  this.assertChanges();
@@ -7688,7 +7824,7 @@ class FilterPanel {
7688
7824
  });
7689
7825
  });
7690
7826
  if (!isDefaultTypeRemoved) {
7691
- const capts = Object.assign(this.filterCaptionsInternal, this.filterCaptions);
7827
+ const capts = Object.assign(Object.assign({}, this.filterCaptionsInternal), this.filterCaptions);
7692
7828
  options.push(hAsync("option", { selected: this.currentFilterType === defaultType, value: defaultType }, prop && this.filterItems[prop] && this.filterItems[prop].length > 0
7693
7829
  ? capts.add
7694
7830
  : this.filterNames[defaultType]));
@@ -7721,7 +7857,7 @@ class FilterPanel {
7721
7857
  select.focus();
7722
7858
  }
7723
7859
  };
7724
- const capts = Object.assign(this.filterCaptionsInternal, this.filterCaptions);
7860
+ const capts = Object.assign(Object.assign({}, this.filterCaptionsInternal), this.filterCaptions);
7725
7861
  const extra = this.filterEntities[currentFilter[index].type].extra;
7726
7862
  if (typeof extra === 'function') {
7727
7863
  return extra(hAsync, {
@@ -7758,32 +7894,33 @@ class FilterPanel {
7758
7894
  } }));
7759
7895
  }
7760
7896
  render() {
7761
- var _a, _b, _c, _d, _e, _f, _g;
7897
+ var _a, _b, _c, _d, _e, _f, _g, _h, _j;
7762
7898
  const style = {
7763
7899
  left: `${(_b = (_a = this.changes) === null || _a === void 0 ? void 0 : _a.x) !== null && _b !== void 0 ? _b : 0}px`,
7764
7900
  top: `${(_d = (_c = this.changes) === null || _c === void 0 ? void 0 : _c.y) !== null && _d !== void 0 ? _d : 0}px`,
7765
7901
  };
7766
- const capts = Object.assign(this.filterCaptionsInternal, this.filterCaptions);
7767
- return (hAsync(Host, { key: '9fb424017d080876ff7796237917b4f41f617fe0' }, hAsync("dialog", { key: '37b9f870b95f6fe1bd7be359dd7b77ef196e896e', class: "filter-panel-dialog", style: style, ref: el => (this.dialog = el), onCancel: e => {
7902
+ const capts = Object.assign(Object.assign({}, this.filterCaptionsInternal), this.filterCaptions);
7903
+ return (hAsync(Host, { key: '4e969f8b7033363c885c94b1f7770917786669f2' }, hAsync("dialog", { key: '79b2713724684fa99f56621fe43645a0b0ad54bf', class: "filter-panel-dialog", style: style, ref: el => (this.dialog = el), onCancel: e => {
7768
7904
  e.preventDefault();
7769
7905
  this.onCancel();
7770
- }, onMouseDown: e => this.onDialogMouseDown(e) }, this.changes && [
7771
- hAsync("slot", { key: '76ec505a92d0a7c1ae0bbb5f4cac63555f3416be', slot: "header" }),
7906
+ } }, this.changes && [
7907
+ hAsync("slot", { key: "header-slot", slot: "header" }),
7772
7908
  ((_f = (_e = this.changes).extraContent) === null || _f === void 0 ? void 0 : _f.call(_e, this.changes)) || '',
7773
7909
  ((_g = this.changes) === null || _g === void 0 ? void 0 : _g.hideDefaultFilters) !== true && [
7774
- hAsync("label", { key: 'c6fd82c95f6005f286c7bc90de34956128a83246' }, capts.title),
7775
- hAsync("div", { key: '5e7dac36ad79ba1b6072a0053b30aa384ade0dde', class: "filter-holder" }, this.getFilterItemsList()),
7776
- 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))),
7910
+ hAsync("label", { key: "filter-title" }, capts.title),
7911
+ hAsync("div", { key: "filter-holder", class: "filter-holder" }, this.getFilterItemsList()),
7912
+ hAsync("div", { key: "add-filter", class: "add-filter" }, hAsync("select", { key: 'fc894bdfae1ff35d5c49adc7646dd3182b7bd49e', id: FILTER_ID, class: "select-css", onChange: e => this.onAddNewFilter(e) }, this.renderSelectOptions(this.currentFilterType))),
7777
7913
  ],
7778
- hAsync("slot", { key: '1571dcbc5c57651deb42a4046272ff60fa74f5a7' }),
7779
- hAsync("div", { key: '4aa7dee532336b084542df0209291b4c60378b49', class: "filter-actions" }, this.disableDynamicFiltering && [
7780
- hAsync("button", { key: '4c1b3054cd1bb7f46877592f00f6634d0f7ecafa', id: "revo-button-save", "aria-label": "save", class: "revo-button green", onClick: () => this.onSave() }, capts.save),
7781
- hAsync("button", { key: 'f31a568c89be18b1a854cdd7d4726e01db24e338', id: "revo-button-ok", "aria-label": "ok", class: "revo-button green", onClick: () => this.onCancel() }, capts.cancel),
7914
+ hAsync("slot", { key: "default-slot" }),
7915
+ ((_j = (_h = this.changes).extraBottomContent) === null || _j === void 0 ? void 0 : _j.call(_h, this.changes)) || '',
7916
+ hAsync("div", { key: "filter-actions", class: "filter-actions" }, this.disableDynamicFiltering && [
7917
+ hAsync("button", { key: "save", id: "revo-button-save", "aria-label": "save", class: "revo-button green", onClick: () => this.onSave() }, capts.save),
7918
+ hAsync("button", { key: "cancel", id: "revo-button-ok", "aria-label": "ok", class: "revo-button green", onClick: () => this.onCancel() }, capts.cancel),
7782
7919
  ], !this.disableDynamicFiltering && [
7783
- hAsync("button", { key: '5d40e8b1f13f94cff4f5a2e2aefeee8861104a9d', id: "revo-button-ok", "aria-label": "ok", class: "revo-button green", onClick: () => this.onCancel() }, capts.ok),
7784
- hAsync("button", { key: '67eac3abd16f6f6e2ed7089dcfb0d05524ddb7df', id: "revo-button-reset", "aria-label": "reset", class: "revo-button outline", onClick: () => this.onReset() }, capts.reset),
7920
+ hAsync("button", { key: "ok", id: "revo-button-ok", "aria-label": "ok", class: "revo-button green", onClick: () => this.onCancel() }, capts.ok),
7921
+ hAsync("button", { key: "reset", id: "revo-button-reset", "aria-label": "reset", class: "revo-button outline", onClick: () => this.onReset() }, capts.reset),
7785
7922
  ]),
7786
- hAsync("slot", { key: 'b27a9bb3ef814e1e09dca14eda3e332ff34c654c', slot: "footer" }),
7923
+ hAsync("slot", { key: "footer-slot", slot: "footer" }),
7787
7924
  ])));
7788
7925
  }
7789
7926
  get element() { return getElement(this); }
@@ -7803,6 +7940,8 @@ class FilterPanel {
7803
7940
  "currentFilterType": [32],
7804
7941
  "changes": [32],
7805
7942
  "filterItems": [32],
7943
+ "draggedFilterId": [32],
7944
+ "dragOverFilterId": [32],
7806
7945
  "show": [64],
7807
7946
  "getChanges": [64]
7808
7947
  },
@@ -13084,43 +13223,82 @@ class ColumnService {
13084
13223
  mapping,
13085
13224
  };
13086
13225
  }
13087
- getTransformedDataToApply(start, data) {
13226
+ getTransformedDataToApply({ start, data, targetRange, }) {
13088
13227
  const changed = {};
13089
13228
  const copyRowLength = data.length;
13229
+ if (!copyRowLength) {
13230
+ return {
13231
+ changed,
13232
+ range: null,
13233
+ };
13234
+ }
13090
13235
  const colLength = this.columns.length;
13091
13236
  const rowLength = this.dataStore.get('items').length;
13237
+ const bounds = this.getDataApplyBounds(start, targetRange, copyRowLength, rowLength, colLength);
13238
+ if (!bounds) {
13239
+ return {
13240
+ changed,
13241
+ range: null,
13242
+ };
13243
+ }
13244
+ const { startRow, startCol, endRow } = bounds;
13245
+ let maxCol = startCol - 1;
13246
+ let lastRow = startRow - 1;
13092
13247
  // rows
13093
- let rowIndex = start.y;
13094
- let maxCol = 0;
13095
- for (let i = 0; rowIndex < rowLength && i < copyRowLength; rowIndex++, i++) {
13248
+ for (let rowIndex = startRow, i = 0; rowIndex <= endRow; rowIndex++, i++) {
13096
13249
  // copy original data link
13097
13250
  const copyRow = data[i % copyRowLength];
13098
13251
  const copyColLength = (copyRow === null || copyRow === void 0 ? void 0 : copyRow.length) || 0;
13099
- // columns
13100
- let colIndex = start.x;
13101
- for (let j = 0; colIndex < colLength && j < copyColLength; colIndex++, j++) {
13102
- const p = this.columns[colIndex].prop;
13103
- const currentCol = j % colLength;
13104
- /** if can write */
13105
- if (!this.isReadOnly(rowIndex, colIndex)) {
13106
- /** to show before save */
13107
- if (!changed[rowIndex]) {
13108
- changed[rowIndex] = {};
13109
- }
13110
- changed[rowIndex][p] = copyRow[currentCol];
13111
- }
13252
+ if (!copyColLength) {
13253
+ continue;
13112
13254
  }
13113
- maxCol = Math.max(maxCol, colIndex - 1);
13255
+ maxCol = Math.max(maxCol, this.applyClipboardRow(changed, {
13256
+ bounds,
13257
+ copyColLength,
13258
+ copyRow,
13259
+ rowIndex,
13260
+ start,
13261
+ targetRange,
13262
+ }));
13263
+ lastRow = rowIndex;
13114
13264
  }
13115
- const range = getRange(start, {
13116
- y: rowIndex - 1,
13117
- x: maxCol,
13118
- });
13119
13265
  return {
13120
13266
  changed,
13121
- range,
13267
+ range: this.getAppliedRange(bounds, lastRow, maxCol),
13122
13268
  };
13123
13269
  }
13270
+ getDataApplyBounds(start, targetRange, copyRowLength, rowLength, colLength) {
13271
+ var _a, _b, _c;
13272
+ const startRow = (_a = targetRange === null || targetRange === void 0 ? void 0 : targetRange.y) !== null && _a !== void 0 ? _a : start.y;
13273
+ const startCol = (_b = targetRange === null || targetRange === void 0 ? void 0 : targetRange.x) !== null && _b !== void 0 ? _b : start.x;
13274
+ 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);
13275
+ if (endRow < startRow || startCol >= colLength) {
13276
+ return null;
13277
+ }
13278
+ return { startRow, startCol, endRow, colLength };
13279
+ }
13280
+ applyClipboardRow(changed, { bounds, copyColLength, copyRow, rowIndex, start, targetRange, }) {
13281
+ var _a;
13282
+ 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);
13283
+ for (let colIndex = bounds.startCol, j = 0; colIndex <= endCol; colIndex++, j++) {
13284
+ if (this.isReadOnly(rowIndex, colIndex)) {
13285
+ continue;
13286
+ }
13287
+ const prop = this.columns[colIndex].prop;
13288
+ changed[rowIndex] = changed[rowIndex] || {};
13289
+ changed[rowIndex][prop] = copyRow[j % copyColLength];
13290
+ }
13291
+ return endCol;
13292
+ }
13293
+ getAppliedRange({ startRow, startCol }, lastRow, maxCol) {
13294
+ if (lastRow < startRow || maxCol < startCol) {
13295
+ return null;
13296
+ }
13297
+ return getRange({ x: startCol, y: startRow }, {
13298
+ y: lastRow,
13299
+ x: maxCol,
13300
+ });
13301
+ }
13124
13302
  getRangeStaticData(d, value) {
13125
13303
  const changed = {};
13126
13304
  // rows
@@ -13787,6 +13965,30 @@ class AutoFillService {
13787
13965
  }
13788
13966
  }
13789
13967
 
13968
+ function getRangeFillClipboardData(data, useClipboard) {
13969
+ var _a;
13970
+ if (!isClipboardRangeFillEnabled(useClipboard)) {
13971
+ return null;
13972
+ }
13973
+ const normalized = trimTrailingEmptyClipboardRows(data);
13974
+ return normalized.length === 1 && ((_a = normalized[0]) === null || _a === void 0 ? void 0 : _a.length) === 1
13975
+ ? normalized
13976
+ : null;
13977
+ }
13978
+ function isClipboardRangeFillEnabled(useClipboard) {
13979
+ return (typeof useClipboard === 'object' && useClipboard.rangeFill === true);
13980
+ }
13981
+ function trimTrailingEmptyClipboardRows(data) {
13982
+ const rows = [...data];
13983
+ while (rows.length > 1 && isEmptyClipboardRow(rows[rows.length - 1])) {
13984
+ rows.pop();
13985
+ }
13986
+ return rows;
13987
+ }
13988
+ function isEmptyClipboardRow(row) {
13989
+ return !row || row.every(cell => cell === '');
13990
+ }
13991
+
13790
13992
  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}`;
13791
13993
 
13792
13994
  /**
@@ -14037,9 +14239,9 @@ class OverlaySelection {
14037
14239
  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) }));
14038
14240
  }
14039
14241
  }
14040
- 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),
14242
+ 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),
14041
14243
  // it's done to be able to throw events from different levels, not just from editor
14042
- onCelledit: (e) => this.onEditCell(e) }, nodes, hAsync("slot", { key: 'cd3525d404aa44fd8d06e7fc459777acb8a9d585', name: "data" })));
14244
+ onCelledit: (e) => this.onEditCell(e) }, nodes, hAsync("slot", { key: '3cbe4c3ad7d447f779e9e20f73eec2e3107275e0', name: "data" })));
14043
14245
  }
14044
14246
  /**
14045
14247
  * Executes the focus operation on the specified range of cells.
@@ -14204,13 +14406,25 @@ class OverlaySelection {
14204
14406
  if (!focus || isEditing) {
14205
14407
  return;
14206
14408
  }
14207
- let { changed, range } = this.columnService.getTransformedDataToApply(focus, data);
14409
+ const rangeFillData = getRangeFillClipboardData(data, this.useClipboard);
14410
+ const targetRange = rangeFillData
14411
+ ? this.getClipboardPasteTargetRange()
14412
+ : null;
14413
+ let { changed, range } = this.columnService.getTransformedDataToApply({
14414
+ start: focus,
14415
+ data: rangeFillData || data,
14416
+ targetRange,
14417
+ });
14208
14418
  const { defaultPrevented: canPaste } = this.rangeClipboardPaste.emit(Object.assign({ data: changed, models: collectModelsOfRange(changed, this.dataStore), range }, this.types));
14209
14419
  if (canPaste) {
14210
14420
  return;
14211
14421
  }
14212
14422
  (_a = this.autoFillService) === null || _a === void 0 ? void 0 : _a.onRangeApply(changed, range, range);
14213
14423
  }
14424
+ getClipboardPasteTargetRange() {
14425
+ const range = this.selectionStore.get('range');
14426
+ return range && !isRangeSingleCell(range) ? range : null;
14427
+ }
14214
14428
  async focusNext() {
14215
14429
  var _a;
14216
14430
  const canFocus = await ((_a = this.keyboardService) === null || _a === void 0 ? void 0 : _a.keyChangeSelection(new KeyboardEvent('keydown', {
@@ -15758,7 +15972,7 @@ class FilterPlugin extends BasePlugin {
15758
15972
  }
15759
15973
  // filter button clicked, open filter dialog
15760
15974
  const buttonPos = (filterButton instanceof HTMLElement ? filterButton : el).getBoundingClientRect();
15761
- 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 });
15975
+ const data = Object.assign(Object.assign(Object.assign({}, e.detail), this.filterCollection[prop]), { x: buttonPos.x, y: buttonPos.y + buttonPos.height, anchorY: buttonPos.y, autoCorrect: true, filterTypes: this.getColumnFilter(e.detail.filter), filterItems: this.multiFilterItems, extraContent: this.extraHyperContent, extraBottomContent: this.extraBottomHyperContent });
15762
15976
  (_b = this.beforeshow) === null || _b === void 0 ? void 0 : _b.call(this, data);
15763
15977
  this.pop.show(data);
15764
15978
  }
@@ -17016,9 +17230,22 @@ function filterOutEmptyGroupRows(source, filterTrimmed) {
17016
17230
  return trimmed;
17017
17231
  }
17018
17232
 
17233
+ var __rest$1 = (undefined && undefined.__rest) || function (s, e) {
17234
+ var t = {};
17235
+ for (var p in s)
17236
+ if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
17237
+ t[p] = s[p];
17238
+ if (s != null && typeof Object.getOwnPropertySymbols === "function")
17239
+ for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
17240
+ if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
17241
+ t[p[i]] = s[p[i]];
17242
+ }
17243
+ return t;
17244
+ };
17019
17245
  const PADDING_DEPTH = 10;
17020
- const RowRenderer = ({ rowClass, index, size, start, depth, groupingLevel }, cells) => {
17021
- const props = Object.assign({ [DATA_ROW]: index }, (typeof groupingLevel === 'number'
17246
+ const RowRenderer = (_a, cells) => {
17247
+ var { rowClass, index, size, start, depth, groupingLevel } = _a, attrs = __rest$1(_a, ["rowClass", "index", "size", "start", "depth", "groupingLevel"]);
17248
+ const props = Object.assign(Object.assign(Object.assign({}, attrs), { [DATA_ROW]: index }), (typeof groupingLevel === 'number'
17022
17249
  ? { 'data-level': groupingLevel }
17023
17250
  : {}));
17024
17251
  return (hAsync("div", Object.assign({}, props, { class: `rgRow ${rowClass || ''}`, style: {
@@ -17045,12 +17272,17 @@ const GroupingRowRenderer = (props) => {
17045
17272
  const name = model[PSEUDO_GROUP_ITEM];
17046
17273
  const expanded = model[GROUP_EXPANDED];
17047
17274
  const depth = parseInt(model[GROUP_DEPTH], 10) || 0;
17275
+ const groupRowAttrs = {
17276
+ rowClass: 'groupingRow',
17277
+ depth,
17278
+ expanded,
17279
+ };
17048
17280
  if (groupingCustomRenderer) {
17049
- 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,
17281
+ 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,
17050
17282
  expanded,
17051
17283
  depth })))));
17052
17284
  }
17053
- return (hAsync(RowRenderer, Object.assign({}, props, { rowClass: "groupingRow", depth: depth }), hasExpand && [
17285
+ return (hAsync(RowRenderer, Object.assign({}, props, groupRowAttrs), hasExpand && [
17054
17286
  hAsync("button", { class: { [GROUP_EXPAND_BTN]: true }, onClick: e => expandEvent(e, model, itemIndex) }, expandSvgIconVNode(expanded)),
17055
17287
  name,
17056
17288
  ]));
@@ -18523,8 +18755,17 @@ class ColumnMovePlugin extends BasePlugin {
18523
18755
  constructor(revogrid, providers) {
18524
18756
  super(revogrid, providers);
18525
18757
  this.moveFunc = debounce$1((e) => this.doMove(e), 5);
18758
+ this.preventHeaderClickAfterDrag = (event) => {
18759
+ if (!this.preventNextHeaderClick) {
18760
+ return;
18761
+ }
18762
+ this.preventNextHeaderClick = false;
18763
+ event.preventDefault();
18764
+ };
18526
18765
  this.staticDragData = null;
18527
18766
  this.dragData = null;
18767
+ this.columnDragMoved = false;
18768
+ this.preventNextHeaderClick = false;
18528
18769
  this.localSubscriptions = {};
18529
18770
  this.orderUi = new ColumnOrderHandler();
18530
18771
  revogrid.appendChild(this.orderUi.render());
@@ -18543,11 +18784,13 @@ class ColumnMovePlugin extends BasePlugin {
18543
18784
  callback: (e) => this.move(e),
18544
18785
  };
18545
18786
  this.addEventListener(COLUMN_CLICK, ({ detail }) => this.dragStart(detail));
18787
+ this.revogrid.addEventListener('beforeheaderclick', this.preventHeaderClickAfterDrag, { capture: true });
18546
18788
  }
18547
18789
  dragStart({ event, data }) {
18548
18790
  if (event.defaultPrevented) {
18549
18791
  return;
18550
18792
  }
18793
+ this.preventNextHeaderClick = false;
18551
18794
  const { defaultPrevented } = dispatch(this.revogrid, COLUMN_DRAG_START_EVENT, data);
18552
18795
  // check if allowed to drag particulat column
18553
18796
  if (defaultPrevented) {
@@ -18569,7 +18812,8 @@ class ColumnMovePlugin extends BasePlugin {
18569
18812
  const cols = this.getDimension(data.pin || 'rgCol');
18570
18813
  const gridRect = this.revogrid.getBoundingClientRect();
18571
18814
  const elRect = dataEl.getBoundingClientRect();
18572
- const startItem = getItemByPosition(cols, getLeftRelative(event.x, gridRect.left, elRect.left - gridRect.left) + (cols.renderOffset || 0));
18815
+ const startItem = getItemByPosition(cols, getLeftRelative(event.x, gridRect.left, elRect.left - gridRect.left) +
18816
+ (cols.renderOffset || 0));
18573
18817
  this.staticDragData = {
18574
18818
  startPos: event.x,
18575
18819
  startItem,
@@ -18600,10 +18844,14 @@ class ColumnMovePlugin extends BasePlugin {
18600
18844
  if (rgCol.itemIndex >= this.staticDragData.cols.count) {
18601
18845
  return;
18602
18846
  }
18603
- this.orderUi.showHandler(rgCol.end - (this.staticDragData.cols.renderOffset || 0) + dragData.scrollOffset, dragData.gridRect.width);
18847
+ this.orderUi.showHandler(getColumnDragPosition(rgCol, this.staticDragData.startItem, this.staticDragData.cols.renderOffset || 0, dragData.scrollOffset), dragData.gridRect.width);
18604
18848
  }
18605
18849
  }
18606
18850
  move(e) {
18851
+ if (this.staticDragData &&
18852
+ Math.abs(this.staticDragData.startPos - e.x) > 10) {
18853
+ this.columnDragMoved = true;
18854
+ }
18607
18855
  dispatch(this.revogrid, COLUMN_DRAG_MOVE_EVENT, e);
18608
18856
  // then do move
18609
18857
  this.moveFunc(e);
@@ -18612,6 +18860,7 @@ class ColumnMovePlugin extends BasePlugin {
18612
18860
  this.clearOrder();
18613
18861
  }
18614
18862
  onMouseUp(e) {
18863
+ const suppressClick = this.columnDragMoved;
18615
18864
  // apply new positions
18616
18865
  if (this.dragData && this.staticDragData) {
18617
18866
  let relativePos = getLeftRelative(e.x, this.dragData.gridRect.left, this.dragData.scrollOffset);
@@ -18634,6 +18883,9 @@ class ColumnMovePlugin extends BasePlugin {
18634
18883
  }
18635
18884
  dispatch(this.revogrid, COLUMN_DRAG_END_EVENT, this.getData(this.staticDragData, newItems, source));
18636
18885
  }
18886
+ if (suppressClick) {
18887
+ this.preventNextHeaderClick = !!e.target.closest('revogr-header');
18888
+ }
18637
18889
  this.clearOrder();
18638
18890
  }
18639
18891
  clearLocalSubscriptions() {
@@ -18642,6 +18894,7 @@ class ColumnMovePlugin extends BasePlugin {
18642
18894
  clearOrder() {
18643
18895
  this.staticDragData = null;
18644
18896
  this.dragData = null;
18897
+ this.columnDragMoved = false;
18645
18898
  this.clearLocalSubscriptions();
18646
18899
  this.orderUi.stop(this.revogrid);
18647
18900
  }
@@ -18651,6 +18904,7 @@ class ColumnMovePlugin extends BasePlugin {
18651
18904
  clearSubscriptions() {
18652
18905
  super.clearSubscriptions();
18653
18906
  this.clearLocalSubscriptions();
18907
+ this.revogrid.removeEventListener('beforeheaderclick', this.preventHeaderClickAfterDrag, { capture: true });
18654
18908
  }
18655
18909
  getData({ gridEl, dataEl, pin }, order, source = []) {
18656
18910
  const gridRect = gridEl.getBoundingClientRect();
@@ -18672,6 +18926,12 @@ class ColumnMovePlugin extends BasePlugin {
18672
18926
  function getLeftRelative(absoluteX, gridPos, offset) {
18673
18927
  return absoluteX - gridPos - offset;
18674
18928
  }
18929
+ function getColumnDragPosition(targetItem, startItem, renderOffset, scrollOffset) {
18930
+ const insertionEdge = startItem.itemIndex > targetItem.itemIndex
18931
+ ? targetItem.start
18932
+ : targetItem.end;
18933
+ return insertionEdge - renderOffset + scrollOffset;
18934
+ }
18675
18935
 
18676
18936
  function isMobileDevice() {
18677
18937
  return /Mobi/i.test(navigator.userAgent) || /Android/i.test(navigator.userAgent) || navigator.maxTouchPoints > 0;
@@ -19021,7 +19281,7 @@ class RevoGridComponent {
19021
19281
  this.rowSize = 0;
19022
19282
  /** Indicates default column size. */
19023
19283
  this.colSize = 100;
19024
- /** When true, user can range selection. */
19284
+ /** When true, user can select a cell range. Required for range-based clipboard fill. */
19025
19285
  this.range = false;
19026
19286
  /** When true, grid in read only mode. */
19027
19287
  this.readonly = false;
@@ -19033,7 +19293,7 @@ class RevoGridComponent {
19033
19293
  this.noHorizontalScrollTransfer = false;
19034
19294
  /** When true cell focus appear. */
19035
19295
  this.canFocus = true;
19036
- /** When true enable clipboard. */
19296
+ /** When true enable clipboard. Can be boolean or clipboard config. */
19037
19297
  this.useClipboard = true;
19038
19298
  /**
19039
19299
  * Columns - defines an array of grid columns.
@@ -21889,9 +22149,17 @@ class RevogrViewportScroll {
21889
22149
  }
21890
22150
  render() {
21891
22151
  var _a, _b;
21892
- const physicalContentHeight = getContentSize(this.contentHeight, (_b = (_a = this.verticalScroll) === null || _a === void 0 ? void 0 : _a.clientHeight) !== null && _b !== void 0 ? _b : 0);
22152
+ const clientHeight = (_b = (_a = this.verticalScroll) === null || _a === void 0 ? void 0 : _a.clientHeight) !== null && _b !== void 0 ? _b : 0;
22153
+ // When content fits in the viewport (no scroll needed), don't inflate content-wrapper
22154
+ // to clientHeight — that would prevent inner-content-table from shrinking and push
22155
+ // rowPinEnd (footer) to the bottom instead of letting it follow the data rows.
22156
+ // For large/compressed grids (content > clientHeight), physicalContentHeight handles
22157
+ // the browser scroll-size compression correctly.
22158
+ const physicalContentHeight = this.contentHeight < clientHeight
22159
+ ? Math.max(this.contentHeight, 0)
22160
+ : getContentSize(this.contentHeight, clientHeight);
21893
22161
  const physicalContentWidth = getContentSize(this.contentWidth, 0);
21894
- 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 })))));
22162
+ 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 })))));
21895
22163
  }
21896
22164
  /**
21897
22165
  * Extra layer for scroll event monitoring, where MouseWheel event is not passing