@revolist/revogrid 4.26.2 → 4.27.1
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.
- package/dist/cjs/{cell-renderer-Cf2Pu4S0.js → cell-renderer-BDIx0xys.js} +3 -3
- package/dist/cjs/{column.service-C7p5eC5V.js → column.service-D-ENzqyb.js} +5 -3
- package/dist/cjs/{dimension.helpers-CgHhnN1d.js → dimension.helpers-CptesQOZ.js} +52 -8
- package/dist/cjs/{edit.utils-rAcGublN.js → edit.utils-CBAbQhGP.js} +1 -1
- package/dist/cjs/{header-cell-renderer-DHClfIto.js → header-cell-renderer-B5Y4fdZC.js} +1 -1
- package/dist/cjs/{index--FdNLz1Z.js → index-BVESmpqW.js} +1 -1
- package/dist/cjs/index.cjs.js +72 -55
- package/dist/cjs/loader.cjs.js +1 -1
- package/dist/cjs/revo-grid.cjs.entry.js +131 -86
- package/dist/cjs/revo-grid.cjs.js +1 -1
- package/dist/cjs/revogr-attribution_7.cjs.entry.js +51 -19
- package/dist/cjs/revogr-clipboard_3.cjs.entry.js +4 -4
- package/dist/cjs/revogr-data_4.cjs.entry.js +21 -15
- package/dist/cjs/revogr-filter-panel.cjs.entry.js +9 -9
- package/dist/cjs/{column.drag.plugin-CK5HADlW.js → row-resize.plugin-sK9_rcUN.js} +759 -86
- package/dist/cjs/{text-editor-F04kTx53.js → text-editor-CJyQaYei.js} +2 -2
- package/dist/cjs/{throttle-fV6BUmM7.js → throttle-BsaP4fgu.js} +3 -3
- package/dist/cjs/{viewport.store-B4Clk4m9.js → viewport.store-mhsdi61t.js} +1 -1
- package/dist/collection/components/data/revogr-data-style.css +11 -0
- package/dist/collection/components/data/revogr-data.js +14 -8
- package/dist/collection/components/header/revogr-header-style.css +1 -0
- package/dist/collection/components/overlay/keyboard.service.js +33 -3
- package/dist/collection/components/overlay/revogr-overlay-selection.js +12 -10
- package/dist/collection/components/revoGrid/plugin.service.js +2 -2
- package/dist/collection/components/revoGrid/revo-grid.js +80 -30
- package/dist/collection/components/revoGrid/viewport.scrolling.service.js +24 -13
- package/dist/collection/components/revoGrid/viewport.service.js +1 -1
- package/dist/collection/plugins/filter/filter.constants.js +9 -0
- package/dist/collection/plugins/filter/filter.panel.js +8 -8
- package/dist/collection/plugins/filter/filter.plugin.js +109 -10
- package/dist/collection/plugins/filter/filter.style.css +2 -0
- package/dist/collection/plugins/groupingRow/grouping.const.js +1 -0
- package/dist/collection/plugins/groupingRow/grouping.row.plugin.js +93 -56
- package/dist/collection/plugins/groupingRow/grouping.row.renderer.js +1 -1
- package/dist/collection/plugins/groupingRow/grouping.service.js +1 -1
- package/dist/collection/plugins/groupingRow/grouping.sorting.service.js +58 -0
- package/dist/collection/plugins/groupingRow/grouping.trimmed.service.js +5 -3
- package/dist/collection/plugins/index.js +1 -0
- package/dist/collection/plugins/row-resize/index.js +6 -0
- package/dist/collection/plugins/row-resize/row-resize.plugin.js +416 -0
- package/dist/collection/plugins/row-resize/row-resize.types.js +1 -0
- package/dist/collection/plugins/row-resize/row-resize.utils.js +55 -0
- package/dist/collection/plugins/sorting/sorting.plugin.js +16 -13
- package/dist/collection/plugins/wcag/index.js +5 -4
- package/dist/collection/serve/controller.js +1 -1
- package/dist/collection/services/data.provider.js +8 -2
- package/dist/collection/services/dimension.provider.js +17 -1
- package/dist/collection/services/local.scroll.timer.js +3 -3
- package/dist/collection/services/selection.store.connector.js +4 -2
- package/dist/collection/store/dataSource/data.pending.plugin.js +21 -0
- package/dist/collection/store/dataSource/data.store.js +25 -3
- package/dist/collection/store/dataSource/trimmed.plugin.js +9 -6
- package/dist/collection/store/dimension/dimension.trim.plugin.js +1 -3
- package/dist/collection/types/events.js +4 -1
- package/dist/collection/utils/column.utils.js +1 -1
- package/dist/esm/{cell-renderer-11cf-lu3.js → cell-renderer-D9ze8OJw.js} +3 -3
- package/dist/esm/{column.service-Cfw3L0PN.js → column.service-pu_fdQ0S.js} +5 -4
- package/dist/{revo-grid/dimension.helpers-fl4HSSK9.js → esm/dimension.helpers-Cln9sALu.js} +52 -9
- package/dist/{revo-grid/edit.utils-4e9fsqOR.js → esm/edit.utils-3ZbhQCv_.js} +1 -1
- package/dist/esm/{header-cell-renderer-Cqtg1ETB.js → header-cell-renderer-YCiVIQ2E.js} +1 -1
- package/dist/esm/{index-D24ku9ej.js → index-BvMNbQyq.js} +1 -1
- package/dist/esm/index.js +14 -11
- package/dist/esm/loader.js +1 -1
- package/dist/esm/revo-grid.entry.js +113 -68
- package/dist/esm/revo-grid.js +1 -1
- package/dist/esm/revogr-attribution_7.entry.js +51 -19
- package/dist/esm/revogr-clipboard_3.entry.js +4 -4
- package/dist/esm/revogr-data_4.entry.js +21 -15
- package/dist/esm/revogr-filter-panel.entry.js +9 -9
- package/dist/esm/{column.drag.plugin-DDBKeTGI.js → row-resize.plugin-DBOgjLdE.js} +748 -87
- package/dist/{revo-grid/text-editor-DlMnLkRK.js → esm/text-editor-eHtrwvxH.js} +2 -2
- package/dist/{revo-grid/throttle-Cpk1LoGk.js → esm/throttle-3rhqdcLy.js} +3 -3
- package/dist/{revo-grid/viewport.store-BSXmsiZc.js → esm/viewport.store-DWMKRDSH.js} +1 -1
- package/dist/revo-grid/{cell-renderer-11cf-lu3.js → cell-renderer-D9ze8OJw.js} +3 -3
- package/dist/revo-grid/{column.service-Cfw3L0PN.js → column.service-pu_fdQ0S.js} +5 -4
- package/dist/{esm/dimension.helpers-fl4HSSK9.js → revo-grid/dimension.helpers-Cln9sALu.js} +52 -9
- package/dist/{esm/edit.utils-4e9fsqOR.js → revo-grid/edit.utils-3ZbhQCv_.js} +1 -1
- package/dist/revo-grid/{header-cell-renderer-Cqtg1ETB.js → header-cell-renderer-YCiVIQ2E.js} +1 -1
- package/dist/revo-grid/{index-D24ku9ej.js → index-BvMNbQyq.js} +1 -1
- package/dist/revo-grid/index.esm.js +14 -11
- package/dist/revo-grid/revo-grid.entry.js +113 -68
- package/dist/revo-grid/revo-grid.esm.js +1 -1
- package/dist/revo-grid/revogr-attribution_7.entry.js +51 -19
- package/dist/revo-grid/revogr-clipboard_3.entry.js +4 -4
- package/dist/revo-grid/revogr-data_4.entry.js +21 -15
- package/dist/revo-grid/revogr-filter-panel.entry.js +9 -9
- package/dist/revo-grid/{column.drag.plugin-DDBKeTGI.js → row-resize.plugin-DBOgjLdE.js} +748 -87
- package/dist/{esm/text-editor-DlMnLkRK.js → revo-grid/text-editor-eHtrwvxH.js} +2 -2
- package/dist/{esm/throttle-Cpk1LoGk.js → revo-grid/throttle-3rhqdcLy.js} +3 -3
- package/dist/{esm/viewport.store-BSXmsiZc.js → revo-grid/viewport.store-DWMKRDSH.js} +1 -1
- package/dist/types/components/data/revogr-data.d.ts +1 -0
- package/dist/types/components/overlay/keyboard.service.d.ts +6 -0
- package/dist/types/components/overlay/revogr-overlay-selection.d.ts +3 -1
- package/dist/types/components/revoGrid/revo-grid.d.ts +9 -1
- package/dist/types/components/revoGrid/viewport.scrolling.service.d.ts +3 -1
- package/dist/types/components.d.ts +23 -10
- package/dist/types/plugins/filter/filter.constants.d.ts +6 -0
- package/dist/types/plugins/filter/filter.plugin.d.ts +15 -0
- package/dist/types/plugins/groupingRow/grouping.const.d.ts +1 -0
- package/dist/types/plugins/groupingRow/grouping.row.plugin.d.ts +5 -7
- package/dist/types/plugins/groupingRow/grouping.sorting.service.d.ts +7 -0
- package/dist/types/plugins/groupingRow/grouping.trimmed.service.d.ts +9 -0
- package/dist/types/plugins/index.d.ts +1 -0
- package/dist/types/plugins/row-resize/index.d.ts +3 -0
- package/dist/types/plugins/row-resize/row-resize.plugin.d.ts +46 -0
- package/dist/types/plugins/row-resize/row-resize.types.d.ts +40 -0
- package/dist/types/plugins/row-resize/row-resize.utils.d.ts +14 -0
- package/dist/types/plugins/sorting/sorting.plugin.d.ts +5 -0
- package/dist/types/services/data.provider.d.ts +2 -0
- package/dist/types/services/dimension.provider.d.ts +7 -1
- package/dist/types/store/dataSource/data.pending.plugin.d.ts +9 -0
- package/dist/types/store/dataSource/data.store.d.ts +10 -0
- package/dist/types/store/dataSource/trimmed.plugin.d.ts +5 -0
- package/dist/types/types/events.d.ts +1 -1
- package/dist/types/types/interfaces.d.ts +3 -1
- package/hydrate/index.js +980 -191
- package/hydrate/index.mjs +980 -191
- package/package.json +1 -1
- package/readme.md +4 -1
- package/standalone/column.service.js +1 -1
- package/standalone/data.store.js +1 -1
- package/standalone/dimension.helpers.js +1 -1
- package/standalone/index.js +1 -1
- package/standalone/local.scroll.timer.js +1 -1
- package/standalone/revo-grid.js +1 -1
- package/standalone/revogr-data2.js +1 -1
- package/standalone/revogr-filter-panel.js +1 -1
- package/standalone/revogr-header2.js +1 -1
- package/standalone/revogr-overlay-selection2.js +1 -1
- package/standalone/revogr-row-headers2.js +1 -1
package/hydrate/index.js
CHANGED
|
@@ -7608,7 +7608,7 @@ function moveFilterItem(items, sourceId, targetId) {
|
|
|
7608
7608
|
return true;
|
|
7609
7609
|
}
|
|
7610
7610
|
|
|
7611
|
-
const filterStyleCss = () => `.revo-button{position:relative;overflow:hidden;color:var(--rg-theme-button-text);background-color:var(--rg-theme-button-bg);height:32px;line-height:32px;padding:0 15px;outline:0;border:0;border-radius:7px;box-sizing:border-box;cursor:pointer}.revo-button.green{background-color:var(--rg-theme-button-success-bg)}.revo-button.red{background-color:var(--rg-theme-button-danger-bg)}.revo-button:disabled,.revo-button[disabled]{cursor:not-allowed !important;filter:opacity(0.35) !important}.revo-button.outline{border:1px solid var(--rg-theme-button-outline-border);line-height:30px;background:none;color:var(--rg-theme-button-outline-text);box-shadow:none}revogr-filter-panel{display:block}revogr-filter-panel .filter-panel-dialog{position:fixed;top:0;left:0;z-index:100;max-height:calc(100vh - 16px);overflow:auto;opacity:1;transform:none;color:var(--rg-theme-filter-panel-text);background-color:var(--rg-theme-filter-panel-bg);border:1px solid var(--rg-theme-filter-panel-border);transform-origin:62px 0px;box-shadow:0 5px 18px -2px var(--rg-theme-filter-panel-shadow);box-sizing:border-box;padding:10px;border-radius:8px;margin:0;min-width:220px;text-align:left;animation:revogr-filter-panel-open 140ms cubic-bezier(0.2, 0, 0, 1)}revogr-filter-panel .filter-panel-dialog .filter-holder>div{display:flex;flex-direction:column}revogr-filter-panel .filter-panel-dialog label{font-size:13px;display:block;padding:8px 0}revogr-filter-panel .filter-panel-dialog select{width:100%}revogr-filter-panel .filter-panel-dialog input[type=text]{border:0;min-height:34px;margin:5px 0;color:var(--rg-theme-filter-panel-text);background:var(--rg-theme-filter-panel-input-bg);border-radius:5px;padding:0 10px;box-sizing:border-box;width:100%}revogr-filter-panel .filter-panel-dialog .filter-actions{position:sticky;right:0;bottom:-10px;left:0;z-index:1;text-align:right;margin:10px -10px -10px;padding:0 5px 10px 10px;background:var(--rg-theme-filter-panel-bg);border-top:1px solid var(--rg-theme-filter-panel-divider)}revogr-filter-panel .filter-panel-dialog .filter-actions button{margin-top:10px;margin-right:5px}@keyframes revogr-filter-panel-open{from{opacity:0;transform:translateY(-4px) scale(0.98)}to{opacity:1;transform:none}}@media (prefers-reduced-motion: reduce){revogr-filter-panel .filter-panel-dialog{animation:none}}.rgHeaderCell:hover .rv-filter{transition:opacity 267ms cubic-bezier(0.4, 0, 0.2, 1) 0ms, transform 178ms cubic-bezier(0.4, 0, 0.2, 1) 0ms}.rgHeaderCell:hover .rv-filter,.rgHeaderCell .rv-filter.active{opacity:1}.rgHeaderCell .rv-filter{height:24px;width:24px;background:none;border:0;opacity:0;visibility:visible;cursor:pointer;border-radius:4px}.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}`;
|
|
7611
|
+
const filterStyleCss = () => `.revo-button{position:relative;overflow:hidden;color:var(--rg-theme-button-text);background-color:var(--rg-theme-button-bg);height:32px;line-height:32px;padding:0 15px;outline:0;border:0;border-radius:7px;box-sizing:border-box;cursor:pointer}.revo-button.green{background-color:var(--rg-theme-button-success-bg)}.revo-button.red{background-color:var(--rg-theme-button-danger-bg)}.revo-button:disabled,.revo-button[disabled]{cursor:not-allowed !important;filter:opacity(0.35) !important}.revo-button.outline{border:1px solid var(--rg-theme-button-outline-border);line-height:30px;background:none;color:var(--rg-theme-button-outline-text);box-shadow:none}revogr-filter-panel{display:block}revogr-filter-panel .filter-panel-dialog{position:fixed;top:0;left:0;z-index:100;max-height:calc(100vh - 16px);overflow:auto;opacity:1;transform:none;color:var(--rg-theme-filter-panel-text);background-color:var(--rg-theme-filter-panel-bg);border:1px solid var(--rg-theme-filter-panel-border);transform-origin:62px 0px;box-shadow:0 5px 18px -2px var(--rg-theme-filter-panel-shadow);box-sizing:border-box;padding:10px;border-radius:8px;margin:0;min-width:220px;text-align:left;animation:revogr-filter-panel-open 140ms cubic-bezier(0.2, 0, 0, 1)}revogr-filter-panel .filter-panel-dialog .filter-holder>div{display:flex;flex-direction:column}revogr-filter-panel .filter-panel-dialog label{font-size:13px;display:block;padding:8px 0}revogr-filter-panel .filter-panel-dialog select{width:100%}revogr-filter-panel .filter-panel-dialog input[type=text]{border:0;min-height:34px;margin:5px 0;color:var(--rg-theme-filter-panel-text);background:var(--rg-theme-filter-panel-input-bg);border-radius:5px;padding:0 10px;box-sizing:border-box;width:100%}revogr-filter-panel .filter-panel-dialog .filter-actions{position:sticky;right:0;bottom:-10px;left:0;z-index:1;text-align:right;margin:10px -10px -10px;padding:0 5px 10px 10px;background:var(--rg-theme-filter-panel-bg);border-top:1px solid var(--rg-theme-filter-panel-divider)}revogr-filter-panel .filter-panel-dialog .filter-actions button{margin-top:10px;margin-right:5px}@keyframes revogr-filter-panel-open{from{opacity:0;transform:translateY(-4px) scale(0.98)}to{opacity:1;transform:none}}@media (prefers-reduced-motion: reduce){revogr-filter-panel .filter-panel-dialog{animation:none}}.rgHeaderCell:hover .rv-filter{transition:opacity 267ms cubic-bezier(0.4, 0, 0.2, 1) 0ms, transform 178ms cubic-bezier(0.4, 0, 0.2, 1) 0ms}.rgHeaderCell:hover .rv-filter,.rgHeaderCell .rv-filter.active{opacity:1}.rgHeaderCell .rv-filter{height:24px;width:24px;background:none;border:0;opacity:0;visibility:visible;cursor:pointer;border-radius:4px;position:relative;z-index:1}.rgHeaderCell .rv-filter.active{color:var(--rg-theme-filter-panel-icon-active)}.rgHeaderCell .rv-filter .filter-img{color:var(--rg-theme-filter-panel-icon);width:11px}.select-css{display:block;font-family:sans-serif;line-height:1.3;padding:0.6em 1.4em 0.5em 0.8em;width:100%;max-width:100%;box-sizing:border-box;margin:0;color:var(--rg-theme-filter-panel-text);border:1px solid var(--rg-theme-filter-panel-select-border);box-shadow:transparent;border-radius:0.5em;appearance:none;background-color:var(--rg-theme-filter-panel-input-bg);background-image:var(--revo-grid-filter-panel-select-arrow, url("data:image/svg+xml;charset=US-ASCII,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%22292.4%22%20height%3D%22292.4%22%3E%3Cpath%20fill%3D%22%23007CB2%22%20d%3D%22M287%2069.4a17.6%2017.6%200%200%200-13-5.4H18.4c-5%200-9.3%201.8-12.9%205.4A17.6%2017.6%200%200%200%200%2082.2c0%205%201.8%209.3%205.4%2012.9l128%20127.9c3.6%203.6%207.8%205.4%2012.8%205.4s9.2-1.8%2012.8-5.4L287%2095c3.5-3.5%205.4-7.8%205.4-12.8%200-5-1.9-9.2-5.5-12.8z%22%2F%3E%3C%2Fsvg%3E"));background-repeat:no-repeat, repeat;background-position:right 0.7em top 50%, 0 0;background-size:0.65em auto, 100%;}.select-css::-ms-expand{display:none}.select-css{}.select-css:hover{border-color:var(--rg-theme-filter-panel-select-border)}.select-css{}.select-css:focus{border-color:var(--rg-theme-filter-panel-select-border-hover);box-shadow:var(--rg-theme-filter-panel-focus-ring);outline:none}.select-css{}.select-css option{font-weight:normal}.select-css{}.select-css:disabled,.select-css[aria-disabled=true]{color:var(--rg-theme-filter-panel-muted-text);background-image:var(--revo-grid-filter-panel-select-arrow-disabled, url("data:image/svg+xml;charset=US-ASCII,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%22292.4%22%20height%3D%22292.4%22%3E%3Cpath%20fill%3D%22graytext%22%20d%3D%22M287%2069.4a17.6%2017.6%200%200%200-13-5.4H18.4c-5%200-9.3%201.8-12.9%205.4A17.6%2017.6%200%200%200%200%2082.2c0%205%201.8%209.3%205.4%2012.9l128%20127.9c3.6%203.6%207.8%205.4%2012.8%205.4s9.2-1.8%2012.8-5.4L287%2095c3.5-3.5%205.4-7.8%205.4-12.8%200-5-1.9-9.2-5.5-12.8z%22%2F%3E%3C%2Fsvg%3E"))}.select-css:disabled:hover,.select-css[aria-disabled=true]{border-color:var(--rg-theme-filter-panel-select-border)}.multi-filter-list{margin-top:5px;margin-bottom:5px}.multi-filter-list div{white-space:nowrap}.multi-filter-list .multi-filter-list-row{display:flex;align-items:center;gap:6px;position:relative}.multi-filter-list .multi-filter-list-row.filter-row-dragging{opacity:0.65}.multi-filter-list .multi-filter-list-row.filter-row-drag-over::before{content:"";position:absolute;top:-4px;right:0;left:0;z-index:2;height:2px;background:var(--rg-theme-filter-panel-reorder-accent);border-radius:999px;box-shadow:0 0 0 2px var(--rg-theme-filter-panel-bg)}.multi-filter-list .multi-filter-list-row.filter-row-drop-active .filter-row-drop-target{pointer-events:auto}.multi-filter-list .filter-row-drop-target{position:absolute;inset:0;z-index:1;padding:0;pointer-events:none;background:transparent;border:0}.multi-filter-list .multi-filter-list-action{display:flex;align-self:stretch;flex:0 0 auto;justify-content:flex-end;align-items:center}.multi-filter-list .and-or-button{margin:0 0 0 10px;min-width:58px;cursor:pointer}.multi-filter-list .trash-button{margin:0 0 -2px 6px;padding:0;border:0;background:transparent;color:inherit;cursor:pointer;width:22px;height:100%;font-size:16px}.multi-filter-list .trash-button .trash-img{width:1em}.multi-filter-list .reorder-button{border:0;background:transparent;color:var(--rg-theme-filter-panel-reorder-color);cursor:grab;font-family:monospace;font-size:12px;letter-spacing:0;line-height:1;padding:6px 2px;transform:scaleX(0.8);width:16px}.multi-filter-list .reorder-button.filter-row-drag-over{color:var(--rg-theme-filter-panel-reorder-accent)}.multi-filter-list .reorder-button:active{cursor:grabbing}.multi-filter-list-container{padding:0;margin:0;list-style:none}.add-filter-divider{display:block;margin:0 -10px 10px -10px;border-bottom:1px solid var(--rg-theme-filter-panel-divider);height:10px}.select-input{display:flex;align-items:center;flex:1 1 auto;gap:6px;min-width:0}.select-input .select-filter,.select-input .filter-extra{flex:1 1 0;min-width:0}.select-input .select-filter{width:auto}.select-input .filter-extra{display:flex}.select-input .filter-extra>*{width:100%}.select-input input[type=text],.select-input input[type=date]{margin:0}`;
|
|
7612
7612
|
|
|
7613
7613
|
const defaultType = 'none';
|
|
7614
7614
|
const FILTER_LIST_CLASS = 'multi-filter-list';
|
|
@@ -7713,7 +7713,7 @@ class FilterPanel {
|
|
|
7713
7713
|
getFilterItemsList() {
|
|
7714
7714
|
var _a, _b;
|
|
7715
7715
|
const prop = (_a = this.changes) === null || _a === void 0 ? void 0 : _a.prop;
|
|
7716
|
-
if (
|
|
7716
|
+
if (prop === undefined)
|
|
7717
7717
|
return '';
|
|
7718
7718
|
const propFilters = (_b = this.filterItems[prop]) !== null && _b !== void 0 ? _b : [];
|
|
7719
7719
|
const visibleFilterCount = propFilters.filter(filter => !filter.hidden).length;
|
|
@@ -7737,7 +7737,7 @@ class FilterPanel {
|
|
|
7737
7737
|
'filter-row-dragging': isDragging,
|
|
7738
7738
|
'filter-row-drag-over': isDragOver,
|
|
7739
7739
|
} }, canReorder ? (hAsync("button", { type: "button", class: "filter-row-drop-target", tabIndex: -1, "aria-label": `${capts.filterCondition} ${index + 1}`, onDragOver: e => this.onFilterDragOver(e, filter.id), onDragLeave: () => this.onFilterDragLeave(filter.id), onDrop: e => this.onFilterDrop(e, prop, filter.id) })) : '', canReorder ? (hAsync(ReorderButton, { ariaLabel: capts.reorderFilter, dragging: isDragging, dragOver: isDragOver, onDragStart: e => this.onFilterDragStart(e, filter.id), onDragEnd: () => this.onFilterDragEnd(), onKeyDown: e => this.onFilterReorderKeyDown(e, prop, filter.id) })) : '', hAsync("div", { class: { 'select-input': true } }, hAsync("select", { class: "select-css select-filter", onChange: e => this.onFilterTypeChange(e, prop, index) }, this.renderSelectOptions(this.filterItems[prop][index].type, true)), extra ? hAsync("div", { class: "filter-extra" }, extra) : ''), hAsync("div", { class: FILTER_LIST_CLASS_ACTION }, andOrButton, hAsync(TrashButton, { ariaLabel: capts.removeFilter, onClick: () => this.onRemoveFilter(filter.id) })))));
|
|
7740
|
-
})), propFilters.
|
|
7740
|
+
})), propFilters.some(f => !f.hidden) ? hAsync("div", { class: "add-filter-divider" }) : ''));
|
|
7741
7741
|
}
|
|
7742
7742
|
componentDidRender() {
|
|
7743
7743
|
this.syncDialog();
|
|
@@ -8098,7 +8098,7 @@ class FilterPanel {
|
|
|
8098
8098
|
top: `${(_d = (_c = this.changes) === null || _c === void 0 ? void 0 : _c.y) !== null && _d !== void 0 ? _d : 0}px`,
|
|
8099
8099
|
};
|
|
8100
8100
|
const capts = Object.assign(Object.assign({}, this.filterCaptionsInternal), this.filterCaptions);
|
|
8101
|
-
return (hAsync(Host, { key: '
|
|
8101
|
+
return (hAsync(Host, { key: 'd0e4ebb408750b11b3965da6a25e581733c968e3' }, hAsync("dialog", { key: '3df36777c931ec1063e8574169ca880a99dbfe41', class: "filter-panel-dialog", style: style, ref: el => (this.dialog = el), onCancel: e => {
|
|
8102
8102
|
e.preventDefault();
|
|
8103
8103
|
this.onCancel();
|
|
8104
8104
|
} }, this.changes && [
|
|
@@ -8107,16 +8107,16 @@ class FilterPanel {
|
|
|
8107
8107
|
((_g = this.changes) === null || _g === void 0 ? void 0 : _g.hideDefaultFilters) !== true && [
|
|
8108
8108
|
hAsync("label", { key: "filter-title" }, capts.title),
|
|
8109
8109
|
hAsync("div", { key: "filter-holder", class: "filter-holder" }, this.getFilterItemsList()),
|
|
8110
|
-
hAsync("div", { key: "add-filter", class: "add-filter" }, hAsync("select", { key: '
|
|
8110
|
+
hAsync("div", { key: "add-filter", class: "add-filter" }, hAsync("select", { key: 'e2a8bd29f2090d3e6c933795427b71ca190b82aa', id: FILTER_ID, class: "select-css", onChange: e => this.onAddNewFilter(e) }, this.renderSelectOptions(this.currentFilterType))),
|
|
8111
8111
|
],
|
|
8112
8112
|
hAsync("slot", { key: "default-slot" }),
|
|
8113
8113
|
((_j = (_h = this.changes).extraBottomContent) === null || _j === void 0 ? void 0 : _j.call(_h, this.changes)) || '',
|
|
8114
8114
|
hAsync("div", { key: "filter-actions", class: "filter-actions" }, this.disableDynamicFiltering && [
|
|
8115
|
-
hAsync("button", { key: "save", id: "revo-button-save", "aria-label": "save", class: "revo-button green", onClick: () => this.onSave() }, capts.save),
|
|
8116
|
-
hAsync("button", { key: "cancel", id: "revo-button-ok", "aria-label": "ok", class: "revo-button green", onClick: () => this.onCancel() }, capts.cancel),
|
|
8115
|
+
hAsync("button", { key: "save", type: "button", id: "revo-button-save", "aria-label": "save", class: "revo-button green", onClick: () => this.onSave() }, capts.save),
|
|
8116
|
+
hAsync("button", { key: "cancel", type: "button", id: "revo-button-ok", "aria-label": "ok", class: "revo-button green", onClick: () => this.onCancel() }, capts.cancel),
|
|
8117
8117
|
], !this.disableDynamicFiltering && [
|
|
8118
|
-
hAsync("button", { key: "ok", id: "revo-button-ok", "aria-label": "ok", class: "revo-button green", onClick: () => this.onCancel() }, capts.ok),
|
|
8119
|
-
hAsync("button", { key: "reset", id: "revo-button-reset", "aria-label": "reset", class: "revo-button outline", onClick: () => this.onReset() }, capts.reset),
|
|
8118
|
+
hAsync("button", { key: "ok", type: "button", id: "revo-button-ok", "aria-label": "ok", class: "revo-button green", onClick: () => this.onCancel() }, capts.ok),
|
|
8119
|
+
hAsync("button", { key: "reset", type: "button", id: "revo-button-reset", "aria-label": "reset", class: "revo-button outline", onClick: () => this.onReset() }, capts.reset),
|
|
8120
8120
|
]),
|
|
8121
8121
|
hAsync("slot", { key: "footer-slot", slot: "footer" }),
|
|
8122
8122
|
])));
|
|
@@ -11170,13 +11170,8 @@ const trimmedPlugin$1 = (store) => ({
|
|
|
11170
11170
|
set(k, newVal) {
|
|
11171
11171
|
switch (k) {
|
|
11172
11172
|
case 'trimmed': {
|
|
11173
|
-
// full sorted items list
|
|
11174
|
-
const proxy = store.get('proxyItems');
|
|
11175
|
-
const trimmed = gatherTrimmedItems(newVal);
|
|
11176
|
-
// filter our physical indexes which are not trimmed
|
|
11177
|
-
const newItems = proxy.filter(v => !trimmed[v]);
|
|
11178
11173
|
// set trimmed items in store
|
|
11179
|
-
store.set('items',
|
|
11174
|
+
store.set('items', getVisibleItems(store.get('proxyItems'), newVal));
|
|
11180
11175
|
break;
|
|
11181
11176
|
}
|
|
11182
11177
|
}
|
|
@@ -11192,6 +11187,14 @@ function gatherTrimmedItems(trimmedItems) {
|
|
|
11192
11187
|
}
|
|
11193
11188
|
return trimmed;
|
|
11194
11189
|
}
|
|
11190
|
+
/**
|
|
11191
|
+
* Preserve proxy order while removing physical indexes hidden by any trim
|
|
11192
|
+
* layer.
|
|
11193
|
+
*/
|
|
11194
|
+
function getVisibleItems(proxyItems, trimmedItems) {
|
|
11195
|
+
const trimmed = gatherTrimmedItems(trimmedItems);
|
|
11196
|
+
return proxyItems.filter(index => !trimmed[index]);
|
|
11197
|
+
}
|
|
11195
11198
|
|
|
11196
11199
|
/**
|
|
11197
11200
|
* Sets the given data on the specified store.
|
|
@@ -11498,7 +11501,7 @@ function gatherGroup(res, colData, collection, existingColumnsByType, level = 0)
|
|
|
11498
11501
|
// fill columns
|
|
11499
11502
|
resultItem.push(...collectionItem);
|
|
11500
11503
|
// fill indexes per each viewport
|
|
11501
|
-
res.columnGrouping[type].push(Object.assign(Object.assign({}, group), { indexes: Array(itemLength
|
|
11504
|
+
res.columnGrouping[type].push(Object.assign(Object.assign({}, group), { indexes: Array.from({ length: itemLength }, (_, i) => columnLength + i) }));
|
|
11502
11505
|
}
|
|
11503
11506
|
}
|
|
11504
11507
|
});
|
|
@@ -11722,6 +11725,25 @@ async function timeout(delay = 0) {
|
|
|
11722
11725
|
});
|
|
11723
11726
|
}
|
|
11724
11727
|
|
|
11728
|
+
/**
|
|
11729
|
+
* Keeps the visible item collection empty while an asynchronous data operation
|
|
11730
|
+
* is pending. Proxy, trim, and source updates may still calculate new items,
|
|
11731
|
+
* but they must not expose those items until the owning operation releases the
|
|
11732
|
+
* pending state.
|
|
11733
|
+
*/
|
|
11734
|
+
const pendingItemsPlugin = (store, isPending) => ({
|
|
11735
|
+
set(key, value) {
|
|
11736
|
+
if (key === 'items' &&
|
|
11737
|
+
isPending() &&
|
|
11738
|
+
Array.isArray(value) &&
|
|
11739
|
+
value.length) {
|
|
11740
|
+
// Writing an empty collection does not re-enter this branch, so the
|
|
11741
|
+
// guard safely replaces every attempted non-empty visibility update.
|
|
11742
|
+
store.set('items', []);
|
|
11743
|
+
}
|
|
11744
|
+
},
|
|
11745
|
+
});
|
|
11746
|
+
|
|
11725
11747
|
/**
|
|
11726
11748
|
* Data store
|
|
11727
11749
|
* Manage the state of a data source and provide methods for updating, adding, and refreshing the data.
|
|
@@ -11731,9 +11753,15 @@ class DataStore {
|
|
|
11731
11753
|
return this.dataStore;
|
|
11732
11754
|
}
|
|
11733
11755
|
constructor(type, storeData) {
|
|
11756
|
+
/**
|
|
11757
|
+
* The source, proxy order, and trims may continue changing,
|
|
11758
|
+
* but visible items must remain empty until the operation finishes.
|
|
11759
|
+
*/
|
|
11760
|
+
this.itemsPending = false;
|
|
11734
11761
|
const store = (this.dataStore = createStore(Object.assign({ items: [], proxyItems: [], source: [], groupingDepth: 0, groups: {}, type, trimmed: {}, groupingCustomRenderer: undefined, groupingCellRenderer: undefined }, storeData)));
|
|
11735
11762
|
store.use(proxyPlugin(store));
|
|
11736
11763
|
store.use(trimmedPlugin$1(store));
|
|
11764
|
+
store.use(pendingItemsPlugin(store, () => this.itemsPending));
|
|
11737
11765
|
}
|
|
11738
11766
|
/**
|
|
11739
11767
|
* full data source update
|
|
@@ -11748,7 +11776,7 @@ class DataStore {
|
|
|
11748
11776
|
// if true, current trimmed indexes will be re-applied to the new source
|
|
11749
11777
|
preserveTrimmed = false) {
|
|
11750
11778
|
const trimmed = this.store.get('trimmed');
|
|
11751
|
-
const
|
|
11779
|
+
const preserveCurrentTrimmed = silent && preserveTrimmed;
|
|
11752
11780
|
// during full update we do drop trim
|
|
11753
11781
|
if (!silent) {
|
|
11754
11782
|
this.store.set('trimmed', {});
|
|
@@ -11763,7 +11791,7 @@ class DataStore {
|
|
|
11763
11791
|
});
|
|
11764
11792
|
// Explicit trim preservation is opt-in because physical indexes may change
|
|
11765
11793
|
// across full data refreshes.
|
|
11766
|
-
this.store.set('items',
|
|
11794
|
+
this.store.set('items', preserveCurrentTrimmed ? getVisibleItems(items, trimmed) : items);
|
|
11767
11795
|
// apply grouping if present
|
|
11768
11796
|
if (grouping) {
|
|
11769
11797
|
setStore(this.store, {
|
|
@@ -11780,6 +11808,21 @@ class DataStore {
|
|
|
11780
11808
|
trimmed = Object.assign(Object.assign({}, trimmed), some);
|
|
11781
11809
|
setStore(this.store, { trimmed });
|
|
11782
11810
|
}
|
|
11811
|
+
/**
|
|
11812
|
+
* Keeps visible items empty while an asynchronous source operation is pending.
|
|
11813
|
+
* Releasing the state restores the current proxy order with all trims applied.
|
|
11814
|
+
*/
|
|
11815
|
+
setItemsPending(pending) {
|
|
11816
|
+
if (this.itemsPending === pending) {
|
|
11817
|
+
return;
|
|
11818
|
+
}
|
|
11819
|
+
this.itemsPending = pending;
|
|
11820
|
+
if (pending) {
|
|
11821
|
+
this.store.set('items', []);
|
|
11822
|
+
return;
|
|
11823
|
+
}
|
|
11824
|
+
this.store.set('items', getVisibleItems(this.store.get('proxyItems'), this.store.get('trimmed')));
|
|
11825
|
+
}
|
|
11783
11826
|
setSourceData(items, mutate = true) {
|
|
11784
11827
|
setSourceByVirtualIndex(this.store, items, mutate);
|
|
11785
11828
|
}
|
|
@@ -12157,9 +12200,7 @@ const trimmedPlugin = (storeService) => {
|
|
|
12157
12200
|
}
|
|
12158
12201
|
case 'trimmed': {
|
|
12159
12202
|
const trim = val;
|
|
12160
|
-
|
|
12161
|
-
trimmedPreviousSizes = storeService.store.get('sizes');
|
|
12162
|
-
}
|
|
12203
|
+
trimmedPreviousSizes !== null && trimmedPreviousSizes !== void 0 ? trimmedPreviousSizes : (trimmedPreviousSizes = storeService.store.get('sizes'));
|
|
12163
12204
|
trimmingObject = removeMultipleAndShift(trimmedPreviousSizes, trim || {});
|
|
12164
12205
|
// save a reference to the trimmed object to prevent changes after trimming
|
|
12165
12206
|
storeService.setSizes(trimmingObject);
|
|
@@ -13038,6 +13079,7 @@ const GROUP_COLUMN_PROP = `${GRID_INTERNALS}-prop`;
|
|
|
13038
13079
|
const GROUP_ORIGINAL_INDEX = `${GRID_INTERNALS}-original-index`;
|
|
13039
13080
|
const GROUP_EXPAND_BTN = `group-expand`;
|
|
13040
13081
|
const GROUP_EXPAND_EVENT = `groupexpandclick`;
|
|
13082
|
+
const BEFORE_GROUPING_APPLY_EVENT = `beforegroupingapply`;
|
|
13041
13083
|
const GROUPING_ROW_TYPE = 'rgRow';
|
|
13042
13084
|
|
|
13043
13085
|
function getGroupValueDefault(item, prop, emptyGroupValue) {
|
|
@@ -13196,7 +13238,7 @@ function isGrouping(rgRow) {
|
|
|
13196
13238
|
return typeof (rgRow === null || rgRow === void 0 ? void 0 : rgRow[PSEUDO_GROUP_ITEM]) !== 'undefined';
|
|
13197
13239
|
}
|
|
13198
13240
|
function isGroupingColumn(column) {
|
|
13199
|
-
return
|
|
13241
|
+
return (column === null || column === void 0 ? void 0 : column[PSEUDO_GROUP_COLUMN]) !== undefined;
|
|
13200
13242
|
}
|
|
13201
13243
|
function measureEqualDepth(groupA, groupB) {
|
|
13202
13244
|
const ln = groupA.length;
|
|
@@ -13800,6 +13842,16 @@ const DIRECTION_CODES = [
|
|
|
13800
13842
|
class KeyboardService {
|
|
13801
13843
|
constructor(sv) {
|
|
13802
13844
|
this.sv = sv;
|
|
13845
|
+
/** Keep focus transitions in keydown order so rendering can scroll each cell into view. */
|
|
13846
|
+
this.keyChangeQueue = Promise.resolve(false);
|
|
13847
|
+
this.keyChangeGeneration = 0;
|
|
13848
|
+
this.applyingKeyChange = false;
|
|
13849
|
+
}
|
|
13850
|
+
/** Cancel delayed directional input after focus or edit context changes externally. */
|
|
13851
|
+
invalidatePendingChanges() {
|
|
13852
|
+
if (!this.applyingKeyChange) {
|
|
13853
|
+
this.keyChangeGeneration += 1;
|
|
13854
|
+
}
|
|
13803
13855
|
}
|
|
13804
13856
|
/**
|
|
13805
13857
|
* Appends printable key input that arrives after edit mode was requested
|
|
@@ -13902,13 +13954,33 @@ class KeyboardService {
|
|
|
13902
13954
|
if (!data) {
|
|
13903
13955
|
return false;
|
|
13904
13956
|
}
|
|
13957
|
+
const keyChangeGeneration = this.keyChangeGeneration;
|
|
13905
13958
|
// this interval needed for several cases
|
|
13906
13959
|
// grid could be resized before next click
|
|
13907
13960
|
// at this case to avoid screen jump we use this interval
|
|
13908
13961
|
await timeout(RESIZE_INTERVAL + 30);
|
|
13909
|
-
const
|
|
13910
|
-
|
|
13911
|
-
|
|
13962
|
+
const applyKeyChange = async () => {
|
|
13963
|
+
if (keyChangeGeneration !== this.keyChangeGeneration) {
|
|
13964
|
+
return false;
|
|
13965
|
+
}
|
|
13966
|
+
const range = this.sv.selectionStore.get('range');
|
|
13967
|
+
const focus = this.sv.selectionStore.get('focus');
|
|
13968
|
+
this.applyingKeyChange = true;
|
|
13969
|
+
let changed;
|
|
13970
|
+
try {
|
|
13971
|
+
changed = this.keyPositionChange(data.changes, range, focus, data.isMulti);
|
|
13972
|
+
}
|
|
13973
|
+
finally {
|
|
13974
|
+
this.applyingKeyChange = false;
|
|
13975
|
+
}
|
|
13976
|
+
await new Promise(resolve => requestAnimationFrame(() => {
|
|
13977
|
+
requestAnimationFrame(() => resolve());
|
|
13978
|
+
}));
|
|
13979
|
+
return changed;
|
|
13980
|
+
};
|
|
13981
|
+
const queuedChange = this.keyChangeQueue.then(applyKeyChange, applyKeyChange);
|
|
13982
|
+
this.keyChangeQueue = queuedChange.catch(() => false);
|
|
13983
|
+
return queuedChange;
|
|
13912
13984
|
}
|
|
13913
13985
|
keyPositionChange(changes, range, focus, isMulti = false) {
|
|
13914
13986
|
if (!range || !focus) {
|
|
@@ -14295,6 +14367,8 @@ class OverlaySelection {
|
|
|
14295
14367
|
* Selection & Keyboard
|
|
14296
14368
|
*/
|
|
14297
14369
|
selectionServiceSet(selectionStore) {
|
|
14370
|
+
var _a;
|
|
14371
|
+
(_a = this.keyboardService) === null || _a === void 0 ? void 0 : _a.invalidatePendingChanges();
|
|
14298
14372
|
// clear subscriptions
|
|
14299
14373
|
this.unsubscribeSelectionStore.forEach(v => v());
|
|
14300
14374
|
this.unsubscribeSelectionStore.length = 0;
|
|
@@ -14322,6 +14396,7 @@ class OverlaySelection {
|
|
|
14322
14396
|
getData: () => this.getData(),
|
|
14323
14397
|
selectAll: () => this.selectAll.emit(),
|
|
14324
14398
|
});
|
|
14399
|
+
this.unsubscribeSelectionStore.push(selectionStore.onChange('focus', () => { var _a; return (_a = this.keyboardService) === null || _a === void 0 ? void 0 : _a.invalidatePendingChanges(); }), selectionStore.onChange('edit', () => { var _a; return (_a = this.keyboardService) === null || _a === void 0 ? void 0 : _a.invalidatePendingChanges(); }));
|
|
14325
14400
|
this.createAutoFillService();
|
|
14326
14401
|
}
|
|
14327
14402
|
/** Autofill */
|
|
@@ -14358,11 +14433,12 @@ class OverlaySelection {
|
|
|
14358
14433
|
this.selectionServiceSet(this.selectionStore);
|
|
14359
14434
|
}
|
|
14360
14435
|
disconnectedCallback() {
|
|
14361
|
-
var _a;
|
|
14436
|
+
var _a, _b;
|
|
14362
14437
|
// clear subscriptions
|
|
14438
|
+
(_a = this.keyboardService) === null || _a === void 0 ? void 0 : _a.invalidatePendingChanges();
|
|
14363
14439
|
this.unsubscribeSelectionStore.forEach(v => v());
|
|
14364
14440
|
this.unsubscribeSelectionStore.length = 0;
|
|
14365
|
-
(
|
|
14441
|
+
(_b = this.columnService) === null || _b === void 0 ? void 0 : _b.destroy();
|
|
14366
14442
|
}
|
|
14367
14443
|
async componentWillRender() {
|
|
14368
14444
|
var _a, _b;
|
|
@@ -14374,9 +14450,7 @@ class OverlaySelection {
|
|
|
14374
14450
|
renderRange(range) {
|
|
14375
14451
|
const cell = getCell(range, this.dimensionRow.state, this.dimensionCol.state);
|
|
14376
14452
|
const styles = styleByCellProps(cell);
|
|
14377
|
-
return
|
|
14378
|
-
hAsync("div", { class: SELECTION_BORDER_CLASS, style: styles }, this.isMobileDevice && (hAsync("div", { class: "range-handlers" }, hAsync("span", { class: MOBILE_CLASS }), hAsync("span", { class: MOBILE_CLASS })))),
|
|
14379
|
-
];
|
|
14453
|
+
return (hAsync("div", { class: SELECTION_BORDER_CLASS, style: styles }, this.isMobileDevice && (hAsync("div", { class: "range-handlers" }, hAsync("span", { class: MOBILE_CLASS }), hAsync("span", { class: MOBILE_CLASS })))));
|
|
14380
14454
|
}
|
|
14381
14455
|
renderEditor() {
|
|
14382
14456
|
// Check if edit access
|
|
@@ -14429,7 +14503,7 @@ class OverlaySelection {
|
|
|
14429
14503
|
}
|
|
14430
14504
|
// Range
|
|
14431
14505
|
if (range) {
|
|
14432
|
-
nodes.push(
|
|
14506
|
+
nodes.push(this.renderRange(range));
|
|
14433
14507
|
}
|
|
14434
14508
|
// Autofill
|
|
14435
14509
|
if (focus && !this.readonly && this.range) {
|
|
@@ -14440,9 +14514,9 @@ class OverlaySelection {
|
|
|
14440
14514
|
nodes.push(hAsync("revogr-order-editor", { ref: e => (this.orderEditor = e), dataStore: this.dataStore, dimensionRow: this.dimensionRow, dimensionCol: this.dimensionCol, parent: this.element, rowType: this.types.rowType, onRowdragstartinit: e => this.rowDragStart(e) }));
|
|
14441
14515
|
}
|
|
14442
14516
|
}
|
|
14443
|
-
return (hAsync(Host, { key: '
|
|
14517
|
+
return (hAsync(Host, { key: '230e2122c5c7065c072f02019d616a64949d54d0', class: { mobile: this.isMobileDevice }, onDblClick: (e) => this.onElementDblClick(e), onMouseDown: (e) => this.onElementMouseDown(e), onTouchStart: (e) => this.onElementMouseDown(e, true), onCloseedit: (e) => this.closeEdit(e),
|
|
14444
14518
|
// it's done to be able to throw events from different levels, not just from editor
|
|
14445
|
-
onCelledit: (e) => this.onEditCell(e) }, nodes, hAsync("slot", { key: '
|
|
14519
|
+
onCelledit: (e) => this.onEditCell(e) }, nodes, hAsync("slot", { key: '47740a79c605258b4024384510358be927d000b7', name: "data" })));
|
|
14446
14520
|
}
|
|
14447
14521
|
/**
|
|
14448
14522
|
* Executes the focus operation on the specified range of cells.
|
|
@@ -14639,12 +14713,12 @@ class OverlaySelection {
|
|
|
14639
14713
|
clearCell() {
|
|
14640
14714
|
var _a;
|
|
14641
14715
|
const range = this.selectionStore.get('range');
|
|
14642
|
-
|
|
14716
|
+
const focused = this.selectionStore.get('focus');
|
|
14717
|
+
if (range && (!isRangeSingleCell(range) || !focused)) {
|
|
14643
14718
|
const data = this.columnService.getRangeStaticData(range, '');
|
|
14644
14719
|
(_a = this.autoFillService) === null || _a === void 0 ? void 0 : _a.onRangeApply(data, range, range);
|
|
14645
14720
|
}
|
|
14646
14721
|
else if (this.canEdit()) {
|
|
14647
|
-
const focused = this.selectionStore.get('focus');
|
|
14648
14722
|
if (!focused) {
|
|
14649
14723
|
return;
|
|
14650
14724
|
}
|
|
@@ -15197,9 +15271,15 @@ class DataProvider {
|
|
|
15197
15271
|
store.addTrimmed(trimmed);
|
|
15198
15272
|
this.dimensionProvider.setTrimmed(trimmed, type);
|
|
15199
15273
|
if (type === 'rgRow') {
|
|
15200
|
-
this.dimensionProvider.setData(
|
|
15274
|
+
this.dimensionProvider.setData(store.store.get('items').length, type);
|
|
15201
15275
|
}
|
|
15202
15276
|
}
|
|
15277
|
+
/** Keep a row source empty until its current asynchronous update is ready. */
|
|
15278
|
+
setItemsPending(pending, type = 'rgRow') {
|
|
15279
|
+
const store = this.stores[type];
|
|
15280
|
+
store.setItemsPending(pending);
|
|
15281
|
+
this.dimensionProvider.setData(store.store.get('items').length, type, type !== 'rgRow');
|
|
15282
|
+
}
|
|
15203
15283
|
}
|
|
15204
15284
|
|
|
15205
15285
|
const FALLBACK_MAX_SCROLL_SIZE = 16000000;
|
|
@@ -15296,7 +15376,9 @@ function isVirtualXDimension(type, disableVirtualX = false, virtualX = DEFAULT_V
|
|
|
15296
15376
|
class DimensionProvider {
|
|
15297
15377
|
constructor(viewports, config) {
|
|
15298
15378
|
this.viewports = viewports;
|
|
15299
|
-
|
|
15379
|
+
this.config = config;
|
|
15380
|
+
this.rowDefinitions = [];
|
|
15381
|
+
const sizeChanged = debounce$1((k) => this.config.realSizeChanged(k), RESIZE_INTERVAL);
|
|
15300
15382
|
this.stores = [...rowTypes, ...columnTypes].reduce((sources, t) => {
|
|
15301
15383
|
sources[t] = new DimensionStore(t);
|
|
15302
15384
|
sources[t].store.onChange('realSize', () => sizeChanged(t));
|
|
@@ -15314,6 +15396,20 @@ class DimensionProvider {
|
|
|
15314
15396
|
this.viewports.stores[t].setOriginalSizes(this.stores[t].store.get('originItemSize'));
|
|
15315
15397
|
this.setItemCount(count, t);
|
|
15316
15398
|
}
|
|
15399
|
+
getRowDefinitions() {
|
|
15400
|
+
return this.rowDefinitions;
|
|
15401
|
+
}
|
|
15402
|
+
syncRowDefinitions(definitions) {
|
|
15403
|
+
this.rowDefinitions = definitions;
|
|
15404
|
+
}
|
|
15405
|
+
setRowDefinitions(definitions) {
|
|
15406
|
+
var _a, _b;
|
|
15407
|
+
if (definitions === this.rowDefinitions) {
|
|
15408
|
+
return;
|
|
15409
|
+
}
|
|
15410
|
+
this.syncRowDefinitions(definitions);
|
|
15411
|
+
(_b = (_a = this.config).rowDefinitionsChanged) === null || _b === void 0 ? void 0 : _b.call(_a, definitions);
|
|
15412
|
+
}
|
|
15317
15413
|
/**
|
|
15318
15414
|
* Apply new custom sizes to dimension and view port
|
|
15319
15415
|
* @param type - dimension type
|
|
@@ -16315,6 +16411,13 @@ const filterNames = {
|
|
|
16315
16411
|
lte: '<=',
|
|
16316
16412
|
};
|
|
16317
16413
|
|
|
16414
|
+
/** Fewer rows keep the existing synchronous filtering behavior. */
|
|
16415
|
+
const ASYNC_FILTER_ROW_THRESHOLD = 15000;
|
|
16416
|
+
/** Maximum rows evaluated in one filtering chunk. */
|
|
16417
|
+
const FILTER_CHUNK_SIZE = 1000;
|
|
16418
|
+
/** Yield after approximately this much accumulated filtering work. */
|
|
16419
|
+
const FILTER_TIME_BUDGET_MS = 5;
|
|
16420
|
+
|
|
16318
16421
|
// filter.plugin.tsx
|
|
16319
16422
|
const FILTER_TRIMMED_TYPE = 'filter';
|
|
16320
16423
|
const FILTER_CONFIG_CHANGED_EVENT = 'filterconfigchanged';
|
|
@@ -16359,6 +16462,7 @@ class FilterPlugin extends BasePlugin {
|
|
|
16359
16462
|
this.filterFunctionsIndexedByType = Object.assign({}, filterCoreFunctionsIndexedByType);
|
|
16360
16463
|
this.filterProp = FILTER_PROP;
|
|
16361
16464
|
this.allowDuplicateOperators = true;
|
|
16465
|
+
this.filteringRunId = 0;
|
|
16362
16466
|
if (config) {
|
|
16363
16467
|
this.initConfig(config);
|
|
16364
16468
|
}
|
|
@@ -16367,7 +16471,7 @@ class FilterPlugin extends BasePlugin {
|
|
|
16367
16471
|
...existingNodes,
|
|
16368
16472
|
hAsync("revogr-filter-panel", { filterNames: this.filterNameIndexByType, filterEntities: this.filterFunctionsIndexedByType, filterCaptions: (_a = config === null || config === void 0 ? void 0 : config.localization) === null || _a === void 0 ? void 0 : _a.captions, onFilterChange: e => this.onFilterChange(e.detail), onResetChange: e => this.onFilterReset(e.detail), disableDynamicFiltering: config === null || config === void 0 ? void 0 : config.disableDynamicFiltering, closeOnOutsideClick: config === null || config === void 0 ? void 0 : config.closeFilterPanelOnOutsideClick, allowDuplicateOperators: this.allowDuplicateOperators, ref: e => (this.pop = e) }, ' ', this.extraContent()),
|
|
16369
16473
|
];
|
|
16370
|
-
const aftersourceset =
|
|
16474
|
+
const aftersourceset = () => {
|
|
16371
16475
|
const filterCollectionProps = Object.keys(this.filterCollection);
|
|
16372
16476
|
if (filterCollectionProps.length > 0) {
|
|
16373
16477
|
// handle old way of filtering by reworking FilterCollection to new MultiFilterItem
|
|
@@ -16384,12 +16488,26 @@ class FilterPlugin extends BasePlugin {
|
|
|
16384
16488
|
}
|
|
16385
16489
|
});
|
|
16386
16490
|
}
|
|
16387
|
-
if (
|
|
16491
|
+
if (!this.hasActiveFilters()) {
|
|
16492
|
+
this.cancelFiltering();
|
|
16388
16493
|
return;
|
|
16389
16494
|
}
|
|
16390
|
-
|
|
16391
|
-
await this.runFiltering(this.multiFilterItems);
|
|
16495
|
+
void this.runFiltering(this.multiFilterItems);
|
|
16392
16496
|
};
|
|
16497
|
+
/**
|
|
16498
|
+
* This executes before the data store replaces its source.
|
|
16499
|
+
* For a large source with active filters:
|
|
16500
|
+
* 1. Existing filtering runs are invalidated.
|
|
16501
|
+
* 2. Pending state starts.
|
|
16502
|
+
* 3. Visible rows become empty.
|
|
16503
|
+
* 4. The source is replaced while the DataStore guard prevents it from exposing unfiltered rows.
|
|
16504
|
+
*/
|
|
16505
|
+
this.addEventListener('beforesourceset', ({ detail }) => {
|
|
16506
|
+
if (detail.source.length >= ASYNC_FILTER_ROW_THRESHOLD &&
|
|
16507
|
+
this.hasActiveFilters()) {
|
|
16508
|
+
this.deferFiltering();
|
|
16509
|
+
}
|
|
16510
|
+
});
|
|
16393
16511
|
this.addEventListener('headerclick', e => this.headerclick(e));
|
|
16394
16512
|
this.addEventListener(FILTER_CONFIG_CHANGED_EVENT, ({ detail }) => {
|
|
16395
16513
|
if (!detail) {
|
|
@@ -16550,7 +16668,7 @@ class FilterPlugin extends BasePlugin {
|
|
|
16550
16668
|
// store the filter items
|
|
16551
16669
|
this.multiFilterItems = filterItems;
|
|
16552
16670
|
// run the filtering when the items change
|
|
16553
|
-
this.runFiltering(this.multiFilterItems);
|
|
16671
|
+
await this.runFiltering(this.multiFilterItems);
|
|
16554
16672
|
}
|
|
16555
16673
|
onFilterReset(prop) {
|
|
16556
16674
|
delete this.multiFilterItems[prop !== null && prop !== void 0 ? prop : ''];
|
|
@@ -16560,6 +16678,8 @@ class FilterPlugin extends BasePlugin {
|
|
|
16560
16678
|
* Triggers grid filtering
|
|
16561
16679
|
*/
|
|
16562
16680
|
async doFiltering(collection, source, columns, filterItems) {
|
|
16681
|
+
// creates the execution token - owns the actual calculation
|
|
16682
|
+
const runId = this.beginFiltering();
|
|
16563
16683
|
const columnsToUpdate = [];
|
|
16564
16684
|
/**
|
|
16565
16685
|
* Loop through the columns and update the columns that need to be updated with the `hasFilter` property.
|
|
@@ -16584,7 +16704,25 @@ class FilterPlugin extends BasePlugin {
|
|
|
16584
16704
|
column[this.filterProp] = true;
|
|
16585
16705
|
}
|
|
16586
16706
|
});
|
|
16587
|
-
|
|
16707
|
+
let itemsToTrim;
|
|
16708
|
+
const hasFilters = Object.keys(filterItems).length > 0 || this.hasActiveFilters();
|
|
16709
|
+
const isLargeSource = hasFilters && source.length >= ASYNC_FILTER_ROW_THRESHOLD;
|
|
16710
|
+
if (isLargeSource) {
|
|
16711
|
+
this.providers.data.setItemsPending(true);
|
|
16712
|
+
await timeout();
|
|
16713
|
+
}
|
|
16714
|
+
if (!hasFilters) {
|
|
16715
|
+
itemsToTrim = {};
|
|
16716
|
+
}
|
|
16717
|
+
else if (isLargeSource && this.supportsChunkedFiltering()) {
|
|
16718
|
+
itemsToTrim = await this.getRowFilterInChunks(source, filterItems, columnByProp, runId);
|
|
16719
|
+
}
|
|
16720
|
+
else {
|
|
16721
|
+
itemsToTrim = this.getRowFilter(source, filterItems, columnByProp);
|
|
16722
|
+
}
|
|
16723
|
+
if (!itemsToTrim || runId !== this.filteringRunId) {
|
|
16724
|
+
return;
|
|
16725
|
+
}
|
|
16588
16726
|
// check is filter event prevented
|
|
16589
16727
|
const { defaultPrevented, detail } = this.emit('beforefiltertrimmed', {
|
|
16590
16728
|
collection,
|
|
@@ -16592,10 +16730,12 @@ class FilterPlugin extends BasePlugin {
|
|
|
16592
16730
|
source,
|
|
16593
16731
|
filterItems,
|
|
16594
16732
|
});
|
|
16595
|
-
if (defaultPrevented) {
|
|
16733
|
+
if (defaultPrevented || runId !== this.filteringRunId) {
|
|
16734
|
+
this.releaseFiltering(runId);
|
|
16596
16735
|
return;
|
|
16597
16736
|
}
|
|
16598
16737
|
this.providers.data.setTrimmed({ [FILTER_TRIMMED_TYPE]: detail.itemsToFilter });
|
|
16738
|
+
this.releaseFiltering(runId);
|
|
16599
16739
|
// applies the hasFilter to the columns to show filter icon
|
|
16600
16740
|
this.providers.column.updateColumns(columnsToUpdate);
|
|
16601
16741
|
this.emit('afterfilterapply', {
|
|
@@ -16609,6 +16749,10 @@ class FilterPlugin extends BasePlugin {
|
|
|
16609
16749
|
await this.runFiltering(this.multiFilterItems);
|
|
16610
16750
|
}
|
|
16611
16751
|
async runFiltering(multiFilterItems) {
|
|
16752
|
+
// runFiltering: First token: "Is this request still valid after event handlers run?"
|
|
16753
|
+
// doFiltering: Second token: "Is this calculation still the newest one?"
|
|
16754
|
+
// creates a preflight token and sets the grid to a pending state
|
|
16755
|
+
const runId = this.beginFiltering();
|
|
16612
16756
|
const collection = {};
|
|
16613
16757
|
// handle old filterCollection to return the first filter only (if any) from multiFilterItems
|
|
16614
16758
|
const filterProps = Object.keys(multiFilterItems);
|
|
@@ -16632,10 +16776,67 @@ class FilterPlugin extends BasePlugin {
|
|
|
16632
16776
|
columns,
|
|
16633
16777
|
filterItems: this.multiFilterItems,
|
|
16634
16778
|
});
|
|
16635
|
-
if (defaultPrevented) {
|
|
16779
|
+
if (defaultPrevented || runId !== this.filteringRunId) {
|
|
16780
|
+
this.releaseFiltering(runId);
|
|
16636
16781
|
return;
|
|
16637
16782
|
}
|
|
16638
|
-
this.doFiltering(detail.collection, detail.source, detail.columns, detail.filterItems);
|
|
16783
|
+
await this.doFiltering(detail.collection, detail.source, detail.columns, detail.filterItems);
|
|
16784
|
+
}
|
|
16785
|
+
/** Whether this plugin currently owns filter state that must follow a new source. */
|
|
16786
|
+
hasActiveFilters() {
|
|
16787
|
+
return (Object.keys(this.multiFilterItems).length > 0 ||
|
|
16788
|
+
Object.keys(this.filterCollection).length > 0);
|
|
16789
|
+
}
|
|
16790
|
+
/** Preserve whole-source semantics for plugins that override getRowFilter. */
|
|
16791
|
+
supportsChunkedFiltering() {
|
|
16792
|
+
return this.getRowFilter === FilterPlugin.prototype.getRowFilter;
|
|
16793
|
+
}
|
|
16794
|
+
/**
|
|
16795
|
+
* Hide visible rows and invalidate current filtering until a deferred filter
|
|
16796
|
+
* run is ready. Used by filter extensions with their own debounced state.
|
|
16797
|
+
*/
|
|
16798
|
+
deferFiltering() {
|
|
16799
|
+
this.beginFiltering(true);
|
|
16800
|
+
}
|
|
16801
|
+
beginFiltering(pending = false) {
|
|
16802
|
+
const runId = ++this.filteringRunId;
|
|
16803
|
+
if (pending) {
|
|
16804
|
+
this.providers.data.setItemsPending(true);
|
|
16805
|
+
}
|
|
16806
|
+
return runId;
|
|
16807
|
+
}
|
|
16808
|
+
releaseFiltering(runId) {
|
|
16809
|
+
if (runId === this.filteringRunId) {
|
|
16810
|
+
this.providers.data.setItemsPending(false);
|
|
16811
|
+
}
|
|
16812
|
+
}
|
|
16813
|
+
cancelFiltering() {
|
|
16814
|
+
this.releaseFiltering(this.beginFiltering());
|
|
16815
|
+
}
|
|
16816
|
+
async getRowFilterInChunks(rows, filterItems, columnByProp, runId) {
|
|
16817
|
+
const trimmed = {};
|
|
16818
|
+
let sliceStarted = performance.now();
|
|
16819
|
+
for (let offset = 0; offset < rows.length; offset += FILTER_CHUNK_SIZE) {
|
|
16820
|
+
if (runId !== this.filteringRunId) {
|
|
16821
|
+
return;
|
|
16822
|
+
}
|
|
16823
|
+
const end = Math.min(offset + FILTER_CHUNK_SIZE, rows.length);
|
|
16824
|
+
const chunkTrimmed = this.getRowFilter(rows.slice(offset, end), filterItems, columnByProp);
|
|
16825
|
+
// filter that chunk
|
|
16826
|
+
for (const chunkIndex in chunkTrimmed) {
|
|
16827
|
+
trimmed[offset + Number(chunkIndex)] = true;
|
|
16828
|
+
}
|
|
16829
|
+
if (end < rows.length &&
|
|
16830
|
+
performance.now() - sliceStarted >= FILTER_TIME_BUDGET_MS) {
|
|
16831
|
+
await timeout();
|
|
16832
|
+
sliceStarted = performance.now();
|
|
16833
|
+
}
|
|
16834
|
+
}
|
|
16835
|
+
return runId === this.filteringRunId ? trimmed : undefined;
|
|
16836
|
+
}
|
|
16837
|
+
destroy() {
|
|
16838
|
+
this.cancelFiltering();
|
|
16839
|
+
super.destroy();
|
|
16639
16840
|
}
|
|
16640
16841
|
/**
|
|
16641
16842
|
* Get trimmed rows based on filter
|
|
@@ -16739,6 +16940,60 @@ function allAndConditionsSatisfied(pendingResults) {
|
|
|
16739
16940
|
return !pendingResults.includes(true);
|
|
16740
16941
|
}
|
|
16741
16942
|
|
|
16943
|
+
/**
|
|
16944
|
+
* Restores group headers around already-sorted data indexes without rebuilding
|
|
16945
|
+
* the physical source. Group insertion order follows the first sorted member,
|
|
16946
|
+
* matching the order produced by regrouping a sorted source.
|
|
16947
|
+
*/
|
|
16948
|
+
function gatherGroupedRowIndexes(source, sortedDataIndexes) {
|
|
16949
|
+
const groupPathByDataIndex = new Map();
|
|
16950
|
+
const currentGroupPath = [];
|
|
16951
|
+
source.forEach((model, physicalIndex) => {
|
|
16952
|
+
if (isGrouping(model)) {
|
|
16953
|
+
const depth = model[GROUP_DEPTH];
|
|
16954
|
+
if (typeof depth !== 'number') {
|
|
16955
|
+
return;
|
|
16956
|
+
}
|
|
16957
|
+
currentGroupPath.length = depth;
|
|
16958
|
+
currentGroupPath[depth] = physicalIndex;
|
|
16959
|
+
return;
|
|
16960
|
+
}
|
|
16961
|
+
if (model != null) {
|
|
16962
|
+
groupPathByDataIndex.set(physicalIndex, [...currentGroupPath]);
|
|
16963
|
+
}
|
|
16964
|
+
});
|
|
16965
|
+
const root = {
|
|
16966
|
+
children: new Map(),
|
|
16967
|
+
items: [],
|
|
16968
|
+
};
|
|
16969
|
+
for (const physicalIndex of sortedDataIndexes) {
|
|
16970
|
+
const groupPath = groupPathByDataIndex.get(physicalIndex);
|
|
16971
|
+
if (!(groupPath === null || groupPath === void 0 ? void 0 : groupPath.length)) {
|
|
16972
|
+
return undefined;
|
|
16973
|
+
}
|
|
16974
|
+
let node = root;
|
|
16975
|
+
for (const groupIndex of groupPath) {
|
|
16976
|
+
let child = node.children.get(groupIndex);
|
|
16977
|
+
if (!child) {
|
|
16978
|
+
child = { children: new Map(), items: [] };
|
|
16979
|
+
node.children.set(groupIndex, child);
|
|
16980
|
+
}
|
|
16981
|
+
node = child;
|
|
16982
|
+
}
|
|
16983
|
+
node.items.push(physicalIndex);
|
|
16984
|
+
}
|
|
16985
|
+
const groupedIndexes = [];
|
|
16986
|
+
const appendNode = (node) => {
|
|
16987
|
+
node.children.forEach((child, groupIndex) => {
|
|
16988
|
+
groupedIndexes.push(groupIndex);
|
|
16989
|
+
appendNode(child);
|
|
16990
|
+
});
|
|
16991
|
+
groupedIndexes.push(...node.items);
|
|
16992
|
+
};
|
|
16993
|
+
appendNode(root);
|
|
16994
|
+
return groupedIndexes;
|
|
16995
|
+
}
|
|
16996
|
+
|
|
16742
16997
|
/**
|
|
16743
16998
|
* Checks whether a sorting map contains at least one active order.
|
|
16744
16999
|
*
|
|
@@ -16987,18 +17242,6 @@ const SortingSign = ({ column }) => {
|
|
|
16987
17242
|
function getSortableRowIndexes(indexes, source) {
|
|
16988
17243
|
return indexes.filter(index => !isGrouping(source[index]));
|
|
16989
17244
|
}
|
|
16990
|
-
function mergeSortedRowsWithGroups(indexes, source, sortedRows) {
|
|
16991
|
-
if (sortedRows.length === indexes.length) {
|
|
16992
|
-
return sortedRows;
|
|
16993
|
-
}
|
|
16994
|
-
let rowIndex = 0;
|
|
16995
|
-
return indexes.map(index => {
|
|
16996
|
-
if (isGrouping(source[index])) {
|
|
16997
|
-
return index;
|
|
16998
|
-
}
|
|
16999
|
-
return sortedRows[rowIndex++];
|
|
17000
|
-
});
|
|
17001
|
-
}
|
|
17002
17245
|
/**
|
|
17003
17246
|
* Lifecycle
|
|
17004
17247
|
* 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.
|
|
@@ -17158,6 +17401,7 @@ class SortingPlugin extends BasePlugin {
|
|
|
17158
17401
|
storeService.setData({ proxyItems: newItemsOrder });
|
|
17159
17402
|
}
|
|
17160
17403
|
applySortingForStore(type, sorting, sortingFunc, sortingColumns, sortingOrder, ignoreViewportUpdate) {
|
|
17404
|
+
var _a;
|
|
17161
17405
|
const storeService = this.providers.data.stores[type];
|
|
17162
17406
|
// row data
|
|
17163
17407
|
const source = storeService.store.get('source');
|
|
@@ -17165,7 +17409,10 @@ class SortingPlugin extends BasePlugin {
|
|
|
17165
17409
|
const proxyItems = storeService.store.get('proxyItems');
|
|
17166
17410
|
const sortItems = getSortableRowIndexes(proxyItems, source);
|
|
17167
17411
|
const sortedItems = sortIndexByItems([...sortItems], source, sortingFunc, sorting, sortingColumns, sortingOrder);
|
|
17168
|
-
const
|
|
17412
|
+
const hasGroupingRows = sortedItems.length !== proxyItems.length;
|
|
17413
|
+
const newItemsOrder = hasGroupingRows
|
|
17414
|
+
? (_a = gatherGroupedRowIndexes(source, sortedItems)) !== null && _a !== void 0 ? _a : proxyItems
|
|
17415
|
+
: sortedItems;
|
|
17169
17416
|
// take row indexes before trim applied and proxy items
|
|
17170
17417
|
const prevItems = storeService.store.get('items');
|
|
17171
17418
|
storeService.setData({
|
|
@@ -17191,6 +17438,16 @@ class SortingPlugin extends BasePlugin {
|
|
|
17191
17438
|
}
|
|
17192
17439
|
this.postponeSort(order, sortingFunc, sortingColumns, sortingOrder, ignoreViewportUpdate);
|
|
17193
17440
|
}
|
|
17441
|
+
/**
|
|
17442
|
+
* Schedules the current active sort again after another plugin rebuilds row
|
|
17443
|
+
* proxy indexes while keeping the physical source unchanged.
|
|
17444
|
+
*/
|
|
17445
|
+
reapplySorting() {
|
|
17446
|
+
if (!hasActiveSorting(this.sorting) || !this.sortingFunc) {
|
|
17447
|
+
return;
|
|
17448
|
+
}
|
|
17449
|
+
this.startSorting(this.sorting, this.sortingFunc, this.sortingColumns, this.sortingOrder);
|
|
17450
|
+
}
|
|
17194
17451
|
/**
|
|
17195
17452
|
* Applies sorting requested by a sortable header click.
|
|
17196
17453
|
*
|
|
@@ -17709,8 +17966,10 @@ const TRIMMED_GROUPING = 'grouping';
|
|
|
17709
17966
|
* against the grouped physical source can still be remapped. If neither path
|
|
17710
17967
|
* resolves to a number, the caller drops the stale trim entry.
|
|
17711
17968
|
*/
|
|
17712
|
-
function
|
|
17713
|
-
const sourceIndex =
|
|
17969
|
+
function convertGroupingIndex(initialIndex, firstLevelMap, secondLevelMap) {
|
|
17970
|
+
const sourceIndex = typeof initialIndex === 'number'
|
|
17971
|
+
? initialIndex
|
|
17972
|
+
: Number.parseInt(initialIndex, 10);
|
|
17714
17973
|
const firstConversionIndex = firstLevelMap[sourceIndex];
|
|
17715
17974
|
if (!secondLevelMap) {
|
|
17716
17975
|
return firstConversionIndex;
|
|
@@ -17743,7 +18002,7 @@ function processDoubleConversionTrimmed(initiallyTrimed, firstLevelMap, secondLe
|
|
|
17743
18002
|
* if item exists we find it in collection
|
|
17744
18003
|
* we support 2 level of conversions
|
|
17745
18004
|
*/
|
|
17746
|
-
const newConversionIndex =
|
|
18005
|
+
const newConversionIndex = convertGroupingIndex(initialIndex, firstLevelMap, secondLevelMap);
|
|
17747
18006
|
// Group rows do not exist in the ungrouped index map and must not leak into new trims.
|
|
17748
18007
|
if (typeof newConversionIndex !== 'number') {
|
|
17749
18008
|
continue;
|
|
@@ -17804,7 +18063,7 @@ function filterOutEmptyGroupRows(source, filterTrimmed) {
|
|
|
17804
18063
|
return trimmed;
|
|
17805
18064
|
}
|
|
17806
18065
|
|
|
17807
|
-
var __rest
|
|
18066
|
+
var __rest = (undefined && undefined.__rest) || function (s, e) {
|
|
17808
18067
|
var t = {};
|
|
17809
18068
|
for (var p in s)
|
|
17810
18069
|
if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
|
|
@@ -17818,7 +18077,7 @@ var __rest$1 = (undefined && undefined.__rest) || function (s, e) {
|
|
|
17818
18077
|
};
|
|
17819
18078
|
const PADDING_DEPTH = 10;
|
|
17820
18079
|
const RowRenderer = (_a, cells) => {
|
|
17821
|
-
var { rowClass, index, size, start, depth, groupingLevel } = _a, attrs = __rest
|
|
18080
|
+
var { rowClass, index, size, start, depth, groupingLevel } = _a, attrs = __rest(_a, ["rowClass", "index", "size", "start", "depth", "groupingLevel"]);
|
|
17822
18081
|
const props = Object.assign(Object.assign(Object.assign({}, attrs), { [DATA_ROW]: index }), (typeof groupingLevel === 'number'
|
|
17823
18082
|
? { 'data-level': groupingLevel }
|
|
17824
18083
|
: {}));
|
|
@@ -17910,7 +18169,7 @@ const GroupingRowRenderer = (props) => {
|
|
|
17910
18169
|
depth })))));
|
|
17911
18170
|
}
|
|
17912
18171
|
return (hAsync(RowRenderer, Object.assign({}, props, groupRowAttrs), hasExpand && [
|
|
17913
|
-
hAsync("button", { class: { [GROUP_EXPAND_BTN]: true }, onClick: e => expandEvent(e, model, itemIndex) }, expandSvgIconVNode(expanded)),
|
|
18172
|
+
hAsync("button", { type: "button", class: { [GROUP_EXPAND_BTN]: true }, onClick: e => expandEvent(e, model, itemIndex) }, expandSvgIconVNode(expanded)),
|
|
17914
18173
|
String(name),
|
|
17915
18174
|
]));
|
|
17916
18175
|
};
|
|
@@ -17918,18 +18177,6 @@ const expandSvgIconVNode = (expanded = false) => {
|
|
|
17918
18177
|
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" })));
|
|
17919
18178
|
};
|
|
17920
18179
|
|
|
17921
|
-
var __rest = (undefined && undefined.__rest) || function (s, e) {
|
|
17922
|
-
var t = {};
|
|
17923
|
-
for (var p in s)
|
|
17924
|
-
if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
|
|
17925
|
-
t[p] = s[p];
|
|
17926
|
-
if (s != null && typeof Object.getOwnPropertySymbols === "function")
|
|
17927
|
-
for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
|
|
17928
|
-
if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
|
|
17929
|
-
t[p[i]] = s[p[i]];
|
|
17930
|
-
}
|
|
17931
|
-
return t;
|
|
17932
|
-
};
|
|
17933
18180
|
class GroupingRowPlugin extends BasePlugin {
|
|
17934
18181
|
getStore(type = GROUPING_ROW_TYPE) {
|
|
17935
18182
|
return this.providers.data.stores[type].store;
|
|
@@ -17945,15 +18192,16 @@ class GroupingRowPlugin extends BasePlugin {
|
|
|
17945
18192
|
}
|
|
17946
18193
|
// expand event triggered
|
|
17947
18194
|
onExpand({ virtualIndex }) {
|
|
17948
|
-
const
|
|
17949
|
-
|
|
17950
|
-
let
|
|
18195
|
+
const store = this.getStore();
|
|
18196
|
+
const source = store.get('source');
|
|
18197
|
+
let newTrimmed = store.get('trimmed')[TRIMMED_GROUPING];
|
|
18198
|
+
const i = getPhysical(store, virtualIndex);
|
|
17951
18199
|
const isExpanded = getExpanded(source[i]);
|
|
17952
18200
|
if (!isExpanded) {
|
|
17953
|
-
const { trimmed, items } = doExpand(virtualIndex, source,
|
|
18201
|
+
const { trimmed, items: expandedItems } = doExpand(virtualIndex, source, store.get('items'));
|
|
17954
18202
|
newTrimmed = Object.assign(Object.assign({}, newTrimmed), trimmed);
|
|
17955
|
-
if (
|
|
17956
|
-
setItems(
|
|
18203
|
+
if (expandedItems) {
|
|
18204
|
+
setItems(store, expandedItems);
|
|
17957
18205
|
}
|
|
17958
18206
|
}
|
|
17959
18207
|
else {
|
|
@@ -17961,7 +18209,7 @@ class GroupingRowPlugin extends BasePlugin {
|
|
|
17961
18209
|
newTrimmed = Object.assign(Object.assign({}, newTrimmed), trimmed);
|
|
17962
18210
|
this.revogrid.clearFocus();
|
|
17963
18211
|
}
|
|
17964
|
-
|
|
18212
|
+
store.set('source', source);
|
|
17965
18213
|
this.revogrid.addTrimmed(newTrimmed, TRIMMED_GROUPING);
|
|
17966
18214
|
}
|
|
17967
18215
|
setColumnGrouping(cols) {
|
|
@@ -17983,7 +18231,7 @@ class GroupingRowPlugin extends BasePlugin {
|
|
|
17983
18231
|
onDrag(e) {
|
|
17984
18232
|
const { from, to } = e.detail;
|
|
17985
18233
|
const isDown = to - from >= 0;
|
|
17986
|
-
const
|
|
18234
|
+
const source = this.getStore().get('source');
|
|
17987
18235
|
const items = this.getStore().get('items');
|
|
17988
18236
|
let i = isDown ? from : to;
|
|
17989
18237
|
const end = isDown ? to : from;
|
|
@@ -18009,21 +18257,13 @@ class GroupingRowPlugin extends BasePlugin {
|
|
|
18009
18257
|
const source = this.getStore().get('source');
|
|
18010
18258
|
return filterOutEmptyGroupRows(source, trimmed);
|
|
18011
18259
|
}
|
|
18012
|
-
isSortingRunning() {
|
|
18013
|
-
const sortingPlugin = this.providers.plugins.getByClass(SortingPlugin);
|
|
18014
|
-
return !!(sortingPlugin === null || sortingPlugin === void 0 ? void 0 : sortingPlugin.sortingPromise);
|
|
18015
|
-
}
|
|
18016
18260
|
/**
|
|
18017
|
-
*
|
|
18018
|
-
*
|
|
18019
|
-
*
|
|
18020
|
-
* Reusing them after sorting would reopen groups the user collapsed before
|
|
18021
|
-
* sorting instead of using the current grouped source state.
|
|
18261
|
+
* Sorting changes proxy order without changing the physical source baseline.
|
|
18262
|
+
* Other proxy changes, such as row dragging, are user-authored source order
|
|
18263
|
+
* and must be retained when grouping is rebuilt.
|
|
18022
18264
|
*/
|
|
18023
|
-
|
|
18024
|
-
|
|
18025
|
-
const _b = (_a = this.options) !== null && _a !== void 0 ? _a : {}, options = __rest(_b, ["expandedAll", "prevExpanded"]);
|
|
18026
|
-
return options;
|
|
18265
|
+
isSortingActiveOrPending(sortingPlugin) {
|
|
18266
|
+
return !!(sortingPlugin === null || sortingPlugin === void 0 ? void 0 : sortingPlugin.sortingPromise) || hasActiveSorting(sortingPlugin === null || sortingPlugin === void 0 ? void 0 : sortingPlugin.sorting);
|
|
18027
18267
|
}
|
|
18028
18268
|
/**
|
|
18029
18269
|
* Starts global source update with group clearing and applying new one
|
|
@@ -18036,7 +18276,12 @@ class GroupingRowPlugin extends BasePlugin {
|
|
|
18036
18276
|
* @param newOldIndexMap - provides us mapping with new indexes vs old indexes, we would use it for trimmed mapping
|
|
18037
18277
|
*/
|
|
18038
18278
|
const store = this.getStore();
|
|
18039
|
-
const
|
|
18279
|
+
const sortingPlugin = this.providers.plugins.getByClass(SortingPlugin);
|
|
18280
|
+
const currentSource = store.get('source');
|
|
18281
|
+
const sourceItems = this.isSortingActiveOrPending(sortingPlugin)
|
|
18282
|
+
? currentSource.map((_, index) => index)
|
|
18283
|
+
: store.get('proxyItems');
|
|
18284
|
+
const { source, prevExpanded, oldNewIndexes } = getSource(currentSource, sourceItems, true);
|
|
18040
18285
|
const expanded = Object.assign({ prevExpanded }, options);
|
|
18041
18286
|
/**
|
|
18042
18287
|
* Group again
|
|
@@ -18046,8 +18291,13 @@ class GroupingRowPlugin extends BasePlugin {
|
|
|
18046
18291
|
const customRenderer = options === null || options === void 0 ? void 0 : options.groupLabelTemplate;
|
|
18047
18292
|
const cellRenderer = options === null || options === void 0 ? void 0 : options.groupCellTemplate;
|
|
18048
18293
|
// setup source
|
|
18294
|
+
this.revogrid.dispatchEvent(new CustomEvent(BEFORE_GROUPING_APPLY_EVENT));
|
|
18049
18295
|
this.providers.data.setData(sourceWithGroups, GROUPING_ROW_TYPE, this.revogrid.disableVirtualY, { depth, customRenderer, cellRenderer }, true);
|
|
18296
|
+
this.remapRowDefinitions(oldNewIndexes !== null && oldNewIndexes !== void 0 ? oldNewIndexes : {}, oldNewIndexMap, currentSource, sourceWithGroups);
|
|
18050
18297
|
this.updateTrimmed(trimmed, oldNewIndexes !== null && oldNewIndexes !== void 0 ? oldNewIndexes : {}, oldNewIndexMap, sourceWithGroups);
|
|
18298
|
+
if (hasActiveSorting(sortingPlugin === null || sortingPlugin === void 0 ? void 0 : sortingPlugin.sorting)) {
|
|
18299
|
+
sortingPlugin === null || sortingPlugin === void 0 ? void 0 : sortingPlugin.reapplySorting();
|
|
18300
|
+
}
|
|
18051
18301
|
}
|
|
18052
18302
|
/**
|
|
18053
18303
|
* Apply grouping on data set
|
|
@@ -18056,9 +18306,14 @@ class GroupingRowPlugin extends BasePlugin {
|
|
|
18056
18306
|
*/
|
|
18057
18307
|
onDataSet(data) {
|
|
18058
18308
|
var _a, _b, _c;
|
|
18309
|
+
const currentSource = this.getStore().get('source');
|
|
18310
|
+
const sortingPlugin = this.providers.plugins.getByClass(SortingPlugin);
|
|
18311
|
+
const currentItems = this.isSortingActiveOrPending(sortingPlugin)
|
|
18312
|
+
? currentSource.map((_, index) => index)
|
|
18313
|
+
: this.getStore().get('proxyItems');
|
|
18314
|
+
const { prevExpanded, oldNewIndexes } = getSource(currentSource, currentItems, true);
|
|
18059
18315
|
let preservedExpanded = {};
|
|
18060
18316
|
if (((_a = this.options) === null || _a === void 0 ? void 0 : _a.preserveGroupingOnUpdate) !== false) {
|
|
18061
|
-
let { prevExpanded } = getSource(this.getStore().get('source'), this.getStore().get('proxyItems'), true);
|
|
18062
18317
|
preservedExpanded = prevExpanded;
|
|
18063
18318
|
}
|
|
18064
18319
|
const source = data.source.filter(s => !isGrouping(s));
|
|
@@ -18070,7 +18325,8 @@ class GroupingRowPlugin extends BasePlugin {
|
|
|
18070
18325
|
customRenderer: options.groupLabelTemplate,
|
|
18071
18326
|
cellRenderer: options.groupCellTemplate,
|
|
18072
18327
|
});
|
|
18073
|
-
this.
|
|
18328
|
+
queueMicrotask(() => this.remapRowDefinitions(oldNewIndexes !== null && oldNewIndexes !== void 0 ? oldNewIndexes : {}, oldNewIndexMap, currentSource, sourceWithGroups));
|
|
18329
|
+
this.updateTrimmed(trimmed, oldNewIndexMap, undefined, sourceWithGroups, { filterTrimmedMode: 'recompute-after-source-set' });
|
|
18074
18330
|
}
|
|
18075
18331
|
/**
|
|
18076
18332
|
* External call to apply grouping. Called by revogrid when prop changed.
|
|
@@ -18105,10 +18361,6 @@ class GroupingRowPlugin extends BasePlugin {
|
|
|
18105
18361
|
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))) {
|
|
18106
18362
|
return;
|
|
18107
18363
|
}
|
|
18108
|
-
// if sorting is running don't apply grouping, wait for sorting, then it'll apply in @aftersortingapply
|
|
18109
|
-
if (this.isSortingRunning()) {
|
|
18110
|
-
return;
|
|
18111
|
-
}
|
|
18112
18364
|
this.onDataSet(detail);
|
|
18113
18365
|
});
|
|
18114
18366
|
this.addEventListener('beforecolumnsset', ({ detail }) => {
|
|
@@ -18123,17 +18375,6 @@ class GroupingRowPlugin extends BasePlugin {
|
|
|
18123
18375
|
this.addEventListener('beforefiltertrimmed', ({ detail }) => {
|
|
18124
18376
|
detail.itemsToFilter = this.beforeFilterTrimmed(detail.itemsToFilter);
|
|
18125
18377
|
});
|
|
18126
|
-
/**
|
|
18127
|
-
* sorting applied need to clear grouping and apply again
|
|
18128
|
-
* based on new results whole grouping order will changed
|
|
18129
|
-
*/
|
|
18130
|
-
this.addEventListener('aftersortingapply', () => {
|
|
18131
|
-
var _a, _b;
|
|
18132
|
-
if (!((_b = (_a = this.options) === null || _a === void 0 ? void 0 : _a.props) === null || _b === void 0 ? void 0 : _b.length)) {
|
|
18133
|
-
return;
|
|
18134
|
-
}
|
|
18135
|
-
this.doSourceUpdate(this.getCurrentExpandedOptions());
|
|
18136
|
-
});
|
|
18137
18378
|
/**
|
|
18138
18379
|
* Apply logic for focus inside of grouping
|
|
18139
18380
|
* We can't focus on grouping rows, navigation only inside of groups for now
|
|
@@ -18166,14 +18407,69 @@ class GroupingRowPlugin extends BasePlugin {
|
|
|
18166
18407
|
}
|
|
18167
18408
|
});
|
|
18168
18409
|
// clear rows
|
|
18169
|
-
const
|
|
18410
|
+
const store = this.getStore();
|
|
18411
|
+
const sortingPlugin = this.providers.plugins.getByClass(SortingPlugin);
|
|
18412
|
+
const currentSource = store.get('source');
|
|
18413
|
+
const sourceItems = this.isSortingActiveOrPending(sortingPlugin)
|
|
18414
|
+
? currentSource.map((_, index) => index)
|
|
18415
|
+
: store.get('proxyItems');
|
|
18416
|
+
const { source, oldNewIndexes } = getSource(currentSource, sourceItems, true);
|
|
18417
|
+
this.revogrid.dispatchEvent(new CustomEvent(BEFORE_GROUPING_APPLY_EVENT));
|
|
18170
18418
|
this.providers.data.setData(source, GROUPING_ROW_TYPE, this.revogrid.disableVirtualY, undefined, true);
|
|
18419
|
+
this.remapRowDefinitions(oldNewIndexes !== null && oldNewIndexes !== void 0 ? oldNewIndexes : {}, undefined, currentSource, source);
|
|
18171
18420
|
this.updateTrimmed(undefined, undefined, oldNewIndexes, source);
|
|
18421
|
+
if (hasActiveSorting(sortingPlugin === null || sortingPlugin === void 0 ? void 0 : sortingPlugin.sorting)) {
|
|
18422
|
+
sortingPlugin === null || sortingPlugin === void 0 ? void 0 : sortingPlugin.reapplySorting();
|
|
18423
|
+
}
|
|
18424
|
+
}
|
|
18425
|
+
remapRowDefinitions(firstLevelMap, secondLevelMap, previousSource, nextSource) {
|
|
18426
|
+
const definitions = this.providers.dimension.getRowDefinitions();
|
|
18427
|
+
const nextGroupIndexes = new Map();
|
|
18428
|
+
nextSource === null || nextSource === void 0 ? void 0 : nextSource.forEach((row, index) => {
|
|
18429
|
+
const groupId = row[PSEUDO_GROUP_ITEM_ID];
|
|
18430
|
+
if (groupId && !nextGroupIndexes.has(groupId)) {
|
|
18431
|
+
nextGroupIndexes.set(groupId, index);
|
|
18432
|
+
}
|
|
18433
|
+
});
|
|
18434
|
+
let changed = false;
|
|
18435
|
+
const remapped = definitions.flatMap(definition => {
|
|
18436
|
+
if (definition.type !== GROUPING_ROW_TYPE) {
|
|
18437
|
+
return [definition];
|
|
18438
|
+
}
|
|
18439
|
+
const previousRow = previousSource === null || previousSource === void 0 ? void 0 : previousSource[definition.index];
|
|
18440
|
+
const groupId = previousRow === null || previousRow === void 0 ? void 0 : previousRow[PSEUDO_GROUP_ITEM_ID];
|
|
18441
|
+
const index = groupId
|
|
18442
|
+
? nextGroupIndexes.get(groupId)
|
|
18443
|
+
: convertGroupingIndex(definition.index, firstLevelMap, secondLevelMap);
|
|
18444
|
+
if (typeof index !== 'number') {
|
|
18445
|
+
changed = true;
|
|
18446
|
+
return [];
|
|
18447
|
+
}
|
|
18448
|
+
if (index < 0) {
|
|
18449
|
+
changed = true;
|
|
18450
|
+
return [];
|
|
18451
|
+
}
|
|
18452
|
+
if (index === definition.index) {
|
|
18453
|
+
return [definition];
|
|
18454
|
+
}
|
|
18455
|
+
changed = true;
|
|
18456
|
+
return [Object.assign(Object.assign({}, definition), { index })];
|
|
18457
|
+
});
|
|
18458
|
+
if (changed) {
|
|
18459
|
+
this.providers.dimension.setRowDefinitions(remapped);
|
|
18460
|
+
}
|
|
18172
18461
|
}
|
|
18173
|
-
updateTrimmed(trimmedGroup = {}, firstLevelMap = {}, secondLevelMap, source = this.getStore().get('source')) {
|
|
18462
|
+
updateTrimmed(trimmedGroup = {}, firstLevelMap = {}, secondLevelMap, source = this.getStore().get('source'), { filterTrimmedMode = 'remap', } = {}) {
|
|
18174
18463
|
// map previously trimmed data
|
|
18175
18464
|
const trimemedOptionsToUpgrade = processDoubleConversionTrimmed(this.getStore().get('trimmed'), firstLevelMap, secondLevelMap);
|
|
18176
18465
|
for (let type in trimemedOptionsToUpgrade) {
|
|
18466
|
+
if (filterTrimmedMode === 'recompute-after-source-set' &&
|
|
18467
|
+
type === FILTER_TRIMMED_TYPE) {
|
|
18468
|
+
// The filter plugin recalculates this trim against the installed source
|
|
18469
|
+
// during aftersourceset. Reapplying remapped old indexes afterwards
|
|
18470
|
+
// would overwrite that fresh result.
|
|
18471
|
+
continue;
|
|
18472
|
+
}
|
|
18177
18473
|
if (type === FILTER_TRIMMED_TYPE) {
|
|
18178
18474
|
/** Regrouping changes physical indexes, so filter trim needs fresh group-header state. */
|
|
18179
18475
|
trimemedOptionsToUpgrade[type] = filterOutEmptyGroupRows(source, trimemedOptionsToUpgrade[type]);
|
|
@@ -18344,7 +18640,7 @@ class ViewportService {
|
|
|
18344
18640
|
const changedItems = {};
|
|
18345
18641
|
for (const i of Object.keys(detail || {})) {
|
|
18346
18642
|
const size = detail[i];
|
|
18347
|
-
const virtualIndex = parseInt(i, 10);
|
|
18643
|
+
const virtualIndex = Number.parseInt(i, 10);
|
|
18348
18644
|
const item = getSourceItem(store, virtualIndex);
|
|
18349
18645
|
if (item) {
|
|
18350
18646
|
changedItems[virtualIndex] = Object.assign(Object.assign({}, item), { size });
|
|
@@ -18473,29 +18769,25 @@ class GridScrollingService {
|
|
|
18473
18769
|
this.elements = {};
|
|
18474
18770
|
}
|
|
18475
18771
|
async proxyScroll(e, key, skipEvent) {
|
|
18476
|
-
var _a;
|
|
18477
18772
|
let newEventPromise;
|
|
18478
18773
|
let event = e;
|
|
18479
|
-
for (
|
|
18774
|
+
for (const elKey in (skipEvent ? {} : this.elements)) {
|
|
18480
18775
|
// skip
|
|
18481
18776
|
if (e.dimension === 'rgCol' && elKey === 'headerRow') {
|
|
18482
18777
|
continue;
|
|
18483
18778
|
// pinned column only
|
|
18484
18779
|
}
|
|
18485
|
-
|
|
18780
|
+
if (this.isPinnedColumn(key) && e.dimension === 'rgCol') {
|
|
18486
18781
|
if (elKey === key || !e.delta) {
|
|
18487
18782
|
continue;
|
|
18488
18783
|
}
|
|
18489
|
-
|
|
18490
|
-
|
|
18491
|
-
|
|
18492
|
-
}
|
|
18784
|
+
const changedEvent = this.changeScroll(this.elements[elKey], e);
|
|
18785
|
+
if (changedEvent) {
|
|
18786
|
+
newEventPromise = changedEvent;
|
|
18493
18787
|
}
|
|
18494
18788
|
}
|
|
18495
18789
|
else {
|
|
18496
|
-
|
|
18497
|
-
await ((_a = el.setScroll) === null || _a === void 0 ? void 0 : _a.call(el, e));
|
|
18498
|
-
}
|
|
18790
|
+
await this.setScroll(this.elements[elKey], e);
|
|
18499
18791
|
}
|
|
18500
18792
|
}
|
|
18501
18793
|
const newEvent = await newEventPromise;
|
|
@@ -18505,12 +18797,27 @@ class GridScrollingService {
|
|
|
18505
18797
|
this.setViewport(skipEvent && this.isPinnedColumn(key)
|
|
18506
18798
|
? Object.assign(Object.assign({}, event), { dimension: key }) : event);
|
|
18507
18799
|
}
|
|
18800
|
+
changeScroll(elements, e) {
|
|
18801
|
+
let changedEvent;
|
|
18802
|
+
for (const element of elements) {
|
|
18803
|
+
if (element.changeScroll) {
|
|
18804
|
+
changedEvent = element.changeScroll(e);
|
|
18805
|
+
}
|
|
18806
|
+
}
|
|
18807
|
+
return changedEvent;
|
|
18808
|
+
}
|
|
18809
|
+
async setScroll(elements, e) {
|
|
18810
|
+
var _a;
|
|
18811
|
+
for (const element of elements) {
|
|
18812
|
+
await ((_a = element.setScroll) === null || _a === void 0 ? void 0 : _a.call(element, e));
|
|
18813
|
+
}
|
|
18814
|
+
}
|
|
18508
18815
|
/**
|
|
18509
18816
|
* Silent scroll update for mobile devices when we have negative scroll top
|
|
18510
18817
|
*/
|
|
18511
18818
|
async scrollSilentService(e, key) {
|
|
18512
18819
|
var _a;
|
|
18513
|
-
for (
|
|
18820
|
+
for (const elKey in this.elements) {
|
|
18514
18821
|
// skip same element update
|
|
18515
18822
|
if (elKey === key) {
|
|
18516
18823
|
continue;
|
|
@@ -18518,7 +18825,7 @@ class GridScrollingService {
|
|
|
18518
18825
|
if (columnTypes.includes(key) &&
|
|
18519
18826
|
(elKey === 'headerRow' ||
|
|
18520
18827
|
columnTypes.includes(elKey))) {
|
|
18521
|
-
for (
|
|
18828
|
+
for (const el of this.elements[elKey]) {
|
|
18522
18829
|
await ((_a = el.changeScroll) === null || _a === void 0 ? void 0 : _a.call(el, e, true));
|
|
18523
18830
|
}
|
|
18524
18831
|
continue;
|
|
@@ -18526,7 +18833,7 @@ class GridScrollingService {
|
|
|
18526
18833
|
}
|
|
18527
18834
|
}
|
|
18528
18835
|
isPinnedColumn(key) {
|
|
18529
|
-
return !!key && ['colPinStart', 'colPinEnd'].
|
|
18836
|
+
return !!key && ['colPinStart', 'colPinEnd'].includes(key);
|
|
18530
18837
|
}
|
|
18531
18838
|
registerElements(els) {
|
|
18532
18839
|
this.elements = els;
|
|
@@ -18807,9 +19114,11 @@ class SelectionStoreConnector {
|
|
|
18807
19114
|
continue;
|
|
18808
19115
|
}
|
|
18809
19116
|
const lastCell = store.store.get('lastCell');
|
|
18810
|
-
if (lastCell) {
|
|
18811
|
-
store.
|
|
19117
|
+
if (!lastCell || lastCell.x <= 0 || lastCell.y <= 0) {
|
|
19118
|
+
store.setRangeArea(null);
|
|
19119
|
+
continue;
|
|
18812
19120
|
}
|
|
19121
|
+
store.setRange({ x: 0, y: 0 }, { x: lastCell.x - 1, y: lastCell.y - 1 });
|
|
18813
19122
|
}
|
|
18814
19123
|
}
|
|
18815
19124
|
}
|
|
@@ -19000,19 +19309,6 @@ const rowDefinitionByType = (newVal = []) => {
|
|
|
19000
19309
|
}
|
|
19001
19310
|
return result;
|
|
19002
19311
|
};
|
|
19003
|
-
const rowDefinitionRemoveByType = (oldVal = []) => {
|
|
19004
|
-
const result = {};
|
|
19005
|
-
for (const v of oldVal) {
|
|
19006
|
-
let rowDefs = result[v.type];
|
|
19007
|
-
if (!rowDefs) {
|
|
19008
|
-
rowDefs = result[v.type] = [];
|
|
19009
|
-
}
|
|
19010
|
-
if (typeof v.size === 'number') {
|
|
19011
|
-
rowDefs.push(v.index);
|
|
19012
|
-
}
|
|
19013
|
-
}
|
|
19014
|
-
return result;
|
|
19015
|
-
};
|
|
19016
19312
|
|
|
19017
19313
|
const COLUMN_DRAG_CLASS = 'column-drag-start';
|
|
19018
19314
|
class ColumnOrderHandler {
|
|
@@ -19572,6 +19868,7 @@ function isMobileDevice() {
|
|
|
19572
19868
|
return /Mobi/i.test(navigator.userAgent) || /Android/i.test(navigator.userAgent) || navigator.maxTouchPoints > 0;
|
|
19573
19869
|
}
|
|
19574
19870
|
|
|
19871
|
+
const toAriaIndex = (index) => `${index + 1}`;
|
|
19575
19872
|
/**
|
|
19576
19873
|
* WCAG Plugin is responsible for enhancing the accessibility features of the RevoGrid component.
|
|
19577
19874
|
* It ensures that the grid is fully compliant with Web Content Accessibility Guidelines (WCAG) 2.1.
|
|
@@ -19615,14 +19912,14 @@ class WCAGPlugin extends BasePlugin {
|
|
|
19615
19912
|
column.columnProperties = (...args) => {
|
|
19616
19913
|
const result = (columnProperties === null || columnProperties === void 0 ? void 0 : columnProperties(...args)) || {};
|
|
19617
19914
|
result.role = 'columnheader';
|
|
19618
|
-
result['aria-colindex'] =
|
|
19915
|
+
result['aria-colindex'] = toAriaIndex(index);
|
|
19619
19916
|
return result;
|
|
19620
19917
|
};
|
|
19621
19918
|
column.cellProperties = (...args) => {
|
|
19622
19919
|
const wcagProps = {
|
|
19623
19920
|
['role']: 'gridcell',
|
|
19624
|
-
['aria-colindex']:
|
|
19625
|
-
['aria-rowindex']:
|
|
19921
|
+
['aria-colindex']: toAriaIndex(index),
|
|
19922
|
+
['aria-rowindex']: toAriaIndex(args[0].rowIndex),
|
|
19626
19923
|
['tabindex']: -1,
|
|
19627
19924
|
};
|
|
19628
19925
|
const columnProps = (cellProperties === null || cellProperties === void 0 ? void 0 : cellProperties(...args)) || {};
|
|
@@ -19637,7 +19934,7 @@ class WCAGPlugin extends BasePlugin {
|
|
|
19637
19934
|
revogrid.setAttribute('aria-rowcount', `${detail.source.length}`);
|
|
19638
19935
|
});
|
|
19639
19936
|
this.addEventListener('beforerowrender', ({ detail, }) => {
|
|
19640
|
-
detail.node.$attrs$ = Object.assign(Object.assign({}, detail.node.$attrs$), { role: 'row', ['aria-rowindex']: detail.item.itemIndex });
|
|
19937
|
+
detail.node.$attrs$ = Object.assign(Object.assign({}, detail.node.$attrs$), { role: 'row', ['aria-rowindex']: toAriaIndex(detail.item.itemIndex) });
|
|
19641
19938
|
});
|
|
19642
19939
|
// focuscell
|
|
19643
19940
|
this.addEventListener('afterfocus', async (e) => {
|
|
@@ -19684,7 +19981,7 @@ class PluginService {
|
|
|
19684
19981
|
return;
|
|
19685
19982
|
}
|
|
19686
19983
|
// Step 1: Identify plugins to remove, compare new and old plugins
|
|
19687
|
-
const pluginsToRemove = (prevPlugins === null || prevPlugins === void 0 ? void 0 : prevPlugins.filter(prevPlugin => !plugins.
|
|
19984
|
+
const pluginsToRemove = (prevPlugins === null || prevPlugins === void 0 ? void 0 : prevPlugins.filter(prevPlugin => !plugins.includes(prevPlugin))) || [];
|
|
19688
19985
|
// Step 2: Remove old plugins
|
|
19689
19986
|
pluginsToRemove.forEach(plugin => {
|
|
19690
19987
|
var _a, _b;
|
|
@@ -19697,7 +19994,7 @@ class PluginService {
|
|
|
19697
19994
|
// Step 3: Register user plugins
|
|
19698
19995
|
plugins === null || plugins === void 0 ? void 0 : plugins.forEach(userPlugin => {
|
|
19699
19996
|
// check if plugin already exists, if so, skip
|
|
19700
|
-
const existingPlugin = this.internalPlugins.
|
|
19997
|
+
const existingPlugin = this.internalPlugins.some(createdPlugin => createdPlugin instanceof userPlugin);
|
|
19701
19998
|
if (existingPlugin) {
|
|
19702
19999
|
return;
|
|
19703
20000
|
}
|
|
@@ -19836,6 +20133,469 @@ class RTLPlugin extends BasePlugin {
|
|
|
19836
20133
|
}
|
|
19837
20134
|
}
|
|
19838
20135
|
|
|
20136
|
+
const DEFAULT_MIN_ROW_HEIGHT = 20;
|
|
20137
|
+
const finiteNumber = (value) => typeof value === 'number' && Number.isFinite(value);
|
|
20138
|
+
function resolveRowResizeConfig(config = {}) {
|
|
20139
|
+
const minHeight = finiteNumber(config.minHeight)
|
|
20140
|
+
? Math.max(1, Math.round(config.minHeight))
|
|
20141
|
+
: DEFAULT_MIN_ROW_HEIGHT;
|
|
20142
|
+
const maxHeight = finiteNumber(config.maxHeight)
|
|
20143
|
+
? Math.max(minHeight, Math.round(config.maxHeight))
|
|
20144
|
+
: undefined;
|
|
20145
|
+
return { minHeight, maxHeight, fullRow: config.fullRow === true };
|
|
20146
|
+
}
|
|
20147
|
+
function clampRowResizeHeight(height, config) {
|
|
20148
|
+
var _a;
|
|
20149
|
+
const rounded = Number.isFinite(height)
|
|
20150
|
+
? Math.round(height)
|
|
20151
|
+
: config.minHeight;
|
|
20152
|
+
return Math.min(Math.max(rounded, config.minHeight), (_a = config.maxHeight) !== null && _a !== void 0 ? _a : Number.POSITIVE_INFINITY);
|
|
20153
|
+
}
|
|
20154
|
+
function getRowResizeIndexes({ rowType, rowIndex, rowCount, selectedRange, selectedRowType, }) {
|
|
20155
|
+
if (!selectedRange ||
|
|
20156
|
+
selectedRowType !== rowType ||
|
|
20157
|
+
rowIndex < Math.min(selectedRange.y, selectedRange.y1) ||
|
|
20158
|
+
rowIndex > Math.max(selectedRange.y, selectedRange.y1)) {
|
|
20159
|
+
return rowIndex >= 0 && rowIndex < rowCount ? [rowIndex] : [];
|
|
20160
|
+
}
|
|
20161
|
+
const start = Math.max(0, Math.min(selectedRange.y, selectedRange.y1));
|
|
20162
|
+
const end = Math.min(rowCount - 1, Math.max(selectedRange.y, selectedRange.y1));
|
|
20163
|
+
return Array.from({ length: Math.max(0, end - start + 1) }, (_, i) => start + i);
|
|
20164
|
+
}
|
|
20165
|
+
function createRowResizePatch(indexes, size) {
|
|
20166
|
+
return indexes.reduce((patch, index) => {
|
|
20167
|
+
patch[index] = size;
|
|
20168
|
+
return patch;
|
|
20169
|
+
}, {});
|
|
20170
|
+
}
|
|
20171
|
+
function mergeRowResizeDefinitions(definitions, rowType, physicalIndexes, size) {
|
|
20172
|
+
const targetIndexes = new Set(physicalIndexes);
|
|
20173
|
+
const existingIndexes = new Set();
|
|
20174
|
+
const merged = definitions.map(definition => {
|
|
20175
|
+
if (definition.type !== rowType || !targetIndexes.has(definition.index)) {
|
|
20176
|
+
return definition;
|
|
20177
|
+
}
|
|
20178
|
+
existingIndexes.add(definition.index);
|
|
20179
|
+
return Object.assign(Object.assign({}, definition), { size });
|
|
20180
|
+
});
|
|
20181
|
+
for (const index of targetIndexes) {
|
|
20182
|
+
if (!existingIndexes.has(index)) {
|
|
20183
|
+
merged.push({ type: rowType, index, size });
|
|
20184
|
+
}
|
|
20185
|
+
}
|
|
20186
|
+
return merged;
|
|
20187
|
+
}
|
|
20188
|
+
|
|
20189
|
+
const ROW_RESIZE_HANDLE_CLASS = 'row-resize-handle';
|
|
20190
|
+
const BEFORE_ROW_RESIZE_EVENT = 'beforerowresize';
|
|
20191
|
+
const ROW_RESIZE_EVENT = 'rowresize';
|
|
20192
|
+
const AFTER_ROW_RESIZE_EVENT = 'afterrowresize';
|
|
20193
|
+
const ROW_RESIZE_CANCEL_EVENT = 'rowresizecancel';
|
|
20194
|
+
class RowResizePlugin extends BasePlugin {
|
|
20195
|
+
constructor(revogrid, providers, config = {}) {
|
|
20196
|
+
super(revogrid, providers);
|
|
20197
|
+
this.enabled = false;
|
|
20198
|
+
this.appliedDefinitionIndexes = new Map();
|
|
20199
|
+
this.pendingBottomAnchor = false;
|
|
20200
|
+
this.keepBottomAnchor = false;
|
|
20201
|
+
this.rowDefinitionRemapQueued = false;
|
|
20202
|
+
this.pendingSourceCounts = new Map();
|
|
20203
|
+
this.previousBodyCursor = '';
|
|
20204
|
+
this.decorateRow = ({ detail, }) => {
|
|
20205
|
+
if (!this.enabled ||
|
|
20206
|
+
(detail.colType !== 'rowHeaders' && !this.config.fullRow)) {
|
|
20207
|
+
return;
|
|
20208
|
+
}
|
|
20209
|
+
const handle = this.h('div', {
|
|
20210
|
+
'key': `row-resize-${detail.rowType}-${detail.item.itemIndex}`,
|
|
20211
|
+
'class': { [ROW_RESIZE_HANDLE_CLASS]: true },
|
|
20212
|
+
'data-row-resize-index': detail.item.itemIndex,
|
|
20213
|
+
'aria-hidden': 'true',
|
|
20214
|
+
'onPointerDown': (event) => this.startResize(event, detail.rowType, detail.item.itemIndex),
|
|
20215
|
+
});
|
|
20216
|
+
detail.node.$children$ = [...(detail.node.$children$ || []), handle];
|
|
20217
|
+
};
|
|
20218
|
+
this.cancelForDataChange = () => this.cancel('data-change');
|
|
20219
|
+
this.onPointerMove = (event) => {
|
|
20220
|
+
const active = this.active;
|
|
20221
|
+
if ((active === null || active === void 0 ? void 0 : active.pointerId) !== event.pointerId) {
|
|
20222
|
+
return;
|
|
20223
|
+
}
|
|
20224
|
+
event.preventDefault();
|
|
20225
|
+
active.lastEvent = event;
|
|
20226
|
+
this.pendingHeight = clampRowResizeHeight(active.startHeight + event.clientY - active.startY, this.config);
|
|
20227
|
+
if (this.animationFrame === undefined) {
|
|
20228
|
+
const view = this.revogrid.ownerDocument.defaultView;
|
|
20229
|
+
this.animationFrame = view === null || view === void 0 ? void 0 : view.requestAnimationFrame(() => {
|
|
20230
|
+
this.animationFrame = undefined;
|
|
20231
|
+
this.flushPendingResize();
|
|
20232
|
+
});
|
|
20233
|
+
}
|
|
20234
|
+
};
|
|
20235
|
+
this.onPointerUp = (event) => {
|
|
20236
|
+
const active = this.active;
|
|
20237
|
+
if ((active === null || active === void 0 ? void 0 : active.pointerId) !== event.pointerId) {
|
|
20238
|
+
return;
|
|
20239
|
+
}
|
|
20240
|
+
event.preventDefault();
|
|
20241
|
+
active.lastEvent = event;
|
|
20242
|
+
this.pendingHeight = clampRowResizeHeight(active.startHeight + event.clientY - active.startY, this.config);
|
|
20243
|
+
this.flushPendingResize();
|
|
20244
|
+
if (this.active !== active) {
|
|
20245
|
+
return;
|
|
20246
|
+
}
|
|
20247
|
+
const detail = this.eventDetail(active, event, active.currentHeight);
|
|
20248
|
+
this.finishGesture();
|
|
20249
|
+
this.commitResize(active);
|
|
20250
|
+
this.emit(AFTER_ROW_RESIZE_EVENT, detail);
|
|
20251
|
+
};
|
|
20252
|
+
this.onPointerCancel = (event) => {
|
|
20253
|
+
var _a;
|
|
20254
|
+
if (((_a = this.active) === null || _a === void 0 ? void 0 : _a.pointerId) === event.pointerId) {
|
|
20255
|
+
this.active.lastEvent = event;
|
|
20256
|
+
this.cancel('pointercancel');
|
|
20257
|
+
}
|
|
20258
|
+
};
|
|
20259
|
+
this.onKeyDown = (event) => {
|
|
20260
|
+
if (event.key === 'Escape' && this.active) {
|
|
20261
|
+
event.preventDefault();
|
|
20262
|
+
this.cancel('escape');
|
|
20263
|
+
}
|
|
20264
|
+
};
|
|
20265
|
+
this.onWindowBlur = () => this.cancel('blur');
|
|
20266
|
+
this.updateBottomAnchorState = ({ detail, }) => {
|
|
20267
|
+
if (detail.dimension !== 'rgRow') {
|
|
20268
|
+
return;
|
|
20269
|
+
}
|
|
20270
|
+
this.keepBottomAnchor = this.isMainViewportAtBottom(detail.coordinate);
|
|
20271
|
+
};
|
|
20272
|
+
this.applyPendingBottomAnchor = () => {
|
|
20273
|
+
if (!this.pendingBottomAnchor) {
|
|
20274
|
+
return;
|
|
20275
|
+
}
|
|
20276
|
+
this.pendingBottomAnchor = false;
|
|
20277
|
+
const dimension = this.providers.dimension.stores.rgRow.store;
|
|
20278
|
+
// Scroll surfaces have slightly different client sizes. Give the shared
|
|
20279
|
+
// scrolling service the content end and let each surface clamp to its own
|
|
20280
|
+
// exact bottom coordinate.
|
|
20281
|
+
void this.revogrid.scrollToCoordinate({ y: dimension.get('realSize') });
|
|
20282
|
+
};
|
|
20283
|
+
this.scheduleRowDefinitionRemap = () => {
|
|
20284
|
+
if (this.rowDefinitionRemapQueued) {
|
|
20285
|
+
return;
|
|
20286
|
+
}
|
|
20287
|
+
this.rowDefinitionRemapQueued = true;
|
|
20288
|
+
queueMicrotask(() => {
|
|
20289
|
+
if (!this.rowDefinitionRemapQueued) {
|
|
20290
|
+
return;
|
|
20291
|
+
}
|
|
20292
|
+
this.pruneRowDefinitions();
|
|
20293
|
+
this.reapplyRowDefinitionSizes();
|
|
20294
|
+
this.rowDefinitionRemapQueued = false;
|
|
20295
|
+
});
|
|
20296
|
+
};
|
|
20297
|
+
/** Map source-indexed row definitions back onto the current virtual order. */
|
|
20298
|
+
this.reapplyRowDefinitionSizes = () => {
|
|
20299
|
+
const rowDefinitions = this.providers.dimension.getRowDefinitions();
|
|
20300
|
+
for (const rowType of rowTypes) {
|
|
20301
|
+
const items = this.providers.data.stores[rowType].store.get('items');
|
|
20302
|
+
const definitions = new Map(rowDefinitions
|
|
20303
|
+
.filter(definition => definition.type === rowType)
|
|
20304
|
+
.map(definition => [definition.index, definition.size]));
|
|
20305
|
+
const appliedIndexes = this.appliedDefinitionIndexes.get(rowType);
|
|
20306
|
+
if (!definitions.size && !(appliedIndexes === null || appliedIndexes === void 0 ? void 0 : appliedIndexes.size)) {
|
|
20307
|
+
continue;
|
|
20308
|
+
}
|
|
20309
|
+
const dimension = this.providers.dimension.stores[rowType];
|
|
20310
|
+
const currentSizes = dimension.store.get('sizes');
|
|
20311
|
+
const sizes = Object.assign({}, currentSizes);
|
|
20312
|
+
for (const index of appliedIndexes || []) {
|
|
20313
|
+
delete sizes[index];
|
|
20314
|
+
}
|
|
20315
|
+
const indexes = new Set();
|
|
20316
|
+
items.forEach((physicalIndex, virtualIndex) => {
|
|
20317
|
+
const size = definitions.get(physicalIndex);
|
|
20318
|
+
if (size !== undefined) {
|
|
20319
|
+
sizes[virtualIndex] = size;
|
|
20320
|
+
indexes.add(virtualIndex);
|
|
20321
|
+
}
|
|
20322
|
+
});
|
|
20323
|
+
this.appliedDefinitionIndexes.set(rowType, indexes);
|
|
20324
|
+
const sizeKeys = Object.keys(sizes);
|
|
20325
|
+
if (sizeKeys.length !== Object.keys(currentSizes).length ||
|
|
20326
|
+
sizeKeys.some(index => sizes[index] !== currentSizes[index])) {
|
|
20327
|
+
this.providers.dimension.setCustomSizes(rowType, sizes);
|
|
20328
|
+
}
|
|
20329
|
+
}
|
|
20330
|
+
};
|
|
20331
|
+
this.config = resolveRowResizeConfig(config);
|
|
20332
|
+
if (new.target !== RowResizePlugin) {
|
|
20333
|
+
this.enabled = true;
|
|
20334
|
+
this.registerEventListeners();
|
|
20335
|
+
}
|
|
20336
|
+
}
|
|
20337
|
+
registerEventListeners() {
|
|
20338
|
+
this.addEventListener('beforerowrender', this.decorateRow);
|
|
20339
|
+
this.addEventListener('beforeanysource', () => {
|
|
20340
|
+
this.cancel('data-change');
|
|
20341
|
+
this.keepBottomAnchor = false;
|
|
20342
|
+
});
|
|
20343
|
+
this.addEventListener('afteranysource', ({ detail }) => {
|
|
20344
|
+
this.pendingSourceCounts.set(detail.type, detail.source.length);
|
|
20345
|
+
this.scheduleRowDefinitionRemap();
|
|
20346
|
+
});
|
|
20347
|
+
this.addEventListener('beforesourcesortingapply', this.cancelForDataChange);
|
|
20348
|
+
this.addEventListener('beforesortingapply', this.cancelForDataChange);
|
|
20349
|
+
this.addEventListener('sortingconfigchanged', this.cancelForDataChange);
|
|
20350
|
+
this.addEventListener(BEFORE_GROUPING_APPLY_EVENT, this.cancelForDataChange);
|
|
20351
|
+
this.addEventListener('aftersortingapply', this.scheduleRowDefinitionRemap);
|
|
20352
|
+
this.addEventListener('beforefilterapply', this.cancelForDataChange);
|
|
20353
|
+
this.addEventListener('afterfilterapply', this.scheduleRowDefinitionRemap);
|
|
20354
|
+
this.addEventListener('beforerowdefinition', () => {
|
|
20355
|
+
this.cancel('data-change');
|
|
20356
|
+
this.scheduleRowDefinitionRemap();
|
|
20357
|
+
});
|
|
20358
|
+
this.addEventListener('afterthemechanged', this.scheduleRowDefinitionRemap);
|
|
20359
|
+
this.addEventListener('aftertrimmed', this.scheduleRowDefinitionRemap);
|
|
20360
|
+
this.addEventListener('roworderchange', this.scheduleRowDefinitionRemap);
|
|
20361
|
+
this.addEventListener(GROUP_EXPAND_EVENT, () => {
|
|
20362
|
+
if (this.keepBottomAnchor) {
|
|
20363
|
+
this.pendingBottomAnchor = true;
|
|
20364
|
+
}
|
|
20365
|
+
this.scheduleRowDefinitionRemap();
|
|
20366
|
+
});
|
|
20367
|
+
this.addEventListener('aftergridrender', this.applyPendingBottomAnchor);
|
|
20368
|
+
this.addEventListener('viewportscroll', this.updateBottomAnchorState);
|
|
20369
|
+
this.addEventListener('rowheaderschanged', ({ detail }) => {
|
|
20370
|
+
if (!detail && !this.config.fullRow) {
|
|
20371
|
+
this.cancel('row-headers-hidden');
|
|
20372
|
+
}
|
|
20373
|
+
});
|
|
20374
|
+
}
|
|
20375
|
+
syncGridConfig(refresh = true) {
|
|
20376
|
+
const { plugins = [], resizeRow } = this.revogrid;
|
|
20377
|
+
const isCorePlugin = this.constructor === RowResizePlugin;
|
|
20378
|
+
const hasConfiguredPlugin = plugins.some(plugin => plugin !== RowResizePlugin &&
|
|
20379
|
+
plugin.prototype instanceof RowResizePlugin);
|
|
20380
|
+
const enabled = !isCorePlugin ||
|
|
20381
|
+
(!hasConfiguredPlugin && !!resizeRow);
|
|
20382
|
+
const resizeConfig = typeof resizeRow === 'object' ? resizeRow : undefined;
|
|
20383
|
+
const config = isCorePlugin
|
|
20384
|
+
? resolveRowResizeConfig(resizeConfig)
|
|
20385
|
+
: this.config;
|
|
20386
|
+
const configChanged = config.minHeight !== this.config.minHeight ||
|
|
20387
|
+
config.maxHeight !== this.config.maxHeight ||
|
|
20388
|
+
config.fullRow !== this.config.fullRow;
|
|
20389
|
+
if (enabled === this.enabled && !configChanged) {
|
|
20390
|
+
return;
|
|
20391
|
+
}
|
|
20392
|
+
this.cancel('config-change');
|
|
20393
|
+
this.config = config;
|
|
20394
|
+
if (enabled !== this.enabled) {
|
|
20395
|
+
this.enabled = enabled;
|
|
20396
|
+
if (enabled) {
|
|
20397
|
+
this.registerEventListeners();
|
|
20398
|
+
}
|
|
20399
|
+
else {
|
|
20400
|
+
this.pendingBottomAnchor = false;
|
|
20401
|
+
this.keepBottomAnchor = false;
|
|
20402
|
+
this.rowDefinitionRemapQueued = false;
|
|
20403
|
+
this.pendingSourceCounts.clear();
|
|
20404
|
+
this.clearSubscriptions();
|
|
20405
|
+
}
|
|
20406
|
+
}
|
|
20407
|
+
if (refresh) {
|
|
20408
|
+
queueMicrotask(() => void this.revogrid.refresh());
|
|
20409
|
+
}
|
|
20410
|
+
}
|
|
20411
|
+
startResize(event, rowType, index) {
|
|
20412
|
+
var _a, _b;
|
|
20413
|
+
if (!this.enabled ||
|
|
20414
|
+
this.active ||
|
|
20415
|
+
event.defaultPrevented ||
|
|
20416
|
+
!event.isPrimary ||
|
|
20417
|
+
(event.pointerType !== 'touch' && event.button !== 0)) {
|
|
20418
|
+
return;
|
|
20419
|
+
}
|
|
20420
|
+
const dimension = this.providers.dimension.stores[rowType];
|
|
20421
|
+
const dimensionState = dimension.getCurrentState();
|
|
20422
|
+
const viewport = this.providers.viewport.stores[rowType];
|
|
20423
|
+
const item = getItemByIndex(dimensionState, index);
|
|
20424
|
+
const focusedStore = this.providers.selection.focusedStore;
|
|
20425
|
+
const selectedRowType = focusedStore
|
|
20426
|
+
? this.providers.selection.storesYToType[focusedStore.position.y]
|
|
20427
|
+
: undefined;
|
|
20428
|
+
const indexes = getRowResizeIndexes({
|
|
20429
|
+
rowType,
|
|
20430
|
+
rowIndex: index,
|
|
20431
|
+
rowCount: dimensionState.count,
|
|
20432
|
+
selectedRange: this.providers.selection.selectedRange,
|
|
20433
|
+
selectedRowType,
|
|
20434
|
+
});
|
|
20435
|
+
if (!indexes.length) {
|
|
20436
|
+
return;
|
|
20437
|
+
}
|
|
20438
|
+
const previousSizes = indexes.reduce((sizes, rowIndex) => {
|
|
20439
|
+
const row = getItemByIndex(dimensionState, rowIndex);
|
|
20440
|
+
sizes[rowIndex] = row.end - row.start;
|
|
20441
|
+
return sizes;
|
|
20442
|
+
}, {});
|
|
20443
|
+
const startHeight = item.end - item.start;
|
|
20444
|
+
const active = {
|
|
20445
|
+
pointerId: event.pointerId,
|
|
20446
|
+
rowType,
|
|
20447
|
+
index,
|
|
20448
|
+
indexes,
|
|
20449
|
+
startY: event.clientY,
|
|
20450
|
+
startHeight,
|
|
20451
|
+
currentHeight: startHeight,
|
|
20452
|
+
previousSizes,
|
|
20453
|
+
originalCustomSizes: Object.assign({}, dimensionState.sizes),
|
|
20454
|
+
bottomAnchored: rowType === 'rgRow' &&
|
|
20455
|
+
this.isMainViewportAtBottom(viewport.lastCoordinate),
|
|
20456
|
+
lastEvent: event,
|
|
20457
|
+
};
|
|
20458
|
+
this.active = active;
|
|
20459
|
+
const beforeEvent = this.emit(BEFORE_ROW_RESIZE_EVENT, this.eventDetail(active, event, startHeight));
|
|
20460
|
+
if (beforeEvent.defaultPrevented) {
|
|
20461
|
+
if (this.active === active) {
|
|
20462
|
+
this.active = undefined;
|
|
20463
|
+
}
|
|
20464
|
+
return;
|
|
20465
|
+
}
|
|
20466
|
+
if (!this.enabled || this.active !== active) {
|
|
20467
|
+
return;
|
|
20468
|
+
}
|
|
20469
|
+
event.preventDefault();
|
|
20470
|
+
event.stopPropagation();
|
|
20471
|
+
const doc = this.revogrid.ownerDocument;
|
|
20472
|
+
this.previousBodyCursor = ((_a = doc.body) === null || _a === void 0 ? void 0 : _a.style.cursor) || '';
|
|
20473
|
+
if (doc.body) {
|
|
20474
|
+
doc.body.style.cursor = 'row-resize';
|
|
20475
|
+
}
|
|
20476
|
+
doc.addEventListener('pointermove', this.onPointerMove, true);
|
|
20477
|
+
doc.addEventListener('pointerup', this.onPointerUp, true);
|
|
20478
|
+
doc.addEventListener('pointercancel', this.onPointerCancel, true);
|
|
20479
|
+
doc.addEventListener('keydown', this.onKeyDown, true);
|
|
20480
|
+
(_b = doc.defaultView) === null || _b === void 0 ? void 0 : _b.addEventListener('blur', this.onWindowBlur);
|
|
20481
|
+
}
|
|
20482
|
+
flushPendingResize() {
|
|
20483
|
+
const active = this.active;
|
|
20484
|
+
if (!active || this.pendingHeight === undefined) {
|
|
20485
|
+
return;
|
|
20486
|
+
}
|
|
20487
|
+
const size = this.pendingHeight;
|
|
20488
|
+
this.pendingHeight = undefined;
|
|
20489
|
+
if (size === active.currentHeight) {
|
|
20490
|
+
return;
|
|
20491
|
+
}
|
|
20492
|
+
this.providers.dimension.setCustomSizes(active.rowType, createRowResizePatch(active.indexes, size), true);
|
|
20493
|
+
this.requestBottomAnchor(active);
|
|
20494
|
+
active.currentHeight = size;
|
|
20495
|
+
this.emit(ROW_RESIZE_EVENT, this.eventDetail(active, active.lastEvent, size));
|
|
20496
|
+
}
|
|
20497
|
+
cancel(reason) {
|
|
20498
|
+
const active = this.active;
|
|
20499
|
+
if (!active) {
|
|
20500
|
+
return;
|
|
20501
|
+
}
|
|
20502
|
+
const currentSizes = Object.assign({}, this.providers.dimension.stores[active.rowType].store.get('sizes'));
|
|
20503
|
+
for (const index of active.indexes) {
|
|
20504
|
+
if (Object.hasOwn(active.originalCustomSizes, index)) {
|
|
20505
|
+
currentSizes[index] = active.originalCustomSizes[index];
|
|
20506
|
+
}
|
|
20507
|
+
else {
|
|
20508
|
+
delete currentSizes[index];
|
|
20509
|
+
}
|
|
20510
|
+
}
|
|
20511
|
+
this.providers.dimension.setCustomSizes(active.rowType, currentSizes);
|
|
20512
|
+
this.requestBottomAnchor(active);
|
|
20513
|
+
const detail = Object.assign(Object.assign({}, this.eventDetail(active, active.lastEvent, active.startHeight)), { reason });
|
|
20514
|
+
this.finishGesture();
|
|
20515
|
+
this.emit(ROW_RESIZE_CANCEL_EVENT, detail);
|
|
20516
|
+
}
|
|
20517
|
+
eventDetail(active, originalEvent, size) {
|
|
20518
|
+
return {
|
|
20519
|
+
rowType: active.rowType,
|
|
20520
|
+
index: active.index,
|
|
20521
|
+
indexes: [...active.indexes],
|
|
20522
|
+
size,
|
|
20523
|
+
previousSizes: Object.assign({}, active.previousSizes),
|
|
20524
|
+
originalEvent,
|
|
20525
|
+
};
|
|
20526
|
+
}
|
|
20527
|
+
commitResize(active) {
|
|
20528
|
+
if (active.currentHeight === active.startHeight) {
|
|
20529
|
+
return;
|
|
20530
|
+
}
|
|
20531
|
+
const items = this.providers.data.stores[active.rowType].store.get('items');
|
|
20532
|
+
const physicalIndexes = active.indexes.reduce((result, index) => {
|
|
20533
|
+
const physicalIndex = items[index];
|
|
20534
|
+
if (physicalIndex !== undefined) {
|
|
20535
|
+
result.push(physicalIndex);
|
|
20536
|
+
}
|
|
20537
|
+
return result;
|
|
20538
|
+
}, []);
|
|
20539
|
+
if (physicalIndexes.length) {
|
|
20540
|
+
const rowDefinitions = mergeRowResizeDefinitions(this.providers.dimension.getRowDefinitions(), active.rowType, physicalIndexes, active.currentHeight);
|
|
20541
|
+
this.providers.dimension.setRowDefinitions(rowDefinitions);
|
|
20542
|
+
this.scheduleRowDefinitionRemap();
|
|
20543
|
+
this.keepBottomAnchor = active.bottomAnchored;
|
|
20544
|
+
this.requestBottomAnchor(active);
|
|
20545
|
+
}
|
|
20546
|
+
}
|
|
20547
|
+
requestBottomAnchor(active) {
|
|
20548
|
+
if (active.bottomAnchored) {
|
|
20549
|
+
this.pendingBottomAnchor = true;
|
|
20550
|
+
}
|
|
20551
|
+
}
|
|
20552
|
+
isMainViewportAtBottom(coordinate) {
|
|
20553
|
+
const dimension = this.providers.dimension.stores.rgRow.getCurrentState();
|
|
20554
|
+
const viewport = this.providers.viewport.stores.rgRow.store.state;
|
|
20555
|
+
return (dimension.realSize > viewport.clientSize &&
|
|
20556
|
+
coordinate >= getViewportMaxCoordinate(dimension, viewport.virtualSize));
|
|
20557
|
+
}
|
|
20558
|
+
pruneRowDefinitions() {
|
|
20559
|
+
if (!this.pendingSourceCounts.size) {
|
|
20560
|
+
return;
|
|
20561
|
+
}
|
|
20562
|
+
const definitions = this.providers.dimension.getRowDefinitions();
|
|
20563
|
+
const rowDefinitions = definitions.filter(definition => {
|
|
20564
|
+
const count = this.pendingSourceCounts.get(definition.type);
|
|
20565
|
+
return count === undefined || definition.index < count;
|
|
20566
|
+
});
|
|
20567
|
+
this.pendingSourceCounts.clear();
|
|
20568
|
+
if (rowDefinitions.length !== definitions.length) {
|
|
20569
|
+
this.providers.dimension.setRowDefinitions(rowDefinitions);
|
|
20570
|
+
}
|
|
20571
|
+
}
|
|
20572
|
+
finishGesture() {
|
|
20573
|
+
const doc = this.revogrid.ownerDocument;
|
|
20574
|
+
const view = doc.defaultView;
|
|
20575
|
+
if (this.animationFrame !== undefined) {
|
|
20576
|
+
view === null || view === void 0 ? void 0 : view.cancelAnimationFrame(this.animationFrame);
|
|
20577
|
+
}
|
|
20578
|
+
doc.removeEventListener('pointermove', this.onPointerMove, true);
|
|
20579
|
+
doc.removeEventListener('pointerup', this.onPointerUp, true);
|
|
20580
|
+
doc.removeEventListener('pointercancel', this.onPointerCancel, true);
|
|
20581
|
+
doc.removeEventListener('keydown', this.onKeyDown, true);
|
|
20582
|
+
view === null || view === void 0 ? void 0 : view.removeEventListener('blur', this.onWindowBlur);
|
|
20583
|
+
if (doc.body) {
|
|
20584
|
+
doc.body.style.cursor = this.previousBodyCursor;
|
|
20585
|
+
}
|
|
20586
|
+
this.animationFrame = undefined;
|
|
20587
|
+
this.pendingHeight = undefined;
|
|
20588
|
+
this.active = undefined;
|
|
20589
|
+
}
|
|
20590
|
+
destroy() {
|
|
20591
|
+
this.cancel('destroy');
|
|
20592
|
+
this.keepBottomAnchor = false;
|
|
20593
|
+
this.rowDefinitionRemapQueued = false;
|
|
20594
|
+
this.pendingSourceCounts.clear();
|
|
20595
|
+
super.destroy();
|
|
20596
|
+
}
|
|
20597
|
+
}
|
|
20598
|
+
|
|
19839
20599
|
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}`;
|
|
19840
20600
|
|
|
19841
20601
|
const DEFAULT_COLUMN_SIZE = 100;
|
|
@@ -19926,7 +20686,12 @@ class RevoGridComponent {
|
|
|
19926
20686
|
/** When true, grid in read only mode. */
|
|
19927
20687
|
this.readonly = false;
|
|
19928
20688
|
/** When true, columns are resizable. */
|
|
19929
|
-
this.resize =
|
|
20689
|
+
this.resize = true;
|
|
20690
|
+
/**
|
|
20691
|
+
* Enables row resizing. Pass a configuration object to customize the
|
|
20692
|
+
* height limits or enable resize edges across the full row.
|
|
20693
|
+
*/
|
|
20694
|
+
this.resizeRow = false;
|
|
19930
20695
|
/**
|
|
19931
20696
|
* Prevents horizontal scroll state from being mirrored across viewport sections.
|
|
19932
20697
|
*/
|
|
@@ -19997,15 +20762,15 @@ class RevoGridComponent {
|
|
|
19997
20762
|
*/
|
|
19998
20763
|
this.autoSizeColumn = false;
|
|
19999
20764
|
/**
|
|
20000
|
-
* Enables filter plugin.
|
|
20765
|
+
* Enables filter plugin. Enabled by default; set to `false` to opt out.
|
|
20001
20766
|
* Can be boolean.
|
|
20002
20767
|
* Or can be filter collection See `FilterCollection` for more info.
|
|
20003
20768
|
*/
|
|
20004
|
-
this.filter =
|
|
20769
|
+
this.filter = true;
|
|
20005
20770
|
/**
|
|
20006
20771
|
* Enable column move plugin.
|
|
20007
20772
|
*/
|
|
20008
|
-
this.canMoveColumns =
|
|
20773
|
+
this.canMoveColumns = true;
|
|
20009
20774
|
/**
|
|
20010
20775
|
* Trimmed rows.
|
|
20011
20776
|
* Functionality which allows to hide rows from main data set.
|
|
@@ -20015,7 +20780,7 @@ class RevoGridComponent {
|
|
|
20015
20780
|
/**
|
|
20016
20781
|
* Enable export plugin.
|
|
20017
20782
|
*/
|
|
20018
|
-
this.exporting =
|
|
20783
|
+
this.exporting = true;
|
|
20019
20784
|
/**
|
|
20020
20785
|
* Stretch strategy for columns by `StretchColumn` plugin.
|
|
20021
20786
|
* For example if there are more space on the right last column size would be increased.
|
|
@@ -20107,7 +20872,7 @@ class RevoGridComponent {
|
|
|
20107
20872
|
var _a;
|
|
20108
20873
|
if (this.dataProvider && this.columnProvider && !skipDataUpdate) {
|
|
20109
20874
|
const columnProp = (_a = this.columnProvider.getColumn(col, colType)) === null || _a === void 0 ? void 0 : _a.prop;
|
|
20110
|
-
if (
|
|
20875
|
+
if (columnProp !== undefined) {
|
|
20111
20876
|
this.dataProvider.setCellData({
|
|
20112
20877
|
type: rowType,
|
|
20113
20878
|
rowIndex: row,
|
|
@@ -20703,29 +21468,31 @@ class RevoGridComponent {
|
|
|
20703
21468
|
vals: after,
|
|
20704
21469
|
oldVals: before,
|
|
20705
21470
|
});
|
|
20706
|
-
|
|
21471
|
+
this.dimensionProvider.syncRowDefinitions(newVal);
|
|
20707
21472
|
const newRows = rowDefinitionByType(newVal);
|
|
20708
|
-
|
|
20709
|
-
|
|
20710
|
-
|
|
20711
|
-
// clear all old data and drop sizes
|
|
20712
|
-
for (const t in remove) {
|
|
20713
|
-
if (remove.hasOwnProperty(t)) {
|
|
20714
|
-
const type = t;
|
|
20715
|
-
const store = this.dataProvider.stores[type];
|
|
20716
|
-
const sourceLength = store.store.get('source').length;
|
|
20717
|
-
this.dimensionProvider.clearSize(type, sourceLength);
|
|
20718
|
-
}
|
|
20719
|
-
}
|
|
20720
|
-
}
|
|
20721
|
-
// set new sizes
|
|
21473
|
+
const oldRows = rowDefinitionByType(oldVal);
|
|
21474
|
+
const dataProvider = this.dataProvider;
|
|
21475
|
+
const dimensionProvider = this.dimensionProvider;
|
|
20722
21476
|
rowTypes.forEach((t) => {
|
|
20723
|
-
var _a;
|
|
20724
21477
|
const newSizes = newRows[t];
|
|
20725
|
-
|
|
20726
|
-
if (newSizes
|
|
20727
|
-
|
|
21478
|
+
const oldSizes = oldRows[t];
|
|
21479
|
+
if (!newSizes && !oldSizes && !forceUpdate) {
|
|
21480
|
+
return;
|
|
20728
21481
|
}
|
|
21482
|
+
const sizes = Object.assign({}, dimensionProvider.stores[t].store.get('sizes'));
|
|
21483
|
+
const definitionSizes = (newSizes === null || newSizes === void 0 ? void 0 : newSizes.sizes) || {};
|
|
21484
|
+
const previousDefinitionSizes = (oldSizes === null || oldSizes === void 0 ? void 0 : oldSizes.sizes) || {};
|
|
21485
|
+
const items = dataProvider.stores[t].store.get('items');
|
|
21486
|
+
items.forEach((physicalIndex, virtualIndex) => {
|
|
21487
|
+
if (Object.hasOwn(previousDefinitionSizes, physicalIndex) &&
|
|
21488
|
+
sizes[virtualIndex] === previousDefinitionSizes[physicalIndex]) {
|
|
21489
|
+
delete sizes[virtualIndex];
|
|
21490
|
+
}
|
|
21491
|
+
if (Object.hasOwn(definitionSizes, physicalIndex)) {
|
|
21492
|
+
sizes[virtualIndex] = definitionSizes[physicalIndex];
|
|
21493
|
+
}
|
|
21494
|
+
});
|
|
21495
|
+
dimensionProvider.setCustomSizes(t, sizes);
|
|
20729
21496
|
});
|
|
20730
21497
|
}
|
|
20731
21498
|
trimmedRowsChanged(newVal = {}) {
|
|
@@ -20774,6 +21541,9 @@ class RevoGridComponent {
|
|
|
20774
21541
|
rowHeadersChange(rowHeaders) {
|
|
20775
21542
|
this.rowheaderschanged.emit(rowHeaders);
|
|
20776
21543
|
}
|
|
21544
|
+
resizeRowChanged() {
|
|
21545
|
+
this.syncRowResizeConfig();
|
|
21546
|
+
}
|
|
20777
21547
|
/**
|
|
20778
21548
|
* Register external VNodes
|
|
20779
21549
|
*/
|
|
@@ -20796,6 +21566,7 @@ class RevoGridComponent {
|
|
|
20796
21566
|
*/
|
|
20797
21567
|
pluginsChanged(plugins = [], prevPlugins) {
|
|
20798
21568
|
this.pluginService.addUserPluginsAndCreate(this.element, plugins, prevPlugins, this.getPluginData());
|
|
21569
|
+
this.syncRowResizeConfig();
|
|
20799
21570
|
}
|
|
20800
21571
|
// #endregion
|
|
20801
21572
|
// #region Plugins
|
|
@@ -20836,10 +21607,15 @@ class RevoGridComponent {
|
|
|
20836
21607
|
this.pluginService.add(new SortingPlugin(this.element, pluginData));
|
|
20837
21608
|
// register grouping plugin
|
|
20838
21609
|
this.pluginService.add(new GroupingRowPlugin(this.element, pluginData));
|
|
21610
|
+
this.pluginService.add(new RowResizePlugin(this.element, pluginData));
|
|
20839
21611
|
if (this.canMoveColumns) {
|
|
20840
21612
|
this.pluginService.add(new ColumnMovePlugin(this.element, pluginData));
|
|
20841
21613
|
}
|
|
20842
21614
|
}
|
|
21615
|
+
syncRowResizeConfig() {
|
|
21616
|
+
const plugin = this.pluginService.getByClass(RowResizePlugin);
|
|
21617
|
+
plugin === null || plugin === void 0 ? void 0 : plugin.syncGridConfig();
|
|
21618
|
+
}
|
|
20843
21619
|
getPluginData() {
|
|
20844
21620
|
if (!this.dimensionProvider || !this.dataProvider || !this.columnProvider || !this.viewportProvider || !this.selectionStoreConnector) {
|
|
20845
21621
|
return;
|
|
@@ -20882,6 +21658,9 @@ class RevoGridComponent {
|
|
|
20882
21658
|
this.themeService.setDefinitions(this.themeDefinitions);
|
|
20883
21659
|
this.dimensionProvider = new DimensionProvider(this.viewportProvider, {
|
|
20884
21660
|
realSizeChanged: (k) => this.contentsizechanged.emit(k),
|
|
21661
|
+
rowDefinitionsChanged: definitions => {
|
|
21662
|
+
this.rowDefinitions = definitions;
|
|
21663
|
+
},
|
|
20885
21664
|
});
|
|
20886
21665
|
this.dimensionProvider.setSettings({ originItemSize: getColumnSize(this.colSize) }, 'rgCol');
|
|
20887
21666
|
this.columnProvider = new ColumnDataProvider();
|
|
@@ -21072,6 +21851,9 @@ class RevoGridComponent {
|
|
|
21072
21851
|
"rowHeaders": [{
|
|
21073
21852
|
"rowHeadersChange": 0
|
|
21074
21853
|
}],
|
|
21854
|
+
"resizeRow": [{
|
|
21855
|
+
"resizeRowChanged": 0
|
|
21856
|
+
}],
|
|
21075
21857
|
"registerVNode": [{
|
|
21076
21858
|
"registerOutsideVNodes": 0
|
|
21077
21859
|
}],
|
|
@@ -21097,6 +21879,7 @@ class RevoGridComponent {
|
|
|
21097
21879
|
"range": [4],
|
|
21098
21880
|
"readonly": [4],
|
|
21099
21881
|
"resize": [4],
|
|
21882
|
+
"resizeRow": [4, "resize-row"],
|
|
21100
21883
|
"noHorizontalScrollTransfer": [4, "no-horizontal-scroll-transfer"],
|
|
21101
21884
|
"canFocus": [4, "can-focus"],
|
|
21102
21885
|
"useClipboard": [4, "use-clipboard"],
|
|
@@ -21335,7 +22118,7 @@ const CellRenderer = ({ renderProps, cellProps, }) => {
|
|
|
21335
22118
|
return (hAsync("div", Object.assign({}, cellProps, { redraw: render }), render()));
|
|
21336
22119
|
};
|
|
21337
22120
|
|
|
21338
|
-
const revogrDataStyleCss = () => `.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}revogr-data{display:block;width:100%;position:relative}revogr-data .rgRow{position:absolute;width:100%;left:0}revogr-data .rgRow.groupingRow{font-weight:600;text-align:left}revogr-data .rgRow.groupingRow .group-expand{width:25px;height:100%;max-height:25px;margin-right:2px;background-color:transparent;border-color:transparent;vertical-align:middle;padding-left:5px;display:inline-flex}revogr-data .rgRow.groupingRow .group-expand svg{width:7px}revogr-data .revo-draggable{border:none;height:32px;display:inline-flex;outline:0;padding:0;font-size:0.8125rem;box-sizing:border-box;align-items:center;white-space:nowrap;vertical-align:middle;justify-content:center;text-decoration:none;width:24px;height:100%;cursor:pointer;display:inline-flex}revogr-data .revo-draggable:hover>.revo-drag-icon{opacity:1;zoom:1.2;font-weight:600}revogr-data .revo-draggable>.revo-drag-icon{pointer-events:none;transition:opacity 300ms cubic-bezier(0.4, 0, 0.2, 1) 0ms, zoom 300ms cubic-bezier(0.4, 0, 0.2, 1) 0ms}revogr-data .rgCell{top:0;left:0;position:absolute;box-sizing:border-box;height:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;outline:none}revogr-data .rgCell.align-center{text-align:center}revogr-data .rgCell.align-left{text-align:left}revogr-data .rgCell.align-right{text-align:right}`;
|
|
22121
|
+
const revogrDataStyleCss = () => `.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}revogr-data{display:block;width:100%;position:relative}revogr-data .rgRow{position:absolute;width:100%;left:0}revogr-data .rgRow>.row-resize-handle{position:absolute;z-index:2;right:0;bottom:-3px;left:0;height:7px;cursor:row-resize;touch-action:none;user-select:none}revogr-data .rgRow.groupingRow{font-weight:600;text-align:left}revogr-data .rgRow.groupingRow .group-expand{width:25px;height:100%;max-height:25px;margin-right:2px;background-color:transparent;border-color:transparent;vertical-align:middle;padding-left:5px;display:inline-flex}revogr-data .rgRow.groupingRow .group-expand svg{width:7px}revogr-data .revo-draggable{border:none;height:32px;display:inline-flex;outline:0;padding:0;font-size:0.8125rem;box-sizing:border-box;align-items:center;white-space:nowrap;vertical-align:middle;justify-content:center;text-decoration:none;width:24px;height:100%;cursor:pointer;display:inline-flex}revogr-data .revo-draggable:hover>.revo-drag-icon{opacity:1;zoom:1.2;font-weight:600}revogr-data .revo-draggable>.revo-drag-icon{pointer-events:none;transition:opacity 300ms cubic-bezier(0.4, 0, 0.2, 1) 0ms, zoom 300ms cubic-bezier(0.4, 0, 0.2, 1) 0ms}revogr-data .rgCell{top:0;left:0;position:absolute;box-sizing:border-box;height:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;outline:none}revogr-data .rgCell.align-center{text-align:center}revogr-data .rgCell.align-left{text-align:left}revogr-data .rgCell.align-right{text-align:right}`;
|
|
21339
22122
|
|
|
21340
22123
|
/**
|
|
21341
22124
|
* This component is responsible for rendering data
|
|
@@ -21445,7 +22228,10 @@ class RevogrData {
|
|
|
21445
22228
|
groupingCellRenderer, additionalData: this.additionalData,
|
|
21446
22229
|
// Only show expand button if grouping is enabled and not in row headers
|
|
21447
22230
|
hasExpand: this.columnService.hasGrouping && this.colType !== 'rowHeaders', columnItems: cols, providers: this.providers });
|
|
21448
|
-
|
|
22231
|
+
const row = hAsync(GroupingRowRenderer, Object.assign({}, gmodel));
|
|
22232
|
+
this.triggerBeforeRowRender(row, rgRow, dataItem);
|
|
22233
|
+
rowsEls.push(row);
|
|
22234
|
+
this.renderedRows.set(rgRow.itemIndex, row);
|
|
21449
22235
|
continue;
|
|
21450
22236
|
}
|
|
21451
22237
|
// #endregion
|
|
@@ -21494,19 +22280,22 @@ class RevogrData {
|
|
|
21494
22280
|
rowClass += ` ${ROW_FOCUSED_CLASS}`;
|
|
21495
22281
|
}
|
|
21496
22282
|
const row = (hAsync(RowRenderer, { index: rgRow.itemIndex, rowClass: rowClass, size: rgRow.size, start: rgRow.start - rowRenderOffset, groupingLevel: groupDepth || undefined }, cells));
|
|
21497
|
-
this.
|
|
21498
|
-
node: row,
|
|
21499
|
-
item: rgRow,
|
|
21500
|
-
model: dataItem,
|
|
21501
|
-
colType: this.columnService.type,
|
|
21502
|
-
rowType: this.type,
|
|
21503
|
-
});
|
|
22283
|
+
this.triggerBeforeRowRender(row, rgRow, dataItem);
|
|
21504
22284
|
rowsEls.push(row);
|
|
21505
22285
|
this.renderedRows.set(rgRow.itemIndex, row);
|
|
21506
22286
|
// #endregion
|
|
21507
22287
|
}
|
|
21508
22288
|
return (hAsync(Host, null, hAsync("slot", null), rowsEls));
|
|
21509
22289
|
}
|
|
22290
|
+
triggerBeforeRowRender(node, item, model) {
|
|
22291
|
+
this.beforerowrender.emit({
|
|
22292
|
+
node,
|
|
22293
|
+
item,
|
|
22294
|
+
model,
|
|
22295
|
+
colType: this.colType,
|
|
22296
|
+
rowType: this.type,
|
|
22297
|
+
});
|
|
22298
|
+
}
|
|
21510
22299
|
triggerBeforeCellRender(model, row, column) {
|
|
21511
22300
|
const detail = {
|
|
21512
22301
|
column,
|
|
@@ -21868,7 +22657,7 @@ const HeaderGroupRenderer = (p) => {
|
|
|
21868
22657
|
return (hAsync(HeaderCellRenderer, { data: Object.assign(Object.assign({}, p.group), { prop: '', providers: p.providers, index: p.start }), props: groupProps, additionalData: p.additionalData }));
|
|
21869
22658
|
};
|
|
21870
22659
|
|
|
21871
|
-
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;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}`;
|
|
22660
|
+
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}`;
|
|
21872
22661
|
|
|
21873
22662
|
class RevogrHeaderComponent {
|
|
21874
22663
|
constructor(hostRef) {
|
|
@@ -22430,7 +23219,7 @@ class LocalScrollTimer {
|
|
|
22430
23219
|
* Remember last mw event time
|
|
22431
23220
|
*/
|
|
22432
23221
|
latestScrollUpdate(dimension) {
|
|
22433
|
-
this.mouseWheelScrollTimestamp[dimension] =
|
|
23222
|
+
this.mouseWheelScrollTimestamp[dimension] = Date.now();
|
|
22434
23223
|
}
|
|
22435
23224
|
isReady(type, coordinate) {
|
|
22436
23225
|
// if there is a callback, clear it
|
|
@@ -22441,7 +23230,7 @@ class LocalScrollTimer {
|
|
|
22441
23230
|
return this.verifyChange(type, coordinate);
|
|
22442
23231
|
}
|
|
22443
23232
|
verifyChange(type, coordinate) {
|
|
22444
|
-
const now =
|
|
23233
|
+
const now = Date.now();
|
|
22445
23234
|
const change = now - this.mouseWheelScrollTimestamp[type];
|
|
22446
23235
|
return change > this.scrollThrottling &&
|
|
22447
23236
|
coordinate !== this.lastKnownScrollCoordinate[type];
|
|
@@ -22459,7 +23248,7 @@ class LocalScrollTimer {
|
|
|
22459
23248
|
// save lastScrollUpdate callback
|
|
22460
23249
|
const callback = this.lastScrollUpdateCallbacks[type] = {
|
|
22461
23250
|
callback: lastScrollUpdate,
|
|
22462
|
-
timestamp:
|
|
23251
|
+
timestamp: Date.now(),
|
|
22463
23252
|
coordinate,
|
|
22464
23253
|
timeout: 0,
|
|
22465
23254
|
};
|