@toolbox-web/grid-react 2.3.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-CZfpPJvo.js → react-grid-adapter-DP9A9ytc.js} +132 -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",
@@ -44,6 +44,7 @@ for (let e of [
44
44
  "groupingColumns",
45
45
  "pinnedColumns",
46
46
  "pinnedRows",
47
+ "stickyRows",
47
48
  "masterDetail",
48
49
  "responsive",
49
50
  "columnVirtualization",
@@ -52,24 +53,24 @@ for (let e of [
52
53
  "pivot",
53
54
  "serverSide",
54
55
  "tooltip"
55
- ]) v(e);
56
+ ]) b(e);
56
57
  //#endregion
57
58
  //#region libs/grid-react/src/lib/grid-tool-panel.tsx
58
- var b = /* @__PURE__ */ new WeakMap(), x = /* @__PURE__ */ new Map();
59
- function S(e) {
60
- 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);
61
62
  if (t) return t;
62
63
  let n = e.id;
63
- if (n) return x.get(n);
64
+ if (n) return C.get(n);
64
65
  }
65
- function C(e) {
66
- let { id: t, title: n, icon: r, tooltip: i, order: a = 100, children: o } = e, s = d(null), c = l((e) => {
67
- 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));
68
69
  }, [o, t]);
69
- return u(() => () => {
70
+ return f(() => () => {
70
71
  let e = s.current;
71
- e && (b.delete(e), t && x.delete(t));
72
- }, [t]), /* @__PURE__ */ f("tbw-grid-tool-panel", {
72
+ e && (S.delete(e), t && C.delete(t));
73
+ }, [t]), /* @__PURE__ */ m("tbw-grid-tool-panel", {
73
74
  ref: c,
74
75
  id: t,
75
76
  title: n,
@@ -80,86 +81,116 @@ function C(e) {
80
81
  }
81
82
  //#endregion
82
83
  //#region libs/grid-react/src/lib/react-grid-adapter.ts
83
- var w = null, T = null, E = null;
84
- function D(e) {
85
- w = e;
86
- }
87
- function O(e) {
88
- T = e;
89
- }
84
+ var E = null, D = null, O = null;
90
85
  function k(e) {
91
86
  E = e;
92
87
  }
93
- var A = /* @__PURE__ */ new WeakMap(), j = /* @__PURE__ */ new Map(), M = /* @__PURE__ */ new WeakMap(), N = /* @__PURE__ */ new Map(), P = /* @__PURE__ */ new Set();
94
- 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) {
95
96
  return e.closest("tbw-grid, [data-tbw-grid]") ?? void 0;
96
97
  }
97
- function I(e, t) {
98
- let n = F(e);
99
- if (!n) return N;
100
- 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);
101
102
  if (r || !t) return r;
102
103
  let i = /* @__PURE__ */ new Map();
103
- return M.set(n, i), i;
104
+ return P.set(n, i), i;
104
105
  }
105
- function L(e) {
106
+ function z(e) {
106
107
  return e.tagName.toLowerCase() === "tbw-grid-type" ? e.getAttribute("name") : e.closest("tbw-grid-type")?.getAttribute("name") ?? null;
107
108
  }
108
- function R(e, t) {
109
- let n = e.getAttribute("field"), r = A.get(e) ?? {};
110
- if (r.renderer = t, A.set(e, r), n) {
111
- let e = j.get(n) ?? {};
112
- 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);
113
128
  }
114
129
  }
115
- function z(e, t) {
116
- let n = e.getAttribute("field"), r = A.get(e) ?? {};
117
- if (r.editor = t, A.set(e, r), n) {
118
- let e = j.get(n) ?? {};
119
- 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);
120
135
  }
121
136
  }
122
- function B(e) {
123
- let t = A.get(e)?.renderer;
137
+ function W(e) {
138
+ let t = M.get(e)?.headerRenderer;
124
139
  if (!t) {
125
140
  let n = e.getAttribute("field");
126
- n && (t = j.get(n)?.renderer);
141
+ n && (t = N.get(n)?.headerRenderer);
127
142
  }
128
143
  return t;
129
144
  }
130
- function V(e) {
131
- let t = A.get(e)?.editor;
145
+ function G(e) {
146
+ let t = M.get(e)?.headerLabelRenderer;
132
147
  if (!t) {
133
148
  let n = e.getAttribute("field");
134
- n && (t = j.get(n)?.editor);
149
+ n && (t = N.get(n)?.headerLabelRenderer);
135
150
  }
136
151
  return t;
137
152
  }
138
- function H(e, t) {
139
- 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);
140
171
  if (!n) return;
141
- let r = I(e, !0);
172
+ let r = R(e, !0);
142
173
  if (!r) return;
143
174
  let i = r.get(n) ?? {};
144
- i.renderer = t, r.set(n, i), P.add(n);
175
+ i.renderer = t, r.set(n, i), I.add(n);
145
176
  }
146
- function U(e) {
147
- let t = L(e);
148
- 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;
149
180
  }
150
- function W(e, t) {
151
- let n = L(e);
181
+ function X(e, t) {
182
+ let n = z(e);
152
183
  if (!n) return;
153
- let r = I(e, !0);
184
+ let r = R(e, !0);
154
185
  if (!r) return;
155
186
  let i = r.get(n) ?? {};
156
- i.editor = t, r.set(n, i), P.add(n);
187
+ i.editor = t, r.set(n, i), I.add(n);
157
188
  }
158
- function G(e) {
159
- let t = L(e);
160
- 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;
161
192
  }
162
- var K = class {
193
+ var Q = class {
163
194
  allPortalKeys = /* @__PURE__ */ new Set();
164
195
  editorPortalKeys = /* @__PURE__ */ new Set();
165
196
  keyToContainer = /* @__PURE__ */ new Map();
@@ -170,21 +201,21 @@ var K = class {
170
201
  this.typeDefaults = e;
171
202
  }
172
203
  processConfig(e) {
173
- return a(e) ?? e;
204
+ return s(e) ?? e;
174
205
  }
175
206
  canHandle(e) {
176
- let t = e.getAttribute("field"), n = A.get(e);
207
+ let t = e.getAttribute("field"), n = M.get(e);
177
208
  if (!n && t) {
178
- let r = j.get(t);
179
- 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));
180
211
  }
181
- let r = n?.renderer !== void 0, i = n?.editor !== void 0;
182
- if (n !== void 0 && (r || i)) return !0;
183
- let a = L(e), o = a ? I(e, !1)?.get(a) : void 0;
184
- 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);
185
216
  }
186
217
  createRenderer(n) {
187
- let r = B(n) ?? U(n);
218
+ let r = K(n) ?? Y(n);
188
219
  if (!r) return;
189
220
  let i = n.closest("tbw-grid, [data-tbw-grid]"), a = /* @__PURE__ */ new WeakMap();
190
221
  return (n) => {
@@ -210,32 +241,40 @@ var K = class {
210
241
  };
211
242
  }
212
243
  createEditor(t) {
213
- let n = V(t) ?? G(t);
244
+ let n = q(t) ?? Z(t);
214
245
  if (!n) return () => document.createElement("div");
215
246
  let r = t.closest("tbw-grid, [data-tbw-grid]") ?? void 0;
216
247
  return (t) => {
217
- let a = document.createElement("div");
218
- a.className = "react-cell-editor", a.style.display = "contents";
219
- let o = e(a, n(t), void 0, r);
220
- 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;
221
252
  };
222
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
+ }
223
262
  createDetailRenderer(e) {
224
- return w?.(e, this.bridgeContext);
263
+ return E?.(e, this.bridgeContext);
225
264
  }
226
265
  parseDetailElement(e) {
227
266
  let t = e.closest("tbw-grid, [data-tbw-grid]");
228
267
  if (t) return this.createDetailRenderer(t);
229
268
  }
230
269
  createResponsiveCardRenderer(e) {
231
- return T?.(e, this.bridgeContext);
270
+ return D?.(e, this.bridgeContext);
232
271
  }
233
272
  parseResponsiveCardElement(e) {
234
273
  let t = e.closest("tbw-grid, [data-tbw-grid]");
235
274
  if (t) return this.createResponsiveCardRenderer(t);
236
275
  }
237
276
  createToolPanelRenderer(n) {
238
- let r = S(n);
277
+ let r = w(n);
239
278
  if (!r) return;
240
279
  let i = n.closest("tbw-grid, [data-tbw-grid]");
241
280
  return (n) => {
@@ -250,7 +289,7 @@ var K = class {
250
289
  let n = this.typeDefaults[e];
251
290
  if (!n) return;
252
291
  let r = { editorParams: n.editorParams };
253
- 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;
254
293
  }
255
294
  createTypeRenderer(t, n) {
256
295
  return (r) => {
@@ -283,7 +322,7 @@ var K = class {
283
322
  for (let e of this.allPortalKeys) t(e);
284
323
  this.allPortalKeys.clear(), this.editorPortalKeys.clear(), this.keyToContainer.clear();
285
324
  for (let e of this.editorBeforeCloseUnsubs.values()) e();
286
- this.editorBeforeCloseUnsubs.clear(), j.clear();
325
+ this.editorBeforeCloseUnsubs.clear(), N.clear();
287
326
  }
288
327
  releaseCell(e) {
289
328
  let n = e.querySelectorAll(".react-cell-renderer, .react-cell-editor");
@@ -291,7 +330,7 @@ var K = class {
291
330
  let n = this.containerToKey.get(e);
292
331
  n && (t(n, { sync: !0 }), this.untrackPortal(n));
293
332
  }
294
- o(e);
333
+ c(e);
295
334
  }
296
335
  unmount(e) {
297
336
  let n = this.containerToKey.get(e);
@@ -305,4 +344,4 @@ var K = class {
305
344
  }
306
345
  };
307
346
  //#endregion
308
- 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"}