intable 0.0.3 → 0.0.5

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 (49) 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.d.ts +1 -0
  13. package/dist/hooks/index.js +103 -130
  14. package/dist/hooks/useDir.js +22 -39
  15. package/dist/hooks/useSelector.d.ts +16 -0
  16. package/dist/hooks/useSelector.js +35 -0
  17. package/dist/hooks/useSort.js +47 -70
  18. package/dist/hooks/useVirtualizer.js +43 -68
  19. package/dist/index.d.ts +11 -4
  20. package/dist/index.js +194 -218
  21. package/dist/loading.js +3 -5
  22. package/dist/plugins/CellMergePlugin.d.ts +0 -2
  23. package/dist/plugins/CellSelectionPlugin.js +78 -117
  24. package/dist/plugins/CommandPlugin.js +11 -8
  25. package/dist/plugins/CopyPastePlugin.js +25 -37
  26. package/dist/plugins/DiffPlugin.js +33 -45
  27. package/dist/plugins/DragPlugin.d.ts +2 -2
  28. package/dist/plugins/DragPlugin.js +29 -45
  29. package/dist/plugins/EditablePlugin.js +89 -139
  30. package/dist/plugins/ExpandPlugin.d.ts +3 -5
  31. package/dist/plugins/ExpandPlugin.js +41 -47
  32. package/dist/plugins/HistoryPlugin.js +16 -21
  33. package/dist/plugins/MenuPlugin.js +52 -76
  34. package/dist/plugins/RenderPlugin/components.js +45 -63
  35. package/dist/plugins/RenderPlugin/index.js +30 -42
  36. package/dist/plugins/ResizePlugin.js +45 -80
  37. package/dist/plugins/RowGroupPlugin.js +58 -74
  38. package/dist/plugins/RowSelectionPlugin.d.ts +3 -15
  39. package/dist/plugins/RowSelectionPlugin.js +21 -48
  40. package/dist/plugins/VirtualScrollPlugin.js +54 -79
  41. package/dist/plus.js +3 -5
  42. package/dist/style.css +2 -192
  43. package/dist/theme/element-plus.scss +5 -0
  44. package/dist/utils.js +44 -65
  45. package/dist/wc.js +10 -13
  46. package/dist/x.js +3 -5
  47. package/package.json +2 -1
  48. package/dist/plugins/DragColumnPlugin.d.ts +0 -2
  49. package/dist/plugins/DragColumnPlugin.js +0 -4
@@ -0,0 +1,16 @@
1
+ interface UseSelectorOpt<T> {
2
+ value?: T;
3
+ onChange?: (v: T) => void;
4
+ multiple?: boolean;
5
+ selectable?: (v: any) => boolean;
6
+ }
7
+ export declare function useSelector<T = any>(opt: UseSelectorOpt<T>): {
8
+ clear: () => void;
9
+ set: (v: T) => void;
10
+ has: (key: T | Set<T>) => boolean;
11
+ add: (v: T) => void;
12
+ del: (v: T) => void;
13
+ toggle: (v: T) => void;
14
+ readonly value: any;
15
+ };
16
+ export {};
@@ -0,0 +1,35 @@
1
+ import { createMemo, createSelector, createSignal } from "solid-js";
2
+ function useSelector(r) {
3
+ let { value: i, onChange: a, multiple: o = !1, selectable: s } = r, [c, l] = createSignal((() => o ? i ? new Set(Array.isArray(i) ? i : [i]) : /* @__PURE__ */ new Set() : i)()), u = (e) => s ? s(e) : !0, d = () => {
4
+ o ? (l(/* @__PURE__ */ new Set()), a?.([])) : (l(void 0), a?.(void 0));
5
+ }, f = (e) => {
6
+ if (u(e)) if (o) {
7
+ let n = new Set(Array.isArray(e) ? e : [e]);
8
+ l(n), a?.(Array.from(n));
9
+ } else l(e), a?.(e);
10
+ }, p = createSelector(c, (e, n) => o ? n.has(e) : e === n), m = (e) => {
11
+ if (u(e)) if (o) {
12
+ let n = new Set(c());
13
+ n.add(e), l(n), a?.(Array.from(n));
14
+ } else l(e), a?.(e);
15
+ }, h = (e) => {
16
+ if (o) {
17
+ let n = new Set(c());
18
+ n.delete(e), l(n), a?.(Array.from(n));
19
+ } else c() === e && (l(void 0), a?.(void 0));
20
+ }, g = (e) => {
21
+ p(e) ? h(e) : m(e);
22
+ }, _ = createMemo(() => o ? Array.from(c()) : c());
23
+ return {
24
+ clear: d,
25
+ set: f,
26
+ has: p,
27
+ add: m,
28
+ del: h,
29
+ toggle: g,
30
+ get value() {
31
+ return _();
32
+ }
33
+ };
34
+ }
35
+ export { useSelector };
@@ -3,104 +3,81 @@ import { Portal, createComponent, memo, mergeProps, spread, template } from "sol
3
3
  import { createMutable, reconcile } from "solid-js/store";
4
4
  import { createEventListenerMap } from "@solid-primitives/event-listener";
5
5
  import { access } from "@solid-primitives/utils";
6
- var _tmpl$ = /* @__PURE__ */ template(`<div>`);
7
- const useSort = (el, opt) => {
8
- opt = mergeProps({ enable: true }, opt);
9
- let count = 0;
10
- createEventListenerMap(() => opt.enable ? access(el) : void 0, {
11
- async pointerdown(e) {
12
- const _c = count;
13
- const drag = await findAsync(e.composedPath(), (e$1) => e$1 instanceof HTMLElement && opt.draggable(e$1));
14
- if (_c != count) return;
15
- if (!drag) return;
16
- e.stopPropagation();
17
- state.drag = drag;
18
- state.drag?.setAttribute("draggable", "true");
6
+ var _tmpl$ = /* @__PURE__ */ template("<div>");
7
+ const useSort = (l, f) => {
8
+ f = mergeProps({ enable: !0 }, f);
9
+ let p = 0;
10
+ createEventListenerMap(() => f.enable ? access(l) : void 0, {
11
+ async pointerdown(i) {
12
+ let a = p, o = await findAsync(i.composedPath(), (e) => e instanceof HTMLElement && f.draggable(e));
13
+ a == p && o && (i.stopPropagation(), h.drag = o, h.drag?.setAttribute("draggable", "true"));
19
14
  },
20
15
  pointerup() {
21
- count++;
22
- dragend();
16
+ p++, m();
23
17
  },
24
18
  pointermove() {
25
- count++;
19
+ p++;
26
20
  },
27
21
  dragstart(e) {
28
22
  e.dataTransfer.setDragImage(document.createElement("img"), 0, 0);
29
23
  },
30
24
  dragover(e) {
31
- if (!state.drag) return;
32
- const over = state.over = e.composedPath().filter((e$1) => e$1 instanceof HTMLElement).find((e$1) => opt.dragover(e$1)) ?? state.over;
33
- if (!over) return;
34
- e.preventDefault();
35
- e.stopPropagation();
36
- const children = opt.children(over);
37
- if (children) {
38
- let i = 0, d = Infinity, s = "";
39
- children.forEach((el$1, ii) => {
40
- const display = getComputedStyle(el$1).display;
41
- const __ = ["table-cell", "inline"].some((e$1) => display.includes(e$1));
42
- const rect = el$1.getBoundingClientRect();
43
- if (__) {
44
- let dd = Math.sqrt((e.clientX - rect.x) ** 2 + (e.clientY - rect.y + rect.height / 2) ** 2);
45
- if (dd < d) i = ii, d = dd, s = "l";
46
- dd = Math.sqrt((e.clientX - rect.right) ** 2 + (e.clientY - rect.y + rect.height / 2) ** 2);
47
- if (dd < d) i = ii, d = dd, s = "r";
25
+ if (!h.drag) return;
26
+ let i = h.over = e.composedPath().filter((e) => e instanceof HTMLElement).find((e) => f.dragover(e)) ?? h.over;
27
+ if (!i) return;
28
+ e.preventDefault(), e.stopPropagation();
29
+ let a = f.children(i);
30
+ if (a) {
31
+ let i = 0, o = Infinity, s = "";
32
+ a.forEach((a, c) => {
33
+ let l = getComputedStyle(a).display, u = ["table-cell", "inline"].some((e) => l.includes(e)), d = a.getBoundingClientRect();
34
+ if (u) {
35
+ let a = Math.sqrt((e.clientX - d.x) ** 2 + (e.clientY - d.y + d.height / 2) ** 2);
36
+ a < o && (i = c, o = a, s = "l"), a = Math.sqrt((e.clientX - d.right) ** 2 + (e.clientY - d.y + d.height / 2) ** 2), a < o && (i = c, o = a, s = "r");
48
37
  } else {
49
- let dd = Math.sqrt((e.clientY - rect.y) ** 2 + (e.clientX - rect.x + rect.width / 2) ** 2);
50
- if (dd < d) i = ii, d = dd, s = "t";
51
- dd = Math.sqrt((e.clientY - rect.bottom) ** 2 + (e.clientX - rect.x + rect.width / 2) ** 2);
52
- if (dd < d) i = ii, d = dd, s = "b";
38
+ let a = Math.sqrt((e.clientY - d.y) ** 2 + (e.clientX - d.x + d.width / 2) ** 2);
39
+ a < o && (i = c, o = a, s = "t"), a = Math.sqrt((e.clientY - d.bottom) ** 2 + (e.clientX - d.x + d.width / 2) ** 2), a < o && (i = c, o = a, s = "b");
53
40
  }
54
41
  });
55
- const rect1 = children[i].getBoundingClientRect();
56
- const x = s == "l" || s == "r", y = s == "t" || s == "b";
57
- const size = 3;
58
- state.style = {
59
- width: `${y ? rect1.width : size}px`,
60
- height: `${y ? size : rect1.height}px`,
61
- translate: `${y ? rect1.x : (s == "l" ? rect1.x : rect1.right) - size / 2}px ${x ? rect1.y : (s == "t" ? rect1.y : rect1.bottom) - size / 2}px`
62
- };
63
- state.rel = children[i];
64
- state.type = s == "l" || s == "t" ? "before" : "after";
42
+ let c = a[i].getBoundingClientRect(), l = s == "l" || s == "r", u = s == "t" || s == "b";
43
+ h.style = {
44
+ width: `${u ? c.width : 3}px`,
45
+ height: `${u ? 3 : c.height}px`,
46
+ translate: `${u ? c.x : (s == "l" ? c.x : c.right) - 3 / 2}px ${l ? c.y : (s == "t" ? c.y : c.bottom) - 3 / 2}px`
47
+ }, h.rel = a[i], h.type = s == "l" || s == "t" ? "before" : "after";
65
48
  } else {
66
- const rect1 = over.getBoundingClientRect();
67
- state.style = {
68
- width: rect1.width,
69
- height: rect1.height,
70
- translate: `${rect1.x}px ${rect1.y}px`
71
- };
72
- state.rel = over;
73
- state.type = "inner";
49
+ let e = i.getBoundingClientRect();
50
+ h.style = {
51
+ width: e.width,
52
+ height: e.height,
53
+ translate: `${e.x}px ${e.y}px`
54
+ }, h.rel = i, h.type = "inner";
74
55
  }
75
56
  },
76
57
  dragend() {
77
- dragend();
58
+ m();
78
59
  }
79
60
  });
80
- function dragend() {
81
- state.drag?.removeAttribute("draggable");
82
- if (state.drag && state.rel) opt.dragend?.();
83
- reconcile({})(state);
61
+ function m() {
62
+ h.drag?.removeAttribute("draggable"), h.drag && h.rel && f.dragend?.(), reconcile({})(h);
84
63
  }
85
- const state = createMutable({
64
+ let h = createMutable({
86
65
  style: void 0,
87
66
  drag: void 0,
88
67
  over: void 0,
89
68
  rel: void 0,
90
69
  type: ""
91
70
  });
92
- memo(() => memo(() => !!state.style)() && createComponent(Portal, {
71
+ return memo(() => memo(() => !!h.style)() && createComponent(Portal, {
93
72
  get mount() {
94
- return access(el);
73
+ return access(l);
95
74
  },
96
75
  get children() {
97
- var _el$ = _tmpl$();
98
- spread(_el$, mergeProps(() => opt.guideLine, { get style() {
99
- return state.style;
100
- } }), false, false);
101
- return _el$;
76
+ var e = _tmpl$();
77
+ return spread(e, mergeProps(() => f.guideLine, { get style() {
78
+ return h.style;
79
+ } }), !1, !1), e;
102
80
  }
103
- }));
104
- return state;
81
+ })), h;
105
82
  };
106
83
  export { useSort };
@@ -3,89 +3,64 @@ import { createMutable } from "solid-js/store";
3
3
  import { keyBy, uniqBy } from "es-toolkit";
4
4
  import { createElementSize } from "@solid-primitives/resize-observer";
5
5
  import { createScrollPosition } from "@solid-primitives/scroll";
6
- function useVirtualizer(opt) {
7
- opt = mergeProps({
6
+ function useVirtualizer(d) {
7
+ d = mergeProps({
8
8
  overscan: 0,
9
9
  batch: 0,
10
- enable: true
11
- }, opt);
12
- const size = createElementSize(opt.getScrollElement);
13
- const pos = createScrollPosition(opt.getScrollElement);
14
- const y = createMemo(() => opt.horizontal ? pos.x : pos.y);
15
- const h = createMemo(() => opt.horizontal ? size.width : size.height);
16
- const y2 = createMemo(() => y() + h());
17
- const sizes = createMutable(Array(opt.count));
10
+ enable: !0
11
+ }, d);
12
+ let f = createElementSize(d.getScrollElement), p = createScrollPosition(d.getScrollElement), m = createMemo(() => d.horizontal ? p.x : p.y), h = createMemo(() => d.horizontal ? f.width : f.height), g = createMemo(() => m() + h()), _ = createMutable(Array(d.count));
18
13
  createComputed(() => {
19
- const { count } = opt;
14
+ let { count: e } = d;
20
15
  untrack(() => {
21
- for (let i = 0; i < count; i++) sizes[i] ||= opt.estimateSize(i);
16
+ for (let o = 0; o < e; o++) _[o] ||= d.estimateSize(o);
22
17
  });
23
18
  });
24
- const [items, setItems] = createSignal([]);
19
+ let [v, y] = createSignal([]);
25
20
  createRenderEffect(() => {
26
- const { count } = opt;
27
- let arr = Array(count);
28
- let t = 0;
29
- for (let i = 0; i < count; i++) {
30
- arr[i] = {
31
- start: t,
32
- end: t + sizes[i],
33
- index: i
34
- };
35
- t = arr[i].end;
36
- }
37
- setItems(arr);
21
+ let { count: e } = d, o = Array(e), s = 0;
22
+ for (let c = 0; c < e; c++) o[c] = {
23
+ start: s,
24
+ end: s + _[c],
25
+ index: c
26
+ }, s = o[c].end;
27
+ y(o);
38
28
  });
39
- const start = createMemo((prev) => {
40
- const { batch: batch$1, overscan = 0 } = opt;
41
- let i = findClosestIndex(items(), (e) => e.start > y() ? -1 : e.end < y() ? 1 : 0);
42
- i -= overscan;
43
- if (batch$1) if (i > prev) i = i <= prev + batch$1 ? prev : i > prev + batch$1 * 2 ? i : prev + batch$1;
44
- else i -= batch$1;
45
- return Math.max(i, 0);
46
- }, 0);
47
- const end = createMemo((prev) => {
48
- const { batch: batch$1, overscan = 0 } = opt;
49
- let i = findClosestIndex(items(), (e) => e.start > y2() ? -1 : e.end < y2() ? 1 : 0);
50
- i += overscan;
51
- if (batch$1) if (i < prev) i = i >= prev - batch$1 ? prev : i < prev - batch$1 * 2 ? i : prev - batch$1;
52
- else i += batch$1;
53
- return Math.min(i, opt.count - 1);
54
- }, 0);
55
- const items2 = createMemo(() => {
56
- if (!opt.enable) return items();
57
- let arr = items().slice(start(), end() + 1);
58
- if (opt.extras) {
59
- arr.push(...opt.extras()?.map((i) => items()[i]) || []);
60
- arr = uniqBy(arr, (e) => e.index).sort((a, b) => a.index - b.index);
61
- }
62
- return arr;
29
+ let b = createMemo((e) => {
30
+ let { batch: o, overscan: s = 0 } = d, c = C(v(), (e) => e.start > m() ? -1 : e.end < m() ? 1 : 0);
31
+ return c -= s, o && (c > e ? c = c <= e + o ? e : c > e + o * 2 ? c : e + o : c -= o), Math.max(c, 0);
32
+ }, 0), x = createMemo((e) => {
33
+ let { batch: o, overscan: s = 0 } = d, c = C(v(), (e) => e.start > g() ? -1 : e.end < g() ? 1 : 0);
34
+ return c += s, o && (c < e ? c = c >= e - o ? e : c < e - o * 2 ? c : e - o : c += o), Math.min(c, d.count - 1);
35
+ }, 0), S = createMemo(() => {
36
+ if (!d.enable) return v();
37
+ let e = v().slice(b(), x() + 1);
38
+ return d.extras && (e.push(...d.extras()?.map((e) => v()[e]) || []), e = uniqBy(e, (e) => e.index).sort((e, o) => e.index - o.index)), e;
63
39
  });
64
- function findClosestIndex(arr, fn) {
65
- let l = 0, r = arr.length - 1;
66
- while (l < r) {
67
- const m = l + Math.floor((r - l) / 2);
68
- const v = fn(arr[m]);
69
- if (v < 0 && r != m) r = m;
70
- else if (v > 0 && l != m) l = m;
71
- else return m;
40
+ function C(e, o) {
41
+ let s = 0, c = e.length - 1;
42
+ for (; s < c;) {
43
+ let l = s + Math.floor((c - s) / 2), u = o(e[l]);
44
+ if (u < 0 && c != l) c = l;
45
+ else if (u > 0 && s != l) s = l;
46
+ else return l;
72
47
  }
73
- return l;
48
+ return s;
74
49
  }
75
50
  return {
76
- options: opt,
77
- getTotalSize: () => items()[items().length - 1]?.end || 0,
78
- resizeItem: (i, size$1) => {
79
- if (i <= start() && size$1 != sizes[i]) {
80
- const el = opt.getScrollElement();
81
- if ((opt.horizontal ? el.scrollLeft : el.scrollTop) != 0) opt.horizontal ? el.scrollLeft += size$1 - sizes[i] : el.scrollTop += size$1 - sizes[i];
51
+ options: d,
52
+ getTotalSize: () => v()[v().length - 1]?.end || 0,
53
+ resizeItem: (e, o) => {
54
+ if (e <= b() && o != _[e]) {
55
+ let s = d.getScrollElement();
56
+ (d.horizontal ? s.scrollLeft : s.scrollTop) != 0 && (d.horizontal ? s.scrollLeft += o - _[e] : s.scrollTop += o - _[e]);
82
57
  }
83
- sizes[i] = size$1;
58
+ _[e] = o;
84
59
  },
85
- getVirtualItems: items2,
60
+ getVirtualItems: S,
86
61
  getVirtualItem: (() => {
87
- const keybyed = createMemo(() => keyBy(items2(), (e) => e.index));
88
- return (i) => keybyed()[i];
62
+ let e = createMemo(() => keyBy(S(), (e) => e.index));
63
+ return (o) => e()[o];
89
64
  })()
90
65
  };
91
66
  }
package/dist/index.d.ts CHANGED
@@ -1,4 +1,4 @@
1
- import { For, type JSX, type Component } from 'solid-js';
1
+ import { type JSX, type Component } from 'solid-js';
2
2
  import 'virtual:uno.css';
3
3
  import './style.scss';
4
4
  import './plugins/CellSelectionPlugin';
@@ -10,6 +10,8 @@ import './plugins/CommandPlugin';
10
10
  import './plugins/RowSelectionPlugin';
11
11
  import './plugins/ResizePlugin';
12
12
  import './plugins/DragPlugin';
13
+ import './plugins/RowGroupPlugin';
14
+ import './plugins/ExpandPlugin';
13
15
  export declare const Ctx: import("solid-js").Context<{
14
16
  props: TableProps2;
15
17
  store: TableStore;
@@ -19,12 +21,17 @@ type Pri<T> = {
19
21
  [K in keyof T]: T[K];
20
22
  };
21
23
  type TableProps2 = Requireds<TableProps, ('Table' | 'Thead' | 'Tbody' | 'Tr' | 'Th' | 'Td' | 'EachRows' | 'EachCells' | 'rowKey' | 'data' | 'columns' | 'newRow')>;
24
+ type Each<T = any> = (props: {
25
+ each: T[];
26
+ children: (e: () => any, i: () => number) => JSX.Element;
27
+ }) => JSX.Element;
22
28
  type ProcessProps = {
23
29
  [K in keyof TableProps]?: (prev: TableProps2, ctx: {
24
30
  store: TableStore;
25
31
  }) => TableProps[K];
26
32
  };
27
33
  export interface Plugin {
34
+ name?: string;
28
35
  priority?: number;
29
36
  store?: (store: TableStore) => Partial<TableStore> | void;
30
37
  rewriteProps?: ProcessProps;
@@ -52,8 +59,8 @@ export interface TableProps {
52
59
  data?: any;
53
60
  children: JSX.Element;
54
61
  }>;
55
- EachRows?: typeof For;
56
- EachCells?: typeof For<TableColumn[], JSX.Element>;
62
+ EachRows?: Each;
63
+ EachCells?: Each<TableColumn>;
57
64
  cellClass?: ((props: Omit<TDProps, 'y' | 'data'> & {
58
65
  y?: number;
59
66
  data?: any;
@@ -113,7 +120,7 @@ export interface TableStore extends Obj {
113
120
  }>[];
114
121
  internal: symbol;
115
122
  raw: symbol;
116
- props?: TableProps2;
123
+ props: TableProps2;
117
124
  rawProps: TableProps;
118
125
  plugins: Plugin[];
119
126
  }