@oscarpalmer/tabela 0.13.0 → 0.14.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.
- package/dist/components/{body.component.mjs → body.component.js} +3 -6
- package/dist/components/{column.component.mjs → column.component.js} +5 -8
- package/dist/components/{footer.component.mjs → footer.component.js} +4 -7
- package/dist/components/group.component.js +28 -0
- package/dist/components/{header.component.mjs → header.component.js} +3 -6
- package/dist/components/{row.component.mjs → row.component.js} +7 -11
- package/dist/helpers/{dom.helpers.mjs → dom.helpers.js} +9 -13
- package/dist/helpers/{misc.helpers.mjs → misc.helpers.js} +1 -3
- package/dist/helpers/style.helper.js +6 -0
- package/dist/{index.mjs → index.js} +1 -3
- package/dist/managers/{column.manager.mjs → column.manager.js} +1 -6
- package/dist/managers/data.manager.js +181 -0
- package/dist/managers/{event.manager.mjs → event.manager.js} +8 -9
- package/dist/managers/{filter.manager.mjs → filter.manager.js} +14 -23
- package/dist/managers/group.manager.js +46 -0
- package/dist/managers/{navigation.manager.mjs → navigation.manager.js} +24 -27
- package/dist/managers/{render.manager.mjs → render.manager.js} +26 -35
- package/dist/managers/{row.manager.mjs → row.manager.js} +11 -18
- package/dist/managers/{selection.manager.mjs → selection.manager.js} +28 -32
- package/dist/managers/{sort.manager.mjs → sort.manager.js} +9 -12
- package/dist/models/body.model.js +0 -0
- package/dist/models/column.model.js +0 -0
- package/dist/models/data.model.js +0 -0
- package/dist/models/filter.model.js +0 -0
- package/dist/models/footer.model.js +0 -0
- package/dist/models/group.model.js +0 -0
- package/dist/models/header.model.js +0 -0
- package/dist/models/render.model.js +0 -0
- package/dist/models/selection.model.js +0 -0
- package/dist/models/sort.model.js +0 -0
- package/dist/models/tabela.model.js +0 -0
- package/dist/models/tabela.options.js +0 -0
- package/dist/{tabela.full.mjs → tabela.full.js} +860 -1049
- package/dist/tabela.js +105 -0
- package/package.json +1 -1
- package/src/components/body.component.ts +10 -7
- package/src/components/column.component.ts +19 -15
- package/src/components/footer.component.ts +7 -10
- package/src/components/group.component.ts +34 -12
- package/src/components/header.component.ts +6 -5
- package/src/components/row.component.ts +27 -19
- package/src/helpers/dom.helpers.ts +18 -22
- package/src/helpers/misc.helpers.ts +5 -0
- package/src/managers/data.manager.ts +80 -77
- package/src/managers/event.manager.ts +21 -10
- package/src/managers/filter.manager.ts +34 -21
- package/src/managers/group.manager.ts +18 -9
- package/src/managers/navigation.manager.ts +46 -49
- package/src/managers/render.manager.ts +34 -21
- package/src/managers/row.manager.ts +1 -1
- package/src/managers/selection.manager.ts +37 -35
- package/src/managers/sort.manager.ts +47 -34
- package/src/managers/style.manager.ts +40 -25
- package/src/models/column.model.ts +2 -6
- package/src/models/data.model.ts +7 -8
- package/src/models/dom.model.ts +33 -0
- package/src/models/event.model.ts +7 -0
- package/src/models/filter.model.ts +20 -0
- package/src/models/group.model.ts +4 -0
- package/src/models/sort.model.ts +4 -0
- package/src/models/style.model.ts +32 -20
- package/src/models/tabela.model.ts +1 -0
- package/src/tabela.ts +20 -22
- package/dist/body.component-_VDOpJhV.d.mts +0 -10
- package/dist/body.model-2iwsovAV.d.mts +0 -7
- package/dist/column.component-Bx46r3JI.d.mts +0 -16
- package/dist/column.model-D-aw4EU4.d.mts +0 -16
- package/dist/components/body.component.d.mts +0 -2
- package/dist/components/column.component.d.mts +0 -2
- package/dist/components/footer.component.d.mts +0 -2
- package/dist/components/group.component.d.mts +0 -2
- package/dist/components/group.component.mjs +0 -51
- package/dist/components/header.component.d.mts +0 -2
- package/dist/components/row.component.d.mts +0 -2
- package/dist/filter.model-7ukJrtil.d.mts +0 -16
- package/dist/footer.component-Curiab8j.d.mts +0 -12
- package/dist/footer.model-DhqoS6ds.d.mts +0 -8
- package/dist/group.component-Cq1YYbfJ.d.mts +0 -285
- package/dist/group.model-BsKFwHbt.d.mts +0 -10
- package/dist/header.component-BjjlpZIg.d.mts +0 -12
- package/dist/header.model-DN_KzUCV.d.mts +0 -7
- package/dist/helpers/dom.helpers.d.mts +0 -12
- package/dist/helpers/misc.helpers.d.mts +0 -6
- package/dist/helpers/style.helper.d.mts +0 -6
- package/dist/helpers/style.helper.mjs +0 -8
- package/dist/index.d.mts +0 -7
- package/dist/managers/column.manager.d.mts +0 -2
- package/dist/managers/data.manager.d.mts +0 -2
- package/dist/managers/data.manager.mjs +0 -222
- package/dist/managers/event.manager.d.mts +0 -2
- package/dist/managers/filter.manager.d.mts +0 -2
- package/dist/managers/group.manager.d.mts +0 -2
- package/dist/managers/group.manager.mjs +0 -73
- package/dist/managers/navigation.manager.d.mts +0 -2
- package/dist/managers/render.manager.d.mts +0 -2
- package/dist/managers/row.manager.d.mts +0 -2
- package/dist/managers/selection.manager.d.mts +0 -2
- package/dist/managers/sort.manager.d.mts +0 -2
- package/dist/managers/style.manager.d.mts +0 -2
- package/dist/managers/style.manager.mjs +0 -149
- package/dist/models/body.model.d.mts +0 -2
- package/dist/models/body.model.mjs +0 -1
- package/dist/models/column.model.d.mts +0 -2
- package/dist/models/column.model.mjs +0 -1
- package/dist/models/data.model.d.mts +0 -2
- package/dist/models/data.model.mjs +0 -1
- package/dist/models/filter.model.d.mts +0 -2
- package/dist/models/filter.model.mjs +0 -1
- package/dist/models/footer.model.d.mts +0 -2
- package/dist/models/footer.model.mjs +0 -1
- package/dist/models/group.model.d.mts +0 -2
- package/dist/models/group.model.mjs +0 -1
- package/dist/models/header.model.d.mts +0 -2
- package/dist/models/header.model.mjs +0 -1
- package/dist/models/render.model.d.mts +0 -2
- package/dist/models/render.model.mjs +0 -1
- package/dist/models/selection.model.d.mts +0 -2
- package/dist/models/selection.model.mjs +0 -1
- package/dist/models/sort.model.d.mts +0 -2
- package/dist/models/sort.model.mjs +0 -1
- package/dist/models/style.model.d.mts +0 -23
- package/dist/models/style.model.mjs +0 -23
- package/dist/models/tabela.model.d.mts +0 -2
- package/dist/models/tabela.model.mjs +0 -1
- package/dist/models/tabela.options.d.mts +0 -2
- package/dist/models/tabela.options.mjs +0 -1
- package/dist/selection.model-rwQe9fco.d.mts +0 -12
- package/dist/sort.model-CauImaLu.d.mts +0 -15
- package/dist/tabela.d.mts +0 -21
- package/dist/tabela.mjs +0 -126
- package/dist/tabela.options-RkZvfptB.d.mts +0 -14
|
@@ -1,8 +1,6 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { getKey } from "../helpers/misc.helpers.mjs";
|
|
1
|
+
import { getKey } from "../helpers/misc.helpers.js";
|
|
3
2
|
import { isNullableOrWhitespace } from "@oscarpalmer/atoms/is";
|
|
4
3
|
import { clamp } from "@oscarpalmer/atoms/number";
|
|
5
|
-
//#region src/managers/navigation.manager.ts
|
|
6
4
|
var NavigationManager = class {
|
|
7
5
|
active;
|
|
8
6
|
constructor(state) {
|
|
@@ -16,28 +14,28 @@ var NavigationManager = class {
|
|
|
16
14
|
event.preventDefault();
|
|
17
15
|
const { components, id, managers } = this.state;
|
|
18
16
|
const activeDescendant = components.body.elements.group.getAttribute("aria-activedescendant");
|
|
19
|
-
const {
|
|
20
|
-
const { length } =
|
|
17
|
+
const { keys } = managers.data;
|
|
18
|
+
const { length } = keys;
|
|
21
19
|
let next;
|
|
22
20
|
if (isNullableOrWhitespace(activeDescendant)) next = getDefaultIndex(event.key, length);
|
|
23
|
-
else next = getIndex(
|
|
24
|
-
if (next != null) this.setActive(
|
|
21
|
+
else next = getIndex(event, activeDescendant, id, keys);
|
|
22
|
+
if (next != null) this.setActive(keys.at(next));
|
|
25
23
|
}
|
|
26
|
-
setActive(
|
|
27
|
-
const { components,
|
|
28
|
-
this.active =
|
|
24
|
+
setActive(key, scroll) {
|
|
25
|
+
const { components, managers, options } = this.state;
|
|
26
|
+
this.active = key;
|
|
29
27
|
const active = components.body.elements.group.querySelectorAll("[data-active=\"true\"]");
|
|
30
28
|
for (const item of active) item.setAttribute("data-active", "false");
|
|
31
|
-
const
|
|
32
|
-
if (
|
|
33
|
-
|
|
34
|
-
if (scroll ?? true) if (
|
|
35
|
-
top: managers.data.getIndex(
|
|
29
|
+
const row = managers.row.get(key);
|
|
30
|
+
if (row != null) {
|
|
31
|
+
row.element?.setAttribute("data-active", "true");
|
|
32
|
+
if (scroll ?? true) if (row.element == null) components.body.elements.group.scrollTo({
|
|
33
|
+
top: managers.data.getIndex(key) * options.rowHeight,
|
|
36
34
|
behavior: "smooth"
|
|
37
35
|
});
|
|
38
|
-
else
|
|
36
|
+
else row.element.scrollIntoView({ block: "nearest" });
|
|
39
37
|
}
|
|
40
|
-
components.body.elements.group.setAttribute("aria-activedescendant",
|
|
38
|
+
components.body.elements.group.setAttribute("aria-activedescendant", row == null ? "" : `tabela_${this.state.id}_row_${key}`);
|
|
41
39
|
}
|
|
42
40
|
};
|
|
43
41
|
function getDefaultIndex(key, max) {
|
|
@@ -48,11 +46,11 @@ function getDefaultIndex(key, max) {
|
|
|
48
46
|
default: return 0;
|
|
49
47
|
}
|
|
50
48
|
}
|
|
51
|
-
function getIndex(
|
|
52
|
-
const key = getKey(active.replace(`tabela_${id}
|
|
49
|
+
function getIndex(event, active, id, keys) {
|
|
50
|
+
const key = getKey(active.replace(`tabela_${id}_row_`, ""));
|
|
53
51
|
if (key == null) return;
|
|
54
|
-
if (absoluteKeys.has(event.key)) return event.key === "Home" ? 0 :
|
|
55
|
-
return clamp(
|
|
52
|
+
if (absoluteKeys.has(event.key)) return event.key === "Home" ? 0 : keys.length - 1;
|
|
53
|
+
return clamp(keys.indexOf(key) + getOffset(event.key), 0, keys.length - 1, true);
|
|
56
54
|
}
|
|
57
55
|
function getOffset(key) {
|
|
58
56
|
switch (key) {
|
|
@@ -63,14 +61,13 @@ function getOffset(key) {
|
|
|
63
61
|
default: return 0;
|
|
64
62
|
}
|
|
65
63
|
}
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
64
|
+
var absoluteKeys = new Set(["End", "Home"]);
|
|
65
|
+
var arrowKeys = new Set(["ArrowDown", "ArrowUp"]);
|
|
66
|
+
var negativeDefaultKeys = new Set(["ArrowUp", "End"]);
|
|
67
|
+
var pageKeys = new Set(["PageDown", "PageUp"]);
|
|
68
|
+
var allKeys = new Set([
|
|
71
69
|
...absoluteKeys,
|
|
72
70
|
...arrowKeys,
|
|
73
71
|
...pageKeys
|
|
74
72
|
]);
|
|
75
|
-
//#endregion
|
|
76
73
|
export { NavigationManager };
|
|
@@ -1,20 +1,17 @@
|
|
|
1
|
-
import { GroupComponent, renderGroup } from "../components/group.component.
|
|
2
|
-
import { removeRow, renderRow } from "../components/row.component.
|
|
1
|
+
import { GroupComponent, renderGroup } from "../components/group.component.js";
|
|
2
|
+
import { removeRow, renderRow } from "../components/row.component.js";
|
|
3
3
|
import { on } from "@oscarpalmer/toretto/event";
|
|
4
|
-
//#region src/managers/render.manager.ts
|
|
5
4
|
function getRange(state, down) {
|
|
6
|
-
const {
|
|
7
|
-
const { clientHeight, scrollTop } =
|
|
8
|
-
const {
|
|
9
|
-
const
|
|
10
|
-
const
|
|
11
|
-
const
|
|
12
|
-
const
|
|
13
|
-
const
|
|
14
|
-
const after = Math.ceil(visible) * (down ? 2 : 1);
|
|
15
|
-
const start = Math.max(0, firstIndex - before);
|
|
5
|
+
const { components, managers, options } = state;
|
|
6
|
+
const { clientHeight, scrollTop } = components.body.elements.group;
|
|
7
|
+
const { keys } = managers.data;
|
|
8
|
+
const first = Math.floor(scrollTop / options.rowHeight);
|
|
9
|
+
const last = Math.min(keys.length - managers.group.collapsed.size - 1, Math.ceil((scrollTop + clientHeight) / options.rowHeight) - 1);
|
|
10
|
+
const before = Math.ceil(clientHeight / options.rowHeight) * (down ? 1 : 2);
|
|
11
|
+
const after = Math.ceil(clientHeight / options.rowHeight) * (down ? 2 : 1);
|
|
12
|
+
const start = Math.max(0, first - before);
|
|
16
13
|
return {
|
|
17
|
-
end: Math.min(
|
|
14
|
+
end: Math.min(keys.length - managers.group.collapsed.size - 1, last + after),
|
|
18
15
|
start
|
|
19
16
|
};
|
|
20
17
|
}
|
|
@@ -22,7 +19,7 @@ function onScroll() {
|
|
|
22
19
|
const { state } = this;
|
|
23
20
|
if (!state.active) {
|
|
24
21
|
requestAnimationFrame(() => {
|
|
25
|
-
const top = state.
|
|
22
|
+
const top = state.components.body.elements.group.scrollTop;
|
|
26
23
|
this.update(top > state.top);
|
|
27
24
|
state.active = false;
|
|
28
25
|
state.top = top;
|
|
@@ -40,7 +37,7 @@ var RenderManager = class {
|
|
|
40
37
|
state;
|
|
41
38
|
visible = /* @__PURE__ */ new Map();
|
|
42
39
|
constructor(state) {
|
|
43
|
-
this.listener = on(state.
|
|
40
|
+
this.listener = on(state.components.body.elements.group, "scroll", onScroll.bind(this));
|
|
44
41
|
this.state = {
|
|
45
42
|
...state,
|
|
46
43
|
active: false,
|
|
@@ -51,11 +48,6 @@ var RenderManager = class {
|
|
|
51
48
|
const { listener, pool, visible } = this;
|
|
52
49
|
listener();
|
|
53
50
|
visible.clear();
|
|
54
|
-
const cells = Object.values(pool.cells).flat();
|
|
55
|
-
let { length } = cells;
|
|
56
|
-
for (let index = 0; index < length; index += 1) cells[index].remove();
|
|
57
|
-
length = pool.rows.length;
|
|
58
|
-
for (let index = 0; index < length; index += 1) pool.rows[index].remove();
|
|
59
51
|
pool.cells = {};
|
|
60
52
|
pool.rows = [];
|
|
61
53
|
this.fragment = void 0;
|
|
@@ -70,7 +62,7 @@ var RenderManager = class {
|
|
|
70
62
|
for (let index = 0; index < length; index += 1) delete pool.cells[fields[index]];
|
|
71
63
|
for (const [, key] of visible) {
|
|
72
64
|
if (key instanceof GroupComponent) continue;
|
|
73
|
-
const row = state.managers.row.get(key
|
|
65
|
+
const row = state.managers.row.get(key);
|
|
74
66
|
if (row == null || row.element == null) continue;
|
|
75
67
|
for (let index = 0; index < length; index += 1) {
|
|
76
68
|
row.cells[fields[index]].innerHTML = "";
|
|
@@ -100,38 +92,38 @@ var RenderManager = class {
|
|
|
100
92
|
}
|
|
101
93
|
continue;
|
|
102
94
|
}
|
|
103
|
-
const row = managers.row.get(key
|
|
95
|
+
const row = managers.row.get(key);
|
|
104
96
|
if (remove || row == null || !indices.has(index) || managers.group.collapsed.has(key)) {
|
|
105
97
|
visible.delete(index);
|
|
106
98
|
if (row != null) removeRow(pool, row);
|
|
107
99
|
}
|
|
108
100
|
}
|
|
109
101
|
const fragment = this.getFragment();
|
|
110
|
-
const {
|
|
102
|
+
const { keys } = managers.data;
|
|
111
103
|
let count = 0;
|
|
112
104
|
let offset = 0;
|
|
113
105
|
for (let index = range.start; index <= range.end + offset; index += 1) {
|
|
114
106
|
if (visible.has(index)) continue;
|
|
115
|
-
const
|
|
116
|
-
if (
|
|
107
|
+
const key = keys[index];
|
|
108
|
+
if (key instanceof GroupComponent) {
|
|
117
109
|
count += 1;
|
|
118
|
-
renderGroup(state,
|
|
119
|
-
visible.set(index,
|
|
120
|
-
if (
|
|
121
|
-
|
|
122
|
-
fragment.append(
|
|
110
|
+
renderGroup(state, key);
|
|
111
|
+
visible.set(index, key);
|
|
112
|
+
if (key.element != null) {
|
|
113
|
+
key.element.style.transform = `translateY(${(index - offset) * options.rowHeight}px)`;
|
|
114
|
+
fragment.append(key.element);
|
|
123
115
|
}
|
|
124
116
|
continue;
|
|
125
117
|
}
|
|
126
|
-
const row = managers.row.get(
|
|
118
|
+
const row = managers.row.get(key);
|
|
127
119
|
if (row == null) continue;
|
|
128
|
-
if (managers.group.collapsed.has(
|
|
120
|
+
if (managers.group.collapsed.has(key)) {
|
|
129
121
|
offset += 1;
|
|
130
122
|
continue;
|
|
131
123
|
}
|
|
132
124
|
count += 1;
|
|
133
125
|
renderRow(state, row);
|
|
134
|
-
visible.set(index,
|
|
126
|
+
visible.set(index, key);
|
|
135
127
|
if (row.element != null) {
|
|
136
128
|
row.element.style.transform = `translateY(${(index - offset) * options.rowHeight}px)`;
|
|
137
129
|
fragment.append(row.element);
|
|
@@ -140,5 +132,4 @@ var RenderManager = class {
|
|
|
140
132
|
if (count > 0) components.body.elements.group[down ? "append" : "prepend"](fragment);
|
|
141
133
|
}
|
|
142
134
|
};
|
|
143
|
-
//#endregion
|
|
144
135
|
export { RenderManager };
|
|
@@ -1,25 +1,20 @@
|
|
|
1
|
-
import { RowComponent, removeRow, renderRow } from "../components/row.component.
|
|
2
|
-
//#region src/managers/row.manager.ts
|
|
1
|
+
import { RowComponent, removeRow, renderRow } from "../components/row.component.js";
|
|
3
2
|
var RowManager = class {
|
|
4
3
|
components = /* @__PURE__ */ new Map();
|
|
5
4
|
constructor(state) {
|
|
6
5
|
this.state = state;
|
|
7
6
|
}
|
|
8
|
-
clear() {
|
|
9
|
-
const { components } = this;
|
|
10
|
-
const rows = [...components.values()];
|
|
11
|
-
const { length } = rows;
|
|
12
|
-
for (let index = 0; index < length; index += 1) this.removeRow(rows[index]);
|
|
13
|
-
components.clear();
|
|
14
|
-
}
|
|
15
7
|
destroy() {
|
|
16
|
-
this.
|
|
8
|
+
const components = [...this.components.values()];
|
|
9
|
+
const { length } = components;
|
|
10
|
+
for (let index = 0; index < length; index += 1) removeRow(this.state.managers.render.pool, components[index]);
|
|
11
|
+
this.components.clear();
|
|
17
12
|
this.components = void 0;
|
|
18
13
|
this.state = void 0;
|
|
19
14
|
}
|
|
20
|
-
get(key
|
|
15
|
+
get(key) {
|
|
21
16
|
let row = this.components.get(key);
|
|
22
|
-
if (row == null
|
|
17
|
+
if (row == null) {
|
|
23
18
|
row = new RowComponent(key);
|
|
24
19
|
this.components.set(key, row);
|
|
25
20
|
}
|
|
@@ -30,16 +25,14 @@ var RowManager = class {
|
|
|
30
25
|
}
|
|
31
26
|
remove(key) {
|
|
32
27
|
const row = this.components.get(key);
|
|
33
|
-
if (row != null)
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
this.components.delete(row.key);
|
|
28
|
+
if (row != null) {
|
|
29
|
+
removeRow(this.state.managers.render.pool, row);
|
|
30
|
+
this.components.delete(key);
|
|
31
|
+
}
|
|
38
32
|
}
|
|
39
33
|
update(key) {
|
|
40
34
|
const row = this.components.get(key);
|
|
41
35
|
if (row != null) renderRow(this.state, row);
|
|
42
36
|
}
|
|
43
37
|
};
|
|
44
|
-
//#endregion
|
|
45
38
|
export { RowManager };
|
|
@@ -1,13 +1,11 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
5
|
-
import { preventSelection } from "../helpers/style.helper.mjs";
|
|
1
|
+
import { createElement } from "../helpers/dom.helpers.js";
|
|
2
|
+
import { GroupComponent } from "../components/group.component.js";
|
|
3
|
+
import { getKey } from "../helpers/misc.helpers.js";
|
|
4
|
+
import { dragStyling } from "../helpers/style.helper.js";
|
|
6
5
|
import { setAttribute } from "@oscarpalmer/toretto/attribute";
|
|
7
6
|
import { isKey } from "@oscarpalmer/atoms/is";
|
|
8
7
|
import { getPosition, on } from "@oscarpalmer/toretto/event";
|
|
9
8
|
import { findAncestor } from "@oscarpalmer/toretto/find";
|
|
10
|
-
//#region src/managers/selection.manager.ts
|
|
11
9
|
var SelectionManager = class {
|
|
12
10
|
handlers = Object.freeze({
|
|
13
11
|
add: (keys) => this.add(keys),
|
|
@@ -71,15 +69,15 @@ var SelectionManager = class {
|
|
|
71
69
|
const fromKey = keyed ? from : getKey(from.getAttribute("data-key"));
|
|
72
70
|
const toKey = keyed ? to : getKey(to.getAttribute("data-key"));
|
|
73
71
|
if (fromKey === toKey) return;
|
|
74
|
-
const {
|
|
72
|
+
const { keys } = state.managers.data;
|
|
75
73
|
const fromIndex = state.managers.data.getIndex(fromKey);
|
|
76
74
|
const toIndex = state.managers.data.getIndex(toKey);
|
|
77
75
|
if (fromIndex === -1 || toIndex === -1) return;
|
|
78
76
|
const [start, end] = fromIndex < toIndex ? [fromIndex, toIndex] : [toIndex, fromIndex];
|
|
79
77
|
const selected = [];
|
|
80
78
|
for (let index = start; index <= end; index += 1) {
|
|
81
|
-
const
|
|
82
|
-
if (!(
|
|
79
|
+
const key = keys[index];
|
|
80
|
+
if (!(key instanceof GroupComponent)) selected.push(key);
|
|
83
81
|
}
|
|
84
82
|
if (keyed) this.add(selected);
|
|
85
83
|
else this.set(selected);
|
|
@@ -105,12 +103,11 @@ var SelectionManager = class {
|
|
|
105
103
|
}
|
|
106
104
|
toggle() {
|
|
107
105
|
const { items, state } = this;
|
|
108
|
-
const
|
|
109
|
-
if (items.size ===
|
|
110
|
-
else this.set(
|
|
106
|
+
const { keys } = state.managers.data;
|
|
107
|
+
if (items.size === keys.length - state.managers.group.items.length) this.clear();
|
|
108
|
+
else this.set(keys.filter((key) => !(key instanceof GroupComponent)));
|
|
111
109
|
}
|
|
112
110
|
update(removed) {
|
|
113
|
-
const { state } = this;
|
|
114
111
|
const items = [...removed.map((key) => ({
|
|
115
112
|
key,
|
|
116
113
|
removed: true
|
|
@@ -118,28 +115,28 @@ var SelectionManager = class {
|
|
|
118
115
|
key,
|
|
119
116
|
removed: false
|
|
120
117
|
}))];
|
|
121
|
-
|
|
118
|
+
const { length } = items;
|
|
122
119
|
for (let index = 0; index < length; index += 1) {
|
|
123
120
|
const { key, removed } = items[index];
|
|
124
|
-
const
|
|
125
|
-
if (element == null) continue;
|
|
126
|
-
setAttribute(element, "aria-selected", String(!removed));
|
|
127
|
-
if (removed) element.classList.remove(
|
|
128
|
-
else element.classList.add(
|
|
121
|
+
const row = this.state.managers.row.get(key);
|
|
122
|
+
if (row == null || row.element == null) continue;
|
|
123
|
+
setAttribute(row.element, "aria-selected", String(!removed));
|
|
124
|
+
if (removed) row.element.classList.remove("tabela__row--selected");
|
|
125
|
+
else row.element.classList.add("tabela__row--selected");
|
|
129
126
|
}
|
|
130
127
|
}
|
|
131
128
|
};
|
|
132
129
|
function getPlaceholder() {
|
|
133
|
-
placeholder ??= createElement("div", { className:
|
|
130
|
+
placeholder ??= createElement("div", { className: "tabela__selection--placeholder" }, {}, {});
|
|
134
131
|
return placeholder;
|
|
135
132
|
}
|
|
136
133
|
function onMouseDown(event) {
|
|
137
134
|
if (shifted) {
|
|
138
|
-
const row = findAncestor(event.target,
|
|
135
|
+
const row = findAncestor(event.target, ".tabela__row--body");
|
|
139
136
|
if (!(row instanceof HTMLElement)) return;
|
|
140
137
|
startElement = row;
|
|
141
138
|
startPosition = getPosition(event);
|
|
142
|
-
|
|
139
|
+
dragStyling.set();
|
|
143
140
|
}
|
|
144
141
|
}
|
|
145
142
|
function onMouseMove(event) {
|
|
@@ -160,14 +157,14 @@ function onMouseUp(event) {
|
|
|
160
157
|
if (startElement == null) return;
|
|
161
158
|
if (!event.shiftKey) {
|
|
162
159
|
shifted = false;
|
|
163
|
-
|
|
160
|
+
dragStyling.remove();
|
|
164
161
|
}
|
|
165
162
|
getPlaceholder().remove();
|
|
166
163
|
const row = findAncestor(event.target, ".tabela__row--body");
|
|
167
164
|
if (row instanceof HTMLElement) {
|
|
168
165
|
endElement = row;
|
|
169
|
-
const endTable = findAncestor(endElement, ".
|
|
170
|
-
const startTable = findAncestor(startElement, ".
|
|
166
|
+
const endTable = findAncestor(endElement, ".tabela");
|
|
167
|
+
const startTable = findAncestor(startElement, ".tabela");
|
|
171
168
|
if (startTable != null && startTable === endTable) mapped.get(startTable)?.range(startElement, endElement);
|
|
172
169
|
}
|
|
173
170
|
endElement = void 0;
|
|
@@ -183,16 +180,15 @@ function onShiftDown(event) {
|
|
|
183
180
|
function onShiftUp(event) {
|
|
184
181
|
onShift(event, false);
|
|
185
182
|
}
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
183
|
+
var mapped = /* @__PURE__ */ new WeakMap();
|
|
184
|
+
var shifted = false;
|
|
185
|
+
var endElement;
|
|
186
|
+
var placeholder;
|
|
187
|
+
var startPosition;
|
|
188
|
+
var startElement;
|
|
192
189
|
on(document, "keydown", onShiftDown);
|
|
193
190
|
on(document, "keyup", onShiftUp);
|
|
194
191
|
on(document, "mousedown", onMouseDown);
|
|
195
192
|
on(document, "mousemove", onMouseMove);
|
|
196
193
|
on(document, "mouseup", onMouseUp);
|
|
197
|
-
//#endregion
|
|
198
194
|
export { SelectionManager };
|
|
@@ -1,9 +1,7 @@
|
|
|
1
|
-
import { GroupComponent } from "../components/group.component.
|
|
1
|
+
import { GroupComponent } from "../components/group.component.js";
|
|
2
2
|
import { setAttribute, setAttributes } from "@oscarpalmer/toretto/attribute";
|
|
3
3
|
import { sort } from "@oscarpalmer/atoms/array";
|
|
4
|
-
import { getValue } from "@oscarpalmer/atoms/value/handle";
|
|
5
4
|
import { compare } from "@oscarpalmer/atoms/value/compare";
|
|
6
|
-
//#region src/managers/sort.manager.ts
|
|
7
5
|
var SortManager = class {
|
|
8
6
|
handlers = Object.freeze({
|
|
9
7
|
add: (field, direction) => this.add(field, direction),
|
|
@@ -79,7 +77,7 @@ var SortManager = class {
|
|
|
79
77
|
});
|
|
80
78
|
setAttribute(column.elements.sorter, "data-sort-position", sorterIndex > -1 && items.length > 1 ? sorterIndex + 1 : void 0);
|
|
81
79
|
}
|
|
82
|
-
state.managers.data.
|
|
80
|
+
state.managers.data.values.keys.active = items.length === 0 ? void 0 : getSortedKeys(state, items);
|
|
83
81
|
state.managers.render.update(true, true);
|
|
84
82
|
}
|
|
85
83
|
toggle(event, field, direction) {
|
|
@@ -96,16 +94,16 @@ var SortManager = class {
|
|
|
96
94
|
}
|
|
97
95
|
}
|
|
98
96
|
};
|
|
99
|
-
function
|
|
100
|
-
const data = state.managers.data.
|
|
101
|
-
if (!state.managers.group.enabled) return sort(data, sorters).map((item) =>
|
|
102
|
-
return sortWithGroups(state, data, sorters).map((item) => item instanceof GroupComponent ? item :
|
|
97
|
+
function getSortedKeys(state, sorters) {
|
|
98
|
+
const data = state.managers.data.values.keys.active?.map((key) => key instanceof GroupComponent ? key : state.managers.data.values.objects.mapped.get(key)) ?? state.managers.data.values.objects.array.slice();
|
|
99
|
+
if (!state.managers.group.enabled) return sort(data, sorters).map((item) => item[state.key]);
|
|
100
|
+
return sortWithGroups(state, data, sorters).map((item) => item instanceof GroupComponent ? item : item[state.key]);
|
|
103
101
|
}
|
|
104
102
|
function sortWithGroups(state, data, sorters) {
|
|
105
103
|
const { length } = sorters;
|
|
106
104
|
return data.sort((first, second) => {
|
|
107
|
-
const firstValue = first instanceof GroupComponent ? first.value
|
|
108
|
-
const secondValue = second instanceof GroupComponent ? second.value
|
|
105
|
+
const firstValue = first instanceof GroupComponent ? first.value : first[state.managers.group.field];
|
|
106
|
+
const secondValue = second instanceof GroupComponent ? second.value : second[state.managers.group.field];
|
|
109
107
|
const firstOrder = state.managers.group.order[firstValue];
|
|
110
108
|
const secondOrder = state.managers.group.order[secondValue];
|
|
111
109
|
const groupComparison = compare(firstOrder, secondOrder);
|
|
@@ -115,11 +113,10 @@ function sortWithGroups(state, data, sorters) {
|
|
|
115
113
|
if (firstIsGroup || secondIsGroup) return firstIsGroup && secondIsGroup ? 0 : firstIsGroup ? -1 : 1;
|
|
116
114
|
for (let index = 0; index < length; index += 1) {
|
|
117
115
|
const sorter = sorters[index];
|
|
118
|
-
const comparison = compare(
|
|
116
|
+
const comparison = compare(first[sorter.key], second[sorter.key]);
|
|
119
117
|
if (comparison !== 0) return comparison * (sorter.direction === "ascending" ? 1 : -1);
|
|
120
118
|
}
|
|
121
119
|
return 0;
|
|
122
120
|
});
|
|
123
121
|
}
|
|
124
|
-
//#endregion
|
|
125
122
|
export { SortManager, sortWithGroups };
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|