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