@revolist/revogrid 4.23.13 → 4.23.15

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (36) hide show
  1. package/dist/cjs/{column.drag.plugin-D_Dfhp4f.js → column.drag.plugin-ByDJ7Rk3.js} +5 -5
  2. package/dist/cjs/{filter.button-B9EzJrr1.js → filter.button-C4xpvyyE.js} +10 -16
  3. package/dist/cjs/index.cjs.js +2 -2
  4. package/dist/cjs/revo-grid.cjs.entry.js +2 -2
  5. package/dist/cjs/revogr-clipboard_3.cjs.entry.js +1 -1
  6. package/dist/cjs/revogr-data_4.cjs.entry.js +1 -1
  7. package/dist/cjs/revogr-filter-panel.cjs.entry.js +119 -41
  8. package/dist/collection/components/clipboard/revogr-clipboard.js +1 -1
  9. package/dist/collection/plugins/filter/filter.button.js +10 -16
  10. package/dist/collection/plugins/filter/filter.panel.js +117 -39
  11. package/dist/collection/plugins/filter/filter.plugin.js +4 -4
  12. package/dist/collection/plugins/filter/filter.style.css +65 -13
  13. package/dist/{revo-grid/column.drag.plugin-UNSHSmgo.js → esm/column.drag.plugin-BZacA8n_.js} +5 -5
  14. package/dist/{revo-grid/filter.button-BFwo1uvz.js → esm/filter.button-B-RBiF67.js} +10 -16
  15. package/dist/esm/index.js +3 -3
  16. package/dist/esm/revo-grid.entry.js +2 -2
  17. package/dist/esm/revogr-clipboard_3.entry.js +1 -1
  18. package/dist/esm/revogr-data_4.entry.js +1 -1
  19. package/dist/esm/revogr-filter-panel.entry.js +119 -41
  20. package/dist/{esm/column.drag.plugin-UNSHSmgo.js → revo-grid/column.drag.plugin-BZacA8n_.js} +5 -5
  21. package/dist/{esm/filter.button-BFwo1uvz.js → revo-grid/filter.button-B-RBiF67.js} +10 -16
  22. package/dist/revo-grid/index.esm.js +3 -3
  23. package/dist/revo-grid/revo-grid.entry.js +2 -2
  24. package/dist/revo-grid/revogr-clipboard_3.entry.js +1 -1
  25. package/dist/revo-grid/revogr-data_4.entry.js +1 -1
  26. package/dist/revo-grid/revogr-filter-panel.entry.js +119 -41
  27. package/dist/types/plugins/filter/filter.button.d.ts +13 -3
  28. package/dist/types/plugins/filter/filter.panel.d.ts +4 -0
  29. package/dist/types/plugins/filter/filter.types.d.ts +7 -0
  30. package/hydrate/index.js +133 -61
  31. package/hydrate/index.mjs +133 -61
  32. package/package.json +1 -1
  33. package/standalone/filter.button.js +1 -1
  34. package/standalone/revo-grid.js +1 -1
  35. package/standalone/revogr-clipboard2.js +1 -1
  36. package/standalone/revogr-filter-panel.js +1 -1
@@ -8,7 +8,7 @@ var dimension_helpers = require('./dimension.helpers-B9HgANnM.js');
8
8
  var viewport_store = require('./viewport.store-BscUCiUk.js');
9
9
  var index$1 = require('./index-DxaSE5uZ.js');
10
10
  var index = require('./index-Dq8Xzj5l.js');
11
- var filter_button = require('./filter.button-B9EzJrr1.js');
11
+ var filter_button = require('./filter.button-C4xpvyyE.js');
12
12
  var debounce = require('./debounce-CcpHiH2p.js');
13
13
  var headerCellRenderer = require('./header-cell-renderer-DyjOxArm.js');
14
14
 
@@ -1402,7 +1402,8 @@ class FilterPlugin extends BasePlugin {
1402
1402
  async headerclick(e) {
1403
1403
  var _a, _b;
1404
1404
  const el = (_a = e.detail.originalEvent) === null || _a === void 0 ? void 0 : _a.target;
1405
- if (!filter_button.isFilterBtn(el)) {
1405
+ const filterButton = filter_button.isFilterBtn(el);
1406
+ if (!filterButton) {
1406
1407
  return;
1407
1408
  }
1408
1409
  e.preventDefault();
@@ -1416,9 +1417,8 @@ class FilterPlugin extends BasePlugin {
1416
1417
  return;
1417
1418
  }
1418
1419
  // filter button clicked, open filter dialog
1419
- const gridPos = this.revogrid.getBoundingClientRect();
1420
- const buttonPos = el.getBoundingClientRect();
1421
- const data = Object.assign(Object.assign(Object.assign({}, e.detail), this.filterCollection[prop]), { x: buttonPos.x - gridPos.x, y: buttonPos.y - gridPos.y + buttonPos.height, autoCorrect: true, filterTypes: this.getColumnFilter(e.detail.filter), filterItems: this.multiFilterItems, extraContent: this.extraHyperContent, extraBottomContent: this.extraBottomHyperContent });
1420
+ const buttonPos = (filterButton instanceof HTMLElement ? filterButton : el).getBoundingClientRect();
1421
+ 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 });
1422
1422
  (_b = this.beforeshow) === null || _b === void 0 ? void 0 : _b.call(this, data);
1423
1423
  this.pop.show(data);
1424
1424
  }
@@ -17,24 +17,18 @@ const FilterButton = ({ column }) => {
17
17
  [FILTER_BUTTON_ACTIVE]: column && !!column[FILTER_PROP],
18
18
  } }, index.h("svg", { class: "filter-img", viewBox: "0 0 64 64" }, index.h("g", { stroke: "none", "stroke-width": "1", fill: "none", "fill-rule": "evenodd" }, index.h("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" }))))));
19
19
  };
20
- const TrashButton = () => {
21
- return (index.h("div", { class: { [TRASH_BUTTON]: true } }, index.h("svg", { class: "trash-img", viewBox: "0 0 24 24" }, index.h("path", { fill: "currentColor", d: "M9,3V4H4V6H5V19A2,2 0 0,0 7,21H17A2,2 0 0,0 19,19V6H20V4H15V3H9M7,6H17V19H7V6M9,8V17H11V8H9M13,8V17H15V8H13Z" }))));
20
+ const TrashButton = ({ ariaLabel, onClick }) => {
21
+ return (index.h("button", { type: "button", class: { [TRASH_BUTTON]: true }, "aria-label": ariaLabel, onClick: onClick }, index.h("svg", { class: "trash-img", viewBox: "0 0 24 24" }, index.h("path", { fill: "currentColor", d: "M9,3V4H4V6H5V19A2,2 0 0,0 7,21H17A2,2 0 0,0 19,19V6H20V4H15V3H9M7,6H17V19H7V6M9,8V17H11V8H9M13,8V17H15V8H13Z" }))));
22
22
  };
23
- const AndOrButton = ({ text }) => {
24
- return index.h("button", { class: { [AND_OR_BUTTON]: true, 'light revo-button': true } }, text);
23
+ const AndOrButton = ({ text, onClick }) => {
24
+ return index.h("button", { type: "button", class: { [AND_OR_BUTTON]: true, 'light revo-button': true }, onClick: onClick }, text);
25
25
  };
26
- const ReorderButton = ({ dragging, dragOver, onDragStart, onDragEnd, onDragOver, onDragLeave, onDrop, }) => {
27
- const applyClass = (el) => {
28
- if (!el) {
29
- return;
30
- }
31
- el.className = [
32
- REORDER_BUTTON,
33
- dragging ? 'filter-row-dragging' : '',
34
- dragOver ? 'filter-row-drag-over' : '',
35
- ].filter(Boolean).join(' ');
36
- };
37
- return (index.h("button", { type: "button", ref: applyClass, draggable: true, title: "Reorder filter", "aria-label": "reorder filter", onDragStart: onDragStart, onDragEnd: onDragEnd, onDragOver: onDragOver, onDragLeave: onDragLeave, onDrop: onDrop }, "::"));
26
+ const ReorderButton = ({ ariaLabel, dragging, dragOver, onDragStart, onDragEnd, onDragOver, onDragLeave, onDrop, onKeyDown, }) => {
27
+ return (index.h("button", { type: "button", class: {
28
+ [REORDER_BUTTON]: true,
29
+ 'filter-row-dragging': !!dragging,
30
+ 'filter-row-drag-over': !!dragOver,
31
+ }, draggable: true, title: ariaLabel, "aria-label": ariaLabel, onDragStart: onDragStart, onDragEnd: onDragEnd, onDragOver: onDragOver, onDragLeave: onDragLeave, onDrop: onDrop, onKeyDown: onKeyDown }, "::"));
38
32
  };
39
33
  function isFilterBtn(e) {
40
34
  if (e.classList.contains(FILTER_BUTTON_CLASS)) {
@@ -4,7 +4,7 @@
4
4
  'use strict';
5
5
 
6
6
  var column_service = require('./column.service-BNWNiJW3.js');
7
- var column_drag_plugin = require('./column.drag.plugin-D_Dfhp4f.js');
7
+ var column_drag_plugin = require('./column.drag.plugin-ByDJ7Rk3.js');
8
8
  var headerCellRenderer = require('./header-cell-renderer-DyjOxArm.js');
9
9
  var cellRenderer = require('./cell-renderer-DfUCisis.js');
10
10
  var index$1 = require('./index-DxaSE5uZ.js');
@@ -13,7 +13,7 @@ var edit_utils = require('./edit.utils-pKeiYFLJ.js');
13
13
  var index = require('./index-Dq8Xzj5l.js');
14
14
  var dimension_helpers = require('./dimension.helpers-B9HgANnM.js');
15
15
  var viewport_store = require('./viewport.store-BscUCiUk.js');
16
- var filter_button = require('./filter.button-B9EzJrr1.js');
16
+ var filter_button = require('./filter.button-C4xpvyyE.js');
17
17
  require('./debounce-CcpHiH2p.js');
18
18
 
19
19
  const REVOGRID_EVENTS = new Map([
@@ -8,12 +8,12 @@ var column_service = require('./column.service-BNWNiJW3.js');
8
8
  var dimension_helpers = require('./dimension.helpers-B9HgANnM.js');
9
9
  var debounce = require('./debounce-CcpHiH2p.js');
10
10
  var viewport_helpers = require('./viewport.helpers-BND76K2j.js');
11
- var column_drag_plugin = require('./column.drag.plugin-D_Dfhp4f.js');
11
+ var column_drag_plugin = require('./column.drag.plugin-ByDJ7Rk3.js');
12
12
  var viewport_store = require('./viewport.store-BscUCiUk.js');
13
13
  var theme_service = require('./theme.service-BgnxGIjK.js');
14
14
  var index$1 = require('./index-DxaSE5uZ.js');
15
15
  var events = require('./events-DeLDyZlb.js');
16
- require('./filter.button-B9EzJrr1.js');
16
+ require('./filter.button-C4xpvyyE.js');
17
17
  require('./header-cell-renderer-DyjOxArm.js');
18
18
 
19
19
  class ColumnDataProvider {
@@ -145,7 +145,7 @@ const Clipboard = class {
145
145
  }
146
146
  getData(e) {
147
147
  return (e.clipboardData ||
148
- (window === null || window === void 0 ? void 0 : window.clipboardData));
148
+ (globalThis === null || globalThis === void 0 ? void 0 : globalThis.clipboardData));
149
149
  }
150
150
  };
151
151
 
@@ -7,7 +7,7 @@ var index = require('./index-Dq8Xzj5l.js');
7
7
  var column_service = require('./column.service-BNWNiJW3.js');
8
8
  var dimension_helpers = require('./dimension.helpers-B9HgANnM.js');
9
9
  var cellRenderer = require('./cell-renderer-DfUCisis.js');
10
- var filter_button = require('./filter.button-B9EzJrr1.js');
10
+ var filter_button = require('./filter.button-C4xpvyyE.js');
11
11
  var headerCellRenderer = require('./header-cell-renderer-DyjOxArm.js');
12
12
  var throttle = require('./throttle-BCwEuJJq.js');
13
13
  var viewport_helpers = require('./viewport.helpers-BND76K2j.js');
@@ -5,7 +5,7 @@
5
5
 
6
6
  var index = require('./index-Dq8Xzj5l.js');
7
7
  var debounce = require('./debounce-CcpHiH2p.js');
8
- var filter_button = require('./filter.button-B9EzJrr1.js');
8
+ var filter_button = require('./filter.button-C4xpvyyE.js');
9
9
 
10
10
  (function closest() {
11
11
  if (!Element.prototype.matches) {
@@ -68,12 +68,13 @@ function moveFilterItem(items, sourceId, targetId) {
68
68
  return true;
69
69
  }
70
70
 
71
- 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{position:absolute;display:block;top:0;left:0;z-index:100;max-height:calc(100% - 80px);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));padding:10px;border-radius:8px;min-width:220px;text-align:left;animation:revogr-filter-panel-open 140ms cubic-bezier(0.2, 0, 0, 1)}revogr-filter-panel .filter-holder>div{display:flex;flex-direction:column}revogr-filter-panel label{font-size:13px;display:block;padding:8px 0}revogr-filter-panel select{width:100%}revogr-filter-panel 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-actions{text-align:right;margin-right:-5px}revogr-filter-panel .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{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}.multi-filter-list .multi-filter-list-action{display:flex;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;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-dragging{opacity:0.55}.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}.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 .filter-extra{display:flex}.select-input .filter-extra>*{width:100%}.select-input input[type=text],.select-input input[type=date]{margin:0}`;
71
+ 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}`;
72
72
 
73
73
  const defaultType = 'none';
74
74
  const FILTER_LIST_CLASS = 'multi-filter-list';
75
75
  const FILTER_LIST_CLASS_ACTION = 'multi-filter-list-action';
76
76
  const FILTER_ID = 'add-filter';
77
+ const VIEWPORT_PADDING = 8;
77
78
  const FilterPanel = class {
78
79
  constructor(hostRef) {
79
80
  index.registerInstance(this, hostRef);
@@ -90,6 +91,9 @@ const FilterPanel = class {
90
91
  placeholder: 'Enter value...',
91
92
  and: 'and',
92
93
  or: 'or',
94
+ filterCondition: 'Filter condition',
95
+ removeFilter: 'Remove filter',
96
+ reorderFilter: 'Reorder filter',
93
97
  };
94
98
  this.isFilterIdSet = false;
95
99
  this.filterId = 0;
@@ -164,36 +168,75 @@ const FilterPanel = class {
164
168
  return '';
165
169
  const propFilters = (_b = this.filterItems[prop]) !== null && _b !== void 0 ? _b : [];
166
170
  const visibleFilterCount = propFilters.filter(filter => !filter.hidden).length;
167
- const capts = Object.assign(this.filterCaptionsInternal, this.filterCaptions);
168
- return (index.h("div", { key: this.filterId }, propFilters.map((filter, index$1) => {
171
+ const capts = Object.assign(Object.assign({}, this.filterCaptionsInternal), this.filterCaptions);
172
+ return (index.h("div", { key: this.filterId }, index.h("ul", { class: "multi-filter-list-container" }, propFilters.map((filter, index$1) => {
169
173
  let andOrButton;
170
174
  if (filter.hidden) {
171
175
  return;
172
176
  }
173
177
  // hide toggle button if there is only one filter and the last one
174
178
  if (index$1 !== this.filterItems[prop].length - 1) {
175
- andOrButton = (index.h("div", { onClick: () => this.toggleFilterAndOr(filter.id) }, index.h(filter_button.AndOrButton, { text: filter.relation === 'and' ? capts.and : capts.or })));
179
+ andOrButton = (index.h(filter_button.AndOrButton, { text: filter.relation === 'and' ? capts.and : capts.or, onClick: () => this.toggleFilterAndOr(filter.id) }));
176
180
  }
177
181
  const extra = this.renderExtra(prop, index$1);
178
- return (index.h("div", { key: filter.id, class: FILTER_LIST_CLASS }, index.h("div", { ref: el => el === null || el === void 0 ? void 0 : el.classList.add('multi-filter-list-row') }, visibleFilterCount > 1 ? (index.h(filter_button.ReorderButton, { dragging: this.draggedFilterId === filter.id, dragOver: this.dragOverFilterId === filter.id && this.draggedFilterId !== filter.id, onDragStart: e => this.onFilterDragStart(e, filter.id), onDragEnd: () => this.onFilterDragEnd(), onDragOver: e => this.onFilterDragOver(e, filter.id), onDragLeave: () => this.onFilterDragLeave(filter.id), onDrop: e => this.onFilterDrop(e, prop, filter.id) })) : '', index.h("div", { class: { 'select-input': true } }, index.h("select", { class: "select-css select-filter", onChange: e => this.onFilterTypeChange(e, prop, index$1) }, this.renderSelectOptions(this.filterItems[prop][index$1].type, true)), extra ? index.h("div", { class: "filter-extra" }, extra) : ''), index.h("div", { class: FILTER_LIST_CLASS_ACTION }, andOrButton, index.h("div", { onClick: () => this.onRemoveFilter(filter.id) }, index.h(filter_button.TrashButton, null))))));
179
- }), propFilters.filter(f => !f.hidden).length > 0 ? index.h("div", { class: "add-filter-divider" }) : ''));
182
+ const isDragging = this.draggedFilterId === filter.id;
183
+ const isDragOver = this.dragOverFilterId === filter.id && !isDragging;
184
+ const canReorder = visibleFilterCount > 1;
185
+ return (index.h("li", { key: filter.id, class: FILTER_LIST_CLASS, "aria-label": `${capts.filterCondition} ${index$1 + 1}` }, index.h("div", { class: {
186
+ 'multi-filter-list-row': true,
187
+ 'filter-row-drop-active': this.draggedFilterId !== undefined && !isDragging,
188
+ 'filter-row-dragging': isDragging,
189
+ 'filter-row-drag-over': isDragOver,
190
+ } }, canReorder ? (index.h("button", { type: "button", class: "filter-row-drop-target", tabIndex: -1, "aria-label": `${capts.filterCondition} ${index$1 + 1}`, onDragOver: e => this.onFilterDragOver(e, filter.id), onDragLeave: () => this.onFilterDragLeave(filter.id), onDrop: e => this.onFilterDrop(e, prop, filter.id) })) : '', canReorder ? (index.h(filter_button.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) })) : '', index.h("div", { class: { 'select-input': true } }, index.h("select", { class: "select-css select-filter", onChange: e => this.onFilterTypeChange(e, prop, index$1) }, this.renderSelectOptions(this.filterItems[prop][index$1].type, true)), extra ? index.h("div", { class: "filter-extra" }, extra) : ''), index.h("div", { class: FILTER_LIST_CLASS_ACTION }, andOrButton, index.h(filter_button.TrashButton, { ariaLabel: capts.removeFilter, onClick: () => this.onRemoveFilter(filter.id) })))));
191
+ })), propFilters.filter(f => !f.hidden).length > 0 ? index.h("div", { class: "add-filter-divider" }) : ''));
180
192
  }
181
- autoCorrect(el) {
182
- var _a, _b;
183
- if (!el) {
193
+ componentDidRender() {
194
+ this.syncDialog();
195
+ }
196
+ syncDialog() {
197
+ if (!this.dialog) {
184
198
  return;
185
199
  }
186
- const revoGrid = el.closest('revo-grid');
187
- if (!revoGrid) {
200
+ if (!this.changes) {
201
+ if (this.dialog.open) {
202
+ this.dialog.close();
203
+ }
188
204
  return;
189
205
  }
190
- const pos = el.getBoundingClientRect();
191
- const gridPos = revoGrid.getBoundingClientRect();
192
- const maxLeft = gridPos.right - pos.width;
193
- if (pos.left > maxLeft && el.offsetLeft) {
194
- el.style.left = `${maxLeft - ((_b = (_a = el.parentElement) === null || _a === void 0 ? void 0 : _a.getBoundingClientRect().left) !== null && _b !== void 0 ? _b : 0)}px`;
206
+ if (!this.dialog.open) {
207
+ this.dialog.show();
208
+ }
209
+ if (this.changes.autoCorrect !== false) {
210
+ this.autoCorrect(this.dialog);
211
+ requestAnimationFrame(() => this.autoCorrect(this.dialog));
195
212
  }
196
213
  }
214
+ autoCorrect(el) {
215
+ var _a;
216
+ if (!el || !this.changes) {
217
+ return;
218
+ }
219
+ el.style.maxHeight = '';
220
+ el.style.left = `${this.changes.x}px`;
221
+ el.style.top = `${this.changes.y}px`;
222
+ const pos = el.getBoundingClientRect();
223
+ const anchorTop = (_a = this.changes.anchorY) !== null && _a !== void 0 ? _a : this.changes.y;
224
+ const anchorBottom = this.changes.y;
225
+ const spaceAbove = Math.max(0, anchorTop - VIEWPORT_PADDING);
226
+ const spaceBelow = Math.max(0, window.innerHeight - anchorBottom - VIEWPORT_PADDING);
227
+ const openAbove = pos.height > spaceBelow && spaceAbove > spaceBelow;
228
+ const availableHeight = Math.max(VIEWPORT_PADDING, openAbove ? spaceAbove : spaceBelow);
229
+ el.style.maxHeight = `${availableHeight}px`;
230
+ const adjustedPos = el.getBoundingClientRect();
231
+ const maxLeft = Math.max(VIEWPORT_PADDING, window.innerWidth - adjustedPos.width - VIEWPORT_PADDING);
232
+ const maxTop = Math.max(VIEWPORT_PADDING, window.innerHeight - adjustedPos.height - VIEWPORT_PADDING);
233
+ const left = Math.min(Math.max(VIEWPORT_PADDING, this.changes.x), maxLeft);
234
+ const top = openAbove
235
+ ? Math.min(Math.max(VIEWPORT_PADDING, anchorTop - adjustedPos.height), maxTop)
236
+ : Math.min(Math.max(VIEWPORT_PADDING, anchorBottom), maxTop);
237
+ el.style.left = `${left}px`;
238
+ el.style.top = `${top}px`;
239
+ }
197
240
  onFilterTypeChange(e, prop, index) {
198
241
  if (!(e.target instanceof HTMLSelectElement)) {
199
242
  return;
@@ -327,6 +370,37 @@ const FilterPanel = class {
327
370
  this.draggedFilterId = undefined;
328
371
  this.dragOverFilterId = undefined;
329
372
  }
373
+ onFilterReorderKeyDown(e, prop, sourceId) {
374
+ let direction = 0;
375
+ if (e.key === 'ArrowUp') {
376
+ direction = -1;
377
+ }
378
+ else if (e.key === 'ArrowDown') {
379
+ direction = 1;
380
+ }
381
+ else {
382
+ return;
383
+ }
384
+ const items = this.filterItems[prop];
385
+ if (!items) {
386
+ return;
387
+ }
388
+ const visibleItems = items.filter(item => !item.hidden);
389
+ const sourceIndex = visibleItems.findIndex(item => item.id === sourceId);
390
+ if (sourceIndex === -1) {
391
+ return;
392
+ }
393
+ e.preventDefault();
394
+ e.stopPropagation();
395
+ const target = visibleItems[sourceIndex + direction];
396
+ if (!target || !moveFilterItem(items, sourceId, target.id)) {
397
+ return;
398
+ }
399
+ this.filterId++;
400
+ if (!this.disableDynamicFiltering) {
401
+ this.debouncedApplyFilter();
402
+ }
403
+ }
330
404
  toggleFilterAndOr(id) {
331
405
  var _a;
332
406
  this.assertChanges();
@@ -365,7 +439,7 @@ const FilterPanel = class {
365
439
  });
366
440
  });
367
441
  if (!isDefaultTypeRemoved) {
368
- const capts = Object.assign(this.filterCaptionsInternal, this.filterCaptions);
442
+ const capts = Object.assign(Object.assign({}, this.filterCaptionsInternal), this.filterCaptions);
369
443
  options.push(index.h("option", { selected: this.currentFilterType === defaultType, value: defaultType }, prop && this.filterItems[prop] && this.filterItems[prop].length > 0
370
444
  ? capts.add
371
445
  : this.filterNames[defaultType]));
@@ -398,7 +472,7 @@ const FilterPanel = class {
398
472
  select.focus();
399
473
  }
400
474
  };
401
- const capts = Object.assign(this.filterCaptionsInternal, this.filterCaptions);
475
+ const capts = Object.assign(Object.assign({}, this.filterCaptionsInternal), this.filterCaptions);
402
476
  const extra = this.filterEntities[currentFilter[index$1].type].extra;
403
477
  if (typeof extra === 'function') {
404
478
  return extra(index.h, {
@@ -435,30 +509,34 @@ const FilterPanel = class {
435
509
  } }));
436
510
  }
437
511
  render() {
438
- var _a, _b, _c, _d, _e;
439
- if (!this.changes) {
440
- return index.h(index.Host, { style: { display: 'none' } });
441
- }
512
+ var _a, _b, _c, _d, _e, _f, _g, _h, _j;
442
513
  const style = {
443
- display: 'block',
444
- left: `${this.changes.x}px`,
445
- top: `${this.changes.y}px`,
514
+ left: `${(_b = (_a = this.changes) === null || _a === void 0 ? void 0 : _a.x) !== null && _b !== void 0 ? _b : 0}px`,
515
+ top: `${(_d = (_c = this.changes) === null || _c === void 0 ? void 0 : _c.y) !== null && _d !== void 0 ? _d : 0}px`,
446
516
  };
447
- const capts = Object.assign(this.filterCaptionsInternal, this.filterCaptions);
448
- return (index.h(index.Host, { style: style, ref: el => {
449
- var _a;
450
- ((_a = this.changes) === null || _a === void 0 ? void 0 : _a.autoCorrect) !== false && this.autoCorrect(el);
451
- } }, index.h("slot", { slot: "header" }), ((_b = (_a = this.changes).extraContent) === null || _b === void 0 ? void 0 : _b.call(_a, this.changes)) || '', ((_c = this.changes) === null || _c === void 0 ? void 0 : _c.hideDefaultFilters) !== true && ([
452
- index.h("label", null, capts.title),
453
- index.h("div", { class: "filter-holder" }, this.getFilterItemsList()),
454
- index.h("div", { class: "add-filter" }, index.h("select", { id: FILTER_ID, class: "select-css", onChange: e => this.onAddNewFilter(e) }, this.renderSelectOptions(this.currentFilterType)))
455
- ]), index.h("slot", null), ((_e = (_d = this.changes).extraBottomContent) === null || _e === void 0 ? void 0 : _e.call(_d, this.changes)) || '', index.h("div", { class: "filter-actions" }, this.disableDynamicFiltering && [
456
- index.h("button", { id: "revo-button-save", "aria-label": "save", class: "revo-button green", onClick: () => this.onSave() }, capts.save),
457
- index.h("button", { id: "revo-button-ok", "aria-label": "ok", class: "revo-button green", onClick: () => this.onCancel() }, capts.cancel),
458
- ], !this.disableDynamicFiltering && [
459
- index.h("button", { id: "revo-button-ok", "aria-label": "ok", class: "revo-button green", onClick: () => this.onCancel() }, capts.ok),
460
- index.h("button", { id: "revo-button-reset", "aria-label": "reset", class: "revo-button outline", onClick: () => this.onReset() }, capts.reset),
461
- ]), index.h("slot", { slot: "footer" })));
517
+ const capts = Object.assign(Object.assign({}, this.filterCaptionsInternal), this.filterCaptions);
518
+ return (index.h(index.Host, { key: '4e969f8b7033363c885c94b1f7770917786669f2' }, index.h("dialog", { key: '79b2713724684fa99f56621fe43645a0b0ad54bf', class: "filter-panel-dialog", style: style, ref: el => (this.dialog = el), onCancel: e => {
519
+ e.preventDefault();
520
+ this.onCancel();
521
+ } }, this.changes && [
522
+ index.h("slot", { key: "header-slot", slot: "header" }),
523
+ ((_f = (_e = this.changes).extraContent) === null || _f === void 0 ? void 0 : _f.call(_e, this.changes)) || '',
524
+ ((_g = this.changes) === null || _g === void 0 ? void 0 : _g.hideDefaultFilters) !== true && [
525
+ index.h("label", { key: "filter-title" }, capts.title),
526
+ index.h("div", { key: "filter-holder", class: "filter-holder" }, this.getFilterItemsList()),
527
+ index.h("div", { key: "add-filter", class: "add-filter" }, index.h("select", { key: 'fc894bdfae1ff35d5c49adc7646dd3182b7bd49e', id: FILTER_ID, class: "select-css", onChange: e => this.onAddNewFilter(e) }, this.renderSelectOptions(this.currentFilterType))),
528
+ ],
529
+ index.h("slot", { key: "default-slot" }),
530
+ ((_j = (_h = this.changes).extraBottomContent) === null || _j === void 0 ? void 0 : _j.call(_h, this.changes)) || '',
531
+ index.h("div", { key: "filter-actions", class: "filter-actions" }, this.disableDynamicFiltering && [
532
+ index.h("button", { key: "save", id: "revo-button-save", "aria-label": "save", class: "revo-button green", onClick: () => this.onSave() }, capts.save),
533
+ index.h("button", { key: "cancel", id: "revo-button-ok", "aria-label": "ok", class: "revo-button green", onClick: () => this.onCancel() }, capts.cancel),
534
+ ], !this.disableDynamicFiltering && [
535
+ index.h("button", { key: "ok", id: "revo-button-ok", "aria-label": "ok", class: "revo-button green", onClick: () => this.onCancel() }, capts.ok),
536
+ index.h("button", { key: "reset", id: "revo-button-reset", "aria-label": "reset", class: "revo-button outline", onClick: () => this.onReset() }, capts.reset),
537
+ ]),
538
+ index.h("slot", { key: "footer-slot", slot: "footer" }),
539
+ ])));
462
540
  }
463
541
  get element() { return index.getElement(this); }
464
542
  };
@@ -124,7 +124,7 @@ export class Clipboard {
124
124
  }
125
125
  getData(e) {
126
126
  return (e.clipboardData ||
127
- (window === null || window === void 0 ? void 0 : window.clipboardData));
127
+ (globalThis === null || globalThis === void 0 ? void 0 : globalThis.clipboardData));
128
128
  }
129
129
  static get is() { return "revogr-clipboard"; }
130
130
  static get properties() {
@@ -14,24 +14,18 @@ export const FilterButton = ({ column }) => {
14
14
  [FILTER_BUTTON_ACTIVE]: column && !!column[FILTER_PROP],
15
15
  } }, h("svg", { class: "filter-img", viewBox: "0 0 64 64" }, h("g", { stroke: "none", "stroke-width": "1", fill: "none", "fill-rule": "evenodd" }, h("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" }))))));
16
16
  };
17
- export const TrashButton = () => {
18
- return (h("div", { class: { [TRASH_BUTTON]: true } }, h("svg", { class: "trash-img", viewBox: "0 0 24 24" }, h("path", { fill: "currentColor", d: "M9,3V4H4V6H5V19A2,2 0 0,0 7,21H17A2,2 0 0,0 19,19V6H20V4H15V3H9M7,6H17V19H7V6M9,8V17H11V8H9M13,8V17H15V8H13Z" }))));
17
+ export const TrashButton = ({ ariaLabel, onClick }) => {
18
+ return (h("button", { type: "button", class: { [TRASH_BUTTON]: true }, "aria-label": ariaLabel, onClick: onClick }, h("svg", { class: "trash-img", viewBox: "0 0 24 24" }, h("path", { fill: "currentColor", d: "M9,3V4H4V6H5V19A2,2 0 0,0 7,21H17A2,2 0 0,0 19,19V6H20V4H15V3H9M7,6H17V19H7V6M9,8V17H11V8H9M13,8V17H15V8H13Z" }))));
19
19
  };
20
- export const AndOrButton = ({ text }) => {
21
- return h("button", { class: { [AND_OR_BUTTON]: true, 'light revo-button': true } }, text);
20
+ export const AndOrButton = ({ text, onClick }) => {
21
+ return h("button", { type: "button", class: { [AND_OR_BUTTON]: true, 'light revo-button': true }, onClick: onClick }, text);
22
22
  };
23
- export const ReorderButton = ({ dragging, dragOver, onDragStart, onDragEnd, onDragOver, onDragLeave, onDrop, }) => {
24
- const applyClass = (el) => {
25
- if (!el) {
26
- return;
27
- }
28
- el.className = [
29
- REORDER_BUTTON,
30
- dragging ? 'filter-row-dragging' : '',
31
- dragOver ? 'filter-row-drag-over' : '',
32
- ].filter(Boolean).join(' ');
33
- };
34
- return (h("button", { type: "button", ref: applyClass, draggable: true, title: "Reorder filter", "aria-label": "reorder filter", onDragStart: onDragStart, onDragEnd: onDragEnd, onDragOver: onDragOver, onDragLeave: onDragLeave, onDrop: onDrop }, "::"));
23
+ export const ReorderButton = ({ ariaLabel, dragging, dragOver, onDragStart, onDragEnd, onDragOver, onDragLeave, onDrop, onKeyDown, }) => {
24
+ return (h("button", { type: "button", class: {
25
+ [REORDER_BUTTON]: true,
26
+ 'filter-row-dragging': !!dragging,
27
+ 'filter-row-drag-over': !!dragOver,
28
+ }, draggable: true, title: ariaLabel, "aria-label": ariaLabel, onDragStart: onDragStart, onDragEnd: onDragEnd, onDragOver: onDragOver, onDragLeave: onDragLeave, onDrop: onDrop, onKeyDown: onKeyDown }, "::"));
35
29
  };
36
30
  export function isFilterBtn(e) {
37
31
  if (e.classList.contains(FILTER_BUTTON_CLASS)) {