@revolist/revogrid 4.27.0 → 4.27.2

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 (76) hide show
  1. package/dist/cjs/{cell-renderer-C7rdgaov.js → cell-renderer-BDIx0xys.js} +1 -1
  2. package/dist/cjs/{column.service-Bbml5C2j.js → column.service-D-ENzqyb.js} +2 -0
  3. package/dist/cjs/{filter.button-F2Bw3UAd.js → filter.button-C6ixuMmr.js} +3 -2
  4. package/dist/cjs/{header-cell-renderer-BljFI6wj.js → header-cell-renderer-B5Y4fdZC.js} +1 -1
  5. package/dist/cjs/index.cjs.js +7 -5
  6. package/dist/cjs/loader.cjs.js +1 -1
  7. package/dist/cjs/revo-grid.cjs.entry.js +63 -43
  8. package/dist/cjs/revo-grid.cjs.js +1 -1
  9. package/dist/cjs/revogr-attribution_7.cjs.entry.js +1 -1
  10. package/dist/cjs/revogr-data_4.cjs.entry.js +12 -11
  11. package/dist/cjs/revogr-filter-panel.cjs.entry.js +139 -33
  12. package/dist/cjs/{row-resize.plugin-BRQy_qNn.js → row-resize.plugin-C4YOF1lN.js} +353 -185
  13. package/dist/collection/components/header/header-renderer.js +7 -6
  14. package/dist/collection/components/header/revogr-header-style.css +8 -3
  15. package/dist/collection/components/revoGrid/revo-grid-style.css +12 -2
  16. package/dist/collection/components/revoGrid/revo-grid.js +37 -21
  17. package/dist/collection/plugins/filter/filter.button.js +3 -2
  18. package/dist/collection/plugins/filter/filter.indexed.js +5 -0
  19. package/dist/collection/plugins/filter/filter.panel.js +138 -31
  20. package/dist/collection/plugins/filter/filter.plugin.js +48 -5
  21. package/dist/collection/plugins/filter/filter.style.css +25 -3
  22. package/dist/collection/plugins/groupingRow/grouping.const.js +1 -0
  23. package/dist/collection/plugins/groupingRow/grouping.row.plugin.js +84 -54
  24. package/dist/collection/plugins/groupingRow/grouping.sorting.service.js +58 -0
  25. package/dist/collection/plugins/groupingRow/grouping.trimmed.service.js +5 -3
  26. package/dist/collection/plugins/row-resize/row-resize.plugin.js +144 -113
  27. package/dist/collection/plugins/sorting/sorting.plugin.js +16 -13
  28. package/dist/collection/plugins/wcag/index.js +5 -4
  29. package/dist/collection/services/dimension.provider.js +17 -1
  30. package/dist/esm/{cell-renderer-BFpmdV8H.js → cell-renderer-D9ze8OJw.js} +1 -1
  31. package/dist/esm/{column.service-CM-wgGs8.js → column.service-pu_fdQ0S.js} +2 -1
  32. package/dist/esm/{filter.button-DMhpuAiw.js → filter.button-CEPUxLUo.js} +3 -2
  33. package/dist/{revo-grid/header-cell-renderer-Bqh1PrgH.js → esm/header-cell-renderer-YCiVIQ2E.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 +63 -43
  37. package/dist/esm/revo-grid.js +1 -1
  38. package/dist/esm/revogr-attribution_7.entry.js +1 -1
  39. package/dist/esm/revogr-data_4.entry.js +12 -11
  40. package/dist/esm/revogr-filter-panel.entry.js +139 -33
  41. package/dist/esm/{row-resize.plugin-BRiaHlHA.js → row-resize.plugin-Beu0pMds.js} +354 -187
  42. package/dist/revo-grid/{cell-renderer-BFpmdV8H.js → cell-renderer-D9ze8OJw.js} +1 -1
  43. package/dist/revo-grid/{column.service-CM-wgGs8.js → column.service-pu_fdQ0S.js} +2 -1
  44. package/dist/revo-grid/{filter.button-DMhpuAiw.js → filter.button-CEPUxLUo.js} +3 -2
  45. package/dist/{esm/header-cell-renderer-Bqh1PrgH.js → revo-grid/header-cell-renderer-YCiVIQ2E.js} +1 -1
  46. package/dist/revo-grid/index.esm.js +6 -6
  47. package/dist/revo-grid/revo-grid.entry.js +63 -43
  48. package/dist/revo-grid/revo-grid.esm.js +1 -1
  49. package/dist/revo-grid/revogr-attribution_7.entry.js +1 -1
  50. package/dist/revo-grid/revogr-data_4.entry.js +12 -11
  51. package/dist/revo-grid/revogr-filter-panel.entry.js +139 -33
  52. package/dist/revo-grid/{row-resize.plugin-BRiaHlHA.js → row-resize.plugin-Beu0pMds.js} +354 -187
  53. package/dist/types/components/revoGrid/revo-grid.d.ts +2 -0
  54. package/dist/types/plugins/filter/filter.indexed.d.ts +2 -0
  55. package/dist/types/plugins/filter/filter.panel.d.ts +9 -2
  56. package/dist/types/plugins/filter/filter.plugin.d.ts +8 -1
  57. package/dist/types/plugins/filter/filter.types.d.ts +8 -0
  58. package/dist/types/plugins/groupingRow/grouping.const.d.ts +1 -0
  59. package/dist/types/plugins/groupingRow/grouping.row.plugin.d.ts +5 -7
  60. package/dist/types/plugins/groupingRow/grouping.sorting.service.d.ts +7 -0
  61. package/dist/types/plugins/groupingRow/grouping.trimmed.service.d.ts +9 -0
  62. package/dist/types/plugins/row-resize/row-resize.plugin.d.ts +14 -12
  63. package/dist/types/plugins/sorting/sorting.plugin.d.ts +5 -0
  64. package/dist/types/services/dimension.provider.d.ts +7 -1
  65. package/dist/types/types/interfaces.d.ts +13 -1
  66. package/hydrate/index.js +561 -264
  67. package/hydrate/index.mjs +561 -264
  68. package/package.json +1 -1
  69. package/standalone/column.service.js +1 -1
  70. package/standalone/filter.button.js +1 -1
  71. package/standalone/index.js +1 -1
  72. package/standalone/revo-grid.js +1 -1
  73. package/standalone/revogr-data2.js +1 -1
  74. package/standalone/revogr-filter-panel.js +1 -1
  75. package/standalone/revogr-header2.js +1 -1
  76. package/standalone/revogr-overlay-selection2.js +1 -1
package/hydrate/index.js CHANGED
@@ -7522,9 +7522,10 @@ const AND_OR_BUTTON = 'and-or-button';
7522
7522
  const TRASH_BUTTON = 'trash-button';
7523
7523
  const REORDER_BUTTON = 'reorder-button';
7524
7524
  const FilterButton = ({ column }) => {
7525
- return (hAsync("span", null, hAsync("button", { class: {
7525
+ const active = !!(column === null || column === void 0 ? void 0 : column[FILTER_PROP]);
7526
+ return (hAsync("span", { class: "filter-button-wrapper" }, hAsync("button", { class: {
7526
7527
  [FILTER_BUTTON_CLASS]: true,
7527
- [FILTER_BUTTON_ACTIVE]: column && !!column[FILTER_PROP],
7528
+ [FILTER_BUTTON_ACTIVE]: active,
7528
7529
  } }, 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" }))))));
7529
7530
  };
7530
7531
  const TrashButton = ({ ariaLabel, onClick }) => {
@@ -7608,7 +7609,7 @@ function moveFilterItem(items, sourceId, targetId) {
7608
7609
  return true;
7609
7610
  }
7610
7611
 
7611
- const filterStyleCss = () => `.revo-button{position:relative;overflow:hidden;color:var(--rg-theme-button-text);background-color:var(--rg-theme-button-bg);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:var(--rg-theme-button-success-bg)}.revo-button.red{background-color:var(--rg-theme-button-danger-bg)}.revo-button:disabled,.revo-button[disabled]{cursor:not-allowed !important;filter:opacity(0.35) !important}.revo-button.outline{border:1px solid var(--rg-theme-button-outline-border);line-height:30px;background:none;color:var(--rg-theme-button-outline-text);box-shadow:none}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;color:var(--rg-theme-filter-panel-text);background-color:var(--rg-theme-filter-panel-bg);border:1px solid var(--rg-theme-filter-panel-border);transform-origin:62px 0px;box-shadow:0 5px 18px -2px var(--rg-theme-filter-panel-shadow);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;color:var(--rg-theme-filter-panel-text);background:var(--rg-theme-filter-panel-input-bg);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(--rg-theme-filter-panel-bg);border-top:1px solid var(--rg-theme-filter-panel-divider)}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;position:relative;z-index:1}.rgHeaderCell .rv-filter.active{color:var(--rg-theme-filter-panel-icon-active)}.rgHeaderCell .rv-filter .filter-img{color:var(--rg-theme-filter-panel-icon);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;color:var(--rg-theme-filter-panel-text);border:1px solid var(--rg-theme-filter-panel-select-border);box-shadow:transparent;border-radius:0.5em;appearance:none;background-color:var(--rg-theme-filter-panel-input-bg);background-image:var(--revo-grid-filter-panel-select-arrow, 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{}.select-css:hover{border-color:var(--rg-theme-filter-panel-select-border)}.select-css{}.select-css:focus{border-color:var(--rg-theme-filter-panel-select-border-hover);box-shadow:var(--rg-theme-filter-panel-focus-ring);outline:none}.select-css{}.select-css option{font-weight:normal}.select-css{}.select-css:disabled,.select-css[aria-disabled=true]{color:var(--rg-theme-filter-panel-muted-text);background-image:var(--revo-grid-filter-panel-select-arrow-disabled, 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"))}.select-css:disabled:hover,.select-css[aria-disabled=true]{border-color:var(--rg-theme-filter-panel-select-border)}.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(--rg-theme-filter-panel-reorder-accent);border-radius:999px;box-shadow:0 0 0 2px var(--rg-theme-filter-panel-bg)}.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(--rg-theme-filter-panel-reorder-color);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(--rg-theme-filter-panel-reorder-accent)}.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(--rg-theme-filter-panel-divider);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}`;
7612
+ const filterStyleCss = () => `.revo-button{position:relative;overflow:hidden;color:var(--rg-theme-button-text);background-color:var(--rg-theme-button-bg);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:var(--rg-theme-button-success-bg)}.revo-button.red{background-color:var(--rg-theme-button-danger-bg)}.revo-button:disabled,.revo-button[disabled]{cursor:not-allowed !important;filter:opacity(0.35) !important}.revo-button.outline{border:1px solid var(--rg-theme-button-outline-border);line-height:30px;background:none;color:var(--rg-theme-button-outline-text);box-shadow:none}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;color:var(--rg-theme-filter-panel-text);background-color:var(--rg-theme-filter-panel-bg);border:1px solid var(--rg-theme-filter-panel-border);transform-origin:62px 0px;box-shadow:0 5px 18px -2px var(--rg-theme-filter-panel-shadow);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;color:var(--rg-theme-filter-panel-text);background:var(--rg-theme-filter-panel-input-bg);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(--rg-theme-filter-panel-bg);border-top:1px solid var(--rg-theme-filter-panel-divider)}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, width 267ms cubic-bezier(0.4, 0, 0.2, 1) 0ms, transform 178ms cubic-bezier(0.4, 0, 0.2, 1) 0ms}.rgHeaderCell:hover:has(.rv-filter) .header-content,.rgHeaderCell:focus-within:has(.rv-filter) .header-content,.rgHeaderCell:has(.rv-filter.active) .header-content{margin-right:24px}.rgHeaderCell:hover:has(.rv-filter):has(.desc) .header-content,.rgHeaderCell:hover:has(.rv-filter):has(.asc) .header-content,.rgHeaderCell:focus-within:has(.rv-filter):has(.desc) .header-content,.rgHeaderCell:focus-within:has(.rv-filter):has(.asc) .header-content,.rgHeaderCell:has(.rv-filter.active):has(.desc) .header-content,.rgHeaderCell:has(.rv-filter.active):has(.asc) .header-content{margin-right:8px;padding-right:24px}.rgHeaderCell:hover .rv-filter,.rgHeaderCell:focus-within .rv-filter,.rgHeaderCell .rv-filter.active{opacity:1;width:24px}@media (hover: none), (pointer: coarse){.rgHeaderCell:has(.rv-filter) .header-content{margin-right:24px}.rgHeaderCell:has(.rv-filter):has(.desc) .header-content,.rgHeaderCell:has(.rv-filter):has(.asc) .header-content{margin-right:8px;padding-right:24px}.rgHeaderCell .rv-filter{opacity:1;width:24px}}.rgHeaderCell .rv-filter{height:24px;width:0;background:none;border:0;opacity:0;visibility:visible;cursor:pointer;border-radius:4px;position:relative;z-index:1;padding:0}.rgHeaderCell .rv-filter.active{color:var(--rg-theme-filter-panel-icon-active)}.rgHeaderCell .rv-filter .filter-img{color:var(--rg-theme-filter-panel-icon);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;color:var(--rg-theme-filter-panel-text);border:1px solid var(--rg-theme-filter-panel-select-border);box-shadow:transparent;border-radius:0.5em;appearance:none;background-color:var(--rg-theme-filter-panel-input-bg);background-image:var(--revo-grid-filter-panel-select-arrow, 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{}.select-css:hover{border-color:var(--rg-theme-filter-panel-select-border)}.select-css{}.select-css:focus{border-color:var(--rg-theme-filter-panel-select-border-hover);box-shadow:var(--rg-theme-filter-panel-focus-ring);outline:none}.select-css{}.select-css option{font-weight:normal}.select-css{}.select-css:disabled,.select-css[aria-disabled=true]{color:var(--rg-theme-filter-panel-muted-text);background-image:var(--revo-grid-filter-panel-select-arrow-disabled, 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"))}.select-css:disabled:hover,.select-css[aria-disabled=true]{border-color:var(--rg-theme-filter-panel-select-border)}.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(--rg-theme-filter-panel-reorder-accent);border-radius:999px;box-shadow:0 0 0 2px var(--rg-theme-filter-panel-bg)}.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(--rg-theme-filter-panel-reorder-color);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(--rg-theme-filter-panel-reorder-accent)}.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(--rg-theme-filter-panel-divider);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}`;
7612
7613
 
7613
7614
  const defaultType = 'none';
7614
7615
  const FILTER_LIST_CLASS = 'multi-filter-list';
@@ -7626,6 +7627,7 @@ class FilterPanel {
7626
7627
  registerInstance(this, hostRef);
7627
7628
  this.filterChange = createEvent(this, "filterChange", 7);
7628
7629
  this.resetChange = createEvent(this, "resetChange", 7);
7630
+ this.hasChanges = false;
7629
7631
  this.filterCaptionsInternal = {
7630
7632
  title: 'Filter by',
7631
7633
  ok: 'Close',
@@ -7661,7 +7663,7 @@ class FilterPanel {
7661
7663
  */
7662
7664
  this.allowDuplicateOperators = true;
7663
7665
  this.debouncedApplyFilter = debounce$1(() => {
7664
- this.filterChange.emit(this.filterItems);
7666
+ this.emitFilterChange();
7665
7667
  }, 400);
7666
7668
  }
7667
7669
  onMouseDown(e) {
@@ -7691,10 +7693,25 @@ class FilterPanel {
7691
7693
  }
7692
7694
  }
7693
7695
  async show(newEntity) {
7696
+ this.hasChanges = false;
7694
7697
  this.changes = newEntity;
7695
- this.filterItems = (newEntity === null || newEntity === void 0 ? void 0 : newEntity.filterItems) || {};
7698
+ this.filterItems = this.cloneFilterItems((newEntity === null || newEntity === void 0 ? void 0 : newEntity.filterItems) || {});
7699
+ this.draftFilter = undefined;
7696
7700
  if (this.changes) {
7697
7701
  this.changes.type = this.changes.type || defaultType;
7702
+ const prop = this.changes.prop;
7703
+ const propFilters = prop === undefined ? undefined : this.filterItems[prop];
7704
+ if (!(propFilters === null || propFilters === void 0 ? void 0 : propFilters.length) && this.changes.showDefaultFilter !== false) {
7705
+ const type = this.resolveDraftFilterType(this.changes.defaultFilterType);
7706
+ if (type) {
7707
+ this.draftFilter = {
7708
+ id: ++this.filterId,
7709
+ type,
7710
+ value: '',
7711
+ relation: 'and',
7712
+ };
7713
+ }
7714
+ }
7698
7715
  }
7699
7716
  }
7700
7717
  async getChanges() {
@@ -7715,29 +7732,42 @@ class FilterPanel {
7715
7732
  const prop = (_a = this.changes) === null || _a === void 0 ? void 0 : _a.prop;
7716
7733
  if (prop === undefined)
7717
7734
  return '';
7718
- const propFilters = (_b = this.filterItems[prop]) !== null && _b !== void 0 ? _b : [];
7719
- const visibleFilterCount = propFilters.filter(filter => !filter.hidden).length;
7735
+ const propFilters = ((_b = this.filterItems[prop]) !== null && _b !== void 0 ? _b : []).map((filter, index) => ({
7736
+ filter,
7737
+ index,
7738
+ isDraft: false,
7739
+ }));
7740
+ if (this.draftFilter) {
7741
+ propFilters.push({
7742
+ filter: this.draftFilter,
7743
+ index: propFilters.length,
7744
+ isDraft: true,
7745
+ });
7746
+ }
7747
+ const visibleFilters = propFilters.filter(({ filter }) => !filter.hidden);
7748
+ const visibleFilterCount = visibleFilters.length;
7720
7749
  const capts = Object.assign(Object.assign({}, this.filterCaptionsInternal), this.filterCaptions);
7721
- return (hAsync("div", { key: this.filterId }, hAsync("ul", { class: "multi-filter-list-container" }, propFilters.map((filter, index) => {
7750
+ return (hAsync("div", { key: this.filterId }, hAsync("ul", { class: "multi-filter-list-container" }, propFilters.map(({ filter, index, isDraft }) => {
7751
+ var _a;
7722
7752
  let andOrButton;
7723
7753
  if (filter.hidden) {
7724
7754
  return;
7725
7755
  }
7726
7756
  // hide toggle button if there is only one filter and the last one
7727
- if (index !== this.filterItems[prop].length - 1) {
7757
+ if (((_a = visibleFilters[visibleFilterCount - 1]) === null || _a === void 0 ? void 0 : _a.filter.id) !== filter.id) {
7728
7758
  andOrButton = (hAsync(AndOrButton, { text: filter.relation === 'and' ? capts.and : capts.or, onClick: () => this.toggleFilterAndOr(filter.id) }));
7729
7759
  }
7730
- const extra = this.renderExtra(prop, index);
7760
+ const extra = this.renderExtra(prop, index, isDraft);
7731
7761
  const isDragging = this.draggedFilterId === filter.id;
7732
7762
  const isDragOver = this.dragOverFilterId === filter.id && !isDragging;
7733
- const canReorder = visibleFilterCount > 1;
7763
+ const canReorder = visibleFilterCount > 1 && !isDraft;
7734
7764
  return (hAsync("li", { key: filter.id, class: FILTER_LIST_CLASS, "aria-label": `${capts.filterCondition} ${index + 1}` }, hAsync("div", { class: {
7735
7765
  'multi-filter-list-row': true,
7736
7766
  'filter-row-drop-active': this.draggedFilterId !== undefined && !isDragging,
7737
7767
  'filter-row-dragging': isDragging,
7738
7768
  'filter-row-drag-over': isDragOver,
7739
- } }, 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) })))));
7740
- })), propFilters.some(f => !f.hidden) ? hAsync("div", { class: "add-filter-divider" }) : ''));
7769
+ } }, 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, isDraft) }, this.renderSelectOptions(filter.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) })))));
7770
+ })), visibleFilterCount ? hAsync("div", { class: "add-filter-divider" }) : ''));
7741
7771
  }
7742
7772
  componentDidRender() {
7743
7773
  this.syncDialog();
@@ -7786,16 +7816,24 @@ class FilterPanel {
7786
7816
  el.style.left = `${left}px`;
7787
7817
  el.style.top = `${top}px`;
7788
7818
  }
7789
- onFilterTypeChange(e, prop, index) {
7819
+ onFilterTypeChange(e, prop, index, isDraft = false) {
7790
7820
  if (!(e.target instanceof HTMLSelectElement)) {
7791
7821
  return;
7792
7822
  }
7793
- this.filterItems[prop][index].type = e.target.value;
7823
+ const type = e.target.value;
7824
+ const filter = isDraft
7825
+ ? this.promoteDraft(prop, type)
7826
+ : this.filterItems[prop][index];
7827
+ if (!filter) {
7828
+ return;
7829
+ }
7830
+ filter.type = type;
7831
+ this.hasChanges = true;
7794
7832
  // this re-renders the input to know if we need extra input
7795
7833
  this.filterId++;
7796
7834
  // adding setTimeout will wait for the next tick DOM update then focus on input
7797
7835
  setTimeout(() => {
7798
- const input = document.getElementById('filter-input-' + this.filterItems[prop][index].id);
7836
+ const input = document.getElementById('filter-input-' + filter.id);
7799
7837
  if (input instanceof HTMLInputElement) {
7800
7838
  input.focus();
7801
7839
  }
@@ -7830,12 +7868,20 @@ class FilterPanel {
7830
7868
  return;
7831
7869
  this.filterId++;
7832
7870
  this.currentFilterId = this.filterId;
7833
- this.filterItems[prop].push({
7834
- id: this.currentFilterId,
7835
- type: this.currentFilterType,
7836
- value: '',
7837
- relation: 'and',
7838
- });
7871
+ if (this.draftFilter) {
7872
+ this.draftFilter.id = this.currentFilterId;
7873
+ this.draftFilter.type = this.currentFilterType;
7874
+ this.promoteDraft(prop);
7875
+ }
7876
+ else {
7877
+ this.filterItems[prop].push({
7878
+ id: this.currentFilterId,
7879
+ type: this.currentFilterType,
7880
+ value: '',
7881
+ relation: 'and',
7882
+ });
7883
+ this.hasChanges = true;
7884
+ }
7839
7885
  // adding setTimeout will wait for the next tick DOM update then focus on input
7840
7886
  setTimeout(() => {
7841
7887
  const input = document.getElementById('filter-input-' + this.currentFilterId);
@@ -7844,7 +7890,9 @@ class FilterPanel {
7844
7890
  }, 0);
7845
7891
  }
7846
7892
  onSave() {
7847
- this.filterChange.emit(this.filterItems);
7893
+ if (this.hasChanges) {
7894
+ this.emitFilterChange();
7895
+ }
7848
7896
  }
7849
7897
  onCancel() {
7850
7898
  this.changes = undefined;
@@ -7852,16 +7900,25 @@ class FilterPanel {
7852
7900
  onReset() {
7853
7901
  var _a;
7854
7902
  this.assertChanges();
7855
- this.resetChange.emit((_a = this.changes) === null || _a === void 0 ? void 0 : _a.prop);
7903
+ this.draftFilter = undefined;
7904
+ const prop = (_a = this.changes) === null || _a === void 0 ? void 0 : _a.prop;
7905
+ if (prop !== undefined) {
7906
+ delete this.filterItems[prop];
7907
+ }
7908
+ this.resetChange.emit(prop);
7856
7909
  // this updates the DOM which is used by getFilterItemsList() key
7857
7910
  this.filterId++;
7858
7911
  }
7859
7912
  onRemoveFilter(id) {
7860
- var _a;
7913
+ var _a, _b;
7861
7914
  this.assertChanges();
7862
7915
  // this is for reactivity issues for getFilterItemsList()
7863
7916
  this.filterId++;
7864
7917
  const prop = (_a = this.changes) === null || _a === void 0 ? void 0 : _a.prop;
7918
+ if (((_b = this.draftFilter) === null || _b === void 0 ? void 0 : _b.id) === id) {
7919
+ this.draftFilter = undefined;
7920
+ return;
7921
+ }
7865
7922
  const items = this.filterItems[prop !== null && prop !== void 0 ? prop : ''];
7866
7923
  if (!items)
7867
7924
  return;
@@ -7869,6 +7926,7 @@ class FilterPanel {
7869
7926
  if (index === -1)
7870
7927
  return;
7871
7928
  items.splice(index, 1);
7929
+ this.hasChanges = true;
7872
7930
  // let's remove the prop if no more filters so the filter icon will be removed
7873
7931
  if (items.length === 0)
7874
7932
  delete this.filterItems[prop !== null && prop !== void 0 ? prop : ''];
@@ -7910,6 +7968,7 @@ class FilterPanel {
7910
7968
  if (!moveFilterItem(items, sourceId, targetId)) {
7911
7969
  return;
7912
7970
  }
7971
+ this.hasChanges = true;
7913
7972
  this.filterId++;
7914
7973
  if (!this.disableDynamicFiltering) {
7915
7974
  this.debouncedApplyFilter();
@@ -7945,6 +8004,7 @@ class FilterPanel {
7945
8004
  if (!target || !moveFilterItem(items, sourceId, target.id)) {
7946
8005
  return;
7947
8006
  }
8007
+ this.hasChanges = true;
7948
8008
  this.filterId++;
7949
8009
  if (!this.disableDynamicFiltering) {
7950
8010
  this.debouncedApplyFilter();
@@ -7963,6 +8023,7 @@ class FilterPanel {
7963
8023
  if (index === -1)
7964
8024
  return;
7965
8025
  items[index].relation = items[index].relation === 'and' ? 'or' : 'and';
8026
+ this.hasChanges = true;
7966
8027
  if (!this.disableDynamicFiltering) {
7967
8028
  this.debouncedApplyFilter();
7968
8029
  }
@@ -8011,12 +8072,22 @@ class FilterPanel {
8011
8072
  }
8012
8073
  return options;
8013
8074
  }
8014
- renderExtra(prop, index) {
8015
- const currentFilter = this.filterItems[prop];
8075
+ renderExtra(prop, index, isDraft = false) {
8076
+ var _a, _b;
8077
+ const currentFilter = isDraft
8078
+ ? this.draftFilter
8079
+ : (_a = this.filterItems[prop]) === null || _a === void 0 ? void 0 : _a[index];
8016
8080
  if (!currentFilter)
8017
8081
  return '';
8018
8082
  const applyFilter = (value) => {
8019
- this.filterItems[prop][index].value = value;
8083
+ currentFilter.value = value;
8084
+ if (isDraft && !this.isMeaningfulDraftValue(value)) {
8085
+ return;
8086
+ }
8087
+ if (isDraft && !this.promoteDraft(prop)) {
8088
+ return;
8089
+ }
8090
+ this.hasChanges = true;
8020
8091
  if (!this.disableDynamicFiltering) {
8021
8092
  this.debouncedApplyFilter();
8022
8093
  }
@@ -8031,11 +8102,11 @@ class FilterPanel {
8031
8102
  }
8032
8103
  };
8033
8104
  const capts = Object.assign(Object.assign({}, this.filterCaptionsInternal), this.filterCaptions);
8034
- const extra = this.filterEntities[currentFilter[index].type].extra;
8105
+ const extra = (_b = this.filterEntities[currentFilter.type]) === null || _b === void 0 ? void 0 : _b.extra;
8035
8106
  if (typeof extra === 'function') {
8036
8107
  return extra(hAsync, {
8037
- value: currentFilter[index].value,
8038
- filter: currentFilter[index],
8108
+ value: currentFilter.value,
8109
+ filter: currentFilter,
8039
8110
  prop,
8040
8111
  index,
8041
8112
  placeholder: capts.placeholder,
@@ -8050,7 +8121,7 @@ class FilterPanel {
8050
8121
  if (extra !== 'input' && extra !== 'datepicker') {
8051
8122
  return '';
8052
8123
  }
8053
- return (hAsync("input", { id: `filter-input-${currentFilter[index].id}`, placeholder: capts.placeholder, type: extra === 'datepicker' ? 'date' : 'text', value: currentFilter[index].value, onInput: (e) => {
8124
+ return (hAsync("input", { id: `filter-input-${currentFilter.id}`, placeholder: capts.placeholder, type: extra === 'datepicker' ? 'date' : 'text', value: currentFilter.value, onInput: (e) => {
8054
8125
  if (e.target instanceof HTMLInputElement) {
8055
8126
  applyFilter(e.target.value);
8056
8127
  }
@@ -8066,6 +8137,42 @@ class FilterPanel {
8066
8137
  e.stopPropagation();
8067
8138
  } }));
8068
8139
  }
8140
+ resolveDraftFilterType(preferred) {
8141
+ var _a, _b;
8142
+ const available = Object.values((_b = (_a = this.changes) === null || _a === void 0 ? void 0 : _a.filterTypes) !== null && _b !== void 0 ? _b : {}).flat();
8143
+ const type = preferred && available.includes(preferred)
8144
+ ? preferred
8145
+ : available[0];
8146
+ return type;
8147
+ }
8148
+ promoteDraft(prop, type) {
8149
+ if (!this.draftFilter) {
8150
+ return;
8151
+ }
8152
+ if (!this.filterItems[prop]) {
8153
+ this.filterItems[prop] = [];
8154
+ }
8155
+ if (type) {
8156
+ this.draftFilter.type = type;
8157
+ }
8158
+ const filter = this.draftFilter;
8159
+ this.filterItems[prop].push(filter);
8160
+ this.draftFilter = undefined;
8161
+ this.hasChanges = true;
8162
+ return filter;
8163
+ }
8164
+ isMeaningfulDraftValue(value) {
8165
+ return value !== '' && value !== undefined && value !== null;
8166
+ }
8167
+ emitFilterChange() {
8168
+ this.filterChange.emit(this.cloneFilterItems(this.filterItems));
8169
+ }
8170
+ cloneFilterItems(filterItems) {
8171
+ return Object.fromEntries(Object.entries(filterItems).map(([prop, filters]) => [
8172
+ prop,
8173
+ filters.map(filter => (Object.assign({}, filter))),
8174
+ ]));
8175
+ }
8069
8176
  getAddFilterSelect() {
8070
8177
  return this.element.querySelector(`#${FILTER_ID}`);
8071
8178
  }
@@ -8098,7 +8205,7 @@ class FilterPanel {
8098
8205
  top: `${(_d = (_c = this.changes) === null || _c === void 0 ? void 0 : _c.y) !== null && _d !== void 0 ? _d : 0}px`,
8099
8206
  };
8100
8207
  const capts = Object.assign(Object.assign({}, this.filterCaptionsInternal), this.filterCaptions);
8101
- return (hAsync(Host, { key: 'd0e4ebb408750b11b3965da6a25e581733c968e3' }, hAsync("dialog", { key: '3df36777c931ec1063e8574169ca880a99dbfe41', class: "filter-panel-dialog", style: style, ref: el => (this.dialog = el), onCancel: e => {
8208
+ return (hAsync(Host, { key: '0bb6ac39407141e989b6a2f54063ee5ed789e40e' }, hAsync("dialog", { key: '28a919ca4184018e8f00bbd31d373e153306d163', class: "filter-panel-dialog", style: style, ref: el => (this.dialog = el), onCancel: e => {
8102
8209
  e.preventDefault();
8103
8210
  this.onCancel();
8104
8211
  } }, this.changes && [
@@ -8107,7 +8214,7 @@ class FilterPanel {
8107
8214
  ((_g = this.changes) === null || _g === void 0 ? void 0 : _g.hideDefaultFilters) !== true && [
8108
8215
  hAsync("label", { key: "filter-title" }, capts.title),
8109
8216
  hAsync("div", { key: "filter-holder", class: "filter-holder" }, this.getFilterItemsList()),
8110
- hAsync("div", { key: "add-filter", class: "add-filter" }, hAsync("select", { key: 'e2a8bd29f2090d3e6c933795427b71ca190b82aa', id: FILTER_ID, class: "select-css", onChange: e => this.onAddNewFilter(e) }, this.renderSelectOptions(this.currentFilterType))),
8217
+ hAsync("div", { key: "add-filter", class: "add-filter" }, hAsync("select", { key: 'c5816b6699d8608bd8ec2621bbbd4c70daf52a1e', id: FILTER_ID, class: "select-css", onChange: e => this.onAddNewFilter(e) }, this.renderSelectOptions(this.currentFilterType))),
8111
8218
  ],
8112
8219
  hAsync("slot", { key: "default-slot" }),
8113
8220
  ((_j = (_h = this.changes).extraBottomContent) === null || _j === void 0 ? void 0 : _j.call(_h, this.changes)) || '',
@@ -8139,6 +8246,7 @@ class FilterPanel {
8139
8246
  "currentFilterType": [32],
8140
8247
  "changes": [32],
8141
8248
  "filterItems": [32],
8249
+ "draftFilter": [32],
8142
8250
  "draggedFilterId": [32],
8143
8251
  "dragOverFilterId": [32],
8144
8252
  "show": [64],
@@ -13079,6 +13187,7 @@ const GROUP_COLUMN_PROP = `${GRID_INTERNALS}-prop`;
13079
13187
  const GROUP_ORIGINAL_INDEX = `${GRID_INTERNALS}-original-index`;
13080
13188
  const GROUP_EXPAND_BTN = `group-expand`;
13081
13189
  const GROUP_EXPAND_EVENT = `groupexpandclick`;
13190
+ const BEFORE_GROUPING_APPLY_EVENT = `beforegroupingapply`;
13082
13191
  const GROUPING_ROW_TYPE = 'rgRow';
13083
13192
 
13084
13193
  function getGroupValueDefault(item, prop, emptyGroupValue) {
@@ -15375,7 +15484,9 @@ function isVirtualXDimension(type, disableVirtualX = false, virtualX = DEFAULT_V
15375
15484
  class DimensionProvider {
15376
15485
  constructor(viewports, config) {
15377
15486
  this.viewports = viewports;
15378
- const sizeChanged = debounce$1((k) => config.realSizeChanged(k), RESIZE_INTERVAL);
15487
+ this.config = config;
15488
+ this.rowDefinitions = [];
15489
+ const sizeChanged = debounce$1((k) => this.config.realSizeChanged(k), RESIZE_INTERVAL);
15379
15490
  this.stores = [...rowTypes, ...columnTypes].reduce((sources, t) => {
15380
15491
  sources[t] = new DimensionStore(t);
15381
15492
  sources[t].store.onChange('realSize', () => sizeChanged(t));
@@ -15393,6 +15504,20 @@ class DimensionProvider {
15393
15504
  this.viewports.stores[t].setOriginalSizes(this.stores[t].store.get('originItemSize'));
15394
15505
  this.setItemCount(count, t);
15395
15506
  }
15507
+ getRowDefinitions() {
15508
+ return this.rowDefinitions;
15509
+ }
15510
+ syncRowDefinitions(definitions) {
15511
+ this.rowDefinitions = definitions;
15512
+ }
15513
+ setRowDefinitions(definitions) {
15514
+ var _a, _b;
15515
+ if (definitions === this.rowDefinitions) {
15516
+ return;
15517
+ }
15518
+ this.syncRowDefinitions(definitions);
15519
+ (_b = (_a = this.config).rowDefinitionsChanged) === null || _b === void 0 ? void 0 : _b.call(_a, definitions);
15520
+ }
15396
15521
  /**
15397
15522
  * Apply new custom sizes to dimension and view port
15398
15523
  * @param type - dimension type
@@ -16377,6 +16502,11 @@ const filterTypes = {
16377
16502
  boolean: ['notEmpty', 'empty'],
16378
16503
  array: ['notEmpty', 'empty'],
16379
16504
  };
16505
+ /** Preferred initial operator for built-in filter families. */
16506
+ const filterTypeDefaults = {
16507
+ string: 'contains',
16508
+ number: 'eqN',
16509
+ };
16380
16510
  const filterNames = {
16381
16511
  none: 'None',
16382
16512
  empty: 'Is blank',
@@ -16419,6 +16549,8 @@ const FILTE_PANEL = 'revogr-filter-panel';
16419
16549
  *
16420
16550
  * @property {FilterLocalization|undefined} localization - translation for filter popup captions.
16421
16551
  *
16552
+ * @property {boolean|undefined} defaultFilter - creates a draft condition when an empty filter panel opens. Defaults to true.
16553
+ *
16422
16554
  * @property {boolean|undefined} disableDynamicFiltering - disables dynamic filtering. A way to apply filters on Save only.
16423
16555
  */
16424
16556
  /**
@@ -16440,7 +16572,7 @@ class FilterPlugin extends BasePlugin {
16440
16572
  * number: ['eqN', 'neqN', 'gt']
16441
16573
  * }
16442
16574
  */
16443
- this.filterByType = Object.assign({}, filterTypes);
16575
+ this.filterByType = Object.fromEntries(Object.entries(filterTypes).map(([type, filters]) => [type, [...filters]]));
16444
16576
  this.filterNameIndexByType = Object.assign({}, filterNames);
16445
16577
  this.filterFunctionsIndexedByType = Object.assign({}, filterCoreFunctionsIndexedByType);
16446
16578
  this.filterProp = FILTER_PROP;
@@ -16524,11 +16656,16 @@ class FilterPlugin extends BasePlugin {
16524
16656
  return null;
16525
16657
  }
16526
16658
  initConfig(config) {
16527
- var _a;
16659
+ var _a, _b, _c, _d;
16528
16660
  this.config = config;
16529
16661
  this.allowDuplicateOperators = (_a = config.allowDuplicateOperators) !== null && _a !== void 0 ? _a : true;
16530
16662
  if (this.pop) {
16531
16663
  this.pop.allowDuplicateOperators = this.allowDuplicateOperators;
16664
+ this.pop.disableDynamicFiltering =
16665
+ (_b = config.disableDynamicFiltering) !== null && _b !== void 0 ? _b : false;
16666
+ this.pop.closeOnOutsideClick =
16667
+ (_c = config.closeFilterPanelOnOutsideClick) !== null && _c !== void 0 ? _c : true;
16668
+ this.pop.filterCaptions = (_d = config.localization) === null || _d === void 0 ? void 0 : _d.captions;
16532
16669
  }
16533
16670
  if (config.multiFilterItems) {
16534
16671
  this.multiFilterItems = Object.assign({}, config.multiFilterItems);
@@ -16617,11 +16754,12 @@ class FilterPlugin extends BasePlugin {
16617
16754
  }
16618
16755
  // filter button clicked, open filter dialog
16619
16756
  const buttonPos = (filterButton instanceof HTMLElement ? filterButton : el).getBoundingClientRect();
16620
- 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 });
16757
+ 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), defaultFilterType: this.getDefaultFilter(e.detail.filter), showDefaultFilter: this.shouldShowDefaultFilter(e.detail.filter), filterItems: this.multiFilterItems, extraContent: this.extraHyperContent, extraBottomContent: this.extraBottomHyperContent });
16621
16758
  (_b = this.beforeshow) === null || _b === void 0 ? void 0 : _b.call(this, data);
16622
16759
  this.pop.show(data);
16623
16760
  }
16624
- getColumnFilter(type) {
16761
+ getColumnFilter(config) {
16762
+ const type = this.isColumnFilterOption(config) ? config.type : config;
16625
16763
  let filterType = 'string';
16626
16764
  if (!type) {
16627
16765
  return { [filterType]: this.filterByType[filterType] };
@@ -16641,6 +16779,41 @@ class FilterPlugin extends BasePlugin {
16641
16779
  }
16642
16780
  return { [filterType]: this.filterByType[filterType] };
16643
16781
  }
16782
+ /** Resolve the preferred operator against the column's available filters. */
16783
+ getDefaultFilter(config) {
16784
+ var _a;
16785
+ const filters = this.getColumnFilter(config);
16786
+ const availableFilters = Object.values(filters).flat();
16787
+ const columnDefault = this.isColumnFilterOption(config)
16788
+ ? config.default
16789
+ : undefined;
16790
+ if (typeof columnDefault === 'string' &&
16791
+ availableFilters.includes(columnDefault)) {
16792
+ return columnDefault;
16793
+ }
16794
+ const firstFamily = Object.keys(filters)[0];
16795
+ const familyDefault = filterTypeDefaults[firstFamily];
16796
+ if (familyDefault && ((_a = filters[firstFamily]) === null || _a === void 0 ? void 0 : _a.includes(familyDefault))) {
16797
+ return familyDefault;
16798
+ }
16799
+ return availableFilters[0];
16800
+ }
16801
+ /** Resolve grid and column-level draft opt-outs. */
16802
+ shouldShowDefaultFilter(config) {
16803
+ var _a;
16804
+ if (this.isColumnFilterOption(config)) {
16805
+ if (config.default === false) {
16806
+ return false;
16807
+ }
16808
+ if (typeof config.default === 'string') {
16809
+ return true;
16810
+ }
16811
+ }
16812
+ return ((_a = this.config) === null || _a === void 0 ? void 0 : _a.defaultFilter) !== false;
16813
+ }
16814
+ isColumnFilterOption(value) {
16815
+ return !!value && typeof value === 'object' && !Array.isArray(value);
16816
+ }
16644
16817
  isValidType(type) {
16645
16818
  return !!(typeof type === 'string' && this.filterByType[type]);
16646
16819
  }
@@ -16923,6 +17096,60 @@ function allAndConditionsSatisfied(pendingResults) {
16923
17096
  return !pendingResults.includes(true);
16924
17097
  }
16925
17098
 
17099
+ /**
17100
+ * Restores group headers around already-sorted data indexes without rebuilding
17101
+ * the physical source. Group insertion order follows the first sorted member,
17102
+ * matching the order produced by regrouping a sorted source.
17103
+ */
17104
+ function gatherGroupedRowIndexes(source, sortedDataIndexes) {
17105
+ const groupPathByDataIndex = new Map();
17106
+ const currentGroupPath = [];
17107
+ source.forEach((model, physicalIndex) => {
17108
+ if (isGrouping(model)) {
17109
+ const depth = model[GROUP_DEPTH];
17110
+ if (typeof depth !== 'number') {
17111
+ return;
17112
+ }
17113
+ currentGroupPath.length = depth;
17114
+ currentGroupPath[depth] = physicalIndex;
17115
+ return;
17116
+ }
17117
+ if (model != null) {
17118
+ groupPathByDataIndex.set(physicalIndex, [...currentGroupPath]);
17119
+ }
17120
+ });
17121
+ const root = {
17122
+ children: new Map(),
17123
+ items: [],
17124
+ };
17125
+ for (const physicalIndex of sortedDataIndexes) {
17126
+ const groupPath = groupPathByDataIndex.get(physicalIndex);
17127
+ if (!(groupPath === null || groupPath === void 0 ? void 0 : groupPath.length)) {
17128
+ return undefined;
17129
+ }
17130
+ let node = root;
17131
+ for (const groupIndex of groupPath) {
17132
+ let child = node.children.get(groupIndex);
17133
+ if (!child) {
17134
+ child = { children: new Map(), items: [] };
17135
+ node.children.set(groupIndex, child);
17136
+ }
17137
+ node = child;
17138
+ }
17139
+ node.items.push(physicalIndex);
17140
+ }
17141
+ const groupedIndexes = [];
17142
+ const appendNode = (node) => {
17143
+ node.children.forEach((child, groupIndex) => {
17144
+ groupedIndexes.push(groupIndex);
17145
+ appendNode(child);
17146
+ });
17147
+ groupedIndexes.push(...node.items);
17148
+ };
17149
+ appendNode(root);
17150
+ return groupedIndexes;
17151
+ }
17152
+
16926
17153
  /**
16927
17154
  * Checks whether a sorting map contains at least one active order.
16928
17155
  *
@@ -17171,18 +17398,6 @@ const SortingSign = ({ column }) => {
17171
17398
  function getSortableRowIndexes(indexes, source) {
17172
17399
  return indexes.filter(index => !isGrouping(source[index]));
17173
17400
  }
17174
- function mergeSortedRowsWithGroups(indexes, source, sortedRows) {
17175
- if (sortedRows.length === indexes.length) {
17176
- return sortedRows;
17177
- }
17178
- let rowIndex = 0;
17179
- return indexes.map(index => {
17180
- if (isGrouping(source[index])) {
17181
- return index;
17182
- }
17183
- return sortedRows[rowIndex++];
17184
- });
17185
- }
17186
17401
  /**
17187
17402
  * Lifecycle
17188
17403
  * 1. @event `beforesorting` - Triggered when sorting just starts. Nothing has happened yet. This can be triggered from a column or from the source. If the type is from rows, the column will be undefined.
@@ -17342,6 +17557,7 @@ class SortingPlugin extends BasePlugin {
17342
17557
  storeService.setData({ proxyItems: newItemsOrder });
17343
17558
  }
17344
17559
  applySortingForStore(type, sorting, sortingFunc, sortingColumns, sortingOrder, ignoreViewportUpdate) {
17560
+ var _a;
17345
17561
  const storeService = this.providers.data.stores[type];
17346
17562
  // row data
17347
17563
  const source = storeService.store.get('source');
@@ -17349,7 +17565,10 @@ class SortingPlugin extends BasePlugin {
17349
17565
  const proxyItems = storeService.store.get('proxyItems');
17350
17566
  const sortItems = getSortableRowIndexes(proxyItems, source);
17351
17567
  const sortedItems = sortIndexByItems([...sortItems], source, sortingFunc, sorting, sortingColumns, sortingOrder);
17352
- const newItemsOrder = mergeSortedRowsWithGroups(proxyItems, source, sortedItems);
17568
+ const hasGroupingRows = sortedItems.length !== proxyItems.length;
17569
+ const newItemsOrder = hasGroupingRows
17570
+ ? (_a = gatherGroupedRowIndexes(source, sortedItems)) !== null && _a !== void 0 ? _a : proxyItems
17571
+ : sortedItems;
17353
17572
  // take row indexes before trim applied and proxy items
17354
17573
  const prevItems = storeService.store.get('items');
17355
17574
  storeService.setData({
@@ -17375,6 +17594,16 @@ class SortingPlugin extends BasePlugin {
17375
17594
  }
17376
17595
  this.postponeSort(order, sortingFunc, sortingColumns, sortingOrder, ignoreViewportUpdate);
17377
17596
  }
17597
+ /**
17598
+ * Schedules the current active sort again after another plugin rebuilds row
17599
+ * proxy indexes while keeping the physical source unchanged.
17600
+ */
17601
+ reapplySorting() {
17602
+ if (!hasActiveSorting(this.sorting) || !this.sortingFunc) {
17603
+ return;
17604
+ }
17605
+ this.startSorting(this.sorting, this.sortingFunc, this.sortingColumns, this.sortingOrder);
17606
+ }
17378
17607
  /**
17379
17608
  * Applies sorting requested by a sortable header click.
17380
17609
  *
@@ -17893,8 +18122,10 @@ const TRIMMED_GROUPING = 'grouping';
17893
18122
  * against the grouped physical source can still be remapped. If neither path
17894
18123
  * resolves to a number, the caller drops the stale trim entry.
17895
18124
  */
17896
- function convertTrimmedIndex(initialIndex, firstLevelMap, secondLevelMap) {
17897
- const sourceIndex = Number.parseInt(initialIndex, 10);
18125
+ function convertGroupingIndex(initialIndex, firstLevelMap, secondLevelMap) {
18126
+ const sourceIndex = typeof initialIndex === 'number'
18127
+ ? initialIndex
18128
+ : Number.parseInt(initialIndex, 10);
17898
18129
  const firstConversionIndex = firstLevelMap[sourceIndex];
17899
18130
  if (!secondLevelMap) {
17900
18131
  return firstConversionIndex;
@@ -17927,7 +18158,7 @@ function processDoubleConversionTrimmed(initiallyTrimed, firstLevelMap, secondLe
17927
18158
  * if item exists we find it in collection
17928
18159
  * we support 2 level of conversions
17929
18160
  */
17930
- const newConversionIndex = convertTrimmedIndex(initialIndex, firstLevelMap, secondLevelMap);
18161
+ const newConversionIndex = convertGroupingIndex(initialIndex, firstLevelMap, secondLevelMap);
17931
18162
  // Group rows do not exist in the ungrouped index map and must not leak into new trims.
17932
18163
  if (typeof newConversionIndex !== 'number') {
17933
18164
  continue;
@@ -17988,7 +18219,7 @@ function filterOutEmptyGroupRows(source, filterTrimmed) {
17988
18219
  return trimmed;
17989
18220
  }
17990
18221
 
17991
- var __rest$1 = (undefined && undefined.__rest) || function (s, e) {
18222
+ var __rest = (undefined && undefined.__rest) || function (s, e) {
17992
18223
  var t = {};
17993
18224
  for (var p in s)
17994
18225
  if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
@@ -18002,7 +18233,7 @@ var __rest$1 = (undefined && undefined.__rest) || function (s, e) {
18002
18233
  };
18003
18234
  const PADDING_DEPTH = 10;
18004
18235
  const RowRenderer = (_a, cells) => {
18005
- var { rowClass, index, size, start, depth, groupingLevel } = _a, attrs = __rest$1(_a, ["rowClass", "index", "size", "start", "depth", "groupingLevel"]);
18236
+ var { rowClass, index, size, start, depth, groupingLevel } = _a, attrs = __rest(_a, ["rowClass", "index", "size", "start", "depth", "groupingLevel"]);
18006
18237
  const props = Object.assign(Object.assign(Object.assign({}, attrs), { [DATA_ROW]: index }), (typeof groupingLevel === 'number'
18007
18238
  ? { 'data-level': groupingLevel }
18008
18239
  : {}));
@@ -18102,18 +18333,6 @@ const expandSvgIconVNode = (expanded = false) => {
18102
18333
  return (hAsync("svg", { "aria-hidden": "true", style: { transform: `rotate(${!expanded ? -90 : 0}deg)` }, focusable: "false", viewBox: "0 0 448 512" }, hAsync("path", { fill: "currentColor", d: "M207.029 381.476L12.686 187.132c-9.373-9.373-9.373-24.569 0-33.941l22.667-22.667c9.357-9.357 24.522-9.375 33.901-.04L224 284.505l154.745-154.021c9.379-9.335 24.544-9.317 33.901.04l22.667 22.667c9.373 9.373 9.373 24.569 0 33.941L240.971 381.476c-9.373 9.372-24.569 9.372-33.942 0z" })));
18103
18334
  };
18104
18335
 
18105
- var __rest = (undefined && undefined.__rest) || function (s, e) {
18106
- var t = {};
18107
- for (var p in s)
18108
- if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
18109
- t[p] = s[p];
18110
- if (s != null && typeof Object.getOwnPropertySymbols === "function")
18111
- for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
18112
- if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
18113
- t[p[i]] = s[p[i]];
18114
- }
18115
- return t;
18116
- };
18117
18336
  class GroupingRowPlugin extends BasePlugin {
18118
18337
  getStore(type = GROUPING_ROW_TYPE) {
18119
18338
  return this.providers.data.stores[type].store;
@@ -18129,15 +18348,16 @@ class GroupingRowPlugin extends BasePlugin {
18129
18348
  }
18130
18349
  // expand event triggered
18131
18350
  onExpand({ virtualIndex }) {
18132
- const { source } = getSource(this.getStore().get('source'), this.getStore().get('proxyItems'));
18133
- let newTrimmed = this.getStore().get('trimmed')[TRIMMED_GROUPING];
18134
- let i = getPhysical(this.getStore(), virtualIndex);
18351
+ const store = this.getStore();
18352
+ const source = store.get('source');
18353
+ let newTrimmed = store.get('trimmed')[TRIMMED_GROUPING];
18354
+ const i = getPhysical(store, virtualIndex);
18135
18355
  const isExpanded = getExpanded(source[i]);
18136
18356
  if (!isExpanded) {
18137
- const { trimmed, items } = doExpand(virtualIndex, source, this.getStore().get('items'));
18357
+ const { trimmed, items: expandedItems } = doExpand(virtualIndex, source, store.get('items'));
18138
18358
  newTrimmed = Object.assign(Object.assign({}, newTrimmed), trimmed);
18139
- if (items) {
18140
- setItems(this.getStore(), items);
18359
+ if (expandedItems) {
18360
+ setItems(store, expandedItems);
18141
18361
  }
18142
18362
  }
18143
18363
  else {
@@ -18145,7 +18365,7 @@ class GroupingRowPlugin extends BasePlugin {
18145
18365
  newTrimmed = Object.assign(Object.assign({}, newTrimmed), trimmed);
18146
18366
  this.revogrid.clearFocus();
18147
18367
  }
18148
- this.getStore().set('source', source);
18368
+ store.set('source', source);
18149
18369
  this.revogrid.addTrimmed(newTrimmed, TRIMMED_GROUPING);
18150
18370
  }
18151
18371
  setColumnGrouping(cols) {
@@ -18167,7 +18387,7 @@ class GroupingRowPlugin extends BasePlugin {
18167
18387
  onDrag(e) {
18168
18388
  const { from, to } = e.detail;
18169
18389
  const isDown = to - from >= 0;
18170
- const { source } = getSource(this.getStore().get('source'), this.getStore().get('proxyItems'));
18390
+ const source = this.getStore().get('source');
18171
18391
  const items = this.getStore().get('items');
18172
18392
  let i = isDown ? from : to;
18173
18393
  const end = isDown ? to : from;
@@ -18193,21 +18413,13 @@ class GroupingRowPlugin extends BasePlugin {
18193
18413
  const source = this.getStore().get('source');
18194
18414
  return filterOutEmptyGroupRows(source, trimmed);
18195
18415
  }
18196
- isSortingRunning() {
18197
- const sortingPlugin = this.providers.plugins.getByClass(SortingPlugin);
18198
- return !!(sortingPlugin === null || sortingPlugin === void 0 ? void 0 : sortingPlugin.sortingPromise);
18199
- }
18200
18416
  /**
18201
- * Returns grouping options for regrouping that must preserve current UI state.
18202
- *
18203
- * `expandedAll` and config `prevExpanded` are initial/config instructions.
18204
- * Reusing them after sorting would reopen groups the user collapsed before
18205
- * sorting instead of using the current grouped source state.
18417
+ * Sorting changes proxy order without changing the physical source baseline.
18418
+ * Other proxy changes, such as row dragging, are user-authored source order
18419
+ * and must be retained when grouping is rebuilt.
18206
18420
  */
18207
- getCurrentExpandedOptions() {
18208
- var _a;
18209
- const _b = (_a = this.options) !== null && _a !== void 0 ? _a : {}, options = __rest(_b, ["expandedAll", "prevExpanded"]);
18210
- return options;
18421
+ isSortingActiveOrPending(sortingPlugin) {
18422
+ return !!(sortingPlugin === null || sortingPlugin === void 0 ? void 0 : sortingPlugin.sortingPromise) || hasActiveSorting(sortingPlugin === null || sortingPlugin === void 0 ? void 0 : sortingPlugin.sorting);
18211
18423
  }
18212
18424
  /**
18213
18425
  * Starts global source update with group clearing and applying new one
@@ -18220,7 +18432,12 @@ class GroupingRowPlugin extends BasePlugin {
18220
18432
  * @param newOldIndexMap - provides us mapping with new indexes vs old indexes, we would use it for trimmed mapping
18221
18433
  */
18222
18434
  const store = this.getStore();
18223
- const { source, prevExpanded, oldNewIndexes } = getSource(store.get('source'), store.get('proxyItems'), true);
18435
+ const sortingPlugin = this.providers.plugins.getByClass(SortingPlugin);
18436
+ const currentSource = store.get('source');
18437
+ const sourceItems = this.isSortingActiveOrPending(sortingPlugin)
18438
+ ? currentSource.map((_, index) => index)
18439
+ : store.get('proxyItems');
18440
+ const { source, prevExpanded, oldNewIndexes } = getSource(currentSource, sourceItems, true);
18224
18441
  const expanded = Object.assign({ prevExpanded }, options);
18225
18442
  /**
18226
18443
  * Group again
@@ -18230,8 +18447,13 @@ class GroupingRowPlugin extends BasePlugin {
18230
18447
  const customRenderer = options === null || options === void 0 ? void 0 : options.groupLabelTemplate;
18231
18448
  const cellRenderer = options === null || options === void 0 ? void 0 : options.groupCellTemplate;
18232
18449
  // setup source
18450
+ this.revogrid.dispatchEvent(new CustomEvent(BEFORE_GROUPING_APPLY_EVENT));
18233
18451
  this.providers.data.setData(sourceWithGroups, GROUPING_ROW_TYPE, this.revogrid.disableVirtualY, { depth, customRenderer, cellRenderer }, true);
18452
+ this.remapRowDefinitions(oldNewIndexes !== null && oldNewIndexes !== void 0 ? oldNewIndexes : {}, oldNewIndexMap, currentSource, sourceWithGroups);
18234
18453
  this.updateTrimmed(trimmed, oldNewIndexes !== null && oldNewIndexes !== void 0 ? oldNewIndexes : {}, oldNewIndexMap, sourceWithGroups);
18454
+ if (hasActiveSorting(sortingPlugin === null || sortingPlugin === void 0 ? void 0 : sortingPlugin.sorting)) {
18455
+ sortingPlugin === null || sortingPlugin === void 0 ? void 0 : sortingPlugin.reapplySorting();
18456
+ }
18235
18457
  }
18236
18458
  /**
18237
18459
  * Apply grouping on data set
@@ -18240,9 +18462,14 @@ class GroupingRowPlugin extends BasePlugin {
18240
18462
  */
18241
18463
  onDataSet(data) {
18242
18464
  var _a, _b, _c;
18465
+ const currentSource = this.getStore().get('source');
18466
+ const sortingPlugin = this.providers.plugins.getByClass(SortingPlugin);
18467
+ const currentItems = this.isSortingActiveOrPending(sortingPlugin)
18468
+ ? currentSource.map((_, index) => index)
18469
+ : this.getStore().get('proxyItems');
18470
+ const { prevExpanded, oldNewIndexes } = getSource(currentSource, currentItems, true);
18243
18471
  let preservedExpanded = {};
18244
18472
  if (((_a = this.options) === null || _a === void 0 ? void 0 : _a.preserveGroupingOnUpdate) !== false) {
18245
- let { prevExpanded } = getSource(this.getStore().get('source'), this.getStore().get('proxyItems'), true);
18246
18473
  preservedExpanded = prevExpanded;
18247
18474
  }
18248
18475
  const source = data.source.filter(s => !isGrouping(s));
@@ -18254,6 +18481,7 @@ class GroupingRowPlugin extends BasePlugin {
18254
18481
  customRenderer: options.groupLabelTemplate,
18255
18482
  cellRenderer: options.groupCellTemplate,
18256
18483
  });
18484
+ queueMicrotask(() => this.remapRowDefinitions(oldNewIndexes !== null && oldNewIndexes !== void 0 ? oldNewIndexes : {}, oldNewIndexMap, currentSource, sourceWithGroups));
18257
18485
  this.updateTrimmed(trimmed, oldNewIndexMap, undefined, sourceWithGroups, { filterTrimmedMode: 'recompute-after-source-set' });
18258
18486
  }
18259
18487
  /**
@@ -18289,10 +18517,6 @@ class GroupingRowPlugin extends BasePlugin {
18289
18517
  if (!(((_b = (_a = this.options) === null || _a === void 0 ? void 0 : _a.props) === null || _b === void 0 ? void 0 : _b.length) && ((_c = detail === null || detail === void 0 ? void 0 : detail.source) === null || _c === void 0 ? void 0 : _c.length))) {
18290
18518
  return;
18291
18519
  }
18292
- // if sorting is running don't apply grouping, wait for sorting, then it'll apply in @aftersortingapply
18293
- if (this.isSortingRunning()) {
18294
- return;
18295
- }
18296
18520
  this.onDataSet(detail);
18297
18521
  });
18298
18522
  this.addEventListener('beforecolumnsset', ({ detail }) => {
@@ -18307,17 +18531,6 @@ class GroupingRowPlugin extends BasePlugin {
18307
18531
  this.addEventListener('beforefiltertrimmed', ({ detail }) => {
18308
18532
  detail.itemsToFilter = this.beforeFilterTrimmed(detail.itemsToFilter);
18309
18533
  });
18310
- /**
18311
- * sorting applied need to clear grouping and apply again
18312
- * based on new results whole grouping order will changed
18313
- */
18314
- this.addEventListener('aftersortingapply', () => {
18315
- var _a, _b;
18316
- if (!((_b = (_a = this.options) === null || _a === void 0 ? void 0 : _a.props) === null || _b === void 0 ? void 0 : _b.length)) {
18317
- return;
18318
- }
18319
- this.doSourceUpdate(this.getCurrentExpandedOptions());
18320
- });
18321
18534
  /**
18322
18535
  * Apply logic for focus inside of grouping
18323
18536
  * We can't focus on grouping rows, navigation only inside of groups for now
@@ -18350,9 +18563,57 @@ class GroupingRowPlugin extends BasePlugin {
18350
18563
  }
18351
18564
  });
18352
18565
  // clear rows
18353
- const { source, oldNewIndexes } = getSource(this.getStore().get('source'), this.getStore().get('proxyItems'), true);
18566
+ const store = this.getStore();
18567
+ const sortingPlugin = this.providers.plugins.getByClass(SortingPlugin);
18568
+ const currentSource = store.get('source');
18569
+ const sourceItems = this.isSortingActiveOrPending(sortingPlugin)
18570
+ ? currentSource.map((_, index) => index)
18571
+ : store.get('proxyItems');
18572
+ const { source, oldNewIndexes } = getSource(currentSource, sourceItems, true);
18573
+ this.revogrid.dispatchEvent(new CustomEvent(BEFORE_GROUPING_APPLY_EVENT));
18354
18574
  this.providers.data.setData(source, GROUPING_ROW_TYPE, this.revogrid.disableVirtualY, undefined, true);
18575
+ this.remapRowDefinitions(oldNewIndexes !== null && oldNewIndexes !== void 0 ? oldNewIndexes : {}, undefined, currentSource, source);
18355
18576
  this.updateTrimmed(undefined, undefined, oldNewIndexes, source);
18577
+ if (hasActiveSorting(sortingPlugin === null || sortingPlugin === void 0 ? void 0 : sortingPlugin.sorting)) {
18578
+ sortingPlugin === null || sortingPlugin === void 0 ? void 0 : sortingPlugin.reapplySorting();
18579
+ }
18580
+ }
18581
+ remapRowDefinitions(firstLevelMap, secondLevelMap, previousSource, nextSource) {
18582
+ const definitions = this.providers.dimension.getRowDefinitions();
18583
+ const nextGroupIndexes = new Map();
18584
+ nextSource === null || nextSource === void 0 ? void 0 : nextSource.forEach((row, index) => {
18585
+ const groupId = row[PSEUDO_GROUP_ITEM_ID];
18586
+ if (groupId && !nextGroupIndexes.has(groupId)) {
18587
+ nextGroupIndexes.set(groupId, index);
18588
+ }
18589
+ });
18590
+ let changed = false;
18591
+ const remapped = definitions.flatMap(definition => {
18592
+ if (definition.type !== GROUPING_ROW_TYPE) {
18593
+ return [definition];
18594
+ }
18595
+ const previousRow = previousSource === null || previousSource === void 0 ? void 0 : previousSource[definition.index];
18596
+ const groupId = previousRow === null || previousRow === void 0 ? void 0 : previousRow[PSEUDO_GROUP_ITEM_ID];
18597
+ const index = groupId
18598
+ ? nextGroupIndexes.get(groupId)
18599
+ : convertGroupingIndex(definition.index, firstLevelMap, secondLevelMap);
18600
+ if (typeof index !== 'number') {
18601
+ changed = true;
18602
+ return [];
18603
+ }
18604
+ if (index < 0) {
18605
+ changed = true;
18606
+ return [];
18607
+ }
18608
+ if (index === definition.index) {
18609
+ return [definition];
18610
+ }
18611
+ changed = true;
18612
+ return [Object.assign(Object.assign({}, definition), { index })];
18613
+ });
18614
+ if (changed) {
18615
+ this.providers.dimension.setRowDefinitions(remapped);
18616
+ }
18356
18617
  }
18357
18618
  updateTrimmed(trimmedGroup = {}, firstLevelMap = {}, secondLevelMap, source = this.getStore().get('source'), { filterTrimmedMode = 'remap', } = {}) {
18358
18619
  // map previously trimmed data
@@ -19204,19 +19465,6 @@ const rowDefinitionByType = (newVal = []) => {
19204
19465
  }
19205
19466
  return result;
19206
19467
  };
19207
- const rowDefinitionRemoveByType = (oldVal = []) => {
19208
- const result = {};
19209
- for (const v of oldVal) {
19210
- let rowDefs = result[v.type];
19211
- if (!rowDefs) {
19212
- rowDefs = result[v.type] = [];
19213
- }
19214
- if (typeof v.size === 'number') {
19215
- rowDefs.push(v.index);
19216
- }
19217
- }
19218
- return result;
19219
- };
19220
19468
 
19221
19469
  const COLUMN_DRAG_CLASS = 'column-drag-start';
19222
19470
  class ColumnOrderHandler {
@@ -19776,6 +20024,7 @@ function isMobileDevice() {
19776
20024
  return /Mobi/i.test(navigator.userAgent) || /Android/i.test(navigator.userAgent) || navigator.maxTouchPoints > 0;
19777
20025
  }
19778
20026
 
20027
+ const toAriaIndex = (index) => `${index + 1}`;
19779
20028
  /**
19780
20029
  * WCAG Plugin is responsible for enhancing the accessibility features of the RevoGrid component.
19781
20030
  * It ensures that the grid is fully compliant with Web Content Accessibility Guidelines (WCAG) 2.1.
@@ -19819,14 +20068,14 @@ class WCAGPlugin extends BasePlugin {
19819
20068
  column.columnProperties = (...args) => {
19820
20069
  const result = (columnProperties === null || columnProperties === void 0 ? void 0 : columnProperties(...args)) || {};
19821
20070
  result.role = 'columnheader';
19822
- result['aria-colindex'] = `${index}`;
20071
+ result['aria-colindex'] = toAriaIndex(index);
19823
20072
  return result;
19824
20073
  };
19825
20074
  column.cellProperties = (...args) => {
19826
20075
  const wcagProps = {
19827
20076
  ['role']: 'gridcell',
19828
- ['aria-colindex']: `${index}`,
19829
- ['aria-rowindex']: `${args[0].rowIndex}`,
20077
+ ['aria-colindex']: toAriaIndex(index),
20078
+ ['aria-rowindex']: toAriaIndex(args[0].rowIndex),
19830
20079
  ['tabindex']: -1,
19831
20080
  };
19832
20081
  const columnProps = (cellProperties === null || cellProperties === void 0 ? void 0 : cellProperties(...args)) || {};
@@ -19841,7 +20090,7 @@ class WCAGPlugin extends BasePlugin {
19841
20090
  revogrid.setAttribute('aria-rowcount', `${detail.source.length}`);
19842
20091
  });
19843
20092
  this.addEventListener('beforerowrender', ({ detail, }) => {
19844
- detail.node.$attrs$ = Object.assign(Object.assign({}, detail.node.$attrs$), { role: 'row', ['aria-rowindex']: detail.item.itemIndex });
20093
+ detail.node.$attrs$ = Object.assign(Object.assign({}, detail.node.$attrs$), { role: 'row', ['aria-rowindex']: toAriaIndex(detail.item.itemIndex) });
19845
20094
  });
19846
20095
  // focuscell
19847
20096
  this.addEventListener('afterfocus', async (e) => {
@@ -20099,18 +20348,14 @@ const ROW_RESIZE_EVENT = 'rowresize';
20099
20348
  const AFTER_ROW_RESIZE_EVENT = 'afterrowresize';
20100
20349
  const ROW_RESIZE_CANCEL_EVENT = 'rowresizecancel';
20101
20350
  class RowResizePlugin extends BasePlugin {
20102
- static fromGridProperty(revogrid, providers) {
20103
- const plugin = new RowResizePlugin(revogrid, providers);
20104
- plugin.controlFromGridProperty();
20105
- return plugin;
20106
- }
20107
20351
  constructor(revogrid, providers, config = {}) {
20108
20352
  super(revogrid, providers);
20109
20353
  this.enabled = false;
20110
- this.gridResizeRow = false;
20111
- this.gridPlugins = [];
20112
- this.committedSizes = new Map();
20113
- this.appliedIndexes = new Map();
20354
+ this.appliedDefinitionIndexes = new Map();
20355
+ this.pendingBottomAnchor = false;
20356
+ this.keepBottomAnchor = false;
20357
+ this.rowDefinitionRemapQueued = false;
20358
+ this.pendingSourceCounts = new Map();
20114
20359
  this.previousBodyCursor = '';
20115
20360
  this.decorateRow = ({ detail, }) => {
20116
20361
  if (!this.enabled ||
@@ -20174,22 +20419,72 @@ class RowResizePlugin extends BasePlugin {
20174
20419
  }
20175
20420
  };
20176
20421
  this.onWindowBlur = () => this.cancel('blur');
20177
- this.reapplyCommittedSizes = () => this.applyCommittedSizes(false);
20178
- this.rebuildCommittedSizes = () => this.applyCommittedSizes(true);
20179
- this.syncAppliedIndexes = () => {
20180
- for (const [rowType, committed] of this.committedSizes) {
20422
+ this.updateBottomAnchorState = ({ detail, }) => {
20423
+ if (detail.dimension !== 'rgRow') {
20424
+ return;
20425
+ }
20426
+ this.keepBottomAnchor = this.isMainViewportAtBottom(detail.coordinate);
20427
+ };
20428
+ this.applyPendingBottomAnchor = () => {
20429
+ if (!this.pendingBottomAnchor) {
20430
+ return;
20431
+ }
20432
+ this.pendingBottomAnchor = false;
20433
+ const dimension = this.providers.dimension.stores.rgRow.store;
20434
+ // Scroll surfaces have slightly different client sizes. Give the shared
20435
+ // scrolling service the content end and let each surface clamp to its own
20436
+ // exact bottom coordinate.
20437
+ void this.revogrid.scrollToCoordinate({ y: dimension.get('realSize') });
20438
+ };
20439
+ this.scheduleRowDefinitionRemap = () => {
20440
+ if (this.rowDefinitionRemapQueued) {
20441
+ return;
20442
+ }
20443
+ this.rowDefinitionRemapQueued = true;
20444
+ queueMicrotask(() => {
20445
+ if (!this.rowDefinitionRemapQueued) {
20446
+ return;
20447
+ }
20448
+ this.pruneRowDefinitions();
20449
+ this.reapplyRowDefinitionSizes();
20450
+ this.rowDefinitionRemapQueued = false;
20451
+ });
20452
+ };
20453
+ /** Map source-indexed row definitions back onto the current virtual order. */
20454
+ this.reapplyRowDefinitionSizes = () => {
20455
+ const rowDefinitions = this.providers.dimension.getRowDefinitions();
20456
+ for (const rowType of rowTypes) {
20181
20457
  const items = this.providers.data.stores[rowType].store.get('items');
20458
+ const definitions = new Map(rowDefinitions
20459
+ .filter(definition => definition.type === rowType)
20460
+ .map(definition => [definition.index, definition.size]));
20461
+ const appliedIndexes = this.appliedDefinitionIndexes.get(rowType);
20462
+ if (!definitions.size && !(appliedIndexes === null || appliedIndexes === void 0 ? void 0 : appliedIndexes.size)) {
20463
+ continue;
20464
+ }
20465
+ const dimension = this.providers.dimension.stores[rowType];
20466
+ const currentSizes = dimension.store.get('sizes');
20467
+ const sizes = Object.assign({}, currentSizes);
20468
+ for (const index of appliedIndexes || []) {
20469
+ delete sizes[index];
20470
+ }
20182
20471
  const indexes = new Set();
20183
20472
  items.forEach((physicalIndex, virtualIndex) => {
20184
- if (committed.has(physicalIndex)) {
20473
+ const size = definitions.get(physicalIndex);
20474
+ if (size !== undefined) {
20475
+ sizes[virtualIndex] = size;
20185
20476
  indexes.add(virtualIndex);
20186
20477
  }
20187
20478
  });
20188
- this.appliedIndexes.set(rowType, indexes);
20479
+ this.appliedDefinitionIndexes.set(rowType, indexes);
20480
+ const sizeKeys = Object.keys(sizes);
20481
+ if (sizeKeys.length !== Object.keys(currentSizes).length ||
20482
+ sizeKeys.some(index => sizes[index] !== currentSizes[index])) {
20483
+ this.providers.dimension.setCustomSizes(rowType, sizes);
20484
+ }
20189
20485
  }
20190
20486
  };
20191
20487
  this.config = resolveRowResizeConfig(config);
20192
- this.rowDefinitionsRef = revogrid.rowDefinitions;
20193
20488
  if (new.target !== RowResizePlugin) {
20194
20489
  this.enabled = true;
20195
20490
  this.registerEventListeners();
@@ -20197,77 +20492,53 @@ class RowResizePlugin extends BasePlugin {
20197
20492
  }
20198
20493
  registerEventListeners() {
20199
20494
  this.addEventListener('beforerowrender', this.decorateRow);
20200
- this.addEventListener('beforeanysource', ({ detail }) => {
20495
+ this.addEventListener('beforeanysource', () => {
20201
20496
  this.cancel('data-change');
20202
- const committed = this.committedSizes.get(detail.type);
20203
- if (!committed) {
20204
- return;
20205
- }
20206
- const removedIndexes = new Set();
20207
- for (const index of committed.keys()) {
20208
- if (index >= detail.source.length) {
20209
- committed.delete(index);
20210
- removedIndexes.add(index);
20211
- }
20212
- }
20213
- if (removedIndexes.size) {
20214
- const rowDefinitions = this.revogrid.rowDefinitions.filter(definition => definition.type !== detail.type ||
20215
- !removedIndexes.has(definition.index));
20216
- this.rowDefinitionsRef = rowDefinitions;
20217
- this.revogrid.rowDefinitions = rowDefinitions;
20218
- }
20497
+ this.keepBottomAnchor = false;
20498
+ });
20499
+ this.addEventListener('afteranysource', ({ detail }) => {
20500
+ this.pendingSourceCounts.set(detail.type, detail.source.length);
20501
+ this.scheduleRowDefinitionRemap();
20219
20502
  });
20220
- this.addEventListener('afteranysource', this.rebuildCommittedSizes);
20221
20503
  this.addEventListener('beforesourcesortingapply', this.cancelForDataChange);
20222
- this.addEventListener('aftersortingapply', this.reapplyCommittedSizes);
20504
+ this.addEventListener('beforesortingapply', this.cancelForDataChange);
20505
+ this.addEventListener('sortingconfigchanged', this.cancelForDataChange);
20506
+ this.addEventListener(BEFORE_GROUPING_APPLY_EVENT, this.cancelForDataChange);
20507
+ this.addEventListener('aftersortingapply', this.scheduleRowDefinitionRemap);
20223
20508
  this.addEventListener('beforefilterapply', this.cancelForDataChange);
20224
- this.addEventListener('beforerowdefinition', ({ detail }) => {
20509
+ this.addEventListener('afterfilterapply', this.scheduleRowDefinitionRemap);
20510
+ this.addEventListener('beforerowdefinition', () => {
20225
20511
  this.cancel('data-change');
20226
- if (detail.vals !== this.rowDefinitionsRef) {
20227
- this.committedSizes.clear();
20228
- this.appliedIndexes.clear();
20229
- this.rowDefinitionsRef = detail.vals;
20230
- }
20231
- });
20232
- this.addEventListener('afterthemechanged', this.reapplyCommittedSizes);
20233
- this.addEventListener('aftertrimmed', this.syncAppliedIndexes);
20234
- this.addEventListener('roworderchange', () => {
20235
- queueMicrotask(this.reapplyCommittedSizes);
20512
+ this.scheduleRowDefinitionRemap();
20236
20513
  });
20514
+ this.addEventListener('afterthemechanged', this.scheduleRowDefinitionRemap);
20515
+ this.addEventListener('aftertrimmed', this.scheduleRowDefinitionRemap);
20516
+ this.addEventListener('roworderchange', this.scheduleRowDefinitionRemap);
20237
20517
  this.addEventListener(GROUP_EXPAND_EVENT, () => {
20238
- queueMicrotask(this.reapplyCommittedSizes);
20518
+ if (this.keepBottomAnchor) {
20519
+ this.pendingBottomAnchor = true;
20520
+ }
20521
+ this.scheduleRowDefinitionRemap();
20239
20522
  });
20523
+ this.addEventListener('aftergridrender', this.applyPendingBottomAnchor);
20524
+ this.addEventListener('viewportscroll', this.updateBottomAnchorState);
20240
20525
  this.addEventListener('rowheaderschanged', ({ detail }) => {
20241
20526
  if (!detail && !this.config.fullRow) {
20242
20527
  this.cancel('row-headers-hidden');
20243
20528
  }
20244
20529
  });
20245
20530
  }
20246
- controlFromGridProperty() {
20247
- this.gridResizeRow = this.revogrid.resizeRow;
20248
- this.gridPlugins = this.revogrid.plugins;
20249
- this.syncGridProperty(false);
20250
- this.watch('resizeRow', value => {
20251
- this.gridResizeRow = value;
20252
- this.syncGridProperty();
20253
- });
20254
- this.watch('plugins', value => {
20255
- this.gridPlugins = value || [];
20256
- this.syncGridProperty();
20257
- });
20258
- }
20259
- syncGridProperty(refresh = true) {
20260
- const hasConfiguredPlugin = this.gridPlugins.some(plugin => plugin !== RowResizePlugin &&
20531
+ syncGridConfig(refresh = true) {
20532
+ const { plugins = [], resizeRow } = this.revogrid;
20533
+ const isCorePlugin = this.constructor === RowResizePlugin;
20534
+ const hasConfiguredPlugin = plugins.some(plugin => plugin !== RowResizePlugin &&
20261
20535
  plugin.prototype instanceof RowResizePlugin);
20262
- const explicitlyEnabled = this.gridPlugins.includes(RowResizePlugin);
20263
- const enabled = hasConfiguredPlugin
20264
- ? false
20265
- : explicitlyEnabled || !!this.gridResizeRow;
20266
- const config = resolveRowResizeConfig(!hasConfiguredPlugin &&
20267
- !explicitlyEnabled &&
20268
- typeof this.gridResizeRow === 'object'
20269
- ? this.gridResizeRow
20270
- : undefined);
20536
+ const enabled = !isCorePlugin ||
20537
+ (!hasConfiguredPlugin && !!resizeRow);
20538
+ const resizeConfig = typeof resizeRow === 'object' ? resizeRow : undefined;
20539
+ const config = isCorePlugin
20540
+ ? resolveRowResizeConfig(resizeConfig)
20541
+ : this.config;
20271
20542
  const configChanged = config.minHeight !== this.config.minHeight ||
20272
20543
  config.maxHeight !== this.config.maxHeight ||
20273
20544
  config.fullRow !== this.config.fullRow;
@@ -20279,10 +20550,13 @@ class RowResizePlugin extends BasePlugin {
20279
20550
  if (enabled !== this.enabled) {
20280
20551
  this.enabled = enabled;
20281
20552
  if (enabled) {
20282
- this.rowDefinitionsRef = this.revogrid.rowDefinitions;
20283
20553
  this.registerEventListeners();
20284
20554
  }
20285
20555
  else {
20556
+ this.pendingBottomAnchor = false;
20557
+ this.keepBottomAnchor = false;
20558
+ this.rowDefinitionRemapQueued = false;
20559
+ this.pendingSourceCounts.clear();
20286
20560
  this.clearSubscriptions();
20287
20561
  }
20288
20562
  }
@@ -20301,6 +20575,7 @@ class RowResizePlugin extends BasePlugin {
20301
20575
  }
20302
20576
  const dimension = this.providers.dimension.stores[rowType];
20303
20577
  const dimensionState = dimension.getCurrentState();
20578
+ const viewport = this.providers.viewport.stores[rowType];
20304
20579
  const item = getItemByIndex(dimensionState, index);
20305
20580
  const focusedStore = this.providers.selection.focusedStore;
20306
20581
  const selectedRowType = focusedStore
@@ -20332,16 +20607,23 @@ class RowResizePlugin extends BasePlugin {
20332
20607
  currentHeight: startHeight,
20333
20608
  previousSizes,
20334
20609
  originalCustomSizes: Object.assign({}, dimensionState.sizes),
20335
- startEvent: event,
20610
+ bottomAnchored: rowType === 'rgRow' &&
20611
+ this.isMainViewportAtBottom(viewport.lastCoordinate),
20336
20612
  lastEvent: event,
20337
20613
  };
20614
+ this.active = active;
20338
20615
  const beforeEvent = this.emit(BEFORE_ROW_RESIZE_EVENT, this.eventDetail(active, event, startHeight));
20339
20616
  if (beforeEvent.defaultPrevented) {
20617
+ if (this.active === active) {
20618
+ this.active = undefined;
20619
+ }
20620
+ return;
20621
+ }
20622
+ if (!this.enabled || this.active !== active) {
20340
20623
  return;
20341
20624
  }
20342
20625
  event.preventDefault();
20343
20626
  event.stopPropagation();
20344
- this.active = active;
20345
20627
  const doc = this.revogrid.ownerDocument;
20346
20628
  this.previousBodyCursor = ((_a = doc.body) === null || _a === void 0 ? void 0 : _a.style.cursor) || '';
20347
20629
  if (doc.body) {
@@ -20364,6 +20646,7 @@ class RowResizePlugin extends BasePlugin {
20364
20646
  return;
20365
20647
  }
20366
20648
  this.providers.dimension.setCustomSizes(active.rowType, createRowResizePatch(active.indexes, size), true);
20649
+ this.requestBottomAnchor(active);
20367
20650
  active.currentHeight = size;
20368
20651
  this.emit(ROW_RESIZE_EVENT, this.eventDetail(active, active.lastEvent, size));
20369
20652
  }
@@ -20382,7 +20665,8 @@ class RowResizePlugin extends BasePlugin {
20382
20665
  }
20383
20666
  }
20384
20667
  this.providers.dimension.setCustomSizes(active.rowType, currentSizes);
20385
- const detail = Object.assign(Object.assign({}, this.eventDetail(active, active.lastEvent || active.startEvent, active.startHeight)), { reason });
20668
+ this.requestBottomAnchor(active);
20669
+ const detail = Object.assign(Object.assign({}, this.eventDetail(active, active.lastEvent, active.startHeight)), { reason });
20386
20670
  this.finishGesture();
20387
20671
  this.emit(ROW_RESIZE_CANCEL_EVENT, detail);
20388
20672
  }
@@ -20401,51 +20685,44 @@ class RowResizePlugin extends BasePlugin {
20401
20685
  return;
20402
20686
  }
20403
20687
  const items = this.providers.data.stores[active.rowType].store.get('items');
20404
- let committed = this.committedSizes.get(active.rowType);
20405
- if (!committed) {
20406
- committed = new Map();
20407
- this.committedSizes.set(active.rowType, committed);
20408
- }
20409
- let applied = this.appliedIndexes.get(active.rowType);
20410
- if (!applied) {
20411
- applied = new Set();
20412
- this.appliedIndexes.set(active.rowType, applied);
20413
- }
20414
20688
  const physicalIndexes = active.indexes.reduce((result, index) => {
20415
20689
  const physicalIndex = items[index];
20416
20690
  if (physicalIndex !== undefined) {
20417
- committed.set(physicalIndex, active.currentHeight);
20418
- applied.add(index);
20419
20691
  result.push(physicalIndex);
20420
20692
  }
20421
20693
  return result;
20422
20694
  }, []);
20423
20695
  if (physicalIndexes.length) {
20424
- const rowDefinitions = mergeRowResizeDefinitions(this.revogrid.rowDefinitions, active.rowType, physicalIndexes, active.currentHeight);
20425
- this.rowDefinitionsRef = rowDefinitions;
20426
- this.revogrid.rowDefinitions = rowDefinitions;
20696
+ const rowDefinitions = mergeRowResizeDefinitions(this.providers.dimension.getRowDefinitions(), active.rowType, physicalIndexes, active.currentHeight);
20697
+ this.providers.dimension.setRowDefinitions(rowDefinitions);
20698
+ this.scheduleRowDefinitionRemap();
20699
+ this.keepBottomAnchor = active.bottomAnchored;
20700
+ this.requestBottomAnchor(active);
20427
20701
  }
20428
20702
  }
20429
- applyCommittedSizes(clearAppliedIndexes) {
20430
- for (const [rowType, committed] of this.committedSizes) {
20431
- const dimension = this.providers.dimension.stores[rowType];
20432
- const sizes = Object.assign({}, dimension.store.get('sizes'));
20433
- if (clearAppliedIndexes) {
20434
- for (const index of this.appliedIndexes.get(rowType) || []) {
20435
- delete sizes[index];
20436
- }
20437
- }
20438
- const items = this.providers.data.stores[rowType].store.get('items');
20439
- const indexes = new Set();
20440
- items.forEach((physicalIndex, virtualIndex) => {
20441
- const size = committed.get(physicalIndex);
20442
- if (size !== undefined) {
20443
- sizes[virtualIndex] = size;
20444
- indexes.add(virtualIndex);
20445
- }
20446
- });
20447
- this.appliedIndexes.set(rowType, indexes);
20448
- this.providers.dimension.setCustomSizes(rowType, sizes);
20703
+ requestBottomAnchor(active) {
20704
+ if (active.bottomAnchored) {
20705
+ this.pendingBottomAnchor = true;
20706
+ }
20707
+ }
20708
+ isMainViewportAtBottom(coordinate) {
20709
+ const dimension = this.providers.dimension.stores.rgRow.getCurrentState();
20710
+ const viewport = this.providers.viewport.stores.rgRow.store.state;
20711
+ return (dimension.realSize > viewport.clientSize &&
20712
+ coordinate >= getViewportMaxCoordinate(dimension, viewport.virtualSize));
20713
+ }
20714
+ pruneRowDefinitions() {
20715
+ if (!this.pendingSourceCounts.size) {
20716
+ return;
20717
+ }
20718
+ const definitions = this.providers.dimension.getRowDefinitions();
20719
+ const rowDefinitions = definitions.filter(definition => {
20720
+ const count = this.pendingSourceCounts.get(definition.type);
20721
+ return count === undefined || definition.index < count;
20722
+ });
20723
+ this.pendingSourceCounts.clear();
20724
+ if (rowDefinitions.length !== definitions.length) {
20725
+ this.providers.dimension.setRowDefinitions(rowDefinitions);
20449
20726
  }
20450
20727
  }
20451
20728
  finishGesture() {
@@ -20468,11 +20745,14 @@ class RowResizePlugin extends BasePlugin {
20468
20745
  }
20469
20746
  destroy() {
20470
20747
  this.cancel('destroy');
20748
+ this.keepBottomAnchor = false;
20749
+ this.rowDefinitionRemapQueued = false;
20750
+ this.pendingSourceCounts.clear();
20471
20751
  super.destroy();
20472
20752
  }
20473
20753
  }
20474
20754
 
20475
- const revoGridStyleCss = () => `revo-grid:is([theme=default],[theme=dark]),revo-grid:not([theme]){--rg-theme-font-family:var( --revo-grid-font-family, Helvetica, Arial, Sans-Serif, serif );--rg-theme-font-size:var(--revo-grid-font-size, 12px);--rg-theme-header-height:var(--revo-grid-header-height, 30px);--rg-theme-header-font-size:var(--revo-grid-header-font-size, 12px);--rg-theme-header-font-weight:var(--revo-grid-header-font-weight, normal);--rg-theme-header-text-transform:var( --revo-grid-header-text-transform, uppercase );--rg-theme-header-text-align:var(--revo-grid-header-text-align, center);--rg-theme-cell-text-align:var(--revo-grid-cell-text-align, left);--rg-theme-header-padding:var(--revo-grid-header-padding, 0);--rg-theme-cell-padding:var(--revo-grid-cell-padding, 0 4px);border:1px solid var(--rg-theme-header-border);font-size:var(--rg-theme-font-size)}revo-grid:is([theme=default],[theme=dark]) .rowHeaders revogr-header,revo-grid:not([theme]) .rowHeaders revogr-header{box-shadow:-1px 0 0 0 var(--rg-theme-header-border) inset}revo-grid:is([theme=default],[theme=dark]) revogr-header,revo-grid:not([theme]) revogr-header{text-align:var(--rg-theme-header-text-align);line-height:var(--rg-theme-header-height);background-color:var(--rg-theme-header-bg)}revo-grid:is([theme=default],[theme=dark]) revogr-header .group-rgRow,revo-grid:not([theme]) revogr-header .group-rgRow{box-shadow:none}revo-grid:is([theme=default],[theme=dark]) revogr-header .group-rgRow .rgHeaderCell,revo-grid:not([theme]) revogr-header .group-rgRow .rgHeaderCell{box-shadow:-1px 0 0 0 var(--rg-theme-header-border), -1px 0 0 0 var(--rg-theme-header-border) inset, 0 -1px 0 0 var(--rg-theme-header-border), 0 -1px 0 0 var(--rg-theme-header-border) inset}revo-grid:is([theme=default],[theme=dark]) revogr-header .header-rgRow,revo-grid:is([theme=default],[theme=dark]) revogr-header .group-rgRow,revo-grid:not([theme]) revogr-header .header-rgRow,revo-grid:not([theme]) revogr-header .group-rgRow{text-transform:var(--rg-theme-header-text-transform);font-size:var(--rg-theme-header-font-size);font-weight:var(--rg-theme-header-font-weight);color:var(--rg-theme-header-color)}revo-grid:is([theme=default],[theme=dark]) revogr-header .header-rgRow,revo-grid:not([theme]) revogr-header .header-rgRow{height:var(--rg-theme-header-height);box-shadow:0 -1px 0 0 var(--rg-theme-header-border) inset}revo-grid:is([theme=default],[theme=dark]) revogr-header .rgHeaderCell,revo-grid:not([theme]) revogr-header .rgHeaderCell{box-shadow:-1px 0 0 0 var(--rg-theme-header-border) inset, 0 -1px 0 0 var(--rg-theme-header-border), 0 -1px 0 0 var(--rg-theme-header-border) inset}revo-grid:is([theme=default],[theme=dark]) .rowHeaders,revo-grid:not([theme]) .rowHeaders{background-color:var(--rg-theme-row-headers-bg)}revo-grid:is([theme=default],[theme=dark]) .rowHeaders revogr-data .rgCell,revo-grid:not([theme]) .rowHeaders revogr-data .rgCell{color:var(--rg-theme-row-headers-color)}revo-grid:is([theme=default],[theme=dark]) .rowHeaders revogr-data .rgCell:first-child,revo-grid:not([theme]) .rowHeaders revogr-data .rgCell:first-child{box-shadow:0 -1px 0 0 var(--rg-theme-header-border) inset}revo-grid:is([theme=default],[theme=dark]) .rowHeaders revogr-data .rgCell:not(:first-child),revo-grid:not([theme]) .rowHeaders revogr-data .rgCell:not(:first-child){box-shadow:0 -1px 0 0 var(--rg-theme-header-border) inset, -1px 0 0 0 var(--rg-theme-header-border) inset}revo-grid:is([theme=default],[theme=dark]) .rowHeaders revogr-data .rgCell:last-child,revo-grid:not([theme]) .rowHeaders revogr-data .rgCell:last-child{border-right:1px solid var(--rg-theme-header-border)}revo-grid:is([theme=default],[theme=dark]) .rowHeaders revogr-data revogr-header,revo-grid:not([theme]) .rowHeaders revogr-data revogr-header{box-shadow:0 -1px 0 0 var(--rg-theme-header-border) inset}revo-grid:is([theme=default],[theme=dark]) revogr-viewport-scroll.colPinStart revogr-data .rgRow .rgCell:last-child,revo-grid:not([theme]) revogr-viewport-scroll.colPinStart revogr-data .rgRow .rgCell:last-child{box-shadow:0 -1px 0 0 var(--rg-theme-cell-border) inset, -1px 0 0 0 var(--rg-theme-header-border) inset}revo-grid:is([theme=default],[theme=dark]) revogr-viewport-scroll.colPinStart .footer-wrapper revogr-data .rgRow:first-child .rgCell,revo-grid:not([theme]) revogr-viewport-scroll.colPinStart .footer-wrapper revogr-data .rgRow:first-child .rgCell{box-shadow:0 1px 0 0 var(--rg-theme-header-border) inset, -1px 0 0 0 var(--rg-theme-header-border) inset}revo-grid:is([theme=default],[theme=dark]) revogr-viewport-scroll.colPinEnd,revo-grid:is([theme=default],[theme=dark]) revogr-viewport-scroll.colPinEnd revogr-header,revo-grid:not([theme]) revogr-viewport-scroll.colPinEnd,revo-grid:not([theme]) revogr-viewport-scroll.colPinEnd revogr-header{box-shadow:1px 0 0 var(--rg-theme-header-border) inset}revo-grid:is([theme=default],[theme=dark]) .footer-wrapper revogr-data .rgRow:first-child .rgCell,revo-grid:not([theme]) .footer-wrapper revogr-data .rgRow:first-child .rgCell{box-shadow:0 1px 0 0 var(--rg-theme-cell-border) inset, -1px 0 0 0 var(--rg-theme-cell-border) inset, 0 -1px 0 0 var(--rg-theme-cell-border) inset}revo-grid:is([theme=default],[theme=dark]) revogr-data,revo-grid:not([theme]) revogr-data{text-align:var(--rg-theme-cell-text-align)}revo-grid:is([theme=default],[theme=dark]) revogr-data .revo-draggable,revo-grid:not([theme]) revogr-data .revo-draggable{float:left}revo-grid:is([theme=default],[theme=dark]) revogr-data .rgRow,revo-grid:not([theme]) revogr-data .rgRow{line-height:var(--rg-theme-row-size, 27px)}revo-grid:is([theme=default],[theme=dark]) revogr-data .rgCell,revo-grid:not([theme]) revogr-data .rgCell{padding:var(--rg-theme-cell-padding);box-shadow:0 -1px 0 0 var(--rg-theme-cell-border) inset, -1px 0 0 0 var(--rg-theme-cell-border) inset}revo-grid:is([theme=material],[theme=darkMaterial]),revo-grid[theme]:not([theme=default],[theme=dark],[theme=compact],[theme=darkCompact]){--rg-theme-font-family:var( --revo-grid-font-family, Nunito, -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol' );--rg-theme-header-height:var(--revo-grid-header-height, 50px);--rg-theme-header-font-size:var( --revo-grid-header-font-size, var(--rg-theme-font-size) );--rg-theme-header-font-weight:var(--revo-grid-header-font-weight, 600);--rg-theme-header-text-transform:var( --revo-grid-header-text-transform, none );--rg-theme-header-text-align:var(--revo-grid-header-text-align, left);--rg-theme-cell-text-align:var(--revo-grid-cell-text-align, left);--rg-theme-header-padding:var(--revo-grid-header-padding, 0 15px);--rg-theme-cell-padding:var(--revo-grid-cell-padding, 0 15px);font-family:var(--rg-theme-font-family)}revo-grid:is([theme=material],[theme=darkMaterial]) revogr-header,revo-grid[theme]:not([theme=default],[theme=dark],[theme=compact],[theme=darkCompact]) revogr-header{color:var(--rg-theme-header-color);background-color:var(--rg-theme-header-bg);line-height:var(--rg-theme-header-height);font-size:var(--rg-theme-header-font-size);font-weight:var(--rg-theme-header-font-weight);text-transform:var(--rg-theme-header-text-transform);text-align:var(--rg-theme-header-text-align)}revo-grid:is([theme=material],[theme=darkMaterial]) revogr-header .rgHeaderCell,revo-grid[theme]:not([theme=default],[theme=dark],[theme=compact],[theme=darkCompact]) revogr-header .rgHeaderCell{padding:var(--rg-theme-header-padding);text-overflow:ellipsis}revo-grid:is([theme=material],[theme=darkMaterial]) revogr-header .header-rgRow,revo-grid[theme]:not([theme=default],[theme=dark],[theme=compact],[theme=darkCompact]) revogr-header .header-rgRow{height:var(--rg-theme-header-height)}revo-grid:is([theme=material],[theme=darkMaterial]) .rowHeaders,revo-grid[theme]:not([theme=default],[theme=dark],[theme=compact],[theme=darkCompact]) .rowHeaders{color:var(--rg-theme-row-headers-color);background-color:var(--rg-theme-row-headers-bg)}revo-grid:is([theme=material],[theme=darkMaterial]) .rowHeaders revogr-data .rgCell,revo-grid[theme]:not([theme=default],[theme=dark],[theme=compact],[theme=darkCompact]) .rowHeaders revogr-data .rgCell{color:var(--rg-theme-row-headers-color)}revo-grid:is([theme=material],[theme=darkMaterial]) revogr-data,revo-grid[theme]:not([theme=default],[theme=dark],[theme=compact],[theme=darkCompact]) revogr-data{text-align:var(--rg-theme-cell-text-align)}revo-grid:is([theme=material],[theme=darkMaterial]) revogr-data .rgRow,revo-grid[theme]:not([theme=default],[theme=dark],[theme=compact],[theme=darkCompact]) revogr-data .rgRow{line-height:var(--rg-theme-row-size, 42px)}revo-grid:is([theme=material],[theme=darkMaterial]) revogr-data .rgCell,revo-grid[theme]:not([theme=default],[theme=dark],[theme=compact],[theme=darkCompact]) revogr-data .rgCell{padding:var(--rg-theme-cell-padding);box-shadow:-1px 0 0 0 var(--rg-theme-cell-vertical-border) inset}revo-grid:is([theme=compact],[theme=darkCompact]){--rg-theme-font-family:var( --revo-grid-font-family, Nunito, -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol' );--rg-theme-header-height:var(--revo-grid-header-height, 45px);--rg-theme-header-font-size:var( --revo-grid-header-font-size, var(--rg-theme-font-size) );--rg-theme-header-font-weight:var(--revo-grid-header-font-weight, 600);--rg-theme-header-text-transform:var( --revo-grid-header-text-transform, none );--rg-theme-header-text-align:var(--revo-grid-header-text-align, left);--rg-theme-cell-text-align:var(--revo-grid-cell-text-align, left);--rg-theme-header-padding:var(--revo-grid-header-padding, 0 15px);--rg-theme-cell-padding:var(--revo-grid-cell-padding, 0 15px);font-family:var(--rg-theme-font-family)}revo-grid:is([theme=compact],[theme=darkCompact]) revogr-header{color:var(--rg-theme-header-color);background-color:var(--rg-theme-header-bg);line-height:var(--rg-theme-header-height);font-size:var(--rg-theme-header-font-size);font-weight:var(--rg-theme-header-font-weight);text-transform:var(--rg-theme-header-text-transform);text-align:var(--rg-theme-header-text-align)}revo-grid:is([theme=compact],[theme=darkCompact]) revogr-header .rgHeaderCell{padding:var(--rg-theme-header-padding);text-overflow:ellipsis}revo-grid:is([theme=compact],[theme=darkCompact]) revogr-header .header-rgRow{height:var(--rg-theme-header-height)}revo-grid:is([theme=compact],[theme=darkCompact]) .rowHeaders{color:var(--rg-theme-row-headers-color);background-color:var(--rg-theme-row-headers-bg)}revo-grid:is([theme=compact],[theme=darkCompact]) .rowHeaders revogr-data .rgCell{color:var(--rg-theme-row-headers-color)}revo-grid:is([theme=compact],[theme=darkCompact]) revogr-data{text-align:var(--rg-theme-cell-text-align)}revo-grid:is([theme=compact],[theme=darkCompact]) revogr-data .rgRow{line-height:var(--rg-theme-row-size, 32px)}revo-grid:is([theme=compact],[theme=darkCompact]) revogr-data .rgCell{padding:var(--rg-theme-cell-padding);box-shadow:-1px 0 0 0 var(--rg-theme-cell-vertical-border) inset}revo-grid:is([theme=compact],[theme=darkCompact]) revo-dropdown .rv-dr-root{padding:0px 9px}revo-grid[dir=rtl] .viewports{flex-direction:row-reverse}revo-grid[dir=rtl] revogr-header .rgHeaderCell{text-align:right}revo-grid[dir=rtl] revogr-data .rgCell{text-align:right}revo-grid[dir=rtl] .rowHeaders revogr-data .rgCell{text-align:right}revo-grid[dir=rtl] revogr-filter-panel{direction:rtl}revo-grid[dir=rtl] revo-dropdown .rv-dr-root{text-align:right}revo-grid[dir=rtl] .drag-position{right:0;left:auto}revo-grid[dir=rtl] .drag-auto-scroll-y{right:0;left:auto}revo-grid[dir=rtl] .clipboard{right:0;left:auto}revo-grid[dir=rtl] .draggable{margin-left:-20px;margin-right:0;padding-right:20px;padding-left:5px}revo-grid[dir=rtl] .draggable .revo-alt-icon{right:5px;left:auto}revo-grid[dir=rtl] .focused-cell{border-right:2px solid var(--rg-theme-primary);border-left:none}revo-grid[dir=rtl] .selection-range{border-right:2px solid var(--rg-theme-primary);border-left:none}revo-grid[dir=rtl] .resize-handle{right:0;left:auto}revo-grid[dir=rtl] .sort-indicator{margin-left:0;margin-right:5px}revo-grid[dir=rtl] .filter-button{margin-left:0;margin-right:5px}revo-grid[dir=rtl] .group-expand{margin-right:0;margin-left:2px;padding-right:5px;padding-left:0}revo-grid[dir=rtl] .rgCell,revo-grid[dir=rtl] .rgHeaderCell{padding-left:5px;padding-right:5px}revo-grid[dir=rtl] revogr-edit{direction:rtl}revo-grid[dir=rtl] .rgHeaderCell{direction:rtl}revo-grid[dir=rtl] revogr-header,revo-grid[dir=rtl] revogr-data{text-align:right}revo-grid[dir=rtl]:is([theme=default],[theme=dark]) .rowHeaders,revo-grid[dir=rtl]:not([theme]) .rowHeaders{background-color:var(--rg-theme-row-headers-bg)}revo-grid[dir=rtl]:is([theme=default],[theme=dark]) .rowHeaders revogr-data .rgCell,revo-grid[dir=rtl]:not([theme]) .rowHeaders revogr-data .rgCell{color:var(--rg-theme-row-headers-color)}revo-grid[dir=rtl]:is([theme=default],[theme=dark]) .rowHeaders revogr-data .rgCell:first-child,revo-grid[dir=rtl]:not([theme]) .rowHeaders revogr-data .rgCell:first-child{box-shadow:0 -1px 0 0 var(--rg-theme-header-border) inset}revo-grid[dir=rtl]:is([theme=default],[theme=dark]) .rowHeaders revogr-data .rgCell:not(:first-child),revo-grid[dir=rtl]:not([theme]) .rowHeaders revogr-data .rgCell:not(:first-child){box-shadow:0 -1px 0 0 var(--rg-theme-header-border) inset, 1px 0 0 0 var(--rg-theme-header-border) inset}revo-grid[dir=rtl]:is([theme=default],[theme=dark]) .rowHeaders revogr-data .rgCell:last-child,revo-grid[dir=rtl]:not([theme]) .rowHeaders revogr-data .rgCell:last-child{border-left:1px solid var(--rg-theme-header-border);border-right:none}revo-grid[dir=rtl]:is([theme=default],[theme=dark]) .rowHeaders revogr-data revogr-header,revo-grid[dir=rtl]:not([theme]) .rowHeaders revogr-data revogr-header{box-shadow:0 -1px 0 0 var(--rg-theme-header-border) inset}revo-grid[dir=rtl]:is([theme=default],[theme=dark]) revogr-header,revo-grid[dir=rtl]:not([theme]) revogr-header{text-align:right}revo-grid[dir=rtl]:is([theme=default],[theme=dark]) revogr-data,revo-grid[dir=rtl]:not([theme]) revogr-data{text-align:right}.revo-drag-icon{width:11px;opacity:0.8}.revo-drag-icon::before{content:"::";display:inline-block}.revo-alt-icon{-webkit-mask-image:url("data:image/svg+xml,%3C%3Fxml version='1.0' encoding='UTF-8'%3F%3E%3Csvg viewBox='0 0 384 383' xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink'%3E%3Cg%3E%3Cpath d='M192.4375,383 C197.424479,383 201.663411,381.254557 205.154297,377.763672 L205.154297,377.763672 L264.25,318.667969 C270.234375,312.683594 271.605794,306.075846 268.364258,298.844727 C265.122721,291.613607 259.51237,287.998047 251.533203,287.998047 L251.533203,287.998047 L213.382812,287.998047 L213.382812,212.445312 L288.935547,212.445312 L288.935547,250.595703 C288.935547,258.57487 292.551107,264.185221 299.782227,267.426758 C307.013346,270.668294 313.621094,269.296875 319.605469,263.3125 L319.605469,263.3125 L378.701172,204.216797 C382.192057,200.725911 383.9375,196.486979 383.9375,191.5 C383.9375,186.513021 382.192057,182.274089 378.701172,178.783203 L378.701172,178.783203 L319.605469,119.6875 C313.621094,114.201823 307.013346,112.955078 299.782227,115.947266 C292.551107,118.939453 288.935547,124.42513 288.935547,132.404297 L288.935547,132.404297 L288.935547,170.554688 L213.382812,170.554688 L213.382812,95.0019531 L251.533203,95.0019531 C259.51237,95.0019531 264.998047,91.3863932 267.990234,84.1552734 C270.982422,76.9241536 269.735677,70.3164062 264.25,64.3320312 L264.25,64.3320312 L205.154297,5.23632812 C201.663411,1.74544271 197.424479,0 192.4375,0 C187.450521,0 183.211589,1.74544271 179.720703,5.23632812 L179.720703,5.23632812 L120.625,64.3320312 C114.640625,70.3164062 113.269206,76.9241536 116.510742,84.1552734 C119.752279,91.3863932 125.36263,95.0019531 133.341797,95.0019531 L133.341797,95.0019531 L171.492188,95.0019531 L171.492188,170.554688 L95.9394531,170.554688 L95.9394531,132.404297 C95.9394531,124.42513 92.3238932,118.814779 85.0927734,115.573242 C77.8616536,112.331706 71.2539062,113.703125 65.2695312,119.6875 L65.2695312,119.6875 L6.17382812,178.783203 C2.68294271,182.274089 0.9375,186.513021 0.9375,191.5 C0.9375,196.486979 2.68294271,200.725911 6.17382812,204.216797 L6.17382812,204.216797 L65.2695312,263.3125 C71.2539062,268.798177 77.8616536,270.044922 85.0927734,267.052734 C92.3238932,264.060547 95.9394531,258.57487 95.9394531,250.595703 L95.9394531,250.595703 L95.9394531,212.445312 L171.492188,212.445312 L171.492188,287.998047 L133.341797,287.998047 C125.36263,287.998047 119.876953,291.613607 116.884766,298.844727 C113.892578,306.075846 115.139323,312.683594 120.625,318.667969 L120.625,318.667969 L179.720703,377.763672 C183.211589,381.254557 187.450521,383 192.4375,383 Z'%3E%3C/path%3E%3C/g%3E%3C/svg%3E");mask-image:url("data:image/svg+xml,%3C%3Fxml version='1.0' encoding='UTF-8'%3F%3E%3Csvg viewBox='0 0 384 383' xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink'%3E%3Cg%3E%3Cpath d='M192.4375,383 C197.424479,383 201.663411,381.254557 205.154297,377.763672 L205.154297,377.763672 L264.25,318.667969 C270.234375,312.683594 271.605794,306.075846 268.364258,298.844727 C265.122721,291.613607 259.51237,287.998047 251.533203,287.998047 L251.533203,287.998047 L213.382812,287.998047 L213.382812,212.445312 L288.935547,212.445312 L288.935547,250.595703 C288.935547,258.57487 292.551107,264.185221 299.782227,267.426758 C307.013346,270.668294 313.621094,269.296875 319.605469,263.3125 L319.605469,263.3125 L378.701172,204.216797 C382.192057,200.725911 383.9375,196.486979 383.9375,191.5 C383.9375,186.513021 382.192057,182.274089 378.701172,178.783203 L378.701172,178.783203 L319.605469,119.6875 C313.621094,114.201823 307.013346,112.955078 299.782227,115.947266 C292.551107,118.939453 288.935547,124.42513 288.935547,132.404297 L288.935547,132.404297 L288.935547,170.554688 L213.382812,170.554688 L213.382812,95.0019531 L251.533203,95.0019531 C259.51237,95.0019531 264.998047,91.3863932 267.990234,84.1552734 C270.982422,76.9241536 269.735677,70.3164062 264.25,64.3320312 L264.25,64.3320312 L205.154297,5.23632812 C201.663411,1.74544271 197.424479,0 192.4375,0 C187.450521,0 183.211589,1.74544271 179.720703,5.23632812 L179.720703,5.23632812 L120.625,64.3320312 C114.640625,70.3164062 113.269206,76.9241536 116.510742,84.1552734 C119.752279,91.3863932 125.36263,95.0019531 133.341797,95.0019531 L133.341797,95.0019531 L171.492188,95.0019531 L171.492188,170.554688 L95.9394531,170.554688 L95.9394531,132.404297 C95.9394531,124.42513 92.3238932,118.814779 85.0927734,115.573242 C77.8616536,112.331706 71.2539062,113.703125 65.2695312,119.6875 L65.2695312,119.6875 L6.17382812,178.783203 C2.68294271,182.274089 0.9375,186.513021 0.9375,191.5 C0.9375,196.486979 2.68294271,200.725911 6.17382812,204.216797 L6.17382812,204.216797 L65.2695312,263.3125 C71.2539062,268.798177 77.8616536,270.044922 85.0927734,267.052734 C92.3238932,264.060547 95.9394531,258.57487 95.9394531,250.595703 L95.9394531,250.595703 L95.9394531,212.445312 L171.492188,212.445312 L171.492188,287.998047 L133.341797,287.998047 C125.36263,287.998047 119.876953,291.613607 116.884766,298.844727 C113.892578,306.075846 115.139323,312.683594 120.625,318.667969 L120.625,318.667969 L179.720703,377.763672 C183.211589,381.254557 187.450521,383 192.4375,383 Z'%3E%3C/path%3E%3C/g%3E%3C/svg%3E");width:11px;height:11px;background-size:cover;background-repeat:no-repeat}.arrow-down{position:absolute;right:5px;top:0}.arrow-down svg{width:8px;margin-top:5px;margin-left:5px;opacity:0.4}.cell-value-wrapper{margin-right:10px;overflow:hidden;text-overflow:ellipsis}revo-grid[theme]:is([theme=compact],[theme=darkCompact],[theme=material],[theme=darkMaterial]){background-color:transparent}revo-grid[theme]:is([theme=compact],[theme=darkCompact],[theme=material],[theme=darkMaterial]) revogr-header,revo-grid[theme]:is([theme=compact],[theme=darkCompact],[theme=material],[theme=darkMaterial]) .rowHeaders{background-color:transparent;color:inherit}revo-grid[theme]:is([theme=compact],[theme=darkCompact],[theme=material],[theme=darkMaterial]) .rowHeaders revogr-data .rgCell{color:inherit}revo-grid{--rg-theme-primary:var(--revo-grid-primary, #266ae8);--rg-theme-primary-transparent:var( --revo-grid-primary-transparent, rgba(38, 106, 232, 0.9) );--rg-theme-background:var(--revo-grid-background, #fff);--rg-theme-foreground:var(--revo-grid-foreground, black);--rg-theme-divider:var(--revo-grid-divider, gray);--rg-theme-shadow:var(--revo-grid-shadow, rgba(0, 0, 0, 0.15));--rg-theme-text:var(--revo-grid-text, black);--rg-theme-border:var(--revo-grid-border, rgba(0, 0, 0, 0.2));--rg-theme-header-bg:var(--revo-grid-header-bg, #f8f9fa);--rg-theme-header-color:var(--revo-grid-header-color, #000);--rg-theme-header-border:var(--revo-grid-header-border, #cecece);--rg-theme-header-focused-bg:var( --revo-grid-header-focused-bg, var(--rg-theme-focused-bg) );--rg-theme-header-hover-bg:var( --revo-grid-header-hover-bg, var(--rg-theme-row-hover) );--rg-theme-cell-border:var(--revo-grid-cell-border, #e2e3e3);--rg-theme-cell-vertical-border:var( --revo-grid-cell-vertical-border, transparent );--rg-theme-focused-bg:var(--revo-grid-focused-bg, rgba(233, 234, 237, 0.5));--rg-theme-row-hover:var(--revo-grid-row-hover, #f1f1f1);--rg-theme-row-headers-bg:var( --revo-grid-row-headers-bg, var(--rg-theme-header-bg) );--rg-theme-row-headers-color:var( --revo-grid-row-headers-color, var(--rg-theme-header-color) );--rg-theme-cell-disabled-bg:var( --revo-grid-cell-disabled-bg, rgba(0, 0, 0, 0.07) );--rg-theme-filter-panel-bg:var(--revo-grid-filter-panel-bg, #fff);--rg-theme-filter-panel-border:var(--revo-grid-filter-panel-border, #d9d9d9);--rg-theme-filter-panel-shadow:var( --revo-grid-filter-panel-shadow, rgba(0, 0, 0, 0.15) );--rg-theme-filter-panel-input-bg:var( --revo-grid-filter-panel-input-bg, #eaeaeb );--rg-theme-filter-panel-divider:var( --revo-grid-filter-panel-divider, #d9d9d9 );--rg-theme-filter-panel-select-border:var( --revo-grid-filter-panel-select-border, transparent );--rg-theme-filter-panel-select-border-hover:var( --revo-grid-filter-panel-select-border-hover, transparent );--rg-theme-filter-panel-reorder-accent:var( --revo-grid-filter-panel-reorder-accent, #007cb2 );--rg-theme-filter-panel-reorder-color:var( --revo-grid-filter-panel-reorder-color, #6b7280 );--rg-theme-filter-panel-text:var( --revo-grid-filter-panel-text, var(--rg-theme-text) );--rg-theme-filter-panel-muted-text:var( --revo-grid-filter-panel-muted-text, gray );--rg-theme-filter-panel-focus-ring:var( --revo-grid-filter-panel-focus-ring, 0 0 1px 3px rgba(59, 153, 252, 0.7) );--rg-theme-filter-panel-icon:var(--revo-grid-filter-panel-icon, gray);--rg-theme-filter-panel-icon-active:var( --revo-grid-filter-panel-icon-active, #10224a );--rg-theme-font-family:var( --revo-grid-font-family, Helvetica, Arial, Sans-Serif, serif );--rg-theme-font-size:var(--revo-grid-font-size, 14px);--rg-theme-header-height:var(--revo-grid-header-height, 30px);--rg-theme-header-font-size:var(--revo-grid-header-font-size, 12px);--rg-theme-header-font-weight:var(--revo-grid-header-font-weight, normal);--rg-theme-header-text-transform:var( --revo-grid-header-text-transform, uppercase );--rg-theme-header-text-align:var(--revo-grid-header-text-align, center);--rg-theme-cell-text-align:var(--revo-grid-cell-text-align, center);--rg-theme-header-padding:var(--revo-grid-header-padding, 0);--rg-theme-cell-padding:var(--revo-grid-cell-padding, 0);--rg-theme-selection-border:var(--revo-grid-selection-border, #0d63e8);--rg-theme-selection-bg:var(--revo-grid-selection-bg, transparent);--rg-theme-autofill-handle-bg:var( --revo-grid-autofill-handle-bg, var(--rg-theme-selection-border) );--rg-theme-autofill-handle-border:var( --revo-grid-autofill-handle-border, white );--rg-theme-range-handle-bg:var( --revo-grid-range-handle-bg, rgba(0, 0, 0, 0.2) );--rg-theme-temporary-range-border:var( --revo-grid-temporary-range-border, rgb(255, 94, 0) );--rg-theme-temporary-selection-border:var( --revo-grid-temporary-selection-border, gray );--rg-theme-header-resize-hover:var( --revo-grid-header-resize-hover, deepskyblue );--rg-theme-button-text:var(--revo-grid-button-text, #fff);--rg-theme-button-bg:var(--revo-grid-button-bg, #4545ff);--rg-theme-button-success-bg:var(--revo-grid-button-success-bg, #009037);--rg-theme-button-danger-bg:var(--revo-grid-button-danger-bg, #e0662e);--rg-theme-button-outline-border:var( --revo-grid-button-outline-border, #dbdbdb );--rg-theme-button-outline-text:var(--revo-grid-button-outline-text, #000)}revo-grid[data-rg-theme-scheme=dark]{color-scheme:dark;--rg-theme-background:var(--revo-grid-background, #212529);--rg-theme-foreground:var(--revo-grid-foreground, #fff);--rg-theme-text:var(--revo-grid-text, rgba(255, 255, 255, 0.9));--rg-theme-divider:var(--revo-grid-divider, #505050);--rg-theme-border:var( --revo-grid-border, rgba(255, 255, 255, 0.2) );--rg-theme-filter-panel-bg:var(--revo-grid-filter-panel-bg, #212529);--rg-theme-filter-panel-border:var( --revo-grid-filter-panel-border, #505050 );--rg-theme-filter-panel-input-bg:var( --revo-grid-filter-panel-input-bg, #343a40 );--rg-theme-filter-panel-divider:var( --revo-grid-filter-panel-divider, #505050 );--rg-theme-filter-panel-icon-active:var( --revo-grid-filter-panel-icon-active, #fff );--rg-theme-header-bg:var(--revo-grid-header-bg, #343a40);--rg-theme-header-color:var(--revo-grid-header-color, #fff);--rg-theme-header-border:var(--revo-grid-header-border, #505050);--rg-theme-cell-border:var(--revo-grid-cell-border, #424242);--rg-theme-focused-bg:var( --revo-grid-focused-bg, rgba(52, 58, 64, 0.5) );--rg-theme-row-hover:var( --revo-grid-row-hover, rgba(80, 80, 80, 0.5) );--rg-theme-row-headers-bg:var( --revo-grid-row-headers-bg, rgba(52, 58, 64, 0.8) );--rg-theme-row-headers-color:var( --revo-grid-row-headers-color, rgba(255, 255, 255, 0.8) );--rg-theme-cell-disabled-bg:var( --revo-grid-cell-disabled-bg, rgba(255, 255, 255, 0.07) );--rg-theme-button-outline-border:var( --revo-grid-button-outline-border, #404040 );--rg-theme-button-outline-text:var( --revo-grid-button-outline-text, #d8d8d8 )}revo-grid[data-rg-theme-scheme=light]{color-scheme:light}revo-grid{}revo-grid>*{--revo-grid-primary:var(--rg-theme-primary);--revo-grid-primary-transparent:var(--rg-theme-primary-transparent);--revo-grid-background:var(--rg-theme-background);--revo-grid-foreground:var(--rg-theme-foreground);--revo-grid-divider:var(--rg-theme-divider);--revo-grid-shadow:var(--rg-theme-shadow);--revo-grid-text:var(--rg-theme-text);--revo-grid-border:var(--rg-theme-border);--revo-grid-header-bg:var(--rg-theme-header-bg);--revo-grid-header-color:var(--rg-theme-header-color);--revo-grid-header-border:var(--rg-theme-header-border);--revo-grid-header-focused-bg:var(--rg-theme-header-focused-bg);--revo-grid-header-hover-bg:var(--rg-theme-header-hover-bg);--revo-grid-cell-border:var(--rg-theme-cell-border);--revo-grid-cell-vertical-border:var(--rg-theme-cell-vertical-border);--revo-grid-focused-bg:var(--rg-theme-focused-bg);--revo-grid-row-hover:var(--rg-theme-row-hover);--revo-grid-row-headers-bg:var(--rg-theme-row-headers-bg);--revo-grid-row-headers-color:var(--rg-theme-row-headers-color);--revo-grid-cell-disabled-bg:var(--rg-theme-cell-disabled-bg);--revo-grid-filter-panel-bg:var(--rg-theme-filter-panel-bg);--revo-grid-filter-panel-border:var(--rg-theme-filter-panel-border);--revo-grid-filter-panel-shadow:var(--rg-theme-filter-panel-shadow);--revo-grid-filter-panel-input-bg:var(--rg-theme-filter-panel-input-bg);--revo-grid-filter-panel-divider:var(--rg-theme-filter-panel-divider);--revo-grid-filter-panel-select-border:var(--rg-theme-filter-panel-select-border);--revo-grid-filter-panel-select-border-hover:var(--rg-theme-filter-panel-select-border-hover);--revo-grid-filter-panel-reorder-accent:var(--rg-theme-filter-panel-reorder-accent);--revo-grid-filter-panel-reorder-color:var(--rg-theme-filter-panel-reorder-color);--revo-grid-filter-panel-text:var(--rg-theme-filter-panel-text);--revo-grid-filter-panel-muted-text:var(--rg-theme-filter-panel-muted-text);--revo-grid-filter-panel-focus-ring:var(--rg-theme-filter-panel-focus-ring);--revo-grid-filter-panel-icon:var(--rg-theme-filter-panel-icon);--revo-grid-filter-panel-icon-active:var(--rg-theme-filter-panel-icon-active);--revo-grid-font-family:var(--rg-theme-font-family);--revo-grid-font-size:var(--rg-theme-font-size);--revo-grid-header-height:var(--rg-theme-header-height);--revo-grid-header-font-size:var(--rg-theme-header-font-size);--revo-grid-header-font-weight:var(--rg-theme-header-font-weight);--revo-grid-header-text-transform:var(--rg-theme-header-text-transform);--revo-grid-header-text-align:var(--rg-theme-header-text-align);--revo-grid-cell-text-align:var(--rg-theme-cell-text-align);--revo-grid-header-padding:var(--rg-theme-header-padding);--revo-grid-cell-padding:var(--rg-theme-cell-padding);--revo-grid-selection-border:var(--rg-theme-selection-border);--revo-grid-selection-bg:var(--rg-theme-selection-bg);--revo-grid-autofill-handle-bg:var(--rg-theme-autofill-handle-bg);--revo-grid-autofill-handle-border:var(--rg-theme-autofill-handle-border);--revo-grid-range-handle-bg:var(--rg-theme-range-handle-bg);--revo-grid-temporary-range-border:var(--rg-theme-temporary-range-border);--revo-grid-temporary-selection-border:var(--rg-theme-temporary-selection-border);--revo-grid-header-resize-hover:var(--rg-theme-header-resize-hover);--revo-grid-button-text:var(--rg-theme-button-text);--revo-grid-button-bg:var(--rg-theme-button-bg);--revo-grid-button-success-bg:var(--rg-theme-button-success-bg);--revo-grid-button-danger-bg:var(--rg-theme-button-danger-bg);--revo-grid-button-outline-border:var(--rg-theme-button-outline-border);--revo-grid-button-outline-text:var(--rg-theme-button-outline-text)}revo-grid{direction:ltr !important}revo-grid revogr-header .header-rgRow.group{box-shadow:0 -1px 0 0 var(--rg-theme-header-border) inset}revo-grid revogr-header .header-rgRow:not(.group){box-shadow:0 -1px 0 0 var(--rg-theme-header-border), 0 -1px 0 0 var(--rg-theme-header-border) inset}revo-grid revogr-header .rgHeaderCell.sortable:hover{background-color:var(--rg-theme-header-hover-bg)}revo-grid revogr-header .rgHeaderCell.focused-cell{background:var(--rg-theme-header-focused-bg)}revo-grid .footer-wrapper revogr-data{box-shadow:0 -1px 0 var(--rg-theme-cell-border)}revo-grid revogr-viewport-scroll.colPinStart{box-shadow:-1px 0 0 var(--rg-theme-cell-border) inset}revo-grid revogr-viewport-scroll.colPinEnd{box-shadow:-1px 0 0 var(--rg-theme-cell-border)}revo-grid revogr-data .rgRow{box-shadow:0 -1px 0 0 var(--rg-theme-cell-border) inset}revo-grid revogr-data .rgRow.focused-rgRow{background-color:var(--rg-theme-focused-bg)}revo-grid revogr-data .rgCell{color:var(--rg-theme-text)}revo-grid revogr-data .rgCell.disabled{background-color:var(--rg-theme-cell-disabled-bg)}revo-grid{display:flex !important;height:100%;min-height:300px;background-color:var(--rg-theme-background);font-family:var(--rg-theme-font-family);font-size:var(--rg-theme-font-size);position:relative;color:var(--rg-theme-text);-webkit-touch-callout:none;-webkit-user-select:none;-khtml-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;}revo-grid .attribution{position:absolute;bottom:0;left:0;right:0;z-index:1000;width:0;height:0;border-left:4px solid var(--rg-theme-primary-transparent);border-bottom:4px solid var(--rg-theme-primary-transparent);border-top:4px solid transparent;border-right:4px solid transparent;cursor:pointer}revo-grid .attribution .value{position:absolute;bottom:0;left:0;background-color:var(--rg-theme-background);padding:4px;border-radius:4px;box-shadow:0 1px 10px var(--rg-theme-border);white-space:nowrap;text-decoration:none;color:var(--rg-theme-text);letter-spacing:0.3px;font-size:11px;opacity:0;width:4px;overflow:hidden;transition:opacity 0.5s ease-in-out, width 0.3s ease-in-out}revo-grid .attribution:hover .value{width:63px;opacity:1}revo-grid.column-draggable.column-drag-start:hover,revo-grid.column-draggable.column-drag-start *:hover{cursor:grabbing}revo-grid .footer-wrapper,revo-grid .header-wrapper{width:100%}revo-grid .footer-wrapper revogr-data,revo-grid .header-wrapper revogr-data{z-index:3}revo-grid revo-dropdown{width:100%}revo-grid revo-dropdown .rv-dr-root{max-height:100%}revo-grid revo-dropdown.shrink label{opacity:0}revo-grid .viewports{max-width:100%;display:flex;flex-direction:row;align-items:flex-start;flex-grow:1}revo-grid{display:flex;flex-direction:column;width:100%;height:100%}revo-grid .main-viewport{flex-grow:1;height:0;display:flex;justify-content:space-between;flex-direction:row}revo-grid .draggable{position:fixed;height:30px;line-height:30px;background:var(--rg-theme-background);border-radius:3px;display:block;z-index:100;margin-top:5px;margin-right:-20px;box-shadow:0 4px 20px 0 var(--rg-theme-shadow);padding-left:20px;padding-right:5px}revo-grid .draggable.hidden{display:none}revo-grid .draggable .revo-alt-icon{background-color:var(--rg-theme-foreground);position:absolute;left:5px;top:10px}revo-grid .draggable-wrapper.hidden{display:none}revo-grid .drag-position{position:absolute;left:0;right:0;height:1px;z-index:2;background:var(--rg-theme-divider);pointer-events:none}revo-grid .drag-position-y{position:absolute;top:0;left:0;bottom:0;width:1px;z-index:2;background:var(--rg-theme-divider);pointer-events:none}revo-grid .drag-auto-scroll-y{pointer-events:none;position:absolute;left:0;top:0;height:50px;width:1px}revo-grid .clipboard{position:absolute;left:0;top:0}revo-grid revogr-scroll-virtual{position:relative}revo-grid revogr-scroll-virtual.vertical,revo-grid revogr-scroll-virtual.horizontal{z-index:3}`;
20755
+ const revoGridStyleCss = () => `revo-grid:is([theme=default],[theme=dark]),revo-grid:not([theme]){--rg-theme-font-family:var( --revo-grid-font-family, Helvetica, Arial, Sans-Serif, serif );--rg-theme-font-size:var(--revo-grid-font-size, 12px);--rg-theme-header-height:var(--revo-grid-header-height, 30px);--rg-theme-header-font-size:var(--revo-grid-header-font-size, 12px);--rg-theme-header-font-weight:var(--revo-grid-header-font-weight, normal);--rg-theme-header-text-transform:var( --revo-grid-header-text-transform, uppercase );--rg-theme-header-text-align:var(--revo-grid-header-text-align, center);--rg-theme-cell-text-align:var(--revo-grid-cell-text-align, left);--rg-theme-header-padding:var(--revo-grid-header-padding, 0);--rg-theme-cell-padding:var(--revo-grid-cell-padding, 0 4px);border:1px solid var(--rg-theme-header-border);font-size:var(--rg-theme-font-size)}revo-grid:is([theme=default],[theme=dark]) .rowHeaders revogr-header,revo-grid:not([theme]) .rowHeaders revogr-header{box-shadow:-1px 0 0 0 var(--rg-theme-header-border) inset}revo-grid:is([theme=default],[theme=dark]) revogr-header,revo-grid:not([theme]) revogr-header{text-align:var(--rg-theme-header-text-align);line-height:var(--rg-theme-header-height);background-color:var(--rg-theme-header-bg)}revo-grid:is([theme=default],[theme=dark]) revogr-header .group-rgRow,revo-grid:not([theme]) revogr-header .group-rgRow{box-shadow:none}revo-grid:is([theme=default],[theme=dark]) revogr-header .group-rgRow .rgHeaderCell,revo-grid:not([theme]) revogr-header .group-rgRow .rgHeaderCell{box-shadow:-1px 0 0 0 var(--rg-theme-header-border), -1px 0 0 0 var(--rg-theme-header-border) inset, 0 -1px 0 0 var(--rg-theme-header-border), 0 -1px 0 0 var(--rg-theme-header-border) inset}revo-grid:is([theme=default],[theme=dark]) revogr-header .header-rgRow,revo-grid:is([theme=default],[theme=dark]) revogr-header .group-rgRow,revo-grid:not([theme]) revogr-header .header-rgRow,revo-grid:not([theme]) revogr-header .group-rgRow{text-transform:var(--rg-theme-header-text-transform);font-size:var(--rg-theme-header-font-size);font-weight:var(--rg-theme-header-font-weight);color:var(--rg-theme-header-color)}revo-grid:is([theme=default],[theme=dark]) revogr-header .header-rgRow,revo-grid:not([theme]) revogr-header .header-rgRow{height:var(--rg-theme-header-height);box-shadow:0 -1px 0 0 var(--rg-theme-header-border) inset}revo-grid:is([theme=default],[theme=dark]) revogr-header .rgHeaderCell,revo-grid:not([theme]) revogr-header .rgHeaderCell{box-shadow:-1px 0 0 0 var(--rg-theme-header-border) inset, 0 -1px 0 0 var(--rg-theme-header-border), 0 -1px 0 0 var(--rg-theme-header-border) inset}revo-grid:is([theme=default],[theme=dark]) .rowHeaders,revo-grid:not([theme]) .rowHeaders{background-color:var(--rg-theme-row-headers-bg)}revo-grid:is([theme=default],[theme=dark]) .rowHeaders revogr-data .rgCell,revo-grid:not([theme]) .rowHeaders revogr-data .rgCell{color:var(--rg-theme-row-headers-color)}revo-grid:is([theme=default],[theme=dark]) .rowHeaders revogr-data .rgCell:first-child,revo-grid:not([theme]) .rowHeaders revogr-data .rgCell:first-child{box-shadow:0 -1px 0 0 var(--rg-theme-header-border) inset}revo-grid:is([theme=default],[theme=dark]) .rowHeaders revogr-data .rgCell:not(:first-child),revo-grid:not([theme]) .rowHeaders revogr-data .rgCell:not(:first-child){box-shadow:0 -1px 0 0 var(--rg-theme-header-border) inset, -1px 0 0 0 var(--rg-theme-header-border) inset}revo-grid:is([theme=default],[theme=dark]) .rowHeaders revogr-data .rgCell:last-child,revo-grid:not([theme]) .rowHeaders revogr-data .rgCell:last-child{border-right:1px solid var(--rg-theme-header-border)}revo-grid:is([theme=default],[theme=dark]) .rowHeaders revogr-data revogr-header,revo-grid:not([theme]) .rowHeaders revogr-data revogr-header{box-shadow:0 -1px 0 0 var(--rg-theme-header-border) inset}revo-grid:is([theme=default],[theme=dark]) revogr-viewport-scroll.colPinStart revogr-data .rgRow .rgCell:last-child,revo-grid:not([theme]) revogr-viewport-scroll.colPinStart revogr-data .rgRow .rgCell:last-child{box-shadow:0 -1px 0 0 var(--rg-theme-cell-border) inset, -1px 0 0 0 var(--rg-theme-header-border) inset}revo-grid:is([theme=default],[theme=dark]) revogr-viewport-scroll.colPinStart .footer-wrapper revogr-data .rgRow:first-child .rgCell,revo-grid:not([theme]) revogr-viewport-scroll.colPinStart .footer-wrapper revogr-data .rgRow:first-child .rgCell{box-shadow:0 1px 0 0 var(--rg-theme-header-border) inset, -1px 0 0 0 var(--rg-theme-header-border) inset}revo-grid:is([theme=default],[theme=dark]) revogr-viewport-scroll.colPinEnd,revo-grid:is([theme=default],[theme=dark]) revogr-viewport-scroll.colPinEnd revogr-header,revo-grid:not([theme]) revogr-viewport-scroll.colPinEnd,revo-grid:not([theme]) revogr-viewport-scroll.colPinEnd revogr-header{box-shadow:1px 0 0 var(--rg-theme-header-border) inset}revo-grid:is([theme=default],[theme=dark]) .footer-wrapper revogr-data .rgRow:first-child .rgCell,revo-grid:not([theme]) .footer-wrapper revogr-data .rgRow:first-child .rgCell{box-shadow:0 1px 0 0 var(--rg-theme-cell-border) inset, -1px 0 0 0 var(--rg-theme-cell-border) inset, 0 -1px 0 0 var(--rg-theme-cell-border) inset}revo-grid:is([theme=default],[theme=dark]) revogr-data,revo-grid:not([theme]) revogr-data{text-align:var(--rg-theme-cell-text-align)}revo-grid:is([theme=default],[theme=dark]) revogr-data .revo-draggable,revo-grid:not([theme]) revogr-data .revo-draggable{float:left}revo-grid:is([theme=default],[theme=dark]) revogr-data .rgRow,revo-grid:not([theme]) revogr-data .rgRow{line-height:var(--rg-theme-row-size, 27px)}revo-grid:is([theme=default],[theme=dark]) revogr-data .rgCell,revo-grid:not([theme]) revogr-data .rgCell{padding:var(--rg-theme-cell-padding);box-shadow:0 -1px 0 0 var(--rg-theme-cell-border) inset, -1px 0 0 0 var(--rg-theme-cell-border) inset}revo-grid:is([theme=material],[theme=darkMaterial]),revo-grid[theme]:not([theme=default],[theme=dark],[theme=compact],[theme=darkCompact]){--rg-theme-font-family:var( --revo-grid-font-family, Nunito, -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol' );--rg-theme-header-height:var(--revo-grid-header-height, 50px);--rg-theme-header-font-size:var( --revo-grid-header-font-size, var(--rg-theme-font-size) );--rg-theme-header-font-weight:var(--revo-grid-header-font-weight, 600);--rg-theme-header-text-transform:var( --revo-grid-header-text-transform, none );--rg-theme-header-text-align:var(--revo-grid-header-text-align, left);--rg-theme-cell-text-align:var(--revo-grid-cell-text-align, left);--rg-theme-header-padding:var(--revo-grid-header-padding, 0 15px);--rg-theme-cell-padding:var(--revo-grid-cell-padding, 0 15px);font-family:var(--rg-theme-font-family)}revo-grid:is([theme=material],[theme=darkMaterial]) revogr-header,revo-grid[theme]:not([theme=default],[theme=dark],[theme=compact],[theme=darkCompact]) revogr-header{color:var(--rg-theme-header-color);background-color:var(--rg-theme-header-bg);line-height:var(--rg-theme-header-height);font-size:var(--rg-theme-header-font-size);font-weight:var(--rg-theme-header-font-weight);text-transform:var(--rg-theme-header-text-transform);text-align:var(--rg-theme-header-text-align)}revo-grid:is([theme=material],[theme=darkMaterial]) revogr-header .rgHeaderCell,revo-grid[theme]:not([theme=default],[theme=dark],[theme=compact],[theme=darkCompact]) revogr-header .rgHeaderCell{padding:0;text-overflow:ellipsis}revo-grid:is([theme=material],[theme=darkMaterial]) revogr-header .rgHeaderCell .header-content,revo-grid[theme]:not([theme=default],[theme=dark],[theme=compact],[theme=darkCompact]) revogr-header .rgHeaderCell .header-content{padding:var(--rg-theme-header-padding)}revo-grid:is([theme=material],[theme=darkMaterial]) revogr-header .header-rgRow,revo-grid[theme]:not([theme=default],[theme=dark],[theme=compact],[theme=darkCompact]) revogr-header .header-rgRow{height:var(--rg-theme-header-height)}revo-grid:is([theme=material],[theme=darkMaterial]) .rowHeaders,revo-grid[theme]:not([theme=default],[theme=dark],[theme=compact],[theme=darkCompact]) .rowHeaders{color:var(--rg-theme-row-headers-color);background-color:var(--rg-theme-row-headers-bg)}revo-grid:is([theme=material],[theme=darkMaterial]) .rowHeaders revogr-data .rgCell,revo-grid[theme]:not([theme=default],[theme=dark],[theme=compact],[theme=darkCompact]) .rowHeaders revogr-data .rgCell{color:var(--rg-theme-row-headers-color)}revo-grid:is([theme=material],[theme=darkMaterial]) revogr-data,revo-grid[theme]:not([theme=default],[theme=dark],[theme=compact],[theme=darkCompact]) revogr-data{text-align:var(--rg-theme-cell-text-align)}revo-grid:is([theme=material],[theme=darkMaterial]) revogr-data .rgRow,revo-grid[theme]:not([theme=default],[theme=dark],[theme=compact],[theme=darkCompact]) revogr-data .rgRow{line-height:var(--rg-theme-row-size, 42px)}revo-grid:is([theme=material],[theme=darkMaterial]) revogr-data .rgCell,revo-grid[theme]:not([theme=default],[theme=dark],[theme=compact],[theme=darkCompact]) revogr-data .rgCell{padding:var(--rg-theme-cell-padding);box-shadow:-1px 0 0 0 var(--rg-theme-cell-vertical-border) inset}revo-grid:is([theme=compact],[theme=darkCompact]){--rg-theme-font-family:var( --revo-grid-font-family, Nunito, -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol' );--rg-theme-header-height:var(--revo-grid-header-height, 45px);--rg-theme-header-font-size:var( --revo-grid-header-font-size, var(--rg-theme-font-size) );--rg-theme-header-font-weight:var(--revo-grid-header-font-weight, 600);--rg-theme-header-text-transform:var( --revo-grid-header-text-transform, none );--rg-theme-header-text-align:var(--revo-grid-header-text-align, left);--rg-theme-cell-text-align:var(--revo-grid-cell-text-align, left);--rg-theme-header-padding:var(--revo-grid-header-padding, 0 15px);--rg-theme-cell-padding:var(--revo-grid-cell-padding, 0 15px);font-family:var(--rg-theme-font-family)}revo-grid:is([theme=compact],[theme=darkCompact]) revogr-header{color:var(--rg-theme-header-color);background-color:var(--rg-theme-header-bg);line-height:var(--rg-theme-header-height);font-size:var(--rg-theme-header-font-size);font-weight:var(--rg-theme-header-font-weight);text-transform:var(--rg-theme-header-text-transform);text-align:var(--rg-theme-header-text-align)}revo-grid:is([theme=compact],[theme=darkCompact]) revogr-header .rgHeaderCell{padding:0;text-overflow:ellipsis}revo-grid:is([theme=compact],[theme=darkCompact]) revogr-header .rgHeaderCell .header-content{padding:var(--rg-theme-header-padding)}revo-grid:is([theme=compact],[theme=darkCompact]) revogr-header .header-rgRow{height:var(--rg-theme-header-height)}revo-grid:is([theme=compact],[theme=darkCompact]) .rowHeaders{color:var(--rg-theme-row-headers-color);background-color:var(--rg-theme-row-headers-bg)}revo-grid:is([theme=compact],[theme=darkCompact]) .rowHeaders revogr-data .rgCell{color:var(--rg-theme-row-headers-color)}revo-grid:is([theme=compact],[theme=darkCompact]) revogr-data{text-align:var(--rg-theme-cell-text-align)}revo-grid:is([theme=compact],[theme=darkCompact]) revogr-data .rgRow{line-height:var(--rg-theme-row-size, 32px)}revo-grid:is([theme=compact],[theme=darkCompact]) revogr-data .rgCell{padding:var(--rg-theme-cell-padding);box-shadow:-1px 0 0 0 var(--rg-theme-cell-vertical-border) inset}revo-grid:is([theme=compact],[theme=darkCompact]) revo-dropdown .rv-dr-root{padding:0px 9px}revo-grid[dir=rtl] .viewports{flex-direction:row-reverse}revo-grid[dir=rtl] revogr-header .rgHeaderCell{text-align:right}revo-grid[dir=rtl] revogr-data .rgCell{text-align:right}revo-grid[dir=rtl] .rowHeaders revogr-data .rgCell{text-align:right}revo-grid[dir=rtl] revogr-filter-panel{direction:rtl}revo-grid[dir=rtl] revo-dropdown .rv-dr-root{text-align:right}revo-grid[dir=rtl] .drag-position{right:0;left:auto}revo-grid[dir=rtl] .drag-auto-scroll-y{right:0;left:auto}revo-grid[dir=rtl] .clipboard{right:0;left:auto}revo-grid[dir=rtl] .draggable{margin-left:-20px;margin-right:0;padding-right:20px;padding-left:5px}revo-grid[dir=rtl] .draggable .revo-alt-icon{right:5px;left:auto}revo-grid[dir=rtl] .focused-cell{border-right:2px solid var(--rg-theme-primary);border-left:none}revo-grid[dir=rtl] .selection-range{border-right:2px solid var(--rg-theme-primary);border-left:none}revo-grid[dir=rtl] .resize-handle{right:0;left:auto}revo-grid[dir=rtl] .sort-indicator{margin-left:0;margin-right:5px}revo-grid[dir=rtl] .filter-button{margin-left:0;margin-right:5px}revo-grid[dir=rtl] .group-expand{margin-right:0;margin-left:2px;padding-right:5px;padding-left:0}revo-grid[dir=rtl] .rgCell,revo-grid[dir=rtl] .rgHeaderCell{padding-left:5px;padding-right:5px}revo-grid[dir=rtl] revogr-edit{direction:rtl}revo-grid[dir=rtl] .rgHeaderCell{direction:rtl}revo-grid[dir=rtl] revogr-header,revo-grid[dir=rtl] revogr-data{text-align:right}revo-grid[dir=rtl]:is([theme=default],[theme=dark]) .rowHeaders,revo-grid[dir=rtl]:not([theme]) .rowHeaders{background-color:var(--rg-theme-row-headers-bg)}revo-grid[dir=rtl]:is([theme=default],[theme=dark]) .rowHeaders revogr-data .rgCell,revo-grid[dir=rtl]:not([theme]) .rowHeaders revogr-data .rgCell{color:var(--rg-theme-row-headers-color)}revo-grid[dir=rtl]:is([theme=default],[theme=dark]) .rowHeaders revogr-data .rgCell:first-child,revo-grid[dir=rtl]:not([theme]) .rowHeaders revogr-data .rgCell:first-child{box-shadow:0 -1px 0 0 var(--rg-theme-header-border) inset}revo-grid[dir=rtl]:is([theme=default],[theme=dark]) .rowHeaders revogr-data .rgCell:not(:first-child),revo-grid[dir=rtl]:not([theme]) .rowHeaders revogr-data .rgCell:not(:first-child){box-shadow:0 -1px 0 0 var(--rg-theme-header-border) inset, 1px 0 0 0 var(--rg-theme-header-border) inset}revo-grid[dir=rtl]:is([theme=default],[theme=dark]) .rowHeaders revogr-data .rgCell:last-child,revo-grid[dir=rtl]:not([theme]) .rowHeaders revogr-data .rgCell:last-child{border-left:1px solid var(--rg-theme-header-border);border-right:none}revo-grid[dir=rtl]:is([theme=default],[theme=dark]) .rowHeaders revogr-data revogr-header,revo-grid[dir=rtl]:not([theme]) .rowHeaders revogr-data revogr-header{box-shadow:0 -1px 0 0 var(--rg-theme-header-border) inset}revo-grid[dir=rtl]:is([theme=default],[theme=dark]) revogr-header,revo-grid[dir=rtl]:not([theme]) revogr-header{text-align:right}revo-grid[dir=rtl]:is([theme=default],[theme=dark]) revogr-data,revo-grid[dir=rtl]:not([theme]) revogr-data{text-align:right}.revo-drag-icon{width:11px;opacity:0.8}.revo-drag-icon::before{content:"::";display:inline-block}.revo-alt-icon{-webkit-mask-image:url("data:image/svg+xml,%3C%3Fxml version='1.0' encoding='UTF-8'%3F%3E%3Csvg viewBox='0 0 384 383' xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink'%3E%3Cg%3E%3Cpath d='M192.4375,383 C197.424479,383 201.663411,381.254557 205.154297,377.763672 L205.154297,377.763672 L264.25,318.667969 C270.234375,312.683594 271.605794,306.075846 268.364258,298.844727 C265.122721,291.613607 259.51237,287.998047 251.533203,287.998047 L251.533203,287.998047 L213.382812,287.998047 L213.382812,212.445312 L288.935547,212.445312 L288.935547,250.595703 C288.935547,258.57487 292.551107,264.185221 299.782227,267.426758 C307.013346,270.668294 313.621094,269.296875 319.605469,263.3125 L319.605469,263.3125 L378.701172,204.216797 C382.192057,200.725911 383.9375,196.486979 383.9375,191.5 C383.9375,186.513021 382.192057,182.274089 378.701172,178.783203 L378.701172,178.783203 L319.605469,119.6875 C313.621094,114.201823 307.013346,112.955078 299.782227,115.947266 C292.551107,118.939453 288.935547,124.42513 288.935547,132.404297 L288.935547,132.404297 L288.935547,170.554688 L213.382812,170.554688 L213.382812,95.0019531 L251.533203,95.0019531 C259.51237,95.0019531 264.998047,91.3863932 267.990234,84.1552734 C270.982422,76.9241536 269.735677,70.3164062 264.25,64.3320312 L264.25,64.3320312 L205.154297,5.23632812 C201.663411,1.74544271 197.424479,0 192.4375,0 C187.450521,0 183.211589,1.74544271 179.720703,5.23632812 L179.720703,5.23632812 L120.625,64.3320312 C114.640625,70.3164062 113.269206,76.9241536 116.510742,84.1552734 C119.752279,91.3863932 125.36263,95.0019531 133.341797,95.0019531 L133.341797,95.0019531 L171.492188,95.0019531 L171.492188,170.554688 L95.9394531,170.554688 L95.9394531,132.404297 C95.9394531,124.42513 92.3238932,118.814779 85.0927734,115.573242 C77.8616536,112.331706 71.2539062,113.703125 65.2695312,119.6875 L65.2695312,119.6875 L6.17382812,178.783203 C2.68294271,182.274089 0.9375,186.513021 0.9375,191.5 C0.9375,196.486979 2.68294271,200.725911 6.17382812,204.216797 L6.17382812,204.216797 L65.2695312,263.3125 C71.2539062,268.798177 77.8616536,270.044922 85.0927734,267.052734 C92.3238932,264.060547 95.9394531,258.57487 95.9394531,250.595703 L95.9394531,250.595703 L95.9394531,212.445312 L171.492188,212.445312 L171.492188,287.998047 L133.341797,287.998047 C125.36263,287.998047 119.876953,291.613607 116.884766,298.844727 C113.892578,306.075846 115.139323,312.683594 120.625,318.667969 L120.625,318.667969 L179.720703,377.763672 C183.211589,381.254557 187.450521,383 192.4375,383 Z'%3E%3C/path%3E%3C/g%3E%3C/svg%3E");mask-image:url("data:image/svg+xml,%3C%3Fxml version='1.0' encoding='UTF-8'%3F%3E%3Csvg viewBox='0 0 384 383' xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink'%3E%3Cg%3E%3Cpath d='M192.4375,383 C197.424479,383 201.663411,381.254557 205.154297,377.763672 L205.154297,377.763672 L264.25,318.667969 C270.234375,312.683594 271.605794,306.075846 268.364258,298.844727 C265.122721,291.613607 259.51237,287.998047 251.533203,287.998047 L251.533203,287.998047 L213.382812,287.998047 L213.382812,212.445312 L288.935547,212.445312 L288.935547,250.595703 C288.935547,258.57487 292.551107,264.185221 299.782227,267.426758 C307.013346,270.668294 313.621094,269.296875 319.605469,263.3125 L319.605469,263.3125 L378.701172,204.216797 C382.192057,200.725911 383.9375,196.486979 383.9375,191.5 C383.9375,186.513021 382.192057,182.274089 378.701172,178.783203 L378.701172,178.783203 L319.605469,119.6875 C313.621094,114.201823 307.013346,112.955078 299.782227,115.947266 C292.551107,118.939453 288.935547,124.42513 288.935547,132.404297 L288.935547,132.404297 L288.935547,170.554688 L213.382812,170.554688 L213.382812,95.0019531 L251.533203,95.0019531 C259.51237,95.0019531 264.998047,91.3863932 267.990234,84.1552734 C270.982422,76.9241536 269.735677,70.3164062 264.25,64.3320312 L264.25,64.3320312 L205.154297,5.23632812 C201.663411,1.74544271 197.424479,0 192.4375,0 C187.450521,0 183.211589,1.74544271 179.720703,5.23632812 L179.720703,5.23632812 L120.625,64.3320312 C114.640625,70.3164062 113.269206,76.9241536 116.510742,84.1552734 C119.752279,91.3863932 125.36263,95.0019531 133.341797,95.0019531 L133.341797,95.0019531 L171.492188,95.0019531 L171.492188,170.554688 L95.9394531,170.554688 L95.9394531,132.404297 C95.9394531,124.42513 92.3238932,118.814779 85.0927734,115.573242 C77.8616536,112.331706 71.2539062,113.703125 65.2695312,119.6875 L65.2695312,119.6875 L6.17382812,178.783203 C2.68294271,182.274089 0.9375,186.513021 0.9375,191.5 C0.9375,196.486979 2.68294271,200.725911 6.17382812,204.216797 L6.17382812,204.216797 L65.2695312,263.3125 C71.2539062,268.798177 77.8616536,270.044922 85.0927734,267.052734 C92.3238932,264.060547 95.9394531,258.57487 95.9394531,250.595703 L95.9394531,250.595703 L95.9394531,212.445312 L171.492188,212.445312 L171.492188,287.998047 L133.341797,287.998047 C125.36263,287.998047 119.876953,291.613607 116.884766,298.844727 C113.892578,306.075846 115.139323,312.683594 120.625,318.667969 L120.625,318.667969 L179.720703,377.763672 C183.211589,381.254557 187.450521,383 192.4375,383 Z'%3E%3C/path%3E%3C/g%3E%3C/svg%3E");width:11px;height:11px;background-size:cover;background-repeat:no-repeat}.arrow-down{position:absolute;right:5px;top:0}.arrow-down svg{width:8px;margin-top:5px;margin-left:5px;opacity:0.4}.cell-value-wrapper{margin-right:10px;overflow:hidden;text-overflow:ellipsis}revo-grid[theme]:is([theme=compact],[theme=darkCompact],[theme=material],[theme=darkMaterial]){background-color:transparent}revo-grid[theme]:is([theme=compact],[theme=darkCompact],[theme=material],[theme=darkMaterial]) revogr-header,revo-grid[theme]:is([theme=compact],[theme=darkCompact],[theme=material],[theme=darkMaterial]) .rowHeaders{background-color:transparent;color:inherit}revo-grid[theme]:is([theme=compact],[theme=darkCompact],[theme=material],[theme=darkMaterial]) .rowHeaders revogr-data .rgCell{color:inherit}revo-grid{--rg-theme-primary:var(--revo-grid-primary, #266ae8);--rg-theme-primary-transparent:var( --revo-grid-primary-transparent, rgba(38, 106, 232, 0.9) );--rg-theme-background:var(--revo-grid-background, #fff);--rg-theme-foreground:var(--revo-grid-foreground, black);--rg-theme-divider:var(--revo-grid-divider, gray);--rg-theme-shadow:var(--revo-grid-shadow, rgba(0, 0, 0, 0.15));--rg-theme-text:var(--revo-grid-text, black);--rg-theme-border:var(--revo-grid-border, rgba(0, 0, 0, 0.2));--rg-theme-header-bg:var(--revo-grid-header-bg, #f8f9fa);--rg-theme-header-color:var(--revo-grid-header-color, #000);--rg-theme-header-border:var(--revo-grid-header-border, #cecece);--rg-theme-header-focused-bg:var( --revo-grid-header-focused-bg, var(--rg-theme-focused-bg) );--rg-theme-header-hover-bg:var( --revo-grid-header-hover-bg, var(--rg-theme-row-hover) );--rg-theme-cell-border:var(--revo-grid-cell-border, #e2e3e3);--rg-theme-cell-vertical-border:var( --revo-grid-cell-vertical-border, transparent );--rg-theme-focused-bg:var(--revo-grid-focused-bg, rgba(233, 234, 237, 0.5));--rg-theme-row-hover:var(--revo-grid-row-hover, #f1f1f1);--rg-theme-row-headers-bg:var( --revo-grid-row-headers-bg, var(--rg-theme-header-bg) );--rg-theme-row-headers-color:var( --revo-grid-row-headers-color, var(--rg-theme-header-color) );--rg-theme-cell-disabled-bg:var( --revo-grid-cell-disabled-bg, rgba(0, 0, 0, 0.07) );--rg-theme-filter-panel-bg:var(--revo-grid-filter-panel-bg, #fff);--rg-theme-filter-panel-border:var(--revo-grid-filter-panel-border, #d9d9d9);--rg-theme-filter-panel-shadow:var( --revo-grid-filter-panel-shadow, rgba(0, 0, 0, 0.15) );--rg-theme-filter-panel-input-bg:var( --revo-grid-filter-panel-input-bg, #eaeaeb );--rg-theme-filter-panel-divider:var( --revo-grid-filter-panel-divider, #d9d9d9 );--rg-theme-filter-panel-select-border:var( --revo-grid-filter-panel-select-border, transparent );--rg-theme-filter-panel-select-border-hover:var( --revo-grid-filter-panel-select-border-hover, transparent );--rg-theme-filter-panel-reorder-accent:var( --revo-grid-filter-panel-reorder-accent, #007cb2 );--rg-theme-filter-panel-reorder-color:var( --revo-grid-filter-panel-reorder-color, #6b7280 );--rg-theme-filter-panel-text:var( --revo-grid-filter-panel-text, var(--rg-theme-text) );--rg-theme-filter-panel-muted-text:var( --revo-grid-filter-panel-muted-text, gray );--rg-theme-filter-panel-focus-ring:var( --revo-grid-filter-panel-focus-ring, 0 0 1px 3px rgba(59, 153, 252, 0.7) );--rg-theme-filter-panel-icon:var(--revo-grid-filter-panel-icon, gray);--rg-theme-filter-panel-icon-active:var( --revo-grid-filter-panel-icon-active, #10224a );--rg-theme-font-family:var( --revo-grid-font-family, Helvetica, Arial, Sans-Serif, serif );--rg-theme-font-size:var(--revo-grid-font-size, 14px);--rg-theme-header-height:var(--revo-grid-header-height, 30px);--rg-theme-header-font-size:var(--revo-grid-header-font-size, 12px);--rg-theme-header-font-weight:var(--revo-grid-header-font-weight, normal);--rg-theme-header-text-transform:var( --revo-grid-header-text-transform, uppercase );--rg-theme-header-text-align:var(--revo-grid-header-text-align, center);--rg-theme-cell-text-align:var(--revo-grid-cell-text-align, center);--rg-theme-header-padding:var(--revo-grid-header-padding, 0);--rg-theme-cell-padding:var(--revo-grid-cell-padding, 0);--rg-theme-selection-border:var(--revo-grid-selection-border, #0d63e8);--rg-theme-selection-bg:var(--revo-grid-selection-bg, transparent);--rg-theme-autofill-handle-bg:var( --revo-grid-autofill-handle-bg, var(--rg-theme-selection-border) );--rg-theme-autofill-handle-border:var( --revo-grid-autofill-handle-border, white );--rg-theme-range-handle-bg:var( --revo-grid-range-handle-bg, rgba(0, 0, 0, 0.2) );--rg-theme-temporary-range-border:var( --revo-grid-temporary-range-border, rgb(255, 94, 0) );--rg-theme-temporary-selection-border:var( --revo-grid-temporary-selection-border, gray );--rg-theme-header-resize-hover:var( --revo-grid-header-resize-hover, deepskyblue );--rg-theme-button-text:var(--revo-grid-button-text, #fff);--rg-theme-button-bg:var(--revo-grid-button-bg, #4545ff);--rg-theme-button-success-bg:var(--revo-grid-button-success-bg, #009037);--rg-theme-button-danger-bg:var(--revo-grid-button-danger-bg, #e0662e);--rg-theme-button-outline-border:var( --revo-grid-button-outline-border, #dbdbdb );--rg-theme-button-outline-text:var(--revo-grid-button-outline-text, #000)}revo-grid[data-rg-theme-scheme=dark]{color-scheme:dark;--rg-theme-background:var(--revo-grid-background, #212529);--rg-theme-foreground:var(--revo-grid-foreground, #fff);--rg-theme-text:var(--revo-grid-text, rgba(255, 255, 255, 0.9));--rg-theme-divider:var(--revo-grid-divider, #505050);--rg-theme-border:var( --revo-grid-border, rgba(255, 255, 255, 0.2) );--rg-theme-filter-panel-bg:var(--revo-grid-filter-panel-bg, #212529);--rg-theme-filter-panel-border:var( --revo-grid-filter-panel-border, #505050 );--rg-theme-filter-panel-input-bg:var( --revo-grid-filter-panel-input-bg, #343a40 );--rg-theme-filter-panel-divider:var( --revo-grid-filter-panel-divider, #505050 );--rg-theme-filter-panel-icon-active:var( --revo-grid-filter-panel-icon-active, #fff );--rg-theme-header-bg:var(--revo-grid-header-bg, #343a40);--rg-theme-header-color:var(--revo-grid-header-color, #fff);--rg-theme-header-border:var(--revo-grid-header-border, #505050);--rg-theme-cell-border:var(--revo-grid-cell-border, #424242);--rg-theme-focused-bg:var( --revo-grid-focused-bg, rgba(52, 58, 64, 0.5) );--rg-theme-row-hover:var( --revo-grid-row-hover, rgba(80, 80, 80, 0.5) );--rg-theme-row-headers-bg:var( --revo-grid-row-headers-bg, rgba(52, 58, 64, 0.8) );--rg-theme-row-headers-color:var( --revo-grid-row-headers-color, rgba(255, 255, 255, 0.8) );--rg-theme-cell-disabled-bg:var( --revo-grid-cell-disabled-bg, rgba(255, 255, 255, 0.07) );--rg-theme-button-outline-border:var( --revo-grid-button-outline-border, #404040 );--rg-theme-button-outline-text:var( --revo-grid-button-outline-text, #d8d8d8 )}revo-grid[data-rg-theme-scheme=light]{color-scheme:light}revo-grid{}revo-grid>*{--revo-grid-primary:var(--rg-theme-primary);--revo-grid-primary-transparent:var(--rg-theme-primary-transparent);--revo-grid-background:var(--rg-theme-background);--revo-grid-foreground:var(--rg-theme-foreground);--revo-grid-divider:var(--rg-theme-divider);--revo-grid-shadow:var(--rg-theme-shadow);--revo-grid-text:var(--rg-theme-text);--revo-grid-border:var(--rg-theme-border);--revo-grid-header-bg:var(--rg-theme-header-bg);--revo-grid-header-color:var(--rg-theme-header-color);--revo-grid-header-border:var(--rg-theme-header-border);--revo-grid-header-focused-bg:var(--rg-theme-header-focused-bg);--revo-grid-header-hover-bg:var(--rg-theme-header-hover-bg);--revo-grid-cell-border:var(--rg-theme-cell-border);--revo-grid-cell-vertical-border:var(--rg-theme-cell-vertical-border);--revo-grid-focused-bg:var(--rg-theme-focused-bg);--revo-grid-row-hover:var(--rg-theme-row-hover);--revo-grid-row-headers-bg:var(--rg-theme-row-headers-bg);--revo-grid-row-headers-color:var(--rg-theme-row-headers-color);--revo-grid-cell-disabled-bg:var(--rg-theme-cell-disabled-bg);--revo-grid-filter-panel-bg:var(--rg-theme-filter-panel-bg);--revo-grid-filter-panel-border:var(--rg-theme-filter-panel-border);--revo-grid-filter-panel-shadow:var(--rg-theme-filter-panel-shadow);--revo-grid-filter-panel-input-bg:var(--rg-theme-filter-panel-input-bg);--revo-grid-filter-panel-divider:var(--rg-theme-filter-panel-divider);--revo-grid-filter-panel-select-border:var(--rg-theme-filter-panel-select-border);--revo-grid-filter-panel-select-border-hover:var(--rg-theme-filter-panel-select-border-hover);--revo-grid-filter-panel-reorder-accent:var(--rg-theme-filter-panel-reorder-accent);--revo-grid-filter-panel-reorder-color:var(--rg-theme-filter-panel-reorder-color);--revo-grid-filter-panel-text:var(--rg-theme-filter-panel-text);--revo-grid-filter-panel-muted-text:var(--rg-theme-filter-panel-muted-text);--revo-grid-filter-panel-focus-ring:var(--rg-theme-filter-panel-focus-ring);--revo-grid-filter-panel-icon:var(--rg-theme-filter-panel-icon);--revo-grid-filter-panel-icon-active:var(--rg-theme-filter-panel-icon-active);--revo-grid-font-family:var(--rg-theme-font-family);--revo-grid-font-size:var(--rg-theme-font-size);--revo-grid-header-height:var(--rg-theme-header-height);--revo-grid-header-font-size:var(--rg-theme-header-font-size);--revo-grid-header-font-weight:var(--rg-theme-header-font-weight);--revo-grid-header-text-transform:var(--rg-theme-header-text-transform);--revo-grid-header-text-align:var(--rg-theme-header-text-align);--revo-grid-cell-text-align:var(--rg-theme-cell-text-align);--revo-grid-header-padding:var(--rg-theme-header-padding);--revo-grid-cell-padding:var(--rg-theme-cell-padding);--revo-grid-selection-border:var(--rg-theme-selection-border);--revo-grid-selection-bg:var(--rg-theme-selection-bg);--revo-grid-autofill-handle-bg:var(--rg-theme-autofill-handle-bg);--revo-grid-autofill-handle-border:var(--rg-theme-autofill-handle-border);--revo-grid-range-handle-bg:var(--rg-theme-range-handle-bg);--revo-grid-temporary-range-border:var(--rg-theme-temporary-range-border);--revo-grid-temporary-selection-border:var(--rg-theme-temporary-selection-border);--revo-grid-header-resize-hover:var(--rg-theme-header-resize-hover);--revo-grid-button-text:var(--rg-theme-button-text);--revo-grid-button-bg:var(--rg-theme-button-bg);--revo-grid-button-success-bg:var(--rg-theme-button-success-bg);--revo-grid-button-danger-bg:var(--rg-theme-button-danger-bg);--revo-grid-button-outline-border:var(--rg-theme-button-outline-border);--revo-grid-button-outline-text:var(--rg-theme-button-outline-text)}revo-grid{direction:ltr !important}revo-grid revogr-header .header-rgRow.group{box-shadow:0 -1px 0 0 var(--rg-theme-header-border) inset}revo-grid revogr-header .header-rgRow:not(.group){box-shadow:0 -1px 0 0 var(--rg-theme-header-border), 0 -1px 0 0 var(--rg-theme-header-border) inset}revo-grid revogr-header .rgHeaderCell.sortable:hover{background-color:var(--rg-theme-header-hover-bg)}revo-grid revogr-header .rgHeaderCell.focused-cell{background:var(--rg-theme-header-focused-bg)}revo-grid .footer-wrapper revogr-data{box-shadow:0 -1px 0 var(--rg-theme-cell-border)}revo-grid revogr-viewport-scroll.colPinStart{box-shadow:-1px 0 0 var(--rg-theme-cell-border) inset}revo-grid revogr-viewport-scroll.colPinEnd{box-shadow:-1px 0 0 var(--rg-theme-cell-border)}revo-grid revogr-data .rgRow{box-shadow:0 -1px 0 0 var(--rg-theme-cell-border) inset}revo-grid revogr-data .rgRow.focused-rgRow{background-color:var(--rg-theme-focused-bg)}revo-grid revogr-data .rgCell{color:var(--rg-theme-text)}revo-grid revogr-data .rgCell.disabled{background-color:var(--rg-theme-cell-disabled-bg)}revo-grid{display:flex !important;height:100%;min-height:300px;background-color:var(--rg-theme-background);font-family:var(--rg-theme-font-family);font-size:var(--rg-theme-font-size);position:relative;color:var(--rg-theme-text);-webkit-touch-callout:none;-webkit-user-select:none;-khtml-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;}revo-grid .attribution{position:absolute;bottom:0;left:0;right:0;z-index:1000;width:0;height:0;border-left:4px solid var(--rg-theme-primary-transparent);border-bottom:4px solid var(--rg-theme-primary-transparent);border-top:4px solid transparent;border-right:4px solid transparent;cursor:pointer}revo-grid .attribution .value{position:absolute;bottom:0;left:0;background-color:var(--rg-theme-background);padding:4px;border-radius:4px;box-shadow:0 1px 10px var(--rg-theme-border);white-space:nowrap;text-decoration:none;color:var(--rg-theme-text);letter-spacing:0.3px;font-size:11px;opacity:0;width:4px;overflow:hidden;transition:opacity 0.5s ease-in-out, width 0.3s ease-in-out}revo-grid .attribution:hover .value{width:63px;opacity:1}revo-grid.column-draggable.column-drag-start:hover,revo-grid.column-draggable.column-drag-start *:hover{cursor:grabbing}revo-grid .footer-wrapper,revo-grid .header-wrapper{width:100%}revo-grid .footer-wrapper revogr-data,revo-grid .header-wrapper revogr-data{z-index:3}revo-grid revo-dropdown{width:100%}revo-grid revo-dropdown .rv-dr-root{max-height:100%}revo-grid revo-dropdown.shrink label{opacity:0}revo-grid .viewports{max-width:100%;display:flex;flex-direction:row;align-items:flex-start;flex-grow:1}revo-grid{display:flex;flex-direction:column;width:100%;height:100%}revo-grid .main-viewport{flex-grow:1;height:0;display:flex;justify-content:space-between;flex-direction:row}revo-grid .draggable{position:fixed;height:30px;line-height:30px;background:var(--rg-theme-background);border-radius:3px;display:block;z-index:100;margin-top:5px;margin-right:-20px;box-shadow:0 4px 20px 0 var(--rg-theme-shadow);padding-left:20px;padding-right:5px}revo-grid .draggable.hidden{display:none}revo-grid .draggable .revo-alt-icon{background-color:var(--rg-theme-foreground);position:absolute;left:5px;top:10px}revo-grid .draggable-wrapper.hidden{display:none}revo-grid .drag-position{position:absolute;left:0;right:0;height:1px;z-index:2;background:var(--rg-theme-divider);pointer-events:none}revo-grid .drag-position-y{position:absolute;top:0;left:0;bottom:0;width:1px;z-index:2;background:var(--rg-theme-divider);pointer-events:none}revo-grid .drag-auto-scroll-y{pointer-events:none;position:absolute;left:0;top:0;height:50px;width:1px}revo-grid .clipboard{position:absolute;left:0;top:0}revo-grid revogr-scroll-virtual{position:relative}revo-grid revogr-scroll-virtual.vertical,revo-grid revogr-scroll-virtual.horizontal{z-index:3}`;
20476
20756
 
20477
20757
  const DEFAULT_COLUMN_SIZE = 100;
20478
20758
  function getColumnSize(size) {
@@ -21344,29 +21624,31 @@ class RevoGridComponent {
21344
21624
  vals: after,
21345
21625
  oldVals: before,
21346
21626
  });
21347
- // apply new values
21627
+ this.dimensionProvider.syncRowDefinitions(newVal);
21348
21628
  const newRows = rowDefinitionByType(newVal);
21349
- // clear current defs
21350
- if (oldVal) {
21351
- const remove = rowDefinitionRemoveByType(oldVal);
21352
- // clear all old data and drop sizes
21353
- for (const t in remove) {
21354
- if (remove.hasOwnProperty(t)) {
21355
- const type = t;
21356
- const store = this.dataProvider.stores[type];
21357
- const sourceLength = store.store.get('source').length;
21358
- this.dimensionProvider.clearSize(type, sourceLength);
21359
- }
21360
- }
21361
- }
21362
- // set new sizes
21629
+ const oldRows = rowDefinitionByType(oldVal);
21630
+ const dataProvider = this.dataProvider;
21631
+ const dimensionProvider = this.dimensionProvider;
21363
21632
  rowTypes.forEach((t) => {
21364
- var _a;
21365
21633
  const newSizes = newRows[t];
21366
- // apply new sizes or force update
21367
- if (newSizes || forceUpdate) {
21368
- (_a = this.dimensionProvider) === null || _a === void 0 ? void 0 : _a.setCustomSizes(t, (newSizes === null || newSizes === void 0 ? void 0 : newSizes.sizes) || {});
21634
+ const oldSizes = oldRows[t];
21635
+ if (!newSizes && !oldSizes && !forceUpdate) {
21636
+ return;
21369
21637
  }
21638
+ const sizes = Object.assign({}, dimensionProvider.stores[t].store.get('sizes'));
21639
+ const definitionSizes = (newSizes === null || newSizes === void 0 ? void 0 : newSizes.sizes) || {};
21640
+ const previousDefinitionSizes = (oldSizes === null || oldSizes === void 0 ? void 0 : oldSizes.sizes) || {};
21641
+ const items = dataProvider.stores[t].store.get('items');
21642
+ items.forEach((physicalIndex, virtualIndex) => {
21643
+ if (Object.hasOwn(previousDefinitionSizes, physicalIndex) &&
21644
+ sizes[virtualIndex] === previousDefinitionSizes[physicalIndex]) {
21645
+ delete sizes[virtualIndex];
21646
+ }
21647
+ if (Object.hasOwn(definitionSizes, physicalIndex)) {
21648
+ sizes[virtualIndex] = definitionSizes[physicalIndex];
21649
+ }
21650
+ });
21651
+ dimensionProvider.setCustomSizes(t, sizes);
21370
21652
  });
21371
21653
  }
21372
21654
  trimmedRowsChanged(newVal = {}) {
@@ -21415,6 +21697,9 @@ class RevoGridComponent {
21415
21697
  rowHeadersChange(rowHeaders) {
21416
21698
  this.rowheaderschanged.emit(rowHeaders);
21417
21699
  }
21700
+ resizeRowChanged() {
21701
+ this.syncRowResizeConfig();
21702
+ }
21418
21703
  /**
21419
21704
  * Register external VNodes
21420
21705
  */
@@ -21437,6 +21722,7 @@ class RevoGridComponent {
21437
21722
  */
21438
21723
  pluginsChanged(plugins = [], prevPlugins) {
21439
21724
  this.pluginService.addUserPluginsAndCreate(this.element, plugins, prevPlugins, this.getPluginData());
21725
+ this.syncRowResizeConfig();
21440
21726
  }
21441
21727
  // #endregion
21442
21728
  // #region Plugins
@@ -21477,11 +21763,15 @@ class RevoGridComponent {
21477
21763
  this.pluginService.add(new SortingPlugin(this.element, pluginData));
21478
21764
  // register grouping plugin
21479
21765
  this.pluginService.add(new GroupingRowPlugin(this.element, pluginData));
21480
- this.pluginService.add(RowResizePlugin.fromGridProperty(this.element, pluginData));
21766
+ this.pluginService.add(new RowResizePlugin(this.element, pluginData));
21481
21767
  if (this.canMoveColumns) {
21482
21768
  this.pluginService.add(new ColumnMovePlugin(this.element, pluginData));
21483
21769
  }
21484
21770
  }
21771
+ syncRowResizeConfig() {
21772
+ const plugin = this.pluginService.getByClass(RowResizePlugin);
21773
+ plugin === null || plugin === void 0 ? void 0 : plugin.syncGridConfig();
21774
+ }
21485
21775
  getPluginData() {
21486
21776
  if (!this.dimensionProvider || !this.dataProvider || !this.columnProvider || !this.viewportProvider || !this.selectionStoreConnector) {
21487
21777
  return;
@@ -21524,6 +21814,9 @@ class RevoGridComponent {
21524
21814
  this.themeService.setDefinitions(this.themeDefinitions);
21525
21815
  this.dimensionProvider = new DimensionProvider(this.viewportProvider, {
21526
21816
  realSizeChanged: (k) => this.contentsizechanged.emit(k),
21817
+ rowDefinitionsChanged: definitions => {
21818
+ this.rowDefinitions = definitions;
21819
+ },
21527
21820
  });
21528
21821
  this.dimensionProvider.setSettings({ originItemSize: getColumnSize(this.colSize) }, 'rgCol');
21529
21822
  this.columnProvider = new ColumnDataProvider();
@@ -21714,6 +22007,9 @@ class RevoGridComponent {
21714
22007
  "rowHeaders": [{
21715
22008
  "rowHeadersChange": 0
21716
22009
  }],
22010
+ "resizeRow": [{
22011
+ "resizeRowChanged": 0
22012
+ }],
21717
22013
  "registerVNode": [{
21718
22014
  "registerOutsideVNodes": 0
21719
22015
  }],
@@ -22447,19 +22743,20 @@ const HeaderRenderer = (p) => {
22447
22743
  const hasSortingSign = !!(((_a = p.data) === null || _a === void 0 ? void 0 : _a.sortable) ||
22448
22744
  ((_b = p.data) === null || _b === void 0 ? void 0 : _b.order) ||
22449
22745
  ((_c = p.data) === null || _c === void 0 ? void 0 : _c.sortIndex));
22746
+ const hasFilterButton = !!(p.canFilter && ((_d = p.data) === null || _d === void 0 ? void 0 : _d.filter) !== false);
22450
22747
  const cellClass = {
22451
22748
  [HEADER_CLASS]: true,
22452
- [HEADER_SORTABLE_CLASS]: !!((_d = p.data) === null || _d === void 0 ? void 0 : _d.sortable),
22749
+ [HEADER_SORTABLE_CLASS]: !!((_e = p.data) === null || _e === void 0 ? void 0 : _e.sortable),
22453
22750
  };
22454
- if ((_e = p.data) === null || _e === void 0 ? void 0 : _e.order) {
22751
+ if ((_f = p.data) === null || _f === void 0 ? void 0 : _f.order) {
22455
22752
  cellClass[p.data.order] = true;
22456
22753
  }
22457
22754
  const dataProps = {
22458
- key: String((_g = (_f = p.data) === null || _f === void 0 ? void 0 : _f.prop) !== null && _g !== void 0 ? _g : p.column.itemIndex),
22755
+ key: String((_h = (_g = p.data) === null || _g === void 0 ? void 0 : _g.prop) !== null && _h !== void 0 ? _h : p.column.itemIndex),
22459
22756
  [DATA_COL]: p.column.itemIndex,
22460
22757
  canResize: p.canResize,
22461
- minWidth: ((_h = p.data) === null || _h === void 0 ? void 0 : _h.minSize) || MIN_COL_SIZE,
22462
- maxWidth: (_j = p.data) === null || _j === void 0 ? void 0 : _j.maxSize,
22758
+ minWidth: ((_j = p.data) === null || _j === void 0 ? void 0 : _j.minSize) || MIN_COL_SIZE,
22759
+ maxWidth: (_k = p.data) === null || _k === void 0 ? void 0 : _k.maxSize,
22463
22760
  active: p.active || ['r'],
22464
22761
  class: cellClass,
22465
22762
  style: {
@@ -22495,7 +22792,7 @@ const HeaderRenderer = (p) => {
22495
22792
  }
22496
22793
  }
22497
22794
  }
22498
- return (hAsync(HeaderCellRenderer, { data: p.data, props: dataProps, additionalData: p.additionalData }, hasSortingSign ? hAsync(SortingSign, { column: p.data }) : null, p.canFilter && ((_k = p.data) === null || _k === void 0 ? void 0 : _k.filter) !== false ? (hAsync(FilterButton, { column: p.data })) : ('')));
22795
+ return (hAsync(HeaderCellRenderer, { data: p.data, props: dataProps, additionalData: p.additionalData }, hasSortingSign || hasFilterButton ? (hAsync("span", { class: "header-controls" }, hasSortingSign ? hAsync(SortingSign, { column: p.data }) : null, hasFilterButton ? hAsync(FilterButton, { column: p.data }) : null)) : null));
22499
22796
  };
22500
22797
 
22501
22798
  const HeaderGroupRenderer = (p) => {
@@ -22517,7 +22814,7 @@ const HeaderGroupRenderer = (p) => {
22517
22814
  return (hAsync(HeaderCellRenderer, { data: Object.assign(Object.assign({}, p.group), { prop: '', providers: p.providers, index: p.start }), props: groupProps, additionalData: p.additionalData }));
22518
22815
  };
22519
22816
 
22520
- const revogrHeaderStyleCss = () => `@charset "UTF-8";revogr-header{position:relative;z-index:5;display:block}revogr-header .header-rgRow{display:block;position:relative}revogr-header .header-rgRow.group{z-index:0}revogr-header .group-rgRow{position:relative;overflow:hidden}revogr-header .rgHeaderCell{position:absolute;box-sizing:border-box;height:100%;z-index:1;display:flex;text-align:var(--rg-theme-header-text-align, center)}revogr-header .rgHeaderCell.align-center{text-align:center}revogr-header .rgHeaderCell.align-left{text-align:left}revogr-header .rgHeaderCell.align-right{text-align:right}revogr-header .rgHeaderCell.sortable{cursor:pointer}revogr-header .rgHeaderCell .sort-indicator{display:inline-flex;align-items:flex-start;gap:1px}revogr-header .rgHeaderCell .sort-indicator i.asc:after,revogr-header .rgHeaderCell .sort-indicator i.desc:after{font-size:13px}revogr-header .rgHeaderCell .sort-indicator i.asc:after{content:"↑"}revogr-header .rgHeaderCell .sort-indicator i.desc:after{content:"↓"}revogr-header .rgHeaderCell .sort-indicator .sort-order-index{font-size:10px;line-height:1;top:0}revogr-header .rgHeaderCell.active{z-index:10}revogr-header .rgHeaderCell.active .resizable{background-color:var(--rg-theme-header-resize-hover)}revogr-header .rgHeaderCell .header-content{position:absolute;z-index:0;inset:0;box-sizing:border-box;padding:inherit;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;flex-grow:1}revogr-header .rgHeaderCell>span:first-of-type{position:relative;z-index:1;margin-left:auto}revogr-header .rgHeaderCell .resizable{display:block;position:absolute;z-index:90;touch-action:none;user-select:none}revogr-header .rgHeaderCell .resizable:hover{background-color:var(--rg-theme-header-resize-hover)}revogr-header .rgHeaderCell>.resizable-r{cursor:ew-resize;width:6px;right:0;top:0;height:100%}revogr-header .rgHeaderCell>.resizable-rb{cursor:se-resize;width:6px;height:6px;right:0;bottom:0}revogr-header .rgHeaderCell>.resizable-b{cursor:s-resize;height:6px;bottom:0;width:100%;left:0}revogr-header .rgHeaderCell>.resizable-lb{cursor:sw-resize;width:6px;height:6px;left:0;bottom:0}revogr-header .rgHeaderCell>.resizable-l{cursor:w-resize;width:6px;left:0;height:100%;top:0}revogr-header .rgHeaderCell>.resizable-lt{cursor:nw-resize;width:6px;height:6px;left:0;top:0}revogr-header .rgHeaderCell>.resizable-t{cursor:n-resize;height:6px;top:0;width:100%;left:0}revogr-header .rgHeaderCell>.resizable-rt{cursor:ne-resize;width:6px;height:6px;right:0;top:0}revogr-header .rv-filter{visibility:hidden}`;
22817
+ const revogrHeaderStyleCss = () => `@charset "UTF-8";revogr-header{position:relative;z-index:5;display:block}revogr-header .header-rgRow{display:block;position:relative}revogr-header .header-rgRow.group{z-index:0}revogr-header .group-rgRow{position:relative;overflow:hidden}revogr-header .rgHeaderCell{position:absolute;box-sizing:border-box;height:100%;z-index:1;display:flex;text-align:var(--rg-theme-header-text-align, center)}revogr-header .rgHeaderCell.align-center{text-align:center}revogr-header .rgHeaderCell.align-left{text-align:left}revogr-header .rgHeaderCell.align-right{text-align:right}revogr-header .rgHeaderCell.sortable{cursor:pointer}revogr-header .rgHeaderCell .sort-indicator{display:inline-flex;align-items:flex-start;gap:1px}revogr-header .rgHeaderCell .sort-indicator i.asc:after,revogr-header .rgHeaderCell .sort-indicator i.desc:after{font-size:13px}revogr-header .rgHeaderCell .sort-indicator i.asc:after{content:"↑"}revogr-header .rgHeaderCell .sort-indicator i.desc:after{content:"↓"}revogr-header .rgHeaderCell .sort-indicator .sort-order-index{font-size:10px;line-height:1;top:0}revogr-header .rgHeaderCell.active{z-index:10}revogr-header .rgHeaderCell.active .resizable{background-color:var(--rg-theme-header-resize-hover)}revogr-header .rgHeaderCell .header-content{position:absolute;z-index:0;inset:0;box-sizing:border-box;padding:inherit;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;flex-grow:1}revogr-header .rgHeaderCell .header-controls{position:absolute;top:0;right:1px;bottom:1px;min-width:15px;z-index:1;display:flex;align-items:center}revogr-header .rgHeaderCell .resizable{display:block;position:absolute;z-index:90;touch-action:none;user-select:none}revogr-header .rgHeaderCell .resizable:hover{background-color:var(--rg-theme-header-resize-hover)}revogr-header .rgHeaderCell>.resizable-r{cursor:ew-resize;width:6px;right:0;top:0;height:100%}revogr-header .rgHeaderCell>.resizable-rb{cursor:se-resize;width:6px;height:6px;right:0;bottom:0}revogr-header .rgHeaderCell>.resizable-b{cursor:s-resize;height:6px;bottom:0;width:100%;left:0}revogr-header .rgHeaderCell>.resizable-lb{cursor:sw-resize;width:6px;height:6px;left:0;bottom:0}revogr-header .rgHeaderCell>.resizable-l{cursor:w-resize;width:6px;left:0;height:100%;top:0}revogr-header .rgHeaderCell>.resizable-lt{cursor:nw-resize;width:6px;height:6px;left:0;top:0}revogr-header .rgHeaderCell>.resizable-t{cursor:n-resize;height:6px;top:0;width:100%;left:0}revogr-header .rgHeaderCell>.resizable-rt{cursor:ne-resize;width:6px;height:6px;right:0;top:0}revogr-header .rv-filter{visibility:hidden}`;
22521
22818
 
22522
22819
  class RevogrHeaderComponent {
22523
22820
  constructor(hostRef) {