@toolbox-web/grid-react 0.5.0 → 0.7.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 (100) hide show
  1. package/README.md +158 -2
  2. package/chunks/feature-registry-Y3KvnN54.js +26 -0
  3. package/features/clipboard.d.ts +18 -0
  4. package/features/clipboard.d.ts.map +1 -0
  5. package/features/clipboard.js +6 -0
  6. package/features/column-virtualization.d.ts +16 -0
  7. package/features/column-virtualization.d.ts.map +1 -0
  8. package/features/column-virtualization.js +6 -0
  9. package/features/context-menu.d.ts +16 -0
  10. package/features/context-menu.d.ts.map +1 -0
  11. package/features/context-menu.js +6 -0
  12. package/features/editing.d.ts +16 -0
  13. package/features/editing.d.ts.map +1 -0
  14. package/features/editing.js +3 -0
  15. package/features/export.d.ts +16 -0
  16. package/features/export.d.ts.map +1 -0
  17. package/features/export.js +6 -0
  18. package/features/filtering.d.ts +16 -0
  19. package/features/filtering.d.ts.map +1 -0
  20. package/features/filtering.js +6 -0
  21. package/features/grouping-columns.d.ts +16 -0
  22. package/features/grouping-columns.d.ts.map +1 -0
  23. package/features/grouping-columns.js +6 -0
  24. package/features/grouping-rows.d.ts +16 -0
  25. package/features/grouping-rows.d.ts.map +1 -0
  26. package/features/grouping-rows.js +6 -0
  27. package/features/index.d.ts +1 -0
  28. package/features/index.d.ts.map +1 -0
  29. package/features/index.js +22 -0
  30. package/features/master-detail.d.ts +18 -0
  31. package/features/master-detail.d.ts.map +1 -0
  32. package/features/master-detail.js +6 -0
  33. package/features/pinned-columns.d.ts +16 -0
  34. package/features/pinned-columns.d.ts.map +1 -0
  35. package/features/pinned-columns.js +6 -0
  36. package/features/pinned-rows.d.ts +16 -0
  37. package/features/pinned-rows.d.ts.map +1 -0
  38. package/features/pinned-rows.js +6 -0
  39. package/features/pivot.d.ts +16 -0
  40. package/features/pivot.d.ts.map +1 -0
  41. package/features/pivot.js +3 -0
  42. package/features/print.d.ts +16 -0
  43. package/features/print.d.ts.map +1 -0
  44. package/features/print.js +3 -0
  45. package/features/reorder.d.ts +16 -0
  46. package/features/reorder.d.ts.map +1 -0
  47. package/features/reorder.js +6 -0
  48. package/features/responsive.d.ts +16 -0
  49. package/features/responsive.d.ts.map +1 -0
  50. package/features/responsive.js +6 -0
  51. package/features/row-reorder.d.ts +16 -0
  52. package/features/row-reorder.d.ts.map +1 -0
  53. package/features/row-reorder.js +3 -0
  54. package/features/selection.d.ts +16 -0
  55. package/features/selection.d.ts.map +1 -0
  56. package/features/selection.js +3 -0
  57. package/features/server-side.d.ts +16 -0
  58. package/features/server-side.d.ts.map +1 -0
  59. package/features/server-side.js +3 -0
  60. package/features/sorting.d.ts +16 -0
  61. package/features/sorting.d.ts.map +1 -0
  62. package/features/sorting.js +3 -0
  63. package/features/tree.d.ts +16 -0
  64. package/features/tree.d.ts.map +1 -0
  65. package/features/tree.js +6 -0
  66. package/features/undo-redo.d.ts +18 -0
  67. package/features/undo-redo.d.ts.map +1 -0
  68. package/features/undo-redo.js +6 -0
  69. package/features/visibility.d.ts +16 -0
  70. package/features/visibility.d.ts.map +1 -0
  71. package/features/visibility.js +6 -0
  72. package/index.d.ts +6 -3
  73. package/index.d.ts.map +1 -1
  74. package/index.js +608 -420
  75. package/lib/column-shorthand.d.ts +59 -0
  76. package/lib/column-shorthand.d.ts.map +1 -0
  77. package/lib/context-types.d.ts +1 -1
  78. package/lib/data-grid.d.ts +61 -26
  79. package/lib/data-grid.d.ts.map +1 -1
  80. package/lib/event-props.d.ts +305 -0
  81. package/lib/event-props.d.ts.map +1 -0
  82. package/lib/feature-props.d.ts +320 -0
  83. package/lib/feature-props.d.ts.map +1 -0
  84. package/lib/feature-registry.d.ts +56 -0
  85. package/lib/feature-registry.d.ts.map +1 -0
  86. package/lib/grid-column.d.ts +1 -1
  87. package/lib/grid-detail-panel.d.ts +3 -0
  88. package/lib/grid-detail-panel.d.ts.map +1 -1
  89. package/lib/grid-responsive-card.d.ts +3 -0
  90. package/lib/grid-responsive-card.d.ts.map +1 -1
  91. package/lib/grid-type-registry.d.ts +1 -1
  92. package/lib/react-column-config.d.ts +1 -1
  93. package/lib/react-grid-adapter.d.ts +1 -1
  94. package/lib/use-grid-event.d.ts +23 -19
  95. package/lib/use-grid-event.d.ts.map +1 -1
  96. package/lib/use-grid.d.ts +46 -2
  97. package/lib/use-grid.d.ts.map +1 -1
  98. package/lib/use-sync-plugins.d.ts +21 -0
  99. package/lib/use-sync-plugins.d.ts.map +1 -0
  100. package/package.json +11 -1
package/index.js CHANGED
@@ -1,205 +1,258 @@
1
- import { jsx as x } from "react/jsx-runtime";
2
- import { DataGridElement as J } from "@toolbox-web/grid";
3
- import { useRef as S, useCallback as E, useEffect as w, createContext as K, useContext as z, forwardRef as Q, useMemo as U, useImperativeHandle as X, useState as O } from "react";
4
- import { flushSync as v } from "react-dom";
5
- import { createRoot as b } from "react-dom/client";
6
- const L = /* @__PURE__ */ new WeakMap(), N = /* @__PURE__ */ new Map();
7
- function j(n) {
8
- const t = n.querySelector("tbw-grid-detail");
9
- if (t) {
10
- const r = L.get(t);
11
- if (r) return r;
12
- }
13
- const e = n.id || n.getAttribute("data-grid-id");
14
- if (e)
15
- return N.get(e);
1
+ import { jsx as V } from "react/jsx-runtime";
2
+ import { DataGridElement as ae } from "@toolbox-web/grid";
3
+ import { useRef as P, useCallback as y, useEffect as h, createContext as de, useContext as Z, forwardRef as ue, useMemo as D, useImperativeHandle as le, Children as fe, isValidElement as ge, useState as ne } from "react";
4
+ import { flushSync as b } from "react-dom";
5
+ import { createRoot as S } from "react-dom/client";
6
+ import { c as pe } from "./chunks/feature-registry-Y3KvnN54.js";
7
+ function me(r) {
8
+ return r.charAt(0).toUpperCase() + r.slice(1);
16
9
  }
17
- function me(n) {
18
- const { children: t, showExpandColumn: e = !0, animation: r = "slide" } = n, i = S(null), s = E(
19
- (c) => {
20
- if (i.current = c, !c) return;
21
- L.set(c, t);
22
- const d = c.closest("tbw-grid");
23
- if (d) {
24
- const u = d.id || d.getAttribute("data-grid-id");
25
- u && N.set(u, t);
26
- }
27
- },
28
- [t]
29
- );
30
- return w(() => () => {
31
- const c = i.current;
32
- if (c) {
33
- L.delete(c);
34
- const d = c.closest("tbw-grid");
35
- if (d) {
36
- const h = d.id || d.getAttribute("data-grid-id");
37
- h && N.delete(h);
38
- }
39
- const u = c.parentNode;
40
- u && u.contains(c);
41
- }
42
- }, []), /* @__PURE__ */ x(
43
- "tbw-grid-detail",
44
- {
45
- ref: s,
46
- showExpandColumn: e ? void 0 : "false",
47
- animation: r === !1 ? "false" : r
10
+ function oe(r) {
11
+ return r.toLowerCase() === "id" ? "ID" : r.replace(/([a-z])([A-Z])/g, "$1 $2").replace(/[_-]/g, " ").split(" ").filter(Boolean).map(me).join(" ");
12
+ }
13
+ const ye = /* @__PURE__ */ new Set(["string", "number", "boolean", "date", "datetime", "currency"]);
14
+ function he(r) {
15
+ const t = r.lastIndexOf(":");
16
+ if (t > 0) {
17
+ const e = r.slice(t + 1).toLowerCase();
18
+ if (ye.has(e)) {
19
+ const n = r.slice(0, t);
20
+ return {
21
+ field: n,
22
+ header: oe(n),
23
+ type: e
24
+ };
48
25
  }
49
- );
26
+ }
27
+ return {
28
+ field: r,
29
+ header: oe(r)
30
+ };
31
+ }
32
+ function we(r) {
33
+ return r.map((t) => typeof t == "string" ? he(t) : t);
50
34
  }
51
- const F = /* @__PURE__ */ new WeakMap(), H = /* @__PURE__ */ new Map();
52
- function $(n) {
53
- const t = n.querySelector("tbw-grid-responsive-card");
35
+ const q = {
36
+ onCellClick: "cell-click",
37
+ onRowClick: "row-click",
38
+ onCellActivate: "cell-activate",
39
+ onCellChange: "cell-change",
40
+ onCellCommit: "cell-commit",
41
+ onRowCommit: "row-commit",
42
+ onSortChange: "sort-change",
43
+ onFilterChange: "filter-change",
44
+ onColumnResize: "column-resize",
45
+ onColumnMove: "column-move",
46
+ onColumnVisibility: "column-visibility",
47
+ onColumnStateChange: "column-state-change",
48
+ onSelectionChange: "selection-change",
49
+ onRowMove: "row-move",
50
+ onGroupToggle: "group-toggle",
51
+ onTreeExpand: "tree-expand",
52
+ onDetailExpand: "detail-expand",
53
+ onResponsiveChange: "responsive-change",
54
+ onCopy: "copy",
55
+ onPaste: "paste",
56
+ onUndoRedo: "undo-redo",
57
+ onExportComplete: "export-complete",
58
+ onPrintStart: "print-start",
59
+ onPrintComplete: "print-complete"
60
+ }, _ = /* @__PURE__ */ new WeakMap(), W = /* @__PURE__ */ new Map();
61
+ function ce(r) {
62
+ const t = r.querySelector("tbw-grid-responsive-card");
54
63
  if (t) {
55
- const r = F.get(t);
56
- if (r) return r;
64
+ const n = _.get(t);
65
+ if (n) return n;
57
66
  }
58
- const e = n.id || n.getAttribute("data-grid-id");
67
+ const e = r.id || r.getAttribute("data-grid-id");
59
68
  if (e)
60
- return H.get(e);
69
+ return W.get(e);
61
70
  }
62
- function ye(n) {
63
- const { children: t, cardRowHeight: e = "auto" } = n, r = S(null), i = E(
64
- (o) => {
65
- if (r.current = o, !o) return;
66
- F.set(o, t);
67
- const c = o.closest("tbw-grid");
68
- if (c) {
69
- const d = c.id || c.getAttribute("data-grid-id");
70
- d && H.set(d, t);
71
+ function ve(r) {
72
+ const { children: t, cardRowHeight: e = "auto" } = r, n = P(null), o = y(
73
+ (i) => {
74
+ if (n.current = i, !i) return;
75
+ _.set(i, t);
76
+ const d = i.closest("tbw-grid");
77
+ if (d) {
78
+ const u = d.id || d.getAttribute("data-grid-id");
79
+ u && W.set(u, t);
71
80
  }
72
81
  },
73
82
  [t]
74
83
  );
75
- w(() => () => {
76
- const o = r.current;
77
- if (o) {
78
- F.delete(o);
79
- const c = o.closest("tbw-grid");
80
- if (c) {
81
- const d = c.id || c.getAttribute("data-grid-id");
82
- d && H.delete(d);
84
+ h(() => () => {
85
+ const i = n.current;
86
+ if (i) {
87
+ _.delete(i);
88
+ const d = i.closest("tbw-grid");
89
+ if (d) {
90
+ const u = d.id || d.getAttribute("data-grid-id");
91
+ u && W.delete(u);
83
92
  }
84
93
  }
85
94
  }, []);
86
95
  const s = e === "auto" ? "auto" : String(e);
87
- return /* @__PURE__ */ x("tbw-grid-responsive-card", { ref: i, cardRowHeight: s });
96
+ return /* @__PURE__ */ V("tbw-grid-responsive-card", { ref: o, cardRowHeight: s });
88
97
  }
89
- const T = K(null), he = ({ defaults: n, children: t }) => /* @__PURE__ */ x(T.Provider, { value: n, children: t });
90
- function we() {
91
- return z(T);
98
+ ve.displayName = "GridResponsiveCard";
99
+ const H = de(null), _e = ({ defaults: r, children: t }) => /* @__PURE__ */ V(H.Provider, { value: r, children: t });
100
+ function We() {
101
+ return Z(H);
92
102
  }
93
- function Re(n) {
94
- return z(T)?.[n];
103
+ function $e(r) {
104
+ return Z(H)?.[r];
95
105
  }
96
- const Y = T;
97
- function Z(n) {
106
+ const Ce = H;
107
+ function Re(r) {
98
108
  const t = /* @__PURE__ */ new WeakMap();
99
109
  return (e) => {
100
- const r = e.cellEl;
101
- if (r) {
102
- const o = t.get(r);
103
- if (o)
104
- return v(() => {
105
- o.root.render(n(e));
106
- }), o.container;
110
+ const n = e.cellEl;
111
+ if (n) {
112
+ const i = t.get(n);
113
+ if (i)
114
+ return b(() => {
115
+ i.root.render(r(e));
116
+ }), i.container;
107
117
  }
108
- const i = document.createElement("div");
109
- i.className = "react-cell-renderer", i.style.display = "contents";
110
- const s = b(i);
111
- return v(() => {
112
- s.render(n(e));
113
- }), r && t.set(r, { root: s, container: i }), i;
118
+ const o = document.createElement("div");
119
+ o.className = "react-cell-renderer", o.style.display = "contents";
120
+ const s = S(o);
121
+ return b(() => {
122
+ s.render(r(e));
123
+ }), n && t.set(n, { root: s, container: o }), o;
114
124
  };
115
125
  }
116
- function ee(n) {
126
+ function be(r) {
117
127
  return (t) => {
118
128
  const e = document.createElement("div");
119
129
  e.className = "react-cell-editor", e.style.display = "contents";
120
- const r = b(e);
121
- return v(() => {
122
- r.render(n(t));
130
+ const n = S(e);
131
+ return b(() => {
132
+ n.render(r(t));
123
133
  }), e;
124
134
  };
125
135
  }
126
- function te(n) {
127
- if (!n) return;
128
- if (!n.columns) return n;
129
- const t = n.columns.map((e) => {
130
- const { renderer: r, editor: i, ...s } = e, o = { ...s };
131
- return r && (o.renderer = Z(r)), i && (o.editor = ee(i)), o;
136
+ function Ee(r) {
137
+ if (!r) return;
138
+ if (!r.columns) return r;
139
+ const t = r.columns.map((e) => {
140
+ const { renderer: n, editor: o, ...s } = e, i = { ...s };
141
+ return n && (i.renderer = Re(n)), o && (i.editor = be(o)), i;
132
142
  });
133
143
  return {
134
- ...n,
144
+ ...r,
135
145
  columns: t
136
146
  };
137
147
  }
138
- const W = /* @__PURE__ */ new WeakMap(), q = /* @__PURE__ */ new Map();
139
- function re(n) {
140
- const t = W.get(n);
148
+ const $ = /* @__PURE__ */ new WeakMap(), J = /* @__PURE__ */ new Map();
149
+ function Se(r) {
150
+ const t = r.querySelector("tbw-grid-detail");
151
+ if (t) {
152
+ const n = $.get(t);
153
+ if (n) return n;
154
+ }
155
+ const e = r.id || r.getAttribute("data-grid-id");
156
+ if (e)
157
+ return J.get(e);
158
+ }
159
+ function xe(r) {
160
+ const { children: t, showExpandColumn: e = !0, animation: n = "slide" } = r, o = P(null), s = y(
161
+ (d) => {
162
+ if (o.current = d, !d) return;
163
+ $.set(d, t);
164
+ const u = d.closest("tbw-grid");
165
+ if (u) {
166
+ const g = u.id || u.getAttribute("data-grid-id");
167
+ g && J.set(g, t);
168
+ }
169
+ },
170
+ [t]
171
+ );
172
+ return h(() => () => {
173
+ const d = o.current;
174
+ if (d) {
175
+ $.delete(d);
176
+ const u = d.closest("tbw-grid");
177
+ if (u) {
178
+ const v = u.id || u.getAttribute("data-grid-id");
179
+ v && J.delete(v);
180
+ }
181
+ const g = d.parentNode;
182
+ g && g.contains(d);
183
+ }
184
+ }, []), /* @__PURE__ */ V(
185
+ "tbw-grid-detail",
186
+ {
187
+ ref: s,
188
+ showExpandColumn: e ? void 0 : "false",
189
+ animation: n === !1 ? "false" : n
190
+ }
191
+ );
192
+ }
193
+ xe.displayName = "GridDetailPanel";
194
+ const U = /* @__PURE__ */ new WeakMap(), K = /* @__PURE__ */ new Map();
195
+ function De(r) {
196
+ const t = U.get(r);
141
197
  if (t) return t;
142
- const e = n.id;
198
+ const e = r.id;
143
199
  if (e)
144
- return q.get(e);
200
+ return K.get(e);
145
201
  }
146
- function ve(n) {
147
- const { id: t, title: e, icon: r, tooltip: i, order: s = 100, children: o } = n, c = S(null), d = E(
148
- (u) => {
149
- c.current = u, u && (W.set(u, o), t && q.set(t, o));
202
+ function Je(r) {
203
+ const { id: t, title: e, icon: n, tooltip: o, order: s = 100, children: i } = r, d = P(null), u = y(
204
+ (g) => {
205
+ d.current = g, g && (U.set(g, i), t && K.set(t, i));
150
206
  },
151
- [o, t]
207
+ [i, t]
152
208
  );
153
- return w(() => () => {
154
- const u = c.current;
155
- u && (W.delete(u), t && q.delete(t));
156
- }, [t]), /* @__PURE__ */ x(
209
+ return h(() => () => {
210
+ const g = d.current;
211
+ g && (U.delete(g), t && K.delete(t));
212
+ }, [t]), /* @__PURE__ */ V(
157
213
  "tbw-grid-tool-panel",
158
214
  {
159
- ref: d,
215
+ ref: u,
160
216
  id: t,
161
217
  title: e,
162
- icon: r,
163
- tooltip: i,
218
+ icon: n,
219
+ tooltip: o,
164
220
  order: s?.toString()
165
221
  }
166
222
  );
167
223
  }
168
- const G = /* @__PURE__ */ new WeakMap(), k = /* @__PURE__ */ new Map();
169
- function ne(n, t) {
170
- const e = n.getAttribute("field"), r = G.get(n) ?? {};
171
- if (r.renderer = t, G.set(n, r), e) {
172
- const i = k.get(e) ?? {};
173
- i.renderer = t, k.set(e, i);
224
+ const G = /* @__PURE__ */ new WeakMap(), T = /* @__PURE__ */ new Map();
225
+ function Pe(r, t) {
226
+ const e = r.getAttribute("field"), n = G.get(r) ?? {};
227
+ if (n.renderer = t, G.set(r, n), e) {
228
+ const o = T.get(e) ?? {};
229
+ o.renderer = t, T.set(e, o);
174
230
  }
175
231
  }
176
- function ie(n, t) {
177
- const e = n.getAttribute("field"), r = G.get(n) ?? {};
178
- if (r.editor = t, G.set(n, r), e) {
179
- const i = k.get(e) ?? {};
180
- i.editor = t, k.set(e, i);
232
+ function Ge(r, t) {
233
+ const e = r.getAttribute("field"), n = G.get(r) ?? {};
234
+ if (n.editor = t, G.set(r, n), e) {
235
+ const o = T.get(e) ?? {};
236
+ o.editor = t, T.set(e, o);
181
237
  }
182
238
  }
183
- function oe(n) {
184
- let t = G.get(n)?.renderer;
239
+ function Ae(r) {
240
+ let t = G.get(r)?.renderer;
185
241
  if (!t) {
186
- const e = n.getAttribute("field");
187
- e && (t = k.get(e)?.renderer);
242
+ const e = r.getAttribute("field");
243
+ e && (t = T.get(e)?.renderer);
188
244
  }
189
245
  return t;
190
246
  }
191
- function se(n) {
192
- let t = G.get(n)?.editor;
247
+ function Ne(r) {
248
+ let t = G.get(r)?.editor;
193
249
  if (!t) {
194
- const e = n.getAttribute("field");
195
- e && (t = k.get(e)?.editor);
250
+ const e = r.getAttribute("field");
251
+ e && (t = T.get(e)?.editor);
196
252
  }
197
253
  return t;
198
254
  }
199
- function Ce() {
200
- return Array.from(k.keys());
201
- }
202
- class ce {
255
+ class Ie {
203
256
  mountedViews = [];
204
257
  typeDefaults = null;
205
258
  /**
@@ -217,13 +270,13 @@ class ce {
217
270
  */
218
271
  canHandle(t) {
219
272
  const e = t.getAttribute("field");
220
- let r = G.get(t);
221
- if (!r && e) {
222
- const o = k.get(e);
223
- o && (o.renderer || o.editor) && (r = o, G.set(t, r));
273
+ let n = G.get(t);
274
+ if (!n && e) {
275
+ const i = T.get(e);
276
+ i && (i.renderer || i.editor) && (n = i, G.set(t, n));
224
277
  }
225
- const i = r?.renderer !== void 0, s = r?.editor !== void 0;
226
- return r !== void 0 && (i || s);
278
+ const o = n?.renderer !== void 0, s = n?.editor !== void 0;
279
+ return n !== void 0 && (o || s);
227
280
  }
228
281
  /**
229
282
  * Creates a view renderer function that renders a React component
@@ -237,31 +290,31 @@ class ce {
237
290
  * allowing the grid to use its default rendering.
238
291
  */
239
292
  createRenderer(t) {
240
- const e = oe(t);
293
+ const e = Ae(t);
241
294
  if (!e)
242
295
  return;
243
- const r = /* @__PURE__ */ new WeakMap();
244
- return (i) => {
245
- const s = i.cellEl;
296
+ const n = /* @__PURE__ */ new WeakMap();
297
+ return (o) => {
298
+ const s = o.cellEl;
246
299
  if (s) {
247
- const d = r.get(s);
248
- if (d)
249
- return v(() => {
250
- d.root.render(e(i));
251
- }), d.container;
252
- const u = document.createElement("div");
253
- u.className = "react-cell-renderer", u.style.display = "contents";
254
- const h = b(u);
255
- return v(() => {
256
- h.render(e(i));
257
- }), r.set(s, { root: h, container: u, lastRowIndex: i.rowIndex ?? -1 }), this.mountedViews.push({ root: h, container: u }), u;
300
+ const u = n.get(s);
301
+ if (u)
302
+ return b(() => {
303
+ u.root.render(e(o));
304
+ }), u.container;
305
+ const g = document.createElement("div");
306
+ g.className = "react-cell-renderer", g.style.display = "contents";
307
+ const v = S(g);
308
+ return b(() => {
309
+ v.render(e(o));
310
+ }), n.set(s, { root: v, container: g, lastRowIndex: o.rowIndex ?? -1 }), this.mountedViews.push({ root: v, container: g }), g;
258
311
  }
259
- const o = document.createElement("div");
260
- o.className = "react-cell-renderer", o.style.display = "contents";
261
- const c = b(o);
262
- return v(() => {
263
- c.render(e(i));
264
- }), this.mountedViews.push({ root: c, container: o }), o;
312
+ const i = document.createElement("div");
313
+ i.className = "react-cell-renderer", i.style.display = "contents";
314
+ const d = S(i);
315
+ return b(() => {
316
+ d.render(e(o));
317
+ }), this.mountedViews.push({ root: d, container: i }), i;
265
318
  };
266
319
  }
267
320
  /**
@@ -269,14 +322,14 @@ class ce {
269
322
  * with commit/cancel callbacks passed as props.
270
323
  */
271
324
  createEditor(t) {
272
- const e = se(t);
273
- return e ? (r) => {
274
- const i = document.createElement("div");
275
- i.className = "react-cell-editor", i.style.display = "contents";
276
- const s = b(i);
277
- return v(() => {
278
- s.render(e(r));
279
- }), this.mountedViews.push({ root: s, container: i }), i;
325
+ const e = Ne(t);
326
+ return e ? (n) => {
327
+ const o = document.createElement("div");
328
+ o.className = "react-cell-editor", o.style.display = "contents";
329
+ const s = S(o);
330
+ return b(() => {
331
+ s.render(e(n));
332
+ }), this.mountedViews.push({ root: s, container: o }), o;
280
333
  } : () => document.createElement("div");
281
334
  }
282
335
  /**
@@ -284,15 +337,15 @@ class ce {
284
337
  * Renders React components for expandable detail rows.
285
338
  */
286
339
  createDetailRenderer(t) {
287
- const e = j(t);
340
+ const e = Se(t);
288
341
  if (e)
289
- return (r, i) => {
342
+ return (n, o) => {
290
343
  const s = document.createElement("div");
291
344
  s.className = "react-detail-panel";
292
- const o = { row: r, rowIndex: i }, c = b(s);
293
- return v(() => {
294
- c.render(e(o));
295
- }), this.mountedViews.push({ root: c, container: s }), s;
345
+ const i = { row: n, rowIndex: o }, d = S(s);
346
+ return b(() => {
347
+ d.render(e(i));
348
+ }), this.mountedViews.push({ root: d, container: s }), s;
296
349
  };
297
350
  }
298
351
  /**
@@ -309,15 +362,15 @@ class ce {
309
362
  * Renders React components for card layout in responsive mode.
310
363
  */
311
364
  createResponsiveCardRenderer(t) {
312
- const e = $(t);
365
+ const e = ce(t);
313
366
  if (e)
314
- return (r, i) => {
367
+ return (n, o) => {
315
368
  const s = document.createElement("div");
316
369
  s.className = "react-responsive-card";
317
- const o = { row: r, index: i }, c = b(s);
318
- return v(() => {
319
- c.render(e(o));
320
- }), this.mountedViews.push({ root: c, container: s }), s;
370
+ const i = { row: n, index: o }, d = S(s);
371
+ return b(() => {
372
+ d.render(e(i));
373
+ }), this.mountedViews.push({ root: d, container: s }), s;
321
374
  };
322
375
  }
323
376
  /**
@@ -325,25 +378,25 @@ class ce {
325
378
  * Renders React components into tool panel containers.
326
379
  */
327
380
  createToolPanelRenderer(t) {
328
- const e = re(t);
381
+ const e = De(t);
329
382
  if (!e)
330
383
  return;
331
- const r = t.closest("tbw-grid");
332
- return (i) => {
384
+ const n = t.closest("tbw-grid");
385
+ return (o) => {
333
386
  const s = {
334
- grid: r ?? i
335
- }, o = b(i);
336
- return v(() => {
337
- o.render(e(s));
338
- }), this.mountedViews.push({ root: o, container: i }), () => {
339
- const c = this.mountedViews.findIndex((d) => d.container === i);
340
- if (c !== -1) {
341
- const { root: d } = this.mountedViews[c];
387
+ grid: n ?? o
388
+ }, i = S(o);
389
+ return b(() => {
390
+ i.render(e(s));
391
+ }), this.mountedViews.push({ root: i, container: o }), () => {
392
+ const d = this.mountedViews.findIndex((u) => u.container === o);
393
+ if (d !== -1) {
394
+ const { root: u } = this.mountedViews[d];
342
395
  try {
343
- d.unmount();
396
+ u.unmount();
344
397
  } catch {
345
398
  }
346
- this.mountedViews.splice(c, 1);
399
+ this.mountedViews.splice(d, 1);
347
400
  }
348
401
  };
349
402
  };
@@ -378,10 +431,10 @@ class ce {
378
431
  const e = this.typeDefaults[t];
379
432
  if (!e)
380
433
  return;
381
- const r = {
434
+ const n = {
382
435
  editorParams: e.editorParams
383
436
  };
384
- return e.renderer && (r.renderer = this.createTypeRenderer(e.renderer)), e.editor && (r.editor = this.createTypeEditor(e.editor)), r;
437
+ return e.renderer && (n.renderer = this.createTypeRenderer(e.renderer)), e.editor && (n.editor = this.createTypeEditor(e.editor)), n;
385
438
  }
386
439
  /**
387
440
  * Creates a renderer function from a React render function for type defaults.
@@ -389,12 +442,12 @@ class ce {
389
442
  */
390
443
  createTypeRenderer(t) {
391
444
  return (e) => {
392
- const r = document.createElement("span");
393
- r.style.display = "contents";
394
- const i = b(r);
395
- return this.mountedViews.push({ root: i, container: r }), v(() => {
396
- i.render(t(e));
397
- }), r;
445
+ const n = document.createElement("span");
446
+ n.style.display = "contents";
447
+ const o = S(n);
448
+ return this.mountedViews.push({ root: o, container: n }), b(() => {
449
+ o.render(t(e));
450
+ }), n;
398
451
  };
399
452
  }
400
453
  /**
@@ -403,12 +456,12 @@ class ce {
403
456
  */
404
457
  createTypeEditor(t) {
405
458
  return (e) => {
406
- const r = document.createElement("span");
407
- r.style.display = "contents";
408
- const i = b(r);
409
- return this.mountedViews.push({ root: i, container: r }), v(() => {
410
- i.render(t(e));
411
- }), r;
459
+ const n = document.createElement("span");
460
+ n.style.display = "contents";
461
+ const o = S(n);
462
+ return this.mountedViews.push({ root: o, container: n }), b(() => {
463
+ o.render(t(e));
464
+ }), n;
412
465
  };
413
466
  }
414
467
  /**
@@ -427,290 +480,425 @@ class ce {
427
480
  * Unmount a specific container (called when cell is recycled).
428
481
  */
429
482
  unmount(t) {
430
- const e = this.mountedViews.findIndex((r) => r.container === t);
483
+ const e = this.mountedViews.findIndex((n) => n.container === t);
431
484
  if (e !== -1) {
432
- const { root: r } = this.mountedViews[e];
485
+ const { root: n } = this.mountedViews[e];
433
486
  try {
434
- r.unmount();
487
+ n.unmount();
435
488
  } catch {
436
489
  }
437
490
  this.mountedViews.splice(e, 1);
438
491
  }
439
492
  }
440
493
  }
441
- let _ = !1, M = null;
442
- function B() {
443
- return _ || (M = new ce(), J.registerAdapter(M), _ = !0), M;
494
+ const Te = {
495
+ undoRedo: ["editing"],
496
+ clipboard: ["selection"]
497
+ };
498
+ function Ve(r) {
499
+ const t = new Set(r);
500
+ for (const e of r) {
501
+ const n = Te[e];
502
+ if (n)
503
+ for (const o of n)
504
+ t.has(o) || console.warn(
505
+ `[DataGrid] Feature "${e}" requires "${o}" to be enabled. Add the "${o}" prop to your DataGrid.`
506
+ );
507
+ }
444
508
  }
445
- B();
446
- function de(n, t) {
447
- const e = n, r = e.getPluginByName?.("masterDetail");
448
- if (r && typeof r.refreshDetailRenderer == "function") {
449
- r.refreshDetailRenderer();
450
- return;
509
+ function ke(r) {
510
+ const t = [], e = [];
511
+ for (const [s, i] of Object.entries(r)) {
512
+ if (i === void 0 || i === !1) continue;
513
+ const d = s;
514
+ e.push(d);
451
515
  }
452
- const i = n.querySelector("tbw-grid-detail");
453
- !i || !j(n) || import("@toolbox-web/grid/all").then(({ MasterDetailPlugin: o }) => {
454
- const c = t.createDetailRenderer(n);
455
- if (!c) return;
456
- const d = i.getAttribute("animation");
457
- let u = "slide";
458
- d === "false" ? u = !1 : d === "fade" && (u = "fade");
459
- const h = i.getAttribute("showExpandColumn") !== "false", l = new o({
460
- detailRenderer: c,
461
- showExpandColumn: h,
462
- animation: u
463
- }), p = e.gridConfig || {}, D = p.plugins || [];
464
- e.gridConfig = {
465
- ...p,
466
- plugins: [...D, l]
467
- };
468
- }).catch(() => {
469
- });
516
+ Ve(e);
517
+ const n = [
518
+ "selection",
519
+ "editing",
520
+ // Then everything else in the order they were specified
521
+ ...e.filter((s) => s !== "selection" && s !== "editing")
522
+ ], o = [...new Set(n)].filter((s) => e.includes(s));
523
+ for (const s of o) {
524
+ const i = r[s];
525
+ if (i === void 0 || i === !1) continue;
526
+ const d = pe(s, i);
527
+ d && t.push(d);
528
+ }
529
+ return t;
530
+ }
531
+ let ie = !1, z = null;
532
+ function Y() {
533
+ return ie || (z = new Ie(), ae.registerAdapter(z), ie = !0), z;
534
+ }
535
+ Y();
536
+ function Fe(r) {
537
+ const e = r.getPluginByName?.("masterDetail");
538
+ e && typeof e.refreshDetailRenderer == "function" && e.refreshDetailRenderer();
470
539
  }
471
- function ae(n, t) {
472
- const e = n;
473
- if (!n.querySelector("tbw-grid-responsive-card") || !$(n)) return;
540
+ function Me(r, t) {
541
+ const e = r;
542
+ if (!r.querySelector("tbw-grid-responsive-card") || !ce(r)) return;
474
543
  const s = e.getPluginByName?.("responsive");
475
544
  if (s && typeof s.setCardRenderer == "function") {
476
- const o = t.createResponsiveCardRenderer(n);
477
- o && s.setCardRenderer(o);
478
- return;
545
+ const i = t.createResponsiveCardRenderer(r);
546
+ i && s.setCardRenderer(i);
479
547
  }
480
- console.warn(
481
- `[tbw-grid-react] <GridResponsiveCard> found but ResponsivePlugin is not configured.
482
- Add ResponsivePlugin to your gridConfig.plugins array:
483
-
484
- import { ResponsivePlugin } from "@toolbox-web/grid/all";
485
- const config = {
486
- plugins: [new ResponsivePlugin({ breakpoint: 500 })],
487
- };`
488
- );
489
548
  }
490
- const be = Q(function(t, e) {
549
+ function Le(r) {
550
+ const t = {};
551
+ return fe.forEach(r, (e) => {
552
+ if (ge(e)) {
553
+ if (e.type && e.type.displayName === "GridDetailPanel") {
554
+ const n = e.props;
555
+ t.masterDetail = {
556
+ // Use props from the child component for configuration
557
+ showExpandColumn: n.showExpandColumn ?? !0,
558
+ animation: n.animation ?? "slide"
559
+ // detailRenderer will be wired up by refreshMasterDetailRenderer after mount
560
+ };
561
+ }
562
+ e.type && e.type.displayName === "GridResponsiveCard" && (t.responsive = !0);
563
+ }
564
+ }), t;
565
+ }
566
+ const Ue = ue(function(t, e) {
491
567
  const {
492
- rows: r,
493
- gridConfig: i,
568
+ // Core props
569
+ rows: n,
570
+ gridConfig: o,
494
571
  columns: s,
495
- fitMode: o,
496
- editOn: c,
497
- customStyles: d,
498
- className: u,
499
- style: h,
500
- children: l,
501
- onRowsChange: p,
502
- onCellEdit: D,
503
- onRowClick: A,
504
- onColumnStateChange: P,
505
- onSortChange: I
506
- } = t, f = S(null), V = S(null), y = z(Y), C = U(() => te(i), [i]);
507
- return w(() => {
508
- B().setTypeDefaults(y);
509
- }, [y]), w(() => {
510
- f.current && (f.current.rows = r);
511
- }, [r]), w(() => {
512
- f.current && C && (f.current.gridConfig = C);
513
- }, [C]), w(() => {
514
- f.current && s && (f.current.columns = s);
515
- }, [s]), w(() => {
516
- f.current && o !== void 0 && (f.current.fitMode = o);
517
- }, [o]), w(() => {
518
- f.current && c !== void 0 && (f.current.editOn = c);
519
- }, [c]), w(() => {
520
- const a = f.current;
572
+ columnDefaults: i,
573
+ fitMode: d,
574
+ editOn: u,
575
+ customStyles: g,
576
+ className: v,
577
+ style: A,
578
+ children: x,
579
+ // Plugin props
580
+ plugins: E,
581
+ // SSR mode
582
+ ssr: N,
583
+ // Legacy event handlers
584
+ onRowsChange: I,
585
+ // Feature props and event props are in ...rest
586
+ ...C
587
+ } = t, c = P(null), l = P(null), p = Z(Ce), w = [
588
+ "selection",
589
+ "editing",
590
+ "filtering",
591
+ "sorting",
592
+ "clipboard",
593
+ "contextMenu",
594
+ "reorder",
595
+ "rowReorder",
596
+ "visibility",
597
+ "undoRedo",
598
+ "tree",
599
+ "groupingRows",
600
+ "groupingColumns",
601
+ "pinnedColumns",
602
+ "pinnedRows",
603
+ "masterDetail",
604
+ "responsive",
605
+ "columnVirtualization",
606
+ "export",
607
+ "print",
608
+ "pivot",
609
+ "serverSide"
610
+ ], O = D(() => w.map((a) => {
611
+ const f = C[a];
612
+ return f !== void 0 ? `${a}:${JSON.stringify(f)}` : "";
613
+ }).filter(Boolean).join("|"), [C]), k = D(() => {
614
+ const a = {};
615
+ for (const f of w)
616
+ f in C && C[f] !== void 0 && (a[f] = C[f]);
617
+ return a;
618
+ }, [O]), Q = D(() => Le(x), [x]), X = D(() => ({ ...Q, ...k }), [k, Q]), j = D(() => E || N ? [] : ke(X), [X, E, N]), M = D(() => {
619
+ if (E) {
620
+ const a = new Set(E.map((m) => m.name)), f = j.filter((m) => !a.has(m.name));
621
+ return [...E, ...f];
622
+ }
623
+ return j;
624
+ }, [E, j]), L = D(() => {
625
+ if (!s) return s;
626
+ const a = we(s);
627
+ return i ? a.map((f) => ({
628
+ ...i,
629
+ ...f
630
+ // Individual column props override defaults
631
+ })) : a;
632
+ }, [s, i]), B = D(() => {
633
+ const a = Ee(o);
634
+ if (M.length > 0 && a) {
635
+ const f = a.plugins || [], m = new Set(f.map((F) => F.name)), R = M.filter((F) => !m.has(F.name));
636
+ return {
637
+ ...a,
638
+ plugins: [...f, ...R]
639
+ };
640
+ }
641
+ return M.length > 0 && !a ? { plugins: M } : a;
642
+ }, [o, M]);
643
+ h(() => {
644
+ Y().setTypeDefaults(p);
645
+ }, [p]), h(() => {
646
+ c.current && (c.current.rows = n);
647
+ }, [n]), h(() => {
648
+ c.current && B && (c.current.gridConfig = B);
649
+ }, [B]), h(() => {
650
+ c.current && L && (c.current.columns = L);
651
+ }, [L]), h(() => {
652
+ c.current && d !== void 0 && (c.current.fitMode = d);
653
+ }, [d]), h(() => {
654
+ c.current && u !== void 0 && (c.current.editOn = u);
655
+ }, [u]), h(() => {
656
+ const a = c.current;
521
657
  if (!a) return;
522
- const m = B();
523
- a.__frameworkAdapter = m, de(a, m), ae(a, m);
524
- let g = !1;
658
+ const f = Y();
659
+ a.__frameworkAdapter = f, Fe(a), Me(a, f);
660
+ let m = !1;
525
661
  const R = requestAnimationFrame(() => {
526
- g || (typeof a.refreshColumns == "function" && a.refreshColumns(), typeof a.refreshShellHeader == "function" && a.refreshShellHeader());
662
+ m || (typeof a.refreshColumns == "function" && a.refreshColumns(), typeof a.refreshShellHeader == "function" && a.refreshShellHeader());
527
663
  });
528
664
  return () => {
529
- g = !0, cancelAnimationFrame(R);
665
+ m = !0, cancelAnimationFrame(R);
530
666
  };
531
- }, []), w(() => {
532
- if (!f.current || !d) return;
533
- const a = f.current, m = "react-custom-styles";
534
- let g = !0;
667
+ }, []), h(() => {
668
+ if (!c.current || !g) return;
669
+ const a = c.current, f = "react-custom-styles";
670
+ let m = !0;
535
671
  return a.ready?.().then(() => {
536
- g && d && (a.registerStyles?.(m, d), V.current = m);
672
+ m && g && (a.registerStyles?.(f, g), l.current = f);
537
673
  }), () => {
538
- g = !1, V.current && (a.unregisterStyles?.(V.current), V.current = null);
674
+ m = !1, l.current && (a.unregisterStyles?.(l.current), l.current = null);
539
675
  };
540
- }, [d]), w(() => {
541
- const a = f.current;
676
+ }, [g]), h(() => {
677
+ const a = c.current;
542
678
  if (!a) return;
543
- const m = [];
544
- if (p) {
545
- const g = ((R) => p(R.detail.rows));
546
- a.addEventListener("rows-change", g), m.push(["rows-change", g]);
547
- }
548
- if (D) {
549
- const g = ((R) => D(R));
550
- a.addEventListener("cell-edit", g), m.push(["cell-edit", g]);
551
- }
552
- if (A) {
553
- const g = ((R) => A(R));
554
- a.addEventListener("row-click", g), m.push(["row-click", g]);
555
- }
556
- if (P) {
557
- const g = ((R) => P(R));
558
- a.addEventListener("column-state-change", g), m.push(["column-state-change", g]);
559
- }
679
+ const f = [];
560
680
  if (I) {
561
- const g = ((R) => I(R));
562
- a.addEventListener("sort-change", g), m.push(["sort-change", g]);
681
+ const m = ((R) => I(R.detail.rows));
682
+ a.addEventListener("rows-change", m), f.push(["rows-change", m]);
563
683
  }
564
684
  return () => {
565
- m.forEach(([g, R]) => {
566
- a.removeEventListener(g, R);
685
+ f.forEach(([m, R]) => {
686
+ a.removeEventListener(m, R);
687
+ });
688
+ };
689
+ }, [I]);
690
+ const ee = D(() => Object.keys(q).filter((a) => typeof C[a] == "function").sort().join("|"), [C]), te = P({});
691
+ for (const a of Object.keys(q))
692
+ te.current[a] = C[a];
693
+ return h(() => {
694
+ const a = c.current;
695
+ if (!a) return;
696
+ const f = [];
697
+ for (const [m, R] of Object.entries(q))
698
+ if (ee.includes(m)) {
699
+ const F = ((re) => {
700
+ te.current[m]?.(re.detail, re);
701
+ });
702
+ a.addEventListener(R, F), f.push([R, F]);
703
+ }
704
+ return () => {
705
+ f.forEach(([m, R]) => {
706
+ a.removeEventListener(m, R);
567
707
  });
568
708
  };
569
- }, [p, D, A, P, I]), X(
709
+ }, [ee]), le(
570
710
  e,
571
711
  () => ({
572
712
  get element() {
573
- return f.current;
713
+ return c.current;
574
714
  },
575
715
  async getConfig() {
576
- return f.current?.getConfig?.() ?? {};
716
+ return c.current?.getConfig?.() ?? {};
577
717
  },
578
718
  async ready() {
579
- return f.current?.ready?.();
719
+ return c.current?.ready?.();
580
720
  },
581
721
  async forceLayout() {
582
- return f.current?.forceLayout?.();
722
+ return c.current?.forceLayout?.();
583
723
  },
584
724
  async toggleGroup(a) {
585
- return f.current?.toggleGroup?.(a);
725
+ return c.current?.toggleGroup?.(a);
586
726
  },
587
- registerStyles(a, m) {
588
- f.current?.registerStyles?.(a, m);
727
+ registerStyles(a, f) {
728
+ c.current?.registerStyles?.(a, f);
589
729
  },
590
730
  unregisterStyles(a) {
591
- f.current?.unregisterStyles?.(a);
731
+ c.current?.unregisterStyles?.(a);
592
732
  }
593
733
  }),
594
734
  []
595
- ), /* @__PURE__ */ x(
735
+ ), /* @__PURE__ */ V(
596
736
  "tbw-grid",
597
737
  {
598
738
  ref: (a) => {
599
- if (f.current = a, a) {
600
- const m = a;
601
- C && (m.gridConfig = C), r && (m.rows = r), s && (m.columns = s);
739
+ if (c.current = a, a) {
740
+ const f = a;
741
+ B && (f.gridConfig = B), n && (f.rows = n), L && (f.columns = L);
602
742
  }
603
743
  },
604
- class: u,
605
- style: h,
606
- children: l
744
+ class: v,
745
+ style: A,
746
+ children: x
607
747
  }
608
748
  );
609
749
  });
610
- function Ee(n) {
750
+ function Ke(r) {
611
751
  const {
612
752
  field: t,
613
753
  header: e,
614
- type: r,
615
- editable: i,
754
+ type: n,
755
+ editable: o,
616
756
  sortable: s,
617
- resizable: o,
618
- width: c,
619
- minWidth: d,
620
- hidden: u,
621
- lockVisible: h,
622
- children: l,
623
- editor: p,
624
- options: D,
625
- multi: A,
626
- format: P
627
- } = n, I = S(null), f = E(
628
- (C) => {
629
- I.current = C, C && (l && ne(C, l), p && ie(C, p));
757
+ resizable: i,
758
+ width: d,
759
+ minWidth: u,
760
+ hidden: g,
761
+ lockVisible: v,
762
+ children: A,
763
+ editor: x,
764
+ options: E,
765
+ multi: N,
766
+ format: I
767
+ } = r, C = P(null), c = y(
768
+ (w) => {
769
+ C.current = w, w && (A && Pe(w, A), x && Ge(w, x));
630
770
  },
631
- [l, p, t]
632
- ), V = typeof c == "number" ? `${c}px` : c, y = {
771
+ [A, x, t]
772
+ ), l = typeof d == "number" ? `${d}px` : d, p = {
633
773
  field: t,
634
- ref: f
774
+ ref: c
635
775
  };
636
- return e !== void 0 && (y.header = e), r !== void 0 && (y.type = r), i !== void 0 && (y.editable = i), s !== void 0 && (y.sortable = s), o !== void 0 && (y.resizable = o), V !== void 0 && (y.width = V), d !== void 0 && (y["min-width"] = d), u !== void 0 && (y.hidden = u), h !== void 0 && (y["lock-visible"] = h), A !== void 0 && (y.multi = A), P && (y["data-has-format"] = "true"), D && (y["data-has-options"] = "true"), /* @__PURE__ */ x("tbw-grid-column", { ...y });
776
+ return e !== void 0 && (p.header = e), n !== void 0 && (p.type = n), o !== void 0 && (p.editable = o), s !== void 0 && (p.sortable = s), i !== void 0 && (p.resizable = i), l !== void 0 && (p.width = l), u !== void 0 && (p["min-width"] = u), g !== void 0 && (p.hidden = g), v !== void 0 && (p["lock-visible"] = v), N !== void 0 && (p.multi = N), I && (p["data-has-format"] = "true"), E && (p["data-has-options"] = "true"), /* @__PURE__ */ V("tbw-grid-column", { ...p });
637
777
  }
638
- function Ae({ children: n }) {
639
- return /* @__PURE__ */ x("tbw-grid-tool-buttons", { children: n });
778
+ function Ye({ children: r }) {
779
+ return /* @__PURE__ */ V("tbw-grid-tool-buttons", { children: r });
640
780
  }
641
- function De() {
642
- const n = S(null), [t, e] = O(!1), [r, i] = O(null);
643
- w(() => {
644
- const l = n.current;
645
- if (!l) return;
646
- let p = !0;
781
+ function Ze() {
782
+ const r = P(null), [t, e] = ne(!1), [n, o] = ne(null);
783
+ h(() => {
784
+ const c = r.current;
785
+ if (!c) return;
786
+ let l = !0;
647
787
  return (async () => {
648
788
  try {
649
- if (await l.ready?.(), p) {
789
+ if (await c.ready?.(), l) {
650
790
  e(!0);
651
- const A = await l.getConfig?.();
652
- p && A && i(A);
791
+ const w = await c.getConfig?.();
792
+ l && w && o(w);
653
793
  }
654
794
  } catch {
655
795
  }
656
796
  })(), () => {
657
- p = !1;
797
+ l = !1;
658
798
  };
659
799
  }, []);
660
- const s = E(async () => {
661
- const l = n.current;
662
- return l ? await l.getConfig?.() ?? null : null;
663
- }, []), o = E(async () => {
664
- const l = n.current;
665
- l && await l.forceLayout?.();
666
- }, []), c = E(async (l) => {
667
- const p = n.current;
668
- p && await p.toggleGroup?.(l);
669
- }, []), d = E((l, p) => {
670
- n.current?.registerStyles?.(l, p);
671
- }, []), u = E((l) => {
672
- n.current?.unregisterStyles?.(l);
673
- }, []), h = E(() => r?.columns ? r.columns.filter((l) => !l.hidden) : [], [r]);
800
+ const s = y(async () => {
801
+ const c = r.current;
802
+ return c ? await c.getConfig?.() ?? null : null;
803
+ }, []), i = y(async () => {
804
+ const c = r.current;
805
+ c && await c.forceLayout?.();
806
+ }, []), d = y(async (c) => {
807
+ const l = r.current;
808
+ l && await l.toggleGroup?.(c);
809
+ }, []), u = y((c, l) => {
810
+ r.current?.registerStyles?.(c, l);
811
+ }, []), g = y((c) => {
812
+ r.current?.unregisterStyles?.(c);
813
+ }, []), v = y(() => n?.columns ? n.columns.filter((c) => !c.hidden) : [], [n]), A = y(() => {
814
+ const c = r.current?.element, l = c?.getPluginByName?.("selection");
815
+ if (!l) {
816
+ console.warn("[useGrid] selectAll requires SelectionPlugin");
817
+ return;
818
+ }
819
+ if (l.config?.mode === "row") {
820
+ const p = c?.rows ?? [], w = new Set(p.map((O, k) => k));
821
+ l.selected = w, l.requestAfterRender?.();
822
+ }
823
+ }, []), x = y(() => {
824
+ const l = r.current?.element?.getPluginByName?.("selection");
825
+ l && l.clearSelection?.();
826
+ }, []), E = y(() => {
827
+ const l = r.current?.element?.getPluginByName?.("selection");
828
+ return l ? new Set(l.selected ?? []) : /* @__PURE__ */ new Set();
829
+ }, []), N = y(() => {
830
+ const c = r.current?.element, l = c?.getPluginByName?.("selection");
831
+ if (!l) return [];
832
+ const p = c?.rows ?? [], w = l.selected ?? /* @__PURE__ */ new Set();
833
+ return p.filter((O, k) => w.has(k));
834
+ }, []), I = y((c) => {
835
+ const p = r.current?.element?.getPluginByName?.("export");
836
+ if (!p) {
837
+ console.warn("[useGrid] exportToCsv requires ExportPlugin (use export prop)");
838
+ return;
839
+ }
840
+ p.exportCsv?.({ filename: c ?? "export.csv" });
841
+ }, []), C = y((c) => {
842
+ const p = r.current?.element?.getPluginByName?.("export");
843
+ if (!p) {
844
+ console.warn("[useGrid] exportToJson requires ExportPlugin (use export prop)");
845
+ return;
846
+ }
847
+ p.exportJson?.({ filename: c ?? "export.json" });
848
+ }, []);
674
849
  return {
675
- ref: n,
676
- element: n.current?.element ?? null,
850
+ ref: r,
851
+ element: r.current?.element ?? null,
677
852
  isReady: t,
678
- config: r,
853
+ config: n,
679
854
  getConfig: s,
680
- forceLayout: o,
681
- toggleGroup: c,
682
- registerStyles: d,
683
- unregisterStyles: u,
684
- getVisibleColumns: h
855
+ forceLayout: i,
856
+ toggleGroup: d,
857
+ registerStyles: u,
858
+ unregisterStyles: g,
859
+ getVisibleColumns: v,
860
+ // Selection methods
861
+ selectAll: A,
862
+ clearSelection: x,
863
+ getSelectedIndices: E,
864
+ getSelectedRows: N,
865
+ // Export methods
866
+ exportToCsv: I,
867
+ exportToJson: C
685
868
  };
686
869
  }
687
- function Se(n, t, e, r = []) {
688
- const i = S(e);
689
- w(() => {
690
- i.current = e;
691
- }, [e, ...r]), w(() => {
692
- const s = n.current, o = s && "element" in s ? s.element : s;
693
- if (!o) return;
694
- const c = ((d) => {
695
- i.current(d);
870
+ let se = !1;
871
+ function Qe(r, t, e, n = []) {
872
+ !se && typeof window < "u" && (window.location.hostname === "localhost" || window.location.hostname === "127.0.0.1" || window.location.hostname.includes(".local")) && (se = !0, console.warn(
873
+ `[useGridEvent] Deprecated: Use event props directly on DataGrid instead.
874
+ Example: <DataGrid onSelectionChange={(e) => ...} />
875
+ See migration guide: https://toolbox-web.dev/grid-react/migration`
876
+ ));
877
+ const o = P(e);
878
+ h(() => {
879
+ o.current = e;
880
+ }, [e, ...n]), h(() => {
881
+ const s = r.current, i = s && "element" in s ? s.element : s;
882
+ if (!i) return;
883
+ const d = ((u) => {
884
+ o.current(u);
696
885
  });
697
- return o.addEventListener(t, c), () => {
698
- o.removeEventListener(t, c);
886
+ return i.addEventListener(t, d), () => {
887
+ i.removeEventListener(t, d);
699
888
  };
700
- }, [n, t]);
889
+ }, [r, t]);
701
890
  }
702
891
  export {
703
- be as DataGrid,
704
- Ee as GridColumn,
705
- me as GridDetailPanel,
706
- ye as GridResponsiveCard,
707
- Ae as GridToolButtons,
708
- ve as GridToolPanel,
709
- he as GridTypeProvider,
710
- ce as ReactGridAdapter,
711
- Ce as getRegisteredFields,
712
- De as useGrid,
713
- Se as useGridEvent,
714
- we as useGridTypeDefaults,
715
- Re as useTypeDefault
892
+ Ue as DataGrid,
893
+ Ke as GridColumn,
894
+ xe as GridDetailPanel,
895
+ ve as GridResponsiveCard,
896
+ Ye as GridToolButtons,
897
+ Je as GridToolPanel,
898
+ _e as GridTypeProvider,
899
+ Ie as ReactGridAdapter,
900
+ Ze as useGrid,
901
+ Qe as useGridEvent,
902
+ We as useGridTypeDefaults,
903
+ $e as useTypeDefault
716
904
  };