intable 0.0.46 → 0.0.47
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/index.d.ts +1 -1
- package/dist/mergeProps2.js +73 -0
- package/dist/plugins/CellMergePlugin.js +5 -4
- package/dist/plugins/CellSelectionPlugin.js +16 -15
- package/dist/plugins/DiffPlugin.js +5 -4
- package/dist/plugins/EditablePlugin.js +36 -35
- package/dist/plugins/FilterPlugin.js +13 -12
- package/dist/plugins/RenderPlugin/index.d.ts +2 -4
- package/dist/plugins/RenderPlugin/index.js +6 -7
- package/dist/plugins/ResizePlugin.js +24 -23
- package/dist/plugins/RowGroupPlugin.js +9 -8
- package/dist/plugins/SortPlugin.js +7 -6
- package/dist/plugins/TooltipPlugin.js +3 -2
- package/dist/plugins/TreePlugin.js +5 -4
- package/dist/plugins/ValidatorPlugin.js +5 -4
- package/package.json +1 -1
package/dist/index.d.ts
CHANGED
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
import { $PROXY, createMemo } from "solid-js";
|
|
2
|
+
var SUPPORTS_PROXY = typeof Proxy == "function";
|
|
3
|
+
function trueFn() {
|
|
4
|
+
return !0;
|
|
5
|
+
}
|
|
6
|
+
var propTraps = {
|
|
7
|
+
get(n, r, i) {
|
|
8
|
+
return r === $PROXY ? i : n.get(r);
|
|
9
|
+
},
|
|
10
|
+
has(n, r) {
|
|
11
|
+
return r === $PROXY ? !0 : n.has(r);
|
|
12
|
+
},
|
|
13
|
+
set: trueFn,
|
|
14
|
+
deleteProperty: trueFn,
|
|
15
|
+
getOwnPropertyDescriptor(e, n) {
|
|
16
|
+
return {
|
|
17
|
+
configurable: !0,
|
|
18
|
+
enumerable: !0,
|
|
19
|
+
get() {
|
|
20
|
+
return e.get(n);
|
|
21
|
+
},
|
|
22
|
+
set: trueFn,
|
|
23
|
+
deleteProperty: trueFn
|
|
24
|
+
};
|
|
25
|
+
},
|
|
26
|
+
ownKeys(e) {
|
|
27
|
+
return e.keys();
|
|
28
|
+
}
|
|
29
|
+
};
|
|
30
|
+
function resolveSource(e) {
|
|
31
|
+
return (e = typeof e == "function" ? e() : e) ? e : {};
|
|
32
|
+
}
|
|
33
|
+
function mergeProps$1(...i) {
|
|
34
|
+
let o = !1;
|
|
35
|
+
for (let r = 0; r < i.length; r++) {
|
|
36
|
+
let a = i[r];
|
|
37
|
+
o ||= !!a && $PROXY in a, i[r] = typeof a == "function" ? (o = !0, createMemo(a)) : a;
|
|
38
|
+
}
|
|
39
|
+
if (SUPPORTS_PROXY && o) return new Proxy({
|
|
40
|
+
get(e) {
|
|
41
|
+
for (let n = i.length - 1; n >= 0; n--) {
|
|
42
|
+
let r = resolveSource(i[n])[e];
|
|
43
|
+
if (r !== void 0) return r;
|
|
44
|
+
}
|
|
45
|
+
},
|
|
46
|
+
has(e) {
|
|
47
|
+
for (let n = i.length - 1; n >= 0; n--) if (e in resolveSource(i[n])) return !0;
|
|
48
|
+
return !1;
|
|
49
|
+
},
|
|
50
|
+
keys() {
|
|
51
|
+
let e = [];
|
|
52
|
+
for (let n = 0; n < i.length; n++) e.push(...Object.keys(resolveSource(i[n])));
|
|
53
|
+
return [...new Set(e)];
|
|
54
|
+
}
|
|
55
|
+
}, propTraps);
|
|
56
|
+
let s = Object.create(null);
|
|
57
|
+
for (let e = i.length - 1; e >= 0; e--) {
|
|
58
|
+
let n = i[e];
|
|
59
|
+
if (!n) continue;
|
|
60
|
+
let r = Object.getOwnPropertyDescriptors(n);
|
|
61
|
+
for (let e in r) {
|
|
62
|
+
let n = r[e];
|
|
63
|
+
s[e] || (s[e] = n);
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
let c = {}, l = Object.keys(s);
|
|
67
|
+
for (let e = l.length - 1; e >= 0; e--) {
|
|
68
|
+
let n = l[e], r = s[n];
|
|
69
|
+
r && r.get ? Object.defineProperty(c, n, r) : c[n] = r ? r.value : void 0;
|
|
70
|
+
}
|
|
71
|
+
return c;
|
|
72
|
+
}
|
|
73
|
+
export { mergeProps$1 as mergeProps };
|
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { mergeProps as mergeProps$2 } from "../mergeProps2.js";
|
|
2
|
+
import { createComponent } from "solid-js/web";
|
|
2
3
|
import { Show, createMemo } from "solid-js";
|
|
3
4
|
function buildMergeMap(e, t, n) {
|
|
4
5
|
let r = /* @__PURE__ */ new Map(), i = /* @__PURE__ */ new Set();
|
|
@@ -26,13 +27,13 @@ function buildMergeMap(e, t, n) {
|
|
|
26
27
|
const CellMergePlugin = {
|
|
27
28
|
name: "cell-merge",
|
|
28
29
|
rewriteProps: {
|
|
29
|
-
Table: ({ Table:
|
|
30
|
+
Table: ({ Table: e }, { store: n }) => (a) => (n._mergeMap ??= createMemo(() => {
|
|
30
31
|
let { merge: e, data: t, columns: r } = n.props;
|
|
31
32
|
return !e && !r?.some((e) => e.mergeRow) || !t?.length || !r?.length ? {
|
|
32
33
|
spans: /* @__PURE__ */ new Map(),
|
|
33
34
|
covered: /* @__PURE__ */ new Set()
|
|
34
35
|
} : buildMergeMap(t, r, e);
|
|
35
|
-
}), createComponent(
|
|
36
|
+
}), createComponent(e, a)),
|
|
36
37
|
Td: ({ Td: r }, { store: i }) => (a) => {
|
|
37
38
|
let o = () => `${a.y},${a.x}`, s = () => i._mergeMap?.().covered.has(o()) ?? !1, c = () => i._mergeMap?.().spans.get(o());
|
|
38
39
|
return createComponent(Show, {
|
|
@@ -40,7 +41,7 @@ const CellMergePlugin = {
|
|
|
40
41
|
return !s();
|
|
41
42
|
},
|
|
42
43
|
get children() {
|
|
43
|
-
return createComponent(r, mergeProps(a, {
|
|
44
|
+
return createComponent(r, mergeProps$2(a, {
|
|
44
45
|
get rowspan() {
|
|
45
46
|
return c()?.rowspan;
|
|
46
47
|
},
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { usePointerDrag } from "../hooks/index.js";
|
|
2
2
|
import { unFn } from "../utils.js";
|
|
3
|
-
import {
|
|
3
|
+
import { mergeProps as mergeProps$2 } from "../mergeProps2.js";
|
|
4
|
+
import { createComponent, memo, template } from "solid-js/web";
|
|
4
5
|
import { batch, createMemo } from "solid-js";
|
|
5
6
|
import { combineProps } from "@solid-primitives/props";
|
|
6
7
|
import { createLazyMemo } from "@solid-primitives/memo";
|
|
@@ -25,39 +26,39 @@ const CellSelectionPlugin = {
|
|
|
25
26
|
return e.props.data.slice(s, c + 1);
|
|
26
27
|
} }),
|
|
27
28
|
rewriteProps: {
|
|
28
|
-
Table: ({ Table: a }, { store:
|
|
29
|
+
Table: ({ Table: a }, { store: o }) => (c) => (usePointerDrag(() => o.table, {
|
|
29
30
|
preventDefault: !1,
|
|
30
|
-
start(e, a,
|
|
31
|
+
start(e, a, s) {
|
|
31
32
|
batch(() => {
|
|
32
|
-
let
|
|
33
|
+
let s = (e) => e.composedPath().find((e) => e.tagName == "TH" || e.tagName == "TD"), c = (e) => [e.getAttribute("x"), e.getAttribute("y")], l = s(e);
|
|
33
34
|
if (l && !(e.buttons != 1 && l.classList.contains("range-selected"))) {
|
|
34
35
|
if (l.tagName == "TH") {
|
|
35
36
|
let [e, u] = c(l);
|
|
36
37
|
if (e == null) return;
|
|
37
|
-
|
|
38
|
-
let a =
|
|
38
|
+
o.selected.start = [+e, 0], o.selected.end = [+e, Infinity], a((e) => {
|
|
39
|
+
let a = s(e);
|
|
39
40
|
if (!a) return;
|
|
40
41
|
let [l, u] = c(a);
|
|
41
|
-
l != null && (
|
|
42
|
+
l != null && (o.selected.end = [+l, Infinity]);
|
|
42
43
|
});
|
|
43
44
|
}
|
|
44
45
|
if (l.classList.contains("index")) {
|
|
45
46
|
let [e, u] = c(l);
|
|
46
47
|
if (e == null || u == null) return;
|
|
47
|
-
|
|
48
|
-
let a =
|
|
48
|
+
o.selected.start = [0, +u], o.selected.end = [Infinity, +u], a((e) => {
|
|
49
|
+
let a = s(e);
|
|
49
50
|
if (!a) return;
|
|
50
51
|
let [l, u] = c(a);
|
|
51
|
-
l == null || u == null || (
|
|
52
|
+
l == null || u == null || (o.selected.end = [Infinity, +u]);
|
|
52
53
|
});
|
|
53
54
|
} else if (l.tagName == "TD") {
|
|
54
55
|
let [e, u] = c(l);
|
|
55
56
|
if (e == null || u == null) return;
|
|
56
|
-
|
|
57
|
-
let a =
|
|
57
|
+
o.selected.start = [+e, +u], o.selected.end = [...o.selected.start], a((e) => {
|
|
58
|
+
let a = s(e);
|
|
58
59
|
if (!a) return;
|
|
59
60
|
let [l, u] = c(a);
|
|
60
|
-
l == null || u == null || (
|
|
61
|
+
l == null || u == null || (o.selected.end = [+l, +u]);
|
|
61
62
|
});
|
|
62
63
|
}
|
|
63
64
|
}
|
|
@@ -69,7 +70,7 @@ const CellSelectionPlugin = {
|
|
|
69
70
|
let { start: e, end: o } = a.selected;
|
|
70
71
|
return inrange(l.x, ...[e[0], o[0]].sort((e, a) => e - a)) ? "col-range-highlight" : "";
|
|
71
72
|
});
|
|
72
|
-
return createComponent(e, mergeProps(l, {
|
|
73
|
+
return createComponent(e, mergeProps$2(l, {
|
|
73
74
|
get class() {
|
|
74
75
|
return `${l.class} ${u()}`;
|
|
75
76
|
},
|
|
@@ -83,7 +84,7 @@ const CellSelectionPlugin = {
|
|
|
83
84
|
let e = "", { xs: o, ys: s } = a.cellSelectionRect(), c = inrange(l.x, o[0], o[1]), u = inrange(l.y, s[0], s[1]);
|
|
84
85
|
return c && u && (e += "range-selected ", l.x == o[0] && (e += "range-selected-l "), l.x == o[1] && (e += "range-selected-r "), l.y == s[0] && (e += "range-selected-t "), l.y == s[1] && (e += "range-selected-b ")), l.col.id == a.$index?.id && u && (e += "row-range-highlight "), e;
|
|
85
86
|
});
|
|
86
|
-
return createComponent(e, mergeProps(l, {
|
|
87
|
+
return createComponent(e, mergeProps$2(l, {
|
|
87
88
|
get class() {
|
|
88
89
|
return `${l.class} ${u()}`;
|
|
89
90
|
},
|
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { mergeProps as mergeProps$2 } from "../mergeProps2.js";
|
|
2
|
+
import { className, createComponent, effect, memo, template } from "solid-js/web";
|
|
2
3
|
import { createMemo } from "solid-js";
|
|
3
4
|
import { createLazyMemo } from "@solid-primitives/memo";
|
|
4
5
|
import { isEqual, keyBy } from "es-toolkit";
|
|
@@ -53,14 +54,14 @@ const DiffPlugin = {
|
|
|
53
54
|
let { diff: e } = f.props, o = p.data[f.props.rowKey];
|
|
54
55
|
return [p.data[NEW] ? "bg-green!" : p.data[DEL] ? "bg-red!" : p.data[f.internal] ? "" : e.changed && p.data[p.col.id] != f.diffDataKeyed()[o]?.[p.col.id] ? "bg-green!" : ""].join(" ");
|
|
55
56
|
});
|
|
56
|
-
return createComponent(u, mergeProps(p, {
|
|
57
|
+
return createComponent(u, mergeProps$2(p, {
|
|
57
58
|
get class() {
|
|
58
59
|
return p.class + (m() ? " relative z-1" : "");
|
|
59
60
|
},
|
|
60
61
|
get children() {
|
|
61
62
|
return [p.children, memo(() => memo(() => !!m())() && (() => {
|
|
62
|
-
var
|
|
63
|
-
return effect(() => className(
|
|
63
|
+
var e = _tmpl$();
|
|
64
|
+
return effect(() => className(e, m() + " absolute inset-0 z--1 op-15 pointer-events-none")), e;
|
|
64
65
|
})())];
|
|
65
66
|
}
|
|
66
67
|
}));
|
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
import { chooseFile, resolveOptions, unFn } from "../utils.js";
|
|
2
|
+
import { mergeProps as mergeProps$2 } from "../mergeProps2.js";
|
|
2
3
|
import { Checkbox, Files } from "./RenderPlugin/components.js";
|
|
3
4
|
import Textarea_default from "../components/Textarea.js";
|
|
4
5
|
import { Ctx } from "../index.js";
|
|
5
|
-
import { addEventListener, createComponent, delegateEvents, effect, insert, memo,
|
|
6
|
+
import { addEventListener, createComponent, delegateEvents, effect, insert, memo, spread, template, use } from "solid-js/web";
|
|
6
7
|
import { createEffect, createMemo, createRoot, createSignal, on, onCleanup, useContext } from "solid-js";
|
|
7
8
|
import { createMutable } from "solid-js/store";
|
|
8
9
|
import { combineProps } from "@solid-primitives/props";
|
|
@@ -13,38 +14,38 @@ const EditablePlugin = {
|
|
|
13
14
|
name: "editable",
|
|
14
15
|
store: () => ({ editors: { ...editors } }),
|
|
15
16
|
rewriteProps: {
|
|
16
|
-
editable: ({ editable: e }, { store:
|
|
17
|
-
let
|
|
18
|
-
return !!
|
|
17
|
+
editable: ({ editable: e }, { store: g }) => (v) => {
|
|
18
|
+
let y = [v.col.editable, e].filter((e) => e != null);
|
|
19
|
+
return !!y.length && y.every((e) => unFn(e, v)) && !v.data[g.internal] && !v.col[g.internal];
|
|
19
20
|
},
|
|
20
|
-
Td: ({ Td: e }, { store:
|
|
21
|
-
let b, { props: x } = useContext(Ctx), [T, E] = createSignal(!1), O = "", k = () => unFn(x.editable, y), j = () => (([e,
|
|
21
|
+
Td: ({ Td: e }, { store: g }) => (y) => {
|
|
22
|
+
let b, { props: x } = useContext(Ctx), [T, E] = createSignal(!1), O = "", k = () => unFn(x.editable, y), j = () => (([e, g]) => y.x == e && y.y == g)(g.selected.start || []), M = () => j() && k() && !T(), [N, P] = createSignal(!1), F = createAsyncMemo(() => {
|
|
22
23
|
if (T()) {
|
|
23
|
-
let e = createMemo(() => JSON.stringify(
|
|
24
|
+
let e = createMemo(() => JSON.stringify(g.selected ?? "{}"));
|
|
24
25
|
createEffect(on(e, () => E(!1), { defer: !0 })), R.w = b.getBoundingClientRect().width, R.h = b.getBoundingClientRect().height;
|
|
25
|
-
let
|
|
26
|
+
let _ = !1, v = y.data[y.col.id], S = ((e) => typeof e == "string" ? g.editors[e] : e)(y.col.editor ?? y.col.type ?? (y.col.enum ? "select" : "text")), C = {
|
|
26
27
|
props: y.col.editorProps,
|
|
27
28
|
col: y.col,
|
|
28
29
|
eventKey: O,
|
|
29
30
|
data: y.data,
|
|
30
|
-
value:
|
|
31
|
+
value: v,
|
|
31
32
|
ok: async () => {
|
|
32
|
-
await I(
|
|
33
|
+
await I(w.getValue()), E(!1);
|
|
33
34
|
},
|
|
34
|
-
cancel: () => (
|
|
35
|
+
cancel: () => (_ = !0, E(!1)),
|
|
35
36
|
onChange: (e) => T() && I(e).catch(() => {})
|
|
36
|
-
},
|
|
37
|
-
return queueMicrotask(() =>
|
|
38
|
-
!
|
|
37
|
+
}, w = S(C);
|
|
38
|
+
return queueMicrotask(() => w.focus?.()), onCleanup(() => {
|
|
39
|
+
!_ && w.getValue() !== v && g.commands.rowChange({
|
|
39
40
|
...x.data[y.y],
|
|
40
|
-
[y.col.id]:
|
|
41
|
-
}),
|
|
42
|
-
}), [
|
|
41
|
+
[y.col.id]: w.getValue()
|
|
42
|
+
}), _ || I(w.getValue()).catch(() => {}), O = "", w.destroy();
|
|
43
|
+
}), [C, w];
|
|
43
44
|
}
|
|
44
45
|
});
|
|
45
46
|
async function I(e) {
|
|
46
47
|
try {
|
|
47
|
-
P(!0), await
|
|
48
|
+
P(!0), await g.validateCell(e, y.data, y.col);
|
|
48
49
|
} finally {
|
|
49
50
|
P(!1);
|
|
50
51
|
}
|
|
@@ -64,7 +65,7 @@ const EditablePlugin = {
|
|
|
64
65
|
onClick: () => L?.focus?.(),
|
|
65
66
|
onDblClick: () => E(k()),
|
|
66
67
|
onKeyDown: (e) => e.key == "Escape" && F()?.[0].cancel()
|
|
67
|
-
}), createComponent(e, mergeProps(y, { get children() {
|
|
68
|
+
}), createComponent(e, mergeProps$2(y, { get children() {
|
|
68
69
|
return [memo(() => memo(() => !!F()?.[1]?.el)() ? (() => {
|
|
69
70
|
var e = _tmpl$();
|
|
70
71
|
return addEventListener(e, "keydown", (e) => {
|
|
@@ -89,9 +90,9 @@ const EditablePlugin = {
|
|
|
89
90
|
}
|
|
90
91
|
}
|
|
91
92
|
};
|
|
92
|
-
var createEditor = (e,
|
|
93
|
+
var createEditor = (e, _, y) => ({ eventKey: b, value: x, col: S, ok: C, cancel: T, props: E, onChange: D }) => createRoot((T) => {
|
|
93
94
|
let [O, k] = createSignal(b || x), A;
|
|
94
|
-
return createComponent(e, mergeProps({
|
|
95
|
+
return createComponent(e, mergeProps$2({
|
|
95
96
|
ref: (e) => A = e,
|
|
96
97
|
class: "relative block px-2 size-full z-9 box-border resize-none outline-0",
|
|
97
98
|
get value() {
|
|
@@ -102,7 +103,7 @@ var createEditor = (e, v, y) => ({ eventKey: b, value: x, col: S, ok: C, cancel:
|
|
|
102
103
|
get options() {
|
|
103
104
|
return memo(() => !!S.enum)() ? resolveOptions(S.enum ?? []) : void 0;
|
|
104
105
|
}
|
|
105
|
-
},
|
|
106
|
+
}, _, E)), setTimeout(() => {
|
|
106
107
|
y && A?.showPicker?.();
|
|
107
108
|
}, 0), {
|
|
108
109
|
el: A,
|
|
@@ -111,12 +112,12 @@ var createEditor = (e, v, y) => ({ eventKey: b, value: x, col: S, ok: C, cancel:
|
|
|
111
112
|
destroy: T
|
|
112
113
|
};
|
|
113
114
|
}), Input = (e) => (() => {
|
|
114
|
-
var
|
|
115
|
-
return spread(
|
|
115
|
+
var g = _tmpl$4();
|
|
116
|
+
return spread(g, e, !1, !1), g;
|
|
116
117
|
})();
|
|
117
118
|
const editors = {
|
|
118
119
|
text: createEditor(Input),
|
|
119
|
-
textarea: createEditor((e) => createComponent(Textarea_default, mergeProps({ autosize: {
|
|
120
|
+
textarea: createEditor((e) => createComponent(Textarea_default, mergeProps$2({ autosize: {
|
|
120
121
|
minRows: 2,
|
|
121
122
|
maxRows: 3
|
|
122
123
|
} }, e, { get class() {
|
|
@@ -130,27 +131,27 @@ const editors = {
|
|
|
130
131
|
color: createEditor(Input, { type: "color" }),
|
|
131
132
|
tel: createEditor(Input, { type: "tel" }),
|
|
132
133
|
password: createEditor(Input, { type: "password" }),
|
|
133
|
-
file: createEditor((
|
|
134
|
+
file: createEditor((g) => createComponent(Files, mergeProps$2(g, {
|
|
134
135
|
class: "relative z-9 outline-2 outline-blue min-h-a! h-a! p-1 bg-#fff",
|
|
135
|
-
onAdd: () => chooseFile({ multiple: !0 }).then((e) =>
|
|
136
|
+
onAdd: () => chooseFile({ multiple: !0 }).then((e) => g.onChange([...g.value || [], ...e.map((e) => ({
|
|
136
137
|
name: e.name,
|
|
137
138
|
size: e.size
|
|
138
139
|
}))]))
|
|
139
140
|
}))),
|
|
140
141
|
checkbox: createEditor((e) => (() => {
|
|
141
|
-
var
|
|
142
|
-
return typeof
|
|
142
|
+
var g = _tmpl$5(), _ = e.ref;
|
|
143
|
+
return typeof _ == "function" ? use(_, g) : e.ref = g, insert(g, createComponent(Checkbox, mergeProps$2(e, {
|
|
143
144
|
ref: () => {},
|
|
144
145
|
onInput: () => {},
|
|
145
146
|
class: "mx-3!"
|
|
146
|
-
}))),
|
|
147
|
+
}))), g;
|
|
147
148
|
})()),
|
|
148
149
|
select: createEditor((e) => (() => {
|
|
149
|
-
var
|
|
150
|
-
return
|
|
151
|
-
var
|
|
152
|
-
return insert(
|
|
153
|
-
})()), null),
|
|
150
|
+
var g = _tmpl$6();
|
|
151
|
+
return g.firstChild, spread(g, e, !1, !0), insert(g, () => e.options?.map((g) => (() => {
|
|
152
|
+
var _ = _tmpl$7();
|
|
153
|
+
return insert(_, () => g.label), effect(() => _.selected = g.value === e.value), effect(() => _.value = g.value), _;
|
|
154
|
+
})()), null), g;
|
|
154
155
|
})(), {}, !0)
|
|
155
156
|
};
|
|
156
157
|
delegateEvents(["keydown", "input"]);
|
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
import { findret, toArr } from "../utils.js";
|
|
2
|
+
import { mergeProps as mergeProps$2 } from "../mergeProps2.js";
|
|
2
3
|
import { useControlled } from "../hooks/useControlled.js";
|
|
3
4
|
import { normalizeType } from "../components/AndOrFields.js";
|
|
4
5
|
import { Filter, firstRule, isRuleNode } from "../components/Filter.js";
|
|
5
|
-
import { createComponent, memo
|
|
6
|
+
import { createComponent, memo } from "solid-js/web";
|
|
6
7
|
import { Show, mergeProps as mergeProps$1 } from "solid-js";
|
|
7
8
|
import { keyBy } from "es-toolkit";
|
|
8
9
|
function isBlank(e) {
|
|
@@ -97,11 +98,11 @@ function evaluateFilterTree(e, m, h) {
|
|
|
97
98
|
return g.length ? m.op === "or" ? g.some((m) => evaluateFilterTree(e, m, h)) : g.every((m) => evaluateFilterTree(e, m, h)) : !0;
|
|
98
99
|
}
|
|
99
100
|
function passesFilters(e, m, h) {
|
|
100
|
-
let
|
|
101
|
+
let g = keyBy(h, (e) => e.id);
|
|
101
102
|
return evaluateFilterTree(e, {
|
|
102
103
|
op: "and",
|
|
103
104
|
children: m
|
|
104
|
-
}, (e) => normalizeType(
|
|
105
|
+
}, (e) => normalizeType(g[e.field]));
|
|
105
106
|
}
|
|
106
107
|
const FilterPlugin = {
|
|
107
108
|
name: "filter",
|
|
@@ -136,24 +137,24 @@ const FilterPlugin = {
|
|
|
136
137
|
let { columns: h } = m.props, g = m.props.filter;
|
|
137
138
|
return !g.autoMatch || !g.value.some(hasActiveTree) ? e : e.filter((e) => passesFilters(e, g.value, h));
|
|
138
139
|
},
|
|
139
|
-
Th: ({ Th: m }, { store:
|
|
140
|
-
let
|
|
141
|
-
return createComponent(m, mergeProps(
|
|
142
|
-
return [memo(() =>
|
|
140
|
+
Th: ({ Th: m }, { store: g }) => (_) => {
|
|
141
|
+
let b = () => !!_.col.filterable && !_.col[g.internal];
|
|
142
|
+
return createComponent(m, mergeProps$2(_, { get children() {
|
|
143
|
+
return [memo(() => _.children), createComponent(Show, {
|
|
143
144
|
get when() {
|
|
144
|
-
return
|
|
145
|
+
return b();
|
|
145
146
|
},
|
|
146
147
|
get children() {
|
|
147
148
|
return createComponent(Filter, {
|
|
148
149
|
get col() {
|
|
149
|
-
return
|
|
150
|
+
return _.col;
|
|
150
151
|
},
|
|
151
152
|
get tree() {
|
|
152
|
-
return findret(
|
|
153
|
+
return findret(g.props.filter.value, (e) => firstRule(e)?.field === _.col.id ? e : null);
|
|
153
154
|
},
|
|
154
155
|
setTree: (e) => {
|
|
155
|
-
let m = [...
|
|
156
|
-
e ?
|
|
156
|
+
let m = [...g.props.filter.value], h = m.findIndex((e) => firstRule(e)?.field == _.col.id);
|
|
157
|
+
e ? h > -1 ? m[h] = e : m.push(e) : h > -1 && m.splice(h, 1), g.props.filter?.onChange?.(m);
|
|
157
158
|
}
|
|
158
159
|
});
|
|
159
160
|
}
|
|
@@ -2,6 +2,7 @@ import { type JSX } from 'solid-js';
|
|
|
2
2
|
import { type Plugin, type TDProps } from '../..';
|
|
3
3
|
declare module '../../index' {
|
|
4
4
|
interface TableProps {
|
|
5
|
+
cpu?: boolean;
|
|
5
6
|
}
|
|
6
7
|
interface TableColumn {
|
|
7
8
|
type?: string;
|
|
@@ -17,10 +18,7 @@ declare module '../../index' {
|
|
|
17
18
|
};
|
|
18
19
|
}
|
|
19
20
|
}
|
|
20
|
-
export type
|
|
21
|
-
onChange: (v: any) => void;
|
|
22
|
-
};
|
|
23
|
-
export type Render = (props: RenderProps) => JSX.Element | any;
|
|
21
|
+
export type Render = (props: TDProps) => JSX.Element | any;
|
|
24
22
|
export declare const RenderPlugin: Plugin;
|
|
25
23
|
export declare const renders: {
|
|
26
24
|
text: Render;
|
|
@@ -1,18 +1,17 @@
|
|
|
1
1
|
import { renderComponent, solidComponent } from "../../components/utils.js";
|
|
2
2
|
import { resolveOptions, toArr } from "../../utils.js";
|
|
3
|
+
import { mergeProps as mergeProps$1 } from "../../mergeProps2.js";
|
|
3
4
|
import { Checkbox, Files } from "./components.js";
|
|
4
|
-
import { createComponent, insert,
|
|
5
|
+
import { createComponent, insert, template } from "solid-js/web";
|
|
5
6
|
var _tmpl$ = /* @__PURE__ */ template("<div class=\"flex items-center h-full\">");
|
|
6
7
|
const RenderPlugin = {
|
|
7
8
|
name: "render",
|
|
8
9
|
priority: -Infinity,
|
|
9
10
|
store: () => ({ renders: { ...renders } }),
|
|
10
|
-
rewriteProps: { Td: ({ Td: d }, { store: f }) => (p) => createComponent(d, mergeProps(p, {
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
})();
|
|
15
|
-
} })) }
|
|
11
|
+
rewriteProps: { Td: ({ Td: d }, { store: f }) => (p) => (f.props.cpu && (p = mergeProps$1(() => ({}), p)), createComponent(d, mergeProps$1(p, { children: () => {
|
|
12
|
+
let d = ((e) => typeof e == "string" ? f.renders[e] : e)(p.col.render ?? p.col.type ?? text);
|
|
13
|
+
return d == text ? text(p) : renderComponent(d, p, f);
|
|
14
|
+
} }))) }
|
|
16
15
|
};
|
|
17
16
|
var text = (e) => e.col.enum ? toArr(e.value).map((d) => resolveOptions(e.col.enum).find((e) => e.value == d)?.label ?? d).join(", ") : e.value;
|
|
18
17
|
const renders = {
|
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
import { usePointerDrag } from "../hooks/index.js";
|
|
2
2
|
import { unFn } from "../utils.js";
|
|
3
|
+
import { mergeProps as mergeProps$2 } from "../mergeProps2.js";
|
|
3
4
|
import { Ctx } from "../index.js";
|
|
4
|
-
import { className, createComponent, delegateEvents, effect, memo,
|
|
5
|
+
import { className, createComponent, delegateEvents, effect, memo, template, use } from "solid-js/web";
|
|
5
6
|
import { batch, untrack, useContext } from "solid-js";
|
|
6
7
|
import { reconcile } from "solid-js/store";
|
|
7
8
|
import { clamp } from "es-toolkit";
|
|
@@ -10,35 +11,35 @@ import { defaultsDeep } from "es-toolkit/compat";
|
|
|
10
11
|
var _tmpl$ = /* @__PURE__ */ template("<div>"), COL = Symbol("col_size"), ROW = Symbol("row_size"), findParentEl = (e, m) => {
|
|
11
12
|
for (; e = e.parentElement;) if (m(e)) return e;
|
|
12
13
|
}, ColHandle = (m) => {
|
|
13
|
-
let { props:
|
|
14
|
-
return usePointerDrag(() =>
|
|
14
|
+
let { props: h, store: v } = useContext(Ctx), y;
|
|
15
|
+
return usePointerDrag(() => y, { start(e, g, _) {
|
|
15
16
|
e.stopPropagation();
|
|
16
|
-
let
|
|
17
|
-
|
|
18
|
-
let e =
|
|
19
|
-
|
|
20
|
-
...m[
|
|
17
|
+
let b = m.x, { min: x, max: S } = h.resizable.col, C = findParentEl(y, (e) => e.tagName === "TH"), w = C.offsetWidth;
|
|
18
|
+
g((e, { ox: h }) => v[COL][m.x] = clamp(w + h, x, S)), _(() => {
|
|
19
|
+
let e = h.columns[b], m = [...v.rawProps.columns || []], g = m.findIndex((m) => m[v.ID] === e[v.ID]);
|
|
20
|
+
g > -1 && (m[g] = {
|
|
21
|
+
...m[g],
|
|
21
22
|
width: C.offsetWidth
|
|
22
|
-
},
|
|
23
|
+
}, h.onColumnsChange?.(m)), e.onWidthChange?.(C.offsetWidth);
|
|
23
24
|
});
|
|
24
25
|
} }), (() => {
|
|
25
26
|
var e = _tmpl$();
|
|
26
27
|
e.$$click = (e) => e.stopPropagation();
|
|
27
|
-
var
|
|
28
|
-
return typeof
|
|
28
|
+
var g = y;
|
|
29
|
+
return typeof g == "function" ? use(g, e) : y = e, effect(() => className(e, `in-cell__resize-handle absolute top-0 right-0 flex justify-center w-10px! ${m.x == h.columns.length - 1 ? "justify-end!" : "w-10px! translate-x-1/2"} after:w-1 cursor-w-resize z-1`)), e;
|
|
29
30
|
})();
|
|
30
31
|
}, RowHandle = (m) => {
|
|
31
|
-
let { props:
|
|
32
|
-
return usePointerDrag(() =>
|
|
32
|
+
let { props: h, store: v } = useContext(Ctx), y;
|
|
33
|
+
return usePointerDrag(() => y, { start(e, g, _) {
|
|
33
34
|
e.stopPropagation();
|
|
34
|
-
let
|
|
35
|
-
|
|
36
|
-
let e =
|
|
35
|
+
let b = m.y, { min: x, max: S } = h.resizable.row, C = findParentEl(y, (e) => e.tagName === "TD").offsetHeight;
|
|
36
|
+
g((e, { oy: h }) => v[ROW][m.y] = clamp(C + h, x, S)), _(() => {
|
|
37
|
+
let e = h.data[b];
|
|
37
38
|
[...v.rawProps.data || []].findIndex((m) => m[v.ID] === e[v.ID]);
|
|
38
39
|
});
|
|
39
|
-
} }), createEventListener(() =>
|
|
40
|
-
var e = _tmpl$(),
|
|
41
|
-
return typeof
|
|
40
|
+
} }), createEventListener(() => y, "dblclick", () => m.data[COL] = void 0), (() => {
|
|
41
|
+
var e = _tmpl$(), g = y;
|
|
42
|
+
return typeof g == "function" ? use(g, e) : y = e, effect(() => className(e, `in-cell__resize-handle absolute bottom-0 left-0 flex flex-col justify-center h-1! ${m.y == h.data.length - 1 ? "justify-end!" : ""} after:h-1 cursor-s-resize z-2`)), e;
|
|
42
43
|
})();
|
|
43
44
|
};
|
|
44
45
|
const ResizePlugin = {
|
|
@@ -71,7 +72,7 @@ const ResizePlugin = {
|
|
|
71
72
|
...e,
|
|
72
73
|
width: m[COL][h]
|
|
73
74
|
} : e), untrack(() => batch(() => reconcile(e, { key: m.ID })(m.__resize__cols ??= [])))),
|
|
74
|
-
Th: ({ Th: e }, { store: m }) => (m) => createComponent(e, mergeProps(m, {
|
|
75
|
+
Th: ({ Th: e }, { store: m }) => (m) => createComponent(e, mergeProps$2(m, {
|
|
75
76
|
get class() {
|
|
76
77
|
return `relative ${m.class}`;
|
|
77
78
|
},
|
|
@@ -79,12 +80,12 @@ const ResizePlugin = {
|
|
|
79
80
|
return [m.children, memo(() => memo(() => !!m.col.resizable)() && createComponent(ColHandle, m))];
|
|
80
81
|
}
|
|
81
82
|
})),
|
|
82
|
-
Td: ({ Td: e }, { store: m }) => m.props?.resizable?.row.enable ? (
|
|
83
|
+
Td: ({ Td: e }, { store: m }) => m.props?.resizable?.row.enable ? (g) => createComponent(e, mergeProps$2(g, {
|
|
83
84
|
get class() {
|
|
84
|
-
return `relative ${
|
|
85
|
+
return `relative ${g.class}`;
|
|
85
86
|
},
|
|
86
87
|
get children() {
|
|
87
|
-
return [
|
|
88
|
+
return [g.children, memo(() => memo(() => !!(g.x == 0 && m.props?.resizable?.row.enable))() && createComponent(RowHandle, g))];
|
|
88
89
|
}
|
|
89
90
|
})) : e,
|
|
90
91
|
cellStyle: ({ cellStyle: e }, { store: h }) => (g) => `${unFn(e, g)};` + (h[ROW][g.y] ? `height: ${h[ROW][g.y]}px` : "")
|
|
@@ -1,6 +1,7 @@
|
|
|
1
|
+
import { mergeProps as mergeProps$2 } from "../mergeProps2.js";
|
|
1
2
|
import chevron_right_default from "../chevron-right.js";
|
|
2
3
|
import { Ctx } from "../index.js";
|
|
3
|
-
import { createComponent, delegateEvents, effect, insert, memo,
|
|
4
|
+
import { createComponent, delegateEvents, effect, insert, memo, style, template } from "solid-js/web";
|
|
4
5
|
import { batch, createMemo, useContext } from "solid-js";
|
|
5
6
|
import { groupBy, zipObject } from "es-toolkit";
|
|
6
7
|
import { findLast } from "es-toolkit/compat";
|
|
@@ -49,22 +50,22 @@ const RowGroupPlugin = {
|
|
|
49
50
|
}
|
|
50
51
|
return d;
|
|
51
52
|
},
|
|
52
|
-
Td: ({ Td:
|
|
53
|
-
if (!v.data?.[GROUP]) return
|
|
53
|
+
Td: ({ Td: f }, { store: _ }) => _.props?.rowGroup?.fields ? (v) => {
|
|
54
|
+
if (!v.data?.[GROUP]) return f(v);
|
|
54
55
|
let { props: y } = useContext(Ctx), b = createMemo(() => _.rowGroup.isExpand(v.data));
|
|
55
|
-
return createComponent(
|
|
56
|
+
return createComponent(f, mergeProps$2(v, { get children() {
|
|
56
57
|
return memo(() => y.columns?.findIndex((e) => !e[_.internal]) == v.x)() ? (() => {
|
|
57
|
-
var
|
|
58
|
-
return
|
|
58
|
+
var e = _tmpl$();
|
|
59
|
+
return e.$$dblclick = () => _.rowGroup.toggleExpand(v.data), insert(e, createComponent(chevron_right_default, {
|
|
59
60
|
class: "icon-clickable mr-2",
|
|
60
61
|
get style() {
|
|
61
62
|
return `transform: rotate(${b() ? 90 : 0}deg); opacity: .6`;
|
|
62
63
|
},
|
|
63
64
|
onClick: () => _.rowGroup.toggleExpand(v.data)
|
|
64
|
-
}), null), insert(
|
|
65
|
+
}), null), insert(e, () => v.data[GROUP].value, null), effect((l) => style(e, `padding-left: ${(v.data[GROUP].path.length - 1) * 16}px`, l)), e;
|
|
65
66
|
})() : v.children;
|
|
66
67
|
} }));
|
|
67
|
-
} :
|
|
68
|
+
} : f
|
|
68
69
|
}
|
|
69
70
|
};
|
|
70
71
|
var GROUP = Symbol("row-group"), expandData = (e, l, u = []) => {
|
|
@@ -1,5 +1,6 @@
|
|
|
1
|
+
import { mergeProps as mergeProps$2 } from "../mergeProps2.js";
|
|
1
2
|
import { useControlled } from "../hooks/useControlled.js";
|
|
2
|
-
import { createComponent, insert, memo,
|
|
3
|
+
import { createComponent, insert, memo, template } from "solid-js/web";
|
|
3
4
|
import { Show, mergeProps as mergeProps$1 } from "solid-js";
|
|
4
5
|
import { combineProps } from "@solid-primitives/props";
|
|
5
6
|
var _tmpl$ = /* @__PURE__ */ template("<svg viewBox=\"0 0 24 24\"fill=none stroke=currentColor stroke-width=2 class=\"w-3.5 h-3.5 opacity-50 shrink-0 flex-none ml-1\"><path stroke-linecap=round stroke-linejoin=round d=\"M8 9l4-4 4 4M16 15l-4 4-4-4\">"), _tmpl$2 = /* @__PURE__ */ template("<svg viewBox=\"0 0 24 24\"fill=none stroke=currentColor stroke-width=2.5 class=\"w-3.5 h-3.5 shrink-0 flex-none ml-1\"style=color:var(--c-primary,#6366f1)><path stroke-linecap=round stroke-linejoin=round d=\"M5 15l7-7 7 7\">"), _tmpl$3 = /* @__PURE__ */ template("<svg viewBox=\"0 0 24 24\"fill=none stroke=currentColor stroke-width=2.5 class=\"w-3.5 h-3.5 shrink-0 flex-none ml-1\"style=color:var(--c-primary,#6366f1)><path stroke-linecap=round stroke-linejoin=round d=\"M19 9l-7 7-7-7\">"), _tmpl$4 = /* @__PURE__ */ template("<div class=\"flex items-center w-full\">");
|
|
@@ -32,11 +33,11 @@ const SortPlugin = [{
|
|
|
32
33
|
name: "sort",
|
|
33
34
|
priority: -1,
|
|
34
35
|
rewriteProps: {
|
|
35
|
-
sort: ({ sort:
|
|
36
|
+
sort: ({ sort: e }, { store: l }) => (e = mergeProps$1({
|
|
36
37
|
multiple: !1,
|
|
37
38
|
autoSort: !0,
|
|
38
39
|
initialValue: []
|
|
39
|
-
},
|
|
40
|
+
}, e), l.sort ??= useControlled(e, l.owner), l.sort.$setOpt(e), l.sort),
|
|
40
41
|
data: ({ data: e }, { store: c }) => {
|
|
41
42
|
let l = c.props.sort;
|
|
42
43
|
if (!l.value?.length || !l.autoSort) return e;
|
|
@@ -46,8 +47,8 @@ const SortPlugin = [{
|
|
|
46
47
|
}
|
|
47
48
|
}, {
|
|
48
49
|
name: "sort-th",
|
|
49
|
-
rewriteProps: { Th: ({ Th:
|
|
50
|
-
let h = mergeProps$
|
|
50
|
+
rewriteProps: { Th: ({ Th: c }, { store: f }) => (m) => {
|
|
51
|
+
let h = mergeProps$2(() => f.props.sort), g = () => !!m.col.sortable && !m.col[f.internal], _ = () => g() ? h.value.find((e) => e.field === m.col.id) : void 0, v = combineProps(m, {
|
|
51
52
|
get class() {
|
|
52
53
|
return g() ? "cursor-pointer select-none" : "";
|
|
53
54
|
},
|
|
@@ -72,7 +73,7 @@ const SortPlugin = [{
|
|
|
72
73
|
h.onChange([...d]);
|
|
73
74
|
}
|
|
74
75
|
});
|
|
75
|
-
return createComponent(
|
|
76
|
+
return createComponent(c, mergeProps$2(v, { get children() {
|
|
76
77
|
var e = _tmpl$4();
|
|
77
78
|
return insert(e, () => m.children, null), insert(e, createComponent(Show, {
|
|
78
79
|
get when() {
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { renderComponent } from "../components/utils.js";
|
|
2
|
+
import { mergeProps as mergeProps$2 } from "../mergeProps2.js";
|
|
2
3
|
import { Tooltip } from "../components/Tooltip.js";
|
|
3
|
-
import { createComponent
|
|
4
|
+
import { createComponent } from "solid-js/web";
|
|
4
5
|
import { Show, createSignal } from "solid-js";
|
|
5
6
|
import { combineProps } from "@solid-primitives/props";
|
|
6
7
|
import { offset } from "floating-ui-solid";
|
|
@@ -11,7 +12,7 @@ const TooltipPlugin = {
|
|
|
11
12
|
let s = u.col.tooltip;
|
|
12
13
|
if (s != null) return typeof s == "boolean" && (s = s && u.value != null ? String(u.value) : void 0), typeof s == "function" && (s = s(u)), renderComponent(s, u, l);
|
|
13
14
|
}, [f, p] = createSignal();
|
|
14
|
-
return u = combineProps({ ref: p }, u), createComponent(c, mergeProps(u, { get children() {
|
|
15
|
+
return u = combineProps({ ref: p }, u), createComponent(c, mergeProps$2(u, { get children() {
|
|
15
16
|
return createComponent(Show, {
|
|
16
17
|
get when() {
|
|
17
18
|
return d();
|
|
@@ -1,6 +1,7 @@
|
|
|
1
|
+
import { mergeProps as mergeProps$1 } from "../mergeProps2.js";
|
|
1
2
|
import { useSelector } from "../hooks/useSelector.js";
|
|
2
3
|
import chevron_right_default from "../chevron-right.js";
|
|
3
|
-
import { createComponent, effect, insert, memo,
|
|
4
|
+
import { createComponent, effect, insert, memo, style, template } from "solid-js/web";
|
|
4
5
|
import { createLazyMemo } from "@solid-primitives/memo";
|
|
5
6
|
var _tmpl$ = /* @__PURE__ */ template("<div class=\"flex items-center\">"), _tmpl$2 = /* @__PURE__ */ template("<span style=display:inline-block;width:16px;flex-shrink:0;margin-right:4px>");
|
|
6
7
|
function flattenTree(e, t, n, r, i = 0, a = null, o = [], s = /* @__PURE__ */ new Map()) {
|
|
@@ -21,7 +22,7 @@ const TreePlugin = (c) => {
|
|
|
21
22
|
let p = createLazyMemo(() => c.props.columns?.findIndex((e) => !e[c.internal]) ?? -1);
|
|
22
23
|
return {
|
|
23
24
|
name: "tree",
|
|
24
|
-
store: (
|
|
25
|
+
store: (e) => ({
|
|
25
26
|
tree: useSelector({ multiple: !0 }),
|
|
26
27
|
_treeMeta: /* @__PURE__ */ new Map(),
|
|
27
28
|
_hasChildren: !1
|
|
@@ -36,9 +37,9 @@ const TreePlugin = (c) => {
|
|
|
36
37
|
let n = t.props.tree.children || "children", r = t.props.rowKey, { flat: i, meta: a } = flattenTree(e, n, r, (e) => t.tree.has(e));
|
|
37
38
|
return t._treeMeta = a, t._haschildren = Object.values(Object.fromEntries(a)).some((e) => e.hasChildren), i;
|
|
38
39
|
},
|
|
39
|
-
Td: ({ Td:
|
|
40
|
+
Td: ({ Td: t }, { store: c }) => (l) => {
|
|
40
41
|
let f = () => c.props.rowKey, m = () => c._treeMeta?.get(l.data?.[f()]);
|
|
41
|
-
return createComponent(
|
|
42
|
+
return createComponent(t, mergeProps$1(l, {
|
|
42
43
|
onDblClick: (e) => {
|
|
43
44
|
l.onDblClick?.(e), m()?.hasChildren && c.tree.toggle(l.data?.[f()]);
|
|
44
45
|
},
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { isEmpty } from "../utils.js";
|
|
2
|
-
import {
|
|
2
|
+
import { mergeProps as mergeProps$1 } from "../mergeProps2.js";
|
|
3
|
+
import { createComponent, insert, memo, template } from "solid-js/web";
|
|
3
4
|
var _tmpl$ = /* @__PURE__ */ template("<div class=cell-validation-error>"), _tmpl$2 = /* @__PURE__ */ template("<span class=\"mr-1 c-red/75\">*");
|
|
4
5
|
const ValidatorPlugin = {
|
|
5
6
|
name: "validator",
|
|
@@ -56,7 +57,7 @@ const ValidatorPlugin = {
|
|
|
56
57
|
rewriteProps: {
|
|
57
58
|
Td: ({ Td: e }, { store: a }) => (s) => {
|
|
58
59
|
let c = () => a.cellValidationErrors[s.data[a.props.rowKey]]?.[s.col.id];
|
|
59
|
-
return createComponent(e, mergeProps(s, {
|
|
60
|
+
return createComponent(e, mergeProps$1(s, {
|
|
60
61
|
get class() {
|
|
61
62
|
return s.class + " " + (c() == null ? "" : "is-invalid");
|
|
62
63
|
},
|
|
@@ -71,8 +72,8 @@ const ValidatorPlugin = {
|
|
|
71
72
|
}
|
|
72
73
|
}));
|
|
73
74
|
},
|
|
74
|
-
Th: ({ Th: e }, { store:
|
|
75
|
-
return [memo(() => memo(() => !!
|
|
75
|
+
Th: ({ Th: e }, { store: r }) => (r) => createComponent(e, mergeProps$1(r, { get children() {
|
|
76
|
+
return [memo(() => memo(() => !!r.col.required)() && _tmpl$2()), r.children];
|
|
76
77
|
} }))
|
|
77
78
|
}
|
|
78
79
|
};
|