intable 0.0.47 → 0.0.49
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.js +9 -4
- package/dist/plugins/CellMergePlugin.js +6 -4
- package/dist/plugins/EditablePlugin.js +70 -71
- package/dist/plugins/RenderPlugin/index.js +11 -8
- package/dist/plugins/TooltipPlugin.js +13 -12
- package/dist/test.d.ts +1 -4
- package/dist/test.js +0 -2
- package/package.json +1 -1
package/dist/index.js
CHANGED
|
@@ -302,15 +302,20 @@ function BasePlugin() {
|
|
|
302
302
|
} }));
|
|
303
303
|
},
|
|
304
304
|
Td: ({ Td: _ = $ }, { store: K }) => (K) => {
|
|
305
|
-
let { props: J } = useContext(Ctx), Y =
|
|
305
|
+
let { props: J } = useContext(Ctx), Y = mergeProps$1(K, {
|
|
306
306
|
get class() {
|
|
307
|
-
return [
|
|
307
|
+
return [
|
|
308
|
+
unFn(J.cellClass, K),
|
|
309
|
+
K.col.class,
|
|
310
|
+
K.class
|
|
311
|
+
].filter(Boolean).join(" ");
|
|
308
312
|
},
|
|
309
313
|
get style() {
|
|
310
314
|
return [
|
|
311
315
|
unFn(J.cellStyle, K),
|
|
312
316
|
K.col.style,
|
|
313
|
-
K.col.width && `width: ${K.col.width}px; max-width: ${K.col.width}px
|
|
317
|
+
K.col.width && `width: ${K.col.width}px; max-width: ${K.col.width}px`,
|
|
318
|
+
K.style
|
|
314
319
|
].filter(Boolean).join(";");
|
|
315
320
|
}
|
|
316
321
|
});
|
|
@@ -404,7 +409,7 @@ const defaultsPlugins = [
|
|
|
404
409
|
return createEffect(on(() => [K.width, _.props.columns.map((_) => _.width)], async () => {
|
|
405
410
|
if (!K.width || J) return;
|
|
406
411
|
q.length = 0, J = !0, await Promise.resolve();
|
|
407
|
-
let Y = (K.width - _.table.getBoundingClientRect().width) / _.props.columns.filter((_) => !_.width).length, X = _.props.columns.map((K, q) => K.width ? null : { width: Math.max((_.ths[q]?.getBoundingClientRect().width || 0) + Y, 80) });
|
|
412
|
+
let Y = Math.max((K.width - _.table.getBoundingClientRect().width) / _.props.columns.filter((_) => !_.width).length, 0), X = _.props.columns.map((K, q) => K.width ? null : { width: Math.max((_.ths[q]?.getBoundingClientRect().width || 0) + Y, 80) });
|
|
408
413
|
q.push(...X), J = !1;
|
|
409
414
|
})), {
|
|
410
415
|
name: "fit-col-width",
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { mergeProps as mergeProps$2 } from "../mergeProps2.js";
|
|
2
2
|
import { createComponent } from "solid-js/web";
|
|
3
3
|
import { Show, createMemo } from "solid-js";
|
|
4
|
+
import { createLazyMemo } from "@solid-primitives/memo";
|
|
4
5
|
function buildMergeMap(e, t, n) {
|
|
5
6
|
let r = /* @__PURE__ */ new Map(), i = /* @__PURE__ */ new Set();
|
|
6
7
|
for (let a = 0; a < e.length; a++) for (let o = 0; o < t.length; o++) {
|
|
@@ -26,15 +27,16 @@ function buildMergeMap(e, t, n) {
|
|
|
26
27
|
}
|
|
27
28
|
const CellMergePlugin = {
|
|
28
29
|
name: "cell-merge",
|
|
30
|
+
store: (e) => ({ hasMergeCell: createLazyMemo(() => e.props.merge || e.props.columns.some((e) => e.mergeRow)) }),
|
|
29
31
|
rewriteProps: {
|
|
30
|
-
Table: ({ Table: e }, { store: n }) => (
|
|
32
|
+
Table: ({ Table: e }, { store: n }) => (i) => (n._mergeMap ??= createMemo(() => {
|
|
31
33
|
let { merge: e, data: t, columns: r } = n.props;
|
|
32
34
|
return !e && !r?.some((e) => e.mergeRow) || !t?.length || !r?.length ? {
|
|
33
35
|
spans: /* @__PURE__ */ new Map(),
|
|
34
36
|
covered: /* @__PURE__ */ new Set()
|
|
35
37
|
} : buildMergeMap(t, r, e);
|
|
36
|
-
}), createComponent(e,
|
|
37
|
-
Td: ({ Td: r }, { store: i }) => (a) => {
|
|
38
|
+
}), createComponent(e, i)),
|
|
39
|
+
Td: ({ Td: r }, { store: i }) => i.hasMergeCell() ? (a) => {
|
|
38
40
|
let o = () => `${a.y},${a.x}`, s = () => i._mergeMap?.().covered.has(o()) ?? !1, c = () => i._mergeMap?.().spans.get(o());
|
|
39
41
|
return createComponent(Show, {
|
|
40
42
|
get when() {
|
|
@@ -51,7 +53,7 @@ const CellMergePlugin = {
|
|
|
51
53
|
}));
|
|
52
54
|
}
|
|
53
55
|
});
|
|
54
|
-
},
|
|
56
|
+
} : r,
|
|
55
57
|
newRow: ({ newRow: e }, { store: t }) => function(n) {
|
|
56
58
|
let r = e(n), { data: i, columns: a, merge: o } = t.props;
|
|
57
59
|
return !i?.length || !a?.length || a.forEach((e, a) => {
|
|
@@ -6,7 +6,6 @@ import { Ctx } from "../index.js";
|
|
|
6
6
|
import { addEventListener, createComponent, delegateEvents, effect, insert, memo, spread, template, use } from "solid-js/web";
|
|
7
7
|
import { createEffect, createMemo, createRoot, createSignal, on, onCleanup, useContext } from "solid-js";
|
|
8
8
|
import { createMutable } from "solid-js/store";
|
|
9
|
-
import { combineProps } from "@solid-primitives/props";
|
|
10
9
|
import { createAsyncMemo } from "@solid-primitives/memo";
|
|
11
10
|
import { delay } from "es-toolkit";
|
|
12
11
|
var _tmpl$ = /* @__PURE__ */ template("<div class=in-cell-edit-wrapper tabindex=-1>"), _tmpl$2 = /* @__PURE__ */ template("<span class=cell-validating>"), _tmpl$3 = /* @__PURE__ */ template("<input style=position:absolute;margin-top:1em;width:0;height:0;pointer-events:none;opacity:0>"), _tmpl$4 = /* @__PURE__ */ template("<input>"), _tmpl$5 = /* @__PURE__ */ template("<label class=\"h-full flex items-center\">"), _tmpl$6 = /* @__PURE__ */ template("<select><option value>-"), _tmpl$7 = /* @__PURE__ */ template("<option>");
|
|
@@ -14,106 +13,106 @@ const EditablePlugin = {
|
|
|
14
13
|
name: "editable",
|
|
15
14
|
store: () => ({ editors: { ...editors } }),
|
|
16
15
|
rewriteProps: {
|
|
17
|
-
editable: ({ editable: e }, { store:
|
|
18
|
-
let
|
|
19
|
-
return !!
|
|
16
|
+
editable: ({ editable: e }, { store: m }) => (g) => {
|
|
17
|
+
let _ = [g.col.editable, e].filter((e) => e != null);
|
|
18
|
+
return !!_.length && _.every((e) => unFn(e, g)) && !g.data[m.internal] && !g.col[m.internal];
|
|
20
19
|
},
|
|
21
|
-
Td: ({ Td: e }, { store:
|
|
22
|
-
let
|
|
23
|
-
if (
|
|
24
|
-
let e = createMemo(() => JSON.stringify(
|
|
25
|
-
createEffect(on(e, () =>
|
|
26
|
-
let
|
|
27
|
-
props:
|
|
28
|
-
col:
|
|
29
|
-
eventKey:
|
|
30
|
-
data:
|
|
31
|
-
value:
|
|
20
|
+
Td: ({ Td: e }, { store: m }) => (_) => {
|
|
21
|
+
let v, { props: y } = useContext(Ctx), [C, w] = createSignal(!1), E = "", D = () => unFn(y.editable, _), k = () => (([e, m]) => _.x == e && _.y == m)(m.selected.start || []), A = () => k() && D() && !C(), [j, M] = createSignal(!1), N = createAsyncMemo(() => {
|
|
22
|
+
if (C()) {
|
|
23
|
+
let e = createMemo(() => JSON.stringify(m.selected ?? "{}"));
|
|
24
|
+
createEffect(on(e, () => w(!1), { defer: !0 })), I.w = v.getBoundingClientRect().width, I.h = v.getBoundingClientRect().height;
|
|
25
|
+
let h = !1, g = _.data[_.col.id], b = ((e) => typeof e == "string" ? m.editors[e] : e)(_.col.editor ?? _.col.type ?? (_.col.enum ? "select" : "text")), x = {
|
|
26
|
+
props: _.col.editorProps,
|
|
27
|
+
col: _.col,
|
|
28
|
+
eventKey: E,
|
|
29
|
+
data: _.data,
|
|
30
|
+
value: g,
|
|
32
31
|
ok: async () => {
|
|
33
|
-
await
|
|
32
|
+
await P(S.getValue()), w(!1);
|
|
34
33
|
},
|
|
35
|
-
cancel: () => (
|
|
36
|
-
onChange: (e) =>
|
|
37
|
-
},
|
|
38
|
-
return queueMicrotask(() =>
|
|
39
|
-
!
|
|
40
|
-
...
|
|
41
|
-
[
|
|
42
|
-
}),
|
|
43
|
-
}), [
|
|
34
|
+
cancel: () => (h = !0, w(!1)),
|
|
35
|
+
onChange: (e) => C() && P(e).catch(() => {})
|
|
36
|
+
}, S = b(x);
|
|
37
|
+
return queueMicrotask(() => S.focus?.()), onCleanup(() => {
|
|
38
|
+
!h && S.getValue() !== g && m.commands.rowChange({
|
|
39
|
+
...y.data[_.y],
|
|
40
|
+
[_.col.id]: S.getValue()
|
|
41
|
+
}), h || P(S.getValue()).catch(() => {}), E = "", S.destroy();
|
|
42
|
+
}), [x, S];
|
|
44
43
|
}
|
|
45
44
|
});
|
|
46
|
-
async function
|
|
45
|
+
async function P(e) {
|
|
47
46
|
try {
|
|
48
|
-
|
|
47
|
+
M(!0), await m.validateCell(e, _.data, _.col);
|
|
49
48
|
} finally {
|
|
50
|
-
|
|
49
|
+
M(!1);
|
|
51
50
|
}
|
|
52
51
|
}
|
|
53
|
-
let
|
|
52
|
+
let F, I = createMutable({
|
|
54
53
|
w: 0,
|
|
55
54
|
h: 0
|
|
56
|
-
})
|
|
57
|
-
|
|
58
|
-
ref: (e) => b = e,
|
|
55
|
+
}), L = mergeProps$2(_, {
|
|
56
|
+
ref: (e) => (v = e, _.ref?.(e)),
|
|
59
57
|
get class() {
|
|
60
|
-
return
|
|
58
|
+
return [C() ? "is-editing" : "", _.class].filter(Boolean).join(" ");
|
|
61
59
|
},
|
|
62
60
|
get style() {
|
|
63
|
-
return
|
|
61
|
+
return [C() ? `width: ${I.w}px; height: ${I.h}px; padding: 0; ` : "", _.style].filter(Boolean).join(" ");
|
|
64
62
|
},
|
|
65
|
-
onClick: () =>
|
|
66
|
-
onDblClick: () =>
|
|
67
|
-
onKeyDown: (e) => e.key == "Escape" &&
|
|
68
|
-
})
|
|
69
|
-
|
|
63
|
+
onClick: (e) => (F?.focus?.(), _.onClick?.(e)),
|
|
64
|
+
onDblClick: (e) => (w(D()), _.onDblClick?.(e)),
|
|
65
|
+
onKeyDown: (e) => (e.key == "Escape" && N()?.[0].cancel(), _.onKeyDown?.(e))
|
|
66
|
+
});
|
|
67
|
+
return createComponent(e, mergeProps$2(L, { get children() {
|
|
68
|
+
return [memo(() => memo(() => !!N()?.[1]?.el)() ? (() => {
|
|
70
69
|
var e = _tmpl$();
|
|
71
70
|
return addEventListener(e, "keydown", (e) => {
|
|
72
|
-
e.stopPropagation(), e.key == "Enter" && !e.shiftKey && (
|
|
73
|
-
}), addEventListener(e, "pointerdown", (e) => e.stopPropagation()), insert(e, () =>
|
|
74
|
-
var e = memo(() => !!
|
|
71
|
+
e.stopPropagation(), e.key == "Enter" && !e.shiftKey && (N()?.[0].ok(), e.preventDefault()), e.key == "Escape" && N()?.[0].cancel();
|
|
72
|
+
}), addEventListener(e, "pointerdown", (e) => e.stopPropagation()), insert(e, () => N()?.[1]?.el, null), insert(e, (() => {
|
|
73
|
+
var e = memo(() => !!j());
|
|
75
74
|
return () => e() && _tmpl$2();
|
|
76
75
|
})(), null), e;
|
|
77
|
-
})() :
|
|
76
|
+
})() : _.children), memo(() => memo(() => !!A())() && (() => {
|
|
78
77
|
var e = _tmpl$3();
|
|
79
78
|
return e.addEventListener("compositionend", () => {
|
|
80
|
-
|
|
79
|
+
w(!0);
|
|
81
80
|
}), e.$$input = (e) => {
|
|
82
|
-
|
|
81
|
+
E = e.target.value, w(!e.isComposing);
|
|
83
82
|
}, e.$$keydown = (e) => {
|
|
84
83
|
e.key == " " && e.preventDefault();
|
|
85
84
|
}, use((e) => {
|
|
86
|
-
|
|
85
|
+
F = e, delay(0).then(() => e.focus({ preventScroll: !0 }));
|
|
87
86
|
}, e), e;
|
|
88
87
|
})())];
|
|
89
88
|
} }));
|
|
90
89
|
}
|
|
91
90
|
}
|
|
92
91
|
};
|
|
93
|
-
var createEditor = (e,
|
|
94
|
-
let [
|
|
92
|
+
var createEditor = (e, h, _) => ({ eventKey: v, value: y, col: b, ok: x, cancel: C, props: w, onChange: T }) => createRoot((C) => {
|
|
93
|
+
let [E, D] = createSignal(v || y), O;
|
|
95
94
|
return createComponent(e, mergeProps$2({
|
|
96
|
-
ref: (e) =>
|
|
95
|
+
ref: (e) => O = e,
|
|
97
96
|
class: "relative block px-2 size-full z-9 box-border resize-none outline-0",
|
|
98
97
|
get value() {
|
|
99
|
-
return
|
|
98
|
+
return E();
|
|
100
99
|
},
|
|
101
|
-
onInput: (e) => (
|
|
102
|
-
onChange: (e) => (
|
|
100
|
+
onInput: (e) => (D(e instanceof Event ? e.target.value : e), T?.(E())),
|
|
101
|
+
onChange: (e) => (D(e instanceof Event ? e.target.value : e), T?.(E()), _ && x()),
|
|
103
102
|
get options() {
|
|
104
|
-
return memo(() => !!
|
|
103
|
+
return memo(() => !!b.enum)() ? resolveOptions(b.enum ?? []) : void 0;
|
|
105
104
|
}
|
|
106
|
-
},
|
|
107
|
-
|
|
105
|
+
}, h, w)), setTimeout(() => {
|
|
106
|
+
_ && O?.showPicker?.();
|
|
108
107
|
}, 0), {
|
|
109
|
-
el:
|
|
110
|
-
getValue:
|
|
111
|
-
focus: () =>
|
|
112
|
-
destroy:
|
|
108
|
+
el: O,
|
|
109
|
+
getValue: E,
|
|
110
|
+
focus: () => O.focus(),
|
|
111
|
+
destroy: C
|
|
113
112
|
};
|
|
114
113
|
}), Input = (e) => (() => {
|
|
115
|
-
var
|
|
116
|
-
return spread(
|
|
114
|
+
var m = _tmpl$4();
|
|
115
|
+
return spread(m, e, !1, !1), m;
|
|
117
116
|
})();
|
|
118
117
|
const editors = {
|
|
119
118
|
text: createEditor(Input),
|
|
@@ -131,27 +130,27 @@ const editors = {
|
|
|
131
130
|
color: createEditor(Input, { type: "color" }),
|
|
132
131
|
tel: createEditor(Input, { type: "tel" }),
|
|
133
132
|
password: createEditor(Input, { type: "password" }),
|
|
134
|
-
file: createEditor((
|
|
133
|
+
file: createEditor((m) => createComponent(Files, mergeProps$2(m, {
|
|
135
134
|
class: "relative z-9 outline-2 outline-blue min-h-a! h-a! p-1 bg-#fff",
|
|
136
|
-
onAdd: () => chooseFile({ multiple: !0 }).then((e) =>
|
|
135
|
+
onAdd: () => chooseFile({ multiple: !0 }).then((e) => m.onChange([...m.value || [], ...e.map((e) => ({
|
|
137
136
|
name: e.name,
|
|
138
137
|
size: e.size
|
|
139
138
|
}))]))
|
|
140
139
|
}))),
|
|
141
140
|
checkbox: createEditor((e) => (() => {
|
|
142
|
-
var
|
|
143
|
-
return typeof
|
|
141
|
+
var m = _tmpl$5(), h = e.ref;
|
|
142
|
+
return typeof h == "function" ? use(h, m) : e.ref = m, insert(m, createComponent(Checkbox, mergeProps$2(e, {
|
|
144
143
|
ref: () => {},
|
|
145
144
|
onInput: () => {},
|
|
146
145
|
class: "mx-3!"
|
|
147
|
-
}))),
|
|
146
|
+
}))), m;
|
|
148
147
|
})()),
|
|
149
148
|
select: createEditor((e) => (() => {
|
|
150
|
-
var
|
|
151
|
-
return
|
|
152
|
-
var
|
|
153
|
-
return insert(
|
|
154
|
-
})()), null),
|
|
149
|
+
var m = _tmpl$6();
|
|
150
|
+
return m.firstChild, spread(m, e, !1, !0), insert(m, () => e.options?.map((m) => (() => {
|
|
151
|
+
var h = _tmpl$7();
|
|
152
|
+
return insert(h, () => m.label), effect(() => h.selected = m.value === e.value), effect(() => h.value = m.value), h;
|
|
153
|
+
})()), null), m;
|
|
155
154
|
})(), {}, !0)
|
|
156
155
|
};
|
|
157
156
|
delegateEvents(["keydown", "input"]);
|
|
@@ -1,26 +1,29 @@
|
|
|
1
1
|
import { renderComponent, solidComponent } from "../../components/utils.js";
|
|
2
2
|
import { resolveOptions, toArr } from "../../utils.js";
|
|
3
|
-
import { mergeProps as mergeProps$
|
|
3
|
+
import { mergeProps as mergeProps$2 } from "../../mergeProps2.js";
|
|
4
4
|
import { Checkbox, Files } from "./components.js";
|
|
5
5
|
import { createComponent, insert, template } from "solid-js/web";
|
|
6
|
+
import { createMemo } from "solid-js";
|
|
6
7
|
var _tmpl$ = /* @__PURE__ */ template("<div class=\"flex items-center h-full\">");
|
|
7
8
|
const RenderPlugin = {
|
|
8
9
|
name: "render",
|
|
9
10
|
priority: -Infinity,
|
|
10
11
|
store: () => ({ renders: { ...renders } }),
|
|
11
|
-
rewriteProps: { Td: ({ Td:
|
|
12
|
-
|
|
13
|
-
|
|
12
|
+
rewriteProps: { Td: ({ Td: f }, { store: p }) => (m) => (p.props.cpu && (m = mergeProps$2(() => ({}), m)), createComponent(f, mergeProps$2(m, { get children() {
|
|
13
|
+
return createMemo(() => {
|
|
14
|
+
let f = ((e) => typeof e == "string" ? p.renders[e] : e)(m.col.render ?? m.col.type ?? text);
|
|
15
|
+
return f == text ? text(m) : renderComponent(f, m, p);
|
|
16
|
+
});
|
|
14
17
|
} }))) }
|
|
15
18
|
};
|
|
16
|
-
var text = (e) => e.col.enum ? toArr(e.value).map((
|
|
19
|
+
var text = (e) => e.col.enum ? toArr(e.value).map((f) => resolveOptions(e.col.enum).find((e) => e.value == f)?.label ?? f).join(", ") : e.value;
|
|
17
20
|
const renders = {
|
|
18
21
|
text,
|
|
19
22
|
number: text,
|
|
20
23
|
date: text,
|
|
21
24
|
checkbox: (e) => (() => {
|
|
22
|
-
var
|
|
23
|
-
return insert(
|
|
25
|
+
var f = _tmpl$();
|
|
26
|
+
return insert(f, createComponent(Checkbox, {
|
|
24
27
|
class: "",
|
|
25
28
|
get value() {
|
|
26
29
|
return e.value;
|
|
@@ -28,7 +31,7 @@ const renders = {
|
|
|
28
31
|
get onChange() {
|
|
29
32
|
return e.onChange;
|
|
30
33
|
}
|
|
31
|
-
})),
|
|
34
|
+
})), f;
|
|
32
35
|
})(),
|
|
33
36
|
file: (e) => createComponent(Files, {
|
|
34
37
|
get value() {
|
|
@@ -3,22 +3,23 @@ import { mergeProps as mergeProps$2 } from "../mergeProps2.js";
|
|
|
3
3
|
import { Tooltip } from "../components/Tooltip.js";
|
|
4
4
|
import { createComponent } from "solid-js/web";
|
|
5
5
|
import { Show, createSignal } from "solid-js";
|
|
6
|
-
import {
|
|
6
|
+
import { createLazyMemo } from "@solid-primitives/memo";
|
|
7
7
|
import { offset } from "floating-ui-solid";
|
|
8
8
|
const TooltipPlugin = {
|
|
9
9
|
name: "tooltip",
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
10
|
+
store: (e) => ({ hasTooltip: createLazyMemo(() => e.props.columns.some((e) => e.tooltip)) }),
|
|
11
|
+
rewriteProps: { Td: ({ Td: s }, { store: c }) => c.hasTooltip() ? (l) => {
|
|
12
|
+
let u = () => {
|
|
13
|
+
let o = l.col.tooltip;
|
|
14
|
+
if (o != null) return typeof o == "boolean" && (o = o && l.value != null ? String(l.value) : void 0), typeof o == "function" && (o = o(l)), renderComponent(o, l, c);
|
|
15
|
+
}, [d, f] = createSignal(), p = mergeProps$2(l, { ref: (e) => (f(e), l.ref?.(e)) });
|
|
16
|
+
return createComponent(s, mergeProps$2(p, { get children() {
|
|
16
17
|
return createComponent(Show, {
|
|
17
18
|
get when() {
|
|
18
|
-
return
|
|
19
|
+
return u();
|
|
19
20
|
},
|
|
20
21
|
get fallback() {
|
|
21
|
-
return
|
|
22
|
+
return l.children;
|
|
22
23
|
},
|
|
23
24
|
children: (e) => createComponent(Tooltip, {
|
|
24
25
|
get content() {
|
|
@@ -26,17 +27,17 @@ const TooltipPlugin = {
|
|
|
26
27
|
},
|
|
27
28
|
strategy: "fixed",
|
|
28
29
|
get target() {
|
|
29
|
-
return
|
|
30
|
+
return d();
|
|
30
31
|
},
|
|
31
32
|
get middleware() {
|
|
32
33
|
return [offset({ mainAxis: 4 })];
|
|
33
34
|
},
|
|
34
35
|
get children() {
|
|
35
|
-
return
|
|
36
|
+
return l.children;
|
|
36
37
|
}
|
|
37
38
|
})
|
|
38
39
|
});
|
|
39
40
|
} }));
|
|
40
|
-
} }
|
|
41
|
+
} : s }
|
|
41
42
|
};
|
|
42
43
|
export { TooltipPlugin };
|
package/dist/test.d.ts
CHANGED
package/dist/test.js
CHANGED
|
@@ -1,5 +1,3 @@
|
|
|
1
|
-
import './style.css';import './__uno.css';/* empty css */
|
|
2
|
-
/* empty css */
|
|
3
1
|
import { createComponent, effect, insert, setAttribute, template } from "solid-js/web";
|
|
4
2
|
import { For } from "solid-js";
|
|
5
3
|
var _tmpl$ = /* @__PURE__ */ template("<table><thead><tr></tr></thead><thead>"), _tmpl$2 = /* @__PURE__ */ template("<th>"), _tmpl$3 = /* @__PURE__ */ template("<tr>"), _tmpl$4 = /* @__PURE__ */ template("<td>");
|