@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.mjs CHANGED
@@ -7520,9 +7520,10 @@ const AND_OR_BUTTON = 'and-or-button';
7520
7520
  const TRASH_BUTTON = 'trash-button';
7521
7521
  const REORDER_BUTTON = 'reorder-button';
7522
7522
  const FilterButton = ({ column }) => {
7523
- return (hAsync("span", null, hAsync("button", { class: {
7523
+ const active = !!(column === null || column === void 0 ? void 0 : column[FILTER_PROP]);
7524
+ return (hAsync("span", { class: "filter-button-wrapper" }, hAsync("button", { class: {
7524
7525
  [FILTER_BUTTON_CLASS]: true,
7525
- [FILTER_BUTTON_ACTIVE]: column && !!column[FILTER_PROP],
7526
+ [FILTER_BUTTON_ACTIVE]: active,
7526
7527
  } }, 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" }))))));
7527
7528
  };
7528
7529
  const TrashButton = ({ ariaLabel, onClick }) => {
@@ -7606,7 +7607,7 @@ function moveFilterItem(items, sourceId, targetId) {
7606
7607
  return true;
7607
7608
  }
7608
7609
 
7609
- 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}`;
7610
+ 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}`;
7610
7611
 
7611
7612
  const defaultType = 'none';
7612
7613
  const FILTER_LIST_CLASS = 'multi-filter-list';
@@ -7624,6 +7625,7 @@ class FilterPanel {
7624
7625
  registerInstance(this, hostRef);
7625
7626
  this.filterChange = createEvent(this, "filterChange", 7);
7626
7627
  this.resetChange = createEvent(this, "resetChange", 7);
7628
+ this.hasChanges = false;
7627
7629
  this.filterCaptionsInternal = {
7628
7630
  title: 'Filter by',
7629
7631
  ok: 'Close',
@@ -7659,7 +7661,7 @@ class FilterPanel {
7659
7661
  */
7660
7662
  this.allowDuplicateOperators = true;
7661
7663
  this.debouncedApplyFilter = debounce$1(() => {
7662
- this.filterChange.emit(this.filterItems);
7664
+ this.emitFilterChange();
7663
7665
  }, 400);
7664
7666
  }
7665
7667
  onMouseDown(e) {
@@ -7689,10 +7691,25 @@ class FilterPanel {
7689
7691
  }
7690
7692
  }
7691
7693
  async show(newEntity) {
7694
+ this.hasChanges = false;
7692
7695
  this.changes = newEntity;
7693
- this.filterItems = (newEntity === null || newEntity === void 0 ? void 0 : newEntity.filterItems) || {};
7696
+ this.filterItems = this.cloneFilterItems((newEntity === null || newEntity === void 0 ? void 0 : newEntity.filterItems) || {});
7697
+ this.draftFilter = undefined;
7694
7698
  if (this.changes) {
7695
7699
  this.changes.type = this.changes.type || defaultType;
7700
+ const prop = this.changes.prop;
7701
+ const propFilters = prop === undefined ? undefined : this.filterItems[prop];
7702
+ if (!(propFilters === null || propFilters === void 0 ? void 0 : propFilters.length) && this.changes.showDefaultFilter !== false) {
7703
+ const type = this.resolveDraftFilterType(this.changes.defaultFilterType);
7704
+ if (type) {
7705
+ this.draftFilter = {
7706
+ id: ++this.filterId,
7707
+ type,
7708
+ value: '',
7709
+ relation: 'and',
7710
+ };
7711
+ }
7712
+ }
7696
7713
  }
7697
7714
  }
7698
7715
  async getChanges() {
@@ -7713,29 +7730,42 @@ class FilterPanel {
7713
7730
  const prop = (_a = this.changes) === null || _a === void 0 ? void 0 : _a.prop;
7714
7731
  if (prop === undefined)
7715
7732
  return '';
7716
- const propFilters = (_b = this.filterItems[prop]) !== null && _b !== void 0 ? _b : [];
7717
- const visibleFilterCount = propFilters.filter(filter => !filter.hidden).length;
7733
+ const propFilters = ((_b = this.filterItems[prop]) !== null && _b !== void 0 ? _b : []).map((filter, index) => ({
7734
+ filter,
7735
+ index,
7736
+ isDraft: false,
7737
+ }));
7738
+ if (this.draftFilter) {
7739
+ propFilters.push({
7740
+ filter: this.draftFilter,
7741
+ index: propFilters.length,
7742
+ isDraft: true,
7743
+ });
7744
+ }
7745
+ const visibleFilters = propFilters.filter(({ filter }) => !filter.hidden);
7746
+ const visibleFilterCount = visibleFilters.length;
7718
7747
  const capts = Object.assign(Object.assign({}, this.filterCaptionsInternal), this.filterCaptions);
7719
- return (hAsync("div", { key: this.filterId }, hAsync("ul", { class: "multi-filter-list-container" }, propFilters.map((filter, index) => {
7748
+ return (hAsync("div", { key: this.filterId }, hAsync("ul", { class: "multi-filter-list-container" }, propFilters.map(({ filter, index, isDraft }) => {
7749
+ var _a;
7720
7750
  let andOrButton;
7721
7751
  if (filter.hidden) {
7722
7752
  return;
7723
7753
  }
7724
7754
  // hide toggle button if there is only one filter and the last one
7725
- if (index !== this.filterItems[prop].length - 1) {
7755
+ if (((_a = visibleFilters[visibleFilterCount - 1]) === null || _a === void 0 ? void 0 : _a.filter.id) !== filter.id) {
7726
7756
  andOrButton = (hAsync(AndOrButton, { text: filter.relation === 'and' ? capts.and : capts.or, onClick: () => this.toggleFilterAndOr(filter.id) }));
7727
7757
  }
7728
- const extra = this.renderExtra(prop, index);
7758
+ const extra = this.renderExtra(prop, index, isDraft);
7729
7759
  const isDragging = this.draggedFilterId === filter.id;
7730
7760
  const isDragOver = this.dragOverFilterId === filter.id && !isDragging;
7731
- const canReorder = visibleFilterCount > 1;
7761
+ const canReorder = visibleFilterCount > 1 && !isDraft;
7732
7762
  return (hAsync("li", { key: filter.id, class: FILTER_LIST_CLASS, "aria-label": `${capts.filterCondition} ${index + 1}` }, hAsync("div", { class: {
7733
7763
  'multi-filter-list-row': true,
7734
7764
  'filter-row-drop-active': this.draggedFilterId !== undefined && !isDragging,
7735
7765
  'filter-row-dragging': isDragging,
7736
7766
  'filter-row-drag-over': isDragOver,
7737
- } }, 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) })))));
7738
- })), propFilters.some(f => !f.hidden) ? hAsync("div", { class: "add-filter-divider" }) : ''));
7767
+ } }, 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) })))));
7768
+ })), visibleFilterCount ? hAsync("div", { class: "add-filter-divider" }) : ''));
7739
7769
  }
7740
7770
  componentDidRender() {
7741
7771
  this.syncDialog();
@@ -7784,16 +7814,24 @@ class FilterPanel {
7784
7814
  el.style.left = `${left}px`;
7785
7815
  el.style.top = `${top}px`;
7786
7816
  }
7787
- onFilterTypeChange(e, prop, index) {
7817
+ onFilterTypeChange(e, prop, index, isDraft = false) {
7788
7818
  if (!(e.target instanceof HTMLSelectElement)) {
7789
7819
  return;
7790
7820
  }
7791
- this.filterItems[prop][index].type = e.target.value;
7821
+ const type = e.target.value;
7822
+ const filter = isDraft
7823
+ ? this.promoteDraft(prop, type)
7824
+ : this.filterItems[prop][index];
7825
+ if (!filter) {
7826
+ return;
7827
+ }
7828
+ filter.type = type;
7829
+ this.hasChanges = true;
7792
7830
  // this re-renders the input to know if we need extra input
7793
7831
  this.filterId++;
7794
7832
  // adding setTimeout will wait for the next tick DOM update then focus on input
7795
7833
  setTimeout(() => {
7796
- const input = document.getElementById('filter-input-' + this.filterItems[prop][index].id);
7834
+ const input = document.getElementById('filter-input-' + filter.id);
7797
7835
  if (input instanceof HTMLInputElement) {
7798
7836
  input.focus();
7799
7837
  }
@@ -7828,12 +7866,20 @@ class FilterPanel {
7828
7866
  return;
7829
7867
  this.filterId++;
7830
7868
  this.currentFilterId = this.filterId;
7831
- this.filterItems[prop].push({
7832
- id: this.currentFilterId,
7833
- type: this.currentFilterType,
7834
- value: '',
7835
- relation: 'and',
7836
- });
7869
+ if (this.draftFilter) {
7870
+ this.draftFilter.id = this.currentFilterId;
7871
+ this.draftFilter.type = this.currentFilterType;
7872
+ this.promoteDraft(prop);
7873
+ }
7874
+ else {
7875
+ this.filterItems[prop].push({
7876
+ id: this.currentFilterId,
7877
+ type: this.currentFilterType,
7878
+ value: '',
7879
+ relation: 'and',
7880
+ });
7881
+ this.hasChanges = true;
7882
+ }
7837
7883
  // adding setTimeout will wait for the next tick DOM update then focus on input
7838
7884
  setTimeout(() => {
7839
7885
  const input = document.getElementById('filter-input-' + this.currentFilterId);
@@ -7842,7 +7888,9 @@ class FilterPanel {
7842
7888
  }, 0);
7843
7889
  }
7844
7890
  onSave() {
7845
- this.filterChange.emit(this.filterItems);
7891
+ if (this.hasChanges) {
7892
+ this.emitFilterChange();
7893
+ }
7846
7894
  }
7847
7895
  onCancel() {
7848
7896
  this.changes = undefined;
@@ -7850,16 +7898,25 @@ class FilterPanel {
7850
7898
  onReset() {
7851
7899
  var _a;
7852
7900
  this.assertChanges();
7853
- this.resetChange.emit((_a = this.changes) === null || _a === void 0 ? void 0 : _a.prop);
7901
+ this.draftFilter = undefined;
7902
+ const prop = (_a = this.changes) === null || _a === void 0 ? void 0 : _a.prop;
7903
+ if (prop !== undefined) {
7904
+ delete this.filterItems[prop];
7905
+ }
7906
+ this.resetChange.emit(prop);
7854
7907
  // this updates the DOM which is used by getFilterItemsList() key
7855
7908
  this.filterId++;
7856
7909
  }
7857
7910
  onRemoveFilter(id) {
7858
- var _a;
7911
+ var _a, _b;
7859
7912
  this.assertChanges();
7860
7913
  // this is for reactivity issues for getFilterItemsList()
7861
7914
  this.filterId++;
7862
7915
  const prop = (_a = this.changes) === null || _a === void 0 ? void 0 : _a.prop;
7916
+ if (((_b = this.draftFilter) === null || _b === void 0 ? void 0 : _b.id) === id) {
7917
+ this.draftFilter = undefined;
7918
+ return;
7919
+ }
7863
7920
  const items = this.filterItems[prop !== null && prop !== void 0 ? prop : ''];
7864
7921
  if (!items)
7865
7922
  return;
@@ -7867,6 +7924,7 @@ class FilterPanel {
7867
7924
  if (index === -1)
7868
7925
  return;
7869
7926
  items.splice(index, 1);
7927
+ this.hasChanges = true;
7870
7928
  // let's remove the prop if no more filters so the filter icon will be removed
7871
7929
  if (items.length === 0)
7872
7930
  delete this.filterItems[prop !== null && prop !== void 0 ? prop : ''];
@@ -7908,6 +7966,7 @@ class FilterPanel {
7908
7966
  if (!moveFilterItem(items, sourceId, targetId)) {
7909
7967
  return;
7910
7968
  }
7969
+ this.hasChanges = true;
7911
7970
  this.filterId++;
7912
7971
  if (!this.disableDynamicFiltering) {
7913
7972
  this.debouncedApplyFilter();
@@ -7943,6 +8002,7 @@ class FilterPanel {
7943
8002
  if (!target || !moveFilterItem(items, sourceId, target.id)) {
7944
8003
  return;
7945
8004
  }
8005
+ this.hasChanges = true;
7946
8006
  this.filterId++;
7947
8007
  if (!this.disableDynamicFiltering) {
7948
8008
  this.debouncedApplyFilter();
@@ -7961,6 +8021,7 @@ class FilterPanel {
7961
8021
  if (index === -1)
7962
8022
  return;
7963
8023
  items[index].relation = items[index].relation === 'and' ? 'or' : 'and';
8024
+ this.hasChanges = true;
7964
8025
  if (!this.disableDynamicFiltering) {
7965
8026
  this.debouncedApplyFilter();
7966
8027
  }
@@ -8009,12 +8070,22 @@ class FilterPanel {
8009
8070
  }
8010
8071
  return options;
8011
8072
  }
8012
- renderExtra(prop, index) {
8013
- const currentFilter = this.filterItems[prop];
8073
+ renderExtra(prop, index, isDraft = false) {
8074
+ var _a, _b;
8075
+ const currentFilter = isDraft
8076
+ ? this.draftFilter
8077
+ : (_a = this.filterItems[prop]) === null || _a === void 0 ? void 0 : _a[index];
8014
8078
  if (!currentFilter)
8015
8079
  return '';
8016
8080
  const applyFilter = (value) => {
8017
- this.filterItems[prop][index].value = value;
8081
+ currentFilter.value = value;
8082
+ if (isDraft && !this.isMeaningfulDraftValue(value)) {
8083
+ return;
8084
+ }
8085
+ if (isDraft && !this.promoteDraft(prop)) {
8086
+ return;
8087
+ }
8088
+ this.hasChanges = true;
8018
8089
  if (!this.disableDynamicFiltering) {
8019
8090
  this.debouncedApplyFilter();
8020
8091
  }
@@ -8029,11 +8100,11 @@ class FilterPanel {
8029
8100
  }
8030
8101
  };
8031
8102
  const capts = Object.assign(Object.assign({}, this.filterCaptionsInternal), this.filterCaptions);
8032
- const extra = this.filterEntities[currentFilter[index].type].extra;
8103
+ const extra = (_b = this.filterEntities[currentFilter.type]) === null || _b === void 0 ? void 0 : _b.extra;
8033
8104
  if (typeof extra === 'function') {
8034
8105
  return extra(hAsync, {
8035
- value: currentFilter[index].value,
8036
- filter: currentFilter[index],
8106
+ value: currentFilter.value,
8107
+ filter: currentFilter,
8037
8108
  prop,
8038
8109
  index,
8039
8110
  placeholder: capts.placeholder,
@@ -8048,7 +8119,7 @@ class FilterPanel {
8048
8119
  if (extra !== 'input' && extra !== 'datepicker') {
8049
8120
  return '';
8050
8121
  }
8051
- return (hAsync("input", { id: `filter-input-${currentFilter[index].id}`, placeholder: capts.placeholder, type: extra === 'datepicker' ? 'date' : 'text', value: currentFilter[index].value, onInput: (e) => {
8122
+ return (hAsync("input", { id: `filter-input-${currentFilter.id}`, placeholder: capts.placeholder, type: extra === 'datepicker' ? 'date' : 'text', value: currentFilter.value, onInput: (e) => {
8052
8123
  if (e.target instanceof HTMLInputElement) {
8053
8124
  applyFilter(e.target.value);
8054
8125
  }
@@ -8064,6 +8135,42 @@ class FilterPanel {
8064
8135
  e.stopPropagation();
8065
8136
  } }));
8066
8137
  }
8138
+ resolveDraftFilterType(preferred) {
8139
+ var _a, _b;
8140
+ const available = Object.values((_b = (_a = this.changes) === null || _a === void 0 ? void 0 : _a.filterTypes) !== null && _b !== void 0 ? _b : {}).flat();
8141
+ const type = preferred && available.includes(preferred)
8142
+ ? preferred
8143
+ : available[0];
8144
+ return type;
8145
+ }
8146
+ promoteDraft(prop, type) {
8147
+ if (!this.draftFilter) {
8148
+ return;
8149
+ }
8150
+ if (!this.filterItems[prop]) {
8151
+ this.filterItems[prop] = [];
8152
+ }
8153
+ if (type) {
8154
+ this.draftFilter.type = type;
8155
+ }
8156
+ const filter = this.draftFilter;
8157
+ this.filterItems[prop].push(filter);
8158
+ this.draftFilter = undefined;
8159
+ this.hasChanges = true;
8160
+ return filter;
8161
+ }
8162
+ isMeaningfulDraftValue(value) {
8163
+ return value !== '' && value !== undefined && value !== null;
8164
+ }
8165
+ emitFilterChange() {
8166
+ this.filterChange.emit(this.cloneFilterItems(this.filterItems));
8167
+ }
8168
+ cloneFilterItems(filterItems) {
8169
+ return Object.fromEntries(Object.entries(filterItems).map(([prop, filters]) => [
8170
+ prop,
8171
+ filters.map(filter => (Object.assign({}, filter))),
8172
+ ]));
8173
+ }
8067
8174
  getAddFilterSelect() {
8068
8175
  return this.element.querySelector(`#${FILTER_ID}`);
8069
8176
  }
@@ -8096,7 +8203,7 @@ class FilterPanel {
8096
8203
  top: `${(_d = (_c = this.changes) === null || _c === void 0 ? void 0 : _c.y) !== null && _d !== void 0 ? _d : 0}px`,
8097
8204
  };
8098
8205
  const capts = Object.assign(Object.assign({}, this.filterCaptionsInternal), this.filterCaptions);
8099
- return (hAsync(Host, { key: 'd0e4ebb408750b11b3965da6a25e581733c968e3' }, hAsync("dialog", { key: '3df36777c931ec1063e8574169ca880a99dbfe41', class: "filter-panel-dialog", style: style, ref: el => (this.dialog = el), onCancel: e => {
8206
+ return (hAsync(Host, { key: '0bb6ac39407141e989b6a2f54063ee5ed789e40e' }, hAsync("dialog", { key: '28a919ca4184018e8f00bbd31d373e153306d163', class: "filter-panel-dialog", style: style, ref: el => (this.dialog = el), onCancel: e => {
8100
8207
  e.preventDefault();
8101
8208
  this.onCancel();
8102
8209
  } }, this.changes && [
@@ -8105,7 +8212,7 @@ class FilterPanel {
8105
8212
  ((_g = this.changes) === null || _g === void 0 ? void 0 : _g.hideDefaultFilters) !== true && [
8106
8213
  hAsync("label", { key: "filter-title" }, capts.title),
8107
8214
  hAsync("div", { key: "filter-holder", class: "filter-holder" }, this.getFilterItemsList()),
8108
- 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))),
8215
+ 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))),
8109
8216
  ],
8110
8217
  hAsync("slot", { key: "default-slot" }),
8111
8218
  ((_j = (_h = this.changes).extraBottomContent) === null || _j === void 0 ? void 0 : _j.call(_h, this.changes)) || '',
@@ -8137,6 +8244,7 @@ class FilterPanel {
8137
8244
  "currentFilterType": [32],
8138
8245
  "changes": [32],
8139
8246
  "filterItems": [32],
8247
+ "draftFilter": [32],
8140
8248
  "draggedFilterId": [32],
8141
8249
  "dragOverFilterId": [32],
8142
8250
  "show": [64],
@@ -13077,6 +13185,7 @@ const GROUP_COLUMN_PROP = `${GRID_INTERNALS}-prop`;
13077
13185
  const GROUP_ORIGINAL_INDEX = `${GRID_INTERNALS}-original-index`;
13078
13186
  const GROUP_EXPAND_BTN = `group-expand`;
13079
13187
  const GROUP_EXPAND_EVENT = `groupexpandclick`;
13188
+ const BEFORE_GROUPING_APPLY_EVENT = `beforegroupingapply`;
13080
13189
  const GROUPING_ROW_TYPE = 'rgRow';
13081
13190
 
13082
13191
  function getGroupValueDefault(item, prop, emptyGroupValue) {
@@ -15373,7 +15482,9 @@ function isVirtualXDimension(type, disableVirtualX = false, virtualX = DEFAULT_V
15373
15482
  class DimensionProvider {
15374
15483
  constructor(viewports, config) {
15375
15484
  this.viewports = viewports;
15376
- const sizeChanged = debounce$1((k) => config.realSizeChanged(k), RESIZE_INTERVAL);
15485
+ this.config = config;
15486
+ this.rowDefinitions = [];
15487
+ const sizeChanged = debounce$1((k) => this.config.realSizeChanged(k), RESIZE_INTERVAL);
15377
15488
  this.stores = [...rowTypes, ...columnTypes].reduce((sources, t) => {
15378
15489
  sources[t] = new DimensionStore(t);
15379
15490
  sources[t].store.onChange('realSize', () => sizeChanged(t));
@@ -15391,6 +15502,20 @@ class DimensionProvider {
15391
15502
  this.viewports.stores[t].setOriginalSizes(this.stores[t].store.get('originItemSize'));
15392
15503
  this.setItemCount(count, t);
15393
15504
  }
15505
+ getRowDefinitions() {
15506
+ return this.rowDefinitions;
15507
+ }
15508
+ syncRowDefinitions(definitions) {
15509
+ this.rowDefinitions = definitions;
15510
+ }
15511
+ setRowDefinitions(definitions) {
15512
+ var _a, _b;
15513
+ if (definitions === this.rowDefinitions) {
15514
+ return;
15515
+ }
15516
+ this.syncRowDefinitions(definitions);
15517
+ (_b = (_a = this.config).rowDefinitionsChanged) === null || _b === void 0 ? void 0 : _b.call(_a, definitions);
15518
+ }
15394
15519
  /**
15395
15520
  * Apply new custom sizes to dimension and view port
15396
15521
  * @param type - dimension type
@@ -16375,6 +16500,11 @@ const filterTypes = {
16375
16500
  boolean: ['notEmpty', 'empty'],
16376
16501
  array: ['notEmpty', 'empty'],
16377
16502
  };
16503
+ /** Preferred initial operator for built-in filter families. */
16504
+ const filterTypeDefaults = {
16505
+ string: 'contains',
16506
+ number: 'eqN',
16507
+ };
16378
16508
  const filterNames = {
16379
16509
  none: 'None',
16380
16510
  empty: 'Is blank',
@@ -16417,6 +16547,8 @@ const FILTE_PANEL = 'revogr-filter-panel';
16417
16547
  *
16418
16548
  * @property {FilterLocalization|undefined} localization - translation for filter popup captions.
16419
16549
  *
16550
+ * @property {boolean|undefined} defaultFilter - creates a draft condition when an empty filter panel opens. Defaults to true.
16551
+ *
16420
16552
  * @property {boolean|undefined} disableDynamicFiltering - disables dynamic filtering. A way to apply filters on Save only.
16421
16553
  */
16422
16554
  /**
@@ -16438,7 +16570,7 @@ class FilterPlugin extends BasePlugin {
16438
16570
  * number: ['eqN', 'neqN', 'gt']
16439
16571
  * }
16440
16572
  */
16441
- this.filterByType = Object.assign({}, filterTypes);
16573
+ this.filterByType = Object.fromEntries(Object.entries(filterTypes).map(([type, filters]) => [type, [...filters]]));
16442
16574
  this.filterNameIndexByType = Object.assign({}, filterNames);
16443
16575
  this.filterFunctionsIndexedByType = Object.assign({}, filterCoreFunctionsIndexedByType);
16444
16576
  this.filterProp = FILTER_PROP;
@@ -16522,11 +16654,16 @@ class FilterPlugin extends BasePlugin {
16522
16654
  return null;
16523
16655
  }
16524
16656
  initConfig(config) {
16525
- var _a;
16657
+ var _a, _b, _c, _d;
16526
16658
  this.config = config;
16527
16659
  this.allowDuplicateOperators = (_a = config.allowDuplicateOperators) !== null && _a !== void 0 ? _a : true;
16528
16660
  if (this.pop) {
16529
16661
  this.pop.allowDuplicateOperators = this.allowDuplicateOperators;
16662
+ this.pop.disableDynamicFiltering =
16663
+ (_b = config.disableDynamicFiltering) !== null && _b !== void 0 ? _b : false;
16664
+ this.pop.closeOnOutsideClick =
16665
+ (_c = config.closeFilterPanelOnOutsideClick) !== null && _c !== void 0 ? _c : true;
16666
+ this.pop.filterCaptions = (_d = config.localization) === null || _d === void 0 ? void 0 : _d.captions;
16530
16667
  }
16531
16668
  if (config.multiFilterItems) {
16532
16669
  this.multiFilterItems = Object.assign({}, config.multiFilterItems);
@@ -16615,11 +16752,12 @@ class FilterPlugin extends BasePlugin {
16615
16752
  }
16616
16753
  // filter button clicked, open filter dialog
16617
16754
  const buttonPos = (filterButton instanceof HTMLElement ? filterButton : el).getBoundingClientRect();
16618
- 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 });
16755
+ 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 });
16619
16756
  (_b = this.beforeshow) === null || _b === void 0 ? void 0 : _b.call(this, data);
16620
16757
  this.pop.show(data);
16621
16758
  }
16622
- getColumnFilter(type) {
16759
+ getColumnFilter(config) {
16760
+ const type = this.isColumnFilterOption(config) ? config.type : config;
16623
16761
  let filterType = 'string';
16624
16762
  if (!type) {
16625
16763
  return { [filterType]: this.filterByType[filterType] };
@@ -16639,6 +16777,41 @@ class FilterPlugin extends BasePlugin {
16639
16777
  }
16640
16778
  return { [filterType]: this.filterByType[filterType] };
16641
16779
  }
16780
+ /** Resolve the preferred operator against the column's available filters. */
16781
+ getDefaultFilter(config) {
16782
+ var _a;
16783
+ const filters = this.getColumnFilter(config);
16784
+ const availableFilters = Object.values(filters).flat();
16785
+ const columnDefault = this.isColumnFilterOption(config)
16786
+ ? config.default
16787
+ : undefined;
16788
+ if (typeof columnDefault === 'string' &&
16789
+ availableFilters.includes(columnDefault)) {
16790
+ return columnDefault;
16791
+ }
16792
+ const firstFamily = Object.keys(filters)[0];
16793
+ const familyDefault = filterTypeDefaults[firstFamily];
16794
+ if (familyDefault && ((_a = filters[firstFamily]) === null || _a === void 0 ? void 0 : _a.includes(familyDefault))) {
16795
+ return familyDefault;
16796
+ }
16797
+ return availableFilters[0];
16798
+ }
16799
+ /** Resolve grid and column-level draft opt-outs. */
16800
+ shouldShowDefaultFilter(config) {
16801
+ var _a;
16802
+ if (this.isColumnFilterOption(config)) {
16803
+ if (config.default === false) {
16804
+ return false;
16805
+ }
16806
+ if (typeof config.default === 'string') {
16807
+ return true;
16808
+ }
16809
+ }
16810
+ return ((_a = this.config) === null || _a === void 0 ? void 0 : _a.defaultFilter) !== false;
16811
+ }
16812
+ isColumnFilterOption(value) {
16813
+ return !!value && typeof value === 'object' && !Array.isArray(value);
16814
+ }
16642
16815
  isValidType(type) {
16643
16816
  return !!(typeof type === 'string' && this.filterByType[type]);
16644
16817
  }
@@ -16921,6 +17094,60 @@ function allAndConditionsSatisfied(pendingResults) {
16921
17094
  return !pendingResults.includes(true);
16922
17095
  }
16923
17096
 
17097
+ /**
17098
+ * Restores group headers around already-sorted data indexes without rebuilding
17099
+ * the physical source. Group insertion order follows the first sorted member,
17100
+ * matching the order produced by regrouping a sorted source.
17101
+ */
17102
+ function gatherGroupedRowIndexes(source, sortedDataIndexes) {
17103
+ const groupPathByDataIndex = new Map();
17104
+ const currentGroupPath = [];
17105
+ source.forEach((model, physicalIndex) => {
17106
+ if (isGrouping(model)) {
17107
+ const depth = model[GROUP_DEPTH];
17108
+ if (typeof depth !== 'number') {
17109
+ return;
17110
+ }
17111
+ currentGroupPath.length = depth;
17112
+ currentGroupPath[depth] = physicalIndex;
17113
+ return;
17114
+ }
17115
+ if (model != null) {
17116
+ groupPathByDataIndex.set(physicalIndex, [...currentGroupPath]);
17117
+ }
17118
+ });
17119
+ const root = {
17120
+ children: new Map(),
17121
+ items: [],
17122
+ };
17123
+ for (const physicalIndex of sortedDataIndexes) {
17124
+ const groupPath = groupPathByDataIndex.get(physicalIndex);
17125
+ if (!(groupPath === null || groupPath === void 0 ? void 0 : groupPath.length)) {
17126
+ return undefined;
17127
+ }
17128
+ let node = root;
17129
+ for (const groupIndex of groupPath) {
17130
+ let child = node.children.get(groupIndex);
17131
+ if (!child) {
17132
+ child = { children: new Map(), items: [] };
17133
+ node.children.set(groupIndex, child);
17134
+ }
17135
+ node = child;
17136
+ }
17137
+ node.items.push(physicalIndex);
17138
+ }
17139
+ const groupedIndexes = [];
17140
+ const appendNode = (node) => {
17141
+ node.children.forEach((child, groupIndex) => {
17142
+ groupedIndexes.push(groupIndex);
17143
+ appendNode(child);
17144
+ });
17145
+ groupedIndexes.push(...node.items);
17146
+ };
17147
+ appendNode(root);
17148
+ return groupedIndexes;
17149
+ }
17150
+
16924
17151
  /**
16925
17152
  * Checks whether a sorting map contains at least one active order.
16926
17153
  *
@@ -17169,18 +17396,6 @@ const SortingSign = ({ column }) => {
17169
17396
  function getSortableRowIndexes(indexes, source) {
17170
17397
  return indexes.filter(index => !isGrouping(source[index]));
17171
17398
  }
17172
- function mergeSortedRowsWithGroups(indexes, source, sortedRows) {
17173
- if (sortedRows.length === indexes.length) {
17174
- return sortedRows;
17175
- }
17176
- let rowIndex = 0;
17177
- return indexes.map(index => {
17178
- if (isGrouping(source[index])) {
17179
- return index;
17180
- }
17181
- return sortedRows[rowIndex++];
17182
- });
17183
- }
17184
17399
  /**
17185
17400
  * Lifecycle
17186
17401
  * 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.
@@ -17340,6 +17555,7 @@ class SortingPlugin extends BasePlugin {
17340
17555
  storeService.setData({ proxyItems: newItemsOrder });
17341
17556
  }
17342
17557
  applySortingForStore(type, sorting, sortingFunc, sortingColumns, sortingOrder, ignoreViewportUpdate) {
17558
+ var _a;
17343
17559
  const storeService = this.providers.data.stores[type];
17344
17560
  // row data
17345
17561
  const source = storeService.store.get('source');
@@ -17347,7 +17563,10 @@ class SortingPlugin extends BasePlugin {
17347
17563
  const proxyItems = storeService.store.get('proxyItems');
17348
17564
  const sortItems = getSortableRowIndexes(proxyItems, source);
17349
17565
  const sortedItems = sortIndexByItems([...sortItems], source, sortingFunc, sorting, sortingColumns, sortingOrder);
17350
- const newItemsOrder = mergeSortedRowsWithGroups(proxyItems, source, sortedItems);
17566
+ const hasGroupingRows = sortedItems.length !== proxyItems.length;
17567
+ const newItemsOrder = hasGroupingRows
17568
+ ? (_a = gatherGroupedRowIndexes(source, sortedItems)) !== null && _a !== void 0 ? _a : proxyItems
17569
+ : sortedItems;
17351
17570
  // take row indexes before trim applied and proxy items
17352
17571
  const prevItems = storeService.store.get('items');
17353
17572
  storeService.setData({
@@ -17373,6 +17592,16 @@ class SortingPlugin extends BasePlugin {
17373
17592
  }
17374
17593
  this.postponeSort(order, sortingFunc, sortingColumns, sortingOrder, ignoreViewportUpdate);
17375
17594
  }
17595
+ /**
17596
+ * Schedules the current active sort again after another plugin rebuilds row
17597
+ * proxy indexes while keeping the physical source unchanged.
17598
+ */
17599
+ reapplySorting() {
17600
+ if (!hasActiveSorting(this.sorting) || !this.sortingFunc) {
17601
+ return;
17602
+ }
17603
+ this.startSorting(this.sorting, this.sortingFunc, this.sortingColumns, this.sortingOrder);
17604
+ }
17376
17605
  /**
17377
17606
  * Applies sorting requested by a sortable header click.
17378
17607
  *
@@ -17891,8 +18120,10 @@ const TRIMMED_GROUPING = 'grouping';
17891
18120
  * against the grouped physical source can still be remapped. If neither path
17892
18121
  * resolves to a number, the caller drops the stale trim entry.
17893
18122
  */
17894
- function convertTrimmedIndex(initialIndex, firstLevelMap, secondLevelMap) {
17895
- const sourceIndex = Number.parseInt(initialIndex, 10);
18123
+ function convertGroupingIndex(initialIndex, firstLevelMap, secondLevelMap) {
18124
+ const sourceIndex = typeof initialIndex === 'number'
18125
+ ? initialIndex
18126
+ : Number.parseInt(initialIndex, 10);
17896
18127
  const firstConversionIndex = firstLevelMap[sourceIndex];
17897
18128
  if (!secondLevelMap) {
17898
18129
  return firstConversionIndex;
@@ -17925,7 +18156,7 @@ function processDoubleConversionTrimmed(initiallyTrimed, firstLevelMap, secondLe
17925
18156
  * if item exists we find it in collection
17926
18157
  * we support 2 level of conversions
17927
18158
  */
17928
- const newConversionIndex = convertTrimmedIndex(initialIndex, firstLevelMap, secondLevelMap);
18159
+ const newConversionIndex = convertGroupingIndex(initialIndex, firstLevelMap, secondLevelMap);
17929
18160
  // Group rows do not exist in the ungrouped index map and must not leak into new trims.
17930
18161
  if (typeof newConversionIndex !== 'number') {
17931
18162
  continue;
@@ -17986,7 +18217,7 @@ function filterOutEmptyGroupRows(source, filterTrimmed) {
17986
18217
  return trimmed;
17987
18218
  }
17988
18219
 
17989
- var __rest$1 = (undefined && undefined.__rest) || function (s, e) {
18220
+ var __rest = (undefined && undefined.__rest) || function (s, e) {
17990
18221
  var t = {};
17991
18222
  for (var p in s)
17992
18223
  if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
@@ -18000,7 +18231,7 @@ var __rest$1 = (undefined && undefined.__rest) || function (s, e) {
18000
18231
  };
18001
18232
  const PADDING_DEPTH = 10;
18002
18233
  const RowRenderer = (_a, cells) => {
18003
- var { rowClass, index, size, start, depth, groupingLevel } = _a, attrs = __rest$1(_a, ["rowClass", "index", "size", "start", "depth", "groupingLevel"]);
18234
+ var { rowClass, index, size, start, depth, groupingLevel } = _a, attrs = __rest(_a, ["rowClass", "index", "size", "start", "depth", "groupingLevel"]);
18004
18235
  const props = Object.assign(Object.assign(Object.assign({}, attrs), { [DATA_ROW]: index }), (typeof groupingLevel === 'number'
18005
18236
  ? { 'data-level': groupingLevel }
18006
18237
  : {}));
@@ -18100,18 +18331,6 @@ const expandSvgIconVNode = (expanded = false) => {
18100
18331
  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" })));
18101
18332
  };
18102
18333
 
18103
- var __rest = (undefined && undefined.__rest) || function (s, e) {
18104
- var t = {};
18105
- for (var p in s)
18106
- if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
18107
- t[p] = s[p];
18108
- if (s != null && typeof Object.getOwnPropertySymbols === "function")
18109
- for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
18110
- if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
18111
- t[p[i]] = s[p[i]];
18112
- }
18113
- return t;
18114
- };
18115
18334
  class GroupingRowPlugin extends BasePlugin {
18116
18335
  getStore(type = GROUPING_ROW_TYPE) {
18117
18336
  return this.providers.data.stores[type].store;
@@ -18127,15 +18346,16 @@ class GroupingRowPlugin extends BasePlugin {
18127
18346
  }
18128
18347
  // expand event triggered
18129
18348
  onExpand({ virtualIndex }) {
18130
- const { source } = getSource(this.getStore().get('source'), this.getStore().get('proxyItems'));
18131
- let newTrimmed = this.getStore().get('trimmed')[TRIMMED_GROUPING];
18132
- let i = getPhysical(this.getStore(), virtualIndex);
18349
+ const store = this.getStore();
18350
+ const source = store.get('source');
18351
+ let newTrimmed = store.get('trimmed')[TRIMMED_GROUPING];
18352
+ const i = getPhysical(store, virtualIndex);
18133
18353
  const isExpanded = getExpanded(source[i]);
18134
18354
  if (!isExpanded) {
18135
- const { trimmed, items } = doExpand(virtualIndex, source, this.getStore().get('items'));
18355
+ const { trimmed, items: expandedItems } = doExpand(virtualIndex, source, store.get('items'));
18136
18356
  newTrimmed = Object.assign(Object.assign({}, newTrimmed), trimmed);
18137
- if (items) {
18138
- setItems(this.getStore(), items);
18357
+ if (expandedItems) {
18358
+ setItems(store, expandedItems);
18139
18359
  }
18140
18360
  }
18141
18361
  else {
@@ -18143,7 +18363,7 @@ class GroupingRowPlugin extends BasePlugin {
18143
18363
  newTrimmed = Object.assign(Object.assign({}, newTrimmed), trimmed);
18144
18364
  this.revogrid.clearFocus();
18145
18365
  }
18146
- this.getStore().set('source', source);
18366
+ store.set('source', source);
18147
18367
  this.revogrid.addTrimmed(newTrimmed, TRIMMED_GROUPING);
18148
18368
  }
18149
18369
  setColumnGrouping(cols) {
@@ -18165,7 +18385,7 @@ class GroupingRowPlugin extends BasePlugin {
18165
18385
  onDrag(e) {
18166
18386
  const { from, to } = e.detail;
18167
18387
  const isDown = to - from >= 0;
18168
- const { source } = getSource(this.getStore().get('source'), this.getStore().get('proxyItems'));
18388
+ const source = this.getStore().get('source');
18169
18389
  const items = this.getStore().get('items');
18170
18390
  let i = isDown ? from : to;
18171
18391
  const end = isDown ? to : from;
@@ -18191,21 +18411,13 @@ class GroupingRowPlugin extends BasePlugin {
18191
18411
  const source = this.getStore().get('source');
18192
18412
  return filterOutEmptyGroupRows(source, trimmed);
18193
18413
  }
18194
- isSortingRunning() {
18195
- const sortingPlugin = this.providers.plugins.getByClass(SortingPlugin);
18196
- return !!(sortingPlugin === null || sortingPlugin === void 0 ? void 0 : sortingPlugin.sortingPromise);
18197
- }
18198
18414
  /**
18199
- * Returns grouping options for regrouping that must preserve current UI state.
18200
- *
18201
- * `expandedAll` and config `prevExpanded` are initial/config instructions.
18202
- * Reusing them after sorting would reopen groups the user collapsed before
18203
- * sorting instead of using the current grouped source state.
18415
+ * Sorting changes proxy order without changing the physical source baseline.
18416
+ * Other proxy changes, such as row dragging, are user-authored source order
18417
+ * and must be retained when grouping is rebuilt.
18204
18418
  */
18205
- getCurrentExpandedOptions() {
18206
- var _a;
18207
- const _b = (_a = this.options) !== null && _a !== void 0 ? _a : {}, options = __rest(_b, ["expandedAll", "prevExpanded"]);
18208
- return options;
18419
+ isSortingActiveOrPending(sortingPlugin) {
18420
+ return !!(sortingPlugin === null || sortingPlugin === void 0 ? void 0 : sortingPlugin.sortingPromise) || hasActiveSorting(sortingPlugin === null || sortingPlugin === void 0 ? void 0 : sortingPlugin.sorting);
18209
18421
  }
18210
18422
  /**
18211
18423
  * Starts global source update with group clearing and applying new one
@@ -18218,7 +18430,12 @@ class GroupingRowPlugin extends BasePlugin {
18218
18430
  * @param newOldIndexMap - provides us mapping with new indexes vs old indexes, we would use it for trimmed mapping
18219
18431
  */
18220
18432
  const store = this.getStore();
18221
- const { source, prevExpanded, oldNewIndexes } = getSource(store.get('source'), store.get('proxyItems'), true);
18433
+ const sortingPlugin = this.providers.plugins.getByClass(SortingPlugin);
18434
+ const currentSource = store.get('source');
18435
+ const sourceItems = this.isSortingActiveOrPending(sortingPlugin)
18436
+ ? currentSource.map((_, index) => index)
18437
+ : store.get('proxyItems');
18438
+ const { source, prevExpanded, oldNewIndexes } = getSource(currentSource, sourceItems, true);
18222
18439
  const expanded = Object.assign({ prevExpanded }, options);
18223
18440
  /**
18224
18441
  * Group again
@@ -18228,8 +18445,13 @@ class GroupingRowPlugin extends BasePlugin {
18228
18445
  const customRenderer = options === null || options === void 0 ? void 0 : options.groupLabelTemplate;
18229
18446
  const cellRenderer = options === null || options === void 0 ? void 0 : options.groupCellTemplate;
18230
18447
  // setup source
18448
+ this.revogrid.dispatchEvent(new CustomEvent(BEFORE_GROUPING_APPLY_EVENT));
18231
18449
  this.providers.data.setData(sourceWithGroups, GROUPING_ROW_TYPE, this.revogrid.disableVirtualY, { depth, customRenderer, cellRenderer }, true);
18450
+ this.remapRowDefinitions(oldNewIndexes !== null && oldNewIndexes !== void 0 ? oldNewIndexes : {}, oldNewIndexMap, currentSource, sourceWithGroups);
18232
18451
  this.updateTrimmed(trimmed, oldNewIndexes !== null && oldNewIndexes !== void 0 ? oldNewIndexes : {}, oldNewIndexMap, sourceWithGroups);
18452
+ if (hasActiveSorting(sortingPlugin === null || sortingPlugin === void 0 ? void 0 : sortingPlugin.sorting)) {
18453
+ sortingPlugin === null || sortingPlugin === void 0 ? void 0 : sortingPlugin.reapplySorting();
18454
+ }
18233
18455
  }
18234
18456
  /**
18235
18457
  * Apply grouping on data set
@@ -18238,9 +18460,14 @@ class GroupingRowPlugin extends BasePlugin {
18238
18460
  */
18239
18461
  onDataSet(data) {
18240
18462
  var _a, _b, _c;
18463
+ const currentSource = this.getStore().get('source');
18464
+ const sortingPlugin = this.providers.plugins.getByClass(SortingPlugin);
18465
+ const currentItems = this.isSortingActiveOrPending(sortingPlugin)
18466
+ ? currentSource.map((_, index) => index)
18467
+ : this.getStore().get('proxyItems');
18468
+ const { prevExpanded, oldNewIndexes } = getSource(currentSource, currentItems, true);
18241
18469
  let preservedExpanded = {};
18242
18470
  if (((_a = this.options) === null || _a === void 0 ? void 0 : _a.preserveGroupingOnUpdate) !== false) {
18243
- let { prevExpanded } = getSource(this.getStore().get('source'), this.getStore().get('proxyItems'), true);
18244
18471
  preservedExpanded = prevExpanded;
18245
18472
  }
18246
18473
  const source = data.source.filter(s => !isGrouping(s));
@@ -18252,6 +18479,7 @@ class GroupingRowPlugin extends BasePlugin {
18252
18479
  customRenderer: options.groupLabelTemplate,
18253
18480
  cellRenderer: options.groupCellTemplate,
18254
18481
  });
18482
+ queueMicrotask(() => this.remapRowDefinitions(oldNewIndexes !== null && oldNewIndexes !== void 0 ? oldNewIndexes : {}, oldNewIndexMap, currentSource, sourceWithGroups));
18255
18483
  this.updateTrimmed(trimmed, oldNewIndexMap, undefined, sourceWithGroups, { filterTrimmedMode: 'recompute-after-source-set' });
18256
18484
  }
18257
18485
  /**
@@ -18287,10 +18515,6 @@ class GroupingRowPlugin extends BasePlugin {
18287
18515
  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))) {
18288
18516
  return;
18289
18517
  }
18290
- // if sorting is running don't apply grouping, wait for sorting, then it'll apply in @aftersortingapply
18291
- if (this.isSortingRunning()) {
18292
- return;
18293
- }
18294
18518
  this.onDataSet(detail);
18295
18519
  });
18296
18520
  this.addEventListener('beforecolumnsset', ({ detail }) => {
@@ -18305,17 +18529,6 @@ class GroupingRowPlugin extends BasePlugin {
18305
18529
  this.addEventListener('beforefiltertrimmed', ({ detail }) => {
18306
18530
  detail.itemsToFilter = this.beforeFilterTrimmed(detail.itemsToFilter);
18307
18531
  });
18308
- /**
18309
- * sorting applied need to clear grouping and apply again
18310
- * based on new results whole grouping order will changed
18311
- */
18312
- this.addEventListener('aftersortingapply', () => {
18313
- var _a, _b;
18314
- if (!((_b = (_a = this.options) === null || _a === void 0 ? void 0 : _a.props) === null || _b === void 0 ? void 0 : _b.length)) {
18315
- return;
18316
- }
18317
- this.doSourceUpdate(this.getCurrentExpandedOptions());
18318
- });
18319
18532
  /**
18320
18533
  * Apply logic for focus inside of grouping
18321
18534
  * We can't focus on grouping rows, navigation only inside of groups for now
@@ -18348,9 +18561,57 @@ class GroupingRowPlugin extends BasePlugin {
18348
18561
  }
18349
18562
  });
18350
18563
  // clear rows
18351
- const { source, oldNewIndexes } = getSource(this.getStore().get('source'), this.getStore().get('proxyItems'), true);
18564
+ const store = this.getStore();
18565
+ const sortingPlugin = this.providers.plugins.getByClass(SortingPlugin);
18566
+ const currentSource = store.get('source');
18567
+ const sourceItems = this.isSortingActiveOrPending(sortingPlugin)
18568
+ ? currentSource.map((_, index) => index)
18569
+ : store.get('proxyItems');
18570
+ const { source, oldNewIndexes } = getSource(currentSource, sourceItems, true);
18571
+ this.revogrid.dispatchEvent(new CustomEvent(BEFORE_GROUPING_APPLY_EVENT));
18352
18572
  this.providers.data.setData(source, GROUPING_ROW_TYPE, this.revogrid.disableVirtualY, undefined, true);
18573
+ this.remapRowDefinitions(oldNewIndexes !== null && oldNewIndexes !== void 0 ? oldNewIndexes : {}, undefined, currentSource, source);
18353
18574
  this.updateTrimmed(undefined, undefined, oldNewIndexes, source);
18575
+ if (hasActiveSorting(sortingPlugin === null || sortingPlugin === void 0 ? void 0 : sortingPlugin.sorting)) {
18576
+ sortingPlugin === null || sortingPlugin === void 0 ? void 0 : sortingPlugin.reapplySorting();
18577
+ }
18578
+ }
18579
+ remapRowDefinitions(firstLevelMap, secondLevelMap, previousSource, nextSource) {
18580
+ const definitions = this.providers.dimension.getRowDefinitions();
18581
+ const nextGroupIndexes = new Map();
18582
+ nextSource === null || nextSource === void 0 ? void 0 : nextSource.forEach((row, index) => {
18583
+ const groupId = row[PSEUDO_GROUP_ITEM_ID];
18584
+ if (groupId && !nextGroupIndexes.has(groupId)) {
18585
+ nextGroupIndexes.set(groupId, index);
18586
+ }
18587
+ });
18588
+ let changed = false;
18589
+ const remapped = definitions.flatMap(definition => {
18590
+ if (definition.type !== GROUPING_ROW_TYPE) {
18591
+ return [definition];
18592
+ }
18593
+ const previousRow = previousSource === null || previousSource === void 0 ? void 0 : previousSource[definition.index];
18594
+ const groupId = previousRow === null || previousRow === void 0 ? void 0 : previousRow[PSEUDO_GROUP_ITEM_ID];
18595
+ const index = groupId
18596
+ ? nextGroupIndexes.get(groupId)
18597
+ : convertGroupingIndex(definition.index, firstLevelMap, secondLevelMap);
18598
+ if (typeof index !== 'number') {
18599
+ changed = true;
18600
+ return [];
18601
+ }
18602
+ if (index < 0) {
18603
+ changed = true;
18604
+ return [];
18605
+ }
18606
+ if (index === definition.index) {
18607
+ return [definition];
18608
+ }
18609
+ changed = true;
18610
+ return [Object.assign(Object.assign({}, definition), { index })];
18611
+ });
18612
+ if (changed) {
18613
+ this.providers.dimension.setRowDefinitions(remapped);
18614
+ }
18354
18615
  }
18355
18616
  updateTrimmed(trimmedGroup = {}, firstLevelMap = {}, secondLevelMap, source = this.getStore().get('source'), { filterTrimmedMode = 'remap', } = {}) {
18356
18617
  // map previously trimmed data
@@ -19202,19 +19463,6 @@ const rowDefinitionByType = (newVal = []) => {
19202
19463
  }
19203
19464
  return result;
19204
19465
  };
19205
- const rowDefinitionRemoveByType = (oldVal = []) => {
19206
- const result = {};
19207
- for (const v of oldVal) {
19208
- let rowDefs = result[v.type];
19209
- if (!rowDefs) {
19210
- rowDefs = result[v.type] = [];
19211
- }
19212
- if (typeof v.size === 'number') {
19213
- rowDefs.push(v.index);
19214
- }
19215
- }
19216
- return result;
19217
- };
19218
19466
 
19219
19467
  const COLUMN_DRAG_CLASS = 'column-drag-start';
19220
19468
  class ColumnOrderHandler {
@@ -19774,6 +20022,7 @@ function isMobileDevice() {
19774
20022
  return /Mobi/i.test(navigator.userAgent) || /Android/i.test(navigator.userAgent) || navigator.maxTouchPoints > 0;
19775
20023
  }
19776
20024
 
20025
+ const toAriaIndex = (index) => `${index + 1}`;
19777
20026
  /**
19778
20027
  * WCAG Plugin is responsible for enhancing the accessibility features of the RevoGrid component.
19779
20028
  * It ensures that the grid is fully compliant with Web Content Accessibility Guidelines (WCAG) 2.1.
@@ -19817,14 +20066,14 @@ class WCAGPlugin extends BasePlugin {
19817
20066
  column.columnProperties = (...args) => {
19818
20067
  const result = (columnProperties === null || columnProperties === void 0 ? void 0 : columnProperties(...args)) || {};
19819
20068
  result.role = 'columnheader';
19820
- result['aria-colindex'] = `${index}`;
20069
+ result['aria-colindex'] = toAriaIndex(index);
19821
20070
  return result;
19822
20071
  };
19823
20072
  column.cellProperties = (...args) => {
19824
20073
  const wcagProps = {
19825
20074
  ['role']: 'gridcell',
19826
- ['aria-colindex']: `${index}`,
19827
- ['aria-rowindex']: `${args[0].rowIndex}`,
20075
+ ['aria-colindex']: toAriaIndex(index),
20076
+ ['aria-rowindex']: toAriaIndex(args[0].rowIndex),
19828
20077
  ['tabindex']: -1,
19829
20078
  };
19830
20079
  const columnProps = (cellProperties === null || cellProperties === void 0 ? void 0 : cellProperties(...args)) || {};
@@ -19839,7 +20088,7 @@ class WCAGPlugin extends BasePlugin {
19839
20088
  revogrid.setAttribute('aria-rowcount', `${detail.source.length}`);
19840
20089
  });
19841
20090
  this.addEventListener('beforerowrender', ({ detail, }) => {
19842
- detail.node.$attrs$ = Object.assign(Object.assign({}, detail.node.$attrs$), { role: 'row', ['aria-rowindex']: detail.item.itemIndex });
20091
+ detail.node.$attrs$ = Object.assign(Object.assign({}, detail.node.$attrs$), { role: 'row', ['aria-rowindex']: toAriaIndex(detail.item.itemIndex) });
19843
20092
  });
19844
20093
  // focuscell
19845
20094
  this.addEventListener('afterfocus', async (e) => {
@@ -20097,18 +20346,14 @@ const ROW_RESIZE_EVENT = 'rowresize';
20097
20346
  const AFTER_ROW_RESIZE_EVENT = 'afterrowresize';
20098
20347
  const ROW_RESIZE_CANCEL_EVENT = 'rowresizecancel';
20099
20348
  class RowResizePlugin extends BasePlugin {
20100
- static fromGridProperty(revogrid, providers) {
20101
- const plugin = new RowResizePlugin(revogrid, providers);
20102
- plugin.controlFromGridProperty();
20103
- return plugin;
20104
- }
20105
20349
  constructor(revogrid, providers, config = {}) {
20106
20350
  super(revogrid, providers);
20107
20351
  this.enabled = false;
20108
- this.gridResizeRow = false;
20109
- this.gridPlugins = [];
20110
- this.committedSizes = new Map();
20111
- this.appliedIndexes = new Map();
20352
+ this.appliedDefinitionIndexes = new Map();
20353
+ this.pendingBottomAnchor = false;
20354
+ this.keepBottomAnchor = false;
20355
+ this.rowDefinitionRemapQueued = false;
20356
+ this.pendingSourceCounts = new Map();
20112
20357
  this.previousBodyCursor = '';
20113
20358
  this.decorateRow = ({ detail, }) => {
20114
20359
  if (!this.enabled ||
@@ -20172,22 +20417,72 @@ class RowResizePlugin extends BasePlugin {
20172
20417
  }
20173
20418
  };
20174
20419
  this.onWindowBlur = () => this.cancel('blur');
20175
- this.reapplyCommittedSizes = () => this.applyCommittedSizes(false);
20176
- this.rebuildCommittedSizes = () => this.applyCommittedSizes(true);
20177
- this.syncAppliedIndexes = () => {
20178
- for (const [rowType, committed] of this.committedSizes) {
20420
+ this.updateBottomAnchorState = ({ detail, }) => {
20421
+ if (detail.dimension !== 'rgRow') {
20422
+ return;
20423
+ }
20424
+ this.keepBottomAnchor = this.isMainViewportAtBottom(detail.coordinate);
20425
+ };
20426
+ this.applyPendingBottomAnchor = () => {
20427
+ if (!this.pendingBottomAnchor) {
20428
+ return;
20429
+ }
20430
+ this.pendingBottomAnchor = false;
20431
+ const dimension = this.providers.dimension.stores.rgRow.store;
20432
+ // Scroll surfaces have slightly different client sizes. Give the shared
20433
+ // scrolling service the content end and let each surface clamp to its own
20434
+ // exact bottom coordinate.
20435
+ void this.revogrid.scrollToCoordinate({ y: dimension.get('realSize') });
20436
+ };
20437
+ this.scheduleRowDefinitionRemap = () => {
20438
+ if (this.rowDefinitionRemapQueued) {
20439
+ return;
20440
+ }
20441
+ this.rowDefinitionRemapQueued = true;
20442
+ queueMicrotask(() => {
20443
+ if (!this.rowDefinitionRemapQueued) {
20444
+ return;
20445
+ }
20446
+ this.pruneRowDefinitions();
20447
+ this.reapplyRowDefinitionSizes();
20448
+ this.rowDefinitionRemapQueued = false;
20449
+ });
20450
+ };
20451
+ /** Map source-indexed row definitions back onto the current virtual order. */
20452
+ this.reapplyRowDefinitionSizes = () => {
20453
+ const rowDefinitions = this.providers.dimension.getRowDefinitions();
20454
+ for (const rowType of rowTypes) {
20179
20455
  const items = this.providers.data.stores[rowType].store.get('items');
20456
+ const definitions = new Map(rowDefinitions
20457
+ .filter(definition => definition.type === rowType)
20458
+ .map(definition => [definition.index, definition.size]));
20459
+ const appliedIndexes = this.appliedDefinitionIndexes.get(rowType);
20460
+ if (!definitions.size && !(appliedIndexes === null || appliedIndexes === void 0 ? void 0 : appliedIndexes.size)) {
20461
+ continue;
20462
+ }
20463
+ const dimension = this.providers.dimension.stores[rowType];
20464
+ const currentSizes = dimension.store.get('sizes');
20465
+ const sizes = Object.assign({}, currentSizes);
20466
+ for (const index of appliedIndexes || []) {
20467
+ delete sizes[index];
20468
+ }
20180
20469
  const indexes = new Set();
20181
20470
  items.forEach((physicalIndex, virtualIndex) => {
20182
- if (committed.has(physicalIndex)) {
20471
+ const size = definitions.get(physicalIndex);
20472
+ if (size !== undefined) {
20473
+ sizes[virtualIndex] = size;
20183
20474
  indexes.add(virtualIndex);
20184
20475
  }
20185
20476
  });
20186
- this.appliedIndexes.set(rowType, indexes);
20477
+ this.appliedDefinitionIndexes.set(rowType, indexes);
20478
+ const sizeKeys = Object.keys(sizes);
20479
+ if (sizeKeys.length !== Object.keys(currentSizes).length ||
20480
+ sizeKeys.some(index => sizes[index] !== currentSizes[index])) {
20481
+ this.providers.dimension.setCustomSizes(rowType, sizes);
20482
+ }
20187
20483
  }
20188
20484
  };
20189
20485
  this.config = resolveRowResizeConfig(config);
20190
- this.rowDefinitionsRef = revogrid.rowDefinitions;
20191
20486
  if (new.target !== RowResizePlugin) {
20192
20487
  this.enabled = true;
20193
20488
  this.registerEventListeners();
@@ -20195,77 +20490,53 @@ class RowResizePlugin extends BasePlugin {
20195
20490
  }
20196
20491
  registerEventListeners() {
20197
20492
  this.addEventListener('beforerowrender', this.decorateRow);
20198
- this.addEventListener('beforeanysource', ({ detail }) => {
20493
+ this.addEventListener('beforeanysource', () => {
20199
20494
  this.cancel('data-change');
20200
- const committed = this.committedSizes.get(detail.type);
20201
- if (!committed) {
20202
- return;
20203
- }
20204
- const removedIndexes = new Set();
20205
- for (const index of committed.keys()) {
20206
- if (index >= detail.source.length) {
20207
- committed.delete(index);
20208
- removedIndexes.add(index);
20209
- }
20210
- }
20211
- if (removedIndexes.size) {
20212
- const rowDefinitions = this.revogrid.rowDefinitions.filter(definition => definition.type !== detail.type ||
20213
- !removedIndexes.has(definition.index));
20214
- this.rowDefinitionsRef = rowDefinitions;
20215
- this.revogrid.rowDefinitions = rowDefinitions;
20216
- }
20495
+ this.keepBottomAnchor = false;
20496
+ });
20497
+ this.addEventListener('afteranysource', ({ detail }) => {
20498
+ this.pendingSourceCounts.set(detail.type, detail.source.length);
20499
+ this.scheduleRowDefinitionRemap();
20217
20500
  });
20218
- this.addEventListener('afteranysource', this.rebuildCommittedSizes);
20219
20501
  this.addEventListener('beforesourcesortingapply', this.cancelForDataChange);
20220
- this.addEventListener('aftersortingapply', this.reapplyCommittedSizes);
20502
+ this.addEventListener('beforesortingapply', this.cancelForDataChange);
20503
+ this.addEventListener('sortingconfigchanged', this.cancelForDataChange);
20504
+ this.addEventListener(BEFORE_GROUPING_APPLY_EVENT, this.cancelForDataChange);
20505
+ this.addEventListener('aftersortingapply', this.scheduleRowDefinitionRemap);
20221
20506
  this.addEventListener('beforefilterapply', this.cancelForDataChange);
20222
- this.addEventListener('beforerowdefinition', ({ detail }) => {
20507
+ this.addEventListener('afterfilterapply', this.scheduleRowDefinitionRemap);
20508
+ this.addEventListener('beforerowdefinition', () => {
20223
20509
  this.cancel('data-change');
20224
- if (detail.vals !== this.rowDefinitionsRef) {
20225
- this.committedSizes.clear();
20226
- this.appliedIndexes.clear();
20227
- this.rowDefinitionsRef = detail.vals;
20228
- }
20229
- });
20230
- this.addEventListener('afterthemechanged', this.reapplyCommittedSizes);
20231
- this.addEventListener('aftertrimmed', this.syncAppliedIndexes);
20232
- this.addEventListener('roworderchange', () => {
20233
- queueMicrotask(this.reapplyCommittedSizes);
20510
+ this.scheduleRowDefinitionRemap();
20234
20511
  });
20512
+ this.addEventListener('afterthemechanged', this.scheduleRowDefinitionRemap);
20513
+ this.addEventListener('aftertrimmed', this.scheduleRowDefinitionRemap);
20514
+ this.addEventListener('roworderchange', this.scheduleRowDefinitionRemap);
20235
20515
  this.addEventListener(GROUP_EXPAND_EVENT, () => {
20236
- queueMicrotask(this.reapplyCommittedSizes);
20516
+ if (this.keepBottomAnchor) {
20517
+ this.pendingBottomAnchor = true;
20518
+ }
20519
+ this.scheduleRowDefinitionRemap();
20237
20520
  });
20521
+ this.addEventListener('aftergridrender', this.applyPendingBottomAnchor);
20522
+ this.addEventListener('viewportscroll', this.updateBottomAnchorState);
20238
20523
  this.addEventListener('rowheaderschanged', ({ detail }) => {
20239
20524
  if (!detail && !this.config.fullRow) {
20240
20525
  this.cancel('row-headers-hidden');
20241
20526
  }
20242
20527
  });
20243
20528
  }
20244
- controlFromGridProperty() {
20245
- this.gridResizeRow = this.revogrid.resizeRow;
20246
- this.gridPlugins = this.revogrid.plugins;
20247
- this.syncGridProperty(false);
20248
- this.watch('resizeRow', value => {
20249
- this.gridResizeRow = value;
20250
- this.syncGridProperty();
20251
- });
20252
- this.watch('plugins', value => {
20253
- this.gridPlugins = value || [];
20254
- this.syncGridProperty();
20255
- });
20256
- }
20257
- syncGridProperty(refresh = true) {
20258
- const hasConfiguredPlugin = this.gridPlugins.some(plugin => plugin !== RowResizePlugin &&
20529
+ syncGridConfig(refresh = true) {
20530
+ const { plugins = [], resizeRow } = this.revogrid;
20531
+ const isCorePlugin = this.constructor === RowResizePlugin;
20532
+ const hasConfiguredPlugin = plugins.some(plugin => plugin !== RowResizePlugin &&
20259
20533
  plugin.prototype instanceof RowResizePlugin);
20260
- const explicitlyEnabled = this.gridPlugins.includes(RowResizePlugin);
20261
- const enabled = hasConfiguredPlugin
20262
- ? false
20263
- : explicitlyEnabled || !!this.gridResizeRow;
20264
- const config = resolveRowResizeConfig(!hasConfiguredPlugin &&
20265
- !explicitlyEnabled &&
20266
- typeof this.gridResizeRow === 'object'
20267
- ? this.gridResizeRow
20268
- : undefined);
20534
+ const enabled = !isCorePlugin ||
20535
+ (!hasConfiguredPlugin && !!resizeRow);
20536
+ const resizeConfig = typeof resizeRow === 'object' ? resizeRow : undefined;
20537
+ const config = isCorePlugin
20538
+ ? resolveRowResizeConfig(resizeConfig)
20539
+ : this.config;
20269
20540
  const configChanged = config.minHeight !== this.config.minHeight ||
20270
20541
  config.maxHeight !== this.config.maxHeight ||
20271
20542
  config.fullRow !== this.config.fullRow;
@@ -20277,10 +20548,13 @@ class RowResizePlugin extends BasePlugin {
20277
20548
  if (enabled !== this.enabled) {
20278
20549
  this.enabled = enabled;
20279
20550
  if (enabled) {
20280
- this.rowDefinitionsRef = this.revogrid.rowDefinitions;
20281
20551
  this.registerEventListeners();
20282
20552
  }
20283
20553
  else {
20554
+ this.pendingBottomAnchor = false;
20555
+ this.keepBottomAnchor = false;
20556
+ this.rowDefinitionRemapQueued = false;
20557
+ this.pendingSourceCounts.clear();
20284
20558
  this.clearSubscriptions();
20285
20559
  }
20286
20560
  }
@@ -20299,6 +20573,7 @@ class RowResizePlugin extends BasePlugin {
20299
20573
  }
20300
20574
  const dimension = this.providers.dimension.stores[rowType];
20301
20575
  const dimensionState = dimension.getCurrentState();
20576
+ const viewport = this.providers.viewport.stores[rowType];
20302
20577
  const item = getItemByIndex(dimensionState, index);
20303
20578
  const focusedStore = this.providers.selection.focusedStore;
20304
20579
  const selectedRowType = focusedStore
@@ -20330,16 +20605,23 @@ class RowResizePlugin extends BasePlugin {
20330
20605
  currentHeight: startHeight,
20331
20606
  previousSizes,
20332
20607
  originalCustomSizes: Object.assign({}, dimensionState.sizes),
20333
- startEvent: event,
20608
+ bottomAnchored: rowType === 'rgRow' &&
20609
+ this.isMainViewportAtBottom(viewport.lastCoordinate),
20334
20610
  lastEvent: event,
20335
20611
  };
20612
+ this.active = active;
20336
20613
  const beforeEvent = this.emit(BEFORE_ROW_RESIZE_EVENT, this.eventDetail(active, event, startHeight));
20337
20614
  if (beforeEvent.defaultPrevented) {
20615
+ if (this.active === active) {
20616
+ this.active = undefined;
20617
+ }
20618
+ return;
20619
+ }
20620
+ if (!this.enabled || this.active !== active) {
20338
20621
  return;
20339
20622
  }
20340
20623
  event.preventDefault();
20341
20624
  event.stopPropagation();
20342
- this.active = active;
20343
20625
  const doc = this.revogrid.ownerDocument;
20344
20626
  this.previousBodyCursor = ((_a = doc.body) === null || _a === void 0 ? void 0 : _a.style.cursor) || '';
20345
20627
  if (doc.body) {
@@ -20362,6 +20644,7 @@ class RowResizePlugin extends BasePlugin {
20362
20644
  return;
20363
20645
  }
20364
20646
  this.providers.dimension.setCustomSizes(active.rowType, createRowResizePatch(active.indexes, size), true);
20647
+ this.requestBottomAnchor(active);
20365
20648
  active.currentHeight = size;
20366
20649
  this.emit(ROW_RESIZE_EVENT, this.eventDetail(active, active.lastEvent, size));
20367
20650
  }
@@ -20380,7 +20663,8 @@ class RowResizePlugin extends BasePlugin {
20380
20663
  }
20381
20664
  }
20382
20665
  this.providers.dimension.setCustomSizes(active.rowType, currentSizes);
20383
- const detail = Object.assign(Object.assign({}, this.eventDetail(active, active.lastEvent || active.startEvent, active.startHeight)), { reason });
20666
+ this.requestBottomAnchor(active);
20667
+ const detail = Object.assign(Object.assign({}, this.eventDetail(active, active.lastEvent, active.startHeight)), { reason });
20384
20668
  this.finishGesture();
20385
20669
  this.emit(ROW_RESIZE_CANCEL_EVENT, detail);
20386
20670
  }
@@ -20399,51 +20683,44 @@ class RowResizePlugin extends BasePlugin {
20399
20683
  return;
20400
20684
  }
20401
20685
  const items = this.providers.data.stores[active.rowType].store.get('items');
20402
- let committed = this.committedSizes.get(active.rowType);
20403
- if (!committed) {
20404
- committed = new Map();
20405
- this.committedSizes.set(active.rowType, committed);
20406
- }
20407
- let applied = this.appliedIndexes.get(active.rowType);
20408
- if (!applied) {
20409
- applied = new Set();
20410
- this.appliedIndexes.set(active.rowType, applied);
20411
- }
20412
20686
  const physicalIndexes = active.indexes.reduce((result, index) => {
20413
20687
  const physicalIndex = items[index];
20414
20688
  if (physicalIndex !== undefined) {
20415
- committed.set(physicalIndex, active.currentHeight);
20416
- applied.add(index);
20417
20689
  result.push(physicalIndex);
20418
20690
  }
20419
20691
  return result;
20420
20692
  }, []);
20421
20693
  if (physicalIndexes.length) {
20422
- const rowDefinitions = mergeRowResizeDefinitions(this.revogrid.rowDefinitions, active.rowType, physicalIndexes, active.currentHeight);
20423
- this.rowDefinitionsRef = rowDefinitions;
20424
- this.revogrid.rowDefinitions = rowDefinitions;
20694
+ const rowDefinitions = mergeRowResizeDefinitions(this.providers.dimension.getRowDefinitions(), active.rowType, physicalIndexes, active.currentHeight);
20695
+ this.providers.dimension.setRowDefinitions(rowDefinitions);
20696
+ this.scheduleRowDefinitionRemap();
20697
+ this.keepBottomAnchor = active.bottomAnchored;
20698
+ this.requestBottomAnchor(active);
20425
20699
  }
20426
20700
  }
20427
- applyCommittedSizes(clearAppliedIndexes) {
20428
- for (const [rowType, committed] of this.committedSizes) {
20429
- const dimension = this.providers.dimension.stores[rowType];
20430
- const sizes = Object.assign({}, dimension.store.get('sizes'));
20431
- if (clearAppliedIndexes) {
20432
- for (const index of this.appliedIndexes.get(rowType) || []) {
20433
- delete sizes[index];
20434
- }
20435
- }
20436
- const items = this.providers.data.stores[rowType].store.get('items');
20437
- const indexes = new Set();
20438
- items.forEach((physicalIndex, virtualIndex) => {
20439
- const size = committed.get(physicalIndex);
20440
- if (size !== undefined) {
20441
- sizes[virtualIndex] = size;
20442
- indexes.add(virtualIndex);
20443
- }
20444
- });
20445
- this.appliedIndexes.set(rowType, indexes);
20446
- this.providers.dimension.setCustomSizes(rowType, sizes);
20701
+ requestBottomAnchor(active) {
20702
+ if (active.bottomAnchored) {
20703
+ this.pendingBottomAnchor = true;
20704
+ }
20705
+ }
20706
+ isMainViewportAtBottom(coordinate) {
20707
+ const dimension = this.providers.dimension.stores.rgRow.getCurrentState();
20708
+ const viewport = this.providers.viewport.stores.rgRow.store.state;
20709
+ return (dimension.realSize > viewport.clientSize &&
20710
+ coordinate >= getViewportMaxCoordinate(dimension, viewport.virtualSize));
20711
+ }
20712
+ pruneRowDefinitions() {
20713
+ if (!this.pendingSourceCounts.size) {
20714
+ return;
20715
+ }
20716
+ const definitions = this.providers.dimension.getRowDefinitions();
20717
+ const rowDefinitions = definitions.filter(definition => {
20718
+ const count = this.pendingSourceCounts.get(definition.type);
20719
+ return count === undefined || definition.index < count;
20720
+ });
20721
+ this.pendingSourceCounts.clear();
20722
+ if (rowDefinitions.length !== definitions.length) {
20723
+ this.providers.dimension.setRowDefinitions(rowDefinitions);
20447
20724
  }
20448
20725
  }
20449
20726
  finishGesture() {
@@ -20466,11 +20743,14 @@ class RowResizePlugin extends BasePlugin {
20466
20743
  }
20467
20744
  destroy() {
20468
20745
  this.cancel('destroy');
20746
+ this.keepBottomAnchor = false;
20747
+ this.rowDefinitionRemapQueued = false;
20748
+ this.pendingSourceCounts.clear();
20469
20749
  super.destroy();
20470
20750
  }
20471
20751
  }
20472
20752
 
20473
- 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}`;
20753
+ 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}`;
20474
20754
 
20475
20755
  const DEFAULT_COLUMN_SIZE = 100;
20476
20756
  function getColumnSize(size) {
@@ -21342,29 +21622,31 @@ class RevoGridComponent {
21342
21622
  vals: after,
21343
21623
  oldVals: before,
21344
21624
  });
21345
- // apply new values
21625
+ this.dimensionProvider.syncRowDefinitions(newVal);
21346
21626
  const newRows = rowDefinitionByType(newVal);
21347
- // clear current defs
21348
- if (oldVal) {
21349
- const remove = rowDefinitionRemoveByType(oldVal);
21350
- // clear all old data and drop sizes
21351
- for (const t in remove) {
21352
- if (remove.hasOwnProperty(t)) {
21353
- const type = t;
21354
- const store = this.dataProvider.stores[type];
21355
- const sourceLength = store.store.get('source').length;
21356
- this.dimensionProvider.clearSize(type, sourceLength);
21357
- }
21358
- }
21359
- }
21360
- // set new sizes
21627
+ const oldRows = rowDefinitionByType(oldVal);
21628
+ const dataProvider = this.dataProvider;
21629
+ const dimensionProvider = this.dimensionProvider;
21361
21630
  rowTypes.forEach((t) => {
21362
- var _a;
21363
21631
  const newSizes = newRows[t];
21364
- // apply new sizes or force update
21365
- if (newSizes || forceUpdate) {
21366
- (_a = this.dimensionProvider) === null || _a === void 0 ? void 0 : _a.setCustomSizes(t, (newSizes === null || newSizes === void 0 ? void 0 : newSizes.sizes) || {});
21632
+ const oldSizes = oldRows[t];
21633
+ if (!newSizes && !oldSizes && !forceUpdate) {
21634
+ return;
21367
21635
  }
21636
+ const sizes = Object.assign({}, dimensionProvider.stores[t].store.get('sizes'));
21637
+ const definitionSizes = (newSizes === null || newSizes === void 0 ? void 0 : newSizes.sizes) || {};
21638
+ const previousDefinitionSizes = (oldSizes === null || oldSizes === void 0 ? void 0 : oldSizes.sizes) || {};
21639
+ const items = dataProvider.stores[t].store.get('items');
21640
+ items.forEach((physicalIndex, virtualIndex) => {
21641
+ if (Object.hasOwn(previousDefinitionSizes, physicalIndex) &&
21642
+ sizes[virtualIndex] === previousDefinitionSizes[physicalIndex]) {
21643
+ delete sizes[virtualIndex];
21644
+ }
21645
+ if (Object.hasOwn(definitionSizes, physicalIndex)) {
21646
+ sizes[virtualIndex] = definitionSizes[physicalIndex];
21647
+ }
21648
+ });
21649
+ dimensionProvider.setCustomSizes(t, sizes);
21368
21650
  });
21369
21651
  }
21370
21652
  trimmedRowsChanged(newVal = {}) {
@@ -21413,6 +21695,9 @@ class RevoGridComponent {
21413
21695
  rowHeadersChange(rowHeaders) {
21414
21696
  this.rowheaderschanged.emit(rowHeaders);
21415
21697
  }
21698
+ resizeRowChanged() {
21699
+ this.syncRowResizeConfig();
21700
+ }
21416
21701
  /**
21417
21702
  * Register external VNodes
21418
21703
  */
@@ -21435,6 +21720,7 @@ class RevoGridComponent {
21435
21720
  */
21436
21721
  pluginsChanged(plugins = [], prevPlugins) {
21437
21722
  this.pluginService.addUserPluginsAndCreate(this.element, plugins, prevPlugins, this.getPluginData());
21723
+ this.syncRowResizeConfig();
21438
21724
  }
21439
21725
  // #endregion
21440
21726
  // #region Plugins
@@ -21475,11 +21761,15 @@ class RevoGridComponent {
21475
21761
  this.pluginService.add(new SortingPlugin(this.element, pluginData));
21476
21762
  // register grouping plugin
21477
21763
  this.pluginService.add(new GroupingRowPlugin(this.element, pluginData));
21478
- this.pluginService.add(RowResizePlugin.fromGridProperty(this.element, pluginData));
21764
+ this.pluginService.add(new RowResizePlugin(this.element, pluginData));
21479
21765
  if (this.canMoveColumns) {
21480
21766
  this.pluginService.add(new ColumnMovePlugin(this.element, pluginData));
21481
21767
  }
21482
21768
  }
21769
+ syncRowResizeConfig() {
21770
+ const plugin = this.pluginService.getByClass(RowResizePlugin);
21771
+ plugin === null || plugin === void 0 ? void 0 : plugin.syncGridConfig();
21772
+ }
21483
21773
  getPluginData() {
21484
21774
  if (!this.dimensionProvider || !this.dataProvider || !this.columnProvider || !this.viewportProvider || !this.selectionStoreConnector) {
21485
21775
  return;
@@ -21522,6 +21812,9 @@ class RevoGridComponent {
21522
21812
  this.themeService.setDefinitions(this.themeDefinitions);
21523
21813
  this.dimensionProvider = new DimensionProvider(this.viewportProvider, {
21524
21814
  realSizeChanged: (k) => this.contentsizechanged.emit(k),
21815
+ rowDefinitionsChanged: definitions => {
21816
+ this.rowDefinitions = definitions;
21817
+ },
21525
21818
  });
21526
21819
  this.dimensionProvider.setSettings({ originItemSize: getColumnSize(this.colSize) }, 'rgCol');
21527
21820
  this.columnProvider = new ColumnDataProvider();
@@ -21712,6 +22005,9 @@ class RevoGridComponent {
21712
22005
  "rowHeaders": [{
21713
22006
  "rowHeadersChange": 0
21714
22007
  }],
22008
+ "resizeRow": [{
22009
+ "resizeRowChanged": 0
22010
+ }],
21715
22011
  "registerVNode": [{
21716
22012
  "registerOutsideVNodes": 0
21717
22013
  }],
@@ -22445,19 +22741,20 @@ const HeaderRenderer = (p) => {
22445
22741
  const hasSortingSign = !!(((_a = p.data) === null || _a === void 0 ? void 0 : _a.sortable) ||
22446
22742
  ((_b = p.data) === null || _b === void 0 ? void 0 : _b.order) ||
22447
22743
  ((_c = p.data) === null || _c === void 0 ? void 0 : _c.sortIndex));
22744
+ const hasFilterButton = !!(p.canFilter && ((_d = p.data) === null || _d === void 0 ? void 0 : _d.filter) !== false);
22448
22745
  const cellClass = {
22449
22746
  [HEADER_CLASS]: true,
22450
- [HEADER_SORTABLE_CLASS]: !!((_d = p.data) === null || _d === void 0 ? void 0 : _d.sortable),
22747
+ [HEADER_SORTABLE_CLASS]: !!((_e = p.data) === null || _e === void 0 ? void 0 : _e.sortable),
22451
22748
  };
22452
- if ((_e = p.data) === null || _e === void 0 ? void 0 : _e.order) {
22749
+ if ((_f = p.data) === null || _f === void 0 ? void 0 : _f.order) {
22453
22750
  cellClass[p.data.order] = true;
22454
22751
  }
22455
22752
  const dataProps = {
22456
- key: String((_g = (_f = p.data) === null || _f === void 0 ? void 0 : _f.prop) !== null && _g !== void 0 ? _g : p.column.itemIndex),
22753
+ key: String((_h = (_g = p.data) === null || _g === void 0 ? void 0 : _g.prop) !== null && _h !== void 0 ? _h : p.column.itemIndex),
22457
22754
  [DATA_COL]: p.column.itemIndex,
22458
22755
  canResize: p.canResize,
22459
- minWidth: ((_h = p.data) === null || _h === void 0 ? void 0 : _h.minSize) || MIN_COL_SIZE,
22460
- maxWidth: (_j = p.data) === null || _j === void 0 ? void 0 : _j.maxSize,
22756
+ minWidth: ((_j = p.data) === null || _j === void 0 ? void 0 : _j.minSize) || MIN_COL_SIZE,
22757
+ maxWidth: (_k = p.data) === null || _k === void 0 ? void 0 : _k.maxSize,
22461
22758
  active: p.active || ['r'],
22462
22759
  class: cellClass,
22463
22760
  style: {
@@ -22493,7 +22790,7 @@ const HeaderRenderer = (p) => {
22493
22790
  }
22494
22791
  }
22495
22792
  }
22496
- 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 })) : ('')));
22793
+ 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));
22497
22794
  };
22498
22795
 
22499
22796
  const HeaderGroupRenderer = (p) => {
@@ -22515,7 +22812,7 @@ const HeaderGroupRenderer = (p) => {
22515
22812
  return (hAsync(HeaderCellRenderer, { data: Object.assign(Object.assign({}, p.group), { prop: '', providers: p.providers, index: p.start }), props: groupProps, additionalData: p.additionalData }));
22516
22813
  };
22517
22814
 
22518
- 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}`;
22815
+ 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}`;
22519
22816
 
22520
22817
  class RevogrHeaderComponent {
22521
22818
  constructor(hostRef) {