impact-nova 1.7.29 → 1.7.31

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.
@@ -1,30 +1,30 @@
1
- import { jsx as g, jsxs as se } from "react/jsx-runtime";
2
- import re, { useMemo as A, useCallback as D } from "react";
3
- import { SortableItem as He } from "./components/SortableItem.js";
4
- import { SelectionMode as b } from "../types/nested-list.types.js";
5
- import { useNestedListDragDrop as We } from "./hooks/useNestedListDragDrop.js";
6
- import { useNestedListSelectAll as je } from "./hooks/useNestedListSelectAll.js";
7
- import { useNestedListState as Fe } from "./hooks/useNestedListState.js";
8
- import { useNestedListHandlers as Je } from "./hooks/useNestedListHandlers.js";
9
- import { NestedListHeader as qe } from "./components/NestedListHeader.js";
10
- import { NestedListCategoryFilters as Ke } from "./components/NestedListCategoryFilters.js";
11
- import { NestedListContent as Qe } from "./components/NestedListContent.js";
12
- import { NestedListApplyDiscardButtons as Xe } from "./components/NestedListApplyDiscardButtons.js";
13
- import { cn as Ye } from "../../../lib/utils.js";
14
- import { useImpactNovaI18n as Ze } from "../../../i18n/ImpactNovaI18nContext.js";
15
- const ne = (d, t) => {
16
- if (!t || typeof t != "string") return d;
1
+ import { jsx as L, jsxs as le } from "react/jsx-runtime";
2
+ import J, { useMemo as A, useCallback as T } from "react";
3
+ import { SortableItem as Fe } from "./components/SortableItem.js";
4
+ import { SelectionMode as U } from "../types/nested-list.types.js";
5
+ import { useNestedListDragDrop as Je } from "./hooks/useNestedListDragDrop.js";
6
+ import { useNestedListSelectAll as qe } from "./hooks/useNestedListSelectAll.js";
7
+ import { useNestedListState as Ke } from "./hooks/useNestedListState.js";
8
+ import { useNestedListHandlers as Qe } from "./hooks/useNestedListHandlers.js";
9
+ import { NestedListHeader as Xe } from "./components/NestedListHeader.js";
10
+ import { NestedListCategoryFilters as Ye } from "./components/NestedListCategoryFilters.js";
11
+ import { NestedListContent as Ze } from "./components/NestedListContent.js";
12
+ import { NestedListApplyDiscardButtons as $e } from "./components/NestedListApplyDiscardButtons.js";
13
+ import { cn as Me } from "../../../lib/utils.js";
14
+ import { useImpactNovaI18n as Ge } from "../../../i18n/ImpactNovaI18nContext.js";
15
+ const ce = (i, t) => {
16
+ if (!t || typeof t != "string") return i;
17
17
  const c = t.toLowerCase(), o = [];
18
- return d.forEach((s) => {
19
- const l = s.label.toLowerCase().includes(c), f = s.children ? ne(s.children, t) : void 0;
18
+ return i.forEach((r) => {
19
+ const l = r.label.toLowerCase().includes(c), f = r.children ? ce(r.children, t) : void 0;
20
20
  (l || f && f.length > 0) && o.push({
21
- ...s,
22
- children: f || s.children
21
+ ...r,
22
+ children: f || r.children
23
23
  });
24
24
  }), o;
25
- }, le = (d) => d.map((t) => {
25
+ }, oe = (i) => i.map((t) => {
26
26
  if (t.children && t.children.length > 0) {
27
- const c = le(t.children), o = c.every((s) => s.checked);
27
+ const c = oe(t.children), o = c.every((r) => r.checked);
28
28
  return {
29
29
  ...t,
30
30
  checked: o,
@@ -32,322 +32,334 @@ const ne = (d, t) => {
32
32
  };
33
33
  }
34
34
  return t;
35
- }), $e = (d, t) => {
36
- const c = /* @__PURE__ */ new Set(), o = (s) => {
37
- s.forEach((l) => {
35
+ }), et = (i, t) => {
36
+ const c = /* @__PURE__ */ new Set(), o = (r) => {
37
+ r.forEach((l) => {
38
38
  const f = t ? t(l) : l.category;
39
39
  f && c.add(f), l.children && o(l.children);
40
40
  });
41
41
  };
42
- return o(d), Array.from(c).sort();
43
- }, ce = (d, t, c) => {
44
- if (t.size === 0) return d;
42
+ return o(i), Array.from(c).sort();
43
+ }, de = (i, t, c) => {
44
+ if (t.size === 0) return i;
45
45
  const o = [];
46
- return d.forEach((s) => {
47
- const l = c ? c(s) : s.category, f = l && t.has(l), m = s.children ? ce(s.children, t, c) : void 0;
46
+ return i.forEach((r) => {
47
+ const l = c ? c(r) : r.category, f = l && t.has(l), m = r.children ? de(r.children, t, c) : void 0;
48
48
  (f || m && m.length > 0) && o.push({
49
- ...s,
49
+ ...r,
50
50
  children: m
51
51
  });
52
52
  }), o;
53
- }, oe = (d, t, c, o = 0) => {
54
- const s = [];
55
- return d.forEach((l) => {
56
- s.push({ item: l, level: o }), !t[l.id] && l.children && l.children.length > 0 && l.id !== c && s.push(
57
- ...oe(l.children, t, c, o + 1)
53
+ }, ie = (i, t, c, o = 0) => {
54
+ const r = [];
55
+ return i.forEach((l) => {
56
+ r.push({ item: l, level: o }), !t[l.id] && l.children && l.children.length > 0 && l.id !== c && r.push(
57
+ ...ie(l.children, t, c, o + 1)
58
58
  );
59
- }), s;
60
- }, ut = ({
61
- items: d,
59
+ }), r;
60
+ }, mt = ({
61
+ items: i,
62
62
  onChange: t,
63
63
  onSubmit: c,
64
64
  onCancel: o,
65
- onItemToggle: s,
65
+ onItemToggle: r,
66
66
  onDragEnd: l,
67
67
  enableSearch: f = !0,
68
68
  enableDragDrop: m = !0,
69
- enableSelectAll: de = !0,
70
- enableGroupBy: L = !1,
71
- getCategory: S,
72
- searchPlaceholder: ie,
73
- className: ae = "",
74
- groupLabel: he,
69
+ enableSelectAll: ae = !0,
70
+ enableGroupBy: k = !1,
71
+ getCategory: I,
72
+ searchPlaceholder: he,
73
+ className: ue = "",
74
+ groupLabel: fe,
75
75
  enableApplyDiscard: p = !1,
76
- enableCollapse: F = !0,
77
- enableGlobalCollapse: ue = !0,
78
- submitButtonLabel: fe,
79
- cancelButtonLabel: pe,
80
- selectionMode: I = b.CASCADE_DOWN
76
+ enableCollapse: q = !0,
77
+ enableGlobalCollapse: pe = !0,
78
+ submitButtonLabel: me,
79
+ cancelButtonLabel: Ne,
80
+ selectionMode: v = U.CASCADE_DOWN,
81
+ initialCollapsedItems: Se,
82
+ onCollapseChange: K,
83
+ canDrag: w
81
84
  }) => {
82
- const { t: T } = Ze(), me = ie ?? T("nestedList.searchPlaceholder"), Ce = fe ?? T("nestedList.apply"), Ne = pe ?? T("nestedList.reset"), {
83
- items: a,
84
- setItems: v,
85
- savedItems: w,
86
- setSavedItems: J,
87
- isUserChangeRef: P,
88
- searchText: x,
89
- setSearchText: Se,
90
- collapsedItems: z,
91
- setCollapsedItems: Ie,
85
+ const { t: P } = Ge(), Ce = he ?? P("nestedList.searchPlaceholder"), Ie = me ?? P("nestedList.apply"), ve = Ne ?? P("nestedList.reset"), {
86
+ items: h,
87
+ setItems: g,
88
+ savedItems: b,
89
+ setSavedItems: Q,
90
+ isUserChangeRef: x,
91
+ searchText: z,
92
+ setSearchText: ge,
93
+ collapsedItems: N,
94
+ setCollapsedItems: Le,
92
95
  isListCollapsed: B,
93
- setIsListCollapsed: ve,
94
- activeId: C,
95
- setActiveId: U,
96
- setOverId: _,
96
+ setIsListCollapsed: ke,
97
+ activeId: S,
98
+ setActiveId: _,
99
+ setOverId: y,
97
100
  selectedCategories: O,
98
- setSelectedCategories: ge,
99
- itemsToBlink: q,
100
- setItemsToBlink: y,
101
+ setSelectedCategories: Ee,
102
+ itemsToBlink: X,
103
+ setItemsToBlink: H,
101
104
  // Normalized state helpers (for optimized operations)
102
- isNormalized: Le,
103
- normalizedState: ke,
104
- batchUpdateItems: Ee
105
- } = Fe({
106
- initialItems: d,
105
+ isNormalized: De,
106
+ normalizedState: Ae,
107
+ batchUpdateItems: Te
108
+ } = Ke({
109
+ initialItems: i,
107
110
  enableApplyDiscard: p,
108
111
  // Enable normalized state for large datasets (can be made configurable via props)
109
- enableNormalizedState: d.length > 1e3
110
- }), [R, K] = re.useState(0), [V, Ae] = re.useState(0), {
111
- sensors: De,
112
- handleDragEnd: Te,
113
- isValidDrop: Q
114
- } = We({
115
- items: a,
116
- onDragEnd: l
117
- }), we = A(
118
- () => L ? $e(a, S) : [],
119
- [a, L, S]
120
- ), N = A(() => {
121
- let e = a;
122
- return L && O.size > 0 && (e = ce(e, O, S)), x && (e = ne(e, x)), e;
123
- }, [a, x, L, O, S]), Pe = A(
124
- () => oe(N, z, C),
125
- [N, z, C]
126
- ), { allChecked: k, someChecked: xe } = A(() => {
127
- let e = !0, r = !1;
112
+ enableNormalizedState: i.length > 1e3,
113
+ initialCollapsedItems: Se
114
+ });
115
+ J.useEffect(() => {
116
+ K?.(N);
117
+ }, [N, K]);
118
+ const [R, Y] = J.useState(0), [V, we] = J.useState(0), {
119
+ sensors: Pe,
120
+ handleDragEnd: be,
121
+ isValidDrop: Z
122
+ } = Je({
123
+ items: h,
124
+ onDragEnd: l,
125
+ collapsedItems: N,
126
+ canDrag: w
127
+ }), xe = A(
128
+ () => k ? et(h, I) : [],
129
+ [h, k, I]
130
+ ), C = A(() => {
131
+ let e = h;
132
+ return k && O.size > 0 && (e = de(e, O, I)), z && (e = ce(e, z)), e;
133
+ }, [h, z, k, O, I]), ze = A(
134
+ () => ie(C, N, S),
135
+ [C, N, S]
136
+ ), { allChecked: E, someChecked: Be } = A(() => {
137
+ let e = !0, s = !1;
128
138
  const n = (u) => {
129
- for (const h of u)
130
- if (h.children && h.children.length > 0 ? n(h.children) : h.checked ? r = !0 : e = !1, r && !e) return;
139
+ for (const d of u)
140
+ if (d.children && d.children.length > 0 ? n(d.children) : d.checked ? s = !0 : e = !1, s && !e) return;
131
141
  };
132
- return n(N), { allChecked: e && r, someChecked: r };
133
- }, [N]), ze = xe && !k, H = (e, r) => {
142
+ return n(C), { allChecked: e && s, someChecked: s };
143
+ }, [C]), Oe = Be && !E, W = (e, s) => {
134
144
  for (const n of e) {
135
- if (n.id === r) return n;
145
+ if (n.id === s) return n;
136
146
  if (n.children) {
137
- const u = H(n.children, r);
147
+ const u = W(n.children, s);
138
148
  if (u) return u;
139
149
  }
140
150
  }
141
151
  return null;
142
- }, Be = D(
143
- (e, r) => {
144
- if (I === b.INDEPENDENT)
152
+ }, Re = T(
153
+ (e, s) => {
154
+ if (v === U.INDEPENDENT)
145
155
  return e;
146
- const n = (h, i) => h.id === i ? !0 : h.children ? h.children.some(
147
- (E) => n(E, i)
148
- ) : !1, u = (h) => h.map((i) => {
149
- if (i.id === r)
150
- return i;
151
- if (i.children && n(i, r)) {
152
- const E = u(i.children);
153
- let W;
154
- return I === b.CASCADE_UP_DOWN ? W = E.some((j) => j.checked) : W = E.every((j) => j.checked), {
155
- ...i,
156
- checked: W,
157
- children: E
156
+ const n = (d, a) => d.id === a ? !0 : d.children ? d.children.some(
157
+ (D) => n(D, a)
158
+ ) : !1, u = (d) => d.map((a) => {
159
+ if (a.id === s)
160
+ return a;
161
+ if (a.children && n(a, s)) {
162
+ const D = u(a.children);
163
+ let j;
164
+ return v === U.CASCADE_UP_DOWN ? j = D.some((F) => F.checked) : j = D.every((F) => F.checked), {
165
+ ...a,
166
+ checked: j,
167
+ children: D
158
168
  };
159
169
  }
160
- return i;
170
+ return a;
161
171
  });
162
172
  return u(e);
163
173
  },
164
- [I]
165
- ), X = (e) => {
166
- const r = [];
174
+ [v]
175
+ ), $ = (e) => {
176
+ const s = [];
167
177
  return e.forEach((n) => {
168
- n.children && n.children.length > 0 && (r.push(n.id), r.push(...X(n.children)));
169
- }), r;
178
+ n.children && n.children.length > 0 && (s.push(n.id), s.push(...$(n.children)));
179
+ }), s;
170
180
  }, {
171
- handleToggle: Y,
172
- handleToggleCollapse: Z,
173
- handleCollapseAll: Oe,
174
- handleToggleCategory: Re
175
- } = Je({
176
- setItems: v,
177
- findItemById: H,
178
- updateParentsUpward: Be,
181
+ handleToggle: M,
182
+ handleToggleCollapse: G,
183
+ handleCollapseAll: Ve,
184
+ handleToggleCategory: Ue
185
+ } = Qe({
186
+ setItems: g,
187
+ findItemById: W,
188
+ updateParentsUpward: Re,
179
189
  onChange: (e) => {
180
- K((r) => r + 1), t(e);
190
+ Y((s) => s + 1), t(e);
181
191
  },
182
- onItemToggle: s,
183
- getCategory: S,
184
- setCollapsedItems: Ie,
185
- setIsListCollapsed: ve,
186
- setSelectedCategories: ge,
187
- isUserChangeRef: P,
188
- selectionMode: I,
192
+ onItemToggle: r,
193
+ getCategory: I,
194
+ setCollapsedItems: Le,
195
+ setIsListCollapsed: ke,
196
+ setSelectedCategories: Ee,
197
+ isUserChangeRef: x,
198
+ selectionMode: v,
189
199
  // Pass normalized state helpers for optimized operations
190
- isNormalized: Le,
191
- normalizedState: ke,
192
- batchUpdateItems: Ee
200
+ isNormalized: De,
201
+ normalizedState: Ae,
202
+ batchUpdateItems: Te
193
203
  }), {
194
- collectVisibleItemIds: $,
195
- findItemsNotSelected: M,
196
- collectVisibleItemsForCallback: G,
197
- updateVisibleItems: ee
198
- } = je({
199
- findItemById: H,
200
- getCategory: S
201
- }), Ve = D(() => {
202
- P.current = !0, v((e) => {
203
- const r = $(N), n = M(
204
- N,
204
+ collectVisibleItemIds: ee,
205
+ findItemsNotSelected: te,
206
+ collectVisibleItemsForCallback: se,
207
+ updateVisibleItems: re
208
+ } = qe({
209
+ findItemById: W,
210
+ getCategory: I
211
+ }), _e = T(() => {
212
+ x.current = !0, g((e) => {
213
+ const s = ee(C), n = te(
214
+ C,
205
215
  e,
206
- r
216
+ s
207
217
  );
208
218
  if (n.size > 0) {
209
- const i = new Set(n);
210
- y(i), setTimeout(() => y(/* @__PURE__ */ new Set()), 600);
219
+ const a = new Set(n);
220
+ H(a), setTimeout(() => H(/* @__PURE__ */ new Set()), 600);
211
221
  }
212
- const u = ee(
222
+ const u = re(
213
223
  e,
214
- r,
215
- !k
216
- ), h = I === b.INDEPENDENT ? u : le(u);
217
- if (t(h), s) {
218
- const i = G(
224
+ s,
225
+ !E
226
+ ), d = v === U.INDEPENDENT ? u : oe(u);
227
+ if (t(d), r) {
228
+ const a = se(
219
229
  e,
220
- r,
221
- !k
230
+ s,
231
+ !E
222
232
  );
223
- s(i);
233
+ r(a);
224
234
  }
225
- return h;
235
+ return d;
226
236
  });
227
237
  }, [
228
- k,
238
+ E,
229
239
  t,
230
- s,
231
- N,
232
- $,
233
- M,
234
- G,
240
+ r,
241
+ C,
235
242
  ee,
236
- P,
237
- v,
238
- y,
239
- I
240
- ]), be = D(
241
- (e, r) => {
242
- const n = C ? Q(C, e.id) : !1, u = q.has(e.id);
243
- return /* @__PURE__ */ g(
244
- He,
243
+ te,
244
+ se,
245
+ re,
246
+ x,
247
+ g,
248
+ H,
249
+ v
250
+ ]), ye = T(
251
+ (e, s) => {
252
+ const n = S ? Z(S, e.id) : !1, u = X.has(e.id), d = w ? !w(e, s) : e.isDragDisabled ?? !1;
253
+ return /* @__PURE__ */ L(
254
+ Fe,
245
255
  {
246
256
  item: e,
247
- level: r,
248
- isCollapsed: z[e.id] || !1,
249
- onToggle: Y,
250
- onToggleCollapse: Z,
251
- isAnyDragging: C !== null,
257
+ level: s,
258
+ isCollapsed: N[e.id] || !1,
259
+ onToggle: M,
260
+ onToggleCollapse: G,
261
+ isAnyDragging: S !== null,
252
262
  isValidDrop: n,
253
263
  enableDragDrop: m,
254
- enableCollapse: F,
255
- shouldBlink: u
264
+ enableCollapse: q,
265
+ shouldBlink: u,
266
+ isDragDisabled: d
256
267
  },
257
268
  e.id
258
269
  );
259
270
  },
260
271
  [
261
- z,
262
- Y,
272
+ N,
273
+ M,
274
+ G,
275
+ S,
263
276
  Z,
264
- C,
265
- Q,
266
277
  m,
278
+ X,
267
279
  q,
268
- F
280
+ w
269
281
  ]
270
- ), Ue = X(a).length > 0, te = A(() => p ? a.length > 1e3 ? R !== V : JSON.stringify(a) !== JSON.stringify(w) : !1, [p, a, w, R, V]), _e = D(() => {
271
- p && (J(a), Ae(R), c?.(a));
272
- }, [p, a, c, J, R]), ye = D(() => {
273
- p && (v(w), K(V), o?.());
274
- }, [p, w, o, v, V]);
275
- return /* @__PURE__ */ se(
282
+ ), He = $(h).length > 0, ne = A(() => p ? h.length > 1e3 ? R !== V : JSON.stringify(h) !== JSON.stringify(b) : !1, [p, h, b, R, V]), We = T(() => {
283
+ p && (Q(h), we(R), c?.(h));
284
+ }, [p, h, c, Q, R]), je = T(() => {
285
+ p && (g(b), Y(V), o?.());
286
+ }, [p, b, o, g, V]);
287
+ return /* @__PURE__ */ le(
276
288
  "div",
277
289
  {
278
- className: Ye("flex flex-col", ae),
290
+ className: Me("flex flex-col", ue),
279
291
  "data-component": "nested-list",
280
- "data-has-changes": te ? "" : void 0,
292
+ "data-has-changes": ne ? "" : void 0,
281
293
  "data-list-collapsed": B ? "" : void 0,
282
294
  children: [
283
- /* @__PURE__ */ se("div", { className: "flex-shrink-0", children: [
284
- /* @__PURE__ */ g(
285
- qe,
295
+ /* @__PURE__ */ le("div", { className: "flex-shrink-0", children: [
296
+ /* @__PURE__ */ L(
297
+ Xe,
286
298
  {
287
- hasItemsWithChildren: Ue,
299
+ hasItemsWithChildren: He,
288
300
  isListCollapsed: B,
289
- onCollapseAll: Oe,
301
+ onCollapseAll: Ve,
290
302
  enableSearch: f,
291
- enableSelectAll: de,
292
- groupLabel: he,
293
- allChecked: k,
294
- isIndeterminate: ze,
295
- onSelectAll: Ve,
296
- searchText: x,
303
+ enableSelectAll: ae,
304
+ groupLabel: fe,
305
+ allChecked: E,
306
+ isIndeterminate: Oe,
307
+ onSelectAll: _e,
308
+ searchText: z,
297
309
  onSearchChange: (e) => {
298
- Se(e.target.value);
310
+ ge(e.target.value);
299
311
  },
300
- searchPlaceholder: me,
301
- selectAllLabel: T("nestedList.selectAll"),
302
- enableCollapse: ue
312
+ searchPlaceholder: Ce,
313
+ selectAllLabel: P("nestedList.selectAll"),
314
+ enableCollapse: pe
303
315
  }
304
316
  ),
305
- /* @__PURE__ */ g(
306
- Ke,
317
+ /* @__PURE__ */ L(
318
+ Ye,
307
319
  {
308
320
  isListCollapsed: B,
309
- enableGroupBy: L,
310
- categories: we,
321
+ enableGroupBy: k,
322
+ categories: xe,
311
323
  selectedCategories: O,
312
- onToggleCategory: Re
324
+ onToggleCategory: Ue
313
325
  }
314
326
  )
315
327
  ] }),
316
- /* @__PURE__ */ g("div", { className: "flex-1 min-h-0 overflow-hidden", children: /* @__PURE__ */ g(
317
- Qe,
328
+ /* @__PURE__ */ L("div", { className: "flex-1 min-h-0 overflow-hidden", children: /* @__PURE__ */ L(
329
+ Ze,
318
330
  {
319
331
  isListCollapsed: B,
320
332
  enableDragDrop: m,
321
- sensors: De,
322
- items: Pe,
323
- renderItem: be,
324
- activeId: C,
333
+ sensors: Pe,
334
+ items: ze,
335
+ renderItem: ye,
336
+ activeId: S,
325
337
  onDragStart: (e) => {
326
- U(e.active.id);
338
+ _(e.active.id);
327
339
  },
328
340
  onDragOver: (e) => {
329
- _(e.over?.id);
341
+ y(e.over?.id);
330
342
  },
331
343
  onDragEnd: (e) => {
332
- U(null), _(null), P.current = !0, Te(e, (r) => {
333
- const n = r(a);
334
- v(n), t(n);
344
+ _(null), y(null), x.current = !0, be(e, (s) => {
345
+ const n = s(h);
346
+ g(n), t(n);
335
347
  });
336
348
  },
337
349
  onDragCancel: () => {
338
- U(null), _(null);
350
+ _(null), y(null);
339
351
  }
340
352
  }
341
353
  ) }),
342
- /* @__PURE__ */ g(
343
- Xe,
354
+ /* @__PURE__ */ L(
355
+ $e,
344
356
  {
345
357
  enableApplyDiscard: p,
346
- hasChanges: te,
347
- onDiscard: ye,
348
- onApply: _e,
349
- cancelButtonLabel: Ne,
350
- submitButtonLabel: Ce
358
+ hasChanges: ne,
359
+ onDiscard: je,
360
+ onApply: We,
361
+ cancelButtonLabel: ve,
362
+ submitButtonLabel: Ie
351
363
  }
352
364
  )
353
365
  ]
@@ -355,5 +367,5 @@ const ne = (d, t) => {
355
367
  );
356
368
  };
357
369
  export {
358
- ut as NestedList
370
+ mt as NestedList
359
371
  };
@@ -34,6 +34,8 @@ export interface ExtendedHeaderComponentParams extends Partial<IHeaderParams> {
34
34
  enableSpaceSplitting?: boolean;
35
35
  enableBooleanParsing?: boolean;
36
36
  enableDateParsing?: boolean;
37
+ /** Which picker to render for date columns. Default: 'date' */
38
+ datePickerVariant?: 'date' | 'month';
37
39
  /** Generic info data for the info modal */
38
40
  infoData?: InfoContent;
39
41
  /** How to display the information (tooltip or modal) */
@@ -56,6 +56,9 @@ export interface NestedListProps {
56
56
  enableGlobalCollapse?: boolean;
57
57
  selectionMode?: SelectionMode;
58
58
  getCategory?: (item: NestedListItem) => string | undefined;
59
+ initialCollapsedItems?: Record<string, boolean>;
60
+ onCollapseChange?: (collapsedItems: Record<string, boolean>) => void;
61
+ canDrag?: (item: NestedListItem, level: number) => boolean;
59
62
  searchPlaceholder?: string;
60
63
  className?: string;
61
64
  groupLabel?: string;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "impact-nova",
3
- "version": "1.7.29",
3
+ "version": "1.7.31",
4
4
  "description": "Enterprise-grade React design system built with React 19, Vite, Tailwind CSS, and Radix UI. Built-in internationalization (i18n) and comprehensive UI component library for scalable, accessible, and performant applications.",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",