@pibit.ai/cure-design-system 0.3.21 → 0.3.24

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 (68) hide show
  1. package/dist/index.d.ts +3 -1
  2. package/dist/index.d.ts.map +1 -1
  3. package/dist/index.js +157 -136
  4. package/dist/patterns/table/TableWrapper.d.ts.map +1 -1
  5. package/dist/patterns/table/TableWrapper.js +330 -323
  6. package/dist/patterns/table/index.d.ts +5 -2
  7. package/dist/patterns/table/index.d.ts.map +1 -1
  8. package/dist/patterns/table/integrateTableUndoRedo.d.ts +41 -0
  9. package/dist/patterns/table/integrateTableUndoRedo.d.ts.map +1 -0
  10. package/dist/patterns/table/integrateTableUndoRedo.js +63 -0
  11. package/dist/patterns/table/storyHelpers/useMockTableState.d.ts +3 -1
  12. package/dist/patterns/table/storyHelpers/useMockTableState.d.ts.map +1 -1
  13. package/dist/patterns/table/table.d.ts +2 -1
  14. package/dist/patterns/table/table.d.ts.map +1 -1
  15. package/dist/patterns/table/table.js +181 -155
  16. package/dist/patterns/table/tableUndoRedo.d.ts +38 -0
  17. package/dist/patterns/table/tableUndoRedo.d.ts.map +1 -0
  18. package/dist/patterns/table/tableUndoRedo.js +147 -0
  19. package/dist/patterns/table/toolbar/AlignDropdown.d.ts.map +1 -1
  20. package/dist/patterns/table/toolbar/AlignDropdown.js +5 -11
  21. package/dist/patterns/table/toolbar/ColumnHeaderMenu.d.ts +4 -0
  22. package/dist/patterns/table/toolbar/ColumnHeaderMenu.d.ts.map +1 -1
  23. package/dist/patterns/table/toolbar/ColumnHeaderMenu.js +81 -77
  24. package/dist/patterns/table/toolbar/GroupByDropdown.d.ts.map +1 -1
  25. package/dist/patterns/table/toolbar/GroupByDropdown.js +48 -43
  26. package/dist/patterns/table/toolbar/TableToolbar.d.ts +12 -1
  27. package/dist/patterns/table/toolbar/TableToolbar.d.ts.map +1 -1
  28. package/dist/patterns/table/toolbar/TableToolbar.js +164 -114
  29. package/dist/patterns/table/toolbar/index.d.ts +2 -2
  30. package/dist/patterns/table/toolbar/index.d.ts.map +1 -1
  31. package/dist/patterns/table/toolbar/tableToolbarHelpers.d.ts +10 -1
  32. package/dist/patterns/table/toolbar/tableToolbarHelpers.d.ts.map +1 -1
  33. package/dist/patterns/table/toolbar/tableToolbarHelpers.js +116 -116
  34. package/dist/patterns/table/toolbar/useUndoRedoShortcuts.d.ts +9 -0
  35. package/dist/patterns/table/toolbar/useUndoRedoShortcuts.d.ts.map +1 -0
  36. package/dist/patterns/table/toolbar/useUndoRedoShortcuts.js +21 -0
  37. package/dist/patterns/table/types.d.ts +5 -1
  38. package/dist/patterns/table/types.d.ts.map +1 -1
  39. package/dist/patterns/table/useTableUndoRedo.d.ts +41 -0
  40. package/dist/patterns/table/useTableUndoRedo.d.ts.map +1 -0
  41. package/dist/patterns/table/useTableUndoRedo.js +168 -0
  42. package/dist/primitives/badge/badge.js +5 -5
  43. package/dist/primitives/input/input.d.ts +1 -1
  44. package/dist/primitives/input/input.d.ts.map +1 -1
  45. package/dist/primitives/input/input.js +63 -62
  46. package/dist/primitives/multi-chips-select/MultiChipsSelect.d.ts +20 -0
  47. package/dist/primitives/multi-chips-select/MultiChipsSelect.d.ts.map +1 -0
  48. package/dist/primitives/multi-chips-select/MultiChipsSelect.js +233 -0
  49. package/dist/primitives/multi-chips-select/index.d.ts +3 -0
  50. package/dist/primitives/multi-chips-select/index.d.ts.map +1 -0
  51. package/dist/primitives/multi-chips-select/tagKeyFromLabel.d.ts +3 -0
  52. package/dist/primitives/multi-chips-select/tagKeyFromLabel.d.ts.map +1 -0
  53. package/dist/primitives/multi-chips-select/tagKeyFromLabel.js +6 -0
  54. package/dist/primitives/select/ExpandableSearchInput.d.ts +3 -1
  55. package/dist/primitives/select/ExpandableSearchInput.d.ts.map +1 -1
  56. package/dist/primitives/select/ExpandableSearchInput.js +100 -78
  57. package/dist/primitives/select/SearchInput.d.ts +5 -1
  58. package/dist/primitives/select/SearchInput.d.ts.map +1 -1
  59. package/dist/primitives/select/SearchInput.js +101 -80
  60. package/dist/primitives/select/combobox.d.ts.map +1 -1
  61. package/dist/primitives/select/combobox.js +48 -47
  62. package/dist/primitives/select/multi-select.d.ts.map +1 -1
  63. package/dist/primitives/select/multi-select.js +50 -49
  64. package/dist/styles/components.css +1 -1
  65. package/dist/utils/keyboard-shortcut.d.ts +4 -0
  66. package/dist/utils/keyboard-shortcut.d.ts.map +1 -0
  67. package/dist/utils/keyboard-shortcut.js +29 -0
  68. package/package.json +1 -1
@@ -4,63 +4,63 @@ const T = {
4
4
  large: "h-11!",
5
5
  xl: "h-16!"
6
6
  };
7
- function m(e) {
7
+ function g(e) {
8
8
  return typeof e == "object" && e !== null;
9
9
  }
10
- function g(e, n) {
11
- var i;
12
- if (!((i = n == null ? void 0 : n.trim) != null && i.call(n)) || e === null || e === void 0) return;
13
- const a = n.split(".").filter((r) => r.length > 0);
14
- let t = e;
15
- for (const r of a) {
16
- if (t == null) return;
17
- if (m(t) && r in t) {
18
- t = t[r];
10
+ function y(e, r) {
11
+ var c;
12
+ if (!((c = r == null ? void 0 : r.trim) != null && c.call(r)) || e === null || e === void 0) return;
13
+ const i = r.split(".").filter((a) => a.length > 0);
14
+ let n = e;
15
+ for (const a of i) {
16
+ if (n == null) return;
17
+ if (g(n) && a in n) {
18
+ n = n[a];
19
19
  continue;
20
20
  }
21
- if (Array.isArray(t)) {
22
- const u = t.find((s) => m(s) ? s.field_identifier === r || s.id === r || s.key === r : !1);
23
- if (u !== void 0) {
24
- t = u;
21
+ if (Array.isArray(n)) {
22
+ const t = n.find((u) => g(u) ? u.field_identifier === a || u.id === a || u.key === a : !1);
23
+ if (t !== void 0) {
24
+ n = t;
25
25
  continue;
26
26
  }
27
27
  }
28
28
  return;
29
29
  }
30
- return t;
30
+ return n;
31
31
  }
32
- function y(e, n) {
33
- return !n || !e ? null : n.split(".").reduce((a, t) => {
34
- if (!a || typeof a != "object") return null;
35
- if (t.includes("[") && t.includes("]")) {
36
- const r = t.substring(0, t.indexOf("[")), u = parseInt(t.substring(t.indexOf("[") + 1, t.indexOf("]")), 10), s = a;
37
- return r && Array.isArray(s[r]) ? s[r][u] : null;
32
+ function p(e, r) {
33
+ return !r || !e ? null : r.split(".").reduce((i, n) => {
34
+ if (!i || typeof i != "object") return null;
35
+ if (n.includes("[") && n.includes("]")) {
36
+ const a = n.substring(0, n.indexOf("[")), t = parseInt(n.substring(n.indexOf("[") + 1, n.indexOf("]")), 10), u = i;
37
+ return a && Array.isArray(u[a]) ? u[a][t] : null;
38
38
  }
39
- const i = a;
40
- return i[t] !== void 0 ? i[t] : null;
39
+ const c = i;
40
+ return c[n] !== void 0 ? c[n] : null;
41
41
  }, e);
42
42
  }
43
- function E(e, n) {
43
+ function v(e, r) {
44
44
  if (e.label) return e.label;
45
- if (n && typeof n == "object" && Object.keys(n).length > 0) {
46
- const a = g(n, e.header);
47
- if (a && typeof a.label == "string") return a.label;
45
+ if (r && typeof r == "object" && Object.keys(r).length > 0) {
46
+ const i = y(r, e.header);
47
+ if (i && typeof i.label == "string") return i.label;
48
48
  }
49
49
  return e.header;
50
50
  }
51
- function v(e, n, a) {
51
+ function R(e, r, i) {
52
52
  if (!e.length) return [];
53
- const t = new Map(e.map((u) => [u.value, u])), i = [];
54
- for (const u of a) {
55
- const s = t.get(u);
56
- s && !n.has(u) && i.push(s);
53
+ const n = new Map(e.map((t) => [t.value, t])), c = [];
54
+ for (const t of i) {
55
+ const u = n.get(t);
56
+ u && !r.has(t) && c.push(u);
57
57
  }
58
- const r = new Set(a);
59
- for (const u of e)
60
- !r.has(u.value) && !n.has(u.value) && i.push(u);
61
- return i;
58
+ const a = new Set(i);
59
+ for (const t of e)
60
+ !a.has(t.value) && !r.has(t.value) && c.push(t);
61
+ return c;
62
62
  }
63
- function p(e) {
63
+ function N(e) {
64
64
  switch (e) {
65
65
  case "number":
66
66
  case "currency":
@@ -71,10 +71,10 @@ function p(e) {
71
71
  return "left";
72
72
  }
73
73
  }
74
- function x(e, n) {
75
- return n.get(e.value) ?? p(e.value_type);
74
+ function L(e, r) {
75
+ return r.get(e.value) ?? N(e.value_type);
76
76
  }
77
- function S(e) {
77
+ function w(e) {
78
78
  return e === "right" ? "text-right" : e === "center" ? "text-center" : "text-left";
79
79
  }
80
80
  const A = {
@@ -87,7 +87,7 @@ const A = {
87
87
  max: "Max",
88
88
  range: "Range",
89
89
  totalItems: "Total Items"
90
- }, R = {
90
+ }, O = {
91
91
  none: "-None-",
92
92
  count: "Count",
93
93
  sum: "Sum",
@@ -118,11 +118,11 @@ function b(e) {
118
118
  return "string";
119
119
  }
120
120
  }
121
- function N(e) {
122
- const { value_type: n, data_type: a } = e;
123
- if (n === "number" || n === "currency" || n === "percentage" || n === "decimal_percentage" || n === "date" || n === "array" || n === "link")
124
- return n;
125
- switch (a) {
121
+ function _(e) {
122
+ const { value_type: r, data_type: i } = e;
123
+ if (r === "number" || r === "currency" || r === "percentage" || r === "decimal_percentage" || r === "date" || r === "array" || r === "link")
124
+ return r;
125
+ switch (i) {
126
126
  case "number":
127
127
  return "number";
128
128
  case "currency":
@@ -136,124 +136,124 @@ function N(e) {
136
136
  case "link":
137
137
  return "link";
138
138
  default:
139
- return n;
139
+ return r;
140
140
  }
141
141
  }
142
- function w(e, n) {
143
- return n && Object.prototype.hasOwnProperty.call(n, e.value) ? b(n[e.value]) : N(e);
142
+ function F(e, r) {
143
+ return r && Object.prototype.hasOwnProperty.call(r, e.value) ? b(r[e.value]) : _(e);
144
144
  }
145
- function O(e) {
146
- const n = (a) => a.map((t) => ({ id: t, label: A[t] }));
145
+ function C(e) {
146
+ const r = (i) => i.map((n) => ({ id: n, label: A[n] }));
147
147
  switch (e) {
148
148
  case "number":
149
149
  case "currency":
150
150
  case "percentage":
151
151
  case "decimal_percentage":
152
- return n(["none", "count", "sum", "average", "median", "min", "max"]);
152
+ return r(["none", "count", "sum", "average", "median", "min", "max"]);
153
153
  case "date":
154
- return n(["none", "count", "min", "max", "range"]);
154
+ return r(["none", "count", "min", "max", "range"]);
155
155
  case "array":
156
- return n(["none", "count", "totalItems"]);
156
+ return r(["none", "count", "totalItems"]);
157
157
  case "string":
158
158
  case "link":
159
159
  default:
160
- return n(["none", "count"]);
160
+ return r(["none", "count"]);
161
161
  }
162
162
  }
163
- const _ = (e) => e == null ? !0 : typeof e == "string" ? e.trim() === "" : Array.isArray(e) ? e.length === 0 : !1, h = (e) => {
163
+ const h = (e) => e == null ? !0 : typeof e == "string" ? e.trim() === "" : Array.isArray(e) ? e.length === 0 : !1, I = (e) => {
164
164
  if (e == null || e === "") return null;
165
165
  if (typeof e == "number") return Number.isFinite(e) ? e : null;
166
166
  if (typeof e == "string") {
167
- const n = e.replace(/[^0-9.-]/g, "");
168
- if (n === "" || n === "-" || n === ".") return null;
169
- const a = Number(n);
170
- return Number.isFinite(a) ? a : null;
167
+ const r = e.replace(/[^0-9.-]/g, "");
168
+ if (r === "" || r === "-" || r === ".") return null;
169
+ const i = Number(r);
170
+ return Number.isFinite(i) ? i : null;
171
171
  }
172
172
  return null;
173
- }, I = (e) => {
173
+ }, S = (e) => {
174
174
  if (e == null || e === "") return null;
175
175
  if (e instanceof Date) return Number.isNaN(e.getTime()) ? null : e;
176
- const n = new Date(String(e));
177
- return Number.isNaN(n.getTime()) ? null : n;
178
- }, c = (e) => Number.isFinite(e) ? Number.isInteger(e) ? e.toLocaleString() : e.toLocaleString(void 0, { maximumFractionDigits: 2 }) : "—";
179
- function d(e, n) {
180
- return Object.prototype.hasOwnProperty.call(e, n) ? e[n] : y(e, n);
176
+ const r = new Date(String(e));
177
+ return Number.isNaN(r.getTime()) ? null : r;
178
+ }, x = (e) => Number.isFinite(e) ? Number.isInteger(e) ? e.toLocaleString() : e.toLocaleString(void 0, { maximumFractionDigits: 2 }) : "—", E = (e, r) => Number.isFinite(e) ? r === "currency" ? e.toLocaleString(void 0, { style: "currency", currency: "USD" }) : r === "percentage" ? `${e.toLocaleString(void 0, { maximumFractionDigits: 2 })}%` : r === "decimal_percentage" ? `${(e * 100).toLocaleString(void 0, { maximumFractionDigits: 2 })}%` : x(e) : "—";
179
+ function d(e, r) {
180
+ return Object.prototype.hasOwnProperty.call(e, r) ? e[r] : p(e, r);
181
181
  }
182
- function L(e, n, a) {
183
- if (a === "none") return "";
184
- const t = e.map((i) => d(i, n));
185
- switch (a) {
182
+ function M(e, r, i, n) {
183
+ if (i === "none") return "";
184
+ const c = e.map((t) => d(t, r)), a = (t) => E(t, n);
185
+ switch (i) {
186
186
  case "count":
187
- return String(t.length);
187
+ return String(c.length);
188
188
  case "sum":
189
189
  case "average":
190
190
  case "median":
191
191
  case "min":
192
192
  case "max": {
193
- const i = [];
194
- for (const r of t) {
195
- const u = h(r);
196
- u !== null && i.push(u);
193
+ const t = [];
194
+ for (const u of c) {
195
+ const o = I(u);
196
+ o !== null && t.push(o);
197
197
  }
198
- if (i.length === 0) return "—";
199
- if (a === "sum") return c(i.reduce((r, u) => r + u, 0));
200
- if (a === "average") return c(i.reduce((r, u) => r + u, 0) / i.length);
201
- if (a === "median") {
202
- const r = [...i].sort((f, o) => f - o), u = Math.floor(r.length / 2), s = r.length % 2 === 0 ? (r[u - 1] + r[u]) / 2 : r[u];
203
- return c(s);
198
+ if (t.length === 0) return "—";
199
+ if (i === "sum") return a(t.reduce((u, o) => u + o, 0));
200
+ if (i === "average") return a(t.reduce((u, o) => u + o, 0) / t.length);
201
+ if (i === "median") {
202
+ const u = [...t].sort((m, l) => m - l), o = Math.floor(u.length / 2), s = u.length % 2 === 0 ? (u[o - 1] + u[o]) / 2 : u[o];
203
+ return a(s);
204
204
  }
205
- return c(a === "min" ? i.reduce((r, u) => u < r ? u : r) : i.reduce((r, u) => u > r ? u : r));
205
+ return a(i === "min" ? t.reduce((u, o) => o < u ? o : u) : t.reduce((u, o) => o > u ? o : u));
206
206
  }
207
207
  case "range": {
208
- let i = Number.POSITIVE_INFINITY, r = Number.NEGATIVE_INFINITY, u = !1;
209
- for (const f of t) {
210
- const o = I(f);
211
- if (!o) continue;
212
- u = !0;
213
- const l = o.getTime();
214
- l < i && (i = l), l > r && (r = l);
208
+ let t = Number.POSITIVE_INFINITY, u = Number.NEGATIVE_INFINITY, o = !1;
209
+ for (const m of c) {
210
+ const l = S(m);
211
+ if (!l) continue;
212
+ o = !0;
213
+ const f = l.getTime();
214
+ f < t && (t = f), f > u && (u = f);
215
215
  }
216
- if (!u) return "—";
217
- const s = Math.round((r - i) / 864e5);
216
+ if (!o) return "—";
217
+ const s = Math.round((u - t) / 864e5);
218
218
  return `${s} day${s === 1 ? "" : "s"}`;
219
219
  }
220
220
  case "totalItems": {
221
- let i = 0;
222
- for (const r of t) Array.isArray(r) && (i += r.length);
223
- return String(i);
221
+ let t = 0;
222
+ for (const u of c) Array.isArray(u) && (t += u.length);
223
+ return String(t);
224
224
  }
225
225
  default:
226
226
  return "";
227
227
  }
228
228
  }
229
- function C(e, n) {
230
- if (!n) return [{ key: "__all__", label: "", rows: e }];
231
- const a = /* @__PURE__ */ new Map();
232
- for (const t of e) {
233
- const i = d(t, n), r = _(i) ? "__empty__" : String(i), u = a.get(r);
234
- u ? u.push(t) : a.set(r, [t]);
229
+ function G(e, r) {
230
+ if (!r) return [{ key: "__all__", label: "", rows: e }];
231
+ const i = /* @__PURE__ */ new Map();
232
+ for (const n of e) {
233
+ const c = d(n, r), a = h(c) ? "__empty__" : String(c), t = i.get(a);
234
+ t ? t.push(n) : i.set(a, [n]);
235
235
  }
236
- return Array.from(a.entries()).map(([t, i]) => ({
237
- key: t,
238
- label: t === "__empty__" ? "(Empty)" : t,
239
- rows: i
236
+ return Array.from(i.entries()).map(([n, c]) => ({
237
+ key: n,
238
+ label: n === "__empty__" ? "(Empty)" : n,
239
+ rows: c
240
240
  }));
241
241
  }
242
242
  export {
243
- R as AGGREGATION_CELL_LABELS,
243
+ O as AGGREGATION_CELL_LABELS,
244
244
  A as AGGREGATION_LABELS,
245
245
  T as ROW_HEIGHT_CLASS,
246
- S as alignmentClass,
247
- v as applyHideAndReorder,
248
- L as computeAggregation,
249
- O as getAggregationsForType,
250
- p as getDefaultAlignmentForType,
251
- x as getEffectiveAlignment,
252
- y as getNestedValue,
253
- g as getObjectLabelByPath,
246
+ w as alignmentClass,
247
+ R as applyHideAndReorder,
248
+ M as computeAggregation,
249
+ C as getAggregationsForType,
250
+ N as getDefaultAlignmentForType,
251
+ L as getEffectiveAlignment,
252
+ p as getNestedValue,
253
+ y as getObjectLabelByPath,
254
254
  d as getRowColumnValue,
255
- C as groupRows,
255
+ G as groupRows,
256
256
  b as mapOmDataTypeToAggregationValueType,
257
- w as resolveAggregationValueType,
258
- E as resolveColumnLabel
257
+ F as resolveAggregationValueType,
258
+ v as resolveColumnLabel
259
259
  };
@@ -0,0 +1,9 @@
1
+ export declare function useUndoRedoShortcuts(options: {
2
+ enabled?: boolean;
3
+ canUndo: boolean;
4
+ canRedo: boolean;
5
+ onUndo: () => void;
6
+ onRedo: () => void;
7
+ isDisabled?: boolean;
8
+ }): void;
9
+ //# sourceMappingURL=useUndoRedoShortcuts.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useUndoRedoShortcuts.d.ts","sourceRoot":"","sources":["../../../../src/patterns/table/toolbar/useUndoRedoShortcuts.ts"],"names":[],"mappings":"AAUA,wBAAgB,oBAAoB,CAAC,OAAO,EAAE;IAC5C,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,EAAE,MAAM,IAAI,CAAC;IACnB,MAAM,EAAE,MAAM,IAAI,CAAC;IACnB,UAAU,CAAC,EAAE,OAAO,CAAC;CACtB,GAAG,IAAI,CA6BP"}
@@ -0,0 +1,21 @@
1
+ import { useEffect as l } from "react";
2
+ function y(t) {
3
+ if (!(t instanceof HTMLElement)) return !1;
4
+ const o = t.tagName;
5
+ return !!(o === "INPUT" || o === "TEXTAREA" || o === "SELECT" || t.isContentEditable);
6
+ }
7
+ function m(t) {
8
+ const { enabled: o = !0, canUndo: r, canRedo: s, onUndo: i, onRedo: a, isDisabled: u = !1 } = t;
9
+ l(() => {
10
+ if (!o || u) return;
11
+ const d = (e) => {
12
+ if (y(e.target) || !(e.metaKey || e.ctrlKey) || e.altKey) return;
13
+ const n = e.key.toLowerCase(), f = n === "z" && !e.shiftKey, c = n === "z" && e.shiftKey || n === "y";
14
+ f && r ? (e.preventDefault(), e.stopPropagation(), i()) : c && s && (e.preventDefault(), e.stopPropagation(), a());
15
+ };
16
+ return window.addEventListener("keydown", d, { capture: !0 }), () => window.removeEventListener("keydown", d, { capture: !0 });
17
+ }, [o, u, r, s, i, a]);
18
+ }
19
+ export {
20
+ m as useUndoRedoShortcuts
21
+ };
@@ -1,7 +1,8 @@
1
1
  import { ReactNode } from 'react';
2
2
  import { TablePaginationConfig } from './TablePagination';
3
- import { AlignToolConfig, GroupByToolConfig, HideFieldsToolConfig, RowHeightToolConfig, SearchToolConfig, SummaryToolConfig, CellAlignment, ColumnMenuAction, ColumnMenuCapabilities, RowActionsConfig, RowGroup, SummaryFooterRowProps } from './toolbar';
3
+ import { UndoRedoToolConfig } from './toolbar/TableToolbar';
4
4
  import { LegacyFilterToolConfig, LegacySortToolConfig } from './toolbar/legacyToolbarTypes';
5
+ import { AlignToolConfig, GroupByToolConfig, HideFieldsToolConfig, RowHeightToolConfig, SearchToolConfig, SummaryToolConfig, CellAlignment, ColumnMenuAction, ColumnMenuCapabilities, RowActionsConfig, RowGroup, SummaryFooterRowProps } from './toolbar';
5
6
  /** Value type used for alignment defaults and aggregation eligibility. */
6
7
  export type TableColumnValueType = "string" | "number" | "currency" | "date" | "percentage" | "decimal_percentage" | "array" | "link";
7
8
  /**
@@ -44,6 +45,8 @@ export type TableWrapperToolbarConfig = {
44
45
  sortContent?: ReactNode;
45
46
  /** Consumer-rendered filter UI. Required for filter popover content when `filter` is configured. */
46
47
  filterContent?: ReactNode;
48
+ /** Consumer-owned undo/redo state — renders toolbar buttons and keyboard shortcuts when provided. */
49
+ undoRedo?: UndoRedoToolConfig;
47
50
  };
48
51
  /** Controlled selection value for TableWrapper (`"all"` = every row in the current body). */
49
52
  export type TableWrapperSelectedKeys = "all" | ReadonlySet<string>;
@@ -79,6 +82,7 @@ export type TableWrapperProps = {
79
82
  columns: ColumnConfig[];
80
83
  renderRowCell: (key: string, val: any, item: any) => ReactNode;
81
84
  onRowClick?: (item: any) => void;
85
+ onRowHover?: (item: any, isHovered: boolean) => void;
82
86
  arialabel?: string;
83
87
  size?: "sm" | "md" | "xs";
84
88
  allowDefaultRowClass?: boolean;
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/patterns/table/types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/patterns/table/types.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,41 @@
1
+ import { PropsWithChildren } from 'react';
2
+ import { TableUndoSnapshotSources } from './tableUndoRedo';
3
+ export type UseTableUndoRedoOptions = TableUndoSnapshotSources & {
4
+ enabled?: boolean;
5
+ tableId?: string;
6
+ sharedUndoGroup?: TableUndoRedoScopeApi | null;
7
+ onDataRestore?: (data: unknown[]) => void;
8
+ };
9
+ export type TableUndoRedoState = {
10
+ canUndo: boolean;
11
+ canRedo: boolean;
12
+ undo: () => void;
13
+ redo: () => void;
14
+ commitBeforeMutation: () => void;
15
+ shortcut?: boolean;
16
+ };
17
+ export type TableUndoRedoRegistration = {
18
+ tableId: string;
19
+ canUndo: boolean;
20
+ canRedo: boolean;
21
+ undo: () => void;
22
+ redo: () => void;
23
+ };
24
+ export type TableUndoRedoScopeApi = {
25
+ canUndo: boolean;
26
+ canRedo: boolean;
27
+ undo: () => void;
28
+ redo: () => void;
29
+ recordCommit: (tableId: string) => void;
30
+ registerTable: (registration: TableUndoRedoRegistration) => () => void;
31
+ unregisterTable: (tableId: string) => void;
32
+ };
33
+ export declare function useTableUndoRedoScope(): TableUndoRedoScopeApi | null;
34
+ export declare function TableUndoRedoProvider({ children, shortcuts, isDisabled, }: PropsWithChildren<{
35
+ shortcuts?: boolean;
36
+ isDisabled?: boolean;
37
+ }>): import('react').FunctionComponentElement<import('react').ProviderProps<TableUndoRedoScopeApi | null>>;
38
+ export declare function useTableUndoRedo({ enabled, tableId, sharedUndoGroup, toolbar, columnAlignments, summaryFooterProps, appliedFilterConditions, data, getData, onDataRestore, }: UseTableUndoRedoOptions): TableUndoRedoState;
39
+ export type { TableUndoSnapshot } from './tableUndoRedo';
40
+ export { applyTableUndoSnapshot, captureTableUndoSnapshot, wrapColumnHeaderActionWithUndoRedo, wrapEditChromeWithUndoRedo, wrapRowActionsWithUndoRedo, wrapSummaryFooterWithUndoRedo, wrapToolbarWithUndoRedo, } from './tableUndoRedo';
41
+ //# sourceMappingURL=useTableUndoRedo.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useTableUndoRedo.d.ts","sourceRoot":"","sources":["../../../src/patterns/table/useTableUndoRedo.ts"],"names":[],"mappings":"AAAA,OAAO,EAGL,KAAK,iBAAiB,EAOvB,MAAM,OAAO,CAAC;AACf,OAAO,EAIL,KAAK,wBAAwB,EAC9B,MAAM,iBAAiB,CAAC;AAIzB,MAAM,MAAM,uBAAuB,GAAG,wBAAwB,GAAG;IAC/D,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,eAAe,CAAC,EAAE,qBAAqB,GAAG,IAAI,CAAC;IAC/C,aAAa,CAAC,EAAE,CAAC,IAAI,EAAE,OAAO,EAAE,KAAK,IAAI,CAAC;CAC3C,CAAC;AAEF,MAAM,MAAM,kBAAkB,GAAG;IAC/B,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,EAAE,OAAO,CAAC;IACjB,IAAI,EAAE,MAAM,IAAI,CAAC;IACjB,IAAI,EAAE,MAAM,IAAI,CAAC;IACjB,oBAAoB,EAAE,MAAM,IAAI,CAAC;IACjC,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB,CAAC;AAEF,MAAM,MAAM,yBAAyB,GAAG;IACtC,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,EAAE,OAAO,CAAC;IACjB,IAAI,EAAE,MAAM,IAAI,CAAC;IACjB,IAAI,EAAE,MAAM,IAAI,CAAC;CAClB,CAAC;AAEF,MAAM,MAAM,qBAAqB,GAAG;IAClC,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,EAAE,OAAO,CAAC;IACjB,IAAI,EAAE,MAAM,IAAI,CAAC;IACjB,IAAI,EAAE,MAAM,IAAI,CAAC;IACjB,YAAY,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;IACxC,aAAa,EAAE,CAAC,YAAY,EAAE,yBAAyB,KAAK,MAAM,IAAI,CAAC;IACvE,eAAe,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;CAC5C,CAAC;AAYF,wBAAgB,qBAAqB,IAAI,qBAAqB,GAAG,IAAI,CAEpE;AAED,wBAAgB,qBAAqB,CAAC,EACpC,QAAQ,EACR,SAAgB,EAChB,UAAkB,GACnB,EAAE,iBAAiB,CAAC;IAAE,SAAS,CAAC,EAAE,OAAO,CAAC;IAAC,UAAU,CAAC,EAAE,OAAO,CAAA;CAAE,CAAC,yGA8GlE;AAED,wBAAgB,gBAAgB,CAAC,EAC/B,OAAe,EACf,OAAO,EACP,eAAe,EACf,OAAO,EACP,gBAAgB,EAChB,kBAAkB,EAClB,uBAAuB,EACvB,IAAI,EACJ,OAAO,EACP,aAAa,GACd,EAAE,uBAAuB,GAAG,kBAAkB,CAqG9C;AAED,YAAY,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AACzD,OAAO,EACL,sBAAsB,EACtB,wBAAwB,EACxB,kCAAkC,EAClC,0BAA0B,EAC1B,0BAA0B,EAC1B,6BAA6B,EAC7B,uBAAuB,GACxB,MAAM,iBAAiB,CAAC"}
@@ -0,0 +1,168 @@
1
+ import { useRef as y, useState as X, useCallback as f, useEffect as A, useMemo as M, createElement as q, createContext as D, useContext as J } from "react";
2
+ import { captureTableUndoSnapshot as Q, applyTableUndoSnapshot as O } from "./tableUndoRedo.js";
3
+ import { wrapColumnHeaderActionWithUndoRedo as I, wrapEditChromeWithUndoRedo as rr, wrapRowActionsWithUndoRedo as er, wrapSummaryFooterWithUndoRedo as tr, wrapToolbarWithUndoRedo as nr } from "./tableUndoRedo.js";
4
+ const j = D(null);
5
+ function V(t) {
6
+ if (!(t instanceof HTMLElement)) return !1;
7
+ const n = t.tagName;
8
+ return !!(n === "INPUT" || n === "TEXTAREA" || n === "SELECT" || t.isContentEditable);
9
+ }
10
+ function Y() {
11
+ return J(j);
12
+ }
13
+ function $({
14
+ children: t,
15
+ shortcuts: n = !0,
16
+ isDisabled: C = !1
17
+ }) {
18
+ const a = y(/* @__PURE__ */ new Map()), c = y([]), s = y([]), [S, E] = X(0), u = f(() => {
19
+ E((e) => e + 1);
20
+ }, []), U = f(
21
+ (e) => {
22
+ a.current.delete(e), c.current = c.current.filter((r) => r !== e), s.current = s.current.filter((r) => r !== e), u();
23
+ },
24
+ [u]
25
+ ), i = f(
26
+ (e) => (a.current.set(e.tableId, e), u(), () => U(e.tableId)),
27
+ [u, U]
28
+ ), l = f(
29
+ (e) => {
30
+ c.current = [...c.current, e], s.current = [], u();
31
+ },
32
+ [u]
33
+ ), d = f(() => {
34
+ for (; c.current.length > 0; ) {
35
+ const e = c.current[c.current.length - 1];
36
+ c.current = c.current.slice(0, -1);
37
+ const r = a.current.get(e);
38
+ if (r != null && r.canUndo) {
39
+ r.undo(), s.current = [...s.current, e], u();
40
+ return;
41
+ }
42
+ }
43
+ u();
44
+ }, [u]), T = f(() => {
45
+ for (; s.current.length > 0; ) {
46
+ const e = s.current[s.current.length - 1];
47
+ s.current = s.current.slice(0, -1);
48
+ const r = a.current.get(e);
49
+ if (r != null && r.canRedo) {
50
+ r.redo(), c.current = [...c.current, e], u();
51
+ return;
52
+ }
53
+ }
54
+ u();
55
+ }, [u]), R = c.current.some((e) => {
56
+ var r;
57
+ return (r = a.current.get(e)) == null ? void 0 : r.canUndo;
58
+ }), w = s.current.some((e) => {
59
+ var r;
60
+ return (r = a.current.get(e)) == null ? void 0 : r.canRedo;
61
+ });
62
+ A(() => {
63
+ if (!n || C) return;
64
+ const e = (r) => {
65
+ if (V(r.target) || !(r.metaKey || r.ctrlKey) || r.altKey) return;
66
+ const g = r.key.toLowerCase(), m = g === "z" && !r.shiftKey, h = g === "z" && r.shiftKey || g === "y";
67
+ m && R ? (r.preventDefault(), r.stopPropagation(), d()) : h && w && (r.preventDefault(), r.stopPropagation(), T());
68
+ };
69
+ return window.addEventListener("keydown", e, { capture: !0 }), () => window.removeEventListener("keydown", e, { capture: !0 });
70
+ }, [n, C, R, w, d, T]);
71
+ const o = M(
72
+ () => ({
73
+ canUndo: R,
74
+ canRedo: w,
75
+ undo: d,
76
+ redo: T,
77
+ recordCommit: l,
78
+ registerTable: i,
79
+ unregisterTable: U
80
+ }),
81
+ [R, w, d, T, l, i, U, S]
82
+ );
83
+ return q(j.Provider, { value: o }, t);
84
+ }
85
+ function F({
86
+ enabled: t = !1,
87
+ tableId: n,
88
+ sharedUndoGroup: C,
89
+ toolbar: a,
90
+ columnAlignments: c,
91
+ summaryFooterProps: s,
92
+ appliedFilterConditions: S,
93
+ data: E,
94
+ getData: u,
95
+ onDataRestore: U
96
+ }) {
97
+ const i = y([]), l = y([]), d = y(!1), [T, R] = X(0), w = Y(), o = C === void 0 ? w : C, e = !!(t && n && o), r = o == null ? void 0 : o.recordCommit, x = o == null ? void 0 : o.registerTable, g = o == null ? void 0 : o.unregisterTable, m = M(
98
+ () => ({
99
+ toolbar: a,
100
+ columnAlignments: c,
101
+ summaryFooterProps: s,
102
+ appliedFilterConditions: S,
103
+ data: E,
104
+ getData: u,
105
+ onDataRestore: U
106
+ }),
107
+ [a, c, s, S, E, u, U]
108
+ ), h = f(() => Q(m), [m]), P = f(() => {
109
+ !t || d.current || (i.current = [...i.current.slice(-49), h()], l.current = [], n && r && r(n), R((p) => p + 1));
110
+ }, [t, h, r, n]), v = f(() => {
111
+ if (!(!t || i.current.length === 0)) {
112
+ d.current = !0;
113
+ try {
114
+ const p = h(), W = i.current.pop();
115
+ l.current = [p, ...l.current], O(W, m);
116
+ } finally {
117
+ d.current = !1, R((p) => p + 1);
118
+ }
119
+ }
120
+ }, [t, h, m]), K = f(() => {
121
+ if (!(!t || l.current.length === 0)) {
122
+ d.current = !0;
123
+ try {
124
+ const p = h(), W = l.current.shift();
125
+ i.current = [...i.current, p], O(W, m);
126
+ } finally {
127
+ d.current = !1, R((p) => p + 1);
128
+ }
129
+ }
130
+ }, [t, h, m]), k = t && i.current.length > 0, L = t && l.current.length > 0;
131
+ A(() => {
132
+ !t || !n || !x || x({
133
+ tableId: n,
134
+ canUndo: k,
135
+ canRedo: L,
136
+ undo: v,
137
+ redo: K
138
+ });
139
+ }, [t, n, x, k, L, v, K]), A(() => {
140
+ if (!(!n || !g))
141
+ return () => g(n);
142
+ }, [n, g]);
143
+ const z = e ? o.canUndo : k, B = e ? o.canRedo : L, H = e ? o.undo : v, N = e ? o.redo : K;
144
+ return M(
145
+ () => ({
146
+ canUndo: z,
147
+ canRedo: B,
148
+ undo: H,
149
+ redo: N,
150
+ commitBeforeMutation: P,
151
+ shortcut: e ? !1 : void 0
152
+ }),
153
+ // revision drives canUndo/canRedo updates after history mutations
154
+ [z, B, H, N, P, e, T]
155
+ );
156
+ }
157
+ export {
158
+ $ as TableUndoRedoProvider,
159
+ O as applyTableUndoSnapshot,
160
+ Q as captureTableUndoSnapshot,
161
+ F as useTableUndoRedo,
162
+ Y as useTableUndoRedoScope,
163
+ I as wrapColumnHeaderActionWithUndoRedo,
164
+ rr as wrapEditChromeWithUndoRedo,
165
+ er as wrapRowActionsWithUndoRedo,
166
+ tr as wrapSummaryFooterWithUndoRedo,
167
+ nr as wrapToolbarWithUndoRedo
168
+ };