@oscarpalmer/tabela 0.9.0 → 0.10.0

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 (47) hide show
  1. package/dist/components/body.component.js +2 -15
  2. package/dist/components/footer.component.js +3 -3
  3. package/dist/components/header.component.js +2 -2
  4. package/dist/components/row.component.js +13 -4
  5. package/dist/helpers/dom.helpers.js +5 -10
  6. package/dist/helpers/misc.helpers.js +7 -0
  7. package/dist/helpers/style.helper.js +6 -0
  8. package/dist/managers/column.manager.js +1 -1
  9. package/dist/managers/data.manager.js +1 -1
  10. package/dist/managers/event.manager.js +5 -1
  11. package/dist/managers/filter.manager.js +1 -1
  12. package/dist/managers/{virtualization.manager.js → render.manager.js} +26 -22
  13. package/dist/managers/row.manager.js +2 -2
  14. package/dist/managers/selection.manager.js +191 -0
  15. package/dist/managers/sort.manager.js +1 -1
  16. package/dist/tabela.full.js +634 -96
  17. package/dist/tabela.js +11 -6
  18. package/package.json +1 -1
  19. package/src/components/body.component.ts +4 -21
  20. package/src/components/footer.component.ts +3 -3
  21. package/src/components/header.component.ts +2 -2
  22. package/src/components/row.component.ts +22 -7
  23. package/src/helpers/dom.helpers.ts +3 -10
  24. package/src/helpers/misc.helpers.ts +15 -0
  25. package/src/helpers/style.helper.ts +6 -0
  26. package/src/managers/column.manager.ts +1 -1
  27. package/src/managers/data.manager.ts +1 -1
  28. package/src/managers/event.manager.ts +8 -1
  29. package/src/managers/filter.manager.ts +1 -1
  30. package/src/managers/{virtualization.manager.ts → render.manager.ts} +34 -32
  31. package/src/managers/row.manager.ts +2 -2
  32. package/src/managers/selection.manager.ts +338 -0
  33. package/src/managers/sort.manager.ts +1 -1
  34. package/src/models/{virtualization.model.ts → render.model.ts} +3 -3
  35. package/src/models/tabela.model.ts +11 -2
  36. package/src/tabela.ts +12 -5
  37. package/types/components/row.component.d.ts +2 -2
  38. package/types/helpers/dom.helpers.d.ts +1 -1
  39. package/types/helpers/misc.helpers.d.ts +2 -0
  40. package/types/helpers/style.helper.d.ts +1 -0
  41. package/types/managers/event.manager.d.ts +1 -1
  42. package/types/managers/{virtualization.manager.d.ts → render.manager.d.ts} +6 -6
  43. package/types/managers/selection.manager.d.ts +19 -0
  44. package/types/models/{virtualization.model.d.ts → render.model.d.ts} +3 -3
  45. package/types/models/tabela.model.d.ts +10 -2
  46. package/types/tabela.d.ts +2 -1
  47. /package/dist/models/{virtualization.model.js → render.model.js} +0 -0
@@ -1,14 +1,6 @@
1
1
  import { createElement, createRowGroup } from "../helpers/dom.helpers.js";
2
- import { setStyles } from "@oscarpalmer/toretto/style";
3
2
  function createFaker() {
4
- return createElement("div", {}, {}, {
5
- height: "0",
6
- inset: "0 auto auto 0",
7
- opacity: "0",
8
- pointerEvents: "none",
9
- position: "absolute",
10
- width: "1px"
11
- });
3
+ return createElement("div", { className: "tabela__faker" }, {}, {});
12
4
  }
13
5
  var BodyComponent = class {
14
6
  elements = {
@@ -18,13 +10,8 @@ var BodyComponent = class {
18
10
  constructor() {
19
11
  const group = createRowGroup(false);
20
12
  this.elements.group = group;
21
- group.className += " tabela__rowgroup-body";
13
+ group.className += " tabela__rowgroup--body";
22
14
  group.tabIndex = 0;
23
- setStyles(group, {
24
- height: "100%",
25
- overflow: "auto",
26
- position: "relative"
27
- });
28
15
  group.append(this.elements.faker);
29
16
  }
30
17
  destroy() {
@@ -8,8 +8,8 @@ var FooterComponent = class {
8
8
  row,
9
9
  cells: []
10
10
  };
11
- group.className += " tabela__rowgroup-footer";
12
- row.className += " tabela__row-footer";
11
+ group.className += " tabela__rowgroup--footer";
12
+ row.className += " tabela__row--footer";
13
13
  }
14
14
  destroy() {
15
15
  this.elements.cells.length = 0;
@@ -23,7 +23,7 @@ var FooterComponent = class {
23
23
  elements.row.innerHTML = "";
24
24
  for (let index = 0; index < length; index += 1) {
25
25
  const cell = createCell(columns[index].options.width ?? 4, false);
26
- cell.className += " tabela__cell-footer";
26
+ cell.className += " tabela__cell--footer";
27
27
  cell.innerHTML = "&nbsp;";
28
28
  elements.cells.push(cell);
29
29
  elements.row.append(cell);
@@ -7,8 +7,8 @@ var HeaderComponent = class {
7
7
  group,
8
8
  row
9
9
  };
10
- group.className += " tabela__rowgroup-header";
11
- row.className += " tabela__row-header";
10
+ group.className += " tabela__rowgroup--header";
11
+ row.className += " tabela__row--header";
12
12
  }
13
13
  destroy() {
14
14
  this.elements.group = void 0;
@@ -1,4 +1,5 @@
1
1
  import { createCell, createRow } from "../helpers/dom.helpers.js";
2
+ import { setAttributes } from "@oscarpalmer/toretto/attribute";
2
3
  function removeRow(pool, row) {
3
4
  if (row.element != null) {
4
5
  row.element.innerHTML = "";
@@ -9,18 +10,26 @@ function removeRow(pool, row) {
9
10
  row.cells = {};
10
11
  }
11
12
  function renderRow(managers, row) {
12
- const element = row.element ?? managers.virtualization.pool.rows.shift() ?? createRow();
13
+ const element = row.element ?? managers.render.pool.rows.shift() ?? createRow();
13
14
  row.element = element;
14
- element.dataset.key = String(row.key);
15
15
  element.innerHTML = "";
16
+ const selected = managers.selection.items.has(row.key);
17
+ setAttributes(element, {
18
+ "aria-selected": String(selected),
19
+ "data-event": "row",
20
+ "data-key": String(row.key)
21
+ });
22
+ element.classList.add("tabela__row--body");
23
+ if (selected) element.classList.add("tabela__row--selected");
24
+ else element.classList.remove("tabela__row--selected");
16
25
  const columns = managers.column.items;
17
26
  const { length } = columns;
18
27
  const data = managers.data.values.objects.mapped.get(row.key);
19
28
  if (data == null) return;
20
29
  for (let index = 0; index < length; index += 1) {
21
30
  const { options } = columns[index];
22
- managers.virtualization.pool.cells[options.field] ??= [];
23
- const cell = managers.virtualization.pool.cells[columns[index].options.field].shift() ?? createCell(options.width);
31
+ managers.render.pool.cells[options.field] ??= [];
32
+ const cell = managers.render.pool.cells[columns[index].options.field].shift() ?? createCell(options.width);
24
33
  cell.textContent = String(data[options.field]);
25
34
  row.cells[options.field] = cell;
26
35
  element.append(cell);
@@ -1,11 +1,11 @@
1
- import { setStyles } from "@oscarpalmer/toretto/style";
2
1
  import { setAttributes } from "@oscarpalmer/toretto/attribute";
2
+ import { setStyles } from "@oscarpalmer/toretto/style";
3
3
  function createCell(width, body) {
4
4
  const cell = createElement("div", {
5
5
  className: "tabela__cell",
6
6
  role: "cell"
7
7
  }, {}, { width: `${width}px` });
8
- if (body ?? true) cell.classList.add("tabela__cell-body");
8
+ if (body ?? true) cell.classList.add("tabela__cell--body");
9
9
  return cell;
10
10
  }
11
11
  function createElement(tagName, properties, attributes, style) {
@@ -22,22 +22,17 @@ function createRowGroup(withRow) {
22
22
  role: "rowgroup"
23
23
  }, {}, {});
24
24
  if (!(withRow ?? true)) return group;
25
- const row = createRow(false);
25
+ const row = createRow();
26
26
  group.append(row);
27
27
  return {
28
28
  group,
29
29
  row
30
30
  };
31
31
  }
32
- function createRow(withStyle) {
33
- const row = createElement("div", {
32
+ function createRow() {
33
+ return createElement("div", {
34
34
  className: "tabela__row",
35
35
  role: "row"
36
36
  }, {}, {});
37
- if (withStyle ?? true) setStyles(row, {
38
- inset: "0 auto auto 0",
39
- position: "absolute"
40
- });
41
- return row;
42
37
  }
43
38
  export { createCell, createElement, createRow, createRowGroup };
@@ -0,0 +1,7 @@
1
+ function getKey(value) {
2
+ if (typeof value === "number") return value;
3
+ if (typeof value !== "string") return;
4
+ return integerExpression.test(value) ? Number.parseInt(value, 10) : value;
5
+ }
6
+ var integerExpression = /^\d+$/;
7
+ export { getKey };
@@ -0,0 +1,6 @@
1
+ import { toggleStyles } from "@oscarpalmer/toretto/style";
2
+ const dragStyling = toggleStyles(document.body, {
3
+ userSelect: "none",
4
+ webkitUserSelect: "none"
5
+ });
6
+ export { dragStyling };
@@ -25,7 +25,7 @@ var ColumnManager = class {
25
25
  }
26
26
  components.header.update(items);
27
27
  components.footer.update(items);
28
- managers.virtualization.removeCells(fields);
28
+ managers.render.removeCells(fields);
29
29
  }
30
30
  set(columns) {
31
31
  const { components, items } = this;
@@ -66,7 +66,7 @@ var DataManager = class {
66
66
  values.keys.original = sort(values.objects.array.map((item) => item[field]));
67
67
  if (Object.keys(managers.filter.items).length > 0) managers.filter.filter();
68
68
  else if (managers.sort.items.length > 0) managers.sort.sort();
69
- else managers.virtualization.update(true);
69
+ else managers.render.update(true);
70
70
  }
71
71
  set(data) {
72
72
  const { field, values } = this;
@@ -2,7 +2,7 @@ import { on } from "@oscarpalmer/toretto/event";
2
2
  import { findAncestor } from "@oscarpalmer/toretto";
3
3
  var EventManager = class {
4
4
  listener;
5
- constructor(managers, element) {
5
+ constructor(element, managers) {
6
6
  this.managers = managers;
7
7
  this.listener = on(element, "click", (event) => {
8
8
  this.onClick(event);
@@ -18,6 +18,10 @@ var EventManager = class {
18
18
  case "heading":
19
19
  this.onSort(event, target);
20
20
  break;
21
+ case "row":
22
+ this.managers.selection.handle(event, target);
23
+ break;
24
+ default: break;
21
25
  }
22
26
  }
23
27
  onSort(event, target) {
@@ -51,7 +51,7 @@ var FilterManager = class {
51
51
  }
52
52
  managers.data.values.keys.active = filtered;
53
53
  if (managers.sort.items.length > 0) managers.sort.sort();
54
- else managers.virtualization.update(true, true);
54
+ else managers.render.update(true, true);
55
55
  }
56
56
  remove(value) {
57
57
  if (typeof value === "string") {
@@ -4,12 +4,12 @@ function getRange(down) {
4
4
  const { components, managers } = this;
5
5
  const { clientHeight, scrollTop } = components.body.elements.group;
6
6
  const first = Math.floor(scrollTop / managers.row.height);
7
- const last = Math.min(managers.data.values.keys.active?.length ?? managers.data.values.keys.original.length - 1, Math.ceil((scrollTop + clientHeight) / managers.row.height) - 1);
7
+ const last = Math.min((managers.data.values.keys.active?.length ?? managers.data.values.keys.original.length) - 1, Math.ceil((scrollTop + clientHeight) / managers.row.height) - 1);
8
8
  const before = Math.ceil(clientHeight / managers.row.height) * (down ? 1 : 2);
9
9
  const after = Math.ceil(clientHeight / managers.row.height) * (down ? 2 : 1);
10
10
  const start = Math.max(0, first - before);
11
11
  return {
12
- end: Math.min(managers.data.values.keys.active?.length ?? managers.data.values.keys.original.length - 1, last + after),
12
+ end: Math.min((managers.data.values.keys.active?.length ?? managers.data.values.keys.original.length) - 1, last + after),
13
13
  start
14
14
  };
15
15
  }
@@ -24,7 +24,7 @@ function onScroll() {
24
24
  this.state.active = true;
25
25
  }
26
26
  }
27
- var VirtualizationManager = class {
27
+ var RenderManager = class {
28
28
  fragment;
29
29
  listener;
30
30
  pool = {
@@ -42,23 +42,26 @@ var VirtualizationManager = class {
42
42
  this.listener = on(components.body.elements.group, "scroll", onScroll.bind(this));
43
43
  }
44
44
  destroy() {
45
- this.listener();
46
- for (const [index, row] of this.visible) {
47
- removeRow(this.pool, row);
48
- this.visible.delete(index);
49
- }
50
- this.pool.cells = {};
51
- this.pool.rows = [];
45
+ const { listener, pool, visible } = this;
46
+ listener();
47
+ visible.clear();
48
+ pool.cells = {};
49
+ pool.rows = [];
52
50
  this.listener = void 0;
53
51
  this.visible = void 0;
54
52
  }
55
53
  removeCells(fields) {
54
+ const { managers, pool, visible } = this;
56
55
  const { length } = fields;
57
- for (let index = 0; index < length; index += 1) delete this.pool.cells[fields[index]];
58
- for (const [, row] of this.visible) for (let index = 0; index < length; index += 1) {
59
- row.cells[fields[index]].innerHTML = "";
60
- row.cells[fields[index]].remove();
61
- delete row.cells[fields[index]];
56
+ for (let index = 0; index < length; index += 1) delete pool.cells[fields[index]];
57
+ for (const [, key] of visible) {
58
+ const row = managers.row.get(key);
59
+ if (row == null || row.element == null) continue;
60
+ for (let index = 0; index < length; index += 1) {
61
+ row.cells[fields[index]].innerHTML = "";
62
+ row.cells[fields[index]].remove();
63
+ delete row.cells[fields[index]];
64
+ }
62
65
  }
63
66
  }
64
67
  getFragment() {
@@ -73,11 +76,11 @@ var VirtualizationManager = class {
73
76
  const range = getRange.call(this, down);
74
77
  for (let index = range.start; index <= range.end; index += 1) indices.add(index);
75
78
  let remove = rerender ?? false;
76
- for (const [index, row] of visible) {
77
- if (!managers.row.has(row.key) || !indices.has(index)) remove = true;
78
- if (remove) {
79
+ for (const [index, key] of visible) {
80
+ const row = managers.row.get(key);
81
+ if (remove || row == null || !indices.has(index)) {
79
82
  visible.delete(index);
80
- removeRow(pool, row);
83
+ if (row != null) removeRow(pool, row);
81
84
  }
82
85
  }
83
86
  const fragment = this.getFragment();
@@ -85,11 +88,12 @@ var VirtualizationManager = class {
85
88
  let count = 0;
86
89
  for (let index = range.start; index <= range.end; index += 1) {
87
90
  if (visible.has(index)) continue;
88
- const row = managers.row.get(keys[index]);
91
+ const key = keys[index];
92
+ const row = managers.row.get(key);
89
93
  if (row == null) continue;
90
94
  count += 1;
91
95
  renderRow(managers, row);
92
- visible.set(index, row);
96
+ visible.set(index, key);
93
97
  if (row.element != null) {
94
98
  row.element.style.transform = `translateY(${index * managers.row.height}px)`;
95
99
  fragment.append(row.element);
@@ -98,4 +102,4 @@ var VirtualizationManager = class {
98
102
  if (count > 0) components.body.elements.group[down ? "append" : "prepend"](fragment);
99
103
  }
100
104
  };
101
- export { VirtualizationManager };
105
+ export { RenderManager };
@@ -9,7 +9,7 @@ var RowManager = class {
9
9
  destroy() {
10
10
  const components = [...this.components.values()];
11
11
  const { length } = components;
12
- for (let index = 0; index < length; index += 1) removeRow(this.managers.virtualization.pool, components[index]);
12
+ for (let index = 0; index < length; index += 1) removeRow(this.managers.render.pool, components[index]);
13
13
  this.components.clear();
14
14
  }
15
15
  get(key) {
@@ -26,7 +26,7 @@ var RowManager = class {
26
26
  remove(key) {
27
27
  const row = this.components.get(key);
28
28
  if (row != null) {
29
- removeRow(this.managers.virtualization.pool, row);
29
+ removeRow(this.managers.render.pool, row);
30
30
  this.components.delete(key);
31
31
  }
32
32
  }
@@ -0,0 +1,191 @@
1
+ import { createElement } from "../helpers/dom.helpers.js";
2
+ import { getKey } from "../helpers/misc.helpers.js";
3
+ import { dragStyling } from "../helpers/style.helper.js";
4
+ import { setAttribute } from "@oscarpalmer/toretto/attribute";
5
+ import { isKey } from "@oscarpalmer/atoms/is";
6
+ import { getPosition, on } from "@oscarpalmer/toretto/event";
7
+ import { findAncestor } from "@oscarpalmer/toretto";
8
+ var SelectionManager = class {
9
+ handlers = Object.freeze({
10
+ clear: () => this.clear(),
11
+ deselect: (keys) => this.deselect(keys),
12
+ select: (keys) => this.select(keys),
13
+ toggle: () => this.toggle()
14
+ });
15
+ items = /* @__PURE__ */ new Set();
16
+ last;
17
+ constructor(element, managers) {
18
+ this.element = element;
19
+ this.managers = managers;
20
+ mapped.set(element, this);
21
+ }
22
+ clear() {
23
+ if (this.items.size === 0) return;
24
+ const removed = [...this.items];
25
+ this.items.clear();
26
+ this.update(removed);
27
+ }
28
+ deselect(keys) {
29
+ const { length } = keys;
30
+ const removed = [];
31
+ for (let index = 0; index < length; index += 1) {
32
+ const key = keys[index];
33
+ if (this.items.delete(key)) removed.push(key);
34
+ }
35
+ if (removed.length > 0) this.update(removed);
36
+ }
37
+ destroy() {
38
+ mapped.delete(this.element);
39
+ this.handlers = void 0;
40
+ this.element = void 0;
41
+ this.items = void 0;
42
+ }
43
+ handle(event, target) {
44
+ const key = getKey(target.getAttribute("data-key"));
45
+ if (key == null) return;
46
+ const { items } = this;
47
+ if (event.shiftKey) {
48
+ if (this.last == null) {
49
+ this.last = key;
50
+ return;
51
+ }
52
+ this.range(this.last, key);
53
+ this.last = key;
54
+ return;
55
+ }
56
+ this.last = key;
57
+ if (event.ctrlKey || event.metaKey) {
58
+ if (items.has(key)) this.deselect([key]);
59
+ else this.select([key]);
60
+ return;
61
+ }
62
+ if (items.has(key)) if (items.size === 1) this.clear();
63
+ else this.set([key]);
64
+ else this.set([key]);
65
+ }
66
+ range(from, to) {
67
+ const keyed = isKey(from) && isKey(to);
68
+ const fromKey = keyed ? from : getKey(from.getAttribute("data-key"));
69
+ const toKey = keyed ? to : getKey(to.getAttribute("data-key"));
70
+ if (fromKey === toKey) return;
71
+ const keys = this.managers.data.values.keys.active ?? this.managers.data.values.keys.original;
72
+ const fromIndex = keys.indexOf(fromKey);
73
+ const toIndex = keys.indexOf(toKey);
74
+ if (fromIndex === -1 || toIndex === -1) return;
75
+ const [start, end] = fromIndex < toIndex ? [fromIndex, toIndex] : [toIndex, fromIndex];
76
+ const selected = [];
77
+ for (let index = start; index <= end; index += 1) selected.push(keys[index]);
78
+ if (keyed) this.select(selected);
79
+ else this.set(selected);
80
+ }
81
+ select(keys) {
82
+ const { length } = keys;
83
+ let update = false;
84
+ for (let index = 0; index < length; index += 1) {
85
+ const key = keys[index];
86
+ if (!this.items.has(key)) {
87
+ this.items.add(key);
88
+ update = true;
89
+ }
90
+ }
91
+ if (update) this.update([]);
92
+ }
93
+ set(keys) {
94
+ const { items } = this;
95
+ const removed = [...items].filter((key) => !keys.includes(key));
96
+ const added = keys.filter((key) => !items.has(key));
97
+ if (removed.length === 0 && added.length === 0) return;
98
+ this.items = new Set(keys);
99
+ this.update(removed);
100
+ }
101
+ toggle() {
102
+ const { items, managers } = this;
103
+ const all = managers.data.values.keys.active ?? managers.data.values.keys.original;
104
+ if (items.size === all.length) this.clear();
105
+ else this.select(all);
106
+ }
107
+ update(removed) {
108
+ const items = [...removed.map((key) => ({
109
+ key,
110
+ removed: true
111
+ })), ...[...this.items].map((key) => ({
112
+ key,
113
+ removed: false
114
+ }))];
115
+ const { length } = items;
116
+ for (let index = 0; index < length; index += 1) {
117
+ const { key, removed } = items[index];
118
+ const row = this.managers.row.get(key);
119
+ if (row == null || row.element == null) continue;
120
+ setAttribute(row.element, "aria-selected", String(!removed));
121
+ if (removed) row.element.classList.remove("tabela__row--selected");
122
+ else row.element.classList.add("tabela__row--selected");
123
+ }
124
+ }
125
+ };
126
+ function getPlaceholder() {
127
+ placeholder ??= createElement("div", { className: "tabela__selection--placeholder" }, {}, {});
128
+ return placeholder;
129
+ }
130
+ function onMouseDown(event) {
131
+ if (shifted) {
132
+ const row = findAncestor(event.target, ".tabela__row--body");
133
+ if (!(row instanceof HTMLElement)) return;
134
+ startElement = row;
135
+ startPosition = getPosition(event);
136
+ dragStyling.set();
137
+ }
138
+ }
139
+ function onMouseMove(event) {
140
+ if (startElement == null) return;
141
+ const currentPosition = getPosition(event);
142
+ if (currentPosition == null || startPosition == null) return;
143
+ const element = getPlaceholder();
144
+ if (element.parentElement == null) document.body.append(element);
145
+ const { x: cX, y: cY } = currentPosition;
146
+ const { x: sX, y: sY } = startPosition;
147
+ const top = Math.min(cY, sY);
148
+ const left = Math.min(cX, sX);
149
+ const width = Math.abs(cX - sX);
150
+ const height = Math.abs(cY - sY);
151
+ element.style.inset = `${top}px ${window.innerWidth - left - width}px ${window.innerHeight - top - height}px ${left}px`;
152
+ }
153
+ function onMouseUp(event) {
154
+ if (startElement == null) return;
155
+ if (!event.shiftKey) {
156
+ shifted = false;
157
+ dragStyling.remove();
158
+ }
159
+ getPlaceholder().remove();
160
+ const row = findAncestor(event.target, ".tabela__row--body");
161
+ if (row instanceof HTMLElement) {
162
+ endElement = row;
163
+ const endTable = findAncestor(endElement, ".tabela");
164
+ const startTable = findAncestor(startElement, ".tabela");
165
+ if (startTable != null && startTable === endTable) mapped.get(startTable)?.range(startElement, endElement);
166
+ }
167
+ endElement = void 0;
168
+ startElement = void 0;
169
+ startPosition = void 0;
170
+ }
171
+ function onShift(event, value) {
172
+ if (event.key === "Shift") shifted = value;
173
+ }
174
+ function onShiftDown(event) {
175
+ onShift(event, true);
176
+ }
177
+ function onShiftUp(event) {
178
+ onShift(event, false);
179
+ }
180
+ var mapped = /* @__PURE__ */ new WeakMap();
181
+ var shifted = false;
182
+ var endElement;
183
+ var placeholder;
184
+ var startPosition;
185
+ var startElement;
186
+ on(document, "keydown", onShiftDown);
187
+ on(document, "keyup", onShiftUp);
188
+ on(document, "mousedown", onMouseDown);
189
+ on(document, "mousemove", onMouseMove);
190
+ on(document, "mouseup", onMouseUp);
191
+ export { SelectionManager };
@@ -75,7 +75,7 @@ var SortManager = class {
75
75
  setAttribute(column.elements.sorter, "data-sort-position", sorterIndex > -1 && items.length > 1 ? sorterIndex + 1 : void 0);
76
76
  }
77
77
  managers.data.values.keys.active = items.length === 0 ? void 0 : sort(managers.data.values.keys.active?.map((key) => managers.data.values.objects.mapped.get(key)) ?? managers.data.values.objects.array, items).map((row) => row[managers.data.field]);
78
- managers.virtualization.update(true, true);
78
+ managers.render.update(true, true);
79
79
  }
80
80
  toggle(event, field, direction) {
81
81
  switch (direction) {