intable 0.0.34 → 0.0.36

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.
@@ -1,5 +1,6 @@
1
1
  import { chooseFile, resolveOptions, unFn } from "../utils.js";
2
2
  import { Checkbox, Files } from "./RenderPlugin/components.js";
3
+ import Textarea_default from "../components/Textarea.js";
3
4
  import { Ctx } from "../index.js";
4
5
  import { addEventListener, createComponent, delegateEvents, effect, insert, memo, mergeProps, spread, template, use } from "solid-js/web";
5
6
  import { createComputed, createEffect, createMemo, createRoot, createSignal, on, onCleanup, useContext } from "solid-js";
@@ -7,41 +8,41 @@ import { createMutable } from "solid-js/store";
7
8
  import { combineProps } from "@solid-primitives/props";
8
9
  import { createAsyncMemo } from "@solid-primitives/memo";
9
10
  import { delay } from "es-toolkit";
10
- 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("<textarea>"), _tmpl$6 = /* @__PURE__ */ template("<label class=\"h-full flex items-center\">"), _tmpl$7 = /* @__PURE__ */ template("<select>"), _tmpl$8 = /* @__PURE__ */ template("<option>");
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>");
11
12
  const EditablePlugin = {
12
13
  name: "editable",
13
14
  store: () => ({ editors: { ...editors } }),
14
15
  rewriteProps: {
15
- editable: ({ editable: e }, { store: v }) => (b) => {
16
- let x = [b.col.editable, e].filter((e) => e != null);
17
- return !!x.length && x.every((e) => unFn(e, b)) && !b.data[v.internal] && !b.col[v.internal];
16
+ editable: ({ editable: e }, { store: y }) => (x) => {
17
+ let S = [x.col.editable, e].filter((e) => e != null);
18
+ return !!S.length && S.every((e) => unFn(e, x)) && !x.data[y.internal] && !x.col[y.internal];
18
19
  },
19
- Td: ({ Td: e }, { store: v }) => (b) => {
20
- let x, { props: w } = useContext(Ctx), [T, D] = createSignal(!1), O = "", j = () => unFn(w.editable, b), M = () => (([e, v]) => b.x == e && b.y == v)(v.selected.start || []), N = () => M() && j() && !T(), [P, F] = createSignal(!1), I = createAsyncMemo(() => {
21
- if (T()) {
22
- let e = !1, y = b.data[b.col.id], x = ((e) => typeof e == "string" ? v.editors[e] : e)(b.col.editor ?? b.col.type ?? "text"), S = {
23
- props: b.col.editorProps,
24
- col: b.col,
25
- eventKey: O,
26
- data: b.data,
27
- value: y,
20
+ Td: ({ Td: e }, { store: y }) => (x) => {
21
+ let S, { props: C } = useContext(Ctx), [E, D] = createSignal(!1), k = "", A = () => unFn(C.editable, x), M = () => (([e, y]) => x.x == e && x.y == y)(y.selected.start || []), N = () => M() && A() && !E(), [P, F] = createSignal(!1), I = createAsyncMemo(() => {
22
+ if (E()) {
23
+ let e = !1, b = x.data[x.col.id], S = ((e) => typeof e == "string" ? y.editors[e] : e)(x.col.editor ?? x.col.type ?? (x.col.enum ? "select" : "text")), w = {
24
+ props: x.col.editorProps,
25
+ col: x.col,
26
+ eventKey: k,
27
+ data: x.data,
28
+ value: b,
28
29
  ok: async () => {
29
- await L(C.getValue()), D(!1);
30
+ await L(T.getValue()), D(!1);
30
31
  },
31
32
  cancel: () => (e = !0, D(!1)),
32
- onChange: (e) => T() && L(e).catch(() => {})
33
- }, C = x(S);
33
+ onChange: (e) => E() && L(e).catch(() => {})
34
+ }, T = S(w);
34
35
  return onCleanup(() => {
35
- !e && C.getValue() !== y && v.commands.rowChange({
36
- ...w.data[b.y],
37
- [b.col.id]: C.getValue()
38
- }), e || L(C.getValue()).catch(() => {}), O = "", C.destroy();
39
- }), [S, C];
36
+ !e && T.getValue() !== b && y.commands.rowChange({
37
+ ...C.data[x.y],
38
+ [x.col.id]: T.getValue()
39
+ }), e || L(T.getValue()).catch(() => {}), k = "", T.destroy();
40
+ }), [w, T];
40
41
  }
41
42
  });
42
43
  async function L(e) {
43
44
  try {
44
- F(!0), await v.validateCell(e, b.data, b.col);
45
+ F(!0), await y.validateCell(e, x.data, x.col);
45
46
  } finally {
46
47
  F(!1);
47
48
  }
@@ -49,8 +50,8 @@ const EditablePlugin = {
49
50
  createEffect(() => {
50
51
  I()?.[1]?.focus?.();
51
52
  }), createEffect(() => {
52
- if (T()) {
53
- let e = createMemo(() => JSON.stringify(v.selected ?? "{}"));
53
+ if (E()) {
54
+ let e = createMemo(() => JSON.stringify(y.selected ?? "{}"));
54
55
  createEffect(on(e, () => D(!1), { defer: !0 }));
55
56
  }
56
57
  });
@@ -58,32 +59,32 @@ const EditablePlugin = {
58
59
  w: 0,
59
60
  h: 0
60
61
  });
61
- return createComputed(() => T() && (z.w = x.getBoundingClientRect().width, z.h = x.getBoundingClientRect().height)), b = combineProps(b, {
62
- ref: (e) => x = e,
62
+ return createComputed(() => E() && (z.w = S.getBoundingClientRect().width, z.h = S.getBoundingClientRect().height)), x = combineProps(x, {
63
+ ref: (e) => S = e,
63
64
  get class() {
64
- return T() ? "is-editing" : "";
65
+ return E() ? "is-editing" : "";
65
66
  },
66
67
  get style() {
67
- return T() ? `width: ${z.w}px; height: ${z.h}px; padding: 0; ` : "";
68
+ return E() ? `width: ${z.w}px; height: ${z.h}px; padding: 0; ` : "";
68
69
  },
69
70
  onClick: () => R?.focus?.(),
70
- onDblClick: () => D(j()),
71
+ onDblClick: () => D(A()),
71
72
  onKeyDown: (e) => e.key == "Escape" && I()?.[0].cancel()
72
- }), createComponent(e, mergeProps(b, { get children() {
73
+ }), createComponent(e, mergeProps(x, { get children() {
73
74
  return [memo(() => memo(() => !!I()?.[1]?.el)() ? (() => {
74
75
  var e = _tmpl$();
75
76
  return addEventListener(e, "keydown", (e) => {
76
- e.stopPropagation(), e.key == "Enter" && !e.shiftKey && I()?.[0].ok(), e.key == "Escape" && I()?.[0].cancel();
77
+ e.stopPropagation(), e.key == "Enter" && !e.shiftKey && (I()?.[0].ok(), e.preventDefault()), e.key == "Escape" && I()?.[0].cancel();
77
78
  }), addEventListener(e, "pointerdown", (e) => e.stopPropagation()), insert(e, () => I()?.[1]?.el, null), insert(e, (() => {
78
79
  var e = memo(() => !!P());
79
80
  return () => e() && _tmpl$2();
80
81
  })(), null), e;
81
- })() : b.children), memo(() => memo(() => !!N())() && (() => {
82
+ })() : x.children), memo(() => memo(() => !!N())() && (() => {
82
83
  var e = _tmpl$3();
83
84
  return e.addEventListener("compositionend", () => {
84
85
  D(!0);
85
86
  }), e.$$input = (e) => {
86
- O = e.target.value, D(!e.isComposing);
87
+ k = e.target.value, D(!e.isComposing);
87
88
  }, e.$$keydown = (e) => {
88
89
  e.key == " " && e.preventDefault();
89
90
  }, use((e) => {
@@ -94,35 +95,39 @@ const EditablePlugin = {
94
95
  }
95
96
  }
96
97
  };
97
- var createEditor = (e, y, b) => ({ eventKey: x, value: S, col: C, ok: w, cancel: T, props: E, onChange: D }) => createRoot((T) => {
98
- let [O, k] = createSignal(x || S), A;
98
+ var createEditor = (e, b, x) => ({ eventKey: S, value: C, col: w, ok: T, cancel: E, props: D, onChange: O }) => createRoot((E) => {
99
+ let [k, A] = createSignal(S || C), j;
99
100
  return createComponent(e, mergeProps({
100
- ref: (e) => A = e,
101
+ ref: (e) => j = e,
101
102
  class: "relative block px-2 size-full z-9 box-border resize-none outline-0",
102
103
  get value() {
103
- return O();
104
+ return k();
104
105
  },
105
- onInput: (e) => (k(e instanceof Event ? e.target.value : e), D?.(O())),
106
- onChange: (e) => (k(e instanceof Event ? e.target.value : e), D?.(O()), b && w()),
106
+ onInput: (e) => (A(e instanceof Event ? e.target.value : e), O?.(k())),
107
+ onChange: (e) => (A(e instanceof Event ? e.target.value : e), O?.(k()), x && T()),
107
108
  get options() {
108
- return memo(() => !!C.enum)() ? resolveOptions(C.enum ?? []) : void 0;
109
+ return memo(() => !!w.enum)() ? resolveOptions(w.enum ?? []) : void 0;
109
110
  }
110
- }, y, E)), {
111
- el: A,
112
- getValue: O,
113
- focus: () => A.focus(),
114
- destroy: T
111
+ }, b, D)), setTimeout(() => {
112
+ x && j?.showPicker?.();
113
+ }, 0), {
114
+ el: j,
115
+ getValue: k,
116
+ focus: () => j.focus(),
117
+ destroy: E
115
118
  };
116
119
  }), Input = (e) => (() => {
117
- var v = _tmpl$4();
118
- return spread(v, e, !1, !1), v;
120
+ var y = _tmpl$4();
121
+ return spread(y, e, !1, !1), y;
119
122
  })();
120
123
  const editors = {
121
124
  text: createEditor(Input),
122
- textarea: createEditor((e) => (() => {
123
- var v = _tmpl$5();
124
- return spread(v, e, !1, !1), v;
125
- })()),
125
+ textarea: createEditor((e) => createComponent(Textarea_default, mergeProps({ autosize: {
126
+ minRows: 2,
127
+ maxRows: 3
128
+ } }, e, { get class() {
129
+ return `${e.class} bg-[--table-bg] outline-1.5px outline-solid outline-[--c-primary]`;
130
+ } }))),
126
131
  number: createEditor(Input, { type: "number" }),
127
132
  range: createEditor(Input, { type: "range" }),
128
133
  date: createEditor(Input, { type: "date" }, !0),
@@ -131,27 +136,27 @@ const editors = {
131
136
  color: createEditor(Input, { type: "color" }),
132
137
  tel: createEditor(Input, { type: "tel" }),
133
138
  password: createEditor(Input, { type: "password" }),
134
- file: createEditor((v) => createComponent(Files, mergeProps(v, {
139
+ file: createEditor((y) => createComponent(Files, mergeProps(y, {
135
140
  class: "relative z-9 outline-2 outline-blue min-h-a! h-a! p-1 bg-#fff",
136
- onAdd: () => chooseFile({ multiple: !0 }).then((e) => v.onChange([...v.value || [], ...e.map((e) => ({
141
+ onAdd: () => chooseFile({ multiple: !0 }).then((e) => y.onChange([...y.value || [], ...e.map((e) => ({
137
142
  name: e.name,
138
143
  size: e.size
139
144
  }))]))
140
145
  }))),
141
146
  checkbox: createEditor((e) => (() => {
142
- var v = _tmpl$6(), y = e.ref;
143
- return typeof y == "function" ? use(y, v) : e.ref = v, insert(v, createComponent(Checkbox, mergeProps(e, {
147
+ var y = _tmpl$5(), b = e.ref;
148
+ return typeof b == "function" ? use(b, y) : e.ref = y, insert(y, createComponent(Checkbox, mergeProps(e, {
144
149
  ref: () => {},
145
150
  onInput: () => {},
146
151
  class: "mx-3!"
147
- }))), v;
152
+ }))), y;
148
153
  })()),
149
154
  select: createEditor((e) => (() => {
150
- var v = _tmpl$7();
151
- return spread(v, e, !1, !0), insert(v, () => e.options?.map((e) => (() => {
152
- var v = _tmpl$8();
153
- return insert(v, () => e.label), effect(() => v.value = e.value), v;
154
- })())), v;
155
+ var y = _tmpl$6();
156
+ return y.firstChild, spread(y, e, !1, !0), insert(y, () => e.options?.map((y) => (() => {
157
+ var b = _tmpl$7();
158
+ return insert(b, () => y.label), effect(() => b.selected = y.value === e.value), effect(() => b.value = y.value), b;
159
+ })()), null), y;
155
160
  })(), {}, !0)
156
161
  };
157
162
  delegateEvents(["keydown", "input"]);
@@ -112,10 +112,10 @@ const FilterPlugin = {
112
112
  ...e
113
113
  }, e), m.filter ??= useControlled(e, m.owner), m.filter.$setOpt(e), m.filter),
114
114
  newRow: ({ newRow: e }, { store: h }) => function(...g) {
115
- let _ = e(...g), { filters: v, props: b } = h, { columns: x } = b;
116
- return x.forEach((e) => {
115
+ let _ = e(...g), { columns: v } = h.props;
116
+ return v.forEach((e) => {
117
117
  if (e[h.internal] || !e.filterable) return;
118
- let g = v[e.id];
118
+ let g = h.props.filter.value.find((m) => isRuleNode(m) && m.field === e.id);
119
119
  g && isRuleNode(g) && (_[e.id] = {
120
120
  ne: `not ${g.value}`,
121
121
  between: toArr(g.value)[0],
@@ -2,137 +2,156 @@ import { useMemoAsync } from "../hooks/index.js";
2
2
  import { findParent } from "../tree.js";
3
3
  import "../utils.js";
4
4
  import { Menu } from "../components/Menu.js";
5
- import { createComponent, memo } from "solid-js/web";
5
+ import { addEventListener, createComponent, delegateEvents, effect, memo, template } from "solid-js/web";
6
6
  import { batch, createMemo, createSignal, mapArray } from "solid-js";
7
7
  import { delay, range, remove } from "es-toolkit";
8
8
  import { createEventListener } from "@solid-primitives/event-listener";
9
9
  import { autoPlacement, computePosition } from "@floating-ui/dom";
10
+ var _tmpl$ = /* @__PURE__ */ template("<input type=number class=\"mx-2 p-0! w-8! h-5 text-center in-input bg-[--bg] input-no-spin\">"), state = {
11
+ c1: 1,
12
+ c2: 1
13
+ };
10
14
  const MenuPlugin = {
11
15
  name: "menu",
12
16
  priority: Infinity,
13
17
  store: (e) => ({}),
14
- layers: [(t) => {
15
- let [a, l] = createSignal(), u = mapArray(() => t.plugins || [], (e) => createMemo(() => e.menus?.(t))), d = createMemo(() => u().flatMap((e) => e() || [])), [h, g] = createSignal();
16
- createEventListener(() => t.table, "contextmenu", _);
17
- function _(e) {
18
- e.preventDefault(), t.table.contains(e.target) && g({
18
+ layers: [(c) => {
19
+ let [u, f] = createSignal(), p = mapArray(() => c.plugins || [], (e) => createMemo(() => e.menus?.(c))), h = createMemo(() => p().flatMap((e) => e() || [])), [g, b] = createSignal();
20
+ createEventListener(() => c.table, "contextmenu", x);
21
+ function x(e) {
22
+ e.preventDefault(), c.table.contains(e.target) && b({
19
23
  x: e.x,
20
24
  y: e.y
21
25
  });
22
26
  }
23
27
  createEventListener(document, "pointerdown", (e) => {
24
- a()?.contains(e.target) || g();
28
+ u()?.contains(e.target) || b();
25
29
  });
26
- let v = useMemoAsync(() => {
27
- let e = a();
28
- if (e) return computePosition({ getBoundingClientRect: () => DOMRect.fromRect(h()) }, e, {
30
+ let S = useMemoAsync(() => {
31
+ let e = u();
32
+ if (e) return computePosition({ getBoundingClientRect: () => DOMRect.fromRect(g()) }, e, {
29
33
  strategy: "fixed",
30
34
  placement: "top-start",
31
35
  middleware: [autoPlacement({
32
36
  boundary: document.body,
33
37
  alignment: "start"
34
38
  })]
35
- }).then(({ x: e, y: t }) => ({
39
+ }).then(({ x: e, y: c }) => ({
36
40
  position: "fixed",
37
- transform: `translate(${e}px, ${t}px)`,
41
+ transform: `translate(${e}px, ${c}px)`,
38
42
  top: 0,
39
43
  left: 0,
40
44
  "z-index": 10
41
45
  }));
42
46
  });
43
- return memo(() => memo(() => !!h())() && createComponent(Menu, {
44
- ref: l,
47
+ return memo(() => memo(() => !!g())() && createComponent(Menu, {
48
+ ref: f,
45
49
  class: "pointer-events-auto",
46
50
  get style() {
47
- return v() || "position: fixed";
51
+ return S() || "position: fixed";
48
52
  },
49
53
  get items() {
50
- return d();
54
+ return h();
51
55
  },
52
- onAction: () => g()
56
+ onAction: () => b()
53
57
  }));
54
58
  }],
55
59
  menus: (e) => [
56
60
  {
57
- label: "新增行 ↑",
58
- cb: () => e.commands.addRows(e.selected.end[1], [e.props.newRow(e.selected.end[1])])
61
+ label: () => [
62
+ "↑ 新增 ",
63
+ (() => {
64
+ var e = _tmpl$();
65
+ return addEventListener(e, "click", (e) => e.stopPropagation()), e.$$input = (e) => state.c1 = +e.currentTarget.value, effect(() => e.value = state.c1 = 1), e;
66
+ })(),
67
+ " 行"
68
+ ],
69
+ cb: () => e.commands.addRows(e.selected.end[1], Array(state.c1).fill(0).map(() => e.props.newRow(e.selected.end[1])))
59
70
  },
60
71
  {
61
- label: "新增行 ↓",
62
- cb: () => e.commands.addRows(e.selected.end[1], [e.props.newRow(e.selected.end[1])], !1)
72
+ label: () => [
73
+ "↓ 新增 ",
74
+ (() => {
75
+ var e = _tmpl$();
76
+ return addEventListener(e, "click", (e) => e.stopPropagation()), e.$$input = (e) => state.c2 = +e.currentTarget.value, effect(() => e.value = state.c2 = 1), e;
77
+ })(),
78
+ " 行"
79
+ ],
80
+ cb: () => e.commands.addRows(e.selected.end[1], Array(state.c2).fill(0).map(() => e.props.newRow(e.selected.end[1])), !1)
63
81
  },
64
82
  {
65
83
  label: "删除行",
66
- cb: () => e.commands.deleteRows(range(...((e) => [e[0], e[1] + 1])([e.selected.start[1], e.selected.end[1]].sort((e, t) => e - t))))
84
+ cb: () => e.commands.deleteRows(range(...((e) => [e[0], e[1] + 1])([e.selected.start[1], e.selected.end[1]].sort((e, c) => e - c))))
67
85
  }
68
86
  ],
69
87
  commands: (e) => ({
70
- rowEquals(t, n) {
71
- let r = e.props.rowKey;
72
- return t == n || r != null && t?.[r] == n?.[r];
88
+ rowEquals(c, l) {
89
+ let u = e.props.rowKey;
90
+ return c == l || u != null && c?.[u] == l?.[u];
73
91
  },
74
- rowIndexOf(t, n) {
75
- return t.findIndex((t) => e.commands.rowEquals(t, n));
92
+ rowIndexOf(c, l) {
93
+ return c.findIndex((c) => e.commands.rowEquals(c, l));
76
94
  },
77
- rowChange(t) {
78
- let n = [...e.rawProps.data || []], r = e.commands.rowIndexOf(n, t);
79
- r > -1 && (n[r] = t, e.props.onDataChange?.(n));
95
+ rowChange(c) {
96
+ let l = [...e.rawProps.data || []], u = e.commands.rowIndexOf(l, c);
97
+ u > -1 && (l[u] = c, e.props.onDataChange?.(l));
80
98
  },
81
- rowsChange(t) {
82
- let n = [...e.rawProps.data || []];
83
- t.forEach((t) => {
84
- let r = e.commands.rowIndexOf(n, t);
85
- r > -1 && (n[r] = t);
86
- }), e.props.onDataChange?.(n);
99
+ rowsChange(c) {
100
+ let l = [...e.rawProps.data || []];
101
+ c.forEach((c) => {
102
+ let u = e.commands.rowIndexOf(l, c);
103
+ u > -1 && (l[u] = c);
104
+ }), e.props.onDataChange?.(l);
87
105
  },
88
- addRows(t, n, r = !0) {
89
- addRows(e, t, n, r);
106
+ addRows(c, l, u = !0) {
107
+ addRows(e, c, l, u);
90
108
  },
91
- deleteRows(t) {
92
- let { rowKey: n, data: r } = e.props, i = [...e.rawProps.data || []], a = new Set(t.map((e) => r[e]));
93
- remove(i, (e) => a.has(e)), e.props?.onDataChange?.(i);
109
+ deleteRows(c) {
110
+ let { rowKey: l, data: u } = e.props, d = [...e.rawProps.data || []], f = new Set(c.map((e) => u[e]));
111
+ remove(d, (e) => f.has(e)), e.props?.onDataChange?.(d);
94
112
  },
95
- moveRows(n, r) {
96
- let { data: i } = e.props, a = n.map((e) => i[e]).filter((t) => t && !t?.[e.internal]);
97
- if (!a.length) return;
98
- let o = r >= 0 && r < i.length ? i[r] : null, { rowKey: s } = e.props, c = e.props.tree?.children || Symbol(), l = new Set(a.map((e) => e[s])), u = [];
99
- function d(e) {
100
- return e.reduce((e, t) => {
101
- if (l.has(t[s])) return u.push(t), e;
102
- if (Array.isArray(t[c]) && t[c].length) {
103
- let e = d(t[c]);
104
- t = e.length === t[c].length ? t : {
105
- ...t,
106
- [c]: e
113
+ moveRows(l, u) {
114
+ let { data: d } = e.props, f = l.map((e) => d[e]).filter((c) => c && !c?.[e.internal]);
115
+ if (!f.length) return;
116
+ let p = u >= 0 && u < d.length ? d[u] : null, { rowKey: m } = e.props, h = e.props.tree?.children || Symbol(), g = new Set(f.map((e) => e[m])), _ = [];
117
+ function v(e) {
118
+ return e.reduce((e, c) => {
119
+ if (g.has(c[m])) return _.push(c), e;
120
+ if (Array.isArray(c[h]) && c[h].length) {
121
+ let e = v(c[h]);
122
+ c = e.length === c[h].length ? c : {
123
+ ...c,
124
+ [h]: e
107
125
  };
108
126
  }
109
- return e.push(t), e;
127
+ return e.push(c), e;
110
128
  }, []);
111
129
  }
112
- let f = d([...e.rawProps.data || []]), p = findParent(f, (e) => e[s] === o?.[s])?.children ?? f, m = o ? p.findIndex((e) => e[s] === o[s]) : -1;
113
- if (m > -1 ? p.splice(m, 0, u) : p.push(...u), e.selected) {
114
- let t = Math.max(0, r - a.length);
115
- e.selected.start = [0, t], e.selected.end = [Infinity, t + u.length - 1];
130
+ let y = v([...e.rawProps.data || []]), b = findParent(y, (e) => e[m] === p?.[m])?.children ?? y, x = p ? b.findIndex((e) => e[m] === p[m]) : -1;
131
+ if (x > -1 ? b.splice(x, 0, _) : b.push(..._), e.selected) {
132
+ let c = Math.max(0, u - f.length);
133
+ e.selected.start = [0, c], e.selected.end = [Infinity, c + _.length - 1];
116
134
  }
117
- e.props?.onDataChange?.(f);
135
+ e.props?.onDataChange?.(y);
118
136
  }
119
137
  })
120
138
  };
121
- function addRows(e, t, n, r) {
122
- let { data: i } = e.props, o = (t) => {
123
- for (r = !1; --t >= 0 && i[t]?.[e.internal];);
124
- return t >= 0 ? i[t] : null;
125
- }, s = (t) => {
126
- for (r = !0; ++t < i.length && i[t]?.[e.internal];);
127
- return t < i.length ? i[t] : null;
128
- }, c = i[t]?.[e.internal] ? r ? o(t) || s(t) : s(t) || o(t) : i[t];
129
- c && batch(() => {
130
- t = e.commands.rowIndexOf(i, c), e.selected && (e.selected.start = [0, t + (r ? 0 : 1)], e.selected.end = [Infinity, t + n.length - 1 + (r ? 0 : 1)]);
139
+ function addRows(e, c, l, u) {
140
+ let { data: d } = e.props, f = (c) => {
141
+ for (u = !1; --c >= 0 && d[c]?.[e.internal];);
142
+ return c >= 0 ? d[c] : null;
143
+ }, p = (c) => {
144
+ for (u = !0; ++c < d.length && d[c]?.[e.internal];);
145
+ return c < d.length ? d[c] : null;
146
+ }, m = d[c]?.[e.internal] ? u ? f(c) || p(c) : p(c) || f(c) : d[c];
147
+ m && batch(() => {
148
+ c = e.commands.rowIndexOf(d, m), e.selected && (e.selected.start = [0, c + (u ? 0 : 1)], e.selected.end = [Infinity, c + l.length - 1 + (u ? 0 : 1)]);
131
149
  }), (() => {
132
- let t = [...e.rawProps.data || []], i = c ? e.commands.rowIndexOf(t, c) + (r ? 0 : 1) : t.length;
133
- t.splice(i, 0, ...n), e.props?.onDataChange?.(t);
150
+ let c = [...e.rawProps.data || []], d = m ? e.commands.rowIndexOf(c, m) + (u ? 0 : 1) : c.length;
151
+ c.splice(d, 0, ...l), e.props?.onDataChange?.(c);
134
152
  })(), delay(0).then(() => {
135
153
  e.scrollCellIfNeeded(e.selected.start[0], e.selected.start[1]);
136
154
  });
137
155
  }
156
+ delegateEvents(["input"]);
138
157
  export { MenuPlugin };
@@ -4,29 +4,41 @@ import { useSelector } from "../hooks/useSelector.js";
4
4
  import { createComponent, insert, template } from "solid-js/web";
5
5
  import { mergeProps as mergeProps$1 } from "solid-js";
6
6
  import { defaultsDeep } from "es-toolkit/compat";
7
- var _tmpl$ = /* @__PURE__ */ template("<label>");
7
+ var _tmpl$ = /* @__PURE__ */ template("<label class=\"flex items-center justify-center w-full h-full\">"), _tmpl$2 = /* @__PURE__ */ template("<label>");
8
8
  const RowSelectionPlugin = {
9
9
  name: "row-selection",
10
10
  priority: -Infinity,
11
- store: (c) => ({ rowSelectionCol: {
12
- [c.internal]: 1,
11
+ store: (l) => ({ rowSelectionCol: {
12
+ [l.internal]: 1,
13
13
  id: Symbol("row-selection"),
14
14
  fixed: "left",
15
15
  class: "row-selection",
16
16
  width: 45,
17
17
  resizable: !1,
18
+ name: solidComponent((e) => l.props.rowSelection?.multiple && (() => {
19
+ var e = _tmpl$();
20
+ return insert(e, createComponent(Checkbox, {
21
+ get value() {
22
+ return l.commands.rowSelector.isAll(l.props.data);
23
+ },
24
+ onChange: (e) => e ? l.commands.rowSelector.selectAll(l.props.data) : l.commands.rowSelector.clear(),
25
+ get disabled() {
26
+ return !l.props?.data?.length;
27
+ }
28
+ })), e;
29
+ })()),
18
30
  render: solidComponent((e) => (() => {
19
- var l = _tmpl$();
20
- return insert(l, createComponent(Checkbox, {
31
+ var u = _tmpl$2();
32
+ return insert(u, createComponent(Checkbox, {
21
33
  style: "position: absolute",
22
34
  get value() {
23
- return c.commands.rowSelector.has(e.data);
35
+ return l.commands.rowSelector.has(e.data);
24
36
  },
25
- onChange: (s) => s ? c.commands.rowSelector.add(e.data) : c.commands.rowSelector.del(e.data),
37
+ onChange: (c) => c ? l.commands.rowSelector.add(e.data) : l.commands.rowSelector.del(e.data),
26
38
  get disabled() {
27
- return !c.props?.rowSelection?.selectable?.(e.data);
39
+ return !l.props?.rowSelection?.selectable?.(e.data);
28
40
  }
29
- })), l;
41
+ })), u;
30
42
  })())
31
43
  } }),
32
44
  commands: (e) => ({ rowSelector: useSelector(mergeProps$1(() => ({ ...e.props?.rowSelection }))) }),
@@ -36,7 +48,7 @@ const RowSelectionPlugin = {
36
48
  multiple: !1,
37
49
  selectable: () => !0
38
50
  }),
39
- columns: ({ columns: e }, { store: s }) => s.props?.rowSelection?.enable ? [s.rowSelectionCol, ...e] : e
51
+ columns: ({ columns: e }, { store: c }) => c.props?.rowSelection?.enable ? [c.rowSelectionCol, ...e] : e
40
52
  }
41
53
  };
42
54
  export { RowSelectionPlugin };
@@ -1,4 +1,4 @@
1
- import { type Plugin } from '..';
1
+ import { type Plugin$0 } from '..';
2
2
  import { useControlled } from '../hooks/useControlled';
3
3
  export type SortOrder = 'asc' | 'desc';
4
4
  export interface SortKey {
@@ -37,4 +37,4 @@ declare module '../index' {
37
37
  sort: ReturnType<typeof useControlled<Exclude<TableProps['sort'], undefined>>>;
38
38
  }
39
39
  }
40
- export declare const SortPlugin: Plugin;
40
+ export declare const SortPlugin: Plugin$0;