intable 0.0.3 → 0.0.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (42) hide show
  1. package/README.md +2 -1
  2. package/dist/__uno.css +1 -1
  3. package/dist/chevron-right.js +3 -5
  4. package/dist/components/Columns.js +50 -84
  5. package/dist/components/DocTree.js +21 -29
  6. package/dist/components/Menu.js +81 -105
  7. package/dist/components/Popover.js +23 -31
  8. package/dist/components/Render.js +10 -11
  9. package/dist/components/Split.js +34 -46
  10. package/dist/components/Tree.js +38 -57
  11. package/dist/components/utils.js +4 -6
  12. package/dist/hooks/index.js +91 -128
  13. package/dist/hooks/useDir.js +22 -39
  14. package/dist/hooks/useSort.js +47 -70
  15. package/dist/hooks/useVirtualizer.js +43 -68
  16. package/dist/index.js +158 -213
  17. package/dist/loading.js +3 -5
  18. package/dist/plugins/CellMergePlugin.d.ts +0 -2
  19. package/dist/plugins/CellSelectionPlugin.js +77 -117
  20. package/dist/plugins/CommandPlugin.js +3 -6
  21. package/dist/plugins/CopyPastePlugin.js +24 -37
  22. package/dist/plugins/DiffPlugin.js +33 -45
  23. package/dist/plugins/DragPlugin.d.ts +2 -2
  24. package/dist/plugins/DragPlugin.js +29 -45
  25. package/dist/plugins/EditablePlugin.js +88 -139
  26. package/dist/plugins/ExpandPlugin.js +26 -30
  27. package/dist/plugins/HistoryPlugin.js +16 -21
  28. package/dist/plugins/MenuPlugin.js +51 -76
  29. package/dist/plugins/RenderPlugin/components.js +45 -63
  30. package/dist/plugins/RenderPlugin/index.js +29 -42
  31. package/dist/plugins/ResizePlugin.js +44 -80
  32. package/dist/plugins/RowGroupPlugin.js +57 -73
  33. package/dist/plugins/RowSelectionPlugin.js +31 -42
  34. package/dist/plugins/VirtualScrollPlugin.js +54 -79
  35. package/dist/plus.js +3 -5
  36. package/dist/style.css +2 -192
  37. package/dist/utils.js +44 -65
  38. package/dist/wc.js +11 -11
  39. package/dist/x.js +3 -5
  40. package/package.json +2 -1
  41. package/dist/plugins/DragColumnPlugin.d.ts +0 -2
  42. package/dist/plugins/DragColumnPlugin.js +0 -4
@@ -7,171 +7,120 @@ import { createMutable } from "solid-js/store";
7
7
  import { combineProps } from "@solid-primitives/props";
8
8
  import { delay } from "es-toolkit";
9
9
  import { createAsyncMemo } from "@solid-primitives/memo";
10
- var _tmpl$ = /* @__PURE__ */ template(`<input style=position:absolute;margin-top:1em;width:0;height:0;pointer-events:none;opacity:0>`), _tmpl$2 = /* @__PURE__ */ template(`<div class=in-cell-edit-wrapper>`), _tmpl$3 = /* @__PURE__ */ template(`<input>`), _tmpl$4 = /* @__PURE__ */ template(`<select>`), _tmpl$5 = /* @__PURE__ */ template(`<option>`), _tmpl$6 = /* @__PURE__ */ template(`<label class="h-full flex items-center">`);
10
+ var _tmpl$ = /* @__PURE__ */ template("<input style=position:absolute;margin-top:1em;width:0;height:0;pointer-events:none;opacity:0>"), _tmpl$2 = /* @__PURE__ */ template("<div class=in-cell-edit-wrapper>"), _tmpl$3 = /* @__PURE__ */ template("<input>"), _tmpl$4 = /* @__PURE__ */ template("<select>"), _tmpl$5 = /* @__PURE__ */ template("<option>"), _tmpl$6 = /* @__PURE__ */ template("<label class=\"h-full flex items-center\">");
11
11
  const EditablePlugin = {
12
12
  store: () => ({ editors: { ...editors } }),
13
- rewriteProps: { Td: ({ Td }, { store }) => (o) => {
14
- let el;
15
- const { props } = useContext(Ctx);
16
- const editable = createMemo(() => !!o.col.editable && !o.data[store.internal] && !o.col[store.internal]);
17
- const [editing, setEditing] = createSignal(false);
18
- let eventKey = "";
19
- const selected = createMemo(() => (([x, y]) => o.x == x && o.y == y)(store.selected.start || []));
20
- const preEdit = createMemo(() => selected() && editable() && !editing());
21
- const editorState = createAsyncMemo(async () => {
22
- if (editing()) {
23
- let canceled = false;
24
- const editor = ((editor$1) => typeof editor$1 == "string" ? store.editors[editor$1] : editor$1)(o.col.editor || "text");
25
- const opt = {
26
- props: o.col.editorProps,
27
- col: o.col,
28
- eventKey,
29
- data: o.data,
30
- value: o.data[o.col.id],
31
- ok: () => setEditing(false),
32
- cancel: () => (canceled = true, setEditing(false))
33
- };
34
- const ret = editor(opt);
35
- onCleanup(() => {
36
- if (!canceled && ret.getValue() !== o.data[o.col.id]) {
37
- const arr = [...props.data];
38
- arr[o.y] = {
39
- ...arr[o.y],
40
- [o.col.id]: ret.getValue()
41
- };
42
- props.onDataChange?.(arr);
13
+ rewriteProps: { Td: ({ Td: i }, { store: O }) => (k) => {
14
+ let A, { props: N } = useContext(Ctx), P = createMemo(() => !!k.col.editable && !k.data[O.internal] && !k.col[O.internal]), [I, L] = createSignal(!1), H = "", U = createMemo(() => (([i, O]) => k.x == i && k.y == O)(O.selected.start || [])), W = createMemo(() => U() && P() && !I()), G = createAsyncMemo(async () => {
15
+ if (I()) {
16
+ let i = !1, A = ((i) => typeof i == "string" ? O.editors[i] : i)(k.col.editor || "text"), j = {
17
+ props: k.col.editorProps,
18
+ col: k.col,
19
+ eventKey: H,
20
+ data: k.data,
21
+ value: k.data[k.col.id],
22
+ ok: () => L(!1),
23
+ cancel: () => (i = !0, L(!1))
24
+ }, M = A(j);
25
+ return onCleanup(() => {
26
+ if (!i && M.getValue() !== k.data[k.col.id]) {
27
+ let i = [...N.data];
28
+ i[k.y] = {
29
+ ...i[k.y],
30
+ [k.col.id]: M.getValue()
31
+ }, N.onDataChange?.(i);
43
32
  }
44
- ret.destroy();
45
- });
46
- return [opt, ret];
33
+ M.destroy();
34
+ }), [j, M];
47
35
  }
48
36
  });
49
37
  createEffect(() => {
50
- editorState()?.[1]?.focus?.();
51
- });
52
- createEffect(() => {
53
- if (editing()) {
54
- const sss = createMemo(() => JSON.stringify(store.selected));
55
- createEffect(on(sss, () => setEditing(false), { defer: true }));
38
+ G()?.[1]?.focus?.();
39
+ }), createEffect(() => {
40
+ if (I()) {
41
+ let i = createMemo(() => JSON.stringify(O.selected));
42
+ createEffect(on(i, () => L(!1), { defer: !0 }));
56
43
  }
57
44
  });
58
- let input;
59
- const size = createMutable({
45
+ let K, q = createMutable({
60
46
  w: 0,
61
47
  h: 0
62
48
  });
63
- createComputed(() => editing() && (size.w = el.getBoundingClientRect().width, size.h = el.getBoundingClientRect().height));
64
- o = combineProps(o, {
65
- ref: (v) => el = v,
49
+ return createComputed(() => I() && (q.w = A.getBoundingClientRect().width, q.h = A.getBoundingClientRect().height)), k = combineProps(k, {
50
+ ref: (i) => A = i,
66
51
  get class() {
67
- return editing() ? "is-editing" : "";
52
+ return I() ? "is-editing" : "";
68
53
  },
69
54
  get style() {
70
- return editing() ? `width: ${size.w}px; height: ${size.h}px; padding: 0; ` : "";
55
+ return I() ? `width: ${q.w}px; height: ${q.h}px; padding: 0; ` : "";
71
56
  },
72
- onClick: () => input?.focus?.(),
73
- onDblClick: () => setEditing(editable()),
74
- onKeyDown: (e) => e.key == "Escape" && editorState()?.[0].cancel()
75
- });
76
- return createComponent(Td, mergeProps(o, { get children() {
77
- return [memo(() => memo(() => !!preEdit())() && (() => {
78
- var _el$ = _tmpl$();
79
- _el$.addEventListener("compositionend", () => {
80
- setEditing(true);
81
- });
82
- _el$.$$input = (e) => {
83
- eventKey = e.target.value;
84
- setEditing(!e.isComposing);
85
- };
86
- _el$.$$keydown = (e) => {
87
- e.key == " " && e.preventDefault();
88
- };
89
- use((e) => {
90
- input = e;
91
- delay(0).then(() => e.focus({ preventScroll: true }));
92
- }, _el$);
93
- return _el$;
94
- })()), memo(() => memo(() => !!editorState()?.[1]?.el)() ? (() => {
95
- var _el$2 = _tmpl$2();
96
- insert(_el$2, () => editorState()?.[1]?.el);
97
- return _el$2;
98
- })() : o.children)];
57
+ onClick: () => K?.focus?.(),
58
+ onDblClick: () => L(P()),
59
+ onKeyDown: (i) => i.key == "Escape" && G()?.[0].cancel()
60
+ }), createComponent(i, mergeProps(k, { get children() {
61
+ return [memo(() => memo(() => !!W())() && (() => {
62
+ var i = _tmpl$();
63
+ return i.addEventListener("compositionend", () => {
64
+ L(!0);
65
+ }), i.$$input = (i) => {
66
+ H = i.target.value, L(!i.isComposing);
67
+ }, i.$$keydown = (i) => {
68
+ i.key == " " && i.preventDefault();
69
+ }, use((i) => {
70
+ K = i, delay(0).then(() => i.focus({ preventScroll: !0 }));
71
+ }, i), i;
72
+ })()), memo(() => memo(() => !!G()?.[1]?.el)() ? (() => {
73
+ var i = _tmpl$2();
74
+ return insert(i, () => G()?.[1]?.el), i;
75
+ })() : k.children)];
99
76
  } }));
100
77
  } }
101
78
  };
102
- var createEditor = (Comp, extra, isSelector) => ({ eventKey, value, col, ok, cancel, props }) => createRoot((destroy) => {
103
- const [v, setV] = createSignal(eventKey || value);
104
- let el;
105
- createComponent(Comp, mergeProps({
106
- ref: (e) => el = e,
107
- "class": "relative block px-2 size-full z-9 box-border resize-none outline-0",
79
+ var createEditor = (i, k, A) => ({ eventKey: j, value: N, col: P, ok: F, cancel: I, props: L }) => createRoot((R) => {
80
+ let [z, B] = createSignal(j || N), V;
81
+ return createComponent(i, mergeProps({
82
+ ref: (i) => V = i,
83
+ class: "relative block px-2 size-full z-9 box-border resize-none outline-0",
108
84
  get value() {
109
- return v();
85
+ return z();
110
86
  },
111
- onInput: (e) => setV(e instanceof Event ? e.target.value : e),
112
- onChange: (e) => (setV(e instanceof Event ? e.target.value : e), isSelector && ok()),
113
- "on:pointerdown": (e) => e.stopPropagation(),
114
- "on:keydown": (e) => {
115
- e.stopPropagation();
116
- e.key == "Enter" && ok();
117
- e.key == "Escape" && cancel();
87
+ onInput: (i) => B(i instanceof Event ? i.target.value : i),
88
+ onChange: (i) => (B(i instanceof Event ? i.target.value : i), A && F()),
89
+ "on:pointerdown": (i) => i.stopPropagation(),
90
+ "on:keydown": (i) => {
91
+ i.stopPropagation(), i.key == "Enter" && F(), i.key == "Escape" && I();
118
92
  },
119
93
  get options() {
120
- return memo(() => !!col.enum)() ? resolveOptions(col.enum ?? []) : void 0;
94
+ return memo(() => !!P.enum)() ? resolveOptions(P.enum ?? []) : void 0;
121
95
  }
122
- }, extra, props));
123
- return {
124
- el,
125
- getValue: v,
126
- focus: () => el.focus(),
127
- destroy
96
+ }, k, L)), {
97
+ el: V,
98
+ getValue: z,
99
+ focus: () => V.focus(),
100
+ destroy: R
128
101
  };
129
- });
130
- var Input = (o) => (() => {
131
- var _el$3 = _tmpl$3();
132
- spread(_el$3, o, false, false);
133
- return _el$3;
134
- })();
135
- var text = createEditor(Input);
136
- var number = createEditor(Input, { type: "number" });
137
- var range$1 = createEditor(Input, { type: "range" });
138
- var color = createEditor(Input, { type: "color" });
139
- var tel = createEditor(Input, { type: "tel" });
140
- var password = createEditor(Input, { type: "password" });
141
- var date = createEditor(Input, { type: "date" }, true);
142
- var time = createEditor(Input, { type: "time" }, true);
143
- var datetime = createEditor(Input, { type: "datetime-local" }, true);
144
- var select = createEditor((o) => (() => {
145
- var _el$4 = _tmpl$4();
146
- spread(_el$4, o, false, true);
147
- insert(_el$4, () => o.options?.map((e) => (() => {
148
- var _el$5 = _tmpl$5();
149
- insert(_el$5, () => e.label);
150
- effect(() => _el$5.value = e.value);
151
- return _el$5;
152
- })()));
153
- return _el$4;
154
- })(), {}, true);
155
- var file = createEditor((o) => {
156
- const onAdd = () => chooseFile({ multiple: true }).then((files) => o.onChange([...o.value || [], ...files.map((e) => ({
157
- name: e.name,
158
- size: e.size
159
- }))]));
160
- return createComponent(Files, mergeProps(o, {
161
- "class": "relative z-9 outline-2 outline-blue min-h-a! h-a! p-1 bg-#fff",
162
- onAdd
163
- }));
164
- });
165
- var checkbox = createEditor((o) => (() => {
166
- var _el$6 = _tmpl$6();
167
- var _ref$ = o.ref;
168
- typeof _ref$ === "function" ? use(_ref$, _el$6) : o.ref = _el$6;
169
- insert(_el$6, createComponent(Checkbox, mergeProps(o, {
102
+ }), Input = (i) => (() => {
103
+ var O = _tmpl$3();
104
+ return spread(O, i, !1, !1), O;
105
+ })(), text = createEditor(Input), number = createEditor(Input, { type: "number" }), range$1 = createEditor(Input, { type: "range" }), color = createEditor(Input, { type: "color" }), tel = createEditor(Input, { type: "tel" }), password = createEditor(Input, { type: "password" }), date = createEditor(Input, { type: "date" }, !0), time = createEditor(Input, { type: "time" }, !0), datetime = createEditor(Input, { type: "datetime-local" }, !0), select = createEditor((i) => (() => {
106
+ var O = _tmpl$4();
107
+ return spread(O, i, !1, !0), insert(O, () => i.options?.map((i) => (() => {
108
+ var O = _tmpl$5();
109
+ return insert(O, () => i.label), effect(() => O.value = i.value), O;
110
+ })())), O;
111
+ })(), {}, !0), file = createEditor((O) => createComponent(Files, mergeProps(O, {
112
+ class: "relative z-9 outline-2 outline-blue min-h-a! h-a! p-1 bg-#fff",
113
+ onAdd: () => chooseFile({ multiple: !0 }).then((i) => O.onChange([...O.value || [], ...i.map((i) => ({
114
+ name: i.name,
115
+ size: i.size
116
+ }))]))
117
+ }))), checkbox = createEditor((i) => (() => {
118
+ var O = _tmpl$6(), A = i.ref;
119
+ return typeof A == "function" ? use(A, O) : i.ref = O, insert(O, createComponent(Checkbox, mergeProps(i, {
170
120
  ref: () => {},
171
121
  onInput: () => {},
172
- "class": "mx-3!"
173
- })));
174
- return _el$6;
122
+ class: "mx-3!"
123
+ }))), O;
175
124
  })());
176
125
  const editors = {
177
126
  text,
@@ -5,52 +5,48 @@ import { createComponent, effect, insert, memo, mergeProps, setAttribute, templa
5
5
  import { createMemo, useContext } from "solid-js";
6
6
  import { unwrap } from "solid-js/store";
7
7
  import { remove } from "es-toolkit";
8
- var _tmpl$ = /* @__PURE__ */ template(`<td style=width:100%>`), _tmpl$2 = /* @__PURE__ */ template(`<div style=display:flex;align-items:center;width:100%;height:100%;opacity:.4>`);
8
+ var _tmpl$ = /* @__PURE__ */ template("<td style=width:100%>"), _tmpl$2 = /* @__PURE__ */ template("<div style=display:flex;align-items:center;width:100%;height:100%;opacity:.4>");
9
9
  const ExpandPlugin = {
10
- store: (store) => ({
10
+ store: (e) => ({
11
11
  expands: [],
12
12
  expandCol: {
13
13
  id: Symbol("expand"),
14
14
  fixed: "left",
15
15
  width: 45,
16
- render: solidComponent((o) => createComponent(ArrowCell, {
17
- store,
16
+ render: solidComponent((h) => createComponent(ArrowCell, {
17
+ store: e,
18
18
  get data() {
19
- return o.data;
19
+ return h.data;
20
20
  }
21
21
  })),
22
- props: (o) => ({ onClick: () => store.toggleExpand(o.data) }),
23
- [store.internal]: 1
22
+ props: (h) => ({ onClick: () => e.toggleExpand(h.data) }),
23
+ [e.internal]: 1
24
24
  },
25
- isExpand: (data) => !!store.expands.find((e) => unwrap(e) == unwrap(data)),
26
- toggleExpand: (data) => store.isExpand(data) ? remove(store.expands, (e) => unwrap(e) == unwrap(data)) : store.expands.push(unwrap(data))
25
+ isExpand: (h) => !!e.expands.find((e) => unwrap(e) == unwrap(h)),
26
+ toggleExpand: (h) => e.isExpand(h) ? remove(e.expands, (e) => unwrap(e) == unwrap(h)) : e.expands.push(unwrap(h))
27
27
  }),
28
28
  rewriteProps: {
29
- columns: ({ columns }, { store }) => [store.expandCol, ...columns],
30
- Tr: ({ Tr }, { store }) => (o) => {
31
- const { props } = useContext(Ctx);
32
- if (!o.data?.[store.expandCol.id]) return createComponent(Tr, o);
33
- return createComponent(Tr, mergeProps(o, { get children() {
34
- var _el$ = _tmpl$();
35
- insert(_el$, (() => {
36
- var _c$ = memo(() => !!props.expand?.render);
37
- return () => _c$() && renderComponent(props.expand.render, o, props.renderer);
38
- })());
39
- effect(() => setAttribute(_el$, "colspan", props.columns?.length));
40
- return _el$;
41
- } }));
29
+ columns: ({ columns: e }, { store: h }) => [h.expandCol, ...e],
30
+ Tr: ({ Tr: h }, { store: g }) => (_) => {
31
+ let { props: v } = useContext(Ctx);
32
+ return _.data?.[g.expandCol.id] ? createComponent(h, mergeProps(_, { get children() {
33
+ var h = _tmpl$();
34
+ return insert(h, (() => {
35
+ var h = memo(() => !!v.expand?.render);
36
+ return () => h() && renderComponent(v.expand.render, _, v.renderer);
37
+ })()), effect(() => setAttribute(h, "colspan", v.columns?.length)), h;
38
+ } })) : createComponent(h, _);
42
39
  },
43
- data: ({ data }, { store }) => store.expands.length ? data?.flatMap((e) => store.isExpand(e) ? [e, { [store.expandCol.id]: 1 }] : e) : data
40
+ data: ({ data: e }, { store: h }) => h.expands.length ? e?.flatMap((e) => h.isExpand(e) ? [e, { [h.expandCol.id]: 1 }] : e) : e
44
41
  }
45
42
  };
46
- var ArrowCell = (_props) => {
47
- const show = createMemo(() => _props.store.isExpand(_props.data));
43
+ var ArrowCell = (e) => {
44
+ let h = createMemo(() => e.store.isExpand(e.data));
48
45
  return (() => {
49
- var _el$2 = _tmpl$2();
50
- insert(_el$2, createComponent(chevron_right_default, { get style() {
51
- return `transform: rotate(${show() ? 90 : 0}deg);`;
52
- } }));
53
- return _el$2;
46
+ var e = _tmpl$2();
47
+ return insert(e, createComponent(chevron_right_default, { get style() {
48
+ return `transform: rotate(${h() ? 90 : 0}deg);`;
49
+ } })), e;
54
50
  })();
55
51
  };
56
52
  export { ExpandPlugin };
@@ -5,31 +5,26 @@ import { unwrap } from "solid-js/store";
5
5
  import { combineProps } from "@solid-primitives/props";
6
6
  import { captureStoreUpdates } from "@solid-primitives/deep";
7
7
  const HistoryPlugin = {
8
- store: (store) => {
9
- const getDelta = createMemo(() => captureStoreUpdates(store.rawProps.data || []));
10
- let clonedState;
8
+ store: (r) => {
9
+ let i = createMemo(() => captureStoreUpdates(r.rawProps.data || [])), s;
11
10
  return { history: useHistory([() => {
12
- const delta = getDelta()();
13
- if (!delta.length) return;
14
- for (const { path, value } of delta) if (path.length == 0) clonedState = structuredClone(unwrap(value));
15
- else {
16
- const target = [...clonedState];
17
- path.reduce((o, k, i) => o[k] = i < path.length - 1 ? Array.isArray(o[k]) ? [...o[k]] : { ...o[k] } : structuredClone(unwrap(value)), target);
18
- clonedState = target;
11
+ let e = i()();
12
+ if (e.length) {
13
+ for (let { path: r, value: i } of e) if (r.length == 0) s = structuredClone(unwrap(i));
14
+ else {
15
+ let e = [...s];
16
+ r.reduce((e, a, s) => e[a] = s < r.length - 1 ? Array.isArray(e[a]) ? [...e[a]] : { ...e[a] } : structuredClone(unwrap(i)), e), s = e;
17
+ }
18
+ return s;
19
19
  }
20
- return clonedState;
21
- }, (v) => store.props.onDataChange?.(v)]) };
20
+ }, (e) => r.props.onDataChange?.(e)]) };
22
21
  },
23
22
  rewriteProps: {
24
- Table: ({ Table }, { store }) => (o) => {
25
- useTinykeys(() => store.table, {
26
- "Control+Z": () => store.history.undo(),
27
- "Control+Y": () => store.history.redo()
28
- });
29
- o = combineProps({ tabindex: -1 }, o);
30
- return createComponent(Table, o);
31
- },
32
- tdProps: ({ tdProps }, { store }) => (o) => combineProps(tdProps?.(o) || {}, {})
23
+ Table: ({ Table: e }, { store: a }) => (o) => (useTinykeys(() => a.table, {
24
+ "Control+Z": () => a.history.undo(),
25
+ "Control+Y": () => a.history.redo()
26
+ }), o = combineProps({ tabindex: -1 }, o), createComponent(e, o)),
27
+ tdProps: ({ tdProps: e }, { store: r }) => (r) => combineProps(e?.(r) || {}, {})
33
28
  }
34
29
  };
35
30
  export { HistoryPlugin };
@@ -8,124 +8,99 @@ import { range, remove } from "es-toolkit";
8
8
  import { createEventListener } from "@solid-primitives/event-listener";
9
9
  import { autoPlacement, computePosition } from "@floating-ui/dom";
10
10
  const MenuPlugin = {
11
- store: (store) => ({}),
12
- rewriteProps: { Table: ({ Table }, { store }) => (o) => {
13
- const [menuEl, setMenuEl] = createSignal();
14
- const _menus = mapArray(() => store.plugins || [], (plugin) => createMemo(() => plugin.menus?.(store)));
15
- const menus = createMemo(() => _menus().flatMap((e) => e() || []));
16
- const [pos, setPos] = createSignal();
17
- function onContextMenu(e) {
18
- e.preventDefault();
19
- setPos({
11
+ store: (e) => ({}),
12
+ rewriteProps: { Table: ({ Table: e }, { store: d }) => (m) => {
13
+ let [h, g] = createSignal(), _ = mapArray(() => d.plugins || [], (e) => createMemo(() => e.menus?.(d))), v = createMemo(() => _().flatMap((e) => e() || [])), [y, b] = createSignal();
14
+ function x(e) {
15
+ e.preventDefault(), b({
20
16
  x: e.x,
21
17
  y: e.y
22
18
  });
23
19
  }
24
20
  createEventListener(document, "pointerdown", (e) => {
25
- menuEl()?.contains(e.target) || setPos();
21
+ h()?.contains(e.target) || b();
26
22
  });
27
- const style$1 = useMemoAsync(() => {
28
- const mel = menuEl();
29
- if (!mel) return;
30
- return computePosition({ getBoundingClientRect: () => DOMRect.fromRect(pos()) }, mel, {
23
+ let S = useMemoAsync(() => {
24
+ let e = h();
25
+ if (e) return computePosition({ getBoundingClientRect: () => DOMRect.fromRect(y()) }, e, {
31
26
  strategy: "fixed",
32
27
  placement: "top-start",
33
28
  middleware: [autoPlacement({
34
29
  boundary: document.body,
35
30
  alignment: "start"
36
31
  })]
37
- }).then(({ x, y }) => ({
32
+ }).then(({ x: e, y: o }) => ({
38
33
  position: "fixed",
39
- transform: `translate(${x}px, ${y}px)`,
34
+ transform: `translate(${e}px, ${o}px)`,
40
35
  top: 0,
41
36
  left: 0,
42
37
  "z-index": 10
43
38
  }));
44
39
  });
45
- o = combineProps({
40
+ return m = combineProps({
46
41
  tabindex: -1,
47
- onContextMenu
48
- }, o);
49
- return createComponent(Table, mergeProps(o, { get children() {
50
- return [memo(() => memo(() => !!pos())() && createComponent(Menu, {
51
- ref: setMenuEl,
42
+ onContextMenu: x
43
+ }, m), createComponent(e, mergeProps(m, { get children() {
44
+ return [memo(() => memo(() => !!y())() && createComponent(Menu, {
45
+ ref: g,
52
46
  get style() {
53
- return style$1() || "position: absolute";
47
+ return S() || "position: absolute";
54
48
  },
55
49
  get items() {
56
- return menus();
50
+ return v();
57
51
  },
58
- onAction: () => setPos()
59
- })), memo(() => o.children)];
52
+ onAction: () => b()
53
+ })), memo(() => m.children)];
60
54
  } }));
61
55
  } },
62
- menus: (store) => [
56
+ menus: (e) => [
63
57
  {
64
58
  label: "新增行 ↑",
65
- disabled: () => true,
66
- cb: () => store.commands.addRows(store.selected.end[1], [store.props.newRow(store.selected.end[1])])
59
+ disabled: () => !0,
60
+ cb: () => e.commands.addRows(e.selected.end[1], [e.props.newRow(e.selected.end[1])])
67
61
  },
68
62
  {
69
63
  label: "新增行 ↓",
70
- cb: () => store.commands.addRows(store.selected.end[1], [store.props.newRow(store.selected.end[1])], false)
64
+ cb: () => e.commands.addRows(e.selected.end[1], [e.props.newRow(e.selected.end[1])], !1)
71
65
  },
72
66
  {
73
67
  label: "删除行",
74
- cb: () => store.commands.deleteRows(range(...((e) => [e[0], e[1] + 1])([store.selected.start[1], store.selected.end[1]].sort((a, b) => a - b))))
68
+ cb: () => e.commands.deleteRows(range(...((e) => [e[0], e[1] + 1])([e.selected.start[1], e.selected.end[1]].sort((e, o) => e - o))))
75
69
  }
76
70
  ],
77
- commands: (store) => ({
78
- rowEquals(a, b) {
79
- return a == b;
71
+ commands: (o) => ({
72
+ rowEquals(e, o) {
73
+ return e == o;
80
74
  },
81
- rowIndexOf(data, row) {
82
- return data.findIndex((e) => store.commands.rowEquals(e, row));
75
+ rowIndexOf(e, s) {
76
+ return e.findIndex((e) => o.commands.rowEquals(e, s));
83
77
  },
84
- rowChange(row, i) {
85
- const data = [...store.rawProps.data || []];
86
- i = i != null ? data.findIndex((ee) => ee == store.props.data[i]) : store.commands.rowIndexOf(data, row);
87
- if (i > -1) {
88
- data[i] = row;
89
- store.props.onDataChange?.(data);
90
- }
78
+ rowChange(e, s) {
79
+ let c = [...o.rawProps.data || []];
80
+ s = s == null ? o.commands.rowIndexOf(c, e) : c.findIndex((e) => e == o.props.data[s]), s > -1 && (c[s] = e, o.props.onDataChange?.(c));
91
81
  },
92
- addRows(i, rows, before = true) {
93
- addRows(store, i, rows, before);
82
+ addRows(e, s, c = !0) {
83
+ addRows(o, e, s, c);
94
84
  },
95
- deleteRows(ii) {
96
- const { rowKey, data } = store.props;
97
- const val = [...store.rawProps.data || []];
98
- const ids = new Set(ii.map((i) => data[i]));
99
- log([...ids]);
100
- remove(val, (e) => ids.has(e));
101
- store.props?.onDataChange?.(val);
85
+ deleteRows(s) {
86
+ let { rowKey: c, data: l } = o.props, u = [...o.rawProps.data || []], d = new Set(s.map((e) => l[e]));
87
+ log([...d]), remove(u, (e) => d.has(e)), o.props?.onDataChange?.(u);
102
88
  }
103
89
  })
104
90
  };
105
- function addRows(store, i, rows, before) {
106
- const { data } = store.props;
107
- const prev = (i$1) => {
108
- before = false;
109
- while (--i$1 >= 0 && data[i$1]?.[store.internal]);
110
- return i$1 >= 0 ? data[i$1] : null;
111
- };
112
- const next = (i$1) => {
113
- before = true;
114
- while (++i$1 < data.length && data[i$1]?.[store.internal]);
115
- return i$1 < data.length ? data[i$1] : null;
116
- };
117
- const anchor = !data[i]?.[store.internal] ? data[i] : before ? prev(i) || next(i) : next(i) || prev(i);
118
- if (anchor) batch(() => {
119
- i = store.commands.rowIndexOf(data, anchor);
120
- if (!store.selected) return;
121
- store.selected.start = [0, i + (before ? 0 : 1)];
122
- store.selected.end = [Infinity, i + rows.length - 1 + (before ? 0 : 1)];
123
- });
124
- (() => {
125
- const data$1 = [...store.rawProps.data || []];
126
- const i$1 = anchor ? store.commands.rowIndexOf(data$1, anchor) + (before ? 0 : 1) : data$1.length;
127
- data$1.splice(i$1, 0, ...rows);
128
- store.props?.onDataChange?.(data$1);
91
+ function addRows(e, o, s, c) {
92
+ let { data: l } = e.props, u = (o) => {
93
+ for (c = !1; --o >= 0 && l[o]?.[e.internal];);
94
+ return o >= 0 ? l[o] : null;
95
+ }, f = (o) => {
96
+ for (c = !0; ++o < l.length && l[o]?.[e.internal];);
97
+ return o < l.length ? l[o] : null;
98
+ }, p = l[o]?.[e.internal] ? c ? u(o) || f(o) : f(o) || u(o) : l[o];
99
+ p && batch(() => {
100
+ o = e.commands.rowIndexOf(l, p), e.selected && (e.selected.start = [0, o + (c ? 0 : 1)], e.selected.end = [Infinity, o + s.length - 1 + (c ? 0 : 1)]);
101
+ }), (() => {
102
+ let o = [...e.rawProps.data || []], l = p ? e.commands.rowIndexOf(o, p) + (c ? 0 : 1) : o.length;
103
+ o.splice(l, 0, ...s), e.props?.onDataChange?.(o);
129
104
  })();
130
105
  }
131
106
  export { MenuPlugin };