@toolbox-web/grid-react 2.4.0 → 2.5.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 (42) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +1 -1
  3. package/chunks/feature-registry-DKPyd2rV.js +2 -0
  4. package/chunks/{react-column-config-Cto2WHGC.js → react-column-config-CkBIwx2L.js} +1 -1
  5. package/chunks/{react-grid-adapter-C_TSA5_P.js → react-grid-adapter-DP9A9ytc.js} +131 -93
  6. package/chunks/use-grid-is-ready-Baa67cu3.js +15 -0
  7. package/features/editing.js +3 -3
  8. package/features/export.d.ts +6 -0
  9. package/features/export.d.ts.map +1 -1
  10. package/features/export.js +17 -15
  11. package/features/filtering.d.ts +6 -0
  12. package/features/filtering.d.ts.map +1 -1
  13. package/features/filtering.js +40 -38
  14. package/features/grouping-columns.js +1 -1
  15. package/features/grouping-rows.js +1 -1
  16. package/features/master-detail.js +2 -2
  17. package/features/pinned-rows.js +1 -1
  18. package/features/print.d.ts +6 -0
  19. package/features/print.d.ts.map +1 -1
  20. package/features/print.js +10 -8
  21. package/features/responsive.js +2 -2
  22. package/features/selection.d.ts +32 -0
  23. package/features/selection.d.ts.map +1 -1
  24. package/features/selection.js +35 -19
  25. package/features/undo-redo.d.ts +6 -0
  26. package/features/undo-redo.d.ts.map +1 -1
  27. package/features/undo-redo.js +38 -27
  28. package/index.d.ts +3 -0
  29. package/index.d.ts.map +1 -1
  30. package/index.js +242 -229
  31. package/lib/column-options.d.ts +33 -0
  32. package/lib/column-options.d.ts.map +1 -0
  33. package/lib/grid-column.d.ts +21 -11
  34. package/lib/grid-column.d.ts.map +1 -1
  35. package/lib/react-grid-adapter.d.ts +37 -1
  36. package/lib/react-grid-adapter.d.ts.map +1 -1
  37. package/lib/use-grid-is-ready.d.ts +9 -0
  38. package/lib/use-grid-is-ready.d.ts.map +1 -0
  39. package/lib/use-grid.d.ts +2 -0
  40. package/lib/use-grid.d.ts.map +1 -1
  41. package/package.json +1 -1
  42. package/chunks/feature-registry-8K2rOVnC.js +0 -2
package/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2025 Øystein Amundsen
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/README.md CHANGED
@@ -1,7 +1,7 @@
1
1
  # @toolbox-web/grid-react
2
2
 
3
3
  [![npm](https://img.shields.io/npm/v/@toolbox-web/grid-react.svg)](https://www.npmjs.com/package/@toolbox-web/grid-react)
4
- [![License: MIT](https://img.shields.io/badge/License-MIT-blue.svg)](../../LICENSE)
4
+ [![License: MIT](https://img.shields.io/badge/License-MIT-blue.svg)](./LICENSE)
5
5
  [![GitHub Sponsors](https://img.shields.io/badge/Sponsor-❤-ea4aaa?logo=github)](https://github.com/sponsors/OysteinAmundsen)
6
6
 
7
7
  React adapter for `@toolbox-web/grid` data grid component. Provides components and hooks for declarative React integration with custom cell renderers and editors.
@@ -0,0 +1,2 @@
1
+ import { clearFeatureRegistry as e, createPluginFromFeature as t, getFeatureFactory as n, getRegisteredFeatures as r, isFeatureRegistered as i, registerFeature as a } from "@toolbox-web/grid/features/registry";
2
+ export { i as a, r as i, t as n, a as o, n as r, e as t };
@@ -123,4 +123,4 @@ function g(e) {
123
123
  return n[a] = !0, n;
124
124
  }
125
125
  //#endregion
126
- export { r as a, i, l as n, g as r, s as t };
126
+ export { f as a, p as i, l as n, i as o, g as r, r as s, s as t };
@@ -1,19 +1,19 @@
1
1
  import { a as e, i as t, r as n, t as r } from "./portal-bridge-zxgm_jwK.js";
2
- import { i, r as a, t as o } from "./react-column-config-Cto2WHGC.js";
3
- import { Children as s, isValidElement as c, useCallback as l, useEffect as u, useRef as d } from "react";
4
- import { jsx as f } from "react/jsx-runtime";
2
+ import { a as i, i as a, o, r as s, t as c } from "./react-column-config-CkBIwx2L.js";
3
+ import { Children as l, isValidElement as u, useCallback as d, useEffect as f, useRef as p } from "react";
4
+ import { jsx as m } from "react/jsx-runtime";
5
5
  //#region libs/grid-react/src/lib/child-feature-detector.ts
6
- var p = /* @__PURE__ */ new Map();
7
- function m(e, t) {
8
- p.set(e, t);
6
+ var h = /* @__PURE__ */ new Map();
7
+ function g(e, t) {
8
+ h.set(e, t);
9
9
  }
10
- function h(e) {
10
+ function _(e) {
11
11
  let t = {};
12
- return p.size === 0 || s.forEach(e, (e) => {
13
- if (!c(e)) return;
12
+ return h.size === 0 || l.forEach(e, (e) => {
13
+ if (!u(e)) return;
14
14
  let n = e.type, r = typeof n == "string" ? void 0 : n?.displayName;
15
15
  if (typeof r != "string") return;
16
- let i = p.get(r);
16
+ let i = h.get(r);
17
17
  if (!i) return;
18
18
  let a = i(e);
19
19
  a && Object.assign(t, a);
@@ -21,12 +21,12 @@ function h(e) {
21
21
  }
22
22
  //#endregion
23
23
  //#region libs/grid-react/src/lib/feature-prop-keys.ts
24
- var g = /* @__PURE__ */ new Set(), _ = null;
25
- function v(e) {
26
- g.has(e) || (g.add(e), _ = null);
24
+ var v = /* @__PURE__ */ new Set(), y = null;
25
+ function b(e) {
26
+ v.has(e) || (v.add(e), y = null);
27
27
  }
28
- function y() {
29
- return _ === null && (_ = Object.freeze(Array.from(g))), _;
28
+ function x() {
29
+ return y === null && (y = Object.freeze(Array.from(v))), y;
30
30
  }
31
31
  for (let e of [
32
32
  "selection",
@@ -53,24 +53,24 @@ for (let e of [
53
53
  "pivot",
54
54
  "serverSide",
55
55
  "tooltip"
56
- ]) v(e);
56
+ ]) b(e);
57
57
  //#endregion
58
58
  //#region libs/grid-react/src/lib/grid-tool-panel.tsx
59
- var b = /* @__PURE__ */ new WeakMap(), x = /* @__PURE__ */ new Map();
60
- function S(e) {
61
- let t = b.get(e);
59
+ var S = /* @__PURE__ */ new WeakMap(), C = /* @__PURE__ */ new Map();
60
+ function w(e) {
61
+ let t = S.get(e);
62
62
  if (t) return t;
63
63
  let n = e.id;
64
- if (n) return x.get(n);
64
+ if (n) return C.get(n);
65
65
  }
66
- function C(e) {
67
- let { id: t, title: n, icon: r, tooltip: i, order: a = 100, children: o } = e, s = d(null), c = l((e) => {
68
- s.current = e, e && (b.set(e, o), t && x.set(t, o));
66
+ function T(e) {
67
+ let { id: t, title: n, icon: r, tooltip: i, order: a = 100, children: o } = e, s = p(null), c = d((e) => {
68
+ s.current = e, e && (S.set(e, o), t && C.set(t, o));
69
69
  }, [o, t]);
70
- return u(() => () => {
70
+ return f(() => () => {
71
71
  let e = s.current;
72
- e && (b.delete(e), t && x.delete(t));
73
- }, [t]), /* @__PURE__ */ f("tbw-grid-tool-panel", {
72
+ e && (S.delete(e), t && C.delete(t));
73
+ }, [t]), /* @__PURE__ */ m("tbw-grid-tool-panel", {
74
74
  ref: c,
75
75
  id: t,
76
76
  title: n,
@@ -81,86 +81,116 @@ function C(e) {
81
81
  }
82
82
  //#endregion
83
83
  //#region libs/grid-react/src/lib/react-grid-adapter.ts
84
- var w = null, T = null, E = null;
85
- function D(e) {
86
- w = e;
87
- }
88
- function O(e) {
89
- T = e;
90
- }
84
+ var E = null, D = null, O = null;
91
85
  function k(e) {
92
86
  E = e;
93
87
  }
94
- var A = /* @__PURE__ */ new WeakMap(), j = /* @__PURE__ */ new Map(), M = /* @__PURE__ */ new WeakMap(), N = /* @__PURE__ */ new Map(), P = /* @__PURE__ */ new Set();
95
- function F(e) {
88
+ function A(e) {
89
+ D = e;
90
+ }
91
+ function j(e) {
92
+ O = e;
93
+ }
94
+ var M = /* @__PURE__ */ new WeakMap(), N = /* @__PURE__ */ new Map(), P = /* @__PURE__ */ new WeakMap(), F = /* @__PURE__ */ new Map(), I = /* @__PURE__ */ new Set();
95
+ function L(e) {
96
96
  return e.closest("tbw-grid, [data-tbw-grid]") ?? void 0;
97
97
  }
98
- function I(e, t) {
99
- let n = F(e);
100
- if (!n) return N;
101
- let r = M.get(n);
98
+ function R(e, t) {
99
+ let n = L(e);
100
+ if (!n) return F;
101
+ let r = P.get(n);
102
102
  if (r || !t) return r;
103
103
  let i = /* @__PURE__ */ new Map();
104
- return M.set(n, i), i;
104
+ return P.set(n, i), i;
105
105
  }
106
- function L(e) {
106
+ function z(e) {
107
107
  return e.tagName.toLowerCase() === "tbw-grid-type" ? e.getAttribute("name") : e.closest("tbw-grid-type")?.getAttribute("name") ?? null;
108
108
  }
109
- function R(e, t) {
110
- let n = e.getAttribute("field"), r = A.get(e) ?? {};
111
- if (r.renderer = t, A.set(e, r), n) {
112
- let e = j.get(n) ?? {};
113
- e.renderer = t, j.set(n, e);
109
+ function B(e, t) {
110
+ let n = e.getAttribute("field"), r = M.get(e) ?? {};
111
+ if (r.renderer = t, M.set(e, r), n) {
112
+ let e = N.get(n) ?? {};
113
+ e.renderer = t, N.set(n, e);
114
+ }
115
+ }
116
+ function V(e, t) {
117
+ let n = e.getAttribute("field"), r = M.get(e) ?? {};
118
+ if (r.editor = t, M.set(e, r), n) {
119
+ let e = N.get(n) ?? {};
120
+ e.editor = t, N.set(n, e);
121
+ }
122
+ }
123
+ function H(e, t) {
124
+ let n = e.getAttribute("field"), r = M.get(e) ?? {};
125
+ if (r.headerRenderer = t, M.set(e, r), n) {
126
+ let e = N.get(n) ?? {};
127
+ e.headerRenderer = t, N.set(n, e);
114
128
  }
115
129
  }
116
- function z(e, t) {
117
- let n = e.getAttribute("field"), r = A.get(e) ?? {};
118
- if (r.editor = t, A.set(e, r), n) {
119
- let e = j.get(n) ?? {};
120
- e.editor = t, j.set(n, e);
130
+ function U(e, t) {
131
+ let n = e.getAttribute("field"), r = M.get(e) ?? {};
132
+ if (r.headerLabelRenderer = t, M.set(e, r), n) {
133
+ let e = N.get(n) ?? {};
134
+ e.headerLabelRenderer = t, N.set(n, e);
121
135
  }
122
136
  }
123
- function B(e) {
124
- let t = A.get(e)?.renderer;
137
+ function W(e) {
138
+ let t = M.get(e)?.headerRenderer;
125
139
  if (!t) {
126
140
  let n = e.getAttribute("field");
127
- n && (t = j.get(n)?.renderer);
141
+ n && (t = N.get(n)?.headerRenderer);
128
142
  }
129
143
  return t;
130
144
  }
131
- function V(e) {
132
- let t = A.get(e)?.editor;
145
+ function G(e) {
146
+ let t = M.get(e)?.headerLabelRenderer;
133
147
  if (!t) {
134
148
  let n = e.getAttribute("field");
135
- n && (t = j.get(n)?.editor);
149
+ n && (t = N.get(n)?.headerLabelRenderer);
136
150
  }
137
151
  return t;
138
152
  }
139
- function H(e, t) {
140
- let n = L(e);
153
+ function K(e) {
154
+ let t = M.get(e)?.renderer;
155
+ if (!t) {
156
+ let n = e.getAttribute("field");
157
+ n && (t = N.get(n)?.renderer);
158
+ }
159
+ return t;
160
+ }
161
+ function q(e) {
162
+ let t = M.get(e)?.editor;
163
+ if (!t) {
164
+ let n = e.getAttribute("field");
165
+ n && (t = N.get(n)?.editor);
166
+ }
167
+ return t;
168
+ }
169
+ function J(e, t) {
170
+ let n = z(e);
141
171
  if (!n) return;
142
- let r = I(e, !0);
172
+ let r = R(e, !0);
143
173
  if (!r) return;
144
174
  let i = r.get(n) ?? {};
145
- i.renderer = t, r.set(n, i), P.add(n);
175
+ i.renderer = t, r.set(n, i), I.add(n);
146
176
  }
147
- function U(e) {
148
- let t = L(e);
149
- if (t) return I(e, !1)?.get(t)?.renderer;
177
+ function Y(e) {
178
+ let t = z(e);
179
+ if (t) return R(e, !1)?.get(t)?.renderer;
150
180
  }
151
- function W(e, t) {
152
- let n = L(e);
181
+ function X(e, t) {
182
+ let n = z(e);
153
183
  if (!n) return;
154
- let r = I(e, !0);
184
+ let r = R(e, !0);
155
185
  if (!r) return;
156
186
  let i = r.get(n) ?? {};
157
- i.editor = t, r.set(n, i), P.add(n);
187
+ i.editor = t, r.set(n, i), I.add(n);
158
188
  }
159
- function G(e) {
160
- let t = L(e);
161
- if (t) return I(e, !1)?.get(t)?.editor;
189
+ function Z(e) {
190
+ let t = z(e);
191
+ if (t) return R(e, !1)?.get(t)?.editor;
162
192
  }
163
- var K = class {
193
+ var Q = class {
164
194
  allPortalKeys = /* @__PURE__ */ new Set();
165
195
  editorPortalKeys = /* @__PURE__ */ new Set();
166
196
  keyToContainer = /* @__PURE__ */ new Map();
@@ -171,21 +201,21 @@ var K = class {
171
201
  this.typeDefaults = e;
172
202
  }
173
203
  processConfig(e) {
174
- return a(e) ?? e;
204
+ return s(e) ?? e;
175
205
  }
176
206
  canHandle(e) {
177
- let t = e.getAttribute("field"), n = A.get(e);
207
+ let t = e.getAttribute("field"), n = M.get(e);
178
208
  if (!n && t) {
179
- let r = j.get(t);
180
- r && (r.renderer || r.editor) && (n = r, A.set(e, n));
209
+ let r = N.get(t);
210
+ r && (r.renderer || r.editor || r.headerRenderer || r.headerLabelRenderer) && (n = r, M.set(e, n));
181
211
  }
182
- let r = n?.renderer !== void 0, i = n?.editor !== void 0;
183
- if (n !== void 0 && (r || i)) return !0;
184
- let a = L(e), o = a ? I(e, !1)?.get(a) : void 0;
185
- return !!o && (o.renderer !== void 0 || o.editor !== void 0);
212
+ let r = n?.renderer !== void 0, i = n?.editor !== void 0, a = n?.headerRenderer !== void 0, o = n?.headerLabelRenderer !== void 0;
213
+ if (n !== void 0 && (r || i || a || o)) return !0;
214
+ let s = z(e), c = s ? R(e, !1)?.get(s) : void 0;
215
+ return !!c && (c.renderer !== void 0 || c.editor !== void 0);
186
216
  }
187
217
  createRenderer(n) {
188
- let r = B(n) ?? U(n);
218
+ let r = K(n) ?? Y(n);
189
219
  if (!r) return;
190
220
  let i = n.closest("tbw-grid, [data-tbw-grid]"), a = /* @__PURE__ */ new WeakMap();
191
221
  return (n) => {
@@ -211,32 +241,40 @@ var K = class {
211
241
  };
212
242
  }
213
243
  createEditor(t) {
214
- let n = V(t) ?? G(t);
244
+ let n = q(t) ?? Z(t);
215
245
  if (!n) return () => document.createElement("div");
216
246
  let r = t.closest("tbw-grid, [data-tbw-grid]") ?? void 0;
217
247
  return (t) => {
218
- let a = document.createElement("div");
219
- a.className = "react-cell-editor", a.style.display = "contents";
220
- let o = e(a, n(t), void 0, r);
221
- return this.trackPortal(o, a, !0), r && this.editorBeforeCloseUnsubs.set(o, i(a, r)), a;
248
+ let i = document.createElement("div");
249
+ i.className = "react-cell-editor", i.style.display = "contents";
250
+ let a = e(i, n(t), void 0, r);
251
+ return this.trackPortal(a, i, !0), r && this.editorBeforeCloseUnsubs.set(a, o(i, r)), i;
222
252
  };
223
253
  }
254
+ createHeaderRenderer(e) {
255
+ let t = W(e);
256
+ if (t) return i(t);
257
+ }
258
+ createHeaderLabelRenderer(e) {
259
+ let t = G(e);
260
+ if (t) return a(t);
261
+ }
224
262
  createDetailRenderer(e) {
225
- return w?.(e, this.bridgeContext);
263
+ return E?.(e, this.bridgeContext);
226
264
  }
227
265
  parseDetailElement(e) {
228
266
  let t = e.closest("tbw-grid, [data-tbw-grid]");
229
267
  if (t) return this.createDetailRenderer(t);
230
268
  }
231
269
  createResponsiveCardRenderer(e) {
232
- return T?.(e, this.bridgeContext);
270
+ return D?.(e, this.bridgeContext);
233
271
  }
234
272
  parseResponsiveCardElement(e) {
235
273
  let t = e.closest("tbw-grid, [data-tbw-grid]");
236
274
  if (t) return this.createResponsiveCardRenderer(t);
237
275
  }
238
276
  createToolPanelRenderer(n) {
239
- let r = S(n);
277
+ let r = w(n);
240
278
  if (!r) return;
241
279
  let i = n.closest("tbw-grid, [data-tbw-grid]");
242
280
  return (n) => {
@@ -251,7 +289,7 @@ var K = class {
251
289
  let n = this.typeDefaults[e];
252
290
  if (!n) return;
253
291
  let r = { editorParams: n.editorParams };
254
- return n.renderer && (r.renderer = this.createTypeRenderer(n.renderer, t)), n.editor && (r.editor = this.createTypeEditor(n.editor, t)), n.filterPanelRenderer && E && (r.filterPanelRenderer = E(n.filterPanelRenderer, t, this.bridgeContext)), r;
292
+ return n.renderer && (r.renderer = this.createTypeRenderer(n.renderer, t)), n.editor && (r.editor = this.createTypeEditor(n.editor, t)), n.filterPanelRenderer && O && (r.filterPanelRenderer = O(n.filterPanelRenderer, t, this.bridgeContext)), r;
255
293
  }
256
294
  createTypeRenderer(t, n) {
257
295
  return (r) => {
@@ -284,7 +322,7 @@ var K = class {
284
322
  for (let e of this.allPortalKeys) t(e);
285
323
  this.allPortalKeys.clear(), this.editorPortalKeys.clear(), this.keyToContainer.clear();
286
324
  for (let e of this.editorBeforeCloseUnsubs.values()) e();
287
- this.editorBeforeCloseUnsubs.clear(), j.clear();
325
+ this.editorBeforeCloseUnsubs.clear(), N.clear();
288
326
  }
289
327
  releaseCell(e) {
290
328
  let n = e.querySelectorAll(".react-cell-renderer, .react-cell-editor");
@@ -292,7 +330,7 @@ var K = class {
292
330
  let n = this.containerToKey.get(e);
293
331
  n && (t(n, { sync: !0 }), this.untrackPortal(n));
294
332
  }
295
- o(e);
333
+ c(e);
296
334
  }
297
335
  unmount(e) {
298
336
  let n = this.containerToKey.get(e);
@@ -306,4 +344,4 @@ var K = class {
306
344
  }
307
345
  };
308
346
  //#endregion
309
- export { k as a, H as c, v as d, h as f, D as i, C as l, z as n, O as o, m as p, R as r, W as s, K as t, y as u };
347
+ export { B as a, A as c, T as d, x as f, g as h, H as i, X as l, _ as m, V as n, k as o, b as p, U as r, j as s, Q as t, J as u };
@@ -0,0 +1,15 @@
1
+ import { useEffect as e, useState as t } from "react";
2
+ //#region libs/grid-react/src/lib/use-grid-is-ready.ts
3
+ function n(n) {
4
+ let [r, i] = t(!1);
5
+ return e(() => {
6
+ let e = !1, t = n();
7
+ if (t) return Promise.resolve(t.ready?.()).then(() => {
8
+ e || i(!0);
9
+ }), () => {
10
+ e = !0;
11
+ };
12
+ }, [n]), r;
13
+ }
14
+ //#endregion
15
+ export { n as t };
@@ -1,8 +1,8 @@
1
- import { a as e, n as t } from "../chunks/react-column-config-Cto2WHGC.js";
1
+ import { n as e, s as t } from "../chunks/react-column-config-CkBIwx2L.js";
2
2
  import "@toolbox-web/grid/features/editing";
3
3
  //#region libs/grid-react/src/features/editing.ts
4
- e(({ container: e, gridEl: n }) => {
5
- let r = t(e);
4
+ t(({ container: t, gridEl: n }) => {
5
+ let r = e(t);
6
6
  return n.addEventListener("before-edit-close", r), () => n.removeEventListener("before-edit-close", r);
7
7
  });
8
8
  //#endregion
@@ -33,6 +33,12 @@ export interface ExportMethods {
33
33
  format: ExportFormat;
34
34
  timestamp: Date;
35
35
  } | null;
36
+ /**
37
+ * Whether the grid has finished its first render.
38
+ *
39
+ * @since 2.5.0
40
+ */
41
+ isReady: boolean;
36
42
  }
37
43
  /**
38
44
  * Hook for programmatic export control.
@@ -1 +1 @@
1
- {"version":3,"file":"export.d.ts","sourceRoot":"","sources":["../../../../libs/grid-react/src/features/export.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AAGH,OAAO,EAAE,KAAK,YAAY,EAAE,KAAK,YAAY,EAAqB,MAAM,kCAAkC,CAAC;AAK3G,OAAO,mCAAmC,CAAC;AAI3C,YAAY,EAAE,aAAa,IAAI,mBAAmB,EAAE,MAAM,mCAAmC,CAAC;AAE9F;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B;;;;OAIG;IACH,WAAW,EAAE,CAAC,QAAQ,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,OAAO,CAAC,YAAY,CAAC,KAAK,IAAI,CAAC;IAEzE;;;;OAIG;IACH,aAAa,EAAE,CAAC,QAAQ,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,OAAO,CAAC,YAAY,CAAC,KAAK,IAAI,CAAC;IAE3E;;;;OAIG;IACH,YAAY,EAAE,CAAC,QAAQ,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,OAAO,CAAC,YAAY,CAAC,KAAK,IAAI,CAAC;IAE1E;;OAEG;IACH,WAAW,EAAE,MAAM,OAAO,CAAC;IAE3B;;OAEG;IACH,aAAa,EAAE,MAAM;QAAE,MAAM,EAAE,YAAY,CAAC;QAAC,SAAS,EAAE,IAAI,CAAA;KAAE,GAAG,IAAI,CAAC;CACvE;AAED;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,wBAAgB,aAAa,CAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,aAAa,CAuE9D"}
1
+ {"version":3,"file":"export.d.ts","sourceRoot":"","sources":["../../../../libs/grid-react/src/features/export.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AAGH,OAAO,EAAE,KAAK,YAAY,EAAE,KAAK,YAAY,EAAqB,MAAM,kCAAkC,CAAC;AAM3G,OAAO,mCAAmC,CAAC;AAI3C,YAAY,EAAE,aAAa,IAAI,mBAAmB,EAAE,MAAM,mCAAmC,CAAC;AAE9F;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B;;;;OAIG;IACH,WAAW,EAAE,CAAC,QAAQ,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,OAAO,CAAC,YAAY,CAAC,KAAK,IAAI,CAAC;IAEzE;;;;OAIG;IACH,aAAa,EAAE,CAAC,QAAQ,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,OAAO,CAAC,YAAY,CAAC,KAAK,IAAI,CAAC;IAE3E;;;;OAIG;IACH,YAAY,EAAE,CAAC,QAAQ,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,OAAO,CAAC,YAAY,CAAC,KAAK,IAAI,CAAC;IAE1E;;OAEG;IACH,WAAW,EAAE,MAAM,OAAO,CAAC;IAE3B;;OAEG;IACH,aAAa,EAAE,MAAM;QAAE,MAAM,EAAE,YAAY,CAAC;QAAC,SAAS,EAAE,IAAI,CAAA;KAAE,GAAG,IAAI,CAAC;IAEtE;;;;OAIG;IACH,OAAO,EAAE,OAAO,CAAC;CAClB;AAED;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,wBAAgB,aAAa,CAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,aAAa,CA6E9D"}
@@ -1,12 +1,13 @@
1
1
  import { t as e } from "../chunks/grid-element-context-DpuQsoie.js";
2
- import { useCallback as t, useContext as n } from "react";
2
+ import { t } from "../chunks/use-grid-is-ready-Baa67cu3.js";
3
+ import { useCallback as n, useContext as r } from "react";
3
4
  import "@toolbox-web/grid/features/export";
4
5
  //#region libs/grid-react/src/features/export.ts
5
- function r(r) {
6
- let i = n(e), a = t(() => (r ? document.querySelector(r) : i?.current)?.getPluginByName("export"), [i, r]);
6
+ function i(i) {
7
+ let a = r(e), o = n(() => i ? document.querySelector(i) : a?.current, [a, i]), s = n(() => o()?.getPluginByName("export"), [o]), c = t(o);
7
8
  return {
8
- exportToCsv: t((e, t) => {
9
- let n = a();
9
+ exportToCsv: n((e, t) => {
10
+ let n = s();
10
11
  if (!n) {
11
12
  console.warn("[tbw-grid:export] ExportPlugin not found.\n\n → Enable export on the grid:\n <DataGrid export />");
12
13
  return;
@@ -15,9 +16,9 @@ function r(r) {
15
16
  ...t,
16
17
  fileName: e ?? t?.fileName ?? "export.csv"
17
18
  });
18
- }, [a]),
19
- exportToExcel: t((e, t) => {
20
- let n = a();
19
+ }, [s]),
20
+ exportToExcel: n((e, t) => {
21
+ let n = s();
21
22
  if (!n) {
22
23
  console.warn("[tbw-grid:export] ExportPlugin not found.\n\n → Enable export on the grid:\n <DataGrid export />");
23
24
  return;
@@ -26,9 +27,9 @@ function r(r) {
26
27
  ...t,
27
28
  fileName: e ?? t?.fileName ?? "export.xlsx"
28
29
  });
29
- }, [a]),
30
- exportToJson: t((e, t) => {
31
- let n = a();
30
+ }, [s]),
31
+ exportToJson: n((e, t) => {
32
+ let n = s();
32
33
  if (!n) {
33
34
  console.warn("[tbw-grid:export] ExportPlugin not found.\n\n → Enable export on the grid:\n <DataGrid export />");
34
35
  return;
@@ -37,10 +38,11 @@ function r(r) {
37
38
  ...t,
38
39
  fileName: e ?? t?.fileName ?? "export.json"
39
40
  });
40
- }, [a]),
41
- isExporting: t(() => a()?.isExporting() ?? !1, [a]),
42
- getLastExport: t(() => a()?.getLastExport() ?? null, [a])
41
+ }, [s]),
42
+ isExporting: n(() => s()?.isExporting() ?? !1, [s]),
43
+ getLastExport: n(() => s()?.getLastExport() ?? null, [s]),
44
+ isReady: c
43
45
  };
44
46
  }
45
47
  //#endregion
46
- export { r as useGridExport };
48
+ export { i as useGridExport };
@@ -66,6 +66,12 @@ export interface FilteringMethods {
66
66
  * Toggle blank filter mode for a field.
67
67
  */
68
68
  toggleBlankFilter: (field: string, mode: BlankMode) => void;
69
+ /**
70
+ * Whether the grid has finished its first render.
71
+ *
72
+ * @since 2.5.0
73
+ */
74
+ isReady: boolean;
69
75
  }
70
76
  /**
71
77
  * Hook for programmatic filter control.
@@ -1 +1 @@
1
- {"version":3,"file":"filtering.d.ts","sourceRoot":"","sources":["../../../../libs/grid-react/src/features/filtering.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+BG;AAGH,OAAO,EAEL,KAAK,SAAS,EAEd,KAAK,WAAW,EAEjB,MAAM,qCAAqC,CAAC;AAiB7C,YAAY,EAAE,aAAa,IAAI,sBAAsB,EAAE,MAAM,sCAAsC,CAAC;AAuDpG;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B;;;;;OAKG;IACH,SAAS,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC,WAAW,EAAE,OAAO,CAAC,GAAG,IAAI,EAAE,OAAO,CAAC,EAAE;QAAE,MAAM,CAAC,EAAE,OAAO,CAAA;KAAE,KAAK,IAAI,CAAC;IAE9G;;OAEG;IACH,SAAS,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,WAAW,GAAG,SAAS,CAAC;IAEtD;;OAEG;IACH,UAAU,EAAE,MAAM,WAAW,EAAE,CAAC;IAEhC;;;OAGG;IACH,cAAc,EAAE,CAAC,OAAO,EAAE,WAAW,EAAE,EAAE,OAAO,CAAC,EAAE;QAAE,MAAM,CAAC,EAAE,OAAO,CAAA;KAAE,KAAK,IAAI,CAAC;IAEjF;;;OAGG;IACH,eAAe,EAAE,CAAC,OAAO,CAAC,EAAE;QAAE,MAAM,CAAC,EAAE,OAAO,CAAA;KAAE,KAAK,IAAI,CAAC;IAE1D;;;OAGG;IACH,gBAAgB,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE;QAAE,MAAM,CAAC,EAAE,OAAO,CAAA;KAAE,KAAK,IAAI,CAAC;IAE1E;;OAEG;IACH,eAAe,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,OAAO,CAAC;IAE5C;;OAEG;IACH,mBAAmB,EAAE,MAAM,MAAM,CAAC;IAElC;;OAEG;IACH,eAAe,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,OAAO,EAAE,CAAC;IAE9C;;OAEG;IACH,eAAe,EAAE,MAAM,WAAW,EAAE,CAAC;IAErC;;OAEG;IACH,YAAY,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,SAAS,CAAC;IAE3C;;OAEG;IACH,iBAAiB,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,SAAS,KAAK,IAAI,CAAC;CAC7D;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AACH,wBAAgB,gBAAgB,CAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,gBAAgB,CAuHpE"}
1
+ {"version":3,"file":"filtering.d.ts","sourceRoot":"","sources":["../../../../libs/grid-react/src/features/filtering.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+BG;AAGH,OAAO,EAEL,KAAK,SAAS,EAEd,KAAK,WAAW,EAEjB,MAAM,qCAAqC,CAAC;AAkB7C,YAAY,EAAE,aAAa,IAAI,sBAAsB,EAAE,MAAM,sCAAsC,CAAC;AAuDpG;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B;;;;;OAKG;IACH,SAAS,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC,WAAW,EAAE,OAAO,CAAC,GAAG,IAAI,EAAE,OAAO,CAAC,EAAE;QAAE,MAAM,CAAC,EAAE,OAAO,CAAA;KAAE,KAAK,IAAI,CAAC;IAE9G;;OAEG;IACH,SAAS,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,WAAW,GAAG,SAAS,CAAC;IAEtD;;OAEG;IACH,UAAU,EAAE,MAAM,WAAW,EAAE,CAAC;IAEhC;;;OAGG;IACH,cAAc,EAAE,CAAC,OAAO,EAAE,WAAW,EAAE,EAAE,OAAO,CAAC,EAAE;QAAE,MAAM,CAAC,EAAE,OAAO,CAAA;KAAE,KAAK,IAAI,CAAC;IAEjF;;;OAGG;IACH,eAAe,EAAE,CAAC,OAAO,CAAC,EAAE;QAAE,MAAM,CAAC,EAAE,OAAO,CAAA;KAAE,KAAK,IAAI,CAAC;IAE1D;;;OAGG;IACH,gBAAgB,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE;QAAE,MAAM,CAAC,EAAE,OAAO,CAAA;KAAE,KAAK,IAAI,CAAC;IAE1E;;OAEG;IACH,eAAe,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,OAAO,CAAC;IAE5C;;OAEG;IACH,mBAAmB,EAAE,MAAM,MAAM,CAAC;IAElC;;OAEG;IACH,eAAe,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,OAAO,EAAE,CAAC;IAE9C;;OAEG;IACH,eAAe,EAAE,MAAM,WAAW,EAAE,CAAC;IAErC;;OAEG;IACH,YAAY,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,SAAS,CAAC;IAE3C;;OAEG;IACH,iBAAiB,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,SAAS,KAAK,IAAI,CAAC;IAE5D;;;;OAIG;IACH,OAAO,EAAE,OAAO,CAAC;CAClB;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AACH,wBAAgB,gBAAgB,CAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,gBAAgB,CA6HpE"}
@@ -1,11 +1,12 @@
1
- import { a as e } from "../chunks/react-grid-adapter-C_TSA5_P.js";
1
+ import { s as e } from "../chunks/react-grid-adapter-DP9A9ytc.js";
2
2
  import { a as t, i as n } from "../chunks/portal-bridge-zxgm_jwK.js";
3
- import { t as r } from "../chunks/feature-registry-8K2rOVnC.js";
3
+ import { o as r } from "../chunks/feature-registry-DKPyd2rV.js";
4
4
  import { t as i } from "../chunks/grid-element-context-DpuQsoie.js";
5
- import { useCallback as a, useContext as o } from "react";
6
- import { FilteringPlugin as s } from "@toolbox-web/grid/plugins/filtering";
5
+ import { t as a } from "../chunks/use-grid-is-ready-Baa67cu3.js";
6
+ import { useCallback as o, useContext as s } from "react";
7
+ import { FilteringPlugin as c } from "@toolbox-web/grid/plugins/filtering";
7
8
  r("filtering", (e) => {
8
- if (typeof e == "boolean" || !e) return new s();
9
+ if (typeof e == "boolean" || !e) return new c();
9
10
  let r = e, i = { ...r };
10
11
  if (typeof r.filterPanelRenderer == "function" && r.filterPanelRenderer.length <= 1) {
11
12
  let e = r.filterPanelRenderer, a = /* @__PURE__ */ new WeakMap();
@@ -18,7 +19,7 @@ r("filtering", (e) => {
18
19
  a.set(r, c), r.appendChild(s);
19
20
  };
20
21
  }
21
- return new s(i);
22
+ return new c(i);
22
23
  }, { override: !0 }), e((e, n, { trackPortal: r }) => {
23
24
  let i = e;
24
25
  return (e, a) => {
@@ -28,57 +29,58 @@ r("filtering", (e) => {
28
29
  r(t(o, i(a), void 0, s), o, !1), e.appendChild(o);
29
30
  };
30
31
  });
31
- function c(e) {
32
- let t = o(i), n = a(() => (e ? document.querySelector(e) : t?.current)?.getPluginByName("filtering"), [t, e]);
32
+ function l(e) {
33
+ let t = s(i), n = o(() => e ? document.querySelector(e) : t?.current, [t, e]), r = o(() => n()?.getPluginByName("filtering"), [n]), c = a(n);
33
34
  return {
34
- setFilter: a((e, t, r) => {
35
- let i = n();
35
+ setFilter: o((e, t, n) => {
36
+ let i = r();
36
37
  if (!i) {
37
38
  console.warn("[tbw-grid:filtering] FilteringPlugin not found.\n\n → Enable filtering on the grid:\n <DataGrid filtering />");
38
39
  return;
39
40
  }
40
- i.setFilter(e, t, r);
41
- }, [n]),
42
- getFilter: a((e) => n()?.getFilter(e), [n]),
43
- getFilters: a(() => n()?.getFilters() ?? [], [n]),
44
- setFilterModel: a((e, t) => {
45
- let r = n();
46
- if (!r) {
41
+ i.setFilter(e, t, n);
42
+ }, [r]),
43
+ getFilter: o((e) => r()?.getFilter(e), [r]),
44
+ getFilters: o(() => r()?.getFilters() ?? [], [r]),
45
+ setFilterModel: o((e, t) => {
46
+ let n = r();
47
+ if (!n) {
47
48
  console.warn("[tbw-grid:filtering] FilteringPlugin not found.\n\n → Enable filtering on the grid:\n <DataGrid filtering />");
48
49
  return;
49
50
  }
50
- r.setFilterModel(e, t);
51
- }, [n]),
52
- clearAllFilters: a((e) => {
53
- let t = n();
51
+ n.setFilterModel(e, t);
52
+ }, [r]),
53
+ clearAllFilters: o((e) => {
54
+ let t = r();
54
55
  if (!t) {
55
56
  console.warn("[tbw-grid:filtering] FilteringPlugin not found.\n\n → Enable filtering on the grid:\n <DataGrid filtering />");
56
57
  return;
57
58
  }
58
59
  t.clearAllFilters(e);
59
- }, [n]),
60
- clearFieldFilter: a((e, t) => {
61
- let r = n();
62
- if (!r) {
60
+ }, [r]),
61
+ clearFieldFilter: o((e, t) => {
62
+ let n = r();
63
+ if (!n) {
63
64
  console.warn("[tbw-grid:filtering] FilteringPlugin not found.\n\n → Enable filtering on the grid:\n <DataGrid filtering />");
64
65
  return;
65
66
  }
66
- r.clearFieldFilter(e, t);
67
- }, [n]),
68
- isFieldFiltered: a((e) => n()?.isFieldFiltered(e) ?? !1, [n]),
69
- getFilteredRowCount: a(() => n()?.getFilteredRowCount() ?? 0, [n]),
70
- getUniqueValues: a((e) => n()?.getUniqueValues(e) ?? [], [n]),
71
- getStaleFilters: a(() => n()?.getStaleFilters() ?? [], [n]),
72
- getBlankMode: a((e) => n()?.getBlankMode(e) ?? "all", [n]),
73
- toggleBlankFilter: a((e, t) => {
74
- let r = n();
75
- if (!r) {
67
+ n.clearFieldFilter(e, t);
68
+ }, [r]),
69
+ isFieldFiltered: o((e) => r()?.isFieldFiltered(e) ?? !1, [r]),
70
+ getFilteredRowCount: o(() => r()?.getFilteredRowCount() ?? 0, [r]),
71
+ getUniqueValues: o((e) => r()?.getUniqueValues(e) ?? [], [r]),
72
+ getStaleFilters: o(() => r()?.getStaleFilters() ?? [], [r]),
73
+ getBlankMode: o((e) => r()?.getBlankMode(e) ?? "all", [r]),
74
+ toggleBlankFilter: o((e, t) => {
75
+ let n = r();
76
+ if (!n) {
76
77
  console.warn("[tbw-grid:filtering] FilteringPlugin not found.\n\n → Enable filtering on the grid:\n <DataGrid filtering />");
77
78
  return;
78
79
  }
79
- r.toggleBlankFilter(e, t);
80
- }, [n])
80
+ n.toggleBlankFilter(e, t);
81
+ }, [r]),
82
+ isReady: c
81
83
  };
82
84
  }
83
85
  //#endregion
84
- export { c as useGridFiltering };
86
+ export { l as useGridFiltering };