@svgrid/grid 3.0.4 → 4.0.0

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 (71) hide show
  1. package/README.md +3 -3
  2. package/dist/SvGrid.controller.svelte.d.ts +12 -2
  3. package/dist/SvGrid.controller.svelte.js +191 -8
  4. package/dist/SvGrid.css +73 -0
  5. package/dist/SvGrid.svelte +82 -3
  6. package/dist/SvGrid.types.d.ts +105 -3
  7. package/dist/build-api.js +11 -6
  8. package/dist/cdn/{GridMenus-7kbpnnBW.js → GridMenus-CLI93jke.js} +26 -26
  9. package/dist/cdn/{GridMenus-BL7ZgQvU.js → GridMenus-CwooL3QA.js} +26 -26
  10. package/dist/cdn/server-block-cache-CGoWz-87.js +237 -0
  11. package/dist/cdn/{src-BKhZ6eXd.js → src-B6HXdfHY.js} +4099 -4140
  12. package/dist/cdn/{src-V1uu8iE9.js → src-C6Iowdvs.js} +4052 -4093
  13. package/dist/cdn/svgrid.js +27 -26
  14. package/dist/cdn/svgrid.svelte-external.js +27 -26
  15. package/dist/cdn/validate-CchXzyrX.js +76 -0
  16. package/dist/core.js +36 -13
  17. package/dist/editing.js +10 -0
  18. package/dist/grid-icons.d.ts +2 -2
  19. package/dist/grid-icons.js +2 -2
  20. package/dist/grid-messages.d.ts +2 -0
  21. package/dist/grid-messages.js +2 -0
  22. package/dist/index.d.ts +3 -4
  23. package/dist/index.js +2 -3
  24. package/dist/row-model.d.ts +133 -0
  25. package/dist/row-model.js +16 -0
  26. package/dist/selection.d.ts +2 -1
  27. package/dist/selection.js +30 -2
  28. package/dist/server-block-cache.d.ts +214 -0
  29. package/dist/server-block-cache.js +531 -0
  30. package/dist/server-data-source.d.ts +240 -6
  31. package/dist/server-data-source.js +220 -20
  32. package/dist/server.d.ts +13 -0
  33. package/dist/server.js +13 -0
  34. package/dist/validate.d.ts +2 -0
  35. package/dist/validate.js +8 -3
  36. package/package.json +6 -1
  37. package/src/SvGrid.controller.svelte.ts +190 -8
  38. package/src/SvGrid.css +73 -0
  39. package/src/SvGrid.svelte +82 -3
  40. package/src/SvGrid.types.ts +105 -3
  41. package/src/build-api.ts +11 -4
  42. package/src/core.rowmodel-cache.test.ts +51 -0
  43. package/src/core.ts +33 -12
  44. package/src/editing.ts +8 -0
  45. package/src/grid-icons.ts +2 -2
  46. package/src/grid-messages.ts +5 -0
  47. package/src/icon-seam.test.ts +2 -4
  48. package/src/index.ts +19 -10
  49. package/src/row-model.ts +146 -0
  50. package/src/selection.test.ts +3 -0
  51. package/src/selection.ts +32 -2
  52. package/src/server-block-cache.test.ts +645 -0
  53. package/src/server-block-cache.ts +677 -0
  54. package/src/server-data-source.infinite.test.ts +343 -0
  55. package/src/server-data-source.ts +450 -27
  56. package/src/server.ts +47 -0
  57. package/src/svgrid.row-model-prop.svelte.test.ts +352 -0
  58. package/src/svgrid.row-model-seam.svelte.test.ts +289 -0
  59. package/src/validate.test.ts +10 -0
  60. package/src/validate.ts +10 -3
  61. package/dist/SvGroupCell.svelte +0 -141
  62. package/dist/SvGroupCell.svelte.d.ts +0 -49
  63. package/dist/SvRowGroupPanel.svelte +0 -186
  64. package/dist/SvRowGroupPanel.svelte.d.ts +0 -25
  65. package/dist/cdn/validate-_CDJzgIo.js +0 -75
  66. package/dist/server-group-model.d.ts +0 -98
  67. package/dist/server-group-model.js +0 -263
  68. package/src/SvGroupCell.svelte +0 -141
  69. package/src/SvRowGroupPanel.svelte +0 -186
  70. package/src/server-group-model.test.ts +0 -294
  71. package/src/server-group-model.ts +0 -370
@@ -0,0 +1,237 @@
1
+ //#region src/server-block-cache.ts
2
+ var e = Symbol.for("svgrid.rowPlaceholder"), t = Object.freeze({ [e]: "loading" }), n = Object.freeze({ [e]: "failed" });
3
+ function r(t) {
4
+ if (typeof t != "object" || !t) return null;
5
+ let n = t[e];
6
+ return n === "loading" || n === "failed" ? n : null;
7
+ }
8
+ function i(t, n) {
9
+ return Object.freeze({
10
+ ...n,
11
+ [e]: t
12
+ });
13
+ }
14
+ var a = (e) => {
15
+ Promise.resolve().then(e);
16
+ };
17
+ function o(e) {
18
+ let r = Math.max(1, e.blockSize ?? 100), i = e.maxBlocksInCache ?? Infinity, o = Math.max(1, e.maxConcurrentRequests ?? 2), s = Math.max(0, e.blockLoadDebounceMs ?? 0), c = Math.max(0, e.initialRowCount ?? 1), l = Math.max(0, e.overflowRows ?? 1), u = e.schedule ?? a, d = /* @__PURE__ */ new Map(), f = [], p = 0, m = 0, h = null, g = !1, _ = !1, v = 0, y = 0, b = null, x = !1, S = null, C = (e) => Math.floor(e / r), w = (e) => e * r;
19
+ function T() {
20
+ if (g && h != null) return h;
21
+ let e = 0, t = !1;
22
+ for (let e of d.values()) e.status !== "loading" && (t = !0);
23
+ for (let [n, i] of d) {
24
+ let a = i.status === "loaded" ? w(n) + i.rows.length : i.status === "failed" ? n === 0 ? 0 : w(n) + r : t ? w(n) + r : 0;
25
+ a > e && (e = a);
26
+ }
27
+ return t ? Math.max(c, e + l) : c;
28
+ }
29
+ function E() {
30
+ let e = [];
31
+ for (let [t, n] of d) n.status === "failed" && e.push(t);
32
+ return {
33
+ rowCount: g ? h : null,
34
+ lastRowKnown: g,
35
+ loading: p > 0,
36
+ failedBlocks: e.sort((e, t) => e - t)
37
+ };
38
+ }
39
+ function D() {
40
+ S = null, !(_ || x) && (x = !0, u(() => {
41
+ x = !1, !_ && e.onChange(E());
42
+ }));
43
+ }
44
+ function O(e) {
45
+ _ || d.get(e) || f.includes(e) || (f.push(e), k());
46
+ }
47
+ function k() {
48
+ for (; !_ && p < o && f.length > 0;) {
49
+ let e = f.shift();
50
+ d.has(e) || A(e);
51
+ }
52
+ }
53
+ async function A(t) {
54
+ let n = new AbortController(), i = {
55
+ status: "loading",
56
+ rows: [],
57
+ lastTouched: m += 1,
58
+ controller: n
59
+ };
60
+ d.set(t, i), p += 1, D();
61
+ let a = w(t), o = a + r;
62
+ try {
63
+ let r = await e.fetch(a, o, n.signal);
64
+ if (_ || n.signal.aborted || d.get(t) !== i) return;
65
+ i.rows = [...r.rows], i.status = "loaded", i.controller = null, j(t, i.rows.length, r.rowCount), M();
66
+ } catch {
67
+ if (_ || n.signal.aborted || d.get(t) !== i) return;
68
+ i.status = "failed", i.rows = [], i.controller = null;
69
+ } finally {
70
+ !_ && !n.signal.aborted && (--p, D(), k());
71
+ }
72
+ }
73
+ function j(e, t, n) {
74
+ if (typeof n == "number" && n >= 0) {
75
+ h = n, g = !0;
76
+ return;
77
+ }
78
+ t < r && (h = w(e) + t, g = !0);
79
+ }
80
+ function M() {
81
+ if (!Number.isFinite(i)) return;
82
+ let e = C(v), t = C(Math.max(v, y)), n = [...d.entries()].filter(([n, r]) => r.status === "loaded" && (n < e || n > t)).sort((e, t) => e[1].lastTouched - t[1].lastTouched), r = 0;
83
+ for (let e of d.values()) e.status === "loaded" && (r += 1);
84
+ for (let [e] of n) {
85
+ if (r <= i) break;
86
+ d.delete(e), --r;
87
+ }
88
+ }
89
+ function N() {
90
+ if (_) return;
91
+ let e = C(v), t = C(Math.max(v, y));
92
+ for (let n = e; n <= t; n += 1) {
93
+ let e = d.get(n);
94
+ e ? e.lastTouched = m += 1 : O(n);
95
+ }
96
+ }
97
+ function P() {
98
+ for (let e of d.values()) e.controller?.abort();
99
+ p = 0, f.length = 0;
100
+ }
101
+ return {
102
+ setViewport(e, t) {
103
+ if (!_) {
104
+ if (v = Math.max(0, e), y = Math.max(v, t), s === 0) {
105
+ N();
106
+ return;
107
+ }
108
+ b && clearTimeout(b), b = setTimeout(() => {
109
+ b = null, N();
110
+ }, s);
111
+ }
112
+ },
113
+ rows() {
114
+ if (S) return S;
115
+ let e = T(), i = Array(e);
116
+ i.fill(t);
117
+ for (let [t, a] of d) {
118
+ let o = w(t);
119
+ if (!(o >= e)) {
120
+ if (a.status === "failed") {
121
+ let t = Math.min(o + r, e);
122
+ for (let e = o; e < t; e += 1) i[e] = n;
123
+ continue;
124
+ }
125
+ for (let t = 0; t < a.rows.length && o + t < e; t += 1) i[o + t] = a.rows[t];
126
+ }
127
+ }
128
+ return S = i, i;
129
+ },
130
+ getRow(e) {
131
+ let r = d.get(C(e));
132
+ return r ? r.status === "failed" ? n : r.rows[e - w(C(e))] ?? t : t;
133
+ },
134
+ rowCount: () => g ? h : null,
135
+ lastRowKnown: () => g,
136
+ retryFailed() {
137
+ let e = !1;
138
+ for (let [t, n] of [...d]) n.status === "failed" && (d.delete(t), O(t), e = !0);
139
+ e && D();
140
+ },
141
+ refresh() {
142
+ for (let [e, t] of [...d]) t.controller?.abort(), d.delete(e), O(e);
143
+ D();
144
+ },
145
+ purge() {
146
+ P(), d.clear(), h = null, g = !1, S = null, N(), D();
147
+ },
148
+ setRowCount(e, t = e != null) {
149
+ h = e, g = t && e != null, D();
150
+ },
151
+ applyRows(e, t, n) {
152
+ if (e % r !== 0) throw Error(`createBlockCache.applyRows: startRow ${e} is not a multiple of blockSize ${r}`);
153
+ let i = C(e), a = Math.ceil(t.length / r);
154
+ for (let e = 0; e < a; e += 1) {
155
+ let n = i + e;
156
+ d.get(n)?.controller?.abort(), d.set(n, {
157
+ status: "loaded",
158
+ rows: t.slice(e * r, (e + 1) * r),
159
+ lastTouched: m += 1,
160
+ controller: null
161
+ });
162
+ }
163
+ let o = d.get(i + a - 1);
164
+ o ? j(i + a - 1, o.rows.length, n) : typeof n == "number" && n >= 0 && (h = n, g = !0), D();
165
+ },
166
+ patch(e, t) {
167
+ let n = d.get(C(e));
168
+ if (!n || n.status !== "loaded") return !1;
169
+ let r = e - w(C(e));
170
+ return r < 0 || r >= n.rows.length ? !1 : (n.rows[r] = t, D(), !0);
171
+ },
172
+ findIndex(e) {
173
+ for (let [t, n] of d) {
174
+ if (n.status !== "loaded") continue;
175
+ let r = w(t);
176
+ for (let t = 0; t < n.rows.length; t += 1) if (e(n.rows[t], r + t)) return r + t;
177
+ }
178
+ return -1;
179
+ },
180
+ insert(e, t) {
181
+ if (t.length === 0) return !1;
182
+ let n = Math.max(0, Math.min(e, T())), r = F(n);
183
+ return r ? (r.flat.splice(n - w(r.startBlock), 0, ...t), I(r.startBlock, r.flat)) : L(C(n)), g && h != null && (h += t.length), D(), r != null;
184
+ },
185
+ remove(e, t = 1) {
186
+ if (t <= 0) return 0;
187
+ let n = F(e);
188
+ if (!n) return 0;
189
+ let r = n.flat.splice(e - w(n.startBlock), t).length;
190
+ return I(n.startBlock, n.flat), g && h != null && (h = Math.max(0, h - r)), D(), r;
191
+ },
192
+ getCacheState() {
193
+ return [...d.entries()].map(([e, t]) => ({
194
+ blockIndex: e,
195
+ startRow: w(e),
196
+ endRow: w(e) + r,
197
+ status: t.status,
198
+ lastTouched: t.lastTouched
199
+ })).sort((e, t) => e.blockIndex - t.blockIndex);
200
+ },
201
+ dispose() {
202
+ _ = !0, b && clearTimeout(b), b = null, P(), d.clear();
203
+ }
204
+ };
205
+ function F(e) {
206
+ let t = C(e);
207
+ if (d.get(t)?.status !== "loaded") return null;
208
+ let n = t;
209
+ for (; d.get(n - 1)?.status === "loaded";) --n;
210
+ let i = [];
211
+ for (let e = n;; e += 1) {
212
+ let t = d.get(e);
213
+ if (!t || t.status !== "loaded" || (i.push(...t.rows), t.rows.length < r)) break;
214
+ }
215
+ return {
216
+ startBlock: n,
217
+ flat: i
218
+ };
219
+ }
220
+ function I(e, t) {
221
+ let n = Math.ceil(t.length / r);
222
+ L(e);
223
+ for (let i = 0; i < n; i += 1) d.set(e + i, {
224
+ status: "loaded",
225
+ rows: t.slice(i * r, (i + 1) * r),
226
+ lastTouched: m += 1,
227
+ controller: null
228
+ });
229
+ S = null;
230
+ }
231
+ function L(e) {
232
+ for (let [t, n] of [...d]) t < e || (n.controller?.abort(), d.delete(t));
233
+ S = null;
234
+ }
235
+ }
236
+ //#endregion
237
+ export { i as n, r, o as t };