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